From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Kristina=20Mart=C5=A1enko?= Subject: [PATCH 1/2] staging: tidspbridge: remove driver Date: Wed, 16 Jul 2014 02:30:18 +0300 Message-ID: <1405467019-21185-1-git-send-email-kristina.martsenko@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: driverdev-devel-bounces@linuxdriverproject.org To: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Ohad Ben-Cohen , Suman Anna , Tony Lindgren , linux-omap@vger.kernel.org List-Id: linux-omap@vger.kernel.org VGhlIGRyaXZlciBoYXMgYmVlbiBicm9rZW4gYW5kIGRpc2FibGVkIGZvciBzZXZlcmFsIGtlcm5l bCB2ZXJzaW9ucyBub3cuCkl0IGRvZXNuJ3QgaGF2ZSBhIG1haW50YWluZXIgYW55bW9yZSwgYW5k IG1vc3Qgb2YgdGhlIHBlb3BsZSB3aG8ndmUKd29ya2VkIG9uIGl0IGhhdmUgbW92ZWQgb24uIFRo ZXJlJ3MgYWxzbyBzdGlsbCBhIGxvbmcgbGlzdCBvZiBpc3N1ZXMgaW4KdGhlIFRPRE8gZmlsZSBi ZWZvcmUgaXQgY2FuIGJlIG1vdmVkIG91dCBvZiBzdGFnaW5nLiBVbnRpbCBzb21lb25lIGNhbgpw dXQgaW4gdGhlIHdvcmsgdG8gbWFrZSB0aGUgZHJpdmVyIHdvcmsgYWdhaW4gYW5kIG1vdmUgaXQg b3V0IG9mCnN0YWdpbmcsIHJlbW92ZSBpdCBmcm9tIHRoZSBrZXJuZWwuCgpTaWduZWQtb2ZmLWJ5 OiBLcmlzdGluYSBNYXJ0xaFlbmtvIDxrcmlzdGluYS5tYXJ0c2Vua29AZ21haWwuY29tPgpDYzog T21hciBSYW1pcmV6IEx1bmEgPG9tYXIucmFtaXJlekBjb3BpdGwuY29tPgpDYzogU3VtYW4gQW5u YSA8cy1hbm5hQHRpLmNvbT4KQ2M6IEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNA Z21haWwuY29tPgpDYzogT2hhZCBCZW4tQ29oZW4gPG9oYWRAd2l6ZXJ5LmNvbT4KLS0tCiBNQUlO VEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgLQog ZHJpdmVycy9zdGFnaW5nL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy IC0KIGRyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMSAtCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL0NPTlRSSUJVVE9S UyB8ICAgNDUgLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vUkVB RE1FICAgfCAgIDcwIC0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vZXJy b3ItY29kZXMgIHwgIDE1NyAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvS2NvbmZpZyAg ICAgICAgICAgICAgICB8ICAgNjkgLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL01ha2Vm aWxlICAgICAgICAgICAgICAgfCAgIDMyIC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9U T0RPICAgICAgICAgICAgICAgICAgIHwgICAxOCAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS9fY21tLmggICAgICAgICAgICB8ICAgNDUgLQogZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2NvcmUvX2RlaC5oICAgICAgICAgICAgfCAgIDM1IC0KIGRyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9jb3JlL19tc2dfc20uaCAgICAgICAgIHwgIDE0MiAtCiBkcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmggICAgICAgICB8ICAzODIgLS0tCiBkcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwX3B3ci5oICAgICB8ICAgODUgLQogZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvY2hubF9zbS5jICAgICAgICAgfCAgOTA4IC0t LS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvZHNwLWNsb2NrLmMgICAgICAg fCAgMzkxIC0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYyAgICAg ICAgICAgfCAyMjQ2IC0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2NvcmUvbXNnX3NtLmMgICAgICAgICAgfCAgNTY0IC0tLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9jb3JlL3N5bmMuYyAgICAgICAgICAgIHwgIDEyMSAtCiBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMgICAgICB8IDE4MTUgLS0tLS0tLS0tLS0tCiBk cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwX3B3ci5jICB8ICA1NTYg LS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmMgICAgICAg fCAgNDQwIC0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmgg ICAgICAgfCAgMTA0IC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5j ICAgICAgICAgIHwgIDI3MiAtLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvd2R0 LmMgICAgICAgICAgICAgfCAgMTQ0IC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5s b2FkL2Nsb2FkLmMgICAgICAgIHwgMTk1OSAtLS0tLS0tLS0tLS0tCiAuLi4vc3RhZ2luZy90aWRz cGJyaWRnZS9keW5sb2FkL2Rsb2FkX2ludGVybmFsLmggICB8ICAzNDQgLS0tCiBkcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kb2ZmLmggICAgICAgICB8ICAzNTQgLS0tCiBkcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9nZXRzZWN0aW9uLmMgICB8ICA0MDcgLS0t CiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9oZWFkZXIuaCAgICAgICB8ICAg NDkgLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvbW9kdWxlX2xpc3QuaCAg fCAgMTU5IC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3BhcmFtcy5oICAg ICAgIHwgIDIyNiAtLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2Mu YyAgICAgICAgfCAgNDg2IC0tLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2Fk L3JlbG9jX3RhYmxlLmggIHwgIDEwMiAtCiAuLi4vdGlkc3BicmlkZ2UvZHlubG9hZC9yZWxvY190 YWJsZV9jNjAwMC5jICAgICAgICB8ICAyNTcgLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9keW5sb2FkL3RyYW1wLmMgICAgICAgIHwgMTE0MyAtLS0tLS0tLQogLi4uL3RpZHNwYnJpZGdl L2R5bmxvYWQvdHJhbXBfdGFibGVfYzYwMDAuYyAgICAgICAgfCAgMTY0IC0tCiBkcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMgICAgICAgICAgICAgICB8ICAxNDEgLQogZHJpdmVy cy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L0Vhc2lHbG9iYWwuaCAgICAgICAgfCAgIDQxIC0KIGRy aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaCAgICAgICAgIHwgICA3NiAt CiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvTU1VUmVnQWNNLmggICAgICAgICB8ICAy MjUgLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19kZWZzLmggICAgICAgICAg IHwgICA1OCAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMgICAgICAg ICAgICB8ICA0ODcgLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5o ICAgICAgICAgICAgfCAgMTYwIC0tCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uv X2Nobmxfc20uaCAgICAgICB8ICAxNzcgLS0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9icmRkZWZzLmggICAgICAgIHwgICAzNyAtCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvY2ZnZGVmcy5oICAgICAgICB8ICAgNjEgLQogLi4uL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubC5oICAgfCAgIDgwIC0KIC4uLi90aWRzcGJyaWRnZS9p bmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oICAgICAgIHwgICA2MyAtCiAuLi4vdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubHByaXYuaCAgICAgICB8ICAgODUgLQogLi4uL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmggICAgfCAgMTAxIC0KIC4uLi9z dGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oICAgIHwgIDMzNyAtLS0K IC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmggICAgICAgIHwgIDEw NCAtCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaCAgICB8 ICAzMjkgLS0tCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRj ZC5oICB8ICAzNTggLS0tCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2Rk ZWYuaCAgICAgICB8ICAgNzggLQogLi4uL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bi cmlkZ2UvZGJkZWZzLmggfCAgNDg4IC0tLS0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL2RibGwuaCAgIHwgICA1NiAtCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvZGJsbGRlZnMuaCAgICAgICB8ICA0MzEgLS0tCiAuLi4vc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaCAgICB8ICA2MjAgLS0tLQogLi4uL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RldmRlZnMuaCAgICAgICAgfCAgIDI2IC0KIC4uLi9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rpc3AuaCAgIHwgIDE4NiAtLQogLi4u L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmggICAgfCAgIDcxIC0K IC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oICAgIHwgIDQ2 OCAtLS0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaCAg IHwgIDQ2NyAtLS0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rz cGFwaS5oIHwgIDE2NyAtLQogLi4uL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGNo bmwuaCAgICAgICAgfCAgIDcyIC0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9k c3BkZWZzLmggICAgICAgIHwgMTA0OCAtLS0tLS0tCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9p bmNsdWRlL2RzcGJyaWRnZS9kc3BkZWguaCB8ICAgNDMgLQogLi4uL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmggfCAgIDYwIC0KIC4uLi9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvLmggIHwgICA0MSAtCiAuLi4vdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwaW9jdGwuaCAgICAgICB8ICAgNjggLQogLi4uL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwbXNnLmggfCAgIDU2IC0KIC4uLi90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oIHwgIDQ5MCAtLS0t CiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2V0c2VjdGlvbi5oICAgICB8ICAx MDggLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2doLmgg fCAgIDMyIC0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ob3N0X29zLmggICAg ICAgIHwgICA1NyAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2UvaW8uaCB8ICAgODAgLQogLi4uL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2UvaW9fc20uaCAgfCAgMTYwIC0tCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9tYnhfc2guaCB8ICAxNDQgLQogLi4uL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL21lbWRlZnMuaCAgICAgICAgfCAgIDMwIC0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL21nci5oICAgIHwgIDIwNSAtLQogLi4uL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL21ncnByaXYuaCAgICAgICAgfCAgIDQ1IC0KIC4uLi9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21zZy5oICAgIHwgICA1OSAtCiAuLi4vdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnZGVmcy5oICAgICAgICB8ICAgMjkgLQogLi4uL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oICAgfCAgIDU1IC0KIC4uLi90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ubGRyZGVmcy5oICAgICAgIHwgIDI1OSAtLQog Li4uL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oICAgfCAgNTI0 IC0tLS0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVmcy5oICAgICAg IHwgICAyOCAtCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZXByaXYuaCAg ICAgICB8ICAxODEgLS0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdl L250ZnkuaCAgIHwgIDIxNyAtLQogLi4uL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bi cmlkZ2UvcHJvYy5oICAgfCAgNTkxIC0tLS0KIC4uLi90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9wcm9jcHJpdi5oICAgICAgIHwgICAyNSAtCiAuLi4vc3RhZ2luZy90aWRzcGJyaWRnZS9p bmNsdWRlL2RzcGJyaWRnZS9wd3IuaCAgICB8ICAxMTMgLQogLi4uL2luY2x1ZGUvZHNwYnJpZGdl L3Jlc291cmNlY2xlYW51cC5oICAgICAgICAgICAgfCAgIDQxIC0KIC4uLi9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oICAgIHwgIDE1NiAtCiAuLi4vc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXNfc2guaCB8ICAgODYgLQogLi4uL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jtc3R5cGVzLmggICAgICAgfCAgIDI0IC0KIC4uLi9z dGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm0uaCAgIHwgIDMwNiAtLQog Li4uL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmggICAgICAgfCAgIDQ0 IC0KIC4uLi9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N5bmMuaCAgIHwg IDExOSAtCiAuLi4vdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXVpZHV0aWwuaCAgICAg ICB8ICAgMjQgLQogLi4uL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0 LmggICAgfCAgIDc5IC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmwuYyAg ICAgICAgICAgIHwgIDExNiAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jaG5s b2JqLmggICAgICAgICB8ICAgNDYgLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3Iv Y21tLmMgICAgICAgICAgICAgfCAgOTE1IC0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL3BtZ3IvY29kLmMgICAgICAgICAgICAgfCAgNTM3IC0tLS0KIGRyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9wbWdyL2RibGwuYyAgICAgICAgICAgIHwgMTQyMSAtLS0tLS0tLS0KIGRyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2Rldi5jICAgICAgICAgICAgIHwgIDk2OSAtLS0t LS0tCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYyAgICAgICAgICAgICB8 ICA0ODcgLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZHNwYXBpLmMgICAg ICAgICAgfCAxODQxIC0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3Bt Z3IvaW8uYyAgICAgICAgICAgICAgfCAgIDkzIC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9wbWdyL2lvb2JqLmggICAgICAgICAgIHwgICAzOCAtCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2UvcG1nci9tc2cuYyAgICAgICAgICAgICB8ICAgOTEgLQogZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL3BtZ3IvbXNnb2JqLmggICAgICAgICAgfCAgIDM4IC0KIGRyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9ybWdyL2RiZGNkLmMgICAgICAgICAgIHwgMTQ4NCAtLS0tLS0tLS0tCiBk cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kaXNwLmMgICAgICAgICAgICB8ICA2NTUg LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydi5jICAgICAgICAgICAg IHwgIDgxNiAtLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydl9pbnRl cmZhY2UuYyAgIHwgIDY1MCAtLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Iv ZHNwZHJ2LmMgICAgICAgICAgfCAgMTM5IC0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9y bWdyL21nci5jICAgICAgICAgICAgIHwgIDM1MiAtLS0KIGRyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9ybWdyL25sZHIuYyAgICAgICAgICAgIHwgMTg2MSAtLS0tLS0tLS0tLS0KIGRyaXZlcnMv c3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25vZGUuYyAgICAgICAgICAgIHwgMzAzMSAtLS0tLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHJvYy5jICAg ICAgICAgICAgfCAxODM2IC0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L3JtZ3IvcHdyLmMgICAgICAgICAgICAgfCAgMTc2IC0tCiBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2Uvcm1nci9ybW0uYyAgICAgICAgICAgICB8ICA0NTYgLS0tCiBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2Uvcm1nci9zdHJtLmMgICAgICAgICAgICB8ICA3MzMgLS0tLS0KIDEyNyBmaWxl cyBjaGFuZ2VkLCA0NDc1NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9DT05UUklCVVRPUlMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9SRUFE TUUKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1l bnRhdGlvbi9lcnJvci1jb2RlcwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9LY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL1RPRE8KIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2UvY29yZS9fY21tLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlk c3BicmlkZ2UvY29yZS9fZGVoLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvY29yZS9fbXNnX3NtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwX3B3ci5oCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvY2hubF9zbS5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvZHNwLWNsb2NrLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19z bS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUv bXNnX3NtLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv Y29yZS9zeW5jLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS90aW9tYXAzNDMwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwX3B3ci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvd2R0LmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9j bG9hZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5 bmxvYWQvZGxvYWRfaW50ZXJuYWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9keW5sb2FkL2RvZmYuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2dldHNlY3Rpb24uYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2hlYWRlci5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvbW9kdWxlX2xp c3QuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5s b2FkL3BhcmFtcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2R5bmxvYWQvcmVsb2MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9yZWxvY190YWJsZV9jNjAwMC5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvdHJhbXAu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2Fk L3RyYW1wX3RhYmxlX2M2MDAwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvZ2VuL2doLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvaHcvRWFzaUdsb2JhbC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3RpZHNwYnJpZGdlL2h3L01NVUFjY0ludC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L01NVVJlZ0FjTS5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X2RlZnMuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9fY2hubF9zbS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2JyZGRlZnMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jZmdkZWZzLmgKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2UvY2hubC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2luY2x1ZGUvZHNwYnJpZGdlL2NobmxkZWZzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubHByaXYuaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9jbGsuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9p bmNsdWRlL2RzcGJyaWRnZS9jbW0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY29kLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvZGJkY2QuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRjZGRlZi5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGVmcy5oCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL2RibGwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsZGVmcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rldi5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdl L2RldmRlZnMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvZHNwYXBpLWlvY3RsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwYXBpLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwY2hu bC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWguaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkcnYu aAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRl L2RzcGJyaWRnZS9kc3Bpby5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3RsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwbXNnLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uv Z2guaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNs dWRlL2RzcGJyaWRnZS9ob3N0X29zLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb19zbS5oCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL21ieF9zaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21lbWRlZnMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3IuaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9tZ3Jwcml2LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnZGVmcy5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25s ZHIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNs dWRlL2RzcGJyaWRnZS9ubGRyZGVmcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVm cy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL25vZGVwcml2LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbnRmeS5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9wcm9jcHJpdi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51 cC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL3JtbS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jtc19zaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jtc3R5cGVzLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2Uvc3RybS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3luYy5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL3V1aWR1dGlsLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jaG5sLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jaG5sb2JqLmgKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jbW0uYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NvZC5jCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGJsbC5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGV2LmMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RzcGFwaS5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW8uYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2lvb2Jq LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9t c2cuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdy L21zZ29iai5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L3JtZ3IvZGJkY2QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9ybWdyL2Rpc3AuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9ybWdyL2Rydi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL3JtZ3IvZHJ2X2ludGVyZmFjZS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNwZHJ2LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9tZ3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25vZGUuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9zdHJtLmMKCmRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDQxYzE2MjkuLjJkODQ4 NTUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC04NjQwLDEx ICs4NjQwLDYgQEAgVzoJaHR0cDovL3d3dy5saW51eC1zcGVha3VwLm9yZy8KIFM6CU9kZCBGaXhl cwogRjoJZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvCiAKLVNUQUdJTkcgLSBUSSBEU1AgQlJJREdF IERSSVZFUlMKLU06CU9tYXIgUmFtaXJleiBMdW5hIDxvbWFyLnJhbWlyZXpAY29waXRsLmNvbT4K LVM6CU9kZCBGaXhlcwotRjoJZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlLwotCiBTVEFHSU5H IC0gVVNCIEVORSBTTS9NUyBDQVJEIFJFQURFUiBEUklWRVIKIE06CUFsIENobyA8YWNob0Bub3Zl bGwuY29tPgogUzoJT2RkIEZpeGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZp ZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IDBmZDg3NDQuLjEyYjA5MmMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29u ZmlnCkBAIC03NCw4ICs3NCw2IEBAIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmln IgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy94Z2lmYi9LY29uZmlnIgogCi1zb3VyY2UgImRy aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3Rh Z2luZy9xdWlja3N0YXJ0L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2VteHhf dWRjL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2 ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggOWFlZWNjOS4uMjlmYTVkZiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpA QCAtMzEsNyArMzEsNiBAQCBvYmotJChDT05GSUdfVk1FX0JVUykJCSs9IHZtZS8KIG9iai0kKENP TkZJR19EWF9TRVApICAgICAgICAgICAgKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlp by8KIG9iai0kKENPTkZJR19GQl9YR0kpCQkrPSB4Z2lmYi8KLW9iai0kKENPTkZJR19USURTUEJS SURHRSkJKz0gdGlkc3BicmlkZ2UvCiBvYmotJChDT05GSUdfQUNQSV9RVUlDS1NUQVJUKQkrPSBx dWlja3N0YXJ0Lwogb2JqLSQoQ09ORklHX1VTQl9FTVhYKQkJKz0gZW14eF91ZGMvCiBvYmotJChD T05GSUdfVVNCX0VORVNUT1JBR0UpCSs9IGtldWNyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vQ09OVFJJQlVUT1JTIGIvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vQ09OVFJJQlVUT1JTCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA4NmY1Nzg3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL0NPTlRSSUJVVE9SUworKysgL2Rldi9udWxsCkBAIC0x LDQ1ICswLDAgQEAKLVRJIERTUC9CcmlkZ2UgRHJpdmVyIC0gQ29udHJpYnV0b3JzIEZpbGUKLQot VGhlIERTUC9CcmlkZ2UgcHJvamVjdCB3aXNoIHRvIHRoYW5rIGFsbCBvZiBpdHMgY29udHJpYnV0 b3JzLCBjdXJyZW50IGJyaWRnZQotZHJpdmVyIGlzIHRoZSByZXN1bHQgb2YgdGhlIHdvcmsgb2Yg YWxsIG9mIHRoZW0uIElmIGFueSBuYW1lIGlzIGFjY2lkZW50YWxseQotb21pdHRlZCwgbGV0IHVz IGtub3cgYnkgc2VuZGluZyBhIG1haWwgdG8gb21hci5yYW1pcmV6QHRpLmNvbSBvcgoteDA5NTg0 MEB0aS5jb20uCi0KLVBsZWFzZSBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBhbHBoYWJldGlj YWwgb3JkZXIuCi0KLQlTdW1hbiBBbm5hCi0JU3JpcGFsIEJhZ2FkaWEKLQlGZWxpcGUgQmFsYmkK LQlPaGFkIEJlbi1Db2hlbgotCVBoaWwgQ2FybW9keQotCURlZXBhayBDaGl0cmlraQotCUZlbGlw ZSBDb250cmVyYXMKLQlIaXJvc2hpIERveXUKLQlTZXRoIEZvcnNoZWUKLQlJdmFuIEdvbWV6IENh c3RlbGxhbm9zCi0JTWFyayBHcm9zZW4KLQlSYW1lc2ggR3VwdGEgRwotCUZlcm5hbmRvIEd1em1h biBMdWdvCi0JQXhlbCBIYXNsYW0KLQlKYW5ldCBIZWFkCi0JU2hpdmFuYW5kYSBIZWJiYXIKLQlI YXJpIEthbmlnZXJpCi0JVG9ueSBMaW5kZ3JlbgotCUFudG9uaW8gTHVuYQotCUhhcmkgTmFnYWxs YQotCU5pc2hhbnRoIE1lbm9uCi0JQW1leWEgUGFsYW5kZQotCVZpamF5IFBhc2FtCi0JR2lsYmVy dCBQaXRuZXkKLQlPbWFyIFJhbWlyZXogTHVuYQotCUVybmVzdG8gUmFtb3MKLQlDaHJpcyBSaW5n Ci0JTGFycnkgU2NoaWVmZXIKLQlSZWJlY2NhIFNjaHVsdHogWmF2aW4KLQlCaGF2aW4gU2hhaAot CUFuZHkgU2hldmNoZW5rbwotCUplZmYgVGF5bG9yCi0JUm9tYW4gVGVyZXNob25rb3YKLQlBcm1h bmRvIFVyaWJlIGRlIExlb24KLQlOaXNjaGFsIFZhcmlkZQotCVdlbmJpYW8gV2FuZwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vUkVBRE1FIGIv ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vUkVBRE1FCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjZkMzcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0x LDcwICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IERTUC9CSU9TIEJyaWRn ZSByZWxlYXNlCi0KLURTUC9CSU9TIEJyaWRnZSBvdmVydmlldwotPT09PT09PT09PT09PT09PT09 PT09PT09Ci0KLURTUC9CSU9TIEJyaWRnZSBpcyBkZXNpZ25lZCBmb3IgcGxhdGZvcm1zIHRoYXQg Y29udGFpbiBhIEdQUCBhbmQgb25lIG9yIG1vcmUKLWF0dGFjaGVkIERTUHMuICBUaGUgR1BQIGlz IGNvbnNpZGVyZWQgdGhlIG1hc3RlciBvciAiaG9zdCIgcHJvY2Vzc29yLCBhbmQgdGhlCi1hdHRh Y2hlZCBEU1BzIGFyZSBwcm9jZXNzaW5nIHJlc291cmNlcyB0aGF0IGNhbiBiZSB1dGlsaXplZCBi eSBhcHBsaWNhdGlvbnMKLWFuZCBkcml2ZXJzIHJ1bm5pbmcgb24gdGhlIEdQUC4KLQotVGhlIGFi c3RyYWN0aW9uIHRoYXQgRFNQL0JJT1MgQnJpZGdlIHN1cHBsaWVzLCBpcyBhIGRpcmVjdCBsaW5r IGJldHdlZW4gYSBHUFAKLXByb2dyYW0gYW5kIGEgRFNQIHRhc2suICBUaGlzIGNvbW11bmljYXRp b24gbGluayBpcyBwYXJ0aXRpb25lZCBpbnRvIHR3bwotdHlwZXMgb2Ygc3ViLWxpbmtzOiAgbWVz c2FnaW5nIChzaG9ydCwgZml4ZWQtbGVuZ3RoIHBhY2tldHMpIGFuZCBkYXRhCi1zdHJlYW1pbmcg KG11bHRpcGxlLCBsYXJnZSBidWZmZXJzKS4gIEVhY2ggc3ViLWxpbmsgb3BlcmF0ZXMgaW5kZXBl bmRlbnRseSwKLWFuZCBmZWF0dXJlcyBpbi1vcmRlciBkZWxpdmVyeSBvZiBkYXRhLCBtZWFuaW5n IHRoYXQgbWVzc2FnZXMgYXJlIGRlbGl2ZXJlZAotaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBzdWJt aXR0ZWQgdG8gdGhlIG1lc3NhZ2UgbGluaywgYW5kIHN0cmVhbSBidWZmZXJzIGFyZQotZGVsaXZl cmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc3VibWl0dGVkIHRvIHRoZSBzdHJlYW0gbGluay4K LQotSW4gYWRkaXRpb24sIGEgR1BQIGNsaWVudCBjYW4gc3BlY2lmeSB3aGF0IGlucHV0cyBhbmQg b3V0cHV0cyBhIERTUCB0YXNrCi11c2VzLiBEU1AgdGFza3MgdHlwaWNhbGx5IHVzZSBtZXNzYWdl IG9iamVjdHMgZm9yIHBhc3NpbmcgY29udHJvbCBhbmQgc3RhdHVzCi1pbmZvcm1hdGlvbiBhbmQg c3RyZWFtIG9iamVjdHMgZm9yIGVmZmljaWVudCBzdHJlYW1pbmcgb2YgcmVhbC10aW1lIGRhdGEu Ci0KLUdQUCBTb2Z0d2FyZSBBcmNoaXRlY3R1cmUKLT09PT09PT09PT09PT09PT09PT09PT09PT0K LQotQSBHUFAgYXBwbGljYXRpb24gY29tbXVuaWNhdGVzIHdpdGggaXRzIGFzc29jaWF0ZWQgRFNQ IHRhc2sgcnVubmluZyBvbiB0aGUKLURTUCBzdWJzeXN0ZW0gdXNpbmcgdGhlIERTUC9CSU9TIEJy aWRnZSBBUEkuIEZvciBleGFtcGxlLCBhIEdQUCBhdWRpbwotYXBwbGljYXRpb24gY2FuIHVzZSB0 aGUgQVBJIHRvIHBhc3MgbWVzc2FnZXMgdG8gYSBEU1AgdGFzayB0aGF0IGlzIG1hbmFnaW5nCi1k YXRhIGZsb3dpbmcgZnJvbSBhbmFsb2ctdG8tZGlnaXRhbCBjb252ZXJ0ZXJzIChBRENzKSB0byBk aWdpdGFsLXRvLWFuYWxvZwotY29udmVydGVycyAoREFDcykuCi0KLUZyb20gdGhlIHBlcnNwZWN0 aXZlIG9mIHRoZSBHUFAgT1MsIHRoZSBEU1AgaXMgdHJlYXRlZCBhcyBqdXN0IGFub3RoZXIKLXBl cmlwaGVyYWwgZGV2aWNlLiAgIE1vc3QgaGlnaCBsZXZlbCBHUFAgT1MgdHlwaWNhbGx5IHN1cHBv cnQgYSBkZXZpY2UgZHJpdmVyCi1tb2RlbCwgd2hlcmVieSBhcHBsaWNhdGlvbnMgY2FuIHNhZmVs eSBhY2Nlc3MgYW5kIHNoYXJlIGEgaGFyZHdhcmUgcGVyaXBoZXJhbAotdGhyb3VnaCBzdGFuZGFy ZCBkcml2ZXIgaW50ZXJmYWNlcy4gIFRoZXJlZm9yZSwgdG8gYWxsb3cgbXVsdGlwbGUgR1BQCi1h cHBsaWNhdGlvbnMgdG8gc2hhcmUgYWNjZXNzIHRvIHRoZSBEU1AsIHRoZSBHUFAgc2lkZSBvZiBE U1AvQklPUyBCcmlkZ2UKLWltcGxlbWVudHMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgRFNQLgot Ci1TaW5jZSBkcml2ZXIgaW50ZXJmYWNlcyBhcmUgbm90IGFsd2F5cyBzdGFuZGFyZCBhY3Jvc3Mg R1BQIE9TLCBhbmQgdG8gcHJvdmlkZQotc29tZSBsZXZlbCBvZiBpbnRlcm9wZXJhYmlsaXR5IG9m IGFwcGxpY2F0aW9uIGNvZGUgdXNpbmcgRFNQL0JJT1MgQnJpZGdlCi1iZXR3ZWVuIEdQUCBPUywg RFNQL0JJT1MgQnJpZGdlIHByb3ZpZGVzIGEgc3RhbmRhcmQgbGlicmFyeSBvZiBBUElzIHdoaWNo Ci13cmFwIGNhbGxzIGludG8gdGhlIGRldmljZSBkcml2ZXIuICAgU28sIHJhdGhlciB0aGFuIGNh bGxpbmcgR1BQIE9TIHNwZWNpZmljCi1kcml2ZXIgaW50ZXJmYWNlcywgYXBwbGljYXRpb25zIChh bmQgZXZlbiBvdGhlciBkZXZpY2UgZHJpdmVycykgY2FuIHVzZSB0aGUKLXN0YW5kYXJkIEFQSSBs aWJyYXJ5IGRpcmVjdGx5LgotCi1EU1AgU29mdHdhcmUgQXJjaGl0ZWN0dXJlCi09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0KLUZvciBEU1AvQklPUywgRFNQL0JJT1MgQnJpZGdlIGFkZHMgYSBk ZXZpY2UtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIEkvTyAoU1RSTSkKLWludGVyZmFjZSwgYSBtZXNz YWdpbmcgaW50ZXJmYWNlIChOT0RFKSwgYW5kIGEgUmVzb3VyY2UgTWFuYWdlciAoUk0pIFNlcnZl ci4KLVRoZSBSTSBTZXJ2ZXIgcnVucyBhcyBhIHRhc2sgb2YgRFNQL0JJT1MgYW5kIGlzIHN1YnNl cnZpZW50IHRvIGNvbW1hbmRzCi1hbmQgcXVlcmllcyBmcm9tIHRoZSBHUFAuICBJdCBleGVjdXRl cyBjb21tYW5kcyB0byBzdGFydCBhbmQgc3RvcCBEU1Agc2lnbmFsCi1wcm9jZXNzaW5nIG5vZGVz IGluIHJlc3BvbnNlIHRvIEdQUCBwcm9ncmFtcyBtYWtpbmcgcmVxdWVzdHMgdGhyb3VnaCB0aGUK LShHUFAtc2lkZSkgQVBJLgotCi1EU1AgdGFza3Mgc3RhcnRlZCBieSB0aGUgUk0gU2VydmVyIGFy ZSBzaW1pbGFyIHRvIGFueSBvdGhlciBEU1AgdGFzayB3aXRoIHR3bwotaW1wb3J0YW50IGRpZmZl cmVuY2VzOiAgdGhleSBtdXN0IGZvbGxvdyBhIHNwZWNpZmljIHRhc2sgbW9kZWwgY29uc2lzdGlu ZyBvZgotdGhyZWUgQy1jYWxsYWJsZSBmdW5jdGlvbnMgKG5vZGUgY3JlYXRlLCBleGVjdXRlLCBh bmQgZGVsZXRlKSwgd2l0aCBzcGVjaWZpYwotc2V0cyBvZiBhcmd1bWVudHMsIGFuZCB0aGV5IGhh dmUgYSBwcmUtZGVmaW5lZCB0YXNrIGVudmlyb25tZW50IGVzdGFibGlzaGVkCi1ieSB0aGUgUk0g U2VydmVyLgotCi1UYXNrcyBzdGFydGVkIGJ5IHRoZSBSTSBTZXJ2ZXIgY29tbXVuaWNhdGUgdXNp bmcgdGhlIFNUUk0gYW5kIE5PREUgaW50ZXJmYWNlcwotYW5kIGFjdCBhcyBzZXJ2ZXJzIGZvciB0 aGVpciBjb3JyZXNwb25kaW5nIEdQUCBjbGllbnRzLCBwZXJmb3JtaW5nIHNpZ25hbAotcHJvY2Vz c2luZyBmdW5jdGlvbnMgYXMgcmVxdWVzdGVkIGJ5IG1lc3NhZ2VzIHNlbnQgYnkgdGhlaXIgR1BQ IGNsaWVudC4KLVR5cGljYWxseSwgYSBEU1AgdGFzayBtb3ZlcyBkYXRhIGZyb20gc291cmNlIGRl dmljZXMgdG8gc2luayBkZXZpY2VzIHVzaW5nCi1kZXZpY2UgaW5kZXBlbmRlbnQgSS9PIHN0cmVh bXMsIHBlcmZvcm1pbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgcHJvY2Vzc2luZwotYW5kIHRyYW5z Zm9ybWF0aW9ucyBvbiB0aGUgZGF0YSB3aGlsZSBpdCBpcyBtb3ZlZC4gIEZvciBleGFtcGxlLCBh biBhdWRpbwotdGFzayBtaWdodCBwZXJmb3JtIGF1ZGlvIGRlY29tcHJlc3Npb24gKEFEUENNLCBN UEVHLCBDRUxQKSBvbiBkYXRhIHJlY2VpdmVkCi1mcm9tIGEgR1BQIGF1ZGlvIGRyaXZlciBhbmQg dGhlbiBzZW5kIHRoZSBkZWNvbXByZXNzZWQgbGluZWFyIHNhbXBsZXMgdG8gYQotZGlnaXRhbC10 by1hbmFsb2cgY29udmVydGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL0RvY3VtZW50YXRpb24vZXJyb3ItY29kZXMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvRG9jdW1lbnRhdGlvbi9lcnJvci1jb2RlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYWQ3M2NiYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9j dW1lbnRhdGlvbi9lcnJvci1jb2RlcworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0J CQlEU1AvQnJpZGdlIEVycm9yIENvZGUgR3VpZGUKLQotCi1TdWNjZXNzIGNvZGUgaXMgYWx3YXlz IHRha2VuIGFzIDAsIGV4Y2VwdCBmb3Igb25lIGNhc2Ugd2hlcmUgYSBzdWNjZXNzIHN0YXR1cwot ZGlmZmVyZW50IHRoYW4gMCBjYW4gYmUgcG9zc2libGUsIHRoaXMgaXMgd2hlbiBlbnVtZXJhdGlu ZyBhIHNlcmllcyBvZiBkc3AKLW9iamVjdHMsIGlmIHRoZSBlbnVtZXJhdGlvbiBkb2Vzbid0IGhh dmUgYW55IG1vcmUgb2JqZWN0cyBpdCBpcyBjb25zaWRlcmVkIGFzIGEKLXN1Y2Nlc3NmdWwgY2Fz ZS4gSW4gdGhpcyBjYXNlIGEgcG9zaXRpdmUgRU5PREFUQSBpcyByZXR1cm5lZCAoVE9ETzogQ2hh bmdlIHRvCi1hdm9pZCB0aGlzIGNhc2UpLgotCi1FcnJvciBjb2RlcyBhcmUgcmV0dXJuZWQgYXMg YSBuZWdhdGl2ZSAxLCBpZiBhbiBzcGVjaWZpYyBjb2RlIGlzIGV4cGVjdGVkLCBpdAotY2FuIGJl IHByb3BhZ2F0ZWQgdG8gdXNlciBzcGFjZSBieSByZWFkaW5nIGVycm5vIHN5bWJvbCBkZWZpbmVk IGluIGVycm5vLmgsIGZvcgotc3BlY2lmaWMgZGV0YWlscyBvbiB0aGUgaW1wbGVtZW50YXRpb24g YSBjb3B5IG9mIHRoZSBzdGFuZGFyZCB1c2VkIHNob3VsZCBiZQotcmVhZCBmaXJzdC4KLQotVGhl IGVycm9yIGNvZGVzIHVzZWQgYnkgdGhpcyBkcml2ZXIgYXJlOgotCi1bRVBFUk1dCi0gICAgR2Vu ZXJhbCBkcml2ZXIgZmFpbHVyZS4KLQotICAgIEFjY29yZGluZyB0byB0aGUgdXNlIGNhc2UgdGhl IGZvbGxvd2luZyBtaWdodCBhcHBseToKLSAgICAtIERldmljZSBpcyBpbiAnc2xlZXAvc3VzcGVu ZCcgbW9kZSBkdWUgdG8gRFBNLgotICAgIC0gVXNlciBjYW5ub3QgbWFyayBlbmQgb2Ygc3RyZWFt IG9uIGFuIGlucHV0IGNoYW5uZWwuCi0gICAgLSBSZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFs aWQgZm9yIHRoZSBub2RlIHR5cGUuCi0gICAgLSBJbnZhbGlkIGFsaWdubWVudCBmb3IgdGhlIG5v ZGUgbWVzc2FnaW5nIGJ1ZmZlci4KLSAgICAtIFRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uIGlzIGlu dmFsaWQgZm9yIHRoZSBzdHJlYW0uCi0gICAgLSBJbnZhbGlkIHN0cmVhbSBtb2RlLgotCi1bRU5P RU5UXQotICAgIFRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGZpbGUgd2FzIG5vdCBmb3VuZC4KLQot W0VTUkNIXQotICAgIEEgc2hhcmVkIG1lbW9yeSBidWZmZXIgY29udGFpbmVkIGluIGEgbWVzc2Fn ZSBvciBzdHJlYW0gY291bGQgbm90IGJlIG1hcHBlZAotICAgIHRvIHRoZSBHUFAgY2xpZW50IHBy b2Nlc3MncyB2aXJ0dWFsIHNwYWNlLgotCi1bRUlPXQotICAgIERyaXZlciBpbnRlcmZhY2UgSS9P IGVycm9yLgotCi0gICAgb3I6Ci0gICAgLSBVbmFibGUgdG8gcGx1ZyBjaGFubmVsIElTUiBmb3Ig Y29uZmlndXJlZCBJUlEuCi0gICAgLSBObyBmcmVlIEkvTyByZXF1ZXN0IHBhY2tldHMgYXJlIGF2 YWlsYWJsZS4KLQotW0VOWElPXQotICAgIFVuYWJsZSB0byBmaW5kIGEgbmFtZWQgc2VjdGlvbiBp biBEU1AgZXhlY3V0YWJsZSBvciBhIG5vbi1leGlzdGVudCBtZW1vcnkKLSAgICBzZWdtZW50IGlk ZW50aWZpZXIgd2FzIHNwZWNpZmllZC4KLQotW0VCQURGXQotICAgIEdlbmVyYWwgZXJyb3IgZm9y IGZpbGUgaGFuZGxpbmc6Ci0KLSAgICAtIFVuYWJsZSB0byBvcGVuIGZpbGUuCi0gICAgLSBVbmFi bGUgdG8gcmVhZCBmaWxlLgotICAgIC0gQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0 aGUgRFNQIGV4ZWN1dGFibGUgZmlsZS4KLQotW0VOT01FTV0KLSAgICBBIG1lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmUgb2NjdXJyZWQuCi0KLVtFQUNDRVNdCi0gICAgLSBVbmFibGUgdG8gcmVhZCBj b250ZW50IG9mIERDRCBkYXRhIHNlY3Rpb247IHRoaXMgaXMgdHlwaWNhbGx5IGNhdXNlZCBieQot ICAgIGltcHJvcGVybHkgY29uZmlndXJlZCBub2Rlcy4KLSAgICAtIFVuYWJsZSB0byBkZWNvZGUg RENEIGRhdGEgc2VjdGlvbiBjb250ZW50OyB0aGlzIGlzIHR5cGljYWxseSBjYXVzZWQgYnkKLSAg ICBjaGFuZ2VzIHRvIERTUC9CSU9TIEJyaWRnZSBkYXRhIHN0cnVjdHVyZXMuCi0gICAgLSBVbmFi bGUgdG8gZ2V0IHBvaW50ZXIgdG8gRENEIGRhdGEgc2VjdGlvbjsgdGhpcyBpcyB0eXBpY2FsbHkg Y2F1c2VkIGJ5Ci0gICAgaW1wcm9wZXJseSBjb25maWd1cmVkIFVVSURzLgotICAgIC0gVW5hYmxl IHRvIGxvYWQgZmlsZSBjb250YWluaW5nIERDRCBkYXRhIHNlY3Rpb247IHRoaXMgaXMgdHlwaWNh bGx5Ci0gICAgY2F1c2VkIGJ5IGEgbWlzc2luZyBDT0ZGIGZpbGUuCi0gICAgLSBUaGUgc3BlY2lm aWVkIENPRkYgZmlsZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgbm9kZSByZWdpc3RyYXRpb24K LSAgICBzZWN0aW9uLgotCi1bRUZBVUxUXQotICAgIEludmFsaWQgcG9pbnRlciBvciBoYW5kbGVy LgotCi1bRUVYSVNUXQotICAgIEF0dGVtcHRlZCB0byBjcmVhdGUgYSBjaGFubmVsIG1hbmFnZXIg d2hlbiBvbmUgYWxyZWFkeSBleGlzdHMuCi0KLVtFSU5WQUxdCi0gICAgSW52YWxpZCBhcmd1bWVu dC4KLQotW0VTUElQRV0KLSAgICBTeW1ib2wgbm90IGZvdW5kIGluIHRoZSBDT0ZGIGZpbGUuICBE U1BOb2RlX0NyZWF0ZSB3aWxsIHJldHVybiB0aGlzIGlmCi0gICAgdGhlIGlBbGcgZnVuY3Rpb24g dGFibGUgZm9yIGFuIHhEQUlTIHNvY2tldCBpcyBub3QgZm91bmQgaW4gdGhlIENPRkYgZmlsZS4K LSAgICBJbiB0aGlzIGNhc2UsIGZvcmNlIHRoZSBzeW1ib2wgdG8gYmUgbGlua2VkIGludG8gdGhl IENPRkYgZmlsZS4KLSAgICBEU1BOb2RlX0NyZWF0ZSwgRFNQTm9kZV9FeGVjdXRlLCBhbmQgRFNQ Tm9kZV9EZWxldGUgd2lsbCByZXR1cm4gdGhpcyBpZgotICAgIHRoZSBjcmVhdGUsIGV4ZWN1dGUs IG9yIGRlbGV0ZSBwaGFzZSBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCBjb3VsZCBub3QgYmUKLSAg ICBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgotCi0gICAgLSBObyBzeW1ib2wgdGFibGUgaXMgbG9h ZGVkL2ZvdW5kIGZvciB0aGlzIGJvYXJkLgotICAgIC0gVW5hYmxlIHRvIGluaXRpYWxpemUgdGhl IFpMIENPRkYgcGFyc2luZyBtb2R1bGUuCi0KLVtFUElQRV0KLSAgICBJL08gaXMgY3VycmVudGx5 IHBlbmRpbmcuCi0KLSAgICAtIEVuZCBvZiBzdHJlYW0gd2FzIGFscmVhZHkgcmVxdWVzdGVkIG9u IHRoaXMgb3V0cHV0IGNoYW5uZWwuCi0KLVtFRE9NXQotICAgIEEgcGFyYW1ldGVyIGlzIHNwZWNp ZmllZCBvdXRzaWRlIGl0cyB2YWxpZCByYW5nZS4KLQotW0VOT1NZU10KLSAgICBUaGUgaW5kaWNh dGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgotCi1bRUlEUk1dCi0gICAgRHVyaW5nIGVu dW1lcmF0aW9uIGEgY2hhbmdlIGluIHRoZSBudW1iZXIgb3IgcHJvcGVydGllcyBvZiB0aGUgb2Jq ZWN0cwotICAgIGhhcyBvY2N1cnJlZC4KLQotW0VDSFJOR10KLSAgICBBdHRlbXB0IHRvIGNyZWF0 ZWQgY2hhbm5lbCBtYW5hZ2VyIHdpdGggdG9vIG1hbnkgY2hhbm5lbHMgb3IgY2hhbm5lbCBJRCBv dXQKLSAgICBvZiByYW5nZS4KLQotW0VCQURSXQotICAgIFRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lm aWVkIG9iamVjdCBpcyBpbmNvcnJlY3QgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLgotCi0g ICAgLSBJbnZhbGlkIHNlZ21lbnQgSUQuCi0KLVtFTk9EQVRBXQotICAgIFVuYWJsZSB0byByZXRy aWV2ZSByZXNvdXJjZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWdpc3RyeS4KLQotICAgIC0gTm8g bW9yZSByZWdpc3RyeSB2YWx1ZXMuCi0KLVtFVElNRV0KLSAgICBBIHRpbWVvdXQgb2NjdXJyZWQg YmVmb3JlIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNvdWxkIGNvbXBsZXRlLgotCi1bRU5PU1Jd Ci0gICAgQSBzdHJlYW0gaGFzIGJlZW4gaXNzdWVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBidWZm ZXJzIGFsbG93ZWQgaW4gdGhlCi0gICAgc3RyZWFtIGF0IG9uY2U7IGJ1ZmZlcnMgbXVzdCBiZSBy ZWNsYWltZWQgZnJvbSB0aGUgc3RyZWFtIGJlZm9yZSBhbnkgbW9yZQotICAgIGNhbiBiZSBpc3N1 ZWQuCi0KLSAgICAtIE5vIGZyZWUgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4KLQotW0VJTFNFUV0K LSAgICBFcnJvciBvY2N1cnJlZCBpbiBhIGR5bmFtaWMgbG9hZGVyIGxpYnJhcnkgZnVuY3Rpb24u Ci0KLVtFSVNDT05OXQotICAgIFRoZSBTcGVjaWZpZWQgQ29ubmVjdGlvbiBhbHJlYWR5IGV4aXN0 cy4KLQotW0VOT1RDT05OXQotICAgIE5vZGVzIG5vdCBjb25uZWN0ZWQuCi0KLVtFVElNRURPVVRd Ci0gICAgVGltZW91dCBvY2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIGhh cmR3YXJlLgotCi0gICAgLSBXYWl0IGZvciBmbHVzaCBvcGVyYXRpb24gb24gYW4gb3V0cHV0IGNo YW5uZWwgdGltZWQgb3V0LgotCi1bRUNPTk5SRUZVU0VEXQotICAgIE5vIG1vcmUgY29ubmVjdGlv bnMgY2FuIGJlIG1hZGUgZm9yIHRoaXMgbm9kZS4KLQotW0VBTFJFQURZXQotICAgIENoYW5uZWwg aXMgYWxyZWFkeSBpbiB1c2UuCi0KLVtFUkVNT1RFSU9dCi0gICAgZHdUaW1lT3V0IHBhcmFtZXRl ciB3YXMgQ0hOTF9JT0NOT1dBSVQsIHlldCBubyBJL08gY29tcGxldGlvbnMgd2VyZQotICAgIHF1 ZXVlZC4KLQotW0VDQU5DRUxFRF0KLSAgICBJL08gaGFzIGJlZW4gY2FuY2VsbGVkIG9uIHRoaXMg Y2hhbm5lbC4KLQotW0VOT0tFWV0KLSAgICBJbnZhbGlkIHN1YmtleSBwYXJhbWV0ZXIuCi0KLSAg ICAtIFVVSUQgbm90IGZvdW5kIGluIHJlZ2lzdHJ5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvS2Nv bmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlNzRlOWQuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAt MSw2OSArMCwwIEBACi0jCi0jIERTUCBCcmlkZ2UgRHJpdmVyIFN1cHBvcnQKLSMKLQotbWVudWNv bmZpZyBUSURTUEJSSURHRQotCXRyaXN0YXRlICJEU1AgQnJpZGdlIGRyaXZlciIKLQlkZXBlbmRz IG9uIEFSQ0hfT01BUDMgJiYgIUFSQ0hfTVVMVElQTEFURk9STSAmJiBCUk9LRU4KLQlzZWxlY3Qg TUFJTEJPWAotCXNlbGVjdCBPTUFQMlBMVVNfTUJPWAotCWhlbHAKLQkgIERTUC9CSU9TIEJyaWRn ZSBpcyBkZXNpZ25lZCBmb3IgcGxhdGZvcm1zIHRoYXQgY29udGFpbiBhIEdQUCBhbmQKLQkgIG9u ZSBvciBtb3JlIGF0dGFjaGVkIERTUHMuICBUaGUgR1BQIGlzIGNvbnNpZGVyZWQgdGhlIG1hc3Rl ciBvcgotCSAgImhvc3QiIHByb2Nlc3NvciwgYW5kIHRoZSBhdHRhY2hlZCBEU1BzIGFyZSBwcm9j ZXNzaW5nIHJlc291cmNlcwotCSAgdGhhdCBjYW4gYmUgdXRpbGl6ZWQgYnkgYXBwbGljYXRpb25z IGFuZCBkcml2ZXJzIHJ1bm5pbmcgb24gdGhlIEdQUC4KLQotCSAgVGhpcyBkcml2ZXIgZGVwZW5k cyBvbiBPTUFQIE1haWxib3ggKE9NQVBfTUJPWF9GV0spLgotCi1jb25maWcgVElEU1BCUklER0Vf RFZGUwotCWJvb2wgIkVuYWJsZSBCcmlkZ2UgRHluYW1pYyBWb2x0YWdlIGFuZCBGcmVxdWVuY3kg U2NhbGluZyAoRFZGUykiCi0JZGVwZW5kcyBvbiBUSURTUEJSSURHRSAmJiBDUFVfRlJFUQotCWhl bHAKLQkgIERWRlMgYWxsb3dzIERTUCBCcmlkZ2UgdG8gaW5pdGlhdGUgdGhlIG9wZXJhdGluZyBw b2ludCBjaGFuZ2UgdG8KLQkgIHNjYWxlIHRoZSBjaGlwIHZvbHRhZ2UgYW5kIGZyZXF1ZW5jeSBp biBvcmRlciB0byBtYXRjaCB0aGUKLQkgIHBlcmZvcm1hbmNlIGFuZCBwb3dlciBjb25zdW1wdGlv biB0byB0aGUgY3VycmVudCBwcm9jZXNzaW5nCi0JICByZXF1aXJlbWVudHMuCi0KLWNvbmZpZyBU SURTUEJSSURHRV9NRU1QT09MX1NJWkUKLQloZXggIlBoeXNpY2FsIG1lbW9yeSBwb29sIHNpemUg KEJ5dGUpIgotCWRlcGVuZHMgb24gVElEU1BCUklER0UKLQlkZWZhdWx0IDB4NjAwMDAwCi0JaGVs cAotCSAgQWxsb2NhdGUgc3BlY2lmaWVkIHNpemUgb2YgbWVtb3J5IGF0IGJvb3RpbmcgdGltZSB0 byBhdm9pZCBhbGxvY2F0aW9uCi0JICBmYWlsdXJlIHVuZGVyIGhlYXZ5IG1lbW9yeSBmcmFnbWVu dGF0aW9uIGFmdGVyIHNvbWUgdXNlIHRpbWUuCi0KLWNvbmZpZyBUSURTUEJSSURHRV9SRUNPVkVS WQotCWJvb2wgIlJlY292ZXJ5IFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBUSURTUEJSSURHRQotCWRl ZmF1bHQgeQotCWhlbHAKLQkgIEluIGNhc2Ugb2YgRFNQIGZhdGFsIGVycm9yLCBCUklER0UgZHJp dmVyIHdpbGwgdHJ5IHRvCi0JICByZWNvdmVyIGl0c2VsZi4KLQotY29uZmlnIFRJRFNQQlJJREdF X0NBQ0hFX0xJTkVfQ0hFQ0sKLQlib29sICJDaGVjayBidWZmZXJzIHRvIGJlIDEyOCBieXRlIGFs aWduZWQiCi0JZGVwZW5kcyBvbiBUSURTUEJSSURHRQotCWhlbHAKLQkgIFdoZW4gdGhlIERTUCBw cm9jZXNzZXMgZGF0YSwgdGhlIERTUCBjYWNoZSBjb250cm9sbGVyIGxvYWRzIDEyOC1CeXRlCi0J ICBjaHVua3MgKGxpbmVzKSBmcm9tIFNEUkFNIGFuZCB3cml0ZXMgdGhlIGRhdGEgYmFjayBpbiAx MjgtQnl0ZSBjaHVua3MuCi0JICBJZiBhIERNTSBidWZmZXIgZG9lcyBub3Qgc3RhcnQgYW5kIGVu ZCBvbiBhIDEyOC1CeXRlIGJvdW5kYXJ5LCB0aGUgZGF0YQotCSAgcHJlY2VkaW5nIHRoZSBzdGFy dCBhZGRyZXNzIChTQSkgZnJvbSB0aGUgMTI4LUJ5dGUgYm91bmRhcnkgdG8gdGhlIFNBCi0JICBh bmQgdGhlIGRhdGEgYXQgYWRkcmVzc2VzIHRyYWlsaW5nIHRoZSBlbmQgYWRkcmVzcyAoRUEpIGZy b20gdGhlIEVBIHRvCi0JICB0aGUgbmV4dCAxMjgtQnl0ZSBib3VuZGFyeSB3aWxsIGJlIGxvYWRl ZCBhbmQgd3JpdHRlbiBiYWNrIGFzIHdlbGwuCi0JICBUaGlzIGNhbiBsZWFkIHRvIGhlYXAgY29y cnVwdGlvbi4gU2F5IFksIHRvIGVuZm9yY2UgdGhlIGNoZWNrIGZvciAxMjgKLQkgIGJ5dGUgYWxp Z25tZW50LCBidWZmZXJzIGZhaWxpbmcgdGhpcyBjaGVjayB3aWxsIGJlIHJlamVjdGVkLgotCi1j b25maWcgVElEU1BCUklER0VfTlRGWV9QV1JFUlIKLQlib29sICJOb3RpZnkgcG93ZXIgZXJyb3Jz IgotCWRlcGVuZHMgb24gVElEU1BCUklER0UKLQloZWxwCi0JICBFbmFibGUgbm90aWZpY2F0aW9u cyB0byByZWdpc3RlcmVkIGNsaWVudHMgb24gdGhlIGV2ZW50IG9mIHBvd2VyIGVycm9yCi0JICB0 cnlpbmcgdG8gc3VzcGVuZCBicmlkZ2UgZHJpdmVyLiBTYXkgWSwgdG8gc2lnbmFsIHRoaXMgZXZl bnQgYXMgYSBmYXRhbAotCSAgZXJyb3IsIHRoaXMgd2lsbCByZXF1aXJlIGEgYnJpZGdlIHJlc3Rh cnQgdG8gcmVjb3Zlci4KLQotY29uZmlnIFRJRFNQQlJJREdFX0JBQ0tUUkFDRQotCWJvb2wgIkR1 bXAgYmFja3RyYWNlcyBvbiBmYXRhbCBlcnJvcnMiCi0JZGVwZW5kcyBvbiBUSURTUEJSSURHRQot CWhlbHAKLQkgIEVuYWJsZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gYmFja3RyYWNlIGZhdGFsIGVy cm9ycy4gU2F5IFkgaWYgeW91Ci0JICB3YW50IHRvIGR1bXAgaW5mb3JtYXRpb24gZm9yIHRlc3Rp bmcgcHVycG9zZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvTWFr ZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvTWFrZWZpbGUKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGFkYjIxYzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotb2Jq LSQoQ09ORklHX1RJRFNQQlJJREdFKQkrPSB0aWRzcGJyaWRnZS5vCi0KLWxpYmdlbiA9IGdlbi9n aC5vCi1saWJjb3JlID0gY29yZS9jaG5sX3NtLm8gY29yZS9tc2dfc20ubyBjb3JlL2lvX3NtLm8g Y29yZS90aW9tYXAzNDMwLm8gXAotCQljb3JlL3Rpb21hcDM0MzBfcHdyLm8gY29yZS90aW9tYXBf aW8ubyBcCi0JCWNvcmUvdWVfZGVoLm8gY29yZS93ZHQubyBjb3JlL2RzcC1jbG9jay5vIGNvcmUv c3luYy5vCi1saWJwbWdyID0gcG1nci9jaG5sLm8gcG1nci9pby5vIHBtZ3IvbXNnLm8gcG1nci9j b2QubyBwbWdyL2Rldi5vIHBtZ3IvZHNwYXBpLm8gXAotCQlwbWdyL2RtbS5vIHBtZ3IvY21tLm8g cG1nci9kYmxsLm8KLWxpYnJtZ3IgPSBybWdyL2RiZGNkLm8gcm1nci9kaXNwLm8gcm1nci9kcnYu byBybWdyL21nci5vIHJtZ3Ivbm9kZS5vIFwKLQkJcm1nci9wcm9jLm8gcm1nci9wd3IubyBybWdy L3JtbS5vIHJtZ3Ivc3RybS5vIHJtZ3IvZHNwZHJ2Lm8gXAotCQlybWdyL25sZHIubyBybWdyL2Ry dl9pbnRlcmZhY2UubwotbGliZGxvYWQgPSBkeW5sb2FkL2Nsb2FkLm8gZHlubG9hZC9nZXRzZWN0 aW9uLm8gZHlubG9hZC9yZWxvYy5vIFwKLQkJIGR5bmxvYWQvdHJhbXAubwotbGliaHcgPSBody9o d19tbXUubwotCi10aWRzcGJyaWRnZS15IDo9ICQobGliZ2VuKSAkKGxpYnNlcnZpY2VzKSAkKGxp YmNvcmUpICQobGlicG1ncikgJChsaWJybWdyKSBcCi0JCQkkKGxpYmRsb2FkKSAkKGxpYmh3KQot Ci0jTWFjaGluZSBkZXBlbmRlbnQKLWNjZmxhZ3MteSArPSAtRF9USV8gLURfREJfVElPTUFQIC1E VE1TMzIwNjAgXAotCQktRFRJQ0ZHX1BST0NfVkVSIC1EVElDRkdfRVZNX1RZUEUgLURDSE5MX1NN Q0xBU1MgXAotCQktRENITkxfTUVTU0FHRVMgLURVU0VfTEVWRUxfMV9NQUNST1MKLQotY2NmbGFn cy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUKLWNjZmxhZ3MteSAr PSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcwotY2NmbGFncy15ICs9IC1J ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUKLWNjZmxhZ3MteSArPSAtSWRyaXZlcnMv c3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyCi1jY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2Uvcm1ncgotY2NmbGFncy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2R5bmxvYWQKLWNjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9o dwotY2NmbGFncy15ICs9IC1JYXJjaC9hcm0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvVE9ETwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM1MWUyZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAK LSogTWlncmF0ZSB0byAoYW5kIGlmIG5lY2Vzc2FyeSwgZXh0ZW5kKSBleGlzdGluZyB1cHN0cmVh bSBjb2RlIHN1Y2ggYXMgCi0gIGlvbW11LCB3ZHQsIG1jYnNwLCBncHRpbWVycwotKiBEZWNvdXBs ZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIChlLmcuIGJyaWRnZV9icmRfc3RhcnQvc3RvcC9kZWxl dGUvbW9uaXRvcikKLSogRE9GRiBiaW5hcnkgbG9hZGVyOiBjb25zaWRlciBwdXNoaW5nIHRvIHVz ZXIgc3BhY2UuIGF0IHRoZSB2ZXJ5IGxlYXN0Ci0gIGVsaW1pbmF0ZSB0aGUgZGlyZWN0IGZpbGVz eXN0ZW0gYWNjZXNzCi0qIEVsaW1pbmF0ZSBnZW5lcmFsIHNlcnZpY2VzIGFuZCBsaWJyYXJpZXMg LSB1c2Ugb3IgZXh0ZW5kIGV4aXN0aW5nIGtlcm5lbAotICBsaWJyYXJpZXMgaW5zdGVhZCAoZS5n LiBnY2YvbGNtIGluIG5sZHIuYywgZ2xvYmFsIGhlbHBlcnMgaW4gZ2VuLykKLSogRWxpbWluYXRl IGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgT01BUF9TWVNDX0JBU0UKLSogRWxpbWluYXRlIERTUF9T VUNDRUVERUQgbWFjcm9zIGFuZCB0aGVpciBpbXBvc2VkIHJlZHVuZGFudCBpbmRlbnRhdGlvbnMK LSAgKGFkb3B0IHRoZSBrZXJuZWwgd2F5IG9mIGNoZWNraW5nIGZvciByZXR1cm4gdmFsdWVzKQot KiBBdWRpdCBpbnRlcmZhY2VzIGV4cG9zZWQgdG8gdXNlciBzcGFjZQotKiBBdWRpdCBhbmQgY2xl YW4gdXAgaGVhZGVyIGZpbGVzIGZvbGRlcgotKiBVc2Uga2VybmVsIGNvZGluZyBzdHlsZQotKiBj aGVja3BhdGNoLnBsIGZpeGVzCi0qIGFsbG9jYXRlIGV4dF9tZW1fcG9vbCBmcm9tIGNvbnNpc3Rl bnQgbWVtb3J5IGluc3RlYWQgb2YgdXNpbmcgaW9yZW1hcAotCi1QbGVhc2Ugc2VuZCBhbnkgcGF0 Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgotYW5kIE9tYXIgUmFt aXJleiBMdW5hIDxvbWFyLnJhbWlyZXpAdGkuY29tPi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9jb3JlL19jbW0uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9jb3JlL19jbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY2MGJlZi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fY21tLmgKKysrIC9k ZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogX2NtbS5oCi0gKgotICogRFNQLUJJT1Mg QnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgot ICoKLSAqIFByaXZhdGUgaGVhZGVyIGZpbGUgZGVmaW5pbmcgQ01NIG1hbmFnZXIgb2JqZWN0cyBh bmQgZGVmaW5lcyBuZWVkZWQKLSAqIGJ5IElPIG1hbmFnZXIgdG8gcmVnaXN0ZXIgc2hhcmVkIG1l bW9yeSByZWdpb25zIHdoZW4gRFNQIGJhc2UgaW1hZ2UKLSAqIGlzIGxvYWRlZChicmlkZ2VfaW9f b25fbG9hZGVkKS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVt ZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElT IFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQK LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9DTU1fCi0jZGVmaW5lIF9DTU1fCi0KLS8q Ci0gKiAgVGhlc2UgdGFyZ2V0IHNpZGUgc3ltYm9scyBkZWZpbmUgdGhlIGJlZ2lubmluZyBhbmQg ZW5kaW5nIGFkZHJlc3NlcwotICogIG9mIHRoZSBzZWN0aW9uIG9mIHNoYXJlZCBtZW1vcnkgdXNl ZCBmb3Igc2hhcmVkIG1lbW9yeSBtYW5hZ2VyIENNTS4KLSAqICBUaGV5IGFyZSBkZWZpbmVkIGlu IHRoZSAqY2ZnLmNtZCBmaWxlIGJ5IGNkYiBjb2RlLgotICovCi0jZGVmaW5lIFNITTBfU0hBUkVE X0JBU0VfU1lNICAgICAgICAgICAgICJfU0hNMF9CRUciCi0jZGVmaW5lIFNITTBfU0hBUkVEX0VO RF9TWU0gICAgICAgICAgICAgICJfU0hNMF9FTkQiCi0jZGVmaW5lIFNITTBfU0hBUkVEX1JFU0VS VkVEX0JBU0VfU1lNICAgICJfU0hNMF9SU1ZEU1RSVCIKLQotLyoKLSAqICBTaGFyZWQgTWVtb3J5 IFJlZ2lvbiAjMChTSE1TRUcwKSBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICoKLSAq ICB8KF9TSE0wX0JFRykgICAgICAgICAgICAgICAgICB8IChfU0hNMF9SU1ZEU1RSVCkgICAgICAg ICAgIHwgKF9TSE0wX0VORCkKLSAqICBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFYKLSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICB8ICAgICBEU1Atc2lkZSBh bGxvY2F0aW9ucyAgICB8ICAgIEdQUC1zaWRlIGFsbG9jYXRpb25zICAgIHwKLSAqICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq Ci0gKgotICovCi0KLSNlbmRpZiAvKiBfQ01NXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2NvcmUvX2RlaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2NvcmUvX2RlaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjVkMzQzLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19kZWguaAorKysgL2Rl di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBfZGVoLmgKLSAqCi0gKiBEU1AtQklPUyBC cmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0g KgotICogUHJpdmF0ZSBoZWFkZXIgZm9yIERFSCBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChD KSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAx MCBGZWxpcGUgQ29udHJlcmFzCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgX0RFSF8KLSNkZWZpbmUgX0RF SF8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rz cGRlZnMuaD4KLQotLyogREVIIE1hbmFnZXI6IG9ubHkgb25lIGNyZWF0ZWQgcGVyIGJvYXJkOiAq Lwotc3RydWN0IGRlaF9tZ3IgewotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9j b250ZXh0OwkvKiBCcmlkZ2UgY29udGV4dC4gKi8KLQlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlf b2JqOwkvKiBOVEZZIG9iamVjdCAqLwotCi0JLyogTU1VIEZhdWx0IERQQyAqLwotCXN0cnVjdCB0 YXNrbGV0X3N0cnVjdCBkcGNfdGFza2xldDsKLX07Ci0KLSNlbmRpZiAvKiBfREVIXyAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX21zZ19zbS5oIGIvZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX21zZ19zbS5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBmNmU1OGUzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9jb3JlL19tc2dfc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0v KgotICogX21zZ19zbS5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1 bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIFByaXZhdGUgaGVhZGVyIGZp bGUgZGVmaW5pbmcgbXNnX2N0cmwgbWFuYWdlciBvYmplY3RzIGFuZCBkZWZpbmVzIG5lZWRlZAot ICogYnkgSU8gbWFuYWdlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJ bnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNL QUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICog SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9NU0dfU01fCi0jZGVmaW5lIF9N U0dfU01fCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL21z Z2RlZnMuaD4KLQotLyoKLSAqICBUaGVzZSB0YXJnZXQgc2lkZSBzeW1ib2xzIGRlZmluZSB0aGUg YmVnaW5uaW5nIGFuZCBlbmRpbmcgYWRkcmVzc2VzCi0gKiAgb2YgdGhlIHNlY3Rpb24gb2Ygc2hh cmVkIG1lbW9yeSB1c2VkIGZvciBtZXNzYWdlcy4gVGhleSBhcmUKLSAqICBkZWZpbmVkIGluIHRo ZSAqY2ZnLmNtZCBmaWxlIGJ5IGNkYiBjb2RlLgotICovCi0jZGVmaW5lIE1TR19TSEFSRURfQlVG RkVSX0JBU0VfU1lNICAgICAgIl9NU0dfQkVHIgotI2RlZmluZSBNU0dfU0hBUkVEX0JVRkZFUl9M SU1JVF9TWU0gICAgICJfTVNHX0VORCIKLQotI2lmbmRlZiBfQ0hOTF9XT1JEU0laRQotI2RlZmlu ZSBfQ0hOTF9XT1JEU0laRSA0CS8qIGRlZmF1bHQgX0NITkxfV09SRFNJWkUgaXMgMiBieXRlcy93 b3JkICovCi0jZW5kaWYKLQotLyoKLSAqICA9PT09PT09PSBtc2dfY3RybCA9PT09PT09PQotICog IFRoZXJlIGlzIGEgY29udHJvbCBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIHRvIHRoZSBEU1AsIGFu ZCBhIGNvbnRyb2wKLSAqICBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIERTUC4gVGhl IHNoYXJlZCBtZW1vcnkgcmVnaW9uIGZvcgotICogIHRyYW5zZmVycmluZyBtZXNzYWdlcyBpcyBw YXJ0aXRpb25lZCBhcyBmb2xsb3dzOgotICoKLSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgfENvbnRyb2wgfCBNZXNzYWdl cyBmcm9tIERTUCB8IENvbnRyb2wgfCBNZXNzYWdlcyB0byBEU1AgfAotICogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiAg bXNnX2N0cmwgY29udHJvbCBzdHJ1Y3R1cmUgZm9yIG1lc3NhZ2VzIHRvIHRoZSBEU1AgaXMgdXNl ZCBpbiB0aGUgZm9sbG93aW5nCi0gKiAgd2F5OgotICoKLSAqICBidWZfZW1wdHkgLSAgICAgIFRo aXMgZmxhZyBpcyBzZXQgdG8gRkFMU0UgYnkgdGhlIEdQUCBhZnRlciBpdCBoYXMgb3V0cHV0Ci0g KiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzIGZvciB0aGUgRFNQLiBUaGUgRFNQIGhvc3QgZHJp dmVyIHNldHMgaXQgdG8KLSAqICAgICAgICAgICAgICAgICAgVFJVRSBhZnRlciBpdCBoYXMgY29w aWVkIHRoZSBtZXNzYWdlcy4KLSAqICBwb3N0X3N3aSAtICAgICAgIFNldCB0byAxIGJ5IHRoZSBH UFAgYWZ0ZXIgaXQgaGFzIHdyaXR0ZW4gdGhlIG1lc3NhZ2VzLAotICogICAgICAgICAgICAgICAg ICBzZXQgdGhlIHNpemUsIGFuZCBzZXQgYnVmX2VtcHR5IHRvIEZBTFNFLgotICogICAgICAgICAg ICAgICAgICBUaGUgRFNQIEhvc3QgZHJpdmVyIHVzZXMgU1dJX2FuZG4gb2YgdGhlIHBvc3Rfc3dp IGZpZWxkCi0gKiAgICAgICAgICAgICAgICAgIHdoZW4gYSBob3N0IGludGVycnVwdCBvY2N1cnMu IFRoZSBob3N0IGRyaXZlciBjbGVhcnMKLSAqICAgICAgICAgICAgICAgICAgdGhpcyBhZnRlciBw b3N0aW5nIHRoZSBTV0kuCi0gKiAgc2l6ZSAtICAgICAgICAgIE51bWJlciBvZiBtZXNzYWdlcyB0 byBiZSByZWFkIGJ5IHRoZSBEU1AuCi0gKgotICogIEZvciBtZXNzYWdlcyBmcm9tIHRoZSBEU1A6 Ci0gKiAgYnVmX2VtcHR5IC0gICAgICBUaGlzIGZsYWcgaXMgc2V0IHRvIEZBTFNFIGJ5IHRoZSBE U1AgYWZ0ZXIgaXQgaGFzIG91dHB1dAotICogICAgICAgICAgICAgICAgICBtZXNzYWdlcyBmb3Ig dGhlIEdQUC4gVGhlIERQQyBvbiB0aGUgR1BQIHNldHMgaXQgdG8KLSAqICAgICAgICAgICAgICAg ICAgVFJVRSBhZnRlciBpdCBoYXMgY29waWVkIHRoZSBtZXNzYWdlcy4KLSAqICBwb3N0X3N3aSAt ICAgICAgIFNldCB0byAxIHRoZSBEUEMgb24gdGhlIEdQUCBhZnRlciBjb3B5aW5nIHRoZSBtZXNz YWdlcy4KLSAqICBzaXplIC0gICAgICAgICAgTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGJlIHJlYWQg YnkgdGhlIEdQUC4KLSAqLwotc3RydWN0IG1zZ19jdHJsIHsKLQl1MzIgYnVmX2VtcHR5OwkJLyog dG8vZnJvbSBEU1AgYnVmZmVyIGlzIGVtcHR5ICovCi0JdTMyIHBvc3Rfc3dpOwkJLyogU2V0IHRv ICIxIiB0byBwb3N0IG1zZ19jdHJsIFNXSSAqLwotCXUzMiBzaXplOwkJLyogTnVtYmVyIG9mIG1l c3NhZ2VzIHRvL2Zyb20gdGhlIERTUCAqLwotCXUzMiByZXN2ZDsKLX07Ci0KLS8qCi0gKiAgPT09 PT09PT0gbXNnX21nciA9PT09PT09PQotICogIFRoZSBtc2dfbWdyIG1haW50YWlucyBhIGxpc3Qg b2YgYWxsIE1TR19RVUVVRXMuIEVhY2ggTk9ERSBvYmplY3QgY2FuCi0gKiAgaGF2ZSBtc2dfcXVl dWUgdG8gaG9sZCBhbGwgbWVzc2FnZXMgdGhhdCBjb21lIHVwIGZyb20gdGhlIGNvcnJlc3BvbmRp bmcKLSAqICBub2RlIG9uIHRoZSBEU1AuIFRoZSBtc2dfbWdyIGFsc28gaGFzIGEgc2hhcmVkIHF1 ZXVlIG9mIG1lc3NhZ2VzCi0gKiAgcmVhZHkgdG8gZ28gdG8gdGhlIERTUC4KLSAqLwotc3RydWN0 IG1zZ19tZ3IgewotCS8qIFRoZSBmaXJzdCBmaWVsZCBtdXN0IG1hdGNoIHRoYXQgaW4gbXNnb2Jq LmggKi8KLQotCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCi0Jc3Ry dWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0KLQlzdHJ1Y3QgaW9fbWdyICpp b21ncjsJCS8qIElPIG1hbmFnZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CS8q IExpc3Qgb2YgTVNHX1FVRVVFcyAqLwotCXNwaW5sb2NrX3QgbXNnX21ncl9sb2NrOwkvKiBGb3Ig Y3JpdGljYWwgc2VjdGlvbnMgKi8KLQkvKiBTaWduYWxsZWQgd2hlbiBNc2dGcmFtZSBpcyBhdmFp bGFibGUgKi8KLQlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZXZlbnQ7Ci0Jc3RydWN0IGxpc3Rf aGVhZCBtc2dfZnJlZV9saXN0OwkvKiBGcmVlIE1zZ0ZyYW1lcyByZWFkeSB0byBiZSBmaWxsZWQg Ki8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ191c2VkX2xpc3Q7CS8qIE1zZ0ZyYW1lcyByZWFkeSB0 byBnbyB0byBEU1AgKi8KLQl1MzIgbXNnc19wZW5kaW5nOwkvKiAjIG9mIHF1ZXVlZCBtZXNzYWdl cyB0byBnbyB0byBEU1AgKi8KLQl1MzIgbWF4X21zZ3M7CQkvKiBNYXggIyBvZiBtc2dzIHRoYXQg Zml0IGluIGJ1ZmZlciAqLwotCW1zZ19vbmV4aXQgb25fZXhpdDsJLyogY2FsbGVkIHdoZW4gUk1T X0VYSVQgaXMgcmVjZWl2ZWQgKi8KLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gbXNnX3F1ZXVlID09 PT09PT09Ci0gKiAgRWFjaCBOT0RFIGhhcyBhIG1zZ19xdWV1ZSBmb3IgcmVjZWl2aW5nIG1lc3Nh Z2VzIGZyb20gdGhlCi0gKiAgY29ycmVzcG9uZGluZyBub2RlIG9uIHRoZSBEU1AuIFRoZSBtc2df cXVldWUgb2JqZWN0IG1haW50YWlucyBhIGxpc3QKLSAqICBvZiBtZXNzYWdlcyB0aGF0IGhhdmUg YmVlbiBzZW50IHRvIHRoZSBob3N0LCBidXQgbm90IHlldCByZWFkIChNU0dfR2V0KSwKLSAqICBh bmQgYSBsaXN0IG9mIGZyZWUgZnJhbWVzIHRoYXQgY2FuIGJlIGZpbGxlZCB3aGVuIG5ldyBtZXNz YWdlcyBhcnJpdmUKLSAqICBmcm9tIHRoZSBEU1AuCi0gKiAgVGhlIG1zZ19xdWV1ZSdzIGhTeW5F dmVudCBnZXRzIHBvc3RlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWFkeS4KLSAqLwotc3RydWN0IG1z Z19xdWV1ZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VsZW07Ci0Jc3RydWN0IG1zZ19tZ3Ig Km1zZ19tZ3I7Ci0JdTMyIG1heF9tc2dzOwkJLyogTm9kZSBtZXNzYWdlIGRlcHRoICovCi0JdTMy IG1zZ3FfaWQ7CQkvKiBOb2RlIGVudmlyb25tZW50IHBvaW50ZXIgKi8KLQlzdHJ1Y3QgbGlzdF9o ZWFkIG1zZ19mcmVlX2xpc3Q7CS8qIEZyZWUgTXNnRnJhbWVzIHJlYWR5IHRvIGJlIGZpbGxlZCAq LwotCS8qIEZpbGxlZCBNc2dGcmFtZXNzIHdhaXRpbmcgdG8gYmUgcmVhZCAqLwotCXN0cnVjdCBs aXN0X2hlYWQgbXNnX3VzZWRfbGlzdDsKLQl2b2lkICphcmc7CQkvKiBIYW5kbGUgcGFzc2VkIHRv IG1nciBvbl9leGl0IGNhbGxiYWNrICovCi0Jc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50 OwkvKiBTaWduYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHJlYWR5ICovCi0Jc3RydWN0IHN5bmNfb2Jq ZWN0ICpzeW5jX2RvbmU7CS8qIEZvciBzeW5jaHJvbml6aW5nIGNsZWFudXAgKi8KLQlzdHJ1Y3Qg c3luY19vYmplY3QgKnN5bmNfZG9uZV9hY2s7CS8qIEZvciBzeW5jaHJvbml6aW5nIGNsZWFudXAg Ki8KLQlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOwkvKiBGb3Igbm90aWZpY2F0aW9uIG9m IG1lc3NhZ2UgcmVhZHkgKi8KLQlib29sIGRvbmU7CQkvKiBUUlVFIDw9PT4gZGVsZXRpbmcgdGhl IG9iamVjdCAqLwotCXUzMiBpb19tc2dfcGVuZDsJLyogTnVtYmVyIG9mIHBlbmRpbmcgTVNHX2dl dC9wdXQgY2FsbHMgKi8KLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gbXNnX2RzcG1zZyA9PT09PT09 PQotICovCi1zdHJ1Y3QgbXNnX2RzcG1zZyB7Ci0Jc3RydWN0IGRzcF9tc2cgbXNnOwotCXUzMiBt c2dxX2lkOwkJLyogSWRlbnRpZmllcyB0aGUgbm9kZSB0aGUgbWVzc2FnZSBnb2VzIHRvICovCi19 OwotCi0vKgotICogID09PT09PT09IG1zZ19mcmFtZSA9PT09PT09PQotICovCi1zdHJ1Y3QgbXNn X2ZyYW1lIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZWxlbTsKLQlzdHJ1Y3QgbXNnX2RzcG1z ZyBtc2dfZGF0YTsKLX07Ci0KLSNlbmRpZiAvKiBfTVNHX1NNXyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oIGIvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA2NTk3MWI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3Jl L190aW9tYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vKgotICogX3Rpb21h cC5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig VEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERlZmluaXRpb25zIGFuZCB0eXBlcyBwcml2YXRl IHRvIHRoaXMgQnJpZGdlIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBU ZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwot ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJ UyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBP UgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9USU9NQVBfCi0jZGVm aW5lIF9USU9NQVBfCi0KLS8qCi0gKiBYWFggVGhlc2UgcG93ZXJkb21haW4uaC9jbG9ja2RvbWFp bi5oIGluY2x1ZGVzIGFyZSB3cm9uZyBhbmQgc2hvdWxkCi0gKiBiZSByZW1vdmVkLiAgTm8gZHJp dmVyIHNob3VsZCBjYWxsIHB3cmRtXyogb3IgY2xrZG1fKiBmdW5jdGlvbnMKLSAqIGRpcmVjdGx5 OyB0aGV5IHNob3VsZCByZWx5IG9uIE9NQVAgY29yZSBjb2RlIHRvIGRvIHRoaXMuCi0gKi8KLSNp bmNsdWRlIDxtYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmg+Ci0jaW5jbHVkZSA8bWFjaC1vbWFwMi9j bG9ja2RvbWFpbi5oPgotLyoKLSAqIFhYWCBUaGVzZSBtYWNoLW9tYXAyLyBpbmNsdWRlcyBhcmUg d3JvbmcgYW5kIHNob3VsZCBiZSByZW1vdmVkLiAgTm8KLSAqIGRyaXZlciBzaG91bGQgcmVhZCBv ciB3cml0ZSB0byBQUk0vQ00gcmVnaXN0ZXJzIGRpcmVjdGx5OyB0aGV5Ci0gKiBzaG91bGQgcmVs eSBvbiBPTUFQIGNvcmUgY29kZSB0byBkbyB0aGlzLgotICovCi0jaW5jbHVkZSA8bWFjaC1vbWFw Mi9jbTN4eHguaD4KLSNpbmNsdWRlIDxtYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaD4KLSNp bmNsdWRlIDxtYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oPgotI2luY2x1ZGUgPGRzcGJyaWRn ZS9kZXZkZWZzLmg+Ci0jaW5jbHVkZSA8aHdfZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9k c3Bpb2N0bC5oPgkvKiBmb3IgYnJpZGdlX2lvY3RsX2V4dHByb2MgZGVmbiAqLwotI2luY2x1ZGUg PGRzcGJyaWRnZS9zeW5jLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Nsay5oPgotCi1zdHJ1Y3Qg bWFwX2w0X3BlcmlwaGVyYWwgewotCXUzMiBwaHlzX2FkZHI7Ci0JdTMyIGRzcF92aXJ0X2FkZHI7 Ci19OwotCi0jZGVmaW5lIEFSTV9NQUlMQk9YX1NUQVJUICAgICAgICAgICAgICAgMHhmZmZjZjAw MAotI2RlZmluZSBBUk1fTUFJTEJPWF9MRU5HVEggICAgICAgICAgICAgIDB4ODAwCi0KLS8qIE5l dyBSZWdpc3RlcnMgaW4gT01BUDMuMSAqLwotCi0jZGVmaW5lIFRFU1RCTE9DS19JRF9TVEFSVCAg ICAgICAgICAgICAgMHhmZmZlZDQwMAotI2RlZmluZSBURVNUQkxPQ0tfSURfTEVOR1RIICAgICAg ICAgICAgIDB4ZmYKLQotLyogSUQgUmV0dXJuZWQgYnkgT01BUDE1MTAgKi8KLSNkZWZpbmUgVEJD X0lEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAweEI0NzAwMkYKLQotI2RlZmluZSBTUEFDRV9M RU5HVEggICAgICAgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBBUElfQ0xLTV9EUExMX0RN QSAgICAgICAgICAgICAgIDB4ZmZmZWMwMDAKLSNkZWZpbmUgQVJNX0lOVEVSUlVQVF9PRkZTRVQg ICAgICAgICAgICAweGIwMAotCi0jZGVmaW5lIEJJT1MyNFhYCi0KLSNkZWZpbmUgTDRfUEVSSVBI RVJBTF9OVUxMICAgICAgICAgIDB4MAotI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX05VTEwgICAg ICAgMHgwCi0KLSNkZWZpbmUgTUFYX0xPQ0tfVExCX0VOVFJJRVMgMTUKLQotI2RlZmluZSBMNF9Q RVJJUEhFUkFMX1BSTSAgICAgICAgMHg0ODMwNjAwMAkvKlBSTSBMNCBQZXJpcGhlcmFsICovCi0j ZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfUFJNICAgICAweDExODFlMDAwCi0jZGVmaW5lIEw0X1BF UklQSEVSQUxfU0NNICAgICAgICAweDQ4MDAyMDAwCS8qU0NNIEw0IFBlcmlwaGVyYWwgKi8KLSNk ZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TQ00gICAgIDB4MTE4MWYwMDAKLSNkZWZpbmUgTDRfUEVS SVBIRVJBTF9NTVUgICAgICAgIDB4NUQwMDAwMDAJLypNTVUgTDQgUGVyaXBoZXJhbCAqLwotI2Rl ZmluZSBEU1BWQV9QRVJJUEhFUkFMX01NVSAgICAgMHgxMTgyMDAwMAotI2RlZmluZSBMNF9QRVJJ UEhFUkFMX0NNICAgICAgICAweDQ4MDA0MDAwCS8qIENvcmUgTDQsIENsb2NrIE1hbmFnZW1lbnQg Ki8KLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9DTSAgICAgMHgxMTgxYzAwMAotI2RlZmluZSBM NF9QRVJJUEhFUkFMX1BFUiAgICAgICAgMHg0ODAwNTAwMAkvKiAgUEVSICovCi0jZGVmaW5lIERT UFZBX1BFUklQSEVSQUxfUEVSICAgICAweDExODFkMDAwCi0KLSNkZWZpbmUgTDRfUEVSSVBIRVJB TF9HUElPMSAgICAgICAweDQ4MzEwMDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzEg ICAgMHgxMTgwOTAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQSU8yICAgICAgIDB4NDkwNTAw MDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUElPMiAgICAweDExODBhMDAwCi0jZGVmaW5l IEw0X1BFUklQSEVSQUxfR1BJTzMgICAgICAgMHg0OTA1MjAwMAotI2RlZmluZSBEU1BWQV9QRVJJ UEhFUkFMX0dQSU8zICAgIDB4MTE4MGIwMDAKLSNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUElPNCAg ICAgICAweDQ5MDU0MDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzQgICAgMHgxMTgw YzAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQSU81ICAgICAgIDB4NDkwNTYwMDAKLSNkZWZp bmUgRFNQVkFfUEVSSVBIRVJBTF9HUElPNSAgICAweDExODBkMDAwCi0KLSNkZWZpbmUgTDRfUEVS SVBIRVJBTF9JVkEyV0RUICAgICAgMHg0OTAzMDAwMAotI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFM X0lWQTJXRFQgICAweDExODBlMDAwCi0KLSNkZWZpbmUgTDRfUEVSSVBIRVJBTF9ESVNQTEFZICAg ICAweDQ4MDUwMDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfRElTUExBWSAgMHgxMTgwZjAw MAotCi0jZGVmaW5lIEw0X1BFUklQSEVSQUxfU1NJICAgICAgICAgMHg0ODA1ODAwMAotI2RlZmlu ZSBEU1BWQV9QRVJJUEhFUkFMX1NTSSAgICAgIDB4MTE4MDQwMDAKLSNkZWZpbmUgTDRfUEVSSVBI RVJBTF9HREQgICAgICAgICAweDQ4MDU5MDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR0RE ICAgICAgMHgxMTgwNTAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NTMSAgICAgICAgIDB4NDgw NWEwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TUzEgICAgICAweDExODA2MDAwCi0jZGVm aW5lIEw0X1BFUklQSEVSQUxfU1MyICAgICAgICAgMHg0ODA1YjAwMAotI2RlZmluZSBEU1BWQV9Q RVJJUEhFUkFMX1NTMiAgICAgIDB4MTE4MDcwMDAKLQotI2RlZmluZSBMNF9QRVJJUEhFUkFMX0NB TUVSQSAgICAgIDB4NDgwQkMwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9DQU1FUkEgICAw eDExODE5MDAwCi0KLSNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TRE1BICAgICAgICAweDQ4MDU2MDAw Ci0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU0RNQSAgICAgMHgxMTgxMDAwMAkvKiAweDExODFk MDAwIGNvbmZsaWN0IHcvIFBFUiAqLwotCi0jZGVmaW5lIEw0X1BFUklQSEVSQUxfVUFSVDEgICAg ICAgICAgICAgMHg0ODA2YTAwMAotI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1VBUlQxICAgICAg ICAgIDB4MTE4MTEwMDAKLSNkZWZpbmUgTDRfUEVSSVBIRVJBTF9VQVJUMiAgICAgICAgICAgICAw eDQ4MDZjMDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfVUFSVDIgICAgICAgICAgMHgxMTgx MjAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX1VBUlQzICAgICAgICAgICAgIDB4NDkwMjAwMDAK LSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMyAgICAweDExODEzMDAwCi0KLSNkZWZpbmUg TDRfUEVSSVBIRVJBTF9NQ0JTUDEgICAgICAweDQ4MDc0MDAwCi0jZGVmaW5lIERTUFZBX1BFUklQ SEVSQUxfTUNCU1AxICAgMHgxMTgxNDAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX01DQlNQMiAg ICAgIDB4NDkwMjIwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDIgICAweDExODE1 MDAwCi0jZGVmaW5lIEw0X1BFUklQSEVSQUxfTUNCU1AzICAgICAgMHg0OTAyNDAwMAotI2RlZmlu ZSBEU1BWQV9QRVJJUEhFUkFMX01DQlNQMyAgIDB4MTE4MTYwMDAKLSNkZWZpbmUgTDRfUEVSSVBI RVJBTF9NQ0JTUDQgICAgICAweDQ5MDI2MDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUNC U1A0ICAgMHgxMTgxNzAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX01DQlNQNSAgICAgIDB4NDgw OTYwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDUgICAweDExODE4MDAwCi0KLSNk ZWZpbmUgTDRfUEVSSVBIRVJBTF9HUFRJTUVSNSAgICAweDQ5MDM4MDAwCi0jZGVmaW5lIERTUFZB X1BFUklQSEVSQUxfR1BUSU1FUjUgMHgxMTgwMDAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQ VElNRVI2ICAgIDB4NDkwM2EwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSNiAw eDExODAxMDAwCi0jZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BUSU1FUjcgICAgMHg0OTAzYzAwMAot I2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI3IDB4MTE4MDIwMDAKLSNkZWZpbmUgTDRf UEVSSVBIRVJBTF9HUFRJTUVSOCAgICAweDQ5MDNlMDAwCi0jZGVmaW5lIERTUFZBX1BFUklQSEVS QUxfR1BUSU1FUjggMHgxMTgwMzAwMAotCi0jZGVmaW5lIEw0X1BFUklQSEVSQUxfU1BJMSAgICAg IDB4NDgwOTgwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TUEkxICAgMHgxMTgxYTAwMAot I2RlZmluZSBMNF9QRVJJUEhFUkFMX1NQSTIgICAgICAweDQ4MDlhMDAwCi0jZGVmaW5lIERTUFZB X1BFUklQSEVSQUxfU1BJMiAgIDB4MTE4MWIwMDAKLQotI2RlZmluZSBMNF9QRVJJUEhFUkFMX01C T1ggICAgICAgIDB4NDgwOTQwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQk9YICAgICAw eDExODA4MDAwCi0KLSNkZWZpbmUgUE1fR1JQU0VMX0JBU0UJMHg0ODMwNzAwMAotI2RlZmluZSBE U1BWQV9HUlBTRUxfQkFTRQkweDExODIxMDAwCi0KLSNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TSURF VE9ORV9NQ0JTUDIgICAgICAgIDB4NDkwMjgwMDAKLSNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9T SURFVE9ORV9NQ0JTUDIgMHgxMTgyNDAwMAotI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NJREVUT05F X01DQlNQMyAgICAgICAgMHg0OTAyYTAwMAotI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NJREVU T05FX01DQlNQMyAweDExODI1MDAwCi0KLS8qIGRlZmluZSBhIHN0YXRpYyBhcnJheSB3aXRoIEw0 IG1hcHBpbmdzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1hcF9sNF9wZXJpcGhlcmFsIGw0X3Bl cmlwaGVyYWxfdGFibGVbXSA9IHsKLQl7TDRfUEVSSVBIRVJBTF9NQk9YLCBEU1BWQV9QRVJJUEhF UkFMX01CT1h9LAotCXtMNF9QRVJJUEhFUkFMX1NDTSwgRFNQVkFfUEVSSVBIRVJBTF9TQ019LAot CXtMNF9QRVJJUEhFUkFMX01NVSwgRFNQVkFfUEVSSVBIRVJBTF9NTVV9LAotCXtMNF9QRVJJUEhF UkFMX0dQVElNRVI1LCBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI1fSwKLQl7TDRfUEVSSVBIRVJB TF9HUFRJTUVSNiwgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSNn0sCi0Je0w0X1BFUklQSEVSQUxf R1BUSU1FUjcsIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjd9LAotCXtMNF9QRVJJUEhFUkFMX0dQ VElNRVI4LCBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI4fSwKLQl7TDRfUEVSSVBIRVJBTF9HUElP MSwgRFNQVkFfUEVSSVBIRVJBTF9HUElPMX0sCi0Je0w0X1BFUklQSEVSQUxfR1BJTzIsIERTUFZB X1BFUklQSEVSQUxfR1BJTzJ9LAotCXtMNF9QRVJJUEhFUkFMX0dQSU8zLCBEU1BWQV9QRVJJUEhF UkFMX0dQSU8zfSwKLQl7TDRfUEVSSVBIRVJBTF9HUElPNCwgRFNQVkFfUEVSSVBIRVJBTF9HUElP NH0sCi0Je0w0X1BFUklQSEVSQUxfR1BJTzUsIERTUFZBX1BFUklQSEVSQUxfR1BJTzV9LAotCXtM NF9QRVJJUEhFUkFMX0lWQTJXRFQsIERTUFZBX1BFUklQSEVSQUxfSVZBMldEVH0sCi0Je0w0X1BF UklQSEVSQUxfRElTUExBWSwgRFNQVkFfUEVSSVBIRVJBTF9ESVNQTEFZfSwKLQl7TDRfUEVSSVBI RVJBTF9TU0ksIERTUFZBX1BFUklQSEVSQUxfU1NJfSwKLQl7TDRfUEVSSVBIRVJBTF9HREQsIERT UFZBX1BFUklQSEVSQUxfR0REfSwKLQl7TDRfUEVSSVBIRVJBTF9TUzEsIERTUFZBX1BFUklQSEVS QUxfU1MxfSwKLQl7TDRfUEVSSVBIRVJBTF9TUzIsIERTUFZBX1BFUklQSEVSQUxfU1MyfSwKLQl7 TDRfUEVSSVBIRVJBTF9VQVJUMSwgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMX0sCi0Je0w0X1BFUklQ SEVSQUxfVUFSVDIsIERTUFZBX1BFUklQSEVSQUxfVUFSVDJ9LAotCXtMNF9QRVJJUEhFUkFMX1VB UlQzLCBEU1BWQV9QRVJJUEhFUkFMX1VBUlQzfSwKLQl7TDRfUEVSSVBIRVJBTF9NQ0JTUDEsIERT UFZBX1BFUklQSEVSQUxfTUNCU1AxfSwKLQl7TDRfUEVSSVBIRVJBTF9NQ0JTUDIsIERTUFZBX1BF UklQSEVSQUxfTUNCU1AyfSwKLQl7TDRfUEVSSVBIRVJBTF9NQ0JTUDMsIERTUFZBX1BFUklQSEVS QUxfTUNCU1AzfSwKLQl7TDRfUEVSSVBIRVJBTF9NQ0JTUDQsIERTUFZBX1BFUklQSEVSQUxfTUNC U1A0fSwKLQl7TDRfUEVSSVBIRVJBTF9NQ0JTUDUsIERTUFZBX1BFUklQSEVSQUxfTUNCU1A1fSwK LQl7TDRfUEVSSVBIRVJBTF9DQU1FUkEsIERTUFZBX1BFUklQSEVSQUxfQ0FNRVJBfSwKLQl7TDRf UEVSSVBIRVJBTF9TUEkxLCBEU1BWQV9QRVJJUEhFUkFMX1NQSTF9LAotCXtMNF9QRVJJUEhFUkFM X1NQSTIsIERTUFZBX1BFUklQSEVSQUxfU1BJMn0sCi0Je0w0X1BFUklQSEVSQUxfUFJNLCBEU1BW QV9QRVJJUEhFUkFMX1BSTX0sCi0Je0w0X1BFUklQSEVSQUxfQ00sIERTUFZBX1BFUklQSEVSQUxf Q019LAotCXtMNF9QRVJJUEhFUkFMX1BFUiwgRFNQVkFfUEVSSVBIRVJBTF9QRVJ9LAotCXtQTV9H UlBTRUxfQkFTRSwgRFNQVkFfR1JQU0VMX0JBU0V9LAotCXtMNF9QRVJJUEhFUkFMX1NJREVUT05F X01DQlNQMiwgRFNQVkFfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDJ9LAotCXtMNF9QRVJJUEhF UkFMX1NJREVUT05FX01DQlNQMywgRFNQVkFfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDN9LAot CXtMNF9QRVJJUEhFUkFMX05VTEwsIERTUFZBX1BFUklQSEVSQUxfTlVMTH0KLX07Ci0KLS8qCi0g KiAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCi0gKiAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogIHwwfDB8MXwwfDB8MHxjfGN8Y3xpfGl8aXxpfGl8aXxp fAotICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIHwgIChjbGFzcykg IHwgKG1vZHVsZSBzcGVjaWZpYykgfAotICoKLSAqICB3aGVyZSAgYyAtPiBFeHRlcm5lbCBDbG9j ayBDb21tYW5kOiBDbGsgJiBBdXRvaWRsZSBEaXNhYmxlL0VuYWJsZQotICogIGkgLT4gRXh0ZXJu YWwgQ2xvY2sgSUQgVGltZXJzIDUsNiw3LDgsIE1jQlNQMSwyIGFuZCBXRFQzCi0gKi8KLQotLyog TUJYX1BNX0NMS19JRE1BU0s6IERTUCBFeHRlcm5hbCBjbG9jayBpZCBtYXNrLiAqLwotI2RlZmlu ZSBNQlhfUE1fQ0xLX0lETUFTSyAgIDB4N0YKLQotLyogTUJYX1BNX0NMS19DTURTSElGVDogRFNQ IEV4dGVybmFsIGNsb2NrIGNvbW1hbmQgc2hpZnQuICovCi0jZGVmaW5lIE1CWF9QTV9DTEtfQ01E U0hJRlQgNwotCi0vKiBNQlhfUE1fQ0xLX0NNRE1BU0s6IERTUCBFeHRlcm5hbCBjbG9jayBjb21t YW5kIG1hc2suICovCi0jZGVmaW5lIE1CWF9QTV9DTEtfQ01ETUFTSyA3Ci0KLS8qIE1CWF9QTV9N QVhfUkVTT1VSQ0VTOiBDT1JFIDEgQ2xvY2sgcmVzb3VyY2VzLiAqLwotI2RlZmluZSBNQlhfQ09S RTFfUkVTT1VSQ0VTIDcKLQotLyogTUJYX1BNX01BWF9SRVNPVVJDRVM6IENPUkUgMiBDbG9jayBS ZXNvdXJjZXMuICovCi0jZGVmaW5lIE1CWF9DT1JFMl9SRVNPVVJDRVMgMQotCi0vKiBNQlhfUE1f TUFYX1JFU09VUkNFUzogVE9UQUwgQ2xvY2sgUmVzb3VyY2VzLiAqLwotI2RlZmluZSBNQlhfUE1f TUFYX1JFU09VUkNFUyAxMQotCi0vKiAgUG93ZXIgTWFuYWdlbWVudCBDb21tYW5kcyAqLwotI2Rl ZmluZSBCUFdSX0RJU0FCTEVfQ0xPQ0sJMAotI2RlZmluZSBCUFdSX0VOQUJMRV9DTE9DSwkxCi0K LS8qIE9NQVAyNDJ4IHNwZWNpZmljIHJlc291cmNlcyAqLwotZW51bSBicHdyX2V4dF9jbG9ja19p ZCB7Ci0JQlBXUl9HUF9USU1FUjUgPSAweDEwLAotCUJQV1JfR1BfVElNRVI2LAotCUJQV1JfR1Bf VElNRVI3LAotCUJQV1JfR1BfVElNRVI4LAotCUJQV1JfV0RfVElNRVIzLAotCUJQV1JfTUNCU1Ax LAotCUJQV1JfTUNCU1AyLAotCUJQV1JfTUNCU1AzLAotCUJQV1JfTUNCU1A0LAotCUJQV1JfTUNC U1A1LAotCUJQV1JfU1NJID0gMHgyMAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBicHdyX2Nsa2lk W10gPSB7Ci0JKHUzMikgQlBXUl9HUF9USU1FUjUsCi0JKHUzMikgQlBXUl9HUF9USU1FUjYsCi0J KHUzMikgQlBXUl9HUF9USU1FUjcsCi0JKHUzMikgQlBXUl9HUF9USU1FUjgsCi0JKHUzMikgQlBX Ul9XRF9USU1FUjMsCi0JKHUzMikgQlBXUl9NQ0JTUDEsCi0JKHUzMikgQlBXUl9NQ0JTUDIsCi0J KHUzMikgQlBXUl9NQ0JTUDMsCi0JKHUzMikgQlBXUl9NQ0JTUDQsCi0JKHUzMikgQlBXUl9NQ0JT UDUsCi0JKHUzMikgQlBXUl9TU0kKLX07Ci0KLXN0cnVjdCBicHdyX2Nsa190IHsKLQl1MzIgY2xr X2lkOwotCWVudW0gZHNwX2Nsa19pZCBjbGs7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJw d3JfY2xrX3QgYnB3cl9jbGtzW10gPSB7Ci0Jeyh1MzIpIEJQV1JfR1BfVElNRVI1LCBEU1BfQ0xL X0dQVDV9LAotCXsodTMyKSBCUFdSX0dQX1RJTUVSNiwgRFNQX0NMS19HUFQ2fSwKLQl7KHUzMikg QlBXUl9HUF9USU1FUjcsIERTUF9DTEtfR1BUN30sCi0Jeyh1MzIpIEJQV1JfR1BfVElNRVI4LCBE U1BfQ0xLX0dQVDh9LAotCXsodTMyKSBCUFdSX1dEX1RJTUVSMywgRFNQX0NMS19XRFQzfSwKLQl7 KHUzMikgQlBXUl9NQ0JTUDEsIERTUF9DTEtfTUNCU1AxfSwKLQl7KHUzMikgQlBXUl9NQ0JTUDIs IERTUF9DTEtfTUNCU1AyfSwKLQl7KHUzMikgQlBXUl9NQ0JTUDMsIERTUF9DTEtfTUNCU1AzfSwK LQl7KHUzMikgQlBXUl9NQ0JTUDQsIERTUF9DTEtfTUNCU1A0fSwKLQl7KHUzMikgQlBXUl9NQ0JT UDUsIERTUF9DTEtfTUNCU1A1fSwKLQl7KHUzMikgQlBXUl9TU0ksIERTUF9DTEtfU1NJfQotfTsK LQotLyogSW50ZXJydXB0IFJlZ2lzdGVyIE9mZnNldHMgKi8KLSNkZWZpbmUgSU5USF9JVF9SRUdf T0ZGU0VUICAgICAgICAgICAgICAweDAwCS8qIEludGVycnVwdCByZWdpc3RlciBvZmZzZXQgKi8K LSNkZWZpbmUgSU5USF9NQVNLX0lUX1JFR19PRkZTRVQgICAgICAgICAweDA0CS8qIE1hc2sgSW50 ZXJydXB0IHJlZyBvZmZzZXQgKi8KLQotI2RlZmluZSAgIERTUF9NQUlMQk9YMV9JTlQgICAgICAg ICAgICAgIDEwCi0vKgotICogIEJpdCBkZWZpbml0aW9uIG9mICBJbnRlcnJ1cHQgIExldmVsICBS ZWdpc3RlcnMKLSAqLwotCi0vKiBNYWlsIEJveCBkZWZpbmVzICovCi0jZGVmaW5lIE1CX0FSTTJE U1AxX1JFR19PRkZTRVQgICAgICAgICAgMHgwMAotCi0jZGVmaW5lIE1CX0FSTTJEU1AxQl9SRUdf T0ZGU0VUICAgICAgICAgMHgwNAotCi0jZGVmaW5lIE1CX0RTUDJBUk0xQl9SRUdfT0ZGU0VUICAg ICAgICAgMHgwQwotCi0jZGVmaW5lIE1CX0FSTTJEU1AxX0ZMQUdfUkVHX09GRlNFVCAgICAgMHgx OAotCi0jZGVmaW5lIE1CX0FSTTJEU1BfRkxBRyAgICAgICAgICAgICAgICAgMHgwMDAxCi0KLSNk ZWZpbmUgTUJPWF9BUk0yRFNQIEhXX01CT1hfSUQwCi0jZGVmaW5lIE1CT1hfRFNQMkFSTSBIV19N Qk9YX0lEMQotI2RlZmluZSBNQk9YX0FSTSBIV19NQk9YX1UwX0FSTQotI2RlZmluZSBNQk9YX0RT UCBIV19NQk9YX1UxX0RTUDEKLQotI2RlZmluZSBFTkFCTEUgICAgICAgICAgICAgICAgICAgICAg ICAgIHRydWUKLSNkZWZpbmUgRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQot Ci0jZGVmaW5lIEhJR0hfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQotI2RlZmluZSBM T1dfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCi0KLS8qIE1hY3JvJ3MgKi8KLSNk ZWZpbmUgQ0xFQVJfQklUKHJlZywgbWFzaykgICAgICAgICAgICAgKHJlZyAmPSB+bWFzaykKLSNk ZWZpbmUgU0VUX0JJVChyZWcsIG1hc2spICAgICAgICAgICAgICAgKHJlZyB8PSBtYXNrKQotCi0j ZGVmaW5lIFNFVF9HUk9VUF9CSVRTMTYocmVnLCBwb3NpdGlvbiwgd2lkdGgsIHZhbHVlKSBcCi0J ZG8ge1wKLQkJcmVnICY9IH4oKDB4RkZGRiA+PiAoMTYgLSAod2lkdGgpKSkgPDwgKHBvc2l0aW9u KSk7IFwKLQkJcmVnIHw9ICgodmFsdWUgJiAoMHhGRkZGID4+ICgxNiAtICh3aWR0aCkpKSkgPDwg KHBvc2l0aW9uKSk7IFwKLQl9IHdoaWxlICgwKTsKLQotI2RlZmluZSBDTEVBUl9CSVRfSU5ERVgo cmVnLCBpbmRleCkgICAocmVnICY9IH4oMSA8PCAoaW5kZXgpKSkKLQotLyogVGhpcyBCcmlkZ2Ug ZHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQ6ICovCi1zdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0IHsK LQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsJLyogSGFuZGxlIHRvIEJyaWRnZSBkZXZpY2Ug b2JqZWN0LiAqLwotCXUzMiBkc3BfYmFzZV9hZGRyOwkvKiBBcm0ncyBBUEkgdG8gRFNQIHZpcnQg YmFzZSBhZGRyICovCi0JLyoKLQkgKiBEU1AgRXh0ZXJuYWwgbWVtb3J5IHByb2cgYWRkcmVzcyBh cyBzZWVuIHZpcnR1YWxseSBieSB0aGUgT1Mgb24KLQkgKiB0aGUgaG9zdCBzaWRlLgotCSAqLwot CXUzMiBkc3BfZXh0X2Jhc2VfYWRkcjsJLyogU2VlIHRoZSBjb21tZW50IGFib3ZlICovCi0JdTMy IGFwaV9yZWdfYmFzZTsJLyogQVBJIG1lbSBtYXAnZCByZWdpc3RlcnMgKi8KLQl2b2lkIF9faW9t ZW0gKmRzcF9tbXVfYmFzZTsJLyogRFNQIE1NVSBNYXBwZWQgcmVnaXN0ZXJzICovCi0JdTMyIGFw aV9jbGtfYmFzZTsJLyogQ0xLIFJlZ2lzdGVycyAqLwotCXUzMiBkc3BfY2xrX20yX2Jhc2U7CS8q IERTUCBDbG9jayBNb2R1bGUgbTIgKi8KLQl1MzIgcHVibGljX3JoZWE7CS8qIFB1YiBSaGVhICov Ci0JdTMyIGludF9hZGRyOwkJLyogTUIgSU5UUiByZWcgKi8KLQl1MzIgdGNfZW5kaWFuaXNtOwkv KiBUQyBFbmRpYW5pc20gcmVnaXN0ZXIgKi8KLQl1MzIgdGVzdF9iYXNlOwkJLyogRFNQIE1NVSBN YXBwZWQgcmVnaXN0ZXJzICovCi0JdTMyIHNlbGZfbG9vcDsJCS8qIFBvaW50ZXIgdG8gdGhlIHNl bGZsb29wICovCi0JdTMyIGRzcF9zdGFydF9hZGQ7CS8qIEFQSSBCb290IHZlY3RvciAqLwotCXUz MiBpbnRlcm5hbF9zaXplOwkvKiBJbnRlcm5hbCBtZW1vcnkgc2l6ZSAqLwotCi0Jc3RydWN0IG9t YXBfbWJveCAqbWJveDsJCS8qIE1haWwgYm94IGhhbmRsZSAqLwotCi0Jc3RydWN0IGNmZ19ob3N0 cmVzICpyZXNvdXJjZXM7CS8qIEhvc3QgUmVzb3VyY2VzICovCi0KLQkvKgotCSAqIFByb2Nlc3Nv ciBzcGVjaWZpYyBpbmZvIGlzIHNldCB3aGVuIHByb2cgbG9hZGVkIGFuZCByZWFkIGZyb20gRENE LgotCSAqIFtTZWUgYnJpZGdlX2Rldl9jdHJsKCldICBQUk9DIGluZm8gY29udGFpbnMgRFNQLU1N VSBUTEIgZW50cmllcy4KLQkgKi8KLQkvKiBETU1VIFRMQiBlbnRyaWVzICovCi0Jc3RydWN0IGJy aWRnZV9pb2N0bF9leHRwcm9jIGF0bGJfZW50cnlbQlJESU9DVExfTlVNT0ZNTVVUTEJdOwotCXUz MiBicmRfc3RhdGU7ICAgICAgIC8qIExhc3Qga25vd24gYm9hcmQgc3RhdGUuICovCi0KLQkvKiBU QyBTZXR0aW5ncyAqLwotCWJvb2wgdGNfd29yZF9zd2FwX29uOwkvKiBUcmFmZmljIENvbnRyb2xs ZXIgV29yZCBTd2FwICovCi0Jc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdF9hdHRyczsKLQl1MzIg ZHNwX3Blcl9jbGtzOwotfTsKLQotLyoKLSAqIElmIGRzcF9kZWJ1ZyBpcyB0cnVlLCBkbyBub3Qg YnJhbmNoIHRvIHRoZSBEU1AgZW50cnkKLSAqIHBvaW50IGFuZCB3YWl0IGZvciBEU1AgdG8gYm9v dC4KLSAqLwotZXh0ZXJuIHMzMiBkc3BfZGVidWc7Ci0KLS8qCi0gKiAgPT09PT09PT0gc21faW50 ZXJydXB0X2RzcCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNldCBpbnRlcnJ1cHQg dmFsdWUgJiBzZW5kIGFuIGludGVycnVwdCB0byB0aGUgRFNQIHByb2Nlc3NvcihzKS4KLSAqICAg ICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIG1haWxib3ggaW50ZXJydXB0IG1lY2hhbmlz bXMgYWxsb3cgZGF0YQotICogICAgICB0byBiZSBhc3NvY2lhdGVkIHdpdGggaW50ZXJydXB0IHN1 Y2ggYXMgZm9yIE9NQVAncyBDTUQvREFUQSByZWdzLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAg IGRldl9jb250ZXh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBp bmZvLgotICogICAgICBtYl92YWw6ICAgICAgICAgVmFsdWUgYXNzb2NpYXRlZCB3aXRoIGludGVy cnVwdChlLmcuIG1haWxib3ggdmFsdWUpLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAg ICBJbnRlcnJ1cHQgc2VudDsKLSAqICAgICAgZWxzZTogICAgICAgICAgIFVuYWJsZSB0byBzZW5k IGludGVycnVwdC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICovCi1pbnQgc21faW50 ZXJydXB0X2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdTE2IG1i X3ZhbCk7Ci0KLSNlbmRpZiAvKiBfVElPTUFQXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcF9wd3IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9jb3JlL190aW9tYXBfcHdyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDdiYmQzODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUv X3Rpb21hcF9wd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBfdGlv bWFwX3B3ci5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9u cyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERlZmluaXRpb25zIGFuZCB0eXBlcyBm b3IgdGhlIERTUCB3YWtlL3NsZWVwIHJvdXRpbmVzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw NS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAq Ci0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBF WFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1J VEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgX1RJT01B UF9QV1JfCi0jZGVmaW5lIF9USU9NQVBfUFdSXwotCi0jaWZkZWYgQ09ORklHX1BNCi1leHRlcm4g czMyIGRzcF90ZXN0X3NsZWVwc3RhdGU7Ci0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBtYWlsYm94 X2NvbnRleHQgbWJveHNldHRpbmc7Ci0KLS8qCi0gKiA9PT09PT09PSB3YWtlX2RzcCA9PT09PT09 PT0KLSAqIFdha2VzIHVwIHRoZSBEU1AgZnJvbSBEZWVwU2xlZXAKLSAqLwotZXh0ZXJuIGludCB3 YWtlX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKLQkJCQkJCQl2 b2lkICpwYXJncyk7Ci0KLS8qCi0gKiA9PT09PT09PSBzbGVlcF9kc3AgPT09PT09PT09Ci0gKiBQ bGFjZXMgdGhlIERTUCBpbiBEZWVwU2xlZXAuCi0gKi8KLWV4dGVybiBpbnQgc2xlZXBfZHNwKHN0 cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAotCQkJICAgIHUzMiBkd19jbWQs IHZvaWQgKnBhcmdzKTsKLS8qCi0gKiAgPT09PT09PT1pbnRlcnJ1cHRfZHNwPT09PT09PT0KLSAq CVNlbmRzIGFuIGludGVycnVwdCB0byBEU1AgdW5jb25kaXRpb25hbGx5LgotICovCi1leHRlcm4g dm9pZCBpbnRlcnJ1cHRfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0 LAotCQkJCQkJCXUxNiBtYl92YWwpOwotCi0vKgotICogPT09PT09PT0gd2FrZV9kc3AgPT09PT09 PT09Ci0gKiBXYWtlcyB1cCB0aGUgRFNQIGZyb20gRGVlcFNsZWVwCi0gKi8KLWV4dGVybiBpbnQg ZHNwX3BlcmlwaGVyYWxfY2xrX2N0cmwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCQkq ZGV2X2NvbnRleHQsIHZvaWQgKnBhcmdzKTsKLS8qCi0gKiAgPT09PT09PT0gaGFuZGxlX2hpYmVy bmF0aW9uX2Zyb21fZHNwID09PT09PT09Ci0gKglIYW5kbGUgSGliZXJuYXRpb24gcmVxdWVzdGVk IGZyb20gRFNQCi0gKi8KLWludCBoYW5kbGVfaGliZXJuYXRpb25fZnJvbV9kc3Aoc3RydWN0IGJy aWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpOwotLyoKLSAqICA9PT09PT09PSBwb3N0X3Nj YWxlX2RzcCA9PT09PT09PQotICoJSGFuZGxlIFBvc3QgU2NhbGUgbm90aWZpY2F0aW9uIHRvIERT UAotICovCi1pbnQgcG9zdF9zY2FsZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2 X2NvbnRleHQsCi0JCQkJCQkJdm9pZCAqcGFyZ3MpOwotLyoKLSAqICA9PT09PT09PSBwcmVfc2Nh bGVfZHNwID09PT09PT09Ci0gKglIYW5kbGUgUHJlIFNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AK LSAqLwotaW50IHByZV9zY2FsZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2Nv bnRleHQsCi0JCQkJCQkJdm9pZCAqcGFyZ3MpOwotLyoKLSAqICA9PT09PT09PSBoYW5kbGVfY29u c3RyYWludHNfc2V0ID09PT09PT09Ci0gKglIYW5kbGUgY29uc3RyYWludHMgcmVxdWVzdCBmcm9t IERTUAotICovCi1pbnQgaGFuZGxlX2NvbnN0cmFpbnRzX3NldChzdHJ1Y3QgYnJpZGdlX2Rldl9j b250ZXh0ICpkZXZfY29udGV4dCwKLQkJCQkgIHZvaWQgKnBhcmdzKTsKLQotLyoKLSAqICA9PT09 PT09PSBkc3BfY2xrX3dha2V1cF9ldmVudF9jdHJsID09PT09PT09Ci0gKiAgICAgVGhpcyBmdW5j dGlvbiBzZXRzIHRoZSBncm91cCBzZWxjdGlvbiBiaXRzIGZvciB3aGlsZQotICogICAgIGVuYWJs aW5nL2Rpc2FibGluZy4KLSAqLwotdm9pZCBkc3BfY2xrX3dha2V1cF9ldmVudF9jdHJsKHUzMiBj bG9ja19pZCwgYm9vbCBlbmFibGUpOwotCi0jZW5kaWYgLyogX1RJT01BUF9QV1JfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMgYi9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGM4NTU5OTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2NvcmUvY2hubF9zbS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTA4ICswLDAgQEAKLS8q Ci0gKiBjaG5sX3NtLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVu Y3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogSW1wbGVtZW50cyB1cHBlciBl ZGdlIGZ1bmN0aW9ucyBmb3IgQnJpZGdlIGRyaXZlciBjaGFubmVsIG1vZHVsZS4KLSAqCi0gKiBD b3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRo aXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBB TkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwot Ci0vKgotICogICAgICBUaGUgbG93ZXIgZWRnZSBmdW5jdGlvbnMgbXVzdCBiZSBpbXBsZW1lbnRl ZCBieSB0aGUgQnJpZGdlIGRyaXZlcgotICogICAgICB3cml0ZXIsIGFuZCBhcmUgZGVjbGFyZWQg aW4gY2hubF9zbS5oLgotICoKLSAqICAgICAgQ2FyZSBpcyB0YWtlbiBpbiB0aGlzIGNvZGUgdG8g cHJldmVudCBzaW11bHRhbmVvdXMgYWNjZXNzIHRvIGNoYW5uZWwKLSAqICAgICAgcXVldWVzIGZy b20KLSAqICAgICAgMS4gVGhyZWFkcy4KLSAqICAgICAgMi4gaW9fZHBjKCksIHNjaGVkdWxlZCBm cm9tIHRoZSBpb19pc3IoKSBhcyBhbiBldmVudC4KLSAqCi0gKiAgICAgIFRoaXMgaXMgZG9uZSBw cmltYXJpbHkgYnk6Ci0gKiAgICAgIC0gU2VtYXBob3Jlcy4KLSAqICAgICAgLSBzdGF0ZSBmbGFn cyBpbiB0aGUgY2hhbm5lbCBvYmplY3Q7IGFuZAotICogICAgICAtIGVuc3VyaW5nIHRoZSBJT19E aXNwYXRjaCgpIHJvdXRpbmUsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGJvdGgKLSAqICAgICAgICBD SE5MX0FkZElPUmVxKCkgYW5kIHRoZSBEUEMoaWYgaW1wbGVtZW50ZWQpLCBpcyBub3QgcmUtZW50 ZXJlZC4KLSAqCi0gKiAgQ2hhbm5lbCBJbnZhcmlhbnQ6Ci0gKiAgICAgIFRoZXJlIGlzIGFuIGlt cG9ydGFudCBpbnZhcmlhbnQgY29uZGl0aW9uIHdoaWNoIG11c3QgYmUgbWFpbnRhaW5lZCBwZXIK LSAqICAgICAgY2hhbm5lbCBvdXRzaWRlIG9mIGJyaWRnZV9jaG5sX2dldF9pb2MoKSBhbmQgSU9f RGlzcGF0Y2goKSwgdmlvbGF0aW9uIG9mCi0gKiAgICAgIHdoaWNoIG1heSBjYXVzZSB0aW1lb3V0 cyBhbmQvb3IgZmFpbHVyZSBvZiBmdW5jdGlvbiBzeW5jX3dhaXRfb25fZXZlbnQuCi0gKiAgICAg IFRoaXMgaW52YXJpYW50IGNvbmRpdGlvbiBpczoKLSAqCi0gKiAgICAgICAgICBsaXN0X2VtcHR5 KCZwY2hubC0+aW9fY29tcGxldGlvbnMpID09PiBwY2hubC0+c3luY19ldmVudCBpcyByZXNldAot ICogICAgICBhbmQKLSAqICAgICAgICAgICFsaXN0X2VtcHR5KCZwY2hubC0+aW9fY29tcGxldGlv bnMpID09PiBwY2hubC0+c3luY19ldmVudCBpcyBzZXQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyAq LwotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvZGJkZWZzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBP UyBBZGFwdGF0aW9uIExheWVyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KLSNp bmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BjaG5s Lmg+Ci0jaW5jbHVkZSAiX3Rpb21hcC5oIgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYu aD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLwot I2luY2x1ZGUgPGRzcGJyaWRnZS9pb19zbS5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gRGVmaW5lIGZvciBUaGlzICovCi0jZGVmaW5lIFVTRVJNT0RFX0FERFIg ICBQQUdFX09GRlNFVAotCi0jZGVmaW5lIE1BSUxCT1hfSVJRIElOVF9NQUlMX01QVV9JUlEKLQot LyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlw ZXMgKi8KLXN0YXRpYyBpbnQgY3JlYXRlX2NoaXJwX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlz dCwgdTMyIGNoaXJwcyk7Ci0KLXN0YXRpYyB2b2lkIGZyZWVfY2hpcnBfbGlzdChzdHJ1Y3QgbGlz dF9oZWFkICpsaXN0KTsKLQotc3RhdGljIGludCBzZWFyY2hfZnJlZV9jaGFubmVsKHN0cnVjdCBj aG5sX21nciAqY2hubF9tZ3Jfb2JqLAotCQkJCSAgICAgIHUzMiAqY2hubCk7Ci0KLS8qCi0gKiAg PT09PT09PT0gYnJpZGdlX2NobmxfYWRkX2lvX3JlcSA9PT09PT09PQotICogICAgICBFbnF1ZXVl IGFuIEkvTyByZXF1ZXN0IGZvciBkYXRhIHRyYW5zZmVyIG9uIGEgY2hhbm5lbCB0byB0aGUgRFNQ LgotICogICAgICBUaGUgZGlyZWN0aW9uIChtb2RlKSBpcyBzcGVjaWZpZWQgaW4gdGhlIGNoYW5u ZWwgb2JqZWN0LiBOb3RlIHRoZSBEU1AKLSAqICAgICAgYWRkcmVzcyBpcyBzcGVjaWZpZWQgZm9y IGNoYW5uZWxzIG9wZW5lZCBpbiBkaXJlY3QgSS9PIG1vZGUuCi0gKi8KLWludCBicmlkZ2VfY2hu bF9hZGRfaW9fcmVxKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosIHZvaWQgKmhvc3RfYnVm LAotCQkJICAgICAgIHUzMiBieXRlX3NpemUsIHUzMiBidWZfc2l6ZSwKLQkJCSAgICAgICB1MzIg ZHdfZHNwX2FkZHIsIHUzMiBkd19hcmcpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNo bmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKLQlzdHJ1 Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iaiA9IE5VTEw7Ci0Jc3RydWN0IGJyaWRnZV9kZXZf Y29udGV4dCAqZGV2X2N0eHQ7Ci0Jc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7Ci0JdTggZHdf c3RhdGU7Ci0JYm9vbCBpc19lb3M7Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7Ci0J dTggKmhvc3Rfc3lzX2J1ZiA9IE5VTEw7Ci0JYm9vbCBzY2hlZF9kcGMgPSBmYWxzZTsKLQl1MTYg bWJfdmFsID0gMDsKLQotCWlzX2VvcyA9IChieXRlX3NpemUgPT0gMCk7Ci0KLQkvKiBWYWxpZGF0 ZSBhcmdzICovCi0JaWYgKCFob3N0X2J1ZiB8fCAhcGNobmwpCi0JCXJldHVybiAtRUZBVUxUOwot Ci0JaWYgKGlzX2VvcyAmJiBDSE5MX0lTX0lOUFVUKHBjaG5sLT5jaG5sX21vZGUpKQotCQlyZXR1 cm4gLUVQRVJNOwotCi0JLyoKLQkgKiBDaGVjayB0aGUgY2hhbm5lbCBzdGF0ZTogb25seSBxdWV1 ZSBjaGlycCBpZiBjaGFubmVsIHN0YXRlCi0JICogYWxsb3dzIGl0LgotCSAqLwotCWR3X3N0YXRl ID0gcGNobmwtPnN0YXRlOwotCWlmIChkd19zdGF0ZSAhPSBDSE5MX1NUQVRFUkVBRFkpIHsKLQkJ aWYgKGR3X3N0YXRlICYgQ0hOTF9TVEFURUNBTkNFTCkKLQkJCXJldHVybiAtRUNBTkNFTEVEOwot CQlpZiAoKGR3X3N0YXRlICYgQ0hOTF9TVEFURUVPUykgJiYKLQkJCQlDSE5MX0lTX09VVFBVVChw Y2hubC0+Y2hubF9tb2RlKSkKLQkJCXJldHVybiAtRVBJUEU7Ci0JCS8qIE5vIG90aGVyIHBvc3Np YmxlIHN0YXRlcyBsZWZ0ICovCi0JfQotCi0JZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsKLQlk ZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGRldl9vYmosICZkZXZfY3R4dCk7Ci0JaWYgKCFkZXZfY3R4 dCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAocGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BD UFkgJiYgcGNobmwtPmNobmxfaWQgPiAxICYmIGhvc3RfYnVmKSB7Ci0JCWlmICghKGhvc3RfYnVm IDwgKHZvaWQgKilVU0VSTU9ERV9BRERSKSkgewotCQkJaG9zdF9zeXNfYnVmID0gaG9zdF9idWY7 Ci0JCQlnb3RvIGZ1bmNfY29udDsKLQkJfQotCQkvKiBpZiBhZGRyIGluIHVzZXIgbW9kZSwgdGhl biBjb3B5IHRvIGtlcm5lbCBzcGFjZSAqLwotCQlob3N0X3N5c19idWYgPSBrbWFsbG9jKGJ1Zl9z aXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGhvc3Rfc3lzX2J1ZiA9PSBOVUxMKQotCQkJcmV0dXJu IC1FTk9NRU07Ci0KLQkJaWYgKENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7Ci0J CQlzdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihob3N0X3N5c19idWYsIGhvc3RfYnVmLAotCQkJCQli dWZfc2l6ZSk7Ci0JCQlpZiAoc3RhdHVzKSB7Ci0JCQkJa2ZyZWUoaG9zdF9zeXNfYnVmKTsKLQkJ CQlob3N0X3N5c19idWYgPSBOVUxMOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQl9Ci0J fQotZnVuY19jb250OgotCS8qIE1haWxib3ggSVJRIGlzIGRpc2FibGVkIHRvIGF2b2lkIHJhY2Ug Y29uZGl0aW9uIHdpdGggRE1BL1pDUFkKLQkgKiBjaGFubmVscy4gRFBDQ1MgaXMgaGVsZCB0byBh dm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBQQ1BZIGNoYW5uZWxzLgotCSAqIElmIERQQyBpcyBz Y2hlZHVsZWQgaW4gcHJvY2VzcyBjb250ZXh0IChpb3NtX3NjaGVkdWxlKSBhbmQgYW55Ci0JICog bm9uLW1haWxib3ggaW50ZXJydXB0IG9jY3VycywgdGhhdCBEUEMgd2lsbCBydW4gYW5kIGJyZWFr IENTLiBIZW5jZQotCSAqIHdlIGRpc2FibGUgQUxMIERQQ3MuIFdlIHdpbGwgdHJ5IHRvIGRpc2Fi bGUgT05MWSBJTyBEUEMgbGF0ZXIuICovCi0JY2hubF9tZ3Jfb2JqID0gcGNobmwtPmNobmxfbWdy X29iajsKLQlzcGluX2xvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7Ci0Jb21h cF9tYm94X2Rpc2FibGVfaXJxKGRldl9jdHh0LT5tYm94LCBJUlFfUlgpOwotCWlmIChwY2hubC0+ Y2hubF90eXBlID09IENITkxfUENQWSkgewotCQkvKiBUaGlzIGlzIGEgcHJvY2Vzc29yLWNvcHkg Y2hhbm5lbC4gKi8KLQkJaWYgKENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7Ci0J CQkvKiBDaGVjayBidWZmZXIgc2l6ZSBvbiBvdXRwdXQgY2hhbm5lbHMgZm9yIGZpdC4gKi8KLQkJ CWlmIChieXRlX3NpemUgPiBpb19idWZfc2l6ZSgKLQkJCQkJCXBjaG5sLT5jaG5sX21ncl9vYmot PmlvbWdyKSkgewotCQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0J CX0KLQl9Ci0KLQkvKiBHZXQgYSBmcmVlIGNoaXJwOiAqLwotCWlmIChsaXN0X2VtcHR5KCZwY2hu bC0+ZnJlZV9wYWNrZXRzX2xpc3QpKSB7Ci0JCXN0YXR1cyA9IC1FSU87Ci0JCWdvdG8gb3V0Owot CX0KLQljaG5sX3BhY2tldF9vYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZwY2hubC0+ZnJlZV9wYWNr ZXRzX2xpc3QsCi0JCQlzdHJ1Y3QgY2hubF9pcnAsIGxpbmspOwotCWxpc3RfZGVsKCZjaG5sX3Bh Y2tldF9vYmotPmxpbmspOwotCi0JLyogRW5xdWV1ZSB0aGUgY2hpcnAgb24gdGhlIGNobmwncyBJ T1JlcXVlc3QgcXVldWU6ICovCi0JY2hubF9wYWNrZXRfb2JqLT5ob3N0X3VzZXJfYnVmID0gY2hu bF9wYWNrZXRfb2JqLT5ob3N0X3N5c19idWYgPQotCQlob3N0X2J1ZjsKLQlpZiAocGNobmwtPmNo bmxfdHlwZSA9PSBDSE5MX1BDUFkgJiYgcGNobmwtPmNobmxfaWQgPiAxKQotCQljaG5sX3BhY2tl dF9vYmotPmhvc3Rfc3lzX2J1ZiA9IGhvc3Rfc3lzX2J1ZjsKLQotCS8qCi0JICogTm90ZTogZm9y IGRtYSBjaGFucyBkd19kc3BfYWRkciBjb250YWlucyBkc3AgYWRkcmVzcwotCSAqIG9mIFNNIGJ1 ZmZlci4KLQkgKi8KLQkvKiBEU1AgYWRkcmVzcyAqLwotCWNobmxfcGFja2V0X29iai0+ZHNwX3R4 X2FkZHIgPSBkd19kc3BfYWRkciAvIGNobmxfbWdyX29iai0+d29yZF9zaXplOwotCWNobmxfcGFj a2V0X29iai0+Ynl0ZV9zaXplID0gYnl0ZV9zaXplOwotCWNobmxfcGFja2V0X29iai0+YnVmX3Np emUgPSBidWZfc2l6ZTsKLQkvKiBPbmx5IHZhbGlkIGZvciBvdXRwdXQgY2hhbm5lbCAqLwotCWNo bmxfcGFja2V0X29iai0+YXJnID0gZHdfYXJnOwotCWNobmxfcGFja2V0X29iai0+c3RhdHVzID0g KGlzX2VvcyA/IENITkxfSU9DU1RBVEVPUyA6Ci0JCQlDSE5MX0lPQ1NUQVRDT01QTEVURSk7Ci0J bGlzdF9hZGRfdGFpbCgmY2hubF9wYWNrZXRfb2JqLT5saW5rLCAmcGNobmwtPmlvX3JlcXVlc3Rz KTsKLQlwY2hubC0+Y2lvX3JlcXMrKzsKLQkvKgotCSAqIElmIGVuZCBvZiBzdHJlYW0sIHVwZGF0 ZSB0aGUgY2hhbm5lbCBzdGF0ZSB0byBwcmV2ZW50Ci0JICogbW9yZSBJT1Incy4KLQkgKi8KLQlp ZiAoaXNfZW9zKQotCQlwY2hubC0+c3RhdGUgfD0gQ0hOTF9TVEFURUVPUzsKLQotCS8qIFJlcXVl c3QgSU8gZnJvbSB0aGUgRFNQICovCi0JaW9fcmVxdWVzdF9jaG5sKGNobmxfbWdyX29iai0+aW9t Z3IsIHBjaG5sLAotCQkJKENITkxfSVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkgPyBJT19JTlBV VCA6Ci0JCQkgSU9fT1VUUFVUKSwgJm1iX3ZhbCk7Ci0Jc2NoZWRfZHBjID0gdHJ1ZTsKLW91dDoK LQlvbWFwX21ib3hfZW5hYmxlX2lycShkZXZfY3R4dC0+bWJveCwgSVJRX1JYKTsKLQlzcGluX3Vu bG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKLQlpZiAobWJfdmFsICE9IDAp Ci0JCXNtX2ludGVycnVwdF9kc3AoZGV2X2N0eHQsIG1iX3ZhbCk7Ci0KLQkvKiBTY2hlZHVsZSBh IERQQywgdG8gZG8gdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyICovCi0JaWYgKHNjaGVkX2RwYykK LQkJaW9zbV9zY2hlZHVsZShjaG5sX21ncl9vYmotPmlvbWdyKTsKLQotCXJldHVybiBzdGF0dXM7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2FuY2VsX2lvID09PT09PT09Ci0g KiAgICAgIFJldHVybiBhbGwgSS9PIHJlcXVlc3RzIHRvIHRoZSBjbGllbnQgd2hpY2ggaGF2ZSBu b3QgeWV0IGJlZW4KLSAqICAgICAgdHJhbnNmZXJyZWQuICBUaGUgY2hhbm5lbCdzIEkvTyBjb21w bGV0aW9uIG9iamVjdCBpcwotICogICAgICBzaWduYWxsZWQsIGFuZCBhbGwgdGhlIEkvTyByZXF1 ZXN0cyBhcmUgcXVldWVkIGFzIElPQydzLCB3aXRoIHRoZQotICogICAgICBzdGF0dXMgZmllbGQg c2V0IHRvIENITkxfSU9DU1RBVENBTkNFTC4KLSAqICAgICAgVGhpcyBjYWxsIGlzIHR5cGljYWxs eSB1c2VkIGluIGFib3J0IHNpdHVhdGlvbnMsIGFuZCBpcyBhIHByZWx1ZGUgdG8KLSAqICAgICAg Y2hubF9jbG9zZSgpOwotICovCi1pbnQgYnJpZGdlX2NobmxfY2FuY2VsX2lvKHN0cnVjdCBjaG5s X29iamVjdCAqY2hubF9vYmopCi17Ci0Jc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1 Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKLQl1MzIgY2hubF9pZCA9IC0xOwotCXM4IGNobmxf bW9kZTsKLQlzdHJ1Y3QgY2hubF9pcnAgKmNoaXJwLCAqdG1wOwotCXN0cnVjdCBjaG5sX21nciAq Y2hubF9tZ3Jfb2JqID0gTlVMTDsKLQotCS8qIENoZWNrIGFyZ3M6ICovCi0JaWYgKCFwY2hubCB8 fCAhcGNobmwtPmNobmxfbWdyX29iaikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQljaG5sX2lkID0g cGNobmwtPmNobmxfaWQ7Ci0JY2hubF9tb2RlID0gcGNobmwtPmNobmxfbW9kZTsKLQljaG5sX21n cl9vYmogPSBwY2hubC0+Y2hubF9tZ3Jfb2JqOwotCi0JLyogIE1hcmsgdGhpcyBjaGFubmVsIGFz IGNhbmNlbGxlZCwgdG8gcHJldmVudCBmdXJ0aGVyIElPUmVxdWVzdHMgb3IKLQkgKiAgSU9SZXF1 ZXN0cyBvciBkaXNwYXRjaGluZy4gKi8KLQlzcGluX2xvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hu bF9tZ3JfbG9jayk7Ci0KLQlwY2hubC0+c3RhdGUgfD0gQ0hOTF9TVEFURUNBTkNFTDsKLQotCWlm IChsaXN0X2VtcHR5KCZwY2hubC0+aW9fcmVxdWVzdHMpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZj aG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocGNo bmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkpIHsKLQkJLyogSW5kaWNhdGUgd2UgaGF2ZSBubyBt b3JlIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciB0cmFuc2ZlcjogKi8KLQkJaWYgKENITkxfSVNfSU5Q VVQocGNobmwtPmNobmxfbW9kZSkpIHsKLQkJCWlvX2NhbmNlbF9jaG5sKGNobmxfbWdyX29iai0+ aW9tZ3IsIGNobmxfaWQpOwotCQl9IGVsc2UgewotCQkJLyogUmVjb3JkIHRoYXQgd2Ugbm8gbG9u Z2VyIGhhdmUgb3V0cHV0IGJ1ZmZlcnMKLQkJCSAqIGF2YWlsYWJsZTogKi8KLQkJCWNobmxfbWdy X29iai0+b3V0cHV0X21hc2sgJj0gfigxIDw8IGNobmxfaWQpOwotCQl9Ci0JfQotCS8qIE1vdmUg YWxsIElPUidzIHRvIElPQyBxdWV1ZTogKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hp cnAsIHRtcCwgJnBjaG5sLT5pb19yZXF1ZXN0cywgbGluaykgewotCQlsaXN0X2RlbCgmY2hpcnAt PmxpbmspOwotCQljaGlycC0+Ynl0ZV9zaXplID0gMDsKLQkJY2hpcnAtPnN0YXR1cyB8PSBDSE5M X0lPQ1NUQVRDQU5DRUw7Ci0JCWxpc3RfYWRkX3RhaWwoJmNoaXJwLT5saW5rLCAmcGNobmwtPmlv X2NvbXBsZXRpb25zKTsKLQkJcGNobmwtPmNpb19jcysrOwotCQlwY2hubC0+Y2lvX3JlcXMtLTsK LQl9Ci0KLQlzcGluX3VubG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKLQot CXJldHVybiAwOwotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9jaG5sX2Nsb3NlID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRW5zdXJlcyBhbGwgcGVuZGluZyBJL08gb24gdGhp cyBjaGFubmVsIGlzIGNhbmNlbGxlZCwgZGlzY2FyZHMgYWxsCi0gKiAgICAgIHF1ZXVlZCBJL08g Y29tcGxldGlvbiBub3RpZmljYXRpb25zLCB0aGVuIGZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2Nh dGVkCi0gKiAgICAgIGZvciB0aGlzIGNoYW5uZWwsIGFuZCBtYWtlcyB0aGUgY29ycmVzcG9uZGlu ZyBsb2dpY2FsIGNoYW5uZWwgaWQKLSAqICAgICAgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IHVz ZS4KLSAqLwotaW50IGJyaWRnZV9jaG5sX2Nsb3NlKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9v YmopCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sID0gKHN0cnVj dCBjaG5sX29iamVjdCAqKWNobmxfb2JqOwotCi0JLyogQ2hlY2sgYXJnczogKi8KLQlpZiAoIXBj aG5sKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkvKiBDYW5jZWwgSU86IHRoaXMgZW5zdXJlcyBubyBm dXJ0aGVyIElPIHJlcXVlc3RzIG9yIG5vdGlmaWNhdGlvbnMgKi8KLQlzdGF0dXMgPSBicmlkZ2Vf Y2hubF9jYW5jZWxfaW8oY2hubF9vYmopOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7 Ci0JLyogSW52YWxpZGF0ZSBjaGFubmVsIG9iamVjdDogUHJvdGVjdHMgZnJvbSBDSE5MX0dldElP Q29tcGxldGlvbigpICovCi0JLyogRnJlZSB0aGUgc2xvdCBpbiB0aGUgY2hhbm5lbCBtYW5hZ2Vy OiAqLwotCXBjaG5sLT5jaG5sX21ncl9vYmotPmNoYW5uZWxzW3BjaG5sLT5jaG5sX2lkXSA9IE5V TEw7Ci0Jc3Bpbl9sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsK LQlwY2hubC0+Y2hubF9tZ3Jfb2JqLT5vcGVuX2NoYW5uZWxzIC09IDE7Ci0Jc3Bpbl91bmxvY2tf YmgoJnBjaG5sLT5jaG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOwotCWlmIChwY2hubC0+bnRm eV9vYmopIHsKLQkJbnRmeV9kZWxldGUocGNobmwtPm50Znlfb2JqKTsKLQkJa2ZyZWUocGNobmwt Pm50Znlfb2JqKTsKLQkJcGNobmwtPm50Znlfb2JqID0gTlVMTDsKLQl9Ci0JLyogUmVzZXQgY2hh bm5lbCBldmVudDogKE5PVEU6IHVzZXJfZXZlbnQgZnJlZWQgaW4gdXNlciBjb250ZXh0KSAqLwot CWlmIChwY2hubC0+c3luY19ldmVudCkgewotCQlzeW5jX3Jlc2V0X2V2ZW50KHBjaG5sLT5zeW5j X2V2ZW50KTsKLQkJa2ZyZWUocGNobmwtPnN5bmNfZXZlbnQpOwotCQlwY2hubC0+c3luY19ldmVu dCA9IE5VTEw7Ci0JfQotCS8qIEZyZWUgSS9PIHJlcXVlc3QgYW5kIEkvTyBjb21wbGV0aW9uIHF1 ZXVlczogKi8KLQlmcmVlX2NoaXJwX2xpc3QoJnBjaG5sLT5pb19jb21wbGV0aW9ucyk7Ci0JcGNo bmwtPmNpb19jcyA9IDA7Ci0KLQlmcmVlX2NoaXJwX2xpc3QoJnBjaG5sLT5pb19yZXF1ZXN0cyk7 Ci0JcGNobmwtPmNpb19yZXFzID0gMDsKLQotCWZyZWVfY2hpcnBfbGlzdCgmcGNobmwtPmZyZWVf cGFja2V0c19saXN0KTsKLQotCS8qIFJlbGVhc2UgY2hhbm5lbCBvYmplY3QuICovCi0Ja2ZyZWUo cGNobmwpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2Vf Y2hubF9jcmVhdGUgPT09PT09PT0KLSAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9i amVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCi0gKiAgICAgIGFuZCBj bG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuIGJvYXJkLgotICovCi1pbnQgYnJpZGdlX2Nobmxf Y3JlYXRlKHN0cnVjdCBjaG5sX21nciAqKmNoYW5uZWxfbWdyLAotCQkJICAgICAgc3RydWN0IGRl dl9vYmplY3QgKmhkZXZfb2JqLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGNobmxfbWdyYXR0cnMg Km1ncl9hdHRydHMpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5s X21ncl9vYmogPSBOVUxMOwotCXU4IG1heF9jaGFubmVsczsKLQotCS8qIEFsbG9jYXRlIGNoYW5u ZWwgbWFuYWdlciBvYmplY3QgKi8KLQljaG5sX21ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgY2hubF9tZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2hubF9tZ3Jfb2JqKSB7Ci0JCS8qCi0J CSAqIFRoZSBtYXhfY2hhbm5lbHMgYXR0ciBtdXN0IGVxdWFsIHRoZSAjIG9mIHN1cHBvcnRlZCBj aG5scyBmb3IKLQkJICogZWFjaCB0cmFuc3BvcnQoIyBjaG5scyBmb3IgUENQWSA9IERETUEgPSBa Q1BZKTogaS5lLgotCQkgKiAgICAgIG1ncl9hdHRydHMtPm1heF9jaGFubmVscyA9IENITkxfTUFY Q0hBTk5FTFMgPQotCQkgKiAgICAgICAgICAgICAgICAgICAgICAgRERNQV9NQVhERE1BQ0hOTFMg PSBERE1BX01BWFpDUFlDSE5MUy4KLQkJICovCi0JCW1heF9jaGFubmVscyA9IENITkxfTUFYQ0hB Tk5FTFMgKyBDSE5MX01BWENIQU5ORUxTICogQ0hOTF9QQ1BZOwotCQkvKiBDcmVhdGUgYXJyYXkg b2YgY2hhbm5lbHMgKi8KLQkJY2hubF9tZ3Jfb2JqLT5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBjaG5sX29iamVjdCAqKQotCQkJCQkJKiBtYXhfY2hhbm5lbHMsIEdGUF9LRVJORUwp OwotCQlpZiAoY2hubF9tZ3Jfb2JqLT5jaGFubmVscykgewotCQkJLyogSW5pdGlhbGl6ZSBjaG5s X21nciBvYmplY3QgKi8KLQkJCWNobmxfbWdyX29iai0+dHlwZSA9IENITkxfVFlQRVNNOwotCQkJ Y2hubF9tZ3Jfb2JqLT53b3JkX3NpemUgPSBtZ3JfYXR0cnRzLT53b3JkX3NpemU7Ci0JCQkvKiBU b3RhbCAjIGNobmxzIHN1cHBvcnRlZCAqLwotCQkJY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHMg PSBtYXhfY2hhbm5lbHM7Ci0JCQljaG5sX21ncl9vYmotPm9wZW5fY2hhbm5lbHMgPSAwOwotCQkJ Y2hubF9tZ3Jfb2JqLT5vdXRwdXRfbWFzayA9IDA7Ci0JCQljaG5sX21ncl9vYmotPmxhc3Rfb3V0 cHV0ID0gMDsKLQkJCWNobmxfbWdyX29iai0+ZGV2X29iaiA9IGhkZXZfb2JqOwotCQkJc3Bpbl9s b2NrX2luaXQoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7Ci0JCX0gZWxzZSB7Ci0JCQlz dGF0dXMgPSAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQl9 Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCWJyaWRnZV9jaG5sX2Rlc3Ryb3koY2hubF9tZ3Jfb2JqKTsK LQkJKmNoYW5uZWxfbWdyID0gTlVMTDsKLQl9IGVsc2UgewotCQkvKiBSZXR1cm4gY2hhbm5lbCBt YW5hZ2VyIG9iamVjdCB0byBjYWxsZXIuLi4gKi8KLQkJKmNoYW5uZWxfbWdyID0gY2hubF9tZ3Jf b2JqOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9j aG5sX2Rlc3Ryb3kgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDbG9zZSBhbGwgb3Bl biBjaGFubmVscywgYW5kIGRlc3Ryb3kgdGhlIGNoYW5uZWwgbWFuYWdlci4KLSAqLwotaW50IGJy aWRnZV9jaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpCi17Ci0JaW50IHN0 YXR1cyA9IDA7Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSBoY2hubF9tZ3I7Ci0J dTMyIGNobmxfaWQ7Ci0KLQlpZiAoaGNobmxfbWdyKSB7Ci0JCS8qIENsb3NlIGFsbCBvcGVuIGNo YW5uZWxzOiAqLwotCQlmb3IgKGNobmxfaWQgPSAwOyBjaG5sX2lkIDwgY2hubF9tZ3Jfb2JqLT5t YXhfY2hhbm5lbHM7Ci0JCSAgICAgY2hubF9pZCsrKSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIGJy aWRnZV9jaG5sX2Nsb3NlKGNobmxfbWdyX29iai0+Y2hhbm5lbHMKLQkJCQkJICAgICAgW2Nobmxf aWRdKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRXJyb3Igc3Rh dHVzIDB4JXhcbiIsCi0JCQkJCV9fZnVuY19fLCBzdGF0dXMpOwotCQl9Ci0KLQkJLyogRnJlZSBj aGFubmVsIG1hbmFnZXIgb2JqZWN0OiAqLwotCQlrZnJlZShjaG5sX21ncl9vYmotPmNoYW5uZWxz KTsKLQotCQkvKiBTZXQgaGNobmxfbWdyIHRvIE5VTEwgaW4gZGV2aWNlIG9iamVjdC4gKi8KLQkJ ZGV2X3NldF9jaG5sX21ncihjaG5sX21ncl9vYmotPmRldl9vYmosIE5VTEwpOwotCQkvKiBGcmVl IHRoaXMgQ2hubCBNZ3Igb2JqZWN0OiAqLwotCQlrZnJlZShoY2hubF9tZ3IpOwotCX0gZWxzZSB7 Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gYnJpZGdlX2NobmxfZmx1c2hfaW8gPT09PT09PT0KLSAqICBwdXJwb3NlOgotICog ICAgICBGbHVzaGVzIGFsbCB0aGUgb3V0c3RhbmRpbmcgZGF0YSByZXF1ZXN0cyBvbiBhIGNoYW5u ZWwuCi0gKi8KLWludCBicmlkZ2VfY2hubF9mbHVzaF9pbyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNo bmxfb2JqLCB1MzIgdGltZW91dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgY2hubF9v YmplY3QgKnBjaG5sID0gKHN0cnVjdCBjaG5sX29iamVjdCAqKWNobmxfb2JqOwotCXM4IGNobmxf bW9kZSA9IC0xOwotCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOwotCXN0cnVjdCBjaG5s X2lvYyBjaG5sX2lvY19vYmo7Ci0JLyogQ2hlY2sgYXJnczogKi8KLQlpZiAocGNobmwpIHsKLQkJ aWYgKCh0aW1lb3V0ID09IENITkxfSU9DTk9XQUlUKQotCQkgICAgJiYgQ0hOTF9JU19PVVRQVVQo cGNobmwtPmNobmxfbW9kZSkpIHsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0J CQljaG5sX21vZGUgPSBwY2hubC0+Y2hubF9tb2RlOwotCQkJY2hubF9tZ3Jfb2JqID0gcGNobmwt PmNobmxfbWdyX29iajsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQot CWlmICghc3RhdHVzKSB7Ci0JCS8qIE5vdGU6IEN1cnJlbnRseSwgaWYgYW5vdGhlciB0aHJlYWQg Y29udGludWVzIHRvIGFkZCBJTwotCQkgKiByZXF1ZXN0cyB0byB0aGlzIGNoYW5uZWwsIHRoaXMg ZnVuY3Rpb24gd2lsbCBjb250aW51ZSB0bwotCQkgKiBmbHVzaCBhbGwgc3VjaCBxdWV1ZWQgSU8g cmVxdWVzdHMuICovCi0JCWlmIChDSE5MX0lTX09VVFBVVChjaG5sX21vZGUpCi0JCSAgICAmJiAo cGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkpKSB7Ci0JCQkvKiBXYWl0IGZvciBJTyBjb21w bGV0aW9ucywgdXAgdG8gdGhlIHNwZWNpZmllZAotCQkJICogdGltZW91dDogKi8KLQkJCXdoaWxl ICghbGlzdF9lbXB0eSgmcGNobmwtPmlvX3JlcXVlc3RzKSAmJiAhc3RhdHVzKSB7Ci0JCQkJc3Rh dHVzID0gYnJpZGdlX2NobmxfZ2V0X2lvYyhjaG5sX29iaiwKLQkJCQkJCXRpbWVvdXQsICZjaG5s X2lvY19vYmopOwotCQkJCWlmIChzdGF0dXMpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKGNo bmxfaW9jX29iai5zdGF0dXMgJiBDSE5MX0lPQ1NUQVRUSU1FT1VUKQotCQkJCQlzdGF0dXMgPSAt RVRJTUVET1VUOwotCi0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSBicmlkZ2VfY2hubF9j YW5jZWxfaW8oY2hubF9vYmopOwotCQkJLyogTm93LCBsZWF2ZSB0aGUgY2hhbm5lbCBpbiB0aGUg cmVhZHkgc3RhdGU6ICovCi0JCQlwY2hubC0+c3RhdGUgJj0gfkNITkxfU1RBVEVDQU5DRUw7Ci0J CX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hu bF9nZXRfaW5mbyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIGluZm9y bWF0aW9uIHJlbGF0ZWQgdG8gYSBjaGFubmVsLgotICovCi1pbnQgYnJpZGdlX2NobmxfZ2V0X2lu Zm8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKLQkJCSAgICAgc3RydWN0IGNobmxfaW5m byAqY2hhbm5lbF9pbmZvKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBjaG5sX29iamVj dCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7Ci0KLQlpZiAoY2hhbm5l bF9pbmZvICE9IE5VTEwpIHsKLQkJaWYgKHBjaG5sKSB7Ci0JCQkvKiBSZXR1cm4gdGhlIHJlcXVl c3RlZCBpbmZvcm1hdGlvbjogKi8KLQkJCWNoYW5uZWxfaW5mby0+Y2hubF9tZ3IgPSBwY2hubC0+ Y2hubF9tZ3Jfb2JqOwotCQkJY2hhbm5lbF9pbmZvLT5ldmVudF9vYmogPSBwY2hubC0+dXNlcl9l dmVudDsKLQkJCWNoYW5uZWxfaW5mby0+Y25obF9pZCA9IHBjaG5sLT5jaG5sX2lkOwotCQkJY2hh bm5lbF9pbmZvLT5tb2RlID0gcGNobmwtPmNobmxfbW9kZTsKLQkJCWNoYW5uZWxfaW5mby0+Ynl0 ZXNfdHggPSBwY2hubC0+Ynl0ZXNfbW92ZWQ7Ci0JCQljaGFubmVsX2luZm8tPnByb2Nlc3MgPSBw Y2hubC0+cHJvY2VzczsKLQkJCWNoYW5uZWxfaW5mby0+c3luY19ldmVudCA9IHBjaG5sLT5zeW5j X2V2ZW50OwotCQkJY2hhbm5lbF9pbmZvLT5jaW9fY3MgPSBwY2hubC0+Y2lvX2NzOwotCQkJY2hh bm5lbF9pbmZvLT5jaW9fcmVxcyA9IHBjaG5sLT5jaW9fcmVxczsKLQkJCWNoYW5uZWxfaW5mby0+ c3RhdGUgPSBwY2hubC0+c3RhdGU7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRUZBVUxUOwot CQl9Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHN0YXR1czsK LX0KLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfaW9jID09PT09PT09Ci0gKiAg ICAgIE9wdGlvbmFsbHkgd2FpdCBmb3IgSS9PIGNvbXBsZXRpb24gb24gYSBjaGFubmVsLiAgRGVx dWV1ZSBhbiBJL08KLSAqICAgICAgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoIGNvbnRhaW5zIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBjb21wbGV0ZWQKLSAqICAgICAgSS9PIHJlcXVlc3QuCi0gKiAg ICAgIE5vdGU6IEVuc3VyZXMgQ2hhbm5lbCBJbnZhcmlhbnQgKHNlZSBub3RlcyBhYm92ZSkuCi0g Ki8KLWludCBicmlkZ2VfY2hubF9nZXRfaW9jKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmos IHUzMiB0aW1lb3V0LAotCQkJICAgIHN0cnVjdCBjaG5sX2lvYyAqY2hhbl9pb2MpCi17Ci0JaW50 IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9v YmplY3QgKiljaG5sX29iajsKLQlzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iajsKLQlp bnQgc3RhdF9zeW5jOwotCWJvb2wgZGVxdWV1ZV9pb2MgPSB0cnVlOwotCXN0cnVjdCBjaG5sX2lv YyBpb2MgPSB7IE5VTEwsIDAsIDAsIDAsIDAgfTsKLQl1OCAqaG9zdF9zeXNfYnVmID0gTlVMTDsK LQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dDsKLQlzdHJ1Y3QgZGV2X29iamVj dCAqZGV2X29iajsKLQotCS8qIENoZWNrIGFyZ3M6ICovCi0JaWYgKCFjaGFuX2lvYyB8fCAhcGNo bmwpIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9IGVsc2UgaWYgKHRpbWVvdXQgPT0gQ0hOTF9J T0NOT1dBSVQpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJnBjaG5sLT5pb19jb21wbGV0aW9ucykpCi0J CQlzdGF0dXMgPSAtRVJFTU9URUlPOwotCi0JfQotCi0JZGV2X29iaiA9IGRldl9nZXRfZmlyc3Qo KTsKLQlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGRldl9vYmosICZkZXZfY3R4dCk7Ci0JaWYgKCFk ZXZfY3R4dCkKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVu Y19lbmQ7Ci0KLQlpb2Muc3RhdHVzID0gQ0hOTF9JT0NTVEFUQ09NUExFVEU7Ci0JaWYgKHRpbWVv dXQgIT0KLQkgICAgQ0hOTF9JT0NOT1dBSVQgJiYgbGlzdF9lbXB0eSgmcGNobmwtPmlvX2NvbXBs ZXRpb25zKSkgewotCQlpZiAodGltZW91dCA9PSBDSE5MX0lPQ0lORklOSVRFKQotCQkJdGltZW91 dCA9IFNZTkNfSU5GSU5JVEU7Ci0KLQkJc3RhdF9zeW5jID0gc3luY193YWl0X29uX2V2ZW50KHBj aG5sLT5zeW5jX2V2ZW50LCB0aW1lb3V0KTsKLQkJaWYgKHN0YXRfc3luYyA9PSAtRVRJTUUpIHsK LQkJCS8qIE5vIHJlc3BvbnNlIGZyb20gRFNQICovCi0JCQlpb2Muc3RhdHVzIHw9IENITkxfSU9D U1RBVFRJTUVPVVQ7Ci0JCQlkZXF1ZXVlX2lvYyA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKHN0YXRf c3luYyA9PSAtRVBFUk0pIHsKLQkJCS8qIFRoaXMgY2FuIG9jY3VyIHdoZW4gdGhlIHVzZXIgbW9k ZSB0aHJlYWQgaXMKLQkJCSAqIGFib3J0ZWQgKF5DKSwgb3Igd2hlbiBfVldJTjMyX1dhaXRTaW5n bGVPYmplY3QoKQotCQkJICogZmFpbHMgZHVlIHRvIHVua25vd24gY2F1c2VzLiAqLwotCQkJLyog RXZlbiB0aG91Z2ggV2FpdCBmYWlsZWQsIHRoZXJlIG1heSBiZSBzb21ldGhpbmcgaW4KLQkJCSAq IHRoZSBROiAqLwotCQkJaWYgKGxpc3RfZW1wdHkoJnBjaG5sLT5pb19jb21wbGV0aW9ucykpIHsK LQkJCQlpb2Muc3RhdHVzIHw9IENITkxfSU9DU1RBVENBTkNFTDsKLQkJCQlkZXF1ZXVlX2lvYyA9 IGZhbHNlOwotCQkJfQotCQl9Ci0JfQotCS8qIFNlZSBjb21tZW50IGluIEFkZElPUmVxICovCi0J c3Bpbl9sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKLQlvbWFw X21ib3hfZGlzYWJsZV9pcnEoZGV2X2N0eHQtPm1ib3gsIElSUV9SWCk7Ci0JaWYgKGRlcXVldWVf aW9jKSB7Ci0JCS8qIERlcXVldWUgSU9DIGFuZCBzZXQgY2hhbl9pb2M7ICovCi0JCWNobmxfcGFj a2V0X29iaiA9IGxpc3RfZmlyc3RfZW50cnkoJnBjaG5sLT5pb19jb21wbGV0aW9ucywKLQkJCQlz dHJ1Y3QgY2hubF9pcnAsIGxpbmspOwotCQlsaXN0X2RlbCgmY2hubF9wYWNrZXRfb2JqLT5saW5r KTsKLQkJLyogVXBkYXRlIGNoYW5faW9jIGZyb20gY2hhbm5lbCBzdGF0ZSBhbmQgY2hpcnA6ICov Ci0JCXBjaG5sLT5jaW9fY3MtLTsKLQkJLyoKLQkJICogSWYgdGhpcyBpcyBhIHplcm8tY29weSBj aGFubmVsLCB0aGVuIHNldCBJT0MncyBwYnVmCi0JCSAqIHRvIHRoZSBEU1AncyBhZGRyZXNzLiBU aGlzIERTUCBhZGRyZXNzIHdpbGwgZ2V0Ci0JCSAqIHRyYW5zbGF0ZWQgdG8gdXNlcidzIHZpcnR1 YWwgYWRkciBsYXRlci4KLQkJICovCi0JCWhvc3Rfc3lzX2J1ZiA9IGNobmxfcGFja2V0X29iai0+ aG9zdF9zeXNfYnVmOwotCQlpb2MuYnVmID0gY2hubF9wYWNrZXRfb2JqLT5ob3N0X3VzZXJfYnVm OwotCQlpb2MuYnl0ZV9zaXplID0gY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemU7Ci0JCWlvYy5i dWZfc2l6ZSA9IGNobmxfcGFja2V0X29iai0+YnVmX3NpemU7Ci0JCWlvYy5hcmcgPSBjaG5sX3Bh Y2tldF9vYmotPmFyZzsKLQkJaW9jLnN0YXR1cyB8PSBjaG5sX3BhY2tldF9vYmotPnN0YXR1czsK LQkJLyogUGxhY2UgdGhlIHVzZWQgY2hpcnAgb24gdGhlIGZyZWUgbGlzdDogKi8KLQkJbGlzdF9h ZGRfdGFpbCgmY2hubF9wYWNrZXRfb2JqLT5saW5rLAotCQkJCSZwY2hubC0+ZnJlZV9wYWNrZXRz X2xpc3QpOwotCX0gZWxzZSB7Ci0JCWlvYy5idWYgPSBOVUxMOwotCQlpb2MuYnl0ZV9zaXplID0g MDsKLQkJaW9jLmFyZyA9IDA7Ci0JCWlvYy5idWZfc2l6ZSA9IDA7Ci0JfQotCS8qIEVuc3VyZSBp bnZhcmlhbnQ6IElmIGFueSBJT0MncyBhcmUgcXVldWVkIGZvciB0aGlzIGNoYW5uZWwuLi4gKi8K LQlpZiAoIWxpc3RfZW1wdHkoJnBjaG5sLT5pb19jb21wbGV0aW9ucykpIHsKLQkJLyogIFNpbmNl IERTUFN0cmVhbV9SZWNsYWltKCkgZG9lcyBub3QgdGFrZSBhIHRpbWVvdXQKLQkJICogIHBhcmFt ZXRlciwgd2UgcGFzcyB0aGUgc3RyZWFtJ3MgdGltZW91dCB2YWx1ZSB0bwotCQkgKiAgYnJpZGdl X2NobmxfZ2V0X2lvYy4gV2UgY2Fubm90IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdAotCQkgKiAg d2UgaGF2ZSB3YWl0ZWQgaW4gdXNlciBtb2RlLiBTaW5jZSB0aGUgc3RyZWFtJ3MgdGltZW91dAot CQkgKiAgdmFsdWUgbWF5IGJlIG5vbi16ZXJvLCB3ZSBzdGlsbCBoYXZlIHRvIHNldCB0aGUgZXZl bnQuCi0JCSAqICBUaGVyZWZvcmUsIHRoaXMgb3B0aW1pemF0aW9uIGlzIHRha2VuIG91dC4KLQkJ ICoKLQkJICogIGlmICh0aW1lb3V0ID09IENITkxfSU9DTk9XQUlUKSB7Ci0JCSAqICAgIC4uLiBl bnN1cmUgZXZlbnQgaXMgc2V0Li4KLQkJICogICAgICBzeW5jX3NldF9ldmVudChwY2hubC0+c3lu Y19ldmVudCk7Ci0JCSAqICB9ICovCi0JCXN5bmNfc2V0X2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50 KTsKLQl9IGVsc2UgewotCQkvKiBlbHNlLCBpZiBsaXN0IGlzIGVtcHR5LCBlbnN1cmUgZXZlbnQg aXMgcmVzZXQuICovCi0JCXN5bmNfcmVzZXRfZXZlbnQocGNobmwtPnN5bmNfZXZlbnQpOwotCX0K LQlvbWFwX21ib3hfZW5hYmxlX2lycShkZXZfY3R4dC0+bWJveCwgSVJRX1JYKTsKLQlzcGluX3Vu bG9ja19iaCgmcGNobmwtPmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7Ci0JaWYgKGRlcXVl dWVfaW9jCi0JICAgICYmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSAmJiBwY2hubC0+ Y2hubF9pZCA+IDEpKSB7Ci0JCWlmICghKGlvYy5idWYgPCAodm9pZCAqKVVTRVJNT0RFX0FERFIp KQotCQkJZ290byBmdW5jX2NvbnQ7Ci0KLQkJLyogSWYgdGhlIGFkZHIgaXMgaW4gdXNlciBtb2Rl LCB0aGVuIGNvcHkgaXQgKi8KLQkJaWYgKCFob3N0X3N5c19idWYgfHwgIWlvYy5idWYpIHsKLQkJ CXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZ1bmNfY29udDsKLQkJfQotCQlpZiAoIUNITkxf SVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkpCi0JCQlnb3RvIGZ1bmNfY29udDE7Ci0KLQkJLypo b3N0X3VzZXJfYnVmICovCi0JCXN0YXR1cyA9IGNvcHlfdG9fdXNlcihpb2MuYnVmLCBob3N0X3N5 c19idWYsIGlvYy5ieXRlX3NpemUpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlpZiAoY3VycmVudC0+ ZmxhZ3MgJiBQRl9FWElUSU5HKQotCQkJCXN0YXR1cyA9IDA7Ci0JCX0KLQkJaWYgKHN0YXR1cykK LQkJCXN0YXR1cyA9IC1FRkFVTFQ7Ci1mdW5jX2NvbnQxOgotCQlrZnJlZShob3N0X3N5c19idWYp OwotCX0KLWZ1bmNfY29udDoKLQkvKiBVcGRhdGUgVXNlcidzIElPQyBibG9jazogKi8KLQkqY2hh bl9pb2MgPSBpb2M7Ci1mdW5jX2VuZDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09 PT09PT09IGJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbyA9PT09PT09PQotICogICAgICBSZXRyaWV2 ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIuCi0gKi8KLWludCBi cmlkZ2VfY2hubF9nZXRfbWdyX2luZm8oc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IsIHUzMiBj aF9pZCwKLQkJCQkgc3RydWN0IGNobmxfbWdyaW5mbyAqbWdyX2luZm8pCi17Ci0Jc3RydWN0IGNo bmxfbWdyICpjaG5sX21ncl9vYmogPSAoc3RydWN0IGNobmxfbWdyICopaGNobmxfbWdyOwotCi0J aWYgKCFtZ3JfaW5mbyB8fCAhaGNobmxfbWdyKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChj aF9pZCA+IENITkxfTUFYQ0hBTk5FTFMpCi0JCXJldHVybiAtRUNIUk5HOwotCi0JLyogUmV0dXJu IHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb246ICovCi0JbWdyX2luZm8tPmNobmxfb2JqID0gY2hu bF9tZ3Jfb2JqLT5jaGFubmVsc1tjaF9pZF07Ci0JbWdyX2luZm8tPm9wZW5fY2hhbm5lbHMgPSBj aG5sX21ncl9vYmotPm9wZW5fY2hhbm5lbHM7Ci0JbWdyX2luZm8tPnR5cGUgPSBjaG5sX21ncl9v YmotPnR5cGU7Ci0JLyogdG90YWwgIyBvZiBjaG5scyAqLwotCW1ncl9pbmZvLT5tYXhfY2hhbm5l bHMgPSBjaG5sX21ncl9vYmotPm1heF9jaGFubmVsczsKLQotCXJldHVybiAwOwotfQotCi0vKgot ICogID09PT09PT09IGJyaWRnZV9jaG5sX2lkbGUgPT09PT09PT0KLSAqICAgICAgSWRsZXMgYSBw YXJ0aWN1bGFyIGNoYW5uZWwuCi0gKi8KLWludCBicmlkZ2VfY2hubF9pZGxlKHN0cnVjdCBjaG5s X29iamVjdCAqY2hubF9vYmosIHUzMiB0aW1lb3V0LAotCQkJICAgIGJvb2wgZmx1c2hfZGF0YSkK LXsKLQlzOCBjaG5sX21vZGU7Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7Ci0JaW50 IHN0YXR1cyA9IDA7Ci0KLQljaG5sX21vZGUgPSBjaG5sX29iai0+Y2hubF9tb2RlOwotCWNobmxf bWdyX29iaiA9IGNobmxfb2JqLT5jaG5sX21ncl9vYmo7Ci0KLQlpZiAoQ0hOTF9JU19PVVRQVVQo Y2hubF9tb2RlKSAmJiAhZmx1c2hfZGF0YSkgewotCQkvKiBXYWl0IGZvciBJTyBjb21wbGV0aW9u cywgdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0OiAqLwotCQlzdGF0dXMgPSBicmlkZ2VfY2hu bF9mbHVzaF9pbyhjaG5sX29iaiwgdGltZW91dCk7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gYnJp ZGdlX2NobmxfY2FuY2VsX2lvKGNobmxfb2JqKTsKLQotCQkvKiBSZXNldCB0aGUgYnl0ZSBjb3Vu dCBhbmQgcHV0IGNoYW5uZWwgYmFjayBpbiByZWFkeSBzdGF0ZS4gKi8KLQkJY2hubF9vYmotPmJ5 dGVzX21vdmVkID0gMDsKLQkJY2hubF9vYmotPnN0YXRlICY9IH5DSE5MX1NUQVRFQ0FOQ0VMOwot CX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2Nobmxf b3BlbiA9PT09PT09PQotICogICAgICBPcGVuIGEgbmV3IGhhbGYtZHVwbGV4IGNoYW5uZWwgdG8g dGhlIERTUCBib2FyZC4KLSAqLwotaW50IGJyaWRnZV9jaG5sX29wZW4oc3RydWN0IGNobmxfb2Jq ZWN0ICoqY2hubCwKLQkJCSAgICBzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwgczggY2hubF9t b2RlLAotCQkJICAgIHUzMiBjaF9pZCwgY29uc3Qgc3RydWN0IGNobmxfYXR0ciAqcGF0dHJzKQot ewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqID0gaGNo bmxfbWdyOwotCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSBOVUxMOwotCXN0cnVjdCBzeW5j X29iamVjdCAqc3luY19ldmVudCA9IE5VTEw7Ci0KLQkqY2hubCA9IE5VTEw7Ci0KLQkvKiBWYWxp ZGF0ZSBBcmdzOiAqLwotCWlmICghcGF0dHJzLT51aW9fcmVxcykKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlpZiAoIWhjaG5sX21ncikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoY2hfaWQgIT0g Q0hOTF9QSUNLRlJFRSkgewotCQlpZiAoY2hfaWQgPj0gY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5l bHMpCi0JCQlyZXR1cm4gLUVDSFJORzsKLQkJaWYgKGNobmxfbWdyX29iai0+Y2hhbm5lbHNbY2hf aWRdICE9IE5VTEwpCi0JCQlyZXR1cm4gLUVBTFJFQURZOwotCX0gZWxzZSB7Ci0JCS8qIENoZWNr IGZvciBmcmVlIGNoYW5uZWwgKi8KLQkJc3RhdHVzID0gc2VhcmNoX2ZyZWVfY2hhbm5lbChjaG5s X21ncl9vYmosICZjaF9pZCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0K LQotCi0JLyogQ3JlYXRlIGNoYW5uZWwgb2JqZWN0OiAqLwotCXBjaG5sID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IGNobmxfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwY2hubCkKLQkJcmV0 dXJuIC1FTk9NRU07Ci0KLQkvKiBQcm90ZWN0IHF1ZXVlcyBmcm9tIGlvX2RwYzogKi8KLQlwY2hu bC0+c3RhdGUgPSBDSE5MX1NUQVRFQ0FOQ0VMOwotCi0JLyogQWxsb2NhdGUgaW5pdGlhbCBJT1Ig YW5kIElPQyBxdWV1ZXM6ICovCi0Jc3RhdHVzID0gY3JlYXRlX2NoaXJwX2xpc3QoJnBjaG5sLT5m cmVlX3BhY2tldHNfbGlzdCwKLQkJCXBhdHRycy0+dWlvX3JlcXMpOwotCWlmIChzdGF0dXMpCi0J CWdvdG8gb3V0X2VycjsKLQotCUlOSVRfTElTVF9IRUFEKCZwY2hubC0+aW9fcmVxdWVzdHMpOwot CUlOSVRfTElTVF9IRUFEKCZwY2hubC0+aW9fY29tcGxldGlvbnMpOwotCi0JcGNobmwtPmNobmxf cGFja2V0cyA9IHBhdHRycy0+dWlvX3JlcXM7Ci0JcGNobmwtPmNpb19jcyA9IDA7Ci0JcGNobmwt PmNpb19yZXFzID0gMDsKLQotCXN5bmNfZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3lu Y19vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN5bmNfZXZlbnQpIHsKLQkJc3RhdHVzID0g LUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQlzeW5jX2luaXRfZXZlbnQoc3luY19ldmVu dCk7Ci0KLQlwY2hubC0+bnRmeV9vYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9vYmpl Y3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBjaG5sLT5udGZ5X29iaikgewotCQlzdGF0dXMgPSAt RU5PTUVNOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCW50ZnlfaW5pdChwY2hubC0+bnRmeV9vYmop OwotCi0JLyogSW5pdGlhbGl6ZSBDSE5MIG9iamVjdCBmaWVsZHM6ICovCi0JcGNobmwtPmNobmxf bWdyX29iaiA9IGNobmxfbWdyX29iajsKLQlwY2hubC0+Y2hubF9pZCA9IGNoX2lkOwotCXBjaG5s LT5jaG5sX21vZGUgPSBjaG5sX21vZGU7Ci0JcGNobmwtPnVzZXJfZXZlbnQgPSBzeW5jX2V2ZW50 OwotCXBjaG5sLT5zeW5jX2V2ZW50ID0gc3luY19ldmVudDsKLQkvKiBHZXQgdGhlIHByb2Nlc3Mg aGFuZGxlICovCi0JcGNobmwtPnByb2Nlc3MgPSBjdXJyZW50LT50Z2lkOwotCXBjaG5sLT5jYl9h cmcgPSAwOwotCXBjaG5sLT5ieXRlc19tb3ZlZCA9IDA7Ci0JLyogRGVmYXVsdCB0byBwcm9jLWNv cHkgKi8KLQlwY2hubC0+Y2hubF90eXBlID0gQ0hOTF9QQ1BZOwotCi0JLyogSW5zZXJ0IGNoYW5u ZWwgb2JqZWN0IGluIGNoYW5uZWwgbWFuYWdlcjogKi8KLQljaG5sX21ncl9vYmotPmNoYW5uZWxz W3BjaG5sLT5jaG5sX2lkXSA9IHBjaG5sOwotCXNwaW5fbG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5j aG5sX21ncl9sb2NrKTsKLQljaG5sX21ncl9vYmotPm9wZW5fY2hhbm5lbHMrKzsKLQlzcGluX3Vu bG9ja19iaCgmY2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKLQkvKiBSZXR1cm4gcmVzdWx0 Li4uICovCi0JcGNobmwtPnN0YXRlID0gQ0hOTF9TVEFURVJFQURZOwotCSpjaG5sID0gcGNobmw7 Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi1vdXRfZXJyOgotCS8qIEZyZWUgbWVtb3J5ICovCi0JZnJl ZV9jaGlycF9saXN0KCZwY2hubC0+aW9fY29tcGxldGlvbnMpOwotCWZyZWVfY2hpcnBfbGlzdCgm cGNobmwtPmlvX3JlcXVlc3RzKTsKLQlmcmVlX2NoaXJwX2xpc3QoJnBjaG5sLT5mcmVlX3BhY2tl dHNfbGlzdCk7Ci0KLQlrZnJlZShzeW5jX2V2ZW50KTsKLQotCWlmIChwY2hubC0+bnRmeV9vYmop IHsKLQkJbnRmeV9kZWxldGUocGNobmwtPm50Znlfb2JqKTsKLQkJa2ZyZWUocGNobmwtPm50Znlf b2JqKTsKLQkJcGNobmwtPm50Znlfb2JqID0gTlVMTDsKLQl9Ci0Ja2ZyZWUocGNobmwpOwotCi0J cmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hubF9yZWdpc3Rl cl9ub3RpZnkgPT09PT09PT0KLSAqICAgICAgUmVnaXN0ZXJzIGZvciBldmVudHMgb24gYSBwYXJ0 aWN1bGFyIGNoYW5uZWwuCi0gKi8KLWludCBicmlkZ2VfY2hubF9yZWdpc3Rlcl9ub3RpZnkoc3Ry dWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKLQkJCQkgICAgdTMyIGV2ZW50X21hc2ssIHUzMiBu b3RpZnlfdHlwZSwKLQkJCQkgICAgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRp b24pCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQotCWlmIChldmVudF9tYXNrKQotCQlzdGF0dXMg PSBudGZ5X3JlZ2lzdGVyKGNobmxfb2JqLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbiwKLQkJCQkJ CWV2ZW50X21hc2ssIG5vdGlmeV90eXBlKTsKLQllbHNlCi0JCXN0YXR1cyA9IG50ZnlfdW5yZWdp c3RlcihjaG5sX29iai0+bnRmeV9vYmosIGhub3RpZmljYXRpb24pOwotCi0JcmV0dXJuIHN0YXR1 czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjcmVhdGVfY2hpcnBfbGlzdCA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIEluaXRpYWxpemUgYSBxdWV1ZSBvZiBjaGFubmVsIEkvTyBSZXF1 ZXN0L0NvbXBsZXRpb24gcGFja2V0cy4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBsaXN0OiAg ICAgICBQb2ludGVyIHRvIGEgbGlzdF9oZWFkCi0gKiAgICAgIGNoaXJwczogICAgIE51bWJlciBv ZiBDaGlycHMgdG8gYWxsb2NhdGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMCBpZiBzdWNjZXNz ZnVsLCBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgot ICovCi1zdGF0aWMgaW50IGNyZWF0ZV9jaGlycF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Qs IHUzMiBjaGlycHMpCi17Ci0Jc3RydWN0IGNobmxfaXJwICpjaGlycDsKLQl1MzIgaTsKLQotCUlO SVRfTElTVF9IRUFEKGxpc3QpOwotCi0JLyogTWFrZSBOIGNoaXJwcyBhbmQgcGxhY2Ugb24gcXVl dWUuICovCi0JZm9yIChpID0gMDsgaSA8IGNoaXJwczsgaSsrKSB7Ci0JCWNoaXJwID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGNobmxfaXJwKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghY2hpcnApCi0J CQlicmVhazsKLQkJbGlzdF9hZGRfdGFpbCgmY2hpcnAtPmxpbmssIGxpc3QpOwotCX0KLQotCS8q IElmIHdlIGNvdWxkbid0IGFsbG9jYXRlIGFsbCBjaGlycHMsIGZyZWUgdGhvc2UgYWxsb2NhdGVk OiAqLwotCWlmIChpICE9IGNoaXJwcykgewotCQlmcmVlX2NoaXJwX2xpc3QobGlzdCk7Ci0JCXJl dHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogID09PT09PT09IGZy ZWVfY2hpcnBfbGlzdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEZyZWUgdGhlIHF1 ZXVlIG9mIENoaXJwcy4KLSAqLwotc3RhdGljIHZvaWQgZnJlZV9jaGlycF9saXN0KHN0cnVjdCBs aXN0X2hlYWQgKmNoaXJwX2xpc3QpCi17Ci0Jc3RydWN0IGNobmxfaXJwICpjaGlycCwgKnRtcDsK LQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlycCwgdG1wLCBjaGlycF9saXN0LCBsaW5r KSB7Ci0JCWxpc3RfZGVsKCZjaGlycC0+bGluayk7Ci0JCWtmcmVlKGNoaXJwKTsKLQl9Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gc2VhcmNoX2ZyZWVfY2hhbm5lbCA9PT09PT09PQotICogICAgICBT ZWFyY2ggZm9yIGEgZnJlZSBjaGFubmVsIHNsb3QgaW4gdGhlIGFycmF5IG9mIGNoYW5uZWwgcG9p bnRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgc2VhcmNoX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgY2hubF9t Z3IgKmNobmxfbWdyX29iaiwKLQkJCQkgICAgICB1MzIgKmNobmwpCi17Ci0JaW50IHN0YXR1cyA9 IC1FTk9TUjsKLQl1MzIgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBjaG5sX21ncl9vYmotPm1heF9j aGFubmVsczsgaSsrKSB7Ci0JCWlmIChjaG5sX21ncl9vYmotPmNoYW5uZWxzW2ldID09IE5VTEwp IHsKLQkJCXN0YXR1cyA9IDA7Ci0JCQkqY2hubCA9IGk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQot CXJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS9kc3AtY2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Rz cC1jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWFjYTQ0Li4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCisrKyAv ZGV2L251bGwKQEAgLTEsMzkxICswLDAgQEAKLS8qCi0gKiBjbGsuYwotICoKLSAqIERTUC1CSU9T IEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4K LSAqCi0gKiBDbG9jayBhbmQgVGltZXIgc2VydmljZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAy MDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5Z IEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJ TUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2RlZmluZSBMNF8z NFhYX0JBU0UJCTB4NDgwMDAwMDAKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8 ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLSNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KLSNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kYXRhL2Fzb2MtdGktbWNic3AuaD4KLQotLyogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRz cGJyaWRnZS9kYmRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+Ci0jaW5jbHVkZSA8 ZHNwYnJpZGdlL2Rldi5oPgotI2luY2x1ZGUgIl90aW9tYXAuaCIKLQotLyogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvY2xr Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBE YXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCi0KLSNkZWZpbmUgT01BUF9TU0lfT0ZGU0VUCQkJ MHg1ODAwMAotI2RlZmluZSBPTUFQX1NTSV9TSVpFCQkJMHgxMDAwCi0jZGVmaW5lIE9NQVBfU1NJ X1NZU0NPTkZJR19PRkZTRVQJMHgxMAotCi0jZGVmaW5lIFNTSV9BVVRPSURMRQkJCSgxIDw8IDAp Ci0jZGVmaW5lIFNTSV9TSURMRV9TTUFSVElETEUJCSgyIDw8IDMpCi0jZGVmaW5lIFNTSV9NSURM RV9OT0lETEUJCSgxIDw8IDEyKQotCi0vKiBDbGsgdHlwZXMgcmVxdWVzdGVkIGJ5IHRoZSBkc3Ag Ki8KLSNkZWZpbmUgSVZBMl9DTEsJMAotI2RlZmluZSBHUFRfQ0xLCQkxCi0jZGVmaW5lIFdEVF9D TEsJCTIKLSNkZWZpbmUgTUNCU1BfQ0xLCTMKLSNkZWZpbmUgU1NJX0NMSwkJNAotCi0vKiBCcmlk Z2UgR1BUIGlkICgxIC0gNCksIERNIFRpbWVyIGlkICg1IC0gOCkgKi8KLSNkZWZpbmUgRE1UX0lE KGlkKSAoKGlkKSArIDQpCi0jZGVmaW5lIERNX1RJTUVSX0NMT0NLUwkJNAotCi0vKiBCcmlkZ2Ug TUNCU1AgaWQgKDYgLSAxMCksIE9NQVAgTWNic3AgaWQgKDAgLSA0KSAqLwotI2RlZmluZSBNQ0JT UF9JRChpZCkgKChpZCkgLSA2KQotCi1zdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVy WzRdOwotCi1zdHJ1Y3QgY2xrICppdmEyX2NsazsKLQotc3RydWN0IGRzcF9zc2kgewotCXN0cnVj dCBjbGsgKnNzdF9mY2s7Ci0Jc3RydWN0IGNsayAqc3NyX2ZjazsKLQlzdHJ1Y3QgY2xrICppY2s7 Ci19OwotCi1zdGF0aWMgc3RydWN0IGRzcF9zc2kgc3NpOwotCi1zdGF0aWMgdTMyIGRzcF9jbG9j a3M7Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGlzX2RzcF9jbGtfYWN0aXZlKHUzMiBjbGssIHU4IGlk KQotewotCXJldHVybiBjbGsgJiAoMSA8PCBpZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBz ZXRfZHNwX2Nsa19hY3RpdmUodTMyICpjbGssIHU4IGlkKQotewotCSpjbGsgfD0gKDEgPDwgaWQp OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RzcF9jbGtfaW5hY3RpdmUodTMyICpjbGss IHU4IGlkKQotewotCSpjbGsgJj0gfigxIDw8IGlkKTsKLX0KLQotc3RhdGljIHM4IGdldF9jbGtf dHlwZSh1OCBpZCkKLXsKLQlzOCB0eXBlOwotCi0JaWYgKGlkID09IERTUF9DTEtfSVZBMikKLQkJ dHlwZSA9IElWQTJfQ0xLOwotCWVsc2UgaWYgKGlkIDw9IERTUF9DTEtfR1BUOCkKLQkJdHlwZSA9 IEdQVF9DTEs7Ci0JZWxzZSBpZiAoaWQgPT0gRFNQX0NMS19XRFQzKQotCQl0eXBlID0gV0RUX0NM SzsKLQllbHNlIGlmIChpZCA8PSBEU1BfQ0xLX01DQlNQNSkKLQkJdHlwZSA9IE1DQlNQX0NMSzsK LQllbHNlIGlmIChpZCA9PSBEU1BfQ0xLX1NTSSkKLQkJdHlwZSA9IFNTSV9DTEs7Ci0JZWxzZQot CQl0eXBlID0gLTE7Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkc3Bf Y2xrX2V4aXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDbGVhbnVwIENMSyBtb2R1 bGUuCi0gKi8KLXZvaWQgZHNwX2Nsa19leGl0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlkc3BfY2xv Y2tfZGlzYWJsZV9hbGwoZHNwX2Nsb2Nrcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRE1fVElNRVJf Q0xPQ0tTOyBpKyspCi0JCW9tYXBfZG1fdGltZXJfZnJlZSh0aW1lcltpXSk7Ci0KLQljbGtfdW5w cmVwYXJlKGl2YTJfY2xrKTsKLQljbGtfcHV0KGl2YTJfY2xrKTsKLQljbGtfdW5wcmVwYXJlKHNz aS5zc3RfZmNrKTsKLQljbGtfcHV0KHNzaS5zc3RfZmNrKTsKLQljbGtfdW5wcmVwYXJlKHNzaS5z c3JfZmNrKTsKLQljbGtfcHV0KHNzaS5zc3JfZmNrKTsKLQljbGtfdW5wcmVwYXJlKHNzaS5pY2sp OwotCWNsa19wdXQoc3NpLmljayk7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZHNwX2Nsa19pbml0 ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgSW5pdGlhbGl6ZSBDTEsgbW9kdWxlLgot ICovCi12b2lkIGRzcF9jbGtfaW5pdCh2b2lkKQotewotCXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlIGRzcGJyaWRnZV9kZXZpY2U7Ci0JaW50IGksIGlkOwotCi0JZHNwYnJpZGdlX2Rldmlj ZS5kZXYuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOwotCi0JZm9yIChpID0gMCwgaWQgPSA1OyBp IDwgRE1fVElNRVJfQ0xPQ0tTOyBpKyssIGlkKyspCi0JCXRpbWVyW2ldID0gb21hcF9kbV90aW1l cl9yZXF1ZXN0X3NwZWNpZmljKGlkKTsKLQotCWl2YTJfY2xrID0gY2xrX2dldCgmZHNwYnJpZGdl X2RldmljZS5kZXYsICJpdmEyX2NrIik7Ci0JaWYgKElTX0VSUihpdmEyX2NsaykpCi0JCWRldl9l cnIoYnJpZGdlLCAiZmFpbGVkIHRvIGdldCBpdmEyIGNsb2NrICVwXG4iLCBpdmEyX2Nsayk7Ci0J ZWxzZQotCQljbGtfcHJlcGFyZShpdmEyX2Nsayk7Ci0KLQlzc2kuc3N0X2ZjayA9IGNsa19nZXQo JmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAic3NpX3NzdF9mY2siKTsKLQlzc2kuc3NyX2ZjayA9IGNs a19nZXQoJmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAic3NpX3Nzcl9mY2siKTsKLQlzc2kuaWNrID0g Y2xrX2dldCgmZHNwYnJpZGdlX2RldmljZS5kZXYsICJzc2lfaWNrIik7Ci0KLQlpZiAoSVNfRVJS KHNzaS5zc3RfZmNrKSB8fCBJU19FUlIoc3NpLnNzcl9mY2spIHx8IElTX0VSUihzc2kuaWNrKSkg ewotCQlkZXZfZXJyKGJyaWRnZSwgImZhaWxlZCB0byBnZXQgc3NpOiBzc3QgJXAsIHNzciAlcCwg aWNrICVwXG4iLAotCQkJCQlzc2kuc3N0X2Zjaywgc3NpLnNzcl9mY2ssIHNzaS5pY2spOwotCX0g ZWxzZSB7Ci0JCWNsa19wcmVwYXJlKHNzaS5zc3RfZmNrKTsKLQkJY2xrX3ByZXBhcmUoc3NpLnNz cl9mY2spOwotCQljbGtfcHJlcGFyZShzc2kuaWNrKTsKLQl9Ci19Ci0KLS8qKgotICogZHNwX2dw dF93YWl0X292ZXJmbG93IC0gc2V0IGdwdCBvdmVyZmxvdyBhbmQgd2FpdCBmb3IgZml4ZWQgdGlt ZW91dAotICogQGNsa19pZDogICAgICBHUCBUaW1lciBjbG9jayBpZC4KLSAqIEBsb2FkOiAgICAg ICAgT3ZlcmZsb3cgdmFsdWUuCi0gKgotICogU2V0cyBhbiBvdmVyZmxvdyBpbnRlcnJ1cHQgZm9y IHRoZSBkZXNpcmVkIEdQVCB3YWl0aW5nIGZvciBhIHRpbWVvdXQKLSAqIG9mIDUgbXNlY3MgZm9y IHRoZSBpbnRlcnJ1cHQgdG8gb2NjdXIuCi0gKi8KLXZvaWQgZHNwX2dwdF93YWl0X292ZXJmbG93 KHNob3J0IGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBsb2FkKQotewotCXN0cnVjdCBvbWFwX2Rt X3RpbWVyICpncHQgPSB0aW1lcltjbGtfaWQgLSAxXTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7 Ci0KLQlpZiAoIWdwdCkKLQkJcmV0dXJuOwotCi0JLyogRW5hYmxlIG92ZXJmbG93IGludGVycnVw dCAqLwotCW9tYXBfZG1fdGltZXJfc2V0X2ludF9lbmFibGUoZ3B0LCBPTUFQX1RJTUVSX0lOVF9P VkVSRkxPVyk7Ci0KLQkvKgotCSAqIFNldCBjb3VudGVyIHZhbHVlIHRvIG92ZXJmbG93IGNvdW50 ZXIgYWZ0ZXIKLQkgKiBvbmUgdGljayBhbmQgc3RhcnQgdGltZXIuCi0JICovCi0Jb21hcF9kbV90 aW1lcl9zZXRfbG9hZF9zdGFydChncHQsIDAsIGxvYWQpOwotCi0JLyogV2FpdCA4MHVzIGZvciB0 aW1lciB0byBvdmVyZmxvdyAqLwotCXVkZWxheSg4MCk7Ci0KLQl0aW1lb3V0ID0gbXNlY3NfdG9f amlmZmllcyg1KTsKLQkvKiBDaGVjayBpbnRlcnJ1cHQgc3RhdHVzIGFuZCB3YWl0IGZvciBpbnRl cnJ1cHQgKi8KLQl3aGlsZSAoIShvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKGdwdCkgJiBPTUFQ X1RJTUVSX0lOVF9PVkVSRkxPVykpIHsKLQkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1l b3V0KSkgewotCQkJcHJfZXJyKCIlczogR1BUaW1lciBpbnRlcnJ1cHQgZmFpbGVkXG4iLCBfX2Z1 bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBkc3BfY2xr X2VuYWJsZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEVuYWJsZSBDbG9jayAuCi0g KgotICovCi1pbnQgZHNwX2Nsa19lbmFibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCkKLXsKLQlp bnQgc3RhdHVzID0gMDsKLQotCWlmIChpc19kc3BfY2xrX2FjdGl2ZShkc3BfY2xvY2tzLCBjbGtf aWQpKSB7Ci0JCWRldl9lcnIoYnJpZGdlLCAiV0FSTjogY2xvY2sgaWQgJWQgYWxyZWFkeSBlbmFi bGVkXG4iLCBjbGtfaWQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzd2l0Y2ggKGdldF9jbGtfdHlw ZShjbGtfaWQpKSB7Ci0JY2FzZSBJVkEyX0NMSzoKLQkJY2xrX2VuYWJsZShpdmEyX2Nsayk7Ci0J CWJyZWFrOwotCWNhc2UgR1BUX0NMSzoKLQkJc3RhdHVzID0gb21hcF9kbV90aW1lcl9zdGFydCh0 aW1lcltjbGtfaWQgLSAxXSk7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19TTkRfT01BUF9TT0Nf TUNCU1AKLQljYXNlIE1DQlNQX0NMSzoKLQkJb21hcF9tY2JzcF9yZXF1ZXN0KE1DQlNQX0lEKGNs a19pZCkpOwotCQlvbWFwMl9tY2JzcF9zZXRfY2xrc19zcmMoTUNCU1BfSUQoY2xrX2lkKSwgTUNC U1BfQ0xLU19QQURfU1JDKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIFdEVF9DTEs6Ci0JCWRl dl9lcnIoYnJpZGdlLCAiRVJST1I6IERTUCByZXF1ZXN0ZWQgdG8gZW5hYmxlIFdEVDMgY2xrXG4i KTsKLQkJYnJlYWs7Ci0JY2FzZSBTU0lfQ0xLOgotCQljbGtfZW5hYmxlKHNzaS5zc3RfZmNrKTsK LQkJY2xrX2VuYWJsZShzc2kuc3NyX2Zjayk7Ci0JCWNsa19lbmFibGUoc3NpLmljayk7Ci0KLQkJ LyoKLQkJICogVGhlIFNTSSBtb2R1bGUgbmVlZCB0byBjb25maWd1cmVkIG5vdCB0byBoYXZlIHRo ZSBGb3JjZWQKLQkJICogaWRsZSBmb3IgbWFzdGVyIGludGVyZmFjZS4gSWYgaXQgaXMgc2V0IHRv IGZvcmNlZCBpZGxlLAotCQkgKiB0aGUgU1NJIG1vZHVsZSBpcyB0cmFuc2l0aW9uaW5nIHRvIHN0 YW5kYnkgdGhlcmVieSBjYXVzaW5nCi0JCSAqIHRoZSBjbGllbnQgaW4gdGhlIERTUCBoYW5nIHdh aXRpbmcgZm9yIHRoZSBTU0kgbW9kdWxlIHRvCi0JCSAqIGJlIGFjdGl2ZSBhZnRlciBlbmFibGlu ZyB0aGUgY2xvY2tzCi0JCSAqLwotCQlzc2lfY2xrX3ByZXBhcmUodHJ1ZSk7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCWRldl9lcnIoYnJpZGdlLCAiSW52YWxpZCBjbG9jayBpZCBmb3IgZW5hYmxl XG4iKTsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0KLQotCWlmICghc3RhdHVzKQotCQlzZXRfZHNw X2Nsa19hY3RpdmUoJmRzcF9jbG9ja3MsIGNsa19pZCk7Ci0KLW91dDoKLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKioKLSAqIGRzcF9jbG9ja19lbmFibGVfYWxsIC0gRW5hYmxlIGNsb2NrcyB1c2Vk IGJ5IHRoZSBEU1AKLSAqIEBkZXZfY29udGV4dAkJRHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgc3Ry dWN1cmUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYWxsIHRoZSBwZXJpcGhlcmFsIGNs b2NrcyB0aGF0IHdlcmUgcmVxdWVzdGVkIGJ5IERTUC4KLSAqLwotdTMyIGRzcF9jbG9ja19lbmFi bGVfYWxsKHUzMiBkc3BfcGVyX2Nsb2NrcykKLXsKLQl1MzIgY2xrX2lkOwotCXUzMiBzdGF0dXMg PSAtRVBFUk07Ci0KLQlmb3IgKGNsa19pZCA9IDA7IGNsa19pZCA8IERTUF9DTEtfTk9UX0RFRklO RUQ7IGNsa19pZCsrKSB7Ci0JCWlmIChpc19kc3BfY2xrX2FjdGl2ZShkc3BfcGVyX2Nsb2Nrcywg Y2xrX2lkKSkKLQkJCXN0YXR1cyA9IGRzcF9jbGtfZW5hYmxlKGNsa19pZCk7Ci0JfQotCi0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkc3BfY2xrX2Rpc2FibGUgPT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEaXNhYmxlIHRoZSBjbG9jay4KLSAqCi0gKi8KLWlu dCBkc3BfY2xrX2Rpc2FibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCkKLXsKLQlpbnQgc3RhdHVz ID0gMDsKLQotCWlmICghaXNfZHNwX2Nsa19hY3RpdmUoZHNwX2Nsb2NrcywgY2xrX2lkKSkgewot CQlkZXZfZXJyKGJyaWRnZSwgIkVSUjogY2xvY2sgaWQgJWQgYWxyZWFkeSBkaXNhYmxlZFxuIiwg Y2xrX2lkKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3dpdGNoIChnZXRfY2xrX3R5cGUoY2xrX2lk KSkgewotCWNhc2UgSVZBMl9DTEs6Ci0JCWNsa19kaXNhYmxlKGl2YTJfY2xrKTsKLQkJYnJlYWs7 Ci0JY2FzZSBHUFRfQ0xLOgotCQlzdGF0dXMgPSBvbWFwX2RtX3RpbWVyX3N0b3AodGltZXJbY2xr X2lkIC0gMV0pOwotCQlicmVhazsKLSNpZmRlZiBDT05GSUdfU05EX09NQVBfU09DX01DQlNQCi0J Y2FzZSBNQ0JTUF9DTEs6Ci0JCW9tYXAyX21jYnNwX3NldF9jbGtzX3NyYyhNQ0JTUF9JRChjbGtf aWQpLCBNQ0JTUF9DTEtTX1BSQ01fU1JDKTsKLQkJb21hcF9tY2JzcF9mcmVlKE1DQlNQX0lEKGNs a19pZCkpOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgV0RUX0NMSzoKLQkJZGV2X2Vycihicmlk Z2UsICJFUlJPUjogRFNQIHJlcXVlc3RlZCB0byBkaXNhYmxlIFdEVDMgY2xrXG4iKTsKLQkJYnJl YWs7Ci0JY2FzZSBTU0lfQ0xLOgotCQlzc2lfY2xrX3ByZXBhcmUoZmFsc2UpOwotCQlzc2lfY2xr X3ByZXBhcmUoZmFsc2UpOwotCQljbGtfZGlzYWJsZShzc2kuc3N0X2Zjayk7Ci0JCWNsa19kaXNh YmxlKHNzaS5zc3JfZmNrKTsKLQkJY2xrX2Rpc2FibGUoc3NpLmljayk7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCWRldl9lcnIoYnJpZGdlLCAiSW52YWxpZCBjbG9jayBpZCBmb3IgZGlzYWJsZVxu Iik7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQl9Ci0KLQlpZiAoIXN0YXR1cykKLQkJc2V0X2RzcF9j bGtfaW5hY3RpdmUoJmRzcF9jbG9ja3MsIGNsa19pZCk7Ci0KLW91dDoKLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKioKLSAqIGRzcF9jbG9ja19kaXNhYmxlX2FsbCAtIERpc2FibGUgYWxsIGFjdGl2 ZSBjbG9ja3MKLSAqIEBkZXZfY29udGV4dAkJRHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgc3RydWN0 dXJlCi0gKgotICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBhbGwgdGhlIHBlcmlwaGVyYWwgY2xv Y2tzIHRoYXQgd2VyZSBlbmFibGVkIGJ5IERTUC4KLSAqIEl0IGlzIG1lYW50IHRvIGJlIGNhbGxl ZCBvbmx5IHdoZW4gRFNQIGlzIGVudGVyaW5nIGhpYmVybmF0aW9uIG9yIHdoZW4gRFNQCi0gKiBp cyBpbiBlcnJvciBzdGF0ZS4KLSAqLwotdTMyIGRzcF9jbG9ja19kaXNhYmxlX2FsbCh1MzIgZHNw X3Blcl9jbG9ja3MpCi17Ci0JdTMyIGNsa19pZDsKLQl1MzIgc3RhdHVzID0gLUVQRVJNOwotCi0J Zm9yIChjbGtfaWQgPSAwOyBjbGtfaWQgPCBEU1BfQ0xLX05PVF9ERUZJTkVEOyBjbGtfaWQrKykg ewotCQlpZiAoaXNfZHNwX2Nsa19hY3RpdmUoZHNwX3Blcl9jbG9ja3MsIGNsa19pZCkpCi0JCQlz dGF0dXMgPSBkc3BfY2xrX2Rpc2FibGUoY2xrX2lkKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwot fQotCi11MzIgZHNwX2Nsa19nZXRfaXZhMl9yYXRlKHZvaWQpCi17Ci0JdTMyIGNsa19zcGVlZF9r aHo7Ci0KLQljbGtfc3BlZWRfa2h6ID0gY2xrX2dldF9yYXRlKGl2YTJfY2xrKTsKLQljbGtfc3Bl ZWRfa2h6IC89IDEwMDA7Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogY2xrIHNwZWVkIEtoeiA9ICVk XG4iLCBfX2Z1bmNfXywgY2xrX3NwZWVkX2toeik7Ci0KLQlyZXR1cm4gY2xrX3NwZWVkX2toejsK LX0KLQotdm9pZCBzc2lfY2xrX3ByZXBhcmUoYm9vbCBGTEFHKQotewotCXZvaWQgX19pb21lbSAq c3NpX2Jhc2U7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0Jc3NpX2Jhc2UgPSBpb3JlbWFwKEw0 XzM0WFhfQkFTRSArIE9NQVBfU1NJX09GRlNFVCwgT01BUF9TU0lfU0laRSk7Ci0JaWYgKCFzc2lf YmFzZSkgewotCQlwcl9lcnIoIiVzOiBlcnJvciwgU1NJIG5vdCBjb25maWd1cmVkXG4iLCBfX2Z1 bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoRkxBRykgewotCQkvKiBTZXQgQXV0b2lkbGUs IFNJRExFTW9kZSB0byBzbWFydCBpZGxlLCBhbmQgTUlETEVtb2RlIHRvCi0JCSAqIG5vIGlkbGUK LQkJICovCi0JCXZhbHVlID0gU1NJX0FVVE9JRExFIHwgU1NJX1NJRExFX1NNQVJUSURMRSB8IFNT SV9NSURMRV9OT0lETEU7Ci0JfSBlbHNlIHsKLQkJLyogU2V0IEF1dG9pZGxlLCBTSURMRU1vZGUg dG8gZm9yY2VkIGlkbGUsIGFuZCBNSURMRW1vZGUgdG8KLQkJICogZm9yY2VkIGlkbGUKLQkJICov Ci0JCXZhbHVlID0gU1NJX0FVVE9JRExFOwotCX0KLQotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgc3Np X2Jhc2UgKyBPTUFQX1NTSV9TWVNDT05GSUdfT0ZGU0VUKTsKLQlpb3VubWFwKHNzaV9iYXNlKTsK LX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20u YyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDQyZjk0ZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYworKysgL2Rldi9udWxsCkBAIC0xLDIyNDYgKzAsMCBA QAotLyoKLSAqIGlvX3NtLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQg ZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogSU8gZGlzcGF0Y2hlciBm b3IgYSBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoQykg MjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFO WSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBM SU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLS8qCi0gKiBDaGFu bmVsIEludmFyaWFudDoKLSAqIFRoZXJlIGlzIGFuIGltcG9ydGFudCBpbnZhcmlhbnQgY29uZGl0 aW9uIHdoaWNoIG11c3QgYmUgbWFpbnRhaW5lZCBwZXIKLSAqIGNoYW5uZWwgb3V0c2lkZSBvZiBi cmlkZ2VfY2hubF9nZXRfaW9jKCkgYW5kIElPX0Rpc3BhdGNoKCksIHZpb2xhdGlvbiBvZgotICog d2hpY2ggbWF5IGNhdXNlIHRpbWVvdXRzIGFuZC9vciBmYWlsdXJlIG9mIHRoZSBzeW5jX3dhaXRf b25fZXZlbnQKLSAqIGZ1bmN0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNp bmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLS8qIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvaG9zdF9vcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0jaW5jbHVk ZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotCi0vKiBTZXJ2aWNlcyBMYXllciAqLwotI2luY2x1ZGUg PGRzcGJyaWRnZS9udGZ5Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyogSGFy ZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKi8KLSNpbmNsdWRlIDxod19kZWZzLmg+Ci0jaW5jbHVk ZSA8aHdfbW11Lmg+Ci0KLS8qIEJyaWRnZSBEcml2ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv ZHNwZGVoLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvLmg+Ci0jaW5jbHVkZSA8ZHNwYnJp ZGdlL2RzcGlvY3RsLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgotI2luY2x1ZGUgPF90 aW9tYXAuaD4KLSNpbmNsdWRlIDx0aW9tYXBfaW8uaD4KLSNpbmNsdWRlIDxfdGlvbWFwX3B3ci5o PgotCi0vKiBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2NvZC5oPgot I2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgot Ci0vKiBPdGhlcnMgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1zX3NoLmg+Ci0jaW5jbHVkZSA8 ZHNwYnJpZGdlL21nci5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KLSNpbmNsdWRlICJf Y21tLmgiCi0jaW5jbHVkZSAibW9kdWxlX2xpc3QuaCIKLQotLyogVGhpcyAqLwotI2luY2x1ZGUg PGRzcGJyaWRnZS9pb19zbS5oPgotI2luY2x1ZGUgIl9tc2dfc20uaCIKLQotLyogRGVmaW5lcywg RGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLwotI2RlZmluZSBPVVRQVVROT1RSRUFEWSAgMHhm ZmZmCi0jZGVmaW5lIE5PVEVOQUJMRUQgICAgICAweGZmZmYJLyogQ2hhbm5lbChzKSBub3QgZW5h YmxlZCAqLwotCi0jZGVmaW5lIEVYVEVORCAgICAgICJfRVhUX0VORCIKLQotI2RlZmluZSBTV0FQ X1dPUkQoeCkgICAgICh4KQotI2RlZmluZSBVTF9QQUdFX0FMSUdOX1NJWkUgMHgxMDAwMAkvKiBQ YWdlIEFsaWduIFNpemUgKi8KLQotI2RlZmluZSBNQVhfUE1fUkVRUyAzMgotCi0jZGVmaW5lIE1N VV9GQVVMVF9IRUFEMSAweGE1YTVhNWE1Ci0jZGVmaW5lIE1NVV9GQVVMVF9IRUFEMiAweDk2OTY5 Njk2Ci0jZGVmaW5lIFBPTExfTUFYIDEwMDAKLSNkZWZpbmUgTUFYX01NVV9EQkdCVUZGIDEwMjQw Ci0KLS8qIElPIE1hbmFnZXI6IG9ubHkgb25lIGNyZWF0ZWQgcGVyIGJvYXJkICovCi1zdHJ1Y3Qg aW9fbWdyIHsKLQkvKiBUaGVzZSBmb3VyIGZpZWxkcyBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMg aW4gYSBpb19tZ3JfIHN0cnVjdCAqLwotCS8qIEJyaWRnZSBkZXZpY2UgY29udGV4dCAqLwotCXN0 cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0OwotCS8qIEZ1bmN0aW9uIGlu dGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCi0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNl ICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CS8qIERldmljZSB0aGlz IGJvYXJkIHJlcHJlc2VudHMgKi8KLQotCS8qIFRoZXNlIGZpZWxkcyBpbml0aWFsaXplZCBpbiBi cmlkZ2VfaW9fY3JlYXRlKCkgKi8KLQlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyOwotCXN0cnVj dCBzaG0gKnNoYXJlZF9tZW07CS8qIFNoYXJlZCBNZW1vcnkgY29udHJvbCAqLwotCXU4ICppbnB1 dDsJCS8qIEFkZHJlc3Mgb2YgaW5wdXQgY2hhbm5lbCAqLwotCXU4ICpvdXRwdXQ7CQkvKiBBZGRy ZXNzIG9mIG91dHB1dCBjaGFubmVsICovCi0Jc3RydWN0IG1zZ19tZ3IgKm1zZ19tZ3I7CS8qIE1l c3NhZ2UgbWFuYWdlciAqLwotCS8qIE1zZyBjb250cm9sIGZvciBmcm9tIERTUCBtZXNzYWdlcyAq LwotCXN0cnVjdCBtc2dfY3RybCAqbXNnX2lucHV0X2N0cmw7Ci0JLyogTXNnIGNvbnRyb2wgZm9y IHRvIERTUCBtZXNzYWdlcyAqLwotCXN0cnVjdCBtc2dfY3RybCAqbXNnX291dHB1dF9jdHJsOwot CXU4ICptc2dfaW5wdXQ7CQkvKiBBZGRyZXNzIG9mIGlucHV0IG1lc3NhZ2VzICovCi0JdTggKm1z Z19vdXRwdXQ7CQkvKiBBZGRyZXNzIG9mIG91dHB1dCBtZXNzYWdlcyAqLwotCXUzMiBzbV9idWZf c2l6ZTsJLyogU2l6ZSBvZiBhIHNoYXJlZCBtZW1vcnkgSS9PIGNoYW5uZWwgKi8KLQlib29sIHNo YXJlZF9pcnE7CS8qIElzIHRoaXMgSVJRIHNoYXJlZD8gKi8KLQl1MzIgd29yZF9zaXplOwkJLyog U2l6ZSBpbiBieXRlcyBvZiBEU1Agd29yZCAqLwotCXUxNiBpbnRyX3ZhbDsJCS8qIEludGVycnVw dCB2YWx1ZSAqLwotCS8qIFByaXZhdGUgZXh0bmQgcHJvYyBpbmZvOyBtbXUgc2V0dXAgKi8KLQlz dHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gZXh0X3Byb2NfaW5mbzsKLQlzdHJ1Y3QgY21tX29i amVjdCAqY21tX21ncjsJLyogU2hhcmVkIE1lbSBNbmdyICovCi0Jc3RydWN0IHdvcmtfc3RydWN0 IGlvX3dvcmtxOwkvKiB3b3JrcXVldWUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURH RV9CQUNLVFJBQ0UpCi0JdTMyIHRyYWNlX2J1ZmZlcl9iZWdpbjsJLyogVHJhY2UgbWVzc2FnZSBz dGFydCBhZGRyZXNzICovCi0JdTMyIHRyYWNlX2J1ZmZlcl9lbmQ7CS8qIFRyYWNlIG1lc3NhZ2Ug ZW5kIGFkZHJlc3MgKi8KLQl1MzIgdHJhY2VfYnVmZmVyX2N1cnJlbnQ7CS8qIFRyYWNlIG1lc3Nh Z2UgY3VycmVudCBhZGRyZXNzICovCi0JdTMyIGdwcF9yZWFkX3BvaW50ZXI7CQkvKiBHUFAgUmVh ZCBwb2ludGVyIHRvIFRyYWNlIGJ1ZmZlciAqLwotCXU4ICptc2c7Ci0JdTMyIGdwcF92YTsKLQl1 MzIgZHNwX3ZhOwotI2VuZGlmCi0JLyogSU8gRHBjICovCi0JdTMyIGRwY19yZXE7CQkvKiBOdW1i ZXIgb2YgcmVxdWVzdGVkIERQQydzLiAqLwotCXUzMiBkcGNfc2NoZWQ7CQkvKiBOdW1iZXIgb2Yg ZXhlY3V0ZWQgRFBDJ3MuICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGRwY190YXNrbGV0Owot CXNwaW5sb2NrX3QgZHBjX2xvY2s7Ci0KLX07Ci0KLXN0cnVjdCBzaG1fc3ltYm9sX3ZhbCB7Ci0J dTMyIHNobV9iYXNlOwotCXUzMiBzaG1fbGltOwotCXUzMiBtc2dfYmFzZTsKLQl1MzIgbXNnX2xp bTsKLQl1MzIgc2htMF9lbmQ7Ci0JdTMyIGR5bl9leHQ7Ci0JdTMyIGV4dF9lbmQ7Ci19OwotCi0v KiBGdW5jdGlvbiBQcm90b3R5cGVzICovCi1zdGF0aWMgdm9pZCBpb19kaXNwYXRjaF9wbShzdHJ1 Y3QgaW9fbWdyICpwaW9fbWdyKTsKLXN0YXRpYyB2b2lkIG5vdGlmeV9jaG5sX2NvbXBsZXRlKHN0 cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCi0JCQkJIHN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNr ZXRfb2JqKTsKLXN0YXRpYyB2b2lkIGlucHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwg c3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKLQkJCXU4IGlvX21vZGUpOwotc3RhdGljIHZvaWQg b3V0cHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IGNobmxfb2JqZWN0ICpw Y2hubCwKLQkJCXU4IGlvX21vZGUpOwotc3RhdGljIHZvaWQgaW5wdXRfbXNnKHN0cnVjdCBpb19t Z3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7Ci1zdGF0aWMgdm9pZCBvdXRw dXRfbXNnKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7 Ci1zdGF0aWMgdTMyIGZpbmRfcmVhZHlfb3V0cHV0KHN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jf b2JqLAotCQkJICAgICBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLCB1MzIgbWFzayk7Ci0KLS8q IEJ1cyBBZGRyIChjYWNoZWQga2VybmVsKSAqLwotc3RhdGljIGludCByZWdpc3Rlcl9zaG1fc2Vn cyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAotCQkJCSAgICBzdHJ1Y3QgY29kX21hbmFnZXIgKmNv ZF9tYW4sCi0JCQkJICAgIHUzMiBkd19ncHBfYmFzZV9wYSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9p ZCBzZXRfY2hubF9mcmVlKHN0cnVjdCBzaG0gKnNtLCB1MzIgY2hubCkKLXsKLQlzbS0+aG9zdF9m cmVlX21hc2sgJj0gfigxIDw8IGNobmwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2No bmxfYnVzeShzdHJ1Y3Qgc2htICpzbSwgdTMyIGNobmwpCi17Ci0Jc20tPmhvc3RfZnJlZV9tYXNr IHw9IDEgPDwgY2hubDsKLX0KLQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9pb19jcmVhdGUg PT09PT09PT0KLSAqICAgICAgQ3JlYXRlIGFuIElPIG1hbmFnZXIgb2JqZWN0LgotICovCi1pbnQg YnJpZGdlX2lvX2NyZWF0ZShzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLAotCQkJICAgIHN0cnVjdCBk ZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW9fYXR0cnMgKm1ncl9h dHRydHMpCi17Ci0Jc3RydWN0IGlvX21nciAqcGlvX21nciA9IE5VTEw7Ci0Jc3RydWN0IGJyaWRn ZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0ID0gTlVMTDsKLQlzdHJ1Y3QgY2ZnX2Rldm5v ZGUgKmRldl9ub2RlX29iajsKLQlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsKLQl1OCBkZXZf dHlwZTsKLQotCS8qIENoZWNrIHJlcXVpcmVtZW50cyAqLwotCWlmICghaW9fbWFuIHx8ICFtZ3Jf YXR0cnRzIHx8IG1ncl9hdHRydHMtPndvcmRfc2l6ZSA9PSAwKQotCQlyZXR1cm4gLUVGQVVMVDsK LQotCSppb19tYW4gPSBOVUxMOwotCi0JZGV2X2dldF9jaG5sX21ncihoZGV2X29iaiwgJmhjaG5s X21ncik7Ci0JaWYgKCFoY2hubF9tZ3IgfHwgaGNobmxfbWdyLT5pb21ncikKLQkJcmV0dXJuIC1F RkFVTFQ7Ci0KLQkvKgotCSAqIE1lc3NhZ2UgbWFuYWdlciB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBh IGZpbGUgaXMgbG9hZGVkLCBzaW5jZQotCSAqIHNpemUgb2YgbWVzc2FnZSBidWZmZXIgaW4gc2hh cmVkIG1lbW9yeSBpcyBjb25maWd1cmFibGUgaW4KLQkgKiB0aGUgYmFzZSBpbWFnZS4KLQkgKi8K LQlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKLQlp ZiAoIWhicmlkZ2VfY29udGV4dCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlkZXZfZ2V0X2Rldl90 eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpOwotCi0JLyogQWxsb2NhdGUgSU8gbWFuYWdlciBvYmpl Y3QgKi8KLQlwaW9fbWdyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlvX21nciksIEdGUF9LRVJO RUwpOwotCWlmICghcGlvX21ncikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBJbml0aWFsaXpl IGNobmxfbWdyIG9iamVjdCAqLwotCXBpb19tZ3ItPmNobmxfbWdyID0gaGNobmxfbWdyOwotCXBp b19tZ3ItPndvcmRfc2l6ZSA9IG1ncl9hdHRydHMtPndvcmRfc2l6ZTsKLQotCWlmIChkZXZfdHlw ZSA9PSBEU1BfVU5JVCkgewotCQkvKiBDcmVhdGUgYW4gSU8gRFBDICovCi0JCXRhc2tsZXRfaW5p dCgmcGlvX21nci0+ZHBjX3Rhc2tsZXQsIGlvX2RwYywgKHUzMikgcGlvX21ncik7Ci0KLQkJLyog SW5pdGlhbGl6ZSBEUEMgY291bnRlcnMgKi8KLQkJcGlvX21nci0+ZHBjX3JlcSA9IDA7Ci0JCXBp b19tZ3ItPmRwY19zY2hlZCA9IDA7Ci0KLQkJc3Bpbl9sb2NrX2luaXQoJnBpb19tZ3ItPmRwY19s b2NrKTsKLQotCQlpZiAoZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlX29iaikp IHsKLQkJCWJyaWRnZV9pb19kZXN0cm95KHBpb19tZ3IpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0K LQl9Ci0KLQlwaW9fbWdyLT5icmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsKLQlwaW9f bWdyLT5zaGFyZWRfaXJxID0gbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDsKLQlpZiAoZHNwX3dkdF9p bml0KCkpIHsKLQkJYnJpZGdlX2lvX2Rlc3Ryb3kocGlvX21ncik7Ci0JCXJldHVybiAtRVBFUk07 Ci0JfQotCi0JLyogUmV0dXJuIElPIG1hbmFnZXIgb2JqZWN0IHRvIGNhbGxlci4uLiAqLwotCWhj aG5sX21nci0+aW9tZ3IgPSBwaW9fbWdyOwotCSppb19tYW4gPSBwaW9fbWdyOwotCi0JcmV0dXJu IDA7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2lvX2Rlc3Ryb3kgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBEaXNhYmxlIGludGVycnVwdHMsIGRlc3Ryb3kgdGhlIElPIG1h bmFnZXIuCi0gKi8KLWludCBicmlkZ2VfaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdy KQotewotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKGhpb19tZ3IpIHsKLQkJLyogRnJlZSBJTyBE UEMgb2JqZWN0ICovCi0JCXRhc2tsZXRfa2lsbCgmaGlvX21nci0+ZHBjX3Rhc2tsZXQpOwotCi0j aWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFKQotCQlrZnJlZShoaW9fbWdy LT5tc2cpOwotI2VuZGlmCi0JCWRzcF93ZHRfZXhpdCgpOwotCQkvKiBGcmVlIHRoaXMgSU8gbWFu YWdlciBvYmplY3QgKi8KLQkJa2ZyZWUoaGlvX21ncik7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0g LUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdHJ1Y3Qgc2htX3N5bWJvbF92 YWwgKl9nZXRfc2htX3N5bWJvbF92YWx1ZXMoc3RydWN0IGlvX21nciAqaGlvX21ncikKLXsKLQlz dHJ1Y3Qgc2htX3N5bWJvbF92YWwgKnM7Ci0Jc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWFuOwot CWludCBzdGF0dXM7Ci0KLQlzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlp ZiAoIXMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3RhdHVzID0gZGV2X2dldF9j b2RfbWdyKGhpb19tZ3ItPmRldl9vYmosICZjb2RfbWFuKTsKLQlpZiAoc3RhdHVzKQotCQlnb3Rv IGZyZWVfc3ltYm9sOwotCi0JLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgY2hhbm5lbCBwYXJ0 IG9mIHNoYXJlZCBtZW1vcnkgKi8KLQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFu LCBDSE5MX1NIQVJFRF9CVUZGRVJfQkFTRV9TWU0sCi0JCQkJICAgJnMtPnNobV9iYXNlKTsKLQlp ZiAoc3RhdHVzKQotCQlnb3RvIGZyZWVfc3ltYm9sOwotCi0Jc3RhdHVzID0gY29kX2dldF9zeW1f dmFsdWUoY29kX21hbiwgQ0hOTF9TSEFSRURfQlVGRkVSX0xJTUlUX1NZTSwKLQkJCQkgICAmcy0+ c2htX2xpbSk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmcmVlX3N5bWJvbDsKLQotCWlmIChzLT5z aG1fbGltIDw9IHMtPnNobV9iYXNlKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJl ZV9zeW1ib2w7Ci0JfQotCi0JLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgbWVzc2FnZSBwYXJ0 IG9mIHNoYXJlZCBtZW1vcnkgKi8KLQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFu LCBNU0dfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSwKLQkJCQkgICAmcy0+bXNnX2Jhc2UpOwotCWlm IChzdGF0dXMpCi0JCWdvdG8gZnJlZV9zeW1ib2w7Ci0KLQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92 YWx1ZShjb2RfbWFuLCBNU0dfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0sCi0JCQkJICAgJnMtPm1z Z19saW0pOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnJlZV9zeW1ib2w7Ci0KLQlpZiAocy0+bXNn X2xpbSA8PSBzLT5tc2dfYmFzZSkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQlnb3RvIGZyZWVf c3ltYm9sOwotCX0KLQotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKLQlzdGF0 dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBEU1BfVFJBQ0VTRUNfRU5ELCAmcy0+c2ht MF9lbmQpOwotI2Vsc2UKLQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTSE0w X1NIQVJFRF9FTkRfU1lNLCAmcy0+c2htMF9lbmQpOwotI2VuZGlmCi0JaWYgKHN0YXR1cykKLQkJ Z290byBmcmVlX3N5bWJvbDsKLQotCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4s IERZTkVYVEJBU0UsICZzLT5keW5fZXh0KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZyZWVfc3lt Ym9sOwotCi0Jc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgRVhURU5ELCAmcy0+ ZXh0X2VuZCk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmcmVlX3N5bWJvbDsKLQotCXJldHVybiBz OwotCi1mcmVlX3N5bWJvbDoKLQlrZnJlZShzKTsKLQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOwot fQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9pb19vbl9sb2FkZWQgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBDYWxsZWQgd2hlbiBhIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCB0byBn ZXQgc2hhcmVkIG1lbW9yeSBidWZmZXIKLSAqICAgICAgcGFyYW1ldGVycyBmcm9tIENPRkYgZmls ZS4gdWxTaGFyZWRCdWZmZXJCYXNlIGFuZCB1bFNoYXJlZEJ1ZmZlckxpbWl0Ci0gKiAgICAgIGFy ZSBpbiBEU1AgYWRkcmVzcyB1bml0cy4KLSAqLwotaW50IGJyaWRnZV9pb19vbl9sb2FkZWQoc3Ry dWN0IGlvX21nciAqaGlvX21ncikKLXsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkYyA9 IGhpb19tZ3ItPmJyaWRnZV9jb250ZXh0OwotCXN0cnVjdCBjZmdfaG9zdHJlcyAqY2ZnX3JlcyA9 IGRjLT5yZXNvdXJjZXM7Ci0Jc3RydWN0IGJyaWRnZV9pb2N0bF9leHRwcm9jICplcHJvYzsKLQlz dHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tYW47Ci0Jc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7 Ci0Jc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwotCXN0cnVjdCBzaG1fc3ltYm9sX3ZhbCAqczsK LQlpbnQgc3RhdHVzOwotCXU4IG51bV9wcm9jczsKLQlzMzIgbmR4OwotCXUzMiBpOwotCXUzMiBt ZW1fc3osIG1zZ19zeiwgcGFkX3N6LCBzaG1fc3osIHNobV9iYXNlX29mZnM7Ci0JdTMyIHNlZzBf c3osIHNlZzFfc3o7Ci0JdTMyIHBhLCB2YSwgZGE7Ci0JdTMyIHBhX2N1cnIsIHZhX2N1cnIsIGRh X2N1cnI7Ci0JdTMyIGJ5dGVzOwotCXUzMiBhbGxfYml0cyA9IDA7Ci0JdTMyIHBhZ2Vfc2l6ZVtd ID0gewotCQlIV19QQUdFX1NJWkUxNk1CLCBIV19QQUdFX1NJWkUxTUIsCi0JCUhXX1BBR0VfU0la RTY0S0IsIEhXX1BBR0VfU0laRTRLQgotCX07Ci0JdTMyIG1hcF9hdHRycyA9IERTUF9NQVBMSVRU TEVFTkRJQU4gfCBEU1BfTUFQUEhZU0lDQUxBRERSIHwKLQkJCURTUF9NQVBFTEVNU0laRTMyIHwg RFNQX01BUERPTk9UTE9DSzsKLQotCXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihoaW9fbWdyLT5k ZXZfb2JqLCAmY29kX21hbik7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQotCWhj aG5sX21nciA9IGhpb19tZ3ItPmNobmxfbWdyOwotCi0JLyogVGhlIG1lc3NhZ2UgbWFuYWdlciBp cyBkZXN0cm95ZWQgd2hlbiB0aGUgYm9hcmQgaXMgc3RvcHBlZCAqLwotCWRldl9nZXRfbXNnX21n cihoaW9fbWdyLT5kZXZfb2JqLCAmaGlvX21nci0+bXNnX21ncik7Ci0JaG1zZ19tZ3IgPSBoaW9f bWdyLT5tc2dfbWdyOwotCWlmICghaGNobmxfbWdyIHx8ICFobXNnX21ncikKLQkJcmV0dXJuIC1F RkFVTFQ7Ci0KLQlpZiAoaGlvX21nci0+c2hhcmVkX21lbSkKLQkJaGlvX21nci0+c2hhcmVkX21l bSA9IE5VTEw7Ci0KLQlzID0gX2dldF9zaG1fc3ltYm9sX3ZhbHVlcyhoaW9fbWdyKTsKLQlpZiAo SVNfRVJSKHMpKQotCQlyZXR1cm4gUFRSX0VSUihzKTsKLQotCS8qIEdldCB0b3RhbCBsZW5ndGgg aW4gYnl0ZXMgKi8KLQlzaG1fc3ogPSAocy0+c2htX2xpbSAtIHMtPnNobV9iYXNlICsgMSkgKiBo aW9fbWdyLT53b3JkX3NpemU7Ci0KLQkvKiBDYWxjdWxhdGUgc2l6ZSBvZiBhIFBST0NDT1BZIHNo YXJlZCBtZW1vcnkgcmVnaW9uICovCi0JZGV2X2RiZyhicmlkZ2UsICIlczogKHByb2MpcHJvY2Nv cHkgc2htbWVtIHNpemU6IDB4JXggYnl0ZXNcbiIsCi0JCV9fZnVuY19fLCBzaG1fc3ogLSBzaXpl b2Yoc3RydWN0IHNobSkpOwotCi0JLyogTGVuZ3RoIChieXRlcykgb2YgbWVzc2FnaW5nIHBhcnQg b2Ygc2hhcmVkIG1lbW9yeSAqLwotCW1zZ19zeiA9IChzLT5tc2dfbGltIC0gcy0+bXNnX2Jhc2Ug KyAxKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKLQotCS8qIFRvdGFsIGxlbmd0aCAoYnl0ZXMpIG9m IHNoYXJlZCBtZW1vcnk6IGNobmwgKyBtc2cgKi8KLQltZW1fc3ogPSBzaG1fc3ogKyBtc2dfc3o7 Ci0KLQkvKiBHZXQgbWVtb3J5IHJlc2VydmVkIGluIGhvc3QgcmVzb3VyY2VzICovCi0JKHZvaWQp bWdyX2VudW1fcHJvY2Vzc29yX2luZm8oMCwKLQkJCQkgICAgICAoc3RydWN0IGRzcF9wcm9jZXNz b3JpbmZvICopCi0JCQkJCQkmaGlvX21nci0+ZXh0X3Byb2NfaW5mbywKLQkJCQkgICAgICBzaXpl b2Yoc3RydWN0IG1ncl9wcm9jZXNzb3JleHRpbmZvKSwKLQkJCQkgICAgICAmbnVtX3Byb2NzKTsK LQotCS8qIElPIHN1cHBvcnRzIG9ubHkgb25lIERTUCBmb3Igbm93ICovCi0JaWYgKG51bV9wcm9j cyAhPSAxKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJlZV9zeW1ib2w7Ci0JfQot Ci0JLyogVGhlIGZpcnN0IE1NVSBUTEIgZW50cnkoVExCXzApIGluIERDRCBpcyBTaG1CYXNlICov Ci0JcGEgPSBjZmdfcmVzLT5tZW1fcGh5c1sxXTsKLQl2YSA9IGNmZ19yZXMtPm1lbV9iYXNlWzFd OwotCi0JLyogVGhpcyBpcyB0aGUgdmlydHVhbCB1bmNhY2hlZCBpb3JlbWFwcGVkIGFkZHJlc3Mh ISEgKi8KLQkvKiBXaHkgY2FuJ3Qgd2UgZGlyZWN0bHkgdGFrZSB0aGUgRFNQVkEgZnJvbSB0aGUg c3ltYm9scz8gKi8KLQlkYSA9IGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLmRzcF92 aXJ0OwotCXNlZzBfc3ogPSAocy0+c2htMF9lbmQgLSBkYSkgKiBoaW9fbWdyLT53b3JkX3NpemU7 Ci0Jc2VnMV9zeiA9IChzLT5leHRfZW5kIC0gcy0+ZHluX2V4dCkgKiBoaW9fbWdyLT53b3JkX3Np emU7Ci0KLQkvKiA0SyBhbGlnbiAqLwotCXNlZzFfc3ogPSAoc2VnMV9zeiArIDB4RkZGKSAmICh+ MHhGRkZVTCk7Ci0KLQkvKiA2NEsgYWxpZ24gKi8KLQlzZWcwX3N6ID0gKHNlZzBfc3ogKyAweEZG RkYpICYgKH4weEZGRkZVTCk7Ci0KLQlwYWRfc3ogPSBVTF9QQUdFX0FMSUdOX1NJWkUgLSAoKHBh ICsgc2VnMV9zeikgJSBVTF9QQUdFX0FMSUdOX1NJWkUpOwotCWlmIChwYWRfc3ogPT0gVUxfUEFH RV9BTElHTl9TSVpFKQotCQlwYWRfc3ogPSAweDA7Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBw YSAleCwgdmEgJXgsIGRhICV4XG4iLCBfX2Z1bmNfXywgcGEsIHZhLCBkYSk7Ci0JZGV2X2RiZyhi cmlkZ2UsCi0JCSJzaG0wX2VuZCAleCwgZHluX2V4dCAleCwgZXh0X2VuZCAleCwgc2VnMF9zeiAl eCBzZWcxX3N6ICV4XG4iLAotCQlzLT5zaG0wX2VuZCwgcy0+ZHluX2V4dCwgcy0+ZXh0X2VuZCwg c2VnMF9zeiwgc2VnMV9zeik7Ci0KLQlpZiAoKHNlZzBfc3ogKyBzZWcxX3N6ICsgcGFkX3N6KSA+ IGNmZ19yZXMtPm1lbV9sZW5ndGhbMV0pIHsKLQkJcHJfZXJyKCIlczogc2htIEVycm9yLCByZXNl cnZlZCAweCV4IHJlcXVpcmVkIDB4JXhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2ZnX3Jlcy0+ bWVtX2xlbmd0aFsxXSwKLQkJICAgICAgIHNlZzBfc3ogKyBzZWcxX3N6ICsgcGFkX3N6KTsKLQkJ c3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBmcmVlX3N5bWJvbDsKLQl9Ci0KLQlwYV9jdXJyID0g cGE7Ci0JdmFfY3VyciA9IHMtPmR5bl9leHQgKiBoaW9fbWdyLT53b3JkX3NpemU7Ci0JZGFfY3Vy ciA9IHZhOwotCWJ5dGVzID0gc2VnMV9zejsKLQotCS8qCi0JICogVHJ5IHRvIGZpdCBpbnRvIFRM QiBlbnRyaWVzLiBJZiBub3QgcG9zc2libGUsIHB1c2ggdGhlbSB0byBwYWdlCi0JICogdGFibGVz LiBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGlmIHNlY3Rpb25zIGFyZSBub3Qgb24KLQkgKiBi aWdnZXIgcGFnZSBib3VuZGFyeSwgd2UgbWF5IGVuZCB1cCBtYWtpbmcgc2V2ZXJhbCBzbWFsbCBw YWdlcy4KLQkgKiBTbywgcHVzaCB0aGVtIG9udG8gcGFnZSB0YWJsZXMsIGlmIHRoYXQgaXMgdGhl IGNhc2UuCi0JICovCi0Jd2hpbGUgKGJ5dGVzKSB7Ci0JCS8qCi0JCSAqIFRvIGZpbmQgdGhlIG1h eC4gcGFnZSBzaXplIHdpdGggd2hpY2ggYm90aCBQQSAmIFZBIGFyZQotCQkgKiBhbGlnbmVkLgot CQkgKi8KLQkJYWxsX2JpdHMgPSBwYV9jdXJyIHwgdmFfY3VycjsKLQkJZGV2X2RiZyhicmlkZ2Us Ci0JCQkic2VnIGFsbF9iaXRzICV4LCBwYV9jdXJyICV4LCB2YV9jdXJyICV4LCBieXRlcyAleFxu IiwKLQkJCWFsbF9iaXRzLCBwYV9jdXJyLCB2YV9jdXJyLCBieXRlcyk7Ci0KLQkJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgewotCQkJaWYgKChieXRlcyA+PSBwYWdlX3NpemVbaV0pICYmCi0JCQkg ICAgKChhbGxfYml0cyAmIChwYWdlX3NpemVbaV0gLSAxKSkgPT0gMCkpIHsKLQkJCQlzdGF0dXMg PSBoaW9fbWdyLT5pbnRmX2Z4bnMtPmJyZF9tZW1fbWFwKGRjLAotCQkJCQkJCXBhX2N1cnIsIHZh X2N1cnIsCi0JCQkJCQkJcGFnZV9zaXplW2ldLCBtYXBfYXR0cnMsCi0JCQkJCQkJTlVMTCk7Ci0J CQkJaWYgKHN0YXR1cykKLQkJCQkJZ290byBmcmVlX3N5bWJvbDsKLQotCQkJCXBhX2N1cnIgKz0g cGFnZV9zaXplW2ldOwotCQkJCXZhX2N1cnIgKz0gcGFnZV9zaXplW2ldOwotCQkJCWRhX2N1cnIg Kz0gcGFnZV9zaXplW2ldOwotCQkJCWJ5dGVzIC09IHBhZ2Vfc2l6ZVtpXTsKLQkJCQkvKgotCQkJ CSAqIERvbid0IHRyeSBzbWFsbGVyIHNpemVzLiBIb3BlZnVsbHkgd2UgaGF2ZQotCQkJCSAqIHJl YWNoZWQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIGEgYmlnZ2VyIHBhZ2UKLQkJCQkgKiBzaXplLgot CQkJCSAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JcGFfY3VyciArPSBwYWRfc3o7 Ci0JdmFfY3VyciArPSBwYWRfc3o7Ci0JZGFfY3VyciArPSBwYWRfc3o7Ci0JYnl0ZXMgPSBzZWcw X3N6OwotCXZhX2N1cnIgPSBkYSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKLQotCWVwcm9jID0ga3ph bGxvYyhzaXplb2YoKmVwcm9jKSAqIEJSRElPQ1RMX05VTU9GTU1VVExCLCBHRlBfS0VSTkVMKTsK LQlpZiAoIWVwcm9jKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9zeW1ib2w7 Ci0JfQotCi0JbmR4ID0gMDsKLQkvKiBDb25maWd1cmUgdGhlIFRMQiBlbnRyaWVzIGZvciB0aGUg bmV4dCBjYWNoZWFibGUgc2VnbWVudCAqLwotCXdoaWxlIChieXRlcykgewotCQkvKgotCQkgKiBU byBmaW5kIHRoZSBtYXguIHBhZ2Ugc2l6ZSB3aXRoIHdoaWNoIGJvdGggUEEgJiBWQSBhcmUKLQkJ ICogYWxpZ25lZC4KLQkJICovCi0JCWFsbF9iaXRzID0gcGFfY3VyciB8IHZhX2N1cnI7Ci0JCWRl dl9kYmcoYnJpZGdlLAotCQkJInNlZzEgYWxsX2JpdHMgJXgsIHBhX2N1cnIgJXgsIHZhX2N1cnIg JXgsIGJ5dGVzICV4XG4iLAotCQkJYWxsX2JpdHMsIHBhX2N1cnIsIHZhX2N1cnIsIGJ5dGVzKTsK LQotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlpZiAoIShieXRlcyA+PSBwYWdlX3Np emVbaV0pIHx8Ci0JCQkgICAgISgoYWxsX2JpdHMgJiAocGFnZV9zaXplW2ldIC0gMSkpID09IDAp KQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAobmR4ID49IE1BWF9MT0NLX1RMQl9FTlRSSUVTKSB7 Ci0JCQkJc3RhdHVzID0gaGlvX21nci0+aW50Zl9meG5zLT5icmRfbWVtX21hcChkYywKLQkJCQkJ CQlwYV9jdXJyLCB2YV9jdXJyLAotCQkJCQkJCXBhZ2Vfc2l6ZVtpXSwgbWFwX2F0dHJzLAotCQkJ CQkJCU5VTEwpOwotCQkJCWRldl9kYmcoYnJpZGdlLAotCQkJCQkiUFRFIHBhICV4IHZhICV4IGRz cF92YSAleCBzeiAleFxuIiwKLQkJCQkJZXByb2NbbmR4XS5ncHBfcGEsCi0JCQkJCWVwcm9jW25k eF0uZ3BwX3ZhLAotCQkJCQllcHJvY1tuZHhdLmRzcF92YSAqCi0JCQkJCWhpb19tZ3ItPndvcmRf c2l6ZSwgcGFnZV9zaXplW2ldKTsKLQkJCQlpZiAoc3RhdHVzKQotCQkJCQlnb3RvIGZyZWVfZXBy b2M7Ci0JCQl9Ci0KLQkJCS8qIFRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgd3JpdHRlbiB0 byBEU1AgTU1VICovCi0JCQllcHJvY1tuZHhdLmdwcF9wYSA9IHBhX2N1cnI7Ci0KLQkJCS8qCi0J CQkgKiBUaGlzIGlzIHRoZSB2aXJ0dWFsIHVuY2FjaGVkIGlvcmVtYXBwZWQKLQkJCSAqIGFkZHJl c3MhISEKLQkJCSAqLwotCQkJZXByb2NbbmR4XS5ncHBfdmEgPSBkYV9jdXJyOwotCQkJZXByb2Nb bmR4XS5kc3BfdmEgPSB2YV9jdXJyIC8gaGlvX21nci0+d29yZF9zaXplOwotCQkJZXByb2NbbmR4 XS5zaXplID0gcGFnZV9zaXplW2ldOwotCQkJZXByb2NbbmR4XS5lbmRpYW5pc20gPSBIV19MSVRU TEVfRU5ESUFOOwotCQkJZXByb2NbbmR4XS5lbGVtX3NpemUgPSBIV19FTEVNX1NJWkUxNkJJVDsK LQkJCWVwcm9jW25keF0ubWl4ZWRfbW9kZSA9IEhXX01NVV9DUFVFUzsKLQkJCWRldl9kYmcoYnJp ZGdlLCAiJXM6IHRsYiBwYSAleCB2YSAleCBkc3BfdmEgJXggc3ogJXhcbiIsCi0JCQkJX19mdW5j X18sIGVwcm9jW25keF0uZ3BwX3BhLAotCQkJCWVwcm9jW25keF0uZ3BwX3ZhLAotCQkJCWVwcm9j W25keF0uZHNwX3ZhICogaGlvX21nci0+d29yZF9zaXplLAotCQkJCXBhZ2Vfc2l6ZVtpXSk7Ci0J CQluZHgrKzsKLQotCQkJcGFfY3VyciArPSBwYWdlX3NpemVbaV07Ci0JCQl2YV9jdXJyICs9IHBh Z2Vfc2l6ZVtpXTsKLQkJCWRhX2N1cnIgKz0gcGFnZV9zaXplW2ldOwotCQkJYnl0ZXMgLT0gcGFn ZV9zaXplW2ldOwotCQkJLyoKLQkJCSAqIERvbid0IHRyeSBzbWFsbGVyIHNpemVzLiBIb3BlZnVs bHkgd2UgaGF2ZSByZWFjaGVkCi0JCQkgKiBhbiBhZGRyZXNzIGFsaWduZWQgdG8gYSBiaWdnZXIg cGFnZSBzaXplLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogQ29weSBy ZW1haW5pbmcgZW50cmllcyBmcm9tIENEQi4gQWxsIGVudHJpZXMgYXJlIDEgTUIgYW5kCi0JICog c2hvdWxkIG5vdCBjb25mbGljdCB3aXRoIHNobSBlbnRyaWVzIG9uIE1QVSBvciBEU1Agc2lkZS4K LQkgKi8KLQlmb3IgKGkgPSAzOyBpIDwgNyAmJiBuZHggPCBCUkRJT0NUTF9OVU1PRk1NVVRMQjsg aSsrKSB7Ci0JCXN0cnVjdCBtZ3JfcHJvY2Vzc29yZXh0aW5mbyAqZXAgPSAmaGlvX21nci0+ZXh0 X3Byb2NfaW5mbzsKLQkJdTMyIHdvcmRfc3ogPSBoaW9fbWdyLT53b3JkX3NpemU7Ci0KLQkJaWYg KGVwLT50eV90bGJbaV0uZ3BwX3BoeXMgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoZXAt PnR5X3RsYltpXS5ncHBfcGh5cyA+IHBhIC0gMHgxMDAwMDAgJiYKLQkJICAgICBlcC0+dHlfdGxi W2ldLmdwcF9waHlzIDw9IHBhICsgc2VnMF9zeikgfHwKLQkJICAgIChlcC0+dHlfdGxiW2ldLmRz cF92aXJ0ID4gZGEgLSAweDEwMDAwMCAvIHdvcmRfc3ogJiYKLQkJICAgICBlcC0+dHlfdGxiW2ld LmRzcF92aXJ0IDw9IGRhICsgc2VnMF9zeiAvIHdvcmRfc3opKSB7Ci0JCQlkZXZfZGJnKGJyaWRn ZSwKLQkJCQkiZXJyIGNkYiVkIHBhICV4IGRhICV4IHNobSBwYSAleCBkYSAleCBzeiAleFxuIiwK LQkJCQlpLCBlcC0+dHlfdGxiW2ldLmdwcF9waHlzLAotCQkJCWVwLT50eV90bGJbaV0uZHNwX3Zp cnQsIHBhLCBkYSwgc2VnMF9zeik7Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQlnb3RvIGZyZWVf ZXByb2M7Ci0JCX0KLQotCQlpZiAobmR4ID49IE1BWF9MT0NLX1RMQl9FTlRSSUVTKSB7Ci0JCQlz dGF0dXMgPSBoaW9fbWdyLT5pbnRmX2Z4bnMtPmJyZF9tZW1fbWFwKGRjLAotCQkJCQkJZXAtPnR5 X3RsYltpXS5ncHBfcGh5cywKLQkJCQkJCWVwLT50eV90bGJbaV0uZHNwX3ZpcnQsCi0JCQkJCQkw eDEwMDAwMCwgbWFwX2F0dHJzLCBOVUxMKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJZ290byBmcmVl X2Vwcm9jOwotCQl9Ci0KLQkJZXByb2NbbmR4XS5kc3BfdmEgPSBlcC0+dHlfdGxiW2ldLmRzcF92 aXJ0OwotCQllcHJvY1tuZHhdLmdwcF9wYSA9IGVwLT50eV90bGJbaV0uZ3BwX3BoeXM7Ci0JCWVw cm9jW25keF0uZ3BwX3ZhID0gMDsKLQotCQkvKiAxIE1CICovCi0JCWVwcm9jW25keF0uc2l6ZSA9 IDB4MTAwMDAwOwotCQlkZXZfZGJnKGJyaWRnZSwgInNobSBNTVUgZW50cnkgcGEgJXggZGEgMHgl eFxuIiwKLQkJCWVwcm9jW25keF0uZ3BwX3BhLCBlcHJvY1tuZHhdLmRzcF92YSk7Ci0JCW5keCsr OwotCX0KLQotCS8qIE1hcCB0aGUgTDQgcGVyaXBoZXJhbHMgKi8KLQlpID0gMDsKLQl3aGlsZSAo bDRfcGVyaXBoZXJhbF90YWJsZVtpXS5waHlzX2FkZHIpIHsKLQkJc3RhdHVzID0gaGlvX21nci0+ aW50Zl9meG5zLT5icmRfbWVtX21hcChkYywKLQkJCQkJbDRfcGVyaXBoZXJhbF90YWJsZVtpXS5w aHlzX2FkZHIsCi0JCQkJCWw0X3BlcmlwaGVyYWxfdGFibGVbaV0uZHNwX3ZpcnRfYWRkciwKLQkJ CQkJSFdfUEFHRV9TSVpFNEtCLCBtYXBfYXR0cnMsIE5VTEwpOwotCQlpZiAoc3RhdHVzKQotCQkJ Z290byBmcmVlX2Vwcm9jOwotCQlpKys7Ci0JfQotCi0JZm9yIChpID0gbmR4OyBpIDwgQlJESU9D VExfTlVNT0ZNTVVUTEI7IGkrKykgewotCQllcHJvY1tpXS5kc3BfdmEgPSAwOwotCQllcHJvY1tp XS5ncHBfcGEgPSAwOwotCQllcHJvY1tpXS5ncHBfdmEgPSAwOwotCQllcHJvY1tpXS5zaXplID0g MDsKLQl9Ci0KLQkvKgotCSAqIFNldCB0aGUgc2htIHBoeXNpY2FsIGFkZHJlc3MgZW50cnkgKGdy YXllZCBvdXQgaW4gQ0RCIGZpbGUpCi0JICogdG8gdGhlIHZpcnR1YWwgdW5jYWNoZWQgaW9yZW1h cHBlZCBhZGRyZXNzIG9mIHNobSByZXNlcnZlZAotCSAqIG9uIE1QVS4KLQkgKi8KLQloaW9fbWdy LT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS5ncHBfcGh5cyA9Ci0JCSh2YSArIHNlZzFfc3ogKyBw YWRfc3opOwotCi0JLyoKLQkgKiBOZWVkIHNobSBQaHlzIGFkZHIuIElPIHN1cHBvcnRzIG9ubHkg b25lIERTUCBmb3Igbm93OgotCSAqIG51bV9wcm9jcyA9IDEuCi0JICovCi0JaWYgKCFoaW9fbWdy LT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS5ncHBfcGh5cykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0K LQlpZiAoZXByb2NbMF0uZHNwX3ZhID4gcy0+c2htX2Jhc2UpCi0JCXJldHVybiAtRVBFUk07Ci0K LQkvKiBzaG1fYmFzZSBtYXkgbm90IGJlIGF0IHVsX2RzcF92YSBhZGRyZXNzICovCi0Jc2htX2Jh c2Vfb2ZmcyA9IChzLT5zaG1fYmFzZSAtIGVwcm9jWzBdLmRzcF92YSkgKgotCQkgICAgaGlvX21n ci0+d29yZF9zaXplOwotCS8qCi0JICogYnJpZGdlX2Rldl9jdHJsKCkgd2lsbCBzZXQgZGV2IGNv bnRleHQgZHNwLW1tdSBpbmZvLiBJbgotCSAqIGJyaWRnZV9icmRfc3RhcnQoKSB0aGUgTU1VIHdp bGwgYmUgcmUtcHJvZ3JhbWVkIHdpdGggTU1VCi0JICogRFNQVmEtR1BQUGEgcGFpciBpbmZvIHdo aWxlIERTUCBpcyBpbiBhIGtub3duCi0JICogKHJlc2V0KSBzdGF0ZS4KLQkgKi8KLQlzdGF0dXMg PSBoaW9fbWdyLT5pbnRmX2Z4bnMtPmRldl9jbnRybChoaW9fbWdyLT5icmlkZ2VfY29udGV4dCwK LQkJCQkJICAgICAgIEJSRElPQ1RMX1NFVE1NVUNPTkZJRywgZXByb2MpOwotCWlmIChzdGF0dXMp Ci0JCWdvdG8gZnJlZV9lcHJvYzsKLQotCXMtPnNobV9iYXNlID0gaGlvX21nci0+ZXh0X3Byb2Nf aW5mby50eV90bGJbMF0uZ3BwX3BoeXM7Ci0Jcy0+c2htX2Jhc2UgKz0gc2htX2Jhc2Vfb2ZmczsK LQlzLT5zaG1fYmFzZSA9ICh1MzIpIE1FTV9MSU5FQVJfQUREUkVTUygodm9pZCAqKXMtPnNobV9i YXNlLAotCQkJCQkgICAgICAgbWVtX3N6KTsKLQlpZiAoIXMtPnNobV9iYXNlKSB7Ci0JCXN0YXR1 cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnJlZV9lcHJvYzsKLQl9Ci0KLQkvKiBSZWdpc3RlciBTTSAq LwotCXN0YXR1cyA9IHJlZ2lzdGVyX3NobV9zZWdzKGhpb19tZ3IsIGNvZF9tYW4sIGVwcm9jWzBd LmdwcF9wYSk7Ci0KLQloaW9fbWdyLT5zaGFyZWRfbWVtID0gKHN0cnVjdCBzaG0gKilzLT5zaG1f YmFzZTsKLQloaW9fbWdyLT5pbnB1dCA9ICh1OCAqKSBoaW9fbWdyLT5zaGFyZWRfbWVtICsgc2l6 ZW9mKHN0cnVjdCBzaG0pOwotCWhpb19tZ3ItPm91dHB1dCA9IGhpb19tZ3ItPmlucHV0ICsgKHNo bV9zeiAtCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHNobSkpIC8gMjsKLQloaW9fbWdyLT5zbV9i dWZfc2l6ZSA9IGhpb19tZ3ItPm91dHB1dCAtIGhpb19tZ3ItPmlucHV0OwotCi0JLyogIFNldCB1 cCBTaGFyZWQgbWVtb3J5IGFkZHJlc3NlcyBmb3IgbWVzc2FnaW5nICovCi0JaGlvX21nci0+bXNn X2lucHV0X2N0cmwgPQotCQkoc3RydWN0IG1zZ19jdHJsICopKCh1OCAqKSBoaW9fbWdyLT5zaGFy ZWRfbWVtICsgc2htX3N6KTsKLQloaW9fbWdyLT5tc2dfaW5wdXQgPQotCQkodTggKikgaGlvX21n ci0+bXNnX2lucHV0X2N0cmwgKyBzaXplb2Yoc3RydWN0IG1zZ19jdHJsKTsKLQloaW9fbWdyLT5t c2dfb3V0cHV0X2N0cmwgPQotCQkoc3RydWN0IG1zZ19jdHJsICopKCh1OCAqKSBoaW9fbWdyLT5t c2dfaW5wdXRfY3RybCArCi0JCQkJCSAgIG1zZ19zeiAvIDIpOwotCWhpb19tZ3ItPm1zZ19vdXRw dXQgPQotCQkodTggKikgaGlvX21nci0+bXNnX291dHB1dF9jdHJsICsgc2l6ZW9mKHN0cnVjdCBt c2dfY3RybCk7Ci0JaG1zZ19tZ3ItPm1heF9tc2dzID0KLQkJKCh1OCAqKSBoaW9fbWdyLT5tc2df b3V0cHV0X2N0cmwgLSBoaW9fbWdyLT5tc2dfaW5wdXQpIC8KLQkJc2l6ZW9mKHN0cnVjdCBtc2df ZHNwbXNnKTsKLQotCWRldl9kYmcoYnJpZGdlLCAiSU8gTUdSIHNobSBkZXRhaWxzOiBzaGFyZWRf bWVtICVwLCBpbnB1dCAlcCwgIgotCQkib3V0cHV0ICVwLCBtc2dfaW5wdXRfY3RybCAlcCwgbXNn X2lucHV0ICVwLCAiCi0JCSJtc2dfb3V0cHV0X2N0cmwgJXAsIG1zZ19vdXRwdXQgJXBcbiIsCi0J CSh1OCAqKSBoaW9fbWdyLT5zaGFyZWRfbWVtLCBoaW9fbWdyLT5pbnB1dCwKLQkJaGlvX21nci0+ b3V0cHV0LCAodTggKikgaGlvX21nci0+bXNnX2lucHV0X2N0cmwsCi0JCWhpb19tZ3ItPm1zZ19p bnB1dCwgKHU4ICopIGhpb19tZ3ItPm1zZ19vdXRwdXRfY3RybCwKLQkJaGlvX21nci0+bXNnX291 dHB1dCk7Ci0JZGV2X2RiZyhicmlkZ2UsICIocHJvYykgTWFzIG1zZ3MgaW4gc2hhcmVkIG1lbW9y eTogMHgleFxuIiwKLQkJaG1zZ19tZ3ItPm1heF9tc2dzKTsKLQltZW1zZXQoKHZvaWQgKiloaW9f bWdyLT5zaGFyZWRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHNobSkpOwotCi0jaWYgZGVmaW5lZChD T05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFKQotCS8qIEdldCB0aGUgc3RhcnQgYWRkcmVzcyBv ZiB0cmFjZSBidWZmZXIgKi8KLQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBT WVNfUFVUQ0JFRywKLQkJCQkgICAmaGlvX21nci0+dHJhY2VfYnVmZmVyX2JlZ2luKTsKLQlpZiAo c3RhdHVzKQotCQlnb3RvIGZyZWVfZXByb2M7Ci0KLQloaW9fbWdyLT5ncHBfcmVhZF9wb2ludGVy ID0KLQkJaGlvX21nci0+dHJhY2VfYnVmZmVyX2JlZ2luID0KLQkJCSh2YSArIHNlZzFfc3ogKyBw YWRfc3opICsKLQkJCShoaW9fbWdyLT50cmFjZV9idWZmZXJfYmVnaW4gLSBkYSk7Ci0KLQkvKiBH ZXQgdGhlIGVuZCBhZGRyZXNzIG9mIHRyYWNlIGJ1ZmZlciAqLwotCXN0YXR1cyA9IGNvZF9nZXRf c3ltX3ZhbHVlKGNvZF9tYW4sIFNZU19QVVRDRU5ELAotCQkJCSAgICZoaW9fbWdyLT50cmFjZV9i dWZmZXJfZW5kKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZyZWVfZXByb2M7Ci0KLQloaW9fbWdy LT50cmFjZV9idWZmZXJfZW5kID0KLQkJKHZhICsgc2VnMV9zeiArIHBhZF9zeikgKwotCQkoaGlv X21nci0+dHJhY2VfYnVmZmVyX2VuZCAtIGRhKTsKLQotCS8qIEdldCB0aGUgY3VycmVudCBhZGRy ZXNzIG9mIERTUCB3cml0ZSBwb2ludGVyICovCi0Jc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUo Y29kX21hbiwgQlJJREdFX1NZU19QVVRDX0NVUlJFTlQsCi0JCQkJICAgJmhpb19tZ3ItPnRyYWNl X2J1ZmZlcl9jdXJyZW50KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZyZWVfZXByb2M7Ci0KLQlo aW9fbWdyLT50cmFjZV9idWZmZXJfY3VycmVudCA9Ci0JCSh2YSArIHNlZzFfc3ogKyBwYWRfc3op ICsKLQkJKGhpb19tZ3ItPnRyYWNlX2J1ZmZlcl9jdXJyZW50IC0gZGEpOwotCi0JLyogQ2FsY3Vs YXRlIHRoZSBzaXplIG9mIHRyYWNlIGJ1ZmZlciAqLwotCWtmcmVlKGhpb19tZ3ItPm1zZyk7Ci0J aGlvX21nci0+bXNnID0ga21hbGxvYygoKGhpb19tZ3ItPnRyYWNlX2J1ZmZlcl9lbmQgLQotCQkJ CWhpb19tZ3ItPnRyYWNlX2J1ZmZlcl9iZWdpbikgKgotCQkJCWhpb19tZ3ItPndvcmRfc2l6ZSkg KyAyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhpb19tZ3ItPm1zZykgewotCQlzdGF0dXMgPSAtRU5P TUVNOwotCQlnb3RvIGZyZWVfZXByb2M7Ci0JfQotCi0JaGlvX21nci0+ZHNwX3ZhID0gZGE7Ci0J aGlvX21nci0+Z3BwX3ZhID0gKHZhICsgc2VnMV9zeiArIHBhZF9zeik7Ci0jZW5kaWYKLQotZnJl ZV9lcHJvYzoKLQlrZnJlZShlcHJvYyk7Ci1mcmVlX3N5bWJvbDoKLQlrZnJlZShzKTsKLQotCXJl dHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gaW9fYnVmX3NpemUgPT09PT09PT0K LSAqICAgICAgU2l6ZSBvZiBzaGFyZWQgbWVtb3J5IEkvTyBjaGFubmVsLgotICovCi11MzIgaW9f YnVmX3NpemUoc3RydWN0IGlvX21nciAqaGlvX21ncikKLXsKLQlpZiAoaGlvX21ncikKLQkJcmV0 dXJuIGhpb19tZ3ItPnNtX2J1Zl9zaXplOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCi0g KiAgPT09PT09PT0gaW9fY2FuY2VsX2NobmwgPT09PT09PT0KLSAqICAgICAgQ2FuY2VsIElPIG9u IGEgZ2l2ZW4gUENQWSBjaGFubmVsLgotICovCi12b2lkIGlvX2NhbmNlbF9jaG5sKHN0cnVjdCBp b19tZ3IgKmhpb19tZ3IsIHUzMiBjaG5sKQotewotCXN0cnVjdCBpb19tZ3IgKnBpb19tZ3IgPSAo c3RydWN0IGlvX21nciAqKWhpb19tZ3I7Ci0Jc3RydWN0IHNobSAqc207Ci0KLQlpZiAoIWhpb19t Z3IpCi0JCWdvdG8gZnVuY19lbmQ7Ci0Jc20gPSBoaW9fbWdyLT5zaGFyZWRfbWVtOwotCi0JLyog SW5mb3JtIERTUCB0aGF0IHdlIGhhdmUgbm8gbW9yZSBidWZmZXJzIG9uIHRoaXMgY2hhbm5lbCAq LwotCXNldF9jaG5sX2ZyZWUoc20sIGNobmwpOwotCi0Jc21faW50ZXJydXB0X2RzcChwaW9fbWdy LT5icmlkZ2VfY29udGV4dCwgTUJYX1BDUFlfQ0xBU1MpOwotZnVuY19lbmQ6Ci0JcmV0dXJuOwot fQotCi0KLS8qCi0gKiAgPT09PT09PT0gaW9fZGlzcGF0Y2hfcG0gPT09PT09PT0KLSAqICAgICAg UGVyZm9ybXMgSS9PIGRpc3BhdGNoIG9uIFBNIHJlbGF0ZWQgbWVzc2FnZXMgZnJvbSBEU1AKLSAq Lwotc3RhdGljIHZvaWQgaW9fZGlzcGF0Y2hfcG0oc3RydWN0IGlvX21nciAqcGlvX21ncikKLXsK LQlpbnQgc3RhdHVzOwotCXUzMiBwYXJnWzJdOwotCi0JLyogUGVyZm9ybSBQb3dlciBtZXNzYWdl IHByb2Nlc3NpbmcgaGVyZSAqLwotCXBhcmdbMF0gPSBwaW9fbWdyLT5pbnRyX3ZhbDsKLQotCS8q IFNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIEJyaWRnZSBjbGsvcHdyIG1hbmFnZXIgdG8gaGFuZGxl ICovCi0JaWYgKHBhcmdbMF0gPT0gTUJYX1BNX0hJQkVSTkFURV9FTikgewotCQlkZXZfZGJnKGJy aWRnZSwgIlBNOiBIaWJlcm5hdGUgY29tbWFuZFxuIik7Ci0JCXN0YXR1cyA9IHBpb19tZ3ItPmlu dGZfZnhucy0+Ci0JCQkJZGV2X2NudHJsKHBpb19tZ3ItPmJyaWRnZV9jb250ZXh0LAotCQkJCQkg ICAgICBCUkRJT0NUTF9QV1JfSElCRVJOQVRFLCBwYXJnKTsKLQkJaWYgKHN0YXR1cykKLQkJCXBy X2VycigiJXM6IGhpYmVybmF0ZSBjbWQgZmFpbGVkIDB4JXhcbiIsCi0JCQkJICAgICAgIF9fZnVu Y19fLCBzdGF0dXMpOwotCX0gZWxzZSBpZiAocGFyZ1swXSA9PSBNQlhfUE1fT1BQX1JFUSkgewot CQlwYXJnWzFdID0gcGlvX21nci0+c2hhcmVkX21lbS0+b3BwX3JlcXVlc3QucnFzdF9vcHBfcHQ7 Ci0JCWRldl9kYmcoYnJpZGdlLCAiUE06IFJlcXVlc3RlZCBPUFAgPSAweCV4XG4iLCBwYXJnWzFd KTsKLQkJc3RhdHVzID0gcGlvX21nci0+aW50Zl9meG5zLT4KLQkJCQlkZXZfY250cmwocGlvX21n ci0+YnJpZGdlX2NvbnRleHQsCi0JCQkJCUJSRElPQ1RMX0NPTlNUUkFJTlRfUkVRVUVTVCwgcGFy Zyk7Ci0JCWlmIChzdGF0dXMpCi0JCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiBGYWlsZWQgdG8gc2V0 IGNvbnN0cmFpbnQgIgotCQkJCSI9IDB4JXhcbiIsIHBhcmdbMV0pOwotCX0gZWxzZSB7Ci0JCWRl dl9kYmcoYnJpZGdlLCAiUE06IGNsayBjb250cm9sIHZhbHVlIG9mIG1zZyA9IDB4JXhcbiIsCi0J CQlwYXJnWzBdKTsKLQkJc3RhdHVzID0gcGlvX21nci0+aW50Zl9meG5zLT4KLQkJCQlkZXZfY250 cmwocGlvX21nci0+YnJpZGdlX2NvbnRleHQsCi0JCQkJCSAgICAgIEJSRElPQ1RMX0NMS19DVFJM LCBwYXJnKTsKLQkJaWYgKHN0YXR1cykKLQkJCWRldl9kYmcoYnJpZGdlLCAiUE06IEZhaWxlZCB0 byBjdHJsIHRoZSBEU1AgY2xrIgotCQkJCSI9IDB4JXhcbiIsICpwYXJnKTsKLQl9Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gaW9fZHBjID09PT09PT09Ci0gKiAgICAgIERlZmVycmVkIHByb2NlZHVy ZSBjYWxsIGZvciBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyIElTUi4gIENhcnJpZXMKLSAq ICAgICAgb3V0IHRoZSBkaXNwYXRjaCBvZiBJL08gYXMgYSBub24tcHJlZW1wdGlibGUgZXZlbnQu IEl0IGNhbiBvbmx5IGJlCi0gKiAgICAgIHByZS1lbXB0ZWQgYnkgYW4gSVNSLgotICovCi12b2lk IGlvX2RwYyh1bnNpZ25lZCBsb25nIHJlZl9kYXRhKQotewotCXN0cnVjdCBpb19tZ3IgKnBpb19t Z3IgPSAoc3RydWN0IGlvX21nciAqKXJlZl9kYXRhOwotCXN0cnVjdCBjaG5sX21nciAqY2hubF9t Z3Jfb2JqOwotCXN0cnVjdCBtc2dfbWdyICptc2dfbWdyX29iajsKLQlzdHJ1Y3QgZGVoX21nciAq aGRlaF9tZ3I7Ci0JdTMyIHJlcXVlc3RlZDsKLQl1MzIgc2VydmljZWQ7Ci0KLQlpZiAoIXBpb19t Z3IpCi0JCWdvdG8gZnVuY19lbmQ7Ci0JY2hubF9tZ3Jfb2JqID0gcGlvX21nci0+Y2hubF9tZ3I7 Ci0JZGV2X2dldF9tc2dfbWdyKHBpb19tZ3ItPmRldl9vYmosICZtc2dfbWdyX29iaik7Ci0JZGV2 X2dldF9kZWhfbWdyKHBpb19tZ3ItPmRldl9vYmosICZoZGVoX21ncik7Ci0JaWYgKCFjaG5sX21n cl9vYmopCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQlyZXF1ZXN0ZWQgPSBwaW9fbWdyLT5kcGNfcmVx OwotCXNlcnZpY2VkID0gcGlvX21nci0+ZHBjX3NjaGVkOwotCi0JaWYgKHNlcnZpY2VkID09IHJl cXVlc3RlZCkKLQkJZ290byBmdW5jX2VuZDsKLQotCS8qIFByb2Nlc3MgcGVuZGluZyBEUEMncyAq LwotCWRvIHsKLQkJLyogQ2hlY2sgdmFsdWUgb2YgaW50ZXJydXB0IHJlZyB0byBlbnN1cmUgaXQn cyBhIHZhbGlkIGVycm9yICovCi0JCWlmICgocGlvX21nci0+aW50cl92YWwgPiBERUhfQkFTRSkg JiYKLQkJICAgIChwaW9fbWdyLT5pbnRyX3ZhbCA8IERFSF9MSU1JVCkpIHsKLQkJCS8qIE5vdGlm eSBEU1AvQklPUyBleGNlcHRpb24gKi8KLQkJCWlmIChoZGVoX21ncikgewotI2lmZGVmIENPTkZJ R19USURTUEJSSURHRV9CQUNLVFJBQ0UKLQkJCQlwcmludF9kc3BfZGVidWdfdHJhY2UocGlvX21n cik7Ci0jZW5kaWYKLQkJCQlicmlkZ2VfZGVoX25vdGlmeShoZGVoX21nciwgRFNQX1NZU0VSUk9S LAotCQkJCQkJICBwaW9fbWdyLT5pbnRyX3ZhbCk7Ci0JCQl9Ci0JCX0KLQkJLyogUHJvYy1jb3B5 IGNoYW5uZWwgZGlzcGF0Y2ggKi8KLQkJaW5wdXRfY2hubChwaW9fbWdyLCBOVUxMLCBJT19TRVJW SUNFKTsKLQkJb3V0cHV0X2NobmwocGlvX21nciwgTlVMTCwgSU9fU0VSVklDRSk7Ci0KLSNpZmRl ZiBDSE5MX01FU1NBR0VTCi0JCWlmIChtc2dfbWdyX29iaikgewotCQkJLyogUGVyZm9ybSBJL08g ZGlzcGF0Y2ggb24gbWVzc2FnZSBxdWV1ZXMgKi8KLQkJCWlucHV0X21zZyhwaW9fbWdyLCBtc2df bWdyX29iaik7Ci0JCQlvdXRwdXRfbXNnKHBpb19tZ3IsIG1zZ19tZ3Jfb2JqKTsKLQkJfQotCi0j ZW5kaWYKLSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCi0JCWlmIChwaW9fbWdy LT5pbnRyX3ZhbCAmIE1CWF9EQkdfU1lTUFJJTlRGKSB7Ci0JCQkvKiBOb3RpZnkgRFNQIFRyYWNl IG1lc3NhZ2UgKi8KLQkJCXByaW50X2RzcF9kZWJ1Z190cmFjZShwaW9fbWdyKTsKLQkJfQotI2Vu ZGlmCi0JCXNlcnZpY2VkKys7Ci0JfSB3aGlsZSAoc2VydmljZWQgIT0gcmVxdWVzdGVkKTsKLQlw aW9fbWdyLT5kcGNfc2NoZWQgPSByZXF1ZXN0ZWQ7Ci1mdW5jX2VuZDoKLQlyZXR1cm47Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gaW9fbWJveF9tc2cgPT09PT09PT0KLSAqICAgICAgTWFpbiBpbnRl cnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgSU8gbWFuYWdlci4KLSAqICAgICAg Q2FsbHMgdGhlIEJyaWRnZSdzIENITkxfSVNSIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVw dCBpcyBvdXJzLCB0aGVuCi0gKiAgICAgIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08u Ci0gKi8KLWludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2ln bmVkIGxvbmcgbGVuLCB2b2lkICptc2cpCi17Ci0Jc3RydWN0IGlvX21nciAqcGlvX21ncjsKLQlz dHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGV2 X29iaiA9IGRldl9nZXRfZmlyc3QoKTsKLQlkZXZfZ2V0X2lvX21ncihkZXZfb2JqLCAmcGlvX21n cik7Ci0KLQlpZiAoIXBpb19tZ3IpCi0JCXJldHVybiBOT1RJRllfQkFEOwotCi0JcGlvX21nci0+ aW50cl92YWwgPSAodTE2KSgodTMyKW1zZyk7Ci0JaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJY X1BNX0NMQVNTKQotCQlpb19kaXNwYXRjaF9wbShwaW9fbWdyKTsKLQotCWlmIChwaW9fbWdyLT5p bnRyX3ZhbCA9PSBNQlhfREVIX1JFU0VUKSB7Ci0JCXBpb19tZ3ItPmludHJfdmFsID0gMDsKLQl9 IGVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGlvX21nci0+ZHBjX2xvY2ssIGZsYWdzKTsK LQkJcGlvX21nci0+ZHBjX3JlcSsrOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW9fbWdy LT5kcGNfbG9jaywgZmxhZ3MpOwotCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW9fbWdyLT5kcGNfdGFz a2xldCk7Ci0JfQotCXJldHVybiBOT1RJRllfT0s7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gaW9f cmVxdWVzdF9jaG5sID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVxdWVzdCBjaGFu bmVsIEkvTyBmcm9tIHRoZSBEU1AuIFNldHMgZmxhZ3MgaW4gc2hhcmVkIG1lbW9yeSwgdGhlbgot ICogICAgICBpbnRlcnJ1cHRzIHRoZSBEU1AuCi0gKi8KLXZvaWQgaW9fcmVxdWVzdF9jaG5sKHN0 cnVjdCBpb19tZ3IgKmlvX21hbmFnZXIsIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCi0JCQl1 OCBpb19tb2RlLCB1MTYgKm1ieF92YWwpCi17Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9v Ymo7Ci0Jc3RydWN0IHNobSAqc207Ci0KLQlpZiAoIXBjaG5sIHx8ICFtYnhfdmFsKQotCQlnb3Rv IGZ1bmNfZW5kOwotCWNobmxfbWdyX29iaiA9IGlvX21hbmFnZXItPmNobmxfbWdyOwotCXNtID0g aW9fbWFuYWdlci0+c2hhcmVkX21lbTsKLQlpZiAoaW9fbW9kZSA9PSBJT19JTlBVVCkgewotCQkv KiBJbmRpY2F0ZSB0byB0aGUgRFNQIHdlIGhhdmUgYSBidWZmZXIgYXZhaWxhYmxlIGZvciBpbnB1 dCAqLwotCQlzZXRfY2hubF9idXN5KHNtLCBwY2hubC0+Y2hubF9pZCk7Ci0JCSptYnhfdmFsID0g TUJYX1BDUFlfQ0xBU1M7Ci0JfSBlbHNlIGlmIChpb19tb2RlID09IElPX09VVFBVVCkgewotCQkv KgotCQkgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGF2YWlsYWJsZSBm b3IKLQkJICogb3V0cHV0LgotCQkgKi8KLQkJY2hubF9tZ3Jfb2JqLT5vdXRwdXRfbWFzayB8PSAo MSA8PCBwY2hubC0+Y2hubF9pZCk7Ci0JfSBlbHNlIHsKLQl9Ci1mdW5jX2VuZDoKLQlyZXR1cm47 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gaW9zbV9zY2hlZHVsZSA9PT09PT09PQotICogICAgICBT Y2hlZHVsZSBEUEMgZm9yIElPLgotICovCi12b2lkIGlvc21fc2NoZWR1bGUoc3RydWN0IGlvX21n ciAqaW9fbWFuYWdlcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpb19tYW5h Z2VyKQotCQlyZXR1cm47Ci0KLQkvKiBJbmNyZW1lbnQgY291bnQgb2YgRFBDJ3MgcGVuZGluZy4g Ki8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fbWFuYWdlci0+ZHBjX2xvY2ssIGZsYWdzKTsKLQlp b19tYW5hZ2VyLT5kcGNfcmVxKys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fbWFuYWdl ci0+ZHBjX2xvY2ssIGZsYWdzKTsKLQotCS8qIFNjaGVkdWxlIERQQyAqLwotCXRhc2tsZXRfc2No ZWR1bGUoJmlvX21hbmFnZXItPmRwY190YXNrbGV0KTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBm aW5kX3JlYWR5X291dHB1dCA9PT09PT09PQotICogICAgICBTZWFyY2ggZm9yIGEgaG9zdCBvdXRw dXQgY2hhbm5lbCB3aGljaCBpcyByZWFkeSB0byBzZW5kLiAgSWYgdGhpcyBpcwotICogICAgICBj YWxsZWQgYXMgYSByZXN1bHQgb2Ygc2VydmljaW5nIHRoZSBEUEMsIHRoZW4gaW1wbGVtZW50IGEg cm91bmQKLSAqICAgICAgcm9iaW4gc2VhcmNoOyBvdGhlcndpc2UsIHRoaXMgd2FzIGNhbGxlZCBi eSBhIGNsaWVudCB0aHJlYWQgKHZpYQotICogICAgICBJT19EaXNwYXRjaCgpKSwgc28ganVzdCBz dGFydCBzZWFyY2hpbmcgZnJvbSB0aGUgY3VycmVudCBjaGFubmVsIGlkLgotICovCi1zdGF0aWMg dTMyIGZpbmRfcmVhZHlfb3V0cHV0KHN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqLAotCQkJ ICAgICBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLCB1MzIgbWFzaykKLXsKLQl1MzIgcmV0ID0g T1VUUFVUTk9UUkVBRFk7Ci0JdTMyIGlkLCBzdGFydF9pZDsKLQl1MzIgc2hpZnQ7Ci0KLQlpZCA9 IChwY2hubCAhPQotCSAgICAgIE5VTEwgPyBwY2hubC0+Y2hubF9pZCA6IChjaG5sX21ncl9vYmot Pmxhc3Rfb3V0cHV0ICsgMSkpOwotCWlkID0gKChpZCA9PSBDSE5MX01BWENIQU5ORUxTKSA/IDAg OiBpZCk7Ci0JaWYgKGlkID49IENITkxfTUFYQ0hBTk5FTFMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0J aWYgKG1hc2spIHsKLQkJc2hpZnQgPSAoMSA8PCBpZCk7Ci0JCXN0YXJ0X2lkID0gaWQ7Ci0JCWRv IHsKLQkJCWlmIChtYXNrICYgc2hpZnQpIHsKLQkJCQlyZXQgPSBpZDsKLQkJCQlpZiAocGNobmwg PT0gTlVMTCkKLQkJCQkJY2hubF9tZ3Jfb2JqLT5sYXN0X291dHB1dCA9IGlkOwotCQkJCWJyZWFr OwotCQkJfQotCQkJaWQgPSBpZCArIDE7Ci0JCQlpZCA9ICgoaWQgPT0gQ0hOTF9NQVhDSEFOTkVM UykgPyAwIDogaWQpOwotCQkJc2hpZnQgPSAoMSA8PCBpZCk7Ci0JCX0gd2hpbGUgKGlkICE9IHN0 YXJ0X2lkKTsKLQl9Ci1mdW5jX2VuZDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogID09PT09 PT09IGlucHV0X2NobmwgPT09PT09PT0KLSAqICAgICAgRGlzcGF0Y2ggYSBidWZmZXIgb24gYW4g aW5wdXQgY2hhbm5lbC4KLSAqLwotc3RhdGljIHZvaWQgaW5wdXRfY2hubChzdHJ1Y3QgaW9fbWdy ICpwaW9fbWdyLCBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAotCQkJdTggaW9fbW9kZSkKLXsK LQlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iajsKLQlzdHJ1Y3Qgc2htICpzbTsKLQl1MzIg Y2hubF9pZDsKLQl1MzIgYnl0ZXM7Ci0Jc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmog PSBOVUxMOwotCXUzMiBkd19hcmc7Ci0JYm9vbCBjbGVhcl9jaG5sID0gZmFsc2U7Ci0JYm9vbCBu b3RpZnlfY2xpZW50ID0gZmFsc2U7Ci0KLQlzbSA9IHBpb19tZ3ItPnNoYXJlZF9tZW07Ci0JY2hu bF9tZ3Jfb2JqID0gcGlvX21nci0+Y2hubF9tZ3I7Ci0KLQkvKiBBdHRlbXB0IHRvIHBlcmZvcm0g aW5wdXQgKi8KLQlpZiAoIXNtLT5pbnB1dF9mdWxsKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JYnl0 ZXMgPSBzbS0+aW5wdXRfc2l6ZSAqIGNobmxfbWdyX29iai0+d29yZF9zaXplOwotCWNobmxfaWQg PSBzbS0+aW5wdXRfaWQ7Ci0JZHdfYXJnID0gc20tPmFyZzsKLQlpZiAoY2hubF9pZCA+PSBDSE5M X01BWENIQU5ORUxTKSB7Ci0JCS8qIFNob3VsZG4ndCBiZSBoZXJlOiB3b3VsZCBpbmRpY2F0ZSBj b3JydXB0ZWQgc2htLiAqLwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQlwY2hubCA9IGNobmxfbWdy X29iai0+Y2hhbm5lbHNbY2hubF9pZF07Ci0JaWYgKChwY2hubCAhPSBOVUxMKSAmJiBDSE5MX0lT X0lOUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7Ci0JCWlmICgocGNobmwtPnN0YXRlICYgfkNITkxf U1RBVEVFT1MpID09IENITkxfU1RBVEVSRUFEWSkgewotCQkJLyogR2V0IHRoZSBJL08gcmVxdWVz dCwgYW5kIGF0dGVtcHQgYSB0cmFuc2ZlciAqLwotCQkJaWYgKCFsaXN0X2VtcHR5KCZwY2hubC0+ aW9fcmVxdWVzdHMpKSB7Ci0JCQkJaWYgKCFwY2hubC0+Y2lvX3JlcXMpCi0JCQkJCWdvdG8gZnVu Y19lbmQ7Ci0KLQkJCQljaG5sX3BhY2tldF9vYmogPSBsaXN0X2ZpcnN0X2VudHJ5KAotCQkJCQkJ JnBjaG5sLT5pb19yZXF1ZXN0cywKLQkJCQkJCXN0cnVjdCBjaG5sX2lycCwgbGluayk7Ci0JCQkJ bGlzdF9kZWwoJmNobmxfcGFja2V0X29iai0+bGluayk7Ci0JCQkJcGNobmwtPmNpb19yZXFzLS07 Ci0KLQkJCQkvKgotCQkJCSAqIEVuc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgY2xpZW50J3MK LQkJCQkgKiBidWZmZXIuCi0JCQkJICovCi0JCQkJYnl0ZXMgPSBtaW4oYnl0ZXMsIGNobmxfcGFj a2V0X29iai0+Ynl0ZV9zaXplKTsKLQkJCQltZW1jcHkoY2hubF9wYWNrZXRfb2JqLT5ob3N0X3N5 c19idWYsCi0JCQkJCQlwaW9fbWdyLT5pbnB1dCwgYnl0ZXMpOwotCQkJCXBjaG5sLT5ieXRlc19t b3ZlZCArPSBieXRlczsKLQkJCQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IGJ5dGVzOwot CQkJCWNobmxfcGFja2V0X29iai0+YXJnID0gZHdfYXJnOwotCQkJCWNobmxfcGFja2V0X29iai0+ c3RhdHVzID0gQ0hOTF9JT0NTVEFUQ09NUExFVEU7Ci0KLQkJCQlpZiAoYnl0ZXMgPT0gMCkgewot CQkJCQkvKgotCQkJCQkgKiBUaGlzIGFzc2VydGlvbiBmYWlscyBpZiB0aGUgRFNQCi0JCQkJCSAq IHNlbmRzIEVPUyBtb3JlIHRoYW4gb25jZSBvbiB0aGlzCi0JCQkJCSAqIGNoYW5uZWwuCi0JCQkJ CSAqLwotCQkJCQlpZiAocGNobmwtPnN0YXRlICYgQ0hOTF9TVEFURUVPUykKLQkJCQkJCWdvdG8g ZnVuY19lbmQ7Ci0JCQkJCS8qCi0JCQkJCSAqIFplcm8gYnl0ZXMgaW5kaWNhdGVzIEVPUy4gVXBk YXRlCi0JCQkJCSAqIElPQyBzdGF0dXMgZm9yIHRoaXMgY2hpcnAsIGFuZCBhbHNvCi0JCQkJCSAq IHRoZSBjaGFubmVsIHN0YXRlLgotCQkJCQkgKi8KLQkJCQkJY2hubF9wYWNrZXRfb2JqLT5zdGF0 dXMgfD0KLQkJCQkJCUNITkxfSU9DU1RBVEVPUzsKLQkJCQkJcGNobmwtPnN0YXRlIHw9IENITkxf U1RBVEVFT1M7Ci0JCQkJCS8qCi0JCQkJCSAqIE5vdGlmeSB0aGF0IGVuZCBvZiBzdHJlYW0gaGFz Ci0JCQkJCSAqIG9jY3VycmVkLgotCQkJCQkgKi8KLQkJCQkJbnRmeV9ub3RpZnkocGNobmwtPm50 Znlfb2JqLAotCQkJCQkJCURTUF9TVFJFQU1ET05FKTsKLQkJCQl9Ci0JCQkJLyogVGVsbCBEU1Ag aWYgbm8gbW9yZSBJL08gYnVmZmVycyBhdmFpbGFibGUgKi8KLQkJCQlpZiAobGlzdF9lbXB0eSgm cGNobmwtPmlvX3JlcXVlc3RzKSkKLQkJCQkJc2V0X2NobmxfZnJlZShzbSwgcGNobmwtPmNobmxf aWQpOwotCQkJCWNsZWFyX2NobmwgPSB0cnVlOwotCQkJCW5vdGlmeV9jbGllbnQgPSB0cnVlOwot CQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElucHV0IGZ1bGwgZm9yIHRoaXMgY2hhbm5lbCwg YnV0IHdlIGhhdmUgbm8KLQkJCQkgKiBidWZmZXJzIGF2YWlsYWJsZS4gIFRoZSBjaGFubmVsIG11 c3QgYmUKLQkJCQkgKiAiaWRsaW5nIi4gQ2xlYXIgb3V0IHRoZSBwaHlzaWNhbCBpbnB1dAotCQkJ CSAqIGNoYW5uZWwuCi0JCQkJICovCi0JCQkJY2xlYXJfY2hubCA9IHRydWU7Ci0JCQl9Ci0JCX0g ZWxzZSB7Ci0JCQkvKiBJbnB1dCBjaGFubmVsIGNhbmNlbGxlZDogY2xlYXIgaW5wdXQgY2hhbm5l bCAqLwotCQkJY2xlYXJfY2hubCA9IHRydWU7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBEUEMgZmly ZWQgYWZ0ZXIgaG9zdCBjbG9zZWQgY2hhbm5lbDogY2xlYXIgaW5wdXQgY2hhbm5lbCAqLwotCQlj bGVhcl9jaG5sID0gdHJ1ZTsKLQl9Ci0JaWYgKGNsZWFyX2NobmwpIHsKLQkJLyogSW5kaWNhdGUg dG8gdGhlIERTUCB3ZSBoYXZlIHJlYWQgdGhlIGlucHV0ICovCi0JCXNtLT5pbnB1dF9mdWxsID0g MDsKLQkJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5icmlkZ2VfY29udGV4dCwgTUJYX1BDUFlf Q0xBU1MpOwotCX0KLQlpZiAobm90aWZ5X2NsaWVudCkgewotCQkvKiBOb3RpZnkgY2xpZW50IHdp dGggSU8gY29tcGxldGlvbiByZWNvcmQgKi8KLQkJbm90aWZ5X2NobmxfY29tcGxldGUocGNobmws IGNobmxfcGFja2V0X29iaik7Ci0JfQotZnVuY19lbmQ6Ci0JcmV0dXJuOwotfQotCi0vKgotICog ID09PT09PT09IGlucHV0X21zZyA9PT09PT09PQotICogICAgICBDb3BpZXMgbWVzc2FnZXMgZnJv bSBzaGFyZWQgbWVtb3J5IHRvIHRoZSBtZXNzYWdlIHF1ZXVlcy4KLSAqLwotc3RhdGljIHZvaWQg aW5wdXRfbXNnKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21n cikKLXsKLQl1MzIgbnVtX21zZ3M7Ci0JdTMyIGk7Ci0JdTggKm1zZ19pbnB1dDsKLQlzdHJ1Y3Qg bXNnX3F1ZXVlICptc2dfcXVldWVfb2JqOwotCXN0cnVjdCBtc2dfZnJhbWUgKnBtc2c7Ci0Jc3Ry dWN0IG1zZ19kc3Btc2cgbXNnOwotCXN0cnVjdCBtc2dfY3RybCAqbXNnX2N0cl9vYmo7Ci0JdTMy IGlucHV0X2VtcHR5OwotCXUzMiBhZGRyOwotCi0JbXNnX2N0cl9vYmogPSBwaW9fbWdyLT5tc2df aW5wdXRfY3RybDsKLQkvKiBHZXQgdGhlIG51bWJlciBvZiBpbnB1dCBtZXNzYWdlcyB0byBiZSBy ZWFkICovCi0JaW5wdXRfZW1wdHkgPSBtc2dfY3RyX29iai0+YnVmX2VtcHR5OwotCW51bV9tc2dz ID0gbXNnX2N0cl9vYmotPnNpemU7Ci0JaWYgKGlucHV0X2VtcHR5KQotCQlyZXR1cm47Ci0KLQlt c2dfaW5wdXQgPSBwaW9fbWdyLT5tc2dfaW5wdXQ7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9tc2dz OyBpKyspIHsKLQkJLyogUmVhZCB0aGUgbmV4dCBtZXNzYWdlICovCi0JCWFkZHIgPSAodTMyKSAm KCgoc3RydWN0IG1zZ19kc3Btc2cgKiltc2dfaW5wdXQpLT5tc2cuY21kKTsKLQkJbXNnLm1zZy5j bWQgPQotCQkJcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+YnJpZGdlX2NvbnRleHQs IGFkZHIpOwotCQlhZGRyID0gKHUzMikgJigoKHN0cnVjdCBtc2dfZHNwbXNnICopbXNnX2lucHV0 KS0+bXNnLmFyZzEpOwotCQltc2cubXNnLmFyZzEgPQotCQkJcmVhZF9leHQzMl9iaXRfZHNwX2Rh dGEocGlvX21nci0+YnJpZGdlX2NvbnRleHQsIGFkZHIpOwotCQlhZGRyID0gKHUzMikgJigoKHN0 cnVjdCBtc2dfZHNwbXNnICopbXNnX2lucHV0KS0+bXNnLmFyZzIpOwotCQltc2cubXNnLmFyZzIg PQotCQkJcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+YnJpZGdlX2NvbnRleHQsIGFk ZHIpOwotCQlhZGRyID0gKHUzMikgJigoKHN0cnVjdCBtc2dfZHNwbXNnICopbXNnX2lucHV0KS0+ bXNncV9pZCk7Ci0JCW1zZy5tc2dxX2lkID0KLQkJCXJlYWRfZXh0MzJfYml0X2RzcF9kYXRhKHBp b19tZ3ItPmJyaWRnZV9jb250ZXh0LCBhZGRyKTsKLQkJbXNnX2lucHV0ICs9IHNpemVvZihzdHJ1 Y3QgbXNnX2RzcG1zZyk7Ci0KLQkJLyogRGV0ZXJtaW5lIHdoaWNoIHF1ZXVlIHRvIHB1dCB0aGUg bWVzc2FnZSBpbiAqLwotCQlkZXZfZGJnKGJyaWRnZSwJImlucHV0IG1zZzogY21kPTB4JXggYXJn MT0weCV4ICIKLQkJCQkiYXJnMj0weCV4IG1zZ3FfaWQ9MHgleFxuIiwgbXNnLm1zZy5jbWQsCi0J CQkJbXNnLm1zZy5hcmcxLCBtc2cubXNnLmFyZzIsIG1zZy5tc2dxX2lkKTsKLQkJLyoKLQkJICog SW50ZXJydXB0IG1heSBvY2N1ciBiZWZvcmUgc2hhcmVkIG1lbW9yeSBhbmQgbWVzc2FnZQotCQkg KiBpbnB1dCBsb2NhdGlvbnMgaGF2ZSBiZWVuIHNldCB1cC4gSWYgYWxsIG5vZGVzIHdlcmUKLQkJ ICogY2xlYW5lZCB1cCwgaG1zZ19tZ3ItPm1heF9tc2dzIHNob3VsZCBiZSAwLgotCQkgKi8KLQkJ bGlzdF9mb3JfZWFjaF9lbnRyeShtc2dfcXVldWVfb2JqLCAmaG1zZ19tZ3ItPnF1ZXVlX2xpc3Qs Ci0JCQkJbGlzdF9lbGVtKSB7Ci0JCQlpZiAobXNnLm1zZ3FfaWQgIT0gbXNnX3F1ZXVlX29iai0+ bXNncV9pZCkKLQkJCQljb250aW51ZTsKLQkJCS8qIEZvdW5kIGl0ICovCi0JCQlpZiAobXNnLm1z Zy5jbWQgPT0gUk1TX0VYSVRBQ0spIHsKLQkJCQkvKgotCQkJCSAqIENhbGwgdGhlIG5vZGUgZXhp dCBub3RpZmljYXRpb24uCi0JCQkJICogVGhlIGV4aXQgbWVzc2FnZSBkb2VzIG5vdCBnZXQKLQkJ CQkgKiBxdWV1ZWQuCi0JCQkJICovCi0JCQkJKCpobXNnX21nci0+b25fZXhpdCkobXNnX3F1ZXVl X29iai0+YXJnLAotCQkJCQkJbXNnLm1zZy5hcmcxKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8q Ci0JCQkgKiBOb3QgYW4gZXhpdCBhY2tub3dsZWRnZW1lbnQsIHF1ZXVlCi0JCQkgKiB0aGUgbWVz c2FnZS4KLQkJCSAqLwotCQkJaWYgKGxpc3RfZW1wdHkoJm1zZ19xdWV1ZV9vYmotPm1zZ19mcmVl X2xpc3QpKSB7Ci0JCQkJLyoKLQkJCQkgKiBObyBmcmVlIGZyYW1lIHRvIGNvcHkgdGhlCi0JCQkJ ICogbWVzc2FnZSBpbnRvLgotCQkJCSAqLwotCQkJCXByX2VycigiJXM6IG5vIGZyZWUgbXNnIGZy YW1lcywiCi0JCQkJCQkiIGRpc2NhcmRpbmcgbXNnXG4iLAotCQkJCQkJX19mdW5jX18pOwotCQkJ CWJyZWFrOwotCQkJfQotCi0JCQlwbXNnID0gbGlzdF9maXJzdF9lbnRyeSgmbXNnX3F1ZXVlX29i ai0+bXNnX2ZyZWVfbGlzdCwKLQkJCQkJc3RydWN0IG1zZ19mcmFtZSwgbGlzdF9lbGVtKTsKLQkJ CWxpc3RfZGVsKCZwbXNnLT5saXN0X2VsZW0pOwotCQkJcG1zZy0+bXNnX2RhdGEgPSBtc2c7Ci0J CQlsaXN0X2FkZF90YWlsKCZwbXNnLT5saXN0X2VsZW0sCi0JCQkJCSZtc2dfcXVldWVfb2JqLT5t c2dfdXNlZF9saXN0KTsKLQkJCW50Znlfbm90aWZ5KG1zZ19xdWV1ZV9vYmotPm50Znlfb2JqLAot CQkJCQlEU1BfTk9ERU1FU1NBR0VSRUFEWSk7Ci0JCQlzeW5jX3NldF9ldmVudChtc2dfcXVldWVf b2JqLT5zeW5jX2V2ZW50KTsKLQkJfQotCX0KLQkvKiBTZXQgdGhlIHBvc3QgU1dJIGZsYWcgKi8K LQlpZiAobnVtX21zZ3MgPiAwKSB7Ci0JCS8qIFRlbGwgdGhlIERTUCB3ZSd2ZSByZWFkIHRoZSBt ZXNzYWdlcyAqLwotCQltc2dfY3RyX29iai0+YnVmX2VtcHR5ID0gdHJ1ZTsKLQkJbXNnX2N0cl9v YmotPnBvc3Rfc3dpID0gdHJ1ZTsKLQkJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5icmlkZ2Vf Y29udGV4dCwgTUJYX1BDUFlfQ0xBU1MpOwotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBub3Rp ZnlfY2hubF9jb21wbGV0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNpZ25hbCB0 aGUgY2hhbm5lbCBldmVudCwgbm90aWZ5aW5nIHRoZSBjbGllbnQgdGhhdCBJL08gaGFzIGNvbXBs ZXRlZC4KLSAqLwotc3RhdGljIHZvaWQgbm90aWZ5X2NobmxfY29tcGxldGUoc3RydWN0IGNobmxf b2JqZWN0ICpwY2hubCwKLQkJCQkgc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmopCi17 Ci0JYm9vbCBzaWduYWxfZXZlbnQ7Ci0KLQlpZiAoIXBjaG5sIHx8ICFwY2hubC0+c3luY19ldmVu dCB8fCAhY2hubF9wYWNrZXRfb2JqKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyoKLQkgKiBOb3Rl OiB3ZSBzaWduYWwgdGhlIGNoYW5uZWwgZXZlbnQgb25seSBpZiB0aGUgcXVldWUgb2YgSU8KLQkg KiBjb21wbGV0aW9ucyBpcyBlbXB0eS4gIElmIGl0IGlzIG5vdCBlbXB0eSwgdGhlIGV2ZW50IGlz IHN1cmUgdG8gYmUKLQkgKiBzaWduYWxsZWQgYnkgdGhlIG9ubHkgSU8gY29tcGxldGlvbiBsaXN0 IGNvbnN1bWVyOgotCSAqIGJyaWRnZV9jaG5sX2dldF9pb2MoKS4KLQkgKi8KLQlzaWduYWxfZXZl bnQgPSBsaXN0X2VtcHR5KCZwY2hubC0+aW9fY29tcGxldGlvbnMpOwotCS8qIEVucXVldWUgdGhl IElPIGNvbXBsZXRpb24gaW5mbyBmb3IgdGhlIGNsaWVudCAqLwotCWxpc3RfYWRkX3RhaWwoJmNo bmxfcGFja2V0X29iai0+bGluaywgJnBjaG5sLT5pb19jb21wbGV0aW9ucyk7Ci0JcGNobmwtPmNp b19jcysrOwotCi0JaWYgKHBjaG5sLT5jaW9fY3MgPiBwY2hubC0+Y2hubF9wYWNrZXRzKQotCQln b3RvIGZ1bmNfZW5kOwotCS8qIFNpZ25hbCB0aGUgY2hhbm5lbCBldmVudCAoaWYgbm90IGFscmVh ZHkgc2V0KSB0aGF0IElPIGlzIGNvbXBsZXRlICovCi0JaWYgKHNpZ25hbF9ldmVudCkKLQkJc3lu Y19zZXRfZXZlbnQocGNobmwtPnN5bmNfZXZlbnQpOwotCi0JLyogTm90aWZ5IHRoYXQgSU8gaXMg Y29tcGxldGUgKi8KLQludGZ5X25vdGlmeShwY2hubC0+bnRmeV9vYmosIERTUF9TVFJFQU1JT0NP TVBMRVRJT04pOwotZnVuY19lbmQ6Ci0JcmV0dXJuOwotfQotCi0vKgotICogID09PT09PT09IG91 dHB1dF9jaG5sID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRGlzcGF0Y2ggYSBidWZm ZXIgb24gYW4gb3V0cHV0IGNoYW5uZWwuCi0gKi8KLXN0YXRpYyB2b2lkIG91dHB1dF9jaG5sKHN0 cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCi0JCQl1OCBp b19tb2RlKQotewotCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOwotCXN0cnVjdCBzaG0g KnNtOwotCXUzMiBjaG5sX2lkOwotCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqOwot CXUzMiBkd19kc3BfZl9tYXNrOwotCi0JY2hubF9tZ3Jfb2JqID0gcGlvX21nci0+Y2hubF9tZ3I7 Ci0Jc20gPSBwaW9fbWdyLT5zaGFyZWRfbWVtOwotCS8qIEF0dGVtcHQgdG8gcGVyZm9ybSBvdXRw dXQgKi8KLQlpZiAoc20tPm91dHB1dF9mdWxsKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JaWYgKHBj aG5sICYmICEoKHBjaG5sLT5zdGF0ZSAmIH5DSE5MX1NUQVRFRU9TKSA9PSBDSE5MX1NUQVRFUkVB RFkpKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyogTG9vayB0byBzZWUgaWYgYm90aCBhIFBDIGFu ZCBEU1Agb3V0cHV0IGNoYW5uZWwgYXJlIHJlYWR5ICovCi0JZHdfZHNwX2ZfbWFzayA9IHNtLT5k c3BfZnJlZV9tYXNrOwotCWNobmxfaWQgPQotCSAgICBmaW5kX3JlYWR5X291dHB1dChjaG5sX21n cl9vYmosIHBjaG5sLAotCQkJICAgICAgKGNobmxfbWdyX29iai0+b3V0cHV0X21hc2sgJiBkd19k c3BfZl9tYXNrKSk7Ci0JaWYgKGNobmxfaWQgPT0gT1VUUFVUTk9UUkVBRFkpCi0JCWdvdG8gZnVu Y19lbmQ7Ci0KLQlwY2hubCA9IGNobmxfbWdyX29iai0+Y2hhbm5lbHNbY2hubF9pZF07Ci0JaWYg KCFwY2hubCB8fCBsaXN0X2VtcHR5KCZwY2hubC0+aW9fcmVxdWVzdHMpKSB7Ci0JCS8qIFNob3Vs ZG4ndCBnZXQgaGVyZSAqLwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCWlmICghcGNobmwtPmNp b19yZXFzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyogR2V0IHRoZSBJL08gcmVxdWVzdCwgYW5k IGF0dGVtcHQgYSB0cmFuc2ZlciAqLwotCWNobmxfcGFja2V0X29iaiA9IGxpc3RfZmlyc3RfZW50 cnkoJnBjaG5sLT5pb19yZXF1ZXN0cywKLQkJCXN0cnVjdCBjaG5sX2lycCwgbGluayk7Ci0JbGlz dF9kZWwoJmNobmxfcGFja2V0X29iai0+bGluayk7Ci0KLQlwY2hubC0+Y2lvX3JlcXMtLTsKLQot CS8qIFJlY29yZCBmYWN0IHRoYXQgbm8gbW9yZSBJL08gYnVmZmVycyBhdmFpbGFibGUgKi8KLQlp ZiAobGlzdF9lbXB0eSgmcGNobmwtPmlvX3JlcXVlc3RzKSkKLQkJY2hubF9tZ3Jfb2JqLT5vdXRw dXRfbWFzayAmPSB+KDEgPDwgY2hubF9pZCk7Ci0KLQkvKiBUcmFuc2ZlciBidWZmZXIgdG8gRFNQ IHNpZGUgKi8KLQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IG1pbihwaW9fbWdyLT5zbV9i dWZfc2l6ZSwKLQkJCQkJY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUpOwotCW1lbWNweShwaW9f bWdyLT5vdXRwdXQsCWNobmxfcGFja2V0X29iai0+aG9zdF9zeXNfYnVmLAotCQkJCQljaG5sX3Bh Y2tldF9vYmotPmJ5dGVfc2l6ZSk7Ci0JcGNobmwtPmJ5dGVzX21vdmVkICs9IGNobmxfcGFja2V0 X29iai0+Ynl0ZV9zaXplOwotCS8qIFdyaXRlIGFsbCAzMiBiaXRzIG9mIGFyZyAqLwotCXNtLT5h cmcgPSBjaG5sX3BhY2tldF9vYmotPmFyZzsKLSNpZiBfQ0hOTF9XT1JEU0laRSA9PSAyCi0JLyog QWNjZXNzIGNhbiBiZSBkaWZmZXJlbnQgU00gYWNjZXNzIHdvcmQgc2l6ZSAoZS5nLiAxNi8zMiBi aXQgd29yZHMpICovCi0Jc20tPm91dHB1dF9pZCA9ICh1MTYpIGNobmxfaWQ7Ci0Jc20tPm91dHB1 dF9zaXplID0gKHUxNikgKGNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplICsKLQkJCQljaG5sX21n cl9vYmotPndvcmRfc2l6ZSAtIDEpIC8KLQkJCQkodTE2KSBjaG5sX21ncl9vYmotPndvcmRfc2l6 ZTsKLSNlbHNlCi0Jc20tPm91dHB1dF9pZCA9IGNobmxfaWQ7Ci0Jc20tPm91dHB1dF9zaXplID0g KGNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplICsKLQkJCWNobmxfbWdyX29iai0+d29yZF9zaXpl IC0gMSkgLyBjaG5sX21ncl9vYmotPndvcmRfc2l6ZTsKLSNlbmRpZgotCXNtLT5vdXRwdXRfZnVs bCA9ICAxOwotCS8qIEluZGljYXRlIHRvIHRoZSBEU1Agd2UgaGF2ZSB3cml0dGVuIHRoZSBvdXRw dXQgKi8KLQlzbV9pbnRlcnJ1cHRfZHNwKHBpb19tZ3ItPmJyaWRnZV9jb250ZXh0LCBNQlhfUENQ WV9DTEFTUyk7Ci0JLyogTm90aWZ5IGNsaWVudCB3aXRoIElPIGNvbXBsZXRpb24gcmVjb3JkIChr ZWVwIEVPUykgKi8KLQljaG5sX3BhY2tldF9vYmotPnN0YXR1cyAmPSBDSE5MX0lPQ1NUQVRFT1M7 Ci0Jbm90aWZ5X2NobmxfY29tcGxldGUocGNobmwsIGNobmxfcGFja2V0X29iaik7Ci0JLyogTm90 aWZ5IGlmIHN0cmVhbSBpcyBkb25lLiAqLwotCWlmIChjaG5sX3BhY2tldF9vYmotPnN0YXR1cyAm IENITkxfSU9DU1RBVEVPUykKLQkJbnRmeV9ub3RpZnkocGNobmwtPm50Znlfb2JqLCBEU1BfU1RS RUFNRE9ORSk7Ci0KLWZ1bmNfZW5kOgotCXJldHVybjsKLX0KLQotLyoKLSAqICA9PT09PT09PSBv dXRwdXRfbXNnID09PT09PT09Ci0gKiAgICAgIENvcGllcyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNz YWdlIHF1ZXVlcyB0byB0aGUgc2hhcmVkIG1lbW9yeS4KLSAqLwotc3RhdGljIHZvaWQgb3V0cHV0 X21zZyhzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCi17 Ci0JdTMyIG51bV9tc2dzID0gMDsKLQl1MzIgaTsKLQlzdHJ1Y3QgbXNnX2RzcG1zZyAqbXNnX291 dHB1dDsKLQlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOwotCXN0cnVjdCBtc2dfY3RybCAqbXNnX2N0 cl9vYmo7Ci0JdTMyIHZhbDsKLQl1MzIgYWRkcjsKLQotCW1zZ19jdHJfb2JqID0gcGlvX21nci0+ bXNnX291dHB1dF9jdHJsOwotCi0JLyogQ2hlY2sgaWYgb3V0cHV0IGhhcyBiZWVuIGNsZWFyZWQg Ki8KLQlpZiAoIW1zZ19jdHJfb2JqLT5idWZfZW1wdHkpCi0JCXJldHVybjsKLQotCW51bV9tc2dz ID0gKGhtc2dfbWdyLT5tc2dzX3BlbmRpbmcgPiBobXNnX21nci0+bWF4X21zZ3MpID8KLQkJaG1z Z19tZ3ItPm1heF9tc2dzIDogaG1zZ19tZ3ItPm1zZ3NfcGVuZGluZzsKLQltc2dfb3V0cHV0ID0g KHN0cnVjdCBtc2dfZHNwbXNnICopIHBpb19tZ3ItPm1zZ19vdXRwdXQ7Ci0KLQkvKiBDb3B5IG51 bV9tc2dzIG1lc3NhZ2VzIGludG8gc2hhcmVkIG1lbW9yeSAqLwotCWZvciAoaSA9IDA7IGkgPCBu dW1fbXNnczsgaSsrKSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZobXNnX21nci0+bXNnX3VzZWRfbGlz dCkpCi0JCQljb250aW51ZTsKLQotCQlwbXNnID0gbGlzdF9maXJzdF9lbnRyeSgmaG1zZ19tZ3It Pm1zZ191c2VkX2xpc3QsCi0JCQkJc3RydWN0IG1zZ19mcmFtZSwgbGlzdF9lbGVtKTsKLQkJbGlz dF9kZWwoJnBtc2ctPmxpc3RfZWxlbSk7Ci0KLQkJdmFsID0gKHBtc2ctPm1zZ19kYXRhKS5tc2dx X2lkOwotCQlhZGRyID0gKHUzMikgJm1zZ19vdXRwdXQtPm1zZ3FfaWQ7Ci0JCXdyaXRlX2V4dDMy X2JpdF9kc3BfZGF0YShwaW9fbWdyLT5icmlkZ2VfY29udGV4dCwgYWRkciwgdmFsKTsKLQotCQl2 YWwgPSAocG1zZy0+bXNnX2RhdGEpLm1zZy5jbWQ7Ci0JCWFkZHIgPSAodTMyKSAmbXNnX291dHB1 dC0+bXNnLmNtZDsKLQkJd3JpdGVfZXh0MzJfYml0X2RzcF9kYXRhKHBpb19tZ3ItPmJyaWRnZV9j b250ZXh0LCBhZGRyLCB2YWwpOwotCi0JCXZhbCA9IChwbXNnLT5tc2dfZGF0YSkubXNnLmFyZzE7 Ci0JCWFkZHIgPSAodTMyKSAmbXNnX291dHB1dC0+bXNnLmFyZzE7Ci0JCXdyaXRlX2V4dDMyX2Jp dF9kc3BfZGF0YShwaW9fbWdyLT5icmlkZ2VfY29udGV4dCwgYWRkciwgdmFsKTsKLQotCQl2YWwg PSAocG1zZy0+bXNnX2RhdGEpLm1zZy5hcmcyOwotCQlhZGRyID0gKHUzMikgJm1zZ19vdXRwdXQt Pm1zZy5hcmcyOwotCQl3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+YnJpZGdlX2Nv bnRleHQsIGFkZHIsIHZhbCk7Ci0KLQkJbXNnX291dHB1dCsrOwotCQlsaXN0X2FkZF90YWlsKCZw bXNnLT5saXN0X2VsZW0sICZobXNnX21nci0+bXNnX2ZyZWVfbGlzdCk7Ci0JCXN5bmNfc2V0X2V2 ZW50KGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKLQl9Ci0KLQlpZiAobnVtX21zZ3MgPiAwKSB7Ci0J CWhtc2dfbWdyLT5tc2dzX3BlbmRpbmcgLT0gbnVtX21zZ3M7Ci0jaWYgX0NITkxfV09SRFNJWkUg PT0gMgotCQkvKgotCQkgKiBBY2Nlc3MgY2FuIGJlIGRpZmZlcmVudCBTTSBhY2Nlc3Mgd29yZCBz aXplCi0JCSAqIChlLmcuIDE2LzMyIGJpdCB3b3JkcykKLQkJICovCi0JCW1zZ19jdHJfb2JqLT5z aXplID0gKHUxNikgbnVtX21zZ3M7Ci0jZWxzZQotCQltc2dfY3RyX29iai0+c2l6ZSA9IG51bV9t c2dzOwotI2VuZGlmCi0JCW1zZ19jdHJfb2JqLT5idWZfZW1wdHkgPSBmYWxzZTsKLQkJLyogU2V0 IHRoZSBwb3N0IFNXSSBmbGFnICovCi0JCW1zZ19jdHJfb2JqLT5wb3N0X3N3aSA9IHRydWU7Ci0J CS8qIFRlbGwgdGhlIERTUCB3ZSBoYXZlIHdyaXR0ZW4gdGhlIG91dHB1dC4gKi8KLQkJc21faW50 ZXJydXB0X2RzcChwaW9fbWdyLT5icmlkZ2VfY29udGV4dCwgTUJYX1BDUFlfQ0xBU1MpOwotCX0K LX0KLQotLyoKLSAqICA9PT09PT09PSByZWdpc3Rlcl9zaG1fc2VncyA9PT09PT09PQotICogIHB1 cnBvc2U6Ci0gKiAgICAgIFJlZ2lzdGVycyBHUFAgU00gc2VnbWVudCB3aXRoIENNTS4KLSAqLwot c3RhdGljIGludCByZWdpc3Rlcl9zaG1fc2VncyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAotCQkJ CSAgICBzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tYW4sCi0JCQkJICAgIHUzMiBkd19ncHBfYmFz ZV9wYSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgdWxfc2htMF9iYXNlID0gMDsKLQl1MzIg c2htMF9lbmQgPSAwOwotCXUzMiB1bF9zaG0wX3JzcnZkX3N0YXJ0ID0gMDsKLQl1MzIgdWxfcnNy dmRfc2l6ZSA9IDA7Ci0JdTMyIHVsX2dwcF9waHlzOwotCXUzMiB1bF9kc3BfdmlydDsKLQl1MzIg dWxfc2htX3NlZ19pZDAgPSAwOwotCXUzMiBkd19vZmZzZXQsIGR3X2dwcF9iYXNlX3ZhLCB1bF9k c3Bfc2l6ZTsKLQotCS8qCi0JICogUmVhZCBhZGRyZXNzIGFuZCBzaXplIGluZm8gZm9yIGZpcnN0 IFNNIHJlZ2lvbi4KLQkgKiBHZXQgc3RhcnQgb2YgMXN0IFNNIEhlYXAgcmVnaW9uLgotCSAqLwot CXN0YXR1cyA9Ci0JICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIFNITTBfU0hBUkVEX0JB U0VfU1lNLCAmdWxfc2htMF9iYXNlKTsKLQlpZiAodWxfc2htMF9iYXNlID09IDApIHsKLQkJc3Rh dHVzID0gLUVQRVJNOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQkvKiBHZXQgZW5kIG9mIDFzdCBT TSBIZWFwIHJlZ2lvbiAqLwotCWlmICghc3RhdHVzKSB7Ci0JCS8qIEdldCBzdGFydCBhbmQgbGVu Z3RoIG9mIG1lc3NhZ2UgcGFydCBvZiBzaGFyZWQgbWVtb3J5ICovCi0JCXN0YXR1cyA9IGNvZF9n ZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIFNITTBfU0hBUkVEX0VORF9TWU0sCi0JCQkJCSAgICZzaG0w X2VuZCk7Ci0JCWlmIChzaG0wX2VuZCA9PSAwKSB7Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQln b3RvIGZ1bmNfZW5kOwotCQl9Ci0JfQotCS8qIFN0YXJ0IG9mIEdwcCByZXNlcnZlZCByZWdpb24g Ki8KLQlpZiAoIXN0YXR1cykgewotCQkvKiBHZXQgc3RhcnQgYW5kIGxlbmd0aCBvZiBtZXNzYWdl IHBhcnQgb2Ygc2hhcmVkIG1lbW9yeSAqLwotCQlzdGF0dXMgPQotCQkgICAgY29kX2dldF9zeW1f dmFsdWUoY29kX21hbiwgU0hNMF9TSEFSRURfUkVTRVJWRURfQkFTRV9TWU0sCi0JCQkJICAgICAg JnVsX3NobTBfcnNydmRfc3RhcnQpOwotCQlpZiAodWxfc2htMF9yc3J2ZF9zdGFydCA9PSAwKSB7 Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQlnb3RvIGZ1bmNfZW5kOwotCQl9Ci0JfQotCS8qIFJl Z2lzdGVyIHdpdGggQ01NICovCi0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gZGV2X2dldF9j bW1fbWdyKGhpb19tZ3ItPmRldl9vYmosICZoaW9fbWdyLT5jbW1fbWdyKTsKLQkJaWYgKCFzdGF0 dXMpIHsKLQkJCXN0YXR1cyA9IGNtbV91bl9yZWdpc3Rlcl9ncHBzbV9zZWcoaGlvX21nci0+Y21t X21nciwKLQkJCQkJCQkgICBDTU1fQUxMU0VHTUVOVFMpOwotCQl9Ci0JfQotCS8qIFJlZ2lzdGVy IG5ldyBTTSByZWdpb24ocykgKi8KLQlpZiAoIXN0YXR1cyAmJiAoc2htMF9lbmQgLSB1bF9zaG0w X2Jhc2UpID4gMCkgewotCQkvKiBDYWxjIHNpemUgKGJ5dGVzKSBvZiBTTSB0aGUgR1BQIGNhbiBh bGxvYyBmcm9tICovCi0JCXVsX3JzcnZkX3NpemUgPQotCQkgICAgKHNobTBfZW5kIC0gdWxfc2ht MF9yc3J2ZF9zdGFydCArIDEpICogaGlvX21nci0+d29yZF9zaXplOwotCQlpZiAodWxfcnNydmRf c2l6ZSA8PSAwKSB7Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQlnb3RvIGZ1bmNfZW5kOwotCQl9 Ci0JCS8qIENhbGMgc2l6ZSBvZiBTTSBEU1AgY2FuIGFsbG9jIGZyb20gKi8KLQkJdWxfZHNwX3Np emUgPQotCQkgICAgKHVsX3NobTBfcnNydmRfc3RhcnQgLSB1bF9zaG0wX2Jhc2UpICogaGlvX21n ci0+d29yZF9zaXplOwotCQlpZiAodWxfZHNwX3NpemUgPD0gMCkgewotCQkJc3RhdHVzID0gLUVQ RVJNOwotCQkJZ290byBmdW5jX2VuZDsKLQkJfQotCQkvKiBGaXJzdCBUTEIgZW50cnkgcmVzZXJ2 ZWQgZm9yIEJyaWRnZSBTTSB1c2UuICovCi0JCXVsX2dwcF9waHlzID0gaGlvX21nci0+ZXh0X3By b2NfaW5mby50eV90bGJbMF0uZ3BwX3BoeXM7Ci0JCS8qIEdldCBzaXplIGluIGJ5dGVzICovCi0J CXVsX2RzcF92aXJ0ID0KLQkJICAgIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLmRz cF92aXJ0ICoKLQkJICAgIGhpb19tZ3ItPndvcmRfc2l6ZTsKLQkJLyoKLQkJICogQ2FsYyBieXRl IG9mZnNldCB1c2VkIHRvIGNvbnZlcnQgR1BQIHBoeXMgPC0+IERTUCBieXRlCi0JCSAqIGFkZHJl c3MuCi0JCSAqLwotCQlpZiAoZHdfZ3BwX2Jhc2VfcGEgPiB1bF9kc3BfdmlydCkKLQkJCWR3X29m ZnNldCA9IGR3X2dwcF9iYXNlX3BhIC0gdWxfZHNwX3ZpcnQ7Ci0JCWVsc2UKLQkJCWR3X29mZnNl dCA9IHVsX2RzcF92aXJ0IC0gZHdfZ3BwX2Jhc2VfcGE7Ci0KLQkJaWYgKHVsX3NobTBfcnNydmRf c3RhcnQgKiBoaW9fbWdyLT53b3JkX3NpemUgPCB1bF9kc3BfdmlydCkgewotCQkJc3RhdHVzID0g LUVQRVJNOwotCQkJZ290byBmdW5jX2VuZDsKLQkJfQotCQkvKgotCQkgKiBDYWxjIEdwcCBwaHlz IGJhc2Ugb2YgU00gcmVnaW9uLgotCQkgKiBUaGlzIGlzIGFjdHVhbGx5IHVuY2FjaGVkIGtlcm5l bCB2aXJ0dWFsIGFkZHJlc3MuCi0JCSAqLwotCQlkd19ncHBfYmFzZV92YSA9Ci0JCSAgICB1bF9n cHBfcGh5cyArIHVsX3NobTBfcnNydmRfc3RhcnQgKiBoaW9fbWdyLT53b3JkX3NpemUgLQotCQkg ICAgdWxfZHNwX3ZpcnQ7Ci0JCS8qCi0JCSAqIENhbGMgR3BwIHBoeXMgYmFzZSBvZiBTTSByZWdp b24uCi0JCSAqIFRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MuCi0JCSAqLwotCQlkd19ncHBf YmFzZV9wYSA9Ci0JCSAgICBkd19ncHBfYmFzZV9wYSArIHVsX3NobTBfcnNydmRfc3RhcnQgKiBo aW9fbWdyLT53b3JkX3NpemUgLQotCQkgICAgdWxfZHNwX3ZpcnQ7Ci0JCS8qIFJlZ2lzdGVyIFNN IFNlZ21lbnQgMC4gKi8KLQkJc3RhdHVzID0KLQkJICAgIGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWco aGlvX21nci0+Y21tX21nciwgZHdfZ3BwX2Jhc2VfcGEsCi0JCQkJCSAgIHVsX3JzcnZkX3NpemUs IGR3X29mZnNldCwKLQkJCQkJICAgKGR3X2dwcF9iYXNlX3BhID4KLQkJCQkJICAgIHVsX2RzcF92 aXJ0KSA/IENNTV9BRERUT0RTUFBBIDoKLQkJCQkJICAgQ01NX1NVQkZST01EU1BQQSwKLQkJCQkJ ICAgKHUzMikgKHVsX3NobTBfYmFzZSAqCi0JCQkJCQkgIGhpb19tZ3ItPndvcmRfc2l6ZSksCi0J CQkJCSAgIHVsX2RzcF9zaXplLCAmdWxfc2htX3NlZ19pZDAsCi0JCQkJCSAgIGR3X2dwcF9iYXNl X3ZhKTsKLQkJLyogRmlyc3QgU00gcmVnaW9uIGlzIHNlZ19pZCA9IDEgKi8KLQkJaWYgKHVsX3No bV9zZWdfaWQwICE9IDEpCi0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JfQotZnVuY19lbmQ6Ci0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyogWkNQWSBJTyByb3V0aW5lcy4gKi8KLS8qCi0gKiAgPT09PT09 PT0gSU9fU0hNY29udHJvbCA9PT09PT09PQotICogICAgICBTZXRzIHRoZSByZXF1ZXN0ZWQgc2ht IHNldHRpbmcuCi0gKi8KLWludCBpb19zaF9tc2V0dGluZyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdy LCB1OCBkZXNjLCB2b2lkICpwYXJncykKLXsKLSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZG UwotCXUzMiBpOwotCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQotCSAg ICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0Jc3dpdGNoIChkZXNj KSB7Ci0JY2FzZSBTSE1fQ1VSUk9QUDoKLQkJLyogVXBkYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHdp dGggcmVxdWVzdGVkIE9QUCBpbmZvcm1hdGlvbiAqLwotCQlpZiAocGFyZ3MgIT0gTlVMTCkKLQkJ CWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3QuY3Vycl9vcHBfcHQgPQotCQkJ ICAgICoodTMyICopIHBhcmdzOwotCQllbHNlCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlicmVhazsK LQljYXNlIFNITV9PUFBJTkZPOgotCQkvKgotCQkgKiBVcGRhdGUgdGhlIHNoYXJlZCBtZW1vcnkg d2l0aCB0aGUgdm9sdGFnZSwgZnJlcXVlbmN5LAotCQkgKiBtaW4gYW5kIG1heCBmcmVxdWVuY3kg dmFsdWVzIGZvciBhbiBPUFAuCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDw9IGRzcF9tYXhfb3Bw czsgaSsrKSB7Ci0JCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm9wcF9w b2ludFtpXS4KLQkJCSAgICB2b2x0YWdlID0gdmRkMV9kc3BfZnJlcVtpXVswXTsKLQkJCWRldl9k YmcoYnJpZGdlLCAiT1BQLXNobTogdm9sdGFnZTogJWRcbiIsCi0JCQkJdmRkMV9kc3BfZnJlcVtp XVswXSk7Ci0JCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0LgotCQkJICAg IG9wcF9wb2ludFtpXS5mcmVxdWVuY3kgPSB2ZGQxX2RzcF9mcmVxW2ldWzFdOwotCQkJZGV2X2Ri ZyhicmlkZ2UsICJPUFAtc2htOiBmcmVxdWVuY3k6ICVkXG4iLAotCQkJCXZkZDFfZHNwX2ZyZXFb aV1bMV0pOwotCQkJaGlvX21nci0+c2hhcmVkX21lbS0+b3BwX3RhYmxlX3N0cnVjdC5vcHBfcG9p bnRbaV0uCi0JCQkgICAgbWluX2ZyZXEgPSB2ZGQxX2RzcF9mcmVxW2ldWzJdOwotCQkJZGV2X2Ri ZyhicmlkZ2UsICJPUFAtc2htOiBtaW4gZnJlcTogJWRcbiIsCi0JCQkJdmRkMV9kc3BfZnJlcVtp XVsyXSk7Ci0JCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm9wcF9wb2lu dFtpXS4KLQkJCSAgICBtYXhfZnJlcSA9IHZkZDFfZHNwX2ZyZXFbaV1bM107Ci0JCQlkZXZfZGJn KGJyaWRnZSwgIk9QUC1zaG06IG1heCBmcmVxOiAlZFxuIiwKLQkJCQl2ZGQxX2RzcF9mcmVxW2ld WzNdKTsKLQkJfQotCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm51bV9v cHBfcHRzID0KLQkJICAgIGRzcF9tYXhfb3BwczsKLQkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2ht OiBtYXggT1BQIG51bWJlcjogJWRcbiIsIGRzcF9tYXhfb3Bwcyk7Ci0JCS8qIFVwZGF0ZSB0aGUg Y3VycmVudCBPUFAgbnVtYmVyICovCi0JCWlmIChwZGF0YS0+ZHNwX2dldF9vcHApCi0JCQlpID0g KCpwZGF0YS0+ZHNwX2dldF9vcHApICgpOwotCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFi bGVfc3RydWN0LmN1cnJfb3BwX3B0ID0gaTsKLQkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiB2 YWx1ZSBwcm9ncmFtbWVkID0gJWRcbiIsIGkpOwotCQlicmVhazsKLQljYXNlIFNITV9HRVRPUFA6 Ci0JCS8qIEdldCB0aGUgT1BQIHRoYXQgRFNQIGhhcyByZXF1ZXN0ZWQgKi8KLQkJKih1MzIgKikg cGFyZ3MgPSBoaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfcmVxdWVzdC5ycXN0X29wcF9wdDsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2lvX2dldF9wcm9jX2xvYWQgPT09PT09PT0KLSAqICAg ICAgR2V0cyB0aGUgUHJvY2Vzc29yJ3MgTG9hZCBpbmZvcm1hdGlvbgotICovCi1pbnQgYnJpZGdl X2lvX2dldF9wcm9jX2xvYWQoc3RydWN0IGlvX21nciAqaGlvX21nciwKLQkJCQlzdHJ1Y3QgZHNw X3Byb2Nsb2Fkc3RhdCAqcHJvY19sc3RhdCkKLXsKLQlpZiAoIWhpb19tZ3ItPnNoYXJlZF9tZW0p Ci0JCXJldHVybiAtRUZBVUxUOwotCi0JcHJvY19sc3RhdC0+Y3Vycl9sb2FkID0KLQkJCWhpb19t Z3ItPnNoYXJlZF9tZW0tPmxvYWRfbW9uX2luZm8uY3Vycl9kc3BfbG9hZDsKLQlwcm9jX2xzdGF0 LT5wcmVkaWN0ZWRfbG9hZCA9Ci0JICAgIGhpb19tZ3ItPnNoYXJlZF9tZW0tPmxvYWRfbW9uX2lu Zm8ucHJlZF9kc3BfbG9hZDsKLQlwcm9jX2xzdGF0LT5jdXJyX2RzcF9mcmVxID0KLQkgICAgaGlv X21nci0+c2hhcmVkX21lbS0+bG9hZF9tb25faW5mby5jdXJyX2RzcF9mcmVxOwotCXByb2NfbHN0 YXQtPnByZWRpY3RlZF9mcmVxID0KLQkgICAgaGlvX21nci0+c2hhcmVkX21lbS0+bG9hZF9tb25f aW5mby5wcmVkX2RzcF9mcmVxOwotCi0JZGV2X2RiZyhicmlkZ2UsICJDdXJyIExvYWQgPSAlZCwg UHJlZCBMb2FkID0gJWQsIEN1cnIgRnJlcSA9ICVkLCAiCi0JCSJQcmVkIEZyZXEgPSAlZFxuIiwg cHJvY19sc3RhdC0+Y3Vycl9sb2FkLAotCQlwcm9jX2xzdGF0LT5wcmVkaWN0ZWRfbG9hZCwgcHJv Y19sc3RhdC0+Y3Vycl9kc3BfZnJlcSwKLQkJcHJvY19sc3RhdC0+cHJlZGljdGVkX2ZyZXEpOwot CXJldHVybiAwOwotfQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9CQUNLVFJB Q0UpCi12b2lkIHByaW50X2RzcF9kZWJ1Z190cmFjZShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKQot ewotCXUzMiB1bF9uZXdfbWVzc2FnZV9sZW5ndGggPSAwLCB1bF9ncHBfY3VyX3BvaW50ZXI7Ci0K LQl3aGlsZSAodHJ1ZSkgewotCQkvKiBHZXQgdGhlIERTUCBjdXJyZW50IHBvaW50ZXIgKi8KLQkJ dWxfZ3BwX2N1cl9wb2ludGVyID0KLQkJICAgICoodTMyICopIChoaW9fbWdyLT50cmFjZV9idWZm ZXJfY3VycmVudCk7Ci0JCXVsX2dwcF9jdXJfcG9pbnRlciA9Ci0JCSAgICBoaW9fbWdyLT5ncHBf dmEgKyAodWxfZ3BwX2N1cl9wb2ludGVyIC0KLQkJCQkJICBoaW9fbWdyLT5kc3BfdmEpOwotCi0J CS8qIE5vIG5ldyBkZWJ1ZyBtZXNzYWdlcyBhdmFpbGFibGUgeWV0ICovCi0JCWlmICh1bF9ncHBf Y3VyX3BvaW50ZXIgPT0gaGlvX21nci0+Z3BwX3JlYWRfcG9pbnRlcikgewotCQkJYnJlYWs7Ci0J CX0gZWxzZSBpZiAodWxfZ3BwX2N1cl9wb2ludGVyID4gaGlvX21nci0+Z3BwX3JlYWRfcG9pbnRl cikgewotCQkJLyogQ29udGludW91cyBkYXRhICovCi0JCQl1bF9uZXdfbWVzc2FnZV9sZW5ndGgg PQotCQkJICAgIHVsX2dwcF9jdXJfcG9pbnRlciAtIGhpb19tZ3ItPmdwcF9yZWFkX3BvaW50ZXI7 Ci0KLQkJCW1lbWNweShoaW9fbWdyLT5tc2csCi0JCQkgICAgICAgKGNoYXIgKiloaW9fbWdyLT5n cHBfcmVhZF9wb2ludGVyLAotCQkJICAgICAgIHVsX25ld19tZXNzYWdlX2xlbmd0aCk7Ci0JCQlo aW9fbWdyLT5tc2dbdWxfbmV3X21lc3NhZ2VfbGVuZ3RoXSA9ICdcMCc7Ci0JCQkvKgotCQkJICog QWR2YW5jZSB0aGUgR1BQIHRyYWNlIHBvaW50ZXIgdG8gRFNQIGN1cnJlbnQKLQkJCSAqIHBvaW50 ZXIuCi0JCQkgKi8KLQkJCWhpb19tZ3ItPmdwcF9yZWFkX3BvaW50ZXIgKz0gdWxfbmV3X21lc3Nh Z2VfbGVuZ3RoOwotCQkJLyogUHJpbnQgdGhlIHRyYWNlIG1lc3NhZ2VzICovCi0JCQlwcl9pbmZv KCJEU1BUcmFjZTogJXNcbiIsIGhpb19tZ3ItPm1zZyk7Ci0JCX0gZWxzZSBpZiAodWxfZ3BwX2N1 cl9wb2ludGVyIDwgaGlvX21nci0+Z3BwX3JlYWRfcG9pbnRlcikgewotCQkJLyogSGFuZGxlIHRy YWNlIGJ1ZmZlciB3cmFwYXJvdW5kICovCi0JCQltZW1jcHkoaGlvX21nci0+bXNnLAotCQkJICAg ICAgIChjaGFyICopaGlvX21nci0+Z3BwX3JlYWRfcG9pbnRlciwKLQkJCSAgICAgICBoaW9fbWdy LT50cmFjZV9idWZmZXJfZW5kIC0KLQkJCSAgICAgICBoaW9fbWdyLT5ncHBfcmVhZF9wb2ludGVy KTsKLQkJCXVsX25ld19tZXNzYWdlX2xlbmd0aCA9Ci0JCQkgICAgdWxfZ3BwX2N1cl9wb2ludGVy IC0gaGlvX21nci0+dHJhY2VfYnVmZmVyX2JlZ2luOwotCQkJbWVtY3B5KCZoaW9fbWdyLT5tc2db aGlvX21nci0+dHJhY2VfYnVmZmVyX2VuZCAtCi0JCQkJCSAgICAgIGhpb19tZ3ItPmdwcF9yZWFk X3BvaW50ZXJdLAotCQkJICAgICAgIChjaGFyICopaGlvX21nci0+dHJhY2VfYnVmZmVyX2JlZ2lu LAotCQkJICAgICAgIHVsX25ld19tZXNzYWdlX2xlbmd0aCk7Ci0JCQloaW9fbWdyLT5tc2dbaGlv X21nci0+dHJhY2VfYnVmZmVyX2VuZCAtCi0JCQkJICAgICAgaGlvX21nci0+Z3BwX3JlYWRfcG9p bnRlciArCi0JCQkJICAgICAgdWxfbmV3X21lc3NhZ2VfbGVuZ3RoXSA9ICdcMCc7Ci0JCQkvKgot CQkJICogQWR2YW5jZSB0aGUgR1BQIHRyYWNlIHBvaW50ZXIgdG8gRFNQIGN1cnJlbnQKLQkJCSAq IHBvaW50ZXIuCi0JCQkgKi8KLQkJCWhpb19tZ3ItPmdwcF9yZWFkX3BvaW50ZXIgPQotCQkJICAg IGhpb19tZ3ItPnRyYWNlX2J1ZmZlcl9iZWdpbiArCi0JCQkgICAgdWxfbmV3X21lc3NhZ2VfbGVu Z3RoOwotCQkJLyogUHJpbnQgdGhlIHRyYWNlIG1lc3NhZ2VzICovCi0JCQlwcl9pbmZvKCJEU1BU cmFjZTogJXNcbiIsIGhpb19tZ3ItPm1zZyk7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLQotI2lmZGVm IENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKLS8qCi0gKiAgPT09PT09PT0gcHJpbnRfZHNw X3RyYWNlX2J1ZmZlciA9PT09PT09PQotICogICAgICBQcmludHMgdGhlIHRyYWNlIGJ1ZmZlciBy ZXR1cm5lZCBmcm9tIHRoZSBEU1AgKGlmIERCR19UcmFjZSBpcyBlbmFibGVkKS4KLSAqICBQYXJh bWV0ZXJzOgotICogICAgaGRlaF9tZ3I6ICAgICAgICAgIEhhbmRsZSB0byBERUggbWFuYWdlciBv YmplY3QKLSAqICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBleHRyYSBjYXJyaWFnZSBy ZXR1cm5zIHRvIGdlbmVyYXRlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNj ZXNzLgotICogICAgICAtRU5PTUVNOiAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5LgotICog IFJlcXVpcmVzOgotICogICAgICBoZGVoX21nciBtdXNlIGJlIHZhbGlkLiBDaGVja2VkIGluIGJy aWRnZV9kZWhfbm90aWZ5LgotICovCi1pbnQgcHJpbnRfZHNwX3RyYWNlX2J1ZmZlcihzdHJ1Y3Qg YnJpZGdlX2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7 Ci0Jc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOwotCXUzMiB1bF90cmFjZV9lbmQ7Ci0JdTMy IHVsX3RyYWNlX2JlZ2luOwotCXUzMiB0cmFjZV9jdXJfcG9zOwotCXUzMiB1bF9udW1fYnl0ZXMg PSAwOwotCXUzMiB1bF9udW1fd29yZHMgPSAwOwotCXUzMiB1bF93b3JkX3NpemUgPSAyOwotCWNo YXIgKnBzel9idWY7Ci0JY2hhciAqc3RyX2JlZzsKLQljaGFyICp0cmFjZV9lbmQ7Ci0JY2hhciAq YnVmX2VuZDsKLQljaGFyICpuZXdfbGluZTsKLQotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQg KnBicmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsKLQlzdHJ1Y3QgYnJpZGdlX2Rydl9p bnRlcmZhY2UgKmludGZfZnhuczsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1 Y3QgZGV2X29iamVjdCAqKQotCSAgICBwYnJpZGdlX2NvbnRleHQtPmRldl9vYmo7Ci0KLQlzdGF0 dXMgPSBkZXZfZ2V0X2NvZF9tZ3IoZGV2X29iaiwgJmNvZF9tZ3IpOwotCi0JaWYgKGNvZF9tZ3Ip IHsKLQkJLyogTG9vayBmb3IgU1lTX1BVVENCRUcvU1lTX1BVVENFTkQgKi8KLQkJc3RhdHVzID0K LQkJICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tZ3IsIENPRF9UUkFDRUJFRywgJnVsX3RyYWNl X2JlZ2luKTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQlpZiAoIXN0YXR1 cykKLQkJc3RhdHVzID0KLQkJICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tZ3IsIENPRF9UUkFD RUVORCwgJnVsX3RyYWNlX2VuZCk7Ci0KLQlpZiAoIXN0YXR1cykKLQkJLyogdHJhY2VfY3VyX3Bv cyB3aWxsIGhvbGQgdGhlIGFkZHJlc3Mgb2YgYSBEU1AgcG9pbnRlciAqLwotCQlzdGF0dXMgPSBj b2RfZ2V0X3N5bV92YWx1ZShjb2RfbWdyLCBDT0RfVFJBQ0VDVVJQT1MsCi0JCQkJCQkJJnRyYWNl X2N1cl9wb3MpOwotCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCXVsX251bV9i eXRlcyA9ICh1bF90cmFjZV9lbmQgLSB1bF90cmFjZV9iZWdpbik7Ci0KLQl1bF9udW1fd29yZHMg PSB1bF9udW1fYnl0ZXMgKiB1bF93b3JkX3NpemU7Ci0Jc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4 bnMoZGV2X29iaiwgJmludGZfZnhucyk7Ci0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5k OwotCi0JcHN6X2J1ZiA9IGt6YWxsb2ModWxfbnVtX2J5dGVzICsgMiwgR0ZQX0FUT01JQyk7Ci0J aWYgKHBzel9idWYgIT0gTlVMTCkgewotCQkvKiBSZWFkIHRyYWNlIGJ1ZmZlciBkYXRhICovCi0J CXN0YXR1cyA9ICgqaW50Zl9meG5zLT5icmRfcmVhZCkocGJyaWRnZV9jb250ZXh0LAotCQkJKHU4 ICopcHN6X2J1ZiwgKHUzMil1bF90cmFjZV9iZWdpbiwKLQkJCXVsX251bV9ieXRlcywgMCk7Ci0K LQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gZnVuY19lbmQ7Ci0KLQkJLyogUGFjayBhbmQgZG8gbmV3 bGluZSBjb252ZXJzaW9uICovCi0JCXByX2RlYnVnKCJQcmludERzcFRyYWNlQnVmZmVyOiAiCi0J CQkiYmVmb3JlIHBhY2sgYW5kIHVucGFjay5cbiIpOwotCQlwcl9kZWJ1ZygiJXM6IERTUCBUcmFj ZSBCdWZmZXIgQmVnaW46XG4iCi0JCQkiPT09PT09PT09PT09PT09PT09PT09PT1cbiVzXG4iLAot CQkJX19mdW5jX18sIHBzel9idWYpOwotCi0JCS8qIFJlYWQgdGhlIHZhbHVlIGF0IHRoZSBEU1Ag YWRkcmVzcyBpbiB0cmFjZV9jdXJfcG9zLiAqLwotCQlzdGF0dXMgPSAoKmludGZfZnhucy0+YnJk X3JlYWQpKHBicmlkZ2VfY29udGV4dCwKLQkJCQkodTggKikmdHJhY2VfY3VyX3BvcywgKHUzMil0 cmFjZV9jdXJfcG9zLAotCQkJCTQsIDApOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byBmdW5jX2Vu ZDsKLQkJLyogUGFjayBhbmQgZG8gbmV3bGluZSBjb252ZXJzaW9uICovCi0JCXByX2luZm8oIkRT UCBUcmFjZSBCdWZmZXIgQmVnaW46XG4iCi0JCQkiPT09PT09PT09PT09PT09PT09PT09PT1cbiVz XG4iLAotCQkJcHN6X2J1Zik7Ci0KLQotCQkvKiBjb252ZXJ0IHRvIG9mZnNldCAqLwotCQl0cmFj ZV9jdXJfcG9zID0gdHJhY2VfY3VyX3BvcyAtIHVsX3RyYWNlX2JlZ2luOwotCi0JCWlmICh1bF9u dW1fYnl0ZXMpIHsKLQkJCS8qCi0JCQkgKiBUaGUgYnVmZmVyIGlzIG5vdCBmdWxsLCBmaW5kIHRo ZSBlbmQgb2YgdGhlCi0JCQkgKiBkYXRhIC0tIGJ1Zl9lbmQgd2lsbCBiZSA+PSBwc3pCdWYgYWZ0 ZXIKLQkJCSAqIHdoaWxlLgotCQkJICovCi0JCQlidWZfZW5kID0gJnBzel9idWZbdWxfbnVtX2J5 dGVzKzFdOwotCQkJLyogRFNQIHByaW50IHBvc2l0aW9uICovCi0JCQl0cmFjZV9lbmQgPSAmcHN6 X2J1Zlt0cmFjZV9jdXJfcG9zXTsKLQotCQkJLyoKLQkJCSAqIFNlYXJjaCBidWZmZXIgZm9yIGEg bmV3X2xpbmUgYW5kIHJlcGxhY2UgaXQKLQkJCSAqIHdpdGggJ1wwJywgdGhlbiBwcmludCBhcyBz dHJpbmcuCi0JCQkgKiBDb250aW51ZSB1bnRpbCBlbmQgb2YgYnVmZmVyIGlzIHJlYWNoZWQuCi0J CQkgKi8KLQkJCXN0cl9iZWcgPSB0cmFjZV9lbmQ7Ci0JCQl1bF9udW1fYnl0ZXMgPSBidWZfZW5k IC0gc3RyX2JlZzsKLQotCQkJd2hpbGUgKHN0cl9iZWcgPCBidWZfZW5kKSB7Ci0JCQkJbmV3X2xp bmUgPSBzdHJuY2hyKHN0cl9iZWcsIHVsX251bV9ieXRlcywKLQkJCQkJCQkJJ1xuJyk7Ci0JCQkJ aWYgKG5ld19saW5lICYmIG5ld19saW5lIDwgYnVmX2VuZCkgewotCQkJCQkqbmV3X2xpbmUgPSAw OwotCQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0cl9iZWcpOwotCQkJCQlzdHJfYmVnID0gKytuZXdf bGluZTsKLQkJCQkJdWxfbnVtX2J5dGVzID0gYnVmX2VuZCAtIHN0cl9iZWc7Ci0JCQkJfSBlbHNl IHsKLQkJCQkJLyoKLQkJCQkJICogQXNzdW1lIGJ1ZmZlciBlbXB0eSBpZiBpdCBjb250YWlucwot CQkJCQkgKiBhIHplcm8KLQkJCQkJICovCi0JCQkJCWlmICgqc3RyX2JlZyAhPSAnXDAnKSB7Ci0J CQkJCQlzdHJfYmVnW3VsX251bV9ieXRlc10gPSAwOwotCQkJCQkJcHJfZGVidWcoIiVzXG4iLCBz dHJfYmVnKTsKLQkJCQkJfQotCQkJCQlzdHJfYmVnID0gYnVmX2VuZDsKLQkJCQkJdWxfbnVtX2J5 dGVzID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCQkvKgotCQkJICogU2VhcmNoIGJ1ZmZlciBmb3IgYSBu TmV3TGluZSBhbmQgcmVwbGFjZSBpdAotCQkJICogd2l0aCAnXDAnLCB0aGVuIHByaW50IGFzIHN0 cmluZy4KLQkJCSAqIENvbnRpbnVlIHVudGlsIGJ1ZmZlciBpcyBleGhhdXN0ZWQuCi0JCQkgKi8K LQkJCXN0cl9iZWcgPSBwc3pfYnVmOwotCQkJdWxfbnVtX2J5dGVzID0gdHJhY2VfZW5kIC0gc3Ry X2JlZzsKLQotCQkJd2hpbGUgKHN0cl9iZWcgPCB0cmFjZV9lbmQpIHsKLQkJCQluZXdfbGluZSA9 IHN0cm5jaHIoc3RyX2JlZywgdWxfbnVtX2J5dGVzLCAnXG4nKTsKLQkJCQlpZiAobmV3X2xpbmUg IT0gTlVMTCAmJiBuZXdfbGluZSA8IHRyYWNlX2VuZCkgewotCQkJCQkqbmV3X2xpbmUgPSAwOwot CQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0cl9iZWcpOwotCQkJCQlzdHJfYmVnID0gKytuZXdfbGlu ZTsKLQkJCQkJdWxfbnVtX2J5dGVzID0gdHJhY2VfZW5kIC0gc3RyX2JlZzsKLQkJCQl9IGVsc2Ug ewotCQkJCQkvKgotCQkJCQkgKiBBc3N1bWUgYnVmZmVyIGVtcHR5IGlmIGl0IGNvbnRhaW5zCi0J CQkJCSAqIGEgemVybwotCQkJCQkgKi8KLQkJCQkJaWYgKCpzdHJfYmVnICE9ICdcMCcpIHsKLQkJ CQkJCXN0cl9iZWdbdWxfbnVtX2J5dGVzXSA9IDA7Ci0JCQkJCQlwcl9kZWJ1ZygiJXNcbiIsIHN0 cl9iZWcpOwotCQkJCQl9Ci0JCQkJCXN0cl9iZWcgPSB0cmFjZV9lbmQ7Ci0JCQkJCXVsX251bV9i eXRlcyA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXByX2luZm8oIlxuPT09PT09PT09PT09PT09 PT09PT09PT1cbiIKLQkJCSJEU1AgVHJhY2UgQnVmZmVyIEVuZDpcbiIpOwotCQlrZnJlZShwc3pf YnVmKTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCX0KLWZ1bmNfZW5kOgotCWlm IChzdGF0dXMpCi0JCWRldl9kYmcoYnJpZGdlLCAiJXMgRmFpbGVkLCBzdGF0dXMgMHgleFxuIiwg X19mdW5jX18sIHN0YXR1cyk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKiBkdW1wX2Rz cF9zdGFjaygpIC0gVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgZGF0YSBvbiB0aGUgRFNQIHN0YWNr LgotICogQGJyaWRnZV9jb250ZXh0OglCcmlkZ2UgZHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgcG9p bnRlci4KLSAqCi0gKi8KLWludCBkdW1wX2RzcF9zdGFjayhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250 ZXh0ICpicmlkZ2VfY29udGV4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgY29kX21h bmFnZXIgKmNvZGVfbWdyOwotCXN0cnVjdCBub2RlX21nciAqbm9kZV9tZ3I7Ci0JdTMyIHRyYWNl X2JlZ2luOwotCWNoYXIgbmFtZVsyNTZdOwotCXN0cnVjdCB7Ci0JCXUzMiBoZWFkWzJdOwotCQl1 MzIgc2l6ZTsKLQl9IG1tdV9mYXVsdF9kYmdfaW5mbzsKLQl1MzIgKmJ1ZmZlcjsKLQl1MzIgKmJ1 ZmZlcl9iZWc7Ci0JdTMyICpidWZmZXJfZW5kOwotCXUzMiBleGNfdHlwZTsKLQl1MzIgZHluX2V4 dF9iYXNlOwotCXUzMiBpOwotCXUzMiBvZmZzZXRfb3V0cHV0OwotCXUzMiB0b3RhbF9zaXplOwot CXUzMiBwb2xsX2NudDsKLQljb25zdCBjaGFyICpkc3BfcmVnc1tdID0geyJFRlIiLCAiSUVSUiIs ICJJVFNSIiwgIk5UU1IiLAotCQkJCSJJUlAiLCAiTlJQIiwgIkFNUiIsICJTU1IiLAotCQkJCSJJ TEMiLCAiUklMQyIsICJJRVIiLCAiQ1NSIn07Ci0JY29uc3QgY2hhciAqZXhlY19jdHh0W10gPSB7 IlRhc2siLCAiU1dJIiwgIkhXSSIsICJVbmtub3duIn07Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50 ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmplY3QgPSBicmlk Z2VfY29udGV4dC0+ZGV2X29iajsKLQotCXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihkZXZfb2Jq ZWN0LCAmY29kZV9tZ3IpOwotCWlmICghY29kZV9tZ3IpIHsKLQkJcHJfZGVidWcoIiVzOiBGYWls ZWQgb24gZGV2X2dldF9jb2RfbWdyLlxuIiwgX19mdW5jX18pOwotCQlzdGF0dXMgPSAtRUZBVUxU OwotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IGRldl9nZXRfbm9kZV9tYW5hZ2Vy KGRldl9vYmplY3QsICZub2RlX21ncik7Ci0JCWlmICghbm9kZV9tZ3IpIHsKLQkJCXByX2RlYnVn KCIlczogRmFpbGVkIG9uIGRldl9nZXRfbm9kZV9tYW5hZ2VyLlxuIiwKLQkJCQkJCQkJX19mdW5j X18pOwotCQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJfQotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0J CS8qIExvb2sgZm9yIFNZU19QVVRDQkVHL1NZU19QVVRDRU5EOiAqLwotCQlzdGF0dXMgPQotCQkJ Y29kX2dldF9zeW1fdmFsdWUoY29kZV9tZ3IsIENPRF9UUkFDRUJFRywgJnRyYWNlX2JlZ2luKTsK LQkJcHJfZGVidWcoIiVzOiB0cmFjZV9iZWdpbiBWYWx1ZSAweCV4XG4iLAotCQkJX19mdW5jX18s IHRyYWNlX2JlZ2luKTsKLQkJaWYgKHN0YXR1cykKLQkJCXByX2RlYnVnKCIlczogRmFpbGVkIG9u IGNvZF9nZXRfc3ltX3ZhbHVlLlxuIiwKLQkJCQkJCQkJX19mdW5jX18pOwotCX0KLQlpZiAoIXN0 YXR1cykKLQkJc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4bnMoZGV2X29iamVjdCwgJmludGZfZnhu cyk7Ci0JLyoKLQkgKiBDaGVjayBmb3IgdGhlICJtYWdpYyBudW1iZXIiIGluIHRoZSB0cmFjZSBi dWZmZXIuICBJZiBpdCBoYXMKLQkgKiB5ZXQgdG8gYXBwZWFyIHRoZW4gcG9sbCB0aGUgdHJhY2Ug YnVmZmVyIHRvIHdhaXQgZm9yIGl0LiAgSXRzCi0JICogYXBwZWFyYW5jZSBzaWduYWxzIHRoYXQg dGhlIERTUCBoYXMgZmluaXNoZWQgZHVtcGluZyBpdHMgc3RhdGUuCi0JICovCi0JbW11X2ZhdWx0 X2RiZ19pbmZvLmhlYWRbMF0gPSAwOwotCW1tdV9mYXVsdF9kYmdfaW5mby5oZWFkWzFdID0gMDsK LQlpZiAoIXN0YXR1cykgewotCQlwb2xsX2NudCA9IDA7Ci0JCXdoaWxlICgobW11X2ZhdWx0X2Ri Z19pbmZvLmhlYWRbMF0gIT0gTU1VX0ZBVUxUX0hFQUQxIHx8Ci0JCQltbXVfZmF1bHRfZGJnX2lu Zm8uaGVhZFsxXSAhPSBNTVVfRkFVTFRfSEVBRDIpICYmCi0JCQlwb2xsX2NudCA8IFBPTExfTUFY KSB7Ci0KLQkJCS8qIFJlYWQgRFNQIGR1bXAgc2l6ZSBmcm9tIHRoZSBEU1AgdHJhY2UgYnVmZmVy Li4uICovCi0JCQlzdGF0dXMgPSAoKmludGZfZnhucy0+YnJkX3JlYWQpKGJyaWRnZV9jb250ZXh0 LAotCQkJCSh1OCAqKSZtbXVfZmF1bHRfZGJnX2luZm8sICh1MzIpdHJhY2VfYmVnaW4sCi0JCQkJ c2l6ZW9mKG1tdV9mYXVsdF9kYmdfaW5mbyksIDApOwotCi0JCQlpZiAoc3RhdHVzKQotCQkJCWJy ZWFrOwotCi0JCQlwb2xsX2NudCsrOwotCQl9Ci0KLQkJaWYgKG1tdV9mYXVsdF9kYmdfaW5mby5o ZWFkWzBdICE9IE1NVV9GQVVMVF9IRUFEMSAmJgotCQkJbW11X2ZhdWx0X2RiZ19pbmZvLmhlYWRb MV0gIT0gTU1VX0ZBVUxUX0hFQUQyKSB7Ci0JCQlzdGF0dXMgPSAtRVRJTUU7Ci0JCQlwcl9lcnIo IiVzOk5vIERTUCBNTVUtRmF1bHQgaW5mb3JtYXRpb24gYXZhaWxhYmxlLlxuIiwKLQkJCQkJCQlf X2Z1bmNfXyk7Ci0JCX0KLQl9Ci0KLQlpZiAoIXN0YXR1cykgewotCQl0b3RhbF9zaXplID0gbW11 X2ZhdWx0X2RiZ19pbmZvLnNpemU7Ci0JCS8qIExpbWl0IHRoZSBzaXplIGluIGNhc2UgRFNQIHdl bnQgY3JhenkgKi8KLQkJaWYgKHRvdGFsX3NpemUgPiBNQVhfTU1VX0RCR0JVRkYpCi0JCQl0b3Rh bF9zaXplID0gTUFYX01NVV9EQkdCVUZGOwotCi0JCWJ1ZmZlciA9IGt6YWxsb2ModG90YWxfc2l6 ZSwgR0ZQX0FUT01JQyk7Ci0JCWlmICghYnVmZmVyKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOwot CQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgdG8gIgotCQkJCSJhbGxvY2F0ZSBzdGFjayBkdW1wIGJ1 ZmZlci5cbiIsIF9fZnVuY19fKTsKLQkJCWdvdG8gZnVuY19lbmQ7Ci0JCX0KLQotCQlidWZmZXJf YmVnID0gYnVmZmVyOwotCQlidWZmZXJfZW5kID0gIGJ1ZmZlciArIHRvdGFsX3NpemUgLyA0Owot Ci0JCS8qIFJlYWQgYnl0ZXMgZnJvbSB0aGUgRFNQIHRyYWNlIGJ1ZmZlci4uLiAqLwotCQlzdGF0 dXMgPSAoKmludGZfZnhucy0+YnJkX3JlYWQpKGJyaWRnZV9jb250ZXh0LAotCQkJCSh1OCAqKWJ1 ZmZlciwgKHUzMil0cmFjZV9iZWdpbiwKLQkJCQl0b3RhbF9zaXplLCAwKTsKLQkJaWYgKHN0YXR1 cykgewotCQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgdG8gUmVhZCBUcmFjZSBCdWZmZXIuXG4iLAot CQkJCQkJCQlfX2Z1bmNfXyk7Ci0JCQlnb3RvIGZ1bmNfZW5kOwotCQl9Ci0KLQkJcHJfZXJyKCJc bkFwcm94aW1hdGUgQ3Jhc2ggUG9zaXRpb246XG4iCi0JCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS1cbiIpOwotCi0JCWV4Y190eXBlID0gYnVmZmVyWzNdOwotCQlpZiAoIWV4Y190eXBlKQot CQkJaSA9IGJ1ZmZlcls3OV07ICAgICAgICAgLyogSVJQICovCi0JCWVsc2UKLQkJCWkgPSBidWZm ZXJbODBdOyAgICAgICAgIC8qIE5SUCAqLwotCi0JCXN0YXR1cyA9Ci0JCSAgICBjb2RfZ2V0X3N5 bV92YWx1ZShjb2RlX21nciwgRFlORVhUQkFTRSwgJmR5bl9leHRfYmFzZSk7Ci0JCWlmIChzdGF0 dXMpIHsKLQkJCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZ1bmNfZW5kOwotCQl9Ci0KLQkJ aWYgKChpID4gZHluX2V4dF9iYXNlKSAmJiAobm9kZV9maW5kX2FkZHIobm9kZV9tZ3IsIGksCi0J CQkweDEwMDAsICZvZmZzZXRfb3V0cHV0LCBuYW1lKSA9PSAwKSkKLQkJCXByX2VycigiMHglLTh4 IFtcIiVzXCIgKyAweCV4XVxuIiwgaSwgbmFtZSwKLQkJCQkJCQlpIC0gb2Zmc2V0X291dHB1dCk7 Ci0JCWVsc2UKLQkJCXByX2VycigiMHglLTh4IFtVbmFibGUgdG8gbWF0Y2ggdG8gYSBzeW1ib2wu XVxuIiwgaSk7Ci0KLQkJYnVmZmVyICs9IDQ7Ci0KLQkJcHJfZXJyKCJcbkV4ZWN1dGlvbiBJbmZv OlxuIgotCQkJIi0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQkJaWYgKCpidWZmZXIgPCBBUlJBWV9T SVpFKGV4ZWNfY3R4dCkpIHsKLQkJCXByX2VycigiRXhlY3V0aW9uIGNvbnRleHQgXHQlc1xuIiwK LQkJCQlleGVjX2N0eHRbKmJ1ZmZlcisrXSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoIkV4ZWN1 dGlvbiBjb250ZXh0IGNvcnJ1cHRcbiIpOwotCQkJa2ZyZWUoYnVmZmVyX2JlZyk7Ci0JCQlyZXR1 cm4gLUVGQVVMVDsKLQkJfQotCQlwcl9lcnIoIlRhc2sgSGFuZGxlXHRcdDB4JXhcbiIsICpidWZm ZXIrKyk7Ci0JCXByX2VycigiU3RhY2sgUG9pbnRlclx0XHQweCV4XG4iLCAqYnVmZmVyKyspOwot CQlwcl9lcnIoIlN0YWNrIFRvcFx0XHQweCV4XG4iLCAqYnVmZmVyKyspOwotCQlwcl9lcnIoIlN0 YWNrIEJvdHRvbVx0XHQweCV4XG4iLCAqYnVmZmVyKyspOwotCQlwcl9lcnIoIlN0YWNrIFNpemVc dFx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKLQkJcHJfZXJyKCJTdGFjayBTaXplIEluIFVzZVx0MHgl eFxuIiwgKmJ1ZmZlcisrKTsKLQotCQlwcl9lcnIoIlxuQ1BVIFJlZ2lzdGVyc1xuIgotCQkJIi0t LS0tLS0tLS0tLS0tLVxuIik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJCWlm IChpID09IDQgfHwgaSA9PSA2IHx8IGkgPT0gOCkKLQkJCQlwcl9lcnIoIkElZCAweCUtOHggW0Z1 bmN0aW9uIEFyZ3VtZW50ICVkXVxuIiwKLQkJCQkJCQlpLCAqYnVmZmVyKyssIGktMyk7Ci0JCQll bHNlIGlmIChpID09IDE1KQotCQkJCXByX2VycigiQTE1IDB4JS04eCBbRnJhbWUgUG9pbnRlcl1c biIsCi0JCQkJCQkJCSpidWZmZXIrKyk7Ci0JCQllbHNlCi0JCQkJcHJfZXJyKCJBJWQgMHgleFxu IiwgaSwgKmJ1ZmZlcisrKTsKLQkJfQotCi0JCXByX2VycigiXG5CMCAweCV4XG4iLCAqYnVmZmVy KyspOwotCQlwcl9lcnIoIkIxIDB4JXhcbiIsICpidWZmZXIrKyk7Ci0JCXByX2VycigiQjIgMHgl eFxuIiwgKmJ1ZmZlcisrKTsKLQotCQlpZiAoKCpidWZmZXIgPiBkeW5fZXh0X2Jhc2UpICYmIChu b2RlX2ZpbmRfYWRkcihub2RlX21nciwKLQkJCSpidWZmZXIsIDB4MTAwMCwgJm9mZnNldF9vdXRw dXQsIG5hbWUpID09IDApKQotCi0JCQlwcl9lcnIoIkIzIDB4JS04eCBbRnVuY3Rpb24gUmV0dXJu IFBvaW50ZXI6IgotCQkJCSIgXCIlc1wiICsgMHgleF1cbiIsICpidWZmZXIsIG5hbWUsCi0JCQkJ KmJ1ZmZlciAtIG9mZnNldF9vdXRwdXQpOwotCQllbHNlCi0JCQlwcl9lcnIoIkIzIDB4JS04eCBb RnVuY3Rpb24gUmV0dXJuIFBvaW50ZXI6IgotCQkJCSJVbmFibGUgdG8gbWF0Y2ggdG8gYSBzeW1i b2wuXVxuIiwgKmJ1ZmZlcik7Ci0KLQkJYnVmZmVyKys7Ci0KLQkJZm9yIChpID0gNDsgaSA8IDMy OyBpKyspIHsKLQkJCWlmIChpID09IDQgfHwgaSA9PSA2IHx8IGkgPT0gOCkKLQkJCQlwcl9lcnIo IkIlZCAweCUtOHggW0Z1bmN0aW9uIEFyZ3VtZW50ICVkXVxuIiwKLQkJCQkJCQlpLCAqYnVmZmVy KyssIGktMik7Ci0JCQllbHNlIGlmIChpID09IDE0KQotCQkJCXByX2VycigiQjE0IDB4JS04eCBb RGF0YSBQYWdlIFBvaW50ZXJdXG4iLAotCQkJCQkJCQkqYnVmZmVyKyspOwotCQkJZWxzZQotCQkJ CXByX2VycigiQiVkIDB4JXhcbiIsIGksICpidWZmZXIrKyk7Ci0JCX0KLQotCQlwcl9lcnIoIlxu Iik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNwX3JlZ3MpOyBpKyspCi0JCQlw cl9lcnIoIiVzIDB4JXhcbiIsIGRzcF9yZWdzW2ldLCAqYnVmZmVyKyspOwotCi0JCXByX2Vycigi XG5TdGFjazpcbiIKLQkJCSItLS0tLS1cbiIpOwotCi0JCWZvciAoaSA9IDA7IGJ1ZmZlciA8IGJ1 ZmZlcl9lbmQ7IGkrKywgYnVmZmVyKyspIHsKLQkJCWlmICgoKmJ1ZmZlciA+IGR5bl9leHRfYmFz ZSkgJiYgKAotCQkJCW5vZGVfZmluZF9hZGRyKG5vZGVfbWdyLCAqYnVmZmVyICwgMHg2MDAsCi0J CQkJJm9mZnNldF9vdXRwdXQsIG5hbWUpID09IDApKQotCQkJCXByX2VycigiWyVkXSAweCUtOHgg W1wiJXNcIiArIDB4JXhdXG4iLAotCQkJCQlpLCAqYnVmZmVyLCBuYW1lLAotCQkJCQkqYnVmZmVy IC0gb2Zmc2V0X291dHB1dCk7Ci0JCQllbHNlCi0JCQkJcHJfZXJyKCJbJWRdIDB4JXhcbiIsIGks ICpidWZmZXIpOwotCQl9Ci0JCWtmcmVlKGJ1ZmZlcl9iZWcpOwotCX0KLWZ1bmNfZW5kOgotCXJl dHVybiBzdGF0dXM7Ci19Ci0KLS8qKgotICogZHVtcF9kbF9tb2R1bGVzKCkgLSBUaGlzIGZ1bmN0 aW9ucyBkdW1wcyB0aGUgX0RMTW9kdWxlcyBsb2FkZWQgaW4gRFNQIHNpZGUKLSAqIEBicmlkZ2Vf Y29udGV4dDoJCUJyaWRnZSBkcml2ZXIncyBkZXZpY2UgY29udGV4dCBwb2ludGVyLgotICoKLSAq Lwotdm9pZCBkdW1wX2RsX21vZHVsZXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdl X2NvbnRleHQpCi17Ci0Jc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RlX21ncjsKLQlzdHJ1Y3QgYnJp ZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0 ICpicmlkZ2VfY3R4dCA9IGJyaWRnZV9jb250ZXh0OwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZf b2JqZWN0ID0gYnJpZGdlX2N0eHQtPmRldl9vYmo7Ci0Jc3RydWN0IG1vZHVsZXNfaGVhZGVyIG1v ZHVsZXNfaGRyOwotCXN0cnVjdCBkbGxfbW9kdWxlICptb2R1bGVfc3RydWN0ID0gTlVMTDsKLQl1 MzIgbW9kdWxlX2RzcF9hZGRyOwotCXUzMiBtb2R1bGVfc2l6ZTsKLQl1MzIgbW9kdWxlX3N0cnVj dF9zaXplID0gMDsKLQl1MzIgc2VjdF9uZHg7Ci0JY2hhciAqc2VjdF9zdHI7Ci0JaW50IHN0YXR1 cyA9IDA7Ci0KLQlzdGF0dXMgPSBkZXZfZ2V0X2ludGZfZnhucyhkZXZfb2JqZWN0LCAmaW50Zl9m eG5zKTsKLQlpZiAoc3RhdHVzKSB7Ci0JCXByX2RlYnVnKCIlczogRmFpbGVkIG9uIGRldl9nZXRf aW50Zl9meG5zLlxuIiwgX19mdW5jX18pOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCXN0YXR1 cyA9IGRldl9nZXRfY29kX21ncihkZXZfb2JqZWN0LCAmY29kZV9tZ3IpOwotCWlmICghY29kZV9t Z3IpIHsKLQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gZGV2X2dldF9jb2RfbWdyLlxuIiwgX19m dW5jX18pOwotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCS8q IExvb2t1cCAgdGhlIGFkZHJlc3Mgb2YgdGhlIG1vZHVsZXNfaGVhZGVyIHN0cnVjdHVyZSAqLwot CXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZGVfbWdyLCAiX0RMTW9kdWxlcyIsICZtb2R1 bGVfZHNwX2FkZHIpOwotCWlmIChzdGF0dXMpIHsKLQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24g Y29kX2dldF9zeW1fdmFsdWUgZm9yIF9ETE1vZHVsZXMuXG4iLAotCQkJX19mdW5jX18pOwotCQln b3RvIGZ1bmNfZW5kOwotCX0KLQotCXByX2RlYnVnKCIlczogX0RMTW9kdWxlcyBhdCAweCV4XG4i LCBfX2Z1bmNfXywgbW9kdWxlX2RzcF9hZGRyKTsKLQotCS8qIENvcHkgdGhlIG1vZHVsZXNfaGVh ZGVyIHN0cnVjdHVyZSBmcm9tIERTUCBtZW1vcnkuICovCi0Jc3RhdHVzID0gKCppbnRmX2Z4bnMt PmJyZF9yZWFkKShicmlkZ2VfY29udGV4dCwgKHU4ICopICZtb2R1bGVzX2hkciwKLQkJCQkodTMy KSBtb2R1bGVfZHNwX2FkZHIsIHNpemVvZihtb2R1bGVzX2hkciksIDApOwotCi0JaWYgKHN0YXR1 cykgewotCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBmYWlsZWQgdG8gcmVhZCBtb2R1bGVzIGhlYWRl ci5cbiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0KLQltb2R1 bGVfZHNwX2FkZHIgPSBtb2R1bGVzX2hkci5maXJzdF9tb2R1bGU7Ci0JbW9kdWxlX3NpemUgPSBt b2R1bGVzX2hkci5maXJzdF9tb2R1bGVfc2l6ZTsKLQotCXByX2RlYnVnKCIlczogZGxsX21vZHVs ZV9oZWFkZXIgMHgleCAlZFxuIiwgX19mdW5jX18sIG1vZHVsZV9kc3BfYWRkciwKLQkJCQkJCQkJ bW9kdWxlX3NpemUpOwotCi0JcHJfZXJyKCJcbkR5bmFtaWNhbGx5IExvYWRlZCBNb2R1bGVzOlxu IgotCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQotCS8qIEZvciBlYWNoIGRs bF9tb2R1bGUgc3RydWN0dXJlIGluIHRoZSBsaXN0Li4uICovCi0Jd2hpbGUgKG1vZHVsZV9zaXpl KSB7Ci0JCS8qCi0JCSAqIEFsbG9jYXRlL3JlLWFsbG9jYXRlIG1lbW9yeSB0byBob2xkIHRoZSBk bGxfbW9kdWxlCi0JCSAqIHN0cnVjdHVyZS4gVGhlIG1lbW9yeSBpcyByZS1hbGxvY2F0ZWQgb25s eSBpZiB0aGUgZXhpc3RpbmcKLQkJICogYWxsb2NhdGlvbiBpcyB0b28gc21hbGwuCi0JCSAqLwot CQlpZiAobW9kdWxlX3NpemUgPiBtb2R1bGVfc3RydWN0X3NpemUpIHsKLQkJCWtmcmVlKG1vZHVs ZV9zdHJ1Y3QpOwotCQkJbW9kdWxlX3N0cnVjdCA9IGt6YWxsb2MobW9kdWxlX3NpemUrMTI4LCBH RlBfQVRPTUlDKTsKLQkJCW1vZHVsZV9zdHJ1Y3Rfc2l6ZSA9IG1vZHVsZV9zaXplKzEyODsKLQkJ CXByX2RlYnVnKCIlczogYWxsb2NhdGVkIG1vZHVsZSBzdHJ1Y3QgJXAgJWRcbiIsCi0JCQkJX19m dW5jX18sIG1vZHVsZV9zdHJ1Y3QsIG1vZHVsZV9zdHJ1Y3Rfc2l6ZSk7Ci0JCQlpZiAoIW1vZHVs ZV9zdHJ1Y3QpCi0JCQkJZ290byBmdW5jX2VuZDsKLQkJfQotCQkvKiBDb3B5IHRoZSBkbGxfbW9k dWxlIHN0cnVjdHVyZSBmcm9tIERTUCBtZW1vcnkgKi8KLQkJc3RhdHVzID0gKCppbnRmX2Z4bnMt PmJyZF9yZWFkKShicmlkZ2VfY29udGV4dCwKLQkJCSh1OCAqKW1vZHVsZV9zdHJ1Y3QsIG1vZHVs ZV9kc3BfYWRkciwgbW9kdWxlX3NpemUsIDApOwotCi0JCWlmIChzdGF0dXMpIHsKLQkJCXByX2Rl YnVnKAotCQkJIiVzOiBGYWlsZWQgdG8gcmVhZCBkbGxfbW9kdWxlIHN0cnVjdCBmb3IgMHgleC5c biIsCi0JCQlfX2Z1bmNfXywgbW9kdWxlX2RzcF9hZGRyKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJ LyogVXBkYXRlIGluZm8gcmVnYXJkaW5nIHRoZSBfbmV4dF8gbW9kdWxlIGluIHRoZSBsaXN0LiAq LwotCQltb2R1bGVfZHNwX2FkZHIgPSBtb2R1bGVfc3RydWN0LT5uZXh0X21vZHVsZTsKLQkJbW9k dWxlX3NpemUgPSBtb2R1bGVfc3RydWN0LT5uZXh0X21vZHVsZV9zaXplOwotCi0JCXByX2RlYnVn KCIlczogbmV4dCBtb2R1bGUgMHgleCAlZCwgdGhpcyBtb2R1bGUgbnVtIHNlY3RzICVkXG4iLAot CQkJX19mdW5jX18sIG1vZHVsZV9kc3BfYWRkciwgbW9kdWxlX3NpemUsCi0JCQltb2R1bGVfc3Ry dWN0LT5udW1fc2VjdHMpOwotCi0JCS8qCi0JCSAqIFRoZSBzZWN0aW9uIG5hbWUgc3RyaW5ncyBz dGFydCBpbW1lZGlhdGVseSBmb2xsb3dpbmcKLQkJICogdGhlIGFycmF5IG9mIGRsbF9zZWN0IHN0 cnVjdHVyZXMuCi0JCSAqLwotCQlzZWN0X3N0ciA9IChjaGFyICopICZtb2R1bGVfc3RydWN0LT4K LQkJCQkJc2VjdHNbbW9kdWxlX3N0cnVjdC0+bnVtX3NlY3RzXTsKLQkJcHJfZXJyKCIlc1xuIiwg c2VjdF9zdHIpOwotCi0JCS8qCi0JCSAqIEFkdmFuY2UgdG8gdGhlIGZpcnN0IHNlY3Rpb24gbmFt ZSBzdHJpbmcuCi0JCSAqIEVhY2ggc3RyaW5nIGZvbGxvd3MgdGhlIG9uZSBiZWZvcmUuCi0JCSAq LwotCQlzZWN0X3N0ciArPSBzdHJsZW4oc2VjdF9zdHIpICsgMTsKLQotCQkvKiBBY2Nlc3MgZWFj aCBkbGxfc2VjdCBzdHJ1Y3R1cmUgYW5kIGl0cyBuYW1lIHN0cmluZy4gKi8KLQkJZm9yIChzZWN0 X25keCA9IDA7Ci0JCQlzZWN0X25keCA8IG1vZHVsZV9zdHJ1Y3QtPm51bV9zZWN0czsgc2VjdF9u ZHgrKykgewotCQkJcHJfZXJyKCIgICAgU2VjdGlvbjogMHgleCAiLAotCQkJCW1vZHVsZV9zdHJ1 Y3QtPnNlY3RzW3NlY3RfbmR4XS5zZWN0X2xvYWRfYWRyKTsKLQotCQkJaWYgKCgodTMyKSBzZWN0 X3N0ciAtICh1MzIpIG1vZHVsZV9zdHJ1Y3QpIDwKLQkJCQltb2R1bGVfc3RydWN0X3NpemUpIHsK LQkJCQlwcl9lcnIoIiVzXG4iLCBzZWN0X3N0cik7Ci0JCQkJLyogRWFjaCBzdHJpbmcgZm9sbG93 cyB0aGUgb25lIGJlZm9yZS4gKi8KLQkJCQlzZWN0X3N0ciArPSBzdHJsZW4oc2VjdF9zdHIpKzE7 Ci0JCQl9IGVsc2UgewotCQkJCXByX2VycigiPHN0cmluZyBlcnJvcj5cbiIpOwotCQkJCXByX2Rl YnVnKCIlczogc2VjdGlvbiBuYW1lIHN0aW5nIGFkZHJlc3MgIgotCQkJCQkiaXMgaW52YWxpZCAl cFxuIiwgX19mdW5jX18sIHNlY3Rfc3RyKTsKLQkJCX0KLQkJfQotCX0KLWZ1bmNfZW5kOgotCWtm cmVlKG1vZHVsZV9zdHJ1Y3QpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvY29yZS9tc2dfc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9jb3JlL21zZ19zbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjUxN2ViLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL21zZ19zbS5jCisr KyAvZGV2L251bGwKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiBtc2dfc20uYwotICoKLSAqIERT UC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vz c29ycy4KLSAqCi0gKiBJbXBsZW1lbnRzIHVwcGVyIGVkZ2UgZnVuY3Rpb25zIGZvciBCcmlkZ2Ug bWVzc2FnZSBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLwotI2luY2x1ZGUgPGRzcGJyaWRn ZS9zeW5jLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0 Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCi0jaW5jbHVkZSA8ZHNwYnJp ZGdlL2lvX3NtLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBU aGlzICovCi0jaW5jbHVkZSA8X21zZ19zbS5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Btc2cu aD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFBy b3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgYWRkX25ld19tc2coc3RydWN0IGxpc3RfaGVhZCAqbXNn X2xpc3QpOwotc3RhdGljIHZvaWQgZGVsZXRlX21zZ19tZ3Ioc3RydWN0IG1zZ19tZ3IgKmhtc2df bWdyKTsKLXN0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfcXVldWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNn X3F1ZXVlX29iaiwgdTMyIG51bV90b19kc3ApOwotc3RhdGljIHZvaWQgZnJlZV9tc2dfbGlzdChz dHJ1Y3QgbGlzdF9oZWFkICptc2dfbGlzdCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX21z Z19jcmVhdGUgPT09PT09PT0KLSAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgbWVz c2FnZSBxdWV1ZXMuIE9ubHkgb25lIG9mIHRoZXNlIG9iamVjdHMKLSAqICAgICAgY2FuIGV4aXN0 IHBlciBkZXZpY2Ugb2JqZWN0LgotICovCi1pbnQgYnJpZGdlX21zZ19jcmVhdGUoc3RydWN0IG1z Z19tZ3IgKiptc2dfbWFuLAotCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0J CQkgICAgIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKQotewotCXN0cnVjdCBtc2dfbWdyICptc2df bWdyX29iajsKLQlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOwotCWludCBzdGF0dXMgPSAwOwotCi0J aWYgKCFtc2dfbWFuIHx8ICFtc2dfY2FsbGJhY2sgfHwgIWhkZXZfb2JqKQotCQlyZXR1cm4gLUVG QVVMVDsKLQotCWRldl9nZXRfaW9fbWdyKGhkZXZfb2JqLCAmaGlvX21ncik7Ci0JaWYgKCFoaW9f bWdyKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCSptc2dfbWFuID0gTlVMTDsKLQkvKiBBbGxvY2F0 ZSBtc2dfY3RybCBtYW5hZ2VyIG9iamVjdCAqLwotCW1zZ19tZ3Jfb2JqID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IG1zZ19tZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1zZ19tZ3Jfb2JqKQotCQly ZXR1cm4gLUVOT01FTTsKLQotCW1zZ19tZ3Jfb2JqLT5vbl9leGl0ID0gbXNnX2NhbGxiYWNrOwot CW1zZ19tZ3Jfb2JqLT5pb21nciA9IGhpb19tZ3I7Ci0JLyogTGlzdCBvZiBNU0dfUVVFVUVzICov Ci0JSU5JVF9MSVNUX0hFQUQoJm1zZ19tZ3Jfb2JqLT5xdWV1ZV9saXN0KTsKLQkvKgotCSAqIFF1 ZXVlcyBvZiBtZXNzYWdlIGZyYW1lcyBmb3IgbWVzc2FnZXMgdG8gdGhlIERTUC4gTWVzc2FnZQot CSAqIGZyYW1lcyB3aWxsIG9ubHkgYmUgYWRkZWQgdG8gdGhlIGZyZWUgcXVldWUgd2hlbiBhCi0J ICogbXNnX3F1ZXVlIG9iamVjdCBpcyBjcmVhdGVkLgotCSAqLwotCUlOSVRfTElTVF9IRUFEKCZt c2dfbWdyX29iai0+bXNnX2ZyZWVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1zZ19tZ3Jfb2Jq LT5tc2dfdXNlZF9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbXNnX21ncl9vYmotPm1zZ19tZ3Jf bG9jayk7Ci0KLQkvKgotCSAqIENyZWF0ZSBhbiBldmVudCB0byBiZSB1c2VkIGJ5IGJyaWRnZV9t c2dfcHV0KCkgaW4gd2FpdGluZwotCSAqIGZvciBhbiBhdmFpbGFibGUgZnJlZSBmcmFtZSBmcm9t IHRoZSBtZXNzYWdlIG1hbmFnZXIuCi0JICovCi0JbXNnX21ncl9vYmotPnN5bmNfZXZlbnQgPQot CQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luY19vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAo IW1zZ19tZ3Jfb2JqLT5zeW5jX2V2ZW50KSB7Ci0JCWtmcmVlKG1zZ19tZ3Jfb2JqKTsKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JfQotCXN5bmNfaW5pdF9ldmVudChtc2dfbWdyX29iai0+c3luY19ldmVu dCk7Ci0KLQkqbXNnX21hbiA9IG1zZ19tZ3Jfb2JqOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQot LyoKLSAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSA9PT09PT09PQotICogICAg ICBDcmVhdGUgYSBtc2dfcXVldWUgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIG1lc3NhZ2VzIHRvL2Zy b20gYSBub2RlCi0gKiAgICAgIG9uIHRoZSBEU1AuCi0gKi8KLWludCBicmlkZ2VfbXNnX2NyZWF0 ZV9xdWV1ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IsIHN0cnVjdCBtc2dfcXVldWUgKiptc2dx LAotCQkJCXUzMiBtc2dxX2lkLCB1MzIgbWF4X21zZ3MsIHZvaWQgKmFyZykKLXsKLQl1MzIgaTsK LQl1MzIgbnVtX2FsbG9jYXRlZCA9IDA7Ci0Jc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3E7Ci0JaW50 IHN0YXR1cyA9IDA7Ci0KLQlpZiAoIWhtc2dfbWdyIHx8IG1zZ3EgPT0gTlVMTCkKLQkJcmV0dXJu IC1FRkFVTFQ7Ci0KLQkqbXNncSA9IE5VTEw7Ci0JLyogQWxsb2NhdGUgbXNnX3F1ZXVlIG9iamVj dCAqLwotCW1zZ19xID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zZ19xdWV1ZSksIEdGUF9LRVJO RUwpOwotCWlmICghbXNnX3EpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbXNnX3EtPm1heF9tc2dz ID0gbWF4X21zZ3M7Ci0JbXNnX3EtPm1zZ19tZ3IgPSBobXNnX21ncjsKLQltc2dfcS0+YXJnID0g YXJnOwkvKiBOb2RlIGhhbmRsZSAqLwotCW1zZ19xLT5tc2dxX2lkID0gbXNncV9pZDsJLyogTm9k ZSBlbnYgKG5vdCB2YWxpZCB5ZXQpICovCi0JLyogUXVldWVzIG9mIE1lc3NhZ2UgZnJhbWVzIGZv ciBtZXNzYWdlcyBmcm9tIHRoZSBEU1AgKi8KLQlJTklUX0xJU1RfSEVBRCgmbXNnX3EtPm1zZ19m cmVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtc2dfcS0+bXNnX3VzZWRfbGlzdCk7Ci0KLQkv KiAgQ3JlYXRlIGV2ZW50IHRoYXQgd2lsbCBiZSBzaWduYWxsZWQgd2hlbiBhIG1lc3NhZ2UgZnJv bQotCSAqICB0aGUgRFNQIGlzIGF2YWlsYWJsZS4gKi8KLQltc2dfcS0+c3luY19ldmVudCA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmICghbXNn X3EtPnN5bmNfZXZlbnQpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwot Ci0JfQotCXN5bmNfaW5pdF9ldmVudChtc2dfcS0+c3luY19ldmVudCk7Ci0KLQkvKiBDcmVhdGUg YSBub3RpZmljYXRpb24gbGlzdCBmb3IgbWVzc2FnZSByZWFkeSBub3RpZmljYXRpb24uICovCi0J bXNnX3EtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFtc2dfcS0+bnRmeV9vYmopIHsKLQkJc3RhdHVzID0gLUVOT01FTTsK LQkJZ290byBvdXRfZXJyOwotCX0KLQludGZ5X2luaXQobXNnX3EtPm50Znlfb2JqKTsKLQotCS8q ICBDcmVhdGUgZXZlbnRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN5bmNocm9uaXplIGNsZWFudXAK LQkgKiAgd2hlbiB0aGUgb2JqZWN0IGlzIGRlbGV0ZWQuIHN5bmNfZG9uZSB3aWxsIGJlIHNldCB0 bwotCSAqICB1bmJsb2NrIHRocmVhZHMgaW4gTVNHX1B1dCgpIG9yIE1TR19HZXQoKS4gc3luY19k b25lX2FjawotCSAqICB3aWxsIGJlIHNldCBieSB0aGUgdW5ibG9ja2VkIHRocmVhZCB0byBzaWdu YWwgdGhhdCBpdAotCSAqICBpcyB1bmJsb2NrZWQgYW5kIHdpbGwgbm8gbG9uZ2VyIHJlZmVyZW5j ZSB0aGUgb2JqZWN0LiAqLwotCW1zZ19xLT5zeW5jX2RvbmUgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3Qgc3luY19vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1zZ19xLT5zeW5jX2RvbmUpIHsK LQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQlzeW5jX2luaXRfZXZl bnQobXNnX3EtPnN5bmNfZG9uZSk7Ci0KLQltc2dfcS0+c3luY19kb25lX2FjayA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmICghbXNnX3EtPnN5 bmNfZG9uZV9hY2spIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0K LQlzeW5jX2luaXRfZXZlbnQobXNnX3EtPnN5bmNfZG9uZV9hY2spOwotCi0JLyogRW50ZXIgY3Jp dGljYWwgc2VjdGlvbiAqLwotCXNwaW5fbG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7 Ci0JLyogSW5pdGlhbGl6ZSBtZXNzYWdlIGZyYW1lcyBhbmQgcHV0IGluIGFwcHJvcHJpYXRlIHF1 ZXVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXhfbXNncyAmJiAhc3RhdHVzOyBpKyspIHsKLQkJ c3RhdHVzID0gYWRkX25ld19tc2coJmhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKLQkJaWYgKCFz dGF0dXMpIHsKLQkJCW51bV9hbGxvY2F0ZWQrKzsKLQkJCXN0YXR1cyA9IGFkZF9uZXdfbXNnKCZt c2dfcS0+bXNnX2ZyZWVfbGlzdCk7Ci0JCX0KLQl9Ci0JaWYgKHN0YXR1cykgewotCQlzcGluX3Vu bG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0K LQlsaXN0X2FkZF90YWlsKCZtc2dfcS0+bGlzdF9lbGVtLCAmaG1zZ19tZ3ItPnF1ZXVlX2xpc3Qp OwotCSptc2dxID0gbXNnX3E7Ci0JLyogU2lnbmFsIHRoYXQgZnJlZSBmcmFtZXMgYXJlIG5vdyBh dmFpbGFibGUgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkK LQkJc3luY19zZXRfZXZlbnQoaG1zZ19tZ3ItPnN5bmNfZXZlbnQpOwotCi0JLyogRXhpdCBjcml0 aWNhbCBzZWN0aW9uICovCi0Jc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2sp OwotCi0JcmV0dXJuIDA7Ci1vdXRfZXJyOgotCWRlbGV0ZV9tc2dfcXVldWUobXNnX3EsIG51bV9h bGxvY2F0ZWQpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdl X21zZ19kZWxldGUgPT09PT09PT0KLSAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBh bGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGUoKS4KLSAqLwotdm9pZCBicmlkZ2VfbXNnX2Rl bGV0ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCi17Ci0JZGVsZXRlX21zZ19tZ3IoaG1zZ19t Z3IpOwotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9tc2dfZGVsZXRlX3F1ZXVlID09PT09 PT09Ci0gKiAgICAgIERlbGV0ZSBhIG1zZ19jdHJsIHF1ZXVlIGFsbG9jYXRlZCBpbiBicmlkZ2Vf bXNnX2NyZWF0ZV9xdWV1ZS4KLSAqLwotdm9pZCBicmlkZ2VfbXNnX2RlbGV0ZV9xdWV1ZShzdHJ1 Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqKQotewotCXN0cnVjdCBtc2dfbWdyICpobXNnX21n cjsKLQl1MzIgaW9fbXNnX3BlbmQ7Ci0KLQlpZiAoIW1zZ19xdWV1ZV9vYmogfHwgIW1zZ19xdWV1 ZV9vYmotPm1zZ19tZ3IpCi0JCXJldHVybjsKLQotCWhtc2dfbWdyID0gbXNnX3F1ZXVlX29iai0+ bXNnX21ncjsKLQltc2dfcXVldWVfb2JqLT5kb25lID0gdHJ1ZTsKLQkvKiAgVW5ibG9jayBhbGwg dGhyZWFkcyBibG9ja2VkIGluIE1TR19HZXQoKSBvciBNU0dfUHV0KCkuICovCi0JaW9fbXNnX3Bl bmQgPSBtc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZDsKLQl3aGlsZSAoaW9fbXNnX3BlbmQpIHsK LQkJLyogVW5ibG9jayB0aHJlYWQgKi8KLQkJc3luY19zZXRfZXZlbnQobXNnX3F1ZXVlX29iai0+ c3luY19kb25lKTsKLQkJLyogV2FpdCBmb3IgYWNrbm93bGVkZ2VtZW50ICovCi0JCXN5bmNfd2Fp dF9vbl9ldmVudChtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmVfYWNrLCBTWU5DX0lORklOSVRFKTsK LQkJaW9fbXNnX3BlbmQgPSBtc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZDsKLQl9Ci0JLyogUmVt b3ZlIG1lc3NhZ2UgcXVldWUgZnJvbSBobXNnX21nci0+cXVldWVfbGlzdCAqLwotCXNwaW5fbG9j a19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0JbGlzdF9kZWwoJm1zZ19xdWV1ZV9vYmot Pmxpc3RfZWxlbSk7Ci0JLyogRnJlZSB0aGUgbWVzc2FnZSBxdWV1ZSBvYmplY3QgKi8KLQlkZWxl dGVfbXNnX3F1ZXVlKG1zZ19xdWV1ZV9vYmosIG1zZ19xdWV1ZV9vYmotPm1heF9tc2dzKTsKLQlp ZiAobGlzdF9lbXB0eSgmaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKQotCQlzeW5jX3Jlc2V0X2V2 ZW50KGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKLQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1z Z19tZ3JfbG9jayk7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX21zZ19nZXQgPT09PT09 PT0KLSAqICAgICAgR2V0IGEgbWVzc2FnZSBmcm9tIGEgbXNnX2N0cmwgcXVldWUuCi0gKi8KLWlu dCBicmlkZ2VfbXNnX2dldChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAotCQkJICBz dHJ1Y3QgZHNwX21zZyAqcG1zZywgdTMyIHV0aW1lb3V0KQotewotCXN0cnVjdCBtc2dfZnJhbWUg Km1zZ19mcmFtZV9vYmo7Ci0Jc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwotCXN0cnVjdCBzeW5j X29iamVjdCAqc3luY3NbMl07Ci0JdTMyIGluZGV4OwotCWludCBzdGF0dXMgPSAwOwotCi0JaWYg KCFtc2dfcXVldWVfb2JqIHx8IHBtc2cgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlo bXNnX21nciA9IG1zZ19xdWV1ZV9vYmotPm1zZ19tZ3I7Ci0KLQlzcGluX2xvY2tfYmgoJmhtc2df bWdyLT5tc2dfbWdyX2xvY2spOwotCS8qIElmIGEgbWVzc2FnZSBpcyBhbHJlYWR5IHRoZXJlLCBn ZXQgaXQgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJm1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3Qp KSB7Ci0JCW1zZ19mcmFtZV9vYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZtc2dfcXVldWVfb2JqLT5t c2dfdXNlZF9saXN0LAotCQkJCXN0cnVjdCBtc2dfZnJhbWUsIGxpc3RfZWxlbSk7Ci0JCWxpc3Rf ZGVsKCZtc2dfZnJhbWVfb2JqLT5saXN0X2VsZW0pOwotCQkqcG1zZyA9IG1zZ19mcmFtZV9vYmot Pm1zZ19kYXRhLm1zZzsKLQkJbGlzdF9hZGRfdGFpbCgmbXNnX2ZyYW1lX29iai0+bGlzdF9lbGVt LAotCQkJCSZtc2dfcXVldWVfb2JqLT5tc2dfZnJlZV9saXN0KTsKLQkJaWYgKGxpc3RfZW1wdHko Jm1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpKQotCQkJc3luY19yZXNldF9ldmVudChtc2df cXVldWVfb2JqLT5zeW5jX2V2ZW50KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2df bWdyX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobXNnX3F1ZXVlX29iai0+ZG9uZSkg ewotCQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0JCXJldHVybiAt RVBFUk07Ci0JfQotCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kKys7Ci0Jc3Bpbl91bmxvY2tf YmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOwotCi0JLyoKLQkgKiBXYWl0IHRpbCBtZXNzYWdl IGlzIGF2YWlsYWJsZSwgdGltZW91dCwgb3IgZG9uZS4gV2UgZG9uJ3QKLQkgKiBoYXZlIHRvIHNj aGVkdWxlIHRoZSBEUEMsIHNpbmNlIHRoZSBEU1Agd2lsbCBzZW5kIG1lc3NhZ2VzCi0JICogd2hl biB0aGV5IGFyZSBhdmFpbGFibGUuCi0JICovCi0Jc3luY3NbMF0gPSBtc2dfcXVldWVfb2JqLT5z eW5jX2V2ZW50OwotCXN5bmNzWzFdID0gbXNnX3F1ZXVlX29iai0+c3luY19kb25lOwotCXN0YXR1 cyA9IHN5bmNfd2FpdF9vbl9tdWx0aXBsZV9ldmVudHMoc3luY3MsIDIsIHV0aW1lb3V0LCAmaW5k ZXgpOwotCi0Jc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKLQlpZiAobXNn X3F1ZXVlX29iai0+ZG9uZSkgewotCQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZC0tOwotCQlz cGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0JCS8qCi0JCSAqIFNpZ25h bCB0aGF0IHdlJ3JlIG5vdCBnb2luZyB0byBhY2Nlc3MgbXNnX3F1ZXVlX29iagotCQkgKiBhbnlt b3JlLCBzbyBpdCBjYW4gYmUgZGVsZXRlZC4KLQkJICovCi0JCXN5bmNfc2V0X2V2ZW50KG1zZ19x dWV1ZV9vYmotPnN5bmNfZG9uZV9hY2spOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQlpZiAoIXN0 YXR1cyAmJiAhbGlzdF9lbXB0eSgmbXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCkpIHsKLQkJ LyogR2V0IG1zZyBmcm9tIHVzZWQgbGlzdCAqLwotCQltc2dfZnJhbWVfb2JqID0gbGlzdF9maXJz dF9lbnRyeSgmbXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCwKLQkJCQlzdHJ1Y3QgbXNnX2Zy YW1lLCBsaXN0X2VsZW0pOwotCQlsaXN0X2RlbCgmbXNnX2ZyYW1lX29iai0+bGlzdF9lbGVtKTsK LQkJLyogQ29weSBtZXNzYWdlIGludG8gcG1zZyBhbmQgcHV0IGZyYW1lIG9uIHRoZSBmcmVlIGxp c3QgKi8KLQkJKnBtc2cgPSBtc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2c7Ci0JCWxpc3RfYWRk X3RhaWwoJm1zZ19mcmFtZV9vYmotPmxpc3RfZWxlbSwKLQkJCQkmbXNnX3F1ZXVlX29iai0+bXNn X2ZyZWVfbGlzdCk7Ci0JfQotCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07Ci0JLyogUmVz ZXQgdGhlIGV2ZW50IGlmIHRoZXJlIGFyZSBzdGlsbCBxdWV1ZWQgbWVzc2FnZXMgKi8KLQlpZiAo IWxpc3RfZW1wdHkoJm1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpKQotCQlzeW5jX3NldF9l dmVudChtc2dfcXVldWVfb2JqLT5zeW5jX2V2ZW50KTsKLQotCXNwaW5fdW5sb2NrX2JoKCZobXNn X21nci0+bXNnX21ncl9sb2NrKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gYnJpZGdlX21zZ19wdXQgPT09PT09PT0KLSAqICAgICAgUHV0IGEgbWVzc2FnZSBvbnRv IGEgbXNnX2N0cmwgcXVldWUuCi0gKi8KLWludCBicmlkZ2VfbXNnX3B1dChzdHJ1Y3QgbXNnX3F1 ZXVlICptc2dfcXVldWVfb2JqLAotCQkJICBjb25zdCBzdHJ1Y3QgZHNwX21zZyAqcG1zZywgdTMy IHV0aW1lb3V0KQotewotCXN0cnVjdCBtc2dfZnJhbWUgKm1zZ19mcmFtZV9vYmo7Ci0Jc3RydWN0 IG1zZ19tZ3IgKmhtc2dfbWdyOwotCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY3NbMl07Ci0JdTMy IGluZGV4OwotCWludCBzdGF0dXM7Ci0KLQlpZiAoIW1zZ19xdWV1ZV9vYmogfHwgIXBtc2cgfHwg IW1zZ19xdWV1ZV9vYmotPm1zZ19tZ3IpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaG1zZ19tZ3Ig PSBtc2dfcXVldWVfb2JqLT5tc2dfbWdyOwotCi0Jc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNn X21ncl9sb2NrKTsKLQotCS8qIElmIGEgbWVzc2FnZSBmcmFtZSBpcyBhdmFpbGFibGUsIHVzZSBp dCAqLwotCWlmICghbGlzdF9lbXB0eSgmaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKSB7Ci0JCW1z Z19mcmFtZV9vYmogPSBsaXN0X2ZpcnN0X2VudHJ5KCZobXNnX21nci0+bXNnX2ZyZWVfbGlzdCwK LQkJCQlzdHJ1Y3QgbXNnX2ZyYW1lLCBsaXN0X2VsZW0pOwotCQlsaXN0X2RlbCgmbXNnX2ZyYW1l X29iai0+bGlzdF9lbGVtKTsKLQkJbXNnX2ZyYW1lX29iai0+bXNnX2RhdGEubXNnID0gKnBtc2c7 Ci0JCW1zZ19mcmFtZV9vYmotPm1zZ19kYXRhLm1zZ3FfaWQgPQotCQkJbXNnX3F1ZXVlX29iai0+ bXNncV9pZDsKLQkJbGlzdF9hZGRfdGFpbCgmbXNnX2ZyYW1lX29iai0+bGlzdF9lbGVtLAotCQkJ CSZobXNnX21nci0+bXNnX3VzZWRfbGlzdCk7Ci0JCWhtc2dfbWdyLT5tc2dzX3BlbmRpbmcrKzsK LQotCQlpZiAobGlzdF9lbXB0eSgmaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKQotCQkJc3luY19y ZXNldF9ldmVudChobXNnX21nci0+c3luY19ldmVudCk7Ci0KLQkJLyogUmVsZWFzZSBjcml0aWNh bCBzZWN0aW9uIGJlZm9yZSBzY2hlZHVsaW5nIERQQyAqLwotCQlzcGluX3VubG9ja19iaCgmaG1z Z19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0JCS8qIFNjaGVkdWxlIGEgRFBDLCB0byBkbyB0aGUgYWN0 dWFsIGRhdGEgdHJhbnNmZXI6ICovCi0JCWlvc21fc2NoZWR1bGUoaG1zZ19tZ3ItPmlvbWdyKTsK LQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpIHsKLQkJc3Bpbl91 bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOwotCQlyZXR1cm4gLUVQRVJNOwotCX0K LQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZCsrOwotCi0Jc3Bpbl91bmxvY2tfYmgoJmhtc2df bWdyLT5tc2dfbWdyX2xvY2spOwotCi0JLyogV2FpdCB0aWwgYSBmcmVlIG1lc3NhZ2UgZnJhbWUg aXMgYXZhaWxhYmxlLCB0aW1lb3V0LCBvciBkb25lICovCi0Jc3luY3NbMF0gPSBobXNnX21nci0+ c3luY19ldmVudDsKLQlzeW5jc1sxXSA9IG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZTsKLQlzdGF0 dXMgPSBzeW5jX3dhaXRfb25fbXVsdGlwbGVfZXZlbnRzKHN5bmNzLCAyLCB1dGltZW91dCwgJmlu ZGV4KTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JLyogRW50ZXIgY3JpdGlj YWwgc2VjdGlvbiAqLwotCXNwaW5fbG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7Ci0J aWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpIHsKLQkJbXNnX3F1ZXVlX29iai0+aW9fbXNnX3BlbmQt LTsKLQkJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCi0JCXNwaW5fdW5sb2NrX2JoKCZobXNn X21nci0+bXNnX21ncl9sb2NrKTsKLQkJLyoKLQkJICogU2lnbmFsIHRoYXQgd2UncmUgbm90IGdv aW5nIHRvIGFjY2VzcyBtc2dfcXVldWVfb2JqCi0JCSAqIGFueW1vcmUsIHNvIGl0IGNhbiBiZSBk ZWxldGVkLgotCQkgKi8KLQkJc3luY19zZXRfZXZlbnQobXNnX3F1ZXVlX29iai0+c3luY19kb25l X2Fjayk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKGxpc3RfZW1wdHkoJmhtc2dfbWdy LT5tc2dfZnJlZV9saXN0KSkgewotCQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3Jf bG9jayk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIEdldCBtc2cgZnJvbSBmcmVlIGxp c3QgKi8KLQltc2dfZnJhbWVfb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmaG1zZ19tZ3ItPm1zZ19m cmVlX2xpc3QsCi0JCQlzdHJ1Y3QgbXNnX2ZyYW1lLCBsaXN0X2VsZW0pOwotCS8qCi0JICogQ29w eSBtZXNzYWdlIGludG8gcG1zZyBhbmQgcHV0IGZyYW1lIG9uIHRoZQotCSAqIHVzZWQgbGlzdC4K LQkgKi8KLQlsaXN0X2RlbCgmbXNnX2ZyYW1lX29iai0+bGlzdF9lbGVtKTsKLQltc2dfZnJhbWVf b2JqLT5tc2dfZGF0YS5tc2cgPSAqcG1zZzsKLQltc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2dx X2lkID0gbXNnX3F1ZXVlX29iai0+bXNncV9pZDsKLQlsaXN0X2FkZF90YWlsKCZtc2dfZnJhbWVf b2JqLT5saXN0X2VsZW0sICZobXNnX21nci0+bXNnX3VzZWRfbGlzdCk7Ci0JaG1zZ19tZ3ItPm1z Z3NfcGVuZGluZysrOwotCS8qCi0JICogU2NoZWR1bGUgYSBEUEMsIHRvIGRvIHRoZSBhY3R1YWwK LQkgKiBkYXRhIHRyYW5zZmVyLgotCSAqLwotCWlvc21fc2NoZWR1bGUoaG1zZ19tZ3ItPmlvbWdy KTsKLQotCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07Ci0JLyogUmVzZXQgZXZlbnQgaWYg dGhlcmUgYXJlIHN0aWxsIGZyYW1lcyBhdmFpbGFibGUgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmht c2dfbWdyLT5tc2dfZnJlZV9saXN0KSkKLQkJc3luY19zZXRfZXZlbnQoaG1zZ19tZ3ItPnN5bmNf ZXZlbnQpOwotCi0JLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCi0Jc3Bpbl91bmxvY2tfYmgo Jmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KLSAqLwotaW50IGJyaWRn ZV9tc2dfcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCi0J CQkJICAgdTMyIGV2ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwKLQkJCQkgICBzdHJ1Y3QgZHNw X25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQotCWlm ICghbXNnX3F1ZXVlX29iaiB8fCAhaG5vdGlmaWNhdGlvbikgewotCQlzdGF0dXMgPSAtRU5PTUVN OwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCWlmICghKGV2ZW50X21hc2sgPT0gRFNQX05PREVN RVNTQUdFUkVBRFkgfHwgZXZlbnRfbWFzayA9PSAwKSkgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0J CWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVO VCkgewotCQlzdGF0dXMgPSAtRUJBRFI7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JaWYgKGV2 ZW50X21hc2spCi0JCXN0YXR1cyA9IG50ZnlfcmVnaXN0ZXIobXNnX3F1ZXVlX29iai0+bnRmeV9v YmosIGhub3RpZmljYXRpb24sCi0JCQkJCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSk7Ci0JZWxz ZQotCQlzdGF0dXMgPSBudGZ5X3VucmVnaXN0ZXIobXNnX3F1ZXVlX29iai0+bnRmeV9vYmosCi0J CQkJCQkJaG5vdGlmaWNhdGlvbik7Ci0KLQlpZiAoc3RhdHVzID09IC1FSU5WQUwpIHsKLQkJLyog IE5vdCByZWdpc3RlcmVkLiBPaywgc2luY2Ugd2UgY291bGRuJ3QgaGF2ZSBrbm93bi4gTm9kZQot CQkgKiAgbm90aWZpY2F0aW9ucyBhcmUgc3BsaXQgYmV0d2VlbiBub2RlIHN0YXRlIGNoYW5nZSBo YW5kbGVkCi0JCSAqICBieSBOT0RFLCBhbmQgbWVzc2FnZSByZWFkeSBoYW5kbGVkIGJ5IG1zZ19j dHJsLiAqLwotCQlzdGF0dXMgPSAwOwotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX21zZ19zZXRfcXVldWVfaWQgPT09PT09PT0KLSAq Lwotdm9pZCBicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVl dWVfb2JqLCB1MzIgbXNncV9pZCkKLXsKLQkvKgotCSAqICBBIG1lc3NhZ2UgcXVldWUgbXVzdCBi ZSBjcmVhdGVkIHdoZW4gYSBub2RlIGlzIGFsbG9jYXRlZCwKLQkgKiAgc28gdGhhdCBub2RlX3Jl Z2lzdGVyX25vdGlmeSgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBub2RlCi0JICogIGlzIGNy ZWF0ZWQuIFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIG5vZGUgZW52aXJvbm1lbnQgdW50aWwgdGhl Ci0JICogIG5vZGUgaXMgY3JlYXRlZCwgd2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBtc2df cXVldWVfb2JqLT5tc2dxX2lkCi0JICogIHRvIHRoZSBub2RlIGVudmlyb25tZW50LCBhZnRlciB0 aGUgbm9kZSBpcyBjcmVhdGVkLgotCSAqLwotCWlmIChtc2dfcXVldWVfb2JqKQotCQltc2dfcXVl dWVfb2JqLT5tc2dxX2lkID0gbXNncV9pZDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBhZGRfbmV3 X21zZyA9PT09PT09PQotICogICAgICBNdXN0IGJlIGNhbGxlZCBpbiBtZXNzYWdlIG1hbmFnZXIg Y3JpdGljYWwgc2VjdGlvbi4KLSAqLwotc3RhdGljIGludCBhZGRfbmV3X21zZyhzdHJ1Y3QgbGlz dF9oZWFkICptc2dfbGlzdCkKLXsKLQlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOwotCi0JcG1zZyA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2dfZnJhbWUpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXBt c2cpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbGlzdF9hZGRfdGFpbCgmcG1zZy0+bGlzdF9lbGVt LCBtc2dfbGlzdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZWxldGVf bXNnX21nciA9PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBkZWxldGVfbXNnX21ncihzdHJ1Y3Qg bXNnX21nciAqaG1zZ19tZ3IpCi17Ci0JaWYgKCFobXNnX21ncikKLQkJcmV0dXJuOwotCi0JLyog RklYTUU6IGZyZWUgZWxlbWVudHMgZnJvbSBxdWV1ZV9saXN0PyAqLwotCWZyZWVfbXNnX2xpc3Qo Jmhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKLQlmcmVlX21zZ19saXN0KCZobXNnX21nci0+bXNn X3VzZWRfbGlzdCk7Ci0Ja2ZyZWUoaG1zZ19tZ3ItPnN5bmNfZXZlbnQpOwotCWtmcmVlKGhtc2df bWdyKTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZWxldGVfbXNnX3F1ZXVlID09PT09PT09Ci0g Ki8KLXN0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfcXVldWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1 ZXVlX29iaiwgdTMyIG51bV90b19kc3ApCi17Ci0Jc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwot CXN0cnVjdCBtc2dfZnJhbWUgKnBtc2csICp0bXA7Ci0JdTMyIGk7Ci0KLQlpZiAoIW1zZ19xdWV1 ZV9vYmogfHwgIW1zZ19xdWV1ZV9vYmotPm1zZ19tZ3IpCi0JCXJldHVybjsKLQotCWhtc2dfbWdy ID0gbXNnX3F1ZXVlX29iai0+bXNnX21ncjsKLQotCS8qIFB1bGwgb2ZmIG51bV90b19kc3AgbWVz c2FnZSBmcmFtZXMgZnJvbSBNc2cgbWFuYWdlciBhbmQgZnJlZSAqLwotCWkgPSAwOwotCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwbXNnLCB0bXAsICZobXNnX21nci0+bXNnX2ZyZWVfbGlzdCwK LQkJCWxpc3RfZWxlbSkgewotCQlsaXN0X2RlbCgmcG1zZy0+bGlzdF9lbGVtKTsKLQkJa2ZyZWUo cG1zZyk7Ci0JCWlmIChpKysgPj0gbnVtX3RvX2RzcCkKLQkJCWJyZWFrOwotCX0KLQotCWZyZWVf bXNnX2xpc3QoJm1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QpOwotCWZyZWVfbXNnX2xpc3Qo Jm1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpOwotCi0JaWYgKG1zZ19xdWV1ZV9vYmotPm50 Znlfb2JqKSB7Ci0JCW50ZnlfZGVsZXRlKG1zZ19xdWV1ZV9vYmotPm50Znlfb2JqKTsKLQkJa2Zy ZWUobXNnX3F1ZXVlX29iai0+bnRmeV9vYmopOwotCX0KLQotCWtmcmVlKG1zZ19xdWV1ZV9vYmot PnN5bmNfZXZlbnQpOwotCWtmcmVlKG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZSk7Ci0Ja2ZyZWUo bXNnX3F1ZXVlX29iai0+c3luY19kb25lX2Fjayk7Ci0KLQlrZnJlZShtc2dfcXVldWVfb2JqKTsK LX0KLQotLyoKLSAqICA9PT09PT09PSBmcmVlX21zZ19saXN0ID09PT09PT09Ci0gKi8KLXN0YXRp YyB2b2lkIGZyZWVfbXNnX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbXNnX2xpc3QpCi17Ci0Jc3Ry dWN0IG1zZ19mcmFtZSAqcG1zZywgKnRtcDsKLQotCWlmICghbXNnX2xpc3QpCi0JCXJldHVybjsK LQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwbXNnLCB0bXAsIG1zZ19saXN0LCBsaXN0X2Vs ZW0pIHsKLQkJbGlzdF9kZWwoJnBtc2ctPmxpc3RfZWxlbSk7Ci0JCWtmcmVlKHBtc2cpOwotCX0K LX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3N5bmMuYyBi L2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3N5bmMuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNzQzZmYwOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlk c3BicmlkZ2UvY29yZS9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoK LSAqIHN5bmMuYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlv bnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBTeW5jaHJvbml6YXRpb24gc2Vydmlj ZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhv c3QgT1MgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotCi0vKiAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9z eW5jLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL250ZnkuaD4KLQotREVGSU5FX1NQSU5MT0NLKHN5 bmNfbG9jayk7Ci0KLS8qKgotICogc3luY19zZXRfZXZlbnQoKSAtIHNldCBvciBzaWduYWwgYW5k IHNwZWNpZmllZCBldmVudAotICogQGV2ZW50OglFdmVudCB0byBiZSBzZXQuLgotICoKLSAqIHNl dCB0aGUgQGV2ZW50LCBpZiB0aGVyZSBpcyBhbiB0aHJlYWQgd2FpdGluZyBmb3IgdGhlIGV2ZW50 Ci0gKiBpdCB3aWxsIGJlIHdha2VuIHVwLCB0aGlzIGZ1bmN0aW9uIG9ubHkgd2FrZXMgb25lIHRo cmVhZC4KLSAqLwotCi12b2lkIHN5bmNfc2V0X2V2ZW50KHN0cnVjdCBzeW5jX29iamVjdCAqZXZl bnQpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOwotCWNvbXBsZXRlKCZldmVudC0+Y29t cCk7Ci0JaWYgKGV2ZW50LT5tdWx0aV9jb21wKQotCQljb21wbGV0ZShldmVudC0+bXVsdGlfY29t cCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN5bmNfbG9jayk7Ci19Ci0KLS8qKgotICogc3luY193YWl0 X29uX211bHRpcGxlX2V2ZW50cygpIC0gd2FpdHMgZm9yIG11bHRpcGxlIGV2ZW50cyB0byBiZSBz ZXQuCi0gKiBAZXZlbnRzOglBcnJheSBvZiBldmVudHMgdG8gd2FpdCBmb3IgdGhlbS4KLSAqIEBj b3VudDoJbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBhcnJheS4KLSAqIEB0aW1lb3V0CXRpbWVv dXQgb24gd2FpdGluZyBmb3IgdGhlIGV2ZXRucy4KLSAqIEBwdV9pbmRleAlpbmRleCBvZiB0aGUg ZXZlbnQgc2V0LgotICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHdhaXQgdW50aWwgYW55IG9m IHRoZSBhcnJheSBlbGVtZW50IGlzIHNldCBvciB1bnRpbAotICogdGltZW91dC4gSW4gY2FzZSBv ZiBzdWNjZXNzIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZAotICogQHB1X2luZGV4IHdp bGwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBhcnJheSBlbGVtZW50IHNldCBvciBpbiBjYXNlCi0g KiBvZiB0aW1lb3V0IHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRVRJTUUgb3IgaW4gY2FzZSBv ZgotICogaW50ZXJydXB0aW5nIGJ5IGEgc2lnbmFsIGl0IHdpbGwgcmV0dXJuIC1FUEVSTS4KLSAq LwotCi1pbnQgc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3Qg KipldmVudHMsCi0JCQkJICAgICB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKLQkJ CQkgICAgIHVuc2lnbmVkICppbmRleCkKLXsKLQl1bnNpZ25lZCBpOwotCWludCBzdGF0dXMgPSAt RVBFUk07Ci0Jc3RydWN0IGNvbXBsZXRpb24gbV9jb21wOwotCi0JaW5pdF9jb21wbGV0aW9uKCZt X2NvbXApOwotCi0JaWYgKFNZTkNfSU5GSU5JVEUgPT0gdGltZW91dCkKLQkJdGltZW91dCA9IE1B WF9TQ0hFRFVMRV9USU1FT1VUOwotCi0Jc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOwotCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tp XS0+Y29tcCkpIHsKLQkJCXJlaW5pdF9jb21wbGV0aW9uKCZldmVudHNbaV0tPmNvbXApOwotCQkJ KmluZGV4ID0gaTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzeW5jX2xvY2spOwotCQkJc3RhdHVzID0g MDsKLQkJCWdvdG8gZnVuY19lbmQ7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7 IGkrKykKLQkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0gJm1fY29tcDsKLQotCXNwaW5fdW5sb2Nr X2JoKCZzeW5jX2xvY2spOwotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGli bGVfdGltZW91dCgmbV9jb21wLAotCQkJCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkKLQkJ c3RhdHVzID0gLUVUSU1FOwotCi0Jc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOwotCWZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tpXS0+ Y29tcCkpIHsKLQkJCXJlaW5pdF9jb21wbGV0aW9uKCZldmVudHNbaV0tPmNvbXApOwotCQkJKmlu ZGV4ID0gaTsKLQkJCXN0YXR1cyA9IDA7Ci0JCX0KLQkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0g TlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnN5bmNfbG9jayk7Ci1mdW5jX2VuZDoKLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKioKLSAqIGRzcF9ub3RpZmllcl9ldmVudCgpIC0gY2FsbGJhY2sg ZnVuY3Rpb24gdG8gbm9maXR5IGV2ZW50cwotICogQHRoaXM6CQlwb2ludGVyIHRvIGl0c2VsZiBz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sKLSAqIEBldmVudDoJZXZlbnQgdG8gYmUgbm90aWZpZWQuCi0g KiBAZGF0YToJCUN1cnJlbnRseSBub3QgdXNlZC4KLSAqCi0gKi8KLWludCBkc3Bfbm90aWZpZXJf ZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAot CQkJCQkJCXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0ICBudGZ5X2V2ZW50ICpuZSA9IGNvbnRhaW5l cl9vZih0aGlzLCBzdHJ1Y3QgbnRmeV9ldmVudCwKLQkJCQkJCQlub3RpX2Jsb2NrKTsKLQlpZiAo bmUtPmV2ZW50ICYgZXZlbnQpCi0JCXN5bmNfc2V0X2V2ZW50KCZuZS0+c3luY19vYmopOwotCXJl dHVybiBOT1RJRllfT0s7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS90aW9tYXAzNDMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90 aW9tYXAzNDMwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2M2RkOGYuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCisr KyAvZGV2L251bGwKQEAgLTEsMTgxNSArMCwwIEBACi0vKgotICogdGlvbWFwLmMKLSAqCi0gKiBE U1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nl c3NvcnMuCi0gKgotICogUHJvY2Vzc29yIE1hbmFnZXIgRHJpdmVyIGZvciBUSSBPTUFQMzQzMCBF Vk0uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvZHNwLW9tYXAuaD4K LQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gSG9zdCBPUyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0j aW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KLQotLyogIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv ZHJ2Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCi0jaW5j bHVkZSA8aHdfZGVmcy5oPgotI2luY2x1ZGUgPGh3X21tdS5oPgotCi0vKiAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGluayBEcml2ZXIgKi8KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvZHNwZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BjaG5sLmg+Ci0jaW5jbHVkZSA8 ZHNwYnJpZGdlL2RzcGRlaC5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Bpby5oPgotI2luY2x1 ZGUgPGRzcGJyaWRnZS9kc3Btc2cuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+Ci0jaW5j bHVkZSA8ZHNwYnJpZGdlL2lvX3NtLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZG1t Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gTG9jYWwgKi8KLSNpbmNsdWRlICJfdGlvbWFwLmgiCi0jaW5jbHVk ZSAiX3Rpb21hcF9wd3IuaCIKLSNpbmNsdWRlICJ0aW9tYXBfaW8uaCIKLQotLyogT2Zmc2V0IGlu IHNoYXJlZCBtZW0gdG8gd3JpdGUgdG8gaW4gb3JkZXIgdG8gc3luY2hyb25pemUgc3RhcnQgd2l0 aCBEU1AgKi8KLSNkZWZpbmUgU0hNU1lOQ09GRlNFVCA0CQkvKiBHUFAgYnl0ZSBvZmZzZXQgKi8K LQotI2RlZmluZSBCVUZGRVJTSVpFIDEwMjQKLQotI2RlZmluZSBUSUhFTEVOX0FDS1RJTUVPVVQg IDEwMDAwCi0KLSNkZWZpbmUgTU1VX1NFQ1RJT05fQUREUl9NQVNLICAgIDB4RkZGMDAwMDAKLSNk ZWZpbmUgTU1VX1NTRUNUSU9OX0FERFJfTUFTSyAgIDB4RkYwMDAwMDAKLSNkZWZpbmUgTU1VX0xB UkdFX1BBR0VfTUFTSyAgICAgIDB4RkZGRjAwMDAKLSNkZWZpbmUgTU1VX1NNQUxMX1BBR0VfTUFT SyAgICAgIDB4RkZGRkYwMDAKLSNkZWZpbmUgT01BUDNfSVZBMl9CT09UQUREUl9NQVNLIDB4RkZG RkZDMDAKLSNkZWZpbmUgUEFHRVNfSUlfTFZMX1RBQkxFICAgNTEyCi0jZGVmaW5lIFBIWVNfVE9f UEFHRShwaHlzKSAgICAgIHBmbl90b19wYWdlKChwaHlzKSA+PiBQQUdFX1NISUZUKQotCi0vKiBJ VkEgQm9vdCBtb2RlcyAqLwotI2RlZmluZSBESVJFQ1QJCTAKLSNkZWZpbmUgSURMRQkJMQotCi0v KiBGb3J3YXJkIERlY2xhcmF0aW9uczogKi8KLXN0YXRpYyBpbnQgYnJpZGdlX2JyZF9tb25pdG9y KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KTsKLXN0YXRpYyBpbnQgYnJpZGdl X2JyZF9yZWFkKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgdTgg Kmhvc3RfYnVmZiwKLQkJCQkgIHUzMiBkc3BfYWRkciwgdTMyIHVsX251bV9ieXRlcywKLQkJCQkg IHUzMiBtZW1fdHlwZSk7Ci1zdGF0aWMgaW50IGJyaWRnZV9icmRfc3RhcnQoc3RydWN0IGJyaWRn ZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICAgdTMyIGRzcF9hZGRyKTsKLXN0YXRpYyBp bnQgYnJpZGdlX2JyZF9zdGF0dXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQs Ci0JCQkJICAgIGludCAqYm9hcmRfc3RhdGUpOwotc3RhdGljIGludCBicmlkZ2VfYnJkX3N0b3Ao c3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOwotc3RhdGljIGludCBicmlkZ2Vf YnJkX3dyaXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgIHU4 ICpob3N0X2J1ZmYsCi0JCQkJICAgdTMyIGRzcF9hZGRyLCB1MzIgdWxfbnVtX2J5dGVzLAotCQkJ CSAgIHUzMiBtZW1fdHlwZSk7Ci1zdGF0aWMgaW50IGJyaWRnZV9icmRfc2V0X3N0YXRlKHN0cnVj dCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgICB1MzIgYnJkX3N0YXRlKTsK LXN0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fY29weShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0 ICpkZXZfY3R4dCwKLQkJCQkgICB1MzIgZHNwX2Rlc3RfYWRkciwgdTMyIGRzcF9zcmNfYWRkciwK LQkJCQkgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpOwotc3RhdGljIGludCBicmlk Z2VfYnJkX21lbV93cml0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKLQkJ CQkgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAotCQkJCSAgICB1MzIgdWxfbnVtX2J5 dGVzLCB1MzIgbWVtX3R5cGUpOwotc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV9tYXAoc3RydWN0 IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICB1MzIgdWxfbXB1X2FkZHIsIHUz MiB2aXJ0X2FkZHIsCi0JCQkJICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgdWxfbWFwX2F0dHIsCi0J CQkJICBzdHJ1Y3QgcGFnZSAqKm1hcHBlZF9wYWdlcyk7Ci1zdGF0aWMgaW50IGJyaWRnZV9icmRf bWVtX3VuX21hcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKLQkJCQkgICAg IHUzMiB2aXJ0X2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMpOwotc3RhdGljIGludCBicmlkZ2VfZGV2 X2NyZWF0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0Ci0JCQkJCSoqZGV2X2NudHh0LAotCQkJ CQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkJCXN0cnVjdCBjZmdfaG9zdHJlcyAq Y29uZmlnX3BhcmFtKTsKLXN0YXRpYyBpbnQgYnJpZGdlX2Rldl9jdHJsKHN0cnVjdCBicmlkZ2Vf ZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAotCQkJCSAgdTMyIGR3X2NtZCwgdm9pZCAqcGFyZ3Mp Owotc3RhdGljIGludCBicmlkZ2VfZGV2X2Rlc3Ryb3koc3RydWN0IGJyaWRnZV9kZXZfY29udGV4 dCAqZGV2X2N0eHQpOwotc3RhdGljIHUzMiB1c2VyX3ZhMl9wYShzdHJ1Y3QgbW1fc3RydWN0ICpt bSwgdTMyIGFkZHJlc3MpOwotc3RhdGljIGludCBwdGVfdXBkYXRlKHN0cnVjdCBicmlkZ2VfZGV2 X2NvbnRleHQgKmRldl9jdHh0LCB1MzIgcGEsCi0JCQkgICAgIHUzMiB2YSwgdTMyIHNpemUsCi0J CQkgICAgIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycyk7Ci1zdGF0aWMgaW50 IHB0ZV9zZXQoc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdCwgdTMyIHBhLCB1MzIgdmEsCi0JCQkg IHUzMiBzaXplLCBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICphdHRycyk7Ci1zdGF0aWMgaW50 IG1lbV9tYXBfdm1hbGxvYyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwK LQkJCQkgIHUzMiB1bF9tcHVfYWRkciwgdTMyIHZpcnRfYWRkciwKLQkJCQkgIHUzMiB1bF9udW1f Ynl0ZXMsCi0JCQkJICBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICpod19hdHRycyk7Ci0KLWJv b2wgd2FpdF9mb3Jfc3RhcnQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQs Ci0JCQl2b2lkIF9faW9tZW0gKnN5bmNfYWRkcik7Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCi0KLS8qIEF0dHJpYnV0ZXMgb2YgTDIgcGFnZSB0 YWJsZXMgZm9yIERTUCBNTVUgKi8KLXN0cnVjdCBwYWdlX2luZm8gewotCXUzMiBudW1fZW50cmll czsJLyogTnVtYmVyIG9mIHZhbGlkIFBURXMgaW4gdGhlIEwyIFBUICovCi19OwotCi0vKiBBdHRy aWJ1dGVzIHVzZWQgdG8gbWFuYWdlIHRoZSBEU1AgTU1VIHBhZ2UgdGFibGVzICovCi1zdHJ1Y3Qg cGdfdGFibGVfYXR0cnMgewotCXNwaW5sb2NrX3QgcGdfbG9jazsJLyogQ3JpdGljYWwgc2VjdGlv biBvYmplY3QgaGFuZGxlICovCi0KLQl1MzIgbDFfYmFzZV9wYTsJCS8qIFBoeXNpY2FsIGFkZHJl c3Mgb2YgdGhlIEwxIFBUICovCi0JdTMyIGwxX2Jhc2VfdmE7CQkvKiBWaXJ0dWFsICBhZGRyZXNz IG9mIHRoZSBMMSBQVCAqLwotCXUzMiBsMV9zaXplOwkJLyogU2l6ZSBvZiB0aGUgTDEgUFQgKi8K LQl1MzIgbDFfdGJsX2FsbG9jX3BhOwotCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgQWxsb2NhdGVk IG1lbSBmb3IgTDEgdGFibGUuIE1heSBub3QgYmUgYWxpZ25lZCAqLwotCXUzMiBsMV90YmxfYWxs b2NfdmE7Ci0JLyogVmlydHVhbCBhZGRyZXNzIG9mIEFsbG9jYXRlZCBtZW0gZm9yIEwxIHRhYmxl LiBNYXkgbm90IGJlIGFsaWduZWQgKi8KLQl1MzIgbDFfdGJsX2FsbG9jX3N6OwotCS8qIFNpemUg b2YgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGVkIGZvciBMMSB0YWJsZS4KLQkgKiBNYXkgbm90 IGJlIGFsaWduZWQgKi8KLQotCXUzMiBsMl9iYXNlX3BhOwkJLyogUGh5c2ljYWwgYWRkcmVzcyBv ZiB0aGUgTDIgUFQgKi8KLQl1MzIgbDJfYmFzZV92YTsJCS8qIFZpcnR1YWwgIGFkZHJlc3Mgb2Yg dGhlIEwyIFBUICovCi0JdTMyIGwyX3NpemU7CQkvKiBTaXplIG9mIHRoZSBMMiBQVCAqLwotCXUz MiBsMl90YmxfYWxsb2NfcGE7Ci0JLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBBbGxvY2F0ZWQgbWVt IGZvciBMMiB0YWJsZS4gTWF5IG5vdCBiZSBhbGlnbmVkICovCi0JdTMyIGwyX3RibF9hbGxvY192 YTsKLQkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgQWxsb2NhdGVkIG1lbSBmb3IgTDIgdGFibGUuIE1h eSBub3QgYmUgYWxpZ25lZCAqLwotCXUzMiBsMl90YmxfYWxsb2Nfc3o7Ci0JLyogU2l6ZSBvZiBj b25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIEwyIHRhYmxlLgotCSAqIE1heSBub3QgYmUg YWxpZ25lZCAqLwotCi0JdTMyIGwyX251bV9wYWdlczsJLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBM MiBQVCAqLwotCS8qIEFycmF5IFtsMl9udW1fcGFnZXNdIG9mIEwyIFBUIGluZm8gc3RydWN0cyAq LwotCXN0cnVjdCBwYWdlX2luZm8gKnBnX2luZm87Ci19OwotCi0vKgotICogIFRoaXMgQnJpZGdl IGRyaXZlcidzIGZ1bmN0aW9uIGludGVyZmFjZSB0YWJsZS4KLSAqLwotc3RhdGljIHN0cnVjdCBi cmlkZ2VfZHJ2X2ludGVyZmFjZSBkcnZfaW50ZXJmYWNlX2Z4bnMgPSB7Ci0JLyogQnJpZGdlIEFQ SSB2ZXIuIGZvciB3aGljaCB0aGlzIGJyaWRnZSBkcml2ZXIgaXMgYnVpbHQuICovCi0JQlJEX0FQ SV9NQUpPUl9WRVJTSU9OLAotCUJSRF9BUElfTUlOT1JfVkVSU0lPTiwKLQlicmlkZ2VfZGV2X2Ny ZWF0ZSwKLQlicmlkZ2VfZGV2X2Rlc3Ryb3ksCi0JYnJpZGdlX2Rldl9jdHJsLAotCWJyaWRnZV9i cmRfbW9uaXRvciwKLQlicmlkZ2VfYnJkX3N0YXJ0LAotCWJyaWRnZV9icmRfc3RvcCwKLQlicmlk Z2VfYnJkX3N0YXR1cywKLQlicmlkZ2VfYnJkX3JlYWQsCi0JYnJpZGdlX2JyZF93cml0ZSwKLQli cmlkZ2VfYnJkX3NldF9zdGF0ZSwKLQlicmlkZ2VfYnJkX21lbV9jb3B5LAotCWJyaWRnZV9icmRf bWVtX3dyaXRlLAotCWJyaWRnZV9icmRfbWVtX21hcCwKLQlicmlkZ2VfYnJkX21lbV91bl9tYXAs Ci0JLyogVGhlIGZvbGxvd2luZyBDSE5MIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgY2hubF9p by5saWI6ICovCi0JYnJpZGdlX2NobmxfY3JlYXRlLAotCWJyaWRnZV9jaG5sX2Rlc3Ryb3ksCi0J YnJpZGdlX2Nobmxfb3BlbiwKLQlicmlkZ2VfY2hubF9jbG9zZSwKLQlicmlkZ2VfY2hubF9hZGRf aW9fcmVxLAotCWJyaWRnZV9jaG5sX2dldF9pb2MsCi0JYnJpZGdlX2NobmxfY2FuY2VsX2lvLAot CWJyaWRnZV9jaG5sX2ZsdXNoX2lvLAotCWJyaWRnZV9jaG5sX2dldF9pbmZvLAotCWJyaWRnZV9j aG5sX2dldF9tZ3JfaW5mbywKLQlicmlkZ2VfY2hubF9pZGxlLAotCWJyaWRnZV9jaG5sX3JlZ2lz dGVyX25vdGlmeSwKLQkvKiBUaGUgZm9sbG93aW5nIElPIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQg YnkgY2hubF9pby5saWI6ICovCi0JYnJpZGdlX2lvX2NyZWF0ZSwKLQlicmlkZ2VfaW9fZGVzdHJv eSwKLQlicmlkZ2VfaW9fb25fbG9hZGVkLAotCWJyaWRnZV9pb19nZXRfcHJvY19sb2FkLAotCS8q IFRoZSBmb2xsb3dpbmcgbXNnX2N0cmwgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSBjaG5sX2lv LmxpYjogKi8KLQlicmlkZ2VfbXNnX2NyZWF0ZSwKLQlicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSwK LQlicmlkZ2VfbXNnX2RlbGV0ZSwKLQlicmlkZ2VfbXNnX2RlbGV0ZV9xdWV1ZSwKLQlicmlkZ2Vf bXNnX2dldCwKLQlicmlkZ2VfbXNnX3B1dCwKLQlicmlkZ2VfbXNnX3JlZ2lzdGVyX25vdGlmeSwK LQlicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgZHNwX21ib3hfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBpb19tYm94X21z ZywKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGJyaWRnZV9kZXZf Y29udGV4dCAqZGV2X2NvbnRleHQpCi17Ci0JaWYgKGRldl9jb250ZXh0LT5icmRfc3RhdGUgPT0g QlJEX0RTUF9ISUJFUk5BVElPTiB8fAotCSAgICBkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJS RF9ISUJFUk5BVElPTikKLQkJd2FrZV9kc3AoZGV2X2NvbnRleHQsIE5VTEwpOwotCi0JaHdfbW11 X3RsYl9mbHVzaF9hbGwoZGV2X2NvbnRleHQtPmRzcF9tbXVfYmFzZSk7Ci19Ci0KLXN0YXRpYyB2 b2lkIGJhZF9wYWdlX2R1bXAodTMyIHBhLCBzdHJ1Y3QgcGFnZSAqcGcpCi17Ci0JcHJfZW1lcmco IkRTUEJSSURHRTogTUFQIGZ1bmN0aW9uOiBDT1VOVCAwIEZPUiBQQSAweCV4XG4iLCBwYSk7Ci0J cHJfZW1lcmcoIkJhZCBwYWdlIHN0YXRlIGluIHByb2Nlc3MgJyVzJ1xuIgotCQkgInBhZ2U6JXAg ZmxhZ3M6MHglMCpseCBtYXBwaW5nOiVwIG1hcGNvdW50OiVkIGNvdW50OiVkXG4iCi0JCSAiQmFj a3RyYWNlOlxuIiwKLQkJIGN1cnJlbnQtPmNvbW0sIHBnLCAoaW50KSgyICogc2l6ZW9mKHVuc2ln bmVkIGxvbmcpKSwKLQkJICh1bnNpZ25lZCBsb25nKXBnLT5mbGFncywgcGctPm1hcHBpbmcsCi0J CSBwYWdlX21hcGNvdW50KHBnKSwgcGFnZV9jb3VudChwZykpOwotCWR1bXBfc3RhY2soKTsKLX0K LQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfZHJ2X2VudHJ5ID09PT09PT09Ci0gKiAgcHVycG9z ZToKLSAqICAgICAgQnJpZGdlIERyaXZlciBlbnRyeSBwb2ludC4KLSAqLwotdm9pZCBicmlkZ2Vf ZHJ2X2VudHJ5KHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKmRydl9pbnRmLAotCQkgICBj b25zdCBjaGFyICpkcml2ZXJfZmlsZV9uYW1lKQotewotCWlmIChzdHJjbXAoZHJpdmVyX2ZpbGVf bmFtZSwgIlVNQSIpID09IDApCi0JCSpkcnZfaW50ZiA9ICZkcnZfaW50ZXJmYWNlX2Z4bnM7Ci0J ZWxzZQotCQlkZXZfZGJnKGJyaWRnZSwgIiVzIFVua25vd24gQnJpZGdlIGZpbGUgbmFtZSIsIF9f ZnVuY19fKTsKLQotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbW9uaXRvciA9PT09 PT09PQotICogIHB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgYnJpZGdlX2JyZF9tb25pdG9yIHB1dHMg RFNQIGludG8gYSBMb2FkYWJsZSBzdGF0ZS4KLSAqICAgICAgaS5lIEFwcGxpY2F0aW9uIGNhbiBs b2FkIGFuZCBzdGFydCB0aGUgZGV2aWNlLgotICoKLSAqICBQcmVjb25kaXRpb25zOgotICogICAg ICBEZXZpY2UgaW4gJ09GRicgc3RhdGUuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX2JyZF9tb25p dG9yKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KQotewotCXN0cnVjdCBicmlk Z2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7Ci0JdTMyIHRlbXA7Ci0Jc3Ry dWN0IG9tYXBfZHNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KLQkJb21hcF9kc3BicmlkZ2VfZGV2 LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCXRlbXAgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9N QVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUU1QpICYKLQkJCQkJT01BUF9QT1dFUlNUQVRF U1RfTUFTSzsKLQlpZiAoISh0ZW1wICYgMHgwMikpIHsKLQkJLyogSVZBMiBpcyBub3QgaW4gT04g c3RhdGUgKi8KLQkJLyogUmVhZCBhbmQgc2V0IFBNX1BXU1RDVFJMX0lWQTIgIHRvIE9OICovCi0J CSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVBfUE9XRVJTVEFURVNUX01BU0ssCi0JCQlQ V1JETV9QT1dFUl9PTiwgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RDVFJMKTsKLQkJ LyogU2V0IHRoZSBTVyBzdXBlcnZpc2VkIHN0YXRlIHRyYW5zaXRpb24gKi8KLQkJKCpwZGF0YS0+ ZHNwX2NtX3dyaXRlKShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQLAotCQkJCQlPTUFQ MzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQotCQkvKiBXYWl0IHVudGlsIHRo ZSBzdGF0ZSBoYXMgbW92ZWQgdG8gT04gKi8KLQkJd2hpbGUgKCgqcGRhdGEtPmRzcF9wcm1fcmVh ZCkoT01BUDM0MzBfSVZBMl9NT0QsCi0JCQkJCSAgICAgIE9NQVAyX1BNX1BXU1RTVCkgJgotCQkJ CQkJT01BUF9JTlRSQU5TSVRJT05fTUFTSykKLQkJCTsKLQkJLyogRGlzYWJsZSBBdXRvbWF0aWMg dHJhbnNpdGlvbiAqLwotCQkoKnBkYXRhLT5kc3BfY21fd3JpdGUpKE9NQVAzNFhYX0NMS1NUQ1RS TF9ESVNBQkxFX0FVVE8sCi0JCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9DTV9DTEtTVENU UkwpOwotCX0KLQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QyX0lWQTJf TUFTSywgMCwKLQkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwotCWRz cF9jbGtfZW5hYmxlKERTUF9DTEtfSVZBMik7Ci0KLQkvKiBzZXQgdGhlIGRldmljZSBzdGF0ZSB0 byBJRExFICovCi0JZGV2X2NvbnRleHQtPmJyZF9zdGF0ZSA9IEJSRF9JRExFOwotCi0JcmV0dXJu IDA7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2JyZF9yZWFkID09PT09PT09Ci0gKiAg cHVycG9zZToKLSAqICAgICAgUmVhZHMgYnVmZmVycyBmb3IgRFNQIG1lbW9yeS4KLSAqLwotc3Rh dGljIGludCBicmlkZ2VfYnJkX3JlYWQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0 eHQsCi0JCQkJICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCi0JCQkJICB1MzIgdWxfbnVt X2J5dGVzLCB1MzIgbWVtX3R5cGUpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJyaWRn ZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKLQl1MzIgb2Zmc2V0OwotCXUz MiBkc3BfYmFzZV9hZGRyID0gZGV2X2N0eHQtPmRzcF9iYXNlX2FkZHI7Ci0KLQlpZiAoZHNwX2Fk ZHIgPCBkZXZfY29udGV4dC0+ZHNwX3N0YXJ0X2FkZCkgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0J CXJldHVybiBzdGF0dXM7Ci0JfQotCS8qIGNoYW5nZSBoZXJlIHRvIGFjY291bnQgZm9yIHRoZSAz IGJhbmRzIG9mIHRoZSBEU1AgaW50ZXJuYWwgbWVtb3J5ICovCi0JaWYgKChkc3BfYWRkciAtIGRl dl9jb250ZXh0LT5kc3Bfc3RhcnRfYWRkKSA8Ci0JICAgIGRldl9jb250ZXh0LT5pbnRlcm5hbF9z aXplKSB7Ci0JCW9mZnNldCA9IGRzcF9hZGRyIC0gZGV2X2NvbnRleHQtPmRzcF9zdGFydF9hZGQ7 Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gcmVhZF9leHRfZHNwX2RhdGEoZGV2X2NvbnRleHQsIGhv c3RfYnVmZiwgZHNwX2FkZHIsCi0JCQkJCSAgIHVsX251bV9ieXRlcywgbWVtX3R5cGUpOwotCQly ZXR1cm4gc3RhdHVzOwotCX0KLQkvKiBjb3B5IHRoZSBkYXRhIGZyb20gRFNQIG1lbW9yeSAqLwot CW1lbWNweShob3N0X2J1ZmYsICh2b2lkICopKGRzcF9iYXNlX2FkZHIgKyBvZmZzZXQpLCB1bF9u dW1fYnl0ZXMpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdl X2JyZF9zZXRfc3RhdGUgPT09PT09PT0KLSAqICBwdXJwb3NlOgotICogICAgICBUaGlzIHJvdXRp bmUgdXBkYXRlcyB0aGUgQm9hcmQgc3RhdHVzLgotICovCi1zdGF0aWMgaW50IGJyaWRnZV9icmRf c2V0X3N0YXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgICB1 MzIgYnJkX3N0YXRlKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBicmlkZ2VfZGV2X2Nv bnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7Ci0KLQlkZXZfY29udGV4dC0+YnJkX3N0YXRl ID0gYnJkX3N0YXRlOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJp ZGdlX2JyZF9zdGFydCA9PT09PT09PQotICogIHB1cnBvc2U6Ci0gKiAgICAgIEluaXRpYWxpemVz IERTUCBNTVUgYW5kIFN0YXJ0cyBEU1AuCi0gKgotICogIFByZWNvbmRpdGlvbnM6Ci0gKiAgYSkg RFNQIGRvbWFpbiBpcyAnQUNUSVZFJy4KLSAqICBiKSBEU1BfUlNUMSBpcyBhc3NlcnRlZC4KLSAq ICBiKSBEU1BfUlNUMiBpcyByZWxlYXNlZC4KLSAqLwotc3RhdGljIGludCBicmlkZ2VfYnJkX3N0 YXJ0KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgIHUzMiBkc3Bf YWRkcikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpk ZXZfY29udGV4dCA9IGRldl9jdHh0OwotCXZvaWQgX19pb21lbSAqc3luY19hZGRyOwotCXUzMiB1 bF9zaG1fYmFzZTsJLyogR3BwIFBoeXMgU00gYmFzZSBhZGRyKGJ5dGUpICovCi0JdTMyIHVsX3No bV9iYXNlX3ZpcnQ7CS8qIERzcCBWaXJ0IFNNIGJhc2UgYWRkciAqLwotCXUzMiB1bF90bGJfYmFz ZV92aXJ0OwkvKiBCYXNlIG9mIE1NVSBUTEIgZW50cnkgKi8KLQl1MzIgc2htX3N5bmNfcGE7Ci0J LyogT2Zmc2V0IG9mIHNobV9iYXNlX3ZpcnQgZnJvbSB0bGJfYmFzZV92aXJ0ICovCi0JdTMyIHVs X3NobV9vZmZzZXRfdmlydDsKLQlzMzIgZW50cnlfbmR4OwotCXMzMiBpdG1wX2VudHJ5X25keCA9 IDA7CS8qIERTUC1NTVUgVExCIGVudHJ5IGJhc2UgYWRkcmVzcyAqLwotCXN0cnVjdCBjZmdfaG9z dHJlcyAqcmVzb3VyY2VzID0gTlVMTDsKLQl1MzIgdGVtcDsKLQl1MzIgdWxfZHNwX2Nsa19yYXRl OwotCXUzMiB1bF9kc3BfY2xrX2FkZHI7Ci0JdTMyIHVsX2Jpb3NfZ3BfdGltZXI7Ci0JdTMyIGNs a19jbWQ7Ci0Jc3RydWN0IGlvX21nciAqaGlvX21ncjsKLQl1MzIgdWxfbG9hZF9tb25pdG9yX3Rp bWVyOwotCXUzMiB3ZHRfZW4gPSAwOwotCXN0cnVjdCBvbWFwX2RzcF9wbGF0Zm9ybV9kYXRhICpw ZGF0YSA9Ci0JCW9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQkvKiBU aGUgZGV2aWNlIGNvbnRleHQgY29udGFpbnMgYWxsIHRoZSBtbXUgc2V0dXAgaW5mbyBmcm9tIHdo ZW4gdGhlCi0JICogbGFzdCBkc3AgYmFzZSBpbWFnZSB3YXMgbG9hZGVkLiBUaGUgZmlyc3QgZW50 cnkgaXMgYWx3YXlzCi0JICogU0hNTUVNIGJhc2UuICovCi0JLyogR2V0IFNITV9CRUcgLSBjb252 ZXJ0IHRvIGJ5dGUgYWRkcmVzcyAqLwotCSh2b2lkKWRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0 LT5kZXZfb2JqLCBTSE1CQVNFTkFNRSwKLQkJCSAgICAgJnVsX3NobV9iYXNlX3ZpcnQpOwotCXVs X3NobV9iYXNlX3ZpcnQgKj0gRFNQV09SRFNJWkU7Ci0JLyogRFNQIFZpcnR1YWwgYWRkcmVzcyAq LwotCXVsX3RsYl9iYXNlX3ZpcnQgPSBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS5kc3BfdmE7 Ci0JdWxfc2htX29mZnNldF92aXJ0ID0KLQkgICAgdWxfc2htX2Jhc2VfdmlydCAtICh1bF90bGJf YmFzZV92aXJ0ICogRFNQV09SRFNJWkUpOwotCS8qIEtlcm5lbCBsb2dpY2FsIGFkZHJlc3MgKi8K LQl1bF9zaG1fYmFzZSA9IGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLmdwcF92YSArIHVsX3No bV9vZmZzZXRfdmlydDsKLQotCS8qIFNITSBwaHlzaWNhbCBzeW5jIGFkZHJlc3MgKi8KLQlzaG1f c3luY19wYSA9IGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLmdwcF9wYSArIHVsX3NobV9vZmZz ZXRfdmlydCArCi0JCQlTSE1TWU5DT0ZGU0VUOwotCi0JLyogMm5kIHdkIGlzIHVzZWQgYXMgc3lu YyBmaWVsZCAqLwotCXN5bmNfYWRkciA9IGlvcmVtYXAoc2htX3N5bmNfcGEsIFNaXzMyKTsKLQlp ZiAoIXN5bmNfYWRkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBXcml0ZSBhIHNpZ25hdHVy ZSBpbnRvIHRoZSBzaG0gYmFzZSArIG9mZnNldDsgdGhpcyB3aWxsCi0JICogZ2V0IGNsZWFyZWQg d2hlbiB0aGUgRFNQIHByb2dyYW0gc3RhcnRzLiAqLwotCWlmICgodWxfc2htX2Jhc2VfdmlydCA9 PSAwKSB8fCAodWxfc2htX2Jhc2UgPT0gMCkpIHsKLQkJcHJfZXJyKCIlczogSWxsZWdhbCBTTSBi YXNlXG4iLCBfX2Z1bmNfXyk7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQl9IGVsc2UKLQkJX19yYXdf d3JpdGVsKDB4ZmZmZmZmZmYsIHN5bmNfYWRkcik7Ci0KLQlpZiAoIXN0YXR1cykgewotCQlyZXNv dXJjZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOwotCQlpZiAoIXJlc291cmNlcykKLQkJCXN0 YXR1cyA9IC1FUEVSTTsKLQotCQkvKiBBc3NlcnQgUlNUMSBpLmUgb25seSB0aGUgUlNUIG9ubHkg Zm9yIERTUCBtZWdhY2VsbCAqLwotCQlpZiAoIXN0YXR1cykgewotCQkJKCpwZGF0YS0+ZHNwX3By bV9ybXdfYml0cykoT01BUDM0MzBfUlNUMV9JVkEyX01BU0ssCi0JCQkJCU9NQVAzNDMwX1JTVDFf SVZBMl9NQVNLLAotCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJT01BUDJfUk1fUlNUQ1RS TCk7Ci0KLQkJCS8qIE1hc2sgYWRkcmVzcyB3aXRoIDFLIGZvciBjb21wYXRpYmlsaXR5ICovCi0J CQlwZGF0YS0+c2V0X2Jvb3RhZGRyKGRzcF9hZGRyICYKLQkJCQkJCU9NQVAzX0lWQTJfQk9PVEFE RFJfTUFTSyk7Ci0JCQlwZGF0YS0+c2V0X2Jvb3Rtb2RlKGRzcF9kZWJ1ZyA/IElETEUgOiBESVJF Q1QpOwotCQl9Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCS8qIFJlc2V0IGFuZCBVbnJlc2V0IHRo ZSBSU1QyLCBzbyB0aGF0IEJPT1RBRERSIGlzIGNvcGllZCB0bwotCQkgKiBJVkEyIFNZU0MgcmVn aXN0ZXIgKi8KLQkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMl9JVkEy X01BU0ssCi0JCQlPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSywgT01BUDM0MzBfSVZBMl9NT0QsCi0J CQlPTUFQMl9STV9SU1RDVFJMKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCSgqcGRhdGEtPmRzcF9wcm1f cm13X2JpdHMpKE9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLLCAwLAotCQkJCQlPTUFQMzQzMF9JVkEy X01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7Ci0JCXVkZWxheSgxMDApOwotCi0JCS8qIERpc2JhbGUg dGhlIERTUCBNTVUgKi8KLQkJaHdfbW11X2Rpc2FibGUocmVzb3VyY2VzLT5kbW11X2Jhc2UpOwot CQkvKiBEaXNhYmxlIFRXTCAqLwotCQlod19tbXVfdHdsX2Rpc2FibGUocmVzb3VyY2VzLT5kbW11 X2Jhc2UpOwotCi0JCS8qIE9ubHkgbWFrZSBUTEIgZW50cnkgaWYgYm90aCBhZGRyZXNzZXMgYXJl IG5vbi16ZXJvICovCi0JCWZvciAoZW50cnlfbmR4ID0gMDsgZW50cnlfbmR4IDwgQlJESU9DVExf TlVNT0ZNTVVUTEI7Ci0JCSAgICAgZW50cnlfbmR4KyspIHsKLQkJCXN0cnVjdCBicmlkZ2VfaW9j dGxfZXh0cHJvYyAqZSA9Ci0JCQkJJmRldl9jb250ZXh0LT5hdGxiX2VudHJ5W2VudHJ5X25keF07 Ci0JCQlzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190IG1hcF9hdHRycyA9IHsKLQkJCQkuZW5kaWFu aXNtID0gZS0+ZW5kaWFuaXNtLAotCQkJCS5lbGVtZW50X3NpemUgPSBlLT5lbGVtX3NpemUsCi0J CQkJLm1peGVkX3NpemUgPSBlLT5taXhlZF9tb2RlLAotCQkJfTsKLQotCQkJaWYgKCFlLT5ncHBf cGEgfHwgIWUtPmRzcF92YSkKLQkJCQljb250aW51ZTsKLQotCQkJZGV2X2RiZyhicmlkZ2UsCi0J CQkJCSJNTVUgJWQsIHBhOiAweCV4LCB2YTogMHgleCwgc2l6ZTogMHgleCIsCi0JCQkJCWl0bXBf ZW50cnlfbmR4LAotCQkJCQllLT5ncHBfcGEsCi0JCQkJCWUtPmRzcF92YSwKLQkJCQkJZS0+c2l6 ZSk7Ci0KLQkJCWh3X21tdV90bGJfYWRkKGRldl9jb250ZXh0LT5kc3BfbW11X2Jhc2UsCi0JCQkJ CWUtPmdwcF9wYSwKLQkJCQkJZS0+ZHNwX3ZhLAotCQkJCQllLT5zaXplLAotCQkJCQlpdG1wX2Vu dHJ5X25keCwKLQkJCQkJJm1hcF9hdHRycywgMSwgMSk7Ci0KLQkJCWl0bXBfZW50cnlfbmR4Kys7 Ci0JCX0KLQl9Ci0KLQkvKiBMb2NrIHRoZSBhYm92ZSBUTEIgZW50cmllcyBhbmQgZ2V0IHRoZSBC SU9TIGFuZCBsb2FkIG1vbml0b3IgdGltZXIKLQkgKiBpbmZvcm1hdGlvbiAqLwotCWlmICghc3Rh dHVzKSB7Ci0JCWh3X21tdV9udW1fbG9ja2VkX3NldChyZXNvdXJjZXMtPmRtbXVfYmFzZSwgaXRt cF9lbnRyeV9uZHgpOwotCQlod19tbXVfdmljdGltX251bV9zZXQocmVzb3VyY2VzLT5kbW11X2Jh c2UsIGl0bXBfZW50cnlfbmR4KTsKLQkJaHdfbW11X3R0Yl9zZXQocmVzb3VyY2VzLT5kbW11X2Jh c2UsCi0JCQkgICAgICAgZGV2X2NvbnRleHQtPnB0X2F0dHJzLT5sMV9iYXNlX3BhKTsKLQkJaHdf bW11X3R3bF9lbmFibGUocmVzb3VyY2VzLT5kbW11X2Jhc2UpOwotCQkvKiBFbmFibGUgdGhlIFNt YXJ0SWRsZSBhbmQgQXV0b0lkbGUgYml0IGZvciBNTVVfU1lTQ09ORklHICovCi0KLQkJdGVtcCA9 IF9fcmF3X3JlYWRsKChyZXNvdXJjZXMtPmRtbXVfYmFzZSkgKyAweDEwKTsKLQkJdGVtcCA9ICh0 ZW1wICYgMHhGRkZGRkZFRikgfCAweDExOwotCQlfX3Jhd193cml0ZWwodGVtcCwgKHJlc291cmNl cy0+ZG1tdV9iYXNlKSArIDB4MTApOwotCi0JCS8qIExldCB0aGUgRFNQIE1NVSBydW4gKi8KLQkJ aHdfbW11X2VuYWJsZShyZXNvdXJjZXMtPmRtbXVfYmFzZSk7Ci0KLQkJLyogRW5hYmxlIHRoZSBC SU9TIGNsb2NrICovCi0JCSh2b2lkKWRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5kZXZfb2Jq LAotCQkJCSAgICAgQlJJREdFSU5JVF9CSU9TR1BUSU1FUiwgJnVsX2Jpb3NfZ3BfdGltZXIpOwot CQkodm9pZClkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+ZGV2X29iaiwKLQkJCQkgICAgIEJS SURHRUlOSVRfTE9BRE1PTl9HUFRJTUVSLAotCQkJCSAgICAgJnVsX2xvYWRfbW9uaXRvcl90aW1l cik7Ci0JfQotCi0JaWYgKCFzdGF0dXMpIHsKLQkJaWYgKHVsX2xvYWRfbW9uaXRvcl90aW1lciAh PSAweEZGRkYpIHsKLQkJCWNsa19jbWQgPSAoQlBXUl9FTkFCTEVfQ0xPQ0sgPDwgTUJYX1BNX0NM S19DTURTSElGVCkgfAotCQkJICAgIHVsX2xvYWRfbW9uaXRvcl90aW1lcjsKLQkJCWRzcF9wZXJp cGhlcmFsX2Nsa19jdHJsKGRldl9jb250ZXh0LCAmY2xrX2NtZCk7Ci0JCX0gZWxzZSB7Ci0JCQlk ZXZfZGJnKGJyaWRnZSwgIk5vdCBhYmxlIHRvIGdldCB0aGUgc3ltYm9sIGZvciBMb2FkICIKLQkJ CQkiTW9uaXRvciBUaW1lclxuIik7Ci0JCX0KLQl9Ci0KLQlpZiAoIXN0YXR1cykgewotCQlpZiAo dWxfYmlvc19ncF90aW1lciAhPSAweEZGRkYpIHsKLQkJCWNsa19jbWQgPSAoQlBXUl9FTkFCTEVf Q0xPQ0sgPDwgTUJYX1BNX0NMS19DTURTSElGVCkgfAotCQkJICAgIHVsX2Jpb3NfZ3BfdGltZXI7 Ci0JCQlkc3BfcGVyaXBoZXJhbF9jbGtfY3RybChkZXZfY29udGV4dCwgJmNsa19jbWQpOwotCQl9 IGVsc2UgewotCQkJZGV2X2RiZyhicmlkZ2UsCi0JCQkJIk5vdCBhYmxlIHRvIGdldCB0aGUgc3lt Ym9sIGZvciBCSU9TIFRpbWVyXG4iKTsKLQkJfQotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCS8q IFNldCB0aGUgRFNQIGNsb2NrIHJhdGUgKi8KLQkJKHZvaWQpZGV2X2dldF9zeW1ib2woZGV2X2Nv bnRleHQtPmRldl9vYmosCi0JCQkJICAgICAiX0JSSURHRUlOSVRfRFNQX0ZSRVEiLCAmdWxfZHNw X2Nsa19hZGRyKTsKLQkJLypTZXQgQXV0b2lkbGUgTW9kZSBmb3IgSVZBMiBQTEwgKi8KLQkJKCpw ZGF0YS0+ZHNwX2NtX3dyaXRlKSgxIDw8IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX1NISUZULAot CQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpOwotCi0JCWlm ICgodW5zaWduZWQgaW50ICopdWxfZHNwX2Nsa19hZGRyICE9IE5VTEwpIHsKLQkJCS8qIEdldCB0 aGUgY2xvY2sgcmF0ZSAqLwotCQkJdWxfZHNwX2Nsa19yYXRlID0gZHNwX2Nsa19nZXRfaXZhMl9y YXRlKCk7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1AgY2xvY2sgcmF0ZSAoS0haKTogMHgl eCBcbiIsCi0JCQkJX19mdW5jX18sIHVsX2RzcF9jbGtfcmF0ZSk7Ci0JCQkodm9pZClicmlkZ2Vf YnJkX3dyaXRlKGRldl9jb250ZXh0LAotCQkJCQkgICAgICAgKHU4ICopICZ1bF9kc3BfY2xrX3Jh dGUsCi0JCQkJCSAgICAgICB1bF9kc3BfY2xrX2FkZHIsIHNpemVvZih1MzIpLCAwKTsKLQkJfQot CQkvKgotCQkgKiBFbmFibGUgTWFpbGJveCBldmVudHMgYW5kIGFsc28gZHJhaW4gYW55IHBlbmRp bmcKLQkJICogc3RhbGUgbWVzc2FnZXMuCi0JCSAqLwotCQlkZXZfY29udGV4dC0+bWJveCA9IG9t YXBfbWJveF9nZXQoImRzcCIsICZkc3BfbWJveF9ub3RpZmllcik7Ci0JCWlmIChJU19FUlIoZGV2 X2NvbnRleHQtPm1ib3gpKSB7Ci0JCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7Ci0JCQlwcl9l cnIoIiVzOiBGYWlsZWQgdG8gZ2V0IGRzcCBtYWlsYm94IGhhbmRsZVxuIiwKLQkJCQkJCQkJX19m dW5jX18pOwotCQkJc3RhdHVzID0gLUVQRVJNOwotCQl9Ci0KLQl9Ci0JaWYgKCFzdGF0dXMpIHsK LS8qUE1fSVZBMkdSUFNFTF9QRVIgPSAweEMwOyovCi0JCXRlbXAgPSByZWFkbChyZXNvdXJjZXMt PnBlcl9wbV9iYXNlICsgMHhBOCk7Ci0JCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGMzApIHwgMHhD MDsKLQkJd3JpdGVsKHRlbXAsIHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsKLQotLypQ TV9NUFVHUlBTRUxfUEVSICY9IDB4RkZGRkZGM0Y7ICovCi0JCXRlbXAgPSByZWFkbChyZXNvdXJj ZXMtPnBlcl9wbV9iYXNlICsgMHhBNCk7Ci0JCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGM0YpOwot CQl3cml0ZWwodGVtcCwgcmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTQpOwotLypDTV9TTEVF UERFUF9QRVIgfD0gMHgwNDsgKi8KLQkJdGVtcCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX2Jhc2Ug KyAweDQ0KTsKLQkJdGVtcCA9ICh0ZW1wICYgMHhGRkZGRkZGQikgfCAweDA0OwotCQl3cml0ZWwo dGVtcCwgcmVzb3VyY2VzLT5wZXJfYmFzZSArIDB4NDQpOwotCi0vKkNNX0NMS1NUQ1RSTF9JVkEy ID0gMHgwMDAwMDAwMyAtVG8gQWxsb3cgYXV0b21hdGljIHRyYW5zaXRpb25zICovCi0JCSgqcGRh dGEtPmRzcF9jbV93cml0ZSkoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLAotCQkJCQlP TUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQotCQkvKiBMZXQgRFNQIGdv ICovCi0JCWRldl9kYmcoYnJpZGdlLCAiJXMgVW5yZXNldFxuIiwgX19mdW5jX18pOwotCQkvKiBF bmFibGUgRFNQIE1NVSBJbnRlcnJ1cHRzICovCi0JCWh3X21tdV9ldmVudF9lbmFibGUocmVzb3Vy Y2VzLT5kbW11X2Jhc2UsCi0JCQkJICAgIEhXX01NVV9BTExfSU5URVJSVVBUUyk7Ci0JCS8qIHJl bGVhc2UgdGhlIFJTVDEsIERTUCBzdGFydHMgZXhlY3V0aW5nIG5vdyAuLiAqLwotCQkoKnBkYXRh LT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSywgMCwKLQkJCQkJT01B UDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwotCi0JCWRldl9kYmcoYnJpZGdlLCAi V2FpdGluZyBmb3IgU3luYyBAIDB4JXhcbiIsICoodTMyICopc3luY19hZGRyKTsKLQkJZGV2X2Ri ZyhicmlkZ2UsICJEU1AgY19pbnQwMCBBZGRyZXNzID0gIDB4JXhcbiIsIGRzcF9hZGRyKTsKLQkJ aWYgKGRzcF9kZWJ1ZykKLQkJCXdoaWxlIChfX3Jhd19yZWFkdyhzeW5jX2FkZHIpKQotCQkJCTsK LQotCQkvKiBXYWl0IGZvciBEU1AgdG8gY2xlYXIgd29yZCBpbiBzaGFyZWQgbWVtb3J5ICovCi0J CS8qIFJlYWQgdGhlIExvY2F0aW9uICovCi0JCWlmICghd2FpdF9mb3Jfc3RhcnQoZGV2X2NvbnRl eHQsIHN5bmNfYWRkcikpCi0JCQlzdGF0dXMgPSAtRVRJTUVET1VUOwotCi0JCWRldl9nZXRfc3lt Ym9sKGRldl9jb250ZXh0LT5kZXZfb2JqLCAiX1dEVF9lbmFibGUiLCAmd2R0X2VuKTsKLQkJaWYg KHdkdF9lbikgewotCQkJLyogU3RhcnQgd2R0ICovCi0JCQlkc3Bfd2R0X3NtX3NldCgodm9pZCAq KXVsX3NobV9iYXNlKTsKLQkJCWRzcF93ZHRfZW5hYmxlKHRydWUpOwotCQl9Ci0KLQkJc3RhdHVz ID0gZGV2X2dldF9pb19tZ3IoZGV2X2NvbnRleHQtPmRldl9vYmosICZoaW9fbWdyKTsKLQkJaWYg KGhpb19tZ3IpIHsKLQkJCWlvX3NoX21zZXR0aW5nKGhpb19tZ3IsIFNITV9PUFBJTkZPLCBOVUxM KTsKLQkJCS8qIFdyaXRlIHRoZSBzeW5jaHJvbml6YXRpb24gYml0IHRvIGluZGljYXRlIHRoZQot CQkJICogY29tcGxldGlvbiBvZiBPUFAgdGFibGUgdXBkYXRlIHRvIERTUAotCQkJICovCi0JCQlf X3Jhd193cml0ZWwoMFhDQUZFQ0FGRSwgc3luY19hZGRyKTsKLQotCQkJLyogdXBkYXRlIGJvYXJk IHN0YXRlICovCi0JCQlkZXZfY29udGV4dC0+YnJkX3N0YXRlID0gQlJEX1JVTk5JTkc7Ci0JCQkv KiAodm9pZCljaG5sc21fZW5hYmxlX2ludGVycnVwdChkZXZfY29udGV4dCk7ICovCi0JCX0gZWxz ZSB7Ci0JCQlkZXZfY29udGV4dC0+YnJkX3N0YXRlID0gQlJEX1VOS05PV047Ci0JCX0KLQl9Ci0K LQlpb3VubWFwKHN5bmNfYWRkcik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09 PT09PT09IGJyaWRnZV9icmRfc3RvcCA9PT09PT09PQotICogIHB1cnBvc2U6Ci0gKiAgICAgIFB1 dHMgRFNQIGluIHNlbGYgbG9vcC4KLSAqCi0gKiAgUHJlY29uZGl0aW9ucyA6Ci0gKiAgYSkgTm9u ZQotICovCi1zdGF0aWMgaW50IGJyaWRnZV9icmRfc3RvcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250 ZXh0ICpkZXZfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9j b250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OwotCXN0cnVjdCBwZ190YWJsZV9hdHRycyAq cHRfYXR0cnM7Ci0JdTMyIGRzcF9wd3Jfc3RhdGU7Ci0Jc3RydWN0IG9tYXBfZHNwX3BsYXRmb3Jt X2RhdGEgKnBkYXRhID0KLQkJb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsK LQotCWlmIChkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJSRF9TVE9QUEVEKQotCQlyZXR1cm4g c3RhdHVzOwotCi0JLyogYXMgcGVyIFRSTSwgaXQgaXMgYWR2aXNlZCB0byBmaXJzdCBkcml2ZSB0 aGUgSVZBMiB0byAnU3RhbmRieScgbW9kZSwKLQkgKiBiZWZvcmUgdHVybmluZyBvZmYgdGhlIGNs b2Nrcy4uIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vCi0JICogcGVuZGluZyBM MyBvciBvdGhlciB0cmFuc2FjdG9ucyBmcm9tIElWQTIgKi8KLQlkc3BfcHdyX3N0YXRlID0gKCpw ZGF0YS0+ZHNwX3BybV9yZWFkKQotCQkoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RT VCkgJiBPTUFQX1BPV0VSU1RBVEVTVF9NQVNLOwotCWlmIChkc3BfcHdyX3N0YXRlICE9IFBXUkRN X1BPV0VSX09GRikgewotCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1Qy X0lWQTJfTUFTSywgMCwKLQkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwp OwotCQlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jb250ZXh0LCBNQlhfUE1fRFNQSURMRSk7Ci0JCW1k ZWxheSgxMCk7Ci0KLQkJLyogSVZBMiBpcyBub3QgaW4gT0ZGIHN0YXRlICovCi0JCS8qIFNldCBQ TV9QV1NUQ1RSTF9JVkEyICB0byBPRkYgKi8KLQkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cyko T01BUF9QT1dFUlNUQVRFU1RfTUFTSywKLQkJCVBXUkRNX1BPV0VSX09GRiwgT01BUDM0MzBfSVZB Ml9NT0QsIE9NQVAyX1BNX1BXU1RDVFJMKTsKLQkJLyogU2V0IHRoZSBTVyBzdXBlcnZpc2VkIHN0 YXRlIHRyYW5zaXRpb24gZm9yIFNsZWVwICovCi0JCSgqcGRhdGEtPmRzcF9jbV93cml0ZSkoT01B UDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQLAotCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01B UDJfQ01fQ0xLU1RDVFJMKTsKLQl9Ci0JdWRlbGF5KDEwKTsKLQkvKiBSZWxlYXNlIHRoZSBFeHQg QmFzZSB2aXJ0dWFsIEFkZHJlc3MgYXMgdGhlIG5leHQgRFNQIFByb2dyYW0KLQkgKiBtYXkgaGF2 ZSBhIGRpZmZlcmVudCBsb2FkIGFkZHJlc3MgKi8KLQlpZiAoZGV2X2NvbnRleHQtPmRzcF9leHRf YmFzZV9hZGRyKQotCQlkZXZfY29udGV4dC0+ZHNwX2V4dF9iYXNlX2FkZHIgPSAwOwotCi0JZGV2 X2NvbnRleHQtPmJyZF9zdGF0ZSA9IEJSRF9TVE9QUEVEOwkvKiB1cGRhdGUgYm9hcmQgc3RhdGUg Ki8KLQotCWRzcF93ZHRfZW5hYmxlKGZhbHNlKTsKLQotCS8qIFRoaXMgaXMgYSBnb29kIHBsYWNl IHRvIGNsZWFyIHRoZSBNTVUgcGFnZSB0YWJsZXMgYXMgd2VsbCAqLwotCWlmIChkZXZfY29udGV4 dC0+cHRfYXR0cnMpIHsKLQkJcHRfYXR0cnMgPSBkZXZfY29udGV4dC0+cHRfYXR0cnM7Ci0JCW1l bXNldCgodTggKikgcHRfYXR0cnMtPmwxX2Jhc2VfdmEsIDB4MDAsIHB0X2F0dHJzLT5sMV9zaXpl KTsKLQkJbWVtc2V0KCh1OCAqKSBwdF9hdHRycy0+bDJfYmFzZV92YSwgMHgwMCwgcHRfYXR0cnMt PmwyX3NpemUpOwotCQltZW1zZXQoKHU4ICopIHB0X2F0dHJzLT5wZ19pbmZvLCAweDAwLAotCQkg ICAgICAgKHB0X2F0dHJzLT5sMl9udW1fcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2VfaW5mbykp KTsKLQl9Ci0JLyogRGlzYWJsZSB0aGUgbWFpbGJveCBpbnRlcnJ1cHRzICovCi0JaWYgKGRldl9j b250ZXh0LT5tYm94KSB7Ci0JCW9tYXBfbWJveF9kaXNhYmxlX2lycShkZXZfY29udGV4dC0+bWJv eCwgSVJRX1JYKTsKLQkJb21hcF9tYm94X3B1dChkZXZfY29udGV4dC0+bWJveCwgJmRzcF9tYm94 X25vdGlmaWVyKTsKLQkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwotCX0KLQkvKiBSZXNldCBJ VkEyIGNsb2NrcyovCi0JKCpwZGF0YS0+ZHNwX3BybV93cml0ZSkoT01BUDM0MzBfUlNUMV9JVkEy X01BU0sgfAotCQkJT01BUDM0MzBfUlNUMl9JVkEyX01BU0sgfCBPTUFQMzQzMF9SU1QzX0lWQTJf TUFTSywKLQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKLQotCWRzcF9j bG9ja19kaXNhYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKLQlkc3BfY2xrX2Rp c2FibGUoRFNQX0NMS19JVkEyKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gYnJpZGdlX2JyZF9zdGF0dXMgPT09PT09PT0KLSAqICAgICAgUmV0dXJucyB0aGUgYm9h cmQgc3RhdHVzLgotICovCi1zdGF0aWMgaW50IGJyaWRnZV9icmRfc3RhdHVzKHN0cnVjdCBicmlk Z2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgICBpbnQgKmJvYXJkX3N0YXRlKQotewot CXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7Ci0JKmJv YXJkX3N0YXRlID0gZGV2X2NvbnRleHQtPmJyZF9zdGF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoK LSAqICA9PT09PT09PSBicmlkZ2VfYnJkX3dyaXRlID09PT09PT09Ci0gKiAgICAgIENvcGllcyB0 aGUgYnVmZmVycyB0byBEU1AgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbWVtb3J5LgotICovCi1zdGF0 aWMgaW50IGJyaWRnZV9icmRfd3JpdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0 eHQsCi0JCQkJICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAotCQkJCSAgIHUzMiB1bF9u dW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYnJp ZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OwotCi0JaWYgKGRzcF9hZGRy IDwgZGV2X2NvbnRleHQtPmRzcF9zdGFydF9hZGQpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCQly ZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAoKGRzcF9hZGRyIC0gZGV2X2NvbnRleHQtPmRzcF9zdGFy dF9hZGQpIDwKLQkgICAgZGV2X2NvbnRleHQtPmludGVybmFsX3NpemUpIHsKLQkJc3RhdHVzID0g d3JpdGVfZHNwX2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmZiwgZHNwX2FkZHIsCi0JCQkJCXVsX251 bV9ieXRlcywgbWVtX3R5cGUpOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IHdyaXRlX2V4dF9kc3Bf ZGF0YShkZXZfY29udGV4dCwgaG9zdF9idWZmLCBkc3BfYWRkciwKLQkJCQkJICAgIHVsX251bV9i eXRlcywgbWVtX3R5cGUsIGZhbHNlKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogID09PT09PT09IGJyaWRnZV9kZXZfY3JlYXRlID09PT09PT09Ci0gKiAgICAgIENyZWF0ZXMg YSBkcml2ZXIgb2JqZWN0LiBQdXRzIERTUCBpbiBzZWxmIGxvb3AuCi0gKi8KLXN0YXRpYyBpbnQg YnJpZGdlX2Rldl9jcmVhdGUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCQkqKmRldl9j bnR4dCwKLQkJCQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJCQlzdHJ1Y3QgY2Zn X2hvc3RyZXMgKmNvbmZpZ19wYXJhbSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYnJp ZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IE5VTEw7Ci0JczMyIGVudHJ5X25keDsKLQlz dHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlcyA9IGNvbmZpZ19wYXJhbTsKLQlzdHJ1Y3QgcGdf dGFibGVfYXR0cnMgKnB0X2F0dHJzOwotCXUzMiBwZ190YmxfcGE7Ci0JdTMyIHBnX3RibF92YTsK LQl1MzIgYWxpZ25fc2l6ZTsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRf ZHJ2ZGF0YShicmlkZ2UpOwotCi0JLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBkYXRhIHN0 cnVjdHVyZSB0byBjb250YWluIHRoZSBicmlkZ2UgZHJpdmVyCi0JICogIHN0YXRlLCB3aGljaCBi ZWNvbWVzIHRoZSBjb250ZXh0IGZvciBsYXRlciBjYWxscyBpbnRvIHRoaXMgZHJpdmVyICovCi0J ZGV2X2NvbnRleHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0KSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXZfY29udGV4dCkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwot CQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCWRldl9jb250ZXh0LT5kc3Bfc3RhcnRfYWRkID0gKHUz MikgT01BUF9HRU1fQkFTRTsKLQlkZXZfY29udGV4dC0+c2VsZl9sb29wID0gKHUzMikgTlVMTDsK LQlkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzID0gMDsKLQlkZXZfY29udGV4dC0+aW50ZXJuYWxf c2l6ZSA9IE9NQVBfRFNQX1NJWkU7Ci0JLyogIENsZWFyIGRldiBjb250ZXh0IE1NVSB0YWJsZSBl bnRyaWVzLgotCSAqICBUaGVzZSBnZXQgc2V0IG9uIGJyaWRnZV9pb19vbl9sb2FkZWQoKSBjYWxs IGFmdGVyIHByb2dyYW0gbG9hZGVkLiAqLwotCWZvciAoZW50cnlfbmR4ID0gMDsgZW50cnlfbmR4 IDwgQlJESU9DVExfTlVNT0ZNTVVUTEI7IGVudHJ5X25keCsrKSB7Ci0JCWRldl9jb250ZXh0LT5h dGxiX2VudHJ5W2VudHJ5X25keF0uZ3BwX3BhID0KLQkJICAgIGRldl9jb250ZXh0LT5hdGxiX2Vu dHJ5W2VudHJ5X25keF0uZHNwX3ZhID0gMDsKLQl9Ci0JZGV2X2NvbnRleHQtPmRzcF9iYXNlX2Fk ZHIgPSAodTMyKSBNRU1fTElORUFSX0FERFJFU1MoKHZvaWQgKikKLQkJCQkJCQkJIChjb25maWdf cGFyYW0tPgotCQkJCQkJCQkgIG1lbV9iYXNlCi0JCQkJCQkJCSAgWzNdKSwKLQkJCQkJCQkJIGNv bmZpZ19wYXJhbS0+Ci0JCQkJCQkJCSBtZW1fbGVuZ3RoCi0JCQkJCQkJCSBbM10pOwotCWlmICgh ZGV2X2NvbnRleHQtPmRzcF9iYXNlX2FkZHIpCi0JCXN0YXR1cyA9IC1FUEVSTTsKLQotCXB0X2F0 dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBnX3RhYmxlX2F0dHJzKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKHB0X2F0dHJzICE9IE5VTEwpIHsKLQkJcHRfYXR0cnMtPmwxX3NpemUgPSBTWl8xNks7 IC8qIDQwOTYgZW50cmllcyBvZiAzMiBiaXRzICovCi0JCWFsaWduX3NpemUgPSBwdF9hdHRycy0+ bDFfc2l6ZTsKLQkJLyogQWxpZ24gc2l6ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHBvd2VyIG9mIDIg Ki8KLQkJLyogd2UgbGlrZSB0byBnZXQgYWxpZ25lZCBvbiBMMSB0YWJsZSBzaXplICovCi0JCXBn X3RibF92YSA9ICh1MzIpIG1lbV9hbGxvY19waHlzX21lbShwdF9hdHRycy0+bDFfc2l6ZSwKLQkJ CQkJCSAgICAgYWxpZ25fc2l6ZSwgJnBnX3RibF9wYSk7Ci0KLQkJLyogQ2hlY2sgaWYgdGhlIFBB IGlzIGFsaWduZWQgZm9yIHVzICovCi0JCWlmICgocGdfdGJsX3BhKSAmIChhbGlnbl9zaXplIC0g MSkpIHsKLQkJCS8qIFBBIG5vdCBhbGlnbmVkIHRvIHBhZ2UgdGFibGUgc2l6ZSAsCi0JCQkgKiB0 cnkgd2l0aCBtb3JlIGFsbG9jYXRpb24gYW5kIGFsaWduICovCi0JCQltZW1fZnJlZV9waHlzX21l bSgodm9pZCAqKXBnX3RibF92YSwgcGdfdGJsX3BhLAotCQkJCQkgIHB0X2F0dHJzLT5sMV9zaXpl KTsKLQkJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLwotCQkJ cGdfdGJsX3ZhID0KLQkJCSAgICAodTMyKSBtZW1fYWxsb2NfcGh5c19tZW0oKHB0X2F0dHJzLT5s MV9zaXplKSAqIDIsCi0JCQkJCQkgICAgIGFsaWduX3NpemUsICZwZ190YmxfcGEpOwotCQkJLyog V2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFsaWduZWQgdGFibGUgbm93ICovCi0JCQlwdF9hdHRy cy0+bDFfdGJsX2FsbG9jX3BhID0gcGdfdGJsX3BhOwotCQkJcHRfYXR0cnMtPmwxX3RibF9hbGxv Y192YSA9IHBnX3RibF92YTsKLQkJCXB0X2F0dHJzLT5sMV90YmxfYWxsb2Nfc3ogPSBwdF9hdHRy cy0+bDFfc2l6ZSAqIDI7Ci0JCQkvKiBBbGlnbiB0aGUgUEEgdG8gdGhlIG5leHQgJ2FsaWduJyAg Ym91bmRhcnkgKi8KLQkJCXB0X2F0dHJzLT5sMV9iYXNlX3BhID0KLQkJCSAgICAoKHBnX3RibF9w YSkgKwotCQkJICAgICAoYWxpZ25fc2l6ZSAtIDEpKSAmICh+KGFsaWduX3NpemUgLSAxKSk7Ci0J CQlwdF9hdHRycy0+bDFfYmFzZV92YSA9Ci0JCQkgICAgcGdfdGJsX3ZhICsgKHB0X2F0dHJzLT5s MV9iYXNlX3BhIC0gcGdfdGJsX3BhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGdvdCBhbGlnbmVk IFBBLCBjb29sICovCi0JCQlwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3BhID0gcGdfdGJsX3BhOwot CQkJcHRfYXR0cnMtPmwxX3RibF9hbGxvY192YSA9IHBnX3RibF92YTsKLQkJCXB0X2F0dHJzLT5s MV90YmxfYWxsb2Nfc3ogPSBwdF9hdHRycy0+bDFfc2l6ZTsKLQkJCXB0X2F0dHJzLT5sMV9iYXNl X3BhID0gcGdfdGJsX3BhOwotCQkJcHRfYXR0cnMtPmwxX2Jhc2VfdmEgPSBwZ190YmxfdmE7Ci0J CX0KLQkJaWYgKHB0X2F0dHJzLT5sMV9iYXNlX3ZhKQotCQkJbWVtc2V0KCh1OCAqKSBwdF9hdHRy cy0+bDFfYmFzZV92YSwgMHgwMCwKLQkJCSAgICAgICBwdF9hdHRycy0+bDFfc2l6ZSk7Ci0KLQkJ LyogbnVtYmVyIG9mIEwyIHBhZ2UgdGFibGVzID0gRE1NIHBvb2wgdXNlZCArIFNITU1FTSArRVhU TUVNICsKLQkJICogTDQgcGFnZXMgKi8KLQkJcHRfYXR0cnMtPmwyX251bV9wYWdlcyA9ICgoRE1N UE9PTFNJWkUgPj4gMjApICsgNik7Ci0JCXB0X2F0dHJzLT5sMl9zaXplID0gSFdfTU1VX0NPQVJT RV9QQUdFX1NJWkUgKgotCQkgICAgcHRfYXR0cnMtPmwyX251bV9wYWdlczsKLQkJYWxpZ25fc2l6 ZSA9IDQ7CS8qIE1ha2UgaXQgdTMyIGFsaWduZWQgKi8KLQkJLyogd2UgbGlrZSB0byBnZXQgYWxp Z25lZCBvbiBMMSB0YWJsZSBzaXplICovCi0JCXBnX3RibF92YSA9ICh1MzIpIG1lbV9hbGxvY19w aHlzX21lbShwdF9hdHRycy0+bDJfc2l6ZSwKLQkJCQkJCSAgICAgYWxpZ25fc2l6ZSwgJnBnX3Ri bF9wYSk7Ci0JCXB0X2F0dHJzLT5sMl90YmxfYWxsb2NfcGEgPSBwZ190YmxfcGE7Ci0JCXB0X2F0 dHJzLT5sMl90YmxfYWxsb2NfdmEgPSBwZ190YmxfdmE7Ci0JCXB0X2F0dHJzLT5sMl90YmxfYWxs b2Nfc3ogPSBwdF9hdHRycy0+bDJfc2l6ZTsKLQkJcHRfYXR0cnMtPmwyX2Jhc2VfcGEgPSBwZ190 YmxfcGE7Ci0JCXB0X2F0dHJzLT5sMl9iYXNlX3ZhID0gcGdfdGJsX3ZhOwotCi0JCWlmIChwdF9h dHRycy0+bDJfYmFzZV92YSkKLQkJCW1lbXNldCgodTggKikgcHRfYXR0cnMtPmwyX2Jhc2VfdmEs IDB4MDAsCi0JCQkgICAgICAgcHRfYXR0cnMtPmwyX3NpemUpOwotCi0JCXB0X2F0dHJzLT5wZ19p bmZvID0ga3phbGxvYyhwdF9hdHRycy0+bDJfbnVtX3BhZ2VzICoKLQkJCQkJc2l6ZW9mKHN0cnVj dCBwYWdlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQkJZGV2X2RiZyhicmlkZ2UsCi0JCQkiTDEgcGEg JXgsIHZhICV4LCBzaXplICV4XG4gTDIgcGEgJXgsIHZhICIKLQkJCSIleCwgc2l6ZSAleFxuIiwg cHRfYXR0cnMtPmwxX2Jhc2VfcGEsCi0JCQlwdF9hdHRycy0+bDFfYmFzZV92YSwgcHRfYXR0cnMt PmwxX3NpemUsCi0JCQlwdF9hdHRycy0+bDJfYmFzZV9wYSwgcHRfYXR0cnMtPmwyX2Jhc2VfdmEs Ci0JCQlwdF9hdHRycy0+bDJfc2l6ZSk7Ci0JCWRldl9kYmcoYnJpZGdlLCAicHRfYXR0cnMgJXAg TDIgTnVtUGFnZXMgJXggcGdfaW5mbyAlcFxuIiwKLQkJCXB0X2F0dHJzLCBwdF9hdHRycy0+bDJf bnVtX3BhZ2VzLCBwdF9hdHRycy0+cGdfaW5mbyk7Ci0JfQotCWlmICgocHRfYXR0cnMgIT0gTlVM TCkgJiYgKHB0X2F0dHJzLT5sMV9iYXNlX3ZhICE9IDApICYmCi0JICAgIChwdF9hdHRycy0+bDJf YmFzZV92YSAhPSAwKSAmJiAocHRfYXR0cnMtPnBnX2luZm8gIT0gTlVMTCkpCi0JCWRldl9jb250 ZXh0LT5wdF9hdHRycyA9IHB0X2F0dHJzOwotCWVsc2UKLQkJc3RhdHVzID0gLUVOT01FTTsKLQot CWlmICghc3RhdHVzKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZwdF9hdHRycy0+cGdfbG9jayk7Ci0J CWRldl9jb250ZXh0LT50Y193b3JkX3N3YXBfb24gPSBkcnZfZGF0YXAtPnRjX3dvcmRzd2Fwb247 Ci0KLQkJLyogU2V0IHRoZSBDbG9jayBEaXZpc29yIGZvciB0aGUgRFNQIG1vZHVsZSAqLwotCQl1 ZGVsYXkoNSk7Ci0JCS8qIE1NVSBhZGRyZXNzIGlzIG9idGFpbmVkIGZyb20gdGhlIGhvc3QKLQkJ ICogcmVzb3VyY2VzIHN0cnVjdCAqLwotCQlkZXZfY29udGV4dC0+ZHNwX21tdV9iYXNlID0gcmVz b3VyY2VzLT5kbW11X2Jhc2U7Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCWRldl9jb250ZXh0LT5k ZXZfb2JqID0gaGRldl9vYmo7Ci0JCS8qIFN0b3JlIGN1cnJlbnQgYm9hcmQgc3RhdGUuICovCi0J CWRldl9jb250ZXh0LT5icmRfc3RhdGUgPSBCUkRfVU5LTk9XTjsKLQkJZGV2X2NvbnRleHQtPnJl c291cmNlcyA9IHJlc291cmNlczsKLQkJZHNwX2Nsa19lbmFibGUoRFNQX0NMS19JVkEyKTsKLQkJ YnJpZGdlX2JyZF9zdG9wKGRldl9jb250ZXh0KTsKLQkJLyogUmV0dXJuIHB0ciB0byBvdXIgZGV2 aWNlIHN0YXRlIHRvIHRoZSBEU1AgQVBJIGZvciBzdG9yYWdlICovCi0JCSpkZXZfY250eHQgPSBk ZXZfY29udGV4dDsKLQl9IGVsc2UgewotCQlpZiAocHRfYXR0cnMgIT0gTlVMTCkgewotCQkJa2Zy ZWUocHRfYXR0cnMtPnBnX2luZm8pOwotCi0JCQlpZiAocHRfYXR0cnMtPmwyX3RibF9hbGxvY192 YSkgewotCQkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopCi0JCQkJCQkgIHB0X2F0dHJzLT5s Ml90YmxfYWxsb2NfdmEsCi0JCQkJCQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2NfcGEsCi0JCQkJ CQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2Nfc3opOwotCQkJfQotCQkJaWYgKHB0X2F0dHJzLT5s MV90YmxfYWxsb2NfdmEpIHsKLQkJCQltZW1fZnJlZV9waHlzX21lbSgodm9pZCAqKQotCQkJCQkJ ICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhLAotCQkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2Fs bG9jX3BhLAotCQkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3N6KTsKLQkJCX0KLQkJfQot CQlrZnJlZShwdF9hdHRycyk7Ci0JCWtmcmVlKGRldl9jb250ZXh0KTsKLQl9Ci1mdW5jX2VuZDoK LQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9kZXZfY3RybCA9 PT09PT09PQotICogICAgICBSZWNlaXZlcyBkZXZpY2Ugc3BlY2lmaWMgY29tbWFuZHMuCi0gKi8K LXN0YXRpYyBpbnQgYnJpZGdlX2Rldl9jdHJsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRl dl9jb250ZXh0LAotCQkJCSAgdTMyIGR3X2NtZCwgdm9pZCAqcGFyZ3MpCi17Ci0JaW50IHN0YXR1 cyA9IDA7Ci0Jc3RydWN0IGJyaWRnZV9pb2N0bF9leHRwcm9jICpwYV9leHRfcHJvYyA9Ci0JCQkJ CShzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgKilwYXJnczsKLQlzMzIgbmR4OwotCi0Jc3dp dGNoIChkd19jbWQpIHsKLQljYXNlIEJSRElPQ1RMX0NITkxSRUFEOgotCQlicmVhazsKLQljYXNl IEJSRElPQ1RMX0NITkxXUklURToKLQkJYnJlYWs7Ci0JY2FzZSBCUkRJT0NUTF9TRVRNTVVDT05G SUc6Ci0JCS8qIHN0b3JlIGF3YXkgZHNwLW1tdSBzZXR1cCB2YWx1ZXMgZm9yIGxhdGVyIHVzZSAq LwotCQlmb3IgKG5keCA9IDA7IG5keCA8IEJSRElPQ1RMX05VTU9GTU1VVExCOyBuZHgrKywgcGFf ZXh0X3Byb2MrKykKLQkJCWRldl9jb250ZXh0LT5hdGxiX2VudHJ5W25keF0gPSAqcGFfZXh0X3By b2M7Ci0JCWJyZWFrOwotCWNhc2UgQlJESU9DVExfREVFUFNMRUVQOgotCWNhc2UgQlJESU9DVExf RU1FUkdFTkNZU0xFRVA6Ci0JCS8qIEN1cnJlbnRseSBvbmx5IERTUCBJZGxlIGlzIHN1cHBvcnRl ZCBOZWVkIHRvIHVwZGF0ZSBmb3IKLQkJICogbGF0ZXIgcmVsZWFzZXMgKi8KLQkJc3RhdHVzID0g c2xlZXBfZHNwKGRldl9jb250ZXh0LCBQV1JfREVFUFNMRUVQLCBwYXJncyk7Ci0JCWJyZWFrOwot CWNhc2UgQlJESU9DVExfV0FLRVVQOgotCQlzdGF0dXMgPSB3YWtlX2RzcChkZXZfY29udGV4dCwg cGFyZ3MpOwotCQlicmVhazsKLQljYXNlIEJSRElPQ1RMX0NMS19DVFJMOgotCQlzdGF0dXMgPSAw OwotCQkvKiBMb29raW5nIEZvciBCYXNlcG9ydCBGaXggZm9yIENsb2NrcyAqLwotCQlzdGF0dXMg PSBkc3BfcGVyaXBoZXJhbF9jbGtfY3RybChkZXZfY29udGV4dCwgcGFyZ3MpOwotCQlicmVhazsK LQljYXNlIEJSRElPQ1RMX1BXUl9ISUJFUk5BVEU6Ci0JCXN0YXR1cyA9IGhhbmRsZV9oaWJlcm5h dGlvbl9mcm9tX2RzcChkZXZfY29udGV4dCk7Ci0JCWJyZWFrOwotCWNhc2UgQlJESU9DVExfUFJF U0NBTEVfTk9USUZZOgotCQlzdGF0dXMgPSBwcmVfc2NhbGVfZHNwKGRldl9jb250ZXh0LCBwYXJn cyk7Ci0JCWJyZWFrOwotCWNhc2UgQlJESU9DVExfUE9TVFNDQUxFX05PVElGWToKLQkJc3RhdHVz ID0gcG9zdF9zY2FsZV9kc3AoZGV2X2NvbnRleHQsIHBhcmdzKTsKLQkJYnJlYWs7Ci0JY2FzZSBC UkRJT0NUTF9DT05TVFJBSU5UX1JFUVVFU1Q6Ci0JCXN0YXR1cyA9IGhhbmRsZV9jb25zdHJhaW50 c19zZXQoZGV2X2NvbnRleHQsIHBhcmdzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3RhdHVz ID0gLUVQRVJNOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBicmlkZ2VfZGV2X2Rlc3Ryb3kgPT09PT09PT0KLSAqICAgICAgRGVzdHJveXMgdGhl IGRyaXZlciBvYmplY3QuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX2Rldl9kZXN0cm95KHN0cnVj dCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KQotewotCXN0cnVjdCBwZ190YWJsZV9hdHRy cyAqcHRfYXR0cnM7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJyaWRnZV9kZXZfY29udGV4 dCAqZGV2X2NvbnRleHQgPSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqKQotCSAgICBkZXZf Y3R4dDsKLQlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKmhvc3RfcmVzOwotCXUzMiBzaG1fc2l6ZTsKLQlz dHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2UpOwotCi0J LyogSXQgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCWlmICghZGV2X2N0eHQpCi0JCXJldHVybiAt RUZBVUxUOwotCi0JLyogZmlyc3QgcHV0IHRoZSBkZXZpY2UgdG8gc3RvcCBzdGF0ZSAqLwotCWJy aWRnZV9icmRfc3RvcChkZXZfY29udGV4dCk7Ci0JaWYgKGRldl9jb250ZXh0LT5wdF9hdHRycykg ewotCQlwdF9hdHRycyA9IGRldl9jb250ZXh0LT5wdF9hdHRyczsKLQkJa2ZyZWUocHRfYXR0cnMt PnBnX2luZm8pOwotCi0JCWlmIChwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3ZhKSB7Ci0JCQltZW1f ZnJlZV9waHlzX21lbSgodm9pZCAqKXB0X2F0dHJzLT5sMl90YmxfYWxsb2NfdmEsCi0JCQkJCSAg cHRfYXR0cnMtPmwyX3RibF9hbGxvY19wYSwKLQkJCQkJICBwdF9hdHRycy0+bDJfdGJsX2FsbG9j X3N6KTsKLQkJfQotCQlpZiAocHRfYXR0cnMtPmwxX3RibF9hbGxvY192YSkgewotCQkJbWVtX2Zy ZWVfcGh5c19tZW0oKHZvaWQgKilwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhLAotCQkJCQkgIHB0 X2F0dHJzLT5sMV90YmxfYWxsb2NfcGEsCi0JCQkJCSAgcHRfYXR0cnMtPmwxX3RibF9hbGxvY19z eik7Ci0JCX0KLQkJa2ZyZWUocHRfYXR0cnMpOwotCi0JfQotCi0JaWYgKGRldl9jb250ZXh0LT5y ZXNvdXJjZXMpIHsKLQkJaG9zdF9yZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOwotCQlzaG1f c2l6ZSA9IGRydl9kYXRhcC0+c2htX3NpemU7Ci0JCWlmIChzaG1fc2l6ZSA+PSAweDEwMDAwKSB7 Ci0JCQlpZiAoKGhvc3RfcmVzLT5tZW1fYmFzZVsxXSkgJiYKLQkJCSAgICAoaG9zdF9yZXMtPm1l bV9waHlzWzFdKSkgewotCQkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopCi0JCQkJCQkgIGhv c3RfcmVzLT5tZW1fYmFzZQotCQkJCQkJICBbMV0sCi0JCQkJCQkgIGhvc3RfcmVzLT5tZW1fcGh5 cwotCQkJCQkJICBbMV0sIHNobV9zaXplKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRldl9kYmco YnJpZGdlLCAiJXM6IEVycm9yIGdldHRpbmcgc2htIHNpemUgIgotCQkJCSJmcm9tIHJlZ2lzdHJ5 OiAleC4gTm90IGNhbGxpbmcgIgotCQkJCSJtZW1fZnJlZV9waHlzX21lbVxuIiwgX19mdW5jX18s Ci0JCQkJc3RhdHVzKTsKLQkJfQotCQlob3N0X3Jlcy0+bWVtX2Jhc2VbMV0gPSAwOwotCQlob3N0 X3Jlcy0+bWVtX3BoeXNbMV0gPSAwOwotCi0JCWlmIChob3N0X3Jlcy0+bWVtX2Jhc2VbMF0pCi0J CQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPm1lbV9iYXNlWzBdKTsKLQkJaWYgKGhvc3RfcmVz LT5tZW1fYmFzZVsyXSkKLQkJCWlvdW5tYXAoKHZvaWQgKilob3N0X3Jlcy0+bWVtX2Jhc2VbMl0p OwotCQlpZiAoaG9zdF9yZXMtPm1lbV9iYXNlWzNdKQotCQkJaW91bm1hcCgodm9pZCAqKWhvc3Rf cmVzLT5tZW1fYmFzZVszXSk7Ci0JCWlmIChob3N0X3Jlcy0+bWVtX2Jhc2VbNF0pCi0JCQlpb3Vu bWFwKCh2b2lkICopaG9zdF9yZXMtPm1lbV9iYXNlWzRdKTsKLQkJaWYgKGhvc3RfcmVzLT5kbW11 X2Jhc2UpCi0JCQlpb3VubWFwKGhvc3RfcmVzLT5kbW11X2Jhc2UpOwotCQlpZiAoaG9zdF9yZXMt PnBlcl9iYXNlKQotCQkJaW91bm1hcChob3N0X3Jlcy0+cGVyX2Jhc2UpOwotCQlpZiAoaG9zdF9y ZXMtPnBlcl9wbV9iYXNlKQotCQkJaW91bm1hcCgodm9pZCAqKWhvc3RfcmVzLT5wZXJfcG1fYmFz ZSk7Ci0JCWlmIChob3N0X3Jlcy0+Y29yZV9wbV9iYXNlKQotCQkJaW91bm1hcCgodm9pZCAqKWhv c3RfcmVzLT5jb3JlX3BtX2Jhc2UpOwotCi0JCWhvc3RfcmVzLT5tZW1fYmFzZVswXSA9ICh1MzIp IE5VTEw7Ci0JCWhvc3RfcmVzLT5tZW1fYmFzZVsyXSA9ICh1MzIpIE5VTEw7Ci0JCWhvc3RfcmVz LT5tZW1fYmFzZVszXSA9ICh1MzIpIE5VTEw7Ci0JCWhvc3RfcmVzLT5tZW1fYmFzZVs0XSA9ICh1 MzIpIE5VTEw7Ci0JCWhvc3RfcmVzLT5kbW11X2Jhc2UgPSBOVUxMOwotCi0JCWtmcmVlKGhvc3Rf cmVzKTsKLQl9Ci0KLQkvKiBGcmVlIHRoZSBkcml2ZXIncyBkZXZpY2UgY29udGV4dDogKi8KLQlr ZnJlZShkcnZfZGF0YXAtPmJhc2VfaW1nKTsKLQlrZnJlZSgodm9pZCAqKWRldl9jdHh0KTsKLQly ZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX2NvcHkoc3RydWN0 IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICAgdTMyIGRzcF9kZXN0X2FkZHIs IHUzMiBkc3Bfc3JjX2FkZHIsCi0JCQkJICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBl KQotewotCWludCBzdGF0dXMgPSAwOwotCXUzMiBzcmNfYWRkciA9IGRzcF9zcmNfYWRkcjsKLQl1 MzIgZGVzdF9hZGRyID0gZHNwX2Rlc3RfYWRkcjsKLQl1MzIgY29weV9ieXRlcyA9IDA7Ci0JdTMy IHRvdGFsX2J5dGVzID0gdWxfbnVtX2J5dGVzOwotCXU4IGhvc3RfYnVmW0JVRkZFUlNJWkVdOwot CXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7Ci0KLQl3 aGlsZSAodG90YWxfYnl0ZXMgPiAwICYmICFzdGF0dXMpIHsKLQkJY29weV9ieXRlcyA9Ci0JCSAg ICB0b3RhbF9ieXRlcyA+IEJVRkZFUlNJWkUgPyBCVUZGRVJTSVpFIDogdG90YWxfYnl0ZXM7Ci0J CS8qIFJlYWQgZnJvbSBFeHRlcm5hbCBtZW1vcnkgKi8KLQkJc3RhdHVzID0gcmVhZF9leHRfZHNw X2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmLCBzcmNfYWRkciwKLQkJCQkJICAgY29weV9ieXRlcywg bWVtX3R5cGUpOwotCQlpZiAoIXN0YXR1cykgewotCQkJaWYgKGRlc3RfYWRkciA8IChkZXZfY29u dGV4dC0+ZHNwX3N0YXJ0X2FkZCArCi0JCQkJCSBkZXZfY29udGV4dC0+aW50ZXJuYWxfc2l6ZSkp IHsKLQkJCQkvKiBXcml0ZSB0byBJbnRlcm5hbCBtZW1vcnkgKi8KLQkJCQlzdGF0dXMgPSB3cml0 ZV9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWYsCi0JCQkJCQkJZGVzdF9hZGRyLCBjb3B5X2J5 dGVzLAotCQkJCQkJCW1lbV90eXBlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogV3JpdGUgdG8gRXh0 ZXJuYWwgbWVtb3J5ICovCi0JCQkJc3RhdHVzID0KLQkJCQkgICAgd3JpdGVfZXh0X2RzcF9kYXRh KGRldl9jdHh0LCBob3N0X2J1ZiwKLQkJCQkJCSAgICAgICBkZXN0X2FkZHIsIGNvcHlfYnl0ZXMs Ci0JCQkJCQkgICAgICAgbWVtX3R5cGUsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQl0b3RhbF9ieXRl cyAtPSBjb3B5X2J5dGVzOwotCQlzcmNfYWRkciArPSBjb3B5X2J5dGVzOwotCQlkZXN0X2FkZHIg Kz0gY29weV9ieXRlczsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogTWVtIFdyaXRlIGRv ZXMgbm90IGhhbHQgdGhlIERTUCB0byB3cml0ZSB1bmxpa2UgYnJpZGdlX2JyZF93cml0ZSAqLwot c3RhdGljIGludCBicmlkZ2VfYnJkX21lbV93cml0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0 ICpkZXZfY3R4dCwKLQkJCQkgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAotCQkJCSAg ICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0J c3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKLQl1MzIg dWxfcmVtYWluX2J5dGVzID0gMDsKLQl1MzIgdWxfYnl0ZXMgPSAwOwotCi0JdWxfcmVtYWluX2J5 dGVzID0gdWxfbnVtX2J5dGVzOwotCXdoaWxlICh1bF9yZW1haW5fYnl0ZXMgPiAwICYmICFzdGF0 dXMpIHsKLQkJdWxfYnl0ZXMgPQotCQkgICAgdWxfcmVtYWluX2J5dGVzID4gQlVGRkVSU0laRSA/ IEJVRkZFUlNJWkUgOiB1bF9yZW1haW5fYnl0ZXM7Ci0JCWlmIChkc3BfYWRkciA8IChkZXZfY29u dGV4dC0+ZHNwX3N0YXJ0X2FkZCArCi0JCQkJIGRldl9jb250ZXh0LT5pbnRlcm5hbF9zaXplKSkg ewotCQkJc3RhdHVzID0KLQkJCSAgICB3cml0ZV9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWZm LCBkc3BfYWRkciwKLQkJCQkJICAgdWxfYnl0ZXMsIG1lbV90eXBlKTsKLQkJfSBlbHNlIHsKLQkJ CXN0YXR1cyA9IHdyaXRlX2V4dF9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWZmLAotCQkJCQkJ ICAgIGRzcF9hZGRyLCB1bF9ieXRlcywKLQkJCQkJCSAgICBtZW1fdHlwZSwgdHJ1ZSk7Ci0JCX0K LQkJdWxfcmVtYWluX2J5dGVzIC09IHVsX2J5dGVzOwotCQlkc3BfYWRkciArPSB1bF9ieXRlczsK LQkJaG9zdF9idWZmID0gaG9zdF9idWZmICsgdWxfYnl0ZXM7Ci0JfQotCXJldHVybiBzdGF0dXM7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fbWFwID09PT09PT09Ci0gKiAg ICAgIFRoaXMgZnVuY3Rpb24gbWFwcyBNUFUgYnVmZmVyIHRvIHRoZSBEU1AgYWRkcmVzcyBzcGFj ZS4gSXQgcGVyZm9ybXMKLSAqICBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlv biBpZiByZXF1aXJlZC4gSXQgdHJhbnNsYXRlcyBlYWNoCi0gKiAgcGFnZSBzaW5jZSBsaW5lYXIg YWRkcmVzc2VzIGNhbiBiZSBwaHlzaWNhbGx5IG5vbi1jb250aWd1b3VzCi0gKiAgQWxsIGFkZHJl c3MgJiBzaXplIGFyZ3VtZW50cyBhcmUgYXNzdW1lZCB0byBiZSBwYWdlIGFsaWduZWQgKGluIHBy b2MuYykKLSAqCi0gKiAgVE9ETzogRGlzYWJsZSBNTVUgd2hpbGUgdXBkYXRpbmcgdGhlIHBhZ2Ug dGFibGVzIChidXQgdGhhdCdsbCBzdGFsbCBEU1ApCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX2Jy ZF9tZW1fbWFwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgdTMy IHVsX21wdV9hZGRyLCB1MzIgdmlydF9hZGRyLAotCQkJCSAgdTMyIHVsX251bV9ieXRlcywgdTMy IHVsX21hcF9hdHRyLAotCQkJCSAgc3RydWN0IHBhZ2UgKiptYXBwZWRfcGFnZXMpCi17Ci0JdTMy IGF0dHJzOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRl dl9jb250ZXh0ID0gZGV2X2N0eHQ7Ci0Jc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCBod19hdHRy czsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9 IGN1cnJlbnQtPm1tOwotCXUzMiB3cml0ZSA9IDA7Ci0JdTMyIG51bV91c3JfcGdzID0gMDsKLQlz dHJ1Y3QgcGFnZSAqbWFwcGVkX3BhZ2UsICpwZzsKLQlzMzIgcGdfbnVtOwotCXUzMiB2YSA9IHZp cnRfYWRkcjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJfdGFzayA9IGN1cnJlbnQ7Ci0JdTMy IHBnX2kgPSAwOwotCXUzMiBtcHVfYWRkciwgcGE7Ci0KLQlkZXZfZGJnKGJyaWRnZSwKLQkJIiVz IGhEZXZDdHh0ICVwLCBwYSAleCwgdmEgJXgsIHNpemUgJXgsIHVsX21hcF9hdHRyICV4XG4iLAot CQlfX2Z1bmNfXywgZGV2X2N0eHQsIHVsX21wdV9hZGRyLCB2aXJ0X2FkZHIsIHVsX251bV9ieXRl cywKLQkJdWxfbWFwX2F0dHIpOwotCWlmICh1bF9udW1fYnl0ZXMgPT0gMCkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlpZiAodWxfbWFwX2F0dHIgJiBEU1BfTUFQX0RJUl9NQVNLKSB7Ci0JCWF0dHJz ID0gdWxfbWFwX2F0dHI7Ci0JfSBlbHNlIHsKLQkJLyogQXNzaWduIGRlZmF1bHQgYXR0cmlidXRl cyAqLwotCQlhdHRycyA9IHVsX21hcF9hdHRyIHwgKERTUF9NQVBWSVJUVUFMQUREUiB8IERTUF9N QVBFTEVNU0laRTE2KTsKLQl9Ci0JLyogVGFrZSBtYXBwaW5nIHByb3BlcnRpZXMgKi8KLQlpZiAo YXR0cnMgJiBEU1BfTUFQQklHRU5ESUFOKQotCQlod19hdHRycy5lbmRpYW5pc20gPSBIV19CSUdf RU5ESUFOOwotCWVsc2UKLQkJaHdfYXR0cnMuZW5kaWFuaXNtID0gSFdfTElUVExFX0VORElBTjsK LQotCWh3X2F0dHJzLm1peGVkX3NpemUgPSAoZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90KQotCSAg ICAoKGF0dHJzICYgRFNQX01BUE1JWEVERUxFTVNJWkUpID4+IDIpOwotCS8qIElnbm9yZSBlbGVt ZW50X3NpemUgaWYgbWl4ZWRfc2l6ZSBpcyBlbmFibGVkICovCi0JaWYgKGh3X2F0dHJzLm1peGVk X3NpemUgPT0gMCkgewotCQlpZiAoYXR0cnMgJiBEU1BfTUFQRUxFTVNJWkU4KSB7Ci0JCQkvKiBT aXplIGlzIDggYml0ICovCi0JCQlod19hdHRycy5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkU4 QklUOwotCQl9IGVsc2UgaWYgKGF0dHJzICYgRFNQX01BUEVMRU1TSVpFMTYpIHsKLQkJCS8qIFNp emUgaXMgMTYgYml0ICovCi0JCQlod19hdHRycy5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkUx NkJJVDsKLQkJfSBlbHNlIGlmIChhdHRycyAmIERTUF9NQVBFTEVNU0laRTMyKSB7Ci0JCQkvKiBT aXplIGlzIDMyIGJpdCAqLwotCQkJaHdfYXR0cnMuZWxlbWVudF9zaXplID0gSFdfRUxFTV9TSVpF MzJCSVQ7Ci0JCX0gZWxzZSBpZiAoYXR0cnMgJiBEU1BfTUFQRUxFTVNJWkU2NCkgewotCQkJLyog U2l6ZSBpcyA2NCBiaXQgKi8KLQkJCWh3X2F0dHJzLmVsZW1lbnRfc2l6ZSA9IEhXX0VMRU1fU0la RTY0QklUOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE1peGVkc2l6ZSBpc24ndCBlbmFibGVk LCBzbyBzaXplIGNhbid0IGJlCi0JCQkgKiB6ZXJvIGhlcmUKLQkJCSAqLwotCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCX0KLQl9Ci0JaWYgKGF0dHJzICYgRFNQX01BUERPTk9UTE9DSykKLQkJaHdfYXR0 cnMuZG9ub3Rsb2NrbXB1cGFnZSA9IDE7Ci0JZWxzZQotCQlod19hdHRycy5kb25vdGxvY2ttcHVw YWdlID0gMDsKLQotCWlmIChhdHRycyAmIERTUF9NQVBWTUFMTE9DQUREUikgewotCQlyZXR1cm4g bWVtX21hcF92bWFsbG9jKGRldl9jdHh0LCB1bF9tcHVfYWRkciwgdmlydF9hZGRyLAotCQkJCSAg ICAgICB1bF9udW1fYnl0ZXMsICZod19hdHRycyk7Ci0JfQotCS8qCi0JICogRG8gT1Mtc3BlY2lm aWMgdXNlci12YSB0byBwYSB0cmFuc2xhdGlvbi4KLQkgKiBDb21iaW5lIHBoeXNpY2FsbHkgY29u dGlndW91cyByZWdpb25zIHRvIHJlZHVjZSBUTEJzLgotCSAqIFBhc3MgdGhlIHRyYW5zbGF0ZWQg cGEgdG8gcHRlX3VwZGF0ZS4KLQkgKi8KLQlpZiAoKGF0dHJzICYgRFNQX01BUFBIWVNJQ0FMQURE UikpIHsKLQkJc3RhdHVzID0gcHRlX3VwZGF0ZShkZXZfY29udGV4dCwgdWxfbXB1X2FkZHIsIHZp cnRfYWRkciwKLQkJCQkgICAgdWxfbnVtX2J5dGVzLCAmaHdfYXR0cnMpOwotCQlnb3RvIGZ1bmNf Y29udDsKLQl9Ci0KLQkvKgotCSAqIEltcG9ydGFudCBOb3RlOiB1bF9tcHVfYWRkciBpcyBtYXBw ZWQgZnJvbSB1c2VyIGFwcGxpY2F0aW9uIHByb2Nlc3MKLQkgKiB0byBjdXJyZW50IHByb2Nlc3Mg LSBpdCBtdXN0IGxpZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgY3VycmVudAotCSAqIHZpcnR1YWwg bWVtb3J5IGFkZHJlc3Mgc3BhY2UgaW4gb3JkZXIgdG8gYmUgb2YgdXNlIHRvIHVzIGhlcmUhCi0J ICovCi0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXZtYSA9IGZpbmRfdm1hKG1tLCB1bF9t cHVfYWRkcik7Ci0JaWYgKHZtYSkKLQkJZGV2X2RiZyhicmlkZ2UsCi0JCQkiVk1BZm9yIFVzZXJC dWY6IHVsX21wdV9hZGRyPSV4LCB1bF9udW1fYnl0ZXM9JXgsICIKLQkJCSJ2bV9zdGFydD0lbHgs IHZtX2VuZD0lbHgsIHZtX2ZsYWdzPSVseFxuIiwgdWxfbXB1X2FkZHIsCi0JCQl1bF9udW1fYnl0 ZXMsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAotCQkJdm1hLT52bV9mbGFncyk7Ci0KLQkv KgotCSAqIEl0IGlzIG9ic2VydmVkIHRoYXQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCB0aGUg dXNlciBidWZmZXIgaXMKLQkgKiBzcHJlYWQgYWNyb3NzIHNldmVyYWwgVk1Bcy4gU28gbG9vcCB0 aHJvdWdoIGFuZCBjaGVjayBpZiB0aGUgZW50aXJlCi0JICogdXNlciBidWZmZXIgaXMgY292ZXJl ZAotCSAqLwotCXdoaWxlICgodm1hKSAmJiAodWxfbXB1X2FkZHIgKyB1bF9udW1fYnl0ZXMgPiB2 bWEtPnZtX2VuZCkpIHsKLQkJLyoganVtcCB0byB0aGUgbmV4dCBWTUEgcmVnaW9uICovCi0JCXZt YSA9IGZpbmRfdm1hKG1tLCB2bWEtPnZtX2VuZCArIDEpOwotCQlkZXZfZGJnKGJyaWRnZSwKLQkJ CSJWTUEgZm9yIFVzZXJCdWYgdWxfbXB1X2FkZHI9JXggdWxfbnVtX2J5dGVzPSV4LCAiCi0JCQki dm1fc3RhcnQ9JWx4LCB2bV9lbmQ9JWx4LCB2bV9mbGFncz0lbHhcbiIsIHVsX21wdV9hZGRyLAot CQkJdWxfbnVtX2J5dGVzLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKLQkJCXZtYS0+dm1f ZmxhZ3MpOwotCX0KLQlpZiAoIXZtYSkgewotCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IFZN QSByZWdpb24gZm9yIDB4JXggKCVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCB1bF9tcHVfYWRk ciwgdWxfbnVtX2J5dGVzKTsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJdXBfcmVhZCgmbW0tPm1t YXBfc2VtKTsKLQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotCi0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBW TV9JTykgewotCQludW1fdXNyX3BncyA9IHVsX251bV9ieXRlcyAvIFBHX1NJWkU0SzsKLQkJbXB1 X2FkZHIgPSB1bF9tcHVfYWRkcjsKLQotCQkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBm b3IgdXNlciBidWZmZXIgKi8KLQkJZm9yIChwZ19pID0gMDsgcGdfaSA8IG51bV91c3JfcGdzOyBw Z19pKyspIHsKLQkJCXBhID0gdXNlcl92YTJfcGEobW0sIG1wdV9hZGRyKTsKLQkJCWlmICghcGEp IHsKLQkJCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQkJcHJfZXJyKCJEU1BCUklER0U6IFZNX0lPIG1h cHBpbmcgcGh5c2ljYWwiCi0JCQkJICAgICAgICJhZGRyZXNzIGlzIGludmFsaWRcbiIpOwotCQkJ CWJyZWFrOwotCQkJfQotCQkJaWYgKHBmbl92YWxpZChfX3BoeXNfdG9fcGZuKHBhKSkpIHsKLQkJ CQlwZyA9IFBIWVNfVE9fUEFHRShwYSk7Ci0JCQkJZ2V0X3BhZ2UocGcpOwotCQkJCWlmIChwYWdl X2NvdW50KHBnKSA8IDEpIHsKLQkJCQkJcHJfZXJyKCJCYWQgcGFnZSBpbiBWTV9JTyBidWZmZXJc biIpOwotCQkJCQliYWRfcGFnZV9kdW1wKHBhLCBwZyk7Ci0JCQkJfQotCQkJfQotCQkJc3RhdHVz ID0gcHRlX3NldChkZXZfY29udGV4dC0+cHRfYXR0cnMsIHBhLAotCQkJCQkgdmEsIEhXX1BBR0Vf U0laRTRLQiwgJmh3X2F0dHJzKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJYnJlYWs7Ci0KLQkJCXZh ICs9IEhXX1BBR0VfU0laRTRLQjsKLQkJCW1wdV9hZGRyICs9IEhXX1BBR0VfU0laRTRLQjsKLQkJ CXBhICs9IEhXX1BBR0VfU0laRTRLQjsKLQkJfQotCX0gZWxzZSB7Ci0JCW51bV91c3JfcGdzID0g dWxfbnVtX2J5dGVzIC8gUEdfU0laRTRLOwotCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9XUklU RSB8IFZNX01BWVdSSVRFKSkKLQkJCXdyaXRlID0gMTsKLQotCQlmb3IgKHBnX2kgPSAwOyBwZ19p IDwgbnVtX3Vzcl9wZ3M7IHBnX2krKykgewotCQkJcGdfbnVtID0gZ2V0X3VzZXJfcGFnZXMoY3Vy cl90YXNrLCBtbSwgdWxfbXB1X2FkZHIsIDEsCi0JCQkJCQl3cml0ZSwgMSwgJm1hcHBlZF9wYWdl LCBOVUxMKTsKLQkJCWlmIChwZ19udW0gPiAwKSB7Ci0JCQkJaWYgKHBhZ2VfY291bnQobWFwcGVk X3BhZ2UpIDwgMSkgewotCQkJCQlwcl9lcnIoIkJhZCBwYWdlIGNvdW50IGFmdGVyIGRvaW5nIgot CQkJCQkgICAgICAgImdldF91c2VyX3BhZ2VzIG9uIgotCQkJCQkgICAgICAgInVzZXIgYnVmZmVy XG4iKTsKLQkJCQkJYmFkX3BhZ2VfZHVtcChwYWdlX3RvX3BoeXMobWFwcGVkX3BhZ2UpLAotCQkJ CQkJICAgICAgbWFwcGVkX3BhZ2UpOwotCQkJCX0KLQkJCQlzdGF0dXMgPSBwdGVfc2V0KGRldl9j b250ZXh0LT5wdF9hdHRycywKLQkJCQkJCSBwYWdlX3RvX3BoeXMobWFwcGVkX3BhZ2UpLCB2YSwK LQkJCQkJCSBIV19QQUdFX1NJWkU0S0IsICZod19hdHRycyk7Ci0JCQkJaWYgKHN0YXR1cykKLQkJ CQkJYnJlYWs7Ci0KLQkJCQlpZiAobWFwcGVkX3BhZ2VzKQotCQkJCQltYXBwZWRfcGFnZXNbcGdf aV0gPSBtYXBwZWRfcGFnZTsKLQotCQkJCXZhICs9IEhXX1BBR0VfU0laRTRLQjsKLQkJCQl1bF9t cHVfYWRkciArPSBIV19QQUdFX1NJWkU0S0I7Ci0JCQl9IGVsc2UgewotCQkJCXByX2VycigiRFNQ QlJJREdFOiBnZXRfdXNlcl9wYWdlcyBGQUlMRUQsIgotCQkJCSAgICAgICAiTVBVIGFkZHIgPSAw eCV4LCIKLQkJCQkgICAgICAgInZtYS0+dm1fZmxhZ3MgPSAweCVseCwiCi0JCQkJICAgICAgICJn ZXRfdXNlcl9wYWdlcyBFcnIiCi0JCQkJICAgICAgICJWYWx1ZSA9ICVkLCBCdWZmZXIiCi0JCQkJ ICAgICAgICJzaXplPTB4JXhcbiIsIHVsX21wdV9hZGRyLAotCQkJCSAgICAgICB2bWEtPnZtX2Zs YWdzLCBwZ19udW0sIHVsX251bV9ieXRlcyk7Ci0JCQkJc3RhdHVzID0gLUVQRVJNOwotCQkJCWJy ZWFrOwotCQkJfQotCQl9Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci1mdW5jX2NvbnQ6 Ci0JaWYgKHN0YXR1cykgewotCQkvKgotCQkgKiBSb2xsIG91dCB0aGUgbWFwcGVkIHBhZ2VzIGlu Y2FzZSBpdCBmYWlsZWQgaW4gbWlkZGxlIG9mCi0JCSAqIG1hcHBpbmcKLQkJICovCi0JCWlmIChw Z19pKSB7Ci0JCQlicmlkZ2VfYnJkX21lbV91bl9tYXAoZGV2X2NvbnRleHQsIHZpcnRfYWRkciwK LQkJCQkJICAgKHBnX2kgKiBQR19TSVpFNEspKTsKLQkJfQotCQlzdGF0dXMgPSAtRVBFUk07Ci0J fQotCS8qCi0JICogSW4gYW55IGNhc2UsIGZsdXNoIHRoZSBUTEIKLQkgKiBUaGlzIGlzIGNhbGxl ZCBmcm9tIGhlcmUgaW5zdGVhZCBmcm9tIHB0ZV91cGRhdGUgdG8gYXZvaWQgdW5uZWNlc3NhcnkK LQkgKiByZXBldGl0aW9uIHdoaWxlIG1hcHBpbmcgbm9uLWNvbnRpZ3VvdXMgcGh5c2ljYWwgcmVn aW9ucyBvZiBhIHZpcnR1YWwKLQkgKiByZWdpb24KLQkgKi8KLQlmbHVzaF9hbGwoZGV2X2NvbnRl eHQpOwotCWRldl9kYmcoYnJpZGdlLCAiJXMgc3RhdHVzICV4XG4iLCBfX2Z1bmNfXywgc3RhdHVz KTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbWVt X3VuX21hcCA9PT09PT09PQotICogICAgICBJbnZhbGlkYXRlIHRoZSBQVEVzIGZvciB0aGUgRFNQ IFZBIGJsb2NrIHRvIGJlIHVubWFwcGVkLgotICoKLSAqICAgICAgUFRFcyBvZiBhIG1hcHBlZCBt ZW1vcnkgYmxvY2sgYXJlIGNvbnRpZ3VvdXMgaW4gYW55IHBhZ2UgdGFibGUKLSAqICAgICAgU28s IGluc3RlYWQgb2YgbG9va2luZyB1cCB0aGUgUFRFIGFkZHJlc3MgZm9yIGV2ZXJ5IDRLIGJsb2Nr LAotICogICAgICB3ZSBjbGVhciBjb25zZWN1dGl2ZSBQVEVzIHVudGlsIHdlIHVubWFwIGFsbCB0 aGUgYnl0ZXMKLSAqLwotc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV91bl9tYXAoc3RydWN0IGJy aWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICAgICB1MzIgdmlydF9hZGRyLCB1MzIg dWxfbnVtX2J5dGVzKQotewotCXUzMiBsMV9iYXNlX3ZhOwotCXUzMiBsMl9iYXNlX3ZhOwotCXUz MiBsMl9iYXNlX3BhOwotCXUzMiBsMl9wYWdlX251bTsKLQl1MzIgcHRlX3ZhbDsKLQl1MzIgcHRl X3NpemU7Ci0JdTMyIHB0ZV9jb3VudDsKLQl1MzIgcHRlX2FkZHJfbDE7Ci0JdTMyIHB0ZV9hZGRy X2wyID0gMDsKLQl1MzIgcmVtX2J5dGVzOwotCXUzMiByZW1fYnl0ZXNfbDI7Ci0JdTMyIHZhX2N1 cnI7Ci0Jc3RydWN0IHBhZ2UgKnBnID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3Qg YnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OwotCXN0cnVjdCBwZ190 YWJsZV9hdHRycyAqcHQgPSBkZXZfY29udGV4dC0+cHRfYXR0cnM7Ci0JdTMyIHRlbXA7Ci0JdTMy IHBhZGRyOwotCXUzMiBudW1vZjRrX3BhZ2VzID0gMDsKLQotCXZhX2N1cnIgPSB2aXJ0X2FkZHI7 Ci0JcmVtX2J5dGVzID0gdWxfbnVtX2J5dGVzOwotCXJlbV9ieXRlc19sMiA9IDA7Ci0JbDFfYmFz ZV92YSA9IHB0LT5sMV9iYXNlX3ZhOwotCXB0ZV9hZGRyX2wxID0gaHdfbW11X3B0ZV9hZGRyX2wx KGwxX2Jhc2VfdmEsIHZhX2N1cnIpOwotCWRldl9kYmcoYnJpZGdlLCAiJXMgZGV2X2N0eHQgJXAs IHZhICV4LCBOdW1CeXRlcyAleCBsMV9iYXNlX3ZhICV4LCAiCi0JCSJwdGVfYWRkcl9sMSAleFxu IiwgX19mdW5jX18sIGRldl9jdHh0LCB2aXJ0X2FkZHIsCi0JCXVsX251bV9ieXRlcywgbDFfYmFz ZV92YSwgcHRlX2FkZHJfbDEpOwotCi0Jd2hpbGUgKHJlbV9ieXRlcyAmJiAhc3RhdHVzKSB7Ci0J CXUzMiB2YV9jdXJyX29yaWcgPSB2YV9jdXJyOwotCQkvKiBGaW5kIHdoZXRoZXIgdGhlIEwxIFBU RSBwb2ludHMgdG8gYSB2YWxpZCBMMiBQVCAqLwotCQlwdGVfYWRkcl9sMSA9IGh3X21tdV9wdGVf YWRkcl9sMShsMV9iYXNlX3ZhLCB2YV9jdXJyKTsKLQkJcHRlX3ZhbCA9ICoodTMyICopIHB0ZV9h ZGRyX2wxOwotCQlwdGVfc2l6ZSA9IGh3X21tdV9wdGVfc2l6ZV9sMShwdGVfdmFsKTsKLQotCQlp ZiAocHRlX3NpemUgIT0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUpCi0JCQlnb3RvIHNraXBfY29h cnNlX3BhZ2U7Ci0KLQkJLyoKLQkJICogR2V0IHRoZSBMMiBQQSBmcm9tIHRoZSBMMSBQVEUsIGFu ZCBmaW5kCi0JCSAqIGNvcnJlc3BvbmRpbmcgTDIgVkEKLQkJICovCi0JCWwyX2Jhc2VfcGEgPSBo d19tbXVfcHRlX2NvYXJzZV9sMShwdGVfdmFsKTsKLQkJbDJfYmFzZV92YSA9IGwyX2Jhc2VfcGEg LSBwdC0+bDJfYmFzZV9wYSArIHB0LT5sMl9iYXNlX3ZhOwotCQlsMl9wYWdlX251bSA9Ci0JCSAg ICAobDJfYmFzZV9wYSAtIHB0LT5sMl9iYXNlX3BhKSAvIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpF OwotCQkvKgotCQkgKiBGaW5kIHRoZSBMMiBQVEUgYWRkcmVzcyBmcm9tIHdoaWNoIHdlIHdpbGwg c3RhcnQKLQkJICogY2xlYXJpbmcsIHRoZSBudW1iZXIgb2YgUFRFcyB0byBiZSBjbGVhcmVkIG9u IHRoaXMKLQkJICogcGFnZSwgYW5kIHRoZSBzaXplIG9mIFZBIHNwYWNlIHRoYXQgbmVlZHMgdG8g YmUKLQkJICogY2xlYXJlZCBvbiB0aGlzIEwyIHBhZ2UKLQkJICovCi0JCXB0ZV9hZGRyX2wyID0g aHdfbW11X3B0ZV9hZGRyX2wyKGwyX2Jhc2VfdmEsIHZhX2N1cnIpOwotCQlwdGVfY291bnQgPSBw dGVfYWRkcl9sMiAmIChIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAtIDEpOwotCQlwdGVfY291bnQg PSAoSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUgLSBwdGVfY291bnQpIC8gc2l6ZW9mKHUzMik7Ci0J CWlmIChyZW1fYnl0ZXMgPCAocHRlX2NvdW50ICogUEdfU0laRTRLKSkKLQkJCXB0ZV9jb3VudCA9 IHJlbV9ieXRlcyAvIFBHX1NJWkU0SzsKLQkJcmVtX2J5dGVzX2wyID0gcHRlX2NvdW50ICogUEdf U0laRTRLOwotCi0JCS8qCi0JCSAqIFVubWFwIHRoZSBWQSBzcGFjZSBvbiB0aGlzIEwyIFBULiBB IHF1aWNrZXIgd2F5Ci0JCSAqIHdvdWxkIGJlIHRvIGNsZWFyIHB0ZV9jb3VudCBlbnRyaWVzIHN0 YXJ0aW5nIGZyb20KLQkJICogcHRlX2FkZHJfbDIuIEhvd2V2ZXIsIGJlbG93IGNvZGUgY2hlY2tz IHRoYXQgd2UgZG9uJ3QKLQkJICogY2xlYXIgaW52YWxpZCBlbnRyaWVzIG9yIGxlc3MgdGhhbiA2 NEtCIGZvciBhIDY0S0IKLQkJICogZW50cnkuIFNpbWlsYXIgY2hlY2tpbmcgaXMgZG9uZSBmb3Ig TDEgUFRFcyB0b28KLQkJICogYmVsb3cKLQkJICovCi0JCXdoaWxlIChyZW1fYnl0ZXNfbDIgJiYg IXN0YXR1cykgewotCQkJcHRlX3ZhbCA9ICoodTMyICopIHB0ZV9hZGRyX2wyOwotCQkJcHRlX3Np emUgPSBod19tbXVfcHRlX3NpemVfbDIocHRlX3ZhbCk7Ci0JCQkvKiB2YV9jdXJyIGFsaWduZWQg dG8gcHRlX3NpemU/ICovCi0JCQlpZiAocHRlX3NpemUgPT0gMCB8fCByZW1fYnl0ZXNfbDIgPCBw dGVfc2l6ZSB8fAotCQkJICAgIHZhX2N1cnIgJiAocHRlX3NpemUgLSAxKSkgewotCQkJCXN0YXR1 cyA9IC1FUEVSTTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogQ29sbGVjdCBQaHlzaWNhbCBh ZGRyZXNzZXMgZnJvbSBWQSAqLwotCQkJcGFkZHIgPSAocHRlX3ZhbCAmIH4ocHRlX3NpemUgLSAx KSk7Ci0JCQlpZiAocHRlX3NpemUgPT0gSFdfUEFHRV9TSVpFNjRLQikKLQkJCQludW1vZjRrX3Bh Z2VzID0gMTY7Ci0JCQllbHNlCi0JCQkJbnVtb2Y0a19wYWdlcyA9IDE7Ci0JCQl0ZW1wID0gMDsK LQkJCXdoaWxlICh0ZW1wKysgPCBudW1vZjRrX3BhZ2VzKSB7Ci0JCQkJaWYgKCFwZm5fdmFsaWQo X19waHlzX3RvX3BmbihwYWRkcikpKSB7Ci0JCQkJCXBhZGRyICs9IEhXX1BBR0VfU0laRTRLQjsK LQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXBnID0gUEhZU19UT19QQUdFKHBhZGRyKTsKLQkJ CQlpZiAocGFnZV9jb3VudChwZykgPCAxKSB7Ci0JCQkJCXByX2luZm8oIkRTUEJSSURHRTogVU5N QVAgZnVuY3Rpb246ICIKLQkJCQkJCSJDT1VOVCAwIEZPUiBQQSAweCV4LCBzaXplID0gIgotCQkJ CQkJIjB4JXhcbiIsIHBhZGRyLCB1bF9udW1fYnl0ZXMpOwotCQkJCQliYWRfcGFnZV9kdW1wKHBh ZGRyLCBwZyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0X3BhZ2VfZGlydHkocGcpOwotCQkJCQlw YWdlX2NhY2hlX3JlbGVhc2UocGcpOwotCQkJCX0KLQkJCQlwYWRkciArPSBIV19QQUdFX1NJWkU0 S0I7Ci0JCQl9Ci0JCQlpZiAoaHdfbW11X3B0ZV9jbGVhcihwdGVfYWRkcl9sMiwgdmFfY3Vyciwg cHRlX3NpemUpKSB7Ci0JCQkJc3RhdHVzID0gLUVQRVJNOwotCQkJCWdvdG8gRVhJVF9MT09QOwot CQkJfQotCi0JCQlzdGF0dXMgPSAwOwotCQkJcmVtX2J5dGVzX2wyIC09IHB0ZV9zaXplOwotCQkJ dmFfY3VyciArPSBwdGVfc2l6ZTsKLQkJCXB0ZV9hZGRyX2wyICs9IChwdGVfc2l6ZSA+PiAxMikg KiBzaXplb2YodTMyKTsKLQkJfQotCQlzcGluX2xvY2soJnB0LT5wZ19sb2NrKTsKLQkJaWYgKHJl bV9ieXRlc19sMiA9PSAwKSB7Ci0JCQlwdC0+cGdfaW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJp ZXMgLT0gcHRlX2NvdW50OwotCQkJaWYgKHB0LT5wZ19pbmZvW2wyX3BhZ2VfbnVtXS5udW1fZW50 cmllcyA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhciB0aGUgTDEgUFRFIHBvaW50aW5nIHRv IHRoZSBMMiBQVAotCQkJCSAqLwotCQkJCWlmICghaHdfbW11X3B0ZV9jbGVhcihsMV9iYXNlX3Zh LCB2YV9jdXJyX29yaWcsCi0JCQkJCQkgICAgIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKSkKLQkJ CQkJc3RhdHVzID0gMDsKLQkJCQllbHNlIHsKLQkJCQkJc3RhdHVzID0gLUVQRVJNOwotCQkJCQlz cGluX3VubG9jaygmcHQtPnBnX2xvY2spOwotCQkJCQlnb3RvIEVYSVRfTE9PUDsKLQkJCQl9Ci0J CQl9Ci0JCQlyZW1fYnl0ZXMgLT0gcHRlX2NvdW50ICogUEdfU0laRTRLOwotCQl9IGVsc2UKLQkJ CXN0YXR1cyA9IC1FUEVSTTsKLQotCQlzcGluX3VubG9jaygmcHQtPnBnX2xvY2spOwotCQljb250 aW51ZTsKLXNraXBfY29hcnNlX3BhZ2U6Ci0JCS8qIHZhX2N1cnIgYWxpZ25lZCB0byBwdGVfc2l6 ZT8gKi8KLQkJLyogcHRlX3NpemUgPSAxIE1CIG9yIDE2IE1CICovCi0JCWlmIChwdGVfc2l6ZSA9 PSAwIHx8IHJlbV9ieXRlcyA8IHB0ZV9zaXplIHx8Ci0JCSAgICB2YV9jdXJyICYgKHB0ZV9zaXpl IC0gMSkpIHsKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHB0 ZV9zaXplID09IEhXX1BBR0VfU0laRTFNQikKLQkJCW51bW9mNGtfcGFnZXMgPSAyNTY7Ci0JCWVs c2UKLQkJCW51bW9mNGtfcGFnZXMgPSA0MDk2OwotCQl0ZW1wID0gMDsKLQkJLyogQ29sbGVjdCBQ aHlzaWNhbCBhZGRyZXNzZXMgZnJvbSBWQSAqLwotCQlwYWRkciA9IChwdGVfdmFsICYgfihwdGVf c2l6ZSAtIDEpKTsKLQkJd2hpbGUgKHRlbXArKyA8IG51bW9mNGtfcGFnZXMpIHsKLQkJCWlmIChw Zm5fdmFsaWQoX19waHlzX3RvX3BmbihwYWRkcikpKSB7Ci0JCQkJcGcgPSBQSFlTX1RPX1BBR0Uo cGFkZHIpOwotCQkJCWlmIChwYWdlX2NvdW50KHBnKSA8IDEpIHsKLQkJCQkJcHJfaW5mbygiRFNQ QlJJREdFOiBVTk1BUCBmdW5jdGlvbjogIgotCQkJCQkJIkNPVU5UIDAgRk9SIFBBIDB4JXgsIHNp emUgPSAiCi0JCQkJCQkiMHgleFxuIiwgcGFkZHIsIHVsX251bV9ieXRlcyk7Ci0JCQkJCWJhZF9w YWdlX2R1bXAocGFkZHIsIHBnKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzZXRfcGFnZV9kaXJ0eShw Zyk7Ci0JCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwZyk7Ci0JCQkJfQotCQkJfQotCQkJcGFkZHIg Kz0gSFdfUEFHRV9TSVpFNEtCOwotCQl9Ci0JCWlmICghaHdfbW11X3B0ZV9jbGVhcihsMV9iYXNl X3ZhLCB2YV9jdXJyLCBwdGVfc2l6ZSkpIHsKLQkJCXN0YXR1cyA9IDA7Ci0JCQlyZW1fYnl0ZXMg LT0gcHRlX3NpemU7Ci0JCQl2YV9jdXJyICs9IHB0ZV9zaXplOwotCQl9IGVsc2UgewotCQkJc3Rh dHVzID0gLUVQRVJNOwotCQkJZ290byBFWElUX0xPT1A7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBJdCBp cyBiZXR0ZXIgdG8gZmx1c2ggdGhlIFRMQiBoZXJlLCBzbyB0aGF0IGFueSBzdGFsZSBvbGQgZW50 cmllcwotCSAqIGdldCBmbHVzaGVkCi0JICovCi1FWElUX0xPT1A6Ci0JZmx1c2hfYWxsKGRldl9j b250ZXh0KTsKLQlkZXZfZGJnKGJyaWRnZSwKLQkJIiVzOiB2YV9jdXJyICV4LCBwdGVfYWRkcl9s MSAleCBwdGVfYWRkcl9sMiAleCByZW1fYnl0ZXMgJXgsIgotCQkiIHJlbV9ieXRlc19sMiAleCBz dGF0dXMgJXhcbiIsIF9fZnVuY19fLCB2YV9jdXJyLCBwdGVfYWRkcl9sMSwKLQkJcHRlX2FkZHJf bDIsIHJlbV9ieXRlcywgcmVtX2J5dGVzX2wyLCBzdGF0dXMpOwotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gdXNlcl92YTJfcGEgPT09PT09PT0KLSAqICBQdXJwb3NlOgot ICogICAgICBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRocm91Z2ggdGhlIHBhZ2UgdGFibGVzIHRvIGNv bnZlcnQgYSB1c2VybGFuZAotICogICAgICB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRk cmVzcwotICovCi1zdGF0aWMgdTMyIHVzZXJfdmEyX3BhKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1 MzIgYWRkcmVzcykKLXsKLQlwZ2RfdCAqcGdkOwotCXB1ZF90ICpwdWQ7Ci0JcG1kX3QgKnBtZDsK LQlwdGVfdCAqcHRlcCwgcHRlOwotCi0JcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7Ci0J aWYgKHBnZF9ub25lKCpwZ2QpIHx8IHBnZF9iYWQoKnBnZCkpCi0JCXJldHVybiAwOwotCi0JcHVk ID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwotCWlmIChwdWRfbm9uZSgqcHVkKSB8fCBwdWRf YmFkKCpwdWQpKQotCQlyZXR1cm4gMDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNz KTsKLQlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSkKLQkJcmV0dXJuIDA7Ci0K LQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKLQlpZiAocHRlcCkgewotCQlw dGUgPSAqcHRlcDsKLQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCi0JCQlyZXR1cm4gcHRlICYgUEFH RV9NQVNLOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogID09PT09PT09IHB0ZV91cGRh dGUgPT09PT09PT0KLSAqICAgICAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBvcHRpbXVt IHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYW5kIHNpemVzCi0gKiAgICAgIENhbGxlciBtdXN0IHBh c3MgcGFnZS1hbGlnbmVkIHZhbHVlcwotICovCi1zdGF0aWMgaW50IHB0ZV91cGRhdGUoc3RydWN0 IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsIHUzMiBwYSwKLQkJCSAgICAgdTMyIHZhLCB1 MzIgc2l6ZSwKLQkJCSAgICAgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKQot ewotCXUzMiBpOwotCXUzMiBhbGxfYml0czsKLQl1MzIgcGFfY3VyciA9IHBhOwotCXUzMiB2YV9j dXJyID0gdmE7Ci0JdTMyIG51bV9ieXRlcyA9IHNpemU7Ci0Jc3RydWN0IGJyaWRnZV9kZXZfY29u dGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgcGFn ZV9zaXplW10gPSB7IEhXX1BBR0VfU0laRTE2TUIsIEhXX1BBR0VfU0laRTFNQiwKLQkJSFdfUEFH RV9TSVpFNjRLQiwgSFdfUEFHRV9TSVpFNEtCCi0JfTsKLQotCXdoaWxlIChudW1fYnl0ZXMgJiYg IXN0YXR1cykgewotCQkvKiBUbyBmaW5kIHRoZSBtYXguIHBhZ2Ugc2l6ZSB3aXRoIHdoaWNoIGJv dGggUEEgJiBWQSBhcmUKLQkJICogYWxpZ25lZCAqLwotCQlhbGxfYml0cyA9IHBhX2N1cnIgfCB2 YV9jdXJyOwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCWlmICgobnVtX2J5dGVz ID49IHBhZ2Vfc2l6ZVtpXSkgJiYgKChhbGxfYml0cyAmCi0JCQkJCQkJICAgICAocGFnZV9zaXpl W2ldIC0KLQkJCQkJCQkgICAgICAxKSkgPT0gMCkpIHsKLQkJCQlzdGF0dXMgPQotCQkJCSAgICBw dGVfc2V0KGRldl9jb250ZXh0LT5wdF9hdHRycywgcGFfY3VyciwKLQkJCQkJICAgIHZhX2N1cnIs IHBhZ2Vfc2l6ZVtpXSwgbWFwX2F0dHJzKTsKLQkJCQlwYV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsK LQkJCQl2YV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKLQkJCQludW1fYnl0ZXMgLT0gcGFnZV9zaXpl W2ldOwotCQkJCS8qIERvbid0IHRyeSBzbWFsbGVyIHNpemVzLiBIb3BlZnVsbHkgd2UgaGF2ZQot CQkJCSAqIHJlYWNoZWQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIGEgYmlnZ2VyIHBhZ2UKLQkJCQkg KiBzaXplICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwot fQotCi0vKgotICogID09PT09PT09IHB0ZV9zZXQgPT09PT09PT0KLSAqICAgICAgVGhpcyBmdW5j dGlvbiBjYWxjdWxhdGVzIFBURSBhZGRyZXNzIChNUFUgdmlydHVhbCkgdG8gYmUgdXBkYXRlZAot ICogICAgICBJdCBhbHNvIG1hbmFnZXMgdGhlIEwyIHBhZ2UgdGFibGVzCi0gKi8KLXN0YXRpYyBp bnQgcHRlX3NldChzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgKnB0LCB1MzIgcGEsIHUzMiB2YSwKLQkJ CSAgdTMyIHNpemUsIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKmF0dHJzKQotewotCXUzMiBp OwotCXUzMiBwdGVfdmFsOwotCXUzMiBwdGVfYWRkcl9sMTsKLQl1MzIgcHRlX3NpemU7Ci0JLyog QmFzZSBhZGRyZXNzIG9mIHRoZSBQVCB0aGF0IHdpbGwgYmUgdXBkYXRlZCAqLwotCXUzMiBwZ190 YmxfdmE7Ci0JdTMyIGwxX2Jhc2VfdmE7Ci0JLyogQ29tcGlsZXIgd2FybnMgdGhhdCB0aGUgbmV4 dCB0aHJlZSB2YXJpYWJsZXMgbWlnaHQgYmUgdXNlZAotCSAqIHVuaW5pdGlhbGl6ZWQgaW4gdGhp cyBmdW5jdGlvbi4gRG9lc24ndCBzZWVtIHNvLiBXb3JraW5nIGFyb3VuZCwKLQkgKiBhbnl3YXlz LiAqLwotCXUzMiBsMl9iYXNlX3ZhID0gMDsKLQl1MzIgbDJfYmFzZV9wYSA9IDA7Ci0JdTMyIGwy X3BhZ2VfbnVtID0gMDsKLQlpbnQgc3RhdHVzID0gMDsKLQotCWwxX2Jhc2VfdmEgPSBwdC0+bDFf YmFzZV92YTsKLQlwZ190YmxfdmEgPSBsMV9iYXNlX3ZhOwotCWlmICgoc2l6ZSA9PSBIV19QQUdF X1NJWkU2NEtCKSB8fCAoc2l6ZSA9PSBIV19QQUdFX1NJWkU0S0IpKSB7Ci0JCS8qIEZpbmQgd2hl dGhlciB0aGUgTDEgUFRFIHBvaW50cyB0byBhIHZhbGlkIEwyIFBUICovCi0JCXB0ZV9hZGRyX2wx ID0gaHdfbW11X3B0ZV9hZGRyX2wxKGwxX2Jhc2VfdmEsIHZhKTsKLQkJaWYgKHB0ZV9hZGRyX2wx IDw9IChwdC0+bDFfYmFzZV92YSArIHB0LT5sMV9zaXplKSkgewotCQkJcHRlX3ZhbCA9ICoodTMy ICopIHB0ZV9hZGRyX2wxOwotCQkJcHRlX3NpemUgPSBod19tbXVfcHRlX3NpemVfbDEocHRlX3Zh bCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9Ci0JCXNwaW5fbG9jaygmcHQt PnBnX2xvY2spOwotCQlpZiAocHRlX3NpemUgPT0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUpIHsK LQkJCS8qIEdldCB0aGUgTDIgUEEgZnJvbSB0aGUgTDEgUFRFLCBhbmQgZmluZAotCQkJICogY29y cmVzcG9uZGluZyBMMiBWQSAqLwotCQkJbDJfYmFzZV9wYSA9IGh3X21tdV9wdGVfY29hcnNlX2wx KHB0ZV92YWwpOwotCQkJbDJfYmFzZV92YSA9Ci0JCQkgICAgbDJfYmFzZV9wYSAtIHB0LT5sMl9i YXNlX3BhICsgcHQtPmwyX2Jhc2VfdmE7Ci0JCQlsMl9wYWdlX251bSA9Ci0JCQkgICAgKGwyX2Jh c2VfcGEgLQotCQkJICAgICBwdC0+bDJfYmFzZV9wYSkgLyBIV19NTVVfQ09BUlNFX1BBR0VfU0la RTsKLQkJfSBlbHNlIGlmIChwdGVfc2l6ZSA9PSAwKSB7Ci0JCQkvKiBMMSBQVEUgaXMgaW52YWxp ZC4gQWxsb2NhdGUgYSBMMiBQVCBhbmQKLQkJCSAqIHBvaW50IHRoZSBMMSBQVEUgdG8gaXQgKi8K LQkJCS8qIEZpbmQgYSBmcmVlIEwyIFBULiAqLwotCQkJZm9yIChpID0gMDsgKGkgPCBwdC0+bDJf bnVtX3BhZ2VzKSAmJgotCQkJICAgICAocHQtPnBnX2luZm9baV0ubnVtX2VudHJpZXMgIT0gMCk7 IGkrKykKLQkJCQk7Ci0JCQlpZiAoaSA8IHB0LT5sMl9udW1fcGFnZXMpIHsKLQkJCQlsMl9wYWdl X251bSA9IGk7Ci0JCQkJbDJfYmFzZV9wYSA9IHB0LT5sMl9iYXNlX3BhICsgKGwyX3BhZ2VfbnVt ICoKLQkJCQkJCUhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKTsKLQkJCQlsMl9iYXNlX3ZhID0gcHQt PmwyX2Jhc2VfdmEgKyAobDJfcGFnZV9udW0gKgotCQkJCQkJSFdfTU1VX0NPQVJTRV9QQUdFX1NJ WkUpOwotCQkJCS8qIEVuZGlhbm5lc3MgYXR0cmlidXRlcyBhcmUgaWdub3JlZCBmb3IKLQkJCQkg KiBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAqLwotCQkJCXN0YXR1cyA9Ci0JCQkJICAgIGh3X21t dV9wdGVfc2V0KGwxX2Jhc2VfdmEsIGwyX2Jhc2VfcGEsIHZhLAotCQkJCQkJICAgSFdfTU1VX0NP QVJTRV9QQUdFX1NJWkUsCi0JCQkJCQkgICBhdHRycyk7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXR1 cyA9IC1FTk9NRU07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3VuZCB2YWxpZCBMMSBQVEUg b2YgYW5vdGhlciBzaXplLgotCQkJICogU2hvdWxkIG5vdCBvdmVyd3JpdGUgaXQuICovCi0JCQlz dGF0dXMgPSAtRVBFUk07Ci0JCX0KLQkJaWYgKCFzdGF0dXMpIHsKLQkJCXBnX3RibF92YSA9IGwy X2Jhc2VfdmE7Ci0JCQlpZiAoc2l6ZSA9PSBIV19QQUdFX1NJWkU2NEtCKQotCQkJCXB0LT5wZ19p bmZvW2wyX3BhZ2VfbnVtXS5udW1fZW50cmllcyArPSAxNjsKLQkJCWVsc2UKLQkJCQlwdC0+cGdf aW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJpZXMrKzsKLQkJCWRldl9kYmcoYnJpZGdlLCAiUFRF OiBMMiBCYXNlVmEgJXgsIEJhc2VQYSAleCwgUGFnZU51bSAiCi0JCQkJIiV4LCBudW1fZW50cmll cyAleFxuIiwgbDJfYmFzZV92YSwKLQkJCQlsMl9iYXNlX3BhLCBsMl9wYWdlX251bSwKLQkJCQlw dC0+cGdfaW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJpZXMpOwotCQl9Ci0JCXNwaW5fdW5sb2Nr KCZwdC0+cGdfbG9jayk7Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCWRldl9kYmcoYnJpZGdlLCAi UFRFOiBwZ190YmxfdmEgJXgsIHBhICV4LCB2YSAleCwgc2l6ZSAleFxuIiwKLQkJCXBnX3RibF92 YSwgcGEsIHZhLCBzaXplKTsKLQkJZGV2X2RiZyhicmlkZ2UsICJQVEU6IGVuZGlhbmlzbSAleCwg ZWxlbWVudF9zaXplICV4LCAiCi0JCQkibWl4ZWRfc2l6ZSAleFxuIiwgYXR0cnMtPmVuZGlhbmlz bSwKLQkJCWF0dHJzLT5lbGVtZW50X3NpemUsIGF0dHJzLT5taXhlZF9zaXplKTsKLQkJc3RhdHVz ID0gaHdfbW11X3B0ZV9zZXQocGdfdGJsX3ZhLCBwYSwgdmEsIHNpemUsIGF0dHJzKTsKLQl9Ci0K LQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKiBNZW1vcnkgbWFwIGtlcm5lbCBWQSAtLSBtZW1vcnkg YWxsb2NhdGVkIHdpdGggdm1hbGxvYyAqLwotc3RhdGljIGludCBtZW1fbWFwX3ZtYWxsb2Moc3Ry dWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCi0JCQkJICB1MzIgdWxfbXB1X2Fk ZHIsIHUzMiB2aXJ0X2FkZHIsCi0JCQkJICB1MzIgdWxfbnVtX2J5dGVzLAotCQkJCSAgc3RydWN0 IGh3X21tdV9tYXBfYXR0cnNfdCAqaHdfYXR0cnMpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3Ry dWN0IHBhZ2UgKnBhZ2VbMV07Ci0JdTMyIGk7Ci0JdTMyIHBhX2N1cnI7Ci0JdTMyIHBhX25leHQ7 Ci0JdTMyIHZhX2N1cnI7Ci0JdTMyIHNpemVfY3VycjsKLQl1MzIgbnVtX3BhZ2VzOwotCXUzMiBw YTsKLQl1MzIgbnVtX29mNGtfcGFnZXM7Ci0JdTMyIHRlbXAgPSAwOwotCi0JLyoKLQkgKiBEbyBL ZXJuZWwgdmEgdG8gcGEgdHJhbnNsYXRpb24uCi0JICogQ29tYmluZSBwaHlzaWNhbGx5IGNvbnRp Z3VvdXMgcmVnaW9ucyB0byByZWR1Y2UgVExCcy4KLQkgKiBQYXNzIHRoZSB0cmFuc2xhdGVkIHBh IHRvIHB0ZV91cGRhdGUuCi0JICovCi0JbnVtX3BhZ2VzID0gdWxfbnVtX2J5dGVzIC8gUEFHRV9T SVpFOwkvKiBQQUdFX1NJWkUgPSBPUyBwYWdlIHNpemUgKi8KLQlpID0gMDsKLQl2YV9jdXJyID0g dWxfbXB1X2FkZHI7Ci0JcGFnZVswXSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKXZhX2N1cnIp OwotCXBhX25leHQgPSBwYWdlX3RvX3BoeXMocGFnZVswXSk7Ci0Jd2hpbGUgKCFzdGF0dXMgJiYg KGkgPCBudW1fcGFnZXMpKSB7Ci0JCS8qCi0JCSAqIFJldXNlIHBhX25leHQgZnJvbSB0aGUgcHJl dmlvdXMgaXRlcmF0aW9uIHRvIGF2b2lkCi0JCSAqIGFuIGV4dHJhIHZhMnBhIGNhbGwKLQkJICov Ci0JCXBhX2N1cnIgPSBwYV9uZXh0OwotCQlzaXplX2N1cnIgPSBQQUdFX1NJWkU7Ci0JCS8qCi0J CSAqIElmIHRoZSBuZXh0IHBhZ2UgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLAotCQkgKiBtYXAg aXQgd2l0aCB0aGUgY3VycmVudCBvbmUgYnkgaW5jcmVhc2luZwotCQkgKiB0aGUgc2l6ZSBvZiB0 aGUgcmVnaW9uIHRvIGJlIG1hcHBlZAotCQkgKi8KLQkJd2hpbGUgKCsraSA8IG51bV9wYWdlcykg ewotCQkJcGFnZVswXSA9Ci0JCQkgICAgdm1hbGxvY190b19wYWdlKCh2b2lkICopKHZhX2N1cnIg KyBzaXplX2N1cnIpKTsKLQkJCXBhX25leHQgPSBwYWdlX3RvX3BoeXMocGFnZVswXSk7Ci0KLQkJ CWlmIChwYV9uZXh0ID09IChwYV9jdXJyICsgc2l6ZV9jdXJyKSkKLQkJCQlzaXplX2N1cnIgKz0g UEFHRV9TSVpFOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCi0JCX0KLQkJaWYgKHBhX25leHQgPT0g MCkgewotCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBhID0gcGFfY3Vy cjsKLQkJbnVtX29mNGtfcGFnZXMgPSBzaXplX2N1cnIgLyBIV19QQUdFX1NJWkU0S0I7Ci0JCXdo aWxlICh0ZW1wKysgPCBudW1fb2Y0a19wYWdlcykgewotCQkJZ2V0X3BhZ2UoUEhZU19UT19QQUdF KHBhKSk7Ci0JCQlwYSArPSBIV19QQUdFX1NJWkU0S0I7Ci0JCX0KLQkJc3RhdHVzID0gcHRlX3Vw ZGF0ZShkZXZfY29udGV4dCwgcGFfY3VyciwgdmlydF9hZGRyICsKLQkJCQkgICAgKHZhX2N1cnIg LSB1bF9tcHVfYWRkciksIHNpemVfY3VyciwKLQkJCQkgICAgaHdfYXR0cnMpOwotCQl2YV9jdXJy ICs9IHNpemVfY3VycjsKLQl9Ci0JLyoKLQkgKiBJbiBhbnkgY2FzZSwgZmx1c2ggdGhlIFRMQgot CSAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaGVyZSBpbnN0ZWFkIGZyb20gcHRlX3VwZGF0ZSB0byBh dm9pZCB1bm5lY2Vzc2FyeQotCSAqIHJlcGV0aXRpb24gd2hpbGUgbWFwcGluZyBub24tY29udGln dW91cyBwaHlzaWNhbCByZWdpb25zIG9mIGEgdmlydHVhbAotCSAqIHJlZ2lvbgotCSAqLwotCWZs dXNoX2FsbChkZXZfY29udGV4dCk7Ci0JZGV2X2RiZyhicmlkZ2UsICIlcyBzdGF0dXMgJXhcbiIs IF9fZnVuY19fLCBzdGF0dXMpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT0gd2FpdF9mb3Jfc3RhcnQgPT09PT09PT0KLSAqICAgICAgV2FpdCBmb3IgdGhlIHNpbmdhbCBm cm9tIERTUCB0aGF0IGl0IGhhcyBzdGFydGVkLCBvciB0aW1lIG91dC4KLSAqLwotYm9vbCB3YWl0 X2Zvcl9zdGFydChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKLQkJCXZv aWQgX19pb21lbSAqc3luY19hZGRyKQotewotCXUxNiB0aW1lb3V0ID0gVElIRUxFTl9BQ0tUSU1F T1VUOwotCi0JLyogIFdhaXQgZm9yIHJlc3BvbnNlIGZyb20gYm9hcmQgKi8KLQl3aGlsZSAoX19y YXdfcmVhZHcoc3luY19hZGRyKSAmJiAtLXRpbWVvdXQpCi0JCXVkZWxheSgxMCk7Ci0KLQkvKiAg SWYgdGltZWQgb3V0OiByZXR1cm4gZmFsc2UgKi8KLQlpZiAoIXRpbWVvdXQpIHsKLQkJcHJfZXJy KCIlczogVGltZWQgb3V0IHdhaXRpbmcgRFNQIHRvIFN0YXJ0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwX3B3ci5jIGIvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMF9wd3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNjU3MTA0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS90aW9tYXAzNDMwX3B3ci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTU2ICswLDAgQEAK LS8qCi0gKiB0aW9tYXBfcHdyLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBv cnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogSW1wbGVtZW50YXRp b24gb2YgRFNQIHdha2Uvc2xlZXAgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3 LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVY UFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU QVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotLyogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv aG9zdF9vcy5oPgotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kc3Atb21hcC5oPgot Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdl ICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9k cnYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KLQotLyogIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvYnJkZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KLSNpbmNsdWRlIDxk c3BicmlkZ2UvaW8uaD4KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCi0jaW5jbHVkZSA8aHdfZGVmcy5oPgotI2lu Y2x1ZGUgPGh3X21tdS5oPgotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3B3ci5oPgotCi0vKiAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLwotI2luY2x1 ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvd2R0Lmg+Ci0KLS8q ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzcGVjaWZpYyB0byB0aGlzIGZp bGUgKi8KLSNpbmNsdWRlICJfdGlvbWFwLmgiCi0jaW5jbHVkZSAiX3Rpb21hcF9wd3IuaCIKLSNp bmNsdWRlIDxtYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaD4KLSNpbmNsdWRlIDxtYWNoLW9t YXAyL2NtLXJlZ2JpdHMtMzR4eC5oPgotCi0jZGVmaW5lIFBXUlNUU1RfVElNRU9VVCAgICAgICAg ICAyMDAKLQotLyoKLSAqICA9PT09PT09PSBoYW5kbGVfY29uc3RyYWludHNfc2V0ID09PT09PT09 Ci0gKglTZXRzIG5ldyBEU1AgY29uc3RyYWludAotICovCi1pbnQgaGFuZGxlX2NvbnN0cmFpbnRz X3NldChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKLQkJCQkgIHZvaWQg KnBhcmdzKQotewotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCi0JdTMyICpjb25zdHJh aW50X3ZhbDsKLQlzdHJ1Y3Qgb21hcF9kc3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQotCQlvbWFw X2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0JY29uc3RyYWludF92YWwgPSAo dTMyICopIChwYXJncyk7Ci0JLyogUmVhZCB0aGUgdGFyZ2V0IHZhbHVlIHJlcXVlc3RlZCBieSBE U1AgKi8KLQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgb3BwIHJlcXVlc3RlZCA9IDB4JXhcbiIs IF9fZnVuY19fLAotCQkodTMyKSAqKGNvbnN0cmFpbnRfdmFsICsgMSkpOwotCi0JLyogU2V0IHRo ZSBuZXcgb3BwIHZhbHVlICovCi0JaWYgKHBkYXRhLT5kc3Bfc2V0X21pbl9vcHApCi0JCSgqcGRh dGEtPmRzcF9zZXRfbWluX29wcCkgKCh1MzIpICooY29uc3RyYWludF92YWwgKyAxKSk7Ci0jZW5k aWYgLyogI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTICovCi0JcmV0dXJuIDA7Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gaGFuZGxlX2hpYmVybmF0aW9uX2Zyb21fZHNwID09PT09PT09Ci0g KglIYW5kbGUgSGliZXJuYXRpb24gcmVxdWVzdGVkIGZyb20gRFNQCi0gKi8KLWludCBoYW5kbGVf aGliZXJuYXRpb25fZnJvbV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRl eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JdTE2IHRpbWVvdXQg PSBQV1JTVFNUX1RJTUVPVVQgLyAxMDsKLQl1MzIgcHdyX3N0YXRlOwotI2lmZGVmIENPTkZJR19U SURTUEJSSURHRV9EVkZTCi0JdTMyIG9wcGxldmVsOwotCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3I7 Ci0jZW5kaWYKLQlzdHJ1Y3Qgb21hcF9kc3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQotCQlvbWFw X2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0JcHdyX3N0YXRlID0gKCpwZGF0 YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVFNUKSAmCi0J CQkJCQlPTUFQX1BPV0VSU1RBVEVTVF9NQVNLOwotCS8qIFdhaXQgZm9yIERTUCB0byBtb3ZlIGlu dG8gT0ZGIHN0YXRlICovCi0Jd2hpbGUgKChwd3Jfc3RhdGUgIT0gUFdSRE1fUE9XRVJfT0ZGKSAm JiAtLXRpbWVvdXQpIHsKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKSkgewotCQkJcHJf ZXJyKCJXYWl0aW5nIGZvciBEU1AgT0ZGIG1vZGUgaW50ZXJydXB0ZWRcbiIpOwotCQkJcmV0dXJu IC1FUEVSTTsKLQkJfQotCQlwd3Jfc3RhdGUgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAz NDMwX0lWQTJfTU9ELAotCQkJCQkJICAgT01BUDJfUE1fUFdTVFNUKSAmCi0JCQkJCQkgICBPTUFQ X1BPV0VSU1RBVEVTVF9NQVNLOwotCX0KLQlpZiAodGltZW91dCA9PSAwKSB7Ci0JCXByX2Vycigi JXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBEU1Agb2ZmIG1vZGVcbiIsIF9fZnVuY19fKTsKLQkJ c3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJcmV0dXJuIHN0YXR1czsKLQl9IGVsc2UgewotCi0JCS8q IFNhdmUgbWFpbGJveCBzZXR0aW5ncyAqLwotCQlvbWFwX21ib3hfc2F2ZV9jdHgoZGV2X2NvbnRl eHQtPm1ib3gpOwotCi0JCS8qIFR1cm4gb2ZmIERTUCBQZXJpcGhlcmFsIGNsb2NrcyBhbmQgRFNQ IExvYWQgbW9uaXRvciB0aW1lciAqLwotCQlzdGF0dXMgPSBkc3BfY2xvY2tfZGlzYWJsZV9hbGwo ZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcyk7Ci0KLQkJLyogRGlzYWJsZSB3ZHQgb24gaGliZXJu YXRpb24uICovCi0JCWRzcF93ZHRfZW5hYmxlKGZhbHNlKTsKLQotCQlpZiAoIXN0YXR1cykgewot CQkJLyogVXBkYXRlIHRoZSBCcmlkZ2VyIERyaXZlciBzdGF0ZSAqLwotCQkJZGV2X2NvbnRleHQt PmJyZF9zdGF0ZSA9IEJSRF9EU1BfSElCRVJOQVRJT047Ci0jaWZkZWYgQ09ORklHX1RJRFNQQlJJ REdFX0RWRlMKLQkJCXN0YXR1cyA9Ci0JCQkgICAgZGV2X2dldF9pb19tZ3IoZGV2X2NvbnRleHQt PmRldl9vYmosICZoaW9fbWdyKTsKLQkJCWlmICghaGlvX21ncikgewotCQkJCXN0YXR1cyA9IERT UF9FSEFORExFOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlpb19zaF9tc2V0dGluZyho aW9fbWdyLCBTSE1fR0VUT1BQLCAmb3BwbGV2ZWwpOwotCi0JCQkvKgotCQkJICogU2V0IHRoZSBP UFAgdG8gbG93IGxldmVsIGJlZm9yZSBtb3ZpbmcgdG8gT0ZGCi0JCQkgKiBtb2RlCi0JCQkgKi8K LQkJCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQotCQkJCSgqcGRhdGEtPmRzcF9zZXRfbWlu X29wcCkgKFZERDFfT1BQMSk7Ci0JCQlzdGF0dXMgPSAwOwotI2VuZGlmIC8qIENPTkZJR19USURT UEJSSURHRV9EVkZTICovCi0JCX0KLQl9Ci0jZW5kaWYKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogID09PT09PT09IHNsZWVwX2RzcCA9PT09PT09PQotICoJUHV0IERTUCBpbiBsb3cgcG93 ZXIgY29uc3VtaW5nIHN0YXRlLgotICovCi1pbnQgc2xlZXBfZHNwKHN0cnVjdCBicmlkZ2VfZGV2 X2NvbnRleHQgKmRldl9jb250ZXh0LCB1MzIgZHdfY21kLAotCQkgICAgIHZvaWQgKnBhcmdzKQot ewotCWludCBzdGF0dXMgPSAwOwotI2lmZGVmIENPTkZJR19QTQotI2lmZGVmIENPTkZJR19USURT UEJSSURHRV9OVEZZX1BXUkVSUgotCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsKLSNlbmRpZiAv KiBDT05GSUdfVElEU1BCUklER0VfTlRGWV9QV1JFUlIgKi8KLQl1MTYgdGltZW91dCA9IFBXUlNU U1RfVElNRU9VVCAvIDEwOwotCXUzMiBwd3Jfc3RhdGUsIHRhcmdldF9wd3Jfc3RhdGU7Ci0Jc3Ry dWN0IG9tYXBfZHNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KLQkJb21hcF9kc3BicmlkZ2VfZGV2 LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCS8qIENoZWNrIGlmIHNsZWVwIGNvZGUgaXMgdmFsaWQg Ki8KLQlpZiAoKGR3X2NtZCAhPSBQV1JfREVFUFNMRUVQKSAmJiAoZHdfY21kICE9IFBXUl9FTUVS R0VOQ1lERUVQU0xFRVApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAoZGV2X2NvbnRl eHQtPmJyZF9zdGF0ZSkgewotCWNhc2UgQlJEX1JVTk5JTkc6Ci0JCW9tYXBfbWJveF9zYXZlX2N0 eChkZXZfY29udGV4dC0+bWJveCk7Ci0JCWlmIChkc3BfdGVzdF9zbGVlcHN0YXRlID09IFBXUkRN X1BPV0VSX09GRikgewotCQkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX0RT UEhJQkVSTkFURSk7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiAlcyAtIHNlbnQgaGliZXJuYXRl IGNtZCB0byBEU1BcbiIsCi0JCQkJX19mdW5jX18pOwotCQkJdGFyZ2V0X3B3cl9zdGF0ZSA9IFBX UkRNX1BPV0VSX09GRjsKLQkJfSBlbHNlIHsKLQkJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRl eHQsIE1CWF9QTV9EU1BSRVRFTlRJT04pOwotCQkJdGFyZ2V0X3B3cl9zdGF0ZSA9IFBXUkRNX1BP V0VSX1JFVDsKLQkJfQotCQlicmVhazsKLQljYXNlIEJSRF9SRVRFTlRJT046Ci0JCW9tYXBfbWJv eF9zYXZlX2N0eChkZXZfY29udGV4dC0+bWJveCk7Ci0JCWlmIChkc3BfdGVzdF9zbGVlcHN0YXRl ID09IFBXUkRNX1BPV0VSX09GRikgewotCQkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwg TUJYX1BNX0RTUEhJQkVSTkFURSk7Ci0JCQl0YXJnZXRfcHdyX3N0YXRlID0gUFdSRE1fUE9XRVJf T0ZGOwotCQl9IGVsc2UKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQljYXNlIEJSRF9ISUJFUk5B VElPTjoKLQljYXNlIEJSRF9EU1BfSElCRVJOQVRJT046Ci0JCS8qIEFscmVhZHkgaW4gSGliZXJu YXRpb24sIHNvIGp1c3QgcmV0dXJuICovCi0JCWRldl9kYmcoYnJpZGdlLCAiUE06ICVzIC0gRFNQ IGFscmVhZHkgaW4gaGliZXJuYXRpb25cbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOwot CWNhc2UgQlJEX1NUT1BQRUQ6Ci0JCWRldl9kYmcoYnJpZGdlLCAiUE06ICVzIC0gQm9hcmQgaW4g U1RPUCBzdGF0ZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlkZXZf ZGJnKGJyaWRnZSwgIlBNOiAlcyAtIEJyaWRnZSBpbiBJbGxlZ2FsIHN0YXRlXG4iLCBfX2Z1bmNf Xyk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JLyogR2V0IHRoZSBQUkNNIERTUCBwb3dlciBk b21haW4gc3RhdHVzICovCi0JcHdyX3N0YXRlID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQ MzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVFNUKSAmCi0JCQkJCQlPTUFQX1BPV0VSU1RBVEVT VF9NQVNLOwotCi0JLyogV2FpdCBmb3IgRFNQIHRvIG1vdmUgaW50byB0YXJnZXQgcG93ZXIgc3Rh dGUgKi8KLQl3aGlsZSAoKHB3cl9zdGF0ZSAhPSB0YXJnZXRfcHdyX3N0YXRlKSAmJiAtLXRpbWVv dXQpIHsKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKSkgewotCQkJcHJfZXJyKCJXYWl0 aW5nIGZvciBEU1AgdG8gU3VzcGVuZCBpbnRlcnJ1cHRlZFxuIik7Ci0JCQlyZXR1cm4gLUVQRVJN OwotCQl9Ci0JCXB3cl9zdGF0ZSA9ICgqcGRhdGEtPmRzcF9wcm1fcmVhZCkoT01BUDM0MzBfSVZB Ml9NT0QsCi0JCQkJCQkgICBPTUFQMl9QTV9QV1NUU1QpICYKLQkJCQkJCSAgIE9NQVBfUE9XRVJT VEFURVNUX01BU0s7Ci0JfQotCi0JaWYgKCF0aW1lb3V0KSB7Ci0JCXByX2VycigiJXM6IFRpbWVk IG91dCB3YWl0aW5nIGZvciBEU1Agb2ZmIG1vZGUsIHN0YXRlICV4XG4iLAotCQkgICAgICAgX19m dW5jX18sIHB3cl9zdGF0ZSk7Ci0jaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJS Ci0JCWRldl9nZXRfZGVoX21ncihkZXZfY29udGV4dC0+ZGV2X29iaiwgJmhkZWhfbWdyKTsKLQkJ YnJpZGdlX2RlaF9ub3RpZnkoaGRlaF9tZ3IsIERTUF9QV1JFUlJPUiwgMCk7Ci0jZW5kaWYgLyog Q09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJSICovCi0JCXJldHVybiAtRVRJTUVET1VUOwot CX0gZWxzZSB7Ci0JCS8qIFVwZGF0ZSB0aGUgQnJpZGdlciBEcml2ZXIgc3RhdGUgKi8KLQkJaWYg KGRzcF90ZXN0X3NsZWVwc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKQotCQkJZGV2X2NvbnRleHQt PmJyZF9zdGF0ZSA9IEJSRF9ISUJFUk5BVElPTjsKLQkJZWxzZQotCQkJZGV2X2NvbnRleHQtPmJy ZF9zdGF0ZSA9IEJSRF9SRVRFTlRJT047Ci0KLQkJLyogRGlzYWJsZSB3ZHQgb24gaGliZXJuYXRp b24uICovCi0JCWRzcF93ZHRfZW5hYmxlKGZhbHNlKTsKLQotCQkvKiBUdXJuIG9mZiBEU1AgUGVy aXBoZXJhbCBjbG9ja3MgKi8KLQkJc3RhdHVzID0gZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKGRldl9j b250ZXh0LT5kc3BfcGVyX2Nsa3MpOwotCQlpZiAoc3RhdHVzKQotCQkJcmV0dXJuIHN0YXR1czsK LSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUwotCQllbHNlIGlmICh0YXJnZXRfcHdyX3N0 YXRlID09IFBXUkRNX1BPV0VSX09GRikgewotCQkJLyoKLQkJCSAqIFNldCB0aGUgT1BQIHRvIGxv dyBsZXZlbCBiZWZvcmUgbW92aW5nIHRvIE9GRiBtb2RlCi0JCQkgKi8KLQkJCWlmIChwZGF0YS0+ ZHNwX3NldF9taW5fb3BwKQotCQkJCSgqcGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKFZERDFfT1BQ MSk7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfVElEU1BCUklER0VfRFZGUyAqLwotCX0KLSNlbmRp ZiAvKiBDT05GSUdfUE0gKi8KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IHdha2VfZHNwID09PT09PT09Ci0gKglXYWtlIHVwIERTUCBmcm9tIHNsZWVwLgotICovCi1pbnQg d2FrZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHZvaWQgKnBh cmdzKQotewotCWludCBzdGF0dXMgPSAwOwotI2lmZGVmIENPTkZJR19QTQotCi0JLyogQ2hlY2sg dGhlIGJvYXJkIHN0YXRlLCBpZiBpdCBpcyBub3QgJ1NMRUVQJyB0aGVuIHJldHVybiAqLwotCWlm IChkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJSRF9SVU5OSU5HIHx8Ci0JICAgIGRldl9jb250 ZXh0LT5icmRfc3RhdGUgPT0gQlJEX1NUT1BQRUQpIHsKLQkJLyogVGhlIERldmljZSBpcyBpbiAn UkVUJyBvciAnT0ZGJyBzdGF0ZSBhbmQgQnJpZGdlIHN0YXRlIGlzIG5vdAotCQkgKiAnU0xFRVAn LCB0aGlzIG1lYW5zIHN0YXRlIGluY29uc2lzdGVuY3ksIHNvIHJldHVybiAqLwotCQlyZXR1cm4g MDsKLQl9Ci0KLQkvKiBTZW5kIGEgd2FrZXVwIG1lc3NhZ2UgdG8gRFNQICovCi0Jc21faW50ZXJy dXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX0RTUFdBS0VVUCk7Ci0KLQkvKiBTZXQgdGhlIGRl dmljZSBzdGF0ZSB0byBSVU5OSUcgKi8KLQlkZXZfY29udGV4dC0+YnJkX3N0YXRlID0gQlJEX1JV Tk5JTkc7Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoK LSAqICA9PT09PT09PSBkc3BfcGVyaXBoZXJhbF9jbGtfY3RybCA9PT09PT09PQotICoJRW5hYmxl L0Rpc2FibGUgdGhlIERTUCBwZXJpcGhlcmFsIGNsb2NrcyBhcyBuZWVkZWQuLgotICovCi1pbnQg ZHNwX3BlcmlwaGVyYWxfY2xrX2N0cmwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2Nv bnRleHQsCi0JCQkJICAgdm9pZCAqcGFyZ3MpCi17Ci0JdTMyIGV4dF9jbGsgPSAwOwotCXUzMiBl eHRfY2xrX2lkID0gMDsKLQl1MzIgZXh0X2Nsa19jbWQgPSAwOwotCXUzMiBjbGtfaWRfaW5kZXgg PSBNQlhfUE1fTUFYX1JFU09VUkNFUzsKLQl1MzIgdG1wX2luZGV4OwotCXUzMiBkc3BfcGVyX2Ns a3NfYmVmb3JlOwotCWludCBzdGF0dXMgPSAwOwotCi0JZHNwX3Blcl9jbGtzX2JlZm9yZSA9IGRl dl9jb250ZXh0LT5kc3BfcGVyX2Nsa3M7Ci0KLQlleHRfY2xrID0gKHUzMikgKigodTMyICopIHBh cmdzKTsKLQlleHRfY2xrX2lkID0gZXh0X2NsayAmIE1CWF9QTV9DTEtfSURNQVNLOwotCi0JLyog cHJvY2VzcyB0aGUgcG93ZXIgbWVzc2FnZSAtLSBUT0RPLCBrZWVwIGl0IGluIGEgc2VwYXJhdGUg ZnVuY3Rpb24gKi8KLQlmb3IgKHRtcF9pbmRleCA9IDA7IHRtcF9pbmRleCA8IE1CWF9QTV9NQVhf UkVTT1VSQ0VTOyB0bXBfaW5kZXgrKykgewotCQlpZiAoZXh0X2Nsa19pZCA9PSBicHdyX2Nsa2lk W3RtcF9pbmRleF0pIHsKLQkJCWNsa19pZF9pbmRleCA9IHRtcF9pbmRleDsKLQkJCWJyZWFrOwot CQl9Ci0JfQotCS8qIFRPRE8gLS0gQXNzZXJ0IG1heSBiZSBhIHRvbyBoYXJkIHJlc3RyaWN0aW9u IGhlcmUuLiBNYXkgYmUgd2Ugc2hvdWxkCi0JICoganVzdCByZXR1cm4gd2l0aCBmYWlsdXJlIHdo ZW4gdGhlIENMSyBJRCBkb2VzIG5vdCBtYXRjaCAqLwotCWlmIChjbGtfaWRfaW5kZXggPT0gTUJY X1BNX01BWF9SRVNPVVJDRVMpIHsKLQkJLyogcmV0dXJuIHdpdGggYSBtb3JlIG1lYW5pbmdmdWxs IGVycm9yIGNvZGUgKi8KLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JZXh0X2Nsa19jbWQgPSAoZXh0 X2NsayA+PiBNQlhfUE1fQ0xLX0NNRFNISUZUKSAmIE1CWF9QTV9DTEtfQ01ETUFTSzsKLQlzd2l0 Y2ggKGV4dF9jbGtfY21kKSB7Ci0JY2FzZSBCUFdSX0RJU0FCTEVfQ0xPQ0s6Ci0JCXN0YXR1cyA9 IGRzcF9jbGtfZGlzYWJsZShicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGspOwotCQlkc3BfY2xr X3dha2V1cF9ldmVudF9jdHJsKGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsa19pZCwKLQkJCQkJ ICBmYWxzZSk7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkoZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xr cykgJj0KLQkJCQkofigodTMyKSAoMSA8PCBicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGspKSk7 Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCUFdSX0VOQUJMRV9DTE9DSzoKLQkJc3RhdHVzID0gZHNw X2Nsa19lbmFibGUoYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrKTsKLQkJZHNwX2Nsa193YWtl dXBfZXZlbnRfY3RybChicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGtfaWQsIHRydWUpOwotCQlp ZiAoIXN0YXR1cykKLQkJCShkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKSB8PQotCQkJCSgxIDw8 IGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsayk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRl dl9kYmcoYnJpZGdlLCAiJXM6IFVuc3VwcG9ydGVkIENNRFxuIiwgX19mdW5jX18pOwotCQkvKiB1 bnN1cHBvcnRlZCBjbWQgKi8KLQkJLyogVE9ETyAtLSBwcm92aWRlIHN1cHBvcnQgZm9yIEFVVE9J RExFIEVuYWJsZS9EaXNhYmxlCi0JCSAqIGNvbW1hbmRzICovCi0JfQotCXJldHVybiBzdGF0dXM7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT1wcmVfc2NhbGVfZHNwPT09PT09PT0KLSAqICBTZW5kcyBw cmVzY2FsZSBub3RpZmljYXRpb24gdG8gRFNQCi0gKgotICovCi1pbnQgcHJlX3NjYWxlX2RzcChz dHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwgdm9pZCAqcGFyZ3MpCi17Ci0j aWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKLQl1MzIgbGV2ZWw7Ci0JdTMyIHZvbHRhZ2Vf ZG9tYWluOwotCi0Jdm9sdGFnZV9kb21haW4gPSAqKCh1MzIgKikgcGFyZ3MpOwotCWxldmVsID0g KigodTMyICopIHBhcmdzICsgMSk7Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgdm9sdGFn ZV9kb21haW4gPSAleCwgbGV2ZWwgPSAweCV4XG4iLAotCQlfX2Z1bmNfXywgdm9sdGFnZV9kb21h aW4sIGxldmVsKTsKLQlpZiAoKGRldl9jb250ZXh0LT5icmRfc3RhdGUgPT0gQlJEX0hJQkVSTkFU SU9OKSB8fAotCSAgICAoZGV2X2NvbnRleHQtPmJyZF9zdGF0ZSA9PSBCUkRfUkVURU5USU9OKSB8 fAotCSAgICAoZGV2X2NvbnRleHQtPmJyZF9zdGF0ZSA9PSBCUkRfRFNQX0hJQkVSTkFUSU9OKSkg ewotCQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgSVZBIGluIHNsZWVwLiBObyBtZXNzYWdlIHRv IERTUFxuIik7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoZGV2X2NvbnRleHQtPmJyZF9zdGF0 ZSA9PSBCUkRfUlVOTklORykgewotCQkvKiBTZW5kIGEgcHJlbm90aWZpY2F0aW9uIHRvIERTUCAq LwotCQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgc2VudCBub3RpZmljYXRpb24gdG8gRFNQXG4i LCBfX2Z1bmNfXyk7Ci0JCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9TRVRQ T0lOVF9QUkVOT1RJRlkpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVQRVJN OwotCX0KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMgKi8KLQlyZXR1 cm4gMDsKLX0KLQotLyoKLSAqICA9PT09PT09PXBvc3Rfc2NhbGVfZHNwPT09PT09PT0KLSAqICBT ZW5kcyBwb3N0c2NhbGUgbm90aWZpY2F0aW9uIHRvIERTUAotICoKLSAqLwotaW50IHBvc3Rfc2Nh bGVfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAotCQkJCQkJCXZv aWQgKnBhcmdzKQotewotCWludCBzdGF0dXMgPSAwOwotI2lmZGVmIENPTkZJR19USURTUEJSSURH RV9EVkZTCi0JdTMyIGxldmVsOwotCXUzMiB2b2x0YWdlX2RvbWFpbjsKLQlzdHJ1Y3QgaW9fbWdy ICpoaW9fbWdyOwotCi0Jc3RhdHVzID0gZGV2X2dldF9pb19tZ3IoZGV2X2NvbnRleHQtPmRldl9v YmosICZoaW9fbWdyKTsKLQlpZiAoIWhpb19tZ3IpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jdm9s dGFnZV9kb21haW4gPSAqKCh1MzIgKikgcGFyZ3MpOwotCWxldmVsID0gKigodTMyICopIHBhcmdz ICsgMSk7Ci0JZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIHZvbHRhZ2VfZG9tYWluID0gJXgsIGxl dmVsID0gMHgleFxuIiwKLQkJX19mdW5jX18sIHZvbHRhZ2VfZG9tYWluLCBsZXZlbCk7Ci0JaWYg KChkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJSRF9ISUJFUk5BVElPTikgfHwKLQkgICAgKGRl dl9jb250ZXh0LT5icmRfc3RhdGUgPT0gQlJEX1JFVEVOVElPTikgfHwKLQkgICAgKGRldl9jb250 ZXh0LT5icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTikpIHsKLQkJLyogVXBkYXRlIHRo ZSBPUFAgdmFsdWUgaW4gc2hhcmVkIG1lbW9yeSAqLwotCQlpb19zaF9tc2V0dGluZyhoaW9fbWdy LCBTSE1fQ1VSUk9QUCwgJmxldmVsKTsKLQkJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIElWQSBp biBzbGVlcC4gV3JvdGUgdG8gc2htXG4iLAotCQkJX19mdW5jX18pOwotCX0gZWxzZSBpZiAoZGV2 X2NvbnRleHQtPmJyZF9zdGF0ZSA9PSBCUkRfUlVOTklORykgewotCQkvKiBVcGRhdGUgdGhlIE9Q UCB2YWx1ZSBpbiBzaGFyZWQgbWVtb3J5ICovCi0JCWlvX3NoX21zZXR0aW5nKGhpb19tZ3IsIFNI TV9DVVJST1BQLCAmbGV2ZWwpOwotCQkvKiBTZW5kIGEgcG9zdCBub3RpZmljYXRpb24gdG8gRFNQ ICovCi0JCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9TRVRQT0lOVF9QT1NU Tk9USUZZKTsKLQkJZGV2X2RiZyhicmlkZ2UsCi0JCQkiT1BQOiAlcyB3cm90ZSB0byBzaG0uIFNl bnQgcG9zdCBub3RpZmljYXRpb24gdG8gRFNQXG4iLAotCQkJIF9fZnVuY19fKTsKLQl9IGVsc2Ug ewotCQlzdGF0dXMgPSAtRVBFUk07Ci0JfQotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVElEU1BC UklER0VfRFZGUyAqLwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgZHNwX2Nsa193YWtldXBf ZXZlbnRfY3RybCh1MzIgY2xvY2tfaWQsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBjZmdfaG9z dHJlcyAqcmVzb3VyY2VzOwotCWludCBzdGF0dXMgPSAwOwotCXUzMiBpdmEyX2dycHNlbDsKLQl1 MzIgbXB1X2dycHNlbDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmplY3QgPSBOVUxMOwot CXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0ID0gTlVMTDsKLQotCWhk ZXZfb2JqZWN0ID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0 KCk7Ci0JaWYgKCFoZGV2X29iamVjdCkKLQkJcmV0dXJuOwotCi0Jc3RhdHVzID0gZGV2X2dldF9i cmlkZ2VfY29udGV4dChoZGV2X29iamVjdCwgJmJyaWRnZV9jb250ZXh0KTsKLQlpZiAoIWJyaWRn ZV9jb250ZXh0KQotCQlyZXR1cm47Ci0KLQlyZXNvdXJjZXMgPSBicmlkZ2VfY29udGV4dC0+cmVz b3VyY2VzOwotCWlmICghcmVzb3VyY2VzKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGNsb2NrX2lk KSB7Ci0JY2FzZSBCUFdSX0dQX1RJTUVSNToKLQkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJj ZXMtPnBlcl9wbV9iYXNlICsgMHhBOCk7Ci0JCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMt PnBlcl9wbV9iYXNlICsgMHhBNCk7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWl2YTJfZ3Jwc2VsIHw9 IE9NQVAzNDMwX0dSUFNFTF9HUFQ1X01BU0s7Ci0JCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9H UlBTRUxfR1BUNV9NQVNLOwotCQl9IGVsc2UgewotCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9H UlBTRUxfR1BUNV9NQVNLOwotCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ1 X01BU0s7Ci0JCX0KLQkJd3JpdGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPnBlcl9wbV9iYXNl ICsgMHhBOCk7Ci0JCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPnBlcl9wbV9iYXNlICsg MHhBNCk7Ci0JCWJyZWFrOwotCWNhc2UgQlBXUl9HUF9USU1FUjY6Ci0JCWl2YTJfZ3Jwc2VsID0g cmVhZGwocmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTgpOwotCQltcHVfZ3Jwc2VsID0gcmVh ZGwocmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTQpOwotCQlpZiAoZW5hYmxlKSB7Ci0JCQlp dmEyX2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUNl9NQVNLOwotCQkJbXB1X2dycHNlbCAm PSB+T01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKLQkJfSBlbHNlIHsKLQkJCW1wdV9ncnBzZWwg fD0gT01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKLQkJCWl2YTJfZ3Jwc2VsICY9IH5PTUFQMzQz MF9HUlBTRUxfR1BUNl9NQVNLOwotCQl9Ci0JCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2Vz LT5wZXJfcG1fYmFzZSArIDB4QTgpOwotCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5w ZXJfcG1fYmFzZSArIDB4QTQpOwotCQlicmVhazsKLQljYXNlIEJQV1JfR1BfVElNRVI3OgotCQlp dmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsKLQkJbXB1 X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE0KTsKLQkJaWYgKGVu YWJsZSkgewotCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDdfTUFTSzsKLQkJ CW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7Ci0JCX0gZWxzZSB7Ci0J CQltcHVfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7Ci0JCQlpdmEyX2dycHNl bCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDdfTUFTSzsKLQkJfQotCQl3cml0ZWwoaXZhMl9ncnBz ZWwsIHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsKLQkJd3JpdGVsKG1wdV9ncnBzZWws IHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE0KTsKLQkJYnJlYWs7Ci0JY2FzZSBCUFdSX0dQ X1RJTUVSODoKLQkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPnBlcl9wbV9iYXNlICsg MHhBOCk7Ci0JCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPnBlcl9wbV9iYXNlICsgMHhB NCk7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9H UFQ4X01BU0s7Ci0JCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOwot CQl9IGVsc2UgewotCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOwot CQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ4X01BU0s7Ci0JCX0KLQkJd3Jp dGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPnBlcl9wbV9iYXNlICsgMHhBOCk7Ci0JCXdyaXRl bChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPnBlcl9wbV9iYXNlICsgMHhBNCk7Ci0JCWJyZWFrOwot CWNhc2UgQlBXUl9NQ0JTUDE6Ci0JCWl2YTJfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5jb3Jl X3BtX2Jhc2UgKyAweEE4KTsKLQkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+Y29yZV9w bV9iYXNlICsgMHhBNCk7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAz NDMwX0dSUFNFTF9NQ0JTUDFfTUFTSzsKLQkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNF TF9NQ0JTUDFfTUFTSzsKLQkJfSBlbHNlIHsKLQkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQ U0VMX01DQlNQMV9NQVNLOwotCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JT UDFfTUFTSzsKLQkJfQotCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+Y29yZV9wbV9i YXNlICsgMHhBOCk7Ci0JCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPmNvcmVfcG1fYmFz ZSArIDB4QTQpOwotCQlicmVhazsKLQljYXNlIEJQV1JfTUNCU1AyOgotCQlpdmEyX2dycHNlbCA9 IHJlYWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsKLQkJbXB1X2dycHNlbCA9IHJl YWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE0KTsKLQkJaWYgKGVuYWJsZSkgewotCQkJ aXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOwotCQkJbXB1X2dycHNl bCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOwotCQl9IGVsc2UgewotCQkJbXB1X2dy cHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AyX01BU0s7Ci0JCQlpdmEyX2dycHNlbCAmPSB+ T01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOwotCQl9Ci0JCXdyaXRlbChpdmEyX2dycHNlbCwg cmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTgpOwotCQl3cml0ZWwobXB1X2dycHNlbCwgcmVz b3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTQpOwotCQlicmVhazsKLQljYXNlIEJQV1JfTUNCU1Az OgotCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsK LQkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE0KTsKLQkJ aWYgKGVuYWJsZSkgewotCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQM19N QVNLOwotCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOwotCQl9 IGVsc2UgewotCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AzX01BU0s7Ci0J CQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOwotCQl9Ci0JCXdy aXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTgpOwotCQl3cml0 ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTQpOwotCQlicmVhazsK LQljYXNlIEJQV1JfTUNCU1A0OgotCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVy X3BtX2Jhc2UgKyAweEE4KTsKLQkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+cGVyX3Bt X2Jhc2UgKyAweEE0KTsKLQkJaWYgKGVuYWJsZSkgewotCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0 MzBfR1JQU0VMX01DQlNQNF9NQVNLOwotCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VM X01DQlNQNF9NQVNLOwotCQl9IGVsc2UgewotCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBT RUxfTUNCU1A0X01BU0s7Ci0JCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX01DQlNQ NF9NQVNLOwotCQl9Ci0JCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5wZXJfcG1fYmFz ZSArIDB4QTgpOwotCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5wZXJfcG1fYmFzZSAr IDB4QTQpOwotCQlicmVhazsKLQljYXNlIEJQV1JfTUNCU1A1OgotCQlpdmEyX2dycHNlbCA9IHJl YWRsKHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE4KTsKLQkJbXB1X2dycHNlbCA9IHJlYWRs KHJlc291cmNlcy0+cGVyX3BtX2Jhc2UgKyAweEE0KTsKLQkJaWYgKGVuYWJsZSkgewotCQkJaXZh Ml9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOwotCQkJbXB1X2dycHNlbCAm PSB+T01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOwotCQl9IGVsc2UgewotCQkJbXB1X2dycHNl bCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1A1X01BU0s7Ci0JCQlpdmEyX2dycHNlbCAmPSB+T01B UDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOwotCQl9Ci0JCXdyaXRlbChpdmEyX2dycHNlbCwgcmVz b3VyY2VzLT5wZXJfcG1fYmFzZSArIDB4QTgpOwotCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3Vy Y2VzLT5wZXJfcG1fYmFzZSArIDB4QTQpOwotCQlicmVhazsKLQl9Ci19CmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uYyBiL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcF9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAyODM2NDY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9jb3JlL3Rpb21hcF9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQwICswLDAgQEAKLS8qCi0g KiB0aW9tYXBfaW8uYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5j dGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBmb3Ig dGhlIGlvIHJlYWQvd3JpdGUgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RhdGEvZHNwLW9tYXAuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMu aD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1h bmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdl L2Rydi5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRh cHRhdGlvbiBMYXllciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS93ZHQuaD4KLQotLyogIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNwZWNpZmljIHRvIHRoaXMgZmlsZSAqLwot I2luY2x1ZGUgIl90aW9tYXAuaCIKLSNpbmNsdWRlICJfdGlvbWFwX3B3ci5oIgotI2luY2x1ZGUg InRpb21hcF9pby5oIgotCi1zdGF0aWMgdTMyIHVsX2V4dF9iYXNlOwotc3RhdGljIHUzMiB1bF9l eHRfZW5kOwotCi1zdGF0aWMgdTMyIHNobTBfZW5kOwotc3RhdGljIHUzMiB1bF9keW5fZXh0X2Jh c2U7Ci1zdGF0aWMgdTMyIHVsX3RyYWNlX3NlY19iZWc7Ci1zdGF0aWMgdTMyIHVsX3RyYWNlX3Nl Y19lbmQ7Ci1zdGF0aWMgdTMyIHVsX3NobV9iYXNlX3ZpcnQ7Ci0KLWJvb2wgc3ltYm9sc19yZWxv YWRlZCA9IHRydWU7Ci0KLS8qCi0gKiAgPT09PT09PT0gcmVhZF9leHRfZHNwX2RhdGEgPT09PT09 PT0KLSAqICAgICAgQ29waWVzIERTUCBleHRlcm5hbCBtZW1vcnkgYnVmZmVycyB0byB0aGUgaG9z dCBzaWRlIGJ1ZmZlcnMuCi0gKi8KLWludCByZWFkX2V4dF9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdl X2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKLQkJCSAgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9h ZGRyLAotCQkJICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCi17Ci0JaW50IHN0 YXR1cyA9IDA7Ci0Jc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZf Y3R4dDsKLQl1MzIgb2Zmc2V0OwotCXUzMiB1bF90bGJfYmFzZV92aXJ0ID0gMDsKLQl1MzIgdWxf c2htX29mZnNldF92aXJ0ID0gMDsKLQl1MzIgZHdfZXh0X3Byb2dfdmlydF9tZW07Ci0JdTMyIGR3 X2Jhc2VfYWRkciA9IGRldl9jb250ZXh0LT5kc3BfZXh0X2Jhc2VfYWRkcjsKLQlib29sIHRyYWNl X3JlYWQgPSBmYWxzZTsKLQotCWlmICghdWxfc2htX2Jhc2VfdmlydCkgewotCQlzdGF0dXMgPSBk ZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+ZGV2X29iaiwKLQkJCQkJU0hNQkFTRU5BTUUsICZ1 bF9zaG1fYmFzZV92aXJ0KTsKLQl9Ci0KLQkvKiBDaGVjayBpZiBpdCBpcyBhIHJlYWQgb2YgVHJh Y2Ugc2VjdGlvbiAqLwotCWlmICghc3RhdHVzICYmICF1bF90cmFjZV9zZWNfYmVnKSB7Ci0JCXN0 YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5kZXZfb2JqLAotCQkJCQlEU1BfVFJB Q0VTRUNfQkVHLCAmdWxfdHJhY2Vfc2VjX2JlZyk7Ci0JfQotCi0JaWYgKCFzdGF0dXMgJiYgIXVs X3RyYWNlX3NlY19lbmQpIHsKLQkJc3RhdHVzID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQt PmRldl9vYmosCi0JCQkJCURTUF9UUkFDRVNFQ19FTkQsICZ1bF90cmFjZV9zZWNfZW5kKTsKLQl9 Ci0KLQlpZiAoIXN0YXR1cykgewotCQlpZiAoKGRzcF9hZGRyIDw9IHVsX3RyYWNlX3NlY19lbmQp ICYmCi0JCSAgICAoZHNwX2FkZHIgPj0gdWxfdHJhY2Vfc2VjX2JlZykpCi0JCQl0cmFjZV9yZWFk ID0gdHJ1ZTsKLQl9Ci0KLQkvKiBJZiByZWFkaW5nIGZyb20gVFJBQ0UsIGZvcmNlIHJlbWFwL3Vu bWFwICovCi0JaWYgKHRyYWNlX3JlYWQgJiYgZHdfYmFzZV9hZGRyKSB7Ci0JCWR3X2Jhc2VfYWRk ciA9IDA7Ci0JCWRldl9jb250ZXh0LT5kc3BfZXh0X2Jhc2VfYWRkciA9IDA7Ci0JfQotCi0JaWYg KCFkd19iYXNlX2FkZHIpIHsKLQkJLyogSW5pdGlhbGl6ZSB1bF9leHRfYmFzZSBhbmQgdWxfZXh0 X2VuZCAqLwotCQl1bF9leHRfYmFzZSA9IDA7Ci0JCXVsX2V4dF9lbmQgPSAwOwotCi0JCS8qIEdl dCBEWU5FWFRfQkVHLCBFWFRfQkVHIGFuZCBFWFRfRU5ELiAqLwotCQlpZiAoIXN0YXR1cyAmJiAh dWxfZHluX2V4dF9iYXNlKSB7Ci0JCQlzdGF0dXMgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4 dC0+ZGV2X29iaiwKLQkJCQkJCURZTkVYVEJBU0UsICZ1bF9keW5fZXh0X2Jhc2UpOwotCQl9Ci0K LQkJaWYgKCFzdGF0dXMpIHsKLQkJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0 LT5kZXZfb2JqLAotCQkJCQkJRVhUQkFTRSwgJnVsX2V4dF9iYXNlKTsKLQkJfQotCi0JCWlmICgh c3RhdHVzKSB7Ci0JCQlzdGF0dXMgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+ZGV2X29i aiwKLQkJCQkJCUVYVEVORCwgJnVsX2V4dF9lbmQpOwotCQl9Ci0KLQkJLyogVHJhY2UgYnVmZmVy IGlzIHJpZ2h0IGFmdGVyIHRoZSBzaG0gU0VHMCwKLQkJICogIHNvIHNldCB0aGUgYmFzZSBhZGRy ZXNzIHRvIFNITUJBU0UgKi8KLQkJaWYgKHRyYWNlX3JlYWQpIHsKLQkJCXVsX2V4dF9iYXNlID0g dWxfc2htX2Jhc2VfdmlydDsKLQkJCXVsX2V4dF9lbmQgPSB1bF90cmFjZV9zZWNfZW5kOwotCQl9 Ci0KLQotCQlpZiAodWxfZXh0X2VuZCA8IHVsX2V4dF9iYXNlKQotCQkJc3RhdHVzID0gLUVQRVJN OwotCi0JCWlmICghc3RhdHVzKSB7Ci0JCQl1bF90bGJfYmFzZV92aXJ0ID0KLQkJCSAgICBkZXZf Y29udGV4dC0+YXRsYl9lbnRyeVswXS5kc3BfdmEgKiBEU1BXT1JEU0laRTsKLQkJCWR3X2V4dF9w cm9nX3ZpcnRfbWVtID0KLQkJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS5ncHBfdmE7 Ci0KLQkJCWlmICghdHJhY2VfcmVhZCkgewotCQkJCXVsX3NobV9vZmZzZXRfdmlydCA9Ci0JCQkJ ICAgIHVsX3NobV9iYXNlX3ZpcnQgLSB1bF90bGJfYmFzZV92aXJ0OwotCQkJCXVsX3NobV9vZmZz ZXRfdmlydCArPQotCQkJCSAgICBQR19BTElHTl9ISUdIKHVsX2V4dF9lbmQgLSB1bF9keW5fZXh0 X2Jhc2UgKwotCQkJCQkJICAxLCBIV19QQUdFX1NJWkU2NEtCKTsKLQkJCQlkd19leHRfcHJvZ192 aXJ0X21lbSAtPSB1bF9zaG1fb2Zmc2V0X3ZpcnQ7Ci0JCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0g Kz0KLQkJCQkgICAgKHVsX2V4dF9iYXNlIC0gdWxfZHluX2V4dF9iYXNlKTsKLQkJCQlkZXZfY29u dGV4dC0+ZHNwX2V4dF9iYXNlX2FkZHIgPQotCQkJCSAgICBkd19leHRfcHJvZ192aXJ0X21lbTsK LQotCQkJCS8qCi0JCQkJICogVGhpcyBkc3BfZXh0X2Jhc2VfYWRkciB3aWxsIGdldCBjbGVhcmVk Ci0JCQkJICogb25seSB3aGVuIHRoZSBib2FyZCBpcyBzdG9wcGVkLgotCQkJCSovCi0JCQkJaWYg KCFkZXZfY29udGV4dC0+ZHNwX2V4dF9iYXNlX2FkZHIpCi0JCQkJCXN0YXR1cyA9IC1FUEVSTTsK LQkJCX0KLQotCQkJZHdfYmFzZV9hZGRyID0gZHdfZXh0X3Byb2dfdmlydF9tZW07Ci0JCX0KLQl9 Ci0KLQlpZiAoIWR3X2Jhc2VfYWRkciB8fCAhdWxfZXh0X2Jhc2UgfHwgIXVsX2V4dF9lbmQpCi0J CXN0YXR1cyA9IC1FUEVSTTsKLQotCW9mZnNldCA9IGRzcF9hZGRyIC0gdWxfZXh0X2Jhc2U7Ci0K LQlpZiAoIXN0YXR1cykKLQkJbWVtY3B5KGhvc3RfYnVmZiwgKHU4ICopIGR3X2Jhc2VfYWRkciAr IG9mZnNldCwgdWxfbnVtX2J5dGVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gd3JpdGVfZHNwX2RhdGEgPT09PT09PT0KLSAqICBwdXJwb3NlOgotICogICAgICBD b3BpZXMgYnVmZmVycyB0byB0aGUgRFNQIGludGVybmFsL2V4dGVybmFsIG1lbW9yeS4KLSAqLwot aW50IHdyaXRlX2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0 LAotCQkJICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCi0J CQkgIHUzMiBtZW1fdHlwZSkKLXsKLQl1MzIgb2Zmc2V0OwotCXUzMiBkd19iYXNlX2FkZHIgPSBk ZXZfY29udGV4dC0+ZHNwX2Jhc2VfYWRkcjsKLQlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNl cyA9IGRldl9jb250ZXh0LT5yZXNvdXJjZXM7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTMyIGJhc2Ux LCBiYXNlMiwgYmFzZTM7Ci0KLQliYXNlMSA9IE9NQVBfRFNQX01FTTFfU0laRTsKLQliYXNlMiA9 IE9NQVBfRFNQX01FTTJfQkFTRSAtIE9NQVBfRFNQX01FTTFfQkFTRTsKLQliYXNlMyA9IE9NQVBf RFNQX01FTTNfQkFTRSAtIE9NQVBfRFNQX01FTTFfQkFTRTsKLQotCWlmICghcmVzb3VyY2VzKQot CQlyZXR1cm4gLUVQRVJNOwotCi0Jb2Zmc2V0ID0gZHNwX2FkZHIgLSBkZXZfY29udGV4dC0+ZHNw X3N0YXJ0X2FkZDsKLQlpZiAob2Zmc2V0IDwgYmFzZTEpIHsKLQkJZHdfYmFzZV9hZGRyID0gTUVN X0xJTkVBUl9BRERSRVNTKHJlc291cmNlcy0+bWVtX2Jhc2VbMl0sCi0JCQkJCQkgIHJlc291cmNl cy0+bWVtX2xlbmd0aFsyXSk7Ci0JfSBlbHNlIGlmIChvZmZzZXQgPiBiYXNlMSAmJiBvZmZzZXQg PCBiYXNlMiArIE9NQVBfRFNQX01FTTJfU0laRSkgewotCQlkd19iYXNlX2FkZHIgPSBNRU1fTElO RUFSX0FERFJFU1MocmVzb3VyY2VzLT5tZW1fYmFzZVszXSwKLQkJCQkJCSAgcmVzb3VyY2VzLT5t ZW1fbGVuZ3RoWzNdKTsKLQkJb2Zmc2V0ID0gb2Zmc2V0IC0gYmFzZTI7Ci0JfSBlbHNlIGlmIChv ZmZzZXQgPj0gYmFzZTIgKyBPTUFQX0RTUF9NRU0yX1NJWkUgJiYKLQkJICAgb2Zmc2V0IDwgYmFz ZTMgKyBPTUFQX0RTUF9NRU0zX1NJWkUpIHsKLQkJZHdfYmFzZV9hZGRyID0gTUVNX0xJTkVBUl9B RERSRVNTKHJlc291cmNlcy0+bWVtX2Jhc2VbNF0sCi0JCQkJCQkgIHJlc291cmNlcy0+bWVtX2xl bmd0aFs0XSk7Ci0JCW9mZnNldCA9IG9mZnNldCAtIGJhc2UzOwotCX0gZWxzZSB7Ci0JCXJldHVy biAtRVBFUk07Ci0JfQotCWlmICh1bF9udW1fYnl0ZXMpCi0JCW1lbWNweSgodTggKikgKGR3X2Jh c2VfYWRkciArIG9mZnNldCksIGhvc3RfYnVmZiwgdWxfbnVtX2J5dGVzKTsKLQllbHNlCi0JCSoo KHUzMiAqKSBob3N0X2J1ZmYpID0gZHdfYmFzZV9hZGRyICsgb2Zmc2V0OwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSB3cml0ZV9leHRfZHNwX2RhdGEgPT09PT09PT0K LSAqICBwdXJwb3NlOgotICogICAgICBDb3BpZXMgYnVmZmVycyB0byB0aGUgZXh0ZXJuYWwgbWVt b3J5LgotICoKLSAqLwotaW50IHdyaXRlX2V4dF9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdlX2Rldl9j b250ZXh0ICpkZXZfY29udGV4dCwKLQkJCSAgICAgIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRk ciwKLQkJCSAgICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSwKLQkJCSAgICAgIGJv b2wgZHluYW1pY19sb2FkKQotewotCXUzMiBkd19iYXNlX2FkZHIgPSBkZXZfY29udGV4dC0+ZHNw X2V4dF9iYXNlX2FkZHI7Ci0JdTMyIGR3X29mZnNldCA9IDA7Ci0JdTggdGVtcF9ieXRlMSwgdGVt cF9ieXRlMjsKLQl1OCByZW1haW5fYnl0ZVs0XTsKLQlzMzIgaTsKLQlpbnQgcmV0ID0gMDsKLQl1 MzIgZHdfZXh0X3Byb2dfdmlydF9tZW07Ci0JdTMyIHVsX3RsYl9iYXNlX3ZpcnQgPSAwOwotCXUz MiB1bF9zaG1fb2Zmc2V0X3ZpcnQgPSAwOwotCXN0cnVjdCBjZmdfaG9zdHJlcyAqaG9zdF9yZXMg PSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOwotCWJvb2wgdHJhY2VfbG9hZCA9IGZhbHNlOwotCi0J dGVtcF9ieXRlMSA9IDB4MDsKLQl0ZW1wX2J5dGUyID0gMHgwOwotCi0JaWYgKHN5bWJvbHNfcmVs b2FkZWQpIHsKLQkJLyogQ2hlY2sgaWYgaXQgaXMgYSBsb2FkIHRvIFRyYWNlIHNlY3Rpb24gKi8K LQkJcmV0ID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmRldl9vYmosCi0JCQkJICAgICBE U1BfVFJBQ0VTRUNfQkVHLCAmdWxfdHJhY2Vfc2VjX2JlZyk7Ci0JCWlmICghcmV0KQotCQkJcmV0 ID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmRldl9vYmosCi0JCQkJCSAgICAgRFNQX1RS QUNFU0VDX0VORCwKLQkJCQkJICAgICAmdWxfdHJhY2Vfc2VjX2VuZCk7Ci0JfQotCWlmICghcmV0 KSB7Ci0JCWlmICgoZHNwX2FkZHIgPD0gdWxfdHJhY2Vfc2VjX2VuZCkgJiYKLQkJICAgIChkc3Bf YWRkciA+PSB1bF90cmFjZV9zZWNfYmVnKSkKLQkJCXRyYWNlX2xvYWQgPSB0cnVlOwotCX0KLQot CS8qIElmIGR5bmFtaWMsIGZvcmNlIHJlbWFwL3VubWFwICovCi0JaWYgKChkeW5hbWljX2xvYWQg fHwgdHJhY2VfbG9hZCkgJiYgZHdfYmFzZV9hZGRyKSB7Ci0JCWR3X2Jhc2VfYWRkciA9IDA7Ci0J CU1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUygodm9pZCAqKQotCQkJCQkgZGV2X2NvbnRleHQtPmRz cF9leHRfYmFzZV9hZGRyKTsKLQkJZGV2X2NvbnRleHQtPmRzcF9leHRfYmFzZV9hZGRyID0gMHgw OwotCX0KLQlpZiAoIWR3X2Jhc2VfYWRkcikgewotCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkKLQkJ CS8qIEdldCBTSE1fQkVHICBFWFRfQkVHIGFuZCBFWFRfRU5ELiAqLwotCQkJcmV0ID0gZGV2X2dl dF9zeW1ib2woZGV2X2NvbnRleHQtPmRldl9vYmosCi0JCQkJCSAgICAgU0hNQkFTRU5BTUUsICZ1 bF9zaG1fYmFzZV92aXJ0KTsKLQkJaWYgKGR5bmFtaWNfbG9hZCkgewotCQkJaWYgKCFyZXQpIHsK LQkJCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkKLQkJCQkJcmV0ID0KLQkJCQkJICAgIGRldl9nZXRf c3ltYm9sCi0JCQkJCSAgICAoZGV2X2NvbnRleHQtPmRldl9vYmosIERZTkVYVEJBU0UsCi0JCQkJ CSAgICAgJnVsX2V4dF9iYXNlKTsKLQkJCX0KLQkJCWlmICghcmV0KSB7Ci0JCQkJLyogRFIgIE9N QVBTMDAwMTMyMzUgOiBETE1vZHVsZXMgYXJyYXkgbWF5IGJlCi0JCQkJICogaW4gRVhUTUVNLiBJ dCBpcyBleHBlY3RlZCB0aGF0IERZTkVYVE1FTSBhbmQKLQkJCQkgKiBFWFRNRU0gYXJlIGNvbnRp Z3VvdXMsIHNvIGNoZWNraW5nIGZvciB0aGUKLQkJCQkgKiB1cHBlciBib3VuZCBhdCBFWFRFTkQg c2hvdWxkIGJlIE9rLiAqLwotCQkJCWlmIChzeW1ib2xzX3JlbG9hZGVkKQotCQkJCQlyZXQgPQot CQkJCQkgICAgZGV2X2dldF9zeW1ib2wKLQkJCQkJICAgIChkZXZfY29udGV4dC0+ZGV2X29iaiwg RVhURU5ELAotCQkJCQkgICAgICZ1bF9leHRfZW5kKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlm IChzeW1ib2xzX3JlbG9hZGVkKSB7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9Ci0JCQkJCSAg ICBkZXZfZ2V0X3N5bWJvbAotCQkJCQkgICAgKGRldl9jb250ZXh0LT5kZXZfb2JqLCBFWFRCQVNF LAotCQkJCQkgICAgICZ1bF9leHRfYmFzZSk7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9Ci0J CQkJCSAgICBkZXZfZ2V0X3N5bWJvbAotCQkJCQkgICAgKGRldl9jb250ZXh0LT5kZXZfb2JqLCBF WFRFTkQsCi0JCQkJCSAgICAgJnVsX2V4dF9lbmQpOwotCQkJfQotCQl9Ci0JCS8qIFRyYWNlIGJ1 ZmZlciBpdCByaWdodCBhZnRlciB0aGUgc2htIFNFRzAsIHNvIHNldCB0aGUKLQkJICogICAgICBi YXNlIGFkZHJlc3MgdG8gU0hNQkFTRSAqLwotCQlpZiAodHJhY2VfbG9hZCkKLQkJCXVsX2V4dF9i YXNlID0gdWxfc2htX2Jhc2VfdmlydDsKLQotCQlpZiAodWxfZXh0X2VuZCA8IHVsX2V4dF9iYXNl KQotCQkJcmV0ID0gLUVQRVJNOwotCi0JCWlmICghcmV0KSB7Ci0JCQl1bF90bGJfYmFzZV92aXJ0 ID0KLQkJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS5kc3BfdmEgKiBEU1BXT1JEU0la RTsKLQotCQkJaWYgKHN5bWJvbHNfcmVsb2FkZWQpIHsKLQkJCQlyZXQgPSBkZXZfZ2V0X3N5bWJv bAotCQkJCQkgICAgKGRldl9jb250ZXh0LT5kZXZfb2JqLAotCQkJCQkgICAgIERTUF9UUkFDRVNF Q19FTkQsICZzaG0wX2VuZCk7Ci0JCQkJaWYgKCFyZXQpIHsKLQkJCQkJcmV0ID0KLQkJCQkJICAg IGRldl9nZXRfc3ltYm9sCi0JCQkJCSAgICAoZGV2X2NvbnRleHQtPmRldl9vYmosIERZTkVYVEJB U0UsCi0JCQkJCSAgICAgJnVsX2R5bl9leHRfYmFzZSk7Ci0JCQkJfQotCQkJfQotCQkJdWxfc2ht X29mZnNldF92aXJ0ID0KLQkJCSAgICB1bF9zaG1fYmFzZV92aXJ0IC0gdWxfdGxiX2Jhc2Vfdmly dDsKLQkJCWlmICh0cmFjZV9sb2FkKSB7Ci0JCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0gPQotCQkJ CSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS5ncHBfdmE7Ci0JCQl9IGVsc2UgewotCQkJ CWR3X2V4dF9wcm9nX3ZpcnRfbWVtID0gaG9zdF9yZXMtPm1lbV9iYXNlWzFdOwotCQkJCWR3X2V4 dF9wcm9nX3ZpcnRfbWVtICs9Ci0JCQkJICAgICh1bF9leHRfYmFzZSAtIHVsX2R5bl9leHRfYmFz ZSk7Ci0JCQl9Ci0KLQkJCWRldl9jb250ZXh0LT5kc3BfZXh0X2Jhc2VfYWRkciA9Ci0JCQkgICAg KHUzMikgTUVNX0xJTkVBUl9BRERSRVNTKCh2b2lkICopCi0JCQkJCQkgICAgIGR3X2V4dF9wcm9n X3ZpcnRfbWVtLAotCQkJCQkJICAgICB1bF9leHRfZW5kIC0gdWxfZXh0X2Jhc2UpOwotCQkJZHdf YmFzZV9hZGRyICs9IGRldl9jb250ZXh0LT5kc3BfZXh0X2Jhc2VfYWRkcjsKLQkJCS8qIFRoaXMg ZHNwX2V4dF9iYXNlX2FkZHIgd2lsbCBnZXQgY2xlYXJlZCBvbmx5IHdoZW4KLQkJCSAqIHRoZSBi b2FyZCBpcyBzdG9wcGVkLiAqLwotCQkJaWYgKCFkZXZfY29udGV4dC0+ZHNwX2V4dF9iYXNlX2Fk ZHIpCi0JCQkJcmV0ID0gLUVQRVJNOwotCQl9Ci0JfQotCWlmICghZHdfYmFzZV9hZGRyIHx8ICF1 bF9leHRfYmFzZSB8fCAhdWxfZXh0X2VuZCkKLQkJcmV0ID0gLUVQRVJNOwotCi0JaWYgKCFyZXQp IHsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCXJlbWFpbl9ieXRlW2ldID0gMHgwOwot Ci0JCWR3X29mZnNldCA9IGRzcF9hZGRyIC0gdWxfZXh0X2Jhc2U7Ci0JCS8qIEFsc28gbWFrZSBz dXJlIHRoZSBkc3BfYWRkciBpcyA8IHVsX2V4dF9lbmQgKi8KLQkJaWYgKGRzcF9hZGRyID4gdWxf ZXh0X2VuZCB8fCBkd19vZmZzZXQgPiBkc3BfYWRkcikKLQkJCXJldCA9IC1FUEVSTTsKLQl9Ci0J aWYgKCFyZXQpIHsKLQkJaWYgKHVsX251bV9ieXRlcykKLQkJCW1lbWNweSgodTggKikgZHdfYmFz ZV9hZGRyICsgZHdfb2Zmc2V0LCBob3N0X2J1ZmYsCi0JCQkgICAgICAgdWxfbnVtX2J5dGVzKTsK LQkJZWxzZQotCQkJKigodTMyICopIGhvc3RfYnVmZikgPSBkd19iYXNlX2FkZHIgKyBkd19vZmZz ZXQ7Ci0JfQotCS8qIFVubWFwIGhlcmUgdG8gZm9yY2UgcmVtYXAgZm9yIG90aGVyIEV4dCBsb2Fk cyAqLwotCWlmICgoZHluYW1pY19sb2FkIHx8IHRyYWNlX2xvYWQpICYmIGRldl9jb250ZXh0LT5k c3BfZXh0X2Jhc2VfYWRkcikgewotCQlNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoKHZvaWQgKikK LQkJCQkJIGRldl9jb250ZXh0LT5kc3BfZXh0X2Jhc2VfYWRkcik7Ci0JCWRldl9jb250ZXh0LT5k c3BfZXh0X2Jhc2VfYWRkciA9IDB4MDsKLQl9Ci0Jc3ltYm9sc19yZWxvYWRlZCA9IGZhbHNlOwot CXJldHVybiByZXQ7Ci19Ci0KLWludCBzbV9pbnRlcnJ1cHRfZHNwKHN0cnVjdCBicmlkZ2VfZGV2 X2NvbnRleHQgKmRldl9jb250ZXh0LCB1MTYgbWJfdmFsKQotewotI2lmZGVmIENPTkZJR19USURT UEJSSURHRV9EVkZTCi0JdTMyIG9wcGxldmVsID0gMDsKLSNlbmRpZgotCXN0cnVjdCBvbWFwX2Rz cF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9Ci0JCW9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRm b3JtX2RhdGE7Ci0Jc3RydWN0IGNmZ19ob3N0cmVzICpyZXNvdXJjZXMgPSBkZXZfY29udGV4dC0+ cmVzb3VyY2VzOwotCWludCBzdGF0dXMgPSAwOwotCXUzMiB0ZW1wOwotCi0JaWYgKCFkZXZfY29u dGV4dC0+bWJveCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXJlc291cmNlcykKLQkJcmV0dXJuIC1F UEVSTTsKLQotCWlmIChkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJSRF9EU1BfSElCRVJOQVRJ T04gfHwKLQkgICAgZGV2X2NvbnRleHQtPmJyZF9zdGF0ZSA9PSBCUkRfSElCRVJOQVRJT04pIHsK LSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUwotCQlpZiAocGRhdGEtPmRzcF9nZXRfb3Bw KQotCQkJb3BwbGV2ZWwgPSAoKnBkYXRhLT5kc3BfZ2V0X29wcCkgKCk7Ci0JCWlmIChvcHBsZXZl bCA9PSBWREQxX09QUDEpIHsKLQkJCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQotCQkJCSgq cGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKFZERDFfT1BQMik7Ci0JCX0KLSNlbmRpZgotCQkvKiBS ZXN0YXJ0IHRoZSBwZXJpcGhlcmFsIGNsb2NrcyAqLwotCQlkc3BfY2xvY2tfZW5hYmxlX2FsbChk ZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKLQkJZHNwX3dkdF9lbmFibGUodHJ1ZSk7Ci0KLQkJ LyoKLQkJICogMjowIEFVVE9fSVZBMl9EUExMIC0gRW5hYmxpbmcgSVZBMiBEUExMIGF1dG8gY29u dHJvbAotCQkgKiAgICAgaW4gQ01fQVVUT0lETEVfUExMX0lWQTIgcmVnaXN0ZXIKLQkJICovCi0J CSgqcGRhdGEtPmRzcF9jbV93cml0ZSkoMSA8PCBPTUFQMzQzMF9BVVRPX0lWQTJfRFBMTF9TSElG VCwKLQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKTsKLQot CQkvKgotCQkgKiA3OjQgSVZBMl9EUExMX0ZSRVFTRUwgLSBJVkEyIGludGVybmFsIGZycSBzZXQg dG8KLQkJICogICAgIDAuNzUgTUh6IC0gMS4wIE1IegotCQkgKiAyOjAgRU5fSVZBMl9EUExMIC0g RW5hYmxlIElWQTIgRFBMTCBpbiBsb2NrIG1vZGUKLQkJICovCi0JCSgqcGRhdGEtPmRzcF9jbV9y bXdfYml0cykoT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSyB8Ci0JCQkJT01BUDM0MzBf RU5fSVZBMl9EUExMX01BU0ssCi0JCQkJMHgzIDw8IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VM X1NISUZUIHwKLQkJCQkweDcgPDwgT01BUDM0MzBfRU5fSVZBMl9EUExMX1NISUZULAotCQkJCU9N QVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpOwotCi0JCS8qIFJlc3RvcmUg bWFpbGJveCBzZXR0aW5ncyAqLwotCQlvbWFwX21ib3hfcmVzdG9yZV9jdHgoZGV2X2NvbnRleHQt Pm1ib3gpOwotCi0JCS8qIEFjY2VzcyBNTVUgU1lTIENPTkZJRyByZWdpc3RlciB0byBnZW5lcmF0 ZSBhIHNob3J0IHdha2V1cCAqLwotCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kbW11X2Jhc2Ug KyAweDEwKTsKLQotCQlkZXZfY29udGV4dC0+YnJkX3N0YXRlID0gQlJEX1JVTk5JTkc7Ci0JfSBl bHNlIGlmIChkZXZfY29udGV4dC0+YnJkX3N0YXRlID09IEJSRF9SRVRFTlRJT04pIHsKLQkJLyog UmVzdGFydCB0aGUgcGVyaXBoZXJhbCBjbG9ja3MgKi8KLQkJZHNwX2Nsb2NrX2VuYWJsZV9hbGwo ZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcyk7Ci0JfQotCi0Jc3RhdHVzID0gb21hcF9tYm94X21z Z19zZW5kKGRldl9jb250ZXh0LT5tYm94LCBtYl92YWwpOwotCi0JaWYgKHN0YXR1cykgewotCQlw cl9lcnIoIm9tYXBfbWJveF9tc2dfc2VuZCBGYWlsIGFuZCBzdGF0dXMgPSAlZFxuIiwgc3RhdHVz KTsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmggYi9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYTNmMTljNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvY29yZS90aW9tYXBfaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgot ICogdGlvbWFwX2lvLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVu Y3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogRGVmaW5pdGlvbnMsIHR5cGVz IGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgaW8gKHIvdyBleHRlcm5hbCBtZW0pLgot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0g KgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBB UyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF UyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotICovCi0KLSNpZm5kZWYgX1RJT01BUF9JT18KLSNkZWZpbmUgX1RJT01BUF9JT18KLQotLyoK LSAqIFN5bWJvbCB0aGF0IGRlZmluZXMgYmVnaW5uaW5nIG9mIHNoYXJlZCBtZW1vcnkuCi0gKiBG b3IgT01BUCAoSGVsZW4pIHRoaXMgaXMgdGhlIERTUCBWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiBT RFJBTS4KLSAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByb2dyYW0gRFNQIE1NVSB0byBtYXAgRFNQ IFZpcnQgdG8gR1BQIHBoeXMuCi0gKiAoc2VlIGRzcE1tdVRsYkVudHJ5KCkpLgotICovCi0jZGVm aW5lIFNITUJBU0VOQU1FICJTSE1fQkVHIgotI2RlZmluZSBFWFRCQVNFICAgICAiRVhUX0JFRyIK LSNkZWZpbmUgRVhURU5EICAgICAgIl9FWFRfRU5EIgotI2RlZmluZSBEWU5FWFRCQVNFICAiX0RZ TkVYVF9CRUciCi0jZGVmaW5lIERZTkVYVEVORCAgICJfRFlORVhUX0VORCIKLSNkZWZpbmUgSVZB RVhUTUVNQkFTRSAgICJfSVZBRVhUTUVNX0JFRyIKLSNkZWZpbmUgSVZBRVhUTUVNRU5EICAgIl9J VkFFWFRNRU1fRU5EIgotCi0jZGVmaW5lIERTUF9UUkFDRVNFQ19CRUcgICJfQlJJREdFX1RSQUNF X0JFRyIKLSNkZWZpbmUgRFNQX1RSQUNFU0VDX0VORCAgIl9CUklER0VfVFJBQ0VfRU5EIgotCi0j ZGVmaW5lIFNZU19QVVRDQkVHICAgICAgICAgICAgICAgIl9TWVNfUFVUQ0JFRyIKLSNkZWZpbmUg U1lTX1BVVENFTkQgICAgICAgICAgICAgICAiX1NZU19QVVRDRU5EIgotI2RlZmluZSBCUklER0Vf U1lTX1BVVENfQ1VSUkVOVCAgICJfQlJJREdFX1NZU19QVVRDX2N1cnJlbnQiCi0KLSNkZWZpbmUg V09SRFNXQVBfRU5BQkxFIDB4MwkvKiBFbmFibGUgd29yZCBzd2FwICovCi0KLS8qCi0gKiAgPT09 PT09PT0gcmVhZF9leHRfZHNwX2RhdGEgPT09PT09PT0KLSAqICBSZWFkcyBpdCBmcm9tIERTUCBF eHRlcm5hbCBtZW1vcnkuIFRoZSBleHRlcm5hbCBtZW1vcnkgZm9yIHRoZSBEU1AKLSAqIGlzIGNv bmZpZ3VyZWQgYnkgdGhlIGNvbWJpbmF0aW9uIG9mIERTUCBNTVUgYW5kIHNobSBNZW1vcnkgbWFu YWdlciBpbiB0aGUgQ0RCCi0gKi8KLWV4dGVybiBpbnQgcmVhZF9leHRfZHNwX2RhdGEoc3RydWN0 IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICAgIHU4ICpob3N0X2J1ZmYsIHUz MiBkc3BfYWRkciwKLQkJCQkgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKLQot LyoKLSAqICA9PT09PT09PSB3cml0ZV9kc3BfZGF0YSA9PT09PT09PQotICovCi1leHRlcm4gaW50 IHdyaXRlX2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAot CQkJCSB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCi0JCQkJIHUzMiB1bF9udW1fYnl0ZXMs IHUzMiBtZW1fdHlwZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gd3JpdGVfZXh0X2RzcF9kYXRhID09 PT09PT09Ci0gKiAgV3JpdGVzIHRvIHRoZSBEU1AgRXh0ZXJuYWwgbWVtb3J5IGZvciBleHRlcm5h bCBwcm9ncmFtLgotICogIFRoZSBleHQgbWVtIGZvciBwcm9ncmEgaXMgY29uZmlndXJlZCBieSB0 aGUgY29tYmluYXRpb24gb2YgRFNQIE1NVSBhbmQKLSAqICBzaG0gTWVtb3J5IG1hbmFnZXIgaW4g dGhlIENEQgotICovCi1leHRlcm4gaW50IHdyaXRlX2V4dF9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdl X2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKLQkJCQkgICAgIHU4ICpob3N0X2J1ZmYsIHUzMiBk c3BfYWRkciwKLQkJCQkgICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSwKLQkJCQkg ICAgIGJvb2wgZHluYW1pY19sb2FkKTsKLQotLyoKLSAqID09PT09PT09IHdyaXRlX2V4dDMyX2Jp dF9kc3BfZGF0YSA9PT09PT09PQotICogV3JpdGVzIDMyIGJpdCBkYXRhIHRvIHRoZSBleHRlcm5h bCBtZW1vcnkKLSAqLwotZXh0ZXJuIGlubGluZSB2b2lkIHdyaXRlX2V4dDMyX2JpdF9kc3BfZGF0 YShjb25zdAotCQkJCQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKLQkJ CQkJdTMyIGRzcF9hZGRyLCB1MzIgdmFsKQotewotCSoodTMyICopIGRzcF9hZGRyID0gKChkZXZf Y29udGV4dC0+dGNfd29yZF9zd2FwX29uKSA/ICgoKHZhbCA8PCAxNikgJgotCQkJCQkJCQkgMHhG RkZGMDAwMCkgfAotCQkJCQkJCQkoKHZhbCA+PiAxNikgJgotCQkJCQkJCQkgMHgwMDAwRkZGRikp IDoKLQkJCSAgICAgIHZhbCk7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSByZWFkX2V4dDMyX2JpdF9k c3BfZGF0YSA9PT09PT09PQotICogUmVhZHMgMzIgYml0IGRhdGEgZnJvbSB0aGUgZXh0ZXJuYWwg bWVtb3J5Ci0gKi8KLWV4dGVybiBpbmxpbmUgdTMyIHJlYWRfZXh0MzJfYml0X2RzcF9kYXRhKGNv bnN0IHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKLQkJCQkJICAqZGV2X2NvbnRleHQsIHUzMiBk c3BfYWRkcikKLXsKLQl1MzIgcmV0OwotCXJldCA9ICoodTMyICopIGRzcF9hZGRyOwotCi0JcmV0 ID0gKChkZXZfY29udGV4dC0+dGNfd29yZF9zd2FwX29uKSA/ICgoKHJldCA8PCAxNikKLQkJCQkJ CSAgJiAweEZGRkYwMDAwKSB8ICgocmV0ID4+IDE2KSAmCi0JCQkJCQkJCSAgIDB4MDAwMEZGRkYp KQotCSAgICAgICA6IHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmIC8qIF9USU9NQVBf SU9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS91ZV9k ZWguYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjhmMGJhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICsw LDAgQEAKLS8qCi0gKiB1ZV9kZWguYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3Vw cG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBJbXBsZW1lbnRz IHVwcGVyIGVkZ2UgRFNQIGV4Y2VwdGlvbiBoYW5kbGluZyAoREVIKSBmdW5jdGlvbnMuCi0gKgot ICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENv cHlyaWdodCAoQykgMjAxMCBGZWxpcGUgQ29udHJlcmFzCi0gKgotICogVGhpcyBwYWNrYWdlIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFO WSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBM SU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2luY2x1ZGUg PGRzcGJyaWRnZS9kYmRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+Ci0jaW5j bHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotI2luY2x1ZGUgIl90aW9tYXAuaCIKLSNpbmNsdWRlICJf ZGVoLmgiCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvZHJ2Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgotCi1zdGF0aWMgdTMyIGZhdWx0 X2FkZHI7Ci0KLXN0YXRpYyB2b2lkIG1tdV9mYXVsdF9kcGModW5zaWduZWQgbG9uZyBkYXRhKQot ewotCXN0cnVjdCBkZWhfbWdyICpkZWggPSAodm9pZCAqKWRhdGE7Ci0KLQlpZiAoIWRlaCkKLQkJ cmV0dXJuOwotCi0JYnJpZGdlX2RlaF9ub3RpZnkoZGVoLCBEU1BfTU1VRkFVTFQsIDApOwotfQot Ci1zdGF0aWMgaXJxcmV0dXJuX3QgbW11X2ZhdWx0X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQot ewotCXN0cnVjdCBkZWhfbWdyICpkZWggPSBkYXRhOwotCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVz b3VyY2VzOwotCXUzMiBldmVudDsKLQotCWlmICghZGVoKQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7 Ci0KLQlyZXNvdXJjZXMgPSBkZWgtPmJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7Ci0JaWYgKCFy ZXNvdXJjZXMpIHsKLQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkIHRvIGdldCBIb3N0IFJl c291cmNlc1xuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0K LQlod19tbXVfZXZlbnRfc3RhdHVzKHJlc291cmNlcy0+ZG1tdV9iYXNlLCAmZXZlbnQpOwotCWlm IChldmVudCA9PSBIV19NTVVfVFJBTlNMQVRJT05fRkFVTFQpIHsKLQkJaHdfbW11X2ZhdWx0X2Fk ZHJfcmVhZChyZXNvdXJjZXMtPmRtbXVfYmFzZSwgJmZhdWx0X2FkZHIpOwotCQlkZXZfZGJnKGJy aWRnZSwgIiVzOiBldmVudD0weCV4LCBmYXVsdF9hZGRyPTB4JXhcbiIsIF9fZnVuY19fLAotCQkJ CWV2ZW50LCBmYXVsdF9hZGRyKTsKLQkJLyoKLQkJICogU2NoZWR1bGUgYSBEUEMgZGlyZWN0bHku IEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZQotCQkgKiBuZWNlc3NhcnkgdG8gY2hlY2sgaWYgRFNQ IE1NVSBmYXVsdCBpcyBpbnRlbmRlZCBmb3IKLQkJICogQnJpZGdlLgotCQkgKi8KLQkJdGFza2xl dF9zY2hlZHVsZSgmZGVoLT5kcGNfdGFza2xldCk7Ci0KLQkJLyogRGlzYWJsZSB0aGUgTU1VIGV2 ZW50cywgZWxzZSBvbmNlIHdlIGNsZWFyIGl0IHdpbGwKLQkJICogc3RhcnQgdG8gcmFpc2UgSU5U cyBhZ2FpbiAqLwotCQlod19tbXVfZXZlbnRfZGlzYWJsZShyZXNvdXJjZXMtPmRtbXVfYmFzZSwK LQkJCQlIV19NTVVfVFJBTlNMQVRJT05fRkFVTFQpOwotCX0gZWxzZSB7Ci0JCWh3X21tdV9ldmVu dF9kaXNhYmxlKHJlc291cmNlcy0+ZG1tdV9iYXNlLAotCQkJCUhXX01NVV9BTExfSU5URVJSVVBU Uyk7Ci0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IGJyaWRnZV9kZWhfY3JlYXRl KHN0cnVjdCBkZWhfbWdyICoqcmV0X2RlaCwKLQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2Jq KQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGRlaF9tZ3IgKmRlaDsKLQlzdHJ1Y3QgYnJpZGdl X2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQgPSBOVUxMOwotCi0JLyogIE1lc3NhZ2UgbWFu YWdlciB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBhIGZpbGUgaXMgbG9hZGVkLCBzaW5jZQotCSAqICBz aXplIG9mIG1lc3NhZ2UgYnVmZmVyIGluIHNoYXJlZCBtZW1vcnkgaXMgY29uZmlndXJhYmxlIGlu Ci0JICogIHRoZSBiYXNlIGltYWdlLiAqLwotCS8qIEdldCBCcmlkZ2UgY29udGV4dCBpbmZvLiAq LwotCWRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosICZoYnJpZGdlX2NvbnRleHQpOwot CS8qIEFsbG9jYXRlIElPIG1hbmFnZXIgb2JqZWN0OiAqLwotCWRlaCA9IGt6YWxsb2Moc2l6ZW9m KCpkZWgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlaCkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwot CQlnb3RvIGVycjsKLQl9Ci0KLQkvKiBDcmVhdGUgYW4gTlRGWSBvYmplY3QgdG8gbWFuYWdlIG5v dGlmaWNhdGlvbnMgKi8KLQlkZWgtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50 Znlfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZWgtPm50Znlfb2JqKSB7Ci0JCXN0YXR1 cyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KLQludGZ5X2luaXQoZGVoLT5udGZ5X29iaik7 Ci0KLQkvKiBDcmVhdGUgYSBNTVVmYXVsdCBEUEMgKi8KLQl0YXNrbGV0X2luaXQoJmRlaC0+ZHBj X3Rhc2tsZXQsIG1tdV9mYXVsdF9kcGMsICh1MzIpIGRlaCk7Ci0KLQkvKiBGaWxsIGluIGNvbnRl eHQgc3RydWN0dXJlICovCi0JZGVoLT5icmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsK LQotCS8qIEluc3RhbGwgSVNSIGZ1bmN0aW9uIGZvciBEU1AgTU1VIGZhdWx0ICovCi0Jc3RhdHVz ID0gcmVxdWVzdF9pcnEoSU5UX0RTUF9NTVVfSVJRLCBtbXVfZmF1bHRfaXNyLCAwLAotCQkJIkRz cEJyaWRnZVx0aW9tbXUgZmF1bHQiLCBkZWgpOwotCWlmIChzdGF0dXMgPCAwKQotCQlnb3RvIGVy cjsKLQotCSpyZXRfZGVoID0gZGVoOwotCXJldHVybiAwOwotCi1lcnI6Ci0JYnJpZGdlX2RlaF9k ZXN0cm95KGRlaCk7Ci0JKnJldF9kZWggPSBOVUxMOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWlu dCBicmlkZ2VfZGVoX2Rlc3Ryb3koc3RydWN0IGRlaF9tZ3IgKmRlaCkKLXsKLQlpZiAoIWRlaCkK LQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBJZiBub3RpZmljYXRpb24gb2JqZWN0IGV4aXN0cywg ZGVsZXRlIGl0ICovCi0JaWYgKGRlaC0+bnRmeV9vYmopIHsKLQkJbnRmeV9kZWxldGUoZGVoLT5u dGZ5X29iaik7Ci0JCWtmcmVlKGRlaC0+bnRmeV9vYmopOwotCX0KLQkvKiBEaXNhYmxlIERTUCBN TVUgZmF1bHQgKi8KLQlmcmVlX2lycShJTlRfRFNQX01NVV9JUlEsIGRlaCk7Ci0KLQkvKiBGcmVl IERQQyBvYmplY3QgKi8KLQl0YXNrbGV0X2tpbGwoJmRlaC0+ZHBjX3Rhc2tsZXQpOwotCi0JLyog RGVhbGxvY2F0ZSB0aGUgREVIIG1hbmFnZXIgb2JqZWN0ICovCi0Ja2ZyZWUoZGVoKTsKLQotCXJl dHVybiAwOwotfQotCi1pbnQgYnJpZGdlX2RlaF9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IGRlaF9t Z3IgKmRlaCwgdTMyIGV2ZW50X21hc2ssCi0JCXUzMiBub3RpZnlfdHlwZSwKLQkJc3RydWN0IGRz cF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pCi17Ci0JaWYgKCFkZWgpCi0JCXJldHVybiAt RUZBVUxUOwotCi0JaWYgKGV2ZW50X21hc2spCi0JCXJldHVybiBudGZ5X3JlZ2lzdGVyKGRlaC0+ bnRmeV9vYmosIGhub3RpZmljYXRpb24sCi0JCQkJZXZlbnRfbWFzaywgbm90aWZ5X3R5cGUpOwot CWVsc2UKLQkJcmV0dXJuIG50ZnlfdW5yZWdpc3RlcihkZWgtPm50Znlfb2JqLCBobm90aWZpY2F0 aW9uKTsKLX0KLQotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKLXN0YXRpYyB2 b2lkIG1tdV9mYXVsdF9wcmludF9zdGFjayhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZf Y29udGV4dCkKLXsKLQlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsKLQlzdHJ1Y3QgaHdf bW11X21hcF9hdHRyc190IG1hcF9hdHRycyA9IHsKLQkJLmVuZGlhbmlzbSA9IEhXX0xJVFRMRV9F TkRJQU4sCi0JCS5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkUxNkJJVCwKLQkJLm1peGVkX3Np emUgPSBIV19NTVVfQ1BVRVMsCi0JfTsKLQl2b2lkICpkdW1teV92YV9hZGRyOwotCi0JcmVzb3Vy Y2VzID0gZGV2X2NvbnRleHQtPnJlc291cmNlczsKLQlkdW1teV92YV9hZGRyID0gKHZvaWQgKilf X2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7Ci0KLQkvKgotCSAqIEJlZm9yZSBhY2tpbmcgdGhl IE1NVSBmYXVsdCwgbGV0J3MgbWFrZSBzdXJlIE1NVSBjYW4gb25seQotCSAqIGFjY2VzcyBlbnRy eSAjMC4gVGhlbiBhZGQgYSBuZXcgZW50cnkgc28gdGhhdCB0aGUgRFNQIE9TCi0JICogY2FuIGNv bnRpbnVlIGluIG9yZGVyIHRvIGR1bXAgdGhlIHN0YWNrLgotCSAqLwotCWh3X21tdV90d2xfZGlz YWJsZShyZXNvdXJjZXMtPmRtbXVfYmFzZSk7Ci0JaHdfbW11X3RsYl9mbHVzaF9hbGwocmVzb3Vy Y2VzLT5kbW11X2Jhc2UpOwotCi0JaHdfbW11X3RsYl9hZGQocmVzb3VyY2VzLT5kbW11X2Jhc2Us Ci0JCQl2aXJ0X3RvX3BoeXMoZHVtbXlfdmFfYWRkciksIGZhdWx0X2FkZHIsCi0JCQlIV19QQUdF X1NJWkU0S0IsIDEsCi0JCQkmbWFwX2F0dHJzLCBIV19TRVQsIEhXX1NFVCk7Ci0KLQlkc3BfY2xr X2VuYWJsZShEU1BfQ0xLX0dQVDgpOwotCi0JZHNwX2dwdF93YWl0X292ZXJmbG93KERTUF9DTEtf R1BUOCwgMHhmZmZmZmZmZSk7Ci0KLQkvKiBDbGVhciBNTVUgaW50ZXJydXB0ICovCi0JaHdfbW11 X2V2ZW50X2FjayhyZXNvdXJjZXMtPmRtbXVfYmFzZSwKLQkJCUhXX01NVV9UUkFOU0xBVElPTl9G QVVMVCk7Ci0JZHVtcF9kc3Bfc3RhY2soZGV2X2NvbnRleHQpOwotCWRzcF9jbGtfZGlzYWJsZShE U1BfQ0xLX0dQVDgpOwotCi0JaHdfbW11X2Rpc2FibGUocmVzb3VyY2VzLT5kbW11X2Jhc2UpOwot CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1teV92YV9hZGRyKTsKLX0KLSNlbmRpZgotCi1z dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmV2ZW50X3RvX3N0cmluZyhpbnQgZXZlbnQpCi17Ci0J c3dpdGNoIChldmVudCkgewotCWNhc2UgRFNQX1NZU0VSUk9SOiByZXR1cm4gIkRTUF9TWVNFUlJP UiI7IGJyZWFrOwotCWNhc2UgRFNQX01NVUZBVUxUOiByZXR1cm4gIkRTUF9NTVVGQVVMVCI7IGJy ZWFrOwotCWNhc2UgRFNQX1BXUkVSUk9SOiByZXR1cm4gIkRTUF9QV1JFUlJPUiI7IGJyZWFrOwot CWNhc2UgRFNQX1dEVE9WRVJGTE9XOiByZXR1cm4gIkRTUF9XRFRPVkVSRkxPVyI7IGJyZWFrOwot CWRlZmF1bHQ6IHJldHVybiAidW5rbm93biBldmVudCI7IGJyZWFrOwotCX0KLX0KLQotdm9pZCBi cmlkZ2VfZGVoX25vdGlmeShzdHJ1Y3QgZGVoX21nciAqZGVoLCBpbnQgZXZlbnQsIGludCBpbmZv KQotewotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0OwotCWNvbnN0IGNo YXIgKnN0ciA9IGV2ZW50X3RvX3N0cmluZyhldmVudCk7Ci0KLQlpZiAoIWRlaCkKLQkJcmV0dXJu OwotCi0JZGV2X2RiZyhicmlkZ2UsICIlczogZGV2aWNlIGV4Y2VwdGlvbiIsIF9fZnVuY19fKTsK LQlkZXZfY29udGV4dCA9IGRlaC0+YnJpZGdlX2NvbnRleHQ7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7 Ci0JY2FzZSBEU1BfU1lTRVJST1I6Ci0JCWRldl9lcnIoYnJpZGdlLCAiJXM6ICVzLCBpbmZvPTB4 JXgiLCBfX2Z1bmNfXywKLQkJCQlzdHIsIGluZm8pOwotI2lmZGVmIENPTkZJR19USURTUEJSSURH RV9CQUNLVFJBQ0UKLQkJZHVtcF9kbF9tb2R1bGVzKGRldl9jb250ZXh0KTsKLQkJZHVtcF9kc3Bf c3RhY2soZGV2X2NvbnRleHQpOwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgRFNQX01NVUZBVUxU OgotCQlkZXZfZXJyKGJyaWRnZSwgIiVzOiAlcywgYWRkcj0weCV4IiwgX19mdW5jX18sCi0JCQkJ c3RyLCBmYXVsdF9hZGRyKTsKLSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCi0J CXByaW50X2RzcF90cmFjZV9idWZmZXIoZGV2X2NvbnRleHQpOwotCQlkdW1wX2RsX21vZHVsZXMo ZGV2X2NvbnRleHQpOwotCQltbXVfZmF1bHRfcHJpbnRfc3RhY2soZGV2X2NvbnRleHQpOwotI2Vu ZGlmCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoYnJpZGdlLCAiJXM6ICVzIiwgX19m dW5jX18sIHN0cik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEZpbHRlciBzdWJzZXF1ZW50IG5vdGlm aWNhdGlvbnMgd2hlbiBhbiBlcnJvciBvY2N1cnMgKi8KLQlpZiAoZGV2X2NvbnRleHQtPmJyZF9z dGF0ZSAhPSBCUkRfRVJST1IpIHsKLQkJbnRmeV9ub3RpZnkoZGVoLT5udGZ5X29iaiwgZXZlbnQp OwotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQotCQlicmlkZ2VfcmVjb3Zlcl9z Y2hlZHVsZSgpOwotI2VuZGlmCi0JfQotCi0JLyogU2V0IHRoZSBCb2FyZCBzdGF0ZSBhcyBFUlJP UiAqLwotCWRldl9jb250ZXh0LT5icmRfc3RhdGUgPSBCUkRfRVJST1I7Ci0JLyogRGlzYWJsZSBh bGwgdGhlIGNsb2NrcyB0aGF0IHdlcmUgZW5hYmxlZCBieSBEU1AgKi8KLQlkc3BfY2xvY2tfZGlz YWJsZV9hbGwoZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcyk7Ci0JLyoKLQkgKiBBdm9pZCB0aGUg c3Vic2VxdWVudCBXRFQgaWYgaXQgaGFwcGVucyBvbmNlLAotCSAqIGFsc28gaWYgZmF0YWwgZXJy b3Igb2NjdXJzLgotCSAqLwotCWRzcF93ZHRfZW5hYmxlKGZhbHNlKTsKLX0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3dkdC5jIGIvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2NvcmUvd2R0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIx OWY4ODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvd2R0 LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIHdkdC5jCi0gKgotICog RFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9j ZXNzb3JzLgotICoKLSAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVs IGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8ZHNwYnJp ZGdlL2RiZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KLSNpbmNsdWRlIDxk c3BicmlkZ2UvZGV2Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL19jaG5sX3NtLmg+Ci0jaW5jbHVk ZSA8ZHNwYnJpZGdlL3dkdC5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLQot I2RlZmluZSBPTUFQMzRYWF9XRFQzX0JBU0UJKDB4NDkwMDAwMDAgKyAweDMwMDAwKQotI2RlZmlu ZSBJTlRfMzRYWF9XRFQzX0lSUQkoMzYgKyBOUl9JUlFTKQotCi1zdGF0aWMgc3RydWN0IGRzcF93 ZHRfc2V0dGluZyBkc3Bfd2R0OwotCi12b2lkIGRzcF93ZHRfZHBjKHVuc2lnbmVkIGxvbmcgZGF0 YSkKLXsKLQlzdHJ1Y3QgZGVoX21nciAqZGVoX21ncjsKLQotCWRldl9nZXRfZGVoX21ncihkZXZf Z2V0X2ZpcnN0KCksICZkZWhfbWdyKTsKLQlpZiAoZGVoX21ncikKLQkJYnJpZGdlX2RlaF9ub3Rp ZnkoZGVoX21nciwgRFNQX1dEVE9WRVJGTE9XLCAwKTsKLX0KLQotaXJxcmV0dXJuX3QgZHNwX3dk dF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgdmFsdWU7Ci0JLyogYWNrIHdkdDMg aW50ZXJydXB0ICovCi0JdmFsdWUgPSBfX3Jhd19yZWFkbChkc3Bfd2R0LnJlZ19iYXNlICsgT01B UDNfV0RUM19JU1JfT0ZGU0VUKTsKLQlfX3Jhd193cml0ZWwodmFsdWUsIGRzcF93ZHQucmVnX2Jh c2UgKyBPTUFQM19XRFQzX0lTUl9PRkZTRVQpOwotCi0JdGFza2xldF9zY2hlZHVsZSgmZHNwX3dk dC53ZHQzX3Rhc2tsZXQpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotaW50IGRzcF93ZHRf aW5pdCh2b2lkKQotewotCWludCByZXQgPSAwOwotCi0JZHNwX3dkdC5zbV93ZHQgPSBOVUxMOwot CWRzcF93ZHQucmVnX2Jhc2UgPSBpb3JlbWFwKE9NQVAzNFhYX1dEVDNfQkFTRSwgU1pfNEspOwot CWlmICghZHNwX3dkdC5yZWdfYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0YXNrbGV0X2lu aXQoJmRzcF93ZHQud2R0M190YXNrbGV0LCBkc3Bfd2R0X2RwYywgMCk7Ci0KLQlkc3Bfd2R0LmZj bGsgPSBjbGtfZ2V0KE5VTEwsICJ3ZHQzX2ZjayIpOwotCi0JaWYgKCFJU19FUlIoZHNwX3dkdC5m Y2xrKSkgewotCQljbGtfcHJlcGFyZShkc3Bfd2R0LmZjbGspOwotCi0JCWRzcF93ZHQuaWNsayA9 IGNsa19nZXQoTlVMTCwgIndkdDNfaWNrIik7Ci0JCWlmIChJU19FUlIoZHNwX3dkdC5pY2xrKSkg ewotCQkJY2xrX3B1dChkc3Bfd2R0LmZjbGspOwotCQkJZHNwX3dkdC5mY2xrID0gTlVMTDsKLQkJ CXJldCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQljbGtfcHJlcGFyZShkc3Bfd2R0LmljbGsp OwotCQl9Ci0JfSBlbHNlCi0JCXJldCA9IC1FRkFVTFQ7Ci0KLQlpZiAoIXJldCkKLQkJcmV0ID0g cmVxdWVzdF9pcnEoSU5UXzM0WFhfV0RUM19JUlEsIGRzcF93ZHRfaXNyLCAwLAotCQkJCQkJCSJk c3Bfd2R0IiwgJmRzcF93ZHQpOwotCi0JLyogRGlzYWJsZSBhdCB0aGlzIG1vbWVudCwgaXQgd2ls bCBiZSBlbmFibGVkIHdoZW4gRFNQIHN0YXJ0cyAqLwotCWlmICghcmV0KQotCQlkaXNhYmxlX2ly cShJTlRfMzRYWF9XRFQzX0lSUSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGRzcF93ZHRf c21fc2V0KHZvaWQgKmRhdGEpCi17Ci0JZHNwX3dkdC5zbV93ZHQgPSBkYXRhOwotCWRzcF93ZHQu c21fd2R0LT53ZHRfb3ZlcmZsb3cgPSA1OwkvKiBpbiBzZWNvbmRzICovCi19Ci0KLQotdm9pZCBk c3Bfd2R0X2V4aXQodm9pZCkKLXsKLQlmcmVlX2lycShJTlRfMzRYWF9XRFQzX0lSUSwgJmRzcF93 ZHQpOwotCXRhc2tsZXRfa2lsbCgmZHNwX3dkdC53ZHQzX3Rhc2tsZXQpOwotCi0JaWYgKGRzcF93 ZHQuZmNsaykgewotCQljbGtfdW5wcmVwYXJlKGRzcF93ZHQuZmNsayk7Ci0JCWNsa19wdXQoZHNw X3dkdC5mY2xrKTsKLQl9Ci0JaWYgKGRzcF93ZHQuaWNsaykgewotCQljbGtfdW5wcmVwYXJlKGRz cF93ZHQuaWNsayk7Ci0JCWNsa19wdXQoZHNwX3dkdC5pY2xrKTsKLQl9Ci0KLQlkc3Bfd2R0LmZj bGsgPSBOVUxMOwotCWRzcF93ZHQuaWNsayA9IE5VTEw7Ci0JZHNwX3dkdC5zbV93ZHQgPSBOVUxM OwotCi0JaWYgKGRzcF93ZHQucmVnX2Jhc2UpCi0JCWlvdW5tYXAoZHNwX3dkdC5yZWdfYmFzZSk7 Ci0JZHNwX3dkdC5yZWdfYmFzZSA9IE5VTEw7Ci19Ci0KLXZvaWQgZHNwX3dkdF9lbmFibGUoYm9v bCBlbmFibGUpCi17Ci0JdTMyIHRtcDsKLQlzdGF0aWMgYm9vbCB3ZHRfZW5hYmxlOwotCi0JaWYg KHdkdF9lbmFibGUgPT0gZW5hYmxlIHx8ICFkc3Bfd2R0LmZjbGsgfHwgIWRzcF93ZHQuaWNsaykK LQkJcmV0dXJuOwotCi0Jd2R0X2VuYWJsZSA9IGVuYWJsZTsKLQotCWlmIChlbmFibGUpIHsKLQkJ Y2xrX2VuYWJsZShkc3Bfd2R0LmZjbGspOwotCQljbGtfZW5hYmxlKGRzcF93ZHQuaWNsayk7Ci0J CWRzcF93ZHQuc21fd2R0LT53ZHRfc2V0Y2xvY2tzID0gMTsKLQkJdG1wID0gX19yYXdfcmVhZGwo ZHNwX3dkdC5yZWdfYmFzZSArIE9NQVAzX1dEVDNfSVNSX09GRlNFVCk7Ci0JCV9fcmF3X3dyaXRl bCh0bXAsIGRzcF93ZHQucmVnX2Jhc2UgKyBPTUFQM19XRFQzX0lTUl9PRkZTRVQpOwotCQllbmFi bGVfaXJxKElOVF8zNFhYX1dEVDNfSVJRKTsKLQl9IGVsc2UgewotCQlkaXNhYmxlX2lycShJTlRf MzRYWF9XRFQzX0lSUSk7Ci0JCWRzcF93ZHQuc21fd2R0LT53ZHRfc2V0Y2xvY2tzID0gMDsKLQkJ Y2xrX2Rpc2FibGUoZHNwX3dkdC5pY2xrKTsKLQkJY2xrX2Rpc2FibGUoZHNwX3dkdC5mY2xrKTsK LQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9j bG9hZC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmMjEwNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCisrKyAvZGV2L251bGwKQEAgLTEs MTk1OSArMCwwIEBACi0vKgotICogY2xvYWQuYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2 ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMg cGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQg V0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0j aW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAiaGVhZGVyLmgiCi0KLSNpbmNsdWRl ICJtb2R1bGVfbGlzdC5oIgotI2RlZmluZSBMSU5LRVJfTU9EVUxFU19IRUFERVIgKCJfIiBNT0RV TEVTX0hFQURFUikKLQotLyoKLSAqIGZvcndhcmQgcmVmZXJlbmNlcwotICovCi1zdGF0aWMgdm9p ZCBkbG9hZF9zeW1ib2xzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKLXN0YXRpYyB2b2lk IGRsb2FkX2RhdGEoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOwotc3RhdGljIHZvaWQgYWxs b2NhdGVfc2VjdGlvbnMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOwotc3RhdGljIHZvaWQg c3RyaW5nX3RhYmxlX2ZyZWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOwotc3RhdGljIHZv aWQgc3ltYm9sX3RhYmxlX2ZyZWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOwotc3RhdGlj IHZvaWQgc2VjdGlvbl90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKLXN0 YXRpYyB2b2lkIGluaXRfbW9kdWxlX2hhbmRsZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7 Ci0jaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCi1zdGF0aWMgY2hhciAqdW5wYWNrX25h bWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiBzb2Zmc2V0KTsKLSNlbmRpZgotCi1z dGF0aWMgY29uc3QgY2hhciBjaW5pdG5hbWVbXSA9IHsgIi5jaW5pdCIgfTsKLXN0YXRpYyBjb25z dCBjaGFyIGxvYWRlcl9kbGx2aWV3X3Jvb3RbXSA9IHsgIj9ETE1vZHVsZXM/IiB9OwotCi0vKgot ICogRXJyb3Igc3RyaW5ncwotICovCi1zdGF0aWMgY29uc3QgY2hhciByZWFkc3RybVtdID0geyAi RXJyb3IgcmVhZGluZyAlcyBmcm9tIGlucHV0IHN0cmVhbSIgfTsKLXN0YXRpYyBjb25zdCBjaGFy IGVycl9hbGxvY1tdID0geyAiU3ltcy0+ZGxvYWRfYWxsb2NhdGUoICVkICkgZmFpbGVkIiB9Owot c3RhdGljIGNvbnN0IGNoYXIgdGd0YWxsb2NbXSA9IHsKLQkiVGFyZ2V0IG1lbW9yeSBhbGxvY2F0 ZSBmYWlsZWQsIHNlY3Rpb24gJXMgc2l6ZSAiIEZNVF9VSTMyIH07Ci1zdGF0aWMgY29uc3QgY2hh ciBpbml0ZmFpbFtdID0geyAiJXMgdG8gdGFyZ2V0IGFkZHJlc3MgIiBGTVRfVUkzMiAiIGZhaWxl ZCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyIGRsdndyaXRlW10gPSB7ICJXcml0ZSB0byBETEx2aWV3 IGxpc3QgZmFpbGVkIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgaWNvbm5lY3RbXSA9IHsgIkNvbm5l Y3QgY2FsbCB0byBpbml0IGludGVyZmFjZSBmYWlsZWQiIH07Ci1zdGF0aWMgY29uc3QgY2hhciBl cnJfY2hlY2tzdW1bXSA9IHsgIkNoZWNrc3VtIGZhaWxlZCBvbiAlcyIgfTsKLQotLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLSAqIFByb2NlZHVyZSBkbG9hZF9lcnJvcgotICoKLSAqIFBhcmFtZXRlcnM6Ci0g KgllcnJ0eHQJZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLCBwcmludGYgc3R5bGUKLSAqCS4uLgkJ YWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICoKLSAqIEVmZmVjdDoKLSAqCVJlcG9ydHMgb3IgcmVj b3JkcyB0aGUgZXJyb3IgYXMgYXBwcm9wcmlhdGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXZvaWQg ZGxvYWRfZXJyb3Ioc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIGNvbnN0IGNoYXIgKmVycnR4 dCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQotCXZhX3N0YXJ0KGFyZ3MsIGVycnR4dCk7Ci0J ZGx0aGlzLT5teXN5bS0+ZXJyb3JfcmVwb3J0KGRsdGhpcy0+bXlzeW0sIGVycnR4dCwgYXJncyk7 Ci0JdmFfZW5kKGFyZ3MpOwotCWRsdGhpcy0+ZGxvYWRfZXJyY291bnQgKz0gMTsKLQotfQkJCQkv KiBkbG9hZF9lcnJvciAqLwotCi0jZGVmaW5lIERMX0VSUk9SKHp6YSwgenpiKSBkbG9hZF9lcnJv cihkbHRoaXMsIHp6YSwgenpiKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlIGRs b2FkX3N5bXNfZXJyb3IKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZXJydHh0CWRlc2NyaXB0aW9u IG9mIHRoZSBlcnJvciwgcHJpbnRmIHN0eWxlCi0gKgkuLi4JCWFkZGl0aW9uYWwgaW5mb3JtYXRp b24KLSAqCi0gKiBFZmZlY3Q6Ci0gKglSZXBvcnRzIG9yIHJlY29yZHMgdGhlIGVycm9yIGFzIGFw cHJvcHJpYXRlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi12b2lkIGRsb2FkX3N5bXNfZXJyb3Ioc3Ry dWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywgY29uc3QgY2hhciAqZXJydHh0LCAuLi4pCi17 Ci0JdmFfbGlzdCBhcmdzOwotCi0JdmFfc3RhcnQoYXJncywgZXJydHh0KTsKLQlzeW1zLT5lcnJv cl9yZXBvcnQoc3ltcywgZXJydHh0LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci19Ci0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCi0gKiBQcm9jZWR1cmUgZHluYW1pY19sb2FkX21vZHVsZQotICoKLSAqIFBh cmFtZXRlcnM6Ci0gKgltb2R1bGUJVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBt b2R1bGUgaW1hZ2UKLSAqCXN5bXMJSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2Zy ZWUgZnVuY3Rpb25zCi0gKglhbGxvYwlUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgotICoJ aW5pdAlUYXJnZXQtc2lkZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24KLSAqCW9wdGlvbnMJT3B0aW9u IGZsYWdzIERMT0FEXyoKLSAqCW1oYW5kbGUJQSBtb2R1bGUgaGFuZGxlIGZvciB1c2Ugd2l0aCBE eW5hbWljX1VubG9hZAotICoKLSAqIEVmZmVjdDoKLSAqCVRoZSBtb2R1bGUgaW1hZ2UgaXMgcmVh ZCB1c2luZyAqbW9kdWxlLiAgVGFyZ2V0IHN0b3JhZ2UgZm9yIHRoZSBuZXcKLSAqCWltYWdlIGlz Ci0gKiBvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVmaW5lZCBhbmQgcmVmZXJlbmNl ZCBieSB0aGUgbW9kdWxlIGFyZQotICogbWFuYWdlZCB1c2luZyAqc3ltcy4gIFRoZSBpbWFnZSBp cyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVmZXJlbmNlcwotICoJcmVzb2x2ZWQgYXMgbmVjZXNzYXJ5 LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJlIHBsYWNlZAotICoJaW50byB0 YXJnZXQgbWVtb3J5IHVzaW5nICppbml0LgotICoKLSAqIFJldHVybnM6Ci0gKglPbiBhIHN1Y2Nl c3NmdWwgbG9hZCwgYSBtb2R1bGUgaGFuZGxlIGlzIHBsYWNlZCBpbiAqbWhhbmRsZSwKLSAqCWFu ZCB6ZXJvIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVj dGVkIGlzCi0gKglyZXR1cm5lZC4gIEluZGl2aWR1YWwgZXJyb3JzIGFyZSByZXBvcnRlZCBkdXJp bmcgdGhlIGxvYWQgcHJvY2VzcwotICoJdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCi0gKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLwotaW50IGR5bmFtaWNfbG9hZF9tb2R1bGUoc3RydWN0IGR5bmFtaWNfbG9h ZGVyX3N0cmVhbSAqbW9kdWxlLAotCQkJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywK LQkJCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCi0JCQlzdHJ1Y3QgZHlu YW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqaW5pdCwKLQkJCXVuc2lnbmVkIG9wdGlvbnMsIHZvaWQg KiptaGFuZGxlKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkICpkcCwgc3o7Ci0Jc3RydWN0IGRsb2Fk X3N0YXRlIGRsX3N0YXRlOwkvKiBpbnRlcm5hbCBzdGF0ZSBmb3IgdGhpcyBjYWxsICovCi0KLQkv KiBibGFzdCBvdXIgaW50ZXJuYWwgc3RhdGUgKi8KLQlkcCA9ICh1bnNpZ25lZCAqKSZkbF9zdGF0 ZTsKLQlmb3IgKHN6ID0gc2l6ZW9mKGRsX3N0YXRlKSAvIHNpemVvZih1bnNpZ25lZCk7IHN6ID4g MDsgc3ogLT0gMSkKLQkJKmRwKysgPSAwOwotCi0JLyogRW5hYmxlIF9vbmx5XyBCU1MgaW5pdGlh bGl6YXRpb24gaWYgZW5hYmxlZCBieSB1c2VyICovCi0JaWYgKChvcHRpb25zICYgRExPQURfSU5J VEJTUykgPT0gRExPQURfSU5JVEJTUykKLQkJZGxfc3RhdGUubXlvcHRpb25zID0gRExPQURfSU5J VEJTUzsKLQotCS8qIENoZWNrIHRoYXQgbWFuZGF0b3J5IGFyZ3VtZW50cyBhcmUgcHJlc2VudCAq LwotCWlmICghbW9kdWxlIHx8ICFzeW1zKSB7Ci0JCWRsb2FkX2Vycm9yKCZkbF9zdGF0ZSwgIlJl cXVpcmVkIHBhcmFtZXRlciBpcyBOVUxMIik7Ci0JfSBlbHNlIHsKLQkJZGxfc3RhdGUuc3RybSA9 IG1vZHVsZTsKLQkJZGxfc3RhdGUubXlzeW0gPSBzeW1zOwotCQlkbG9hZF9oZWFkZXJzKCZkbF9z dGF0ZSk7Ci0JCWlmICghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpCi0JCQlkbG9hZF9zdHJpbmdz KCZkbF9zdGF0ZSwgZmFsc2UpOwotCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KQotCQkJ ZGxvYWRfc2VjdGlvbnMoJmRsX3N0YXRlKTsKLQotCQlpZiAoaW5pdCAmJiAhZGxfc3RhdGUuZGxv YWRfZXJyY291bnQpIHsKLQkJCWlmIChpbml0LT5jb25uZWN0KGluaXQpKSB7Ci0JCQkJZGxfc3Rh dGUubXlpbyA9IGluaXQ7Ci0JCQkJZGxfc3RhdGUubXlhbGxvYyA9IGFsbG9jOwotCQkJCS8qIGRv IG5vdywgYmVmb3JlIHJlZHVjaW5nIHN5bWJvbHMgKi8KLQkJCQlhbGxvY2F0ZV9zZWN0aW9ucygm ZGxfc3RhdGUpOwotCQkJfSBlbHNlCi0JCQkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCBpY29ubmVj dCk7Ci0JCX0KLQotCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSB7Ci0JCQkvKiBmaXgg dXAgZW50cnkgcG9pbnQgYWRkcmVzcyAqLwotCQkJdW5zaWduZWQgc3JlZiA9IGRsX3N0YXRlLmRm aWxlX2hkci5kZl9lbnRyeV9zZWNuIC0gMTsKLQotCQkJaWYgKHNyZWYgPCBkbF9zdGF0ZS5hbGxv Y2F0ZWRfc2Vjbl9jb3VudCkKLQkJCQlkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlwdCArPQot CQkJCSAgICBkbF9zdGF0ZS5sZHJfc2VjdGlvbnNbc3JlZl0ucnVuX2FkZHI7Ci0KLQkJCWRsb2Fk X3N5bWJvbHMoJmRsX3N0YXRlKTsKLQkJfQotCi0JCWlmIChpbml0ICYmICFkbF9zdGF0ZS5kbG9h ZF9lcnJjb3VudCkKLQkJCWRsb2FkX2RhdGEoJmRsX3N0YXRlKTsKLQotCQlpbml0X21vZHVsZV9o YW5kbGUoJmRsX3N0YXRlKTsKLQotCQkvKiBkbF9zdGF0ZS5teWlvIGlzIGluaXQgb3IgMCBhdCB0 aGlzIHBvaW50LiAqLwotCQlpZiAoZGxfc3RhdGUubXlpbykgewotCQkJaWYgKCghZGxfc3RhdGUu ZGxvYWRfZXJyY291bnQpICYmCi0JCQkgICAgKGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeV9z ZWNuICE9IEROX1VOREVGKSAmJgotCQkJICAgICghaW5pdC0+ZXhlY3V0ZShpbml0LAotCQkJCQkg ICAgZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5cHQpKSkKLQkJCQlkbG9hZF9lcnJvcigmZGxf c3RhdGUsICJJbml0LT5FeGVjdXRlIEZhaWxlZCIpOwotCQkJaW5pdC0+cmVsZWFzZShpbml0KTsK LQkJfQotCi0JCXN5bWJvbF90YWJsZV9mcmVlKCZkbF9zdGF0ZSk7Ci0JCXNlY3Rpb25fdGFibGVf ZnJlZSgmZGxfc3RhdGUpOwotCQlzdHJpbmdfdGFibGVfZnJlZSgmZGxfc3RhdGUpOwotCQlkbG9h ZF90cmFtcF9jbGVhbnVwKCZkbF9zdGF0ZSk7Ci0KLQkJaWYgKGRsX3N0YXRlLmRsb2FkX2VycmNv dW50KSB7Ci0JCQlkeW5hbWljX3VubG9hZF9tb2R1bGUoZGxfc3RhdGUubXloYW5kbGUsIHN5bXMs IGFsbG9jLAotCQkJCQkgICAgICBpbml0KTsKLQkJCWRsX3N0YXRlLm15aGFuZGxlID0gTlVMTDsK LQkJfQotCX0KLQotCWlmIChtaGFuZGxlKQotCQkqbWhhbmRsZSA9IGRsX3N0YXRlLm15aGFuZGxl OwkvKiBnaXZlIGJhY2sgdGhlIGhhbmRsZSAqLwotCi0JcmV0dXJuIGRsX3N0YXRlLmRsb2FkX2Vy cmNvdW50OwotfQkJCQkvKiBETE9BRF9GaWxlICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQ cm9jZWR1cmUgZHluYW1pY19vcGVuX21vZHVsZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgICAg IG1vZHVsZSAgVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBtb2R1bGUgaW1hZ2UK LSAqICAgICAgc3ltcyAgICBIb3N0LXNpZGUgc3ltYm9sIHRhYmxlIGFuZCBtYWxsb2MvZnJlZSBm dW5jdGlvbnMKLSAqICAgICAgYWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgot ICogICAgICBpbml0ICAgIFRhcmdldC1zaWRlIG1lbW9yeSBpbml0aWFsaXphdGlvbgotICogICAg ICBvcHRpb25zIE9wdGlvbiBmbGFncyBETE9BRF8qCi0gKiAgICAgIG1oYW5kbGUgQSBtb2R1bGUg aGFuZGxlIGZvciB1c2Ugd2l0aCBEeW5hbWljX1VubG9hZAotICoKLSAqIEVmZmVjdDoKLSAqICAg ICAgVGhlIG1vZHVsZSBpbWFnZSBpcyByZWFkIHVzaW5nICptb2R1bGUuICBUYXJnZXQgc3RvcmFn ZSBmb3IgdGhlIG5ldwotICogICAgICBpbWFnZSBpcwotICogCW9idGFpbmVkIGZyb20gKmFsbG9j LiAgU3ltYm9scyBkZWZpbmVkIGFuZCByZWZlcmVuY2VkIGJ5IHRoZSBtb2R1bGUgYXJlCi0gKiAJ bWFuYWdlZCB1c2luZyAqc3ltcy4gIFRoZSBpbWFnZSBpcyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVm ZXJlbmNlcwotICogICAgICByZXNvbHZlZCBhcyBuZWNlc3NhcnksIGFuZCB0aGUgcmVzdWx0aW5n IGV4ZWN1dGFibGUgYml0cyBhcmUgcGxhY2VkCi0gKiAgICAgIGludG8gdGFyZ2V0IG1lbW9yeSB1 c2luZyAqaW5pdC4KLSAqCi0gKiBSZXR1cm5zOgotICogICAgICBPbiBhIHN1Y2Nlc3NmdWwgbG9h ZCwgYSBtb2R1bGUgaGFuZGxlIGlzIHBsYWNlZCBpbiAqbWhhbmRsZSwKLSAqICAgICAgYW5kIHpl cm8gaXMgcmV0dXJuZWQuICBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQg aXMKLSAqICAgICAgcmV0dXJuZWQuICBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgZHVy aW5nIHRoZSBsb2FkIHByb2Nlc3MKLSAqICAgICAgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCku Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLwotaW50Ci1keW5hbWljX29wZW5fbW9kdWxlKHN0cnVjdCBkeW5h bWljX2xvYWRlcl9zdHJlYW0gKm1vZHVsZSwKLQkJICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9z eW0gKnN5bXMsCi0JCSAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKmFsbG9jLAot CQkgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQsCi0JCSAgICB1bnNp Z25lZCBvcHRpb25zLCB2b2lkICoqbWhhbmRsZSkKLXsKLQlyZWdpc3RlciB1bnNpZ25lZCAqZHAs IHN6OwotCXN0cnVjdCBkbG9hZF9zdGF0ZSBkbF9zdGF0ZTsJLyogaW50ZXJuYWwgc3RhdGUgZm9y IHRoaXMgY2FsbCAqLwotCi0JLyogYmxhc3Qgb3VyIGludGVybmFsIHN0YXRlICovCi0JZHAgPSAo dW5zaWduZWQgKikmZGxfc3RhdGU7Ci0JZm9yIChzeiA9IHNpemVvZihkbF9zdGF0ZSkgLyBzaXpl b2YodW5zaWduZWQpOyBzeiA+IDA7IHN6IC09IDEpCi0JCSpkcCsrID0gMDsKLQotCS8qIEVuYWJs ZSBfb25seV8gQlNTIGluaXRpYWxpemF0aW9uIGlmIGVuYWJsZWQgYnkgdXNlciAqLwotCWlmICgo b3B0aW9ucyAmIERMT0FEX0lOSVRCU1MpID09IERMT0FEX0lOSVRCU1MpCi0JCWRsX3N0YXRlLm15 b3B0aW9ucyA9IERMT0FEX0lOSVRCU1M7Ci0KLQkvKiBDaGVjayB0aGF0IG1hbmRhdG9yeSBhcmd1 bWVudHMgYXJlIHByZXNlbnQgKi8KLQlpZiAoIW1vZHVsZSB8fCAhc3ltcykgewotCQlkbG9hZF9l cnJvcigmZGxfc3RhdGUsICJSZXF1aXJlZCBwYXJhbWV0ZXIgaXMgTlVMTCIpOwotCX0gZWxzZSB7 Ci0JCWRsX3N0YXRlLnN0cm0gPSBtb2R1bGU7Ci0JCWRsX3N0YXRlLm15c3ltID0gc3ltczsKLQkJ ZGxvYWRfaGVhZGVycygmZGxfc3RhdGUpOwotCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50 KQotCQkJZGxvYWRfc3RyaW5ncygmZGxfc3RhdGUsIGZhbHNlKTsKLQkJaWYgKCFkbF9zdGF0ZS5k bG9hZF9lcnJjb3VudCkKLQkJCWRsb2FkX3NlY3Rpb25zKCZkbF9zdGF0ZSk7Ci0KLQkJaWYgKGlu aXQgJiYgIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSB7Ci0JCQlpZiAoaW5pdC0+Y29ubmVjdChp bml0KSkgewotCQkJCWRsX3N0YXRlLm15aW8gPSBpbml0OwotCQkJCWRsX3N0YXRlLm15YWxsb2Mg PSBhbGxvYzsKLQkJCQkvKiBkbyBub3csIGJlZm9yZSByZWR1Y2luZyBzeW1ib2xzICovCi0JCQkJ YWxsb2NhdGVfc2VjdGlvbnMoJmRsX3N0YXRlKTsKLQkJCX0gZWxzZQotCQkJCWRsb2FkX2Vycm9y KCZkbF9zdGF0ZSwgaWNvbm5lY3QpOwotCQl9Ci0KLQkJaWYgKCFkbF9zdGF0ZS5kbG9hZF9lcnJj b3VudCkgewotCQkJLyogZml4IHVwIGVudHJ5IHBvaW50IGFkZHJlc3MgKi8KLQkJCXVuc2lnbmVk IHNyZWYgPSBkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlfc2VjbiAtIDE7Ci0KLQkJCWlmIChz cmVmIDwgZGxfc3RhdGUuYWxsb2NhdGVkX3NlY25fY291bnQpCi0JCQkJZGxfc3RhdGUuZGZpbGVf aGRyLmRmX2VudHJ5cHQgKz0KLQkJCQkgICAgZGxfc3RhdGUubGRyX3NlY3Rpb25zW3NyZWZdLnJ1 bl9hZGRyOwotCi0JCQlkbG9hZF9zeW1ib2xzKCZkbF9zdGF0ZSk7Ci0JCX0KLQotCQlpbml0X21v ZHVsZV9oYW5kbGUoJmRsX3N0YXRlKTsKLQotCQkvKiBkbF9zdGF0ZS5teWlvIGlzIGVpdGhlciAw IG9yIGluaXQgYXQgdGhpcyBwb2ludC4gKi8KLQkJaWYgKGRsX3N0YXRlLm15aW8pIHsKLQkJCWlm ICgoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSAmJgotCQkJICAgIChkbF9zdGF0ZS5kZmlsZV9o ZHIuZGZfZW50cnlfc2VjbiAhPSBETl9VTkRFRikgJiYKLQkJCSAgICAoIWluaXQtPmV4ZWN1dGUo aW5pdCwKLQkJCQkJICAgIGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeXB0KSkpCi0JCQkJZGxv YWRfZXJyb3IoJmRsX3N0YXRlLCAiSW5pdC0+RXhlY3V0ZSBGYWlsZWQiKTsKLQkJCWluaXQtPnJl bGVhc2UoaW5pdCk7Ci0JCX0KLQotCQlzeW1ib2xfdGFibGVfZnJlZSgmZGxfc3RhdGUpOwotCQlz ZWN0aW9uX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKLQkJc3RyaW5nX3RhYmxlX2ZyZWUoJmRsX3N0 YXRlKTsKLQotCQlpZiAoZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKLQkJCWR5bmFtaWNfdW5s b2FkX21vZHVsZShkbF9zdGF0ZS5teWhhbmRsZSwgc3ltcywgYWxsb2MsCi0JCQkJCSAgICAgIGlu aXQpOwotCQkJZGxfc3RhdGUubXloYW5kbGUgPSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKG1oYW5k bGUpCi0JCSptaGFuZGxlID0gZGxfc3RhdGUubXloYW5kbGU7CS8qIGdpdmUgYmFjayB0aGUgaGFu ZGxlICovCi0KLQlyZXR1cm4gZGxfc3RhdGUuZGxvYWRfZXJyY291bnQ7Ci19CQkJCS8qIERMT0FE X0ZpbGUgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBkbG9hZF9oZWFkZXJz Ci0gKgotICogUGFyYW1ldGVyczoKLSAqCW5vbmUKLSAqCi0gKiBFZmZlY3Q6Ci0gKglMb2FkcyB0 aGUgRE9GRiBoZWFkZXIgYW5kIHZlcmlmeSByZWNvcmQuICBEZWFscyB3aXRoIGFueSBieXRlLW9y ZGVyCi0gKiBpc3N1ZXMgYW5kIGNoZWNrcyB0aGVtIGZvciB2YWxpZGl0eS4KLSAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLwotI2RlZmluZSBDT01CSU5FRF9IRUFERVJfU0laRSAoc2l6ZW9mKHN0cnVjdCBkb2Zm X2ZpbGVoZHJfdCkrIFwKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCkp Ci0KLXZvaWQgZGxvYWRfaGVhZGVycyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQl1 MzIgbWFwOwotCi0JLyogUmVhZCB0aGUgaGVhZGVyIGFuZCB0aGUgdmVyaWZ5IHJlY29yZCBhcyBv bmUuICBJZiB3ZSBkb24ndCBnZXQgaXQKLQkgICBhbGwsIHdlJ3JlIGRvbmUgKi8KLQlpZiAoZGx0 aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sICZkbHRoaXMtPmRmaWxlX2hkciwK LQkJCQkgICAgICBDT01CSU5FRF9IRUFERVJfU0laRSkgIT0KLQkgICAgQ09NQklORURfSEVBREVS X1NJWkUpIHsKLQkJRExfRVJST1IocmVhZHN0cm0sICJGaWxlIEhlYWRlcnMiKTsKLQkJcmV0dXJu OwotCX0KLQkvKgotCSAqIFZlcmlmeSB0aGF0IHdlIGhhdmUgdGhlIGJ5dGUgb3JkZXIgb2YgdGhl IGZpbGUgY29ycmVjdC4KLQkgKiBJZiBub3QsIG11c3QgZml4IGl0IGJlZm9yZSB3ZSBjYW4gY29u dGludWUKLQkgKi8KLQltYXAgPSBSRU9SREVSX01BUChkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRl X3Jlc2h1ZmZsZSk7Ci0JaWYgKG1hcCAhPSBSRU9SREVSX01BUChCWVRFX1JFU0hVRkZMRV9WQUxV RSkpIHsKLQkJLyogaW5wdXQgaXMgZWl0aGVyIGJ5dGUtc2h1ZmZsZWQgb3IgYmFkICovCi0JCWlm ICgobWFwICYgMHhGQ0ZDRkNGQykgPT0gMCkgewkvKiBubyBvYnZpb3VzbHkgYm9ndXMgYml0cyAq LwotCQkJZGxvYWRfcmVvcmRlcigmZGx0aGlzLT5kZmlsZV9oZHIsIENPTUJJTkVEX0hFQURFUl9T SVpFLAotCQkJCSAgICAgIG1hcCk7Ci0JCX0KLQkJaWYgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2J5 dGVfcmVzaHVmZmxlICE9Ci0JCSAgICBCWVRFX1JFU0hVRkZMRV9WQUxVRSkgewotCQkJLyogZGlk bid0IGZpeCB0aGUgcHJvYmxlbSwgdGhlIGJ5dGUgc3dhcCBtYXAgaXMgYmFkICovCi0JCQlkbG9h ZF9lcnJvcihkbHRoaXMsCi0JCQkJICAgICJCYWQgYnl0ZSBzd2FwIG1hcCAiIEZNVF9VSTMyICIg aW4gaGVhZGVyIiwKLQkJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUp OwotCQkJcmV0dXJuOwotCQl9Ci0JCWRsdGhpcy0+cmVvcmRlcl9tYXAgPSBtYXA7CS8qIGtlZXAg bWFwIGZvciBmdXR1cmUgdXNlICovCi0JfQotCi0JLyoKLQkgKiBWZXJpZnkgY2hlY2tzdW0gb2Yg aGVhZGVyIGFuZCB2ZXJpZnkgcmVjb3JkCi0JICovCi0JaWYgKH5kbG9hZF9jaGVja3N1bSgmZGx0 aGlzLT5kZmlsZV9oZHIsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBkb2ZmX2ZpbGVoZHJfdCkpIHx8 Ci0JICAgIH5kbG9hZF9jaGVja3N1bSgmZGx0aGlzLT52ZXJpZnksCi0JCQkgICAgc2l6ZW9mKHN0 cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCkpKSB7Ci0JCURMX0VSUk9SKGVycl9jaGVja3N1bSwgImhl YWRlciBvciB2ZXJpZnkgcmVjb3JkIik7Ci0JCXJldHVybjsKLQl9Ci0jaWYgSE9TVF9FTkRJQU5O RVNTCi0JZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgPSBtYXA7CS8qIHB1dCBi YWNrIGZvciBsYXRlciAqLwotI2VuZGlmCi0KLQkvKiBDaGVjayBmb3IgdmFsaWQgdGFyZ2V0IElE ICovCi0JaWYgKChkbHRoaXMtPmRmaWxlX2hkci5kZl90YXJnZXRfaWQgIT0gVEFSR0VUX0lEKSAm JgotCSAgICAtKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9pZCAhPSBUTVM0NzBfSUQpKSB7 Ci0JCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCB0YXJnZXQgSUQgMHgleCBhbmQgVEFSR0VUX0lE IDB4JXgiLAotCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9pZCwgVEFSR0VUX0lE KTsKLQkJcmV0dXJuOwotCX0KLQkvKiBDaGVjayBmb3IgdmFsaWQgZmlsZSBmb3JtYXQgKi8KLQlp ZiAoKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2RvZmZfdmVyc2lvbiAhPSBET0ZGMCkpIHsKLQkJZGxv YWRfZXJyb3IoZGx0aGlzLCAiQmFkIERPRkYgdmVyc2lvbiAweCV4IiwKLQkJCSAgICBkbHRoaXMt PmRmaWxlX2hkci5kZl9kb2ZmX3ZlcnNpb24pOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBB cHBseSByZWFzb25hYmxlbmVzcyBjaGVja3MgdG8gY291bnQgZmllbGRzCi0JICovCi0JaWYgKGRs dGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplID4gTUFYX1JFQVNPTkFCTEVfU1RSSU5HVEFC KSB7Ci0JCWRsb2FkX2Vycm9yKGRsdGhpcywgIkV4Y2Vzc2l2ZSBzdHJpbmcgdGFibGUgc2l6ZSAi IEZNVF9VSTMyLAotCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKTsKLQkJ cmV0dXJuOwotCX0KLQlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2NucyA+IE1BWF9SRUFT T05BQkxFX1NFQ1RJT05TKSB7Ci0JCWRsb2FkX2Vycm9yKGRsdGhpcywgIkV4Y2Vzc2l2ZSBzZWN0 aW9uIGNvdW50IDB4JXgiLAotCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnMpOwot CQlyZXR1cm47Ci0JfQotI2lmbmRlZiBUQVJHRVRfRU5ESUFOTkVTUwotCS8qCi0JICogQ2hlY2sg dGhhdCBlbmRpYW5uZXNzIGRvZXMgbm90IGRpc2FncmVlIHdpdGggZXhwbGljaXQgc3BlY2lmaWNh dGlvbgotCSAqLwotCWlmICgoZGx0aGlzLT5kZmlsZV9oZHIuZGZfZmxhZ3MgPj4gQUxJR05fQ09G Rl9FTkRJQU5ORVNTKSAmCi0JICAgIGRsdGhpcy0+bXlvcHRpb25zICYgRU5ESUFOTkVTU19NQVNL KSB7Ci0JCWRsb2FkX2Vycm9yKGRsdGhpcywKLQkJCSAgICAiSW5wdXQgZW5kaWFubmVzcyBkaXNh Z3JlZXMgd2l0aCBzcGVjaWZpZWQgb3B0aW9uIik7Ci0JCXJldHVybjsKLQl9Ci0JZGx0aGlzLT5i aWdfZV90YXJnZXQgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9mbGFncyAmIERGX0JJRzsKLSNlbmRp ZgotCi19CQkJCS8qIGRsb2FkX2hlYWRlcnMgKi8KLQotLyoJQ09GRiBTZWN0aW9uIFByb2Nlc3Np bmcKLSAqCi0gKglDT0ZGIHNlY3Rpb25zIGFyZSByZWFkIGluIGFuZCByZXRhaW5lZCBpbnRhY3Qu ICBFYWNoIHJlY29yZCBpcyBlbWJlZGRlZAotICogCWluIGEgbmV3IHN0cnVjdHVyZSB0aGF0IHJl Y29yZHMgdGhlIHVwZGF0ZWQgbG9hZCBhbmQKLSAqIAlydW4gYWRkcmVzc2VzIG9mIHRoZSBzZWN0 aW9uICovCi0KLXN0YXRpYyBjb25zdCBjaGFyIHNlY25fZXJyaWRbXSA9IHsgInNlY3Rpb24iIH07 Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCi0gKiBQcm9jZWR1cmUgZGxvYWRfc2VjdGlvbnMKLSAqCi0g KiBQYXJhbWV0ZXJzOgotICoJbm9uZQotICoKLSAqIEVmZmVjdDoKLSAqCUxvYWRzIHRoZSBzZWN0 aW9uIHJlY29yZHMgaW50byBhbiBpbnRlcm5hbCB0YWJsZS4KLSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwot dm9pZCBkbG9hZF9zZWN0aW9ucyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlzMTYg c2l6OwotCXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzaHA7Ci0JdW5zaWduZWQgbnNlY3MgPSBkbHRo aXMtPmRmaWxlX2hkci5kZl9ub19zY25zOwotCi0JLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBE T0ZGIHNlY3Rpb24gcmVjb3JkcyAqLwotCXNpeiA9IG5zZWNzICogc2l6ZW9mKHN0cnVjdCBkb2Zm X3Njbmhkcl90KTsKLQlzaHAgPQotCSAgICAoc3RydWN0IGRvZmZfc2NuaGRyX3QgKilkbHRoaXMt Pm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAotCQkJCQkJCQkgIHNpeik7Ci0J aWYgKCFzaHApIHsJCS8qIG5vdCBlbm91Z2ggc3RvcmFnZSAqLwotCQlETF9FUlJPUihlcnJfYWxs b2MsIHNpeik7Ci0JCXJldHVybjsKLQl9Ci0JZGx0aGlzLT5zZWN0X2hkcnMgPSBzaHA7Ci0KLQkv KiByZWFkIGluIHRoZSBzZWN0aW9uIHJlY29yZHMgKi8KLQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFk X2J1ZmZlcihkbHRoaXMtPnN0cm0sIHNocCwgc2l6KSAhPSBzaXopIHsKLQkJRExfRVJST1IocmVh ZHN0cm0sIHNlY25fZXJyaWQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogaWYgd2UgbmVlZCB0byBm aXggdXAgYnl0ZSBvcmRlciwgZG8gaXQgbm93ICovCi0JaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXAp Ci0JCWRsb2FkX3Jlb3JkZXIoc2hwLCBzaXosIGRsdGhpcy0+cmVvcmRlcl9tYXApOwotCi0JLyog Y2hlY2sgZm9yIHZhbGlkaXR5ICovCi0JaWYgKH5kbG9hZF9jaGVja3N1bShkbHRoaXMtPnNlY3Rf aGRycywgc2l6KSAhPQotCSAgICBkbHRoaXMtPnZlcmlmeS5kdl9zY25fcmVjX2NoZWNrc3VtKSB7 Ci0JCURMX0VSUk9SKGVycl9jaGVja3N1bSwgc2Vjbl9lcnJpZCk7Ci0JCXJldHVybjsKLQl9Ci0K LX0JCQkJLyogZGxvYWRfc2VjdGlvbnMgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQ cm9jZWR1cmUgYWxsb2NhdGVfc2VjdGlvbnMKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJYWxsb2MJ dGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3IgY2xhc3MKLSAqCi0gKiBFZmZlY3Q6Ci0gKglBc3NpZ25z IG5ldyAodGFyZ2V0KSBhZGRyZXNzZXMgZm9yIHNlY3Rpb25zCi0gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLwotc3RhdGljIHZvaWQgYWxsb2NhdGVfc2VjdGlvbnMoc3RydWN0IGRsb2FkX3N0YXRlICpk bHRoaXMpCi17Ci0JdTE2IGN1cnJfc2VjdCwgbnNlY3MsIHNpejsKLQlzdHJ1Y3QgZG9mZl9zY25o ZHJfdCAqc2hwOwotCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICphc2VjczsKLQlzdHJ1Y3QgbXlf aGFuZGxlICpobmRsOwotCi0JbnNlY3MgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOwot CWlmICghbnNlY3MpCi0JCXJldHVybjsKLQlpZiAoKGRsdGhpcy0+bXlhbGxvYyA9PSBOVUxMKSAm JgotCSAgICAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfdGFyZ2V0X3NjbnMgPiAwKSkgewotCQlETF9F UlJPUigiQXJnIDMgKGFsbG9jKSByZXF1aXJlZCBidXQgTlVMTCIsIDApOwotCQlyZXR1cm47Ci0J fQotCS8qCi0JICogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBtb2R1bGUgaGFuZGxlLCB3aGljaCB3 ZSB3aWxsIGtlZXAgZm9yIHVubG9hZAotCSAqIHB1cnBvc2VzIGluY2x1ZGUgYW4gYWRkaXRpb25h bCBzZWN0aW9uIHN0b3JlIGZvciBhbiBhdXRvLWdlbmVyYXRlZAotCSAqIHRyYW1wb2xpbmUgc2Vj dGlvbiBpbiBjYXNlIHdlIG5lZWQgaXQuCi0JICovCi0Jc2l6ID0gKGRsdGhpcy0+ZGZpbGVfaGRy LmRmX3RhcmdldF9zY25zICsgMSkgKgotCSAgICBzaXplb2Yoc3RydWN0IGxkcl9zZWN0aW9uX2lu Zm8pICsgTVlfSEFORExFX1NJWkU7Ci0KLQlobmRsID0KLQkgICAgKHN0cnVjdCBteV9oYW5kbGUg KilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAotCQkJCQkJCSAg ICAgIHNpeik7Ci0JaWYgKCFobmRsKSB7CQkvKiBub3QgZW5vdWdoIHN0b3JhZ2UgKi8KLQkJRExf RVJST1IoZXJyX2FsbG9jLCBzaXopOwotCQlyZXR1cm47Ci0JfQotCS8qIGluaXRpYWxpemUgdGhl IGhhbmRsZSBoZWFkZXIgKi8KLQlobmRsLT5kbS5uZXh0ID0gaG5kbC0+ZG0ucHJldiA9IGhuZGw7 CS8qIGNpcmN1bGFyIGxpc3QgKi8KLQlobmRsLT5kbS5yb290ID0gTlVMTDsKLQlobmRsLT5kbS5k YnRoaXMgPSAwOwotCWRsdGhpcy0+bXloYW5kbGUgPSBobmRsOwkvKiBzYXZlIGF3YXkgZm9yIHJl dHVybiAqLwotCS8qIHBvaW50ZXIgdG8gdGhlIHNlY3Rpb24gbGlzdCBvZiBhbGxvY2F0ZWQgc2Vj dGlvbnMgKi8KLQlkbHRoaXMtPmxkcl9zZWN0aW9ucyA9IGFzZWNzID0gaG5kbC0+c2VjbnM7Ci0J LyogKiBJbnNlcnQgbmFtZXMgaW50byBhbGwgc2VjdGlvbnMsIG1ha2UgY29waWVzIG9mCi0JICAg dGhlIHNlY3Rpb25zIHdlIGFsbG9jYXRlICovCi0Jc2hwID0gZGx0aGlzLT5zZWN0X2hkcnM7Ci0J Zm9yIChjdXJyX3NlY3QgPSAwOyBjdXJyX3NlY3QgPCBuc2VjczsgY3Vycl9zZWN0KyspIHsKLQkJ dTMyIHNvZmZzZXQgPSBzaHAtPmRzX29mZnNldDsKLSNpZiBCSVRTX1BFUl9BVSA8PSBCSVRTX1BF Ul9CWVRFCi0JCS8qIGF0dGVtcHQgdG8gaW5zZXJ0IHRoZSBuYW1lIG9mIHRoaXMgc2VjdGlvbiAq LwotCQlpZiAoc29mZnNldCA8IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKQotCQkJ KChzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKXNocCktPm5hbWUgPQotCQkJCWRsdGhpcy0+c3Ry X2hlYWQgKyBzb2Zmc2V0OwotCQllbHNlIHsKLQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCBu YW1lIG9mZnNldCBpbiBzZWN0aW9uICVkIiwKLQkJCQkgICAgY3Vycl9zZWN0KTsKLQkJCSgoc3Ry dWN0IGxkcl9zZWN0aW9uX2luZm8gKilzaHApLT5uYW1lID0gTlVMTDsKLQkJfQotI2VuZGlmCi0J CS8qIGFsbG9jYXRlIHRhcmdldCBzdG9yYWdlIGZvciBzZWN0aW9ucyB0aGF0IHJlcXVpcmUgaXQg Ki8KLQkJaWYgKGRzX25lZWRzX2FsbG9jYXRpb24oc2hwKSkgewotCQkJKmFzZWNzID0gKihzdHJ1 Y3QgbGRyX3NlY3Rpb25faW5mbyAqKXNocDsKLQkJCWFzZWNzLT5jb250ZXh0ID0gMDsJLyogemVy byB0aGUgY29udGV4dCBmaWVsZCAqLwotI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQot CQkJYXNlY3MtPm5hbWUgPSB1bnBhY2tfbmFtZShkbHRoaXMsIHNvZmZzZXQpOwotCQkJZGx0aGlz LT5kZWJ1Z19zdHJpbmdfc2l6ZSA9IHNvZmZzZXQgKyBkbHRoaXMtPnRlbXBfbGVuOwotI2Vsc2UK LQkJCWRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgPSBzb2Zmc2V0OwotI2VuZGlmCi0JCQlpZiAo ZGx0aGlzLT5teWFsbG9jICE9IE5VTEwpIHsKLQkJCQlpZiAoIWRsdGhpcy0+bXlhbGxvYy0+Ci0J CQkJICAgIGRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlhbGxvYywgYXNlY3MsCi0JCQkJCQkgICBk c19hbGlnbm1lbnQoYXNlY3MtPnR5cGUpKSkgewotCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsIHRn dGFsbG9jLAotCQkJCQkJICAgIGFzZWNzLT5uYW1lLCBhc2Vjcy0+c2l6ZSk7Ci0JCQkJCXJldHVy bjsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBrZWVwIGFkZHJlc3MgZGVsdGFzIGluIG9yaWdpbmFsIHNl Y3Rpb24gdGFibGUgKi8KLQkJCXNocC0+ZHNfdmFkZHIgPSBhc2Vjcy0+bG9hZF9hZGRyIC0gc2hw LT5kc192YWRkcjsKLQkJCXNocC0+ZHNfcGFkZHIgPSBhc2Vjcy0+cnVuX2FkZHIgLSBzaHAtPmRz X3BhZGRyOwotCQkJZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCArPSAxOwotCQl9CQkvKiBh bGxvY2F0ZSB0YXJnZXQgc3RvcmFnZSAqLwotCQlzaHAgKz0gMTsKLQkJYXNlY3MgKz0gMTsKLQl9 Ci0jaWYgQklUU19QRVJfQVUgPD0gQklUU19QRVJfQllURQotCWRsdGhpcy0+ZGVidWdfc3RyaW5n X3NpemUgKz0KLQkgICAgc3RybGVuKGRsdGhpcy0+c3RyX2hlYWQgKyBkbHRoaXMtPmRlYnVnX3N0 cmluZ19zaXplKSArIDE7Ci0jZW5kaWYKLX0JCQkJLyogYWxsb2NhdGUgc2VjdGlvbnMgKi8KLQot LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBzZWN0aW9uX3RhYmxlX2ZyZWUKLSAqCi0g KiBQYXJhbWV0ZXJzOgotICoJbm9uZQotICoKLSAqIEVmZmVjdDoKLSAqCUZyZWVzIGFueSBzdGF0 ZSB1c2VkIGJ5IHRoZSBzeW1ib2wgdGFibGUuCi0gKgotICogV0FSTklORzoKLSAqCVRoaXMgcm91 dGluZSBpcyBub3QgYWxsb3dlZCB0byBkZWNsYXJlIGVycm9ycyEKLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq Lwotc3RhdGljIHZvaWQgc2VjdGlvbl90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0 aGlzKQotewotCXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzaHA7Ci0KLQlzaHAgPSBkbHRoaXMtPnNl Y3RfaGRyczsKLQlpZiAoc2hwKQotCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRs dGhpcy0+bXlzeW0sIHNocCk7Ci0KLX0JCQkJLyogc2VjdGlvbl90YWJsZV9mcmVlICovCi0KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCi0gKiBQcm9jZWR1cmUgZGxvYWRfc3RyaW5ncwotICoKLSAqIFBhcmFt ZXRlcnM6Ci0gKiAgc2VjX25hbWVzX29ubHkgICBJZiB0cnVlIG9ubHkgcmVhZCBpbiB0aGUgInNl Y3Rpb24gbmFtZXMiCi0gKgkJICAgICBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGFibGUKLSAqCi0g KiBFZmZlY3Q6Ci0gKglMb2FkcyB0aGUgRE9GRiBzdHJpbmcgdGFibGUgaW50byBtZW1vcnkuIERP RkYga2VlcHMgYWxsIHN0cmluZ3MgaW4gYQotICogYmlnIHVuc29ydGVkIGFycmF5LiAgV2UganVz dCByZWFkIHRoYXQgYXJyYXkgaW50byBtZW1vcnkgaW4gYnVsay4KLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq Lwotc3RhdGljIGNvbnN0IGNoYXIgc3RyaW5ndGJsW10gPSB7ICJzdHJpbmcgdGFibGUiIH07Ci0K LXZvaWQgZGxvYWRfc3RyaW5ncyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgYm9vbCBzZWNf bmFtZXNfb25seSkKLXsKLQl1MzIgc3NpejsKLQljaGFyICpzdHJidWY7Ci0KLQlpZiAoc2VjX25h bWVzX29ubHkpIHsKLQkJc3NpeiA9IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOCi0JCQkJICAgIChk bHRoaXMtPmRmaWxlX2hkci5kZl9zY25fbmFtZV9zaXplKSk7Ci0JfSBlbHNlIHsKLQkJc3NpeiA9 IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOCi0JCQkJICAgIChkbHRoaXMtPmRmaWxlX2hkci5kZl9z dHJ0YWJfc2l6ZSkpOwotCX0KLQlpZiAoc3NpeiA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBnZXQg c29tZSBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgdGFibGUgKi8KLSNpZiBCSVRTX1BFUl9BVSA+IEJJ VFNfUEVSX0JZVEUKLQlzdHJidWYgPSAoY2hhciAqKWRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9j YXRlKGRsdGhpcy0+bXlzeW0sIHNzaXogKwotCQkJCQkJICAgICAgIGRsdGhpcy0+ZGZpbGVfaGRy LgotCQkJCQkJICAgICAgIGRmX21heF9zdHJfbGVuKTsKLSNlbHNlCi0Jc3RyYnVmID0gKGNoYXIg KilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBzc2l6KTsKLSNl bmRpZgotCWlmIChzdHJidWYgPT0gTlVMTCkgewotCQlETF9FUlJPUihlcnJfYWxsb2MsIHNzaXop OwotCQlyZXR1cm47Ci0JfQotCWRsdGhpcy0+c3RyX2hlYWQgPSBzdHJidWY7Ci0jaWYgQklUU19Q RVJfQVUgPiBCSVRTX1BFUl9CWVRFCi0JZGx0aGlzLT5zdHJfdGVtcCA9IHN0cmJ1ZiArIHNzaXo7 Ci0jZW5kaWYKLQkvKiByZWFkIGluIHRoZSBzdHJpbmdzIGFuZCB2ZXJpZnkgdGhlbSAqLwotCWlm ICgodW5zaWduZWQpKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIoZGx0aGlzLT5zdHJtLCBzdHJi dWYsCi0JCQkJCQkgc3NpeikpICE9IHNzaXopIHsKLQkJRExfRVJST1IocmVhZHN0cm0sIHN0cmlu Z3RibCk7Ci0JfQotCS8qIGlmIHdlIG5lZWQgdG8gZml4IHVwIGJ5dGUgb3JkZXIsIGRvIGl0IG5v dyAqLwotI2lmbmRlZiBfQklHX0VORElBTgotCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKQotCQlk bG9hZF9yZW9yZGVyKHN0cmJ1Ziwgc3NpeiwgZGx0aGlzLT5yZW9yZGVyX21hcCk7Ci0KLQlpZiAo KCFzZWNfbmFtZXNfb25seSkgJiYgKH5kbG9hZF9jaGVja3N1bShzdHJidWYsIHNzaXopICE9Ci0J CQkJICBkbHRoaXMtPnZlcmlmeS5kdl9zdHJfdGFiX2NoZWNrc3VtKSkgewotCQlETF9FUlJPUihl cnJfY2hlY2tzdW0sIHN0cmluZ3RibCk7Ci0JfQotI2Vsc2UKLQlpZiAoZGx0aGlzLT5kZmlsZV9o ZHIuZGZfYnl0ZV9yZXNodWZmbGUgIT0KLQkgICAgSE9TVF9CWVRFX09SREVSKFJFT1JERVJfTUFQ KEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkpIHsKLQkJLyogcHV0IHN0cmluZ3MgaW4gYmlnLWVuZGlh biBvcmRlciwgbm90IGluIFBDIG9yZGVyICovCi0JCWRsb2FkX3Jlb3JkZXIoc3RyYnVmLCBzc2l6 LAotCQkJICAgICAgSE9TVF9CWVRFX09SREVSKGRsdGhpcy0+Ci0JCQkJCSAgICAgIGRmaWxlX2hk ci5kZl9ieXRlX3Jlc2h1ZmZsZSkpOwotCX0KLQlpZiAoKCFzZWNfbmFtZXNfb25seSkgJiYgKH5k bG9hZF9yZXZlcnNlX2NoZWNrc3VtKHN0cmJ1Ziwgc3NpeikgIT0KLQkJCQkgIGRsdGhpcy0+dmVy aWZ5LmR2X3N0cl90YWJfY2hlY2tzdW0pKSB7Ci0JCURMX0VSUk9SKGVycl9jaGVja3N1bSwgc3Ry aW5ndGJsKTsKLQl9Ci0jZW5kaWYKLX0JCQkJLyogZGxvYWRfc3RyaW5ncyAqLwotCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotICogUHJvY2VkdXJlIHN0cmluZ190YWJsZV9mcmVlCi0gKgotICogUGFyYW1l dGVyczoKLSAqCW5vbmUKLSAqCi0gKiBFZmZlY3Q6Ci0gKglGcmVlcyBhbnkgc3RhdGUgdXNlZCBi eSB0aGUgc3RyaW5nIHRhYmxlLgotICoKLSAqIFdBUk5JTkc6Ci0gKglUaGlzIHJvdXRpbmUgaXMg bm90IGFsbG93ZWQgdG8gZGVjbGFyZSBlcnJvcnMhCi0gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1zdGF0 aWMgdm9pZCBzdHJpbmdfdGFibGVfZnJlZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsK LQlpZiAoZGx0aGlzLT5zdHJfaGVhZCkKLQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0 ZShkbHRoaXMtPm15c3ltLAotCQkJCQkJZGx0aGlzLT5zdHJfaGVhZCk7Ci0KLX0JCQkJLyogc3Ry aW5nX3RhYmxlX2ZyZWUgKi8KLQotLyoKLSAqIFN5bWJvbCBUYWJsZSBNYWludGVuYW5jZSBGdW5j dGlvbnMKLSAqCi0gKiBDT0ZGIHN5bWJvbHMgYXJlIHJlYWQgYnkgZGxvYWRfc3ltYm9scygpLCB3 aGljaCBpcyBjYWxsZWQgYWZ0ZXIKLSAqIHNlY3Rpb25zIGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBT eW1ib2xzIHdoaWNoIG1pZ2h0IGJlIHVzZWQgaW4KLSAqIHJlbG9jYXRpb24gKGllLCBub3QgZGVi dWcgaW5mbykgYXJlIHJldGFpbmVkIGluIGFuIGludGVybmFsIHRlbXBvcmFyeQotICogY29tcHJl c3NlZCB0YWJsZSAodHlwZSBsb2NhbF9zeW1ib2wpLiBBIHBhcnRpY3VsYXIgc3ltYm9sIGlzIHJl Y292ZXJlZAotICogYnkgaW5kZXggYnkgY2FsbGluZyBkbG9hZF9maW5kX3N5bWJvbCgpLiAgZGxv YWRfZmluZF9zeW1ib2wKLSAqIHJlY29uc3RydWN0cyBhIG1vcmUgZXhwbGljaXQgcmVwcmVzZW50 YXRpb24gKHR5cGUgU0xPVFZFQykgd2hpY2ggaXMKLSAqIHVzZWQgYnkgcmVsb2MuYwotICovCi0v KiByZWFsIHNpemUgb2YgZGVidWcgaGVhZGVyICovCi0jZGVmaW5lIERCR19IRFJfU0laRSAoc2l6 ZW9mKHN0cnVjdCBkbGxfbW9kdWxlKSAtIHNpemVvZihzdHJ1Y3QgZGxsX3NlY3QpKQotCi1zdGF0 aWMgY29uc3QgY2hhciBzeW1fZXJyaWRbXSA9IHsgInN5bWJvbCIgfTsKLQotLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0gKiBQcm9jZWR1cmUgZGxvYWRfc3ltYm9scwotICoKLSAqIFBhcmFtZXRlcnM6Ci0g Kglub25lCi0gKgotICogRWZmZWN0OgotICoJUmVhZHMgaW4gc3ltYm9scyBhbmQgcmV0YWlucyBv bmVzIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGZvciByZWxvY2F0aW9uCi0gKiBwdXJwb3Nlcy4KLSAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLwotLyogc2l6ZSBvZiBzeW1ib2wgYnVmZmVyIG5vIGJpZ2dlciB0aGFu IHRhcmdldCBkYXRhIGJ1ZmZlciwgdG8gbGltaXQgc3RhY2sKLSAqIHVzYWdlICovCi0jZGVmaW5l IE1ZX1NZTV9CVUZfU0laIChCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpL1wKLQkJCXNp emVvZihzdHJ1Y3QgZG9mZl9zeW1lbnRfdCkpCi0KLXN0YXRpYyB2b2lkIGRsb2FkX3N5bWJvbHMo c3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCi17Ci0JdTMyIHN5bV9jb3VudCwgc2l6LCBkc2l6 LCBzeW1ib2xzX2xlZnQ7Ci0JdTMyIGNoZWNrczsKLQlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpzcDsK LQlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKnN5bXA7Ci0Jc3RydWN0IGR5bmxvYWRfc3ltYm9sICpu ZXdzeW07Ci0Jc3RydWN0IGRvZmZfc3ltZW50X3QgKm15X3N5bV9idWY7Ci0KLQlzeW1fY291bnQg PSBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zeW1zOwotCWlmIChzeW1fY291bnQgPT0gMCkKLQkJ cmV0dXJuOwotCi0JLyoKLQkgKiBXZSBrZWVwIGEgbG9jYWwgc3ltYm9sIHRhYmxlIGZvciBhbGwg b2YgdGhlIHN5bWJvbHMgaW4gdGhlIGlucHV0LgotCSAqIFRoaXMgdGFibGUgY29udGFpbnMgb25s eSBzZWN0aW9uICYgdmFsdWUgaW5mbywgYXMgd2UgZG8gbm90IGhhdmUKLQkgKiB0byBkbyBhbnkg bmFtZSBwcm9jZXNzaW5nIGZvciBsb2NhbHMuICBXZSByZXVzZSB0aGlzIHN0b3JhZ2UKLQkgKiBh cyBhIHRlbXBvcmFyeSBmb3IgLmRsbHZpZXcgcmVjb3JkIGNvbnN0cnVjdGlvbi4KLQkgKiBBbGxv Y2F0ZSBzdG9yYWdlIGZvciB0aGUgd2hvbGUgdGFibGUuICBBZGQgMSB0byB0aGUgc2VjdGlvbiBj b3VudAotCSAqIGluIGNhc2UgYSB0cmFtcG9saW5lIHNlY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg YXMgd2VsbCBhcyB0aGUKLQkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBz byBETExWaWV3IGRvZXNuJ3QgZ2V0IGxvc3QuCi0JICovCi0KLQlzaXogPSBzeW1fY291bnQgKiBz aXplb2Yoc3RydWN0IGxvY2FsX3N5bWJvbCk7Ci0JZHNpeiA9IERCR19IRFJfU0laRSArCi0JICAg IChzaXplb2Yoc3RydWN0IGRsbF9zZWN0KSAqIGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQp ICsKLQkgICAgQllURV9UT19IT1NUX1JPVU5EKGRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgKyAx KTsKLQlpZiAoZHNpeiA+IHNpeikKLQkJc2l6ID0gZHNpejsJLyogbGFyZ2VyIG9mIHN5bWJvbHMg YW5kIC5kbGx2aWV3IHRlbXAgKi8KLQlzcCA9IChzdHJ1Y3QgbG9jYWxfc3ltYm9sICopZGx0aGlz LT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJCQkJCQkJICBzaXopOwot CWlmICghc3ApIHsKLQkJRExfRVJST1IoZXJyX2FsbG9jLCBzaXopOwotCQlyZXR1cm47Ci0JfQot CWRsdGhpcy0+bG9jYWxfc3ltdGFiID0gc3A7Ci0JLyogUmVhZCB0aGUgc3ltYm9scyBpbiB0aGUg aW5wdXQsIHN0b3JlIHRoZW0gaW4gdGhlIHRhYmxlLCBhbmQgcG9zdCBhbnkKLQkgKiBnbG9iYWxz IHRvIHRoZSBnbG9iYWwgc3ltYm9sIHRhYmxlLiAgSW4gdGhlIHByb2Nlc3MsIGV4dGVybmFscwot CSBiZWNvbWUgZGVmaW5lZCBmcm9tIHRoZSBnbG9iYWwgc3ltYm9sIHRhYmxlICovCi0JY2hlY2tz ID0gZGx0aGlzLT52ZXJpZnkuZHZfc3ltX3RhYl9jaGVja3N1bTsKLQlzeW1ib2xzX2xlZnQgPSBz eW1fY291bnQ7Ci0KLQlteV9zeW1fYnVmID0ga3phbGxvYyhzaXplb2YoKm15X3N5bV9idWYpICog TVlfU1lNX0JVRl9TSVosIEdGUF9LRVJORUwpOwotCWlmICghbXlfc3ltX2J1ZikKLQkJcmV0dXJu OwotCi0JZG8gewkJCS8qIHJlYWQgYWxsIHN5bWJvbHMgKi8KLQkJY2hhciAqc25hbWU7Ci0JCXUz MiB2YWw7Ci0JCXMzMiBkZWx0YTsKLQkJc3RydWN0IGRvZmZfc3ltZW50X3QgKmlucHV0X3N5bTsK LQkJdW5zaWduZWQgc3ltc19pbl9idWY7Ci0KLQkJaW5wdXRfc3ltID0gbXlfc3ltX2J1ZjsKLQkJ c3ltc19pbl9idWYgPSBzeW1ib2xzX2xlZnQgPiBNWV9TWU1fQlVGX1NJWiA/Ci0JCSAgICBNWV9T WU1fQlVGX1NJWiA6IHN5bWJvbHNfbGVmdDsKLQkJc2l6ID0gc3ltc19pbl9idWYgKiBzaXplb2Yo c3RydWN0IGRvZmZfc3ltZW50X3QpOwotCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihk bHRoaXMtPnN0cm0sIGlucHV0X3N5bSwgc2l6KSAhPQotCQkgICAgc2l6KSB7Ci0JCQlETF9FUlJP UihyZWFkc3RybSwgc3ltX2VycmlkKTsKLQkJCWdvdG8gZnJlZV9zeW1fYnVmOwotCQl9Ci0JCWlm IChkbHRoaXMtPnJlb3JkZXJfbWFwKQotCQkJZGxvYWRfcmVvcmRlcihpbnB1dF9zeW0sIHNpeiwg ZGx0aGlzLT5yZW9yZGVyX21hcCk7Ci0KLQkJY2hlY2tzICs9IGRsb2FkX2NoZWNrc3VtKGlucHV0 X3N5bSwgc2l6KTsKLQkJZG8gewkJLyogcHJvY2VzcyBzeW1ib2xzIGluIGJ1ZmZlciAqLwotCQkJ c3ltYm9sc19sZWZ0IC09IDE7Ci0JCQkvKiBhdHRlbXB0IHRvIGRlcml2ZSB0aGUgbmFtZSBvZiB0 aGlzIHN5bWJvbCAqLwotCQkJc25hbWUgPSBOVUxMOwotCQkJaWYgKGlucHV0X3N5bS0+ZG5fb2Zm c2V0ID4gMCkgewotI2lmIEJJVFNfUEVSX0FVIDw9IEJJVFNfUEVSX0JZVEUKLQkJCQlpZiAoKHUz MikgaW5wdXRfc3ltLT5kbl9vZmZzZXQgPAotCQkJCSAgICBkbHRoaXMtPmRmaWxlX2hkci5kZl9z dHJ0YWJfc2l6ZSkKLQkJCQkJc25hbWUgPSBkbHRoaXMtPnN0cl9oZWFkICsKLQkJCQkJICAgIEJZ VEVfVE9fSE9TVChpbnB1dF9zeW0tPmRuX29mZnNldCk7Ci0JCQkJZWxzZQotCQkJCQlkbG9hZF9l cnJvcihkbHRoaXMsCi0JCQkJCQkgICAgIkJhZCBuYW1lIG9mZnNldCBpbiBzeW1ib2wgIgotCQkJ CQkJICAgICIgJWQiLCBzeW1ib2xzX2xlZnQpOwotI2Vsc2UKLQkJCQlzbmFtZSA9IHVucGFja19u YW1lKGRsdGhpcywKLQkJCQkJCSAgICBpbnB1dF9zeW0tPmRuX29mZnNldCk7Ci0jZW5kaWYKLQkJ CX0KLQkJCXZhbCA9IGlucHV0X3N5bS0+ZG5fdmFsdWU7Ci0JCQlkZWx0YSA9IDA7Ci0JCQlzcC0+ c2NsYXNzID0gaW5wdXRfc3ltLT5kbl9zY2xhc3M7Ci0JCQlzcC0+c2Vjbm4gPSBpbnB1dF9zeW0t PmRuX3NjbnVtOwotCQkJLyogaWYgdGhpcyBpcyBhbiB1bmRlZmluZWQgc3ltYm9sLAotCQkJICog ZGVmaW5lIGl0IChvciBmYWlsKSBub3cgKi8KLQkJCWlmIChzcC0+c2Vjbm4gPT0gRE5fVU5ERUYp IHsKLQkJCQkvKiBwb2ludGxlc3MgZm9yIHN0YXRpYyB1bmRlZmluZWQgKi8KLQkJCQlpZiAoaW5w dXRfc3ltLT5kbl9zY2xhc3MgIT0gRE5fRVhUKQotCQkJCQlnb3RvIGxvb3BfY29udDsKLQotCQkJ CS8qIHRyeSB0byBkZWZpbmUgc3ltYm9sIGZyb20gcHJldmlvdXNseQotCQkJCSAqIGxvYWRlZCBp bWFnZXMgKi8KLQkJCQlzeW1wID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2wK LQkJCQkgICAgKGRsdGhpcy0+bXlzeW0sIHNuYW1lKTsKLQkJCQlpZiAoIXN5bXApIHsKLQkJCQkJ RExfRVJST1IKLQkJCQkJICAgICgiVW5kZWZpbmVkIGV4dGVybmFsIHN5bWJvbCAlcyIsCi0JCQkJ CSAgICAgc25hbWUpOwotCQkJCQlnb3RvIGxvb3BfY29udDsKLQkJCQl9Ci0JCQkJdmFsID0gZGVs dGEgPSBzeW1wLT52YWx1ZTsKLSNpZmRlZiBFTkFCTEVfVFJBTVBfREVCVUcKLQkJCQlkbG9hZF9z eW1zX2Vycm9yKGRsdGhpcy0+bXlzeW0sCi0JCQkJCQkgIj09PT4gZXh0IHN5bSBbJXNdIGF0ICV4 IiwKLQkJCQkJCSBzbmFtZSwgdmFsKTsKLSNlbmRpZgotCi0JCQkJZ290byBsb29wX2NvbnQ7Ci0J CQl9Ci0JCQkvKiBzeW1ib2wgZGVmaW5lZCBieSB0aGlzIG1vZHVsZSAqLwotCQkJaWYgKHNwLT5z ZWNubiA+IDApIHsKLQkJCQkvKiBzeW1ib2wgcmVmZXJlbmNlcyBhIHNlY3Rpb24gKi8KLQkJCQlp ZiAoKHVuc2lnbmVkKXNwLT5zZWNubiA8PQotCQkJCSAgICBkbHRoaXMtPmFsbG9jYXRlZF9zZWNu X2NvdW50KSB7Ci0JCQkJCS8qIHNlY3Rpb24gd2FzIGFsbG9jYXRlZCAqLwotCQkJCQlzdHJ1Y3Qg ZG9mZl9zY25oZHJfdCAqc3JlZnAgPQotCQkJCQkgICAgJmRsdGhpcy0+c2VjdF9oZHJzW3NwLT5z ZWNubiAtIDFdOwotCi0JCQkJCWlmIChpbnB1dF9zeW0tPmRuX3NjbGFzcyA9PQotCQkJCQkgICAg RE5fU1RBVExBQiB8fAotCQkJCQkgICAgaW5wdXRfc3ltLT5kbl9zY2xhc3MgPT0gRE5fRVhUTEFC KSB7Ci0JCQkJCQkvKiBsb2FkICovCi0JCQkJCQlkZWx0YSA9IHNyZWZwLT5kc192YWRkcjsKLQkJ CQkJfSBlbHNlIHsKLQkJCQkJCS8qIHJ1biAqLwotCQkJCQkJZGVsdGEgPSBzcmVmcC0+ZHNfcGFk ZHI7Ci0JCQkJCX0KLQkJCQkJdmFsICs9IGRlbHRhOwotCQkJCX0KLQkJCQlnb3RvIGxvb3BfaXRy OwotCQkJfQotCQkJLyogVGhpcyBzeW1ib2wgaXMgYW4gYWJzb2x1dGUgc3ltYm9sICovCi0JCQlp ZiAoc3AtPnNlY25uID09IEROX0FCUyAmJiAoKHNwLT5zY2xhc3MgPT0gRE5fRVhUKSB8fAotCQkJ CQkJICAgIChzcC0+c2NsYXNzID09Ci0JCQkJCQkgICAgIEROX0VYVExBQikpKSB7Ci0JCQkJc3lt cCA9Ci0JCQkJICAgIGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdfc3ltYm9sKGRsdGhpcy0+ Ci0JCQkJCQkJCQlteXN5bSwKLQkJCQkJCQkJCXNuYW1lKTsKLQkJCQlpZiAoIXN5bXApCi0JCQkJ CWdvdG8gbG9vcF9pdHI7Ci0JCQkJLyogVGhpcyBhYnNvbHV0ZSBzeW1ib2wgaXMgYWxyZWFkeSBk ZWZpbmVkLiAqLwotCQkJCWlmIChzeW1wLT52YWx1ZSA9PSBpbnB1dF9zeW0tPmRuX3ZhbHVlKSB7 Ci0JCQkJCS8qIElmIHN5bWJvbCB2YWx1ZXMgYXJlIGVxdWFsLCBjb250aW51ZQotCQkJCQkgKiBi dXQgZG9uJ3QgYWRkIHRvIHRoZSBnbG9iYWwgc3ltYm9sCi0JCQkJCSAqIHRhYmxlICovCi0JCQkJ CXNwLT52YWx1ZSA9IHZhbDsKLQkJCQkJc3AtPmRlbHRhID0gZGVsdGE7Ci0JCQkJCXNwICs9IDE7 Ci0JCQkJCWlucHV0X3N5bSArPSAxOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJ CQkvKiBJZiBzeW1ib2wgdmFsdWVzIGFyZSBub3QgZXF1YWwsCi0JCQkJCSAqIHJldHVybiB3aXRo IHJlZGVmaW5pdGlvbiBlcnJvciAqLwotCQkJCQlETF9FUlJPUigiQWJzb2x1dGUgc3ltYm9sICVz IGlzICIKLQkJCQkJCSAiZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyB3aXRoICIKLQkJCQkJCSAiZGlm ZmVyZW50IHZhbHVlcyIsIHNuYW1lKTsKLQkJCQkJZ290byBmcmVlX3N5bV9idWY7Ci0JCQkJfQot CQkJfQotbG9vcF9pdHI6Ci0JCQkvKiBpZiB0aGlzIGlzIGEgZ2xvYmFsIHN5bWJvbCwgcG9zdCBp dCB0byB0aGUKLQkJCSAqIGdsb2JhbCB0YWJsZSAqLwotCQkJaWYgKGlucHV0X3N5bS0+ZG5fc2Ns YXNzID09IEROX0VYVCB8fAotCQkJICAgIGlucHV0X3N5bS0+ZG5fc2NsYXNzID09IEROX0VYVExB QikgewotCQkJCS8qIEtlZXAgdGhpcyBnbG9iYWwgc3ltYm9sIGZvciBzdWJzZXF1ZW50Ci0JCQkJ ICogbW9kdWxlcy4gRG9uJ3QgY29tcGxhaW4gb24gZXJyb3IsIHRvIGFsbG93Ci0JCQkJICogc3lt Ym9sIEFQSSB0byBzdXBwcmVzcyBnbG9iYWwgc3ltYm9scyAqLwotCQkJCWlmICghc25hbWUpCi0J CQkJCWdvdG8gbG9vcF9jb250OwotCi0JCQkJbmV3c3ltID0gZGx0aGlzLT5teXN5bS0+YWRkX3Rv X3N5bWJvbF90YWJsZQotCQkJCSAgICAoZGx0aGlzLT5teXN5bSwgc25hbWUsCi0JCQkJICAgICAo dW5zaWduZWQpZGx0aGlzLT5teWhhbmRsZSk7Ci0JCQkJaWYgKG5ld3N5bSkKLQkJCQkJbmV3c3lt LT52YWx1ZSA9IHZhbDsKLQotCQkJfQkvKiBnbG9iYWwgKi8KLWxvb3BfY29udDoKLQkJCXNwLT52 YWx1ZSA9IHZhbDsKLQkJCXNwLT5kZWx0YSA9IGRlbHRhOwotCQkJc3AgKz0gMTsKLQkJCWlucHV0 X3N5bSArPSAxOwotCQl9IHdoaWxlICgoc3ltc19pbl9idWYgLT0gMSkgPiAwKTsJLyogcHJvY2Vz cyBzeW0gaW4gYnVmICovCi0JfSB3aGlsZSAoc3ltYm9sc19sZWZ0ID4gMCk7CS8qIHJlYWQgYWxs IHN5bWJvbHMgKi8KLQlpZiAofmNoZWNrcykKLQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQ2hlY2tz dW0gb2Ygc3ltYm9scyBmYWlsZWQiKTsKLQotZnJlZV9zeW1fYnVmOgotCWtmcmVlKG15X3N5bV9i dWYpOwotCXJldHVybjsKLX0JCQkJLyogZGxvYWRfc3ltYm9scyAqLwotCi0vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLSAqIFByb2NlZHVyZSBzeW1ib2xfdGFibGVfZnJlZQotICoKLSAqIFBhcmFtZXRl cnM6Ci0gKglub25lCi0gKgotICogRWZmZWN0OgotICoJRnJlZXMgYW55IHN0YXRlIHVzZWQgYnkg dGhlIHN5bWJvbCB0YWJsZS4KLSAqCi0gKiBXQVJOSU5HOgotICoJVGhpcyByb3V0aW5lIGlzIG5v dCBhbGxvd2VkIHRvIGRlY2xhcmUgZXJyb3JzIQotICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXN0 YXRpYyB2b2lkIHN5bWJvbF90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQot ewotCWlmIChkbHRoaXMtPmxvY2FsX3N5bXRhYikgewotCQlpZiAoZGx0aGlzLT5kbG9hZF9lcnJj b3VudCkgewkvKiBibG93IG9mZiBvdXIgc3ltYm9scyAqLwotCQkJZGx0aGlzLT5teXN5bS0+cHVy Z2Vfc3ltYm9sX3RhYmxlKGRsdGhpcy0+bXlzeW0sCi0JCQkJCQkJICAodW5zaWduZWQpCi0JCQkJ CQkJICBkbHRoaXMtPm15aGFuZGxlKTsKLQkJfQotCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFs bG9jYXRlKGRsdGhpcy0+bXlzeW0sCi0JCQkJCQlkbHRoaXMtPmxvY2FsX3N5bXRhYik7Ci0JfQot fQkJCQkvKiBzeW1ib2xfdGFibGVfZnJlZSAqLwotCi0vKiAuY2luaXQgUHJvY2Vzc2luZwotICoK LSAqIFRoZSBkeW5hbWljIGxvYWRlciBkb2VzIC5jaW5pdCBpbnRlcnByZXRhdGlvbi4gIGNsb2Fk X2Npbml0KCkKLSAqIGFjdHMgYXMgYSBzcGVjaWFsIHdyaXRlLXRvLXRhcmdldCBmdW5jdGlvbiwg aW4gdGhhdCBpdCB0YWtlcyByZWxvY2F0ZWQKLSAqIGRhdGEgZnJvbSB0aGUgbm9ybWFsIGRhdGEg ZmxvdywgYW5kIGludGVycHJldHMgaXQgYXMgLmNpbml0IGFjdGlvbnMuCi0gKiBCZWNhdXNlIHRo ZSBub3JtYWwgZGF0YSBmbG93IGRvZXMgbm90ICBuZWNlc3NhcmlseSBwcm9jZXNzIHRoZSB3aG9s ZQotICogLmNpbml0IHNlY3Rpb24gaW4gb25lIGJ1ZmZlciwgY2xvYWRfY2luaXQoKSBtdXN0IGJl IHByZXBhcmVkIHRvCi0gKiBpbnRlcnByZXQgdGhlIGRhdGEgcGllY2VtZWFsLiAgQSBzdGF0ZSBt YWNoaW5lIGlzIHVzZWQgZm9yIHRoaXMKLSAqIHB1cnBvc2UuCi0gKi8KLQotLyogVGhlIGZvbGxv d2luZyBhcmUgb25seSBmb3IgdXNlIGJ5IHJlbG9jLmMgYW5kIHRoaW5ncyBpdCBjYWxscyAqLwot c3RhdGljIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIGNpbml0X2luZm9faW5pdCA9IHsg Y2luaXRuYW1lLCAwLCAwLAotCShsZHJfYWRkciktMSwgMCwgRExPQURfQlNTLCAwCi19OwotCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlIGNsb2FkX2Npbml0Ci0gKgotICogUGFyYW1l dGVyczoKLSAqCWlwYWNrZXQJCVBvaW50ZXIgdG8gZGF0YSBwYWNrZXQgdG8gYmUgbG9hZGVkCi0g KgotICogRWZmZWN0OgotICoJSW50ZXJwcmV0cyB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIGFzIC5j aW5pdCBkYXRhLCBhbmQgcGVyZm9ybXMgdGhlCi0gKiBhcHByb3ByaWF0ZSBpbml0aWFsaXphdGlv bnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KLXN0YXRpYyB2b2lkIGNsb2FkX2Npbml0KHN0cnVjdCBk bG9hZF9zdGF0ZSAqZGx0aGlzLAotCQkJc3RydWN0IGltYWdlX3BhY2tldF90ICppcGFja2V0KQot ewotI2lmIFREQVRBX1RPX0hPU1QoQ0lOSVRfQ09VTlQpKkJJVFNfUEVSX0FVID4gMTYKLQlzMzIg aW5pdF9jb3VudCwgbGVmdDsKLSNlbHNlCi0JczE2IGluaXRfY291bnQsIGxlZnQ7Ci0jZW5kaWYK LQl1bnNpZ25lZCBjaGFyICpwa3RwID0gaXBhY2tldC0+aW1nX2RhdGE7Ci0JdW5zaWduZWQgY2hh ciAqcGt0ZW5kID0gcGt0cCArIEJZVEVfVE9fSE9TVF9ST1VORChpcGFja2V0LT5wYWNrZXRfc2l6 ZSk7Ci0JaW50IHRlbXA7Ci0JbGRyX2FkZHIgYXRtcDsKLQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5m byBjaW5pdF9pbmZvOwotCi0JLyogIFBST0NFU1MgQUxMIFRIRSBJTklUSUFMSVpBVElPTiBSRUNP UkRTIFRIRSBCVUZGRVIuICovCi0Jd2hpbGUgKHRydWUpIHsKLQkJbGVmdCA9IHBrdGVuZCAtIHBr dHA7Ci0JCXN3aXRjaCAoZGx0aGlzLT5jaW5pdF9zdGF0ZSkgewotCQljYXNlIENJX0NPVU5UOgkv KiBjb3VudCBmaWVsZCAqLwotCQkJaWYgKGxlZnQgPCBUREFUQV9UT19IT1NUKENJTklUX0NPVU5U KSkKLQkJCQlnb3RvIGxvb3BleGl0OwotCQkJdGVtcCA9IGRsb2FkX3VucGFjayhkbHRoaXMsICh0 Z3RfYXVfdCAqKSBwa3RwLAotCQkJCQkgICAgQ0lOSVRfQ09VTlQgKiBUREFUQV9BVV9CSVRTLCAw LAotCQkJCQkgICAgUk9QX1NHTik7Ci0JCQlwa3RwICs9IFREQVRBX1RPX0hPU1QoQ0lOSVRfQ09V TlQpOwotCQkJLyogbmVnYXRpdmUgc2lnbmlmaWVzIEJTUyB0YWJsZSwgemVybyBtZWFucyBkb25l ICovCi0JCQlpZiAodGVtcCA8PSAwKSB7Ci0JCQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJX0RP TkU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkbHRoaXMtPmNpbml0X2NvdW50ID0gdGVtcDsKLQkJ CWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9BRERSRVNTOwotCQkJYnJlYWs7Ci0jaWYgQ0lOSVRf QUxJR04gPCBDSU5JVF9BRERSRVNTCi0JCWNhc2UgQ0lfUEFSVEFERFJFU1M6Ci0JCQlwa3RwIC09 IFREQVRBX1RPX0hPU1QoQ0lOSVRfQUxJR04pOwotCQkJLyogYmFjayB1cCBwb2ludGVyIGludG8g c3BhY2UgY291cnRlc3kgb2YgY2FsbGVyICovCi0JCQkqKHVpbnQxNl90ICopIHBrdHAgPSBkbHRo aXMtPmNpbml0X2FkZHI7Ci0JCQkvKiBzdHVmZiBpbiBzYXZlZCBiaXRzICAhISBGQUxMIFRIUlUg ISEgKi8KLSNlbmRpZgotCQljYXNlIENJX0FERFJFU1M6CS8qIEFkZHJlc3MgZmllbGQgZm9yIGEg Y29weSBwYWNrZXQgKi8KLQkJCWlmIChsZWZ0IDwgVERBVEFfVE9fSE9TVChDSU5JVF9BRERSRVNT KSkgewotI2lmIENJTklUX0FMSUdOIDwgQ0lOSVRfQUREUkVTUwotCQkJCWlmIChsZWZ0ID09IFRE QVRBX1RPX0hPU1QoQ0lOSVRfQUxJR04pKSB7Ci0JCQkJCS8qIGFkZHJlc3MgYnJva2VuIGludG8g aGFsdmVzICovCi0JCQkJCWRsdGhpcy0+Y2luaXRfYWRkciA9ICoodWludDE2X3QgKikgcGt0cDsK LQkJCQkJLyogcmVtZW1iZXIgMXN0IGhhbGYgKi8KLQkJCQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9 IENJX1BBUlRBRERSRVNTOwotCQkJCQlsZWZ0ID0gMDsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlnb3Rv IGxvb3BleGl0OwotCQkJfQotCQkJYXRtcCA9IGRsb2FkX3VucGFjayhkbHRoaXMsICh0Z3RfYXVf dCAqKSBwa3RwLAotCQkJCQkgICAgQ0lOSVRfQUREUkVTUyAqIFREQVRBX0FVX0JJVFMsIDAsCi0J CQkJCSAgICBST1BfVU5TKTsKLQkJCXBrdHAgKz0gVERBVEFfVE9fSE9TVChDSU5JVF9BRERSRVNT KTsKLSNpZiBDSU5JVF9QQUdFX0JJVFMgPiAwCi0JCQlkbHRoaXMtPmNpbml0X3BhZ2UgPSBhdG1w ICYKLQkJCSAgICAoKDEgPDwgQ0lOSVRfUEFHRV9CSVRTKSAtIDEpOwotCQkJYXRtcCA+Pj0gQ0lO SVRfUEFHRV9CSVRTOwotI2Vsc2UKLQkJCWRsdGhpcy0+Y2luaXRfcGFnZSA9IENJTklUX0RFRkFV TFRfUEFHRTsKLSNlbmRpZgotCQkJZGx0aGlzLT5jaW5pdF9hZGRyID0gYXRtcDsKLQkJCWRsdGhp cy0+Y2luaXRfc3RhdGUgPSBDSV9DT1BZOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0lfQ09QWToJLyog Y29weSBiaXRzIHRvIHRoZSB0YXJnZXQgKi8KLQkJCWluaXRfY291bnQgPSBIT1NUX1RPX1REQVRB KGxlZnQpOwotCQkJaWYgKGluaXRfY291bnQgPiBkbHRoaXMtPmNpbml0X2NvdW50KQotCQkJCWlu aXRfY291bnQgPSBkbHRoaXMtPmNpbml0X2NvdW50OwotCQkJaWYgKGluaXRfY291bnQgPT0gMCkK LQkJCQlnb3RvIGxvb3BleGl0OwkvKiBnZXQgbW9yZSBiaXRzICovCi0JCQljaW5pdF9pbmZvID0g Y2luaXRfaW5mb19pbml0OwotCQkJY2luaXRfaW5mby5wYWdlID0gZGx0aGlzLT5jaW5pdF9wYWdl OwotCQkJaWYgKCFkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRsdGhpcy0+bXlpbywgcGt0cCwKLQkJ CQkJCSAgIFREQVRBX1RPX1RBRERSCi0JCQkJCQkgICAoZGx0aGlzLT5jaW5pdF9hZGRyKSwKLQkJ CQkJCSAgICZjaW5pdF9pbmZvLAotCQkJCQkJICAgVERBVEFfVE9fSE9TVChpbml0X2NvdW50KSkp IHsKLQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGluaXRmYWlsLCAid3JpdGUiLAotCQkJCQkgICAg ZGx0aGlzLT5jaW5pdF9hZGRyKTsKLQkJCX0KLQkJCWRsdGhpcy0+Y2luaXRfY291bnQgLT0gaW5p dF9jb3VudDsKLQkJCWlmIChkbHRoaXMtPmNpbml0X2NvdW50IDw9IDApIHsKLQkJCQlkbHRoaXMt PmNpbml0X3N0YXRlID0gQ0lfQ09VTlQ7Ci0JCQkJaW5pdF9jb3VudCA9IChpbml0X2NvdW50ICsg Q0lOSVRfQUxJR04gLSAxKSAmCi0JCQkJICAgIC1DSU5JVF9BTElHTjsKLQkJCQkvKiBhbGlnbiB0 byBuZXh0IGluaXQgKi8KLQkJCX0KLQkJCXBrdHAgKz0gVERBVEFfVE9fSE9TVChpbml0X2NvdW50 KTsKLQkJCWRsdGhpcy0+Y2luaXRfYWRkciArPSBpbml0X2NvdW50OwotCQkJYnJlYWs7Ci0JCWNh c2UgQ0lfRE9ORToJLyogbm8gbW9yZSAuY2luaXQgdG8gZG8gKi8KLQkJCXJldHVybjsKLQkJfQkJ Lyogc3dpdGNoIChjaW5pdF9zdGF0ZSkgKi8KLQl9CQkJLyogd2hpbGUgKi8KLQotbG9vcGV4aXQ6 Ci0JaWYgKGxlZnQgPiAwKSB7Ci0JCWRsb2FkX2Vycm9yKGRsdGhpcywgIiVkIGJ5dGVzIGxlZnQg b3ZlciBpbiBjaW5pdCBwYWNrZXQiLCBsZWZ0KTsKLQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJ X0RPTkU7CS8qIGxlZnQgb3ZlciBieXRlcyBhcmUgYmFkICovCi0JfQotfQkJCQkvKiBjbG9hZF9j aW5pdCAqLwotCi0vKglGdW5jdGlvbnMgdG8gaW50ZXJmYWNlIHRvIHJlbG9jLmMKLSAqCi0gKiBy ZWxvYy5jIGlzIHRoZSByZWxvY2F0aW9uIG1vZHVsZSBib3Jyb3dlZCBmcm9tIHRoZSBsaW5rZXIs IHdpdGgKLSAqIG1pbmltYWwgKHdlIGhvcGUpIGNoYW5nZXMgZm9yIG91ciBwdXJwb3Nlcy4gIGNs b2FkX3NlY3RfZGF0YSgpIGludm9rZXMKLSAqIHRoaXMgbW9kdWxlIG9uIGEgc2VjdGlvbiB0byBy ZWxvY2F0ZSBhbmQgbG9hZCB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhhdAotICogc2VjdGlvbi4gIFRo ZSBhY3R1YWwgcmVhZCBhbmQgd3JpdGUgYWN0aW9ucyBhcmUgc3VwcGxpZWQgYnkgdGhlIGdsb2Jh bAotICogcm91dGluZXMgYmVsb3cuCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJvY2Vk dXJlIHJlbG9jYXRlX3BhY2tldAotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKglpcGFja2V0CQlQb2lu dGVyIHRvIGFuIGltYWdlIHBhY2tldCB0byByZWxvY2F0ZQotICoKLSAqIEVmZmVjdDoKLSAqCVBl cmZvcm1zIHRoZSByZXF1aXJlZCByZWxvY2F0aW9ucyBvbiB0aGUgcGFja2V0LiAgUmV0dXJucyBh IGNoZWNrc3VtCi0gKiBvZiB0aGUgcmVsb2NhdGlvbiBvcGVyYXRpb25zLgotICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCi0jZGVmaW5lIE1ZX1JFTE9DX0JVRl9TSVogOAotLyogY2FyZWZ1bCEgZXhpc3RzIGF0 IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGltYWdlIGJ1ZmZlciAqLwotc3RhdGljIGludCByZWxvY2F0 ZV9wYWNrZXQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCi0JCQkgICBzdHJ1Y3QgaW1hZ2Vf cGFja2V0X3QgKmlwYWNrZXQsCi0JCQkgICB1MzIgKmNoZWNrcywgYm9vbCAqdHJhbXBzX2dlbmVy YXRlZCkKLXsKLQl1MzIgcm51bTsKLQkqdHJhbXBzX2dlbmVyYXRlZCA9IGZhbHNlOwotCi0Jcm51 bSA9IGlwYWNrZXQtPm51bV9yZWxvY3M7Ci0JZG8gewkJCS8qIGFsbCByZWxvY3MgKi8KLQkJdW5z aWduZWQgcmluYnVmOwotCQlpbnQgc2l6OwotCQlzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwLCBy cmVjW01ZX1JFTE9DX0JVRl9TSVpdOwotCi0JCXJwID0gcnJlYzsKLQkJcmluYnVmID0gcm51bSA+ IE1ZX1JFTE9DX0JVRl9TSVogPyBNWV9SRUxPQ19CVUZfU0laIDogcm51bTsKLQkJc2l6ID0gcmlu YnVmICogc2l6ZW9mKHN0cnVjdCByZWxvY19yZWNvcmRfdCk7Ci0JCWlmIChkbHRoaXMtPnN0cm0t PnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwgcnAsIHNpeikgIT0gc2l6KSB7Ci0JCQlETF9FUlJP UihyZWFkc3RybSwgInJlbG9jYXRpb24iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qIHJlb3Jk ZXIgdGhlIGJ5dGVzIGlmIG5lZWQgYmUgKi8KLQkJaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXApCi0J CQlkbG9hZF9yZW9yZGVyKHJwLCBzaXosIGRsdGhpcy0+cmVvcmRlcl9tYXApOwotCi0JCSpjaGVj a3MgKz0gZGxvYWRfY2hlY2tzdW0ocnAsIHNpeik7Ci0JCWRvIHsKLQkJCS8qIHBlcmZvcm0gdGhl IHJlbG9jYXRpb24gb3BlcmF0aW9uICovCi0JCQlkbG9hZF9yZWxvY2F0ZShkbHRoaXMsICh0Z3Rf YXVfdCAqKSBpcGFja2V0LT5pbWdfZGF0YSwKLQkJCQkgICAgICAgcnAsIHRyYW1wc19nZW5lcmF0 ZWQsIGZhbHNlKTsKLQkJCXJwICs9IDE7Ci0JCQlybnVtIC09IDE7Ci0JCX0gd2hpbGUgKChyaW5i dWYgLT0gMSkgPiAwKTsKLQl9IHdoaWxlIChybnVtID4gMCk7CS8qIGFsbCByZWxvY3MgKi8KLQkv KiBJZiB0cmFtcG9saW5lKHMpIHdlcmUgZ2VuZXJhdGVkLCB3ZSBuZWVkIHRvIGRvIGFuIHVwZGF0 ZSBvZiB0aGUKLQkgKiB0cmFtcG9saW5lIGNvcHkgb2YgdGhlIHBhY2tldCBzaW5jZSBhIDJuZCBw aGFzZSByZWxvIHdpbGwgYmUgZG9uZQotCSAqIGxhdGVyLiAqLwotCWlmICgqdHJhbXBzX2dlbmVy YXRlZCA9PSB0cnVlKSB7Ci0JCWRsb2FkX3RyYW1wX3BrdF91ZHBhdGUoZGx0aGlzLAotCQkJCSAg ICAgICAoZGx0aGlzLT5pbWFnZV9zZWNuIC0KLQkJCQkJZGx0aGlzLT5sZHJfc2VjdGlvbnMpLAot CQkJCSAgICAgICBkbHRoaXMtPmltYWdlX29mZnNldCwgaXBhY2tldCk7Ci0JfQotCi0JcmV0dXJu IDE7Ci19CQkJCS8qIGRsb2FkX3JlYWRfcmVsb2MgKi8KLQotI2RlZmluZSBJUEhfU0laRSAoc2l6 ZW9mKHN0cnVjdCBpbWFnZV9wYWNrZXRfdCkgLSBzaXplb2YodTMyKSkKLQotLyogVkVSWSBkYW5n ZXJvdXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyIGltYWdlcGFrW10gPSB7ICJpbWFnZSBwYWNrZXQi IH07Ci0KLXN0cnVjdCBpbWdfYnVmZmVyIHsKLQlzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgaXBhY2tl dDsKLQl1OCBidWZyW0JZVEVfVE9fSE9TVChJTUFHRV9QQUNLRVRfU0laRSldOwotfTsKLQotLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBkbG9hZF9kYXRhCi0gKgotICogUGFyYW1ldGVy czoKLSAqCW5vbmUKLSAqCi0gKiBFZmZlY3Q6Ci0gKglSZWFkIGltYWdlIGRhdGEgZnJvbSBpbnB1 dCBmaWxlLCByZWxvY2F0ZSBpdCwgYW5kIGRvd25sb2FkIGl0IHRvIHRoZQotICoJdGFyZ2V0Lgot ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCi1zdGF0aWMgdm9pZCBkbG9hZF9kYXRhKHN0cnVjdCBkbG9hZF9z dGF0ZSAqZGx0aGlzKQotewotCXUxNiBjdXJyX3NlY3Q7Ci0Jc3RydWN0IGRvZmZfc2NuaGRyX3Qg KnNwdHIgPSBkbHRoaXMtPnNlY3RfaGRyczsKLQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqbHB0 ciA9IGRsdGhpcy0+bGRyX3NlY3Rpb25zOwotCXN0cnVjdCBpbWdfYnVmZmVyICppYnVmOwotCXU4 ICpkZXN0OwotCi0JLyogSW5kaWNhdGVzIHdoZXRoZXIgQ0lOSVQgcHJvY2Vzc2luZyBoYXMgb2Nj dXJyZWQgKi8KLQlib29sIGNpbml0X3Byb2Nlc3NlZCA9IGZhbHNlOwotCi0JaWJ1ZiA9IGt6YWxs b2Moc2l6ZW9mKCppYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpYnVmKQotCQlyZXR1cm47Ci0K LQkvKiBMb29wIHRocm91Z2ggdGhlIHNlY3Rpb25zIGFuZCBsb2FkIHRoZW0gb25lIGF0IGEgdGlt ZS4KLQkgKi8KLQlmb3IgKGN1cnJfc2VjdCA9IDA7IGN1cnJfc2VjdCA8IGRsdGhpcy0+ZGZpbGVf aGRyLmRmX25vX3NjbnM7Ci0JICAgICBjdXJyX3NlY3QgKz0gMSkgewotCQlpZiAoZHNfbmVlZHNf ZG93bmxvYWQoc3B0cikpIHsKLQkJCXMzMiBuaXA7Ci0JCQlsZHJfYWRkciBpbWFnZV9vZmZzZXQg PSAwOwotCQkJLyogc2V0IHJlbG9jYXRpb24gaW5mbyBmb3IgdGhpcyBzZWN0aW9uICovCi0JCQlp ZiAoY3Vycl9zZWN0IDwgZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkKLQkJCQlkbHRoaXMt PmRlbHRhX3J1bmFkZHIgPSBzcHRyLT5kc19wYWRkcjsKLQkJCWVsc2UgewotCQkJCWxwdHIgPSAo c3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzcHRyOwotCQkJCWRsdGhpcy0+ZGVsdGFfcnVuYWRk ciA9IDA7Ci0JCQl9Ci0JCQlkbHRoaXMtPmltYWdlX3NlY24gPSBscHRyOwotI2lmIEJJVFNfUEVS X0FVID4gQklUU19QRVJfQllURQotCQkJbHB0ci0+bmFtZSA9IHVucGFja19uYW1lKGRsdGhpcywg c3B0ci0+ZHNfb2Zmc2V0KTsKLSNlbmRpZgotCQkJbmlwID0gc3B0ci0+ZHNfbmlwYWNrczsKLQkJ CXdoaWxlICgobmlwIC09IDEpID49IDApIHsJLyogcHJvY2VzcyBwYWNrZXRzICovCi0KLQkJCQlz MzIgaXBzaXplOwotCQkJCXUzMiBjaGVja3M7Ci0JCQkJYm9vbCB0cmFtcF9nZW5lcmF0ZWQgPSBm YWxzZTsKLQotCQkJCS8qIGdldCB0aGUgZml4ZWQgaGVhZGVyIGJpdHMgKi8KLQkJCQlpZiAoZGx0 aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sCi0JCQkJCQkJICAgICAgJmlidWYt PmlwYWNrZXQsCi0JCQkJCQkJICAgICAgSVBIX1NJWkUpICE9Ci0JCQkJICAgIElQSF9TSVpFKSB7 Ci0JCQkJCURMX0VSUk9SKHJlYWRzdHJtLCBpbWFnZXBhayk7Ci0JCQkJCWdvdG8gZnJlZV9pYnVm OwotCQkJCX0KLQkJCQkvKiByZW9yZGVyIHRoZSBoZWFkZXIgaWYgbmVlZCBiZSAqLwotCQkJCWlm IChkbHRoaXMtPnJlb3JkZXJfbWFwKSB7Ci0JCQkJCWRsb2FkX3Jlb3JkZXIoJmlidWYtPmlwYWNr ZXQsIElQSF9TSVpFLAotCQkJCQkJICAgICAgZGx0aGlzLT5yZW9yZGVyX21hcCk7Ci0JCQkJfQot CQkJCS8qIG5vdyByZWFkIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KLQkJCQlpcHNpemUgPQot CQkJCSAgICBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTgotCQkJCQkJIChpYnVmLT5pcGFja2V0LnBh Y2tldF9zaXplKSk7Ci0JCQkJaWYgKGlwc2l6ZSA+IEJZVEVfVE9fSE9TVChJTUFHRV9QQUNLRVRf U0laRSkpIHsKLQkJCQkJRExfRVJST1IoIkJhZCBpbWFnZSBwYWNrZXQgc2l6ZSAlZCIsCi0JCQkJ CQkgaXBzaXplKTsKLQkJCQkJZ290byBmcmVlX2lidWY7Ci0JCQkJfQotCQkJCWRlc3QgPSBpYnVm LT5idWZyOwotCQkJCS8qIEVuZCBvZiBkZXRlcm1pbmF0aW9uICovCi0KLQkJCQlpZiAoZGx0aGlz LT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sCi0JCQkJCQkJICAgICAgaWJ1Zi0+YnVm ciwKLQkJCQkJCQkgICAgICBpcHNpemUpICE9Ci0JCQkJICAgIGlwc2l6ZSkgewotCQkJCQlETF9F UlJPUihyZWFkc3RybSwgaW1hZ2VwYWspOwotCQkJCQlnb3RvIGZyZWVfaWJ1ZjsKLQkJCQl9Ci0J CQkJaWJ1Zi0+aXBhY2tldC5pbWdfZGF0YSA9IGRlc3Q7Ci0KLQkJCQkvKiByZW9yZGVyIHRoZSBi eXRlcyBpZiBuZWVkIGJlICovCi0jaWYgIWRlZmluZWQoX0JJR19FTkRJQU4pIHx8IChUQVJHRVRf QVVfQklUUyA+IDE2KQotCQkJCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKSB7Ci0JCQkJCWRsb2Fk X3Jlb3JkZXIoZGVzdCwgaXBzaXplLAotCQkJCQkJICAgICAgZGx0aGlzLT5yZW9yZGVyX21hcCk7 Ci0JCQkJfQotCQkJCWNoZWNrcyA9IGRsb2FkX2NoZWNrc3VtKGRlc3QsIGlwc2l6ZSk7Ci0jZWxz ZQotCQkJCWlmIChkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSAhPQotCQkJCSAg ICBUQVJHRVRfT1JERVIoUkVPUkRFUl9NQVAKLQkJCQkJCSAoQllURV9SRVNIVUZGTEVfVkFMVUUp KSkgewotCQkJCQkvKiBwdXQgaW1hZ2UgYnl0ZXMgaW4gYmlnLWVuZGlhbiBvcmRlciwKLQkJCQkJ ICogbm90IFBDIG9yZGVyICovCi0JCQkJCWRsb2FkX3Jlb3JkZXIoZGVzdCwgaXBzaXplLAotCQkJ CQkJICAgICAgVEFSR0VUX09SREVSCi0JCQkJCQkgICAgICAoZGx0aGlzLT5kZmlsZV9oZHIuCi0J CQkJCQkgICAgICAgZGZfYnl0ZV9yZXNodWZmbGUpKTsKLQkJCQl9Ci0jaWYgVEFSR0VUX0FVX0JJ VFMgPiA4Ci0JCQkJY2hlY2tzID0gZGxvYWRfcmV2ZXJzZV9jaGVja3N1bTE2KGRlc3QsIGlwc2l6 ZSk7Ci0jZWxzZQotCQkJCWNoZWNrcyA9IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0oZGVzdCwgaXBz aXplKTsKLSNlbmRpZgotI2VuZGlmCi0KLQkJCQljaGVja3MgKz0gZGxvYWRfY2hlY2tzdW0oJmli dWYtPmlwYWNrZXQsCi0JCQkJCQkJIElQSF9TSVpFKTsKLQkJCQkvKiByZWxvY2F0ZSB0aGUgaW1h Z2UgYml0cyBhcyBuZWVkZWQgKi8KLQkJCQlpZiAoaWJ1Zi0+aXBhY2tldC5udW1fcmVsb2NzKSB7 Ci0JCQkJCWRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ID0gaW1hZ2Vfb2Zmc2V0OwotCQkJCQlpZiAoIXJl bG9jYXRlX3BhY2tldChkbHRoaXMsCi0JCQkJCQkJICAgICAmaWJ1Zi0+aXBhY2tldCwKLQkJCQkJ CQkgICAgICZjaGVja3MsCi0JCQkJCQkJICAgICAmdHJhbXBfZ2VuZXJhdGVkKSkKLQkJCQkJCWdv dG8gZnJlZV9pYnVmOwkvKiBlcnJvciAqLwotCQkJCX0KLQkJCQlpZiAofmNoZWNrcykKLQkJCQkJ RExfRVJST1IoZXJyX2NoZWNrc3VtLCBpbWFnZXBhayk7Ci0JCQkJLyogT25seSB3cml0ZSB0aGUg cmVzdWx0IHRvIHRoZSB0YXJnZXQgaWYgbm8KLQkJCQkgKiB0cmFtcG9saW5lIHdhcyBnZW5lcmF0 ZWQuICBPdGhlcndpc2UgaXQKLQkJCQkgKndpbGwgYmUgZG9uZSBkdXJpbmcgdHJhbXBvbGluZSBm aW5hbGl6ZS4gKi8KLQotCQkJCWlmICh0cmFtcF9nZW5lcmF0ZWQgPT0gZmFsc2UpIHsKLQotCQkJ CQkvKiBzdHVmZiB0aGUgcmVzdWx0IGludG8gdGFyZ2V0Ci0JCQkJCSAqIG1lbW9yeSAqLwotCQkJ CQlpZiAoZGxvYWRfY2hlY2tfdHlwZShzcHRyLAotCQkJCQkJRExPQURfQ0lOSVQpKSB7Ci0JCQkJ CQljbG9hZF9jaW5pdChkbHRoaXMsCi0JCQkJCQkJICAgICZpYnVmLT5pcGFja2V0KTsKLQkJCQkJ CWNpbml0X3Byb2Nlc3NlZCA9IHRydWU7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBGSVhNRSAq LwotCQkJCQkJaWYgKCFkbHRoaXMtPm15aW8tPgotCQkJCQkJICAgIHdyaXRlbWVtKGRsdGhpcy0+ Ci0JCQkJCQkJbXlpbywKLQkJCQkJCQlpYnVmLT5idWZyLAotCQkJCQkJCWxwdHItPgotCQkJCQkJ CWxvYWRfYWRkciArCi0JCQkJCQkJaW1hZ2Vfb2Zmc2V0LAotCQkJCQkJCWxwdHIsCi0JCQkJCQkJ QllURV9UT19IT1NUCi0JCQkJCQkJKGlidWYtPgotCQkJCQkJCWlwYWNrZXQuCi0JCQkJCQkJcGFj a2V0X3NpemUpKSkgewotCQkJCQkJCURMX0VSUk9SCi0JCQkJCQkJICAoIldyaXRlIHRvICIKLQkJ CQkJCQkgIEZNVF9VSTMyCi0JCQkJCQkJICAiIGZhaWxlZCIsCi0JCQkJCQkJICBscHRyLT4KLQkJ CQkJCQkgIGxvYWRfYWRkciArCi0JCQkJCQkJICBpbWFnZV9vZmZzZXQpOwotCQkJCQkJfQotCQkJ CQl9Ci0JCQkJfQotCQkJCWltYWdlX29mZnNldCArPQotCQkJCSAgICBCWVRFX1RPX1RBRERSKGli dWYtPmlwYWNrZXQucGFja2V0X3NpemUpOwotCQkJfQkvKiBwcm9jZXNzIHBhY2tldHMgKi8KLQkJ CS8qIGlmIHRoaXMgaXMgYSBCU1Mgc2VjdGlvbiwgd2UgbWF5IHdhbnQgdG8gZmlsbCBpdCAqLwot CQkJaWYgKCFkbG9hZF9jaGVja190eXBlKHNwdHIsIERMT0FEX0JTUykpCi0JCQkJZ290byBsb29w X2NvbnQ7Ci0KLQkJCWlmICghKGRsdGhpcy0+bXlvcHRpb25zICYgRExPQURfSU5JVEJTUykpCi0J CQkJZ290byBsb29wX2NvbnQ7Ci0KLQkJCWlmIChjaW5pdF9wcm9jZXNzZWQpIHsKLQkJCQkvKiBE b24ndCBjbGVhciBCU1MgYWZ0ZXIgbG9hZC10aW1lCi0JCQkJICogaW5pdGlhbGl6YXRpb24gKi8K LQkJCQlETF9FUlJPUgotCQkJCSAgICAoIlplcm8taW5pdGlhbGl6YXRpb24gYXQgIiBGTVRfVUkz MgotCQkJCSAgICAgIiBhZnRlciAiICJsb2FkLXRpbWUgaW5pdGlhbGl6YXRpb24hIiwKLQkJCQkg ICAgIGxwdHItPmxvYWRfYWRkcik7Ci0JCQkJZ290byBsb29wX2NvbnQ7Ci0JCQl9Ci0JCQkvKiBm aWxsIHRoZSAuYnNzIGFyZWEgKi8KLQkJCWRsdGhpcy0+bXlpby0+ZmlsbG1lbShkbHRoaXMtPm15 aW8sCi0JCQkJCSAgICAgIFRBRERSX1RPX0hPU1QobHB0ci0+bG9hZF9hZGRyKSwKLQkJCQkJICAg ICAgbHB0ciwgVEFERFJfVE9fSE9TVChscHRyLT5zaXplKSwKLQkJCQkJICAgICAgRExPQURfRklM TF9CU1MpOwotCQkJZ290byBsb29wX2NvbnQ7Ci0JCX0KLQkJLyogaWYgRFNfRE9XTkxPQURfTUFT SyAqLwotCQkvKiBJZiBub3QgbG9hZGluZywgYnV0IEJTUywgemVybyBpbml0aWFsaXplICovCi0J CWlmICghZGxvYWRfY2hlY2tfdHlwZShzcHRyLCBETE9BRF9CU1MpKQotCQkJZ290byBsb29wX2Nv bnQ7Ci0KLQkJaWYgKCEoZGx0aGlzLT5teW9wdGlvbnMgJiBETE9BRF9JTklUQlNTKSkKLQkJCWdv dG8gbG9vcF9jb250OwotCi0JCWlmIChjdXJyX3NlY3QgPj0gZGx0aGlzLT5hbGxvY2F0ZWRfc2Vj bl9jb3VudCkKLQkJCWxwdHIgPSAoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzcHRyOwotCi0J CWlmIChjaW5pdF9wcm9jZXNzZWQpIHsKLQkJCS8qRG9uJ3QgY2xlYXIgQlNTIGFmdGVyIGxvYWQt dGltZSBpbml0aWFsaXphdGlvbiAqLwotCQkJRExfRVJST1IoIlplcm8taW5pdGlhbGl6YXRpb24g YXQgIiBGTVRfVUkzMgotCQkJCSAiIGF0dGVtcHRlZCBhZnRlciAiCi0JCQkJICJsb2FkLXRpbWUg aW5pdGlhbGl6YXRpb24hIiwgbHB0ci0+bG9hZF9hZGRyKTsKLQkJCWdvdG8gbG9vcF9jb250Owot CQl9Ci0JCS8qIGZpbGwgdGhlIC5ic3MgYXJlYSAqLwotCQlkbHRoaXMtPm15aW8tPmZpbGxtZW0o ZGx0aGlzLT5teWlvLAotCQkJCSAgICAgIFRBRERSX1RPX0hPU1QobHB0ci0+bG9hZF9hZGRyKSwg bHB0ciwKLQkJCQkgICAgICBUQUREUl9UT19IT1NUKGxwdHItPnNpemUpLAotCQkJCSAgICAgIERM T0FEX0ZJTExfQlNTKTsKLWxvb3BfY29udDoKLQkJc3B0ciArPSAxOwotCQlscHRyICs9IDE7Ci0J fQkJCS8qIGxvYWQgc2VjdGlvbnMgKi8KLQotCS8qICBGaW5hbGl6ZSBhbnkgdHJhbXBvbGluZXMg dGhhdCB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBsb2FkICovCi0JaWYgKGRsb2FkX3RyYW1wX2Zp bmFsaXplKGRsdGhpcykgPT0gMCkgewotCQlETF9FUlJPUigiRmluYWxpemF0aW9uIG9mIGF1dG8t dHJhbXBvbGluZXMgKHNpemUgPSAiIEZNVF9VSTMyCi0JCQkgIikgZmFpbGVkIiwgZGx0aGlzLT50 cmFtcC50cmFtcF9zZWN0X25leHRfYWRkcik7Ci0JfQotZnJlZV9pYnVmOgotCWtmcmVlKGlidWYp OwotCXJldHVybjsKLX0JCQkJLyogZGxvYWRfZGF0YSAqLwotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot ICogUHJvY2VkdXJlIGRsb2FkX3Jlb3JkZXIKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZGF0YQkz Mi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgYnl0ZS1zd2FwcGVkCi0gKglkc2l6 CXNpemUgb2YgdGhlIGRhdGEgdG8gYmUgcmVvcmRlcmVkIGluIHNpemVvZigpIHVuaXRzLgotICoJ bWFwCQkzMi1iaXQgbWFwIGRlZmluaW5nIGhvdyB0byByZW9yZGVyIHRoZSBkYXRhLiAgVmFsdWUK LSAqCQkJbXVzdCBiZSBSRU9SREVSX01BUCgpIG9mIHNvbWUgcGVybXV0YXRpb24KLSAqCQkJb2Yg MHgwMCAwMSAwMiAwMwotICoKLSAqIEVmZmVjdDoKLSAqCVJlLWFycmFuZ2VzIHRoZSBieXRlcyBp biBlYWNoIHdvcmQgYWNjb3JkaW5nIHRvIHRoZSBtYXAgc3BlY2lmaWVkLgotICoKLSAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLwotLyogbWFzayBmb3IgYnl0ZSBzaGlmdCBjb3VudCAqLwotI2RlZmluZSBTSElG VF9DT1VOVF9NQVNLICgzIDw8IExPR19CSVRTX1BFUl9CWVRFKQotCi12b2lkIGRsb2FkX3Jlb3Jk ZXIodm9pZCAqZGF0YSwgaW50IGRzaXosIHVuc2lnbmVkIGludCBtYXApCi17Ci0JcmVnaXN0ZXIg dTMyIHRtcCwgdG1hcCwgZGF0djsKLQl1MzIgKmRwID0gKHUzMiAqKSBkYXRhOwotCi0JbWFwIDw8 PSBMT0dfQklUU19QRVJfQllURTsJLyogYWxpZ24gbWFwIHdpdGggU0hJRlRfQ09VTlRfTUFTSyAq LwotCWRvIHsKLQkJdG1wID0gMDsKLQkJZGF0diA9ICpkcDsKLQkJdG1hcCA9IG1hcDsKLQkJZG8g ewotCQkJdG1wIHw9IChkYXR2ICYgQllURV9NQVNLKSA8PCAodG1hcCAmIFNISUZUX0NPVU5UX01B U0spOwotCQkJdG1hcCA+Pj0gQklUU19QRVJfQllURTsKLQkJfSB3aGlsZSAoZGF0diA+Pj0gQklU U19QRVJfQllURSk7Ci0JCSpkcCsrID0gdG1wOwotCX0gd2hpbGUgKChkc2l6IC09IHNpemVvZih1 MzIpKSA+IDApOwotfQkJCQkvKiBkbG9hZF9yZW9yZGVyICovCi0KLS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0gKiBQcm9jZWR1cmUgZGxvYWRfY2hlY2tzdW0KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZGF0 YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgY2hlY2tzdW1tZWQKLSAqCXNp egkJc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBjaGVja3N1bW1lZCBpbiBzaXplb2YoKSB1bml0cy4K LSAqCi0gKiBFZmZlY3Q6Ci0gKglSZXR1cm5zIGEgY2hlY2tzdW0gb2YgdGhlIHNwZWNpZmllZCBi bG9jawotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotdTMyIGRsb2FkX2NoZWNrc3VtKHZvaWQgKmRh dGEsIHVuc2lnbmVkIHNpeikKLXsKLQl1MzIgc3VtOwotCXUzMiAqZHA7Ci0JaW50IGxlZnQ7Ci0K LQlzdW0gPSAwOwotCWRwID0gKHUzMiAqKSBkYXRhOwotCWZvciAobGVmdCA9IHNpejsgbGVmdCA+ IDA7IGxlZnQgLT0gc2l6ZW9mKHUzMikpCi0JCXN1bSArPSAqZHArKzsKLQlyZXR1cm4gc3VtOwot fQkJCQkvKiBkbG9hZF9jaGVja3N1bSAqLwotCi0jaWYgSE9TVF9FTkRJQU5ORVNTCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotICogUHJvY2VkdXJlIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0KLSAqCi0gKiBQ YXJhbWV0ZXJzOgotICoJZGF0YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUg Y2hlY2tzdW1tZWQKLSAqCXNpegkJc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBjaGVja3N1bW1lZCBp biBzaXplb2YoKSB1bml0cy4KLSAqCi0gKiBFZmZlY3Q6Ci0gKglSZXR1cm5zIGEgY2hlY2tzdW0g b2YgdGhlIHNwZWNpZmllZCBibG9jaywgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBieXRlcwotICog aW4gYmlnLWVuZGlhbiBvcmRlci4KLSAqCi0gKiBOb3RlczoKLSAqCUluIGEgYmlnLWVuZGlhbiBo b3N0LCB0aGluZ3MgbGlrZSB0aGUgc3RyaW5nIHRhYmxlIGFyZSBzdG9yZWQgYXMgYnl0ZXMKLSAq IGluIGhvc3Qgb3JkZXIuIEJ1dCBkbGxjcmVhdGUgYWx3YXlzIGNoZWNrc3VtcyBpbiBsaXR0bGUt ZW5kaWFuIG9yZGVyLgotICogSXQgaXMgbW9zdCBlZmZpY2llbnQgdG8ganVzdCBoYW5kbGUgdGhl IGRpZmZlcmVuY2UgYSB3b3JkIGF0IGEgdGltZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotdTMy IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0odm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KQotewotCXUz MiBzdW0sIHRlbXA7Ci0JdTMyICpkcDsKLQlpbnQgbGVmdDsKLQotCXN1bSA9IDA7Ci0JZHAgPSAo dTMyICopIGRhdGE7Ci0KLQlmb3IgKGxlZnQgPSBzaXo7IGxlZnQgPiAwOyBsZWZ0IC09IHNpemVv Zih1MzIpKSB7Ci0JCXRlbXAgPSAqZHArKzsKLQkJc3VtICs9IHRlbXAgPDwgQklUU19QRVJfQllU RSAqIDM7Ci0JCXN1bSArPSB0ZW1wID4+IEJJVFNfUEVSX0JZVEUgKiAzOwotCQlzdW0gKz0gKHRl bXAgPj4gQklUU19QRVJfQllURSkgJiAoQllURV9NQVNLIDw8IEJJVFNfUEVSX0JZVEUpOwotCQlz dW0gKz0gKHRlbXAgJiAoQllURV9NQVNLIDw8IEJJVFNfUEVSX0JZVEUpKSA8PCBCSVRTX1BFUl9C WVRFOwotCX0KLQotCXJldHVybiBzdW07Ci19CQkJCS8qIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0g Ki8KLQotI2lmIChUQVJHRVRfQVVfQklUUyA+IDgpICYmIChUQVJHRVRfQVVfQklUUyA8IDMyKQot dTMyIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNih2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopCi17 Ci0JdWludF9mYXN0MzJfdCBzdW0sIHRlbXA7Ci0JdTMyICpkcDsKLQlpbnQgbGVmdDsKLQotCXN1 bSA9IDA7Ci0JZHAgPSAodTMyICopIGRhdGE7Ci0KLQlmb3IgKGxlZnQgPSBzaXo7IGxlZnQgPiAw OyBsZWZ0IC09IHNpemVvZih1MzIpKSB7Ci0JCXRlbXAgPSAqZHArKzsKLQkJc3VtICs9IHRlbXAg PDwgQklUU19QRVJfQllURSAqIDI7Ci0JCXN1bSArPSB0ZW1wID4+IEJJVFNfUEVSX0JZVEUgKiAy OwotCX0KLQotCXJldHVybiBzdW07Ci19CQkJCS8qIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNiAq LwotI2VuZGlmCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBzd2Fw X3dvcmRzCi0gKgotICogUGFyYW1ldGVyczoKLSAqCWRhdGEJMzItYml0IGFsaWduZWQgcG9pbnRl ciB0byBkYXRhIHRvIGJlIHN3YXBwZWQKLSAqCXNpeglzaXplIG9mIHRoZSBkYXRhIHRvIGJlIHN3 YXBwZWQuCi0gKgliaXRtYXAJQml0IG1hcCBvZiBob3cgdG8gc3dhcCBlYWNoIDMyLWJpdCB3b3Jk OyAxID0+IDIgc2hvcnRzLAotICoJCTAgPT4gMSBsb25nCi0gKgotICogRWZmZWN0OgotICoJU3dh cHMgdGhlIHNwZWNpZmllZCBkYXRhIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG1hcAotICoK LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLwotc3RhdGljIHZvaWQgc3dhcF93b3Jkcyh2b2lkICpkYXRhLCB1 bnNpZ25lZCBzaXosIHVuc2lnbmVkIGJpdG1hcCkKLXsKLQlyZWdpc3RlciBpbnQgaTsKLSNpZiBU QVJHRVRfQVVfQklUUyA8IDE2Ci0JcmVnaXN0ZXIgdTE2ICpzcDsKLSNlbmRpZgotCXJlZ2lzdGVy IHUzMiAqbHA7Ci0KLQlzaXogLz0gc2l6ZW9mKHUxNik7Ci0KLSNpZiBUQVJHRVRfQVVfQklUUyA8 IDE2Ci0JLyogcGFzcyAxOiBkbyBhbGwgdGhlIGJ5dGVzICovCi0JaSA9IHNpejsKLQlzcCA9ICh1 MTYgKikgZGF0YTsKLQlkbyB7Ci0JCXJlZ2lzdGVyIHUxNiB0bXA7Ci0KLQkJdG1wID0gKnNwOwot CQkqc3ArKyA9IFNXQVAxNkJZOCh0bXApOwotCX0gd2hpbGUgKChpIC09IDEpID4gMCk7Ci0jZW5k aWYKLQotI2lmIFRBUkdFVF9BVV9CSVRTIDwgMzIKLQkvKiBwYXNzIDI6IGZpeHVwIHRoZSAzMi1i aXQgd29yZHMgKi8KLQlpID0gc2l6ID4+IDE7Ci0JbHAgPSAodTMyICopIGRhdGE7Ci0JZG8gewot CQlpZiAoKGJpdG1hcCAmIDEpID09IDApIHsKLQkJCXJlZ2lzdGVyIHUzMiB0bXA7Ci0JCQl0bXAg PSAqbHA7Ci0JCQkqbHAgPSBTV0FQMzJCWTE2KHRtcCk7Ci0JCX0KLQkJbHAgKz0gMTsKLQkJYml0 bWFwID4+PSAxOwotCX0gd2hpbGUgKChpIC09IDEpID4gMCk7Ci0jZW5kaWYKLX0JCQkJLyogc3dh cF93b3JkcyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlIGNvcHlfdGd0X3N0 cmluZ3MKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZHN0cAkJRGVzdGluYXRpb24gYWRkcmVzcy4g IEFzc3VtZWQgdG8gYmUgMzItYml0IGFsaWduZWQKLSAqCXNyY3AJCVNvdXJjZSBhZGRyZXNzLiAg QXNzdW1lZCB0byBiZSAzMi1iaXQgYWxpZ25lZAotICoJY2hhcmNvdW50CU51bWJlciBvZiBjaGFy YWN0ZXJzIHRvIGNvcHkuCi0gKgotICogRWZmZWN0OgotICoJQ29waWVzIHN0cmluZ3MgZnJvbSB0 aGUgc291cmNlICh3aGljaCBpcyBpbiB1c3VhbCAuZG9mIGZpbGUgb3JkZXIgb24KLSAqIHRoZSBs b2FkaW5nIHByb2Nlc3NvcikgdG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAod2hpY2ggc2hvdWxk IGJlIGluIHByb3BlcgotICogdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgb3JkZXIpLiAgTWFrZXMg c3VyZSB0aGUgbGFzdCBzdHJpbmcgaW4gdGhlCi0gKiBidWZmZXIgaXMgTlVMTCB0ZXJtaW5hdGVk IChmb3Igc2FmZXR5KS4KLSAqIFJldHVybnMgdGhlIGZpcnN0IHVudXNlZCBkZXN0aW5hdGlvbiBh ZGRyZXNzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCi1zdGF0aWMgY2hhciAqY29weV90Z3Rfc3RyaW5n cyh2b2lkICpkc3RwLCB2b2lkICpzcmNwLCB1bnNpZ25lZCBjaGFyY291bnQpCi17Ci0JcmVnaXN0 ZXIgdGd0X2F1X3QgKnNyYyA9ICh0Z3RfYXVfdCAqKSBzcmNwOwotCXJlZ2lzdGVyIHRndF9hdV90 ICpkc3QgPSAodGd0X2F1X3QgKikgZHN0cDsKLQlyZWdpc3RlciBpbnQgY250ID0gY2hhcmNvdW50 OwotCi0JZG8gewotI2lmIFRBUkdFVF9BVV9CSVRTIDw9IEJJVFNfUEVSX0FVCi0JCS8qIGJ5dGUt c3dhcHBpbmcgaXNzdWVzIG1heSBleGlzdCBmb3Igc3RyaW5ncyBvbiB0YXJnZXQgKi8KLQkJKmRz dCsrID0gKnNyYysrOwotI2Vsc2UKLQkJKmRzdCsrID0gKnNyYysrOwotI2VuZGlmCi0JfSB3aGls ZSAoKGNudCAtPSAoc2l6ZW9mKHRndF9hdV90KSAqIEJJVFNfUEVSX0FVIC8gQklUU19QRVJfQllU RSkpID4gMCk7Ci0JLyphcHBseSBmb3JjZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RyaW5nIHRh YmxlIGhhcyBudWxsIHRlcm1pbmF0b3IgKi8KLSNpZiAoQklUU19QRVJfQVUgPT0gQklUU19QRVJf QllURSkgJiYgKFRBUkdFVF9BVV9CSVRTID09IEJJVFNfUEVSX0JZVEUpCi0JZHN0Wy0xXSA9IDA7 Ci0jZWxzZQotCS8qIGxpdHRsZSBlbmRpYW4gKi8KLQlkc3RbLTFdICY9ICgxIDw8IChCSVRTX1BF Ul9BVSAtIEJJVFNfUEVSX0JZVEUpKSAtIDE7Ci0jZW5kaWYKLQlyZXR1cm4gKGNoYXIgKilkc3Q7 Ci19CQkJCS8qIGNvcHlfdGd0X3N0cmluZ3MgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBy b2NlZHVyZSBpbml0X21vZHVsZV9oYW5kbGUKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJbm9uZQot ICoKLSAqIEVmZmVjdDoKLSAqCUluaXRpYWxpemVzIHRoZSBtb2R1bGUgaGFuZGxlIHdlIHVzZSB0 byBlbmFibGUgdW5sb2FkaW5nLCBhbmQgaW5zdGFsbHMKLSAqIHRoZSBkZWJ1ZyBpbmZvcm1hdGlv biByZXF1aXJlZCBieSB0aGUgdGFyZ2V0LgotICoKLSAqIE5vdGVzOgotICogVGhlIGhhbmRsZSBy ZXR1cm5lZCBmcm9tIGR5bmFtaWNfbG9hZF9tb2R1bGUgbmVlZHMgdG8gZW5jYXBzdWxhdGUgYWxs IHRoZQotICogYWxsb2NhdGlvbnMgZG9uZSBmb3IgdGhlIG1vZHVsZSwgYW5kIGVuYWJsZSB0aGVt IHBsdXMgdGhlIG1vZHVsZXMgc3ltYm9scyB0bwotICogYmUgZGVhbGxvY2F0ZWQuCi0gKgotICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCi0jaWZuZGVmIF9CSUdfRU5ESUFOCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGxkcl9zZWN0aW9uX2luZm8gZGxsdmlld19pbmZvX2luaXQgPSB7ICIuZGxsdmlldyIsIDAsIDAs Ci0JKGxkcl9hZGRyKS0xLCBEQkdfTElTVF9QQUdFLCBETE9BRF9EQVRBLCAwCi19OwotI2Vsc2UK LXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBkbGx2aWV3X2luZm9faW5pdCA9 IHsgIi5kbGx2aWV3IiwgMCwgMCwKLQkobGRyX2FkZHIpLTEsIERMT0FEX0RBVEEsIERCR19MSVNU X1BBR0UsIDAKLX07Ci0jZW5kaWYKLXN0YXRpYyB2b2lkIGluaXRfbW9kdWxlX2hhbmRsZShzdHJ1 Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlzdHJ1Y3QgbXlfaGFuZGxlICpobmRsOwotCXUx NiBjdXJyX3NlY3Q7Ci0Jc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmFzZWNzOwotCXN0cnVjdCBk bGxfbW9kdWxlICpkYm1vZDsKLQlzdHJ1Y3QgZGxsX3NlY3QgKmRic2VjOwotCXN0cnVjdCBkYmdf bWlycm9yX3Jvb3QgKm1saXN0OwotCXJlZ2lzdGVyIGNoYXIgKmNwOwotCXN0cnVjdCBtb2R1bGVz X2hlYWRlciBtaGRyOwotCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIGRsbHZpZXdfaW5mbzsKLQlz dHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmRlYnVnX21pcnJvcl9zeW07Ci0KLQlobmRsID0gZGx0aGlz LT5teWhhbmRsZTsKLQlpZiAoIWhuZGwpCi0JCXJldHVybjsJCS8qIG11c3QgYmUgZXJyb3JzIGRl dGVjdGVkLCBzbyBmb3JnZXQgaXQgKi8KLQotCS8qICBTdG9yZSB0aGUgc2VjdGlvbiBjb3VudCAq LwotCWhuZGwtPnNlY25fY291bnQgPSBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50OwotCi0J LyogIElmIGEgdHJhbXBvbGluZSBzZWN0aW9uIHdhcyBjcmVhdGVkLCBhZGQgaXQgaW4gKi8KLQlp ZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKQotCQlobmRsLT5zZWNu X2NvdW50ICs9IDE7Ci0KLQlobmRsLT5zZWNuX2NvdW50ID0gaG5kbC0+c2Vjbl9jb3VudCA8PCAx OwotCi0JaG5kbC0+c2Vjbl9jb3VudCA9IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQgPDwg MTsKLSNpZm5kZWYgVEFSR0VUX0VORElBTk5FU1MKLQlpZiAoZGx0aGlzLT5iaWdfZV90YXJnZXQp Ci0JCWhuZGwtPnNlY25fY291bnQgKz0gMTsJLyogZmxhZyBmb3IgYmlnLWVuZGlhbiAqLwotI2Vu ZGlmCi0JaWYgKGRsdGhpcy0+ZGxvYWRfZXJyY291bnQpCi0JCXJldHVybjsJCS8qIGFiYW5kb24g aWYgZXJyb3JzIGRldGVjdGVkICovCi0JLyogTG9jYXRlIHRoZSBzeW1ib2wgdGhhdCBuYW1lcyB0 aGUgaGVhZGVyIGZvciB0aGUgQ0NTIGRlYnVnIGxpc3QKLQkgICBvZiBtb2R1bGVzLiBJZiBub3Qg Zm91bmQsIHdlIGp1c3QgZG9uJ3QgZ2VuZXJhdGUgdGhlIGRlYnVnIHJlY29yZC4KLQkgICBJZiBm b3VuZCwgd2UgY3JlYXRlIG91ciBtb2R1bGVzIGxpc3QuICBXZSBtYWtlIHN1cmUgdG8gY3JlYXRl IHRoZQotCSAgIGxvYWRlcl9kbGx2aWV3X3Jvb3QgZXZlbiBpZiB0aGVyZSBpcyBubyByZWxvY2F0 aW9uIGluZm8gdG8gcmVjb3JkLAotCSAgIGp1c3QgdG8gdHJ5IHRvIHB1dCBib3RoIHN5bWJvbHMg aW4gdGhlIHNhbWUgc3ltYm9sIHRhYmxlIGFuZAotCSAgIG1vZHVsZS4gKi8KLQlkZWJ1Z19taXJy b3Jfc3ltID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2woZGx0aGlzLT5teXN5 bSwKLQkJCQkJCQlsb2FkZXJfZGxsdmlld19yb290KTsKLQlpZiAoIWRlYnVnX21pcnJvcl9zeW0p IHsKLQkJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkbG1vZHN5bTsKLQkJc3RydWN0IGRiZ19taXJy b3Jfcm9vdCAqbWxzdDsKLQotCQkvKiBvdXIgcm9vdCBzeW1ib2wgaXMgbm90IHlldCBwcmVzZW50 OwotCQkgICBjaGVjayBpZiB3ZSBoYXZlIERMTW9kdWxlcyBkZWZpbmVkICovCi0JCWRsbW9kc3lt ID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2woZGx0aGlzLT5teXN5bSwKLQkJ CQkJCQlMSU5LRVJfTU9EVUxFU19IRUFERVIpOwotCQlpZiAoIWRsbW9kc3ltKQotCQkJcmV0dXJu OwkvKiBubyBETE1vZHVsZXMgbGlzdCBzbyBubyBkZWJ1ZyBpbmZvICovCi0JCS8qIGlmIHdlIGhh dmUgRExNb2R1bGVzIGRlZmluZWQsIGNvbnN0cnVjdCBvdXIgaGVhZGVyICovCi0JCW1sc3QgPSAo c3RydWN0IGRiZ19taXJyb3Jfcm9vdCAqKQotCQkgICAgZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxs b2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJCQkJCSAgc2l6ZW9mKHN0cnVjdAotCQkJCQkJCSBkYmdf bWlycm9yX3Jvb3QpKTsKLQkJaWYgKCFtbHN0KSB7Ci0JCQlETF9FUlJPUihlcnJfYWxsb2MsIHNp emVvZihzdHJ1Y3QgZGJnX21pcnJvcl9yb290KSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJbWxzdC0+ bmV4dCA9IE5VTEw7Ci0JCW1sc3QtPmNoYW5nZXMgPSAwOwotCQltbHN0LT5yZWZjb3VudCA9IDA7 Ci0JCW1sc3QtPmRidGhpcyA9IFREQVRBX1RPX1RBRERSKGRsbW9kc3ltLT52YWx1ZSk7Ci0JCS8q IGFkZCBvdXIgcm9vdCBzeW1ib2wgKi8KLQkJZGVidWdfbWlycm9yX3N5bSA9IGRsdGhpcy0+bXlz eW0tPmFkZF90b19zeW1ib2xfdGFibGUKLQkJICAgIChkbHRoaXMtPm15c3ltLCBsb2FkZXJfZGxs dmlld19yb290LAotCQkgICAgICh1bnNpZ25lZClkbHRoaXMtPm15aGFuZGxlKTsKLQkJaWYgKCFk ZWJ1Z19taXJyb3Jfc3ltKSB7Ci0JCQkvKiBmYWlsZWQsIHJlY292ZXIgbWVtb3J5ICovCi0JCQlk bHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIG1sc3QpOwotCQkJ cmV0dXJuOwotCQl9Ci0JCWRlYnVnX21pcnJvcl9zeW0tPnZhbHVlID0gKHUzMikgbWxzdDsKLQl9 Ci0JLyogRmlyc3QgY3JlYXRlIHRoZSBETEx2aWV3IHJlY29yZCBhbmQgc3R1ZmYgaXQgaW50byB0 aGUgYnVmZmVyLgotCSAgIFRoZW4gd3JpdGUgaXQgdG8gdGhlIERTUC4gIFJlY29yZCBwZXJ0aW5l bnQgbG9jYXRpb25zIGluIG91ciBobmRsLAotCSAgIGFuZCBhZGQgaXQgdG8gdGhlIHBlci1wcm9j ZXNzb3IgbGlzdCBvZiBoYW5kbGVzIHdpdGggZGVidWcgaW5mby4gKi8KLSNpZm5kZWYgREVCVUdf SEVBREVSX0lOX0xPQURFUgotCW1saXN0ID0gKHN0cnVjdCBkYmdfbWlycm9yX3Jvb3QgKilkZWJ1 Z19taXJyb3Jfc3ltLT52YWx1ZTsKLQlpZiAoIW1saXN0KQotCQlyZXR1cm47Ci0jZWxzZQotCW1s aXN0ID0gKHN0cnVjdCBkYmdfbWlycm9yX3Jvb3QgKikmZGVidWdfbGlzdF9oZWFkZXI7Ci0jZW5k aWYKLQlobmRsLT5kbS5yb290ID0gbWxpc3Q7CS8qIHNldCBwb2ludGVyIHRvIHJvb3QgaW50byBv dXIgaGFuZGxlICovCi0JaWYgKCFkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50KQotCQlyZXR1 cm47CQkvKiBubyBsb2FkIGFkZHJlc3NlcyB0byBiZSByZWNvcmRlZCAqLwotCS8qIHJldXNlIHRl bXBvcmFyeSBzeW1ib2wgc3RvcmFnZSAqLwotCWRibW9kID0gKHN0cnVjdCBkbGxfbW9kdWxlICop ZGx0aGlzLT5sb2NhbF9zeW10YWI7Ci0JLyogQ3JlYXRlIHRoZSBETEx2aWV3IHJlY29yZCBpbiB0 aGUgbWVtb3J5IHdlIHJldGFpbiBmb3Igb3VyIGhhbmRsZSAqLwotCWRibW9kLT5udW1fc2VjdHMg PSBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50OwotCWRibW9kLT50aW1lc3RhbXAgPSBkbHRo aXMtPnZlcmlmeS5kdl90aW1kYXQ7Ci0JZGJtb2QtPnZlcnNpb24gPSBJTklUX1ZFUlNJT047Ci0J ZGJtb2QtPnZlcmlmaWNhdGlvbiA9IFZFUklGSUNBVElPTjsKLQlhc2VjcyA9IGRsdGhpcy0+bGRy X3NlY3Rpb25zOwotCWRic2VjID0gZGJtb2QtPnNlY3RzOwotCWZvciAoY3Vycl9zZWN0ID0gZGx0 aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudDsKLQkgICAgIGN1cnJfc2VjdCA+IDA7IGN1cnJfc2Vj dCAtPSAxKSB7Ci0JCWRic2VjLT5zZWN0X2xvYWRfYWRyID0gYXNlY3MtPmxvYWRfYWRkcjsKLQkJ ZGJzZWMtPnNlY3RfcnVuX2FkciA9IGFzZWNzLT5ydW5fYWRkcjsKLQkJZGJzZWMgKz0gMTsKLQkJ YXNlY3MgKz0gMTsKLQl9Ci0KLQkvKiAgSWYgYSB0cmFtcG9saW5lIHNlY3Rpb24gd2FzIGNyZWF0 ZWQgZ28gYWhlYWQgYW5kIGFkZCBpdHMgaW5mbyAqLwotCWlmIChkbHRoaXMtPnRyYW1wLnRyYW1w X3NlY3RfbmV4dF9hZGRyICE9IDApIHsKLQkJZGJtb2QtPm51bV9zZWN0cysrOwotCQlkYnNlYy0+ c2VjdF9sb2FkX2FkciA9IGFzZWNzLT5sb2FkX2FkZHI7Ci0JCWRic2VjLT5zZWN0X3J1bl9hZHIg PSBhc2Vjcy0+cnVuX2FkZHI7Ci0JCWRic2VjKys7Ci0JCWFzZWNzKys7Ci0JfQotCi0JLyogbm93 IGNyYW0gaW4gdGhlIG5hbWVzICovCi0JY3AgPSBjb3B5X3RndF9zdHJpbmdzKGRic2VjLCBkbHRo aXMtPnN0cl9oZWFkLAotCQkJICAgICAgZGx0aGlzLT5kZWJ1Z19zdHJpbmdfc2l6ZSk7Ci0KLQkv KiBJZiBhIHRyYW1wb2xpbmUgc2VjdGlvbiB3YXMgY3JlYXRlZCwgYWRkIGl0cyBuYW1lIHNvIERM TFZpZXcKLQkgKiBjYW4gc2hvdyB0aGUgdXNlciB0aGUgc2VjdGlvbiBpbmZvLiAqLwotCWlmIChk bHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyICE9IDApIHsKLQkJY3AgPSBjb3B5X3Rn dF9zdHJpbmdzKGNwLAotCQkJCSAgICAgIGRsdGhpcy0+dHJhbXAuZmluYWxfc3RyaW5nX3RhYmxl LAotCQkJCSAgICAgIHN0cmxlbihkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSkgKwot CQkJCSAgICAgIDEpOwotCX0KLQotCS8qIHJvdW5kIG9mZiB0aGUgc2l6ZSBvZiB0aGUgZGVidWcg cmVjb3JkLCBhbmQgcmVtZW1iZXIgc2FtZSAqLwotCWhuZGwtPmRtLmRic2l6ID0gSE9TVF9UT19U REFUQV9ST1VORChjcCAtIChjaGFyICopZGJtb2QpOwotCSpjcCA9IDA7CQkvKiBzdHJpY3RseSB0 byBtYWtlIG91ciB0ZXN0IGhhcm5lc3MgaGFwcHkgKi8KLQlkbGx2aWV3X2luZm8gPSBkbGx2aWV3 X2luZm9faW5pdDsKLQlkbGx2aWV3X2luZm8uc2l6ZSA9IFREQVRBX1RPX1RBRERSKGhuZGwtPmRt LmRic2l6KTsKLQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250ZXh0IHRvIGRlZmF1bHQgaGVhcCAq LwotCWRsbHZpZXdfaW5mby5jb250ZXh0ID0gMDsKLQlobmRsLT5kbS5jb250ZXh0ID0gMDsKLQkv KiBmaWxsIGluIG5leHQgcG9pbnRlciBhbmQgc2l6ZSAqLwotCWlmIChtbGlzdC0+bmV4dCkgewot CQlkYm1vZC0+bmV4dF9tb2R1bGUgPSBUQUREUl9UT19UREFUQShtbGlzdC0+bmV4dC0+ZG0uZGJ0 aGlzKTsKLQkJZGJtb2QtPm5leHRfbW9kdWxlX3NpemUgPSBtbGlzdC0+bmV4dC0+ZG0uZGJzaXo7 Ci0JfSBlbHNlIHsKLQkJZGJtb2QtPm5leHRfbW9kdWxlX3NpemUgPSAwOwotCQlkYm1vZC0+bmV4 dF9tb2R1bGUgPSAwOwotCX0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9uLURTUCBETEx2aWV3 IGRlYnVnIHJlY29yZCAqLwotCWlmICghZGx0aGlzLT5teWFsbG9jKQotCQlyZXR1cm47Ci0JaWYg KCFkbHRoaXMtPm15YWxsb2MtPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlhbGxvYywgJmRsbHZp ZXdfaW5mbywKLQkJCQkJICAgICBIT1NUX1RPX1RBRERSKHNpemVvZih1MzIpKSkpIHsKLQkJcmV0 dXJuOwotCX0KLQkvKiBTdG9yZSBsb2FkIGFkZHJlc3Mgb2YgLmRsbHZpZXcgc2VjdGlvbiAqLwot CWhuZGwtPmRtLmRidGhpcyA9IGRsbHZpZXdfaW5mby5sb2FkX2FkZHI7Ci0JLyogU3RvcmUgbWVt b3J5IGNvbnRleHQgKHNlZ2lkKSBpbiB3aGljaCAuZGxsdmlldyBzZWN0aW9uCi0JICogd2FzICBh bGxvY2F0ZWQgKi8KLQlobmRsLT5kbS5jb250ZXh0ID0gZGxsdmlld19pbmZvLmNvbnRleHQ7Ci0J bWxpc3QtPnJlZmNvdW50ICs9IDE7Ci0JLyogc3dhcCBieXRlcyBpbiB0aGUgZW50aXJlIGRlYnVn IHJlY29yZCwgYnV0IG5vdCB0aGUgc3RyaW5nIHRhYmxlICovCi0JaWYgKFRBUkdFVF9FTkRJQU5O RVNTX0RJRkZFUlMoVEFSR0VUX0JJR19FTkRJQU4pKSB7Ci0JCXN3YXBfd29yZHMoZGJtb2QsIChj aGFyICopZGJzZWMgLSAoY2hhciAqKWRibW9kLAotCQkJICAgRExMX01PRFVMRV9CSVRNQVApOwot CX0KLQkvKiBVcGRhdGUgdGhlIERMTHZpZXcgbGlzdCBvbiB0aGUgRFNQIHdyaXRlIG5ldyByZWNv cmQgKi8KLQlpZiAoIWRsdGhpcy0+bXlpby0+d3JpdGVtZW0oZGx0aGlzLT5teWlvLCBkYm1vZCwK LQkJCQkgICAgZGxsdmlld19pbmZvLmxvYWRfYWRkciwgJmRsbHZpZXdfaW5mbywKLQkJCQkgICAg VEFERFJfVE9fSE9TVChkbGx2aWV3X2luZm8uc2l6ZSkpKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyog d3JpdGUgbmV3IGhlYWRlciAqLwotCW1oZHIuZmlyc3RfbW9kdWxlX3NpemUgPSBobmRsLT5kbS5k YnNpejsKLQltaGRyLmZpcnN0X21vZHVsZSA9IFRBRERSX1RPX1REQVRBKGRsbHZpZXdfaW5mby5s b2FkX2FkZHIpOwotCS8qIHN3YXAgYnl0ZXMgaW4gdGhlIG1vZHVsZSBoZWFkZXIsIGlmIG5lZWRl ZCAqLwotCWlmIChUQVJHRVRfRU5ESUFOTkVTU19ESUZGRVJTKFRBUkdFVF9CSUdfRU5ESUFOKSkg ewotCQlzd2FwX3dvcmRzKCZtaGRyLCBzaXplb2Yoc3RydWN0IG1vZHVsZXNfaGVhZGVyKSAtIHNp emVvZih1MTYpLAotCQkJICAgTU9EVUxFU19IRUFERVJfQklUTUFQKTsKLQl9Ci0JZGxsdmlld19p bmZvID0gZGxsdmlld19pbmZvX2luaXQ7Ci0JaWYgKCFkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRs dGhpcy0+bXlpbywgJm1oZHIsIG1saXN0LT5kYnRoaXMsCi0JCQkJICAgICZkbGx2aWV3X2luZm8s Ci0JCQkJICAgIHNpemVvZihzdHJ1Y3QgbW9kdWxlc19oZWFkZXIpIC0KLQkJCQkgICAgc2l6ZW9m KHUxNikpKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyogQWRkIHRoZSBtb2R1bGUgaGFuZGxlIHRvIHRo aXMgcHJvY2Vzc29yJ3MgbGlzdAotCSAgIG9mIGhhbmRsZXMgd2l0aCBkZWJ1ZyBpbmZvICovCi0J aG5kbC0+ZG0ubmV4dCA9IG1saXN0LT5uZXh0OwotCWlmIChobmRsLT5kbS5uZXh0KQotCQlobmRs LT5kbS5uZXh0LT5kbS5wcmV2ID0gaG5kbDsKLQlobmRsLT5kbS5wcmV2ID0gKHN0cnVjdCBteV9o YW5kbGUgKiltbGlzdDsKLQltbGlzdC0+bmV4dCA9IGhuZGw7CS8qIGluc2VydCBhZnRlciByb290 ICovCi19CQkJCS8qIGluaXRfbW9kdWxlX2hhbmRsZSAqLwotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot ICogUHJvY2VkdXJlIGR5bmFtaWNfdW5sb2FkX21vZHVsZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0g KgltaGFuZGxlCUEgbW9kdWxlIGhhbmRsZSBmcm9tIGR5bmFtaWNfbG9hZF9tb2R1bGUKLSAqCXN5 bXMJSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCi0gKglh bGxvYwlUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgotICoKLSAqIEVmZmVjdDoKLSAqCVRo ZSBtb2R1bGUgc3BlY2lmaWVkIGJ5IG1oYW5kbGUgaXMgdW5sb2FkZWQuICBVbmxvYWRpbmcgY2F1 c2VzIGFsbAotICogdGFyZ2V0IG1lbW9yeSB0byBiZSBkZWFsbG9jYXRlZCwgYWxsIHN5bWJvbHMg ZGVmaW5lZCBieSB0aGUgbW9kdWxlIHRvCi0gKiBiZSBwdXJnZWQsIGFuZCBhbnkgaG9zdC1zaWRl IHN0b3JhZ2UgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yCi0gKiB0aGlzIG1vZHVsZSB0 byBiZSByZWxlYXNlZC4KLSAqCi0gKiBSZXR1cm5zOgotICoJWmVybyBmb3Igc3VjY2Vzcy4gT24g ZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVjdGVkIGlzIHJldHVybmVkLgotICogSW5k aXZpZHVhbCBlcnJvcnMgYXJlIHJlcG9ydGVkIHVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgot ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCi1pbnQgZHluYW1pY191bmxvYWRfbW9kdWxlKHZvaWQgKm1oYW5k bGUsCi0JCQkgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCi0JCQkgIHN0cnVjdCBk eW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCi0JCQkgIHN0cnVjdCBkeW5hbWljX2xvYWRl cl9pbml0aWFsaXplICppbml0KQotewotCXMxNiBjdXJyX3NlY3Q7Ci0Jc3RydWN0IGxkcl9zZWN0 aW9uX2luZm8gKmFzZWNzOwotCXN0cnVjdCBteV9oYW5kbGUgKmhuZGw7Ci0Jc3RydWN0IGRiZ19t aXJyb3Jfcm9vdCAqcm9vdDsKLQl1bnNpZ25lZCBlcnJjb3VudCA9IDA7Ci0Jc3RydWN0IGxkcl9z ZWN0aW9uX2luZm8gZGxsdmlld19pbmZvID0gZGxsdmlld19pbmZvX2luaXQ7Ci0Jc3RydWN0IG1v ZHVsZXNfaGVhZGVyIG1oZHI7Ci0KLQlobmRsID0gKHN0cnVjdCBteV9oYW5kbGUgKiltaGFuZGxl OwotCWlmICghaG5kbCkKLQkJcmV0dXJuIDA7CS8qIGlmIGhhbmRsZSBpcyBudWxsLCBub3RoaW5n IHRvIGRvICovCi0JLyogQ2xlYXIgb3V0IHRoZSBtb2R1bGUgc3ltYm9scwotCSAqIE5vdGUgdGhh dCBpZiB0aGlzIGlzIHRoZSBtb2R1bGUgdGhhdCBkZWZpbmVkIE1PRFVMRVNfSEVBREVSCi0JICh0 aGUgaGVhZCBvZiB0aGUgdGFyZ2V0IGRlYnVnIGxpc3QpCi0JICogdGhlbiB0aGlzIG9wZXJhdGlv biB3aWxsIGJsb3cgYXdheSB0aGF0IHN5bWJvbC4KLQkgSXQgd2lsbCB0aGVyZWZvcmUgYmUgaW1w b3NzaWJsZSBmb3Igc3Vic2VxdWVudAotCSAqIG9wZXJhdGlvbnMgdG8gYWRkIGVudHJpZXMgdG8g dGhpcyB1bi1yZWZlcmVuY2VhYmxlIGxpc3QuICovCi0JaWYgKCFzeW1zKQotCQlyZXR1cm4gMTsK LQlzeW1zLT5wdXJnZV9zeW1ib2xfdGFibGUoc3ltcywgKHVuc2lnbmVkKWhuZGwpOwotCS8qIERl YWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBmb3Igc2VjdGlvbnMKLQkgKiBOT1RFOiBUaGUgdHJhbXBv bGluZSBzZWN0aW9uLCBpZiBjcmVhdGVkLCBnZXRzIGRlbGV0ZWQgaGVyZSwgdG9vICovCi0KLQlh c2VjcyA9IGhuZGwtPnNlY25zOwotCWlmIChhbGxvYykKLQkJZm9yIChjdXJyX3NlY3QgPSAoaG5k bC0+c2Vjbl9jb3VudCA+PiAxKTsgY3Vycl9zZWN0ID4gMDsKLQkJICAgICBjdXJyX3NlY3QgLT0g MSkgewotCQkJYXNlY3MtPm5hbWUgPSBOVUxMOwotCQkJYWxsb2MtPmRsb2FkX2RlYWxsb2NhdGUo YWxsb2MsIGFzZWNzKyspOwotCQl9Ci0Jcm9vdCA9IGhuZGwtPmRtLnJvb3Q7Ci0JaWYgKCFyb290 KSB7Ci0JCS8qIHRoZXJlIGlzIGEgZGVidWcgbGlzdCBjb250YWluaW5nIHRoaXMgbW9kdWxlICov Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCWlmICghaG5kbC0+ZG0uZGJ0aGlzKSB7CS8qIHRhcmdl dC1zaWRlIGRsbHZpZXcgcmVjb3JkIGV4aXN0cyAqLwotCQlnb3RvIGxvb3BfZW5kOwotCX0KLQkv KiBSZXRyaWV2ZSBtZW1vcnkgY29udGV4dCBpbiB3aGljaCAuZGxsdmlldyB3YXMgYWxsb2NhdGVk ICovCi0JZGxsdmlld19pbmZvLmNvbnRleHQgPSBobmRsLT5kbS5jb250ZXh0OwotCWlmIChobmRs LT5kbS5wcmV2ID09IGhuZGwpCi0JCWdvdG8gZXhpdHVubHRndDsKLQotCS8qIHRhcmdldC1zaWRl IGRsbHZpZXcgcmVjb3JkIGlzIGluIGxpc3QgKi8KLQkvKiBkZXF1ZXVlIHRoaXMgcmVjb3JkIGZy b20gb3VyIEdQUC1zaWRlIG1pcnJvciBsaXN0ICovCi0JaG5kbC0+ZG0ucHJldi0+ZG0ubmV4dCA9 IGhuZGwtPmRtLm5leHQ7Ci0JaWYgKGhuZGwtPmRtLm5leHQpCi0JCWhuZGwtPmRtLm5leHQtPmRt LnByZXYgPSBobmRsLT5kbS5wcmV2OwotCS8qIFVwZGF0ZSBuZXh0X21vZHVsZSBvZiBwcmV2aW91 cyBlbnRyeSBpbiB0YXJnZXQgbGlzdAotCSAqIFdlIGFyZSB1c2luZyBtaGRyIGhlcmUgYXMgYSBz dXJyb2dhdGUgZm9yIGVpdGhlciBhCi0JIHN0cnVjdCBtb2R1bGVzX2hlYWRlciBvciBhIGRsbF9t b2R1bGUgKi8KLQlpZiAoaG5kbC0+ZG0ubmV4dCkgewotCQltaGRyLmZpcnN0X21vZHVsZSA9IFRB RERSX1RPX1REQVRBKGhuZGwtPmRtLm5leHQtPmRtLmRidGhpcyk7Ci0JCW1oZHIuZmlyc3RfbW9k dWxlX3NpemUgPSBobmRsLT5kbS5uZXh0LT5kbS5kYnNpejsKLQl9IGVsc2UgewotCQltaGRyLmZp cnN0X21vZHVsZSA9IDA7Ci0JCW1oZHIuZmlyc3RfbW9kdWxlX3NpemUgPSAwOwotCX0KLQlpZiAo IWluaXQpCi0JCWdvdG8gZXhpdHVubHRndDsKLQotCWlmICghaW5pdC0+Y29ubmVjdChpbml0KSkg ewotCQlkbG9hZF9zeW1zX2Vycm9yKHN5bXMsIGljb25uZWN0KTsKLQkJZXJyY291bnQgKz0gMTsK LQkJZ290byBleGl0dW5sdGd0OwotCX0KLQkvKiBzd2FwIGJ5dGVzIGluIHRoZSBtb2R1bGUgaGVh ZGVyLCBpZiBuZWVkZWQgKi8KLQlpZiAoVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhobmRsLT5z ZWNuX2NvdW50ICYgMHgxKSkgewotCQlzd2FwX3dvcmRzKCZtaGRyLCBzaXplb2Yoc3RydWN0IG1v ZHVsZXNfaGVhZGVyKSAtIHNpemVvZih1MTYpLAotCQkJICAgTU9EVUxFU19IRUFERVJfQklUTUFQ KTsKLQl9Ci0JaWYgKCFpbml0LT53cml0ZW1lbShpbml0LCAmbWhkciwgaG5kbC0+ZG0ucHJldi0+ ZG0uZGJ0aGlzLAotCQkJICAgICZkbGx2aWV3X2luZm8sIHNpemVvZihzdHJ1Y3QgbW9kdWxlc19o ZWFkZXIpIC0KLQkJCSAgICBzaXplb2YobWhkci51cGRhdGVfZmxhZykpKSB7Ci0JCWRsb2FkX3N5 bXNfZXJyb3Ioc3ltcywgZGx2d3JpdGUpOwotCQllcnJjb3VudCArPSAxOwotCX0KLQkvKiB1cGRh dGUgY2hhbmdlIGNvdW50ZXIgKi8KLQlyb290LT5jaGFuZ2VzICs9IDE7Ci0JaWYgKCFpbml0LT53 cml0ZW1lbShpbml0LCAmKHJvb3QtPmNoYW5nZXMpLAotCQkJICAgIHJvb3QtPmRidGhpcyArIEhP U1RfVE9fVEFERFIKLQkJCSAgICAoc2l6ZW9mKG1oZHIuZmlyc3RfbW9kdWxlKSArCi0JCQkgICAg IHNpemVvZihtaGRyLmZpcnN0X21vZHVsZV9zaXplKSksCi0JCQkgICAgJmRsbHZpZXdfaW5mbywg c2l6ZW9mKG1oZHIudXBkYXRlX2ZsYWcpKSkgewotCQlkbG9hZF9zeW1zX2Vycm9yKHN5bXMsIGRs dndyaXRlKTsKLQkJZXJyY291bnQgKz0gMTsKLQl9Ci0JaW5pdC0+cmVsZWFzZShpbml0KTsKLWV4 aXR1bmx0Z3Q6Ci0JLyogcmVsZWFzZSB0YXJnZXQgc3RvcmFnZSAqLwotCWRsbHZpZXdfaW5mby5z aXplID0gVERBVEFfVE9fVEFERFIoaG5kbC0+ZG0uZGJzaXopOwotCWRsbHZpZXdfaW5mby5sb2Fk X2FkZHIgPSBobmRsLT5kbS5kYnRoaXM7Ci0JaWYgKGFsbG9jKQotCQlhbGxvYy0+ZGxvYWRfZGVh bGxvY2F0ZShhbGxvYywgJmRsbHZpZXdfaW5mbyk7Ci0Jcm9vdC0+cmVmY291bnQgLT0gMTsKLQkv KiB0YXJnZXQtc2lkZSBkbGx2aWV3IHJlY29yZCBleGlzdHMgKi8KLWxvb3BfZW5kOgotI2lmbmRl ZiBERUJVR19IRUFERVJfSU5fTE9BREVSCi0JaWYgKHJvb3QtPnJlZmNvdW50IDw9IDApIHsKLQkJ LyogaWYgYWxsIHJlZmVyZW5jZXMgZ29uZSwgYmxvdyBvZmYgdGhlIGhlYWRlciAqLwotCQkvKiBv dXIgcm9vdCBzeW1ib2wgbWF5IGJlIGdvbmUgZHVlIHRvIHRoZSBQdXJnZSBhYm92ZSwKLQkJICAg YnV0IGlmIG5vdCwgZG8gbm90IGRlc3Ryb3kgdGhlIHJvb3QgKi8KLQkJaWYgKHN5bXMtPmZpbmRf bWF0Y2hpbmdfc3ltYm9sCi0JCSAgICAoc3ltcywgbG9hZGVyX2RsbHZpZXdfcm9vdCkgPT0gTlVM TCkKLQkJCXN5bXMtPmRsb2FkX2RlYWxsb2NhdGUoc3ltcywgcm9vdCk7Ci0JfQotI2VuZGlmCi1m dW5jX2VuZDoKLQkvKiB0aGVyZSBpcyBhIGRlYnVnIGxpc3QgY29udGFpbmluZyB0aGlzIG1vZHVs ZSAqLwotCXN5bXMtPmRsb2FkX2RlYWxsb2NhdGUoc3ltcywgbWhhbmRsZSk7CS8qIHJlbGVhc2Ug b3VyIHN0b3JhZ2UgKi8KLQlyZXR1cm4gZXJyY291bnQ7Ci19CQkJCS8qIGR5bmFtaWNfdW5sb2Fk X21vZHVsZSAqLwotCi0jaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCi0vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgotICogUHJvY2VkdXJlIHVucGFja19uYW1lCi0gKgotICogUGFyYW1ldGVyczoKLSAq CXNvZmZzZXQJQnl0ZSBvZmZzZXQgaW50byB0aGUgc3RyaW5nIHRhYmxlCi0gKgotICogRWZmZWN0 OgotICoJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9m ZnNldCBzdXBwbGllZCwgb3IKLSAqIE5VTEwgZm9yIGVycm9yLgotICoKLSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLwotc3RhdGljIGNoYXIgKnVucGFja19uYW1lKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlz LCB1MzIgc29mZnNldCkKLXsKLQl1OCB0bXAsICpzcmM7Ci0JY2hhciAqZHN0OwotCi0JaWYgKHNv ZmZzZXQgPj0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpIHsKLQkJZGxvYWRfZXJy b3IoZGx0aGlzLCAiQmFkIHN0cmluZyB0YWJsZSBvZmZzZXQgIiBGTVRfVUkzMiwKLQkJCSAgICBz b2Zmc2V0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXNyYyA9ICh1aW50X2xlYXN0OF90ICopIGRs dGhpcy0+c3RyX2hlYWQgKwotCSAgICAoc29mZnNldCA+PiAoTE9HX0JJVFNfUEVSX0FVIC0gTE9H X0JJVFNfUEVSX0JZVEUpKTsKLQlkc3QgPSBkbHRoaXMtPnN0cl90ZW1wOwotCWlmIChzb2Zmc2V0 ICYgMSkKLQkJKmRzdCsrID0gKnNyYysrOwkvKiBvbmx5IDEgY2hhcmFjdGVyIGluIGZpcnN0IHdv cmQgKi8KLQlkbyB7Ci0JCXRtcCA9ICpzcmMrKzsKLQkJKmRzdCA9ICh0bXAgPj4gQklUU19QRVJf QllURSk7Ci0JCWlmICghKCpkc3QrKykpCi0JCQlicmVhazsKLQl9IHdoaWxlICgoKmRzdCsrID0g dG1wICYgQllURV9NQVNLKSk7Ci0JZGx0aGlzLT50ZW1wX2xlbiA9IGRzdCAtIGRsdGhpcy0+c3Ry X3RlbXA7Ci0JLyogc3F1aXJyZWwgYXdheSBsZW5ndGggaW5jbHVkaW5nIHRlcm1pbmF0aW5nIG51 bGwgKi8KLQlyZXR1cm4gZGx0aGlzLT5zdHJfdGVtcDsKLX0JCQkJLyogdW5wYWNrX25hbWUgKi8K LSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQv ZGxvYWRfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Rs b2FkX2ludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZDA3OWIuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZGxvYWRfaW50 ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKgotICogZGxvYWRfaW50 ZXJuYWwuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMg Zm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBU ZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwot ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJ UyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBP UgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9ETE9BRF9JTlRFUk5B TF8KLSNkZWZpbmUgX0RMT0FEX0lOVEVSTkFMXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K LQotLyoKLSAqIEludGVybmFsIHN0YXRlIGRlZmluaXRpb25zIGZvciB0aGUgZHluYW1pYyBsb2Fk ZXIKLSAqLwotCi0vKiB0eXBlIHVzZWQgZm9yIHJlbG9jYXRpb24gaW50ZXJtZWRpYXRlIHJlc3Vs dHMgKi8KLXR5cGVkZWYgczMyIHJ2YWx1ZTsKLQotLyogdW5zaWduZWQgdmVyc2lvbiBvZiBzYW1l OyBtdXN0IGhhdmUgYXQgbGVhc3QgYXMgbWFueSBiaXRzICovCi10eXBlZGVmIHUzMiB1cnZhbHVl OwotCi0vKgotICogRHluYW1pYyBsb2FkZXIgY29uZmlndXJhdGlvbiBjb25zdGFudHMKLSAqLwot LyogZXJyb3IgaXNzdWVkIGlmIGlucHV0IGhhcyBtb3JlIHNlY3Rpb25zIHRoYW4gdGhpcyBsaW1p dCAqLwotI2RlZmluZSBSRUFTT05BQkxFX1NFQ1RJT05fTElNSVQgMTAwCi0KLS8qIChBZGRyZXNz YWJsZSB1bml0KSB2YWx1ZSB1c2VkIHRvIGNsZWFyIEJTUyBzZWN0aW9uICovCi0jZGVmaW5lIERM T0FEX0ZJTExfQlNTIDAKLQotLyoKLSAqIFJlb3JkZXIgbWFwcyBleHBsYWluZWQgKD8pCi0gKgot ICogVGhlIGRvZmYgZmlsZSBmb3JtYXQgZGVmaW5lcyBhIDMyLWJpdCBwYXR0ZXJuIHVzZWQgdG8g ZGV0ZXJtaW5lIHRoZQotICogYnl0ZSBvcmRlciBvZiBhbiBpbWFnZSBiZWluZyByZWFkLiAgVGhh dCB2YWx1ZSBpcwotICogQllURV9SRVNIVUZGTEVfVkFMVUUgPT0gMHgwMDAxMDIwMwotICogRm9y IHB1cnBvc2VzIG9mIHRoZSByZW9yZGVyIHJvdXRpbmUsIHdlIHdvdWxkIHJhdGhlciBoYXZlIHRo ZSBhbGwtaXMtT0sKLSAqIGZvciAzMi1iaXRzIHBhdHRlcm4gYmUgMHgwMzAyMDEwMC4gIFRoaXMg Zmlyc3QgbWFjcm8gbWFrZXMgdGhlCi0gKiB0cmFuc2xhdGlvbiBmcm9tIGRvZmYgZmlsZSBoZWFk ZXIgdmFsdWUgdG8gTUFQIHZhbHVlOiAqLwotI2RlZmluZSBSRU9SREVSX01BUChyYXdtYXApICgo cmF3bWFwKSBeIDB4MzAzMDMwMykKLS8qIFRoaXMgdHJhbnNsYXRpb24gaXMgbWFkZSBpbiBkbG9h ZF9oZWFkZXJzLiAgVGhlcmVhZnRlciwgdGhlIGFsbC1pcy1PSwotICogdmFsdWUgZm9yIHRoZSBt YXBzIHN0b3JlZCBpbiBkbHRoaXMgaXMgUkVPUkRFUl9NQVAoQllURV9SRVNIVUZGTEVfVkFMVUUp LgotICogQnV0IHNhZGx5LCBub3QgYWxsIGJpdHMgb2YgdGhlIGRvZmYgZmlsZSBhcmUgMzItYml0 IGludGVnZXJzLgotICogVGhlIG5vdGFibGUgZXhjZXB0aW9ucyBhcmUgc3RyaW5ncyBhbmQgaW1h Z2UgYml0cy4KLSAqIFN0cmluZ3Mgb2JleSBob3N0IGJ5dGUgb3JkZXI6ICovCi0jaWYgZGVmaW5l ZChfQklHX0VORElBTikKLSNkZWZpbmUgSE9TVF9CWVRFX09SREVSKGNvb2tlZG1hcCkgKChjb29r ZWRtYXApIF4gMHgzMDMwMzAzKQotI2Vsc2UKLSNkZWZpbmUgSE9TVF9CWVRFX09SREVSKGNvb2tl ZG1hcCkgKGNvb2tlZG1hcCkKLSNlbmRpZgotLyogVGFyZ2V0IGJpdHMgY29uc2lzdCBvZiB0YXJn ZXQgQVVzIChjb3VsZCBiZSBieXRlcywgb3IgMTYtYml0cywKLSAqIG9yIDMyLWJpdHMpIHN0b3Jl ZCBhcyBhbiBhcnJheSBpbiBob3N0IG9yZGVyLiAgQSB0YXJnZXQgb3JkZXIKLSAqIG1hcCBpcyBk ZWZpbmVkIGJ5OiAqLwotI2lmICFkZWZpbmVkKF9CSUdfRU5ESUFOKSB8fCBUQVJHRVRfQVVfQklU UyA+IDE2Ci0jZGVmaW5lIFRBUkdFVF9PUkRFUihjb29rZWRtYXApIChjb29rZWRtYXApCi0jZWxp ZiBUQVJHRVRfQVVfQklUUyA+IDgKLSNkZWZpbmUgVEFSR0VUX09SREVSKGNvb2tlZG1hcCkgKChj b29rZWRtYXApIF4gMHgyMDIwMjAyKQotI2Vsc2UKLSNkZWZpbmUgVEFSR0VUX09SREVSKGNvb2tl ZG1hcCkgKChjb29rZWRtYXApIF4gMHgzMDMwMzAzKQotI2VuZGlmCi0KLS8qIGZvcndhcmQgZGVj bGFyYXRpb24gZm9yIGhhbmRsZSByZXR1cm5lZCBieSBkeW5hbWljIGxvYWRlciAqLwotc3RydWN0 IG15X2hhbmRsZTsKLQotLyoKLSAqIGEgbGlzdCBvZiBtb2R1bGUgaGFuZGxlcywgd2hpY2ggbWly cm9ycyB0aGUgZGVidWcgbGlzdCBvbiB0aGUgdGFyZ2V0Ci0gKi8KLXN0cnVjdCBkYmdfbWlycm9y X3Jvb3QgewotCS8qIG11c3QgYmUgc2FtZSBhcyBkYmdfbWlycm9yX2xpc3Q7IF9fRExNb2R1bGVz IGFkZHJlc3Mgb24gdGFyZ2V0ICovCi0JdTMyIGRidGhpczsKLQlzdHJ1Y3QgbXlfaGFuZGxlICpu ZXh0OwkvKiBtdXN0IGJlIHNhbWUgYXMgZGJnX21pcnJvcl9saXN0ICovCi0JdTE2IGNoYW5nZXM7 CQkvKiBjaGFuZ2UgY291bnRlciAqLwotCXUxNiByZWZjb3VudDsJCS8qIG51bWJlciBvZiBtb2R1 bGVzIHJlZmVyZW5jaW5nIHRoaXMgcm9vdCAqLwotfTsKLQotc3RydWN0IGRiZ19taXJyb3JfbGlz dCB7Ci0JdTMyIGRidGhpczsKLQlzdHJ1Y3QgbXlfaGFuZGxlICpuZXh0LCAqcHJldjsKLQlzdHJ1 Y3QgZGJnX21pcnJvcl9yb290ICpyb290OwotCXUxNiBkYnNpejsKLQl1MzIgY29udGV4dDsJLyog U2F2ZSBjb250ZXh0IGZvciAuZGxsdmlldyBtZW1vcnkgYWxsb2NhdGlvbiAqLwotfTsKLQotI2Rl ZmluZSBWQVJJQUJMRV9TSVpFIDEKLS8qCi0gKiB0aGUgc3RydWN0dXJlIHdlIGFjdHVhbGx5IHJl dHVybiBhcyBhbiBvcGFxdWUgbW9kdWxlIGhhbmRsZQotICovCi1zdHJ1Y3QgbXlfaGFuZGxlIHsK LQlzdHJ1Y3QgZGJnX21pcnJvcl9saXN0IGRtOwkvKiAhISEgbXVzdCBiZSBmaXJzdCAhISEgKi8K LQkvKiBzZWN0aW9ucyBmb2xsb3dpbmcgPDwgMSwgTFNCIGlzIHNldCBmb3IgYmlnLWVuZGlhbiB0 YXJnZXQgKi8KLQl1MTYgc2Vjbl9jb3VudDsKLQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBzZWNu c1tWQVJJQUJMRV9TSVpFXTsKLX07Ci0jZGVmaW5lIE1ZX0hBTkRMRV9TSVpFIChzaXplb2Yoc3Ry dWN0IG15X2hhbmRsZSkgLVwKLQkJCXNpemVvZihzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbykpCi0v KiByZWFsIHNpemUgb2YgbXlfaGFuZGxlICovCi0KLS8qCi0gKiByZWR1Y2VkIHN5bWJvbCBzdHJ1 Y3R1cmUgdXNlZCBmb3Igc3ltYm9scyBkdXJpbmcgcmVsb2NhdGlvbgotICovCi1zdHJ1Y3QgbG9j YWxfc3ltYm9sIHsKLQlzMzIgdmFsdWU7CQkvKiBSZWxvY2F0ZWQgc3ltYm9sIHZhbHVlICovCi0J czMyIGRlbHRhOwkJLyogT3JpZ2luYWwgdmFsdWUgaW4gaW5wdXQgZmlsZSAqLwotCXMxNiBzZWNu bjsJCS8qIHNlY3Rpb24gbnVtYmVyICovCi0JczE2IHNjbGFzczsJCS8qIHN5bWJvbCBjbGFzcyAq LwotfTsKLQotLyoKLSAqIFRyYW1wb2xpbmUgZGF0YSBzdHJ1Y3R1cmVzCi0gKi8KLSNkZWZpbmUg VFJBTVBfTk9fR0VOX0FWQUlMICAgICAgICAgICAgICA2NTUzNQotI2RlZmluZSBUUkFNUF9TWU1f UFJFRklYICAgICAgICAgICAgICAgICJfXyRkYlRSX18iCi0jZGVmaW5lIFRSQU1QX1NFQ1RfTkFN RSAgICAgICAgICAgICAgICAgIi5kYlRSIgotLyogTVVTVCBNQVRDSCBUSEUgTEVOR1RIIEFCT1ZF ISEgKi8KLSNkZWZpbmUgVFJBTVBfU1lNX1BSRUZJWF9MRU4gICAgICAgICAgICA5Ci0vKiBJbmNs dWRlcyBOVUxMIHRlcm1pbmF0aW9uICovCi0jZGVmaW5lIFRSQU1QX1NZTV9IRVhfQVNDSUlfTEVO ICAgICAgICAgOQotCi0jZGVmaW5lIEdFVF9DT05UQUlORVIocHRyLCB0eXBlLCBmaWVsZCkgKCh0 eXBlICopKCh1bnNpZ25lZCBsb25nKXB0ciAtXAotCQkJCSh1bnNpZ25lZCBsb25nKSgmKCh0eXBl ICopMCktPmZpZWxkKSkpCi0jaWZuZGVmIEZJRUxEX09GRlNFVAotI2RlZmluZSBGSUVMRF9PRkZT RVQodHlwZSwgZmllbGQpICAgICAgICgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5maWVs ZCkpCi0jZW5kaWYKLQotLyoKLSAgICBUaGUgdHJhbXBvbGluZSBjb2RlIGZvciB0aGUgdGFyZ2V0 IGlzIGxvY2F0ZWQgaW4gYSB0YWJsZSBjYWxsZWQKLSAgICAidHJhbXBfZ2VuX2luZm8iIHdpdGgg aXMgaW5kZXhlZCBieSBsb29raW5nIHVwIHRoZSBpbmRleCBpbiB0aGUgdGFibGUKLSAgICAidHJh bXBfbWFwIi4gIFRoZSB0cmFtcF9tYXAgaW5kZXggaXMgYWNxdWlyZWQgdXNpbmcgdGhlIHRhcmdl dAotICAgIEhBU0hfRlVOQyBvbiB0aGUgcmVsb2NhdGlvbiB0eXBlIHRoYXQgY2F1c2VkIHRoZSB0 cmFtcG9saW5lLiAgRWFjaAotICAgIHRyYW1wb2xpbmUgY29kZSB0YWJsZSBlbnRyeSBNVVNUIGZv bGxvdyB0aGlzIGZvcm1hdDoKLQotICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfAotICAgIHwgIHRyYW1wX2dlbl9jb2RlX2hkciAgICAgICAgICAgICAg ICAgICAgICAgICAgfAotICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tfAotICAgIHwgIFRyYW1wb2xpbmUgaW1hZ2UgY29kZSAgICAgICAgICAgICAgICAg ICAgICAgfAotICAgIHwgICh0aGUgcmF3IGluc3RydWN0aW9uIGNvZGUgZm9yIHRoZSB0YXJnZXQp ICAgfAotICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t fAotICAgIHwgIFJlbG9jYXRpb24gZW50cmllcyBmb3IgdGhlIGltYWdlIGNvZGUgICAgICAgfAot ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotCi0g ICAgVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gaG93IGltYWdlIGRhdGEgaXMgbGFpZCBvdXQgaW4g dGhlIERPRkYgZmlsZQotICAgIGl0c2VsZi4KLSAqLwotc3RydWN0IHRyYW1wX2dlbl9jb2RlX2hk ciB7Ci0JdTMyIHRyYW1wX2NvZGVfc2l6ZTsJLyogIGluIEJZVEVTICovCi0JdTMyIG51bV9yZWxv czsKLQl1MzIgcmVsb19vZmZzZXQ7CS8qICBpbiBCWVRFUyAqLwotfTsKLQotc3RydWN0IHRyYW1w X2ltZ19wa3QgewotCXN0cnVjdCB0cmFtcF9pbWdfcGt0ICpuZXh0OwkvKiAgTVVTVCBCRSBGSVJT VCAqLwotCXUzMiBiYXNlOwotCXN0cnVjdCB0cmFtcF9nZW5fY29kZV9oZHIgaGRyOwotCXU4IHBh eWxvYWRbVkFSSUFCTEVfU0laRV07Ci19OwotCi1zdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvIHsK LQlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpuZXh0OwotCXN0cnVjdCByZWxvY19yZWNvcmRf dCByZWxvOwotfTsKLQotc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0IHsKLQlzdHJ1Y3QgdHJhbXBf aW1nX2R1cF9wa3QgKm5leHQ7CS8qICBNVVNUIEJFIEZJUlNUICovCi0JczE2IHNlY25uOwotCXUz MiBvZmZzZXQ7Ci0Jc3RydWN0IGltYWdlX3BhY2tldF90IGltZ19wa3Q7Ci0Jc3RydWN0IHRyYW1w X2ltZ19kdXBfcmVsbyAqcmVsb19jaGFpbjsKLQotCS8qICBQQVlMT0FEIE9GIElNRyBQS1QgRk9M TE9XUyAqLwotfTsKLQotc3RydWN0IHRyYW1wX3N5bSB7Ci0Jc3RydWN0IHRyYW1wX3N5bSAqbmV4 dDsJLyogIE1VU1QgQkUgRklSU1QgKi8KLQl1MzIgaW5kZXg7Ci0JdTMyIHN0cl9pbmRleDsKLQlz dHJ1Y3QgbG9jYWxfc3ltYm9sIHN5bV9pbmZvOwotfTsKLQotc3RydWN0IHRyYW1wX3N0cmluZyB7 Ci0Jc3RydWN0IHRyYW1wX3N0cmluZyAqbmV4dDsJLyogIE1VU1QgQkUgRklSU1QgKi8KLQl1MzIg aW5kZXg7Ci0JY2hhciBzdHJbVkFSSUFCTEVfU0laRV07CS8qICBOVUxMIHRlcm1pbmF0ZWQgKi8K LX07Ci0KLXN0cnVjdCB0cmFtcF9pbmZvIHsKLQl1MzIgdHJhbXBfc2VjdF9uZXh0X2FkZHI7Ci0J c3RydWN0IGxkcl9zZWN0aW9uX2luZm8gc2VjdF9pbmZvOwotCi0Jc3RydWN0IHRyYW1wX3N5bSAq c3ltYm9sX2hlYWQ7Ci0Jc3RydWN0IHRyYW1wX3N5bSAqc3ltYm9sX3RhaWw7Ci0JdTMyIHRyYW1w X3N5bV9uZXh0X2luZGV4OwotCXN0cnVjdCBsb2NhbF9zeW1ib2wgKmZpbmFsX3N5bV90YWJsZTsK LQotCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnN0cmluZ19oZWFkOwotCXN0cnVjdCB0cmFtcF9zdHJp bmcgKnN0cmluZ190YWlsOwotCXUzMiB0cmFtcF9zdHJpbmdfbmV4dF9pbmRleDsKLQl1MzIgdHJh bXBfc3RyaW5nX3NpemU7Ci0JY2hhciAqZmluYWxfc3RyaW5nX3RhYmxlOwotCi0Jc3RydWN0IHRy YW1wX2ltZ19wa3QgKnRyYW1wX3BrdHM7Ci0Jc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpkdXBf cGt0czsKLX07Ci0KLS8qCi0gKiBTdGF0ZXMgb2YgdGhlIC5jaW5pdCBzdGF0ZSBtYWNoaW5lCi0g Ki8KLWVudW0gY2luaXRfbW9kZSB7Ci0JQ0lfQ09VTlQgPSAwLAkJLyogZXhwZWN0aW5nIGEgY291 bnQgKi8KLQlDSV9BRERSRVNTLAkJLyogZXhwZWN0aW5nIGFuIGFkZHJlc3MgKi8KLSNpZiBDSU5J VF9BTElHTiA8IENJTklUX0FERFJFU1MJLyogaGFuZGxlIGNhc2Ugb2YgcGFydGlhbCBhZGRyZXNz IGZpZWxkICovCi0JQ0lfUEFSVEFERFJFU1MsCQkvKiBoYXZlIG9ubHkgcGFydCBvZiB0aGUgYWRk cmVzcyAqLwotI2VuZGlmCi0JQ0lfQ09QWSwJCS8qIGluIHRoZSBtaWRkbGUgb2YgY29weWluZyBk YXRhICovCi0JQ0lfRE9ORQkJCS8qIGVuZCBvZiAuY2luaXQgdGFibGUgKi8KLX07Ci0KLS8qCi0g KiBUaGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGR5bmFtaWMgbG9hZGVyLCB3aGljaCBpcyBwYXNz ZWQgYXJvdW5kIGFzCi0gKiBhbiBvYmplY3QKLSAqLwotc3RydWN0IGRsb2FkX3N0YXRlIHsKLQlz dHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICpzdHJtOwkvKiBUaGUgbW9kdWxlIGlucHV0IHN0 cmVhbSAqLwotCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKm15c3ltOwkvKiBTeW1ib2xzIGZv ciB0aGlzIHNlc3Npb24gKi8KLQkvKiB0YXJnZXQgbWVtb3J5IGFsbG9jYXRvciAqLwotCXN0cnVj dCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqbXlhbGxvYzsKLQlzdHJ1Y3QgZHluYW1pY19sb2Fk ZXJfaW5pdGlhbGl6ZSAqbXlpbzsJLyogdGFyZ2V0IG1lbW9yeSBpbml0aWFsaXplciAqLwotCXVu c2lnbmVkIG15b3B0aW9uczsJLyogT3B0aW9ucyBwYXJhbWV0ZXIgZHluYW1pY19sb2FkX21vZHVs ZSAqLwotCi0JY2hhciAqc3RyX2hlYWQ7CQkvKiBQb2ludGVyIHRvIHN0cmluZyB0YWJsZSAqLwot I2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQotCWNoYXIgKnN0cl90ZW1wOwkJLyogUG9p bnRlciB0byB0ZW1wb3JhcnkgYnVmZmVyIGZvciBzdHJpbmdzICovCi0JLyogYmlnIGVub3VnaCB0 byBob2xkIGxvbmdlc3Qgc3RyaW5nICovCi0JdW5zaWduZWQgdGVtcF9sZW47CS8qIGxlbmd0aCBv ZiBsYXN0IHRlbXBvcmFyeSBzdHJpbmcgKi8KLQljaGFyICp4c3RyaW5nczsJCS8qIFBvaW50ZXIg dG8gYnVmZmVyIGZvciBleHBhbmRlZCAqLwotCS8qIHN0cmluZ3MgZm9yIHNlYyBuYW1lcyAqLwot I2VuZGlmCi0JLyogVG90YWwgc2l6ZSBvZiBzdHJpbmdzIGZvciBETExWaWV3IHNlY3Rpb24gbmFt ZXMgKi8KLQl1bnNpZ25lZCBkZWJ1Z19zdHJpbmdfc2l6ZTsKLQkvKiBQb2ludGVyIHRvIHBhcmFs bGVsIHNlY3Rpb24gaW5mbyBmb3IgYWxsb2NhdGVkIHNlY3Rpb25zIG9ubHkgKi8KLQlzdHJ1Y3Qg ZG9mZl9zY25oZHJfdCAqc2VjdF9oZHJzOwkvKiBQb2ludGVyIHRvIHNlY3Rpb24gdGFibGUgKi8K LQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqbGRyX3NlY3Rpb25zOwotI2lmIFRNUzMyMDYwCi0J LyogVGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSAuYnNzIHNlY3Rpb24gKi8KLQlsZHJf YWRkciBic3NfcnVuX2Jhc2U7Ci0jZW5kaWYKLQlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpsb2NhbF9z eW10YWI7CS8qIFJlbG9jYXRpb24gc3ltYm9sIHRhYmxlICovCi0KLQkvKiBwb2ludGVyIHRvIERM IHNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlY3Rpb24gYmVpbmcgcmVsb2NhdGVkICovCi0Jc3RydWN0 IGxkcl9zZWN0aW9uX2luZm8gKmltYWdlX3NlY247Ci0JLyogY2hhbmdlIGluIHJ1biBhZGRyZXNz IGZvciBjdXJyZW50IHNlY3Rpb24gZHVyaW5nIHJlbG9jYXRpb24gKi8KLQlsZHJfYWRkciBkZWx0 YV9ydW5hZGRyOwotCWxkcl9hZGRyIGltYWdlX29mZnNldDsJLyogb2Zmc2V0IG9mIGN1cnJlbnQg cGFja2V0IGluIHNlY3Rpb24gKi8KLQllbnVtIGNpbml0X21vZGUgY2luaXRfc3RhdGU7CS8qIGN1 cnJlbnQgc3RhdGUgb2YgY2xvYWRfY2luaXQoKSAqLwotCWludCBjaW5pdF9jb3VudDsJLyogdGhl IGN1cnJlbnQgY291bnQgKi8KLQlsZHJfYWRkciBjaW5pdF9hZGRyOwkvKiB0aGUgY3VycmVudCBh ZGRyZXNzICovCi0JczE2IGNpbml0X3BhZ2U7CQkvKiB0aGUgY3VycmVudCBwYWdlICovCi0JLyog SGFuZGxlIHRvIGJlIHJldHVybmVkIGJ5IGR5bmFtaWNfbG9hZF9tb2R1bGUgKi8KLQlzdHJ1Y3Qg bXlfaGFuZGxlICpteWhhbmRsZTsKLQl1bnNpZ25lZCBkbG9hZF9lcnJjb3VudDsJLyogVG90YWwg IyBvZiBlcnJvcnMgcmVwb3J0ZWQgc28gZmFyICovCi0JLyogTnVtYmVyIG9mIHRhcmdldCBzZWN0 aW9ucyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBhbmQgcmVsb2NhdGlvbiAqLwotCXVuc2lnbmVk IGFsbG9jYXRlZF9zZWNuX2NvdW50OwotI2lmbmRlZiBUQVJHRVRfRU5ESUFOTkVTUwotCWludCBi aWdfZV90YXJnZXQ7CS8qIFRhcmdldCBkYXRhIGluIGJpZy1lbmRpYW4gZm9ybWF0ICovCi0jZW5k aWYKLQkvKiBtYXAgZm9yIHJlb3JkZXJpbmcgYnl0ZXMsIDAgaWYgbm90IG5lZWRlZCAqLwotCXUz MiByZW9yZGVyX21hcDsKLQlzdHJ1Y3QgZG9mZl9maWxlaGRyX3QgZGZpbGVfaGRyOwkvKiBET0ZG IGZpbGUgaGVhZGVyIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCB2ZXJp Znk7CS8qIFZlcmlmeSByZWNvcmQgKi8KLQotCXN0cnVjdCB0cmFtcF9pbmZvIHRyYW1wOwkvKiBU cmFtcG9saW5lIGRhdGEsIGlmIG5lZWRlZCAqLwotCi0JaW50IHJlbHN0a2lkeDsJCS8qIGluZGV4 IGludG8gcmVsb2NhdGlvbiB2YWx1ZSBzdGFjayAqLwotCS8qIHJlbG9jYXRpb24gdmFsdWUgc3Rh Y2sgdXNlZCBpbiByZWxleHAuYyAqLwotCXJ2YWx1ZSByZWxzdGtbU1RBVElDX0VYUFJfU1RLX1NJ WkVdOwotCi19OwotCi0jaWZkZWYgVEFSR0VUX0VORElBTk5FU1MKLSNkZWZpbmUgVEFSR0VUX0JJ R19FTkRJQU4gVEFSR0VUX0VORElBTk5FU1MKLSNlbHNlCi0jZGVmaW5lIFRBUkdFVF9CSUdfRU5E SUFOIChkbHRoaXMtPmJpZ19lX3RhcmdldCkKLSNlbmRpZgotCi0vKgotICogRXhwb3J0cyBmcm9t IGNsb2FkLmMgdG8gcmVzdCBvZiB0aGUgd29ybGQKLSAqLwotZXh0ZXJuIHZvaWQgZGxvYWRfZXJy b3Ioc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIGNvbnN0IGNoYXIgKmVycnR4dCwgLi4uKTsK LWV4dGVybiB2b2lkIGRsb2FkX3N5bXNfZXJyb3Ioc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAq c3ltcywKLQkJCSAgICAgY29uc3QgY2hhciAqZXJydHh0LCAuLi4pOwotZXh0ZXJuIHZvaWQgZGxv YWRfaGVhZGVycyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7Ci1leHRlcm4gdm9pZCBkbG9h ZF9zdHJpbmdzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBib29sIHNlY19uYW1lc19vbmx5 KTsKLWV4dGVybiB2b2lkIGRsb2FkX3NlY3Rpb25zKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlz KTsKLWV4dGVybiB2b2lkIGRsb2FkX3Jlb3JkZXIodm9pZCAqZGF0YSwgaW50IGRzaXosIHUzMiBt YXApOwotZXh0ZXJuIHUzMiBkbG9hZF9jaGVja3N1bSh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXop OwotCi0jaWYgSE9TVF9FTkRJQU5ORVNTCi1leHRlcm4gdWludDMyX3QgZGxvYWRfcmV2ZXJzZV9j aGVja3N1bSh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopOwotI2lmIChUQVJHRVRfQVVfQklUUyA+ IDgpICYmIChUQVJHRVRfQVVfQklUUyA8IDMyKQotZXh0ZXJuIHVpbnQzMl90IGRsb2FkX3JldmVy c2VfY2hlY2tzdW0xNih2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopOwotI2VuZGlmCi0jZW5kaWYK LQotLyoKLSAqIGV4cG9ydGVkIGJ5IHJlbG9jLmMKLSAqLwotZXh0ZXJuIHZvaWQgZGxvYWRfcmVs b2NhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICpkYXRhLAotCQkJICAg c3RydWN0IHJlbG9jX3JlY29yZF90ICpycCwgYm9vbCAqdHJhbXBzX2dlbmVyYXRlZCwKLQkJCSAg IGJvb2wgc2Vjb25kX3Bhc3MpOwotCi1leHRlcm4gcnZhbHVlIGRsb2FkX3VucGFjayhzdHJ1Y3Qg ZGxvYWRfc3RhdGUgKmRsdGhpcywgdGd0X2F1X3QgKmRhdGEsCi0JCQkgICBpbnQgZmllbGRzeiwg aW50IG9mZnNldCwgdW5zaWduZWQgc2duKTsKLQotZXh0ZXJuIGludCBkbG9hZF9yZXBhY2soc3Ry dWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHJ2YWx1ZSB2YWwsIHRndF9hdV90ICpkYXRhLAotCQkJ aW50IGZpZWxkc3osIGludCBvZmZzZXQsIHVuc2lnbmVkIHNnbik7Ci0KLS8qCi0gKiBleHBvcnRl ZCBieSB0cmFtcC5jCi0gKi8KLWV4dGVybiBib29sIGRsb2FkX3RyYW1wX2F2YWlsKHN0cnVjdCBk bG9hZF9zdGF0ZSAqZGx0aGlzLAotCQkJICAgICAgc3RydWN0IHJlbG9jX3JlY29yZF90ICpycCk7 Ci0KLWludCBkbG9hZF90cmFtcF9nZW5lcmF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywg czE2IHNlY25uLAotCQkJIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAq aXBhY2tldCwKLQkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwKTsKLQotZXh0ZXJuIGludCBk bG9hZF90cmFtcF9wa3RfdWRwYXRlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAotCQkJCSAg czE2IHNlY25uLCB1MzIgaW1hZ2Vfb2Zmc2V0LAotCQkJCSAgc3RydWN0IGltYWdlX3BhY2tldF90 ICppcGFja2V0KTsKLQotZXh0ZXJuIGludCBkbG9hZF90cmFtcF9maW5hbGl6ZShzdHJ1Y3QgZGxv YWRfc3RhdGUgKmRsdGhpcyk7Ci0KLWV4dGVybiB2b2lkIGRsb2FkX3RyYW1wX2NsZWFudXAoc3Ry dWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOwotCi0jZW5kaWYgLyogX0RMT0FEX0lOVEVSTkFMXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZG9mZi5o IGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZG9mZi5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBhN2MzMTQ1Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kb2ZmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAs MCBAQAotLyoKLSAqIGRvZmYuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9y dCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBTdHJ1Y3R1cmVzICYg ZGVmaW5pdGlvbnMgdXNlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgZmlsZSBmb3Jt YXQuCi0gKiBUaGlzIGZvcm1hdCBpcyBhIHJlZm9ybWF0dGVkIHZlcnNpb24gb2YgQ09GRi4gSXQg b3B0aW1pemVzIHRoZSBsYXlvdXQgZm9yCi0gKiB0aGUgZHluYW1pYyBsb2FkZXIuCi0gKgotICog LmRvZiBmaWxlcywgd2hlbiB2aWV3ZWQgYXMgYSBzZXF1ZW5jZSBvZiAzMi1iaXQgaW50ZWdlcnMs IGxvb2sgdGhlIHNhbWUKLSAqIG9uIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4gbWFjaGlu ZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLQotI2lmbmRlZiBfRE9GRl9ICi0jZGVmaW5lIF9ET0ZGX0gKLQotCi0jZGVm aW5lIEJZVEVfUkVTSFVGRkxFX1ZBTFVFIDB4MDAwMTAyMDMKLQotLyogRE9GRiBmaWxlIGhlYWRl ciBjb250YWluaW5nIGZpZWxkcyBjYXRlZ29yaXppbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmls ZSAqLwotc3RydWN0IGRvZmZfZmlsZWhkcl90IHsKLQotCS8qIHN0cmluZyB0YWJsZSBzaXplLCBp bmNsdWRpbmcgZmlsZW5hbWUsIGluIGJ5dGVzICovCi0JdTMyIGRmX3N0cnRhYl9zaXplOwotCi0J LyogZW50cnkgcG9pbnQgaWYgb25lIGV4aXN0cyAqLwotCXUzMiBkZl9lbnRyeXB0OwotCi0JLyog aWRlbnRpZmllcyBieXRlIG9yZGVyaW5nIG9mIGZpbGU7Ci0JICogYWx3YXlzIHNldCB0byBCWVRF X1JFU0hVRkZMRV9WQUxVRSAqLwotCXUzMiBkZl9ieXRlX3Jlc2h1ZmZsZTsKLQotCS8qIFNpemUg b2YgdGhlIHN0cmluZyB0YWJsZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0IHNlY3Rpb24g bmFtZSAqLwotCS8qIFNpemUgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIENPRkYgZmlsZSBhbHNv ICovCi0JdTMyIGRmX3Njbl9uYW1lX3NpemU7Ci0KLSNpZm5kZWYgX0JJR19FTkRJQU4KLQkvKiBu dW1iZXIgb2Ygc3ltYm9scyAqLwotCXUxNiBkZl9ub19zeW1zOwotCi0JLyogbGVuZ3RoIGluIGJ5 dGVzIG9mIHRoZSBsb25nZXN0IHN0cmluZywgaW5jbHVkaW5nIHRlcm1pbmF0aW5nIE5VTEwgKi8K LQkvKiBleGNsdWRlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSAqLwotCXUxNiBkZl9tYXhfc3RyX2xl bjsKLQotCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8tbG9hZCBvbmVz ICovCi0JdTE2IGRmX25vX3NjbnM7Ci0KLQkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29udGFpbmlu ZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLwotCXUxNiBkZl90YXJnZXRf c2NuczsKLQotCS8qIHVuaXF1ZSBpZCBmb3IgZGxsIGZpbGUgZm9ybWF0ICYgdmVyc2lvbiAqLwot CXUxNiBkZl9kb2ZmX3ZlcnNpb247Ci0KLQkvKiBpZGVudGlmaWVzIElTQSAqLwotCXUxNiBkZl90 YXJnZXRfaWQ7Ci0KLQkvKiB1c2VmdWwgZmlsZSBmbGFncyAqLwotCXUxNiBkZl9mbGFnczsKLQot CS8qIHNlY3Rpb24gcmVmZXJlbmNlIGZvciBlbnRyeSBwb2ludCwgTl9VTkRFRiBmb3Igbm9uZSwg Ki8KLQkvKiBOX0FCUyBmb3IgYWJzb2x1dGUgYWRkcmVzcyAqLwotCXMxNiBkZl9lbnRyeV9zZWNu OwotI2Vsc2UKLQkvKiBsZW5ndGggb2YgdGhlIGxvbmdlc3Qgc3RyaW5nLCBpbmNsdWRpbmcgdGVy bWluYXRpbmcgTlVMTCAqLwotCXUxNiBkZl9tYXhfc3RyX2xlbjsKLQotCS8qIG51bWJlciBvZiBz eW1ib2xzICovCi0JdTE2IGRmX25vX3N5bXM7Ci0KLQkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29u dGFpbmluZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLwotCXUxNiBkZl90 YXJnZXRfc2NuczsKLQotCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8t bG9hZCBvbmVzICovCi0JdTE2IGRmX25vX3NjbnM7Ci0KLQkvKiBpZGVudGlmaWVzIElTQSAqLwot CXUxNiBkZl90YXJnZXRfaWQ7Ci0KLQkvKiB1bmlxdWUgaWQgZm9yIGRsbCBmaWxlIGZvcm1hdCAm IHZlcnNpb24gKi8KLQl1MTYgZGZfZG9mZl92ZXJzaW9uOwotCi0JLyogc2VjdGlvbiByZWZlcmVu Y2UgZm9yIGVudHJ5IHBvaW50LCBOX1VOREVGIGZvciBub25lLCAqLwotCS8qIE5fQUJTIGZvciBh YnNvbHV0ZSBhZGRyZXNzICovCi0JczE2IGRmX2VudHJ5X3NlY247Ci0KLQkvKiB1c2VmdWwgZmls ZSBmbGFncyAqLwotCXUxNiBkZl9mbGFnczsKLSNlbmRpZgotCS8qIGNoZWNrc3VtIGZvciBmaWxl IGhlYWRlciByZWNvcmQgKi8KLQl1MzIgZGZfY2hlY2tzdW07Ci0KLX07Ci0KLS8qIGZsYWdzIGlu IHRoZSBkZl9mbGFncyBmaWVsZCAqLwotI2RlZmluZSAgREZfTElUVExFICAgMHgxMDAKLSNkZWZp bmUgIERGX0JJRyAgICAgIDB4MjAwCi0jZGVmaW5lICBERl9CWVRFX09SREVSIChERl9MSVRUTEUg fCBERl9CSUcpCi0KLS8qIFN1cHBvcnRlZCBwcm9jZXNzb3JzICovCi0jZGVmaW5lIFRNUzQ3MF9J RCAgIDB4OTcKLSNkZWZpbmUgTEVBRF9JRCAgICAgMHg5OAotI2RlZmluZSBUTVMzMjA2MF9JRCAw eDk5Ci0jZGVmaW5lIExFQUQzX0lEICAgIDB4OWMKLQotLyogUHJpbWFyeSBwcm9jZXNzb3IgZm9y IGxvYWRpbmcgKi8KLSNpZiBUTVMzMjA2MAotI2RlZmluZSBUQVJHRVRfSUQgICBUTVMzMjA2MF9J RAotI2VuZGlmCi0KLS8qIFZlcmlmaWNhdGlvbiByZWNvcmQgY29udGFpbmluZyB2YWx1ZXMgdXNl ZCB0byB0ZXN0IGludGVncml0eSBvZiB0aGUgYml0cyAqLwotc3RydWN0IGRvZmZfdmVyaWZ5X3Jl Y190IHsKLQotCS8qIHRpbWUgYW5kIGRhdGUgc3RhbXAgKi8KLQl1MzIgZHZfdGltZGF0OwotCi0J LyogY2hlY2tzdW0gZm9yIGFsbCBzZWN0aW9uIHJlY29yZHMgKi8KLQl1MzIgZHZfc2NuX3JlY19j aGVja3N1bTsKLQotCS8qIGNoZWNrc3VtIGZvciBzdHJpbmcgdGFibGUgKi8KLQl1MzIgZHZfc3Ry X3RhYl9jaGVja3N1bTsKLQotCS8qIGNoZWNrc3VtIGZvciBzeW1ib2wgdGFibGUgKi8KLQl1MzIg ZHZfc3ltX3RhYl9jaGVja3N1bTsKLQotCS8qIGNoZWNrc3VtIGZvciB2ZXJpZmljYXRpb24gcmVj b3JkICovCi0JdTMyIGR2X3ZlcmlmeV9yZWNfY2hlY2tzdW07Ci0KLX07Ci0KLS8qIFN0cmluZyB0 YWJsZSBpcyBhbiBhcnJheSBvZiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gIFRoZSBmaXJzdCBl bnRyeSBpcwotICogdGhlIGZpbGVuYW1lLCB3aGljaCBpcyBhZGRlZCBieSBETExjcmVhdGUuICBO byBuZXcgc3RydWN0dXJlIGRlZmluaXRpb25zCi0gKiBhcmUgcmVxdWlyZWQuCi0gKi8KLQotLyog U2VjdGlvbiBSZWNvcmRzIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGlu ZyBpbWFnZSBwYWNrZXRzICovCi0vKgotICogICAgICAhIVdBUk5JTkchIQotICoKLSAqIFRoaXMg c3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIG1hdGNoIGluIGZvcm0gbGRyX3NlY3Rpb25faW5mbyBp bgotICogZHluYW1pY19sb2FkZXIuaAotICovCi0KLXN0cnVjdCBkb2ZmX3Njbmhkcl90IHsKLQot CXMzMiBkc19vZmZzZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLwot CXMzMiBkc19wYWRkcjsJCS8qIFJVTiBhZGRyZXNzLCBpbiB0YXJnZXQgQVUgKi8KLQlzMzIgZHNf dmFkZHI7CQkvKiBMT0FEIGFkZHJlc3MsIGluIHRhcmdldCBBVSAqLwotCXMzMiBkc19zaXplOwkJ Lyogc2VjdGlvbiBzaXplLCBpbiB0YXJnZXQgQVUgKi8KLSNpZm5kZWYgX0JJR19FTkRJQU4KLQl1 MTYgZHNfcGFnZTsJCS8qIG1lbW9yeSBwYWdlIGlkICovCi0JdTE2IGRzX2ZsYWdzOwkJLyogc2Vj dGlvbiBmbGFncyAqLwotI2Vsc2UKLQl1MTYgZHNfZmxhZ3M7CQkvKiBzZWN0aW9uIGZsYWdzICov Ci0JdTE2IGRzX3BhZ2U7CQkvKiBtZW1vcnkgcGFnZSBpZCAqLwotI2VuZGlmCi0JdTMyIGRzX2Zp cnN0X3BrdF9vZmZzZXQ7Ci0JLyogQWJzb2x1dGUgYnl0ZSBvZmZzZXQgaW50byB0aGUgZmlsZSAq LwotCS8qIHdoZXJlIHRoZSBmaXJzdCBpbWFnZSByZWNvcmQgcmVzaWRlcyAqLwotCi0JczMyIGRz X25pcGFja3M7CQkvKiBudW1iZXIgb2YgaW1hZ2UgcGFja2V0cyAqLwotCi19OwotCi0vKiBTeW1i b2wgdGFibGUgZW50cnkgKi8KLXN0cnVjdCBkb2ZmX3N5bWVudF90IHsKLQotCXMzMiBkbl9vZmZz ZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLwotCXMzMiBkbl92YWx1 ZTsJCS8qIHZhbHVlIG9mIHN5bWJvbCAqLwotI2lmbmRlZiBfQklHX0VORElBTgotCXMxNiBkbl9z Y251bTsJCS8qIHNlY3Rpb24gbnVtYmVyICovCi0JczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2Ug Y2xhc3MgKi8KLSNlbHNlCi0JczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2UgY2xhc3MgKi8KLQlz MTYgZG5fc2NudW07CQkvKiBzZWN0aW9uIG51bWJlciwgMS1iYXNlZCAqLwotI2VuZGlmCi0KLX07 Ci0KLS8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9zY251bSAqLwotI2RlZmluZSAgRE5fVU5ERUYg IDAJCS8qIHVuZGVmaW5lZCBzeW1ib2wgKi8KLSNkZWZpbmUgIEROX0FCUyAgICAoLTEpCQkvKiB2 YWx1ZSBvZiBzeW1ib2wgaXMgYWJzb2x1dGUgKi8KLS8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9z Y2xhc3MgKi8KLSNkZWZpbmUgRE5fRVhUICAgICAyCi0jZGVmaW5lIEROX1NUQVRMQUIgMjAKLSNk ZWZpbmUgRE5fRVhUTEFCICAyMQotCi0vKiBEZWZhdWx0IHZhbHVlIG9mIGltYWdlIGJpdHMgaW4g cGFja2V0ICovCi0vKiBDb25maWd1cmFibGUgYnkgdXNlciBvbiB0aGUgY29tbWFuZCBsaW5lICov Ci0jZGVmaW5lIElNQUdFX1BBQ0tFVF9TSVpFIDEwMjQKLQotLyogQW4gaW1hZ2UgcGFja2V0IGNv bnRhaW5zIGEgY2h1bmsgb2YgZGF0YSBmcm9tIGEgc2VjdGlvbiBhbG9uZyB3aXRoICovCi0vKiBp bmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGl0cyBwcm9jZXNzaW5nLiAqLwotc3RydWN0IGltYWdl X3BhY2tldF90IHsKLQotCXMzMiBudW1fcmVsb2NzOwkJLyogbnVtYmVyIG9mIHJlbG9jYXRpb25z IGZvciAqLwotCS8qIHRoaXMgcGFja2V0ICovCi0KLQlzMzIgcGFja2V0X3NpemU7CS8qIG51bWJl ciBvZiBieXRlcyBpbiBhcnJheSAqLwotCS8qICJiaXRzIiBvY2N1cGllZCAgYnkgKi8KLQkvKiB2 YWxpZCBkYXRhLiAgQ291bGQgYmUgKi8KLQkvKiA8IElNQUdFX1BBQ0tFVF9TSVpFIHRvICovCi0J LyogcHJldmVudCBzcGxpdHRpbmcgYSAqLwotCS8qIHJlbG9jYXRpb24gYWNyb3NzIHBhY2tldHMu ICovCi0JLyogTGFzdCBwYWNrZXQgb2YgYSBzZWN0aW9uICovCi0JLyogd2lsbCBtb3N0IGxpa2Vs eSBjb250YWluICovCi0JLyogPCBJTUFHRV9QQUNLRVRfU0laRSBieXRlcyAqLwotCS8qIG9mIHZh bGlkIGRhdGEgKi8KLQotCXMzMiBpbWdfY2hrc3VtOwkJLyogQ2hlY2tzdW0gZm9yIGltYWdlIHBh Y2tldCAqLwotCS8qIGFuZCB0aGUgY29ycmVzcG9uZGluZyAqLwotCS8qIHJlbG9jYXRpb24gcmVj b3JkcyAqLwotCi0JdTggKmltZ19kYXRhOwkJLyogQWN0dWFsIGRhdGEgaW4gc2VjdGlvbiAqLwot Ci19OwotCi0vKiBUaGUgcmVsb2NhdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBtYXRjaGVzIHRo ZSBDT0ZGIHZlcnNpb24uICBPZmZzZXRzICovCi0vKiBob3dldmVyIGFyZSByZWxhdGl2ZSB0byB0 aGUgaW1hZ2UgcGFja2V0IGJhc2Ugbm90IHRoZSBzZWN0aW9uIGJhc2UuICovCi1zdHJ1Y3QgcmVs b2NfcmVjb3JkX3QgewotCi0JczMyIHZhZGRyOwotCi0JLyogZXhwcmVzc2VkIGluIHRhcmdldCBB VXMgKi8KLQotCXVuaW9uIHsKLQkJc3RydWN0IHsKLSNpZm5kZWYgX0JJR19FTkRJQU4KLQkJCXU4 IF9vZmZzZXQ7CS8qIGJpdCBvZmZzZXQgb2YgcmVsIGZsZCAqLwotCQkJdTggX2ZpZWxkc3o7CS8q IHNpemUgb2YgcmVsIGZsZCAqLwotCQkJdTggX3dvcmRzejsJLyogIyBieXRlcyBjb250YWluaW5n IHJlbCBmbGQgKi8KLQkJCXU4IF9kdW0xOwotCQkJdTE2IF9kdW0yOwotCQkJdTE2IF90eXBlOwot I2Vsc2UKLQkJCXVuc2lnbmVkIF9kdW0xOjg7Ci0JCQl1bnNpZ25lZCBfd29yZHN6Ojg7CS8qICMg Ynl0ZXMgY29udGFpbmluZyByZWwgZmxkICovCi0JCQl1bnNpZ25lZCBfZmllbGRzejo4OwkvKiBz aXplIG9mIHJlbCBmbGQgKi8KLQkJCXVuc2lnbmVkIF9vZmZzZXQ6ODsJLyogYml0IG9mZnNldCBv ZiByZWwgZmxkICovCi0JCQl1MTYgX3R5cGU7Ci0JCQl1MTYgX2R1bTI7Ci0jZW5kaWYKLQkJfSBf cl9maWVsZDsKLQotCQlzdHJ1Y3QgewotCQkJdTMyIF9zcGM7CS8qIGltYWdlIHBhY2tldCByZWxh dGl2ZSBQQyAqLwotI2lmbmRlZiBfQklHX0VORElBTgotCQkJdTE2IF9kdW07Ci0JCQl1MTYgX3R5 cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLwotI2Vsc2UKLQkJCXUxNiBfdHlwZTsJLyogcmVsb2Nh dGlvbiB0eXBlICovCi0JCQl1MTYgX2R1bTsKLSNlbmRpZgotCQl9IF9yX3NwYzsKLQotCQlzdHJ1 Y3QgewotCQkJdTMyIF91dmFsOwkvKiBjb25zdGFudCB2YWx1ZSAqLwotI2lmbmRlZiBfQklHX0VO RElBTgotCQkJdTE2IF9kdW07Ci0JCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLwot I2Vsc2UKLQkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCi0JCQl1MTYgX2R1bTsK LSNlbmRpZgotCQl9IF9yX3V2YWw7Ci0KLQkJc3RydWN0IHsKLQkJCXMzMiBfc3ltbmR4OwkvKiAz Mi1iaXQgc3ltIHRibCBpbmRleCAqLwotI2lmbmRlZiBfQklHX0VORElBTgotCQkJdTE2IF9kaXNw OwkvKiBleHRyYSBhZGRyIGVuY29kZSBkYXRhICovCi0JCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRp b24gdHlwZSAqLwotI2Vsc2UKLQkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCi0J CQl1MTYgX2Rpc3A7CS8qIGV4dHJhIGFkZHIgZW5jb2RlIGRhdGEgKi8KLSNlbmRpZgotCQl9IF9y X3N5bTsKLQl9IF91X3JlbG9jOwotCi19OwotCi0vKiBhYmJyZXZpYXRpb25zIGZvciBjb252ZW5p ZW5jZSAqLwotI2lmbmRlZiBUWVBFCi0jZGVmaW5lIFRZUEUgICAgICBfdV9yZWxvYy5fcl9zeW0u X3R5cGUKLSNkZWZpbmUgVVZBTCAgICAgIF91X3JlbG9jLl9yX3V2YWwuX3V2YWwKLSNkZWZpbmUg U1lNTkRYICAgIF91X3JlbG9jLl9yX3N5bS5fc3ltbmR4Ci0jZGVmaW5lIE9GRlNFVCAgICBfdV9y ZWxvYy5fcl9maWVsZC5fb2Zmc2V0Ci0jZGVmaW5lIEZJRUxEU1ogICBfdV9yZWxvYy5fcl9maWVs ZC5fZmllbGRzegotI2RlZmluZSBXT1JEU1ogICAgX3VfcmVsb2MuX3JfZmllbGQuX3dvcmRzegot I2RlZmluZSBSX0RJU1AgICAgICBfdV9yZWxvYy5fcl9zeW0uX2Rpc3AKLSNlbmRpZgotCi0vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLwotLyogKi8KLS8qIEltcG9ydGFudCBET0ZGIG1hY3JvcyB1c2Vk IGZvciBmaWxlIHByb2Nlc3NpbmcgKi8KLS8qICovCi0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwot Ci0vKiBET0ZGIFZlcnNpb25zICovCi0jZGVmaW5lICAgICAgICAgRE9GRjAgICAgICAgICAgICAg ICAgICAgICAgIDAKLQotLyogUmV0dXJuIHRoZSBhZGRyZXNzL3NpemUgPj0gdG8gYWRkciB0aGF0 IGlzIGF0IGEgMzItYml0IGJvdW5kYXJ5ICovCi0vKiBUaGlzIGFzc3VtZXMgdGhhdCBhIGJ5dGUg aXMgOCBiaXRzICovCi0jZGVmaW5lICAgICAgICAgRE9GRl9BTElHTihhZGRyKSAgICAgICAgICAg ICgoKGFkZHIpICsgMykgJiB+M1VMKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogKi8K LS8qIFRoZSBET0ZGIHNlY3Rpb24gaGVhZGVyIGZsYWdzIGZpZWxkIGlzIGxhaWQgb3V0IGFzIGZv bGxvd3M6ICovCi0vKiAqLwotLyogIEJpdHMgMC0zIDogU2VjdGlvbiBUeXBlICovCi0vKiAgQml0 ICAgIDQgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVzIHRhcmdldCBtZW1vcnkgdG8gYmUgYWxs b2NhdGVkIGJ5IERMICovCi0vKiAgQml0ICAgIDUgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVz IGRvd25sb2FkaW5nICovCi0vKiAgQml0cyA4LTExOiBBbGlnbm1lbnQsIHNhbWUgYXMgQ09GRiAq LwotLyogKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLS8qIEVudW0gZm9yIERPRkYgc2Vj dGlvbiB0eXBlcyAoYml0cyAwLTMgb2YgZmxhZyk6IFNlZSBkeW5hbWljX2xvYWRlci5oICovCi0j ZGVmaW5lIERTX1NFQ1RJT05fVFlQRV9NQVNLCTB4RgotLyogRFNfQUxMT0NBVEUgaW5kaWNhdGVz IHdoZXRoZXIgYSBzZWN0aW9uIG5lZWRzIHNwYWNlIG9uIHRoZSB0YXJnZXQgKi8KLSNkZWZpbmUg RFNfQUxMT0NBVEVfTUFTSyAgICAgICAgICAgIDB4MTAKLS8qIERTX0RPV05MT0FEIGluZGljYXRl cyB0aGF0IHRoZSBsb2FkZXIgbmVlZHMgdG8gY29weSBiaXRzICovCi0jZGVmaW5lIERTX0RPV05M T0FEX01BU0sgICAgICAgICAgICAweDIwCi0vKiBTZWN0aW9uIGFsaWdubWVudCByZXF1aXJlbWVu dCBpbiBBVXMgKi8KLSNkZWZpbmUgRFNfQUxJR05NRU5UX1NISUZUCTgKLQotc3RhdGljIGlubGlu ZSBib29sIGRsb2FkX2NoZWNrX3R5cGUoc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIsIHUzMiBm bGFnKQotewotCXJldHVybiAoc3B0ci0+ZHNfZmxhZ3MgJiBEU19TRUNUSU9OX1RZUEVfTUFTSykg PT0gZmxhZzsKLX0KLXN0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19hbGxvY2F0aW9uKHN0cnVj dCBkb2ZmX3Njbmhkcl90ICpzcHRyKQotewotCXJldHVybiBzcHRyLT5kc19mbGFncyAmIERTX0FM TE9DQVRFX01BU0s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19kb3dubG9hZChz dHJ1Y3QgZG9mZl9zY25oZHJfdCAqc3B0cikKLXsKLQlyZXR1cm4gc3B0ci0+ZHNfZmxhZ3MgJiBE U19ET1dOTE9BRF9NQVNLOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkc19hbGlnbm1lbnQodTE2 IGRzX2ZsYWdzKQotewotCXJldHVybiAxIDw8ICgoZHNfZmxhZ3MgPj4gRFNfQUxJR05NRU5UX1NI SUZUKSAmIERTX1NFQ1RJT05fVFlQRV9NQVNLKTsKLX0KLQotCi0jZW5kaWYgLyogX0RPRkZfSCAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2Vj dGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2VjdGlvbi5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGIzNzcxLi4wMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2dldHNlY3Rpb24uYworKysgL2Rldi9u dWxsCkBAIC0xLDQwNyArMCwwIEBACi0vKgotICogZ2V0c2VjdGlvbi5jCi0gKgotICogRFNQLUJJ T1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3Jz LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMu Ci0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQg YGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFO VElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLgotICovCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZ2V0c2VjdGlvbi5oPgotI2luY2x1ZGUg ImhlYWRlci5oIgotCi0vKgotICogRXJyb3Igc3RyaW5ncwotICovCi1zdGF0aWMgY29uc3QgY2hh ciByZWFkc3RybVtdID0geyAiRXJyb3IgcmVhZGluZyAlcyBmcm9tIGlucHV0IHN0cmVhbSIgfTsK LXN0YXRpYyBjb25zdCBjaGFyIHNlZWtbXSA9IHsgIlNldCBmaWxlIHBvc2l0aW9uIHRvICVkIGZh aWxlZCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyIGlzaXpbXSA9IHsgIkJhZCBpbWFnZSBwYWNrZXQg c2l6ZSAlZCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyIGVycl9jaGVja3N1bVtdID0geyAiQ2hlY2tz dW0gZmFpbGVkIG9uICVzIiB9OwotCi1zdGF0aWMgY29uc3QgY2hhciBlcnJfcmVsb2NbXSA9IHsg ImRsb2FkX2dldF9zZWN0aW9uIHVuYWJsZSB0byByZWFkIgotCSAgICAic2VjdGlvbnMgY29udGFp bmluZyByZWxvY2F0aW9uIGVudHJpZXMiCi19OwotCi0jaWYgQklUU19QRVJfQVUgPiBCSVRTX1BF Ul9CWVRFCi1zdGF0aWMgY29uc3QgY2hhciBlcnJfYWxsb2NbXSA9IHsgIlN5bXMtPmRsb2FkX2Fs bG9jYXRlKCAlZCApIGZhaWxlZCIgfTsKLXN0YXRpYyBjb25zdCBjaGFyIHN0YmxbXSA9IHsgIkJh ZCBzdHJpbmcgdGFibGUgb2Zmc2V0ICIgRk1UX1VJMzIgfTsKLSNlbmRpZgotCi0vKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K LS8qKioqKioqKioqKioqKioqKioqKiogU1VQUE9SVCBGVU5DVElPTlMgKioqKioqKioqKioqKioq KioqKioqKiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCi0KLSNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUK LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlIHVucGFja19zZWNfbmFtZQotICoKLSAq IFBhcmFtZXRlcnM6Ci0gKiAgZGx0aGlzCQlIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBm b3IgdGhpcyBtb2R1bGUKLSAqCXNvZmZzZXQJICAgIEJ5dGUgb2Zmc2V0IGludG8gdGhlIHN0cmlu ZyB0YWJsZQotICogIGRzdCAgICAgICAgIFBsYWNlIHRvIHN0b3JlIHRoZSBleHBhbmRlZCBzdHJp bmcKLSAqCi0gKiBFZmZlY3Q6Ci0gKglTdG9yZXMgYSBzdHJpbmcgZnJvbSB0aGUgc3RyaW5nIHRh YmxlIGludG8gdGhlIGRlc3RpbmF0aW9uLCBleHBhbmRpbmcKLSAqIGl0IGluIHRoZSBwcm9jZXNz LiAgUmV0dXJucyBhIHBvaW50ZXIganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIHN0b3JlZAotICog c3RyaW5nIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KLSAqCi0gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCi1zdGF0aWMgY2hhciAqdW5wYWNrX3NlY19uYW1lKHN0cnVjdCBkbG9hZF9zdGF0ZSAq ZGx0aGlzLCB1MzIgc29mZnNldCwgY2hhciAqZHN0KQotewotCXU4IHRtcCwgKnNyYzsKLQotCWlm IChzb2Zmc2V0ID49IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3Njbl9uYW1lX3NpemUpIHsKLQkJZGxv YWRfZXJyb3IoZGx0aGlzLCBzdGJsLCBzb2Zmc2V0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXNy YyA9ICh1OCAqKSBkbHRoaXMtPnN0cl9oZWFkICsKLQkgICAgKHNvZmZzZXQgPj4gKExPR19CSVRT X1BFUl9BVSAtIExPR19CSVRTX1BFUl9CWVRFKSk7Ci0JaWYgKHNvZmZzZXQgJiAxKQotCQkqZHN0 KysgPSAqc3JjKys7CS8qIG9ubHkgMSBjaGFyYWN0ZXIgaW4gZmlyc3Qgd29yZCAqLwotCWRvIHsK LQkJdG1wID0gKnNyYysrOwotCQkqZHN0ID0gKHRtcCA+PiBCSVRTX1BFUl9CWVRFKQotCQkgICAg aWYgKCEoKmRzdCsrKSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKCgqZHN0KysgPSB0bXAgJiBCWVRF X01BU0spKTsKLQotCXJldHVybiBkc3Q7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJv Y2VkdXJlIGV4cGFuZF9zZWNfbmFtZXMKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIGRsdGhpcwkJ SGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCi0gKgotICogRWZm ZWN0OgotICogICAgQWxsb2NhdGVzIGEgYnVmZmVyLCB1bnBhY2tzIGFuZCBjb3BpZXMgc3RyaW5n cyBmcm9tIHN0cmluZyB0YWJsZSBpbnRvIGl0LgotICogU3RvcmVzIGEgcG9pbnRlciB0byB0aGUg YnVmZmVyIGludG8gYSBzdGF0ZSB2YXJpYWJsZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1zdGF0 aWMgdm9pZCBleHBhbmRfc2VjX25hbWVzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQotewot CWNoYXIgKnhzdHJpbmdzLCAqY3VyciwgKm5leHQ7Ci0JdTMyIHhzaXplOwotCXUxNiBzZWM7Ci0J c3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNocDsKLQkvKiBhc3N1bWUgd29yc3QtY2FzZSBzaXpl IHJlcXVpcmVtZW50ICovCi0JeHNpemUgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9tYXhfc3RyX2xl biAqIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnM7Ci0JeHN0cmluZ3MgPSAoY2hhciAqKWRs dGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIHhzaXplKTsKLQlpZiAo eHN0cmluZ3MgPT0gTlVMTCkgewotCQlkbG9hZF9lcnJvcihkbHRoaXMsIGVycl9hbGxvYywgeHNp emUpOwotCQlyZXR1cm47Ci0JfQotCWRsdGhpcy0+eHN0cmluZ3MgPSB4c3RyaW5nczsKLQkvKiBG b3IgZWFjaCBzZWMsIGNvcHkgYW5kIGV4cGFuZCBpdHMgbmFtZSAqLwotCWN1cnIgPSB4c3RyaW5n czsKLQlmb3IgKHNlYyA9IDA7IHNlYyA8IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnM7IHNl YysrKSB7Ci0JCXNocCA9IChzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKSZkbHRoaXMtPnNlY3Rf aGRyc1tzZWNdOwotCQluZXh0ID0gdW5wYWNrX3NlY19uYW1lKGRsdGhpcywgKih1MzIgKikgJnNo cC0+bmFtZSwgY3Vycik7Ci0JCWlmIChuZXh0ID09IE5VTEwpCi0JCQlicmVhazsJLyogZXJyb3Ig Ki8KLQkJc2hwLT5uYW1lID0gY3VycjsKLQkJY3VyciA9IG5leHQ7Ci0JfQotfQotCi0jZW5kaWYK LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCi0vKioqKioqKioqKioqKioqKioqKioqIEVYUE9SVEVEIEZVTkNUSU9OUyAq KioqKioqKioqKioqKioqKioqKiogKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK LSAqIFByb2NlZHVyZSBkbG9hZF9tb2R1bGVfb3BlbgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKglt b2R1bGUJVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBtb2R1bGUgaW1hZ2UKLSAq CXN5bXMJSG9zdC1zaWRlIG1hbGxvYy9mcmVlIGFuZCBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb25z LgotICoJCQlPdGhlciBtZXRob2RzIGFyZSB1bnVzZWQuCi0gKgotICogRWZmZWN0OgotICoJUmVh ZHMgaGVhZGVyIGluZm9ybWF0aW9uIGZyb20gYSBkeW5hbWljIGxvYWRlciBtb2R1bGUgdXNpbmcg dGhlCi0gICAgc3BlY2lmaWVkCi0gKiBzdHJlYW0gb2JqZWN0LCBhbmQgcmV0dXJucyBhIGhhbmRs ZSBmb3IgdGhlIG1vZHVsZSBpbmZvcm1hdGlvbi4gIFRoaXMKLSAqIGhhbmRsZSBtYXkgYmUgdXNl ZCBpbiBzdWJzZXF1ZW50IHF1ZXJ5IGNhbGxzIHRvIG9idGFpbiBpbmZvcm1hdGlvbgotICogY29u dGFpbmVkIGluIHRoZSBtb2R1bGUuCi0gKgotICogUmV0dXJuczoKLSAqCU5VTEwgaWYgYW4gZXJy b3IgaXMgZW5jb3VudGVyZWQsIG90aGVyd2lzZSBhIG1vZHVsZSBoYW5kbGUgZm9yIHVzZQotICog aW4gc3Vic2VxdWVudCBvcGVyYXRpb25zLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXZvaWQgKmRs b2FkX21vZHVsZV9vcGVuKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKm1vZHVsZSwKLQkJ CQkgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcykKLXsKLQlzdHJ1Y3QgZGxvYWRf c3RhdGUgKmRsdGhpczsJLyogaW50ZXJuYWwgc3RhdGUgZm9yIHRoaXMgY2FsbCAqLwotCXVuc2ln bmVkICpkcCwgc3o7Ci0JdTMyIHNlY19zdGFydDsKLSNpZiBCSVRTX1BFUl9BVSA8PSBCSVRTX1BF Ul9CWVRFCi0JdTE2IHNlYzsKLSNlbmRpZgotCi0JLyogQ2hlY2sgdGhhdCBtYW5kYXRvcnkgYXJn dW1lbnRzIGFyZSBwcmVzZW50ICovCi0JaWYgKCFtb2R1bGUgfHwgIXN5bXMpIHsKLQkJaWYgKHN5 bXMgIT0gTlVMTCkKLQkJCWRsb2FkX3N5bXNfZXJyb3Ioc3ltcywgIlJlcXVpcmVkIHBhcmFtZXRl ciBpcyBOVUxMIik7Ci0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZGx0aGlzID0gKHN0cnVjdCBk bG9hZF9zdGF0ZSAqKQotCSAgICBzeW1zLT5kbG9hZF9hbGxvY2F0ZShzeW1zLCBzaXplb2Yoc3Ry dWN0IGRsb2FkX3N0YXRlKSk7Ci0JaWYgKCFkbHRoaXMpIHsKLQkJLyogbm90IGVub3VnaCBzdG9y YWdlICovCi0JCWRsb2FkX3N5bXNfZXJyb3Ioc3ltcywgIkNhbid0IGFsbG9jYXRlIG1vZHVsZSBp bmZvIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIGNsZWFyIG91ciBpbnRlcm5hbCBzdGF0 ZSAqLwotCWRwID0gKHVuc2lnbmVkICopZGx0aGlzOwotCWZvciAoc3ogPSBzaXplb2Yoc3RydWN0 IGRsb2FkX3N0YXRlKSAvIHNpemVvZih1bnNpZ25lZCk7Ci0JICAgICBzeiA+IDA7IHN6IC09IDEp Ci0JCSpkcCsrID0gMDsKLQotCWRsdGhpcy0+c3RybSA9IG1vZHVsZTsKLQlkbHRoaXMtPm15c3lt ID0gc3ltczsKLQotCS8qIHJlYWQgaW4gdGhlIGRvZmYgaW1hZ2UgYW5kIHN0b3JlIGluIG91ciBz dGF0ZSB2YXJpYWJsZSAqLwotCWRsb2FkX2hlYWRlcnMoZGx0aGlzKTsKLQotCWlmICghZGx0aGlz LT5kbG9hZF9lcnJjb3VudCkKLQkJZGxvYWRfc3RyaW5ncyhkbHRoaXMsIHRydWUpOwotCi0JLyog c2tpcCBhaGVhZCBwYXN0IHRoZSB1bnJlYWQgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRhYmxlICov Ci0Jc2VjX3N0YXJ0ID0gc2l6ZW9mKHN0cnVjdCBkb2ZmX2ZpbGVoZHJfdCkgKwotCSAgICBzaXpl b2Yoc3RydWN0IGRvZmZfdmVyaWZ5X3JlY190KSArCi0JICAgIEJZVEVfVE9fSE9TVChET0ZGX0FM SUdOKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKSk7Ci0KLQlpZiAoZGx0aGlzLT5z dHJtLT5zZXRfZmlsZV9wb3NuKGRsdGhpcy0+c3RybSwgc2VjX3N0YXJ0KSAhPSAwKSB7Ci0JCWRs b2FkX2Vycm9yKGRsdGhpcywgc2Vlaywgc2VjX3N0YXJ0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQot Ci0JaWYgKCFkbHRoaXMtPmRsb2FkX2VycmNvdW50KQotCQlkbG9hZF9zZWN0aW9ucyhkbHRoaXMp OwotCi0JaWYgKGRsdGhpcy0+ZGxvYWRfZXJyY291bnQpIHsKLQkJZGxvYWRfbW9kdWxlX2Nsb3Nl KGRsdGhpcyk7CS8qIGVycm9ycywgYmxvdyBvZmYgb3VyIHN0YXRlICovCi0JCWRsdGhpcyA9IE5V TEw7Ci0JCXJldHVybiBOVUxMOwotCX0KLSNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUK LQkvKiBFeHBhbmQgYWxsIHNlY3Rpb24gbmFtZXMgZnJvbSB0aGUgc3RyaW5nIHRhYmxlIGludG8g dGhlICovCi0JLyogc3RhdGUgdmFyaWFibGUsIGFuZCBjb252ZXJ0IHNlY3Rpb24gbmFtZXMgZnJv bSBhIHJlbGF0aXZlICovCi0JLyogc3RyaW5nIHRhYmxlIG9mZnNldCB0byBhIHBvaW50ZXJzIHRv IHRoZSBleHBhbmRlZCBzdHJpbmcuICovCi0JZXhwYW5kX3NlY19uYW1lcyhkbHRoaXMpOwotI2Vs c2UKLQkvKiBDb252ZXJ0IHNlY3Rpb24gbmFtZXMgZnJvbSBhIHJlbGF0aXZlIHN0cmluZyB0YWJs ZSBvZmZzZXQgKi8KLQkvKiB0byBhIHBvaW50ZXIgaW50byB0aGUgc3RyaW5nIHRhYmxlLiAqLwot CWZvciAoc2VjID0gMDsgc2VjIDwgZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2Nuczsgc2VjKysp IHsKLQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNocCA9Ci0JCSAgICAoc3RydWN0IGxkcl9z ZWN0aW9uX2luZm8gKikmZGx0aGlzLT5zZWN0X2hkcnNbc2VjXTsKLQkJc2hwLT5uYW1lID0gZGx0 aGlzLT5zdHJfaGVhZCArICoodTMyICopICZzaHAtPm5hbWU7Ci0JfQotI2VuZGlmCi0KLQlyZXR1 cm4gZGx0aGlzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQcm9jZWR1cmUgZGxvYWRf Z2V0X3NlY3Rpb25faW5mbwotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgbWluZm8JCUhhbmRsZSBm cm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQotICoJc2VjdGlvbl9uYW1lCVBv aW50ZXIgdG8gdGhlIHN0cmluZyBuYW1lIG9mIHRoZSBzZWN0aW9uIGRlc2lyZWQKLSAqCXNlY3Rp b25faW5mbwlBZGRyZXNzIG9mIGEgc2VjdGlvbiBpbmZvIHN0cnVjdHVyZSBwb2ludGVyIHRvIGJl Ci0gKgkJCWluaXRpYWxpemVkCi0gKgotICogRWZmZWN0OgotICoJRmluZHMgdGhlIHNwZWNpZmll ZCBzZWN0aW9uIGluIHRoZSBtb2R1bGUgaW5mb3JtYXRpb24sIGFuZCBpbml0aWFsaXplcwotICog dGhlIHByb3ZpZGVkIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIHBvaW50ZXIuCi0gKgotICogUmV0 dXJuczoKLSAqCXRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBzZWN0aW9uIG5vdCBmb3VuZAot ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KLWludCBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvKHZvaWQgKm1p bmZvLCBjb25zdCBjaGFyICpzZWN0aW9uX25hbWUsCi0JCQkgICBjb25zdCBzdHJ1Y3QgbGRyX3Nl Y3Rpb25faW5mbyAqKmNvbnN0IHNlY3Rpb25faW5mbykKLXsKLQlzdHJ1Y3QgZGxvYWRfc3RhdGUg KmRsdGhpczsKLQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2hwOwotCXUxNiBzZWM7Ci0KLQlk bHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopbWluZm87Ci0JaWYgKCFkbHRoaXMpCi0JCXJl dHVybiBmYWxzZTsKLQotCWZvciAoc2VjID0gMDsgc2VjIDwgZGx0aGlzLT5kZmlsZV9oZHIuZGZf bm9fc2Nuczsgc2VjKyspIHsKLQkJc2hwID0gKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopJmRs dGhpcy0+c2VjdF9oZHJzW3NlY107Ci0JCWlmIChzdHJjbXAoc2VjdGlvbl9uYW1lLCBzaHAtPm5h bWUpID09IDApIHsKLQkJCSpzZWN0aW9uX2luZm8gPSBzaHA7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJ fQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotI2RlZmluZSBJUEhfU0laRSAoc2l6ZW9mKHN0 cnVjdCBpbWFnZV9wYWNrZXRfdCkgLSBzaXplb2YodTMyKSkKLQotLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0gKiBQcm9jZWR1cmUgZGxvYWRfZ2V0X3NlY3Rpb24KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICog IG1pbmZvCQlIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUKLSAq CXNlY3Rpb25faW5mbwlQb2ludGVyIHRvIGEgc2VjdGlvbiBpbmZvIHN0cnVjdHVyZSBmb3IgdGhl IGRlc2lyZWQKLSAqCQkJc2VjdGlvbgotICoJc2VjdGlvbl9kYXRhCUJ1ZmZlciB0byBjb250YWlu IHRoZSBzZWN0aW9uIGluaXRpYWxpemVkIGRhdGEKLSAqCi0gKiBFZmZlY3Q6Ci0gKglDb3BpZXMg dGhlIGluaXRpYWxpemVkIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBpbnRvIHRoZQot ICogc3VwcGxpZWQgYnVmZmVyLgotICoKLSAqIFJldHVybnM6Ci0gKgl0cnVlIGZvciBzdWNjZXNz LCBmYWxzZSBmb3Igc2VjdGlvbiBub3QgZm91bmQKLSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1pbnQg ZGxvYWRfZ2V0X3NlY3Rpb24odm9pZCAqbWluZm8sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBsZHJf c2VjdGlvbl9pbmZvICpzZWN0aW9uX2luZm8sCi0JCSAgICAgIHZvaWQgKnNlY3Rpb25fZGF0YSkK LXsKLQlzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpczsKLQl1MzIgcG9zOwotCXN0cnVjdCBkb2Zm X3Njbmhkcl90ICpzcHRyID0gTlVMTDsKLQlzMzIgbmlwOwotCXN0cnVjdCBpbWFnZV9wYWNrZXRf dCBpcGFja2V0OwotCXMzMiBpcHNpemU7Ci0JdTMyIGNoZWNrczsKLQlzOCAqZGVzdCA9IChzOCAq KSBzZWN0aW9uX2RhdGE7Ci0KLQlkbHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopbWluZm87 Ci0JaWYgKCFkbHRoaXMpCi0JCXJldHVybiBmYWxzZTsKLQlzcHRyID0gKHN0cnVjdCBkb2ZmX3Nj bmhkcl90ICopc2VjdGlvbl9pbmZvOwotCWlmIChzcHRyID09IE5VTEwpCi0JCXJldHVybiBmYWxz ZTsKLQotCS8qIHNraXAgYWhlYWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWNrZXQgKi8K LQlwb3MgPSBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTigodTMyKSBzcHRyLT5kc19maXJzdF9wa3Rf b2Zmc2V0KSk7Ci0JaWYgKGRsdGhpcy0+c3RybS0+c2V0X2ZpbGVfcG9zbihkbHRoaXMtPnN0cm0s IHBvcykgIT0gMCkgewotCQlkbG9hZF9lcnJvcihkbHRoaXMsIHNlZWssIHBvcyk7Ci0JCXJldHVy biBmYWxzZTsKLQl9Ci0KLQluaXAgPSBzcHRyLT5kc19uaXBhY2tzOwotCXdoaWxlICgobmlwIC09 IDEpID49IDApIHsJLyogZm9yIGVhY2ggcGFja2V0ICovCi0JCS8qIGdldCB0aGUgZml4ZWQgaGVh ZGVyIGJpdHMgKi8KLQkJaWYgKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIoZGx0aGlzLT5zdHJt LCAmaXBhY2tldCwKLQkJCQkJICAgICAgSVBIX1NJWkUpICE9IElQSF9TSVpFKSB7Ci0JCQlkbG9h ZF9lcnJvcihkbHRoaXMsIHJlYWRzdHJtLCAiaW1hZ2UgcGFja2V0Iik7Ci0JCQlyZXR1cm4gZmFs c2U7Ci0JCX0KLQkJLyogcmVvcmRlciB0aGUgaGVhZGVyIGlmIG5lZWQgYmUgKi8KLQkJaWYgKGRs dGhpcy0+cmVvcmRlcl9tYXApCi0JCQlkbG9hZF9yZW9yZGVyKCZpcGFja2V0LCBJUEhfU0laRSwg ZGx0aGlzLT5yZW9yZGVyX21hcCk7Ci0KLQkJLyogTm93IHJlYWQgdGhlIHBhY2tldCBpbWFnZSBi aXRzLiBOb3RlOiByb3VuZCB0aGUgc2l6ZSB1cCB0bwotCQkgKiB0aGUgbmV4dCBtdWx0aXBsZSBv ZiA0IGJ5dGVzOyB0aGlzIGlzIHdoYXQgY2hlY2tzdW0KLQkJICogcm91dGluZXMgd2FudC4gKi8K LQkJaXBzaXplID0gQllURV9UT19IT1NUKERPRkZfQUxJR04oaXBhY2tldC5wYWNrZXRfc2l6ZSkp OwotCQlpZiAoaXBzaXplID4gQllURV9UT19IT1NUKElNQUdFX1BBQ0tFVF9TSVpFKSkgewotCQkJ ZGxvYWRfZXJyb3IoZGx0aGlzLCBpc2l6LCBpcHNpemUpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0JCWlmIChkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyCi0JCSAgICAoZGx0aGlzLT5zdHJtLCBk ZXN0LCBpcHNpemUpICE9IGlwc2l6ZSkgewotCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCByZWFkc3Ry bSwgImltYWdlIHBhY2tldCIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCS8qIHJlb3JkZXIg dGhlIGJ5dGVzIGlmIG5lZWQgYmUgKi8KLSNpZiAhZGVmaW5lZChfQklHX0VORElBTikgfHwgKFRB UkdFVF9BVV9CSVRTID4gMTYpCi0JCWlmIChkbHRoaXMtPnJlb3JkZXJfbWFwKQotCQkJZGxvYWRf cmVvcmRlcihkZXN0LCBpcHNpemUsIGRsdGhpcy0+cmVvcmRlcl9tYXApOwotCi0JCWNoZWNrcyA9 IGRsb2FkX2NoZWNrc3VtKGRlc3QsIGlwc2l6ZSk7Ci0jZWxzZQotCQlpZiAoZGx0aGlzLT5kZmls ZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgIT0KLQkJICAgIFRBUkdFVF9PUkRFUihSRU9SREVSX01B UChCWVRFX1JFU0hVRkZMRV9WQUxVRSkpKSB7Ci0JCQkvKiBwdXQgaW1hZ2UgYnl0ZXMgaW4gYmln LWVuZGlhbiBvcmRlciwgbm90IFBDIG9yZGVyICovCi0JCQlkbG9hZF9yZW9yZGVyKGRlc3QsIGlw c2l6ZSwKLQkJCQkgICAgICBUQVJHRVRfT1JERVIoZGx0aGlzLT4KLQkJCQkJCWRmaWxlX2hkci5k Zl9ieXRlX3Jlc2h1ZmZsZSkpOwotCQl9Ci0jaWYgVEFSR0VUX0FVX0JJVFMgPiA4Ci0JCWNoZWNr cyA9IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNihkZXN0LCBpcHNpemUpOwotI2Vsc2UKLQkJY2hl Y2tzID0gZGxvYWRfcmV2ZXJzZV9jaGVja3N1bShkZXN0LCBpcHNpemUpOwotI2VuZGlmCi0jZW5k aWYKLQkJY2hlY2tzICs9IGRsb2FkX2NoZWNrc3VtKCZpcGFja2V0LCBJUEhfU0laRSk7Ci0KLQkJ LyogTllJOiB1bmFibGUgdG8gaGFuZGxlIHJlbG9jYXRpb24gZW50cmllcyBoZXJlLiAgUmVsb2MK LQkJICogZW50cmllcyByZWZlcnJpbmcgdG8gZmllbGRzIHRoYXQgc3BhbiB0aGUgcGFja2V0IGJv dW5kYXJpZXMKLQkJICogbWF5IHJlc3VsdCBpbiBwYWNrZXRzIG9mIHNpemVzIHRoYXQgYXJlIG5v dCBtdWx0aXBsZSBvZgotCQkgKiA0IGJ5dGVzLiBPdXIgY2hlY2tzdW0gaW1wbGVtZW50YXRpb24g d29ya3Mgb24gMzItYml0IHdvcmRzCi0JCSAqIG9ubHkuICovCi0JCWlmIChpcGFja2V0Lm51bV9y ZWxvY3MgIT0gMCkgewotCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCBlcnJfcmVsb2MsIGlwc2l6ZSk7 Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAofmNoZWNrcykgewotCQkJZGxvYWRfZXJy b3IoZGx0aGlzLCBlcnJfY2hlY2tzdW0sICJpbWFnZSBwYWNrZXQiKTsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCi0JCS8qQWR2YW5jZSBkZXN0aW5hdGlvbiBwdHIgYnkgdGhlIHNpemUgb2YgdGhl IGp1c3QtcmVhZCBwYWNrZXQgKi8KLQkJZGVzdCArPSBpcHNpemU7Ci0JfQotCi0JcmV0dXJuIHRy dWU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBkbG9hZF9tb2R1bGVf Y2xvc2UKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIG1pbmZvCQlIYW5kbGUgZnJvbSBkbG9hZF9t b2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUKLSAqCi0gKiBFZmZlY3Q6Ci0gKglSZWxlYXNlcyBh bnkgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vZHVsZSBoYW5kbGUuICBPbiByZXR1cm4s Ci0gKiB0aGUgbW9kdWxlIGhhbmRsZSBpcyBpbnZhbGlkLgotICoKLSAqIFJldHVybnM6Ci0gKgla ZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQg aXMgcmV0dXJuZWQuCi0gKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3lt cy0+ZXJyb3JfcmVwb3J0KCksIHdoZXJlIHN5bXMgd2FzCi0gKiBhbiBhcmd1bWVudCB0byBkbG9h ZF9tb2R1bGVfb3BlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXZvaWQgZGxvYWRfbW9kdWxlX2Ns b3NlKHZvaWQgKm1pbmZvKQotewotCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOwotCi0JZGx0 aGlzID0gKHN0cnVjdCBkbG9hZF9zdGF0ZSAqKW1pbmZvOwotCWlmICghZGx0aGlzKQotCQlyZXR1 cm47Ci0KLQlpZiAoZGx0aGlzLT5zdHJfaGVhZCkKLQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVh bGxvY2F0ZShkbHRoaXMtPm15c3ltLAotCQkJCQkJZGx0aGlzLT5zdHJfaGVhZCk7Ci0KLQlpZiAo ZGx0aGlzLT5zZWN0X2hkcnMpCi0JCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0 aGlzLT5teXN5bSwKLQkJCQkJCWRsdGhpcy0+c2VjdF9oZHJzKTsKLQotI2lmIEJJVFNfUEVSX0FV ID4gQklUU19QRVJfQllURQotCWlmIChkbHRoaXMtPnhzdHJpbmdzKQotCQlkbHRoaXMtPm15c3lt LT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCi0JCQkJCQlkbHRoaXMtPnhzdHJpbmdz KTsKLQotI2VuZGlmCi0KLQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+ bXlzeW0sIGRsdGhpcyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvZHlubG9hZC9oZWFkZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2Fk L2hlYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjUwYTE1YS4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9oZWFkZXIuaAorKysg L2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBoZWFkZXIuaAotICoKLSAqIERTUC1C SU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29y cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5j LgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVE IGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jZGVmaW5lIERMX1NUUkNN UCAgc3RyY21wCi0KLS8qIG1heGltdW0gcGFyZW50aGVzaXMgbmVzdGluZyBpbiByZWxvY2F0aW9u IHN0YWNrIGV4cHJlc3Npb25zICovCi0jZGVmaW5lIFNUQVRJQ19FWFBSX1NUS19TSVpFIDEwCi0K LSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAiZG9mZi5oIgotI2luY2x1ZGUg PGRzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oPgotI2luY2x1ZGUgInBhcmFtcy5oIgotI2luY2x1 ZGUgImRsb2FkX2ludGVybmFsLmgiCi0jaW5jbHVkZSAicmVsb2NfdGFibGUuaCIKLQotLyoKLSAq IFBsYXVzaWJpbGl0eSBsaW1pdHMKLSAqCi0gKiBUaGVzZSBsaW1pdHMgYXJlIGltcG9zZWQgdXBv biB0aGUgaW5wdXQgRE9GRiBmaWxlIGFzIGEgY2hlY2sgZm9yIHZhbGlkaXR5LgotICogVGhleSBh cmUgaGFyZCBsaW1pdHMsIGluIHRoYXQgdGhlIGxvYWQgd2lsbCBmYWlsIGlmIHRoZXkgYXJlIGV4 Y2VlZGVkLgotICogVGhlIG51bWJlcnMgc2VsZWN0ZWQgYXJlIGFyYml0cmFyeSwgaW4gdGhhdCB0 aGUgbG9hZGVyIGltcGxlbWVudGF0aW9uIGRvZXMKLSAqIG5vdCByZXF1aXJlIHRoZXNlIGxpbWl0 cy4KLSAqLwotCi0vKiBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBzdHJpbmcgdGFibGUgKi8K LSNkZWZpbmUgTUFYX1JFQVNPTkFCTEVfU1RSSU5HVEFCICgweDEwMDAwMCkKLS8qIG1heGltdW0g bnVtYmVyIG9mIGNvZGUsZGF0YSxldGMuIHNlY3Rpb25zICovCi0jZGVmaW5lIE1BWF9SRUFTT05B QkxFX1NFQ1RJT05TICgyMDApCi0vKiBtYXhpbXVtIG51bWJlciBvZiBsaW5rZXIgc3ltYm9scyAq LwotI2RlZmluZSBNQVhfUkVBU09OQUJMRV9TWU1CT0xTICgxMDAwMDApCi0KLS8qIHNoaWZ0IGNv dW50IHRvIGFsaWduIEZfQklHIHdpdGggRExPQURfTElUVExFICovCi0jZGVmaW5lIEFMSUdOX0NP RkZfRU5ESUFOTkVTUyA3Ci0jZGVmaW5lIEVORElBTk5FU1NfTUFTSyAoREZfQllURV9PUkRFUiA+ PiBBTElHTl9DT0ZGX0VORElBTk5FU1MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlk c3BicmlkZ2UvZHlubG9hZC9tb2R1bGVfbGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2R5bmxvYWQvbW9kdWxlX2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YTIxNmJiMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9h ZC9tb2R1bGVfbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiBk c3BicmlkZ2UvbXB1X2RyaXZlci9zcmMvZHlubG9hZC9tb2R1bGVfbGlzdC5oCi0gKgotICogRFNQ LUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNz b3JzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgot ICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBg QVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4KLSAqLwotCi0vKgotICogVGhpcyBDIGhlYWRlciBmaWxlIGdpdmVzIHRoZSBsYXlvdXQgb2Yg dGhlIGRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYnkgdGhlCi0gKiBkeW5hbWljIGxvYWRlciB0byBk ZXNjcmliZSB0aGUgc2V0IG9mIG1vZHVsZXMgbG9hZGVkIGludG8gdGhlIERTUC4KLSAqCi0gKiBM aW5rZWQgTGlzdCBTdHJ1Y3R1cmU6Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGUg ZGF0YSBzdHJ1Y3R1cmUgZGVmaW5lZCBoZXJlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0LiAgVGhl IGxpc3QKLSAqIHJlcHJlc2VudHMgdGhlIHNldCBvZiBtb2R1bGVzIHdoaWNoIGFyZSBjdXJyZW50 bHkgbG9hZGVkIGluIHRoZSBEU1AgbWVtb3J5LgotICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBs aXN0IGlzIGEgaGVhZGVyIHJlY29yZCB3aGljaCBjb250YWlucyBhIGZsYWcKLSAqIHJlcHJlc2Vu dGluZyB0aGUgc3RhdGUgb2YgdGhlIGxpc3QuICBUaGUgcmVzdCBvZiB0aGUgZW50cmllcyBpbiB0 aGUgbGlzdAotICogYXJlIG1vZHVsZSByZWNvcmRzLgotICoKLSAqIEdsb2JhbCBzeW1ib2wgIF9E TE1vZHVsZXMgZGVzaWduYXRlcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBsaXN0IChpLmUuIHRo ZQotICogaGVhZGVyIHJlY29yZCkuICBUaGlzIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQgaW4gYW55 IHByb2dyYW0gdGhhdCB3aXNoZXMgdG8KLSAqIHVzZSBETEx2aWV3IHBsdWctaW4uCi0gKgotICog U3RyaW5nIFJlcHJlc2VudGF0aW9uOgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGhl IHN0cmluZyBuYW1lcyBvZiB0aGUgbW9kdWxlIGFuZCBpdHMgc2VjdGlvbnMgYXJlIHN0b3JlZCBp biBhIGJsb2NrIG9mCi0gKiBtZW1vcnkgd2hpY2ggZm9sbG93cyB0aGUgbW9kdWxlIHJlY29yZCBp dHNlbGYuICBUaGUgc3RyaW5ncyBhcmUgb3JkZXJlZDoKLSAqIG1vZHVsZSBuYW1lIGZpcnN0LCBm b2xsb3dlZCBieSBzZWN0aW9uIG5hbWVzIGluIG9yZGVyIGZyb20gdGhlIGZpcnN0Ci0gKiBzZWN0 aW9uIHRvIHRoZSBsYXN0LiAgU3RyaW5nIG5hbWVzIGFyZSB0aWdodGx5IHBhY2tlZCBhcnJheXMg b2YgOC1iaXQKLSAqIGNoYXJhY3RlcnMgKHR3byBjaGFyYWN0ZXJzIHBlciAxNi1iaXQgd29yZCBv biB0aGUgQzU1eCkuICBTdHJpbmdzIGFyZQotICogemVyby1ieXRlLXRlcm1pbmF0ZWQuCi0gKgot ICogQ3JlYXRpbmcgYW5kIHVwZGF0aW5nIHRoZSBsaXN0OgotICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotICogVXBvbiBsb2FkaW5nIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBEU1Ag bWVtb3J5IHRoZSBkeW5hbWljIGxvYWRlciBpbnNlcnRzIGEKLSAqIG5ldyBtb2R1bGUgcmVjb3Jk IGFzIHRoZSBmaXJzdCBtb2R1bGUgcmVjb3JkIGluIHRoZSBsaXN0LiAgVGhlIGZpZWxkcyBvZgot ICogdGhpcyBtb2R1bGUgcmVjb3JkIGFyZSBpbml0aWFsaXplZCB0byByZWZsZWN0IHRoZSBwcm9w ZXJ0aWVzIG9mIHRoZSBtb2R1bGUuCi0gKiBUaGUgZHluYW1pYyBsb2FkZXIgZG9lcyBOT1QgaW5j cmVtZW50IHRoZSBmbGFnL2NvdW50ZXIgaW4gdGhlIGxpc3QncyBoZWFkZXIKLSAqIHJlY29yZC4K LSAqCi0gKiBVcG9uIHVubG9hZGluZyBhIG1vZHVsZSBmcm9tIHRoZSBEU1AgbWVtb3J5IHRoZSBk eW5hbWljIGxvYWRlciByZW1vdmVzIHRoZQotICogbW9kdWxlJ3MgcmVjb3JkIGZyb20gdGhpcyBs aXN0LiAgVGhlIGR5bmFtaWMgbG9hZGVyIGFsc28gaW5jcmVtZW50cyB0aGUKLSAqIGZsYWcvY291 bnRlciBpbiB0aGUgbGlzdCdzIGhlYWRlciByZWNvcmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlz dCBoYXMgYmVlbgotICogY2hhbmdlZC4KLSAqLwotCi0jaWZuZGVmIF9NT0RVTEVfTElTVF9IXwot I2RlZmluZSBfTU9EVUxFX0xJU1RfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8q IEdsb2JhbCBwb2ludGVyIHRvIHRoZSBtb2R1bGVzX2hlYWRlciBzdHJ1Y3R1cmUgKi8KLSNkZWZp bmUgTU9EVUxFU19IRUFERVIgIl9ETE1vZHVsZXMiCi0jZGVmaW5lIE1PRFVMRVNfSEVBREVSX05P X1VOREVSU0NPUkUgIkRMTW9kdWxlcyIKLQotLyogSW5pdGlhbCB2ZXJzaW9uIG51bWJlciAqLwot I2RlZmluZSBJTklUX1ZFUlNJT04gMQotCi0vKiBWZXJpZmljYXRpb24gbnVtYmVyIC0tIHRvIGJl IHJlY29yZGVkIGluIGVhY2ggbW9kdWxlIHJlY29yZCAqLwotI2RlZmluZSBWRVJJRklDQVRJT04g MHg3OQotCi0vKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwotc3RydWN0IGRsbF9tb2R1bGU7Ci1z dHJ1Y3QgZGxsX3NlY3Q7Ci0KLS8qIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCBpcyB0aGUg bW9kdWxlc19oZWFkZXIgcmVjb3JkOwotICogaXRzIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRo ZSBnbG9iYWwgX0RMTW9kdWxlcyBwb2ludGVyICovCi1zdHJ1Y3QgbW9kdWxlc19oZWFkZXIgewot Ci0JLyoKLQkgKiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUg bGlzdCBvciBOVUxMLgotCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMgaXMgYSB3b3JkIGFkZHJlc3Mg KEM1NXggZGF0YSBpcwotCSAqIHdvcmQtYWRkcmVzc2FibGUpCi0JICovCi0JdTMyIGZpcnN0X21v ZHVsZTsKLQotCS8qIENvbWJpbmVkIHN0b3JhZ2Ugc2l6ZSAoaW4gdGFyZ2V0IGFkZHJlc3NhYmxl IHVuaXRzKSBvZiB0aGUKLQkgKiBkbGxfbW9kdWxlIHJlY29yZCB3aGljaCBmb2xsb3dzIHRoaXMg aGVhZGVyIHJlY29yZCwgb3IgemVybwotCSAqIGlmIHRoZSBsaXN0IGlzIGVtcHR5LiAgVGhpcyBz aXplIGluY2x1ZGVzIHRoZSBtb2R1bGUncyBzdHJpbmcgdGFibGUuCi0JICogTm90ZTogZm9yIEM1 NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZCAqLwotCXUxNiBmaXJzdF9tb2R1bGVfc2l6ZTsK LQotCS8qIENvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgYSBtb2R1bGUgcmVjb3JkIGlz IHJlbW92ZWQgZnJvbQotCSAqIHRoZSBsaXN0ICovCi0JdTE2IHVwZGF0ZV9mbGFnOwotCi19Owot Ci0vKiBmb3IgZWFjaCAzMi1iaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBm aXJzdCwgd2hvc2UgYml0cyBhcmU6Ci0gKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYt Yml0IHZhbHVlcyAqLwotLyogc3dhcHBpbmcgYml0bWFwIGZvciB0eXBlIG1vZHVsZXNfaGVhZGVy ICovCi0jZGVmaW5lIE1PRFVMRVNfSEVBREVSX0JJVE1BUCAweDIKLQotLyogaW5mb3JtYXRpb24g cmVjb3JkZWQgYWJvdXQgZWFjaCBzZWN0aW9uIGluIGEgbW9kdWxlICovCi1zdHJ1Y3QgZGxsX3Nl Y3QgewotCi0JLyogTG9hZC10aW1lIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uCi0JICogTm90ZTog Zm9yIEM1NXggdGhpcyBpcyBhIGJ5dGUgYWRkcmVzcyBmb3IgcHJvZ3JhbSBzZWN0aW9ucywgYW5k Ci0JICogYSB3b3JkIGFkZHJlc3MgZm9yIGRhdGEgc2VjdGlvbnMuICBDNTV4IHByb2dyYW0gbWVt b3J5IGlzCi0JICogYnl0ZS1hZGRyZXNzYWJsZSwgd2hpbGUgZGF0YSBtZW1vcnkgaXMgd29yZC1h ZGRyZXNzYWJsZS4gKi8KLQl1MzIgc2VjdF9sb2FkX2FkcjsKLQotCS8qIFJ1bi10aW1lIGFkZHJl c3Mgb2YgdGhlIHNlY3Rpb24uCi0JICogTm90ZSAxOiBmb3IgQzU1eCB0aGlzIGlzIGEgYnl0ZSBh ZGRyZXNzIGZvciBwcm9ncmFtIHNlY3Rpb25zLCBhbmQKLQkgKiBhIHdvcmQgYWRkcmVzcyBmb3Ig ZGF0YSBzZWN0aW9ucy4KLQkgKiBOb3RlIDI6IGZvciBDNTV4IHR3byBtb3N0IHNpZ25pZmljYW50 IGJpdHMgb2YgdGhpcyBmaWVsZCBpbmRpY2F0ZQotCSAqIHRoZSBzZWN0aW9uIHR5cGU6ICcwMCcg Zm9yIGEgY29kZSBzZWN0aW9uLCAnMTEnIGZvciBhIGRhdGEgc2VjdGlvbgotCSAqIChDNTUgYWRk cmVzc2VzIGFyZSByZWFsbHkgb25seSAyNC1iaXRzIHdpZGUpLiAqLwotCXUzMiBzZWN0X3J1bl9h ZHI7Ci0KLX07Ci0KLS8qIHRoZSByZXN0IG9mIHRoZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBt b2R1bGUgcmVjb3JkcyAqLwotc3RydWN0IGRsbF9tb2R1bGUgewotCi0JLyogQWRkcmVzcyBvZiB0 aGUgbmV4dCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUgbGlzdCwgb3IgMCBpZiB0aGlzIGlzCi0J ICogdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBsaXN0LgotCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMg aXMgYSB3b3JkIGFkZHJlc3MgKEM1NXggZGF0YSBpcwotCSAqIHdvcmQtYWRkcmVzc2FibGUpICov Ci0JdTMyIG5leHRfbW9kdWxlOwotCi0JLyogQ29tYmluZWQgc3RvcmFnZSBzaXplIChpbiB0YXJn ZXQgYWRkcmVzc2FibGUgdW5pdHMpIG9mIHRoZQotCSAqIGRsbF9tb2R1bGUgcmVjb3JkIHdoaWNo IGZvbGxvd3MgdGhpcyBvbmUsIG9yIHplcm8gaWYgdGhpcyBpcyB0aGUKLQkgKiBsYXN0IHJlY29y ZCBpbiB0aGUgbGlzdC4gIFRoaXMgc2l6ZSBpbmNsdWRlcyB0aGUgbW9kdWxlJ3Mgc3RyaW5nCi0J ICogdGFibGUuCi0JICogTm90ZTogZm9yIEM1NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZC4g Ki8KLQl1MTYgbmV4dF9tb2R1bGVfc2l6ZTsKLQotCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB0 b29saW5nOyBzZXQgdG8gSU5JVF9WRVJTSU9OIGZvciBQaGFzZSAxICovCi0JdTE2IHZlcnNpb247 Ci0KLQkvKiB0aGUgdmVyaWZpY2F0aW9uIHdvcmQ7IHNldCB0byBWRVJJRklDQVRJT04gKi8KLQl1 MTYgdmVyaWZpY2F0aW9uOwotCi0JLyogTnVtYmVyIG9mIHNlY3Rpb25zIGluIHRoZSBzZWN0cyBh cnJheSAqLwotCXUxNiBudW1fc2VjdHM7Ci0KLQkvKiBNb2R1bGUncyAidW5pcXVlIiBpZDsgY29w eSBvZiB0aGUgdGltZXN0YW1wIGZyb20gdGhlIGhvc3QKLQkgKiBDT0ZGIGZpbGUgKi8KLQl1MzIg dGltZXN0YW1wOwotCi0JLyogQXJyYXkgb2YgbnVtX3NlY3RzIGVsZW1lbnRzIG9mIHRoZSBtb2R1 bGUncyBzZWN0aW9uIHJlY29yZHMgKi8KLQlzdHJ1Y3QgZGxsX3NlY3Qgc2VjdHNbMV07Ci19Owot Ci0vKiBmb3IgZWFjaCAzMiBiaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBm aXJzdCwgd2hvc2UgYml0cyBhcmU6Ci0gKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYt Yml0IHZhbHVlcyAqLwotI2RlZmluZSBETExfTU9EVUxFX0JJVE1BUCAweDYJLyogc3dhcHBpbmcg Yml0bWFwIGZvciB0eXBlIGRsbF9tb2R1bGUgKi8KLQotI2VuZGlmIC8qIF9NT0RVTEVfTElTVF9I XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcGFy YW1zLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9wYXJhbXMuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5N2ZjZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9wYXJhbXMuaAorKysgL2Rldi9udWxsCkBAIC0x LDIyNiArMCwwIEBACi0vKgotICogcGFyYW1zLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJp dmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogVGhp cyBmaWxlIGRlZmluZXMgaG9zdCBhbmQgdGFyZ2V0IHByb3BlcnRpZXMgZm9yIGFsbCBtYWNoaW5l cwotICogc3VwcG9ydGVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlci4gIFRvIGJlIHRlZGlvdXMuLi4K LSAqCi0gKiBob3N0OiB0aGUgbWFjaGluZSBvbiB3aGljaCB0aGUgZHluYW1pYyBsb2FkZXIgcnVu cwotICogdGFyZ2V0OiB0aGUgbWFjaGluZSB0aGF0IHRoZSBkeW5hbWljIGxvYWRlciBpcyBsb2Fk aW5nCi0gKgotICogSG9zdCBhbmQgdGFyZ2V0IG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lLCBk ZXBlbmRpbmcgdXBvbiB0aGUgcGFydGljdWxhcgotICogdXNlLgotICoKLSAqIENvcHlyaWdodCAo QykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdl IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK LSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VU IEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9V VCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSAqCi0gKgkJCQkJCQlIb3N0IFByb3BlcnRpZXMKLSAqCi0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLwotCi0jZGVmaW5lIEJJVFNfUEVSX0JZVEUgOAkJLyogYml0cyBpbiB0 aGUgc3RhbmRhcmQgUEMvU1VOIGJ5dGUgKi8KLSNkZWZpbmUgTE9HX0JJVFNfUEVSX0JZVEUgMwkv KiBsb2cgYmFzZSAyIG9mIHNhbWUgKi8KLSNkZWZpbmUgQllURV9NQVNLICgoMVU8PEJJVFNfUEVS X0JZVEUpLTEpCi0KLSNpZiBkZWZpbmVkKF9fVE1TMzIwQzU1WF9fKSB8fCBkZWZpbmVkKF9UTVMz MjBDNVhYKQotI2RlZmluZSBCSVRTX1BFUl9BVSAxNgotI2RlZmluZSBMT0dfQklUU19QRVJfQVUg NAotIC8qIHVzZSB0aGlzIHByaW50IHN0cmluZyBpbiBlcnJvciBtZXNzYWdlcyBmb3IgdWludDMy X3QgKi8KLSNkZWZpbmUgRk1UX1VJMzIgIjB4JWx4IgotI2RlZmluZSBGTVQ4X1VJMzIgIiUwOGx4 IgkvKiBzYW1lIGJ1dCBubyAweCwgZml4ZWQgd2lkdGggZmllbGQgKi8KLSNlbHNlCi0vKiBiaXRz IGluIHRoZSBzbWFsbGVzdCBhZGRyZXNzYWJsZSBkYXRhIHN0b3JhZ2UgdW5pdCAqLwotI2RlZmlu ZSBCSVRTX1BFUl9BVSA4Ci0vKiBsb2cgYmFzZSAyIG9mIHRoZSBzYW1lOyB1c2VmdWwgZm9yIHNo aWZ0IGNvdW50cyAqLwotI2RlZmluZSBMT0dfQklUU19QRVJfQVUgMwotI2RlZmluZSBGTVRfVUkz MiAiMHgleCIKLSNkZWZpbmUgRk1UOF9VSTMyICIlMDh4IgotI2VuZGlmCi0KLS8qIGdlbmVyaWMg ZmFzdGVzdCBtZXRob2QgZm9yIHN3YXBwaW5nIGJ5dGVzIGFuZCBzaG9ydHMgKi8KLSNkZWZpbmUg U1dBUDMyQlkxNih6eikgKCgoenopIDw8IDE2KSB8ICgoenopID4+IDE2KSkKLSNkZWZpbmUgU1dB UDE2Qlk4KHp6KSAoKCh6eikgPDwgOCkgfCAoKHp6KSA+PiA4KSkKLQotLyogISEgZG9uJ3QgYmUg dGVtcHRlZCB0byBpbnNlcnQgdHlwZSBkZWZpbml0aW9ucyBoZXJlOyB1c2UgPHN0ZGludC5oPiAh ISAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJCQkJCQkJVGFyZ2V0IFByb3Bl cnRpZXMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCi0vKiBUTVMzMjBDNnggVGFyZ2V0IFNwZWNpZmljIFBhcmFtZXRlcnMgKGJ5dGUtYWRkcmVz c2FibGUpICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgVE1TMzIwNjAKLSNkZWZpbmUg TUVNT1JHICAgICAgICAgIDB4MEwJLyogU2l6ZSBvZiBjb25maWd1cmVkIG1lbW9yeSAqLwotI2Rl ZmluZSBNRU1TSVpFICAgICAgICAgMHgwTAkvKiAoZnVsbCBhZGRyZXNzIHNwYWNlKSAqLwotCi0j ZGVmaW5lIENJTklUX0FMSUdOICAgICA4CS8qIGFsaWdubWVudCBvZiBjaW5pdCByZWNvcmQgaW4g VERBVEEgQVVzICovCi0jZGVmaW5lIENJTklUX0NPVU5UCTQJLyogd2lkdGggb2YgY291bnQgZmll bGQgaW4gVERBVEEgQVVzICovCi0jZGVmaW5lIENJTklUX0FERFJFU1MJNAkvKiB3aWR0aCBvZiBh ZGRyZXNzIGZpZWxkIGluIFREQVRBIEFVcyAqLwotI2RlZmluZSBDSU5JVF9QQUdFX0JJVFMJMAkv KiBOdW1iZXIgb2YgTFNCcyBvZiBhZGRyZXNzIHRoYXQKLQkJCQkgKiBhcmUgcGFnZSBudW1iZXIg Ki8KLQotI2RlZmluZSBMRU5JRU5UX1NJR05FRF9SRUxFWFBTIDAJLyogRE9FUyBTSUdORUQgQUxM T1cgTUFYIFVOU0lHTkVEICovCi0KLSN1bmRlZiBUQVJHRVRfRU5ESUFOTkVTUwkvKiBtYXkgYmUg YmlnIG9yIGxpdHRsZSBlbmRpYW4gKi8KLQotLyogYWxpZ24gYSB0YXJnZXQgYWRkcmVzcyB0byBh IHdvcmQgYm91bmRhcnkgKi8KLSNkZWZpbmUgVEFSR0VUX1dPUkRfQUxJR04oenopICgoKHp6KSAr IDB4MykgJiAtMHg0KQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKgkJCURF RkFVTFQgU0VUVElOR1MgYW5kIERFUklWRUQgUFJPUEVSVElFUwotICoKLSAqIFRoaXMgc2VjdGlv biBlc3RhYmxpc2hlcyBkZWZhdWx0cyBmb3IgdmFsdWVzIG5vdCBzcGVjaWZpZWQgYWJvdmUKLSAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZm5kZWYgVEFSR0VUX0FVX0JJVFMKLSNkZWZpbmUgVEFS R0VUX0FVX0JJVFMgOAkvKiB3aWR0aCBvZiB0aGUgdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgKi8K LSNkZWZpbmUgTE9HX1RBUkdFVF9BVV9CSVRTIDMJLyogbG9nMiBvZiBzYW1lICovCi0jZW5kaWYK LQotI2lmbmRlZiBDSU5JVF9ERUZBVUxUX1BBR0UKLSNkZWZpbmUgQ0lOSVRfREVGQVVMVF9QQUdF IDAJLyogZGVmYXVsdCAuY2luaXQgcGFnZSBudW1iZXIgKi8KLSNlbmRpZgotCi0jaWZuZGVmIERB VEFfUlVOMkxPQUQKLSNkZWZpbmUgREFUQV9SVU4yTE9BRCh6eikgKHp6KQkvKiB0cmFuc2xhdGUg ZGF0YSBydW4gYWRkcmVzcyB0byBsb2FkIGFkZHJlc3MgKi8KLSNlbmRpZgotCi0jaWZuZGVmIERC R19MSVNUX1BBR0UKLSNkZWZpbmUgREJHX0xJU1RfUEFHRSAwCQkvKiBwYWdlIG51bWJlciBmb3Ig LmRsbHZpZXcgc2VjdGlvbiAqLwotI2VuZGlmCi0KLSNpZm5kZWYgVEFSR0VUX1dPUkRfQUxJR04K LS8qIGFsaWduIGEgdGFyZ2V0IGFkZHJlc3MgdG8gYSB3b3JkIGJvdW5kYXJ5ICovCi0jZGVmaW5l IFRBUkdFVF9XT1JEX0FMSUdOKHp6KSAoenopCi0jZW5kaWYKLQotI2lmbmRlZiBUREFUQV9UT19U QUREUgotI2RlZmluZSBUREFUQV9UT19UQUREUih6eikgKHp6KQkvKiB0YXJnZXQgZGF0YSBhZGRy ZXNzIHRvIHRhcmdldCBBVSBhZGRyZXNzICovCi0jZGVmaW5lIFRBRERSX1RPX1REQVRBKHp6KSAo enopCS8qIHRhcmdldCBBVSBhZGRyZXNzIHRvIHRhcmdldCBkYXRhIGFkZHJlc3MgKi8KLSNkZWZp bmUgVERBVEFfQVVfQklUUwlUQVJHRVRfQVVfQklUUwkvKiBiaXRzIHBlciBkYXRhIEFVICovCi0j ZGVmaW5lIExPR19UREFUQV9BVV9CSVRTCUxPR19UQVJHRVRfQVVfQklUUwotI2VuZGlmCi0KLS8q Ci0gKgotICogVXNlZnVsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnNpb25zIGRlcml2ZWQgZnJvbSB0 aGUgYWJvdmUKLSAqCi0gKi8KLQotLyoKLSAqIENvbnZlcnNpb25zIGJldHdlZW4gaG9zdCBhbmQg dGFyZ2V0IGFkZHJlc3NlcwotICovCi0jaWYgTE9HX0JJVFNfUEVSX0FVID09IExPR19UQVJHRVRf QVVfQklUUwotLyogdHJhbnNsYXRlIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0IHRvIGhvc3QgYWRk cmVzcyAqLwotI2RlZmluZSBUQUREUl9UT19IT1NUKHgpICh4KQotLyogdHJhbnNsYXRlIGhvc3Qg YWRkcmVzcyB0byB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCAqLwotI2RlZmluZSBIT1NUX1RPX1RB RERSKHgpICh4KQotI2VsaWYgTE9HX0JJVFNfUEVSX0FVID4gTE9HX1RBUkdFVF9BVV9CSVRTCi0j ZGVmaW5lIFRBRERSX1RPX0hPU1QoeCkgKCh4KSA+PiAoTE9HX0JJVFNfUEVSX0FVLUxPR19UQVJH RVRfQVVfQklUUykpCi0jZGVmaW5lIEhPU1RfVE9fVEFERFIoeCkgKCh4KSA8PCAoTE9HX0JJVFNf UEVSX0FVLUxPR19UQVJHRVRfQVVfQklUUykpCi0jZWxzZQotI2RlZmluZSBUQUREUl9UT19IT1NU KHgpICgoeCkgPDwgKExPR19UQVJHRVRfQVVfQklUUy1MT0dfQklUU19QRVJfQVUpKQotI2RlZmlu ZSBIT1NUX1RPX1RBRERSKHgpICgoeCkgPj4gKExPR19UQVJHRVRfQVVfQklUUy1MT0dfQklUU19Q RVJfQVUpKQotI2VuZGlmCi0KLSNpZiBMT0dfQklUU19QRVJfQVUgPT0gTE9HX1REQVRBX0FVX0JJ VFMKLS8qIHRyYW5zbGF0ZSB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCB0byBob3N0IGFkZHJlc3Mg Ki8KLSNkZWZpbmUgVERBVEFfVE9fSE9TVCh4KSAoeCkKLS8qIHRyYW5zbGF0ZSBob3N0IGFkZHJl c3MgdG8gdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgKi8KLSNkZWZpbmUgSE9TVF9UT19UREFUQSh4 KSAoeCkKLS8qIHRyYW5zbGF0ZSBob3N0IGFkZHJlc3MgdG8gdGFyZ2V0IGFkZHJlc3NhYmxlIHVu aXQsIHJvdW5kIHVwICovCi0jZGVmaW5lIEhPU1RfVE9fVERBVEFfUk9VTkQoeCkgKHgpCi0vKiBi eXRlIG9mZnNldCB0byBob3N0IG9mZnNldCwgcm91bmRlZCB1cCBmb3IgVERBVEEgc2l6ZSAqLwot I2RlZmluZSBCWVRFX1RPX0hPU1RfVERBVEFfUk9VTkQoeCkgQllURV9UT19IT1NUX1JPVU5EKHgp Ci0jZWxpZiBMT0dfQklUU19QRVJfQVUgPiBMT0dfVERBVEFfQVVfQklUUwotI2RlZmluZSBUREFU QV9UT19IT1NUKHgpICgoeCkgPj4gKExPR19CSVRTX1BFUl9BVS1MT0dfVERBVEFfQVVfQklUUykp Ci0jZGVmaW5lIEhPU1RfVE9fVERBVEEoeCkgKCh4KSA8PCAoTE9HX0JJVFNfUEVSX0FVLUxPR19U REFUQV9BVV9CSVRTKSkKLSNkZWZpbmUgSE9TVF9UT19UREFUQV9ST1VORCh4KSAoKHgpIDw8IChM T0dfQklUU19QRVJfQVUtTE9HX1REQVRBX0FVX0JJVFMpKQotI2RlZmluZSBCWVRFX1RPX0hPU1Rf VERBVEFfUk9VTkQoeCkgQllURV9UT19IT1NUX1JPVU5EKHgpCi0jZWxzZQotI2RlZmluZSBUREFU QV9UT19IT1NUKHgpICgoeCkgPDwgKExPR19UREFUQV9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkp Ci0jZGVmaW5lIEhPU1RfVE9fVERBVEEoeCkgKCh4KSA+PiAoTE9HX1REQVRBX0FVX0JJVFMtTE9H X0JJVFNfUEVSX0FVKSkKLSNkZWZpbmUgSE9TVF9UT19UREFUQV9ST1VORCh4KSAoKCh4KSArXAot CQkJCSgxPDwoTE9HX1REQVRBX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0FVKSktMSkgPj5cCi0JCQkJ KExPR19UREFUQV9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkpCi0jZGVmaW5lIEJZVEVfVE9fSE9T VF9UREFUQV9ST1VORCh4KSAoQllURV9UT19IT1NUKCh4KSArXAotCSgxPDwoTE9HX1REQVRBX0FV X0JJVFMtTE9HX0JJVFNfUEVSX0JZVEUpKS0xKSAmXAotCS0oVERBVEFfQVVfQklUUy9CSVRTX1BF Ul9BVSkpCi0jZW5kaWYKLQotLyoKLSAqIElucHV0IGluIERPRkYgZm9ybWF0IGlzIGFsd2F5cyBl eHByZXNlZCBpbiBieXRlcywgcmVnYXJkbGVzcyBvZiBsb2FkaW5nIGhvc3QKLSAqIHNvIHdlIHdp bmQgdXAgY29udmVydGluZyBmcm9tIGJ5dGVzIHRvIHRhcmdldCBhbmQgaG9zdCB1bml0cyBldmVu IHdoZW4gdGhlCi0gKiBob3N0IGlzIG5vdCBhIGJ5dGUgbWFjaGluZS4KLSAqLwotI2lmIExPR19C SVRTX1BFUl9BVSA9PSBMT0dfQklUU19QRVJfQllURQotI2RlZmluZSBCWVRFX1RPX0hPU1QoeCkg KHgpCi0jZGVmaW5lIEJZVEVfVE9fSE9TVF9ST1VORCh4KSAoeCkKLSNkZWZpbmUgSE9TVF9UT19C WVRFKHgpICh4KQotI2VsaWYgTE9HX0JJVFNfUEVSX0FVID49IExPR19CSVRTX1BFUl9CWVRFCi0j ZGVmaW5lIEJZVEVfVE9fSE9TVCh4KSAoKHgpID4+IChMT0dfQklUU19QRVJfQVUgLSBMT0dfQklU U19QRVJfQllURSkpCi0jZGVmaW5lIEJZVEVfVE9fSE9TVF9ST1VORCh4KSAoKHggKyAoQklUU19Q RVJfQVUvQklUU19QRVJfQllURS0xKSkgPj5cCi0JCQkgICAgICAoTE9HX0JJVFNfUEVSX0FVIC0g TE9HX0JJVFNfUEVSX0JZVEUpKQotI2RlZmluZSBIT1NUX1RPX0JZVEUoeCkgKCh4KSA8PCAoTE9H X0JJVFNfUEVSX0FVIC0gTE9HX0JJVFNfUEVSX0JZVEUpKQotI2Vsc2UKLS8qIGxldHMgbm90IHRy eSB0byBkZWFsIHdpdGggc3ViLTgtYml0IGJ5dGUgbWFjaGluZXMgKi8KLSNlbmRpZgotCi0jaWYg TE9HX1RBUkdFVF9BVV9CSVRTID09IExPR19CSVRTX1BFUl9CWVRFCi0vKiB0cmFuc2xhdGUgdGFy Z2V0IGFkZHJlc3NhYmxlIHVuaXQgdG8gYnl0ZSBhZGRyZXNzICovCi0jZGVmaW5lIFRBRERSX1RP X0JZVEUoeCkgKHgpCi0vKiB0cmFuc2xhdGUgYnl0ZSBhZGRyZXNzIHRvIHRhcmdldCBhZGRyZXNz YWJsZSB1bml0ICovCi0jZGVmaW5lIEJZVEVfVE9fVEFERFIoeCkgKHgpCi0jZWxpZiBMT0dfVEFS R0VUX0FVX0JJVFMgPiBMT0dfQklUU19QRVJfQllURQotI2RlZmluZSBUQUREUl9UT19CWVRFKHgp ICgoeCkgPDwgKExPR19UQVJHRVRfQVVfQklUUy1MT0dfQklUU19QRVJfQllURSkpCi0jZGVmaW5l IEJZVEVfVE9fVEFERFIoeCkgKCh4KSA+PiAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BF Ul9CWVRFKSkKLSNlbHNlCi0vKiBsZXRzIG5vdCB0cnkgdG8gZGVhbCB3aXRoIHN1Yi04LWJpdCBi eXRlIG1hY2hpbmVzICovCi0jZW5kaWYKLQotI2lmZGVmIF9CSUdfRU5ESUFOCi0jZGVmaW5lIEhP U1RfRU5ESUFOTkVTUyAxCi0jZWxzZQotI2RlZmluZSBIT1NUX0VORElBTk5FU1MgMAotI2VuZGlm Ci0KLSNpZmRlZiBUQVJHRVRfRU5ESUFOTkVTUwotI2RlZmluZSBUQVJHRVRfRU5ESUFOTkVTU19E SUZGRVJTKHJ0ZW5kKSAoSE9TVF9FTkRJQU5ORVNTXlRBUkdFVF9FTkRJQU5ORVNTKQotI2VsaWYg SE9TVF9FTkRJQU5ORVNTCi0jZGVmaW5lIFRBUkdFVF9FTkRJQU5ORVNTX0RJRkZFUlMocnRlbmQp ICghKHJ0ZW5kKSkKLSNlbHNlCi0jZGVmaW5lIFRBUkdFVF9FTkRJQU5ORVNTX0RJRkZFUlMocnRl bmQpIChydGVuZCkKLSNlbmRpZgotCi0vKiB0aGUgdW5pdCBpbiB3aGljaCB3ZSBwcm9jZXNzIHRh cmdldCBpbWFnZSBkYXRhICovCi0jaWYgVEFSR0VUX0FVX0JJVFMgPD0gOAotdHlwZWRlZiB1OCB0 Z3RfYXVfdDsKLSNlbGlmIFRBUkdFVF9BVV9CSVRTIDw9IDE2Ci10eXBlZGVmIHUxNiB0Z3RfYXVf dDsKLSNlbHNlCi10eXBlZGVmIHUzMiB0Z3RfYXVfdDsKLSNlbmRpZgotCi0vKiBzaXplIG9mIHRo YXQgdW5pdCAqLwotI2lmIFRBUkdFVF9BVV9CSVRTIDwgQklUU19QRVJfQVUKLSNkZWZpbmUgVEdU QVVfQklUUyBCSVRTX1BFUl9BVQotI2RlZmluZSBMT0dfVEdUQVVfQklUUyBMT0dfQklUU19QRVJf QVUKLSNlbHNlCi0jZGVmaW5lIFRHVEFVX0JJVFMgVEFSR0VUX0FVX0JJVFMKLSNkZWZpbmUgTE9H X1RHVEFVX0JJVFMgTE9HX1RBUkdFVF9BVV9CSVRTCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jLmMgYi9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvZHlubG9hZC9yZWxvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiYjQyMmI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5s b2FkL3JlbG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotLyoKLSAqIHJlbG9j LmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBU SSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMg SW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFD S0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAq IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJ TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgImhlYWRlci5oIgotCi0jaWYg VE1TMzIwNjAKLS8qIHRoZSBtYWdpYyBzeW1ib2wgZm9yIHRoZSBzdGFydCBvZiBCU1MgKi8KLXN0 YXRpYyBjb25zdCBjaGFyIGJzc3N5bWJvbFtdID0geyAiLmJzcyIgfTsKLSNlbmRpZgotCi0jaWYg VE1TMzIwNjAKLSNpbmNsdWRlICJyZWxvY190YWJsZV9jNjAwMC5jIgotI2VuZGlmCi0KLSNpZiBU TVMzMjA2MAotLyogRnJvbSBjb2ZmLmggLSBpZ25vcmUgdGhlc2UgcmVsb2NhdGlvbiBvcGVyYXRp b25zICovCi0jZGVmaW5lIFJfQzYwQUxJR04gICAgIDB4NzYJLyogQzYwOiBBbGlnbm1lbnQgaW5m byBmb3IgY29tcHJlc3NvciAqLwotI2RlZmluZSBSX0M2MEZQSEVBRCAgICAweDc3CS8qIEM2MDog RXhwbGljaXQgYXNzZW1ibHkgZGlyZWN0aXZlICovCi0jZGVmaW5lIFJfQzYwTk9DTVAgICAgMHgx MDAJLyogQzYwOiBEb24ndCBjb21wcmVzcyB0aGlzIGNvZGUgc2NuICovCi0jZW5kaWYKLQotLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCi0gKiBQcm9jZWR1cmUgZGxvYWRfdW5wYWNrCi0gKgotICogUGFyYW1l dGVyczoKLSAqCWRhdGEJcG9pbnRlciB0byBzdG9yYWdlIHVuaXQgY29udGFpbmluZyBsb3dlc3Qg aG9zdCBhZGRyZXNzIG9mCi0gKgkJaW1hZ2UgZGF0YQotICoJZmllbGRzeglTaXplIG9mIGJpdCBm aWVsZCwgMCA8IGZpZWxkc3ogPD0gc2l6ZW9mKHJ2YWx1ZSkqQklUU19QRVJfQVUKLSAqCW9mZnNl dAlPZmZzZXQgZnJvbSBMU0IsIDAgPD0gb2Zmc2V0IDwgQklUU19QRVJfQVUKLSAqCXNnbglTaWdu ZWRuZXNzIG9mIHRoZSBmaWVsZCAoUk9QX1NHTiwgUk9QX1VOUywgUk9QX01BWCwgUk9QX0FOWSkK LSAqCi0gKiBFZmZlY3Q6Ci0gKglFeHRyYWN0cyB0aGUgc3BlY2lmaWVkIGZpZWxkIGFuZCByZXR1 cm5zIGl0LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLXJ2YWx1ZSBkbG9hZF91bnBhY2soc3RydWN0 IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICpkYXRhLCBpbnQgZmllbGRzeiwKLQkJICAg IGludCBvZmZzZXQsIHVuc2lnbmVkIHNnbikKLXsKLQlyZWdpc3RlciBydmFsdWUgb2JqdmFsOwot CXJlZ2lzdGVyIGludCBzaGlmdCwgZGlyZWN0aW9uOwotCXJlZ2lzdGVyIHRndF9hdV90ICpkcCA9 IGRhdGE7Ci0KLQlmaWVsZHN6IC09IDE7CS8qIGF2b2lkIG5hc3RpbmVzcyB3aXRoIDMyLWJpdCBz aGlmdCBvZiAzMi1iaXQgdmFsdWUgKi8KLQkvKiAqIGNvbGxlY3QgdXAgZW5vdWdoIGJpdHMgdG8g Y29udGFpbiB0aGUgZGVzaXJlZCBmaWVsZCAqLwotCWlmIChUQVJHRVRfQklHX0VORElBTikgewot CQlkcCArPSAoZmllbGRzeiArIG9mZnNldCkgPj4gTE9HX1RHVEFVX0JJVFM7Ci0JCWRpcmVjdGlv biA9IC0xOwotCX0gZWxzZQotCQlkaXJlY3Rpb24gPSAxOwotCW9ianZhbCA9ICpkcCA+PiBvZmZz ZXQ7Ci0Jc2hpZnQgPSBUR1RBVV9CSVRTIC0gb2Zmc2V0OwotCXdoaWxlIChzaGlmdCA8PSBmaWVs ZHN6KSB7Ci0JCWRwICs9IGRpcmVjdGlvbjsKLQkJb2JqdmFsICs9IChydmFsdWUpICpkcCA8PCBz aGlmdDsKLQkJc2hpZnQgKz0gVEdUQVVfQklUUzsKLQl9Ci0KLQkvKiAqIHNpZ24gb3IgemVybyBl eHRlbmQgdGhlIHZhbHVlIGFwcHJvcHJpYXRlbHkgKi8KLQlpZiAoc2duID09IFJPUF9VTlMpCi0J CW9ianZhbCAmPSAoMiA8PCBmaWVsZHN6KSAtIDE7Ci0JZWxzZSB7Ci0JCXNoaWZ0ID0gc2l6ZW9m KHJ2YWx1ZSkgKiBCSVRTX1BFUl9BVSAtIDEgLSBmaWVsZHN6OwotCQlvYmp2YWwgPSAob2JqdmFs IDw8IHNoaWZ0KSA+PiBzaGlmdDsKLQl9Ci0KLQlyZXR1cm4gb2JqdmFsOwotCi19CQkJCS8qIGRs b2FkX3VucGFjayAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFByb2NlZHVyZSBkbG9hZF9y ZXBhY2sKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJdmFsCQlWYWx1ZSB0byBpbnNlcnQKLSAqCWRh dGEJUG9pbnRlciB0byBzdG9yYWdlIHVuaXQgY29udGFpbmluZyBsb3dlc3QgaG9zdCBhZGRyZXNz IG9mCi0gKiAJCWltYWdlIGRhdGEKLSAqCWZpZWxkc3oJU2l6ZSBvZiBiaXQgZmllbGQsIDAgPCBm aWVsZHN6IDw9IHNpemVvZihydmFsdWUpKkJJVFNfUEVSX0FVCi0gKglvZmZzZXQJT2Zmc2V0IGZy b20gTFNCLCAwIDw9IG9mZnNldCA8IEJJVFNfUEVSX0FVCi0gKglzZ24JU2lnbmVkbmVzcyBvZiB0 aGUgZmllbGQgKFJPUF9TR04sIFJPUF9VTlMsIFJPUF9NQVgsIFJPUF9BTlkpCi0gKgotICogRWZm ZWN0OgotICoJU3R1ZmZzIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIHNwZWNpZmllZCBmaWVs ZC4gIFJldHVybnMgMCBmb3IKLSAqCXN1Y2Nlc3MKLSAqIG9yIDEgaWYgdGhlIHZhbHVlIHdpbGwg bm90IGZpdCBpbiB0aGUgc3BlY2lmaWVkIGZpZWxkIGFjY29yZGluZyB0byB0aGUKLSAqIHNwZWNp ZmllZCBzaWduZWRuZXNzIHJ1bGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgb3ZmX2xpbWl0W10gPSB7IDEsIDIsIDIgfTsKLQotaW50IGRsb2FkX3Jl cGFjayhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgcnZhbHVlIHZhbCwgdGd0X2F1X3QgKmRh dGEsCi0JCSBpbnQgZmllbGRzeiwgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKQotewotCXJlZ2lz dGVyIHVydmFsdWUgb2JqdmFsLCBtYXNrOwotCXJlZ2lzdGVyIGludCBzaGlmdCwgZGlyZWN0aW9u OwotCXJlZ2lzdGVyIHRndF9hdV90ICpkcCA9IGRhdGE7Ci0KLQlmaWVsZHN6IC09IDE7CS8qIGF2 b2lkIG5hc3RpbmVzcyB3aXRoIDMyLWJpdCBzaGlmdCBvZiAzMi1iaXQgdmFsdWUgKi8KLQkvKiBj bGlwIHRoZSBiaXRzICovCi0JbWFzayA9ICgyVUwgPDwgZmllbGRzeikgLSAxOwotCW9ianZhbCA9 ICh2YWwgJiBtYXNrKTsKLQkvKiAqIHN0b3JlIHRoZSBiaXRzIHRocm91Z2ggdGhlIHNwZWNpZmll ZCBtYXNrICovCi0JaWYgKFRBUkdFVF9CSUdfRU5ESUFOKSB7Ci0JCWRwICs9IChmaWVsZHN6ICsg b2Zmc2V0KSA+PiBMT0dfVEdUQVVfQklUUzsKLQkJZGlyZWN0aW9uID0gLTE7Ci0JfSBlbHNlCi0J CWRpcmVjdGlvbiA9IDE7Ci0KLQkvKiBpbnNlcnQgTFNCcyAqLwotCSpkcCA9ICgqZHAgJiB+KG1h c2sgPDwgb2Zmc2V0KSkgKyAob2JqdmFsIDw8IG9mZnNldCk7Ci0Jc2hpZnQgPSBUR1RBVV9CSVRT IC0gb2Zmc2V0OwotCS8qIGFsaWduIG1hc2sgYW5kIG9ianZhbCB3aXRoIEFVIGJvdW5kYXJ5ICov Ci0Jb2JqdmFsID4+PSBzaGlmdDsKLQltYXNrID4+PSBzaGlmdDsKLQotCXdoaWxlIChtYXNrKSB7 Ci0JCWRwICs9IGRpcmVjdGlvbjsKLQkJKmRwID0gKCpkcCAmIH5tYXNrKSArIG9ianZhbDsKLQkJ b2JqdmFsID4+PSBUR1RBVV9CSVRTOwotCQltYXNrID4+PSBUR1RBVV9CSVRTOwotCX0KLQotCS8q Ci0JICogY2hlY2sgZm9yIG92ZXJmbG93Ci0JICovCi0JaWYgKHNnbikgewotCQl1bnNpZ25lZCB0 bXAgPSAodmFsID4+IGZpZWxkc3opICsgKHNnbiAmIDB4MSk7Ci0KLQkJaWYgKHRtcCA+IG92Zl9s aW1pdFtzZ24gLSAxXSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLQotfQkJCQkvKiBk bG9hZF9yZXBhY2sgKi8KLQotLyogbG9va3VwIHRhYmxlIGZvciB0aGUgc2NhbGluZyBhbW91bnQg aW4gYSBDNnggaW5zdHJ1Y3Rpb24gKi8KLSNpZiBUTVMzMjA2MAotI2RlZmluZSBTQ0FMRV9CSVRT IDQJCS8qIHRoZXJlIGFyZSA0IGJpdHMgaW4gdGhlIHNjYWxlIGZpZWxkICovCi0jZGVmaW5lIFND QUxFX01BU0sgMHg3CQkvKiB3ZSByZWFsbHkgb25seSB1c2UgdGhlIGJvdHRvbSAzIGJpdHMgKi8K LXN0YXRpYyBjb25zdCB1OCBjNjBfc2NhbGVbU0NBTEVfTUFTSyArIDFdID0gewotCTEsIDAsIDAs IDAsIDEsIDEsIDIsIDIKLX07Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQcm9j ZWR1cmUgZGxvYWRfcmVsb2NhdGUKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZGF0YQlQb2ludGVy IHRvIGJhc2Ugb2YgaW1hZ2UgZGF0YQotICoJcnAJCVBvaW50ZXIgdG8gcmVsb2NhdGlvbiBvcGVy YXRpb24KLSAqCi0gKiBFZmZlY3Q6Ci0gKglQZXJmb3JtcyB0aGUgc3BlY2lmaWVkIHJlbG9jYXRp b24gb3BlcmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotdm9pZCBkbG9hZF9yZWxvY2F0ZShz dHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgdGd0X2F1X3QgKmRhdGEsCi0JCSAgICBzdHJ1Y3Qg cmVsb2NfcmVjb3JkX3QgKnJwLCBib29sICp0cmFtcHNfZ2VuZXJhdGVkLAotCQkgICAgYm9vbCBz ZWNvbmRfcGFzcykKLXsKLQlydmFsdWUgdmFsLCByZWxvY19hbXQsIG9yaWdfdmFsID0gMDsKLQl1 bnNpZ25lZCBpbnQgZmllbGRzeiA9IDA7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDA7Ci0JdW5z aWduZWQgaW50IHJlbG9jX2luZm8gPSAwOwotCXVuc2lnbmVkIGludCByZWxvY19hY3Rpb24gPSAw OwotCXJlZ2lzdGVyIGludCByeCA9IDA7Ci0JcnZhbHVlICpzdGFja3AgPSBOVUxMOwotCWludCB0 b3A7Ci0Jc3RydWN0IGxvY2FsX3N5bWJvbCAqc3ZwID0gTlVMTDsKLSNpZmRlZiBSRlZfU0NBTEUK LQl1bnNpZ25lZCBpbnQgc2NhbGUgPSAwOwotI2VuZGlmCi0Jc3RydWN0IGltYWdlX3BhY2tldF90 ICppbWdfcGt0ID0gTlVMTDsKLQotCS8qIFRoZSBpbWFnZSBwYWNrZXQgZGF0YSBzdHJ1Y3QgaXMg b25seSB1c2VkIGR1cmluZyBmaXJzdCBwYXNzCi0JICogcmVsb2NhdGlvbiBpbiB0aGUgZXZlbnQg dGhhdCBhIHRyYW1wb2xpbmUgaXMgbmVlZGVkLiAgMm5kIHBhc3MKLQkgKiByZWxvY2F0aW9uIGRv ZXNuJ3QgZ3VhcmFudGVlIHRoYXQgZGF0YSBpcyBjb21pbmcgZnJvbSBhbgotCSAqIGltYWdlX3Bh Y2tldF90IHN0cnVjdHVyZS4gU2VlIGNsb2FkLmMsIGRsb2FkX2RhdGEgZm9yIGhvdyBpbWdfZGF0 YSBpcwotCSAqIHNldC4gSWYgdGhhdCBjaGFuZ2VzIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCEh ISAqLwotCWlmIChzZWNvbmRfcGFzcyA9PSBmYWxzZSkKLQkJaW1nX3BrdCA9IChzdHJ1Y3QgaW1h Z2VfcGFja2V0X3QgKikoKHU4ICopIGRhdGEgLQotCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QKLQkJ CQkJCQkgICBpbWFnZV9wYWNrZXRfdCkpOwotCi0JcnggPSBIQVNIX0ZVTkMocnAtPlRZUEUpOwot CXdoaWxlIChyb3BfbWFwMVtyeF0gIT0gcnAtPlRZUEUpIHsKLQkJcnggPSBIQVNIX0wocm9wX21h cDJbcnhdKTsKLQkJaWYgKHJ4IDwgMCkgewotI2lmIFRNUzMyMDYwCi0JCQlzd2l0Y2ggKHJwLT5U WVBFKSB7Ci0JCQljYXNlIFJfQzYwQUxJR046Ci0JCQljYXNlIFJfQzYwTk9DTVA6Ci0JCQljYXNl IFJfQzYwRlBIRUFEOgotCQkJCS8qIElnbm9yZSB0aGVzZSByZWxvYyB0eXBlcyBhbmQgcmV0dXJu ICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIFVua25vd24gcmVsb2MgdHlwZSwg cHJpbnQgZXJyb3IgYW5kIHJldHVybiAqLwotCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCBj b2ZmIG9wZXJhdG9yIDB4JXgiLAotCQkJCQkgICAgcnAtPlRZUEUpOwotCQkJfQotI2Vsc2UKLQkJ CWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCBjb2ZmIG9wZXJhdG9yIDB4JXgiLCBycC0+VFlQRSk7 Ci0jZW5kaWYKLQkJCXJldHVybjsKLQkJfQotCX0KLQlyeCA9IEhBU0hfSShyb3BfbWFwMltyeF0p OwotCWlmICgocnggPCAoc2l6ZW9mKHJvcF9hY3Rpb24pIC8gc2l6ZW9mKHUxNikpKQotCSAgICAm JiAocnggPCAoc2l6ZW9mKHJvcF9pbmZvKSAvIHNpemVvZih1MTYpKSkgJiYgKHJ4ID4gMCkpIHsK LQkJcmVsb2NfYWN0aW9uID0gcm9wX2FjdGlvbltyeF07Ci0JCXJlbG9jX2luZm8gPSByb3BfaW5m b1tyeF07Ci0JfSBlbHNlIHsKLQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQnVmZmVyIE92ZXJmbG93 IC0gQXJyYXkgSW5kZXggT3V0ICIKLQkJCSAgICAib2YgQm91bmRzIik7Ci0JfQotCi0JLyogQ29t cHV0ZSB0aGUgcmVsb2NhdGlvbiBhbW91bnQgZm9yIHRoZSByZWZlcmVuY2VkIHN5bWJvbCwgaWYg YW55ICovCi0JcmVsb2NfYW10ID0gcnAtPlVWQUw7Ci0JaWYgKFJGVl9TWU0ocmVsb2NfaW5mbykp IHsJLyogcmVsb2NhdGlvbiB1c2VzIGEgc3ltYm9sIHJlZmVyZW5jZSAqLwotCQkvKiBJZiB0aGlz IGlzIGZpcnN0IHBhc3MsIHVzZSB0aGUgbW9kdWxlIGxvY2FsIHN5bWJvbCB0YWJsZSwKLQkJICog ZWxzZSB1c2UgdGhlIHRyYW1wb2xpbmUgc3ltYm9sIHRhYmxlLiAqLwotCQlpZiAoc2Vjb25kX3Bh c3MgPT0gZmFsc2UpIHsKLQkJCWlmICgodTMyKSBycC0+U1lNTkRYIDwgZGx0aGlzLT5kZmlsZV9o ZHIuZGZfbm9fc3ltcykgewotCQkJCS8qIHJlYWwgc3ltYm9sIHJlZmVyZW5jZSAqLwotCQkJCXN2 cCA9ICZkbHRoaXMtPmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXTsKLQkJCQlyZWxvY19hbXQgPSAo UkZWX1NZTShyZWxvY19pbmZvKSA9PSBST1BfU1lNRCkgPwotCQkJCSAgICBzdnAtPmRlbHRhIDog c3ZwLT52YWx1ZTsKLQkJCX0KLQkJCS8qIHJlbG9jIHJlZmVyZW5jZXMgY3VycmVudCBzZWN0aW9u ICovCi0JCQllbHNlIGlmIChycC0+U1lNTkRYID09IC0xKSB7Ci0JCQkJcmVsb2NfYW10ID0gKFJG Vl9TWU0ocmVsb2NfaW5mbykgPT0gUk9QX1NZTUQpID8KLQkJCQkgICAgZGx0aGlzLT5kZWx0YV9y dW5hZGRyIDoKLQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5ydW5fYWRkcjsKLQkJCX0KLQkJ fQotCX0KLQkvKiByZWxvY2F0aW9uIHVzZXMgYSBzeW1ib2wgcmVmZXJlbmNlICovCi0JLyogSGFu ZGxlIHN0YWNrIGFkanVzdG1lbnQgKi8KLQl2YWwgPSAwOwotCXRvcCA9IFJGVl9TVEsocmVsb2Nf aW5mbyk7Ci0JaWYgKHRvcCkgewotCQl0b3AgKz0gZGx0aGlzLT5yZWxzdGtpZHggLSBSU1RLX1VP UDsKLQkJaWYgKHRvcCA+PSBTVEFUSUNfRVhQUl9TVEtfU0laRSkgewotCQkJZGxvYWRfZXJyb3Io ZGx0aGlzLAotCQkJCSAgICAiRXhwcmVzc2lvbiBzdGFjayBvdmVyZmxvdyBpbiAlcyBhdCBvZmZz ZXQgIgotCQkJCSAgICBGTVRfVUkzMiwgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAotCQkJCSAg ICBycC0+dmFkZHIgKyBkbHRoaXMtPmltYWdlX29mZnNldCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJ dmFsID0gZGx0aGlzLT5yZWxzdGtbZGx0aGlzLT5yZWxzdGtpZHhdOwotCQlkbHRoaXMtPnJlbHN0 a2lkeCA9IHRvcDsKLQkJc3RhY2twID0gJmRsdGhpcy0+cmVsc3RrW3RvcF07Ci0JfQotCS8qIERl cml2ZSBmaWVsZCBwb3NpdGlvbiBhbmQgc2l6ZSwgaWYgd2UgbmVlZCB0aGVtICovCi0JaWYgKHJl bG9jX2luZm8gJiBST1BfUlcpIHsJLyogcmVhZCBvciB3cml0ZSBhY3Rpb24gaW4gb3VyIGZ1dHVy ZSAqLwotCQlmaWVsZHN6ID0gUkZWX1dJRFRIKHJlbG9jX2FjdGlvbik7Ci0JCWlmIChmaWVsZHN6 KSB7CS8qIGZpZWxkIGluZm8gZnJvbSB0YWJsZSAqLwotCQkJb2Zmc2V0ID0gUkZWX1BPU04ocmVs b2NfYWN0aW9uKTsKLQkJCWlmIChUQVJHRVRfQklHX0VORElBTikKLQkJCQkvKiBtYWtlIHN1cmUg dmFkZHIgaXMgdGhlIGxvd2VzdCB0YXJnZXQKLQkJCQkgKiBhZGRyZXNzIGNvbnRhaW5pbmcgYml0 cyAqLwotCQkJCXJwLT52YWRkciArPSBSRlZfQklHT0ZGKHJlbG9jX2luZm8pOwotCQl9IGVsc2Ug ewkvKiBmaWVsZCBpbmZvIGZyb20gcmVsb2NhdGlvbiBvcCAqLwotCQkJZmllbGRzeiA9IHJwLT5G SUVMRFNaOwotCQkJb2Zmc2V0ID0gcnAtPk9GRlNFVDsKLQkJCWlmIChUQVJHRVRfQklHX0VORElB TikKLQkJCQkvKiBtYWtlIHN1cmUgdmFkZHIgaXMgdGhlIGxvd2VzdCB0YXJnZXQKLQkJCQkgICBh ZGRyZXNzIGNvbnRhaW5pbmcgYml0cyAqLwotCQkJCXJwLT52YWRkciArPSAocnAtPldPUkRTWiAt IG9mZnNldCAtIGZpZWxkc3opCi0JCQkJICAgID4+IExPR19UQVJHRVRfQVVfQklUUzsKLQkJfQot CQlkYXRhID0gKHRndF9hdV90ICopICgoY2hhciAqKWRhdGEgKyBUQUREUl9UT19IT1NUKHJwLT52 YWRkcikpOwotCQkvKiBjb21wdXRlIGxvd2VzdCBob3N0IGxvY2F0aW9uIG9mIHJlZmVyZW5jZWQg ZGF0YSAqLwotI2lmIEJJVFNfUEVSX0FVID4gVEFSR0VUX0FVX0JJVFMKLQkJLyogY29udmVyc2lv biBmcm9tIHRhcmdldCBhZGRyZXNzIHRvIGhvc3QgYWRkcmVzcyBtYXkgbG9zZQotCQkgICBhZGRy ZXNzIGJpdHM7IGFkZCBsb3NzIHRvIG9mZnNldCAqLwotCQlpZiAoVEFSR0VUX0JJR19FTkRJQU4p IHsKLQkJCW9mZnNldCArPSAtKChycC0+dmFkZHIgPDwgTE9HX1RBUkdFVF9BVV9CSVRTKSArCi0J CQkJICAgIG9mZnNldCArIGZpZWxkc3opICYKLQkJCSAgICAoQklUU19QRVJfQVUgLSBUQVJHRVRf QVVfQklUUyk7Ci0JCX0gZWxzZSB7Ci0JCQlvZmZzZXQgKz0gKHJwLT52YWRkciA8PCBMT0dfVEFS R0VUX0FVX0JJVFMpICYKLQkJCSAgICAoQklUU19QRVJfQVUgLSAxKTsKLQkJfQotI2VuZGlmCi0j aWZkZWYgUkZWX1NDQUxFCi0JCXNjYWxlID0gUkZWX1NDQUxFKHJlbG9jX2luZm8pOwotI2VuZGlm Ci0JfQotCS8qIHJlYWQgdGhlIG9iamVjdCB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGltYWdlLCBp ZiBzbyBvcmRlcmVkICovCi0JaWYgKHJlbG9jX2luZm8gJiBST1BfUikgewotCQkvKiByZWxvY2F0 aW9uIHJlYWRzIGN1cnJlbnQgaW1hZ2UgdmFsdWUgKi8KLQkJdmFsID0gZGxvYWRfdW5wYWNrKGRs dGhpcywgZGF0YSwgZmllbGRzeiwgb2Zmc2V0LAotCQkJCSAgIFJGVl9TSUdOKHJlbG9jX2luZm8p KTsKLQkJLyogU2F2ZSBvZmYgdGhlIG9yaWdpbmFsIHZhbHVlIGluIGNhc2UgdGhlIHJlbG8gb3Zl cmZsb3dzIGFuZAotCQkgKiB3ZSBjYW4gdHJhbXBvbGluZSBpdC4gKi8KLQkJb3JpZ192YWwgPSB2 YWw7Ci0KLSNpZmRlZiBSRlZfU0NBTEUKLQkJdmFsIDw8PSBzY2FsZTsKLSNlbmRpZgotCX0KLQkv KiBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgYXJpdGhtZXRpYyAqLwotCXN3aXRjaCAoUkZWX0FDVElP TihyZWxvY19hY3Rpb24pKSB7CS8qIHJlbG9jYXRpb24gYWN0aW9ucyAqLwotCWNhc2UgUkFDVF9W QUw6Ci0JCWJyZWFrOwotCWNhc2UgUkFDVF9BU0dOOgotCQl2YWwgPSByZWxvY19hbXQ7Ci0JCWJy ZWFrOwotCWNhc2UgUkFDVF9BREQ6Ci0JCXZhbCArPSByZWxvY19hbXQ7Ci0JCWJyZWFrOwotCWNh c2UgUkFDVF9QQ1I6Ci0JCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJICogSGFuZGxlIHNwZWNpYWwgY2FzZXMgb2YganVtcGlu ZyBmcm9tIGFic29sdXRlIHNlY3Rpb25zCi0JCSAqIChzcGVjaWFsIHJlbG9jIHR5cGUpIG9yIHRv IGFic29sdXRlIGRlc3RpbmF0aW9uCi0JCSAqIChzeW1uZHggPT0gLTEpLiAgSW4gZWl0aGVyIGNh c2UsIHNldCB0aGUgYXBwcm9wcmlhdGUKLQkJICogcmVsb2NhdGlvbiBhbW91bnQgdG8gMC4KLQkJ ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLwotCQlpZiAocnAtPlNZTU5EWCA9PSAtMSkKLQkJCXJlbG9jX2FtdCA9IDA7Ci0JCXZh bCArPSByZWxvY19hbXQgLSBkbHRoaXMtPmRlbHRhX3J1bmFkZHI7Ci0JCWJyZWFrOwotCWNhc2Ug UkFDVF9BRERJU1A6Ci0JCXZhbCArPSBycC0+Ul9ESVNQICsgcmVsb2NfYW10OwotCQlicmVhazsK LQljYXNlIFJBQ1RfQVNHUEM6Ci0JCXZhbCA9IGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+cnVuX2FkZHIg KyByZWxvY19hbXQ7Ci0JCWJyZWFrOwotCWNhc2UgUkFDVF9QTFVTOgotCQlpZiAoc3RhY2twICE9 IE5VTEwpCi0JCQl2YWwgKz0gKnN0YWNrcDsKLQkJYnJlYWs7Ci0JY2FzZSBSQUNUX1NVQjoKLQkJ aWYgKHN0YWNrcCAhPSBOVUxMKQotCQkJdmFsID0gKnN0YWNrcCAtIHZhbDsKLQkJYnJlYWs7Ci0J Y2FzZSBSQUNUX05FRzoKLQkJdmFsID0gLXZhbDsKLQkJYnJlYWs7Ci0JY2FzZSBSQUNUX01QWToK LQkJaWYgKHN0YWNrcCAhPSBOVUxMKQotCQkJdmFsICo9ICpzdGFja3A7Ci0JCWJyZWFrOwotCWNh c2UgUkFDVF9ESVY6Ci0JCWlmIChzdGFja3AgIT0gTlVMTCkKLQkJCXZhbCA9ICpzdGFja3AgLyB2 YWw7Ci0JCWJyZWFrOwotCWNhc2UgUkFDVF9NT0Q6Ci0JCWlmIChzdGFja3AgIT0gTlVMTCkKLQkJ CXZhbCA9ICpzdGFja3AgJSB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgUkFDVF9TUjoKLQkJaWYgKHZh bCA+PSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVKQotCQkJdmFsID0gMDsKLQkJZWxzZSBp ZiAoc3RhY2twICE9IE5VTEwpCi0JCQl2YWwgPSAodXJ2YWx1ZSkgKnN0YWNrcCA+PiB2YWw7Ci0J CWJyZWFrOwotCWNhc2UgUkFDVF9BU1I6Ci0JCWlmICh2YWwgPj0gc2l6ZW9mKHJ2YWx1ZSkgKiBC SVRTX1BFUl9BVSkKLQkJCXZhbCA9IHNpemVvZihydmFsdWUpICogQklUU19QRVJfQVUgLSAxOwot CQllbHNlIGlmIChzdGFja3AgIT0gTlVMTCkKLQkJCXZhbCA9ICpzdGFja3AgPj4gdmFsOwotCQli cmVhazsKLQljYXNlIFJBQ1RfU0w6Ci0JCWlmICh2YWwgPj0gc2l6ZW9mKHJ2YWx1ZSkgKiBCSVRT X1BFUl9BVSkKLQkJCXZhbCA9IDA7Ci0JCWVsc2UgaWYgKHN0YWNrcCAhPSBOVUxMKQotCQkJdmFs ID0gKnN0YWNrcCA8PCB2YWw7Ci0JCWJyZWFrOwotCWNhc2UgUkFDVF9BTkQ6Ci0JCWlmIChzdGFj a3AgIT0gTlVMTCkKLQkJCXZhbCAmPSAqc3RhY2twOwotCQlicmVhazsKLQljYXNlIFJBQ1RfT1I6 Ci0JCWlmIChzdGFja3AgIT0gTlVMTCkKLQkJCXZhbCB8PSAqc3RhY2twOwotCQlicmVhazsKLQlj YXNlIFJBQ1RfWE9SOgotCQlpZiAoc3RhY2twICE9IE5VTEwpCi0JCQl2YWwgXj0gKnN0YWNrcDsK LQkJYnJlYWs7Ci0JY2FzZSBSQUNUX05PVDoKLQkJdmFsID0gfnZhbDsKLQkJYnJlYWs7Ci0jaWYg VE1TMzIwNjAKLQljYXNlIFJBQ1RfQzZTRUNUOgotCQkvKiBhY3R1YWxseSBuZWVkZWQgYWRkcmVz cyBvZiBzZWNuIGNvbnRhaW5pbmcgc3ltYm9sICovCi0JCWlmIChzdnAgIT0gTlVMTCkgewotCQkJ aWYgKHJwLT5TWU1ORFggPj0gMCkKLQkJCQlpZiAoc3ZwLT5zZWNubiA+IDApCi0JCQkJCXJlbG9j X2FtdCA9IGRsdGhpcy0+bGRyX3NlY3Rpb25zCi0JCQkJCSAgICBbc3ZwLT5zZWNubiAtIDFdLnJ1 bl9hZGRyOwotCQl9Ci0JCS8qICEhISBGQUxMIFRIUlUgISEhICovCi0JY2FzZSBSQUNUX0M2QkFT RToKLQkJaWYgKGRsdGhpcy0+YnNzX3J1bl9iYXNlID09IDApIHsKLQkJCXN0cnVjdCBkeW5sb2Fk X3N5bWJvbCAqc3ltcDsKLQotCQkJc3ltcCA9IGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdf c3ltYm9sCi0JCQkgICAgKGRsdGhpcy0+bXlzeW0sIGJzc3N5bWJvbCk7Ci0JCQkvKiBsb29rdXAg dmFsdWUgb2YgZ2xvYmFsIEJTUyBiYXNlICovCi0JCQlpZiAoc3ltcCkKLQkJCQlkbHRoaXMtPmJz c19ydW5fYmFzZSA9IHN5bXAtPnZhbHVlOwotCQkJZWxzZQotCQkJCWRsb2FkX2Vycm9yKGRsdGhp cywKLQkJCQkJICAgICJHbG9iYWwgQlNTIGJhc2UgcmVmZXJlbmNlZCBpbiAlcyAiCi0JCQkJCSAg ICAib2Zmc2V0IiBGTVRfVUkzMiAiIGJ1dCBub3QgIgotCQkJCQkgICAgImRlZmluZWQiLAotCQkJ CQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAotCQkJCQkgICAgcnAtPnZhZGRyICsgZGx0 aGlzLT5pbWFnZV9vZmZzZXQpOwotCQl9Ci0JCXJlbG9jX2FtdCAtPSBkbHRoaXMtPmJzc19ydW5f YmFzZTsKLQkJLyogISEhIEZBTEwgVEhSVSAhISEgKi8KLQljYXNlIFJBQ1RfQzZEU1BMOgotCQkv KiBzY2FsZSBmYWN0b3IgZGV0ZXJtaW5lZCBieSAzIExTQnMgb2YgZmllbGQgKi8KLQkJc2NhbGUg PSBjNjBfc2NhbGVbdmFsICYgU0NBTEVfTUFTS107Ci0JCW9mZnNldCArPSBTQ0FMRV9CSVRTOwot CQlmaWVsZHN6IC09IFNDQUxFX0JJVFM7Ci0JCXZhbCA+Pj0gU0NBTEVfQklUUzsJLyogaWdub3Jl IHRoZSBzY2FsZSBmaWVsZCBoZXJlYWZ0ZXIgKi8KLQkJdmFsIDw8PSBzY2FsZTsKLQkJdmFsICs9 IHJlbG9jX2FtdDsJLyogZG8gdGhlIHVzdWFsIHJlbG9jYXRpb24gKi8KLQkJaWYgKCgoMSA8PCBz Y2FsZSkgLSAxKSAmIHZhbCkKLQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKLQkJCQkgICAgIlVuYWxp Z25lZCByZWZlcmVuY2UgaW4gJXMgb2Zmc2V0ICIKLQkJCQkgICAgRk1UX1VJMzIsIGRsdGhpcy0+ aW1hZ2Vfc2Vjbi0+bmFtZSwKLQkJCQkgICAgcnAtPnZhZGRyICsgZGx0aGlzLT5pbWFnZV9vZmZz ZXQpOwotCQlicmVhazsKLSNlbmRpZgotCX0JCQkvKiByZWxvY2F0aW9uIGFjdGlvbnMgKi8KLQkv KiAqIFB1dCBiYWNrIHJlc3VsdCBhcyByZXF1aXJlZCAqLwotCWlmIChyZWxvY19pbmZvICYgUk9Q X1cpIHsJLyogcmVsb2NhdGlvbiB3cml0ZXMgaW1hZ2UgdmFsdWUgKi8KLSNpZmRlZiBSRlZfU0NB TEUKLQkJdmFsID4+PSBzY2FsZTsKLSNlbmRpZgotCQlpZiAoZGxvYWRfcmVwYWNrKGRsdGhpcywg dmFsLCBkYXRhLCBmaWVsZHN6LCBvZmZzZXQsCi0JCQkJIFJGVl9TSUdOKHJlbG9jX2luZm8pKSkg ewotCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcmVsbyBjYW4gYmUgdHJhbXBvbGluZWQsCi0J CQkgKiBidXQgb25seSBpbiBmaXJzdCBwaGFzZSByZWxvY2F0aW9uLiAgMm5kIHBoYXNlCi0JCQkg KiByZWxvY2F0aW9uIGNhbm5vdCB0cmFtcG9saW5lLiAqLwotCQkJaWYgKChzZWNvbmRfcGFzcyA9 PSBmYWxzZSkgJiYKLQkJCSAgICAoZGxvYWRfdHJhbXBfYXZhaWwoZGx0aGlzLCBycCkgPT0gdHJ1 ZSkpIHsKLQotCQkJCS8qIEJlZm9yZSBnZW5lcmF0aW5nIHRoZSB0cmFtcG9saW5lLCByZXN0b3Jl Ci0JCQkJICogdGhlIHZhbHVlIHRvIGl0cyBvcmlnaW5hbCBzbyB0aGUgMm5kIHBhc3MKLQkJCQkg KiAgcmVsbyB3aWxsIHdvcmsuICovCi0JCQkJZGxvYWRfcmVwYWNrKGRsdGhpcywgb3JpZ192YWws IGRhdGEsIGZpZWxkc3osCi0JCQkJCSAgICAgb2Zmc2V0LCBSRlZfU0lHTihyZWxvY19pbmZvKSk7 Ci0JCQkJaWYgKCFkbG9hZF90cmFtcF9nZW5lcmF0ZShkbHRoaXMsCi0JCQkJCQkJKGRsdGhpcy0+ aW1hZ2Vfc2VjbiAtCi0JCQkJCQkJIGRsdGhpcy0+bGRyX3NlY3Rpb25zKSwKLQkJCQkJCQkgZGx0 aGlzLT5pbWFnZV9vZmZzZXQsCi0JCQkJCQkJIGltZ19wa3QsIHJwKSkgewotCQkJCQlkbG9hZF9l cnJvcihkbHRoaXMsCi0JCQkJCQkgICAgIkZhaWxlZCB0byAiCi0JCQkJCQkgICAgImdlbmVyYXRl IHRyYW1wb2xpbmUgZm9yICIKLQkJCQkJCSAgICAiYml0IG92ZXJmbG93Iik7Ci0JCQkJCWRsb2Fk X2Vycm9yKGRsdGhpcywKLQkJCQkJCSAgICAiUmVsb2NhdGlvbiB2YWwgIiBGTVRfVUkzMgotCQkJ CQkJICAgICIgb3ZlcmZsb3dzICVkIGJpdHMgaW4gJXMgIgotCQkJCQkJICAgICJvZmZzZXQgIiBG TVRfVUkzMiwgdmFsLAotCQkJCQkJICAgIGZpZWxkc3osCi0JCQkJCQkgICAgZGx0aGlzLT5pbWFn ZV9zZWNuLT5uYW1lLAotCQkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsKLQkJCQkJCSAg ICBycC0+dmFkZHIpOwotCQkJCX0gZWxzZQotCQkJCQkqdHJhbXBzX2dlbmVyYXRlZCA9IHRydWU7 Ci0JCQl9IGVsc2UgewotCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIlJlbG9jYXRpb24gdmFsdWUg IgotCQkJCQkgICAgRk1UX1VJMzIgIiBvdmVyZmxvd3MgJWQgYml0cyBpbiAlcyIKLQkJCQkJICAg ICIgb2Zmc2V0ICIgRk1UX1VJMzIsIHZhbCwgZmllbGRzeiwKLQkJCQkJICAgIGRsdGhpcy0+aW1h Z2Vfc2Vjbi0+bmFtZSwKLQkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRy KTsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAodG9wKQotCQkqc3RhY2twID0gdmFsOwotfQkJCQkv KiByZWxvY192YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2R5bmxvYWQvcmVsb2NfdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5s b2FkL3JlbG9jX3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYWIwM2Qu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2Nf dGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogcmVsb2NfdGFi bGUuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9y IFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhh cyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQ QUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgot ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhF IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9SRUxPQ19UQUJMRV9IXwot I2RlZmluZSBfUkVMT0NfVEFCTEVfSF8KLS8qCi0gKiBUYWJsZSBvZiByZWxvY2F0aW9uIG9wZXJh dG9yIHByb3BlcnRpZXMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIEhvdyBk b2VzIHRoaXMgcmVsb2NhdGlvbiBvcGVyYXRpb24gYWNjZXNzIHRoZSBwcm9ncmFtIGltYWdlPyAq LwotI2RlZmluZSBST1BfTgkwCQkvKiBkb2VzIG5vdCBhY2Nlc3MgaW1hZ2UgKi8KLSNkZWZpbmUg Uk9QX1IJMQkJLyogcmVhZCBmcm9tIGltYWdlICovCi0jZGVmaW5lIFJPUF9XCTIJCS8qIHdyaXRl IHRvIGltYWdlICovCi0jZGVmaW5lIFJPUF9SVwkzCQkvKiByZWFkIGZyb20gYW5kIHdyaXRlIHRv IGltYWdlICovCi0KLS8qIEZvciBwcm9ncmFtIGltYWdlIGFjY2Vzcywgd2hhdCBhcmUgdGhlIG92 ZXJmbG93IHJ1bGVzIGZvciB0aGUgYml0IGZpZWxkPyAqLwotLyogQmV3YXJlISBQcm9jZWR1cmUg cmVwYWNrIGRlcGVuZHMgb24gdGhpcyBlbmNvZGluZyAqLwotI2RlZmluZSBST1BfQU5ZCTAJCS8q IG5vIG92ZXJmbG93IGV2ZXIsIGp1c3QgdHJ1bmNhdGUgdGhlIHZhbHVlICovCi0jZGVmaW5lIFJP UF9TR04JMQkJLyogc2lnbmVkIGZpZWxkICovCi0jZGVmaW5lIFJPUF9VTlMJMgkJLyogdW5zaWdu ZWQgZmllbGQgKi8KLSNkZWZpbmUgUk9QX01BWCAzCS8qIGFsbG93IG1heGltdW0gcmFuZ2Ugb2Yg ZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCAqLwotCi0vKiBIb3cgZG9lcyB0aGUgcmVsb2NhdGlv biBvcGVyYXRpb24gdXNlIHRoZSBzeW1ib2wgcmVmZXJlbmNlICovCi0jZGVmaW5lIFJPUF9JR04J MAkJLyogbm8gc3ltYm9sIGlzIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgUk9QX0xJVCAwCQkvKiB1 c2UgcnAtPlVWQUwgbGl0ZXJhbCBmaWVsZCAqLwotI2RlZmluZSBST1BfU1lNCTEJCS8qIHN5bWJv bCB2YWx1ZSBpcyB1c2VkIGluIHJlbG9jYXRpb24gKi8KLSNkZWZpbmUgUk9QX1NZTUQgMgkJLyog ZGVsdGEgdmFsdWUgdnMgbGFzdCBsaW5rIGlzIHVzZWQgKi8KLQotLyogSG93IGRvZXMgdGhlIHJl bG9jIG9wIHVzZSB0aGUgc3RhY2s/ICovCi0jZGVmaW5lIFJTVEtfTiAwCQkvKiBEb2VzIG5vdCB1 c2UgKi8KLSNkZWZpbmUgUlNUS19QT1AgMQkJLyogRG9lcyBhIFBPUCAqLwotI2RlZmluZSBSU1RL X1VPUCAyCQkvKiBVbmFyeSBvcCwgc3RhY2sgcG9zaXRpb24gdW5hZmZlY3RlZCAqLwotI2RlZmlu ZSBSU1RLX1BTSCAzCQkvKiBEb2VzIGEgcHVzaCAqLwotCi0vKgotICogQ29tcHV0YXRpb25hbCBh Y3Rpb25zIHBlcmZvcm1lZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKLSAqLwotZW51bSBkbG9hZF9h Y3Rpb25zIHsKLQkvKiBkb24ndCBhbHRlciB0aGUgY3VycmVudCB2YWwgKGZyb20gc3RhY2sgb3Ig bWVtIGZldGNoKSAqLwotCVJBQ1RfVkFMLAotCS8qIHNldCB2YWx1ZSB0byByZWZlcmVuY2UgYW1v dW50IChmcm9tIHN5bWJvbCByZWZlcmVuY2UpICovCi0JUkFDVF9BU0dOLAotCVJBQ1RfQURELAkJ LyogYWRkIHJlZmVyZW5jZSB0byB2YWx1ZSAqLwotCVJBQ1RfUENSLAkJLyogYWRkIHJlZmVyZW5j ZSBtaW51cyBQQyBkZWx0YSB0byB2YWx1ZSAqLwotCVJBQ1RfQURESVNQLAkJLyogYWRkIHJlZmVy ZW5jZSBwbHVzIFJfRElTUCAqLwotCVJBQ1RfQVNHUEMsCQkvKiBzZXQgdmFsdWUgdG8gc2VjdGlv biBhZGRyIHBsdXMgcmVmZXJlbmNlICovCi0KLQlSQUNUX1BMVVMsCQkvKiBzdGFjayArICovCi0J UkFDVF9TVUIsCQkvKiBzdGFjayAtICovCi0JUkFDVF9ORUcsCQkvKiBzdGFjayB1bmFyeSAtICov Ci0KLQlSQUNUX01QWSwJCS8qIHN0YWNrICogKi8KLQlSQUNUX0RJViwJCS8qIHN0YWNrIC8gKi8K LQlSQUNUX01PRCwJCS8qIHN0YWNrICUgKi8KLQotCVJBQ1RfU1IsCQkvKiBzdGFjayB1bnNpZ25l ZCA+PiAqLwotCVJBQ1RfQVNSLAkJLyogc3RhY2sgc2lnbmVkID4+ICovCi0JUkFDVF9TTCwJCS8q IHN0YWNrIDw8ICovCi0JUkFDVF9BTkQsCQkvKiBzdGFjayAmICovCi0JUkFDVF9PUiwJCS8qIHN0 YWNrIHwgKi8KLQlSQUNUX1hPUiwJCS8qIHN0YWNrIF4gKi8KLQlSQUNUX05PVCwJCS8qIHN0YWNr IH4gKi8KLQlSQUNUX0M2U0VDVCwJCS8qIGZvciBDNjAgUl9TRUNUIG9wICovCi0JUkFDVF9DNkJB U0UsCQkvKiBmb3IgQzYwIFJfQkFTRSBvcCAqLwotCVJBQ1RfQzZEU1BMLAkJLyogZm9yIEM2MCBz Y2FsZWQgMTUtYml0IGRpc3BsYWNlbWVudCAqLwotCVJBQ1RfUENSMjNUCQkvKiBmb3IgQVJNIFRo dW1iIGxvbmcgYnJhbmNoICovCi19OwotCi0vKgotICogbWFjcm9zIHVzZWQgdG8gZXh0cmFjdCB2 YWx1ZXMKLSAqLwotI2RlZmluZSBSRlZfUE9TTihhYWEpICgoYWFhKSAmIDB4RikKLSNkZWZpbmUg UkZWX1dJRFRIKGFhYSkgKCgoYWFhKSA+PiA0KSAmIDB4M0YpCi0jZGVmaW5lIFJGVl9BQ1RJT04o YWFhKSAoKGFhYSkgPj4gMTApCi0KLSNkZWZpbmUgUkZWX1NJR04oaWlpKSAoKChpaWkpID4+IDIp ICYgMHgzKQotI2RlZmluZSBSRlZfU1lNKGlpaSkgKCgoaWlpKSA+PiA0KSAmIDB4MykKLSNkZWZp bmUgUkZWX1NUSyhpaWkpICgoKGlpaSkgPj4gNikgJiAweDMpCi0jZGVmaW5lIFJGVl9BQ0NTKGlp aSkgKChpaWkpICYgMHgzKQotCi0jaWYgKFRNUzMyMDYwKQotI2RlZmluZSBSRlZfU0NBTEUoaWlp KSAoKGlpaSkgPj4gMTEpCi0jZGVmaW5lIFJGVl9CSUdPRkYoaWlpKSAoKChpaWkpID4+IDgpICYg MHg3KQotI2Vsc2UKLSNkZWZpbmUgUkZWX0JJR09GRihpaWkpICgoaWlpKSA+PiA4KQotI2VuZGlm Ci0KLSNlbmRpZiAvKiBfUkVMT0NfVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMgYi9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9yZWxvY190YWJsZV9jNjAwMC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBhMjhiYzA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMKKysrIC9kZXYvbnVsbApA QCAtMSwyNTcgKzAsMCBAQAotLyoKLSAqIHJlbG9jX3RhYmxlX2M2MDAwLmMKLSAqCi0gKiBEU1At QklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3Nv cnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLQotLyogVGFibGVzIGdlbmVyYXRlZCBmb3IgYzYwMDAgKi8KLQotI2RlZmlu ZSBIQVNIX0ZVTkMoenopICgoKCgoenopICsgMSkgKiAxODQ1VUwpID4+IDExKSAmIDYzKQotI2Rl ZmluZSBIQVNIX0woenopICgoenopID4+IDgpCi0jZGVmaW5lIEhBU0hfSSh6eikgKCh6eikgJiAw eEZGKQotCi1zdGF0aWMgY29uc3QgdTE2IHJvcF9tYXAxW10gPSB7Ci0JMCwKLQkxLAotCTIsCi0J MjAsCi0JNCwKLQk1LAotCTYsCi0JMTUsCi0JODAsCi0JODEsCi0JODIsCi0JODMsCi0JODQsCi0J ODUsCi0JODYsCi0JODcsCi0JMTcsCi0JMTgsCi0JMTksCi0JMjEsCi0JMTYsCi0JMTYzOTQsCi0J MTY0MDQsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1 MzUsCi0JMzIsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0JNjU1MzUsCi0J NjU1MzUsCi0JNDAsCi0JMTEyLAotCTExMywKLQk2NTUzNSwKLQkxNjM4NCwKLQkxNjM4NSwKLQkx NjM4NiwKLQkxNjM4NywKLQkxNjM4OCwKLQkxNjM4OSwKLQkxNjM5MCwKLQkxNjM5MSwKLQkxNjM5 MiwKLQkxNjM5MywKLQkxNjM5NSwKLQkxNjM5NiwKLQkxNjM5NywKLQkxNjM5OCwKLQkxNjM5OSwK LQkxNjQwMCwKLQkxNjQwMSwKLQkxNjQwMiwKLQkxNjQwMywKLQkxNjQwNSwKLQkxNjQwNiwKLQk2 NTUzNSwKLQk2NTUzNSwKLQk2NTUzNQotfTsKLQotc3RhdGljIGNvbnN0IHMxNiByb3BfbWFwMltd ID0gewotCS0yNTYsCi0JLTI1NSwKLQktMjU0LAotCS0yNDUsCi0JLTI1MywKLQktMjUyLAotCS0y NTEsCi0JLTI1MCwKLQktMjQxLAotCS0yNDAsCi0JLTIzOSwKLQktMjM4LAotCS0yMzcsCi0JLTIz NiwKLQkxODEzLAotCTUxNDIsCi0JLTI0OCwKLQktMjQ3LAotCTc3OCwKLQktMjQ0LAotCS0yNDks Ci0JLTIyMSwKLQktMjExLAotCS0xLAotCS0xLAotCS0xLAotCS0xLAotCS0xLAotCS0xLAotCS0y NDMsCi0JLTEsCi0JLTEsCi0JLTEsCi0JLTEsCi0JLTEsCi0JLTEsCi0JLTI0MiwKLQktMjMzLAot CS0yMzIsCi0JLTEsCi0JLTIzMSwKLQktMjMwLAotCS0yMjksCi0JLTIyOCwKLQktMjI3LAotCS0y MjYsCi0JLTIyNSwKLQktMjI0LAotCS0yMjMsCi0JNTQxMCwKLQktMjIwLAotCS0yMTksCi0JLTIx OCwKLQktMjE3LAotCS0yMTYsCi0JLTIxNSwKLQktMjE0LAotCS0yMTMsCi0JNTY3NiwKLQktMjEw LAotCS0yMDksCi0JLTEsCi0JLTEsCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCB1MTYgcm9wX2Fj dGlvbltdID0gewotCTI1NjAsCi0JMjMwNCwKLQkyMzA0LAotCTI0MzIsCi0JMjQzMiwKLQkyNTYw LAotCTIxNzYsCi0JMjMwNCwKLQkyNTYwLAotCTMyMDAsCi0JMzMyOCwKLQkzNTg0LAotCTM0NTYs Ci0JMjMwNCwKLQk0MjA4LAotCTIwNzg4LAotCTIxODEyLAotCTM0MTUsCi0JMzI0NSwKLQkyMzEx LAotCTQzNTksCi0JMTk3NjQsCi0JMjMxMSwKLQkzMTkxLAotCTMyODAsCi0JNjY1NiwKLQk3Njgw LAotCTg3MDQsCi0JOTcyOCwKLQkxMDc1MiwKLQkxMTc3NiwKLQkxMjgwMCwKLQkxMzgyNCwKLQkx NDg0OCwKLQkxNTg3MiwKLQkxNjg5NiwKLQkxNzkyMCwKLQkxODk0NCwKLQkwLAotCTAsCi0JMCwK LQkwLAotCTE1MzYsCi0JMTUzNiwKLQkxNTM2LAotCTU2MzIsCi0JNTEyLAotCTAKLX07Ci0KLXN0 YXRpYyBjb25zdCB1MTYgcm9wX2luZm9bXSA9IHsKLQkwLAotCTM1LAotCTM1LAotCTM1LAotCTM1 LAotCTM1LAotCTM1LAotCTM1LAotCTM1LAotCTM5LAotCTM5LAotCTM5LAotCTM5LAotCTM1LAot CTM0LAotCTI4MywKLQkyOTksCi0JNDEzNSwKLQk0MzkxLAotCTI5MSwKLQkzMzA1OSwKLQkyODMs Ci0JMjk1LAotCTQ2NDcsCi0JNDEzNSwKLQk2NCwKLQk2NCwKLQkxMjgsCi0JNjQsCi0JNjQsCi0J NjQsCi0JNjQsCi0JNjQsCi0JNjQsCi0JNjQsCi0JNjQsCi0JNjQsCi0JMTI4LAotCTIwMSwKLQkx OTcsCi0JNzQsCi0JNzAsCi0JMjA4LAotCTE5NiwKLQkyMDAsCi0JMTkyLAotCTE5MiwKLQk2Ngot fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1w LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA0MzEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQz ICswLDAgQEAKLS8qCi0gKiB0cmFtcC5jCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBz dXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIENvcHlyaWdo dCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBB TlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQg TElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaW5jbHVkZSAi aGVhZGVyLmgiCi0KLSNpZiBUTVMzMjA2MAotI2luY2x1ZGUgInRyYW1wX3RhYmxlX2M2MDAwLmMi Ci0jZW5kaWYKLQotI2RlZmluZSBNQVhfUkVMT1NfUEVSX1BBU1MJNAotCi0vKgotICogRnVuY3Rp b246CXByaXZfdHJhbXBfc2VjdF90Z3RfYWxsb2MKLSAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSB0 YXJnZXQgbWVtb3J5IGZvciB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLiAgVGhlCi0gKgkgIHRhcmdl dCBtZW0gc2l6ZSBpcyBlYXNpbHkgb2J0YWluZWQgYXMgdGhlIG5leHQgYXZhaWxhYmxlIGFkZHJl c3MuCi0gKi8KLXN0YXRpYyBpbnQgcHJpdl90cmFtcF9zZWN0X3RndF9hbGxvYyhzdHJ1Y3QgZGxv YWRfc3RhdGUgKmRsdGhpcykKLXsKLQlpbnQgcmV0X3ZhbCA9IDA7Ci0Jc3RydWN0IGxkcl9zZWN0 aW9uX2luZm8gKnNlY3RfaW5mbzsKLQotCS8qICBQb3B1bGF0ZSB0aGUgdHJhbXBvbGluZSBsb2Fk ZXIgc2VjdGlvbiBhbmQgYWxsb2NhdGUgaXQgb24gdGhlCi0JICogdGFyZ2V0LiAgVGhlIHNlY3Rp b24gbmFtZSBpcyBBTFdBWVMgdGhlIGZpcnN0IHN0cmluZyBpbiB0aGUgZmluYWwKLQkgKiBzdHJp bmcgdGFibGUgZm9yIHRyYW1wb2xpbmVzLiAgVGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBpcyBhbHdh eXMKLQkgKiAxIGJleW9uZCB0aGUgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBzZWN0aW9ucy4g Ki8KLQlzZWN0X2luZm8gPSAmZGx0aGlzLT5sZHJfc2VjdGlvbnNbZGx0aGlzLT5hbGxvY2F0ZWRf c2Vjbl9jb3VudF07Ci0KLQlzZWN0X2luZm8tPm5hbWUgPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0 cmluZ190YWJsZTsKLQlzZWN0X2luZm8tPnNpemUgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3Rf bmV4dF9hZGRyOwotCXNlY3RfaW5mby0+Y29udGV4dCA9IDA7Ci0Jc2VjdF9pbmZvLT50eXBlID0K LQkgICAgKDQgPDwgOCkgfCBETE9BRF9URVhUIHwgRFNfQUxMT0NBVEVfTUFTSyB8IERTX0RPV05M T0FEX01BU0s7Ci0Jc2VjdF9pbmZvLT5wYWdlID0gMDsKLQlzZWN0X2luZm8tPnJ1bl9hZGRyID0g MDsKLQlzZWN0X2luZm8tPmxvYWRfYWRkciA9IDA7Ci0JcmV0X3ZhbCA9IGRsdGhpcy0+bXlhbGxv Yy0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teWFsbG9jLAotCQkJCQkJICBzZWN0X2luZm8sCi0J CQkJCQkgIGRzX2FsaWdubWVudAotCQkJCQkJICAoc2VjdF9pbmZvLT50eXBlKSk7Ci0KLQlpZiAo cmV0X3ZhbCA9PSAwKQotCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gYWxsb2NhdGUg dGFyZ2V0IG1lbW9yeSBmb3IiCi0JCQkgICAgIiB0cmFtcG9saW5lIik7Ci0KLQlyZXR1cm4gcmV0 X3ZhbDsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOglwcml2X2gyYQotICogRGVzY3JpcHRpb246IEhl bHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgaGV4IHZhbHVlIHRvIGl0cyBBU0NJSQotICoJICBy ZXByZXNlbnRhdGlvbi4gIFVzZWQgZm9yIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgZ2VuZXJhdGlv bi4KLSAqLwotc3RhdGljIHU4IHByaXZfaDJhKHU4IHZhbHVlKQotewotCWlmICh2YWx1ZSA+IDB4 RikKLQkJcmV0dXJuIDB4RkY7Ci0KLQlpZiAodmFsdWUgPD0gOSkKLQkJdmFsdWUgKz0gMHgzMDsK LQllbHNlCi0JCXZhbHVlICs9IDB4Mzc7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qCi0gKiBG dW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUKLSAqIERlc2NyaXB0aW9uOiBHZW5lcmF0 ZSBhIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgKEFTQ0lJKSB1c2luZyB0aGUgdmFsdWUKLSAqCSAg b2YgdGhlIHN5bWJvbC4gIFRoaXMgcGxhY2VzIHRoZSBuZXcgbmFtZSBpbnRvIHRoZSB1c2VyIGJ1 ZmZlci4KLSAqCSAgVGhlIG5hbWUgaXMgZml4ZWQgaW4gbGVuZ3RoIGFuZCBvZiB0aGUgZm9ybTog X18kZGJUUl9feHh4eHh4eHgKLSAqCSAgKHdoZXJlICJ4eHh4eHh4eCIgaXMgdGhlIGhleCB2YWx1 ZSkuCi0gKi8KLXN0YXRpYyB2b2lkIHByaXZfdHJhbXBfc3ltX2dlbl9uYW1lKHUzMiB2YWx1ZSwg Y2hhciAqZHN0KQotewotCXUzMiBpOwotCWNoYXIgKnByZWZpeCA9IFRSQU1QX1NZTV9QUkVGSVg7 Ci0JY2hhciAqZHN0X2xvY2FsID0gZHN0OwotCXU4IHRtcDsKLQotCS8qICBDbGVhciBvdXQgdGhl IGRlc3RpbmF0aW9uLCBpbmNsdWRpbmcgdGhlIGVuZGluZyBOVUxMICovCi0JZm9yIChpID0gMDsg aSA8IChUUkFNUF9TWU1fUFJFRklYX0xFTiArIFRSQU1QX1NZTV9IRVhfQVNDSUlfTEVOKTsgaSsr KQotCQkqKGRzdF9sb2NhbCArIGkpID0gMDsKLQotCS8qICBDb3B5IHRoZSBwcmVmaXggdG8gc3Rh cnQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKFRSQU1QX1NZTV9QUkVGSVgpOyBpKyspIHsK LQkJKmRzdF9sb2NhbCA9ICoocHJlZml4ICsgaSk7Ci0JCWRzdF9sb2NhbCsrOwotCX0KLQotCS8q ICBOb3cgY29udmVydCB0aGUgdmFsdWUgcGFzc2VkIGluIHRvIGEgc3RyaW5nIGVxdWl2IG9mIHRo ZSBoZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHZhbHVlKTsgaSsrKSB7Ci0jaWZuZGVm IF9CSUdfRU5ESUFOCi0JCXRtcCA9ICooKCh1OCAqKSAmdmFsdWUpICsgKHNpemVvZih2YWx1ZSkg LSAxKSAtIGkpOwotCQkqZHN0X2xvY2FsID0gcHJpdl9oMmEoKHRtcCAmIDB4RjApID4+IDQpOwot CQlkc3RfbG9jYWwrKzsKLQkJKmRzdF9sb2NhbCA9IHByaXZfaDJhKHRtcCAmIDB4MEYpOwotCQlk c3RfbG9jYWwrKzsKLSNlbHNlCi0JCXRtcCA9ICooKCh1OCAqKSAmdmFsdWUpICsgaSk7Ci0JCSpk c3RfbG9jYWwgPSBwcml2X2gyYSgodG1wICYgMHhGMCkgPj4gNCk7Ci0JCWRzdF9sb2NhbCsrOwot CQkqZHN0X2xvY2FsID0gcHJpdl9oMmEodG1wICYgMHgwRik7Ci0JCWRzdF9sb2NhbCsrOwotI2Vu ZGlmCi0JfQotCi0JLyogIE5VTEwgdGVybWluYXRlICovCi0JKmRzdF9sb2NhbCA9IDA7Ci19Ci0K LS8qCi0gKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zdHJpbmdfY3JlYXRlCi0gKiBEZXNjcmlwdGlv bjogQ3JlYXRlIGEgbmV3IHN0cmluZyBzcGVjaWZpYyB0byB0aGUgdHJhbXBvbGluZSBsb2FkaW5n IGFuZCBhZGQKLSAqCSAgaXQgdG8gdGhlIHRyYW1wb2xpbmUgc3RyaW5nIGxpc3QuICBUaGlzIGxp c3QgY29udGFpbnMgdGhlCi0gKgkgIHRyYW1wb2xpbmUgc2VjdGlvbiBuYW1lIGFuZCB0cmFtcG9s aW5lIHBvaW50IHN5bWJvbHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdHJhbXBfc3RyaW5nICpwcml2 X3RyYW1wX3N0cmluZ19jcmVhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCi0JCQkJCQkg ICAgIHUzMiBzdHJfbGVuLCBjaGFyICpzdHIpCi17Ci0Jc3RydWN0IHRyYW1wX3N0cmluZyAqbmV3 X3N0cmluZyA9IE5VTEw7Ci0JdTMyIGk7Ci0KLQkvKiAgQ3JlYXRlIGEgbmV3IHN0cmluZyBvYmpl Y3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHNpemUuICovCi0JbmV3X3N0cmluZyA9Ci0JICAgIChzdHJ1 Y3QgdHJhbXBfc3RyaW5nICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5t eXN5bSwKLQkJCQkJCQkJIChzaXplb2YKLQkJCQkJCQkJICAoc3RydWN0Ci0JCQkJCQkJCSAgIHRy YW1wX3N0cmluZykKLQkJCQkJCQkJICArIHN0cl9sZW4gKwotCQkJCQkJCQkgIDEpKTsKLQlpZiAo bmV3X3N0cmluZyAhPSBOVUxMKSB7Ci0JCS8qICBDbGVhciB0aGUgc3RyaW5nIGZpcnN0LiAgVGhp cyBlbnN1cmVzIHRoZSBlbmRpbmcgTlVMTCBpcwotCQkgKiBwcmVzZW50IGFuZCB0aGUgb3B0aW1p emVyIHdvbid0IHRvdWNoIGl0LiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3Qg dHJhbXBfc3RyaW5nKSArIHN0cl9sZW4gKyAxKTsKLQkJICAgICBpKyspCi0JCQkqKCh1OCAqKSBu ZXdfc3RyaW5nICsgaSkgPSAwOwotCi0JCS8qICBBZGQgdGhpcyBzdHJpbmcgdG8gb3VyIHZpcnR1 YWwgdGFibGUgYnkgYXNzaWduaW5nIGl0IHRoZQotCQkgKiBuZXh0IGluZGV4IGFuZCBwdXNoaW5n IGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiAqLwotCQluZXdfc3RyaW5nLT5pbmRleCA9IGRs dGhpcy0+dHJhbXAudHJhbXBfc3RyaW5nX25leHRfaW5kZXg7Ci0JCWRsdGhpcy0+dHJhbXAudHJh bXBfc3RyaW5nX25leHRfaW5kZXgrKzsKLQkJZGx0aGlzLT50cmFtcC50cmFtcF9zdHJpbmdfc2l6 ZSArPSBzdHJfbGVuICsgMTsKLQotCQluZXdfc3RyaW5nLT5uZXh0ID0gTlVMTDsKLQkJaWYgKGRs dGhpcy0+dHJhbXAuc3RyaW5nX2hlYWQgPT0gTlVMTCkKLQkJCWRsdGhpcy0+dHJhbXAuc3RyaW5n X2hlYWQgPSBuZXdfc3RyaW5nOwotCQllbHNlCi0JCQlkbHRoaXMtPnRyYW1wLnN0cmluZ190YWls LT5uZXh0ID0gbmV3X3N0cmluZzsKLQotCQlkbHRoaXMtPnRyYW1wLnN0cmluZ190YWlsID0gbmV3 X3N0cmluZzsKLQotCQkvKiAgQ29weSB0aGUgc3RyaW5nIG92ZXIgdG8gdGhlIG5ldyBvYmplY3Qg Ki8KLQkJZm9yIChpID0gMDsgaSA8IHN0cl9sZW47IGkrKykKLQkJCW5ld19zdHJpbmctPnN0cltp XSA9IHN0cltpXTsKLQl9Ci0KLQlyZXR1cm4gbmV3X3N0cmluZzsKLX0KLQotLyoKLSAqIEZ1bmN0 aW9uOglwcml2X3RyYW1wX3N0cmluZ19maW5kCi0gKiBEZXNjcmlwdGlvbjogV2FsayB0aGUgdHJh bXBvbGluZSBzdHJpbmcgbGlzdCBhbmQgZmluZCBhIG1hdGNoIGZvciB0aGUKLSAqCSAgcHJvdmlk ZWQgc3RyaW5nLiAgSWYgbm90IG1hdGNoIGlzIGZvdW5kLCBOVUxMIGlzIHJldHVybmVkLgotICov Ci1zdGF0aWMgc3RydWN0IHRyYW1wX3N0cmluZyAqcHJpdl90cmFtcF9zdHJpbmdfZmluZChzdHJ1 Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKLQkJCQkJCSAgIGNoYXIgKnN0cikKLXsKLQlzdHJ1Y3Qg dHJhbXBfc3RyaW5nICpjdXJfc3RyID0gTlVMTDsKLQlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpyZXRf dmFsID0gTlVMTDsKLQl1MzIgaTsKLQl1MzIgc3RyX2xlbiA9IHN0cmxlbihzdHIpOwotCi0JZm9y IChjdXJfc3RyID0gZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZDsKLQkgICAgIChyZXRfdmFsID09 IE5VTEwpICYmIChjdXJfc3RyICE9IE5VTEwpOyBjdXJfc3RyID0gY3VyX3N0ci0+bmV4dCkgewot CQkvKiAgSWYgdGhlIHN0cmluZyBsZW5ndGhzIGFyZW4ndCBlcXVhbCwgZG9uJ3QgYm90aGVyCi0J CSAqIGNvbXBhcmluZyAqLwotCQlpZiAoc3RyX2xlbiAhPSBzdHJsZW4oY3VyX3N0ci0+c3RyKSkK LQkJCWNvbnRpbnVlOwotCi0JCS8qICBXYWxrIHRoZSBzdHJpbmdzIHVudGlsIG9uZSBvZiB0aGVt IGVuZHMgKi8KLQkJZm9yIChpID0gMDsgaSA8IHN0cl9sZW47IGkrKykgewotCQkJLyogIElmIHRo ZXkgZG9uJ3QgbWF0Y2ggaW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gdGhlbgotCQkJICogYnJlYWsg b3V0IG5vdywgbm8gc2Vuc2UgaW4gY29udGludWluZyB0byBsb29rIGF0Ci0JCQkgKiB0aGlzIHN0 cmluZy4gKi8KLQkJCWlmIChzdHJbaV0gIT0gY3VyX3N0ci0+c3RyW2ldKQotCQkJCWJyZWFrOwot CQl9Ci0KLQkJaWYgKGkgPT0gc3RyX2xlbikKLQkJCXJldF92YWwgPSBjdXJfc3RyOwotCX0KLQot CXJldHVybiByZXRfdmFsOwotfQotCi0vKgotICogRnVuY3Rpb246CXByaXZfc3RyaW5nX3RibF9m aW5hbGl6ZQotICogRGVzY3JpcHRpb246IEZsYXR0ZW4gdGhlIHRyYW1wb2xpbmUgc3RyaW5nIGxp c3QgaW50byBhIHRhYmxlIG9mIE5VTEwKLSAqCSAgdGVybWluYXRlZCBzdHJpbmdzLiAgVGhpcyBp cyB0aGUgc2FtZSBmb3JtYXQgb2Ygc3RyaW5nIHRhYmxlCi0gKgkgIGFzIHVzZWQgYnkgdGhlIENP RkYvRE9GRiBmaWxlLgotICovCi1zdGF0aWMgaW50IHByaXZfc3RyaW5nX3RibF9maW5hbGl6ZShz dHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlpbnQgcmV0X3ZhbCA9IDA7Ci0Jc3RydWN0 IHRyYW1wX3N0cmluZyAqY3VyX3N0cmluZzsKLQljaGFyICpjdXJfbG9jOwotCWNoYXIgKnRtcDsK LQotCS8qICBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCBzdHJpbmdzIHRoYXQgaGF2ZSBi ZWVuIGNyZWF0ZWQuICBUaGUKLQkgKiB0YWJsZSBpcyBzaW1wbHkgYWxsIHN0cmluZ3MgY29uY2F0 ZW5hdGVkIHRvZ2V0aGVyIHdpbGwgTlVMTAotCSAqIGVuZGluZ3MuICovCi0JZGx0aGlzLT50cmFt cC5maW5hbF9zdHJpbmdfdGFibGUgPQotCSAgICAoY2hhciAqKWRsdGhpcy0+bXlzeW0tPmRsb2Fk X2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCi0JCQkJCQkgIGRsdGhpcy0+dHJhbXAuCi0JCQkJCQkg IHRyYW1wX3N0cmluZ19zaXplKTsKLQlpZiAoZGx0aGlzLT50cmFtcC5maW5hbF9zdHJpbmdfdGFi bGUgIT0gTlVMTCkgewotCQkvKiAgV2UgZ290IG91ciBidWZmZXIsIHdhbGsgdGhlIGxpc3QgYW5k IHJlbGVhc2UgdGhlIG5vZGVzIGFzKgotCQkgKiB3ZSBnbyAqLwotCQljdXJfbG9jID0gZGx0aGlz LT50cmFtcC5maW5hbF9zdHJpbmdfdGFibGU7Ci0JCWN1cl9zdHJpbmcgPSBkbHRoaXMtPnRyYW1w LnN0cmluZ19oZWFkOwotCQl3aGlsZSAoY3VyX3N0cmluZyAhPSBOVUxMKSB7Ci0JCQkvKiAgTW92 ZSB0aGUgaGVhZC90YWlsIHBvaW50ZXJzICovCi0JCQlkbHRoaXMtPnRyYW1wLnN0cmluZ19oZWFk ID0gY3VyX3N0cmluZy0+bmV4dDsKLQkJCWlmIChkbHRoaXMtPnRyYW1wLnN0cmluZ190YWlsID09 IGN1cl9zdHJpbmcpCi0JCQkJZGx0aGlzLT50cmFtcC5zdHJpbmdfdGFpbCA9IE5VTEw7Ci0KLQkJ CS8qICBDb3B5IHRoZSBzdHJpbmcgY29udGVudHMgKi8KLQkJCWZvciAodG1wID0gY3VyX3N0cmlu Zy0+c3RyOwotCQkJICAgICAqdG1wICE9ICdcMCc7IHRtcCsrLCBjdXJfbG9jKyspCi0JCQkJKmN1 cl9sb2MgPSAqdG1wOwotCi0JCQkvKiAgUGljayB1cCB0aGUgTlVMTCB0ZXJtaW5hdGlvbiBzaW5j ZSBpdCB3YXMgbWlzc2VkIGJ5Ci0JCQkgKiBicmVha2luZyB1c2luZyBpdCB0byBlbmQgdGhlIGFi b3ZlIGxvb3AuICovCi0JCQkqY3VyX2xvYyA9ICdcMCc7Ci0JCQljdXJfbG9jKys7Ci0KLQkJCS8q ICBGcmVlIHRoZSBzdHJpbmcgbm9kZSwgd2UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZS4gKi8KLQkJ CWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJCQkJCQlj dXJfc3RyaW5nKTsKLQotCQkJLyogIE1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgb25lICov Ci0JCQljdXJfc3RyaW5nID0gZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZDsKLQkJfQotCi0JCS8q ICBVcGRhdGUgb3VyIHJldHVybiB2YWx1ZSB0byBzdWNjZXNzICovCi0JCXJldF92YWwgPSAxOwot CX0gZWxzZQotCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gYWxsb2NhdGUgdHJhbXBv bGluZSAiCi0JCQkgICAgInN0cmluZyB0YWJsZSIpOwotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0K LS8qCi0gKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zZWN0X2FsbG9jCi0gKiBEZXNjcmlwdGlvbjog VmlydHVhbGx5IGFsbG9jYXRlIHNwYWNlIGZyb20gdGhlIHRyYW1wb2xpbmUgc2VjdGlvbi4gIFRo aXMKLSAqCSAgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV4dCBvZmZzZXQgd2l0aGluIHRoZSB0cmFt cG9saW5lIHNlY3Rpb24KLSAqCSAgdGhhdCBpcyBhdmFpbGFibGUgYW5kIG1vdmVkIHRoZSBuZXh0 IGF2YWlsYWJsZSBvZmZzZXQgYnkgdGhlCi0gKgkgIHJlcXVlc3RlZCBzaXplLiAgTk8gVEFSR0VU IEFMTE9DQVRJT04gSVMgRE9ORSBBVCBUSElTIFRJTUUuCi0gKi8KLXN0YXRpYyB1MzIgcHJpdl90 cmFtcF9zZWN0X2FsbG9jKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB1MzIgdHJhbXBfc2l6 ZSkKLXsKLQl1MzIgcmV0X3ZhbDsKLQotCS8qICBJZiB0aGUgbmV4dCBhdmFpbGFibGUgYWRkcmVz cyBpcyAwLCB0aGlzIGlzIG91ciBmaXJzdCBhbGxvY2F0aW9uLgotCSAqIENyZWF0ZSBhIHNlY3Rp b24gbmFtZSBzdHJpbmcgdG8gZ28gaW50byB0aGUgc3RyaW5nIHRhYmxlIC4gKi8KLQlpZiAoZGx0 aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciA9PSAwKSB7Ci0JCWRsb2FkX3N5bXNfZXJy b3IoZGx0aGlzLT5teXN5bSwgIioqKiBXQVJOSU5HICoqKiAgY3JlYXRlZCAiCi0JCQkJICJkeW5h bWljIFRSQU1QT0xJTkUgc2VjdGlvbiBmb3IgbW9kdWxlICVzIiwKLQkJCQkgZGx0aGlzLT5zdHJf aGVhZCk7Ci0JfQotCi0JLyogIFJlc2VydmUgc3BhY2UgZm9yIHRoZSBuZXcgdHJhbXBvbGluZSAq LwotCXJldF92YWwgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyOwotCWRsdGhp cy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHIgKz0gdHJhbXBfc2l6ZTsKLQlyZXR1cm4gcmV0 X3ZhbDsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3N5bV9jcmVhdGUKLSAqIERl c2NyaXB0aW9uOiBBbGxvY2F0ZSBhbmQgY3JlYXRlIGEgbmV3IHRyYW1wb2xpbmUgc3BlY2lmaWMg c3ltYm9sIGFuZCBhZGQKLSAqCSAgaXQgdG8gdGhlIHRyYW1wb2xpbmUgc3ltYm9sIGxpc3QuICBU aGVzZSBzeW1ib2xzIHdpbGwgaW5jbHVkZQotICoJICB0cmFtcG9saW5lIHBvaW50cyBhcyB3ZWxs IGFzIHRoZSBleHRlcm5hbCBzeW1ib2xzIHRoZXkKLSAqCSAgcmVmZXJlbmNlLgotICovCi1zdGF0 aWMgc3RydWN0IHRyYW1wX3N5bSAqcHJpdl90cmFtcF9zeW1fY3JlYXRlKHN0cnVjdCBkbG9hZF9z dGF0ZSAqZGx0aGlzLAotCQkJCQkgICAgICAgdTMyIHN0cl9pbmRleCwKLQkJCQkJICAgICAgIHN0 cnVjdCBsb2NhbF9zeW1ib2wgKnRtcF9zeW0pCi17Ci0Jc3RydWN0IHRyYW1wX3N5bSAqbmV3X3N5 bSA9IE5VTEw7Ci0JdTMyIGk7Ci0KLQkvKiAgQWxsb2NhdGUgbmV3IHNwYWNlIGZvciB0aGUgc3lt Ym9sIGluIHRoZSBzeW1ib2wgdGFibGUuICovCi0JbmV3X3N5bSA9Ci0JICAgIChzdHJ1Y3QgdHJh bXBfc3ltICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJ CQkJICAgICAgc2l6ZW9mKHN0cnVjdCB0cmFtcF9zeW0pKTsKLQlpZiAobmV3X3N5bSAhPSBOVUxM KSB7Ci0JCWZvciAoaSA9IDA7IGkgIT0gc2l6ZW9mKHN0cnVjdCB0cmFtcF9zeW0pOyBpKyspCi0J CQkqKChjaGFyICopbmV3X3N5bSArIGkpID0gMDsKLQotCQkvKiAgQXNzaWduIHRoaXMgc3ltYm9s IHRoZSBuZXh0IHN5bWJvbCBpbmRleCBmb3IgZWFzaWVyCi0JCSAqIHJlZmVyZW5jZSBsYXRlciBk dXJpbmcgcmVsb2NhdGlvbi4gKi8KLQkJbmV3X3N5bS0+aW5kZXggPSBkbHRoaXMtPnRyYW1wLnRy YW1wX3N5bV9uZXh0X2luZGV4OwotCQlkbHRoaXMtPnRyYW1wLnRyYW1wX3N5bV9uZXh0X2luZGV4 Kys7Ci0KLQkJLyogIFBvcHVsYXRlIHRoZSBzeW1ib2wgaW5mb3JtYXRpb24uICBBdCB0aGlzIHBv aW50IGFueQotCQkgKiB0cmFtcG9saW5lIHN5bWJvbHMgd2lsbCBiZSB0aGUgb2Zmc2V0IGxvY2F0 aW9uLCBub3QgdGhlCi0JCSAqIGZpbmFsLiAgQ29weSBvdmVyIHRoZSBzeW1ib2wgaW5mbyB0byBz dGFydCwgdGhlbiBiZSBzdXJlIHRvCi0JCSAqIGdldCB0aGUgc3RyaW5nIGluZGV4IGZyb20gdGhl IHRyYW1wb2xpbmUgc3RyaW5nIHRhYmxlLiAqLwotCQluZXdfc3ltLT5zeW1faW5mbyA9ICp0bXBf c3ltOwotCQluZXdfc3ltLT5zdHJfaW5kZXggPSBzdHJfaW5kZXg7Ci0KLQkJLyogIFB1c2ggdGhl IG5ldyBzeW1ib2wgdG8gdGhlIHRhaWwgb2YgdGhlIHN5bWJvbCB0YWJsZSBsaXN0ICovCi0JCW5l d19zeW0tPm5leHQgPSBOVUxMOwotCQlpZiAoZGx0aGlzLT50cmFtcC5zeW1ib2xfaGVhZCA9PSBO VUxMKQotCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfaGVhZCA9IG5ld19zeW07Ci0JCWVsc2UKLQkJ CWRsdGhpcy0+dHJhbXAuc3ltYm9sX3RhaWwtPm5leHQgPSBuZXdfc3ltOwotCi0JCWRsdGhpcy0+ dHJhbXAuc3ltYm9sX3RhaWwgPSBuZXdfc3ltOwotCX0KLQotCXJldHVybiBuZXdfc3ltOwotfQot Ci0vKgotICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3ltX2dldAotICogRGVzY3JpcHRpb246IFNl YXJjaCBmb3IgdGhlIHN5bWJvbCB3aXRoIHRoZSBtYXRjaGluZyBzdHJpbmcgaW5kZXggKGZyb20K LSAqCSAgdGhlIHRyYW1wb2xpbmUgc3RyaW5nIHRhYmxlKSBhbmQgcmV0dXJuIHRoZSB0cmFtcG9s aW5lCi0gKgkgIHN5bWJvbCBvYmplY3QsIGlmIGZvdW5kLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxM LgotICovCi1zdGF0aWMgc3RydWN0IHRyYW1wX3N5bSAqcHJpdl90cmFtcF9zeW1fZ2V0KHN0cnVj dCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAotCQkJCQkgICAgdTMyIHN0cmluZ19pbmRleCkKLXsKLQlz dHJ1Y3QgdHJhbXBfc3ltICpzeW1fZm91bmQgPSBOVUxMOwotCi0JLyogIFdhbGsgdGhlIHN5bWJv bCB0YWJsZSBsaXN0IGFuZCBzZWFyY2ggdnMuIHRoZSBzdHJpbmcgaW5kZXggKi8KLQlmb3IgKHN5 bV9mb3VuZCA9IGRsdGhpcy0+dHJhbXAuc3ltYm9sX2hlYWQ7Ci0JICAgICBzeW1fZm91bmQgIT0g TlVMTDsgc3ltX2ZvdW5kID0gc3ltX2ZvdW5kLT5uZXh0KSB7Ci0JCWlmIChzeW1fZm91bmQtPnN0 cl9pbmRleCA9PSBzdHJpbmdfaW5kZXgpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gc3ltX2Zv dW5kOwotfQotCi0vKgotICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3ltX2ZpbmQKLSAqIERlc2Ny aXB0aW9uOiBTZWFyY2ggZm9yIGEgdHJhbXBvbGluZSBzeW1ib2wgYmFzZWQgb24gdGhlIHN0cmlu ZyBuYW1lIG9mCi0gKgkgIHRoZSBzeW1ib2wuICBSZXR1cm4gdGhlIHN5bWJvbCBvYmplY3QsIGlm IGZvdW5kLCBvdGhlcndpc2UKLSAqCSAgcmV0dXJuIE5VTEwuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qg dHJhbXBfc3ltICpwcml2X3RyYW1wX3N5bV9maW5kKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlz LAotCQkJCQkgICAgIGNoYXIgKnN0cmluZykKLXsKLQlzdHJ1Y3QgdHJhbXBfc3ltICpzeW1fZm91 bmQgPSBOVUxMOwotCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnN0cl9mb3VuZCA9IE5VTEw7Ci0KLQkv KiAgRmlyc3QsIHNlYXJjaCBmb3IgdGhlIHN0cmluZywgdGhlbiBzZWFyY2ggZm9yIHRoZSBzeW0g YmFzZWQgb24gdGhlCi0JICAgc3RyaW5nIGluZGV4LiAqLwotCXN0cl9mb3VuZCA9IHByaXZfdHJh bXBfc3RyaW5nX2ZpbmQoZGx0aGlzLCBzdHJpbmcpOwotCWlmIChzdHJfZm91bmQgIT0gTlVMTCkK LQkJc3ltX2ZvdW5kID0gcHJpdl90cmFtcF9zeW1fZ2V0KGRsdGhpcywgc3RyX2ZvdW5kLT5pbmRl eCk7Ci0KLQlyZXR1cm4gc3ltX2ZvdW5kOwotfQotCi0vKgotICogRnVuY3Rpb246CXByaXZfdHJh bXBfc3ltX2ZpbmFsaXplCi0gKiBEZXNjcmlwdGlvbjogQWxsb2NhdGUgYSBmbGF0IHN5bWJvbCB0 YWJsZSBmb3IgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiwKLSAqCSAgcHV0IGVhY2ggdHJhbXBvbGlu ZSBzeW1ib2wgaW50byB0aGUgdGFibGUsIGFkanVzdCB0aGUKLSAqCSAgc3ltYm9sIHZhbHVlIGJh c2VkIG9uIHRoZSBzZWN0aW9uIGFkZHJlc3Mgb24gdGhlIHRhcmdldCBhbmQKLSAqCSAgZnJlZSB0 aGUgdHJhbXBvbGluZSBzeW1ib2wgbGlzdCBub2Rlcy4KLSAqLwotc3RhdGljIGludCBwcml2X3Ry YW1wX3N5bV9maW5hbGl6ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlpbnQgcmV0 X3ZhbCA9IDA7Ci0Jc3RydWN0IHRyYW1wX3N5bSAqY3VyX3N5bTsKLQlzdHJ1Y3QgbGRyX3NlY3Rp b25faW5mbyAqdHJhbXBfc2VjdCA9Ci0JICAgICZkbHRoaXMtPmxkcl9zZWN0aW9uc1tkbHRoaXMt PmFsbG9jYXRlZF9zZWNuX2NvdW50XTsKLQlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpuZXdfc3ltOwot Ci0JLyogIEFsbG9jYXRlIGEgdGFibGUgdG8gaG9sZCBhIGZsYXR0ZW5lZCB2ZXJzaW9uIG9mIGFs bCBzeW1ib2xzCi0JICogY3JlYXRlZC4gKi8KLQlkbHRoaXMtPnRyYW1wLmZpbmFsX3N5bV90YWJs ZSA9Ci0JICAgIChzdHJ1Y3QgbG9jYWxfc3ltYm9sICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxs b2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJCQkgKHNpemVvZihzdHJ1Y3QgbG9jYWxfc3ltYm9sKSAq IGRsdGhpcy0+dHJhbXAuCi0JCQkJCQkgIHRyYW1wX3N5bV9uZXh0X2luZGV4KSk7Ci0JaWYgKGRs dGhpcy0+dHJhbXAuZmluYWxfc3ltX3RhYmxlICE9IE5VTEwpIHsKLQkJLyogIFdhbGsgdGhlIGxp c3Qgb2YgYWxsIHN5bWJvbHMsIGNvcHkgaXQgb3ZlciB0byB0aGUgZmxhdHRlbmVkCi0JCSAqIHRh YmxlLiBBZnRlciBpdCBoYXMgYmVlbiBjb3BpZWQsIHRoZSBub2RlIGNhbiBiZSBmcmVlZCBhcwot CQkgKiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiAqLwotCQluZXdfc3ltID0gZGx0aGlzLT50cmFt cC5maW5hbF9zeW1fdGFibGU7Ci0JCWN1cl9zeW0gPSBkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFk OwotCQl3aGlsZSAoY3VyX3N5bSAhPSBOVUxMKSB7Ci0JCQkvKiAgUG9wIGl0IG9mZiB0aGUgbGlz dCAqLwotCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfaGVhZCA9IGN1cl9zeW0tPm5leHQ7Ci0JCQlp ZiAoY3VyX3N5bSA9PSBkbHRoaXMtPnRyYW1wLnN5bWJvbF90YWlsKQotCQkJCWRsdGhpcy0+dHJh bXAuc3ltYm9sX3RhaWwgPSBOVUxMOwotCi0JCQkvKiAgQ29weSB0aGUgc3ltYm9sIGNvbnRlbnRz IGludG8gdGhlIGZsYXQgdGFibGUgKi8KLQkJCSpuZXdfc3ltID0gY3VyX3N5bS0+c3ltX2luZm87 Ci0KLQkJCS8qICBOb3cgZmluYWxpemUgdGhlIHN5bWJvbC4gIElmIGl0IGlzIGluIHRoZSB0cmFt cAotCQkJICogc2VjdGlvbiwgd2UgbmVlZCB0byBhZGp1c3QgZm9yIHRoZSBzZWN0aW9uIHN0YXJ0 LgotCQkJICogSWYgaXQgaXMgZXh0ZXJuYWwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdCBh dAotCQkJICogYWxsLgotCQkJICogTk9URTogVEhJUyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgVFJB TVBPTElORSBJUwotCQkJICogUkVGRVJFTkNFRCBMSUtFIEEgQ0FMTCBUTyBBTiBFWFRFUk5BTCBT TyBWQUxVRSBBTkQKLQkJCSAqIERFTFRBIEFSRSBUSEUgU0FNRS4gIFNFRSBUSEUgRlVOQ1RJT04g ZGxvYWRfc3ltYm9scwotCQkJICogV0hFUkUgRE5fVU5ERUYgSVMgSEFORExFRCBGT1IgTU9SRSBS RUZFUkVOQ0UuICovCi0JCQlpZiAobmV3X3N5bS0+c2Vjbm4gPCAwKSB7Ci0JCQkJbmV3X3N5bS0+ dmFsdWUgKz0gdHJhbXBfc2VjdC0+bG9hZF9hZGRyOwotCQkJCW5ld19zeW0tPmRlbHRhID0gbmV3 X3N5bS0+dmFsdWU7Ci0JCQl9Ci0KLQkJCS8qICBMZXQgZ28gb2YgdGhlIHN5bWJvbCBub2RlICov Ci0JCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIGN1cl9z eW0pOwotCi0JCQkvKiAgTW92ZSB0byB0aGUgbmV4dCBub2RlICovCi0JCQljdXJfc3ltID0gZGx0 aGlzLT50cmFtcC5zeW1ib2xfaGVhZDsKLQkJCW5ld19zeW0rKzsKLQkJfQotCi0JCXJldF92YWwg PSAxOwotCX0gZWxzZQotCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gYWxsb2MgdHJh bXBvbGluZSBzeW0gdGFibGUiKTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKgotICogRnVu Y3Rpb246CXByaXZfdGd0X2ltZ19nZW4KLSAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSBzdG9yYWdl IGZvciBhbmQgY29weSB0aGUgdGFyZ2V0IHNwZWNpZmljIGltYWdlIGRhdGEKLSAqCWFuZCBmaXgg dXAgaXRzIHJlbG9jYXRpb25zIGZvciB0aGUgbmV3IGV4dGVybmFsIHN5bWJvbC4gIElmCi0gKglh IHRyYW1wb2xpbmUgaW1hZ2UgcGFja2V0IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBpdCBpcyBh ZGRlZAotICoJdG8gdGhlIHRyYW1wb2xpbmUgbGlzdC4KLSAqLwotc3RhdGljIGludCBwcml2X3Rn dF9pbWdfZ2VuKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB1MzIgYmFzZSwKLQkJCSAgICB1 MzIgZ2VuX2luZGV4LCBzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfZXh0X3N5bSkKLXsKLQlzdHJ1Y3Qg dHJhbXBfaW1nX3BrdCAqbmV3X2ltZ19wa3QgPSBOVUxMOwotCXUzMiBpOwotCXUzMiBwa3Rfc2l6 ZSA9IHRyYW1wX2ltZ19wa3Rfc2l6ZV9nZXQoKTsKLQl1OCAqZ2VuX3RibF9lbnRyeTsKLQl1OCAq cGt0X2RhdGE7Ci0Jc3RydWN0IHJlbG9jX3JlY29yZF90ICpjdXJfcmVsbzsKLQlpbnQgcmV0X3Zh bCA9IDA7Ci0KLQkvKiAgQWxsb2NhdGUgYSBuZXcgaW1hZ2UgcGFja2V0IGFuZCBzZXQgaXQgdXAu ICovCi0JbmV3X2ltZ19wa3QgPQotCSAgICAoc3RydWN0IHRyYW1wX2ltZ19wa3QgKilkbHRoaXMt Pm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAotCQkJCQkJCQkgIHBrdF9zaXpl KTsKLQlpZiAobmV3X2ltZ19wa3QgIT0gTlVMTCkgewotCQkvKiAgU2F2ZSB0aGUgYmFzZSwgdGhp cyBpcyB3aGVyZSBpdCBnb2VzIGluIHRoZSBzZWN0aW9uICovCi0JCW5ld19pbWdfcGt0LT5iYXNl ID0gYmFzZTsKLQotCQkvKiAgQ29weSBvdmVyIHRoZSBpbWFnZSBkYXRhIGFuZCByZWxvcyBmcm9t IHRoZSB0YXJnZXQgdGFibGUgKi8KLQkJcGt0X2RhdGEgPSAodTggKikgJm5ld19pbWdfcGt0LT5o ZHI7Ci0JCWdlbl90YmxfZW50cnkgPSAodTggKikgJnRyYW1wX2dlbl9pbmZvW2dlbl9pbmRleF07 Ci0JCWZvciAoaSA9IDA7IGkgPCBwa3Rfc2l6ZTsgaSsrKSB7Ci0JCQkqcGt0X2RhdGEgPSAqZ2Vu X3RibF9lbnRyeTsKLQkJCXBrdF9kYXRhKys7Ci0JCQlnZW5fdGJsX2VudHJ5Kys7Ci0JCX0KLQot CQkvKiAgVXBkYXRlIHRoZSByZWxvY2F0aW9ucyB0byBwb2ludCB0byB0aGUgZXh0ZXJuYWwgc3lt Ym9sICovCi0JCWN1cl9yZWxvID0KLQkJICAgIChzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKikoKHU4 ICopICZuZXdfaW1nX3BrdC0+aGRyICsKLQkJCQkJICAgICAgbmV3X2ltZ19wa3QtPmhkci5yZWxv X29mZnNldCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXdfaW1nX3BrdC0+aGRyLm51bV9yZWxvczsg aSsrKQotCQkJY3VyX3JlbG9baV0uU1lNTkRYID0gbmV3X2V4dF9zeW0tPmluZGV4OwotCi0JCS8q ICBBZGQgaXQgdG8gdGhlIHRyYW1wb2xpbmUgbGlzdC4gKi8KLQkJbmV3X2ltZ19wa3QtPm5leHQg PSBkbHRoaXMtPnRyYW1wLnRyYW1wX3BrdHM7Ci0JCWRsdGhpcy0+dHJhbXAudHJhbXBfcGt0cyA9 IG5ld19pbWdfcGt0OwotCi0JCXJldF92YWwgPSAxOwotCX0KLQotCXJldHVybiByZXRfdmFsOwot fQotCi0vKgotICogRnVuY3Rpb246CXByaXZfcGt0X3JlbG8KLSAqIERlc2NyaXB0aW9uOiBUYWtl IHRoZSBwcm92aWRlZCBpbWFnZSBkYXRhIGFuZCB0aGUgY29sbGVjdGlvbiBvZiByZWxvY2F0aW9u cwotICoJICBmb3IgaXQgYW5kIHBlcmZvcm0gdGhlIHJlbG9jYXRpb25zLiAgTm90ZSB0aGF0IGFs bCByZWxvY2F0aW9ucwotICoJICBhdCB0aGlzIHN0YWdlIGFyZSBjb25zaWRlcmVkIFNFQ09ORCBQ QVNTIHNpbmNlIHRoZSBvcmlnaW5hbAotICoJICBpbWFnZSBoYXMgYWxyZWFkeSBiZWVuIHByb2Nl c3NlZCBpbiB0aGUgZmlyc3QgcGFzcy4gIFRoaXMgbWVhbnMKLSAqCSAgVFJBTVBPTElORVMgQVJF IFRSRUFURUQgQVMgMk5EIFBBU1MgZXZlbiB0aG91Z2ggdGhpcyBpcyByZWFsbHkKLSAqCSAgdGhl IGZpcnN0IChhbmQgb25seSkgcmVsb2NhdGlvbiB0aGF0IHdpbGwgYmUgcGVyZm9ybWVkIG9uIHRo ZW0uCi0gKi8KLXN0YXRpYyBpbnQgcHJpdl9wa3RfcmVsbyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRs dGhpcywgdGd0X2F1X3QgKmRhdGEsCi0JCQkgc3RydWN0IHJlbG9jX3JlY29yZF90ICpycFtdLCB1 MzIgcmVsb19jb3VudCkKLXsKLQlpbnQgcmV0X3ZhbCA9IDE7Ci0JdTMyIGk7Ci0JYm9vbCB0bXA7 Ci0KLQkvKiAgV2FsayB0aHJvdWdoIGFsbCBvZiB0aGUgcmVsb3MgYW5kIHByb2Nlc3MgdGhlbS4g IFRoaXMgZnVuY3Rpb24gaXMKLQkgKiB0aGUgZXF1aXZhbGVudCBvZiByZWxvY2F0ZV9wYWNrZXQo KSBmcm9tIGNsb2FkLmMsIGJ1dCBzcGVjaWFsaXplZAotCSAqIGZvciB0cmFtcG9saW5lcyBhbmQg Mm5kIHBoYXNlIHJlbG9jYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCByZWxvX2NvdW50OyBp KyspCi0JCWRsb2FkX3JlbG9jYXRlKGRsdGhpcywgZGF0YSwgcnBbaV0sICZ0bXAsIHRydWUpOwot Ci0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9wa3Rf ZmluYWxpemUKLSAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSBsaXN0IG9mIGFsbCB0cmFtcG9saW5l IHBhY2tldHMgYW5kIGZpbmFsaXplIHRoZW0uCi0gKgkgIEVhY2ggdHJhbXBvbGluZSBpbWFnZSBw YWNrZXQgd2lsbCBiZSByZWxvY2F0ZWQgbm93IHRoYXQgdGhlCi0gKgkgIHRyYW1wb2xpbmUgc2Vj dGlvbiBoYXMgYmVlbiBhbGxvY2F0ZWQgb24gdGhlIHRhcmdldC4gIE9uY2UKLSAqCSAgYWxsIG9m IHRoZSByZWxvY2F0aW9ucyBhcmUgZG9uZSB0aGUgdHJhbXBvbGluZSBpbWFnZSBkYXRhCi0gKgkg IGlzIHdyaXR0ZW4gaW50byB0YXJnZXQgbWVtb3J5IGFuZCB0aGUgdHJhbXBvbGluZSBwYWNrZXQK LSAqCSAgaXMgZnJlZWQ6IGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgdGhpcyBwb2ludC4K LSAqLwotc3RhdGljIGludCBwcml2X3RyYW1wX3BrdF9maW5hbGl6ZShzdHJ1Y3QgZGxvYWRfc3Rh dGUgKmRsdGhpcykKLXsKLQlpbnQgcmV0X3ZhbCA9IDE7Ci0Jc3RydWN0IHRyYW1wX2ltZ19wa3Qg KmN1cl9wa3QgPSBOVUxMOwotCXN0cnVjdCByZWxvY19yZWNvcmRfdCAqcmVsb3NbTUFYX1JFTE9T X1BFUl9QQVNTXTsKLQl1MzIgcmVsb3NfZG9uZTsKLQl1MzIgaTsKLQlzdHJ1Y3QgcmVsb2NfcmVj b3JkX3QgKmN1cl9yZWxvOwotCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICpzZWN0X2luZm8gPQot CSAgICAmZGx0aGlzLT5sZHJfc2VjdGlvbnNbZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudF07 Ci0KLQkvKiAgV2FsayB0aGUgbGlzdCBvZiB0cmFtcG9saW5lIHBhY2tldHMgYW5kIHJlbG9jYXRl IGVhY2ggcGFja2V0LiAgVGhpcwotCSAqIGZ1bmN0aW9uIGlzIHRoZSB0cmFtcG9saW5lIGVxdWl2 YWxlbnQgb2YgZGxvYWRfZGF0YSgpIGZyb20KLQkgKiBjbG9hZC5jLiAqLwotCWN1cl9wa3QgPSBk bHRoaXMtPnRyYW1wLnRyYW1wX3BrdHM7Ci0Jd2hpbGUgKChyZXRfdmFsICE9IDApICYmIChjdXJf cGt0ICE9IE5VTEwpKSB7Ci0JCS8qICBSZW1vdmUgdGhlIHBrdCBmcm9tIHRoZSBsaXN0ICovCi0J CWRsdGhpcy0+dHJhbXAudHJhbXBfcGt0cyA9IGN1cl9wa3QtPm5leHQ7Ci0KLQkJLyogIFNldHVw IHNlY3Rpb24gYW5kIGltYWdlIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlbG8gKi8KLQkJ ZGx0aGlzLT5pbWFnZV9zZWNuID0gc2VjdF9pbmZvOwotCQlkbHRoaXMtPmltYWdlX29mZnNldCA9 IGN1cl9wa3QtPmJhc2U7Ci0JCWRsdGhpcy0+ZGVsdGFfcnVuYWRkciA9IHNlY3RfaW5mby0+cnVu X2FkZHI7Ci0KLQkJLyogIFdhbGsgdGhyb3VnaCBhbGwgcmVsb3MgZm9yIHRoZSBwYWNrZXQgKi8K LQkJcmVsb3NfZG9uZSA9IDA7Ci0JCWN1cl9yZWxvID0gKHN0cnVjdCByZWxvY19yZWNvcmRfdCAq KSgodTggKikgJmN1cl9wa3QtPmhkciArCi0JCQkJCQkgICAgIGN1cl9wa3QtPmhkci5yZWxvX29m ZnNldCk7Ci0JCXdoaWxlIChyZWxvc19kb25lIDwgY3VyX3BrdC0+aGRyLm51bV9yZWxvcykgewot I2lmZGVmIEVOQUJMRV9UUkFNUF9ERUJVRwotCQkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15 c3ltLAotCQkJCQkgIj09PT4gVHJhbXBvbGluZSAleCBicmFuY2hlcyB0byAleCIsCi0JCQkJCSBz ZWN0X2luZm8tPnJ1bl9hZGRyICsKLQkJCQkJIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0LAotCQkJCQkg ZGx0aGlzLT4KLQkJCQkJIHRyYW1wLmZpbmFsX3N5bV90YWJsZVtjdXJfcmVsby0+Ci0JCQkJCQkJ ICAgICAgIFNZTU5EWF0udmFsdWUpOwotI2VuZGlmCi0KLQkJCWZvciAoaSA9IDA7Ci0JCQkgICAg ICgoaSA8IE1BWF9SRUxPU19QRVJfUEFTUykgJiYKLQkJCSAgICAgICgoaSArIHJlbG9zX2RvbmUp IDwgY3VyX3BrdC0+aGRyLm51bV9yZWxvcykpOyBpKyspCi0JCQkJcmVsb3NbaV0gPSBjdXJfcmVs byArIGk7Ci0KLQkJCS8qICBEbyB0aGUgYWN0dWFsIHJlbG8gKi8KLQkJCXJldF92YWwgPSBwcml2 X3BrdF9yZWxvKGRsdGhpcywKLQkJCQkJCSh0Z3RfYXVfdCAqKSAmY3VyX3BrdC0+cGF5bG9hZCwK LQkJCQkJCXJlbG9zLCBpKTsKLQkJCWlmIChyZXRfdmFsID09IDApIHsKLQkJCQlkbG9hZF9lcnJv cihkbHRoaXMsCi0JCQkJCSAgICAiUmVsb2NhdGlvbiBvZiB0cmFtcG9saW5lIHBrdCBhdCAleCIK LQkJCQkJICAgICIgZmFpbGVkIiwgY3VyX3BrdC0+YmFzZSArCi0JCQkJCSAgICBzZWN0X2luZm8t PnJ1bl9hZGRyKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJcmVsb3NfZG9uZSArPSBpOwotCQkJ Y3VyX3JlbG8gKz0gaTsKLQkJfQotCi0JCS8qICBNYWtlIHN1cmUgd2UgZGlkbid0IGhpdCBhIHBy b2JsZW0gKi8KLQkJaWYgKHJldF92YWwgIT0gMCkgewotCQkJLyogIFJlbG9zIGFyZSBkb25lIGZv ciB0aGUgcGFja2V0LCB3cml0ZSBpdCB0byB0aGUKLQkJCSAqIHRhcmdldCAqLwotCQkJcmV0X3Zh bCA9IGRsdGhpcy0+bXlpby0+d3JpdGVtZW0oZGx0aGlzLT5teWlvLAotCQkJCQkJCSAmY3VyX3Br dC0+cGF5bG9hZCwKLQkJCQkJCQkgc2VjdF9pbmZvLT5sb2FkX2FkZHIgKwotCQkJCQkJCSBjdXJf cGt0LT5iYXNlLAotCQkJCQkJCSBzZWN0X2luZm8sCi0JCQkJCQkJIEJZVEVfVE9fSE9TVAotCQkJ CQkJCSAoY3VyX3BrdC0+aGRyLgotCQkJCQkJCSAgdHJhbXBfY29kZV9zaXplKSk7Ci0JCQlpZiAo cmV0X3ZhbCA9PSAwKSB7Ci0JCQkJZGxvYWRfZXJyb3IoZGx0aGlzLAotCQkJCQkgICAgIldyaXRl IHRvICIgRk1UX1VJMzIgIiBmYWlsZWQiLAotCQkJCQkgICAgc2VjdF9pbmZvLT5sb2FkX2FkZHIg KwotCQkJCQkgICAgY3VyX3BrdC0+YmFzZSk7Ci0JCQl9Ci0KLQkJCS8qICBEb25lIHdpdGggdGhl IHBrdCwgbGV0IGl0IGdvICovCi0JCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRs dGhpcy0+bXlzeW0sIGN1cl9wa3QpOwotCi0JCQkvKiAgR2V0IHRoZSBuZXh0IHBhY2tldCB0byBw cm9jZXNzICovCi0JCQljdXJfcGt0ID0gZGx0aGlzLT50cmFtcC50cmFtcF9wa3RzOwotCQl9Ci0J fQotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjoJcHJpdl9kdXBfcGt0 X2ZpbmFsaXplCi0gKiBEZXNjcmlwdGlvbjogV2FsayB0aGUgbGlzdCBvZiBkdXBsaWNhdGUgaW1h Z2UgcGFja2V0cyBhbmQgZmluYWxpemUgdGhlbS4KLSAqCSAgRWFjaCBkdXBsaWNhdGUgcGFja2V0 IHdpbGwgYmUgcmVsb2NhdGVkIGFnYWluIGZvciB0aGUKLSAqCSAgcmVsb2NhdGlvbnMgdGhhdCBw cmV2aW91c2x5IGZhaWxlZCBhbmQgaGF2ZSBiZWVuIGFkanVzdGVkCi0gKgkgIHRvIHBvaW50IGF0 IGEgdHJhbXBvbGluZS4gIE9uY2UgYWxsIHJlbG9jYXRpb25zIGZvciBhIHBhY2tldAotICoJICBo YXZlIGJlZW4gZG9uZSwgd3JpdGUgdGhlIHBhY2tldCBpbnRvIHRhcmdldCBtZW1vcnkuICBUaGUK LSAqCSAgZHVwbGljYXRlIHBhY2tldCBhbmQgaXRzIHJlbG9jYXRpb24gY2hhaW4gYXJlIGFsbCBm cmVlZAotICoJICBhZnRlciB1c2UgaGVyZSBhcyB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkIGFm dGVyIHRoaXMuCi0gKi8KLXN0YXRpYyBpbnQgcHJpdl9kdXBfcGt0X2ZpbmFsaXplKHN0cnVjdCBk bG9hZF9zdGF0ZSAqZGx0aGlzKQotewotCWludCByZXRfdmFsID0gMTsKLQlzdHJ1Y3QgdHJhbXBf aW1nX2R1cF9wa3QgKmN1cl9wa3Q7Ci0Jc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbyAqY3VyX3Jl bG87Ci0Jc3RydWN0IHJlbG9jX3JlY29yZF90ICpyZWxvc1tNQVhfUkVMT1NfUEVSX1BBU1NdOwot CXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzZWN0X2hkciA9IE5VTEw7Ci0JczMyIGk7Ci0KLQkvKiBT aW1pbGFyIHRvIHRoZSB0cmFtcG9saW5lIHBrdCBmaW5hbGl6ZSwgdGhpcyBmdW5jdGlvbiB3YWxr cyBlYWNoIGR1cAotCSAqIHBrdCB0aGF0IHdhcyBnZW5lcmF0ZWQgYW5kIHBlcmZvcm1zIGFsbCBy ZWxvY2F0aW9ucyB0aGF0IHdlcmUKLQkgKiBkZWZlcnJlZCB0byBhIDJuZCBwYXNzLiAgVGhpcyBp cyB0aGUgZXF1aXZhbGVudCBvZiBkbG9hZF9kYXRhKCkgZnJvbQotCSAqIGNsb2FkLmMsIGJ1dCBk b2VzIG5vdCBuZWVkIHRoZSBhZGRpdGlvbmFsIHJlb3JkZXIgYW5kIGNoZWNrc3VtCi0JICogcHJv Y2Vzc2luZyBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuICovCi0JY3VyX3BrdCA9IGRsdGhp cy0+dHJhbXAuZHVwX3BrdHM7Ci0Jd2hpbGUgKChyZXRfdmFsICE9IDApICYmIChjdXJfcGt0ICE9 IE5VTEwpKSB7Ci0JCS8qICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgbGlzdCwgd2UnbGwgYmUg ZnJlZWluZyBpdAotCQkgKiBzaG9ydGx5ICovCi0JCWRsdGhpcy0+dHJhbXAuZHVwX3BrdHMgPSBj dXJfcGt0LT5uZXh0OwotCi0JCS8qICBTZXR1cCB0aGUgc2VjdGlvbiBhbmQgaW1hZ2Ugb2Zmc2V0 IGZvciByZWxvY2F0aW9uICovCi0JCWRsdGhpcy0+aW1hZ2Vfc2VjbiA9ICZkbHRoaXMtPmxkcl9z ZWN0aW9uc1tjdXJfcGt0LT5zZWNubl07Ci0JCWRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ID0gY3VyX3Br dC0+b2Zmc2V0OwotCi0JCS8qICBJbiBvcmRlciB0byBnZXQgdGhlIGRlbHRhIHJ1biBhZGRyZXNz LCB3ZSBuZWVkIHRvIHJlZmVyZW5jZQotCQkgKiB0aGUgb3JpZ2luYWwgc2VjdGlvbiBoZWFkZXIu ICBJdCdzIGEgYml0IHVnbHksIGJ1dCBuZWVkZWQKLQkJICogZm9yIHJlbG8uICovCi0JCWkgPSAo czMyKSAoZGx0aGlzLT5pbWFnZV9zZWNuIC0gZGx0aGlzLT5sZHJfc2VjdGlvbnMpOwotCQlzZWN0 X2hkciA9IGRsdGhpcy0+c2VjdF9oZHJzICsgaTsKLQkJZGx0aGlzLT5kZWx0YV9ydW5hZGRyID0g c2VjdF9oZHItPmRzX3BhZGRyOwotCi0JCS8qICBXYWxrIGFsbCByZWxvcyBpbiB0aGUgY2hhaW4g YW5kIHByb2Nlc3MgZWFjaC4gKi8KLQkJY3VyX3JlbG8gPSBjdXJfcGt0LT5yZWxvX2NoYWluOwot CQl3aGlsZSAoY3VyX3JlbG8gIT0gTlVMTCkgewotCQkJLyogIFByb2Nlc3MgdGhlbSBhIGNodW5r IGF0IGEgdGltZSB0byBiZSBlZmZpY2llbnQgKi8KLQkJCWZvciAoaSA9IDA7IChpIDwgTUFYX1JF TE9TX1BFUl9QQVNTKQotCQkJICAgICAmJiAoY3VyX3JlbG8gIT0gTlVMTCk7Ci0JCQkgICAgIGkr KywgY3VyX3JlbG8gPSBjdXJfcmVsby0+bmV4dCkgewotCQkJCXJlbG9zW2ldID0gJmN1cl9yZWxv LT5yZWxvOwotCQkJCWN1cl9wa3QtPnJlbG9fY2hhaW4gPSBjdXJfcmVsby0+bmV4dDsKLQkJCX0K LQotCQkJLyogIERvIHRoZSBhY3R1YWwgcmVsbyAqLwotCQkJcmV0X3ZhbCA9IHByaXZfcGt0X3Jl bG8oZGx0aGlzLAotCQkJCQkJY3VyX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSwKLQkJCQkJCXJlbG9z LCBpKTsKLQkJCWlmIChyZXRfdmFsID09IDApIHsKLQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCi0J CQkJCSAgICAiUmVsb2NhdGlvbiBvZiBkdXAgcGt0IGF0ICV4IgotCQkJCQkgICAgIiBmYWlsZWQi LCBjdXJfcGt0LT5vZmZzZXQgKwotCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5ydW5fYWRk cik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qICBSZWxlYXNlIGFsbCBvZiB0aGVzZSByZWxv cywgd2UncmUgZG9uZSB3aXRoIHRoZW0gKi8KLQkJCXdoaWxlIChpID4gMCkgewotCQkJCWRsdGhp cy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKLQkJCQkJCUdFVF9DT05U QUlORVIKLQkJCQkJCShyZWxvc1tpIC0gMV0sCi0JCQkJCQkgc3RydWN0IHRyYW1wX2ltZ19kdXBf cmVsbywKLQkJCQkJCSByZWxvKSk7Ci0JCQkJaS0tOwotCQkJfQotCi0JCQkvKiAgRE8gTk9UIEFE VkFOQ0UgY3VyX3JlbG8sIElUIElTIEFMUkVBRFkgUkVBRFkgVE8KLQkJCSAqIEdPISAqLwotCQl9 Ci0KLQkJLyogRG9uZSB3aXRoIGFsbCByZWxvcy4gIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgaGF2ZSBh IHByb2JsZW0gYW5kCi0JCSAqIHdyaXRlIGl0IG91dCB0byB0aGUgdGFyZ2V0ICovCi0JCWlmIChy ZXRfdmFsICE9IDApIHsKLQkJCXJldF92YWwgPSBkbHRoaXMtPm15aW8tPndyaXRlbWVtKGRsdGhp cy0+bXlpbywKLQkJCQkJCQkgY3VyX3BrdC0+aW1nX3BrdC4KLQkJCQkJCQkgaW1nX2RhdGEsCi0J CQkJCQkJIGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+Ci0JCQkJCQkJIGxvYWRfYWRkciArCi0JCQkJCQkJ IGN1cl9wa3QtPm9mZnNldCwKLQkJCQkJCQkgZGx0aGlzLT5pbWFnZV9zZWNuLAotCQkJCQkJCSBC WVRFX1RPX0hPU1QKLQkJCQkJCQkgKGN1cl9wa3QtPmltZ19wa3QuCi0JCQkJCQkJICBwYWNrZXRf c2l6ZSkpOwotCQkJaWYgKHJldF92YWwgPT0gMCkgewotCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywK LQkJCQkJICAgICJXcml0ZSB0byAiIEZNVF9VSTMyICIgZmFpbGVkIiwKLQkJCQkJICAgIGRsdGhp cy0+aW1hZ2Vfc2Vjbi0+bG9hZF9hZGRyICsKLQkJCQkJICAgIGN1cl9wa3QtPm9mZnNldCk7Ci0J CQl9Ci0KLQkJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwg Y3VyX3BrdCk7Ci0KLQkJCS8qICBBZHZhbmNlIHRvIHRoZSBuZXh0IHBhY2tldCAqLwotCQkJY3Vy X3BrdCA9IGRsdGhpcy0+dHJhbXAuZHVwX3BrdHM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0X3Zh bDsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOglwcml2X2R1cF9maW5kCi0gKiBEZXNjcmlwdGlvbjog V2FsayB0aGUgbGlzdCBvZiBleGlzdGluZyBkdXBsaWNhdGUgcGFja2V0cyBhbmQgZmluZCBhCi0g KgkgIG1hdGNoIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG51bWJlciBhbmQgaW1hZ2Ugb2Zmc2V0LiAg UmV0dXJuCi0gKgkgIHRoZSBkdXBsaWNhdGUgcGFja2V0IGlmIGZvdW5kLCBvdGhlcndpc2UgTlVM TC4KLSAqLwotc3RhdGljIHN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqcHJpdl9kdXBfZmluZChz dHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKLQkJCQkJICAgICAgIHMxNiBzZWNubiwgdTMyIGlt YWdlX29mZnNldCkKLXsKLQlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKmN1cl9wa3QgPSBOVUxM OwotCi0JZm9yIChjdXJfcGt0ID0gZGx0aGlzLT50cmFtcC5kdXBfcGt0czsKLQkgICAgIGN1cl9w a3QgIT0gTlVMTDsgY3VyX3BrdCA9IGN1cl9wa3QtPm5leHQpIHsKLQkJaWYgKChjdXJfcGt0LT5z ZWNubiA9PSBzZWNubikgJiYKLQkJICAgIChjdXJfcGt0LT5vZmZzZXQgPT0gaW1hZ2Vfb2Zmc2V0 KSkgewotCQkJLyogIEZvdW5kIGEgbWF0Y2gsIGJyZWFrIG91dCAqLwotCQkJYnJlYWs7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gY3VyX3BrdDsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOglwcml2X2ltZ19w a3RfZHVwCi0gKiBEZXNjcmlwdGlvbjogRHVwbGljYXRlIHRoZSBvcmlnaW5hbCBpbWFnZSBwYWNr ZXQuICBJZiB0aGlzIGlzIHRoZSBmaXJzdAotICoJICB0aW1lIHRoaXMgaW1hZ2UgcGFja2V0IGhh cyBiZWVuIHNlZW4gKGJhc2VkIG9uIHNlY3Rpb24gbnVtYmVyCi0gKgkgIGFuZCBpbWFnZSBvZmZz ZXQpLCBjcmVhdGUgYSBuZXcgZHVwbGljYXRlIHBhY2tldCBhbmQgYWRkIGl0Ci0gKgkgIHRvIHRo ZSBkdXAgcGFja2V0IGxpc3QuICBJZiBub3QsIGp1c3QgZ2V0IHRoZSBleGlzdGluZyBvbmUgYW5k Ci0gKgkgIHVwZGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IHBhY2tldCBjb250ZW50cyAoc2luY2Ug cmVsb2NhdGlvbgotICoJICBvbiB0aGUgcGFja2V0IGlzIHN0aWxsIG9uZ29pbmcgaW4gZmlyc3Qg cGFzcy4pICBDcmVhdGUgYQotICoJICBkdXBsaWNhdGUgb2YgdGhlIHByb3ZpZGVkIHJlbG9jYXRp b24sIGJ1dCB1cGRhdGUgaXQgdG8gcG9pbnQKLSAqCSAgdG8gdGhlIG5ldyB0cmFtcG9saW5lIHN5 bWJvbC4gIEFkZCB0aGUgbmV3IHJlbG9jYXRpb24gZHVwIHRvCi0gKgkgIHRoZSBkdXAgcGFja2V0 J3MgcmVsbyBjaGFpbiBmb3IgMm5kIHBhc3MgcmVsb2NhdGlvbiBsYXRlci4KLSAqLwotc3RhdGlj IGludCBwcml2X2ltZ19wa3RfZHVwKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAotCQkJICAg IHMxNiBzZWNubiwgdTMyIGltYWdlX29mZnNldCwKLQkJCSAgICBzdHJ1Y3QgaW1hZ2VfcGFja2V0 X3QgKmlwYWNrZXQsCi0JCQkgICAgc3RydWN0IHJlbG9jX3JlY29yZF90ICpycCwKLQkJCSAgICBz dHJ1Y3QgdHJhbXBfc3ltICpuZXdfdHJhbXBfc3ltKQotewotCXN0cnVjdCB0cmFtcF9pbWdfZHVw X3BrdCAqZHVwX3BrdCA9IE5VTEw7Ci0JdTMyIG5ld19kdXBfc2l6ZTsKLQlzMzIgaTsKLQlpbnQg cmV0X3ZhbCA9IDA7Ci0Jc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbyAqZHVwX3JlbG8gPSBOVUxM OwotCi0JLyogIERldGVybWluZSBpZiB0aGlzIGltYWdlIHBhY2tldCBpcyBhbHJlYWR5IGJlaW5n IHRyYWNrZWQgaW4gdGhlCi0JICAgZHVwIGxpc3QgZm9yIG90aGVyIHRyYW1wb2xpbmVzLiAqLwot CWR1cF9wa3QgPSBwcml2X2R1cF9maW5kKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCk7Ci0K LQlpZiAoZHVwX3BrdCA9PSBOVUxMKSB7Ci0JCS8qICBUaGlzIGltYWdlIHBhY2tldCBkb2VzIG5v dCBleGlzdCBpbiBvdXIgdHJhY2tpbmcsIHNvIGNyZWF0ZQotCQkgKiBhIG5ldyBvbmUgYW5kIGFk ZCBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KLQkJbmV3X2R1cF9zaXplID0gc2l6ZW9m KHN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCkgKwotCQkgICAgaXBhY2tldC0+cGFja2V0X3NpemU7 Ci0KLQkJZHVwX3BrdCA9IChzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKikKLQkJICAgIGRsdGhp cy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIG5ld19kdXBfc2l6ZSk7Ci0J CWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKLQkJCS8qICBTYXZlIG9mZiB0aGUgc2VjdGlvbiBhbmQg b2Zmc2V0IGluZm9ybWF0aW9uICovCi0JCQlkdXBfcGt0LT5zZWNubiA9IHNlY25uOwotCQkJZHVw X3BrdC0+b2Zmc2V0ID0gaW1hZ2Vfb2Zmc2V0OwotCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IE5V TEw7Ci0KLQkJCS8qICBDb3B5IHRoZSBvcmlnaW5hbCBwYWNrZXQgY29udGVudCAqLwotCQkJZHVw X3BrdC0+aW1nX3BrdCA9ICppcGFja2V0OwotCQkJZHVwX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSA9 ICh1OCAqKSAoZHVwX3BrdCArIDEpOwotCQkJZm9yIChpID0gMDsgaSA8IGlwYWNrZXQtPnBhY2tl dF9zaXplOyBpKyspCi0JCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQotCQkJ CSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7Ci0KLQkJCS8qICBBZGQgdGhlIHBhY2tldCB0 byB0aGUgZHVwIGxpc3QgKi8KLQkJCWR1cF9wa3QtPm5leHQgPSBkbHRoaXMtPnRyYW1wLmR1cF9w a3RzOwotCQkJZGx0aGlzLT50cmFtcC5kdXBfcGt0cyA9IGR1cF9wa3Q7Ci0JCX0gZWxzZQotCQkJ ZGxvYWRfZXJyb3IoZGx0aGlzLCAiRmFpbGVkIHRvIGNyZWF0ZSBkdXAgcGFja2V0ISIpOwotCX0g ZWxzZSB7Ci0JCS8qICBUaGUgaW1hZ2UgcGFja2V0IGNvbnRlbnRzIGNvdWxkIGhhdmUgY2hhbmdl ZCBzaW5jZQotCQkgKiB0cmFtcG9saW5lIGRldGVjdGlvbiBoYXBwZW5zIGR1cmluZyByZWxvY2F0 aW9uIG9mIHRoZSBpbWFnZQotCQkgKiBwYWNrZXRzLiAgU28sIHdlIG5lZWQgdG8gdXBkYXRlIHRo ZSBpbWFnZSBwYWNrZXQgY29udGVudHMKLQkJICogYmVmb3JlIGFkZGluZyByZWxvIGluZm9ybWF0 aW9uLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZHVwX3BrdC0+aW1nX3BrdC5wYWNrZXRfc2l6ZTsg aSsrKQotCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQotCQkJICAgICooaXBh Y2tldC0+aW1nX2RhdGEgKyBpKTsKLQl9Ci0KLQkvKiAgU2luY2UgdGhlIHByZXZpb3VzIGNvZGUg bWF5IGhhdmUgYWxsb2NhdGVkIGEgbmV3IGR1cCBwYWNrZXQgZm9yIHVzLAotCSAgIGRvdWJsZSBj aGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgb25lLiAqLwotCWlmIChkdXBfcGt0ICE9IE5VTEwp IHsKLQkJLyogIEFsbG9jYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSByZWxvIGNoYWluLiAgRWFjaCBp bWFnZSBwYWNrZXQKLQkJICogY2FuIHBvdGVudGlhbGx5IGhhdmUgbXVsdGlwbGUgcmVsb2NhdGlv bnMgdGhhdCBjYXVzZSBhCi0JCSAqIHRyYW1wb2xpbmUgdG8gYmUgZ2VuZXJhdGVkLiAgU28sIHdl IGtlZXAgdGhlbSBpbiBhIGNoYWluLAotCQkgKiBvcmRlciBpcyBub3QgaW1wb3J0YW50LiAqLwot CQlkdXBfcmVsbyA9IGRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0s Ci0JCQkJCSBzaXplb2Yoc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbykpOwotCQlpZiAoZHVwX3Jl bG8gIT0gTlVMTCkgewotCQkJLyogIENvcHkgdGhlIHJlbG8gY29udGVudHMsIGFkanVzdCBmb3Ig dGhlIG5ldwotCQkJICogdHJhbXBvbGluZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0LiAqLwotCQkJ ZHVwX3JlbG8tPnJlbG8gPSAqcnA7Ci0JCQlkdXBfcmVsby0+cmVsby5TWU1ORFggPSBuZXdfdHJh bXBfc3ltLT5pbmRleDsKLQotCQkJZHVwX3JlbG8tPm5leHQgPSBkdXBfcGt0LT5yZWxvX2NoYWlu OwotCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IGR1cF9yZWxvOwotCi0JCQkvKiAgVGhhdCdzIGl0 LCB3ZSdyZSBkb25lLiAgTWFrZSBzdXJlIHdlIHVwZGF0ZSBvdXIKLQkJCSAqIHJldHVybiB2YWx1 ZSB0byBiZSBzdWNjZXNzIHNpbmNlIGV2ZXJ5dGhpbmcgZmluaXNoZWQKLQkJCSAqIG9rICovCi0J CQlyZXRfdmFsID0gMTsKLQkJfSBlbHNlCi0JCQlkbG9hZF9lcnJvcihkbHRoaXMsICJVbmFibGUg dG8gYWxsb2MgZHVwIHJlbG8iKTsKLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoKLSAq IEZ1bmN0aW9uOglkbG9hZF90cmFtcF9hdmFpbAotICogRGVzY3JpcHRpb246IENoZWNrIHRvIHNl ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgdHJhbXBvbGluZSBmb3IgdGhpcyB0eXBlCi0gKgkg IG9mIHJlbG9jYXRpb24uICBSZXR1cm4gdHJ1ZSBpZiBpdCBkb2VzLCBvdGhlcndpc2UgZmFsc2Uu Ci0gKi8KLWJvb2wgZGxvYWRfdHJhbXBfYXZhaWwoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMs IHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnApCi17Ci0JYm9vbCByZXRfdmFsID0gZmFsc2U7Ci0J dTE2IG1hcF9pbmRleDsKLQl1MTYgZ2VuX2luZGV4OwotCi0JLyogIENoZWNrIHR5cGUgaGFzaCB2 cy4gdGFyZ2V0IHRyYW1wIHRhYmxlICovCi0JbWFwX2luZGV4ID0gSEFTSF9GVU5DKHJwLT5UWVBF KTsKLQlnZW5faW5kZXggPSB0cmFtcF9tYXBbbWFwX2luZGV4XTsKLQlpZiAoZ2VuX2luZGV4ICE9 IFRSQU1QX05PX0dFTl9BVkFJTCkKLQkJcmV0X3ZhbCA9IHRydWU7Ci0KLQlyZXR1cm4gcmV0X3Zh bDsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9nZW5lcmF0ZQotICogRGVzY3Jp cHRpb246IENyZWF0ZSBhIG5ldyB0cmFtcG9saW5lIGZvciB0aGUgcHJvdmlkZWQgaW1hZ2UgcGFj a2V0IGFuZAotICoJICByZWxvY2F0aW9uIGNhdXNpbmcgcHJvYmxlbXMuICBUaGlzIHdpbGwgY3Jl YXRlIHRoZSB0cmFtcG9saW5lCi0gKgkgIGFzIHdlbGwgYXMgZHVwbGljYXRlL3VwZGF0ZSB0aGUg aW1hZ2UgcGFja2V0IGFuZCByZWxvY2F0aW9uCi0gKgkgIGNhdXNpbmcgdGhlIHByb2JsZW0sIHdo aWNoIHdpbGwgYmUgcmVsbydkIGFnYWluIGR1cmluZwotICoJICBmaW5hbGl6YXRpb24uCi0gKi8K LWludCBkbG9hZF90cmFtcF9nZW5lcmF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgczE2 IHNlY25uLAotCQkJIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBh Y2tldCwKLQkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwKQotewotCXUxNiBtYXBfaW5kZXg7 Ci0JdTE2IGdlbl9pbmRleDsKLQlpbnQgcmV0X3ZhbCA9IDE7Ci0JY2hhciB0cmFtcF9zeW1fc3Ry W1RSQU1QX1NZTV9QUkVGSVhfTEVOICsgVFJBTVBfU1lNX0hFWF9BU0NJSV9MRU5dOwotCXN0cnVj dCBsb2NhbF9zeW1ib2wgKnJlZl9zeW07Ci0Jc3RydWN0IHRyYW1wX3N5bSAqbmV3X3RyYW1wX3N5 bTsKLQlzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfZXh0X3N5bTsKLQlzdHJ1Y3QgdHJhbXBfc3RyaW5n ICpuZXdfdHJhbXBfc3RyOwotCXUzMiBuZXdfdHJhbXBfYmFzZTsKLQlzdHJ1Y3QgbG9jYWxfc3lt Ym9sIHRtcF9zeW07Ci0Jc3RydWN0IGxvY2FsX3N5bWJvbCBleHRfdG1wX3N5bTsKLQotCS8qICBI YXNoIHRoZSByZWxvIHR5cGUgdG8gZ2V0IG91ciBnZW5lcmF0b3IgaW5mb3JtYXRpb24gKi8KLQlt YXBfaW5kZXggPSBIQVNIX0ZVTkMocnAtPlRZUEUpOwotCWdlbl9pbmRleCA9IHRyYW1wX21hcFtt YXBfaW5kZXhdOwotCWlmIChnZW5faW5kZXggIT0gVFJBTVBfTk9fR0VOX0FWQUlMKSB7Ci0JCS8q ICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0cmFtcG9saW5lLCBjcmVhdGUgdGhlIHNlY3Rpb24gbmFt ZSBpbgotCQkgKiBvdXIgc3RyaW5nIHRhYmxlIGZvciBkZWJ1ZyBoZWxwIGxhdGVyLiAqLwotCQlp ZiAoZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9PSBOVUxMKSB7Ci0JCQlwcml2X3RyYW1wX3N0 cmluZ19jcmVhdGUoZGx0aGlzLAotCQkJCQkJIHN0cmxlbihUUkFNUF9TRUNUX05BTUUpLAotCQkJ CQkJIFRSQU1QX1NFQ1RfTkFNRSk7Ci0JCX0KLSNpZmRlZiBFTkFCTEVfVFJBTVBfREVCVUcKLQkJ ZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLAotCQkJCSAiVHJhbXBvbGluZSBhdCBpbWcg bG9jICV4LCByZWZlcmVuY2VzICV4IiwKLQkJCQkgZGx0aGlzLT5sZHJfc2VjdGlvbnNbc2Vjbm5d LnJ1bl9hZGRyICsKLQkJCQkgaW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRyLAotCQkJCSBkbHRoaXMt PmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXS52YWx1ZSk7Ci0jZW5kaWYKLQotCQkvKiAgR2VuZXJh dGUgdGhlIHRyYW1wb2xpbmUgc3RyaW5nLCBjaGVjayBpZiBhbHJlYWR5IGRlZmluZWQuCi0JCSAq IElmIHRoZSByZWxvIHN5bWJvbCBpbmRleCBpcyAtMSwgaXQgbWVhbnMgd2UgbmVlZCB0aGUgc2Vj dGlvbgotCQkgKiBpbmZvIGZvciByZWxvIGxhdGVyLiAgVG8gZG8gdGhpcyB3ZSdsbCBkdW1teSB1 cCBhIHN5bWJvbAotCQkgKiB3aXRoIHRoZSBzZWN0aW9uIGRlbHRhIGFuZCBydW4gYWRkcmVzc2Vz LiAqLwotCQlpZiAocnAtPlNZTU5EWCA9PSAtMSkgewotCQkJZXh0X3RtcF9zeW0udmFsdWUgPQot CQkJICAgIGRsdGhpcy0+bGRyX3NlY3Rpb25zW3NlY25uXS5ydW5fYWRkcjsKLQkJCWV4dF90bXBf c3ltLmRlbHRhID0gZGx0aGlzLT5zZWN0X2hkcnNbc2Vjbm5dLmRzX3BhZGRyOwotCQkJcmVmX3N5 bSA9ICZleHRfdG1wX3N5bTsKLQkJfSBlbHNlCi0JCQlyZWZfc3ltID0gJihkbHRoaXMtPmxvY2Fs X3N5bXRhYltycC0+U1lNTkRYXSk7Ci0KLQkJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUocmVmX3N5 bS0+dmFsdWUsIHRyYW1wX3N5bV9zdHIpOwotCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9z eW1fZmluZChkbHRoaXMsIHRyYW1wX3N5bV9zdHIpOwotCQlpZiAobmV3X3RyYW1wX3N5bSA9PSBO VUxMKSB7Ci0JCQkvKiAgSWYgdHJhbXAgc3RyaW5nIG5vdCBkZWZpbmVkLCBjcmVhdGUgaXQgYW5k IGEgbmV3Ci0JCQkgKiBzdHJpbmcsIGFuZCBzeW1ib2wgZm9yIGl0IGFzIHdlbGwgYXMgdGhlIG9y aWdpbmFsCi0JCQkgKiBzeW1ib2wgd2hpY2ggY2F1c2VkIHRoZSB0cmFtcG9saW5lLiAqLwotCQkJ bmV3X3RyYW1wX3N0ciA9IHByaXZfdHJhbXBfc3RyaW5nX2NyZWF0ZShkbHRoaXMsCi0JCQkJCQkJ CXN0cmxlbgotCQkJCQkJCQkodHJhbXBfc3ltX3N0ciksCi0JCQkJCQkJCSB0cmFtcF9zeW1fc3Ry KTsKLQkJCWlmIChuZXdfdHJhbXBfc3RyID09IE5VTEwpIHsKLQkJCQlkbG9hZF9lcnJvcihkbHRo aXMsICJGYWlsZWQgdG8gY3JlYXRlIG5ldyAiCi0JCQkJCSAgICAidHJhbXBvbGluZSBzdHJpbmdc biIpOwotCQkJCXJldF92YWwgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQkvKiAgQWxsb2NhdGUgdHJh bXAgc2VjdGlvbiBzcGFjZSBmb3IgdGhlIG5ldwotCQkJCSAqIHRyYW1wIGZyb20gdGhlIHRhcmdl dCAqLwotCQkJCW5ld190cmFtcF9iYXNlID0gcHJpdl90cmFtcF9zZWN0X2FsbG9jKGRsdGhpcywK LQkJCQkJCSAgICAgICB0cmFtcF9zaXplX2dldCgpKTsKLQotCQkJCS8qICBXZSBoYXZlIGEgc3Ry aW5nLCBjcmVhdGUgdGhlIG5ldyBzeW1ib2wgYW5kCi0JCQkJICogZHVwbGljYXRlIHRoZSBleHRl cm5hbC4gKi8KLQkJCQl0bXBfc3ltLnZhbHVlID0gbmV3X3RyYW1wX2Jhc2U7Ci0JCQkJdG1wX3N5 bS5kZWx0YSA9IDA7Ci0JCQkJdG1wX3N5bS5zZWNubiA9IC0xOwotCQkJCXRtcF9zeW0uc2NsYXNz ID0gMDsKLQkJCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9zeW1fY3JlYXRlKGRsdGhpcywK LQkJCQkJCQkgICAgICBuZXdfdHJhbXBfc3RyLT4KLQkJCQkJCQkgICAgICBpbmRleCwKLQkJCQkJ CQkgICAgICAmdG1wX3N5bSk7Ci0KLQkJCQluZXdfZXh0X3N5bSA9IHByaXZfdHJhbXBfc3ltX2Ny ZWF0ZShkbHRoaXMsIC0xLAotCQkJCQkJCQkgICAgcmVmX3N5bSk7Ci0KLQkJCQlpZiAoKG5ld190 cmFtcF9zeW0gIT0gTlVMTCkgJiYKLQkJCQkgICAgKG5ld19leHRfc3ltICE9IE5VTEwpKSB7Ci0J CQkJCS8qICBDYWxsIHRoZSBpbWFnZSBnZW5lcmF0b3IgdG8gZ2V0IHRoZQotCQkJCQkgKiBuZXcg aW1hZ2UgZGF0YSBhbmQgZml4IHVwIGl0cwotCQkJCQkgKiByZWxvY2F0aW9ucyBmb3IgdGhlIGV4 dGVybmFsCi0JCQkJCSAqIHN5bWJvbC4gKi8KLQkJCQkJcmV0X3ZhbCA9IHByaXZfdGd0X2ltZ19n ZW4oZGx0aGlzLAotCQkJCQkJCQkgbmV3X3RyYW1wX2Jhc2UsCi0JCQkJCQkJCSBnZW5faW5kZXgs Ci0JCQkJCQkJCSBuZXdfZXh0X3N5bSk7Ci0KLQkJCQkJLyogIEFkZCBnZW5lcmF0ZWQgaW1hZ2Ug ZGF0YSB0byB0cmFtcAotCQkJCQkgKiBpbWFnZSBsaXN0ICovCi0JCQkJCWlmIChyZXRfdmFsICE9 IDEpIHsKLQkJCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkZhaWxlZCB0byAiCi0JCQkJCQkJICAg ICJjcmVhdGUgaW1nIHBrdCBmb3IiCi0JCQkJCQkJICAgICIgdHJhbXBvbGluZVxuIik7Ci0JCQkJ CX0KLQkJCQl9IGVsc2UgewotCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3Jl YXRlICIKLQkJCQkJCSAgICAibmV3IHRyYW1wIHN5bXMgIgotCQkJCQkJICAgICIoJTguOFgsICU4 LjhYKVxuIiwKLQkJCQkJCSAgICBuZXdfdHJhbXBfc3ltLCBuZXdfZXh0X3N5bSk7Ci0JCQkJCXJl dF92YWwgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qICBEdXBsaWNhdGUgdGhlIGltYWdl IGRhdGEgYW5kIHJlbG8gcmVjb3JkIHRoYXQgY2F1c2VkIHRoZQotCQkgKiB0cmFtcCwgaW5jbHVk aW5nIHVwZGF0ZSB0aGUgcmVsbyBkYXRhIHRvIHBvaW50IHRvIHRoZSB0cmFtcAotCQkgKiBzeW1i b2wuICovCi0JCWlmIChyZXRfdmFsID09IDEpIHsKLQkJCXJldF92YWwgPSBwcml2X2ltZ19wa3Rf ZHVwKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCwKLQkJCQkJCSAgIGlwYWNrZXQsIHJwLCBu ZXdfdHJhbXBfc3ltKTsKLQkJCWlmIChyZXRfdmFsICE9IDEpIHsKLQkJCQlkbG9hZF9lcnJvcihk bHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlIGR1cCBvZiAiCi0JCQkJCSAgICAib3JpZ2luYWwgaW1n IHBrdFxuIik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoKLSAq IEZ1bmN0aW9uOglkbG9hZF90cmFtcF9wa3RfdXBkYXRlCi0gKiBEZXNjcmlwdGlvbjogVXBkYXRl IHRoZSBkdXBsaWNhdGUgY29weSBvZiB0aGlzIGltYWdlIHBhY2tldCwgd2hpY2ggdGhlCi0gKgkg IHRyYW1wb2xpbmUgbGF5ZXIgaXMgYWxyZWFkeSB0cmFja2luZy4gIFRoaXMgY2FsbCBpcyBjcml0 aWNhbAotICoJICB0byBtYWtlIGlmIHRyYW1wb2xpbmVzIHdlcmUgZ2VuZXJhdGVkIGFueXdoZXJl IHdpdGhpbiB0aGUKLSAqCSAgcGFja2V0IGFuZCBmaXJzdCBwYXNzIHJlbG8gY29udGludWVkIG9u IHRoZSByZW1haW5kZXIuICBUaGUKLSAqCSAgdHJhbXBvbGluZSBsYXllciBuZWVkcyB0aGUgdXBk YXRlcyBpbWFnZSBkYXRhIHNvIHdoZW4gMm5kCi0gKgkgIHBhc3MgcmVsbyBpcyBkb25lIGR1cmlu ZyBmaW5hbGl6ZSB0aGUgaW1hZ2UgcGFja2V0IGNhbiBiZQotICoJICB3cml0dGVuIHRvIHRoZSB0 YXJnZXQgc2luY2UgYWxsIHJlbG8gaXMgZG9uZS4KLSAqLwotaW50IGRsb2FkX3RyYW1wX3BrdF91 ZHBhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHMxNiBzZWNubiwKLQkJCSAgIHUzMiBp bWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCkKLXsKLQlzdHJ1Y3Qg dHJhbXBfaW1nX2R1cF9wa3QgKmR1cF9wa3QgPSBOVUxMOwotCXMzMiBpOwotCWludCByZXRfdmFs ID0gMDsKLQotCS8qICBGaW5kIHRoZSBpbWFnZSBwYWNrZXQgaW4gcXVlc3Rpb24sIHRoZSBjYWxs ZXIgbmVlZHMgdXMgdG8gdXBkYXRlIGl0Ci0JICAgc2luY2UgYSB0cmFtcG9saW5lIHdhcyBwcmV2 aW91c2x5IGdlbmVyYXRlZC4gKi8KLQlkdXBfcGt0ID0gcHJpdl9kdXBfZmluZChkbHRoaXMsIHNl Y25uLCBpbWFnZV9vZmZzZXQpOwotCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKLQkJZm9yIChpID0g MDsgaSA8IGR1cF9wa3QtPmltZ19wa3QucGFja2V0X3NpemU7IGkrKykKLQkJCSooZHVwX3BrdC0+ aW1nX3BrdC5pbWdfZGF0YSArIGkpID0KLQkJCSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7 Ci0KLQkJcmV0X3ZhbCA9IDE7Ci0JfSBlbHNlIHsKLQkJZGxvYWRfZXJyb3IoZGx0aGlzLAotCQkJ ICAgICJVbmFibGUgdG8gZmluZCBleGlzdGluZyBEVVAgcGt0IGZvciAleCwgb2Zmc2V0ICV4IiwK LQkJCSAgICBzZWNubiwgaW1hZ2Vfb2Zmc2V0KTsKLQotCX0KLQotCXJldHVybiByZXRfdmFsOwot fQotCi0vKgotICogRnVuY3Rpb246CWRsb2FkX3RyYW1wX2ZpbmFsaXplCi0gKiBEZXNjcmlwdGlv bjogSWYgYW55IHRyYW1wb2xpbmVzIHdlcmUgY3JlYXRlZCwgZmluYWxpemUgZXZlcnl0aGluZyBv biB0aGUKLSAqCSAgdGFyZ2V0IGJ5IGFsbG9jYXRpbmcgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBv biB0aGUgdGFyZ2V0LAotICoJICBmaW5hbGl6aW5nIHRoZSB0cmFtcG9saW5lIHN5bWJvbHMsIGZp bmFsaXppbmcgdGhlIHRyYW1wb2xpbmUKLSAqCSAgcGFja2V0cyAod3JpdGUgdGhlIG5ldyBzZWN0 aW9uIHRvIHRhcmdldCBtZW1vcnkpIGFuZCBmaW5hbGl6ZQotICoJICB0aGUgZHVwbGljYXRlIHBh Y2tldHMgYnkgZG9pbmcgMm5kIHBhc3MgcmVsbyBvdmVyIHRoZW0uCi0gKi8KLWludCBkbG9hZF90 cmFtcF9maW5hbGl6ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlpbnQgcmV0X3Zh bCA9IDE7Ci0KLQlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKSB7 Ci0JCS8qICBGaW5hbGl6ZSBzdHJpbmdzIGludG8gYSBmbGF0IHRhYmxlLiAgVGhpcyBpcyBuZWVk ZWQgc28gaXQKLQkJICogY2FuIGJlIGFkZGVkIHRvIHRoZSBkZWJ1ZyBzdHJpbmcgdGFibGUgbGF0 ZXIuICovCi0JCXJldF92YWwgPSBwcml2X3N0cmluZ190YmxfZmluYWxpemUoZGx0aGlzKTsKLQot CQkvKiAgRG8gdGFyZ2V0IGFsbG9jYXRpb24gZm9yIHNlY3Rpb24gQkVGT1JFIGZpbmFsaXppbmcK LQkJICogc3ltYm9scy4gKi8KLQkJaWYgKHJldF92YWwgIT0gMCkKLQkJCXJldF92YWwgPSBwcml2 X3RyYW1wX3NlY3RfdGd0X2FsbG9jKGRsdGhpcyk7Ci0KLQkJLyogIEZpbmFsaXplIHN5bWJvbHMg d2l0aCB0aGVpciBjb3JyZWN0IHRhcmdldCBpbmZvcm1hdGlvbiBhbmQKLQkJICogZmxhdHRlbiAq LwotCQlpZiAocmV0X3ZhbCAhPSAwKQotCQkJcmV0X3ZhbCA9IHByaXZfdHJhbXBfc3ltX2ZpbmFs aXplKGRsdGhpcyk7Ci0KLQkJLyogIEZpbmFsaXplIGFsbCB0cmFtcG9saW5lIHBhY2tldHMuICBU aGlzIHBlcmZvcm1zIHRoZQotCQkgKiByZWxvY2F0aW9uIG9uIHRoZSBwYWNrZXRzIGFzIHdlbGwg YXMgd3JpdGluZyB0aGVtIHRvIHRhcmdldAotCQkgKiBtZW1vcnkuICovCi0JCWlmIChyZXRfdmFs ICE9IDApCi0JCQlyZXRfdmFsID0gcHJpdl90cmFtcF9wa3RfZmluYWxpemUoZGx0aGlzKTsKLQot CQkvKiAgUGVyZm9ybSBhIDJuZCBwYXNzIHJlbG9jYXRpb24gb24gdGhlIGR1cCBsaXN0LiAqLwot CQlpZiAocmV0X3ZhbCAhPSAwKQotCQkJcmV0X3ZhbCA9IHByaXZfZHVwX3BrdF9maW5hbGl6ZShk bHRoaXMpOwotCX0KLQotCXJldHVybiByZXRfdmFsOwotfQotCi0vKgotICogRnVuY3Rpb246CWRs b2FkX3RyYW1wX2NsZWFudXAKLSAqIERlc2NyaXB0aW9uOiBSZWxlYXNlIGFsbCB0ZW1wb3Jhcnkg cmVzb3VyY2VzIHVzZWQgaW4gdGhlIHRyYW1wb2xpbmUgbGF5ZXIuCi0gKgkgIE5vdGUgdGhhdCB0 aGUgdGFyZ2V0IG1lbW9yeSB3aGljaCBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQKLSAqCSAg d3JpdHRlbiB0byBzdG9yZSB0aGUgdHJhbXBvbGluZXMgaXMgTk9UIFJFTEVBU0VEIEhFUkUgc2lu Y2UgaXQKLSAqCSAgaXMgcG90ZW50aWFsbHkgc3RpbGwgaW4gdXNlLiAgSXQgaXMgYXV0b21hdGlj YWxseSByZWxlYXNlZAotICoJICB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCi0gKi8KLXZv aWQgZGxvYWRfdHJhbXBfY2xlYW51cChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKLXsKLQlz dHJ1Y3QgdHJhbXBfaW5mbyAqdHJhbXAgPSAmZGx0aGlzLT50cmFtcDsKLQlzdHJ1Y3QgdHJhbXBf c3ltICpjdXJfc3ltOwotCXN0cnVjdCB0cmFtcF9zdHJpbmcgKmN1cl9zdHJpbmc7Ci0Jc3RydWN0 IHRyYW1wX2ltZ19wa3QgKmN1cl90cmFtcF9wa3Q7Ci0Jc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0 ICpjdXJfZHVwX3BrdDsKLQlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpjdXJfZHVwX3JlbG87 Ci0KLQkvKiAgSWYgdGhlcmUgd2VyZSBubyB0cmFtcHMgZ2VuZXJhdGVkLCBqdXN0IHJldHVybiAq LwotCWlmICh0cmFtcC0+dHJhbXBfc2VjdF9uZXh0X2FkZHIgPT0gMCkKLQkJcmV0dXJuOwotCi0J LyogIERlc3Ryb3kgYWxsIHRyYW1wIGluZm9ybWF0aW9uICovCi0JZm9yIChjdXJfc3ltID0gdHJh bXAtPnN5bWJvbF9oZWFkOwotCSAgICAgY3VyX3N5bSAhPSBOVUxMOyBjdXJfc3ltID0gdHJhbXAt PnN5bWJvbF9oZWFkKSB7Ci0JCXRyYW1wLT5zeW1ib2xfaGVhZCA9IGN1cl9zeW0tPm5leHQ7Ci0J CWlmICh0cmFtcC0+c3ltYm9sX3RhaWwgPT0gY3VyX3N5bSkKLQkJCXRyYW1wLT5zeW1ib2xfdGFp bCA9IE5VTEw7Ci0KLQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15 c3ltLCBjdXJfc3ltKTsKLQl9Ci0KLQlpZiAodHJhbXAtPmZpbmFsX3N5bV90YWJsZSAhPSBOVUxM KQotCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCi0JCQkJ CQl0cmFtcC0+ZmluYWxfc3ltX3RhYmxlKTsKLQotCWZvciAoY3VyX3N0cmluZyA9IHRyYW1wLT5z dHJpbmdfaGVhZDsKLQkgICAgIGN1cl9zdHJpbmcgIT0gTlVMTDsgY3VyX3N0cmluZyA9IHRyYW1w LT5zdHJpbmdfaGVhZCkgewotCQl0cmFtcC0+c3RyaW5nX2hlYWQgPSBjdXJfc3RyaW5nLT5uZXh0 OwotCQlpZiAodHJhbXAtPnN0cmluZ190YWlsID09IGN1cl9zdHJpbmcpCi0JCQl0cmFtcC0+c3Ry aW5nX3RhaWwgPSBOVUxMOwotCi0JCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0 aGlzLT5teXN5bSwgY3VyX3N0cmluZyk7Ci0JfQotCi0JaWYgKHRyYW1wLT5maW5hbF9zdHJpbmdf dGFibGUgIT0gTlVMTCkKLQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMt Pm15c3ltLAotCQkJCQkJdHJhbXAtPmZpbmFsX3N0cmluZ190YWJsZSk7Ci0KLQlmb3IgKGN1cl90 cmFtcF9wa3QgPSB0cmFtcC0+dHJhbXBfcGt0czsKLQkgICAgIGN1cl90cmFtcF9wa3QgIT0gTlVM TDsgY3VyX3RyYW1wX3BrdCA9IHRyYW1wLT50cmFtcF9wa3RzKSB7Ci0JCXRyYW1wLT50cmFtcF9w a3RzID0gY3VyX3RyYW1wX3BrdC0+bmV4dDsKLQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxv Y2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfdHJhbXBfcGt0KTsKLQl9Ci0KLQlmb3IgKGN1cl9kdXBf cGt0ID0gdHJhbXAtPmR1cF9wa3RzOwotCSAgICAgY3VyX2R1cF9wa3QgIT0gTlVMTDsgY3VyX2R1 cF9wa3QgPSB0cmFtcC0+ZHVwX3BrdHMpIHsKLQkJdHJhbXAtPmR1cF9wa3RzID0gY3VyX2R1cF9w a3QtPm5leHQ7Ci0KLQkJZm9yIChjdXJfZHVwX3JlbG8gPSBjdXJfZHVwX3BrdC0+cmVsb19jaGFp bjsKLQkJICAgICBjdXJfZHVwX3JlbG8gIT0gTlVMTDsKLQkJICAgICBjdXJfZHVwX3JlbG8gPSBj dXJfZHVwX3BrdC0+cmVsb19jaGFpbikgewotCQkJY3VyX2R1cF9wa3QtPnJlbG9fY2hhaW4gPSBj dXJfZHVwX3JlbG8tPm5leHQ7Ci0JCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRs dGhpcy0+bXlzeW0sCi0JCQkJCQkJY3VyX2R1cF9yZWxvKTsKLQkJfQotCi0JCWRsdGhpcy0+bXlz eW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX2R1cF9wa3QpOwotCX0KLX0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1wX3Rh YmxlX2M2MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcF90 YWJsZV9jNjAwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWNjNjRmLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1wX3RhYmxl X2M2MDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAqIHRyYW1wX3Rh YmxlX2M2MDAwLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rp b25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgImRsb2FkX2lu dGVybmFsLmgiCi0KLS8qICBUaGVzZSBhcmUgZGVmaW5lZCBpbiBjb2ZmLmgsIGJ1dCBtYXkgbm90 IGJlIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zCi0Jc28gd2UnbGwgZ28gYWhlYWQgYW5kIGRl ZmluZSB0aGVtIGhlcmUuICovCi0jaWZuZGVmIFJfQzYwTE8xNgotI2RlZmluZSBSX0M2MExPMTYJ ICAweDU0CS8qIEM2MDogTVZLIExvdyBIYWxmIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJfQzYwSEkx NgkgIDB4NTUJLyogQzYwOiBNVktIL01WS0xIIEhpZ2ggSGFsZiBSZWdpc3RlciAqLwotI2VuZGlm Ci0KLSNkZWZpbmUgQzZYX1RSQU1QX1dPUkRfQ09VTlQJCQk4Ci0jZGVmaW5lIEM2WF9UUkFNUF9N QVhfUkVMT1MJCQkgOAotCi0vKiAgVEhJUyBIQVNIIEZVTkNUSU9OIE1VU1QgTUFUQ0ggVEhFIE9O RSByZWxvY190YWJsZV9jNjAwMC5jICovCi0jZGVmaW5lIEhBU0hfRlVOQyh6eikgKCgoKCh6eikg KyAxKSAqIDE4NDVVTCkgPj4gMTEpICYgNjMpCi0KLS8qICBUSElTIE1VU1QgTUFUQ0ggcmVsb2Nf cmVjb3JkX3QgRk9SIEEgU1lNQk9MIEJBU0VEIFJFTE8gKi8KLXN0cnVjdCBjNjAwMF9yZWxvX3Jl Y29yZCB7Ci0JczMyIHZhZGRyOwotCXMzMiBzeW1uZHg7Ci0jaWZuZGVmIF9CSUdfRU5ESUFOCi0J dTE2IGRpc3A7Ci0JdTE2IHR5cGU7Ci0jZWxzZQotCXUxNiB0eXBlOwotCXUxNiBkaXNwOwotI2Vu ZGlmCi19OwotCi1zdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUgewotCXN0cnVjdCB0cmFtcF9nZW5fY29k ZV9oZHIgaGRyOwotCXUzMiB0cmFtcF9pbnN0cnNbQzZYX1RSQU1QX1dPUkRfQ09VTlRdOwotCXN0 cnVjdCBjNjAwMF9yZWxvX3JlY29yZCByZWxvc1tDNlhfVFJBTVBfTUFYX1JFTE9TXTsKLX07Ci0K LS8qICBIYXNoIG1hcHBpbmcgZm9yIHJlbG9zIHRoYXQgY2FuIGNhdXNlIHRyYW1wb2xpbmVzLiAq Lwotc3RhdGljIGNvbnN0IHUxNiB0cmFtcF9tYXBbXSA9IHsKLQk2NTUzNSwKLQk2NTUzNSwKLQk2 NTUzNSwKLQk2NTUzNSwKLQk2NTUzNSwKLQk2NTUzNSwKLQk2NTUzNSwKLQk2NTUzNSwKLQk2NTUz NSwKLQk2NTUzNSwKLQkwLAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1 NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1 LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAot CTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1 NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1 LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAot CTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1 NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1 LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1LAotCTY1NTM1Ci19OwotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGM2MDAwX2dlbl9jb2RlIHRyYW1wX2dlbl9pbmZvW10gPSB7Ci0JLyogIFRyYW1wIGNh dXNlZCBieSBSX0M2MFBDUjIxICovCi0JewotCSAvKiAgSGVhZGVyIC0gOCBpbnN0cnVjdGlvbnMs IDIgcmVsb3MgKi8KLQkgewotCSAgc2l6ZW9mKHUzMikgKiBDNlhfVFJBTVBfV09SRF9DT1VOVCwK LQkgIDIsCi0JICBGSUVMRF9PRkZTRVQoc3RydWN0IGM2MDAwX2dlbl9jb2RlLCByZWxvcykKLQkg IH0sCi0KLQkgLyogIFRyYW1wb2xpbmUgaW5zdHJ1Y3Rpb25zICovCi0JIHsKLQkgIDB4MDUzQzU0 RjcsCQkvKiAgICAgICBTVFcuRDJUMiAgQjEwLCAqc3AtLVsyXSAqLwotCSAgMHgwNTAwMDAyQSwJ CS8qICB8fCBNVksuUzIgICA8Ymxhbms+LCBCMTAgKi8KLQkgIDB4MDUwMDAwNkEsCQkvKiAgICAg ICBNVktILlMyICAgPGJsYW5rPiwgQjEwICovCi0JICAweDAwMjgwMzYyLAkJLyogICAgICAgQi5T MiAgICAgQjEwICovCi0JICAweDA1M0M1MkU2LAkJLyogICAgICAgTERXLkQyVDIgICorK3NwWzJd LCBCMTAgKi8KLQkgIDB4MDAwMDYwMDAsCQkvKiAgICAgICBOT1AgICAgICAgNCAqLwotCSAgMHgw MDAwMDAwMCwJCS8qICAgICAgIE5PUCAqLwotCSAgMHgwMDAwMDAwMAkJLyogICAgICAgTk9QICov Ci0JICB9LAotCi0JIC8qICBSZWxvY2F0aW9ucyAqLwotCSB7Ci0JICB7NCwgMCwgMCwgUl9DNjBM TzE2fSwKLQkgIHs4LCAwLCAwLCBSX0M2MEhJMTZ9LAotCSAgezAsIDAsIDAsIDB4MDAwMH0sCi0J ICB7MCwgMCwgMCwgMHgwMDAwfSwKLQkgIHswLCAwLCAwLCAweDAwMDB9LAotCSAgezAsIDAsIDAs IDB4MDAwMH0sCi0JICB7MCwgMCwgMCwgMHgwMDAwfSwKLQkgIHswLCAwLCAwLCAweDAwMDB9Ci0J ICB9Ci0JIH0KLX07Ci0KLS8qICBUQVJHRVQgU1BFQ0lGSUMgRlVOQ1RJT05TIFRIQVQgTVVTVCBC RSBERUZJTkVEICovCi1zdGF0aWMgdTMyIHRyYW1wX3NpemVfZ2V0KHZvaWQpCi17Ci0JcmV0dXJu IHNpemVvZih1MzIpICogQzZYX1RSQU1QX1dPUkRfQ09VTlQ7Ci19Ci0KLXN0YXRpYyB1MzIgdHJh bXBfaW1nX3BrdF9zaXplX2dldCh2b2lkKQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IGM2MDAw X2dlbl9jb2RlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9n ZW4vZ2guYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ2guYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2NDcwYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAot LyoKLSAqIGdoLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rp b25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vy ci5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KLQotc3RydWN0IGdoX25vZGUgewotCXN0cnVjdCBobGlzdF9ub2RlIGhsOwotCXU4IGRhdGFb MF07Ci19OwotCi0jZGVmaW5lIEdIX0hBU0hfT1JERVIgOAotCi1zdHJ1Y3QgZ2hfdF9oYXNoX3Rh YiB7Ci0JdTMyIHZhbF9zaXplOwotCURFQ0xBUkVfSEFTSFRBQkxFKGhhc2hfdGFibGUsIEdIX0hB U0hfT1JERVIpOwotCXUzMiAoKmhhc2gpKGNvbnN0IHZvaWQgKmtleSk7Ci0JYm9vbCAoKm1hdGNo KShjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKnZhbHVlKTsKLQl2b2lkICgqZGVsZXRlKSh2 b2lkICprZXkpOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBnaF9jcmVhdGUgPT09PT09PT0KLSAq LwotCi1zdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqZ2hfY3JlYXRlKHUzMiB2YWxfc2l6ZSwgdTMyICgq aGFzaCkoY29uc3Qgdm9pZCAqKSwKLQkJCQlib29sICgqbWF0Y2gpKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqKSwKLQkJCQl2b2lkICgqZGVsZXRlKSh2b2lkICopKQotewotCXN0cnVjdCBnaF90 X2hhc2hfdGFiICpoYXNoX3RhYjsKLQotCWhhc2hfdGFiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IGdoX3RfaGFzaF90YWIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhhc2hfdGFiKQotCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKLQotCWhhc2hfaW5pdChoYXNoX3RhYi0+aGFzaF90YWJsZSk7Ci0K LQloYXNoX3RhYi0+dmFsX3NpemUgPSB2YWxfc2l6ZTsKLQloYXNoX3RhYi0+aGFzaCA9IGhhc2g7 Ci0JaGFzaF90YWItPm1hdGNoID0gbWF0Y2g7Ci0JaGFzaF90YWItPmRlbGV0ZSA9IGRlbGV0ZTsK LQotCXJldHVybiBoYXNoX3RhYjsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnaF9kZWxldGUgPT09 PT09PT0KLSAqLwotdm9pZCBnaF9kZWxldGUoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFi KQotewotCXN0cnVjdCBnaF9ub2RlICpuOwotCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7Ci0JdTMy IGk7Ci0KLQlpZiAoaGFzaF90YWIpIHsKLQkJaGFzaF9mb3JfZWFjaF9zYWZlKGhhc2hfdGFiLT5o YXNoX3RhYmxlLCBpLCB0bXAsIG4sIGhsKSB7Ci0JCQloYXNoX2RlbCgmbi0+aGwpOwotCQkJaWYg KGhhc2hfdGFiLT5kZWxldGUpCi0JCQkJaGFzaF90YWItPmRlbGV0ZShuLT5kYXRhKTsKLQkJCWtm cmVlKG4pOwotCQl9Ci0KLQkJa2ZyZWUoaGFzaF90YWIpOwotCX0KLX0KLQotLyoKLSAqICA9PT09 PT09PSBnaF9maW5kID09PT09PT09Ci0gKi8KLQotdm9pZCAqZ2hfZmluZChzdHJ1Y3QgZ2hfdF9o YXNoX3RhYiAqaGFzaF90YWIsIGNvbnN0IHZvaWQgKmtleSkKLXsKLQlzdHJ1Y3QgZ2hfbm9kZSAq bjsKLQl1MzIga2V5X2hhc2ggPSBoYXNoX3RhYi0+aGFzaChrZXkpOwotCi0JaGFzaF9mb3JfZWFj aF9wb3NzaWJsZShoYXNoX3RhYi0+aGFzaF90YWJsZSwgbiwgaGwsIGtleV9oYXNoKSB7Ci0JCWlm IChoYXNoX3RhYi0+bWF0Y2goa2V5LCBuLT5kYXRhKSkKLQkJCXJldHVybiBuLT5kYXRhOwotCX0K LQotCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnaF9p bnNlcnQgPT09PT09PT0KLSAqLwotCi12b2lkICpnaF9pbnNlcnQoc3RydWN0IGdoX3RfaGFzaF90 YWIgKmhhc2hfdGFiLCBjb25zdCB2b2lkICprZXksCi0JCWNvbnN0IHZvaWQgKnZhbHVlKQotewot CXN0cnVjdCBnaF9ub2RlICpuOwotCi0JbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnaF9ub2Rl KSArIGhhc2hfdGFiLT52YWxfc2l6ZSwKLQkJCUdGUF9LRVJORUwpOwotCi0JaWYgKCFuKQotCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCUlOSVRfSExJU1RfTk9ERSgmbi0+aGwpOwotCWhh c2hfYWRkKGhhc2hfdGFiLT5oYXNoX3RhYmxlLCAmbi0+aGwsIGhhc2hfdGFiLT5oYXNoKGtleSkp OwotCW1lbWNweShuLT5kYXRhLCB2YWx1ZSwgaGFzaF90YWItPnZhbF9zaXplKTsKLQotCXJldHVy biBuLT5kYXRhOwotfQotCi0jaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQotLyoq Ci0gKiBnaF9pdGVyYXRlKCkgLSBUaGlzIGZ1bmN0aW9uIGdvZXMgdGhyb3VnaCBhbGwgdGhlIGVs ZW1lbnRzIGluIHRoZSBoYXNoIHRhYmxlCi0gKgkJbG9va2luZyBmb3IgdGhlIGRzcCBzeW1ib2xz LgotICogQGhhc2hfdGFiOglIYXNoIHRhYmxlCi0gKiBAY2FsbGJhY2s6CXBvaW50ZXIgdG8gY2Fs bGJhY2sgZnVuY3Rpb24KLSAqIEB1c2VyX2RhdGE6CVVzZXIgZGF0YSwgY29udGFpbnMgdGhlIGZp bmRfc3ltYm9sX2NvbnRleHQgcG9pbnRlcgotICoKLSAqLwotdm9pZCBnaF9pdGVyYXRlKHN0cnVj dCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwKLQkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICosIHZv aWQgKiksIHZvaWQgKnVzZXJfZGF0YSkKLXsKLQlzdHJ1Y3QgZ2hfbm9kZSAqbjsKLQl1MzIgaTsK LQotCWlmICghaGFzaF90YWIpCi0JCXJldHVybjsKLQotCWhhc2hfZm9yX2VhY2goaGFzaF90YWIt Pmhhc2hfdGFibGUsIGksIG4sIGhsKQotCQljYWxsYmFjaygmbi0+ZGF0YSwgdXNlcl9kYXRhKTsK LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L0Vh c2lHbG9iYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9FYXNpR2xvYmFsLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0OGQ3ZjYuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L0Vhc2lHbG9iYWwuaAorKysgL2Rldi9udWxsCkBA IC0xLDQxICswLDAgQEAKLS8qCi0gKiBFYXNpR2xvYmFsLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlk Z2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgot ICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhp cyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFO RCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD SEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0K LSNpZm5kZWYgX0VBU0lHTE9CQUxfSAotI2RlZmluZSBfRUFTSUdMT0JBTF9ICi0jaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KLQotLyoKLSAqIERFRklORTogICAgICAgIFJFQURfT05MWSwgV1JJVEVf T05MWSAmICBSRUFEX1dSSVRFCi0gKgotICogREVTQ1JJUFRJT046IERlZmluZXMgdXNlZCB0byBk ZXNjcmliZSByZWdpc3RlciB0eXBlcyBmb3IgRUFTSS1jaGVja2VyIHRlc3RzLgotICovCi0KLSNk ZWZpbmUgUkVBRF9PTkxZICAgIDEKLSNkZWZpbmUgV1JJVEVfT05MWSAgIDIKLSNkZWZpbmUgUkVB RF9XUklURSAgIDMKLQotLyoKLSAqIE1BQ1JPOiAgICAgICAgX0RFQlVHX0xFVkVMMV9FQVNJCi0g KgotICogREVTQ1JJUFRJT046ICBBIE1BQ1JPIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGluZGljYXRl IHRoYXQgYSBwYXJ0aWN1bGFyIGJlYWNoCi0gKiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGFjY2Vz cyBmdW5jdGlvbiB3YXMgY2FsbGVkLgotICoKLSAqIE5PVEU6ICAgICAgICAgV2UgY3VycmVudGx5 IGRvbnQgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KLSAqLwotI2RlZmluZSBfREVCVUdfTEVWRUwx X0VBU0koZWFzaV9udW0pICAgICAoKHZvaWQpMCkKLQotI2VuZGlmIC8qIF9FQVNJR0xPQkFMX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQu aCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMWNlZmNhMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaHcvTU1VQWNjSW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCww IEBACi0vKgotICogTU1VQWNjSW50LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1 cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0 IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFO WSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBM SU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgX01N VV9BQ0NfSU5UX0gKLSNkZWZpbmUgX01NVV9BQ0NfSU5UX0gKLQotLyogTWFwcGluZ3Mgb2YgbGV2 ZWwgMSBFQVNJIGZ1bmN0aW9uIG51bWJlcnMgdG8gZnVuY3Rpb24gbmFtZXMgKi8KLQotI2RlZmlu ZSBFQVNJTDFfTU1VTU1VX1NZU0NPTkZJR19SRUFEX1JFR0lTVEVSMzIgKE1NVV9CQVNFX0VBU0lM MSArIDMpCi0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfU1lTQ09ORklHX0lETEVfTU9ERV9XUklURTMy ICAoTU1VX0JBU0VfRUFTSUwxICsgMTcpCi0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfU1lTQ09ORklH X0FVVE9fSURMRV9XUklURTMyICAgIChNTVVfQkFTRV9FQVNJTDEgKyAzOSkKLSNkZWZpbmUgRUFT SUwxX01NVU1NVV9JUlFTVEFUVVNfV1JJVEVfUkVHSVNURVIzMiAgIChNTVVfQkFTRV9FQVNJTDEg KyA1MSkKLSNkZWZpbmUgRUFTSUwxX01NVU1NVV9JUlFFTkFCTEVfUkVBRF9SRUdJU1RFUjMyIChN TVVfQkFTRV9FQVNJTDEgKyAxMDIpCi0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfSVJRRU5BQkxFX1dS SVRFX1JFR0lTVEVSMzIgKE1NVV9CQVNFX0VBU0lMMSArIDEwMykKLSNkZWZpbmUgRUFTSUwxX01N VU1NVV9XQUxLSU5HX1NUVFdMX1JVTk5JTkdfUkVBRDMyIChNTVVfQkFTRV9FQVNJTDEgKyAxNTYp Ci0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfQ05UTFRXTF9FTkFCTEVfUkVBRDMyIChNTVVfQkFTRV9F QVNJTDEgKyAxNzQpCi0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfQ05UTFRXTF9FTkFCTEVfV1JJVEUz MiAgIChNTVVfQkFTRV9FQVNJTDEgKyAxODApCi0jZGVmaW5lIEVBU0lMMV9NTVVNTVVfQ05UTE1N VV9FTkFCTEVfV1JJVEUzMiAgICAgKE1NVV9CQVNFX0VBU0lMMSArIDE5MCkKLSNkZWZpbmUgRUFT SUwxX01NVU1NVV9GQVVMVF9BRF9SRUFEX1JFR0lTVEVSMzIgICAoTU1VX0JBU0VfRUFTSUwxICsg MTk0KQotI2RlZmluZSBFQVNJTDFfTU1VTU1VX1RUQl9XUklURV9SRUdJU1RFUjMyICAoTU1VX0JB U0VfRUFTSUwxICsgMTk4KQotI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfUkVBRF9SRUdJU1RF UjMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDIwMykKLSNkZWZpbmUgRUFTSUwxX01NVU1NVV9MT0NL X1dSSVRFX1JFR0lTVEVSMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAyMDQpCi0jZGVmaW5lIEVBU0lM MV9NTVVNTVVfTE9DS19CQVNFX1ZBTFVFX1JFQUQzMiAgKE1NVV9CQVNFX0VBU0lMMSArIDIwNSkK LSNkZWZpbmUgRUFTSUwxX01NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1JFQUQzMiAoTU1VX0JB U0VfRUFTSUwxICsgMjA5KQotI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfQ1VSUkVOVF9WSUNU SU1fV1JJVEUzMiAoTU1VX0JBU0VfRUFTSUwxICsgMjExKQotI2RlZmluZSBFQVNJTDFfTU1VTU1V X0xPQ0tfQ1VSUkVOVF9WSUNUSU1fU0VUMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAyMTIpCi0jZGVm aW5lIEVBU0lMMV9NTVVNTVVfTERfVExCX1JFQURfUkVHSVNURVIzMiAgICAoTU1VX0JBU0VfRUFT SUwxICsgMjEzKQotI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xEX1RMQl9XUklURV9SRUdJU1RFUjMy ICAgKE1NVV9CQVNFX0VBU0lMMSArIDIxNCkKLSNkZWZpbmUgRUFTSUwxX01NVU1NVV9DQU1fV1JJ VEVfUkVHSVNURVIzMiAgIChNTVVfQkFTRV9FQVNJTDEgKyAyMjYpCi0jZGVmaW5lIEVBU0lMMV9N TVVNTVVfUkFNX1dSSVRFX1JFR0lTVEVSMzIgKE1NVV9CQVNFX0VBU0lMMSArIDI2OCkKLSNkZWZp bmUgRUFTSUwxX01NVU1NVV9GTFVTSF9FTlRSWV9XUklURV9SRUdJU1RFUjMyICAoTU1VX0JBU0Vf RUFTSUwxICsgMzIyKQotCi0vKiBSZWdpc3RlciBvZmZzZXQgYWRkcmVzcyBkZWZpbml0aW9ucyAq LwotI2RlZmluZSBNTVVfTU1VX1NZU0NPTkZJR19PRkZTRVQgICAweDEwCi0jZGVmaW5lIE1NVV9N TVVfSVJRU1RBVFVTX09GRlNFVCAgMHgxOAotI2RlZmluZSBNTVVfTU1VX0lSUUVOQUJMRV9PRkZT RVQgICAgMHgxYwotI2RlZmluZSBNTVVfTU1VX1dBTEtJTkdfU1RfT0ZGU0VUIDB4NDAKLSNkZWZp bmUgTU1VX01NVV9DTlRMX09GRlNFVCAgIDB4NDQKLSNkZWZpbmUgTU1VX01NVV9GQVVMVF9BRF9P RkZTRVQgIDB4NDgKLSNkZWZpbmUgTU1VX01NVV9UVEJfT0ZGU0VUICAweDRjCi0jZGVmaW5lIE1N VV9NTVVfTE9DS19PRkZTRVQgICAweDUwCi0jZGVmaW5lIE1NVV9NTVVfTERfVExCX09GRlNFVCAg MHg1NAotI2RlZmluZSBNTVVfTU1VX0NBTV9PRkZTRVQgICAweDU4Ci0jZGVmaW5lIE1NVV9NTVVf UkFNX09GRlNFVCAgIDB4NWMKLSNkZWZpbmUgTU1VX01NVV9HRkxVU0hfT0ZGU0VUICAweDYwCi0j ZGVmaW5lIE1NVV9NTVVfRkxVU0hfRU5UUllfT0ZGU0VUICAweDY0Ci0vKiBCaXRmaWVsZCBtYXNr IGFuZCBvZmZzZXQgZGVjbGFyYXRpb25zICovCi0jZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX0lE TEVfTU9ERV9NQVNLICAweDE4Ci0jZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX0lETEVfTU9ERV9P RkZTRVQgIDMKLSNkZWZpbmUgTU1VX01NVV9TWVNDT05GSUdfQVVUT19JRExFX01BU0sgIDB4MQot I2RlZmluZSBNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfT0ZGU0VUICAgMAotI2RlZmluZSBN TVVfTU1VX1dBTEtJTkdfU1RfVFdMX1JVTk5JTkdfTUFTSyAweDEKLSNkZWZpbmUgTU1VX01NVV9X QUxLSU5HX1NUX1RXTF9SVU5OSU5HX09GRlNFVCAgMAotI2RlZmluZSBNTVVfTU1VX0NOVExfVFdM X0VOQUJMRV9NQVNLIDB4NAotI2RlZmluZSBNTVVfTU1VX0NOVExfVFdMX0VOQUJMRV9PRkZTRVQg MgotI2RlZmluZSBNTVVfTU1VX0NOVExfTU1VX0VOQUJMRV9NQVNLICAgIDB4MgotI2RlZmluZSBN TVVfTU1VX0NOVExfTU1VX0VOQUJMRV9PRkZTRVQgICAxCi0jZGVmaW5lIE1NVV9NTVVfTE9DS19C QVNFX1ZBTFVFX01BU0sgMHhmYzAwCi0jZGVmaW5lIE1NVV9NTVVfTE9DS19CQVNFX1ZBTFVFX09G RlNFVCAgIDEwCi0jZGVmaW5lIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9NQVNLICAgMHgz ZjAKLSNkZWZpbmUgTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX09GRlNFVCAgICA0Ci0KLSNl bmRpZiAvKiBfTU1VX0FDQ19JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2h3L01NVVJlZ0FjTS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3 L01NVVJlZ0FjTS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjFhMTZkLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVSZWdBY00uaAorKysg L2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogTU1VUmVnQWNNLmgKLSAqCi0gKiBE U1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nl c3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMu Ci0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQg YGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFO VElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLgotICovCi0KLSNpZm5kZWYgX01NVV9SRUdfQUNNX0gKLSNkZWZpbmUgX01NVV9SRUdfQUNN X0gKLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8RWFzaUdsb2JhbC5oPgotCi0j aW5jbHVkZSAiTU1VQWNjSW50LmgiCi0KLSNpZiBkZWZpbmVkKFVTRV9MRVZFTF8xX01BQ1JPUykK LQotI2RlZmluZSBNTVVNTVVfU1lTQ09ORklHX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3Mp XAotICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfUkVBRF9S RUdJU1RFUjMyKSxcCi0gICAgICBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNzKStNTVVfTU1VX1NZ U0NPTkZJR19PRkZTRVQpKQotCi0jZGVmaW5lIE1NVU1NVV9TWVNDT05GSUdfSURMRV9NT0RFX1dS SVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCi17XAotICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBN TVVfTU1VX1NZU0NPTkZJR19PRkZTRVQ7XAotICAgIHJlZ2lzdGVyIHUzMiBkYXRhID0gX19yYXdf cmVhZGwoKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi0gICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1 ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1NZU0NP TkZJR19JRExFX01PREVfV1JJVEUzMik7XAotICAgIGRhdGEgJj0gfihNTVVfTU1VX1NZU0NPTkZJ R19JRExFX01PREVfTUFTSyk7XAotICAgIG5ld192YWx1ZSA8PD0gTU1VX01NVV9TWVNDT05GSUdf SURMRV9NT0RFX09GRlNFVDtcCi0gICAgbmV3X3ZhbHVlICY9IE1NVV9NTVVfU1lTQ09ORklHX0lE TEVfTU9ERV9NQVNLO1wKLSAgICBuZXdfdmFsdWUgfD0gZGF0YTtcCi0gICAgX19yYXdfd3JpdGVs KG5ld192YWx1ZSwgYmFzZV9hZGRyZXNzK29mZnNldCk7XAotfQotCi0jZGVmaW5lIE1NVU1NVV9T WVNDT05GSUdfQVVUT19JRExFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCi17XAotICAg IGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX1NZU0NPTkZJR19PRkZTRVQ7XAotICAgIHJlZ2lz dGVyIHUzMiBkYXRhID0gX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi0gICAg cmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFT SShFQVNJTDFfTU1VTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfV1JJVEUzMik7XAotICAgIGRhdGEg Jj0gfihNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfTUFTSyk7XAotICAgIG5ld192YWx1ZSA8 PD0gTU1VX01NVV9TWVNDT05GSUdfQVVUT19JRExFX09GRlNFVDtcCi0gICAgbmV3X3ZhbHVlICY9 IE1NVV9NTVVfU1lTQ09ORklHX0FVVE9fSURMRV9NQVNLO1wKLSAgICBuZXdfdmFsdWUgfD0gZGF0 YTtcCi0gICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgYmFzZV9hZGRyZXNzK29mZnNldCk7XAot fQotCi0jZGVmaW5lIE1NVU1NVV9JUlFTVEFUVVNfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVz cylcCi0gICAgKF9ERUJVR19MRVZFTDFfRUFTSShlYXNpbDFfbW11bW11X2lycXN0YXR1c19yZWFk X3JlZ2lzdGVyMzIpLFwKLSAgICAgIF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK01NVV9NTVVf SVJRU1RBVFVTX09GRlNFVCkpCi0KLSNkZWZpbmUgTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJ U1RFUjMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAote1wKLSAgICBjb25zdCB1MzIgb2Zmc2V0ID0g TU1VX01NVV9JUlFTVEFUVVNfT0ZGU0VUO1wKLSAgICByZWdpc3RlciB1MzIgbmV3X3ZhbHVlID0g KHZhbHVlKTtcCi0gICAgX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfSVJRU1RBVFVT X1dSSVRFX1JFR0lTVEVSMzIpO1wKLSAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9h ZGRyZXNzKStvZmZzZXQpO1wKLX0KLQotI2RlZmluZSBNTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVH SVNURVIzMihiYXNlX2FkZHJlc3MpXAotICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01N VU1NVV9JUlFFTkFCTEVfUkVBRF9SRUdJU1RFUjMyKSxcCi0gICAgICBfX3Jhd19yZWFkbCgoYmFz ZV9hZGRyZXNzKStNTVVfTU1VX0lSUUVOQUJMRV9PRkZTRVQpKQotCi0jZGVmaW5lIE1NVU1NVV9J UlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKLXtcCi0gICAg Y29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfSVJRRU5BQkxFX09GRlNFVDtcCi0gICAgcmVnaXN0 ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJ TDFfTU1VTU1VX0lSUUVOQUJMRV9XUklURV9SRUdJU1RFUjMyKTtcCi0gICAgX19yYXdfd3JpdGVs KG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi19Ci0KLSNkZWZpbmUgTU1VTU1V X1dBTEtJTkdfU1RUV0xfUlVOTklOR19SRUFEMzIoYmFzZV9hZGRyZXNzKVwKLSAgICAoX0RFQlVH X0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfV0FMS0lOR19TVFRXTF9SVU5OSU5HX1JFQUQzMiks XAotICAgICAgKCgoX19yYXdfcmVhZGwoKChiYXNlX2FkZHJlc3MpKyhNTVVfTU1VX1dBTEtJTkdf U1RfT0ZGU0VUKSkpKVwKLSAgICAgICYgTU1VX01NVV9XQUxLSU5HX1NUX1RXTF9SVU5OSU5HX01B U0spID4+XAotICAgICAgTU1VX01NVV9XQUxLSU5HX1NUX1RXTF9SVU5OSU5HX09GRlNFVCkpCi0K LSNkZWZpbmUgTU1VTU1VX0NOVExUV0xfRU5BQkxFX1JFQUQzMihiYXNlX2FkZHJlc3MpXAotICAg IChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9SRUFEMzIp LFwKLSAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSsoTU1VX01NVV9DTlRMX09G RlNFVCkpKSkgJlwKLSAgICAgIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0spID4+XAotICAg ICAgTU1VX01NVV9DTlRMX1RXTF9FTkFCTEVfT0ZGU0VUKSkKLQotI2RlZmluZSBNTVVNTVVfQ05U TFRXTF9FTkFCTEVfV1JJVEUzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKLXtcCi0gICAgY29uc3Qg dTMyIG9mZnNldCA9IE1NVV9NTVVfQ05UTF9PRkZTRVQ7XAotICAgIHJlZ2lzdGVyIHUzMiBkYXRh ID0gX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi0gICAgcmVnaXN0ZXIgdTMy IG5ld192YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1V TU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIpO1wKLSAgICBkYXRhICY9IH4oTU1VX01NVV9DTlRM X1RXTF9FTkFCTEVfTUFTSyk7XAotICAgIG5ld192YWx1ZSA8PD0gTU1VX01NVV9DTlRMX1RXTF9F TkFCTEVfT0ZGU0VUO1wKLSAgICBuZXdfdmFsdWUgJj0gTU1VX01NVV9DTlRMX1RXTF9FTkFCTEVf TUFTSztcCi0gICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAotICAgIF9fcmF3X3dyaXRlbChuZXdfdmFs dWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKLX0KLQotI2RlZmluZSBNTVVNTVVfQ05UTE1NVV9F TkFCTEVfV1JJVEUzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKLXtcCi0gICAgY29uc3QgdTMyIG9m ZnNldCA9IE1NVV9NTVVfQ05UTF9PRkZTRVQ7XAotICAgIHJlZ2lzdGVyIHUzMiBkYXRhID0gX19y YXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi0gICAgcmVnaXN0ZXIgdTMyIG5ld192 YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0NO VExNTVVfRU5BQkxFX1dSSVRFMzIpO1wKLSAgICBkYXRhICY9IH4oTU1VX01NVV9DTlRMX01NVV9F TkFCTEVfTUFTSyk7XAotICAgIG5ld192YWx1ZSA8PD0gTU1VX01NVV9DTlRMX01NVV9FTkFCTEVf T0ZGU0VUO1wKLSAgICBuZXdfdmFsdWUgJj0gTU1VX01NVV9DTlRMX01NVV9FTkFCTEVfTUFTSztc Ci0gICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAotICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJh c2VfYWRkcmVzcytvZmZzZXQpO1wKLX0KLQotI2RlZmluZSBNTVVNTVVfRkFVTFRfQURfUkVBRF9S RUdJU1RFUjMyKGJhc2VfYWRkcmVzcylcCi0gICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFf TU1VTU1VX0ZBVUxUX0FEX1JFQURfUkVHSVNURVIzMiksXAotICAgICAgX19yYXdfcmVhZGwoKGJh c2VfYWRkcmVzcykrTU1VX01NVV9GQVVMVF9BRF9PRkZTRVQpKQotCi0jZGVmaW5lIE1NVU1NVV9U VEJfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKLXtcCi0gICAgY29uc3Qg dTMyIG9mZnNldCA9IE1NVV9NTVVfVFRCX09GRlNFVDtcCi0gICAgcmVnaXN0ZXIgdTMyIG5ld192 YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1RU Ql9XUklURV9SRUdJU1RFUjMyKTtcCi0gICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgKGJhc2Vf YWRkcmVzcykrb2Zmc2V0KTtcCi19Ci0KLSNkZWZpbmUgTU1VTU1VX0xPQ0tfUkVBRF9SRUdJU1RF UjMyKGJhc2VfYWRkcmVzcylcCi0gICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1V X0xPQ0tfUkVBRF9SRUdJU1RFUjMyKSxcCi0gICAgICBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNz KStNTVVfTU1VX0xPQ0tfT0ZGU0VUKSkKLQotI2RlZmluZSBNTVVNTVVfTE9DS19XUklURV9SRUdJ U1RFUjMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAote1wKLSAgICBjb25zdCB1MzIgb2Zmc2V0ID0g TU1VX01NVV9MT0NLX09GRlNFVDtcCi0gICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1 ZSk7XAotICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0xPQ0tfV1JJVEVfUkVH SVNURVIzMik7XAotICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29m ZnNldCk7XAotfQotCi0jZGVmaW5lIE1NVU1NVV9MT0NLX0JBU0VfVkFMVUVfUkVBRDMyKGJhc2Vf YWRkcmVzcylcCi0gICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0xPQ0tfQkFT RV9WQUxVRV9SRUFEMzIpLFwKLSAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSso TU1VX01NVV9MT0NLX09GRlNFVCkpKSkgJlwKLSAgICAgIE1NVV9NTVVfTE9DS19CQVNFX1ZBTFVF X01BU0spID4+XAotICAgICAgTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfT0ZGU0VUKSkKLQotI2Rl ZmluZSBNTVVNTVVfTE9DS19CQVNFX1ZBTFVFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlc Ci17XAotICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0xPQ0tfT0ZGU0VUO1wKLSAgICBy ZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAot ICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKLSAgICBfREVCVUdfTEVWRUwx X0VBU0koZWFzaWwxX21tdW1tdV9sb2NrX2Jhc2VfdmFsdWVfd3JpdGUzMik7XAotICAgIGRhdGEg Jj0gfihNTVVfTU1VX0xPQ0tfQkFTRV9WQUxVRV9NQVNLKTtcCi0gICAgbmV3X3ZhbHVlIDw8PSBN TVVfTU1VX0xPQ0tfQkFTRV9WQUxVRV9PRkZTRVQ7XAotICAgIG5ld192YWx1ZSAmPSBNTVVfTU1V X0xPQ0tfQkFTRV9WQUxVRV9NQVNLO1wKLSAgICBuZXdfdmFsdWUgfD0gZGF0YTtcCi0gICAgX19y YXdfd3JpdGVsKG5ld192YWx1ZSwgYmFzZV9hZGRyZXNzK29mZnNldCk7XAotfQotCi0jZGVmaW5l IE1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1JFQUQzMihiYXNlX2FkZHJlc3MpXAotICAgIChf REVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1JFQUQz MiksXAotICAgICAgKCgoX19yYXdfcmVhZGwoKChiYXNlX2FkZHJlc3MpKyhNTVVfTU1VX0xPQ0tf T0ZGU0VUKSkpKSAmXAotICAgICAgTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0spID4+ XAotICAgICAgTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX09GRlNFVCkpCi0KLSNkZWZpbmUg TU1VTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fV1JJVEUzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwK LXtcCi0gICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfTE9DS19PRkZTRVQ7XAotICAgIHJl Z2lzdGVyIHUzMiBkYXRhID0gX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi0g ICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZFTDFf RUFTSShFQVNJTDFfTU1VTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fV1JJVEUzMik7XAotICAgIGRh dGEgJj0gfihNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fTUFTSyk7XAotICAgIG5ld192YWx1 ZSA8PD0gTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX09GRlNFVDtcCi0gICAgbmV3X3ZhbHVl ICY9IE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9NQVNLO1wKLSAgICBuZXdfdmFsdWUgfD0g ZGF0YTtcCi0gICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgYmFzZV9hZGRyZXNzK29mZnNldCk7 XAotfQotCi0jZGVmaW5lIE1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1NFVDMyKHZhciwgdmFs dWUpXAotICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0NVUlJFTlRf VklDVElNX1NFVDMyKSxcCi0gICAgICAoKCh2YXIpICYgfihNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9W SUNUSU1fTUFTSykpIHxcCi0gICAgICAoKCh2YWx1ZSkgPDwgTU1VX01NVV9MT0NLX0NVUlJFTlRf VklDVElNX09GRlNFVCkgJlwKLSAgICAgIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9NQVNL KSkpCi0KLSNkZWZpbmUgTU1VTU1VX0xEX1RMQl9SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNz KVwKLSAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTERfVExCX1JFQURfUkVH SVNURVIzMiksXAotICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9MRF9U TEJfT0ZGU0VUKSkKLQotI2RlZmluZSBNTVVNTVVfTERfVExCX1dSSVRFX1JFR0lTVEVSMzIoYmFz ZV9hZGRyZXNzLCB2YWx1ZSlcCi17XAotICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0xE X1RMQl9PRkZTRVQ7XAotICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKLSAg ICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MRF9UTEJfV1JJVEVfUkVHSVNURVIz Mik7XAotICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7 XAotfQotCi0jZGVmaW5lIE1NVU1NVV9DQU1fV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3Ms IHZhbHVlKVwKLXtcCi0gICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfQ0FNX09GRlNFVDtc Ci0gICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAotICAgIF9ERUJVR19MRVZF TDFfRUFTSShFQVNJTDFfTU1VTU1VX0NBTV9XUklURV9SRUdJU1RFUjMyKTtcCi0gICAgX19yYXdf d3JpdGVsKG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCi19Ci0KLSNkZWZpbmUg TU1VTU1VX1JBTV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAote1wKLSAg ICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9SQU1fT0ZGU0VUO1wKLSAgICByZWdpc3RlciB1 MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCi0gICAgX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9N TVVNTVVfUkFNX1dSSVRFX1JFR0lTVEVSMzIpO1wKLSAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVl LCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKLX0KLQotI2RlZmluZSBNTVVNTVVfRkxVU0hfRU5U UllfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKLXtcCi0gICAgY29uc3Qg dTMyIG9mZnNldCA9IE1NVV9NTVVfRkxVU0hfRU5UUllfT0ZGU0VUO1wKLSAgICByZWdpc3RlciB1 MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCi0gICAgX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9N TVVNTVVfRkxVU0hfRU5UUllfV1JJVEVfUkVHSVNURVIzMik7XAotICAgIF9fcmF3X3dyaXRlbChu ZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAotfQotCi0jZW5kaWYgLyogVVNFX0xF VkVMXzFfTUFDUk9TICovCi0KLSNlbmRpZiAvKiBfTU1VX1JFR19BQ01fSCAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X2RlZnMuaCBiL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9ody9od19kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGQ1MjY2ZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3 L2h3X2RlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBod19kZWZz LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBU SSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIEhXIGRlZmluaXRpb25zCi0gKgotICog Q29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBw YWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBX SVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg V0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO VElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNp Zm5kZWYgX0hXX0RFRlNfSAotI2RlZmluZSBfSFdfREVGU19ICi0KLS8qIFBhZ2Ugc2l6ZSAqLwot I2RlZmluZSBIV19QQUdFX1NJWkU0S0IgICAweDEwMDAKLSNkZWZpbmUgSFdfUEFHRV9TSVpFNjRL QiAgMHgxMDAwMAotI2RlZmluZSBIV19QQUdFX1NJWkUxTUIgICAweDEwMDAwMAotI2RlZmluZSBI V19QQUdFX1NJWkUxNk1CICAweDEwMDAwMDAKLQotLyogaHdfc3RhdHVzOiAgcmV0dXJuIHR5cGUg Zm9yIEhXIEFQSSAqLwotdHlwZWRlZiBsb25nIGh3X3N0YXR1czsKLQotLyogIE1hY3JvIHVzZWQg dG8gc2V0IGFuZCBjbGVhciBhbnkgYml0ICovCi0jZGVmaW5lIEhXX0NMRUFSCTAKLSNkZWZpbmUg SFdfU0VUCQkxCi0KLS8qIGh3X2VuZGlhbmlzbV90OiAgRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8g c3BlY2lmeSB0aGUgZW5kaWFuaXNtCi0gKgkJRG8gTk9UIGNoYW5nZSB0aGVzZSB2YWx1ZXMuIFRo ZXkgYXJlIHVzZWQgYXMgYml0IGZpZWxkcy4gKi8KLWVudW0gaHdfZW5kaWFuaXNtX3QgewotCUhX X0xJVFRMRV9FTkRJQU4sCi0JSFdfQklHX0VORElBTgotfTsKLQotLyogaHdfZWxlbWVudF9zaXpl X3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IHNpemUKLSAq CQlEbyBOT1QgY2hhbmdlIHRoZXNlIHZhbHVlcy4gVGhleSBhcmUgdXNlZCBhcyBiaXQgZmllbGRz LiAqLwotZW51bSBod19lbGVtZW50X3NpemVfdCB7Ci0JSFdfRUxFTV9TSVpFOEJJVCwKLQlIV19F TEVNX1NJWkUxNkJJVCwKLQlIV19FTEVNX1NJWkUzMkJJVCwKLQlIV19FTEVNX1NJWkU2NEJJVAot fTsKLQotLyogaHdfaWRsZV9tb2RlX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5 IElkbGUgbW9kZXMgKi8KLWVudW0gaHdfaWRsZV9tb2RlX3QgewotCUhXX0ZPUkNFX0lETEUsCi0J SFdfTk9fSURMRSwKLQlIV19TTUFSVF9JRExFCi19OwotCi0jZW5kaWYgLyogX0hXX0RFRlNfSCAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jIGIv ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA1MDI0NGE0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9ody9od19tbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4NyArMCwwIEBACi0vKgot ICogaHdfbW11LmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rp b25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQVBJIGRlZmluaXRpb25zIHRvIHNl dHVwIE1NVSBUTEIgYW5kIFBURQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0 cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdF IElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJ RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRl ICJNTVVSZWdBY00uaCIKLSNpbmNsdWRlIDxod19kZWZzLmg+Ci0jaW5jbHVkZSA8aHdfbW11Lmg+ Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLQotI2Rl ZmluZSBNTVVfQkFTRV9WQUxfTUFTSwkweEZDMDAKLSNkZWZpbmUgTU1VX1BBR0VfTUFYCSAgICAg MwotI2RlZmluZSBNTVVfRUxFTUVOVFNJWkVfTUFYICAgICAgMwotI2RlZmluZSBNTVVfQUREUl9N QVNLCSAgICAweEZGRkZGMDAwCi0jZGVmaW5lIE1NVV9UVEJfTUFTSwkgICAgIDB4RkZGRkMwMDAK LSNkZWZpbmUgTU1VX1NFQ1RJT05fQUREUl9NQVNLICAgIDB4RkZGMDAwMDAKLSNkZWZpbmUgTU1V X1NTRUNUSU9OX0FERFJfTUFTSyAgIDB4RkYwMDAwMDAKLSNkZWZpbmUgTU1VX1BBR0VfVEFCTEVf TUFTSyAgICAgIDB4RkZGRkZDMDAKLSNkZWZpbmUgTU1VX0xBUkdFX1BBR0VfTUFTSyAgICAgIDB4 RkZGRjAwMDAKLSNkZWZpbmUgTU1VX1NNQUxMX1BBR0VfTUFTSyAgICAgIDB4RkZGRkYwMDAKLQot I2RlZmluZSBNTVVfTE9BRF9UTEIJMHgwMDAwMDAwMQotI2RlZmluZSBNTVVfR0ZMVVNICTB4NjAK LQotLyoKLSAqIGh3X21tdV9wYWdlX3NpemVfdDogRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8gc3Bl Y2lmeSB0aGUgTU1VIFBhZ2UgU2l6ZShTTFNTKQotICovCi1lbnVtIGh3X21tdV9wYWdlX3NpemVf dCB7Ci0JSFdfTU1VX1NFQ1RJT04sCi0JSFdfTU1VX0xBUkdFX1BBR0UsCi0JSFdfTU1VX1NNQUxM X1BBR0UsCi0JSFdfTU1VX1NVUEVSU0VDVElPTgotfTsKLQotLyoKLSAqIEZVTkNUSU9OCSAgICAg IDogbW11X3NldF9jYW1fZW50cnkKLSAqCi0gKiBJTlBVVFM6Ci0gKgotICogICAgICAgSWRlbnRp ZmllciAgICAgIDogYmFzZV9hZGRyZXNzCi0gKiAgICAgICBUeXBlCQkgOiB2b2lkIF9faW9tZW0g KgotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogQmFzZSBBZGRyZXNzIG9mIGluc3RhbmNlIG9m IE1NVSBtb2R1bGUKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBwYWdlX3N6Ci0gKiAg ICAgICBUeXBFCQk6IGNvbnN0IHUzMgotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogSXQgaW5k aWNhdGVzIHRoZSBwYWdlIHNpemUKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBwcmVz ZXJ2ZWRfYml0Ci0gKiAgICAgICBUeXBlCQk6IGNvbnN0IHUzMgotICogICAgICAgRGVzY3JpcHRp b24gICAgIDogSXQgaW5kaWNhdGVzIHRoZSBUTEIgZW50cnkgaXMgcHJlc2VydmVkIGVudHJ5Ci0g KgkJCQkJCQlvciBub3QKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiB2YWxpZF9iaXQK LSAqICAgICAgIFR5cGUJCTogY29uc3QgdTMyCi0gKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBJ dCBpbmRpY2F0ZXMgdGhlIFRMQiBlbnRyeSBpcyB2YWxpZCBlbnRyeSBvciBub3QKLSAqCi0gKgot ICogICAgICAgSWRlbnRpZmllciAgICAgIDogdmlydHVhbF9hZGRyX3RhZwotICogICAgICAgVHlw ZQkgICAgCTogY29uc3QgdTMyCi0gKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiB2aXJ0dWFsIEFk ZHJlc3MKLSAqCi0gKiBSRVRVUk5TOgotICoKLSAqICAgICAgIFR5cGUJICAgIAk6IGh3X3N0YXR1 cwotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cnJlZAot ICoJCQkgUkVUX0JBRF9OVUxMX1BBUkFNICAgICAtLSBBIFBvaW50ZXIgUGFyYW1ldGVyCi0gKgkJ CQkJCSAgIHdhcyBzZXQgdG8gTlVMTAotICoJCQkgUkVUX1BBUkFNX09VVF9PRl9SQU5HRSAtLSBJ bnB1dCBQYXJhbWV0ZXIgb3V0Ci0gKgkJCQkJCSAgIG9mIFJhbmdlCi0gKgotICogUFVSUE9TRToJ ICAgICAgCTogU2V0IE1NVV9DQU0gcmVnCi0gKgotICogTUVUSE9EOgkgICAgICAgCTogQ2hlY2sg dGhlIElucHV0IHBhcmFtZXRlcnMgYW5kIHNldCB0aGUgQ0FNIGVudHJ5LgotICovCi1zdGF0aWMg aHdfc3RhdHVzIG1tdV9zZXRfY2FtX2VudHJ5KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAot CQkJCSAgIGNvbnN0IHUzMiBwYWdlX3N6LAotCQkJCSAgIGNvbnN0IHUzMiBwcmVzZXJ2ZWRfYml0 LAotCQkJCSAgIGNvbnN0IHUzMiB2YWxpZF9iaXQsCi0JCQkJICAgY29uc3QgdTMyIHZpcnR1YWxf YWRkcl90YWcpOwotCi0vKgotICogRlVOQ1RJT04JICAgICAgOiBtbXVfc2V0X3JhbV9lbnRyeQot ICoKLSAqIElOUFVUUzoKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBiYXNlX2FkZHJl c3MKLSAqICAgICAgIFR5cGUJCSA6IHZvaWQgX19pb21lbSAqCi0gKiAgICAgICBEZXNjcmlwdGlv biAgICAgOiBCYXNlIEFkZHJlc3Mgb2YgaW5zdGFuY2Ugb2YgTU1VIG1vZHVsZQotICoKLSAqICAg ICAgIElkZW50aWZpZXIgICAgICA6IHBoeXNpY2FsX2FkZHIKLSAqICAgICAgIFR5cGUJICAgIAk6 IGNvbnN0IHUzMgotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogUGh5c2ljYWwgQWRkcmVzcyB0 byB3aGljaCB0aGUgY29ycmVzcG9uZGluZwotICoJCQkgdmlydHVhbCAgIEFkZHJlc3Mgc2hvdWxk cG9pbnQKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBlbmRpYW5pc20KLSAqICAgICAg IFR5cGUJICAgIAk6IGh3X2VuZGlhbmlzbV90Ci0gKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBl bmRpYW5pc20gZm9yIHRoZSBnaXZlbiBwYWdlCi0gKgotICogICAgICAgSWRlbnRpZmllciAgICAg IDogZWxlbWVudF9zaXplCi0gKiAgICAgICBUeXBlCSAgICAJOiBod19lbGVtZW50X3NpemVfdAot ICogICAgICAgRGVzY3JpcHRpb24gICAgIDogVGhlIGVsZW1lbnQgc2l6ZSAoIDgsMTYsIDMyIG9y IDY0IGJpdCkKLSAqCi0gKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBtaXhlZF9zaXplCi0gKiAg ICAgICBUeXBlCSAgICAJOiBod19tbXVfbWl4ZWRfc2l6ZV90Ci0gKiAgICAgICBEZXNjcmlwdGlv biAgICAgOiBFbGVtZW50IFNpemUgdG8gZm9sbG93IENQVSBvciBUTEIKLSAqCi0gKiBSRVRVUk5T OgotICoKLSAqICAgICAgIFR5cGUJICAgIAk6IGh3X3N0YXR1cwotICogICAgICAgRGVzY3JpcHRp b24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cnJlZAotICoJCQkgUkVUX0JBRF9OVUxMX1BB UkFNICAgICAtLSBBIFBvaW50ZXIgUGFyYW1ldGVyCi0gKgkJCQkJCQl3YXMgc2V0IHRvIE5VTEwK LSAqCQkJIFJFVF9QQVJBTV9PVVRfT0ZfUkFOR0UgLS0gSW5wdXQgUGFyYW1ldGVyCi0gKgkJCQkJ CQlvdXQgb2YgUmFuZ2UKLSAqCi0gKiBQVVJQT1NFOgkgICAgICA6IFNldCBNTVVfQ0FNIHJlZwot ICoKLSAqIE1FVEhPRDoJICAgICAgIDogQ2hlY2sgdGhlIElucHV0IHBhcmFtZXRlcnMgYW5kIHNl dCB0aGUgUkFNIGVudHJ5LgotICovCi1zdGF0aWMgaHdfc3RhdHVzIG1tdV9zZXRfcmFtX2VudHJ5 KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAotCQkJCSAgIGNvbnN0IHUzMiBwaHlzaWNhbF9h ZGRyLAotCQkJCSAgIGVudW0gaHdfZW5kaWFuaXNtX3QgZW5kaWFuaXNtLAotCQkJCSAgIGVudW0g aHdfZWxlbWVudF9zaXplX3QgZWxlbWVudF9zaXplLAotCQkJCSAgIGVudW0gaHdfbW11X21peGVk X3NpemVfdCBtaXhlZF9zaXplKTsKLQotLyogSFcgRlVOQ1RJT05TICovCi0KLWh3X3N0YXR1cyBo d19tbXVfZW5hYmxlKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQotewotCWh3X3N0YXR1cyBz dGF0dXMgPSAwOwotCi0JTU1VTU1VX0NOVExNTVVfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNz LCBIV19TRVQpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaHdfc3RhdHVzIGh3X21tdV9kaXNh YmxlKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQotewotCWh3X3N0YXR1cyBzdGF0dXMgPSAw OwotCi0JTU1VTU1VX0NOVExNTVVfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBIV19DTEVB Uik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1od19zdGF0dXMgaHdfbW11X251bV9sb2NrZWRf c2V0KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAotCQkJCXUzMiBudW1fbG9ja2VkX2VudHJp ZXMpCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0KLQlNTVVNTVVfTE9DS19CQVNFX1ZBTFVF X1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBudW1fbG9ja2VkX2VudHJpZXMpOwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotaHdfc3RhdHVzIGh3X21tdV92aWN0aW1fbnVtX3NldCh2b2lkIF9faW9tZW0g KmJhc2VfYWRkcmVzcywKLQkJCQl1MzIgdmljdGltX2VudHJ5X251bSkKLXsKLQlod19zdGF0dXMg c3RhdHVzID0gMDsKLQotCU1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9h ZGRyZXNzLCB2aWN0aW1fZW50cnlfbnVtKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWh3X3N0 YXR1cyBod19tbXVfZXZlbnRfYWNrKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgaXJx X21hc2spCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0KLQlNTVVNTVVfSVJRU1RBVFVTX1dS SVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCBpcnFfbWFzayk7Ci0KLQlyZXR1cm4gc3RhdHVz OwotfQotCi1od19zdGF0dXMgaHdfbW11X2V2ZW50X2Rpc2FibGUodm9pZCBfX2lvbWVtICpiYXNl X2FkZHJlc3MsIHUzMiBpcnFfbWFzaykKLXsKLQlod19zdGF0dXMgc3RhdHVzID0gMDsKLQl1MzIg aXJxX3JlZzsKLQotCWlycV9yZWcgPSBNTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVHSVNURVIzMihi YXNlX2FkZHJlc3MpOwotCi0JTU1VTU1VX0lSUUVOQUJMRV9XUklURV9SRUdJU1RFUjMyKGJhc2Vf YWRkcmVzcywgaXJxX3JlZyAmIH5pcnFfbWFzayk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1o d19zdGF0dXMgaHdfbW11X2V2ZW50X2VuYWJsZSh2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywg dTMyIGlycV9tYXNrKQotewotCWh3X3N0YXR1cyBzdGF0dXMgPSAwOwotCXUzMiBpcnFfcmVnOwot Ci0JaXJxX3JlZyA9IE1NVU1NVV9JUlFFTkFCTEVfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVz cyk7Ci0KLQlNTVVNTVVfSVJRRU5BQkxFX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCBp cnFfcmVnIHwgaXJxX21hc2spOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaHdfc3RhdHVzIGh3 X21tdV9ldmVudF9zdGF0dXModm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiAqaXJxX21h c2spCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0KLQkqaXJxX21hc2sgPSBNTVVNTVVfSVJR U1RBVFVTX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOwotCi0JcmV0dXJuIHN0YXR1czsK LX0KLQotaHdfc3RhdHVzIGh3X21tdV9mYXVsdF9hZGRyX3JlYWQodm9pZCBfX2lvbWVtICpiYXNl X2FkZHJlc3MsIHUzMiAqYWRkcikKLXsKLQlod19zdGF0dXMgc3RhdHVzID0gMDsKLQotCS8qIHJl YWQgdmFsdWVzIGZyb20gcmVnaXN0ZXIgKi8KLQkqYWRkciA9IE1NVU1NVV9GQVVMVF9BRF9SRUFE X1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLWh3X3N0 YXR1cyBod19tbXVfdHRiX3NldCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywgdTMyIHR0Yl9w aHlzX2FkZHIpCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JdTMyIGxvYWRfdHRiOwotCi0J bG9hZF90dGIgPSB0dGJfcGh5c19hZGRyICYgfjB4N0ZVTDsKLQkvKiB3cml0ZSB2YWx1ZXMgdG8g cmVnaXN0ZXIgKi8KLQlNTVVNTVVfVFRCX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCBs b2FkX3R0Yik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1od19zdGF0dXMgaHdfbW11X3R3bF9l bmFibGUodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9 IDA7Ci0KLQlNTVVNTVVfQ05UTFRXTF9FTkFCTEVfV1JJVEUzMihiYXNlX2FkZHJlc3MsIEhXX1NF VCk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1od19zdGF0dXMgaHdfbW11X3R3bF9kaXNhYmxl KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQotewotCWh3X3N0YXR1cyBzdGF0dXMgPSAwOwot Ci0JTU1VTU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBIV19DTEVBUik7 Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1od19zdGF0dXMgaHdfbW11X3RsYl9hZGQodm9pZCBf X2lvbWVtICpiYXNlX2FkZHJlc3MsCi0JCQkgdTMyIHBoeXNpY2FsX2FkZHIsCi0JCQkgdTMyIHZp cnR1YWxfYWRkciwKLQkJCSB1MzIgcGFnZV9zeiwKLQkJCSB1MzIgZW50cnlfbnVtLAotCQkJIHN0 cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKLQkJCSBzOCBwcmVzZXJ2ZWRfYml0 LCBzOCB2YWxpZF9iaXQpCi17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JdTMyIGxvY2tfcmVn OwotCXUzMiB2aXJ0dWFsX2FkZHJfdGFnOwotCWVudW0gaHdfbW11X3BhZ2Vfc2l6ZV90IG1tdV9w Z19zaXplOwotCi0JLypDaGVjayB0aGUgaW5wdXQgUGFyYW1ldGVycyAqLwotCXN3aXRjaCAocGFn ZV9zeikgewotCWNhc2UgSFdfUEFHRV9TSVpFNEtCOgotCQltbXVfcGdfc2l6ZSA9IEhXX01NVV9T TUFMTF9QQUdFOwotCQlicmVhazsKLQotCWNhc2UgSFdfUEFHRV9TSVpFNjRLQjoKLQkJbW11X3Bn X3NpemUgPSBIV19NTVVfTEFSR0VfUEFHRTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1BBR0VfU0la RTFNQjoKLQkJbW11X3BnX3NpemUgPSBIV19NTVVfU0VDVElPTjsKLQkJYnJlYWs7Ci0KLQljYXNl IEhXX1BBR0VfU0laRTE2TUI6Ci0JCW1tdV9wZ19zaXplID0gSFdfTU1VX1NVUEVSU0VDVElPTjsK LQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsb2NrX3Jl ZyA9IE1NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOwotCi0JLyogR2Vu ZXJhdGUgdGhlIDIwLWJpdCB0YWcgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl2aXJ0dWFsX2Fk ZHJfdGFnID0gKCh2aXJ0dWFsX2FkZHIgJiBNTVVfQUREUl9NQVNLKSA+PiAxMik7Ci0KLQkvKiBX cml0ZSB0aGUgZmllbGRzIGluIHRoZSBDQU0gRW50cnkgUmVnaXN0ZXIgKi8KLQltbXVfc2V0X2Nh bV9lbnRyeShiYXNlX2FkZHJlc3MsIG1tdV9wZ19zaXplLCBwcmVzZXJ2ZWRfYml0LCB2YWxpZF9i aXQsCi0JCQkgIHZpcnR1YWxfYWRkcl90YWcpOwotCi0JLyogV3JpdGUgdGhlIGRpZmZlcmVudCBm aWVsZHMgb2YgdGhlIFJBTSBFbnRyeSBSZWdpc3RlciAqLwotCS8qIGVuZGlhbmlzbSBvZiB0aGUg cGFnZSxFbGVtZW50IFNpemUgb2YgdGhlIHBhZ2UgKDgsIDE2LCAzMiwgNjQgYml0KSAqLwotCW1t dV9zZXRfcmFtX2VudHJ5KGJhc2VfYWRkcmVzcywgcGh5c2ljYWxfYWRkciwgbWFwX2F0dHJzLT5l bmRpYW5pc20sCi0JCQkgIG1hcF9hdHRycy0+ZWxlbWVudF9zaXplLCBtYXBfYXR0cnMtPm1peGVk X3NpemUpOwotCi0JLyogVXBkYXRlIHRoZSBNTVUgTG9jayBSZWdpc3RlciAqLwotCS8qIGN1cnJl bnRWaWN0aW0gYmV0d2VlbiBsb2NrZWRCYXNlVmFsdWUgYW5kIChNTVVfRW50cmllc19OdW1iZXIg LSAxKSAqLwotCU1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9hZGRyZXNz LCBlbnRyeV9udW0pOwotCi0JLyogRW5hYmxlIGxvYWRpbmcgb2YgYW4gZW50cnkgaW4gVExCIGJ5 IHdyaXRpbmcgMQotCSAgIGludG8gTERfVExCX1JFRyByZWdpc3RlciAqLwotCU1NVU1NVV9MRF9U TEJfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIE1NVV9MT0FEX1RMQik7Ci0KLQlNTVVN TVVfTE9DS19XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbG9ja19yZWcpOwotCi0JcmV0 dXJuIHN0YXR1czsKLX0KLQotaHdfc3RhdHVzIGh3X21tdV9wdGVfc2V0KGNvbnN0IHUzMiBwZ190 YmxfdmEsCi0JCQkgdTMyIHBoeXNpY2FsX2FkZHIsCi0JCQkgdTMyIHZpcnR1YWxfYWRkciwKLQkJ CSB1MzIgcGFnZV9zeiwgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKQotewot CWh3X3N0YXR1cyBzdGF0dXMgPSAwOwotCXUzMiBwdGVfYWRkciwgcHRlX3ZhbDsKLQlzMzIgbnVt X2VudHJpZXMgPSAxOwotCi0Jc3dpdGNoIChwYWdlX3N6KSB7Ci0JY2FzZSBIV19QQUdFX1NJWkU0 S0I6Ci0JCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKLQkJCQkJICAg ICAgdmlydHVhbF9hZGRyICYKLQkJCQkJICAgICAgTU1VX1NNQUxMX1BBR0VfTUFTSyk7Ci0JCXB0 ZV92YWwgPQotCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX1NNQUxMX1BBR0VfTUFTSykgfAot CQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMtPgotCQkJCQkJ ICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8Ci0JCSAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8 PCAxMSkgfCAyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1BBR0VfU0laRTY0S0I6Ci0JCW51bV9l bnRyaWVzID0gMTY7Ci0JCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwK LQkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKLQkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFT Syk7Ci0JCXB0ZV92YWwgPQotCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX0xBUkdFX1BBR0Vf TUFTSykgfAotCQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMt PgotCQkJCQkJICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8Ci0JCSAgICAgKG1hcF9hdHRycy0+bWl4 ZWRfc2l6ZSA8PCAxMSkgfCAxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEhXX1BBR0VfU0laRTFNQjoK LQkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAotCQkJCQkgICAgICB2 aXJ0dWFsX2FkZHIgJgotCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOwotCQlwdGVf dmFsID0KLQkJICAgICgoKChwaHlzaWNhbF9hZGRyICYgTU1VX1NFQ1RJT05fQUREUl9NQVNLKSB8 Ci0JCSAgICAgICAobWFwX2F0dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+Ci0J CQkJCQkgICAgICAgZWxlbWVudF9zaXplIDw8IDEwKSB8Ci0JCSAgICAgICAobWFwX2F0dHJzLT5t aXhlZF9zaXplIDw8IDE3KSkgJiB+MHg0MDAwMCkgfCAweDIpOwotCQlicmVhazsKLQotCWNhc2Ug SFdfUEFHRV9TSVpFMTZNQjoKLQkJbnVtX2VudHJpZXMgPSAxNjsKLQkJcHRlX2FkZHIgPSBod19t bXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAotCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgotCQkJ CQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKLQkJcHRlX3ZhbCA9Ci0JCSAgICAoKChw aHlzaWNhbF9hZGRyICYgTU1VX1NTRUNUSU9OX0FERFJfTUFTSykgfAotCQkgICAgICAobWFwX2F0 dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+Ci0JCQkJCQkgICAgICBlbGVtZW50 X3NpemUgPDwgMTApIHwKLQkJICAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxNykKLQkJ ICAgICApIHwgMHg0MDAwMCB8IDB4Mik7Ci0JCWJyZWFrOwotCi0JY2FzZSBIV19NTVVfQ09BUlNF X1BBR0VfU0laRToKLQkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAot CQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgotCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01B U0spOwotCQlwdGVfdmFsID0gKHBoeXNpY2FsX2FkZHIgJiBNTVVfUEFHRV9UQUJMRV9NQVNLKSB8 IDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd2hp bGUgKC0tbnVtX2VudHJpZXMgPj0gMCkKLQkJKCh1MzIgKikgcHRlX2FkZHIpW251bV9lbnRyaWVz XSA9IHB0ZV92YWw7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1od19zdGF0dXMgaHdfbW11X3B0 ZV9jbGVhcihjb25zdCB1MzIgcGdfdGJsX3ZhLCB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9z aXplKQotewotCWh3X3N0YXR1cyBzdGF0dXMgPSAwOwotCXUzMiBwdGVfYWRkcjsKLQlzMzIgbnVt X2VudHJpZXMgPSAxOwotCi0Jc3dpdGNoIChwYWdlX3NpemUpIHsKLQljYXNlIEhXX1BBR0VfU0la RTRLQjoKLQkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDIocGdfdGJsX3ZhLAotCQkJCQkg ICAgICB2aXJ0dWFsX2FkZHIgJgotCQkJCQkgICAgICBNTVVfU01BTExfUEFHRV9NQVNLKTsKLQkJ YnJlYWs7Ci0KLQljYXNlIEhXX1BBR0VfU0laRTY0S0I6Ci0JCW51bV9lbnRyaWVzID0gMTY7Ci0J CXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKLQkJCQkJICAgICAgdmly dHVhbF9hZGRyICYKLQkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFTSyk7Ci0JCWJyZWFrOwot Ci0JY2FzZSBIV19QQUdFX1NJWkUxTUI6Ci0JY2FzZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRToK LQkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAotCQkJCQkgICAgICB2 aXJ0dWFsX2FkZHIgJgotCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOwotCQlicmVh azsKLQotCWNhc2UgSFdfUEFHRV9TSVpFMTZNQjoKLQkJbnVtX2VudHJpZXMgPSAxNjsKLQkJcHRl X2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAotCQkJCQkgICAgICB2aXJ0dWFs X2FkZHIgJgotCQkJCQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKLQkJYnJlYWs7Ci0K LQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl3aGlsZSAoLS1udW1fZW50cmll cyA+PSAwKQotCQkoKHUzMiAqKSBwdGVfYWRkcilbbnVtX2VudHJpZXNdID0gMDsKLQotCXJldHVy biBzdGF0dXM7Ci19Ci0KLS8qIG1tdV9zZXRfY2FtX2VudHJ5ICovCi1zdGF0aWMgaHdfc3RhdHVz IG1tdV9zZXRfY2FtX2VudHJ5KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAotCQkJCSAgIGNv bnN0IHUzMiBwYWdlX3N6LAotCQkJCSAgIGNvbnN0IHUzMiBwcmVzZXJ2ZWRfYml0LAotCQkJCSAg IGNvbnN0IHUzMiB2YWxpZF9iaXQsCi0JCQkJICAgY29uc3QgdTMyIHZpcnR1YWxfYWRkcl90YWcp Ci17Ci0JaHdfc3RhdHVzIHN0YXR1cyA9IDA7Ci0JdTMyIG1tdV9jYW1fcmVnOwotCi0JbW11X2Nh bV9yZWcgPSAodmlydHVhbF9hZGRyX3RhZyA8PCAxMik7Ci0JbW11X2NhbV9yZWcgPSAobW11X2Nh bV9yZWcpIHwgKHBhZ2Vfc3opIHwgKHZhbGlkX2JpdCA8PCAyKSB8Ci0JICAgIChwcmVzZXJ2ZWRf Yml0IDw8IDMpOwotCi0JLyogd3JpdGUgdmFsdWVzIHRvIHJlZ2lzdGVyICovCi0JTU1VTU1VX0NB TV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbW11X2NhbV9yZWcpOwotCi0JcmV0dXJu IHN0YXR1czsKLX0KLQotLyogbW11X3NldF9yYW1fZW50cnkgKi8KLXN0YXRpYyBod19zdGF0dXMg bW11X3NldF9yYW1fZW50cnkodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCi0JCQkJICAgY29u c3QgdTMyIHBoeXNpY2FsX2FkZHIsCi0JCQkJICAgZW51bSBod19lbmRpYW5pc21fdCBlbmRpYW5p c20sCi0JCQkJICAgZW51bSBod19lbGVtZW50X3NpemVfdCBlbGVtZW50X3NpemUsCi0JCQkJICAg ZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90IG1peGVkX3NpemUpCi17Ci0JaHdfc3RhdHVzIHN0YXR1 cyA9IDA7Ci0JdTMyIG1tdV9yYW1fcmVnOwotCi0JbW11X3JhbV9yZWcgPSAocGh5c2ljYWxfYWRk ciAmIE1NVV9BRERSX01BU0spOwotCW1tdV9yYW1fcmVnID0gKG1tdV9yYW1fcmVnKSB8ICgoZW5k aWFuaXNtIDw8IDkpIHwgKGVsZW1lbnRfc2l6ZSA8PCA3KSB8Ci0JCQkJICAgICAgIChtaXhlZF9z aXplIDw8IDYpKTsKLQotCS8qIHdyaXRlIHZhbHVlcyB0byByZWdpc3RlciAqLwotCU1NVU1NVV9S QU1fV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIG1tdV9yYW1fcmVnKTsKLQotCXJldHVy biBzdGF0dXM7Ci0KLX0KLQotdm9pZCBod19tbXVfdGxiX2ZsdXNoX2FsbCh2b2lkIF9faW9tZW0g KmJhc2UpCi17Ci0JX19yYXdfd3JpdGVsKDEsIGJhc2UgKyBNTVVfR0ZMVVNIKTsKLX0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuaCBiL2RyaXZlcnMv c3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMWM1MGJiMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv aHcvaHdfbW11LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIGh3X21t dS5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig VEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIE1NVSB0eXBlcyBhbmQgQVBJIGRlY2xhcmF0aW9u cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoK LSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMg SVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LSAqLwotCi0jaWZuZGVmIF9IV19NTVVfSAotI2RlZmluZSBfSFdfTU1VX0gKLQotI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+Ci0KLS8qIEJpdG1hc2tzIGZvciBpbnRlcnJ1cHQgc291cmNlcyAqLwot I2RlZmluZSBIV19NTVVfVFJBTlNMQVRJT05fRkFVTFQgICAweDIKLSNkZWZpbmUgSFdfTU1VX0FM TF9JTlRFUlJVUFRTICAgICAgMHgxRgotCi0jZGVmaW5lIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpF IDB4NDAwCi0KLS8qIGh3X21tdV9taXhlZF9zaXplX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0 byBzcGVjaWZ5IHdoZXRoZXIgdG8gZm9sbG93Ci0JCQlDUFUvVExCIEVsZW1lbnQgc2l6ZSAqLwot ZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90IHsKLQlIV19NTVVfVExCRVMsCi0JSFdfTU1VX0NQVUVT Ci19OwotCi0vKiBod19tbXVfbWFwX2F0dHJzX3Q6ICBTdHJ1Y3QgY29udGFpbmluZyBNTVUgbWFw cGluZyBhdHRyaWJ1dGVzICovCi1zdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190IHsKLQllbnVtIGh3 X2VuZGlhbmlzbV90IGVuZGlhbmlzbTsKLQllbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1lbnRf c2l6ZTsKLQllbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfc2l6ZTsKLQlib29sIGRvbm90 bG9ja21wdXBhZ2U7Ci19OwotCi1leHRlcm4gaHdfc3RhdHVzIGh3X21tdV9lbmFibGUodm9pZCBf X2lvbWVtICpiYXNlX2FkZHJlc3MpOwotCi1leHRlcm4gaHdfc3RhdHVzIGh3X21tdV9kaXNhYmxl KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKTsKLQotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVf bnVtX2xvY2tlZF9zZXQodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCi0JCQkJICAgICAgIHUz MiBudW1fbG9ja2VkX2VudHJpZXMpOwotCi1leHRlcm4gaHdfc3RhdHVzIGh3X21tdV92aWN0aW1f bnVtX3NldCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKLQkJCQkgICAgICAgdTMyIHZpY3Rp bV9lbnRyeV9udW0pOwotCi0vKiBGb3IgTU1VIGZhdWx0cyAqLwotZXh0ZXJuIGh3X3N0YXR1cyBo d19tbXVfZXZlbnRfYWNrKHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAotCQkJCSAgdTMyIGly cV9tYXNrKTsKLQotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZXZlbnRfZGlzYWJsZSh2b2lkIF9f aW9tZW0gKmJhc2VfYWRkcmVzcywKLQkJCQkgICAgICB1MzIgaXJxX21hc2spOwotCi1leHRlcm4g aHdfc3RhdHVzIGh3X21tdV9ldmVudF9lbmFibGUodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3Ms Ci0JCQkJICAgICB1MzIgaXJxX21hc2spOwotCi1leHRlcm4gaHdfc3RhdHVzIGh3X21tdV9ldmVu dF9zdGF0dXModm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCi0JCQkJICAgICB1MzIgKmlycV9t YXNrKTsKLQotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZmF1bHRfYWRkcl9yZWFkKHZvaWQgX19p b21lbSAqYmFzZV9hZGRyZXNzLAotCQkJCQl1MzIgKmFkZHIpOwotCi0vKiBTZXQgdGhlIFRUIGJh c2UgYWRkcmVzcyAqLwotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfdHRiX3NldCh2b2lkIF9faW9t ZW0gKmJhc2VfYWRkcmVzcywKLQkJCQl1MzIgdHRiX3BoeXNfYWRkcik7Ci0KLWV4dGVybiBod19z dGF0dXMgaHdfbW11X3R3bF9lbmFibGUodm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpOwotCi1l eHRlcm4gaHdfc3RhdHVzIGh3X21tdV90d2xfZGlzYWJsZSh2b2lkIF9faW9tZW0gKmJhc2VfYWRk cmVzcyk7Ci0KLWV4dGVybiBod19zdGF0dXMgaHdfbW11X3RsYl9hZGQodm9pZCBfX2lvbWVtICpi YXNlX2FkZHJlc3MsCi0JCQkJdTMyIHBoeXNpY2FsX2FkZHIsCi0JCQkJdTMyIHZpcnR1YWxfYWRk ciwKLQkJCQl1MzIgcGFnZV9zeiwKLQkJCQl1MzIgZW50cnlfbnVtLAotCQkJCXN0cnVjdCBod19t bXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKLQkJCQlzOCBwcmVzZXJ2ZWRfYml0LCBzOCB2YWxp ZF9iaXQpOwotCi0vKiBGb3IgUFRFcyAqLwotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX3Nl dChjb25zdCB1MzIgcGdfdGJsX3ZhLAotCQkJCXUzMiBwaHlzaWNhbF9hZGRyLAotCQkJCXUzMiB2 aXJ0dWFsX2FkZHIsCi0JCQkJdTMyIHBhZ2Vfc3osCi0JCQkJc3RydWN0IGh3X21tdV9tYXBfYXR0 cnNfdCAqbWFwX2F0dHJzKTsKLQotZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX2NsZWFyKGNv bnN0IHUzMiBwZ190YmxfdmEsCi0JCQkJICB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zaXpl KTsKLQotdm9pZCBod19tbXVfdGxiX2ZsdXNoX2FsbCh2b2lkIF9faW9tZW0gKmJhc2UpOwotCi1z dGF0aWMgaW5saW5lIHUzMiBod19tbXVfcHRlX2FkZHJfbDEodTMyIGwxX2Jhc2UsIHUzMiB2YSkK LXsKLQl1MzIgcHRlX2FkZHI7Ci0JdTMyIHZhMzFfdG8yMDsKLQotCXZhMzFfdG8yMCA9IHZhID4+ ICgyMCAtIDIpOwkvKiBMZWZ0LXNoaWZ0IGJ5IDIgaGVyZSBpdHNlbGYgKi8KLQl2YTMxX3RvMjAg Jj0gMHhGRkZGRkZGQ1VMOwotCXB0ZV9hZGRyID0gbDFfYmFzZSArIHZhMzFfdG8yMDsKLQotCXJl dHVybiBwdGVfYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgaHdfbW11X3B0ZV9hZGRyX2wy KHUzMiBsMl9iYXNlLCB1MzIgdmEpCi17Ci0JdTMyIHB0ZV9hZGRyOwotCi0JcHRlX2FkZHIgPSAo bDJfYmFzZSAmIDB4RkZGRkZDMDApIHwgKCh2YSA+PiAxMCkgJiAweDNGQyk7Ci0KLQlyZXR1cm4g cHRlX2FkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGh3X21tdV9wdGVfY29hcnNlX2wxKHUz MiBwdGVfdmFsKQotewotCXUzMiBwdGVfY29hcnNlOwotCi0JcHRlX2NvYXJzZSA9IHB0ZV92YWwg JiAweEZGRkZGQzAwOwotCi0JcmV0dXJuIHB0ZV9jb2Fyc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dTMyIGh3X21tdV9wdGVfc2l6ZV9sMSh1MzIgcHRlX3ZhbCkKLXsKLQl1MzIgcHRlX3NpemUgPSAw OwotCi0JaWYgKChwdGVfdmFsICYgMHgzKSA9PSAweDEpIHsKLQkJLyogUG9pbnRzIHRvIEwyIFBU ICovCi0JCXB0ZV9zaXplID0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkU7Ci0JfQotCi0JaWYgKChw dGVfdmFsICYgMHgzKSA9PSAweDIpIHsKLQkJaWYgKHB0ZV92YWwgJiAoMSA8PCAxOCkpCi0JCQlw dGVfc2l6ZSA9IEhXX1BBR0VfU0laRTE2TUI7Ci0JCWVsc2UKLQkJCXB0ZV9zaXplID0gSFdfUEFH RV9TSVpFMU1COwotCX0KLQotCXJldHVybiBwdGVfc2l6ZTsKLX0KLQotc3RhdGljIGlubGluZSB1 MzIgaHdfbW11X3B0ZV9zaXplX2wyKHUzMiBwdGVfdmFsKQotewotCXUzMiBwdGVfc2l6ZSA9IDA7 Ci0KLQlpZiAocHRlX3ZhbCAmIDB4MikKLQkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU0S0I7Ci0J ZWxzZSBpZiAocHRlX3ZhbCAmIDB4MSkKLQkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU2NEtCOwot Ci0JcmV0dXJuIHB0ZV9zaXplOwotfQotCi0jZW5kaWYgLyogX0hXX01NVV9IICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxf c20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hu bF9zbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzk1YTE4Li4wMDAwMDAwCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9z bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBfY2hubF9zbS5oCi0g KgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01B UCBwcm9jZXNzb3JzLgotICoKLSAqIFByaXZhdGUgaGVhZGVyIGZpbGUgZGVmaW5pbmcgY2hhbm5l bCBtYW5hZ2VyIGFuZCBjaGFubmVsIG9iamVjdHMgZm9yCi0gKiBhIHNoYXJlZCBtZW1vcnkgY2hh bm5lbCBkcml2ZXIuCi0gKgotICogU2hhcmVkIGJldHdlZW4gdGhlIG1vZHVsZXMgaW1wbGVtZW50 aW5nIHRoZSBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgY2xhc3MKLSAqIGxpYnJhcnkuCi0gKgotICog Q29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBU aGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycg QU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F UkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8K LQotI2lmbmRlZiBfQ0hOTF9TTV8KLSNkZWZpbmUgX0NITkxfU01fCi0KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvZHNwYXBpLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KLQotI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgotCi0vKgotICog IFRoZXNlIHRhcmdldCBzaWRlIHN5bWJvbHMgZGVmaW5lIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGlu ZyBhZGRyZXNzZXMKLSAqICBvZiBzaGFyZWQgbWVtb3J5IGJ1ZmZlci4gVGhleSBhcmUgZGVmaW5l ZCBpbiB0aGUgKmNmZy5jbWQgZmlsZSBieQotICogIGNkYiBjb2RlLgotICovCi0jZGVmaW5lIENI TkxfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSAiX1NITV9CRUciCi0jZGVmaW5lIENITkxfU0hBUkVE X0JVRkZFUl9MSU1JVF9TWU0gIl9TSE1fRU5EIgotI2RlZmluZSBCUklER0VJTklUX0JJT1NHUFRJ TUVSICJfQlJJREdFSU5JVF9CSU9TR1BUSU1FUiIKLSNkZWZpbmUgQlJJREdFSU5JVF9MT0FETU9O X0dQVElNRVIgIl9CUklER0VJTklUX0xPQURNT05fR1BUSU1FUiIKLQotI2lmbmRlZiBfQ0hOTF9X T1JEU0laRQotI2RlZmluZSBfQ0hOTF9XT1JEU0laRSA0CS8qIGRlZmF1bHQgX0NITkxfV09SRFNJ WkUgaXMgMiBieXRlcy93b3JkICovCi0jZW5kaWYKLQotI2RlZmluZSBNQVhPUFBTIDE2Ci0KLS8q IFNoYXJlZCBtZW1vcnkgY29uZmlnIG9wdGlvbnMgKi8KLSNkZWZpbmUgU0hNX0NVUlJPUFAJMAkv KiBTZXQgY3VycmVudCBPUFAgaW4gc2htICovCi0jZGVmaW5lIFNITV9PUFBJTkZPCTEJLyogU2V0 IGRzcCB2b2x0YWdlIGFuZCBmcmVxIHRhYmxlIHZhbHVlcyAqLwotI2RlZmluZSBTSE1fR0VUT1BQ CTIJLyogR2V0IG9wcCByZXF1ZXN0ZWQgYnkgRFNQICovCi0KLXN0cnVjdCBvcHBfdGFibGVfZW50 cnkgewotCXUzMiB2b2x0YWdlOwotCXUzMiBmcmVxdWVuY3k7Ci0JdTMyIG1pbl9mcmVxOwotCXUz MiBtYXhfZnJlcTsKLX07Ci0KLXN0cnVjdCBvcHBfc3RydWN0IHsKLQl1MzIgY3Vycl9vcHBfcHQ7 Ci0JdTMyIG51bV9vcHBfcHRzOwotCXN0cnVjdCBvcHBfdGFibGVfZW50cnkgb3BwX3BvaW50W01B WE9QUFNdOwotfTsKLQotLyogUmVxdWVzdCB0byBNUFUgKi8KLXN0cnVjdCBvcHBfcnFzdF9zdHJ1 Y3QgewotCXUzMiBycXN0X2RzcF9mcmVxOwotCXUzMiBycXN0X29wcF9wdDsKLX07Ci0KLS8qIElu Zm8gdG8gTVBVICovCi1zdHJ1Y3QgbG9hZF9tb25fc3RydWN0IHsKLQl1MzIgY3Vycl9kc3BfbG9h ZDsKLQl1MzIgY3Vycl9kc3BfZnJlcTsKLQl1MzIgcHJlZF9kc3BfbG9hZDsKLQl1MzIgcHJlZF9k c3BfZnJlcTsKLX07Ci0KLS8qIFN0cnVjdHVyZSBpbiBzaGFyZWQgYmV0d2VlbiBEU1AgYW5kIFBD IGZvciBjb21tdW5pY2F0aW9uLiAqLwotc3RydWN0IHNobSB7Ci0JdTMyIGRzcF9mcmVlX21hc2s7 CS8qIFdyaXR0ZW4gYnkgRFNQLCByZWFkIGJ5IFBDLiAqLwotCXUzMiBob3N0X2ZyZWVfbWFzazsJ LyogV3JpdHRlbiBieSBQQywgcmVhZCBieSBEU1AgKi8KLQotCXUzMiBpbnB1dF9mdWxsOwkJLyog SW5wdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCi0JdTMyIGlucHV0X2lkOwkJLyogQ2hh bm5lbCBmb3Igd2hpY2ggaW5wdXQgaXMgYXZhaWxhYmxlLiAqLwotCXUzMiBpbnB1dF9zaXplOwkJ LyogU2l6ZSBvZiBkYXRhIGJsb2NrIChpbiBEU1Agd29yZHMpLiAqLwotCi0JdTMyIG91dHB1dF9m dWxsOwkvKiBPdXRwdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCi0JdTMyIG91dHB1dF9p ZDsJCS8qIENoYW5uZWwgZm9yIHdoaWNoIG91dHB1dCBpcyBhdmFpbGFibGUuICovCi0JdTMyIG91 dHB1dF9zaXplOwkvKiBTaXplIG9mIGRhdGEgYmxvY2sgKGluIERTUCB3b3JkcykuICovCi0KLQl1 MzIgYXJnOwkJLyogQXJnIGZvciBJc3N1ZS9SZWNsYWltICgyMyBiaXRzIGZvciA1NXgpLiAqLwot CXUzMiByZXN2ZDsJCS8qIEtlZXAgc3RydWN0dXJlIHNpemUgZXZlbiBmb3IgMzItYml0IERTUHMg Ki8KLQotCS8qIE9wZXJhdGluZyBQb2ludCBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3Qgb3BwX3N0cnVj dCBvcHBfdGFibGVfc3RydWN0OwotCS8qIE9wZXJhdGluZyBQb2ludCBSZXF1ZXN0IHN0cnVjdHVy ZSAqLwotCXN0cnVjdCBvcHBfcnFzdF9zdHJ1Y3Qgb3BwX3JlcXVlc3Q7Ci0JLyogbG9hZCBtb25p dG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBsb2FkX21vbl9zdHJ1Y3QgbG9h ZF9tb25faW5mbzsKLQkvKiBGbGFnIGZvciBXRFQgZW5hYmxlL2Rpc2FibGUgRi9JIGNsb2NrcyAq LwotCXUzMiB3ZHRfc2V0Y2xvY2tzOwotCXUzMiB3ZHRfb3ZlcmZsb3c7CS8qIFdEVCBvdmVyZmxv dyB0aW1lICovCi0JY2hhciBkdW1teVsxNzZdOwkvKiBwYWRkaW5nIHRvIDI1NiBieXRlIGJvdW5k YXJ5ICovCi0JdTMyIHNobV9kYmdfdmFyWzY0XTsJLyogc2hhcmVkIG1lbW9yeSBkZWJ1ZyB2YXJp YWJsZXMgKi8KLX07Ci0KLQkvKiBDaGFubmVsIE1hbmFnZXI6IG9ubHkgb25lIGNyZWF0ZWQgcGVy IGJvYXJkOiAqLwotc3RydWN0IGNobmxfbWdyIHsKLQkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8g QnJpZGdlIGRyaXZlciAqLwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5z OwotCXN0cnVjdCBpb19tZ3IgKmlvbWdyOwkvKiBJTyBtYW5hZ2VyICovCi0JLyogRGV2aWNlIHRo aXMgYm9hcmQgcmVwcmVzZW50cyAqLwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOwotCi0J LyogVGhlc2UgZmllbGRzIGluaXRpYWxpemVkIGluIGJyaWRnZV9jaG5sX2NyZWF0ZSgpOiAqLwot CXUzMiBvdXRwdXRfbWFzazsJLyogSG9zdCBvdXRwdXQgY2hhbm5lbHMgdy8gZnVsbCBidWZmZXJz ICovCi0JdTMyIGxhc3Rfb3V0cHV0OwkvKiBMYXN0IG91dHB1dCBjaGFubmVsIGZpcmVkIGZyb20g RFBDICovCi0JLyogQ3JpdGljYWwgc2VjdGlvbiBvYmplY3QgaGFuZGxlICovCi0Jc3BpbmxvY2tf dCBjaG5sX21ncl9sb2NrOwotCXUzMiB3b3JkX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzIG9mIERT UCB3b3JkICovCi0JdTggbWF4X2NoYW5uZWxzOwkvKiBUb3RhbCBudW1iZXIgb2YgY2hhbm5lbHMg Ki8KLQl1OCBvcGVuX2NoYW5uZWxzOwkvKiBUb3RhbCBudW1iZXIgb2Ygb3BlbiBjaGFubmVscyAq LwotCXN0cnVjdCBjaG5sX29iamVjdCAqKmNoYW5uZWxzOwkJLyogQXJyYXkgb2YgY2hhbm5lbHMg Ki8KLQl1OCB0eXBlOwkJLyogVHlwZSBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgKi8KLQkvKiBJ ZiBubyBzaG0gc3ltcywgcmV0dXJuIGZvciBDSE5MX09wZW4gKi8KLQlpbnQgY2hubF9vcGVuX3N0 YXR1czsKLX07Ci0KLS8qCi0gKiAgQ2hhbm5lbDogdXAgdG8gQ0hOTF9NQVhDSEFOTkVMUyBwZXIg Ym9hcmQgb3IgaWYgRFNQLURNQSBzdXBwb3J0ZWQgdGhlbgotICogICAgIHVwIHRvIENITkxfTUFY Q0hBTk5FTFMgKyBDSE5MX01BWERETUFDSE5MUyBwZXIgYm9hcmQuCi0gKi8KLXN0cnVjdCBjaG5s X29iamVjdCB7Ci0JLyogUG9pbnRlciBiYWNrIHRvIGNoYW5uZWwgbWFuYWdlciAqLwotCXN0cnVj dCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOwotCXUzMiBjaG5sX2lkOwkJLyogQ2hhbm5lbCBpZCAq LwotCXU4IHN0YXRlOwkJLyogQ3VycmVudCBjaGFubmVsIHN0YXRlICovCi0JczggY2hubF9tb2Rl OwkJLyogQ2hubCBtb2RlIGFuZCBhdHRyaWJ1dGVzICovCi0JLyogQ2hubCBJL08gY29tcGxldGlv biBldmVudCAodXNlciBtb2RlKSAqLwotCXZvaWQgKnVzZXJfZXZlbnQ7Ci0JLyogQWJzdHJhY3Qg c3luY2hyb25pemF0aW9uIG9iamVjdCAqLwotCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVu dDsKLQl1MzIgcHJvY2VzczsJCS8qIFByb2Nlc3Mgd2hpY2ggY3JlYXRlZCB0aGlzIGNoYW5uZWwg Ki8KLQl1MzIgY2JfYXJnOwkJLyogQXJndW1lbnQgdG8gdXNlIHdpdGggY2FsbGJhY2sgKi8KLQlz dHJ1Y3QgbGlzdF9oZWFkIGlvX3JlcXVlc3RzOwkvKiBMaXN0IG9mIElPUidzIHRvIGRyaXZlciAq LwotCXMzMiBjaW9fY3M7CQkvKiBOdW1iZXIgb2YgSU9DJ3MgaW4gcXVldWUgKi8KLQlzMzIgY2lv X3JlcXM7CQkvKiBOdW1iZXIgb2YgSU9SZXF1ZXN0cyBpbiBxdWV1ZSAqLwotCXMzMiBjaG5sX3Bh Y2tldHM7CS8qIEluaXRpYWwgbnVtYmVyIG9mIGZyZWUgSXJwcyAqLwotCS8qIExpc3Qgb2YgSU9D J3MgZnJvbSBkcml2ZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGlvX2NvbXBsZXRpb25zOwotCXN0 cnVjdCBsaXN0X2hlYWQgZnJlZV9wYWNrZXRzX2xpc3Q7CS8qIExpc3Qgb2YgZnJlZSBJcnBzICov Ci0Jc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsKLQl1MzIgYnl0ZXNfbW92ZWQ7CS8qIFRv dGFsIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCAqLwotCi0JLyogRm9yIERTUC1ETUEgKi8K LQotCS8qIFR5cGUgb2YgY2hubCB0cmFuc3BvcnQ6Q0hOTF9bUENQWV1bRERNQV0gKi8KLQl1MzIg Y2hubF90eXBlOwotfTsKLQotLyogSS9PIFJlcXVlc3QvY29tcGxldGlvbiBwYWNrZXQ6ICovCi1z dHJ1Y3QgY2hubF9pcnAgewotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsJLyogTGluayB0byBuZXh0 IENISVJQIGluIHF1ZXVlLiAqLwotCS8qIEJ1ZmZlciB0byBiZSBmaWxsZWQvZW1wdGllZC4gKFVz ZXIpICovCi0JdTggKmhvc3RfdXNlcl9idWY7Ci0JLyogQnVmZmVyIHRvIGJlIGZpbGxlZC9lbXB0 aWVkLiAoU3lzdGVtKSAqLwotCXU4ICpob3N0X3N5c19idWY7Ci0JdTMyIGFyZzsJCS8qIElzc3Vl L1JlY2xhaW0gYXJndW1lbnQuICovCi0JdTMyIGRzcF90eF9hZGRyOwkvKiBUcmFuc2ZlciBhZGRy ZXNzIG9uIERTUCBzaWRlLiAqLwotCXUzMiBieXRlX3NpemU7CQkvKiBCeXRlcyB0cmFuc2ZlcnJl ZC4gKi8KLQl1MzIgYnVmX3NpemU7CQkvKiBBY3R1YWwgYnVmZmVyIHNpemUgd2hlbiBhbGxvY2F0 ZWQuICovCi0JdTMyIHN0YXR1czsJCS8qIFN0YXR1cyBvZiBJTyBjb21wbGV0aW9uLiAqLwotfTsK LQotI2VuZGlmIC8qIF9DSE5MX1NNXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2JyZGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9icmRkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDcyNWQ3YjM3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9icmRkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz NyArMCwwIEBACi0vKgotICogYnJkZGVmcy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZl ciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIEdsb2Jh bCBCUkQgY29uc3RhbnRzIGFuZCB0eXBlcywgc2hhcmVkIGJldHdlZW4gRFNQIEFQSSBhbmQgQnJp ZGdlIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVt ZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElT IFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQK LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIEJSRERFRlNfCi0jZGVmaW5lIEJSRERFRlNf Ci0KLS8qIHBsYXRmb3JtIHN0YXR1cyB2YWx1ZXMgKi8KLSNkZWZpbmUgQlJEX1NUT1BQRUQgICAg IDB4MAkvKiBObyBNb25pdG9yIExvYWRlZCwgTm90IHJ1bm5pbmcuICovCi0jZGVmaW5lIEJSRF9J RExFICAgICAgICAweDEJLyogTW9uaXRvciBMb2FkZWQsIGJ1dCBzdXNwZW5kZWQuICovCi0jZGVm aW5lIEJSRF9SVU5OSU5HICAgICAweDIJLyogTW9uaXRvciBsb2FkZWQsIGFuZCBleGVjdXRpbmcu ICovCi0jZGVmaW5lIEJSRF9VTktOT1dOICAgICAweDMJLyogQm9hcmQgc3RhdGUgaXMgaW5kZXRl cm1pbmF0ZS4gKi8KLSNkZWZpbmUgQlJEX0xPQURFRCAgICAgIDB4NQotI2RlZmluZSBCUkRfU0xF RVBfVFJBTlNJVElPTiAweDYJLyogU2xlZXAgdHJhbnNpdGlvbiBpbiBwcm9ncmVzcyAqLwotI2Rl ZmluZSBCUkRfSElCRVJOQVRJT04gMHg3CS8qIE1QVSBpbml0aWF0ZWQgaGliZXJuYXRpb24gKi8K LSNkZWZpbmUgQlJEX1JFVEVOVElPTiAgICAgMHg4CS8qIFJldGVudGlvbiBtb2RlICovCi0jZGVm aW5lIEJSRF9EU1BfSElCRVJOQVRJT04gICAgIDB4OQkvKiBEU1AgaW5pdGlhdGVkIGhpYmVybmF0 aW9uICovCi0jZGVmaW5lIEJSRF9FUlJPUgkJMHhBCS8qIEJvYXJkIHN0YXRlIGlzIEVycm9yICov Ci0KLS8qIEJSRCBPYmplY3QgKi8KLXN0cnVjdCBicmRfb2JqZWN0OwotCi0jZW5kaWYgLyogQlJE REVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRl L2RzcGJyaWRnZS9jZmdkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVk ZS9kc3BicmlkZ2UvY2ZnZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzJj NzU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9jZmdkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICog Y2ZnZGVmcy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9u cyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIEdsb2JhbCBDRkcgY29uc3RhbnRzIGFu ZCB0eXBlcywgc2hhcmVkIGJldHdlZW4gRFNQIEFQSSBhbmQgQnJpZGdlIGRyaXZlci4KLSAqCi0g KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAq IFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMn JyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAq LwotCi0jaWZuZGVmIENGR0RFRlNfCi0jZGVmaW5lIENGR0RFRlNfCi0KLS8qIEhvc3QgUmVzb3Vy Y2VzOiAqLwotI2RlZmluZSBDRkdfTUFYTUVNUkVHSVNURVJTICAgICA5Ci0KLS8qIElSUSBmbGFn ICovCi0jZGVmaW5lIENGR19JUlFTSEFSRUQgICAgICAgICAgIDB4MDEJLyogSVJRIGNhbiBiZSBz aGFyZWQgKi8KLQotLyogQSBwbGF0Zm9ybS1yZWxhdGVkIGRldmljZSBoYW5kbGU6ICovCi1zdHJ1 Y3QgY2ZnX2Rldm5vZGU7Ci0KLS8qCi0gKiAgSG9zdCByZXNvdXJjZSBzdHJ1Y3R1cmUuCi0gKi8K LXN0cnVjdCBjZmdfaG9zdHJlcyB7Ci0JdTMyIG51bV9tZW1fd2luZG93czsJLyogU2V0IHRvIGRl ZmF1bHQgKi8KLQkvKiBUaGlzIGlzIHRoZSBiYXNlLm1lbW9yeSAqLwotCXUzMiBtZW1fYmFzZVtD RkdfTUFYTUVNUkVHSVNURVJTXTsJLyogc2htIHZpcnR1YWwgYWRkcmVzcyAqLwotCXUzMiBtZW1f bGVuZ3RoW0NGR19NQVhNRU1SRUdJU1RFUlNdOwkvKiBMZW5ndGggb2YgdGhlIEJhc2UgKi8KLQl1 MzIgbWVtX3BoeXNbQ0ZHX01BWE1FTVJFR0lTVEVSU107CS8qIHNobSBQaHlzaWNhbCBhZGRyZXNz ICovCi0JdTggYmlycV9yZWdpc3RlcnM7CS8qIElSUSBOdW1iZXIgKi8KLQl1OCBiaXJxX2F0dHJp YjsJCS8qIElSUSBBdHRyaWJ1dGUgKi8KLQl1MzIgb2Zmc2V0X2Zvcl9tb25pdG9yOwkvKiBUaGUg U2hhcmVkIG1lbW9yeSBzdGFydHMgZnJvbQotCQkJCQkgKiBtZW1fYmFzZSArIHRoaXMgb2Zmc2V0 ICovCi0JLyoKLQkgKiAgSW5mbyBuZWVkZWQgYnkgTk9ERSBmb3IgYWxsb2NhdGluZyBjaGFubmVs cyB0byBjb21tdW5pY2F0ZSB3aXRoIFJNUzoKLQkgKiAgICAgIGNobmxfb2Zmc2V0OiAgICAgICBP ZmZzZXQgb2YgUk1TIGNoYW5uZWxzLiBMb3dlciBjaGFubmVscyBhcmUKLQkgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzZXJ2ZWQuCi0JICogICAgICBjaG5sX2J1Zl9zaXplOiAgICAgIFNp emUgb2YgY2hhbm5lbCBidWZmZXIgdG8gc2VuZCB0byBSTVMKLQkgKiAgICAgIG51bV9jaG5sczoJ CVRvdGFsIG51bWJlciBvZiBjaGFubmVscwotCSAqICAgICAgCQkJKGluY2x1ZGluZyByZXNlcnZl ZCkuCi0JICovCi0JdTMyIGNobmxfb2Zmc2V0OwotCXUzMiBjaG5sX2J1Zl9zaXplOwotCXUzMiBu dW1fY2hubHM7Ci0Jdm9pZCBfX2lvbWVtICpwZXJfYmFzZTsKLQl2b2lkIF9faW9tZW0gKnBlcl9w bV9iYXNlOwotCXZvaWQgX19pb21lbSAqY29yZV9wbV9iYXNlOwotCXZvaWQgX19pb21lbSAqZG1t dV9iYXNlOwotfTsKLQotI2VuZGlmIC8qIENGR0RFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubC5oIGIvZHJpdmVycy9z dGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmwuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOWIwMThiMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubC5oCisrKyAvZGV2L251bGwKQEAgLTEs ODAgKzAsMCBAQAotLyoKLSAqIGNobmwuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIg c3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBEU1AgQVBJ IGNoYW5uZWwgaW50ZXJmYWNlOiBtdWx0aXBsZXhlcyBkYXRhIHN0cmVhbXMgdGhyb3VnaCB0aGUg c2luZ2xlCi0gKiBwaHlzaWNhbCBsaW5rIG1hbmFnZWQgYnkgYSBCcmlkZ2UgZHJpdmVyLgotICoK LSAqIFNlZSBEU1AgQVBJIGNobmwuaCBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdo dCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNr YWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRI T1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lU SE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5k ZWYgQ0hOTF8KLSNkZWZpbmUgQ0hOTF8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5o PgotCi0vKgotICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9y IG9wZW5pbmcgbmV3IGNoYW5uZWxzCi0gKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBh IGdpdmVuIGJvYXJkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGNoYW5uZWxfbWdyOiAgICBM b2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3Qgb24gb3V0cHV0LgotICog ICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCi0gKiAgICAgIG1n cl9hdHRydHM6ICAgICAgQ2hhbm5lbCBtYW5hZ2VyIGF0dHJpYnV0ZXMuCi0gKiAgICAgIG1ncl9h dHRydHMtPm1heF9jaGFubmVsczogICBNYXggY2hhbm5lbHMKLSAqICAgICAgbWdyX2F0dHJ0cy0+ YmlycTogICAgICAgIENoYW5uZWwncyBJL08gSVJRIG51bWJlci4KLSAqICAgICAgbWdyX2F0dHJ0 cy0+aXJxX3NoYXJlZDogICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCi0gKiAgICAg IG1ncl9hdHRydHMtPndvcmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMg Ynl0ZXMuLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7 Ci0gKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgaGRldl9vYmogaXMgaW52YWxpZC4KLSAqICAg ICAgLUVJTlZBTDogbWF4X2NoYW5uZWxzIGlzIDAuCi0gKiAgICAgICAgICAgICAgIEludmFsaWQg RFNQIHdvcmQgc2l6ZSAobXVzdCBiZSA+IDApLgotICogICAgICAgICAgICAgICBJbnZhbGlkIGJh c2UgYWRkcmVzcyBmb3IgRFNQIGNvbW11bmljYXRpb25zLgotICogICAgICAtRU5PTUVNOiAgICAg ICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCi0gKiAg ICAgIC1FSU86ICAgICAgICAgICAgIFVuYWJsZSB0byBwbHVnIGNoYW5uZWwgSVNSIGZvciBjb25m aWd1cmVkIElSUS4KLSAqICAgICAgLUVDSFJORzogICAgIFRoaXMgbWFuYWdlciBjYW5ub3QgaGFu ZGxlIHRoaXMgbWFueSBjaGFubmVscy4KLSAqICAgICAgLUVFWElTVDogICAgICAgQ2hhbm5lbCBt YW5hZ2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGRldmljZS4KLSAqICBSZXF1aXJlczoKLSAq ICAgICAgY2hhbm5lbF9tZ3IgIT0gTlVMTC4KLSAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMLgot ICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgY2FsbHMg dG8gY2hubF9jcmVhdGUoKSBmb3IgdGhlIHNhbWUKLSAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9hcmQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyBjYWxsIHRvCi0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNobmxfZGVzdHJveSgpIHdpbGwgZmFpbC4KLSAqLwotZXh0ZXJu IGludCBjaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKLQkJCSAgICAg IHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaG5s X21ncmF0dHJzICptZ3JfYXR0cnRzKTsKLQotLyoKLSAqICA9PT09PT09PSBjaG5sX2Rlc3Ryb3kg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDbG9zZSBhbGwgb3BlbiBjaGFubmVscywg YW5kIGRlc3Ryb3kgdGhlIGNoYW5uZWwgbWFuYWdlci4KLSAqICBQYXJhbWV0ZXJzOgotICogICAg ICBoY2hubF9tZ3I6ICAgICAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgotICogIFJldHVy bnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAg ICAgIGhjaG5sX21nciB3YXMgaW52YWxpZC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgot ICogICAgICAwOiAgICAgICAgICAgIENhbmNlbHMgSS9PIG9uIGVhY2ggb3BlbiBjaGFubmVsLgot ICogICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICBjaG5sX2NyZWF0ZSBtYXkgc3Vic2VxdWVudGx5IGJl IGNhbGxlZCBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBib2FyZC4K LSAqLwotZXh0ZXJuIGludCBjaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3Ip OwotCi0jZW5kaWYgLyogQ0hOTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmxkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGNiNjdjMzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmxkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2 MyArMCwwIEBACi0vKgotICogY2hubGRlZnMuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2 ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBTeXN0 ZW0td2lkZSBjaGFubmVsIG9iamVjdHMgYW5kIGNvbnN0YW50cy4KLSAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2Fn ZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9V VCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhP VVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVm IENITkxERUZTXwotI2RlZmluZSBDSE5MREVGU18KLQotLyogQ2hhbm5lbCBpZCBvcHRpb24uICov Ci0jZGVmaW5lIENITkxfUElDS0ZSRUUgICAgICAgKH4wVUwpCS8qIExldCBtYW5hZ2VyIHBpY2sg YSBmcmVlIGNoYW5uZWwuICovCi0KLS8qIENoYW5uZWwgbW9kZXMgKi8KLSNkZWZpbmUgQ0hOTF9N T0RFVE9EU1AJCTAJLyogRGF0YSBzdHJlYW1pbmcgdG8gdGhlIERTUC4gKi8KLSNkZWZpbmUgQ0hO TF9NT0RFRlJPTURTUAkxCS8qIERhdGEgc3RyZWFtaW5nIGZyb20gdGhlIERTUC4gKi8KLQotLyog R2V0SU9Db21wbGV0aW9uIGZsYWdzICovCi0jZGVmaW5lIENITkxfSU9DSU5GSU5JVEUgICAgIDB4 ZmZmZmZmZmYJLyogV2FpdCBmb3JldmVyIGZvciBJTyBjb21wbGV0aW9uLiAqLwotI2RlZmluZSBD SE5MX0lPQ05PV0FJVCAgICAgICAweDAJLyogRGVxdWV1ZSBhbiBJT0MsIGlmIGF2YWlsYWJsZS4g Ki8KLQotLyogSU8gQ29tcGxldGlvbiBSZWNvcmQgc3RhdHVzOiAqLwotI2RlZmluZSBDSE5MX0lP Q1NUQVRDT01QTEVURSAweDAwMDAJLyogSU8gQ29tcGxldGVkLiAqLwotI2RlZmluZSBDSE5MX0lP Q1NUQVRDQU5DRUwgICAweDAwMDIJLyogSU8gd2FzIGNhbmNlbGxlZCAqLwotI2RlZmluZSBDSE5M X0lPQ1NUQVRUSU1FT1VUICAweDAwMDgJLyogV2FpdCBmb3IgSU9DIHRpbWVkIG91dC4gKi8KLSNk ZWZpbmUgQ0hOTF9JT0NTVEFURU9TICAgICAgMHg4MDAwCS8qIEVuZCBPZiBTdHJlYW0gcmVhY2hl ZC4gKi8KLQotLyogTWFjcm9zIGZvciBjaGVja2luZyBJL08gQ29tcGxldGlvbiBzdGF0dXM6ICov Ci0jZGVmaW5lIENITkxfSVNfSU9fQ09NUExFVEUoaW9jKSAgKCEoaW9jLnN0YXR1cyAmIH5DSE5M X0lPQ1NUQVRFT1MpKQotI2RlZmluZSBDSE5MX0lTX0lPX0NBTkNFTExFRChpb2MpIChpb2Muc3Rh dHVzICYgQ0hOTF9JT0NTVEFUQ0FOQ0VMKQotI2RlZmluZSBDSE5MX0lTX1RJTUVEX09VVChpb2Mp ICAgIChpb2Muc3RhdHVzICYgQ0hOTF9JT0NTVEFUVElNRU9VVCkKLQotLyogQ2hhbm5lbCBhdHRy aWJ1dGVzOiAqLwotc3RydWN0IGNobmxfYXR0ciB7Ci0JdTMyIHVpb19yZXFzOwkJLyogTWF4ICMg b2YgcHJlYWxsb2NhdGVkIEkvTyByZXF1ZXN0cy4gKi8KLQl2b2lkICpldmVudF9vYmo7CS8qIFVz ZXIgc3VwcGxpZWQgYXV0by1yZXNldCBldmVudCBvYmplY3QuICovCi0JY2hhciAqc3RyX2V2ZW50 X25hbWU7CS8qIFB0ciB0byBuYW1lIG9mIHVzZXIgZXZlbnQgb2JqZWN0LiAqLwotCXZvaWQgKnJl c2VydmVkMTsJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCi0JdTMyIHJlc2VydmVkMjsJ CS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAqLwotCi19OwotCi0vKiBJL08gY29tcGxldGlv biByZWNvcmQ6ICovCi1zdHJ1Y3QgY2hubF9pb2MgewotCXZvaWQgKmJ1ZjsJCS8qIEJ1ZmZlciB0 byBiZSBmaWxsZWQvZW1wdGllZC4gKi8KLQl1MzIgYnl0ZV9zaXplOwkJLyogQnl0ZXMgdHJhbnNm ZXJyZWQuICovCi0JdTMyIGJ1Zl9zaXplOwkJLyogQWN0dWFsIGJ1ZmZlciBzaXplIGluIGJ5dGVz ICovCi0JdTMyIHN0YXR1czsJCS8qIFN0YXR1cyBvZiBJTyBjb21wbGV0aW9uLiAqLwotCXUzMiBh cmc7CQkvKiBVc2VyIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBidWYuICovCi19OwotCi0jZW5k aWYgLyogQ0hOTERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubHByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5scHJpdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA0MTE0Yzc5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5scHJpdi5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAs MCBAQAotLyoKLSAqIGNobmxwcml2LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1 cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogUHJpdmF0ZSBj aGFubmVsIGhlYWRlciBzaGFyZWQgYmV0d2VlbiBEU1BTWVMsIERTUEFQSSBhbmQKLSAqIEJyaWRn ZSBkcml2ZXIgbW9kdWxlcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJ bnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNL QUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICog SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIENITkxQUklWXwotI2RlZmluZSBD SE5MUFJJVl8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sZGVmcy5oPgotI2luY2x1ZGUgPGRz cGJyaWRnZS9kZXZkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyogQ2hh bm5lbCBtYW5hZ2VyIGxpbWl0czogKi8KLSNkZWZpbmUgQ0hOTF9NQVhDSEFOTkVMUyAgICAzMgkv KiBNYXggY2hhbm5lbHMgYXZhaWxhYmxlIHBlciB0cmFuc3BvcnQgKi8KLQotLyoKLSAqICBUcmFu cyBwb3J0IGNoYW5uZWwgSWQgZGVmaW5pdGlvbnM6KG11c3QgbWF0Y2ggZHNwLXNpZGUpLgotICoK LSAqICBGb3IgQ0hOTF9NQVhDSEFOTkVMUyA9IDE2OgotICoKLSAqICBDaG5sSWRzOgotICogICAg ICAwLTE1ICAoUENQWSkgLSB0cmFuc3BvcnQgMCkKLSAqICAgICAgMTYtMzEgKERETUEpIC0gdHJh bnNwb3J0IDEpCi0gKiAgICAgIDMyLTQ3IChaQ1BZKSAtIHRyYW5zcG9ydCAyKQotICovCi0jZGVm aW5lIENITkxfUENQWSAgICAgICAwCS8qIFByb2MtY29weSB0cmFuc3BvcnQgMCAqLwotCi0vKiBI aWdoZXIgbGV2ZWwgY2hhbm5lbCBzdGF0ZXM6ICovCi0jZGVmaW5lIENITkxfU1RBVEVSRUFEWQkJ MAkvKiBDaGFubmVsIHJlYWR5IGZvciBJL08uICovCi0jZGVmaW5lIENITkxfU1RBVEVDQU5DRUwJ MQkvKiBJL08gd2FzIGNhbmNlbGxlZC4gKi8KLSNkZWZpbmUgQ0hOTF9TVEFURUVPUwkJMgkvKiBF bmQgT2YgU3RyZWFtIHJlYWNoZWQuICovCi0KLS8qIE1hY3JvcyBmb3IgY2hlY2tpbmcgbW9kZTog Ki8KLSNkZWZpbmUgQ0hOTF9JU19JTlBVVChtb2RlKSAgICAgIChtb2RlICYgQ0hOTF9NT0RFRlJP TURTUCkKLSNkZWZpbmUgQ0hOTF9JU19PVVRQVVQobW9kZSkgICAgICghQ0hOTF9JU19JTlBVVCht b2RlKSkKLQotLyogVHlwZXMgb2YgY2hhbm5lbCBjbGFzcyBsaWJyYXJpZXM6ICovCi0jZGVmaW5l IENITkxfVFlQRVNNICAgICAgICAgMQkvKiBTaGFyZWQgbWVtb3J5IGRyaXZlci4gKi8KLQotLyog Q2hhbm5lbCBpbmZvLiAqLwotc3RydWN0IGNobmxfaW5mbyB7Ci0Jc3RydWN0IGNobmxfbWdyICpj aG5sX21ncjsJLyogT3duaW5nIGNoYW5uZWwgbWFuYWdlci4gKi8KLQl1MzIgY25obF9pZDsJCS8q IENoYW5uZWwgSUQuICovCi0Jdm9pZCAqZXZlbnRfb2JqOwkvKiBDaGFubmVsIEkvTyBjb21wbGV0 aW9uIGV2ZW50LiAqLwotCS8qQWJzdHJhY3Rpb24gb2YgSS9PIGNvbXBsZXRpb24gZXZlbnQuICov Ci0Jc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OwotCXM4IG1vZGU7CQkvKiBDaGFubmVs IG1vZGUuICovCi0JdTggc3RhdGU7CQkvKiBDdXJyZW50IGNoYW5uZWwgc3RhdGUuICovCi0JdTMy IGJ5dGVzX3R4OwkJLyogVG90YWwgYnl0ZXMgdHJhbnNmZXJyZWQuICovCi0JdTMyIGNpb19jczsJ CS8qIE51bWJlciBvZiBJT0NzIGluIHF1ZXVlLiAqLwotCXUzMiBjaW9fcmVxczsJCS8qIE51bWJl ciBvZiBJTyBSZXF1ZXN0cyBpbiBxdWV1ZS4gKi8KLQl1MzIgcHJvY2VzczsJCS8qIFByb2Nlc3Mg b3duaW5nIHRoaXMgY2hhbm5lbC4gKi8KLX07Ci0KLS8qIENoYW5uZWwgbWFuYWdlciBpbmZvOiAq Lwotc3RydWN0IGNobmxfbWdyaW5mbyB7Ci0JdTggdHlwZTsJCS8qIFR5cGUgb2YgY2hhbm5lbCBj bGFzcyBsaWJyYXJ5LiAqLwotCS8qIENoYW5uZWwgaGFuZGxlLCBnaXZlbiB0aGUgY2hhbm5lbCBp ZC4gKi8KLQlzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqOwotCXU4IG9wZW5fY2hhbm5lbHM7 CS8qIE51bWJlciBvZiBvcGVuIGNoYW5uZWxzLiAqLwotCXU4IG1heF9jaGFubmVsczsJLyogdG90 YWwgIyBvZiBjaG5scyBzdXBwb3J0ZWQgKi8KLX07Ci0KLS8qIENoYW5uZWwgTWFuYWdlciBBdHRy czogKi8KLXN0cnVjdCBjaG5sX21ncmF0dHJzIHsKLQkvKiBNYXggbnVtYmVyIG9mIGNoYW5uZWxz IHRoaXMgbWFuYWdlciBjYW4gdXNlLiAqLwotCXU4IG1heF9jaGFubmVsczsKLQl1MzIgd29yZF9z aXplOwkJLyogRFNQIFdvcmQgc2l6ZS4gKi8KLX07Ci0KLSNlbmRpZiAvKiBDSE5MUFJJVl8gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9jbGsuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9j bGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1MzQxYy4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmgKKysr IC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIGNsay5oCi0gKgotICogRFNQLUJJ T1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3Jz LgotICoKLSAqIFByb3ZpZGVzIENsb2NrIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp IDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBB TlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQg TElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9D TEtfSAotI2RlZmluZSBfQ0xLX0gKLQotZW51bSBkc3BfY2xrX2lkIHsKLQlEU1BfQ0xLX0lWQTIg PSAwLAotCURTUF9DTEtfR1BUNSwKLQlEU1BfQ0xLX0dQVDYsCi0JRFNQX0NMS19HUFQ3LAotCURT UF9DTEtfR1BUOCwKLQlEU1BfQ0xLX1dEVDMsCi0JRFNQX0NMS19NQ0JTUDEsCi0JRFNQX0NMS19N Q0JTUDIsCi0JRFNQX0NMS19NQ0JTUDMsCi0JRFNQX0NMS19NQ0JTUDQsCi0JRFNQX0NMS19NQ0JT UDUsCi0JRFNQX0NMS19TU0ksCi0JRFNQX0NMS19OT1RfREVGSU5FRAotfTsKLQotLyoKLSAqICA9 PT09PT09PSBkc3BfY2xrX2V4aXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEaXNj b250aW51ZSB1c2FnZSBvZiBtb2R1bGU7IGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNv dW50Ci0gKiAgICAgIHJlYWNoZXMgMC4KLSAqICBQYXJhbWV0ZXJzOgotICogIFJldHVybnM6Ci0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIENMSyBpbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICog ICAgICBSZXNvdXJjZXMgdXNlZCBieSBtb2R1bGUgYXJlIGZyZWVkIHdoZW4gY1JlZiByZWFjaGVz IHplcm8uCi0gKi8KLWV4dGVybiB2b2lkIGRzcF9jbGtfZXhpdCh2b2lkKTsKLQotLyoKLSAqICA9 PT09PT09PSBkc3BfY2xrX2luaXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBJbml0 aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIENMSyBtb2R1bGUuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBv Y2N1cnJlZC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICogICAgICBDTEsgaW5pdGlh bGl6ZWQuCi0gKi8KLWV4dGVybiB2b2lkIGRzcF9jbGtfaW5pdCh2b2lkKTsKLQotdm9pZCBkc3Bf Z3B0X3dhaXRfb3ZlcmZsb3coc2hvcnQgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGxvYWQpOwot Ci0vKgotICogID09PT09PT09IGRzcF9jbGtfZW5hYmxlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgRW5hYmxlcyB0aGUgY2xvY2sgcmVxdWVzdGVkLgotICogIFBhcmFtZXRlcnM6Ci0g KiAgUmV0dXJuczoKLSAqICAgICAgMDoJU3VjY2Vzcy4KLSAqCS1FUEVSTToJRXJyb3Igb2NjdXJy ZWQgd2hpbGUgZW5hYmxpbmcgdGhlIGNsb2NrLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiBpbnQgZHNwX2Nsa19lbmFibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCk7 Ci0KLXUzMiBkc3BfY2xvY2tfZW5hYmxlX2FsbCh1MzIgZHNwX3Blcl9jbG9ja3MpOwotCi0vKgot ICogID09PT09PT09IGRzcF9jbGtfZGlzYWJsZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIERpc2FibGVzIHRoZSBjbG9jayByZXF1ZXN0ZWQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICBS ZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVQRVJNOiAgICAg IEVycm9yIG9jY3VycmVkIHdoaWxlIGRpc2FibGluZyB0aGUgY2xvY2suCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkc3BfY2xrX2Rpc2FibGUoZW51bSBkc3Bf Y2xrX2lkIGNsa19pZCk7Ci0KLWV4dGVybiB1MzIgZHNwX2Nsa19nZXRfaXZhMl9yYXRlKHZvaWQp OwotCi11MzIgZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKHUzMiBkc3BfcGVyX2Nsb2Nrcyk7Ci0KLWV4 dGVybiB2b2lkIHNzaV9jbGtfcHJlcGFyZShib29sIEZMQUcpOwotCi0jZW5kaWYgLyogX1NZTkNf SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL2NtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL2NtbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRmOWVjLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW0u aAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogY21tLmgKLSAqCi0gKiBE U1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nl c3NvcnMuCi0gKgotICogVGhlIENvbW11bmljYXRpb24gTWVtb3J5IE1hbmFnZW1lbnQoQ01NKSBt b2R1bGUgcHJvdmlkZXMgc2hhcmVkIG1lbW9yeQotICogbWFuYWdlbWVudCBzZXJ2aWNlcyBmb3Ig RFNQL0JJT1MgQnJpZGdlIGRhdGEgc3RyZWFtaW5nIGFuZCBtZXNzYWdpbmcuCi0gKiBNdWx0aXBs ZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGNhbiBiZSByZWdpc3RlcmVkIHdpdGggQ01NLiBNZW1v cnkgaXMKLSAqIGNvZWxlc2NlZCBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBwb29sIHdoZW4gYSBi dWZmZXIgaXMgZnJlZWQuCi0gKgotICogVGhlIENNTV9YbGF0b3JbeHh4XSBmdW5jdGlvbnMgYXJl IHVzZWQgZm9yIG5vZGUgbWVzc2FnaW5nIGFuZCBkYXRhCi0gKiBzdHJlYW1pbmcgYWRkcmVzcyB0 cmFuc2xhdGlvbiB0byBwZXJmb3JtIHplcm8tY29weSBpbnRlci1wcm9jZXNzb3IKLSAqIGRhdGEg dHJhbnNmZXIoR1BQPC0+RFNQKS4gQSAidHJhbnNsYXRvciIgb2JqZWN0IGlzIGNyZWF0ZWQgZm9y IGEgbm9kZSBvcgotICogc3RyZWFtIG9iamVjdCB0aGF0IGNvbnRhaW5zIHBlciB0aHJlYWQgdmly dHVhbCBhZGRyZXNzIGluZm9ybWF0aW9uLiBUaGlzCi0gKiB0cmFuc2xhdG9yIGluZm8gaXMgdXNl ZCBhdCBydW50aW1lIHRvIHBlcmZvcm0gU00gYWRkcmVzcyB0cmFuc2xhdGlvbgotICogdG8vZnJv bSB0aGUgRFNQIGFkZHJlc3Mgc3BhY2UuCi0gKgotICogTm90ZXM6Ci0gKiAgIGNtbV94bGF0b3Jf YWxsb2NfYnVmIC0gVXNlZCBieSBOb2RlIGFuZCBTdHJlYW0gbW9kdWxlcyBmb3IgU00gYWRkcmVz cwotICoJCQkgIHRyYW5zbGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJ bnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNL QUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICog SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIENNTV8KLSNkZWZpbmUgQ01NXwot Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9j bW1kZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLQotLyoKLSAqICA9PT09 PT09PSBjbW1fY2FsbG9jX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEFsbG9j YXRlIG1lbW9yeSBidWZmZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEgc3RyZWFtaW5nIG9y Ci0gKiAgICAgIG1lc3NhZ2luZy4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoY21tX21ncjog ICBDbW0gTWdyIGhhbmRsZS4KLSAqICAgICAgdXNpemU6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8g YWxsb2NhdGUuCi0gKiAgICAgIHBhdHRyOiAgICAgQXR0cmlidXRlcyBvZiBtZW1vcnkgdG8gYWxs b2NhdGUuCi0gKiAgICAgIHBwX2J1Zl92YTogICBBZGRyZXNzIG9mIHdoZXJlIHRvIHBsYWNlIFZB LgotICogIFJldHVybnM6Ci0gKiAgICAgIFBvaW50ZXIgdG8gYSB6ZXJvJ2QgYmxvY2sgb2YgU00g bWVtb3J5OwotICogICAgICBOVUxMIGlmIG1lbW9yeSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsCi0g KiAgICAgIG9yIGlmIGJ5dGVfc2l6ZSA9PSAwLAotICogIFJlcXVpcmVzOgotICogICAgICBWYWxp ZCBoY21tX21nci4KLSAqICAgICAgQ01NIGluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAg ICAgIFRoZSByZXR1cm5lZCBwb2ludGVyLCBpZiBub3QgTlVMTCwgcG9pbnRzIHRvIGEgdmFsaWQg bWVtb3J5IGJsb2NrIG9mCi0gKiAgICAgIHRoZSBzaXplIHJlcXVlc3RlZC4KLSAqCi0gKi8KLWV4 dGVybiB2b2lkICpjbW1fY2FsbG9jX2J1ZihzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCi0J CQkgICAgdTMyIHVzaXplLCBzdHJ1Y3QgY21tX2F0dHJzICpwYXR0cnMsCi0JCQkgICAgdm9pZCAq KnBwX2J1Zl92YSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY21tX2NyZWF0ZSA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhIGNvbW11bmljYXRpb24gbWVtb3J5IG1hbmFnZXIg b2JqZWN0LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHBoX2NtbV9tZ3I6CUxvY2F0aW9uIHRv IHN0b3JlIGEgY29tbXVuaWNhdGlvbiBtYW5hZ2VyIGhhbmRsZSBvbgotICogICAgICAJCW91dHB1 dC4KLSAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCi0gKiAgICAg IG1ncl9hdHRydHM6IENvbW0gbWVtIG1hbmFnZXIgYXR0cmlidXRlcy4KLSAqICBSZXR1cm5zOgot ICogICAgICAwOiAgICAgICAgU3VjY2VzczsKLSAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNp ZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KLSAqICAgICAgLUVQRVJNOiAgICAg IEZhaWxlZCB0byBpbml0aWFsaXplIGNyaXRpY2FsIHNlY3Qgc3luYyBvYmplY3QuCi0gKgotICog IFJlcXVpcmVzOgotICogICAgICBwaF9jbW1fbWdyICE9IE5VTEwuCi0gKiAgICAgIG1ncl9hdHRy dHMtPm1pbl9ibG9ja19zaXplID49IDQgYnl0ZXMuCi0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4 dGVybiBpbnQgY21tX2NyZWF0ZShzdHJ1Y3QgY21tX29iamVjdCAqKnBoX2NtbV9tZ3IsCi0JCQkg ICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGNt bV9tZ3JhdHRycyAqbWdyX2F0dHJ0cyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY21tX2Rlc3Ryb3kg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEZXN0cm95IHRoZSBjb21tdW5pY2F0aW9u IG1lbW9yeSBtYW5hZ2VyIG9iamVjdC4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoY21tX21n cjogICBDbW0gTWdyIGhhbmRsZS4KLSAqICAgICAgZm9yY2U6ICAgICBGb3JjZSBkZWFsbG9jYXRp b24gb2YgYWxsIGNtbSBtZW1vcnkgaW1tZWRpYXRlbHkgaWYgc2V0IFRSVUUuCi0gKiAgICAgICAg ICAgICAgICAgSWYgRkFMU0UsIGFuZCBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyB3aWxsIHJldHVy biAtRVBFUk0KLSAqICAgICAgICAgICAgICAgICBzdGF0dXMuCi0gKiAgUmV0dXJuczoKLSAqICAg ICAgMDogICAgICAgIENNTSBvYmplY3QgJiByZXNvdXJjZXMgZGVsZXRlZC4KLSAqICAgICAgLUVQ RVJNOiAgICAgIFVuYWJsZSB0byBmcmVlIENNTSBvYmplY3QgZHVlIHRvIG91dHN0YW5kaW5nIGFs bG9jYXRpb24uCi0gKiAgICAgIC1FRkFVTFQ6ICAgIFVuYWJsZSB0byBmcmVlIENNTSBkdWUgdG8g YmFkIGhhbmRsZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgQ01NIGlzIGluaXRpYWxpemVkLgot ICogICAgICBoY21tX21nciAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIE1lbW9yeSBy ZXNvdXJjZXMgdXNlZCBieSBDbW0gTWdyIGFyZSBmcmVlZC4KLSAqLwotZXh0ZXJuIGludCBjbW1f ZGVzdHJveShzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsIGJvb2wgZm9yY2UpOwotCi0vKgot ICogID09PT09PT09IGNtbV9mcmVlX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IEZyZWUgdGhlIGdpdmVuIGJ1ZmZlci4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoY21tX21n cjogICAgQ21tIE1nciBoYW5kbGUuCi0gKiAgICAgIHBidWY6ICAgICAgIFBvaW50ZXIgdG8gbWVt b3J5IGFsbG9jYXRlZCBieSBjbW1fY2FsbG9jX2J1ZigpLgotICogICAgICB1bF9zZWdfaWQ6ICAg IFNNIHNlZ21lbnQgSWQgdXNlZCBpbiBDTU1fQ2FsbG9jKCkgYXR0cnMuCi0gKiAgICAgICAgICAg ICAgICAgIFNldCB0byAwIHRvIHVzZSBkZWZhdWx0IHNlZ21lbnQuCi0gKiAgUmV0dXJuczoKLSAq ICAgICAgMAotICogICAgICAtRVBFUk0KLSAqICBSZXF1aXJlczoKLSAqICAgICAgQ01NIGluaXRp YWxpemVkLgotICogICAgICBidWZfcGEgIT0gTlVMTAotICogIEVuc3VyZXM6Ci0gKgotICovCi1l eHRlcm4gaW50IGNtbV9mcmVlX2J1ZihzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCi0JCQkg ICAgICAgdm9pZCAqYnVmX3BhLCB1MzIgdWxfc2VnX2lkKTsKLQotLyoKLSAqICA9PT09PT09PSBj bW1fZ2V0X2hhbmRsZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHVybiB0aGUg aGFuZGxlIHRvIHRoZSBjbW0gbWdyIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIG9iai4KLSAqICBQYXJh bWV0ZXJzOgotICogICAgICBocHJvY2Vzc29yOiAgIEhhbmRsZSB0byBhIFByb2Nlc3Nvci4KLSAq ICAgICAgcGhfY21tX21ncjoJTG9jYXRpb24gdG8gc3RvcmUgdGhlIHNoYXJlZCBtZW1vcnkgbWdy IGhhbmRsZSBvbgotICogICAgICAJCW91dHB1dC4KLSAqCi0gKiAgUmV0dXJuczoKLSAqICAgICAg MDogICAgICAgIENtbSBNZ3Igb3BhcXVlIGhhbmRsZSByZXR1cm5lZC4KLSAqICAgICAgLUVGQVVM VDogICAgSW52YWxpZCBoYW5kbGUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHBoX2NtbV9tZ3Ig IT0gTlVMTAotICogICAgICBoZGV2X29iaiAhPSBOVUxMCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0 ZXJuIGludCBjbW1fZ2V0X2hhbmRsZSh2b2lkICpocHJvY2Vzc29yLAotCQkJCSBzdHJ1Y3QgY21t X29iamVjdCAqKnBoX2NtbV9tZ3IpOwotCi0vKgotICogID09PT09PT09IGNtbV9nZXRfaW5mbyA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHVybiB0aGUgY3VycmVudCBTTSBhbmQg Vk0gdXRpbGl6YXRpb24gaW5mb3JtYXRpb24uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGNt bV9tZ3I6ICAgICBIYW5kbGUgdG8gYSBDbW0gTWdyLgotICogICAgICBjbW1faW5mb19vYmo6ICAg IExvY2F0aW9uIHRvIHN0b3JlIHRoZSBDbW0gaW5mb3JtYXRpb24gb24gb3V0cHV0LgotICoKLSAq ICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDog ICAgSW52YWxpZCBoYW5kbGUuCi0gKiAgICAgIC1FSU5WQUwgSW52YWxpZCBpbnB1dCBhcmd1bWVu dC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICoKLSAqLwotZXh0ZXJuIGludCBjbW1f Z2V0X2luZm8oc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLAotCQkJICAgICAgIHN0cnVjdCBj bW1faW5mbyAqY21tX2luZm9fb2JqKTsKLQotLyoKLSAqICA9PT09PT09PSBjbW1fcmVnaXN0ZXJf Z3Bwc21fc2VnID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVnaXN0ZXIgYSBibG9j ayBvZiBTTSB3aXRoIHRoZSBDTU0uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGNtbV9tZ3I6 ICAgICAgICAgSGFuZGxlIHRvIGEgQ21tIE1nci4KLSAqICAgICAgbHBHUFBCYXNlUEE6ICAgICBH UFAgQmFzZSBQaHlzaWNhbCBhZGRyZXNzLgotICogICAgICB1bF9zaXplOiAgICAgICAgICBTaXpl IGluIEdQUCBieXRlcy4KLSAqICAgICAgZHNwX2FkZHJfb2Zmc2V0ICBHUFAgUEEgdG8gRFNQIFBB IE9mZnNldC4KLSAqICAgICAgY19mYWN0b3I6ICAgICAgICAgQWRkIG9mZnNldCBpZiBDTU1fQURE VE9EU1BQQSwgc3ViIGlmIENNTV9TVUJGUk9NRFNQUEEuCi0gKiAgICAgIGR3X2RzcF9iYXNlOiAg ICAgICBEU1AgdmlydHVhbCBiYXNlIGJ5dGUgYWRkcmVzcy4KLSAqICAgICAgdWxfZHNwX3NpemU6 ICAgICAgIFNpemUgb2YgRFNQIHNlZ21lbnQgaW4gYnl0ZXMuCi0gKiAgICAgIHNnbXRfaWQ6ICAg ICAgICAgQWRkcmVzcyB0byBzdG9yZSBzZWdtZW50IElkLgotICoKLSAqICBSZXR1cm5zOgotICog ICAgICAwOiAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6ICAgICBJbnZhbGlkIGhj bW1fbWdyIGhhbmRsZS4KLSAqICAgICAgLUVJTlZBTDogSW52YWxpZCBpbnB1dCBhcmd1bWVudC4K LSAqICAgICAgLUVQRVJNOiAgICAgICBVbmFibGUgdG8gcmVnaXN0ZXIuCi0gKiAgICAgIC0gT24g c3VjY2VzcyAqc2dtdF9pZCBpcyBhIHZhbGlkIFNNIHNlZ21lbnQgSUQuCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIHVsX3NpemUgPiAwCi0gKiAgICAgIHNnbXRfaWQgIT0gTlVMTAotICogICAgICBk d19ncHBfYmFzZV9wYSAhPSAwCi0gKiAgICAgIGNfZmFjdG9yID0gQ01NX0FERFRPRFNQUEEgfHwg Y19mYWN0b3IgPSBDTU1fU1VCRlJPTURTUFBBCi0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVy biBpbnQgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3Is Ci0JCQkJCSB1bnNpZ25lZCBpbnQgZHdfZ3BwX2Jhc2VfcGEsCi0JCQkJCSB1MzIgdWxfc2l6ZSwK LQkJCQkJIHUzMiBkc3BfYWRkcl9vZmZzZXQsCi0JCQkJCSBzOCBjX2ZhY3RvciwKLQkJCQkJIHVu c2lnbmVkIGludCBkd19kc3BfYmFzZSwKLQkJCQkJIHUzMiB1bF9kc3Bfc2l6ZSwKLQkJCQkJIHUz MiAqc2dtdF9pZCwgdTMyIGdwcF9iYXNlX3ZhKTsKLQotLyoKLSAqICA9PT09PT09PSBjbW1fdW5f cmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgVW5yZWdp c3RlciB0aGUgZ2l2ZW4gbWVtb3J5IHNlZ21lbnQgdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3Rl cmVkCi0gKiAgICAgIGJ5IGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWcuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgaGNtbV9tZ3I6ICAgIEhhbmRsZSB0byBhIENtbSBNZ3IuCi0gKiAgICAgIHVsX3Nl Z19pZCAgICAgU2VnbWVudCBpZGVudGlmaWVyIHJldHVybmVkIGJ5IGNtbV9yZWdpc3Rlcl9ncHBz bV9zZWcuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgIDA6ICAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgIC1FRkFVTFQ6ICAgICBJbnZhbGlkIGhhbmRsZS4KLSAqICAgICAgIC1FSU5WQUw6IEludmFs aWQgdWxfc2VnX2lkLgotICogICAgICAgLUVQRVJNOiAgICAgICBVbmFibGUgdG8gdW5yZWdpc3Rl ciBmb3IgdW5rbm93biByZWFzb24uCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqCi0g Ki8KLWV4dGVybiBpbnQgY21tX3VuX3JlZ2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX29iamVj dCAqaGNtbV9tZ3IsCi0JCQkJCSAgICB1MzIgdWxfc2VnX2lkKTsKLQotLyoKLSAqICA9PT09PT09 PSBjbW1feGxhdG9yX2FsbG9jX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEFs bG9jYXRlIHRoZSBzcGVjaWZpZWQgU00gYnVmZmVyIGFuZCBjcmVhdGUgYSBsb2NhbCBtZW1vcnkg ZGVzY3JpcHRvci4KLSAqICAgICAgUGxhY2Ugb24gdGhlIGRlc2NyaXB0b3Igb24gdGhlIHRyYW5z bGF0b3IncyBIYVEgKEhvc3QgQWxsb2MnZCBRdWV1ZSkuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAg ICAgeGxhdG9yOiAgICBIYW5kbGUgdG8gYSBYbGF0b3Igb2JqZWN0LgotICogICAgICB2YV9idWY6 ICAgICBWaXJ0dWFsIGFkZHJlc3MgcHRyKGNsaWVudCBjb250ZXh0KQotICogICAgICBwYV9zaXpl OiAgICBTaXplIG9mIFNNIG1lbW9yeSB0byBhbGxvY2F0ZS4KLSAqICBSZXR1cm5zOgotICogICAg ICBQdHIgdG8gdmFsaWQgcGh5c2ljYWwgYWRkcmVzcyhQYSkgb2YgcGFfc2l6ZSBieXRlcywgTlVM TCBpZiBmYWlsZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHZhX2J1ZiAhPSAwLgotICogICAg ICBwYV9zaXplICE9IDAuCi0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVybiB2b2lkICpjbW1f eGxhdG9yX2FsbG9jX2J1ZihzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAotCQkJCSAg dm9pZCAqdmFfYnVmLCB1MzIgcGFfc2l6ZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY21tX3hsYXRv cl9jcmVhdGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgIENyZWF0ZSBhIHRyYW5zbGF0 b3IoeGxhdG9yKSBvYmplY3QgdXNlZCBmb3IgcHJvY2VzcyBzcGVjaWZpYyBWYTwtPlBhCi0gKiAg ICAgYWRkcmVzcyB0cmFuc2xhdGlvbi4gTm9kZSBtZXNzYWdpbmcgYW5kIHN0cmVhbXMgdXNlIHRo aXMgdG8gcGVyZm9ybQotICogICAgIGludGVyLXByb2Nlc3NvcihHUFA8LT5EU1ApIHplcm8tY29w eSBkYXRhIHRyYW5zZmVyLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgeGxhdG9yOiAgICAgICAg IEFkZHJlc3MgdG8gcGxhY2UgaGFuZGxlIHRvIGEgbmV3IFhsYXRvciBoYW5kbGUuCi0gKiAgICAg aGNtbV9tZ3I6ICAgICAgICBIYW5kbGUgdG8gQ21tIE1nciBhc3NvY2lhdGVkIHdpdGggdGhpcyB0 cmFuc2xhdG9yLgotICogICAgIHhsYXRvcl9hdHRyczogICBUcmFuc2xhdG9yIGF0dHJpYnV0ZXMg dXNlZCBmb3IgdGhlIGNsaWVudCBOT0RFIG9yIFNUUkVBTS4KLSAqICBSZXR1cm5zOgotICogICAg IDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAtRUlOVkFMOiAgICBCYWQgaW5wdXQgQXR0 cnMuCi0gKiAgICAgLUVOT01FTTogICBJbnN1ZmZpY2llbnQgbWVtb3J5KGxvY2FsKSBmb3IgcmVx dWVzdGVkIHJlc291cmNlcy4KLSAqICBSZXF1aXJlczoKLSAqICAgICB4bGF0b3IgIT0gTlVMTAot ICogICAgIGhjbW1fbWdyICE9IE5VTEwKLSAqICAgICB4bGF0b3JfYXR0cnMgIT0gTlVMTAotICog IEVuc3VyZXM6Ci0gKgotICovCi1leHRlcm4gaW50IGNtbV94bGF0b3JfY3JlYXRlKHN0cnVjdCBj bW1feGxhdG9yb2JqZWN0ICoqeGxhdG9yLAotCQkJCSAgICBzdHJ1Y3QgY21tX29iamVjdCAqaGNt bV9tZ3IsCi0JCQkJICAgIHN0cnVjdCBjbW1feGxhdG9yYXR0cnMgKnhsYXRvcl9hdHRycyk7Ci0K LS8qCi0gKiAgPT09PT09PT0gY21tX3hsYXRvcl9mcmVlX2J1ZiA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIEZyZWUgU00gYnVmZmVyIGFuZCBkZXNjcmlwdG9yLgotICogICAgICBEb2Vz IG5vdCBmcmVlIGNsaWVudCBwcm9jZXNzIFZNLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHhs YXRvcjogICAgaGFuZGxlIHRvIHRyYW5zbGF0b3IuCi0gKiAgICAgIGJ1Zl92YSAgICAgIFZpcnR1 YWwgYWRkcmVzcyBvZiBQQSB0byBmcmVlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAg ICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBCYWQgdHJhbnNsYXRvciBoYW5kbGUuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVybiBpbnQgY21tX3hsYXRv cl9mcmVlX2J1ZihzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAotCQkJCSAgICAgIHZv aWQgKmJ1Zl92YSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY21tX3hsYXRvcl9pbmZvID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2V0L0dldCBwcm9jZXNzIHNwZWNpZmljICJ0cmFuc2xh dG9yIiBhZGRyZXNzIGluZm8uCi0gKiAgICAgIFRoaXMgaXMgdXNlZCB0byBwZXJmb3JtIGZhc3Qg dmlydHVhbCBhZGRyZXNzIHRyYW5zbGF0aW9uCi0gKiAgICAgIGZvciBzaGFyZWQgbWVtb3J5IGJ1 ZmZlcnMgYmV0d2VlbiB0aGUgR1BQIGFuZCBEU1AuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICB4 bGF0b3I6ICAgICBoYW5kbGUgdG8gdHJhbnNsYXRvci4KLSAqICAgICBwYWRkcjogICAgICAgVmly dHVhbCBiYXNlIGFkZHJlc3Mgb2Ygc2VnbWVudC4KLSAqICAgICB1bF9zaXplOiAgICAgIFNpemUg aW4gYnl0ZXMuCi0gKiAgICAgc2VnbV9pZDogICAgIFNlZ21lbnQgaWRlbnRpZmllciBvZiBTTSBz ZWdtZW50KHMpCi0gKiAgICAgc2V0X2luZm8gICAgIFNldCB4bGF0b3IgZmllbGRzIGlmIFRSVUUs IGVsc2UgcmV0dXJuIGJhc2UgYWRkcgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBT dWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBCYWQgdHJhbnNsYXRvciBoYW5kbGUuCi0gKiAg UmVxdWlyZXM6Ci0gKiAgICAgIChwYWRkciAhPSBOVUxMKQotICogICAgICAodWxfc2l6ZSA+IDAp Ci0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVybiBpbnQgY21tX3hsYXRvcl9pbmZvKHN0cnVj dCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsCi0JCQkJICB1OCAqKnBhZGRyLAotCQkJCSAgdTMy IHVsX3NpemUsIHUzMiBzZWdtX2lkLCBib29sIHNldF9pbmZvKTsKLQotLyoKLSAqICA9PT09PT09 PSBjbW1feGxhdG9yX3RyYW5zbGF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFBl cmZvcm0gYWRkcmVzcyB0cmFuc2xhdGlvbiBWQTwtPlBBIGZvciB0aGUgc3BlY2lmaWVkIHN0cmVh bSBvcgotICogICAgICBtZXNzYWdlIHNoYXJlZCBtZW1vcnkgYnVmZmVyLgotICogIFBhcmFtZXRl cnM6Ci0gKiAgICAgeGxhdG9yOiBoYW5kbGUgdG8gdHJhbnNsYXRvci4KLSAqICAgICBwYWRkciAg ICBhZGRyZXNzIG9mIGJ1ZmZlciB0byB0cmFuc2xhdGUuCi0gKiAgICAgeHR5cGUgICAgVHlwZSBv ZiBhZGRyZXNzIHhsYXRpb24uIENNTV9QQTJWQSBvciBDTU1fVkEyUEEuCi0gKiAgUmV0dXJuczoK LSAqICAgICBWYWxpZCBhZGRyZXNzIG9uIHN1Y2Nlc3MsIGVsc2UgTlVMTC4KLSAqICBSZXF1aXJl czoKLSAqICAgICAgcGFkZHIgIT0gTlVMTAotICogICAgICB4dHlwZSA+PSBDTU1fVkEyUEEpICYm ICh4dHlwZSA8PSBDTU1fRFNQUEEyUEEpCi0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVybiB2 b2lkICpjbW1feGxhdG9yX3RyYW5zbGF0ZShzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9y LAotCQkJCSAgdm9pZCAqcGFkZHIsIGVudW0gY21tX3hsYXRldHlwZSB4dHlwZSk7Ci0KLSNlbmRp ZiAvKiBDTU1fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5j bHVkZS9kc3BicmlkZ2UvY21tZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL2NtbWRlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YTI2NGZhNjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL2NtbWRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0v KgotICogY21tZGVmcy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1 bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIEdsb2JhbCBNRU0gY29uc3Rh bnRzIGFuZCB0eXBlcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVu dHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQ Uk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0g KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBDTU1ERUZTXwotI2RlZmluZSBDTU1ERUZTXwot Ci0KLS8qIENtbSBhdHRyaWJ1dGVzIHVzZWQgaW4gY21tX2NyZWF0ZSgpICovCi1zdHJ1Y3QgY21t X21ncmF0dHJzIHsKLQkvKiBNaW5pbXVtIFNNIGFsbG9jYXRpb247IGRlZmF1bHQgMzIgYnl0ZXMu ICovCi0JdTMyIG1pbl9ibG9ja19zaXplOwotfTsKLQotLyogQXR0cmlidXRlcyBmb3IgQ01NX0Fs bG9jQnVmKCkgJiBDTU1fQWxsb2NEZXNjKCkgKi8KLXN0cnVjdCBjbW1fYXR0cnMgewotCXUzMiBz ZWdfaWQ7CQkvKiAgMSwyLi4uIGFyZSBTTSBzZWdtZW50cy4gMCBpcyBub3QuICovCi0JdTMyIGFs aWdubWVudDsJCS8qICAwLDEsMiw0Li4uLm1pbl9ibG9ja19zaXplICovCi19OwotCi0vKgotICog IERTUFBhIHRvIEdQUFBhIENvbnZlcnNpb24gRmFjdG9yLgotICoKLSAqICBGb3IgdHlwaWNhbCBw bGF0Zm9ybXM6Ci0gKiAgICAgIGNvbnZlcnRlZCBBZGRyZXNzID0gUGFEU1AgKyAoIGNfZmFjdG9y ICogYWRkcmVzc1RvQ29udmVydCkuCi0gKi8KLSNkZWZpbmUgQ01NX1NVQkZST01EU1BQQQktMQot I2RlZmluZSBDTU1fQUREVE9EU1BQQQkJMQotCi0jZGVmaW5lIENNTV9BTExTRUdNRU5UUyAgICAg ICAgIDB4RkZGRkZGCS8qIEFsbCBTZWdJZHMgKi8KLSNkZWZpbmUgQ01NX01BWEdQUFNFR1MgICAg ICAgICAgMQkvKiBNYXhpbXVtICMgb2YgU00gc2VncyAqLwotCi0vKgotICogIFNNU0VHcyBhcmUg U00gc2VnbWVudHMgdGhlIERTUCBhbGxvY2F0ZXMgZnJvbS4KLSAqCi0gKiAgVGhpcyBpbmZvIGlz IHVzZWQgYnkgdGhlIEdQUCB0byB4bGF0ZSBEU1AgYWxsb2NhdGVkIFBBcy4KLSAqLwotCi1zdHJ1 Y3QgY21tX3NlZ2luZm8gewotCXUzMiBzZWdfYmFzZV9wYTsJLyogU3RhcnQgUGh5cyBhZGRyZXNz IG9mIFNNIHNlZ21lbnQgKi8KLQkvKiBUb3RhbCBzaXplIGluIGJ5dGVzIG9mIHNlZ21lbnQ6IERT UCtHUFAgKi8KLQl1MzIgdG90YWxfc2VnX3NpemU7Ci0JdTMyIGdwcF9iYXNlX3BhOwkvKiBTdGFy dCBQaHlzIGFkZHIgb2YgR3BwIFNNIHNlZyAqLwotCXUzMiBncHBfc2l6ZTsJLyogU2l6ZSBvZiBH cHAgU00gc2VnIGluIGJ5dGVzICovCi0JdTMyIGRzcF9iYXNlX3ZhOwkvKiBEU1AgdmlydCBiYXNl IGJ5dGUgYWRkcmVzcyAqLwotCXUzMiBkc3Bfc2l6ZTsJCS8qIERTUCBzZWcgc2l6ZSBpbiBieXRl cyAqLwotCS8qICMgb2YgY3VycmVudCBHUFAgYWxsb2NhdGlvbnMgZnJvbSB0aGlzIHNlZ21lbnQg Ki8KLQl1MzIgaW5fdXNlX2NudDsKLQl1MzIgc2VnX2Jhc2VfdmE7CS8qIFN0YXJ0IFZpcnQgYWRk cmVzcyBvZiBTTSBzZWcgKi8KLQotfTsKLQotLyogQ01NIHVzZWZ1bCBpbmZvcm1hdGlvbiAqLwot c3RydWN0IGNtbV9pbmZvIHsKLQkvKiAjIG9mIFNNIHNlZ21lbnRzIHJlZ2lzdGVyZWQgd2l0aCB0 aGlzIENtbS4gKi8KLQl1MzIgbnVtX2dwcHNtX3NlZ3M7Ci0JLyogVG90YWwgIyBvZiBhbGxvY2F0 aW9ucyBvdXRzdGFuZGluZyBmb3IgQ01NICovCi0JdTMyIHRvdGFsX2luX3VzZV9jbnQ7Ci0JLyog TWluIFNNIGJsb2NrIHNpemUgYWxsb2NhdGlvbiBmcm9tIGNtbV9jcmVhdGUoKSAqLwotCXUzMiBt aW5fYmxvY2tfc2l6ZTsKLQkvKiBJbmZvIHBlciByZWdpc3RlcmVkIFNNIHNlZ21lbnQuICovCi0J c3RydWN0IGNtbV9zZWdpbmZvIHNlZ19pbmZvW0NNTV9NQVhHUFBTRUdTXTsKLX07Ci0KLS8qIFhs YXRvckNyZWF0ZSBhdHRyaWJ1dGVzICovCi1zdHJ1Y3QgY21tX3hsYXRvcmF0dHJzIHsKLQl1MzIg c2VnX2lkOwkJLyogc2VnbWVudCBJZCB1c2VkIGZvciBTTSBhbGxvY2F0aW9ucyAqLwotCXUzMiBk c3BfYnVmczsJCS8qICMgb2YgRFNQLXNpZGUgYnVmcyAqLwotCXUzMiBkc3BfYnVmX3NpemU7CS8q IHNpemUgb2YgRFNQLXNpZGUgYnVmcyBpbiBHUFAgYnl0ZXMgKi8KLQkvKiBWbSBiYXNlIGFkZHJl c3MgYWxsb2MnZCBpbiBjbGllbnQgcHJvY2VzcyBjb250ZXh0ICovCi0Jdm9pZCAqdm1fYmFzZTsK LQkvKiB2bV9zaXplIG11c3QgYmUgPj0gKGR3TWF4TnVtQnVmcyAqIGR3TWF4U2l6ZSkgKi8KLQl1 MzIgdm1fc2l6ZTsKLX07Ci0KLS8qCi0gKiBDbW0gdHJhbnNsYXRpb24gdHlwZXMuIFVzZSB0byBt YXAgU00gYWRkcmVzc2VzIHRvIHByb2Nlc3MgY29udGV4dC4KLSAqLwotZW51bSBjbW1feGxhdGV0 eXBlIHsKLQlDTU1fVkEyUEEgPSAwLAkJLyogVmlydHVhbCB0byBHUFAgcGh5c2ljYWwgYWRkcmVz cyB4bGF0aW9uICovCi0JQ01NX1BBMlZBID0gMSwJCS8qIEdQUCBQaHlzaWNhbCB0byB2aXJ0dWFs ICovCi0JQ01NX1ZBMkRTUFBBID0gMiwJLyogVmEgdG8gRFNQIFBhICovCi0JQ01NX1BBMkRTUFBB ID0gMywJLyogR1BQIFBhIHRvIERTUCBQYSAqLwotCUNNTV9EU1BQQTJQQSA9IDQsCS8qIERTUCBQ YSB0byBHUFAgUGEgKi8KLX07Ci0KLXN0cnVjdCBjbW1fb2JqZWN0Owotc3RydWN0IGNtbV94bGF0 b3JvYmplY3Q7Ci0KLSNlbmRpZiAvKiBDTU1ERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oIGIvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBiYTIwMDVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyOSAr MCwwIEBACi0vKgotICogY29kLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBv cnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29kZSBtYW5hZ2Vt ZW50IG1vZHVsZSBmb3IgRFNQcy4gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlCi0g KiBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMgY29kZSBvYmpl Y3RzIG9udG8gRFNQCi0gKiBzeXN0ZW1zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2 IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz Ci0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBU SElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNT IE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9O LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgQ09EXwotI2RlZmlu ZSBDT0RfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbGRlZnMuaD4KLQotI2RlZmluZSBDT0Rf TUFYUEFUSExFTkdUSCAgICAgICAyNTUKLSNkZWZpbmUgQ09EX1RSQUNFQkVHICAgICAgICAgICAg IlNZU19QVVRDQkVHIgotI2RlZmluZSBDT0RfVFJBQ0VFTkQgICAgICAgICAgICAiU1lTX1BVVENF TkQiCi0jZGVmaW5lIENPRF9UUkFDRUNVUlBPUwkiQlJJREdFX1NZU19QVVRDX2N1cnJlbnQiCi0K LSNkZWZpbmUgQ09EX05PTE9BRCAgICAgICAgICAgICAgREJMTF9OT0xPQUQKLSNkZWZpbmUgQ09E X1NZTUIgICAgICAgICAgICAgICAgREJMTF9TWU1CCi0KLS8qIENPRCBjb2RlIG1hbmFnZXIgaGFu ZGxlICovCi1zdHJ1Y3QgY29kX21hbmFnZXI7Ci0KLS8qIENPRCBsaWJyYXJ5IGhhbmRsZSAqLwot c3RydWN0IGNvZF9saWJyYXJ5b2JqOwotCi0vKgotICogIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9y IHdyaXRpbmcgbWVtb3J5IHRvIGEgRFNQIHN5c3RlbSwgYWxsb2NhdGluZwotICogIGFuZCBmcmVl aW5nIERTUCBtZW1vcnkuCi0gKi8KLXR5cGVkZWYgdTMyKCpjb2Rfd3JpdGVmeG4pICh2b2lkICpw cml2X3JlZiwgdTMyIGRzcF9hZGQsCi0JCQkgICAgdm9pZCAqcGJ1ZiwgdTMyIHVsX251bV9ieXRl cywgdTMyIG1lbV9zcGFjZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX2Nsb3NlID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ2xvc2UgYSBsaWJyYXJ5IG9wZW5lZCB3aXRoIGNvZF9v cGVuKCkuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgbGliICAgICAgICAgICAgIC0gTGlicmFy eSBoYW5kbGUgcmV0dXJuZWQgYnkgY29kX29wZW4oKS4KLSAqICBSZXR1cm5zOgotICogICAgICBO b25lLgotICogIFJlcXVpcmVzOgotICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgotICog ICAgICB2YWxpZCBsaWIuCi0gKiAgRW5zdXJlczoKLSAqCi0gKi8KLWV4dGVybiB2b2lkIGNvZF9j bG9zZShzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYik7Ci0KLS8qCi0gKiAgPT09PT09PT0gY29k X2NyZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhbiBvYmplY3Qg dG8gbWFuYWdlIGNvZGUgb24gYSBEU1Agc3lzdGVtLiBUaGlzIG9iamVjdCBjYW4gYmUKLSAqICAg ICAgdXNlZCB0byBsb2FkIGFuIGluaXRpYWwgcHJvZ3JhbSBpbWFnZSB3aXRoIGFyZ3VtZW50cyB0 aGF0IGNhbiBsYXRlcgotICogICAgICBiZSBleHBhbmRlZCB3aXRoIGR5bmFtaWNhbGx5IGxvYWRl ZCBvYmplY3QgZmlsZXMuCi0gKiAgICAgIFN5bWJvbCB0YWJsZSBpbmZvcm1hdGlvbiBpcyBtYW5h Z2VkIGJ5IHRoaXMgb2JqZWN0IGFuZCBjYW4gYmUgcmV0cmlldmVkCi0gKiAgICAgIHVzaW5nIHRo ZSBjb2RfZ2V0X3N5bV92YWx1ZSgpIGZ1bmN0aW9uLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAg IG1hbmFnZXI6ICAgICAgICBjcmVhdGVkIG1hbmFnZXIgb2JqZWN0Ci0gKiAgICAgIHN0cl96bF9m aWxlOiAgICBaTCBETEwgZmlsZW5hbWUsIG9mIGxlbmd0aCA8IENPRF9NQVhQQVRITEVOR1RILgot ICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAg IC1FU1BJUEU6ICAgWkxfQ3JlYXRlIGZhaWxlZC4KLSAqICAgICAgLUVOT1NZUzogICAgICAgICAg IGF0dHJzIHdhcyBub3QgTlVMTC4gIFdlIGRvbid0IHlldCBzdXBwb3J0Ci0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5vbiBkZWZhdWx0IHZhbHVlcyBvZiBhdHRycy4KLSAqICBSZXF1 aXJlczoKLSAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KLSAqICAgICAgc3RyX3psX2Zp bGUgIT0gTlVMTAotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgY29kX2NyZWF0ZShzdHJ1 Y3QgY29kX21hbmFnZXIgKiptZ3IsCi0JCQkgICAgIGNoYXIgKnN0cl96bF9maWxlKTsKLQotLyoK LSAqICA9PT09PT09PSBjb2RfZGVsZXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg RGVsZXRlIGEgY29kZSBtYW5hZ2VyIG9iamVjdC4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBj b2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCi0gKiAgUmV0dXJu czoKLSAqICAgICAgTm9uZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgQ09EIG1vZHVsZSBpbml0 aWFsaXplZC4KLSAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCi0gKiAgRW5zdXJlczoKLSAqLwot ZXh0ZXJuIHZvaWQgY29kX2RlbGV0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKTsK LQotLyoKLSAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbGliID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgR2V0IGhhbmRsZSB0byB0aGUgYmFzZSBpbWFnZSBEQkwgbGlicmFyeS4KLSAq ICBQYXJhbWV0ZXJzOgotICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0 byBiZSBkZWxldGVkCi0gKiAgICAgIHBsaWI6ICAgICAgIGxvY2F0aW9uIHRvIHN0b3JlIGxpYnJh cnkgaGFuZGxlIG9uIG91dHB1dC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICBTdWNjZXNz LgotICogIFJlcXVpcmVzOgotICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgotICogICAg ICB2YWxpZCBjb2RfbWdyX29iai4KLSAqICAgICAgcGxpYiAhPSBOVUxMLgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiBpbnQgY29kX2dldF9iYXNlX2xpYihzdHJ1Y3QgY29kX21hbmFnZXIgKmNv ZF9tZ3Jfb2JqLAotCQkJCSAgIHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICoqcGxpYik7Ci0KLS8q Ci0gKiAgPT09PT09PT0gY29kX2dldF9iYXNlX25hbWUgPT09PT09PT0KLSAqICBQdXJwb3NlOgot ICogICAgICBHZXQgdGhlIG5hbWUgb2YgdGhlIGJhc2UgaW1hZ2UgREJMIGxpYnJhcnkuCi0gKiAg UGFyYW1ldGVyczoKLSAqICAgICAgY29kX21ncl9vYmo6ICAgaGFuZGxlIG9mIG1hbmFnZXIgdG8g YmUgZGVsZXRlZAotICogICAgICBzel9uYW1lOiAgICBsb2NhdGlvbiB0byBzdG9yZSBsaWJyYXJ5 IG5hbWUgb24gb3V0cHV0LgotICogICAgICB1c2l6ZTogICAgICAgc2l6ZSBvZiBuYW1lIGJ1ZmZl ci4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICBTdWNjZXNzLgotICogICAgICAtRVBFUk06 ICBCdWZmZXIgdG9vIHNtYWxsLgotICogIFJlcXVpcmVzOgotICogICAgICBDT0QgbW9kdWxlIGlu aXRpYWxpemVkLgotICogICAgICB2YWxpZCBjb2RfbWdyX29iai4KLSAqICAgICAgc3pfbmFtZSAh PSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgY29kX2dldF9iYXNlX25hbWUo c3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKLQkJCQkgICAgY2hhciAqc3pfbmFtZSwg dTMyIHVzaXplKTsKLQotLyoKLSAqICA9PT09PT09PSBjb2RfZ2V0X2VudHJ5ID09PT09PT09Ci0g KiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIGVudHJ5IHBvaW50IG9mIGEgbG9hZGVk IERTUCBwcm9ncmFtIGltYWdlCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgY29kX21ncl9vYmo6 ICAgaGFuZGxlIG9mIG1hbmFnZXIgdG8gYmUgZGVsZXRlZAotICogICAgICBlbnRyeV9wdDogICBw b2ludGVyIHRvIGxvY2F0aW9uIGZvciBlbnRyeSBwb2ludAotICogIFJldHVybnM6Ci0gKiAgICAg IDA6ICAgICAgIFN1Y2Nlc3MuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIENPRCBtb2R1bGUgaW5p dGlhbGl6ZWQuCi0gKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgotICogICAgICBlbnRyeV9wdCAh PSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgY29kX2dldF9lbnRyeShzdHJ1 Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAotCQkJCXUzMiAqZW50cnlfcHQpOwotCi0vKgot ICogID09PT09PT09IGNvZF9nZXRfbG9hZGVyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICAgR2V0IGhhbmRsZSB0byB0aGUgREJMIGxvYWRlci4KLSAqICBQYXJhbWV0ZXJzOgotICogICAg ICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCi0gKiAgICAg IGxvYWRlcjogICAgIGxvY2F0aW9uIHRvIHN0b3JlIGxvYWRlciBoYW5kbGUgb24gb3V0cHV0Lgot ICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCi0gKiAgUmVxdWlyZXM6Ci0gKiAg ICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgot ICogICAgICBsb2FkZXIgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IGNv ZF9nZXRfbG9hZGVyKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCi0JCQkJIHN0cnVj dCBkYmxsX3Rhcl9vYmogKipsb2FkZXIpOwotCi0vKgotICogID09PT09PT09IGNvZF9nZXRfc2Vj dGlvbiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBzdGFydGlu ZyBhZGRyZXNzIGFuZCBsZW5ndGggb2YgYSBzZWN0aW9uIGluIHRoZSBDT0ZGIGZpbGUKLSAqICAg ICAgZ2l2ZW4gdGhlIHNlY3Rpb24gbmFtZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBsaWIg ICAgICAgICBMaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBmcm9tIGNvZF9vcGVuKCkuCi0gKiAgICAg IHN0cl9zZWN0OiAgIG5hbWUgb2YgdGhlIHNlY3Rpb24sIHdpdGggb3Igd2l0aG91dCBsZWFkaW5n ICIuIgotICogICAgICBhZGRyOiAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBhZGRyZXNzLgotICog ICAgICBsZW46ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBsZW5ndGguCi0gKiAgUmV0dXJuczoK LSAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2VzcwotICogICAgICAtRVNQSVBFOiAgU3lt Ym9scyBjb3VsZCBub3QgYmUgZm91bmQgb3IgaGF2ZSBub3QgYmVlbiBsb2FkZWQgb250bwotICog ICAgICAgICAgICAgICAgdGhlIGJvYXJkLgotICogIFJlcXVpcmVzOgotICogICAgICBDT0QgbW9k dWxlIGluaXRpYWxpemVkLgotICogICAgICB2YWxpZCBjb2RfbWdyX29iai4KLSAqICAgICAgc3Ry X3NlY3QgIT0gTlVMTDsKLSAqICAgICAgYWRkciAhPSBOVUxMOwotICogICAgICBsZW4gIT0gTlVM TDsKLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgKmFkZHIgYW5kICpsZW4gY29udGFpbiB0aGUg YWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZQotICogICAgICAgICAgICAgICAgIHNlY3Rpb24uCi0g KiAgICAgIGVsc2U6ICAqYWRkciA9PSAwIGFuZCAqbGVuID09IDA7Ci0gKgotICovCi1leHRlcm4g aW50IGNvZF9nZXRfc2VjdGlvbihzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYiwKLQkJCQkgIGNo YXIgKnN0cl9zZWN0LAotCQkJCSAgdTMyICphZGRyLCB1MzIgKmxlbik7Ci0KLS8qCi0gKiAgPT09 PT09PT0gY29kX2dldF9zeW1fdmFsdWUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBS ZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sLiBUaGUgc3ltYm9sIGlz IGZpcnN0Ci0gKiAgICAgIHNlYXJjaGVkIGZvciBsaXRlcmFsbHkgYW5kIHRoZW4sIGlmIG5vdCBm b3VuZCwgc2VhcmNoZWQgZm9yIGFzIGEKLSAqICAgICAgQyBzeW1ib2wuCi0gKiAgUGFyYW1ldGVy czoKLSAqICAgICAgbGliOiAgICAgICAgbGlicmFyeSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBjb2Rf b3BlbigpLgotICogICAgICBwc3RyU3ltYm9sOiBuYW1lIG9mIHRoZSBzeW1ib2wKLSAqICAgICAg dmFsdWU6ICAgICAgdmFsdWUgb2YgdGhlIHN5bWJvbAotICogIFJldHVybnM6Ci0gKiAgICAgIDA6 ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGNvdWxk IG5vdCBiZSBmb3VuZCBvciBoYXZlIG5vdCBiZWVuIGxvYWRlZCBvbnRvCi0gKiAgICAgICAgICAg ICAgICB0aGUgYm9hcmQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIENPRCBtb2R1bGUgaW5pdGlh bGl6ZWQuCi0gKiAgICAgIFZhbGlkIGNvZF9tZ3Jfb2JqLgotICogICAgICBzdHJfc3ltICE9IE5V TEwuCi0gKiAgICAgIHB1bF92YWx1ZSAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVy biBpbnQgY29kX2dldF9zeW1fdmFsdWUoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwK LQkJCQkgICAgY2hhciAqc3RyX3N5bSwgdTMyICogcHVsX3ZhbHVlKTsKLQotLyoKLSAqICA9PT09 PT09PSBjb2RfbG9hZF9iYXNlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgTG9hZCB0 aGUgaW5pdGlhbCBwcm9ncmFtIGltYWdlLCBvcHRpb25hbGx5IHdpdGggY29tbWFuZC1saW5lIGFy Z3VtZW50cywKLSAqICAgICAgb24gdGhlIERTUCBzeXN0ZW0gbWFuYWdlZCBieSB0aGUgc3VwcGxp ZWQgaGFuZGxlLiBUaGUgcHJvZ3JhbSB0byBiZQotICogICAgICBsb2FkZWQgbXVzdCBiZSB0aGUg Zmlyc3QgZWxlbWVudCBvZiB0aGUgYXJncyBhcnJheSBhbmQgbXVzdCBiZSBhIGZ1bGx5Ci0gKiAg ICAgIHF1YWxpZmllZCBwYXRobmFtZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobWdyOiAg ICAgICBtYW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAotICogICAgICBudW1fYXJnYzogICBu dW1iZXIgb2YgYXJndW1lbnRzIGluIHRoZSBhcmdzIGFycmF5Ci0gKiAgICAgIGFyZ3M6ICAgICAg IGFycmF5IG9mIHN0cmluZ3MgZm9yIGFyZ3VtZW50cyB0byBEU1AgcHJvZ3JhbQotICogICAgICB3 cml0ZV9meG46ICAgYm9hcmQtc3BlY2lmaWMgZnVuY3Rpb24gdG8gd3JpdGUgZGF0YSB0byBEU1Ag c3lzdGVtCi0gKiAgICAgIGFyYjogICAgICAgYXJiaXRyYXJ5IHBvaW50ZXIgdG8gYmUgcGFzc2Vk IGFzIGZpcnN0IGFyZyB0byB3cml0ZV9meG4KLSAqICAgICAgZW52cDogICAgICAgYXJyYXkgb2Yg ZW52aXJvbm1lbnQgc3RyaW5ncyBmb3IgRFNQIGV4ZWMuCi0gKiAgUmV0dXJuczoKLSAqICAgICAg MDogICAgICAgICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVCQURGOiAgICAgICBGYWls ZWQgdG8gb3BlbiB0YXJnZXQgY29kZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgQ09EIG1vZHVs ZSBpbml0aWFsaXplZC4KLSAqICAgICAgaG1nciBpcyB2YWxpZC4KLSAqICAgICAgbnVtX2FyZ2Mg PiAwLgotICogICAgICBhcmdzICE9IE5VTEwuCi0gKiAgICAgIGFyZ3NbMF0gIT0gTlVMTC4KLSAq ICAgICAgcGZuX3dyaXRlICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBj b2RfbG9hZF9iYXNlKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCi0JCQkJdTMyIG51 bV9hcmdjLCBjaGFyICphcmdzW10sCi0JCQkJY29kX3dyaXRlZnhuIHBmbl93cml0ZSwgdm9pZCAq YXJiLAotCQkJCWNoYXIgKmVudnBbXSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX29wZW4gPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBPcGVuIGEgbGlicmFyeSBmb3IgcmVhZGluZyBz ZWN0aW9ucy4gRG9lcyBub3QgbG9hZCBvciBzZXQgdGhlIGJhc2UuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgaG1ncjogICAgICAgICAgIG1hbmFnZXIgdG8gbG9hZCB0aGUgY29kZSB3aXRoCi0g KiAgICAgIHN6X2NvZmZfcGF0aDogICBDb2ZmIGZpbGUgdG8gb3Blbi4KLSAqICAgICAgZmxhZ3M6 ICAgICAgICAgIENPRF9OT0xPQUQgKGRvbid0IGxvYWQgc3ltYm9scykgb3IgQ09EX1NZTUIgKGxv YWQKLSAqICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMpLgotICogICAgICBsaWJfb2JqOiAg ICAgICAgSGFuZGxlIHJldHVybmVkIHRoYXQgY2FuIGJlIHVzZWQgaW4gY2FsbHMgdG8gY29kX2Ns b3NlCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY29kX2dldF9zZWN0aW9uLgotICogIFJl dHVybnM6Ci0gKiAgICAgIFNfT0s6ICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAg IC1FQkFERjogICAgICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIGhtZ3IgaXMgdmFsaWQu Ci0gKiAgICAgIGZsYWdzID09IENPRF9OT0xPQUQgfHwgZmxhZ3MgPT0gQ09EX1NZTUIuCi0gKiAg ICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQg Y29kX29wZW4oc3RydWN0IGNvZF9tYW5hZ2VyICpobWdyLAotCQkJICAgY2hhciAqc3pfY29mZl9w YXRoLAotCQkJICAgdTMyIGZsYWdzLCBzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKipsaWJfb2JqKTsK LQotLyoKLSAqICA9PT09PT09PSBjb2Rfb3Blbl9iYXNlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgT3BlbiBiYXNlIGltYWdlIGZvciByZWFkaW5nIHNlY3Rpb25zLiBEb2VzIG5vdCBs b2FkIHRoZSBiYXNlLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhtZ3I6ICAgICAgICAgICBt YW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAotICogICAgICBzel9jb2ZmX3BhdGg6ICAgQ29m ZiBmaWxlIHRvIG9wZW4uCi0gKiAgICAgIGZsYWdzOiAgICAgICAgICBTcGVjaWZpZXMgd2hldGhl ciB0byBsb2FkIHN5bWJvbHMuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBT dWNjZXNzLgotICogICAgICAtRUJBREY6ICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIGht Z3IgaXMgdmFsaWQuCi0gKiAgICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiBpbnQgY29kX29wZW5fYmFzZShzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3Is IGNoYXIgKnN6X2NvZmZfcGF0aCwKLQkJCQlkYmxsX2ZsYWdzIGZsYWdzKTsKLQotLyoKLSAqICA9 PT09PT09PSBjb2RfcmVhZF9zZWN0aW9uID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg UmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgYSBjb2RlIHNlY3Rpb24gZ2l2ZW4gdGhlIHNlY3Rpb24g bmFtZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBjb2RfbWdyX29iaiAgICAtIG1hbmFnZXIg aW4gd2hpY2ggdG8gc2VhcmNoIGZvciB0aGUgc3ltYm9sCi0gKiAgICAgIHN0cl9zZWN0ICAgIC0g bmFtZSBvZiB0aGUgc2VjdGlvbiwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgIi4iCi0gKiAgICAg IHN0cl9jb250ZW50IC0gYnVmZmVyIHRvIHN0b3JlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24uCi0g KiAgUmV0dXJuczoKLSAqICAgICAgMDogb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJl Ci0gKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGhhdmUgbm90IGJlZW4gbG9hZGVkIG9udG8gdGhl IGJvYXJkLgotICogIFJlcXVpcmVzOgotICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgot ICogICAgICB2YWxpZCBjb2RfbWdyX29iai4KLSAqICAgICAgc3RyX3NlY3QgIT0gTlVMTDsKLSAq ICAgICAgc3RyX2NvbnRlbnQgIT0gTlVMTDsKLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgKnN0 cl9jb250ZW50IHN0b3JlcyB0aGUgY29udGVudCBvZiB0aGUgbmFtZWQgc2VjdGlvbi4KLSAqLwot ZXh0ZXJuIGludCBjb2RfcmVhZF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLAot CQkJCSAgIGNoYXIgKnN0cl9zZWN0LAotCQkJCSAgIGNoYXIgKnN0cl9jb250ZW50LCB1MzIgY29u dGVudF9zaXplKTsKLQotI2VuZGlmIC8qIENPRF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRjZC5oIGIvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDdjYzNlMTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz NTggKzAsMCBAQAotLyoKLSAqIGRiZGNkLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVy IHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogRGVmaW5l cyB0aGUgRFNQL0JJT1MgQnJpZGdlIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgKERDRCkgQVBJLgot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAq IFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMn JyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAq LwotCi0jaWZuZGVmIERCRENEXwotI2RlZmluZSBEQkRDRF8KLQotI2luY2x1ZGUgPGRzcGJyaWRn ZS9kYmRjZGRlZi5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0jaW5jbHVkZSA8 ZHNwYnJpZGdlL25sZHJkZWZzLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2F1dG9fcmVnaXN0 ZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBUaGlzIGZ1bmN0aW9uIGF1dG9tYXRp Y2FsbHkgcmVnaXN0ZXJzIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCi0gKiAgICAgIHNwZWNp YWwgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIKLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCi0g KiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZp bGUgY29udGFpbmluZyBEQ0QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0 cyB0byBiZSByZWdpc3RlcmVkLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAg ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBmaW5kIGF1dG8tcmVnaXN0 cmF0aW9uL3JlYWQvbG9hZCBzZWN0aW9uLgotICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIElu dmFsaWQgRENEX0hNQU5BR0VSIGhhbmRsZS4uCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERDRCBp bml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICogIE5vdGU6Ci0gKiAgICAgIER1ZSB0byB0aGUg RENEIGRhdGFiYXNlIGNvbnN0cnVjdGlvbiwgaXQgaXMgZXNzZW50aWFsIGZvciBhIERDRC1lbmFi bGVkCi0gKiAgICAgIENPRkYgZmlsZSB0byBjb250YWluIHRoZSByaWdodCBDT0ZGIHNlY3Rpb25z LCBlc3BlY2lhbGx5Ci0gKiAgICAgICIuZGNkX3JlZ2lzdGVyIiwgd2hpY2ggaXMgdXNlZCBmb3Ig YXV0byByZWdpc3RyYXRpb24uCi0gKi8KLWV4dGVybiBpbnQgZGNkX2F1dG9fcmVnaXN0ZXIoc3Ry dWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKLQkJCQkgICAgY2hhciAqc3pfY29mZl9wYXRoKTsK LQotLyoKLSAqICA9PT09PT09PSBkY2RfYXV0b191bnJlZ2lzdGVyID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgVGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXJzIERD RCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCi0gKiAgICAgIHNwZWNpYWwgQ09GRiBzZWN0aW9uIGNh bGxlZCAiLmRjZF9yZWdpc3RlciIKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGNkX21ncjog ICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCi0gKiAgICAgIHN6X2NvZmZfcGF0 aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZwotICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0Qgb2JqZWN0cyB0byBiZSB1bnJlZ2lzdGVy ZWQuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KLSAq ICAgICAgLUVBQ0NFUzogVW5hYmxlIHRvIGZpbmQgYXV0by1yZWdpc3RyYXRpb24vcmVhZC9sb2Fk IHNlY3Rpb24uCi0gKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgSW52YWxpZCBEQ0RfSE1BTkFH RVIgaGFuZGxlLi4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgRENEIGluaXRpYWxpemVkLgotICog IEVuc3VyZXM6Ci0gKiAgTm90ZToKLSAqICAgICAgRHVlIHRvIHRoZSBEQ0QgZGF0YWJhc2UgY29u c3RydWN0aW9uLCBpdCBpcyBlc3NlbnRpYWwgZm9yIGEgRENELWVuYWJsZWQKLSAqICAgICAgQ09G RiBmaWxlIHRvIGNvbnRhaW4gdGhlIHJpZ2h0IENPRkYgc2VjdGlvbnMsIGVzcGVjaWFsbHkKLSAq ICAgICAgIi5kY2RfcmVnaXN0ZXIiLCB3aGljaCBpcyB1c2VkIGZvciBhdXRvIHVucmVnaXN0cmF0 aW9uLgotICovCi1leHRlcm4gaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5h Z2VyICpoZGNkX21nciwKLQkJCQkgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpOwotCi0vKgotICog ID09PT09PT09IGRjZF9jcmVhdGVfbWFuYWdlciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIERDRCBtb2R1bGUgbWFuYWdlci4KLSAqICBQYXJh bWV0ZXJzOgotICogICAgICBzel96bF9kbGxfbmFtZTogUG9pbnRlciB0byBhIERMTCBuYW1lIHN0 cmluZy4KLSAqICAgICAgZGNkX21ncjogICAgICAgIEEgcG9pbnRlciB0byBhIERDRCBtYW5hZ2Vy IGhhbmRsZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgLUVOT01FTTogICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRENEIG1hbmFnZXIg aGFuZGxlLgotICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBmYWlsdXJlLgotICogIFJlcXVp cmVzOgotICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIHN6X3psX2RsbF9uYW1lIGlz IG5vbi1OVUxMLgotICogICAgICBkY2RfbWdyIGlzIG5vbi1OVUxMLgotICogIEVuc3VyZXM6Ci0g KiAgICAgIEEgRENEIG1hbmFnZXIgaGFuZGxlIGlzIGNyZWF0ZWQuCi0gKi8KLWV4dGVybiBpbnQg ZGNkX2NyZWF0ZV9tYW5hZ2VyKGNoYXIgKnN6X3psX2RsbF9uYW1lLAotCQkJCSAgICAgc3RydWN0 IGRjZF9tYW5hZ2VyICoqZGNkX21ncik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2Rlc3Ryb3lf bWFuYWdlciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVz dHJveXMgYSBEQ0QgbW9kdWxlIG1hbmFnZXIuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRj ZF9tZ3I6ICAgICAgICBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KLSAqICBSZXR1cm5zOgotICogICAg ICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBEQ0QgbWFu YWdlciBoYW5kbGUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERDRCBpbml0aWFsaXplZC4KLSAq ICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IGRjZF9kZXN0cm95X21hbmFnZXIoc3RydWN0IGRj ZF9tYW5hZ2VyICpoZGNkX21ncik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2VudW1lcmF0ZV9v YmplY3QgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBUaGlzIGZ1bmN0aW9uIGVudW1l cmF0ZXMgY3VycmVudGx5IHZpc2libGUgRFNQL0JJT1MgQnJpZGdlIG9iamVjdHMKLSAqICAgICAg YW5kIHJldHVybnMgdGhlIFVVSUQgYW5kIHR5cGUgb2YgZWFjaCBlbnVtZXJhdGVkIG9iamVjdC4K LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBpbmRleDogICAgICAgICAgICAgIFRoZSBvYmplY3Qg ZW51bWVyYXRpb24gaW5kZXguCi0gKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFR5cGUgb2Yg b2JqZWN0IHRvIGVudW1lcmF0ZS4KLSAqICAgICAgdXVpZF9vYmo6ICAgICAgICAgICAgICBQb2lu dGVyIHRvIGEgZHNwX3V1aWQgb2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAg ICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVQRVJNOiAgICAgICAgICBVbmFibGUgdG8gZW51bWVy YXRlIHRocm91Z2ggdGhlIERDRCBkYXRhYmFzZS4KLSAqICAgICAgRU5PREFUQTogIEVudW1lcmF0 aW9uIGNvbXBsZXRlZC4gVGhpcyBpcyBub3QgYW4gZXJyb3IgY29kZS4KLSAqICBSZXF1aXJlczoK LSAqICAgICAgRENEIGluaXRpYWxpemVkLgotICogICAgICB1dWlkX29iaiBpcyBhIHZhbGlkIHBv aW50ZXIuCi0gKiAgRW5zdXJlczoKLSAqICBEZXRhaWxzOgotICogICAgICBUaGlzIGZ1bmN0aW9u IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGNkX2dldF9vYmplY3RfZGVmIHRvCi0g KiAgICAgIHJldHJpZXZlIG9iamVjdCBwcm9wZXJ0aWVzLgotICovCi1leHRlcm4gaW50IGRjZF9l bnVtZXJhdGVfb2JqZWN0KHMzMiBpbmRleCwKLQkJCQkgICAgICAgZW51bSBkc3BfZGNkb2JqdHlw ZSBvYmpfdHlwZSwKLQkJCQkgICAgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaik7Ci0KLS8q Ci0gKiAgPT09PT09PT0gZGNkX2V4aXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBU aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgRENEIG1vZHVsZS4KLSAqICBQYXJhbWV0ZXJzOgot ICogIFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERDRCBpbml0aWFsaXplZC4KLSAq ICBFbnN1cmVzOgotICovCi1leHRlcm4gdm9pZCBkY2RfZXhpdCh2b2lkKTsKLQotLyoKLSAqICA9 PT09PT09PSBkY2RfZ2V0X2RlcF9saWJzID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg R2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJyYXJ5IGFuZCBzaXplIG9mIGFycmF5IG9mIHV1aWRzLCB0 aGlzIGZ1bmN0aW9uCi0gKiAgICAgIGZpbGxzIHRoZSBhcnJheSB3aXRoIHRoZSB1dWlkcyBvZiBh bGwgZGVwZW5kZW50IGxpYnJhcmllcyBvZiB0aGUgaW5wdXQKLSAqICAgICAgbGlicmFyeS4KLSAq ICBQYXJhbWV0ZXJzOgotICogICAgICBoZGNkX21ncjogQSBEQ0QgbWFuYWdlciBoYW5kbGUuCi0g KiAgICAgIHV1aWRfb2JqOiBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIGEgbGlicmFyeS4KLSAq ICAgICAgbnVtX2xpYnM6IFNpemUgb2YgdXVpZCBhcnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVp ZHMpLgotICogICAgICBkZXBfbGliX3V1aWRzOiBBcnJheSBvZiBkZXBlbmRlbnQgbGlicmFyeSB1 dWlkcyB0byBiZSBmaWxsZWQgaW4uCi0gKiAgICAgIHByc3RudF9kZXBfbGliczogICAgQXJyYXkg aW5kaWNhdGluZyBpZiBjb3JyZXNwb25kaW5nIGxpYiBpcyBwZXJzaXN0ZW50LgotICogICAgICBw aGFzZTogcGhhc2UgdG8gb2J0YWluIGNvcnJlY3QgaW5wdXQgbGlicmFyeQotICogIFJldHVybnM6 Ci0gKiAgICAgIDA6IFN1Y2Nlc3MuCi0gKiAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9u IGZhaWx1cmUuCi0gKiAgICAgIC1FQUNDRVM6IEZhaWx1cmUgdG8gcmVhZCBzZWN0aW9uIGNvbnRh aW5pbmcgbGlicmFyeSBpbmZvLgotICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KLSAq ICBSZXF1aXJlczoKLSAqICAgICAgRENEIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCBoZGNk X21nci4KLSAqICAgICAgdXVpZF9vYmogIT0gTlVMTAotICogICAgICBkZXBfbGliX3V1aWRzICE9 IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkY2RfZ2V0X2RlcF9saWJzKHN0 cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCi0JCQkJICAgc3RydWN0IGRzcF91dWlkICp1dWlk X29iaiwKLQkJCQkgICB1MTYgbnVtX2xpYnMsCi0JCQkJICAgc3RydWN0IGRzcF91dWlkICpkZXBf bGliX3V1aWRzLAotCQkJCSAgIGJvb2wgKnByc3RudF9kZXBfbGlicywKLQkJCQkgICBlbnVtIG5s ZHJfcGhhc2UgcGhhc2UpOwotCi0vKgotICogID09PT09PT09IGRjZF9nZXRfbnVtX2RlcF9saWJz ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgR2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJy YXJ5LCBkZXRlcm1pbmUgaXRzIG51bWJlciBvZiBkZXBlbmRlbnQKLSAqICAgICAgbGlicmFyaWVz LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhkY2RfbWdyOiAgICAgICAgQSBEQ0QgbWFuYWdl ciBoYW5kbGUuCi0gKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1 aWQgZm9yIGEgbGlicmFyeS4KLSAqICAgICAgbnVtX2xpYnM6ICAgICAgIFNpemUgb2YgdXVpZCBh cnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVpZHMpLgotICogICAgICBudW1fcGVyc19saWJzOiAg bnVtYmVyIG9mIHBlcnNpc3RlbnQgZGVwZW5kZW50IGxpYnJhcnkuCi0gKiAgICAgIHBoYXNlOiAg ICAgICAgICBQaGFzZSB0byBvYnRhaW4gY29ycmVjdCBpbnB1dCBsaWJyYXJ5Ci0gKiAgUmV0dXJu czoKLSAqICAgICAgMDogU3VjY2Vzcy4KLSAqICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRp b24gZmFpbHVyZS4KLSAqICAgICAgLUVBQ0NFUzogRmFpbHVyZSB0byByZWFkIHNlY3Rpb24gY29u dGFpbmluZyBsaWJyYXJ5IGluZm8uCi0gKiAgICAgIC1FUEVSTTogR2VuZXJhbCBmYWlsdXJlLgot ICogIFJlcXVpcmVzOgotICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIFZhbGlkIGhk Y2RfbWdyLgotICogICAgICB1dWlkX29iaiAhPSBOVUxMCi0gKiAgICAgIG51bV9saWJzICE9IE5V TEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkY2RfZ2V0X251bV9kZXBfbGlicyhz dHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3V1aWQg KnV1aWRfb2JqLAotCQkJCSAgICAgICB1MTYgKm51bV9saWJzLAotCQkJCSAgICAgICB1MTYgKm51 bV9wZXJzX2xpYnMsCi0JCQkJICAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7Ci0KLS8qCi0g KiAgPT09PT09PT0gZGNkX2dldF9saWJyYXJ5X25hbWUgPT09PT09PT0KLSAqICBQdXJwb3NlOgot ICogICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5hbWUgb2YgYSAoZHluYW1pYykgbGli cmFyeSBmb3IgYSBnaXZlbgotICogICAgICBVVUlELgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAg IGhkY2RfbWdyOiBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KLSAqICAgICAgdXVpZF9vYmo6CVBvaW50 ZXIgdG8gYSBkc3BfdXVpZCB0aGF0IHJlcHJlc2VudHMgYSB1bmlxdWUgRFNQL0JJT1MKLSAqICAg ICAgICAgICAgICAgICAgICAgIEJyaWRnZSBvYmplY3QuCi0gKiAgICAgIHN0cl9saWJfbmFtZTog QnVmZmVyIHRvIGhvbGQgbGlicmFyeSBuYW1lLgotICogICAgICBidWZmX3NpemU6IENvbnRhaW5z IGJ1ZmZlciBzaXplLiBTZXQgdG8gc3RyaW5nIHNpemUgb24gb3V0cHV0LgotICogICAgICBwaGFz ZTogICAgICAgICAgV2hpY2ggcGhhc2UgdG8gbG9hZAotICogICAgICBwaGFzZV9zcGxpdDogICAg QXJlIHBoYXNlcyBpbiBtdWx0aXBsZSBsaWJyYXJpZXMKLSAqICBSZXR1cm5zOgotICogICAgICAw OiBTdWNjZXNzLgotICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KLSAqICBSZXF1aXJl czoKLSAqICAgICAgRENEIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCBoZGNkX21nci4KLSAq ICAgICAgc3RyX2xpYl9uYW1lICE9IE5VTEwuCi0gKiAgICAgIHV1aWRfb2JqICE9IE5VTEwKLSAq ICAgICAgYnVmZl9zaXplICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBk Y2RfZ2V0X2xpYnJhcnlfbmFtZShzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAotCQkJCSAg ICAgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAotCQkJCSAgICAgICBjaGFyICpzdHJfbGli X25hbWUsCi0JCQkJICAgICAgIHUzMiAqYnVmZl9zaXplLAotCQkJCSAgICAgICBlbnVtIG5sZHJf cGhhc2UgcGhhc2UsCi0JCQkJICAgICAgIGJvb2wgKnBoYXNlX3NwbGl0KTsKLQotLyoKLSAqICA9 PT09PT09PSBkY2RfZ2V0X29iamVjdF9kZWYgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb3BlcnRpZXMvYXR0cmlidXRlcyBvZiBhIERT UC9CSU9TIEJyaWRnZQotICogICAgICBvYmplY3QuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAg aGRjZF9tZ3I6ICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCi0gKiAgICAgIHV1aWRf b2JqOiAgICAgICAgICAgICAgUG9pbnRlciB0byBhIGRzcF91dWlkIHRoYXQgcmVwcmVzZW50cyBh IHVuaXF1ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgIERTUC9CSU9TIEJyaWRnZSBvYmpl Y3QuCi0gKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFRoZSB0eXBlIG9mIERTUC9CSU9TIEJy aWRnZSBvYmplY3QgdG8gYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Vk IChub2RlLCBwcm9jZXNzb3IsIGV0YykuCi0gKiAgICAgIG9ial9kZWY6ICAgICAgICAgICAgUG9p bnRlciB0byBhbiBvYmplY3QgZGVmaW5pdGlvbiBzdHJ1Y3R1cmUuIEEKLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICB1bmlvbiBvZiB2YXJpb3VzIHBvc3NpYmxlIERDRCBvYmplY3QgdHlwZXMu Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogU3VjY2Vzcy4KLSAqICAgICAgLUVBQ0NFUzogVW5h YmxlIHRvIGFjY2Vzcy9yZWFkL3BhcnNlL2xvYWQgY29udGVudCBvZiBvYmplY3QgY29kZQotICog ICAgICAgICAgICAgICBzZWN0aW9uLgotICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwg ZmFpbHVyZS4KLSAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgRENEX0hNQU5BR0VSIGhh bmRsZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgRENEIGluaXRpYWxpemVkLgotICogICAgICBv YmpfdXVpZCBpcyBub24tTlVMTC4KLSAqICAgICAgb2JqX2RlZiBpcyBub24tTlVMTC4KLSAqICBF bnN1cmVzOgotICovCi1leHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0X2RlZihzdHJ1Y3QgZGNkX21h bmFnZXIgKmhkY2RfbWdyLAotCQkJCSAgICAgc3RydWN0IGRzcF91dWlkICpvYmpfdXVpZCwKLQkJ CQkgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCi0JCQkJICAgICBzdHJ1Y3QgZGNk X2dlbmVyaWNvYmogKm9ial9kZWYpOwotCi0vKgotICogID09PT09PT09IGRjZF9nZXRfb2JqZWN0 cyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgZnVuY3Rpb24gZmluZHMgYWxs IERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhIHNwZWNpYWwKLSAqICAgICAgQ09GRiBzZWN0aW9u IGNhbGxlZCAiLmRjZF9yZWdpc3RlciIsIGFuZCBmb3IgZWFjaCBvYmplY3QsCi0gKiAgICAgIGNh bGwgYSAicmVnaXN0ZXIiIGZ1bmN0aW9uLiAgVGhlICJyZWdpc3RlciIgZnVuY3Rpb24gbWF5IHBl cmZvcm0KLSAqICAgICAgdmFyaW91cyBhY3Rpb25zLCBzdWNoIGFzIDEpIHJlZ2lzdGVyIG5vZGVz IGluIHRoZSBub2RlIGRhdGFiYXNlLCAyKQotICogICAgICB1bnJlZ2lzdGVyIG5vZGVzIGZyb20g dGhlIG5vZGUgZGF0YWJhc2UsIGFuZCAzKSBhZGQgb3ZlcmxheSBub2Rlcy4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5k bGUuCi0gKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBD T0ZGIGZpbGUgY29udGFpbmluZyBEQ0QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2JqZWN0cy4KLSAqICAgICAgcmVnaXN0ZXJfZnhuOiAgICAgICAgICAgQ2FsbGJhY2sgZnhuIHRv IGJlIGFwcGxpZWQgb24gZWFjaCBsb2NhdGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERDRCBvYmplY3QuCi0gKiAgICAgIGhhbmRsZTogICAgICAgICAgICAgICAgIEhhbmRsZSB0 byBwYXNzIHRvIGNhbGxiYWNrLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAg ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBhY2Nlc3MvcmVhZC9wYXJz ZS9sb2FkIGNvbnRlbnQgb2Ygb2JqZWN0IGNvZGUKLSAqICAgICAgICAgICAgICAgc2VjdGlvbi4K LSAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIERDRF9ITUFOQUdFUiBoYW5kbGUu LgotICogIFJlcXVpcmVzOgotICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoK LSAqICBOb3RlOgotICogICAgICBEdWUgdG8gdGhlIERDRCBkYXRhYmFzZSBjb25zdHJ1Y3Rpb24s IGl0IGlzIGVzc2VudGlhbCBmb3IgYSBEQ0QtZW5hYmxlZAotICogICAgICBDT0ZGIGZpbGUgdG8g Y29udGFpbiB0aGUgcmlnaHQgQ09GRiBzZWN0aW9ucywgZXNwZWNpYWxseQotICogICAgICAiLmRj ZF9yZWdpc3RlciIsIHdoaWNoIGlzIHVzZWQgZm9yIGF1dG8gcmVnaXN0cmF0aW9uLgotICovCi1l eHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0cyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAot CQkJCSAgY2hhciAqc3pfY29mZl9wYXRoLAotCQkJCSAgZGNkX3JlZ2lzdGVyZnhuIHJlZ2lzdGVy X2Z4biwgdm9pZCAqaGFuZGxlKTsKLQotLyoKLSAqICA9PT09PT09PSBkY2RfaW5pdCA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgRENELgot ICogIFBhcmFtZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgRkFMU0U6ICBJbml0aWFsaXph dGlvbiBmYWlsZWQuCi0gKiAgICAgIFRSVUU6ICAgSW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLgot ICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAgICAgIERDRCBpbml0aWFsaXplZC4KLSAq LwotZXh0ZXJuIGJvb2wgZGNkX2luaXQodm9pZCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX3Jl Z2lzdGVyX29iamVjdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgZnVuY3Rp b24gcmVnaXN0ZXJzIGEgRFNQL0JJT1MgQnJpZGdlIG9iamVjdCBpbiB0aGUgRENEIGRhdGFiYXNl LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRv IGEgZHNwX3V1aWQgdGhhdCBpZGVudGlmaWVzIGEgRFNQL0JJT1MKLSAqICAgICAgICAgICAgICAg ICAgICAgIEJyaWRnZSBvYmplY3QuCi0gKiAgICAgIG9ial90eXBlOiAgICAgICAgVHlwZSBvZiBv YmplY3QuCi0gKiAgICAgIHBzel9wYXRoX25hbWU6ICAgIFBhdGggdG8gdGhlIG9iamVjdCdzIENP RkYgZmlsZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byByZWdpc3RlciBvYmplY3QuCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIERDRCBpbml0aWFsaXplZC4KLSAqICAgICAgdXVpZF9vYmogYW5kIHN6UGF0aE5h bWUgYXJlIG5vbi1OVUxMIHZhbHVlcy4KLSAqICAgICAgb2JqX3R5cGUgaXMgYSB2YWxpZCB0eXBl IHZhbHVlLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgZGNkX3JlZ2lzdGVyX29iamVj dChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAotCQkJCSAgICAgIGVudW0gZHNwX2RjZG9ianR5 cGUgb2JqX3R5cGUsCi0JCQkJICAgICAgY2hhciAqcHN6X3BhdGhfbmFtZSk7Ci0KLS8qCi0gKiAg PT09PT09PT0gZGNkX3VucmVnaXN0ZXJfb2JqZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAq ICAgICAgVGhpcyBmdW5jdGlvbiBkZS1yZWdpc3RlcnMgYSB2YWxpZCBEU1AvQklPUyBCcmlkZ2Ug b2JqZWN0IGZyb20gdGhlIERDRAotICogICAgICBkYXRhYmFzZS4KLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICB1dWlkX29iajogICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgdGhhdCBpZGVudGlm aWVzIGEgRFNQL0JJT1MgQnJpZGdlCi0gKiAgICAgICAgICAgICAgICAgIG9iamVjdC4KLSAqICAg ICAgb2JqX3R5cGU6ICAgIFR5cGUgb2Ygb2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6 ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FUEVSTTogIFVuYWJsZSB0byBkZS1yZWdpc3RlciB0aGUg c3BlY2lmaWVkIG9iamVjdC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgRENEIGluaXRpYWxpemVk LgotICogICAgICB1dWlkX29iaiBpcyBhIG5vbi1OVUxMIHZhbHVlLgotICogICAgICBvYmpfdHlw ZSBpcyBhIHZhbGlkIHR5cGUgdmFsdWUuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBk Y2RfdW5yZWdpc3Rlcl9vYmplY3Qoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKLQkJCQkJZW51 bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSk7Ci0KLSNlbmRpZiAvKiBfREJEQ0RfSCAqLwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Ri ZGNkZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uv ZGJkY2RkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyMDFiMy4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJk Y2RkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBkYmRjZGRlZi5o Ci0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkg T01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERDRCAoRFNQL0JJT1MgQnJpZGdlIENvbmZpZ3VyYXRp b24gRGF0YWJhc2UpIGNvbnN0YW50cyBhbmQgdHlwZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAy MDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBS RVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFU SU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgREJEQ0RERUZf Ci0jZGVmaW5lIERCRENEREVGXwotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9tZ3Jwcml2Lmg+CS8qIGZvciBtZ3JfcHJvY2Vzc29yZXh0aW5mbyAq LwotCi0vKgotICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgY3JpdGljYWwgZWxlbWVudHMg Zm9yIHRoZSBEQ0QgbW9kdWxlOgotICoKLSAqIC0gRENEX1JFR0tFWSBlbmFibGVzIERDRCBmdW5j dGlvbnMgdG8gbG9jYXRlIHJlZ2lzdGVyZWQgRENEIG9iamVjdHMuCi0gKiAtIERDRF9SRUdJU1RF Ul9TRUNUSU9OIGlkZW50aWZpZXMgdGhlIENPRkYgc2VjdGlvbiB3aGVyZSB0aGUgVVVJRCBvZgot ICogICByZWdpc3RlcmVkIERDRCBvYmplY3RzIGFyZSBzdG9yZWQuCi0gKi8KLSNkZWZpbmUgRENE X1JFR0tFWSAgICAgICAgICAgICAgIlNvZnR3YXJlXFxUZXhhc0luc3RydW1lbnRzXFxEc3BCcmlk Z2VcXERDRCIKLSNkZWZpbmUgRENEX1JFR0lTVEVSX1NFQ1RJT04gICAgIi5kY2RfcmVnaXN0ZXIi Ci0KLSNkZWZpbmUgRENEX01BWFBBVEhMRU5HVEggICAgMjU1Ci0KLS8qIERDRCBNYW5hZ2VyIE9i amVjdCAqLwotc3RydWN0IGRjZF9tYW5hZ2VyOwotCi1zdHJ1Y3QgZGNkX2tleV9lbGVtIHsKLQlz dHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIE1ha2UgaXQgbGlua2VkIHRvIGEgbGlzdCAqLwotCWNo YXIgbmFtZVtEQ0RfTUFYUEFUSExFTkdUSF07CS8qICBOYW1lIG9mIGEgZ2l2ZW4gdmFsdWUgZW50 cnkgKi8KLQljaGFyICpwYXRoOwkJLyogIFBvaW50ZXIgdG8gdGhlIGFjdHVhbCBkYXRhICovCi19 OwotCi0vKiBEQ0QgTm9kZSBQcm9wZXJ0aWVzICovCi1zdHJ1Y3QgZGNkX25vZGVwcm9wcyB7Ci0J c3RydWN0IGRzcF9uZGJwcm9wcyBuZGJfcHJvcHM7Ci0JdTMyIG1zZ19zZWdpZDsKLQl1MzIgbXNn X25vdGlmeV90eXBlOwotCWNoYXIgKnN0cl9jcmVhdGVfcGhhc2VfZnhuOwotCWNoYXIgKnN0cl9k ZWxldGVfcGhhc2VfZnhuOwotCWNoYXIgKnN0cl9leGVjdXRlX3BoYXNlX2Z4bjsKLQljaGFyICpz dHJfaV9hbGdfbmFtZTsKLQotCS8qIER5bmFtaWMgbG9hZCBwcm9wZXJ0aWVzICovCi0JdTE2IGxv YWRfdHlwZTsJLyogU3RhdGljLCBkeW5hbWljLCBvdmVybGF5ICovCi0JdTMyIGRhdGFfbWVtX3Nl Z19tYXNrOwkJLyogRGF0YSBtZW1vcnkgcmVxdWlyZW1lbnRzICovCi0JdTMyIGNvZGVfbWVtX3Nl Z19tYXNrOwkJLyogQ29kZSBtZW1vcnkgcmVxdWlyZW1lbnRzICovCi19OwotCi0vKiBEQ0QgR2Vu ZXJpYyBPYmplY3QgVHlwZSAqLwotc3RydWN0IGRjZF9nZW5lcmljb2JqIHsKLQl1bmlvbiBkY2Rf b2JqIHsKLQkJc3RydWN0IGRjZF9ub2RlcHJvcHMgbm9kZV9vYmo7CS8qIG5vZGUgb2JqZWN0LiAq LwotCQkvKiBwcm9jZXNzb3Igb2JqZWN0LiAqLwotCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8g cHJvY19pbmZvOwotCQkvKiBleHRlbmRlZCBwcm9jIG9iamVjdCAocHJpdmF0ZSkgKi8KLQkJc3Ry dWN0IG1ncl9wcm9jZXNzb3JleHRpbmZvIGV4dF9wcm9jX29iajsKLQl9IG9ial9kYXRhOwotfTsK LQotLyogRENEIEludGVybmFsIENhbGxiYWNrIFR5cGUgKi8KLXR5cGVkZWYgaW50KCpkY2RfcmVn aXN0ZXJmeG4pIChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAotCQkJCSAgICAgIGVudW0gZHNw X2RjZG9ianR5cGUgb2JqX3R5cGUsCi0JCQkJICAgICAgdm9pZCAqaGFuZGxlKTsKLQotI2VuZGlm IC8qIERCRENEREVGXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2luY2x1ZGUvZHNwYnJpZGdlL2RiZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdl L2luY2x1ZGUvZHNwYnJpZGdlL2RiZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBjOGY0NjQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNs dWRlL2RzcGJyaWRnZS9kYmRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4OCArMCwwIEBACi0v KgotICogZGJkZWZzLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVu Y3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIGRlZmluaXRpb25z IGFuZCBjb25zdGFudHMgZm9yIERTUC9CSU9TIEJyaWRnZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp IDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBB TlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQg TElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIERC REVGU18KLSNkZWZpbmUgREJERUZTXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4JLyogVHlwZXMgc2hhcmVkIGJldHdlZW4gR1BQIGFu ZCBEU1AgKi8KLQotI2RlZmluZSBQR19TSVpFNEsgNDA5NgotI2RlZmluZSBQR19NQVNLKHBnX3Np emUpICh+KChwZ19zaXplKS0xKSkKLSNkZWZpbmUgUEdfQUxJR05fTE9XKGFkZHIsIHBnX3NpemUp ICgoYWRkcikgJiBQR19NQVNLKHBnX3NpemUpKQotI2RlZmluZSBQR19BTElHTl9ISUdIKGFkZHIs IHBnX3NpemUpICgoKGFkZHIpKyhwZ19zaXplKS0xKSAmIFBHX01BU0socGdfc2l6ZSkpCi0KLS8q IEFQSSByZXR1cm4gdmFsdWUgYW5kIGNhbGxpbmcgY29udmVudGlvbiAqLwotI2RlZmluZSBEQkFQ SSAgICAgICAgICAgICAgICAgICAgICAgaW50Ci0KLS8qIE1heGltdW0gbGVuZ3RoIG9mIG5vZGUg bmFtZSwgdXNlZCBpbiBkc3BfbmRicHJvcHMgKi8KLSNkZWZpbmUgRFNQX01BWE5BTUVMRU4gICAg ICAgICAgICAgIDMyCi0KLS8qIG5vdGlmeV90eXBlIHZhbHVlcyBmb3IgdGhlIFJlZ2lzdGVyTm90 aWZ5KCkgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBEU1BfU0lHTkFMRVZFTlQgICAgICAgICAgICAg MHgwMDAwMDAwMQotCi0vKiBUeXBlcyBvZiBldmVudHMgZm9yIHByb2Nlc3NvcnMgKi8KLSNkZWZp bmUgRFNQX1BST0NFU1NPUlNUQVRFQ0hBTkdFICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRFNQX1BS T0NFU1NPUkFUVEFDSCAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRFNQX1BST0NFU1NPUkRF VEFDSCAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRFNQX1BST0NFU1NPUlJFU1RBUlQgICAg ICAgIDB4MDAwMDAwMDgKLQotLyogRFNQIGV4Y2VwdGlvbiBldmVudHMgKERTUC9CSU9TIGFuZCBE U1AgTU1VIGZhdWx0KSAqLwotI2RlZmluZSBEU1BfTU1VRkFVTFQgICAgICAgICAgICAgICAgMHgw MDAwMDAxMAotI2RlZmluZSBEU1BfU1lTRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAot I2RlZmluZSBEU1BfRVhDRVBUSU9OQUJPUlQgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBE U1BfUFdSRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBEU1BfV0RUT1ZF UkZMT1cJMHgwMDAwMDA0MAotCi0vKiBJVkEgZXhjZXB0aW9uIGV2ZW50cyAoSVZBIE1NVSBmYXVs dCkgKi8KLSNkZWZpbmUgSVZBX01NVUZBVUxUICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLS8q IFR5cGVzIG9mIGV2ZW50cyBmb3Igbm9kZXMgKi8KLSNkZWZpbmUgRFNQX05PREVTVEFURUNIQU5H RSAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgRFNQX05PREVNRVNTQUdFUkVBRFkgICAgICAg IDB4MDAwMDAyMDAKLQotLyogVHlwZXMgb2YgZXZlbnRzIGZvciBzdHJlYW1zICovCi0jZGVmaW5l IERTUF9TVFJFQU1ET05FICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIERTUF9TVFJF QU1JT0NPTVBMRVRJT04gICAgICAweDAwMDAyMDAwCi0KLS8qIEhhbmRsZSBkZWZpbml0aW9uIHJl cHJlc2VudGluZyB0aGUgR1BQIG5vZGUgaW4gRFNQTm9kZV9Db25uZWN0KCkgY2FsbHMgKi8KLSNk ZWZpbmUgRFNQX0hHUFBOT0RFICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKLQotLyogTm9kZSBk aXJlY3Rpb25zIHVzZWQgaW4gRFNQTm9kZV9Db25uZWN0KCkgKi8KLSNkZWZpbmUgRFNQX1RPTk9E RSAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRFNQX0ZST01OT0RFICAgICAgICAgICAgICAg IDIKLQotLyogRGVmaW5lIE5vZGUgTWluaW11bSBhbmQgTWF4aW11bSBQcmlvcml0aWVzICovCi0j ZGVmaW5lIERTUF9OT0RFX01JTl9QUklPUklUWSAgICAgICAxCi0jZGVmaW5lIERTUF9OT0RFX01B WF9QUklPUklUWSAgICAgICAxNQotCi0vKiBtc2dfY3RybCBjb250YWlucyBTTSBidWZmZXIgZGVz Y3JpcHRpb24gKi8KLSNkZWZpbmUgRFNQX1JNU0JVRkRFU0MgUk1TX0JVRkRFU0MKLQotLyogUHJv Y2Vzc29yIElEIG51bWJlcnMgKi8KLSNkZWZpbmUgRFNQX1VOSVQgICAgMAotI2RlZmluZSBJVkFf VU5JVCAgICAxCi0KLSNkZWZpbmUgRFNQV09SRCAgICAgICB1bnNpZ25lZCBjaGFyCi0jZGVmaW5l IERTUFdPUkRTSVpFICAgICBzaXplb2YoRFNQV09SRCkKLQotI2RlZmluZSAgICBNQVhfUFJPRklM RVMgICAgIDE2Ci0KLS8qIERTUCBjaGlwIHR5cGUgKi8KLSNkZWZpbmUgRFNQVFlQRTY0CTB4OTkK LQotLyogSGFuZHkgTWFjcm9zICovCi0jZGVmaW5lIFZBTElEX1BST0NfRVZFTlQgKERTUF9QUk9D RVNTT1JTVEFURUNIQU5HRSB8IERTUF9QUk9DRVNTT1JBVFRBQ0ggfCBcCi0JRFNQX1BST0NFU1NP UkRFVEFDSCB8IERTUF9QUk9DRVNTT1JSRVNUQVJUIHwgRFNQX05PREVTVEFURUNIQU5HRSB8IFwK LQlEU1BfU1RSRUFNRE9ORSB8IERTUF9TVFJFQU1JT0NPTVBMRVRJT04gfCBEU1BfTU1VRkFVTFQg fCBcCi0JRFNQX1NZU0VSUk9SIHwgRFNQX1dEVE9WRVJGTE9XIHwgRFNQX1BXUkVSUk9SKQotCi1z dGF0aWMgaW5saW5lIGJvb2wgaXNfdmFsaWRfcHJvY19ldmVudCh1MzIgeCkKLXsKLQlyZXR1cm4g KHggPT0gMCB8fCAoeCAmIFZBTElEX1BST0NfRVZFTlQgJiYgISh4ICYgflZBTElEX1BST0NfRVZF TlQpKSk7Ci19Ci0KLS8qIFRoZSBOb2RlIFVVSUQgc3RydWN0dXJlICovCi1zdHJ1Y3QgZHNwX3V1 aWQgewotCXUzMiBkYXRhMTsKLQl1MTYgZGF0YTI7Ci0JdTE2IGRhdGEzOwotCXU4IGRhdGE0Owot CXU4IGRhdGE1OwotCXU4IGRhdGE2WzZdOwotfTsKLQotLyogRENEIHR5cGVzICovCi1lbnVtIGRz cF9kY2RvYmp0eXBlIHsKLQlEU1BfRENETk9ERVRZUEUsCi0JRFNQX0RDRFBST0NFU1NPUlRZUEUs Ci0JRFNQX0RDRExJQlJBUllUWVBFLAotCURTUF9EQ0RDUkVBVEVMSUJUWVBFLAotCURTUF9EQ0RF WEVDVVRFTElCVFlQRSwKLQlEU1BfRENEREVMRVRFTElCVFlQRSwKLQkvKiBEU1BfRENETUFYT0JK VFlQRSBpcyBtZWFudCB0byBiZSB0aGUgbGFzdCBEQ0Qgb2JqZWN0IHR5cGUgKi8KLQlEU1BfRENE TUFYT0JKVFlQRQotfTsKLQotLyogUHJvY2Vzc29yIHN0YXRlcyAqLwotZW51bSBkc3BfcHJvY3N0 YXRlIHsKLQlQUk9DX1NUT1BQRUQsCi0JUFJPQ19MT0FERUQsCi0JUFJPQ19SVU5OSU5HLAotCVBS T0NfRVJST1IKLX07Ci0KLS8qCi0gKiAgTm9kZSB0eXBlczogTWVzc2FnZSBub2RlLCB0YXNrIG5v ZGUsIHhEQUlTIHNvY2tldCBub2RlLCBhbmQKLSAqICBkZXZpY2Ugbm9kZS4gX05PREVfR1BQIGlz IHVzZWQgd2hlbiBkZWZpbmluZyBhIHN0cmVhbSBjb25uZWN0aW9uCi0gKiAgYmV0d2VlbiBhIHRh c2sgb3Igc29ja2V0IG5vZGUgYW5kIHRoZSBHUFAuCi0gKgotICovCi1lbnVtIG5vZGVfdHlwZSB7 Ci0JTk9ERV9ERVZJQ0UsCi0JTk9ERV9UQVNLLAotCU5PREVfREFJU1NPQ0tFVCwKLQlOT0RFX01F U1NBR0UsCi0JTk9ERV9HUFAKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9zdGF0ZSA9PT09 PT09PQotICogIEludGVybmFsIG5vZGUgc3RhdGVzLgotICovCi1lbnVtIG5vZGVfc3RhdGUgewot CU5PREVfQUxMT0NBVEVELAotCU5PREVfQ1JFQVRFRCwKLQlOT0RFX1JVTk5JTkcsCi0JTk9ERV9Q QVVTRUQsCi0JTk9ERV9ET05FLAotCU5PREVfQ1JFQVRJTkcsCi0JTk9ERV9TVEFSVElORywKLQlO T0RFX1BBVVNJTkcsCi0JTk9ERV9URVJNSU5BVElORywKLQlOT0RFX0RFTEVUSU5HLAotfTsKLQot LyogU3RyZWFtIHN0YXRlcyAqLwotZW51bSBkc3Bfc3RyZWFtc3RhdGUgewotCVNUUkVBTV9JRExF LAotCVNUUkVBTV9SRUFEWSwKLQlTVFJFQU1fUEVORElORywKLQlTVFJFQU1fRE9ORQotfTsKLQot LyogU3RyZWFtIGNvbm5lY3QgdHlwZXMgKi8KLWVudW0gZHNwX2Nvbm5lY3R0eXBlIHsKLQlDT05O RUNUVFlQRV9OT0RFT1VUUFVULAotCUNPTk5FQ1RUWVBFX0dQUE9VVFBVVCwKLQlDT05ORUNUVFlQ RV9OT0RFSU5QVVQsCi0JQ09OTkVDVFRZUEVfR1BQSU5QVVQKLX07Ci0KLS8qIFN0cmVhbSBtb2Rl IHR5cGVzICovCi1lbnVtIGRzcF9zdHJtbW9kZSB7Ci0JU1RSTU1PREVfUFJPQ0NPUFksCS8qIFBy b2Nlc3NvcihzKSBjb3B5IHN0cmVhbSBkYXRhIHBheWxvYWRzICovCi0JU1RSTU1PREVfWkVST0NP UFksCS8qIFN0cm0gYnVmZmVyIHB0cnMgc3dhcHBlZCBubyBkYXRhIGNvcGllZCAqLwotCVNUUk1N T0RFX0xETUEsCQkvKiBMb2NhbCBETUEgOiBPTUFQJ3MgU3lzdGVtLURNQSBkZXZpY2UgKi8KLQlT VFJNTU9ERV9SRE1BCQkvKiBSZW1vdGUgRE1BOiBPTUFQJ3MgRFNQLURNQSBkZXZpY2UgKi8KLX07 Ci0KLS8qIFJlc291cmNlIFR5cGVzICovCi1lbnVtIGRzcF9yZXNvdXJjZWluZm90eXBlIHsKLQlE U1BfUkVTT1VSQ0VfRFlOREFSQU0gPSAwLAotCURTUF9SRVNPVVJDRV9EWU5TQVJBTSwKLQlEU1Bf UkVTT1VSQ0VfRFlORVhURVJOQUwsCi0JRFNQX1JFU09VUkNFX0RZTlNSQU0sCi0JRFNQX1JFU09V UkNFX1BST0NMT0FECi19OwotCi0vKiBNZW1vcnkgU2VnbWVudCBUeXBlcyAqLwotZW51bSBkc3Bf bWVtdHlwZSB7Ci0JRFNQX0RZTkRBUkFNID0gMCwKLQlEU1BfRFlOU0FSQU0sCi0JRFNQX0RZTkVY VEVSTkFMLAotCURTUF9EWU5TUkFNCi19OwotCi0vKiBNZW1vcnkgRmx1c2ggVHlwZXMgKi8KLWVu dW0gZHNwX2ZsdXNodHlwZSB7Ci0JUFJPQ19JTlZBTElEQVRFX01FTSA9IDAsCi0JUFJPQ19XUklU RUJBQ0tfTUVNLAotCVBST0NfV1JJVEVCQUNLX0lOVkFMSURBVEVfTUVNLAotfTsKLQotLyogTWVt b3J5IFNlZ21lbnQgU3RhdHVzIFZhbHVlcyAqLwotc3RydWN0IGRzcF9tZW1zdGF0IHsKLQl1MzIg c2l6ZTsKLQl1MzIgdG90YWxfZnJlZV9zaXplOwotCXUzMiBsZW5fbWF4X2ZyZWVfYmxvY2s7Ci0J dTMyIG51bV9mcmVlX2Jsb2NrczsKLQl1MzIgbnVtX2FsbG9jX2Jsb2NrczsKLX07Ci0KLS8qIFBy b2Nlc3NvciBMb2FkIGluZm9ybWF0aW9uIFZhbHVlcyAqLwotc3RydWN0IGRzcF9wcm9jbG9hZHN0 YXQgewotCXUzMiBjdXJyX2xvYWQ7Ci0JdTMyIHByZWRpY3RlZF9sb2FkOwotCXUzMiBjdXJyX2Rz cF9mcmVxOwotCXUzMiBwcmVkaWN0ZWRfZnJlcTsKLX07Ci0KLS8qIEF0dHJpYnV0ZXMgZm9yIFNU Uk0gY29ubmVjdGlvbnMgYmV0d2VlbiBub2RlcyAqLwotc3RydWN0IGRzcF9zdHJtYXR0ciB7Ci0J dTMyIHNlZ19pZDsJCS8qIE1lbW9yeSBzZWdtZW50IG9uIERTUCB0byBhbGxvY2F0ZSBidWZmZXJz ICovCi0JdTMyIGJ1Zl9zaXplOwkJLyogQnVmZmVyIHNpemUgKERTUCB3b3JkcykgKi8KLQl1MzIg bnVtX2J1ZnM7CQkvKiBOdW1iZXIgb2YgYnVmZmVycyAqLwotCXUzMiBidWZfYWxpZ25tZW50Owkv KiBCdWZmZXIgYWxpZ25tZW50ICovCi0JdTMyIHRpbWVvdXQ7CQkvKiBUaW1lb3V0IGZvciBibG9j a2luZyBTVFJNIGNhbGxzICovCi0JZW51bSBkc3Bfc3RybW1vZGUgc3RybV9tb2RlOwkvKiBtb2Rl IG9mIHN0cmVhbSB3aGVuIG9wZW5lZCAqLwotCS8qIERNQSBjaG5sIGlkIGlmIGRzcF9zdHJtbW9k ZSBpcyBMRE1BIG9yIFJETUEgKi8KLQl1MzIgZG1hX2NobmxfaWQ7Ci0JdTMyIGRtYV9wcmlvcml0 eTsJLyogRE1BIGNoYW5uZWwgcHJpb3JpdHkgMD1sb3dlc3QsID4wPWhpZ2ggKi8KLX07Ci0KLS8q IFRoZSBkc3BfY2JkYXRhIHN0cnVjdHVyZSAqLwotc3RydWN0IGRzcF9jYmRhdGEgewotCXUzMiBj Yl9kYXRhOwotCXU4IG5vZGVfZGF0YVsxXTsKLX07Ci0KLS8qIFRoZSBkc3BfbXNnIHN0cnVjdHVy ZSAqLwotc3RydWN0IGRzcF9tc2cgewotCXUzMiBjbWQ7Ci0JdTMyIGFyZzE7Ci0JdTMyIGFyZzI7 Ci19OwotCi0vKiBUaGUgZHNwX3Jlc291cmNlcmVxbXRzIHN0cnVjdHVyZSBmb3Igbm9kZSdzIHJl c291cmNlIHJlcXVpcmVtZW50cyAqLwotc3RydWN0IGRzcF9yZXNvdXJjZXJlcW10cyB7Ci0JdTMy IGNiX3N0cnVjdDsKLQl1MzIgc3RhdGljX2RhdGFfc2l6ZTsKLQl1MzIgZ2xvYmFsX2RhdGFfc2l6 ZTsKLQl1MzIgcHJvZ3JhbV9tZW1fc2l6ZTsKLQl1MzIgd2NfZXhlY3V0aW9uX3RpbWU7Ci0JdTMy IHdjX3BlcmlvZDsKLQl1MzIgd2NfZGVhZGxpbmU7Ci0JdTMyIGF2Z19leGVjdGlvbl90aW1lOwot CXUzMiBtaW5pbXVtX3BlcmlvZDsKLX07Ci0KLS8qCi0gKiBUaGUgZHNwX3N0cmVhbWNvbm5lY3Qg c3RydWN0dXJlIGRlc2NyaWJlcyBhIHN0cmVhbSBjb25uZWN0aW9uCi0gKiBiZXR3ZWVuIHR3byBu b2Rlcywgb3IgYmV0d2VlbiBhIG5vZGUgYW5kIHRoZSBHUFAKLSAqLwotc3RydWN0IGRzcF9zdHJl YW1jb25uZWN0IHsKLQl1MzIgY2Jfc3RydWN0OwotCWVudW0gZHNwX2Nvbm5lY3R0eXBlIGNvbm5l Y3RfdHlwZTsKLQl1MzIgdGhpc19ub2RlX3N0cmVhbV9pbmRleDsKLQl2b2lkICpjb25uZWN0ZWRf bm9kZTsKLQlzdHJ1Y3QgZHNwX3V1aWQgdWlfY29ubmVjdGVkX25vZGVfaWQ7Ci0JdTMyIGNvbm5l Y3RlZF9ub2RlX3N0cmVhbV9pbmRleDsKLX07Ci0KLXN0cnVjdCBkc3Bfbm9kZXByb2ZzIHsKLQl1 MzIgaGVhcF9zaXplOwotfTsKLQotLyogVGhlIGRzcF9uZGJwcm9wcyBzdHJ1Y3R1cmUgcmVwb3J0 cyB0aGUgYXR0cmlidXRlcyBvZiBhIG5vZGUgKi8KLXN0cnVjdCBkc3BfbmRicHJvcHMgewotCXUz MiBjYl9zdHJ1Y3Q7Ci0Jc3RydWN0IGRzcF91dWlkIHVpX25vZGVfaWQ7Ci0JY2hhciBhY19uYW1l W0RTUF9NQVhOQU1FTEVOXTsKLQllbnVtIG5vZGVfdHlwZSBudHlwZTsKLQl1MzIgY2FjaGVfb25f Z3BwOwotCXN0cnVjdCBkc3BfcmVzb3VyY2VyZXFtdHMgZHNwX3Jlc291cmNlX3JlcW10czsKLQlz MzIgcHJpbzsKLQl1MzIgc3RhY2tfc2l6ZTsKLQl1MzIgc3lzX3N0YWNrX3NpemU7Ci0JdTMyIHN0 YWNrX3NlZzsKLQl1MzIgbWVzc2FnZV9kZXB0aDsKLQl1MzIgbnVtX2lucHV0X3N0cmVhbXM7Ci0J dTMyIG51bV9vdXRwdXRfc3RyZWFtczsKLQl1MzIgdGltZW91dDsKLQl1MzIgY291bnRfcHJvZmls ZXM7CS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcHJvZmlsZXMgKi8KLQkvKiBBcnJheSBvZiBwcm9m aWxlcyAqLwotCXN0cnVjdCBkc3Bfbm9kZXByb2ZzIG5vZGVfcHJvZmlsZXNbTUFYX1BST0ZJTEVT XTsKLQl1MzIgc3RhY2tfc2VnX25hbWU7CS8qIFN0YWNrIFNlZ21lbnQgTmFtZSAqLwotfTsKLQot CS8qIFRoZSBkc3Bfbm9kZWF0dHJpbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVz IG9mIGEKLQkgKiBub2RlIGNsaWVudCAqLwotc3RydWN0IGRzcF9ub2RlYXR0cmluIHsKLQl1MzIg Y2Jfc3RydWN0OwotCXMzMiBwcmlvOwotCXUzMiB0aW1lb3V0OwotCXUzMiBwcm9maWxlX2lkOwot CS8qIFJlc2VydmVkLCBmb3IgQnJpZGdlIEludGVybmFsIHVzZSBvbmx5ICovCi0JdTMyIGhlYXBf c2l6ZTsKLQl2b2lkICpwZ3BwX3ZpcnRfYWRkcjsJLyogUmVzZXJ2ZWQsIGZvciBCcmlkZ2UgSW50 ZXJuYWwgdXNlIG9ubHkgKi8KLX07Ci0KLQkvKiBUaGUgZHNwX25vZGVpbmZvIHN0cnVjdHVyZSBp cyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCi0JICogYWJvdXQgYSBub2RlICovCi1zdHJ1 Y3QgZHNwX25vZGVpbmZvIHsKLQl1MzIgY2Jfc3RydWN0OwotCXN0cnVjdCBkc3BfbmRicHJvcHMg bmJfbm9kZV9kYXRhYmFzZV9wcm9wczsKLQl1MzIgZXhlY3V0aW9uX3ByaW9yaXR5OwotCWVudW0g bm9kZV9zdGF0ZSBuc19leGVjdXRpb25fc3RhdGU7Ci0Jdm9pZCAqZGV2aWNlX293bmVyOwotCXUz MiBudW1iZXJfc3RyZWFtczsKLQlzdHJ1Y3QgZHNwX3N0cmVhbWNvbm5lY3Qgc2Nfc3RyZWFtX2Nv bm5lY3Rpb25bMTZdOwotCXUzMiBub2RlX2VudjsKLX07Ci0KLQkvKiBUaGUgZHNwX25vZGVhdHRy IHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub2RlICovCi1zdHJ1Y3Qg ZHNwX25vZGVhdHRyIHsKLQl1MzIgY2Jfc3RydWN0OwotCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBp bl9ub2RlX2F0dHJfaW47Ci0JdTMyIG5vZGVfYXR0cl9pbnB1dHM7Ci0JdTMyIG5vZGVfYXR0cl9v dXRwdXRzOwotCXN0cnVjdCBkc3Bfbm9kZWluZm8gbm9kZV9pbmZvOwotfTsKLQotLyoKLSAqICBO b3RpZmljYXRpb24gdHlwZTogZWl0aGVyIHRoZSBuYW1lIG9mIGFuIG9wZW5lZCBldmVudCwgb3Ig YW4gZXZlbnQgb3IKLSAqICB3aW5kb3cgaGFuZGxlLgotICovCi1zdHJ1Y3QgZHNwX25vdGlmaWNh dGlvbiB7Ci0JY2hhciAqbmFtZTsKLQl2b2lkICpoYW5kbGU7Ci19OwotCi0vKiBUaGUgZHNwX3By b2Nlc3NvcmF0dHJpbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcHJv Y2Vzc29yICovCi1zdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJpbiB7Ci0JdTMyIGNiX3N0cnVjdDsK LQl1MzIgdGltZW91dDsKLX07Ci0vKgotICogVGhlIGRzcF9wcm9jZXNzb3JpbmZvIHN0cnVjdHVy ZSBkZXNjcmliZXMgYmFzaWMgY2FwYWJpbGl0aWVzIG9mIGEKLSAqIERTUCBwcm9jZXNzb3IKLSAq Lwotc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvIHsKLQl1MzIgY2Jfc3RydWN0OwotCWludCBwcm9j ZXNzb3JfZmFtaWx5OwotCWludCBwcm9jZXNzb3JfdHlwZTsKLQl1MzIgY2xvY2tfcmF0ZTsKLQl1 MzIgaW50ZXJuYWxfbWVtX3NpemU7Ci0JdTMyIGV4dGVybmFsX21lbV9zaXplOwotCXUzMiBwcm9j ZXNzb3JfaWQ7Ci0JaW50IHR5X3J1bm5pbmdfcnRvczsKLQlzMzIgbm9kZV9taW5fcHJpb3JpdHk7 Ci0JczMyIG5vZGVfbWF4X3ByaW9yaXR5OwotfTsKLQotLyogRXJyb3IgaW5mb3JtYXRpb24gb2Yg bGFzdCBEU1AgZXhjZXB0aW9uIHNpZ25hbGxlZCB0byB0aGUgR1BQICovCi1zdHJ1Y3QgZHNwX2Vy cm9yaW5mbyB7Ci0JdTMyIGVycl9tYXNrOwotCXUzMiB2YWwxOwotCXUzMiB2YWwyOwotCXUzMiB2 YWwzOwotfTsKLQotLyogVGhlIGRzcF9wcm9jZXNzb3JzdGF0ZSBzdHJ1Y3R1cmUgZGVzY3JpYmVz IHRoZSBzdGF0ZSBvZiBhIERTUCBwcm9jZXNzb3IgKi8KLXN0cnVjdCBkc3BfcHJvY2Vzc29yc3Rh dGUgewotCXUzMiBjYl9zdHJ1Y3Q7Ci0JZW51bSBkc3BfcHJvY3N0YXRlIHByb2Nfc3RhdGU7Ci19 OwotCi0vKgotICogVGhlIGRzcF9yZXNvdXJjZWluZm8gc3RydWN0dXJlIGlzIHVzZWQgdG8gcmV0 cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYQotICogcHJvY2Vzc29yJ3MgcmVzb3VyY2VzCi0gKi8K LXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvIHsKLQl1MzIgY2Jfc3RydWN0OwotCWVudW0gZHNwX3Jl c291cmNlaW5mb3R5cGUgcmVzb3VyY2VfdHlwZTsKLQl1bmlvbiB7Ci0JCXUzMiByZXNvdXJjZTsK LQkJc3RydWN0IGRzcF9tZW1zdGF0IG1lbV9zdGF0OwotCQlzdHJ1Y3QgZHNwX3Byb2Nsb2Fkc3Rh dCBwcm9jX2xvYWRfc3RhdDsKLQl9IHJlc3VsdDsKLX07Ci0KLS8qCi0gKiBUaGUgZHNwX3N0cmVh bWF0dHJpbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgc3RyZWFtLAot ICogaW5jbHVkaW5nIHNlZ21lbnQgYW5kIGFsaWdubWVudCBvZiBkYXRhIGJ1ZmZlcnMgYWxsb2Nh dGVkIHdpdGgKLSAqIERTUFN0cmVhbV9BbGxvY2F0ZUJ1ZmZlcnMoKSwgaWYgYXBwbGljYWJsZQot ICovCi1zdHJ1Y3QgZHNwX3N0cmVhbWF0dHJpbiB7Ci0JdTMyIGNiX3N0cnVjdDsKLQl1MzIgdGlt ZW91dDsKLQl1MzIgc2VnbWVudF9pZDsKLQl1MzIgYnVmX2FsaWdubWVudDsKLQl1MzIgbnVtX2J1 ZnM7Ci0JZW51bSBkc3Bfc3RybW1vZGUgc3RybV9tb2RlOwotCXUzMiBkbWFfY2hubF9pZDsKLQl1 MzIgZG1hX3ByaW9yaXR5OwotfTsKLQotLyogVGhlIGRzcF9idWZmZXJhdHRyIHN0cnVjdHVyZSBk ZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBkYXRhIGJ1ZmZlciAqLwotc3RydWN0IGRzcF9i dWZmZXJhdHRyIHsKLQl1MzIgY2Jfc3RydWN0OwotCXUzMiBzZWdtZW50X2lkOwotCXUzMiBidWZf YWxpZ25tZW50OwotfTsKLQotLyoKLSAqICBUaGUgZHNwX3N0cmVhbWluZm8gc3RydWN0dXJlIGlz IHVzZWQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24KLSAqICBhYm91dCBhIHN0cmVhbS4KLSAqLwot c3RydWN0IGRzcF9zdHJlYW1pbmZvIHsKLQl1MzIgY2Jfc3RydWN0OwotCXUzMiBudW1iZXJfYnVm c19hbGxvd2VkOwotCXUzMiBudW1iZXJfYnVmc19pbl9zdHJlYW07Ci0JdTMyIG51bWJlcl9ieXRl czsKLQl2b2lkICpzeW5jX29iamVjdF9oYW5kbGU7Ci0JZW51bSBkc3Bfc3RyZWFtc3RhdGUgc3Nf c3RyZWFtX3N0YXRlOwotfTsKLQotLyogRE1NIE1BUCBhdHRyaWJ1dGVzCi1JdCBpcyBhIGJpdCBt YXNrIHdpdGggZWFjaCBiaXQgdmFsdWUgaW5kaWNhdGluZyBhIHNwZWNpZmljIGF0dHJpYnV0ZQot Yml0IDAgLSBHUFAgYWRkcmVzcyB0eXBlICh1c2VyIHZpcnR1YWw9MCwgcGh5c2ljYWw9MSkKLWJp dCAxIC0gTU1VIEVuZGlhbmlzbSAoQmlnIEVuZGlhbj0xLCBMaXR0bGUgRW5kaWFuPTApCi1iaXQg MiAtIE1NVSBtaXhlZCBwYWdlIGF0dHJpYnV0ZSAoTWl4ZWQvIENQVUVTPTEsIFRMQkVTID0wKQot Yml0IDMgLSBNTVUgZWxlbWVudCBzaXplID0gOGJpdCAodmFsaWQgb25seSBmb3Igbm9uIG1peGVk IHBhZ2UgZW50cmllcykKLWJpdCA0IC0gTU1VIGVsZW1lbnQgc2l6ZSA9IDE2Yml0ICh2YWxpZCBv bmx5IGZvciBub24gbWl4ZWQgcGFnZSBlbnRyaWVzKQotYml0IDUgLSBNTVUgZWxlbWVudCBzaXpl ID0gMzJiaXQgKHZhbGlkIG9ubHkgZm9yIG5vbiBtaXhlZCBwYWdlIGVudHJpZXMpCi1iaXQgNiAt IE1NVSBlbGVtZW50IHNpemUgPSA2NGJpdCAodmFsaWQgb25seSBmb3Igbm9uIG1peGVkIHBhZ2Ug ZW50cmllcykKLQotYml0IDE0IC0gSW5wdXQgKHJlYWQgb25seSkgYnVmZmVyCi1iaXQgMTUgLSBP dXRwdXQgKHdyaXRlYWJsZSkgYnVmZmVyCi0qLwotCi0vKiBUeXBlcyBvZiBtYXBwaW5nIGF0dHJp YnV0ZXMgKi8KLQotLyogTVBVIGFkZHJlc3MgaXMgdmlydHVhbCBhbmQgbmVlZHMgdG8gYmUgdHJh bnNsYXRlZCB0byBwaHlzaWNhbCBhZGRyICovCi0jZGVmaW5lIERTUF9NQVBWSVJUVUFMQUREUiAg ICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIERTUF9NQVBQSFlTSUNBTEFERFIgICAgICAgICAw eDAwMDAwMDAxCi0KLS8qIE1hcHBlZCBkYXRhIGlzIGJpZyBlbmRpYW4gKi8KLSNkZWZpbmUgRFNQ X01BUEJJR0VORElBTiAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRFNQX01BUExJVFRM RUVORElBTiAgICAgICAgIDB4MDAwMDAwMDAKLQotLyogRWxlbWVudCBzaXplIGlzIGJhc2VkIG9u IERTUCByL3cgYWNjZXNzIHNpemUgKi8KLSNkZWZpbmUgRFNQX01BUE1JWEVERUxFTVNJWkUgICAg ICAgIDB4MDAwMDAwMDQKLQotLyoKLSAqIEVsZW1lbnQgc2l6ZSBmb3IgTU1VIG1hcHBpbmcgKDgs IDE2LCAzMiwgb3IgNjQgYml0KQotICogSWdub3JlZCBpZiBEU1BfTUFQTUlYRURFTEVNU0laRSBl bmFibGVkCi0gKi8KLSNkZWZpbmUgRFNQX01BUEVMRU1TSVpFOCAgICAgICAgICAgIDB4MDAwMDAw MDgKLSNkZWZpbmUgRFNQX01BUEVMRU1TSVpFMTYgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZp bmUgRFNQX01BUEVMRU1TSVpFMzIgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgRFNQX01B UEVMRU1TSVpFNjQgICAgICAgICAgIDB4MDAwMDAwNDAKLQotI2RlZmluZSBEU1BfTUFQVk1BTExP Q0FERFIgICAgICAgICAweDAwMDAwMDgwCi0KLSNkZWZpbmUgRFNQX01BUERPTk9UTE9DSwkgICAw eDAwMDAwMTAwCi0KLSNkZWZpbmUgRFNQX01BUF9ESVJfTUFTSwkJMHgzRkZGCi0KLSNkZWZpbmUg R0VNX0NBQ0hFX0xJTkVfU0laRSAgICAgMTI4Ci0jZGVmaW5lIEdFTV9MMVBfUFJFRkVUQ0hfU0la RSAgIDEyOAotCi0vKgotICogRGVmaW5pdGlvbnMgZnJvbSBkYnJlZy5oCi0gKi8KLQotI2RlZmlu ZSBEU1BQUk9DVFlQRV9DNjQJCTY0MTAKLSNkZWZpbmUgSVZBUFJPQ1RZUEVfQVJNNwk0NzAKLQot LyogTWF4IHJlZ2lzdHJ5IHBhdGggbGVuZ3RoLiBBbHNvIHRoZSBtYXggcmVnaXN0cnkgdmFsdWUg bGVuZ3RoLiAqLwotI2RlZmluZSBNQVhSRUdQQVRITEVOR1RICTI1NQotCi0jZW5kaWYgLyogREJE RUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUv ZHNwYnJpZGdlL2RibGwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9kYmxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTllMDAuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdl L2RibGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBkYmxsLmgKLSAq Ci0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQ IHByb2Nlc3NvcnMuCi0gKgotICogIERTUC9CSU9TIEJyaWRnZSBEeW5hbWljIGxvYWQgbGlicmFy eSBtb2R1bGUgaW50ZXJmYWNlLiBGdW5jdGlvbiBoZWFkZXIKLSAqICBjb21tZW50cyBhcmUgaW4g dGhlIGZpbGUgZGJsbGRlZnMuaC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhh cyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQ QUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgot ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhF IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIERCTExfCi0jZGVmaW5lIERC TExfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdl L2RibGxkZWZzLmg+Ci0KLWV4dGVybiBib29sIHN5bWJvbHNfcmVsb2FkZWQ7Ci0KLWV4dGVybiB2 b2lkIGRibGxfY2xvc2Uoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYik7Ci1leHRlcm4g aW50IGRibGxfY3JlYXRlKHN0cnVjdCBkYmxsX3Rhcl9vYmogKip0YXJnZXRfb2JqLAotCQkJICAg ICAgc3RydWN0IGRibGxfYXR0cnMgKnBhdHRycyk7Ci1leHRlcm4gdm9pZCBkYmxsX2RlbGV0ZShz dHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpOwotZXh0ZXJuIHZvaWQgZGJsbF9leGl0KHZvaWQp OwotZXh0ZXJuIGJvb2wgZGJsbF9nZXRfYWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxf bGliLCBjaGFyICpuYW1lLAotCQkJICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3ZhbCk7Ci1l eHRlcm4gdm9pZCBkYmxsX2dldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsCi0J CQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKTsKLWV4dGVybiBib29sIGRibGxfZ2V0X2Nf YWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCBjaGFyICpuYW1lLAotCQkJICAg IHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKLWV4dGVybiBpbnQgZGJsbF9nZXRfc2Vj dChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLAotCQkJCXUzMiAqcGFk ZHIsIHUzMiAqcHNpemUpOwotZXh0ZXJuIGJvb2wgZGJsbF9pbml0KHZvaWQpOwotZXh0ZXJuIGlu dCBkYmxsX2xvYWQoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKLQkJCSAgICBkYmxsX2Zs YWdzIGZsYWdzLAotCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycywgdTMyICogZW50cnkp OwotZXh0ZXJuIGludCBkYmxsX29wZW4oc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LCBjaGFy ICpmaWxlLAotCQkJICAgIGRibGxfZmxhZ3MgZmxhZ3MsCi0JCSAgICAgICBzdHJ1Y3QgZGJsbF9s aWJyYXJ5X29iaiAqKmxpYl9vYmopOwotZXh0ZXJuIGludCBkYmxsX3JlYWRfc2VjdChzdHJ1Y3Qg ZGJsbF9saWJyYXJ5X29iaiAqbGliLAotCQkJCSBjaGFyICpuYW1lLCBjaGFyICpidWYsIHUzMiBz aXplKTsKLWV4dGVybiB2b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICps aWIsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7Ci0jaWZkZWYgQ09ORklHX1RJRFNQQlJJREdF X0JBQ0tUUkFDRQotYm9vbCBkYmxsX2ZpbmRfZHNwX3N5bWJvbChzdHJ1Y3QgZGJsbF9saWJyYXJ5 X29iaiAqemxfbGliLCB1MzIgYWRkcmVzcywKLQkJdTMyIG9mZnNldF9yYW5nZSwgdTMyICpzeW1f YWRkcl9vdXRwdXQsIGNoYXIgKm5hbWVfb3V0cHV0KTsKLSNlbmRpZgotCi0jZW5kaWYgLyogREJM TF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9kYmxsZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUv ZHNwYnJpZGdlL2RibGxkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOWUw NzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL2RibGxkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAq IGRibGxkZWZzLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rp b25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBEQkxMREVGU18K LSNkZWZpbmUgREJMTERFRlNfCi0KLS8qCi0gKiAgQml0IG1hc2tzIGZvciBkYmxfZmxhZ3MuCi0g Ki8KLSNkZWZpbmUgREJMTF9OT0xPQUQgICAweDAJLyogRG9uJ3QgbG9hZCBzeW1ib2xzLCBjb2Rl LCBvciBkYXRhICovCi0jZGVmaW5lIERCTExfU1lNQiAgICAgMHgxCS8qIGxvYWQgc3ltYm9scyAq LwotI2RlZmluZSBEQkxMX0NPREUgICAgIDB4MgkvKiBsb2FkIGNvZGUgKi8KLSNkZWZpbmUgREJM TF9EQVRBICAgICAweDQJLyogbG9hZCBkYXRhICovCi0jZGVmaW5lIERCTExfRFlOQU1JQyAgMHg4 CS8qIGR5bmFtaWMgbG9hZCAqLwotI2RlZmluZSBEQkxMX0JTUyAgICAgIDB4MjAJLyogVW5pdGlh bGl6ZWQgc2VjdGlvbiAqLwotCi0jZGVmaW5lIERCTExfTUFYUEFUSExFTkdUSCAgICAgICAyNTUK LQotLyoKLSAqICA9PT09PT09PSBEQkxMX1RhcmdldCA9PT09PT09PQotICoKLSAqLwotc3RydWN0 IGRibGxfdGFyX29iajsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX2ZsYWdzID09PT09PT09Ci0g KiAgU3BlY2lmaWVzIHdoZXRoZXIgdG8gbG9hZCBjb2RlLCBkYXRhLCBvciBzeW1ib2xzCi0gKi8K LXR5cGVkZWYgczMyIGRibGxfZmxhZ3M7Ci0KLS8qCi0gKiAgPT09PT09PT0gREJMTF9MaWJyYXJ5 ID09PT09PT09Ci0gKgotICovCi1zdHJ1Y3QgZGJsbF9saWJyYXJ5X29iajsKLQotLyoKLSAqICA9 PT09PT09PSBkYmxsX3NlY3RfaW5mbyA9PT09PT09PQotICogIEZvciBjb2xsZWN0aW5nIGluZm8g b24gb3ZlcmxheSBzZWN0aW9ucwotICovCi1zdHJ1Y3QgZGJsbF9zZWN0X2luZm8gewotCWNvbnN0 IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Ygc2VjdGlvbiAqLwotCXUzMiBzZWN0X3J1bl9hZGRyOwkv KiBydW4gYWRkcmVzcyBvZiBzZWN0aW9uICovCi0JdTMyIHNlY3RfbG9hZF9hZGRyOwkvKiBsb2Fk IGFkZHJlc3Mgb2Ygc2VjdGlvbiAqLwotCXUzMiBzaXplOwkJLyogc2l6ZSBvZiBzZWN0aW9uICh0 YXJnZXQgTUFVcykgKi8KLQlkYmxsX2ZsYWdzIHR5cGU7CS8qIENvZGUsIGRhdGEsIG9yIEJTUyAq LwotfTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX3N5bV92YWwgPT09PT09PT0KLSAqICAoTmVl ZGVkIGZvciBkeW5hbWljIGxvYWQgbGlicmFyeSkKLSAqLwotc3RydWN0IGRibGxfc3ltX3ZhbCB7 Ci0JdTMyIHZhbHVlOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX2FsbG9jX2Z4biA9PT09 PT09PQotICogIEFsbG9jYXRlIG1lbW9yeSBmdW5jdGlvbi4gIEFsbG9jYXRlIG9yIHJlc2VydmUg KGlmIHJlc2VydmVkID09IFRSVUUpCi0gKiAgInNpemUiIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNl Z21lbnQgInNwYWNlIiBhbmQgcmV0dXJuIHRoZSBhZGRyZXNzIGluCi0gKiAgKmRzcF9hZGRyZXNz IChvciBzdGFydGluZyBhdCAqZHNwX2FkZHJlc3MgaWYgcmVzZXJ2ZSA9PSBUUlVFKS4gUmV0dXJu cyAwIG9uCi0gKiAgc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICovCi10 eXBlZGVmIHMzMigqZGJsbF9hbGxvY19meG4pICh2b2lkICpoZGwsIHMzMiBzcGFjZSwgdTMyIHNp emUsIHUzMiBhbGlnbiwKLQkJCSAgICAgIHUzMiAqZHNwX2FkZHJlc3MsIHMzMiBzZWdfaWQsIHMz MiByZXEsCi0JCQkgICAgICBib29sIHJlc2VydmVkKTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxs X2Nsb3NlX2Z4biA9PT09PT09PQotICovCi10eXBlZGVmIHMzMigqZGJsbF9mX2Nsb3NlX2Z4bikg KHZvaWQgKik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9mcmVlX2Z4biA9PT09PT09PQotICog IEZyZWUgbWVtb3J5IGZ1bmN0aW9uLiAgRnJlZSwgb3IgdW5yZXNlcnZlIChpZiByZXNlcnZlZCA9 PSBUUlVFKSAic2l6ZSIKLSAqICBieXRlcyBvZiBtZW1vcnkgZnJvbSBzZWdtZW50ICJzcGFjZSIK LSAqLwotdHlwZWRlZiBib29sKCpkYmxsX2ZyZWVfZnhuKSAodm9pZCAqaGRsLCB1MzIgYWRkciwg czMyIHNwYWNlLCB1MzIgc2l6ZSwKLQkJCSAgICAgIGJvb2wgcmVzZXJ2ZWQpOwotCi0vKgotICog ID09PT09PT09IGRibGxfZl9vcGVuX2Z4biA9PT09PT09PQotICovCi10eXBlZGVmIHZvaWQgKigq ZGJsbF9mX29wZW5fZnhuKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotCi0vKgotICog ID09PT09PT09IGRibGxfbG9nX3dyaXRlX2Z4biA9PT09PT09PQotICogIEZ1bmN0aW9uIHRvIGNh bGwgd2hlbiB3cml0aW5nIGRhdGEgZnJvbSBhIHNlY3Rpb24sIHRvIGxvZyB0aGUgaW5mby4KLSAq ICBDYW4gYmUgTlVMTCBpZiBubyBsb2dnaW5nIGlzIHJlcXVpcmVkLgotICovCi10eXBlZGVmIGlu dCgqZGJsbF9sb2dfd3JpdGVfZnhuKSAodm9pZCAqaGFuZGxlLAotCQkJCQkgc3RydWN0IGRibGxf c2VjdF9pbmZvICpzZWN0LCB1MzIgYWRkciwKLQkJCQkJIHUzMiBieXRlcyk7Ci0KLS8qCi0gKiAg PT09PT09PT0gZGJsbF9yZWFkX2Z4biA9PT09PT09PQotICovCi10eXBlZGVmIHMzMigqZGJsbF9y ZWFkX2Z4bikgKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQgKik7Ci0KLS8qCi0gKiAgPT09 PT09PT0gZGJsbF9zZWVrX2Z4biA9PT09PT09PQotICovCi10eXBlZGVmIHMzMigqZGJsbF9zZWVr X2Z4bikgKHZvaWQgKiwgbG9uZywgaW50KTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX3N5bV9s b29rdXAgPT09PT09PT0KLSAqICBTeW1ib2wgbG9va3VwIGZ1bmN0aW9uIC0gRmluZCB0aGUgc3lt Ym9sIG5hbWUgYW5kIHJldHVybiBpdHMgdmFsdWUuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGhhbmRsZSAgICAgICAgICAtIE9wYXF1ZSBoYW5kbGUKLSAqICAgICAgcGFyZyAgICAgICAg ICAgIC0gT3BhcXVlIGFyZ3VtZW50LgotICogICAgICBuYW1lICAgICAgICAgICAgLSBOYW1lIG9m IHN5bWJvbCB0byBsb29rdXAuCi0gKiAgICAgIHN5bSAgICAgICAgICAgICAtIExvY2F0aW9uIHRv IHN0b3JlIGFkZHJlc3Mgb2Ygc3ltYm9sIHN0cnVjdHVyZS4KLSAqCi0gKiAgUmV0dXJuczoKLSAq ICAgICAgVFJVRTogICAgICAgICAgIFN1Y2Nlc3MgKHN5bWJvbCB3YXMgZm91bmQpLgotICogICAg ICBGQUxTRTogICAgICAgICAgRmFpbGVkIHRvIGZpbmQgc3ltYm9sLgotICovCi10eXBlZGVmIGJv b2woKmRibGxfc3ltX2xvb2t1cCkgKHZvaWQgKmhhbmRsZSwgdm9pZCAqcGFyZywgdm9pZCAqcm1t X2hhbmRsZSwKLQkJCQljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3lt KTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX3RlbGxfZnhuID09PT09PT09Ci0gKi8KLXR5cGVk ZWYgczMyKCpkYmxsX3RlbGxfZnhuKSAodm9pZCAqKTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxs X3dyaXRlX2Z4biA9PT09PT09PQotICogIFdyaXRlIG1lbW9yeSBmdW5jdGlvbi4gIFdyaXRlICJu IiBIT1NUIGJ5dGVzIG9mIG1lbW9yeSB0byBzZWdtZW50ICJtdHlwZSIKLSAqICBzdGFydGluZyBh dCBhZGRyZXNzICJkc3BfYWRkcmVzcyIgZnJvbSB0aGUgYnVmZmVyICJidWYiLiAgVGhlIGJ1ZmZl ciBpcwotICogIGZvcm1hdHRlZCBhcyBhbiBhcnJheSBvZiB3b3JkcyBhcHByb3ByaWF0ZSBmb3Ig dGhlIERTUC4KLSAqLwotdHlwZWRlZiBzMzIoKmRibGxfd3JpdGVfZnhuKSAodm9pZCAqaGRsLCB1 MzIgZHNwX2FkZHJlc3MsIHZvaWQgKmJ1ZiwKLQkJCSAgICAgIHUzMiBuLCBzMzIgbXR5cGUpOwot Ci0vKgotICogID09PT09PT09IGRibGxfYXR0cnMgPT09PT09PT0KLSAqLwotc3RydWN0IGRibGxf YXR0cnMgewotCWRibGxfYWxsb2NfZnhuIGFsbG9jOwotCWRibGxfZnJlZV9meG4gZnJlZTsKLQl2 b2lkICpybW1faGFuZGxlOwkvKiBIYW5kbGUgdG8gcGFzcyB0byBhbGxvYywgZnJlZSBmdW5jdGlv bnMgKi8KLQlkYmxsX3dyaXRlX2Z4biB3cml0ZTsKLQl2b2lkICppbnB1dF9wYXJhbXM7CS8qIEhh bmRsZSB0byBwYXNzIHRvIHdyaXRlLCBjaW5pdCBmdW5jdGlvbiAqLwotCWJvb2wgYmFzZV9pbWFn ZTsKLQlkYmxsX2xvZ193cml0ZV9meG4gbG9nX3dyaXRlOwotCXZvaWQgKmxvZ193cml0ZV9oYW5k bGU7Ci0KLQkvKiBTeW1ib2wgbWF0Y2hpbmcgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRv IGl0ICovCi0JZGJsbF9zeW1fbG9va3VwIHN5bV9sb29rdXA7Ci0Jdm9pZCAqc3ltX2hhbmRsZTsK LQl2b2lkICpzeW1fYXJnOwotCi0JLyoKLQkgKiAgVGhlc2UgZmlsZSBtYW5pcHVsYXRpb24gZnVu Y3Rpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggdGhlCi0JICogICJDIiBydW4gdGltZSBs aWJyYXJ5IGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgotCSAqLwotCSBzMzIgKCpmcmVhZCko dm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGNvdW50LCB2b2lkICpmaWxwKTsKLQkgczMy ICgqZnNlZWspKHZvaWQgKmZpbHAsIGxvbmcgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKLQkgczMyICgq ZnRlbGwpKHZvaWQgKmZpbHApOwotCSBzMzIgKCpmY2xvc2UpKHZvaWQgKmZpbHApOwotCSB2b2lk ICooKmZvcGVuKShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKLX07Ci0KLS8q Ci0gKiAgPT09PT09PT0gZGJsbF9jbG9zZSA9PT09PT09PQotICogIENsb3NlIGxpYnJhcnkgb3Bl bmVkIHdpdGggZGJsbF9vcGVuLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGxpYiAgICAgICAg ICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxfb3BlbigpLgotICogIFJldHVybnM6Ci0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIERCTCBpbml0aWFsaXplZC4KLSAqICAgICAgVmFsaWQgbGli LgotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgdm9pZCAoKmRibGxfY2xvc2VfZnhuKSAoc3Ry dWN0IGRibGxfbGlicmFyeV9vYmogKmxpYnJhcnkpOwotCi0vKgotICogID09PT09PT09IGRibGxf Y3JlYXRlID09PT09PT09Ci0gKiAgQ3JlYXRlIGEgdGFyZ2V0IG9iamVjdCwgc3BlY2lmeWluZyB0 aGUgYWxsb2MsIGZyZWUsIGFuZCB3cml0ZSBmdW5jdGlvbnMuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgdGFyZ2V0X29iaiAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgdGFyZ2V0IGhhbmRs ZSBvbiBvdXRwdXQuCi0gKiAgICAgIHBhdHRycyAgICAgICAgICAtIEF0dHJpYnV0ZXMuCi0gKiAg UmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FTk9NRU06ICAg IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREJMIGlu aXRpYWxpemVkLgotICogICAgICBwYXR0cnMgIT0gTlVMTC4KLSAqICAgICAgdGFyZ2V0X29iaiAh PSBOVUxMOwotICogIEVuc3VyZXM6Ci0gKiAgICAgIFN1Y2Nlc3M6ICAgICAgICAqdGFyZ2V0X29i aiAhPSBOVUxMLgotICogICAgICBGYWlsdXJlOiAgICAgICAgKnRhcmdldF9vYmogPT0gTlVMTC4K LSAqLwotdHlwZWRlZiBpbnQoKmRibGxfY3JlYXRlX2Z4bikgKHN0cnVjdCBkYmxsX3Rhcl9vYmog Kip0YXJnZXRfb2JqLAotCQkJCSAgICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7Ci0KLS8q Ci0gKiAgPT09PT09PT0gZGJsbF9kZWxldGUgPT09PT09PT0KLSAqICBEZWxldGUgdGFyZ2V0IG9i amVjdCBhbmQgZnJlZSByZXNvdXJjZXMgZm9yIGFueSBsb2FkZWQgbGlicmFyaWVzLgotICogIFBh cmFtZXRlcnM6Ci0gKiAgICAgIHRhcmdldCAgICAgICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9t IERCTExfQ3JlYXRlKCkuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgREJM IGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCB0YXJnZXQuCi0gKiAgRW5zdXJlczoKLSAqLwot dHlwZWRlZiB2b2lkICgqZGJsbF9kZWxldGVfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqdGFy Z2V0KTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX2V4aXQgPT09PT09PT0KLSAqICBEaXNjb250 aW51ZSB1c2Ugb2YgREJMIG1vZHVsZS4KLSAqICBQYXJhbWV0ZXJzOgotICogIFJldHVybnM6Ci0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIHJlZnMgPiAwLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIHJl ZnMgPj0gMC4KLSAqLwotdHlwZWRlZiB2b2lkICgqZGJsbF9leGl0X2Z4bikgKHZvaWQpOwotCi0v KgotICogID09PT09PT09IGRibGxfZ2V0X2FkZHIgPT09PT09PT0KLSAqICBHZXQgYWRkcmVzcyBv ZiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAg ICBsaWIgICAgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KLSAq ICAgICAgbmFtZSAgICAgICAgICAgIC0gTmFtZSBvZiBzeW1ib2wKLSAqICAgICAgc3ltX3ZhbCAg ICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc3ltYm9sIGFkZHJlc3Mgb24gb3V0cHV0LgotICog IFJldHVybnM6Ci0gKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzLgotICogICAgICBGQUxT RTogICAgICAgICAgU3ltYm9sIG5vdCBmb3VuZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREJM IGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCBsaWJyYXJ5LgotICogICAgICBuYW1lICE9IE5V TEwuCi0gKiAgICAgIHN5bV92YWwgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi10eXBlZGVm IGJvb2woKmRibGxfZ2V0X2FkZHJfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwg Y2hhciAqbmFtZSwKLQkJCQkgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKLQotLyoK LSAqICA9PT09PT09PSBkYmxsX2dldF9hdHRycyA9PT09PT09PQotICogIFJldHJpZXZlIHRoZSBh dHRyaWJ1dGVzIG9mIHRoZSB0YXJnZXQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgdGFyZ2V0 ICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gREJMTF9DcmVhdGUoKS4KLSAqICAgICAg cGF0dHJzICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgYXR0cmlidXRlcyBvbiBvdXRwdXQu Ci0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgREJMIGluaXRpYWxpemVkLgot ICogICAgICBWYWxpZCB0YXJnZXQuCi0gKiAgICAgIHBhdHRycyAhPSBOVUxMLgotICogIEVuc3Vy ZXM6Ci0gKi8KLXR5cGVkZWYgdm9pZCAoKmRibGxfZ2V0X2F0dHJzX2Z4bikgKHN0cnVjdCBkYmxs X3Rhcl9vYmogKnRhcmdldCwKLQkJCQkgICAgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzKTsKLQot LyoKLSAqICA9PT09PT09PSBkYmxsX2dldF9jX2FkZHIgPT09PT09PT0KLSAqICBHZXQgYWRkcmVz cyBvZiAiQyIgbmFtZSBvbiB0aGUgc3BlY2lmaWVkIGxpYnJhcnkuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVu KCkuCi0gKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc3ltYm9sCi0gKiAgICAgIHN5 bV92YWwgICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIHN5bWJvbCBhZGRyZXNzIG9uIG91dHB1 dC4KLSAqICBSZXR1cm5zOgotICogICAgICBUUlVFOiAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgRkFMU0U6ICAgICAgICAgIFN5bWJvbCBub3QgZm91bmQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAg ICAgIERCTCBpbml0aWFsaXplZC4KLSAqICAgICAgVmFsaWQgdGFyZ2V0LgotICogICAgICBuYW1l ICE9IE5VTEwuCi0gKiAgICAgIHN5bV92YWwgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi10 eXBlZGVmIGJvb2woKmRibGxfZ2V0X2NfYWRkcl9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29i aiAqbGliLCBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3Zh bCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9nZXRfc2VjdCA9PT09PT09PQotICogIEdldCBh ZGRyZXNzIGFuZCBzaXplIG9mIGEgbmFtZWQgc2VjdGlvbi4KLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBsaWIgICAgICAgICAgICAgLSBMaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxf b3BlbigpLgotICogICAgICBuYW1lICAgICAgICAgICAgLSBOYW1lIG9mIHNlY3Rpb24uCi0gKiAg ICAgIHBhZGRyICAgICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIHNlY3Rpb24gYWRkcmVzcyBv biBvdXRwdXQuCi0gKiAgICAgIHBzaXplICAgICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIHNl Y3Rpb24gc2l6ZSBvbiBvdXRwdXQuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1 Y2Nlc3MuCi0gKiAgICAgIC1FTlhJTzogICAgU2VjdGlvbiBub3QgZm91bmQuCi0gKiAgUmVxdWly ZXM6Ci0gKiAgICAgIERCTCBpbml0aWFsaXplZC4KLSAqICAgICAgVmFsaWQgbGliLgotICogICAg ICBuYW1lICE9IE5VTEwuCi0gKiAgICAgIHBhZGRyICE9IE5VTEw7Ci0gKiAgICAgIHBzaXplICE9 IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKmRibGxfZ2V0X3NlY3RfZnhu KSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKLQkJCQkJY2hhciAqbmFtZSwgdTMyICph ZGRyLCB1MzIgKnNpemUpOwotCi0vKgotICogID09PT09PT09IGRibGxfaW5pdCA9PT09PT09PQot ICogIEluaXRpYWxpemUgREJMIG1vZHVsZS4KLSAqICBQYXJhbWV0ZXJzOgotICogIFJldHVybnM6 Ci0gKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzLgotICogICAgICBGQUxTRTogICAgICAg ICAgRmFpbHVyZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgcmVmcyA+PSAwLgotICogIEVuc3Vy ZXM6Ci0gKiAgICAgIFN1Y2Nlc3M6ICAgICAgICByZWZzID4gMC4KLSAqICAgICAgRmFpbHVyZTog ICAgICAgIHJlZnMgPj0gMC4KLSAqLwotdHlwZWRlZiBib29sKCpkYmxsX2luaXRfZnhuKSAodm9p ZCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9sb2FkID09PT09PT09Ci0gKiAgTG9hZCBsaWJy YXJ5IG9udG8gdGhlIHRhcmdldC4KLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgbGliICAg ICAgICAgICAgIC0gTGlicmFyeSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KLSAq ICAgICAgZmxhZ3MgICAgICAgICAgIC0gTG9hZCBjb2RlLCBkYXRhIGFuZC9vciBzeW1ib2xzLgot ICogICAgICBhdHRycyAgICAgICAgICAgLSBNYXkgY29udGFpbiBhbGxvYywgZnJlZSwgYW5kIHdy aXRlIGZ1bmN0aW9uLgotICogICAgICBlbnRyeV9wdCAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9y ZSBwcm9ncmFtIGVudHJ5IG9uIG91dHB1dC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAg ICAgU3VjY2Vzcy4KLSAqICAgICAgLUVCQURGOiAgICAgRmlsZSByZWFkIGZhaWxlZC4KLSAqICAg ICAgLUVJTFNFUTogICBGYWlsdXJlIGluIGR5bmFtaWMgbG9hZGVyIGxpYnJhcnkuCi0gKiAgUmVx dWlyZXM6Ci0gKiAgICAgIERCTCBpbml0aWFsaXplZC4KLSAqICAgICAgVmFsaWQgbGliLgotICog ICAgICBlbnRyeSAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgaW50KCpkYmxs X2xvYWRfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKLQkJCQkgICAgZGJsbF9m bGFncyBmbGFncywKLQkJCQkgICAgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzLCB1MzIgKmVudHJ5 KTsKLS8qCi0gKiAgPT09PT09PT0gZGJsbF9vcGVuID09PT09PT09Ci0gKiAgZGJsbF9vcGVuKCkg cmV0dXJucyBhIGxpYnJhcnkgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZC91bmxvYWQK LSAqICB0aGUgc3ltYm9scy9jb2RlL2RhdGEgdmlhIGRibGxfbG9hZCgpL2RibGxfdW5sb2FkKCku Ci0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgdGFyZ2V0ICAgICAgICAgIC0gSGFuZGxlIHJldHVy bmVkIGZyb20gZGJsbF9jcmVhdGUoKS4KLSAqICAgICAgZmlsZSAgICAgICAgICAgIC0gTmFtZSBv ZiBmaWxlIHRvIG9wZW4uCi0gKiAgICAgIGZsYWdzICAgICAgICAgICAtIElmIGZsYWdzICYgREJM TF9TWU1CLCBsb2FkIHN5bWJvbHMuCi0gKiAgICAgIGxpYl9vYmogICAgICAgICAtIExvY2F0aW9u IHRvIHN0b3JlIGxpYnJhcnkgaGFuZGxlIG9uIG91dHB1dC4KLSAqICBSZXR1cm5zOgotICogICAg ICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FTk9NRU06ICAgICAgICBNZW1vcnkg YWxsb2NhdGlvbiBmYWlsdXJlLgotICogICAgICAtRUJBREY6ICAgICAgICAgRmlsZSBvcGVuL3Jl YWQgZmFpbHVyZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIFVuYWJsZSB0byBkZXRlcm1pbmUg dGFyZ2V0IHR5cGUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERCTCBpbml0aWFsaXplZC4KLSAq ICAgICAgVmFsaWQgdGFyZ2V0LgotICogICAgICBmaWxlICE9IE5VTEwuCi0gKiAgICAgIGxpYl9v YmogIT0gTlVMTC4KLSAqICAgICAgZGJsbF9hdHRycyBmb3BlbiBmdW5jdGlvbiBub24tTlVMTC4K LSAqICBFbnN1cmVzOgotICogICAgICBTdWNjZXNzOiAgICAgICAgVmFsaWQgKmxpYl9vYmouCi0g KiAgICAgIEZhaWx1cmU6ICAgICAgICAqbGliX29iaiA9PSBOVUxMLgotICovCi10eXBlZGVmIGlu dCgqZGJsbF9vcGVuX2Z4bikgKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmls ZSwKLQkJCQkgICAgZGJsbF9mbGFncyBmbGFncywKLQkJCQkgICAgc3RydWN0IGRibGxfbGlicmFy eV9vYmogKipsaWJfb2JqKTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX3JlYWRfc2VjdCA9PT09 PT09PQotICogIFJlYWQgQ09GRiBzZWN0aW9uIGludG8gYSBjaGFyYWN0ZXIgYnVmZmVyLgotICog IFBhcmFtZXRlcnM6Ci0gKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJl dHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCi0gKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUg b2Ygc2VjdGlvbi4KLSAqICAgICAgcGJ1ZiAgICAgICAgICAgIC0gQnVmZmVyIHRvIHdyaXRlIHNl Y3Rpb24gY29udGVudHMgaW50by4KLSAqICAgICAgc2l6ZSAgICAgICAgICAgIC0gQnVmZmVyIHNp emUKLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVO WElPOiAgICBOYW1lZCBzZWN0aW9uIGRvZXMgbm90IGV4aXN0cy4KLSAqICBSZXF1aXJlczoKLSAq ICAgICAgREJMIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCBsaWIuCi0gKiAgICAgIG5hbWUg IT0gTlVMTC4KLSAqICAgICAgcGJ1ZiAhPSBOVUxMLgotICogICAgICBzaXplICE9IDAuCi0gKiAg RW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKmRibGxfcmVhZF9zZWN0X2Z4bikgKHN0cnVjdCBk YmxsX2xpYnJhcnlfb2JqICpsaWIsCi0JCQkJCSBjaGFyICpuYW1lLCBjaGFyICpjb250ZW50LAot CQkJCQkgdTMyIGNvbnRfc2l6ZSk7Ci0vKgotICogID09PT09PT09IGRibGxfdW5sb2FkID09PT09 PT09Ci0gKiAgVW5sb2FkIGxpYnJhcnkgbG9hZGVkIHdpdGggZGJsbF9sb2FkKCkuCi0gKiAgUGFy YW1ldGVyczoKLSAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20g ZGJsbF9vcGVuKCkuCi0gKiAgICAgIGF0dHJzICAgICAgICAgICAtIENvbnRhaW5zIGZyZWUoKSBm dW5jdGlvbiBhbmQgaGFuZGxlIHRvIHBhc3MgdG8gaXQuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1 aXJlczoKLSAqICAgICAgREJMIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCBsaWIuCi0gKiAg RW5zdXJlczoKLSAqLwotdHlwZWRlZiB2b2lkICgqZGJsbF91bmxvYWRfZnhuKSAoc3RydWN0IGRi bGxfbGlicmFyeV9vYmogKmxpYnJhcnksCi0JCQkJIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7 Ci1zdHJ1Y3QgZGJsbF9meG5zIHsKLQlkYmxsX2Nsb3NlX2Z4biBjbG9zZV9meG47Ci0JZGJsbF9j cmVhdGVfZnhuIGNyZWF0ZV9meG47Ci0JZGJsbF9kZWxldGVfZnhuIGRlbGV0ZV9meG47Ci0JZGJs bF9leGl0X2Z4biBleGl0X2Z4bjsKLQlkYmxsX2dldF9hdHRyc19meG4gZ2V0X2F0dHJzX2Z4bjsK LQlkYmxsX2dldF9hZGRyX2Z4biBnZXRfYWRkcl9meG47Ci0JZGJsbF9nZXRfY19hZGRyX2Z4biBn ZXRfY19hZGRyX2Z4bjsKLQlkYmxsX2dldF9zZWN0X2Z4biBnZXRfc2VjdF9meG47Ci0JZGJsbF9p bml0X2Z4biBpbml0X2Z4bjsKLQlkYmxsX2xvYWRfZnhuIGxvYWRfZnhuOwotCWRibGxfb3Blbl9m eG4gb3Blbl9meG47Ci0JZGJsbF9yZWFkX3NlY3RfZnhuIHJlYWRfc2VjdF9meG47Ci0JZGJsbF91 bmxvYWRfZnhuIHVubG9hZF9meG47Ci19OwotCi0jZW5kaWYgLyogREJMREVGU18gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYu aCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyZDc5ZS4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmgKKysrIC9kZXYv bnVsbApAQCAtMSw2MjAgKzAsMCBAQAotLyoKLSAqIGRldi5oCi0gKgotICogRFNQLUJJT1MgQnJp ZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoK LSAqIEJyaWRnZSBCcmlkZ2UgZHJpdmVyIGRldmljZSBvcGVyYXRpb25zLgotICoKLSAqIENvcHly aWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBw YWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBX SVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg V0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO VElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNp Zm5kZWYgREVWXwotI2RlZmluZSBERVZfCi0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBNb2R1bGUgRGVwZW5kZW50IEhlYWRlcnMgKi8KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvY2hubGRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+Ci0jaW5jbHVkZSA8ZHNw YnJpZGdlL2NvZC5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KLSNpbmNsdWRlIDxk c3BicmlkZ2Uvbm9kZWRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgotI2luY2x1 ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KLQot LyoKLSAqICA9PT09PT09PSBkZXZfYnJkX3dyaXRlX2Z4biA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXMgdGhlIENPRCB3cml0ZSBm dW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24KLSAqICAgICAgaXMgcGFzc2VkIGEgaGFuZGxlIHRvIGEg REVWX2hPYmplY3QgYnkgWkwgaW4gYXJiLCB0aGVuIGNhbGxzIHRoZQotICogICAgICBkZXZpY2Un cyBicmlkZ2VfYnJkX3dyaXRlKCkgZnVuY3Rpb24uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAg YXJiOiAgICAgICAgICAgSGFuZGxlIHRvIGEgRGV2aWNlIE9iamVjdC4KLSAqICAgICAgZGV2X2N0 eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCi0gKiAg ICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoRGVzdGluYXRpb24pLgot ICogICAgICBob3N0X2J1ZjogICAgICAgUG9pbnRlciB0byBob3N0IGJ1ZmZlciAoU291cmNlKS4K LSAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgot ICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCB0byB3aGljaCB0byB0 cmFuc2Zlci4KLSAqICBSZXR1cm5zOgotICogICAgICBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4g IFJldHVybnMgMCBpZiB0aGUgREVWX2hPYmplY3QgcGFzc2VkIGluIHZpYQotICogICAgICBhcmIg aXMgaW52YWxpZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxpemVkLgotICog ICAgICBob3N0X2J1ZiAhPSBOVUxMCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIHUzMiBkZXZf YnJkX3dyaXRlX2Z4bih2b2lkICphcmIsCi0JCQkgICAgIHUzMiBkc3BfYWRkLAotCQkJICAgICB2 b2lkICpob3N0X2J1ZiwgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSk7Ci0KLS8qCi0g KiAgPT09PT09PT0gZGV2X2NyZWF0ZV9kZXZpY2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBDYWxsZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gbG9hZCB0aGUgQnJpZGdlIERy aXZlciBmb3IgYQotICogICAgICAnQnJpZGdlIGRldmljZS4KLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBkZXZpY2Vfb2JqOiAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGRldmlj ZSBvYmplY3QgaGFuZGxlLgotICogICAgICBkcml2ZXJfZmlsZV9uYW1lOiBOYW1lIG9mIEJyaWRn ZSBkcml2ZXIgUEUgRExMIGZpbGUgdG8gbG9hZC4gIElmIHRoZQotICogICAgICAgICAgICAgICAg ICAgICAgYWJzb2x1dGUgcGF0aCBpcyBub3QgcHJvdmlkZWQsIHRoZSBmaWxlIGlzIGxvYWRlZAot ICogICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCAnQnJpZGdlJ3MgbW9kdWxlIHNlYXJjaCBw YXRoLgotICogICAgICBob3N0X2NvbmZpZzogICAgSG9zdCBjb25maWd1cmF0aW9uIGluZm9ybWF0 aW9uLCB0byBiZSBwYXNzZWQgZG93bgotICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIEJy aWRnZSBkcml2ZXIgd2hlbiBicmlkZ2VfZGV2X2NyZWF0ZSgpIGlzIGNhbGxlZC4KLSAqICAgICAg cERzcENvbmZpZzogICAgIERTUCByZXNvdXJjZXMsIHRvIGJlIHBhc3NlZCBkb3duIHRvIHRoZSBC cmlkZ2UgZHJpdmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJyaWRnZV9kZXZfY3Jl YXRlKCkgaXMgY2FsbGVkLgotICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIFBsYXRmb3JtIHNw ZWNpZmljIGRldmljZSBub2RlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAg TW9kdWxlIGlzIGxvYWRlZCwgZGV2aWNlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkCi0gKiAgICAg IC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNyZWF0ZSBuZWVkZWQgcmVz b3VyY2VzLgotICogICAgICAtRVBFUk06ICAgICAgICAgICAgICBVbmFibGUgdG8gZmluZCBCcmlk Z2UgZHJpdmVyIGVudHJ5IHBvaW50IGZ1bmN0aW9uLgotICogICAgICAtRVNQSVBFOiAgIFVuYWJs ZSB0byBsb2FkIFpMIERMTC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxpemVk LgotICogICAgICBkZXZpY2Vfb2JqICE9IE5VTEwuCi0gKiAgICAgIGRyaXZlcl9maWxlX25hbWUg IT0gTlVMTC4KLSAqICAgICAgaG9zdF9jb25maWcgIT0gTlVMTC4KLSAqICAgICAgcERzcENvbmZp ZyAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAqZGV2aWNlX29iaiB3aWxsIGNv bnRhaW4gaGFuZGxlIHRvIHRoZSBuZXcgZGV2aWNlIG9iamVjdC4KLSAqICAgICAgT3RoZXJ3aXNl LCBkb2VzIG5vdCBjcmVhdGUgdGhlIGRldmljZSBvYmplY3QsIGVuc3VyZXMgdGhlIEJyaWRnZSBk cml2ZXIKLSAqICAgICAgbW9kdWxlIGlzIHVubG9hZGVkLCBhbmQgc2V0cyAqZGV2aWNlX29iaiB0 byBOVUxMLgotICovCi1leHRlcm4gaW50IGRldl9jcmVhdGVfZGV2aWNlKHN0cnVjdCBkZXZfb2Jq ZWN0Ci0JCQkJICAgICoqZGV2aWNlX29iaiwKLQkJCQkgICAgY29uc3QgY2hhciAqZHJpdmVyX2Zp bGVfbmFtZSwKLQkJCQkgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopOwotCi0v KgotICogID09PT09PT09IGRldl9jcmVhdGUyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICAgQWZ0ZXIgc3VjY2Vzc2Z1bCBsb2FkaW5nIG9mIHRoZSBpbWFnZSBmcm9tIGFwaV9pbml0X2Nv bXBsZXRlMgotICogICAgICAoUFJPQyBBdXRvX1N0YXJ0KSBvciBwcm9jX2xvYWQgdGhpcyBmeG4g aXMgY2FsbGVkLiBUaGlzIGNyZWF0ZXMKLSAqICAgICAgdGhlIE5vZGUgTWFuYWdlciBhbmQgdXBk YXRlcyB0aGUgREVWIE9iamVjdC4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajog SGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoIGRldl9jcmVhdGVfZGV2aWNlKCku Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgU3VjY2Vzc2Z1bCBDcmVhdGlvbiBvZiBOb2Rl IE1hbmFnZXIKLSAqICAgICAgLUVQRVJNOiAgU29tZSBFcnJvciBPY2N1cnJlZC4KLSAqICBSZXF1 aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxpemVkCi0gKiAgICAgIFZhbGlkIGhkZXZfb2JqCi0g KiAgRW5zdXJlczoKLSAqICAgICAgMCBhbmQgaGRldl9vYmotPm5vZGVfbWdyICE9IE5VTEwKLSAq ICAgICAgZWxzZSAgICBoZGV2X29iai0+bm9kZV9tZ3IgPT0gTlVMTAotICovCi1leHRlcm4gaW50 IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7Ci0KLS8qCi0gKiAgPT09 PT09PT0gZGV2X2Rlc3Ryb3kyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRGVzdHJv eXMgdGhlIE5vZGUgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZf Y3JlYXRlX2RldmljZSgpLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgIFN1Y2Nlc3NmdWwg Q3JlYXRpb24gb2YgTm9kZSBNYW5hZ2VyCi0gKiAgICAgIC1FUEVSTTogIFNvbWUgRXJyb3IgT2Nj dXJyZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERFViBJbml0aWFsaXplZAotICogICAgICBW YWxpZCBoZGV2X29iagotICogIEVuc3VyZXM6Ci0gKiAgICAgIDAgYW5kIGhkZXZfb2JqLT5ub2Rl X21nciA9PSBOVUxMCi0gKiAgICAgIGVsc2UgICAgLUVQRVJNLgotICovCi1leHRlcm4gaW50IGRl dl9kZXN0cm95MihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopOwotCi0vKgotICogID09PT09 PT09IGRldl9kZXN0cm95X2RldmljZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIERl c3Ryb3lzIHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLCBpZiBhbnksIGNhbGxz Ci0gKiAgICAgIGJyaWRnZV9kZXZfZGVzdHJveSgpLCBhbmQgdGhlbiBhdHRlbXB0cyB0byB1bmxv YWQgdGhlIEJyaWRnZSBtb2R1bGUuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRldl9vYmo6 ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKLSAqICAgICAgICAgICAg ICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDog ICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0g KiAgICAgIC1FUEVSTTogICAgIFRoZSBCcmlkZ2UgZHJpdmVyIGZhaWxlZCBpdCdzIGJyaWRnZV9k ZXZfZGVzdHJveSgpIGZ1bmN0aW9uLgotICogIFJlcXVpcmVzOgotICogICAgICBERVYgSW5pdGlh bGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkZXZfZGVzdHJveV9kZXZpY2Uo c3RydWN0IGRldl9vYmplY3QKLQkJCQkgICAgICpoZGV2X29iaik7Ci0KLS8qCi0gKiAgPT09PT09 PT0gZGV2X2dldF9jaG5sX21nciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJp ZXZlIHRoZSBoYW5kbGUgdG8gdGhlIGNoYW5uZWwgbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzIGRl dmljZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBk ZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgZGV2X2Ny ZWF0ZV9kZXZpY2UoKS4KLSAqICAgICAgKm1ncjogICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0 byBzdG9yZSBoYW5kbGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3Mu Ci0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0gKiAgUmVxdWlyZXM6Ci0g KiAgICAgIG1nciAhPSBOVUxMLgotICogICAgICBERVYgSW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJl czoKLSAqICAgICAgMDogICAgICAgICptZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYSBjaGFubmVs IG1hbmFnZXIgb2JqZWN0LAotICogICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTC4KLSAqICAg ICAgZWxzZTogICAgICAgICAgICptZ3IgaXMgTlVMTC4KLSAqLwotZXh0ZXJuIGludCBkZXZfZ2V0 X2NobmxfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCQkgICBzdHJ1Y3QgY2hu bF9tZ3IgKiptZ3IpOwotCi0vKgotICogID09PT09PT09IGRldl9nZXRfY21tX21nciA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIHNoYXJl ZCBtZW1vcnkgbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzCi0gKiAgICAgIGRldmljZS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0 IGNyZWF0ZWQgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2Uo KS4KLSAqICAgICAgKm1ncjogICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBoYW5k bGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1F RkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIG1nciAh PSBOVUxMLgotICogICAgICBERVYgSW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAqICAgICAg MDogICAgICAgICptZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYSBjaGFubmVsIG1hbmFnZXIgb2Jq ZWN0LAotICogICAgICAgICAgICAgICAgICAgICAgb3IgTlVMTC4KLSAqICAgICAgZWxzZTogICAg ICAgICAgICptZ3IgaXMgTlVMTC4KLSAqLwotZXh0ZXJuIGludCBkZXZfZ2V0X2NtbV9tZ3Ioc3Ry dWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJCSAgc3RydWN0IGNtbV9vYmplY3QgKiptZ3Ip OwotCi0vKgotICogID09PT09PT09IGRldl9nZXRfZG1tX21nciA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIGR5bmFtaWMgbWVtb3J5IG1h bmFnZXIgY3JlYXRlZCBmb3IgdGhpcwotICogICAgICBkZXZpY2UuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdp dGgKLSAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCi0gKiAgICAg ICptZ3I6ICAgICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgotICogIFJl dHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBJ bnZhbGlkIGhkZXZfb2JqLgotICogIFJlcXVpcmVzOgotICogICAgICBtZ3IgIT0gTlVMTC4KLSAq ICAgICAgREVWIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAq bWdyIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwKLSAqICAg ICAgICAgICAgICAgICAgICAgIG9yIE5VTEwuCi0gKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdy IGlzIE5VTEwuCi0gKi8KLWV4dGVybiBpbnQgZGV2X2dldF9kbW1fbWdyKHN0cnVjdCBkZXZfb2Jq ZWN0ICpoZGV2X29iaiwKLQkJCQkgIHN0cnVjdCBkbW1fb2JqZWN0ICoqbWdyKTsKLQotLyoKLSAq ICA9PT09PT09PSBkZXZfZ2V0X2NvZF9tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBSZXRyaWV2ZSB0aGUgQ09EIG1hbmFnZXIgY3JlYXRlIGZvciB0aGlzIGRldmljZS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0 IGNyZWF0ZWQgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2Uo KS4KLSAqICAgICAgKmNvZF9tZ3I6ICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBoYW5k bGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1F RkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGNvZF9t Z3IgIT0gTlVMTC4KLSAqICAgICAgREVWIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAg ICAgIDA6ICAgICAgICAqY29kX21nciBjb250YWlucyBhIGhhbmRsZSB0byBhIENPRCBtYW5hZ2Vy IG9iamVjdC4KLSAqICAgICAgZWxzZTogICAgICAgICAgICpjb2RfbWdyIGlzIE5VTEwuCi0gKi8K LWV4dGVybiBpbnQgZGV2X2dldF9jb2RfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwK LQkJCQkgIHN0cnVjdCBjb2RfbWFuYWdlciAqKmNvZF9tZ3IpOwotCi0vKgotICogID09PT09PT09 IGRldl9nZXRfZGVoX21nciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZl IHRoZSBERUggbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzIGRldmljZS4KLSAqICBQYXJhbWV0ZXJz OgotICogICAgICBoZGV2X29iajogSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRo IGRldl9jcmVhdGVfZGV2aWNlKCkuCi0gKiAgICAgICpkZWhfbWFuYWdlcjogIFB0ciB0byBsb2Nh dGlvbiB0byBzdG9yZSBoYW5kbGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgU3VjY2Vz cy4KLSAqICAgICAgLUVGQVVMVDogICBJbnZhbGlkIGhkZXZfb2JqLgotICogIFJlcXVpcmVzOgot ICogICAgICBkZWhfbWFuYWdlciAhPSBOVUxMLgotICogICAgICBERUggSW5pdGlhbGl6ZWQuCi0g KiAgRW5zdXJlczoKLSAqICAgICAgMDogICAgKmRlaF9tYW5hZ2VyIGNvbnRhaW5zIGEgaGFuZGxl IHRvIGEgREVIIG1hbmFnZXIgb2JqZWN0LgotICogICAgICBlbHNlOiAgICAgICAqZGVoX21hbmFn ZXIgaXMgTlVMTC4KLSAqLwotZXh0ZXJuIGludCBkZXZfZ2V0X2RlaF9tZ3Ioc3RydWN0IGRldl9v YmplY3QgKmhkZXZfb2JqLAotCQkJCSAgc3RydWN0IGRlaF9tZ3IgKipkZWhfbWFuYWdlcik7Ci0K LS8qCi0gKiAgPT09PT09PT0gZGV2X2dldF9kZXZfbm9kZSA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgSUQgZm9yIHRo aXMgZGV2aWNlLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxl IHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCi0gKiAgICAgICAgICAgICAgICAgICAgICBk ZXZfY3JlYXRlX2RldmljZSgpLgotICogICAgICBkZXZfbmRlOiAgICAgICAgUHRyIHRvIGxvY2F0 aW9uIHRvIGdldCB0aGUgZGV2aWNlIG5vZGUgaGFuZGxlLgotICogIFJldHVybnM6Ci0gKiAgICAg IDA6ICAgICAgICBSZXR1cm5zIGEgREVWTk9ERSBpbiAqZGV2X25vZGVfb2JqLgotICogICAgICAt RUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgotICogIFJlcXVpcmVzOgotICogICAgICBkZXZf bmRlICE9IE5VTEwuCi0gKiAgICAgIERFViBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICog ICAgICAwOiAgICAgICAgKmRldl9uZGUgY29udGFpbnMgYSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZp Y2UgSUQ7Ci0gKiAgICAgIGVsc2U6ICAgICAgICAgICAqZGV2X25kZSBpcyBOVUxMLgotICovCi1l eHRlcm4gaW50IGRldl9nZXRfZGV2X25vZGUoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAot CQkJCSAgIHN0cnVjdCBjZmdfZGV2bm9kZSAqKmRldl9uZGUpOwotCi0vKgotICogID09PT09PT09 IGRldl9nZXRfZGV2X3R5cGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2 ZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEIGZvciB0aGlzIGRldmljZS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0 IGNyZWF0ZWQgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2Uo KS4KLSAqICAgICAgZGV2X25kZTogICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBnZXQgdGhlIGRl dmljZSBub2RlIGhhbmRsZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vz cwotICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgotICogIFJlcXVpcmVzOgot ICogICAgICBkZXZfbmRlICE9IE5VTEwuCi0gKiAgICAgIERFViBJbml0aWFsaXplZC4KLSAqICBF bnN1cmVzOgotICogICAgICAwOiAgICAgICAgKmRldl9uZGUgY29udGFpbnMgYSBwbGF0Zm9ybSBz cGVjaWZpYyBkZXZpY2UgSUQ7Ci0gKiAgICAgIGVsc2U6ICAgICAgICAgICAqZGV2X25kZSBpcyBO VUxMLgotICovCi1leHRlcm4gaW50IGRldl9nZXRfZGV2X3R5cGUoc3RydWN0IGRldl9vYmplY3Qg KmRldmljZV9vYmosCi0JCQkJCXU4ICpkZXZfdHlwZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2 X2dldF9maXJzdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBm aXJzdCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9m Ci0gKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLgotICogIFBhcmFtZXRl cnM6Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZGV2aWNlIG9i amVjdHMgc3RvcmVkOyBlbHNlCi0gKiAgICAgIGEgdmFsaWQgREVWX0hPQkpFQ1QuCi0gKiAgUmVx dWlyZXM6Ci0gKiAgICAgIE5vIGNhbGxzIHRvIGRldl9jcmVhdGVfZGV2aWNlIG9yIGRldl9kZXN0 cm95X2RldmljZSAod2hpY2ggbXkgbW9kaWZ5IHRoZQotICogICAgICBpbnRlcm5hbCBkZXZpY2Ug b2JqZWN0IGxpc3QpIG1heSBvY2N1ciBiZXR3ZWVuIGNhbGxzIHRvIGRldl9nZXRfZmlyc3QKLSAq ICAgICAgYW5kIGRldl9nZXRfbmV4dC4KLSAqICBFbnN1cmVzOgotICogICAgICBUaGUgREVWX0hP QkpFQ1QgcmV0dXJuZWQgaXMgdmFsaWQuCi0gKiAgICAgIEEgc3Vic2VxdWVudCBjYWxsIHRvIGRl dl9nZXRfbmV4dCB3aWxsIHJldHVybiB0aGUgbmV4dCBkZXZpY2Ugb2JqZWN0IGluCi0gKiAgICAg IHRoZSBsaXN0LgotICovCi1leHRlcm4gc3RydWN0IGRldl9vYmplY3QgKmRldl9nZXRfZmlyc3Qo dm9pZCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X2dldF9pbnRmX2Z4bnMgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2Ug ZnVuY3Rpb24gc3RydWN0dXJlIGZvciB0aGUKLSAqICAgICAgbG9hZGVkIEJyaWRnZSBkcml2ZXIu Ci0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNl IG9iamVjdCBjcmVhdGVkIHdpdGgKLSAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVf ZGV2aWNlKCkuCi0gKiAgICAgICppZl9meG5zOiAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3Rv cmUgZnhuIGludGVyZmFjZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vz cy4KLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KLSAqICBSZXF1aXJlczoK LSAqICAgICAgaWZfZnhucyAhPSBOVUxMLgotICogICAgICBERVYgSW5pdGlhbGl6ZWQuCi0gKiAg RW5zdXJlczoKLSAqICAgICAgMDogICAgICAgICppZl9meG5zIGNvbnRhaW5zIGEgcG9pbnRlciB0 byB0aGUgQnJpZGdlCi0gKiAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgaW50ZXJmYWNlOwot ICogICAgICBlbHNlOiAgICAgICAgICAgKmlmX2Z4bnMgaXMgTlVMTC4KLSAqLwotZXh0ZXJuIGlu dCBkZXZfZ2V0X2ludGZfZnhucyhzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkgICAg c3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICoqaWZfZnhucyk7Ci0KLS8qCi0gKiAgPT09PT09 PT0gZGV2X2dldF9pb19tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2 ZSB0aGUgaGFuZGxlIHRvIHRoZSBJTyBtYW5hZ2VyIGNyZWF0ZWQgZm9yIHRoaXMgZGV2aWNlLgot ICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBv YmplY3QgY3JlYXRlZCB3aXRoCi0gKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2Rl dmljZSgpLgotICogICAgICAqbWdyOiAgICAgICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3Jl IGhhbmRsZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KLSAqICBSZXF1aXJlczoKLSAqICAgICAg bWdyICE9IE5VTEwuCi0gKiAgICAgIERFViBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICog ICAgICAwOiAgICAgICAgKm1nciBjb250YWlucyBhIGhhbmRsZSB0byBhbiBJTyBtYW5hZ2VyIG9i amVjdC4KLSAqICAgICAgZWxzZTogICAgICAgICAgICptZ3IgaXMgTlVMTC4KLSAqLwotZXh0ZXJu IGludCBkZXZfZ2V0X2lvX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkJIHN0 cnVjdCBpb19tZ3IgKiptZ3IpOwotCi0vKgotICogID09PT09PT09IGRldl9nZXRfbmV4dCA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBuZXh0IERldmljZSBPYmpl Y3QgaGFuZGxlIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKLSAqICAgICAgb2YgREVW X09CSkVDVHMgbWFpbnRhaW5lZCBieSBERVYsIGFmdGVyIGhhdmluZyBwcmV2aW91c2x5IGNhbGxl ZAotICogICAgICBkZXZfZ2V0X2ZpcnN0KCkgYW5kIHplcm8gb3IgbW9yZSBkZXZfZ2V0X25leHQK LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogSGFuZGxlIHRvIHRoZSBkZXZpY2Ug b2JqZWN0IHJldHVybmVkIGZyb20gYSBwcmV2aW91cwotICogICAgICAgICAgICAgICAgICBjYWxs IHRvIGRldl9nZXRfZmlyc3QoKSBvciBkZXZfZ2V0X25leHQoKS4KLSAqICBSZXR1cm5zOgotICog ICAgICBOVUxMIGlmIHRoZXJlIGFyZSBubyBmdXJ0aGVyIGRldmljZSBvYmplY3RzIG9uIHRoZSBs aXN0IG9yIGhkZXZfb2JqCi0gKiAgICAgIHdhcyBpbnZhbGlkOwotICogICAgICBlbHNlIHRoZSBu ZXh0IHZhbGlkIERFVl9IT0JKRUNUIGluIHRoZSBsaXN0LgotICogIFJlcXVpcmVzOgotICogICAg ICBObyBjYWxscyB0byBkZXZfY3JlYXRlX2RldmljZSBvciBkZXZfZGVzdHJveV9kZXZpY2UgKHdo aWNoIG15IG1vZGlmeSB0aGUKLSAqICAgICAgaW50ZXJuYWwgZGV2aWNlIG9iamVjdCBsaXN0KSBt YXkgb2NjdXIgYmV0d2VlbiBjYWxscyB0byBkZXZfZ2V0X2ZpcnN0Ci0gKiAgICAgIGFuZCBkZXZf Z2V0X25leHQuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgVGhlIERFVl9IT0JKRUNUIHJldHVybmVk IGlzIHZhbGlkLgotICogICAgICBBIHN1YnNlcXVlbnQgY2FsbCB0byBkZXZfZ2V0X25leHQgd2ls bCByZXR1cm4gdGhlIG5leHQgZGV2aWNlIG9iamVjdCBpbgotICogICAgICB0aGUgbGlzdC4KLSAq LwotZXh0ZXJuIHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfZ2V0X25leHQoc3RydWN0IGRldl9vYmpl Y3QKLQkJCQkgICAgICAgKmhkZXZfb2JqKTsKLQotLyoKLSAqICA9PT09PT09PT0gZGV2X2dldF9t c2dfbWdyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIG1zZ19j dHJsIE1hbmFnZXIgSGFuZGxlIGZyb20gdGhlIERldk9iamVjdC4KLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICBoZGV2X29iajogSGFuZGxlIHRvIHRoZSBEZXYgT2JqZWN0Ci0gKiAgICAgIG1zZ19t YW46ICAgIExvY2F0aW9uIHdoZXJlIG1zZ19jdHJsIE1hbmFnZXIgaGFuZGxlIHdpbGwgYmUgcmV0 dXJuZWQuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxp emVkLgotICogICAgICBWYWxpZCBoZGV2X29iai4KLSAqICAgICAgbm9kZV9tYW4gIT0gTlVMTC4K LSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gdm9pZCBkZXZfZ2V0X21zZ19tZ3Ioc3RydWN0IGRl dl9vYmplY3QgKmhkZXZfb2JqLAotCQkJICAgIHN0cnVjdCBtc2dfbWdyICoqbXNnX21hbik7Ci0K LS8qCi0gKiAgPT09PT09PT09IGRldl9nZXRfbm9kZV9tYW5hZ2VyID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIE5vZGUgTWFuYWdlciBIYW5kbGUgZnJvbSB0aGUg RGV2T2JqZWN0LiBJdCBpcyBhbgotICogICAgICBhY2Nlc3NvciBmdW5jdGlvbgotICogIFBhcmFt ZXRlcnM6Ci0gKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIHRoZSBEZXYgT2JqZWN0Ci0g KiAgICAgIG5vZGVfbWFuOiAgICAgICBMb2NhdGlvbiB3aGVyZSBIYW5kbGUgdG8gdGhlIE5vZGUg TWFuYWdlciB3aWxsIGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4uCi0gKiAg UmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKLSAqICAgICAgLUVGQVVMVDogICAg SW52YWxpZCBEZXYgT2JqZWN0IGhhbmRsZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIElu aXRpYWxpemVkLgotICogICAgICBub2RlX21hbiBpcyBub3QgbnVsbAotICogIEVuc3VyZXM6Ci0g KiAgICAgIDA6ICAgICAgICAqbm9kZV9tYW4gY29udGFpbnMgYSBoYW5kbGUgdG8gYSBOb2RlIG1h bmFnZXIgb2JqZWN0LgotICogICAgICBlbHNlOiAgICAgICAgICAgKm5vZGVfbWFuIGlzIE5VTEwu Ci0gKi8KLWV4dGVybiBpbnQgZGV2X2dldF9ub2RlX21hbmFnZXIoc3RydWN0IGRldl9vYmplY3QK LQkJCQkgICAgICAgKmhkZXZfb2JqLAotCQkJCSAgICAgICBzdHJ1Y3Qgbm9kZV9tZ3IgKipub2Rl X21hbik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X2dldF9zeW1ib2wgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBHZXQgdGhlIHZhbHVlIG9mIGEgc3ltYm9sIGluIHRoZSBjdXJyZW50 bHkgbG9hZGVkIHByb2dyYW0uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRldl9vYmo6ICAg ICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKLSAqICAgICAgICAgICAgICAg ICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCi0gKiAgICAgIHN0cl9zeW06ICAgICAgICBOYW1l IG9mIHN5bWJvbCB0byBsb29rIHVwLgotICogICAgICBwdWxfdmFsdWU6ICAgICAgIFB0ciB0byBz eW1ib2wgdmFsdWUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0g KiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0gKiAgICAgIC1FU1BJUEU6IFN5 bWJvbHMgY291bGRuIG5vdCBiZSBmb3VuZCBvciBoYXZlIG5vdCBiZWVuIGxvYWRlZCBvbnRvCi0g KiAgICAgICAgICAgICAgIHRoZSBib2FyZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgc3RyX3N5 bSAhPSBOVUxMLgotICogICAgICBwdWxfdmFsdWUgIT0gTlVMTC4KLSAqICAgICAgREVWIEluaXRp YWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAqcHVsX3ZhbHVlIGNvbnRh aW5zIHRoZSBzeW1ib2wgdmFsdWU7Ci0gKi8KLWV4dGVybiBpbnQgZGV2X2dldF9zeW1ib2woc3Ry dWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJCSBjb25zdCBjaGFyICpzdHJfc3ltLCB1MzIg KiBwdWxfdmFsdWUpOwotCi0vKgotICogID09PT09PT09IGRldl9nZXRfYnJpZGdlX2NvbnRleHQg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgQnJpZGdlIENvbnRl eHQgaGFuZGxlLCBhcyByZXR1cm5lZCBieSB0aGUKLSAqICAgICAgYnJpZGdlX2Rldl9jcmVhdGUg ZnhuLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRl dmljZSBvYmplY3QgY3JlYXRlZCB3aXRoIGRldl9jcmVhdGVfZGV2aWNlKCkKLSAqICAgICAgKnBo YnJpZGdlX2NvbnRleHQ6ICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgY29udGV4dCBoYW5kbGUu Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFV TFQ6ICAgIEludmFsaWQgaGRldl9vYmouCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHBoYnJpZGdl X2NvbnRleHQgIT0gTlVMTC4KLSAqICAgICAgREVWIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6 Ci0gKiAgICAgIDA6ICAgICAgICAqcGhicmlkZ2VfY29udGV4dCBjb250YWlucyBjb250ZXh0IGhh bmRsZTsKLSAqICAgICAgZWxzZTogICAgICAgICAgICpwaGJyaWRnZV9jb250ZXh0IGlzIE5VTEw7 Ci0gKi8KLWV4dGVybiBpbnQgZGV2X2dldF9icmlkZ2VfY29udGV4dChzdHJ1Y3QgZGV2X29iamVj dCAqaGRldl9vYmosCi0JCQkJICAgICAgc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCSAg ICAgICoqcGhicmlkZ2VfY29udGV4dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X2luc2VydF9w cm9jX29iamVjdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEluc2VydHMgdGhlIFBy b2Nlc3NvciBPYmplY3QgaW50byB0aGUgTGlzdCBvZiBQUk9DIE9iamVjdHMKLSAqICAgICAga2Vw dCBpbiB0aGUgREVWIE9iamVjdAotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHByb2Nfb2JqOiAg ICBIYW5kbGUgdG8gdGhlIFByb2MgT2JqZWN0Ci0gKiAgICAgIGhkZXZfb2JqICAgICAgSGFuZGxl IHRvIHRoZSBEZXYgT2JqZWN0Ci0gKiAgICAgIGJBdHRhY2hlZE5ldyAgICBTcGVjaWZpZXMgaWYg dGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZAotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICBTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdAotICogIFJl cXVpcmVzOgotICogICAgICBwcm9jX29iaiBpcyBub3QgTlVMTAotICogICAgICBoZGV2X29iaiBp cyBhIHZhbGlkIGhhbmRsZSB0byB0aGUgREVWLgotICogICAgICBERVYgSW5pdGlhbGl6ZWQuCi0g KiAgICAgIExpc3Qob2YgUHJvYyBvYmplY3QgaW4gRGV2KSBFeGlzdHMuCi0gKiAgRW5zdXJlczoK LSAqICAgICAgMCAmIHRoZSBQUk9DIE9iamVjdCBpcyBpbnNlcnRlZCBhbmQgdGhlIGxpc3QgaXMg bm90IGVtcHR5Ci0gKiAgRGV0YWlsczoKLSAqICAgICAgSWYgdGhlIExpc3Qgb2YgUHJvYyBPYmpl Y3QgaXMgZW1wdHkgYkF0dGFjaGVkTmV3IGlzIFRSVUUsIGl0IGluZGljYXRlZAotICogICAgICB0 aGlzIGlzIHRoZSBmaXJzdCBQcm9jZXNzb3IgYXR0YWNoaW5nLgotICogICAgICBJZiBpdCBpcyBG YWxzZSwgdGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZC4KLSAqLwotZXh0ZXJu IGludCBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0Ci0JCQkJCSAqaGRl dl9vYmosCi0JCQkJCSB1MzIgcHJvY19vYmosCi0JCQkJCSBib29sICphbHJlYWR5X2F0dGFjaGVk KTsKLQotLyoKLSAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09Ci0g KiAgUHVycG9zZToKLSAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3Qg ZnJvbSB0aGUgZ2l2ZW4gbGlzdCBtYWludGFpbmVkCi0gKiAgICAgIGJ5IHRoZSBERVYKLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmpl Y3QgdG8gaW5zZXJ0LgotICogICAgICBkZXZfb2JqOiAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0 IHdoZXJlIHRoZSBsaXN0IGlzLgotICogICAgICBhbHJlYWR5X2F0dGFjaGVkOiAgUHRyIHRvIHJl dHVybiB0aGUgYm9vbAotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3Vj Y2Vzc2Z1bC4KLSAqICAgICAgLUVQRVJNICAgICAgICAgICBGYWlsdXJlIHRvIFJlbW92ZSB0aGUg UFJPQyBPYmplY3QgZnJvbSB0aGUgbGlzdAotICogIFJlcXVpcmVzOgotICogICAgICBEZXZPYmpl Y3QgaXMgVmFsaWQKLSAqICAgICAgcHJvY19vYmogIT0gMAotICogICAgICBkZXZfb2JqLT5wcm9j X2xpc3QgIT0gTlVMTAotICogICAgICAhTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkK LSAqICAgICAgYWxyZWFkeV9hdHRhY2hlZCAhPU5VTEwKLSAqICBFbnN1cmVzOgotICogIERldGFp bHM6Ci0gKiAgICAgIExpc3Qgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95 ZWQuCi0gKgotICovCi1leHRlcm4gaW50IGRldl9yZW1vdmVfcHJvY19vYmplY3Qoc3RydWN0IGRl dl9vYmplY3QKLQkJCQkJICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKTsKLQotLyoKLSAqICA9PT09 PT09PSBkZXZfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBO b3RpZnkgYWxsIGNsaWVudHMgb2YgdGhpcyBkZXZpY2Ugb2YgYSBjaGFuZ2UgaW4gZGV2aWNlIHN0 YXR1cy4KLSAqICAgICAgQ2xpZW50cyBtYXkgaW5jbHVkZSBtdWx0aXBsZSB1c2VycyBvZiBCUkQs IGFzIHdlbGwgYXMgQ0hOTC4KLSAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhc3ljaHJvbm91cywg YW5kIG1heSBiZSBjYWxsZWQgYnkgYSB0aW1lciBldmVudAotICogICAgICBzZXQgdXAgYnkgYSB3 YXRjaGRvZyB0aW1lci4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajogIEhhbmRs ZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgotICog ICAgICByZXQ6ICAgICAgICAgQSBzdGF0dXMgd29yZCwgbW9zdCBsaWtlbHkgYSBCUkRfU1RBVFVT LgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICBBbGwgcmVnaXN0ZXJlZCBjbGllbnRzIHdl cmUgYXN5bmNocm9ub3VzbHkgbm90aWZpZWQuCi0gKiAgICAgIC1FSU5WQUw6ICAgSW52YWxpZCBo ZGV2X29iai4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxpemVkLgotICogIEVu c3VyZXM6Ci0gKiAgICAgIDA6IE5vdGlmaWNhdGlvbnMgYXJlIHF1ZXVlZCBieSB0aGUgb3BlcmF0 aW5nIHN5c3RlbSB0byBiZQotICogICAgICBkZWxpdmVyZWQgdG8gY2xpZW50cy4gIFRoaXMgZnVu Y3Rpb24gZG9lcyBub3QgZW5zdXJlIHRoYXQKLSAqICAgICAgdGhlIG5vdGlmaWNhdGlvbnMgd2ls bCBldmVyIGJlIGRlbGl2ZXJlZC4KLSAqLwotZXh0ZXJuIGludCBkZXZfbm90aWZ5X2NsaWVudHMo c3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLCB1MzIgcmV0KTsKLQotLyoKLSAqICA9PT09PT09 PSBkZXZfcmVtb3ZlX2RldmljZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIERlc3Ry b3lzIHRoZSBEZXZpY2UgT2JqZWN0IGNyZWF0ZWQgYnkgZGV2X3N0YXJ0X2RldmljZS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIERldmljZSBub2RlIGFzIGl0 IGlzIGtub3cgdG8gT1MuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIElmIHN1Y2Nl c3M7Ci0gKiAgICAgIDxlcnJvciBjb2RlPiAgICBPdGhlcndpc2UuCi0gKiAgUmVxdWlyZXM6Ci0g KiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkZXZfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2Zn X2Rldm5vZGUgKmRldl9ub2RlX29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X3NldF9jaG5s X21nciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNldCB0aGUgY2hhbm5lbCBtYW5h Z2VyIGZvciB0aGlzIGRldmljZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBoZGV2X29iajog ICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAotICogICAgICAgICAgICAg ICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KLSAqICAgICAgaG1ncjogICAgICAgICAgIEhh bmRsZSB0byBhIGNoYW5uZWwgbWFuYWdlciwgb3IgTlVMTC4KLSAqICBSZXR1cm5zOgotICogICAg ICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29i ai4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVWIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiBpbnQgZGV2X3NldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRl dl9vYmosCi0JCQkJICAgc3RydWN0IGNobmxfbWdyICpobWdyKTsKLQotLyoKLSAqICA9PT09PT09 PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBTZXQgdGhl IE1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAg ICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3Jl YXRlX2RldmljZSgpLgotICogICAgICBobWdyOiAgICAgICBIYW5kbGUgdG8gYSBtZXNzYWdlIG1h bmFnZXIsIG9yIE5VTEwuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgREVW IEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiB2b2lkIGRldl9zZXRfbXNn X21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHN0cnVjdCBtc2dfbWdyICpobWdyKTsK LQotLyoKLSAqICA9PT09PT09PSBkZXZfc3RhcnRfZGV2aWNlID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIG5ldyBkZXZpY2Ugd2l0aCBicmlkZ2UgZW52aXJv bm1lbnQuICBUaGlzIGludm9sdmVzCi0gKiAgICAgIHF1ZXJ5aW5nIENNIGZvciBhbGxvY2F0ZWQg cmVzb3VyY2VzLCBxdWVyeWluZyB0aGUgcmVnaXN0cnkgZm9yCi0gKiAgICAgIG5lY2Vzc2FyeSBk c3AgcmVzb3VyY2VzIChyZXF1ZXN0ZWQgaW4gdGhlIElORiBmaWxlKSwgYW5kIHVzaW5nIHRoaXMK LSAqICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgYnJpZGdlIGRldmljZSBvYmplY3QuCi0g KiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGV2X25vZGVfb2JqOiAgICAgICBEZXZpY2Ugbm9kZSBh cyBpdCBpcyBrbm93IHRvIE9TLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBJZiBz dWNjZXNzOwotICogICAgICA8ZXJyb3IgY29kZT4gICAgT3RoZXJ3aXNlLgotICogIFJlcXVpcmVz OgotICogICAgICBERVYgaW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGlu dCBkZXZfc3RhcnRfZGV2aWNlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqKTsKLQot I2VuZGlmIC8qIERFVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXZkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2ZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBhMmY5MjQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9p bmNsdWRlL2RzcGJyaWRnZS9kZXZkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBA Ci0vKgotICogZGV2ZGVmcy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0 IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERlZmluaXRpb24gb2Yg Y29tbW9uIGluY2x1ZGUgdHlwZWRlZiBiZXR3ZWVuIGRzcGRlZnMuaCBhbmQgZGV2LmguIFJlcXVp cmVkCi0gKiB0byBicmVhayBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gQnJpZGdlIGRyaXZl ciBhbmQgREVWIGluY2x1ZGUgZmlsZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgREVWREVGU18KLSNkZWZpbmUg REVWREVGU18KLQotLyogQnJpZGdlIERldmljZSBPYmplY3QgKi8KLXN0cnVjdCBkZXZfb2JqZWN0 OwotCi0jZW5kaWYgLyogREVWREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlk c3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGlzcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAzOWQzY2VhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBA QAotLyoKLSAqIGRpc3AuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBm dW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBEU1AvQklPUyBCcmlkZ2Ug Tm9kZSBEaXNwYXRjaGVyLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIElu c3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tB R0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1Q TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgRElTUF8KLSNkZWZpbmUgRElTUF8K LQotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9k ZWRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KLQotc3RydWN0IGRpc3Bf b2JqZWN0OwotCi0vKiBOb2RlIERpc3BhdGNoZXIgYXR0cmlidXRlcyAqLwotc3RydWN0IGRpc3Bf YXR0ciB7Ci0JdTMyIGNobmxfb2Zmc2V0OwkvKiBPZmZzZXQgb2YgY2hhbm5lbCBpZHMgcmVzZXJ2 ZWQgZm9yIFJNUyAqLwotCS8qIFNpemUgb2YgYnVmZmVyIGZvciBzZW5kaW5nIGRhdGEgdG8gUk1T ICovCi0JdTMyIGNobmxfYnVmX3NpemU7Ci0JaW50IHByb2NfZmFtaWx5OwkvKiBlZywgNTAwMCAq LwotCWludCBwcm9jX3R5cGU7CQkvKiBlZywgNTUxMCAqLwotCXZvaWQgKnJlc2VydmVkMTsJLyog UmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCi0JdTMyIHJlc2VydmVkMjsJCS8qIFJlc2VydmVk IGZvciBmdXR1cmUgdXNlLiAqLwotfTsKLQotCi0vKgotICogID09PT09PT09IGRpc3BfY3JlYXRl ID09PT09PT09Ci0gKiAgQ3JlYXRlIGEgTk9ERSBEaXNwYXRjaGVyIG9iamVjdC4gVGhpcyBvYmpl Y3QgaGFuZGxlcyB0aGUgY3JlYXRpb24sCi0gKiAgZGVsZXRpb24sIGFuZCBleGVjdXRpb24gb2Yg bm9kZXMgb24gdGhlIERTUCB0YXJnZXQsIHRocm91Z2ggY29tbXVuaWNhdGlvbgotICogIHdpdGgg dGhlIFJlc291cmNlIE1hbmFnZXIgU2VydmVyIHJ1bm5pbmcgb24gdGhlIHRhcmdldC4gRWFjaCBO T0RFCi0gKiAgTWFuYWdlciBvYmplY3Qgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgTk9ERSBEaXNw YXRjaGVyLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkaXNwYXRjaF9vYmo6ICAgTG9j YXRpb24gdG8gc3RvcmUgbm9kZSBkaXNwYXRjaGVyIG9iamVjdCBvbiBvdXRwdXQuCi0gKiAgICAg IGhkZXZfb2JqOiAgICAgRGV2aWNlIGZvciB0aGlzIHByb2Nlc3Nvci4KLSAqICAgICAgZGlzcF9h dHRyczogICAgIE5vZGUgZGlzcGF0Y2hlciBhdHRyaWJ1dGVzLgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7Ci0gKiAgICAgIC1FTk9NRU06ICAgICAgICAg ICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KLSAqICAgICAg LUVQRVJNOiAgICAgICAgICAgICAgVW5hYmxlIHRvIGNyZWF0ZSBkaXNwYXRjaGVyLgotICogIFJl cXVpcmVzOgotICogICAgICBkaXNwX2F0dHJzICE9IE5VTEwuCi0gKiAgICAgIGhkZXZfb2JqICE9 IE5VTEwuCi0gKiAgICAgIGRpc3BhdGNoX29iaiAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAg ICAgIDA6ICAgICAgICBJU19WQUxJRCgqZGlzcGF0Y2hfb2JqKS4KLSAqICAgICAgZXJyb3I6ICAg ICAgICAgICpkaXNwYXRjaF9vYmogPT0gTlVMTC4KLSAqLwotZXh0ZXJuIGludCBkaXNwX2NyZWF0 ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKipkaXNwYXRjaF9vYmosCi0JCQkgICAgICBzdHJ1Y3QgZGV2 X29iamVjdCAqaGRldl9vYmosCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlzcF9hdHRyICpkaXNw X2F0dHJzKTsKLQotLyoKLSAqICA9PT09PT09PSBkaXNwX2RlbGV0ZSA9PT09PT09PQotICogIERl bGV0ZSB0aGUgTk9ERSBEaXNwYXRjaGVyLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBk aXNwX29iajogIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1 aXJlczoKLSAqICAgICAgVmFsaWQgZGlzcF9vYmouCi0gKiAgRW5zdXJlczoKLSAqICAgICAgZGlz cF9vYmogaXMgaW52YWxpZC4KLSAqLwotZXh0ZXJuIHZvaWQgZGlzcF9kZWxldGUoc3RydWN0IGRp c3Bfb2JqZWN0ICpkaXNwX29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZGlzcF9ub2RlX2NoYW5n ZV9wcmlvcml0eSA9PT09PT09PQotICogIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGN1 cnJlbnRseSBydW5uaW5nIG9uIHRoZSB0YXJnZXQuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGRpc3Bfb2JqOiAgICAgICAgICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCi0gKiAgICAg IGhub2RlOiAgICAgICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUg Y3VycmVudGx5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBvciBy dW5uaW5nIG9uIHRoZSBEU1AuCi0gKiAgICAgIHVsRnhuQWRkcmVzczogICAgICAgICAgIEFkZHJl c3Mgb2YgUk1TIGZ1bmN0aW9uIGZvciBjaGFuZ2luZyBwcmlvcml0eS4KLSAqICAgICAgbm9kZV9l bnY6ICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGVudmlyb25tZW50IHN0cnVjdHVy ZS4KLSAqICAgICAgcHJpbzogICAgICAgICAgICAgIE5ldyBwcmlvcml0eSBsZXZlbCB0byBzZXQg bm9kZSdzIHByaW9yaXR5IHRvLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAg ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRTogICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlk IGRpc3Bfb2JqLgotICogICAgICBobm9kZSAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4 dGVybiBpbnQgZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShzdHJ1Y3QgZGlzcF9vYmplY3QKLQkJ CQkJICAgICpkaXNwX29iaiwKLQkJCQkJICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0J CQkJCSAgICB1MzIgcm1zX2Z4biwKLQkJCQkJICAgIG5vZGVlbnYgbm9kZV9lbnYsIHMzMiBwcmlv KTsKLQotLyoKLSAqICA9PT09PT09PSBkaXNwX25vZGVfY3JlYXRlID09PT09PT09Ci0gKiAgQ3Jl YXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVh dGUgZnVuY3Rpb24uCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGRpc3Bfb2JqOiAgICBO b2RlIERpc3BhdGNoZXIgb2JqZWN0LgotICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBoYW5k bGUgb2J0YWluZWQgZnJvbSBub2RlX2FsbG9jYXRlKCkuCi0gKiAgICAgIHVsX2Z4bl9hZGRyOiAg ICAgIEFkZHJlc3Mgb3IgUk1TIGNyZWF0ZSBub2RlIGZ1bmN0aW9uLgotICogICAgICB1bF9jcmVh dGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCi0gKiAgICAgIHBh cmdzOiAgICAgICAgICBBcmd1bWVudHMgdG8gcGFzcyB0byBSTVMgbm9kZSBjcmVhdGUgZnVuY3Rp b24uCi0gKiAgICAgIG5vZGVfZW52OiAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGVudmly b25tZW50IHBvaW50ZXIgb24KLSAqICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KLSAqICBS ZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVUSU1FOiAgIEEg dGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCi0gKiAgICAgIC1FUEVS TTogICAgICBBIGZhaWx1cmUgb2NjdXJyZWQsIHVuYWJsZSB0byBjcmVhdGUgbm9kZS4KLSAqICBS ZXF1aXJlczoKLSAqICAgICAgVmFsaWQgZGlzcF9vYmouCi0gKiAgICAgIHBhcmdzICE9IE5VTEwu Ci0gKiAgICAgIGhub2RlICE9IE5VTEwuCi0gKiAgICAgIG5vZGVfZW52ICE9IE5VTEwuCi0gKiAg ICAgIG5vZGVfZ2V0X3R5cGUoaG5vZGUpICE9IE5PREVfREVWSUNFLgotICogIEVuc3VyZXM6Ci0g Ki8KLWV4dGVybiBpbnQgZGlzcF9ub2RlX2NyZWF0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bf b2JqLAotCQkJCSAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0JCQkJICAgdTMyIHJtc19m eG4sCi0JCQkJICAgdTMyIHVsX2NyZWF0ZV9meG4sCi0JCQkJICAgY29uc3Qgc3RydWN0IG5vZGVf Y3JlYXRlYXJncwotCQkJCSAgICpwYXJncywgbm9kZWVudiAqbm9kZV9lbnYpOwotCi0vKgotICog ID09PT09PT09IGRpc3Bfbm9kZV9kZWxldGUgPT09PT09PT0KLSAqICBEZWxldGUgYSBub2RlIG9u IHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbi4K LSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hl ciBvYmplY3QuCi0gKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRp bmcgYSBub2RlIGN1cnJlbnRseQotICogICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIG9uIHRo ZSBEU1AuCi0gKiAgICAgIHVsX2Z4bl9hZGRyOiAgICAgIEFkZHJlc3Mgb3IgUk1TIGRlbGV0ZSBu b2RlIGZ1bmN0aW9uLgotICogICAgICB1bF9kZWxldGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUn cyBkZWxldGUgZnVuY3Rpb24uCi0gKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBu b2RlJ3MgZW52aXJvbm1lbnQgc3RydWN0dXJlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAg ICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9y ZSB0aGUgRFNQIHJlc3BvbmRlZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgZGlzcF9v YmouCi0gKiAgICAgIGhub2RlICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGlu dCBkaXNwX25vZGVfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCi0JCQkJICAg c3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKLQkJCQkgICB1MzIgcm1zX2Z4biwKLQkJCQkgICB1 MzIgdWxfZGVsZXRlX2Z4biwgbm9kZWVudiBub2RlX2Vudik7Ci0KLS8qCi0gKiAgPT09PT09PT0g ZGlzcF9ub2RlX3J1biA9PT09PT09PQotICogIFN0YXJ0IGV4ZWN1dGlvbiBvZiBhIG5vZGUncyBl eGVjdXRlIHBoYXNlLCBvciByZXN1bWUgZXhlY3V0aW9uIG9mIGEgbm9kZQotICogIHRoYXQgaGFz IGJlZW4gc3VzcGVuZGVkICh2aWEgRElTUF9Ob2RlUGF1c2UoKSkgb24gdGhlIERTUC4KLSAqCi0g KiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hlciBvYmpl Y3QuCi0gKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRpbmcgYSBu b2RlIHRvIGJlIGV4ZWN1dGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgRFNQLgot ICogICAgICB1bF9meG5fYWRkcjogICAgICBBZGRyZXNzIG9yIFJNUyBub2RlIGV4ZWN1dGUgZnVu Y3Rpb24uCi0gKiAgICAgIHVsX2V4ZWN1dGVfZnhuOiAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1 dGUgZnVuY3Rpb24uCi0gKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBub2RlJ3Mg ZW52aXJvbm1lbnQgc3RydWN0dXJlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBT dWNjZXNzLgotICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUg RFNQIHJlc3BvbmRlZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgZGlzcF9vYmouCi0g KiAgICAgIGhub2RlICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBkaXNw X25vZGVfcnVuKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCi0JCQkJc3RydWN0IG5vZGVf b2JqZWN0ICpobm9kZSwKLQkJCQl1MzIgcm1zX2Z4biwKLQkJCQl1MzIgdWxfZXhlY3V0ZV9meG4s IG5vZGVlbnYgbm9kZV9lbnYpOwotCi0jZW5kaWYgLyogRElTUF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kbW0uaCBiL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kbW0uaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0ODdiZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmgKKysrIC9kZXYvbnVsbApAQCAt MSw3MSArMCwwIEBACi0vKgotICogZG1tLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVy IHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogVGhlIER5 bmFtaWMgTWVtb3J5IE1hcHBpbmcoRE1NKSBtb2R1bGUgbWFuYWdlcyB0aGUgRFNQIFZpcnR1YWwg YWRkcmVzcwotICogc3BhY2UgdGhhdCBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIGFueSBNUFUg YnVmZmVyIG9yIG1lbW9yeSByZWdpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYg VGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK LSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRI SVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1Mg T1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04s IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBETU1fCi0jZGVmaW5l IERNTV8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotc3RydWN0IGRtbV9vYmpl Y3Q7Ci0KLS8qIERNTSBhdHRyaWJ1dGVzIHVzZWQgaW4gZG1tX2NyZWF0ZSgpICovCi1zdHJ1Y3Qg ZG1tX21ncmF0dHJzIHsKLQl1MzIgcmVzZXJ2ZWQ7Ci19OwotCi0jZGVmaW5lIERNTVBPT0xTSVpF ICAgICAgMHg0MDAwMDAwCi0KLS8qCi0gKiAgPT09PT09PT0gZG1tX2dldF9oYW5kbGUgPT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXR1cm4gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFn ZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KLSAqICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2Fs bGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgotICovCi0KLWV4dGVybiBpbnQgZG1tX2dldF9o YW5kbGUodm9pZCAqaHByb2Nlc3NvciwKLQkJCQkgc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFu YWdlcik7Ci0KLWV4dGVybiBpbnQgZG1tX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBkbW1fb2JqZWN0 ICpkbW1fbWdyLAotCQkJCSAgICAgdTMyIHNpemUsIHUzMiAqcHJzdl9hZGRyKTsKLQotZXh0ZXJu IGludCBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCi0J CQkJCXUzMiByc3ZfYWRkcik7Ci0KLWV4dGVybiBpbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRt bV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLAotCQkJCSB1MzIgc2l6ZSk7Ci0KLWV4dGVybiBp bnQgZG1tX3VuX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCi0JCQkJICAg IHUzMiBhZGRyLCB1MzIgKnBzaXplKTsKLQotZXh0ZXJuIGludCBkbW1fZGVzdHJveShzdHJ1Y3Qg ZG1tX29iamVjdCAqZG1tX21ncik7Ci0KLWV4dGVybiBpbnQgZG1tX2RlbGV0ZV90YWJsZXMoc3Ry dWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IpOwotCi1leHRlcm4gaW50IGRtbV9jcmVhdGUoc3RydWN0 IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlciwKLQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhk ZXZfb2JqLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZG1tX21ncmF0dHJzICptZ3JfYXR0cnRzKTsK LQotZXh0ZXJuIGludCBkbW1fY3JlYXRlX3RhYmxlcyhzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21n ciwKLQkJCQkgICAgdTMyIGFkZHIsIHUzMiBzaXplKTsKLQotI2lmZGVmIERTUF9ETU1fREVCVUcK LXUzMiBkbW1fbWVtX21hcF9kdW1wKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKTsKLSNlbmRp ZgotCi0jZW5kaWYgLyogRE1NXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiMGM3NzA4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNs dWRlL2RzcGJyaWRnZS9kcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2OCArMCwwIEBACi0vKgot ICogZHJ2LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25z IGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogRFJWIFJlc291cmNlIGFsbG9jYXRpb24g bW9kdWxlLiBEcml2ZXIgT2JqZWN0IGdldHMgQ3JlYXRlZAotICogYXQgdGhlIHRpbWUgb2YgTG9h ZGluZy4gSXQgaG9sZHMgdGhlIExpc3Qgb2YgRGV2aWNlIE9iamVjdHMKLSAqIGluIHRoZSBzeXN0 ZW0uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIElu Yy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURF RCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJS QU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuCi0gKi8KLQotI2lmbmRlZiBEUlZfCi0jZGVmaW5lIERSVl8KLQotI2luY2x1ZGUgPGRz cGJyaWRnZS9kZXZkZWZzLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pZHIuaD4KLQotLyogQnJpZGdl IERyaXZlciBPYmplY3QgKi8KLXN0cnVjdCBkcnZfb2JqZWN0OwotCi0vKiBQcm92aWRlIHRoZSBE U1AgSW50ZXJuYWwgbWVtb3J5IHdpbmRvd3MgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSBMMyBh ZGRyZXNzCi0gKiBzcGFjZSAqLwotCi0jZGVmaW5lIE9NQVBfR0VNX0JBU0UgICAweDEwN0Y4MDAw Ci0jZGVmaW5lIE9NQVBfRFNQX1NJWkUgICAweDAwNzIwMDAwCi0KLS8qIE1FTTEgaXMgTDIgUkFN ICsgTDIgQ2FjaGUgc3BhY2UgKi8KLSNkZWZpbmUgT01BUF9EU1BfTUVNMV9CQVNFIDB4NUM3Rjgw MDAKLSNkZWZpbmUgT01BUF9EU1BfTUVNMV9TSVpFIDB4MTgwMDAKLQotLyogTUVNMiBpcyBMMVAg UkFNL0NBQ0hFIHNwYWNlICovCi0jZGVmaW5lIE9NQVBfRFNQX01FTTJfQkFTRSAweDVDRTAwMDAw Ci0jZGVmaW5lIE9NQVBfRFNQX01FTTJfU0laRSAweDgwMDAKLQotLyogTUVNMyBpcyBMMUQgUkFN L0NBQ0hFIHNwYWNlICovCi0jZGVmaW5lIE9NQVBfRFNQX01FTTNfQkFTRSAweDVDRjA0MDAwCi0j ZGVmaW5lIE9NQVBfRFNQX01FTTNfU0laRSAweDE0MDAwCi0KLSNkZWZpbmUgT01BUF9QRVJfQ01f QkFTRSAweDQ4MDA1MDAwCi0jZGVmaW5lIE9NQVBfUEVSX0NNX1NJWkUgMHgxMDAwCi0KLSNkZWZp bmUgT01BUF9QRVJfUFJNX0JBU0UgMHg0ODMwNzAwMAotI2RlZmluZSBPTUFQX1BFUl9QUk1fU0la RSAweDEwMDAKLQotI2RlZmluZSBPTUFQX0NPUkVfUFJNX0JBU0UgMHg0ODMwNkEwMAotI2RlZmlu ZSBPTUFQX0NPUkVfUFJNX1NJWkUgMHgxMDAwCi0KLSNkZWZpbmUgT01BUF9ETU1VX0JBU0UgMHg1 RDAwMDAwMAotI2RlZmluZSBPTUFQX0RNTVVfU0laRSAweDEwMDAKLQotLyogR1BQIFBST0NFU1Mg Q0xFQU5VUCBEYXRhIHN0cnVjdHVyZXMgKi8KLQotLyogTmV3IHN0cnVjdHVyZSAobWVtYmVyIG9m IHByb2Nlc3MgY29udGV4dCkgYWJzdHJhY3RzIE5PREUgcmVzb3VyY2UgaW5mbyAqLwotc3RydWN0 IG5vZGVfcmVzX29iamVjdCB7Ci0Jdm9pZCAqbm9kZTsKLQlzMzIgbm9kZV9hbGxvY2F0ZWQ7CS8q IE5vZGUgc3RhdHVzICovCi0JczMyIGhlYXBfYWxsb2NhdGVkOwkvKiBIZWFwIHN0YXR1cyAqLwot CXMzMiBzdHJlYW1zX2FsbG9jYXRlZDsJLyogU3RyZWFtcyBzdGF0dXMgKi8KLQlpbnQgaWQ7Ci19 OwotCi0vKiB1c2VkIHRvIGNhY2hlIGRtYSBtYXBwaW5nIGluZm9ybWF0aW9uICovCi1zdHJ1Y3Qg YnJpZGdlX2RtYV9tYXBfaW5mbyB7Ci0JLyogZGlyZWN0aW9uIG9mIERNQSBpbiBhY3Rpb24sIG9y IERNQV9OT05FICovCi0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwotCS8qIG51bWJlciBv ZiBlbGVtZW50cyByZXF1ZXN0ZWQgYnkgdXMgKi8KLQlpbnQgbnVtX3BhZ2VzOwotCS8qIG51bWJl ciBvZiBlbGVtZW50cyByZXR1cm5lZCBmcm9tIGRtYV9tYXBfc2cgKi8KLQlpbnQgc2dfbnVtOwot CS8qIGxpc3Qgb2YgYnVmZmVycyB1c2VkIGluIHRoaXMgRE1BIGFjdGlvbiAqLwotCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2c7Ci19OwotCi0vKiBVc2VkIGZvciBETU0gbWFwcGVkIG1lbW9yeSBhY2Nv dW50aW5nICovCi1zdHJ1Y3QgZG1tX21hcF9vYmplY3QgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlu azsKLQl1MzIgZHNwX2FkZHI7Ci0JdTMyIG1wdV9hZGRyOwotCXUzMiBzaXplOwotCXUzMiBudW1f dXNyX3BnczsKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwotCXN0cnVjdCBicmlkZ2VfZG1hX21hcF9p bmZvIGRtYV9pbmZvOwotfTsKLQotLyogVXNlZCBmb3IgRE1NIHJlc2VydmVkIG1lbW9yeSBhY2Nv dW50aW5nICovCi1zdHJ1Y3QgZG1tX3Jzdl9vYmplY3QgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlu azsKLQl1MzIgZHNwX3Jlc2VydmVkX2FkZHI7Ci19OwotCi0vKiBOZXcgc3RydWN0dXJlIChtZW1i ZXIgb2YgcHJvY2VzcyBjb250ZXh0KSBhYnN0cmFjdHMgc3RyZWFtIHJlc291cmNlIGluZm8gKi8K LXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgewotCXMzMiBzdHJlYW1fYWxsb2NhdGVkOwkvKiBTdHJl YW0gc3RhdHVzICovCi0Jdm9pZCAqc3RyZWFtOwotCXUzMiBudW1fYnVmczsKLQl1MzIgZGlyOwot CWludCBpZDsKLX07Ci0KLS8qIE92ZXJhbGwgQnJpZGdlIHByb2Nlc3MgcmVzb3VyY2UgdXNhZ2Ug c3RhdGUgKi8KLWVudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHsKLQlQUk9DX1JFU19BTExPQ0FURUQs Ci0JUFJPQ19SRVNfRlJFRUQKLX07Ci0KLS8qIEJyaWRnZSBEYXRhICovCi1zdHJ1Y3QgZHJ2X2Rh dGEgewotCWNoYXIgKmJhc2VfaW1nOwotCXMzMiBzaG1fc2l6ZTsKLQlpbnQgdGNfd29yZHN3YXBv bjsKLQl2b2lkICpkcnZfb2JqZWN0OwotCXZvaWQgKmRldl9vYmplY3Q7Ci0Jdm9pZCAqbWdyX29i amVjdDsKLX07Ci0KLS8qIFByb2Nlc3MgQ29udGV4dCAqLwotc3RydWN0IHByb2Nlc3NfY29udGV4 dCB7Ci0JLyogUHJvY2VzcyBTdGF0ZSAqLwotCWVudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHJlc19z dGF0ZTsKLQotCS8qIEhhbmRsZSB0byBQcm9jZXNzb3IgKi8KLQl2b2lkICpwcm9jZXNzb3I7Ci0K LQkvKiBEU1AgTm9kZSByZXNvdXJjZXMgKi8KLQlzdHJ1Y3QgaWRyICpub2RlX2lkOwotCi0JLyog RE1NIG1hcHBlZCBtZW1vcnkgcmVzb3VyY2VzICovCi0Jc3RydWN0IGxpc3RfaGVhZCBkbW1fbWFw X2xpc3Q7Ci0Jc3BpbmxvY2tfdCBkbW1fbWFwX2xvY2s7Ci0KLQkvKiBETU0gcmVzZXJ2ZWQgbWVt b3J5IHJlc291cmNlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZG1tX3Jzdl9saXN0OwotCXNwaW5s b2NrX3QgZG1tX3Jzdl9sb2NrOwotCi0JLyogU3RyZWFtIHJlc291cmNlcyAqLwotCXN0cnVjdCBp ZHIgKnN0cmVhbV9pZDsKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gZHJ2X2NyZWF0ZSA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZXMgdGhlIERyaXZlciBPYmplY3QuIFRoaXMg aXMgZG9uZSBkdXJpbmcgdGhlIGRyaXZlciBsb2FkaW5nLgotICogICAgICBUaGVyZSBpcyBvbmx5 IG9uZSBEcml2ZXIgT2JqZWN0IGluIHRoZSBEU1AvQklPUyBCcmlkZ2UuCi0gKiAgUGFyYW1ldGVy czoKLSAqICAgICAgZHJ2X29iajogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNyZWF0ZWQgRFJW IE9iamVjdCBoYW5kbGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MK LSAqICAgICAgLUVOT01FTTogICAgRmFpbGVkIGluIE1lbW9yeSBhbGxvY2F0aW9uCi0gKiAgICAg IC1FUEVSTTogICAgICBHZW5lcmFsIEZhaWx1cmUKLSAqICBSZXF1aXJlczoKLSAqICAgICAgRFJW IEluaXRpYWxpemVkIChyZWZzID4gMCApCi0gKiAgICAgIGRydl9vYmogIT0gTlVMTC4KLSAqICBF bnN1cmVzOgotICogICAgICAwOiAgICAgICAgLSAqZHJ2X29iaiBpcyBhIHZhbGlkIERSViBpbnRl cmZhY2UgdG8gdGhlIGRldmljZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIC0gTGlzdCBvZiBE ZXZPYmplY3QgQ3JlYXRlZCBhbmQgSW5pdGlhbGl6ZWQuCi0gKiAgICAgICAgICAgICAgICAgICAg ICAtIExpc3Qgb2YgZGV2X25vZGUgU3RyaW5nIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkLgotICog ICAgICAgICAgICAgICAgICAgICAgLSBSZWdpc3RyeSBpcyB1cGRhdGVkIHdpdGggdGhlIERSViBP YmplY3QuCi0gKiAgICAgICEwOiAgICAgICBEUlYgT2JqZWN0IG5vdCBjcmVhdGVkCi0gKiAgRGV0 YWlsczoKLSAqICAgICAgVGhlcmUgaXMgb25lIERyaXZlciBPYmplY3QgZm9yIHRoZSBEcml2ZXIg cmVwcmVzZW50aW5nCi0gKiAgICAgIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCBjb250YWlucyB0aGUg bGlzdCBvZiBkZXZpY2UKLSAqICAgICAgT2JqZWN0cyBhbmQgdGhlIGxpc3Qgb2YgRGV2aWNlIEV4 dGVuc2lvbnMgaW4gdGhlIHN5c3RlbS4KLSAqICAgICAgQWxzbyBpdCBjYW4gaG9sZCBvdGhlciBu ZWNlc3NhcnkKLSAqICAgICAgaW5mb3JtYXRpb24gaW4gaXRzIHN0b3JhZ2UgYXJlYS4KLSAqLwot ZXh0ZXJuIGludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaik7Ci0KLS8q Ci0gKiAgPT09PT09PT0gZHJ2X2Rlc3Ryb3kgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBkZXN0cm95cyB0aGUgRGV2IE9iamVjdCBsaXN0LCBEcnZFeHQgbGlzdAotICogICAgICBhbmQg ZGVzdHJveSB0aGUgRFJWIG9iamVjdAotICogICAgICBDYWxsZWQgdXBvbiBkcml2ZXIgdW5Mb2Fk aW5nLm9yIHVuc3VjY2Vzc2Z1bCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCi0gKiAgUGFyYW1ldGVy czoKLSAqICAgICAgZHJpdmVyX29iajogICAgIEhhbmRsZSB0byBEcml2ZXIgb2JqZWN0IC4KLSAq ICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVQRVJNOiAg ICAgIEZhaWxlZCB0byBkZXN0cm95IERSViBPYmplY3QKLSAqICBSZXF1aXJlczoKLSAqICAgICAg RFJWIEluaXRpYWxpemVkIChjUmVncyA+IDAgKQotICogICAgICBoZHJ2X29iaiBpcyBub3QgTlVM TCBhbmQgYSB2YWxpZCBEUlYgaGFuZGxlIC4KLSAqICAgICAgTGlzdCBvZiBEZXZPYmplY3QgaXMg RW1wdHkuCi0gKiAgICAgIExpc3Qgb2YgRHJ2RXh0IGlzIEVtcHR5Ci0gKiAgRW5zdXJlczoKLSAq ICAgICAgMDogICAgICAgIC0gRFJWIE9iamVjdCBkZXN0cm95ZWQgYW5kIGhkcnZfb2JqIGlzIG5v dCBhIHZhbGlkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIERSViBoYW5kbGUuCi0gKiAgICAg ICAgICAgICAgICAgICAgICAtIFJlZ2lzdHJ5IGlzIHVwZGF0ZWQgd2l0aCAiMCIgYXMgdGhlIERS ViBPYmplY3QuCi0gKi8KLWV4dGVybiBpbnQgZHJ2X2Rlc3Ryb3koc3RydWN0IGRydl9vYmplY3Qg KmRyaXZlcl9vYmopOwotCi0vKgotICogID09PT09PT09IGRydl9nZXRfZmlyc3RfZGV2X29iamVj dCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHVybnMgdGhlIFB0ciB0byB0aGUg Rmlyc3REZXYgT2JqZWN0IGluIHRoZSBMaXN0Ci0gKiAgUGFyYW1ldGVyczoKLSAqICBSZXF1aXJl czoKLSAqICAgICAgRFJWIEluaXRpYWxpemVkCi0gKiAgUmV0dXJuczoKLSAqICAgICAgZHdfZGV2 X29iamVjdDogIFB0ciB0byB0aGUgRmlyc3QgRGV2IE9iamVjdCBhcyBhIHUzMgotICogICAgICAw IGlmIGl0IGZhaWxzIHRvIHJldHJpZXZlIHRoZSBGaXJzdCBEZXYgT2JqZWN0Ci0gKiAgRW5zdXJl czoKLSAqLwotZXh0ZXJuIHUzMiBkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3Qodm9pZCk7Ci0KLS8q Ci0gKiAgPT09PT09PT0gZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uID09PT09PT09Ci0gKiAg UHVycG9zZToKLSAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBGaXJzdCBEZXZpY2UgRXh0 ZW5zaW9uIGluIHRoZSBMaXN0Ci0gKiAgUGFyYW1ldGVyczoKLSAqICBSZXF1aXJlczoKLSAqICAg ICAgRFJWIEluaXRpYWxpemVkCi0gKiAgUmV0dXJuczoKLSAqICAgICAgZHdfZGV2X2V4dGVuc2lv bjogICAgIFB0ciB0byB0aGUgRmlyc3QgRGV2aWNlIEV4dGVuc2lvbiBhcyBhIHUzMgotICogICAg ICAwOiAgICAgICAgICAgICAgICAgIEZhaWxlZCB0byBHZXQgdGhlIERldmljZSBFeHRlbnNpb24K LSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gdTMyIGRydl9nZXRfZmlyc3RfZGV2X2V4dGVuc2lv bih2b2lkKTsKLQotLyoKLSAqICA9PT09PT09PSBkcnZfZ2V0X2Rldl9vYmplY3QgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBHaXZlbiBhIGluZGV4LCByZXR1cm5zIGEgaGFuZGxlIHRv IERldk9iamVjdCBmcm9tIHRoZSBsaXN0Ci0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRydl9v Ymo6ICAgICBIYW5kbGUgdG8gdGhlIE1hbmFnZXIKLSAqICAgICAgZGV2aWNlX29iajogICAgIExv Y2F0aW9uIHRvIHN0b3JlIHRoZSBEZXYgSGFuZGxlCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIERS ViBJbml0aWFsaXplZAotICogICAgICBpbmRleCA+PSAwCi0gKiAgICAgIGhkcnZfb2JqIGlzIG5v dCBOVUxMIGFuZCBWYWxpZCBEUlYgT2JqZWN0Ci0gKiAgICAgIGRldmljZV9vYmogaXMgbm90IE5V TEwKLSAqICAgICAgRGV2aWNlIE9iamVjdCBMaXN0IG5vdCBFbXB0eQotICogIFJldHVybnM6Ci0g KiAgICAgIDA6ICAgICAgICBTdWNjZXNzCi0gKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8g R2V0IHRoZSBEZXYgT2JqZWN0Ci0gKiAgRW5zdXJlczoKLSAqICAgICAgMDogICAgICAgICpkZXZp Y2Vfb2JqICE9IE5VTEwKLSAqICAgICAgLUVQRVJNOiAgICAgICpkZXZpY2Vfb2JqID0gTlVMTAot ICovCi1leHRlcm4gaW50IGRydl9nZXRfZGV2X29iamVjdCh1MzIgaW5kZXgsCi0JCQkJICAgICBz dHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmosCi0JCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAq KmRldmljZV9vYmopOwotCi0vKgotICogID09PT09PT09IGRydl9nZXRfbmV4dF9kZXZfb2JqZWN0 ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBO ZXh0IERldmljZSBPYmplY3QgZnJvbSB0aGUgdGhlIExpc3QKLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byB0aGUgRGV2aWNlIE9iamVjdAotICogIFJlcXVp cmVzOgotICogICAgICBEUlYgSW5pdGlhbGl6ZWQKLSAqICAgICAgaGRldl9vYmogIT0gMAotICog IFJldHVybnM6Ci0gKiAgICAgIGR3X2Rldl9vYmplY3Q6ICAgIFB0ciB0byB0aGUgTmV4dCBEZXYg T2JqZWN0IGFzIGEgdTMyCi0gKiAgICAgIDA6ICAgICAgICAgICAgICBJZiBpdCBmYWlsIHRvIGdl dCB0aGUgbmV4dCBEZXYgT2JqZWN0LgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiB1MzIgZHJ2 X2dldF9uZXh0X2Rldl9vYmplY3QodTMyIGhkZXZfb2JqKTsKLQotLyoKLSAqICA9PT09PT09PSBk cnZfZ2V0X25leHRfZGV2X2V4dGVuc2lvbiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IFJldHVybnMgdGhlIFB0ciB0byB0aGUgTmV4dCBEZXZpY2UgRXh0ZW5zaW9uIGZyb20gdGhlIHRo ZSBMaXN0Ci0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGV2X2V4dGVuc2lvbjogICAgICBIYW5k bGUgdG8gdGhlIERldmljZSBFeHRlbnNpb24KLSAqICBSZXF1aXJlczoKLSAqICAgICAgRFJWIElu aXRpYWxpemVkCi0gKiAgICAgIGRldl9leHRlbnNpb24gIT0gMC4KLSAqICBSZXR1cm5zOgotICog ICAgICBkd19kZXZfZXh0ZW5zaW9uOiAgICAgUHRyIHRvIHRoZSBOZXh0IERldiBFeHRlbnNpb24K LSAqICAgICAgMDogICAgICAgICAgICAgICAgICBJZiBpdCBmYWlsIHRvIEdldCB0aGUgbmV4dCBE ZXYgRXh0ZW5zaW9uCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIHUzMiBkcnZfZ2V0X25leHRf ZGV2X2V4dGVuc2lvbih1MzIgZGV2X2V4dGVuc2lvbik7Ci0KLS8qCi0gKiAgPT09PT09PT0gZHJ2 X2luc2VydF9kZXZfb2JqZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgSW5zZXJ0 IGEgRGV2aWNlT2JqZWN0IGludG8gdGhlIGxpc3Qgb2YgRHJpdmVyIG9iamVjdC4KLSAqICBQYXJh bWV0ZXJzOgotICogICAgICBkcml2ZXJfb2JqOiAgICAgSGFuZGxlIHRvIERydk9iamVjdAotICog ICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBEZXZpY2VPYmplY3QgdG8gaW5zZXJ0LgotICog IFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBJZiBzdWNjZXNzZnVsLgotICogICAgICAtRVBF Uk06ICAgICAgR2VuZXJhbCBGYWlsdXJlOgotICogIFJlcXVpcmVzOgotICogICAgICBoZHJ2X29i aiAhPSBOVUxMIGFuZCBWYWxpZCBEUlYgSGFuZGxlLgotICogICAgICBoZGV2X29iaiAhPSBOVUxM LgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICBEZXZpY2UgT2JqZWN0IGlzIGluc2Vy dGVkIGFuZCB0aGUgTGlzdCBpcyBub3QgZW1wdHkuCi0gKi8KLWV4dGVybiBpbnQgZHJ2X2luc2Vy dF9kZXZfb2JqZWN0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAotCQkJCQlzdHJ1Y3Qg ZGV2X29iamVjdCAqaGRldl9vYmopOwotCi0vKgotICogID09PT09PT09IGRydl9yZW1vdmVfZGV2 X29iamVjdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNlYXJjaCBmb3IgYW5kIHJl bW92ZSBhIERldmljZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBvZiBEZXZpY2UgT2JqCi0g KiAgICAgIG9iamVjdHMuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZHJpdmVyX29iajogICAg IEhhbmRsZSB0byBEcnZPYmplY3QKLSAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gRGV2 T2JqZWN0IHRvIFJlbW92ZQotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNz LgotICogICAgICAtRVBFUk06ICAgICAgVW5hYmxlIHRvIGZpbmQgZGV2X29iai4KLSAqICBSZXF1 aXJlczoKLSAqICAgICAgaGRydl9vYmogIT0gTlVMTCBhbmQgYSBWYWxpZCBEUlYgSGFuZGxlLgot ICogICAgICBoZGV2X29iaiAhPSBOVUxMLgotICogICAgICBMaXN0IGV4aXN0cyBhbmQgaXMgbm90 IGVtcHR5LgotICogIEVuc3VyZXM6Ci0gKiAgICAgIExpc3QgZWl0aGVyIGRvZXMgbm90IGV4aXN0 IChOVUxMKSwgb3IgaXMgbm90IGVtcHR5IGlmIGl0IGRvZXMgZXhpc3QuCi0gKi8KLWV4dGVybiBp bnQgZHJ2X3JlbW92ZV9kZXZfb2JqZWN0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAot CQkJCQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopOwotCi0vKgotICogID09PT09PT09IGRy dl9yZXF1ZXN0X3Jlc291cmNlcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEFzc2ln bnMgdGhlIFJlc291cmNlcyBvciBSZWxlYXNlcyB0aGVtLgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGR3X2NvbnRleHQ6ICAgICAgICAgIFBhdGggdG8gdGhlIGRyaXZlciBSZWdpc3RyeSBLZXku Ci0gKiAgICAgIGRldl9ub2RlX3N0cmc6ICAgICBQdHIgdG8gZGV2X25vZGUgU3RyaW5nIHN0b3Jl ZCBpbiB0aGUgRGV2aWNlIEV4dC4KLSAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIHN1Y2Nl c3M7IEZBTFNFIG90aGVyd2lzZS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICogICAg ICBUaGUgUmVzb3VyY2VzIGFyZSBhc3NpZ25lZCBiYXNlZCBvbiBCdXMgdHlwZS4KLSAqICAgICAg VGhlIGhhcmR3YXJlIGlzIGluaXRpYWxpemVkLiBSZXNvdXJjZSBpbmZvcm1hdGlvbiBpcwotICog ICAgICBnYXRoZXJlZCBmcm9tIHRoZSBSZWdpc3RyeShJU0EsIFBDTUNJQSlvciBzY2FubmVkKFBD SSkKLSAqICAgICAgUmVzb3VyY2Ugc3RydWN0dXJlIGlzIHN0b3JlZCBpbiB0aGUgcmVnaXN0cnkg d2hpY2ggd2lsbCBiZQotICogICAgICBsYXRlciB1c2VkIGJ5IHRoZSBDRkcgbW9kdWxlLgotICov Ci1leHRlcm4gaW50IGRydl9yZXF1ZXN0X3Jlc291cmNlcyh1MzIgZHdfY29udGV4dCwKLQkJCQkJ dTMyICpkZXZfbm9kZV9zdHJnKTsKLQotLyoKLSAqICA9PT09PT09PSBkcnZfcmVsZWFzZV9yZXNv dXJjZXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBBc3NpZ25zIHRoZSBSZXNvdXJj ZXMgb3IgUmVsZWFzZXMgdGhlbS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkd19jb250ZXh0 OiAgICAgIFBhdGggdG8gdGhlIGRyaXZlciBSZWdpc3RyeSBLZXkuCi0gKiAgICAgIGhkcnZfb2Jq OiAgICAgSGFuZGxlIHRvIHRoZSBEcml2ZXIgT2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAgICAg IFRSVUUgaWYgc3VjY2VzczsgRkFMU0Ugb3RoZXJ3aXNlLgotICogIFJlcXVpcmVzOgotICogIEVu c3VyZXM6Ci0gKiAgICAgIFRoZSBSZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGJhc2VkIG9uIEJ1cyB0 eXBlLgotICogICAgICBSZXNvdXJjZSBzdHJ1Y3R1cmUgaXMgZGVsZXRlZCBmcm9tIHRoZSByZWdp c3RyeQotICovCi1leHRlcm4gaW50IGRydl9yZWxlYXNlX3Jlc291cmNlcyh1MzIgZHdfY29udGV4 dCwKLQkJCQkJc3RydWN0IGRydl9vYmplY3QgKmhkcnZfb2JqKTsKLQotLyoqCi0gKiBkcnZfcmVx dWVzdF9icmlkZ2VfcmVzX2RzcCgpIC0gUmVzZXJ2ZXMgc2hhcmVkIG1lbW9yeSBmb3IgYnJpZGdl LgotICogQHBob3N0X3Jlc291cmNlczogIHBvaW50ZXIgdG8gaG9zdCByZXNvdXJjZXMuCi0gKi8K LWludCBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCh2b2lkICoqcGhvc3RfcmVzb3VyY2VzKTsK LQotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQotdm9pZCBicmlkZ2VfcmVjb3Zl cl9zY2hlZHVsZSh2b2lkKTsKLSNlbmRpZgotCi0vKgotICogID09PT09PT09IG1lbV9leHRfcGh5 c19wb29sX2luaXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBVc2VzIHRoZSBwaHlz aWNhbCBtZW1vcnkgY2h1bmsgcGFzc2VkIGZvciBpbnRlcm5hbCBjb25zaXN0ZW50IG1lbW9yeQot ICogICAgICBhbGxvY2F0aW9ucy4KLSAqICAgICAgcGh5c2ljYWwgYWRkcmVzcyBiYXNlZCBvbiB0 aGUgcGFnZSBmcmFtZSBhZGRyZXNzLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHBvb2xfcGh5 c19iYXNlICBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgcG9vbC4KLSAq ICAgICAgcG9vbF9zaXplICAgICAgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5IHBvb2wuCi0g KiAgUmV0dXJuczoKLSAqICAgICAgbm9uZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgLSBNRU0g aW5pdGlhbGl6ZWQuCi0gKiAgICAgIC0gdmFsaWQgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlIGJh c2UgYW5kIHNpemUgPiAwCi0gKi8KLWV4dGVybiB2b2lkIG1lbV9leHRfcGh5c19wb29sX2luaXQo dTMyIHBvb2xfcGh5c19iYXNlLCB1MzIgcG9vbF9zaXplKTsKLQotLyoKLSAqICA9PT09PT09PSBt ZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlID09PT09PT09Ci0gKi8KLWV4dGVybiB2b2lkIG1lbV9l eHRfcGh5c19wb29sX3JlbGVhc2Uodm9pZCk7Ci0KLS8qICA9PT09PT09PSBtZW1fYWxsb2NfcGh5 c19tZW0gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5 IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeQotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGJ5 dGVfc2l6ZTogICAgIE51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KLSAqICAgICAgYWxpZ25f bWFzazogICAgQWxpZ25tZW50IE1hc2suCi0gKiAgICAgIHBoeXNpY2FsX2FkZHJlc3M6IFBoeXNp Y2FsIGFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeS4KLSAqICBSZXR1cm5zOgotICogICAgICBQ b2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5OwotICogICAgICBOVUxMIGlmIG1lbW9yeSBjb3Vs ZG4ndCBiZSBhbGxvY2F0ZWQsIG9yIGlmIGJ5dGVfc2l6ZSA9PSAwLgotICogIFJlcXVpcmVzOgot ICogICAgICBNRU0gaW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgVGhlIHJldHVy bmVkIHBvaW50ZXIsIGlmIG5vdCBOVUxMLCBwb2ludHMgdG8gYSB2YWxpZCBtZW1vcnkgYmxvY2sg b2YKLSAqICAgICAgdGhlIHNpemUgcmVxdWVzdGVkLiAgUmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVz cyByZWZlcnMgdG8gcGh5c2ljYWwKLSAqICAgICAgbG9jYXRpb24gb2YgbWVtb3J5LgotICovCi1l eHRlcm4gdm9pZCAqbWVtX2FsbG9jX3BoeXNfbWVtKHUzMiBieXRlX3NpemUsCi0JCQkJdTMyIGFs aWduX21hc2ssIHUzMiAqcGh5c2ljYWxfYWRkcmVzcyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gbWVt X2ZyZWVfcGh5c19tZW0gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBGcmVlIHRoZSBn aXZlbiBibG9jayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LgotICogIFBhcmFtZXRl cnM6Ci0gKiAgICAgIHZpcnR1YWxfYWRkcmVzczogIFBvaW50ZXIgdG8gdmlydHVhbCBtZW1vcnkg cmVnaW9uIGFsbG9jYXRlZAotICogICAgICBieSBtZW1fYWxsb2NfcGh5c19tZW0oKS4KLSAqICAg ICAgcGh5c2ljYWxfYWRkcmVzczogIFBvaW50ZXIgdG8gcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbiAg YWxsb2NhdGVkCi0gKiAgICAgIGJ5IG1lbV9hbGxvY19waHlzX21lbSgpLgotICogICAgICBieXRl X3NpemU6ICBTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGFsbG9jYXRlZCBieSBtZW1fYWxsb2Nf cGh5c19tZW0oKS4KLSAqICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBNRU0gaW5p dGlhbGl6ZWQuCi0gKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBhIHZhbGlkIG1lbW9yeSBhZGRy ZXNzIHJldHVybmVkIGJ5Ci0gKiAgICAgICAgICBtZW1fYWxsb2NfcGh5c19tZW0oKQotICogIEVu c3VyZXM6Ci0gKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBubyBsb25nZXIgYSB2YWxpZCBwb2lu dGVyIHRvIG1lbW9yeS4KLSAqLwotZXh0ZXJuIHZvaWQgbWVtX2ZyZWVfcGh5c19tZW0odm9pZCAq dmlydHVhbF9hZGRyZXNzLAotCQkJICAgICAgdTMyIHBoeXNpY2FsX2FkZHJlc3MsIHUzMiBieXRl X3NpemUpOwotCi0vKgotICogID09PT09PT09IE1FTV9MSU5FQVJfQUREUkVTUyA9PT09PT09PQot ICogIFB1cnBvc2U6Ci0gKiAgICAgIEdldCB0aGUgbGluZWFyIGFkZHJlc3MgY29ycmVzcG9uZGlu ZyB0byB0aGUgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4KLSAqICBQYXJhbWV0ZXJzOgotICogICAg ICBwaHlzX2FkZHI6ICBQaHlzaWNhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4KLSAqICAgICAgYnl0 ZV9zaXplOiAgICAgTnVtYmVyIG9mIGJ5dGVzIGluIHBoeXNpY2FsIHJhbmdlIHRvIG1hcC4KLSAq ICBSZXR1cm5zOgotICogICAgICBUaGUgY29ycmVzcG9uZGluZyBsaW5lYXIgYWRkcmVzcywgb3Ig TlVMTCBpZiB1bnN1Y2Nlc3NmdWwuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIE1FTSBpbml0aWFs aXplZC4KLSAqICBFbnN1cmVzOgotICogIE5vdGVzOgotICogICAgICBJZiB2YWxpZCBsaW5lYXIg YWRkcmVzcyBpcyByZXR1cm5lZCwgYmUgc3VyZSB0byBjYWxsCi0gKiAgICAgIE1FTV9VTk1BUF9M SU5FQVJfQUREUkVTUygpLgotICovCi0jZGVmaW5lIE1FTV9MSU5FQVJfQUREUkVTUyhwaHlfYWRk ciwgYnl0ZV9zaXplKSBwaHlfYWRkcgotCi0vKgotICogID09PT09PT09IE1FTV9VTk1BUF9MSU5F QVJfQUREUkVTUyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFVubWFwIHRoZSBsaW5l YXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIGJhc2VfYWRkcjogUHRyIHRvIG1hcHBlZCBtZW1vcnkgKGFzIHJldHVybmVkIGJ5 IE1FTV9MSU5FQVJfQUREUkVTUygpKS4KLSAqICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICog ICAgICAtIE1FTSBpbml0aWFsaXplZC4KLSAqICAgICAgLSBiYXNlX2FkZHIgaXMgYSB2YWxpZCBs aW5lYXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgotICogIEVuc3VyZXM6 Ci0gKiAgICAgIC0gYmFzZV9hZGRyIG5vIGxvbmdlciBwb2ludHMgdG8gYSB2YWxpZCBsaW5lYXIg YWRkcmVzcy4KLSAqLwotI2RlZmluZSBNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoYmFzZV9hZGRy KSB7fQotCi0jZW5kaWYgLyogRFJWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oIGIvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmY4MDgyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaAorKysgL2Rl di9udWxsCkBAIC0xLDQ2NyArMCwwIEBACi0vKgotICogZHNwYXBpLWlvY3RsLmgKLSAqCi0gKiBE U1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nl c3NvcnMuCi0gKgotICogQ29udGFpbnMgc3RydWN0dXJlcyBhbmQgY29tbWFuZHMgdGhhdCBhcmUg dXNlZCBmb3IgaW50ZXJhY3Rpb24KLSAqIGJldHdlZW4gdGhlIEREU1AgQVBJIGFuZCBCcmlkZ2Ug ZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5j LgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVE IGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4KLSAqLwotCi0jaWZuZGVmIERTUEFQSUlPQ1RMXwotI2RlZmluZSBEU1BBUElJT0NUTF8K LQotI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRl ZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4KLQotdW5pb24gdHJhcHBlZF9hcmdz IHsKLQotCS8qIE1HUiBNb2R1bGUgKi8KLQlzdHJ1Y3QgewotCQl1MzIgbm9kZV9pZDsKLQkJc3Ry dWN0IGRzcF9uZGJwcm9wcyBfX3VzZXIgKm5kYl9wcm9wczsKLQkJdTMyIG5kYl9wcm9wc19zaXpl OwotCQl1MzIgX191c2VyICpudW1fbm9kZXM7Ci0JfSBhcmdzX21ncl9lbnVtbm9kZV9pbmZvOwot Ci0Jc3RydWN0IHsKLQkJdTMyIHByb2Nlc3Nvcl9pZDsKLQkJc3RydWN0IGRzcF9wcm9jZXNzb3Jp bmZvIF9fdXNlciAqcHJvY2Vzc29yX2luZm87Ci0JCXUzMiBwcm9jZXNzb3JfaW5mb19zaXplOwot CQl1MzIgX191c2VyICpudW1fcHJvY3M7Ci0JfSBhcmdzX21ncl9lbnVtcHJvY19pbmZvOwotCi0J c3RydWN0IHsKLQkJc3RydWN0IGRzcF91dWlkICp1dWlkX29iajsKLQkJZW51bSBkc3BfZGNkb2Jq dHlwZSBvYmpfdHlwZTsKLQkJY2hhciAqc3pfcGF0aF9uYW1lOwotCX0gYXJnc19tZ3JfcmVnaXN0 ZXJvYmplY3Q7Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqOwotCQll bnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlOwotCX0gYXJnc19tZ3JfdW5yZWdpc3Rlcm9iamVj dDsKLQotCXN0cnVjdCB7Ci0JCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIF9fdXNlciAqX191c2Vy ICphbm90aWZpY2F0aW9uczsKLQkJdTMyIGNvdW50OwotCQl1MzIgX191c2VyICppbmRleDsKLQkJ dTMyIHRpbWVvdXQ7Ci0JfSBhcmdzX21ncl93YWl0OwotCi0JLyogUFJPQyBNb2R1bGUgKi8KLQlz dHJ1Y3QgewotCQl1MzIgcHJvY2Vzc29yX2lkOwotCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJp biBfX3VzZXIgKmF0dHJfaW47Ci0JCXZvaWQgKl9fdXNlciAqcGhfcHJvY2Vzc29yOwotCX0gYXJn c19wcm9jX2F0dGFjaDsKLQotCXN0cnVjdCB7Ci0JCXZvaWQgKnByb2Nlc3NvcjsKLQkJdTMyIGNt ZDsKLQkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICphcmdzOwotCX0gYXJnc19wcm9jX2N0cmw7 Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JfSBhcmdzX3Byb2NfZGV0YWNoOwot Ci0Jc3RydWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQl2b2lkICpfX3VzZXIgKm5vZGVfdGFi OwotCQl1MzIgbm9kZV90YWJfc2l6ZTsKLQkJdTMyIF9fdXNlciAqbnVtX25vZGVzOwotCQl1MzIg X191c2VyICphbGxvY2F0ZWQ7Ci0JfSBhcmdzX3Byb2NfZW51bW5vZGVfaW5mbzsKLQotCXN0cnVj dCB7Ci0JCXZvaWQgKnByb2Nlc3NvcjsKLQkJdTMyIHJlc291cmNlX3R5cGU7Ci0JCXN0cnVjdCBk c3BfcmVzb3VyY2VpbmZvICpyZXNvdXJjZV9pbmZvOwotCQl1MzIgcmVzb3VyY2VfaW5mb19zaXpl OwotCX0gYXJnc19wcm9jX2VudW1yZXNvdXJjZXM7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9j ZXNzb3I7Ci0JCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgX191c2VyICpwcm9jX3N0YXRlX29i ajsKLQkJdTMyIHN0YXRlX2luZm9fc2l6ZTsKLQl9IGFyZ3NfcHJvY19nZXRzdGF0ZTsKLQotCXN0 cnVjdCB7Ci0JCXZvaWQgKnByb2Nlc3NvcjsKLQkJdTggX191c2VyICpidWY7Ci0JCXU4IF9fdXNl ciAqc2l6ZTsKLQkJdTMyIG1heF9zaXplOwotCX0gYXJnc19wcm9jX2dldHRyYWNlOwotCi0Jc3Ry dWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQlzMzIgYXJnY19pbmRleDsKLQkJY2hhciBfX3Vz ZXIgKl9fdXNlciAqdXNlcl9hcmdzOwotCQljaGFyICpfX3VzZXIgKnVzZXJfZW52cDsKLQl9IGFy Z3NfcHJvY19sb2FkOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQl1MzIgZXZl bnRfbWFzazsKLQkJdTMyIG5vdGlmeV90eXBlOwotCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBf X3VzZXIgKm5vdGlmaWNhdGlvbjsKLQl9IGFyZ3NfcHJvY19yZWdpc3Rlcl9ub3RpZnk7Ci0KLQlz dHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JCXUzMiBzaXplOwotCQl2b2lkICpfX3VzZXIg KnJzdl9hZGRyOwotCX0gYXJnc19wcm9jX3Jzdm1lbTsKLQotCXN0cnVjdCB7Ci0JCXZvaWQgKnBy b2Nlc3NvcjsKLQkJdTMyIHNpemU7Ci0JCXZvaWQgKnJzdl9hZGRyOwotCX0gYXJnc19wcm9jX3Vu cnN2bWVtOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQl2b2lkICptcHVfYWRk cjsKLQkJdTMyIHNpemU7Ci0JCXZvaWQgKnJlcV9hZGRyOwotCQl2b2lkICpfX3VzZXIgKm1hcF9h ZGRyOwotCQl1MzIgbWFwX2F0dHI7Ci0JfSBhcmdzX3Byb2NfbWFwbWVtOwotCi0Jc3RydWN0IHsK LQkJdm9pZCAqcHJvY2Vzc29yOwotCQl1MzIgc2l6ZTsKLQkJdm9pZCAqbWFwX2FkZHI7Ci0JfSBh cmdzX3Byb2NfdW5tYXBtZW07Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JCXZv aWQgKm1wdV9hZGRyOwotCQl1MzIgc2l6ZTsKLQkJdTMyIGRpcjsKLQl9IGFyZ3NfcHJvY19kbWE7 Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JCXZvaWQgKm1wdV9hZGRyOwotCQl1 MzIgc2l6ZTsKLQkJdTMyIGZsYWdzOwotCX0gYXJnc19wcm9jX2ZsdXNobWVtb3J5OwotCi0Jc3Ry dWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQl2b2lkICptcHVfYWRkcjsKLQkJdTMyIHNpemU7 Ci0JfSBhcmdzX3Byb2NfaW52YWxpZGF0ZW1lbW9yeTsKLQotCS8qIE5PREUgTW9kdWxlICovCi0J c3RydWN0IHsKLQkJdm9pZCAqcHJvY2Vzc29yOwotCQlzdHJ1Y3QgZHNwX3V1aWQgX191c2VyICpu b2RlX2lkX3B0cjsKLQkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICphcmdzOwotCQlzdHJ1Y3Qg ZHNwX25vZGVhdHRyaW4gX191c2VyICphdHRyX2luOwotCQl2b2lkICpfX3VzZXIgKm5vZGU7Ci0J fSBhcmdzX25vZGVfYWxsb2NhdGU7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpub2RlOwotCQl1MzIg c2l6ZTsKLQkJc3RydWN0IGRzcF9idWZmZXJhdHRyIF9fdXNlciAqYXR0cjsKLQkJdTggKl9fdXNl ciAqYnVmZmVyOwotCX0gYXJnc19ub2RlX2FsbG9jbXNnYnVmOwotCi0Jc3RydWN0IHsKLQkJdm9p ZCAqbm9kZTsKLQkJczMyIHByaW87Ci0JfSBhcmdzX25vZGVfY2hhbmdlcHJpb3JpdHk7Ci0KLQlz dHJ1Y3QgewotCQl2b2lkICpub2RlOwotCQl1MzIgc3RyZWFtX2lkOwotCQl2b2lkICpvdGhlcl9u b2RlOwotCQl1MzIgb3RoZXJfc3RyZWFtOwotCQlzdHJ1Y3QgZHNwX3N0cm1hdHRyIF9fdXNlciAq YXR0cnM7Ci0JCXN0cnVjdCBkc3BfY2JkYXRhIF9fdXNlciAqY29ubl9wYXJhbTsKLQl9IGFyZ3Nf bm9kZV9jb25uZWN0OwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqbm9kZTsKLQl9IGFyZ3Nfbm9kZV9j cmVhdGU7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpub2RlOwotCX0gYXJnc19ub2RlX2RlbGV0ZTsK LQotCXN0cnVjdCB7Ci0JCXZvaWQgKm5vZGU7Ci0JCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciBfX3Vz ZXIgKmF0dHI7Ci0JCXU4ICpidWZmZXI7Ci0JfSBhcmdzX25vZGVfZnJlZW1zZ2J1ZjsKLQotCXN0 cnVjdCB7Ci0JCXZvaWQgKm5vZGU7Ci0JCXN0cnVjdCBkc3Bfbm9kZWF0dHIgX191c2VyICphdHRy OwotCQl1MzIgYXR0cl9zaXplOwotCX0gYXJnc19ub2RlX2dldGF0dHI7Ci0KLQlzdHJ1Y3Qgewot CQl2b2lkICpub2RlOwotCQlzdHJ1Y3QgZHNwX21zZyBfX3VzZXIgKm1lc3NhZ2U7Ci0JCXUzMiB0 aW1lb3V0OwotCX0gYXJnc19ub2RlX2dldG1lc3NhZ2U7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpu b2RlOwotCX0gYXJnc19ub2RlX3BhdXNlOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqbm9kZTsKLQkJ c3RydWN0IGRzcF9tc2cgX191c2VyICptZXNzYWdlOwotCQl1MzIgdGltZW91dDsKLQl9IGFyZ3Nf bm9kZV9wdXRtZXNzYWdlOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqbm9kZTsKLQkJdTMyIGV2ZW50 X21hc2s7Ci0JCXUzMiBub3RpZnlfdHlwZTsKLQkJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gX191 c2VyICpub3RpZmljYXRpb247Ci0JfSBhcmdzX25vZGVfcmVnaXN0ZXJub3RpZnk7Ci0KLQlzdHJ1 Y3QgewotCQl2b2lkICpub2RlOwotCX0gYXJnc19ub2RlX3J1bjsKLQotCXN0cnVjdCB7Ci0JCXZv aWQgKm5vZGU7Ci0JCWludCBfX3VzZXIgKnN0YXR1czsKLQl9IGFyZ3Nfbm9kZV90ZXJtaW5hdGU7 Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JCXN0cnVjdCBkc3BfdXVpZCBfX3Vz ZXIgKm5vZGVfaWRfcHRyOwotCQlzdHJ1Y3QgZHNwX25kYnByb3BzIF9fdXNlciAqbm9kZV9wcm9w czsKLQl9IGFyZ3Nfbm9kZV9nZXR1dWlkcHJvcHM7Ci0KLQkvKiBTVFJNIG1vZHVsZSAqLwotCi0J c3RydWN0IHsKLQkJdm9pZCAqc3RyZWFtOwotCQl1MzIgc2l6ZTsKLQkJdTggKl9fdXNlciAqYXBf YnVmZmVyOwotCQl1MzIgbnVtX2J1ZnM7Ci0JfSBhcmdzX3N0cm1fYWxsb2NhdGVidWZmZXI7Ci0K LQlzdHJ1Y3QgewotCQl2b2lkICpzdHJlYW07Ci0JfSBhcmdzX3N0cm1fY2xvc2U7Ci0KLQlzdHJ1 Y3QgewotCQl2b2lkICpzdHJlYW07Ci0JCXU4ICpfX3VzZXIgKmFwX2J1ZmZlcjsKLQkJdTMyIG51 bV9idWZzOwotCX0gYXJnc19zdHJtX2ZyZWVidWZmZXI7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpz dHJlYW07Ci0JCXZvaWQgKipldmVudDsKLQl9IGFyZ3Nfc3RybV9nZXRldmVudGhhbmRsZTsKLQot CXN0cnVjdCB7Ci0JCXZvaWQgKnN0cmVhbTsKLQkJc3RydWN0IHN0cmVhbV9pbmZvIF9fdXNlciAq c3RyZWFtX2luZm87Ci0JCXUzMiBzdHJlYW1faW5mb19zaXplOwotCX0gYXJnc19zdHJtX2dldGlu Zm87Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpzdHJlYW07Ci0JCWJvb2wgZmx1c2hfZmxhZzsKLQl9 IGFyZ3Nfc3RybV9pZGxlOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqc3RyZWFtOwotCQl1OCAqYnVm ZmVyOwotCQl1MzIgYnl0ZXM7Ci0JCXUzMiBidWZfc2l6ZTsKLQkJdTMyIGFyZzsKLQl9IGFyZ3Nf c3RybV9pc3N1ZTsKLQotCXN0cnVjdCB7Ci0JCXZvaWQgKm5vZGU7Ci0JCXUzMiBkaXJlY3Rpb247 Ci0JCXUzMiBpbmRleDsKLQkJc3RydWN0IHN0cm1fYXR0ciBfX3VzZXIgKmF0dHJfaW47Ci0JCXZv aWQgKl9fdXNlciAqc3RyZWFtOwotCX0gYXJnc19zdHJtX29wZW47Ci0KLQlzdHJ1Y3QgewotCQl2 b2lkICpzdHJlYW07Ci0JCXU4ICpfX3VzZXIgKmJ1Zl9wdHI7Ci0JCXUzMiBfX3VzZXIgKmJ5dGVz OwotCQl1MzIgX191c2VyICpidWZfc2l6ZV9wdHI7Ci0JCXUzMiBfX3VzZXIgKmFyZzsKLQl9IGFy Z3Nfc3RybV9yZWNsYWltOwotCi0Jc3RydWN0IHsKLQkJdm9pZCAqc3RyZWFtOwotCQl1MzIgZXZl bnRfbWFzazsKLQkJdTMyIG5vdGlmeV90eXBlOwotCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBf X3VzZXIgKm5vdGlmaWNhdGlvbjsKLQl9IGFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeTsKLQotCXN0 cnVjdCB7Ci0JCXZvaWQgKl9fdXNlciAqc3RyZWFtX3RhYjsKLQkJdTMyIHN0cm1fbnVtOwotCQl1 MzIgX191c2VyICptYXNrOwotCQl1MzIgdGltZW91dDsKLQl9IGFyZ3Nfc3RybV9zZWxlY3Q7Ci0K LQkvKiBDTU0gTW9kdWxlICovCi0Jc3RydWN0IHsKLQkJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9t Z3I7Ci0JCXUzMiBzaXplOwotCQlzdHJ1Y3QgY21tX2F0dHJzICphdHRyczsKLQkJdm9pZCAqKmJ1 Zl92YTsKLQl9IGFyZ3NfY21tX2FsbG9jYnVmOwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IGNtbV9v YmplY3QgKmNtbV9tZ3I7Ci0JCXZvaWQgKmJ1Zl9wYTsKLQkJdTMyIHNlZ19pZDsKLQl9IGFyZ3Nf Y21tX2ZyZWVidWY7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICpwcm9jZXNzb3I7Ci0JCXN0cnVjdCBj bW1fb2JqZWN0ICpfX3VzZXIgKmNtbV9tZ3I7Ci0JfSBhcmdzX2NtbV9nZXRoYW5kbGU7Ci0KLQlz dHJ1Y3QgewotCQlzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncjsKLQkJc3RydWN0IGNtbV9pbmZv IF9fdXNlciAqY21tX2luZm9fb2JqOwotCX0gYXJnc19jbW1fZ2V0aW5mbzsKLQotCS8qIFVUSUwg bW9kdWxlICovCi0Jc3RydWN0IHsKLQkJczMyIHV0aWxfYXJnYzsKLQkJY2hhciAqKmFyZ3Y7Ci0J fSBhcmdzX3V0aWxfdGVzdGRsbDsKLX07Ci0KLS8qCi0gKiBEc3BicmlkZ2UgSW9jdGwgbnVtYmVy aW5nIHNjaGVtZQotICoKLSAqICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0gKiAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgfCAgTW9kdWxlICAgfCAgIElv Y3RsIE51bWJlciAgICB8Ci0gKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g KiAgfCB4IHwgeCB8IHggfCAwIHwgMCB8IDAgfCAwIHwgMCB8Ci0gKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyogSW9jdGwgZHJpdmVyIGlkZW50aWZpZXIgKi8K LSNkZWZpbmUgREIJCTB4REIKLQotLyoKLSAqIEZvbGxvd2luZyBhcmUgdXNlZCB0byBkaXN0aW5n dWlzaCBiZXR3ZWVuIG1vZHVsZSBpb2N0bHMsIHRoaXMgaXMgbmVlZGVkCi0gKiBpbiBjYXNlIG5l dyBpb2N0bHMgYXJlIGludHJvZHVjZWQuCi0gKi8KLSNkZWZpbmUgREJfTU9EVUxFX01BU0sJCTB4 RTAKLSNkZWZpbmUgREJfSU9DX01BU0sJCTB4MUYKLQotLyogSW9jdGwgbW9kdWxlIG1hc2tzICov Ci0jZGVmaW5lIERCX01HUgkJMHgwCi0jZGVmaW5lIERCX1BST0MJCTB4MjAKLSNkZWZpbmUgREJf Tk9ERQkJMHg0MAotI2RlZmluZSBEQl9TVFJNCQkweDYwCi0jZGVmaW5lIERCX0NNTQkJMHg4MAot Ci0jZGVmaW5lIERCX01PRFVMRV9TSElGVAkJNQotCi0vKiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUg aW9jdGwgcGVyIGRzcGJyaWRnZSBtb2R1bGUgKi8KLSNkZWZpbmUgREJfSU9DKG1vZHVsZSwgbnVt KSBcCi0JCQkoKChtb2R1bGUpICYgREJfTU9EVUxFX01BU0spIHwgKChudW0pICYgREJfSU9DX01B U0spKQotLyogVXNlZCB0byBnZXQgZHNwYnJpZGdlIGlvY3RsIG1vZHVsZSAqLwotI2RlZmluZSBE Ql9HRVRfTU9EVUxFKGNtZCkJKChjbWQpICYgREJfTU9EVUxFX01BU0spCi0vKiBVc2VkIHRvIGdl dCBkc3BicmlkZ2UgaW9jdGwgbnVtYmVyICovCi0jZGVmaW5lIERCX0dFVF9JT0MoY21kKQkJKChj bWQpICYgREJfSU9DX01BU0spCi0KLS8qIFRPRE86IFJlbW92ZSBkZXByZWNhdGVkIGFuZCBub3Qg aW1wbGVtZW50ZWQgKi8KLQotLyogTUdSIE1vZHVsZSAqLwotI2RlZmluZSBNR1JfRU5VTU5PREVf SU5GTwlfSU9XUihEQiwgREJfSU9DKERCX01HUiwgMCksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5l IE1HUl9FTlVNUFJPQ19JTkZPCV9JT1dSKERCLCBEQl9JT0MoREJfTUdSLCAxKSwgdW5zaWduZWQg bG9uZykKLSNkZWZpbmUgTUdSX1JFR0lTVEVST0JKRUNUCV9JT1dSKERCLCBEQl9JT0MoREJfTUdS LCAyKSwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgTUdSX1VOUkVHSVNURVJPQkpFQ1QJX0lPV1Io REIsIERCX0lPQyhEQl9NR1IsIDMpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBNR1JfV0FJVAkJ X0lPV1IoREIsIERCX0lPQyhEQl9NR1IsIDQpLCB1bnNpZ25lZCBsb25nKQotLyogTUdSX0dFVF9Q Uk9DX1JFUyBEZXByZWNhdGVkICovCi0jZGVmaW5lIE1HUl9HRVRfUFJPQ19SRVMJX0lPUihEQiwg REJfSU9DKERCX01HUiwgNSksIHVuc2lnbmVkIGxvbmcpCi0KLS8qIFBST0MgTW9kdWxlICovCi0j ZGVmaW5lIFBST0NfQVRUQUNICQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDApLCB1bnNpZ25l ZCBsb25nKQotI2RlZmluZSBQUk9DX0NUUkwJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAxKSwg dW5zaWduZWQgbG9uZykKLS8qIFBST0NfREVUQUNIIERlcHJlY2F0ZWQgKi8KLSNkZWZpbmUgUFJP Q19ERVRBQ0gJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAyKSwgdW5zaWduZWQgbG9uZykKLSNk ZWZpbmUgUFJPQ19FTlVNTk9ERQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCAzKSwgdW5zaWdu ZWQgbG9uZykKLSNkZWZpbmUgUFJPQ19FTlVNUkVTT1VSQ0VTCV9JT1dSKERCLCBEQl9JT0MoREJf UFJPQywgNCksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFBST0NfR0VUX1NUQVRFCQlfSU9XUihE QiwgREJfSU9DKERCX1BST0MsIDUpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBQUk9DX0dFVF9U UkFDRQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA2KSwgdW5zaWduZWQgbG9uZykKLSNkZWZp bmUgUFJPQ19MT0FECQlfSU9XKERCLCBEQl9JT0MoREJfUFJPQywgNyksIHVuc2lnbmVkIGxvbmcp Ci0jZGVmaW5lIFBST0NfUkVHSVNURVJOT1RJRlkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA4 KSwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgUFJPQ19TVEFSVAkJX0lPVyhEQiwgREJfSU9DKERC X1BST0MsIDkpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBQUk9DX1JTVk1FTQkJX0lPV1IoREIs IERCX0lPQyhEQl9QUk9DLCAxMCksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFBST0NfVU5SU1ZN RU0JCV9JT1coREIsIERCX0lPQyhEQl9QUk9DLCAxMSksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5l IFBST0NfTUFQTUVNCQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDEyKSwgdW5zaWduZWQgbG9u ZykKLSNkZWZpbmUgUFJPQ19VTk1BUE1FTQkJX0lPUihEQiwgREJfSU9DKERCX1BST0MsIDEzKSwg dW5zaWduZWQgbG9uZykKLSNkZWZpbmUgUFJPQ19GTFVTSE1FTU9SWQlfSU9XKERCLCBEQl9JT0Mo REJfUFJPQywgMTQpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBQUk9DX1NUT1AJCV9JT1dSKERC LCBEQl9JT0MoREJfUFJPQywgMTUpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBQUk9DX0lOVkFM SURBVEVNRU1PUlkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE2KSwgdW5zaWduZWQgbG9uZykK LSNkZWZpbmUgUFJPQ19CRUdJTkRNQQkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE3KSwgdW5z aWduZWQgbG9uZykKLSNkZWZpbmUgUFJPQ19FTkRETUEJCV9JT1coREIsIERCX0lPQyhEQl9QUk9D LCAxOCksIHVuc2lnbmVkIGxvbmcpCi0KLS8qIE5PREUgTW9kdWxlICovCi0jZGVmaW5lIE5PREVf QUxMT0NBVEUJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMCksIHVuc2lnbmVkIGxvbmcpCi0j ZGVmaW5lIE5PREVfQUxMT0NNU0dCVUYJX0lPV1IoREIsIERCX0lPQyhEQl9OT0RFLCAxKSwgdW5z aWduZWQgbG9uZykKLSNkZWZpbmUgTk9ERV9DSEFOR0VQUklPUklUWQlfSU9XKERCLCBEQl9JT0Mo REJfTk9ERSwgMiksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIE5PREVfQ09OTkVDVAkJX0lPVyhE QiwgREJfSU9DKERCX05PREUsIDMpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBOT0RFX0NSRUFU RQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDQpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBO T0RFX0RFTEVURQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDUpLCB1bnNpZ25lZCBsb25nKQot I2RlZmluZSBOT0RFX0ZSRUVNU0dCVUYJCV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA2KSwgdW5z aWduZWQgbG9uZykKLSNkZWZpbmUgTk9ERV9HRVRBVFRSCQlfSU9XUihEQiwgREJfSU9DKERCX05P REUsIDcpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBOT0RFX0dFVE1FU1NBR0UJCV9JT1dSKERC LCBEQl9JT0MoREJfTk9ERSwgOCksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIE5PREVfUEFVU0UJ CV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA5KSwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgTk9E RV9QVVRNRVNTQUdFCQlfSU9XKERCLCBEQl9JT0MoREJfTk9ERSwgMTApLCB1bnNpZ25lZCBsb25n KQotI2RlZmluZSBOT0RFX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwg MTEpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBOT0RFX1JVTgkJX0lPVyhEQiwgREJfSU9DKERC X05PREUsIDEyKSwgdW5zaWduZWQgbG9uZykKLSNkZWZpbmUgTk9ERV9URVJNSU5BVEUJCV9JT1dS KERCLCBEQl9JT0MoREJfTk9ERSwgMTMpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBOT0RFX0dF VFVVSURQUk9QUwlfSU9XUihEQiwgREJfSU9DKERCX05PREUsIDE0KSwgdW5zaWduZWQgbG9uZykK LQotLyogU1RSTSBNb2R1bGUgKi8KLSNkZWZpbmUgU1RSTV9BTExPQ0FURUJVRkZFUglfSU9XUihE QiwgREJfSU9DKERCX1NUUk0sIDApLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBTVFJNX0NMT1NF CQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgMSksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFNU Uk1fRlJFRUJVRkZFUgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCAyKSwgdW5zaWduZWQgbG9u ZykKLSNkZWZpbmUgU1RSTV9HRVRFVkVOVEhBTkRMRQlfSU8oREIsIERCX0lPQyhEQl9TVFJNLCAz KSkJLyogTm90IEltcGwnZCAqLwotI2RlZmluZSBTVFJNX0dFVElORk8JCV9JT1dSKERCLCBEQl9J T0MoREJfU1RSTSwgNCksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFNUUk1fSURMRQkJX0lPVyhE QiwgREJfSU9DKERCX1NUUk0sIDUpLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZSBTVFJNX0lTU1VF CQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgNiksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFNU Uk1fT1BFTgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCA3KSwgdW5zaWduZWQgbG9uZykKLSNk ZWZpbmUgU1RSTV9SRUNMQUlNCQlfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDgpLCB1bnNpZ25l ZCBsb25nKQotI2RlZmluZSBTVFJNX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJf U1RSTSwgOSksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIFNUUk1fU0VMRUNUCQlfSU9XUihEQiwg REJfSU9DKERCX1NUUk0sIDEwKSwgdW5zaWduZWQgbG9uZykKLQotLyogQ01NIE1vZHVsZSAqLwot I2RlZmluZSBDTU1fQUxMT0NCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMCkpCS8qIE5vdCBJ bXBsJ2QgKi8KLSNkZWZpbmUgQ01NX0ZSRUVCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMSkp CS8qIE5vdCBJbXBsJ2QgKi8KLSNkZWZpbmUgQ01NX0dFVEhBTkRMRQkJX0lPUihEQiwgREJfSU9D KERCX0NNTSwgMiksIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lIENNTV9HRVRJTkZPCQlfSU9SKERC LCBEQl9JT0MoREJfQ01NLCAzKSwgdW5zaWduZWQgbG9uZykKLQotI2VuZGlmIC8qIERTUEFQSUlP Q1RMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUv ZHNwYnJpZGdlL2RzcGFwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUv ZHNwYnJpZGdlL2RzcGFwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTljNjg3 Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9kc3BhcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogZHNw YXBpLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZv ciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogSW5jbHVkZXMgdGhlIHdyYXBwZXIgZnVuY3Rp b25zIGNhbGxlZCBkaXJlY3RseSBieSB0aGUKLSAqIERldmljZUlPQ29udHJvbCBpbnRlcmZhY2Uu Ci0gKgotICogTm90ZXM6Ci0gKiAgIEJyaWRnZSBzZXJ2aWNlcyBleHBvcnRlZCB0byBCcmlkZ2Ug ZHJpdmVyIGFyZSBpbml0aWFsaXplZCBieSB0aGUgRFNQQVBJIG9uCi0gKiAgIGJlaGFsZiBvZiB0 aGUgQnJpZGdlIGRyaXZlci4gQnJpZGdlIGRyaXZlciBtdXN0IG5vdCBjYWxsIG1vZHVsZSBJbml0 L0V4aXQKLSAqICAgZnVuY3Rpb25zLgotICoKLSAqICAgVG8gZW5zdXJlIEJyaWRnZSBkcml2ZXIg YmluYXJ5IGNvbXBhdGliaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBwbGF0Zm9ybXMsCi0gKiAgIGZv ciB0aGUgc2FtZSBwcm9jZXNzb3IsIGEgQnJpZGdlIGRyaXZlciBtdXN0IHJlc3RyaWN0IGl0cyB1 c2FnZSBvZiBzeXN0ZW0KLSAqICAgc2VydmljZXMgdG8gdGhvc2UgZXhwb3J0ZWQgYnkgdGhlIERT UEFQSSBsaWJyYXJ5LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3Ry dW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0Ug SVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElF RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgRFNQQVBJXwotI2RlZmluZSBEU1BBUElf Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwYXBpLWlvY3RsLmg+Ci0KLS8qIFRoaXMgQlJEIEFQ SSBMaWJyYXJ5IFZlcnNpb246ICovCi0jZGVmaW5lIEJSRF9BUElfTUFKT1JfVkVSU0lPTiAgICh1 MzIpOAkvKiAuOHggLSBBbHBoYSwgLjl4IC0gQmV0YSwgMS54IEZDUyAqLwotI2RlZmluZSBCUkRf QVBJX01JTk9SX1ZFUlNJT04gICAodTMyKTAKLQotLyoKLSAqICA9PT09PT09PSBhcGlfY2FsbF9k ZXZfaW9jdGwgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDYWxsIHRoZSAod3JhcHBl cikgZnVuY3Rpb24gZm9yIHRoZSBjb3JyZXNwb25kaW5nIEFQSSBJT0NUTC4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBjbWQ6ICAgICAgICBJT0NUTCBpZCwgYmFzZSAwLgotICogICAgICBhcmdz OiAgICAgICBBcmd1bWVudCBzdHJ1Y3R1cmUuCi0gKiAgICAgIHJlc3VsdDoKLSAqICBSZXR1cm5z OgotICogICAgICAwIGlmIGNvbW1hbmQgY2FsbGVkOyAtRUlOVkFMIGlmIGNvbW1hbmQgbm90IGlu IElPQ1RMCi0gKiAgICAgIHRhYmxlLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKi8K LWV4dGVybiBpbnQgYXBpX2NhbGxfZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICAg ICAgdW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAotCQkJCSAgICAgIHUzMiAqcmVzdWx0LCB2b2lk ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9PT09PT09PSBhcGlfaW5pdCA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIEluaXRpYWxpemUgbW9kdWxlcyB1c2VkIGJ5IEJyaWRnZSBBUEkuCi0g KiAgICAgIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVk LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBzdWNjZXNz OyBGQUxTRSBvdGhlcndpc2UuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqLwotZXh0 ZXJuIGJvb2wgYXBpX2luaXQodm9pZCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYXBpX2luaXRfY29t cGxldGUyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUGVyZm9ybSBhbnkgcmVxdWly ZWQgYnJpZGdlIGluaXRpYWxpemF0aW9uIHdoaWNoIGNhbm5vdAotICogICAgICBiZSBwZXJmb3Jt ZWQgaW4gYXBpX2luaXQoKSBvciBkZXZfc3RhcnRfZGV2aWNlKCkgZHVlCi0gKiAgICAgIHRvIHRo ZSBmYWN0IHRoYXQgc29tZSBzZXJ2aWNlcyBhcmUgbm90IHlldAotICogICAgICBjb21wbGV0ZWx5 IGluaXRpYWxpemVkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDog ICAgICAgIEFsbG93IHRoaXMgZGV2aWNlIHRvIGxvYWQKLSAqICAgICAgLUVQRVJNOiAgICAgIEZh aWx1cmUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIEJyaWRnZSBBUEkgaW5pdGlhbGl6ZWQuCi0g KiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBhcGlfaW5pdF9jb21wbGV0ZTIodm9pZCk7Ci0K LS8qCi0gKiAgPT09PT09PT0gYXBpX2V4aXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBFeGl0IGFsbCBtb2R1bGVzIGluaXRpYWxpemVkIGluIGFwaV9pbml0KHZvaWQpLgotICogICAg ICBUaGlzIHByb2NlZHVyZSBpcyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLgot ICogIFBhcmFtZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgYXBp X2luaXQodm9pZCkgd2FzIHByZXZpb3VzbHkgY2FsbGVkLgotICogIEVuc3VyZXM6Ci0gKiAgICAg IFJlc291cmNlcyBhY3F1aXJlZCBpbiBhcGlfaW5pdCh2b2lkKSBhcmUgZnJlZWQuCi0gKi8KLWV4 dGVybiB2b2lkIGFwaV9leGl0KHZvaWQpOwotCi0vKiBNR1Igd3JhcHBlciBmdW5jdGlvbnMgKi8K LWV4dGVybiB1MzIgbWdyd3JhcF9lbnVtX25vZGVfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFy Z3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBtZ3J3cmFwX2VudW1fcHJvY19pbmZvKHVu aW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIG1ncndy YXBfcmVnaXN0ZXJfb2JqZWN0KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4 dCk7Ci1leHRlcm4gdTMyIG1ncndyYXBfdW5yZWdpc3Rlcl9vYmplY3QodW5pb24gdHJhcHBlZF9h cmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbWdyd3JhcF93YWl0X2Zvcl9i cmlkZ2VfZXZlbnRzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywKLQkJCQkJICB2b2lkICpwcl9j dHh0KTsKLQotZXh0ZXJuIHUzMiBtZ3J3cmFwX2dldF9wcm9jZXNzX3Jlc291cmNlc19pbmZvKHVu aW9uIHRyYXBwZWRfYXJncyAqYXJncywKLQkJCQkJICAgICAgdm9pZCAqcHJfY3R4dCk7Ci0KLS8q IENQUkMgKFByb2Nlc3Nvcikgd3JhcHBlciBGdW5jdGlvbnMgKi8KLWV4dGVybiB1MzIgcHJvY3dy YXBfYXR0YWNoKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRl cm4gdTMyIHByb2N3cmFwX2N0cmwodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9j dHh0KTsKLWV4dGVybiB1MzIgcHJvY3dyYXBfZGV0YWNoKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJn cywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIHByb2N3cmFwX2VudW1fbm9kZV9pbmZvKHVu aW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIHByb2N3 cmFwX2VudW1fcmVzb3VyY2VzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4 dCk7Ci1leHRlcm4gdTMyIHByb2N3cmFwX2dldF9zdGF0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFy Z3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBwcm9jd3JhcF9nZXRfdHJhY2UodW5pb24g dHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgcHJvY3dyYXBf bG9hZCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUz MiBwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lk ICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgcHJvY3dyYXBfc3RhcnQodW5pb24gdHJhcHBlZF9hcmdz ICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgcHJvY3dyYXBfcmVzZXJ2ZV9tZW1v cnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIg cHJvY3dyYXBfdW5fcmVzZXJ2ZV9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lk ICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgcHJvY3dyYXBfbWFwKHVuaW9uIHRyYXBwZWRfYXJncyAq YXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIHByb2N3cmFwX3VuX21hcCh1bmlvbiB0 cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBwcm9jd3JhcF9m bHVzaF9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4 dGVybiB1MzIgcHJvY3dyYXBfc3RvcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnBy X2N0eHQpOwotZXh0ZXJuIHUzMiBwcm9jd3JhcF9pbnZhbGlkYXRlX21lbW9yeSh1bmlvbiB0cmFw cGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBwcm9jd3JhcF9iZWdp bl9kbWEodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1 MzIgcHJvY3dyYXBfZW5kX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0 eHQpOwotCi0vKiBOT0RFIHdyYXBwZXIgZnVuY3Rpb25zICovCi1leHRlcm4gdTMyIG5vZGV3cmFw X2FsbG9jYXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRl cm4gdTMyIG5vZGV3cmFwX2FsbG9jX21zZ19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2 b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5KHVuaW9u IHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIG5vZGV3cmFw X2Nvbm5lY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVy biB1MzIgbm9kZXdyYXBfY3JlYXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJf Y3R4dCk7Ci1leHRlcm4gdTMyIG5vZGV3cmFwX2RlbGV0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFy Z3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBub2Rld3JhcF9mcmVlX21zZ19idWYodW5p b24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbm9kZXdy YXBfZ2V0X2F0dHIodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4 dGVybiB1MzIgbm9kZXdyYXBfZ2V0X21lc3NhZ2UodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2 b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbm9kZXdyYXBfcGF1c2UodW5pb24gdHJhcHBlZF9h cmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbm9kZXdyYXBfcHV0X21lc3Nh Z2UodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIg bm9kZXdyYXBfcmVnaXN0ZXJfbm90aWZ5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAq cHJfY3R4dCk7Ci1leHRlcm4gdTMyIG5vZGV3cmFwX3J1bih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFy Z3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJuIHUzMiBub2Rld3JhcF90ZXJtaW5hdGUodW5pb24g dHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgbm9kZXdyYXBf Z2V0X3V1aWRfcHJvcHModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsK LQotLyogU1RSTSB3cmFwcGVyIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHUzMiBzdHJtd3JhcF9hbGxv Y2F0ZV9idWZmZXIodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4 dGVybiB1MzIgc3RybXdyYXBfY2xvc2UodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpw cl9jdHh0KTsKLWV4dGVybiB1MzIgc3RybXdyYXBfZnJlZV9idWZmZXIodW5pb24gdHJhcHBlZF9h cmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgc3RybXdyYXBfZ2V0X2V2ZW50 X2hhbmRsZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOwotZXh0ZXJu IHUzMiBzdHJtd3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnBy X2N0eHQpOwotZXh0ZXJuIHUzMiBzdHJtd3JhcF9pZGxlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJn cywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIHN0cm13cmFwX2lzc3VlKHVuaW9uIHRyYXBw ZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIHN0cm13cmFwX29wZW4o dW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgc3Ry bXdyYXBfcmVjbGFpbSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOwot ZXh0ZXJuIHUzMiBzdHJtd3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICph cmdzLCB2b2lkICpwcl9jdHh0KTsKLWV4dGVybiB1MzIgc3RybXdyYXBfc2VsZWN0KHVuaW9uIHRy YXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci0KLWV4dGVybiB1MzIgY21td3JhcF9j YWxsb2NfYnVmKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRl cm4gdTMyIGNtbXdyYXBfZnJlZV9idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpw cl9jdHh0KTsKLWV4dGVybiB1MzIgY21td3JhcF9nZXRfaGFuZGxlKHVuaW9uIHRyYXBwZWRfYXJn cyAqYXJncywgdm9pZCAqcHJfY3R4dCk7Ci1leHRlcm4gdTMyIGNtbXdyYXBfZ2V0X2luZm8odW5p b24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKLQotI2VuZGlmIC8qIERTUEFQ SV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9kc3BjaG5sLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2UvZHNwY2hubC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTQ2YTUw Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9kc3BjaG5sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogZHNw Y2hubC5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBm b3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERlY2xhcmVzIHRoZSB1cHBlciBlZGdlIGNo YW5uZWwgY2xhc3MgbGlicmFyeSBmdW5jdGlvbnMgcmVxdWlyZWQgYnkKLSAqIGFsbCBCcmlkZ2Ug ZHJpdmVyIC8gRFNQIEFQSSBkcml2ZXIgaW50ZXJmYWNlIHRhYmxlcy4gVGhlc2UgZnVuY3Rpb25z IGFyZQotICogaW1wbGVtZW50ZWQgYnkgZXZlcnkgY2xhc3Mgb2YgQnJpZGdlIGNoYW5uZWwgbGli cmFyeS4KLSAqCi0gKiBOb3RlczoKLSAqICAgVGhlIGZ1bmN0aW9uIGNvbW1lbnQgaGVhZGVycyBy ZXNpZGUgaW4gZHNwZGVmcy5oLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgRFNQQ0hOTF8KLSNkZWZpbmUg RFNQQ0hOTF8KLQotZXh0ZXJuIGludCBicmlkZ2VfY2hubF9jcmVhdGUoc3RydWN0IGNobmxfbWdy ICoqY2hhbm5lbF9tZ3IsCi0JCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0J CQkJICAgICBjb25zdCBzdHJ1Y3QgY2hubF9tZ3JhdHRycwotCQkJCSAgICAgKm1ncl9hdHRydHMp OwotCi1leHRlcm4gaW50IGJyaWRnZV9jaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hu bF9tZ3IpOwotCi1leHRlcm4gaW50IGJyaWRnZV9jaG5sX29wZW4oc3RydWN0IGNobmxfb2JqZWN0 ICoqY2hubCwKLQkJCQkgICBzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwKLQkJCQkgICBzOCBj aG5sX21vZGUsCi0JCQkJICAgdTMyIGNoX2lkLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBjaG5sX2F0 dHIKLQkJCQkgICAqcGF0dHJzKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfY2hubF9jbG9zZShzdHJ1 Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfY2hubF9hZGRf aW9fcmVxKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCi0JCQkJICAgICAgdm9pZCAqaG9z dF9idWYsCi0JCQkJICAgICAgdTMyIGJ5dGVfc2l6ZSwgdTMyIGJ1Zl9zaXplLAotCQkJCSAgICAg IHUzMiBkd19kc3BfYWRkciwgdTMyIGR3X2FyZyk7Ci0KLWV4dGVybiBpbnQgYnJpZGdlX2Nobmxf Z2V0X2lvYyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAotCQkJCSAgIHUzMiB0aW1lb3V0 LCBzdHJ1Y3QgY2hubF9pb2MgKmNoYW5faW9jKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfY2hubF9j YW5jZWxfaW8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7Ci0KLWV4dGVybiBpbnQgYnJp ZGdlX2NobmxfZmx1c2hfaW8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKLQkJCQkgICAg dTMyIHRpbWVvdXQpOwotCi1leHRlcm4gaW50IGJyaWRnZV9jaG5sX2dldF9pbmZvKHN0cnVjdCBj aG5sX29iamVjdCAqY2hubF9vYmosCi0JCQkJICAgIHN0cnVjdCBjaG5sX2luZm8gKmNoYW5uZWxf aW5mbyk7Ci0KLWV4dGVybiBpbnQgYnJpZGdlX2NobmxfZ2V0X21ncl9pbmZvKHN0cnVjdCBjaG5s X21nciAqaGNobmxfbWdyLAotCQkJCQl1MzIgY2hfaWQsIHN0cnVjdCBjaG5sX21ncmluZm8KLQkJ CQkJKm1ncl9pbmZvKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfY2hubF9pZGxlKHN0cnVjdCBjaG5s X29iamVjdCAqY2hubF9vYmosCi0JCQkJICAgdTMyIHRpbWVvdXQsIGJvb2wgZmx1c2hfZGF0YSk7 Ci0KLWV4dGVybiBpbnQgYnJpZGdlX2NobmxfcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBjaG5sX29i amVjdCAqY2hubF9vYmosCi0JCQkJCSAgIHUzMiBldmVudF9tYXNrLAotCQkJCQkgICB1MzIgbm90 aWZ5X3R5cGUsCi0JCQkJCSAgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCi0JCQkJCSAgICpobm90 aWZpY2F0aW9uKTsKLQotI2VuZGlmIC8qIERTUENITkxfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVmcy5oIGIvZHJpdmVy cy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMmJmMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVmcy5oCisrKyAvZGV2L251 bGwKQEAgLTEsMTA0OCArMCwwIEBACi0vKgotICogZHNwZGVmcy5oCi0gKgotICogRFNQLUJJT1Mg QnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgot ICoKLSAqIEJyaWRnZSBkcml2ZXIgZW50cnkgcG9pbnQgYW5kIGludGVyZmFjZSBmdW5jdGlvbiBk ZWNsYXJhdGlvbnMuCi0gKgotICogTm90ZXM6Ci0gKiAgIFRoZSBEU1AgQVBJIG9idGFpbnMgaXQn cyBmdW5jdGlvbiBpbnRlcmZhY2UgdG8KLSAqICAgdGhlIEJyaWRnZSBkcml2ZXIgdmlhIGEgY2Fs bCB0byBicmlkZ2VfZHJ2X2VudHJ5KCkuCi0gKgotICogICBCcmlkZ2Ugc2VydmljZXMgZXhwb3J0 ZWQgdG8gQnJpZGdlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkIGJ5IHRoZQotICogICBEU1AgQVBJ IG9uIGJlaGFsZiBvZiB0aGUgQnJpZGdlIGRyaXZlci4KLSAqCi0gKiAgIEJyaWRnZSBmdW5jdGlv biBEQkMgUmVxdWlyZXMgYW5kIEVuc3VyZXMgYXJlIGFsc28gbWFkZSBieSB0aGUgRFNQIEFQSSBv bgotICogICBiZWhhbGYgb2YgdGhlIEJyaWRnZSBkcml2ZXIsIHRvIHNpbXBsaWZ5IHRoZSBCcmlk Z2UgZHJpdmVyIGNvZGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBEU1BERUZTXwotI2RlZmluZSBEU1BE RUZTXwotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2JyZGRlZnMuaD4KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvY2ZnZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgotI2luY2x1ZGUg PGRzcGJyaWRnZS9kc3BkZWguaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9pby5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2dkZWZzLmg+Ci0K LS8qIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyJ3MgcHJpdmF0ZSBkZXZpY2UgY29udGV4dC4gKi8K LXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQ7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0v KiBCUklER0UgRFJJVkVSIEZVTkNUSU9OIFRZUEVTICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbW9uaXRvciA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIEJyaW5nIHRoZSBib2FyZCB0byB0aGUgQlJEX0lETEUgKG1vbml0b3Ip IHN0YXRlLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8g QnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBjb250ZXh0LgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1 cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCi0gKiAgICAgIC1FUEVS TTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAg IGRldl9jdHh0ICE9IE5VTEwKLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgQm9hcmQg aXMgaW4gQlJEX0lETEUgc3RhdGU7Ci0gKiAgICAgIGVsc2U6ICAgICAgICAgICBCb2FyZCBzdGF0 ZSBpcyBpbmRldGVybWluYXRlLgotICovCi10eXBlZGVmIGludCgqZnhuX2JyZF9tb25pdG9yKSAo c3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOwotCi0vKgotICogID09PT09PT09 IGZ4bl9icmRfc2V0c3RhdGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBTZXRzIHRo ZSBCcmlkZ2UgZHJpdmVyIHN0YXRlCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGV2X2N0eHQ6 ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCi0gKiAgICAg IGJyZF9zdGF0ZTogICAgICBCb2FyZCBzdGF0ZQotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAg ICAgICBTdWNjZXNzLgotICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVy cm9yLgotICogIFJlcXVpcmVzOgotICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwotICogICAgICBi cmRfc3RhdGUgIDw9IEJSRF9MQVNUU1RBVEUuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgYnJkX3N0 YXRlICA8PSBCUkRfTEFTVFNUQVRFLgotICogIFVwZGF0ZSB0aGUgQm9hcmQgc3RhdGUgdG8gdGhl IHNwZWNpZmllZCBzdGF0ZS4KLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9icmRfc2V0c3RhdGUpIChz dHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0Ci0JCQkJICAgICAgICogZGV2X2N0eHQsIHUzMiBicmRf c3RhdGUpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfc3RhcnQgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBCcmluZyBib2FyZCB0byB0aGUgQlJEX1JVTk5JTkcgKHN0YXJ0 KSBzdGF0ZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRv IEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgY29udGV4dC4KLSAqICAgICAgZHNwX2FkZHI6 ICAgICAgIERTUCBhZGRyZXNzIGF0IHdoaWNoIHRvIHN0YXJ0IGV4ZWN1dGlvbi4KLSAqICBSZXR1 cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVUSU1FRE9VVDogIFRp bWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgotICog ICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgotICogIFJlcXVpcmVz OgotICogICAgICBkZXZfY3R4dCAhPSBOVUxMCi0gKiAgICAgIEJvYXJkIGlzIGluIG1vbml0b3Ig KEJSRF9JRExFKSBzdGF0ZS4KLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgQm9hcmQg aXMgaW4gQlJEX1JVTk5JTkcgc3RhdGUuCi0gKiAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1 cHRzIHRvIHRoZSBQQyBhcmUgZW5hYmxlZC4KLSAqICAgICAgZWxzZTogICAgICAgICAgIEJvYXJk IHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUuCi0gKi8KLXR5cGVkZWYgaW50KCpmeG5fYnJkX3N0YXJ0 KSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCSAgICAqIGRldl9jdHh0LCB1MzIgZHNw X2FkZHIpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX2NvcHkgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogIENvcHkgbWVtb3J5IGZyb20gb25lIERTUCBhZGRyZXNzIHRvIGFu b3RoZXIKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkZXZfY29udGV4dDogICAgUG9pbnRlciB0 byBjb250ZXh0IGhhbmRsZQotICogIGRzcF9kZXN0X2FkZHI6ICBEU1AgYWRkcmVzcyB0byBjb3B5 IHRvCi0gKiAgZHNwX3NyY19hZGRyOiAgIERTUCBhZGRyZXNzIHRvIGNvcHkgZnJvbQotICogIHVs X251bV9ieXRlczogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqICBtZW1fdHlwZTogICBXaGF0 IHNlY3Rpb24gb2YgbWVtb3J5IHRvIGNvcHkgdG8KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAg ICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBl cnJvci4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgZGV2X2NvbnRleHQgIT0gTlVMTAotICogIEVu c3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICBCb2FyZCBpcyBpbiBCUkRfUlVOTklORyBzdGF0ZS4K LSAqICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgdG8gdGhlIFBDIGFyZSBlbmFibGVk LgotICogICAgICBlbHNlOiAgICAgICAgICAgQm9hcmQgc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4K LSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9icmRfbWVtY29weSkgKHN0cnVjdCBicmlkZ2VfZGV2X2Nv bnRleHQKLQkJCQkgICAgICAqIGRldl9jdHh0LAotCQkJCSAgICAgIHUzMiBkc3BfZGVzdF9hZGRy LAotCQkJCSAgICAgIHUzMiBkc3Bfc3JjX2FkZHIsCi0JCQkJICAgICAgdTMyIHVsX251bV9ieXRl cywgdTMyIG1lbV90eXBlKTsKLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fd3JpdGUg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBXcml0ZSBhIGJsb2NrIG9mIGhvc3QgbWVt b3J5IGludG8gYSBEU1AgYWRkcmVzcywgaW50byBhIGdpdmVuIG1lbW9yeQotICogICAgICBzcGFj ZS4gIFVubGlrZSBicmlkZ2VfYnJkX3dyaXRlLCB0aGlzIEFQSSBkb2VzIHJlc2V0IHRoZSBEU1AK LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBk cml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KLSAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJl c3Mgb24gRFNQIGJvYXJkIChEZXN0aW5hdGlvbikuCi0gKiAgICAgIGhvc3RfYnVmOiAgICAgICBQ b2ludGVyIHRvIGhvc3QgYnVmZmVyIChTb3VyY2UpLgotICogICAgICB1bF9udW1fYnl0ZXM6ICAg ICBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCi0gKiAgICAgIG1lbV90eXBlOiAgICAgICBN ZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgotICogIFJldHVybnM6Ci0g KiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBv Y2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCi0gKiAgICAgIC1F UEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCi0gKiAgUmVxdWlyZXM6Ci0gKiAg ICAgIGRldl9jdHh0ICE9IE5VTEw7Ci0gKiAgICAgIGhvc3RfYnVmICE9IE5VTEwuCi0gKiAgRW5z dXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9icmRfbWVtd3JpdGUpIChzdHJ1Y3QgYnJpZGdl X2Rldl9jb250ZXh0Ci0JCQkJICAgICAgICogZGV2X2N0eHQsCi0JCQkJICAgICAgIHU4ICpob3N0 X2J1ZiwKLQkJCQkgICAgICAgdTMyIGRzcF9hZGRyLCB1MzIgdWxfbnVtX2J5dGVzLAotCQkJCSAg ICAgICB1MzIgbWVtX3R5cGUpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX21h cCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIE1hcCBhIE1QVSBtZW1vcnkgcmVnaW9u IHRvIGEgRFNQL0lWQSBtZW1vcnkgc3BhY2UKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkZXZf Y3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KLSAq ICAgICAgdWxfbXB1X2FkZHI6ICAgICAgTVBVIG1lbW9yeSByZWdpb24gc3RhcnQgYWRkcmVzcy4K LSAqICAgICAgdmlydF9hZGRyOiAgICAgIERTUC9JVkEgbWVtb3J5IHJlZ2lvbiB1OCBhZGRyZXNz LgotICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gbWFwLgotICog ICAgICBtYXBfYXR0cnM6ICAgICAgIE1hcHBpbmcgYXR0cmlidXRlcyAoZS5nLiBlbmRpYW5uZXNz KS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVQ RVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KLSAqICBSZXF1aXJlczoKLSAqICAg ICAgZGV2X2N0eHQgIT0gTlVMTDsKLSAqICBFbnN1cmVzOgotICovCi10eXBlZGVmIGludCgqZnhu X2JyZF9tZW1tYXApIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0Ci0JCQkJICAgICAqIGRldl9j dHh0LCB1MzIgdWxfbXB1X2FkZHIsCi0JCQkJICAgICB1MzIgdmlydF9hZGRyLCB1MzIgdWxfbnVt X2J5dGVzLAotCQkJCSAgICAgdTMyIG1hcF9hdHRyLAotCQkJCSAgICAgc3RydWN0IHBhZ2UgKipt YXBwZWRfcGFnZXMpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX3VuX21hcCA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFVuTWFwIGFuIE1QVSBtZW1vcnkgcmVnaW9u IGZyb20gRFNQL0lWQSBtZW1vcnkgc3BhY2UKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBkZXZf Y3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KLSAq ICAgICAgdmlydF9hZGRyOiAgICAgIERTUC9JVkEgbWVtb3J5IHJlZ2lvbiB1OCBhZGRyZXNzLgot ICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdW5tYXAuCi0gKiAg UmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FUEVSTTogICAg ICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGRldl9j dHh0ICE9IE5VTEw7Ci0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9icmRfbWVt dW5tYXApIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0Ci0JCQkJICAgICAgICogZGV2X2N0eHQs Ci0JCQkJICAgICAgIHUzMiB2aXJ0X2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMpOwotCi0vKgotICog ID09PT09PT09IGJyaWRnZV9icmRfc3RvcCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IEJyaW5nIGJvYXJkIHRvIHRoZSBCUkRfU1RPUFBFRCBzdGF0ZS4KLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZp Y2UgY29udGV4dC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAq ICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25z ZSBmcm9tIGhhcmR3YXJlLgotICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVk IGVycm9yLgotICogIFJlcXVpcmVzOgotICogICAgICBkZXZfY3R4dCAhPSBOVUxMCi0gKiAgRW5z dXJlczoKLSAqICAgICAgMDogICAgICAgIEJvYXJkIGlzIGluIEJSRF9TVE9QUEVEIChzdG9wKSBz dGF0ZTsKLSAqICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgdG8gdGhlIFBDIGFyZSBk aXNhYmxlZC4KLSAqICAgICAgZWxzZTogICAgICAgICAgIEJvYXJkIHN0YXRlIGlzIGluZGV0ZXJt aW5hdGUuCi0gKi8KLXR5cGVkZWYgaW50KCpmeG5fYnJkX3N0b3ApIChzdHJ1Y3QgYnJpZGdlX2Rl dl9jb250ZXh0ICpkZXZfY3R4dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zdGF0 dXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXBvcnQgdGhlIGN1cnJlbnQgc3Rh dGUgb2YgdGhlIGJvYXJkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGRldl9jdHh0OiAgICBI YW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBjb250ZXh0LgotICogICAgICBi b2FyZF9zdGF0ZTogICAgUHRyIHRvIEJSRCBzdGF0dXMgdmFyaWFibGUuCi0gKiAgUmV0dXJuczoK LSAqICAgICAgMDoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgYm9hcmRfc3RhdGUgIT0gTlVMTDsK LSAqICAgICAgZGV2X2N0eHQgIT0gTlVMTAotICogIEVuc3VyZXM6Ci0gKiAgICAgICpib2FyZF9z dGF0ZSBpcyBvbmUgb2YKLSAqICAgICAgIHtCUkRfU1RPUFBFRCwgQlJEX0lETEUsIEJSRF9SVU5O SU5HLCBCUkRfVU5LTk9XTn07Ci0gKi8KLXR5cGVkZWYgaW50KCpmeG5fYnJkX3N0YXR1cykgKHN0 cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAotCQkJCSAgICAgaW50ICpib2FyZF9z dGF0ZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2JyZF9yZWFkID09PT09PT09Ci0gKiAg UHVycG9zZToKLSAqICAgICAgUmVhZCBhIGJsb2NrIG9mIERTUCBtZW1vcnksIGZyb20gYSBnaXZl biBtZW1vcnkgc3BhY2UsIGludG8gYSBob3N0Ci0gKiAgICAgIGJ1ZmZlci4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5l ZCBkZXZpY2UgaW5mby4KLSAqICAgICAgaG9zdF9idWY6ICAgICAgIFBvaW50ZXIgdG8gaG9zdCBi dWZmZXIgKERlc3RpbmF0aW9uKS4KLSAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJlc3Mgb24g RFNQIGJvYXJkIChTb3VyY2UpLgotICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2Yg Ynl0ZXMgdG8gdHJhbnNmZXIuCi0gKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ug b24gRFNQIGZyb20gd2hpY2ggdG8gdHJhbnNmZXIuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDog ICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VycmVkIHdh aXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KLSAqICAgICAgLUVQRVJNOiAgICAg IE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgZGV2X2N0 eHQgIT0gTlVMTDsKLSAqICAgICAgaG9zdF9idWYgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICog IFdpbGwgbm90IHdyaXRlIG1vcmUgdGhhbiB1bF9udW1fYnl0ZXMgYnl0ZXMgaW50byBob3N0X2J1 Zi4KLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9icmRfcmVhZCkgKHN0cnVjdCBicmlkZ2VfZGV2X2Nv bnRleHQgKmRldl9jdHh0LAotCQkJCSAgIHU4ICpob3N0X2J1ZiwKLQkJCQkgICB1MzIgZHNwX2Fk ZHIsCi0JCQkJICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKLQotLyoKLSAqICA9 PT09PT09PSBicmlkZ2VfYnJkX3dyaXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg V3JpdGUgYSBibG9jayBvZiBob3N0IG1lbW9yeSBpbnRvIGEgRFNQIGFkZHJlc3MsIGludG8gYSBn aXZlbiBtZW1vcnkKLSAqICAgICAgc3BhY2UuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGV2 X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCi0g KiAgICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoRGVzdGluYXRpb24p LgotICogICAgICBob3N0X2J1ZjogICAgICAgUG9pbnRlciB0byBob3N0IGJ1ZmZlciAoU291cmNl KS4KLSAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVy LgotICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCB0byB3aGljaCB0 byB0cmFuc2Zlci4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAq ICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25z ZSBmcm9tIGhhcmR3YXJlLgotICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVk IGVycm9yLgotICogIFJlcXVpcmVzOgotICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwotICogICAg ICBob3N0X2J1ZiAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgaW50KCpmeG5f YnJkX3dyaXRlKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCi0JCQkJICAg IHU4ICpob3N0X2J1ZiwKLQkJCQkgICAgdTMyIGRzcF9hZGRyLAotCQkJCSAgICB1MzIgdWxfbnVt X2J5dGVzLCB1MzIgbWVtX3R5cGUpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9jaG5sX2Ny ZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhIGNoYW5uZWwgbWFu YWdlciBvYmplY3QsIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIG5ldyBjaGFubmVscwotICogICAg ICBhbmQgY2xvc2luZyBvbGQgb25lcyBmb3IgYSBnaXZlbiAnQnJpZGdlIGJvYXJkLgotICogIFBh cmFtZXRlcnM6Ci0gKiAgICAgIGNoYW5uZWxfbWdyOiAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNo YW5uZWwgbWFuYWdlciBvYmplY3Qgb24gb3V0cHV0LgotICogICAgICBoZGV2X29iajogICAgIEhh bmRsZSB0byBhIGRldmljZSBvYmplY3QuCi0gKiAgICAgIG1ncl9hdHRydHM6ICAgICAgQ2hhbm5l bCBtYW5hZ2VyIGF0dHJpYnV0ZXMuCi0gKiAgICAgIG1ncl9hdHRydHMtPm1heF9jaGFubmVsczog TWF4IGNoYW5uZWxzCi0gKiAgICAgIG1ncl9hdHRydHMtPmJpcnE6ICAgICAgQ2hhbm5lbCdzIEkv TyBJUlEgbnVtYmVyLgotICogICAgICBtZ3JfYXR0cnRzLT5pcnFfc2hhcmVkOiAgIFRSVUUgaWYg dGhlIElSUSBpcyBzaGFyZWFibGUuCi0gKiAgICAgIG1ncl9hdHRydHMtPndvcmRfc2l6ZTogRFNQ IFdvcmQgc2l6ZSBpbiBlcXVpdmFsZW50IFBDIGJ5dGVzLi4KLSAqICAgICAgbWdyX2F0dHJ0cy0+ c2htX2Jhc2U6ICBCYXNlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc2hhcmVkIG1lbW9yeSwgaWYgYW55 LgotICogICAgICBtZ3JfYXR0cnRzLT5zbV9sZW5ndGg6IEJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkg YmxvY2suCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOwotICog ICAgICAtRU5PTUVNOiAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJl c291cmNlcy4KLSAqICAgICAgLUVJTzogICAgICAgICBVbmFibGUgdG8gcGx1ZyBJU1IgZm9yIGdp dmVuIElSUS4KLSAqICAgICAgLUVGQVVMVDogICAgQ291bGRuJ3QgbWFwIHBoeXNpY2FsIGFkZHJl c3MgdG8gYSB2aXJ0dWFsIG9uZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgY2hhbm5lbF9tZ3Ig IT0gTlVMTC4KLSAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMCi0gKiAgICAgIG1ncl9hdHRydHMg ZmllbGQgYXJlIGFsbCB2YWxpZDoKLSAqICAgICAgICAgIDAgPCBtYXhfY2hhbm5lbHMgPD0gQ0hO TF9NQVhDSEFOTkVMUy4KLSAqICAgICAgICAgIGJpcnEgPD0gMTUuCi0gKiAgICAgICAgICB3b3Jk X3NpemUgPiAwLgotICogICAgICBoZGV2X29iaiAhPSBOVUxMCi0gKiAgICAgIE5vIGNoYW5uZWwg bWFuYWdlciBleGlzdHMgZm9yIHRoaXMgYm9hcmQuCi0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRl ZiBpbnQoKmZ4bl9jaG5sX2NyZWF0ZSkgKHN0cnVjdCBjaG5sX21ncgotCQkJCSAgICAgICoqY2hh bm5lbF9tZ3IsCi0JCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QKLQkJCQkgICAgICAqIGhkZXZf b2JqLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdAotCQkJCSAgICAgIGNobmxfbWdyYXR0cnMgKiBt Z3JfYXR0cnRzKTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hubF9kZXN0cm95ID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHMsIGFuZCBk ZXN0cm95IHRoZSBjaGFubmVsIG1hbmFnZXIuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGNo bmxfbWdyOiAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBoY2hubF9tZ3Igd2Fz IGludmFsaWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqICAgICAgMDogQ2FuY2Vs cyBJL08gb24gZWFjaCBvcGVuIGNoYW5uZWwuIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KLSAq ICAgICAgICAgIGNobmxfY3JlYXRlIG1heSBzdWJzZXF1ZW50bHkgYmUgY2FsbGVkIGZvciB0aGUg c2FtZSBkZXZpY2UuCi0gKi8KLXR5cGVkZWYgaW50KCpmeG5fY2hubF9kZXN0cm95KSAoc3RydWN0 IGNobmxfbWdyICpoY2hubF9tZ3IpOwotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfZGVoX25vdGlm eSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFdoZW4gbm90aWZpZWQgb2YgRFNQIGVy cm9yLCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBo ZGVoX21ncjogICAgICAgIEhhbmRsZSB0byBERUggbWFuYWdlciBvYmplY3QuCi0gKiAgICAgIGV2 bnRfbWFzazogICAgSW5kaWNhdGUgdGhlIHR5cGUgb2YgZXhjZXB0aW9uCi0gKiAgICAgIGVycm9y X2luZm86ICAgIEVycm9yIGluZm9ybWF0aW9uCi0gKiAgUmV0dXJuczoKLSAqCi0gKiAgUmVxdWly ZXM6Ci0gKiAgICAgIGhkZWhfbWdyICE9IE5VTEw7Ci0gKiAgICAgZXZudF9tYXNrIHdpdGggYSB2 YWxpZCBleGNlcHRpb24KLSAqICBFbnN1cmVzOgotICovCi10eXBlZGVmIHZvaWQgKCpmeG5fZGVo X25vdGlmeSkgKHN0cnVjdCBkZWhfbWdyICpoZGVoX21nciwKLQkJCQl1MzIgZXZudF9tYXNrLCB1 MzIgZXJyb3JfaW5mbyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2Nobmxfb3BlbiA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIE9wZW4gYSBuZXcgaGFsZi1kdXBsZXggY2hhbm5l bCB0byB0aGUgRFNQIGJvYXJkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGNobmw6ICAgICAg ICAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgb2JqZWN0IGhhbmRsZS4KLSAqICAgICAg aGNobmxfbWdyOglIYW5kbGUgdG8gY2hhbm5lbCBtYW5hZ2VyLCBhcyByZXR1cm5lZCBieQotICog ICAgICAJCUNITkxfR2V0TWdyKCkuCi0gKiAgICAgIGNobmxfbW9kZTogICAgICAgICAgT25lIG9m IHtDSE5MX01PREVUT0RTUCwgQ0hOTF9NT0RFRlJPTURTUH0gc3BlY2lmaWVzCi0gKiAgICAgICAg ICAgICAgICAgICAgICBkaXJlY3Rpb24gb2YgZGF0YSB0cmFuc2Zlci4KLSAqICAgICAgY2hfaWQ6 ICAgICAgICBJZiBDSE5MX1BJQ0tGUkVFIGlzIHNwZWNpZmllZCwgdGhlIGNoYW5uZWwgbWFuYWdl ciB3aWxsCi0gKiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYSBmcmVlIGNoYW5uZWwgaWQg KGRlZmF1bHQpOwotICogICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoaXMgZmllbGQg c3BlY2lmaWVzIHRoZSBpZCBvZiB0aGUgY2hhbm5lbC4KLSAqICAgICAgcGF0dHJzOiAgICAgICAg IENoYW5uZWwgYXR0cmlidXRlcy4gIEF0dHJpYnV0ZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6Ci0g KiAgICAgIHBhdHRycy0+dWlvX3JlcXM6IFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg SS9PIHJlcXVlc3RzIHdoaWNoIGNhbgotICogICAgICAgICAgICAgICAgICAgICAgYmUgcGVuZGlu ZyBhdCBhbnkgZ2l2ZW4gdGltZS4gQWxsIHJlcXVlc3QgcGFja2V0cyBhcmUKLSAqICAgICAgICAg ICAgICAgICAgICAgIHByZWFsbG9jYXRlZCB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZC4KLSAq ICAgICAgcGF0dHJzLT5ldmVudF9vYmo6IFRoaXMgZmllbGQgYWxsb3dzIHRoZSB1c2VyIHRvIHN1 cHBseSBhbiBhdXRvIHJlc2V0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBldmVudCBvYmplY3Qg Zm9yIGNoYW5uZWwgSS9PIGNvbXBsZXRpb24gbm90aWZpY2F0aW9ucy4KLSAqICAgICAgICAgICAg ICAgICAgICAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkZXN0cm95 IHRoaXMKLSAqICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBBRlRFUiBjbG9zaW5nIHRoZSBj aGFubmVsLgotICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFubmVsIGV2ZW50IG9iamVj dCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICBDSE5MX0dl dEV2ZW50SGFuZGxlKCkuCi0gKiAgICAgIHBhdHRycy0+aFJlc2VydmVkOiBUaGUga2VybmVsIG1v ZGUgaGFuZGxlIG9mIHRoaXMgZXZlbnQgb2JqZWN0LgotICoKLSAqICBSZXR1cm5zOgotICogICAg ICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICAgICAgICAg IGhjaG5sX21nciBpcyBpbnZhbGlkLgotICogICAgICAtRU5PTUVNOiAgICAgICAgICAgIEluc3Vm ZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCi0gKiAgICAgIC1FSU5WQUw6 ICAgICAgICBJbnZhbGlkIG51bWJlciBvZiBJT1JlcXMuCi0gKiAgICAgIC1FTk9TUjogICAgTm8g ZnJlZSBjaGFubmVscyBhdmFpbGFibGUuCi0gKiAgICAgIC1FQ0hSTkc6ICAgICAgIENoYW5uZWwg SUQgaXMgb3V0IG9mIHJhbmdlLgotICogICAgICAtRUFMUkVBRFk6ICAgICAgICBDaGFubmVsIGlz IGluIHVzZS4KLSAqICAgICAgLUVJTzogICAgICAgICBObyBmcmVlIElPIHJlcXVlc3QgcGFja2V0 cyBhdmFpbGFibGUgZm9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVpbmcu Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGNobmwgIT0gTlVMTC4KLSAqICAgICAgcGF0dHJzICE9 IE5VTEwuCi0gKiAgICAgIHBhdHRycy0+ZXZlbnRfb2JqIGlzIGEgdmFsaWQgZXZlbnQgaGFuZGxl LgotICogICAgICBwYXR0cnMtPmhSZXNlcnZlZCBpcyB0aGUga2VybmVsIG1vZGUgaGFuZGxlIGZv ciBwYXR0cnMtPmV2ZW50X29iai4KLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgICAg ICAgICAqY2hubCBpcyBhIHZhbGlkIGNoYW5uZWwuCi0gKiAgICAgIGVsc2U6ICAgICAgICAgICAg ICAgICAgICpjaG5sIGlzIHNldCB0byBOVUxMIGlmIChjaG5sICE9IE5VTEwpOwotICovCi10eXBl ZGVmIGludCgqZnhuX2Nobmxfb3BlbikgKHN0cnVjdCBjaG5sX29iamVjdAotCQkJCSAgICAqKmNo bmwsCi0JCQkJICAgIHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyLAotCQkJCSAgICBzOCBjaG5s X21vZGUsCi0JCQkJICAgIHUzMiBjaF9pZCwKLQkJCQkgICAgY29uc3Qgc3RydWN0Ci0JCQkJICAg IGNobmxfYXR0ciAqIHBhdHRycyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2xv c2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBFbnN1cmVzIGFsbCBwZW5kaW5nIEkv TyBvbiB0aGlzIGNoYW5uZWwgaXMgY2FuY2VsbGVkLCBkaXNjYXJkcyBhbGwKLSAqICAgICAgcXVl dWVkIEkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbnMsIHRoZW4gZnJlZXMgdGhlIHJlc291cmNl cyBhbGxvY2F0ZWQKLSAqICAgICAgZm9yIHRoaXMgY2hhbm5lbCwgYW5kIG1ha2VzIHRoZSBjb3Jy ZXNwb25kaW5nIGxvZ2ljYWwgY2hhbm5lbCBpZAotICogICAgICBhdmFpbGFibGUgZm9yIHN1YnNl cXVlbnQgdXNlLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBI YW5kbGUgdG8gYSBjaGFubmVsIG9iamVjdC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAg ICAgU3VjY2VzczsKLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBjaG5sX29iai4KLSAqICBS ZXF1aXJlczoKLSAqICAgICAgTm8gdGhyZWFkIG11c3QgYmUgYmxvY2tlZCBvbiB0aGlzIGNoYW5u ZWwncyBJL08gY29tcGxldGlvbiBldmVudC4KLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAg ICAgY2hubF9vYmogaXMgbm8gbG9uZ2VyIHZhbGlkLgotICovCi10eXBlZGVmIGludCgqZnhuX2No bmxfY2xvc2UpIChzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqKTsKLQotLyoKLSAqICA9PT09 PT09PSBicmlkZ2VfY2hubF9hZGRfaW9fcmVxID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICAgRW5xdWV1ZSBhbiBJL08gcmVxdWVzdCBmb3IgZGF0YSB0cmFuc2ZlciBvbiBhIGNoYW5uZWwg dG8gdGhlIERTUC4KLSAqICAgICAgVGhlIGRpcmVjdGlvbiAobW9kZSkgaXMgc3BlY2lmaWVkIGlu IHRoZSBjaGFubmVsIG9iamVjdC4gTm90ZSB0aGUgRFNQCi0gKiAgICAgIGFkZHJlc3MgaXMgc3Bl Y2lmaWVkIGZvciBjaGFubmVscyBvcGVuZWQgaW4gZGlyZWN0IEkvTyBtb2RlLgotICogIFBhcmFt ZXRlcnM6Ci0gKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBoYW5kbGUu Ci0gKiAgICAgIGhvc3RfYnVmOiAgICAgICBIb3N0IGJ1ZmZlciBhZGRyZXNzIHNvdXJjZS4KLSAq ICAgICAgYnl0ZV9zaXplOglOdW1iZXIgb2YgUEMgYnl0ZXMgdG8gdHJhbnNmZXIuIEEgemVybyB2 YWx1ZSBpbmRpY2F0ZXMKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhpcyBidWZmZXIg aXMgdGhlIGxhc3QgaW4gdGhlIG91dHB1dCBjaGFubmVsLgotICogICAgICAgICAgICAgICAgICAg ICAgQSB6ZXJvIHZhbHVlIGlzIGludmFsaWQgZm9yIGFuIGlucHV0IGNoYW5uZWwuCi0gKiEgICAg IGJ1Zl9zaXplOiAgICAgICBBY3R1YWwgYnVmZmVyIHNpemUgaW4gaG9zdCBieXRlcy4KLSAqICAg ICAgZHdfZHNwX2FkZHI6ICAgICAgRFNQIGFkZHJlc3MgZm9yIHRyYW5zZmVyLiAgKEN1cnJlbnRs eSBpZ25vcmVkKS4KLSAqICAgICAgZHdfYXJnOiAgICAgICAgICBBIHVzZXIgYXJndW1lbnQgdGhh dCB0cmF2ZWxzIHdpdGggdGhlIGJ1ZmZlci4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAg ICAgU3VjY2VzczsKLSAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5sX29iaiBvciBob3N0X2J1 Zi4KLSAqICAgICAgLUVQRVJNOiAgIFVzZXIgY2Fubm90IG1hcmsgRU9TIG9uIGFuIGlucHV0IGNo YW5uZWwuCi0gKiAgICAgIC1FQ0FOQ0VMRUQ6IEkvTyBoYXMgYmVlbiBjYW5jZWxsZWQgb24gdGhp cyBjaGFubmVsLiAgTm8gZnVydGhlcgotICogICAgICAgICAgICAgICAgICAgICAgSS9PIGlzIGFs bG93ZWQuCi0gKiAgICAgIC1FUElQRTogICAgIEVuZCBvZiBzdHJlYW0gd2FzIGFscmVhZHkgbWFy a2VkIG9uIGEgcHJldmlvdXMKLSAqICAgICAgICAgICAgICAgICAgICAgIElPUmVxdWVzdCBvbiB0 aGlzIGNoYW5uZWwuICBObyBmdXJ0aGVyIEkvTyBpcyBleHBlY3RlZC4KLSAqICAgICAgLUVJTlZB TDogQnVmZmVyIHN1Ym1pdHRlZCB0byB0aGlzIG91dHB1dCBjaGFubmVsIGlzIGxhcmdlciB0aGFu Ci0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgc2hhcmVk IG1lbW9yeSBvdXRwdXQgd2luZG93LgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAg ICAgIDA6IFRoZSBidWZmZXIgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpZiB0aGUgY2hhbm5lbCBpcyBy ZWFkeTsKLSAqICAgICAgICAgIG90aGVyd2lzZSwgd2lsbCBiZSBxdWV1ZWQgZm9yIHRyYW5zZmVy IHdoZW4gdGhlIGNoYW5uZWwgYmVjb21lcwotICogICAgICAgICAgcmVhZHkuICBJbiBhbnkgY2Fz ZSwgbm90aWZpY2F0aW9ucyBvZiBJL08gY29tcGxldGlvbiBhcmUKLSAqICAgICAgICAgIGFzeW5j aHJvbm91cy4KLSAqICAgICAgICAgIElmIGJ5dGVfc2l6ZSBpcyAwIGZvciBhbiBvdXRwdXQgY2hh bm5lbCwgc3Vic2VxdWVudCBDSE5MX0FkZElPUmVxJ3MKLSAqICAgICAgICAgIG9uIHRoaXMgY2hh bm5lbCB3aWxsIGZhaWwgd2l0aCBlcnJvciBjb2RlIC1FUElQRS4gIFRoZQotICogICAgICAgICAg Y29ycmVzcG9uZGluZyBJT0MgZm9yIHRoaXMgSS9PIHJlcXVlc3Qgd2lsbCBoYXZlIGl0cyBzdGF0 dXMgZmxhZwotICogICAgICAgICAgc2V0IHRvIENITkxfSU9DU1RBVEVPUy4KLSAqLwotdHlwZWRl ZiBpbnQoKmZ4bl9jaG5sX2FkZGlvcmVxKSAoc3RydWN0IGNobmxfb2JqZWN0Ci0JCQkJCSogY2hu bF9vYmosCi0JCQkJCXZvaWQgKmhvc3RfYnVmLAotCQkJCQl1MzIgYnl0ZV9zaXplLAotCQkJCQl1 MzIgYnVmX3NpemUsCi0JCQkJCXUzMiBkd19kc3BfYWRkciwgdTMyIGR3X2FyZyk7Ci0KLS8qCi0g KiAgPT09PT09PT0gYnJpZGdlX2NobmxfZ2V0X2lvYyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgICAgIERlcXVldWUgYW4gSS9PIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqICAgICAgY29tcGxldGVkIEkvTyByZXF1ZXN0LgotICog IFBhcmFtZXRlcnM6Ci0gKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBo YW5kbGUuCi0gKiAgICAgIHRpbWVvdXQ6ICAgICAgICBBIHZhbHVlIG9mIENITkxfSU9DTk9XQUlU IHdpbGwgc2ltcGx5IGRlcXVldWUgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBh dmFpbGFibGUgSU9DLgotICogICAgICBjaGFuX2lvYzogICAgICAgT24gb3V0cHV0LCBjb250YWlu cyBob3N0IGJ1ZmZlciBhZGRyZXNzLCBieXRlcwotICogICAgICAgICAgICAgICAgICAgICAgdHJh bnNmZXJyZWQsIGFuZCBzdGF0dXMgb2YgSS9PIGNvbXBsZXRpb24uCi0gKiAgICAgIGNoYW5faW9j LT5zdGF0dXM6ICAgU2VlIGNobmxkZWZzLmguCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAg ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6IEludmFsaWQgY2hubF9vYmogb3IgY2hhbl9p b2MuCi0gKiAgICAgIC1FUkVNT1RFSU86ICAgQ0hOTF9JT0NOT1dBSVQgd2FzIHNwZWNpZmllZCBh cyB0aGUgdGltZW91dCBwYXJhbWV0ZXIKLSAqICAgICAgICAgICAgICAgICAgICAgIHlldCBubyBJ L08gY29tcGxldGlvbnMgd2VyZSBxdWV1ZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHRpbWVv dXQgPT0gQ0hOTF9JT0NOT1dBSVQuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgMDogaWYgdGhlcmUg YXJlIGFueSByZW1haW5pbmcgSU9DJ3MgcXVldWVkIGJlZm9yZSB0aGlzIGNhbGwKLSAqICAgICAg ICAgIHJldHVybnMsIHRoZSBjaGFubmVsIGV2ZW50IG9iamVjdCB3aWxsIGJlIGxlZnQgaW4gYSBz aWduYWxsZWQKLSAqICAgICAgICAgIHN0YXRlLgotICovCi10eXBlZGVmIGludCgqZnhuX2Nobmxf Z2V0aW9jKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKLQkJCQkgICAgICB1MzIgdGlt ZW91dCwKLQkJCQkgICAgICBzdHJ1Y3QgY2hubF9pb2MgKmNoYW5faW9jKTsKLQotLyoKLSAqICA9 PT09PT09PSBicmlkZ2VfY2hubF9jYW5jZWxfaW8gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBSZXR1cm4gYWxsIEkvTyByZXF1ZXN0cyB0byB0aGUgY2xpZW50IHdoaWNoIGhhdmUgbm90 IHlldCBiZWVuCi0gKiAgICAgIHRyYW5zZmVycmVkLiAgVGhlIGNoYW5uZWwncyBJL08gY29tcGxl dGlvbiBvYmplY3QgaXMKLSAqICAgICAgc2lnbmFsbGVkLCBhbmQgYWxsIHRoZSBJL08gcmVxdWVz dHMgYXJlIHF1ZXVlZCBhcyBJT0Mncywgd2l0aCB0aGUKLSAqICAgICAgc3RhdHVzIGZpZWxkIHNl dCB0byBDSE5MX0lPQ1NUQVRDQU5DRUwuCi0gKiAgICAgIFRoaXMgY2FsbCBpcyB0eXBpY2FsbHkg dXNlZCBpbiBhYm9ydCBzaXR1YXRpb25zLCBhbmQgaXMgYSBwcmVsdWRlIHRvCi0gKiAgICAgIGNo bmxfY2xvc2UoKTsKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBjaG5sX29iajogICAgICAgICAg Q2hhbm5lbCBvYmplY3QgaGFuZGxlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBT dWNjZXNzOwotICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGNobmxfb2JqLgotICogIFJlcXVp cmVzOgotICogIEVuc3VyZXM6Ci0gKiAgICAgIFN1YnNlcXVlbnQgSS9PIHJlcXVlc3RzIHRvIHRo aXMgY2hhbm5lbCB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9j aG5sX2NhbmNlbGlvKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7Ci0KLS8qCi0gKiAg PT09PT09PT0gYnJpZGdlX2NobmxfZmx1c2hfaW8gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBGb3IgYW4gb3V0cHV0IHN0cmVhbSAodG8gdGhlIERTUCksIGluZGljYXRlcyBpZiBhbnkg SU8gcmVxdWVzdHMgYXJlIGluCi0gKiAgICAgIHRoZSBvdXRwdXQgcmVxdWVzdCBxdWV1ZS4gIEZv ciBpbnB1dCBzdHJlYW1zIChmcm9tIHRoZSBEU1ApLCB3aWxsCi0gKiAgICAgIGNhbmNlbCBhbGwg cGVuZGluZyBJTyByZXF1ZXN0cy4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBjaG5sX29iajog ICAgICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KLSAqICAgICAgdGltZW91dDogICAg ICAgICAgICBUaW1lb3V0IHZhbHVlIGZvciBmbHVzaCBvcGVyYXRpb24uCi0gKiAgUmV0dXJuczoK LSAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOwotICogICAgICBTX0NITkxJT1JFUVVFU1Q6 ICAgIFJldHVybmVkIGlmIGFueSBJT1JlcXVlc3RzIGFyZSBpbiB0aGUgb3V0cHV0IHF1ZXVlLgot ICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBjaG5sX29iai4KLSAqICBSZXF1aXJlczoK LSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgICAgIE5vIEkvTyByZXF1ZXN0cyB3aWxs IGJlIHBlbmRpbmcgb24gdGhpcyBjaGFubmVsLgotICovCi10eXBlZGVmIGludCgqZnhuX2Nobmxf Zmx1c2hpbykgKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCi0JCQkJICAgICAgIHUzMiB0 aW1lb3V0KTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfaW5mbyA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8g YSBjaGFubmVsLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBI YW5kbGUgdG8gYSB2YWxpZCBjaGFubmVsIG9iamVjdCwgb3IgTlVMTC4KLSAqICAgICAgY2hhbm5l bF9pbmZvOiAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgaW5mby4KLSAqICBSZXR1cm5zOgot ICogICAgICAwOiAgICAgICAgU3VjY2VzczsKLSAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5s X29iaiBvciBjaGFubmVsX2luZm8uCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqICAg ICAgMDogICAgICAgIGNoYW5uZWxfaW5mbyBwb2ludHMgdG8gYSBmaWxsZWQgaW4gY2hubF9pbmZv IHN0cnVjdCwKLSAqICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsX2luZm8gIT0gTlVM TCkuCi0gKi8KLXR5cGVkZWYgaW50KCpmeG5fY2hubF9nZXRpbmZvKSAoc3RydWN0IGNobmxfb2Jq ZWN0ICpjaG5sX29iaiwKLQkJCQkgICAgICAgc3RydWN0IGNobmxfaW5mbyAqY2hhbm5lbF9pbmZv KTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfbWdyX2luZm8gPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRo ZSBjaGFubmVsIG1hbmFnZXIuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGNobmxfbWdyOiAg ICAgICAgICAgSGFuZGxlIHRvIGEgdmFsaWQgY2hhbm5lbCBtYW5hZ2VyLCBvciBOVUxMLgotICog ICAgICBjaF9pZDogICAgICAgICAgICBDaGFubmVsIElELgotICogICAgICBtZ3JfaW5mbzogICAg ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgbWFuYWdlciBpbmZvLgotICogIFJldHVy bnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKLSAqICAgICAgLUVGQVVMVDogSW52 YWxpZCBoY2hubF9tZ3Igb3IgbWdyX2luZm8uCi0gKiAgICAgIC1FQ0hSTkc6ICAgSW52YWxpZCBj aGFubmVsIElELgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAg ICAgICAgbWdyX2luZm8gcG9pbnRzIHRvIGEgZmlsbGVkIGluIGNobmxfbWdyaW5mbwotICogICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCwgaWYgKG1ncl9pbmZvICE9IE5VTEwpLgotICov Ci10eXBlZGVmIGludCgqZnhuX2NobmxfZ2V0bWdyaW5mbykgKHN0cnVjdCBjaG5sX21ncgotCQkJ CQkgICogaGNobmxfbWdyLAotCQkJCQkgIHUzMiBjaF9pZCwKLQkJCQkJICBzdHJ1Y3QgY2hubF9t Z3JpbmZvICptZ3JfaW5mbyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2NobmxfaWRsZSA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIElkbGUgYSBjaGFubmVsLiBJZiB0aGlzIGlz IGFuIGlucHV0IGNoYW5uZWwsIG9yIGlmIHRoaXMgaXMgYW4gb3V0cHV0Ci0gKiAgICAgIGNoYW5u ZWwgYW5kIGZsdXNoX2RhdGEgaXMgVFJVRSwgYWxsIGN1cnJlbnRseSBlbnF1ZXVlZCBidWZmZXJz IHdpbGwgYmUKLSAqICAgICAgZGVxdWV1ZWQgKGRhdGEgZGlzY2FyZGVkIGZvciBvdXRwdXQgY2hh bm5lbCkuCi0gKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IGNoYW5uZWwgYW5kIGZsdXNoX2Rh dGEgaXMgRkFMU0UsIHRoaXMgZnVuY3Rpb24KLSAqICAgICAgd2lsbCBibG9jayB1bnRpbCBhbGwg Y3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEgaXMgb3V0cHV0LCBvciB0aGUgdGltZW91dAotICogICAg ICBzcGVjaWZpZWQgaGFzIGJlZW4gcmVhY2hlZC4KLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqICAg ICAgY2hubF9vYmo6ICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KLSAqICAgICAgdGlt ZW91dDogICAgICAgIElmIG91dHB1dCBjaGFubmVsIGFuZCBmbHVzaF9kYXRhIGlzIEZBTFNFLCB0 aW1lb3V0IHZhbHVlCi0gKiAgICAgICAgICAgICAgICAgICAgICB0byB3YWl0IGZvciBidWZmZXJz IHRvIGJlIG91dHB1dC4gKE5vdCB1c2VkIGZvcgotICogICAgICAgICAgICAgICAgICAgICAgaW5w dXQgY2hhbm5lbCkuCi0gKiAgICAgIGZsdXNoX2RhdGE6ICAgICBJZiBvdXRwdXQgY2hhbm5lbCBh bmQgZmx1c2hfZGF0YSBpcyBUUlVFLCBkaXNjYXJkIGFueQotICogICAgICAgICAgICAgICAgICAg ICAgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEuIElmIEZBTFNFLCB3YWl0IGZvciBjdXJyZW50bHkK LSAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIGRhdGEgdG8gYmUgb3V0cHV0LCBvciB0 aW1lb3V0LCB3aGljaGV2ZXIKLSAqICAgICAgICAgICAgICAgICAgICAgIG9jY3VycyBmaXJzdC4g Zmx1c2hfZGF0YSBpcyBpZ25vcmVkIGZvciBpbnB1dCBjaGFubmVsLgotICogIFJldHVybnM6Ci0g KiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKLSAqICAgICAgLUVGQVVMVDogICAgICAgIElu dmFsaWQgY2hubF9vYmouCi0gKiAgICAgIC1FVElNRURPVVQ6IFRpbWVvdXQgb2NjdXJyZWQgYmVm b3JlIGNoYW5uZWwgY291bGQgYmUgaWRsZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoK LSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2lkbGUpIChzdHJ1Y3QgY2hubF9vYmplY3QgKmNo bmxfb2JqLAotCQkJCSAgICB1MzIgdGltZW91dCwgYm9vbCBmbHVzaF9kYXRhKTsKLQotLyoKLSAq ICA9PT09PT09PSBicmlkZ2VfY2hubF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KLSAqICBQdXJw b3NlOgotICogICAgICBSZWdpc3RlciBmb3Igbm90aWZpY2F0aW9uIG9mIGV2ZW50cyBvbiBhIGNo YW5uZWwuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgY2hubF9vYmo6ICAgICAgICAgIENoYW5u ZWwgb2JqZWN0IGhhbmRsZS4KLSAqICAgICAgZXZlbnRfbWFzazogICAgIFR5cGUgb2YgZXZlbnRz IHRvIGJlIG5vdGlmaWVkIGFib3V0OiBJTyBjb21wbGV0aW9uCi0gKiAgICAgICAgICAgICAgICAg ICAgICAoRFNQX1NUUkVBTUlPQ09NUExFVElPTikgb3IgZW5kIG9mIHN0cmVhbQotICogICAgICAg ICAgICAgICAgICAgICAgKERTUF9TVFJFQU1ET05FKS4KLSAqICAgICAgbm90aWZ5X3R5cGU6ICAg IERTUF9TSUdOQUxFVkVOVC4KLSAqICAgICAgaG5vdGlmaWNhdGlvbjogIEhhbmRsZSBvZiBhIGRz cF9ub3RpZmljYXRpb24gb2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBT dWNjZXNzLgotICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5LgotICogICAg ICAtRUlOVkFMOiAgICAgZXZlbnRfbWFzayBpcyAwIGFuZCBobm90aWZpY2F0aW9uIHdhcyBub3QK LSAqICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgcmVnaXN0ZXJlZC4KLSAqICAgICAg LUVGQVVMVDogICAgTlVMTCBobm90aWZpY2F0aW9uLCBobm90aWZpY2F0aW9uIGV2ZW50IG5hbWUK LSAqICAgICAgICAgICAgICAgICAgICAgIHRvbyBsb25nLCBvciBobm90aWZpY2F0aW9uIGV2ZW50 IG5hbWUgTlVMTC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgY2hubF9vYmouCi0gKiAg ICAgIGhub3RpZmljYXRpb24gIT0gTlVMTC4KLSAqICAgICAgKGV2ZW50X21hc2sgJiB+KERTUF9T VFJFQU1JT0NPTVBMRVRJT04gfCBEU1BfU1RSRUFNRE9ORSkpID09IDAuCi0gKiAgICAgIG5vdGlm eV90eXBlID09IERTUF9TSUdOQUxFVkVOVC4KLSAqICBFbnN1cmVzOgotICovCi10eXBlZGVmIGlu dCgqZnhuX2NobmxfcmVnaXN0ZXJub3RpZnkpCi0gKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9v YmosCi0gIHUzMiBldmVudF9tYXNrLCB1MzIgbm90aWZ5X3R5cGUsIHN0cnVjdCBkc3Bfbm90aWZp Y2F0aW9uICpobm90aWZpY2F0aW9uKTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfZGV2X2Ny ZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENvbXBsZXRlIGNyZWF0aW9uIG9m IHRoZSBkZXZpY2Ugb2JqZWN0IGZvciB0aGlzIGJvYXJkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGRldmljZV9jdHg6ICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgYSBCcmlkZ2UgZGV2 aWNlIGNvbnRleHQuCi0gKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGEgRGV2aWNlIE9i amVjdCwgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSBEU1AgQVBJLgotICogICAgICBjb25maWdfcGFy YW06ICAgICAgICBQdHIgdG8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRo ZQotICogICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBNYW5hZ2VyIGR1cmluZyBk ZXZpY2UgbG9hZGluZy4KLSAqICAgICAgcERzcENvbmZpZzogICAgIERTUCByZXNvdXJjZXMsIGFz IHNwZWNpZmllZCBpbiB0aGUgcmVnaXN0cnkga2V5IGZvciB0aGlzCi0gKiAgICAgICAgICAgICAg ICAgICAgICBkZXZpY2UuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNj ZXNzLgotICogICAgICAtRU5PTUVNOiAgICAgICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgZGV2aWNlIGNvbnRleHQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGRldmljZV9jdHggIT0g TlVMTDsKLSAqICAgICAgaGRldl9vYmogIT0gTlVMTDsKLSAqICAgICAgY29uZmlnX3BhcmFtICE9 IE5VTEw7Ci0gKiAgICAgIHBEc3BDb25maWcgIT0gTlVMTDsKLSAqICAgICAgRmllbGRzIGluIGNv bmZpZ19wYXJhbSBhbmQgcERzcENvbmZpZyBjb250YWluIHZhbGlkIHZhbHVlcy4KLSAqICBFbnN1 cmVzOgotICogICAgICAwOiAgICAgICAgQWxsIEJyaWRnZSBkcml2ZXIgc3BlY2lmaWMgRFNQIHJl c291cmNlIGFuZCBvdGhlcgotICogICAgICAgICAgICAgICAgICAgICAgYm9hcmQgY29udGV4dCBo YXMgYmVlbiBhbGxvY2F0ZWQuCi0gKiAgICAgIC1FTk9NRU06ICAgIEJyaWRnZSBmYWlsZWQgdG8g YWxsb2NhdGUgcmVzb3VyY2VzLgotICogICAgICAgICAgICAgICAgICAgICAgQW55IGFjcXVpcmVk IHJlc291cmNlcyBoYXZlIGJlZW4gZnJlZWQuICBUaGUgRFNQIEFQSQotICogICAgICAgICAgICAg ICAgICAgICAgd2lsbCBub3QgY2FsbCBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBpZgotICogICAgICAg ICAgICAgICAgICAgICAgYnJpZGdlX2Rldl9jcmVhdGUoKSBmYWlscy4KLSAqICBEZXRhaWxzOgot ICogICAgICBDYWxsZWQgZHVyaW5nIHRoZSBDT05GSUdNRydzIERldmljZV9Jbml0IHBoYXNlLiBC YXNlZCBvbiBob3N0IGFuZAotICogICAgICBEU1AgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwg Y3JlYXRlIGEgYm9hcmQgY29udGV4dCwgYSBoYW5kbGUgdG8KLSAqICAgICAgd2hpY2ggaXMgcGFz c2VkIGludG8gb3RoZXIgQnJpZGdlIEJSRCBhbmQgQ0hOTCBmdW5jdGlvbnMuICBUaGUKLSAqICAg ICAgYm9hcmQgY29udGV4dCBjb250YWlucyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGRldmlj ZS4gU2luY2UgdGhlCi0gKiAgICAgIGFkZHJlc3NlcyBvZiBhbGwgcG9pbnRlciBwYXJhbWV0ZXJz IG1heSBiZSBpbnZhbGlkIHdoZW4gdGhpcwotICogICAgICBmdW5jdGlvbiByZXR1cm5zLCB0aGV5 IG11c3Qgbm90IGJlIHN0b3JlZCBpbnRvIHRoZSBkZXZpY2UgY29udGV4dAotICogICAgICBzdHJ1 Y3R1cmUuCi0gKi8KLXR5cGVkZWYgaW50KCpmeG5fZGV2X2NyZWF0ZSkgKHN0cnVjdCBicmlkZ2Vf ZGV2X2NvbnRleHQKLQkJCQkgICAgICoqZGV2aWNlX2N0eCwKLQkJCQkgICAgIHN0cnVjdCBkZXZf b2JqZWN0Ci0JCQkJICAgICAqIGhkZXZfb2JqLAotCQkJCSAgICAgc3RydWN0IGNmZ19ob3N0cmVz Ci0JCQkJICAgICAqIGNvbmZpZ19wYXJhbSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2Rl dl9jdHJsID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQnJpZGdlIGRyaXZlciBzcGVj aWZpYyBpbnRlcmZhY2UuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZGV2X2N0eHQ6ICAgIEhh bmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCi0gKiAgICAgIGR3X2Nt ZDogICAgICAgICAgQnJpZGdlIGRyaXZlciBkZWZpbmVkIGNvbW1hbmQgY29kZS4KLSAqICAgICAg cGFyZ3M6ICAgICAgICAgIFBvaW50ZXIgdG8gYW4gYXJiaXRyYXJ5IGFyZ3VtZW50IHN0cnVjdHVy ZS4KLSAqICBSZXR1cm5zOgotICogICAgICAwIG9yIC1FUEVSTS4gQWN0dWFsIGNvbW1hbmQgZXJy b3IgY29kZXMgc2hvdWxkIGJlIHBhc3NlZCBiYWNrIGluCi0gKiAgICAgIHRoZSBwYXJncyBzdHJ1 Y3R1cmUsIGFuZCBhcmUgZGVmaW5lZCBieSB0aGUgQnJpZGdlIGRyaXZlciBpbXBsZW1lbnRvci4K LSAqICBSZXF1aXJlczoKLSAqICAgICAgQWxsIGNhbGxzIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0 byBiZSBzeW5jaHJvbm91cy4gIFRoZXJlIGFyZSBubwotICogICAgICBJT0NUTCBjb21wbGV0aW9u IHJvdXRpbmVzIHByb3ZpZGVkLgotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgaW50KCpmeG5f ZGV2X2N0cmwpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKLQkJCQkgICB1 MzIgZHdfY21kLCB2b2lkICpwYXJncyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX2Rldl9k ZXN0cm95ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRGVhbGxvY2F0ZSBCcmlkZ2Ug ZGV2aWNlIGV4dGVuc2lvbiBzdHJ1Y3R1cmVzIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzCi0gKiAg ICAgIGFjcXVpcmVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyLgotICogICAgICBObyBjYWxscyB0byBv dGhlciBCcmlkZ2UgZHJpdmVyIGZ1bmN0aW9ucyBtYXkgc3Vic2VxdWVudGx5Ci0gKiAgICAgIG9j Y3VyLCBleGNlcHQgZm9yIGJyaWRnZV9kZXZfY3JlYXRlKCkuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNl IGluZm9ybWF0aW9uLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgot ICogICAgICAtRVBFUk06ICAgICAgRmFpbGVkIHRvIHJlbGVhc2UgYSByZXNvdXJjZSBwcmV2aW91 c2x5IGFjcXVpcmVkLgotICogIFJlcXVpcmVzOgotICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwot ICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6IERldmljZSBjb250ZXh0IGlzIGZyZWVkLgotICovCi10 eXBlZGVmIGludCgqZnhuX2Rldl9kZXN0cm95KSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAq ZGV2X2N0eHQpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9pb19jcmVhdGUgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgbWFuYWdlcyBJL08g YmV0d2VlbiBDSE5MIGFuZCBtc2dfY3RybC4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBpb19t YW46ICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgSU8gbWFuYWdlciBvbiBvdXRwdXQuCi0gKiAg ICAgIGhjaG5sX21ncjogICAgICAgSGFuZGxlIHRvIGNoYW5uZWwgbWFuYWdlci4KLSAqICAgICAg aG1zZ19tZ3I6ICAgICAgICBIYW5kbGUgdG8gbWVzc2FnZSBtYW5hZ2VyLgotICogIFJldHVybnM6 Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRU5PTUVNOiAgICBNZW1vcnkg YWxsb2NhdGlvbiBmYWlsdXJlLgotICogICAgICAtRVBFUk06ICAgICAgQ3JlYXRpb24gZmFpbGVk LgotICogIFJlcXVpcmVzOgotICogICAgICBoZGV2X29iaiAhPSBOVUxMOwotICogICAgICBDaGFu bmVsIG1hbmFnZXIgYWxyZWFkeSBjcmVhdGVkOwotICogICAgICBNZXNzYWdlIG1hbmFnZXIgYWxy ZWFkeSBjcmVhdGVkOwotICogICAgICBtZ3JfYXR0cnRzICE9IE5VTEw7Ci0gKiAgICAgIGlvX21h biAhPSBOVUxMOwotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgaW50KCpmeG5faW9fY3JlYXRl KSAoc3RydWN0IGlvX21nciAqKmlvX21hbiwKLQkJCQkgICAgc3RydWN0IGRldl9vYmplY3QgKmhk ZXZfb2JqLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW9fYXR0cnMgKm1ncl9hdHRydHMpOwotCi0v KgotICogID09PT09PT09IGJyaWRnZV9pb19kZXN0cm95ID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgRGVzdHJveSBvYmplY3QgY3JlYXRlZCBpbiBicmlkZ2VfaW9fY3JlYXRlLgotICog IFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSU8gTWFuYWdlci4KLSAqICBS ZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVOT01FTTogICAg TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KLSAqICAgICAgLUVQRVJNOiAgICAgIENyZWF0aW9u IGZhaWxlZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgaGlvX21ncjsKLSAqICBFbnN1 cmVzOgotICovCi10eXBlZGVmIGludCgqZnhuX2lvX2Rlc3Ryb3kpIChzdHJ1Y3QgaW9fbWdyICpo aW9fbWdyKTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfaW9fb25fbG9hZGVkID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ2FsbGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsb2Fk ZWQgdG8gdXBkYXRlIGludGVybmFsIGRhdGEuIEZvcgotICogICAgICBleGFtcGxlLCBpZiBzaGFy ZWQgbWVtb3J5IGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gd291bGQgdXBkYXRlIHRoZQotICogICAg ICBzaGFyZWQgbWVtb3J5IGxvY2F0aW9uIGFuZCBhZGRyZXNzLgotICogIFBhcmFtZXRlcnM6Ci0g KiAgICAgIGhpb19tZ3I6ICAgICBJTyBNYW5hZ2VyLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6 ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FUEVSTTogIEludGVybmFsIGZhaWx1cmUgb2NjdXJyZWQu Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlkIGhpb19tZ3I7Ci0gKiAgRW5zdXJlczoKLSAq LwotdHlwZWRlZiBpbnQoKmZ4bl9pb19vbmxvYWRlZCkgKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3Ip OwotCi0vKgotICogID09PT09PT09IGZ4bl9pb19nZXRwcm9jbG9hZCA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIENhbGxlZCB0byBnZXQgdGhlIFByb2Nlc3NvcidzIGN1cnJlbnQgYW5k IHByZWRpY3RlZCBsb2FkCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGlvX21ncjogICAgIElP IE1hbmFnZXIuCi0gKiAgICAgIHByb2NfbG9hZF9zdGF0ICAgUHJvY2Vzc29yIExvYWQgc3RhdGlz dGljcwotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FUEVS TTogIEludGVybmFsIGZhaWx1cmUgb2NjdXJyZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZh bGlkIGhpb19tZ3I7Ci0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKmZ4bl9pb19nZXRw cm9jbG9hZCkgKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCi0JCQkJCSBzdHJ1Y3QgZHNwX3Byb2Ns b2Fkc3RhdCAqCi0JCQkJCSBwcm9jX2xvYWRfc3RhdCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJp ZGdlX21zZ19jcmVhdGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDcmVhdGUgYW4g b2JqZWN0IHRvIG1hbmFnZSBtZXNzYWdlIHF1ZXVlcy4gT25seSBvbmUgb2YgdGhlc2Ugb2JqZWN0 cwotICogICAgICBjYW4gZXhpc3QgcGVyIGRldmljZSBvYmplY3QuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgbXNnX21hbjogICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtc2dfY3RybCBt YW5hZ2VyIG9uIG91dHB1dC4KLSAqICAgICAgaGRldl9vYmo6ICAgICAgICAgSGFuZGxlIHRvIGEg ZGV2aWNlIG9iamVjdC4KLSAqICAgICAgbXNnX2NhbGxiYWNrOiAgICAgICAgQ2FsbGVkIHdoZW5l dmVyIGFuIFJNU19FWElUIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCi0gKiAgUmV0dXJuczoKLSAqICAg ICAgMDogICAgICAgICAgICBTdWNjZXNzLgotICogICAgICAtRU5PTUVNOiAgICAgICAgSW5zdWZm aWNpZW50IG1lbW9yeS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgbXNnX21hbiAhPSBOVUxMLgot ICogICAgICBtc2dfY2FsbGJhY2sgIT0gTlVMTC4KLSAqICAgICAgaGRldl9vYmogIT0gTlVMTC4K LSAqICBFbnN1cmVzOgotICovCi10eXBlZGVmIGludCgqZnhuX21zZ19jcmVhdGUpCi0gKHN0cnVj dCBtc2dfbWdyICoqbXNnX21hbiwKLSAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLCBtc2df b25leGl0IG1zZ19jYWxsYmFjayk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX21zZ19jcmVh dGVfcXVldWUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDcmVhdGUgYSBtc2dfY3Ry bCBxdWV1ZSBmb3Igc2VuZGluZyBvciByZWNlaXZpbmcgbWVzc2FnZXMgZnJvbSBhIE1lc3NhZ2UK LSAqICAgICAgbm9kZSBvbiB0aGUgRFNQLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhtc2df bWdyOiAgICAgICAgICAgIG1zZ19jdHJsIHF1ZXVlIG1hbmFnZXIgaGFuZGxlIHJldHVybmVkIGZy b20KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VfbXNnX2NyZWF0ZS4KLSAqICAg ICAgbXNncTogICAgICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtc2dfY3RybCBxdWV1ZSBv biBvdXRwdXQuCi0gKiAgICAgIG1zZ3FfaWQ6CSAgICBJZGVudGlmaWVyIGZvciBtZXNzYWdlcyAo bm9kZSBlbnZpcm9ubWVudCBwb2ludGVyKS4KLSAqICAgICAgbWF4X21zZ3M6ICAgICAgICAgICBN YXggbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBtZXNzYWdlcyBmb3IgdGhlIG5vZGUuCi0gKiAgICAg IGg6ICAgICAgICAgICAgICAgICAgSGFuZGxlIHBhc3NlZCB0byBobXNnX21nci0+bXNnX2NhbGxi YWNrKCkuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgotICog ICAgICAtRU5PTUVNOiAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeS4KLSAqICBSZXF1aXJlczoK LSAqICAgICAgbXNncSAhPSBOVUxMLgotICogICAgICBoICE9IE5VTEwuCi0gKiAgICAgIG1heF9t c2dzID4gMC4KLSAqICBFbnN1cmVzOgotICogICAgICBtc2dxICE9TlVMTCA8PT0+IDAuCi0gKi8K LXR5cGVkZWYgaW50KCpmeG5fbXNnX2NyZWF0ZXF1ZXVlKQotIChzdHJ1Y3QgbXNnX21nciAqaG1z Z19tZ3IsCi0gIHN0cnVjdCBtc2dfcXVldWUgKiptc2dxLCB1MzIgbXNncV9pZCwgdTMyIG1heF9t c2dzLCB2b2lkICpoKTsKLQotLyoKLSAqICA9PT09PT09PSBicmlkZ2VfbXNnX2RlbGV0ZSA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIERlbGV0ZSBhIG1zZ19jdHJsIG1hbmFnZXIgYWxs b2NhdGVkIGluIGJyaWRnZV9tc2dfY3JlYXRlKCkuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAg aG1zZ19tZ3I6ICAgIEhhbmRsZSByZXR1cm5lZCBmcm9tIGJyaWRnZV9tc2dfY3JlYXRlKCkuCi0g KiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgaG1zZ19tZ3IuCi0gKiAg RW5zdXJlczoKLSAqLwotdHlwZWRlZiB2b2lkICgqZnhuX21zZ19kZWxldGUpIChzdHJ1Y3QgbXNn X21nciAqaG1zZ19tZ3IpOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9tc2dfZGVsZXRlX3F1 ZXVlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgcXVl dWUgYWxsb2NhdGVkIGluIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIG1zZ19xdWV1ZV9vYmo6ICBIYW5kbGUgdG8gbXNnX2N0cmwgcXVldWUgcmV0dXJu ZWQgZnJvbQotICogICAgICAgICAgICAgICAgICBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZS4KLSAq ICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxpZCBtc2dfcXVldWVfb2JqLgot ICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgdm9pZCAoKmZ4bl9tc2dfZGVsZXRlcXVldWUpIChz dHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqKTsKLQotLyoKLSAqICA9PT09PT09PSBicmlk Z2VfbXNnX2dldCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEdldCBhIG1lc3NhZ2Ug ZnJvbSBhIG1zZ19jdHJsIHF1ZXVlLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIG1zZ19xdWV1 ZV9vYmo6ICAgICBIYW5kbGUgdG8gbXNnX2N0cmwgcXVldWUgcmV0dXJuZWQgZnJvbQotICogICAg ICAgICAgICAgICAgICAgICBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZS4KLSAqICAgICAgcG1zZzog ICAgICAgICAgTG9jYXRpb24gdG8gY29weSBtZXNzYWdlIGludG8uCi0gKiAgICAgIHV0aW1lb3V0 OiAgICAgIFRpbWVvdXQgdG8gd2FpdCBmb3IgYSBtZXNzYWdlLgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRTogIFRpbWVvdXQgb2NjdXJyZWQu Ci0gKiAgICAgIC1FUEVSTTogICAgIE5vIGZyYW1lcyBhdmFpbGFibGUgZm9yIG1lc3NhZ2UgKG1h eF9tc2dzIHRvbwotICogICAgICAgICAgICAgICAgICAgICBzbWFsbCkuCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCi0gKiAgICAgIHBtc2cgIT0gTlVMTC4KLSAq ICBFbnN1cmVzOgotICovCi10eXBlZGVmIGludCgqZnhuX21zZ19nZXQpIChzdHJ1Y3QgbXNnX3F1 ZXVlICptc2dfcXVldWVfb2JqLAotCQkJCSAgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGlt ZW91dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJpZGdlX21zZ19wdXQgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBQdXQgYSBtZXNzYWdlIG9udG8gYSBtc2dfY3RybCBxdWV1ZS4KLSAq ICBQYXJhbWV0ZXJzOgotICogICAgICBtc2dfcXVldWVfb2JqOiAgICAgIEhhbmRsZSB0byBtc2df Y3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICBicmlkZ2Vf bXNnX2NyZWF0ZV9xdWV1ZS4KLSAqICAgICAgcG1zZzogICAgICAgICAgIFBvaW50ZXIgdG8gbWVz c2FnZS4KLSAqICAgICAgdXRpbWVvdXQ6ICAgICAgIFRpbWVvdXQgdG8gd2FpdCBmb3IgYSBtZXNz YWdlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAt RVRJTUU6ICAgVGltZW91dCBvY2N1cnJlZC4KLSAqICAgICAgLUVQRVJNOiAgICAgIE5vIGZyYW1l cyBhdmFpbGFibGUgZm9yIG1lc3NhZ2UgKG1heF9tc2dzIHRvbwotICogICAgICAgICAgICAgICAg ICAgICAgc21hbGwpLgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxpZCBtc2dfcXVldWVfb2Jq LgotICogICAgICBwbXNnICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQo KmZ4bl9tc2dfcHV0KSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKLQkJCQkgIGNv bnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpOwotCi0vKgotICogID09PT09 PT09IGJyaWRnZV9tc2dfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAq ICAgICAgUmVnaXN0ZXIgbm90aWZpY2F0aW9uIGZvciB3aGVuIGEgbWVzc2FnZSBpcyByZWFkeS4K LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBtc2dfcXVldWVfb2JqOiAgICAgIEhhbmRsZSB0byBt c2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICBicmlk Z2VfbXNnX2NyZWF0ZV9xdWV1ZS4KLSAqICAgICAgZXZlbnRfbWFzazogICAgIFR5cGUgb2YgZXZl bnRzIHRvIGJlIG5vdGlmaWVkIGFib3V0OiBNdXN0IGJlCi0gKiAgICAgICAgICAgICAgICAgICAg ICBEU1BfTk9ERU1FU1NBR0VSRUFEWSwgb3IgMCB0byB1bnJlZ2lzdGVyLgotICogICAgICBub3Rp ZnlfdHlwZTogICAgRFNQX1NJR05BTEVWRU5ULgotICogICAgICBobm90aWZpY2F0aW9uOiAgSGFu ZGxlIG9mIG5vdGlmaWNhdGlvbiBvYmplY3QuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAg ICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCi0gKiAgICAgIGhub3Rp ZmljYXRpb24gIT0gTlVMTC4KLSAqICAgICAgbm90aWZ5X3R5cGUgPT0gRFNQX1NJR05BTEVWRU5U LgotICogICAgICBldmVudF9tYXNrID09IERTUF9OT0RFTUVTU0FHRVJFQURZIHx8IGV2ZW50X21h c2sgPT0gMC4KLSAqICBFbnN1cmVzOgotICovCi10eXBlZGVmIGludCgqZnhuX21zZ19yZWdpc3Rl cm5vdGlmeSkKLSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKLSAgdTMyIGV2ZW50 X21hc2ssIHUzMiBub3RpZnlfdHlwZSwgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmlj YXRpb24pOwotCi0vKgotICogID09PT09PT09IGJyaWRnZV9tc2dfc2V0X3F1ZXVlX2lkID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2V0IG1lc3NhZ2UgcXVldWUgaWQgdG8gbm9kZSBl bnZpcm9ubWVudC4gQWxsb3dzIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlCi0gKiAgICAgIHRvIGJl IGNhbGxlZCBpbiBub2RlX2FsbG9jYXRlLCBiZWZvcmUgdGhlIG5vZGUgZW52aXJvbm1lbnQgaXMg a25vd24uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgbXNnX3F1ZXVlX29iajogIEhhbmRsZSB0 byBtc2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCi0gKiAgICAgICAgICAgICAgICAgIGJyaWRn ZV9tc2dfY3JlYXRlX3F1ZXVlLgotICogICAgICBtc2dxX2lkOiAgICAgICBOb2RlIGVudmlyb25t ZW50IHBvaW50ZXIuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQg bXNnX3F1ZXVlX29iai4KLSAqICAgICAgbXNncV9pZCAhPSAwLgotICogIEVuc3VyZXM6Ci0gKi8K LXR5cGVkZWYgdm9pZCAoKmZ4bl9tc2dfc2V0cXVldWVpZCkgKHN0cnVjdCBtc2dfcXVldWUgKm1z Z19xdWV1ZV9vYmosCi0JCQkJICAgIHUzMiBtc2dxX2lkKTsKLQotLyoKLSAqICBCcmlkZ2UgRHJp dmVyIGludGVyZmFjZSBmdW5jdGlvbiB0YWJsZS4KLSAqCi0gKiAgVGhlIGluZm9ybWF0aW9uIGlu IHRoaXMgdGFibGUgaXMgZmlsbGVkIGluIGJ5IHRoZSBzcGVjaWZpYyBCcmlkZ2UgZHJpdmVyLAot ICogIGFuZCBjb3BpZWQgaW50byB0aGUgRFNQIEFQSSdzIG93biBzcGFjZS4gIElmIGFueSBpbnRl cmZhY2UKLSAqICBmdW5jdGlvbiBmaWVsZCBpcyBzZXQgdG8gYSB2YWx1ZSBvZiBOVUxMLCB0aGVu IHRoZSBEU1AgQVBJIHdpbGwKLSAqICBjb25zaWRlciB0aGF0IGZ1bmN0aW9uIG5vdCBpbXBsZW1l bnRlZCwgYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZQotICogIC1FTk9TWVMgd2hlbiBhIEJyaWRn ZSBkcml2ZXIgY2xpZW50IGF0dGVtcHRzIHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4KLSAqCi0gKiAg VGhpcyBmdW5jdGlvbiB0YWJsZSBjb250YWlucyBEU1AgQVBJIHZlcnNpb24gbnVtYmVycywgd2hp Y2ggYXJlIHVzZWQgYnkgdGhlCi0gKiAgQnJpZGdlIGRyaXZlciBsb2FkZXIgdG8gaGVscCBlbnN1 cmUgYmFja3dhcmRzIGNvbXBhdGlsaXR5IGJldHdlZW4gb2xkZXIKLSAqICBCcmlkZ2UgZHJpdmVy cyBhbmQgbmV3ZXIgRFNQIEFQSS4gIFRoZXNlIG11c3QgYmUgc2V0IHRvCi0gKiAgQlJEX0FQSV9N QUpPUl9WRVJTSU9OIGFuZCBCUkRfQVBJX01JTk9SX1ZFUlNJT04sIHJlc3BlY3RpdmVseS4KLSAq Ci0gKiAgQSBCcmlkZ2UgZHJpdmVyIG5lZWQgbm90IGV4cG9ydCBhIENITkwgaW50ZXJmYWNlLiAg SW4gdGhpcyBjYXNlLCAqYWxsKiBvZgotICogIHRoZSBicmlkZ2VfY2hubF8qIGVudHJpZXMgbXVz dCBiZSBzZXQgdG8gTlVMTC4KLSAqLwotc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlIHsKLQl1 MzIgYnJkX2FwaV9tYWpvcl92ZXJzaW9uOwkvKiBTZXQgdG8gQlJEX0FQSV9NQUpPUl9WRVJTSU9O LiAqLwotCXUzMiBicmRfYXBpX21pbm9yX3ZlcnNpb247CS8qIFNldCB0byBCUkRfQVBJX01JTk9S X1ZFUlNJT04uICovCi0JZnhuX2Rldl9jcmVhdGUgZGV2X2NyZWF0ZTsJLyogQ3JlYXRlIGRldmlj ZSBjb250ZXh0ICovCi0JZnhuX2Rldl9kZXN0cm95IGRldl9kZXN0cm95OwkvKiBEZXN0cm95IGRl dmljZSBjb250ZXh0ICovCi0JZnhuX2Rldl9jdHJsIGRldl9jbnRybDsJLyogT3B0aW9uYWwgdmVu ZG9yIGludGVyZmFjZSAqLwotCWZ4bl9icmRfbW9uaXRvciBicmRfbW9uaXRvcjsJLyogTG9hZCBh bmQvb3Igc3RhcnQgbW9uaXRvciAqLwotCWZ4bl9icmRfc3RhcnQgYnJkX3N0YXJ0OwkvKiBTdGFy dCBEU1AgcHJvZ3JhbS4gKi8KLQlmeG5fYnJkX3N0b3AgYnJkX3N0b3A7CS8qIFN0b3AvcmVzZXQg Ym9hcmQuICovCi0JZnhuX2JyZF9zdGF0dXMgYnJkX3N0YXR1czsJLyogR2V0IGN1cnJlbnQgYm9h cmQgc3RhdHVzLiAqLwotCWZ4bl9icmRfcmVhZCBicmRfcmVhZDsJLyogUmVhZCBib2FyZCBtZW1v cnkgKi8KLQlmeG5fYnJkX3dyaXRlIGJyZF93cml0ZTsJLyogV3JpdGUgYm9hcmQgbWVtb3J5LiAq LwotCWZ4bl9icmRfc2V0c3RhdGUgYnJkX3NldF9zdGF0ZTsJLyogU2V0cyB0aGUgQm9hcmQgU3Rh dGUgKi8KLQlmeG5fYnJkX21lbWNvcHkgYnJkX21lbV9jb3B5OwkvKiBDb3BpZXMgRFNQIE1lbW9y eSAqLwotCWZ4bl9icmRfbWVtd3JpdGUgYnJkX21lbV93cml0ZTsJLyogV3JpdGUgRFNQIE1lbW9y eSB3L28gaGFsdCAqLwotCWZ4bl9icmRfbWVtbWFwIGJyZF9tZW1fbWFwOwkvKiBNYXBzIE1QVSBt ZW0gdG8gRFNQIG1lbSAqLwotCWZ4bl9icmRfbWVtdW5tYXAgYnJkX21lbV91bl9tYXA7CS8qIFVu bWFwcyBNUFUgbWVtIHRvIERTUCBtZW0gKi8KLQlmeG5fY2hubF9jcmVhdGUgY2hubF9jcmVhdGU7 CS8qIENyZWF0ZSBjaGFubmVsIG1hbmFnZXIuICovCi0JZnhuX2NobmxfZGVzdHJveSBjaG5sX2Rl c3Ryb3k7CS8qIERlc3Ryb3kgY2hhbm5lbCBtYW5hZ2VyLiAqLwotCWZ4bl9jaG5sX29wZW4gY2hu bF9vcGVuOwkvKiBDcmVhdGUgYSBuZXcgY2hhbm5lbC4gKi8KLQlmeG5fY2hubF9jbG9zZSBjaG5s X2Nsb3NlOwkvKiBDbG9zZSBhIGNoYW5uZWwuICovCi0JZnhuX2NobmxfYWRkaW9yZXEgY2hubF9h ZGRfaW9fcmVxOwkvKiBSZXEgSS9PIG9uIGEgY2hhbm5lbC4gKi8KLQlmeG5fY2hubF9nZXRpb2Mg Y2hubF9nZXRfaW9jOwkvKiBXYWl0IGZvciBJL08gY29tcGxldGlvbi4gKi8KLQlmeG5fY2hubF9j YW5jZWxpbyBjaG5sX2NhbmNlbF9pbzsJLyogQ2FuY2wgSS9PIG9uIGEgY2hhbm5lbC4gKi8KLQlm eG5fY2hubF9mbHVzaGlvIGNobmxfZmx1c2hfaW87CS8qIEZsdXNoIEkvTy4gKi8KLQlmeG5fY2hu bF9nZXRpbmZvIGNobmxfZ2V0X2luZm87CS8qIEdldCBjaGFubmVsIHNwZWNpZmljIGluZm8gKi8K LQkvKiBHZXQgY2hhbm5lbCBtYW5hZ2VyIGluZm8uICovCi0JZnhuX2NobmxfZ2V0bWdyaW5mbyBj aG5sX2dldF9tZ3JfaW5mbzsKLQlmeG5fY2hubF9pZGxlIGNobmxfaWRsZTsJLyogSWRsZSB0aGUg Y2hhbm5lbCAqLwotCS8qIFJlZ2lzdGVyIGZvciBub3RpZi4gKi8KLQlmeG5fY2hubF9yZWdpc3Rl cm5vdGlmeSBjaG5sX3JlZ2lzdGVyX25vdGlmeTsKLQlmeG5faW9fY3JlYXRlIGlvX2NyZWF0ZTsJ LyogQ3JlYXRlIElPIG1hbmFnZXIgKi8KLQlmeG5faW9fZGVzdHJveSBpb19kZXN0cm95OwkvKiBE ZXN0cm95IElPIG1hbmFnZXIgKi8KLQlmeG5faW9fb25sb2FkZWQgaW9fb25fbG9hZGVkOwkvKiBO b3RpZnkgb2YgcHJvZ3JhbSBsb2FkZWQgKi8KLQkvKiBHZXQgUHJvY2Vzc29yJ3MgY3VycmVudCBh bmQgcHJlZGljdGVkIGxvYWQgKi8KLQlmeG5faW9fZ2V0cHJvY2xvYWQgaW9fZ2V0X3Byb2NfbG9h ZDsKLQlmeG5fbXNnX2NyZWF0ZSBtc2dfY3JlYXRlOwkvKiBDcmVhdGUgbWVzc2FnZSBtYW5hZ2Vy ICovCi0JLyogQ3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KLQlmeG5fbXNnX2NyZWF0ZXF1ZXVlIG1z Z19jcmVhdGVfcXVldWU7Ci0JZnhuX21zZ19kZWxldGUgbXNnX2RlbGV0ZTsJLyogRGVsZXRlIG1l c3NhZ2UgbWFuYWdlciAqLwotCS8qIERlbGV0ZSBtZXNzYWdlIHF1ZXVlICovCi0JZnhuX21zZ19k ZWxldGVxdWV1ZSBtc2dfZGVsZXRlX3F1ZXVlOwotCWZ4bl9tc2dfZ2V0IG1zZ19nZXQ7CS8qIEdl dCBhIG1lc3NhZ2UgKi8KLQlmeG5fbXNnX3B1dCBtc2dfcHV0OwkvKiBTZW5kIGEgbWVzc2FnZSAq LwotCS8qIFJlZ2lzdGVyIGZvciBub3RpZi4gKi8KLQlmeG5fbXNnX3JlZ2lzdGVybm90aWZ5IG1z Z19yZWdpc3Rlcl9ub3RpZnk7Ci0JLyogU2V0IG1lc3NhZ2UgcXVldWUgaWQgKi8KLQlmeG5fbXNn X3NldHF1ZXVlaWQgbXNnX3NldF9xdWV1ZV9pZDsKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gYnJp ZGdlX2Rydl9lbnRyeSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlZ2lzdGVycyBC cmlkZ2UgZHJpdmVyIGZ1bmN0aW9ucyB3aXRoIHRoZSBEU1AgQVBJLiBDYWxsZWQgb25seSBvbmNl Ci0gKiAgICAgIGJ5IHRoZSBEU1AgQVBJLiAgVGhlIGNhbGxlciB3aWxsIGZpcnN0IGNoZWNrIERT UCBBUEkgdmVyc2lvbgotICogICAgICBjb21wYXRpYmlsaXR5LCBhbmQgdGhlbiBjb3B5IHRoZSBp bnRlcmZhY2UgZnVuY3Rpb25zIGludG8gaXRzIG93bgotICogICAgICBtZW1vcnkgc3BhY2UuCi0g KiAgUGFyYW1ldGVyczoKLSAqICAgICAgZHJ2X2ludGYgIFBvaW50ZXIgdG8gYSBsb2NhdGlvbiB0 byByZWNlaXZlIGEgcG9pbnRlciB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgIEJyaWRn ZSBkcml2ZXIgaW50ZXJmYWNlLgotICogIFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAg IFRoZSBjb2RlIHNlZ21lbnQgdGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIG11c3QgZXhwZWN0IHRv IGJlIGRpc2NhcmRlZAotICogICAgICBhZnRlciBjb21wbGV0aW9uLgotICogIEVuc3VyZXM6Ci0g KiAgICAgIGRydl9pbnRmIHBvaW50ZXIgaW5pdGlhbGl6ZWQgdG8gQnJpZGdlIGRyaXZlcidzIGZ1 bmN0aW9uCi0gKiAgICAgIGludGVyZmFjZS4gTm8gc3lzdGVtIHJlc291cmNlcyBhcmUgYWNxdWly ZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAqICBEZXRhaWxzOgotICogICAgICBDYWxsZWQgZHVyaW5n IHRoZSBEZXZpY2VfSW5pdCBwaGFzZS4KLSAqLwotdm9pZCBicmlkZ2VfZHJ2X2VudHJ5KHN0cnVj dCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKmRydl9pbnRmLAotCQkgICBjb25zdCBjaGFyICpkcml2 ZXJfZmlsZV9uYW1lKTsKLQotI2VuZGlmIC8qIERTUERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVoLmggYi9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVoLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNThhYjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlaC5oCisrKyAvZGV2L251 bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIGRzcGRlaC5oCi0gKgotICogRFNQLUJJT1MgQnJp ZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoK LSAqIERlZmluZXMgdXBwZXIgZWRnZSBERUggZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IGFsbCBCcmlk Z2UgZHJpdmVyL0RTUCBBUEkKLSAqIGludGVyZmFjZSB0YWJsZXMuCi0gKgotICogTm90ZXM6Ci0g KiAgIEZ1bmN0aW9uIGNvbW1lbnQgaGVhZGVycyByZXNpZGUgd2l0aCB0aGUgZnVuY3Rpb24gdHlw ZWRlZnMgaW4gZHNwZGVmcy5oLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVsaXBlIENvbnRyZXJh cwotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVE IGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4KLSAqLwotCi0jaWZuZGVmIERTUERFSF8KLSNkZWZpbmUgRFNQREVIXwotCi1zdHJ1Y3Qg ZGVoX21ncjsKLXN0cnVjdCBkZXZfb2JqZWN0Owotc3RydWN0IGRzcF9ub3RpZmljYXRpb247Ci0K LWludCBicmlkZ2VfZGVoX2NyZWF0ZShzdHJ1Y3QgZGVoX21nciAqKnJldF9kZWgsCi0JCXN0cnVj dCBkZXZfb2JqZWN0ICpoZGV2X29iaik7Ci0KLWludCBicmlkZ2VfZGVoX2Rlc3Ryb3koc3RydWN0 IGRlaF9tZ3IgKmRlaCk7Ci0KLWludCBicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3Qg ZGVoX21nciAqZGVoLAotCQl1MzIgZXZlbnRfbWFzaywKLQkJdTMyIG5vdGlmeV90eXBlLAotCQlz dHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbik7Ci0KLXZvaWQgYnJpZGdlX2Rl aF9ub3RpZnkoc3RydWN0IGRlaF9tZ3IgKmRlaCwgaW50IGV2ZW50LCBpbnQgaW5mbyk7Ci0KLSNl bmRpZiAvKiBEU1BERUhfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDdhZGYxZTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL2RzcGRydi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAot LyoKLSAqIGRzcGRydi5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1 bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIFRoaXMgaXMgdGhlIFN0cmVh bSBJbnRlcmZhY2UgZm9yIHRoZSBEU3AgQVBJLgotICogQWxsIERldmljZSBvcGVyYXRpb25zIGFy ZSBwZXJmb3JtZWQgdmlhIERldmljZUlPQ29udHJvbC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw MDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkg RVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElN SVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWYgIWRlZmluZWQg X0RTUERSVl9IXwotI2RlZmluZSBfRFNQRFJWX0hfCi0KLS8qCi0gKiAgPT09PT09PT0gZHNwX2Rl aW5pdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGJ5IERldmljZSBNYW5hZ2VyIHRvIGRlLWluaXRpYWxpemUgYSBkZXZpY2UuCi0gKiAgICAg IFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBieSBhcHBsaWNhdGlvbnMuCi0gKiAgUGFyYW1l dGVyczoKLSAqICAgICAgZGV2aWNlX2NvbnRleHQ6SGFuZGxlIHRvIHRoZSBkZXZpY2UgY29udGV4 dC4gVGhlIFhYWF9Jbml0IGZ1bmN0aW9uCi0gKiAgICAgIGNyZWF0ZXMgYW5kIHJldHVybnMgdGhp cyBpZGVudGlmaWVyLgotICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaW5kaWNhdGVzIHRoZSBk ZXZpY2Ugc3VjY2Vzc2Z1bGx5IGRlLWluaXRpYWxpemVkLiBPdGhlcndpc2UgaXQKLSAqICAgICAg cmV0dXJucyBGQUxTRS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgZGV2aWNlX2NvbnRleHQhPSBO VUxMLiBGb3IgYSBidWlsdCBpbiBkZXZpY2UgdGhpcyBzaG91bGQgbmV2ZXIKLSAqICAgICAgZ2V0 IGNhbGxlZC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gYm9vbCBkc3BfZGVpbml0KHUzMiBk ZXZpY2VfY29udGV4dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gZHNwX2luaXQgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBEZXZpY2UgTWFu YWdlciB0byBpbml0aWFsaXplIGEgZGV2aWNlLgotICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5v dCBjYWxsZWQgYnkgYXBwbGljYXRpb25zCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgZHdfY29u dGV4dDogIFNwZWNpZmllcyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVn aXN0cnkKLSAqICAgICAgICAgICAgICAgICAgcGF0aCB0byB0aGUgYWN0aXZlIGtleSBmb3IgdGhl IHN0cmVhbSBpbnRlcmZhY2UgZHJpdmVyLgotICogICAgICAgICAgICAgICAgICBIS0VZX0xPQ0FM X01BQ0hJTkVcRHJpdmVyc1xBY3RpdmUKLSAqICBSZXR1cm5zOgotICogICAgICBSZXR1cm5zIGEg aGFuZGxlIHRvIHRoZSBkZXZpY2UgY29udGV4dCBjcmVhdGVkLiBUaGlzIGlzIHRoZSBvdXIgYWN0 dWFsCi0gKiAgICAgIERldmljZSBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBEU1AgRGV2aWNlIGlu c3RhbmNlLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAgICAgIFN1Y2NlZWRlZDog IGRldmljZSBjb250ZXh0ID4gMAotICogICAgICBGYWlsZWQ6ICAgICBkZXZpY2UgQ29udGV4dCA9 IDAKLSAqLwotZXh0ZXJuIHUzMiBkc3BfaW5pdCh1MzIgKmluaXRfc3RhdHVzKTsKLQotI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2UvZHNwaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9kc3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmI2NGZhLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Bp by5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIGRzcGlvLmgKLSAqCi0g KiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHBy b2Nlc3NvcnMuCi0gKgotICogRGVjbGFyZXMgdGhlIHVwcGVyIGVkZ2UgSU8gZnVuY3Rpb25zIHJl cXVpcmVkIGJ5IGFsbCBCcmlkZ2UgZHJpdmVyIC9EU1AgQVBJCi0gKiBpbnRlcmZhY2UgdGFibGVz LgotICoKLSAqIE5vdGVzOgotICogICBGdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGlu IGRzcGRlZnMuaC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVt ZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElT IFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQK LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIERTUElPXwotI2RlZmluZSBEU1BJT18KLQot I2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2lvLmg+ Ci0KLQotZXh0ZXJuIGludCBicmlkZ2VfaW9fY3JlYXRlKHN0cnVjdCBpb19tZ3IgKippb19tYW4s Ci0JCQkJICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJCSAgIGNvbnN0IHN0cnVj dCBpb19hdHRycyAqbWdyX2F0dHJ0cyk7Ci0KLWV4dGVybiBpbnQgYnJpZGdlX2lvX2Rlc3Ryb3ko c3RydWN0IGlvX21nciAqaGlvX21ncik7Ci0KLWV4dGVybiBpbnQgYnJpZGdlX2lvX29uX2xvYWRl ZChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfaW9fZ2V0X3By b2NfbG9hZChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3By b2Nsb2Fkc3RhdCAqcHJvY19sc3RhdCk7Ci0KLSNlbmRpZiAvKiBEU1BJT18gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Bpb2N0 bC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlv Y3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2RhMTkuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3Rs LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogZHNwaW9jdGwuaAotICoK LSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAg cHJvY2Vzc29ycy4KLSAqCi0gKiBCcmlkZ2UgZHJpdmVyIEJSRF9JT0N0bCByZXNlcnZlZCBjb21t YW5kIGRlZmluaXRpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIElu c3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tB R0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1Q TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgRFNQSU9DVExfCi0jZGVmaW5lIERT UElPQ1RMXwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFyZHdh cmUgQWJzdHJhY3Rpb24gTGF5ZXIgKi8KLSNpbmNsdWRlIDxod19kZWZzLmg+Ci0jaW5jbHVkZSA8 aHdfbW11Lmg+Ci0KLS8qCi0gKiBBbnkgSU9DVExTIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgYXJl IHJlc2VydmVkIGZvciBzdGFuZGFyZCBCcmlkZ2UgZHJpdmVyCi0gKiBpbnRlcmZhY2VzLgotICov Ci0jZGVmaW5lIEJSRElPQ1RMX1JFU0VSVkVEQkFTRSAgICAgICAweDgwMDAKLQotI2RlZmluZSBC UkRJT0NUTF9DSE5MUkVBRCAgICAgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4MTAp Ci0jZGVmaW5lIEJSRElPQ1RMX0NITkxXUklURSAgICAgICAgICAoQlJESU9DVExfUkVTRVJWRURC QVNFICsgMHgyMCkKLS8qIERNTVUgKi8KLSNkZWZpbmUgQlJESU9DVExfU0VUTU1VQ09ORklHICAg ICAgIChCUkRJT0NUTF9SRVNFUlZFREJBU0UgKyAweDYwKQotLyogUFdSICovCi0jZGVmaW5lIEJS RElPQ1RMX1BXUkNPTlRST0wgICAgICAgICAoQlJESU9DVExfUkVTRVJWRURCQVNFICsgMHg3MCkK LQotLyogYXR0ZW50aW9uLCBtb2RpZmllcnM6Ci0gKiBTb21lIG9mIHRoZXNlIGNvbnRyb2wgZW51 bWVyYXRpb25zIGFyZSBtYWRlIHZpc2libGUgdG8gdXNlciBmb3IgcG93ZXIKLSAqIGNvbnRyb2ws IHNvIGFueSBjaGFuZ2VzIHRvIHRoaXMgbGlzdCwgc2hvdWxkIGFsc28gYmUgdXBkYXRlZCBpbiB0 aGUgdXNlcgotICogaGVhZGVyIGZpbGUgJ2RiZGVmcy5oJyAqKiovCi0vKiBUaGVzZSBpb2N0bHMg YXJlIHJlc2VydmVkIGZvciBQV1IgcG93ZXIgY29tbWFuZHMgZm9yIHRoZSBEU1AgKi8KLSNkZWZp bmUgQlJESU9DVExfREVFUFNMRUVQICAgICAgICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHgw KQotI2RlZmluZSBCUkRJT0NUTF9FTUVSR0VOQ1lTTEVFUCAgICAgKEJSRElPQ1RMX1BXUkNPTlRS T0wgKyAweDEpCi0jZGVmaW5lIEJSRElPQ1RMX1dBS0VVUCAgICAgICAgICAgICAoQlJESU9DVExf UFdSQ09OVFJPTCArIDB4MikKLSNkZWZpbmUgQlJESU9DVExfQ0xLX0NUUkwJCSAgICAoQlJESU9D VExfUFdSQ09OVFJPTCArIDB4NykKLS8qIERTUCBJbml0aWF0ZWQgSGliZXJuYXRlICovCi0jZGVm aW5lIEJSRElPQ1RMX1BXUl9ISUJFUk5BVEUJKEJSRElPQ1RMX1BXUkNPTlRST0wgKyAweDgpCi0j ZGVmaW5lIEJSRElPQ1RMX1BSRVNDQUxFX05PVElGWSAoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4 OSkKLSNkZWZpbmUgQlJESU9DVExfUE9TVFNDQUxFX05PVElGWSAoQlJESU9DVExfUFdSQ09OVFJP TCArIDB4QSkKLSNkZWZpbmUgQlJESU9DVExfQ09OU1RSQUlOVF9SRVFVRVNUIChCUkRJT0NUTF9Q V1JDT05UUk9MICsgMHhCKQotCi0vKiBOdW1iZXIgb2YgYWN0dWFsIERTUC1NTVUgVExCIGVudHJp ZXMgKi8KLSNkZWZpbmUgQlJESU9DVExfTlVNT0ZNTVVUTEIgICAgICAgIDMyCi0KLXN0cnVjdCBi cmlkZ2VfaW9jdGxfZXh0cHJvYyB7Ci0JdTMyIGRzcF92YTsJCS8qIERTUCB2aXJ0dWFsIGFkZHJl c3MgKi8KLQl1MzIgZ3BwX3BhOwkJLyogR1BQIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQkvKiBHUFAg dmlydHVhbCBhZGRyZXNzLiBfX3ZhIGRvZXMgbm90IHdvcmsgZm9yIGlvcmVtYXBwZWQgYWRkcmVz c2VzICovCi0JdTMyIGdwcF92YTsKLQl1MzIgc2l6ZTsJCS8qIFNpemUgb2YgdGhlIG1hcHBlZCBt ZW1vcnkgaW4gYnl0ZXMgKi8KLQllbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbTsKLQllbnVt IGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfbW9kZTsKLQllbnVtIGh3X2VsZW1lbnRfc2l6ZV90 IGVsZW1fc2l6ZTsKLX07Ci0KLSNlbmRpZiAvKiBEU1BJT0NUTF8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaCBiL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiZDQ1OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwbXNnLmgKKysrIC9kZXYv bnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogZHNwbXNnLmgKLSAqCi0gKiBEU1AtQklPUyBC cmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0g KgotICogRGVjbGFyZXMgdGhlIHVwcGVyIGVkZ2UgbWVzc2FnZSBjbGFzcyBsaWJyYXJ5IGZ1bmN0 aW9ucyByZXF1aXJlZCBieQotICogYWxsIEJyaWRnZSBkcml2ZXIgLyBEU1AgQVBJIGludGVyZmFj ZSB0YWJsZXMuICBUaGVzZSBmdW5jdGlvbnMgYXJlCi0gKiBpbXBsZW1lbnRlZCBieSBldmVyeSBj bGFzcyBvZiBCcmlkZ2UgZHJpdmVyIGNoYW5uZWwgbGlicmFyeS4KLSAqCi0gKiBOb3RlczoKLSAq ICAgRnVuY3Rpb24gY29tbWVudCBoZWFkZXJzIHJlc2lkZSBpbiBkc3BkZWZzLmguCi0gKgotICog Q29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBU aGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycg QU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F UkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8K LQotI2lmbmRlZiBEU1BNU0dfCi0jZGVmaW5lIERTUE1TR18KLQotI2luY2x1ZGUgPGRzcGJyaWRn ZS9tc2dkZWZzLmg+Ci0KLWV4dGVybiBpbnQgYnJpZGdlX21zZ19jcmVhdGUoc3RydWN0IG1zZ19t Z3IgKiptc2dfbWFuLAotCQkJCSAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkJ ICAgIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfbXNnX2Ny ZWF0ZV9xdWV1ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IsCi0JCQkJICAgICAgIHN0cnVjdCBt c2dfcXVldWUgKiptc2dxLAotCQkJCSAgICAgICB1MzIgbXNncV9pZCwgdTMyIG1heF9tc2dzLCB2 b2lkICphcmcpOwotCi1leHRlcm4gdm9pZCBicmlkZ2VfbXNnX2RlbGV0ZShzdHJ1Y3QgbXNnX21n ciAqaG1zZ19tZ3IpOwotCi1leHRlcm4gdm9pZCBicmlkZ2VfbXNnX2RlbGV0ZV9xdWV1ZShzdHJ1 Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqKTsKLQotZXh0ZXJuIGludCBicmlkZ2VfbXNnX2dl dChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAotCQkJCSBzdHJ1Y3QgZHNwX21zZyAq cG1zZywgdTMyIHV0aW1lb3V0KTsKLQotZXh0ZXJuIGludCBicmlkZ2VfbXNnX3B1dChzdHJ1Y3Qg bXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAotCQkJCSBjb25zdCBzdHJ1Y3QgZHNwX21zZyAqcG1z ZywgdTMyIHV0aW1lb3V0KTsKLQotZXh0ZXJuIGludCBicmlkZ2VfbXNnX3JlZ2lzdGVyX25vdGlm eShzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAotCQkJCQkgIHUzMiBldmVudF9tYXNr LAotCQkJCQkgIHUzMiBub3RpZnlfdHlwZSwKLQkJCQkJICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlv bgotCQkJCQkgICpobm90aWZpY2F0aW9uKTsKLQotZXh0ZXJuIHZvaWQgYnJpZGdlX21zZ19zZXRf cXVldWVfaWQoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKLQkJCQkJdTMyIG1zZ3Ff aWQpOwotCi0jZW5kaWYgLyogRFNQTVNHXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2R5bmFtaWNfbG9hZGVyLmggYi9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUyZDI3ZS4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIu aAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MCArMCwwIEBACi0vKgotICogZHluYW1pY19sb2FkZXIu aAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJ IE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1 bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJ UyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVE Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBfRFlOQU1JQ19MT0FERVJfSF8KLSNkZWZp bmUgX0RZTkFNSUNfTE9BREVSX0hfCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KLQotLyoKLSAqIER5bmFtaWMgTG9hZGVyCi0gKgotICogVGhlIGZ1 bmN0aW9uIG9mIHRoZSBkeW5hbWljIGxvYWRlciBpcyB0byBsb2FkIGEgIm1vZHVsZSIgY29udGFp bmluZwotICogaW5zdHJ1Y3Rpb25zIGZvciBhICJ0YXJnZXQiIHByb2Nlc3NvciBpbnRvIHRoYXQg cHJvY2Vzc29yLiAgSW4gdGhlIHByb2Nlc3MKLSAqIGl0IGFzc2lnbnMgbWVtb3J5IGZvciB0aGUg bW9kdWxlLCByZXNvbHZlcyBzeW1ib2wgcmVmZXJlbmNlcyBtYWRlIGJ5IHRoZQotICogbW9kdWxl LCBhbmQgcmVtZW1iZXJzIHN5bWJvbHMgZGVmaW5lZCBieSB0aGUgbW9kdWxlLgotICoKLSAqIFRo ZSBkeW5hbWljIGxvYWRlciBpcyBwYXJhbWV0ZXJpemVkIGZvciBhIHBhcnRpY3VsYXIgc3lzdGVt IGJ5IDQgY2xhc3NlcwotICogdGhhdCBzdXBwbHkgdGhlIG1vZHVsZSBhbmQgc3lzdGVtIHNwZWNp ZmljIGZ1bmN0aW9ucyBpdCByZXF1aXJlcwotICovCi0JLyogVGhlIHJlYWQgZnVuY3Rpb25zIGZv ciB0aGUgbW9kdWxlIGltYWdlIHRvIGJlIGxvYWRlZCAqLwotc3RydWN0IGR5bmFtaWNfbG9hZGVy X3N0cmVhbTsKLQotCS8qIFRoaXMgY2xhc3MgZGVmaW5lcyAiaG9zdCIgc3ltYm9sIGFuZCBzdXBw b3J0IGZ1bmN0aW9ucyAqLwotc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bTsKLQotCS8qIFRoaXMg Y2xhc3MgZGVmaW5lcyB0aGUgYWxsb2NhdG9yIGZvciAidGFyZ2V0IiBtZW1vcnkgKi8KLXN0cnVj dCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZTsKLQotCS8qIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUg Y29weS1pbnRvLXRhcmdldC1tZW1vcnkgZnVuY3Rpb25zICovCi1zdHJ1Y3QgZHluYW1pY19sb2Fk ZXJfaW5pdGlhbGl6ZTsKLQotLyoKLSAqIE9wdGlvbiBmbGFncyB0byBtb2RpZnkgdGhlIGJlaGF2 aW9yIG9mIG1vZHVsZSBsb2FkaW5nCi0gKi8KLSNkZWZpbmUgRExPQURfSU5JVEJTUyAweDEJLyog aW5pdGlhbGl6ZSBCU1Mgc2VjdGlvbnMgdG8gemVybyAqLwotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKLSAqIFByb2NlZHVyZSBkeW5hbWljX2xvYWRfbW9kdWxlCi0gKgotICogUGFyYW1ldGVyczoK LSAqICBtb2R1bGUgIFRoZSBpbnB1dCBzdHJlYW0gdGhhdCBzdXBwbGllcyB0aGUgbW9kdWxlIGlt YWdlCi0gKiAgc3ltcyAgICBIb3N0LXNpZGUgc3ltYm9sIHRhYmxlIGFuZCBtYWxsb2MvZnJlZSBm dW5jdGlvbnMKLSAqICBhbGxvYyAgIFRhcmdldC1zaWRlIG1lbW9yeSBhbGxvY2F0aW9uCi0gKiAg aW5pdCAgICBUYXJnZXQtc2lkZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIG9yIE5VTEwgZm9yIHN5 bWJvbCByZWFkIG9ubHkKLSAqICBvcHRpb25zIE9wdGlvbiBmbGFncyBETE9BRF8qCi0gKiAgbWhh bmRsZSBBIG1vZHVsZSBoYW5kbGUgZm9yIHVzZSB3aXRoIER5bmFtaWNfVW5sb2FkCi0gKgotICog RWZmZWN0OgotICogIFRoZSBtb2R1bGUgaW1hZ2UgaXMgcmVhZCB1c2luZyAqbW9kdWxlLiAgVGFy Z2V0IHN0b3JhZ2UgZm9yIHRoZSBuZXcgaW1hZ2UgaXMKLSAqIG9idGFpbmVkIGZyb20gKmFsbG9j LiAgU3ltYm9scyBkZWZpbmVkIGFuZCByZWZlcmVuY2VkIGJ5IHRoZSBtb2R1bGUgYXJlCi0gKiBt YW5hZ2VkIHVzaW5nICpzeW1zLiAgVGhlIGltYWdlIGlzIHRoZW4gcmVsb2NhdGVkIGFuZCByZWZl cmVuY2VzIHJlc29sdmVkCi0gKiBhcyBuZWNlc3NhcnksIGFuZCB0aGUgcmVzdWx0aW5nIGV4ZWN1 dGFibGUgYml0cyBhcmUgcGxhY2VkIGludG8gdGFyZ2V0IG1lbW9yeQotICogdXNpbmcgKmluaXQu Ci0gKgotICogUmV0dXJuczoKLSAqICBPbiBhIHN1Y2Nlc3NmdWwgbG9hZCwgYSBtb2R1bGUgaGFu ZGxlIGlzIHBsYWNlZCBpbiAqbWhhbmRsZSwgYW5kIHplcm8gaXMKLSAqIHJldHVybmVkLiAgT24g ZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVjdGVkIGlzIHJldHVybmVkLiAgSW5kaXZp ZHVhbAotICogZXJyb3JzIGFyZSByZXBvcnRlZCBkdXJpbmcgdGhlIGxvYWQgcHJvY2VzcyB1c2lu ZyBzeW1zLT5lcnJvcl9yZXBvcnQoKS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi1leHRlcm4g aW50IGR5bmFtaWNfbG9hZF9tb2R1bGUoCi0JCQkJICAgICAgLyogdGhlIHNvdXJjZSBmb3IgdGhl IG1vZHVsZSBpbWFnZSAqLwotCQkJCSAgICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0g Km1vZHVsZSwKLQkJCQkgICAgICAvKiBob3N0IHN1cHBvcnQgZm9yIHN5bWJvbHMgYW5kIHN0b3Jh Z2UgKi8KLQkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICpzeW1zLAotCQkJCSAg ICAgIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGFsbG9jYXRvciAqLwotCQkJCSAgICAgIHN0cnVjdCBk eW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCi0JCQkJICAgICAgLyogdGhlIHRhcmdldCBt ZW1vcnkgaW5pdGlhbGl6ZXIgKi8KLQkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5p dGlhbGl6ZSAqaW5pdCwKLQkJCQkgICAgICB1bnNpZ25lZCBvcHRpb25zLAkvKiBvcHRpb24gZmxh Z3MgKi8KLQkJCQkgICAgICAvKiB0aGUgcmV0dXJuZWQgbW9kdWxlIGhhbmRsZSAqLwotCQkJCSAg ICAgIHZvaWQgKiptaGFuZGxlKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQcm9jZWR1 cmUgZHluYW1pY19vcGVuX21vZHVsZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgbW9kdWxlICBU aGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQotICogIHN5bXMg ICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCi0gKiAg YWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgotICogIGluaXQgICAgVGFyZ2V0 LXNpZGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBvciBOVUxMIGZvciBzeW1ib2wgcmVhZCBvbmx5 Ci0gKiAgb3B0aW9ucyBPcHRpb24gZmxhZ3MgRExPQURfKgotICogIG1oYW5kbGUgQSBtb2R1bGUg aGFuZGxlIGZvciB1c2Ugd2l0aCBEeW5hbWljX1VubG9hZAotICoKLSAqIEVmZmVjdDoKLSAqICBU aGUgbW9kdWxlIGltYWdlIGlzIHJlYWQgdXNpbmcgKm1vZHVsZS4gIFRhcmdldCBzdG9yYWdlIGZv ciB0aGUgbmV3IGltYWdlIGlzCi0gKiBvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVm aW5lZCBhbmQgcmVmZXJlbmNlZCBieSB0aGUgbW9kdWxlIGFyZQotICogbWFuYWdlZCB1c2luZyAq c3ltcy4gIFRoZSBpbWFnZSBpcyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVmZXJlbmNlcyByZXNvbHZl ZAotICogYXMgbmVjZXNzYXJ5LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJl IHBsYWNlZCBpbnRvIHRhcmdldCBtZW1vcnkKLSAqIHVzaW5nICppbml0LgotICoKLSAqIFJldHVy bnM6Ci0gKiAgT24gYSBzdWNjZXNzZnVsIGxvYWQsIGEgbW9kdWxlIGhhbmRsZSBpcyBwbGFjZWQg aW4gKm1oYW5kbGUsIGFuZCB6ZXJvIGlzCi0gKiByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgbnVt YmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4gIEluZGl2aWR1YWwKLSAqIGVycm9y cyBhcmUgcmVwb3J0ZWQgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MgdXNpbmcgc3ltcy0+ZXJyb3Jf cmVwb3J0KCkuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotZXh0ZXJuIGludCBkeW5hbWljX29w ZW5fbW9kdWxlKAotCQkJCSAgICAgIC8qIHRoZSBzb3VyY2UgZm9yIHRoZSBtb2R1bGUgaW1hZ2Ug Ki8KLQkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICptb2R1bGUsCi0JCQkJ ICAgICAgLyogaG9zdCBzdXBwb3J0IGZvciBzeW1ib2xzIGFuZCBzdG9yYWdlICovCi0JCQkJICAg ICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKLQkJCQkgICAgICAvKiB0aGUgdGFy Z2V0IG1lbW9yeSBhbGxvY2F0b3IgKi8KLQkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJf YWxsb2NhdGUgKmFsbG9jLAotCQkJCSAgICAgIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGluaXRpYWxp emVyICovCi0JCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQs Ci0JCQkJICAgICAgdW5zaWduZWQgb3B0aW9ucywJLyogb3B0aW9uIGZsYWdzICovCi0JCQkJICAg ICAgLyogdGhlIHJldHVybmVkIG1vZHVsZSBoYW5kbGUgKi8KLQkJCQkgICAgICB2b2lkICoqbWhh bmRsZSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlIGR5bmFtaWNfdW5s b2FkX21vZHVsZQotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgbWhhbmRsZSBBIG1vZHVsZSBoYW5k bGUgZnJvbSBkeW5hbWljX2xvYWRfbW9kdWxlCi0gKiAgc3ltcyAgICBIb3N0LXNpZGUgc3ltYm9s IHRhYmxlIGFuZCBtYWxsb2MvZnJlZSBmdW5jdGlvbnMKLSAqICBhbGxvYyAgIFRhcmdldC1zaWRl IG1lbW9yeSBhbGxvY2F0aW9uCi0gKgotICogRWZmZWN0OgotICogIFRoZSBtb2R1bGUgc3BlY2lm aWVkIGJ5IG1oYW5kbGUgaXMgdW5sb2FkZWQuICBVbmxvYWRpbmcgY2F1c2VzIGFsbAotICogdGFy Z2V0IG1lbW9yeSB0byBiZSBkZWFsbG9jYXRlZCwgYWxsIHN5bWJvbHMgZGVmaW5lZCBieSB0aGUg bW9kdWxlIHRvCi0gKiBiZSBwdXJnZWQsIGFuZCBhbnkgaG9zdC1zaWRlIHN0b3JhZ2UgdXNlZCBi eSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yCi0gKiB0aGlzIG1vZHVsZSB0byBiZSByZWxlYXNlZC4K LSAqCi0gKiBSZXR1cm5zOgotICogIFplcm8gZm9yIHN1Y2Nlc3MuIE9uIGVycm9yLCB0aGUgbnVt YmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4KLSAqIEluZGl2aWR1YWwgZXJyb3Jz IGFyZSByZXBvcnRlZCB1c2luZyBzeW1zLT5lcnJvcl9yZXBvcnQoKS4KLSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCi1leHRlcm4gaW50IGR5bmFtaWNfdW5sb2FkX21vZHVsZSh2b2lkICptaGFuZGxl LAkvKiB0aGUgbW9kdWxlCi0JCQkJCQkJICogaGFuZGxlICovCi0JCQkJIC8qIGhvc3Qgc3VwcG9y dCBmb3Igc3ltYm9scyBhbmQKLQkJCQkgICogc3RvcmFnZSAqLwotCQkJCSBzdHJ1Y3QgZHluYW1p Y19sb2FkZXJfc3ltICpzeW1zLAotCQkJCSAvKiB0aGUgdGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3Ig Ki8KLQkJCQkgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICphbGxvYywKLQkJCQkgLyog dGhlIHRhcmdldCBtZW1vcnkgaW5pdGlhbGl6ZXIgKi8KLQkJCQkgc3RydWN0IGR5bmFtaWNfbG9h ZGVyX2luaXRpYWxpemUgKmluaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgotICogQSBjbGFzcyB1c2VkIGJ5IHRoZSBkeW5hbWljIGxvYWRlciBmb3Ig aW5wdXQgb2YgdGhlIG1vZHVsZSBpbWFnZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLwotc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSB7Ci0vKiBwdWJs aWM6ICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiByZWFkX2J1ZmZlcgotICAgICAq Ci0gICAgICogUEFSQU1FVEVSUyA6Ci0gICAgICogIGJ1ZmZlciAgUG9pbnRlciB0byB0aGUgYnVm ZmVyIHRvIGZpbGwKLSAgICAgKiAgYnVmc2l6ICBBbW91bnQgb2YgZGF0YSBkZXNpcmVkIGluIHNp emVvZigpIHVuaXRzCi0gICAgICoKLSAgICAgKiBFRkZFQ1QgOgotICAgICAqICBSZWFkcyB0aGUg c3BlY2lmaWVkIGFtb3VudCBvZiBkYXRhIGZyb20gdGhlIG1vZHVsZSBpbnB1dCBzdHJlYW0KLSAg ICAgKiBpbnRvIHRoZSBzcGVjaWZpZWQgYnVmZmVyLiAgUmV0dXJucyB0aGUgYW1vdW50IG9mIGRh dGEgcmVhZCBpbiBzaXplb2YoKQotICAgICAqIHVuaXRzICh3aGljaCBpZiBsZXNzIHRoYW4gdGhl IHNwZWNpZmljYXRpb24sIHJlcHJlc2VudHMgYW4gZXJyb3IpLgotICAgICAqCi0gICAgICogTk9U RVM6Ci0gICAgICogIEluIHJlbGVhc2UgMSBpbmNyZW1lbnRzIHRoZSBmaWxlIHBvc2l0aW9uIGJ5 IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZAotICAgICAqCi0gICAgICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LwotCWludCAoKnJlYWRfYnVmZmVyKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqdGhp c3B0ciwKLQkJCSAgICB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGJ1ZnNpeik7Ci0KLSAgICAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgotICAgICAqIHNldF9maWxlX3Bvc24gKHJlbGVhc2UgMSBvbmx5KQotICAg ICAqCi0gICAgICogUEFSQU1FVEVSUyA6Ci0gICAgICogIHBvc24gIERlc2lyZWQgZmlsZSBwb3Np dGlvbiByZWxhdGl2ZSB0byBzdGFydCBvZiBmaWxlIGluIHNpemVvZigpIHVuaXRzLgotICAgICAq Ci0gICAgICogRUZGRUNUIDoKLSAgICAgKiAgQWRqdXN0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2Yg dGhlIHN0cmVhbSBvYmplY3Qgc28gdGhhdCB0aGUgbmV4dAotICAgICAqIHJlYWRfYnVmZmVyIGNh bGwgd2lsbCBiZWdpbiB0byByZWFkIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0IGZyb20KLSAgICAg KiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBtb2R1bGUuICBSZXR1cm5zIDAgZm9yIHN1Y2Nl c3MsIG5vbi16ZXJvCi0gICAgICogZm9yIGZhaWx1cmUuCi0gICAgICoKLSAgICAgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCi0JaW50ICgqc2V0X2ZpbGVfcG9zbikgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9z dHJlYW0gKnRoaXNwdHIsCi0JCQkgICAgICAvKiB0byBiZSBlbGltaW5hdGVkIGluIHJlbGVhc2Ug MiAqLwotCQkJICAgICAgdW5zaWduZWQgaW50IHBvc24pOwotCi19OwotCi0vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQSBjbGFzcyB1c2VkIGJ5IHRoZSBk eW5hbWljIGxvYWRlciBmb3Igc3ltYm9sIHRhYmxlIHN1cHBvcnQgYW5kCi0gKiBtaXNjZWxsYW5l b3VzIGhvc3Qtc2lkZSBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KLQotdHlwZWRlZiB1MzIgbGRyX2FkZHI7Ci0KLS8qCi0gKiB0aGUgc3Ry dWN0dXJlIG9mIGEgc3ltYm9sIGtub3duIHRvIHRoZSBkeW5hbWljIGxvYWRlcgotICovCi1zdHJ1 Y3QgZHlubG9hZF9zeW1ib2wgewotCWxkcl9hZGRyIHZhbHVlOwotfTsKLQotc3RydWN0IGR5bmFt aWNfbG9hZGVyX3N5bSB7Ci0vKiBwdWJsaWM6ICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAg ICAgKiBmaW5kX21hdGNoaW5nX3N5bWJvbAotICAgICAqCi0gICAgICogUEFSQU1FVEVSUyA6Ci0g ICAgICogIG5hbWUgICAgVGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgc3ltYm9sCi0gICAgICoKLSAg ICAgKiBFRkZFQ1QgOgotICAgICAqICBMb2NhdGVzIGEgc3ltYm9sIG1hdGNoaW5nIHRoZSBuYW1l IHNwZWNpZmllZC4gIEEgcG9pbnRlciB0byB0aGUKLSAgICAgKiBzeW1ib2wgaXMgcmV0dXJuZWQg aWYgaXQgZXhpc3RzOyAwIGlzIHJldHVybmVkIGlmIG5vIHN1Y2ggc3ltYm9sIGlzCi0gICAgICog Zm91bmQuCi0gICAgICoKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0Jc3RydWN0IGR5bmxvYWRf c3ltYm9sICooKmZpbmRfbWF0Y2hpbmdfc3ltYm9sKQotCSAoc3RydWN0IGR5bmFtaWNfbG9hZGVy X3N5bSAqdGhpc3B0ciwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLSAgICAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotICAgICAqIGFkZF90b19zeW1ib2xfdGFibGUKLSAgICAgKgotICAgICAqIFBBUkFNRVRFUlMg OgotICAgICAqICBubmFtZSAgICAgICBQb2ludGVyIHRvIHRoZSBuYW1lIG9mIHRoZSBuZXcgc3lt Ym9sCi0gICAgICogIG1vZHVsZWlkICAgIEFuIG9wYXF1ZSBtb2R1bGUgaWQgYXNzaWduZWQgYnkg dGhlIGR5bmFtaWMgbG9hZGVyCi0gICAgICoKLSAgICAgKiBFRkZFQ1QgOgotICAgICAqICBUaGUg bmV3IHN5bWJvbCBpcyBhZGRlZCB0byB0aGUgdGFibGUuICBBIHBvaW50ZXIgdG8gdGhlIHN5bWJv bCBpcwotICAgICAqIHJldHVybmVkLCBvciBOVUxMIGlzIHJldHVybmVkIGZvciBmYWlsdXJlLgot ICAgICAqCi0gICAgICogTk9URVM6Ci0gICAgICogIEl0IGlzIHBlcm1pc3NpYmxlIGZvciB0aGlz IGZ1bmN0aW9uIHRvIHJldHVybiBOVUxMOyB0aGUgZWZmZWN0IGlzIHRoYXQKLSAgICAgKiB0aGUg bmFtZWQgc3ltYm9sIHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0byByZXNvbHZlIHJlZmVyZW5jZXMg aW4KLSAgICAgKiBzdWJzZXF1ZW50IGxvYWRzLiAgUmV0dXJuaW5nIE5VTEwgd2lsbCBub3QgY2F1 c2UgdGhlIGN1cnJlbnQgbG9hZAotICAgICAqIHRvIGZhaWwuCi0gICAgICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLwotCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKCphZGRfdG9fc3ltYm9sX3RhYmxlKQotCSAo c3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqCi0JICB0aGlzcHRyLCBjb25zdCBjaGFyICpubmFt ZSwgdW5zaWduZWQgbW9kdWxlaWQpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBw dXJnZV9zeW1ib2xfdGFibGUKLSAgICAgKgotICAgICAqIFBBUkFNRVRFUlMgOgotICAgICAqICBt b2R1bGVpZCAgICBBbiBvcGFxdWUgbW9kdWxlIGlkIGFzc2lnbmVkIGJ5IHRoZSBkeW5hbWljIGxv YWRlcgotICAgICAqCi0gICAgICogRUZGRUNUIDoKLSAgICAgKiAgRWFjaCBzeW1ib2wgaW4gdGhl IHN5bWJvbCB0YWJsZSB3aG9zZSBtb2R1bGVpZCBtYXRjaGVzIHRoZSBhcmd1bWVudAotICAgICAq IGlzIHJlbW92ZWQgZnJvbSB0aGUgdGFibGUuCi0gICAgICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCXZv aWQgKCpwdXJnZV9zeW1ib2xfdGFibGUpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlz cHRyLAotCQkJCSAgICB1bnNpZ25lZCBtb2R1bGVpZCk7Ci0KLSAgICAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotICAgICAqIGRsb2FkX2FsbG9jYXRlCi0gICAgICoKLSAgICAgKiBQQVJBTUVURVJTIDoKLSAg ICAgKiAgbWVtc2l6ICBzaXplIG9mIGRlc2lyZWQgbWVtb3J5IGluIHNpemVvZigpIHVuaXRzCi0g ICAgICoKLSAgICAgKiBFRkZFQ1QgOgotICAgICAqICBSZXR1cm5zIGEgcG9pbnRlciB0byBzb21l ICJob3N0IiBtZW1vcnkgZm9yIHVzZSBieSB0aGUgZHluYW1pYwotICAgICAqIGxvYWRlciwgb3Ig TlVMTCBmb3IgZmFpbHVyZS4KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHNlcnZlcyBhcyBhIHJl cGxhY2VhYmxlIGZvcm0gb2YgIm1hbGxvYyIgdG8KLSAgICAgKiBhbGxvdyB0aGUgdXNlciB0byBj b25maWd1cmUgdGhlIG1lbW9yeSB1c2FnZSBvZiB0aGUgZHluYW1pYyBsb2FkZXIuCi0gICAgICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLwotCXZvaWQgKigqZGxvYWRfYWxsb2NhdGUpIChzdHJ1Y3QgZHluYW1p Y19sb2FkZXJfc3ltICp0aGlzcHRyLAotCQkJCSB1bnNpZ25lZCBtZW1zaXopOwotCi0gICAgLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSAgICAgKiBkbG9hZF9kZWFsbG9jYXRlCi0gICAgICoKLSAgICAgKiBQ QVJBTUVURVJTIDoKLSAgICAgKiAgbWVtcHRyICBwb2ludGVyIHRvIHByZXZpb3VzbHkgYWxsb2Nh dGVkIG1lbW9yeQotICAgICAqCi0gICAgICogRUZGRUNUIDoKLSAgICAgKiAgUmVsZWFzZXMgdGhl IHByZXZpb3VzbHkgYWxsb2NhdGVkICJob3N0IiBtZW1vcnkuCi0gICAgICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLwotCXZvaWQgKCpkbG9hZF9kZWFsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5 bSAqdGhpc3B0ciwKLQkJCQkgIHZvaWQgKm1lbXB0cik7Ci0KLSAgICAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotICAgICAqIGVycm9yX3JlcG9ydAotICAgICAqCi0gICAgICogUEFSQU1FVEVSUyA6Ci0gICAg ICogIGVycnN0ciAgcG9pbnRlciB0byBhbiBlcnJvciBzdHJpbmcKLSAgICAgKiAgYXJncyAgICBh ZGRpdGlvbmFsIGFyZ3VtZW50cwotICAgICAqCi0gICAgICogRUZGRUNUIDoKLSAgICAgKiAgVGhp cyBmdW5jdGlvbiBwcm92aWRlcyBhbiBlcnJvciByZXBvcnRpbmcgaW50ZXJmYWNlIGZvciB0aGUg ZHluYW1pYwotICAgICAqIGxvYWRlci4gIFRoZSBlcnJvciBzdHJpbmcgYW5kIGFyZ3VtZW50cyBh cmUgZGVzaWduZWQgYXMgZm9yIHRoZQotICAgICAqIGxpYnJhcnkgZnVuY3Rpb24gdnByaW50Zi4K LSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCi0Jdm9pZCAoKmVycm9yX3JlcG9ydCkgKHN0cnVjdCBk eW5hbWljX2xvYWRlcl9zeW0gKnRoaXNwdHIsCi0JCQkgICAgICBjb25zdCBjaGFyICplcnJzdHIs IHZhX2xpc3QgYXJncyk7Ci0KLX07CQkJCS8qIGNsYXNzIGR5bmFtaWNfbG9hZGVyX3N5bSAqLwot Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQSBjbGFz cyB1c2VkIGJ5IHRoZSBkeW5hbWljIGxvYWRlciB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSB0 YXJnZXQgbWVtb3J5LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLwotCi1zdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyB7Ci0JLyogTmFtZSBvZiB0aGUgbWVtb3J5 IHNlY3Rpb24gYXNzaWduZWQgYXQgYnVpbGQgdGltZSAqLwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0J bGRyX2FkZHIgcnVuX2FkZHI7CS8qIGV4ZWN1dGlvbiBhZGRyZXNzIG9mIHRoZSBzZWN0aW9uICov Ci0JbGRyX2FkZHIgbG9hZF9hZGRyOwkvKiBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24gKi8K LQlsZHJfYWRkciBzaXplOwkJLyogc2l6ZSBvZiB0aGUgc2VjdGlvbiBpbiBhZGRyZXNzYWJsZSB1 bml0cyAqLwotI2lmbmRlZiBfQklHX0VORElBTgotCXUxNiBwYWdlOwkJLyogbWVtb3J5IHBhZ2Ug b3IgdmlldyAqLwotCXUxNiB0eXBlOwkJLyogb25lIG9mIHRoZSBzZWN0aW9uIHR5cGVzIGJlbG93 ICovCi0jZWxzZQotCXUxNiB0eXBlOwkJLyogb25lIG9mIHRoZSBzZWN0aW9uIHR5cGVzIGJlbG93 ICovCi0JdTE2IHBhZ2U7CQkvKiBtZW1vcnkgcGFnZSBvciB2aWV3ICovCi0jZW5kaWYKLQkvKiBh IGNvbnRleHQgZmllbGQgZm9yIHVzZSBieSBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZTsKLQkgKiAg IGlnbm9yZWQgYnV0IG1haW50YWluZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyICovCi0JdTMyIGNv bnRleHQ7Ci19OwotCi0vKiB1c2UgdGhpcyBtYWNybyB0byBleHRyYWN0IHR5cGUgb2Ygc2VjdGlv biBmcm9tIGxkcl9zZWN0aW9uX2luZm8udHlwZSBmaWVsZCAqLwotI2RlZmluZSBETE9BRF9TRUNU SU9OX1RZUEUodHlwZWluZm8pICh0eXBlaW5mbyAmIDB4RikKLQotLyogdHlwZSBvZiBzZWN0aW9u IHRvIGJlIGFsbG9jYXRlZCAqLwotI2RlZmluZSBETE9BRF9URVhUIDAKLSNkZWZpbmUgRExPQURf REFUQSAxCi0jZGVmaW5lIERMT0FEX0JTUyAyCi0JLyogaW50ZXJuYWwgdXNlIG9ubHksIHJ1bi10 aW1lIGNpbml0IHdpbGwgYmUgb2YgdHlwZSBETE9BRF9EQVRBICovCi0jZGVmaW5lIERMT0FEX0NJ TklUIDMKLQotc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlIHsKLS8qIHB1YmxpYzogKi8K LQotICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgKiBGdW5jdGlvbiBhbGxvY2F0ZQotICAgICoK LSAgICAqIFBhcmFtZXRlcnM6Ci0gICAgKiAgIGluZm8gICAgICAgIEEgcG9pbnRlciB0byBhbiBp bmZvcm1hdGlvbiBibG9jayBmb3IgdGhlIHNlY3Rpb24KLSAgICAqICAgYWxpZ24gICAgICAgVGhl IGFsaWdubWVudCBvZiB0aGUgc3RvcmFnZSBpbiB0YXJnZXQgQVVzCi0gICAgKgotICAgICogRWZm ZWN0OgotICAgICogICBBbGxvY2F0ZXMgdGFyZ2V0IG1lbW9yeSBmb3IgdGhlIHNwZWNpZmllZCBz ZWN0aW9uIGFuZCBmaWxscyBpbiB0aGUKLSAgICAqIGxvYWRfYWRkciBhbmQgcnVuX2FkZHIgZmll bGRzIG9mIHRoZSBzZWN0aW9uIGluZm8gc3RydWN0dXJlLiBSZXR1cm5zIFRSVUUKLSAgICAqIGZv ciBzdWNjZXNzLCBGQUxTRSBmb3IgZmFpbHVyZS4KLSAgICAqCi0gICAgKiBOb3RlczoKLSAgICAq ICAgRnJlcXVlbnRseSBsb2FkX2FkZHIgYW5kIHJ1bl9hZGRyIGFyZSB0aGUgc2FtZSwgYnV0IGlm IHRoZXkgYXJlIG5vdAotICAgICogbG9hZF9hZGRyIGlzIHVzZWQgd2l0aCBkeW5hbWljX2xvYWRl cl9pbml0aWFsaXplLCBhbmQgcnVuX2FkZHIgaXMKLSAgICAqIHVzZWQgZm9yIGFsbW9zdCBhbGwg cmVsb2NhdGlvbnMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgaW5pdGlhbGl6ZQotICAg ICogYm90aCBmaWVsZHMuCi0gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0JaW50ICgqZGxvYWRfYWxs b2NhdGUpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKnRoaXNwdHIsCi0JCQkgICAg ICAgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sIHVuc2lnbmVkIGFsaWduKTsKLQotICAg IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0gICAgKiBGdW5jdGlvbiBkZWFsbG9jYXRlCi0gICAgKgotICAg ICogUGFyYW1ldGVyczoKLSAgICAqICAgaW5mbyAgICAgICAgQSBwb2ludGVyIHRvIGFuIGluZm9y bWF0aW9uIGJsb2NrIGZvciB0aGUgc2VjdGlvbgotICAgICoKLSAgICAqIEVmZmVjdDoKLSAgICAq ICAgUmVsZWFzZXMgdGhlIHRhcmdldCBtZW1vcnkgcHJldmlvdXNseSBhbGxvY2F0ZWQuCi0gICAg KgotICAgICogTm90ZXM6Ci0gICAgKiBUaGUgY29udGVudCBvZiB0aGUgaW5mby0+bmFtZSBmaWVs ZCBpcyB1bmRlZmluZWQgb24gY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLwotCXZvaWQgKCpkbG9hZF9kZWFsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVy X2FsbG9jYXRlICp0aGlzcHRyLAotCQkJCSAgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8p OwotCi19OwkJCQkvKiBjbGFzcyBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqLwotCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQSBjbGFzcyB1c2VkIGJ5 IHRoZSBkeW5hbWljIGxvYWRlciB0byBsb2FkIGRhdGEgaW50byBhIHRhcmdldC4gIFRoaXMgY2xh c3MKLSAqIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgZnVuY3Rpb25zIG5lZWRlZCB0 byBsb2FkIGRhdGEuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCi0KLXN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplIHsKLS8qIHB1YmxpYzogKi8K LSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgotICAgICogRnVuY3Rpb24gY29ubmVjdAotICAgICoKLSAg ICAqIFBhcmFtZXRlcnM6Ci0gICAgKiAgIG5vbmUKLSAgICAqCi0gICAgKiBFZmZlY3Q6Ci0gICAg KiAgIENvbm5lY3QgdG8gdGhlIGluaXRpYWxpemF0aW9uIGludGVyZmFjZS4gUmV0dXJucyBUUlVF IGZvciBzdWNjZXNzLAotICAgICogRkFMU0UgZm9yIGZhaWx1cmUuCi0gICAgKgotICAgICogTm90 ZXM6Ci0gICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHByaW9yIHRvIHVzZSBvZiBhbnkg b3RoZXIgZnVuY3Rpb25zIGluCi0gICAgKiB0aGlzIGludGVyZmFjZS4KLSAgICAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KLQlpbnQgKCpjb25uZWN0KSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxp emUgKnRoaXNwdHIpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAqIEZ1bmN0aW9uIHJl YWRtZW0KLSAgICAqCi0gICAgKiBQYXJhbWV0ZXJzOgotICAgICogICBidWZyICAgICAgICBQb2lu dGVyIHRvIGEgd29yZC1hbGlnbmVkIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdAotICAgICogICBsb2Nu ICAgICAgICBUYXJnZXQgYWRkcmVzcyBvZiBmaXJzdCBkYXRhIGVsZW1lbnQKLSAgICAqICAgaW5m byAgICAgICAgU2VjdGlvbiBpbmZvIGZvciB0aGUgc2VjdGlvbiBpbiB3aGljaCB0aGUgYWRkcmVz cyByZXNpZGVzCi0gICAgKiAgIGJ5dHNpeiAgICAgIFNpemUgb2YgdGhlIGRhdGEgdG8gYmUgcmVh ZCBpbiBzaXplb2YoKSB1bml0cwotICAgICoKLSAgICAqIEVmZmVjdDoKLSAgICAqICAgRmlsbHMg dGhlIHNwZWNpZmllZCBidWZmZXIgd2l0aCBkYXRhIGZyb20gdGhlIHRhcmdldC4gIFJldHVybnMg VFJVRSBmb3IKLSAgICAqIHN1Y2Nlc3MsIEZBTFNFIGZvciBmYWlsdXJlLgotICAgICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLwotCWludCAoKnJlYWRtZW0pIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlh bGl6ZSAqdGhpc3B0ciwKLQkJCXZvaWQgKmJ1ZnIsCi0JCQlsZHJfYWRkciBsb2NuLAotCQkJc3Ry dWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sIHVuc2lnbmVkIGJ5dHNpeik7Ci0KLSAgICAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgotICAgICogRnVuY3Rpb24gd3JpdGVtZW0KLSAgICAqCi0gICAgKiBQYXJh bWV0ZXJzOgotICAgICogICBidWZyICAgICAgICBQb2ludGVyIHRvIGEgd29yZC1hbGlnbmVkIGJ1 ZmZlciBvZiBkYXRhCi0gICAgKiAgIGxvY24gICAgICAgIFRhcmdldCBhZGRyZXNzIG9mIGZpcnN0 IGRhdGEgZWxlbWVudCB0byBiZSB3cml0dGVuCi0gICAgKiAgIGluZm8gICAgICAgIFNlY3Rpb24g aW5mbyBmb3IgdGhlIHNlY3Rpb24gaW4gd2hpY2ggdGhlIGFkZHJlc3MgcmVzaWRlcwotICAgICog ICBieXRzaXogICAgICBTaXplIG9mIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaW4gc2l6ZW9mKCkg dW5pdHMKLSAgICAqCi0gICAgKiBFZmZlY3Q6Ci0gICAgKiAgIFdyaXRlcyB0aGUgc3BlY2lmaWVk IGJ1ZmZlciB0byB0aGUgdGFyZ2V0LiAgUmV0dXJucyBUUlVFIGZvciBzdWNjZXNzLAotICAgICog RkFMU0UgZm9yIGZhaWx1cmUuCi0gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0JaW50ICgqd3JpdGVt ZW0pIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpc3B0ciwKLQkJCSB2b2lk ICpidWZyLAotCQkJIGxkcl9hZGRyIGxvY24sCi0JCQkgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8g KmluZm8sIHVuc2lnbmVkIGJ5dHNpeik7Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICog RnVuY3Rpb24gZmlsbG1lbQotICAgICoKLSAgICAqIFBhcmFtZXRlcnM6Ci0gICAgKiAgIGxvY24g ICAgICAgIFRhcmdldCBhZGRyZXNzIG9mIGZpcnN0IGRhdGEgZWxlbWVudCB0byBiZSB3cml0dGVu Ci0gICAgKiAgIGluZm8gICAgICAgIFNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlY3Rpb24gaW4gd2hp Y2ggdGhlIGFkZHJlc3MgcmVzaWRlcwotICAgICogICBieXRzaXogICAgICBTaXplIG9mIHRoZSBk YXRhIHRvIGJlIHdyaXR0ZW4gaW4gc2l6ZW9mKCkgdW5pdHMKLSAgICAqICAgdmFsICAgICAgICAg VmFsdWUgdG8gYmUgd3JpdHRlbiBpbiBlYWNoIGJ5dGUKLSAgICAqIEVmZmVjdDoKLSAgICAqICAg RmlsbHMgdGhlIHNwZWNpZmllZCBhcmVhIG9mIHRhcmdldCBtZW1vcnkuICBSZXR1cm5zIFRSVUUg Zm9yIHN1Y2Nlc3MsCi0gICAgKiBGQUxTRSBmb3IgZmFpbHVyZS4KLSAgICAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KLQlpbnQgKCpmaWxsbWVtKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUg KnRoaXNwdHIsCi0JCQlsZHJfYWRkciBsb2NuLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5m bywKLQkJCXVuc2lnbmVkIGJ5dHNpeiwgdW5zaWduZWQgdmFsKTsKLQotICAgIC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0gICAgKiBGdW5jdGlvbiBleGVjdXRlCi0gICAgKgotICAgICogUGFyYW1ldGVyczoK LSAgICAqICAgc3RhcnQgICAgICAgU3RhcnRpbmcgYWRkcmVzcwotICAgICoKLSAgICAqIEVmZmVj dDoKLSAgICAqICAgVGhlIHRhcmdldCBjb2RlIGF0IHRoZSBzcGVjaWZpZWQgc3RhcnRpbmcgYWRk cmVzcyBpcyBleGVjdXRlZC4KLSAgICAqCi0gICAgKiBOb3RlczoKLSAgICAqICAgVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZHluYW1pYyBsb2FkIHByb2Nlc3MKLSAg ICAqIGlmIHRoZSBpbnB1dCBtb2R1bGUgaGFzIHNwZWNpZmllZCBhIHN0YXJ0aW5nIGFkZHJlc3Mu Ci0gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCi0JaW50ICgqZXhlY3V0ZSkgKHN0cnVjdCBkeW5hbWlj X2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyLAotCQkJbGRyX2FkZHIgc3RhcnQpOwotCi0gICAg LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSAgICAqIEZ1bmN0aW9uIHJlbGVhc2UKLSAgICAqCi0gICAgKiBQ YXJhbWV0ZXJzOgotICAgICogICBub25lCi0gICAgKgotICAgICogRWZmZWN0OgotICAgICogICBS ZWxlYXNlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgbG9hZCBpbnRlcmZhY2UuCi0gICAgKgotICAg ICogTm90ZXM6Ci0gICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2Yg dGhlIGR5bmFtaWMgbG9hZCBwcm9jZXNzLgotICAgICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCXZvaWQg KCpyZWxlYXNlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIpOwot Ci19OwkJCQkvKiBjbGFzcyBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICovCi0KLSNlbmRpZiAv KiBfRFlOQU1JQ19MT0FERVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2V0c2VjdGlvbi5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA2MjYwNjNkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIGdldHNlY3Rpb24uaAotICoKLSAqIERTUC1CSU9TIEJy aWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAq Ci0gKiBUaGlzIGZpbGUgcHJvdmlkZXMgYW4gQVBJIGFkZC1vbiB0byB0aGUgZHluYW1pYyBsb2Fk ZXIgdGhhdCBhbGxvd3MgdGhlIHVzZXIKLSAqIHRvIHF1ZXJ5IHNlY3Rpb24gaW5mb3JtYXRpb24g YW5kIGV4dHJhY3Qgc2VjdGlvbiBkYXRhIGZyb20gZHluYW1pYyBsb2FkCi0gKiBtb2R1bGVzLgot ICoKLSAqIE5vdGVzOgotICogICBGdW5jdGlvbnMgaW4gdGhpcyBBUEkgYXNzdW1lIHRoYXQgdGhl IHN1cHBsaWVkIGR5bmFtaWNfbG9hZGVyX3N0cmVhbQotICogICBvYmplY3Qgc3VwcG9ydHMgdGhl IHNldF9maWxlX3Bvc24gbWV0aG9kLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJ bnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNL QUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICog SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIF9HRVRTRUNUSU9OX0hfCi0jZGVm aW5lIF9HRVRTRUNUSU9OX0hfCi0KLSNpbmNsdWRlICJkeW5hbWljX2xvYWRlci5oIgotCi0vKgot ICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9vcGVuCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBt b2R1bGUgIFRoZSBpbnB1dCBzdHJlYW0gdGhhdCBzdXBwbGllcyB0aGUgbW9kdWxlIGltYWdlCi0g KiAgc3ltcyAgICBIb3N0LXNpZGUgbWFsbG9jL2ZyZWUgYW5kIGVycm9yIHJlcG9ydGluZyBmdW5j dGlvbnMuCi0gKiAgICAgICAgICBPdGhlciBtZXRob2RzIGFyZSB1bnVzZWQuCi0gKgotICogRWZm ZWN0OgotICogIFJlYWRzIGhlYWRlciBpbmZvcm1hdGlvbiBmcm9tIGEgZHluYW1pYyBsb2FkZXIg bW9kdWxlIHVzaW5nIHRoZSBzcGVjaWZpZWQKLSAqIHN0cmVhbSBvYmplY3QsIGFuZCByZXR1cm5z IGEgaGFuZGxlIGZvciB0aGUgbW9kdWxlIGluZm9ybWF0aW9uLiAgVGhpcwotICogaGFuZGxlIG1h eSBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcXVlcnkgY2FsbHMgdG8gb2J0YWluIGluZm9ybWF0aW9u Ci0gKiBjb250YWluZWQgaW4gdGhlIG1vZHVsZS4KLSAqCi0gKiBSZXR1cm5zOgotICogIE5VTEwg aWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQsIG90aGVyd2lzZSBhIG1vZHVsZSBoYW5kbGUgZm9y IHVzZQotICogaW4gc3Vic2VxdWVudCBvcGVyYXRpb25zLgotICovCi1leHRlcm4gdm9pZCAqZGxv YWRfbW9kdWxlX29wZW4oc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbQotCQkJCQkgICAqbW9k dWxlLCBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltCi0JCQkJCSAgICpzeW1zKTsKLQotLyoKLSAq IFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvCi0gKgotICogUGFyYW1ldGVyczoKLSAq ICBtaW5mbyAgICAgICBIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1 bGUKLSAqICBzZWN0aW9uX25hbWUgUG9pbnRlciB0byB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIHNl Y3Rpb24gZGVzaXJlZAotICogIHNlY3Rpb25faW5mbyBBZGRyZXNzIG9mIGEgc2VjdGlvbiBpbmZv IHN0cnVjdHVyZSBwb2ludGVyIHRvIGJlIGluaXRpYWxpemVkCi0gKgotICogRWZmZWN0OgotICog IEZpbmRzIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBpbiB0aGUgbW9kdWxlIGluZm9ybWF0aW9uLCBh bmQgZmlsbHMgaW4KLSAqIHRoZSBwcm92aWRlZCBsZHJfc2VjdGlvbl9pbmZvIHN0cnVjdHVyZS4K LSAqCi0gKiBSZXR1cm5zOgotICogIFRSVUUgZm9yIHN1Y2Nlc3MsIEZBTFNFIGZvciBzZWN0aW9u IG5vdCBmb3VuZAotICovCi1leHRlcm4gaW50IGRsb2FkX2dldF9zZWN0aW9uX2luZm8odm9pZCAq bWluZm8sCi0JCQkJICBjb25zdCBjaGFyICpzZWN0aW9uX25hbWUsCi0JCQkJICBjb25zdCBzdHJ1 Y3QgbGRyX3NlY3Rpb25faW5mbwotCQkJCSAgKipjb25zdCBzZWN0aW9uX2luZm8pOwotCi0vKgot ICogUHJvY2VkdXJlIGRsb2FkX2dldF9zZWN0aW9uCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBt aW5mbyAgICAgICBIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUK LSAqICBzZWN0aW9uX2luZm8gUG9pbnRlciB0byBhIHNlY3Rpb24gaW5mbyBzdHJ1Y3R1cmUgZm9y IHRoZSBkZXNpcmVkIHNlY3Rpb24KLSAqICBzZWN0aW9uX2RhdGEgQnVmZmVyIHRvIGNvbnRhaW4g dGhlIHNlY3Rpb24gaW5pdGlhbGl6ZWQgZGF0YQotICoKLSAqIEVmZmVjdDoKLSAqICBDb3BpZXMg dGhlIGluaXRpYWxpemVkIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBpbnRvIHRoZQot ICogc3VwcGxpZWQgYnVmZmVyLgotICoKLSAqIFJldHVybnM6Ci0gKiAgVFJVRSBmb3Igc3VjY2Vz cywgRkFMU0UgZm9yIHNlY3Rpb24gbm90IGZvdW5kCi0gKi8KLWV4dGVybiBpbnQgZGxvYWRfZ2V0 X3NlY3Rpb24odm9pZCAqbWluZm8sCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9p bmZvICpzZWN0aW9uX2luZm8sCi0JCQkgICAgIHZvaWQgKnNlY3Rpb25fZGF0YSk7Ci0KLS8qCi0g KiBQcm9jZWR1cmUgZGxvYWRfbW9kdWxlX2Nsb3NlCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBt aW5mbyAgICAgICBIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUK LSAqCi0gKiBFZmZlY3Q6Ci0gKiAgUmVsZWFzZXMgYW55IHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRo IHRoZSBtb2R1bGUgaGFuZGxlLiAgT24gcmV0dXJuLAotICogdGhlIG1vZHVsZSBoYW5kbGUgaXMg aW52YWxpZC4KLSAqCi0gKiBSZXR1cm5zOgotICogIFplcm8gZm9yIHN1Y2Nlc3MuIE9uIGVycm9y LCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4KLSAqIEluZGl2aWR1 YWwgZXJyb3JzIGFyZSByZXBvcnRlZCB1c2luZyBzeW1zLT5lcnJvcl9yZXBvcnQoKSwgd2hlcmUg c3ltcyB3YXMKLSAqIGFuIGFyZ3VtZW50IHRvIGRsb2FkX21vZHVsZV9vcGVuCi0gKi8KLWV4dGVy biB2b2lkIGRsb2FkX21vZHVsZV9jbG9zZSh2b2lkICptaW5mbyk7Ci0KLSNlbmRpZiAvKiBfR0VU U0VDVElPTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL2doLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVk ZS9kc3BicmlkZ2UvZ2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzMDNiNC4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2UvZ2guaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBnaC5oCi0gKgot ICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBw cm9jZXNzb3JzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1l bnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMg UFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAot ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgR0hfCi0jZGVmaW5lIEdIXwotI2luY2x1ZGUg PGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqZ2hf Y3JlYXRlKHUzMiB2YWxfc2l6ZSwKLQl1MzIgKCpoYXNoKShjb25zdCB2b2lkICopLCBib29sICgq bWF0Y2gpKGNvbnN0IHZvaWQgKiwKLQljb25zdCB2b2lkICopLCB2b2lkICgqZGVsZXRlKSAodm9p ZCAqKSk7Ci1leHRlcm4gdm9pZCBnaF9kZWxldGUoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hf dGFiKTsKLWV4dGVybiB2b2lkICpnaF9maW5kKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3Rh YiwgY29uc3Qgdm9pZCAqa2V5KTsKLWV4dGVybiB2b2lkICpnaF9pbnNlcnQoc3RydWN0IGdoX3Rf aGFzaF90YWIgKmhhc2hfdGFiLCBjb25zdCB2b2lkICprZXksCi0JCSAgICAgICBjb25zdCB2b2lk ICp2YWx1ZSk7Ci0jaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQotdm9pZCBnaF9p dGVyYXRlKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwKLQl2b2lkICgqY2FsbGJhY2sp KHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqdXNlcl9kYXRhKTsKLSNlbmRpZgotI2VuZGlmIC8qIEdI XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL2hvc3Rfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9ob3N0X29zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNDQxZGIu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL2hvc3Rfb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBob3N0 X29zLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZv ciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIElu c3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tB R0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1Q TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgX0hPU1RfT1NfSF8KLSNkZWZpbmUg X0hPU1RfT1NfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4 L3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51 eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxz Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgot I2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRl IDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5o PgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4K LSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9vbWFwLW1haWxi b3guaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1 c2guaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotCi0vKiBUT0RPIC0tIFJlbW92 ZSwgb25jZSBvbWFwLWlvbW11IGlzIHVzZWQgKi8KLSNkZWZpbmUgSU5UX0RTUF9NTVVfSVJRICAg ICAgICAoMjggKyBOUl9JUlFTKQotCi0jZGVmaW5lIFBSQ01fVkREMSAxCi0KLWV4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwX2RzcGJyaWRnZV9kZXY7Ci1leHRlcm4gc3RydWN0IGRl dmljZSAqYnJpZGdlOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pby5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDc1MDU3MTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICog aW8uaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9y IFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBUaGUgaW8gbW9kdWxlIG1hbmFnZXMgSU8gYmV0 d2VlbiBDSE5MIGFuZCBtc2dfY3RybC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBU ZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwot ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJ UyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBP UgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIElPXwotI2RlZmluZSBJ T18KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmdkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdl L2RldmRlZnMuaD4KLQotLyogSU8gT2JqZWN0czogKi8KLXN0cnVjdCBpb19tZ3I7Ci0KLS8qIElP IG1hbmFnZXIgYXR0cmlidXRlczogKi8KLXN0cnVjdCBpb19hdHRycyB7Ci0JdTggYmlycTsJCS8q IENoYW5uZWwncyBJL08gSVJRIG51bWJlci4gKi8KLQlib29sIGlycV9zaGFyZWQ7CS8qIFRSVUUg aWYgdGhlIElSUSBpcyBzaGFyZWFibGUuICovCi0JdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCBXb3Jk IHNpemUuICovCi0JdTMyIHNobV9iYXNlOwkJLyogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHNo YXJlZCBtZW1vcnkuICovCi0JdTMyIHNtX2xlbmd0aDsJCS8qIFNpemUgKGluIGJ5dGVzKSBvZiBz aGFyZWQgbWVtb3J5LiAqLwotfTsKLQotCi0vKgotICogID09PT09PT09IGlvX2NyZWF0ZSA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhbiBJTyBtYW5hZ2VyIG9iamVjdCwg cmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIElPIGJldHdlZW4KLSAqICAgICAgQ0hOTCBhbmQgbXNn X2N0cmwuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgY2hhbm5lbF9tZ3I6ICAgICAgICAgICAg TG9jYXRpb24gdG8gc3RvcmUgYSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IG9uCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KLSAqICAgICAgaGRldl9vYmo6ICAgICAgICAg ICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCi0gKiAgICAgIG1ncl9hdHRydHM6ICAgICAg ICAgICAgICBJTyBtYW5hZ2VyIGF0dHJpYnV0ZXMuCi0gKiAgICAgIG1ncl9hdHRydHMtPmJpcnE6 ICAgICAgICBJL08gSVJRIG51bWJlci4KLSAqICAgICAgbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDog ICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCi0gKiAgICAgIG1ncl9hdHRydHMtPndv cmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgotICogIFJl dHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7Ci0gKiAgICAgIC1FTk9N RU06ICAgICAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNl cy4KLSAqICAgICAgLUVJTzogICAgICAgICAgICAgVW5hYmxlIHRvIHBsdWcgY2hhbm5lbCBJU1Ig Zm9yIGNvbmZpZ3VyZWQgSVJRLgotICogICAgICAtRUlOVkFMOiBJbnZhbGlkIERTUCB3b3JkIHNp emUgKG11c3QgYmUgPiAwKS4KLSAqICAgICAgICAgICAgICAgSW52YWxpZCBiYXNlIGFkZHJlc3Mg Zm9yIERTUCBjb21tdW5pY2F0aW9ucy4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgaW9fbWFuICE9 IE5VTEwuCi0gKiAgICAgIG1ncl9hdHRydHMgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1l eHRlcm4gaW50IGlvX2NyZWF0ZShzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLAotCQkJICAgIHN0cnVj dCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW9fYXR0cnMgKm1n cl9hdHRydHMpOwotCi0vKgotICogID09PT09PT09IGlvX2Rlc3Ryb3kgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBEZXN0cm95IHRoZSBJTyBtYW5hZ2VyLgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSU9tYW5hZ2VyIG9iamVjdC4KLSAqICBSZXR1cm5z OgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgaGlvX21n ciB3YXMgaW52YWxpZC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4g aW50IGlvX2Rlc3Ryb3koc3RydWN0IGlvX21nciAqaGlvX21ncik7Ci0KLSNlbmRpZiAvKiBDSE5M XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bi cmlkZ2UvaW9fc20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAzZmYxMi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uv aW9fc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogaW9fc20uaAot ICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9N QVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBJTyBkaXNwYXRjaGVyIGZvciBhIHNoYXJlZCBtZW1vcnkg Y2hhbm5lbCBkcml2ZXIuCi0gKiBBbHNvLCBpbmNsdWRlcyBtYWNyb3MgdG8gc2ltdWxhdGUgc2ht IHZpYSBwb3J0IGlvIGNhbGxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgSU9TTV8KLSNkZWZpbmUgSU9T TV8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9fY2hubF9zbS5oPgotI2luY2x1ZGUgPGRzcGJyaWRn ZS9ob3N0X29zLmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaW8uaD4KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvbWJ4X3NoLmg+CS8qIHNoYXJlZCBtYWlsYm94IGNvZGVzICovCi0KLS8qIE1hZ2ljIGNv ZGUgdXNlZCB0byBkZXRlcm1pbmUgaWYgRFNQIHNpZ25hbGVkIGV4Y2VwdGlvbi4gKi8KLSNkZWZp bmUgREVIX0JBU0UgICAgICAgIE1CWF9ERUhfQkFTRQotI2RlZmluZSBERUhfTElNSVQgICAgICAg TUJYX0RFSF9MSU1JVAotCi0jZGVmaW5lIElPX0lOUFVUICAgICAgICAgICAgMAotI2RlZmluZSBJ T19PVVRQVVQgICAgICAgICAgIDEKLSNkZWZpbmUgSU9fU0VSVklDRSAgICAgICAgICAyCi0KLSNp ZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUwotLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIE9Q UHMgdGhhdCBhcmUgc3VwcG9ydGVkICovCi1leHRlcm4gczMyIGRzcF9tYXhfb3BwczsKLS8qIFRo ZSBWZGQxIG9wcCB0YWJsZSBpbmZvcm1hdGlvbiAqLwotZXh0ZXJuIHUzMiB2ZGQxX2RzcF9mcmVx WzZdWzRdOwotI2VuZGlmCi0KLS8qCi0gKiAgPT09PT09PT0gaW9fY2FuY2VsX2NobmwgPT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDYW5jZWwgSU8gb24gYSBnaXZlbiBjaGFubmVsLgot ICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhpb19tZ3I6ICAgICBJTyBNYW5hZ2VyLgotICogICAg ICBjaG5sOiAgICAgICBJbmRleCBvZiBjaGFubmVsIHRvIGNhbmNlbCBJTyBvbi4KLSAqICBSZXR1 cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxpZCBoaW9fbWdyLgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiB2b2lkIGlvX2NhbmNlbF9jaG5sKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3Is IHUzMiBjaG5sKTsKLQotLyoKLSAqICA9PT09PT09PSBpb19kcGMgPT09PT09PT0KLSAqICBQdXJw b3NlOgotICogICAgICBEZWZlcnJlZCBwcm9jZWR1cmUgY2FsbCBmb3Igc2hhcmVkIG1lbW9yeSBj aGFubmVsIGRyaXZlciBJU1IuICBDYXJyaWVzCi0gKiAgICAgIG91dCB0aGUgZGlzcGF0Y2ggb2Yg SS9PLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHJlZl9kYXRhOiAgIFBvaW50ZXIgdG8gcmVm ZXJlbmNlIGRhdGEgcmVnaXN0ZXJlZCB2aWEgYSBjYWxsIHRvCi0gKiAgICAgICAgICAgICAgICAg IERQQ19DcmVhdGUoKS4KLSAqICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBNdXN0 IG5vdCBibG9jay4KLSAqICAgICAgTXVzdCBub3QgYWNxdWlyZSByZXNvdXJjZXMuCi0gKiAgICAg IEFsbCBkYXRhIHRvdWNoZWQgbXVzdCBiZSBsb2NrZWQgaW4gbWVtb3J5IGlmIHJ1bm5pbmcgaW4g a2VybmVsIG1vZGUuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgTm9uLXByZWVtcHRpYmxlIChidXQg aW50ZXJydXB0aWJsZSkuCi0gKi8KLWV4dGVybiB2b2lkIGlvX2RwYyh1bnNpZ25lZCBsb25nIHJl Zl9kYXRhKTsKLQotLyoKLSAqICA9PT09PT09PSBpb19tYm94X21zZyA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKglNYWluIG1lc3NhZ2UgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJp ZGdlIGNoYW5uZWwgbWFuYWdlci4KLSAqCURldGVybWluZSBpZiB0aGlzIG1lc3NhZ2UgaXMgb3Vy cywgdGhlbiBzY2hlZHVsZXMgYSBEUEMgdG8KLSAqCWRpc3BhdGNoIEkvTy4KLSAqICBQYXJhbWV0 ZXJzOgotICoJc2VsZjoJUG9pbnRlciB0byBpdHMgb3duIG5vdGlmaWVyX2Jsb2NrIHN0cnVjdC4K LSAqCWxlbjoJTGVuZ3RoIG9mIG1lc3NhZ2UuCi0gKgltc2c6CU1lc3NhZ2UgY29kZSByZWNlaXZl ZC4KLSAqICBSZXR1cm5zOgotICoJTk9USUZZX09LIGlmIGhhbmRsZWQ7IE5PVElGWV9CQUQgb3Ro ZXJ3aXNlLgotICovCi1pbnQgaW9fbWJveF9tc2coc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxm LCB1bnNpZ25lZCBsb25nIGxlbiwgdm9pZCAqbXNnKTsKLQotLyoKLSAqICA9PT09PT09PSBpb19y ZXF1ZXN0X2NobmwgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXF1ZXN0IEkvTyBm cm9tIHRoZSBEU1AuIFNldHMgZmxhZ3MgaW4gc2hhcmVkIG1lbW9yeSwgdGhlbiBpbnRlcnJ1cHRz Ci0gKiAgICAgIHRoZSBEU1AuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGlvX21ncjogICAg IElPIG1hbmFnZXIgaGFuZGxlLgotICogICAgICBwY2hubDogICAgICBQdHIgdG8gdGhlIGNoYW5u ZWwgcmVxdWVzdGluZyBJL08uCi0gKiAgICAgIGlvX21vZGU6ICAgICAgTW9kZSBvZiBjaGFubmVs OiB7SU9fSU5QVVQgfCBJT19PVVRQVVR9LgotICogIFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6Ci0g KiAgICAgIHBjaG5sICE9IE5VTEwKLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gdm9pZCBpb19y ZXF1ZXN0X2Nobmwoc3RydWN0IGlvX21nciAqaW9fbWFuYWdlciwKLQkJCSAgICBzdHJ1Y3QgY2hu bF9vYmplY3QgKnBjaG5sLAotCQkJICAgIHU4IGlvX21vZGUsIHUxNiAqbWJ4X3ZhbCk7Ci0KLS8q Ci0gKiAgPT09PT09PT0gaW9zbV9zY2hlZHVsZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIFNjaGVkdWxlIERQQyBmb3IgSU8uCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgcGlvX21n cjogICAgIFB0ciB0byBhIEkvTyBtYW5hZ2VyLgotICogIFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIHBjaG5sICE9IE5VTEwKLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gdm9pZCBp b3NtX3NjaGVkdWxlKHN0cnVjdCBpb19tZ3IgKmlvX21hbmFnZXIpOwotCi0vKgotICogID09PT09 PT09IGlvX3NoX21zZXR0aW5nID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2V0cyB0 aGUgc2hhcmVkIG1lbW9yeSBzZXR0aW5nCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGlvX21n cjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KLSAqICAgICAgZGVzYzogICAgICAg ICAgICAgU2hhcmVkIG1lbW9yeSB0eXBlCi0gKiAgICAgIHBhcmdzOiAgICAgICAgICBQdHIgdG8g c2htIHNldHRpbmcKLSAqICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBoaW9fbWdy ICE9IE5VTEwKLSAqICAgICAgcGFyZ3MgIT0gTlVMTAotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVy biBpbnQgaW9fc2hfbXNldHRpbmcoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTggZGVzYywgdm9p ZCAqcGFyZ3MpOwotCi0vKgotICogIE1pc2MgZnVuY3Rpb25zIGZvciB0aGUgQ0hOTF9JTyBzaGFy ZWQgbWVtb3J5IGxpYnJhcnk6Ci0gKi8KLQotLyogTWF4aW11bSBjaGFubmVsIGJ1ZnNpemUgdGhh dCBjYW4gYmUgdXNlZC4gKi8KLWV4dGVybiB1MzIgaW9fYnVmX3NpemUoc3RydWN0IGlvX21nciAq aGlvX21ncik7Ci0KLSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCi0vKgotICog ID09PT09PT09cHJpbnRfZHNwX3RyYWNlX2J1ZmZlciA9PT09PT09PQotICogICAgICBQcmludCBE U1AgdHJhY2VidWZmZXIuCi0gKi8KLWV4dGVybiBpbnQgcHJpbnRfZHNwX3RyYWNlX2J1ZmZlcihz dHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0Ci0JCQkJCSAqaGJyaWRnZV9jb250ZXh0KTsKLQotaW50 IGR1bXBfZHNwX3N0YWNrKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0 KTsKLQotdm9pZCBkdW1wX2RsX21vZHVsZXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJp ZGdlX2NvbnRleHQpOwotCi12b2lkIHByaW50X2RzcF9kZWJ1Z190cmFjZShzdHJ1Y3QgaW9fbWdy ICpoaW9fbWdyKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogSU9TTV8gKi8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tYnhfc2guaCBiL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tYnhfc2guaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjYjM5NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWJ4X3NoLmgKKysrIC9kZXYv bnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIG1ieF9zaC5oCi0gKgotICogRFNQLUJJT1Mg QnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgot ICoKLSAqIERlZmluaXRpb25zIGZvciBzaGFyZWQgbWFpbGJveCBjbWQvZGF0YSB2YWx1ZXMuKHVz ZWQgb24gYm90aAotICogdGhlIEdQUCBhbmQgRFNQIHNpZGVzKS4KLSAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5Z IEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJ TUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotLyoKLSAqICBCcmlk Z2UgdXNhZ2Ugb2YgT01BUCBtYWlsYm94IDEgaXMgZGV0ZXJtaW5lZCBieSB0aGUgImNsYXNzIiBv ZiB0aGUKLSAqICBtYWlsYm94IGludGVycnVwdCdzIGNtZCB2YWx1ZSByZWNlaXZlZC4gVGhlIGNs YXNzIHZhbHVlIGFyZSBkZWZpbmVkCi0gKiAgYXMgYSBiaXQgKDEwIHRocnUgMTUpIGJlaW5nIHNl dC4KLSAqCi0gKiAgTm90ZTogT25seSAxNiBiaXRzIG9mIGVhY2ggaXMgdXNlZC4gT3RoZXIgMTYg Yml0IGRhdGEgcmVnIGF2YWlsYWJsZS4KLSAqCi0gKiAgIDE2IGJpdCBNYnggYml0IGRlZm5zOgot ICoKLSAqIEEpLiBFeGNlcHRpb24vRXJyb3IgaGFuZGxpbmcgKE1vZHVsZSBERUgpIDogY2xhc3Mg PSAwLgotICoKLSAqICAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCi0gKiAgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICB8MHwwfDB8MHwwfDB8eHx4fHh8 eHx4fHh8eHx4fHh8eHwKLSAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g KiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZpYykgfAotICoKLSAqCi0gKiBCOiBEU1At RE1BIGxpbmsgZHJpdmVyIGNoYW5uZWxzIChERE1BKSA6IGNsYXNzID0gMS4KLSAqCi0gKiAgICAx NSAgICAgICAgIDEwICAgICAgICAgICAgICAgICAgMAotICogICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSAqICAgfDB8MHwwfDB8MHwxfGJ8YnxifGJ8YnxjfGN8Y3xjfGN8Ci0g KiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICB8ICAoY2xhc3MpICB8 IChtb2R1bGUgc3BlY2lmaWMpIHwKLSAqCi0gKiAgIHdoZXJlIGIgLT4gYnVmZmVyIGluZGV4ICAo MzIgRERNQSBidWZmZXJzL2NobmwgbWF4KQotICogICAgICAgICBjIC0+IGNoYW5uZWwgSWQgICAg KDMyIERETUEgY2hubHMgbWF4KQotICoKLSAqCi0gKiBDOiBQcm9jLWNvcHkgbGluayBkcml2ZXIg Y2hhbm5lbHMgKFBDUFkpIDogY2xhc3MgPSAyLgotICoKLSAqICAgIDE1ICAgICAgICAgMTAgICAg ICAgICAgICAgICAgICAwCi0gKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot ICogICB8MHwwfDB8MHwxfDB8eHx4fHh8eHx4fHh8eHx4fHh8eHwKLSAqICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZp YykgfAotICoKLSAqCi0gKiBEOiBaZXJvLWNvcHkgbGluayBkcml2ZXIgY2hhbm5lbHMgKEREWkMp IDogY2xhc3MgPSA0LgotICoKLSAqICAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAw Ci0gKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICB8MHwwfDB8MXww fDB8eHx4fHh8eHx4fGN8Y3xjfGN8Y3wKLSAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZpYykgfAotICoKLSAqICAg d2hlcmUgeCAtPiBub3QgdXNlZAotICogICAgICAgICBjIC0+IGNoYW5uZWwgSWQgICAgKDMyIFpD UFkgY2hubHMgbWF4KQotICoKLSAqCi0gKiBFOiBQb3dlciBtYW5hZ2VtZW50IDogY2xhc3MgPSA4 LgotICoKLSAqICAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCi0gKiAgIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICB8MHwwfDF8MHwwfDB8eHx4fHh8eHx4 fGN8Y3xjfGN8Y3wKLQotICogCTAwMTAgMDB4eCB4eHhjIGNjY2MKLSAqCTAwMTAgMDBubiBwcHBw IHFxcXEKLSAqCW5uOgotICoJMDAgPSByZXNlcnZlZAotICoJMDEgPSBwd3Igc3RhdGUgY2hhbmdl Ci0gKgkxMCA9IG9wcCBwcmUtY2hhbmdlCi0gKgkxMSA9IG9wcCBwb3N0LWNoYW5nZQotICoKLSAq CWlmIG5uID0gcHdyIHN0YXRlIGNoYW5nZToKLSAqCXBwcHAgPSBkb24ndCBjYXJlCi0gKglxcXFx OgotICoJMDAxMCA9IGhpYmVybmF0ZQotICoJMDAxMCAwMDAxIDAwMDAgMDAxMAotICoJMDExMCA9 IHJldGVudGlvbgotICoJMDAxMCAwMDAxIDAwMDAgMDExMAotICoJb3RoZXJzIHJlc2VydmVkCi0g KgotICoJaWYgbm4gPSBvcHAgcHJlLWNoYW5nZToKLSAqCXBwcHAgPSBjdXJyZW50IG9wcAotICoJ cXFxcSA9IG5leHQgb3BwCi0gKgotICoJaWYgbm4gPSBvcHAgcG9zdC1jaGFuZ2U6Ci0gKglwcHBw ID0gcHJldiBvcHAKLSAqCXFxcXEgPSBjdXJyZW50IG9wcAotICoKLSAqICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZp YykgfAotICoKLSAqICAgd2hlcmUgeCAtPiBub3QgdXNlZAotICogICAgICAgICBjIC0+IFBvd2Vy IG1hbmFnZW1lbnQgY29tbWFuZAotICoKLSAqLwotCi0jaWZuZGVmIF9NQlhfU0hfSAotI2RlZmlu ZSBfTUJYX1NIX0gKLQotI2RlZmluZSBNQlhfUENQWV9DTEFTUyAgICAgMHgwODAwCS8qIFBST0Mt Q09QWSAgIiAqLwotI2RlZmluZSBNQlhfUE1fQ0xBU1MgICAgICAgMHgyMDAwCS8qIFBvd2VyIE1h bmFnZW1lbnQgKi8KLSNkZWZpbmUgTUJYX0RCR19DTEFTUyAgICAgIDB4NDAwMAkvKiBGb3IgZGVi dWdnaW5nIHB1cnBvc2UgKi8KLQotLyoKLSAqIEV4Y2VwdGlvbiBIYW5kbGVyIGNvZGVzCi0gKiBN YWdpYyBjb2RlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIERTUCBzaWduYWxlZCBleGNlcHRpb24uCi0g Ki8KLSNkZWZpbmUgTUJYX0RFSF9CQVNFICAgICAgICAweDAKLSNkZWZpbmUgTUJYX0RFSF9VU0VS U19CQVNFICAweDEwMAkvKiAyNTYgKi8KLSNkZWZpbmUgTUJYX0RFSF9MSU1JVCAgICAgICAweDNG RgkvKiAxMDIzICovCi0jZGVmaW5lIE1CWF9ERUhfUkVTRVQgICAgICAgMHgxMDEJLyogRFNQIFJF U0VUIChERUgpICovCi0KLS8qCi0gKiAgTGluayBkcml2ZXIgY29tbWFuZC9zdGF0dXMgY29kZXMu Ci0gKi8KLQotLyogIFBvd2VyIE1hbmFnZW1lbnQgQ29tbWFuZHMgKi8KLSNkZWZpbmUgTUJYX1BN X0RTUElETEUgICAgICAgICAgICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHgwKQotI2RlZmluZSBN QlhfUE1fRFNQV0FLRVVQICAgICAgICAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDEpCi0jZGVm aW5lIE1CWF9QTV9FTUVSR0VOQ1lTTEVFUCAgICAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4MikK LSNkZWZpbmUgTUJYX1BNX1NFVFBPSU5UX1BSRU5PVElGWSAgICAgICAoTUJYX1BNX0NMQVNTICsg MHg2KQotI2RlZmluZSBNQlhfUE1fU0VUUE9JTlRfUE9TVE5PVElGWSAgICAgIChNQlhfUE1fQ0xB U1MgKyAweDcpCi0jZGVmaW5lIE1CWF9QTV9EU1BSRVRFTlRJT04gICAgICAgIChNQlhfUE1fQ0xB U1MgKyAweDgpCi0jZGVmaW5lIE1CWF9QTV9EU1BISUJFUk5BVEUgICAgICAgIChNQlhfUE1fQ0xB U1MgKyAweDkpCi0jZGVmaW5lIE1CWF9QTV9ISUJFUk5BVEVfRU4gICAgICAgIChNQlhfUE1fQ0xB U1MgKyAweEEpCi0jZGVmaW5lIE1CWF9QTV9PUFBfUkVRICAgICAgICAgICAgICAgICAgKE1CWF9Q TV9DTEFTUyArIDB4QikKLQotLyogQnJpZGdlIERlYnVnIENvbW1hbmRzICovCi0jZGVmaW5lIE1C WF9EQkdfU1lTUFJJTlRGICAgICAgIChNQlhfREJHX0NMQVNTICsgMHgwKQotCi0jZW5kaWYgLyog X01CWF9TSF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5j bHVkZS9kc3BicmlkZ2UvbWVtZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL21lbWRlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NzhkMmM1ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVk ZS9kc3BicmlkZ2UvbWVtZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoK LSAqIG1lbWRlZnMuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5j dGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBHbG9iYWwgTUVNIGNvbnN0YW50 cyBhbmQgdHlwZXMsIHNoYXJlZCBiZXR3ZWVuIEJyaWRnZSBkcml2ZXIgYW5kIERTUCBBUEkuCi0g KgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICog VGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycn IEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN RVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICov Ci0KLSNpZm5kZWYgTUVNREVGU18KLSNkZWZpbmUgTUVNREVGU18KLQotLyoKLSAqICBNRU1fVklS VFVBTFNFR0lEIGlzIHVzZWQgYnkgTm9kZSAmIFN0cm0gdG8gYWNjZXNzIHZpcnR1YWwgYWRkcmVz cyBzcGFjZSBpbgotICogIHRoZSBjb3JyZWN0IGNsaWVudCBwcm9jZXNzIGNvbnRleHQuCi0gKi8K LSNkZWZpbmUgTUVNX1NFVFZJUlRVQUxTRUdJRCAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBNRU1f R0VUVklSVFVBTFNFR0lEICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIE1FTV9NQVNLVklSVFVBTFNF R0lEICAgIChNRU1fU0VUVklSVFVBTFNFR0lEIHwgTUVNX0dFVFZJUlRVQUxTRUdJRCkKLQotI2Vu ZGlmIC8qIE1FTURFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2UvbWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv aW5jbHVkZS9kc3BicmlkZ2UvbWdyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3 YjAzMTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUv ZHNwYnJpZGdlL21nci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gKiBt Z3IuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9y IFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVs ZSBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1 bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJ UyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVE Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBNR1JfCi0jZGVmaW5lIE1HUl8KLQotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9tZ3Jwcml2Lmg+Ci0KLSNkZWZpbmUgTUFYX0VWRU5UUyAzMgotCi0v KgotICogID09PT09PT09IG1ncl93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzID09PT09PT09Ci0gKiAg UHVycG9zZToKLSAqICAgICAgQmxvY2sgb24gYW55IEJyaWRnZSBldmVudChzKQotICogIFBhcmFt ZXRlcnM6Ci0gKiAgICAgIGFub3RpZmljYXRpb25zICA6IGFycmF5IG9mIHBvaW50ZXJzIHRvIG5v dGlmaWNhdGlvbiBvYmplY3RzLgotICogICAgICBjb3VudCAgICAgICAgICA6IG51bWJlciBvZiBl bGVtZW50cyBpbiBhYm92ZSBhcnJheQotICogICAgICBwdV9pbmRleCAgICAgICAgIDogaW5kZXgg b2Ygc2lnbmFsZWQgZXZlbnQgb2JqZWN0Ci0gKiAgICAgIHV0aW1lb3V0ICAgICAgICA6IHRpbWVv dXQgaW50ZXJ2YWwgaW4gbWlsbGlzZW9jbmRzCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMCAgICAg ICAgIDogU3VjY2Vzcy4KLSAqICAgICAgLUVUSU1FICAgIDogV2FpdCB0aW1lZCBvdXQuICpwdV9p bmRleCBpcyB1bmRldGVybWluZWQuCi0gKiAgRGV0YWlsczoKLSAqLwotCi1pbnQgbWdyX3dhaXRf Zm9yX2JyaWRnZV9ldmVudHMoc3RydWN0IGRzcF9ub3RpZmljYXRpb24KLQkJCQkgICAgICAqKmFu b3RpZmljYXRpb25zLAotCQkJCSAgICAgIHUzMiBjb3VudCwgdTMyICpwdV9pbmRleCwKLQkJCQkg ICAgICB1MzIgdXRpbWVvdXQpOwotCi0vKgotICogID09PT09PT09IG1ncl9jcmVhdGUgPT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDcmVhdGVzIHRoZSBNYW5hZ2VyIE9iamVjdC4gVGhp cyBpcyBkb25lIGR1cmluZyB0aGUgZHJpdmVyIGxvYWRpbmcuCi0gKiAgICAgIFRoZXJlIGlzIG9u bHkgb25lIE1hbmFnZXIgT2JqZWN0IGluIHRoZSBEU1AvQklPUyBCcmlkZ2UuCi0gKiAgUGFyYW1l dGVyczoKLSAqICAgICAgbWdyX29iajogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNyZWF0ZWQg TUdSIE9iamVjdCBoYW5kbGUuCi0gKiAgICAgIGRldl9ub2RlX29iajogICAgICAgRGV2aWNlIG9i amVjdCBhcyBrbm93biB0byB0aGUgc3lzdGVtLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAg ICAgICBTdWNjZXNzCi0gKiAgICAgIC1FTk9NRU06ICAgIEZhaWxlZCB0byBDcmVhdGUgdGhlIE9i amVjdAotICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBGYWlsdXJlCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQotICogICAgICBtZ3Jfb2JqICE9 IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqICAgICAgMDogICAgICAgICptZ3Jfb2JqIGlzIGEgdmFs aWQgTUdSIGludGVyZmFjZSB0byB0aGUgZGV2aWNlLgotICogICAgICAgICAgICAgICAgICAgICAg TUdSIE9iamVjdCBzdG9yZXMgdGhlIERDRCBNYW5hZ2VyIEhhbmRsZS4KLSAqICAgICAgICAgICAg ICAgICAgICAgIE1HUiBPYmplY3Qgc3RvcmVkIGluIHRoZSBSZWdzaXRyeS4KLSAqICAgICAgITA6 ICAgICAgIE1HUiBPYmplY3Qgbm90IGNyZWF0ZWQKLSAqICBEZXRhaWxzOgotICogICAgICBEQ0Qg RGxsIGlzIGxvYWRlZCBhbmQgTUdSIE9iamVjdCBzdG9yZXMgdGhlIGhhbmRsZSBvZiB0aGUgRExM LgotICovCi1leHRlcm4gaW50IG1ncl9jcmVhdGUoc3RydWN0IG1ncl9vYmplY3QgKiptZ3Jfb2Jq LAotCQkJICAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7Ci0KLS8qCi0gKiAg PT09PT09PT0gbWdyX2Rlc3Ryb3kgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEZXN0 cm95cyB0aGUgTUdSIG9iamVjdC4gQ2FsbGVkIHVwb24gZHJpdmVyIHVubG9hZGluZy4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBobWdyX29iajogICAgIEhhbmRsZSB0byBNYW5hZ2VyIG9iamVj dCAuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgICAg ICAgICAgICAgICAgICBEQ0QgTWFuYWdlciBmcmVlZDsgTUdSIE9iamVjdCBkZXN0cm95ZWQ7Ci0g KiAgICAgICAgICAgICAgICAgICAgICBNR1IgT2JqZWN0IGRlbGV0ZWQgZnJvbSB0aGUgUmVnaXN0 cnkuCi0gKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8gZGVzdHJveSBNR1IgT2JqZWN0Ci0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQotICogICAg ICBobWdyX29iaiBpcyBhIHZhbGlkIE1HUiBoYW5kbGUgLgotICogIEVuc3VyZXM6Ci0gKiAgICAg IDA6ICAgICAgICBNR1IgT2JqZWN0IGRlc3Ryb3llZCBhbmQgaG1ncl9vYmogaXMgSW52YWxpZCBN R1IKLSAqICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZS4KLSAqLwotZXh0ZXJuIGludCBtZ3Jf ZGVzdHJveShzdHJ1Y3QgbWdyX29iamVjdCAqaG1ncl9vYmopOwotCi0vKgotICogID09PT09PT09 IG1ncl9lbnVtX25vZGVfaW5mbyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEVudW1l cmF0ZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgbm9kZXMgY29uZmln dXJlZAotICogICAgICBpbiB0aGUgbm9kZSBkYXRhYmFzZS4KLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBub2RlX2lkOiAgICAgICAgICAgICAgVGhlIG5vZGUgaW5kZXggKGJhc2UgMCkuCi0gKiAg ICAgIHBuZGJfcHJvcHM6ICAgICAgICAgIFB0ciB0byB0aGUgZHNwX25kYnByb3BzIHN0cnVjdHVy ZSBmb3Igb3V0cHV0LgotICogICAgICB1bmRiX3Byb3BzX3NpemU6ICAgICAgU2l6ZSBvZiB0aGUg ZHNwX25kYnByb3BzIHN0cnVjdHVyZS4KLSAqICAgICAgcHVfbnVtX25vZGVzOiAgICAgICAgIExv Y2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2Ygbm9kZXMgY29uZmlndXJlZAotICogICAgICAgICAg ICAgICAgICAgICAgICAgIGluIHRoZSBkYXRhYmFzZSB3aWxsIGJlIHJldHVybmVkLgotICogIFJl dHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVJTlZBTDog ICAgUGFyYW1ldGVyIG5vZGVfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2Ygbm9kZXMuCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXRyZWQgaW4gdGhlIHN5c3RlbQotICogICAg ICAtRUlEUk06ICBEdXJpbmcgRW51bWVyYXRpb24gdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4K LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBub2RlcyBjb25m aWd1cmVkIG9yIGluIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJv cGVydGllcyBvZiB0aGUgZW51bWVyYXRlZCBub2Rlcy4KLSAqICAgICAgLUVQRVJNOiAgICAgICAg ICBGYWlsZWQgdG8gcXVlcnJ5IHRoZSBOb2RlIERhdGEgQmFzZQotICogIFJlcXVpcmVzOgotICog ICAgICBwTkRCUFJPUFMgaXMgbm90IG51bGwKLSAqICAgICAgdW5kYl9wcm9wc19zaXplID49IHNp emVvZihkc3BfbmRicHJvcHMpCi0gKiAgICAgIHB1X251bV9ub2RlcyBpcyBub3QgbnVsbAotICog ICAgICBNR1IgSW5pdGlhbGl6ZWQgKHJlZnMgPiAwICkKLSAqICBFbnN1cmVzOgotICogICAgICBT VUNDRVNTIG9uIHN1Y2Nlc3NmdWwgcmV0cmVpdmFsIG9mIGRhdGEgYW5kICpwdV9udW1fbm9kZXMg PiAwIE9SCi0gKiAgICAgIERTUF9GQUlMRUQgICYmICpwdV9udW1fbm9kZXMgPT0gMC4KLSAqICBE ZXRhaWxzOgotICovCi1leHRlcm4gaW50IG1ncl9lbnVtX25vZGVfaW5mbyh1MzIgbm9kZV9pZCwK LQkJCQkgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKnBuZGJfcHJvcHMsCi0JCQkJICAgICB1MzIg dW5kYl9wcm9wc19zaXplLAotCQkJCSAgICAgdTMyICpwdV9udW1fbm9kZXMpOwotCi0vKgotICog ID09PT09PT09IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91 dCBhdmFpbGFibGUgRFNQCi0gKiAgICAgIHByb2Nlc3NvcnMKLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBwcm9jZXNzb3JfaWQ6ICAgICAgICAgVGhlIHByb2Nlc3NvciBpbmRleCAoemVyby1iYXNl ZCkuCi0gKiAgICAgIHByb2Nlc3Nvcl9pbmZvOiAgICAgUHRyIHRvIHRoZSBkc3BfcHJvY2Vzc29y aW5mbyBzdHJ1Y3R1cmUgLgotICogICAgICBwcm9jZXNzb3JfaW5mb19zaXplOiBTaXplIG9mIGRz cF9wcm9jZXNzb3JpbmZvIHN0cnVjdHVyZS4KLSAqICAgICAgcHVfbnVtX3Byb2NzOiAgICAgICAg IExvY2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2YgRFNQcyBjb25maWd1cmVkCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgaW4gdGhlIGRhdGFiYXNlIHdpbGwgYmUgcmV0dXJuZWQKLSAqICBS ZXR1cm5zOgotICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FSU5WQUw6 ICAgIFBhcmFtZXRlciBwcm9jZXNzb3JfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2YKLSAqICAg ICAgICAgICAgICAgICAgICAgICAgICBEU1AgUHJvY2Vzc29ycyBpbiB0aGUgc3lzdGVtLgotICog ICAgICAtRVBFUk06ICAgICAgICAgIEZhaWxlZCB0byBxdWVycnkgdGhlIE5vZGUgRGF0YSBCYXNl Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHByb2Nlc3Nvcl9pbmZvIGlzIG5vdCBudWxsCi0gKiAg ICAgIHB1X251bV9wcm9jcyBpcyBub3QgbnVsbAotICogICAgICBwcm9jZXNzb3JfaW5mb19zaXpl ID49IHNpemVvZihkc3BfcHJvY2Vzc29yaW5mbykKLSAqICAgICAgTUdSIEluaXRpYWxpemVkIChy ZWZzID4gMCApCi0gKiAgRW5zdXJlczoKLSAqICAgICAgU1VDQ0VTUyBvbiBzdWNjZXNzZnVsIHJl dHJlaXZhbCBvZiBkYXRhIGFuZCAqcHVfbnVtX3Byb2NzID4gMCBPUgotICogICAgICBEU1BfRkFJ TEVEICYmICpwdV9udW1fcHJvY3MgPT0gMC4KLSAqICBEZXRhaWxzOgotICovCi1leHRlcm4gaW50 IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvKHUzMiBwcm9jZXNzb3JfaWQsCi0JCQkJCSAgc3RydWN0 IGRzcF9wcm9jZXNzb3JpbmZvCi0JCQkJCSAgKnByb2Nlc3Nvcl9pbmZvLAotCQkJCQkgIHUzMiBw cm9jZXNzb3JfaW5mb19zaXplLAotCQkJCQkgIHU4ICpwdV9udW1fcHJvY3MpOwotLyoKLSAqICA9 PT09PT09PSBtZ3JfZXhpdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIERlY3JlbWVu dCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3Vu dCBpcwotICogICAgICAwLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICBSZXF1 aXJlczoKLSAqICAgICAgTUdSIGlzIGluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAgICAg IFdoZW4gcmVmZXJlbmNlIGNvdW50ID09IDAsIE1HUidzIHByaXZhdGUgcmVzb3VyY2VzIGFyZSBm cmVlZC4KLSAqLwotZXh0ZXJuIHZvaWQgbWdyX2V4aXQodm9pZCk7Ci0KLS8qCi0gKiAgPT09PT09 PT0gbWdyX2dldF9kY2RfaGFuZGxlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0 cmlldmVzIHRoZSBNR1IgaGFuZGxlLiBBY2Nlc3NvciBGdW5jdGlvbgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIG1ncl9oYW5kbGU6ICAgICBIYW5kbGUgdG8gdGhlIE1hbmFnZXIgT2JqZWN0Ci0g KiAgICAgIGRjZF9oYW5kbGU6ICAgICBQdHIgdG8gcmVjZWl2ZSB0aGUgRENEIEhhbmRsZS4KLSAq ICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2VzcwotICogICAgICAtRVBFUk06ICAg ICAgRmFpbHVyZSB0byBnZXQgdGhlIEhhbmRsZQotICogIFJlcXVpcmVzOgotICogICAgICBNR1Ig aXMgaW5pdGlhbGl6ZWQuCi0gKiAgICAgIGRjZF9oYW5kbGUgIT0gTlVMTAotICogIEVuc3VyZXM6 Ci0gKiAgICAgIDAgYW5kICpkY2RfaGFuZGxlICE9IE5VTEwgfHwKLSAqICAgICAgLUVQRVJNIGFu ZCAqZGNkX2hhbmRsZSA9PSBOVUxMCi0gKi8KLWV4dGVybiBpbnQgbWdyX2dldF9kY2RfaGFuZGxl KHN0cnVjdCBtZ3Jfb2JqZWN0Ci0JCQkJICAgICAqbWdyX2hhbmRsZSwgdTMyICpkY2RfaGFuZGxl KTsKLQotLyoKLSAqICA9PT09PT09PSBtZ3JfaW5pdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgICAgIEluaXRpYWxpemUgTUdSJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5j ZSBjb3VudCBvbiBlYWNoCi0gKiAgICAgIGNhbGwuIEluaXRpYWxpemVzIHRoZSBEQ0QuCi0gKiAg UGFyYW1ldGVyczoKLSAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBG QUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICog ICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIE1HUiBmdW5jdGlv bnMuCi0gKi8KLWV4dGVybiBib29sIG1ncl9pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogTUdSXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL21ncnByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9tZ3Jwcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNGUzMzcuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdl L21ncnByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBtZ3Jwcml2 LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBU SSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIE1HUiBjb25zdGFudHMgYW5kIHR5cGVz LCBzaGFyZWQgYnkgUFJPQywgTUdSLCBhbmQgRFNQIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp IDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVY UFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU QVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBNR1JQUklW XwotI2RlZmluZSBNR1JQUklWXwotCi0vKgotICogT01BUDE1MTAgc3BlY2lmaWMKLSAqLwotI2Rl ZmluZSBNR1JfTUFYVExCRU5UUklFUyAgMzIKLQotLyogUk0gTUdSIE9iamVjdCAqLwotc3RydWN0 IG1ncl9vYmplY3Q7Ci0KLXN0cnVjdCBtZ3JfdGxiZW50cnkgewotCXUzMiBkc3BfdmlydDsJLyog RFNQIHZpcnR1YWwgYWRkcmVzcyAqLwotCXUzMiBncHBfcGh5czsJLyogR1BQIHBoeXNpY2FsIGFk ZHJlc3MgKi8KLX07Ci0KLS8qCi0gKiAgVGhlIERTUF9QUk9DRVNTT1JFWFRJTkZPIHN0cnVjdHVy ZSBkZXNjcmliZXMgYWRkaXRpb25hbCBleHRlbmRlZAotICogIGNhcGFiaWxpdGllcyBvZiBhIERT UCBwcm9jZXNzb3Igbm90IGV4cG9zZWQgdG8gdXNlci4KLSAqLwotc3RydWN0IG1ncl9wcm9jZXNz b3JleHRpbmZvIHsKLQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gdHlfYmFzaWM7CS8qIHVzZXIg cHJvY2Vzc29yIGluZm8gKi8KLQkvKiBwcml2YXRlIGRzcCBtbXUgZW50cmllcyAqLwotCXN0cnVj dCBtZ3JfdGxiZW50cnkgdHlfdGxiW01HUl9NQVhUTEJFTlRSSUVTXTsKLX07Ci0KLSNlbmRpZiAv KiBNR1JQUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL21zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1 ZGUvZHNwYnJpZGdlL21zZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzg3MTJj Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9tc2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBtc2cuaAot ICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9N QVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBEU1AvQklPUyBCcmlkZ2UgbXNnX2N0cmwgTW9kdWxlLgot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0g KgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBB UyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF UyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotICovCi0KLSNpZm5kZWYgTVNHXwotI2RlZmluZSBNU0dfCi0KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvZGV2ZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2dkZWZzLmg+Ci0KLS8qCi0gKiAg PT09PT09PT0gbXNnX2NyZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0 ZSBhbiBvYmplY3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBv YmplY3RzCi0gKiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4gVGhlIG1zZ19jdHJs IG1hbmFnZXIgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZQotICogICAgICB0aGUgSU8gTWFuYWdlci4K LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBtc2dfbWFuOiAgICAgICAgICAgIExvY2F0aW9uIHRv IHN0b3JlIG1zZ19jdHJsIG1hbmFnZXIgaGFuZGxlIG9uIG91dHB1dC4KLSAqICAgICAgaGRldl9v Ymo6ICAgICAgICAgVGhlIGRldmljZSBvYmplY3QuCi0gKiAgICAgIG1zZ19jYWxsYmFjazogICAg ICAgIENhbGxlZCB3aGVuZXZlciBhbiBSTVNfRVhJVCBtZXNzYWdlIGlzIHJlY2VpdmVkLgotICog IFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIG1zZ19tYW4gIT0gTlVMTC4KLSAqICAg ICAgaGRldl9vYmogIT0gTlVMTC4KLSAqICAgICAgbXNnX2NhbGxiYWNrICE9IE5VTEwuCi0gKiAg RW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBtc2dfY3JlYXRlKHN0cnVjdCBtc2dfbWdyICoqbXNn X21hbiwKLQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJICAgICBtc2df b25leGl0IG1zZ19jYWxsYmFjayk7Ci0KLS8qCi0gKiAgPT09PT09PT0gbXNnX2RlbGV0ZSA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIERlbGV0ZSBhIG1zZ19jdHJsIG1hbmFnZXIgYWxs b2NhdGVkIGluIG1zZ19jcmVhdGUoKS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobXNnX21n cjogICAgICAgICAgICBIYW5kbGUgcmV0dXJuZWQgZnJvbSBtc2dfY3JlYXRlKCkuCi0gKiAgUmV0 dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgaG1zZ19tZ3IuCi0gKiAgRW5zdXJl czoKLSAqLwotZXh0ZXJuIHZvaWQgbXNnX2RlbGV0ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3Ip OwotCi0jZW5kaWYgLyogTVNHXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21zZ2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2dkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDgwYTNmYTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21zZ2RlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICsw LDAgQEAKLS8qCi0gKiBtc2dkZWZzLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1 cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIG1z Z19jdHJsIGNvbnN0YW50cyBhbmQgdHlwZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBNU0dERUZTXwot I2RlZmluZSBNU0dERUZTXwotCi0vKiBtc2dfY3RybCBPYmplY3RzOiAqLwotc3RydWN0IG1zZ19t Z3I7Ci1zdHJ1Y3QgbXNnX3F1ZXVlOwotCi0vKiBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIGNhbGxi YWNrIHRvIGJlIGNhbGxlZCBvbiBSTVNfRVhJVCBtZXNzYWdlIHJlY2VpdmVkICovCi10eXBlZGVm IHZvaWQgKCptc2dfb25leGl0KSAodm9pZCAqaCwgczMyIG5vZGVfc3RhdHVzKTsKLQotI2VuZGlm IC8qIE1TR0RFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv aW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL25sZHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVl NDhjYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2Uvbmxkci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIG5s ZHIuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9y IFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBEU1AvQklPUyBCcmlkZ2UgZHluYW1pYyBsb2Fk ZXIgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3Ry dW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0Ug SVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElF RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+Ci0j aW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGNkZGVmLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbmxkcmRl ZnMuaD4KLQotI2lmbmRlZiBOTERSXwotI2RlZmluZSBOTERSXwotCi1leHRlcm4gaW50IG5sZHJf YWxsb2NhdGUoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiwKLQkJCQl2b2lkICpwcml2X3Jl ZiwgY29uc3Qgc3RydWN0IGRjZF9ub2RlcHJvcHMKLQkJCQkqbm9kZV9wcm9wcywKLQkJCQlzdHJ1 Y3Qgbmxkcl9ub2Rlb2JqZWN0ICoqbmxkcl9ub2Rlb2JqLAotCQkJCWJvb2wgKnBmX3BoYXNlX3Nw bGl0KTsKLQotZXh0ZXJuIGludCBubGRyX2NyZWF0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKipubGRy LAotCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJICAgICAgY29uc3Qg c3RydWN0IG5sZHJfYXR0cnMgKnBhdHRycyk7Ci0KLWV4dGVybiB2b2lkIG5sZHJfZGVsZXRlKHN0 cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmopOwotCi1leHRlcm4gaW50IG5sZHJfZ2V0X2Z4bl9h ZGRyKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCi0JCQkJICAgIGNoYXIg KnN0cl9meG4sIHUzMiAqIGFkZHIpOwotCi1leHRlcm4gaW50IG5sZHJfZ2V0X3JtbV9tYW5hZ2Vy KHN0cnVjdCBubGRyX29iamVjdCAqbmxkciwKLQkJCQkgICAgICAgc3RydWN0IHJtbV90YXJnZXRf b2JqICoqcm1tX21ncik7Ci0KLWV4dGVybiBpbnQgbmxkcl9sb2FkKHN0cnVjdCBubGRyX25vZGVv YmplY3QgKm5sZHJfbm9kZV9vYmosCi0JCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsKLWV4 dGVybiBpbnQgbmxkcl91bmxvYWQoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29i aiwKLQkJCSAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7Ci0jaWZkZWYgQ09ORklHX1RJRFNQ QlJJREdFX0JBQ0tUUkFDRQotaW50IG5sZHJfZmluZF9hZGRyKHN0cnVjdCBubGRyX25vZGVvYmpl Y3QgKm5sZHJfbm9kZSwgdTMyIHN5bV9hZGRyLAotCXUzMiBvZmZzZXRfcmFuZ2UsIHZvaWQgKm9m ZnNldF9vdXRwdXQsIGNoYXIgKnN5bV9uYW1lKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogTkxEUl8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9ubGRyZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNw YnJpZGdlL25sZHJkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlM2M3ZjUu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJp ZGdlL25sZHJkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqIG5s ZHJkZWZzLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25z IGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIER5bmFtaWMgKyBzdGF0aWMv b3ZlcmxheSBOb2RlIGxvYWRlciAoTkxEUikgY29uc3RhbnRzIGFuZCB0eXBlcy4KLSAqCi0gKiBD b3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBh Y2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJ VEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBX SVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U SUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lm bmRlZiBOTERSREVGU18KLSNkZWZpbmUgTkxEUkRFRlNfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv ZGJkY2RkZWYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgotCi0jZGVmaW5lIE5M RFJfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKLS8qIE5MRFIgT2JqZWN0czogKi8KLXN0cnVjdCBu bGRyX29iamVjdDsKLXN0cnVjdCBubGRyX25vZGVvYmplY3Q7Ci0KLS8qCi0gKiAgPT09PT09PT0g bmxkcl9sb2FkdHlwZSA9PT09PT09PQotICogIExvYWQgdHlwZXMgZm9yIGEgbm9kZS4gTXVzdCBt YXRjaCB2YWx1ZXMgaW4gbm9kZS5oNTUuCi0gKi8KLWVudW0gbmxkcl9sb2FkdHlwZSB7Ci0JTkxE Ul9TVEFUSUNMT0FELAkvKiBMaW5rZWQgaW4gYmFzZSBpbWFnZSwgbm90IG92ZXJsYXkgKi8KLQlO TERSX0RZTkFNSUNMT0FELAkvKiBEeW5hbWljYWxseSBsb2FkZWQgbm9kZSAqLwotCU5MRFJfT1ZM WUxPQUQJCS8qIExpbmtlZCBpbiBiYXNlIGltYWdlLCBvdmVybGF5IG5vZGUgKi8KLX07Ci0KLS8q Ci0gKiAgPT09PT09PT0gbmxkcl9vdmx5ZnhuID09PT09PT09Ci0gKiAgQ2F1c2VzIGNvZGUgb3Ig ZGF0YSB0byBiZSBjb3BpZWQgZnJvbSBsb2FkIGFkZHJlc3MgdG8gcnVuIGFkZHJlc3MuIFRoaXMK LSAqICBpcyB0aGUgImNvZF93cml0ZWZ4biIgdGhhdCBnZXRzIHBhc3NlZCB0byB0aGUgREJMTF9M aWJyYXJ5IGFuZCBpcyB1c2VkIGFzCi0gKiAgdGhlIFpMIHdyaXRlIGZ1bmN0aW9uLgotICoKLSAq ICBQYXJhbWV0ZXJzOgotICogICAgICBwcml2X3JlZjogICAgICAgSGFuZGxlIHRvIGlkZW50aWZ5 IHRoZSBub2RlLgotICogICAgICBkc3BfcnVuX2FkZHI6ICAgUnVuIGFkZHJlc3Mgb2YgY29kZSBv ciBkYXRhLgotICogICAgICBkc3BfbG9hZF9hZGRyOiAgTG9hZCBhZGRyZXNzIG9mIGNvZGUgb3Ig ZGF0YS4KLSAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRv IGNvcHkuCi0gKiAgICAgIG1lbV9zcGFjZTogICAgICBSTVNfQ09ERSBvciBSTVNfREFUQS4KLSAq ICBSZXR1cm5zOgotICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgotICogICAgICAw OiAgICAgICAgICAgICAgRmFpbHVyZS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICov Ci10eXBlZGVmIHUzMigqbmxkcl9vdmx5ZnhuKSAodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVu X2FkZHIsCi0JCQkgICAgdTMyIGRzcF9sb2FkX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBt ZW1fc3BhY2UpOwotCi0vKgotICogID09PT09PT09IG5sZHJfd3JpdGVmeG4gPT09PT09PT0KLSAq ICBXcml0ZSBtZW1vcnkgZnVuY3Rpb24uIFVzZWQgZm9yIGR5bmFtaWMgbG9hZCB3cml0ZXMuCi0g KiAgUGFyYW1ldGVyczoKLSAqICAgICAgcHJpdl9yZWY6ICAgICAgIEhhbmRsZSB0byBpZGVudGlm eSB0aGUgbm9kZS4KLSAqICAgICAgZHNwX2FkZDogICAgICAgIEFkZHJlc3Mgb2YgY29kZSBvciBk YXRhLgotICogICAgICBwYnVmOiAgICAgICAgICAgQ29kZSBvciBkYXRhIHRvIGJlIHdyaXR0ZW4K LSAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRvIHdyaXRl LgotICogICAgICBtZW1fc3BhY2U6ICAgICAgREJMTF9EQVRBIG9yIERCTExfQ09ERS4KLSAqICBS ZXR1cm5zOgotICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgotICogICAgICAwOiAg ICAgICAgICAgICAgRmFpbHVyZS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICovCi10 eXBlZGVmIHUzMigqbmxkcl93cml0ZWZ4bikgKHZvaWQgKnByaXZfcmVmLAotCQkJICAgICB1MzIg ZHNwX2FkZCwgdm9pZCAqcGJ1ZiwKLQkJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9z cGFjZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gbmxkcl9hdHRycyA9PT09PT09PQotICogIEF0dHJp YnV0ZXMgcGFzc2VkIHRvIG5sZHJfY3JlYXRlIGZ1bmN0aW9uLgotICovCi1zdHJ1Y3Qgbmxkcl9h dHRycyB7Ci0Jbmxkcl9vdmx5ZnhuIG92bHk7Ci0Jbmxkcl93cml0ZWZ4biB3cml0ZTsKLQl1MTYg ZHNwX3dvcmRfc2l6ZTsKLQl1MTYgZHNwX21hdV9zaXplOwotfTsKLQotLyoKLSAqICA9PT09PT09 PSBubGRyX3BoYXNlID09PT09PT09Ci0gKiAgSW5kaWNhdGVzIG5vZGUgY3JlYXRlLCBkZWxldGUs IG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rpb24uCi0gKi8KLWVudW0gbmxkcl9waGFzZSB7Ci0JTkxE Ul9DUkVBVEUsCi0JTkxEUl9ERUxFVEUsCi0JTkxEUl9FWEVDVVRFLAotCU5MRFJfTk9QSEFTRQot fTsKLQotLyoKLSAqICBUeXBlZGVmcyBvZiBsb2FkZXIgZnVuY3Rpb25zIGltcG9ydGVkIGZyb20g YSBETEwsIG9yIGRlZmluZWQgaW4gYQotICogIGZ1bmN0aW9uIHRhYmxlLgotICovCi0KLS8qCi0g KiAgPT09PT09PT0gbmxkcl9hbGxvY2F0ZSA9PT09PT09PQotICogIEFsbG9jYXRlIHJlc291cmNl cyB0byBtYW5hZ2UgdGhlIGxvYWRpbmcgb2YgYSBub2RlIG9uIHRoZSBEU1AuCi0gKgotICogIFBh cmFtZXRlcnM6Ci0gKiAgICAgIG5sZHJfb2JqOiAgICAgICAgICBIYW5kbGUgb2YgbG9hZGVyIHRo YXQgd2lsbCBsb2FkIHRoZSBub2RlLgotICogICAgICBwcml2X3JlZjogICAgICAgSGFuZGxlIHRv IGlkZW50aWZ5IHRoZSBub2RlLgotICogICAgICBub2RlX3Byb3BzOiAgICAgUG9pbnRlciB0byBh IGRjZF9ub2RlcHJvcHMgZm9yIHRoZSBub2RlLgotICogICAgICBubGRyX25vZGVvYmo6ICAgTG9j YXRpb24gdG8gc3RvcmUgbm9kZSBoYW5kbGUgb24gb3V0cHV0LiBUaGlzIGhhbmRsZQotICogICAg ICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdG8gbmxkcl9sb2FkL25sZHJfdW5sb2Fk LgotICogICAgICBwZl9waGFzZV9zcGxpdDogICBwb2ludGVyIHRvIGludCB2YXJpYWJsZSByZWZl cmVuY2VkIGluIG5vZGUuYwotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNz LgotICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IG9uIEdQUC4KLSAqICBS ZXF1aXJlczoKLSAqICAgICAgVmFsaWQgbmxkcl9vYmouCi0gKiAgICAgIG5vZGVfcHJvcHMgIT0g TlVMTC4KLSAqICAgICAgbmxkcl9ub2Rlb2JqICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqICAg ICAgMDogICAgICAgIElzVmFsaWROb2RlKCpubGRyX25vZGVvYmopLgotICogICAgICBlcnJvcjog ICAgICAgICAgKm5sZHJfbm9kZW9iaiA9PSBOVUxMLgotICovCi10eXBlZGVmIGludCgqbmxkcl9h bGxvY2F0ZWZ4bikgKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCi0JCQkJICAgICAgIHZv aWQgKnByaXZfcmVmLAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZGNkX25vZGVwcm9wcwotCQkJ CSAgICAgICAqIG5vZGVfcHJvcHMsCi0JCQkJICAgICAgIHN0cnVjdCBubGRyX25vZGVvYmplY3QK LQkJCQkgICAgICAgKipubGRyX25vZGVvYmosCi0JCQkJICAgICAgIGJvb2wgKnBmX3BoYXNlX3Nw bGl0KTsKLQotLyoKLSAqICA9PT09PT09PSBubGRyX2NyZWF0ZSA9PT09PT09PQotICogIENyZWF0 ZSBhIGxvYWRlciBvYmplY3QuIFRoaXMgb2JqZWN0IGhhbmRsZXMgdGhlIGxvYWRpbmcgYW5kIHVu bG9hZGluZyBvZgotICogIGNyZWF0ZSwgZGVsZXRlLCBhbmQgZXhlY3V0ZSBwaGFzZSBmdW5jdGlv bnMgb2Ygbm9kZXMgb24gdGhlIERTUCB0YXJnZXQuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIG5sZHI6ICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBsb2FkZXIgaGFuZGxlIG9uIG91 dHB1dC4KLSAqICAgICAgaGRldl9vYmo6ICAgICBEZXZpY2UgZm9yIHRoaXMgcHJvY2Vzc29yLgot ICogICAgICBwYXR0cnM6ICAgICAgICAgTG9hZGVyIGF0dHJpYnV0ZXMuCi0gKiAgUmV0dXJuczoK LSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3M7Ci0gKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmlj aWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCi0gKiAgUmVxdWlyZXM6Ci0gKiAg ICAgIG5sZHIgIT0gTlVMTC4KLSAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KLSAqCXBhdHRycyAh PSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICBWYWxpZCAqbmxkci4KLSAq ICAgICAgZXJyb3I6ICAgICAgICAgICpubGRyID09IE5VTEwuCi0gKi8KLXR5cGVkZWYgaW50KCpu bGRyX2NyZWF0ZWZ4bikgKHN0cnVjdCBubGRyX29iamVjdCAqKm5sZHIsCi0JCQkJICAgICBzdHJ1 Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkJICAgICBjb25zdCBzdHJ1Y3Qgbmxkcl9hdHRy cyAqcGF0dHJzKTsKLQotLyoKLSAqICA9PT09PT09PSBubGRyX2RlbGV0ZSA9PT09PT09PQotICog IERlbGV0ZSB0aGUgTkxEUiBsb2FkZXIuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIG5s ZHJfb2JqOiAgICAgICAgICBOb2RlIG1hbmFnZXIgb2JqZWN0LgotICogIFJldHVybnM6Ci0gKiAg UmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlkIG5sZHJfb2JqLgotICogIEVuc3VyZXM6Ci0gKglubGRy X29iaiBpbnZhbGlkCi0gKi8KLXR5cGVkZWYgdm9pZCAoKm5sZHJfZGVsZXRlZnhuKSAoc3RydWN0 IG5sZHJfb2JqZWN0ICpubGRyX29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gTkxEUl9GcmVlID09 PT09PT09Ci0gKiAgRnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGluIG5sZHJfYWxsb2NhdGUuCi0g KgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJl dHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgotICogIFJldHVybnM6Ci0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIFZhbGlkIG5sZHJfbm9kZV9vYmouCi0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRl ZiB2b2lkICgqbmxkcl9mcmVlZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2Rl X29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gbmxkcl9nZXRfZnhuX2FkZHIgPT09PT09PT0KLSAq ICBHZXQgYWRkcmVzcyBvZiBjcmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSBwaGFzZSBmdW5jdGlv biBvZiBhIG5vZGUgb24KLSAqICB0aGUgRFNQLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICogICAg ICBubGRyX25vZGVfb2JqOiAgICAgIEhhbmRsZSByZXR1cm5lZCBmcm9tIG5sZHJfYWxsb2NhdGUo KS4KLSAqICAgICAgc3RyX2Z4bjogICAgICAgIE5hbWUgb2YgZnVuY3Rpb24uCi0gKiAgICAgIGFk ZHI6ICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBmdW5jdGlvbiBhZGRyZXNzLgotICogIFJl dHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVNQSVBFOiAgICBB ZGRyZXNzIG9mIGZ1bmN0aW9uIG5vdCBmb3VuZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFs aWQgbmxkcl9ub2RlX29iai4KLSAqICAgICAgYWRkciAhPSBOVUxMOwotICogICAgICBzdHJfZnhu ICE9IE5VTEw7Ci0gKiAgRW5zdXJlczoKLSAqLwotdHlwZWRlZiBpbnQoKm5sZHJfZ2V0ZnhuYWRk cmZ4bikgKHN0cnVjdCBubGRyX25vZGVvYmplY3QKLQkJCQkJICogbmxkcl9ub2RlX29iaiwKLQkJ CQkJIGNoYXIgKnN0cl9meG4sIHUzMiAqIGFkZHIpOwotCi0vKgotICogID09PT09PT09IG5sZHJf bG9hZCA9PT09PT09PQotICogIExvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2Ug ZnVuY3Rpb24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0 ZSgpLgotICogICAgICBwaGFzZTogICAgICAgICAgVHlwZSBvZiBmdW5jdGlvbiB0byBsb2FkIChj cmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSkuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAg ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVOT01FTTogICAgICAgICAgICBJbnN1ZmZp Y2llbnQgbWVtb3J5IG9uIEdQUC4KLSAqICAgICAgLUVOWElPOiAgICAgQ2FuJ3Qgb3ZlcmxheSBw aGFzZSBiZWNhdXNlIG92ZXJsYXkgbWVtb3J5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlzIGFscmVhZHkgaW4gdXNlLgotICogICAgICAtRUlMU0VROiAgICAgICAgICAgRmFpbHVy ZSBpbiBkeW5hbWljIGxvYWRlciBsaWJyYXJ5LgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxp ZCBubGRyX25vZGVfb2JqLgotICogIEVuc3VyZXM6Ci0gKi8KLXR5cGVkZWYgaW50KCpubGRyX2xv YWRmeG4pIChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAotCQkJCSAgIGVu dW0gbmxkcl9waGFzZSBwaGFzZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gbmxkcl91bmxvYWQgPT09 PT09PT0KLSAqICBVbmxvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rp b24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIG5s ZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgot ICogICAgICBwaGFzZTogICAgICAgICAgTm9kZSBmdW5jdGlvbiB0byB1bmxvYWQgKGNyZWF0ZSwg ZGVsZXRlLCBvciBleGVjdXRlKS4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3Vj Y2Vzcy4KLSAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBvbiBHUFAuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlkIG5sZHJfbm9kZV9vYmouCi0gKiAgRW5zdXJlczoK LSAqLwotdHlwZWRlZiBpbnQoKm5sZHJfdW5sb2FkZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVj dCAqbmxkcl9ub2RlX29iaiwKLQkJCQkgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7Ci0KLS8q Ci0gKiAgPT09PT09PT0gbm9kZV9sZHJfZnhucyA9PT09PT09PQotICovCi1zdHJ1Y3Qgbm9kZV9s ZHJfZnhucyB7Ci0Jbmxkcl9hbGxvY2F0ZWZ4biBhbGxvY2F0ZTsKLQlubGRyX2NyZWF0ZWZ4biBj cmVhdGU7Ci0Jbmxkcl9kZWxldGVmeG4gZGVsZXRlOwotCW5sZHJfZ2V0ZnhuYWRkcmZ4biBnZXRf ZnhuX2FkZHI7Ci0Jbmxkcl9sb2FkZnhuIGxvYWQ7Ci0Jbmxkcl91bmxvYWRmeG4gdW5sb2FkOwot fTsKLQotI2VuZGlmIC8qIE5MRFJERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDY4ZWQ3NGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyNCArMCww IEBACi0vKgotICogbm9kZS5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0 IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERTUC9CSU9TIEJyaWRn ZSBOb2RlIE1hbmFnZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBOT0RFXwotI2RlZmluZSBOT0RFXwot Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2Nwcml2Lmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv bm9kZWRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgotI2luY2x1ZGUgPGRzcGJy aWRnZS9ubGRyZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KLQotLyoKLSAqICA9 PT09PT09PSBub2RlX2FsbG9jYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQWxs b2NhdGUgR1BQIHJlc291cmNlcyB0byBtYW5hZ2UgYSBub2RlIG9uIHRoZSBEU1AuCi0gKiAgUGFy YW1ldGVyczoKLSAqICAgICAgaHByb2Nlc3NvcjogICAgICAgICBIYW5kbGUgb2YgcHJvY2Vzc29y IHRoYXQgaXMgYWxsb2NhdGluZyB0aGUgbm9kZS4KLSAqICAgICAgbm9kZV91dWlkOiAgICAgICAg ICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIHRoZSBub2RlLgotICogICAgICBwYXJnczogICAg ICAgICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIG5vZGUuCi0g KiAgICAgIGF0dHJfaW46ICAgICAgICAgICAgT3B0aW9uYWwgcG9pbnRlciB0byBub2RlIGF0dHJp YnV0ZXMgKHByaW9yaXR5LAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuLi4p Ci0gKiAgICAgIG5vZGVyZXM6ICAgICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG5vZGUgcmVz b3VyY2UgaW5mby4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3Mu Ci0gKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IG9uIEdQUC4KLSAq ICAgICAgLUVOT0tFWTogICAgICAgICAgTm9kZSBVVUlEIGhhcyBub3QgYmVlbiByZWdpc3RlcmVk LgotICogICAgICAtRVNQSVBFOiAgICAgICAgaUFsZyBmdW5jdGlvbnMgbm90IGZvdW5kIGZvciBh IERBSVMgbm9kZS4KLSAqICAgICAgLUVET006ICAgICAgICAgYXR0cl9pbiAhPSBOVUxMIGFuZCBh dHRyX2luLT5wcmlvIG91dCBvZgotICogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLgot ICogICAgICAtRVBFUk06ICAgICAgICAgIEEgZmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGFs bG9jYXRlIG5vZGUuCi0gKiAgICAgIC1FQkFEUjogICAgUHJvY2Nlc3NvciBpcyBub3QgaW4gdGhl IHJ1bm5pbmcgc3RhdGUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGhwcm9jZXNzb3IgIT0gTlVM TC4KLSAqICAgICAgbm9kZV91dWlkICE9IE5VTEwuCi0gKiAgICAgIG5vZGVyZXMgIT0gTlVMTC4K LSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgICAgIElzVmFsaWROb2RlKCpwaF9ub2Rl KS4KLSAqICAgICAgZXJyb3I6ICAgICAgICAgICAgICAqbm9kZXJlcyA9PSBOVUxMLgotICovCi1l eHRlcm4gaW50IG5vZGVfYWxsb2NhdGUoc3RydWN0IHByb2Nfb2JqZWN0ICpocHJvY2Vzc29yLAot CQkJCWNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9kZV91dWlkLAotCQkJCWNvbnN0IHN0cnVjdCBk c3BfY2JkYXRhCi0JCQkJKnBhcmdzLCBjb25zdCBzdHJ1Y3QgZHNwX25vZGVhdHRyaW4KLQkJCQkq YXR0cl9pbiwKLQkJCQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICoqbm9kZXJlcywKLQkJCQlzdHJ1 Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2Fs bG9jX21zZ19idWYgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBBbGxvY2F0ZSBhbmQg UHJlcGFyZSBhIGJ1ZmZlciB3aG9zZSBkZXNjcmlwdG9yIHdpbGwgYmUgcGFzc2VkIHRvIGEKLSAq ICAgICAgTm9kZSB3aXRoaW4gYSAoZHNwX21zZyltZXNzYWdlCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgaG5vZGU6ICAgICAgICAgIFRoZSBub2RlIGhhbmRsZS4KLSAqICAgICAgdXNpemU6ICAg ICAgICAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLgotICogICAgICBw YXR0cjogICAgICAgICAgUG9pbnRlciB0byBhIGRzcF9idWZmZXJhdHRyIHN0cnVjdHVyZS4KLSAq ICAgICAgcGJ1ZmZlcjogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIHRoZSBhZGRyZXNzIG9mIHRo ZSBhbGxvY2F0ZWQKLSAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBvbiBvdXRwdXQuCi0g KiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6 ICAgIEludmFsaWQgbm9kZSBoYW5kbGUuCi0gKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljZW50 IG1lbW9yeS4KLSAqICAgICAgLUVQRVJNOiAgICAgIEdlbmVyYWwgRmFpbHVyZS4KLSAqICAgICAg LUVJTlZBTDogICAgICBJbnZhbGlkIFNpemUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHBidWZm ZXIgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IG5vZGVfYWxsb2NfbXNn X2J1ZihzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAotCQkJCSAgICAgdTMyIHVzaXplLCBzdHJ1 Y3QgZHNwX2J1ZmZlcmF0dHIKLQkJCQkgICAgICpwYXR0ciwgdTggKipwYnVmZmVyKTsKLQotLyoK LSAqICA9PT09PT09PSBub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYW4gYWxsb2NhdGVkIG5vZGUuCi0gKiAg UGFyYW1ldGVyczoKLSAqICAgICAgaG5vZGU6ICAgICAgICAgICAgICBOb2RlIGhhbmRsZSByZXR1 cm5lZCBmcm9tIG5vZGVfYWxsb2NhdGUuCi0gKiAgICAgIHByaW86ICAgICAgICAgIE5ldyBwcmlv cml0eSBsZXZlbCB0byBzZXQgbm9kZSdzIHByaW9yaXR5IHRvLgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFs aWQgaG5vZGUuCi0gKiAgICAgIC1FRE9NOiAgICAgICAgIHByaW8gaXMgb3V0IG9mIHJhbmdlLgot ICogICAgICAtRVBFUk06IFRoZSBzcGVjaWZpZWQgbm9kZSBpcyBub3QgYSB0YXNrIG5vZGUuCi0g KiAgICAgICAgICAgICAgVW5hYmxlIHRvIGNoYW5nZSBub2RlJ3MgcnVudGltZSBwcmlvcml0eSBs ZXZlbC4KLSAqICAgICAgLUVCQURSOiAgICBOb2RlIGlzIG5vdCBpbiB0aGUgTk9ERV9BTExPQ0FU RUQsIE5PREVfUEFVU0VELAotICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yIE5PREVfUlVO TklORyBzdGF0ZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgYmVm b3JlIHRoZSBEU1AgcmVzcG9uZGVkLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAg ICAgIDAgJiYgKE5vZGUncyBjdXJyZW50IHByaW9yaXR5ID09IHByaW8pCi0gKi8KLWV4dGVybiBp bnQgbm9kZV9jaGFuZ2VfcHJpb3JpdHkoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgczMyIHBy aW8pOwotCi0vKgotICogID09PT09PT09IG5vZGVfY29ubmVjdCA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIENvbm5lY3QgdHdvIG5vZGVzIG9uIHRoZSBEU1AsIG9yIGEgbm9kZSBvbiB0 aGUgRFNQIHRvIHRoZSBHUFAuIEluIHRoZQotICogICAgICBjYXNlIHRoYXQgdGhlIGNvbm5lY3Rp b24gaXMgYmVpbmcgbWFkZSBiZXR3ZWVuIGEgbm9kZSBvbiB0aGUgRFNQIGFuZAotICogICAgICB0 aGUgR1BQLCBvbmUgb2YgdGhlIG5vZGUgaGFuZGxlcyAoZWl0aGVyIG5vZGUxIG9yIG5vZGUyKSBt dXN0IGJlCi0gKiAgICAgIHRoZSBjb25zdGFudCBOT0RFX0hHUFBOT0RFLgotICogIFBhcmFtZXRl cnM6Ci0gKiAgICAgIG5vZGUxOiAgICAgICAgIEhhbmRsZSBvZiBmaXJzdCBub2RlIHRvIGNvbm5l Y3QgdG8gc2Vjb25kIG5vZGUuIElmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIGEg Y29ubmVjdGlvbiBmcm9tIHRoZSBHUFAgdG8gbm9kZTIsIG5vZGUxCi0gKiAgICAgICAgICAgICAg ICAgICAgICBtdXN0IGJlIHRoZSBjb25zdGFudCBOT0RFX0hHUFBOT0RFLiBPdGhlcndpc2UsIG5v ZGUxCi0gKiAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIGEgbm9kZSBoYW5kbGUgcmV0dXJu ZWQgZnJvbSBhIHN1Y2Nlc3NmdWwgY2FsbAotICogICAgICAgICAgICAgICAgICAgICAgdG8gTm9k ZV9BbGxvY2F0ZSgpLgotICogICAgICBub2RlMjogICAgICAgICBIYW5kbGUgb2Ygc2Vjb25kIG5v ZGUuIE11c3QgYmUgZWl0aGVyIE5PREVfSEdQUE5PREUKLSAqICAgICAgICAgICAgICAgICAgICAg IGlmIHRoaXMgaXMgYSBjb25uZWN0aW9uIGZyb20gRFNQIG5vZGUgdG8gR1BQLCBvciBhCi0gKiAg ICAgICAgICAgICAgICAgICAgICBub2RlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGEgc3VjY2Vzc2Z1 bCBjYWxsIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICBub2RlX2FsbG9jYXRlKCkuCi0gKiAg ICAgIHN0cmVhbTE6ICAgICAgICBPdXRwdXQgc3RyZWFtIGluZGV4IG9uIGZpcnN0IG5vZGUsIHRv IGJlIGNvbm5lY3RlZAotICogICAgICAgICAgICAgICAgICAgICAgdG8gc2Vjb25kIG5vZGUncyBp bnB1dCBzdHJlYW0uIFZhbHVlIG11c3QgcmFuZ2UgZnJvbQotICogICAgICAgICAgICAgICAgICAg ICAgMCA8PSBzdHJlYW0xIDwgbnVtYmVyIG9mIG91dHB1dCBzdHJlYW1zLgotICogICAgICBzdHJl YW0yOiAgICAgICAgSW5wdXQgc3RyZWFtIGluZGV4IG9uIHNlY29uZCBub2RlLiBWYWx1ZSBtdXN0 IHJhbmdlCi0gKiAgICAgICAgICAgICAgICAgICAgICBmcm9tIDAgPD0gc3RyZWFtMiA8IG51bWJl ciBvZiBpbnB1dCBzdHJlYW1zLgotICogICAgICBwYXR0cnM6ICAgICAgICAgU3RyZWFtIGF0dHJp YnV0ZXMgKE5VTEwgPT0+IHVzZSBkZWZhdWx0cykuCi0gKiAgICAgIGNvbm5fcGFyYW06ICAgICBB IHBvaW50ZXIgdG8gYSBkc3BfY2JkYXRhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMKLSAqICAgICAg ICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gcGFyYW1ldGVyIGZvciBkZXZpY2Ugbm9kZXMgdG8g cGFzcyB0byBEU1AKLSAqICAgICAgICAgICAgICAgICAgICAgIHNpZGUuCi0gKiAgICAgICAgICAg ICAgICAgICAgICBJZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgTlVMTCwgdGhlbiB0 aGlzIEFQSQotICogICAgICAgICAgICAgICAgICAgICAgYmVoYXZlcyBsaWtlIERTUE5vZGVfQ29u bmVjdC4gVGhpcyBwYXJhbWV0ZXIgd2lsbCBoYXZlCi0gKiAgICAgICAgICAgICAgICAgICAgICBs ZW5ndGggb2YgdGhlIHN0cmluZyBhbmQgdGhlIG51bGwgdGVybWluYXRlZCBzdHJpbmcgaW4KLSAq ICAgICAgICAgICAgICAgICAgICAgIGRzcF9jYmRhdGEgc3RydWN0LiBUaGlzIGNhbiBiZSBleHRl bmRlZCBpbiBmdXR1cmUgdHAKLSAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYmluYXJ5IGRh dGEuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KLSAq ICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIG5vZGUxIG9yIG5vZGUyLgotICogICAg ICAtRU5PTUVNOiAgICAgICAgICAgIEluc3VmZmljaWVudCBob3N0IG1lbW9yeS4KLSAqICAgICAg LUVJTlZBTDogICAgICAgICAgICAgQSBzdHJlYW0gaW5kZXggcGFyYW1ldGVyIGlzIGludmFsaWQu Ci0gKiAgICAgIC1FSVNDT05OOiAgQSBjb25uZWN0aW9uIGFscmVhZHkgZXhpc3RzIGZvciBvbmUg b2YgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMgc3RyZWFtMSBv ciBzdHJlYW0yLgotICogICAgICAtRUJBRFI6ICAgICAgICBFaXRoZXIgbm9kZTEgb3Igbm9kZTIg aXMgbm90IGluIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT0RFX0FMTE9D QVRFRCBzdGF0ZS4KLSAqICAgICAgLUVDT05OUkVGVVNFRDogTm8gbW9yZSBjb25uZWN0aW9ucyBh dmFpbGFibGUuCi0gKiAgICAgIC1FUEVSTTogICAgICAgICAgICAgIEF0dGVtcHQgdG8gbWFrZSBh biBpbGxlZ2FsIGNvbm5lY3Rpb24gKGVnLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEZXZpY2Ugbm9kZSB0byBkZXZpY2Ugbm9kZSwgb3IgZGV2aWNlIG5vZGUgdG8KLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1BQKSwgdGhlIHR3byBub2RlcyBhcmUgb24gZGlmZmVy ZW50IERTUHMuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBu b2RlX2Nvbm5lY3Qoc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMSwKLQkJCSAgICAgICB1MzIgc3Ry ZWFtMSwKLQkJCSAgICAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUyLAotCQkJICAgICAgIHUz MiBzdHJlYW0yLAotCQkJICAgICAgIHN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycywKLQkJCSAg ICAgICBzdHJ1Y3QgZHNwX2NiZGF0YQotCQkJICAgICAgICpjb25uX3BhcmFtKTsKLQotLyoKLSAq ICA9PT09PT09PSBub2RlX2NyZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENy ZWF0ZSBhIG5vZGUgb24gdGhlIERTUCBieSByZW1vdGVseSBjYWxsaW5nIHRoZSBub2RlJ3MgY3Jl YXRlCi0gKiAgICAgIGZ1bmN0aW9uLiBJZiBuZWNlc3NhcnksIGxvYWQgY29kZSB0aGF0IGNvbnRh aW5zIHRoZSBub2RlJ3MgY3JlYXRlCi0gKiAgICAgIGZ1bmN0aW9uLgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBu b2RlX2FsbG9jYXRlKCkuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNj ZXNzLgotICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KLSAqICAgICAgLUVT UElQRTogICAgICAgIENyZWF0ZSBmdW5jdGlvbiBub3QgZm91bmQgaW4gdGhlIENPRkYgZmlsZS4K LSAqICAgICAgLUVCQURSOiAgICBOb2RlIGlzIG5vdCBpbiB0aGUgTk9ERV9BTExPQ0FURUQgc3Rh dGUuCi0gKiAgICAgIC1FTk9NRU06ICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIG9u IHRoZSBEU1AuCi0gKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9y ZSB0aGUgRFNQIHJlc3BvbmRlZC4KLSAqICAgICAgLUVQRVJNOiAgICAgICAgICBBIGZhaWx1cmUg b2NjdXJyZWQsIHVuYWJsZSB0byBjcmVhdGUgbm9kZS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1 cmVzOgotICovCi1leHRlcm4gaW50IG5vZGVfY3JlYXRlKHN0cnVjdCBub2RlX29iamVjdCAqaG5v ZGUpOwotCi0vKgotICogID09PT09PT09IG5vZGVfY3JlYXRlX21nciA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhIE5PREUgTWFuYWdlciBvYmplY3QuIFRoaXMgb2JqZWN0 IGhhbmRsZXMgdGhlIGNyZWF0aW9uLAotICogICAgICBkZWxldGlvbiwgYW5kIGV4ZWN1dGlvbiBv ZiBub2RlcyBvbiB0aGUgRFNQIHRhcmdldC4gVGhlIE5PREUgTWFuYWdlcgotICogICAgICBhbHNv IG1haW50YWlucyBhIHBpcGUgbWFwIG9mIHVzZWQgYW5kIGF2YWlsYWJsZSBub2RlIGNvbm5lY3Rp b25zLgotICogICAgICBFYWNoIERFViBvYmplY3Qgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgTk9E RSBNYW5hZ2VyIG9iamVjdC4KLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgbm9kZV9tYW46 ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG5vZGUgbWFuYWdlciBoYW5kbGUgb24gb3V0cHV0Lgot ICogICAgICBoZGV2X29iajogICAgIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3IuCi0gKiAgUmV0 dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3M7Ci0gKiAgICAgIC1FTk9NRU06ICAgIElu c3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCi0gKiAgICAgIC1FUEVS TTogICAgICBHZW5lcmFsIGZhaWx1cmUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIG5vZGVfbWFu ICE9IE5VTEwuCi0gKiAgICAgIGhkZXZfb2JqICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqICAg ICAgMDogICAgICAgIFZhbGlkZSAqbm9kZV9tYW4uCi0gKiAgICAgIGVycm9yOiAgICAgICAgICAq bm9kZV9tYW4gPT0gTlVMTC4KLSAqLwotZXh0ZXJuIGludCBub2RlX2NyZWF0ZV9tZ3Ioc3RydWN0 IG5vZGVfbWdyICoqbm9kZV9tYW4sCi0JCQkJICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmop OwotCi0vKgotICogID09PT09PT09IG5vZGVfZGVsZXRlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgRGVsZXRlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gbm9kZV9hbGxvY2F0ZSgpLiBJ ZiB0aGUgbm9kZSB3YXMKLSAqICAgICAgY3JlYXRlZCwgZGVsZXRlIHRoZSBub2RlIG9uIHRoZSBE U1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzCi0gKiAgICAgIGRlbGV0ZSBmdW5jdGlv bi4gTG9hZHMgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgotICogICAg ICBHUFAgc2lkZSByZXNvdXJjZXMgYXJlIGZyZWVkIGFmdGVyIG5vZGUncyBkZWxldGUgZnVuY3Rp b24gcmV0dXJucy4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBub2RlcmVzOiAgICAgICAgICAg ICAgTm9kZSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tCi0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5vZGVfYWxsb2NhdGUoKS4KLSAqICAgICAgcHJfY3R4dDog ICAgICAgICAgICAgICAgUG9pbnRlciB0byBwcm9jZXNzIGNvbnRleHQgZGF0YS4KLSAqICBSZXR1 cm5zOgotICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6ICAg ICAgICBJbnZhbGlkIGhub2RlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1 cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCi0gKiAgICAgIC1FUEVSTTogICAgICAgICAg QSBmYWlsdXJlIG9jY3VycmVkIGluIGRlbGV0aW5nIHRoZSBub2RlLgotICogICAgICAtRVNQSVBF OiAgICAgICAgRGVsZXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgotICog IFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgaG5vZGUgaXMg aW52YWxpZC4KLSAqLwotZXh0ZXJuIGludCBub2RlX2RlbGV0ZShzdHJ1Y3Qgbm9kZV9yZXNfb2Jq ZWN0ICpub2RlcmVzLAotCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7 Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9kZWxldGVfbWdyID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgRGVsZXRlIHRoZSBOT0RFIE1hbmFnZXIuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgaG5vZGVfbWdyOiAgICAgICBOb2RlIG1hbmFnZXIgb2JqZWN0LgotICogIFJldHVybnM6 Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxp ZCBobm9kZV9tZ3IuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBub2RlX2RlbGV0ZV9t Z3Ioc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IpOwotCi0vKgotICogID09PT09PT09IG5vZGVf ZW51bV9ub2RlcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEVudW1lcmF0ZSB0aGUg bm9kZXMgY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlIERTUC4KLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICBobm9kZV9tZ3I6ICAgICAgIE5vZGUgbWFuYWdlciByZXR1cm5lZCBmcm9tIG5vZGVf Y3JlYXRlX21ncigpLgotICogICAgICBub2RlX3RhYjogICAgICAgQXJyYXkgdG8gY29weSBub2Rl IGhhbmRsZXMgaW50by4KLSAqICAgICAgbm9kZV90YWJfc2l6ZTogICBOdW1iZXIgb2YgaGFuZGxl cyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIG5vZGVfdGFiLgotICogICAgICBwdV9udW1fbm9kZXM6 ICAgICBMb2NhdGlvbiB3aGVyZSBudW1iZXIgb2Ygbm9kZSBoYW5kbGVzIHdyaXR0ZW4gdG8KLSAq ICAgICAgICAgICAgICAgICAgICAgIG5vZGVfdGFiIHdpbGwgYmUgd3JpdHRlbi4KLSAqICAgICAg cHVfYWxsb2NhdGVkOiAgICBMb2NhdGlvbiB0byB3cml0ZSB0b3RhbCBudW1iZXIgb2YgYWxsb2Nh dGVkIG5vZGVzLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICog ICAgICAtRUlOVkFMOiAgICAgIG5vZGVfdGFiIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCBub2Rl IGhhbmRsZXMuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFZhbGlkIGhub2RlX21nci4KLSAqICAg ICAgbm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDAuCi0gKiAgICAgIHB1X251 bV9ub2RlcyAhPSBOVUxMLgotICogICAgICBwdV9hbGxvY2F0ZWQgIT0gTlVMTC4KLSAqICBFbnN1 cmVzOgotICogICAgICAtICgtRUlOVkFMICYmICpwdV9udW1fbm9kZXMgPT0gMCkKLSAqICAgICAg LSB8fCAoMCAmJiAqcHVfbnVtX25vZGVzIDw9IG5vZGVfdGFiX3NpemUpICAmJgotICogICAgICAg ICgqcHVfYWxsb2NhdGVkID09ICpwdV9udW1fbm9kZXMpCi0gKi8KLWV4dGVybiBpbnQgbm9kZV9l bnVtX25vZGVzKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAotCQkJCSAgdm9pZCAqKm5vZGVf dGFiLAotCQkJCSAgdTMyIG5vZGVfdGFiX3NpemUsCi0JCQkJICB1MzIgKnB1X251bV9ub2RlcywK LQkJCQkgIHUzMiAqcHVfYWxsb2NhdGVkKTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2ZyZWVf bXNnX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEZyZWUgYSBtZXNzYWdlIGJ1 ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2NfbXNnX2J1Zi4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICAgICAgVGhlIG5vZGUgaGFuZGxlLgotICog ICAgICBwYnVmZmVyOiAgICAgICAgKEFkZHJlc3MpIEJ1ZmZlciBhbGxvY2F0ZWQgYnkgbm9kZV9h bGxvY19tc2dfYnVmLgotICogICAgICBwYXR0cjogICAgICAgICAgU2FtZSBidWZmZXIgYXR0cmli dXRlcyBwYXNzZWQgdG8gbm9kZV9hbGxvY19tc2dfYnVmLgotICogIFJldHVybnM6Ci0gKiAgICAg IDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIG5vZGUgaGFu ZGxlLgotICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZSB0byBmcmVlIHRoZSBidWZmZXIuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIHBidWZmZXIgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICov Ci1leHRlcm4gaW50IG5vZGVfZnJlZV9tc2dfYnVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUs Ci0JCQkJICAgIHU4ICpwYnVmZmVyLAotCQkJCSAgICBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIKLQkJ CQkgICAgKnBhdHRyKTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2dldF9hdHRyID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ29weSB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIHRo ZSBzcGVjaWZpZWQgbm9kZSBpbnRvIGEgZHNwX25vZGVhdHRyCi0gKiAgICAgIHN0cnVjdHVyZS4K LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBvYmplY3QgYWxs b2NhdGVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgotICogICAgICBwYXR0cjogICAgICAgICAgUG9p bnRlciB0byBkc3Bfbm9kZWF0dHIgc3RydWN0dXJlIHRvIGNvcHkgbm9kZSdzCi0gKiAgICAgICAg ICAgICAgICAgICAgICBhdHRyaWJ1dGVzLgotICogICAgICBhdHRyX3NpemU6ICAgICAgU2l6ZSBv ZiBwYXR0ci4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAg ICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgcGF0 dHIgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICogICAgICAwOiAgICAgICAgKnBhdHRycyBjb250 YWlucyB0aGUgbm9kZSdzIGN1cnJlbnQgYXR0cmlidXRlcy4KLSAqLwotZXh0ZXJuIGludCBub2Rl X2dldF9hdHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0JCQkJc3RydWN0IGRzcF9ub2Rl YXR0ciAqcGF0dHIsIHUzMiBhdHRyX3NpemUpOwotCi0vKgotICogID09PT09PT09IG5vZGVfZ2V0 X21lc3NhZ2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSBhIG1lc3Nh Z2UgZnJvbSBhIG5vZGUgb24gdGhlIERTUC4gVGhlIG5vZGUgbXVzdCBiZSBlaXRoZXIgYQotICog ICAgICBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3IgWERBSVMgc29ja2V0IG5vZGUuCi0gKiAg ICAgIElmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxv Y2sgdW50aWwgYQotICogICAgICBtZXNzYWdlIGlzIGF2YWlsYWJsZSwgb3IgdGhlIG5vZGUncyB0 aW1lb3V0IHZhbHVlIGlzIHJlYWNoZWQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaG5vZGU6 ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgotICog ICAgICBtZXNzYWdlOiAgICAgICBQb2ludGVyIHRvIGRzcF9tc2cgc3RydWN0dXJlIHRvIGNvcHkg dGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGludG8uCi0gKiAgICAgIHV0aW1l b3V0OiAgICAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBtZXNzYWdlLgot ICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxU OiAgICBJbnZhbGlkIGhub2RlLgotICogICAgICAtRVBFUk06IENhbm5vdCByZXRyaWV2ZSBtZXNz YWdlcyBmcm9tIHRoaXMgdHlwZSBvZiBub2RlLgotICogICAgICAgICAgICAgIEVycm9yIG9jY3Vy cmVkIHdoaWxlIHRyeWluZyB0byByZXRyaWV2ZSBhIG1lc3NhZ2UuCi0gKiAgICAgIC1FVElNRTog ICBUaW1lb3V0IG9jY3VycmVkIGFuZCBubyBtZXNzYWdlIGlzIGF2YWlsYWJsZS4KLSAqICBSZXF1 aXJlczoKLSAqICAgICAgbWVzc2FnZSAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVy biBpbnQgbm9kZV9nZXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAotCQkJCSAg IHN0cnVjdCBkc3BfbXNnICptZXNzYWdlLCB1MzIgdXRpbWVvdXQpOwotCi0vKgotICogID09PT09 PT09IG5vZGVfZ2V0X25sZHJfb2JqID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0 cmlldmUgdGhlIE5sZHIgbWFuYWdlcgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhub2RlX21n cjogICAgICAgTm9kZSBNYW5hZ2VyCi0gKiAgICAgIG5sZHJfb3ZseW9iajogICBQb2ludGVyIHRv IGEgTmxkciBtYW5hZ2VyIGhhbmRsZQotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBT dWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgotICogIEVuc3VyZXM6 Ci0gKi8KLWV4dGVybiBpbnQgbm9kZV9nZXRfbmxkcl9vYmooc3RydWN0IG5vZGVfbWdyICpobm9k ZV9tZ3IsCi0JCQkJICAgIHN0cnVjdCBubGRyX29iamVjdCAqKm5sZHJfb3ZseW9iaik7Ci0KLS8q Ci0gKiAgPT09PT09PT0gbm9kZV9vbl9leGl0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICAgR2V0cyBjYWxsZWQgd2hlbiBSTVNfRVhJVCBpcyByZWNlaXZlZCBmb3IgYSBub2RlLiBQUk9D IG5lZWRzIHRvIHBhc3MKLSAqICAgICAgdGhpcyBmdW5jdGlvbiBhcyBhIHBhcmFtZXRlciB0byBt c2dfY3JlYXRlKCkuIFRoaXMgZnVuY3Rpb24gdGhlbiBnZXRzCi0gKiAgICAgIGNhbGxlZCBieSB0 aGUgQnJpZGdlIGRyaXZlciB3aGVuIGFuIGV4aXQgbWVzc2FnZSBmb3IgYSBub2RlIGlzIHJlY2Vp dmVkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhub2RlOiAgICAgIEhhbmRsZSBvZiB0aGUg bm9kZSB0aGF0IHRoZSBleGl0IG1lc3NhZ2UgaXMgZm9yLgotICogICAgICBub2RlX3N0YXR1czog ICAgUmV0dXJuIHN0YXR1cyBvZiB0aGUgbm9kZSdzIGV4ZWN1dGUgcGhhc2UuCi0gKiAgUmV0dXJu czoKLSAqICBFbnN1cmVzOgotICovCi12b2lkIG5vZGVfb25fZXhpdChzdHJ1Y3Qgbm9kZV9vYmpl Y3QgKmhub2RlLCBzMzIgbm9kZV9zdGF0dXMpOwotCi0vKgotICogID09PT09PT09IG5vZGVfcGF1 c2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBTdXNwZW5kIGV4ZWN1dGlvbiBvZiBh IG5vZGUgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIERTUC4KLSAqICBQYXJhbWV0ZXJzOgotICog ICAgICBobm9kZTogICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUg Y3VycmVudGx5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiB0aGUgRFNQ LgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAg LUVGQVVMVDogICAgICAgIEludmFsaWQgaG5vZGUuCi0gKiAgICAgIC1FUEVSTTogTm9kZSBpcyBu b3QgYSB0YXNrIG9yIHNvY2tldCBub2RlLgotICogICAgICAgICAgICAgIEZhaWxlZCB0byBwYXVz ZSBub2RlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUg dGhlIERTUCByZXNwb25kZWQuCi0gKiAgICAgIERTUF9FV1JPTkdTVFNBVEU6ICAgTm9kZSBpcyBu b3QgaW4gTk9ERV9SVU5OSU5HIHN0YXRlLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0g Ki8KLWV4dGVybiBpbnQgbm9kZV9wYXVzZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKTsKLQot LyoKLSAqICA9PT09PT09PSBub2RlX3B1dF9tZXNzYWdlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3Ig WERBSVMgc29ja2V0IG5vZGUuCi0gKiAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRp bCB0aGUgbWVzc2FnZSBzdHJlYW0gY2FuIGFjY29tbW9kYXRlCi0gKiAgICAgIHRoZSBtZXNzYWdl LCBvciBhIHRpbWVvdXQgb2NjdXJzLiBUaGUgbWVzc2FnZSB3aWxsIGJlIGNvcGllZCwgc28gTXNn Ci0gKiAgICAgIGNhbiBiZSByZS11c2VkIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybi4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVy bmVkIGJ5IG5vZGVfYWxsb2NhdGUoKS4KLSAqICAgICAgcG1zZzogICAgICAgICAgICAgICBMb2Nh dGlvbiBvZiBtZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhlIG5vZGUuCi0gKiAgICAgIHV0aW1lb3V0 OiAgICAgICAgICAgVGltZW91dCBpbiBtc2VjcyB0byB3YWl0LgotICogIFJldHVybnM6Ci0gKiAg ICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFs aWQgaG5vZGUuCi0gKiAgICAgIC1FUEVSTTogTWVzc2FnZXMgY2FuJ3QgYmUgc2VudCB0byB0aGlz IHR5cGUgb2Ygbm9kZS4KLSAqICAgICAgICAgICAgICBVbmFibGUgdG8gc2VuZCBtZXNzYWdlLgot ICogICAgICAtRVRJTUU6ICAgICAgIFRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIG1lc3NhZ2UgY291 bGQgYmUgc2V0LgotICogICAgICAtRUJBRFI6ICAgIE5vZGUgaXMgaW4gaW52YWxpZCBzdGF0ZSBm b3Igc2VuZGluZyBtZXNzYWdlcy4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgcG1zZyAhPSBOVUxM LgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgbm9kZV9wdXRfbWVzc2FnZShzdHJ1Y3Qg bm9kZV9vYmplY3QgKmhub2RlLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1 MzIgdXRpbWVvdXQpOwotCi0vKgotICogID09PT09PT09IG5vZGVfcmVnaXN0ZXJfbm90aWZ5ID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVnaXN0ZXIgdG8gYmUgbm90aWZpZWQgb24g c3BlY2lmaWMgZXZlbnRzIGZvciB0aGlzIG5vZGUuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAg aG5vZGU6ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGJ5IG5vZGVfYWxsb2NhdGUoKS4K LSAqICAgICAgZXZlbnRfbWFzazogICAgIE1hc2sgb2YgdHlwZXMgb2YgZXZlbnRzIHRvIGJlIG5v dGlmaWVkIGFib3V0LgotICogICAgICBub3RpZnlfdHlwZTogICAgVHlwZSBvZiBub3RpZmljYXRp b24gdG8gYmUgc2VudC4KLSAqICAgICAgaG5vdGlmaWNhdGlvbjogIEhhbmRsZSB0byBiZSB1c2Vk IGZvciBub3RpZmljYXRpb24uCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nl c3MuCi0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaG5vZGUuCi0gKiAgICAgIC1FTk9NRU06 ICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgotICogICAgICAtRUlOVkFMOiAgICAgZXZl bnRfbWFzayBpcyBpbnZhbGlkLgotICogICAgICAtRU5PU1lTOiAgIE5vdGlmaWNhdGlvbiB0eXBl IHNwZWNpZmllZCBieSBub3RpZnlfdHlwZSBpcyBub3QKLSAqICAgICAgICAgICAgICAgICAgICAg IHN1cHBvcnRlZC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxM LgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBpbnQgbm9kZV9yZWdpc3Rlcl9ub3RpZnkoc3Ry dWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKLQkJCQkgICAgICAgdTMyIGV2ZW50X21hc2ssIHUzMiBu b3RpZnlfdHlwZSwKLQkJCQkgICAgICAgc3RydWN0IGRzcF9ub3RpZmljYXRpb24KLQkJCQkgICAg ICAgKmhub3RpZmljYXRpb24pOwotCi0vKgotICogID09PT09PT09IG5vZGVfcnVuID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU3RhcnQgZXhlY3V0aW9uIG9mIGEgbm9kZSdzIGV4ZWN1 dGUgcGhhc2UsIG9yIHJlc3VtZSBleGVjdXRpb24gb2YKLSAqICAgICAgYSBub2RlIHRoYXQgaGFz IGJlZW4gc3VzcGVuZGVkICh2aWEgbm9kZV9wYXVzZSgpKSBvbiB0aGUgRFNQLiBMb2FkCi0gKiAg ICAgIHRoZSBub2RlJ3MgZXhlY3V0ZSBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuCi0gKiAgUGFyYW1l dGVyczoKLSAqICAgICAgaG5vZGU6ICAgICAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRp bmcgYSBub2RlIGN1cnJlbnRseQotICogICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcg b24gdGhlIERTUC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3Mu Ci0gKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgotICogICAgICAtRVBFUk06 IGhub2RlIGRvZXNuJ3QgcmVwcmVzZW50IGEgbWVzc2FnZSwgdGFzayBvciBkYWlzIHNvY2tldCBu b2RlLgotICogICAgICAgICAgICAgIFVuYWJsZSB0byBzdGFydCBvciByZXN1bWUgZXhlY3V0aW9u LgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERT UCByZXNwb25kZWQuCi0gKiAgICAgIERTUF9FV1JPTkdTVFNBVEU6ICAgTm9kZSBpcyBub3QgaW4g Tk9ERV9QQVVTRUQgb3IgTk9ERV9DUkVBVEVEIHN0YXRlLgotICogICAgICAtRVNQSVBFOiAgICAg ICAgRXhlY3V0ZSBmdW5jdGlvbiBub3QgZm91bmQgaW4gdGhlIENPRkYgZmlsZS4KLSAqICBSZXF1 aXJlczoKLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IG5vZGVfcnVuKHN0cnVjdCBub2Rl X29iamVjdCAqaG5vZGUpOwotCi0vKgotICogID09PT09PT09IG5vZGVfdGVybWluYXRlID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2lnbmFsIGEgbm9kZSBydW5uaW5nIG9uIHRoZSBE U1AgdGhhdCBpdCBzaG91bGQgZXhpdCBpdHMgZXhlY3V0ZQotICogICAgICBwaGFzZSBmdW5jdGlv bi4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICAgICAgICAgIE5vZGUgb2Jq ZWN0IHJlcHJlc2VudGluZyBhIG5vZGUgY3VycmVudGx5Ci0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgcnVubmluZyBvbiB0aGUgRFNQLgotICogICAgICBwc3RhdHVzOiAgICAgICAgICAgIExv Y2F0aW9uIHRvIHN0b3JlIGV4ZWN1dGUtcGhhc2UgZnVuY3Rpb24gcmV0dXJuCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAg ICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KLSAq ICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBEU1AgcmVz cG9uZGVkLgotICogICAgICAtRVBFUk06IFR5cGUgb2Ygbm9kZSBzcGVjaWZpZWQgY2Fubm90IGJl IHRlcm1pbmF0ZWQuCi0gKiAgICAgICAgICAgICAgVW5hYmxlIHRvIHRlcm1pbmF0ZSB0aGUgbm9k ZS4KLSAqICAgICAgLUVCQURSOiAgICBPcGVyYXRpb24gbm90IHZhbGlkIGZvciB0aGUgY3VycmVu dCBub2RlIHN0YXRlLgotICogIFJlcXVpcmVzOgotICogICAgICBwc3RhdHVzICE9IE5VTEwuCi0g KiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGludCBub2RlX3Rlcm1pbmF0ZShzdHJ1Y3Qgbm9kZV9v YmplY3QgKmhub2RlLAotCQkJCSBpbnQgKnBzdGF0dXMpOwotCi0vKgotICogID09PT09PT09IG5v ZGVfZ2V0X3V1aWRfcHJvcHMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBGZXRjaCBO b2RlIHByb3BlcnRpZXMgZ2l2ZW4gdGhlIFVVSUQKLSAqICBQYXJhbWV0ZXJzOgotICoKLSAqLwot ZXh0ZXJuIGludCBub2RlX2dldF91dWlkX3Byb3BzKHZvaWQgKmhwcm9jZXNzb3IsCi0JCQkJICAg ICAgY29uc3Qgc3RydWN0IGRzcF91dWlkICpub2RlX3V1aWQsCi0JCQkJICAgICAgc3RydWN0IGRz cF9uZGJwcm9wcwotCQkJCSAgICAgICpub2RlX3Byb3BzKTsKLQotI2lmZGVmIENPTkZJR19USURT UEJSSURHRV9CQUNLVFJBQ0UKLS8qKgotICogbm9kZV9maW5kX2FkZHIoKSAtIEZpbmQgdGhlIGNs b3Nlc3Qgc3ltYm9sIHRvIHRoZSBnaXZlbiBhZGRyZXNzLgotICoKLSAqIEBub2RlX21ncjoJCU5v ZGUgbWFuYWdlciBoYW5kbGUKLSAqIEBzeW1fYWRkcjoJCUdpdmVuIGFkZHJlc3MgdG8gZmluZCB0 aGUgY2xvc2VzdCBzeW1ib2wKLSAqIEBvZmZzZXRfcmFuZ2U6CQlvZmZzZXQgcmFuZ2UgdG8gbG9v ayBmbyB0aGUgY2xvc2VzdCBzeW1ib2wKLSAqIEBzeW1fYWRkcl9vdXRwdXQ6CVN5bWJvbCBPdXRw dXQgYWRkcmVzcwotICogQHN5bV9uYW1lOgkJU3RyaW5nIHdpdGggdGhlIHN5bWJvbCBuYW1lIG9m IHRoZSBjbG9zZXN0IHN5bWJvbAotICoKLSAqIAlUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBjbG9z ZXN0IHN5bWJvbCB0byB0aGUgYWRkcmVzcyB3aGVyZSBhIE1NVQotICoJRmF1bHQgb2NjdXJyZWQg b24gdGhlIERTUCBzaWRlLgotICovCi1pbnQgbm9kZV9maW5kX2FkZHIoc3RydWN0IG5vZGVfbWdy ICpub2RlX21nciwgdTMyIHN5bV9hZGRyLAotCQkJCXUzMiBvZmZzZXRfcmFuZ2UsIHZvaWQgKnN5 bV9hZGRyX291dHB1dCwKLQkJCQljaGFyICpzeW1fbmFtZSk7Ci0KLWVudW0gbm9kZV9zdGF0ZSBu b2RlX2dldF9zdGF0ZSh2b2lkICpobm9kZSk7Ci0jZW5kaWYKLQotI2VuZGlmIC8qIE5PREVfICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2Uvbm9kZWRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJy aWRnZS9ub2RlZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjk2MjNkLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRn ZS9ub2RlZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIG5vZGVk ZWZzLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZv ciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIE5PREUgY29uc3RhbnRzIGFuZCB0 eXBlcywgc2hhcmVkIGJ5IFBST0NFU1NPUiwgTk9ERSwgYW5kIERJU1AuCi0gKgotICogQ29weXJp Z2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBh Y2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJ VEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBX SVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U SUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lm bmRlZiBOT0RFREVGU18KLSNkZWZpbmUgTk9ERURFRlNfCi0KLSNkZWZpbmUgTk9ERV9TVVNQRU5E RURQUkkgLTEKLQotLyogTk9ERSBPYmplY3RzOiAqLwotc3RydWN0IG5vZGVfbWdyOwotc3RydWN0 IG5vZGVfb2JqZWN0OwotCi0jZW5kaWYgLyogTk9ERURFRlNfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZXByaXYuaCBiL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlcHJpdi5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWI1NGJiLi4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlcHJpdi5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBub2RlcHJpdi5oCi0gKgotICogRFNQ LUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNz b3JzLgotICoKLSAqIFByaXZhdGUgbm9kZSBoZWFkZXIgc2hhcmVkIGJ5IE5PREUgYW5kIERJU1Au Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4K LSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBg YEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U SUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuCi0gKi8KLQotI2lmbmRlZiBOT0RFUFJJVl8KLSNkZWZpbmUgTk9ERVBSSVZfCi0KLSNpbmNs dWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZWRlZnMu aD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbmxkcmRlZnMuaD4KLQotLyogRFNQIGFkZHJlc3Mgb2Yg bm9kZSBlbnZpcm9ubWVudCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgdTMyIG5vZGVlbnY7Ci0KLS8q Ci0gKiAgTm9kZSBjcmVhdGUgc3RydWN0dXJlcwotICovCi0KLS8qIE1lc3NhZ2Ugbm9kZSAqLwot c3RydWN0IG5vZGVfbXNnYXJncyB7Ci0JdTMyIG1heF9tc2dzOwkJLyogTWF4ICMgb2Ygc2ltdWx0 YW5lb3VzIG1lc3NhZ2VzIGZvciBub2RlICovCi0JdTMyIHNlZ19pZDsJCS8qIFNlZ21lbnQgZm9y IGFsbG9jYXRpbmcgbWVzc2FnZSBidWZmZXJzICovCi0JdTMyIG5vdGlmeV90eXBlOwkvKiBOb3Rp ZnkgdHlwZSAoU0VNX3Bvc3QsIFNXSV9wb3N0LCBldGMuKSAqLwotCXUzMiBhcmdfbGVuZ3RoOwkJ LyogTGVuZ3RoIGluIDMyLWJpdCB3b3JkcyBvZiBhcmcgZGF0YSBibG9jayAqLwotCXU4ICpwZGF0 YTsJCS8qIEFyZ3VtZW50IGRhdGEgZm9yIG5vZGUgKi8KLX07Ci0KLXN0cnVjdCBub2RlX3N0cm1k ZWYgewotCXUzMiBidWZfc2l6ZTsJCS8qIFNpemUgb2YgYnVmZmVycyBmb3IgU0lPIHN0cmVhbSAq LwotCXUzMiBudW1fYnVmczsJCS8qIG1heCAjIG9mIGJ1ZmZlcnMgaW4gU0lPIHN0cmVhbSBhdCBv bmNlICovCi0JdTMyIHNlZ19pZDsJCS8qIE1lbW9yeSBzZWdtZW50IGlkIHRvIGFsbG9jYXRlIGJ1 ZmZlcnMgKi8KLQl1MzIgdGltZW91dDsJCS8qIFRpbWVvdXQgZm9yIGJsb2NraW5nIFNJTyBjYWxs cyAqLwotCXUzMiBidWZfYWxpZ25tZW50OwkvKiBCdWZmZXIgYWxpZ25tZW50ICovCi0JY2hhciAq c3pfZGV2aWNlOwkvKiBEZXZpY2UgbmFtZSBmb3Igc3RyZWFtICovCi19OwotCi0vKiBUYXNrIG5v ZGUgKi8KLXN0cnVjdCBub2RlX3Rhc2thcmdzIHsKLQlzdHJ1Y3Qgbm9kZV9tc2dhcmdzIG5vZGVf bXNnX2FyZ3M7Ci0JczMyIHByaW87Ci0JdTMyIHN0YWNrX3NpemU7Ci0JdTMyIHN5c19zdGFja19z aXplOwotCXUzMiBzdGFja19zZWc7Ci0JdTMyIGRzcF9oZWFwX3Jlc19hZGRyOwkvKiBEU1Agdmly dHVhbCBoZWFwIGFkZHJlc3MgKi8KLQl1MzIgZHNwX2hlYXBfYWRkcjsJLyogRFNQIHZpcnR1YWwg aGVhcCBhZGRyZXNzICovCi0JdTMyIGhlYXBfc2l6ZTsJCS8qIEhlYXAgc2l6ZSAqLwotCXUzMiBn cHBfaGVhcF9hZGRyOwkvKiBHUFAgdmlydHVhbCBoZWFwIGFkZHJlc3MgKi8KLQl1MzIgcHJvZmls ZV9pZDsJCS8qIFByb2ZpbGUgSUQgKi8KLQl1MzIgbnVtX2lucHV0czsKLQl1MzIgbnVtX291dHB1 dHM7Ci0JdTMyIGRhaXNfYXJnOwkvKiBBZGRyZXNzIG9mIGlBbGcgb2JqZWN0ICovCi0Jc3RydWN0 IG5vZGVfc3RybWRlZiAqc3RybV9pbl9kZWY7Ci0Jc3RydWN0IG5vZGVfc3RybWRlZiAqc3RybV9v dXRfZGVmOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2NyZWF0ZWFyZ3MgPT09PT09PT0K LSAqLwotc3RydWN0IG5vZGVfY3JlYXRlYXJncyB7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgbm9kZV9t c2dhcmdzIG5vZGVfbXNnX2FyZ3M7Ci0JCXN0cnVjdCBub2RlX3Rhc2thcmdzIHRhc2tfYXJnX29i ajsKLQl9IGFzYTsKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9nZXRfY2hhbm5lbF9pZCA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEdldCB0aGUgY2hhbm5lbCBpbmRleCByZXNl cnZlZCBmb3IgYSBzdHJlYW0gY29ubmVjdGlvbiBiZXR3ZWVuIHRoZQotICogICAgICBob3N0IGFu ZCBhIG5vZGUuIFRoaXMgaW5kZXggaXMgcmVzZXJ2ZWQgd2hlbiBub2RlX2Nvbm5lY3QoKSBpcyBj YWxsZWQKLSAqICAgICAgdG8gY29ubmVjdCB0aGUgbm9kZSB3aXRoIHRoZSBob3N0LiBUaGlzIGlu ZGV4IHNob3VsZCBiZSBwYXNzZWQgdG8KLSAqICAgICAgdGhlIENITkxfT3BlbiBmdW5jdGlvbiB3 aGVuIHRoZSBzdHJlYW0gaXMgYWN0dWFsbHkgb3BlbmVkLgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCBhbGxvY2F0ZWQgZnJvbSBub2RlX2FsbG9j YXRlKCkuCi0gKiAgICAgIGRpcjogICAgICAgICAgIElucHV0IChEU1BfVE9OT0RFKSBvciBvdXRw dXQgKERTUF9GUk9NTk9ERSkuCi0gKiAgICAgIGluZGV4OiAgICAgICAgIFN0cmVhbSBpbmRleC4K LSAqICAgICAgY2hhbl9pZDogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgaW5kZXgu Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFV TFQ6ICAgIEludmFsaWQgaG5vZGUuCi0gKiAgICAgIC1FUEVSTTogIE5vdCBhIHRhc2sgb3IgREFJ UyBzb2NrZXQgbm9kZS4KLSAqICAgICAgLUVJTlZBTDogICAgIFRoZSBub2RlJ3Mgc3RyZWFtIGNv cnJlc3BvbmRpbmcgdG8gaW5kZXggYW5kIGRpcgotICogICAgICAgICAgICAgICAgICAgICAgaXMg bm90IGEgc3RyZWFtIHRvIG9yIGZyb20gdGhlIGhvc3QuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAg IFZhbGlkIGRpci4KLSAqICAgICAgY2hhbl9pZCAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8K LWV4dGVybiBpbnQgbm9kZV9nZXRfY2hhbm5lbF9pZChzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2Rl LAotCQkJCSAgICAgIHUzMiBkaXIsIHUzMiBpbmRleCwgdTMyICpjaGFuX2lkKTsKLQotLyoKLSAq ICA9PT09PT09PSBub2RlX2dldF9zdHJtX21nciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIEdldCB0aGUgU1RSTSBtYW5hZ2VyIGZvciBhIG5vZGUuCi0gKiAgUGFyYW1ldGVyczoKLSAq ICAgICAgaG5vZGU6ICAgICAgICAgIE5vZGUgYWxsb2NhdGVkIHdpdGggbm9kZV9hbGxvY2F0ZSgp LgotICogICAgICBzdHJtX21hbjogICAgICAgTG9jYXRpb24gdG8gc3RvcmUgU1RSTSBtYW5hZ2Vy IG9uIG91dHB1dC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAq ICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAg c3RybV9tYW4gIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IG5vZGVfZ2V0 X3N0cm1fbWdyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0JCQkJICAgIHN0cnVjdCBzdHJt X21nciAqKnN0cm1fbWFuKTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2dldF90aW1lb3V0ID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgR2V0IHRoZSB0aW1lb3V0IHZhbHVlIG9mIGEg bm9kZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICBOb2RlIGFsbG9jYXRl ZCB3aXRoIG5vZGVfYWxsb2NhdGUoKSwgb3IgRFNQX0hHUFBOT0RFLgotICogIFJldHVybnM6Ci0g KiAgICAgIE5vZGUncyB0aW1lb3V0IHZhbHVlLgotICogIFJlcXVpcmVzOgotICogICAgICBWYWxp ZCBobm9kZS4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gdTMyIG5vZGVfZ2V0X3RpbWVvdXQo c3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9nZXRf dHlwZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEdldCB0aGUgdHlwZSAoZGV2aWNl LCBtZXNzYWdlLCB0YXNrLCBvciBYREFJUyBzb2NrZXQpIG9mIGEgbm9kZS4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBobm9kZTogICAgICBOb2RlIGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2Nh dGUoKSwgb3IgRFNQX0hHUFBOT0RFLgotICogIFJldHVybnM6Ci0gKiAgICAgIE5vZGUgdHlwZTog IE5PREVfREVWSUNFLCBOT0RFX1RBU0ssIE5PREVfWERBSVMsIG9yIE5PREVfR1BQLgotICogIFJl cXVpcmVzOgotICogICAgICBWYWxpZCBobm9kZS4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4g ZW51bSBub2RlX3R5cGUgbm9kZV9nZXRfdHlwZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKTsK LQotLyoKLSAqICA9PT09PT09PSBnZXRfbm9kZV9pbmZvID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgR2V0IG5vZGUgaW5mb3JtYXRpb24gd2l0aG91dCBob2xkaW5nIHNlbWFwaG9yZS4K LSAqICBQYXJhbWV0ZXJzOgotICogICAgICBobm9kZTogICAgICBOb2RlIGFsbG9jYXRlZCB3aXRo IG5vZGVfYWxsb2NhdGUoKSwgb3IgRFNQX0hHUFBOT0RFLgotICogIFJldHVybnM6Ci0gKiAgICAg IE5vZGUgaW5mbzogIHByaW9yaXR5LCBkZXZpY2Ugb3duZXIsIG5vLiBvZiBzdHJlYW1zLCBleGVj dXRpb24gc3RhdGUKLSAqICAgICAgICAgICAgICAgICAgTkRCIHByb3BlcnRpZXMuCi0gKiAgUmVx dWlyZXM6Ci0gKiAgICAgIFZhbGlkIGhub2RlLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiB2 b2lkIGdldF9ub2RlX2luZm8oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKLQkJCSAgc3RydWN0 IGRzcF9ub2RlaW5mbyAqbm9kZV9pbmZvKTsKLQotLyoKLSAqICA9PT09PT09PSBub2RlX2dldF9s b2FkX3R5cGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBHZXQgdGhlIGxvYWQgdHlw ZSAoZHluYW1pYywgb3ZlcmxheSwgc3RhdGljKSBvZiBhIG5vZGUuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCks IG9yIERTUF9IR1BQTk9ERS4KLSAqICBSZXR1cm5zOgotICogICAgICBOb2RlIHR5cGU6ICBOTERS X0RZTkFNSUNMT0FELCBOTERSX09WTFlMT0FELCBOTERSX1NUQVRJQ0xPQUQKLSAqICBSZXF1aXJl czoKLSAqICAgICAgVmFsaWQgaG5vZGUuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGVudW0g bmxkcl9sb2FkdHlwZSBub2RlX2dldF9sb2FkX3R5cGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9k ZSk7Ci0KLSNlbmRpZiAvKiBOT0RFUFJJVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9udGZ5LmggYi9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbnRmeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA2YmI5NGQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9udGZ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAs MCBAQAotLyoKLSAqIG50ZnkuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9y dCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBNYW5hZ2UgbGlzdHMg b2Ygbm90aWZpY2F0aW9uIGV2ZW50cy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBU ZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwot ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJ UyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBP UgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIE5URllfCi0jZGVmaW5l IE5URllfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotI2luY2x1ZGUgPGRzcGJy aWRnZS9kYmRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgotCi0vKioKLSAqIG50 Znlfb2JqZWN0IC0gaGVhZCBzdHJ1Y3R1cmUgdG8gbm9maWZ5IGRzcGJyaWRnZSBldmVudHMKLSAq IEBoZWFkOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCi0gKiBAbnRmeV9sb2NrOglsb2NrIGZvciBs aXN0IGFjY2Vzcy4KLSAqCi0gKi8KLXN0cnVjdCBudGZ5X29iamVjdCB7Ci0Jc3RydWN0IHJhd19u b3RpZmllcl9oZWFkIGhlYWQ7LyogTGlzdCBvZiBub3RpZmllciBvYmplY3RzICovCi0Jc3Bpbmxv Y2tfdCBudGZ5X2xvY2s7CS8qIEZvciBjcml0aWNhbCBzZWN0aW9ucyAqLwotfTsKLQotLyoqCi0g KiBudGZ5X2V2ZW50IC0gc3RydWN0dXJlIHN0b3JlIHNwZWNpZnkgZXZlbnQgdG8gYmUgbm90aWZp ZWQKLSAqIEBub3RpX2Jsb2NrOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCi0gKiBAZXZlbnQ6CWV2 ZW50IHRoYXQgaXQgcmVzcG9uZAotICogQHR5cGU6IAlldmVudCB0eXBlIChvbmx5IERTUF9TSUdO QUxFVkVOVCBzdXBwb3J0ZWQpCi0gKiBAc3luY19vYmo6CXN5bmNfZXZlbnQgdXNlZCB0byBzZXQg dGhlIGV2ZW50Ci0gKgotICovCi1zdHJ1Y3QgbnRmeV9ldmVudCB7Ci0Jc3RydWN0IG5vdGlmaWVy X2Jsb2NrIG5vdGlfYmxvY2s7Ci0JdTMyIGV2ZW50OwkvKiBFdmVudHMgdG8gYmUgbm90aWZpZWQg YWJvdXQgKi8KLQl1MzIgdHlwZTsJLyogVHlwZSBvZiBub3RpZmljYXRpb24gdG8gYmUgc2VudCAq LwotCXN0cnVjdCBzeW5jX29iamVjdCBzeW5jX29iajsKLX07Ci0KLQotLyoqCi0gKiBkc3Bfbm90 aWZpZXJfZXZlbnQoKSAtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIG5vZml0eSBldmVudHMKLSAqIEB0 aGlzOgkJcG9pbnRlciB0byBpdHNlbGYgc3RydWN0IG5vdGlmaWVyX2Jsb2NrCi0gKiBAZXZlbnQ6 CWV2ZW50IHRvIGJlIG5vdGlmaWVkLgotICogQGRhdGE6CQlDdXJyZW50bHkgbm90IHVzZWQuCi0g KgotICovCi1pbnQgZHNwX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhp cywgdW5zaWduZWQgbG9uZyBldmVudCwKLQkJCSAgIHZvaWQgKmRhdGEpOwotCi0vKioKLSAqIG50 ZnlfaW5pdCgpIC0gU2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBudGZ5X29iamVjdCBzdHJ1 Y3R1cmUuCi0gKiBAbm86CQlwb2ludGVyIHRvIG50Znlfb2JqZWN0IHN0cnVjdHVyZS4KLSAqCi0g KiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG50Znlfb2JqZWN0 IGluIG9yZGVyIGl0Ci0gKiBjYW4gYmUgdXNlZCBieSB0aGUgb3RoZXIgbnRmeSBmdW5jdGlvbnMu Ci0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIG50ZnlfaW5pdChzdHJ1Y3QgbnRmeV9vYmplY3Qg Km5vKQotewotCXNwaW5fbG9ja19pbml0KCZuby0+bnRmeV9sb2NrKTsKLQlSQVdfSU5JVF9OT1RJ RklFUl9IRUFEKCZuby0+aGVhZCk7Ci19Ci0KLS8qKgotICogbnRmeV9kZWxldGUoKSAtIGRlbGV0 ZSBsaXN0IG9mIG5vZnkgZXZlbnRzIHJlZ2lzdGVyZWQuCi0gKiBAbnRmeV9vYmo6CVBvaW50ZXIg dG8gdGhlIG50Znkgb2JqZWN0IHN0cnVjdHVyZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gcmVtb3ZlIGFsbCB0aGUgbm90aWZ5IGV2ZW50cyByZWdpc3RlcmVkLgotICogdW5yZWdp c3RlciBmdW5jdGlvbiBpcyBub3QgbmVlZGVkIGluIHRoaXMgZnVuY3Rpb24sIHRvIHVucmVnaXN0 ZXIKLSAqIGEgbnRmeV9ldmVudCBwbGVhc2UgbG9vayBhdCBudGZ5X3JlZ2lzdGVyIGZ1bmN0aW9u LgotICoKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG50ZnlfZGVsZXRlKHN0cnVjdCBudGZ5X29i amVjdCAqbnRmeV9vYmopCi17Ci0Jc3RydWN0IG50ZnlfZXZlbnQgKm5lOwotCXN0cnVjdCBub3Rp Zmllcl9ibG9jayAqbmI7Ci0KLQlzcGluX2xvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOwot CW5iID0gbnRmeV9vYmotPmhlYWQuaGVhZDsKLQl3aGlsZSAobmIpIHsKLQkJbmUgPSBjb250YWlu ZXJfb2YobmIsIHN0cnVjdCBudGZ5X2V2ZW50LCBub3RpX2Jsb2NrKTsKLQkJbmIgPSBuYi0+bmV4 dDsKLQkJa2ZyZWUobmUpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9j ayk7Ci19Ci0KLS8qKgotICogbnRmeV9ub3RpZnkoKSAtIG5vZml0eSBhbGwgZXZlbnQgcmVnaXN0 ZXIgZm9yIGFuIHNwZWNpZmljIGV2ZW50LgotICogQG50Znlfb2JqOglQb2ludGVyIHRvIHRoZSBu dGZ5X29iamVjdCBzdHJ1Y3R1cmUuCi0gKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIG5vdGlmaWVkLgot ICoKLSAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIGFsbCB0aGUgbnRmeSBldmVudHMgcmVnaXN0 ZXJzIGFuZAotICogc2V0IHRoZSBldmVudCB3aXRoIG1hY2ggd2l0aCBAZXZlbnQuCi0gKi8KLXN0 YXRpYyBpbmxpbmUgdm9pZCBudGZ5X25vdGlmeShzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2Jq LCB1MzIgZXZlbnQpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZudGZ5X29iai0+bnRmeV9sb2NrKTsKLQly YXdfbm90aWZpZXJfY2FsbF9jaGFpbigmbnRmeV9vYmotPmhlYWQsIGV2ZW50LCBOVUxMKTsKLQlz cGluX3VubG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7Ci19Ci0KLQotCi0vKioKLSAqIG50 ZnlfaW5pdCgpIC0gQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbnRmeV9ldmVudCBzdHJ1Y3R1cmUu Ci0gKiBAZXZlbnQ6CWV2ZW50IHRoYXQgdGhlIG50ZnkgZXZlbnQgd2lsbCByZXNwb25kCi0gKiBA dHlwZQkJZXZlbnQgdHlwZSAob25seSBEU1BfU0lHTkFMRVZFTlQgc3VwcG9ydGVkKQotICoKLSAq IFRoaXMgZnVuY3Rpb24gY3JlYXRlIGEgbnRmeV9ldmVudCBlbGVtZW50IGFuZCBzZXRzIHRoZSBl dmVudCBpdCB3aWxsCi0gKiByZXNwb25kIHRoZSBudGZ5X2V2ZW50IGluIG9yZGVyIGl0IGNhbiBi ZSB1c2VkIGJ5IHRoZSBvdGhlciBudGZ5IGZ1bmN0aW9ucy4KLSAqIEluIGNhc2Ugb2Ygc3VjY2Vz cyBpdCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG50ZnlfZXZlbnQgc3RydWN0Ci0gKiBj cmVhdGVkLiBPdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gTlVMTDsKLSAqLwotCi1zdGF0aWMgaW5s aW5lIHN0cnVjdCBudGZ5X2V2ZW50ICpudGZ5X2V2ZW50X2NyZWF0ZSh1MzIgZXZlbnQsIHUzMiB0 eXBlKQotewotCXN0cnVjdCBudGZ5X2V2ZW50ICpuZTsKLQluZSA9IGttYWxsb2Moc2l6ZW9mKHN0 cnVjdCBudGZ5X2V2ZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5lKSB7Ci0JCXN5bmNfaW5pdF9l dmVudCgmbmUtPnN5bmNfb2JqKTsKLQkJbmUtPm5vdGlfYmxvY2subm90aWZpZXJfY2FsbCA9IGRz cF9ub3RpZmllcl9ldmVudDsKLQkJbmUtPmV2ZW50ID0gZXZlbnQ7Ci0JCW5lLT50eXBlID0gdHlw ZTsKLQl9Ci0JcmV0dXJuIG5lOwotfQotCi0vKioKLSAqIG50ZnlfcmVnaXN0ZXIoKSAtIHJlZ2lz dGVyIG5ldyBudGZ5X2V2ZW50IGludG8gYSBnaXZlbiBudGZ5X29iamVjdAotICogQG50Znlfb2Jq OglQb2ludGVyIHRvIHRoZSBudGZ5X29iamVjdCBzdHJ1Y3R1cmUuCi0gKiBAbm90aToJCVBvaW50 ZXIgdG8gdGhlIGhhbmRsZSB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlciBzcGFjZS4KLSAqIEBl dmVudAlldmVudCB0aGF0IHRoZSBudGZ5IGV2ZW50IHdpbGwgcmVzcG9uZAotICogQHR5cGUJCWV2 ZW50IHR5cGUgKG9ubHkgRFNQX1NJR05BTEVWRU5UIHN1cHBvcnRlZCkKLSAqCi0gKiBUaGlzIGZ1 bmN0aW9uIHJlZ2lzdGVyIGEgbmV3IG50ZnlfZXZlbnQgaW50byB0aGUgbnRmeV9vYmplY3QgbGlz dCwKLSAqIHdoaWNoIHdpbGwgcmVzcG9uZCB0byB0aGUgQGV2ZW50IHBhc3NlZC4KLSAqIFRoaXMg ZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpbiBjYXNlIG9mIGVycm9yLgotICogLUVGQVVMVCBpbiBj YXNlIG9mIGJhZCBwb2ludGVycyBhbmQKLSAqIERTUF9FTWVtb3J5IGluIGNhc2Ugb2Ygbm8gbWVt b3J5IHRvIGNyZWF0ZSBudGZ5X2V2ZW50LgotICovCi1zdGF0aWMgIGlubGluZSBpbnQgbnRmeV9y ZWdpc3RlcihzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqLAotCQkJIHN0cnVjdCBkc3Bfbm90 aWZpY2F0aW9uICpub3RpLAotCQkJIHUzMiBldmVudCwgdTMyIHR5cGUpCi17Ci0Jc3RydWN0IG50 ZnlfZXZlbnQgKm5lOwotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKCFub3RpIHx8ICFudGZ5X29i aikgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQlpZiAoIWV2 ZW50KSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCW5lID0g bnRmeV9ldmVudF9jcmVhdGUoZXZlbnQsIHR5cGUpOwotCWlmICghbmUpIHsKLQkJc3RhdHVzID0g LUVOT01FTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0Jbm90aS0+aGFuZGxlID0gJm5lLT5zeW5j X29iajsKLQotCXNwaW5fbG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7Ci0JcmF3X25vdGlm aWVyX2NoYWluX3JlZ2lzdGVyKCZudGZ5X29iai0+aGVhZCwgJm5lLT5ub3RpX2Jsb2NrKTsKLQlz cGluX3VubG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7Ci1mdW5jX2VuZDoKLQlyZXR1cm4g c3RhdHVzOwotfQotCi0vKioKLSAqIG50ZnlfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlciBhIG50 ZnlfZXZlbnQgZnJvbSBhIGdpdmVuIG50Znlfb2JqZWN0Ci0gKiBAbnRmeV9vYmo6CVBvaW50ZXIg dG8gdGhlIG50Znlfb2JqZWN0IHN0cnVjdHVyZS4KLSAqIEBub3RpOgkJUG9pbnRlciB0byB0aGUg ZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lz dGVyIGEgbnRmeV9ldmVudCBmcm9tIHRoZSBudGZ5X29iamVjdCBsaXN0LAotICogQG5vdGkgY29u dGFpbnMgdGhlIGV2ZW50IHdoaWNoIGlzIHdhbnRlZCB0byBiZSByZW1vdmVkLgotICogVGhpcyBm dW5jdGlvbiB3aWxsIHJldHVybiAwIGluIGNhc2Ugb2YgZXJyb3IuCi0gKiAtRUZBVUxUIGluIGNh c2Ugb2YgYmFkIHBvaW50ZXJzIGFuZAotICogRFNQX0VNZW1vcnkgaW4gY2FzZSBvZiBubyBtZW1v cnkgdG8gY3JlYXRlIG50ZnlfZXZlbnQuCi0gKi8KLXN0YXRpYyAgaW5saW5lIGludCBudGZ5X3Vu cmVnaXN0ZXIoc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iaiwKLQkJCSBzdHJ1Y3QgZHNwX25v dGlmaWNhdGlvbiAqbm90aSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgbnRmeV9ldmVu dCAqbmU7Ci0KLQlpZiAoIW5vdGkgfHwgIW50Znlfb2JqKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7 Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JbmUgPSBjb250YWluZXJfb2YoKHN0cnVjdCBzeW5j X29iamVjdCAqKW5vdGksIHN0cnVjdCBudGZ5X2V2ZW50LAotCQkJCQkJCQlzeW5jX29iaik7Ci0J c3Bpbl9sb2NrX2JoKCZudGZ5X29iai0+bnRmeV9sb2NrKTsKLQlyYXdfbm90aWZpZXJfY2hhaW5f dW5yZWdpc3RlcigmbnRmeV9vYmotPmhlYWQsCi0JCQkJCQkmbmUtPm5vdGlfYmxvY2spOwotCWtm cmVlKG5lKTsKLQlzcGluX3VubG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7Ci1mdW5jX2Vu ZDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0jZW5kaWYJCQkJLyogTlRGWV8gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmgg Yi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvYy5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGMyNDU3Li4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmgKKysrIC9kZXYv bnVsbApAQCAtMSw1OTEgKzAsMCBAQAotLyoKLSAqIHByb2MuaAotICoKLSAqIERTUC1CSU9TIEJy aWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAq Ci0gKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVsZSBpbnRlcmZhY2UuCi0gKgotICogQ29w eXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlz IHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5E IFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI QU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQot I2lmbmRlZiBQUk9DXwotI2RlZmluZSBQUk9DXwotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2Rl ZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRn ZS9kcnYuaD4KLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2F0dGFjaCA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIFByZXBhcmUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBhIHBhcnRpY3Vs YXIgRFNQIHByb2Nlc3NvciwgYW5kIHJldHVybgotICogICAgICBhIGhhbmRsZSB0byB0aGUgcHJv Y2Vzc29yIG9iamVjdC4gVGhlIFBST0MgT2JqZWN0IGdldHMgY3JlYXRlZAotICogIFBhcmFtZXRl cnM6Ci0gKiAgICAgIHByb2Nlc3Nvcl9pZCAgOgkgICBUaGUgcHJvY2Vzc29yIGluZGV4ICh6ZXJv LWJhc2VkKS4KLSAqICAgICAgaG1ncl9vYmogIDoJICAgSGFuZGxlIHRvIHRoZSBNYW5hZ2VyIE9i amVjdAotICogICAgICBhdHRyX2luICAgICA6CSAgIFB0ciB0byB0aGUgZHNwX3Byb2Nlc3NvcmF0 dHJpbiBzdHJ1Y3R1cmUuCi0gKgkJCSAgICAgIEEgTlVMTCB2YWx1ZSBtZWFucyB1c2UgZGVmYXVs dCB2YWx1ZXMuCi0gKiAgICAgIHBoX3Byb2Nlc3NvciA6CSAgIFB0ciB0byBsb2NhdGlvbiB0byBz dG9yZSBwcm9jZXNzb3IgaGFuZGxlLgotICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAgIDoJICAg U3VjY2Vzcy4KLSAqICAgICAgLUVQRVJNICAgOgkgICBHZW5lcmFsIGZhaWx1cmUuCi0gKiAgICAg IC1FRkFVTFQgOgkgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIDA6ICAgU3Vj Y2VzczsgUHJvY2Vzc29yIGFscmVhZHkgYXR0YWNoZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAg IHBoX3Byb2Nlc3NvciAhPSBOVUxMLgotICogICAgICBQUk9DIEluaXRpYWxpemVkLgotICogIEVu c3VyZXM6Ci0gKiAgICAgIC1FUEVSTSwgYW5kICpwaF9wcm9jZXNzb3IgPT0gTlVMTCwgT1IKLSAq ICAgICAgU3VjY2VzcyBhbmQgKnBoX3Byb2Nlc3NvciBpcyBhIFZhbGlkIFByb2Nlc3NvciBoYW5k bGUgT1IKLSAqICAgICAgMCBhbmQgKnBoX3Byb2Nlc3NvciBpcyBhIFZhbGlkIFByb2Nlc3Nvci4K LSAqICBEZXRhaWxzOgotICogICAgICBXaGVuIGF0dHJfaW4gaXMgTlVMTCwgdGhlIGRlZmF1bHQg dGltZW91dCB2YWx1ZSBpcyAxMCBzZWNvbmRzLgotICovCi1leHRlcm4gaW50IHByb2NfYXR0YWNo KHUzMiBwcm9jZXNzb3JfaWQsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0 dHJpbgotCQkJICAgICAgKmF0dHJfaW4sIHZvaWQgKipwaF9wcm9jZXNzb3IsCi0JCQkgICAgICBz dHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9PT09PT09PSBwcm9j X2F1dG9fc3RhcnQgPT09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQSBQYXJ0aWN1bGFy IGRldmljZSBnZXRzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IGltYWdlCi0gKiAgICAgIGlmIHRo ZSBBdXRvU3RhcnQgZmxhZyBpcyBzZXQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaGRldl9v YmogIDogICBIYW5kbGUgdG8gdGhlIERldmljZQotICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAg IDogICBPbiBTdWNjZXNzZnVsIExvYWRpbmcKLSAqICAgICAgLUVOT0VOVCAgIDogICBObyBEU1Ag ZXhlYyBmaWxlIGZvdW5kLgotICogICAgICAtRVBFUk0gICA6ICAgR2VuZXJhbCBGYWlsdXJlCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIGhkZXZfb2JqICE9IE5VTEwuCi0gKiAgICAgIGRldl9ub2Rl X29iaiAhPSBOVUxMLgotICogICAgICBQUk9DIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0g Ki8KLWV4dGVybiBpbnQgcHJvY19hdXRvX3N0YXJ0KHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25v ZGVfb2JqLAotCQkJCSAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKLQotLyoKLSAqICA9 PT09PT09PSBwcm9jX2N0cmwgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBQYXNzIGNv bnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIEdQUCBkZXZpY2UgZHJpdmVyIG1hbmFnaW5nIHRoZSBE U1AKLSAqICAgICAgcHJvY2Vzc29yLiBUaGlzIHdpbGwgYmUgYW4gT0VNLW9ubHkgZnVuY3Rpb24s IGFuZCBub3QgcGFydCBvZiB0aGUKLSAqICAgICAgJ0JyaWRnZSBhcHBsaWNhdGlvbiBkZXZlbG9w ZXIncyBBUEkuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaHByb2Nlc3NvciAgOiAgICAgICBU aGUgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgZHdfY21kICAgICAgIDogICAgICAgUHJpdmF0 ZSBkcml2ZXIgSU9DVEwgY21kIElELgotICogICAgICBwYXJncyAgICAgICA6ICAgICAgIFB0ciB0 byBhbiBkcml2ZXIgZGVmaW5lZCBhcmd1bWVudCBzdHJ1Y3R1cmUuCi0gKiAgUmV0dXJuczoKLSAq ICAgICAgMCAgICAgOiAgICAgICBTVUNDRVNTCi0gKiAgICAgIC1FRkFVTFQgOiAgICAgICBJbnZh bGlkIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIC1FVElNRTogICAgICAgQSBUaW1lb3V0IE9j Y3VycmVkIGJlZm9yZSB0aGUgQ29udHJvbCBpbmZvcm1hdGlvbgotICoJCQkgIGNvdWxkIGJlIHNl bnQuCi0gKiAgICAgIC1FUEVSTSAgIDogICAgICAgR2VuZXJhbCBGYWlsdXJlLgotICogIFJlcXVp cmVzOgotICogICAgICBQUk9DIEluaXRpYWxpemVkLgotICogIEVuc3VyZXMKLSAqICBEZXRhaWxz OgotICogICAgICBUaGlzIGZ1bmN0aW9uIENhbGxzIGJyaWRnZV9kZXZfY3RybC4KLSAqLwotZXh0 ZXJuIGludCBwcm9jX2N0cmwodm9pZCAqaHByb2Nlc3NvciwKLQkJCSAgICB1MzIgZHdfY21kLCBz dHJ1Y3QgZHNwX2NiZGF0YSAqYXJnKTsKLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2RldGFjaCA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENsb3NlIGEgRFNQIHByb2Nlc3NvciBhbmQg ZGUtYWxsb2NhdGUgYWxsIChHUFApIHJlc291cmNlcyByZXNlcnZlZAotICogICAgICBmb3IgaXQu IFRoZSBQcm9jZXNzb3IgT2JqZWN0IGlzIGRlbGV0ZWQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAg ICAgcHJfY3R4dCAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogIFJldHVybnM6Ci0g KiAgICAgIDAgICAgIDogICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUIDogICBJblZhbGlkIEhh bmRsZS4KLSAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZS4KLSAqICBSZXF1aXJl czoKLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICogICAgICBQUk9D IE9iamVjdCBpcyBkZXN0cm95ZWQuCi0gKi8KLWV4dGVybiBpbnQgcHJvY19kZXRhY2goc3RydWN0 IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19lbnVt X25vZGVzID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRW51bWVyYXRlIHRoZSBub2Rl cyBjdXJyZW50bHkgYWxsb2NhdGVkIG9uIGEgcHJvY2Vzc29yLgotICogIFBhcmFtZXRlcnM6Ci0g KiAgICAgIGhwcm9jZXNzb3IgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgbm9k ZV90YWIgICAgOiAgIFRoZSBmaXJzdCBMb2NhdGlvbiBvZiBhbiBhcnJheSBhbGxvY2F0ZWQgZm9y IG5vZGUKLSAqCQkgICAgICBoYW5kbGVzLgotICogICAgICBub2RlX3RhYl9zaXplOiAgIFRoZSBu dW1iZXIgb2YgKERTUF9ITk9ERSkgaGFuZGxlcyB0aGF0IGNhbiBiZSBoZWxkCi0gKgkJICAgICAg dG8gdGhlIG1lbW9yeSB0aGUgY2xpZW50IGhhcyBhbGxvY2F0ZWQgZm9yIG5vZGVfdGFiCi0gKiAg ICAgIHB1X251bV9ub2RlcyAgOiAgIExvY2F0aW9uIHdoZXJlIERTUFByb2Nlc3Nvcl9FbnVtTm9k ZXMgd2lsbCByZXR1cm4KLSAqCQkgICAgICB0aGUgbnVtYmVyIG9mIHZhbGlkIGhhbmRsZXMgd3Jp dHRlbiB0byBub2RlX3RhYgotICogICAgICBwdV9hbGxvY2F0ZWQgOiAgIExvY2F0aW9uIHdoZXJl IERTUFByb2Nlc3Nvcl9FbnVtTm9kZXMgd2lsbCByZXR1cm4KLSAqCQkgICAgICB0aGUgbnVtYmVy IG9mIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBvbiB0aGUgRFNQLgotICogIFJldHVybnM6Ci0g KiAgICAgIDAgICAgIDogICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHBy b2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIC1FSU5WQUwgICA6ICAgVGhlIGFtb3VudCBvZiBtZW1v cnkgYWxsb2NhdGVkIGZvciBub2RlX3RhYiBpcwotICoJCSAgICAgIGluc3VmZmljZW50LiBUaGF0 IGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWN0dWFsbHkKLSAqCQkgICAgICBhbGxvY2F0ZWQgb24g dGhlIERTUCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlCi0gKgkJICAgICAgc3BlY2lmaWVkIGZv ciBub2RlX3RhYl9zaXplLgotICogICAgICAtRVBFUk0gICA6ICAgVW5hYmxlIHRvIGdldCBSZXNv dXJjZSBJbmZvcm1hdGlvbi4KLSAqICBEZXRhaWxzOgotICogIFJlcXVpcmVzCi0gKiAgICAgIHB1 X251bV9ub2RlcyBpcyBub3QgTlVMTC4KLSAqICAgICAgcHVfYWxsb2NhdGVkIGlzIG5vdCBOVUxM LgotICogICAgICBub2RlX3RhYiBpcyBub3QgTlVMTC4KLSAqICAgICAgUFJPQyBJbml0aWFsaXpl ZC4KLSAqICBFbnN1cmVzOgotICogIERldGFpbHM6Ci0gKi8KLWV4dGVybiBpbnQgcHJvY19lbnVt X25vZGVzKHZvaWQgKmhwcm9jZXNzb3IsCi0JCQkJICB2b2lkICoqbm9kZV90YWIsCi0JCQkJICB1 MzIgbm9kZV90YWJfc2l6ZSwKLQkJCQkgIHUzMiAqcHVfbnVtX25vZGVzLAotCQkJCSAgdTMyICpw dV9hbGxvY2F0ZWQpOwotCi0vKgotICogID09PT09PT09IHByb2NfZ2V0X3Jlc291cmNlX2luZm8g PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBFbnVtZXJhdGUgdGhlIHJlc291cmNlcyBj dXJyZW50bHkgYXZhaWxhYmxlIG9uIGEgcHJvY2Vzc29yLgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIGhwcm9jZXNzb3IgIDogICAgICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIHJl c291cmNlX3R5cGU6ICAgICAgVHlwZSBvZiByZXNvdXJjZSAuCi0gKiAgICAgIHJlc291cmNlX2lu Zm86ICAgICAgUHRyIHRvIHRoZSBkc3BfcmVzb3VyY2VpbmZvIHN0cnVjdHVyZS4KLSAqICAgICAg cmVzb3VyY2VfaW5mb19zaXplOiAgU2l6ZSBvZiB0aGUgc3RydWN0dXJlLgotICogIFJldHVybnM6 Ci0gKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVCA6ICAgICAg IEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVCQURSOiAgICBUaGUgcHJvY2Vz c29yIGlzIG5vdCBpbiB0aGUgUFJPQ19SVU5OSU5HIHN0YXRlLgotICogICAgICAtRVRJTUU6ICAg ICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQgdG8gdGhlCi0g KgkJCSAgcXVlcnJ5LgotICogICAgICAtRVBFUk0gICA6ICAgICAgIFVuYWJsZSB0byBnZXQgUmVz b3VyY2UgSW5mb3JtYXRpb24KLSAqICBSZXF1aXJlczoKLSAqICAgICAgcmVzb3VyY2VfaW5mbyBp cyBub3QgTlVMTC4KLSAqICAgICAgUGFyYW1ldGVyIHJlc291cmNlX3R5cGUgaXMgVmFsaWQuW1RC RF0KLSAqICAgICAgcmVzb3VyY2VfaW5mb19zaXplIGlzID49IHNpemVvZiBkc3BfcmVzb3VyY2Vp bmZvIHN0cnVjdC4KLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICog IERldGFpbHM6Ci0gKiAgICAgIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IHJldHVybnMKLSAqICAg ICAgLUVOT1NZUywgYW5kIGRvZXMgbm90IHdyaXRlIGFueSBkYXRhIHRvIHRoZSByZXNvdXJjZV9p bmZvIHN0cnVjdC4KLSAqLwotZXh0ZXJuIGludCBwcm9jX2dldF9yZXNvdXJjZV9pbmZvKHZvaWQg Kmhwcm9jZXNzb3IsCi0JCQkJCSB1MzIgcmVzb3VyY2VfdHlwZSwKLQkJCQkJIHN0cnVjdCBkc3Bf cmVzb3VyY2VpbmZvCi0JCQkJCSAqcmVzb3VyY2VfaW5mbywKLQkJCQkJIHUzMiByZXNvdXJjZV9p bmZvX3NpemUpOwotCi0vKgotICogPT09PT09PT0gcHJvY19nZXRfZGV2X29iamVjdCA9PT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXR1cm5zIHRoZSBERVYgSGFubGRlIGZvciBhIGdp dmVuIFByb2Nlc3NvciBoYW5kbGUKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBocHJvY2Vzc29y ICA6ICAgUHJvY2Vzc29yIEhhbmRsZQotICogICAgICBkZXZpY2Vfb2JqIDogICAgTG9jYXRpb24g dG8gc3RvcmUgdGhlIERFViBIYW5kbGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMCAgICAgOiAg IFN1Y2Nlc3M7ICpkZXZpY2Vfb2JqIGhhcyBEZXYgaGFuZGxlCi0gKiAgICAgIC1FUEVSTSAgIDog ICBGYWlsdXJlOyAqZGV2aWNlX29iaiBpcyB6ZXJvLgotICogIFJlcXVpcmVzOgotICogICAgICBk ZXZpY2Vfb2JqIGlzIG5vdCBOVUxMCi0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0gKiAgRW5z dXJlczoKLSAqICAgICAgMCAgICAgOiAgICpkZXZpY2Vfb2JqIGlzIG5vdCBOVUxMCi0gKiAgICAg IC1FUEVSTSAgIDogICAqZGV2aWNlX29iaiBpcyBOVUxMLgotICovCi1leHRlcm4gaW50IHByb2Nf Z2V0X2Rldl9vYmplY3Qodm9pZCAqaHByb2Nlc3NvciwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2X29i amVjdCAqKmRldmljZV9vYmopOwotCi0vKgotICogID09PT09PT09IHByb2NfZ2V0X3N0YXRlID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUgc3Bl Y2lmaWVkIERTUCBwcm9jZXNzb3IuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaHByb2Nlc3Nv ciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICBwcm9jX3N0YXRlX29iaiA6ICAg UHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkc3BfcHJvY2Vzc29yc3RhdGUKLSAqCQkgICAg ICBzdHJ1Y3R1cmUuCi0gKiAgICAgIHN0YXRlX2luZm9fc2l6ZTogU2l6ZSBvZiBkc3BfcHJvY2Vz c29yc3RhdGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCi0gKiAg ICAgIC1FRkFVTFQgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVQRVJN ICAgOiAgIEdlbmVyYWwgZmFpbHVyZSB3aGlsZSBxdWVyeWluZyBwcm9jZXNzb3Igc3RhdGUuCi0g KiAgUmVxdWlyZXM6Ci0gKiAgICAgIHByb2Nfc3RhdGVfb2JqIGlzIG5vdCBOVUxMCi0gKiAgICAg IHN0YXRlX2luZm9fc2l6ZSBpcyA+PSB0aGFuIHRoZSBzaXplIG9mIGRzcF9wcm9jZXNzb3JzdGF0 ZSBzdHJ1Y3R1cmUuCi0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAq ICBEZXRhaWxzOgotICovCi1leHRlcm4gaW50IHByb2NfZ2V0X3N0YXRlKHZvaWQgKmhwcm9jZXNz b3IsIHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUKLQkJCQkgKnByb2Nfc3RhdGVfb2JqLCB1MzIg c3RhdGVfaW5mb19zaXplKTsKLQotLyoKLSAqICA9PT09PT09PSBQUk9DX0dldFByb2Nlc3NvcklE ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUg c3BlY2lmaWVkIERTUCBwcm9jZXNzb3IuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgaHByb2Nl c3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICBwcm9jX2lkICAgICAgOiAg IFByb2Nlc3NvciBJRAotICoKLSAqICBSZXR1cm5zOgotICogICAgICAwICAgICA6ICAgU3VjY2Vz cy4KLSAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgotICogICAg ICAtRVBFUk0gICA6ICAgR2VuZXJhbCBmYWlsdXJlIHdoaWxlIHF1ZXJ5aW5nIHByb2Nlc3NvciBz dGF0ZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgcHJvY19zdGF0ZV9vYmogaXMgbm90IE5VTEwK LSAqICAgICAgc3RhdGVfaW5mb19zaXplIGlzID49IHRoYW4gdGhlIHNpemUgb2YgZHNwX3Byb2Nl c3NvcnN0YXRlIHN0cnVjdHVyZS4KLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAqICBFbnN1 cmVzOgotICogIERldGFpbHM6Ci0gKi8KLWV4dGVybiBpbnQgcHJvY19nZXRfcHJvY2Vzc29yX2lk KHZvaWQgKnByb2MsIHUzMiAqIHByb2NfaWQpOwotCi0vKgotICogID09PT09PT09IHByb2NfZ2V0 X3RyYWNlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIHRyYWNl IGJ1ZmZlciBmcm9tIHRoZSBzcGVjaWZpZWQgRFNQIHByb2Nlc3Nvci4KLSAqICBQYXJhbWV0ZXJz OgotICogICAgICBocHJvY2Vzc29yICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAg IHBidWYJOiAgIFB0ciB0byBidWZmZXIgdG8gaG9sZCB0cmFjZSBvdXRwdXQuCi0gKiAgICAgIG1h eF9zaXplICAgIDogICBNYXhpbXVtIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuCi0gKiAgUmV0 dXJuczoKLSAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQgOiAgIElu dmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFp bHVyZSB3aGlsZSByZXRyaWV2aW5nIHByb2Nlc3NvciB0cmFjZQotICoJCSAgICAgIEJ1ZmZlci4K LSAqICBSZXF1aXJlczoKLSAqICAgICAgcGJ1ZiBpcyBub3QgTlVMTAotICogICAgICBtYXhfc2l6 ZSBpcyA+IDAuCi0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoKLSAqICBE ZXRhaWxzOgotICovCi1leHRlcm4gaW50IHByb2NfZ2V0X3RyYWNlKHZvaWQgKmhwcm9jZXNzb3Is IHU4ICogcGJ1ZiwgdTMyIG1heF9zaXplKTsKLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2xvYWQg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXNldCBhIHByb2Nlc3NvciBhbmQgbG9h ZCBhIG5ldyBiYXNlIHByb2dyYW0gaW1hZ2UuCi0gKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0t b25seSBmdW5jdGlvbi4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBocHJvY2Vzc29yOiAgICAg ICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgYXJnY19pbmRleDogICAgICAgVGhlIG51 bWJlciBvZiBBcmd1bWVudHMoc3RyaW5ncylpbiB0aGUgYUFyZ1ZbXQotICogICAgICB1c2VyX2Fy Z3M6ICAgICAgIEFuIEFycmF5IG9mIEFyZ3VtZW50cyhVbmljb2RlIFN0cmluZ3MpCi0gKiAgICAg IHVzZXJfZW52cDogICAgICAgQW4gQXJyYXkgb2YgRW52aXJvbm1lbnQgc2V0dGluZ3MoVW5pY29k ZSBTdHJpbmdzKQotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgIFN1Y2Nlc3MuCi0gKiAg ICAgIC1FTk9FTlQ6ICAgICAgIFRoZSBEU1AgRXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kLgotICog ICAgICAtRUZBVUxUOiAgICAgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIC1F UEVSTSAgIDogICAgICAgVW5hYmxlIHRvIExvYWQgdGhlIFByb2Nlc3NvcgotICogIFJlcXVpcmVz OgotICogICAgICB1c2VyX2FyZ3MgaXMgbm90IE5VTEwKLSAqICAgICAgYXJnY19pbmRleCBpcyA+ IDAKLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICogICAgICBTdWNj ZXNzIGFuZCBQcm9jU3RhdGUgPT0gUFJPQ19MT0FERUQKLSAqICAgICAgb3IgRFNQX0ZBSUxFRCBz dGF0dXMuCi0gKiAgRGV0YWlsczoKLSAqICAgICAgRG9lcyBub3QgaW1wbGVtZW50IGFjY2VzcyBy aWdodHMgdG8gY29udHJvbCB3aGljaCBHUFAgYXBwbGljYXRpb24KLSAqICAgICAgY2FuIGxvYWQg dGhlIHByb2Nlc3Nvci4KLSAqLwotZXh0ZXJuIGludCBwcm9jX2xvYWQodm9pZCAqaHByb2Nlc3Nv ciwKLQkJCSAgICBjb25zdCBzMzIgYXJnY19pbmRleCwgY29uc3QgY2hhciAqKnVzZXJfYXJncywK LQkJCSAgICBjb25zdCBjaGFyICoqdXNlcl9lbnZwKTsKLQotLyoKLSAqICA9PT09PT09PSBwcm9j X3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlZ2lzdGVy IHRvIGJlIG5vdGlmaWVkIG9mIHNwZWNpZmljIHByb2Nlc3NvciBldmVudHMKLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBocHJvY2Vzc29yICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAg ICAgIGV2ZW50X21hc2sgIDogICBNYXNrIG9mIHR5cGVzIG9mIGV2ZW50cyB0byBiZSBub3RpZmll ZCBhYm91dC4KLSAqICAgICAgbm90aWZ5X3R5cGUgOiAgIFR5cGUgb2Ygbm90aWZpY2F0aW9uIHRv IGJlIHNlbnQuCi0gKiAgICAgIGhub3RpZmljYXRpb246ICBIYW5kbGUgdG8gYmUgdXNlZCBmb3Ig bm90aWZpY2F0aW9uLgotICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAgIDogICBTdWNjZXNzLgot ICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUgb3IgaG5vdGlmaWNh dGlvbi4KLSAqICAgICAgLUVJTlZBTCAgOiAgIFBhcmFtZXRlciBldmVudF9tYXNrIGlzIEludmFs aWQKLSAqICAgICAgRFNQX0VOT1RJTVAgOiAgIFRoZSBub3RpZmljYXRpb24gdHlwZSBzcGVjaWZp ZWQgaW4gdU5vdGlmeU1hc2sKLSAqCQkgICAgICBpcyBub3Qgc3VwcG9ydGVkLgotICogICAgICAt RVBFUk0gICA6ICAgVW5hYmxlIHRvIHJlZ2lzdGVyIGZvciBub3RpZmljYXRpb24uCi0gKiAgUmVx dWlyZXM6Ci0gKiAgICAgIGhub3RpZmljYXRpb24gaXMgbm90IE5VTEwKLSAqICAgICAgUFJPQyBJ bml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICogIERldGFpbHM6Ci0gKi8KLWV4dGVybiBpbnQg cHJvY19yZWdpc3Rlcl9ub3RpZnkodm9pZCAqaHByb2Nlc3NvciwKLQkJCQkgICAgICAgdTMyIGV2 ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwKLQkJCQkgICAgICAgc3RydWN0IGRzcF9ub3RpZmlj YXRpb24KLQkJCQkgICAgICAgKmhub3RpZmljYXRpb24pOwotCi0vKgotICogID09PT09PT09IHBy b2Nfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBOb3RpZnkg dGhlIFByb2Nlc3NvciBDbGllbnRzCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgcHJvYyAgICAg ICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIGV2ZW50cyAgICAgOiAgIEV2ZW50 IHRvIGJlIG5vdGlmaWVkIGFib3V0LgotICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAgIDogICBT dWNjZXNzLgotICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCi0g KiAgICAgIC1FUEVSTSAgIDogICBGYWlsdXJlIHRvIFNldCBvciBSZXNldCB0aGUgRXZlbnQKLSAq ICBSZXF1aXJlczoKLSAqICAgICAgZXZlbnRzIGlzIFN1cHBvcnRlZCBvciBWYWxpZCB0eXBlIG9m IEV2ZW50Ci0gKiAgICAgIHByb2MgaXMgYSB2YWxpZCBoYW5kbGUKLSAqICAgICAgUFJPQyBJbml0 aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IHByb2Nfbm90aWZ5X2NsaWVu dHModm9pZCAqcHJvYywgdTMyIGV2ZW50cyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19ub3Rp ZnlfYWxsX2NsaWVudHMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBOb3RpZnkgdGhl IFByb2Nlc3NvciBDbGllbnRzCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgcHJvYyAgICAgICA6 ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIGV2ZW50cyAgICAgOiAgIEV2ZW50IHRv IGJlIG5vdGlmaWVkIGFib3V0LgotICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAgIDogICBTdWNj ZXNzLgotICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAg ICAgIC1FUEVSTSAgIDogICBGYWlsdXJlIHRvIFNldCBvciBSZXNldCB0aGUgRXZlbnQKLSAqICBS ZXF1aXJlczoKLSAqICAgICAgZXZlbnRzIGlzIFN1cHBvcnRlZCBvciBWYWxpZCB0eXBlIG9mIEV2 ZW50Ci0gKiAgICAgIHByb2MgaXMgYSB2YWxpZCBoYW5kbGUKLSAqICAgICAgUFJPQyBJbml0aWFs aXplZC4KLSAqICBFbnN1cmVzOgotICogIERldGFpbHM6Ci0gKiAgICAgIE5PREUgQW5kIFNUUk0g d291bGQgdXNlIHRoaXMgZnVuY3Rpb24gdG8gbm90aWZ5IHRoZWlyIGNsaWVudHMKLSAqICAgICAg YWJvdXQgdGhlIHN0YXRlIGNoYW5nZXMgaW4gTk9ERSBvciBTVFJNLgotICovCi1leHRlcm4gaW50 IHByb2Nfbm90aWZ5X2FsbF9jbGllbnRzKHZvaWQgKnByb2MsIHUzMiBldmVudHMpOwotCi0vKgot ICogID09PT09PT09IHByb2Nfc3RhcnQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBT dGFydCBhIHByb2Nlc3NvciBydW5uaW5nLgotICogICAgICBQcm9jZXNzb3IgbXVzdCBiZSBpbiBQ Uk9DX0xPQURFRCBzdGF0ZS4KLSAqICAgICAgVGhpcyB3aWxsIGJlIGFuIE9FTS1vbmx5IGZ1bmN0 aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlICdCcmlkZ2UKLSAqICAgICAgYXBwbGljYXRpb24gZGV2 ZWxvcGVyJ3MgQVBJLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhwcm9jZXNzb3IgIDogICAg ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMCAgICAgOiAg ICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUIDogICAgICAgSW52YWxpZCBwcm9jZXNzb3Ig aGFuZGxlLgotICogICAgICAtRUJBRFI6ICAgIFByb2Nlc3NvciBpcyBub3QgaW4gUFJPQ19MT0FE RUQgc3RhdGUuCi0gKiAgICAgIC1FUEVSTSAgIDogICAgICAgVW5hYmxlIHRvIHN0YXJ0IHRoZSBw cm9jZXNzb3IuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0gKiAg RW5zdXJlczoKLSAqICAgICAgU3VjY2VzcyBhbmQgUHJvY1N0YXRlID09IFBST0NfUlVOTklORyBv ciBEU1BfRkFJTEVEIHN0YXR1cy4KLSAqICBEZXRhaWxzOgotICovCi1leHRlcm4gaW50IHByb2Nf c3RhcnQodm9pZCAqaHByb2Nlc3Nvcik7Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19zdG9wID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU3RhcnQgYSBwcm9jZXNzb3IgcnVubmluZy4K LSAqICAgICAgUHJvY2Vzc29yIG11c3QgYmUgaW4gUFJPQ19MT0FERUQgc3RhdGUuCi0gKiAgICAg IFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSAn QnJpZGdlCi0gKiAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlcidzIEFQSS4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBocHJvY2Vzc29yICA6ICAgICAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgot ICogIFJldHVybnM6Ci0gKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVG QVVMVCA6ICAgICAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVCQURSOiAg ICBQcm9jZXNzb3IgaXMgbm90IGluIFBST0NfTE9BREVEIHN0YXRlLgotICogICAgICAtRVBFUk0g ICA6ICAgICAgIFVuYWJsZSB0byBzdGFydCB0aGUgcHJvY2Vzc29yLgotICogIFJlcXVpcmVzOgot ICogICAgICBQUk9DIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIFN1Y2Nlc3Mg YW5kIFByb2NTdGF0ZSA9PSBQUk9DX1JVTk5JTkcgb3IgRFNQX0ZBSUxFRCBzdGF0dXMuCi0gKiAg RGV0YWlsczoKLSAqLwotZXh0ZXJuIGludCBwcm9jX3N0b3Aodm9pZCAqaHByb2Nlc3Nvcik7Ci0K LS8qCi0gKiAgPT09PT09PT0gcHJvY19lbmRfZG1hID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAq ICAgICAgQmVnaW4gYSBETUEgdHJhbnNmZXIKLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBocHJv Y2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICBwbXB1X2FkZHIJ OiAgIEJ1ZmZlciBzdGFydCBhZGRyZXNzCi0gKiAgICAgIHVsX3NpemUJCTogICBCdWZmZXIgc2l6 ZQotICogICAgICBkaXIJCTogICBUaGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFuc2ZlcgotICogIFJl cXVpcmVzOgotICogICAgICBNZW1vcnkgd2FzIHByZXZpb3VzbHkgbWFwcGVkLgotICovCi1leHRl cm4gaW50IHByb2NfZW5kX2RtYSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUz MiB1bF9zaXplLAotCQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKLS8qCi0gKiAg PT09PT09PT0gcHJvY19iZWdpbl9kbWEgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBC ZWdpbiBhIERNQSB0cmFuc2ZlcgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhwcm9jZXNzb3Ig ICAgICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAgIHBtcHVfYWRkcgk6ICAgQnVm ZmVyIHN0YXJ0IGFkZHJlc3MKLSAqICAgICAgdWxfc2l6ZQkJOiAgIEJ1ZmZlciBzaXplCi0gKiAg ICAgIGRpcgkJOiAgIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHRyYW5zZmVyCi0gKiAgUmVxdWlyZXM6 Ci0gKiAgICAgIE1lbW9yeSB3YXMgcHJldmlvdXNseSBtYXBwZWQuCi0gKi8KLWV4dGVybiBpbnQg cHJvY19iZWdpbl9kbWEodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxf c2l6ZSwKLQkJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Ci0KLS8qCi0gKiAgPT09 PT09PT0gcHJvY19mbHVzaF9tZW1vcnkgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBG bHVzaGVzIGEgYnVmZmVyIGZyb20gdGhlIE1QVSBkYXRhIGNhY2hlLgotICogIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIGhwcm9jZXNzb3IgICAgICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAg ICAgIHBtcHVfYWRkcgk6ICAgQnVmZmVyIHN0YXJ0IGFkZHJlc3MKLSAqICAgICAgdWxfc2l6ZQkg IDogICBCdWZmZXIgc2l6ZQotICogICAgICB1bF9mbGFncwkgOiAgIFJlc2VydmVkLgotICogIFJl dHVybnM6Ci0gKiAgICAgIDAJIDogICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUICAgICA6ICAg SW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICAtRVBFUk0gICAgICAgOiAgIEdlbmVy YWwgZmFpbHVyZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAq ICBFbnN1cmVzOgotICogIERldGFpbHM6Ci0gKiAgICAgIEFsbCB0aGUgYXJndW1lbnRzIGFyZSBj dXJyZW50bHkgaWdub3JlZC4KLSAqLwotZXh0ZXJuIGludCBwcm9jX2ZsdXNoX21lbW9yeSh2b2lk ICpocHJvY2Vzc29yLAotCQkJCSAgICB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLCB1MzIg dWxfZmxhZ3MpOwotCi0vKgotICogID09PT09PT09IHByb2NfaW52YWxpZGF0ZV9tZW1vcnkgPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBJbnZhbGlkYXRlcyBhIGJ1ZmZlciBmcm9tIHRo ZSBNUFUgZGF0YSBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBocHJvY2Vzc29yICAg ICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICBwbXB1X2FkZHIJOiAgIEJ1ZmZl ciBzdGFydCBhZGRyZXNzCi0gKiAgICAgIHVsX3NpemUJICA6ICAgQnVmZmVyIHNpemUKLSAqICBS ZXR1cm5zOgotICogICAgICAwCSA6ICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVCAgICAgOiAg IEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5l cmFsIGZhaWx1cmUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0g KiAgRW5zdXJlczoKLSAqICBEZXRhaWxzOgotICogICAgICBBbGwgdGhlIGFyZ3VtZW50cyBhcmUg Y3VycmVudGx5IGlnbm9yZWQuCi0gKi8KLWV4dGVybiBpbnQgcHJvY19pbnZhbGlkYXRlX21lbW9y eSh2b2lkICpocHJvY2Vzc29yLAotCQkJCQkgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSk7 Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19tYXAgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBNYXBzIGEgTVBVIGJ1ZmZlciB0byBEU1AgYWRkcmVzcyBzcGFjZS4KLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgot ICogICAgICBwbXB1X2FkZHIJOiAgIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdp b24gdG8gbWFwLgotICogICAgICB1bF9zaXplCSAgOiAgIFNpemUgb2YgdGhlIG1lbW9yeSByZWdp b24gdG8gbWFwLgotICogICAgICByZXFfYWRkcgk6ICAgUmVxdWVzdGVkIERTUCBzdGFydCBhZGRy ZXNzLiBPZmZzZXQtYWRqdXN0ZWQgYWN0dWFsCi0gKgkJCSAgbWFwcGVkIGFkZHJlc3MgaXMgaW4g dGhlIGxhc3QgYXJndW1lbnQuCi0gKiAgICAgIHBwX21hcF9hZGRyICAgICAgIDogICBQdHIgdG8g RFNQIHNpZGUgbWFwcGVkIHU4IGFkZHJlc3MuCi0gKiAgICAgIHVsX21hcF9hdHRyICAgICAgIDog ICBPcHRpb25hbCBlbmRpYW5uZXNzIGF0dHJpYnV0ZXMsIHZpcnQgdG8gcGh5cyBmbGFnLgotICog IFJldHVybnM6Ci0gKiAgICAgIDAJIDogICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUICAgICA6 ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICAtRVBFUk0gICAgICAgOiAgIEdl bmVyYWwgZmFpbHVyZS4KLSAqICAgICAgLUVOT01FTSAgICAgOiAgIE1QVSBzaWRlIG1lbW9yeSBh bGxvY2F0aW9uIGVycm9yLgotICogICAgICAtRU5PRU5UICAgOiAgIENhbm5vdCBmaW5kIGEgcmVz ZXJ2ZWQgcmVnaW9uIHN0YXJ0aW5nIHdpdGggdGhpcwotICoJCSAgICAgIDogICBhZGRyZXNzLgot ICogIFJlcXVpcmVzOgotICogICAgICBwbXB1X2FkZHIgaXMgbm90IE5VTEwKLSAqICAgICAgdWxf c2l6ZSBpcyBub3QgemVybwotICogICAgICBwcF9tYXBfYWRkciBpcyBub3QgTlVMTAotICogICAg ICBQUk9DIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6Ci0gKiAgRGV0YWlsczoKLSAqLwotZXh0 ZXJuIGludCBwcm9jX21hcCh2b2lkICpocHJvY2Vzc29yLAotCQkJICAgdm9pZCAqcG1wdV9hZGRy LAotCQkJICAgdTMyIHVsX3NpemUsCi0JCQkgICB2b2lkICpyZXFfYWRkciwKLQkJCSAgIHZvaWQg KipwcF9tYXBfYWRkciwgdTMyIHVsX21hcF9hdHRyLAotCQkJICAgc3RydWN0IHByb2Nlc3NfY29u dGV4dCAqcHJfY3R4dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19yZXNlcnZlX21lbW9yeSA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlc2VydmUgYSB2aXJ0dWFsbHkgY29udGln dW91cyByZWdpb24gb2YgRFNQIGFkZHJlc3Mgc3BhY2UuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAg ICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgdWxf c2l6ZQkgIDogICBTaXplIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvIHJlc2VydmUuCi0gKiAgICAg IHBwX3Jzdl9hZGRyICAgICAgIDogICBQdHIgdG8gRFNQIHNpZGUgcmVzZXJ2ZWQgdTggYWRkcmVz cy4KLSAqICBSZXR1cm5zOgotICogICAgICAwCSA6ICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVM VCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KLSAqICAgICAgLUVQRVJNICAgICAg IDogICBHZW5lcmFsIGZhaWx1cmUuCi0gKiAgICAgIC1FTk9NRU0gICAgIDogICBDYW5ub3QgcmVz ZXJ2ZSBjaHVuayBvZiB0aGlzIHNpemUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHBwX3Jzdl9h ZGRyIGlzIG5vdCBOVUxMCi0gKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCi0gKiAgRW5zdXJlczoK LSAqICBEZXRhaWxzOgotICovCi1leHRlcm4gaW50IHByb2NfcmVzZXJ2ZV9tZW1vcnkodm9pZCAq aHByb2Nlc3NvciwKLQkJCQkgICAgICB1MzIgdWxfc2l6ZSwgdm9pZCAqKnBwX3Jzdl9hZGRyLAot CQkJCSAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOwotCi0vKgotICogID09 PT09PT09IHByb2NfdW5fbWFwID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVtb3Zl cyBhIE1QVSBidWZmZXIgbWFwcGluZyBmcm9tIHRoZSBEU1AgYWRkcmVzcyBzcGFjZS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFu ZGxlLgotICogICAgICBtYXBfYWRkcgk6ICAgU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgbWFwcGVk IG1lbW9yeSByZWdpb24uCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCi0g KiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCi0gKiAgICAg IC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgotICogICAgICAtRU5PRU5UICAgOiAg IENhbm5vdCBmaW5kIGEgbWFwcGVkIHJlZ2lvbiBzdGFydGluZyB3aXRoIHRoaXMKLSAqCQkgICAg ICA6ICAgYWRkcmVzcy4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgbWFwX2FkZHIgaXMgbm90IE5V TEwKLSAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICogIERldGFpbHM6 Ci0gKi8KLWV4dGVybiBpbnQgcHJvY191bl9tYXAodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqbWFw X2FkZHIsCi0JCQkgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKLQotLyoK LSAqICA9PT09PT09PSBwcm9jX3VuX3Jlc2VydmVfbWVtb3J5ID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgRnJlZXMgYSBwcmV2aW91c2x5IHJlc2VydmVkIHJlZ2lvbiBvZiBEU1AgYWRk cmVzcyBzcGFjZS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBocHJvY2Vzc29yICAgICAgOiAg IFRoZSBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICBwcnN2X2FkZHIJOiAgIFB0ciB0byBEU1Ag c2lkZSByZXNlcnZlZEJZVEUgYWRkcmVzcy4KLSAqICBSZXR1cm5zOgotICogICAgICAwCSA6ICAg U3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRs ZS4KLSAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5lcmFsIGZhaWx1cmUuCi0gKiAgICAgIC1F Tk9FTlQgICA6ICAgQ2Fubm90IGZpbmQgYSByZXNlcnZlZCByZWdpb24gc3RhcnRpbmcgd2l0aCB0 aGlzCi0gKgkJICAgICAgOiAgIGFkZHJlc3MuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHByc3Zf YWRkciBpcyBub3QgTlVMTAotICogICAgICBQUk9DIEluaXRpYWxpemVkLgotICogIEVuc3VyZXM6 Ci0gKiAgRGV0YWlsczoKLSAqLwotZXh0ZXJuIGludCBwcm9jX3VuX3Jlc2VydmVfbWVtb3J5KHZv aWQgKmhwcm9jZXNzb3IsCi0JCQkJCSB2b2lkICpwcnN2X2FkZHIsCi0JCQkJCSBzdHJ1Y3QgcHJv Y2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKLQotI2VuZGlmIC8qIFBST0NfICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvY3ByaXYu aCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jcHJp di5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2QxZjBlLi4wMDAwMDAwCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jcHJpdi5o CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIHByb2Nwcml2LmgKLSAqCi0g KiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHBy b2Nlc3NvcnMuCi0gKgotICogR2xvYmFsIFBST0MgY29uc3RhbnRzIGFuZCB0eXBlcywgc2hhcmVk IGJ5IFBST0MsIE1HUiBhbmQgRFNQIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw NiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVT UyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElP TiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIFBST0NQUklWXwot I2RlZmluZSBQUk9DUFJJVl8KLQotLyogUk0gUFJPQyBPYmplY3QgKi8KLXN0cnVjdCBwcm9jX29i amVjdDsKLQotI2VuZGlmIC8qIFBST0NQUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oIGIvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwZmIwNjY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCww IEBACi0vKgotICogcHdyLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQg ZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAy MDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5Z IEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJ TUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBQV1Jf Ci0jZGVmaW5lIFBXUl8KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLSNpbmNsdWRl IDxkc3BicmlkZ2UvbWJ4X3NoLmg+Ci0KLS8qIHZhbGlkIHNsZWVwIGNvbW1hbmQgY29kZXMgdGhh dCBjYW4gYmUgc2VudCBieSBHUFAgdmlhIG1haWxib3g6ICovCi0jZGVmaW5lIFBXUl9ERUVQU0xF RVAgICAgICAgICAgIE1CWF9QTV9EU1BJRExFCi0jZGVmaW5lIFBXUl9FTUVSR0VOQ1lERUVQU0xF RVAgIE1CWF9QTV9FTUVSR0VOQ1lTTEVFUAotI2RlZmluZSBQV1JfV0FLRVVQICAgICAgICAgICAg ICBNQlhfUE1fRFNQV0FLRVVQCi0KLQotLyoKLSAqICA9PT09PT09PSBwd3Jfc2xlZXBfZHNwID09 PT09PT09Ci0gKiAgICAgIFNpZ25hbCB0aGUgRFNQIHRvIGdvIHRvIHNsZWVwLgotICoKLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBzbGVlcF9jb2RlOiAgICAgICAgICBOZXcgc2xlZXAgc3RhdGUg Zm9yIERTUC4gIChJbml0aWFsbHksIHZhbGlkIGNvZGVzCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgYXJlIFBXUl9ERUVQU0xFRVAgb3IgUFdSX0VNRVJHRU5DWURFRVBTTEVFUDsgYm90aCBv ZgotICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGNvZGVzIHdpbGwgc2ltcGx5IHB1 dCB0aGUgRFNQIGluIGRlZXAgc2xlZXAuKQotICoKLSAqCXRpbWVvdXQ6ICAgICAgICAgICAgTWF4 aW11bSB0aW1lIChtc2VjKSB0aGF0IFBXUiBzaG91bGQgd2FpdCBmb3IKLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25maXJtYXRpb24gdGhhdCB0aGUgRFNQIHNsZWVwIHN0YXRlIGhhcyBi ZWVuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZC4gIElmIFBXUiBzaG91bGQg c2ltcGx5IHNlbmQgdGhlIGNvbW1hbmQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgRFNQIHRvIGdvIHRvIHNsZWVwIGFuZCB0aGVuIHJldHVybiAoaS5lLiwKLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICBhc3luY2hyb3Vub3VzIHNsZWVwKSwgdGhlIHRpbWVvdXQgc2hvdWxk IGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFzIHplcm8uCi0gKgot ICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgMDog U3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXNsZWVwLgotICogICAgICAtRUlOVkFM OiAgICBUaGUgc3BlY2lmaWVkIHNsZWVwX2NvZGUgaXMgbm90IHN1cHBvcnRlZC4KLSAqICAgICAg LUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgd2hpbGUgd2FpdGluZyBmb3IgRFNQIHNs ZWVwCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uLgotICogICAgICAt RVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZSwgdW5hYmxlIHRvIHNlbmQgc2xlZXAgY29t bWFuZCB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBEU1AuCi0gKi8KLWV4dGVy biBpbnQgcHdyX3NsZWVwX2RzcChjb25zdCB1MzIgc2xlZXBfY29kZSwgY29uc3QgdTMyIHRpbWVv dXQpOwotCi0vKgotICogID09PT09PT09IHB3cl93YWtlX2RzcCA9PT09PT09PQotICogICAgU2ln bmFsIHRoZSBEU1AgdG8gd2FrZSBmcm9tIHNsZWVwLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJ dGltZW91dDogICAgICAgICAgICBNYXhpbXVtIHRpbWUgKG1zZWMpIHRoYXQgUFdSIHNob3VsZCB3 YWl0IGZvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbiB0aGF0IHRo ZSBEU1AgaXMgYXdha2UuICBJZiBQV1Igc2hvdWxkCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgc2ltcGx5IHNlbmQgYSBjb21tYW5kIHRvIHRoZSBEU1AgdG8gd2FrZSBhbmQgdGhlbgotICog ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaS5lLiwgYXN5bmNocm91bm91cyB3YWtl KSwgdGltZW91dCBzaG91bGQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzcGVjaWZp ZWQgYXMgemVyby4KLSAqCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNj ZXNzLgotICogICAgICAwOiAgU3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXdha2Uu Ci0gKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcg Zm9yIHdha2UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCi0gKiAg ICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtl IGNvbW1hbmQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgotICovCi1l eHRlcm4gaW50IHB3cl93YWtlX2RzcChjb25zdCB1MzIgdGltZW91dCk7Ci0KLS8qCi0gKiAgPT09 PT09PT0gcHdyX3BtX3ByZV9zY2FsZSA9PT09PT09PQotICogICAgUHJlc2NhbGUgbm90aWZpY2F0 aW9uIHRvIERTUC4KLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqCXZvbHRhZ2VfZG9tYWluOiAgIFRo ZSB2b2x0YWdlIGRvbWFpbiBmb3Igd2hpY2ggbm90aWZpY2F0aW9uIGlzIHNlbnQKLSAqICAgIGxl dmVsOgkJCVRoZSBsZXZlbCBvZiB2b2x0YWdlIGRvbWFpbgotICoKLSAqICBSZXR1cm5zOgotICog ICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhl IERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgd2hpbGUgd2FpdGluZyBmb3Igd2FrZQotICogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbmZpcm1hdGlvbi4KLSAqICAgICAgLUVQRVJNOiAgICAgICAgICBHZW5lcmFsIGZhaWx1 cmUsIHVuYWJsZSB0byBzZW5kIHdha2UgY29tbWFuZCB0bwotICogICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSBEU1AuCi0gKi8KLWV4dGVybiBpbnQgcHdyX3BtX3ByZV9zY2FsZSh1MTYgdm9s dGFnZV9kb21haW4sIHUzMiBsZXZlbCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gcHdyX3BtX3Bvc3Rf c2NhbGUgPT09PT09PT0KLSAqICAgIFBvc3RTY2FsZSBub3RpZmljYXRpb24gdG8gRFNQLgotICoK LSAqICBQYXJhbWV0ZXJzOgotICoJdm9sdGFnZV9kb21haW46ICAgVGhlIHZvbHRhZ2UgZG9tYWlu IGZvciB3aGljaCBub3RpZmljYXRpb24gaXMgc2VudAotICogICAgbGV2ZWw6CQkJVGhlIGxldmVs IG9mIHZvbHRhZ2UgZG9tYWluCi0gKgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAg ICAgU3VjY2Vzcy4KLSAqICAgICAgMDogIFN1Y2Nlc3MsIGJ1dCB0aGUgRFNQIHdhcyBhbHJlYWR5 IGF3YWtlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCB3aGlsZSB3 YWl0aW5nIGZvciB3YWtlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9u LgotICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZSwgdW5hYmxlIHRvIHNl bmQgd2FrZSBjb21tYW5kIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4K LSAqLwotZXh0ZXJuIGludCBwd3JfcG1fcG9zdF9zY2FsZSh1MTYgdm9sdGFnZV9kb21haW4sIHUz MiBsZXZlbCk7Ci0KLSNlbmRpZiAvKiBQV1JfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmggYi9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVw LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOWM5MDIuLjAwMDAwMDAKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xl YW51cC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIHJlc291cmNlY2xl YW51cC5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBm b3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRl eGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0g KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElT IFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9S Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBU SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9k ZXByaXYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+Ci0KLWV4dGVybiBpbnQgZHJ2X3Jl bW92ZV9hbGxfZG1tX3Jlc19lbGVtZW50cyh2b2lkICpwcm9jZXNzX2N0eHQpOwotCi1leHRlcm4g aW50IGRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7 Ci0KLWV4dGVybiBpbnQgZHJ2X3JlbW92ZV9hbGxfcmVzb3VyY2VzKHZvaWQgKnByb2Nlc3NfY3R4 dCk7Ci0KLWV4dGVybiBpbnQgZHJ2X2luc2VydF9ub2RlX3Jlc19lbGVtZW50KHZvaWQgKmhub2Rl LCB2b2lkICpub2RlX3Jlc291cmNlLAotCQkJCQkgICAgICB2b2lkICpwcm9jZXNzX2N0eHQpOwot Ci1leHRlcm4gdm9pZCBkcnZfcHJvY19ub2RlX3VwZGF0ZV9oZWFwX3N0YXR1cyh2b2lkICpub2Rl X3Jlc291cmNlLCBzMzIgc3RhdHVzKTsKLQotZXh0ZXJuIHZvaWQgZHJ2X3Byb2Nfbm9kZV91cGRh dGVfc3RhdHVzKHZvaWQgKm5vZGVfcmVzb3VyY2UsIHMzMiBzdGF0dXMpOwotCi1leHRlcm4gaW50 IGRydl9wcm9jX3VwZGF0ZV9zdHJtX3Jlcyh1MzIgbnVtX2J1ZnMsIHZvaWQgKnN0cm1fcmVzb3Vy Y2VzKTsKLQotZXh0ZXJuIGludCBkcnZfcHJvY19pbnNlcnRfc3RybV9yZXNfZWxlbWVudCh2b2lk ICpzdHJlYW1fb2JqLAotCQkJCQkJICAgdm9pZCAqc3RybV9yZXMsCi0JCQkJCQkgICB2b2lkICpw cm9jZXNzX2N0eHQpOwotCi1leHRlcm4gaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1l bnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7Ci0KLWV4dGVybiBlbnVtIG5vZGVfc3RhdGUgbm9kZV9n ZXRfc3RhdGUodm9pZCAqaG5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBmN2E0ZGM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNs dWRlL2RzcGJyaWRnZS9ybW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKgot ICogcm1tLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25z IGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogVGhpcyBtZW1vcnkgbWFuYWdlciBwcm92 aWRlcyBnZW5lcmFsIGhlYXAgbWFuYWdlbWVudCBhbmQgYXJiaXRyYXJ5Ci0gKiBhbGlnbm1lbnQg Zm9yIGFueSBudW1iZXIgb2YgbWVtb3J5IHNlZ21lbnRzLCBhbmQgbWFuYWdlbWVudCBvZiBvdmVy bGF5Ci0gKiBtZW1vcnkuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBSTU1fCi0jZGVmaW5lIFJNTV8KLQot LyoKLSAqICA9PT09PT09PSBybW1fYWRkciA9PT09PT09PQotICogIERTUCBhZGRyZXNzICsgc2Vn aWQKLSAqLwotc3RydWN0IHJtbV9hZGRyIHsKLQl1MzIgYWRkcjsKLQlzMzIgc2VnaWQ7Ci19Owot Ci0vKgotICogID09PT09PT09IHJtbV9zZWdtZW50ID09PT09PT09Ci0gKiAgTWVtb3J5IHNlZ21l bnQgb24gdGhlIERTUCBhdmFpbGFibGUgZm9yIHJlbW90ZSBhbGxvY2F0aW9ucy4KLSAqLwotc3Ry dWN0IHJtbV9zZWdtZW50IHsKLQl1MzIgYmFzZTsJCS8qIEJhc2Ugb2YgdGhlIHNlZ21lbnQgKi8K LQl1MzIgbGVuZ3RoOwkJLyogU2l6ZSBvZiB0aGUgc2VnbWVudCAodGFyZ2V0IE1BVXMpICovCi0J czMyIHNwYWNlOwkJLyogQ29kZSBvciBkYXRhICovCi0JdTMyIG51bWJlcjsJCS8qIE51bWJlciBv ZiBBbGxvY2F0ZWQgQmxvY2tzICovCi19OwotCi0vKgotICogID09PT09PT09IFJNTV9UYXJnZXQg PT09PT09PT0KLSAqLwotc3RydWN0IHJtbV90YXJnZXRfb2JqOwotCi0vKgotICogID09PT09PT09 IHJtbV9hbGxvYyA9PT09PT09PQotICoKLSAqICBybW1fYWxsb2MgaXMgdXNlZCB0byByZW1vdGVs eSBhbGxvY2F0ZSBvciByZXNlcnZlIG1lbW9yeSBvbiB0aGUgRFNQLgotICoKLSAqICBQYXJhbWV0 ZXJzOgotICogICAgICB0YXJnZXQgICAgICAgICAgLSBUYXJnZXQgcmV0dXJuZWQgZnJvbSBybW1f Y3JlYXRlKCkuCi0gKiAgICAgIHNlZ2lkICAgICAgICAgICAtIE1lbW9yeSBzZWdtZW50IHRvIGFs bG9jYXRlIGZyb20uCi0gKiAgICAgIHNpemUgICAgICAgICAgICAtIFNpemUgKHRhcmdldCBNQVVT KSB0byBhbGxvY2F0ZS4KLSAqICAgICAgYWxpZ24gICAgICAgICAgIC0gYWxpZ25tZW50LgotICog ICAgICBkc3BfYWRkcmVzcyAgICAgLSBJZiByZXNlcnZlIGlzIEZBTFNFLCB0aGUgbG9jYXRpb24g dG8gc3RvcmUgYWxsb2NhdGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mgb24g b3V0cHV0LCBvdGhlcndpc2UsIHRoZSBEU1AgYWRkcmVzcyB0bwotICogICAgICAgICAgICAgICAg ICAgICAgICByZXNlcnZlLgotICogICAgICByZXNlcnZlICAgICAgICAgLSBJZiBUUlVFLCByZXNl cnZlIHRoZSBtZW1vcnkgc3BlY2lmaWVkIGJ5IGRzcF9hZGRyZXNzLgotICogIFJldHVybnM6Ci0g KiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FTk9NRU06ICAgICAg ICAgICAgTWVtb3J5IGFsbG9jYXRpb24gb24gR1BQIGZhaWxlZC4KLSAqICAgICAgLUVOWElPOiAg ICAgQ2Fubm90ICJhbGxvY2F0ZSIgb3ZlcmxheSBtZW1vcnkgYmVjYXVzZSBpdCdzCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW4gdXNlLgotICogIFJlcXVpcmVzOgot ICogICAgICBSTU0gaW5pdGlhbGl6ZWQuCi0gKiAgICAgIFZhbGlkIHRhcmdldC4KLSAqICAgICAg ZHNwX2FkZHJlc3MgIT0gTlVMTC4KLSAqICAgICAgc2l6ZSA+IDAKLSAqICAgICAgcmVzZXJ2ZSB8 fCB0YXJnZXQtPm51bV9zZWdzID4gMC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IHJt bV9hbGxvYyhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgc2l6 ZSwKLQkJCXUzMiBhbGlnbiwgdTMyICpkc3BfYWRkcmVzcywgYm9vbCByZXNlcnZlKTsKLQotLyoK LSAqICA9PT09PT09PSBybW1fY3JlYXRlID09PT09PT09Ci0gKiAgQ3JlYXRlIGEgdGFyZ2V0IG9i amVjdCB3aXRoIG1lbW9yeSBzZWdtZW50cyBmb3IgcmVtb3RlIGFsbG9jYXRpb24uIElmCi0gKiAg c2VnX3RhYiA9PSBOVUxMIG9yIG51bV9zZWdzID09IDAsIG1lbW9yeSBjYW4gb25seSBiZSByZXNl cnZlZCB0aHJvdWdoCi0gKiAgcm1tX2FsbG9jKCkuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKiAg ICAgIHRhcmdldF9vYmo6ICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIHRhcmdldCBvbiBvdXRw dXQuCi0gKiAgICAgIHNlZ190YWI6ICAgICAgICAgLSBUYWJsZSBvZiBtZW1vcnkgc2VnbWVudHMu Ci0gKiAgICAgIG51bV9zZWdzOiAgICAgICAgLSBOdW1iZXIgb2YgbWVtb3J5IHNlZ21lbnRzLgot ICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRU5PTUVN OiAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIFJN TSBpbml0aWFsaXplZC4KLSAqICAgICAgdGFyZ2V0X29iaiAhPSBOVUxMLgotICogICAgICBudW1f c2VncyA9PSAwIHx8IHNlZ190YWIgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICogICAgICBTdWNj ZXNzOiAgICAgICAgVmFsaWQgKnRhcmdldF9vYmouCi0gKiAgICAgIEZhaWx1cmU6ICAgICAgICAq dGFyZ2V0X29iaiA9PSBOVUxMLgotICovCi1leHRlcm4gaW50IHJtbV9jcmVhdGUoc3RydWN0IHJt bV90YXJnZXRfb2JqICoqdGFyZ2V0X29iaiwKLQkJCSAgICAgc3RydWN0IHJtbV9zZWdtZW50IHNl Z190YWJbXSwgdTMyIG51bV9zZWdzKTsKLQotLyoKLSAqICA9PT09PT09PSBybW1fZGVsZXRlID09 PT09PT09Ci0gKiAgRGVsZXRlIHRhcmdldCBhbGxvY2F0ZWQgaW4gcm1tX2NyZWF0ZSgpLgotICoK LSAqICBQYXJhbWV0ZXJzOgotICogICAgICB0YXJnZXQgICAgICAgICAgLSBUYXJnZXQgcmV0dXJu ZWQgZnJvbSBybW1fY3JlYXRlKCkuCi0gKiAgUmV0dXJuczoKLSAqICBSZXF1aXJlczoKLSAqICAg ICAgUk1NIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCB0YXJnZXQuCi0gKiAgRW5zdXJlczoK LSAqLwotZXh0ZXJuIHZvaWQgcm1tX2RlbGV0ZShzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdl dCk7Ci0KLS8qCi0gKiAgPT09PT09PT0gcm1tX2ZyZWUgPT09PT09PT0KLSAqICBGcmVlIG9yIHVu cmVzZXJ2ZSBtZW1vcnkgYWxsb2NhdGVkIHRocm91Z2ggcm1tX2FsbG9jKCkuCi0gKgotICogIFBh cmFtZXRlcnM6Ci0gKiAgICAgIHRhcmdldDogICAgICAgICAtIFRhcmdldCByZXR1cm5lZCBmcm9t IHJtbV9jcmVhdGUoKS4KLSAqICAgICAgc2VnaWQ6ICAgICAgICAgIC0gU2VnbWVudCBvZiBtZW1v cnkgdG8gZnJlZS4KLSAqICAgICAgZHNwX2FkZHJlc3M6ICAgIC0gQWRkcmVzcyB0byBmcmVlIG9y IHVucmVzZXJ2ZS4KLSAqICAgICAgc2l6ZTogICAgICAgICAgIC0gU2l6ZSBvZiBtZW1vcnkgdG8g ZnJlZSBvciB1bnJlc2VydmUuCi0gKiAgICAgIHJlc2VydmVkOiAgICAgICAtIFRSVUUgaWYgbWVt b3J5IHdhcyByZXNlcnZlZCBvbmx5LCBvdGhlcndpc2UgRkFMU0UuCi0gKiAgUmV0dXJuczoKLSAq ICBSZXF1aXJlczoKLSAqICAgICAgUk1NIGluaXRpYWxpemVkLgotICogICAgICBWYWxpZCB0YXJn ZXQuCi0gKiAgICAgIHJlc2VydmVkIHx8IHNlZ2lkIDwgdGFyZ2V0LT5udW1fc2Vncy4KLSAqICAg ICAgcmVzZXJ2ZSB8fCBbZHNwX2FkZHJlc3MsIGRzcF9hZGRyZXNzICsgc2l6ZV0gaXMgYSB2YWxp ZCBtZW1vcnkgcmFuZ2UuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGJvb2wgcm1tX2ZyZWUo c3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIGRzcF9hZGRyLAot CQkgICAgIHUzMiBzaXplLCBib29sIHJlc2VydmVkKTsKLQotLyoKLSAqICA9PT09PT09PSBybW1f c3RhdCA9PT09PT09PQotICogIE9idGFpbiAgbWVtb3J5IHNlZ21lbnQgc3RhdHVzCi0gKgotICog IFBhcmFtZXRlcnM6Ci0gKiAgICAgIHNlZ2lkOiAgICAgICBTZWdtZW50IElEIG9mIHRoZSBkeW5h bWljIGxvYWRpbmcgc2VnbWVudC4KLSAqICAgICAgbWVtX3N0YXRfYnVmOiBQb2ludGVyIHRvIGFs bG9jYXRlZCBidWZmZXIgaW50byB3aGljaCBtZW1vcnkgc3RhdHMgYXJlCi0gKiAgICAgICAgICAg ICAgICAgICBwbGFjZWQuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRTogICBTdWNjZXNzLgot ICogICAgICBGQUxTRTogIEZhaWx1cmUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIHNlZ2lkIDwg dGFyZ2V0LT5udW1fc2VncwotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVybiBib29sIHJtbV9zdGF0 KHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCBlbnVtIGRzcF9tZW10eXBlIHNlZ2lkLAot CQkgICAgIHN0cnVjdCBkc3BfbWVtc3RhdCAqbWVtX3N0YXRfYnVmKTsKLQotI2VuZGlmIC8qIFJN TV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9ybXNfc2guaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2Rz cGJyaWRnZS9ybXNfc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3ZjQ3OC4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3Bicmlk Z2Uvcm1zX3NoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogcm1zX3No LmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBU SSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogRFNQL0JJT1MgQnJpZGdlIFJlc291cmNlIE1hbmFn ZXIgU2VydmVyIHNoYXJlZCBkZWZpbml0aW9ucyAodXNlZCBvbiBib3RoCi0gKiBHUFAgYW5kIERT UCBzaWRlcykuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJ bmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklE RUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FS UkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLgotICovCi0KLSNpZm5kZWYgUk1TX1NIXwotI2RlZmluZSBSTVNfU0hfCi0KLSNpbmNs dWRlIDxkc3BicmlkZ2Uvcm1zdHlwZXMuaD4KLQotLyogTWVtb3J5IFR5cGVzOiAqLwotI2RlZmlu ZSBSTVNfQ09ERSAgICAgICAgICAgICAgICAwCS8qIFByb2dyYW0gc3BhY2UgKi8KLSNkZWZpbmUg Uk1TX0RBVEEgICAgICAgICAgICAgICAgMQkvKiBEYXRhIHNwYWNlICovCi0KLS8qIFJNIFNlcnZl ciBDb21tYW5kIGFuZCBSZXNwb25zZSBCdWZmZXIgU2l6ZXM6ICovCi0jZGVmaW5lIFJNU19DT01N QU5EQlVGU0laRSAgICAgMjU2CS8qIFNpemUgb2YgY29tbWFuZCBidWZmZXIgKi8KLQotLyogUHJl LURlZmluZWQgQ29tbWFuZC9SZXNwb25zZSBDb2RlczogKi8KLSNkZWZpbmUgUk1TX0VYSVQgICAg ICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBHUFAtPk5vZGU6IHNodXRkb3duICovCi0jZGVmaW5l IFJNU19FWElUQUNLICAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogTm9kZS0+R1BQOiBhY2sgc2h1 dGRvd24gKi8KLSNkZWZpbmUgUk1TX0JVRkRFU0MgICAgICAgICAgICAgMHgyMDAwMDAwMAkvKiBB cmcxIFNNIGJ1ZiwgQXJnMiBTTSBzaXplICovCi0jZGVmaW5lIFJNU19LSUxMVEFTSyAgICAgICAg ICAgIDB4MTAwMDAwMDAJLyogR1BQLT5Ob2RlOiBLaWxsIFRhc2sgKi8KLQotLyogUk0gU2VydmVy IFJQQyBDb21tYW5kIFN0cnVjdHVyZTogKi8KLXN0cnVjdCBybXNfY29tbWFuZCB7Ci0Jcm1zX3dv cmQgZnhuOwkJLyogU2VydmVyIGZ1bmN0aW9uIGFkZHJlc3MgKi8KLQlybXNfd29yZCBhcmcxOwkJ LyogRmlyc3QgYXJndW1lbnQgKi8KLQlybXNfd29yZCBhcmcyOwkJLyogU2Vjb25kIGFyZ3VtZW50 ICovCi0Jcm1zX3dvcmQgZGF0YTsJCS8qIEZ1bmN0aW9uLXNwZWNpZmljIGRhdGEgYXJyYXkgKi8K LX07Ci0KLS8qCi0gKiAgVGhlIHJtc19zdHJtX2RlZiBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgcGFy YW1ldGVycyBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0Ci0gKiAgc3RyZWFtcywgYW5kIGlzIHBh c3NlZCB0byBhIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCi0gKi8KLXN0cnVjdCBybXNfc3RybV9k ZWYgewotCXJtc193b3JkIGJ1ZnNpemU7CS8qIEJ1ZmZlciBzaXplIChpbiBEU1Agd29yZHMpICov Ci0Jcm1zX3dvcmQgbmJ1ZnM7CQkvKiBNYXggbnVtYmVyIG9mIGJ1ZnMgaW4gc3RyZWFtICovCi0J cm1zX3dvcmQgc2VnaWQ7CQkvKiBTZWdtZW50IHRvIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KLQlybXNf d29yZCBhbGlnbjsJCS8qIEFsaWdubWVudCBmb3IgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KLQlybXNf d29yZCB0aW1lb3V0OwkvKiBUaW1lb3V0IChtc2VjKSBmb3IgYmxvY2tpbmcgY2FsbHMgKi8KLQlj aGFyIG5hbWVbMV07CS8qIERldmljZSBOYW1lICh0ZXJtaW5hdGVkIGJ5ICdcMCcpICovCi19Owot Ci0vKiBNZXNzYWdlIG5vZGUgY3JlYXRlIGFyZ3Mgc3RydWN0dXJlOiAqLwotc3RydWN0IHJtc19t c2dfYXJncyB7Ci0Jcm1zX3dvcmQgbWF4X21zZ3M7CS8qIE1heCAjIHNpbXVsdGFuZW91cyBtc2dz IHRvIG5vZGUgKi8KLQlybXNfd29yZCBzZWdpZDsJCS8qIE1lbSBzZWdtZW50IGZvciBOT0RFX2Fs bG9jTXNnQnVmICovCi0Jcm1zX3dvcmQgbm90aWZ5X3R5cGU7CS8qIFR5cGUgb2YgbWVzc2FnZSBu b3RpZmljYXRpb24gKi8KLQlybXNfd29yZCBhcmdfbGVuZ3RoOwkvKiBMZW5ndGggKGluIERTUCBj aGFycykgb2YgYXJnIGRhdGEgKi8KLQlybXNfd29yZCBhcmdfZGF0YTsJLyogQXJnIGRhdGEgZm9y IG5vZGUgKi8KLX07Ci0KLS8qIFBhcnRpYWwgdGFzayBjcmVhdGUgYXJncyBzdHJ1Y3R1cmUgKi8K LXN0cnVjdCBybXNfbW9yZV90YXNrX2FyZ3MgewotCXJtc193b3JkIHByaW9yaXR5OwkvKiBUYXNr J3MgcnVudGltZSBwcmlvcml0eSBsZXZlbCAqLwotCXJtc193b3JkIHN0YWNrX3NpemU7CS8qIFRh c2sncyBzdGFjayBzaXplICovCi0Jcm1zX3dvcmQgc3lzc3RhY2tfc2l6ZTsJLyogVGFzaydzIHN5 c3RlbSBzdGFjayBzaXplICg1NXgpICovCi0Jcm1zX3dvcmQgc3RhY2tfc2VnOwkvKiBNZW1vcnkg c2VnbWVudCBmb3IgdGFzaydzIHN0YWNrICovCi0Jcm1zX3dvcmQgaGVhcF9hZGRyOwkvKiBiYXNl IGFkZHJlc3Mgb2YgdGhlIG5vZGUgbWVtb3J5IGhlYXAgaW4KLQkJCQkgKiBleHRlcm5hbCBtZW1v cnkgKERTUCB2aXJ0dWFsIGFkZHJlc3MpICovCi0Jcm1zX3dvcmQgaGVhcF9zaXplOwkvKiBzaXpl IGluIE1BVXMgb2YgdGhlIG5vZGUgbWVtb3J5IGhlYXAgaW4KLQkJCQkgKiBleHRlcm5hbCBtZW1v cnkgKi8KLQlybXNfd29yZCBtaXNjOwkJLyogTWlzYyBmaWVsZC4gIE5vdCB1c2VkIGZvciAnbm9y bWFsJwotCQkJCSAqIHRhc2sgbm9kZXM7IGZvciB4REFJUyBzb2NrZXQgbm9kZXMKLQkJCQkgKiBz cGVjaWZpZXMgdGhlIElBTEdfRnhuIHBvaW50ZXIuCi0JCQkJICovCi0JLyogIyBpbnB1dCBTVFJN IGRlZmluaXRpb24gc3RydWN0dXJlcyAqLwotCXJtc193b3JkIG51bV9pbnB1dF9zdHJlYW1zOwot fTsKLQotI2VuZGlmIC8qIFJNU19TSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXN0eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jtc3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDgzYzBmMWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jtc3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAt MSwyNCArMCwwIEBACi0vKgotICogcm1zdHlwZXMuaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBk cml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBE U1AvQklPUyBCcmlkZ2UgUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIgc2hhcmVkIGRhdGEgdHlwZSBk ZWZpbml0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMs IEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9W SURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBX QVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBSTVNUWVBFU18KLSNkZWZpbmUgUk1TVFlQRVNfCi0j aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgdTMyIHJtc193b3JkOwotCi0jZW5kaWYg LyogUk1TVFlQRVNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv aW5jbHVkZS9kc3BicmlkZ2Uvc3RybS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2lu Y2x1ZGUvZHNwYnJpZGdlL3N0cm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdh ZWU0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9k c3BicmlkZ2Uvc3RybS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qCi0gKiBz dHJtLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZv ciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogRFNQQnJpZGdlIFN0cmVhbSBNYW5hZ2VyLgot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0g KgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBB UyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF UyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgotICovCi0KLSNpZm5kZWYgU1RSTV8KLSNkZWZpbmUgU1RSTV8KLQotI2luY2x1ZGUgPGRzcGJy aWRnZS9kZXYuaD4KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9zdHJtZGVmcy5oPgotI2luY2x1ZGUg PGRzcGJyaWRnZS9wcm9jLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9hbGxvY2F0ZV9idWZm ZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBBbGxvY2F0ZSBkYXRhIGJ1ZmZlcihz KSBmb3IgdXNlIHdpdGggYSBzdHJlYW0uCi0gKiAgUGFyYW1ldGVyOgotICogICAgICBzdHJtcmVz OiAgICAgU3RyZWFtIHJlc291cmNlIGluZm8gaGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVu KCkuCi0gKiAgICAgIHVzaXplOiAgICAgICAgICBTaXplIChHUFAgYnl0ZXMpIG9mIHRoZSBidWZm ZXIocykuCi0gKiAgICAgIG51bV9idWZzOiAgICAgICBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxv Y2F0ZS4KLSAqICAgICAgYXBfYnVmZmVyOiAgICAgICBBcnJheSB0byBob2xkIGJ1ZmZlciBhZGRy ZXNzZXMuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAg IC1FRkFVTFQ6ICAgIEludmFsaWQgc3RyZWFtX29iai4KLSAqICAgICAgLUVOT01FTTogICAgSW5z dWZmaWNpZW50IG1lbW9yeS4KLSAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUgb2NjdXJyZWQs IHVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzLgotICogICAgICAtRUlOVkFMOiAgICAgIHVzaXpl IG11c3QgYmUgPiAwIGJ5dGVzLgotICogIFJlcXVpcmVzOgotICogICAgICBhcF9idWZmZXIgIT0g TlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IHN0cm1fYWxsb2NhdGVfYnVmZmVy KHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1yZXMsCi0JCQkJICAgICAgIHUzMiB1c2l6ZSwK LQkJCQkgICAgICAgdTggKiphcF9idWZmZXIsCi0JCQkJICAgICAgIHUzMiBudW1fYnVmcywKLQkJ CQkgICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7Ci0KLS8qCi0gKiAgPT09 PT09PT0gc3RybV9jbG9zZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENsb3NlIGEg c3RyZWFtIG9wZW5lZCB3aXRoIHN0cm1fb3BlbigpLgotICogIFBhcmFtZXRlcjoKLSAqICAgICAg c3RybXJlczogICAgICAgICAgU3RyZWFtIHJlc291cmNlIGluZm8gaGFuZGxlIHJldHVybmVkIGZy b20gc3RybV9vcGVuKCkuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3Mu Ci0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgc3RyZWFtX29iai4KLSAqICAgICAgLUVQSVBF OiAgIFNvbWUgZGF0YSBidWZmZXJzIGlzc3VlZCB0byB0aGUgc3RyZWFtIGhhdmUgbm90Ci0gKiAg ICAgICAgICAgICAgICAgICAgICBiZWVuIHJlY2xhaW1lZC4KLSAqICAgICAgLUVQRVJNOiAgICAg IEZhaWx1cmUgdG8gY2xvc2Ugc3RyZWFtLgotICogIFJlcXVpcmVzOgotICogIEVuc3VyZXM6Ci0g Ki8KLWV4dGVybiBpbnQgc3RybV9jbG9zZShzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtcmVz LAotCQkJICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9 PT09PT09PSBzdHJtX2NyZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0 ZSBhIFNUUk0gbWFuYWdlciBvYmplY3QuIFRoaXMgb2JqZWN0IGhvbGRzIGluZm9ybWF0aW9uIGFi b3V0IHRoZQotICogICAgICBkZXZpY2UgbmVlZGVkIHRvIG9wZW4gc3RyZWFtcy4KLSAqICBQYXJh bWV0ZXJzOgotICogICAgICBzdHJtX21hbjogICAgICAgTG9jYXRpb24gdG8gc3RvcmUgaGFuZGxl IHRvIFNUUk0gbWFuYWdlciBvYmplY3Qgb24KLSAqICAgICAgICAgICAgICAgICAgICAgIG91dHB1 dC4KLSAqICAgICAgZGV2X29iajogICAgICAgICAgIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3Iu Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3M7Ci0gKiAgICAgIC1FTk9N RU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCi0gKiAg ICAgIC1FUEVSTTogICAgICBHZW5lcmFsIGZhaWx1cmUuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAg IHN0cm1fbWFuICE9IE5VTEwuCi0gKiAgICAgIGRldl9vYmogIT0gTlVMTC4KLSAqICBFbnN1cmVz OgotICogICAgICAwOiAgICAgICAgVmFsaWQgKnN0cm1fbWFuLgotICogICAgICBlcnJvcjogICAg ICAgICAgKnN0cm1fbWFuID09IE5VTEwuCi0gKi8KLWV4dGVybiBpbnQgc3RybV9jcmVhdGUoc3Ry dWN0IHN0cm1fbWdyICoqc3RybV9tYW4sCi0JCQkgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqZGV2 X29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9kZWxldGUgPT09PT09PT0KLSAqICBQdXJw b3NlOgotICogICAgICBEZWxldGUgdGhlIFNUUk0gT2JqZWN0LgotICogIFBhcmFtZXRlcnM6Ci0g KiAgICAgIHN0cm1fbWdyX29iajogICAgICAgSGFuZGxlIHRvIFNUUk0gbWFuYWdlciBvYmplY3Qg ZnJvbSBzdHJtX2NyZWF0ZS4KLSAqICBSZXR1cm5zOgotICogIFJlcXVpcmVzOgotICogICAgICBW YWxpZCBzdHJtX21ncl9vYmouCi0gKiAgRW5zdXJlczoKLSAqICAgICAgc3RybV9tZ3Jfb2JqIGlz IG5vdCB2YWxpZC4KLSAqLwotZXh0ZXJuIHZvaWQgc3RybV9kZWxldGUoc3RydWN0IHN0cm1fbWdy ICpzdHJtX21ncl9vYmopOwotCi0vKgotICogID09PT09PT09IHN0cm1fZnJlZV9idWZmZXIgPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBGcmVlIGJ1ZmZlcihzKSBhbGxvY2F0ZWQgd2l0 aCBzdHJtX2FsbG9jYXRlX2J1ZmZlci4KLSAqICBQYXJhbWV0ZXI6Ci0gKiAgICAgIHN0cm1yZXM6 ICAgICBTdHJlYW0gcmVzb3VyY2UgaW5mbyBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4o KS4KLSAqICAgICAgYXBfYnVmZmVyOiAgICAgICBBcnJheSBjb250YWluaW5nIGJ1ZmZlciBhZGRy ZXNzZXMuCi0gKiAgICAgIG51bV9idWZzOiAgICAgICBOdW1iZXIgb2YgYnVmZmVycyB0byBiZSBm cmVlZC4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAg LUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW0gaGFuZGxlLgotICogICAgICAtRVBFUk06ICAgICAg RmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGZyZWUgYnVmZmVycy4KLSAqICBSZXF1aXJlczoK LSAqICAgICAgYXBfYnVmZmVyICE9IE5VTEwuCi0gKiAgRW5zdXJlczoKLSAqLwotZXh0ZXJuIGlu dCBzdHJtX2ZyZWVfYnVmZmVyKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1yZXMsCi0JCQkJ ICAgdTggKiphcF9idWZmZXIsIHUzMiBudW1fYnVmcywKLQkJCQkgICBzdHJ1Y3QgcHJvY2Vzc19j b250ZXh0ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9PT09PT09PSBzdHJtX2dldF9pbmZvID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgc3RyZWFt LiBVc2VyJ3MgZHNwX3N0cmVhbWluZm8gaXMgY29udGFpbmVkCi0gKiAgICAgIGluIHN0cmVhbV9p bmZvIHN0cnVjdC4gc3RyZWFtX2luZm8gYWxzbyBjb250YWlucyBCcmlkZ2UgcHJpdmF0ZSBpbmZv LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHN0cmVhbV9vYmo6ICAgICAgICAgU3RyZWFtIGhh bmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgotICogICAgICBzdHJlYW1faW5mbzogICAg ICAgIExvY2F0aW9uIHRvIHN0b3JlIHN0cmVhbSBpbmZvIG9uIG91dHB1dC4KLSAqICAgICAgdVN0 ZWFtSW5mb1NpemU6ICAgICBTaXplIG9mIHVzZXIncyBkc3Bfc3RyZWFtaW5mbyBzdHJ1Y3R1cmUu Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgotICogICAgICAt RUZBVUxUOiAgICAgICAgSW52YWxpZCBzdHJlYW1fb2JqLgotICogICAgICAtRUlOVkFMOiAgICAg ICAgICBzdHJlYW1faW5mb19zaXplIDwgc2l6ZW9mKGRzcF9zdHJlYW1pbmZvKS4KLSAqICAgICAg LUVQRVJNOiAgICAgICAgICBVbmFibGUgdG8gZ2V0IHN0cmVhbSBpbmZvLgotICogIFJlcXVpcmVz OgotICogICAgICBzdHJlYW1faW5mbyAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKi8KLWV4dGVy biBpbnQgc3RybV9nZXRfaW5mbyhzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmosCi0JCQkJ c3RydWN0IHN0cmVhbV9pbmZvICpzdHJlYW1faW5mbywKLQkJCQl1MzIgc3RyZWFtX2luZm9fc2l6 ZSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9pZGxlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgSWRsZSBhIHN0cmVhbSBhbmQgb3B0aW9uYWxseSBmbHVzaCBvdXRwdXQgZGF0YSBi dWZmZXJzLgotICogICAgICBJZiB0aGlzIGlzIGFuIG91dHB1dCBzdHJlYW0gYW5kIGZsdXNoX2Rh dGEgaXMgVFJVRSwgYWxsIGRhdGEgY3VycmVudGx5Ci0gKiAgICAgIGVucXVldWVkIHdpbGwgYmUg ZGlzY2FyZGVkLgotICogICAgICBJZiB0aGlzIGlzIGFuIG91dHB1dCBzdHJlYW0gYW5kIGZsdXNo X2RhdGEgaXMgRkFMU0UsIHRoaXMgZnVuY3Rpb24KLSAqICAgICAgd2lsbCBibG9jayB1bnRpbCBh bGwgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEgaXMgb3V0cHV0LCBvciB0aGUgdGltZW91dAotICog ICAgICBzcGVjaWZpZWQgaGFzIGJlZW4gcmVhY2hlZC4KLSAqICAgICAgQWZ0ZXIgYSBzdWNjZXNz ZnVsIGNhbGwgdG8gc3RybV9pZGxlKCksIGFsbCBidWZmZXJzIGNhbiBpbW1lZGlhdGVseQotICog ICAgICBiZSByZWNsYWltZWQuCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgc3RyZWFtX29iajog ICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KLSAqICAgICAgZmx1 c2hfZGF0YTogICAgIElmIFRSVUUsIGRpc2NhcmQgb3V0cHV0IGJ1ZmZlcnMuCi0gKiAgUmV0dXJu czoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFs aWQgc3RyZWFtX29iai4KLSAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZv cmUgdGhlIHN0cmVhbSBjb3VsZCBiZSBpZGxlZC4KLSAqICAgICAgLUVQRVJNOiAgICAgIFVuYWJs ZSB0byBpZGxlIHN0cmVhbS4KLSAqICBSZXF1aXJlczoKLSAqICBFbnN1cmVzOgotICovCi1leHRl cm4gaW50IHN0cm1faWRsZShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmosIGJvb2wgZmx1 c2hfZGF0YSk7Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9pc3N1ZSA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIFNlbmQgYSBidWZmZXIgb2YgZGF0YSB0byBhIHN0cmVhbS4KLSAqICBQ YXJhbWV0ZXJzOgotICogICAgICBzdHJlYW1fb2JqOiAgICAgICAgIFN0cmVhbSBoYW5kbGUgcmV0 dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KLSAqICAgICAgcGJ1ZjogICAgICAgICAgICAgICBQb2lu dGVyIHRvIGJ1ZmZlciBvZiBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHN0cmVhbS4KLSAqICAgICAg dWxfYnl0ZXM6ICAgICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIGJ1ZmZl ci4KLSAqICAgICAgdWxfYnVmX3NpemU6ICAgICAgICAgIEFjdHVhbCBidWZmZXIgc2l6ZSBpbiBi eXRlcy4KLSAqICAgICAgZHdfYXJnOiAgICAgICAgICAgICAgQSB1c2VyIGFyZ3VtZW50IHRoYXQg dHJhdmVscyB3aXRoIHRoZSBidWZmZXIuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAg ICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBzdHJlYW1fb2Jq LgotICogICAgICAtRU5PU1I6ICAgIFRoZSBzdHJlYW0gaXMgZnVsbC4KLSAqICAgICAgLUVQRVJN OiAgICAgICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gaXNzdWUgYnVmZmVyLgotICog IFJlcXVpcmVzOgotKiAgICAgIHBidWYgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRl cm4gaW50IHN0cm1faXNzdWUoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCB1OCAqIHBi dWYsCi0JCQkgICAgIHUzMiB1bF9ieXRlcywgdTMyIHVsX2J1Zl9zaXplLCB1MzIgZHdfYXJnKTsK LQotLyoKLSAqICA9PT09PT09PSBzdHJtX29wZW4gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBPcGVuIGEgc3RyZWFtIGZvciBzZW5kaW5nL3JlY2VpdmluZyBkYXRhIGJ1ZmZlcnMgdG8v ZnJvbSBhIHRhc2sgb2YKLSAqICAgICAgREFJUyBzb2NrZXQgbm9kZSBvbiB0aGUgRFNQLgotICog IFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIGhhbmRsZSByZXR1cm5l ZCBmcm9tIG5vZGVfYWxsb2NhdGUoKS4KLSAqICAgICAgZGlyOiAgICAgICAgICAgRFNQX1RPTk9E RSBvciBEU1BfRlJPTU5PREUuCi0gKiAgICAgIGluZGV4OiAgICAgICAgIFN0cmVhbSBpbmRleC4K LSAqICAgICAgcGF0dHI6ICAgICAgICAgIFBvaW50ZXIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcg YXR0cmlidXRlcyB0byBiZQotICogICAgICAgICAgICAgICAgICAgICAgYXBwbGllZCB0byBzdHJl YW0uIENhbm5vdCBiZSBOVUxMLgotICogICAgICBzdHJtcmVzOiAgICAgTG9jYXRpb24gdG8gc3Rv cmUgc3RyZWFtIHJlc291cmNlIGluZm8gaGFuZGxlIG9uIG91dHB1dC4KLSAqICBSZXR1cm5zOgot ICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBo bm9kZS4KLSAqICAgICAgLUVQRVJNOiBJbnZhbGlkIGRpcmVjdGlvbi4KLSAqICAgICAgICAgICAg ICBobm9kZSBpcyBub3QgYSB0YXNrIG9yIERBSVMgc29ja2V0IG5vZGUuCi0gKiAgICAgICAgICAg ICAgVW5hYmxlIHRvIG9wZW4gc3RyZWFtLgotICogICAgICAtRUlOVkFMOiAgICAgSW52YWxpZCBp bmRleC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgc3RybXJlcyAhPSBOVUxMLgotICogICAgICBw YXR0ciAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAqc3RybXJlcyBp cyB2YWxpZC4KLSAqICAgICAgZXJyb3I6ICAgICAgICAgICpzdHJtcmVzID09IE5VTEwuCi0gKi8K LWV4dGVybiBpbnQgc3RybV9vcGVuKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBkaXIs Ci0JCQkgICAgdTMyIGluZGV4LCBzdHJ1Y3Qgc3RybV9hdHRyICpwYXR0ciwKLQkJCSAgICBzdHJ1 Y3Qgc3RybV9yZXNfb2JqZWN0ICoqc3RybXJlcywKLQkJCSAgICBzdHJ1Y3QgcHJvY2Vzc19jb250 ZXh0ICpwcl9jdHh0KTsKLQotLyoKLSAqICA9PT09PT09PSBzdHJtX3JlY2xhaW0gPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBSZXF1ZXN0IGEgYnVmZmVyIGJhY2sgZnJvbSBhIHN0cmVh bS4KLSAqICBQYXJhbWV0ZXJzOgotICogICAgICBzdHJlYW1fb2JqOiAgICAgICAgICBTdHJlYW0g aGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCi0gKiAgICAgIGJ1Zl9wdHI6ICAgICAg ICBMb2NhdGlvbiB0byBzdG9yZSBwb2ludGVyIHRvIHJlY2xhaW1lZCBidWZmZXIuCi0gKiAgICAg IG5ieXRlczogICAgICAgICBMb2NhdGlvbiB3aGVyZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBp biB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4uCi0g KiAgICAgIGJ1ZmZfc2l6ZTogICAgICBMb2NhdGlvbiB3aGVyZSBhY3R1YWwgYnVmZmVyIHNpemUg d2lsbCBiZSB3cml0dGVuLgotICogICAgICBwZHdfYXJnOiAgICAgICAgIExvY2F0aW9uIHdoZXJl IHVzZXIgYXJndW1lbnQgdGhhdCB0cmF2ZWxzIHdpdGgKLSAqICAgICAgICAgICAgICAgICAgICAg IHRoZSBidWZmZXIgd2lsbCBiZSB3cml0dGVuLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAg ICAgICBTdWNjZXNzLgotICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCi0g KiAgICAgIC1FVElNRTogICBBIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIGEgYnVmZmVyIGNvdWxk IGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICByZXRyaWV2ZWQuCi0gKiAgICAgIC1FUEVSTTog ICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gcmVjbGFpbSBidWZmZXIuCi0gKiAgUmVx dWlyZXM6Ci0gKiAgICAgIGJ1Zl9wdHIgIT0gTlVMTC4KLSAqICAgICAgbmJ5dGVzICE9IE5VTEwu Ci0gKiAgICAgIHBkd19hcmcgIT0gTlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50 IHN0cm1fcmVjbGFpbShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmosCi0JCQkgICAgICAg dTggKipidWZfcHRyLCB1MzIgKiBuYnl0ZXMsCi0JCQkgICAgICAgdTMyICpidWZmX3NpemUsIHUz MiAqcGR3X2FyZyk7Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9yZWdpc3Rlcl9ub3RpZnkgPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvbiBz cGVjaWZpYyBldmVudHMgZm9yIHRoaXMgc3RyZWFtLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAg IHN0cmVhbV9vYmo6ICAgICBTdHJlYW0gaGFuZGxlIHJldHVybmVkIGJ5IHN0cm1fb3BlbigpLgot ICogICAgICBldmVudF9tYXNrOiAgICAgTWFzayBvZiB0eXBlcyBvZiBldmVudHMgdG8gYmUgbm90 aWZpZWQgYWJvdXQuCi0gKiAgICAgIG5vdGlmeV90eXBlOiAgICBUeXBlIG9mIG5vdGlmaWNhdGlv biB0byBiZSBzZW50LgotICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIHRvIGJlIHVzZWQg Zm9yIG5vdGlmaWNhdGlvbi4KLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgICAgICAgU3VjY2Vz cy4KLSAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW1fb2JqLgotICogICAgICAtRU5P TUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IG9uIEdQUC4KLSAqICAgICAgLUVJTlZBTDogICAg IGV2ZW50X21hc2sgaXMgaW52YWxpZC4KLSAqICAgICAgLUVOT1NZUzogICBOb3RpZmljYXRpb24g dHlwZSBzcGVjaWZpZWQgYnkgbm90aWZ5X3R5cGUgaXMgbm90Ci0gKiAgICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0ZWQuCi0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIGhub3RpZmljYXRpb24gIT0g TlVMTC4KLSAqICBFbnN1cmVzOgotICovCi1leHRlcm4gaW50IHN0cm1fcmVnaXN0ZXJfbm90aWZ5 KHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKLQkJCQkgICAgICAgdTMyIGV2ZW50X21h c2ssIHUzMiBub3RpZnlfdHlwZSwKLQkJCQkgICAgICAgc3RydWN0IGRzcF9ub3RpZmljYXRpb24K LQkJCQkgICAgICAgKmhub3RpZmljYXRpb24pOwotCi0vKgotICogID09PT09PT09IHN0cm1fc2Vs ZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2VsZWN0IGEgcmVhZHkgc3RyZWFt LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHN0cm1fdGFiOiAgICAgICBBcnJheSBvZiBzdHJl YW0gaGFuZGxlcyByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgotICogICAgICBzdHJtczogICAg ICAgICAgTnVtYmVyIG9mIHN0cmVhbSBoYW5kbGVzIGluIGFycmF5LgotICogICAgICBwbWFzazog ICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgbWFzayBvZiByZWFkeSBzdHJlYW1zIG9uIG91dHB1 dC4KLSAqICAgICAgdXRpbWVvdXQ6ICAgICAgIFRpbWVvdXQgdmFsdWUgKG1pbGxpc2Vjb25kcyku Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FRE9N OiAgICAgc3RybXMgb3V0IG9mIHJhbmdlLgotCi0gKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQg c3RyZWFtIGhhbmRsZSBpbiBhcnJheS4KLSAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1 cnJlZCBiZWZvcmUgYSBzdHJlYW0gYmVjYW1lIHJlYWR5LgotICogICAgICAtRVBFUk06ICAgICAg RmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIHNlbGVjdCBhIHN0cmVhbS4KLSAqICBSZXF1aXJl czoKLSAqICAgICAgc3RybV90YWIgIT0gTlVMTC4KLSAqICAgICAgc3RybXMgPiAwLgotICogICAg ICBwbWFzayAhPSBOVUxMLgotICogIEVuc3VyZXM6Ci0gKiAgICAgIDA6ICAgICAgICAqcG1hc2sg IT0gMCB8fCB1dGltZW91dCA9PSAwLgotICogICAgICBFcnJvcjogICAgICAgICAgKnBtYXNrID09 IDAuCi0gKi8KLWV4dGVybiBpbnQgc3RybV9zZWxlY3Qoc3RydWN0IHN0cm1fb2JqZWN0ICoqc3Ry bV90YWIsCi0JCQkgICAgICB1MzIgc3RybXMsIHUzMiAqcG1hc2ssIHUzMiB1dGltZW91dCk7Ci0K LSNlbmRpZiAvKiBTVFJNXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybWRlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNGY5MGU2Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybWRlZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICsw LDAgQEAKLS8qCi0gKiBzdHJtZGVmcy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBz dXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIEdsb2JhbCBT VFJNIGNvbnN0YW50cyBhbmQgdHlwZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYg VGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMK LSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRI SVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1Mg T1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04s IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRlZiBTVFJNREVGU18KLSNk ZWZpbmUgU1RSTURFRlNfCi0KLXN0cnVjdCBzdHJtX21ncjsKLQotc3RydWN0IHN0cm1fb2JqZWN0 OwotCi1zdHJ1Y3Qgc3RybV9hdHRyIHsKLQl2b2lkICp1c2VyX2V2ZW50OwotCWNoYXIgKnN0cl9l dmVudF9uYW1lOwotCXZvaWQgKnZpcnRfYmFzZTsJLyogUHJvY2VzcyB2aXJ0dWFsIGJhc2UgYWRk cmVzcyBvZgotCQkJCSAqIG1hcHBlZCBTTSAqLwotCXUzMiB2aXJ0X3NpemU7CQkvKiBTaXplIG9m IHZpcnR1YWwgc3BhY2UgaW4gYnl0ZXMgKi8KLQlzdHJ1Y3QgZHNwX3N0cmVhbWF0dHJpbiAqc3Ry ZWFtX2F0dHJfaW47Ci19OwotCi1zdHJ1Y3Qgc3RyZWFtX2luZm8gewotCWVudW0gZHNwX3N0cm1t b2RlIHN0cm1fbW9kZTsJLyogdHJhbnNwb3J0IG1vZGUgb2YKLQkJCQkJICogc3RyZWFtKERNQSwg WkVST0NPUFkuLikgKi8KLQl1MzIgc2VnbWVudF9pZDsJCS8qIFNlZ21lbnQgc3RybSBhbGxvY3Mg ZnJvbS4gMCBpcyBsb2NhbCBtZW0gKi8KLQl2b2lkICp2aXJ0X2Jhc2U7CS8qICIgICAgICAiIFN0 cmVhbSdwcm9jZXNzIHZpcnQgYmFzZSAqLwotCXN0cnVjdCBkc3Bfc3RyZWFtaW5mbyAqdXNlcl9z dHJtOwkvKiBVc2VyJ3Mgc3RyZWFtIGluZm9ybWF0aW9uCi0JCQkJCQkgKiByZXR1cm5lZCAqLwot fTsKLQotI2VuZGlmIC8qIFNUUk1ERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zeW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGZjMTliOTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N5bmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCww IEBACi0vKgotICogc3luYy5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0 IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIFByb3ZpZGUgc3luY2hy b25pemF0aW9uIHNlcnZpY2VzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpZm5kZWYgX1NZTkNfSAotI2RlZmluZSBf U1lOQ19ICi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+Ci0jaW5jbHVkZSA8ZHNwYnJp ZGdlL2hvc3Rfb3MuaD4KLQotCi0vKiBTcGVjaWFsIHRpbWVvdXQgdmFsdWUgaW5kaWNhdGluZyBh biBpbmZpbml0ZSB3YWl0OiAqLwotI2RlZmluZSBTWU5DX0lORklOSVRFICAweGZmZmZmZmZmCi0K LS8qKgotICogc3RydWN0IHN5bmNfb2JqZWN0IC0gdGhlIGJhc2ljIHN5bmNfb2JqZWN0IHN0cnVj dHVyZQotICogQGNvbXA6CXVzZSB0byBzaWduYWwgZXZlbnRzCi0gKiBAbXVsdGlfY29tcDoJdXNl IHRvIHNpZ25hbCBtdWx0aXBsZSBldmVudHMuCi0gKgotICovCi1zdHJ1Y3Qgc3luY19vYmplY3R7 Ci0Jc3RydWN0IGNvbXBsZXRpb24gY29tcDsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqbXVsdGlfY29t cDsKLX07Ci0KLS8qKgotICogc3luY19pbml0X2V2ZW50KCkgLSBzZXQgaW5pdGlhbCBzdGF0ZSBm b3IgYSBzeW5jX2V2ZW50IGVsZW1lbnQKLSAqIEBldmVudDoJZXZlbnQgdG8gYmUgaW5pdGlhbGl6 ZWQuCi0gKgotICogU2V0IHRoZSBpbml0aWFsIHN0YXRlIGZvciBhIHN5bmNfZXZlbnQgZWxlbWVu dC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY19pbml0X2V2ZW50KHN0cnVjdCBzeW5j X29iamVjdCAqZXZlbnQpCi17Ci0JaW5pdF9jb21wbGV0aW9uKCZldmVudC0+Y29tcCk7Ci0JZXZl bnQtPm11bHRpX2NvbXAgPSBOVUxMOwotfQotCi0vKioKLSAqIHN5bmNfcmVzZXRfZXZlbnQoKSAt IHJlc2V0IGEgc3luY19ldmVudCBlbGVtZW50Ci0gKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIHJlc2V0 LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmVzZXQgdG8gdGhlIGluaXRpYWwgc3RhdGUgdG8gQGV2 ZW50LgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX3Jlc2V0X2V2ZW50KHN0cnVjdCBz eW5jX29iamVjdCAqZXZlbnQpCi17Ci0JcmVpbml0X2NvbXBsZXRpb24oJmV2ZW50LT5jb21wKTsK LQlldmVudC0+bXVsdGlfY29tcCA9IE5VTEw7Ci19Ci0KLS8qKgotICogc3luY19zZXRfZXZlbnQo KSAtIHNldCBvciBzaWduYWwgYW5kIHNwZWNpZmllZCBldmVudAotICogQGV2ZW50OglFdmVudCB0 byBiZSBzZXQuLgotICoKLSAqIHNldCB0aGUgQGV2ZW50LCBpZiB0aGVyZSBpcyBhbiB0aHJlYWQg d2FpdGluZyBmb3IgdGhlIGV2ZW50Ci0gKiBpdCB3aWxsIGJlIHdha2VuIHVwLCB0aGlzIGZ1bmN0 aW9uIG9ubHkgd2FrZXMgb25lIHRocmVhZC4KLSAqLwotCi12b2lkIHN5bmNfc2V0X2V2ZW50KHN0 cnVjdCBzeW5jX29iamVjdCAqZXZlbnQpOwotCi0vKioKLSAqIHN5bmNfd2FpdF9vbl9ldmVudCgp IC0gd2FpdHMgZm9yIGEgZXZlbnQgdG8gYmUgc2V0LgotICogQGV2ZW50OglldmVudHMgdG8gd2Fp dCBmb3IgaXQuCi0gKiBAdGltZW91dAl0aW1lb3V0IG9uIHdhaXRpbmcgZm9yIHRoZSBldmV0bi4K LSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCBAZXZlbnQgaXMgc2V0IG9yIHVu dGlsIHRpbWVvdXQuIEluIGNhc2Ugb2YKLSAqIHN1Y2Nlc3MgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0 dXJuIDAgYW5kCi0gKiBpbiBjYXNlIG9mIHRpbWVvdXQgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJu IC1FVElNRQotICogaW4gY2FzZSBvZiBzaWduYWwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1F UkVTVEFSVFNZUwotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHN5bmNfd2FpdF9vbl9ldmVudChz dHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50LAotCQkJCQkJCXVuc2lnbmVkIHRpbWVvdXQpCi17Ci0J aW50IHJlczsKLQotCXJlcyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1l b3V0KCZldmVudC0+Y29tcCwKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXModGltZW91dCkpOwotCWlm ICghcmVzKQotCQlyZXMgPSAtRVRJTUU7Ci0JZWxzZSBpZiAocmVzID4gMCkKLQkJcmVzID0gMDsK LQotCXJldHVybiByZXM7Ci19Ci0KLS8qKgotICogc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50 cygpIC0gd2FpdHMgZm9yIG11bHRpcGxlIGV2ZW50cyB0byBiZSBzZXQuCi0gKiBAZXZlbnRzOglB cnJheSBvZiBldmVudHMgdG8gd2FpdCBmb3IgdGhlbS4KLSAqIEBjb3VudDoJbnVtYmVyIG9mIGVs ZW1lbnRzIG9mIHRoZSBhcnJheS4KLSAqIEB0aW1lb3V0CXRpbWVvdXQgb24gd2FpdGluZyBmb3Ig dGhlIGV2ZXRucy4KLSAqIEBwdV9pbmRleAlpbmRleCBvZiB0aGUgZXZlbnQgc2V0LgotICoKLSAq IFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIGFueSBvZiB0aGUgYXJyYXkgZWxlbWVudCBp cyBzZXQgb3IgdW50aWwKLSAqIHRpbWVvdXQuIEluIGNhc2Ugb2Ygc3VjY2VzcyB0aGUgZnVuY3Rp b24gd2lsbCByZXR1cm4gMCBhbmQKLSAqIEBwdV9pbmRleCB3aWxsIHN0b3JlIHRoZSBpbmRleCBv ZiB0aGUgYXJyYXkgZWxlbWVudCBzZXQgYW5kIGluIGNhc2UKLSAqIG9mIHRpbWVvdXQgdGhlIGZ1 bmN0aW9uIHdpbGwgcmV0dXJuIC1FVElNRS4KLSAqLwotCi1pbnQgc3luY193YWl0X29uX211bHRp cGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3QgKipldmVudHMsCi0JCQkJICAgICB1bnNpZ25l ZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKLQkJCQkgICAgIHVuc2lnbmVkICppbmRleCk7Ci0K LSNlbmRpZiAvKiBfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bi cmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXVpZHV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS91dWlkdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBiNDk1MWExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9pbmNsdWRlL2RzcGJyaWRnZS91dWlkdXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQg KzAsMCBAQAotLyoKLSAqIHV1aWR1dGlsLmgKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVy IHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogVGhpcyBm aWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uIG9mIFVVSUQgaGVscGVyIGZ1bmN0aW9ucy4K LSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgot ICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBg QVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4KLSAqLwotCi0jaWZuZGVmIFVVSURVVElMXwotI2RlZmluZSBVVUlEVVRJTF8KLQotI2RlZmlu ZSBNQVhVVUlETEVOICAzNwotCi0jZW5kaWYgLyogVVVJRFVUSUxfICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0LmggYi9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0LmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MTkzZGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFn aW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3dkdC5oCisrKyAvZGV2L251bGwKQEAg LTEsNzkgKzAsMCBAQAotLyoKLSAqIHdkdC5oCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZl ciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIElPIGRp c3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KLSAqCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2th Z2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhP VVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRI T1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLSNpZm5kZWYg X19EU1BfV0RUM19IXwotI2RlZmluZSBfX0RTUF9XRFQzX0hfCi0KLS8qIFdEVCBkZWZpbmVzICov Ci0jZGVmaW5lIE9NQVAzX1dEVDNfSVNSX09GRlNFVAkweDAwMTgKLQotCi0vKioKLSAqIHN0cnVj dCBkc3Bfd2R0X3NldHRpbmcgLSB0aGUgYmFzaWMgZHNwX3dkdF9zZXR0aW5nIHN0cnVjdHVyZQot ICogQHJlZ19iYXNlOglwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSB3ZHQgcmVnaXN0ZXJzCi0g KiBAc21fd2R0Oglwb2ludGVyIHRvIGZsYWdzIGluIHNoYXJlZCBtZW1vcnkKLSAqIEB3ZHQzX3Rh c2tsZXQJdGFza2xldCB0byBtYW5hZ2Ugd2R0IGV2ZW50Ci0gKiBAZmNsawkJaGFuZGxlIHRvIHdk dDMgZnVuY3Rpb25hbCBjbG9jawotICogQGljbGsJCWhhbmRsZSB0byB3ZHQzIGludGVyZmFjZSBj bG9jawotICoKLSAqIFRoaXMgc3RydWN0IGlzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHRvIG1hbmFn ZSB3ZHQzLgotICovCi0KLXN0cnVjdCBkc3Bfd2R0X3NldHRpbmcgewotCXZvaWQgX19pb21lbSAq cmVnX2Jhc2U7Ci0Jc3RydWN0IHNobSAqc21fd2R0OwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3 ZHQzX3Rhc2tsZXQ7Ci0Jc3RydWN0IGNsayAqZmNsazsKLQlzdHJ1Y3QgY2xrICppY2xrOwotfTsK LQotLyoqCi0gKiBkc3Bfd2R0X2luaXQoKSAtIGluaXRpYWxpemUgd2R0MyBtb2R1bGUuCi0gKgot ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRvIHdkdDMgbW9kdWxlLCBzbyB0aGF0Ci0gKiBv dGhlciB3ZHQzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLgotICovCi1pbnQgZHNwX3dkdF9pbml0KHZv aWQpOwotCi0vKioKLSAqIGRzcF93ZHRfZXhpdCgpIC0gaW5pdGlhbGl6ZSB3ZHQzIG1vZHVsZS4K LSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB3 ZHQzIG1vZHVsZS4KLSAqLwotdm9pZCBkc3Bfd2R0X2V4aXQodm9pZCk7Ci0KLS8qKgotICogZHNw X3dkdF9lbmFibGUoKSAtIGVuYWJsZS9kaXNhYmxlIHdkdDMKLSAqIEBlbmFibGU6CWJvb2wgdmFs dWUgdG8gZW5hYmxlL2Rpc2FibGUgd2R0MwotICoKLSAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBv ciBkaXNhYmxlcyB3ZHQzIGJhc2Ugb24gQGVuYWJsZSB2YWx1ZS4KLSAqCi0gKi8KLXZvaWQgZHNw X3dkdF9lbmFibGUoYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRzcF93ZHRfc21fc2V0KCkgLSBz dG9yZSBwb2ludGVyIHRvIHRoZSBzaGFyZSBtZW1vcnkKLSAqIEBkYXRhOgkJcG9pbnRlciB0byBk c3BicmlkZ2Ugc2hhcmUgbWVtb3J5Ci0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBh c3MgYSB2YWxpZCBwb2ludGVyIHRvIHNoYXJlIG1lbW9yeSwKLSAqIHNvIHRoYXQgdGhlIGZsYWdz IGNhbiBiZSBzZXQgaW4gb3JkZXIgRFNQIHNpZGUgY2FuIHJlYWQgdGhlbS4KLSAqCi0gKi8KLXZv aWQgZHNwX3dkdF9zbV9zZXQodm9pZCAqZGF0YSk7Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jaG5sLmMgYi9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvcG1nci9jaG5sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUw M2MzMjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hu bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBjaG5sLmMKLSAqCi0g KiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHBy b2Nlc3NvcnMuCi0gKgotICogRFNQIEFQSSBjaGFubmVsIGludGVyZmFjZTogbXVsdGlwbGV4ZXMg ZGF0YSBzdHJlYW1zIHRocm91Z2ggdGhlIHNpbmdsZQotICogcGh5c2ljYWwgbGluayBtYW5hZ2Vk IGJ5IGEgQnJpZGdlIEJyaWRnZSBkcml2ZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIw MDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJF U1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJ T04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAq LwotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KLSNpbmNsdWRlIDxkc3Bicmlk Z2UvZGJkZWZzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBP UyBBZGFwdGF0aW9uIExheWVyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8K LSNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4K LQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLwotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgotI2luY2x1ZGUgPGNobmxvYmouaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxk c3BicmlkZ2UvY2hubC5oPgotCi0vKgotICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwg cmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCi0gKiAgICAgIGFuZCBjbG9zaW5n IG9sZCBvbmVzIGZvciBhIGdpdmVuICdCcmlkZ2UgYm9hcmQuCi0gKi8KLWludCBjaG5sX2NyZWF0 ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKLQkJICAgICAgIHN0cnVjdCBkZXZfb2Jq ZWN0ICpoZGV2X29iaiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3Jf YXR0cnRzKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7Ci0J c3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqID0gTlVMTDsKLQotCSpjaGFubmVsX21nciA9 IE5VTEw7Ci0KLQkvKiBWYWxpZGF0ZSBhcmdzOiAqLwotCWlmICgoMCA8IG1ncl9hdHRydHMtPm1h eF9jaGFubmVscykgJiYKLQkgICAgKG1ncl9hdHRydHMtPm1heF9jaGFubmVscyA8PSBDSE5MX01B WENIQU5ORUxTKSkKLQkJc3RhdHVzID0gMDsKLQllbHNlIGlmIChtZ3JfYXR0cnRzLT5tYXhfY2hh bm5lbHMgPT0gMCkKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQllbHNlCi0JCXN0YXR1cyA9IC1FQ0hS Tkc7Ci0KLQlpZiAobWdyX2F0dHJ0cy0+d29yZF9zaXplID09IDApCi0JCXN0YXR1cyA9IC1FSU5W QUw7Ci0KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdyKGhkZXZf b2JqLCAmaGNobmxfbWdyKTsKLQkJaWYgKCFzdGF0dXMgJiYgaGNobmxfbWdyICE9IE5VTEwpCi0J CQlzdGF0dXMgPSAtRUVYSVNUOwotCi0JfQotCi0JaWYgKCFzdGF0dXMpIHsKLQkJc3RydWN0IGJy aWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0KLQkJZGV2X2dldF9pbnRmX2Z4bnMoaGRl dl9vYmosICZpbnRmX2Z4bnMpOwotCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGZpbmlz aCB0aGUgY3JlYXRlOiAqLwotCQlzdGF0dXMgPSAoKmludGZfZnhucy0+Y2hubF9jcmVhdGUpICgm aGNobmxfbWdyLCBoZGV2X29iaiwKLQkJCQkJCQltZ3JfYXR0cnRzKTsKLQkJaWYgKCFzdGF0dXMp IHsKLQkJCS8qIEZpbGwgaW4gRFNQIEFQSSBjaGFubmVsIG1vZHVsZSdzIGZpZWxkcyBvZiB0aGUK LQkJCSAqIGNobmxfbWdyIHN0cnVjdHVyZSAqLwotCQkJY2hubF9tZ3Jfb2JqID0gKHN0cnVjdCBj aG5sX21ncl8gKiloY2hubF9tZ3I7Ci0JCQljaG5sX21ncl9vYmotPmludGZfZnhucyA9IGludGZf ZnhuczsKLQkJCS8qIEZpbmFsbHksIHJldHVybiB0aGUgbmV3IGNoYW5uZWwgbWFuYWdlciBoYW5k bGU6ICovCi0JCQkqY2hhbm5lbF9tZ3IgPSBoY2hubF9tZ3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g c3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNobmxfZGVzdHJveSA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIENsb3NlIGFsbCBvcGVuIGNoYW5uZWxzLCBhbmQgZGVzdHJveSB0 aGUgY2hhbm5lbCBtYW5hZ2VyLgotICovCi1pbnQgY2hubF9kZXN0cm95KHN0cnVjdCBjaG5sX21n ciAqaGNobmxfbWdyKQotewotCXN0cnVjdCBjaG5sX21ncl8gKmNobmxfbWdyX29iaiA9IChzdHJ1 Y3QgY2hubF9tZ3JfICopaGNobmxfbWdyOwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAq aW50Zl9meG5zOwotCWludCBzdGF0dXM7Ci0KLQlpZiAoY2hubF9tZ3Jfb2JqKSB7Ci0JCWludGZf ZnhucyA9IGNobmxfbWdyX29iai0+aW50Zl9meG5zOwotCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwg bW9kdWxlIGRlc3Ryb3kgdGhlIGNobmxfbWdyOiAqLwotCQlzdGF0dXMgPSAoKmludGZfZnhucy0+ Y2hubF9kZXN0cm95KSAoaGNobmxfbWdyKTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRUZBVUxU OwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvcG1nci9jaG5sb2JqLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uv cG1nci9jaG5sb2JqLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OTVlMGEuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hubG9iai5oCisr KyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIGNobmxvYmouaAotICoKLSAqIERT UC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vz c29ycy4KLSAqCi0gKiBTdHJ1Y3R1cmUgc3ViY29tcG9uZW50cyBvZiBjaGFubmVsIGNsYXNzIGxp YnJhcnkgY2hhbm5lbCBvYmplY3RzIHdoaWNoCi0gKiBhcmUgZXhwb3NlZCB0byBEU1AgQVBJIGZy b20gQnJpZGdlIGRyaXZlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJ bnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNL QUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICog SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElN UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaWZuZGVmIENITkxPQkpfCi0jZGVmaW5lIENI TkxPQkpfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubGRlZnMuaD4KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvZHNwZGVmcy5oPgotCi0vKgotICogIFRoaXMgc3RydWN0IGlzIHRoZSBmaXJzdCBmaWVs ZCBpbiBhIGNobmxfbWdyIHN0cnVjdC4gT3RoZXIuIGltcGxlbWVudGF0aW9uCi0gKiAgc3BlY2lm aWMgZmllbGRzIGZvbGxvdyB0aGlzIHN0cnVjdHVyZSBpbiBtZW1vcnkuCi0gKi8KLXN0cnVjdCBj aG5sX21ncl8gewotCS8qIFRoZXNlIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkcyBpbiBhIGNobmxf bWdyIHN0cnVjdDogKi8KLQotCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVy LiAqLwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwotfTsKLQotLyoK LSAqICBUaGlzIHN0cnVjdCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYSBjaG5sX29iamVjdCBzdHJ1 Y3QuIE90aGVyLAotICogIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGZpZWxkcyBmb2xsb3cgdGhp cyBzdHJ1Y3R1cmUgaW4gbWVtb3J5LgotICovCi1zdHJ1Y3QgY2hubF9vYmplY3RfIHsKLQkvKiBU aGVzZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBjaG5sX29iamVjdCBzdHJ1Y3Q6ICov Ci0Jc3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqOwkvKiBQb2ludGVyIGJhY2sgdG8gY2hh bm5lbCBtYW5hZ2VyLiAqLwotfTsKLQotI2VuZGlmIC8qIENITkxPQkpfICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jbW0uYyBiL2RyaXZlcnMvc3RhZ2lu Zy90aWRzcGJyaWRnZS9wbWdyL2NtbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm OTYxZTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2Nt bS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTE1ICswLDAgQEAKLS8qCi0gKiBjbW0uYwotICoKLSAq IERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJv Y2Vzc29ycy4KLSAqCi0gKiBUaGUgQ29tbXVuaWNhdGlvbihTaGFyZWQpIE1lbW9yeSBNYW5hZ2Vt ZW50KENNTSkgbW9kdWxlIHByb3ZpZGVzCi0gKiBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgc2Vy dmljZXMgZm9yIERTUC9CSU9TIEJyaWRnZSBkYXRhIHN0cmVhbWluZwotICogYW5kIG1lc3NhZ2lu Zy4KLSAqCi0gKiBNdWx0aXBsZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGNhbiBiZSByZWdpc3Rl cmVkIHdpdGggQ01NLgotICogRWFjaCByZWdpc3RlcmVkIFNNIHNlZ21lbnQgaXMgcmVwcmVzZW50 ZWQgYnkgYSBTTSAiYWxsb2NhdG9yIiB0aGF0Ci0gKiBkZXNjcmliZXMgYSBibG9jayBvZiBwaHlz aWNhbGx5IGNvbnRpZ3VvdXMgc2hhcmVkIG1lbW9yeSB1c2VkIGZvcgotICogZnV0dXJlIGFsbG9j YXRpb25zIGJ5IENNTS4KLSAqCi0gKiBNZW1vcnkgaXMgY29hbGVzY2VkIGJhY2sgdG8gdGhlIGFw cHJvcHJpYXRlIGhlYXAgd2hlbiBhIGJ1ZmZlciBpcwotICogZnJlZWQuCi0gKgotICogTm90ZXM6 Ci0gKiAgIFZhOiBWaXJ0dWFsIGFkZHJlc3MuCi0gKiAgIFBhOiBQaHlzaWNhbCBvciBrZXJuZWwg c3lzdGVtIGFkZHJlc3MuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQot LyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5 ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJy aWRnZS9kZXYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgotCi0vKiAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9j bW0uaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMs IERhdGEgU3RydWN0dXJlcywgVHlwZWRlZnMgKi8KLSNkZWZpbmUgTkVYVF9QQShwbm9kZSkgICAo cG5vZGUtPnBhICsgcG5vZGUtPnNpemUpCi0KLS8qIE90aGVyIGJ1cy9wbGF0Zm9ybSB0cmFuc2xh dGlvbnMgKi8KLSNkZWZpbmUgRFNQUEEyR1BQUEEoYmFzZSwgeCwgeSkgICgoeCkrKHkpKQotI2Rl ZmluZSBHUFBQQTJEU1BQQShiYXNlLCB4LCB5KSAgKCh4KS0oeSkpCi0KLS8qCi0gKiAgQWxsb2Nh dG9ycyBkZWZpbmUgYSBibG9jayBvZiBjb250aWd1b3VzIG1lbW9yeSB1c2VkIGZvciBmdXR1cmUg YWxsb2NhdGlvbnMuCi0gKgotICogICAgICBzbWEgLSBzaGFyZWQgbWVtb3J5IGFsbG9jYXRvci4K LSAqICAgICAgdm1hIC0gdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLihub3QgdXNlZCkuCi0gKi8K LXN0cnVjdCBjbW1fYWxsb2NhdG9yIHsJCS8qIHNtYSAqLwotCXVuc2lnbmVkIGludCBzaG1fYmFz ZTsJLyogU3RhcnQgb2YgcGh5c2ljYWwgU00gYmxvY2sgKi8KLQl1MzIgc21fc2l6ZTsJCS8qIFNp emUgb2YgU00gYmxvY2sgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgdm1fYmFzZTsJLyogU3Rh cnQgb2YgVk0gYmxvY2suIChEZXYgZHJpdmVyCi0JCQkJCSAqIGNvbnRleHQgZm9yICdzbWEnKSAq LwotCXUzMiBkc3BfcGh5c19hZGRyX29mZnNldDsJLyogRFNQIFBBIHRvIEdQUCBQQSBvZmZzZXQg Zm9yIHRoaXMKLQkJCQkJICogU00gc3BhY2UgKi8KLQlzOCBjX2ZhY3RvcjsJCS8qIERTUFBhIHRv IEdQUFBhIENvbnZlcnNpb24gRmFjdG9yICovCi0JdW5zaWduZWQgaW50IGRzcF9iYXNlOwkvKiBE U1AgdmlydCBiYXNlIGJ5dGUgYWRkcmVzcyAqLwotCXUzMiBkc3Bfc2l6ZTsJLyogRFNQIHNlZyBz aXplIGluIGJ5dGVzICovCi0Jc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3I7CS8qIGJhY2sgcmVm IHRvIHBhcmVudCBtZ3IgKi8KLQkvKiBub2RlIGxpc3Qgb2YgYXZhaWxhYmxlIG1lbW9yeSAqLwot CXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwotCS8qIG5vZGUgbGlzdCBvZiBtZW1vcnkgaW4g dXNlICovCi0Jc3RydWN0IGxpc3RfaGVhZCBpbl91c2VfbGlzdDsKLX07Ci0KLXN0cnVjdCBjbW1f eGxhdG9yIHsJCS8qIFBhPC0+VmEgdHJhbnNsYXRvciBvYmplY3QgKi8KLQkvKiBDTU0gb2JqZWN0 IHRoaXMgdHJhbnNsYXRvciBhc3NvY2lhdGVkICovCi0Jc3RydWN0IGNtbV9vYmplY3QgKmNtbV9t Z3I7Ci0JLyoKLQkgKiAgQ2xpZW50IHByb2Nlc3MgdmlydHVhbCBiYXNlIGFkZHJlc3MgdGhhdCBj b3JyZXNwb25kcyB0byBwaHlzIFNNCi0JICogIGJhc2UgYWRkcmVzcyBmb3IgdHJhbnNsYXRvcidz IHNlZ19pZC4KLQkgKiAgT25seSAxIHNlZ21lbnQgSUQgY3VycmVudGx5IHN1cHBvcnRlZC4KLQkg Ki8KLQl1bnNpZ25lZCBpbnQgdmlydF9iYXNlOwkvKiB2aXJ0dWFsIGJhc2UgYWRkcmVzcyAqLwot CXUzMiB2aXJ0X3NpemU7CQkvKiBzaXplIG9mIHZpcnQgc3BhY2UgaW4gYnl0ZXMgKi8KLQl1MzIg c2VnX2lkOwkJLyogU2VnbWVudCBJZCAqLwotfTsKLQotLyogQ01NIE1nciAqLwotc3RydWN0IGNt bV9vYmplY3QgewotCS8qCi0JICogQ21tIExvY2sgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNz IG1lbSBtYW5hZ2VyIGZvciBtdWx0aS10aHJlYWRzLgotCSAqLwotCXN0cnVjdCBtdXRleCBjbW1f bG9jazsJLyogTG9jayB0byBhY2Nlc3MgY21tIG1nciAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbm9k ZV9mcmVlX2xpc3Q7CS8qIEZyZWUgbGlzdCBvZiBtZW1vcnkgbm9kZXMgKi8KLQl1MzIgbWluX2Js b2NrX3NpemU7CS8qIE1pbiBTTSBibG9jazsgZGVmYXVsdCAxNiBieXRlcyAqLwotCXUzMiBwYWdl X3NpemU7CS8qIE1lbW9yeSBQYWdlIHNpemUgKDFrLzRrKSAqLwotCS8qIEdQUCBTTSBzZWdtZW50 IHB0cnMgKi8KLQlzdHJ1Y3QgY21tX2FsbG9jYXRvciAqcGFfZ3Bwc21fc2VnX3RhYltDTU1fTUFY R1BQU0VHU107Ci19OwotCi0vKiBEZWZhdWx0IENNTSBNZ3IgYXR0cmlidXRlcyAqLwotc3RhdGlj IHN0cnVjdCBjbW1fbWdyYXR0cnMgY21tX2RmbHRtZ3JhdHRycyA9IHsKLQkvKiBtaW5fYmxvY2tf c2l6ZSwgbWluIGJsb2NrIHNpemUoYnl0ZXMpIGFsbG9jYXRlZCBieSBjbW0gbWdyICovCi0JMTYK LX07Ci0KLS8qIERlZmF1bHQgYWxsb2NhdGlvbiBhdHRyaWJ1dGVzICovCi1zdGF0aWMgc3RydWN0 IGNtbV9hdHRycyBjbW1fZGZsdGFsY3RhdHRycyA9IHsKLQkxCQkvKiBzZWdfaWQsIGRlZmF1bHQg c2VnbWVudCBJZCBmb3IgYWxsb2NhdG9yICovCi19OwotCi0vKiBBZGRyZXNzIHRyYW5zbGF0b3Ig ZGVmYXVsdCBhdHRycyAqLwotc3RhdGljIHN0cnVjdCBjbW1feGxhdG9yYXR0cnMgY21tX2RmbHR4 bGF0b3JhdHRycyA9IHsKLQkvKiBzZWdfaWQsIGRvZXMgbm90IGhhdmUgdG8gbWF0Y2ggY21tX2Rm bHRhbGN0YXR0cnMgdWxfc2VnX2lkICovCi0JMSwKLQkwLAkJCS8qIGRzcF9idWZzICovCi0JMCwJ CQkvKiBkc3BfYnVmX3NpemUgKi8KLQlOVUxMLAkJCS8qIHZtX2Jhc2UgKi8KLQkwLAkJCS8qIHZt X3NpemUgKi8KLX07Ci0KLS8qIFNNIG5vZGUgcmVwcmVzZW50aW5nIGEgYmxvY2sgb2YgbWVtb3J5 LiAqLwotc3RydWN0IGNtbV9tbm9kZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwkvKiBtdXN0 IGJlIDFzdCBlbGVtZW50ICovCi0JdTMyIHBhOwkJLyogUGh5cyBhZGRyICovCi0JdTMyIHZhOwkJ CS8qIFZpcnR1YWwgYWRkcmVzcyBpbiBkZXZpY2UgcHJvY2VzcyBjb250ZXh0ICovCi0JdTMyIHNp emU7CQkvKiBTTSBibG9jayBzaXplIGluIGJ5dGVzICovCi0JdTMyIGNsaWVudF9wcm9jOwkvKiBQ cm9jZXNzIHRoYXQgYWxsb2NhdGVkIHRoaXMgbWVtIGJsb2NrICovCi19OwotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotc3Rh dGljIHZvaWQgYWRkX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9y LAotCQkJICAgICBzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSk7Ci1zdGF0aWMgc3RydWN0IGNtbV9h bGxvY2F0b3IgKmdldF9hbGxvY2F0b3Ioc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqLAot CQkJCQkgICB1MzIgdWxfc2VnX2lkKTsKLXN0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfZnJl ZV9ibG9jayhzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yLAotCQkJCQl1MzIgdXNpemUp Owotc3RhdGljIHN0cnVjdCBjbW1fbW5vZGUgKmdldF9ub2RlKHN0cnVjdCBjbW1fb2JqZWN0ICpj bW1fbWdyX29iaiwgdTMyIGR3X3BhLAotCQkJCSAgdTMyIGR3X3ZhLCB1MzIgdWxfc2l6ZSk7Ci0v KiBnZXQgYXZhaWxhYmxlIHNsb3QgZm9yIG5ldyBhbGxvY2F0b3IgKi8KLXN0YXRpYyBzMzIgZ2V0 X3Nsb3Qoc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqKTsKLXN0YXRpYyB2b2lkIHVuX3Jl Z2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX2FsbG9jYXRvciAqcHNtYSk7Ci0KLS8qCi0gKiAg PT09PT09PT0gY21tX2NhbGxvY19idWYgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBB bGxvY2F0ZSBhIFNNIGJ1ZmZlciwgemVybyBjb250ZW50cywgYW5kIHJldHVybiB0aGUgcGh5c2lj YWwgYWRkcmVzcwotICogICAgICBhbmQgb3B0aW9uYWwgZHJpdmVyIGNvbnRleHQgdmlydHVhbCBh ZGRyZXNzKHBwX2J1Zl92YSkuCi0gKgotICogICAgICBUaGUgZnJlZWxpc3QgaXMgc29ydGVkIGlu IGluY3JlYXNpbmcgc2l6ZSBvcmRlci4gR2V0IHRoZSBmaXJzdAotICogICAgICBibG9jayB0aGF0 IHNhdGlmaWVzIHRoZSByZXF1ZXN0IGFuZCBzb3J0IHRoZSByZW1haW5pbmcgYmFjayBvbgotICog ICAgICB0aGUgZnJlZWxpc3Q7IGlmIGxhcmdlIGVub3VnaC4gVGhlIGtlcHQgYmxvY2sgaXMgcGxh Y2VkIG9uIHRoZQotICogICAgICBpblVzZUxpc3QuCi0gKi8KLXZvaWQgKmNtbV9jYWxsb2NfYnVm KHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwgdTMyIHVzaXplLAotCQkgICAgIHN0cnVjdCBj bW1fYXR0cnMgKnBhdHRycywgdm9pZCAqKnBwX2J1Zl92YSkKLXsKLQlzdHJ1Y3QgY21tX29iamVj dCAqY21tX21ncl9vYmogPSAoc3RydWN0IGNtbV9vYmplY3QgKiloY21tX21ncjsKLQl2b2lkICpi dWZfcGEgPSBOVUxMOwotCXN0cnVjdCBjbW1fbW5vZGUgKnBub2RlID0gTlVMTDsKLQlzdHJ1Y3Qg Y21tX21ub2RlICpuZXdfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9j YXRvciA9IE5VTEw7Ci0JdTMyIGRlbHRhX3NpemU7Ci0JdTggKnBieXRlID0gTlVMTDsKLQlzMzIg Y250OwotCi0JaWYgKHBhdHRycyA9PSBOVUxMKQotCQlwYXR0cnMgPSAmY21tX2RmbHRhbGN0YXR0 cnM7Ci0KLQlpZiAocHBfYnVmX3ZhICE9IE5VTEwpCi0JCSpwcF9idWZfdmEgPSBOVUxMOwotCi0J aWYgKGNtbV9tZ3Jfb2JqICYmICh1c2l6ZSAhPSAwKSkgewotCQlpZiAocGF0dHJzLT5zZWdfaWQg PiAwKSB7Ci0JCQkvKiBTZWdJZCA+IDAgaXMgU00gKi8KLQkJCS8qIGdldCB0aGUgYWxsb2NhdG9y IG9iamVjdCBmb3IgdGhpcyBzZWdtZW50IGlkICovCi0JCQlhbGxvY2F0b3IgPQotCQkJICAgIGdl dF9hbGxvY2F0b3IoY21tX21ncl9vYmosIHBhdHRycy0+c2VnX2lkKTsKLQkJCS8qIGtlZXAgYmxv Y2sgc2l6ZSBhIG11bHRpcGxlIG9mIG1pbl9ibG9ja19zaXplICovCi0JCQl1c2l6ZSA9Ci0JCQkg ICAgKCh1c2l6ZSAtIDEpICYgfihjbW1fbWdyX29iai0+bWluX2Jsb2NrX3NpemUgLQotCQkJCQkg ICAgIDEpKQotCQkJICAgICsgY21tX21ncl9vYmotPm1pbl9ibG9ja19zaXplOwotCQkJbXV0ZXhf bG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKLQkJCXBub2RlID0gZ2V0X2ZyZWVfYmxvY2so YWxsb2NhdG9yLCB1c2l6ZSk7Ci0JCX0KLQkJaWYgKHBub2RlKSB7Ci0JCQlkZWx0YV9zaXplID0g KHBub2RlLT5zaXplIC0gdXNpemUpOwotCQkJaWYgKGRlbHRhX3NpemUgPj0gY21tX21ncl9vYmot Pm1pbl9ibG9ja19zaXplKSB7Ci0JCQkJLyogY3JlYXRlIGEgbmV3IGJsb2NrIHdpdGggdGhlIGxl ZnRvdmVycyBhbmQKLQkJCQkgKiBhZGQgdG8gZnJlZWxpc3QgKi8KLQkJCQluZXdfbm9kZSA9Ci0J CQkJICAgIGdldF9ub2RlKGNtbV9tZ3Jfb2JqLCBwbm9kZS0+cGEgKyB1c2l6ZSwKLQkJCQkJICAg ICBwbm9kZS0+dmEgKyB1c2l6ZSwKLQkJCQkJICAgICAodTMyKSBkZWx0YV9zaXplKTsKLQkJCQkv KiBsZWZ0b3ZlcnMgZ28gZnJlZSAqLwotCQkJCWFkZF90b19mcmVlX2xpc3QoYWxsb2NhdG9yLCBu ZXdfbm9kZSk7Ci0JCQkJLyogYWRqdXN0IG91ciBub2RlJ3Mgc2l6ZSAqLwotCQkJCXBub2RlLT5z aXplID0gdXNpemU7Ci0JCQl9Ci0JCQkvKiBUYWcgbm9kZSB3aXRoIGNsaWVudCBwcm9jZXNzIHJl cXVlc3RpbmcgYWxsb2NhdGlvbgotCQkJICogV2UnbGwgbmVlZCB0byBmcmVlIHVwIGEgcHJvY2Vz cydzIGFsbG9jJ2QgU00gaWYgdGhlCi0JCQkgKiBjbGllbnQgcHJvY2VzcyBnb2VzIGF3YXkuCi0J CQkgKi8KLQkJCS8qIFJldHVybiBUR0lEIGluc3RlYWQgb2YgcHJvY2VzcyBoYW5kbGUgKi8KLQkJ CXBub2RlLT5jbGllbnRfcHJvYyA9IGN1cnJlbnQtPnRnaWQ7Ci0KLQkJCS8qIHB1dCBvdXIgbm9k ZSBvbiBJblVzZSBsaXN0ICovCi0JCQlsaXN0X2FkZF90YWlsKCZwbm9kZS0+bGluaywgJmFsbG9j YXRvci0+aW5fdXNlX2xpc3QpOwotCQkJYnVmX3BhID0gKHZvaWQgKilwbm9kZS0+cGE7CS8qIHBo eXNpY2FsIGFkZHJlc3MgKi8KLQkJCS8qIGNsZWFyIG1lbSAqLwotCQkJcGJ5dGUgPSAodTggKikg cG5vZGUtPnZhOwotCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAoczMyKSB1c2l6ZTsgY250KyssIHBi eXRlKyspCi0JCQkJKnBieXRlID0gMDsKLQotCQkJaWYgKHBwX2J1Zl92YSAhPSBOVUxMKSB7Ci0J CQkJLyogVmlydHVhbCBhZGRyZXNzICovCi0JCQkJKnBwX2J1Zl92YSA9ICh2b2lkICopcG5vZGUt PnZhOwotCQkJfQotCQl9Ci0JCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsK LQl9Ci0JcmV0dXJuIGJ1Zl9wYTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjbW1fY3JlYXRlID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ3JlYXRlIGEgY29tbXVuaWNhdGlvbiBtZW1v cnkgbWFuYWdlciBvYmplY3QuCi0gKi8KLWludCBjbW1fY3JlYXRlKHN0cnVjdCBjbW1fb2JqZWN0 ICoqcGhfY21tX21nciwKLQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkg ICAgICBjb25zdCBzdHJ1Y3QgY21tX21ncmF0dHJzICptZ3JfYXR0cnRzKQotewotCXN0cnVjdCBj bW1fb2JqZWN0ICpjbW1fb2JqID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQotCSpwaF9jbW1f bWdyID0gTlVMTDsKLQkvKiBjcmVhdGUsIHplcm8sIGFuZCB0YWcgYSBjbW0gbWdyIG9iamVjdCAq LwotCWNtbV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21tX29iamVjdCksIEdGUF9LRVJO RUwpOwotCWlmICghY21tX29iaikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAobWdyX2F0dHJ0 cyA9PSBOVUxMKQotCQltZ3JfYXR0cnRzID0gJmNtbV9kZmx0bWdyYXR0cnM7CS8qIHNldCBkZWZh dWx0cyAqLwotCi0JLyogc2F2ZSBhd2F5IHNtYWxsZXN0IGJsb2NrIGFsbG9jYXRpb24gZm9yIHRo aXMgY21tIG1nciAqLwotCWNtbV9vYmotPm1pbl9ibG9ja19zaXplID0gbWdyX2F0dHJ0cy0+bWlu X2Jsb2NrX3NpemU7Ci0JY21tX29iai0+cGFnZV9zaXplID0gUEFHRV9TSVpFOwotCi0JLyogY3Jl YXRlIG5vZGUgZnJlZSBsaXN0ICovCi0JSU5JVF9MSVNUX0hFQUQoJmNtbV9vYmotPm5vZGVfZnJl ZV9saXN0KTsKLQltdXRleF9pbml0KCZjbW1fb2JqLT5jbW1fbG9jayk7Ci0JKnBoX2NtbV9tZ3Ig PSBjbW1fb2JqOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjbW1f ZGVzdHJveSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlbGVhc2UgdGhlIGNvbW11 bmljYXRpb24gbWVtb3J5IG1hbmFnZXIgcmVzb3VyY2VzLgotICovCi1pbnQgY21tX2Rlc3Ryb3ko c3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLCBib29sIGZvcmNlKQotewotCXN0cnVjdCBjbW1f b2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKWhjbW1fbWdyOwotCXN0 cnVjdCBjbW1faW5mbyB0ZW1wX2luZm87Ci0JaW50IHN0YXR1cyA9IDA7Ci0JczMyIHNsb3Rfc2Vn OwotCXN0cnVjdCBjbW1fbW5vZGUgKm5vZGUsICp0bXA7Ci0KLQlpZiAoIWhjbW1fbWdyKSB7Ci0J CXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCW11dGV4X2xvY2soJmNt bV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0JLyogSWYgbm90IGZvcmNlIHRoZW4gZmFpbCBpZiBvdXRz dGFuZGluZyBhbGxvY2F0aW9ucyBleGlzdCAqLwotCWlmICghZm9yY2UpIHsKLQkJLyogQ2hlY2sg Zm9yIG91dHN0YW5kaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyAqLwotCQlzdGF0dXMgPSBjbW1fZ2V0 X2luZm8oaGNtbV9tZ3IsICZ0ZW1wX2luZm8pOwotCQlpZiAoIXN0YXR1cykgewotCQkJaWYgKHRl bXBfaW5mby50b3RhbF9pbl91c2VfY250ID4gMCkgewotCQkJCS8qIG91dHN0YW5kaW5nIGFsbG9j YXRpb25zICovCi0JCQkJc3RhdHVzID0gLUVQRVJNOwotCQkJfQotCQl9Ci0JfQotCWlmICghc3Rh dHVzKSB7Ci0JCS8qIFVuUmVnaXN0ZXIgU00gYWxsb2NhdG9yICovCi0JCWZvciAoc2xvdF9zZWcg PSAwOyBzbG90X3NlZyA8IENNTV9NQVhHUFBTRUdTOyBzbG90X3NlZysrKSB7Ci0JCQlpZiAoY21t X21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbc2xvdF9zZWddICE9IE5VTEwpIHsKLQkJCQl1bl9y ZWdpc3Rlcl9ncHBzbV9zZWcKLQkJCQkgICAgKGNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFi W3Nsb3Rfc2VnXSk7Ci0JCQkJLyogU2V0IHNsb3QgdG8gTlVMTCBmb3IgZnV0dXJlIHJldXNlICov Ci0JCQkJY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbc2xvdF9zZWddID0gTlVMTDsKLQkJ CX0KLQkJfQotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgdG1wLCAmY21tX21n cl9vYmotPm5vZGVfZnJlZV9saXN0LAotCQkJbGluaykgewotCQlsaXN0X2RlbCgmbm9kZS0+bGlu ayk7Ci0JCWtmcmVlKG5vZGUpOwotCX0KLQltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1f bG9jayk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJLyogZGVsZXRlIENTICYgY21tIG1nciBvYmplY3Qg Ki8KLQkJbXV0ZXhfZGVzdHJveSgmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKLQkJa2ZyZWUoY21t X21ncl9vYmopOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNt bV9mcmVlX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEZyZWUgdGhlIGdpdmVu IGJ1ZmZlci4KLSAqLwotaW50IGNtbV9mcmVlX2J1ZihzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9t Z3IsIHZvaWQgKmJ1Zl9wYSwgdTMyIHVsX3NlZ19pZCkKLXsKLQlzdHJ1Y3QgY21tX29iamVjdCAq Y21tX21ncl9vYmogPSAoc3RydWN0IGNtbV9vYmplY3QgKiloY21tX21ncjsKLQlpbnQgc3RhdHVz ID0gLUVGQVVMVDsKLQlzdHJ1Y3QgY21tX21ub2RlICpjdXJyLCAqdG1wOwotCXN0cnVjdCBjbW1f YWxsb2NhdG9yICphbGxvY2F0b3I7Ci0Jc3RydWN0IGNtbV9hdHRycyAqcGF0dHJzOwotCi0JaWYg KHVsX3NlZ19pZCA9PSAwKSB7Ci0JCXBhdHRycyA9ICZjbW1fZGZsdGFsY3RhdHRyczsKLQkJdWxf c2VnX2lkID0gcGF0dHJzLT5zZWdfaWQ7Ci0JfQotCWlmICghaGNtbV9tZ3IgfHwgISh1bF9zZWdf aWQgPiAwKSkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQot CWFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoY21tX21ncl9vYmosIHVsX3NlZ19pZCk7Ci0JaWYg KCFhbGxvY2F0b3IpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZjbW1fbWdyX29i ai0+Y21tX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyLCB0bXAsICZhbGxv Y2F0b3ItPmluX3VzZV9saXN0LCBsaW5rKSB7Ci0JCWlmIChjdXJyLT5wYSA9PSAodTMyKSBidWZf cGEpIHsKLQkJCWxpc3RfZGVsKCZjdXJyLT5saW5rKTsKLQkJCWFkZF90b19mcmVlX2xpc3QoYWxs b2NhdG9yLCBjdXJyKTsKLQkJCXN0YXR1cyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRl eF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQot Ci0vKgotICogID09PT09PT09IGNtbV9nZXRfaGFuZGxlID09PT09PT09Ci0gKiAgUHVycG9zZToK LSAqICAgICAgUmV0dXJuIHRoZSBjb21tdW5pY2F0aW9uIG1lbW9yeSBtYW5hZ2VyIG9iamVjdCBm b3IgdGhpcyBkZXZpY2UuCi0gKiAgICAgIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBmcm9tIHRo ZSBjbGllbnQgcHJvY2Vzcy4KLSAqLwotaW50IGNtbV9nZXRfaGFuZGxlKHZvaWQgKmhwcm9jZXNz b3IsIHN0cnVjdCBjbW1fb2JqZWN0ICoqcGhfY21tX21ncikKLXsKLQlpbnQgc3RhdHVzID0gMDsK LQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7Ci0KLQlpZiAoaHByb2Nlc3NvciAhPSBOVUxM KQotCQlzdGF0dXMgPSBwcm9jX2dldF9kZXZfb2JqZWN0KGhwcm9jZXNzb3IsICZoZGV2X29iaik7 Ci0JZWxzZQotCQloZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsJLyogZGVmYXVsdCAqLwotCi0J aWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRldl9nZXRfY21tX21ncihoZGV2X29iaiwgcGhfY21t X21ncik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNtbV9nZXRf aW5mbyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHVybiB0aGUgY3VycmVudCBt ZW1vcnkgdXRpbGl6YXRpb24gaW5mb3JtYXRpb24uCi0gKi8KLWludCBjbW1fZ2V0X2luZm8oc3Ry dWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLAotCQkJc3RydWN0IGNtbV9pbmZvICpjbW1faW5mb19v YmopCi17Ci0Jc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2Jq ZWN0ICopaGNtbV9tZ3I7Ci0JdTMyIHVsX3NlZzsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3Qg Y21tX2FsbG9jYXRvciAqYWx0cjsKLQlzdHJ1Y3QgY21tX21ub2RlICpjdXJyOwotCi0JaWYgKCFo Y21tX21ncikgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlt dXRleF9sb2NrKCZjbW1fbWdyX29iai0+Y21tX2xvY2spOwotCWNtbV9pbmZvX29iai0+bnVtX2dw cHNtX3NlZ3MgPSAwOwkvKiAjIG9mIFNNIHNlZ21lbnRzICovCi0JLyogVG90YWwgIyBvZiBvdXRz dGFuZGluZyBhbGxvYyAqLwotCWNtbV9pbmZvX29iai0+dG90YWxfaW5fdXNlX2NudCA9IDA7Ci0J LyogbWluIGJsb2NrIHNpemUgKi8KLQljbW1faW5mb19vYmotPm1pbl9ibG9ja19zaXplID0gY21t X21ncl9vYmotPm1pbl9ibG9ja19zaXplOwotCS8qIGNoZWNrIFNNIG1lbW9yeSBzZWdtZW50cyAq LwotCWZvciAodWxfc2VnID0gMTsgdWxfc2VnIDw9IENNTV9NQVhHUFBTRUdTOyB1bF9zZWcrKykg ewotCQkvKiBnZXQgdGhlIGFsbG9jYXRvciBvYmplY3QgZm9yIHRoaXMgc2VnbWVudCBpZCAqLwot CQlhbHRyID0gZ2V0X2FsbG9jYXRvcihjbW1fbWdyX29iaiwgdWxfc2VnKTsKLQkJaWYgKCFhbHRy KQotCQkJY29udGludWU7Ci0JCWNtbV9pbmZvX29iai0+bnVtX2dwcHNtX3NlZ3MrKzsKLQkJY21t X2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5zZWdfYmFzZV9wYSA9Ci0JCQlhbHRyLT5z aG1fYmFzZSAtIGFsdHItPmRzcF9zaXplOwotCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3Nl ZyAtIDFdLnRvdGFsX3NlZ19zaXplID0KLQkJCWFsdHItPmRzcF9zaXplICsgYWx0ci0+c21fc2l6 ZTsKLQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5ncHBfYmFzZV9wYSA9Ci0J CQlhbHRyLT5zaG1fYmFzZTsKLQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5n cHBfc2l6ZSA9Ci0JCQlhbHRyLT5zbV9zaXplOwotCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3Vs X3NlZyAtIDFdLmRzcF9iYXNlX3ZhID0KLQkJCWFsdHItPmRzcF9iYXNlOwotCQljbW1faW5mb19v YmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLmRzcF9zaXplID0KLQkJCWFsdHItPmRzcF9zaXplOwot CQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLnNlZ19iYXNlX3ZhID0KLQkJCWFs dHItPnZtX2Jhc2UgLSBhbHRyLT5kc3Bfc2l6ZTsKLQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1 bF9zZWcgLSAxXS5pbl91c2VfY250ID0gMDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnIs ICZhbHRyLT5pbl91c2VfbGlzdCwgbGluaykgewotCQkJY21tX2luZm9fb2JqLT50b3RhbF9pbl91 c2VfY250Kys7Ci0JCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLmluX3VzZV9j bnQrKzsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0J cmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjbW1fcmVnaXN0ZXJfZ3Bwc21f c2VnID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVnaXN0ZXIgYSBibG9jayBvZiBT TSB3aXRoIHRoZSBDTU0gdG8gYmUgdXNlZCBmb3IgbGF0ZXIgR1BQIFNNCi0gKiAgICAgIGFsbG9j YXRpb25zLgotICovCi1pbnQgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX29iamVj dCAqaGNtbV9tZ3IsCi0JCQkJICB1MzIgZHdfZ3BwX2Jhc2VfcGEsIHUzMiB1bF9zaXplLAotCQkJ CSAgdTMyIGRzcF9hZGRyX29mZnNldCwgczggY19mYWN0b3IsCi0JCQkJICB1MzIgZHdfZHNwX2Jh c2UsIHUzMiB1bF9kc3Bfc2l6ZSwKLQkJCQkgIHUzMiAqc2dtdF9pZCwgdTMyIGdwcF9iYXNlX3Zh KQotewotCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVj dCAqKWhjbW1fbWdyOwotCXN0cnVjdCBjbW1fYWxsb2NhdG9yICpwc21hID0gTlVMTDsKLQlpbnQg c3RhdHVzID0gMDsKLQlzdHJ1Y3QgY21tX21ub2RlICpuZXdfbm9kZTsKLQlzMzIgc2xvdF9zZWc7 Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBkd19ncHBfYmFzZV9wYSAleCB1bF9zaXplICV4IGRz cF9hZGRyX29mZnNldCAleCBkd19kc3BfYmFzZSAleCB1bF9kc3Bfc2l6ZSAleCBncHBfYmFzZV92 YSAleFxuIiwKLQkJCV9fZnVuY19fLCBkd19ncHBfYmFzZV9wYSwgdWxfc2l6ZSwgZHNwX2FkZHJf b2Zmc2V0LAotCQkJZHdfZHNwX2Jhc2UsIHVsX2RzcF9zaXplLCBncHBfYmFzZV92YSk7Ci0KLQlp ZiAoIWhjbW1fbWdyKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIG1ha2Ugc3VyZSB3ZSBoYXZl IHJvb20gZm9yIGFub3RoZXIgYWxsb2NhdG9yICovCi0JbXV0ZXhfbG9jaygmY21tX21ncl9vYmot PmNtbV9sb2NrKTsKLQotCXNsb3Rfc2VnID0gZ2V0X3Nsb3QoY21tX21ncl9vYmopOwotCWlmIChz bG90X3NlZyA8IDApIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0K LQotCS8qIENoZWNrIGlmIGlucHV0IHVsX3NpemUgaXMgYmlnIGVub3VnaCB0byBhbGxvYyBhdCBs ZWFzdCBvbmUgYmxvY2sgKi8KLQlpZiAodWxfc2l6ZSA8IGNtbV9tZ3Jfb2JqLT5taW5fYmxvY2tf c2l6ZSkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCS8q IGNyZWF0ZSwgemVybywgYW5kIHRhZyBhbiBTTSBhbGxvY2F0b3Igb2JqZWN0ICovCi0JcHNtYSA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbW1fYWxsb2NhdG9yKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFwc21hKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0J cHNtYS0+Y21tX21nciA9IGhjbW1fbWdyOwkvKiByZWYgdG8gcGFyZW50ICovCi0JcHNtYS0+c2ht X2Jhc2UgPSBkd19ncHBfYmFzZV9wYTsJLyogU00gQmFzZSBwaHlzICovCi0JcHNtYS0+c21fc2l6 ZSA9IHVsX3NpemU7CS8qIFNNIHNlZ21lbnQgc2l6ZSBpbiBieXRlcyAqLwotCXBzbWEtPnZtX2Jh c2UgPSBncHBfYmFzZV92YTsKLQlwc21hLT5kc3BfcGh5c19hZGRyX29mZnNldCA9IGRzcF9hZGRy X29mZnNldDsKLQlwc21hLT5jX2ZhY3RvciA9IGNfZmFjdG9yOwotCXBzbWEtPmRzcF9iYXNlID0g ZHdfZHNwX2Jhc2U7Ci0JcHNtYS0+ZHNwX3NpemUgPSB1bF9kc3Bfc2l6ZTsKLQlpZiAocHNtYS0+ dm1fYmFzZSA9PSAwKSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9 Ci0JLyogcmV0dXJuIHRoZSBhY3R1YWwgc2VnbWVudCBpZGVudGlmaWVyICovCi0JKnNnbXRfaWQg PSAodTMyKSBzbG90X3NlZyArIDE7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHNtYS0+ZnJlZV9saXN0 KTsKLQlJTklUX0xJU1RfSEVBRCgmcHNtYS0+aW5fdXNlX2xpc3QpOwotCi0JLyogR2V0IGEgbWVt IG5vZGUgZm9yIHRoaXMgaHVuay1vLW1lbW9yeSAqLwotCW5ld19ub2RlID0gZ2V0X25vZGUoY21t X21ncl9vYmosIGR3X2dwcF9iYXNlX3BhLAotCQkJcHNtYS0+dm1fYmFzZSwgdWxfc2l6ZSk7Ci0J LyogUGxhY2Ugbm9kZSBvbiB0aGUgU00gYWxsb2NhdG9yJ3MgZnJlZSBsaXN0ICovCi0JaWYgKG5l d19ub2RlKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ld19ub2RlLT5saW5rLCAmcHNtYS0+ZnJlZV9s aXN0KTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGZ1bmNfZW5kOwot CX0KLQkvKiBtYWtlIGVudHJ5ICovCi0JY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbc2xv dF9zZWddID0gcHNtYTsKLQotZnVuY19lbmQ6Ci0JLyogQ2xlYW51cCBhbGxvY2F0b3IgKi8KLQlp ZiAoc3RhdHVzICYmIHBzbWEpCi0JCXVuX3JlZ2lzdGVyX2dwcHNtX3NlZyhwc21hKTsKLQltdXRl eF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQot Ci0vKgotICogID09PT09PT09IGNtbV91bl9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBVblJlZ2lzdGVyIEdQUCBTTSBzZWdtZW50cyB3aXRoIHRoZSBD TU0uCi0gKi8KLWludCBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0 ICpoY21tX21nciwKLQkJCQkgICAgIHUzMiB1bF9zZWdfaWQpCi17Ci0Jc3RydWN0IGNtbV9vYmpl Y3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7Ci0JaW50IHN0 YXR1cyA9IDA7Ci0Jc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWE7Ci0JdTMyIHVsX2lkID0gdWxf c2VnX2lkOwotCi0JaWYgKCFoY21tX21ncikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAodWxf c2VnX2lkID09IENNTV9BTExTRUdNRU5UUykKLQkJdWxfaWQgPSAxOwotCi0JaWYgKCh1bF9pZCA8 PSAwKSB8fCAodWxfaWQgPiBDTU1fTUFYR1BQU0VHUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0J LyoKLQkgKiBGSVhNRTogQ01NX01BWEdQUFNFR1MgPT0gMS4gd2h5IHVzZSBhIHdoaWxlIGN5Y2xl PyBTZWVtcyB0byBtZSBsaWtlCi0JICogdGhlIHVsX3NlZ19pZCBpcyBub3QgbmVlZGVkIGhlcmUu IEl0IG11c3QgYmUgYWx3YXlzIDEuCi0JICovCi0Jd2hpbGUgKHVsX2lkIDw9IENNTV9NQVhHUFBT RUdTKSB7Ci0JCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0JCS8qIHNsb3Qg PSBzZWdfaWQtMSAqLwotCQlwc21hID0gY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbdWxf aWQgLSAxXTsKLQkJaWYgKHBzbWEgIT0gTlVMTCkgewotCQkJdW5fcmVnaXN0ZXJfZ3Bwc21fc2Vn KHBzbWEpOwotCQkJLyogU2V0IGFsY3RyIHB0ciB0byBOVUxMIGZvciBmdXR1cmUgcmV1c2UgKi8K LQkJCWNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3VsX2lkIC0gMV0gPSBOVUxMOwotCQl9 IGVsc2UgaWYgKHVsX3NlZ19pZCAhPSBDTU1fQUxMU0VHTUVOVFMpIHsKLQkJCXN0YXR1cyA9IC1F UEVSTTsKLQkJfQotCQltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7Ci0JCWlm ICh1bF9zZWdfaWQgIT0gQ01NX0FMTFNFR01FTlRTKQotCQkJYnJlYWs7Ci0KLQkJdWxfaWQrKzsK LQl9CS8qIGVuZCB3aGlsZSAqLwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT0gdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg VW5SZWdpc3RlciB0aGUgU00gYWxsb2NhdG9yIGJ5IGZyZWVpbmcgYWxsIGl0cyByZXNvdXJjZXMg YW5kCi0gKiAgICAgIG51bGxpbmcgY21tIG1nciB0YWJsZSBlbnRyeS4KLSAqICBOb3RlOgotICog ICAgICBUaGlzIHJvdXRpbmUgaXMgYWx3YXlzIGNhbGxlZCB3aXRoaW4gY21tIGxvY2sgY3JpdCBz ZWN0LgotICovCi1zdGF0aWMgdm9pZCB1bl9yZWdpc3Rlcl9ncHBzbV9zZWcoc3RydWN0IGNtbV9h bGxvY2F0b3IgKnBzbWEpCi17Ci0Jc3RydWN0IGNtbV9tbm9kZSAqY3VyciwgKnRtcDsKLQotCS8q IGZyZWUgbm9kZXMgb24gZnJlZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1 cnIsIHRtcCwgJnBzbWEtPmZyZWVfbGlzdCwgbGluaykgewotCQlsaXN0X2RlbCgmY3Vyci0+bGlu ayk7Ci0JCWtmcmVlKGN1cnIpOwotCX0KLQotCS8qIGZyZWUgbm9kZXMgb24gSW5Vc2UgbGlzdCAq LwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyLCB0bXAsICZwc21hLT5pbl91c2VfbGlz dCwgbGluaykgewotCQlsaXN0X2RlbCgmY3Vyci0+bGluayk7Ci0JCWtmcmVlKGN1cnIpOwotCX0K LQotCWlmICgodm9pZCAqKXBzbWEtPnZtX2Jhc2UgIT0gTlVMTCkKLQkJTUVNX1VOTUFQX0xJTkVB Ul9BRERSRVNTKCh2b2lkICopcHNtYS0+dm1fYmFzZSk7Ci0KLQkvKiBGcmVlIGFsbG9jYXRvciBp dHNlbGYgKi8KLQlrZnJlZShwc21hKTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnZXRfc2xvdCA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEFuIGF2YWlsYWJsZSBzbG90ICMgaXMgcmV0 dXJuZWQuIFJldHVybnMgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIHMzMiBnZXRf c2xvdChzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmopCi17Ci0JczMyIHNsb3Rfc2VnID0g LTE7CS8qIG5lZyBvbiBmYWlsdXJlICovCi0JLyogZ2V0IGZpcnN0IGF2YWlsYWJsZSBzbG90IGlu IGNtbSBtZ3IgU01TZWdUYWJbXSAqLwotCWZvciAoc2xvdF9zZWcgPSAwOyBzbG90X3NlZyA8IENN TV9NQVhHUFBTRUdTOyBzbG90X3NlZysrKSB7Ci0JCWlmIChjbW1fbWdyX29iai0+cGFfZ3Bwc21f c2VnX3RhYltzbG90X3NlZ10gPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JfQotCWlmIChzbG90X3Nl ZyA9PSBDTU1fTUFYR1BQU0VHUykKLQkJc2xvdF9zZWcgPSAtMTsJLyogZmFpbGVkICovCi0KLQly ZXR1cm4gc2xvdF9zZWc7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZ2V0X25vZGUgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBHZXQgYSBtZW1vcnkgbm9kZSBmcm9tIGZyZWVsaXN0IG9y IGNyZWF0ZSBhIG5ldyBvbmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfbm9k ZShzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmosIHUzMiBkd19wYSwKLQkJCQkgIHUzMiBk d192YSwgdTMyIHVsX3NpemUpCi17Ci0Jc3RydWN0IGNtbV9tbm9kZSAqcG5vZGU7Ci0KLQkvKiBD aGVjayBjbW0gbWdyJ3Mgbm9kZSBmcmVlbGlzdCAqLwotCWlmIChsaXN0X2VtcHR5KCZjbW1fbWdy X29iai0+bm9kZV9mcmVlX2xpc3QpKSB7Ci0JCXBub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IGNtbV9tbm9kZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXBub2RlKQotCQkJcmV0dXJuIE5VTEw7 Ci0JfSBlbHNlIHsKLQkJLyogc3VyZWx5IGEgdmFsaWQgZWxlbWVudCAqLwotCQlwbm9kZSA9IGxp c3RfZmlyc3RfZW50cnkoJmNtbV9tZ3Jfb2JqLT5ub2RlX2ZyZWVfbGlzdCwKLQkJCQlzdHJ1Y3Qg Y21tX21ub2RlLCBsaW5rKTsKLQkJbGlzdF9kZWxfaW5pdCgmcG5vZGUtPmxpbmspOwotCX0KLQot CXBub2RlLT5wYSA9IGR3X3BhOwotCXBub2RlLT52YSA9IGR3X3ZhOwotCXBub2RlLT5zaXplID0g dWxfc2l6ZTsKLQotCXJldHVybiBwbm9kZTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZWxldGVf bm9kZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFB1dCBhIG1lbW9yeSBub2RlIG9u IHRoZSBjbW0gbm9kZWxpc3QgZm9yIGxhdGVyIHVzZS4KLSAqICAgICAgRG9lc24ndCBhY3R1YWxs eSBkZWxldGUgdGhlIG5vZGUuIEhlYXAgdGhyYXNoaW5nIGZyaWVuZGx5LgotICovCi1zdGF0aWMg dm9pZCBkZWxldGVfbm9kZShzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmosIHN0cnVjdCBj bW1fbW5vZGUgKnBub2RlKQotewotCWxpc3RfYWRkX3RhaWwoJnBub2RlLT5saW5rLCAmY21tX21n cl9vYmotPm5vZGVfZnJlZV9saXN0KTsKLX0KLQotLyoKLSAqID09PT09PSBnZXRfZnJlZV9ibG9j ayA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNjYW4gdGhlIGZyZWUgYmxvY2sgbGlz dCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBibG9jayB0aGF0IHNhdGlzZmllcwotICogICAgICB0aGUg c2l6ZS4KLSAqLwotc3RhdGljIHN0cnVjdCBjbW1fbW5vZGUgKmdldF9mcmVlX2Jsb2NrKHN0cnVj dCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IsCi0JCQkJCXUzMiB1c2l6ZSkKLXsKLQlzdHJ1Y3Qg Y21tX21ub2RlICpub2RlLCAqdG1wOwotCi0JaWYgKCFhbGxvY2F0b3IpCi0JCXJldHVybiBOVUxM OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmFsbG9jYXRvci0+ZnJl ZV9saXN0LCBsaW5rKSB7Ci0JCWlmICh1c2l6ZSA8PSBub2RlLT5zaXplKSB7Ci0JCQlsaXN0X2Rl bCgmbm9kZS0+bGluayk7Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCX0KLQotCXJldHVybiBOVUxM OwotfQotCi0vKgotICogID09PT09PT09IGFkZF90b19mcmVlX2xpc3QgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBDb2FsZXNjZSBub2RlIGludG8gdGhlIGZyZWVsaXN0IGluIGFzY2Vu ZGluZyBzaXplIG9yZGVyLgotICovCi1zdGF0aWMgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVj dCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IsCi0JCQkgICAgIHN0cnVjdCBjbW1fbW5vZGUgKm5v ZGUpCi17Ci0Jc3RydWN0IGNtbV9tbm9kZSAqY3VycjsKLQotCWlmICghbm9kZSkgewotCQlwcl9l cnIoIiVzOiBmYWlsZWQgLSBub2RlIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwot CX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyciwgJmFsbG9jYXRvci0+ZnJlZV9saXN0LCBs aW5rKSB7Ci0JCWlmIChORVhUX1BBKGN1cnIpID09IG5vZGUtPnBhKSB7Ci0JCQljdXJyLT5zaXpl ICs9IG5vZGUtPnNpemU7Ci0JCQlkZWxldGVfbm9kZShhbGxvY2F0b3ItPmNtbV9tZ3IsIG5vZGUp OwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChjdXJyLT5wYSA9PSBORVhUX1BBKG5vZGUpKSB7Ci0J CQljdXJyLT5wYSA9IG5vZGUtPnBhOwotCQkJY3Vyci0+dmEgPSBub2RlLT52YTsKLQkJCWN1cnIt PnNpemUgKz0gbm9kZS0+c2l6ZTsKLQkJCWRlbGV0ZV9ub2RlKGFsbG9jYXRvci0+Y21tX21nciwg bm9kZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdXJyLCAm YWxsb2NhdG9yLT5mcmVlX2xpc3QsIGxpbmspIHsKLQkJaWYgKGN1cnItPnNpemUgPj0gbm9kZS0+ c2l6ZSkgewotCQkJbGlzdF9hZGRfdGFpbCgmbm9kZS0+bGluaywgJmN1cnItPmxpbmspOwotCQkJ cmV0dXJuOwotCQl9Ci0JfQotCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmxpbmssICZhbGxvY2F0b3It PmZyZWVfbGlzdCk7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBnZXRfYWxsb2NhdG9yID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0dXJuIHRoZSBhbGxvY2F0b3IgZm9yIHRoZSBnaXZl biBTTSBTZWdpZC4KLSAqICAgICAgU2VnSWRzOiAgMSwyLDMuLm1heC4KLSAqLwotc3RhdGljIHN0 cnVjdCBjbW1fYWxsb2NhdG9yICpnZXRfYWxsb2NhdG9yKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1f bWdyX29iaiwKLQkJCQkJICAgdTMyIHVsX3NlZ19pZCkKLXsKLQlyZXR1cm4gY21tX21ncl9vYmot PnBhX2dwcHNtX3NlZ190YWJbdWxfc2VnX2lkIC0gMV07Ci19Ci0KLS8qCi0gKiAgVGhlIENNTV9Y bGF0b3JbeHh4XSByb3V0aW5lcyBiZWxvdyBhcmUgdXNlZCBieSBOb2RlIGFuZCBTdHJlYW0KLSAq ICB0byBwZXJmb3JtIFNNIGFkZHJlc3MgdHJhbnNsYXRpb24gdG8gdGhlIGNsaWVudCBwcm9jZXNz IGFkZHJlc3Mgc3BhY2UuCi0gKiAgQSAidHJhbnNsYXRvciIgb2JqZWN0IGlzIGNyZWF0ZWQgYnkg YSBub2RlL3N0cmVhbSBmb3IgZWFjaCBTTSBzZWcgdXNlZC4KLSAqLwotCi0vKgotICogID09PT09 PT09IGNtbV94bGF0b3JfY3JlYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ3Jl YXRlIGFuIGFkZHJlc3MgdHJhbnNsYXRvciBvYmplY3QuCi0gKi8KLWludCBjbW1feGxhdG9yX2Ny ZWF0ZShzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqKnhsYXRvciwKLQkJCSAgICAgc3RydWN0IGNt bV9vYmplY3QgKmhjbW1fbWdyLAotCQkJICAgICBzdHJ1Y3QgY21tX3hsYXRvcmF0dHJzICp4bGF0 b3JfYXR0cnMpCi17Ci0Jc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmplY3QgPSBOVUxMOwot CWludCBzdGF0dXMgPSAwOwotCi0JKnhsYXRvciA9IE5VTEw7Ci0JaWYgKHhsYXRvcl9hdHRycyA9 PSBOVUxMKQotCQl4bGF0b3JfYXR0cnMgPSAmY21tX2RmbHR4bGF0b3JhdHRyczsJLyogc2V0IGRl ZmF1bHRzICovCi0KLQl4bGF0b3Jfb2JqZWN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtbV94 bGF0b3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoeGxhdG9yX29iamVjdCAhPSBOVUxMKSB7Ci0JCXhs YXRvcl9vYmplY3QtPmNtbV9tZ3IgPSBoY21tX21ncjsJLyogcmVmIGJhY2sgdG8gQ01NICovCi0J CS8qIFNNIHNlZ19pZCAqLwotCQl4bGF0b3Jfb2JqZWN0LT5zZWdfaWQgPSB4bGF0b3JfYXR0cnMt PnNlZ19pZDsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCX0KLQlpZiAoIXN0YXR1 cykKLQkJKnhsYXRvciA9IChzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqKXhsYXRvcl9vYmplY3Q7 Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNtbV94bGF0b3JfYWxs b2NfYnVmID09PT09PT09Ci0gKi8KLXZvaWQgKmNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cnVjdCBj bW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIHZvaWQgKnZhX2J1ZiwKLQkJCSAgIHUzMiBwYV9zaXpl KQotewotCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqID0gKHN0cnVjdCBjbW1feGxhdG9y ICopeGxhdG9yOwotCXZvaWQgKnBidWYgPSBOVUxMOwotCXZvaWQgKnRtcF92YV9idWZmOwotCXN0 cnVjdCBjbW1fYXR0cnMgYXR0cnM7Ci0KLQlpZiAoeGxhdG9yX29iaikgewotCQlhdHRycy5zZWdf aWQgPSB4bGF0b3Jfb2JqLT5zZWdfaWQ7Ci0JCV9fcmF3X3dyaXRlbCgwLCB2YV9idWYpOwotCQkv KiBBbGxvYyBTTSAqLwotCQlwYnVmID0KLQkJICAgIGNtbV9jYWxsb2NfYnVmKHhsYXRvcl9vYmot PmNtbV9tZ3IsIHBhX3NpemUsICZhdHRycywgTlVMTCk7Ci0JCWlmIChwYnVmKSB7Ci0JCQkvKiBj b252ZXJ0IHRvIHRyYW5zbGF0b3Iobm9kZS9zdHJtKSBwcm9jZXNzIFZpcnR1YWwKLQkJCSAqIGFk ZHJlc3MgKi8KLQkJCSB0bXBfdmFfYnVmZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKHhsYXRvciwK LQkJCQkJCQkgcGJ1ZiwgQ01NX1BBMlZBKTsKLQkJCV9fcmF3X3dyaXRlbCgodTMyKXRtcF92YV9i dWZmLCB2YV9idWYpOwotCQl9Ci0JfQotCXJldHVybiBwYnVmOwotfQotCi0vKgotICogID09PT09 PT09IGNtbV94bGF0b3JfZnJlZV9idWYgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBG cmVlIHRoZSBnaXZlbiBTTSBidWZmZXIgYW5kIGRlc2NyaXB0b3IuCi0gKiAgICAgIERvZXMgbm90 IGZyZWUgdmlydHVhbCBtZW1vcnkuCi0gKi8KLWludCBjbW1feGxhdG9yX2ZyZWVfYnVmKHN0cnVj dCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIHZvaWQgKmJ1Zl92YSkKLXsKLQlzdHJ1Y3QgY21t X3hsYXRvciAqeGxhdG9yX29iaiA9IChzdHJ1Y3QgY21tX3hsYXRvciAqKXhsYXRvcjsKLQlpbnQg c3RhdHVzID0gLUVQRVJNOwotCXZvaWQgKmJ1Zl9wYSA9IE5VTEw7Ci0KLQlpZiAoeGxhdG9yX29i aikgewotCQkvKiBjb252ZXJ0IFZhIHRvIFBhIHNvIHdlIGNhbiBmcmVlIGl0LiAqLwotCQlidWZf cGEgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZSh4bGF0b3IsIGJ1Zl92YSwgQ01NX1ZBMlBBKTsKLQkJ aWYgKGJ1Zl9wYSkgewotCQkJc3RhdHVzID0gY21tX2ZyZWVfYnVmKHhsYXRvcl9vYmotPmNtbV9t Z3IsIGJ1Zl9wYSwKLQkJCQkJICAgICAgeGxhdG9yX29iai0+c2VnX2lkKTsKLQkJCWlmIChzdGF0 dXMpIHsKLQkJCQkvKiBVaCBvaCwgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBEZXNjcmlwdG9yCi0J CQkJICogZ29uZSEgKi8KLQkJCQlwcl9lcnIoIiVzLCBsaW5lICVkOiBBc3NlcnRpb24gZmFpbGVk XG4iLAotCQkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOwotCQkJfQotCQl9Ci0JfQotCXJl dHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gY21tX3hsYXRvcl9pbmZvID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2V0L0dldCB0cmFuc2xhdG9yIGluZm8uCi0gKi8K LWludCBjbW1feGxhdG9yX2luZm8oc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKnhsYXRvciwgdTgg KipwYWRkciwKLQkJCSAgIHUzMiB1bF9zaXplLCB1MzIgc2VnbV9pZCwgYm9vbCBzZXRfaW5mbykK LXsKLQlzdHJ1Y3QgY21tX3hsYXRvciAqeGxhdG9yX29iaiA9IChzdHJ1Y3QgY21tX3hsYXRvciAq KXhsYXRvcjsKLQlpbnQgc3RhdHVzID0gMDsKLQotCWlmICh4bGF0b3Jfb2JqKSB7Ci0JCWlmIChz ZXRfaW5mbykgewotCQkJLyogc2V0IHRyYW5zbGF0b3JzIHZpcnR1YWwgYWRkcmVzcyByYW5nZSAq LwotCQkJeGxhdG9yX29iai0+dmlydF9iYXNlID0gKHUzMikgKnBhZGRyOwotCQkJeGxhdG9yX29i ai0+dmlydF9zaXplID0gdWxfc2l6ZTsKLQkJfSBlbHNlIHsJLyogcmV0dXJuIHZpcnQgYmFzZSBh ZGRyZXNzICovCi0JCQkqcGFkZHIgPSAodTggKikgeGxhdG9yX29iai0+dmlydF9iYXNlOwotCQl9 Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0K LQotLyoKLSAqICA9PT09PT09PSBjbW1feGxhdG9yX3RyYW5zbGF0ZSA9PT09PT09PQotICovCi12 b2lkICpjbW1feGxhdG9yX3RyYW5zbGF0ZShzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9y LCB2b2lkICpwYWRkciwKLQkJCSAgIGVudW0gY21tX3hsYXRldHlwZSB4dHlwZSkKLXsKLQl1MzIg ZHdfYWRkcl94bGF0ZSA9IDA7Ci0Jc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmogPSAoc3Ry dWN0IGNtbV94bGF0b3IgKil4bGF0b3I7Ci0Jc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2Jq ID0gTlVMTDsKLQlzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yID0gTlVMTDsKLQl1MzIg ZHdfb2Zmc2V0ID0gMDsKLQotCWlmICgheGxhdG9yX29iaikKLQkJZ290byBsb29wX2NvbnQ7Ci0K LQljbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKXhsYXRvcl9vYmotPmNtbV9tZ3I7 Ci0JLyogZ2V0IHRoaXMgdHJhbnNsYXRvcidzIGRlZmF1bHQgU00gYWxsb2NhdG9yICovCi0JYWxs b2NhdG9yID0gY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbeGxhdG9yX29iai0+c2VnX2lk IC0gMV07Ci0JaWYgKCFhbGxvY2F0b3IpCi0JCWdvdG8gbG9vcF9jb250OwotCi0JaWYgKCh4dHlw ZSA9PSBDTU1fVkEyRFNQUEEpIHx8ICh4dHlwZSA9PSBDTU1fVkEyUEEpIHx8Ci0JICAgICh4dHlw ZSA9PSBDTU1fUEEyVkEpKSB7Ci0JCWlmICh4dHlwZSA9PSBDTU1fUEEyVkEpIHsKLQkJCS8qIEdw cCBWYSA9IFZhIEJhc2UgKyBvZmZzZXQgKi8KLQkJCWR3X29mZnNldCA9ICh1OCAqKSBwYWRkciAt ICh1OCAqKSAoYWxsb2NhdG9yLT5zaG1fYmFzZSAtCi0JCQkJCQkJICAgYWxsb2NhdG9yLT4KLQkJ CQkJCQkgICBkc3Bfc2l6ZSk7Ci0JCQlkd19hZGRyX3hsYXRlID0geGxhdG9yX29iai0+dmlydF9i YXNlICsgZHdfb2Zmc2V0OwotCQkJLyogQ2hlY2sgaWYgdHJhbnNsYXRlZCBWYSBiYXNlIGlzIGlu IHJhbmdlICovCi0JCQlpZiAoKGR3X2FkZHJfeGxhdGUgPCB4bGF0b3Jfb2JqLT52aXJ0X2Jhc2Up IHx8Ci0JCQkgICAgKGR3X2FkZHJfeGxhdGUgPj0KLQkJCSAgICAgKHhsYXRvcl9vYmotPnZpcnRf YmFzZSArCi0JCQkgICAgICB4bGF0b3Jfb2JqLT52aXJ0X3NpemUpKSkgewotCQkJCWR3X2FkZHJf eGxhdGUgPSAwOwkvKiBiYWQgYWRkcmVzcyAqLwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogR3Bw IFBBID0gIEdwcCBCYXNlICsgb2Zmc2V0ICovCi0JCQlkd19vZmZzZXQgPQotCQkJICAgICh1OCAq KSBwYWRkciAtICh1OCAqKSB4bGF0b3Jfb2JqLT52aXJ0X2Jhc2U7Ci0JCQlkd19hZGRyX3hsYXRl ID0KLQkJCSAgICBhbGxvY2F0b3ItPnNobV9iYXNlIC0gYWxsb2NhdG9yLT5kc3Bfc2l6ZSArCi0J CQkgICAgZHdfb2Zmc2V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJZHdfYWRkcl94bGF0ZSA9ICh1MzIp IHBhZGRyOwotCX0KLQkvKk5vdyBjb252ZXJ0IGFkZHJlc3MgdG8gcHJvcGVyIHRhcmdldCBwaHlz aWNhbCBhZGRyZXNzIGlmIG5lZWRlZCAqLwotCWlmICgoeHR5cGUgPT0gQ01NX1ZBMkRTUFBBKSB8 fCAoeHR5cGUgPT0gQ01NX1BBMkRTUFBBKSkgewotCQkvKiBHb3QgR3BwIFBhIG5vdywgY29udmVy dCB0byBEU1AgUGEgKi8KLQkJZHdfYWRkcl94bGF0ZSA9Ci0JCSAgICBHUFBQQTJEU1BQQSgoYWxs b2NhdG9yLT5zaG1fYmFzZSAtIGFsbG9jYXRvci0+ZHNwX3NpemUpLAotCQkJCWR3X2FkZHJfeGxh dGUsCi0JCQkJYWxsb2NhdG9yLT5kc3BfcGh5c19hZGRyX29mZnNldCAqCi0JCQkJYWxsb2NhdG9y LT5jX2ZhY3Rvcik7Ci0JfSBlbHNlIGlmICh4dHlwZSA9PSBDTU1fRFNQUEEyUEEpIHsKLQkJLyog R290IERTUCBQYSwgY29udmVydCB0byBHUFAgUGEgKi8KLQkJZHdfYWRkcl94bGF0ZSA9Ci0JCSAg ICBEU1BQQTJHUFBQQShhbGxvY2F0b3ItPnNobV9iYXNlIC0gYWxsb2NhdG9yLT5kc3Bfc2l6ZSwK LQkJCQlkd19hZGRyX3hsYXRlLAotCQkJCWFsbG9jYXRvci0+ZHNwX3BoeXNfYWRkcl9vZmZzZXQg KgotCQkJCWFsbG9jYXRvci0+Y19mYWN0b3IpOwotCX0KLWxvb3BfY29udDoKLQlyZXR1cm4gKHZv aWQgKilkd19hZGRyX3hsYXRlOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL3BtZ3IvY29kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2Qu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyOTM3OS4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2QuYworKysgL2Rldi9udWxsCkBAIC0x LDUzNyArMCwwIEBACi0vKgotICogY29kLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVy IHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogVGhpcyBt b2R1bGUgaW1wbGVtZW50cyBEU1AgY29kZSBtYW5hZ2VtZW50IGZvciB0aGUgRFNQL0JJT1MgQnJp ZGdlCi0gKiBlbnZpcm9ubWVudC4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyLgotICoKLSAq IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgbG9hZGluZyBib3RoIHN0YXRp YyBhbmQKLSAqIGR5bmFtaWMgY29kZSBvYmplY3RzIG9udG8gRFNQIHN5c3RlbXMuCi0gKgotICog Q29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBU aGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycg QU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F UkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8K LQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4K LSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwot I2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KLS8qIEluY2x1ZGUgYXBwcm9wcmlh dGUgbG9hZGVyIGhlYWRlciBmaWxlICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KLQot LyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRl IDxkc3BicmlkZ2UvY29kLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX21hbmFnZXIgPT09PT09 PT0KLSAqLwotc3RydWN0IGNvZF9tYW5hZ2VyIHsKLQlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJn ZXQ7Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmJhc2VfbGliOwotCWJvb2wgbG9hZGVkOwkJ LyogQmFzZSBsaWJyYXJ5IGxvYWRlZD8gKi8KLQl1MzIgZW50cnk7Ci0Jc3RydWN0IGRibGxfZnhu cyBmeG5zOwotCXN0cnVjdCBkYmxsX2F0dHJzIGF0dHJzOwotCWNoYXIgc3pfemxfZmlsZVtDT0Rf TUFYUEFUSExFTkdUSF07Ci19OwotCi0vKgotICogID09PT09PT09IGNvZF9saWJyYXJ5b2JqID09 PT09PT09Ci0gKi8KLXN0cnVjdCBjb2RfbGlicmFyeW9iaiB7Ci0Jc3RydWN0IGRibGxfbGlicmFy eV9vYmogKmRibGxfbGliOwotCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsKLX07Ci0KLXN0 YXRpYyBzdHJ1Y3QgZGJsbF9meG5zIGxkcl9meG5zID0gewotCShkYmxsX2Nsb3NlX2Z4bikgZGJs bF9jbG9zZSwKLQkoZGJsbF9jcmVhdGVfZnhuKSBkYmxsX2NyZWF0ZSwKLQkoZGJsbF9kZWxldGVf ZnhuKSBkYmxsX2RlbGV0ZSwKLQkoZGJsbF9leGl0X2Z4bikgZGJsbF9leGl0LAotCShkYmxsX2dl dF9hdHRyc19meG4pIGRibGxfZ2V0X2F0dHJzLAotCShkYmxsX2dldF9hZGRyX2Z4bikgZGJsbF9n ZXRfYWRkciwKLQkoZGJsbF9nZXRfY19hZGRyX2Z4bikgZGJsbF9nZXRfY19hZGRyLAotCShkYmxs X2dldF9zZWN0X2Z4bikgZGJsbF9nZXRfc2VjdCwKLQkoZGJsbF9pbml0X2Z4bikgZGJsbF9pbml0 LAotCShkYmxsX2xvYWRfZnhuKSBkYmxsX2xvYWQsCi0JKGRibGxfb3Blbl9meG4pIGRibGxfb3Bl biwKLQkoZGJsbF9yZWFkX3NlY3RfZnhuKSBkYmxsX3JlYWRfc2VjdCwKLQkoZGJsbF91bmxvYWRf ZnhuKSBkYmxsX3VubG9hZCwKLX07Ci0KLXN0YXRpYyBib29sIG5vX29wKHZvaWQpOwotCi0vKgot ICogRmlsZSBvcGVyYXRpb25zIChvcmlnaW5hbGx5IHdlcmUgdW5kZXIga2ZpbGUuYykKLSAqLwot c3RhdGljIHMzMiBjb2RfZl9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQkvKiBDaGVjayBm b3IgdmFsaWQgaGFuZGxlICovCi0JaWYgKCFmaWxwKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWZp bHBfY2xvc2UoZmlscCwgTlVMTCk7Ci0KLQkvKiB3ZSBjYW4ndCB1c2UgMCBoZXJlICovCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqY29kX2Zfb3Blbihjb25zdCBjaGFyICpw c3pfZmlsZV9uYW1lLCBjb25zdCBjaGFyICpzel9tb2RlKQotewotCW1tX3NlZ21lbnRfdCBmczsK LQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygp KTsKLQotCS8qIGlnbm9yZSBnaXZlbiBtb2RlIGFuZCBvcGVuIGZpbGUgYXMgcmVhZC1vbmx5ICov Ci0JZmlscCA9IGZpbHBfb3Blbihwc3pfZmlsZV9uYW1lLCBPX1JET05MWSwgMCk7Ci0KLQlpZiAo SVNfRVJSKGZpbHApKQotCQlmaWxwID0gTlVMTDsKLQotCXNldF9mcyhmcyk7Ci0KLQlyZXR1cm4g ZmlscDsKLX0KLQotc3RhdGljIHMzMiBjb2RfZl9yZWFkKHZvaWQgX191c2VyICpwYnVmZmVyLCBz MzIgc2l6ZSwgczMyIGNvdW50LAotCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQkvKiBj aGVjayBmb3IgdmFsaWQgZmlsZSBoYW5kbGUgKi8KLQlpZiAoIWZpbHApCi0JCXJldHVybiAtRUZB VUxUOwotCi0JaWYgKChzaXplID4gMCkgJiYgKGNvdW50ID4gMCkgJiYgcGJ1ZmZlcikgewotCQl1 MzIgZHdfYnl0ZXNfcmVhZDsKLQkJbW1fc2VnbWVudF90IGZzOwotCi0JCS8qIHJlYWQgZnJvbSBm aWxlICovCi0JCWZzID0gZ2V0X2ZzKCk7Ci0JCXNldF9mcyhnZXRfZHMoKSk7Ci0JCWR3X2J5dGVz X3JlYWQgPSBmaWxwLT5mX29wLT5yZWFkKGZpbHAsIHBidWZmZXIsIHNpemUgKiBjb3VudCwKLQkJ CQkJCSAmKGZpbHAtPmZfcG9zKSk7Ci0JCXNldF9mcyhmcyk7Ci0KLQkJaWYgKCFkd19ieXRlc19y ZWFkKQotCQkJcmV0dXJuIC1FQkFERjsKLQotCQlyZXR1cm4gZHdfYnl0ZXNfcmVhZCAvIHNpemU7 Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBzMzIgY29kX2Zfc2VlayhzdHJ1 Y3QgZmlsZSAqZmlscCwgczMyIG9mZnNldCwgczMyIG9yaWdpbikKLXsKLQlsb2ZmX3QgZHdfY3Vy X3BvczsKLQotCS8qIGNoZWNrIGZvciB2YWxpZCBmaWxlIGhhbmRsZSAqLwotCWlmICghZmlscCkK LQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBiYXNlZCBvbiB0aGUgb3JpZ2luIGZsYWcsIG1vdmUg dGhlIGludGVybmFsIHBvaW50ZXIgKi8KLQlkd19jdXJfcG9zID0gZmlscC0+Zl9vcC0+bGxzZWVr KGZpbHAsIG9mZnNldCwgb3JpZ2luKTsKLQotCWlmICgoczMyKSBkd19jdXJfcG9zIDwgMCkKLQkJ cmV0dXJuIC1FUEVSTTsKLQotCS8qIHdlIGNhbid0IHVzZSAwIGhlcmUgKi8KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIHMzMiBjb2RfZl90ZWxsKHN0cnVjdCBmaWxlICpmaWxwKQotewotCWxvZmZf dCBkd19jdXJfcG9zOwotCi0JaWYgKCFmaWxwKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIEdl dCBjdXJyZW50IHBvc2l0aW9uICovCi0JZHdfY3VyX3BvcyA9IGZpbHAtPmZfb3AtPmxsc2Vlayhm aWxwLCAwLCBTRUVLX0NVUik7Ci0KLQlpZiAoKHMzMikgZHdfY3VyX3BvcyA8IDApCi0JCXJldHVy biAtRVBFUk07Ci0KLQlyZXR1cm4gZHdfY3VyX3BvczsKLX0KLQotLyoKLSAqICA9PT09PT09PSBj b2RfY2xvc2UgPT09PT09PT0KLSAqLwotdm9pZCBjb2RfY2xvc2Uoc3RydWN0IGNvZF9saWJyYXJ5 b2JqICpsaWIpCi17Ci0Jc3RydWN0IGNvZF9tYW5hZ2VyICpobWdyOwotCi0JaG1nciA9IGxpYi0+ Y29kX21ncjsKLQlobWdyLT5meG5zLmNsb3NlX2Z4bihsaWItPmRibGxfbGliKTsKLQotCWtmcmVl KGxpYik7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX2NyZWF0ZSA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdG8gbWFuYWdlIGNvZGUgb24gYSBEU1Ag c3lzdGVtLgotICogICAgICBUaGlzIG9iamVjdCBjYW4gYmUgdXNlZCB0byBsb2FkIGFuIGluaXRp YWwgcHJvZ3JhbSBpbWFnZSB3aXRoCi0gKiAgICAgIGFyZ3VtZW50cyB0aGF0IGNhbiBsYXRlciBi ZSBleHBhbmRlZCB3aXRoCi0gKiAgICAgIGR5bmFtaWNhbGx5IGxvYWRlZCBvYmplY3QgZmlsZXMu Ci0gKgotICovCi1pbnQgY29kX2NyZWF0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKiptZ3IsIGNoYXIg KnN0cl96bF9maWxlKQotewotCXN0cnVjdCBjb2RfbWFuYWdlciAqbWdyX25ldzsKLQlzdHJ1Y3Qg ZGJsbF9hdHRycyB6bF9hdHRyczsKLQlpbnQgc3RhdHVzID0gMDsKLQotCS8qIGFzc3VtZSBmYWls dXJlICovCi0JKm1nciA9IE5VTEw7Ci0KLQltZ3JfbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IGNvZF9tYW5hZ2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1ncl9uZXcgPT0gTlVMTCkKLQkJcmV0 dXJuIC1FTk9NRU07Ci0KLQkvKiBTZXQgdXAgbG9hZGVyIGZ1bmN0aW9ucyAqLwotCW1ncl9uZXct PmZ4bnMgPSBsZHJfZnhuczsKLQotCS8qIGluaXRpYWxpemUgdGhlIFpMIG1vZHVsZSAqLwotCW1n cl9uZXctPmZ4bnMuaW5pdF9meG4oKTsKLQotCXpsX2F0dHJzLmFsbG9jID0gKGRibGxfYWxsb2Nf ZnhuKSBub19vcDsKLQl6bF9hdHRycy5mcmVlID0gKGRibGxfZnJlZV9meG4pIG5vX29wOwotCXps X2F0dHJzLmZyZWFkID0gKGRibGxfcmVhZF9meG4pIGNvZF9mX3JlYWQ7Ci0JemxfYXR0cnMuZnNl ZWsgPSAoZGJsbF9zZWVrX2Z4bikgY29kX2Zfc2VlazsKLQl6bF9hdHRycy5mdGVsbCA9IChkYmxs X3RlbGxfZnhuKSBjb2RfZl90ZWxsOwotCXpsX2F0dHJzLmZjbG9zZSA9IChkYmxsX2ZfY2xvc2Vf ZnhuKSBjb2RfZl9jbG9zZTsKLQl6bF9hdHRycy5mb3BlbiA9IChkYmxsX2Zfb3Blbl9meG4pIGNv ZF9mX29wZW47Ci0JemxfYXR0cnMuc3ltX2xvb2t1cCA9IE5VTEw7Ci0JemxfYXR0cnMuYmFzZV9p bWFnZSA9IHRydWU7Ci0JemxfYXR0cnMubG9nX3dyaXRlID0gTlVMTDsKLQl6bF9hdHRycy5sb2df d3JpdGVfaGFuZGxlID0gTlVMTDsKLQl6bF9hdHRycy53cml0ZSA9IE5VTEw7Ci0JemxfYXR0cnMu cm1tX2hhbmRsZSA9IE5VTEw7Ci0JemxfYXR0cnMuaW5wdXRfcGFyYW1zID0gTlVMTDsKLQl6bF9h dHRycy5zeW1faGFuZGxlID0gTlVMTDsKLQl6bF9hdHRycy5zeW1fYXJnID0gTlVMTDsKLQotCW1n cl9uZXctPmF0dHJzID0gemxfYXR0cnM7Ci0KLQlzdGF0dXMgPSBtZ3JfbmV3LT5meG5zLmNyZWF0 ZV9meG4oJm1ncl9uZXctPnRhcmdldCwgJnpsX2F0dHJzKTsKLQotCWlmIChzdGF0dXMpIHsKLQkJ Y29kX2RlbGV0ZShtZ3JfbmV3KTsKLQkJcmV0dXJuIC1FU1BJUEU7Ci0JfQotCi0JLyogcmV0dXJu IHRoZSBuZXcgbWFuYWdlciAqLwotCSptZ3IgPSBtZ3JfbmV3OwotCi0JcmV0dXJuIDA7Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gY29kX2RlbGV0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIERlbGV0ZSBhIGNvZGUgbWFuYWdlciBvYmplY3QuCi0gKi8KLXZvaWQgY29kX2RlbGV0ZShz dHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKQotewotCWlmIChjb2RfbWdyX29iai0+YmFz ZV9saWIpIHsKLQkJaWYgKGNvZF9tZ3Jfb2JqLT5sb2FkZWQpCi0JCQljb2RfbWdyX29iai0+Znhu cy51bmxvYWRfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwKLQkJCQkJCQkmY29kX21ncl9vYmot PmF0dHJzKTsKLQotCQljb2RfbWdyX29iai0+Znhucy5jbG9zZV9meG4oY29kX21ncl9vYmotPmJh c2VfbGliKTsKLQl9Ci0JaWYgKGNvZF9tZ3Jfb2JqLT50YXJnZXQpIHsKLQkJY29kX21ncl9vYmot PmZ4bnMuZGVsZXRlX2Z4bihjb2RfbWdyX29iai0+dGFyZ2V0KTsKLQkJY29kX21ncl9vYmotPmZ4 bnMuZXhpdF9meG4oKTsKLQl9Ci0Ja2ZyZWUoY29kX21ncl9vYmopOwotfQotCi0vKgotICogID09 PT09PT09IGNvZF9nZXRfYmFzZV9saWIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBH ZXQgaGFuZGxlIHRvIHRoZSBiYXNlIGltYWdlIERCTCBsaWJyYXJ5LgotICovCi1pbnQgY29kX2dl dF9iYXNlX2xpYihzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAotCQkJICAgIHN0cnVj dCBkYmxsX2xpYnJhcnlfb2JqICoqcGxpYikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQotCSpwbGli ID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopY29kX21ncl9vYmotPmJhc2VfbGliOwotCi0J cmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbmFtZSA9 PT09PT09PQotICovCi1pbnQgY29kX2dldF9iYXNlX25hbWUoc3RydWN0IGNvZF9tYW5hZ2VyICpj b2RfbWdyX29iaiwgY2hhciAqc3pfbmFtZSwKLQkJCSAgICAgdTMyIHVzaXplKQotewotCWludCBz dGF0dXMgPSAwOwotCi0JaWYgKHVzaXplIDw9IENPRF9NQVhQQVRITEVOR1RIKQotCQlzdHJsY3B5 KHN6X25hbWUsIGNvZF9tZ3Jfb2JqLT5zel96bF9maWxlLCB1c2l6ZSk7Ci0JZWxzZQotCQlzdGF0 dXMgPSAtRVBFUk07Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNv ZF9nZXRfZW50cnkgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUg ZW50cnkgcG9pbnQgb2YgYSBsb2FkZWQgRFNQIHByb2dyYW0gaW1hZ2UKLSAqCi0gKi8KLWludCBj b2RfZ2V0X2VudHJ5KHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosIHUzMiAqZW50cnlf cHQpCi17Ci0JKmVudHJ5X3B0ID0gY29kX21ncl9vYmotPmVudHJ5OwotCi0JcmV0dXJuIDA7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX2dldF9sb2FkZXIgPT09PT09PT0KLSAqICBQdXJwb3Nl OgotICogICAgICBHZXQgaGFuZGxlIHRvIHRoZSBEQkxMIGxvYWRlci4KLSAqLwotaW50IGNvZF9n ZXRfbG9hZGVyKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCi0JCQkgIHN0cnVjdCBk YmxsX3Rhcl9vYmogKipsb2FkZXIpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkqbG9hZGVyID0g KHN0cnVjdCBkYmxsX3Rhcl9vYmogKiljb2RfbWdyX29iai0+dGFyZ2V0OwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBjb2RfZ2V0X3NlY3Rpb24gPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgc3RhcnRpbmcgYWRkcmVzcyBhbmQgbGVu Z3RoIG9mIGEgc2VjdGlvbiBpbiB0aGUgQ09GRiBmaWxlCi0gKiAgICAgIGdpdmVuIHRoZSBzZWN0 aW9uIG5hbWUuCi0gKi8KLWludCBjb2RfZ2V0X3NlY3Rpb24oc3RydWN0IGNvZF9saWJyYXJ5b2Jq ICpsaWIsIGNoYXIgKnN0cl9zZWN0LAotCQkJICAgdTMyICphZGRyLCB1MzIgKmxlbikKLXsKLQlz dHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqOwotCWludCBzdGF0dXMgPSAwOwotCi0JKmFk ZHIgPSAwOwotCSpsZW4gPSAwOwotCWlmIChsaWIgIT0gTlVMTCkgewotCQljb2RfbWdyX29iaiA9 IGxpYi0+Y29kX21ncjsKLQkJc3RhdHVzID0gY29kX21ncl9vYmotPmZ4bnMuZ2V0X3NlY3RfZnhu KGxpYi0+ZGJsbF9saWIsIHN0cl9zZWN0LAotCQkJCQkJCWFkZHIsIGxlbik7Ci0JfSBlbHNlIHsK LQkJc3RhdHVzID0gLUVTUElQRTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IGNvZF9nZXRfc3ltX3ZhbHVlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICAgUmV0cmlldmUgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHN5bWJvbC4gVGhlIHN5bWJv bCBpcyBmaXJzdAotICogICAgICBzZWFyY2hlZCBmb3IgbGl0ZXJhbGx5IGFuZCB0aGVuLCBpZiBu b3QgZm91bmQsIHNlYXJjaGVkIGZvciBhcyBhCi0gKiAgICAgIEMgc3ltYm9sLgotICoKLSAqLwot aW50IGNvZF9nZXRfc3ltX3ZhbHVlKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosIGNo YXIgKnN0cl9zeW0sCi0JCQkgICAgIHUzMiAqcHVsX3ZhbHVlKQotewotCXN0cnVjdCBkYmxsX3N5 bV92YWwgKmRibGxfc3ltOwotCi0JZGV2X2RiZyhicmlkZ2UsICIlczogY29kX21ncl9vYmo6ICVw IHN0cl9zeW06ICVzIHB1bF92YWx1ZTogJXBcbiIsCi0JCV9fZnVuY19fLCBjb2RfbWdyX29iaiwg c3RyX3N5bSwgcHVsX3ZhbHVlKTsKLQlpZiAoY29kX21ncl9vYmotPmJhc2VfbGliKSB7Ci0JCWlm ICghY29kX21ncl9vYmotPmZ4bnMuCi0JCSAgICBnZXRfYWRkcl9meG4oY29kX21ncl9vYmotPmJh c2VfbGliLCBzdHJfc3ltLCAmZGJsbF9zeW0pKSB7Ci0JCQlpZiAoIWNvZF9tZ3Jfb2JqLT5meG5z LgotCQkJICAgIGdldF9jX2FkZHJfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwgc3RyX3N5bSwK LQkJCQkJCSZkYmxsX3N5bSkpCi0JCQkJcmV0dXJuIC1FU1BJUEU7Ci0JCX0KLQl9IGVsc2Ugewot CQlyZXR1cm4gLUVTUElQRTsKLQl9Ci0KLQkqcHVsX3ZhbHVlID0gZGJsbF9zeW0tPnZhbHVlOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gY29kX2xvYWRfYmFzZSA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIExvYWQgdGhlIGluaXRpYWwgcHJvZ3JhbSBpbWFnZSwg b3B0aW9uYWxseSB3aXRoIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsCi0gKiAgICAgIG9uIHRoZSBE U1Agc3lzdGVtIG1hbmFnZWQgYnkgdGhlIHN1cHBsaWVkIGhhbmRsZS4gVGhlIHByb2dyYW0gdG8g YmUKLSAqICAgICAgbG9hZGVkIG11c3QgYmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFyZ3Mg YXJyYXkgYW5kIG11c3QgYmUgYSBmdWxseQotICogICAgICBxdWFsaWZpZWQgcGF0aG5hbWUuCi0g KiAgRGV0YWlsczoKLSAqICAgICAgaWYgbnVtX2FyZ2MgZG9lc24ndCBtYXRjaCB0aGUgbnVtYmVy IG9mIGFyZ3VtZW50cyBpbiB0aGUgYXJncyBhcnJheSwgdGhlCi0gKiAgICAgIGFyZ3MgYXJyYXkg aXMgc2VhcmNoZWQgZm9yIGEgTlVMTCB0ZXJtaW5hdGluZyBlbnRyeSwgYW5kIGFyZ2MgaXMKLSAq ICAgICAgcmVjYWxjdWxhdGVkIHRvIHJlZmxlY3QgdGhpcy4gIEluIHRoaXMgd2F5LCB3ZSBjYW4g c3VwcG9ydCBOVUxMCi0gKiAgICAgIHRlcm1pbmF0aW5nIGFyZ3MgYXJyYXlzLCBpZiBudW1fYXJn YyBpcyB2ZXJ5IGxhcmdlLgotICovCi1pbnQgY29kX2xvYWRfYmFzZShzdHJ1Y3QgY29kX21hbmFn ZXIgKmNvZF9tZ3Jfb2JqLCB1MzIgbnVtX2FyZ2MsIGNoYXIgKmFyZ3NbXSwKLQkJCSBjb2Rfd3Jp dGVmeG4gcGZuX3dyaXRlLCB2b2lkICphcmIsIGNoYXIgKmVudnBbXSkKLXsKLQlkYmxsX2ZsYWdz IGZsYWdzOwotCXN0cnVjdCBkYmxsX2F0dHJzIHNhdmVfYXR0cnM7Ci0Jc3RydWN0IGRibGxfYXR0 cnMgbmV3X2F0dHJzOwotCWludCBzdGF0dXM7Ci0JdTMyIGk7Ci0KLQkvKgotCSAqICBNYWtlIHN1 cmUgZXZlcnkgYXJndltdIHN0YXRlZCBpbiBhcmdjIGhhcyBhIHZhbHVlLCBvciBjaGFuZ2UgYXJn YyB0bwotCSAqICByZWZsZWN0IHRydWUgbnVtYmVyIGluIE5VTEwgdGVybWluYXRlZCBhcmd2IGFy cmF5LgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fYXJnYzsgaSsrKSB7Ci0JCWlmIChhcmdz W2ldID09IE5VTEwpIHsKLQkJCW51bV9hcmdjID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0J Lyogc2V0IHRoZSB3cml0ZSBmdW5jdGlvbiBmb3IgdGhpcyBvcGVyYXRpb24gKi8KLQljb2RfbWdy X29iai0+Znhucy5nZXRfYXR0cnNfZnhuKGNvZF9tZ3Jfb2JqLT50YXJnZXQsICZzYXZlX2F0dHJz KTsKLQotCW5ld19hdHRycyA9IHNhdmVfYXR0cnM7Ci0JbmV3X2F0dHJzLndyaXRlID0gKGRibGxf d3JpdGVfZnhuKSBwZm5fd3JpdGU7Ci0JbmV3X2F0dHJzLmlucHV0X3BhcmFtcyA9IGFyYjsKLQlu ZXdfYXR0cnMuYWxsb2MgPSAoZGJsbF9hbGxvY19meG4pIG5vX29wOwotCW5ld19hdHRycy5mcmVl ID0gKGRibGxfZnJlZV9meG4pIG5vX29wOwotCW5ld19hdHRycy5sb2dfd3JpdGUgPSBOVUxMOwot CW5ld19hdHRycy5sb2dfd3JpdGVfaGFuZGxlID0gTlVMTDsKLQotCS8qIExvYWQgdGhlIGltYWdl ICovCi0JZmxhZ3MgPSBEQkxMX0NPREUgfCBEQkxMX0RBVEEgfCBEQkxMX1NZTUI7Ci0Jc3RhdHVz ID0gY29kX21ncl9vYmotPmZ4bnMubG9hZF9meG4oY29kX21ncl9vYmotPmJhc2VfbGliLCBmbGFn cywKLQkJCQkJICAgICZuZXdfYXR0cnMsCi0JCQkJCSAgICAmY29kX21ncl9vYmotPmVudHJ5KTsK LQlpZiAoc3RhdHVzKQotCQljb2RfbWdyX29iai0+Znhucy5jbG9zZV9meG4oY29kX21ncl9vYmot PmJhc2VfbGliKTsKLQotCWlmICghc3RhdHVzKQotCQljb2RfbWdyX29iai0+bG9hZGVkID0gdHJ1 ZTsKLQllbHNlCi0JCWNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiA9IE5VTEw7Ci0KLQlyZXR1cm4gc3Rh dHVzOwotfQotCi0vKgotICogID09PT09PT09IGNvZF9vcGVuID09PT09PT09Ci0gKiAgICAgIE9w ZW4gbGlicmFyeSBmb3IgcmVhZGluZyBzZWN0aW9ucy4KLSAqLwotaW50IGNvZF9vcGVuKHN0cnVj dCBjb2RfbWFuYWdlciAqaG1nciwgY2hhciAqc3pfY29mZl9wYXRoLAotCQkgICAgdTMyIGZsYWdz LCBzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKipsaWJfb2JqKQotewotCWludCBzdGF0dXMgPSAwOwot CXN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliID0gTlVMTDsKLQotCSpsaWJfb2JqID0gTlVMTDsK LQotCWxpYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb2RfbGlicmFyeW9iaiksIEdGUF9LRVJO RUwpOwotCWlmIChsaWIgPT0gTlVMTCkKLQkJc3RhdHVzID0gLUVOT01FTTsKLQotCWlmICghc3Rh dHVzKSB7Ci0JCWxpYi0+Y29kX21nciA9IGhtZ3I7Ci0JCXN0YXR1cyA9IGhtZ3ItPmZ4bnMub3Bl bl9meG4oaG1nci0+dGFyZ2V0LCBzel9jb2ZmX3BhdGgsIGZsYWdzLAotCQkJCQkgICAgICZsaWIt PmRibGxfbGliKTsKLQkJaWYgKCFzdGF0dXMpCi0JCQkqbGliX29iaiA9IGxpYjsKLQl9Ci0KLQlp ZiAoc3RhdHVzKQotCQlwcl9lcnIoIiVzOiBlcnJvciBzdGF0dXMgMHgleCwgc3pfY29mZl9wYXRo OiAlcyBmbGFnczogMHgleFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMsIHN6X2NvZmZf cGF0aCwgZmxhZ3MpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gY29k X29wZW5fYmFzZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIE9wZW4gYmFzZSBpbWFn ZSBmb3IgcmVhZGluZyBzZWN0aW9ucy4KLSAqLwotaW50IGNvZF9vcGVuX2Jhc2Uoc3RydWN0IGNv ZF9tYW5hZ2VyICpobWdyLCBjaGFyICpzel9jb2ZmX3BhdGgsCi0JCQkgZGJsbF9mbGFncyBmbGFn cykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwot Ci0JLyogaWYgd2UgcHJldmlvdXNseSBvcGVuZWQgYSBiYXNlIGltYWdlLCBjbG9zZSBpdCBub3cg Ki8KLQlpZiAoaG1nci0+YmFzZV9saWIpIHsKLQkJaWYgKGhtZ3ItPmxvYWRlZCkgewotCQkJaG1n ci0+Znhucy51bmxvYWRfZnhuKGhtZ3ItPmJhc2VfbGliLCAmaG1nci0+YXR0cnMpOwotCQkJaG1n ci0+bG9hZGVkID0gZmFsc2U7Ci0JCX0KLQkJaG1nci0+Znhucy5jbG9zZV9meG4oaG1nci0+YmFz ZV9saWIpOwotCQlobWdyLT5iYXNlX2xpYiA9IE5VTEw7Ci0JfQotCXN0YXR1cyA9IGhtZ3ItPmZ4 bnMub3Blbl9meG4oaG1nci0+dGFyZ2V0LCBzel9jb2ZmX3BhdGgsIGZsYWdzLCAmbGliKTsKLQlp ZiAoIXN0YXR1cykgewotCQkvKiBoYW5nIG9udG8gdGhlIGxpYnJhcnkgZm9yIHN1YnNlcXVlbnQg c3ltIHRhYmxlIHVzYWdlICovCi0JCWhtZ3ItPmJhc2VfbGliID0gbGliOwotCQlzdHJuY3B5KGht Z3ItPnN6X3psX2ZpbGUsIHN6X2NvZmZfcGF0aCwgQ09EX01BWFBBVEhMRU5HVEggLSAxKTsKLQkJ aG1nci0+c3pfemxfZmlsZVtDT0RfTUFYUEFUSExFTkdUSCAtIDFdID0gJ1wwJzsKLQl9Ci0KLQlp ZiAoc3RhdHVzKQotCQlwcl9lcnIoIiVzOiBlcnJvciBzdGF0dXMgMHgleCBzel9jb2ZmX3BhdGg6 ICVzXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHN0YXR1cywgc3pfY29mZl9wYXRoKTsKLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGNvZF9yZWFkX3NlY3Rpb24gPT09PT09 PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgY29udGVudCBvZiBhIGNvZGUg c2VjdGlvbiBnaXZlbiB0aGUgc2VjdGlvbiBuYW1lLgotICovCi1pbnQgY29kX3JlYWRfc2VjdGlv bihzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYiwgY2hhciAqc3RyX3NlY3QsCi0JCQkgICAgY2hh ciAqc3RyX2NvbnRlbnQsIHUzMiBjb250ZW50X3NpemUpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0K LQlpZiAobGliICE9IE5VTEwpCi0JCXN0YXR1cyA9Ci0JCSAgICBsaWItPmNvZF9tZ3ItPmZ4bnMu cmVhZF9zZWN0X2Z4bihsaWItPmRibGxfbGliLCBzdHJfc2VjdCwKLQkJCQkJCSAgICAgc3RyX2Nv bnRlbnQsIGNvbnRlbnRfc2l6ZSk7Ci0JZWxzZQotCQlzdGF0dXMgPSAtRVNQSVBFOwotCi0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBub19vcCA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIE5vIE9wZXJhdGlvbi4KLSAqCi0gKi8KLXN0YXRpYyBib29sIG5vX29w KHZvaWQpCi17Ci0JcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv dGlkc3BicmlkZ2UvcG1nci9kYmxsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1n ci9kYmxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjFkMWUuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGJsbC5jCisrKyAvZGV2L251 bGwKQEAgLTEsMTQyMSArMCwwIEBACi0vKgotICogZGJsbC5jCi0gKgotICogRFNQLUJJT1MgQnJp ZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoK LSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgot ICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMg SVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3Mu aD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJy aWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotI2luY2x1ZGUgPGRzcGJy aWRnZS9naC5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1Mg QWRhcHRhdGlvbiBMYXllciAqLwotCi0vKiBEeW5hbWljIGxvYWRlciBsaWJyYXJ5IGludGVyZmFj ZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oPgotI2luY2x1ZGUgPGRz cGJyaWRnZS9nZXRzZWN0aW9uLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KLSNpbmNsdWRlIDxk c3BicmlkZ2Uvcm1tLmg+Ci0KLS8qIE1heCBidWZmZXIgbGVuZ3RoICovCi0jZGVmaW5lIE1BWEVY UFIgMTI4Ci0KLSNkZWZpbmUgRE9GRl9BTElHTih4KSAoKCh4KSArIDMpICYgfjNVTCkKLQotLyoK LSAqICA9PT09PT09PSBzdHJ1Y3QgZGJsbF90YXJfb2JqKiA9PT09PT09PQotICogIEEgdGFyZ2V0 IG1heSBoYXZlIG9uZSBvciBtb3JlIGxpYnJhcmllcyBvZiBzeW1ib2xzL2NvZGUvZGF0YSBsb2Fk ZWQKLSAqICBvbnRvIGl0LCB3aGVyZSBhIGxpYnJhcnkgaXMgc2ltcGx5IHRoZSBzeW1ib2xzL2Nv ZGUvZGF0YSBjb250YWluZWQKLSAqICBpbiBhIERPRkYgZmlsZS4KLSAqLwotLyoKLSAqICA9PT09 PT09PSBkYmxsX3Rhcl9vYmogPT09PT09PT0KLSAqLwotc3RydWN0IGRibGxfdGFyX29iaiB7Ci0J c3RydWN0IGRibGxfYXR0cnMgYXR0cnM7Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmhlYWQ7 CS8qIExpc3Qgb2YgYWxsIG9wZW5lZCBsaWJyYXJpZXMgKi8KLX07Ci0KLS8qCi0gKiAgVGhlIGZv bGxvd2luZyA0IHR5cGVkZWZzIGFyZSAic3VwZXIgY2xhc3NlcyIgb2YgdGhlIGR5bmFtaWMgbG9h ZGVyCi0gKiAgbGlicmFyeSB0eXBlcyB1c2VkIGluIGR5bmFtaWMgbG9hZGVyIGZ1bmN0aW9ucyAo ZHluYW1pY19sb2FkZXIuaCkuCi0gKi8KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9zdHJlYW0gPT09 PT09PT0KLSAqICBDb250YWlucyBkeW5hbWljX2xvYWRlcl9zdHJlYW0KLSAqLwotc3RydWN0IGRi bGxfc3RyZWFtIHsKLQlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtIGRsX3N0cmVhbTsKLQlz dHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBsZHJf c3ltYm9sID09PT09PT09Ci0gKi8KLXN0cnVjdCBsZHJfc3ltYm9sIHsKLQlzdHJ1Y3QgZHluYW1p Y19sb2FkZXJfc3ltIGRsX3N5bWJvbDsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwot fTsKLQotLyoKLSAqICA9PT09PT09PSBkYmxsX2FsbG9jID09PT09PT09Ci0gKi8KLXN0cnVjdCBk YmxsX2FsbG9jIHsKLQlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgZGxfYWxsb2M7Ci0J c3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJs bF9pbml0X29iaiA9PT09PT09PQotICovCi1zdHJ1Y3QgZGJsbF9pbml0X29iaiB7Ci0Jc3RydWN0 IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgZGxfaW5pdDsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5 X29iaiAqbGliOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBEQkxMX0xpYnJhcnkgPT09PT09PT0K LSAqICBBIGxpYnJhcnkgaGFuZGxlIGlzIHJldHVybmVkIGJ5IERCTExfT3BlbigpIGFuZCBpcyBw YXNzZWQgdG8gZGJsbF9sb2FkKCkKLSAqICB0byBsb2FkIHN5bWJvbHMvY29kZS9kYXRhLCBhbmQg dG8gZGJsbF91bmxvYWQoKSwgdG8gcmVtb3ZlIHRoZQotICogIHN5bWJvbHMvY29kZS9kYXRhIGxv YWRlZCBieSBkYmxsX2xvYWQoKS4KLSAqLwotCi0vKgotICogID09PT09PT09IGRibGxfbGlicmFy eV9vYmogPT09PT09PT0KLSAqLwotc3RydWN0IGRibGxfbGlicmFyeV9vYmogewotCXN0cnVjdCBk YmxsX2xpYnJhcnlfb2JqICpuZXh0OwkvKiBOZXh0IGxpYnJhcnkgaW4gdGFyZ2V0J3MgbGlzdCAq LwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpwcmV2OwkvKiBQcmV2aW91cyBpbiB0aGUgbGlz dCAqLwotCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldF9vYmo7CS8qIHRhcmdldCBmb3IgdGhp cyBsaWJyYXJ5ICovCi0KLQkvKiBPYmplY3RzIG5lZWRlZCBieSBkeW5hbWljIGxvYWRlciAqLwot CXN0cnVjdCBkYmxsX3N0cmVhbSBzdHJlYW07Ci0Jc3RydWN0IGxkcl9zeW1ib2wgc3ltYm9sOwot CXN0cnVjdCBkYmxsX2FsbG9jIGFsbG9jYXRlOwotCXN0cnVjdCBkYmxsX2luaXRfb2JqIGluaXQ7 Ci0Jdm9pZCAqZGxvYWRfbW9kX29iajsKLQotCWNoYXIgKmZpbGVfbmFtZTsJLyogQ09GRiBmaWxl IG5hbWUgKi8KLQl2b2lkICpmcDsJCS8qIE9wYXF1ZSBmaWxlIGhhbmRsZSAqLwotCXUzMiBlbnRy eTsJCS8qIEVudHJ5IHBvaW50ICovCi0Jdm9pZCAqZGVzYzsJLyogZGVzYyBvZiBET0ZGIGZpbGUg bG9hZGVkICovCi0JdTMyIG9wZW5fcmVmOwkJLyogTnVtYmVyIG9mIHRpbWVzIG9wZW5lZCAqLwot CXUzMiBsb2FkX3JlZjsJCS8qIE51bWJlciBvZiB0aW1lcyBsb2FkZWQgKi8KLQlzdHJ1Y3QgZ2hf dF9oYXNoX3RhYiAqc3ltX3RhYjsJLyogSGFzaCB0YWJsZSBvZiBzeW1ib2xzICovCi0JdTMyIHBv czsKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9zeW1ib2wgPT09PT09PT0KLSAqLwotc3Ry dWN0IGRibGxfc3ltYm9sIHsKLQlzdHJ1Y3QgZGJsbF9zeW1fdmFsIHZhbHVlOwotCWNoYXIgKm5h bWU7Ci19OwotCi1zdGF0aWMgdm9pZCBkb2ZfY2xvc2Uoc3RydWN0IGRibGxfbGlicmFyeV9vYmog KnpsX2xpYik7Ci1zdGF0aWMgaW50IGRvZl9vcGVuKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6 bF9saWIpOwotc3RhdGljIHMzMiBub19vcChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6 ZSAqdGhpc3B0ciwgdm9pZCAqYnVmciwKLQkJIGxkcl9hZGRyIGxvY24sIHN0cnVjdCBsZHJfc2Vj dGlvbl9pbmZvICppbmZvLAotCQkgdW5zaWduZWQgYnl0c2l6ZSk7Ci0KLS8qCi0gKiAgRnVuY3Rp b25zIGNhbGxlZCBieSBkeW5hbWljIGxvYWRlcgotICoKLSAqLwotLyogZHluYW1pY19sb2FkZXJf c3RyZWFtICovCi1zdGF0aWMgaW50IGRibGxfcmVhZF9idWZmZXIoc3RydWN0IGR5bmFtaWNfbG9h ZGVyX3N0cmVhbSAqdGhpcywgdm9pZCAqYnVmZmVyLAotCQkJICAgIHVuc2lnbmVkIGJ1ZnNpemUp Owotc3RhdGljIGludCBkYmxsX3NldF9maWxlX3Bvc24oc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0 cmVhbSAqdGhpcywKLQkJCSAgICAgIHVuc2lnbmVkIGludCBwb3MpOwotLyogZHluYW1pY19sb2Fk ZXJfc3ltICovCi1zdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX2ZpbmRfc3ltYm9s KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsCi0JCQkJCSAgICAgICBjb25zdCBjaGFy ICpuYW1lKTsKLXN0YXRpYyBzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmRibGxfYWRkX3RvX3N5bWJv bF90YWJsZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltCi0JCQkJCQkgICAgICAgKnRoaXMsIGNv bnN0IGNoYXIgKm5hbWUsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbW9kdWxlX2lkKTsKLXN0YXRp YyBzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmZpbmRfaW5fc3ltYm9sX3RhYmxlKHN0cnVjdCBkeW5h bWljX2xvYWRlcl9zeW0KLQkJCQkJCSAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkJ ICAgdW5zaWduZWQgbW9kdWxlaWQpOwotc3RhdGljIHZvaWQgZGJsbF9wdXJnZV9zeW1ib2xfdGFi bGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywKLQkJCQkgICAgdW5zaWduZWQgbW9k dWxlX2lkKTsKLXN0YXRpYyB2b2lkICphbGxvY2F0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3lt ICp0aGlzLCB1bnNpZ25lZCBtZW1zaXplKTsKLXN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoc3RydWN0 IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgdm9pZCAqbWVtX3B0cik7Ci1zdGF0aWMgdm9pZCBk YmxsX2Vycl9yZXBvcnQoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgY29uc3QgY2hh ciAqZXJyc3RyLAotCQkJICAgIHZhX2xpc3QgYXJncyk7Ci0vKiBkeW5hbWljX2xvYWRlcl9hbGxv Y2F0ZSAqLwotc3RhdGljIGludCBkYmxsX3JtbV9hbGxvYyhzdHJ1Y3QgZHluYW1pY19sb2FkZXJf YWxsb2NhdGUgKnRoaXMsCi0JCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNp Z25lZCBhbGlnbik7Ci1zdGF0aWMgdm9pZCBybW1fZGVhbGxvYyhzdHJ1Y3QgZHluYW1pY19sb2Fk ZXJfYWxsb2NhdGUgKnRoaXMsCi0JCQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbyk7Ci0K LS8qIGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKi8KLXN0YXRpYyBpbnQgY29ubmVjdChzdHJ1 Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcyk7Ci1zdGF0aWMgaW50IHJlYWRfbWVt KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCB2b2lkICpidWYsCi0JCSAg ICBsZHJfYWRkciBhZGRyLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywKLQkJICAgIHVu c2lnbmVkIGJ5dGVzKTsKLXN0YXRpYyBpbnQgd3JpdGVfbWVtKHN0cnVjdCBkeW5hbWljX2xvYWRl cl9pbml0aWFsaXplICp0aGlzLCB2b2lkICpidWYsCi0JCSAgICAgbGRyX2FkZHIgYWRkciwgc3Ry dWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCi0JCSAgICAgdW5zaWduZWQgbmJ5dGVzKTsKLXN0 YXRpYyBpbnQgZmlsbF9tZW0oc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMs IGxkcl9hZGRyIGFkZHIsCi0JCSAgICBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5z aWduZWQgYnl0ZXMsCi0JCSAgICB1bnNpZ25lZCB2YWwpOwotc3RhdGljIGludCBleGVjdXRlKHN0 cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBzdGFydCk7Ci1z dGF0aWMgdm9pZCByZWxlYXNlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlz KTsKLQotLyogc3ltYm9sIHRhYmxlIGhhc2ggZnVuY3Rpb25zICovCi1zdGF0aWMgdTMyIG5hbWVf aGFzaChjb25zdCB2b2lkICprZXkpOwotc3RhdGljIGJvb2wgbmFtZV9tYXRjaChjb25zdCB2b2lk ICprZXksIGNvbnN0IHZvaWQgKnNwKTsKLXN0YXRpYyB2b2lkIHN5bV9kZWxldGUodm9pZCAqdmFs dWUpOwotCi0vKiBTeW1ib2wgUmVkZWZpbml0aW9uICovCi1zdGF0aWMgaW50IHJlZGVmaW5lZF9z eW1ib2w7Ci1zdGF0aWMgaW50IGdibF9zZWFyY2ggPSAxOwotCi0vKgotICogID09PT09PT09IGRi bGxfY2xvc2UgPT09PT09PT0KLSAqLwotdm9pZCBkYmxsX2Nsb3NlKHN0cnVjdCBkYmxsX2xpYnJh cnlfb2JqICp6bF9saWIpCi17Ci0Jc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0OwotCi0J emxfdGFyZ2V0ID0gemxfbGliLT50YXJnZXRfb2JqOwotCXpsX2xpYi0+b3Blbl9yZWYtLTsKLQlp ZiAoemxfbGliLT5vcGVuX3JlZiA9PSAwKSB7Ci0JCS8qIFJlbW92ZSBsaWJyYXJ5IGZyb20gbGlz dCAqLwotCQlpZiAoemxfdGFyZ2V0LT5oZWFkID09IHpsX2xpYikKLQkJCXpsX3RhcmdldC0+aGVh ZCA9IHpsX2xpYi0+bmV4dDsKLQotCQlpZiAoemxfbGliLT5wcmV2KQotCQkJKHpsX2xpYi0+cHJl diktPm5leHQgPSB6bF9saWItPm5leHQ7Ci0KLQkJaWYgKHpsX2xpYi0+bmV4dCkKLQkJCSh6bF9s aWItPm5leHQpLT5wcmV2ID0gemxfbGliLT5wcmV2OwotCi0JCS8qIEZyZWUgRE9GIHJlc291cmNl cyAqLwotCQlkb2ZfY2xvc2UoemxfbGliKTsKLQkJa2ZyZWUoemxfbGliLT5maWxlX25hbWUpOwot Ci0JCS8qIHJlbW92ZSBzeW1ib2xzIGZyb20gc3ltYm9sIHRhYmxlICovCi0JCWlmICh6bF9saWIt PnN5bV90YWIpCi0JCQlnaF9kZWxldGUoemxfbGliLT5zeW1fdGFiKTsKLQotCQkvKiByZW1vdmUg dGhlIGxpYnJhcnkgb2JqZWN0IGl0c2VsZiAqLwotCQlrZnJlZSh6bF9saWIpOwotCQl6bF9saWIg PSBOVUxMOwotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBkYmxsX2NyZWF0ZSA9PT09PT09PQot ICovCi1pbnQgZGJsbF9jcmVhdGUoc3RydWN0IGRibGxfdGFyX29iaiAqKnRhcmdldF9vYmosCi0J CSAgICAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKQotewotCXN0cnVjdCBkYmxsX3Rhcl9v YmogKnB6bF90YXJnZXQ7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBBbGxvY2F0ZSBEQkwgdGFy Z2V0IG9iamVjdCAqLwotCXB6bF90YXJnZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGJsbF90 YXJfb2JqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRhcmdldF9vYmogIT0gTlVMTCkgewotCQlpZiAo cHpsX3RhcmdldCA9PSBOVUxMKSB7Ci0JCQkqdGFyZ2V0X29iaiA9IE5VTEw7Ci0JCQlzdGF0dXMg PSAtRU5PTUVNOwotCQl9IGVsc2UgewotCQkJcHpsX3RhcmdldC0+YXR0cnMgPSAqcGF0dHJzOwot CQkJKnRhcmdldF9vYmogPSAoc3RydWN0IGRibGxfdGFyX29iaiAqKXB6bF90YXJnZXQ7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRibGxfZGVsZXRl ID09PT09PT09Ci0gKi8KLXZvaWQgZGJsbF9kZWxldGUoc3RydWN0IGRibGxfdGFyX29iaiAqdGFy Z2V0KQotewotCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnpsX3RhcmdldCA9IChzdHJ1Y3QgZGJsbF90 YXJfb2JqICopdGFyZ2V0OwotCi0Ja2ZyZWUoemxfdGFyZ2V0KTsKLQotfQotCi0vKgotICogID09 PT09PT09IGRibGxfZXhpdCA9PT09PT09PQotICogIERpc2NvbnRpbnVlIHVzYWdlIG9mIERCTCBt b2R1bGUuCi0gKi8KLXZvaWQgZGJsbF9leGl0KHZvaWQpCi17Ci0JLyogZG8gbm90aGluZyAqLwot fQotCi0vKgotICogID09PT09PT09IGRibGxfZ2V0X2FkZHIgPT09PT09PT0KLSAqICBHZXQgYWRk cmVzcyBvZiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KLSAqLwotYm9vbCBkYmxsX2dl dF9hZGRyKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKm5hbWUsCi0JCSAg IHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKQotewotCXN0cnVjdCBkYmxsX3N5bWJvbCAq c3ltOwotCi0Jc3ltID0gKHN0cnVjdCBkYmxsX3N5bWJvbCAqKWdoX2ZpbmQoemxfbGliLT5zeW1f dGFiLCBuYW1lKTsKLQlpZiAoSVNfRVJSKHN5bSkpCi0JCXJldHVybiBmYWxzZTsKLQotCSpzeW1f dmFsID0gJnN5bS0+dmFsdWU7Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBsaWI6ICVwIG5hbWU6 ICVzIHBhZGRyOiAlcFxuIiwKLQkJX19mdW5jX18sIHpsX2xpYiwgbmFtZSwgc3ltX3ZhbCk7Ci0J cmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9nZXRfYXR0cnMgPT09PT09 PT0KLSAqICBSZXRyaWV2ZSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgdGFyZ2V0LgotICovCi12b2lk IGRibGxfZ2V0X2F0dHJzKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgc3RydWN0IGRibGxf YXR0cnMgKnBhdHRycykKLXsKLQlzdHJ1Y3QgZGJsbF90YXJfb2JqICp6bF90YXJnZXQgPSAoc3Ry dWN0IGRibGxfdGFyX29iaiAqKXRhcmdldDsKLQotCWlmICgocGF0dHJzICE9IE5VTEwpICYmICh6 bF90YXJnZXQgIT0gTlVMTCkpCi0JCSpwYXR0cnMgPSB6bF90YXJnZXQtPmF0dHJzOwotCi19Ci0K LS8qCi0gKiAgPT09PT09PT0gZGJsbF9nZXRfY19hZGRyID09PT09PT09Ci0gKiAgR2V0IGFkZHJl c3Mgb2YgYSAiQyIgbmFtZSBpbiB0aGUgc3BlY2lmaWVkIGxpYnJhcnkuCi0gKi8KLWJvb2wgZGJs bF9nZXRfY19hZGRyKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKm5hbWUs Ci0JCSAgICAgc3RydWN0IGRibGxfc3ltX3ZhbCAqKnN5bV92YWwpCi17Ci0Jc3RydWN0IGRibGxf c3ltYm9sICpzeW07Ci0JY2hhciBjbmFtZVtNQVhFWFBSICsgMV07Ci0KLQljbmFtZVswXSA9ICdf JzsKLQotCXN0cm5jcHkoY25hbWUgKyAxLCBuYW1lLCBzaXplb2YoY25hbWUpIC0gMik7Ci0JY25h bWVbTUFYRVhQUl0gPSAnXDAnOwkvKiBpbnN1cmUgJ1wwJyBzdHJpbmcgdGVybWluYXRpb24gKi8K LQotCS8qIENoZWNrIGZvciBDIG5hbWUsIGlmIG5vdCBmb3VuZCAqLwotCXN5bSA9IChzdHJ1Y3Qg ZGJsbF9zeW1ib2wgKilnaF9maW5kKHpsX2xpYi0+c3ltX3RhYiwgY25hbWUpOwotCWlmIChJU19F UlIoc3ltKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JKnN5bV92YWwgPSAmc3ltLT52YWx1ZTsKLQot CXJldHVybiB0cnVlOwotfQotCi0vKgotICogID09PT09PT09IGRibGxfZ2V0X3NlY3QgPT09PT09 PT0KLSAqICBHZXQgdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgQ09G RiBzZWN0aW9uLgotICovCi1pbnQgZGJsbF9nZXRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29i aiAqbGliLCBjaGFyICpuYW1lLCB1MzIgKnBhZGRyLAotCQkJIHUzMiAqcHNpemUpCi17Ci0JdTMy IGJ5dGVfc2l6ZTsKLQlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7Ci0JY29uc3Qgc3RydWN0IGxk cl9zZWN0aW9uX2luZm8gKnNlY3QgPSBOVUxMOwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6 bF9saWIgPSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKilsaWI7Ci0JaW50IHN0YXR1cyA9IDA7 Ci0KLQkvKiBJZiBET0ZGIGZpbGUgaXMgbm90IG9wZW4sIHdlIG9wZW4gaXQuICovCi0JaWYgKHps X2xpYiAhPSBOVUxMKSB7Ci0JCWlmICh6bF9saWItPmZwID09IE5VTEwpIHsKLQkJCXN0YXR1cyA9 IGRvZl9vcGVuKHpsX2xpYik7Ci0JCQlpZiAoIXN0YXR1cykKLQkJCQlvcGVuZWRfZG9mZiA9IHRy dWU7Ci0KLQkJfSBlbHNlIHsKLQkJCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnNlZWsp KSAoemxfbGliLT5mcCwKLQkJCQkJCQkgICAgICB6bF9saWItPnBvcywKLQkJCQkJCQkgICAgICBT RUVLX1NFVCk7Ci0JCX0KLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQlpZiAo IXN0YXR1cykgewotCQlieXRlX3NpemUgPSAxOwotCQlpZiAoZGxvYWRfZ2V0X3NlY3Rpb25faW5m byh6bF9saWItPmRlc2MsIG5hbWUsICZzZWN0KSkgewotCQkJKnBhZGRyID0gc2VjdC0+bG9hZF9h ZGRyOwotCQkJKnBzaXplID0gc2VjdC0+c2l6ZSAqIGJ5dGVfc2l6ZTsKLQkJCS8qIE1ha2Ugc3Vy ZSBzaXplIGlzIGV2ZW4gZm9yIGdvb2Qgc3dhcCAqLwotCQkJaWYgKCpwc2l6ZSAlIDIpCi0JCQkJ KCpwc2l6ZSkrKzsKLQotCQkJLyogQWxpZ24gc2l6ZSAqLwotCQkJKnBzaXplID0gRE9GRl9BTElH TigqcHNpemUpOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVOWElPOwotCQl9Ci0JfQotCWlm IChvcGVuZWRfZG9mZikgewotCQlkb2ZfY2xvc2UoemxfbGliKTsKLQkJb3BlbmVkX2RvZmYgPSBm YWxzZTsKLQl9Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBsaWI6ICVwIG5hbWU6ICVzIHBhZGRy OiAlcCBwc2l6ZTogJXAsIHN0YXR1cyAweCV4XG4iLAotCQkJX19mdW5jX18sIGxpYiwgbmFtZSwg cGFkZHIsIHBzaXplLCBzdGF0dXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBkYmxsX2luaXQgPT09PT09PT0KLSAqLwotYm9vbCBkYmxsX2luaXQodm9pZCkKLXsK LQkvKiBkbyBub3RoaW5nICovCi0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqICA9PT09PT09 PSBkYmxsX2xvYWQgPT09PT09PT0KLSAqLwotaW50IGRibGxfbG9hZChzdHJ1Y3QgZGJsbF9saWJy YXJ5X29iaiAqbGliLCBkYmxsX2ZsYWdzIGZsYWdzLAotCQkgICAgIHN0cnVjdCBkYmxsX2F0dHJz ICphdHRycywgdTMyICplbnRyeSkKLXsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGli ID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopbGliOwotCXN0cnVjdCBkYmxsX3Rhcl9vYmog KmRiemw7Ci0JYm9vbCBnb3Rfc3ltYm9scyA9IHRydWU7Ci0JczMyIGVycjsKLQlpbnQgc3RhdHVz ID0gMDsKLQlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7Ci0KLQkvKgotCSAqICBMb2FkIGlmIG5v dCBhbHJlYWR5IGxvYWRlZC4KLQkgKi8KLQlpZiAoemxfbGliLT5sb2FkX3JlZiA9PSAwIHx8ICEo ZmxhZ3MgJiBEQkxMX0RZTkFNSUMpKSB7Ci0JCWRiemwgPSB6bF9saWItPnRhcmdldF9vYmo7Ci0J CWRiemwtPmF0dHJzID0gKmF0dHJzOwotCQkvKiBDcmVhdGUgYSBoYXNoIHRhYmxlIGZvciBzeW1i b2xzIGlmIG5vdCBhbHJlYWR5IGNyZWF0ZWQgKi8KLQkJaWYgKHpsX2xpYi0+c3ltX3RhYiA9PSBO VUxMKSB7Ci0JCQlnb3Rfc3ltYm9scyA9IGZhbHNlOwotCQkJemxfbGliLT5zeW1fdGFiID0gZ2hf Y3JlYXRlKHNpemVvZihzdHJ1Y3QgZGJsbF9zeW1ib2wpLAotCQkJCQkJICAgIG5hbWVfaGFzaCwK LQkJCQkJCSAgICBuYW1lX21hdGNoLCBzeW1fZGVsZXRlKTsKLQkJCWlmIChJU19FUlIoemxfbGli LT5zeW1fdGFiKSkgewotCQkJCXN0YXR1cyA9IFBUUl9FUlIoemxfbGliLT5zeW1fdGFiKTsKLQkJ CQl6bF9saWItPnN5bV90YWIgPSBOVUxMOwotCQkJfQotCi0JCX0KLQkJLyoKLQkJICogIFNldCB1 cCBvYmplY3RzIG5lZWRlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKLQkJICovCi0JCS8qIFN0cmVh bSAqLwotCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0ucmVhZF9idWZmZXIgPSBkYmxsX3JlYWRf YnVmZmVyOwotCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0uc2V0X2ZpbGVfcG9zbiA9IGRibGxf c2V0X2ZpbGVfcG9zbjsKLQkJemxfbGliLT5zdHJlYW0ubGliID0gemxfbGliOwotCQkvKiBTeW1i b2wgKi8KLQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmZpbmRfbWF0Y2hpbmdfc3ltYm9sID0K LQkJICAgIGRibGxfZmluZF9zeW1ib2w7Ci0JCWlmIChnb3Rfc3ltYm9scykgewotCQkJemxfbGli LT5zeW1ib2wuZGxfc3ltYm9sLmFkZF90b19zeW1ib2xfdGFibGUgPQotCQkJICAgIGZpbmRfaW5f c3ltYm9sX3RhYmxlOwotCQl9IGVsc2UgewotCQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmFk ZF90b19zeW1ib2xfdGFibGUgPQotCQkJICAgIGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZTsKLQkJ fQotCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wucHVyZ2Vfc3ltYm9sX3RhYmxlID0KLQkJICAg IGRibGxfcHVyZ2Vfc3ltYm9sX3RhYmxlOwotCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxv YWRfYWxsb2NhdGUgPSBhbGxvY2F0ZTsKLQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmRsb2Fk X2RlYWxsb2NhdGUgPSBkZWFsbG9jYXRlOwotCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZXJy b3JfcmVwb3J0ID0gZGJsbF9lcnJfcmVwb3J0OwotCQl6bF9saWItPnN5bWJvbC5saWIgPSB6bF9s aWI7Ci0JCS8qIEFsbG9jYXRlICovCi0JCXpsX2xpYi0+YWxsb2NhdGUuZGxfYWxsb2MuZGxvYWRf YWxsb2NhdGUgPSBkYmxsX3JtbV9hbGxvYzsKLQkJemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5k bG9hZF9kZWFsbG9jYXRlID0gcm1tX2RlYWxsb2M7Ci0JCXpsX2xpYi0+YWxsb2NhdGUubGliID0g emxfbGliOwotCQkvKiBJbml0ICovCi0JCXpsX2xpYi0+aW5pdC5kbF9pbml0LmNvbm5lY3QgPSBj b25uZWN0OwotCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWFkbWVtID0gcmVhZF9tZW07Ci0JCXps X2xpYi0+aW5pdC5kbF9pbml0LndyaXRlbWVtID0gd3JpdGVfbWVtOwotCQl6bF9saWItPmluaXQu ZGxfaW5pdC5maWxsbWVtID0gZmlsbF9tZW07Ci0JCXpsX2xpYi0+aW5pdC5kbF9pbml0LmV4ZWN1 dGUgPSBleGVjdXRlOwotCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWxlYXNlID0gcmVsZWFzZTsK LQkJemxfbGliLT5pbml0LmxpYiA9IHpsX2xpYjsKLQkJLyogSWYgQ09GRiBmaWxlIGlzIG5vdCBv cGVuLCB3ZSBvcGVuIGl0LiAqLwotCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7Ci0JCQlzdGF0 dXMgPSBkb2Zfb3Blbih6bF9saWIpOwotCQkJaWYgKCFzdGF0dXMpCi0JCQkJb3BlbmVkX2RvZmYg PSB0cnVlOwotCi0JCX0KLQkJaWYgKCFzdGF0dXMpIHsKLQkJCXpsX2xpYi0+cG9zID0gKCooemxf bGliLT50YXJnZXRfb2JqLT5hdHRycy5mdGVsbCkpCi0JCQkgICAgKHpsX2xpYi0+ZnApOwotCQkJ LyogUmVzZXQgZmlsZSBjdXJzb3IgKi8KLQkJCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMu ZnNlZWspKSAoemxfbGliLT5mcCwKLQkJCQkJCQkgICAgICAobG9uZykwLAotCQkJCQkJCSAgICAg IFNFRUtfU0VUKTsKLQkJCXN5bWJvbHNfcmVsb2FkZWQgPSB0cnVlOwotCQkJLyogVGhlIDV0aCBh cmd1bWVudCwgRExPQURfSU5JVEJTUywgdGVsbHMgdGhlIERMTAotCQkJICogbW9kdWxlIHRvIHpl cm8taW5pdCBhbGwgQlNTIHNlY3Rpb25zLiAgSW4gZ2VuZXJhbCwKLQkJCSAqIHRoaXMgaXMgbm90 IG5lY2Vzc2FyeSBhbmQgYWxzbyBpbmNyZWFzZXMgbG9hZCB0aW1lLgotCQkJICogV2UgbWF5IHdh bnQgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBieSB0aGUgdXNlciAqLwotCQkJZXJyID0gZHlu YW1pY19sb2FkX21vZHVsZSgmemxfbGliLT5zdHJlYW0uZGxfc3RyZWFtLAotCQkJCQkJICAmemxf bGliLT5zeW1ib2wuZGxfc3ltYm9sLAotCQkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxv YywKLQkJCQkJCSAgJnpsX2xpYi0+aW5pdC5kbF9pbml0LAotCQkJCQkJICBETE9BRF9JTklUQlNT LAotCQkJCQkJICAmemxfbGliLT5kbG9hZF9tb2Rfb2JqKTsKLQotCQkJaWYgKGVyciAhPSAwKSB7 Ci0JCQkJc3RhdHVzID0gLUVJTFNFUTsKLQkJCX0gZWxzZSBpZiAocmVkZWZpbmVkX3N5bWJvbCkg ewotCQkJCXpsX2xpYi0+bG9hZF9yZWYrKzsKLQkJCQlkYmxsX3VubG9hZCh6bF9saWIsIChzdHJ1 Y3QgZGJsbF9hdHRycyAqKWF0dHJzKTsKLQkJCQlyZWRlZmluZWRfc3ltYm9sID0gZmFsc2U7Ci0J CQkJc3RhdHVzID0gLUVJTFNFUTsKLQkJCX0gZWxzZSB7Ci0JCQkJKmVudHJ5ID0gemxfbGliLT5l bnRyeTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIXN0YXR1cykKLQkJemxfbGliLT5sb2FkX3JlZisr OwotCi0JLyogQ2xlYW4gdXAgRE9GRiByZXNvdXJjZXMgKi8KLQlpZiAob3BlbmVkX2RvZmYpCi0J CWRvZl9jbG9zZSh6bF9saWIpOwotCi0JZGV2X2RiZyhicmlkZ2UsICIlczogbGliOiAlcCBmbGFn czogMHgleCBlbnRyeTogJXAsIHN0YXR1cyAweCV4XG4iLAotCQlfX2Z1bmNfXywgbGliLCBmbGFn cywgZW50cnksIHN0YXR1cyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09 PT09IGRibGxfb3BlbiA9PT09PT09PQotICovCi1pbnQgZGJsbF9vcGVuKHN0cnVjdCBkYmxsX3Rh cl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwgZGJsbF9mbGFncyBmbGFncywKLQkJICAgICBzdHJ1 Y3QgZGJsbF9saWJyYXJ5X29iaiAqKmxpYl9vYmopCi17Ci0Jc3RydWN0IGRibGxfdGFyX29iaiAq emxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7Ci0Jc3RydWN0IGRibGxf bGlicmFyeV9vYmogKnpsX2xpYiA9IE5VTEw7Ci0JczMyIGVycjsKLQlpbnQgc3RhdHVzID0gMDsK LQotCXpsX2xpYiA9IHpsX3RhcmdldC0+aGVhZDsKLQl3aGlsZSAoemxfbGliICE9IE5VTEwpIHsK LQkJaWYgKHN0cmNtcCh6bF9saWItPmZpbGVfbmFtZSwgZmlsZSkgPT0gMCkgewotCQkJLyogTGli cmFyeSBpcyBhbHJlYWR5IG9wZW5lZCAqLwotCQkJemxfbGliLT5vcGVuX3JlZisrOwotCQkJYnJl YWs7Ci0JCX0KLQkJemxfbGliID0gemxfbGliLT5uZXh0OwotCX0KLQlpZiAoemxfbGliID09IE5V TEwpIHsKLQkJLyogQWxsb2NhdGUgREJMIGxpYnJhcnkgb2JqZWN0ICovCi0JCXpsX2xpYiA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqKSwgR0ZQX0tFUk5FTCk7Ci0JCWlm ICh6bF9saWIgPT0gTlVMTCkgewotCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJfSBlbHNlIHsKLQkJ CXpsX2xpYi0+cG9zID0gMDsKLQkJCS8qIEluY3JlbWVudCByZWYgY291bnQgdG8gYWxsb3cgY2xv c2Ugb24gZmFpbHVyZQotCQkJICogbGF0ZXIgb24gKi8KLQkJCXpsX2xpYi0+b3Blbl9yZWYrKzsK LQkJCXpsX2xpYi0+dGFyZ2V0X29iaiA9IHpsX3RhcmdldDsKLQkJCS8qIEtlZXAgYSBjb3B5IG9m IHRoZSBmaWxlIG5hbWUgKi8KLQkJCXpsX2xpYi0+ZmlsZV9uYW1lID0ga3phbGxvYyhzdHJsZW4o ZmlsZSkgKyAxLAotCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKHpsX2xpYi0+ZmlsZV9uYW1l ID09IE5VTEwpIHsKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJu Y3B5KHpsX2xpYi0+ZmlsZV9uYW1lLCBmaWxlLAotCQkJCQlzdHJsZW4oZmlsZSkgKyAxKTsKLQkJ CX0KLQkJCXpsX2xpYi0+c3ltX3RhYiA9IE5VTEw7Ci0JCX0KLQl9Ci0JLyoKLQkgKiAgU2V0IHVw IG9iamVjdHMgbmVlZGVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlcgotCSAqLwotCWlmIChzdGF0dXMp Ci0JCWdvdG8gZnVuY19jb250OwotCi0JLyogU3RyZWFtICovCi0JemxfbGliLT5zdHJlYW0uZGxf c3RyZWFtLnJlYWRfYnVmZmVyID0gZGJsbF9yZWFkX2J1ZmZlcjsKLQl6bF9saWItPnN0cmVhbS5k bF9zdHJlYW0uc2V0X2ZpbGVfcG9zbiA9IGRibGxfc2V0X2ZpbGVfcG9zbjsKLQl6bF9saWItPnN0 cmVhbS5saWIgPSB6bF9saWI7Ci0JLyogU3ltYm9sICovCi0JemxfbGliLT5zeW1ib2wuZGxfc3lt Ym9sLmFkZF90b19zeW1ib2xfdGFibGUgPSBkYmxsX2FkZF90b19zeW1ib2xfdGFibGU7Ci0Jemxf bGliLT5zeW1ib2wuZGxfc3ltYm9sLmZpbmRfbWF0Y2hpbmdfc3ltYm9sID0gZGJsbF9maW5kX3N5 bWJvbDsKLQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wucHVyZ2Vfc3ltYm9sX3RhYmxlID0gZGJs bF9wdXJnZV9zeW1ib2xfdGFibGU7Ci0JemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmRsb2FkX2Fs bG9jYXRlID0gYWxsb2NhdGU7Ci0JemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmRsb2FkX2RlYWxs b2NhdGUgPSBkZWFsbG9jYXRlOwotCXpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbC5lcnJvcl9yZXBv cnQgPSBkYmxsX2Vycl9yZXBvcnQ7Ci0JemxfbGliLT5zeW1ib2wubGliID0gemxfbGliOwotCS8q IEFsbG9jYXRlICovCi0JemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5kbG9hZF9hbGxvY2F0ZSA9 IGRibGxfcm1tX2FsbG9jOwotCXpsX2xpYi0+YWxsb2NhdGUuZGxfYWxsb2MuZGxvYWRfZGVhbGxv Y2F0ZSA9IHJtbV9kZWFsbG9jOwotCXpsX2xpYi0+YWxsb2NhdGUubGliID0gemxfbGliOwotCS8q IEluaXQgKi8KLQl6bF9saWItPmluaXQuZGxfaW5pdC5jb25uZWN0ID0gY29ubmVjdDsKLQl6bF9s aWItPmluaXQuZGxfaW5pdC5yZWFkbWVtID0gcmVhZF9tZW07Ci0JemxfbGliLT5pbml0LmRsX2lu aXQud3JpdGVtZW0gPSB3cml0ZV9tZW07Ci0JemxfbGliLT5pbml0LmRsX2luaXQuZmlsbG1lbSA9 IGZpbGxfbWVtOwotCXpsX2xpYi0+aW5pdC5kbF9pbml0LmV4ZWN1dGUgPSBleGVjdXRlOwotCXps X2xpYi0+aW5pdC5kbF9pbml0LnJlbGVhc2UgPSByZWxlYXNlOwotCXpsX2xpYi0+aW5pdC5saWIg PSB6bF9saWI7Ci0JaWYgKCFzdGF0dXMgJiYgemxfbGliLT5mcCA9PSBOVUxMKQotCQlzdGF0dXMg PSBkb2Zfb3Blbih6bF9saWIpOwotCi0JemxfbGliLT5wb3MgPSAoKih6bF9saWItPnRhcmdldF9v YmotPmF0dHJzLmZ0ZWxsKSkgKHpsX2xpYi0+ZnApOwotCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+ YXR0cnMuZnNlZWspKSAoemxfbGliLT5mcCwgKGxvbmcpMCwgU0VFS19TRVQpOwotCS8qIENyZWF0 ZSBhIGhhc2ggdGFibGUgZm9yIHN5bWJvbHMgaWYgZmxhZyBpcyBzZXQgKi8KLQlpZiAoemxfbGli LT5zeW1fdGFiICE9IE5VTEwgfHwgIShmbGFncyAmIERCTExfU1lNQikpCi0JCWdvdG8gZnVuY19j b250OwotCi0JemxfbGliLT5zeW1fdGFiID0KLQkgICAgZ2hfY3JlYXRlKHNpemVvZihzdHJ1Y3Qg ZGJsbF9zeW1ib2wpLCBuYW1lX2hhc2gsIG5hbWVfbWF0Y2gsCi0JCSAgICAgIHN5bV9kZWxldGUp OwotCWlmIChJU19FUlIoemxfbGliLT5zeW1fdGFiKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKHps X2xpYi0+c3ltX3RhYik7Ci0JCXpsX2xpYi0+c3ltX3RhYiA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJ LyogRG8gYSBmYWtlIGxvYWQgdG8gZ2V0IHN5bWJvbHMgLSBzZXQgd3JpdGUgZnVuYyB0byBub19v cCAqLwotCQl6bF9saWItPmluaXQuZGxfaW5pdC53cml0ZW1lbSA9IG5vX29wOwotCQllcnIgPSBk eW5hbWljX29wZW5fbW9kdWxlKCZ6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0sCi0JCQkJCSAgJnps X2xpYi0+c3ltYm9sLmRsX3N5bWJvbCwKLQkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxv YywKLQkJCQkJICAmemxfbGliLT5pbml0LmRsX2luaXQsIDAsCi0JCQkJCSAgJnpsX2xpYi0+ZGxv YWRfbW9kX29iaik7Ci0JCWlmIChlcnIgIT0gMCkgewotCQkJc3RhdHVzID0gLUVJTFNFUTsKLQkJ fSBlbHNlIHsKLQkJCS8qIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHN5bWJvbCB0YWJsZSwgd2UgY2Fu IHVubG9hZCAqLwotCQkJZXJyID0gZHluYW1pY191bmxvYWRfbW9kdWxlKHpsX2xpYi0+ZGxvYWRf bW9kX29iaiwKLQkJCQkJCSAgICAmemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAotCQkJCQkJICAg ICZ6bF9saWItPmFsbG9jYXRlLmRsX2FsbG9jLAotCQkJCQkJICAgICZ6bF9saWItPmluaXQuZGxf aW5pdCk7Ci0JCQlpZiAoZXJyICE9IDApCi0JCQkJc3RhdHVzID0gLUVJTFNFUTsKLQotCQkJemxf bGliLT5kbG9hZF9tb2Rfb2JqID0gTlVMTDsKLQkJfQotCX0KLWZ1bmNfY29udDoKLQlpZiAoIXN0 YXR1cykgewotCQlpZiAoemxfbGliLT5vcGVuX3JlZiA9PSAxKSB7Ci0JCQkvKiBGaXJzdCB0aW1l IG9wZW5lZCAtIGluc2VydCBpbiBsaXN0ICovCi0JCQlpZiAoemxfdGFyZ2V0LT5oZWFkKQotCQkJ CSh6bF90YXJnZXQtPmhlYWQpLT5wcmV2ID0gemxfbGliOwotCi0JCQl6bF9saWItPnByZXYgPSBO VUxMOwotCQkJemxfbGliLT5uZXh0ID0gemxfdGFyZ2V0LT5oZWFkOwotCQkJemxfdGFyZ2V0LT5o ZWFkID0gemxfbGliOwotCQl9Ci0JCSpsaWJfb2JqID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2Jq ICopemxfbGliOwotCX0gZWxzZSB7Ci0JCSpsaWJfb2JqID0gTlVMTDsKLQkJaWYgKHpsX2xpYiAh PSBOVUxMKQotCQkJZGJsbF9jbG9zZSgoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKil6bF9saWIp OwotCi0JfQotCi0JZGV2X2RiZyhicmlkZ2UsICIlczogdGFyZ2V0OiAlcCBmaWxlOiAlcyBsaWJf b2JqOiAlcCwgc3RhdHVzIDB4JXhcbiIsCi0JCV9fZnVuY19fLCB0YXJnZXQsIGZpbGUsIGxpYl9v YmosIHN0YXR1cyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRi bGxfcmVhZF9zZWN0ID09PT09PT09Ci0gKiAgR2V0IHRoZSBjb250ZW50IG9mIGEgQ09GRiBzZWN0 aW9uLgotICovCi1pbnQgZGJsbF9yZWFkX3NlY3Qoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxp YiwgY2hhciAqbmFtZSwKLQkJCSAgY2hhciAqYnVmLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZGJs bF9saWJyYXJ5X29iaiAqemxfbGliID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopbGliOwot CWJvb2wgb3BlbmVkX2RvZmYgPSBmYWxzZTsKLQl1MzIgYnl0ZV9zaXplOwkJLyogc2l6ZSBvZiBi eXRlcyAqLwotCXUzMiB1bF9zZWN0X3NpemU7CS8qIHNpemUgb2Ygc2VjdGlvbiAqLwotCWNvbnN0 IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICpzZWN0ID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsK LQotCS8qIElmIERPRkYgZmlsZSBpcyBub3Qgb3Blbiwgd2Ugb3BlbiBpdC4gKi8KLQlpZiAoemxf bGliICE9IE5VTEwpIHsKLQkJaWYgKHpsX2xpYi0+ZnAgPT0gTlVMTCkgewotCQkJc3RhdHVzID0g ZG9mX29wZW4oemxfbGliKTsKLQkJCWlmICghc3RhdHVzKQotCQkJCW9wZW5lZF9kb2ZmID0gdHJ1 ZTsKLQotCQl9IGVsc2UgewotCQkJKCooemxfbGliLT50YXJnZXRfb2JqLT5hdHRycy5mc2Vlaykp ICh6bF9saWItPmZwLAotCQkJCQkJCSAgICAgIHpsX2xpYi0+cG9zLAotCQkJCQkJCSAgICAgIFNF RUtfU0VUKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCWlmIChz dGF0dXMpCi0JCWdvdG8gZnVuY19jb250OwotCi0JYnl0ZV9zaXplID0gMTsKLQlpZiAoIWRsb2Fk X2dldF9zZWN0aW9uX2luZm8oemxfbGliLT5kZXNjLCBuYW1lLCAmc2VjdCkpIHsKLQkJc3RhdHVz ID0gLUVOWElPOwotCQlnb3RvIGZ1bmNfY29udDsKLQl9Ci0JLyoKLQkgKiBFbnN1cmUgdGhlIHN1 cHBsaWVkIGJ1ZmZlciBzaXplIGlzIHN1ZmZpY2llbnQgdG8gc3RvcmUKLQkgKiB0aGUgc2VjdGlv biBidWYgdG8gYmUgcmVhZC4KLQkgKi8KLQl1bF9zZWN0X3NpemUgPSBzZWN0LT5zaXplICogYnl0 ZV9zaXplOwotCS8qIE1ha2Ugc3VyZSBzaXplIGlzIGV2ZW4gZm9yIGdvb2Qgc3dhcCAqLwotCWlm ICh1bF9zZWN0X3NpemUgJSAyKQotCQl1bF9zZWN0X3NpemUrKzsKLQotCS8qIEFsaWduIHNpemUg Ki8KLQl1bF9zZWN0X3NpemUgPSBET0ZGX0FMSUdOKHVsX3NlY3Rfc2l6ZSk7Ci0JaWYgKHVsX3Nl Y3Rfc2l6ZSA+IHNpemUpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0gZWxzZSB7Ci0JCWlmICgh ZGxvYWRfZ2V0X3NlY3Rpb24oemxfbGliLT5kZXNjLCBzZWN0LCBidWYpKQotCQkJc3RhdHVzID0g LUVCQURGOwotCi0JfQotZnVuY19jb250OgotCWlmIChvcGVuZWRfZG9mZikgewotCQlkb2ZfY2xv c2UoemxfbGliKTsKLQkJb3BlbmVkX2RvZmYgPSBmYWxzZTsKLQl9Ci0KLQlkZXZfZGJnKGJyaWRn ZSwgIiVzOiBsaWI6ICVwIG5hbWU6ICVzIGJ1ZjogJXAgc2l6ZTogMHgleCwgc3RhdHVzIDB4JXhc biIsCi0JCQlfX2Z1bmNfXywgbGliLCBuYW1lLCBidWYsIHNpemUsIHN0YXR1cyk7Ci0JcmV0dXJu IHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkYmxsX3VubG9hZCA9PT09PT09PQotICov Ci12b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIHN0cnVjdCBk YmxsX2F0dHJzICphdHRycykKLXsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliID0g KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopbGliOwotCXMzMiBlcnIgPSAwOwotCi0JZGV2X2Ri ZyhicmlkZ2UsICIlczogbGliOiAlcFxuIiwgX19mdW5jX18sIGxpYik7Ci0JemxfbGliLT5sb2Fk X3JlZi0tOwotCS8qIFVubG9hZCBvbmx5IGlmIHJlZmVyZW5jZSBjb3VudCBpcyAwICovCi0JaWYg KHpsX2xpYi0+bG9hZF9yZWYgIT0gMCkKLQkJcmV0dXJuOwotCi0JemxfbGliLT50YXJnZXRfb2Jq LT5hdHRycyA9ICphdHRyczsKLQlpZiAoemxfbGliLT5kbG9hZF9tb2Rfb2JqKSB7Ci0JCWVyciA9 IGR5bmFtaWNfdW5sb2FkX21vZHVsZSh6bF9saWItPmRsb2FkX21vZF9vYmosCi0JCQkJCSAgICAm emxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAotCQkJCQkgICAgJnpsX2xpYi0+YWxsb2NhdGUuZGxf YWxsb2MsCi0JCQkJCSAgICAmemxfbGliLT5pbml0LmRsX2luaXQpOwotCQlpZiAoZXJyICE9IDAp Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBmYWlsZWQ6IDB4JXhcbiIsIF9fZnVuY19fLCBlcnIp OwotCX0KLQkvKiByZW1vdmUgc3ltYm9scyBmcm9tIHN5bWJvbCB0YWJsZSAqLwotCWlmICh6bF9s aWItPnN5bV90YWIgIT0gTlVMTCkgewotCQlnaF9kZWxldGUoemxfbGliLT5zeW1fdGFiKTsKLQkJ emxfbGliLT5zeW1fdGFiID0gTlVMTDsKLQl9Ci0JLyogZGVsZXRlIERPRkYgZGVzYyBzaW5jZSBp dCBob2xkcyAqbG90cyogb2YgaG9zdCBPUwotCSAqIHJlc291cmNlcyAqLwotCWRvZl9jbG9zZSh6 bF9saWIpOwotfQotCi0vKgotICogID09PT09PT09IGRvZl9jbG9zZSA9PT09PT09PQotICovCi1z dGF0aWMgdm9pZCBkb2ZfY2xvc2Uoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYikKLXsK LQlpZiAoemxfbGliLT5kZXNjKSB7Ci0JCWRsb2FkX21vZHVsZV9jbG9zZSh6bF9saWItPmRlc2Mp OwotCQl6bF9saWItPmRlc2MgPSBOVUxMOwotCX0KLQkvKiBjbG9zZSBmaWxlICovCi0JaWYgKHps X2xpYi0+ZnApIHsKLQkJKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZmNsb3NlKSAoemxfbGli LT5mcCk7Ci0JCXpsX2xpYi0+ZnAgPSBOVUxMOwotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBk b2Zfb3BlbiA9PT09PT09PQotICovCi1zdGF0aWMgaW50IGRvZl9vcGVuKHN0cnVjdCBkYmxsX2xp YnJhcnlfb2JqICp6bF9saWIpCi17Ci0Jdm9pZCAqb3BlbiA9ICooemxfbGliLT50YXJnZXRfb2Jq LT5hdHRycy5mb3Blbik7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBGaXJzdCBvcGVuIHRoZSBm aWxlIGZvciB0aGUgZHluYW1pYyBsb2FkZXIsIHRoZW4gb3BlbiBDT0YgKi8KLQl6bF9saWItPmZw ID0KLQkgICAgKHZvaWQgKikoKGRibGxfZl9vcGVuX2Z4bikgKG9wZW4pKSAoemxfbGliLT5maWxl X25hbWUsICJyYiIpOwotCi0JLyogT3BlbiBET0ZGIG1vZHVsZSAqLwotCWlmICh6bF9saWItPmZw ICYmIHpsX2xpYi0+ZGVzYyA9PSBOVUxMKSB7Ci0JCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0 cnMuZnNlZWspKSAoemxfbGliLT5mcCwgKGxvbmcpMCwKLQkJCQkJCSAgICAgIFNFRUtfU0VUKTsK LQkJemxfbGliLT5kZXNjID0KLQkJICAgIGRsb2FkX21vZHVsZV9vcGVuKCZ6bF9saWItPnN0cmVh bS5kbF9zdHJlYW0sCi0JCQkJICAgICAgJnpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbCk7Ci0JCWlm ICh6bF9saWItPmRlc2MgPT0gTlVMTCkgewotCQkJKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMu ZmNsb3NlKSAoemxfbGliLT5mcCk7Ci0JCQl6bF9saWItPmZwID0gTlVMTDsKLQkJCXN0YXR1cyA9 IC1FQkFERjsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FQkFERjsKLQl9Ci0KLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IG5hbWVfaGFzaCA9PT09PT09PQotICov Ci1zdGF0aWMgdTMyIG5hbWVfaGFzaChjb25zdCB2b2lkICprZXkpCi17Ci0JdTMyIGhhc2g7Ci0J Y29uc3QgY2hhciAqbmFtZSA9IGtleTsKLQotCWhhc2ggPSAwOwotCi0Jd2hpbGUgKCpuYW1lKSB7 Ci0JCWhhc2ggPDw9IDE7Ci0JCWhhc2ggXj0gKm5hbWUrKzsKLQl9Ci0KLQlyZXR1cm4gaGFzaDsK LX0KLQotLyoKLSAqICA9PT09PT09PSBuYW1lX21hdGNoID09PT09PT09Ci0gKi8KLXN0YXRpYyBi b29sIG5hbWVfbWF0Y2goY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpzcCkKLXsKLQlpZiAo KGtleSAhPSBOVUxMKSAmJiAoc3AgIT0gTlVMTCkpIHsKLQkJaWYgKHN0cmNtcChrZXksICgoc3Ry dWN0IGRibGxfc3ltYm9sICopc3ApLT5uYW1lKSA9PSAwKQotCQkJcmV0dXJuIHRydWU7Ci0JfQot CXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqICA9PT09PT09PSBub19vcCA9PT09PT09PQotICov Ci1zdGF0aWMgaW50IG5vX29wKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlz cHRyLCB2b2lkICpidWZyLAotCQkgbGRyX2FkZHIgbG9jbiwgc3RydWN0IGxkcl9zZWN0aW9uX2lu Zm8gKmluZm8sIHVuc2lnbmVkIGJ5dHNpemUpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gc3ltX2RlbGV0ZSA9PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBzeW1fZGVsZXRl KHZvaWQgKnZhbHVlKQotewotCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3AgPSAoc3RydWN0IGRibGxf c3ltYm9sICopdmFsdWU7Ci0KLQlrZnJlZShzcC0+bmFtZSk7Ci19Ci0KLS8qCi0gKiAgRHluYW1p YyBMb2FkZXIgRnVuY3Rpb25zCi0gKi8KLQotLyogZHluYW1pY19sb2FkZXJfc3RyZWFtICovCi0v KgotICogID09PT09PT09IGRibGxfcmVhZF9idWZmZXIgPT09PT09PT0KLSAqLwotc3RhdGljIGlu dCBkYmxsX3JlYWRfYnVmZmVyKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXMsIHZv aWQgKmJ1ZmZlciwKLQkJCSAgICB1bnNpZ25lZCBidWZzaXplKQotewotCXN0cnVjdCBkYmxsX3N0 cmVhbSAqcHN0cmVhbSA9IChzdHJ1Y3QgZGJsbF9zdHJlYW0gKil0aGlzOwotCXN0cnVjdCBkYmxs X2xpYnJhcnlfb2JqICpsaWI7Ci0JaW50IGJ5dGVzX3JlYWQgPSAwOwotCi0JbGliID0gcHN0cmVh bS0+bGliOwotCWlmIChsaWIgIT0gTlVMTCkgewotCQlieXRlc19yZWFkID0KLQkJICAgICgqKGxp Yi0+dGFyZ2V0X29iai0+YXR0cnMuZnJlYWQpKSAoYnVmZmVyLCAxLCBidWZzaXplLAotCQkJCQkJ ICAgICAgIGxpYi0+ZnApOwotCX0KLQlyZXR1cm4gYnl0ZXNfcmVhZDsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBkYmxsX3NldF9maWxlX3Bvc24gPT09PT09PT0KLSAqLwotc3RhdGljIGludCBkYmxs X3NldF9maWxlX3Bvc24oc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqdGhpcywKLQkJCSAg ICAgIHVuc2lnbmVkIGludCBwb3MpCi17Ci0Jc3RydWN0IGRibGxfc3RyZWFtICpwc3RyZWFtID0g KHN0cnVjdCBkYmxsX3N0cmVhbSAqKXRoaXM7Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxp YjsKLQlpbnQgc3RhdHVzID0gMDsJCS8qIFN1Y2Nlc3MgKi8KLQotCWxpYiA9IHBzdHJlYW0tPmxp YjsKLQlpZiAobGliICE9IE5VTEwpIHsKLQkJc3RhdHVzID0gKCoobGliLT50YXJnZXRfb2JqLT5h dHRycy5mc2VlaykpIChsaWItPmZwLCAobG9uZylwb3MsCi0JCQkJCQkJICAgIFNFRUtfU0VUKTsK LQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKiBkeW5hbWljX2xvYWRlcl9zeW0gKi8KLQot LyoKLSAqICA9PT09PT09PSBkYmxsX2ZpbmRfc3ltYm9sID09PT09PT09Ci0gKi8KLXN0YXRpYyBz dHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmRibGxfZmluZF9zeW1ib2woc3RydWN0IGR5bmFtaWNfbG9h ZGVyX3N5bSAqdGhpcywKLQkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0 IGR5bmxvYWRfc3ltYm9sICpyZXRfc3ltOwotCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0g KHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGli OwotCXN0cnVjdCBkYmxsX3N5bV92YWwgKmRibGxfc3ltID0gTlVMTDsKLQlib29sIHN0YXR1cyA9 IGZhbHNlOwkvKiBTeW1ib2wgbm90IGZvdW5kIHlldCAqLwotCi0JbGliID0gbGRyX3N5bS0+bGli OwotCWlmIChsaWIgIT0gTlVMTCkgewotCQlpZiAobGliLT50YXJnZXRfb2JqLT5hdHRycy5zeW1f bG9va3VwKSB7Ci0JCQkvKiBDaGVjayBjdXJyZW50IGxpYiArIGJhc2UgbGliICsgZGVwIGxpYiAr Ci0JCQkgKiBwZXJzaXN0ZW50IGxpYiAqLwotCQkJc3RhdHVzID0gKCoobGliLT50YXJnZXRfb2Jq LT5hdHRycy5zeW1fbG9va3VwKSkKLQkJCSAgICAobGliLT50YXJnZXRfb2JqLT5hdHRycy5zeW1f aGFuZGxlLAotCQkJICAgICBsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9hcmcsCi0JCQkgICAg IGxpYi0+dGFyZ2V0X29iai0+YXR0cnMucm1tX2hhbmRsZSwgbmFtZSwKLQkJCSAgICAgJmRibGxf c3ltKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEp1c3QgY2hlY2sgY3VycmVudCBsaWIgZm9yIHN5bWJv bCAqLwotCQkJc3RhdHVzID0gZGJsbF9nZXRfYWRkcigoc3RydWN0IGRibGxfbGlicmFyeV9vYmog KilsaWIsCi0JCQkJCSAgICAgICAoY2hhciAqKW5hbWUsICZkYmxsX3N5bSk7Ci0JCQlpZiAoIXN0 YXR1cykgewotCQkJCXN0YXR1cyA9IGRibGxfZ2V0X2NfYWRkcigKLQkJCQkJCShzdHJ1Y3QgZGJs bF9saWJyYXJ5X29iaiAqKQotCQkJCQkJbGliLCAoY2hhciAqKW5hbWUsCi0JCQkJCQkmZGJsbF9z eW0pOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKCFzdGF0dXMgJiYgZ2JsX3NlYXJjaCkKLQkJZGV2 X2RiZyhicmlkZ2UsICIlczogU3ltYm9sIG5vdCBmb3VuZDogJXNcbiIsIF9fZnVuY19fLCBuYW1l KTsKLQotCXJldF9zeW0gPSAoc3RydWN0IGR5bmxvYWRfc3ltYm9sICopZGJsbF9zeW07Ci0JcmV0 dXJuIHJldF9zeW07Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZmluZF9pbl9zeW1ib2xfdGFibGUg PT09PT09PT0KLSAqLwotc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZmluZF9pbl9zeW1i b2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQotCQkJCQkJICAgKnRoaXMsIGNvbnN0 IGNoYXIgKm5hbWUsCi0JCQkJCQkgICB1bnNpZ25lZCBtb2R1bGVpZCkKLXsKLQlzdHJ1Y3QgbGRy X3N5bWJvbCAqbGRyX3N5bSA9IChzdHJ1Y3QgbGRyX3N5bWJvbCAqKXRoaXM7Ci0Jc3RydWN0IGRi bGxfbGlicmFyeV9vYmogKmxpYjsKLQlzdHJ1Y3QgZGJsbF9zeW1ib2wgKnN5bTsKLQotCWxpYiA9 IGxkcl9zeW0tPmxpYjsKLQlzeW0gPSAoc3RydWN0IGRibGxfc3ltYm9sICopZ2hfZmluZChsaWIt PnN5bV90YWIsIChjaGFyICopbmFtZSk7Ci0KLQlpZiAoSVNfRVJSKHN5bSkpCi0JCXJldHVybiBO VUxMOwotCi0JcmV0dXJuIChzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKikmc3ltLT52YWx1ZTsKLX0K LQotLyoKLSAqICA9PT09PT09PSBkYmxsX2FkZF90b19zeW1ib2xfdGFibGUgPT09PT09PT0KLSAq Lwotc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9hZGRfdG9fc3ltYm9sX3RhYmxl KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0KLQkJCQkJCSAgICAgICAqdGhpcywgY29uc3QgY2hh ciAqbmFtZSwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBtb2R1bGVfaWQpCi17Ci0Jc3RydWN0IGRi bGxfc3ltYm9sICpzeW1fcHRyID0gTlVMTDsKLQlzdHJ1Y3QgZGJsbF9zeW1ib2wgc3ltYm9sOwot CXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9zeW0gPSBOVUxMOwotCXN0cnVjdCBsZHJfc3lt Ym9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKLQlzdHJ1Y3QgZGJsbF9s aWJyYXJ5X29iaiAqbGliOwotCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqcmV0OwotCi0JbGliID0g bGRyX3N5bS0+bGliOwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIHN5bWJvbCBpcyBhbHJlYWR5IGRl ZmluZWQgaW4gc3ltYm9sIHRhYmxlICovCi0JaWYgKCEobGliLT50YXJnZXRfb2JqLT5hdHRycy5i YXNlX2ltYWdlKSkgewotCQlnYmxfc2VhcmNoID0gZmFsc2U7Ci0JCWRibGxfc3ltID0gZGJsbF9m aW5kX3N5bWJvbCh0aGlzLCBuYW1lKTsKLQkJZ2JsX3NlYXJjaCA9IHRydWU7Ci0JCWlmIChkYmxs X3N5bSkgewotCQkJcmVkZWZpbmVkX3N5bWJvbCA9IHRydWU7Ci0JCQlkZXZfZGJnKGJyaWRnZSwg IiVzIGFscmVhZHkgZGVmaW5lZCBpbiBzeW1ib2wgdGFibGVcbiIsCi0JCQkJbmFtZSk7Ci0JCQly ZXR1cm4gTlVMTDsKLQkJfQotCX0KLQkvKiBBbGxvY2F0ZSBzdHJpbmcgdG8gY29weSBzeW1ib2wg bmFtZSAqLwotCXN5bWJvbC5uYW1lID0ga3phbGxvYyhzdHJsZW4oKGNoYXIgKmNvbnN0KW5hbWUp ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN5bWJvbC5uYW1lID09IE5VTEwpCi0JCXJldHVybiBO VUxMOwotCi0JaWYgKHN5bWJvbC5uYW1lICE9IE5VTEwpIHsKLQkJLyogSnVzdCBjb3B5IG5hbWUg KHZhbHVlIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGR5bmFtaWMgbG9hZGVyKSAqLwotCQlzdHJuY3B5 KHN5bWJvbC5uYW1lLCAoY2hhciAqY29uc3QpbmFtZSwKLQkJCXN0cmxlbigoY2hhciAqY29uc3Qp bmFtZSkgKyAxKTsKLQotCQkvKiBBZGQgc3ltYm9sIHRvIHN5bWJvbCB0YWJsZSAqLwotCQlzeW1f cHRyID0KLQkJICAgIChzdHJ1Y3QgZGJsbF9zeW1ib2wgKilnaF9pbnNlcnQobGliLT5zeW1fdGFi LCAodm9pZCAqKW5hbWUsCi0JCQkJCQkgICAgKHZvaWQgKikmc3ltYm9sKTsKLQkJaWYgKElTX0VS UihzeW1fcHRyKSkgewotCQkJa2ZyZWUoc3ltYm9sLm5hbWUpOwotCQkJc3ltX3B0ciA9IE5VTEw7 Ci0JCX0KLQotCX0KLQlpZiAoc3ltX3B0ciAhPSBOVUxMKQotCQlyZXQgPSAoc3RydWN0IGR5bmxv YWRfc3ltYm9sICopJnN5bV9wdHItPnZhbHVlOwotCWVsc2UKLQkJcmV0ID0gTlVMTDsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUg PT09PT09PT0KLSAqLwotc3RhdGljIHZvaWQgZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUoc3RydWN0 IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywKLQkJCQkgICAgdW5zaWduZWQgbW9kdWxlX2lkKQot ewotCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhp czsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwotCi0JbGliID0gbGRyX3N5bS0+bGli OwotCS8qIE1heSBub3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLwotfQotCi0vKgotICogID09PT09 PT09IGFsbG9jYXRlID09PT09PT09Ci0gKi8KLXN0YXRpYyB2b2lkICphbGxvY2F0ZShzdHJ1Y3Qg ZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLCB1bnNpZ25lZCBtZW1zaXplKQotewotCXN0cnVjdCBs ZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKLQlzdHJ1Y3Qg ZGJsbF9saWJyYXJ5X29iaiAqbGliOwotCXZvaWQgKmJ1ZjsKLQotCWxpYiA9IGxkcl9zeW0tPmxp YjsKLQotCWJ1ZiA9IGt6YWxsb2MobWVtc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlyZXR1cm4gYnVm OwotfQotCi0vKgotICogID09PT09PT09IGRlYWxsb2NhdGUgPT09PT09PT0KLSAqLwotc3RhdGlj IHZvaWQgZGVhbGxvY2F0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLCB2b2lkICpt ZW1fcHRyKQotewotCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3lt Ym9sICopdGhpczsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwotCi0JbGliID0gbGRy X3N5bS0+bGliOwotCi0Ja2ZyZWUobWVtX3B0cik7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGJs bF9lcnJfcmVwb3J0ID09PT09PT09Ci0gKi8KLXN0YXRpYyB2b2lkIGRibGxfZXJyX3JlcG9ydChz dHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLCBjb25zdCBjaGFyICplcnJzdHIsCi0JCQkg ICAgdmFfbGlzdCBhcmdzKQotewotCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVj dCBsZHJfc3ltYm9sICopdGhpczsKLQlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwotCWNo YXIgdGVtcF9idWZbTUFYRVhQUl07Ci0KLQlsaWIgPSBsZHJfc3ltLT5saWI7Ci0JdnNucHJpbnRm KChjaGFyICopdGVtcF9idWYsIE1BWEVYUFIsIChjaGFyICopZXJyc3RyLCBhcmdzKTsKLQlkZXZf ZGJnKGJyaWRnZSwgIiVzXG4iLCB0ZW1wX2J1Zik7Ci19Ci0KLS8qIGR5bmFtaWNfbG9hZGVyX2Fs bG9jYXRlICovCi0KLS8qCi0gKiAgPT09PT09PT0gZGJsbF9ybW1fYWxsb2MgPT09PT09PT0KLSAq Lwotc3RhdGljIGludCBkYmxsX3JtbV9hbGxvYyhzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2Nh dGUgKnRoaXMsCi0JCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBh bGlnbikKLXsKLQlzdHJ1Y3QgZGJsbF9hbGxvYyAqZGJsbF9hbGxvY19vYmogPSAoc3RydWN0IGRi bGxfYWxsb2MgKil0aGlzOwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7Ci0JaW50IHN0 YXR1cyA9IDA7Ci0JdTMyIG1lbV9zZWN0X3R5cGU7Ci0Jc3RydWN0IHJtbV9hZGRyIHJtbV9hZGRy X29iajsKLQlzMzIgcmV0ID0gdHJ1ZTsKLQl1bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05f VFlQRShpbmZvLT50eXBlKTsKLQljaGFyICp0b2tlbiA9IE5VTEw7Ci0JY2hhciAqc3pfc2VjX2xh c3RfdG9rZW4gPSBOVUxMOwotCWNoYXIgKnN6X2xhc3RfdG9rZW4gPSBOVUxMOwotCWNoYXIgKnN6 X3NlY3RfbmFtZSA9IE5VTEw7Ci0JY2hhciAqcHN6X2N1cjsKLQlzMzIgdG9rZW5fbGVuID0gMDsK LQlzMzIgc2VnX2lkID0gLTE7Ci0JczMyIHJlcSA9IC0xOwotCXMzMiBjb3VudCA9IDA7Ci0JdTMy IGFsbG9jX3NpemUgPSAwOwotCXUzMiBydW5fYWRkcl9mbGFnID0gMDsKLQotCWxpYiA9IGRibGxf YWxsb2Nfb2JqLT5saWI7Ci0KLQltZW1fc2VjdF90eXBlID0KLQkgICAgKHN0eXBlID09IERMT0FE X1RFWFQpID8gREJMTF9DT0RFIDogKHN0eXBlID09Ci0JCQkJCQkgRExPQURfQlNTKSA/IERCTExf QlNTIDoKLQkgICAgREJMTF9EQVRBOwotCi0JLyogQXR0ZW1wdCB0byBleHRyYWN0IHRoZSBzZWdt ZW50IElEIGFuZCByZXF1aXJlbWVudCBpbmZvcm1hdGlvbiBmcm9tCi0JICAgdGhlIG5hbWUgb2Yg dGhlIHNlY3Rpb24gKi8KLQl0b2tlbl9sZW4gPSBzdHJsZW4oKGNoYXIgKikoaW5mby0+bmFtZSkp ICsgMTsKLQotCXN6X3NlY3RfbmFtZSA9IGt6YWxsb2ModG9rZW5fbGVuLCBHRlBfS0VSTkVMKTsK LQlzel9sYXN0X3Rva2VuID0ga3phbGxvYyh0b2tlbl9sZW4sIEdGUF9LRVJORUwpOwotCXN6X3Nl Y19sYXN0X3Rva2VuID0ga3phbGxvYyh0b2tlbl9sZW4sIEdGUF9LRVJORUwpOwotCi0JaWYgKHN6 X3NlY3RfbmFtZSA9PSBOVUxMIHx8IHN6X3NlY19sYXN0X3Rva2VuID09IE5VTEwgfHwKLQkgICAg c3pfbGFzdF90b2tlbiA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gZnVu Y19jb250OwotCX0KLQlzdHJuY3B5KHN6X3NlY3RfbmFtZSwgKGNoYXIgKikoaW5mby0+bmFtZSks IHRva2VuX2xlbik7Ci0JcHN6X2N1ciA9IHN6X3NlY3RfbmFtZTsKLQl3aGlsZSAoKHRva2VuID0g c3Ryc2VwKCZwc3pfY3VyLCAiOiIpKSAmJiAqdG9rZW4gIT0gJ1wwJykgewotCQlzdHJuY3B5KHN6 X3NlY19sYXN0X3Rva2VuLCBzel9sYXN0X3Rva2VuLAotCQkJc3RybGVuKHN6X2xhc3RfdG9rZW4p ICsgMSk7Ci0JCXN0cm5jcHkoc3pfbGFzdF90b2tlbiwgdG9rZW4sIHN0cmxlbih0b2tlbikgKyAx KTsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsICI6Iik7Ci0JCWNvdW50Kys7CS8qIG9wdGlt aXplcyBwcm9jZXNzaW5nICovCi0JfQotCS8qIElmIHRva2VuIGlzIDAgb3IgMSwgYW5kIHN6X3Nl Y19sYXN0X3Rva2VuIGlzIERZTl9EQVJBTSBvciBEWU5fU0FSQU0sCi0JICAgb3IgRFlOX0VYVEVS TkFMLCB0aGVuIG1lbSBncmFudWxhcml0eSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50Ci0JICAgd2l0 aGluIHRoZSBzZWN0aW9uIG5hbWUgLSBvbmx5IHByb2Nlc3MgaWYgdGhlcmUgYXJlIGF0IGxlYXN0 IHRocmVlCi0JICAgdG9rZW5zIHdpdGhpbiB0aGUgc2VjdGlvbiBuYW1lIChqdXN0IGEgbWlub3Ig b3B0aW1pemF0aW9uKSAqLwotCWlmIChjb3VudCA+PSAzKSB7Ci0JCXN0YXR1cyA9IGtzdHJ0b3Mz Mihzel9sYXN0X3Rva2VuLCAxMCwgJnJlcSk7Ci0JCWlmIChzdGF0dXMpCi0JCQlnb3RvIGZ1bmNf Y29udDsKLQl9Ci0KLQlpZiAoKHJlcSA9PSAwKSB8fCAocmVxID09IDEpKSB7Ci0JCWlmIChzdHJj bXAoc3pfc2VjX2xhc3RfdG9rZW4sICJEWU5fREFSQU0iKSA9PSAwKSB7Ci0JCQlzZWdfaWQgPSAw OwotCQl9IGVsc2UgewotCQkJaWYgKHN0cmNtcChzel9zZWNfbGFzdF90b2tlbiwgIkRZTl9TQVJB TSIpID09IDApIHsKLQkJCQlzZWdfaWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc3RyY21w KHN6X3NlY19sYXN0X3Rva2VuLAotCQkJCQkgICAiRFlOX0VYVEVSTkFMIikgPT0gMCkKLQkJCQkJ c2VnX2lkID0gMjsKLQkJCX0KLQkJfQotCX0KLWZ1bmNfY29udDoKLQlrZnJlZShzel9zZWN0X25h bWUpOwotCXN6X3NlY3RfbmFtZSA9IE5VTEw7Ci0Ja2ZyZWUoc3pfbGFzdF90b2tlbik7Ci0Jc3pf bGFzdF90b2tlbiA9IE5VTEw7Ci0Ja2ZyZWUoc3pfc2VjX2xhc3RfdG9rZW4pOwotCXN6X3NlY19s YXN0X3Rva2VuID0gTlVMTDsKLQotCWlmIChtZW1fc2VjdF90eXBlID09IERCTExfQ09ERSkKLQkJ YWxsb2Nfc2l6ZSA9IGluZm8tPnNpemUgKyBHRU1fTDFQX1BSRUZFVENIX1NJWkU7Ci0JZWxzZQot CQlhbGxvY19zaXplID0gaW5mby0+c2l6ZTsKLQotCWlmIChpbmZvLT5sb2FkX2FkZHIgIT0gaW5m by0+cnVuX2FkZHIpCi0JCXJ1bl9hZGRyX2ZsYWcgPSAxOwotCS8qIFRPRE8gLSBpZGVhbGx5LCB3 ZSBjYW4gcGFzcyB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFsc28KLQkgKiBmcm9tIGhlcmUg Ki8KLQlpZiAobGliICE9IE5VTEwpIHsKLQkJc3RhdHVzID0KLQkJICAgIChsaWItPnRhcmdldF9v YmotPmF0dHJzLmFsbG9jKSAobGliLT50YXJnZXRfb2JqLT5hdHRycy4KLQkJCQkJCSAgICBybW1f aGFuZGxlLCBtZW1fc2VjdF90eXBlLAotCQkJCQkJICAgIGFsbG9jX3NpemUsIGFsaWduLAotCQkJ CQkJICAgICh1MzIgKikgJnJtbV9hZGRyX29iaiwKLQkJCQkJCSAgICBzZWdfaWQsIHJlcSwgZmFs c2UpOwotCX0KLQlpZiAoc3RhdHVzKSB7Ci0JCXJldCA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCS8q IFJNTSBnaXZlcyB3b3JkIGFkZHJlc3MuIE5lZWQgdG8gY29udmVydCB0byBieXRlIGFkZHJlc3Mg Ki8KLQkJaW5mby0+bG9hZF9hZGRyID0gcm1tX2FkZHJfb2JqLmFkZHIgKiBEU1BXT1JEU0laRTsK LQkJaWYgKCFydW5fYWRkcl9mbGFnKQotCQkJaW5mby0+cnVuX2FkZHIgPSBpbmZvLT5sb2FkX2Fk ZHI7Ci0JCWluZm8tPmNvbnRleHQgPSAodTMyKSBybW1fYWRkcl9vYmouc2VnaWQ7Ci0JCWRldl9k YmcoYnJpZGdlLCAiJXM6ICVzIGJhc2UgPSAweCV4IGxlbiA9IDB4JXgsIGluZm8tPnJ1bl9hZGRy IDB4JXgsIGluZm8tPmxvYWRfYWRkciAweCV4XG4iLAotCQkJX19mdW5jX18sIGluZm8tPm5hbWUs IGluZm8tPmxvYWRfYWRkciAvIERTUFdPUkRTSVpFLAotCQkJaW5mby0+c2l6ZSAvIERTUFdPUkRT SVpFLCBpbmZvLT5ydW5fYWRkciwKLQkJCWluZm8tPmxvYWRfYWRkcik7Ci0JfQotCXJldHVybiBy ZXQ7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gcm1tX2RlYWxsb2MgPT09PT09PT0KLSAqLwotc3Rh dGljIHZvaWQgcm1tX2RlYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlz LAotCQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGRibGxfYWxs b2MgKmRibGxfYWxsb2Nfb2JqID0gKHN0cnVjdCBkYmxsX2FsbG9jICopdGhpczsKLQlzdHJ1Y3Qg ZGJsbF9saWJyYXJ5X29iaiAqbGliOwotCXUzMiBzZWdpZDsKLQlpbnQgc3RhdHVzID0gMDsKLQl1 bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKTsKLQl1MzIgbWVt X3NlY3RfdHlwZTsKLQl1MzIgZnJlZV9zaXplID0gMDsKLQotCW1lbV9zZWN0X3R5cGUgPQotCSAg ICAoc3R5cGUgPT0gRExPQURfVEVYVCkgPyBEQkxMX0NPREUgOiAoc3R5cGUgPT0KLQkJCQkJCSBE TE9BRF9CU1MpID8gREJMTF9CU1MgOgotCSAgICBEQkxMX0RBVEE7Ci0JbGliID0gZGJsbF9hbGxv Y19vYmotPmxpYjsKLQkvKiBzZWdpZCB3YXMgc2V0IGJ5IGFsbG9jIGZ1bmN0aW9uICovCi0Jc2Vn aWQgPSAodTMyKSBpbmZvLT5jb250ZXh0OwotCWlmIChtZW1fc2VjdF90eXBlID09IERCTExfQ09E RSkKLQkJZnJlZV9zaXplID0gaW5mby0+c2l6ZSArIEdFTV9MMVBfUFJFRkVUQ0hfU0laRTsKLQll bHNlCi0JCWZyZWVfc2l6ZSA9IGluZm8tPnNpemU7Ci0JaWYgKGxpYiAhPSBOVUxMKSB7Ci0JCXN0 YXR1cyA9Ci0JCSAgICAobGliLT50YXJnZXRfb2JqLT5hdHRycy5mcmVlKSAobGliLT50YXJnZXRf b2JqLT5hdHRycy4KLQkJCQkJCSAgIHN5bV9oYW5kbGUsIHNlZ2lkLAotCQkJCQkJICAgaW5mby0+ bG9hZF9hZGRyIC8KLQkJCQkJCSAgIERTUFdPUkRTSVpFLCBmcmVlX3NpemUsCi0JCQkJCQkgICBm YWxzZSk7Ci0JfQotfQotCi0vKiBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICovCi0vKgotICog ID09PT09PT09IGNvbm5lY3QgPT09PT09PT0KLSAqLwotc3RhdGljIGludCBjb25uZWN0KHN0cnVj dCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzKQotewotCXJldHVybiB0cnVlOwotfQot Ci0vKgotICogID09PT09PT09IHJlYWRfbWVtID09PT09PT09Ci0gKiAgVGhpcyBmdW5jdGlvbiBk b2VzIG5vdCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgotICovCi1zdGF0aWMgaW50IHJlYWRfbWVt KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCB2b2lkICpidWYsCi0JCSAg ICBsZHJfYWRkciBhZGRyLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywKLQkJICAgIHVu c2lnbmVkIG5ieXRlcykKLXsKLQlzdHJ1Y3QgZGJsbF9pbml0X29iaiAqaW5pdF9vYmogPSAoc3Ry dWN0IGRibGxfaW5pdF9vYmogKil0aGlzOwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7 Ci0JaW50IGJ5dGVzX3JlYWQgPSAwOwotCi0JbGliID0gaW5pdF9vYmotPmxpYjsKLQkvKiBOZWVk IGJyaWRnZV9icmRfcmVhZCBmdW5jdGlvbiAqLwotCXJldHVybiBieXRlc19yZWFkOwotfQotCi0v KgotICogID09PT09PT09IHdyaXRlX21lbSA9PT09PT09PQotICovCi1zdGF0aWMgaW50IHdyaXRl X21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAot CQkgICAgIGxkcl9hZGRyIGFkZHIsIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLAotCQkg ICAgIHVuc2lnbmVkIGJ5dGVzKQotewotCXN0cnVjdCBkYmxsX2luaXRfb2JqICppbml0X29iaiA9 IChzdHJ1Y3QgZGJsbF9pbml0X29iaiAqKXRoaXM7Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmog KmxpYjsKLQlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXRfb2JqOwotCXN0cnVjdCBkYmxsX3Nl Y3RfaW5mbyBzZWN0X2luZm87Ci0JdTMyIG1lbV9zZWN0X3R5cGU7Ci0JYm9vbCByZXQgPSB0cnVl OwotCi0JbGliID0gaW5pdF9vYmotPmxpYjsKLQlpZiAoIWxpYikKLQkJcmV0dXJuIGZhbHNlOwot Ci0JdGFyZ2V0X29iaiA9IGxpYi0+dGFyZ2V0X29iajsKLQotCW1lbV9zZWN0X3R5cGUgPQotCSAg ICAoRExPQURfU0VDVElPTl9UWVBFKGluZm8tPnR5cGUpID09Ci0JICAgICBETE9BRF9URVhUKSA/ IERCTExfQ09ERSA6IERCTExfREFUQTsKLQlpZiAodGFyZ2V0X29iaiAmJiB0YXJnZXRfb2JqLT5h dHRycy53cml0ZSkgewotCQlyZXQgPQotCQkgICAgKCp0YXJnZXRfb2JqLT5hdHRycy53cml0ZSkg KHRhcmdldF9vYmotPmF0dHJzLmlucHV0X3BhcmFtcywKLQkJCQkJCWFkZHIsIGJ1ZiwgYnl0ZXMs Ci0JCQkJCQltZW1fc2VjdF90eXBlKTsKLQotCQlpZiAodGFyZ2V0X29iai0+YXR0cnMubG9nX3dy aXRlKSB7Ci0JCQlzZWN0X2luZm8ubmFtZSA9IGluZm8tPm5hbWU7Ci0JCQlzZWN0X2luZm8uc2Vj dF9ydW5fYWRkciA9IGluZm8tPnJ1bl9hZGRyOwotCQkJc2VjdF9pbmZvLnNlY3RfbG9hZF9hZGRy ID0gaW5mby0+bG9hZF9hZGRyOwotCQkJc2VjdF9pbmZvLnNpemUgPSBpbmZvLT5zaXplOwotCQkJ c2VjdF9pbmZvLnR5cGUgPSBtZW1fc2VjdF90eXBlOwotCQkJLyogUGFzcyB0aGUgaW5mb3JtYXRp b24gYWJvdXQgd2hhdCB3ZSd2ZSB3cml0dGVuIHRvCi0JCQkgKiBhbm90aGVyIG1vZHVsZSAqLwot CQkJKCp0YXJnZXRfb2JqLT5hdHRycy5sb2dfd3JpdGUpICh0YXJnZXRfb2JqLT5hdHRycy4KLQkJ CQkJCQlsb2dfd3JpdGVfaGFuZGxlLAotCQkJCQkJCSZzZWN0X2luZm8sIGFkZHIsCi0JCQkJCQkJ Ynl0ZXMpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZmls bF9tZW0gPT09PT09PT0KLSAqICBGaWxsIGJ5dGVzIG9mIG1lbW9yeSBhdCBhIGdpdmVuIGFkZHJl c3Mgd2l0aCBhIGdpdmVuIHZhbHVlIGJ5Ci0gKiAgd3JpdGluZyBmcm9tIGEgYnVmZmVyIGNvbnRh aW5pbmcgdGhlIGdpdmVuIHZhbHVlLiAgV3JpdGUgaW4KLSAqICBzZXRzIG9mIE1BWEVYUFIgKDEy OCkgYnl0ZXMgdG8gYXZvaWQgbGFyZ2Ugc3RhY2sgYnVmZmVyIGlzc3Vlcy4KLSAqLwotc3RhdGlj IGludCBmaWxsX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgbGRy X2FkZHIgYWRkciwKLQkJICAgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25l ZCBieXRlcywgdW5zaWduZWQgdmFsKQotewotCWJvb2wgcmV0ID0gdHJ1ZTsKLQljaGFyICpwYnVm OwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7Ci0Jc3RydWN0IGRibGxfaW5pdF9vYmog KmluaXRfb2JqID0gKHN0cnVjdCBkYmxsX2luaXRfb2JqICopdGhpczsKLQotCWxpYiA9IGluaXRf b2JqLT5saWI7Ci0JcGJ1ZiA9IE5VTEw7Ci0JLyogUGFzcyB0aGUgTlVMTCBwb2ludGVyIHRvIHdy aXRlX21lbSB0byBnZXQgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgU2hhcmVkCi0JICAgbWVtb3J5LiBU aGlzIGlzIGEgdHJpY2sgdG8ganVzdCBnZXQgdGhlIHN0YXJ0IGFkZHJlc3MsIHRoZXJlIGlzIG5v Ci0JICAgd3JpdGluZyB0YWtpbmcgcGxhY2Ugd2l0aCB0aGlzIFdyaXRlbWVtCi0JICovCi0JaWYg KChsaWItPnRhcmdldF9vYmotPmF0dHJzLndyaXRlKSAhPSAoZGJsbF93cml0ZV9meG4pIG5vX29w KQotCQl3cml0ZV9tZW0odGhpcywgJnBidWYsIGFkZHIsIGluZm8sIDApOwotCWlmIChwYnVmKQot CQltZW1zZXQocGJ1ZiwgdmFsLCBieXRlcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICog ID09PT09PT09IGV4ZWN1dGUgPT09PT09PT0KLSAqLwotc3RhdGljIGludCBleGVjdXRlKHN0cnVj dCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBzdGFydCkKLXsKLQlz dHJ1Y3QgZGJsbF9pbml0X29iaiAqaW5pdF9vYmogPSAoc3RydWN0IGRibGxfaW5pdF9vYmogKil0 aGlzOwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7Ci0JYm9vbCByZXQgPSB0cnVlOwot Ci0JbGliID0gaW5pdF9vYmotPmxpYjsKLQkvKiBTYXZlIGVudHJ5IHBvaW50ICovCi0JaWYgKGxp YiAhPSBOVUxMKQotCQlsaWItPmVudHJ5ID0gKHUzMikgc3RhcnQ7Ci0KLQlyZXR1cm4gcmV0Owot fQotCi0vKgotICogID09PT09PT09IHJlbGVhc2UgPT09PT09PT0KLSAqLwotc3RhdGljIHZvaWQg cmVsZWFzZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcykKLXsKLX0KLQot I2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKLS8qKgotICogIGZpbmRfc3ltYm9s X2NvbnRleHQgLSBCYXNpYyBzeW1ib2wgY29udGV4dCBzdHJ1Y3R1cmUKLSAqIEBhZGRyZXNzOgkJ U3ltYm9sIEFkZHJlc3MKLSAqIEBvZmZzZXRfcmFuZ2U6CQlPZmZzZXQgcmFuZ2Ugd2hlcmUgdGhl IHNlYXJjaCBmb3IgdGhlIERTUCBzeW1ib2wKLSAqCQkJc3RhcnRlZC4KLSAqIEBjdXJfYmVzdF9v ZmZzZXQ6CUJlc3Qgb2Zmc2V0IHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBEU1Agc3ltYm9sCi0g KiBAc3ltX2FkZHI6CQlBZGRyZXNzIG9mIHRoZSBEU1Agc3ltYm9sCi0gKiBAbmFtZToJCVN5bWJv bCBuYW1lCi0gKgotICovCi1zdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCB7Ci0JLyogaW5wdXQg Ki8KLQl1MzIgYWRkcmVzczsKLQl1MzIgb2Zmc2V0X3JhbmdlOwotCS8qIHN0YXRlICovCi0JdTMy IGN1cl9iZXN0X29mZnNldDsKLQkvKiBvdXRwdXQgKi8KLQl1MzIgc3ltX2FkZHI7Ci0JY2hhciBu YW1lWzEyMF07Ci19OwotCi0vKioKLSAqIGZpbmRfc3ltYm9sX2NhbGxiYWNrKCkgLSBWYWxpZGF0 ZXMgc3ltYm9sIGFkZHJlc3MgYW5kIGNvcGllcyB0aGUgc3ltYm9sIG5hbWUKLSAqCQkJdG8gdGhl IHVzZXIgZGF0YS4KLSAqIEBlbGVtOgkJZHNwIGxpYnJhcnkgY29udGV4dAotICogQHVzZXJfZGF0 YToJCUZpbmQgc3ltYm9sIGNvbnRleHQKLSAqCi0gKi8KLXZvaWQgZmluZF9zeW1ib2xfY2FsbGJh Y2sodm9pZCAqZWxlbSwgdm9pZCAqdXNlcl9kYXRhKQotewotCXN0cnVjdCBkYmxsX3N5bWJvbCAq c3ltYm9sID0gZWxlbTsKLQlzdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCAqY29udGV4dCA9IHVz ZXJfZGF0YTsKLQl1MzIgc3ltYm9sX2FkZHIgPSBzeW1ib2wtPnZhbHVlLnZhbHVlOwotCXUzMiBv ZmZzZXQgPSBjb250ZXh0LT5hZGRyZXNzIC0gc3ltYm9sX2FkZHI7Ci0KLQkvKgotCSAqIEFkZHJl c3MgZ2l2ZW4gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBzeW1ib2wgYWRkcmVzcywKLQkgKiBzeW1i b2wgYWRkcmVzcyBzaG91bGQgYmUgIHdpdGhpbiBzcGVjaWZpZWQgcmFuZ2UKLQkgKiBhbmQgdGhl IG9mZnNldCBzaG91bGQgYmUgYmV0dGVyIHRoYW4gcHJldmlvdXMgb25lCi0JICovCi0JaWYgKGNv bnRleHQtPmFkZHJlc3MgPj0gc3ltYm9sX2FkZHIgJiYgc3ltYm9sX2FkZHIgPCAodTMyKS0xICYm Ci0JCW9mZnNldCA8IGNvbnRleHQtPmN1cl9iZXN0X29mZnNldCkgewotCQljb250ZXh0LT5jdXJf YmVzdF9vZmZzZXQgPSBvZmZzZXQ7Ci0JCWNvbnRleHQtPnN5bV9hZGRyID0gc3ltYm9sX2FkZHI7 Ci0JCXN0cmxjcHkoY29udGV4dC0+bmFtZSwgc3ltYm9sLT5uYW1lLCBzaXplb2YoY29udGV4dC0+ bmFtZSkpOwotCX0KLQotCXJldHVybjsKLX0KLQotLyoqCi0gKiBkYmxsX2ZpbmRfZHNwX3N5bWJv bCgpIC0gVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRzcCBzeW1ib2wgZnJvbSB0aGUgZHNw IGJpbmFyeS4KLSAqIEB6bF9saWI6CQlEU1AgYmluYXJ5IG9iaiBsaWJyYXJ5IHBvaW50ZXIKLSAq IEBhZGRyZXNzOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBkc3Agc3ltYm9sCi0gKiBAb2Zm c2V0X3JhbmdlOgkJb2Zmc2V0IHJhbmdlIHRvIGxvb2sgZm9yIGRzcCBzeW1ib2wKLSAqIEBzeW1f YWRkcl9vdXRwdXQ6CVN5bWJvbCBPdXRwdXQgYWRkcmVzcwotICogQG5hbWVfb3V0cHV0OgkJU3Ry aW5nIHdpdGggdGhlIGRzcCBzeW1ib2wKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0 aGUgZHNwIHN5bWJvbCBmcm9tIHRoZSBkc3AgYmluYXJ5LgotICovCi1ib29sIGRibGxfZmluZF9k c3Bfc3ltYm9sKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIHUzMiBhZGRyZXNzLAot CQkJCXUzMiBvZmZzZXRfcmFuZ2UsIHUzMiAqc3ltX2FkZHJfb3V0cHV0LAotCQkJCWNoYXIgKm5h bWVfb3V0cHV0KQotewotCWJvb2wgc3RhdHVzID0gZmFsc2U7Ci0Jc3RydWN0IGZpbmRfc3ltYm9s X2NvbnRleHQgY29udGV4dDsKLQotCWNvbnRleHQuYWRkcmVzcyA9IGFkZHJlc3M7Ci0JY29udGV4 dC5vZmZzZXRfcmFuZ2UgPSBvZmZzZXRfcmFuZ2U7Ci0JY29udGV4dC5jdXJfYmVzdF9vZmZzZXQg PSBvZmZzZXRfcmFuZ2U7Ci0JY29udGV4dC5zeW1fYWRkciA9IDA7Ci0JY29udGV4dC5uYW1lWzBd ID0gJ1wwJzsKLQotCWdoX2l0ZXJhdGUoemxfbGliLT5zeW1fdGFiLCBmaW5kX3N5bWJvbF9jYWxs YmFjaywgJmNvbnRleHQpOwotCi0JaWYgKGNvbnRleHQubmFtZVswXSkgewotCQlzdGF0dXMgPSB0 cnVlOwotCQlzdHJjcHkobmFtZV9vdXRwdXQsIGNvbnRleHQubmFtZSk7Ci0JCSpzeW1fYWRkcl9v dXRwdXQgPSBjb250ZXh0LnN5bV9hZGRyOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0jZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2Rldi5jIGIv ZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGV2LmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDYxNmRjMWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNw YnJpZGdlL3BtZ3IvZGV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjkgKzAsMCBAQAotLyoKLSAq IGRldi5jCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBm b3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mIEJyaWRnZSBC cmlkZ2UgZHJpdmVyIGRldmljZSBvcGVyYXRpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw NS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAq Ci0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBF WFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1J VEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0jaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rf b3MuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9T IEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotLyogIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KLSNpbmNsdWRl IDxkc3BicmlkZ2UvY29kLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgotI2luY2x1ZGUg PGRzcGJyaWRnZS9wcm9jLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgotCi0vKiAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLwotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9tZ3IuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgotCi0v KiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCi0jaW5jbHVk ZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgkvKiBEU1AgQVBJIHZlcnNpb24gaW5mby4gKi8KLQotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9jaG5sLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2lvLmg+Ci0jaW5j bHVkZSA8ZHNwYnJpZGdlL21zZy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KLSNpbmNs dWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotCi0vKiAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVz LCBUeXBlZGVmcyAqLwotCi0jZGVmaW5lIE1BS0VWRVJTSU9OKG1ham9yLCBtaW5vcikgICAobWFq b3IgKiAxMCArIG1pbm9yKQotI2RlZmluZSBCUkRfQVBJX1ZFUlNJT04JCU1BS0VWRVJTSU9OKEJS RF9BUElfTUFKT1JfVkVSU0lPTiwJXAotCQkJCUJSRF9BUElfTUlOT1JfVkVSU0lPTikKLQotLyog VGhlIEJyaWRnZSBkZXZpY2Ugb2JqZWN0OiAqLwotc3RydWN0IGRldl9vYmplY3QgewotCXN0cnVj dCBsaXN0X2hlYWQgbGluazsJLyogTGluayB0byBuZXh0IGRldl9vYmplY3QuICovCi0JdTggZGV2 X3R5cGU7CQkvKiBEZXZpY2UgVHlwZSAqLwotCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVf b2JqOwkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBkZXYgaWQgKi8KLQkvKiBCcmlkZ2UgQ29udGV4dCBI YW5kbGUgKi8KLQlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY29udGV4dDsKLQkv KiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KLQlzdHJ1Y3QgYnJpZGdl X2Rydl9pbnRlcmZhY2UgYnJpZGdlX2ludGVyZmFjZTsKLQlzdHJ1Y3QgYnJkX29iamVjdCAqbG9j a19vd25lcjsJLyogQ2xpZW50IHdpdGggZXhjbHVzaXZlIGFjY2Vzcy4gKi8KLQlzdHJ1Y3QgY29k X21hbmFnZXIgKmNvZF9tZ3I7CS8qIENvZGUgbWFuYWdlciBoYW5kbGUuICovCi0Jc3RydWN0IGNo bmxfbWdyICpjaG5sX21ncjsJLyogQ2hhbm5lbCBtYW5hZ2VyLiAqLwotCXN0cnVjdCBkZWhfbWdy ICpkZWhfbWdyOwkvKiBERUggbWFuYWdlci4gKi8KLQlzdHJ1Y3QgbXNnX21nciAqbXNnX21ncjsJ LyogTWVzc2FnZSBtYW5hZ2VyLiAqLwotCXN0cnVjdCBpb19tZ3IgKmlvbWdyOwkvKiBJTyBtYW5h Z2VyIChDSE5MLCBtc2dfY3RybCkgKi8KLQlzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncjsJLyog U00gbWVtb3J5IG1hbmFnZXIuICovCi0Jc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7CS8qIER5 bmFtaWMgbWVtb3J5IG1hbmFnZXIuICovCi0JdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCB3b3JkIHNp emU6IHF1aWNrIGFjY2Vzcy4gKi8KLQlzdHJ1Y3QgZHJ2X29iamVjdCAqZHJ2X29iajsJLyogRHJp dmVyIE9iamVjdCAqLwotCS8qIExpc3Qgb2YgUHJvY2Vzc29ycyBhdHRhY2hlZCB0byB0aGlzIGRl dmljZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgcHJvY19saXN0OwotCXN0cnVjdCBub2RlX21nciAq bm9kZV9tZ3I7Ci19OwotCi1zdHJ1Y3QgZHJ2X2V4dCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5r OwotCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEhdOwotfTsKLQotLyogIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KLXN0YXRp YyBpbnQgZnhuX25vdF9pbXBsZW1lbnRlZChpbnQgYXJnLCAuLi4pOwotc3RhdGljIGludCBpbml0 X2NvZF9tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmopOwotc3RhdGljIHZvaWQgc3RvcmVf aW50ZXJmYWNlX2Z4bnMoc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpkcnZfZnhucywKLQkJ CQkgc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnMpOwotLyoKLSAqICA9PT09 PT09PSBkZXZfYnJkX3dyaXRlX2Z4biA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEV4 cG9ydGVkIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXMgdGhlIENPRCB3cml0ZSBmdW5jdGlvbi4gIFRo aXMgZnVuY3Rpb24KLSAqICAgICAgaXMgcGFzc2VkIGEgaGFuZGxlIHRvIGEgREVWX2hPYmplY3Qs IHRoZW4gY2FsbHMgdGhlCi0gKiAgICAgIGRldmljZSdzIGJyaWRnZV9icmRfd3JpdGUoKSBmdW5j dGlvbi4KLSAqLwotdTMyIGRldl9icmRfd3JpdGVfZnhuKHZvaWQgKmFyYiwgdTMyIGRzcF9hZGQs IHZvaWQgKmhvc3RfYnVmLAotCQkgICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNl KQotewotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICop YXJiOwotCXUzMiB1bF93cml0dGVuID0gMDsKLQlpbnQgc3RhdHVzOwotCi0JaWYgKGRldl9vYmop IHsKLQkJLyogUmVxdWlyZSBvZiBCcmRXcml0ZSgpICovCi0JCXN0YXR1cyA9ICgqZGV2X29iai0+ YnJpZGdlX2ludGVyZmFjZS5icmRfd3JpdGUpICgKLQkJCQkJZGV2X29iai0+YnJpZGdlX2NvbnRl eHQsIGhvc3RfYnVmLAotCQkJCQlkc3BfYWRkLCB1bF9udW1fYnl0ZXMsIG1lbV9zcGFjZSk7Ci0J CS8qIFNwZWNpYWwgY2FzZSBvZiBnZXR0aW5nIHRoZSBhZGRyZXNzIG9ubHkgKi8KLQkJaWYgKHVs X251bV9ieXRlcyA9PSAwKQotCQkJdWxfbnVtX2J5dGVzID0gMTsKLQkJaWYgKCFzdGF0dXMpCi0J CQl1bF93cml0dGVuID0gdWxfbnVtX2J5dGVzOwotCi0JfQotCXJldHVybiB1bF93cml0dGVuOwot fQotCi0vKgotICogID09PT09PT09IGRldl9jcmVhdGVfZGV2aWNlID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgQ2FsbGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIGxvYWQgdGhl IFBNIEJyaWRnZSBEcml2ZXIgZm9yIGEKLSAqICAgICAgUE0gYm9hcmQgKGRldmljZSkuCi0gKi8K LWludCBkZXZfY3JlYXRlX2RldmljZShzdHJ1Y3QgZGV2X29iamVjdCAqKmRldmljZV9vYmosCi0J CQkgICAgIGNvbnN0IGNoYXIgKmRyaXZlcl9maWxlX25hbWUsCi0JCQkgICAgIHN0cnVjdCBjZmdf ZGV2bm9kZSAqZGV2X25vZGVfb2JqKQotewotCXN0cnVjdCBjZmdfaG9zdHJlcyAqaG9zdF9yZXM7 Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpkcnZfZnhucyA9IE5VTEw7Ci0Jc3RydWN0 IGRldl9vYmplY3QgKmRldl9vYmogPSBOVUxMOwotCXN0cnVjdCBjaG5sX21ncmF0dHJzIG1ncl9h dHRyczsKLQlzdHJ1Y3QgaW9fYXR0cnMgaW9fbWdyX2F0dHJzOwotCXUzMiBudW1fd2luZG93czsK LQlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmogPSBOVUxMOwotCXN0cnVjdCBkcnZfZGF0YSAq ZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0JaW50IHN0YXR1cyA9IDA7Ci0K LQlzdGF0dXMgPSBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCgodm9pZCAqKSZob3N0X3Jlcyk7 Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byByZXNl cnZlIGJyaWRnZSByZXNvdXJjZXNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gbGVhdmU7Ci0J fQotCi0JLyogIEdldCB0aGUgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi0J YnJpZGdlX2Rydl9lbnRyeSgmZHJ2X2Z4bnMsIGRyaXZlcl9maWxlX25hbWUpOwotCi0JLyogUmV0 cmlldmUgdGhlIE9iamVjdCBoYW5kbGUgZnJvbSB0aGUgZHJpdmVyIGRhdGEgKi8KLQlpZiAoZHJ2 X2RhdGFwICYmIGRydl9kYXRhcC0+ZHJ2X29iamVjdCkgewotCQloZHJ2X29iaiA9IGRydl9kYXRh cC0+ZHJ2X29iamVjdDsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0JCXByX2Vycigi JXM6IEZhaWxlZCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IGhhbmRsZVxuIiwgX19mdW5jX18pOwot CX0KLQotCS8qIENyZWF0ZSB0aGUgZGV2aWNlIG9iamVjdCwgYW5kIHBhc3MgYSBoYW5kbGUgdG8g dGhlIEJyaWRnZSBkcml2ZXIgZm9yCi0JICogc3RvcmFnZS4gKi8KLQlpZiAoIXN0YXR1cykgewot CQlkZXZfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9vYmplY3QpLCBHRlBfS0VSTkVM KTsKLQkJaWYgKGRldl9vYmopIHsKLQkJCS8qIEZpbGwgb3V0IHRoZSByZXN0IG9mIHRoZSBEZXYg T2JqZWN0IHN0cnVjdHVyZTogKi8KLQkJCWRldl9vYmotPmRldl9ub2RlX29iaiA9IGRldl9ub2Rl X29iajsKLQkJCWRldl9vYmotPmNvZF9tZ3IgPSBOVUxMOwotCQkJZGV2X29iai0+Y2hubF9tZ3Ig PSBOVUxMOwotCQkJZGV2X29iai0+ZGVoX21nciA9IE5VTEw7Ci0JCQlkZXZfb2JqLT5sb2NrX293 bmVyID0gTlVMTDsKLQkJCWRldl9vYmotPndvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOwotCQkJZGV2 X29iai0+ZHJ2X29iaiA9IGhkcnZfb2JqOwotCQkJZGV2X29iai0+ZGV2X3R5cGUgPSBEU1BfVU5J VDsKLQkJCS8qIFN0b3JlIHRoaXMgQnJpZGdlJ3MgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYmFzZWQg b24gaXRzCi0JCQkgKiB2ZXJzaW9uLiAqLwotCQkJc3RvcmVfaW50ZXJmYWNlX2Z4bnMoZHJ2X2Z4 bnMsCi0JCQkJCQkmZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZSk7Ci0KLQkJCS8qIENhbGwgZnhu X2Rldl9jcmVhdGUoKSB0byBnZXQgdGhlIEJyaWRnZSdzIGRldmljZQotCQkJICogY29udGV4dCBo YW5kbGUuICovCi0JCQlzdGF0dXMgPSAoZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZS5kZXZfY3Jl YXRlKQotCQkJICAgICgmZGV2X29iai0+YnJpZGdlX2NvbnRleHQsIGRldl9vYmosCi0JCQkgICAg IGhvc3RfcmVzKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FTk9NRU07Ci0JCX0KLQl9Ci0J LyogQXR0ZW1wdCB0byBjcmVhdGUgdGhlIENPRCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZTogKi8K LQlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gaW5pdF9jb2RfbWdyKGRldl9vYmopOwotCi0JLyog QXR0ZW1wdCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2U6ICov Ci0JaWYgKCFzdGF0dXMpIHsKLQkJbWdyX2F0dHJzLm1heF9jaGFubmVscyA9IENITkxfTUFYQ0hB Tk5FTFM7Ci0JCWlvX21ncl9hdHRycy5iaXJxID0gaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzOwot CQlpb19tZ3JfYXR0cnMuaXJxX3NoYXJlZCA9Ci0JCSAgICAoaG9zdF9yZXMtPmJpcnFfYXR0cmli ICYgQ0ZHX0lSUVNIQVJFRCk7Ci0JCWlvX21ncl9hdHRycy53b3JkX3NpemUgPSBEU1BXT1JEU0la RTsKLQkJbWdyX2F0dHJzLndvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOwotCQludW1fd2luZG93cyA9 IGhvc3RfcmVzLT5udW1fbWVtX3dpbmRvd3M7Ci0JCWlmIChudW1fd2luZG93cykgewotCQkJLyog QXNzdW1lIGxhc3QgbWVtb3J5IHdpbmRvdyBpcyBmb3IgQ0hOTCAqLwotCQkJaW9fbWdyX2F0dHJz LnNobV9iYXNlID0gaG9zdF9yZXMtPm1lbV9iYXNlWzFdICsKLQkJCSAgICBob3N0X3Jlcy0+b2Zm c2V0X2Zvcl9tb25pdG9yOwotCQkJaW9fbWdyX2F0dHJzLnNtX2xlbmd0aCA9Ci0JCQkgICAgaG9z dF9yZXMtPm1lbV9sZW5ndGhbMV0gLQotCQkJICAgIGhvc3RfcmVzLT5vZmZzZXRfZm9yX21vbml0 b3I7Ci0JCX0gZWxzZSB7Ci0JCQlpb19tZ3JfYXR0cnMuc2htX2Jhc2UgPSAwOwotCQkJaW9fbWdy X2F0dHJzLnNtX2xlbmd0aCA9IDA7Ci0JCQlwcl9lcnIoIiVzOiBObyBtZW1vcnkgcmVzZXJ2ZWQg Zm9yIHNoYXJlZCBzdHJ1Y3R1cmVzXG4iLAotCQkJICAgICAgIF9fZnVuY19fKTsKLQkJfQotCQlz dGF0dXMgPSBjaG5sX2NyZWF0ZSgmZGV2X29iai0+Y2hubF9tZ3IsIGRldl9vYmosICZtZ3JfYXR0 cnMpOwotCQlpZiAoc3RhdHVzID09IC1FTk9TWVMpIHsKLQkJCS8qIEl0J3MgT0sgZm9yIGEgZGV2 aWNlIG5vdCB0byBoYXZlIGEgY2hhbm5lbAotCQkJICogbWFuYWdlcjogKi8KLQkJCXN0YXR1cyA9 IDA7Ci0JCX0KLQkJLyogQ3JlYXRlIENNTSBtZ3IgZXZlbiBpZiBNc2cgTWdyIG5vdCBpbXBsLiAq LwotCQlzdGF0dXMgPSBjbW1fY3JlYXRlKCZkZXZfb2JqLT5jbW1fbWdyLAotCQkJCSAgICAoc3Ry dWN0IGRldl9vYmplY3QgKilkZXZfb2JqLCBOVUxMKTsKLQkJLyogT25seSBjcmVhdGUgSU8gbWFu YWdlciBpZiB3ZSBoYXZlIGEgY2hhbm5lbCBtYW5hZ2VyICovCi0JCWlmICghc3RhdHVzICYmIGRl dl9vYmotPmNobmxfbWdyKSB7Ci0JCQlzdGF0dXMgPSBpb19jcmVhdGUoJmRldl9vYmotPmlvbWdy LCBkZXZfb2JqLAotCQkJCQkgICAmaW9fbWdyX2F0dHJzKTsKLQkJfQotCQkvKiBPbmx5IGNyZWF0 ZSBERUggbWFuYWdlciBpZiB3ZSBoYXZlIGFuIElPIG1hbmFnZXIgKi8KLQkJaWYgKCFzdGF0dXMp IHsKLQkJCS8qIEluc3RhbnRpYXRlIHRoZSBERUggbW9kdWxlICovCi0JCQlzdGF0dXMgPSBicmlk Z2VfZGVoX2NyZWF0ZSgmZGV2X29iai0+ZGVoX21nciwgZGV2X29iaik7Ci0JCX0KLQkJLyogQ3Jl YXRlIERNTSBtZ3IgLiAqLwotCQlzdGF0dXMgPSBkbW1fY3JlYXRlKCZkZXZfb2JqLT5kbW1fbWdy LAotCQkJCSAgICAoc3RydWN0IGRldl9vYmplY3QgKilkZXZfb2JqLCBOVUxMKTsKLQl9Ci0JLyog QWRkIHRoZSBuZXcgREVWX09iamVjdCB0byB0aGUgZ2xvYmFsIGxpc3Q6ICovCi0JaWYgKCFzdGF0 dXMpCi0JCXN0YXR1cyA9IGRydl9pbnNlcnRfZGV2X29iamVjdChoZHJ2X29iaiwgZGV2X29iaik7 Ci0KLQkvKiBDcmVhdGUgdGhlIFByb2Nlc3NvciBMaXN0ICovCi0JaWYgKCFzdGF0dXMpCi0JCUlO SVRfTElTVF9IRUFEKCZkZXZfb2JqLT5wcm9jX2xpc3QpOwotbGVhdmU6Ci0JLyogIElmIGFsbCB3 ZW50IHdlbGwsIHJldHVybiBhIGhhbmRsZSB0byB0aGUgZGV2IG9iamVjdDsKLQkgKiAgZWxzZSwg Y2xlYW51cCBhbmQgcmV0dXJuIE5VTEwgaW4gdGhlIE9VVCBwYXJhbWV0ZXIuICovCi0JaWYgKCFz dGF0dXMpIHsKLQkJKmRldmljZV9vYmogPSBkZXZfb2JqOwotCX0gZWxzZSB7Ci0JCWlmIChkZXZf b2JqKSB7Ci0JCQlpZiAoZGV2X29iai0+Y29kX21ncikKLQkJCQljb2RfZGVsZXRlKGRldl9vYmot PmNvZF9tZ3IpOwotCQkJaWYgKGRldl9vYmotPmRtbV9tZ3IpCi0JCQkJZG1tX2Rlc3Ryb3koZGV2 X29iai0+ZG1tX21ncik7Ci0JCQlrZnJlZShkZXZfb2JqKTsKLQkJfQotCi0JCSpkZXZpY2Vfb2Jq ID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRl dl9jcmVhdGUyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQWZ0ZXIgc3VjY2Vzc2Z1 bCBsb2FkaW5nIG9mIHRoZSBpbWFnZSBmcm9tIGFwaV9pbml0X2NvbXBsZXRlMgotICogICAgICAo UFJPQyBBdXRvX1N0YXJ0KSBvciBwcm9jX2xvYWQgdGhpcyBmeG4gaXMgY2FsbGVkLiBUaGlzIGNy ZWF0ZXMKLSAqICAgICAgdGhlIE5vZGUgTWFuYWdlciBhbmQgdXBkYXRlcyB0aGUgREVWIE9iamVj dC4KLSAqLwotaW50IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKLXsK LQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2Jq OwotCi0JLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lIE5vZGUgTWFuYWdlciBwZXIgREVWIG9iamVj dCAqLwotCXN0YXR1cyA9IG5vZGVfY3JlYXRlX21ncigmZGV2X29iai0+bm9kZV9tZ3IsIGhkZXZf b2JqKTsKLQlpZiAoc3RhdHVzKQotCQlkZXZfb2JqLT5ub2RlX21nciA9IE5VTEw7Ci0KLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRldl9kZXN0cm95MiA9PT09PT09PQot ICogIFB1cnBvc2U6Ci0gKiAgICAgIERlc3Ryb3lzIHRoZSBOb2RlIG1hbmFnZXIgZm9yIHRoaXMg ZGV2aWNlLgotICovCi1pbnQgZGV2X2Rlc3Ryb3kyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29i aikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhk ZXZfb2JqOwotCi0JaWYgKGRldl9vYmotPm5vZGVfbWdyKSB7Ci0JCWlmIChub2RlX2RlbGV0ZV9t Z3IoZGV2X29iai0+bm9kZV9tZ3IpKQotCQkJc3RhdHVzID0gLUVQRVJNOwotCQllbHNlCi0JCQlk ZXZfb2JqLT5ub2RlX21nciA9IE5VTEw7Ci0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogID09PT09PT09IGRldl9kZXN0cm95X2RldmljZSA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIERlc3Ryb3lzIHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLCBp ZiBhbnksIGNhbGxzCi0gKiAgICAgIGJyaWRnZV9kZXZfZGVzdHJveSgpLCBhbmQgdGhlbiBhdHRl bXB0cyB0byB1bmxvYWQgdGhlIEJyaWRnZSBtb2R1bGUuCi0gKi8KLWludCBkZXZfZGVzdHJveV9k ZXZpY2Uoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQotewotCWludCBzdGF0dXMgPSAwOwot CXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7Ci0KLQlpZiAoaGRldl9vYmop IHsKLQkJaWYgKGRldl9vYmotPmNvZF9tZ3IpIHsKLQkJCWNvZF9kZWxldGUoZGV2X29iai0+Y29k X21ncik7Ci0JCQlkZXZfb2JqLT5jb2RfbWdyID0gTlVMTDsKLQkJfQotCi0JCWlmIChkZXZfb2Jq LT5ub2RlX21ncikgewotCQkJbm9kZV9kZWxldGVfbWdyKGRldl9vYmotPm5vZGVfbWdyKTsKLQkJ CWRldl9vYmotPm5vZGVfbWdyID0gTlVMTDsKLQkJfQotCi0JCS8qIEZyZWUgdGhlIGlvLCBjaGFu bmVsLCBhbmQgbWVzc2FnZSBtYW5hZ2VycyBmb3IgdGhpcyBib2FyZDogKi8KLQkJaWYgKGRldl9v YmotPmlvbWdyKSB7Ci0JCQlpb19kZXN0cm95KGRldl9vYmotPmlvbWdyKTsKLQkJCWRldl9vYmot PmlvbWdyID0gTlVMTDsKLQkJfQotCQlpZiAoZGV2X29iai0+Y2hubF9tZ3IpIHsKLQkJCWNobmxf ZGVzdHJveShkZXZfb2JqLT5jaG5sX21ncik7Ci0JCQlkZXZfb2JqLT5jaG5sX21nciA9IE5VTEw7 Ci0JCX0KLQkJaWYgKGRldl9vYmotPm1zZ19tZ3IpIHsKLQkJCW1zZ19kZWxldGUoZGV2X29iai0+ bXNnX21ncik7Ci0JCQlkZXZfb2JqLT5tc2dfbWdyID0gTlVMTDsKLQkJfQotCi0JCWlmIChkZXZf b2JqLT5kZWhfbWdyKSB7Ci0JCQkvKiBVbmluaXRpYWxpemUgREVIIG1vZHVsZS4gKi8KLQkJCWJy aWRnZV9kZWhfZGVzdHJveShkZXZfb2JqLT5kZWhfbWdyKTsKLQkJCWRldl9vYmotPmRlaF9tZ3Ig PSBOVUxMOwotCQl9Ci0JCWlmIChkZXZfb2JqLT5jbW1fbWdyKSB7Ci0JCQljbW1fZGVzdHJveShk ZXZfb2JqLT5jbW1fbWdyLCB0cnVlKTsKLQkJCWRldl9vYmotPmNtbV9tZ3IgPSBOVUxMOwotCQl9 Ci0KLQkJaWYgKGRldl9vYmotPmRtbV9tZ3IpIHsKLQkJCWRtbV9kZXN0cm95KGRldl9vYmotPmRt bV9tZ3IpOwotCQkJZGV2X29iai0+ZG1tX21nciA9IE5VTEw7Ci0JCX0KLQotCQkvKiBDYWxsIHRo ZSBkcml2ZXIncyBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBmdW5jdGlvbjogKi8KLQkJLyogUmVxdWly ZSBvZiBEZXZEZXN0cm95ICovCi0JCWlmIChkZXZfb2JqLT5icmlkZ2VfY29udGV4dCkgewotCQkJ c3RhdHVzID0gKCpkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlLmRldl9kZXN0cm95KQotCQkJICAg IChkZXZfb2JqLT5icmlkZ2VfY29udGV4dCk7Ci0JCQlkZXZfb2JqLT5icmlkZ2VfY29udGV4dCA9 IE5VTEw7Ci0JCX0gZWxzZQotCQkJc3RhdHVzID0gLUVQRVJNOwotCQlpZiAoIXN0YXR1cykgewot CQkJLyogUmVtb3ZlIHRoaXMgREVWX09iamVjdCBmcm9tIHRoZSBnbG9iYWwgbGlzdDogKi8KLQkJ CWRydl9yZW1vdmVfZGV2X29iamVjdChkZXZfb2JqLT5kcnZfb2JqLCBkZXZfb2JqKTsKLQkJCS8q IEZyZWUgVGhlIGxpYnJhcnkgKiBMRFJfRnJlZU1vZHVsZQotCQkJICogKGRldl9vYmotPm1vZHVs ZV9vYmopOyAqLwotCQkJLyogRnJlZSB0aGlzIGRldiBvYmplY3Q6ICovCi0JCQlrZnJlZShkZXZf b2JqKTsKLQkJCWRldl9vYmogPSBOVUxMOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVG QVVMVDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRldl9n ZXRfY2hubF9tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUg aGFuZGxlIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgaGFuZGxlIGNyZWF0ZWQgZm9yIHRoaXMKLSAq ICAgICAgZGV2aWNlLgotICovCi1pbnQgZGV2X2dldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVj dCAqaGRldl9vYmosCi0JCQkgICAgc3RydWN0IGNobmxfbWdyICoqbWdyKQotewotCWludCBzdGF0 dXMgPSAwOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7Ci0KLQlpZiAo aGRldl9vYmopIHsKLQkJKm1nciA9IGRldl9vYmotPmNobmxfbWdyOwotCX0gZWxzZSB7Ci0JCSpt Z3IgPSBOVUxMOwotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X2dldF9jbW1fbWdyID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgUmV0cmlldmUgdGhlIGhhbmRsZSB0byB0aGUgc2hhcmVkIG1lbW9yeSBtYW5h Z2VyIGNyZWF0ZWQgZm9yIHRoaXMKLSAqICAgICAgZGV2aWNlLgotICovCi1pbnQgZGV2X2dldF9j bW1fbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgIHN0cnVjdCBjbW1fb2Jq ZWN0ICoqbWdyKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZf b2JqID0gaGRldl9vYmo7Ci0KLQlpZiAoaGRldl9vYmopIHsKLQkJKm1nciA9IGRldl9vYmotPmNt bV9tZ3I7Ci0JfSBlbHNlIHsKLQkJKm1nciA9IE5VTEw7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0J fQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZXZfZ2V0X2RtbV9t Z3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRv IHRoZSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VyIGNyZWF0ZWQgZm9yIHRoaXMKLSAqICAgICAgZGV2 aWNlLgotICovCi1pbnQgZGV2X2dldF9kbW1fbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29i aiwKLQkJCSAgIHN0cnVjdCBkbW1fb2JqZWN0ICoqbWdyKQotewotCWludCBzdGF0dXMgPSAwOwot CXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7Ci0KLQlpZiAoaGRldl9vYmop IHsKLQkJKm1nciA9IGRldl9vYmotPmRtbV9tZ3I7Ci0JfSBlbHNlIHsKLQkJKm1nciA9IE5VTEw7 Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAq ICA9PT09PT09PSBkZXZfZ2V0X2NvZF9tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBSZXRyaWV2ZSB0aGUgQ09EIG1hbmFnZXIgY3JlYXRlIGZvciB0aGlzIGRldmljZS4KLSAqLwot aW50IGRldl9nZXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkgICBz dHJ1Y3QgY29kX21hbmFnZXIgKipjb2RfbWdyKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVj dCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7Ci0KLQlpZiAoaGRldl9vYmopIHsKLQkJ KmNvZF9tZ3IgPSBkZXZfb2JqLT5jb2RfbWdyOwotCX0gZWxzZSB7Ci0JCSpjb2RfbWdyID0gTlVM TDsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogID09PT09PT09PSBkZXZfZ2V0X2RlaF9tZ3IgPT09PT09PT0KLSAqLwotaW50IGRldl9nZXRf ZGVoX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkgICBzdHJ1Y3QgZGVoX21n ciAqKmRlaF9tYW5hZ2VyKQotewotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKGhkZXZfb2JqKSB7 Ci0JCSpkZWhfbWFuYWdlciA9IGhkZXZfb2JqLT5kZWhfbWdyOwotCX0gZWxzZSB7Ci0JCSpkZWhf bWFuYWdlciA9IE5VTEw7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCXJldHVybiBzdGF0dXM7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGV2X2dldF9kZXZfbm9kZSA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgSUQg Zm9yIHRoaXMgZGV2aWNlLgotICovCi1pbnQgZGV2X2dldF9kZXZfbm9kZShzdHJ1Y3QgZGV2X29i amVjdCAqaGRldl9vYmosCi0JCQkgICAgc3RydWN0IGNmZ19kZXZub2RlICoqZGV2X25kZSkKLXsK LQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2Jq OwotCi0JaWYgKGhkZXZfb2JqKSB7Ci0JCSpkZXZfbmRlID0gZGV2X29iai0+ZGV2X25vZGVfb2Jq OwotCX0gZWxzZSB7Ci0JCSpkZXZfbmRlID0gTlVMTDsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9 Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRldl9nZXRfZmlyc3Qg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgZmlyc3QgRGV2aWNl IE9iamVjdCBoYW5kbGUgZnJvbSBhbiBpbnRlcm5hbCBsaW5rZWQgbGlzdAotICogICAgICBERVZf T0JKRUNUcyBtYWludGFpbmVkIGJ5IERFVi4KLSAqLwotc3RydWN0IGRldl9vYmplY3QgKmRldl9n ZXRfZmlyc3Qodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IE5VTEw7Ci0K LQlkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0 KCk7Ci0KLQlyZXR1cm4gZGV2X29iajsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZXZfZ2V0X2lu dGZfZnhucyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBCcmlk Z2UgaW50ZXJmYWNlIGZ1bmN0aW9uIHN0cnVjdHVyZSBmb3IgdGhlIGxvYWRlZCBkcml2ZXIuCi0g KiAgICAgIGlmX2Z4bnMgIT0gTlVMTC4KLSAqLwotaW50IGRldl9nZXRfaW50Zl9meG5zKHN0cnVj dCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICAgc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJm YWNlICoqaWZfZnhucykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAq ZGV2X29iaiA9IGhkZXZfb2JqOwotCi0JaWYgKGhkZXZfb2JqKSB7Ci0JCSppZl9meG5zID0gJmRl dl9vYmotPmJyaWRnZV9pbnRlcmZhY2U7Ci0JfSBlbHNlIHsKLQkJKmlmX2Z4bnMgPSBOVUxMOwot CQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT09IGRldl9nZXRfaW9fbWdyID09PT09PT09Ci0gKi8KLWludCBkZXZfZ2V0X2lvX21n cihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkgIHN0cnVjdCBpb19tZ3IgKippb19t YW4pCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAoaGRldl9vYmopIHsKLQkJKmlvX21hbiA9 IGhkZXZfb2JqLT5pb21ncjsKLQl9IGVsc2UgewotCQkqaW9fbWFuID0gTlVMTDsKLQkJc3RhdHVz ID0gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IGRldl9nZXRfbmV4dCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRo ZSBuZXh0IERldmljZSBPYmplY3QgaGFuZGxlIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3QK LSAqICAgICAgb2YgREVWX09CSkVDVHMgbWFpbnRhaW5lZCBieSBERVYsIGFmdGVyIGhhdmluZyBw cmV2aW91c2x5IGNhbGxlZAotICogICAgICBkZXZfZ2V0X2ZpcnN0KCkgYW5kIHplcm8gb3IgbW9y ZSBkZXZfZ2V0X25leHQKLSAqLwotc3RydWN0IGRldl9vYmplY3QgKmRldl9nZXRfbmV4dChzdHJ1 Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCi17Ci0Jc3RydWN0IGRldl9vYmplY3QgKm5leHRfZGV2 X29iamVjdCA9IE5VTEw7Ci0KLQlpZiAoaGRldl9vYmopIHsKLQkJbmV4dF9kZXZfb2JqZWN0ID0g KHN0cnVjdCBkZXZfb2JqZWN0ICopCi0JCSAgICBkcnZfZ2V0X25leHRfZGV2X29iamVjdCgodTMy KSBoZGV2X29iaik7Ci0JfQotCi0JcmV0dXJuIG5leHRfZGV2X29iamVjdDsKLX0KLQotLyoKLSAq ICA9PT09PT09PT0gZGV2X2dldF9tc2dfbWdyID09PT09PT09Ci0gKi8KLXZvaWQgZGV2X2dldF9t c2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgc3RydWN0IG1zZ19tZ3IgKiptc2df bWFuKQotewotCSptc2dfbWFuID0gaGRldl9vYmotPm1zZ19tZ3I7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gZGV2X2dldF9ub2RlX21hbmFnZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBSZXRyaWV2ZSB0aGUgTm9kZSBNYW5hZ2VyIEhhbmRsZQotICovCi1pbnQgZGV2X2dldF9ub2Rl X21hbmFnZXIoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJCXN0cnVjdCBub2RlX21n ciAqKm5vZGVfbWFuKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpk ZXZfb2JqID0gaGRldl9vYmo7Ci0KLQlpZiAoaGRldl9vYmopIHsKLQkJKm5vZGVfbWFuID0gZGV2 X29iai0+bm9kZV9tZ3I7Ci0JfSBlbHNlIHsKLQkJKm5vZGVfbWFuID0gTlVMTDsKLQkJc3RhdHVz ID0gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IGRldl9nZXRfc3ltYm9sID09PT09PT09Ci0gKi8KLWludCBkZXZfZ2V0X3N5bWJvbChzdHJ1Y3Qg ZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkgIGNvbnN0IGNoYXIgKnN0cl9zeW0sIHUzMiAqcHVs X3ZhbHVlKQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21n cjsKLQotCWlmIChoZGV2X29iaikgewotCQlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IoaGRldl9v YmosICZjb2RfbWdyKTsKLQkJaWYgKGNvZF9tZ3IpCi0JCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92 YWx1ZShjb2RfbWdyLCAoY2hhciAqKXN0cl9zeW0sCi0JCQkJCQkgICBwdWxfdmFsdWUpOwotCQll bHNlCi0JCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gZGV2X2dldF9icmlkZ2VfY29udGV4dCA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBCcmlkZ2UgQ29udGV4dCBoYW5kbGUsIGFzIHJldHVy bmVkIGJ5IHRoZQotICogICAgICBicmlkZ2VfZGV2X2NyZWF0ZSBmeG4uCi0gKi8KLWludCBkZXZf Z2V0X2JyaWRnZV9jb250ZXh0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJCSAgICAg ICBzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICoqcGhicmlkZ2VfY29udGV4dCkKLXsKLQlpbnQg c3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOwotCi0J aWYgKGhkZXZfb2JqKSB7Ci0JCSpwaGJyaWRnZV9jb250ZXh0ID0gZGV2X29iai0+YnJpZGdlX2Nv bnRleHQ7Ci0JfSBlbHNlIHsKLQkJKnBoYnJpZGdlX2NvbnRleHQgPSBOVUxMOwotCQlzdGF0dXMg PSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0g ZGV2X25vdGlmeV9jbGllbnRzID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgTm90aWZ5 IGFsbCBjbGllbnRzIG9mIHRoaXMgZGV2aWNlIG9mIGEgY2hhbmdlIGluIGRldmljZSBzdGF0dXMu Ci0gKi8KLWludCBkZXZfbm90aWZ5X2NsaWVudHMoc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmos IHUzMiByZXQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VycjsKLQotCS8qCi0JICogRklYTUU6 IHRoaXMgY29kZSBuZWVkcyBzdHJ1Y3QgcHJvY19vYmplY3QgdG8gaGF2ZSBhIGxpc3RfaGVhZAot CSAqIGF0IHRoZSBiZWdpbm5pbmcuIElmIG5vdCwgdGhpcyBjYW4gZ28gaG9ycmlibHkgd3Jvbmcu Ci0JICovCi0JbGlzdF9mb3JfZWFjaChjdXJyLCAmZGV2X29iai0+cHJvY19saXN0KQotCQlwcm9j X25vdGlmeV9jbGllbnRzKCh2b2lkICopY3VyciwgcmV0KTsKLQotCXJldHVybiAwOwotfQotCi0v KgotICogID09PT09PT09IGRldl9yZW1vdmVfZGV2aWNlID09PT09PT09Ci0gKi8KLWludCBkZXZf cmVtb3ZlX2RldmljZShzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaikKLXsKLQlzdHJ1 Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIGhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0ICovCi0J aW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2Ry dmRhdGEoYnJpZGdlKTsKLQotCWlmICghZHJ2X2RhdGFwKQotCQlzdGF0dXMgPSAtRU5PREFUQTsK LQotCWlmICghZGV2X25vZGVfb2JqKQotCQlzdGF0dXMgPSAtRUZBVUxUOwotCi0JLyogUmV0cmll dmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlIG9yaWdpbmFsbHkgc3RvcmVkIHdpdGgKLQkgKiB0 aGUgZGV2X25vZGU6ICovCi0JaWYgKCFzdGF0dXMpIHsKLQkJLyogY2hlY2sgdGhlIGRldmljZSBz dHJpbmcgYW5kIHRoZW4gc3RvcmUgZGV2IG9iamVjdCAqLwotCQlpZiAoIXN0cmNtcCgoY2hhciAq KSgoc3RydWN0IGRydl9leHQgKilkZXZfbm9kZV9vYmopLT5zel9zdHJpbmcsCi0JCQkJCQkJCSJU SU9NQVAxNTEwIikpIHsKLQkJCWhkZXZfb2JqID0gZHJ2X2RhdGFwLT5kZXZfb2JqZWN0OwotCQkJ LyogRGVzdHJveSB0aGUgZGV2aWNlIG9iamVjdC4gKi8KLQkJCXN0YXR1cyA9IGRldl9kZXN0cm95 X2RldmljZShoZGV2X29iaik7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCX0K LQl9Ci0KLQlpZiAoc3RhdHVzKQotCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4i LCBfX2Z1bmNfXywgc3RhdHVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gZGV2X3NldF9jaG5sX21nciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNl dCB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZS4KLSAqLwotaW50IGRldl9zZXRf Y2hubF9tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkJICAgIHN0cnVjdCBjaG5s X21nciAqaG1ncikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2 X29iaiA9IGhkZXZfb2JqOwotCi0JaWYgKGhkZXZfb2JqKQotCQlkZXZfb2JqLT5jaG5sX21nciA9 IGhtZ3I7Ci0JZWxzZQotCQlzdGF0dXMgPSAtRUZBVUxUOwotCi0JcmV0dXJuIHN0YXR1czsKLX0K LQotLyoKLSAqICA9PT09PT09PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KLSAqICBQdXJwb3Nl OgotICogICAgICBTZXQgdGhlIG1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCi0gKi8K LXZvaWQgZGV2X3NldF9tc2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgc3RydWN0 IG1zZ19tZ3IgKmhtZ3IpCi17Ci0JaGRldl9vYmotPm1zZ19tZ3IgPSBobWdyOwotfQotCi0vKgot ICogID09PT09PT09IGRldl9zdGFydF9kZXZpY2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBJbml0aWFsaXplcyB0aGUgbmV3IGRldmljZSB3aXRoIHRoZSBCUklER0UgZW52aXJvbm1l bnQuCi0gKi8KLWludCBkZXZfc3RhcnRfZGV2aWNlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25v ZGVfb2JqKQotewotCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiA9IE5VTEw7CS8qIGhhbmRs ZSB0byAnQnJpZGdlIERldmljZSAqLwotCS8qIEJyaWRnZSBkcml2ZXIgZmlsZW5hbWUgKi8KLQlj aGFyICpicmlkZ2VfZmlsZV9uYW1lID0gIlVNQSI7Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgbWdy X29iamVjdCAqaG1ncl9vYmogPSBOVUxMOwotCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0g ZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0KLQkvKiBHaXZlbiBhbGwgcmVzb3VyY2VzLCBjcmVh dGUgYSBkZXZpY2Ugb2JqZWN0LiAqLwotCXN0YXR1cyA9IGRldl9jcmVhdGVfZGV2aWNlKCZoZGV2 X29iaiwgYnJpZGdlX2ZpbGVfbmFtZSwKLQkJCQkgICBkZXZfbm9kZV9vYmopOwotCWlmICghc3Rh dHVzKSB7Ci0JCS8qIFN0b3JlIGF3YXkgdGhlIGhkZXZfb2JqIHdpdGggdGhlIERFVk5PREUgKi8K LQkJaWYgKCFkcnZfZGF0YXAgfHwgIWRldl9ub2RlX29iaikgewotCQkJc3RhdHVzID0gLUVGQVVM VDsKLQkJCXByX2VycigiJXM6IEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0 dXMpOwotCQl9IGVsc2UgaWYgKCEoc3RyY21wKChjaGFyICopZGV2X25vZGVfb2JqLCAiVElPTUFQ MTUxMCIpKSkgewotCQkJZHJ2X2RhdGFwLT5kZXZfb2JqZWN0ID0gKHZvaWQgKikgaGRldl9vYmo7 Ci0JCX0KLQkJaWYgKCFzdGF0dXMpIHsKLQkJCS8qIENyZWF0ZSB0aGUgTWFuYWdlciBPYmplY3Qg Ki8KLQkJCXN0YXR1cyA9IG1ncl9jcmVhdGUoJmhtZ3Jfb2JqLCBkZXZfbm9kZV9vYmopOwotCQkJ aWYgKHN0YXR1cyAmJiAhKHN0cmNtcCgoY2hhciAqKWRldl9ub2RlX29iaiwKLQkJCQkJCQkiVElP TUFQMTUxMCIpKSkgewotCQkJCS8qIEVuc3VyZSB0aGUgZGV2aWNlIGV4dGVuc2lvbiBpcyBOVUxM ICovCi0JCQkJZHJ2X2RhdGFwLT5kZXZfb2JqZWN0ID0gTlVMTDsKLQkJCX0KLQkJfQotCQlpZiAo c3RhdHVzKSB7Ci0JCQkvKiBDbGVhbiB1cCAqLwotCQkJZGV2X2Rlc3Ryb3lfZGV2aWNlKGhkZXZf b2JqKTsKLQkJCWhkZXZfb2JqID0gTlVMTDsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gZnhuX25vdF9pbXBsZW1lbnRlZCA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIFRha2VzIHRoZSBwbGFjZSBvZiBhIEJyaWRnZSBOdWxsIEZ1bmN0aW9u LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIE11bHRpcGxlLCBvcHRpb25hbC4KLSAqICBSZXR1 cm5zOgotICogICAgICAtRU5PU1lTOiAgIEFsd2F5cy4KLSAqLwotc3RhdGljIGludCBmeG5fbm90 X2ltcGxlbWVudGVkKGludCBhcmcsIC4uLikKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotLyoK LSAqICA9PT09PT09PSBpbml0X2NvZF9tZ3IgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBDcmVhdGUgYSBDT0QgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCi0gKiAgUGFyYW1ldGVyczoK LSAqICAgICAgZGV2X29iajogICAgICAgICAgICAgUG9pbnRlciB0byBkZXZpY2Ugb2JqZWN0IGNy ZWF0ZWQgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2Rl dmljZSgpCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4K LSAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIGhkZXZfb2JqLgotICogIFJlcXVp cmVzOgotICogICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBieSBkZXZfY3JlYXRlX2Rl dmljZSgpIGZvciBhIGdpdmVuIERldk9iamVjdC4KLSAqICBFbnN1cmVzOgotICovCi1zdGF0aWMg aW50IGluaXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaikKLXsKLQlpbnQgc3Rh dHVzID0gMDsKLQljaGFyICpzel9kdW1teV9maWxlID0gImR1bW15IjsKLQotCXN0YXR1cyA9IGNv ZF9jcmVhdGUoJmRldl9vYmotPmNvZF9tZ3IsIHN6X2R1bW15X2ZpbGUpOwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0ID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgSW5zZXJ0IGEgUHJvY09iamVjdCBpbnRvIHRoZSBs aXN0IG1haW50YWluZWQgYnkgREVWLgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHBfcHJvY19v YmplY3Q6ICAgICAgICBQdHIgdG8gUHJvY09iamVjdCB0byBpbnNlcnQuCi0gKiAgICAgIGRldl9v Ymo6ICAgICAgICAgUHRyIHRvIERldiBPYmplY3Qgd2hlcmUgdGhlIGxpc3QgaXMuCi0gICogICAg IGFscmVhZHlfYXR0YWNoZWQ6ICBQdHIgdG8gcmV0dXJuIHRoZSBib29sCi0gKiAgUmV0dXJuczoK LSAqICAgICAgMDogICAgICAgICAgIElmIHN1Y2Nlc3NmdWwuCi0gKiAgUmVxdWlyZXM6Ci0gKiAg ICAgIExpc3QgRXhpc3RzCi0gKiAgICAgIGhkZXZfb2JqIGlzIFZhbGlkIGhhbmRsZQotICogICAg ICBERVYgSW5pdGlhbGl6ZWQKLSAqICAgICAgYWxyZWFkeV9hdHRhY2hlZCAhPSBOVUxMCi0gKiAg ICAgIHByb2Nfb2JqICE9IDAKLSAqICBFbnN1cmVzOgotICogICAgICAwIGFuZCBMaXN0IGlzIG5v dCBFbXB0eS4KLSAqLwotaW50IGRldl9pbnNlcnRfcHJvY19vYmplY3Qoc3RydWN0IGRldl9vYmpl Y3QgKmhkZXZfb2JqLAotCQkJCSAgdTMyIHByb2Nfb2JqLCBib29sICphbHJlYWR5X2F0dGFjaGVk KQotewotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICop aGRldl9vYmo7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmRldl9vYmotPnByb2NfbGlzdCkpCi0JCSph bHJlYWR5X2F0dGFjaGVkID0gdHJ1ZTsKLQotCS8qIEFkZCBEZXZPYmplY3QgdG8gdGFpbC4gKi8K LQkvKgotCSAqIEZJWE1FOiB0aGlzIGNvZGUgbmVlZHMgc3RydWN0IHByb2Nfb2JqZWN0IHRvIGhh dmUgYSBsaXN0X2hlYWQKLQkgKiBhdCB0aGUgYmVnaW5uaW5nLiBJZiBub3QsIHRoaXMgY2FuIGdv IGhvcnJpYmx5IHdyb25nLgotCSAqLwotCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQg Kilwcm9jX29iaiwgJmRldl9vYmotPnByb2NfbGlzdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoK LSAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3QgZnJvbSB0aGUg Z2l2ZW4gbGlzdCBtYWludGFpbmVkCi0gKiAgICAgIGJ5IHRoZSBERVYKLSAqICBQYXJhbWV0ZXJz OgotICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5z ZXJ0LgotICogICAgICBkZXZfb2JqICAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRo ZSBsaXN0IGlzLgotICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3VjY2Vz c2Z1bC4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgTGlzdCBleGlzdHMgYW5kIGlzIG5vdCBlbXB0 eQotICogICAgICBwcm9jX29iaiAhPSAwCi0gKiAgICAgIGhkZXZfb2JqIGlzIGEgdmFsaWQgRGV2 IGhhbmRsZS4KLSAqICBFbnN1cmVzOgotICogIERldGFpbHM6Ci0gKiAgICAgIExpc3Qgd2lsbCBi ZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95ZWQuCi0gKi8KLWludCBkZXZfcmVtb3Zl X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKQot ewotCWludCBzdGF0dXMgPSAtRVBFUk07Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyX2VsZW07Ci0J c3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKiloZGV2X29i ajsKLQotCS8qIFNlYXJjaCBsaXN0IGZvciBkZXZfb2JqOiAqLwotCWxpc3RfZm9yX2VhY2goY3Vy X2VsZW0sICZkZXZfb2JqLT5wcm9jX2xpc3QpIHsKLQkJaWYgKCh1MzIpIGN1cl9lbGVtID09IHBy b2Nfb2JqKSB7Ci0JCQlsaXN0X2RlbChjdXJfZWxlbSk7Ci0JCQlzdGF0dXMgPSAwOwotCQkJYnJl YWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1pbnQgZGV2X2dldF9kZXZfdHlw ZShzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiwgdTggKmRldl90eXBlKQotewotCSpkZXZfdHlw ZSA9IGRldl9vYmotPmRldl90eXBlOwotCXJldHVybiAwOwotfQotCi0vKgotICogID09PT09PT09 IHN0b3JlX2ludGVyZmFjZV9meG5zID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ29w eSB0aGUgQnJpZGdlJ3MgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBkZXZpY2Ugb2JqZWN0 LAotICogICAgICBlbnN1cmluZyB0aGF0IGZ4bl9ub3RfaW1wbGVtZW50ZWQoKSBpcyBzZXQgZm9y OgotICoKLSAqICAgICAgMS4gQWxsIEJyaWRnZSBmdW5jdGlvbiBwb2ludGVycyB3aGljaCBhcmUg TlVMTDsgYW5kCi0gKiAgICAgIDIuIEFsbCBmdW5jdGlvbiBzbG90cyBpbiB0aGUgc3RydWN0IGRl dl9vYmplY3Qgc3RydWN0dXJlIHdoaWNoIGhhdmUgbm8KLSAqICAgICAgICAgY29ycmVzcG9uZGlu ZyBzbG90cyBpbiB0aGUgdGhlIEJyaWRnZSdzIGludGVyZmFjZSwgYmVjYXVzZSB0aGUgQnJpZGdl Ci0gKiAgICAgICAgIGlzIG9mIGFuICpvbGRlciogdmVyc2lvbi4KLSAqICBQYXJhbWV0ZXJzOgot ICogICAgICBpbnRmX2Z4bnM6ICAgICAgSW50ZXJmYWNlIGZ4biBTdHJ1Y3R1cmUgb2YgdGhlIEJy aWRnZSdzIERldiBPYmplY3QuCi0gKiAgICAgIGRydl9meG5zOiAgICAgIEludGVyZmFjZSBGeG5z IG9mZmVyZWQgYnkgdGhlIEJyaWRnZSBkdXJpbmcgREVWX0NyZWF0ZSgpLgotICogIFJldHVybnM6 Ci0gKiAgUmVxdWlyZXM6Ci0gKiAgICAgIElucHV0IHBvaW50ZXJzIGFyZSB2YWxpZC4KLSAqICAg ICAgQnJpZGdlIGRyaXZlciBpcyAqbm90KiB3cml0dGVuIGZvciBhIG5ld2VyIERTUCBBUEkuCi0g KiAgRW5zdXJlczoKLSAqICAgICAgQWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBkZXYgb2Jq ZWN0J3MgZnhuIGludGVyZmFjZSBhcmUgbm90IE5VTEwuCi0gKi8KLXN0YXRpYyB2b2lkIHN0b3Jl X2ludGVyZmFjZV9meG5zKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqZHJ2X2Z4bnMsCi0J CQkJIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zKQotewotCXUzMiBicmlk Z2VfdmVyc2lvbjsKLQotCS8qIExvY2FsIGhlbHBlciBtYWNybzogKi8KLSNkZWZpbmUgIFNUT1JF X0ZYTihjYXN0LCBwZm4pIFwKLQkoaW50Zl9meG5zLT5wZm4gPSAoKGRydl9meG5zLT5wZm4gIT0g TlVMTCkgPyBkcnZfZnhucy0+cGZuIDogXAotCQkJICAgKGNhc3QpZnhuX25vdF9pbXBsZW1lbnRl ZCkpCi0KLQlicmlkZ2VfdmVyc2lvbiA9IE1BS0VWRVJTSU9OKGRydl9meG5zLT5icmRfYXBpX21h am9yX3ZlcnNpb24sCi0JCQkJICAgICBkcnZfZnhucy0+YnJkX2FwaV9taW5vcl92ZXJzaW9uKTsK LQlpbnRmX2Z4bnMtPmJyZF9hcGlfbWFqb3JfdmVyc2lvbiA9IGRydl9meG5zLT5icmRfYXBpX21h am9yX3ZlcnNpb247Ci0JaW50Zl9meG5zLT5icmRfYXBpX21pbm9yX3ZlcnNpb24gPSBkcnZfZnhu cy0+YnJkX2FwaV9taW5vcl92ZXJzaW9uOwotCS8qIEluc3RhbGwgZnVuY3Rpb25zIHVwIHRvIERT UCBBUEkgdmVyc2lvbiAuODAgKGZpcnN0IGFscGhhKTogKi8KLQlpZiAoYnJpZGdlX3ZlcnNpb24g PiAwKSB7Ci0JCVNUT1JFX0ZYTihmeG5fZGV2X2NyZWF0ZSwgZGV2X2NyZWF0ZSk7Ci0JCVNUT1JF X0ZYTihmeG5fZGV2X2Rlc3Ryb3ksIGRldl9kZXN0cm95KTsKLQkJU1RPUkVfRlhOKGZ4bl9kZXZf Y3RybCwgZGV2X2NudHJsKTsKLQkJU1RPUkVfRlhOKGZ4bl9icmRfbW9uaXRvciwgYnJkX21vbml0 b3IpOwotCQlTVE9SRV9GWE4oZnhuX2JyZF9zdGFydCwgYnJkX3N0YXJ0KTsKLQkJU1RPUkVfRlhO KGZ4bl9icmRfc3RvcCwgYnJkX3N0b3ApOwotCQlTVE9SRV9GWE4oZnhuX2JyZF9zdGF0dXMsIGJy ZF9zdGF0dXMpOwotCQlTVE9SRV9GWE4oZnhuX2JyZF9yZWFkLCBicmRfcmVhZCk7Ci0JCVNUT1JF X0ZYTihmeG5fYnJkX3dyaXRlLCBicmRfd3JpdGUpOwotCQlTVE9SRV9GWE4oZnhuX2JyZF9zZXRz dGF0ZSwgYnJkX3NldF9zdGF0ZSk7Ci0JCVNUT1JFX0ZYTihmeG5fYnJkX21lbWNvcHksIGJyZF9t ZW1fY29weSk7Ci0JCVNUT1JFX0ZYTihmeG5fYnJkX21lbXdyaXRlLCBicmRfbWVtX3dyaXRlKTsK LQkJU1RPUkVfRlhOKGZ4bl9icmRfbWVtbWFwLCBicmRfbWVtX21hcCk7Ci0JCVNUT1JFX0ZYTihm eG5fYnJkX21lbXVubWFwLCBicmRfbWVtX3VuX21hcCk7Ci0JCVNUT1JFX0ZYTihmeG5fY2hubF9j cmVhdGUsIGNobmxfY3JlYXRlKTsKLQkJU1RPUkVfRlhOKGZ4bl9jaG5sX2Rlc3Ryb3ksIGNobmxf ZGVzdHJveSk7Ci0JCVNUT1JFX0ZYTihmeG5fY2hubF9vcGVuLCBjaG5sX29wZW4pOwotCQlTVE9S RV9GWE4oZnhuX2NobmxfY2xvc2UsIGNobmxfY2xvc2UpOwotCQlTVE9SRV9GWE4oZnhuX2Nobmxf YWRkaW9yZXEsIGNobmxfYWRkX2lvX3JlcSk7Ci0JCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpb2Ms IGNobmxfZ2V0X2lvYyk7Ci0JCVNUT1JFX0ZYTihmeG5fY2hubF9jYW5jZWxpbywgY2hubF9jYW5j ZWxfaW8pOwotCQlTVE9SRV9GWE4oZnhuX2NobmxfZmx1c2hpbywgY2hubF9mbHVzaF9pbyk7Ci0J CVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpbmZvLCBjaG5sX2dldF9pbmZvKTsKLQkJU1RPUkVfRlhO KGZ4bl9jaG5sX2dldG1ncmluZm8sIGNobmxfZ2V0X21ncl9pbmZvKTsKLQkJU1RPUkVfRlhOKGZ4 bl9jaG5sX2lkbGUsIGNobmxfaWRsZSk7Ci0JCVNUT1JFX0ZYTihmeG5fY2hubF9yZWdpc3Rlcm5v dGlmeSwgY2hubF9yZWdpc3Rlcl9ub3RpZnkpOwotCQlTVE9SRV9GWE4oZnhuX2lvX2NyZWF0ZSwg aW9fY3JlYXRlKTsKLQkJU1RPUkVfRlhOKGZ4bl9pb19kZXN0cm95LCBpb19kZXN0cm95KTsKLQkJ U1RPUkVfRlhOKGZ4bl9pb19vbmxvYWRlZCwgaW9fb25fbG9hZGVkKTsKLQkJU1RPUkVfRlhOKGZ4 bl9pb19nZXRwcm9jbG9hZCwgaW9fZ2V0X3Byb2NfbG9hZCk7Ci0JCVNUT1JFX0ZYTihmeG5fbXNn X2NyZWF0ZSwgbXNnX2NyZWF0ZSk7Ci0JCVNUT1JFX0ZYTihmeG5fbXNnX2NyZWF0ZXF1ZXVlLCBt c2dfY3JlYXRlX3F1ZXVlKTsKLQkJU1RPUkVfRlhOKGZ4bl9tc2dfZGVsZXRlLCBtc2dfZGVsZXRl KTsKLQkJU1RPUkVfRlhOKGZ4bl9tc2dfZGVsZXRlcXVldWUsIG1zZ19kZWxldGVfcXVldWUpOwot CQlTVE9SRV9GWE4oZnhuX21zZ19nZXQsIG1zZ19nZXQpOwotCQlTVE9SRV9GWE4oZnhuX21zZ19w dXQsIG1zZ19wdXQpOwotCQlTVE9SRV9GWE4oZnhuX21zZ19yZWdpc3Rlcm5vdGlmeSwgbXNnX3Jl Z2lzdGVyX25vdGlmeSk7Ci0JCVNUT1JFX0ZYTihmeG5fbXNnX3NldHF1ZXVlaWQsIG1zZ19zZXRf cXVldWVfaWQpOwotCX0KLQkvKiBBZGQgY29kZSBmb3IgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25z IGluIG5ld2VyQnJpZGdlIHZlcnNpb25zIGhlcmUgKi8KLSN1bmRlZiAgU1RPUkVfRlhOCi19CmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYyBiL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RtbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBmY2Y1NjRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9wbWdyL2RtbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg3ICswLDAgQEAKLS8qCi0gKiBkbW0u YwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJ IE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBUaGUgRHluYW1pYyBNZW1vcnkgTWFuYWdlciAoRE1N KSBtb2R1bGUgbWFuYWdlcyB0aGUgRFNQIFZpcnR1YWwgYWRkcmVzcwotICogc3BhY2UgdGhhdCBj YW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIGFueSBNUFUgYnVmZmVyIG9yIG1lbW9yeSByZWdpb24K LSAqCi0gKiBOb3RlczoKLSAqICAgUmVnaW9uOiBHZW5lcmljIG1lbW9yeSBlbnRpdGl5IGhhdmlu ZyBhIHN0YXJ0IGFkZHJlc3MgYW5kIGEgc2l6ZQotICogICBDaHVuazogIFJlc2VydmVkIHJlZ2lv bgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMu Ci0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQg YGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFO VElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaG9z dF9vcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJ T1MgQnJpZGdlICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLwotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgotCi0v KiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1 Y3R1cmVzLCBUeXBlZGVmcyAqLwotI2RlZmluZSBETU1fQUREUl9WSVJUVUFMKGEpIFwKLQkoKChz dHJ1Y3QgbWFwX3BhZ2UgKikoYSkgLSB2aXJ0dWFsX21hcHBpbmdfdGFibGUpICogUEdfU0laRTRL ICtcCi0JZHluX21lbV9tYXBfYmVnKQotI2RlZmluZSBETU1fQUREUl9UT19JTkRFWChhKSAoKChh KSAtIGR5bl9tZW1fbWFwX2JlZykgLyBQR19TSVpFNEspCi0KLS8qIERNTSBNZ3IgKi8KLXN0cnVj dCBkbW1fb2JqZWN0IHsKLQkvKiBEbW0gTG9jayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3Mg bWVtIG1hbmFnZXIgZm9yCi0JICogbXVsdGktdGhyZWFkcy4gKi8KLQlzcGlubG9ja190IGRtbV9s b2NrOwkvKiBMb2NrIHRvIGFjY2VzcyBkbW0gbWdyICovCi19OwotCi1zdHJ1Y3QgbWFwX3BhZ2Ug ewotCXUzMiByZWdpb25fc2l6ZToxNTsKLQl1MzIgbWFwcGVkX3NpemU6MTU7Ci0JdTMyIHJlc2Vy dmVkOjE7Ci0JdTMyIG1hcHBlZDoxOwotfTsKLQotLyogIENyZWF0ZSB0aGUgZnJlZSBsaXN0ICov Ci1zdGF0aWMgc3RydWN0IG1hcF9wYWdlICp2aXJ0dWFsX21hcHBpbmdfdGFibGU7Ci1zdGF0aWMg dTMyIGZyZWVfcmVnaW9uOwkJLyogVGhlIGluZGV4IG9mIGZyZWUgcmVnaW9uICovCi1zdGF0aWMg dTMyIGZyZWVfc2l6ZTsKLXN0YXRpYyB1MzIgZHluX21lbV9tYXBfYmVnOwkvKiBUaGUgQmVnaW5u aW5nIG9mIGR5bmFtaWMgbWVtb3J5IG1hcHBpbmcgKi8KLXN0YXRpYyB1MzIgdGFibGVfc2l6ZTsJ CS8qIFRoZSBzaXplIG9mIHZpcnQgYW5kIHBoeXMgcGFnZXMgdGFibGVzICovCi0KLS8qICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzICovCi1z dGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfcmVnaW9uKHUzMiBhZGRyKTsKLXN0YXRpYyBzdHJ1 Y3QgbWFwX3BhZ2UgKmdldF9mcmVlX3JlZ2lvbih1MzIgbGVuKTsKLXN0YXRpYyBzdHJ1Y3QgbWFw X3BhZ2UgKmdldF9tYXBwZWRfcmVnaW9uKHUzMiBhZGRycyk7Ci0KLS8qICA9PT09PT09PSBkbW1f Y3JlYXRlX3RhYmxlcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSB0YWJs ZSB0byBob2xkIHRoZSBpbmZvcm1hdGlvbiBvZiBwaHlzaWNhbCBhZGRyZXNzCi0gKiAgICAgIHRo ZSBidWZmZXIgcGFnZXMgdGhhdCBpcyBwYXNzZWQgYnkgdGhlIHVzZXIsIGFuZCB0aGUgdGFibGUK LSAqICAgICAgdG8gaG9sZCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHZpcnR1YWwgbWVtb3J5IHRo YXQgaXMgcmVzZXJ2ZWQKLSAqICAgICAgZm9yIERTUC4KLSAqLwotaW50IGRtbV9jcmVhdGVfdGFi bGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLCB1MzIgYWRkciwgdTMyIHNpemUpCi17Ci0J c3RydWN0IGRtbV9vYmplY3QgKmRtbV9vYmogPSAoc3RydWN0IGRtbV9vYmplY3QgKilkbW1fbWdy OwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3RhdHVzID0gZG1tX2RlbGV0ZV90YWJsZXMoZG1tX29i aik7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJZHluX21lbV9tYXBfYmVnID0gYWRkcjsKLQkJdGFibGVf c2l6ZSA9IFBHX0FMSUdOX0hJR0goc2l6ZSwgUEdfU0laRTRLKSAvIFBHX1NJWkU0SzsKLQkJLyog IENyZWF0ZSB0aGUgZnJlZSBsaXN0ICovCi0JCXZpcnR1YWxfbWFwcGluZ190YWJsZSA9IF9fdm1h bGxvYyh0YWJsZV9zaXplICoKLQkJCQlzaXplb2Yoc3RydWN0IG1hcF9wYWdlKSwgR0ZQX0tFUk5F TCB8Ci0JCQkJX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKLQkJaWYg KHZpcnR1YWxfbWFwcGluZ190YWJsZSA9PSBOVUxMKQotCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJ ZWxzZSB7Ci0JCQkvKiBPbiBzdWNjZXNzZnVsIGFsbG9jYXRpb24sCi0JCQkgKiBhbGwgZW50cmll cyBhcmUgemVybyAoJ2ZyZWUnKSAqLwotCQkJZnJlZV9yZWdpb24gPSAwOwotCQkJZnJlZV9zaXpl ID0gdGFibGVfc2l6ZSAqIFBHX1NJWkU0SzsKLQkJCXZpcnR1YWxfbWFwcGluZ190YWJsZVswXS5y ZWdpb25fc2l6ZSA9IHRhYmxlX3NpemU7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhdHVzKQotCQlwcl9l cnIoIiVzOiBmYWlsdXJlLCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0KLQly ZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRtbV9jcmVhdGUgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBDcmVhdGUgYSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VyIG9i amVjdC4KLSAqLwotaW50IGRtbV9jcmVhdGUoc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdl ciwKLQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkgICAgICBjb25zdCBz dHJ1Y3QgZG1tX21ncmF0dHJzICptZ3JfYXR0cnRzKQotewotCXN0cnVjdCBkbW1fb2JqZWN0ICpk bW1fb2JqID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQotCSpkbW1fbWFuYWdlciA9IE5VTEw7 Ci0JLyogY3JlYXRlLCB6ZXJvLCBhbmQgdGFnIGEgY21tIG1nciBvYmplY3QgKi8KLQlkbW1fb2Jq ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtbV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAo ZG1tX29iaiAhPSBOVUxMKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZkbW1fb2JqLT5kbW1fbG9jayk7 Ci0JCSpkbW1fbWFuYWdlciA9IGRtbV9vYmo7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVOT01F TTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRtbV9kZXN0 cm95ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVsZWFzZSB0aGUgY29tbXVuaWNh dGlvbiBtZW1vcnkgbWFuYWdlciByZXNvdXJjZXMuCi0gKi8KLWludCBkbW1fZGVzdHJveShzdHJ1 Y3QgZG1tX29iamVjdCAqZG1tX21ncikKLXsKLQlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9 IChzdHJ1Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAo ZG1tX21ncikgewotCQlzdGF0dXMgPSBkbW1fZGVsZXRlX3RhYmxlcyhkbW1fb2JqKTsKLQkJaWYg KCFzdGF0dXMpCi0JCQlrZnJlZShkbW1fb2JqKTsKLQl9IGVsc2UKLQkJc3RhdHVzID0gLUVGQVVM VDsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZG1tX2RlbGV0ZV90 YWJsZXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEZWxldGUgRE1NIFRhYmxlcy4K LSAqLwotaW50IGRtbV9kZWxldGVfdGFibGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQot ewotCWludCBzdGF0dXMgPSAwOwotCi0JLyogRGVsZXRlIGFsbCBETU0gdGFibGVzICovCi0JaWYg KGRtbV9tZ3IpCi0JCXZmcmVlKHZpcnR1YWxfbWFwcGluZ190YWJsZSk7Ci0JZWxzZQotCQlzdGF0 dXMgPSAtRUZBVUxUOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZG1t X2dldF9oYW5kbGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXR1cm4gdGhlIGR5 bmFtaWMgbWVtb3J5IG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KLSAqICAgICAgVGhp cyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgotICovCi1pbnQg ZG1tX2dldF9oYW5kbGUodm9pZCAqaHByb2Nlc3Nvciwgc3RydWN0IGRtbV9vYmplY3QgKipkbW1f bWFuYWdlcikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9v Ymo7Ci0KLQlpZiAoaHByb2Nlc3NvciAhPSBOVUxMKQotCQlzdGF0dXMgPSBwcm9jX2dldF9kZXZf b2JqZWN0KGhwcm9jZXNzb3IsICZoZGV2X29iaik7Ci0JZWxzZQotCQloZGV2X29iaiA9IGRldl9n ZXRfZmlyc3QoKTsJLyogZGVmYXVsdCAqLwotCi0JaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRl dl9nZXRfZG1tX21ncihoZGV2X29iaiwgZG1tX21hbmFnZXIpOwotCi0JcmV0dXJuIHN0YXR1czsK LX0KLQotLyoKLSAqICA9PT09PT09PSBkbW1fbWFwX21lbW9yeSA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIEFkZCBhIG1hcHBpbmcgYmxvY2sgdG8gdGhlIHJlc2VydmVkIGNodW5rLiBE TU0gYXNzdW1lcyB0aGF0IHRoaXMgYmxvY2sKLSAqICB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgRFNQ L0lWQSdzIGFkZHJlc3Mgc3BhY2UuIERNTSByZXR1cm5zIGFuIGVycm9yIGlmIGEKLSAqICBtYXBw aW5nIG92ZXJsYXBzIGFub3RoZXIgb25lLiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgaW5mbyB0 aGF0IHdpbGwgYmUKLSAqICByZXF1aXJlZCBsYXRlciB3aGlsZSB1bm1hcHBpbmcgdGhlIGJsb2Nr LgotICovCi1pbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUz MiBhZGRyLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IChzdHJ1 Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7Ci0Jc3RydWN0IG1hcF9wYWdlICpjaHVuazsKLQlpbnQg c3RhdHVzID0gMDsKLQotCXNwaW5fbG9jaygmZG1tX29iai0+ZG1tX2xvY2spOwotCS8qIEZpbmQg dGhlIFJlc2VydmVkIG1lbW9yeSBjaHVuayBjb250YWluaW5nIHRoZSBEU1AgYmxvY2sgdG8KLQkg KiBiZSBtYXBwZWQgKi8KLQljaHVuayA9IChzdHJ1Y3QgbWFwX3BhZ2UgKilnZXRfcmVnaW9uKGFk ZHIpOwotCWlmIChjaHVuayAhPSBOVUxMKSB7Ci0JCS8qIE1hcmsgdGhlIHJlZ2lvbiAnbWFwcGVk JywgbGVhdmUgdGhlICdyZXNlcnZlZCcgaW5mbyBhcy1pcyAqLwotCQljaHVuay0+bWFwcGVkID0g dHJ1ZTsKLQkJY2h1bmstPm1hcHBlZF9zaXplID0gKHNpemUgLyBQR19TSVpFNEspOwotCX0gZWxz ZQotCQlzdGF0dXMgPSAtRU5PRU5UOwotCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7 Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzIGRtbV9tZ3IgJXAsIGFkZHIgJXgsIHNpemUgJXhcblx0 c3RhdHVzICV4LCBjaHVuayAlcCIsCi0JCQlfX2Z1bmNfXywgZG1tX21nciwgYWRkciwgc2l6ZSwg c3RhdHVzLCBjaHVuayk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IGRtbV9yZXNlcnZlX21lbW9yeSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlc2Vy dmUgYSBjaHVuayBvZiB2aXJ0dWFsbHkgY29udGlndW91cyBEU1AvSVZBIGFkZHJlc3Mgc3BhY2Uu Ci0gKi8KLWludCBkbW1fcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3Is IHUzMiBzaXplLAotCQkJICAgICAgdTMyICpwcnN2X2FkZHIpCi17Ci0JaW50IHN0YXR1cyA9IDA7 Ci0Jc3RydWN0IGRtbV9vYmplY3QgKmRtbV9vYmogPSAoc3RydWN0IGRtbV9vYmplY3QgKilkbW1f bWdyOwotCXN0cnVjdCBtYXBfcGFnZSAqbm9kZTsKLQl1MzIgcnN2X2FkZHIgPSAwOwotCXUzMiBy c3Zfc2l6ZSA9IDA7Ci0KLQlzcGluX2xvY2soJmRtbV9vYmotPmRtbV9sb2NrKTsKLQotCS8qIFRy eSB0byBnZXQgYSBEU1AgY2h1bmsgZnJvbSB0aGUgZnJlZSBsaXN0ICovCi0Jbm9kZSA9IGdldF9m cmVlX3JlZ2lvbihzaXplKTsKLQlpZiAobm9kZSAhPSBOVUxMKSB7Ci0JCS8qICBEU1AgY2h1bmsg b2YgZ2l2ZW4gc2l6ZSBpcyBhdmFpbGFibGUuICovCi0JCXJzdl9hZGRyID0gRE1NX0FERFJfVklS VFVBTChub2RlKTsKLQkJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgZW50cmllcyB0byB1c2UgKi8K LQkJcnN2X3NpemUgPSBzaXplIC8gUEdfU0laRTRLOwotCQlpZiAocnN2X3NpemUgPCBub2RlLT5y ZWdpb25fc2l6ZSkgewotCQkJLyogTWFyayByZW1haW5kZXIgb2YgZnJlZSByZWdpb24gKi8KLQkJ CW5vZGVbcnN2X3NpemVdLm1hcHBlZCA9IGZhbHNlOwotCQkJbm9kZVtyc3Zfc2l6ZV0ucmVzZXJ2 ZWQgPSBmYWxzZTsKLQkJCW5vZGVbcnN2X3NpemVdLnJlZ2lvbl9zaXplID0KLQkJCSAgICBub2Rl LT5yZWdpb25fc2l6ZSAtIHJzdl9zaXplOwotCQkJbm9kZVtyc3Zfc2l6ZV0ubWFwcGVkX3NpemUg PSAwOwotCQl9Ci0JCS8qICBnZXRfcmVnaW9uIHdpbGwgcmV0dXJuIGZpcnN0IGZpdCBjaHVuay4g QnV0IHdlIG9ubHkgdXNlIHdoYXQKLQkJICAgaXMgcmVxdWVzdGVkLiAqLwotCQlub2RlLT5tYXBw ZWQgPSBmYWxzZTsKLQkJbm9kZS0+cmVzZXJ2ZWQgPSB0cnVlOwotCQlub2RlLT5yZWdpb25fc2l6 ZSA9IHJzdl9zaXplOwotCQlub2RlLT5tYXBwZWRfc2l6ZSA9IDA7Ci0JCS8qIFJldHVybiB0aGUg Y2h1bmsncyBzdGFydGluZyBhZGRyZXNzICovCi0JCSpwcnN2X2FkZHIgPSByc3ZfYWRkcjsKLQl9 IGVsc2UKLQkJLypkU1AgY2h1bmsgb2YgZ2l2ZW4gc2l6ZSBpcyBub3QgYXZhaWxhYmxlICovCi0J CXN0YXR1cyA9IC1FTk9NRU07Ci0KLQlzcGluX3VubG9jaygmZG1tX29iai0+ZG1tX2xvY2spOwot Ci0JZGV2X2RiZyhicmlkZ2UsICIlcyBkbW1fbWdyICVwLCBzaXplICV4LCBwcnN2X2FkZHIgJXBc blx0c3RhdHVzICV4LCByc3ZfYWRkciAleCwgcnN2X3NpemUgJXhcbiIsCi0JCQlfX2Z1bmNfXywg ZG1tX21nciwgc2l6ZSwKLQkJCXByc3ZfYWRkciwgc3RhdHVzLCByc3ZfYWRkciwgcnN2X3NpemUp OwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkbW1fdW5fbWFwX21l bW9yeSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlbW92ZSB0aGUgbWFwcGVkIGJs b2NrIGZyb20gdGhlIHJlc2VydmVkIGNodW5rLgotICovCi1pbnQgZG1tX3VuX21hcF9tZW1vcnko c3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLCB1MzIgKnBzaXplKQotewotCXN0 cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsK LQlzdHJ1Y3QgbWFwX3BhZ2UgKmNodW5rOwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3Bpbl9sb2Nr KCZkbW1fb2JqLT5kbW1fbG9jayk7Ci0JY2h1bmsgPSBnZXRfbWFwcGVkX3JlZ2lvbihhZGRyKTsK LQlpZiAoY2h1bmsgPT0gTlVMTCkKLQkJc3RhdHVzID0gLUVOT0VOVDsKLQotCWlmICghc3RhdHVz KSB7Ci0JCS8qIFVubWFwIHRoZSByZWdpb24gKi8KLQkJKnBzaXplID0gY2h1bmstPm1hcHBlZF9z aXplICogUEdfU0laRTRLOwotCQljaHVuay0+bWFwcGVkID0gZmFsc2U7Ci0JCWNodW5rLT5tYXBw ZWRfc2l6ZSA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7Ci0KLQlk ZXZfZGJnKGJyaWRnZSwgIiVzOiBkbW1fbWdyICVwLCBhZGRyICV4LCBwc2l6ZSAlcFxuXHRzdGF0 dXMgJXgsIGNodW5rICVwXG4iLAotCQkJX19mdW5jX18sIGRtbV9tZ3IsIGFkZHIsIHBzaXplLCBz dGF0dXMsIGNodW5rKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0g ZG1tX3VuX3Jlc2VydmVfbWVtb3J5ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRnJl ZSBhIGNodW5rIG9mIHJlc2VydmVkIERTUC9JVkEgYWRkcmVzcyBzcGFjZS4KLSAqLwotaW50IGRt bV91bl9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21nciwgdTMyIHJzdl9h ZGRyKQotewotCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0 ICopZG1tX21ncjsKLQlzdHJ1Y3QgbWFwX3BhZ2UgKmNodW5rOwotCXUzMiBpOwotCWludCBzdGF0 dXMgPSAwOwotCXUzMiBjaHVua19zaXplOwotCi0Jc3Bpbl9sb2NrKCZkbW1fb2JqLT5kbW1fbG9j ayk7Ci0KLQkvKiBGaW5kIHRoZSBjaHVuayBjb250YWluaW5nIHRoZSByZXNlcnZlZCBhZGRyZXNz ICovCi0JY2h1bmsgPSBnZXRfbWFwcGVkX3JlZ2lvbihyc3ZfYWRkcik7Ci0JaWYgKGNodW5rID09 IE5VTEwpCi0JCXN0YXR1cyA9IC1FTk9FTlQ7Ci0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBGcmVl IGFsbCB0aGUgbWFwcGVkIHBhZ2VzIGZvciB0aGlzIHJlc2VydmVkIHJlZ2lvbiAqLwotCQlpID0g MDsKLQkJd2hpbGUgKGkgPCBjaHVuay0+cmVnaW9uX3NpemUpIHsKLQkJCWlmIChjaHVua1tpXS5t YXBwZWQpIHsKLQkJCQkvKiBSZW1vdmUgbWFwcGluZyBmcm9tIHRoZSBwYWdlIHRhYmxlcy4gKi8K LQkJCQljaHVua19zaXplID0gY2h1bmtbaV0ubWFwcGVkX3NpemU7Ci0JCQkJLyogQ2xlYXIgdGhl IG1hcHBpbmcgZmxhZ3MgKi8KLQkJCQljaHVua1tpXS5tYXBwZWQgPSBmYWxzZTsKLQkJCQljaHVu a1tpXS5tYXBwZWRfc2l6ZSA9IDA7Ci0JCQkJaSArPSBjaHVua19zaXplOwotCQkJfSBlbHNlCi0J CQkJaSsrOwotCQl9Ci0JCS8qIENsZWFyIHRoZSBmbGFncyAobWFyayB0aGUgcmVnaW9uICdmcmVl JykgKi8KLQkJY2h1bmstPnJlc2VydmVkID0gZmFsc2U7Ci0JCS8qIE5PVEU6IFdlIGRvIE5PVCBj b2FsZXNjZSBmcmVlIHJlZ2lvbnMgaGVyZS4KLQkJICogRnJlZSByZWdpb25zIGFyZSBjb2FsZXNj ZWQgaW4gZ2V0X3JlZ2lvbigpLCBhcyBpdCB0cmF2ZXJzZXMKLQkJICp0aGUgd2hvbGUgbWFwcGlu ZyB0YWJsZQotCQkgKi8KLQl9Ci0Jc3Bpbl91bmxvY2soJmRtbV9vYmotPmRtbV9sb2NrKTsKLQot CWRldl9kYmcoYnJpZGdlLCAiJXM6IGRtbV9tZ3IgJXAsIHJzdl9hZGRyICV4XG5cdHN0YXR1cyAl eCBjaHVuayAlcCIsCi0JCV9fZnVuY19fLCBkbW1fbWdyLCByc3ZfYWRkciwgc3RhdHVzLCBjaHVu ayk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGdldF9yZWdpb24g PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXR1cm5zIGEgcmVnaW9uIGNvbnRhaW5p bmcgdGhlIHNwZWNpZmllZCBtZW1vcnkgcmVnaW9uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX3Bh Z2UgKmdldF9yZWdpb24odTMyIGFkZHIpCi17Ci0Jc3RydWN0IG1hcF9wYWdlICpjdXJyX3JlZ2lv biA9IE5VTEw7Ci0JdTMyIGkgPSAwOwotCi0JaWYgKHZpcnR1YWxfbWFwcGluZ190YWJsZSAhPSBO VUxMKSB7Ci0JCS8qIGZpbmQgcGFnZSBtYXBwZWQgYnkgdGhpcyBhZGRyZXNzICovCi0JCWkgPSBE TU1fQUREUl9UT19JTkRFWChhZGRyKTsKLQkJaWYgKGkgPCB0YWJsZV9zaXplKQotCQkJY3Vycl9y ZWdpb24gPSB2aXJ0dWFsX21hcHBpbmdfdGFibGUgKyBpOwotCX0KLQotCWRldl9kYmcoYnJpZGdl LCAiJXM6IGN1cnJfcmVnaW9uICVwLCBmcmVlX3JlZ2lvbiAlZCwgZnJlZV9zaXplICVkXG4iLAot CQlfX2Z1bmNfXywgY3Vycl9yZWdpb24sIGZyZWVfcmVnaW9uLCBmcmVlX3NpemUpOwotCXJldHVy biBjdXJyX3JlZ2lvbjsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnZXRfZnJlZV9yZWdpb24gPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogIFJldHVybnMgdGhlIHJlcXVlc3RlZCBmcmVlIHJlZ2lv bgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfZnJlZV9yZWdpb24odTMyIGxlbikK LXsKLQlzdHJ1Y3QgbWFwX3BhZ2UgKmN1cnJfcmVnaW9uID0gTlVMTDsKLQl1MzIgaSA9IDA7Ci0J dTMyIHJlZ2lvbl9zaXplID0gMDsKLQl1MzIgbmV4dF9pID0gMDsKLQotCWlmICh2aXJ0dWFsX21h cHBpbmdfdGFibGUgPT0gTlVMTCkKLQkJcmV0dXJuIGN1cnJfcmVnaW9uOwotCWlmIChsZW4gPiBm cmVlX3NpemUpIHsKLQkJLyogRmluZCB0aGUgbGFyZ2VzdCBmcmVlIHJlZ2lvbgotCQkgKiAoY29h bGVzY2UgZHVyaW5nIHRoZSB0cmF2ZXJzYWwpICovCi0JCXdoaWxlIChpIDwgdGFibGVfc2l6ZSkg ewotCQkJcmVnaW9uX3NpemUgPSB2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVnaW9uX3NpemU7 Ci0JCQluZXh0X2kgPSBpICsgcmVnaW9uX3NpemU7Ci0JCQlpZiAodmlydHVhbF9tYXBwaW5nX3Rh YmxlW2ldLnJlc2VydmVkID09IGZhbHNlKSB7Ci0JCQkJLyogQ29hbGVzY2UsIGlmIHBvc3NpYmxl ICovCi0JCQkJaWYgKG5leHRfaSA8IHRhYmxlX3NpemUgJiYKLQkJCQkgICAgdmlydHVhbF9tYXBw aW5nX3RhYmxlW25leHRfaV0ucmVzZXJ2ZWQKLQkJCQkgICAgPT0gZmFsc2UpIHsKLQkJCQkJdmly dHVhbF9tYXBwaW5nX3RhYmxlW2ldLnJlZ2lvbl9zaXplICs9Ci0JCQkJCSAgICB2aXJ0dWFsX21h cHBpbmdfdGFibGUKLQkJCQkJICAgIFtuZXh0X2ldLnJlZ2lvbl9zaXplOwotCQkJCQljb250aW51 ZTsKLQkJCQl9Ci0JCQkJcmVnaW9uX3NpemUgKj0gUEdfU0laRTRLOwotCQkJCWlmIChyZWdpb25f c2l6ZSA+IGZyZWVfc2l6ZSkgewotCQkJCQlmcmVlX3JlZ2lvbiA9IGk7Ci0JCQkJCWZyZWVfc2l6 ZSA9IHJlZ2lvbl9zaXplOwotCQkJCX0KLQkJCX0KLQkJCWkgPSBuZXh0X2k7Ci0JCX0KLQl9Ci0J aWYgKGxlbiA8PSBmcmVlX3NpemUpIHsKLQkJY3Vycl9yZWdpb24gPSB2aXJ0dWFsX21hcHBpbmdf dGFibGUgKyBmcmVlX3JlZ2lvbjsKLQkJZnJlZV9yZWdpb24gKz0gKGxlbiAvIFBHX1NJWkU0Syk7 Ci0JCWZyZWVfc2l6ZSAtPSBsZW47Ci0JfQotCXJldHVybiBjdXJyX3JlZ2lvbjsKLX0KLQotLyoK LSAqICA9PT09PT09PSBnZXRfbWFwcGVkX3JlZ2lvbiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgUmV0dXJucyB0aGUgcmVxdWVzdGVkbWFwcGVkIHJlZ2lvbgotICovCi1zdGF0aWMgc3RydWN0 IG1hcF9wYWdlICpnZXRfbWFwcGVkX3JlZ2lvbih1MzIgYWRkcnMpCi17Ci0JdTMyIGkgPSAwOwot CXN0cnVjdCBtYXBfcGFnZSAqY3Vycl9yZWdpb24gPSBOVUxMOwotCi0JaWYgKHZpcnR1YWxfbWFw cGluZ190YWJsZSA9PSBOVUxMKQotCQlyZXR1cm4gY3Vycl9yZWdpb247Ci0KLQlpID0gRE1NX0FE RFJfVE9fSU5ERVgoYWRkcnMpOwotCWlmIChpIDwgdGFibGVfc2l6ZSAmJiAodmlydHVhbF9tYXBw aW5nX3RhYmxlW2ldLm1hcHBlZCB8fAotCQkJICAgICAgIHZpcnR1YWxfbWFwcGluZ190YWJsZVtp XS5yZXNlcnZlZCkpCi0JCWN1cnJfcmVnaW9uID0gdmlydHVhbF9tYXBwaW5nX3RhYmxlICsgaTsK LQlyZXR1cm4gY3Vycl9yZWdpb247Ci19Ci0KLSNpZmRlZiBEU1BfRE1NX0RFQlVHCi11MzIgZG1t X21lbV9tYXBfZHVtcChzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncikKLXsKLQlzdHJ1Y3QgbWFw X3BhZ2UgKmN1cnJfbm9kZSA9IE5VTEw7Ci0JdTMyIGk7Ci0JdTMyIGZyZWVtZW0gPSAwOwotCXUz MiBiaWdzaXplID0gMDsKLQotCXNwaW5fbG9jaygmZG1tX21nci0+ZG1tX2xvY2spOwotCi0JaWYg KHZpcnR1YWxfbWFwcGluZ190YWJsZSAhPSBOVUxMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0YWJs ZV9zaXplOyBpICs9Ci0JCSAgICAgdmlydHVhbF9tYXBwaW5nX3RhYmxlW2ldLnJlZ2lvbl9zaXpl KSB7Ci0JCQljdXJyX25vZGUgPSB2aXJ0dWFsX21hcHBpbmdfdGFibGUgKyBpOwotCQkJaWYgKGN1 cnJfbm9kZS0+cmVzZXJ2ZWQpIHsKLQkJCQkvKnByaW50aygiUkVTRVJWRUQgc2l6ZSA9IDB4JXgs ICIKLQkJCQkgICAiTWFwIHNpemUgPSAweCV4XG4iLAotCQkJCSAgIChjdXJyX25vZGUtPnJlZ2lv bl9zaXplICogUEdfU0laRTRLKSwKLQkJCQkgICAoY3Vycl9ub2RlLT5tYXBwZWQgPT0gZmFsc2Up ID8gMCA6Ci0JCQkJICAgKGN1cnJfbm9kZS0+bWFwcGVkX3NpemUgKiBQR19TSVpFNEspKTsKLQkJ CQkgKi8KLQkJCX0gZWxzZSB7Ci0vKgkJCQlwcmludGsoIlVOUkVTRVJWRUQgc2l6ZSA9IDB4JXhc biIsCi0JCQkJCShjdXJyX25vZGUtPnJlZ2lvbl9zaXplICogUEdfU0laRTRLKSk7Ci0gKi8KLQkJ CQlmcmVlbWVtICs9IChjdXJyX25vZGUtPnJlZ2lvbl9zaXplICogUEdfU0laRTRLKTsKLQkJCQlp ZiAoY3Vycl9ub2RlLT5yZWdpb25fc2l6ZSA+IGJpZ3NpemUpCi0JCQkJCWJpZ3NpemUgPSBjdXJy X25vZGUtPnJlZ2lvbl9zaXplOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZkbW1fbWdy LT5kbW1fbG9jayk7Ci0JZGV2X2luZm8oYnJpZGdlLCAiVG90YWwgRFNQIFZBIEZSRUUgbWVtb3J5 ID0gJWQgTWJ5dGVzXG4iLAotCSAgICAgICBmcmVlbWVtIC8gKDEwMjQgKiAxMDI0KSk7Ci0JZGV2 X2luZm8oYnJpZGdlLCAiVG90YWwgRFNQIFZBIFVTRUQgbWVtb3J5PSAlZCBNYnl0ZXNcbiIsCi0J ICAgICAgICgoKHRhYmxlX3NpemUgKiBQR19TSVpFNEspIC0gZnJlZW1lbSkpIC8gKDEwMjQgKiAx MDI0KSk7Ci0JZGV2X2luZm8oYnJpZGdlLCAiRFNQIFZBIC0gQmlnZ2VzdCBGUkVFIGJsb2NrID0g JWQgTWJ5dGVzXG4iLAotCSAgICAgICAoYmlnc2l6ZSAqIFBHX1NJWkU0SyAvICgxMDI0ICogMTAy NCkpKTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvdGlkc3BicmlkZ2UvcG1nci9kc3BhcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9wbWdyL2RzcGFwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNjZjE3Li4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RzcGFwaS5jCisr KyAvZGV2L251bGwKQEAgLTEsMTg0MSArMCwwIEBACi0vKgotICogZHNwYXBpLmMKLSAqCi0gKiBE U1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nl c3NvcnMuCi0gKgotICogQ29tbW9uIERTUCBBUEkgZnVuY3Rpb25zLCBhbHNvIGluY2x1ZGVzIHRo ZSB3cmFwcGVyCi0gKiBmdW5jdGlvbnMgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSBEZXZpY2VJT0Nv bnRyb2wgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIElu c3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tB R0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1Q TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRl IDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5o PgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlv biBMYXllciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+Ci0KLS8qICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8 ZHNwYnJpZGdlL2NobmwuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+Ci0jaW5jbHVkZSA8 ZHNwYnJpZGdlL2Rydi5oPgotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KLSNpbmNsdWRl IDxkc3BicmlkZ2Uvc3RybS5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kaXNwLmg+Ci0j aW5jbHVkZSA8ZHNwYnJpZGdlL21nci5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+Ci0j aW5jbHVkZSA8ZHNwYnJpZGdlL3JtbS5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gT3RoZXJzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL21zZy5oPgotI2luY2x1 ZGUgPGRzcGJyaWRnZS9jbW0uaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaW8uaD4KLQotLyogIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvZHNwYXBpLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGNkLmg+Ci0KLSNpbmNsdWRl IDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCi0j ZGVmaW5lIE1BWF9UUkFDRUJVRkxFTiAyNTUKLSNkZWZpbmUgTUFYX0xPQURBUkdTICAgIDE2Ci0j ZGVmaW5lIE1BWF9OT0RFUyAgICAgICA2NAotI2RlZmluZSBNQVhfU1RSRUFNUyAgICAgMTYKLSNk ZWZpbmUgTUFYX0JVRlMJNjQKLQotLyogVXNlZCB0byBnZXQgZHNwYnJpZGdlIGlvY3RsIHRhYmxl ICovCi0jZGVmaW5lIERCX0dFVF9JT0NfVEFCTEUoY21kKQkoREJfR0VUX01PRFVMRShjbWQpID4+ IERCX01PRFVMRV9TSElGVCkKLQotLyogRGV2aWNlIElPQ3RsIGZ1bmN0aW9uIHBvaW50ZXIgKi8K LXN0cnVjdCBhcGlfY21kIHsKLQl1MzIoKmZ4bikgKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywg dm9pZCAqcHJfY3R4dCk7Ci0JdTMyIGluZGV4OwotfTsKLQotLyogIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KLXN0YXRpYyB1MzIgYXBpX2NfcmVmczsKLQot LyoKLSAqICBGdW5jdGlvbiB0YWJsZXMuCi0gKiAgVGhlIG9yZGVyIG9mIHRoZXNlIGZ1bmN0aW9u cyBNVVNUIGJlIHRoZSBzYW1lIGFzIHRoZSBvcmRlciBvZiB0aGUgY29tbWFuZAotICogIG51bWJl cnMgZGVmaW5lZCBpbiBkc3BhcGktaW9jdGwuaCAgVGhpcyBpcyBob3cgYW4gSU9DVEwgbnVtYmVy IGluIHVzZXIgbW9kZQotICogIHR1cm5zIGludG8gYSBmdW5jdGlvbiBjYWxsIGluIGtlcm5lbCBt b2RlLgotICovCi0KLS8qIE1HUiB3cmFwcGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBh cGlfY21kIG1ncl9jbWRbXSA9IHsKLQl7bWdyd3JhcF9lbnVtX25vZGVfaW5mb30sCS8qIE1HUl9F TlVNTk9ERV9JTkZPICovCi0Je21ncndyYXBfZW51bV9wcm9jX2luZm99LAkvKiBNR1JfRU5VTVBS T0NfSU5GTyAqLwotCXttZ3J3cmFwX3JlZ2lzdGVyX29iamVjdH0sCS8qIE1HUl9SRUdJU1RFUk9C SkVDVCAqLwotCXttZ3J3cmFwX3VucmVnaXN0ZXJfb2JqZWN0fSwJLyogTUdSX1VOUkVHSVNURVJP QkpFQ1QgKi8KLQl7bWdyd3JhcF93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzfSwJLyogTUdSX1dBSVQg Ki8KLQl7bWdyd3JhcF9nZXRfcHJvY2Vzc19yZXNvdXJjZXNfaW5mb30sCS8qIE1HUl9HRVRfUFJP Q19SRVMgKi8KLX07Ci0KLS8qIFBST0Mgd3JhcHBlciBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzdHJ1 Y3QgYXBpX2NtZCBwcm9jX2NtZFtdID0gewotCXtwcm9jd3JhcF9hdHRhY2h9LAkvKiBQUk9DX0FU VEFDSCAqLwotCXtwcm9jd3JhcF9jdHJsfSwJLyogUFJPQ19DVFJMICovCi0Je3Byb2N3cmFwX2Rl dGFjaH0sCS8qIFBST0NfREVUQUNIICovCi0Je3Byb2N3cmFwX2VudW1fbm9kZV9pbmZvfSwJLyog UFJPQ19FTlVNTk9ERSAqLwotCXtwcm9jd3JhcF9lbnVtX3Jlc291cmNlc30sCS8qIFBST0NfRU5V TVJFU09VUkNFUyAqLwotCXtwcm9jd3JhcF9nZXRfc3RhdGV9LAkvKiBQUk9DX0dFVF9TVEFURSAq LwotCXtwcm9jd3JhcF9nZXRfdHJhY2V9LAkvKiBQUk9DX0dFVF9UUkFDRSAqLwotCXtwcm9jd3Jh cF9sb2FkfSwJLyogUFJPQ19MT0FEICovCi0Je3Byb2N3cmFwX3JlZ2lzdGVyX25vdGlmeX0sCS8q IFBST0NfUkVHSVNURVJOT1RJRlkgKi8KLQl7cHJvY3dyYXBfc3RhcnR9LAkvKiBQUk9DX1NUQVJU ICovCi0Je3Byb2N3cmFwX3Jlc2VydmVfbWVtb3J5fSwJLyogUFJPQ19SU1ZNRU0gKi8KLQl7cHJv Y3dyYXBfdW5fcmVzZXJ2ZV9tZW1vcnl9LAkvKiBQUk9DX1VOUlNWTUVNICovCi0Je3Byb2N3cmFw X21hcH0sCQkvKiBQUk9DX01BUE1FTSAqLwotCXtwcm9jd3JhcF91bl9tYXB9LAkvKiBQUk9DX1VO TUFQTUVNICovCi0Je3Byb2N3cmFwX2ZsdXNoX21lbW9yeX0sCS8qIFBST0NfRkxVU0hNRU1PUlkg Ki8KLQl7cHJvY3dyYXBfc3RvcH0sCS8qIFBST0NfU1RPUCAqLwotCXtwcm9jd3JhcF9pbnZhbGlk YXRlX21lbW9yeX0sCS8qIFBST0NfSU5WQUxJREFURU1FTU9SWSAqLwotCXtwcm9jd3JhcF9iZWdp bl9kbWF9LAkvKiBQUk9DX0JFR0lORE1BICovCi0Je3Byb2N3cmFwX2VuZF9kbWF9LAkvKiBQUk9D X0VORERNQSAqLwotfTsKLQotLyogTk9ERSB3cmFwcGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHN0 cnVjdCBhcGlfY21kIG5vZGVfY21kW10gPSB7Ci0Je25vZGV3cmFwX2FsbG9jYXRlfSwJLyogTk9E RV9BTExPQ0FURSAqLwotCXtub2Rld3JhcF9hbGxvY19tc2dfYnVmfSwJLyogTk9ERV9BTExPQ01T R0JVRiAqLwotCXtub2Rld3JhcF9jaGFuZ2VfcHJpb3JpdHl9LAkvKiBOT0RFX0NIQU5HRVBSSU9S SVRZICovCi0Je25vZGV3cmFwX2Nvbm5lY3R9LAkvKiBOT0RFX0NPTk5FQ1QgKi8KLQl7bm9kZXdy YXBfY3JlYXRlfSwJLyogTk9ERV9DUkVBVEUgKi8KLQl7bm9kZXdyYXBfZGVsZXRlfSwJLyogTk9E RV9ERUxFVEUgKi8KLQl7bm9kZXdyYXBfZnJlZV9tc2dfYnVmfSwJLyogTk9ERV9GUkVFTVNHQlVG ICovCi0Je25vZGV3cmFwX2dldF9hdHRyfSwJLyogTk9ERV9HRVRBVFRSICovCi0Je25vZGV3cmFw X2dldF9tZXNzYWdlfSwJLyogTk9ERV9HRVRNRVNTQUdFICovCi0Je25vZGV3cmFwX3BhdXNlfSwJ LyogTk9ERV9QQVVTRSAqLwotCXtub2Rld3JhcF9wdXRfbWVzc2FnZX0sCS8qIE5PREVfUFVUTUVT U0FHRSAqLwotCXtub2Rld3JhcF9yZWdpc3Rlcl9ub3RpZnl9LAkvKiBOT0RFX1JFR0lTVEVSTk9U SUZZICovCi0Je25vZGV3cmFwX3J1bn0sCQkvKiBOT0RFX1JVTiAqLwotCXtub2Rld3JhcF90ZXJt aW5hdGV9LAkvKiBOT0RFX1RFUk1JTkFURSAqLwotCXtub2Rld3JhcF9nZXRfdXVpZF9wcm9wc30s CS8qIE5PREVfR0VUVVVJRFBST1BTICovCi19OwotCi0vKiBTVFJNIHdyYXBwZXIgZnVuY3Rpb25z ICovCi1zdGF0aWMgc3RydWN0IGFwaV9jbWQgc3RybV9jbWRbXSA9IHsKLQl7c3RybXdyYXBfYWxs b2NhdGVfYnVmZmVyfSwJLyogU1RSTV9BTExPQ0FURUJVRkZFUiAqLwotCXtzdHJtd3JhcF9jbG9z ZX0sCS8qIFNUUk1fQ0xPU0UgKi8KLQl7c3RybXdyYXBfZnJlZV9idWZmZXJ9LAkvKiBTVFJNX0ZS RUVCVUZGRVIgKi8KLQl7c3RybXdyYXBfZ2V0X2V2ZW50X2hhbmRsZX0sCS8qIFNUUk1fR0VURVZF TlRIQU5ETEUgKi8KLQl7c3RybXdyYXBfZ2V0X2luZm99LAkvKiBTVFJNX0dFVElORk8gKi8KLQl7 c3RybXdyYXBfaWRsZX0sCS8qIFNUUk1fSURMRSAqLwotCXtzdHJtd3JhcF9pc3N1ZX0sCS8qIFNU Uk1fSVNTVUUgKi8KLQl7c3RybXdyYXBfb3Blbn0sCS8qIFNUUk1fT1BFTiAqLwotCXtzdHJtd3Jh cF9yZWNsYWltfSwJLyogU1RSTV9SRUNMQUlNICovCi0Je3N0cm13cmFwX3JlZ2lzdGVyX25vdGlm eX0sCS8qIFNUUk1fUkVHSVNURVJOT1RJRlkgKi8KLQl7c3RybXdyYXBfc2VsZWN0fSwJLyogU1RS TV9TRUxFQ1QgKi8KLX07Ci0KLS8qIENNTSB3cmFwcGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHN0 cnVjdCBhcGlfY21kIGNtbV9jbWRbXSA9IHsKLQl7Y21td3JhcF9jYWxsb2NfYnVmfSwJLyogQ01N X0FMTE9DQlVGICovCi0Je2NtbXdyYXBfZnJlZV9idWZ9LAkvKiBDTU1fRlJFRUJVRiAqLwotCXtj bW13cmFwX2dldF9oYW5kbGV9LAkvKiBDTU1fR0VUSEFORExFICovCi0Je2NtbXdyYXBfZ2V0X2lu Zm99LAkvKiBDTU1fR0VUSU5GTyAqLwotfTsKLQotLyogQXJyYXkgdXNlZCB0byBzdG9yZSBpb2N0 bCB0YWJsZSBzaXplcy4gSXQgY2FuIGhvbGQgdXAgdG8gOCBlbnRyaWVzICovCi1zdGF0aWMgdTgg c2l6ZV9jbWRbXSA9IHsKLQlBUlJBWV9TSVpFKG1ncl9jbWQpLAotCUFSUkFZX1NJWkUocHJvY19j bWQpLAotCUFSUkFZX1NJWkUobm9kZV9jbWQpLAotCUFSUkFZX1NJWkUoc3RybV9jbWQpLAotCUFS UkFZX1NJWkUoY21tX2NtZCksCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2NwX2ZtX3Vzcih2 b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCi0JCQkgICAgICBpbnQgKmVyciwgdW5z aWduZWQgbG9uZyBieXRlcykKLXsKLQlpZiAoKmVycikKLQkJcmV0dXJuOwotCi0JaWYgKHVubGlr ZWx5KCFmcm9tKSkgewotCQkqZXJyID0gLUVGQVVMVDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh1 bmxpa2VseShjb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgYnl0ZXMpKSkKLQkJKmVyciA9IC1FRkFV TFQ7Ci19Ci0KLSNkZWZpbmUgQ1BfRk1fVVNSKHRvLCBmcm9tLCBlcnIsIG4pCQkJCVwKLQlfY3Bf Zm1fdXNyKHRvLCBmcm9tLCAmKGVyciksIChuKSAqIHNpemVvZigqKHRvKSkpCi0KLXN0YXRpYyBp bmxpbmUgdm9pZCBfY3BfdG9fdXNyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwK LQkJCSAgICAgIGludCAqZXJyLCB1bnNpZ25lZCBsb25nIGJ5dGVzKQotewotCWlmICgqZXJyKQot CQlyZXR1cm47Ci0KLQlpZiAodW5saWtlbHkoIXRvKSkgewotCQkqZXJyID0gLUVGQVVMVDsKLQkJ cmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShjb3B5X3RvX3VzZXIodG8sIGZyb20sIGJ5dGVz KSkpCi0JCSplcnIgPSAtRUZBVUxUOwotfQotCi0jZGVmaW5lIENQX1RPX1VTUih0bywgZnJvbSwg ZXJyLCBuKQkJCQlcCi0JX2NwX3RvX3Vzcih0bywgZnJvbSwgJihlcnIpLCAobikgKiBzaXplb2Yo Kihmcm9tKSkpCi0KLS8qCi0gKiAgPT09PT09PT0gYXBpX2NhbGxfZGV2X2lvY3RsID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ2FsbCB0aGUgKHdyYXBwZXIpIGZ1bmN0aW9uIGZvciB0 aGUgY29ycmVzcG9uZGluZyBBUEkgSU9DVEwuCi0gKi8KLWlubGluZSBpbnQgYXBpX2NhbGxfZGV2 X2lvY3RsKHUzMiBjbWQsIHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywKLQkJCQkgICAgICB1MzIg KnJlc3VsdCwgdm9pZCAqcHJfY3R4dCkKLXsKLQl1MzIoKmlvY3RsX2NtZCkgKHVuaW9uIHRyYXBw ZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkgPSBOVUxMOwotCWludCBpOwotCi0JaWYgKF9J T0NfVFlQRShjbWQpICE9IERCKSB7Ci0JCXByX2VycigiJXM6IEluY29tcGF0aWJsZSBkc3Bicmlk Z2UgaW9jdGwgbnVtYmVyXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWlmIChE Ql9HRVRfSU9DX1RBQkxFKGNtZCkgPiBBUlJBWV9TSVpFKHNpemVfY21kKSkgewotCQlwcl9lcnIo IiVzOiB1bmRlZmluZWQgaW9jdGwgbW9kdWxlXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyOwot CX0KLQotCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBjbWQgdGFibGUgKi8KLQlp ID0gREJfR0VUX0lPQyhjbWQpOwotCWlmIChpID4gc2l6ZV9jbWRbREJfR0VUX0lPQ19UQUJMRShj bWQpXSkgewotCQlwcl9lcnIoIiVzOiByZXF1ZXN0ZWQgaW9jdGwgJWQgb3V0IG9mIGJvdW5kcyBm b3IgdGFibGUgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaSwgREJfR0VUX0lPQ19UQUJMRShj bWQpKTsKLQkJZ290byBlcnI7Ci0JfQotCi0Jc3dpdGNoIChEQl9HRVRfTU9EVUxFKGNtZCkpIHsK LQljYXNlIERCX01HUjoKLQkJaW9jdGxfY21kID0gbWdyX2NtZFtpXS5meG47Ci0JCWJyZWFrOwot CWNhc2UgREJfUFJPQzoKLQkJaW9jdGxfY21kID0gcHJvY19jbWRbaV0uZnhuOwotCQlicmVhazsK LQljYXNlIERCX05PREU6Ci0JCWlvY3RsX2NtZCA9IG5vZGVfY21kW2ldLmZ4bjsKLQkJYnJlYWs7 Ci0JY2FzZSBEQl9TVFJNOgotCQlpb2N0bF9jbWQgPSBzdHJtX2NtZFtpXS5meG47Ci0JCWJyZWFr OwotCWNhc2UgREJfQ01NOgotCQlpb2N0bF9jbWQgPSBjbW1fY21kW2ldLmZ4bjsKLQkJYnJlYWs7 Ci0JfQotCi0JaWYgKCFpb2N0bF9jbWQpIHsKLQkJcHJfZXJyKCIlczogcmVxdWVzdGVkIGlvY3Rs IG5vdCBkZWZpbmVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyOwotCX0gZWxzZSB7Ci0JCSpy ZXN1bHQgPSAoKmlvY3RsX2NtZCkgKGFyZ3MsIHByX2N0eHQpOwotCX0KLQotCXJldHVybiAwOwot Ci1lcnI6Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gYXBpX2V4aXQg PT09PT09PT0KLSAqLwotdm9pZCBhcGlfZXhpdCh2b2lkKQotewotCWFwaV9jX3JlZnMtLTsKLQot CWlmIChhcGlfY19yZWZzID09IDApCi0JCW1ncl9leGl0KCk7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT0gYXBpX2luaXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBNb2R1bGUgaW5pdGlh bGl6YXRpb24gdXNlZCBieSBCcmlkZ2UgQVBJLgotICovCi1ib29sIGFwaV9pbml0KHZvaWQpCi17 Ci0JYm9vbCByZXQgPSB0cnVlOwotCi0JaWYgKGFwaV9jX3JlZnMgPT0gMCkKLQkJcmV0ID0gbWdy X2luaXQoKTsKLQotCWlmIChyZXQpCi0JCWFwaV9jX3JlZnMrKzsKLQotCXJldHVybiByZXQ7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gYXBpX2luaXRfY29tcGxldGUyID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgUGVyZm9ybSBhbnkgcmVxdWlyZWQgYnJpZGdlIGluaXRpYWxpemF0aW9u IHdoaWNoIGNhbm5vdAotICogICAgICBiZSBwZXJmb3JtZWQgaW4gYXBpX2luaXQoKSBvciBkZXZf c3RhcnRfZGV2aWNlKCkgZHVlCi0gKiAgICAgIHRvIHRoZSBmYWN0IHRoYXQgc29tZSBzZXJ2aWNl cyBhcmUgbm90IHlldAotICogICAgICBjb21wbGV0ZWx5IGluaXRpYWxpemVkLgotICogIFBhcmFt ZXRlcnM6Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDoJQWxsb3cgdGhpcyBkZXZpY2UgdG8gbG9h ZAotICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAg QnJpZGdlIEFQSSBpbml0aWFsaXplZC4KLSAqICBFbnN1cmVzOgotICovCi1pbnQgYXBpX2luaXRf Y29tcGxldGUyKHZvaWQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNmZ19kZXZub2Rl ICpkZXZfbm9kZTsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7Ci0Jc3RydWN0IGRydl9k YXRhICpkcnZfZGF0YXA7Ci0JdTggZGV2X3R5cGU7Ci0KLQkvKiAgV2FsayB0aGUgbGlzdCBvZiBE ZXZPYmplY3RzLCBnZXQgZWFjaCBkZXZub2RlLCBhbmQgYXR0ZW1wdGluZyB0bwotCSAqICBhdXRv c3RhcnQgdGhlIGJvYXJkLiBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBDT0YgbG9hZGluZywgd2hp Y2gKLQkgKiAgcmVxdWlyZXMgS0ZJTEUuICovCi0JZm9yIChoZGV2X29iaiA9IGRldl9nZXRfZmly c3QoKTsgaGRldl9vYmogIT0gTlVMTDsKLQkgICAgIGhkZXZfb2JqID0gZGV2X2dldF9uZXh0KGhk ZXZfb2JqKSkgewotCQlpZiAoZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlKSkK LQkJCWNvbnRpbnVlOwotCi0JCWlmIChkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5 cGUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgfHwgKGRl dl90eXBlID09IElWQV9VTklUKSkgewotCQkJZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJy aWRnZSk7Ci0KLQkJCWlmIChkcnZfZGF0YXAgJiYgZHJ2X2RhdGFwLT5iYXNlX2ltZykKLQkJCQlw cm9jX2F1dG9fc3RhcnQoZGV2X25vZGUsIGhkZXZfb2JqKTsKLQkJfQotCX0KLQotCXJldHVybiBz dGF0dXM7Ci19Ci0KLS8qIFRPRE86IFJlbW92ZSBkZXByZWNhdGVkIGFuZCBub3QgaW1wbGVtZW50 ZWQgaW9jdGwgd3JhcHBlcnMgKi8KLQotLyoKLSAqID09PT09PT09IG1ncndyYXBfZW51bV9ub2Rl X2luZm8gPT09PT09PT0KLSAqLwotdTMyIG1ncndyYXBfZW51bV9ub2RlX2luZm8odW5pb24gdHJh cHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCXU4ICpwbmRiX3Byb3BzOwotCXUz MiBudW1fbm9kZXMgPSAwOwotCWludCBzdGF0dXM7Ci0JdTMyIHNpemUgPSBhcmdzLT5hcmdzX21n cl9lbnVtbm9kZV9pbmZvLm5kYl9wcm9wc19zaXplOwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3Ry dWN0IGRzcF9uZGJwcm9wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCXNpemUgPSBzaXplb2Yoc3Ry dWN0IGRzcF9uZGJwcm9wcyk7Ci0KLQlwbmRiX3Byb3BzID0ga21hbGxvYyhzaXplLCBHRlBfS0VS TkVMKTsKLQlpZiAocG5kYl9wcm9wcyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0 YXR1cyA9Ci0JICAgIG1ncl9lbnVtX25vZGVfaW5mbyhhcmdzLT5hcmdzX21ncl9lbnVtbm9kZV9p bmZvLm5vZGVfaWQsCi0JCQkgICAgICAgKHN0cnVjdCBkc3BfbmRicHJvcHMgKilwbmRiX3Byb3Bz LCBzaXplLAotCQkJICAgICAgICZudW1fbm9kZXMpOwotCi0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nf bWdyX2VudW1ub2RlX2luZm8ubmRiX3Byb3BzLCBwbmRiX3Byb3BzLCBzdGF0dXMsCi0JCSAgc2l6 ZSk7Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfbWdyX2VudW1ub2RlX2luZm8ubnVtX25vZGVzLCAm bnVtX25vZGVzLCBzdGF0dXMsCi0JCSAgMSk7Ci0Ja2ZyZWUocG5kYl9wcm9wcyk7Ci0KLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gbWdyd3JhcF9lbnVtX3Byb2NfaW5mbyA9 PT09PT09PQotICovCi11MzIgbWdyd3JhcF9lbnVtX3Byb2NfaW5mbyh1bmlvbiB0cmFwcGVkX2Fy Z3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JdTggKnByb2Nlc3Nvcl9pbmZvOwotCXU4IG51 bV9wcm9jcyA9IDA7Ci0JaW50IHN0YXR1czsKLQl1MzIgc2l6ZSA9IGFyZ3MtPmFyZ3NfbWdyX2Vu dW1wcm9jX2luZm8ucHJvY2Vzc29yX2luZm9fc2l6ZTsKLQotCWlmIChzaXplIDwgc2l6ZW9mKHN0 cnVjdCBkc3BfcHJvY2Vzc29yaW5mbykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNpemUg PiBzaXplb2Yoc3RydWN0IG1ncl9wcm9jZXNzb3JleHRpbmZvKSkKLQkJc2l6ZSA9IHNpemVvZihz dHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8pOwotCi0JcHJvY2Vzc29yX2luZm8gPSBremFsbG9j KHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChwcm9jZXNzb3JfaW5mbyA9PSBOVUxMKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCXN0YXR1cyA9Ci0JICAgIG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvKGFy Z3MtPmFyZ3NfbWdyX2VudW1wcm9jX2luZm8uCi0JCQkJICAgIHByb2Nlc3Nvcl9pZCwKLQkJCQkg ICAgKHN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyAqKQotCQkJCSAgICBwcm9jZXNzb3JfaW5mbywg c2l6ZSwgJm51bV9wcm9jcyk7Ci0KLQlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3JfZW51bXByb2Nf aW5mby5wcm9jZXNzb3JfaW5mbywgcHJvY2Vzc29yX2luZm8sCi0JCSAgc3RhdHVzLCBzaXplKTsK LQlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3JfZW51bXByb2NfaW5mby5udW1fcHJvY3MsICZudW1f cHJvY3MsCi0JCSAgc3RhdHVzLCAxKTsKLQlrZnJlZShwcm9jZXNzb3JfaW5mbyk7Ci0KLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0jZGVmaW5lIFdSQVBfTUFQMkNBTExFUih4KSB4Ci0vKgotICogPT09 PT09PT0gbWdyd3JhcF9yZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KLSAqLwotdTMyIG1ncndyYXBf cmVnaXN0ZXJfb2JqZWN0KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkK LXsKLQl1MzIgcmV0OwotCXN0cnVjdCBkc3BfdXVpZCB1dWlkX29iajsKLQl1MzIgcGF0aF9zaXpl ID0gMDsKLQljaGFyICpwc3pfcGF0aF9uYW1lID0gTlVMTDsKLQlpbnQgc3RhdHVzID0gMDsKLQot CUNQX0ZNX1VTUigmdXVpZF9vYmosIGFyZ3MtPmFyZ3NfbWdyX3JlZ2lzdGVyb2JqZWN0LnV1aWRf b2JqLCBzdGF0dXMsIDEpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0JcGF0aF9z aXplID0gc3RybGVuX3VzZXIoKGNoYXIgKikKLQkJCQlhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9i amVjdC5zel9wYXRoX25hbWUpOwotCWlmICghcGF0aF9zaXplKSB7Ci0JCXN0YXR1cyA9IC1FSU5W QUw7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JcHN6X3BhdGhfbmFtZSA9IGttYWxsb2MocGF0 aF9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBzel9wYXRoX25hbWUpIHsKLQkJc3RhdHVzID0g LUVOT01FTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JcmV0ID0gc3RybmNweV9mcm9tX3VzZXIo cHN6X3BhdGhfbmFtZSwKLQkJCQkoY2hhciAqKWFyZ3MtPmFyZ3NfbWdyX3JlZ2lzdGVyb2JqZWN0 LgotCQkJCXN6X3BhdGhfbmFtZSwgcGF0aF9zaXplKTsKLQlpZiAoIXJldCkgewotCQlzdGF0dXMg PSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCWlmIChhcmdzLT5hcmdzX21ncl9y ZWdpc3Rlcm9iamVjdC5vYmpfdHlwZSA+PSBEU1BfRENETUFYT0JKVFlQRSkgewotCQlzdGF0dXMg PSAtRUlOVkFMOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCXN0YXR1cyA9IGRjZF9yZWdpc3Rl cl9vYmplY3QoJnV1aWRfb2JqLAotCQkJCSAgICAgYXJncy0+YXJnc19tZ3JfcmVnaXN0ZXJvYmpl Y3Qub2JqX3R5cGUsCi0JCQkJICAgICAoY2hhciAqKXBzel9wYXRoX25hbWUpOwotZnVuY19lbmQ6 Ci0Ja2ZyZWUocHN6X3BhdGhfbmFtZSk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqID09 PT09PT09IG1ncndyYXBfdW5yZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KLSAqLwotdTMyIG1ncndy YXBfdW5yZWdpc3Rlcl9vYmplY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9j dHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkc3BfdXVpZCB1dWlkX29iajsKLQot CUNQX0ZNX1VTUigmdXVpZF9vYmosIGFyZ3MtPmFyZ3NfbWdyX3JlZ2lzdGVyb2JqZWN0LnV1aWRf b2JqLCBzdGF0dXMsIDEpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQlzdGF0 dXMgPSBkY2RfdW5yZWdpc3Rlcl9vYmplY3QoJnV1aWRfb2JqLAotCQkJCSAgICAgICBhcmdzLT5h cmdzX21ncl91bnJlZ2lzdGVyb2JqZWN0LgotCQkJCSAgICAgICBvYmpfdHlwZSk7Ci1mdW5jX2Vu ZDoKLQlyZXR1cm4gc3RhdHVzOwotCi19Ci0KLS8qCi0gKiA9PT09PT09PSBtZ3J3cmFwX3dhaXRf Zm9yX2JyaWRnZV9ldmVudHMgPT09PT09PT0KLSAqLwotdTMyIG1ncndyYXBfd2FpdF9mb3JfYnJp ZGdlX2V2ZW50cyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0J aW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmFub3RpZmljYXRpb25z W01BWF9FVkVOVFNdOwotCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbnNbTUFY X0VWRU5UU107Ci0JdTMyIGluZGV4ID0gMCwgaTsKLQl1MzIgY291bnQgPSBhcmdzLT5hcmdzX21n cl93YWl0LmNvdW50OwotCi0JaWYgKGNvdW50ID4gTUFYX0VWRU5UUykKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQkvKiBnZXQgdGhlIGFycmF5IG9mIHBvaW50ZXJzIHRvIHVzZXIgc3RydWN0dXJlcyAq LwotCUNQX0ZNX1VTUihhbm90aWZpY2F0aW9ucywgYXJncy0+YXJnc19tZ3Jfd2FpdC5hbm90aWZp Y2F0aW9ucywKLQkJICBzdGF0dXMsIGNvdW50KTsKLQkvKiBnZXQgdGhlIGV2ZW50cyAqLwotCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCUNQX0ZNX1VTUigmbm90aWZpY2F0aW9uc1tp XSwgYW5vdGlmaWNhdGlvbnNbaV0sIHN0YXR1cywgMSk7Ci0JCWlmIChzdGF0dXMgfHwgIW5vdGlm aWNhdGlvbnNbaV0uaGFuZGxlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIHNldCB0aGUgYXJy YXkgb2YgcG9pbnRlcnMgdG8ga2VybmVsIHN0cnVjdHVyZXMgKi8KLQkJYW5vdGlmaWNhdGlvbnNb aV0gPSAmbm90aWZpY2F0aW9uc1tpXTsKLQl9Ci0Jc3RhdHVzID0gbWdyX3dhaXRfZm9yX2JyaWRn ZV9ldmVudHMoYW5vdGlmaWNhdGlvbnMsIGNvdW50LAotCQkJCQkJICZpbmRleCwKLQkJCQkJCSBh cmdzLT5hcmdzX21ncl93YWl0LgotCQkJCQkJIHRpbWVvdXQpOwotCUNQX1RPX1VTUihhcmdzLT5h cmdzX21ncl93YWl0LmluZGV4LCAmaW5kZXgsIHN0YXR1cywgMSk7Ci0JcmV0dXJuIHN0YXR1czsK LX0KLQotLyoKLSAqID09PT09PT09IE1HUldSQVBfR2V0UHJvY2Vzc1Jlc291cmNlSW5mbyA9PT09 PT09PQotICovCi11MzIgX19kZXByZWNhdGVkIG1ncndyYXBfZ2V0X3Byb2Nlc3NfcmVzb3VyY2Vz X2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAotCQkJCQkJICAgIHZvaWQgKnByX2N0eHQp Ci17Ci0JcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19f KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqID09PT09PT09IHByb2N3cmFwX2F0dGFjaCA9PT09 PT09PQotICovCi11MzIgcHJvY3dyYXBfYXR0YWNoKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywg dm9pZCAqcHJfY3R4dCkKLXsKLQl2b2lkICpwcm9jZXNzb3I7Ci0JaW50IHN0YXR1cyA9IDA7Ci0J c3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4gcHJvY19hdHRyX2luLCAqYXR0cl9pbiA9IE5VTEw7 Ci0KLQkvKiBPcHRpb25hbCBhcmd1bWVudCAqLwotCWlmIChhcmdzLT5hcmdzX3Byb2NfYXR0YWNo LmF0dHJfaW4pIHsKLQkJQ1BfRk1fVVNSKCZwcm9jX2F0dHJfaW4sIGFyZ3MtPmFyZ3NfcHJvY19h dHRhY2guYXR0cl9pbiwgc3RhdHVzLAotCQkJICAxKTsKLQkJaWYgKCFzdGF0dXMpCi0JCQlhdHRy X2luID0gJnByb2NfYXR0cl9pbjsKLQkJZWxzZQotCQkJZ290byBmdW5jX2VuZDsKLQotCX0KLQlz dGF0dXMgPSBwcm9jX2F0dGFjaChhcmdzLT5hcmdzX3Byb2NfYXR0YWNoLnByb2Nlc3Nvcl9pZCwg YXR0cl9pbiwKLQkJCSAgICAgJnByb2Nlc3NvciwgcHJfY3R4dCk7Ci0JQ1BfVE9fVVNSKGFyZ3Mt PmFyZ3NfcHJvY19hdHRhY2gucGhfcHJvY2Vzc29yLCAmcHJvY2Vzc29yLCBzdGF0dXMsIDEpOwot ZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqID09PT09PT09IHByb2N3cmFw X2N0cmwgPT09PT09PT0KLSAqLwotdTMyIHByb2N3cmFwX2N0cmwodW5pb24gdHJhcHBlZF9hcmdz ICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCXUzMiBjYl9kYXRhX3NpemUsIF9fdXNlciAqIHBz aXplID0gKHUzMiBfX3VzZXIgKikKLQkgICAgYXJncy0+YXJnc19wcm9jX2N0cmwuYXJnczsKLQl1 OCAqcGFyZ3MgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCXZvaWQgKmhwcm9jZXNzb3IgPSAo KHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+cHJvY2Vzc29yOwotCi0JaWYgKHBz aXplKSB7Ci0JCWlmIChnZXRfdXNlcihjYl9kYXRhX3NpemUsIHBzaXplKSkgewotCQkJc3RhdHVz ID0gLUVQRVJNOwotCQkJZ290byBmdW5jX2VuZDsKLQkJfQotCQljYl9kYXRhX3NpemUgKz0gc2l6 ZW9mKHUzMik7Ci0JCXBhcmdzID0ga21hbGxvYyhjYl9kYXRhX3NpemUsIEdGUF9LRVJORUwpOwot CQlpZiAocGFyZ3MgPT0gTlVMTCkgewotCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCWdvdG8gZnVu Y19lbmQ7Ci0JCX0KLQotCQlDUF9GTV9VU1IocGFyZ3MsIGFyZ3MtPmFyZ3NfcHJvY19jdHJsLmFy Z3MsIHN0YXR1cywKLQkJCSAgY2JfZGF0YV9zaXplKTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJ c3RhdHVzID0gcHJvY19jdHJsKGhwcm9jZXNzb3IsCi0JCQkJICAgYXJncy0+YXJnc19wcm9jX2N0 cmwuY21kLAotCQkJCSAgIChzdHJ1Y3QgZHNwX2NiZGF0YSAqKXBhcmdzKTsKLQl9Ci0KLQkvKiBD UF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2N0cmwuYXJncywgcGFyZ3MsIHN0YXR1cywgMSk7ICov Ci0Ja2ZyZWUocGFyZ3MpOwotZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAq ID09PT09PT09IHByb2N3cmFwX2RldGFjaCA9PT09PT09PQotICovCi11MzIgX19kZXByZWNhdGVk IHByb2N3cmFwX2RldGFjaCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQp Ci17Ci0JLyogcHJvY19kZXRhY2ggY2FsbGVkIGF0IGJyaWRnZV9yZWxlYXNlIG9ubHkgKi8KLQlw cl9lcnIoIiVzOiBkZXByZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOwotCXJl dHVybiAwOwotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBfZW51bV9ub2RlX2luZm8gPT09 PT09PT0KLSAqLwotdTMyIHByb2N3cmFwX2VudW1fbm9kZV9pbmZvKHVuaW9uIHRyYXBwZWRfYXJn cyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzOwotCXZvaWQgKm5vZGVfdGFi W01BWF9OT0RFU107Ci0JdTMyIG51bV9ub2RlczsKLQl1MzIgYWxsb2NfY250OwotCXZvaWQgKmhw cm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+cHJvY2Vzc29y OwotCi0JaWYgKCFhcmdzLT5hcmdzX3Byb2NfZW51bW5vZGVfaW5mby5ub2RlX3RhYl9zaXplKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0YXR1cyA9IHByb2NfZW51bV9ub2RlcyhocHJvY2Vzc29y LAotCQkJCSBub2RlX3RhYiwKLQkJCQkgYXJncy0+YXJnc19wcm9jX2VudW1ub2RlX2luZm8ubm9k ZV90YWJfc2l6ZSwKLQkJCQkgJm51bV9ub2RlcywgJmFsbG9jX2NudCk7Ci0JQ1BfVE9fVVNSKGFy Z3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvLm5vZGVfdGFiLCBub2RlX3RhYiwgc3RhdHVzLAot CQkgIG51bV9ub2Rlcyk7Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZv Lm51bV9ub2RlcywgJm51bV9ub2RlcywKLQkJICBzdGF0dXMsIDEpOwotCUNQX1RPX1VTUihhcmdz LT5hcmdzX3Byb2NfZW51bW5vZGVfaW5mby5hbGxvY2F0ZWQsICZhbGxvY19jbnQsCi0JCSAgc3Rh dHVzLCAxKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi11MzIgcHJvY3dyYXBfZW5kX2RtYSh1bmlv biB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1czsKLQot CWlmIChhcmdzLT5hcmdzX3Byb2NfZG1hLmRpciA+PSBETUFfTk9ORSkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQlzdGF0dXMgPSBwcm9jX2VuZF9kbWEocHJfY3R4dCwKLQkJCQkgICBhcmdzLT5hcmdz X3Byb2NfZG1hLm1wdV9hZGRyLAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEuc2l6ZSwKLQkJ CQkgICBhcmdzLT5hcmdzX3Byb2NfZG1hLmRpcik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotdTMy IHByb2N3cmFwX2JlZ2luX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0 eHQpCi17Ci0JaW50IHN0YXR1czsKLQotCWlmIChhcmdzLT5hcmdzX3Byb2NfZG1hLmRpciA+PSBE TUFfTk9ORSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdGF0dXMgPSBwcm9jX2JlZ2luX2RtYShw cl9jdHh0LAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEubXB1X2FkZHIsCi0JCQkJICAgYXJn cy0+YXJnc19wcm9jX2RtYS5zaXplLAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEuZGlyKTsK LQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBfZmx1c2hfbWVt b3J5ID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9mbHVzaF9tZW1vcnkodW5pb24gdHJhcHBl ZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXM7Ci0KLQlpZiAoYXJn cy0+YXJnc19wcm9jX2ZsdXNobWVtb3J5LmZsYWdzID4KLQkgICAgUFJPQ19XUklURUJBQ0tfSU5W QUxJREFURV9NRU0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RhdHVzID0gcHJvY19mbHVzaF9t ZW1vcnkocHJfY3R4dCwKLQkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZmx1c2htZW1vcnkubXB1X2Fk ZHIsCi0JCQkJICAgYXJncy0+YXJnc19wcm9jX2ZsdXNobWVtb3J5LnNpemUsCi0JCQkJICAgYXJn cy0+YXJnc19wcm9jX2ZsdXNobWVtb3J5LmZsYWdzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogPT09PT09PT0gcHJvY3dyYXBfaW52YWxpZGF0ZV9tZW1vcnkgPT09PT09PT0KLSAqLwot dTMyIHByb2N3cmFwX2ludmFsaWRhdGVfbWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywg dm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0KLQkgICAgcHJvY19p bnZhbGlkYXRlX21lbW9yeShwcl9jdHh0LAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19pbnZhbGlk YXRlbWVtb3J5Lm1wdV9hZGRyLAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19pbnZhbGlkYXRlbWVt b3J5LnNpemUpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBwcm9jd3Jh cF9lbnVtX3Jlc291cmNlcyA9PT09PT09PQotICovCi11MzIgcHJvY3dyYXBfZW51bV9yZXNvdXJj ZXModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0 dXMgPSAwOwotCXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvIHJlc291cmNlX2luZm87Ci0Jdm9pZCAq aHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5wcm9jZXNz b3I7Ci0KLQlpZiAoYXJncy0+YXJnc19wcm9jX2VudW1yZXNvdXJjZXMucmVzb3VyY2VfaW5mb19z aXplIDwKLQkgICAgc2l6ZW9mKHN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvKSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlzdGF0dXMgPQotCSAgICBwcm9jX2dldF9yZXNvdXJjZV9pbmZvKGhwcm9jZXNz b3IsCi0JCQkJICAgYXJncy0+YXJnc19wcm9jX2VudW1yZXNvdXJjZXMucmVzb3VyY2VfdHlwZSwK LQkJCQkgICAmcmVzb3VyY2VfaW5mbywKLQkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZW51bXJlc291 cmNlcy4KLQkJCQkgICByZXNvdXJjZV9pbmZvX3NpemUpOwotCi0JQ1BfVE9fVVNSKGFyZ3MtPmFy Z3NfcHJvY19lbnVtcmVzb3VyY2VzLnJlc291cmNlX2luZm8sICZyZXNvdXJjZV9pbmZvLAotCQkg IHN0YXR1cywgMSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi19Ci0KLS8qCi0gKiA9PT09PT09PSBw cm9jd3JhcF9nZXRfc3RhdGUgPT09PT09PT0KLSAqLwotdTMyIHByb2N3cmFwX2dldF9zdGF0ZSh1 bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1czsK LQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7Ci0Jdm9pZCAqaHByb2Nlc3Nv ciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5wcm9jZXNzb3I7Ci0KLQlp ZiAoYXJncy0+YXJnc19wcm9jX2dldHN0YXRlLnN0YXRlX2luZm9fc2l6ZSA8Ci0JICAgIHNpemVv ZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdGF0 dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKLQkJCSAgIGFyZ3Mt PmFyZ3NfcHJvY19nZXRzdGF0ZS5zdGF0ZV9pbmZvX3NpemUpOwotCUNQX1RPX1VTUihhcmdzLT5h cmdzX3Byb2NfZ2V0c3RhdGUucHJvY19zdGF0ZV9vYmosICZwcm9jX3N0YXRlLCBzdGF0dXMsCi0J CSAgMSk7Ci0JcmV0dXJuIHN0YXR1czsKLQotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBf Z2V0X3RyYWNlID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9nZXRfdHJhY2UodW5pb24gdHJh cHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXM7Ci0JdTggKnBi dWY7Ci0Jdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0 eHQpLT5wcm9jZXNzb3I7Ci0KLQlpZiAoYXJncy0+YXJnc19wcm9jX2dldHRyYWNlLm1heF9zaXpl ID4gTUFYX1RSQUNFQlVGTEVOKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBidWYgPSBremFsbG9j KGFyZ3MtPmFyZ3NfcHJvY19nZXR0cmFjZS5tYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBi dWYgIT0gTlVMTCkgewotCQlzdGF0dXMgPSBwcm9jX2dldF90cmFjZShocHJvY2Vzc29yLCBwYnVm LAotCQkJCQlhcmdzLT5hcmdzX3Byb2NfZ2V0dHJhY2UubWF4X3NpemUpOwotCX0gZWxzZSB7Ci0J CXN0YXR1cyA9IC1FTk9NRU07Ci0JfQotCUNQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfZ2V0dHJh Y2UuYnVmLCBwYnVmLCBzdGF0dXMsCi0JCSAgYXJncy0+YXJnc19wcm9jX2dldHRyYWNlLm1heF9z aXplKTsKLQlrZnJlZShwYnVmKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09 PT09PSBwcm9jd3JhcF9sb2FkID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9sb2FkKHVuaW9u IHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlzMzIgaSwgbGVuOwotCWlu dCBzdGF0dXMgPSAwOwotCWNoYXIgKnRlbXA7Ci0JczMyIGNvdW50ID0gYXJncy0+YXJnc19wcm9j X2xvYWQuYXJnY19pbmRleDsKLQl1OCAqKmFyZ3YgPSBOVUxMLCAqKmVudnAgPSBOVUxMOwotCXZv aWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+cHJv Y2Vzc29yOwotCi0JaWYgKGNvdW50IDw9IDAgfHwgY291bnQgPiBNQVhfTE9BREFSR1MpIHsKLQkJ c3RhdHVzID0gLUVJTlZBTDsKLQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotCi0JYXJndiA9IGttYWxs b2MoY291bnQgKiBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOwotCWlmICghYXJndikgewotCQlz dGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGZ1bmNfY29udDsKLQl9Ci0KLQlDUF9GTV9VU1IoYXJn diwgYXJncy0+YXJnc19wcm9jX2xvYWQudXNlcl9hcmdzLCBzdGF0dXMsIGNvdW50KTsKLQlpZiAo c3RhdHVzKSB7Ci0JCWtmcmVlKGFyZ3YpOwotCQlhcmd2ID0gTlVMTDsKLQkJZ290byBmdW5jX2Nv bnQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJaWYgKGFyZ3ZbaV0p IHsKLQkJCS8qIFVzZXIgc3BhY2UgcG9pbnRlciB0byBhcmd1bWVudCAqLwotCQkJdGVtcCA9IChj aGFyICopYXJndltpXTsKLQkJCS8qIGxlbiBpcyBpbmNyZWFzZWQgYnkgMSB0byBhY2NvbW1vZGF0 ZSBOVUxMICovCi0JCQlsZW4gPSBzdHJsZW5fdXNlcigoY2hhciAqKXRlbXApICsgMTsKLQkJCS8q IEtlcm5lbCBzcGFjZSBwb2ludGVyIHRvIGFyZ3VtZW50ICovCi0JCQlhcmd2W2ldID0ga21hbGxv YyhsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKGFyZ3ZbaV0pIHsKLQkJCQlDUF9GTV9VU1IoYXJn dltpXSwgdGVtcCwgc3RhdHVzLCBsZW4pOwotCQkJCWlmIChzdGF0dXMpIHsKLQkJCQkJa2ZyZWUo YXJndltpXSk7Ci0JCQkJCWFyZ3ZbaV0gPSBOVUxMOwotCQkJCQlnb3RvIGZ1bmNfY29udDsKLQkJ CQl9Ci0JCQl9IGVsc2UgewotCQkJCXN0YXR1cyA9IC1FTk9NRU07Ci0JCQkJZ290byBmdW5jX2Nv bnQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogVE9ETzogdmFsaWRhdGUgdGhpcyAqLwotCWlmIChhcmdz LT5hcmdzX3Byb2NfbG9hZC51c2VyX2VudnApIHsKLQkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGlu IHRoZSBlbnZwIGFycmF5IGluY2x1ZGluZyBOVUxMICovCi0JCWNvdW50ID0gMDsKLQkJZG8gewot CQkJaWYgKGdldF91c2VyKHRlbXAsCi0JCQkJICAgICBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2Vy X2VudnAgKyBjb3VudCkpIHsKLQkJCQlzdGF0dXMgPSAtRUZBVUxUOwotCQkJCWdvdG8gZnVuY19j b250OwotCQkJfQotCQkJY291bnQrKzsKLQkJfSB3aGlsZSAodGVtcCk7Ci0JCWVudnAgPSBrbWFs bG9jKGNvdW50ICogc2l6ZW9mKHU4ICopLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFlbnZwKSB7Ci0J CQlzdGF0dXMgPSAtRU5PTUVNOwotCQkJZ290byBmdW5jX2NvbnQ7Ci0JCX0KLQotCQlDUF9GTV9V U1IoZW52cCwgYXJncy0+YXJnc19wcm9jX2xvYWQudXNlcl9lbnZwLCBzdGF0dXMsIGNvdW50KTsK LQkJaWYgKHN0YXR1cykgewotCQkJa2ZyZWUoZW52cCk7Ci0JCQllbnZwID0gTlVMTDsKLQkJCWdv dG8gZnVuY19jb250OwotCQl9Ci0JCWZvciAoaSA9IDA7IGVudnBbaV07IGkrKykgewotCQkJLyog VXNlciBzcGFjZSBwb2ludGVyIHRvIGFyZ3VtZW50ICovCi0JCQl0ZW1wID0gKGNoYXIgKillbnZw W2ldOwotCQkJLyogbGVuIGlzIGluY3JlYXNlZCBieSAxIHRvIGFjY29tbW9kYXRlIE5VTEwgKi8K LQkJCWxlbiA9IHN0cmxlbl91c2VyKChjaGFyICopdGVtcCkgKyAxOwotCQkJLyogS2VybmVsIHNw YWNlIHBvaW50ZXIgdG8gYXJndW1lbnQgKi8KLQkJCWVudnBbaV0gPSBrbWFsbG9jKGxlbiwgR0ZQ X0tFUk5FTCk7Ci0JCQlpZiAoZW52cFtpXSkgewotCQkJCUNQX0ZNX1VTUihlbnZwW2ldLCB0ZW1w LCBzdGF0dXMsIGxlbik7Ci0JCQkJaWYgKHN0YXR1cykgewotCQkJCQlrZnJlZShlbnZwW2ldKTsK LQkJCQkJZW52cFtpXSA9IE5VTEw7Ci0JCQkJCWdvdG8gZnVuY19jb250OwotCQkJCX0KLQkJCX0g ZWxzZSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQlnb3RvIGZ1bmNfY29udDsKLQkJCX0K LQkJfQotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IHByb2NfbG9hZChocHJvY2Vz c29yLAotCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19sb2FkLmFyZ2NfaW5kZXgsCi0JCQkJICAgKGNv bnN0IGNoYXIgKiopYXJndiwgKGNvbnN0IGNoYXIgKiopZW52cCk7Ci0JfQotZnVuY19jb250Ogot CWlmIChlbnZwKSB7Ci0JCWkgPSAwOwotCQl3aGlsZSAoZW52cFtpXSkKLQkJCWtmcmVlKGVudnBb aSsrXSk7Ci0KLQkJa2ZyZWUoZW52cCk7Ci0JfQotCi0JaWYgKGFyZ3YpIHsKLQkJY291bnQgPSBh cmdzLT5hcmdzX3Byb2NfbG9hZC5hcmdjX2luZGV4OwotCQlmb3IgKGkgPSAwOyAoaSA8IGNvdW50 KSAmJiBhcmd2W2ldOyBpKyspCi0JCQlrZnJlZShhcmd2W2ldKTsKLQotCQlrZnJlZShhcmd2KTsK LQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBfbWFw ID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9tYXAodW5pb24gdHJhcHBlZF9hcmdzICphcmdz LCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXM7Ci0Jdm9pZCAqbWFwX2FkZHI7Ci0Jdm9p ZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5wcm9j ZXNzb3I7Ci0KLQlpZiAoIWFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0uc2l6ZSkKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlzdGF0dXMgPSBwcm9jX21hcChhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnByb2Nl c3NvciwKLQkJCSAgYXJncy0+YXJnc19wcm9jX21hcG1lbS5tcHVfYWRkciwKLQkJCSAgYXJncy0+ YXJnc19wcm9jX21hcG1lbS5zaXplLAotCQkJICBhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnJlcV9h ZGRyLCAmbWFwX2FkZHIsCi0JCQkgIGFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0ubWFwX2F0dHIsIHBy X2N0eHQpOwotCWlmICghc3RhdHVzKSB7Ci0JCWlmIChwdXRfdXNlcihtYXBfYWRkciwgYXJncy0+ YXJnc19wcm9jX21hcG1lbS5tYXBfYWRkcikpIHsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQlw cm9jX3VuX21hcChocHJvY2Vzc29yLCBtYXBfYWRkciwgcHJfY3R4dCk7Ci0JCX0KLQotCX0KLQly ZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBfcmVnaXN0ZXJfbm90 aWZ5ID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJh cHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0 IGRzcF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOwotCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0 cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+cHJvY2Vzc29yOwotCi0JLyogSW5pdGlh bGl6ZSB0aGUgbm90aWZpY2F0aW9uIGRhdGEgc3RydWN0dXJlICovCi0Jbm90aWZpY2F0aW9uLm5h bWUgPSBOVUxMOwotCW5vdGlmaWNhdGlvbi5oYW5kbGUgPSBOVUxMOwotCi0Jc3RhdHVzID0gcHJv Y19yZWdpc3Rlcl9ub3RpZnkoaHByb2Nlc3NvciwKLQkJCQkgYXJncy0+YXJnc19wcm9jX3JlZ2lz dGVyX25vdGlmeS5ldmVudF9tYXNrLAotCQkJCSBhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90 aWZ5Lm5vdGlmeV90eXBlLAotCQkJCSAmbm90aWZpY2F0aW9uKTsKLQlDUF9UT19VU1IoYXJncy0+ YXJnc19wcm9jX3JlZ2lzdGVyX25vdGlmeS5ub3RpZmljYXRpb24sICZub3RpZmljYXRpb24sCi0J CSAgc3RhdHVzLCAxKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gcHJv Y3dyYXBfcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KLSAqLwotdTMyIHByb2N3cmFwX3Jlc2VydmVf bWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQg c3RhdHVzOwotCXZvaWQgKnByc3ZfYWRkcjsKLQl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3Qg cHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPnByb2Nlc3NvcjsKLQotCWlmICgoYXJncy0+YXJn c19wcm9jX3Jzdm1lbS5zaXplIDw9IDApIHx8Ci0JICAgIChhcmdzLT5hcmdzX3Byb2NfcnN2bWVt LnNpemUgJiAoUEdfU0laRTRLIC0gMSkpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Rh dHVzID0gcHJvY19yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAotCQkJCSAgICAgYXJncy0+YXJn c19wcm9jX3Jzdm1lbS5zaXplLCAmcHJzdl9hZGRyLAotCQkJCSAgICAgcHJfY3R4dCk7Ci0JaWYg KCFzdGF0dXMpIHsKLQkJaWYgKHB1dF91c2VyKHByc3ZfYWRkciwgYXJncy0+YXJnc19wcm9jX3Jz dm1lbS5yc3ZfYWRkcikpIHsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQlwcm9jX3VuX3Jlc2Vy dmVfbWVtb3J5KGFyZ3MtPmFyZ3NfcHJvY19yc3ZtZW0uCi0JCQkJCSAgICAgICBwcm9jZXNzb3Is IHByc3ZfYWRkciwgcHJfY3R4dCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoK LSAqID09PT09PT09IHByb2N3cmFwX3N0YXJ0ID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9z dGFydCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JdTMyIHJl dDsKLQotCXJldCA9IHByb2Nfc3RhcnQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4 dCktPnByb2Nlc3Nvcik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqID09PT09PT09IHByb2N3 cmFwX3VuX21hcCA9PT09PT09PQotICovCi11MzIgcHJvY3dyYXBfdW5fbWFwKHVuaW9uIHRyYXBw ZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVz ID0gcHJvY191bl9tYXAoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPnByb2Nl c3NvciwKLQkJCSAgICAgYXJncy0+YXJnc19wcm9jX3VubWFwbWVtLm1hcF9hZGRyLCBwcl9jdHh0 KTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gcHJvY3dyYXBfdW5fcmVz ZXJ2ZV9tZW1vcnkgPT09PT09PT0KLSAqLwotdTMyIHByb2N3cmFwX3VuX3Jlc2VydmVfbWVtb3J5 KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVz OwotCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0 KS0+cHJvY2Vzc29yOwotCi0Jc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShocHJvY2Vz c29yLAotCQkJCQlhcmdzLT5hcmdzX3Byb2NfdW5yc3ZtZW0ucnN2X2FkZHIsCi0JCQkJCXByX2N0 eHQpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBwcm9jd3JhcF9zdG9w ID09PT09PT09Ci0gKi8KLXUzMiBwcm9jd3JhcF9zdG9wKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJn cywgdm9pZCAqcHJfY3R4dCkKLXsKLQl1MzIgcmV0OwotCi0JcmV0ID0gcHJvY19zdG9wKCgoc3Ry dWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5wcm9jZXNzb3IpOwotCi0JcmV0dXJuIHJl dDsKLX0KLQotLyoKLSAqID09PT09PT09IGZpbmRfaGFuZGxlID09PT09PT09PQotICovCi1pbmxp bmUgdm9pZCBmaW5kX25vZGVfaGFuZGxlKHN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlcmVz LAotCQkJCXZvaWQgKnByX2N0eHQsIHZvaWQgKmhub2RlKQotewotCXJjdV9yZWFkX2xvY2soKTsK LQkqbm9kZXJlcyA9IGlkcl9maW5kKCgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQp LT5ub2RlX2lkLAotCQkJCQkJCQkoaW50KWhub2RlIC0gMSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7 Ci0JcmV0dXJuOwotfQotCi0KLS8qCi0gKiA9PT09PT09PSBub2Rld3JhcF9hbGxvY2F0ZSA9PT09 PT09PQotICovCi11MzIgbm9kZXdyYXBfYWxsb2NhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdz LCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkc3BfdXVpZCBu b2RlX3V1aWQ7Ci0JdTMyIGNiX2RhdGFfc2l6ZSA9IDA7Ci0JdTMyIF9fdXNlciAqcHNpemUgPSAo dTMyIF9fdXNlciAqKSBhcmdzLT5hcmdzX25vZGVfYWxsb2NhdGUuYXJnczsKLQl1OCAqcGFyZ3Mg PSBOVUxMOwotCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBwcm9jX2F0dHJfaW4sICphdHRyX2luID0g TlVMTDsKLQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKLQlpbnQgbm9kZWlkOwot CXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+ cHJvY2Vzc29yOwotCi0JLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KLQlpZiAocHNpemUpIHsKLQkJ aWYgKGdldF91c2VyKGNiX2RhdGFfc2l6ZSwgcHNpemUpKQotCQkJc3RhdHVzID0gLUVQRVJNOwot Ci0JCWNiX2RhdGFfc2l6ZSArPSBzaXplb2YodTMyKTsKLQkJaWYgKCFzdGF0dXMpIHsKLQkJCXBh cmdzID0ga21hbGxvYyhjYl9kYXRhX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKHBhcmdzID09 IE5VTEwpCi0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQotCQl9Ci0JCUNQX0ZNX1VTUihwYXJncywg YXJncy0+YXJnc19ub2RlX2FsbG9jYXRlLmFyZ3MsIHN0YXR1cywKLQkJCSAgY2JfZGF0YV9zaXpl KTsKLQl9Ci0JQ1BfRk1fVVNSKCZub2RlX3V1aWQsIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5u b2RlX2lkX3B0ciwgc3RhdHVzLCAxKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfY29udDsK LQkvKiBPcHRpb25hbCBhcmd1bWVudCAqLwotCWlmIChhcmdzLT5hcmdzX25vZGVfYWxsb2NhdGUu YXR0cl9pbikgewotCQlDUF9GTV9VU1IoJnByb2NfYXR0cl9pbiwgYXJncy0+YXJnc19ub2RlX2Fs bG9jYXRlLmF0dHJfaW4sCi0JCQkgIHN0YXR1cywgMSk7Ci0JCWlmICghc3RhdHVzKQotCQkJYXR0 cl9pbiA9ICZwcm9jX2F0dHJfaW47Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IC1FTk9NRU07Ci0KLQl9 Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gbm9kZV9hbGxvY2F0ZShocHJvY2Vzc29yLAot CQkJCSAgICAgICAmbm9kZV91dWlkLCAoc3RydWN0IGRzcF9jYmRhdGEgKilwYXJncywKLQkJCQkg ICAgICAgYXR0cl9pbiwgJm5vZGVfcmVzLCBwcl9jdHh0KTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsK LQkJbm9kZWlkID0gbm9kZV9yZXMtPmlkICsgMTsKLQkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9k ZV9hbGxvY2F0ZS5ub2RlLCAmbm9kZWlkLAotCQkJc3RhdHVzLCAxKTsKLQkJaWYgKHN0YXR1cykg ewotCQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJCW5vZGVfZGVsZXRlKG5vZGVfcmVzLCBwcl9jdHh0 KTsKLQkJfQotCX0KLWZ1bmNfY29udDoKLQlrZnJlZShwYXJncyk7Ci0KLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKgotICogID09PT09PT09IG5vZGV3cmFwX2FsbG9jX21zZ19idWYgPT09PT09PT0K LSAqLwotdTMyIG5vZGV3cmFwX2FsbG9jX21zZ19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdz LCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkc3BfYnVmZmVy YXR0ciAqcGF0dHIgPSBOVUxMOwotCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciBhdHRyOwotCXU4ICpw YnVmZmVyID0gTlVMTDsKLQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKLQotCWZp bmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCAgcHJfY3R4dCwKLQkJCQlhcmdzLT5hcmdzX25vZGVf YWxsb2Ntc2didWYubm9kZSk7Ci0KLQlpZiAoIW5vZGVfcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsK LQotCWlmICghYXJncy0+YXJnc19ub2RlX2FsbG9jbXNnYnVmLnNpemUpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY21zZ2J1Zi5hdHRyKSB7CS8qIE9wdGlv bmFsIGFyZ3VtZW50ICovCi0JCUNQX0ZNX1VTUigmYXR0ciwgYXJncy0+YXJnc19ub2RlX2FsbG9j bXNnYnVmLmF0dHIsIHN0YXR1cywgMSk7Ci0JCWlmICghc3RhdHVzKQotCQkJcGF0dHIgPSAmYXR0 cjsKLQotCX0KLQkvKiBhcmd1bWVudCAqLwotCUNQX0ZNX1VTUigmcGJ1ZmZlciwgYXJncy0+YXJn c19ub2RlX2FsbG9jbXNnYnVmLmJ1ZmZlciwgc3RhdHVzLCAxKTsKLQlpZiAoIXN0YXR1cykgewot CQlzdGF0dXMgPSBub2RlX2FsbG9jX21zZ19idWYobm9kZV9yZXMtPm5vZGUsCi0JCQkJCSAgICBh cmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYuc2l6ZSwKLQkJCQkJICAgIHBhdHRyLCAmcGJ1ZmZl cik7Ci0JfQotCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYuYnVmZmVyLCAm cGJ1ZmZlciwgc3RhdHVzLCAxKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09 PT0gbm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5ID09PT09PT09Ci0gKi8KLXUzMiBub2Rld3JhcF9j aGFuZ2VfcHJpb3JpdHkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQot ewotCXUzMiByZXQ7Ci0Jc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7Ci0KLQlmaW5k X25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwKLQkJCQlhcmdzLT5hcmdzX25vZGVfY2hh bmdlcHJpb3JpdHkubm9kZSk7Ci0KLQlpZiAoIW5vZGVfcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsK LQotCXJldCA9IG5vZGVfY2hhbmdlX3ByaW9yaXR5KG5vZGVfcmVzLT5ub2RlLAotCQkJCSAgIGFy Z3MtPmFyZ3Nfbm9kZV9jaGFuZ2Vwcmlvcml0eS5wcmlvKTsKLQotCXJldHVybiByZXQ7Ci19Ci0K LS8qCi0gKiA9PT09PT09PSBub2Rld3JhcF9jb25uZWN0ID09PT09PT09Ci0gKi8KLXUzMiBub2Rl d3JhcF9jb25uZWN0KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsK LQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHNwX3N0cm1hdHRyIGF0dHJzOwotCXN0cnVjdCBk c3Bfc3RybWF0dHIgKnBhdHRycyA9IE5VTEw7Ci0JdTMyIGNiX2RhdGFfc2l6ZTsKLQl1MzIgX191 c2VyICpwc2l6ZSA9ICh1MzIgX191c2VyICopIGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0LmNvbm5f cGFyYW07Ci0JdTggKnBhcmdzID0gTlVMTDsKLQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2Rl X3JlczEsICpub2RlX3JlczI7Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMSA9IE5VTEwsICpu b2RlMiA9IE5VTEw7Ci0KLQlpZiAoKGludClhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5ub2RlICE9 IERTUF9IR1BQTk9ERSkgewotCQlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlczEsIHByX2N0eHQs Ci0JCQkJYXJncy0+YXJnc19ub2RlX2Nvbm5lY3Qubm9kZSk7Ci0JCWlmIChub2RlX3JlczEpCi0J CQlub2RlMSA9IG5vZGVfcmVzMS0+bm9kZTsKLQl9IGVsc2UgewotCQlub2RlMSA9IGFyZ3MtPmFy Z3Nfbm9kZV9jb25uZWN0Lm5vZGU7Ci0JfQotCi0JaWYgKChpbnQpYXJncy0+YXJnc19ub2RlX2Nv bm5lY3Qub3RoZXJfbm9kZSAhPSBEU1BfSEdQUE5PREUpIHsKLQkJZmluZF9ub2RlX2hhbmRsZSgm bm9kZV9yZXMyLCBwcl9jdHh0LAotCQkJCWFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lm90aGVyX25v ZGUpOwotCQlpZiAobm9kZV9yZXMyKQotCQkJbm9kZTIgPSBub2RlX3JlczItPm5vZGU7Ci0JfSBl bHNlIHsKLQkJbm9kZTIgPSBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5vdGhlcl9ub2RlOwotCX0K LQotCWlmICghbm9kZTEgfHwgIW5vZGUyKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIE9wdGlv bmFsIGFyZ3VtZW50ICovCi0JaWYgKHBzaXplKSB7Ci0JCWlmIChnZXRfdXNlcihjYl9kYXRhX3Np emUsIHBzaXplKSkKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQotCQljYl9kYXRhX3NpemUgKz0gc2l6 ZW9mKHUzMik7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlwYXJncyA9IGttYWxsb2MoY2JfZGF0YV9z aXplLCBHRlBfS0VSTkVMKTsKLQkJCWlmIChwYXJncyA9PSBOVUxMKSB7Ci0JCQkJc3RhdHVzID0g LUVOT01FTTsKLQkJCQlnb3RvIGZ1bmNfY29udDsKLQkJCX0KLQotCQl9Ci0JCUNQX0ZNX1VTUihw YXJncywgYXJncy0+YXJnc19ub2RlX2Nvbm5lY3QuY29ubl9wYXJhbSwgc3RhdHVzLAotCQkJICBj Yl9kYXRhX3NpemUpOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotCWlm IChhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5hdHRycykgewkvKiBPcHRpb25hbCBhcmd1bWVudCAq LwotCQlDUF9GTV9VU1IoJmF0dHJzLCBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5hdHRycywgc3Rh dHVzLCAxKTsKLQkJaWYgKCFzdGF0dXMpCi0JCQlwYXR0cnMgPSAmYXR0cnM7Ci0KLQl9Ci0JaWYg KCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gbm9kZV9jb25uZWN0KG5vZGUxLAotCQkJCSAgICAgIGFy Z3MtPmFyZ3Nfbm9kZV9jb25uZWN0LnN0cmVhbV9pZCwKLQkJCQkgICAgICBub2RlMiwKLQkJCQkg ICAgICBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5vdGhlcl9zdHJlYW0sCi0JCQkJICAgICAgcGF0 dHJzLCAoc3RydWN0IGRzcF9jYmRhdGEgKilwYXJncyk7Ci0JfQotZnVuY19jb250OgotCWtmcmVl KHBhcmdzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBub2Rld3Jh cF9jcmVhdGUgPT09PT09PT0KLSAqLwotdTMyIG5vZGV3cmFwX2NyZWF0ZSh1bmlvbiB0cmFwcGVk X2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JdTMyIHJldDsKLQlzdHJ1Y3Qgbm9kZV9y ZXNfb2JqZWN0ICpub2RlX3JlczsKLQotCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9j dHh0LCBhcmdzLT5hcmdzX25vZGVfY3JlYXRlLm5vZGUpOwotCi0JaWYgKCFub2RlX3JlcykKLQkJ cmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXQgPSBub2RlX2NyZWF0ZShub2RlX3Jlcy0+bm9kZSk7Ci0K LQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogPT09PT09PT0gbm9kZXdyYXBfZGVsZXRlID09PT09 PT09Ci0gKi8KLXUzMiBub2Rld3JhcF9kZWxldGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2 b2lkICpwcl9jdHh0KQotewotCXUzMiByZXQ7Ci0Jc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9k ZV9yZXM7Ci0KLQlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJn c19ub2RlX2RlbGV0ZS5ub2RlKTsKLQotCWlmICghbm9kZV9yZXMpCi0JCXJldHVybiAtRUZBVUxU OwotCi0JcmV0ID0gbm9kZV9kZWxldGUobm9kZV9yZXMsIHByX2N0eHQpOwotCi0JcmV0dXJuIHJl dDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBub2Rld3JhcF9mcmVlX21zZ19idWYgPT09PT09PT0K LSAqLwotdTMyIG5vZGV3cmFwX2ZyZWVfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3Ms IHZvaWQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRzcF9idWZmZXJh dHRyICpwYXR0ciA9IE5VTEw7Ci0Jc3RydWN0IGRzcF9idWZmZXJhdHRyIGF0dHI7Ci0Jc3RydWN0 IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7Ci0KLQlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3Jl cywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYubm9kZSk7Ci0KLQlpZiAoIW5v ZGVfcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChhcmdzLT5hcmdzX25vZGVfZnJlZW1z Z2J1Zi5hdHRyKSB7CS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCi0JCUNQX0ZNX1VTUigmYXR0ciwg YXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYuYXR0ciwgc3RhdHVzLCAxKTsKLQkJaWYgKCFzdGF0 dXMpCi0JCQlwYXR0ciA9ICZhdHRyOwotCi0JfQotCi0JaWYgKCFhcmdzLT5hcmdzX25vZGVfZnJl ZW1zZ2J1Zi5idWZmZXIpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKCFzdGF0dXMpIHsKLQkJ c3RhdHVzID0gbm9kZV9mcmVlX21zZ19idWYobm9kZV9yZXMtPm5vZGUsCi0JCQkJCSAgIGFyZ3Mt PmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLmJ1ZmZlciwKLQkJCQkJICAgcGF0dHIpOwotCX0KLQotCXJl dHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBub2Rld3JhcF9nZXRfYXR0ciA9PT09 PT09PQotICovCi11MzIgbm9kZXdyYXBfZ2V0X2F0dHIodW5pb24gdHJhcHBlZF9hcmdzICphcmdz LCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkc3Bfbm9kZWF0 dHIgYXR0cjsKLQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKLQotCWZpbmRfbm9k ZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX25vZGVfZ2V0YXR0ci5ub2Rl KTsKLQotCWlmICghbm9kZV9yZXMpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc3RhdHVzID0gbm9k ZV9nZXRfYXR0cihub2RlX3Jlcy0+bm9kZSwgJmF0dHIsCi0JCQkgICAgICAgYXJncy0+YXJnc19u b2RlX2dldGF0dHIuYXR0cl9zaXplKTsKLQlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2dldGF0 dHIuYXR0ciwgJmF0dHIsIHN0YXR1cywgMSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X21lc3NhZ2UgPT09PT09PT0KLSAqLwotdTMyIG5vZGV3 cmFwX2dldF9tZXNzYWdlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkK LXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBkc3BfbXNnIG1zZzsKLQlzdHJ1Y3Qgbm9kZV9yZXNf b2JqZWN0ICpub2RlX3JlczsKLQotCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0 LCBhcmdzLT5hcmdzX25vZGVfZ2V0bWVzc2FnZS5ub2RlKTsKLQotCWlmICghbm9kZV9yZXMpCi0J CXJldHVybiAtRUZBVUxUOwotCi0Jc3RhdHVzID0gbm9kZV9nZXRfbWVzc2FnZShub2RlX3Jlcy0+ bm9kZSwgJm1zZywKLQkJCQkgIGFyZ3MtPmFyZ3Nfbm9kZV9nZXRtZXNzYWdlLnRpbWVvdXQpOwot Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9kZV9nZXRtZXNzYWdlLm1lc3NhZ2UsICZtc2csIHN0 YXR1cywgMSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gbm9kZXdy YXBfcGF1c2UgPT09PT09PT0KLSAqLwotdTMyIG5vZGV3cmFwX3BhdXNlKHVuaW9uIHRyYXBwZWRf YXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQl1MzIgcmV0OwotCXN0cnVjdCBub2RlX3Jl c19vYmplY3QgKm5vZGVfcmVzOwotCi0JZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsIHByX2N0 eHQsIGFyZ3MtPmFyZ3Nfbm9kZV9wYXVzZS5ub2RlKTsKLQotCWlmICghbm9kZV9yZXMpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JcmV0ID0gbm9kZV9wYXVzZShub2RlX3Jlcy0+bm9kZSk7Ci0KLQly ZXR1cm4gcmV0OwotfQotCi0vKgotICogPT09PT09PT0gbm9kZXdyYXBfcHV0X21lc3NhZ2UgPT09 PT09PT0KLSAqLwotdTMyIG5vZGV3cmFwX3B1dF9tZXNzYWdlKHVuaW9uIHRyYXBwZWRfYXJncyAq YXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHNwX21z ZyBtc2c7Ci0Jc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7Ci0KLQlmaW5kX25vZGVf aGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3B1dG1lc3NhZ2Uubm9k ZSk7Ci0KLQlpZiAoIW5vZGVfcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCUNQX0ZNX1VTUigm bXNnLCBhcmdzLT5hcmdzX25vZGVfcHV0bWVzc2FnZS5tZXNzYWdlLCBzdGF0dXMsIDEpOwotCi0J aWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0KLQkJICAgIG5vZGVfcHV0X21lc3NhZ2Uobm9kZV9y ZXMtPm5vZGUsICZtc2csCi0JCQkJICAgICBhcmdzLT5hcmdzX25vZGVfcHV0bWVzc2FnZS50aW1l b3V0KTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gbm9kZXdy YXBfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09Ci0gKi8KLXUzMiBub2Rld3JhcF9yZWdpc3Rlcl9u b3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBz dGF0dXMgPSAwOwotCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbjsKLQlzdHJ1 Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKLQotCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVf cmVzLCBwcl9jdHh0LAotCQkJYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5Lm5vZGUpOwot Ci0JaWYgKCFub2RlX3JlcykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBJbml0aWFsaXplIHRo ZSBub3RpZmljYXRpb24gZGF0YSBzdHJ1Y3R1cmUgKi8KLQlub3RpZmljYXRpb24ubmFtZSA9IE5V TEw7Ci0Jbm90aWZpY2F0aW9uLmhhbmRsZSA9IE5VTEw7Ci0KLQlpZiAoIWFyZ3MtPmFyZ3NfcHJv Y19yZWdpc3Rlcl9ub3RpZnkuZXZlbnRfbWFzaykKLQkJQ1BfRk1fVVNSKCZub3RpZmljYXRpb24s Ci0JCQkgIGFyZ3MtPmFyZ3NfcHJvY19yZWdpc3Rlcl9ub3RpZnkubm90aWZpY2F0aW9uLAotCQkJ ICBzdGF0dXMsIDEpOwotCi0Jc3RhdHVzID0gbm9kZV9yZWdpc3Rlcl9ub3RpZnkobm9kZV9yZXMt Pm5vZGUsCi0JCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LmV2ZW50X21h c2ssCi0JCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LgotCQkJCSAgICAg IG5vdGlmeV90eXBlLCAmbm90aWZpY2F0aW9uKTsKLQlDUF9UT19VU1IoYXJncy0+YXJnc19ub2Rl X3JlZ2lzdGVybm90aWZ5Lm5vdGlmaWNhdGlvbiwgJm5vdGlmaWNhdGlvbiwKLQkJICBzdGF0dXMs IDEpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBub2Rld3JhcF9ydW4g PT09PT09PT0KLSAqLwotdTMyIG5vZGV3cmFwX3J1bih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3Ms IHZvaWQgKnByX2N0eHQpCi17Ci0JdTMyIHJldDsKLQlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpu b2RlX3JlczsKLQotCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5h cmdzX25vZGVfcnVuLm5vZGUpOwotCi0JaWYgKCFub2RlX3JlcykKLQkJcmV0dXJuIC1FRkFVTFQ7 Ci0KLQlyZXQgPSBub2RlX3J1bihub2RlX3Jlcy0+bm9kZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQot Ci0vKgotICogPT09PT09PT0gbm9kZXdyYXBfdGVybWluYXRlID09PT09PT09Ci0gKi8KLXUzMiBu b2Rld3JhcF90ZXJtaW5hdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0 KQotewotCWludCBzdGF0dXM7Ci0JaW50IHRlbXBzdGF0dXM7Ci0Jc3RydWN0IG5vZGVfcmVzX29i amVjdCAqbm9kZV9yZXM7Ci0KLQlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwg YXJncy0+YXJnc19ub2RlX3Rlcm1pbmF0ZS5ub2RlKTsKLQotCWlmICghbm9kZV9yZXMpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0Jc3RhdHVzID0gbm9kZV90ZXJtaW5hdGUobm9kZV9yZXMtPm5vZGUs ICZ0ZW1wc3RhdHVzKTsKLQotCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfdGVybWluYXRlLnN0 YXR1cywgJnRlbXBzdGF0dXMsIHN0YXR1cywgMSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X3V1aWRfcHJvcHMgPT09PT09PT0KLSAqLwotdTMy IG5vZGV3cmFwX2dldF91dWlkX3Byb3BzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAq cHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHNwX3V1aWQgbm9kZV91dWlk OwotCXN0cnVjdCBkc3BfbmRicHJvcHMgKnBub2RlX3Byb3BzID0gTlVMTDsKLQl2b2lkICpocHJv Y2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPnByb2Nlc3NvcjsK LQotCUNQX0ZNX1VTUigmbm9kZV91dWlkLCBhcmdzLT5hcmdzX25vZGVfZ2V0dXVpZHByb3BzLm5v ZGVfaWRfcHRyLCBzdGF0dXMsCi0JCSAgMSk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2Nv bnQ7Ci0JcG5vZGVfcHJvcHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNwX25kYnByb3BzKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKHBub2RlX3Byb3BzICE9IE5VTEwpIHsKLQkJc3RhdHVzID0KLQkJ ICAgIG5vZGVfZ2V0X3V1aWRfcHJvcHMoaHByb2Nlc3NvciwgJm5vZGVfdXVpZCwgcG5vZGVfcHJv cHMpOwotCQlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2dldHV1aWRwcm9wcy5ub2RlX3Byb3Bz LCBwbm9kZV9wcm9wcywKLQkJCSAgc3RhdHVzLCAxKTsKLQl9IGVsc2UKLQkJc3RhdHVzID0gLUVO T01FTTsKLWZ1bmNfY29udDoKLQlrZnJlZShwbm9kZV9wcm9wcyk7Ci0JcmV0dXJuIHN0YXR1czsK LX0KLQotLyoKLSAqID09PT09PT09IGZpbmRfc3RybV9oYW5kbGUgPT09PT09PT09Ci0gKi8KLWlu bGluZSB2b2lkIGZpbmRfc3RybV9oYW5kbGUoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKnN0cm1y ZXMsCi0JCQkJdm9pZCAqcHJfY3R4dCwgdm9pZCAqaHN0cmVhbSkKLXsKLQlyY3VfcmVhZF9sb2Nr KCk7Ci0JKnN0cm1yZXMgPSBpZHJfZmluZCgoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9j dHh0KS0+c3RyZWFtX2lkLAotCQkJCQkJCShpbnQpaHN0cmVhbSAtIDEpOwotCXJjdV9yZWFkX3Vu bG9jaygpOwotCXJldHVybjsKLX0KLQotLyoKLSAqID09PT09PT09IHN0cm13cmFwX2FsbG9jYXRl X2J1ZmZlciA9PT09PT09PQotICovCi11MzIgc3RybXdyYXBfYWxsb2NhdGVfYnVmZmVyKHVuaW9u IHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzOwotCXU4 ICoqYXBfYnVmZmVyID0gTlVMTDsKLQl1MzIgbnVtX2J1ZnMgPSBhcmdzLT5hcmdzX3N0cm1fYWxs b2NhdGVidWZmZXIubnVtX2J1ZnM7Ci0Jc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXM7 Ci0KLQlmaW5kX3N0cm1faGFuZGxlKCZzdHJtX3JlcywgcHJfY3R4dCwKLQkJYXJncy0+YXJnc19z dHJtX2FsbG9jYXRlYnVmZmVyLnN0cmVhbSk7Ci0KLQlpZiAoIXN0cm1fcmVzKQotCQlyZXR1cm4g LUVGQVVMVDsKLQotCWlmIChudW1fYnVmcyA+IE1BWF9CVUZTKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCWFwX2J1ZmZlciA9IGttYWxsb2MoKG51bV9idWZzICogc2l6ZW9mKHU4ICopKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKGFwX2J1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0 YXR1cyA9IHN0cm1fYWxsb2NhdGVfYnVmZmVyKHN0cm1fcmVzLAotCQkJCSAgICAgIGFyZ3MtPmFy Z3Nfc3RybV9hbGxvY2F0ZWJ1ZmZlci5zaXplLAotCQkJCSAgICAgIGFwX2J1ZmZlciwgbnVtX2J1 ZnMsIHByX2N0eHQpOwotCWlmICghc3RhdHVzKSB7Ci0JCUNQX1RPX1VTUihhcmdzLT5hcmdzX3N0 cm1fYWxsb2NhdGVidWZmZXIuYXBfYnVmZmVyLCBhcF9idWZmZXIsCi0JCQkgIHN0YXR1cywgbnVt X2J1ZnMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlzdGF0dXMgPSAtRUZBVUxUOwotCQkJc3RybV9m cmVlX2J1ZmZlcihzdHJtX3JlcywKLQkJCQkJIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQp OwotCQl9Ci0JfQotCWtmcmVlKGFwX2J1ZmZlcik7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogPT09PT09PT0gc3RybXdyYXBfY2xvc2UgPT09PT09PT0KLSAqLwotdTMyIHN0cm13cmFw X2Nsb3NlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlzdHJ1 Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKLQotCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1f cmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fY2xvc2Uuc3RyZWFtKTsKLQotCWlmICghc3Ry bV9yZXMpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIHN0cm1fY2xvc2Uoc3RybV9yZXMs IHByX2N0eHQpOwotfQotCi0vKgotICogPT09PT09PT0gc3RybXdyYXBfZnJlZV9idWZmZXIgPT09 PT09PT0KLSAqLwotdTMyIHN0cm13cmFwX2ZyZWVfYnVmZmVyKHVuaW9uIHRyYXBwZWRfYXJncyAq YXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQl1OCAqKmFwX2J1ZmZl ciA9IE5VTEw7Ci0JdTMyIG51bV9idWZzID0gYXJncy0+YXJnc19zdHJtX2ZyZWVidWZmZXIubnVt X2J1ZnM7Ci0Jc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXM7Ci0KLQlmaW5kX3N0cm1f aGFuZGxlKCZzdHJtX3JlcywgcHJfY3R4dCwKLQkJCWFyZ3MtPmFyZ3Nfc3RybV9mcmVlYnVmZmVy LnN0cmVhbSk7Ci0KLQlpZiAoIXN0cm1fcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChu dW1fYnVmcyA+IE1BWF9CVUZTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFwX2J1ZmZlciA9IGtt YWxsb2NfYXJyYXkobnVtX2J1ZnMsIHNpemVvZih1OCAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFw X2J1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCUNQX0ZNX1VTUihhcF9idWZm ZXIsIGFyZ3MtPmFyZ3Nfc3RybV9mcmVlYnVmZmVyLmFwX2J1ZmZlciwgc3RhdHVzLAotCQkgIG51 bV9idWZzKTsKLQotCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBzdHJtX2ZyZWVfYnVmZmVyKHN0 cm1fcmVzLAotCQkJCQkgIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQpOwotCi0JQ1BfVE9f VVNSKGFyZ3MtPmFyZ3Nfc3RybV9mcmVlYnVmZmVyLmFwX2J1ZmZlciwgYXBfYnVmZmVyLCBzdGF0 dXMsCi0JCSAgbnVtX2J1ZnMpOwotCWtmcmVlKGFwX2J1ZmZlcik7Ci0KLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKgotICogPT09PT09PT0gc3RybXdyYXBfZ2V0X2V2ZW50X2hhbmRsZSA9PT09PT09 PQotICovCi11MzIgX19kZXByZWNhdGVkIHN0cm13cmFwX2dldF9ldmVudF9oYW5kbGUodW5pb24g dHJhcHBlZF9hcmdzICphcmdzLAotCQkJCQkgICB2b2lkICpwcl9jdHh0KQotewotCXByX2Vycigi JXM6IGRlcHJlY2F0ZWQgZHNwYnJpZGdlIGlvY3RsXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIC1F Tk9TWVM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBzdHJtd3JhcF9nZXRfaW5mbyA9PT09PT09PQot ICovCi11MzIgc3RybXdyYXBfZ2V0X2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lk ICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBzdHJlYW1faW5mbyBzdHJt X2luZm87Ci0Jc3RydWN0IGRzcF9zdHJlYW1pbmZvIHVzZXI7Ci0Jc3RydWN0IGRzcF9zdHJlYW1p bmZvICp0ZW1wOwotCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOwotCi0JZmluZF9z dHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCi0JCQlhcmdzLT5hcmdzX3N0cm1fZ2V0aW5m by5zdHJlYW0pOwotCi0JaWYgKCFzdHJtX3JlcykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlDUF9G TV9VU1IoJnN0cm1faW5mbywgYXJncy0+YXJnc19zdHJtX2dldGluZm8uc3RyZWFtX2luZm8sIHN0 YXR1cywgMSk7Ci0JdGVtcCA9IHN0cm1faW5mby51c2VyX3N0cm07Ci0KLQlzdHJtX2luZm8udXNl cl9zdHJtID0gJnVzZXI7Ci0KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBzdHJtX2dldF9p bmZvKHN0cm1fcmVzLT5zdHJlYW0sCi0JCQkJICAgICAgICZzdHJtX2luZm8sCi0JCQkJICAgICAg IGFyZ3MtPmFyZ3Nfc3RybV9nZXRpbmZvLgotCQkJCSAgICAgICBzdHJlYW1faW5mb19zaXplKTsK LQl9Ci0JQ1BfVE9fVVNSKHRlbXAsIHN0cm1faW5mby51c2VyX3N0cm0sIHN0YXR1cywgMSk7Ci0J c3RybV9pbmZvLnVzZXJfc3RybSA9IHRlbXA7Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9n ZXRpbmZvLnN0cmVhbV9pbmZvLCAmc3RybV9pbmZvLCBzdGF0dXMsIDEpOwotCXJldHVybiBzdGF0 dXM7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBzdHJtd3JhcF9pZGxlID09PT09PT09Ci0gKi8KLXUz MiBzdHJtd3JhcF9pZGxlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkK LXsKLQl1MzIgcmV0OwotCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOwotCi0JZmlu ZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsIGFyZ3MtPmFyZ3Nfc3RybV9pZGxlLnN0 cmVhbSk7Ci0KLQlpZiAoIXN0cm1fcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldCA9IHN0 cm1faWRsZShzdHJtX3Jlcy0+c3RyZWFtLCBhcmdzLT5hcmdzX3N0cm1faWRsZS5mbHVzaF9mbGFn KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiA9PT09PT09PSBzdHJtd3JhcF9pc3N1ZSA9 PT09PT09PQotICovCi11MzIgc3RybXdyYXBfaXNzdWUodW5pb24gdHJhcHBlZF9hcmdzICphcmdz LCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBzdHJtX3Jlc19v YmplY3QgKnN0cm1fcmVzOwotCi0JZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQs IGFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5zdHJlYW0pOwotCi0JaWYgKCFzdHJtX3JlcykKLQkJcmV0 dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIWFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5idWZmZXIpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JLyogTm8gbmVlZCBvZiBkb2luZyBDUF9GTV9VU1IgZm9yIHRoZSB1 c2VyIGJ1ZmZlciAocGJ1ZmZlcikKLQkgICBhcyB0aGlzIGlzIGRvbmUgaW4gQnJpZGdlIGludGVy bmFsIGZ1bmN0aW9uIGJyaWRnZV9jaG5sX2FkZF9pb19yZXEKLQkgICBpbiBjaG5sX3NtLmMgKi8K LQlzdGF0dXMgPSBzdHJtX2lzc3VlKHN0cm1fcmVzLT5zdHJlYW0sCi0JCQkgICAgYXJncy0+YXJn c19zdHJtX2lzc3VlLmJ1ZmZlciwKLQkJCSAgICBhcmdzLT5hcmdzX3N0cm1faXNzdWUuYnl0ZXMs Ci0JCQkgICAgYXJncy0+YXJnc19zdHJtX2lzc3VlLmJ1Zl9zaXplLAotCQkJICAgIGFyZ3MtPmFy Z3Nfc3RybV9pc3N1ZS5hcmcpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqID09PT09 PT09IHN0cm13cmFwX29wZW4gPT09PT09PT0KLSAqLwotdTMyIHN0cm13cmFwX29wZW4odW5pb24g dHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwot CXN0cnVjdCBzdHJtX2F0dHIgYXR0cjsKLQlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3Jl c19vYmo7Ci0Jc3RydWN0IGRzcF9zdHJlYW1hdHRyaW4gc3RybV9hdHRyX2luOwotCXN0cnVjdCBu b2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOwotCWludCBzdHJtaWQ7Ci0KLQlmaW5kX25vZGVfaGFu ZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19zdHJtX29wZW4ubm9kZSk7Ci0KLQlp ZiAoIW5vZGVfcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCUNQX0ZNX1VTUigmYXR0ciwgYXJn cy0+YXJnc19zdHJtX29wZW4uYXR0cl9pbiwgc3RhdHVzLCAxKTsKLQotCWlmIChhdHRyLnN0cmVh bV9hdHRyX2luICE9IE5VTEwpIHsJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KLQkJQ1BfRk1fVVNS KCZzdHJtX2F0dHJfaW4sIGF0dHIuc3RyZWFtX2F0dHJfaW4sIHN0YXR1cywgMSk7Ci0JCWlmICgh c3RhdHVzKSB7Ci0JCQlhdHRyLnN0cmVhbV9hdHRyX2luID0gJnN0cm1fYXR0cl9pbjsKLQkJCWlm IChhdHRyLnN0cmVhbV9hdHRyX2luLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfTERNQSkKLQkJCQly ZXR1cm4gLUVOT1NZUzsKLQkJfQotCi0JfQotCXN0YXR1cyA9IHN0cm1fb3Blbihub2RlX3Jlcy0+ bm9kZSwKLQkJCSAgIGFyZ3MtPmFyZ3Nfc3RybV9vcGVuLmRpcmVjdGlvbiwKLQkJCSAgIGFyZ3Mt PmFyZ3Nfc3RybV9vcGVuLmluZGV4LCAmYXR0ciwgJnN0cm1fcmVzX29iaiwKLQkJCSAgIHByX2N0 eHQpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0cm1pZCA9IHN0cm1fcmVzX29iai0+aWQgKyAxOwot CQlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX29wZW4uc3RyZWFtLCAmc3RybWlkLCBzdGF0dXMs IDEpOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogPT09PT09PT0gc3RybXdyYXBf cmVjbGFpbSA9PT09PT09PQotICovCi11MzIgc3RybXdyYXBfcmVjbGFpbSh1bmlvbiB0cmFwcGVk X2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTggKmJ1 Zl9wdHI7Ci0JdTMyIHVsX2J5dGVzOwotCXUzMiBkd19hcmc7Ci0JdTMyIHVsX2J1Zl9zaXplOwot CXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOwotCi0JZmluZF9zdHJtX2hhbmRsZSgm c3RybV9yZXMsIHByX2N0eHQsIGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLnN0cmVhbSk7Ci0KLQlp ZiAoIXN0cm1fcmVzKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXN0YXR1cyA9IHN0cm1fcmVjbGFp bShzdHJtX3Jlcy0+c3RyZWFtLCAmYnVmX3B0ciwKLQkJCSAgICAgICZ1bF9ieXRlcywgJnVsX2J1 Zl9zaXplLCAmZHdfYXJnKTsKLQlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX3JlY2xhaW0uYnVm X3B0ciwgJmJ1Zl9wdHIsIHN0YXR1cywgMSk7Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9y ZWNsYWltLmJ5dGVzLCAmdWxfYnl0ZXMsIHN0YXR1cywgMSk7Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFy Z3Nfc3RybV9yZWNsYWltLmFyZywgJmR3X2FyZywgc3RhdHVzLCAxKTsKLQotCWlmIChhcmdzLT5h cmdzX3N0cm1fcmVjbGFpbS5idWZfc2l6ZV9wdHIgIT0gTlVMTCkgewotCQlDUF9UT19VU1IoYXJn cy0+YXJnc19zdHJtX3JlY2xhaW0uYnVmX3NpemVfcHRyLCAmdWxfYnVmX3NpemUsCi0JCQkgIHN0 YXR1cywgMSk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqID09PT09PT09IHN0 cm13cmFwX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQotICovCi11MzIgc3RybXdyYXBfcmVnaXN0 ZXJfbm90aWZ5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlp bnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247Ci0J c3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXM7Ci0KLQlmaW5kX3N0cm1faGFuZGxlKCZz dHJtX3JlcywgcHJfY3R4dCwKLQkJCWFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5zdHJl YW0pOwotCi0JaWYgKCFzdHJtX3JlcykKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBJbml0aWFs aXplIHRoZSBub3RpZmljYXRpb24gZGF0YSBzdHJ1Y3R1cmUgKi8KLQlub3RpZmljYXRpb24ubmFt ZSA9IE5VTEw7Ci0Jbm90aWZpY2F0aW9uLmhhbmRsZSA9IE5VTEw7Ci0KLQlzdGF0dXMgPSBzdHJt X3JlZ2lzdGVyX25vdGlmeShzdHJtX3Jlcy0+c3RyZWFtLAotCQkJCSAgICAgIGFyZ3MtPmFyZ3Nf c3RybV9yZWdpc3Rlcm5vdGlmeS5ldmVudF9tYXNrLAotCQkJCSAgICAgIGFyZ3MtPmFyZ3Nfc3Ry bV9yZWdpc3Rlcm5vdGlmeS4KLQkJCQkgICAgICBub3RpZnlfdHlwZSwgJm5vdGlmaWNhdGlvbik7 Ci0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5ub3RpZmljYXRpb24s ICZub3RpZmljYXRpb24sCi0JCSAgc3RhdHVzLCAxKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0K LS8qCi0gKiA9PT09PT09PSBzdHJtd3JhcF9zZWxlY3QgPT09PT09PT0KLSAqLwotdTMyIHN0cm13 cmFwX3NlbGVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0J dTMyIG1hc2sgPSAwOwotCXN0cnVjdCBzdHJtX29iamVjdCAqc3RybV90YWJbTUFYX1NUUkVBTVNd OwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOwot CWludCAqaWRzW01BWF9TVFJFQU1TXTsKLQlpbnQgaTsKLQotCWlmIChhcmdzLT5hcmdzX3N0cm1f c2VsZWN0LnN0cm1fbnVtID4gTUFYX1NUUkVBTVMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JQ1Bf Rk1fVVNSKGlkcywgYXJncy0+YXJnc19zdHJtX3NlbGVjdC5zdHJlYW1fdGFiLCBzdGF0dXMsCi0J CWFyZ3MtPmFyZ3Nfc3RybV9zZWxlY3Quc3RybV9udW0pOwotCi0JaWYgKHN0YXR1cykKLQkJcmV0 dXJuIHN0YXR1czsKLQotCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnN0 cm1fbnVtOyBpKyspIHsKLQkJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsIGlk c1tpXSk7Ci0KLQkJaWYgKCFzdHJtX3JlcykKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXN0cm1f dGFiW2ldID0gc3RybV9yZXMtPnN0cmVhbTsKLQl9Ci0KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0 dXMgPSBzdHJtX3NlbGVjdChzdHJtX3RhYiwgYXJncy0+YXJnc19zdHJtX3NlbGVjdC5zdHJtX251 bSwKLQkJCQkgICAgICZtYXNrLCBhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnRpbWVvdXQpOwotCX0K LQlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX3NlbGVjdC5tYXNrLCAmbWFzaywgc3RhdHVzLCAx KTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKiBDTU0gKi8KLQotLyoKLSAqID09PT09PT09IGNt bXdyYXBfY2FsbG9jX2J1ZiA9PT09PT09PQotICovCi11MzIgX19kZXByZWNhdGVkIGNtbXdyYXBf Y2FsbG9jX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCi17Ci0J LyogVGhpcyBvcGVyYXRpb24gaXMgZG9uZSBpbiBrZXJuZWwgKi8KLQlwcl9lcnIoIiVzOiBkZXBy ZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOwotCXJldHVybiAtRU5PU1lTOwot fQotCi0vKgotICogPT09PT09PT0gY21td3JhcF9mcmVlX2J1ZiA9PT09PT09PQotICovCi11MzIg X19kZXByZWNhdGVkIGNtbXdyYXBfZnJlZV9idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2 b2lkICpwcl9jdHh0KQotewotCS8qIFRoaXMgb3BlcmF0aW9uIGlzIGRvbmUgaW4ga2VybmVsICov Ci0JcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19fKTsK LQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotLyoKLSAqID09PT09PT09IGNtbXdyYXBfZ2V0X2hhbmRs ZSA9PT09PT09PQotICovCi11MzIgY21td3JhcF9nZXRfaGFuZGxlKHVuaW9uIHRyYXBwZWRfYXJn cyAqYXJncywgdm9pZCAqcHJfY3R4dCkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgY21t X29iamVjdCAqaGNtbV9tZ3I7Ci0Jdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3Nf Y29udGV4dCAqKXByX2N0eHQpLT5wcm9jZXNzb3I7Ci0KLQlzdGF0dXMgPSBjbW1fZ2V0X2hhbmRs ZShocHJvY2Vzc29yLCAmaGNtbV9tZ3IpOwotCi0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfY21tX2dl dGhhbmRsZS5jbW1fbWdyLCAmaGNtbV9tZ3IsIHN0YXR1cywgMSk7Ci0KLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKgotICogPT09PT09PT0gY21td3JhcF9nZXRfaW5mbyA9PT09PT09PQotICovCi11 MzIgY21td3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0 eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNtbV9pbmZvIGNtbV9pbmZvX29iajsK LQotCXN0YXR1cyA9IGNtbV9nZXRfaW5mbyhhcmdzLT5hcmdzX2NtbV9nZXRpbmZvLmNtbV9tZ3Is ICZjbW1faW5mb19vYmopOwotCi0JQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfY21tX2dldGluZm8uY21t X2luZm9fb2JqLCAmY21tX2luZm9fb2JqLCBzdGF0dXMsCi0JCSAgMSk7Ci0KLQlyZXR1cm4gc3Rh dHVzOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW8u YyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2lvLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDQwNzNjOWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL3BtZ3IvaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0g KiBpby5jCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBm b3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIElPIG1hbmFnZXIgaW50ZXJmYWNlOiBNYW5h Z2VzIElPIGJldHdlZW4gQ0hOTCBhbmQgbXNnX2N0cmwuCi0gKgotICogQ29weXJpZ2h0IChDKSAy MDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5Z IEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJ TUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLSNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9z dCBPUyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KLSNpbmNsdWRlIDxk c3BicmlkZ2UvZGJkZWZzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotCi0v KiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLwotI2luY2x1ZGUg PGlvb2JqLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2lvLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0g aW9fY3JlYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ3JlYXRlIGFuIElPIG1h bmFnZXIgb2JqZWN0LCByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgSU8gYmV0d2VlbgotICogICAg ICBDSE5MIGFuZCBtc2dfY3RybAotICovCi1pbnQgaW9fY3JlYXRlKHN0cnVjdCBpb19tZ3IgKipp b19tYW4sIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKLQkJICAgICBjb25zdCBzdHJ1Y3Qg aW9fYXR0cnMgKm1ncl9hdHRydHMpCi17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpp bnRmX2Z4bnM7Ci0Jc3RydWN0IGlvX21nciAqaGlvX21nciA9IE5VTEw7Ci0Jc3RydWN0IGlvX21n cl8gKnBpb19tZ3IgPSBOVUxMOwotCWludCBzdGF0dXMgPSAwOwotCi0JKmlvX21hbiA9IE5VTEw7 Ci0KLQkvKiBBIG1lbW9yeSBiYXNlIG9mIDAgaW1wbGllcyBubyBtZW1vcnkgYmFzZTogKi8KLQlp ZiAoKG1ncl9hdHRydHMtPnNobV9iYXNlICE9IDApICYmIChtZ3JfYXR0cnRzLT5zbV9sZW5ndGgg PT0gMCkpCi0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0KLQlpZiAobWdyX2F0dHJ0cy0+d29yZF9zaXpl ID09IDApCi0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0KLQlpZiAoIXN0YXR1cykgewotCQlkZXZfZ2V0 X2ludGZfZnhucyhoZGV2X29iaiwgJmludGZfZnhucyk7Ci0KLQkJLyogTGV0IEJyaWRnZSBjaGFu bmVsIG1vZHVsZSBmaW5pc2ggdGhlIGNyZWF0ZTogKi8KLQkJc3RhdHVzID0gKCppbnRmX2Z4bnMt PmlvX2NyZWF0ZSkgKCZoaW9fbWdyLCBoZGV2X29iaiwKLQkJCQkJCSAgICAgIG1ncl9hdHRydHMp OwotCi0JCWlmICghc3RhdHVzKSB7Ci0JCQlwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3JfICopaGlv X21ncjsKLQkJCXBpb19tZ3ItPmludGZfZnhucyA9IGludGZfZnhuczsKLQkJCXBpb19tZ3ItPmRl dl9vYmogPSBoZGV2X29iajsKLQotCQkJLyogUmV0dXJuIHRoZSBuZXcgY2hhbm5lbCBtYW5hZ2Vy IGhhbmRsZTogKi8KLQkJCSppb19tYW4gPSBoaW9fbWdyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBpb19kZXN0cm95ID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgRGVsZXRlIElPIG1hbmFnZXIuCi0gKi8KLWludCBpb19kZXN0cm95KHN0 cnVjdCBpb19tZ3IgKmhpb19tZ3IpCi17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpp bnRmX2Z4bnM7Ci0Jc3RydWN0IGlvX21ncl8gKnBpb19tZ3IgPSAoc3RydWN0IGlvX21ncl8gKilo aW9fbWdyOwotCWludCBzdGF0dXM7Ci0KLQlpbnRmX2Z4bnMgPSBwaW9fbWdyLT5pbnRmX2Z4bnM7 Ci0KLQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGRlc3Ryb3kgdGhlIGlvX21ncjogKi8K LQlzdGF0dXMgPSAoKmludGZfZnhucy0+aW9fZGVzdHJveSkgKGhpb19tZ3IpOwotCi0JcmV0dXJu IHN0YXR1czsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdy L2lvb2JqLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pb29iai5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGVmZDk0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMv c3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2lvb2JqLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCAr MCwwIEBACi0vKgotICogaW9vYmouaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3Vw cG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBTdHJ1Y3R1cmUg c3ViY29tcG9uZW50cyBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgSU8gb2JqZWN0cyB3aGljaAot ICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCi0gKgotICogQ29w eXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlz IHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5E IFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI QU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQot I2lmbmRlZiBJT09CSl8KLSNkZWZpbmUgSU9PQkpfCi0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2 ZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+Ci0KLS8qCi0gKiAgVGhpcyBz dHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgaW9fbWdyIHN0cnVjdC4gT3RoZXIsIGltcGxl bWVudGF0aW9uCi0gKiAgc3BlY2lmaWMgZmllbGRzIGZvbGxvdyB0aGlzIHN0cnVjdHVyZSBpbiBt ZW1vcnkuCi0gKi8KLXN0cnVjdCBpb19tZ3JfIHsKLQkvKiBUaGVzZSBtdXN0IGJlIHRoZSBmaXJz dCBmaWVsZHMgaW4gYSBpb19tZ3Igc3RydWN0OiAqLwotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRl eHQgKmJyaWRnZV9jb250ZXh0OwkvKiBCcmlkZ2UgY29udGV4dC4gKi8KLQkvKiBGdW5jdGlvbiBp bnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KLQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZh Y2UgKmludGZfZnhuczsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsJLyogRGV2aWNlIHRo aXMgYm9hcmQgcmVwcmVzZW50cy4gKi8KLX07Ci0KLSNlbmRpZiAvKiBJT09CSl8gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL21zZy5jIGIvZHJpdmVycy9z dGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGYwOTNjZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3Bt Z3IvbXNnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogbXNnLmMKLSAq Ci0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQ IHByb2Nlc3NvcnMuCi0gKgotICogRFNQL0JJT1MgQnJpZGdlIG1zZ19jdHJsIE1vZHVsZS4KLSAq Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoK LSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMg SVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3Mu aD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJy aWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KLSNpbmNsdWRlIDxkc3Bi cmlkZ2UvZHNwZGVmcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gUGxhdGZvcm0gTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KLQotLyog IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxt c2dvYmouaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0g bXNnX2NyZWF0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhbiBvYmpl Y3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBvYmplY3RzCi0g KiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4KLSAqLwotaW50IG1zZ19jcmVhdGUo c3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAotCQkgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRl dl9vYmosIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKQotewotCXN0cnVjdCBicmlkZ2VfZHJ2X2lu dGVyZmFjZSAqaW50Zl9meG5zOwotCXN0cnVjdCBtc2dfbWdyXyAqbXNnX21ncl9vYmo7Ci0Jc3Ry dWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwotCWludCBzdGF0dXMgPSAwOwotCi0JKm1zZ19tYW4gPSBO VUxMOwotCi0JZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZpbnRmX2Z4bnMpOwotCi0JLyog TGV0IEJyaWRnZSBtZXNzYWdlIG1vZHVsZSBmaW5pc2ggdGhlIGNyZWF0ZTogKi8KLQlzdGF0dXMg PQotCSAgICAoKmludGZfZnhucy0+bXNnX2NyZWF0ZSkgKCZobXNnX21nciwgaGRldl9vYmosIG1z Z19jYWxsYmFjayk7Ci0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBGaWxsIGluIERTUCBBUEkgbWVz c2FnZSBtb2R1bGUncyBmaWVsZHMgb2YgdGhlIG1zZ19tZ3IKLQkJICogc3RydWN0dXJlICovCi0J CW1zZ19tZ3Jfb2JqID0gKHN0cnVjdCBtc2dfbWdyXyAqKWhtc2dfbWdyOwotCQltc2dfbWdyX29i ai0+aW50Zl9meG5zID0gaW50Zl9meG5zOwotCi0JCS8qIEZpbmFsbHksIHJldHVybiB0aGUgbmV3 IG1lc3NhZ2UgbWFuYWdlciBoYW5kbGU6ICovCi0JCSptc2dfbWFuID0gaG1zZ19tZ3I7Ci0JfSBl bHNlIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogID09PT09PT09IG1zZ19kZWxldGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBE ZWxldGUgYSBtc2dfY3RybCBtYW5hZ2VyIGFsbG9jYXRlZCBpbiBtc2dfY3JlYXRlKCkuCi0gKi8K LXZvaWQgbXNnX2RlbGV0ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCi17Ci0Jc3RydWN0IG1z Z19tZ3JfICptc2dfbWdyX29iaiA9IChzdHJ1Y3QgbXNnX21ncl8gKilobXNnX21ncjsKLQlzdHJ1 Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKLQotCWlmIChtc2dfbWdyX29iaikg ewotCQlpbnRmX2Z4bnMgPSBtc2dfbWdyX29iai0+aW50Zl9meG5zOwotCi0JCS8qIExldCBCcmlk Z2UgbWVzc2FnZSBtb2R1bGUgZGVzdHJveSB0aGUgbXNnX21ncjogKi8KLQkJKCppbnRmX2Z4bnMt Pm1zZ19kZWxldGUpIChobXNnX21ncik7Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZyhicmlkZ2UsICIl czogRXJyb3IgaG1zZ19tZ3IgaGFuZGxlOiAlcFxuIiwKLQkJCV9fZnVuY19fLCBobXNnX21ncik7 Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNn b2JqLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2dvYmouaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjYTYzMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2dvYmouaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICsw LDAgQEAKLS8qCi0gKiBtc2dvYmouaAotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3Vw cG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBTdHJ1Y3R1cmUg c3ViY29tcG9uZW50cyBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgbXNnX2N0cmwgb2JqZWN0cyB3 aGljaAotICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCi0gKgot ICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0g KiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElT JycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G IE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0g Ki8KLQotI2lmbmRlZiBNU0dPQkpfCi0jZGVmaW5lIE1TR09CSl8KLQotI2luY2x1ZGUgPGRzcGJy aWRnZS9kc3BkZWZzLmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnZGVmcy5oPgotCi0vKgot ICogIFRoaXMgc3RydWN0IGlzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIG1zZ19tZ3Igc3RydWN0LiBP dGhlciwgaW1wbGVtZW50YXRpb24KLSAqICBzcGVjaWZpYyBmaWVsZHMgZm9sbG93IHRoaXMgc3Ry dWN0dXJlIGluIG1lbW9yeS4KLSAqLwotc3RydWN0IG1zZ19tZ3JfIHsKLQkvKiBUaGUgZmlyc3Qg ZmllbGQgbXVzdCBtYXRjaCB0aGF0IGluIF9tc2dfc20uaCAqLwotCi0JLyogRnVuY3Rpb24gaW50 ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIuICovCi0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNl ICppbnRmX2Z4bnM7Ci19OwotCi0jZW5kaWYgLyogTVNHT0JKXyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJkY2QuYyBiL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9ybWdyL2RiZGNkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5 MWQxZDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJk Y2QuYworKysgL2Rldi9udWxsCkBAIC0xLDE0ODQgKzAsMCBAQAotLyoKLSAqIGRiZGNkLmMKLSAq Ci0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQ IHByb2Nlc3NvcnMuCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlv biBvZiB0aGUgRFNQL0JJT1MgQnJpZGdlCi0gKiBDb25maWd1cmF0aW9uIERhdGFiYXNlIChEQ0Qp LgotICoKLSAqIE5vdGVzOgotICogICBUaGUgZnhuIGRjZF9nZXRfb2JqZWN0cyBjYW4gYXBwbHkg YSBjYWxsYmFjayBmeG4gdG8gZWFjaCBEQ0Qgb2JqZWN0Ci0gKiAgIHRoYXQgaXMgbG9jYXRlZCBp biBhIHNwZWNpZmllZCBDT0ZGIGZpbGUuICBBdCB0aGUgbW9tZW50LAotICogICBkY2RfYXV0b19y ZWdpc3RlciwgZGNkX2F1dG9fdW5yZWdpc3RlciwgYW5kIE5MRFIgbW9kdWxlIGFsbCB1c2UKLSAq ICAgZGNkX2dldF9vYmplY3RzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFz IEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBB Q0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0g KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQot LyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNs dWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVm cy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0g TWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KLQotLyogIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS91 dWlkdXRpbC5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhp cyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIGRlZmluZXMuICovCi0jZGVmaW5lIE1BWF9JTlQy Q0hBUl9MRU5HVEggICAgIDE2CS8qIE1heCBpbnQyY2hhciBsZW4gb2YgMzIgYml0IGludCAqLwot Ci0vKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkZXBlbmRlbnQgbGlicmFyaWVzICovCi0j ZGVmaW5lIERFUExJQlNFQ1QJCSIuZHNwYnJpZGdlX2RlcGxpYnMiCi0KLS8qIERDRCBzcGVjaWZp YyBzdHJ1Y3R1cmVzLiAqLwotc3RydWN0IGRjZF9tYW5hZ2VyIHsKLQlzdHJ1Y3QgY29kX21hbmFn ZXIgKmNvZF9tZ3I7CS8qIEhhbmRsZSB0byBDT0QgbWFuYWdlciBvYmplY3QuICovCi19OwotCi0v KiAgUG9pbnRlciB0byB0aGUgcmVnaXN0cnkgc3VwcG9ydCBrZXkgKi8KLXN0YXRpYyBzdHJ1Y3Qg bGlzdF9oZWFkIHJlZ19rZXlfbGlzdDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGJkY2RfbG9j ayk7Ci0KLS8qIEdsb2JhbCByZWZlcmVuY2UgdmFyaWFibGVzLiAqLwotc3RhdGljIHUzMiByZWZz Owotc3RhdGljIHUzMiBlbnVtX3JlZnM7Ci0KLS8qIEhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVz LiAqLwotc3RhdGljIHMzMiBhdG9pKGNoYXIgKnBzel9idWYpOwotc3RhdGljIGludCBnZXRfYXR0 cnNfZnJvbV9idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLAotCQkJCSAgICAgZW51 bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKLQkJCQkgICAgIHN0cnVjdCBkY2RfZ2VuZXJpY29i aiAqZ2VuX29iaik7Ci1zdGF0aWMgdm9pZCBjb21wcmVzc19idWYoY2hhciAqcHN6X2J1ZiwgdTMy IHVsX2J1Zl9zaXplLCBzMzIgY2hhcl9zaXplKTsKLXN0YXRpYyBjaGFyIGRzcF9jaGFyMl9ncHBf Y2hhcihjaGFyICp3b3JkLCBzMzIgZHNwX2NoYXJfc2l6ZSk7Ci1zdGF0aWMgaW50IGdldF9kZXBf bGliX2luZm8oc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKLQkJCQkgICBzdHJ1Y3QgZHNw X3V1aWQgKnV1aWRfb2JqLAotCQkJCSAgIHUxNiAqbnVtX2xpYnMsCi0JCQkJICAgdTE2ICpudW1f cGVyc19saWJzLAotCQkJCSAgIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKLQkJCQkg ICBib29sICpwcnN0bnRfZGVwX2xpYnMsCi0JCQkJICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsK LQotLyoKLSAqICA9PT09PT09PSBkY2RfdXVpZF9mcm9tX3N0cmluZyA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIENvbnZlcnRzIGFuIEFOU0kgc3RyaW5nIHRvIGEgZHNwX3V1aWQuCi0g KiAgUGFyYW1ldGVyczoKLSAqICAgICAgc3pfdXVpZDogICAgUG9pbnRlciB0byBhIHN0cmluZyB0 aGF0IHJlcHJlc2VudHMgYSBkc3BfdXVpZCBvYmplY3QuCi0gKiAgICAgIHV1aWRfb2JqOiAgICAg IFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBvYmplY3QuCi0gKiAgUmV0dXJuczoKLSAqICAgICAgMDog ICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FSU5WQUw6ICBDb3ZlcnNpb24gZmFpbGVkCi0gKiAg UmVxdWlyZXM6Ci0gKiAgICAgIHV1aWRfb2JqICYgc3pfdXVpZCBhcmUgbm9uLU5VTEwgdmFsdWVz LgotICogIEVuc3VyZXM6Ci0gKiAgRGV0YWlsczoKLSAqICAgICAgV2UgYXNzdW1lIHRoZSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgYSBVVUlEIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAq ICAgICAgIjEyMzQ1Njc4XzEyMzRfMTIzNF8xMjM0XzEyMzQ1Njc4OWFiYyIuCi0gKi8KLXN0YXRp YyBpbnQgZGNkX3V1aWRfZnJvbV9zdHJpbmcoY2hhciAqc3pfdXVpZCwgc3RydWN0IGRzcF91dWlk ICp1dWlkX29iaikKLXsKLQljaGFyIGM7Ci0JdTY0IHQ7Ci0Jc3RydWN0IGRzcF91dWlkIHV1aWRf dG1wOwotCi0JLyoKLQkgKiBzc2NhbmYgaW1wbGVtZW50YXRpb24gY2Fubm90IGRlYWwgd2l0aCBo aCBmb3JtYXQgbW9kaWZpZXIKLQkgKiBpZiB0aGUgY29udmVydGVkIHZhbHVlIGRvZXNuJ3QgZml0 IGluIHUzMi4gU28sIGNvbnZlcnQgdGhlCi0JICogbGFzdCBzaXggYnl0ZXMgdG8gdTY0IGFuZCBt ZW1jcHkgd2hhdCBpcyBuZWVkZWQKLQkgKi8KLQlpZiAoc3NjYW5mKHN6X3V1aWQsICIlOHglYyU0 aHglYyU0aHglYyUyaGh4JTJoaHglYyVsbHgiLAotCSAgICAgICAmdXVpZF90bXAuZGF0YTEsICZj LCAmdXVpZF90bXAuZGF0YTIsICZjLAotCSAgICAgICAmdXVpZF90bXAuZGF0YTMsICZjLCAmdXVp ZF90bXAuZGF0YTQsCi0JICAgICAgICZ1dWlkX3RtcC5kYXRhNSwgJmMsICZ0KSAhPSAxMCkKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0KLQl0ID0gY3B1X3RvX2JlNjQodCk7Ci0JbWVtY3B5KCZ1dWlkX3Rt cC5kYXRhNlswXSwgKChjaGFyICopJnQpICsgMiwgNik7Ci0JKnV1aWRfb2JqID0gdXVpZF90bXA7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkY2RfYXV0b19yZWdpc3RlciA9 PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFBhcnNlcyB0aGUgc3VwcGxpZWQgaW1hZ2Ug YW5kIHJlc2lnc3RlcnMgd2l0aCBEQ0QuCi0gKi8KLWludCBkY2RfYXV0b19yZWdpc3RlcihzdHJ1 Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAotCQkJICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCi17 Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAoaGRjZF9tZ3IpCi0JCXN0YXR1cyA9IGRjZF9nZXRf b2JqZWN0cyhoZGNkX21nciwgc3pfY29mZl9wYXRoLAotCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikg ZGNkX3JlZ2lzdGVyX29iamVjdCwKLQkJCQkJICh2b2lkICopc3pfY29mZl9wYXRoKTsKLQllbHNl Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09 PT09PT09IGRjZF9hdXRvX3VucmVnaXN0ZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBQYXJzZXMgdGhlIHN1cHBsaWVkIERTUCBpbWFnZSBhbmQgdW5yZXNpdGVycyBmcm9tIERDRC4K LSAqLwotaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21n ciwKLQkJCSAgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0K LQlpZiAoaGRjZF9tZ3IpCi0JCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0cyhoZGNkX21nciwgc3pf Y29mZl9wYXRoLAotCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikgZGNkX3JlZ2lzdGVyX29iamVjdCwK LQkJCQkJIE5VTEwpOwotCWVsc2UKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQotCXJldHVybiBzdGF0 dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2NyZWF0ZV9tYW5hZ2VyID09PT09PT09Ci0g KiAgUHVycG9zZToKLSAqICAgICAgQ3JlYXRlcyBEQ0QgbWFuYWdlci4KLSAqLwotaW50IGRjZF9j cmVhdGVfbWFuYWdlcihjaGFyICpzel96bF9kbGxfbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBkY2Rf bWFuYWdlciAqKmRjZF9tZ3IpCi17Ci0Jc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOwkvKiBD T0QgbWFuYWdlciBoYW5kbGUgKi8KLQlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0g TlVMTDsJLyogRENEIE1hbmFnZXIgcG9pbnRlciAqLwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3Rh dHVzID0gY29kX2NyZWF0ZSgmY29kX21nciwgc3pfemxfZGxsX25hbWUpOwotCWlmIChzdGF0dXMp Ci0JCWdvdG8gZnVuY19lbmQ7Ci0KLQkvKiBDcmVhdGUgYSBEQ0Qgb2JqZWN0LiAqLwotCWRjZF9t Z3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRjZF9tYW5hZ2VyKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKGRjZF9tZ3Jfb2JqICE9IE5VTEwpIHsKLQkJLyogRmlsbCBvdXQgdGhlIG9iamVjdC4g Ki8KLQkJZGNkX21ncl9vYmotPmNvZF9tZ3IgPSBjb2RfbWdyOwotCi0JCS8qIFJldHVybiBoYW5k bGUgdG8gdGhpcyBEQ0QgaW50ZXJmYWNlLiAqLwotCQkqZGNkX21nciA9IGRjZF9tZ3Jfb2JqOwot CX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0KLQkJLyoKLQkJICogSWYgYWxsb2NhdGlv biBvZiBEY2RNYW5hZ2VyIG9iamVjdCBmYWlsZWQsIGRlbGV0ZSB0aGUKLQkJICogQ09EIG1hbmFn ZXIuCi0JCSAqLwotCQljb2RfZGVsZXRlKGNvZF9tZ3IpOwotCX0KLQotZnVuY19lbmQ6Ci0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkY2RfZGVzdHJveV9tYW5hZ2VyID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRnJlZXMgRENEIE1hbmFnZXIgb2JqZWN0Lgot ICovCi1pbnQgZGNkX2Rlc3Ryb3lfbWFuYWdlcihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdy KQotewotCXN0cnVjdCBkY2RfbWFuYWdlciAqZGNkX21ncl9vYmogPSBoZGNkX21ncjsKLQlpbnQg c3RhdHVzID0gLUVGQVVMVDsKLQotCWlmIChoZGNkX21ncikgewotCQkvKiBEZWxldGUgdGhlIENP RCBtYW5hZ2VyLiAqLwotCQljb2RfZGVsZXRlKGRjZF9tZ3Jfb2JqLT5jb2RfbWdyKTsKLQotCQkv KiBEZWFsbG9jYXRlIGEgRENEIG1hbmFnZXIgb2JqZWN0LiAqLwotCQlrZnJlZShkY2RfbWdyX29i aik7Ci0KLQkJc3RhdHVzID0gMDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IGRjZF9lbnVtZXJhdGVfb2JqZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAq ICAgICAgRW51bWVyYXRlcyBvYmplY3RzIGluIHRoZSBEQ0QuCi0gKi8KLWludCBkY2RfZW51bWVy YXRlX29iamVjdChzMzIgaW5kZXgsIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCi0JCQkJ c3RydWN0IGRzcF91dWlkICp1dWlkX29iaikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQljaGFyIHN6 X3JlZ19rZXlbRENEX01BWFBBVEhMRU5HVEhdOwotCWNoYXIgc3pfdmFsdWVbRENEX01BWFBBVEhM RU5HVEhdOwotCXN0cnVjdCBkc3BfdXVpZCBkc3BfdXVpZF9vYmo7Ci0JY2hhciBzel9vYmpfdHlw ZVtNQVhfSU5UMkNIQVJfTEVOR1RIXTsJLyogc3RyLiByZXAuIG9mIG9ial90eXBlLiAqLwotCXUz MiBkd19rZXlfbGVuID0gMDsKLQlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5OwotCWludCBs ZW47Ci0KLQlpZiAoKGluZGV4ICE9IDApICYmIChlbnVtX3JlZnMgPT0gMCkpIHsKLQkJLyoKLQkJ ICogSWYgYW4gZW51bWVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkIG9uIGFuIGluZGV4IGdyZWF0 ZXIKLQkJICogdGhhbiB6ZXJvLCB0aGVuIHRoZSBjdXJyZW50IGVudW1fcmVmcyBtdXN0IGhhdmUg YmVlbgotCQkgKiBpbmNyZW1lbnRlZCB0byBncmVhdGVyIHRoYW4gemVyby4KLQkJICovCi0JCXN0 YXR1cyA9IC1FSURSTTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBQcmUtZGV0ZXJtaW5lIGZpbmFs IGtleSBsZW5ndGguIEl0J3MgbGVuZ3RoIG9mIERDRF9SRUdLRVkgKwotCQkgKiAgIl9cMCIgKyBs ZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsgdGVybWluYXRpbmcgTlVMTC4KLQkJICovCi0J CWR3X2tleV9sZW4gPSBzdHJsZW4oRENEX1JFR0tFWSkgKyAxICsgc2l6ZW9mKHN6X29ial90eXBl KSArIDE7Ci0KLQkJLyogQ3JlYXRlIHByb3BlciBSRUcga2V5OyBjb25jYXRlbmF0ZSBEQ0RfUkVH S0VZIHdpdGgKLQkJICogb2JqX3R5cGUuICovCi0JCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JF R0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsgMSk7Ci0JCWlmICgoc3RybGVuKHN6X3JlZ19rZXkp ICsgc3RybGVuKCJfXDAiKSkgPAotCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKLQkJCXN0cm5j YXQoc3pfcmVnX2tleSwgIl9cMCIsIDIpOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVQRVJN OwotCQl9Ci0KLQkJLyogVGhpcyBzbnByaW50ZiBpcyBndWFyYW50ZWVkIG5vdCB0byBleGNlZWQg bWF4IHNpemUgb2YgYW4KLQkJICogaW50ZWdlci4gKi8KLQkJc3RhdHVzID0gc25wcmludGYoc3pf b2JqX3R5cGUsIE1BWF9JTlQyQ0hBUl9MRU5HVEgsICIlZCIsCi0JCQkJICBvYmpfdHlwZSk7Ci0K LQkJaWYgKHN0YXR1cyA9PSAtMSkgewotCQkJc3RhdHVzID0gLUVQRVJNOwotCQl9IGVsc2Ugewot CQkJc3RhdHVzID0gMDsKLQkJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKHN6X29i al90eXBlKSkgPAotCQkJICAgIERDRF9NQVhQQVRITEVOR1RIKSB7Ci0JCQkJc3RybmNhdChzel9y ZWdfa2V5LCBzel9vYmpfdHlwZSwKLQkJCQkJc3RybGVuKHN6X29ial90eXBlKSArIDEpOwotCQkJ fSBlbHNlIHsKLQkJCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIXN0YXR1 cykgewotCQkJbGVuID0gc3RybGVuKHN6X3JlZ19rZXkpOwotCQkJc3Bpbl9sb2NrKCZkYmRjZF9s b2NrKTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGlu aykgewotCQkJCWlmICghc3RybmNtcChkY2Rfa2V5LT5uYW1lLCBzel9yZWdfa2V5LCBsZW4pCi0J CQkJCQkmJiAhaW5kZXgtLSkgewotCQkJCQlzdHJuY3B5KHN6X3ZhbHVlLCAmZGNkX2tleS0+bmFt ZVtsZW5dLAotCQkJCQkgICAgICAgc3RybGVuKCZkY2Rfa2V5LT5uYW1lW2xlbl0pICsgMSk7Ci0J CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7Ci0K LQkJCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KQotCQkJCXN0YXR1cyA9IC1F Tk9EQVRBOwotCQl9Ci0KLQkJaWYgKCFzdGF0dXMpIHsKLQkJCS8qIENyZWF0ZSBVVUlEIHZhbHVl IHVzaW5nIHN0cmluZyByZXRyaWV2ZWQgZnJvbQotCQkJICogcmVnaXN0cnkuICovCi0JCQlzdGF0 dXMgPSBkY2RfdXVpZF9mcm9tX3N0cmluZyhzel92YWx1ZSwgJmRzcF91dWlkX29iaik7Ci0KLQkJ CWlmICghc3RhdHVzKSB7Ci0JCQkJKnV1aWRfb2JqID0gZHNwX3V1aWRfb2JqOwotCi0JCQkJLyog SW5jcmVtZW50IGVudW1fcmVmcyB0byB1cGRhdGUgcmVmZXJlbmNlCi0JCQkJICogY291bnQuICov Ci0JCQkJZW51bV9yZWZzKys7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3RhdHVzID09IC1FTk9EQVRB KSB7Ci0JCQkvKiBBdCB0aGUgZW5kIG9mIGVudW1lcmF0aW9uLiBSZXNldCBlbnVtX3JlZnMuICov Ci0JCQllbnVtX3JlZnMgPSAwOwotCi0JCQkvKgotCQkJICogVE9ETzogUmV2aXNpdCwgdGhpcyBp cyBub3QgYW4gZXJyb3IgY2FzZSBidXQgY29kZQotCQkJICogZXhwZWN0cyBub24temVybyB2YWx1 ZS4KLQkJCSAqLwotCQkJc3RhdHVzID0gRU5PREFUQTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9 IC1FUEVSTTsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT0gZGNkX2V4aXQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEaXNjb250aW51ZSB1 c2FnZSBvZiB0aGUgRENEIG1vZHVsZS4KLSAqLwotdm9pZCBkY2RfZXhpdCh2b2lkKQotewotCXN0 cnVjdCBkY2Rfa2V5X2VsZW0gKnJ2LCAqcnZfdG1wOwotCi0JcmVmcy0tOwotCWlmIChyZWZzID09 IDApIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ2LCBydl90bXAsICZyZWdfa2V5X2xp c3QsIGxpbmspIHsKLQkJCWxpc3RfZGVsKCZydi0+bGluayk7Ci0JCQlrZnJlZShydi0+cGF0aCk7 Ci0JCQlrZnJlZShydik7Ci0JCX0KLQl9Ci0KLX0KLQotLyoKLSAqICA9PT09PT09PSBkY2RfZ2V0 X2RlcF9saWJzID09PT09PT09Ci0gKi8KLWludCBkY2RfZ2V0X2RlcF9saWJzKHN0cnVjdCBkY2Rf bWFuYWdlciAqaGRjZF9tZ3IsCi0JCQkgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKLQkJ CSAgICB1MTYgbnVtX2xpYnMsIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKLQkJCSAg ICBib29sICpwcnN0bnRfZGVwX2xpYnMsCi0JCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQot ewotCWludCBzdGF0dXMgPSAwOwotCi0Jc3RhdHVzID0KLQkgICAgZ2V0X2RlcF9saWJfaW5mbyho ZGNkX21nciwgdXVpZF9vYmosICZudW1fbGlicywgTlVMTCwgZGVwX2xpYl91dWlkcywKLQkJCSAg ICAgcHJzdG50X2RlcF9saWJzLCBwaGFzZSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogID09PT09PT09IGRjZF9nZXRfbnVtX2RlcF9saWJzID09PT09PT09Ci0gKi8KLWludCBkY2Rf Z2V0X251bV9kZXBfbGlicyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAotCQkJCXN0cnVj dCBkc3BfdXVpZCAqdXVpZF9vYmosCi0JCQkJdTE2ICpudW1fbGlicywgdTE2ICpudW1fcGVyc19s aWJzLAotCQkJCWVudW0gbmxkcl9waGFzZSBwaGFzZSkKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQot CXN0YXR1cyA9IGdldF9kZXBfbGliX2luZm8oaGRjZF9tZ3IsIHV1aWRfb2JqLCBudW1fbGlicywg bnVtX3BlcnNfbGlicywKLQkJCQkgIE5VTEwsIE5VTEwsIHBoYXNlKTsKLQotCXJldHVybiBzdGF0 dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2dldF9vYmplY3RfZGVmID09PT09PT09Ci0g KiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmVzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbm9kZSBv ciBwcm9jZXNzb3IgYmFzZWQgb24gdGhlIFVVSUQgYW5kCi0gKiAgICAgIG9iamVjdCB0eXBlLgot ICovCi1pbnQgZGNkX2dldF9vYmplY3RfZGVmKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3Is Ci0JCQkgICAgICBzdHJ1Y3QgZHNwX3V1aWQgKm9ial91dWlkLAotCQkJICAgICAgZW51bSBkc3Bf ZGNkb2JqdHlwZSBvYmpfdHlwZSwKLQkJCSAgICAgIHN0cnVjdCBkY2RfZ2VuZXJpY29iaiAqb2Jq X2RlZikKLXsKLQlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CS8q IHB0ciB0byBEQ0QgbWdyICovCi0Jc3RydWN0IGNvZF9saWJyYXJ5b2JqICpsaWIgPSBOVUxMOwot CWludCBzdGF0dXMgPSAwOwotCWludCBsZW47Ci0JdTMyIHVsX2FkZHIgPSAwOwkvKiBVc2VkIGJ5 IGNvZF9nZXRfc2VjdGlvbiAqLwotCXUzMiB1bF9sZW4gPSAwOwkJLyogVXNlZCBieSBjb2RfZ2V0 X3NlY3Rpb24gKi8KLQl1MzIgZHdfYnVmX3NpemU7CS8qIFVzZWQgYnkgUkVHIGZ1bmN0aW9ucyAq LwotCWNoYXIgc3pfcmVnX2tleVtEQ0RfTUFYUEFUSExFTkdUSF07Ci0JY2hhciAqc3pfdXVpZDsJ CS8qW01BWFVVSURMRU5dOyAqLwotCWNoYXIgKnRtcDsKLQlzdHJ1Y3QgZGNkX2tleV9lbGVtICpk Y2Rfa2V5ID0gTlVMTDsKLQljaGFyIHN6X3NlY3RfbmFtZVtNQVhVVUlETEVOICsgMl07CS8qICIu W1VVSURdXDAiICovCi0JY2hhciAqcHN6X2NvZmZfYnVmOwotCXUzMiBkd19rZXlfbGVuOwkJLyog TGVuIG9mIFJFRyBrZXkuICovCi0JY2hhciBzel9vYmpfdHlwZVtNQVhfSU5UMkNIQVJfTEVOR1RI XTsJLyogc3RyLiByZXAuIG9mIG9ial90eXBlLiAqLwotCi0Jc3pfdXVpZCA9IGt6YWxsb2MoTUFY VVVJRExFTiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzel91dWlkKSB7Ci0JCXN0YXR1cyA9IC1FTk9N RU07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JaWYgKCFoZGNkX21ncikgewotCQlzdGF0dXMg PSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCS8qIFByZS1kZXRlcm1pbmUgZmlu YWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCi0JICogICJfXDAiICsg bGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwgKi8KLQlkd19r ZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkpICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAx OwotCi0JLyogQ3JlYXRlIHByb3BlciBSRUcga2V5OyBjb25jYXRlbmF0ZSBEQ0RfUkVHS0VZIHdp dGggb2JqX3R5cGUuICovCi0Jc3RybmNweShzel9yZWdfa2V5LCBEQ0RfUkVHS0VZLCBzdHJsZW4o RENEX1JFR0tFWSkgKyAxKTsKLQotCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKCJf XDAiKSkgPCBEQ0RfTUFYUEFUSExFTkdUSCkKLQkJc3RybmNhdChzel9yZWdfa2V5LCAiX1wwIiwg Mik7Ci0JZWxzZQotCQlzdGF0dXMgPSAtRVBFUk07Ci0KLQlzdGF0dXMgPSBzbnByaW50Zihzel9v YmpfdHlwZSwgTUFYX0lOVDJDSEFSX0xFTkdUSCwgIiVkIiwgb2JqX3R5cGUpOwotCWlmIChzdGF0 dXMgPT0gLTEpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IDA7 Ci0KLQkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oc3pfb2JqX3R5cGUpKSA8Ci0J CSAgICBEQ0RfTUFYUEFUSExFTkdUSCkgewotCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel9vYmpf dHlwZSwKLQkJCQlzdHJsZW4oc3pfb2JqX3R5cGUpICsgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0 dXMgPSAtRVBFUk07Ci0JCX0KLQotCQkvKiBDcmVhdGUgVVVJRCB2YWx1ZSB0byBzZXQgaW4gcmVn aXN0cnkuICovCi0JCXNucHJpbnRmKHN6X3V1aWQsIE1BWFVVSURMRU4sICIlcFVMIiwgb2JqX3V1 aWQpOwotCi0JCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgTUFYVVVJRExFTikgPCBEQ0RfTUFY UEFUSExFTkdUSCkKLQkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfdXVpZCwgTUFYVVVJRExFTik7 Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQotCQkvKiBSZXRyaWV2ZSBwYXRocyBmcm9t IHRoZSByZWdpc3RyeSBiYXNlZCBvbiBzdHJ1Y3QgZHNwX3V1aWQgKi8KLQkJZHdfYnVmX3NpemUg PSBEQ0RfTUFYUEFUSExFTkdUSDsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3Bpbl9sb2NrKCZk YmRjZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5LCAmcmVnX2tleV9saXN0 LCBsaW5rKSB7Ci0JCQlpZiAoIXN0cm5jbXAoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKLQkJ CQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpKQotCQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fdW5s b2NrKCZkYmRjZF9sb2NrKTsKLQkJaWYgKCZkY2Rfa2V5LT5saW5rID09ICZyZWdfa2V5X2xpc3Qp IHsKLQkJCXN0YXR1cyA9IC1FTk9LRVk7Ci0JCQlnb3RvIGZ1bmNfZW5kOwotCQl9Ci0JfQotCi0K LQkvKiBPcGVuIENPRkYgZmlsZS4gKi8KLQlzdGF0dXMgPSBjb2Rfb3BlbihkY2RfbWdyX29iai0+ Y29kX21nciwgZGNkX2tleS0+cGF0aCwKLQkJCQkJCQlDT0RfTk9MT0FELCAmbGliKTsKLQlpZiAo c3RhdHVzKSB7Ci0JCXN0YXR1cyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0J LyogRW5zdXJlIHN6X3V1aWQgKyAxIGlzIG5vdCBncmVhdGVyIHRoYW4gc2l6ZW9mIHN6X3NlY3Rf bmFtZS4gKi8KLQlsZW4gPSBzdHJsZW4oc3pfdXVpZCk7Ci0JaWYgKGxlbiArIDEgPiBzaXplb2Yo c3pfc2VjdF9uYW1lKSkgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0J fQotCi0JLyogQ3JlYXRlIHNlY3Rpb24gbmFtZSBiYXNlZCBvbiBub2RlIFVVSUQuIEEgcGVyaW9k IGlzCi0JICogcHJlLXBlbmRlZCB0byB0aGUgVVVJRCBzdHJpbmcgdG8gZm9ybSB0aGUgc2VjdGlv biBuYW1lLgotCSAqIEkuZS4gIi4yNEJDOEQ5MF9CQjQ1XzExZDRfQjc1Nl8wMDYwMDhCREI2NkYi ICovCi0KLQlsZW4gLT0gNDsJLyogdXVpZCBoYXMgNCBkZWxpbWl0ZXJzICctJyAqLwotCXRtcCA9 IHN6X3V1aWQ7Ci0KLQlzdHJuY3B5KHN6X3NlY3RfbmFtZSwgIi4iLCAyKTsKLQlkbyB7Ci0JCWNo YXIgKnV1aWQgPSBzdHJzZXAoJnRtcCwgIi0iKTsKLQotCQlpZiAoIXV1aWQpCi0JCQlicmVhazsK LQkJbGVuIC09IHN0cmxlbih1dWlkKTsKLQkJc3RybmNhdChzel9zZWN0X25hbWUsIHV1aWQsIHN0 cmxlbih1dWlkKSArIDEpOwotCX0gd2hpbGUgKGxlbiAmJiBzdHJuY2F0KHN6X3NlY3RfbmFtZSwg Il8iLCAyKSk7Ci0KLQkvKiBHZXQgc2VjdGlvbiBpbmZvcm1hdGlvbi4gKi8KLQlzdGF0dXMgPSBj b2RfZ2V0X3NlY3Rpb24obGliLCBzel9zZWN0X25hbWUsICZ1bF9hZGRyLCAmdWxfbGVuKTsKLQlp ZiAoc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQot Ci0JLyogQWxsb2NhdGUgemVyb2VkIGJ1ZmZlci4gKi8KLQlwc3pfY29mZl9idWYgPSBremFsbG9j KHVsX2xlbiArIDQsIEdGUF9LRVJORUwpOwotCWlmIChwc3pfY29mZl9idWYgPT0gTlVMTCkgewot CQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLSNpZmRlZiBfREJfVElP TUFQCi0JaWYgKHN0cnN0cihkY2Rfa2V5LT5wYXRoLCAiaXZhIikgPT0gTlVMTCkgewotCQkvKiBM b2NhdGUgc2VjdGlvbiBieSBvYmplY3RJRCBhbmQgcmVhZCBpdHMgY29udGVudC4gKi8KLQkJc3Rh dHVzID0KLQkJICAgIGNvZF9yZWFkX3NlY3Rpb24obGliLCBzel9zZWN0X25hbWUsIHBzel9jb2Zm X2J1ZiwgdWxfbGVuKTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPQotCQkgICAgY29kX3JlYWRfc2Vj dGlvbihsaWIsIHN6X3NlY3RfbmFtZSwgcHN6X2NvZmZfYnVmLCB1bF9sZW4pOwotCQlkZXZfZGJn KGJyaWRnZSwgIiVzOiBTa2lwcGVkIEJ5dGUgc3dhcCBmb3IgSVZBISFcbiIsIF9fZnVuY19fKTsK LQl9Ci0jZWxzZQotCXN0YXR1cyA9IGNvZF9yZWFkX3NlY3Rpb24obGliLCBzel9zZWN0X25hbWUs IHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKLSNlbmRpZgotCWlmICghc3RhdHVzKSB7Ci0JCS8qIENv bXByZXNzIERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICovCi0JCWlmIChzdHJz dHIoZGNkX2tleS0+cGF0aCwgIml2YSIpID09IE5VTEwpIHsKLQkJCWNvbXByZXNzX2J1Zihwc3pf Y29mZl9idWYsIHVsX2xlbiwgRFNQV09SRFNJWkUpOwotCQl9IGVsc2UgewotCQkJY29tcHJlc3Nf YnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCAxKTsKLQkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IENv bXByZXNzaW5nIElWQSBDT0ZGIGJ1ZmZlciBieSAxICIKLQkJCQkiZm9yIElWQSEhXG4iLCBfX2Z1 bmNfXyk7Ci0JCX0KLQotCQkvKiBQYXJzZSB0aGUgY29udGVudCBvZiB0aGUgQ09GRiBidWZmZXIu ICovCi0JCXN0YXR1cyA9Ci0JCSAgICBnZXRfYXR0cnNfZnJvbV9idWYocHN6X2NvZmZfYnVmLCB1 bF9sZW4sIG9ial90eXBlLCBvYmpfZGVmKTsKLQkJaWYgKHN0YXR1cykKLQkJCXN0YXR1cyA9IC1F QUNDRVM7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVBQ0NFUzsKLQl9Ci0KLQkvKiBGcmVlIHRo ZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KLQlrZnJlZShwc3pfY29m Zl9idWYpOwotZnVuY19lbmQ6Ci0JaWYgKGxpYikKLQkJY29kX2Nsb3NlKGxpYik7Ci0KLQlrZnJl ZShzel91dWlkKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNk X2dldF9vYmplY3RzID09PT09PT09Ci0gKi8KLWludCBkY2RfZ2V0X29iamVjdHMoc3RydWN0IGRj ZF9tYW5hZ2VyICpoZGNkX21nciwKLQkJCSAgIGNoYXIgKnN6X2NvZmZfcGF0aCwgZGNkX3JlZ2lz dGVyZnhuIHJlZ2lzdGVyX2Z4biwKLQkJCSAgIHZvaWQgKmhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGNk X21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JY2hh ciAqcHN6X2NvZmZfYnVmOwotCWNoYXIgKnBzel9jdXI7Ci0Jc3RydWN0IGNvZF9saWJyYXJ5b2Jq ICpsaWIgPSBOVUxMOwotCXUzMiB1bF9hZGRyID0gMDsJLyogVXNlZCBieSBjb2RfZ2V0X3NlY3Rp b24gKi8KLQl1MzIgdWxfbGVuID0gMDsJCS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCi0J Y2hhciBzZXBzW10gPSAiOiwgIjsKLQljaGFyICp0b2tlbiA9IE5VTEw7Ci0Jc3RydWN0IGRzcF91 dWlkIGRzcF91dWlkX29iajsKLQlzMzIgb2JqZWN0X3R5cGU7Ci0KLQlpZiAoIWhkY2RfbWdyKSB7 Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JLyogT3BlbiBE U1AgY29mZiBmaWxlLCBkb24ndCBsb2FkIHN5bWJvbHMuICovCi0Jc3RhdHVzID0gY29kX29wZW4o ZGNkX21ncl9vYmotPmNvZF9tZ3IsIHN6X2NvZmZfcGF0aCwgQ09EX05PTE9BRCwgJmxpYik7Ci0J aWYgKHN0YXR1cykgewotCQlzdGF0dXMgPSAtRUFDQ0VTOwotCQlnb3RvIGZ1bmNfY29udDsKLQl9 Ci0KLQkvKiBHZXQgRENEX1JFU0lHRVJfU0VDVElPTiBzZWN0aW9uIGluZm9ybWF0aW9uLiAqLwot CXN0YXR1cyA9IGNvZF9nZXRfc2VjdGlvbihsaWIsIERDRF9SRUdJU1RFUl9TRUNUSU9OLCAmdWxf YWRkciwgJnVsX2xlbik7Ci0JaWYgKHN0YXR1cyB8fCAhKHVsX2xlbiA+IDApKSB7Ci0JCXN0YXR1 cyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnVuY19jb250OwotCX0KLQotCS8qIEFsbG9jYXRlIHplcm9l ZCBidWZmZXIuICovCi0JcHN6X2NvZmZfYnVmID0ga3phbGxvYyh1bF9sZW4gKyA0LCBHRlBfS0VS TkVMKTsKLQlpZiAocHN6X2NvZmZfYnVmID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsK LQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotI2lmZGVmIF9EQl9USU9NQVAKLQlpZiAoc3Ryc3RyKHN6 X2NvZmZfcGF0aCwgIml2YSIpID09IE5VTEwpIHsKLQkJLyogTG9jYXRlIHNlY3Rpb24gYnkgb2Jq ZWN0SUQgYW5kIHJlYWQgaXRzIGNvbnRlbnQuICovCi0JCXN0YXR1cyA9IGNvZF9yZWFkX3NlY3Rp b24obGliLCBEQ0RfUkVHSVNURVJfU0VDVElPTiwKLQkJCQkJICBwc3pfY29mZl9idWYsIHVsX2xl bik7Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZyhicmlkZ2UsICIlczogU2tpcHBlZCBCeXRlIHN3YXAg Zm9yIElWQSEhXG4iLCBfX2Z1bmNfXyk7Ci0JCXN0YXR1cyA9IGNvZF9yZWFkX3NlY3Rpb24obGli LCBEQ0RfUkVHSVNURVJfU0VDVElPTiwKLQkJCQkJICBwc3pfY29mZl9idWYsIHVsX2xlbik7Ci0J fQotI2Vsc2UKLQlzdGF0dXMgPQotCSAgICBjb2RfcmVhZF9zZWN0aW9uKGxpYiwgRENEX1JFR0lT VEVSX1NFQ1RJT04sIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKLSNlbmRpZgotCWlmICghc3RhdHVz KSB7Ci0JCS8qIENvbXByZXNzIERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICov Ci0JCWlmIChzdHJzdHIoc3pfY29mZl9wYXRoLCAiaXZhIikgPT0gTlVMTCkgewotCQkJY29tcHJl c3NfYnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCBEU1BXT1JEU0laRSk7Ci0JCX0gZWxzZSB7Ci0J CQljb21wcmVzc19idWYocHN6X2NvZmZfYnVmLCB1bF9sZW4sIDEpOwotCQkJZGV2X2RiZyhicmlk Z2UsICIlczogQ29tcHJlc3MgQ09GRiBidWZmZXIgd2l0aCAxIHdvcmQgIgotCQkJCSJmb3IgSVZB ISFcbiIsIF9fZnVuY19fKTsKLQkJfQotCi0JCS8qIFJlYWQgZnJvbSBidWZmZXIgYW5kIHJlZ2lz dGVyIG9iamVjdCBpbiBidWZmZXIuICovCi0JCXBzel9jdXIgPSBwc3pfY29mZl9idWY7Ci0JCXdo aWxlICgodG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpKSAmJiAqdG9rZW4gIT0gJ1wwJykg ewotCQkJLyogIFJldHJpZXZlIFVVSUQgc3RyaW5nLiAqLwotCQkJc3RhdHVzID0gZGNkX3V1aWRf ZnJvbV9zdHJpbmcodG9rZW4sICZkc3BfdXVpZF9vYmopOwotCi0JCQlpZiAoIXN0YXR1cykgewot CQkJCS8qICBSZXRyaWV2ZSBvYmplY3QgdHlwZSAqLwotCQkJCXRva2VuID0gc3Ryc2VwKCZwc3pf Y3VyLCBzZXBzKTsKLQotCQkJCS8qICBSZXRyaWV2ZSBvYmplY3QgdHlwZSAqLwotCQkJCW9iamVj dF90eXBlID0gYXRvaSh0b2tlbik7Ci0KLQkJCQkvKgotCQkJCSogIEFwcGx5IHJlZ2lzdGVyX2Z4 biB0byB0aGUgZm91bmQgRENEIG9iamVjdC4KLQkJCQkqICBQb3NzaWJsZSBhY3Rpb25zIGluY2x1 ZGU6Ci0JCQkJKgotCQkJCSogIDEpIFJlZ2lzdGVyIGZvdW5kIERDRCBvYmplY3QuCi0JCQkJKiAg MikgVW5yZWdpc3RlciBmb3VuZCBEQ0Qgb2JqZWN0Ci0JCQkJKiAgICAgKHdoZW4gaGFuZGxlID09 IE5VTEwpCi0JCQkJKiAgMykgQWRkIG92ZXJsYXkgbm9kZS4KLQkJCQkqLwotCQkJCXN0YXR1cyA9 Ci0JCQkJICAgIHJlZ2lzdGVyX2Z4bigmZHNwX3V1aWRfb2JqLCBvYmplY3RfdHlwZSwKLQkJCQkJ CSBoYW5kbGUpOwotCQkJfQotCQkJaWYgKHN0YXR1cykgewotCQkJCS8qIGlmIGVycm9yIG9jY3Vy cywgYnJlYWsgZnJvbSB3aGlsZSBsb29wLiAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBl bHNlIHsKLQkJc3RhdHVzID0gLUVBQ0NFUzsKLQl9Ci0KLQkvKiBGcmVlIHRoZSBwcmV2aW91c2x5 IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KLQlrZnJlZShwc3pfY29mZl9idWYpOwotZnVu Y19jb250OgotCWlmIChsaWIpCi0JCWNvZF9jbG9zZShsaWIpOwotCi1mdW5jX2VuZDoKLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRjZF9nZXRfbGlicmFyeV9uYW1lID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmVzIHRoZSBsaWJyYXJ5IG5hbWUg Zm9yIHRoZSBnaXZlbiBVVUlELgotICoKLSAqLwotaW50IGRjZF9nZXRfbGlicmFyeV9uYW1lKHN0 cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCi0JCQkJc3RydWN0IGRzcF91dWlkICp1dWlkX29i aiwKLQkJCQljaGFyICpzdHJfbGliX25hbWUsCi0JCQkJdTMyICpidWZmX3NpemUsCi0JCQkJZW51 bSBubGRyX3BoYXNlIHBoYXNlLCBib29sICpwaGFzZV9zcGxpdCkKLXsKLQljaGFyIHN6X3JlZ19r ZXlbRENEX01BWFBBVEhMRU5HVEhdOwotCWNoYXIgc3pfdXVpZFtNQVhVVUlETEVOXTsKLQl1MzIg ZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLwotCWNoYXIgc3pfb2JqX3R5cGVbTUFY X0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KLQlpbnQgc3Rh dHVzID0gMDsKLQlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5ID0gTlVMTDsKLQotCWRldl9k YmcoYnJpZGdlLCAiJXM6IGhkY2RfbWdyICVwLCB1dWlkX29iaiAlcCwgc3RyX2xpYl9uYW1lICVw LCIKLQkJIiBidWZmX3NpemUgJXBcbiIsIF9fZnVuY19fLCBoZGNkX21nciwgdXVpZF9vYmosIHN0 cl9saWJfbmFtZSwKLQkJYnVmZl9zaXplKTsKLQotCS8qCi0JICogIFByZS1kZXRlcm1pbmUgZmlu YWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCi0JICogICJfXDAiICsg bGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwuCi0JICovCi0J ZHdfa2V5X2xlbiA9IHN0cmxlbihEQ0RfUkVHS0VZKSArIDEgKyBzaXplb2Yoc3pfb2JqX3R5cGUp ICsgMTsKLQotCS8qIENyZWF0ZSBwcm9wZXIgUkVHIGtleTsgY29uY2F0ZW5hdGUgRENEX1JFR0tF WSB3aXRoIG9ial90eXBlLiAqLwotCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3Ry bGVuKERDRF9SRUdLRVkpICsgMSk7Ci0JaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4o Il9cMCIpKSA8IERDRF9NQVhQQVRITEVOR1RIKQotCQlzdHJuY2F0KHN6X3JlZ19rZXksICJfXDAi LCAyKTsKLQllbHNlCi0JCXN0YXR1cyA9IC1FUEVSTTsKLQotCXN3aXRjaCAocGhhc2UpIHsKLQlj YXNlIE5MRFJfQ1JFQVRFOgotCQkvKiBjcmVhdGUgcGhhc2UgdHlwZSAqLwotCQlzcHJpbnRmKHN6 X29ial90eXBlLCAiJWQiLCBEU1BfRENEQ1JFQVRFTElCVFlQRSk7Ci0JCWJyZWFrOwotCWNhc2Ug TkxEUl9FWEVDVVRFOgotCQkvKiBleGVjdXRlIHBoYXNlIHR5cGUgKi8KLQkJc3ByaW50Zihzel9v YmpfdHlwZSwgIiVkIiwgRFNQX0RDREVYRUNVVEVMSUJUWVBFKTsKLQkJYnJlYWs7Ci0JY2FzZSBO TERSX0RFTEVURToKLQkJLyogZGVsZXRlIHBoYXNlIHR5cGUgKi8KLQkJc3ByaW50Zihzel9vYmpf dHlwZSwgIiVkIiwgRFNQX0RDRERFTEVURUxJQlRZUEUpOwotCQlicmVhazsKLQljYXNlIE5MRFJf Tk9QSEFTRToKLQkJLyoga25vd24gdG8gYmUgYSBkZXBlbmRlbnQgbGlicmFyeSAqLwotCQlzcHJp bnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENETElCUkFSWVRZUEUpOwotCQlicmVhazsKLQlk ZWZhdWx0OgotCQlzdGF0dXMgPSAtRUlOVkFMOwotCX0KLQlpZiAoIXN0YXR1cykgewotCQlpZiAo KHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbihzel9vYmpfdHlwZSkpIDwKLQkJICAgIERDRF9N QVhQQVRITEVOR1RIKSB7Ci0JCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAotCQkJ CXN0cmxlbihzel9vYmpfdHlwZSkgKyAxKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FUEVS TTsKLQkJfQotCQkvKiBDcmVhdGUgVVVJRCB2YWx1ZSB0byBmaW5kIG1hdGNoIGluIHJlZ2lzdHJ5 LiAqLwotCQlzbnByaW50Zihzel91dWlkLCBNQVhVVUlETEVOLCAiJXBVTCIsIHV1aWRfb2JqKTsK LQkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBNQVhVVUlETEVOKSA8IERDRF9NQVhQQVRITEVO R1RIKQotCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel91dWlkLCBNQVhVVUlETEVOKTsKLQkJZWxz ZQotCQkJc3RhdHVzID0gLUVQRVJNOwotCX0KLQlpZiAoIXN0YXR1cykgewotCQlzcGluX2xvY2so JmRiZGNkX2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRjZF9rZXksICZyZWdfa2V5X2xp c3QsIGxpbmspIHsKLQkJCS8qICBTZWUgaWYgdGhlIG5hbWUgbWF0Y2hlcy4gKi8KLQkJCWlmICgh c3RybmNtcChkY2Rfa2V5LT5uYW1lLCBzel9yZWdfa2V5LAotCQkJCQkJc3RybGVuKHN6X3JlZ19r ZXkpICsgMSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmRiZGNkX2xvY2spOwot CX0KLQotCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KQotCQlzdGF0dXMgPSAt RU5PS0VZOwotCi0JLyogSWYgY2FuJ3QgZmluZCwgcGhhc2VzIG1pZ2h0IGJlIHJlZ2lzdGVyZWQg YXMgZ2VuZXJpYyBMSUJSQVJZVFlQRSAqLwotCWlmIChzdGF0dXMgJiYgcGhhc2UgIT0gTkxEUl9O T1BIQVNFKSB7Ci0JCWlmIChwaGFzZV9zcGxpdCkKLQkJCSpwaGFzZV9zcGxpdCA9IGZhbHNlOwot Ci0JCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsg MSk7Ci0JCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKCJfXDAiKSkgPAotCQkgICAg RENEX01BWFBBVEhMRU5HVEgpIHsKLQkJCXN0cm5jYXQoc3pfcmVnX2tleSwgIl9cMCIsIDIpOwot CQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVQRVJNOwotCQl9Ci0JCXNwcmludGYoc3pfb2JqX3R5 cGUsICIlZCIsIERTUF9EQ0RMSUJSQVJZVFlQRSk7Ci0JCWlmICgoc3RybGVuKHN6X3JlZ19rZXkp ICsgc3RybGVuKHN6X29ial90eXBlKSkKLQkJICAgIDwgRENEX01BWFBBVEhMRU5HVEgpIHsKLQkJ CXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfb2JqX3R5cGUsCi0JCQkJc3RybGVuKHN6X29ial90eXBl KSArIDEpOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVQRVJNOwotCQl9Ci0JCXNucHJpbnRm KHN6X3V1aWQsIE1BWFVVSURMRU4sICIlcFVMIiwgdXVpZF9vYmopOwotCQlpZiAoKHN0cmxlbihz el9yZWdfa2V5KSArIE1BWFVVSURMRU4pIDwgRENEX01BWFBBVEhMRU5HVEgpCi0JCQlzdHJuY2F0 KHN6X3JlZ19rZXksIHN6X3V1aWQsIE1BWFVVSURMRU4pOwotCQllbHNlCi0JCQlzdGF0dXMgPSAt RVBFUk07Ci0KLQkJc3Bpbl9sb2NrKCZkYmRjZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRy eShkY2Rfa2V5LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7Ci0JCQkvKiAgU2VlIGlmIHRoZSBuYW1l IG1hdGNoZXMuICovCi0JCQlpZiAoIXN0cm5jbXAoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwK LQkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpKQotCQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5f dW5sb2NrKCZkYmRjZF9sb2NrKTsKLQotCQlzdGF0dXMgPSAoJmRjZF9rZXktPmxpbmsgIT0gJnJl Z19rZXlfbGlzdCkgPwotCQkJCQkJMCA6IC1FTk9LRVk7Ci0JfQotCi0JaWYgKCFzdGF0dXMpCi0J CW1lbWNweShzdHJfbGliX25hbWUsIGRjZF9rZXktPnBhdGgsIHN0cmxlbihkY2Rfa2V5LT5wYXRo KSArIDEpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGNkX2luaXQg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBJbml0aWFsaXplIHRoZSBEQ0QgbW9kdWxl LgotICovCi1ib29sIGRjZF9pbml0KHZvaWQpCi17Ci0JYm9vbCByZXQgPSB0cnVlOwotCi0JaWYg KHJlZnMgPT0gMCkKLQkJSU5JVF9MSVNUX0hFQUQoJnJlZ19rZXlfbGlzdCk7Ci0KLQlpZiAocmV0 KQotCQlyZWZzKys7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogID09PT09PT09IGRjZF9y ZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZWdpc3RlcnMg YSBub2RlIG9yIGEgcHJvY2Vzc29yIHdpdGggdGhlIERDRC4KLSAqICAgICAgSWYgcHN6X3BhdGhf bmFtZSA9PSBOVUxMLCB1bnJlZ2lzdGVyIHRoZSBzcGVjaWZpZWQgRENEIG9iamVjdC4KLSAqLwot aW50IGRjZF9yZWdpc3Rlcl9vYmplY3Qoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKLQkJCSAg ICAgICBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLAotCQkJICAgICAgIGNoYXIgKnBzel9w YXRoX25hbWUpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JY2hhciBzel9yZWdfa2V5W0RDRF9NQVhQ QVRITEVOR1RIXTsKLQljaGFyIHN6X3V1aWRbTUFYVVVJRExFTiArIDFdOwotCXUzMiBkd19wYXRo X3NpemUgPSAwOwotCXUzMiBkd19rZXlfbGVuOwkJLyogTGVuIG9mIFJFRyBrZXkuICovCi0JY2hh ciBzel9vYmpfdHlwZVtNQVhfSU5UMkNIQVJfTEVOR1RIXTsJLyogc3RyLiByZXAuIG9mIG9ial90 eXBlLiAqLwotCXN0cnVjdCBkY2Rfa2V5X2VsZW0gKmRjZF9rZXkgPSBOVUxMOwotCi0JZGV2X2Ri ZyhicmlkZ2UsICIlczogb2JqZWN0IFVVSUQgJXAsIG9ial90eXBlICVkLCBzelBhdGhOYW1lICVz XG4iLAotCQlfX2Z1bmNfXywgdXVpZF9vYmosIG9ial90eXBlLCBwc3pfcGF0aF9uYW1lKTsKLQot CS8qCi0JICogUHJlLWRldGVybWluZSBmaW5hbCBrZXkgbGVuZ3RoLiBJdCdzIGxlbmd0aCBvZiBE Q0RfUkVHS0VZICsKLQkgKiAgIl9cMCIgKyBsZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsg dGVybWluYXRpbmcgTlVMTC4KLQkgKi8KLQlkd19rZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkp ICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAxOwotCi0JLyogQ3JlYXRlIHByb3BlciBSRUcg a2V5OyBjb25jYXRlbmF0ZSBEQ0RfUkVHS0VZIHdpdGggb2JqX3R5cGUuICovCi0Jc3RybmNweShz el9yZWdfa2V5LCBEQ0RfUkVHS0VZLCBzdHJsZW4oRENEX1JFR0tFWSkgKyAxKTsKLQlpZiAoKHN0 cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbigiX1wwIikpIDwgRENEX01BWFBBVEhMRU5HVEgpCi0J CXN0cm5jYXQoc3pfcmVnX2tleSwgIl9cMCIsIDIpOwotCWVsc2UgewotCQlzdGF0dXMgPSAtRVBF Uk07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0Jc3RhdHVzID0gc25wcmludGYoc3pfb2JqX3R5 cGUsIE1BWF9JTlQyQ0hBUl9MRU5HVEgsICIlZCIsIG9ial90eXBlKTsKLQlpZiAoc3RhdHVzID09 IC0xKSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQl9IGVsc2UgewotCQlzdGF0dXMgPSAwOwotCQlp ZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbihzel9vYmpfdHlwZSkpIDwKLQkJICAgIERD RF9NQVhQQVRITEVOR1RIKSB7Ci0JCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAot CQkJCXN0cmxlbihzel9vYmpfdHlwZSkgKyAxKTsKLQkJfSBlbHNlCi0JCQlzdGF0dXMgPSAtRVBF Uk07Ci0KLQkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gc2V0IGluIHJlZ2lzdHJ5LiAqLwotCQlz bnByaW50Zihzel91dWlkLCBNQVhVVUlETEVOLCAiJXBVTCIsIHV1aWRfb2JqKTsKLQkJaWYgKChz dHJsZW4oc3pfcmVnX2tleSkgKyBNQVhVVUlETEVOKSA8IERDRF9NQVhQQVRITEVOR1RIKQotCQkJ c3RybmNhdChzel9yZWdfa2V5LCBzel91dWlkLCBNQVhVVUlETEVOKTsKLQkJZWxzZQotCQkJc3Rh dHVzID0gLUVQRVJNOwotCX0KLQotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQkv KgotCSAqIElmIHBzel9wYXRoX25hbWUgIT0gTlVMTCwgcGVyZm9ybSByZWdpc3RyYXRpb24sIG90 aGVyd2lzZSwKLQkgKiBwZXJmb3JtIHVucmVnaXN0cmF0aW9uLgotCSAqLwotCi0JaWYgKHBzel9w YXRoX25hbWUpIHsKLQkJZHdfcGF0aF9zaXplID0gc3RybGVuKHBzel9wYXRoX25hbWUpICsgMTsK LQkJc3Bpbl9sb2NrKCZkYmRjZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5 LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7Ci0JCQkvKiAgU2VlIGlmIHRoZSBuYW1lIG1hdGNoZXMu ICovCi0JCQlpZiAoIXN0cm5jbXAoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKLQkJCQkJCXN0 cmxlbihzel9yZWdfa2V5KSArIDEpKQotCQkJCWJyZWFrOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZk YmRjZF9sb2NrKTsKLQkJaWYgKCZkY2Rfa2V5LT5saW5rID09ICZyZWdfa2V5X2xpc3QpIHsKLQkJ CS8qCi0JCQkgKiBBZGQgbmV3IHJlZyB2YWx1ZSAoVVVJRCtvYmpfdHlwZSkKLQkJCSAqIHdpdGgg Q09GRiBwYXRoIGluZm8KLQkJCSAqLwotCi0JCQlkY2Rfa2V5ID0ga21hbGxvYyhzaXplb2Yoc3Ry dWN0IGRjZF9rZXlfZWxlbSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFkY2Rfa2V5 KSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQlnb3RvIGZ1bmNfZW5kOwotCQkJfQotCi0J CQlkY2Rfa2V5LT5wYXRoID0ga21hbGxvYyhkd19wYXRoX3NpemUsIEdGUF9LRVJORUwpOwotCi0J CQlpZiAoIWRjZF9rZXktPnBhdGgpIHsKLQkJCQlrZnJlZShkY2Rfa2V5KTsKLQkJCQlzdGF0dXMg PSAtRU5PTUVNOwotCQkJCWdvdG8gZnVuY19lbmQ7Ci0JCQl9Ci0KLQkJCXN0cm5jcHkoZGNkX2tl eS0+bmFtZSwgc3pfcmVnX2tleSwKLQkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpOwotCQkJ c3RybmNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lICwKLQkJCQkJCWR3X3BhdGhfc2l6 ZSk7Ci0JCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmZGNkX2tl eS0+bGluaywgJnJlZ19rZXlfbGlzdCk7Ci0JCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7Ci0J CX0gZWxzZSB7Ci0JCQkvKiAgTWFrZSBzdXJlIHRoZSBuZXcgZGF0YSBpcyB0aGUgc2FtZS4gKi8K LQkJCWlmIChzdHJuY21wKGRjZF9rZXktPnBhdGgsIHBzel9wYXRoX25hbWUsCi0JCQkJCQkJZHdf cGF0aF9zaXplKSkgewotCQkJCS8qICBUaGUgY2FsbGVyIG5lZWRzIGEgZGlmZmVyZW50IGRhdGEg c2l6ZSEgKi8KLQkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKLQkJCQlkY2Rfa2V5LT5wYXRoID0g a21hbGxvYyhkd19wYXRoX3NpemUsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmIChkY2Rf a2V5LT5wYXRoID09IE5VTEwpIHsKLQkJCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQkJZ290byBm dW5jX2VuZDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qICBXZSBoYXZlIGEgbWF0Y2ghICBDb3B5IG91 dCB0aGUgZGF0YS4gKi8KLQkJCW1lbWNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lLCBk d19wYXRoX3NpemUpOwotCQl9Ci0JCWRldl9kYmcoYnJpZGdlLCAiJXM6IHBzel9wYXRoX25hbWU9 JXMsIGR3X3BhdGhfc2l6ZT0lZFxuIiwKLQkJCV9fZnVuY19fLCBwc3pfcGF0aF9uYW1lLCBkd19w YXRoX3NpemUpOwotCX0gZWxzZSB7Ci0JCS8qIERlcmVnaXN0ZXIgYW4gZXhpc3Rpbmcgb2JqZWN0 ICovCi0JCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNk X2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgewotCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5h bWUsIHN6X3JlZ19rZXksCi0JCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkgewotCQkJCWxp c3RfZGVsKCZkY2Rfa2V5LT5saW5rKTsKLQkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKLQkJCQlr ZnJlZShkY2Rfa2V5KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9jaygmZGJk Y2RfbG9jayk7Ci0JCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KQotCQkJc3Rh dHVzID0gLUVQRVJNOwotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCS8qCi0JCSAqICBCZWNhdXNl IHRoZSBub2RlIGRhdGFiYXNlIGhhcyBiZWVuIHVwZGF0ZWQgdGhyb3VnaCBhCi0JCSAqICBzdWNj ZXNzZnVsIG9iamVjdCByZWdpc3RyYXRpb24vZGUtcmVnaXN0cmF0aW9uIG9wZXJhdGlvbiwKLQkJ ICogIHdlIG5lZWQgdG8gcmVzZXQgdGhlIG9iamVjdCBlbnVtZXJhdGlvbiBjb3VudGVyIHRvIGFs bG93Ci0JCSAqICBjdXJyZW50IGVudW1lcmF0aW9ucyB0byByZWZsZWN0IHRoaXMgdXBkYXRlIGlu IHRoZSBub2RlCi0JCSAqICBkYXRhYmFzZS4KLQkJICovCi0JCWVudW1fcmVmcyA9IDA7Ci0JfQot ZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkY2RfdW5y ZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KLSAqICBDYWxsIERDRF9SZWdpc3RlciBvYmplY3Qgd2l0 aCBwc3pfcGF0aF9uYW1lIHNldCB0byBOVUxMIHRvCi0gKiAgcGVyZm9ybSBhY3R1YWwgb2JqZWN0 IGRlLXJlZ2lzdHJhdGlvbi4KLSAqLwotaW50IGRjZF91bnJlZ2lzdGVyX29iamVjdChzdHJ1Y3Qg ZHNwX3V1aWQgKnV1aWRfb2JqLAotCQkJCSBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlKQot ewotCWludCBzdGF0dXMgPSAwOwotCi0JLyoKLQkgKiAgV2hlbiBkY2RfcmVnaXN0ZXJfb2JqZWN0 IGlzIGNhbGxlZCB3aXRoIE5VTEwgYXMgcGF0aG5hbWUsCi0JICogIGl0IGluZGljYXRlcyBhbiB1 bnJlZ2lzdGVyIG9iamVjdCBvcGVyYXRpb24uCi0JICovCi0Jc3RhdHVzID0gZGNkX3JlZ2lzdGVy X29iamVjdCh1dWlkX29iaiwgb2JqX3R5cGUsIE5VTEwpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0K LQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCi0gKiBEQ0QgSGVscGVyIEZ1bmN0aW9ucwotICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLSAqLwotCi0vKgotICogID09PT09PT09IGF0b2kgPT09PT09PT0KLSAqICBQdXJwb3Nl OgotICogICAgICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHN0cmluZ3MgaW4gZGVjaW1hbCBvciBo ZXggZm9ybWF0IHRvIGludGVnZXJzLgotICovCi1zdGF0aWMgczMyIGF0b2koY2hhciAqcHN6X2J1 ZikKLXsKLQljaGFyICpwY2ggPSBwc3pfYnVmOwotCXMzMiBiYXNlID0gMDsKLQotCXdoaWxlIChp c3NwYWNlKCpwY2gpKQotCQlwY2grKzsKLQotCWlmICgqcGNoID09ICctJyB8fCAqcGNoID09ICcr JykgewotCQliYXNlID0gMTA7Ci0JCXBjaCsrOwotCX0gZWxzZSBpZiAoKnBjaCAmJiB0b2xvd2Vy KHBjaFtzdHJsZW4ocGNoKSAtIDFdKSA9PSAnaCcpIHsKLQkJYmFzZSA9IDE2OwotCX0KLQotCXJl dHVybiBzaW1wbGVfc3RydG91bChwY2gsIE5VTEwsIGJhc2UpOwotfQotCi0vKgotICogID09PT09 PT09IGdldF9hdHRyc19mcm9tX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFBh cnNlIHRoZSBjb250ZW50IG9mIGEgYnVmZmVyIGZpbGxlZCB3aXRoIERTUC1zaWRlIGRhdGEgYW5k Ci0gKiAgICAgIHJldHJpZXZlIGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMgZnJvbSBpdC4gSU1QT1JU QU5UOiBBc3N1bWUgdGhlCi0gKiAgICAgIGJ1ZmZlciBoYXMgYmVlbiBjb252ZXJ0ZWQgZnJvbSBE U1AgZm9ybWF0IHRvIEdQUCBmb3JtYXQuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X2F0dHJzX2Zyb21f YnVmKGNoYXIgKnBzel9idWYsIHUzMiB1bF9idWZfc2l6ZSwKLQkJCQkgICAgIGVudW0gZHNwX2Rj ZG9ianR5cGUgb2JqX3R5cGUsCi0JCQkJICAgICBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKmdlbl9v YmopCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JY2hhciBzZXBzW10gPSAiLCAiOwotCWNoYXIgKnBz el9jdXI7Ci0JY2hhciAqdG9rZW47Ci0JczMyIHRva2VuX2xlbiA9IDA7Ci0JdTMyIGkgPSAwOwot I2lmZGVmIF9EQl9USU9NQVAKLQlzMzIgZW50cnlfaWQ7Ci0jZW5kaWYKLQotCXN3aXRjaCAob2Jq X3R5cGUpIHsKLQljYXNlIERTUF9EQ0ROT0RFVFlQRToKLQkJLyoKLQkJICogUGFyc2UgQ09GRiBz ZWN0IGJ1ZmZlciB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIHRva2VucyB1c2VkCi0JCSAqIHRvIGZp bGwgaW4gb2JqZWN0IGF0dHJzLgotCQkgKi8KLQkJcHN6X2N1ciA9IHBzel9idWY7Ci0JCXRva2Vu ID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQkvKiB1MzIgY2Jfc3RydWN0ICovCi0JCWdl bl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5jYl9zdHJ1Y3QgPQotCQkgICAgKHUz MikgYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQkv KiBkc3BfdXVpZCB1aV9ub2RlX2lkICovCi0JCXN0YXR1cyA9IGRjZF91dWlkX2Zyb21fc3RyaW5n KHRva2VuLAotCQkJCQkgICAgICAmZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmouCi0JCQkJCSAg ICAgIG5kYl9wcm9wcy51aV9ub2RlX2lkKTsKLQkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwotCi0J CXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQkvKiBhY19uYW1lICovCi0JCXRv a2VuX2xlbiA9IHN0cmxlbih0b2tlbik7Ci0JCWlmICh0b2tlbl9sZW4gPiBEU1BfTUFYTkFNRUxF TiAtIDEpCi0JCQl0b2tlbl9sZW4gPSBEU1BfTUFYTkFNRUxFTiAtIDE7Ci0KLQkJc3RybmNweShn ZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuYWNfbmFtZSwKLQkJCXRva2VuLCB0 b2tlbl9sZW4pOwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuYWNfbmFt ZVt0b2tlbl9sZW5dID0gJ1wwJzsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwot CQkvKiB1MzIgbnR5cGUgKi8KLQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3Bz Lm50eXBlID0gYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsK LQkJLyogdTMyIGNhY2hlX29uX2dwcCAqLwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5u ZGJfcHJvcHMuY2FjaGVfb25fZ3BwID0gYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZw c3pfY3VyLCBzZXBzKTsKLQkJLyogZHNwX3Jlc291cmNlcmVxbXRzIGRzcF9yZXNvdXJjZV9yZXFt dHMgKi8KLQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLmRzcF9yZXNvdXJj ZV9yZXFtdHMuCi0JCSAgICBjYl9zdHJ1Y3QgPSAodTMyKSBhdG9pKHRva2VuKTsKLQkJdG9rZW4g PSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2Jq Lm5kYl9wcm9wcy4KLQkJICAgIGRzcF9yZXNvdXJjZV9yZXFtdHMuc3RhdGljX2RhdGFfc2l6ZSA9 IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0JCWdlbl9v YmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KLQkJICAgIGRzcF9yZXNvdXJjZV9yZXFt dHMuZ2xvYmFsX2RhdGFfc2l6ZSA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6 X2N1ciwgc2Vwcyk7Ci0JCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KLQkJ ICAgIGRzcF9yZXNvdXJjZV9yZXFtdHMucHJvZ3JhbV9tZW1fc2l6ZSA9IGF0b2kodG9rZW4pOwot CQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0JCWdlbl9vYmotPm9ial9kYXRhLm5v ZGVfb2JqLm5kYl9wcm9wcy4KLQkJICAgIGRzcF9yZXNvdXJjZV9yZXFtdHMud2NfZXhlY3V0aW9u X3RpbWUgPSBhdG9pKHRva2VuKTsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwot CQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCi0JCSAgICBkc3BfcmVzb3Vy Y2VfcmVxbXRzLndjX3BlcmlvZCA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6 X2N1ciwgc2Vwcyk7Ci0KLQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgot CQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy53Y19kZWFkbGluZSA9IGF0b2kodG9rZW4pOwotCQl0 b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJZ2VuX29iai0+b2JqX2RhdGEubm9k ZV9vYmoubmRiX3Byb3BzLgotCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5hdmdfZXhlY3Rpb25f dGltZSA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0K LQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgotCQkgICAgZHNwX3Jlc291 cmNlX3JlcW10cy5taW5pbXVtX3BlcmlvZCA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNl cCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJLyogczMyIHByaW8gKi8KLQkJZ2VuX29iai0+b2JqX2Rh dGEubm9kZV9vYmoubmRiX3Byb3BzLnByaW8gPSBhdG9pKHRva2VuKTsKLQkJdG9rZW4gPSBzdHJz ZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCS8qIHUzMiBzdGFja19zaXplICovCi0JCWdlbl9vYmot Pm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5zdGFja19zaXplID0gYXRvaSh0b2tlbik7Ci0J CXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQkvKiB1MzIgc3lzX3N0YWNrX3Np emUgKi8KLQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLnN5c19zdGFja19z aXplID0KLQkJICAgIGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vw cyk7Ci0KLQkJLyogdTMyIHN0YWNrX3NlZyAqLwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29i ai5uZGJfcHJvcHMuc3RhY2tfc2VnID0gYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZw c3pfY3VyLCBzZXBzKTsKLQotCQkvKiB1MzIgbWVzc2FnZV9kZXB0aCAqLwotCQlnZW5fb2JqLT5v YmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubWVzc2FnZV9kZXB0aCA9Ci0JCSAgICBhdG9pKHRv a2VuKTsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCS8qIHUzMiBudW1f aW5wdXRfc3RyZWFtcyAqLwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMu bnVtX2lucHV0X3N0cmVhbXMgPQotCQkgICAgYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2Vw KCZwc3pfY3VyLCBzZXBzKTsKLQotCQkvKiB1MzIgbnVtX291dHB1dF9zdHJlYW1zICovCi0JCWdl bl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5udW1fb3V0cHV0X3N0cmVhbXMgPQot CQkgICAgYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQot CQkvKiB1MzIgdGltZW91dCAqLwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJv cHMudGltZW91dCA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vw cyk7Ci0KLQkJLyogY2hhciAqc3RyX2NyZWF0ZV9waGFzZV9meG4gKi8KLQkJdG9rZW5fbGVuID0g c3RybGVuKHRva2VuKTsKLQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmouc3RyX2NyZWF0ZV9w aGFzZV9meG4gPQotCQkJCQlremFsbG9jKHRva2VuX2xlbiArIDEsIEdGUF9LRVJORUwpOwotCQlz dHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnN0cl9jcmVhdGVfcGhhc2VfZnhuLAot CQkJdG9rZW4sIHRva2VuX2xlbik7Ci0JCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnN0cl9j cmVhdGVfcGhhc2VfZnhuW3Rva2VuX2xlbl0gPQotCQkgICAgJ1wwJzsKLQkJdG9rZW4gPSBzdHJz ZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCS8qIGNoYXIgKnN0cl9leGVjdXRlX3BoYXNlX2Z4biAq LwotCQl0b2tlbl9sZW4gPSBzdHJsZW4odG9rZW4pOwotCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2Rl X29iai5zdHJfZXhlY3V0ZV9waGFzZV9meG4gPQotCQkJCQlremFsbG9jKHRva2VuX2xlbiArIDEs IEdGUF9LRVJORUwpOwotCQlzdHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnN0cl9l eGVjdXRlX3BoYXNlX2Z4biwKLQkJCXRva2VuLCB0b2tlbl9sZW4pOwotCQlnZW5fb2JqLT5vYmpf ZGF0YS5ub2RlX29iai5zdHJfZXhlY3V0ZV9waGFzZV9meG5bdG9rZW5fbGVuXSA9Ci0JCSAgICAn XDAnOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJLyogY2hhciAqc3Ry X2RlbGV0ZV9waGFzZV9meG4gKi8KLQkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKLQkJZ2Vu X29iai0+b2JqX2RhdGEubm9kZV9vYmouc3RyX2RlbGV0ZV9waGFzZV9meG4gPQotCQkJCQlremFs bG9jKHRva2VuX2xlbiArIDEsIEdGUF9LRVJORUwpOwotCQlzdHJuY3B5KGdlbl9vYmotPm9ial9k YXRhLm5vZGVfb2JqLnN0cl9kZWxldGVfcGhhc2VfZnhuLAotCQkJdG9rZW4sIHRva2VuX2xlbik7 Ci0JCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnN0cl9kZWxldGVfcGhhc2VfZnhuW3Rva2Vu X2xlbl0gPQotCQkgICAgJ1wwJzsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwot Ci0JCS8qIFNlZ21lbnQgaWQgZm9yIG1lc3NhZ2UgYnVmZmVycyAqLwotCQlnZW5fb2JqLT5vYmpf ZGF0YS5ub2RlX29iai5tc2dfc2VnaWQgPSBhdG9pKHRva2VuKTsKLQkJdG9rZW4gPSBzdHJzZXAo JnBzel9jdXIsIHNlcHMpOwotCi0JCS8qIE1lc3NhZ2Ugbm90aWZpY2F0aW9uIHR5cGUgKi8KLQkJ Z2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubXNnX25vdGlmeV90eXBlID0gYXRvaSh0b2tlbik7 Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQkvKiBjaGFyICpzdHJfaV9h bGdfbmFtZSAqLwotCQlpZiAodG9rZW4pIHsKLQkJCXRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7 Ci0JCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5zdHJfaV9hbGdfbmFtZSA9Ci0JCQkJCWt6 YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCQlzdHJuY3B5KGdlbl9vYmotPm9i al9kYXRhLm5vZGVfb2JqLnN0cl9pX2FsZ19uYW1lLAotCQkJCXRva2VuLCB0b2tlbl9sZW4pOwot CQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmouc3RyX2lfYWxnX25hbWVbdG9rZW5fbGVuXSA9 Ci0JCQkgICAgJ1wwJzsKLQkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQkJfQot Ci0JCS8qIExvYWQgdHlwZSAoc3RhdGljLCBkeW5hbWljLCBvciBvdmVybGF5KSAqLwotCQlpZiAo dG9rZW4pIHsKLQkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLmxvYWRfdHlwZSA9IGF0b2ko dG9rZW4pOwotCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCQl9Ci0KLQkJLyog RHluYW1pYyBsb2FkIGRhdGEgcmVxdWlyZW1lbnRzICovCi0JCWlmICh0b2tlbikgewotCQkJZ2Vu X29iai0+b2JqX2RhdGEubm9kZV9vYmouZGF0YV9tZW1fc2VnX21hc2sgPQotCQkJICAgIGF0b2ko dG9rZW4pOwotCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCQl9Ci0KLQkJLyog RHluYW1pYyBsb2FkIGNvZGUgcmVxdWlyZW1lbnRzICovCi0JCWlmICh0b2tlbikgewotCQkJZ2Vu X29iai0+b2JqX2RhdGEubm9kZV9vYmouY29kZV9tZW1fc2VnX21hc2sgPQotCQkJICAgIGF0b2ko dG9rZW4pOwotCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCQl9Ci0KLQkJLyog RXh0cmFjdCBub2RlIHByb2ZpbGVzIGludG8gbm9kZSBwcm9wZXJ0aWVzICovCi0JCWlmICh0b2tl bikgewotCi0JCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuY291bnRfcHJv ZmlsZXMgPQotCQkJICAgIGF0b2kodG9rZW4pOwotCQkJZm9yIChpID0gMDsKLQkJCSAgICAgaSA8 Ci0JCQkgICAgIGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLgotCQkJICAgICBuZGJfcHJvcHMu Y291bnRfcHJvZmlsZXM7IGkrKykgewotCQkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBz KTsKLQkJCQlpZiAodG9rZW4pIHsKLQkJCQkJLyogSGVhcCBTaXplIGZvciB0aGUgbm9kZSAqLwot CQkJCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai4KLQkJCQkJICAgIG5kYl9wcm9wcy5ub2Rl X3Byb2ZpbGVzW2ldLgotCQkJCQkgICAgaGVhcF9zaXplID0gYXRvaSh0b2tlbik7Ci0JCQkJfQot CQkJfQotCQl9Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQkJaWYgKHRva2Vu KSB7Ci0JCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuc3RhY2tfc2VnX25h bWUgPQotCQkJICAgICh1MzIpICh0b2tlbik7Ci0JCX0KLQotCQlicmVhazsKLQotCWNhc2UgRFNQ X0RDRFBST0NFU1NPUlRZUEU6Ci0JCS8qCi0JCSAqIFBhcnNlIENPRkYgc2VjdCBidWZmZXIgdG8g cmV0cmlldmUgaW5kaXZpZHVhbCB0b2tlbnMgdXNlZAotCQkgKiB0byBmaWxsIGluIG9iamVjdCBh dHRycy4KLQkJICovCi0JCXBzel9jdXIgPSBwc3pfYnVmOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6 X2N1ciwgc2Vwcyk7Ci0KLQkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLmNiX3N0cnVjdCA9 IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJZ2Vu X29iai0+b2JqX2RhdGEucHJvY19pbmZvLnByb2Nlc3Nvcl9mYW1pbHkgPSBhdG9pKHRva2VuKTsK LQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCWdlbl9vYmotPm9ial9kYXRh LnByb2NfaW5mby5wcm9jZXNzb3JfdHlwZSA9IGF0b2kodG9rZW4pOwotCQl0b2tlbiA9IHN0cnNl cCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLmNsb2Nr X3JhdGUgPSBhdG9pKHRva2VuKTsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwot Ci0JCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby5pbnRlcm5hbF9tZW1fc2l6ZSA9IGF0b2ko dG9rZW4pOwotCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7Ci0KLQkJZ2VuX29iai0+ b2JqX2RhdGEucHJvY19pbmZvLmV4dGVybmFsX21lbV9zaXplID0gYXRvaSh0b2tlbik7Ci0JCXRv a2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQotCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9j X2luZm8ucHJvY2Vzc29yX2lkID0gYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pf Y3VyLCBzZXBzKTsKLQotCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8udHlfcnVubmluZ19y dG9zID0gYXRvaSh0b2tlbik7Ci0JCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQot CQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8ubm9kZV9taW5fcHJpb3JpdHkgPSBhdG9pKHRv a2VuKTsKLQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCi0JCWdlbl9vYmotPm9i al9kYXRhLnByb2NfaW5mby5ub2RlX21heF9wcmlvcml0eSA9IGF0b2kodG9rZW4pOwotCi0jaWZk ZWYgX0RCX1RJT01BUAotCQkvKiBQcm9jIG9iamVjdCBtYXkgY29udGFpbiBhZGRpdGlvbmFsKGV4 dGVuZGVkKSBhdHRyaWJ1dGVzLiAqLwotCQkvKiBhdHRyIG11c3QgbWF0Y2ggcHJvYy5oeHggKi8K LQkJZm9yIChlbnRyeV9pZCA9IDA7IGVudHJ5X2lkIDwgNzsgZW50cnlfaWQrKykgewotCQkJdG9r ZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCQkJZ2VuX29iai0+b2JqX2RhdGEuZXh0X3By b2Nfb2JqLnR5X3RsYltlbnRyeV9pZF0uCi0JCQkgICAgZ3BwX3BoeXMgPSBhdG9pKHRva2VuKTsK LQotCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOwotCQkJZ2VuX29iai0+b2JqX2Rh dGEuZXh0X3Byb2Nfb2JqLnR5X3RsYltlbnRyeV9pZF0uCi0JCQkgICAgZHNwX3ZpcnQgPSBhdG9p KHRva2VuKTsKLQkJfQotI2VuZGlmCi0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlzdGF0dXMg PSAtRVBFUk07Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gQ29tcHJlc3NCdWZmZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBD b21wcmVzcyB0aGUgRFNQIGJ1ZmZlciwgaWYgbmVjZXNzYXJ5LCB0byBjb25mb3JtIHRvIFBDIGZv cm1hdC4KLSAqLwotc3RhdGljIHZvaWQgY29tcHJlc3NfYnVmKGNoYXIgKnBzel9idWYsIHUzMiB1 bF9idWZfc2l6ZSwgczMyIGNoYXJfc2l6ZSkKLXsKLQljaGFyICpwOwotCWNoYXIgY2g7Ci0JY2hh ciAqcTsKLQotCXAgPSBwc3pfYnVmOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybjsKLQotCWZv ciAocSA9IHBzel9idWY7IHEgPCAocHN6X2J1ZiArIHVsX2J1Zl9zaXplKTspIHsKLQkJY2ggPSBk c3BfY2hhcjJfZ3BwX2NoYXIocSwgY2hhcl9zaXplKTsKLQkJaWYgKGNoID09ICdcXCcpIHsKLQkJ CXEgKz0gY2hhcl9zaXplOwotCQkJY2ggPSBkc3BfY2hhcjJfZ3BwX2NoYXIocSwgY2hhcl9zaXpl KTsKLQkJCXN3aXRjaCAoY2gpIHsKLQkJCWNhc2UgJ3QnOgotCQkJCSpwID0gJ1x0JzsKLQkJCQli cmVhazsKLQotCQkJY2FzZSAnbic6Ci0JCQkJKnAgPSAnXG4nOwotCQkJCWJyZWFrOwotCi0JCQlj YXNlICdyJzoKLQkJCQkqcCA9ICdccic7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgJzAnOgotCQkJ CSpwID0gJ1wwJzsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQkqcCA9IGNoOwotCQkJ CWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJKnAgPSBjaDsKLQkJfQotCQlwKys7Ci0JCXEg Kz0gY2hhcl9zaXplOwotCX0KLQotCS8qIE5VTEwgb3V0IHJlbWFpbmRlciBvZiBidWZmZXIuICov Ci0Jd2hpbGUgKHAgPCBxKQotCQkqcCsrID0gJ1wwJzsKLX0KLQotLyoKLSAqICA9PT09PT09PSBk c3BfY2hhcjJfZ3BwX2NoYXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDb252ZXJ0 IERTUCBjaGFyIHRvIGhvc3QgR1BQIGNoYXIgaW4gYSBwb3J0YWJsZSBtYW5uZXIKLSAqLwotc3Rh dGljIGNoYXIgZHNwX2NoYXIyX2dwcF9jaGFyKGNoYXIgKndvcmQsIHMzMiBkc3BfY2hhcl9zaXpl KQotewotCWNoYXIgY2ggPSAnXDAnOwotCWNoYXIgKmNoX3NyYzsKLQlzMzIgaTsKLQotCWZvciAo Y2hfc3JjID0gd29yZCwgaSA9IGRzcF9jaGFyX3NpemU7IGkgPiAwOyBpLS0pCi0JCWNoIHw9ICpj aF9zcmMrKzsKLQotCXJldHVybiBjaDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnZXRfZGVwX2xp Yl9pbmZvID09PT09PT09Ci0gKi8KLXN0YXRpYyBpbnQgZ2V0X2RlcF9saWJfaW5mbyhzdHJ1Y3Qg ZGNkX21hbmFnZXIgKmhkY2RfbWdyLAotCQkJCSAgIHN0cnVjdCBkc3BfdXVpZCAqdXVpZF9vYmos Ci0JCQkJICAgdTE2ICpudW1fbGlicywKLQkJCQkgICB1MTYgKm51bV9wZXJzX2xpYnMsCi0JCQkJ ICAgc3RydWN0IGRzcF91dWlkICpkZXBfbGliX3V1aWRzLAotCQkJCSAgIGJvb2wgKnByc3RudF9k ZXBfbGlicywKLQkJCQkgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UpCi17Ci0Jc3RydWN0IGRjZF9t YW5hZ2VyICpkY2RfbWdyX29iaiA9IGhkY2RfbWdyOwotCWNoYXIgKnBzel9jb2ZmX2J1ZiA9IE5V TEw7Ci0JY2hhciAqcHN6X2N1cjsKLQljaGFyICpwc3pfZmlsZV9uYW1lID0gTlVMTDsKLQlzdHJ1 Y3QgY29kX2xpYnJhcnlvYmogKmxpYiA9IE5VTEw7Ci0JdTMyIHVsX2FkZHIgPSAwOwkvKiBVc2Vk IGJ5IGNvZF9nZXRfc2VjdGlvbiAqLwotCXUzMiB1bF9sZW4gPSAwOwkJLyogVXNlZCBieSBjb2Rf Z2V0X3NlY3Rpb24gKi8KLQl1MzIgZHdfZGF0YV9zaXplID0gQ09EX01BWFBBVEhMRU5HVEg7Ci0J Y2hhciBzZXBzW10gPSAiLCAiOwotCWNoYXIgKnRva2VuID0gTlVMTDsKLQlib29sIGdldF91dWlk cyA9IChkZXBfbGliX3V1aWRzICE9IE5VTEwpOwotCXUxNiBkZXBfbGlicyA9IDA7Ci0JaW50IHN0 YXR1cyA9IDA7Ci0KLQkvKiAgSW5pdGlhbGl6ZSB0byAwIGRlcGVuZGVudCBsaWJyYXJpZXMsIGlm IG9ubHkgY291bnRpbmcgbnVtYmVyIG9mCi0JICogIGRlcGVuZGVudCBsaWJyYXJpZXMgKi8KLQlp ZiAoIWdldF91dWlkcykgewotCQkqbnVtX2xpYnMgPSAwOwotCQkqbnVtX3BlcnNfbGlicyA9IDA7 Ci0JfQotCi0JLyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIGZpbGUgbmFtZSAqLwotCXBzel9maWxl X25hbWUgPSBremFsbG9jKGR3X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBzel9maWxl X25hbWUgPT0gTlVMTCkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCX0gZWxzZSB7Ci0JCS8qIEdl dCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSAqLwotCQlzdGF0dXMgPSBkY2RfZ2V0X2xpYnJhcnlf bmFtZShoZGNkX21nciwgdXVpZF9vYmosIHBzel9maWxlX25hbWUsCi0JCQkJCSAgICAgICZkd19k YXRhX3NpemUsIHBoYXNlLCBOVUxMKTsKLQl9Ci0KLQkvKiBPcGVuIHRoZSBsaWJyYXJ5ICovCi0J aWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gY29kX29wZW4oZGNkX21ncl9vYmotPmNvZF9tZ3Is IHBzel9maWxlX25hbWUsCi0JCQkJICBDT0RfTk9MT0FELCAmbGliKTsKLQl9Ci0JaWYgKCFzdGF0 dXMpIHsKLQkJLyogR2V0IGRlcGVuZGVudCBsaWJyYXJ5IHNlY3Rpb24gaW5mb3JtYXRpb24uICov Ci0JCXN0YXR1cyA9IGNvZF9nZXRfc2VjdGlvbihsaWIsIERFUExJQlNFQ1QsICZ1bF9hZGRyLCAm dWxfbGVuKTsKLQotCQlpZiAoc3RhdHVzKSB7Ci0JCQkvKiBPaywgbm8gZGVwZW5kZW50IGxpYnJh cmllcyAqLwotCQkJdWxfbGVuID0gMDsKLQkJCXN0YXR1cyA9IDA7Ci0JCX0KLQl9Ci0KLQlpZiAo c3RhdHVzIHx8ICEodWxfbGVuID4gMCkpCi0JCWdvdG8gZnVuY19jb250OwotCi0JLyogQWxsb2Nh dGUgemVyb2VkIGJ1ZmZlci4gKi8KLQlwc3pfY29mZl9idWYgPSBremFsbG9jKHVsX2xlbiArIDQs IEdGUF9LRVJORUwpOwotCWlmIChwc3pfY29mZl9idWYgPT0gTlVMTCkKLQkJc3RhdHVzID0gLUVO T01FTTsKLQotCS8qIFJlYWQgc2VjdGlvbiBjb250ZW50cy4gKi8KLQlzdGF0dXMgPSBjb2RfcmVh ZF9zZWN0aW9uKGxpYiwgREVQTElCU0VDVCwgcHN6X2NvZmZfYnVmLCB1bF9sZW4pOwotCWlmIChz dGF0dXMpCi0JCWdvdG8gZnVuY19jb250OwotCi0JLyogQ29tcHJlc3MgYW5kIGZvcm1hdCBEU1Ag YnVmZmVyIHRvIGNvbmZvcm0gdG8gUEMgZm9ybWF0LiAqLwotCWNvbXByZXNzX2J1Zihwc3pfY29m Zl9idWYsIHVsX2xlbiwgRFNQV09SRFNJWkUpOwotCi0JLyogUmVhZCBmcm9tIGJ1ZmZlciAqLwot CXBzel9jdXIgPSBwc3pfY29mZl9idWY7Ci0Jd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcHN6X2N1 ciwgc2VwcykpICYmICp0b2tlbiAhPSAnXDAnKSB7Ci0JCWlmIChnZXRfdXVpZHMpIHsKLQkJCWlm IChkZXBfbGlicyA+PSAqbnVtX2xpYnMpIHsKLQkJCQkvKiBHb25lIGJleW9uZCB0aGUgbGltaXQg Ki8KLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogUmV0cmlldmUgVVVJRCBzdHJpbmcu ICovCi0JCQkJc3RhdHVzID0gZGNkX3V1aWRfZnJvbV9zdHJpbmcodG9rZW4sCi0JCQkJCQkJICAg ICAgJihkZXBfbGliX3V1aWRzCi0JCQkJCQkJCVtkZXBfbGlic10pKTsKLQkJCQlpZiAoc3RhdHVz KQotCQkJCQlicmVhazsKLQotCQkJCS8qIElzIHRoaXMgbGlicmFyeSBwZXJzaXN0ZW50PyAqLwot CQkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKLQkJCQlwcnN0bnRfZGVwX2xpYnNb ZGVwX2xpYnNdID0gYXRvaSh0b2tlbik7Ci0JCQkJZGVwX2xpYnMrKzsKLQkJCX0KLQkJfSBlbHNl IHsKLQkJCS8qIEFkdmFuYyB0byBuZXh0IHRva2VuICovCi0JCQl0b2tlbiA9IHN0cnNlcCgmcHN6 X2N1ciwgc2Vwcyk7Ci0JCQlpZiAoYXRvaSh0b2tlbikpCi0JCQkJKCpudW1fcGVyc19saWJzKSsr OwotCi0JCQkvKiBKdXN0IGNvdW50aW5nIG51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFyaWVzICov Ci0JCQkoKm51bV9saWJzKSsrOwotCQl9Ci0JfQotZnVuY19jb250OgotCWlmIChsaWIpCi0JCWNv ZF9jbG9zZShsaWIpOwotCi0JLyogRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1 ZmZlcnMuICovCi0Ja2ZyZWUocHN6X2ZpbGVfbmFtZSk7Ci0KLQlrZnJlZShwc3pfY29mZl9idWYp OwotCi0JcmV0dXJuIHN0YXR1czsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRz cGJyaWRnZS9ybWdyL2Rpc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rp c3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFmNTFiNy4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kaXNwLmMKKysrIC9kZXYvbnVsbApA QCAtMSw2NTUgKzAsMCBAQAotLyoKLSAqIGRpc3AuYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBk cml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBO b2RlIERpc3BhdGNoZXIgaW50ZXJmYWNlLiBDb21tdW5pY2F0ZXMgd2l0aCBSZXNvdXJjZSBNYW5h Z2VyIFNlcnZlcgotICogKFJNUykgb24gRFNQLiBBY2Nlc3MgdG8gUk1TIGlzIHN5bmNocm9uaXpl ZCBpbiBOT0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1l bnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElT IFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQK LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5jbHVkZSA8ZHNw YnJpZGdlL2hvc3Rfb3MuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KLQot LyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5 ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gTGluayBEcml2ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv ZHNwZGVmcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxh dGZvcm0gTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KLSNpbmNsdWRlIDxk c3BicmlkZ2UvY2hubGRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZWRlZnMu aD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv cm1zX3NoLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlz ICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3AuaD4KLQotLyogU2l6ZSBvZiBhIHJlcGx5IGZy b20gUk1TICovCi0jZGVmaW5lIFJFUExZU0laRSAoMyAqIHNpemVvZihybXNfd29yZCkpCi0KLS8q IFJlc2VydmVkIGNoYW5uZWwgb2Zmc2V0cyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFJNUyAqLwot I2RlZmluZSBDSE5MVE9STVNPRkZTRVQgICAgICAgMAotI2RlZmluZSBDSE5MRlJPTVJNU09GRlNF VCAgICAgMQotCi0jZGVmaW5lIENITkxJT1JFUVMgICAgICAxCi0KLS8qCi0gKiAgPT09PT09PT0g ZGlzcF9vYmplY3QgPT09PT09PT0KLSAqLwotc3RydWN0IGRpc3Bfb2JqZWN0IHsKLQlzdHJ1Y3Qg ZGV2X29iamVjdCAqZGV2X29iajsJLyogRGV2aWNlIGZvciB0aGlzIHByb2Nlc3NvciAqLwotCS8q IEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCi0Jc3RydWN0IGJyaWRnZV9k cnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncjsJLyog Q2hhbm5lbCBtYW5hZ2VyICovCi0Jc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX3RvX2RzcDsJLyog Q2hubCBmb3IgY29tbWFuZHMgdG8gUk1TICovCi0Jc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX2Zy b21fZHNwOwkvKiBDaG5sIGZvciByZXBsaWVzIGZyb20gUk1TICovCi0JdTggKmJ1ZjsJCS8qIEJ1 ZmZlciBmb3IgY29tbWFuZHMsIHJlcGxpZXMgKi8KLQl1MzIgYnVmc2l6ZTsJCS8qIGJ1ZiBzaXpl IGluIGJ5dGVzICovCi0JdTMyIGJ1ZnNpemVfcm1zOwkvKiBidWYgc2l6ZSBpbiBSTVMgd29yZHMg Ki8KLQl1MzIgY2hhcl9zaXplOwkJLyogU2l6ZSBvZiBEU1AgY2hhcmFjdGVyICovCi0JdTMyIHdv cmRfc2l6ZTsJCS8qIFNpemUgb2YgRFNQIHdvcmQgKi8KLQl1MzIgZGF0YV9tYXVfc2l6ZTsJLyog U2l6ZSBvZiBEU1AgRGF0YSBNQVUgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZV9kaXNwKHN0 cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmopOwotc3RhdGljIGludCBmaWxsX3N0cmVhbV9kZWYo cm1zX3dvcmQgKnBkd19idWYsIHUzMiAqcHRvdGFsLCB1MzIgb2Zmc2V0LAotCQkJCSAgc3RydWN0 IG5vZGVfc3RybWRlZiBzdHJtX2RlZiwgdTMyIG1heCwKLQkJCQkgIHUzMiBjaGFyc19pbl9ybXNf d29yZCk7Ci1zdGF0aWMgaW50IHNlbmRfbWVzc2FnZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bf b2JqLCB1MzIgdGltZW91dCwKLQkJCSAgICAgICB1MzIgdWxfYnl0ZXMsIHUzMiAqcGR3X2FyZyk7 Ci0KLS8qCi0gKiAgPT09PT09PT0gZGlzcF9jcmVhdGUgPT09PT09PT0KLSAqICBDcmVhdGUgYSBO T0RFIERpc3BhdGNoZXIgb2JqZWN0LgotICovCi1pbnQgZGlzcF9jcmVhdGUoc3RydWN0IGRpc3Bf b2JqZWN0ICoqZGlzcGF0Y2hfb2JqLAotCQkgICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZf b2JqLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGRpc3BfYXR0ciAqZGlzcF9hdHRycykKLXsKLQlz dHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFj ZSAqaW50Zl9meG5zOwotCXUzMiB1bF9jaG5sX2lkOwotCXN0cnVjdCBjaG5sX2F0dHIgY2hubF9h dHRyX29iajsKLQlpbnQgc3RhdHVzID0gMDsKLQl1OCBkZXZfdHlwZTsKLQotCSpkaXNwYXRjaF9v YmogPSBOVUxMOwotCi0JLyogQWxsb2NhdGUgTm9kZSBEaXNwYXRjaGVyIG9iamVjdCAqLwotCWRp c3Bfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpc3Bfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKGRpc3Bfb2JqID09IE5VTEwpCi0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JZWxzZQotCQlk aXNwX29iai0+ZGV2X29iaiA9IGhkZXZfb2JqOwotCi0JLyogR2V0IENoYW5uZWwgbWFuYWdlciBh bmQgQnJpZGdlIGZ1bmN0aW9uIGludGVyZmFjZSAqLwotCWlmICghc3RhdHVzKSB7Ci0JCXN0YXR1 cyA9IGRldl9nZXRfY2hubF9tZ3IoaGRldl9vYmosICYoZGlzcF9vYmotPmNobmxfbWdyKSk7Ci0J CWlmICghc3RhdHVzKSB7Ci0JCQkodm9pZClkZXZfZ2V0X2ludGZfZnhucyhoZGV2X29iaiwgJmlu dGZfZnhucyk7Ci0JCQlkaXNwX29iai0+aW50Zl9meG5zID0gaW50Zl9meG5zOwotCQl9Ci0JfQot Ci0JLyogY2hlY2sgZGV2aWNlIHR5cGUgYW5kIGRlY2lkZSBpZiBzdHJlYW1zIG9yIG1lc3NhZydp bmcgaXMgdXNlZCBmb3IKLQkgKiBSTVMvRURTICovCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5j X2NvbnQ7Ci0KLQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUp OwotCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2NvbnQ7Ci0KLQlpZiAoZGV2X3R5cGUgIT0g RFNQX1VOSVQpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCQlnb3RvIGZ1bmNfY29udDsKLQl9Ci0K LQlkaXNwX29iai0+Y2hhcl9zaXplID0gRFNQV09SRFNJWkU7Ci0JZGlzcF9vYmotPndvcmRfc2l6 ZSA9IERTUFdPUkRTSVpFOwotCWRpc3Bfb2JqLT5kYXRhX21hdV9zaXplID0gRFNQV09SRFNJWkU7 Ci0JLyogT3BlbiBjaGFubmVscyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBSTVMgKi8KLQlj aG5sX2F0dHJfb2JqLnVpb19yZXFzID0gQ0hOTElPUkVRUzsKLQljaG5sX2F0dHJfb2JqLmV2ZW50 X29iaiA9IE5VTEw7Ci0JdWxfY2hubF9pZCA9IGRpc3BfYXR0cnMtPmNobmxfb2Zmc2V0ICsgQ0hO TFRPUk1TT0ZGU0VUOwotCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5jaG5sX29wZW4pICgmKGRpc3Bf b2JqLT5jaG5sX3RvX2RzcCksCi0JCQkJCSAgICAgIGRpc3Bfb2JqLT5jaG5sX21nciwKLQkJCQkJ ICAgICAgQ0hOTF9NT0RFVE9EU1AsIHVsX2NobmxfaWQsCi0JCQkJCSAgICAgICZjaG5sX2F0dHJf b2JqKTsKLQotCWlmICghc3RhdHVzKSB7Ci0JCXVsX2NobmxfaWQgPSBkaXNwX2F0dHJzLT5jaG5s X29mZnNldCArIENITkxGUk9NUk1TT0ZGU0VUOwotCQlzdGF0dXMgPQotCQkgICAgKCppbnRmX2Z4 bnMtPmNobmxfb3BlbikgKCYoZGlzcF9vYmotPmNobmxfZnJvbV9kc3ApLAotCQkJCQkJIGRpc3Bf b2JqLT5jaG5sX21nciwKLQkJCQkJCSBDSE5MX01PREVGUk9NRFNQLCB1bF9jaG5sX2lkLAotCQkJ CQkJICZjaG5sX2F0dHJfb2JqKTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJLyogQWxsb2NhdGUg YnVmZmVyIGZvciBjb21tYW5kcywgcmVwbGllcyAqLwotCQlkaXNwX29iai0+YnVmc2l6ZSA9IGRp c3BfYXR0cnMtPmNobmxfYnVmX3NpemU7Ci0JCWRpc3Bfb2JqLT5idWZzaXplX3JtcyA9IFJNU19D T01NQU5EQlVGU0laRTsKLQkJZGlzcF9vYmotPmJ1ZiA9IGt6YWxsb2MoZGlzcF9vYmotPmJ1ZnNp emUsIEdGUF9LRVJORUwpOwotCQlpZiAoZGlzcF9vYmotPmJ1ZiA9PSBOVUxMKQotCQkJc3RhdHVz ID0gLUVOT01FTTsKLQl9Ci1mdW5jX2NvbnQ6Ci0JaWYgKCFzdGF0dXMpCi0JCSpkaXNwYXRjaF9v YmogPSBkaXNwX29iajsKLQllbHNlCi0JCWRlbGV0ZV9kaXNwKGRpc3Bfb2JqKTsKLQotCXJldHVy biBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZGlzcF9kZWxldGUgPT09PT09PT0KLSAq ICBEZWxldGUgdGhlIE5PREUgRGlzcGF0Y2hlci4KLSAqLwotdm9pZCBkaXNwX2RlbGV0ZShzdHJ1 Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqKQotewotCWRlbGV0ZV9kaXNwKGRpc3Bfb2JqKTsKLX0K LQotLyoKLSAqICA9PT09PT09PSBkaXNwX25vZGVfY2hhbmdlX3ByaW9yaXR5ID09PT09PT09Ci0g KiAgQ2hhbmdlIHRoZSBwcmlvcml0eSBvZiBhIG5vZGUgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhl IHRhcmdldC4KLSAqLwotaW50IGRpc3Bfbm9kZV9jaGFuZ2VfcHJpb3JpdHkoc3RydWN0IGRpc3Bf b2JqZWN0ICpkaXNwX29iaiwKLQkJCQkgICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0J CQkJICAgICB1MzIgcm1zX2Z4biwgbm9kZWVudiBub2RlX2VudiwgczMyIHByaW8pCi17Ci0JdTMy IGR3X2FyZzsKLQlzdHJ1Y3Qgcm1zX2NvbW1hbmQgKnJtc19jbWQ7Ci0JaW50IHN0YXR1cyA9IDA7 Ci0KLQkvKiBTZW5kIG1lc3NhZ2UgdG8gUk1TIHRvIGNoYW5nZSBwcmlvcml0eSAqLwotCXJtc19j bWQgPSAoc3RydWN0IHJtc19jb21tYW5kICopKGRpc3Bfb2JqLT5idWYpOwotCXJtc19jbWQtPmZ4 biA9IChybXNfd29yZCkgKHJtc19meG4pOwotCXJtc19jbWQtPmFyZzEgPSAocm1zX3dvcmQpIG5v ZGVfZW52OwotCXJtc19jbWQtPmFyZzIgPSBwcmlvOwotCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShk aXNwX29iaiwgbm9kZV9nZXRfdGltZW91dChobm9kZSksCi0JCQkgICAgICBzaXplb2Yoc3RydWN0 IHJtc19jb21tYW5kKSwgJmR3X2FyZyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IGRpc3Bfbm9kZV9jcmVhdGUgPT09PT09PT0KLSAqICBDcmVhdGUgYSBub2RlIG9u IHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbi4K LSAqLwotaW50IGRpc3Bfbm9kZV9jcmVhdGUoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwK LQkJCSAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgcm1zX2Z4biwKLQkJCSAgICB1 MzIgdWxfY3JlYXRlX2Z4biwKLQkJCSAgICBjb25zdCBzdHJ1Y3Qgbm9kZV9jcmVhdGVhcmdzICpw YXJncywKLQkJCSAgICBub2RlZW52ICpub2RlX2VudikKLXsKLQlzdHJ1Y3Qgbm9kZV9tc2dhcmdz IG5vZGVfbXNnX2FyZ3M7Ci0Jc3RydWN0IG5vZGVfdGFza2FyZ3MgdGFza19hcmdfb2JqOwotCXN0 cnVjdCBybXNfY29tbWFuZCAqcm1zX2NtZDsKLQlzdHJ1Y3Qgcm1zX21zZ19hcmdzICpwbXNnX2Fy Z3M7Ci0Jc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncyAqbW9yZV90YXNrX2FyZ3M7Ci0JZW51bSBu b2RlX3R5cGUgbm9kZV90eXBlOwotCXUzMiBkd19sZW5ndGg7Ci0Jcm1zX3dvcmQgKnBkd19idWYg PSBOVUxMOwotCXUzMiB1bF9ieXRlczsKLQl1MzIgaTsKLQl1MzIgdG90YWw7Ci0JdTMyIGNoYXJz X2luX3Jtc193b3JkOwotCXMzMiB0YXNrX2FyZ3Nfb2Zmc2V0OwotCXMzMiBzaW9faW5fZGVmX29m ZnNldDsKLQlzMzIgc2lvX291dF9kZWZfb2Zmc2V0OwotCXMzMiBzaW9fZGVmc19vZmZzZXQ7Ci0J czMyIGFyZ3Nfb2Zmc2V0ID0gLTE7Ci0JczMyIG9mZnNldDsKLQlzdHJ1Y3Qgbm9kZV9zdHJtZGVm IHN0cm1fZGVmOwotCXUzMiBtYXg7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRzcF9ub2Rl aW5mbyBub2RlX2luZm87Ci0JdTggZGV2X3R5cGU7Ci0KLQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90 eXBlKGRpc3Bfb2JqLT5kZXZfb2JqLCAmZGV2X3R5cGUpOwotCi0JaWYgKHN0YXR1cykKLQkJZ290 byBmdW5jX2VuZDsKLQotCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkgewotCQlkZXZfZGJnKGJy aWRnZSwgIiVzOiB1bmtub3duIGRldmljZSB0eXBlID0gMHgleFxuIiwKLQkJCV9fZnVuY19fLCBk ZXZfdHlwZSk7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5 cGUoaG5vZGUpOwotCW5vZGVfbXNnX2FyZ3MgPSBwYXJncy0+YXNhLm5vZGVfbXNnX2FyZ3M7Ci0J bWF4ID0gZGlzcF9vYmotPmJ1ZnNpemVfcm1zOwkvKk1heCAjIG9mIFJNUyB3b3JkcyB0aGF0IGNh biBiZSBzZW50ICovCi0JY2hhcnNfaW5fcm1zX3dvcmQgPSBzaXplb2Yocm1zX3dvcmQpIC8gZGlz cF9vYmotPmNoYXJfc2l6ZTsKLQkvKiBOdW1iZXIgb2YgUk1TIHdvcmRzIG5lZWRlZCB0byBob2xk IGFyZyBkYXRhICovCi0JZHdfbGVuZ3RoID0KLQkgICAgKG5vZGVfbXNnX2FyZ3MuYXJnX2xlbmd0 aCArIGNoYXJzX2luX3Jtc193b3JkIC0KLQkgICAgIDEpIC8gY2hhcnNfaW5fcm1zX3dvcmQ7Ci0J LyogTWFrZSBzdXJlIG1zZyBhcmdzIGFuZCBjb21tYW5kIGZpdCBpbiBidWZmZXIgKi8KLQl0b3Rh bCA9IHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQpIC8gc2l6ZW9mKHJtc193b3JkKSArCi0JICAg IHNpemVvZihzdHJ1Y3Qgcm1zX21zZ19hcmdzKQotCSAgICAvIHNpemVvZihybXNfd29yZCkgLSAx ICsgZHdfbGVuZ3RoOwotCWlmICh0b3RhbCA+PSBtYXgpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwot CQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBNZXNzYWdlIGFyZ3MgdG9vIGxhcmdlIGZvciBidWZmZXIh IHNpemUgIgotCQkJIj0gJWQsIG1heCA9ICVkXG4iLCBfX2Z1bmNfXywgdG90YWwsIG1heCk7Ci0J fQotCS8qCi0JICogIEZpbGwgaW4gYnVmZmVyIHRvIHNlbmQgdG8gUk1TLgotCSAqICBUaGUgYnVm ZmVyIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nICBmb3JtYXQ6Ci0JICoKLQkgKiAgUk1TIGNvbW1h bmQ6Ci0JICogICAgICBBZGRyZXNzIG9mIFJNU19DcmVhdGVOb2RlKCkKLQkgKiAgICAgIEFkZHJl c3Mgb2Ygbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbgotCSAqICAgICAgZHVtbXkgYXJndW1lbnQKLQkg KiAgICAgIG5vZGUgdHlwZQotCSAqCi0JICogIE1lc3NhZ2UgQXJnczoKLQkgKiAgICAgIG1heCBu dW1iZXIgb2YgbWVzc2FnZXMKLQkgKiAgICAgIHNlZ2lkIGZvciBtZXNzYWdlIGJ1ZmZlciBhbGxv Y2F0aW9uCi0JICogICAgICBub3RpZmljYXRpb24gdHlwZSB0byB1c2Ugd2hlbiBtZXNzYWdlIGlz IHJlY2VpdmVkCi0JICogICAgICBsZW5ndGggb2YgbWVzc2FnZSBhcmcgZGF0YQotCSAqICAgICAg bWVzc2FnZSBhcmdzIGRhdGEKLQkgKgotCSAqICBUYXNrIEFyZ3MgKGlmIHRhc2sgb3Igc29ja2V0 IG5vZGUpOgotCSAqICAgICAgcHJpb3JpdHkKLQkgKiAgICAgIHN0YWNrIHNpemUKLQkgKiAgICAg IHN5c3RlbSBzdGFjayBzaXplCi0JICogICAgICBzdGFjayBzZWdtZW50Ci0JICogICAgICBtaXNj Ci0JICogICAgICBudW1iZXIgb2YgaW5wdXQgc3RyZWFtcwotCSAqICAgICAgcFNUUk1JbkRlZltd IC0gb2Zmc2V0cyBvZiBTVFJNIGRlZmluaXRpb25zIGZvciBpbnB1dCBzdHJlYW1zCi0JICogICAg ICBudW1iZXIgb2Ygb3V0cHV0IHN0cmVhbXMKLQkgKiAgICAgIHBTVFJNT3V0RGVmW10gLSBvZmZz ZXRzIG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIG91dHB1dAotCSAqICAgICAgc3RyZWFtcwotCSAq ICAgICAgU1RSTUluRGVmW10gLSBhcnJheSBvZiBTVFJNIGRlZmluaXRpb25zIGZvciBpbnB1dCBz dHJlYW1zCi0JICogICAgICBTVFJNT3V0RGVmW10gLSBhcnJheSBvZiBTVFJNIGRlZmluaXRpb25z IGZvciBvdXRwdXQgc3RyZWFtcwotCSAqCi0JICogIFNvY2tldCBBcmdzIChpZiBEQUlTIHNvY2tl dCBub2RlKToKLQkgKgotCSAqLwotCWlmICghc3RhdHVzKSB7Ci0JCXRvdGFsID0gMDsJLyogVG90 YWwgbnVtYmVyIG9mIHdvcmRzIGluIGJ1ZmZlciBzbyBmYXIgKi8KLQkJcGR3X2J1ZiA9IChybXNf d29yZCAqKSBkaXNwX29iai0+YnVmOwotCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAq KXBkd19idWY7Ci0JCXJtc19jbWQtPmZ4biA9IChybXNfd29yZCkgKHJtc19meG4pOwotCQlybXNf Y21kLT5hcmcxID0gKHJtc193b3JkKSAodWxfY3JlYXRlX2Z4bik7Ci0JCWlmIChub2RlX2dldF9s b2FkX3R5cGUoaG5vZGUpID09IE5MRFJfRFlOQU1JQ0xPQUQpIHsKLQkJCS8qIEZsdXNoIElDQUNI RSBvbiBMb2FkICovCi0JCQlybXNfY21kLT5hcmcyID0gMTsJLyogZHVtbXkgYXJndW1lbnQgKi8K LQkJfSBlbHNlIHsKLQkJCS8qIERvIG5vdCBmbHVzaCBJQ0FDSEUgKi8KLQkJCXJtc19jbWQtPmFy ZzIgPSAwOwkvKiBkdW1teSBhcmd1bWVudCAqLwotCQl9Ci0JCXJtc19jbWQtPmRhdGEgPSBub2Rl X2dldF90eXBlKGhub2RlKTsKLQkJLyoKLQkJICogIGFyZ3Nfb2Zmc2V0IGlzIHRoZSBvZmZzZXQg b2YgdGhlIGRhdGEgZmllbGQgaW4gc3RydWN0Ci0JCSAqICBybXNfY29tbWFuZCBzdHJ1Y3R1cmUu IFdlIG5lZWQgdGhpcyB0byBjYWxjdWxhdGUgc3RyZWFtCi0JCSAqICBkZWZpbml0aW9uIG9mZnNl dHMuCi0JCSAqLwotCQlhcmdzX29mZnNldCA9IDM7Ci0JCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qg cm1zX2NvbW1hbmQpIC8gc2l6ZW9mKHJtc193b3JkKTsKLQkJLyogTWVzc2FnZSBhcmdzICovCi0J CXBtc2dfYXJncyA9IChzdHJ1Y3Qgcm1zX21zZ19hcmdzICopKHBkd19idWYgKyB0b3RhbCk7Ci0J CXBtc2dfYXJncy0+bWF4X21zZ3MgPSBub2RlX21zZ19hcmdzLm1heF9tc2dzOwotCQlwbXNnX2Fy Z3MtPnNlZ2lkID0gbm9kZV9tc2dfYXJncy5zZWdfaWQ7Ci0JCXBtc2dfYXJncy0+bm90aWZ5X3R5 cGUgPSBub2RlX21zZ19hcmdzLm5vdGlmeV90eXBlOwotCQlwbXNnX2FyZ3MtPmFyZ19sZW5ndGgg PSBub2RlX21zZ19hcmdzLmFyZ19sZW5ndGg7Ci0JCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qgcm1z X21zZ19hcmdzKSAvIHNpemVvZihybXNfd29yZCkgLSAxOwotCQltZW1jcHkocGR3X2J1ZiArIHRv dGFsLCBub2RlX21zZ19hcmdzLnBkYXRhLAotCQkgICAgICAgbm9kZV9tc2dfYXJncy5hcmdfbGVu Z3RoKTsKLQkJdG90YWwgKz0gZHdfbGVuZ3RoOwotCX0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1 bmNfZW5kOwotCi0JLyogSWYgbm9kZSBpcyBhIHRhc2sgbm9kZSwgY29weSB0YXNrIGNyZWF0ZSBh cmd1bWVudHMgaW50byAgYnVmZmVyICovCi0JaWYgKG5vZGVfdHlwZSA9PSBOT0RFX1RBU0sgfHwg bm9kZV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgewotCQl0YXNrX2FyZ19vYmogPSBwYXJncy0+ YXNhLnRhc2tfYXJnX29iajsKLQkJdGFza19hcmdzX29mZnNldCA9IHRvdGFsOwotCQl0b3RhbCAr PSBzaXplb2Yoc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncykgLyBzaXplb2Yocm1zX3dvcmQpICsK LQkJICAgIDEgKyB0YXNrX2FyZ19vYmoubnVtX2lucHV0cyArIHRhc2tfYXJnX29iai5udW1fb3V0 cHV0czsKLQkJLyogQ29weSB0YXNrIGFyZ3VtZW50cyAqLwotCQlpZiAodG90YWwgPCBtYXgpIHsK LQkJCXRvdGFsID0gdGFza19hcmdzX29mZnNldDsKLQkJCW1vcmVfdGFza19hcmdzID0gKHN0cnVj dCBybXNfbW9yZV90YXNrX2FyZ3MgKikocGR3X2J1ZiArCi0JCQkJCQkJCSAgICAgICB0b3RhbCk7 Ci0JCQkvKgotCQkJICogR2V0IHNvbWUgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIG5vZGUuIE5v dGUgdGhhdCB3ZQotCQkJICogZG9uJ3QganVzdCByZWFjaCBpbnRvIHRoZSBobm9kZSBzdHJ1Y3Qg YmVjYXVzZQotCQkJICogdGhhdCB3b3VsZCBicmVhayB0aGUgbm9kZSBvYmplY3QncyBhYnN0cmFj dGlvbi4KLQkJCSAqLwotCQkJZ2V0X25vZGVfaW5mbyhobm9kZSwgJm5vZGVfaW5mbyk7Ci0JCQlt b3JlX3Rhc2tfYXJncy0+cHJpb3JpdHkgPSBub2RlX2luZm8uZXhlY3V0aW9uX3ByaW9yaXR5Owot CQkJbW9yZV90YXNrX2FyZ3MtPnN0YWNrX3NpemUgPSB0YXNrX2FyZ19vYmouc3RhY2tfc2l6ZTsK LQkJCW1vcmVfdGFza19hcmdzLT5zeXNzdGFja19zaXplID0KLQkJCSAgICB0YXNrX2FyZ19vYmou c3lzX3N0YWNrX3NpemU7Ci0JCQltb3JlX3Rhc2tfYXJncy0+c3RhY2tfc2VnID0gdGFza19hcmdf b2JqLnN0YWNrX3NlZzsKLQkJCW1vcmVfdGFza19hcmdzLT5oZWFwX2FkZHIgPSB0YXNrX2FyZ19v YmouZHNwX2hlYXBfYWRkcjsKLQkJCW1vcmVfdGFza19hcmdzLT5oZWFwX3NpemUgPSB0YXNrX2Fy Z19vYmouaGVhcF9zaXplOwotCQkJbW9yZV90YXNrX2FyZ3MtPm1pc2MgPSB0YXNrX2FyZ19vYmou ZGFpc19hcmc7Ci0JCQltb3JlX3Rhc2tfYXJncy0+bnVtX2lucHV0X3N0cmVhbXMgPQotCQkJICAg IHRhc2tfYXJnX29iai5udW1faW5wdXRzOwotCQkJdG90YWwgKz0KLQkJCSAgICBzaXplb2Yoc3Ry dWN0IHJtc19tb3JlX3Rhc2tfYXJncykgLwotCQkJICAgIHNpemVvZihybXNfd29yZCk7Ci0JCQlk ZXZfZGJnKGJyaWRnZSwgIiVzOiBkc3BfaGVhcF9hZGRyICV4LCBoZWFwX3NpemUgJXhcbiIsCi0J CQkJX19mdW5jX18sIHRhc2tfYXJnX29iai5kc3BfaGVhcF9hZGRyLAotCQkJCXRhc2tfYXJnX29i ai5oZWFwX3NpemUpOwotCQkJLyogS2VlcCB0cmFjayBvZiBwU0lPSW5EZWZbXSBhbmQgcFNJT091 dERlZltdCi0JCQkgKiBwb3NpdGlvbnMgaW4gdGhlIGJ1ZmZlciwgc2luY2UgdGhpcyBuZWVkcyB0 byBiZQotCQkJICogZmlsbGVkIGluIGxhdGVyLiAqLwotCQkJc2lvX2luX2RlZl9vZmZzZXQgPSB0 b3RhbDsKLQkJCXRvdGFsICs9IHRhc2tfYXJnX29iai5udW1faW5wdXRzOwotCQkJcGR3X2J1Zlt0 b3RhbCsrXSA9IHRhc2tfYXJnX29iai5udW1fb3V0cHV0czsKLQkJCXNpb19vdXRfZGVmX29mZnNl dCA9IHRvdGFsOwotCQkJdG90YWwgKz0gdGFza19hcmdfb2JqLm51bV9vdXRwdXRzOwotCQkJc2lv X2RlZnNfb2Zmc2V0ID0gdG90YWw7Ci0JCQkvKiBGaWxsIFNJTyBkZWZzIGFuZCBvZmZzZXRzICov Ci0JCQlvZmZzZXQgPSBzaW9fZGVmc19vZmZzZXQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgdGFza19h cmdfb2JqLm51bV9pbnB1dHM7IGkrKykgewotCQkJCWlmIChzdGF0dXMpCi0JCQkJCWJyZWFrOwot Ci0JCQkJcGR3X2J1ZltzaW9faW5fZGVmX29mZnNldCArIGldID0KLQkJCQkgICAgKG9mZnNldCAt IGFyZ3Nfb2Zmc2V0KQotCQkJCSAgICAqIChzaXplb2Yocm1zX3dvcmQpIC8gRFNQV09SRFNJWkUp OwotCQkJCXN0cm1fZGVmID0gdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldOwotCQkJCXN0YXR1 cyA9Ci0JCQkJICAgIGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKLQkJ CQkJCSAgICBzdHJtX2RlZiwgbWF4LAotCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKLQkJ CQlvZmZzZXQgPSB0b3RhbDsKLQkJCX0KLQkJCWZvciAoaSA9IDA7IChpIDwgdGFza19hcmdfb2Jq Lm51bV9vdXRwdXRzKSAmJgotCQkJICAgICAoIXN0YXR1cyk7IGkrKykgewotCQkJCXBkd19idWZb c2lvX291dF9kZWZfb2Zmc2V0ICsgaV0gPQotCQkJCSAgICAob2Zmc2V0IC0gYXJnc19vZmZzZXQp Ci0JCQkJICAgICogKHNpemVvZihybXNfd29yZCkgLyBEU1BXT1JEU0laRSk7Ci0JCQkJc3RybV9k ZWYgPSB0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW2ldOwotCQkJCXN0YXR1cyA9Ci0JCQkJICAg IGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKLQkJCQkJCSAgICBzdHJt X2RlZiwgbWF4LAotCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKLQkJCQlvZmZzZXQgPSB0 b3RhbDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIEFyZ3Mgd29uJ3QgZml0ICovCi0JCQlzdGF0 dXMgPSAtRVBFUk07Ci0JCX0KLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJdWxfYnl0ZXMgPSB0b3Rh bCAqIHNpemVvZihybXNfd29yZCk7Ci0JCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwg bm9kZV9nZXRfdGltZW91dChobm9kZSksCi0JCQkJICAgICAgdWxfYnl0ZXMsIG5vZGVfZW52KTsK LQl9Ci1mdW5jX2VuZDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGRp c3Bfbm9kZV9kZWxldGUgPT09PT09PT0KLSAqICBwdXJwb3NlOgotICogICAgICBEZWxldGUgYSBu b2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5j dGlvbi4KLSAqCi0gKi8KLWludCBkaXNwX25vZGVfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAq ZGlzcF9vYmosCi0JCQkgICAgc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIHJtc19meG4s Ci0JCQkgICAgdTMyIHVsX2RlbGV0ZV9meG4sIG5vZGVlbnYgbm9kZV9lbnYpCi17Ci0JdTMyIGR3 X2FyZzsKLQlzdHJ1Y3Qgcm1zX2NvbW1hbmQgKnJtc19jbWQ7Ci0JaW50IHN0YXR1cyA9IDA7Ci0J dTggZGV2X3R5cGU7Ci0KLQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90eXBlKGRpc3Bfb2JqLT5kZXZf b2JqLCAmZGV2X3R5cGUpOwotCi0JaWYgKCFzdGF0dXMpIHsKLQotCQlpZiAoZGV2X3R5cGUgPT0g RFNQX1VOSVQpIHsKLQotCQkJLyoKLQkJCSAqICBGaWxsIGluIGJ1ZmZlciB0byBzZW5kIHRvIFJN UwotCQkJICovCi0JCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKWRpc3Bfb2JqLT5i dWY7Ci0JCQlybXNfY21kLT5meG4gPSAocm1zX3dvcmQpIChybXNfZnhuKTsKLQkJCXJtc19jbWQt PmFyZzEgPSAocm1zX3dvcmQpIG5vZGVfZW52OwotCQkJcm1zX2NtZC0+YXJnMiA9IChybXNfd29y ZCkgKHVsX2RlbGV0ZV9meG4pOwotCQkJcm1zX2NtZC0+ZGF0YSA9IG5vZGVfZ2V0X3R5cGUoaG5v ZGUpOwotCi0JCQlzdGF0dXMgPSBzZW5kX21lc3NhZ2UoZGlzcF9vYmosIG5vZGVfZ2V0X3RpbWVv dXQoaG5vZGUpLAotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtc19jb21tYW5kKSwKLQkJCQkJ ICAgICAgJmR3X2FyZyk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBkaXNwX25vZGVfcnVuID09PT09PT09Ci0gKiAgcHVycG9zZToKLSAqICAgICAgU3Rh cnQgZXhlY3V0aW9uIG9mIGEgbm9kZSdzIGV4ZWN1dGUgcGhhc2UsIG9yIHJlc3VtZSBleGVjdXRp b24gb2YgYSBub2RlCi0gKiAgICAgIHRoYXQgaGFzIGJlZW4gc3VzcGVuZGVkICh2aWEgRElTUF9O b2RlUGF1c2UoKSkgb24gdGhlIERTUC4KLSAqLwotaW50IGRpc3Bfbm9kZV9ydW4oc3RydWN0IGRp c3Bfb2JqZWN0ICpkaXNwX29iaiwKLQkJCSBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIg cm1zX2Z4biwKLQkJCSB1MzIgdWxfZXhlY3V0ZV9meG4sIG5vZGVlbnYgbm9kZV9lbnYpCi17Ci0J dTMyIGR3X2FyZzsKLQlzdHJ1Y3Qgcm1zX2NvbW1hbmQgKnJtc19jbWQ7Ci0JaW50IHN0YXR1cyA9 IDA7Ci0JdTggZGV2X3R5cGU7Ci0KLQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90eXBlKGRpc3Bfb2Jq LT5kZXZfb2JqLCAmZGV2X3R5cGUpOwotCi0JaWYgKCFzdGF0dXMpIHsKLQotCQlpZiAoZGV2X3R5 cGUgPT0gRFNQX1VOSVQpIHsKLQotCQkJLyoKLQkJCSAqICBGaWxsIGluIGJ1ZmZlciB0byBzZW5k IHRvIFJNUy4KLQkJCSAqLwotCQkJcm1zX2NtZCA9IChzdHJ1Y3Qgcm1zX2NvbW1hbmQgKilkaXNw X29iai0+YnVmOwotCQkJcm1zX2NtZC0+ZnhuID0gKHJtc193b3JkKSAocm1zX2Z4bik7Ci0JCQly bXNfY21kLT5hcmcxID0gKHJtc193b3JkKSBub2RlX2VudjsKLQkJCXJtc19jbWQtPmFyZzIgPSAo cm1zX3dvcmQpICh1bF9leGVjdXRlX2Z4bik7Ci0JCQlybXNfY21kLT5kYXRhID0gbm9kZV9nZXRf dHlwZShobm9kZSk7Ci0KLQkJCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwgbm9kZV9n ZXRfdGltZW91dChobm9kZSksCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQp LAotCQkJCQkgICAgICAmZHdfYXJnKTsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gZGVsZXRlX2Rpc3AgPT09PT09PT0KLSAqICBwdXJwb3NlOgotICog ICAgICBGcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgdGhlIGRpc3BhdGNoZXIuCi0g Ki8KLXN0YXRpYyB2b2lkIGRlbGV0ZV9kaXNwKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmop Ci17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRm X2Z4bnM7Ci0KLQlpZiAoZGlzcF9vYmopIHsKLQkJaW50Zl9meG5zID0gZGlzcF9vYmotPmludGZf ZnhuczsKLQotCQkvKiBGcmVlIE5vZGUgRGlzcGF0Y2hlciByZXNvdXJjZXMgKi8KLQkJaWYgKGRp c3Bfb2JqLT5jaG5sX2Zyb21fZHNwKSB7Ci0JCQkvKiBDaGFubmVsIGNsb3NlIGNhbiBmYWlsIG9u bHkgaWYgdGhlIGNoYW5uZWwgaGFuZGxlCi0JCQkgKiBpcyBpbnZhbGlkLiAqLwotCQkJc3RhdHVz ID0gKCppbnRmX2Z4bnMtPmNobmxfY2xvc2UpCi0JCQkgICAgKGRpc3Bfb2JqLT5jaG5sX2Zyb21f ZHNwKTsKLQkJCWlmIChzdGF0dXMpIHsKLQkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQg dG8gY2xvc2UgY2hhbm5lbCAiCi0JCQkJCSJmcm9tIFJNUzogMHgleFxuIiwgX19mdW5jX18sIHN0 YXR1cyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRpc3Bfb2JqLT5jaG5sX3RvX2RzcCkgewotCQkJc3Rh dHVzID0KLQkJCSAgICAoKmludGZfZnhucy0+Y2hubF9jbG9zZSkgKGRpc3Bfb2JqLT4KLQkJCQkJ CQkgIGNobmxfdG9fZHNwKTsKLQkJCWlmIChzdGF0dXMpIHsKLQkJCQlkZXZfZGJnKGJyaWRnZSwg IiVzOiBGYWlsZWQgdG8gY2xvc2UgY2hhbm5lbCB0byIKLQkJCQkJIiBSTVM6IDB4JXhcbiIsIF9f ZnVuY19fLCBzdGF0dXMpOwotCQkJfQotCQl9Ci0JCWtmcmVlKGRpc3Bfb2JqLT5idWYpOwotCi0J CWtmcmVlKGRpc3Bfb2JqKTsKLQl9Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZmlsbF9zdHJlYW1f ZGVmID09PT09PT09Ci0gKiAgcHVycG9zZToKLSAqICAgICAgRmlsbHMgc3RyZWFtIGRlZmluaXRp b25zLgotICovCi1zdGF0aWMgaW50IGZpbGxfc3RyZWFtX2RlZihybXNfd29yZCAqcGR3X2J1Ziwg dTMyICpwdG90YWwsIHUzMiBvZmZzZXQsCi0JCQkJICBzdHJ1Y3Qgbm9kZV9zdHJtZGVmIHN0cm1f ZGVmLCB1MzIgbWF4LAotCQkJCSAgdTMyIGNoYXJzX2luX3Jtc193b3JkKQotewotCXN0cnVjdCBy bXNfc3RybV9kZWYgKnN0cm1fZGVmX29iajsKLQl1MzIgdG90YWwgPSAqcHRvdGFsOwotCXUzMiBu YW1lX2xlbjsKLQl1MzIgZHdfbGVuZ3RoOwotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKHRvdGFs ICsgc2l6ZW9mKHN0cnVjdCBybXNfc3RybV9kZWYpIC8gc2l6ZW9mKHJtc193b3JkKSA+PSBtYXgp IHsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0gZWxzZSB7Ci0JCXN0cm1fZGVmX29iaiA9IChzdHJ1 Y3Qgcm1zX3N0cm1fZGVmICopKHBkd19idWYgKyB0b3RhbCk7Ci0JCXN0cm1fZGVmX29iai0+YnVm c2l6ZSA9IHN0cm1fZGVmLmJ1Zl9zaXplOwotCQlzdHJtX2RlZl9vYmotPm5idWZzID0gc3RybV9k ZWYubnVtX2J1ZnM7Ci0JCXN0cm1fZGVmX29iai0+c2VnaWQgPSBzdHJtX2RlZi5zZWdfaWQ7Ci0J CXN0cm1fZGVmX29iai0+YWxpZ24gPSBzdHJtX2RlZi5idWZfYWxpZ25tZW50OwotCQlzdHJtX2Rl Zl9vYmotPnRpbWVvdXQgPSBzdHJtX2RlZi50aW1lb3V0OwotCX0KLQotCWlmICghc3RhdHVzKSB7 Ci0JCS8qCi0JCSAqICBTaW5jZSB3ZSBoYXZlbid0IGFkZGVkIHRoZSBkZXZpY2UgbmFtZSB5ZXQs IHN1YnRyYWN0Ci0JCSAqICAxIGZyb20gdG90YWwuCi0JCSAqLwotCQl0b3RhbCArPSBzaXplb2Yo c3RydWN0IHJtc19zdHJtX2RlZikgLyBzaXplb2Yocm1zX3dvcmQpIC0gMTsKLQkJZHdfbGVuZ3Ro ID0gc3RybGVuKHN0cm1fZGVmLnN6X2RldmljZSkgKyAxOwotCi0JCS8qIE51bWJlciBvZiBSTVNf V09SRFMgbmVlZGVkIHRvIGhvbGQgZGV2aWNlIG5hbWUgKi8KLQkJbmFtZV9sZW4gPQotCQkgICAg KGR3X2xlbmd0aCArIGNoYXJzX2luX3Jtc193b3JkIC0gMSkgLyBjaGFyc19pbl9ybXNfd29yZDsK LQotCQlpZiAodG90YWwgKyBuYW1lX2xlbiA+PSBtYXgpIHsKLQkJCXN0YXR1cyA9IC1FUEVSTTsK LQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiAgWmVybyBvdXQgbGFzdCB3b3JkLCBzaW5jZSB0aGUg ZGV2aWNlIG5hbWUgbWF5IG5vdAotCQkJICogIGV4dGVuZCB0byBjb21wbGV0ZWx5IGZpbGwgdGhp cyB3b3JkLgotCQkJICovCi0JCQlwZHdfYnVmW3RvdGFsICsgbmFtZV9sZW4gLSAxXSA9IDA7Ci0J CQkvKiogVE9ETyBVU0UgU0VSVklDRVMgKiAqLwotCQkJbWVtY3B5KHBkd19idWYgKyB0b3RhbCwg c3RybV9kZWYuc3pfZGV2aWNlLCBkd19sZW5ndGgpOwotCQkJdG90YWwgKz0gbmFtZV9sZW47Ci0J CQkqcHRvdGFsID0gdG90YWw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgot ICogID09PT09PT09IHNlbmRfbWVzc2FnZSA9PT09PT0KLSAqICBTZW5kIGNvbW1hbmQgbWVzc2Fn ZSB0byBSTVMsIGdldCByZXBseSBmcm9tIFJNUy4KLSAqLwotc3RhdGljIGludCBzZW5kX21lc3Nh Z2Uoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwgdTMyIHRpbWVvdXQsCi0JCQkgICAgICAg dTMyIHVsX2J5dGVzLCB1MzIgKnBkd19hcmcpCi17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJm YWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKLQl1MzIgZHdf YXJnID0gMDsKLQl1OCAqcGJ1ZjsKLQlzdHJ1Y3QgY2hubF9pb2MgY2hubF9pb2Nfb2JqOwotCWlu dCBzdGF0dXMgPSAwOwotCi0JKnBkd19hcmcgPSAodTMyKSBOVUxMOwotCWludGZfZnhucyA9IGRp c3Bfb2JqLT5pbnRmX2Z4bnM7Ci0JY2hubF9vYmogPSBkaXNwX29iai0+Y2hubF90b19kc3A7Ci0J cGJ1ZiA9IGRpc3Bfb2JqLT5idWY7Ci0KLQkvKiBTZW5kIHRoZSBjb21tYW5kICovCi0Jc3RhdHVz ID0gKCppbnRmX2Z4bnMtPmNobmxfYWRkX2lvX3JlcSkgKGNobmxfb2JqLCBwYnVmLCB1bF9ieXRl cywgMCwKLQkJCQkJCSAgICAwTCwgZHdfYXJnKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNf ZW5kOwotCi0Jc3RhdHVzID0KLQkgICAgKCppbnRmX2Z4bnMtPmNobmxfZ2V0X2lvYykgKGNobmxf b2JqLCB0aW1lb3V0LCAmY2hubF9pb2Nfb2JqKTsKLQlpZiAoIXN0YXR1cykgewotCQlpZiAoIUNI TkxfSVNfSU9fQ09NUExFVEUoY2hubF9pb2Nfb2JqKSkgewotCQkJaWYgKENITkxfSVNfVElNRURf T1VUKGNobmxfaW9jX29iaikpCi0JCQkJc3RhdHVzID0gLUVUSU1FOwotCQkJZWxzZQotCQkJCXN0 YXR1cyA9IC1FUEVSTTsKLQkJfQotCX0KLQkvKiBHZXQgdGhlIHJlcGx5ICovCi0JaWYgKHN0YXR1 cykKLQkJZ290byBmdW5jX2VuZDsKLQotCWNobmxfb2JqID0gZGlzcF9vYmotPmNobmxfZnJvbV9k c3A7Ci0JdWxfYnl0ZXMgPSBSRVBMWVNJWkU7Ci0Jc3RhdHVzID0gKCppbnRmX2Z4bnMtPmNobmxf YWRkX2lvX3JlcSkgKGNobmxfb2JqLCBwYnVmLCB1bF9ieXRlcywKLQkJCQkJCSAgICAwLCAwTCwg ZHdfYXJnKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0Jc3RhdHVzID0KLQkg ICAgKCppbnRmX2Z4bnMtPmNobmxfZ2V0X2lvYykgKGNobmxfb2JqLCB0aW1lb3V0LCAmY2hubF9p b2Nfb2JqKTsKLQlpZiAoIXN0YXR1cykgewotCQlpZiAoQ0hOTF9JU19USU1FRF9PVVQoY2hubF9p b2Nfb2JqKSkgewotCQkJc3RhdHVzID0gLUVUSU1FOwotCQl9IGVsc2UgaWYgKGNobmxfaW9jX29i ai5ieXRlX3NpemUgPCB1bF9ieXRlcykgewotCQkJLyogRGlkIG5vdCBnZXQgYWxsIG9mIHRoZSBy ZXBseSBmcm9tIHRoZSBSTVMgKi8KLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJfSBlbHNlIHsKLQkJ CWlmIChDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKLQkJCQlpZiAoKigoaW50 ICopY2hubF9pb2Nfb2JqLmJ1ZikgPCAwKSB7Ci0JCQkJCS8qIFRyYW5zbGF0ZSBEU1AncyB0byBr ZXJuZWwgZXJyb3IgKi8KLQkJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKLQkJCQkJZGV2X2RiZyhi cmlkZ2UsICIlczogRFNQLXNpZGUgZmFpbGVkOiIKLQkJCQkJCSIgRFNQIGVycmNvZGUgPSAweCV4 LCBLZXJuZWwgIgotCQkJCQkJImVycmNvZGUgPSAlZFxuIiwgX19mdW5jX18sCi0JCQkJCQkqKGlu dCAqKXBidWYsIHN0YXR1cyk7Ci0JCQkJfQotCQkJCSpwZHdfYXJnID0KLQkJCQkgICAgKCgocm1z X3dvcmQgKikgKGNobmxfaW9jX29iai5idWYpKVsxXSk7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXR1 cyA9IC1FUEVSTTsKLQkJCX0KLQkJfQotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnYuYyBiL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA3NTdhZTIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJy aWRnZS9ybWdyL2Rydi5jCisrKyAvZGV2L251bGwKQEAgLTEsODE2ICswLDAgQEAKLS8qCi0gKiBk cnYuYwotICoKLSAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9y IFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAqCi0gKiBEU1AvQklPUyBCcmlkZ2UgcmVzb3VyY2UgYWxs b2NhdGlvbiBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5z dHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgUEFDS0FH RSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBM SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotCi0vKiAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0jaW5j bHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gVGhpcyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KLSNpbmNsdWRl IDxkc3BicmlkZ2UvZGV2Lmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgotI2luY2x1 ZGUgPGRzcGJyaWRnZS9wcm9jLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KLSNpbmNs dWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwY2hubC5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9yZXNvdXJjZWNsZWFudXAuaD4KLQotLyogIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMsIERhdGEgU3RydWN0dXJlcywgVHlw ZWRlZnMgKi8KLXN0cnVjdCBkcnZfb2JqZWN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0 OwotCXN0cnVjdCBsaXN0X2hlYWQgZGV2X25vZGVfc3RyaW5nOwotfTsKLQotLyoKLSAqICBUaGlz IGlzIHRoZSBEZXZpY2UgRXh0ZW5zaW9uLiBOYW1lZCB3aXRoIHRoZSBQcmVmaXgKLSAqICBEUlZf IHNpbmNlIGl0IGlzIGxpdmluZyBpbiB0aGlzIG1vZHVsZQotICovCi1zdHJ1Y3QgZHJ2X2V4dCB7 Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5H VEhdOwotfTsKLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2Jh bHMgKi8KLXN0YXRpYyBib29sIGV4dF9waHlzX21lbV9wb29sX2VuYWJsZWQ7Ci1zdHJ1Y3QgZXh0 X3BoeXNfbWVtX3Bvb2wgewotCXUzMiBwaHlzX21lbV9iYXNlOwotCXUzMiBwaHlzX21lbV9zaXpl OwotCXUzMiB2aXJ0X21lbV9iYXNlOwotCXUzMiBuZXh0X3BoeXNfYWxsb2NfcHRyOwotfTsKLXN0 YXRpYyBzdHJ1Y3QgZXh0X3BoeXNfbWVtX3Bvb2wgZXh0X21lbV9wb29sOwotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotc3Rh dGljIGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMp OwotCi0KLS8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSAqLwotCi1zdGF0aWMgaW50IGRydl9w cm9jX2ZyZWVfbm9kZV9yZXMoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKTsKLQotLyogQWxs b2NhdGUgYW5kIGFkZCBhIG5vZGUgcmVzb3VyY2UgZWxlbWVudAotKiBUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCBmcm9tIC5Ob2RlX0FsbG9jYXRlLiAqLwotaW50IGRydl9pbnNlcnRfbm9kZV9yZXNf ZWxlbWVudCh2b2lkICpobm9kZSwgdm9pZCAqbm9kZV9yZXNvdXJjZSwKLQkJCQkgICAgICAgdm9p ZCAqcHJvY2Vzc19jdHh0KQotewotCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlX3Jlc19v YmogPQotCSAgICAoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKilub2RlX3Jlc291cmNlOwotCXN0 cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXBy b2Nlc3NfY3R4dDsKLQlpbnQgcmV0dmFsOwotCi0JKm5vZGVfcmVzX29iaiA9IGt6YWxsb2Moc2l6 ZW9mKHN0cnVjdCBub2RlX3Jlc19vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoISpub2RlX3Jl c19vYmopCi0JCXJldHVybiAtRU5PTUVNOwotCi0JKCpub2RlX3Jlc19vYmopLT5ub2RlID0gaG5v ZGU7Ci0JcmV0dmFsID0gaWRyX2FsbG9jKGN0eHQtPm5vZGVfaWQsICpub2RlX3Jlc19vYmosIDAs IDAsIEdGUF9LRVJORUwpOwotCWlmIChyZXR2YWwgPj0gMCkgewotCQkoKm5vZGVfcmVzX29iaikt PmlkID0gcmV0dmFsOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlrZnJlZSgqbm9kZV9yZXNfb2JqKTsK LQotCWlmIChyZXR2YWwgPT0gLUVOT1NQQykgewotCQlwcl9lcnIoIiVzOiBGQUlMRUQsIElEUiBp cyBGVUxMXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCXBy X2VycigiJXM6IE9VVCBPRiBNRU1PUllcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07 Ci0JfQotfQotCi0vKiBSZWxlYXNlIGFsbCBOb2RlIHJlc291cmNlcyBhbmQgaXRzIGNvbnRleHQK LSAqIEFjdHVhbCBOb2RlIERlLUFsbG9jYXRpb24gKi8KLXN0YXRpYyBpbnQgZHJ2X3Byb2NfZnJl ZV9ub2RlX3JlcyhpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHByb2Nl c3NfY29udGV4dCAqY3R4dCA9IGRhdGE7Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3Qgbm9kZV9yZXNf b2JqZWN0ICpub2RlX3Jlc19vYmogPSBwOwotCXUzMiBub2RlX3N0YXRlOwotCi0JaWYgKG5vZGVf cmVzX29iai0+bm9kZV9hbGxvY2F0ZWQpIHsKLQkJbm9kZV9zdGF0ZSA9IG5vZGVfZ2V0X3N0YXRl KG5vZGVfcmVzX29iai0+bm9kZSk7Ci0JCWlmIChub2RlX3N0YXRlIDw9IE5PREVfREVMRVRJTkcp IHsKLQkJCWlmICgobm9kZV9zdGF0ZSA9PSBOT0RFX1JVTk5JTkcpIHx8Ci0JCQkgICAgKG5vZGVf c3RhdGUgPT0gTk9ERV9QQVVTRUQpIHx8Ci0JCQkgICAgKG5vZGVfc3RhdGUgPT0gTk9ERV9URVJN SU5BVElORykpCi0JCQkJbm9kZV90ZXJtaW5hdGUKLQkJCQkgICAgKG5vZGVfcmVzX29iai0+bm9k ZSwgJnN0YXR1cyk7Ci0KLQkJCW5vZGVfZGVsZXRlKG5vZGVfcmVzX29iaiwgY3R4dCk7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmVsZWFzZSBhbGwgTWFwcGVkIGFuZCBSZXNlcnZl ZCBETU0gcmVzb3VyY2VzICovCi1pbnQgZHJ2X3JlbW92ZV9hbGxfZG1tX3Jlc19lbGVtZW50cyh2 b2lkICpwcm9jZXNzX2N0eHQpCi17Ci0Jc3RydWN0IHByb2Nlc3NfY29udGV4dCAqY3R4dCA9IChz dHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJvY2Vzc19jdHh0OwotCWludCBzdGF0dXMgPSAwOwot CXN0cnVjdCBkbW1fbWFwX29iamVjdCAqdGVtcF9tYXAsICptYXBfb2JqOwotCXN0cnVjdCBkbW1f cnN2X29iamVjdCAqdGVtcF9yc3YsICpyc3Zfb2JqOwotCi0JLyogRnJlZSBETU0gbWFwcGVkIG1l bW9yeSByZXNvdXJjZXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwX29iaiwgdGVt cF9tYXAsICZjdHh0LT5kbW1fbWFwX2xpc3QsIGxpbmspIHsKLQkJc3RhdHVzID0gcHJvY191bl9t YXAoY3R4dC0+cHJvY2Vzc29yLAotCQkJCSAgICAgKHZvaWQgKiltYXBfb2JqLT5kc3BfYWRkciwg Y3R4dCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlwcl9lcnIoIiVzOiBwcm9jX3VuX21hcCBmYWlsZWQh IgotCQkJICAgICAgICIgc3RhdHVzID0gMHgleG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQl9Ci0K LQkvKiBGcmVlIERNTSByZXNlcnZlZCBtZW1vcnkgcmVzb3VyY2VzICovCi0JbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHJzdl9vYmosIHRlbXBfcnN2LCAmY3R4dC0+ZG1tX3Jzdl9saXN0LCBsaW5r KSB7Ci0JCXN0YXR1cyA9IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkoY3R4dC0+cHJvY2Vzc29yLCAo dm9pZCAqKQotCQkJCQkJcnN2X29iai0+ZHNwX3Jlc2VydmVkX2FkZHIsCi0JCQkJCQljdHh0KTsK LQkJaWYgKHN0YXR1cykKLQkJCXByX2VycigiJXM6IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgZmFp bGVkISIKLQkJCSAgICAgICAiIHN0YXR1cyA9IDB4JXhuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0J fQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIFVwZGF0ZSBOb2RlIGFsbG9jYXRpb24gc3RhdHVz ICovCi12b2lkIGRydl9wcm9jX25vZGVfdXBkYXRlX3N0YXR1cyh2b2lkICpub2RlX3Jlc291cmNl LCBzMzIgc3RhdHVzKQotewotCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzX29iaiA9 Ci0JICAgIChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXNvdXJjZTsKLQlub2RlX3Jl c19vYmotPm5vZGVfYWxsb2NhdGVkID0gc3RhdHVzOwotfQotCi0vKiBVcGRhdGUgTm9kZSBIZWFw IHN0YXR1cyAqLwotdm9pZCBkcnZfcHJvY19ub2RlX3VwZGF0ZV9oZWFwX3N0YXR1cyh2b2lkICpu b2RlX3Jlc291cmNlLCBzMzIgc3RhdHVzKQotewotCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5v ZGVfcmVzX29iaiA9Ci0JICAgIChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXNvdXJj ZTsKLQlub2RlX3Jlc19vYmotPmhlYXBfYWxsb2NhdGVkID0gc3RhdHVzOwotfQotCi0vKiBSZWxl YXNlIGFsbCBOb2RlIHJlc291cmNlcyBhbmQgaXRzIGNvbnRleHQKLSogVGhpcyBpcyBjYWxsZWQg ZnJvbSAuYnJpZGdlX3JlbGVhc2UuCi0gKi8KLWludCBkcnZfcmVtb3ZlX2FsbF9ub2RlX3Jlc19l bGVtZW50cyh2b2lkICpwcm9jZXNzX2N0eHQpCi17Ci0Jc3RydWN0IHByb2Nlc3NfY29udGV4dCAq Y3R4dCA9IHByb2Nlc3NfY3R4dDsKLQotCWlkcl9mb3JfZWFjaChjdHh0LT5ub2RlX2lkLCBkcnZf cHJvY19mcmVlX25vZGVfcmVzLCBjdHh0KTsKLQlpZHJfZGVzdHJveShjdHh0LT5ub2RlX2lkKTsK LQotCXJldHVybiAwOwotfQotCi0vKiBBbGxvY2F0ZSB0aGUgU1RSTSByZXNvdXJjZSBlbGVtZW50 Ci0qIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBhY3R1YWwgcmVzb3VyY2UgaXMgYWxsb2NhdGVk Ci0gKi8KLWludCBkcnZfcHJvY19pbnNlcnRfc3RybV9yZXNfZWxlbWVudCh2b2lkICpzdHJlYW1f b2JqLAotCQkJCQkgICAgdm9pZCAqc3RybV9yZXMsIHZvaWQgKnByb2Nlc3NfY3R4dCkKLXsKLQlz dHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICoqcHN0cm1fcmVzID0KLQkgICAgKHN0cnVjdCBzdHJtX3Jl c19vYmplY3QgKiopc3RybV9yZXM7Ci0Jc3RydWN0IHByb2Nlc3NfY29udGV4dCAqY3R4dCA9IChz dHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJvY2Vzc19jdHh0OwotCWludCByZXR2YWw7Ci0KLQkq cHN0cm1fcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0cm1fcmVzX29iamVjdCksIEdGUF9L RVJORUwpOwotCWlmICgqcHN0cm1fcmVzID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCi0J KCpwc3RybV9yZXMpLT5zdHJlYW0gPSBzdHJlYW1fb2JqOwotCXJldHZhbCA9IGlkcl9hbGxvYyhj dHh0LT5zdHJlYW1faWQsICpwc3RybV9yZXMsIDAsIDAsIEdGUF9LRVJORUwpOwotCWlmIChyZXR2 YWwgPj0gMCkgewotCQkoKnBzdHJtX3JlcyktPmlkID0gcmV0dmFsOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlpZiAocmV0dmFsID09IC1FTk9TUEMpIHsKLQkJcHJfZXJyKCIlczogRkFJTEVELCBJRFIg aXMgRlVMTFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVQRVJNOwotCX0gZWxzZSB7Ci0JCXBy X2VycigiJXM6IE9VVCBPRiBNRU1PUllcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07 Ci0JfQotfQotCi1zdGF0aWMgaW50IGRydl9wcm9jX2ZyZWVfc3RybV9yZXMoaW50IGlkLCB2b2lk ICpwLCB2b2lkICpwcm9jZXNzX2N0eHQpCi17Ci0Jc3RydWN0IHByb2Nlc3NfY29udGV4dCAqY3R4 dCA9IHByb2Nlc3NfY3R4dDsKLQlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlcyA9IHA7 Ci0Jc3RydWN0IHN0cmVhbV9pbmZvIHN0cm1faW5mbzsKLQlzdHJ1Y3QgZHNwX3N0cmVhbWluZm8g dXNlcjsKLQl1OCAqKmFwX2J1ZmZlciA9IE5VTEw7Ci0JdTggKmJ1Zl9wdHI7Ci0JdTMyIHVsX2J5 dGVzOwotCXUzMiBkd19hcmc7Ci0JczMyIHVsX2J1Zl9zaXplOwotCi0JaWYgKHN0cm1fcmVzLT5u dW1fYnVmcykgewotCQlhcF9idWZmZXIgPSBrbWFsbG9jKChzdHJtX3Jlcy0+bnVtX2J1ZnMgKgot CQkJCSAgICAgICBzaXplb2YodTggKikpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFwX2J1ZmZlcikg ewotCQkJc3RybV9mcmVlX2J1ZmZlcihzdHJtX3JlcywKLQkJCQkJCSAgYXBfYnVmZmVyLAotCQkJ CQkJICBzdHJtX3Jlcy0+bnVtX2J1ZnMsCi0JCQkJCQkgIGN0eHQpOwotCQkJa2ZyZWUoYXBfYnVm ZmVyKTsKLQkJfQotCX0KLQlzdHJtX2luZm8udXNlcl9zdHJtID0gJnVzZXI7Ci0JdXNlci5udW1i ZXJfYnVmc19pbl9zdHJlYW0gPSAwOwotCXN0cm1fZ2V0X2luZm8oc3RybV9yZXMtPnN0cmVhbSwg JnN0cm1faW5mbywgc2l6ZW9mKHN0cm1faW5mbykpOwotCXdoaWxlICh1c2VyLm51bWJlcl9idWZz X2luX3N0cmVhbS0tKQotCQlzdHJtX3JlY2xhaW0oc3RybV9yZXMtPnN0cmVhbSwgJmJ1Zl9wdHIs ICZ1bF9ieXRlcywKLQkJCSAgICAgKHUzMiAqKSAmdWxfYnVmX3NpemUsICZkd19hcmcpOwotCXN0 cm1fY2xvc2Uoc3RybV9yZXMsIGN0eHQpOwotCXJldHVybiAwOwotfQotCi0vKiBSZWxlYXNlIGFs bCBTdHJlYW0gcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAotKiBUaGlzIGlzIGNhbGxlZCBmcm9t IC5icmlkZ2VfcmVsZWFzZS4KLSAqLwotaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1l bnRzKHZvaWQgKnByb2Nlc3NfY3R4dCkKLXsKLQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0 ID0gcHJvY2Vzc19jdHh0OwotCi0JaWRyX2Zvcl9lYWNoKGN0eHQtPnN0cmVhbV9pZCwgZHJ2X3By b2NfZnJlZV9zdHJtX3JlcywgY3R4dCk7Ci0JaWRyX2Rlc3Ryb3koY3R4dC0+c3RyZWFtX2lkKTsK LQotCXJldHVybiAwOwotfQotCi0vKiBVcGRhdGluZyB0aGUgc3RyZWFtIHJlc291cmNlIGVsZW1l bnQgKi8KLWludCBkcnZfcHJvY191cGRhdGVfc3RybV9yZXModTMyIG51bV9idWZzLCB2b2lkICpz dHJtX3Jlc291cmNlcykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3Qgc3RybV9yZXNfb2Jq ZWN0ICoqc3RybV9yZXMgPQotCSAgICAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKilzdHJtX3Jl c291cmNlczsKLQotCSgqc3RybV9yZXMpLT5udW1fYnVmcyA9IG51bV9idWZzOwotCXJldHVybiBz dGF0dXM7Ci19Ci0KLS8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSBFTkQgKi8KLQotLyoKLSAq ICA9PT09PT09PSA9IGRydl9jcmVhdGUgPT09PT09PT0gPQotICogIFB1cnBvc2U6Ci0gKiAgICAg IERSViBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBkdXJpbmcgRHJpdmVyIExvYWRpbmcu Ci0gKi8KLWludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaikKLXsKLQlp bnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSBOVUxMOwot CXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0K LQlwZHJ2X29iamVjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcnZfb2JqZWN0KSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKHBkcnZfb2JqZWN0KSB7Ci0JCS8qIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBM aXN0IG9mIGRldmljZSBvYmplY3RzICovCi0JCUlOSVRfTElTVF9IRUFEKCZwZHJ2X29iamVjdC0+ ZGV2X2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmcGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmlu Zyk7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQl9Ci0JLyogU3RvcmUgdGhlIERS ViBPYmplY3QgaW4gdGhlIGRyaXZlciBkYXRhICovCi0JaWYgKCFzdGF0dXMpIHsKLQkJaWYgKGRy dl9kYXRhcCkgewotCQkJZHJ2X2RhdGFwLT5kcnZfb2JqZWN0ID0gKHZvaWQgKilwZHJ2X29iamVj dDsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJCXByX2VycigiJXM6IEZhaWxl ZCB0byBzdG9yZSBEUlYgb2JqZWN0XG4iLCBfX2Z1bmNfXyk7Ci0JCX0KLQl9Ci0KLQlpZiAoIXN0 YXR1cykgewotCQkqZHJ2X29iaiA9IHBkcnZfb2JqZWN0OwotCX0gZWxzZSB7Ci0JCS8qIEZyZWUg dGhlIERSViBPYmplY3QgKi8KLQkJa2ZyZWUocGRydl9vYmplY3QpOwotCX0KLQotCXJldHVybiBz dGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gPSBkcnZfZGVzdHJveSA9PT09PT09PSA9Ci0g KiAgcHVycG9zZToKLSAqICAgICAgSW52b2tlZCBkdXJpbmcgYnJpZGdlIGRlLWluaXRpYWxpemF0 aW9uCi0gKi8KLWludCBkcnZfZGVzdHJveShzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaikK LXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAo c3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOwotCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2Rh dGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0KLQlrZnJlZShwZHJ2X29iamVjdCk7Ci0J LyogVXBkYXRlIHRoZSBEUlYgT2JqZWN0IGluIHRoZSBkcml2ZXIgZGF0YSAqLwotCWlmIChkcnZf ZGF0YXApIHsKLQkJZHJ2X2RhdGFwLT5kcnZfb2JqZWN0ID0gTlVMTDsKLQl9IGVsc2UgewotCQlz dGF0dXMgPSAtRVBFUk07Ci0JCXByX2VycigiJXM6IEZhaWxlZCB0byBzdG9yZSBEUlYgb2JqZWN0 XG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09 PT09PSBkcnZfZ2V0X2Rldl9vYmplY3QgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBH aXZlbiBhIGluZGV4LCByZXR1cm5zIGEgaGFuZGxlIHRvIERldk9iamVjdCBmcm9tIHRoZSBsaXN0 LgotICovCi1pbnQgZHJ2X2dldF9kZXZfb2JqZWN0KHUzMiBpbmRleCwgc3RydWN0IGRydl9vYmpl Y3QgKmhkcnZfb2JqLAotCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKipkZXZpY2Vfb2JqKQot ewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOwotCXUzMiBp OwotCi0JZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfZmlyc3RfZGV2X29i amVjdCgpOwotCWZvciAoaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7Ci0JCWRldl9vYmogPQotCQkg ICAgKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QoKHUzMikgZGV2 X29iaik7Ci0JfQotCWlmIChkZXZfb2JqKSB7Ci0JCSpkZXZpY2Vfb2JqID0gKHN0cnVjdCBkZXZf b2JqZWN0ICopZGV2X29iajsKLQl9IGVsc2UgewotCQkqZGV2aWNlX29iaiA9IE5VTEw7Ci0JCXN0 YXR1cyA9IC1FUEVSTTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09 PT09IGRydl9nZXRfZmlyc3RfZGV2X29iamVjdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIFJldHJpZXZlIHRoZSBmaXJzdCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVy bmFsIGxpbmtlZCBsaXN0IG9mCi0gKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkg RFJWLgotICovCi11MzIgZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KHZvaWQpCi17Ci0JdTMyIGR3 X2Rldl9vYmplY3QgPSAwOwotCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iajsKLQlzdHJ1Y3Qg ZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2UpOwotCi0JaWYgKGRy dl9kYXRhcCAmJiBkcnZfZGF0YXAtPmRydl9vYmplY3QpIHsKLQkJcGRydl9vYmogPSBkcnZfZGF0 YXAtPmRydl9vYmplY3Q7Ci0JCWlmICghbGlzdF9lbXB0eSgmcGRydl9vYmotPmRldl9saXN0KSkK LQkJCWR3X2Rldl9vYmplY3QgPSAodTMyKSBwZHJ2X29iai0+ZGV2X2xpc3QubmV4dDsKLQl9IGVs c2UgewotCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIG9iamVjdCBoYW5kbGVc biIsIF9fZnVuY19fKTsKLQl9Ci0KLQlyZXR1cm4gZHdfZGV2X29iamVjdDsKLX0KLQotLyoKLSAq ICA9PT09PT09PSBEUlZfR2V0Rmlyc3REZXZOb2RlU3RyaW5nID09PT09PT09Ci0gKiAgUHVycG9z ZToKLSAqICAgICAgUmV0cmlldmUgdGhlIGZpcnN0IERldmljZSBFeHRlbnNpb24gZnJvbSBhbiBp bnRlcm5hbCBsaW5rZWQgbGlzdCBvZgotICogICAgICBvZiBQb2ludGVyIHRvIGRldl9ub2RlIFN0 cmluZ3MgbWFpbnRhaW5lZCBieSBEUlYuCi0gKi8KLXUzMiBkcnZfZ2V0X2ZpcnN0X2Rldl9leHRl bnNpb24odm9pZCkKLXsKLQl1MzIgZHdfZGV2X2V4dGVuc2lvbiA9IDA7Ci0Jc3RydWN0IGRydl9v YmplY3QgKnBkcnZfb2JqOwotCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9k cnZkYXRhKGJyaWRnZSk7Ci0KLQlpZiAoZHJ2X2RhdGFwICYmIGRydl9kYXRhcC0+ZHJ2X29iamVj dCkgewotCQlwZHJ2X29iaiA9IGRydl9kYXRhcC0+ZHJ2X29iamVjdDsKLQkJaWYgKCFsaXN0X2Vt cHR5KCZwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nKSkgewotCQkJZHdfZGV2X2V4dGVuc2lvbiA9 Ci0JCQkgICAgKHUzMikgcGRydl9vYmotPmRldl9ub2RlX3N0cmluZy5uZXh0OwotCQl9Ci0JfSBl bHNlIHsKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBvYmplY3QgaGFuZGxl XG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0dXJuIGR3X2Rldl9leHRlbnNpb247Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QgPT09PT09PT0KLSAqICBQdXJw b3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9t IGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9mCi0gKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50 YWluZWQgYnkgRFJWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKLSAqICAgICAgZHJ2 X2dldF9maXJzdF9kZXZfb2JqZWN0KCkgYW5kIHplcm8gb3IgbW9yZSBEUlZfR2V0TmV4dC4KLSAq LwotdTMyIGRydl9nZXRfbmV4dF9kZXZfb2JqZWN0KHUzMiBoZGV2X29iaikKLXsKLQl1MzIgZHdf bmV4dF9kZXZfb2JqZWN0ID0gMDsKLQlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmo7Ci0Jc3Ry dWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKLQlzdHJ1 Y3QgbGlzdF9oZWFkICpjdXJyOwotCi0JaWYgKGRydl9kYXRhcCAmJiBkcnZfZGF0YXAtPmRydl9v YmplY3QpIHsKLQkJcGRydl9vYmogPSBkcnZfZGF0YXAtPmRydl9vYmplY3Q7Ci0JCWlmICghbGlz dF9lbXB0eSgmcGRydl9vYmotPmRldl9saXN0KSkgewotCQkJY3VyciA9IChzdHJ1Y3QgbGlzdF9o ZWFkICopaGRldl9vYmo7Ci0JCQlpZiAobGlzdF9pc19sYXN0KGN1cnIsICZwZHJ2X29iai0+ZGV2 X2xpc3QpKQotCQkJCXJldHVybiAwOwotCQkJZHdfbmV4dF9kZXZfb2JqZWN0ID0gKHUzMikgY3Vy ci0+bmV4dDsKLQkJfQotCX0gZWxzZSB7Ci0JCXByX2VycigiJXM6IEZhaWxlZCB0byByZXRyaWV2 ZSB0aGUgb2JqZWN0IGhhbmRsZVxuIiwgX19mdW5jX18pOwotCX0KLQotCXJldHVybiBkd19uZXh0 X2Rldl9vYmplY3Q7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9leHRl bnNpb24gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBE ZXZpY2UgRXh0ZW5zaW9uIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKLSAqICAgICAg b2YgcG9pbnRlciB0byBEZXZOb2RlU3RyaW5nIG1haW50YWluZWQgYnkgRFJWLCBhZnRlciBoYXZp bmcgcHJldmlvdXNseQotICogICAgICBjYWxsZWQgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9u KCkgYW5kIHplcm8gb3IgbW9yZQotICogICAgICBkcnZfZ2V0X25leHRfZGV2X2V4dGVuc2lvbigp LgotICovCi11MzIgZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24odTMyIGRldl9leHRlbnNpb24p Ci17Ci0JdTMyIGR3X2Rldl9leHRlbnNpb24gPSAwOwotCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2 X29iajsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlk Z2UpOwotCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnI7Ci0KLQlpZiAoZHJ2X2RhdGFwICYmIGRydl9k YXRhcC0+ZHJ2X29iamVjdCkgewotCQlwZHJ2X29iaiA9IGRydl9kYXRhcC0+ZHJ2X29iamVjdDsK LQkJaWYgKCFsaXN0X2VtcHR5KCZwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nKSkgewotCQkJY3Vy ciA9IChzdHJ1Y3QgbGlzdF9oZWFkICopZGV2X2V4dGVuc2lvbjsKLQkJCWlmIChsaXN0X2lzX2xh c3QoY3VyciwgJnBkcnZfb2JqLT5kZXZfbm9kZV9zdHJpbmcpKQotCQkJCXJldHVybiAwOwotCQkJ ZHdfZGV2X2V4dGVuc2lvbiA9ICh1MzIpIGN1cnItPm5leHQ7Ci0JCX0KLQl9IGVsc2UgewotCQlw cl9lcnIoIiVzOiBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIG9iamVjdCBoYW5kbGVcbiIsIF9fZnVu Y19fKTsKLQl9Ci0KLQlyZXR1cm4gZHdfZGV2X2V4dGVuc2lvbjsKLX0KLQotLyoKLSAqICA9PT09 PT09PSBkcnZfaW5zZXJ0X2Rldl9vYmplY3QgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBJbnNlcnQgYSBEZXZPYmplY3QgaW50byB0aGUgbGlzdCBvZiBNYW5hZ2VyIG9iamVjdC4KLSAq LwotaW50IGRydl9pbnNlcnRfZGV2X29iamVjdChzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29i aiwKLQkJCQkgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQotewotCXN0cnVjdCBkcnZfb2Jq ZWN0ICpwZHJ2X29iamVjdCA9IChzdHJ1Y3QgZHJ2X29iamVjdCAqKWRyaXZlcl9vYmo7Ci0KLQls aXN0X2FkZF90YWlsKChzdHJ1Y3QgbGlzdF9oZWFkICopaGRldl9vYmosICZwZHJ2X29iamVjdC0+ ZGV2X2xpc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZHJ2X3JlbW92 ZV9kZXZfb2JqZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2VhcmNoIGZvciBh bmQgcmVtb3ZlIGEgRGV2aWNlT2JqZWN0IGZyb20gdGhlIGdpdmVuIGxpc3Qgb2YgRFJWCi0gKiAg ICAgIG9iamVjdHMuCi0gKi8KLWludCBkcnZfcmVtb3ZlX2Rldl9vYmplY3Qoc3RydWN0IGRydl9v YmplY3QgKmRyaXZlcl9vYmosCi0JCQkJIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKLXsK LQlpbnQgc3RhdHVzID0gLUVQRVJNOwotCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iamVjdCA9 IChzdHJ1Y3QgZHJ2X29iamVjdCAqKWRyaXZlcl9vYmo7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3Vy X2VsZW07Ci0KLQkvKiBTZWFyY2ggbGlzdCBmb3IgcF9wcm9jX29iamVjdDogKi8KLQlsaXN0X2Zv cl9lYWNoKGN1cl9lbGVtLCAmcGRydl9vYmplY3QtPmRldl9saXN0KSB7Ci0JCS8qIElmIGZvdW5k LCByZW1vdmUgaXQuICovCi0JCWlmICgoc3RydWN0IGRldl9vYmplY3QgKiljdXJfZWxlbSA9PSBo ZGV2X29iaikgewotCQkJbGlzdF9kZWwoY3VyX2VsZW0pOwotCQkJc3RhdHVzID0gMDsKLQkJCWJy ZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBk cnZfcmVxdWVzdF9yZXNvdXJjZXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXF1 ZXN0cyAgcmVzb3VyY2VzIGZyb20gdGhlIE9TLgotICovCi1pbnQgZHJ2X3JlcXVlc3RfcmVzb3Vy Y2VzKHUzMiBkd19jb250ZXh0LCB1MzIgKmRldl9ub2RlX3N0cmcpCi17Ci0JaW50IHN0YXR1cyA9 IDA7Ci0Jc3RydWN0IGRydl9vYmplY3QgKnBkcnZfb2JqZWN0OwotCXN0cnVjdCBkcnZfZXh0ICpw c3pkZXZfbm9kZTsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0 YShicmlkZ2UpOwotCi0JLyoKLQkgKiAgQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIHN0cmlu Zy4gVGhpcyB3aWxsIGxpdmUgdW50aWwKLQkgKiAgaXQgaXMgZnJlZWQgaW4gdGhlIFJlbGVhc2Ug cmVzb3VyY2VzLiBVcGRhdGUgdGhlIGRyaXZlciBvYmplY3QKLQkgKiAgbGlzdC4KLQkgKi8KLQot CWlmICghZHJ2X2RhdGFwIHx8ICFkcnZfZGF0YXAtPmRydl9vYmplY3QpCi0JCXN0YXR1cyA9IC1F Tk9EQVRBOwotCWVsc2UKLQkJcGRydl9vYmplY3QgPSBkcnZfZGF0YXAtPmRydl9vYmplY3Q7Ci0K LQlpZiAoIXN0YXR1cykgewotCQlwc3pkZXZfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBk cnZfZXh0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChwc3pkZXZfbm9kZSkgewotCQkJc3RybmNweShw c3pkZXZfbm9kZS0+c3pfc3RyaW5nLAotCQkJCShjaGFyICopZHdfY29udGV4dCwgTUFYUkVHUEFU SExFTkdUSCAtIDEpOwotCQkJcHN6ZGV2X25vZGUtPnN6X3N0cmluZ1tNQVhSRUdQQVRITEVOR1RI IC0gMV0gPSAnXDAnOwotCQkJLyogVXBkYXRlIHRoZSBEcml2ZXIgT2JqZWN0IExpc3QgKi8KLQkJ CSpkZXZfbm9kZV9zdHJnID0gKHUzMikgcHN6ZGV2X25vZGUtPnN6X3N0cmluZzsKLQkJCWxpc3Rf YWRkX3RhaWwoJnBzemRldl9ub2RlLT5saW5rLAotCQkJCQkmcGRydl9vYmplY3QtPmRldl9ub2Rl X3N0cmluZyk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOwotCQkJKmRldl9ub2Rl X3N0cmcgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVk IHRvIGdldCBEcml2ZXIgT2JqZWN0IGZyb20gUmVnaXN0cnkiLAotCQkJX19mdW5jX18pOwotCQkq ZGV2X25vZGVfc3RyZyA9IDA7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBkcnZfcmVsZWFzZV9yZXNvdXJjZXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBSZWxlYXNlcyAgcmVzb3VyY2VzIGZyb20gdGhlIE9TLgotICovCi1pbnQgZHJ2X3JlbGVh c2VfcmVzb3VyY2VzKHUzMiBkd19jb250ZXh0LCBzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmop Ci17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGRydl9leHQgKnBzemRldl9ub2RlOwotCi0J LyoKLQkgKiAgSXJyZXNwZWN0aXZlIG9mIHRoZSBzdGF0dXMgZ28gYWhlYWQgYW5kIGNsZWFuIGl0 Ci0JICogIFRoZSBmb2xsb3dpbmcgd2lsbCBvdmVyIHdyaXRlIHRoZSBzdGF0dXMuCi0JICovCi0J Zm9yIChwc3pkZXZfbm9kZSA9IChzdHJ1Y3QgZHJ2X2V4dCAqKWRydl9nZXRfZmlyc3RfZGV2X2V4 dGVuc2lvbigpOwotCSAgICAgcHN6ZGV2X25vZGUgIT0gTlVMTDsgcHN6ZGV2X25vZGUgPSAoc3Ry dWN0IGRydl9leHQgKikKLQkgICAgIGRydl9nZXRfbmV4dF9kZXZfZXh0ZW5zaW9uKCh1MzIpIHBz emRldl9ub2RlKSkgewotCQlpZiAoKHUzMikgcHN6ZGV2X25vZGUgPT0gZHdfY29udGV4dCkgewot CQkJLyogRm91bmQgaXQgKi8KLQkJCS8qIERlbGV0ZSBmcm9tIHRoZSBEcml2ZXIgb2JqZWN0IGxp c3QgKi8KLQkJCWxpc3RfZGVsKCZwc3pkZXZfbm9kZS0+bGluayk7Ci0JCQlrZnJlZShwc3pkZXZf bm9kZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IHJlcXVlc3RfYnJpZGdlX3Jlc291cmNlcyA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KLSAqLwotc3RhdGlj IGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMpCi17 Ci0Jc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlcyA9IHJlczsKLQotCS8qIG51bV9tZW1fd2lu ZG93cyBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gQ0ZHX01BWE1FTVJFR0lTVEVSUyAqLwotCWhvc3Rf cmVzLT5udW1fbWVtX3dpbmRvd3MgPSAyOwotCi0JLyogRmlyc3Qgd2luZG93IGlzIGZvciBEU1Ag aW50ZXJuYWwgbWVtb3J5ICovCi0JZGV2X2RiZyhicmlkZ2UsICJtZW1fYmFzZVswXSAweCV4XG4i LCBob3N0X3Jlcy0+bWVtX2Jhc2VbMF0pOwotCWRldl9kYmcoYnJpZGdlLCAibWVtX2Jhc2VbM10g MHgleFxuIiwgaG9zdF9yZXMtPm1lbV9iYXNlWzNdKTsKLQlkZXZfZGJnKGJyaWRnZSwgImRtbXVf YmFzZSAlcFxuIiwgaG9zdF9yZXMtPmRtbXVfYmFzZSk7Ci0KLQkvKiBmb3IgMjR4eCBiYXNlIHBv cnQgaXMgbm90IG1hcHBpbmcgdGhlIG1hbW9yeSBmb3IgRFNQCi0JICogaW50ZXJuYWwgbWVtb3J5 IFRPRE8gRG8gYSBpb3JlbWFwIGhlcmUgKi8KLQkvKiBTZWNvbmQgd2luZG93IGlzIGZvciBEU1Ag ZXh0ZXJuYWwgbWVtb3J5IHNoYXJlZCB3aXRoIE1QVSAqLwotCi0JLyogVGhlc2UgYXJlIGhhcmQt Y29kZWQgdmFsdWVzICovCi0JaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzID0gMDsKLQlob3N0X3Jl cy0+YmlycV9hdHRyaWIgPSAwOwotCWhvc3RfcmVzLT5vZmZzZXRfZm9yX21vbml0b3IgPSAwOwot CWhvc3RfcmVzLT5jaG5sX29mZnNldCA9IDA7Ci0JLyogQ0hOTF9NQVhDSEFOTkVMUyAqLwotCWhv c3RfcmVzLT5udW1fY2hubHMgPSBDSE5MX01BWENIQU5ORUxTOwotCWhvc3RfcmVzLT5jaG5sX2J1 Zl9zaXplID0gMHg0MDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkcnZf cmVxdWVzdF9icmlkZ2VfcmVzX2RzcCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJl c2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KLSAqLwotaW50IGRydl9yZXF1ZXN0X2Jy aWRnZV9yZXNfZHNwKHZvaWQgKipwaG9zdF9yZXNvdXJjZXMpCi17Ci0JaW50IHN0YXR1cyA9IDA7 Ci0Jc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKLQl1MzIgZHdfYnVmZl9zaXplOwotCXUz MiBkbWFfYWRkcjsKLQl1MzIgc2htX3NpemU7Ci0Jc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAg PSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKLQotCWR3X2J1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1 Y3QgY2ZnX2hvc3RyZXMpOwotCi0JaG9zdF9yZXMgPSBremFsbG9jKGR3X2J1ZmZfc2l6ZSwgR0ZQ X0tFUk5FTCk7Ci0KLQlpZiAoaG9zdF9yZXMgIT0gTlVMTCkgewotCQlyZXF1ZXN0X2JyaWRnZV9y ZXNvdXJjZXMoaG9zdF9yZXMpOwotCQkvKiBudW1fbWVtX3dpbmRvd3MgbXVzdCBub3QgYmUgbW9y ZSB0aGFuIENGR19NQVhNRU1SRUdJU1RFUlMgKi8KLQkJaG9zdF9yZXMtPm51bV9tZW1fd2luZG93 cyA9IDQ7Ci0KLQkJaG9zdF9yZXMtPm1lbV9iYXNlWzBdID0gMDsKLQkJaG9zdF9yZXMtPm1lbV9i YXNlWzJdID0gKHUzMikgaW9yZW1hcChPTUFQX0RTUF9NRU0xX0JBU0UsCi0JCQkJCQkJIE9NQVBf RFNQX01FTTFfU0laRSk7Ci0JCWhvc3RfcmVzLT5tZW1fYmFzZVszXSA9ICh1MzIpIGlvcmVtYXAo T01BUF9EU1BfTUVNMl9CQVNFLAotCQkJCQkJCSBPTUFQX0RTUF9NRU0yX1NJWkUpOwotCQlob3N0 X3Jlcy0+bWVtX2Jhc2VbNF0gPSAodTMyKSBpb3JlbWFwKE9NQVBfRFNQX01FTTNfQkFTRSwKLQkJ CQkJCQkgT01BUF9EU1BfTUVNM19TSVpFKTsKLQkJaG9zdF9yZXMtPnBlcl9iYXNlID0gaW9yZW1h cChPTUFQX1BFUl9DTV9CQVNFLAotCQkJCQkJT01BUF9QRVJfQ01fU0laRSk7Ci0JCWhvc3RfcmVz LT5wZXJfcG1fYmFzZSA9IGlvcmVtYXAoT01BUF9QRVJfUFJNX0JBU0UsCi0JCQkJCQlPTUFQX1BF Ul9QUk1fU0laRSk7Ci0JCWhvc3RfcmVzLT5jb3JlX3BtX2Jhc2UgPSBpb3JlbWFwKE9NQVBfQ09S RV9QUk1fQkFTRSwKLQkJCQkJCQlPTUFQX0NPUkVfUFJNX1NJWkUpOwotCQlob3N0X3Jlcy0+ZG1t dV9iYXNlID0gaW9yZW1hcChPTUFQX0RNTVVfQkFTRSwKLQkJCQkJCSBPTUFQX0RNTVVfU0laRSk7 Ci0KLQkJZGV2X2RiZyhicmlkZ2UsICJtZW1fYmFzZVswXSAweCV4XG4iLAotCQkJaG9zdF9yZXMt Pm1lbV9iYXNlWzBdKTsKLQkJZGV2X2RiZyhicmlkZ2UsICJtZW1fYmFzZVsxXSAweCV4XG4iLAot CQkJaG9zdF9yZXMtPm1lbV9iYXNlWzFdKTsKLQkJZGV2X2RiZyhicmlkZ2UsICJtZW1fYmFzZVsy XSAweCV4XG4iLAotCQkJaG9zdF9yZXMtPm1lbV9iYXNlWzJdKTsKLQkJZGV2X2RiZyhicmlkZ2Us ICJtZW1fYmFzZVszXSAweCV4XG4iLAotCQkJaG9zdF9yZXMtPm1lbV9iYXNlWzNdKTsKLQkJZGV2 X2RiZyhicmlkZ2UsICJtZW1fYmFzZVs0XSAweCV4XG4iLAotCQkJaG9zdF9yZXMtPm1lbV9iYXNl WzRdKTsKLQkJZGV2X2RiZyhicmlkZ2UsICJkbW11X2Jhc2UgJXBcbiIsIGhvc3RfcmVzLT5kbW11 X2Jhc2UpOwotCi0JCXNobV9zaXplID0gZHJ2X2RhdGFwLT5zaG1fc2l6ZTsKLQkJaWYgKHNobV9z aXplID49IDB4MTAwMDApIHsKLQkJCS8qIEFsbG9jYXRlIFBoeXNpY2FsbHkgY29udGlndW91cywK LQkJCSAqIG5vbi1jYWNoZWFibGUgIG1lbW9yeSAqLwotCQkJaG9zdF9yZXMtPm1lbV9iYXNlWzFd ID0KLQkJCSAgICAodTMyKSBtZW1fYWxsb2NfcGh5c19tZW0oc2htX3NpemUsIDB4MTAwMDAwLAot CQkJCQkJICAgICAmZG1hX2FkZHIpOwotCQkJaWYgKGhvc3RfcmVzLT5tZW1fYmFzZVsxXSA9PSAw KSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQlwcl9lcnIoInNobSByZXNlcnZhdGlvbiBG YWlsZWRcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlob3N0X3Jlcy0+bWVtX2xlbmd0aFsxXSA9IHNo bV9zaXplOwotCQkJCWhvc3RfcmVzLT5tZW1fcGh5c1sxXSA9IGRtYV9hZGRyOwotCi0JCQkJZGV2 X2RiZyhicmlkZ2UsICIlczogQnJpZGdlIHNobSBhZGRyZXNzIDB4JXggIgotCQkJCQkiZG1hX2Fk ZHIgJXggc2l6ZSAleFxuIiwgX19mdW5jX18sCi0JCQkJCWhvc3RfcmVzLT5tZW1fYmFzZVsxXSwK LQkJCQkJZG1hX2FkZHIsIHNobV9zaXplKTsKLQkJCX0KLQkJfQotCQlpZiAoIXN0YXR1cykgewot CQkJLyogVGhlc2UgYXJlIGhhcmQtY29kZWQgdmFsdWVzICovCi0JCQlob3N0X3Jlcy0+YmlycV9y ZWdpc3RlcnMgPSAwOwotCQkJaG9zdF9yZXMtPmJpcnFfYXR0cmliID0gMDsKLQkJCWhvc3RfcmVz LT5vZmZzZXRfZm9yX21vbml0b3IgPSAwOwotCQkJaG9zdF9yZXMtPmNobmxfb2Zmc2V0ID0gMDsK LQkJCS8qIENITkxfTUFYQ0hBTk5FTFMgKi8KLQkJCWhvc3RfcmVzLT5udW1fY2hubHMgPSBDSE5M X01BWENIQU5ORUxTOwotCQkJaG9zdF9yZXMtPmNobmxfYnVmX3NpemUgPSAweDQwMDsKLQkJCWR3 X2J1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2ZnX2hvc3RyZXMpOwotCQl9Ci0JCSpwaG9zdF9y ZXNvdXJjZXMgPSBob3N0X3JlczsKLQl9Ci0JLyogRW5kIE1lbSBhbGxvYyAqLwotCXJldHVybiBz dGF0dXM7Ci19Ci0KLXZvaWQgbWVtX2V4dF9waHlzX3Bvb2xfaW5pdCh1MzIgcG9vbF9waHlzX2Jh c2UsIHUzMiBwb29sX3NpemUpCi17Ci0JdTMyIHBvb2xfdmlydF9iYXNlOwotCi0JLyogZ2V0IHRo ZSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBwaHlzaWNhbCBtZW1vcnkgcG9vbCBwYXNzZWQgKi8K LQlwb29sX3ZpcnRfYmFzZSA9ICh1MzIpIGlvcmVtYXAocG9vbF9waHlzX2Jhc2UsIHBvb2xfc2l6 ZSk7Ci0KLQlpZiAoKHZvaWQgKiopcG9vbF92aXJ0X2Jhc2UgPT0gTlVMTCkgewotCQlwcl9lcnIo IiVzOiBleHRlcm5hbCBwaHlzaWNhbCBtZW1vcnkgbWFwIGZhaWxlZFxuIiwgX19mdW5jX18pOwot CQlleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZXh0X21l bV9wb29sLnBoeXNfbWVtX2Jhc2UgPSBwb29sX3BoeXNfYmFzZTsKLQkJZXh0X21lbV9wb29sLnBo eXNfbWVtX3NpemUgPSBwb29sX3NpemU7Ci0JCWV4dF9tZW1fcG9vbC52aXJ0X21lbV9iYXNlID0g cG9vbF92aXJ0X2Jhc2U7Ci0JCWV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyID0gcG9v bF9waHlzX2Jhc2U7Ci0JCWV4dF9waHlzX21lbV9wb29sX2VuYWJsZWQgPSB0cnVlOwotCX0KLX0K LQotdm9pZCBtZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlKHZvaWQpCi17Ci0JaWYgKGV4dF9waHlz X21lbV9wb29sX2VuYWJsZWQpIHsKLQkJaW91bm1hcCgodm9pZCAqKShleHRfbWVtX3Bvb2wudmly dF9tZW1fYmFzZSkpOwotCQlleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkID0gZmFsc2U7Ci0JfQot fQotCi0vKgotICogID09PT09PT09IG1lbV9leHRfcGh5c19tZW1fYWxsb2MgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgIEFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cywgdW5jYWNo ZWQgbWVtb3J5IGZyb20gZXh0ZXJuYWwgbWVtb3J5IHBvb2wKLSAqLwotCi1zdGF0aWMgdm9pZCAq bWVtX2V4dF9waHlzX21lbV9hbGxvYyh1MzIgYnl0ZXMsIHUzMiBhbGlnbiwgdTMyICpwaHlzX2Fk ZHIpCi17Ci0JdTMyIG5ld19hbGxvY19wdHI7Ci0JdTMyIG9mZnNldDsKLQl1MzIgdmlydF9hZGRy OwotCi0JaWYgKGFsaWduID09IDApCi0JCWFsaWduID0gMTsKLQotCWlmIChieXRlcyA+ICgoZXh0 X21lbV9wb29sLnBoeXNfbWVtX2Jhc2UgKyBleHRfbWVtX3Bvb2wucGh5c19tZW1fc2l6ZSkKLQkJ ICAgICAtIGV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyKSkgewotCQlwaHlzX2FkZHIg PSBOVUxMOwotCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgewotCQlvZmZzZXQgPSAoZXh0X21lbV9w b29sLm5leHRfcGh5c19hbGxvY19wdHIgJiAoYWxpZ24gLSAxKSk7Ci0JCWlmIChvZmZzZXQgPT0g MCkKLQkJCW5ld19hbGxvY19wdHIgPSBleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0cjsK LQkJZWxzZQotCQkJbmV3X2FsbG9jX3B0ciA9IChleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9j X3B0cikgKwotCQkJICAgIChhbGlnbiAtIG9mZnNldCk7Ci0JCWlmICgobmV3X2FsbG9jX3B0ciAr IGJ5dGVzKSA8PQotCQkgICAgKGV4dF9tZW1fcG9vbC5waHlzX21lbV9iYXNlICsgZXh0X21lbV9w b29sLnBoeXNfbWVtX3NpemUpKSB7Ci0JCQkvKiB3ZSBjYW4gYWxsb2NhdGUgKi8KLQkJCSpwaHlz X2FkZHIgPSBuZXdfYWxsb2NfcHRyOwotCQkJZXh0X21lbV9wb29sLm5leHRfcGh5c19hbGxvY19w dHIgPQotCQkJICAgIG5ld19hbGxvY19wdHIgKyBieXRlczsKLQkJCXZpcnRfYWRkciA9Ci0JCQkg ICAgZXh0X21lbV9wb29sLnZpcnRfbWVtX2Jhc2UgKyAobmV3X2FsbG9jX3B0ciAtCi0JCQkJCQkJ ICBleHRfbWVtX3Bvb2wuCi0JCQkJCQkJICBwaHlzX21lbV9iYXNlKTsKLQkJCXJldHVybiAodm9p ZCAqKXZpcnRfYWRkcjsKLQkJfSBlbHNlIHsKLQkJCSpwaHlzX2FkZHIgPSAwOwotCQkJcmV0dXJu IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbWVtX2FsbG9jX3BoeXNfbWVt ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQWxsb2NhdGUgcGh5c2ljYWxseSBjb250 aWd1b3VzLCB1bmNhY2hlZCBtZW1vcnkKLSAqLwotdm9pZCAqbWVtX2FsbG9jX3BoeXNfbWVtKHUz MiBieXRlX3NpemUsIHUzMiBhbGlnbl9tYXNrLAotCQkJCXUzMiAqcGh5c2ljYWxfYWRkcmVzcykK LXsKLQl2b2lkICp2YV9tZW0gPSBOVUxMOwotCWRtYV9hZGRyX3QgcGFfbWVtOwotCi0JaWYgKGJ5 dGVfc2l6ZSA+IDApIHsKLQkJaWYgKGV4dF9waHlzX21lbV9wb29sX2VuYWJsZWQpIHsKLQkJCXZh X21lbSA9IG1lbV9leHRfcGh5c19tZW1fYWxsb2MoYnl0ZV9zaXplLCBhbGlnbl9tYXNrLAotCQkJ CQkJCSh1MzIgKikgJnBhX21lbSk7Ci0JCX0gZWxzZQotCQkJdmFfbWVtID0gZG1hX2FsbG9jX2Nv aGVyZW50KE5VTEwsIGJ5dGVfc2l6ZSwgJnBhX21lbSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0J CWlmICh2YV9tZW0gPT0gTlVMTCkKLQkJCSpwaHlzaWNhbF9hZGRyZXNzID0gMDsKLQkJZWxzZQot CQkJKnBoeXNpY2FsX2FkZHJlc3MgPSBwYV9tZW07Ci0JfQotCXJldHVybiB2YV9tZW07Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gbWVtX2ZyZWVfcGh5c19tZW0gPT09PT09PT0KLSAqICBQdXJwb3Nl OgotICogICAgICBGcmVlIHRoZSBnaXZlbiBibG9jayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMg bWVtb3J5LgotICovCi12b2lkIG1lbV9mcmVlX3BoeXNfbWVtKHZvaWQgKnZpcnR1YWxfYWRkcmVz cywgdTMyIHBoeXNpY2FsX2FkZHJlc3MsCi0JCSAgICAgICB1MzIgYnl0ZV9zaXplKQotewotCWlm ICghZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCkKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwg Ynl0ZV9zaXplLCB2aXJ0dWFsX2FkZHJlc3MsCi0JCQkJICBwaHlzaWNhbF9hZGRyZXNzKTsKLX0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydl9pbnRlcmZh Y2UuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydl9pbnRlcmZhY2UuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5MThkMi4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmMKKysrIC9kZXYvbnVs bApAQCAtMSw2NTAgKzAsMCBAQAotLyoKLSAqIGRydl9pbnRlcmZhY2UuYwotICoKLSAqIERTUC1C SU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29y cy4KLSAqCi0gKiBEU1AvQklPUyBCcmlkZ2UgZHJpdmVyIGludGVyZmFjZS4KLSAqCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMg cGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQg V0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0j aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kc3Atb21hcC5oPgotCi0jaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRl IDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGlu dXgvY2Rldi5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQ L0JJT1MgQnJpZGdlICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgotCi0vKiAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLwot I2luY2x1ZGUgPGRzcGJyaWRnZS9jbGsuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNw YXBpLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRydi5oPgotCi0vKiAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLwotI2luY2x1ZGUgPGRz cGJyaWRnZS9wd3IuaD4KLQotI2luY2x1ZGUgPGRzcGJyaWRnZS9yZXNvdXJjZWNsZWFudXAuaD4K LSNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4K LQotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCi0jaW5jbHVkZSA8bWFjaC1vbWFwMi9v bWFwMy1vcHAuaD4KLSNlbmRpZgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gR2xvYmFscyAqLwotI2RlZmluZSBEU1BCUklER0VfVkVSU0lPTgkiMC4zIgotczMyIGRz cF9kZWJ1ZzsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9kc3BicmlkZ2VfZGV2Owot c3RydWN0IGRldmljZSAqYnJpZGdlOwotCi0vKiBUaGlzIGlzIGEgdGVzdCB2YXJpYWJsZSB1c2Vk IGJ5IEJyaWRnZSB0byB0ZXN0IGRpZmZlcmVudCBzbGVlcCBzdGF0ZXMgKi8KLXMzMiBkc3BfdGVz dF9zbGVlcHN0YXRlOwotCi1zdGF0aWMgc3RydWN0IGNkZXYgYnJpZGdlX2NkZXY7Ci0KLXN0YXRp YyBzdHJ1Y3QgY2xhc3MgKmJyaWRnZV9jbGFzczsKLQotc3RhdGljIHUzMiBkcml2ZXJfY29udGV4 dDsKLXN0YXRpYyBzMzIgZHJpdmVyX21ham9yOwotc3RhdGljIGNoYXIgKmJhc2VfaW1nOwotc3Rh dGljIHMzMiBzaG1fc2l6ZSA9IDB4NTAwMDAwOwkvKiA1IE1CICovCi1zdGF0aWMgaW50IHRjX3dv cmRzd2Fwb247CS8qIERlZmF1bHQgdmFsdWUgaXMgYWx3YXlzIGZhbHNlICovCi0jaWZkZWYgQ09O RklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCi0jZGVmaW5lIFJFQ19USU1FT1VUIDUwMDAJLypyZWNv dmVyeSB0aW1lb3V0IGluIG1zZWNzICovCi1zdGF0aWMgYXRvbWljX3QgYnJpZGdlX2NyZWY7CS8q IG51bWJlciBvZiBicmlkZ2Ugb3BlbiBoYW5kbGVzICovCi1zdGF0aWMgc3RydWN0IHdvcmtxdWV1 ZV9zdHJ1Y3QgKmJyaWRnZV9yZWNfcXVldWU7Ci1zdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGJy aWRnZV9yZWNvdmVyeV93b3JrOwotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihicmlkZ2VfY29t cCk7Ci1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGJyaWRnZV9vcGVuX2NvbXApOwotc3RhdGlj IGJvb2wgcmVjb3ZlcjsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNCi1zdHJ1Y3Qgb21hcDM0 X3h4X2JyaWRnZV9zdXNwZW5kX2RhdGEgewotCWludCBzdXNwZW5kZWQ7Ci0Jd2FpdF9xdWV1ZV9o ZWFkX3Qgc3VzcGVuZF93cTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcDM0X3h4X2JyaWRnZV9z dXNwZW5kX2RhdGEgYnJpZGdlX3N1c3BlbmRfZGF0YTsKLQotc3RhdGljIGludCBvbWFwMzRfeHhi cmlkZ2Vfc3VzcGVuZF9sb2Nrb3V0KHN0cnVjdCBvbWFwMzRfeHhfYnJpZGdlX3N1c3BlbmRfZGF0 YQotCQkJCQkgICAqcywgc3RydWN0IGZpbGUgKmYpCi17Ci0JaWYgKChzKS0+c3VzcGVuZGVkKSB7 Ci0JCWlmICgoZiktPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJcmV0dXJuIC1FUEVSTTsKLQkJ d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKChzKS0+c3VzcGVuZF93cSwgKHMpLT5zdXNwZW5kZWQg PT0gMCk7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLW1vZHVsZV9wYXJhbShkc3BfZGVi dWcsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRzcF9kZWJ1ZywgIldhaXQgYWZ0ZXIgbG9h ZGluZyBEU1AgaW1hZ2UuIGRlZmF1bHQgPSBmYWxzZSIpOwotCi1tb2R1bGVfcGFyYW0oZHNwX3Rl c3Rfc2xlZXBzdGF0ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHNwX3Rlc3Rfc2xlZXBz dGF0ZSwgIkRTUCBTbGVlcCBzdGF0ZSA9IDAiKTsKLQotbW9kdWxlX3BhcmFtKGJhc2VfaW1nLCBj aGFycCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGJhc2VfaW1nLCAiRFNQIGJhc2UgaW1hZ2UsIGRl ZmF1bHQgPSBOVUxMIik7Ci0KLW1vZHVsZV9wYXJhbShzaG1fc2l6ZSwgaW50LCAwKTsKLU1PRFVM RV9QQVJNX0RFU0Moc2htX3NpemUsICJzaG0gc2l6ZSwgZGVmYXVsdCA9IDQgTUIsIG1pbmltdW0g PSA2NCBLQiIpOwotCi1tb2R1bGVfcGFyYW0odGNfd29yZHN3YXBvbiwgaW50LCAwKTsKLU1PRFVM RV9QQVJNX0RFU0ModGNfd29yZHN3YXBvbiwgIlRDIFdvcmQgU3dhcCBPcHRpb24uIGRlZmF1bHQg PSAwIik7Ci0KLU1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7Ci1NT0RVTEVfTElD RU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTihEU1BCUklER0VfVkVSU0lPTik7Ci0KLS8qCi0g KiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIG9wZW5zIGhhbmRs ZSB0byB0aGUKLSAqIGJyaWRnZSBkcml2ZXIuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX29wZW4o c3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JaW50IHN0YXR1cyA9IDA7 Ci0Jc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCA9IE5VTEw7Ci0KLQkvKgotCSAqIEFs bG9jYXRlIGEgbmV3IHByb2Nlc3MgY29udGV4dCBhbmQgaW5zZXJ0IGl0IGludG8gZ2xvYmFsCi0J ICogcHJvY2VzcyBjb250ZXh0IGxpc3QuCi0JICovCi0KLSNpZmRlZiBDT05GSUdfVElEU1BCUklE R0VfUkVDT1ZFUlkKLQlpZiAocmVjb3ZlcikgewotCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9O QkxPQ0sgfHwKLQkJICAgIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmYnJpZGdl X29wZW5fY29tcCkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCX0KLSNlbmRpZgotCXByX2N0eHQgPSBr emFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFwcl9jdHh0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXByX2N0eHQtPnJlc19zdGF0ZSA9IFBS T0NfUkVTX0FMTE9DQVRFRDsKLQlzcGluX2xvY2tfaW5pdCgmcHJfY3R4dC0+ZG1tX21hcF9sb2Nr KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJfY3R4dC0+ZG1tX21hcF9saXN0KTsKLQlzcGluX2xvY2tf aW5pdCgmcHJfY3R4dC0+ZG1tX3Jzdl9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmcHJfY3R4dC0+ ZG1tX3Jzdl9saXN0KTsKLQotCXByX2N0eHQtPm5vZGVfaWQgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgaWRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcl9jdHh0LT5ub2RlX2lkKSB7Ci0JCXN0YXR1 cyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQlpZHJfaW5pdChwcl9jdHh0LT5ub2Rl X2lkKTsKLQotCXByX2N0eHQtPnN0cmVhbV9pZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZHIp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByX2N0eHQtPnN0cmVhbV9pZCkgewotCQlzdGF0dXMgPSAt RU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JaWRyX2luaXQocHJfY3R4dC0+c3RyZWFtX2lk KTsKLQotCWZpbHAtPnByaXZhdGVfZGF0YSA9IHByX2N0eHQ7Ci0KLSNpZmRlZiBDT05GSUdfVElE U1BCUklER0VfUkVDT1ZFUlkKLQlhdG9taWNfaW5jKCZicmlkZ2VfY3JlZik7Ci0jZW5kaWYKLQly ZXR1cm4gMDsKLQotZXJyMjoKLQlrZnJlZShwcl9jdHh0LT5ub2RlX2lkKTsKLWVycjE6Ci0Ja2Zy ZWUocHJfY3R4dCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gY2xvc2VzIGhhbmRsZSB0byB0aGUgYnJpZGdl Ci0gKiBkcml2ZXIuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX3JlbGVhc2Uoc3RydWN0IGlub2Rl ICppcCwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHBy b2Nlc3NfY29udGV4dCAqcHJfY3R4dDsKLQotCWlmICghZmlscC0+cHJpdmF0ZV9kYXRhKSB7Ci0J CXN0YXR1cyA9IC1FSU87Ci0JCWdvdG8gZXJyOwotCX0KLQotCXByX2N0eHQgPSBmaWxwLT5wcml2 YXRlX2RhdGE7Ci0JZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQlkcnZfcmVtb3ZlX2FsbF9yZXNv dXJjZXMocHJfY3R4dCk7Ci0JcHJvY19kZXRhY2gocHJfY3R4dCk7Ci0Ja2ZyZWUocHJfY3R4dC0+ bm9kZV9pZCk7Ci0Ja2ZyZWUocHJfY3R4dC0+c3RyZWFtX2lkKTsKLQlrZnJlZShwcl9jdHh0KTsK LQotCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLWVycjoKLSNpZmRlZiBDT05GSUdfVElE U1BCUklER0VfUkVDT1ZFUlkKLQlpZiAoIWF0b21pY19kZWNfcmV0dXJuKCZicmlkZ2VfY3JlZikp Ci0JCWNvbXBsZXRlKCZicmlkZ2VfY29tcCk7Ci0jZW5kaWYKLQlyZXR1cm4gc3RhdHVzOwotfQot Ci0vKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIElPIGludGVyZmFjZSB0byB0aGUgYnJpZGdlIGRy aXZlci4gKi8KLXN0YXRpYyBsb25nIGJyaWRnZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5z aWduZWQgaW50IGNvZGUsCi0JCQkgdW5zaWduZWQgbG9uZyBhcmdzKQotewotCWludCBzdGF0dXM7 Ci0JdTMyIHJldHZhbCA9IDA7Ci0JdW5pb24gdHJhcHBlZF9hcmdzIGJ1Zl9pbjsKLQotI2lmZGVm IENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQotCWlmIChyZWNvdmVyKSB7Ci0JCXN0YXR1cyA9 IC1FSU87Ci0JCWdvdG8gZXJyOwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19QTQotCXN0YXR1 cyA9IG9tYXAzNF94eGJyaWRnZV9zdXNwZW5kX2xvY2tvdXQoJmJyaWRnZV9zdXNwZW5kX2RhdGEs IGZpbHApOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJcmV0dXJuIHN0YXR1czsKLSNlbmRpZgotCi0J aWYgKCFmaWxwLT5wcml2YXRlX2RhdGEpIHsKLQkJc3RhdHVzID0gLUVJTzsKLQkJZ290byBlcnI7 Ci0JfQotCi0Jc3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmJ1Zl9pbiwgKHVuaW9uIHRyYXBwZWRf YXJncyAqKWFyZ3MsCi0JCQkJc2l6ZW9mKHVuaW9uIHRyYXBwZWRfYXJncykpOwotCi0JaWYgKCFz dGF0dXMpIHsKLQkJc3RhdHVzID0gYXBpX2NhbGxfZGV2X2lvY3RsKGNvZGUsICZidWZfaW4sICZy ZXR2YWwsCi0JCQkJCSAgICBmaWxwLT5wcml2YXRlX2RhdGEpOwotCi0JCWlmICghc3RhdHVzKSB7 Ci0JCQlzdGF0dXMgPSByZXR2YWw7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVz OiBJT0NUTCBGYWlsZWQsIGNvZGU6IDB4JXggIgotCQkJCSJzdGF0dXMgMHgleFxuIiwgX19mdW5j X18sIGNvZGUsIHN0YXR1cyk7Ci0JCQlzdGF0dXMgPSAtMTsKLQkJfQotCi0JfQotCi1lcnI6Ci0J cmV0dXJuIHN0YXR1czsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBtYXBzIGtlcm5lbCBzcGFjZSBt ZW1vcnkgdG8gdXNlciBzcGFjZSBtZW1vcnkuICovCi1zdGF0aWMgaW50IGJyaWRnZV9tbWFwKHN0 cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQl1bnNpZ25l ZCBsb25nIGJhc2VfcGdvZmY7Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3Qgb21hcF9kc3BfcGxhdGZv cm1fZGF0YSAqcGRhdGEgPQotCQkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9k YXRhOwotCi0JLyogVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgYXJlIHNldCBi eSByZW1hcF9wZm5fcmFuZ2UoKSAqLwotCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNh Y2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Ci0KLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiB2bSBmaWxw ICVwIHN0YXJ0ICVseCBlbmQgJWx4IHBhZ2VfcHJvdCAldWx4ICIKLQkJImZsYWdzICVseFxuIiwg X19mdW5jX18sIGZpbHAsCi0JCXZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCB2bWEtPnZtX3Bh Z2VfcHJvdCwKLQkJdm1hLT52bV9mbGFncyk7Ci0KLQkvKgotCSAqIHZtX2lvbWFwX21lbW9yeSgp IGV4cGVjdHMgdm1hLT52bV9wZ29mZiB0byBiZSBleHByZXNzZWQgYXMgYW4gb2Zmc2V0Ci0JICog ZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBoeXNpY2FsIG1lbW9yeSBwb29sLCBidXQgd2UncmUgY2Fs bGVkIHdpdGgKLQkgKiBhIHBmbiAocGh5c2ljYWwgcGFnZSBudW1iZXIpIHN0b3JlZCB0aGVyZSBp bnN0ZWFkLgotCSAqCi0JICogVG8gYXZvaWQgZHVwbGljYXRpbmcgbG90cyBvZiB0cmlja3kgb3Zl cmZsb3cgY2hlY2tpbmcgbG9naWMsCi0JICogdGVtcG9yYXJpbHkgY29udmVydCB2bWEtPnZtX3Bn b2ZmIHRvIHRoZSBvZmZzZXQgdm1faW9tYXBfbWVtb3J5KCkKLQkgKiBleHBlY3RzLCBidXQgcmVz dG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb25jZSB0aGUgbWFwcGluZyBoYXMgYmVlbgotCSAqIGNy ZWF0ZWQuCi0JICovCi0JYmFzZV9wZ29mZiA9IHBkYXRhLT5waHlzX21lbXBvb2xfYmFzZSA+PiBQ QUdFX1NISUZUOwotCi0JaWYgKHZtYS0+dm1fcGdvZmYgPCBiYXNlX3Bnb2ZmKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCXZtYS0+dm1fcGdvZmYgLT0gYmFzZV9wZ29mZjsKLQotCXN0YXR1cyA9IHZt X2lvbWFwX21lbW9yeSh2bWEsCi0JCQkJIHBkYXRhLT5waHlzX21lbXBvb2xfYmFzZSwKLQkJCQkg cGRhdGEtPnBoeXNfbWVtcG9vbF9zaXplKTsKLQotCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHZh bHVlIG9mIHZtYS0+dm1fcGdvZmYgKi8KLQl2bWEtPnZtX3Bnb2ZmICs9IGJhc2VfcGdvZmY7Ci0K LQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBicmlkZ2VfZm9wcyA9IHsKLQkub3BlbiA9IGJyaWRnZV9vcGVuLAotCS5yZWxlYXNlID0gYnJp ZGdlX3JlbGVhc2UsCi0JLnVubG9ja2VkX2lvY3RsID0gYnJpZGdlX2lvY3RsLAotCS5tbWFwID0g YnJpZGdlX21tYXAsCi0JLmxsc2VlayA9IG5vb3BfbGxzZWVrLAotfTsKLQotI2lmZGVmIENPTkZJ R19QTQotc3RhdGljIHUzMiB0aW1lX291dCA9IDEwMDA7Ci0jaWZkZWYgQ09ORklHX1RJRFNQQlJJ REdFX0RWRlMKLXMzMiBkc3BfbWF4X29wcHMgPSBWREQxX09QUDU7Ci0jZW5kaWYKLQotLyogTWF4 aW11bSBPcHBzIHRoYXQgY2FuIGJlIHJlcXVlc3RlZCBieSBJVkEgKi8KLS8qdmRkMSByYXRlIHRh YmxlICovCi0jaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKLWNvbnN0IHN0cnVjdCBvbWFw X29wcCB2ZGQxX3JhdGVfdGFibGVfYnJpZGdlW10gPSB7Ci0JezAsIDAsIDB9LAotCS8qT1BQMSAq LwotCXtTMTI1TSwgVkREMV9PUFAxLCAwfSwKLQkvKk9QUDIgKi8KLQl7UzI1ME0sIFZERDFfT1BQ MiwgMH0sCi0JLypPUFAzICovCi0Je1M1MDBNLCBWREQxX09QUDMsIDB9LAotCS8qT1BQNCAqLwot CXtTNTUwTSwgVkREMV9PUFA0LCAwfSwKLQkvKk9QUDUgKi8KLQl7UzYwME0sIFZERDFfT1BQNSwg MH0sCi19OwotI2VuZGlmCi0jZW5kaWYKLQotc3RydWN0IG9tYXBfZHNwX3BsYXRmb3JtX2RhdGEg Km9tYXBfZHNwYnJpZGdlX3BkYXRhOwotCi11MzIgdmRkMV9kc3BfZnJlcVs2XVs0XSA9IHsKLQl7 MCwgMCwgMCwgMH0sCi0JLypPUFAxICovCi0JezAsIDkwMDAwLCAwLCA4NjAwMH0sCi0JLypPUFAy ICovCi0JezAsIDE4MDAwMCwgODAwMDAsIDE3MDAwMH0sCi0JLypPUFAzICovCi0JezAsIDM2MDAw MCwgMTYwMDAwLCAzNDAwMDB9LAotCS8qT1BQNCAqLwotCXswLCAzOTYwMDAsIDMyNTAwMCwgMzc2 MDAwfSwKLQkvKk9QUDUgKi8KLQl7MCwgNDMwMDAwLCAzNTUwMDAsIDQzMDAwMH0sCi19OwotCi0j aWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCi1zdGF0aWMgdm9pZCBicmlkZ2VfcmVj b3ZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRldl9vYmplY3QgKmRl djsKLQlzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlOwotCi0JaWYgKGF0b21pY19yZWFkKCZi cmlkZ2VfY3JlZikpIHsKLQkJcmVpbml0X2NvbXBsZXRpb24oJmJyaWRnZV9jb21wKTsKLQkJd2hp bGUgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmJyaWRnZV9jb21wLAotCQkJCQkJbXNl Y3NfdG9famlmZmllcyhSRUNfVElNRU9VVCkpKQotCQkJcHJfaW5mbygiJXM6JWQgaGFuZGxlKHMp IHN0aWxsIG9wZW5lZFxuIiwKLQkJCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZicmlkZ2VfY3Jl ZikpOwotCX0KLQlkZXYgPSBkZXZfZ2V0X2ZpcnN0KCk7Ci0JZGV2X2dldF9kZXZfbm9kZShkZXYs ICZkZXZfbm9kZSk7Ci0JaWYgKCFkZXZfbm9kZSB8fCBwcm9jX2F1dG9fc3RhcnQoZGV2X25vZGUs IGRldikpCi0JCXByX2VycigiRFNQIGNvdWxkIG5vdCBiZSByZXN0YXJ0ZWRcbiIpOwotCXJlY292 ZXIgPSBmYWxzZTsKLQljb21wbGV0ZV9hbGwoJmJyaWRnZV9vcGVuX2NvbXApOwotfQotCi12b2lk IGJyaWRnZV9yZWNvdmVyX3NjaGVkdWxlKHZvaWQpCi17Ci0JcmVpbml0X2NvbXBsZXRpb24oJmJy aWRnZV9vcGVuX2NvbXApOwotCXJlY292ZXIgPSB0cnVlOwotCXF1ZXVlX3dvcmsoYnJpZGdlX3Jl Y19xdWV1ZSwgJmJyaWRnZV9yZWNvdmVyeV93b3JrKTsKLX0KLSNlbmRpZgotI2lmZGVmIENPTkZJ R19USURTUEJSSURHRV9EVkZTCi1zdGF0aWMgaW50IGRzcGJyaWRnZV9zY2FsZV9ub3RpZmljYXRp b24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpvcCwKLQkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZv aWQgKnB0cikKLXsKLQlzdHJ1Y3Qgb21hcF9kc3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQotCSAg ICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0JaWYgKENQVUZSRVFf UE9TVENIQU5HRSA9PSB2YWwgJiYgcGRhdGEtPmRzcF9nZXRfb3BwKQotCQlwd3JfcG1fcG9zdF9z Y2FsZShQUkNNX1ZERDEsIHBkYXRhLT5kc3BfZ2V0X29wcCgpKTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGl2YV9jbGtfbm90aWZpZXIgPSB7Ci0JLm5v dGlmaWVyX2NhbGwgPSBkc3BicmlkZ2Vfc2NhbGVfbm90aWZpY2F0aW9uLAotCU5VTEwsCi19Owot I2VuZGlmCi0KLS8qKgotICogb21hcDNfYnJpZGdlX3N0YXJ0dXAoKSAtIHBlcmZvcm0gbG93IGxl dmVyIGluaXRpYWxpemF0aW9ucwotICogQHBkZXY6ICAgICAgcG9pbnRlciB0byBwbGF0Zm9ybSBk ZXZpY2UKLSAqCi0gKiBJbml0aWFsaXplcyByZWNvdmVyeSwgUE0gYW5kIERWRlMgcmVxdWlyZWQg ZGF0YSwgYmVmb3JlIGNhbGxpbmcKLSAqIGNsayBhbmQgbWVtb3J5IGluaXQgcm91dGluZXMuCi0g Ki8KLXN0YXRpYyBpbnQgb21hcDNfYnJpZGdlX3N0YXJ0dXAoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKLXsKLQlzdHJ1Y3Qgb21hcF9kc3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2 LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IE5VTEw7 Ci0JdTMyIHBoeXNfbWVtYmFzZSwgcGh5c19tZW1zaXplOwotCWludCBlcnI7Ci0KLSNpZmRlZiBD T05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKLQlicmlkZ2VfcmVjX3F1ZXVlID0gY3JlYXRlX3dv cmtxdWV1ZSgiYnJpZGdlX3JlY19xdWV1ZSIpOwotCUlOSVRfV09SSygmYnJpZGdlX3JlY292ZXJ5 X3dvcmssIGJyaWRnZV9yZWNvdmVyKTsKLQlyZWluaXRfY29tcGxldGlvbigmYnJpZGdlX2NvbXAp OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUE0KLQkvKiBJbml0aWFsaXplIHRoZSB3YWl0IHF1 ZXVlICovCi0JYnJpZGdlX3N1c3BlbmRfZGF0YS5zdXNwZW5kZWQgPSAwOwotCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJmJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZF93cSk7Ci0KLSNpZmRlZiBDT05G SUdfVElEU1BCUklER0VfRFZGUwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCXBkYXRhLT5t cHVfc3BlZWRbaV0gPSB2ZGQxX3JhdGVfdGFibGVfYnJpZGdlW2ldLnJhdGU7Ci0KLQllcnIgPSBj cHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZpdmFfY2xrX25vdGlmaWVyLAotCQkJCQlDUFVGUkVR X1RSQU5TSVRJT05fTk9USUZJRVIpOwotCWlmIChlcnIpCi0JCXByX2VycigiJXM6IGNsa19ub3Rp Zmllcl9yZWdpc3RlciBmYWlsZWQgZm9yIGl2YTJfY2tcbiIsCi0JCQkJCQkJCV9fZnVuY19fKTsK LSNlbmRpZgotI2VuZGlmCi0KLQlkc3BfY2xrX2luaXQoKTsKLQotCWRydl9kYXRhcCA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBkcnZfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZHJ2X2RhdGFw KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQlkcnZfZGF0YXAtPnNo bV9zaXplID0gc2htX3NpemU7Ci0JZHJ2X2RhdGFwLT50Y193b3Jkc3dhcG9uID0gdGNfd29yZHN3 YXBvbjsKLQotCWlmIChiYXNlX2ltZykgewotCQlkcnZfZGF0YXAtPmJhc2VfaW1nID0ga3N0cmR1 cChiYXNlX2ltZywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZHJ2X2RhdGFwLT5iYXNlX2ltZykgewot CQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyMjsKLQkJfQotCX0KLQotCWRldl9zZXRfZHJ2 ZGF0YShicmlkZ2UsIGRydl9kYXRhcCk7Ci0KLQlpZiAoc2htX3NpemUgPCAweDEwMDAwKSB7CS8q IDY0IEtCICovCi0JCWVyciA9IC1FSU5WQUw7Ci0JCXByX2VycigiJXM6IHNobSBzaXplIG11c3Qg YmUgYXQgbGVhc3QgNjQgS0JcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnIzOwotCX0KLQlkZXZf ZGJnKGJyaWRnZSwgIiVzOiByZXF1ZXN0ZWQgc2htX3NpemUgPSAweCV4XG4iLCBfX2Z1bmNfXywg c2htX3NpemUpOwotCi0JcGh5c19tZW1iYXNlID0gcGRhdGEtPnBoeXNfbWVtcG9vbF9iYXNlOwot CXBoeXNfbWVtc2l6ZSA9IHBkYXRhLT5waHlzX21lbXBvb2xfc2l6ZTsKLQlpZiAocGh5c19tZW1i YXNlID4gMCAmJiBwaHlzX21lbXNpemUgPiAwKQotCQltZW1fZXh0X3BoeXNfcG9vbF9pbml0KHBo eXNfbWVtYmFzZSwgcGh5c19tZW1zaXplKTsKLQotCWlmICh0Y193b3Jkc3dhcG9uKQotCQlkZXZf ZGJnKGJyaWRnZSwgIiVzOiBUQyBXb3JkIFN3YXAgaXMgZW5hYmxlZFxuIiwgX19mdW5jX18pOwot Ci0JZHJpdmVyX2NvbnRleHQgPSBkc3BfaW5pdCgmZXJyKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2Vy cigiRFNQIEJyaWRnZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBl cnI0OwotCX0KLQotCXJldHVybiAwOwotCi1lcnI0OgotCW1lbV9leHRfcGh5c19wb29sX3JlbGVh c2UoKTsKLWVycjM6Ci0Ja2ZyZWUoZHJ2X2RhdGFwLT5iYXNlX2ltZyk7Ci1lcnIyOgotCWtmcmVl KGRydl9kYXRhcCk7Ci1lcnIxOgotI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCi0JY3B1 ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZpdmFfY2xrX25vdGlmaWVyLAotCQkJCSAgICBDUFVG UkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwotI2VuZGlmCi0JZHNwX2Nsa19leGl0KCk7Ci0KLQly ZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9tYXAzNF94eF9icmlkZ2VfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgZXJyOwotCWRldl90IGRldiA9IDA7Ci0j aWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKLQlpbnQgaSA9IDA7Ci0jZW5kaWYKLQotCW9t YXBfZHNwYnJpZGdlX2RldiA9IHBkZXY7Ci0KLQkvKiBHbG9iYWwgYnJpZGdlIGRldmljZSAqLwot CWJyaWRnZSA9ICZvbWFwX2RzcGJyaWRnZV9kZXYtPmRldjsKLQotCS8qIEJyaWRnZSBsb3cgbGV2 ZWwgaW5pdGlhbGl6YXRpb25zICovCi0JZXJyID0gb21hcDNfYnJpZGdlX3N0YXJ0dXAocGRldik7 Ci0JaWYgKGVycikKLQkJZ290byBlcnIxOwotCi0JLyogdXNlIDIuNiBkZXZpY2UgbW9kZWwgKi8K LQllcnIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIDEsICJEc3BCcmlkZ2UiKTsKLQlp ZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IENhbid0IGdldCBtYWpvciAlZFxuIiwgX19mdW5jX18s IGRyaXZlcl9tYWpvcik7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQljZGV2X2luaXQoJmJyaWRnZV9j ZGV2LCAmYnJpZGdlX2ZvcHMpOwotCWJyaWRnZV9jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7Ci0K LQllcnIgPSBjZGV2X2FkZCgmYnJpZGdlX2NkZXYsIGRldiwgMSk7Ci0JaWYgKGVycikgewotCQlw cl9lcnIoIiVzOiBGYWlsZWQgdG8gYWRkIGJyaWRnZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKLQkJ Z290byBlcnIyOwotCX0KLQotCS8qIHVkZXYgc3VwcG9ydCAqLwotCWJyaWRnZV9jbGFzcyA9IGNs YXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInRpX2JyaWRnZSIpOwotCWlmIChJU19FUlIoYnJpZGdl X2NsYXNzKSkgewotCQlwcl9lcnIoIiVzOiBFcnJvciBjcmVhdGluZyBicmlkZ2UgY2xhc3NcbiIs IF9fZnVuY19fKTsKLQkJZXJyID0gUFRSX0VSUihicmlkZ2VfY2xhc3MpOwotCQlnb3RvIGVycjM7 Ci0JfQotCi0JZHJpdmVyX21ham9yID0gTUFKT1IoZGV2KTsKLQlkZXZpY2VfY3JlYXRlKGJyaWRn ZV9jbGFzcywgTlVMTCwgTUtERVYoZHJpdmVyX21ham9yLCAwKSwKLQkJICAgICAgTlVMTCwgIkRz cEJyaWRnZSIpOwotCXByX2luZm8oIkRTUCBCcmlkZ2UgZHJpdmVyIGxvYWRlZFxuIik7Ci0KLQly ZXR1cm4gMDsKLQotZXJyMzoKLQljZGV2X2RlbCgmYnJpZGdlX2NkZXYpOwotZXJyMjoKLQl1bnJl Z2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCAxKTsKLWVycjE6Ci0JcmV0dXJuIGVycjsKLX0KLQot c3RhdGljIGludCBvbWFwMzRfeHhfYnJpZGdlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQotewotCWRldl90IGRldm5vOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkcnZf ZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0KLQkvKiBSZXRyaWV2 ZSB0aGUgT2JqZWN0IGhhbmRsZSBmcm9tIHRoZSBkcml2ZXIgZGF0YSAqLwotCWlmICghZHJ2X2Rh dGFwIHx8ICFkcnZfZGF0YXAtPmRydl9vYmplY3QpIHsKLQkJc3RhdHVzID0gLUVOT0RBVEE7Ci0J CXByX2VycigiJXM6IEZhaWxlZCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IGhhbmRsZVxuIiwgX19m dW5jX18pOwotCQlnb3RvIGZ1bmNfY29udDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfVElEU1BCUklE R0VfRFZGUwotCWlmIChjcHVmcmVxX3VucmVnaXN0ZXJfbm90aWZpZXIoJml2YV9jbGtfbm90aWZp ZXIsCi0JCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUikpCi0JCXByX2VycigiJXM6IGNw dWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllciBmYWlsZWQgZm9yIGl2YTJfY2tcbiIsCi0JCSAgICAg ICBfX2Z1bmNfXyk7Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTICov Ci0KLQlpZiAoZHJpdmVyX2NvbnRleHQpIHsKLQkJLyogUHV0IHRoZSBEU1AgaW4gcmVzZXQgc3Rh dGUgKi8KLQkJZHNwX2RlaW5pdChkcml2ZXJfY29udGV4dCk7Ci0JCWRyaXZlcl9jb250ZXh0ID0g MDsKLQl9Ci0KLQlrZnJlZShkcnZfZGF0YXApOwotCWRldl9zZXRfZHJ2ZGF0YShicmlkZ2UsIE5V TEwpOwotCi1mdW5jX2NvbnQ6Ci0JbWVtX2V4dF9waHlzX3Bvb2xfcmVsZWFzZSgpOwotCi0JZHNw X2Nsa19leGl0KCk7Ci0KLQlkZXZubyA9IE1LREVWKGRyaXZlcl9tYWpvciwgMCk7Ci0JY2Rldl9k ZWwoJmJyaWRnZV9jZGV2KTsKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2bm8sIDEpOwot CWlmIChicmlkZ2VfY2xhc3MpIHsKLQkJLyogcmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSBzeXNmcyAq LwotCQlkZXZpY2VfZGVzdHJveShicmlkZ2VfY2xhc3MsIE1LREVWKGRyaXZlcl9tYWpvciwgMCkp OwotCQljbGFzc19kZXN0cm95KGJyaWRnZV9jbGFzcyk7Ci0KLQl9Ci0JcmV0dXJuIHN0YXR1czsK LX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBicmlkZ2Vfc3VzcGVuZChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdTMyIHN0YXR1 czsKLQl1MzIgY29tbWFuZCA9IFBXUl9FTUVSR0VOQ1lERUVQU0xFRVA7Ci0KLQlzdGF0dXMgPSBw d3Jfc2xlZXBfZHNwKGNvbW1hbmQsIHRpbWVfb3V0KTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4g LTE7Ci0KLQlicmlkZ2Vfc3VzcGVuZF9kYXRhLnN1c3BlbmRlZCA9IDE7Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgYnJpZGdlX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQotewotCXUzMiBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBwd3Jfd2FrZV9kc3AodGltZV9vdXQpOwot CWlmIChzdGF0dXMpCi0JCXJldHVybiAtMTsKLQotCWJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVu ZGVkID0gMDsKLQl3YWtlX3VwKCZicmlkZ2Vfc3VzcGVuZF9kYXRhLnN1c3BlbmRfd3EpOwotCXJl dHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyaWRn ZV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSAib21hcC1kc3AiLAotCQkg ICB9LAotCS5wcm9iZSA9IG9tYXAzNF94eF9icmlkZ2VfcHJvYmUsCi0JLnJlbW92ZSA9IG9tYXAz NF94eF9icmlkZ2VfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kID0gYnJpZGdl X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGJyaWRnZV9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLS8qIFRv IHJlbW92ZSBhbGwgcHJvY2VzcyByZXNvdXJjZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBwcm9jZXNz IGZyb20gdGhlCi0gKiBwcm9jZXNzIGNvbnRleHQgbGlzdCAqLwotaW50IGRydl9yZW1vdmVfYWxs X3Jlc291cmNlcyh2b2lkICpwcm9jZXNzX2N0eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3Ry dWN0IHByb2Nlc3NfY29udGV4dCAqY3R4dCA9IChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJv Y2Vzc19jdHh0OwotCi0JZHJ2X3JlbW92ZV9hbGxfc3RybV9yZXNfZWxlbWVudHMoY3R4dCk7Ci0J ZHJ2X3JlbW92ZV9hbGxfbm9kZV9yZXNfZWxlbWVudHMoY3R4dCk7Ci0JZHJ2X3JlbW92ZV9hbGxf ZG1tX3Jlc19lbGVtZW50cyhjdHh0KTsKLQljdHh0LT5yZXNfc3RhdGUgPSBQUk9DX1JFU19GUkVF RDsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJyaWRnZV9k cml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNw ZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kc3BkcnYuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEyZTRhMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kc3BkcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSAr MCwwIEBACi0vKgotICogZHNwZHJ2LmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1 cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogSW50ZXJmYWNl IHRvIGFsbG9jYXRlIGFuZCBmcmVlIGJyaWRnZSByZXNvdXJjZXMuCi0gKgotICogQ29weXJpZ2h0 IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHBhY2th Z2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhP VVQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRI T1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotLyogIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KLSNpbmNs dWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwYXBp Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBN YW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL21nci5oPgotCi0vKiAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Bk cnYuaD4KLQotLyoKLSAqICA9PT09PT09PSBkc3BfaW5pdCA9PT09PT09PQotICogIEFsbG9jYXRl cyBicmlkZ2UgcmVzb3VyY2VzLiBMb2FkcyBhIGJhc2UgaW1hZ2Ugb250byBEU1AsIGlmIHNwZWNp ZmllZC4KLSAqLwotdTMyIGRzcF9pbml0KHUzMiAqaW5pdF9zdGF0dXMpCi17Ci0JY2hhciBkZXZf bm9kZVtNQVhSRUdQQVRITEVOR1RIXSA9ICJUSU9NQVAxNTEwIjsKLQlpbnQgc3RhdHVzID0gLUVQ RVJNOwotCXN0cnVjdCBkcnZfb2JqZWN0ICpkcnZfb2JqID0gTlVMTDsKLQl1MzIgZGV2aWNlX25v ZGU7Ci0JdTMyIGRldmljZV9ub2RlX3N0cmluZzsKLQotCWlmICghYXBpX2luaXQoKSkKLQkJZ290 byBmdW5jX2NvbnQ7Ci0KLQlzdGF0dXMgPSBkcnZfY3JlYXRlKCZkcnZfb2JqKTsKLQlpZiAoc3Rh dHVzKSB7Ci0JCWFwaV9leGl0KCk7Ci0JCWdvdG8gZnVuY19jb250OwotCX0KLQotCS8qIEVuZCBk cnZfY3JlYXRlICovCi0JLyogUmVxdWVzdCBSZXNvdXJjZXMgKi8KLQlzdGF0dXMgPSBkcnZfcmVx dWVzdF9yZXNvdXJjZXMoKHUzMikgJmRldl9ub2RlLCAmZGV2aWNlX25vZGVfc3RyaW5nKTsKLQlp ZiAoIXN0YXR1cykgewotCQkvKiBBdHRlbXB0IHRvIFN0YXJ0IHRoZSBEZXZpY2UgKi8KLQkJc3Rh dHVzID0gZGV2X3N0YXJ0X2RldmljZSgoc3RydWN0IGNmZ19kZXZub2RlICopCi0JCQkJCSAgZGV2 aWNlX25vZGVfc3RyaW5nKTsKLQkJaWYgKHN0YXR1cykKLQkJCSh2b2lkKWRydl9yZWxlYXNlX3Jl c291cmNlcwotCQkJICAgICgodTMyKSBkZXZpY2Vfbm9kZV9zdHJpbmcsIGRydl9vYmopOwotCX0g ZWxzZSB7Ci0JCWRldl9kYmcoYnJpZGdlLCAiJXM6IGRydl9yZXF1ZXN0X3Jlc291cmNlcyBGYWls ZWRcbiIsIF9fZnVuY19fKTsKLQkJc3RhdHVzID0gLUVQRVJNOwotCX0KLQotCS8qIFVud2luZCB3 aGF0ZXZlciB3YXMgbG9hZGVkICovCi0JaWYgKHN0YXR1cykgewotCQkvKiBpcnJlc3BlY3RpdmUg b2YgdGhlIHN0YXR1cyBvZiBkZXZfcmVtb3ZlX2RldmljZSB3ZSBjb250aW51ZQotCQkgKiB1bmxv YWRpbmcuIEdldCB0aGUgRHJpdmVyIE9iamVjdCBpdGVyYXRlIHRocm91Z2ggYW5kIHJlbW92ZS4K LQkJICogUmVzZXQgdGhlIHN0YXR1cyB0byBFX0ZBSUwgdG8gYXZvaWQgZ29pbmcgdGhyb3VnaAot CQkgKiBhcGlfaW5pdF9jb21wbGV0ZTIuICovCi0JCWZvciAoZGV2aWNlX25vZGUgPSBkcnZfZ2V0 X2ZpcnN0X2Rldl9leHRlbnNpb24oKTsKLQkJICAgICBkZXZpY2Vfbm9kZSAhPSAwOwotCQkgICAg IGRldmljZV9ub2RlID0gZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24oZGV2aWNlX25vZGUpKSB7 Ci0JCQkodm9pZClkZXZfcmVtb3ZlX2RldmljZSgoc3RydWN0IGNmZ19kZXZub2RlICopCi0JCQkJ CQlkZXZpY2Vfbm9kZSk7Ci0JCQkodm9pZClkcnZfcmVsZWFzZV9yZXNvdXJjZXMoKHUzMikgZGV2 aWNlX25vZGUsIGRydl9vYmopOwotCQl9Ci0JCS8qIFJlbW92ZSB0aGUgRHJpdmVyIE9iamVjdCAq LwotCQkodm9pZClkcnZfZGVzdHJveShkcnZfb2JqKTsKLQkJZHJ2X29iaiA9IE5VTEw7Ci0JCWFw aV9leGl0KCk7Ci0JCWRldl9kYmcoYnJpZGdlLCAiJXM6IExvZ2ljYWwgZGV2aWNlIGZhaWxlZCBp bml0XG4iLCBfX2Z1bmNfXyk7Ci0JfQkJCS8qIFVud2luZGluZyB0aGUgbG9hZGVkIGRyaXZlcnMg Ki8KLWZ1bmNfY29udDoKLQkvKiBBdHRlbXB0IHRvIFN0YXJ0IHRoZSBCb2FyZCAqLwotCWlmICgh c3RhdHVzKSB7Ci0JCS8qIEJSRF9BdXRvU3RhcnQgY291bGQgZmFpbCBpZiB0aGUgZHNwIGV4ZWN1 dGFibGUgaXMgbm90IHRoZQotCQkgKiBjb3JyZWN0IG9uZS4gV2Ugc2hvdWxkIG5vdCBwcm9wYWdh dGUgdGhhdCBlcnJvcgotCQkgKiBpbnRvIHRoZSBkZXZpY2UgbG9hZGVyLiAqLwotCQkodm9pZClh cGlfaW5pdF9jb21wbGV0ZTIoKTsKLQl9IGVsc2UgewotCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBG YWlsZWRcbiIsIF9fZnVuY19fKTsKLQl9CQkJLyogRW5kIGFwaV9pbml0X2NvbXBsZXRlMiAqLwot CSppbml0X3N0YXR1cyA9IHN0YXR1czsKLQkvKiBSZXR1cm4gdGhlIERyaXZlciBPYmplY3QgKi8K LQlyZXR1cm4gKHUzMikgZHJ2X29iajsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkc3BfZGVpbml0 ID09PT09PT09Ci0gKiAgRnJlZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGJyaWRnZS4K LSAqLwotYm9vbCBkc3BfZGVpbml0KHUzMiBkZXZpY2VfY29udGV4dCkKLXsKLQlib29sIHJldCA9 IHRydWU7Ci0JdTMyIGRldmljZV9ub2RlOwotCXN0cnVjdCBtZ3Jfb2JqZWN0ICptZ3Jfb2JqID0g TlVMTDsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlk Z2UpOwotCi0Jd2hpbGUgKChkZXZpY2Vfbm9kZSA9IGRydl9nZXRfZmlyc3RfZGV2X2V4dGVuc2lv bigpKSAhPSAwKSB7Ci0JCSh2b2lkKWRldl9yZW1vdmVfZGV2aWNlKChzdHJ1Y3QgY2ZnX2Rldm5v ZGUgKilkZXZpY2Vfbm9kZSk7Ci0KLQkJKHZvaWQpZHJ2X3JlbGVhc2VfcmVzb3VyY2VzKCh1MzIp IGRldmljZV9ub2RlLAotCQkJCQkoc3RydWN0IGRydl9vYmplY3QgKilkZXZpY2VfY29udGV4dCk7 Ci0JfQotCi0JKHZvaWQpZHJ2X2Rlc3Ryb3koKHN0cnVjdCBkcnZfb2JqZWN0ICopZGV2aWNlX2Nv bnRleHQpOwotCi0JLyogR2V0IHRoZSBNYW5hZ2VyIE9iamVjdCBmcm9tIGRyaXZlciBkYXRhCi0J ICogTUdSIERlc3Ryb3kgd2lsbCB1bmxvYWQgdGhlIERDRCBkbGwgKi8KLQlpZiAoZHJ2X2RhdGFw ICYmIGRydl9kYXRhcC0+bWdyX29iamVjdCkgewotCQltZ3Jfb2JqID0gZHJ2X2RhdGFwLT5tZ3Jf b2JqZWN0OwotCQkodm9pZCltZ3JfZGVzdHJveShtZ3Jfb2JqKTsKLQl9IGVsc2UgewotCQlwcl9l cnIoIiVzOiBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIG9iamVjdCBoYW5kbGVcbiIsIF9fZnVuY19f KTsKLQl9Ci0KLQlhcGlfZXhpdCgpOwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Rp ZHNwYnJpZGdlL3JtZ3IvbWdyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTYy ODIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvbWdyLmMK KysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoKLSAqIG1nci5jCi0gKgotICogRFNQ LUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNz b3JzLgotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mIE1hbmFnZXIgaW50ZXJmYWNlIHRvIHRoZSBk ZXZpY2Ugb2JqZWN0IGF0IHRoZQotICogZHJpdmVyIGxldmVsLiBUaGlzIHF1ZXJpZXMgdGhlIE5E QiBkYXRhIGJhc2UgYW5kIHJldHJpZXZlcyB0aGUKLSAqIGRhdGEgYWJvdXQgTm9kZSBhbmQgUHJv Y2Vzc29yLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRz LCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJP VklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICog V0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLwotI2luY2x1ZGUgPGRzcGJy aWRnZS9ob3N0X29zLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBEU1AvQklPUyBCcmlkZ2UgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+Ci0KLS8q ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVy ICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+ Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCi0jaW5j bHVkZSA8ZHNwYnJpZGdlL21nci5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLwotI2RlZmluZSBa TERMTE5BTUUgICAgICAgICAgICAgICAiIgotCi1zdHJ1Y3QgbWdyX29iamVjdCB7Ci0Jc3RydWN0 IGRjZF9tYW5hZ2VyICpkY2RfbWdyOwkvKiBQcm9jL05vZGUgZGF0YSBtYW5hZ2VyICovCi19Owot Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLwotc3Rh dGljIHUzMiByZWZzOwotCi0vKgotICogID09PT09PT09PSBtZ3JfY3JlYXRlID09PT09PT09PQot ICogIFB1cnBvc2U6Ci0gKiAgICAgIE1HUiBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBk dXJpbmcgZHJpdmVyIExvYWRpbmcuCi0gKi8KLWludCBtZ3JfY3JlYXRlKHN0cnVjdCBtZ3Jfb2Jq ZWN0ICoqbWdyX29iaiwKLQkJICAgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmop Ci17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVM TDsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2Up OwotCi0JcG1ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWdyX29iamVjdCksIEdGUF9L RVJORUwpOwotCWlmIChwbWdyX29iaikgewotCQlzdGF0dXMgPSBkY2RfY3JlYXRlX21hbmFnZXIo WkxETExOQU1FLCAmcG1ncl9vYmotPmRjZF9tZ3IpOwotCQlpZiAoIXN0YXR1cykgewotCQkJLyog SWYgc3VjY2VlZGVkIHN0b3JlIHRoZSBoYW5kbGUgaW4gdGhlIE1HUiBPYmplY3QgKi8KLQkJCWlm IChkcnZfZGF0YXApIHsKLQkJCQlkcnZfZGF0YXAtPm1ncl9vYmplY3QgPSAodm9pZCAqKXBtZ3Jf b2JqOwotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSAtRVBFUk07Ci0JCQkJcHJfZXJyKCIlczog RmFpbGVkIHRvIHN0b3JlIE1HUiBvYmplY3RcbiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJCX0K LQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQkqbWdyX29iaiA9IHBtZ3Jfb2JqOwotCQkJfSBlbHNl IHsKLQkJCQlkY2RfZGVzdHJveV9tYW5hZ2VyKHBtZ3Jfb2JqLT5kY2RfbWdyKTsKLQkJCQlrZnJl ZShwbWdyX29iaik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBmYWlsZWQgdG8gQ3JlYXRlIERD RCBNYW5hZ2VyICovCi0JCQlrZnJlZShwbWdyX29iaik7Ci0JCX0KLQl9IGVsc2UgewotCQlzdGF0 dXMgPSAtRU5PTUVNOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT09IG1ncl9kZXN0cm95ID09PT09PT09PQotICogICAgIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tl ZCBkdXJpbmcgYnJpZGdlIGRyaXZlciB1bmxvYWRpbmcuRnJlZXMgTUdSIG9iamVjdC4KLSAqLwot aW50IG1ncl9kZXN0cm95KHN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaikKLXsKLQlpbnQgc3Rh dHVzID0gMDsKLQlzdHJ1Y3QgbWdyX29iamVjdCAqcG1ncl9vYmogPSAoc3RydWN0IG1ncl9vYmpl Y3QgKilobWdyX29iajsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2 ZGF0YShicmlkZ2UpOwotCi0JLyogRnJlZSByZXNvdXJjZXMgKi8KLQlpZiAoaG1ncl9vYmotPmRj ZF9tZ3IpCi0JCWRjZF9kZXN0cm95X21hbmFnZXIoaG1ncl9vYmotPmRjZF9tZ3IpOwotCi0Ja2Zy ZWUocG1ncl9vYmopOwotCS8qIFVwZGF0ZSB0aGUgZHJpdmVyIGRhdGEgd2l0aCBOVUxMIGZvciBN R1IgT2JqZWN0ICovCi0JaWYgKGRydl9kYXRhcCkgewotCQlkcnZfZGF0YXAtPm1ncl9vYmplY3Qg PSBOVUxMOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJcHJfZXJyKCIlczogRmFp bGVkIHRvIHN0b3JlIE1HUiBvYmplY3RcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQlyZXR1cm4gc3Rh dHVzOwotfQotCi0vKgotICogID09PT09PT09IG1ncl9lbnVtX25vZGVfaW5mbyA9PT09PT09PQot ICogICAgICBFbnVtZXJhdGUgYW5kIGdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0 IG5vZGVzIGNvbmZpZ3VyZWQKLSAqICAgICAgaW4gdGhlIG5vZGUgZGF0YWJhc2UuCi0gKi8KLWlu dCBtZ3JfZW51bV9ub2RlX2luZm8odTMyIG5vZGVfaWQsIHN0cnVjdCBkc3BfbmRicHJvcHMgKnBu ZGJfcHJvcHMsCi0JCQkgICAgICB1MzIgdW5kYl9wcm9wc19zaXplLCB1MzIgKnB1X251bV9ub2Rl cykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZHNwX3V1aWQgbm9kZV91dWlkOwotCXUz MiBub2RlX2luZGV4ID0gMDsKLQlzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogZ2VuX29iajsKLQlzdHJ1 Y3QgbWdyX29iamVjdCAqcG1ncl9vYmogPSBOVUxMOwotCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2Rh dGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7Ci0KLQkqcHVfbnVtX25vZGVzID0gMDsKLQkv KiBHZXQgdGhlIE1hbmFnZXIgT2JqZWN0IGZyb20gdGhlIGRyaXZlciBkYXRhICovCi0JaWYgKCFk cnZfZGF0YXAgfHwgIWRydl9kYXRhcC0+bWdyX29iamVjdCkgewotCQlwcl9lcnIoIiVzOiBGYWls ZWQgdG8gcmV0cmlldmUgdGhlIG9iamVjdCBoYW5kbGVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJu IC1FTk9EQVRBOwotCX0KLQlwbWdyX29iaiA9IGRydl9kYXRhcC0+bWdyX29iamVjdDsKLQotCS8q IEZvcmV2ZXIgbG9vcCB0aWxsIHdlIGhpdCBmYWlsZWQgb3Igbm8gbW9yZSBpdGVtcyBpbiB0aGUK LQkgKiBFbnVtZXJhdGlvbi4gV2Ugd2lsbCBleGl0IHRoZSBsb29wIG90aGVyIHRoYW4gMDsgKi8K LQl3aGlsZSAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBkY2RfZW51bWVyYXRlX29iamVjdChub2Rl X2luZGV4KyssIERTUF9EQ0ROT0RFVFlQRSwKLQkJCQkmbm9kZV91dWlkKTsKLQkJaWYgKHN0YXR1 cykKLQkJCWJyZWFrOwotCQkqcHVfbnVtX25vZGVzID0gbm9kZV9pbmRleDsKLQkJaWYgKG5vZGVf aWQgPT0gKG5vZGVfaW5kZXggLSAxKSkgewotCQkJc3RhdHVzID0gZGNkX2dldF9vYmplY3RfZGVm KHBtZ3Jfb2JqLT5kY2RfbWdyLAotCQkJCQkmbm9kZV91dWlkLCBEU1BfRENETk9ERVRZUEUsICZn ZW5fb2JqKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJYnJlYWs7Ci0JCQkvKiBHZXQgdGhlIE9iaiBk ZWYgKi8KLQkJCSpwbmRiX3Byb3BzID0gZ2VuX29iai5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJv cHM7Ci0JCX0KLQl9Ci0KLQkvKiB0aGUgbGFzdCBzdGF0dXMgaXMgbm90IDAsIGJ1dCBuZWl0aGVy IGFuIGVycm9yICovCi0JaWYgKHN0YXR1cyA+IDApCi0JCXN0YXR1cyA9IDA7Ci0KLQlyZXR1cm4g c3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvID09 PT09PT09Ci0gKiAgICAgIEVudW1lcmF0ZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp b24gYWJvdXQgYXZhaWxhYmxlCi0gKiAgICAgIERTUCBwcm9jZXNzb3JzLgotICovCi1pbnQgbWdy X2VudW1fcHJvY2Vzc29yX2luZm8odTMyIHByb2Nlc3Nvcl9pZCwKLQkJCQkgICBzdHJ1Y3QgZHNw X3Byb2Nlc3NvcmluZm8gKgotCQkJCSAgIHByb2Nlc3Nvcl9pbmZvLCB1MzIgcHJvY2Vzc29yX2lu Zm9fc2l6ZSwKLQkJCQkgICB1OCAqcHVfbnVtX3Byb2NzKQotewotCWludCBzdGF0dXMgPSAwOwot CWludCBzdGF0dXMxID0gMDsKLQlpbnQgc3RhdHVzMiA9IDA7Ci0Jc3RydWN0IGRzcF91dWlkIHRl bXBfdXVpZDsKLQl1MzIgdGVtcF9pbmRleCA9IDA7Ci0JdTMyIHByb2NfaW5kZXggPSAwOwotCXN0 cnVjdCBkY2RfZ2VuZXJpY29iaiBnZW5fb2JqOwotCXN0cnVjdCBtZ3Jfb2JqZWN0ICpwbWdyX29i aiA9IE5VTEw7Ci0Jc3RydWN0IG1ncl9wcm9jZXNzb3JleHRpbmZvICpleHRfaW5mbzsKLQlzdHJ1 Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7Ci0Jc3RydWN0IGRydl9vYmplY3QgKmhkcnZfb2JqOwot CXU4IGRldl90eXBlOwotCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGU7Ci0Jc3RydWN0IGRy dl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKLQlib29sIHByb2Nf ZGV0ZWN0ID0gZmFsc2U7Ci0KLQkqcHVfbnVtX3Byb2NzID0gMDsKLQotCS8qIFJldHJpZXZlIHRo ZSBPYmplY3QgaGFuZGxlIGZyb20gdGhlIGRyaXZlciBkYXRhICovCi0JaWYgKCFkcnZfZGF0YXAg fHwgIWRydl9kYXRhcC0+ZHJ2X29iamVjdCkgewotCQlzdGF0dXMgPSAtRU5PREFUQTsKLQkJcHJf ZXJyKCIlczogRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBvYmplY3QgaGFuZGxlXG4iLCBfX2Z1bmNf Xyk7Ci0JfSBlbHNlIHsKLQkJaGRydl9vYmogPSBkcnZfZGF0YXAtPmRydl9vYmplY3Q7Ci0JfQot Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gZHJ2X2dldF9kZXZfb2JqZWN0KHByb2Nlc3Nv cl9pZCwgaGRydl9vYmosICZoZGV2X29iaik7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlzdGF0dXMg PSBkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAodTggKikgJmRldl90eXBlKTsKLQkJCXN0YXR1 cyA9IGRldl9nZXRfZGV2X25vZGUoaGRldl9vYmosICZkZXZfbm9kZSk7Ci0JCQlpZiAoZGV2X3R5 cGUgIT0gRFNQX1VOSVQpCi0JCQkJc3RhdHVzID0gLUVQRVJNOwotCi0JCQlpZiAoIXN0YXR1cykK LQkJCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7Ci0JCX0KLQl9 Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCS8qIEdldCBUaGUgTWFuYWdlciBP YmplY3QgZnJvbSB0aGUgZHJpdmVyIGRhdGEgKi8KLQlpZiAoZHJ2X2RhdGFwICYmIGRydl9kYXRh cC0+bWdyX29iamVjdCkgewotCQlwbWdyX29iaiA9IGRydl9kYXRhcC0+bWdyX29iamVjdDsKLQl9 IGVsc2UgewotCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IE1HUiBPYmplY3Rc biIsIF9fZnVuY19fKTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JLyogRm9yZXZlciBsb29wIHRp bGwgd2UgaGl0IG5vIG1vcmUgaXRlbXMgaW4gdGhlCi0JICogRW51bWVyYXRpb24uIFdlIHdpbGwg ZXhpdCB0aGUgbG9vcCBvdGhlciB0aGFuIDA7ICovCi0Jd2hpbGUgKHN0YXR1czEgPT0gMCkgewot CQlzdGF0dXMxID0gZGNkX2VudW1lcmF0ZV9vYmplY3QodGVtcF9pbmRleCsrLAotCQkJCQkgICAg ICAgRFNQX0RDRFBST0NFU1NPUlRZUEUsCi0JCQkJCSAgICAgICAmdGVtcF91dWlkKTsKLQkJaWYg KHN0YXR1czEgIT0gMCkKLQkJCWJyZWFrOwotCi0JCXByb2NfaW5kZXgrKzsKLQkJLyogR2V0IHRo ZSBPYmplY3QgcHJvcGVydGllcyB0byBmaW5kIHRoZSBEZXZpY2UvUHJvY2Vzc29yCi0JCSAqIFR5 cGUgKi8KLQkJaWYgKHByb2NfZGV0ZWN0ICE9IGZhbHNlKQotCQkJY29udGludWU7Ci0KLQkJc3Rh dHVzMiA9IGRjZF9nZXRfb2JqZWN0X2RlZihwbWdyX29iai0+ZGNkX21nciwKLQkJCQkJICAgICAo c3RydWN0IGRzcF91dWlkICopJnRlbXBfdXVpZCwKLQkJCQkJICAgICBEU1BfRENEUFJPQ0VTU09S VFlQRSwgJmdlbl9vYmopOwotCQlpZiAoIXN0YXR1czIpIHsKLQkJCS8qIEdldCB0aGUgT2JqIGRl ZiAqLwotCQkJaWYgKHByb2Nlc3Nvcl9pbmZvX3NpemUgPAotCQkJICAgIHNpemVvZihzdHJ1Y3Qg bWdyX3Byb2Nlc3NvcmV4dGluZm8pKSB7Ci0JCQkJKnByb2Nlc3Nvcl9pbmZvID0gZ2VuX29iai5v YmpfZGF0YS5wcm9jX2luZm87Ci0JCQl9IGVsc2UgewotCQkJCS8qIGV4dGVuZGVkIGluZm8gKi8K LQkJCQlleHRfaW5mbyA9IChzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gKikKLQkJCQkgICAg cHJvY2Vzc29yX2luZm87Ci0JCQkJKmV4dF9pbmZvID0gZ2VuX29iai5vYmpfZGF0YS5leHRfcHJv Y19vYmo7Ci0JCQl9Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBHb3QgcHJvY3R5cGUgIGZyb20g RENEICV4XG4iLAotCQkJCV9fZnVuY19fLCBwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUp OwotCQkJLyogU2VlIGlmIHdlIGdvdCB0aGUgbmVlZGVkIHByb2Nlc3NvciAqLwotCQkJaWYgKGRl dl90eXBlID09IERTUF9VTklUKSB7Ci0JCQkJaWYgKHByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3Jf dHlwZSA9PQotCQkJCSAgICBEU1BQUk9DVFlQRV9DNjQpCi0JCQkJCXByb2NfZGV0ZWN0ID0gdHJ1 ZTsKLQkJCX0gZWxzZSBpZiAoZGV2X3R5cGUgPT0gSVZBX1VOSVQpIHsKLQkJCQlpZiAocHJvY2Vz c29yX2luZm8tPnByb2Nlc3Nvcl90eXBlID09Ci0JCQkJICAgIElWQVBST0NUWVBFX0FSTTcpCi0J CQkJCXByb2NfZGV0ZWN0ID0gdHJ1ZTsKLQkJCX0KLQkJCS8qIFVzZXIgYXBwbGljYXRpb25zIG9u bHkgY2hlY2sgZm9yIGNoaXAgdHlwZSwgc28KLQkJCSAqIHRoaXMgaXMgYSBjbHVtc3kgb3Zlcndy aXRlICovCi0JCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7Ci0J CX0gZWxzZSB7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IERDRCBwcm9j ZXNzb3IgaW5mbyAleFxuIiwKLQkJCQkJX19mdW5jX18sIHN0YXR1czIpOwotCQkJc3RhdHVzID0g LUVQRVJNOwotCQl9Ci0JfQotCSpwdV9udW1fcHJvY3MgPSBwcm9jX2luZGV4OwotCWlmIChwcm9j X2RldGVjdCA9PSBmYWxzZSkgewotCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0 IHByb2MgaW5mbyBmcm9tIERDRCwgc28gdXNlIENGRyByZWdpc3RyeVxuIiwKLQkJCQlfX2Z1bmNf Xyk7Ci0JCXByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3JfdHlwZSA9IERTUFRZUEU2NDsKLQl9Ci1m dW5jX2VuZDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IG1ncl9leGl0 ID09PT09PT09Ci0gKiAgICAgIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJl c291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudCBpcwotICogICAgICAwLgotICovCi12b2lkIG1n cl9leGl0KHZvaWQpCi17Ci0JcmVmcy0tOwotCWlmIChyZWZzID09IDApCi0JCWRjZF9leGl0KCk7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbWdyX2dldF9kY2RfaGFuZGxlID09PT09PT09Ci0gKiAg ICAgIFJldHJpZXZlcyB0aGUgTUdSIGhhbmRsZS4gQWNjZXNzb3IgRnVuY3Rpb24uCi0gKi8KLWlu dCBtZ3JfZ2V0X2RjZF9oYW5kbGUoc3RydWN0IG1ncl9vYmplY3QgKm1ncl9oYW5kbGUsCi0JCQkg ICAgICB1MzIgKmRjZF9oYW5kbGUpCi17Ci0JaW50IHN0YXR1cyA9IC1FUEVSTTsKLQlzdHJ1Y3Qg bWdyX29iamVjdCAqcG1ncl9vYmogPSAoc3RydWN0IG1ncl9vYmplY3QgKiltZ3JfaGFuZGxlOwot Ci0JKmRjZF9oYW5kbGUgPSAodTMyKSBOVUxMOwotCWlmIChwbWdyX29iaikgewotCQkqZGNkX2hh bmRsZSA9ICh1MzIpIHBtZ3Jfb2JqLT5kY2RfbWdyOwotCQlzdGF0dXMgPSAwOwotCX0KLQotCXJl dHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbWdyX2luaXQgPT09PT09PT0KLSAq ICAgICAgSW5pdGlhbGl6ZSBNR1IncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNl IGNvdW50IG9uIGVhY2ggY2FsbC4KLSAqLwotYm9vbCBtZ3JfaW5pdCh2b2lkKQotewotCWJvb2wg cmV0ID0gdHJ1ZTsKLQotCWlmIChyZWZzID09IDApCi0JCXJldCA9IGRjZF9pbml0KCk7CS8qICBE Q0QgTW9kdWxlICovCi0KLQlpZiAocmV0KQotCQlyZWZzKys7Ci0KLQlyZXR1cm4gcmV0OwotfQot Ci0vKgotICogID09PT09PT09IG1ncl93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzID09PT09PT09Ci0g KiAgICAgIEJsb2NrIG9uIGFueSBCcmlkZ2UgZXZlbnQocykKLSAqLwotaW50IG1ncl93YWl0X2Zv cl9icmlkZ2VfZXZlbnRzKHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uICoqYW5vdGlmaWNhdGlvbnMs Ci0JCQkJICAgICAgdTMyIGNvdW50LCB1MzIgKnB1X2luZGV4LAotCQkJCSAgICAgIHUzMiB1dGlt ZW91dCkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVudHNb TUFYX0VWRU5UU107Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJ c3luY19ldmVudHNbaV0gPSBhbm90aWZpY2F0aW9uc1tpXS0+aGFuZGxlOwotCi0Jc3RhdHVzID0g c3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzeW5jX2V2ZW50cywgY291bnQsIHV0aW1lb3V0 LAotCQkJCQkgICAgICBwdV9pbmRleCk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi19CmRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMgYi9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDkwMDU4NWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3Jt Z3Ivbmxkci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg2MSArMCwwIEBACi0vKgotICogbmxkci5j Ci0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkg T01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERTUC9CSU9TIEJyaWRnZSBkeW5hbWljICsgb3Zlcmxh eSBOb2RlIGxvYWRlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0 cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBQQUNLQUdF IElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotICogSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJ RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lu Y2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZz Lmg+Ci0KLS8qIFBsYXRmb3JtIG1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+ Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotCi0vKiBSZXNvdXJjZSBtYW5hZ2VyICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4K LSNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3V1aWR1dGls Lmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvbmxkci5oPgotI2luY2x1ZGUgPGxpbnV4L2xjbS5o PgotCi0vKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkeW5hbWljIGxvYWQgbWVtICovCi0j ZGVmaW5lIERZTk1FTVNFQ1QgICIuZHNwYnJpZGdlX21lbSIKLQotLyogTmFtZSBvZiBzZWN0aW9u IGNvbnRhaW5pbmcgZGVwZW5kZW50IGxpYnJhcnkgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgREVQ TElCU0VDVCAgIi5kc3BicmlkZ2VfZGVwbGlicyIKLQotLyogTWF4IGRlcHRoIG9mIHJlY3Vyc2lv biBmb3IgbG9hZGluZyBub2RlJ3MgZGVwZW5kZW50IGxpYnJhcmllcyAqLwotI2RlZmluZSBNQVhE RVBUSAkgICAgNQotCi0vKiBNYXggbnVtYmVyIG9mIHBlcnNpc3RlbnQgbGlicmFyaWVzIGtlcHQg YnkgYSBub2RlICovCi0jZGVmaW5lIE1BWExJQlMJIDUKLQotLyoKLSAqICBEZWZpbmVzIGZvciBl eHRyYWN0aW5nIHBhY2tlZCBkeW5hbWljIGxvYWQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIHR3 bwotICogIG1hc2tzLgotICogIFRoZXNlIGRlZmluZXMgbXVzdCBtYXRjaCBub2RlLmNkYiBhbmQg ZHlubS5jZGIKLSAqICBGb3JtYXQgb2YgZGF0YS9jb2RlIG1hc2sgaXM6Ci0gKiAgIHV1dXV1dXV1 fGZ1ZWVlZWVlfGZ1ZGRkZGRkfGZ1Y2NjY2NjfAotICogIHdoZXJlCi0gKiAgICAgIHUgPSB1bnVz ZWQKLSAqICAgICAgY2NjY2NjID0gcHJlZmVycmVkL3JlcXVpcmVkIGR5bmFtaWMgbWVtIHNlZ2lk IGZvciBjcmVhdGUgcGhhc2UgZGF0YS9jb2RlCi0gKiAgICAgIGRkZGRkZCA9IHByZWZlcnJlZC9y ZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZGVsZXRlIHBoYXNlIGRhdGEvY29kZQotICog ICAgICBlZWVlZWUgPSBwcmVmZXJyZWQvcmVxLiBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZXhlY3V0 ZSBwaGFzZSBkYXRhL2NvZGUKLSAqICAgICAgZiA9IGZsYWcgaW5kaWNhdGluZyBpZiBtZW1vcnkg aXMgcHJlZmVycmVkIG9yIHJlcXVpcmVkOgotICoJICBmID0gMSBpZiByZXF1aXJlZCwgZiA9IDAg aWYgcHJlZmVycmVkLgotICoKLSAqICBUaGUgNiBiaXRzIG9mIHRoZSBzZWdpZCBhcmUgaW50ZXJw cmV0ZWQgYXMgZm9sbG93czoKLSAqCi0gKiAgSWYgdGhlIDZ0aCBiaXQgKGJpdCA1KSBpcyBub3Qg c2V0LCB0aGVuIHRoaXMgc3BlY2lmaWVzIGEgbWVtb3J5IHNlZ21lbnQKLSAqICBiZXR3ZWVuIDAg YW5kIDMxIChhIG1heGltdW0gb2YgMzIgZHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50cyku Ci0gKiAgSWYgdGhlIDZ0aCBiaXQgKGJpdCA1KSBpcyBzZXQsIHNlZ2lkIGhhcyB0aGUgZm9sbG93 aW5nIGludGVycHJldGF0aW9uOgotICogICAgICBzZWdpZCA9IDMyIC0gQW55IGludGVybmFsIG1l bW9yeSBzZWdtZW50IGNhbiBiZSB1c2VkLgotICogICAgICBzZWdpZCA9IDMzIC0gQW55IGV4dGVy bmFsIG1lbW9yeSBzZWdtZW50IGNhbiBiZSB1c2VkLgotICogICAgICBzZWdpZCA9IDYzIC0gQW55 IG1lbW9yeSBzZWdtZW50IGNhbiBiZSB1c2VkIChpbiB0aGlzIGNhc2UgdGhlCi0gKgkJICAgcmVx dWlyZWQvcHJlZmVycmVkIGZsYWcgaXMgaXJyZWxldmFudCkuCi0gKgotICovCi0vKiBNYXhpbXVt IGFsbG93ZWQgZHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50cyAqLwotI2RlZmluZSBNQVhN RU1TRUdTICAgICAgMzIKLQotI2RlZmluZSBNQVhTRUdJRAkzCS8qIExhcmdlc3QgcG9zc2libGUg KHJlYWwpIHNlZ2lkICovCi0jZGVmaW5lIE1FTUlOVEVSTkFMSUQgICAzMgkvKiBTZWdpZCBtZWFu aW5nIHVzZSBpbnRlcm5hbCBtZW0gKi8KLSNkZWZpbmUgTUVNRVhURVJOQUxJRCAgIDMzCS8qIFNl Z2lkIG1lYW5pbmcgdXNlIGV4dGVybmFsIG1lbSAqLwotI2RlZmluZSBOVUxMSUQJICA2MwkJLyog U2VnaWQgbWVhbmluZyBubyBtZW1vcnkgcmVxL3ByZWYgKi8KLSNkZWZpbmUgRkxBR0JJVAkgNwkJ LyogN3RoIGJpdCBpcyBwcmVmLi9yZXEuIGZsYWcgKi8KLSNkZWZpbmUgU0VHTUFTSwkgMHgzZgkJ LyogQml0cyAwIC0gNSAqLwotCi0jZGVmaW5lIENSRUFURUJJVAkwCS8qIENyZWF0ZSBzZWdpZCBz dGFydHMgYXQgYml0IDAgKi8KLSNkZWZpbmUgREVMRVRFQklUCTgJLyogRGVsZXRlIHNlZ2lkIHN0 YXJ0cyBhdCBiaXQgOCAqLwotI2RlZmluZSBFWEVDVVRFQklUICAgICAgMTYJLyogRXhlY3V0ZSBz ZWdpZCBzdGFydHMgYXQgYml0IDE2ICovCi0KLS8qCi0gKiAgTWFza3MgdGhhdCBkZWZpbmUgbWVt b3J5IHR5cGUuICBNdXN0IG1hdGNoIGRlZmluZXMgaW4gZHlubS5jZGIuCi0gKi8KLSNkZWZpbmUg RFlOTV9DT0RFCTB4MgotI2RlZmluZSBEWU5NX0RBVEEJMHg0Ci0jZGVmaW5lIERZTk1fQ09ERURB VEEgICAoRFlOTV9DT0RFIHwgRFlOTV9EQVRBKQotI2RlZmluZSBEWU5NX0lOVEVSTkFMICAgMHg4 Ci0jZGVmaW5lIERZTk1fRVhURVJOQUwgICAweDEwCi0KLS8qCi0gKiAgRGVmaW5lcyBmb3IgcGFj a2luZyBtZW1vcnkgcmVxdWlyZW1lbnQvcHJlZmVyZW5jZSBmbGFncyBmb3IgY29kZSBhbmQKLSAq ICBkYXRhIG9mIGVhY2ggb2YgdGhlIG5vZGUncyBwaGFzZXMgaW50byBvbmUgbWFzay4KLSAqICBU aGUgYml0IGlzIHNldCBpZiB0aGUgc2VnaWQgaXMgcmVxdWlyZWQgZm9yIGxvYWRpbmcgY29kZS9k YXRhIG9mIHRoZQotICogIGdpdmVuIHBoYXNlLiBUaGUgYml0IGlzIG5vdCBzZXQsIGlmIHRoZSBz ZWdpZCBpcyBwcmVmZXJyZWQgb25seS4KLSAqCi0gKiAgVGhlc2UgZGVmaW5lcyBhcmUgYWxzbyB1 c2VkIGFzIGluZGVjZXMgaW50byBhIHNlZ2lkIGFycmF5IGZvciB0aGUgbm9kZS4KLSAqICBlZyBu b2RlJ3Mgc2VnaWRbQ1JFQVRFREFUQUZMQUdCSVRdIGlzIHRoZSBtZW1vcnkgc2VnbWVudCBpZCB0 aGF0IHRoZQotICogIGNyZWF0ZSBwaGFzZSBkYXRhIGlzIHJlcXVpcmVkIG9yIHByZWZlcnJlZCB0 byBiZSBsb2FkZWQgaW50by4KLSAqLwotI2RlZmluZSBDUkVBVEVEQVRBRkxBR0JJVCAgIDAKLSNk ZWZpbmUgQ1JFQVRFQ09ERUZMQUdCSVQgICAxCi0jZGVmaW5lIEVYRUNVVEVEQVRBRkxBR0JJVCAg MgotI2RlZmluZSBFWEVDVVRFQ09ERUZMQUdCSVQgIDMKLSNkZWZpbmUgREVMRVRFREFUQUZMQUdC SVQgICA0Ci0jZGVmaW5lIERFTEVURUNPREVGTEFHQklUICAgNQotI2RlZmluZSBNQVhGTEFHUwkg ICAgNgotCi0gICAgLyoKLSAgICAgKiAgVGhlc2UgbmFtZXMgbWF5IGJlIGVtYmVkZGVkIGluIG92 ZXJsYXkgc2VjdGlvbnMgdG8gaWRlbnRpZnkgd2hpY2gKLSAgICAgKiAgbm9kZSBwaGFzZSB0aGUg c2VjdGlvbiBzaG91bGQgYmUgb3ZlcmxheWVkLgotICovCi0jZGVmaW5lIFBDUkVBVEUJICJjcmVh dGUiCi0jZGVmaW5lIFBERUxFVEUJICJkZWxldGUiCi0jZGVmaW5lIFBFWEVDVVRFCSJleGVjdXRl IgotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfZXF1YWxfdXVpZChzdHJ1Y3QgZHNwX3V1aWQgKnV1 aWQxLAotCQkJCQkJCXN0cnVjdCBkc3BfdXVpZCAqdXVpZDIpCi17Ci0JcmV0dXJuICFtZW1jbXAo dXVpZDEsIHV1aWQyLCBzaXplb2Yoc3RydWN0IGRzcF91dWlkKSk7Ci19Ci0KLSAgICAvKgotICAg ICAqICA9PT09PT09PSBtZW1fc2VnX2luZm8gPT09PT09PT0KLSAgICAgKiAgRm9ybWF0IG9mIGR5 bmFtaWMgbG9hZGluZyBtZW1vcnkgc2VnbWVudCBpbmZvIGluIGNvZmYgZmlsZS4KLSAgICAgKiAg TXVzdCBtYXRjaCBkeW5tLmg1NS4KLSAqLwotc3RydWN0IG1lbV9zZWdfaW5mbyB7Ci0JdTMyIHNl Z2lkOwkJLyogRHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50IG51bWJlciAqLwotCXUzMiBi YXNlOwotCXUzMiBsZW47Ci0JdTMyIHR5cGU7CQkvKiBNYXNrIG9mIERZTk1fQ09ERSwgRFlOTV9J TlRFUk5BTCwgZXRjLiAqLwotfTsKLQotLyoKLSAqICA9PT09PT09PSBsaWJfbm9kZSA9PT09PT09 PQotICogIEZvciBtYWludGFpbmluZyBhIHRyZWUgb2YgbGlicmFyeSBkZXBlbmRlbmNpZXMuCi0g Ki8KLXN0cnVjdCBsaWJfbm9kZSB7Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsJLyog VGhlIGxpYnJhcnkgKi8KLQl1MTYgZGVwX2xpYnM7CQkvKiBOdW1iZXIgb2YgZGVwZW5kZW50IGxp YnJhcmllcyAqLwotCXN0cnVjdCBsaWJfbm9kZSAqZGVwX2xpYnNfdHJlZTsJLyogRGVwZW5kZW50 IGxpYnJhcmllcyBvZiBsaWIgKi8KLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gb3ZseV9zZWN0ID09 PT09PT09Ci0gKiAgSW5mb3JtYXRpb24gbmVlZGVkIHRvIG92ZXJsYXkgYSBzZWN0aW9uLgotICov Ci1zdHJ1Y3Qgb3ZseV9zZWN0IHsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpuZXh0X3NlY3Q7Ci0JdTMy IHNlY3RfbG9hZF9hZGRyOwkvKiBMb2FkIGFkZHJlc3Mgb2Ygc2VjdGlvbiAqLwotCXUzMiBzZWN0 X3J1bl9hZGRyOwkvKiBSdW4gYWRkcmVzcyBvZiBzZWN0aW9uICovCi0JdTMyIHNpemU7CQkvKiBT aXplIG9mIHNlY3Rpb24gKi8KLQl1MTYgcGFnZTsJCS8qIERCTF9DT0RFLCBEQkxfREFUQSAqLwot fTsKLQotLyoKLSAqICA9PT09PT09PSBvdmx5X25vZGUgPT09PT09PT0KLSAqICBGb3IgbWFpbnRh aW5pbmcgYSBsaXN0IG9mIG92ZXJsYXkgbm9kZXMsIHdpdGggc2VjdGlvbnMgdGhhdCBuZWVkIHRv IGJlCi0gKiAgb3ZlcmxheWVkIGZvciBlYWNoIG9mIHRoZSBub2RlcyBwaGFzZXMuCi0gKi8KLXN0 cnVjdCBvdmx5X25vZGUgewotCXN0cnVjdCBkc3BfdXVpZCB1dWlkOwotCWNoYXIgKm5vZGVfbmFt ZTsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpjcmVhdGVfc2VjdHNfbGlzdDsKLQlzdHJ1Y3Qgb3ZseV9z ZWN0ICpkZWxldGVfc2VjdHNfbGlzdDsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpleGVjdXRlX3NlY3Rz X2xpc3Q7Ci0Jc3RydWN0IG92bHlfc2VjdCAqb3RoZXJfc2VjdHNfbGlzdDsKLQl1MTYgY3JlYXRl X3NlY3RzOwotCXUxNiBkZWxldGVfc2VjdHM7Ci0JdTE2IGV4ZWN1dGVfc2VjdHM7Ci0JdTE2IG90 aGVyX3NlY3RzOwotCXUxNiBjcmVhdGVfcmVmOwotCXUxNiBkZWxldGVfcmVmOwotCXUxNiBleGVj dXRlX3JlZjsKLQl1MTYgb3RoZXJfcmVmOwotfTsKLQotLyoKLSAqICA9PT09PT09PSBubGRyX29i amVjdCA9PT09PT09PQotICogIE92ZXJsYXkgbG9hZGVyIG9iamVjdC4KLSAqLwotc3RydWN0IG5s ZHJfb2JqZWN0IHsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsJLyogRGV2aWNlIG9iamVj dCAqLwotCXN0cnVjdCBkY2RfbWFuYWdlciAqZGNkX21ncjsJLyogUHJvYy9Ob2RlIGRhdGEgbWFu YWdlciAqLwotCXN0cnVjdCBkYmxsX3Rhcl9vYmogKmRibGw7CS8qIFRoZSBEQkwgbG9hZGVyICov Ci0Jc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmJhc2VfbGliOwkvKiBCYXNlIGltYWdlIGxpYnJh cnkgKi8KLQlzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnJtbTsJLyogUmVtb3RlIG1lbW9yeSBtYW5h Z2VyIGZvciBEU1AgKi8KLQlzdHJ1Y3QgZGJsbF9meG5zIGxkcl9meG5zOwkvKiBMb2FkZXIgZnVu Y3Rpb24gdGFibGUgKi8KLQlzdHJ1Y3QgZGJsbF9hdHRycyBsZHJfYXR0cnM7CS8qIGF0dHJzIHRv IHBhc3MgdG8gbG9hZGVyIGZ1bmN0aW9ucyAqLwotCW5sZHJfb3ZseWZ4biBvdmx5X2Z4bjsJLyog IndyaXRlIiBmb3Igb3ZlcmxheSBub2RlcyAqLwotCW5sZHJfd3JpdGVmeG4gd3JpdGVfZnhuOwkv KiAid3JpdGUiIGZvciBkeW5hbWljIG5vZGVzICovCi0Jc3RydWN0IG92bHlfbm9kZSAqb3ZseV90 YWJsZTsJLyogVGFibGUgb2Ygb3ZlcmxheSBub2RlcyAqLwotCXUxNiBvdmx5X25vZGVzOwkJLyog TnVtYmVyIG9mIG92ZXJsYXkgbm9kZXMgaW4gYmFzZSAqLwotCXUxNiBvdmx5X25pZDsJCS8qIElu ZGV4IGZvciB0cmFja2luZyBvdmVybGF5IG5vZGVzICovCi0JdTE2IGRsb2FkX3NlZ3M7CQkvKiBO dW1iZXIgb2YgZHluYW1pYyBsb2FkIG1lbSBzZWdzICovCi0JdTMyICpzZWdfdGFibGU7CQkvKiBt ZW10eXBlcyBvZiBkeW5hbWljIG1lbW9yeSBzZWdzCi0JCQkJICogaW5kZXhlZCBieSBzZWdpZAot CQkJCSAqLwotCXUxNiBkc3BfbWF1X3NpemU7CS8qIFNpemUgb2YgRFNQIE1BVSAqLwotCXUxNiBk c3Bfd29yZF9zaXplOwkvKiBTaXplIG9mIERTUCB3b3JkICovCi19OwotCi0vKgotICogID09PT09 PT09IG5sZHJfbm9kZW9iamVjdCA9PT09PT09PQotICogIER5bmFtaWMgbm9kZSBvYmplY3QuIFRo aXMgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhIG5vZGUgaXMgYWxsb2NhdGVkLgotICovCi1zdHJ1 Y3Qgbmxkcl9ub2Rlb2JqZWN0IHsKLQlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOwkvKiBE eW5hbWljIGxvYWRlciBoYW5kbGUgKi8KLQl2b2lkICpwcml2X3JlZjsJCS8qIEhhbmRsZSB0byBw YXNzIHRvIGRibF93cml0ZV9meG4gKi8KLQlzdHJ1Y3QgZHNwX3V1aWQgdXVpZDsJLyogTm9kZSdz IFVVSUQgKi8KLQlib29sIGR5bmFtaWM7CQkvKiBEeW5hbWljYWxseSBsb2FkZWQgbm9kZT8gKi8K LQlib29sIG92ZXJsYXk7CQkvKiBPdmVybGF5IG5vZGU/ICovCi0JYm9vbCAqcGhhc2Vfc3BsaXQ7 CS8qIE11bHRpcGxlIHBoYXNlIGxpYnJhcmllcz8gKi8KLQlzdHJ1Y3QgbGliX25vZGUgcm9vdDsJ LyogTGlicmFyeSBjb250YWluaW5nIG5vZGUgcGhhc2UgKi8KLQlzdHJ1Y3QgbGliX25vZGUgY3Jl YXRlX2xpYjsJLyogTGlicmFyeSB3aXRoIGNyZWF0ZSBwaGFzZSBsaWIgKi8KLQlzdHJ1Y3QgbGli X25vZGUgZXhlY3V0ZV9saWI7CS8qIExpYnJhcnkgd2l0aCBleGVjdXRlIHBoYXNlIGxpYiAqLwot CXN0cnVjdCBsaWJfbm9kZSBkZWxldGVfbGliOwkvKiBMaWJyYXJ5IHdpdGggZGVsZXRlIHBoYXNl IGxpYiAqLwotCS8qIGxpYnMgcmVtYWluIGxvYWRlZCB1bnRpbCBEZWxldGUgKi8KLQlzdHJ1Y3Qg bGliX25vZGUgcGVyc19saWJfdGFibGVbTUFYTElCU107Ci0JczMyIHBlcnNfbGliczsJCS8qIE51 bWJlciBvZiBwZXJzaXN0ZW50IGxpYnJhcmllcyAqLwotCS8qIFBhdGggaW4gbGliIGRlcGVuZGVu Y3kgdHJlZSAqLwotCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWJfcGF0aFtNQVhERVBUSCAr IDFdOwotCWVudW0gbmxkcl9waGFzZSBwaGFzZTsJLyogTm9kZSBwaGFzZSBjdXJyZW50bHkgYmVp bmcgbG9hZGVkICovCi0KLQkvKgotCSAqICBEeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnRz IGZvciBkYXRhIGFuZCBjb2RlIG9mIGVhY2ggcGhhc2UuCi0JICovCi0JdTE2IHNlZ19pZFtNQVhG TEFHU107Ci0KLQkvKgotCSAqICBNYXNrIGluZGljYXRpbmcgd2hldGhlciBlYWNoIG1lbSBzZWdt ZW50IHNwZWNpZmllZCBpbiBzZWdfaWRbXQotCSAqICBpcyBwcmVmZXJyZWQgb3IgcmVxdWlyZWQu Ci0JICogIEZvciBleGFtcGxlCi0JICogIAlpZiAoY29kZV9kYXRhX2ZsYWdfbWFzayAmICgxIDw8 IEVYRUNVVEVEQVRBRkxBR0JJVCkpICE9IDAsCi0JICogIHRoZW4gaXQgaXMgcmVxdWlyZWQgdG8g bG9hZCBleGVjdXRlIHBoYXNlIGRhdGEgaW50byB0aGUgbWVtb3J5Ci0JICogIHNwZWNpZmllZCBi eSBzZWdfaWRbRVhFQ1VURURBVEFGTEFHQklUXS4KLQkgKi8KLQl1MzIgY29kZV9kYXRhX2ZsYWdf bWFzazsKLX07Ci0KLS8qIER5bmFtaWMgbG9hZGVyIGZ1bmN0aW9uIHRhYmxlICovCi1zdGF0aWMg c3RydWN0IGRibGxfZnhucyBsZHJfZnhucyA9IHsKLQkoZGJsbF9jbG9zZV9meG4pIGRibGxfY2xv c2UsCi0JKGRibGxfY3JlYXRlX2Z4bikgZGJsbF9jcmVhdGUsCi0JKGRibGxfZGVsZXRlX2Z4bikg ZGJsbF9kZWxldGUsCi0JKGRibGxfZXhpdF9meG4pIGRibGxfZXhpdCwKLQkoZGJsbF9nZXRfYXR0 cnNfZnhuKSBkYmxsX2dldF9hdHRycywKLQkoZGJsbF9nZXRfYWRkcl9meG4pIGRibGxfZ2V0X2Fk ZHIsCi0JKGRibGxfZ2V0X2NfYWRkcl9meG4pIGRibGxfZ2V0X2NfYWRkciwKLQkoZGJsbF9nZXRf c2VjdF9meG4pIGRibGxfZ2V0X3NlY3QsCi0JKGRibGxfaW5pdF9meG4pIGRibGxfaW5pdCwKLQko ZGJsbF9sb2FkX2Z4bikgZGJsbF9sb2FkLAotCShkYmxsX29wZW5fZnhuKSBkYmxsX29wZW4sCi0J KGRibGxfcmVhZF9zZWN0X2Z4bikgZGJsbF9yZWFkX3NlY3QsCi0JKGRibGxfdW5sb2FkX2Z4bikg ZGJsbF91bmxvYWQsCi19OwotCi1zdGF0aWMgaW50IGFkZF9vdmx5X2luZm8odm9pZCAqaGFuZGxl LCBzdHJ1Y3QgZGJsbF9zZWN0X2luZm8gKnNlY3RfaW5mbywKLQkJCQl1MzIgYWRkciwgdTMyIGJ5 dGVzKTsKLXN0YXRpYyBpbnQgYWRkX292bHlfbm9kZShzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2Jq LAotCQkJCWVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsIHZvaWQgKmhhbmRsZSk7Ci1zdGF0 aWMgaW50IGFkZF9vdmx5X3NlY3Qoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiwKLQkJCQlz dHJ1Y3Qgb3ZseV9zZWN0ICoqbHN0LAotCQkJCXN0cnVjdCBkYmxsX3NlY3RfaW5mbyAqc2VjdF9p bmYsCi0JCQkJYm9vbCAqZXhpc3RzLCB1MzIgYWRkciwgdTMyIGJ5dGVzKTsKLXN0YXRpYyBzMzIg ZmFrZV9vdmx5X3dyaXRlKHZvaWQgKmhhbmRsZSwgdTMyIGRzcF9hZGRyZXNzLCB2b2lkICpidWYs IHUzMiBieXRlcywKLQkJCSAgIHMzMiBtdHlwZSk7Ci1zdGF0aWMgdm9pZCBmcmVlX3NlY3RzKHN0 cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCi0JCSAgICAgICBzdHJ1Y3Qgb3ZseV9zZWN0ICpw aGFzZV9zZWN0cywgdTE2IGFsbG9jX251bSk7Ci1zdGF0aWMgYm9vbCBnZXRfc3ltYm9sX3ZhbHVl KHZvaWQgKmhhbmRsZSwgdm9pZCAqcGFyZywgdm9pZCAqcm1tX2hhbmRsZSwKLQkJCSAgICAgY2hh ciAqc3ltX25hbWUsIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW0pOwotc3RhdGljIGludCBsb2Fk X2xpYihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAotCQkJICAgc3RydWN0 IGxpYl9ub2RlICpyb290LCBzdHJ1Y3QgZHNwX3V1aWQgdXVpZCwKLQkJCSAgIGJvb2wgcm9vdF9w cnN0bnQsCi0JCQkgICBzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKmxpYl9wYXRoLAotCQkJICAg ZW51bSBubGRyX3BoYXNlIHBoYXNlLCB1MTYgZGVwdGgpOwotc3RhdGljIGludCBsb2FkX292bHko c3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKLQkJCSAgICBlbnVtIG5sZHJf cGhhc2UgcGhhc2UpOwotc3RhdGljIGludCByZW1vdGVfYWxsb2Modm9pZCAqKnJlZiwgdTE2IG1l bV9zZWN0LCB1MzIgc2l6ZSwKLQkJCSAgICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3Ms Ci0JCQkgICAgICAgczMyIHNlZ21udF9pZCwKLQkJCSAgICAgICBzMzIgcmVxLCBib29sIHJlc2Vy dmUpOwotc3RhdGljIGludCByZW1vdGVfZnJlZSh2b2lkICoqcmVmLCB1MTYgc3BhY2UsIHUzMiBk c3BfYWRkcmVzcywgdTMyIHNpemUsCi0JCQkgICAgICBib29sIHJlc2VydmUpOwotCi1zdGF0aWMg dm9pZCB1bmxvYWRfbGliKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCi0J CSAgICAgICBzdHJ1Y3QgbGliX25vZGUgKnJvb3QpOwotc3RhdGljIHZvaWQgdW5sb2FkX292bHko c3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKLQkJCWVudW0gbmxkcl9waGFz ZSBwaGFzZSk7Ci1zdGF0aWMgYm9vbCBmaW5kX2luX3BlcnNpc3RlbnRfbGliX2FycmF5KHN0cnVj dCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCi0JCQkJCSBzdHJ1Y3QgZGJsbF9saWJy YXJ5X29iaiAqbGliKTsKLQotLyoKLSAqICA9PT09PT09PSBubGRyX2FsbG9jYXRlID09PT09PT09 Ci0gKi8KLWludCBubGRyX2FsbG9jYXRlKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosIHZv aWQgKnByaXZfcmVmLAotCQkJIGNvbnN0IHN0cnVjdCBkY2Rfbm9kZXByb3BzICpub2RlX3Byb3Bz LAotCQkJIHN0cnVjdCBubGRyX25vZGVvYmplY3QgKipubGRyX25vZGVvYmosCi0JCQkgYm9vbCAq cGZfcGhhc2Vfc3BsaXQpCi17Ci0Jc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29i aiA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBJbml0aWFsaXplIGhhbmRsZSBpbiBj YXNlIG9mIGZhaWx1cmUgKi8KLQkqbmxkcl9ub2Rlb2JqID0gTlVMTDsKLQkvKiBBbGxvY2F0ZSBu b2RlIG9iamVjdCAqLwotCW5sZHJfbm9kZV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbmxk cl9ub2Rlb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAobmxkcl9ub2RlX29iaiA9PSBOVUxM KSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JfSBlbHNlIHsKLQkJbmxkcl9ub2RlX29iai0+cGhh c2Vfc3BsaXQgPSBwZl9waGFzZV9zcGxpdDsKLQkJbmxkcl9ub2RlX29iai0+cGVyc19saWJzID0g MDsKLQkJbmxkcl9ub2RlX29iai0+bmxkcl9vYmogPSBubGRyX29iajsKLQkJbmxkcl9ub2RlX29i ai0+cHJpdl9yZWYgPSBwcml2X3JlZjsKLQkJLyogU2F2ZSBub2RlJ3MgVVVJRC4gKi8KLQkJbmxk cl9ub2RlX29iai0+dXVpZCA9IG5vZGVfcHJvcHMtPm5kYl9wcm9wcy51aV9ub2RlX2lkOwotCQkv KgotCQkgKiAgRGV0ZXJtaW5lIGlmIG5vZGUgaXMgYSBkeW5hbWljYWxseSBsb2FkZWQgbm9kZSBm cm9tCi0JCSAqICBuZGJfcHJvcHMuCi0JCSAqLwotCQlpZiAobm9kZV9wcm9wcy0+bG9hZF90eXBl ID09IE5MRFJfRFlOQU1JQ0xPQUQpIHsKLQkJCS8qIER5bmFtaWMgbm9kZSAqLwotCQkJbmxkcl9u b2RlX29iai0+ZHluYW1pYyA9IHRydWU7Ci0JCQkvKgotCQkJICogIEV4dHJhY3QgbWVtb3J5IHJl cXVpcmVtZW50cyBmcm9tIG5kYl9wcm9wcyBtYXNrcwotCQkJICovCi0JCQkvKiBDcmVhdGUgcGhh c2UgKi8KLQkJCW5sZHJfbm9kZV9vYmotPnNlZ19pZFtDUkVBVEVEQVRBRkxBR0JJVF0gPSAodTE2 KQotCQkJICAgIChub2RlX3Byb3BzLT5kYXRhX21lbV9zZWdfbWFzayA+PiBDUkVBVEVCSVQpICYK LQkJCSAgICBTRUdNQVNLOwotCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8 PQotCQkJICAgICgobm9kZV9wcm9wcy0+ZGF0YV9tZW1fc2VnX21hc2sgPj4KLQkJCSAgICAgIChD UkVBVEVCSVQgKyBGTEFHQklUKSkgJiAxKSA8PCBDUkVBVEVEQVRBRkxBR0JJVDsKLQkJCW5sZHJf bm9kZV9vYmotPnNlZ19pZFtDUkVBVEVDT0RFRkxBR0JJVF0gPSAodTE2KQotCQkJICAgIChub2Rl X3Byb3BzLT5jb2RlX21lbV9zZWdfbWFzayA+PgotCQkJICAgICBDUkVBVEVCSVQpICYgU0VHTUFT SzsKLQkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0KLQkJCSAgICAoKG5v ZGVfcHJvcHMtPmNvZGVfbWVtX3NlZ19tYXNrID4+Ci0JCQkgICAgICAoQ1JFQVRFQklUICsgRkxB R0JJVCkpICYgMSkgPDwgQ1JFQVRFQ09ERUZMQUdCSVQ7Ci0JCQkvKiBFeGVjdXRlIHBoYXNlICov Ci0JCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbRVhFQ1VURURBVEFGTEFHQklUXSA9ICh1MTYpCi0J CQkgICAgKG5vZGVfcHJvcHMtPmRhdGFfbWVtX3NlZ19tYXNrID4+Ci0JCQkgICAgIEVYRUNVVEVC SVQpICYgU0VHTUFTSzsKLQkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0K LQkJCSAgICAoKG5vZGVfcHJvcHMtPmRhdGFfbWVtX3NlZ19tYXNrID4+Ci0JCQkgICAgICAoRVhF Q1VURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8Ci0JCQkgICAgRVhFQ1VURURBVEFGTEFHQklUOwot CQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0VYRUNVVEVDT0RFRkxBR0JJVF0gPSAodTE2KQotCQkJ ICAgIChub2RlX3Byb3BzLT5jb2RlX21lbV9zZWdfbWFzayA+PgotCQkJICAgICBFWEVDVVRFQklU KSAmIFNFR01BU0s7Ci0JCQlubGRyX25vZGVfb2JqLT5jb2RlX2RhdGFfZmxhZ19tYXNrIHw9Ci0J CQkgICAgKChub2RlX3Byb3BzLT5jb2RlX21lbV9zZWdfbWFzayA+PgotCQkJICAgICAgKEVYRUNV VEVCSVQgKyBGTEFHQklUKSkgJiAxKSA8PAotCQkJICAgIEVYRUNVVEVDT0RFRkxBR0JJVDsKLQkJ CS8qIERlbGV0ZSBwaGFzZSAqLwotCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0RFTEVURURBVEFG TEFHQklUXSA9ICh1MTYpCi0JCQkgICAgKG5vZGVfcHJvcHMtPmRhdGFfbWVtX3NlZ19tYXNrID4+ IERFTEVURUJJVCkgJgotCQkJICAgIFNFR01BU0s7Ci0JCQlubGRyX25vZGVfb2JqLT5jb2RlX2Rh dGFfZmxhZ19tYXNrIHw9Ci0JCQkgICAgKChub2RlX3Byb3BzLT5kYXRhX21lbV9zZWdfbWFzayA+ PgotCQkJICAgICAgKERFTEVURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8IERFTEVURURBVEFGTEFH QklUOwotCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0RFTEVURUNPREVGTEFHQklUXSA9ICh1MTYp Ci0JCQkgICAgKG5vZGVfcHJvcHMtPmNvZGVfbWVtX3NlZ19tYXNrID4+Ci0JCQkgICAgIERFTEVU RUJJVCkgJiBTRUdNQVNLOwotCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8 PQotCQkJICAgICgobm9kZV9wcm9wcy0+Y29kZV9tZW1fc2VnX21hc2sgPj4KLQkJCSAgICAgIChE RUxFVEVCSVQgKyBGTEFHQklUKSkgJiAxKSA8PCBERUxFVEVDT0RFRkxBR0JJVDsKLQkJfSBlbHNl IHsKLQkJCS8qIE5vbi1keW5hbWljYWxseSBsb2FkZWQgbm9kZXMgYXJlIHBhcnQgb2YgdGhlCi0J CQkgKiBiYXNlIGltYWdlICovCi0JCQlubGRyX25vZGVfb2JqLT5yb290LmxpYiA9IG5sZHJfb2Jq LT5iYXNlX2xpYjsKLQkJCS8qIENoZWNrIGZvciBvdmVybGF5IG5vZGUgKi8KLQkJCWlmIChub2Rl X3Byb3BzLT5sb2FkX3R5cGUgPT0gTkxEUl9PVkxZTE9BRCkKLQkJCQlubGRyX25vZGVfb2JqLT5v dmVybGF5ID0gdHJ1ZTsKLQotCQl9Ci0JCSpubGRyX25vZGVvYmogPSAoc3RydWN0IG5sZHJfbm9k ZW9iamVjdCAqKW5sZHJfbm9kZV9vYmo7Ci0JfQotCS8qIENsZWFudXAgb24gZmFpbHVyZSAqLwot CWlmIChzdGF0dXMgJiYgbmxkcl9ub2RlX29iaikKLQkJa2ZyZWUobmxkcl9ub2RlX29iaik7Ci0K LQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IG5sZHJfY3JlYXRlID09PT09 PT09Ci0gKi8KLWludCBubGRyX2NyZWF0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKipubGRyLAotCQkg ICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAotCQkgICAgICAgY29uc3Qgc3RydWN0 IG5sZHJfYXR0cnMgKnBhdHRycykKLXsKLQlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8q IENPRCBtYW5hZ2VyICovCi0JY2hhciAqcHN6X2NvZmZfYnVmID0gTlVMTDsKLQljaGFyIHN6X3ps X2ZpbGVbQ09EX01BWFBBVEhMRU5HVEhdOwotCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmog PSBOVUxMOwotCXN0cnVjdCBkYmxsX2F0dHJzIHNhdmVfYXR0cnM7Ci0Jc3RydWN0IGRibGxfYXR0 cnMgbmV3X2F0dHJzOwotCWRibGxfZmxhZ3MgZmxhZ3M7Ci0JdTMyIHVsX2VudHJ5OwotCXUxNiBk bG9hZF9zZWdzID0gMDsKLQlzdHJ1Y3QgbWVtX3NlZ19pbmZvICptZW1faW5mb19vYmo7Ci0JdTMy IHVsX2xlbiA9IDA7Ci0JdTMyIHVsX2FkZHI7Ci0Jc3RydWN0IHJtbV9zZWdtZW50ICpybW1fc2Vn cyA9IE5VTEw7Ci0JdTE2IGk7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkvKiBBbGxvY2F0ZSBkeW5h bWljIGxvYWRlciBvYmplY3QgKi8KLQlubGRyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBu bGRyX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmIChubGRyX29iaikgewotCQlubGRyX29iai0+ ZGV2X29iaiA9IGhkZXZfb2JqOwotCQkvKiB3YXJuaW5nLCBsYXp5IHN0YXR1cyBjaGVja2luZyBh bGVydCEgKi8KLQkJZGV2X2dldF9jb2RfbWdyKGhkZXZfb2JqLCAmY29kX21ncik7Ci0JCWlmIChj b2RfbWdyKSB7Ci0JCQlzdGF0dXMgPSBjb2RfZ2V0X2xvYWRlcihjb2RfbWdyLCAmbmxkcl9vYmot PmRibGwpOwotCQkJc3RhdHVzID0gY29kX2dldF9iYXNlX2xpYihjb2RfbWdyLCAmbmxkcl9vYmot PmJhc2VfbGliKTsKLQkJCXN0YXR1cyA9Ci0JCQkgICAgY29kX2dldF9iYXNlX25hbWUoY29kX21n ciwgc3pfemxfZmlsZSwKLQkJCQkJCQlDT0RfTUFYUEFUSExFTkdUSCk7Ci0JCX0KLQkJc3RhdHVz ID0gMDsKLQkJLyogZW5kIGxhenkgc3RhdHVzIGNoZWNraW5nICovCi0JCW5sZHJfb2JqLT5kc3Bf bWF1X3NpemUgPSBwYXR0cnMtPmRzcF9tYXVfc2l6ZTsKLQkJbmxkcl9vYmotPmRzcF93b3JkX3Np emUgPSBwYXR0cnMtPmRzcF93b3JkX3NpemU7Ci0JCW5sZHJfb2JqLT5sZHJfZnhucyA9IGxkcl9m eG5zOwotCQlpZiAoIShubGRyX29iai0+bGRyX2Z4bnMuaW5pdF9meG4oKSkpCi0JCQlzdGF0dXMg PSAtRU5PTUVNOwotCi0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQl9Ci0JLyogQ3Jl YXRlIHRoZSBEQ0QgTWFuYWdlciAqLwotCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBkY2RfY3Jl YXRlX21hbmFnZXIoTlVMTCwgJm5sZHJfb2JqLT5kY2RfbWdyKTsKLQotCS8qIEdldCBkeW5hbWlj IGxvYWRpbmcgbWVtb3J5IHNlY3Rpb25zIGZyb20gYmFzZSBsaWIgKi8KLQlpZiAoIXN0YXR1cykg ewotCQlzdGF0dXMgPQotCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9zZWN0X2Z4bihubGRy X29iai0+YmFzZV9saWIsCi0JCQkJCQkgICAgRFlOTUVNU0VDVCwgJnVsX2FkZHIsCi0JCQkJCQkg ICAgJnVsX2xlbik7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlwc3pfY29mZl9idWYgPQotCQkJCWt6 YWxsb2ModWxfbGVuICogbmxkcl9vYmotPmRzcF9tYXVfc2l6ZSwKLQkJCQkJCQkJR0ZQX0tFUk5F TCk7Ci0JCQlpZiAoIXBzel9jb2ZmX2J1ZikKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCQl9IGVs c2UgewotCQkJLyogT2sgdG8gbm90IGhhdmUgZHluYW1pYyBsb2FkaW5nIG1lbW9yeSAqLwotCQkJ c3RhdHVzID0gMDsKLQkJCXVsX2xlbiA9IDA7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBmYWls ZWQgLSBubyBkeW5hbWljIGxvYWRpbmcgbWVtICIKLQkJCQkic2VnbWVudHM6IDB4JXhcbiIsIF9f ZnVuY19fLCBzdGF0dXMpOwotCQl9Ci0JfQotCWlmICghc3RhdHVzICYmIHVsX2xlbiA+IDApIHsK LQkJLyogUmVhZCBzZWN0aW9uIGNvbnRhaW5pbmcgZHluYW1pYyBsb2FkIG1lbSBzZWdtZW50cyAq LwotCQlzdGF0dXMgPQotCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLnJlYWRfc2VjdF9meG4obmxk cl9vYmotPmJhc2VfbGliLAotCQkJCQkJICAgICBEWU5NRU1TRUNULCBwc3pfY29mZl9idWYsCi0J CQkJCQkgICAgIHVsX2xlbik7Ci0JfQotCWlmICghc3RhdHVzICYmIHVsX2xlbiA+IDApIHsKLQkJ LyogUGFyc2UgbWVtb3J5IHNlZ21lbnQgZGF0YSAqLwotCQlkbG9hZF9zZWdzID0gKHUxNikgKCoo KHUzMiAqKSBwc3pfY29mZl9idWYpKTsKLQkJaWYgKGRsb2FkX3NlZ3MgPiBNQVhNRU1TRUdTKQot CQkJc3RhdHVzID0gLUVCQURGOwotCX0KLQkvKiBQYXJzZSBkeW5hbWljIGxvYWQgbWVtb3J5IHNl Z21lbnRzICovCi0JaWYgKCFzdGF0dXMgJiYgZGxvYWRfc2VncyA+IDApIHsKLQkJcm1tX3NlZ3Mg PSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX3NlZ21lbnQpICogZGxvYWRfc2VncywKLQkJCQkJ CQkJR0ZQX0tFUk5FTCk7Ci0JCW5sZHJfb2JqLT5zZWdfdGFibGUgPQotCQkJCWt6YWxsb2Moc2l6 ZW9mKHUzMikgKiBkbG9hZF9zZWdzLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHJtbV9zZWdzID09IE5V TEwgfHwgbmxkcl9vYmotPnNlZ190YWJsZSA9PSBOVUxMKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVN OwotCQl9IGVsc2UgewotCQkJbmxkcl9vYmotPmRsb2FkX3NlZ3MgPSBkbG9hZF9zZWdzOwotCQkJ bWVtX2luZm9fb2JqID0gKHN0cnVjdCBtZW1fc2VnX2luZm8gKikocHN6X2NvZmZfYnVmICsKLQkJ CQkJCQkgICAgICAgc2l6ZW9mKHUzMikpOwotCQkJZm9yIChpID0gMDsgaSA8IGRsb2FkX3NlZ3M7 IGkrKykgewotCQkJCXJtbV9zZWdzW2ldLmJhc2UgPSAobWVtX2luZm9fb2JqICsgaSktPmJhc2U7 Ci0JCQkJcm1tX3NlZ3NbaV0ubGVuZ3RoID0gKG1lbV9pbmZvX29iaiArIGkpLT5sZW47Ci0JCQkJ cm1tX3NlZ3NbaV0uc3BhY2UgPSAwOwotCQkJCW5sZHJfb2JqLT5zZWdfdGFibGVbaV0gPQotCQkJ CSAgICAobWVtX2luZm9fb2JqICsgaSktPnR5cGU7Ci0JCQkJZGV2X2RiZyhicmlkZ2UsCi0JCQkJ CSIocHJvYykgRExMIE1FTVNFR01FTlQ6ICVkLCAiCi0JCQkJCSJCYXNlOiAweCV4LCBMZW5ndGg6 IDB4JXhcbiIsIGksCi0JCQkJCXJtbV9zZWdzW2ldLmJhc2UsIHJtbV9zZWdzW2ldLmxlbmd0aCk7 Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogQ3JlYXRlIFJlbW90ZSBtZW1vcnkgbWFuYWdlciAqLwotCWlm ICghc3RhdHVzKQotCQlzdGF0dXMgPSBybW1fY3JlYXRlKCZubGRyX29iai0+cm1tLCBybW1fc2Vn cywgZGxvYWRfc2Vncyk7Ci0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBzZXQgdGhlIGFsbG9jLCBm cmVlLCB3cml0ZSBmdW5jdGlvbnMgZm9yIGxvYWRlciAqLwotCQlubGRyX29iai0+bGRyX2Z4bnMu Z2V0X2F0dHJzX2Z4bihubGRyX29iai0+ZGJsbCwgJnNhdmVfYXR0cnMpOwotCQluZXdfYXR0cnMg PSBzYXZlX2F0dHJzOwotCQluZXdfYXR0cnMuYWxsb2MgPSAoZGJsbF9hbGxvY19meG4pIHJlbW90 ZV9hbGxvYzsKLQkJbmV3X2F0dHJzLmZyZWUgPSAoZGJsbF9mcmVlX2Z4bikgcmVtb3RlX2ZyZWU7 Ci0JCW5ld19hdHRycy5zeW1fbG9va3VwID0gKGRibGxfc3ltX2xvb2t1cCkgZ2V0X3N5bWJvbF92 YWx1ZTsKLQkJbmV3X2F0dHJzLnN5bV9oYW5kbGUgPSBubGRyX29iajsKLQkJbmV3X2F0dHJzLndy aXRlID0gKGRibGxfd3JpdGVfZnhuKSBwYXR0cnMtPndyaXRlOwotCQlubGRyX29iai0+b3ZseV9m eG4gPSBwYXR0cnMtPm92bHk7Ci0JCW5sZHJfb2JqLT53cml0ZV9meG4gPSBwYXR0cnMtPndyaXRl OwotCQlubGRyX29iai0+bGRyX2F0dHJzID0gbmV3X2F0dHJzOwotCX0KLQlrZnJlZShybW1fc2Vn cyk7Ci0KLQlrZnJlZShwc3pfY29mZl9idWYpOwotCi0JLyogR2V0IG92ZXJsYXkgbm9kZXMgKi8K LQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPQotCQkgICAgY29kX2dldF9iYXNlX25hbWUoY29k X21nciwgc3pfemxfZmlsZSwgQ09EX01BWFBBVEhMRU5HVEgpOwotCQkvKiBsYXp5IGNoZWNrICov Ci0JCS8qIEZpcnN0IGNvdW50IG51bWJlciBvZiBvdmVybGF5IG5vZGVzICovCi0JCXN0YXR1cyA9 Ci0JCSAgICBkY2RfZ2V0X29iamVjdHMobmxkcl9vYmotPmRjZF9tZ3IsIHN6X3psX2ZpbGUsCi0J CQkJICAgIGFkZF9vdmx5X25vZGUsICh2b2lkICopbmxkcl9vYmopOwotCQkvKiBOb3cgYnVpbGQg dGFibGUgb2Ygb3ZlcmxheSBub2RlcyAqLwotCQlpZiAoIXN0YXR1cyAmJiBubGRyX29iai0+b3Zs eV9ub2RlcyA+IDApIHsKLQkJCS8qIEFsbG9jYXRlIHRhYmxlIGZvciBvdmVybGF5IG5vZGVzICov Ci0JCQlubGRyX29iai0+b3ZseV90YWJsZSA9Ci0JCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBv dmx5X25vZGUpICoKLQkJCQkJbmxkcl9vYmotPm92bHlfbm9kZXMsIEdGUF9LRVJORUwpOwotCQkJ LyogUHV0IG92ZXJsYXkgbm9kZXMgaW4gdGhlIHRhYmxlICovCi0JCQlubGRyX29iai0+b3ZseV9u aWQgPSAwOwotCQkJc3RhdHVzID0gZGNkX2dldF9vYmplY3RzKG5sZHJfb2JqLT5kY2RfbWdyLCBz el96bF9maWxlLAotCQkJCQkJIGFkZF9vdmx5X25vZGUsCi0JCQkJCQkgKHZvaWQgKilubGRyX29i aik7Ci0JCX0KLQl9Ci0JLyogRG8gYSBmYWtlIHJlbG9hZCBvZiB0aGUgYmFzZSBpbWFnZSB0byBn ZXQgb3ZlcmxheSBzZWN0aW9uIGluZm8gKi8KLQlpZiAoIXN0YXR1cyAmJiBubGRyX29iai0+b3Zs eV9ub2RlcyA+IDApIHsKLQkJc2F2ZV9hdHRycy53cml0ZSA9IGZha2Vfb3ZseV93cml0ZTsKLQkJ c2F2ZV9hdHRycy5sb2dfd3JpdGUgPSBhZGRfb3ZseV9pbmZvOwotCQlzYXZlX2F0dHJzLmxvZ193 cml0ZV9oYW5kbGUgPSBubGRyX29iajsKLQkJZmxhZ3MgPSBEQkxMX0NPREUgfCBEQkxMX0RBVEEg fCBEQkxMX1NZTUI7Ci0JCXN0YXR1cyA9IG5sZHJfb2JqLT5sZHJfZnhucy5sb2FkX2Z4bihubGRy X29iai0+YmFzZV9saWIsIGZsYWdzLAotCQkJCQkJICAgICAmc2F2ZV9hdHRycywgJnVsX2VudHJ5 KTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJKm5sZHIgPSAoc3RydWN0IG5sZHJfb2JqZWN0ICop bmxkcl9vYmo7Ci0JfSBlbHNlIHsKLQkJaWYgKG5sZHJfb2JqKQotCQkJbmxkcl9kZWxldGUoKHN0 cnVjdCBubGRyX29iamVjdCAqKW5sZHJfb2JqKTsKLQotCQkqbmxkciA9IE5VTEw7Ci0JfQotCS8q IEZJWE1FOlRlbXAuIEZpeC4gTXVzdCBiZSByZW1vdmVkICovCi0JcmV0dXJuIHN0YXR1czsKLX0K LQotLyoKLSAqICA9PT09PT09PSBubGRyX2RlbGV0ZSA9PT09PT09PQotICovCi12b2lkIG5sZHJf ZGVsZXRlKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmopCi17Ci0Jc3RydWN0IG92bHlfc2Vj dCAqb3ZseV9zZWN0aW9uOwotCXN0cnVjdCBvdmx5X3NlY3QgKm5leHQ7Ci0JdTE2IGk7Ci0KLQlu bGRyX29iai0+bGRyX2Z4bnMuZXhpdF9meG4oKTsKLQlpZiAobmxkcl9vYmotPnJtbSkKLQkJcm1t X2RlbGV0ZShubGRyX29iai0+cm1tKTsKLQotCWtmcmVlKG5sZHJfb2JqLT5zZWdfdGFibGUpOwot Ci0JaWYgKG5sZHJfb2JqLT5kY2RfbWdyKQotCQlkY2RfZGVzdHJveV9tYW5hZ2VyKG5sZHJfb2Jq LT5kY2RfbWdyKTsKLQotCS8qIEZyZWUgb3ZlcmxheSBub2RlIGluZm9ybWF0aW9uICovCi0JaWYg KG5sZHJfb2JqLT5vdmx5X3RhYmxlKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBubGRyX29iai0+b3Zs eV9ub2RlczsgaSsrKSB7Ci0JCQlvdmx5X3NlY3Rpb24gPQotCQkJICAgIG5sZHJfb2JqLT5vdmx5 X3RhYmxlW2ldLmNyZWF0ZV9zZWN0c19saXN0OwotCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgewot CQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKLQkJCQlrZnJlZShvdmx5X3NlY3Rp b24pOwotCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7Ci0JCQl9Ci0JCQlvdmx5X3NlY3Rpb24gPQot CQkJICAgIG5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmRlbGV0ZV9zZWN0c19saXN0OwotCQkJd2hp bGUgKG92bHlfc2VjdGlvbikgewotCQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsK LQkJCQlrZnJlZShvdmx5X3NlY3Rpb24pOwotCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7Ci0JCQl9 Ci0JCQlvdmx5X3NlY3Rpb24gPQotCQkJICAgIG5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmV4ZWN1 dGVfc2VjdHNfbGlzdDsKLQkJCXdoaWxlIChvdmx5X3NlY3Rpb24pIHsKLQkJCQluZXh0ID0gb3Zs eV9zZWN0aW9uLT5uZXh0X3NlY3Q7Ci0JCQkJa2ZyZWUob3ZseV9zZWN0aW9uKTsKLQkJCQlvdmx5 X3NlY3Rpb24gPSBuZXh0OwotCQkJfQotCQkJb3ZseV9zZWN0aW9uID0gbmxkcl9vYmotPm92bHlf dGFibGVbaV0ub3RoZXJfc2VjdHNfbGlzdDsKLQkJCXdoaWxlIChvdmx5X3NlY3Rpb24pIHsKLQkJ CQluZXh0ID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7Ci0JCQkJa2ZyZWUob3ZseV9zZWN0aW9u KTsKLQkJCQlvdmx5X3NlY3Rpb24gPSBuZXh0OwotCQkJfQotCQl9Ci0JCWtmcmVlKG5sZHJfb2Jq LT5vdmx5X3RhYmxlKTsKLQl9Ci0Ja2ZyZWUobmxkcl9vYmopOwotfQotCi0vKgotICogID09PT09 PT09IG5sZHJfZ2V0X2Z4bl9hZGRyID09PT09PT09Ci0gKi8KLWludCBubGRyX2dldF9meG5fYWRk cihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAotCQkJICAgICBjaGFyICpz dHJfZnhuLCB1MzIgKmFkZHIpCi17Ci0Jc3RydWN0IGRibGxfc3ltX3ZhbCAqZGJsbF9zeW07Ci0J c3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsKLQlpbnQgc3RhdHVzID0gMDsKLQlib29sIHN0 YXR1czEgPSBmYWxzZTsKLQlzMzIgaSA9IDA7Ci0Jc3RydWN0IGxpYl9ub2RlIHJvb3QgPSB7IE5V TEwsIDAsIE5VTEwgfTsKLQotCW5sZHJfb2JqID0gbmxkcl9ub2RlX29iai0+bmxkcl9vYmo7Ci0J LyogQ2FsbGVkIGZyb20gbm9kZV9jcmVhdGUoKSwgbm9kZV9kZWxldGUoKSwgb3Igbm9kZV9ydW4o KS4gKi8KLQlpZiAobmxkcl9ub2RlX29iai0+ZHluYW1pYyAmJiAqbmxkcl9ub2RlX29iai0+cGhh c2Vfc3BsaXQpIHsKLQkJc3dpdGNoIChubGRyX25vZGVfb2JqLT5waGFzZSkgewotCQljYXNlIE5M RFJfQ1JFQVRFOgotCQkJcm9vdCA9IG5sZHJfbm9kZV9vYmotPmNyZWF0ZV9saWI7Ci0JCQlicmVh azsKLQkJY2FzZSBOTERSX0VYRUNVVEU6Ci0JCQlyb290ID0gbmxkcl9ub2RlX29iai0+ZXhlY3V0 ZV9saWI7Ci0JCQlicmVhazsKLQkJY2FzZSBOTERSX0RFTEVURToKLQkJCXJvb3QgPSBubGRyX25v ZGVfb2JqLT5kZWxldGVfbGliOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJ fQotCX0gZWxzZSB7Ci0JCS8qIGZvciBPdmVybGF5IG5vZGVzIG9yIG5vbi1zcGxpdCBEeW5hbWlj IG5vZGVzICovCi0JCXJvb3QgPSBubGRyX25vZGVfb2JqLT5yb290OwotCX0KLQlzdGF0dXMxID0K LQkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9jX2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhu LCAmZGJsbF9zeW0pOwotCWlmICghc3RhdHVzMSkKLQkJc3RhdHVzMSA9Ci0JCSAgICBubGRyX29i ai0+bGRyX2Z4bnMuZ2V0X2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhuLAotCQkJCQkJICAgICZk YmxsX3N5bSk7Ci0KLQkvKiBJZiBzeW1ib2wgbm90IGZvdW5kLCBjaGVjayBkZXBlbmRlbnQgbGli cmFyaWVzICovCi0JaWYgKCFzdGF0dXMxKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCByb290LmRlcF9s aWJzOyBpKyspIHsKLQkJCXN0YXR1czEgPQotCQkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5nZXRf YWRkcl9meG4ocm9vdC5kZXBfbGlic190cmVlCi0JCQkJCQkJICAgIFtpXS5saWIsIHN0cl9meG4s Ci0JCQkJCQkJICAgICZkYmxsX3N5bSk7Ci0JCQlpZiAoIXN0YXR1czEpIHsKLQkJCQlzdGF0dXMx ID0KLQkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgotCQkJCSAgICBnZXRfY19hZGRyX2Z4bihy b290LmRlcF9saWJzX3RyZWVbaV0ubGliLAotCQkJCQkJICAgc3RyX2Z4biwgJmRibGxfc3ltKTsK LQkJCX0KLQkJCWlmIChzdGF0dXMxKSB7Ci0JCQkJLyogU3ltYm9sIGZvdW5kICovCi0JCQkJYnJl YWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogQ2hlY2sgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KLQlp ZiAoIXN0YXR1czEpIHsKLQkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGli czsgaSsrKSB7Ci0JCQlzdGF0dXMxID0KLQkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuCi0JCQkg ICAgZ2V0X2FkZHJfZnhuKG5sZHJfbm9kZV9vYmotPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwKLQkJ CQkJIHN0cl9meG4sICZkYmxsX3N5bSk7Ci0JCQlpZiAoIXN0YXR1czEpIHsKLQkJCQlzdGF0dXMx ID0KLQkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgotCQkJCSAgICBnZXRfY19hZGRyX2Z4bihu bGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZQotCQkJCQkJICAgW2ldLmxpYiwgc3RyX2Z4biwg JmRibGxfc3ltKTsKLQkJCX0KLQkJCWlmIChzdGF0dXMxKSB7Ci0JCQkJLyogU3ltYm9sIGZvdW5k ICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhdHVzMSkKLQkJKmFkZHIg PSBkYmxsX3N5bS0+dmFsdWU7Ci0JZWxzZQotCQlzdGF0dXMgPSAtRVNQSVBFOwotCi0JcmV0dXJu IHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBubGRyX2dldF9ybW1fbWFuYWdlciA9PT09 PT09PQotICogIEdpdmVuIGEgTkxEUiBvYmplY3QsIHJldHJpZXZlIFJNTSBNYW5hZ2VyIEhhbmRs ZQotICovCi1pbnQgbmxkcl9nZXRfcm1tX21hbmFnZXIoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRy LAotCQkJCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqKnJtbV9tZ3IpCi17Ci0JaW50IHN0YXR1cyA9 IDA7Ci0Jc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiA9IG5sZHI7Ci0KLQlpZiAobmxkcikg ewotCQkqcm1tX21nciA9IG5sZHJfb2JqLT5ybW07Ci0JfSBlbHNlIHsKLQkJKnJtbV9tZ3IgPSBO VUxMOwotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gbmxkcl9sb2FkID09PT09PT09Ci0gKi8KLWludCBubGRyX2xvYWQoc3Ry dWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKLQkJICAgICBlbnVtIG5sZHJfcGhh c2UgcGhhc2UpCi17Ci0Jc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsKLQlzdHJ1Y3QgZHNw X3V1aWQgbGliX3V1aWQ7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlubGRyX29iaiA9IG5sZHJfbm9k ZV9vYmotPm5sZHJfb2JqOwotCi0JaWYgKG5sZHJfbm9kZV9vYmotPmR5bmFtaWMpIHsKLQkJbmxk cl9ub2RlX29iai0+cGhhc2UgPSBwaGFzZTsKLQotCQlsaWJfdXVpZCA9IG5sZHJfbm9kZV9vYmot PnV1aWQ7Ci0KLQkJLyogQXQgdGhpcyBwb2ludCwgd2UgbWF5IG5vdCBrbm93IGlmIG5vZGUgaXMg c3BsaXQgaW50bwotCQkgKiBkaWZmZXJlbnQgbGlicmFyaWVzLiBTbyB3ZSdsbCBnbyBhaGVhZCBh bmQgbG9hZCB0aGUKLQkJICogbGlicmFyeSwgYW5kIHRoZW4gc2F2ZSB0aGUgcG9pbnRlciB0byB0 aGUgYXBwcm9wcmlhdGUKLQkJICogbG9jYXRpb24gYWZ0ZXIgd2Uga25vdy4gKi8KLQotCQlzdGF0 dXMgPQotCQkgICAgbG9hZF9saWIobmxkcl9ub2RlX29iaiwgJm5sZHJfbm9kZV9vYmotPnJvb3Qs IGxpYl91dWlkLAotCQkJICAgICBmYWxzZSwgbmxkcl9ub2RlX29iai0+bGliX3BhdGgsIHBoYXNl LCAwKTsKLQotCQlpZiAoIXN0YXR1cykgewotCQkJaWYgKCpubGRyX25vZGVfb2JqLT5waGFzZV9z cGxpdCkgewotCQkJCXN3aXRjaCAocGhhc2UpIHsKLQkJCQljYXNlIE5MRFJfQ1JFQVRFOgotCQkJ CQlubGRyX25vZGVfb2JqLT5jcmVhdGVfbGliID0KLQkJCQkJICAgIG5sZHJfbm9kZV9vYmotPnJv b3Q7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBOTERSX0VYRUNVVEU6Ci0JCQkJCW5sZHJfbm9k ZV9vYmotPmV4ZWN1dGVfbGliID0KLQkJCQkJICAgIG5sZHJfbm9kZV9vYmotPnJvb3Q7Ci0JCQkJ CWJyZWFrOwotCi0JCQkJY2FzZSBOTERSX0RFTEVURToKLQkJCQkJbmxkcl9ub2RlX29iai0+ZGVs ZXRlX2xpYiA9Ci0JCQkJCSAgICBubGRyX25vZGVfb2JqLT5yb290OwotCQkJCQlicmVhazsKLQot CQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0J CWlmIChubGRyX25vZGVfb2JqLT5vdmVybGF5KQotCQkJc3RhdHVzID0gbG9hZF9vdmx5KG5sZHJf bm9kZV9vYmosIHBoYXNlKTsKLQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gbmxkcl91bmxvYWQgPT09PT09PT0KLSAqLwotaW50IG5sZHJfdW5sb2FkKHN0cnVj dCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCi0JCSAgICAgICBlbnVtIG5sZHJfcGhh c2UgcGhhc2UpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGxpYl9ub2RlICpyb290X2xp YiA9IE5VTEw7Ci0JczMyIGkgPSAwOwotCi0JaWYgKG5sZHJfbm9kZV9vYmogIT0gTlVMTCkgewot CQlpZiAobmxkcl9ub2RlX29iai0+ZHluYW1pYykgewotCQkJaWYgKCpubGRyX25vZGVfb2JqLT5w aGFzZV9zcGxpdCkgewotCQkJCXN3aXRjaCAocGhhc2UpIHsKLQkJCQljYXNlIE5MRFJfQ1JFQVRF OgotCQkJCQlyb290X2xpYiA9ICZubGRyX25vZGVfb2JqLT5jcmVhdGVfbGliOwotCQkJCQlicmVh azsKLQkJCQljYXNlIE5MRFJfRVhFQ1VURToKLQkJCQkJcm9vdF9saWIgPSAmbmxkcl9ub2RlX29i ai0+ZXhlY3V0ZV9saWI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTkxEUl9ERUxFVEU6Ci0JCQkJ CXJvb3RfbGliID0gJm5sZHJfbm9kZV9vYmotPmRlbGV0ZV9saWI7Ci0JCQkJCS8qIFVubG9hZCBw ZXJzaXN0ZW50IGxpYnJhcmllcyAqLwotCQkJCQlmb3IgKGkgPSAwOwotCQkJCQkgICAgIGkgPCBu bGRyX25vZGVfb2JqLT5wZXJzX2xpYnM7Ci0JCQkJCSAgICAgaSsrKSB7Ci0JCQkJCQl1bmxvYWRf bGliKG5sZHJfbm9kZV9vYmosCi0JCQkJCQkJICAgJm5sZHJfbm9kZV9vYmotPgotCQkJCQkJCSAg IHBlcnNfbGliX3RhYmxlW2ldKTsKLQkJCQkJfQotCQkJCQlubGRyX25vZGVfb2JqLT5wZXJzX2xp YnMgPSAwOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0J CQl9IGVsc2UgewotCQkJCS8qIFVubG9hZCBtYWluIGxpYnJhcnkgKi8KLQkJCQlyb290X2xpYiA9 ICZubGRyX25vZGVfb2JqLT5yb290OwotCQkJfQotCQkJaWYgKHJvb3RfbGliKQotCQkJCXVubG9h ZF9saWIobmxkcl9ub2RlX29iaiwgcm9vdF9saWIpOwotCQl9IGVsc2UgewotCQkJaWYgKG5sZHJf bm9kZV9vYmotPm92ZXJsYXkpCi0JCQkJdW5sb2FkX292bHkobmxkcl9ub2RlX29iaiwgcGhhc2Up OwotCi0JCX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBhZGRf b3ZseV9pbmZvID09PT09PT09Ci0gKi8KLXN0YXRpYyBpbnQgYWRkX292bHlfaW5mbyh2b2lkICpo YW5kbGUsIHN0cnVjdCBkYmxsX3NlY3RfaW5mbyAqc2VjdF9pbmZvLAotCQkJCXUzMiBhZGRyLCB1 MzIgYnl0ZXMpCi17Ci0JY2hhciAqbm9kZV9uYW1lOwotCWNoYXIgKnNlY3RfbmFtZSA9IChjaGFy ICopc2VjdF9pbmZvLT5uYW1lOwotCWJvb2wgc2VjdF9leGlzdHMgPSBmYWxzZTsKLQljaGFyIHNl cHMgPSAnOic7Ci0JY2hhciAqcGNoOwotCXUxNiBpOwotCXN0cnVjdCBubGRyX29iamVjdCAqbmxk cl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopaGFuZGxlOwotCWludCBzdGF0dXMgPSAwOwot Ci0JLyogSXMgdGhpcyBhbiBvdmVybGF5IHNlY3Rpb24gKGxvYWQgYWRkcmVzcyAhPSBydW4gYWRk cmVzcyk/ICovCi0JaWYgKHNlY3RfaW5mby0+c2VjdF9sb2FkX2FkZHIgPT0gc2VjdF9pbmZvLT5z ZWN0X3J1bl9hZGRyKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyogRmluZCB0aGUgbm9kZSBpdCBi ZWxvbmdzIHRvICovCi0JZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKysp IHsKLQkJbm9kZV9uYW1lID0gbmxkcl9vYmotPm92bHlfdGFibGVbaV0ubm9kZV9uYW1lOwotCQlp ZiAoc3RybmNtcChub2RlX25hbWUsIHNlY3RfbmFtZSArIDEsIHN0cmxlbihub2RlX25hbWUpKSA9 PSAwKSB7Ci0JCQkvKiBGb3VuZCB0aGUgbm9kZSAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYg KCEoaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzKSkKLQkJZ290byBmdW5jX2VuZDsKLQotCS8qIERl dGVybWluZSB3aGljaCBwaGFzZSB0aGlzIHNlY3Rpb24gYmVsb25ncyB0byAqLwotCWZvciAocGNo ID0gc2VjdF9uYW1lICsgMTsgKnBjaCAmJiAqcGNoICE9IHNlcHM7IHBjaCsrKQotCQk7Ci0KLQlp ZiAoKnBjaCkgewotCQlwY2grKzsJCS8qIFNraXAgb3ZlciB0aGUgJzonICovCi0JCWlmIChzdHJu Y21wKHBjaCwgUENSRUFURSwgc3RybGVuKFBDUkVBVEUpKSA9PSAwKSB7Ci0JCQlzdGF0dXMgPQot CQkJICAgIGFkZF9vdmx5X3NlY3Qobmxkcl9vYmosCi0JCQkJCSAgJm5sZHJfb2JqLT4KLQkJCQkJ ICBvdmx5X3RhYmxlW2ldLmNyZWF0ZV9zZWN0c19saXN0LAotCQkJCQkgIHNlY3RfaW5mbywgJnNl Y3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7Ci0JCQlpZiAoIXN0YXR1cyAmJiAhc2VjdF9leGlzdHMp Ci0JCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0uY3JlYXRlX3NlY3RzKys7Ci0KLQkJfSBlbHNl IGlmIChzdHJuY21wKHBjaCwgUERFTEVURSwgc3RybGVuKFBERUxFVEUpKSA9PSAwKSB7Ci0JCQlz dGF0dXMgPQotCQkJICAgIGFkZF9vdmx5X3NlY3Qobmxkcl9vYmosCi0JCQkJCSAgJm5sZHJfb2Jq LT4KLQkJCQkJICBvdmx5X3RhYmxlW2ldLmRlbGV0ZV9zZWN0c19saXN0LAotCQkJCQkgIHNlY3Rf aW5mbywgJnNlY3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7Ci0JCQlpZiAoIXN0YXR1cyAmJiAhc2Vj dF9leGlzdHMpCi0JCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZGVsZXRlX3NlY3RzKys7Ci0K LQkJfSBlbHNlIGlmIChzdHJuY21wKHBjaCwgUEVYRUNVVEUsIHN0cmxlbihQRVhFQ1VURSkpID09 IDApIHsKLQkJCXN0YXR1cyA9Ci0JCQkgICAgYWRkX292bHlfc2VjdChubGRyX29iaiwKLQkJCQkJ ICAmbmxkcl9vYmotPgotCQkJCQkgIG92bHlfdGFibGVbaV0uZXhlY3V0ZV9zZWN0c19saXN0LAot CQkJCQkgIHNlY3RfaW5mbywgJnNlY3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7Ci0JCQlpZiAoIXN0 YXR1cyAmJiAhc2VjdF9leGlzdHMpCi0JCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZXhlY3V0 ZV9zZWN0cysrOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBQdXQgaW4gIm90aGVyIiBzZWN0aW9ucyAq LwotCQkJc3RhdHVzID0KLQkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAotCQkJCQkgICZu bGRyX29iai0+Ci0JCQkJCSAgb3ZseV90YWJsZVtpXS5vdGhlcl9zZWN0c19saXN0LAotCQkJCQkg IHNlY3RfaW5mbywgJnNlY3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7Ci0JCQlpZiAoIXN0YXR1cyAm JiAhc2VjdF9leGlzdHMpCi0JCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0ub3RoZXJfc2VjdHMr KzsKLQotCQl9Ci0JfQotZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBhZGRfb3ZseV9ub2RlID09PT09PT09PQotICogIENhbGxiYWNrIGZ1bmN0aW9uIHBh c3NlZCB0byBkY2RfZ2V0X29iamVjdHMuCi0gKi8KLXN0YXRpYyBpbnQgYWRkX292bHlfbm9kZShz dHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAotCQkJCWVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5 cGUsIHZvaWQgKmhhbmRsZSkKLXsKLQlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gKHN0 cnVjdCBubGRyX29iamVjdCAqKWhhbmRsZTsKLQljaGFyICpub2RlX25hbWUgPSBOVUxMOwotCWNo YXIgKnBidWYgPSBOVUxMOwotCXUzMiBsZW47Ci0Jc3RydWN0IGRjZF9nZW5lcmljb2JqIG9ial9k ZWY7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAob2JqX3R5cGUgIT0gRFNQX0RDRE5PREVUWVBF KQotCQlnb3RvIGZ1bmNfZW5kOwotCi0Jc3RhdHVzID0KLQkgICAgZGNkX2dldF9vYmplY3RfZGVm KG5sZHJfb2JqLT5kY2RfbWdyLCB1dWlkX29iaiwgb2JqX3R5cGUsCi0JCQkgICAgICAgJm9ial9k ZWYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQkvKiBJZiBvdmVybGF5IG5v ZGUsIGFkZCB0byB0aGUgbGlzdCAqLwotCWlmIChvYmpfZGVmLm9ial9kYXRhLm5vZGVfb2JqLmxv YWRfdHlwZSA9PSBOTERSX09WTFlMT0FEKSB7Ci0JCWlmIChubGRyX29iai0+b3ZseV90YWJsZSA9 PSBOVUxMKSB7Ci0JCQlubGRyX29iai0+b3ZseV9ub2RlcysrOwotCQl9IGVsc2UgewotCQkJLyog QWRkIG5vZGUgdG8gdGFibGUgKi8KLQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW25sZHJfb2JqLT5v dmx5X25pZF0udXVpZCA9Ci0JCQkgICAgKnV1aWRfb2JqOwotCQkJbGVuID0KLQkJCSAgICBzdHJs ZW4ob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuYWNfbmFtZSk7Ci0JCQlub2Rl X25hbWUgPSBvYmpfZGVmLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5hY19uYW1lOwotCQkJ cGJ1ZiA9IGt6YWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAocGJ1ZiA9PSBOVUxM KSB7Ci0JCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RybmNweShwYnVm LCBub2RlX25hbWUsIGxlbik7Ci0JCQkJbmxkcl9vYmotPm92bHlfdGFibGVbbmxkcl9vYmotPm92 bHlfbmlkXS4KLQkJCQkgICAgbm9kZV9uYW1lID0gcGJ1ZjsKLQkJCQlubGRyX29iai0+b3ZseV9u aWQrKzsKLQkJCX0KLQkJfQotCX0KLQkvKiBUaGVzZSB3ZXJlIGFsbG9jYXRlZCBpbiBkY2RfZ2V0 X29iamVjdF9kZWYgKi8KLQlrZnJlZShvYmpfZGVmLm9ial9kYXRhLm5vZGVfb2JqLnN0cl9jcmVh dGVfcGhhc2VfZnhuKTsKLQotCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmouc3RyX2V4 ZWN1dGVfcGhhc2VfZnhuKTsKLQotCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmouc3Ry X2RlbGV0ZV9waGFzZV9meG4pOwotCi0Ja2ZyZWUob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5z dHJfaV9hbGdfbmFtZSk7Ci0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0g KiAgPT09PT09PT0gYWRkX292bHlfc2VjdCA9PT09PT09PQotICovCi1zdGF0aWMgaW50IGFkZF9v dmx5X3NlY3Qoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiwKLQkJCQlzdHJ1Y3Qgb3ZseV9z ZWN0ICoqbHN0LAotCQkJCXN0cnVjdCBkYmxsX3NlY3RfaW5mbyAqc2VjdF9pbmYsCi0JCQkJYm9v bCAqZXhpc3RzLCB1MzIgYWRkciwgdTMyIGJ5dGVzKQotewotCXN0cnVjdCBvdmx5X3NlY3QgKm5l d19zZWN0ID0gTlVMTDsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpsYXN0X3NlY3Q7Ci0Jc3RydWN0IG92 bHlfc2VjdCAqb3ZseV9zZWN0aW9uOwotCWludCBzdGF0dXMgPSAwOwotCi0Jb3ZseV9zZWN0aW9u ID0gbGFzdF9zZWN0ID0gKmxzdDsKLQkqZXhpc3RzID0gZmFsc2U7Ci0Jd2hpbGUgKG92bHlfc2Vj dGlvbikgewotCQkvKgotCQkgKiAgTWFrZSBzdXJlIHNlY3Rpb24gaGFzIG5vdCBhbHJlYWR5IGJl ZW4gYWRkZWQuIE11bHRpcGxlCi0JCSAqICAnd3JpdGUnIGNhbGxzIG1heSBiZSBtYWRlIHRvIGxv YWQgdGhlIHNlY3Rpb24uCi0JCSAqLwotCQlpZiAob3ZseV9zZWN0aW9uLT5zZWN0X2xvYWRfYWRk ciA9PSBhZGRyKSB7Ci0JCQkvKiBBbHJlYWR5IGFkZGVkICovCi0JCQkqZXhpc3RzID0gdHJ1ZTsK LQkJCWJyZWFrOwotCQl9Ci0JCWxhc3Rfc2VjdCA9IG92bHlfc2VjdGlvbjsKLQkJb3ZseV9zZWN0 aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7Ci0JfQotCi0JaWYgKCFvdmx5X3NlY3Rpb24p IHsKLQkJLyogTmV3IHNlY3Rpb24gKi8KLQkJbmV3X3NlY3QgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3Qgb3ZseV9zZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXdfc2VjdCA9PSBOVUxMKSB7Ci0J CQlzdGF0dXMgPSAtRU5PTUVNOwotCQl9IGVsc2UgewotCQkJbmV3X3NlY3QtPnNlY3RfbG9hZF9h ZGRyID0gYWRkcjsKLQkJCW5ld19zZWN0LT5zZWN0X3J1bl9hZGRyID0gc2VjdF9pbmYtPnNlY3Rf cnVuX2FkZHIgKwotCQkJICAgIChhZGRyIC0gc2VjdF9pbmYtPnNlY3RfbG9hZF9hZGRyKTsKLQkJ CW5ld19zZWN0LT5zaXplID0gYnl0ZXM7Ci0JCQluZXdfc2VjdC0+cGFnZSA9IHNlY3RfaW5mLT50 eXBlOwotCQl9Ci0KLQkJLyogQWRkIHRvIHRoZSBsaXN0ICovCi0JCWlmICghc3RhdHVzKSB7Ci0J CQlpZiAoKmxzdCA9PSBOVUxMKSB7Ci0JCQkJLyogRmlyc3QgaW4gdGhlIGxpc3QgKi8KLQkJCQkq bHN0ID0gbmV3X3NlY3Q7Ci0JCQl9IGVsc2UgewotCQkJCWxhc3Rfc2VjdC0+bmV4dF9zZWN0ID0g bmV3X3NlY3Q7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IGZha2Vfb3ZseV93cml0ZSA9PT09PT09PQotICovCi1zdGF0aWMgczMyIGZha2Vf b3ZseV93cml0ZSh2b2lkICpoYW5kbGUsIHUzMiBkc3BfYWRkcmVzcywgdm9pZCAqYnVmLCB1MzIg Ynl0ZXMsCi0JCQkgICBzMzIgbXR5cGUpCi17Ci0JcmV0dXJuIChzMzIpIGJ5dGVzOwotfQotCi0v KgotICogID09PT09PT09IGZyZWVfc2VjdHMgPT09PT09PT0KLSAqLwotc3RhdGljIHZvaWQgZnJl ZV9zZWN0cyhzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLAotCQkgICAgICAgc3RydWN0IG92 bHlfc2VjdCAqcGhhc2Vfc2VjdHMsIHUxNiBhbGxvY19udW0pCi17Ci0Jc3RydWN0IG92bHlfc2Vj dCAqb3ZseV9zZWN0aW9uID0gcGhhc2Vfc2VjdHM7Ci0JdTE2IGkgPSAwOwotCWJvb2wgcmV0Owot Ci0Jd2hpbGUgKG92bHlfc2VjdGlvbiAmJiBpIDwgYWxsb2NfbnVtKSB7Ci0JCS8qICdEZWFsbG9j YXRlJyAqLwotCQkvKiBzZWdpZCAtIHBhZ2Ugbm90IHN1cHBvcnRlZCB5ZXQgKi8KLQkJLyogUmVz ZXJ2ZWQgbWVtb3J5ICovCi0JCXJldCA9Ci0JCSAgICBybW1fZnJlZShubGRyX29iai0+cm1tLCAw LCBvdmx5X3NlY3Rpb24tPnNlY3RfcnVuX2FkZHIsCi0JCQkgICAgIG92bHlfc2VjdGlvbi0+c2l6 ZSwgdHJ1ZSk7Ci0JCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OwotCQlp Kys7Ci0JfQotfQotCi0vKgotICogID09PT09PT09IGdldF9zeW1ib2xfdmFsdWUgPT09PT09PT0K LSAqICBGaW5kIHN5bWJvbCBpbiBsaWJyYXJ5J3MgYmFzZSBpbWFnZS4gIElmIG5vdCB0aGVyZSwg Y2hlY2sgZGVwZW5kZW50Ci0gKiAgbGlicmFyaWVzLgotICovCi1zdGF0aWMgYm9vbCBnZXRfc3lt Ym9sX3ZhbHVlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcGFyZywgdm9pZCAqcm1tX2hhbmRsZSwKLQkJ CSAgICAgY2hhciAqc3ltX25hbWUsIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW0pCi17Ci0Jc3Ry dWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiA9IChzdHJ1Y3Qgbmxkcl9vYmplY3QgKiloYW5kbGU7 Ci0Jc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiA9Ci0JICAgIChzdHJ1Y3Qg bmxkcl9ub2Rlb2JqZWN0ICopcm1tX2hhbmRsZTsKLQlzdHJ1Y3QgbGliX25vZGUgKnJvb3QgPSAo c3RydWN0IGxpYl9ub2RlICopcGFyZzsKLQl1MTYgaTsKLQlib29sIHN0YXR1cyA9IGZhbHNlOwot Ci0JLyogY2hlY2sgdGhlIGJhc2UgaW1hZ2UgKi8KLQlzdGF0dXMgPSBubGRyX29iai0+bGRyX2Z4 bnMuZ2V0X2FkZHJfZnhuKG5sZHJfb2JqLT5iYXNlX2xpYiwKLQkJCQkJCSBzeW1fbmFtZSwgc3lt KTsKLQlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0KLQkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5n ZXRfY19hZGRyX2Z4bihubGRyX29iai0+YmFzZV9saWIsCi0JCQkJCQkJc3ltX25hbWUsIHN5bSk7 Ci0KLQkvKgotCSAqICBDaGVjayBpbiByb290IGxpYiBpdHNlbGYuIElmIHRoZSBsaWJyYXJ5IGNv bnNpc3RzIG9mCi0JICogIG11bHRpcGxlIG9iamVjdCBmaWxlcyBsaW5rZWQgdG9nZXRoZXIsIHNv bWUgc3ltYm9scyBpbiB0aGUKLQkgKiAgbGlicmFyeSBtYXkgbmVlZCB0byBiZSByZXNvbHZlZC4K LQkgKi8KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBubGRyX29iai0+bGRyX2Z4bnMuZ2V0 X2FkZHJfZnhuKHJvb3QtPmxpYiwgc3ltX25hbWUsCi0JCQkJCQkJIHN5bSk7Ci0JCWlmICghc3Rh dHVzKSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5nZXRfY19hZGRy X2Z4bihyb290LT5saWIsCi0JCQkJCQkJICAgICAgc3ltX25hbWUsIHN5bSk7Ci0JCX0KLQl9Ci0K LQkvKgotCSAqICBDaGVjayBpbiByb290IGxpYidzIGRlcGVuZGVudCBsaWJyYXJpZXMsIGJ1dCBu b3QgZGVwZW5kZW50Ci0JICogIGxpYnJhcmllcycgZGVwZW5kZW50cy4KLQkgKi8KLQlpZiAoIXN0 YXR1cykgewotCQlmb3IgKGkgPSAwOyBpIDwgcm9vdC0+ZGVwX2xpYnM7IGkrKykgewotCQkJc3Rh dHVzID0KLQkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2FkZHJfZnhuKHJvb3QtPgotCQkJ CQkJCSAgICBkZXBfbGlic190cmVlCi0JCQkJCQkJICAgIFtpXS5saWIsCi0JCQkJCQkJICAgIHN5 bV9uYW1lLCBzeW0pOwotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzdGF0dXMgPQotCQkJCSAgICBu bGRyX29iai0+bGRyX2Z4bnMuCi0JCQkJICAgIGdldF9jX2FkZHJfZnhuKHJvb3QtPmRlcF9saWJz X3RyZWVbaV0ubGliLAotCQkJCQkJICAgc3ltX25hbWUsIHN5bSk7Ci0JCQl9Ci0JCQlpZiAoc3Rh dHVzKSB7Ci0JCQkJLyogU3ltYm9sIGZvdW5kICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9 Ci0JLyoKLQkgKiBDaGVjayBpbiBwZXJzaXN0ZW50IGxpYnJhcmllcwotCSAqLwotCWlmICghc3Rh dHVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBubGRyX25vZGVfb2JqLT5wZXJzX2xpYnM7IGkrKykg ewotCQkJc3RhdHVzID0KLQkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuCi0JCQkgICAgZ2V0X2Fk ZHJfZnhuKG5sZHJfbm9kZV9vYmotPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwKLQkJCQkJIHN5bV9u YW1lLCBzeW0pOwotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlzdGF0dXMgPSBubGRyX29iai0+bGRy X2Z4bnMuZ2V0X2NfYWRkcl9meG4KLQkJCQkgICAgKG5sZHJfbm9kZV9vYmotPnBlcnNfbGliX3Rh YmxlW2ldLmxpYiwKLQkJCQkgICAgIHN5bV9uYW1lLCBzeW0pOwotCQkJfQotCQkJaWYgKHN0YXR1 cykgewotCQkJCS8qIFN5bWJvbCBmb3VuZCAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQot Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBsb2FkX2xpYiA9PT09PT09 PQotICogIFJlY3Vyc2l2ZWx5IGxvYWQgbGlicmFyeSBhbmQgYWxsIGl0cyBkZXBlbmRlbnQgbGli cmFyaWVzLiBUaGUgbGlicmFyeQotICogIHdlJ3JlIGxvYWRpbmcgaXMgc3BlY2lmaWVkIGJ5IGEg dXVpZC4KLSAqLwotc3RhdGljIGludCBsb2FkX2xpYihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpu bGRyX25vZGVfb2JqLAotCQkJICAgc3RydWN0IGxpYl9ub2RlICpyb290LCBzdHJ1Y3QgZHNwX3V1 aWQgdXVpZCwKLQkJCSAgIGJvb2wgcm9vdF9wcnN0bnQsCi0JCQkgICBzdHJ1Y3QgZGJsbF9saWJy YXJ5X29iaiAqKmxpYl9wYXRoLAotCQkJICAgZW51bSBubGRyX3BoYXNlIHBoYXNlLCB1MTYgZGVw dGgpCi17Ci0Jc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiA9IG5sZHJfbm9kZV9vYmotPm5s ZHJfb2JqOwotCXUxNiBuZF9saWJzID0gMDsJLyogTnVtYmVyIG9mIGRlcGVuZGVudCBsaWJyYXJp ZXMgKi8KLQl1MTYgbnBfbGlicyA9IDA7CS8qIE51bWJlciBvZiBwZXJzaXN0ZW50IGxpYnJhcmll cyAqLwotCXUxNiBuZF9saWJzX2xvYWRlZCA9IDA7CS8qIE51bWJlciBvZiBkZXAuIGxpYnJhcmll cyBsb2FkZWQgKi8KLQl1MTYgaTsKLQl1MzIgZW50cnk7Ci0JdTMyIGR3X2J1Zl9zaXplID0gTkxE Ul9NQVhQQVRITEVOR1RIOwotCWRibGxfZmxhZ3MgZmxhZ3MgPSBEQkxMX1NZTUIgfCBEQkxMX0NP REUgfCBEQkxMX0RBVEEgfCBEQkxMX0RZTkFNSUM7Ci0Jc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0 dHJzOwotCWNoYXIgKnBzel9maWxlX25hbWUgPSBOVUxMOwotCXN0cnVjdCBkc3BfdXVpZCAqZGVw X2xpYl91dWlfZHMgPSBOVUxMOwotCWJvb2wgKnBlcnNpc3RlbnRfZGVwX2xpYnMgPSBOVUxMOwot CWludCBzdGF0dXMgPSAwOwotCWJvb2wgbGliX3N0YXR1cyA9IGZhbHNlOwotCXN0cnVjdCBsaWJf bm9kZSAqZGVwX2xpYjsKLQotCWlmIChkZXB0aCA+IE1BWERFUFRIKSB7Ci0JCS8qIEVycm9yICov Ci0JfQotCXJvb3QtPmxpYiA9IE5VTEw7Ci0JLyogQWxsb2NhdGUgYSBidWZmZXIgZm9yIGxpYnJh cnkgZmlsZSBuYW1lIG9mIHNpemUgREJMX01BWFBBVEhMRU5HVEggKi8KLQlwc3pfZmlsZV9uYW1l ID0ga3phbGxvYyhEQkxMX01BWFBBVEhMRU5HVEgsIEdGUF9LRVJORUwpOwotCWlmIChwc3pfZmls ZV9uYW1lID09IE5VTEwpCi0JCXN0YXR1cyA9IC1FTk9NRU07Ci0KLQlpZiAoIXN0YXR1cykgewot CQkvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgKi8KLQkJaWYgKGRlcHRoID09IDApIHsK LQkJCXN0YXR1cyA9Ci0JCQkgICAgZGNkX2dldF9saWJyYXJ5X25hbWUobmxkcl9ub2RlX29iai0+ bmxkcl9vYmotPgotCQkJCQkJIGRjZF9tZ3IsICZ1dWlkLCBwc3pfZmlsZV9uYW1lLAotCQkJCQkJ ICZkd19idWZfc2l6ZSwgcGhhc2UsCi0JCQkJCQkgbmxkcl9ub2RlX29iai0+cGhhc2Vfc3BsaXQp OwotCQl9IGVsc2UgewotCQkJLyogRGVwZW5kZW50IGxpYnJhcmllcyBhcmUgcmVnaXN0ZXJlZCB3 aXRoIGEgcGhhc2UgKi8KLQkJCXN0YXR1cyA9Ci0JCQkgICAgZGNkX2dldF9saWJyYXJ5X25hbWUo bmxkcl9ub2RlX29iai0+bmxkcl9vYmotPgotCQkJCQkJIGRjZF9tZ3IsICZ1dWlkLCBwc3pfZmls ZV9uYW1lLAotCQkJCQkJICZkd19idWZfc2l6ZSwgTkxEUl9OT1BIQVNFLAotCQkJCQkJIE5VTEwp OwotCQl9Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCS8qIE9wZW4gdGhlIGxpYnJhcnksIGRvbid0 IGxvYWQgc3ltYm9scyAqLwotCQlzdGF0dXMgPQotCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLm9w ZW5fZnhuKG5sZHJfb2JqLT5kYmxsLCBwc3pfZmlsZV9uYW1lLAotCQkJCQkJREJMTF9OT0xPQUQs ICZyb290LT5saWIpOwotCX0KLQkvKiBEb25lIHdpdGggZmlsZSBuYW1lICovCi0Ja2ZyZWUocHN6 X2ZpbGVfbmFtZSk7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgbGlicmFyeSBub3QgYWxyZWFkeSBs b2FkZWQgKi8KLQlpZiAoIXN0YXR1cyAmJiByb290X3Byc3RudCkgewotCQlsaWJfc3RhdHVzID0K LQkJICAgIGZpbmRfaW5fcGVyc2lzdGVudF9saWJfYXJyYXkobmxkcl9ub2RlX29iaiwgcm9vdC0+ bGliKTsKLQkJLyogQ2xvc2UgbGlicmFyeSAqLwotCQlpZiAobGliX3N0YXR1cykgewotCQkJbmxk cl9vYmotPmxkcl9meG5zLmNsb3NlX2Z4bihyb290LT5saWIpOwotCQkJcmV0dXJuIDA7Ci0JCX0K LQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJLyogQ2hlY2sgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY2ll cy4gKi8KLQkJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKLQkJCWlmIChyb290LT5saWIg PT0gbGliX3BhdGhbaV0pIHsKLQkJCQkvKiBUaGlzIGNvbmRpdGlvbiBjb3VsZCBiZSBjaGVja2Vk IGJ5IGEKLQkJCQkgKiB0b29sIGF0IGJ1aWxkIHRpbWUuICovCi0JCQkJc3RhdHVzID0gLUVJTFNF UTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBBZGQgbGlicmFyeSB0byBj dXJyZW50IHBhdGggaW4gZGVwZW5kZW5jeSB0cmVlICovCi0JCWxpYl9wYXRoW2RlcHRoXSA9IHJv b3QtPmxpYjsKLQkJZGVwdGgrKzsKLQkJLyogR2V0IG51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFy aWVzICovCi0JCXN0YXR1cyA9Ci0JCSAgICBkY2RfZ2V0X251bV9kZXBfbGlicyhubGRyX25vZGVf b2JqLT5ubGRyX29iai0+ZGNkX21nciwKLQkJCQkJICZ1dWlkLCAmbmRfbGlicywgJm5wX2xpYnMs IHBoYXNlKTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJaWYgKCEoKm5sZHJfbm9kZV9vYmotPnBo YXNlX3NwbGl0KSkKLQkJCW5wX2xpYnMgPSAwOwotCi0JCS8qIG5kX2xpYnMgPSAjb2YgZGVwZW5k ZW50IGxpYnJhcmllcyAqLwotCQlyb290LT5kZXBfbGlicyA9IG5kX2xpYnMgLSBucF9saWJzOwot CQlpZiAobmRfbGlicyA+IDApIHsKLQkJCWRlcF9saWJfdXVpX2RzID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IGRzcF91dWlkKSAqCi0JCQkJCQkJbmRfbGlicywgR0ZQX0tFUk5FTCk7Ci0JCQlwZXJz aXN0ZW50X2RlcF9saWJzID0KLQkJCQlremFsbG9jKHNpemVvZihib29sKSAqIG5kX2xpYnMsIEdG UF9LRVJORUwpOwotCQkJaWYgKCFkZXBfbGliX3V1aV9kcyB8fCAhcGVyc2lzdGVudF9kZXBfbGli cykKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCi0JCQlpZiAocm9vdC0+ZGVwX2xpYnMgPiAwKSB7 Ci0JCQkJLyogQWxsb2NhdGUgYXJyYXlzIGZvciBkZXBlbmRlbnQgbGliIFVVSURzLAotCQkJCSAq IGxpYiBub2RlcyAqLwotCQkJCXJvb3QtPmRlcF9saWJzX3RyZWUgPSBremFsbG9jCi0JCQkJCQko c2l6ZW9mKHN0cnVjdCBsaWJfbm9kZSkgKgotCQkJCQkJKHJvb3QtPmRlcF9saWJzKSwgR0ZQX0tF Uk5FTCk7Ci0JCQkJaWYgKCEocm9vdC0+ZGVwX2xpYnNfdHJlZSkpCi0JCQkJCXN0YXR1cyA9IC1F Tk9NRU07Ci0KLQkJCX0KLQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQkvKiBHZXQgdGhlIGRlcGVu ZGVudCBsaWJyYXJ5IFVVSURzICovCi0JCQkJc3RhdHVzID0KLQkJCQkgICAgZGNkX2dldF9kZXBf bGlicyhubGRyX25vZGVfb2JqLT4KLQkJCQkJCSAgICAgbmxkcl9vYmotPmRjZF9tZ3IsICZ1dWlk LAotCQkJCQkJICAgICBuZF9saWJzLCBkZXBfbGliX3V1aV9kcywKLQkJCQkJCSAgICAgcGVyc2lz dGVudF9kZXBfbGlicywKLQkJCQkJCSAgICAgcGhhc2UpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoK LQkgKiAgUmVjdXJzaXZlbHkgbG9hZCBkZXBlbmRlbnQgbGlicmFyaWVzLgotCSAqLwotCWlmICgh c3RhdHVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZF9saWJzOyBpKyspIHsKLQkJCS8qIElmIHJv b3QgbGlicmFyeSBpcyBOT1QgcGVyc2lzdGVudCwgYW5kIGRlcCBsaWJyYXJ5Ci0JCQkgKiBpcywg dGhlbiByZWNvcmQgaXQuICBJZiByb290IGxpYnJhcnkgSVMgcGVyc2lzdGVudCwKLQkJCSAqIHRo ZSBkZXBsaWIgaXMgYWxyZWFkeSBpbmNsdWRlZCAqLwotCQkJaWYgKCFyb290X3Byc3RudCAmJiBw ZXJzaXN0ZW50X2RlcF9saWJzW2ldICYmCi0JCQkgICAgKm5sZHJfbm9kZV9vYmotPnBoYXNlX3Nw bGl0KSB7Ci0JCQkJaWYgKChubGRyX25vZGVfb2JqLT5wZXJzX2xpYnMpID49IE1BWExJQlMpIHsK LQkJCQkJc3RhdHVzID0gLUVJTFNFUTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyogQWxs b2NhdGUgbGlicmFyeSBvdXRzaWRlIG9mIHBoYXNlICovCi0JCQkJZGVwX2xpYiA9Ci0JCQkJICAg ICZubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZQotCQkJCSAgICBbbmxkcl9ub2RlX29iai0+ cGVyc19saWJzXTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHJvb3RfcHJzdG50KQotCQkJCQlwZXJz aXN0ZW50X2RlcF9saWJzW2ldID0gdHJ1ZTsKLQotCQkJCS8qIEFsbG9jYXRlIGxpYnJhcnkgd2l0 aGluIHBoYXNlICovCi0JCQkJZGVwX2xpYiA9ICZyb290LT5kZXBfbGlic190cmVlW25kX2xpYnNf bG9hZGVkXTsKLQkJCX0KLQotCQkJc3RhdHVzID0gbG9hZF9saWIobmxkcl9ub2RlX29iaiwgZGVw X2xpYiwKLQkJCQkJICBkZXBfbGliX3V1aV9kc1tpXSwKLQkJCQkJICBwZXJzaXN0ZW50X2RlcF9s aWJzW2ldLCBsaWJfcGF0aCwKLQkJCQkJICBwaGFzZSwgZGVwdGgpOwotCi0JCQlpZiAoIXN0YXR1 cykgewotCQkJCWlmICgoc3RhdHVzICE9IDApICYmCi0JCQkJICAgICFyb290X3Byc3RudCAmJiBw ZXJzaXN0ZW50X2RlcF9saWJzW2ldICYmCi0JCQkJICAgICpubGRyX25vZGVfb2JqLT5waGFzZV9z cGxpdCkgewotCQkJCQkobmxkcl9ub2RlX29iai0+cGVyc19saWJzKSsrOwotCQkJCX0gZWxzZSB7 Ci0JCQkJCWlmICghcGVyc2lzdGVudF9kZXBfbGlic1tpXSB8fAotCQkJCQkgICAgISgqbmxkcl9u b2RlX29iai0+cGhhc2Vfc3BsaXQpKSB7Ci0JCQkJCQluZF9saWJzX2xvYWRlZCsrOwotCQkJCQl9 Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCS8qIE5v dyB3ZSBjYW4gbG9hZCB0aGUgcm9vdCBsaWJyYXJ5ICovCi0JaWYgKCFzdGF0dXMpIHsKLQkJbmV3 X2F0dHJzID0gbmxkcl9vYmotPmxkcl9hdHRyczsKLQkJbmV3X2F0dHJzLnN5bV9hcmcgPSByb290 OwotCQluZXdfYXR0cnMucm1tX2hhbmRsZSA9IG5sZHJfbm9kZV9vYmo7Ci0JCW5ld19hdHRycy5p bnB1dF9wYXJhbXMgPSBubGRyX25vZGVfb2JqLT5wcml2X3JlZjsKLQkJbmV3X2F0dHJzLmJhc2Vf aW1hZ2UgPSBmYWxzZTsKLQotCQlzdGF0dXMgPQotCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLmxv YWRfZnhuKHJvb3QtPmxpYiwgZmxhZ3MsICZuZXdfYXR0cnMsCi0JCQkJCQkmZW50cnkpOwotCX0K LQotCS8qCi0JICogIEluIGNhc2Ugb2YgZmFpbHVyZSwgdW5sb2FkIGFueSBkZXBlbmRlbnQgbGli cmFyaWVzIHRoYXQKLQkgKiAgd2VyZSBsb2FkZWQsIGFuZCBjbG9zZSB0aGUgcm9vdCBsaWJyYXJ5 LgotCSAqICAoUGVyc2lzdGVudCBsaWJyYXJpZXMgYXJlIHVubG9hZGVkIGZyb20gdGhlIHZlcnkg dG9wKQotCSAqLwotCWlmIChzdGF0dXMpIHsKLQkJaWYgKHBoYXNlICE9IE5MRFJfRVhFQ1VURSkg ewotCQkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGliczsgaSsrKQotCQkJ CXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwKLQkJCQkJICAgJm5sZHJfbm9kZV9vYmotPnBlcnNf bGliX3RhYmxlW2ldKTsKLQotCQkJbmxkcl9ub2RlX29iai0+cGVyc19saWJzID0gMDsKLQkJfQot CQlmb3IgKGkgPSAwOyBpIDwgbmRfbGlic19sb2FkZWQ7IGkrKykKLQkJCXVubG9hZF9saWIobmxk cl9ub2RlX29iaiwgJnJvb3QtPmRlcF9saWJzX3RyZWVbaV0pOwotCi0JCWlmIChyb290LT5saWIp Ci0JCQlubGRyX29iai0+bGRyX2Z4bnMuY2xvc2VfZnhuKHJvb3QtPmxpYik7Ci0KLQl9Ci0KLQkv KiBHb2luZyB1cCBvbmUgbm9kZSBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlICovCi0JZGVwdGgtLTsK LQotCWtmcmVlKGRlcF9saWJfdXVpX2RzKTsKLQlkZXBfbGliX3V1aV9kcyA9IE5VTEw7Ci0KLQlr ZnJlZShwZXJzaXN0ZW50X2RlcF9saWJzKTsKLQlwZXJzaXN0ZW50X2RlcF9saWJzID0gTlVMTDsK LQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbG9hZF9vdmx5ID09PT09 PT09Ci0gKi8KLXN0YXRpYyBpbnQgbG9hZF9vdmx5KHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5s ZHJfbm9kZV9vYmosCi0JCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQotewotCXN0cnVjdCBu bGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKLQlzdHJ1Y3Qg b3ZseV9ub2RlICpwb19ub2RlID0gTlVMTDsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpwaGFzZV9zZWN0 cyA9IE5VTEw7Ci0Jc3RydWN0IG92bHlfc2VjdCAqb3RoZXJfc2VjdHNfbGlzdCA9IE5VTEw7Ci0J dTE2IGk7Ci0JdTE2IGFsbG9jX251bSA9IDA7Ci0JdTE2IG90aGVyX2FsbG9jID0gMDsKLQl1MTYg KnJlZl9jb3VudCA9IE5VTEw7Ci0JdTE2ICpvdGhlcl9yZWYgPSBOVUxMOwotCXUzMiBieXRlczsK LQlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdmx5X3NlY3Rpb247Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQkv KiBGaW5kIHRoZSBub2RlIGluIHRoZSB0YWJsZSAqLwotCWZvciAoaSA9IDA7IGkgPCBubGRyX29i ai0+b3ZseV9ub2RlczsgaSsrKSB7Ci0JCWlmIChpc19lcXVhbF91dWlkCi0JCSAgICAoJm5sZHJf bm9kZV9vYmotPnV1aWQsICZubGRyX29iai0+b3ZseV90YWJsZVtpXS51dWlkKSkgewotCQkJLyog Rm91bmQgaXQgKi8KLQkJCXBvX25vZGUgPSAmKG5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldKTsKLQkJ CWJyZWFrOwotCQl9Ci0JfQotCi0KLQlpZiAoIXBvX25vZGUpIHsKLQkJc3RhdHVzID0gLUVOT0VO VDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0KLQlzd2l0Y2ggKHBoYXNlKSB7Ci0JY2FzZSBOTERS X0NSRUFURToKLQkJcmVmX2NvdW50ID0gJihwb19ub2RlLT5jcmVhdGVfcmVmKTsKLQkJb3RoZXJf cmVmID0gJihwb19ub2RlLT5vdGhlcl9yZWYpOwotCQlwaGFzZV9zZWN0cyA9IHBvX25vZGUtPmNy ZWF0ZV9zZWN0c19saXN0OwotCQlvdGhlcl9zZWN0c19saXN0ID0gcG9fbm9kZS0+b3RoZXJfc2Vj dHNfbGlzdDsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MRFJfRVhFQ1VURToKLQkJcmVmX2NvdW50ID0g Jihwb19ub2RlLT5leGVjdXRlX3JlZik7Ci0JCXBoYXNlX3NlY3RzID0gcG9fbm9kZS0+ZXhlY3V0 ZV9zZWN0c19saXN0OwotCQlicmVhazsKLQotCWNhc2UgTkxEUl9ERUxFVEU6Ci0JCXJlZl9jb3Vu dCA9ICYocG9fbm9kZS0+ZGVsZXRlX3JlZik7Ci0JCXBoYXNlX3NlY3RzID0gcG9fbm9kZS0+ZGVs ZXRlX3NlY3RzX2xpc3Q7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0J aWYgKHJlZl9jb3VudCA9PSBOVUxMKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JaWYgKCpyZWZfY291 bnQgIT0gMCkKLQkJZ290byBmdW5jX2VuZDsKLQotCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBv dmVybGF5IHNlY3Rpb25zIG9mIHRoaXMgcGhhc2UgKi8KLQlvdmx5X3NlY3Rpb24gPSBwaGFzZV9z ZWN0czsKLQl3aGlsZSAob3ZseV9zZWN0aW9uKSB7Ci0JCS8qIGFsbG9jYXRlICovLyogcGFnZSBu b3Qgc3VwcG9ydGVkIHlldCAqLwotCQkvKiByZXNlcnZlICovLyogYWxpZ24gKi8KLQkJc3RhdHVz ID0gcm1tX2FsbG9jKG5sZHJfb2JqLT5ybW0sIDAsIG92bHlfc2VjdGlvbi0+c2l6ZSwgMCwKLQkJ CQkgICAmKG92bHlfc2VjdGlvbi0+c2VjdF9ydW5fYWRkciksIHRydWUpOwotCQlpZiAoIXN0YXR1 cykgewotCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7Ci0JCQlhbGxv Y19udW0rKzsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChvdGhlcl9yZWYg JiYgKm90aGVyX3JlZiA9PSAwKSB7Ci0JCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBvdGhlciBv dmVybGF5IHNlY3Rpb25zCi0JCSAqIChjcmVhdGUgcGhhc2UpICovCi0JCWlmICghc3RhdHVzKSB7 Ci0JCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OwotCQkJd2hpbGUgKG92bHlfc2Vj dGlvbikgewotCQkJCS8qIHBhZ2Ugbm90IHN1cHBvcnRlZCAqLy8qIGFsaWduICovCi0JCQkJLyog cmVzZXJ2ZSAqLwotCQkJCXN0YXR1cyA9Ci0JCQkJICAgIHJtbV9hbGxvYyhubGRyX29iai0+cm1t LCAwLAotCQkJCQkgICAgICBvdmx5X3NlY3Rpb24tPnNpemUsIDAsCi0JCQkJCSAgICAgICYob3Zs eV9zZWN0aW9uLT5zZWN0X3J1bl9hZGRyKSwKLQkJCQkJICAgICAgdHJ1ZSk7Ci0JCQkJaWYgKCFz dGF0dXMpIHsKLQkJCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7Ci0J CQkJCW90aGVyX2FsbG9jKys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ fQotCQl9Ci0JfQotCWlmICgqcmVmX2NvdW50ID09IDApIHsKLQkJaWYgKCFzdGF0dXMpIHsKLQkJ CS8qIExvYWQgc2VjdGlvbnMgZm9yIHRoaXMgcGhhc2UgKi8KLQkJCW92bHlfc2VjdGlvbiA9IHBo YXNlX3NlY3RzOwotCQkJd2hpbGUgKG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7Ci0JCQkJYnl0 ZXMgPQotCQkJCSAgICAoKm5sZHJfb2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgotCQkJ CQkJCSAgIHByaXZfcmVmLAotCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+Ci0JCQkJCQkJICAgc2Vj dF9ydW5fYWRkciwKLQkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPgotCQkJCQkJCSAgIHNlY3RfbG9h ZF9hZGRyLAotCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+c2l6ZSwKLQkJCQkJCQkgICBvdmx5X3Nl Y3Rpb24tPnBhZ2UpOwotCQkJCWlmIChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCi0JCQkJ CXN0YXR1cyA9IC1FUEVSTTsKLQotCQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4 dF9zZWN0OwotCQkJfQotCQl9Ci0JfQotCWlmIChvdGhlcl9yZWYgJiYgKm90aGVyX3JlZiA9PSAw KSB7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkvKiBMb2FkIG90aGVyIHNlY3Rpb25zIChjcmVhdGUg cGhhc2UpICovCi0JCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OwotCQkJd2hpbGUg KG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7Ci0JCQkJYnl0ZXMgPQotCQkJCSAgICAoKm5sZHJf b2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgotCQkJCQkJCSAgIHByaXZfcmVmLAotCQkJ CQkJCSAgIG92bHlfc2VjdGlvbi0+Ci0JCQkJCQkJICAgc2VjdF9ydW5fYWRkciwKLQkJCQkJCQkg ICBvdmx5X3NlY3Rpb24tPgotCQkJCQkJCSAgIHNlY3RfbG9hZF9hZGRyLAotCQkJCQkJCSAgIG92 bHlfc2VjdGlvbi0+c2l6ZSwKLQkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPnBhZ2UpOwotCQkJCWlm IChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCi0JCQkJCXN0YXR1cyA9IC1FUEVSTTsKLQot CQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OwotCQkJfQotCQl9Ci0J fQotCWlmIChzdGF0dXMpIHsKLQkJLyogJ0RlYWxsb2NhdGUnIG1lbW9yeSAqLwotCQlmcmVlX3Nl Y3RzKG5sZHJfb2JqLCBwaGFzZV9zZWN0cywgYWxsb2NfbnVtKTsKLQkJZnJlZV9zZWN0cyhubGRy X29iaiwgb3RoZXJfc2VjdHNfbGlzdCwgb3RoZXJfYWxsb2MpOwotCX0KLWZ1bmNfZW5kOgotCWlm ICghc3RhdHVzICYmIChyZWZfY291bnQgIT0gTlVMTCkpIHsKLQkJKnJlZl9jb3VudCArPSAxOwot CQlpZiAob3RoZXJfcmVmKQotCQkJKm90aGVyX3JlZiArPSAxOwotCi0JfQotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSByZW1vdGVfYWxsb2MgPT09PT09PT0KLSAqLwot c3RhdGljIGludCByZW1vdGVfYWxsb2Modm9pZCAqKnJlZiwgdTE2IG1lbV9zZWN0LCB1MzIgc2l6 ZSwKLQkJCSAgICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsCi0JCQkgICAgICAgczMy IHNlZ21udF9pZCwgczMyIHJlcSwKLQkJCSAgICAgICBib29sIHJlc2VydmUpCi17Ci0Jc3RydWN0 IG5sZHJfbm9kZW9iamVjdCAqaG5vZGUgPSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKXJlZjsK LQlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOwotCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAq cm1tOwotCXUxNiBtZW1fcGhhc2VfYml0ID0gTUFYRkxBR1M7Ci0JdTE2IHNlZ2lkID0gMDsKLQl1 MTYgaTsKLQl1MTYgbWVtX3NlY3RfdHlwZTsKLQl1MzIgd29yZF9zaXplOwotCXN0cnVjdCBybW1f YWRkciAqcm1tX2FkZHJfb2JqID0gKHN0cnVjdCBybW1fYWRkciAqKWRzcF9hZGRyZXNzOwotCWJv b2wgbWVtX2xvYWRfcmVxID0gZmFsc2U7Ci0JaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0 byBmYWlsICovCi0KLQlubGRyX29iaiA9IGhub2RlLT5ubGRyX29iajsKLQlybW0gPSBubGRyX29i ai0+cm1tOwotCS8qIENvbnZlcnQgc2l6ZSB0byBEU1Agd29yZHMgKi8KLQl3b3JkX3NpemUgPQot CSAgICAoc2l6ZSArIG5sZHJfb2JqLT5kc3Bfd29yZF9zaXplIC0KLQkgICAgIDEpIC8gbmxkcl9v YmotPmRzcF93b3JkX3NpemU7Ci0JLyogTW9kaWZ5IG1lbW9yeSAnYWxpZ24nIHRvIGFjY291bnQg Zm9yIERTUCBjYWNoZSBsaW5lIHNpemUgKi8KLQlhbGlnbiA9IGxjbShHRU1fQ0FDSEVfTElORV9T SVpFLCBhbGlnbik7Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogbWVtb3J5IGFsaWduIHRvIDB4JXhc biIsIF9fZnVuY19fLCBhbGlnbik7Ci0JaWYgKHNlZ21udF9pZCAhPSAtMSkgewotCQlybW1fYWRk cl9vYmotPnNlZ2lkID0gc2VnbW50X2lkOwotCQlzZWdpZCA9IHNlZ21udF9pZDsKLQkJbWVtX2xv YWRfcmVxID0gcmVxOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoaG5vZGUtPnBoYXNlKSB7Ci0JCWNh c2UgTkxEUl9DUkVBVEU6Ci0JCQltZW1fcGhhc2VfYml0ID0gQ1JFQVRFREFUQUZMQUdCSVQ7Ci0J CQlicmVhazsKLQkJY2FzZSBOTERSX0RFTEVURToKLQkJCW1lbV9waGFzZV9iaXQgPSBERUxFVEVE QVRBRkxBR0JJVDsKLQkJCWJyZWFrOwotCQljYXNlIE5MRFJfRVhFQ1VURToKLQkJCW1lbV9waGFz ZV9iaXQgPSBFWEVDVVRFREFUQUZMQUdCSVQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJy ZWFrOwotCQl9Ci0JCWlmIChtZW1fc2VjdCA9PSBEQkxMX0NPREUpCi0JCQltZW1fcGhhc2VfYml0 Kys7Ci0KLQkJaWYgKG1lbV9waGFzZV9iaXQgPCBNQVhGTEFHUykKLQkJCXNlZ2lkID0gaG5vZGUt PnNlZ19pZFttZW1fcGhhc2VfYml0XTsKLQotCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBt ZW1vcnkgbG9hZGluZyByZXF1aXJlbWVudCAqLwotCQlpZiAoKGhub2RlLT5jb2RlX2RhdGFfZmxh Z19tYXNrID4+IG1lbV9waGFzZV9iaXQpICYgMHgxKQotCQkJbWVtX2xvYWRfcmVxID0gdHJ1ZTsK LQotCX0KLQltZW1fc2VjdF90eXBlID0gKG1lbV9zZWN0ID09IERCTExfQ09ERSkgPyBEWU5NX0NP REUgOiBEWU5NX0RBVEE7Ci0KLQkvKiBGaW5kIGFuIGFwcHJvcHJpYXRlIHNlZ21lbnQgYmFzZWQg b24gbWVtX3NlY3QgKi8KLQlpZiAoc2VnaWQgPT0gTlVMTElEKSB7Ci0JCS8qIE5vIG1lbW9yeSBy ZXF1aXJlbWVudHMgb2YgcHJlZmVyZW5jZXMgKi8KLQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotCWlm IChzZWdpZCA8PSBNQVhTRUdJRCkgewotCQkvKiBBdHRlbXB0IHRvIGFsbG9jYXRlIGZyb20gc2Vn aWQgZmlyc3QuICovCi0JCXJtbV9hZGRyX29iai0+c2VnaWQgPSBzZWdpZDsKLQkJc3RhdHVzID0K LQkJICAgIHJtbV9hbGxvYyhybW0sIHNlZ2lkLCB3b3JkX3NpemUsIGFsaWduLCBkc3BfYWRkcmVz cywgZmFsc2UpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBVbmFi bGUgYWxsb2NhdGUgZnJvbSBzZWdtZW50ICVkXG4iLAotCQkJCV9fZnVuY19fLCBzZWdpZCk7Ci0J CX0KLQl9IGVsc2UgewotCQkvKiBzZWdpZCA+IE1BWFNFR0lEID09PiBJbnRlcm5hbCBvciBleHRl cm5hbCBtZW1vcnkgKi8KLQkJLyogIENoZWNrIGZvciBhbnkgaW50ZXJuYWwgb3IgZXh0ZXJuYWwg bWVtb3J5IHNlZ21lbnQsCi0JCSAqICBkZXBlbmRpbmcgb24gc2VnaWQuICovCi0JCW1lbV9zZWN0 X3R5cGUgfD0gc2VnaWQgPT0gTUVNSU5URVJOQUxJRCA/Ci0JCSAgICBEWU5NX0lOVEVSTkFMIDog RFlOTV9FWFRFUk5BTDsKLQkJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5kbG9hZF9zZWdzOyBp KyspIHsKLQkJCWlmICgobmxkcl9vYmotPnNlZ190YWJsZVtpXSAmIG1lbV9zZWN0X3R5cGUpICE9 Ci0JCQkgICAgbWVtX3NlY3RfdHlwZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3RhdHVzID0gcm1t X2FsbG9jKHJtbSwgaSwgd29yZF9zaXplLCBhbGlnbiwKLQkJCQkJZHNwX2FkZHJlc3MsIGZhbHNl KTsKLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJLyogU2F2ZSBzZWdpZCBmb3IgZnJlZWluZyBsYXRl ciAqLwotCQkJCXJtbV9hZGRyX29iai0+c2VnaWQgPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9 Ci0JfQotZnVuY19jb250OgotCS8qIEhhdmVuJ3QgZm91bmQgbWVtb3J5IHlldCwgYXR0ZW1wdCB0 byBmaW5kIGFueSBzZWdtZW50IHRoYXQgd29ya3MgKi8KLQlpZiAoc3RhdHVzID09IC1FTk9NRU0g JiYgIW1lbV9sb2FkX3JlcSkgewotCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBQcmVmZXJyZWQgc2Vn bWVudCB1bmF2YWlsYWJsZSwgdHJ5aW5nICIKLQkJCSJhbm90aGVyXG4iLCBfX2Z1bmNfXyk7Ci0J CWZvciAoaSA9IDA7IGkgPCBubGRyX29iai0+ZGxvYWRfc2VnczsgaSsrKSB7Ci0JCQkvKiBBbGwg Yml0cyBvZiBtZW1fc2VjdF90eXBlIG11c3QgYmUgc2V0ICovCi0JCQlpZiAoKG5sZHJfb2JqLT5z ZWdfdGFibGVbaV0gJiBtZW1fc2VjdF90eXBlKSAhPQotCQkJICAgIG1lbV9zZWN0X3R5cGUpCi0J CQkJY29udGludWU7Ci0KLQkJCXN0YXR1cyA9IHJtbV9hbGxvYyhybW0sIGksIHdvcmRfc2l6ZSwg YWxpZ24sCi0JCQkJCSAgIGRzcF9hZGRyZXNzLCBmYWxzZSk7Ci0JCQlpZiAoIXN0YXR1cykgewot CQkJCS8qIFNhdmUgc2VnaWQgKi8KLQkJCQlybW1fYWRkcl9vYmotPnNlZ2lkID0gaTsKLQkJCQli cmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQg cmVtb3RlX2ZyZWUodm9pZCAqKnJlZiwgdTE2IHNwYWNlLCB1MzIgZHNwX2FkZHJlc3MsCi0JCQkg ICAgICB1MzIgc2l6ZSwgYm9vbCByZXNlcnZlKQotewotCXN0cnVjdCBubGRyX29iamVjdCAqbmxk cl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopcmVmOwotCXN0cnVjdCBybW1fdGFyZ2V0X29i aiAqcm1tOwotCXUzMiB3b3JkX3NpemU7Ci0JaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0 byBmYWlsICovCi0KLQlybW0gPSBubGRyX29iai0+cm1tOwotCi0JLyogQ29udmVydCBzaXplIHRv IERTUCB3b3JkcyAqLwotCXdvcmRfc2l6ZSA9Ci0JICAgIChzaXplICsgbmxkcl9vYmotPmRzcF93 b3JkX3NpemUgLQotCSAgICAgMSkgLyBubGRyX29iai0+ZHNwX3dvcmRfc2l6ZTsKLQotCWlmIChy bW1fZnJlZShybW0sIHNwYWNlLCBkc3BfYWRkcmVzcywgd29yZF9zaXplLCByZXNlcnZlKSkKLQkJ c3RhdHVzID0gMDsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gdW5s b2FkX2xpYiA9PT09PT09PQotICovCi1zdGF0aWMgdm9pZCB1bmxvYWRfbGliKHN0cnVjdCBubGRy X25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCi0JCSAgICAgICBzdHJ1Y3QgbGliX25vZGUgKnJv b3QpCi17Ci0Jc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0dHJzOwotCXN0cnVjdCBubGRyX29iamVj dCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKLQl1MTYgaTsKLQotCi0JLyog VW5sb2FkIGRlcGVuZGVudCBsaWJyYXJpZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcm9vdC0+ZGVw X2xpYnM7IGkrKykKLQkJdW5sb2FkX2xpYihubGRyX25vZGVfb2JqLCAmcm9vdC0+ZGVwX2xpYnNf dHJlZVtpXSk7Ci0KLQlyb290LT5kZXBfbGlicyA9IDA7Ci0KLQluZXdfYXR0cnMgPSBubGRyX29i ai0+bGRyX2F0dHJzOwotCW5ld19hdHRycy5ybW1faGFuZGxlID0gbmxkcl9vYmotPnJtbTsKLQlu ZXdfYXR0cnMuaW5wdXRfcGFyYW1zID0gbmxkcl9ub2RlX29iai0+cHJpdl9yZWY7Ci0JbmV3X2F0 dHJzLmJhc2VfaW1hZ2UgPSBmYWxzZTsKLQluZXdfYXR0cnMuc3ltX2FyZyA9IHJvb3Q7Ci0KLQlp ZiAocm9vdC0+bGliKSB7Ci0JCS8qIFVubG9hZCB0aGUgcm9vdCBsaWJyYXJ5ICovCi0JCW5sZHJf b2JqLT5sZHJfZnhucy51bmxvYWRfZnhuKHJvb3QtPmxpYiwgJm5ld19hdHRycyk7Ci0JCW5sZHJf b2JqLT5sZHJfZnhucy5jbG9zZV9meG4ocm9vdC0+bGliKTsKLQl9Ci0KLQkvKiBGcmVlIGRlcGVu ZGVudCBsaWJyYXJ5IGxpc3QgKi8KLQlrZnJlZShyb290LT5kZXBfbGlic190cmVlKTsKLQlyb290 LT5kZXBfbGlic190cmVlID0gTlVMTDsKLX0KLQotLyoKLSAqICA9PT09PT09PSB1bmxvYWRfb3Zs eSA9PT09PT09PQotICovCi1zdGF0aWMgdm9pZCB1bmxvYWRfb3ZseShzdHJ1Y3Qgbmxkcl9ub2Rl b2JqZWN0ICpubGRyX25vZGVfb2JqLAotCQkJZW51bSBubGRyX3BoYXNlIHBoYXNlKQotewotCXN0 cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKLQlz dHJ1Y3Qgb3ZseV9ub2RlICpwb19ub2RlID0gTlVMTDsKLQlzdHJ1Y3Qgb3ZseV9zZWN0ICpwaGFz ZV9zZWN0cyA9IE5VTEw7Ci0Jc3RydWN0IG92bHlfc2VjdCAqb3RoZXJfc2VjdHNfbGlzdCA9IE5V TEw7Ci0JdTE2IGk7Ci0JdTE2IGFsbG9jX251bSA9IDA7Ci0JdTE2IG90aGVyX2FsbG9jID0gMDsK LQl1MTYgKnJlZl9jb3VudCA9IE5VTEw7Ci0JdTE2ICpvdGhlcl9yZWYgPSBOVUxMOwotCi0JLyog RmluZCB0aGUgbm9kZSBpbiB0aGUgdGFibGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbmxkcl9vYmot Pm92bHlfbm9kZXM7IGkrKykgewotCQlpZiAoaXNfZXF1YWxfdXVpZAotCQkgICAgKCZubGRyX25v ZGVfb2JqLT51dWlkLCAmbmxkcl9vYmotPm92bHlfdGFibGVbaV0udXVpZCkpIHsKLQkJCS8qIEZv dW5kIGl0ICovCi0JCQlwb19ub2RlID0gJihubGRyX29iai0+b3ZseV90YWJsZVtpXSk7Ci0JCQli cmVhazsKLQkJfQotCX0KLQotCi0JaWYgKCFwb19ub2RlKQotCQkvKiBUT0RPOiBTaG91bGQgd2Ug cHJpbnQgd2FybmluZyBoZXJlPyAqLwotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHBoYXNlKSB7Ci0J Y2FzZSBOTERSX0NSRUFURToKLQkJcmVmX2NvdW50ID0gJihwb19ub2RlLT5jcmVhdGVfcmVmKTsK LQkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5jcmVhdGVfc2VjdHNfbGlzdDsKLQkJYWxsb2NfbnVt ID0gcG9fbm9kZS0+Y3JlYXRlX3NlY3RzOwotCQlicmVhazsKLQljYXNlIE5MRFJfRVhFQ1VURToK LQkJcmVmX2NvdW50ID0gJihwb19ub2RlLT5leGVjdXRlX3JlZik7Ci0JCXBoYXNlX3NlY3RzID0g cG9fbm9kZS0+ZXhlY3V0ZV9zZWN0c19saXN0OwotCQlhbGxvY19udW0gPSBwb19ub2RlLT5leGVj dXRlX3NlY3RzOwotCQlicmVhazsKLQljYXNlIE5MRFJfREVMRVRFOgotCQlyZWZfY291bnQgPSAm KHBvX25vZGUtPmRlbGV0ZV9yZWYpOwotCQlvdGhlcl9yZWYgPSAmKHBvX25vZGUtPm90aGVyX3Jl Zik7Ci0JCXBoYXNlX3NlY3RzID0gcG9fbm9kZS0+ZGVsZXRlX3NlY3RzX2xpc3Q7Ci0JCS8qICdP dGhlcicgb3ZlcmxheSBzZWN0aW9ucyBhcmUgdW5sb2FkZWQgaW4gdGhlIGRlbGV0ZSBwaGFzZSAq LwotCQlvdGhlcl9zZWN0c19saXN0ID0gcG9fbm9kZS0+b3RoZXJfc2VjdHNfbGlzdDsKLQkJYWxs b2NfbnVtID0gcG9fbm9kZS0+ZGVsZXRlX3NlY3RzOwotCQlvdGhlcl9hbGxvYyA9IHBvX25vZGUt Pm90aGVyX3NlY3RzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JaWYgKHJl Zl9jb3VudCAmJiAoKnJlZl9jb3VudCA+IDApKSB7Ci0JCSpyZWZfY291bnQgLT0gMTsKLQkJaWYg KG90aGVyX3JlZikKLQkJCSpvdGhlcl9yZWYgLT0gMTsKLQl9Ci0KLQlpZiAocmVmX2NvdW50ICYm ICpyZWZfY291bnQgPT0gMCkgewotCQkvKiAnRGVhbGxvY2F0ZScgbWVtb3J5ICovCi0JCWZyZWVf c2VjdHMobmxkcl9vYmosIHBoYXNlX3NlY3RzLCBhbGxvY19udW0pOwotCX0KLQlpZiAob3RoZXJf cmVmICYmICpvdGhlcl9yZWYgPT0gMCkKLQkJZnJlZV9zZWN0cyhubGRyX29iaiwgb3RoZXJfc2Vj dHNfbGlzdCwgb3RoZXJfYWxsb2MpOwotfQotCi0vKgotICogID09PT09PT09IGZpbmRfaW5fcGVy c2lzdGVudF9saWJfYXJyYXkgPT09PT09PT0KLSAqLwotc3RhdGljIGJvb2wgZmluZF9pbl9wZXJz aXN0ZW50X2xpYl9hcnJheShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAot CQkJCQkgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYikKLXsKLQlzMzIgaSA9IDA7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgbmxkcl9ub2RlX29iai0+cGVyc19saWJzOyBpKyspIHsKLQkJaWYgKGxp YiA9PSBubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIpCi0JCQlyZXR1cm4gdHJ1 ZTsKLQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotI2lmZGVmIENPTkZJR19USURTUEJSSURH RV9CQUNLVFJBQ0UKLS8qKgotICogbmxkcl9maW5kX2FkZHIoKSAtIEZpbmQgdGhlIGNsb3Nlc3Qg c3ltYm9sIHRvIHRoZSBnaXZlbiBhZGRyZXNzIGJhc2VkIG9uCi0gKgkJZHluYW1pYyBub2RlIG9i amVjdC4KLSAqCi0gKiBAbmxkcl9ub2RlOgkJRHluYW1pYyBub2RlIG9iamVjdAotICogQHN5bV9h ZGRyOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBkc3Agc3ltYm9sCi0gKiBAb2Zmc2V0X3Jh bmdlOgkJb2Zmc2V0IHJhbmdlIHRvIGxvb2sgZm9yIGRzcCBzeW1ib2wKLSAqIEBvZmZzZXRfb3V0 cHV0OgkJU3ltYm9sIE91dHB1dCBhZGRyZXNzCi0gKiBAc3ltX25hbWU6CQlTdHJpbmcgd2l0aCB0 aGUgZHNwIHN5bWJvbAotICoKLSAqIAlUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBub2RlIGxpYnJh cnkgZm9yIGEgZ2l2ZW4gYWRkcmVzcyBhbmQKLSAqCXJldHJpZXZlcyB0aGUgZHNwIHN5bWJvbCBi eSBjYWxsaW5nIGRibGxfZmluZF9kc3Bfc3ltYm9sLgotICovCi1pbnQgbmxkcl9maW5kX2FkZHIo c3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlLCB1MzIgc3ltX2FkZHIsCi0JCQl1MzIg b2Zmc2V0X3JhbmdlLCB2b2lkICpvZmZzZXRfb3V0cHV0LCBjaGFyICpzeW1fbmFtZSkKLXsKLQlp bnQgc3RhdHVzID0gMDsKLQlib29sIHN0YXR1czEgPSBmYWxzZTsKLQlzMzIgaSA9IDA7Ci0Jc3Ry dWN0IGxpYl9ub2RlIHJvb3QgPSB7IE5VTEwsIDAsIE5VTEwgfTsKLQotCWlmIChubGRyX25vZGUt PmR5bmFtaWMgJiYgKm5sZHJfbm9kZS0+cGhhc2Vfc3BsaXQpIHsKLQkJc3dpdGNoIChubGRyX25v ZGUtPnBoYXNlKSB7Ci0JCWNhc2UgTkxEUl9DUkVBVEU6Ci0JCQlyb290ID0gbmxkcl9ub2RlLT5j cmVhdGVfbGliOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkxEUl9FWEVDVVRFOgotCQkJcm9vdCA9IG5s ZHJfbm9kZS0+ZXhlY3V0ZV9saWI7Ci0JCQlicmVhazsKLQkJY2FzZSBOTERSX0RFTEVURToKLQkJ CXJvb3QgPSBubGRyX25vZGUtPmRlbGV0ZV9saWI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogZm9yIE92ZXJsYXkgbm9kZXMgb3Igbm9uLXNw bGl0IER5bmFtaWMgbm9kZXMgKi8KLQkJcm9vdCA9IG5sZHJfbm9kZS0+cm9vdDsKLQl9Ci0KLQlz dGF0dXMxID0gZGJsbF9maW5kX2RzcF9zeW1ib2wocm9vdC5saWIsIHN5bV9hZGRyLAotCQkJb2Zm c2V0X3JhbmdlLCBvZmZzZXRfb3V0cHV0LCBzeW1fbmFtZSk7Ci0KLQkvKiBJZiBzeW1ib2wgbm90 IGZvdW5kLCBjaGVjayBkZXBlbmRlbnQgbGlicmFyaWVzICovCi0JaWYgKCFzdGF0dXMxKQotCQlm b3IgKGkgPSAwOyBpIDwgcm9vdC5kZXBfbGliczsgaSsrKSB7Ci0JCQlzdGF0dXMxID0gZGJsbF9m aW5kX2RzcF9zeW1ib2woCi0JCQkJcm9vdC5kZXBfbGlic190cmVlW2ldLmxpYiwgc3ltX2FkZHIs Ci0JCQkJb2Zmc2V0X3JhbmdlLCBvZmZzZXRfb3V0cHV0LCBzeW1fbmFtZSk7Ci0JCQlpZiAoc3Rh dHVzMSkKLQkJCQkvKiBTeW1ib2wgZm91bmQgKi8KLQkJCQlicmVhazsKLQkJfQotCS8qIENoZWNr IHBlcnNpc3RlbnQgbGlicmFyaWVzICovCi0JaWYgKCFzdGF0dXMxKQotCQlmb3IgKGkgPSAwOyBp IDwgbmxkcl9ub2RlLT5wZXJzX2xpYnM7IGkrKykgewotCQkJc3RhdHVzMSA9IGRibGxfZmluZF9k c3Bfc3ltYm9sKAotCQkJCW5sZHJfbm9kZS0+cGVyc19saWJfdGFibGVbaV0ubGliLCBzeW1fYWRk ciwKLQkJCQlvZmZzZXRfcmFuZ2UsIG9mZnNldF9vdXRwdXQsIHN5bV9uYW1lKTsKLQkJCWlmIChz dGF0dXMxKQotCQkJCS8qIFN5bWJvbCBmb3VuZCAqLwotCQkJCWJyZWFrOwotCQl9Ci0KLQlpZiAo IXN0YXR1czEpIHsKLQkJcHJfZGVidWcoIiVzOiBBZGRyZXNzIDB4JXggbm90IGZvdW5kIGluIHJh bmdlICVkLlxuIiwKLQkJCQkJX19mdW5jX18sIHN5bV9hZGRyLCBvZmZzZXRfcmFuZ2UpOwotCQlz dGF0dXMgPSAtRVNQSVBFOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlcygweCV4LCAweCV4LCAw eCV4LCAweCV4LCAgJXMpXG4iLAotCQkJIF9fZnVuY19fLCAodTMyKSBubGRyX25vZGUsIHN5bV9h ZGRyLCBvZmZzZXRfcmFuZ2UsCi0JCQkgKHUzMikgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOwot CX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy90aWRzcGJyaWRnZS9ybWdyL25vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9ybWdyL25vZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMzZjJkYi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ub2RlLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwzMDMxICswLDAgQEAKLS8qCi0gKiBub2RlLmMKLSAqCi0gKiBEU1AtQklP UyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMu Ci0gKgotICogRFNQL0JJT1MgQnJpZGdlIE5vZGUgTWFuYWdlci4KLSAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2Fn ZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCi0gKgotICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9V VCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhP VVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxs aW51eC9saXN0Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBI b3N0IE9TICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLQotLyogIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUg PGRzcGJyaWRnZS9kYmRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbWVtZGVm cy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3N0 cm0uaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9u dGZ5Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9y bSBNYW5hZ2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2NtbS5oPgotI2luY2x1ZGUgPGRzcGJy aWRnZS9jb2QuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+Ci0jaW5jbHVkZSA8ZHNwYnJp ZGdlL21zZy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVz b3VyY2UgTWFuYWdlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgotI2luY2x1ZGUg PGRzcGJyaWRnZS9kaXNwLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL3Jtc19zaC5oPgotCi0vKiAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGluayBEcml2ZXIgKi8KLSNpbmNs dWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Bpb2N0bC5o PgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL3V1aWR1dGlsLmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVwcml2Lmg+ Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGUuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+ Ci0KLS8qIFN0YXRpYy9EeW5hbWljIExvYWRlciBpbmNsdWRlcyAqLwotI2luY2x1ZGUgPGRzcGJy aWRnZS9kYmxsLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHIuaD4KLQotI2luY2x1ZGUgPGRz cGJyaWRnZS9kcnYuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+Ci0j aW5jbHVkZSA8X3Rpb21hcC5oPgotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgotCi0j ZGVmaW5lIEhPU1RQUkVGSVgJICAiL2hvc3QiCi0jZGVmaW5lIFBJUEVQUkVGSVgJICAiL2RicGlw ZSIKLQotI2RlZmluZSBNQVhfSU5QVVRTKGgpICBcCi0JCSgoaCktPmRjZF9wcm9wcy5vYmpfZGF0 YS5ub2RlX29iai5uZGJfcHJvcHMubnVtX2lucHV0X3N0cmVhbXMpCi0jZGVmaW5lIE1BWF9PVVRQ VVRTKGgpIFwKLQkJKChoKS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5u dW1fb3V0cHV0X3N0cmVhbXMpCi0KLSNkZWZpbmUgTk9ERV9HRVRfUFJJT1JJVFkoaCkgKChoKS0+ cHJpbykKLSNkZWZpbmUgTk9ERV9TRVRfUFJJT1JJVFkoaG5vZGUsIHByaW8pICgoaG5vZGUpLT5w cmlvID0gcHJpbykKLSNkZWZpbmUgTk9ERV9TRVRfU1RBVEUoaG5vZGUsIHN0YXRlKSAoKGhub2Rl KS0+bm9kZV9zdGF0ZSA9IHN0YXRlKQotCi0jZGVmaW5lIE1BWFBJUEVTCTEwMAkvKiBNYXggIyBv ZiAvcGlwZSBjb25uZWN0aW9ucyAoQ1NMIGxpbWl0KSAqLwotI2RlZmluZSBNQVhERVZTVUZGSVhM RU4gMgkvKiBNYXgoTG9nIGJhc2UgMTAgb2YgTUFYUElQRVMsIE1BWFNUUkVBTVMpICovCi0KLSNk ZWZpbmUgUElQRU5BTUVMRU4gICAgIChzaXplb2YoUElQRVBSRUZJWCkgKyBNQVhERVZTVUZGSVhM RU4pCi0jZGVmaW5lIEhPU1ROQU1FTEVOICAgICAoc2l6ZW9mKEhPU1RQUkVGSVgpICsgTUFYREVW U1VGRklYTEVOKQotCi0jZGVmaW5lIE1BWERFVk5BTUVMRU4JMzIJLyogZHNwX25kYnByb3BzLmFj X25hbWUgc2l6ZSAqLwotI2RlZmluZSBDUkVBVEVQSEFTRQkxCi0jZGVmaW5lIEVYRUNVVEVQSEFT RQkyCi0jZGVmaW5lIERFTEVURVBIQVNFCTMKLQotLyogRGVmaW5lIGRlZmF1bHQgU1RSTSBwYXJh bWV0ZXJzICovCi0vKgotICogIFRCRDogUHV0IGluIGhlYWRlciBmaWxlLCBtYWtlIGdsb2JhbCBE U1BfU1RSTUFUVFJTIHdpdGggZGVmYXVsdHMsCi0gKiAgb3IgbWFrZSBkZWZhdWx0cyBjb25maWd1 cmFibGUuCi0gKi8KLSNkZWZpbmUgREVGQVVMVEJVRlNJWkUJCTMyCi0jZGVmaW5lIERFRkFVTFRO QlVGUwkJMgotI2RlZmluZSBERUZBVUxUU0VHSUQJCTAKLSNkZWZpbmUgREVGQVVMVEFMSUdOTUVO VAkwCi0jZGVmaW5lIERFRkFVTFRUSU1FT1VUCQkxMDAwMAotCi0jZGVmaW5lIFJNU1FVRVJZU0VS VkVSCQkwCi0jZGVmaW5lIFJNU0NPTkZJR1VSRVNFUlZFUgkxCi0jZGVmaW5lIFJNU0NSRUFURU5P REUJCTIKLSNkZWZpbmUgUk1TRVhFQ1VURU5PREUJCTMKLSNkZWZpbmUgUk1TREVMRVRFTk9ERQkJ NAotI2RlZmluZSBSTVNDSEFOR0VOT0RFUFJJT1JJVFkJNQotI2RlZmluZSBSTVNSRUFETUVNT1JZ CQk2Ci0jZGVmaW5lIFJNU1dSSVRFTUVNT1JZCQk3Ci0jZGVmaW5lIFJNU0NPUFkJCQk4Ci0jZGVm aW5lIE1BWFRJTUVPVVQJCTIwMDAKLQotI2RlZmluZSBOVU1STVNGWE5TCQk5Ci0KLSNkZWZpbmUg UFdSX1RJTUVPVVQJCTUwMAkvKiBkZWZhdWx0IFBXUiB0aW1lb3V0IGluIG1zZWMgKi8KLQotI2Rl ZmluZSBTVEFDS1NFR0xBQkVMICJMMURTUkFNX0hFQVAiCS8qIExhYmVsIGZvciBEU1AgU3RhY2sg U2VnbWVudCBBZGRyICovCi0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9tZ3IgPT09PT09PT0KLSAq Lwotc3RydWN0IG5vZGVfbWdyIHsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsJLyogRGV2 aWNlIG9iamVjdCAqLwotCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICov Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGRjZF9t YW5hZ2VyICpkY2RfbWdyOwkvKiBQcm9jL05vZGUgZGF0YSBtYW5hZ2VyICovCi0Jc3RydWN0IGRp c3Bfb2JqZWN0ICpkaXNwX29iajsJLyogTm9kZSBkaXNwYXRjaGVyICovCi0Jc3RydWN0IGxpc3Rf aGVhZCBub2RlX2xpc3Q7CS8qIExpc3Qgb2YgYWxsIGFsbG9jYXRlZCBub2RlcyAqLwotCXUzMiBu dW1fbm9kZXM7CQkvKiBOdW1iZXIgb2Ygbm9kZXMgaW4gbm9kZV9saXN0ICovCi0JdTMyIG51bV9j cmVhdGVkOwkvKiBOdW1iZXIgb2Ygbm9kZXMgKmNyZWF0ZWQqIG9uIERTUCAqLwotCURFQ0xBUkVf QklUTUFQKHBpcGVfbWFwLCBNQVhQSVBFUyk7IC8qIFBpcGUgY29ubmVjdGlvbiBiaXRtYXAgKi8K LQlERUNMQVJFX0JJVE1BUChwaXBlX2RvbmVfbWFwLCBNQVhQSVBFUyk7IC8qIFBpcGVzIHRoYXQg YXJlIGhhbGYgZnJlZSAqLwotCS8qIENoYW5uZWwgYWxsb2NhdGlvbiBiaXRtYXAgKi8KLQlERUNM QVJFX0JJVE1BUChjaG5sX21hcCwgQ0hOTF9NQVhDSEFOTkVMUyk7Ci0JLyogRE1BIENoYW5uZWwg YWxsb2NhdGlvbiBiaXRtYXAgKi8KLQlERUNMQVJFX0JJVE1BUChkbWFfY2hubF9tYXAsIENITkxf TUFYQ0hBTk5FTFMpOwotCS8qIFplcm8tQ29weSBDaGFubmVsIGFsbG9jIGJpdG1hcCAqLwotCURF Q0xBUkVfQklUTUFQKHpjX2NobmxfbWFwLCBDSE5MX01BWENIQU5ORUxTKTsKLQlzdHJ1Y3QgbnRm eV9vYmplY3QgKm50Znlfb2JqOwkvKiBNYW5hZ2VzIHJlZ2lzdGVyZWQgbm90aWZpY2F0aW9ucyAq LwotCXN0cnVjdCBtdXRleCBub2RlX21ncl9sb2NrOwkvKiBGb3IgY3JpdGljYWwgc2VjdGlvbnMg Ki8KLQl1MzIgZnhuX2FkZHJzW05VTVJNU0ZYTlNdOwkvKiBSTVMgZnVuY3Rpb24gYWRkcmVzc2Vz ICovCi0Jc3RydWN0IG1zZ19tZ3IgKm1zZ19tZ3Jfb2JqOwotCi0JLyogUHJvY2Vzc29yIHByb3Bl cnRpZXMgbmVlZGVkIGJ5IE5vZGUgRGlzcGF0Y2hlciAqLwotCXUzMiBudW1fY2hubHM7CQkvKiBU b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMgKi8KLQl1MzIgY2hubF9vZmZzZXQ7CS8qIE9mZnNldCBv ZiBjaG5sIGlkcyByc3ZkIGZvciBSTVMgKi8KLQl1MzIgY2hubF9idWZfc2l6ZTsJLyogQnVmZmVy IHNpemUgZm9yIGRhdGEgdG8gUk1TICovCi0JaW50IHByb2NfZmFtaWx5OwkvKiBlZywgNTAwMCAq LwotCWludCBwcm9jX3R5cGU7CQkvKiBlZywgNTUxMCAqLwotCXUzMiBkc3Bfd29yZF9zaXplOwkv KiBTaXplIG9mIERTUCB3b3JkIG9uIGhvc3QgYnl0ZXMgKi8KLQl1MzIgZHNwX2RhdGFfbWF1X3Np emU7CS8qIFNpemUgb2YgRFNQIGRhdGEgTUFVICovCi0JdTMyIGRzcF9tYXVfc2l6ZTsJLyogU2l6 ZSBvZiBNQVUgKi8KLQlzMzIgbWluX3ByaTsJCS8qIE1pbmltdW0gcnVudGltZSBwcmlvcml0eSBm b3Igbm9kZSAqLwotCXMzMiBtYXhfcHJpOwkJLyogTWF4aW11bSBydW50aW1lIHByaW9yaXR5IGZv ciBub2RlICovCi0KLQlzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iajsJLyogU1RSTSBtYW5h Z2VyICovCi0KLQkvKiBMb2FkZXIgcHJvcGVydGllcyAqLwotCXN0cnVjdCBubGRyX29iamVjdCAq bmxkcl9vYmo7CS8qIEhhbmRsZSB0byBsb2FkZXIgKi8KLQlzdHJ1Y3Qgbm9kZV9sZHJfZnhucyBu bGRyX2Z4bnM7CS8qIEhhbmRsZSB0byBsb2FkZXIgZnVuY3Rpb25zICovCi19OwotCi0vKgotICog ID09PT09PT09IGNvbm5lY3R0eXBlID09PT09PT09Ci0gKi8KLWVudW0gY29ubmVjdHR5cGUgewot CU5PVENPTk5FQ1RFRCA9IDAsCi0JTk9ERUNPTk5FQ1QsCi0JSE9TVENPTk5FQ1QsCi0JREVWSUNF Q09OTkVDVCwKLX07Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RyZWFtX2NobmwgPT09PT09PT0KLSAq Lwotc3RydWN0IHN0cmVhbV9jaG5sIHsKLQllbnVtIGNvbm5lY3R0eXBlIHR5cGU7CS8qIFR5cGUg b2Ygc3RyZWFtIGNvbm5lY3Rpb24gKi8KLQl1MzIgZGV2X2lkOwkJLyogcGlwZSBvciBjaGFubmVs IGlkICovCi19OwotCi0vKgotICogID09PT09PT09IG5vZGVfb2JqZWN0ID09PT09PT09Ci0gKi8K LXN0cnVjdCBub2RlX29iamVjdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VsZW07Ci0Jc3Ry dWN0IG5vZGVfbWdyICpub2RlX21ncjsJLyogVGhlIG1hbmFnZXIgb2YgdGhpcyBub2RlICovCi0J c3RydWN0IHByb2Nfb2JqZWN0ICpwcm9jZXNzb3I7CS8qIEJhY2sgcG9pbnRlciB0byBwcm9jZXNz b3IgKi8KLQlzdHJ1Y3QgZHNwX3V1aWQgbm9kZV91dWlkOwkvKiBOb2RlJ3MgSUQgKi8KLQlzMzIg cHJpbzsJCS8qIE5vZGUncyBjdXJyZW50IHByaW9yaXR5ICovCi0JdTMyIHRpbWVvdXQ7CQkvKiBU aW1lb3V0IGZvciBibG9ja2luZyBOT0RFIGNhbGxzICovCi0JdTMyIGhlYXBfc2l6ZTsJCS8qIEhl YXAgU2l6ZSAqLwotCXUzMiBkc3BfaGVhcF92aXJ0X2FkZHI7CS8qIEhlYXAgU2l6ZSAqLwotCXUz MiBncHBfaGVhcF92aXJ0X2FkZHI7CS8qIEhlYXAgU2l6ZSAqLwotCWVudW0gbm9kZV90eXBlIG50 eXBlOwkvKiBUeXBlIG9mIG5vZGU6IG1lc3NhZ2UsIHRhc2ssIGV0YyAqLwotCWVudW0gbm9kZV9z dGF0ZSBub2RlX3N0YXRlOwkvKiBOT0RFX0FMTE9DQVRFRCwgTk9ERV9DUkVBVEVELCAuLi4gKi8K LQl1MzIgbnVtX2lucHV0czsJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGlucHV0cyAqLwotCXUzMiBu dW1fb3V0cHV0czsJLyogQ3VycmVudCBudW1iZXIgb2Ygb3V0cHV0cyAqLwotCXUzMiBtYXhfaW5w dXRfaW5kZXg7CS8qIEN1cnJlbnQgbWF4IGlucHV0IHN0cmVhbSBpbmRleCAqLwotCXUzMiBtYXhf b3V0cHV0X2luZGV4OwkvKiBDdXJyZW50IG1heCBvdXRwdXQgc3RyZWFtIGluZGV4ICovCi0Jc3Ry dWN0IHN0cmVhbV9jaG5sICppbnB1dHM7CS8qIE5vZGUncyBpbnB1dCBzdHJlYW1zICovCi0Jc3Ry dWN0IHN0cmVhbV9jaG5sICpvdXRwdXRzOwkvKiBOb2RlJ3Mgb3V0cHV0IHN0cmVhbXMgKi8KLQlz dHJ1Y3Qgbm9kZV9jcmVhdGVhcmdzIGNyZWF0ZV9hcmdzOwkvKiBBcmdzIGZvciBub2RlIGNyZWF0 ZSBmdW5jICovCi0Jbm9kZWVudiBub2RlX2VudjsJLyogRW52aXJvbm1lbnQgcmV0dXJuZWQgYnkg Uk1TICovCi0Jc3RydWN0IGRjZF9nZW5lcmljb2JqIGRjZF9wcm9wczsJLyogTm9kZSBwcm9wZXJ0 aWVzIGZyb20gRENEICovCi0Jc3RydWN0IGRzcF9jYmRhdGEgKmFyZ3M7CS8qIE9wdGlvbmFsIGFy Z3MgdG8gcGFzcyB0byBub2RlICovCi0Jc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyog TWFuYWdlcyByZWdpc3RlcmVkIG5vdGlmaWNhdGlvbnMgKi8KLQljaGFyICpzdHJfZGV2X25hbWU7 CS8qIGRldmljZSBuYW1lLCBpZiBkZXZpY2Ugbm9kZSAqLwotCXN0cnVjdCBzeW5jX29iamVjdCAq c3luY19kb25lOwkvKiBTeW5jaHJvbml6ZSBub2RlX3Rlcm1pbmF0ZSAqLwotCXMzMiBleGl0X3N0 YXR1czsJLyogZXhlY3V0ZSBmdW5jdGlvbiByZXR1cm4gc3RhdHVzICovCi0KLQkvKiBJbmZvcm1h dGlvbiBuZWVkZWQgZm9yIG5vZGVfZ2V0X2F0dHIoKSAqLwotCXZvaWQgKmRldmljZV9vd25lcjsJ LyogSWYgZGV2IG5vZGUsIHRhc2sgdGhhdCBvd25zIGl0ICovCi0JdTMyIG51bV9ncHBfaW5wdXRz OwkvKiBDdXJyZW50ICMgb2YgZnJvbSBHUFAgc3RyZWFtcyAqLwotCXUzMiBudW1fZ3BwX291dHB1 dHM7CS8qIEN1cnJlbnQgIyBvZiB0byBHUFAgc3RyZWFtcyAqLwotCS8qIEN1cnJlbnQgc3RyZWFt IGNvbm5lY3Rpb25zICovCi0Jc3RydWN0IGRzcF9zdHJlYW1jb25uZWN0ICpzdHJlYW1fY29ubmVj dDsKLQotCS8qIE1lc3NhZ2UgcXVldWUgKi8KLQlzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVf b2JqOwotCi0JLyogVGhlc2UgZmllbGRzIHVzZWQgZm9yIFNNIG1lc3NhZ2luZyAqLwotCXN0cnVj dCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3I7CS8qIE5vZGUncyBTTSBhZGRyIHRyYW5zbGF0b3Ig Ki8KLQotCS8qIEhhbmRsZSB0byBwYXNzIHRvIGR5bmFtaWMgbG9hZGVyICovCi0Jc3RydWN0IG5s ZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iajsKLQlib29sIGxvYWRlZDsJCS8qIENvZGUgaXMg KGR5bmFtaWNhbGx5KSBsb2FkZWQgKi8KLQlib29sIHBoYXNlX3NwbGl0OwkvKiBQaGFzZXMgc3Bs aXQgaW4gbWFueSBsaWJzIG9yIG92bHkgKi8KLQotfTsKLQotLyogRGVmYXVsdCBidWZmZXIgYXR0 cmlidXRlcyAqLwotc3RhdGljIHN0cnVjdCBkc3BfYnVmZmVyYXR0ciBub2RlX2RmbHRidWZhdHRy cyA9IHsKLQkuY2Jfc3RydWN0ID0gMCwKLQkuc2VnbWVudF9pZCA9IDEsCi0JLmJ1Zl9hbGlnbm1l bnQgPSAwLAotfTsKLQotc3RhdGljIHZvaWQgZGVsZXRlX25vZGUoc3RydWN0IG5vZGVfb2JqZWN0 ICpobm9kZSwKLQkJCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOwotc3RhdGljIHZv aWQgZGVsZXRlX25vZGVfbWdyKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyKTsKLXN0YXRpYyB2 b2lkIGZpbGxfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMSwKLQkJCQlz dHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUyLCB1MzIgc3RyZWFtMSwKLQkJCQl1MzIgc3RyZWFtMik7 Ci1zdGF0aWMgdm9pZCBmaWxsX3N0cmVhbV9kZWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwK LQkJCSAgICBzdHJ1Y3Qgbm9kZV9zdHJtZGVmICpwc3RybV9kZWYsCi0JCQkgICAgc3RydWN0IGRz cF9zdHJtYXR0ciAqcGF0dHJzKTsKLXN0YXRpYyB2b2lkIGZyZWVfc3RyZWFtKHN0cnVjdCBub2Rl X21nciAqaG5vZGVfbWdyLCBzdHJ1Y3Qgc3RyZWFtX2Nobmwgc3RyZWFtKTsKLXN0YXRpYyBpbnQg Z2V0X2Z4bl9hZGRyZXNzKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiAqZnhuX2FkZHIs Ci0JCQkJICB1MzIgcGhhc2UpOwotc3RhdGljIGludCBnZXRfbm9kZV9wcm9wcyhzdHJ1Y3QgZGNk X21hbmFnZXIgKmhkY2RfbWdyLAotCQkJCSBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAotCQkJ CSBjb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKLQkJCQkgc3RydWN0IGRjZF9nZW5l cmljb2JqICpkY2RfcHJvcCk7Ci1zdGF0aWMgaW50IGdldF9wcm9jX3Byb3BzKHN0cnVjdCBub2Rl X21nciAqaG5vZGVfbWdyLAotCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopOwotc3Rh dGljIGludCBnZXRfcm1zX2Z4bnMoc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IpOwotc3RhdGlj IHUzMiBvdmx5KHZvaWQgKnByaXZfcmVmLCB1MzIgZHNwX3J1bl9hZGRyLCB1MzIgZHNwX2xvYWRf YWRkciwKLQkJdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSk7Ci1zdGF0aWMgdTMyIG1l bV93cml0ZSh2b2lkICpwcml2X3JlZiwgdTMyIGRzcF9hZGQsIHZvaWQgKnBidWYsCi0JCSAgICAg dTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSk7Ci0KLS8qIER5bmFtaWMgbG9hZGVyIGZ1 bmN0aW9ucy4gKi8KLXN0YXRpYyBzdHJ1Y3Qgbm9kZV9sZHJfZnhucyBubGRyX2Z4bnMgPSB7Ci0J bmxkcl9hbGxvY2F0ZSwKLQlubGRyX2NyZWF0ZSwKLQlubGRyX2RlbGV0ZSwKLQlubGRyX2dldF9m eG5fYWRkciwKLQlubGRyX2xvYWQsCi0Jbmxkcl91bmxvYWQsCi19OwotCi1lbnVtIG5vZGVfc3Rh dGUgbm9kZV9nZXRfc3RhdGUodm9pZCAqaG5vZGUpCi17Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpw bm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKLQotCWlmICghcG5vZGUpCi0JCXJl dHVybiAtMTsKLQlyZXR1cm4gcG5vZGUtPm5vZGVfc3RhdGU7Ci19Ci0KLS8qCi0gKiAgPT09PT09 PT0gbm9kZV9hbGxvY2F0ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEFsbG9jYXRl IEdQUCByZXNvdXJjZXMgdG8gbWFuYWdlIGEgbm9kZSBvbiB0aGUgRFNQLgotICovCi1pbnQgbm9k ZV9hbGxvY2F0ZShzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3IsCi0JCQljb25zdCBzdHJ1 Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKLQkJCWNvbnN0IHN0cnVjdCBkc3BfY2JkYXRhICpwYXJn cywKLQkJCWNvbnN0IHN0cnVjdCBkc3Bfbm9kZWF0dHJpbiAqYXR0cl9pbiwKLQkJCXN0cnVjdCBu b2RlX3Jlc19vYmplY3QgKipub2RlcmVzLAotCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJf Y3R4dCkKLXsKLQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQlzdHJ1Y3QgZGV2X29iamVj dCAqaGRldl9vYmo7Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IE5VTEw7Ci0JZW51bSBu b2RlX3R5cGUgbm9kZV90eXBlID0gTk9ERV9UQVNLOwotCXN0cnVjdCBub2RlX21zZ2FyZ3MgKnBt c2dfYXJnczsKLQlzdHJ1Y3Qgbm9kZV90YXNrYXJncyAqcHRhc2tfYXJnczsKLQl1MzIgbnVtX3N0 cmVhbXM7Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JaW50IHN0 YXR1cyA9IDA7Ci0Jc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyID0gTlVMTDsJLyogU2hhcmVk IG1lbW9yeSBtYW5hZ2VyIGhuZGwgKi8KLQl1MzIgcHJvY19pZDsKLQl1MzIgcHVsX3ZhbHVlOwot CXUzMiBkeW5leHRfYmFzZTsKLQl1MzIgb2ZmX3NldCA9IDA7Ci0JdTMyIHVsX3N0YWNrX3NlZ192 YWw7Ci0Jc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9j b250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7Ci0JdTMyIG1hcHBlZF9hZGRyID0gMDsKLQl1MzIgbWFw X2F0dHJzID0gMHgwOwotCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKLSNp ZmRlZiBEU1BfRE1NX0RFQlVHCi0Jc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7Ci0Jc3RydWN0 IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9j ZXNzb3I7Ci0jZW5kaWYKLQotCXZvaWQgKm5vZGVfcmVzOwotCi0JKm5vZGVyZXMgPSBOVUxMOwot Ci0Jc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKGhwcm9jZXNzb3IsICZwcm9jX2lkKTsK LQotCWlmIChwcm9jX2lkICE9IERTUF9VTklUKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0Jc3RhdHVz ID0gcHJvY19nZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOwotCWlmICghc3Rh dHVzKSB7Ci0JCXN0YXR1cyA9IGRldl9nZXRfbm9kZV9tYW5hZ2VyKGhkZXZfb2JqLCAmaG5vZGVf bWdyKTsKLQkJaWYgKGhub2RlX21nciA9PSBOVUxMKQotCQkJc3RhdHVzID0gLUVQRVJNOwotCi0J fQotCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCXN0YXR1cyA9IGRldl9nZXRf YnJpZGdlX2NvbnRleHQoaGRldl9vYmosICZwYnJpZGdlX2NvbnRleHQpOwotCWlmICghcGJyaWRn ZV9jb250ZXh0KSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQot Ci0Jc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCi0JCQkJ c2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKLQlpZiAoc3RhdHVzKQotCQlnb3Rv IGZ1bmNfZW5kOwotCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0 IGF0dGVtcHQKLQkgICB0byBzZW5kIHRoZSBtZXNzYWdlICovCi0JaWYgKHByb2Nfc3RhdGUucHJv Y19zdGF0ZSA9PSBQUk9DX0VSUk9SKSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJZ290byBmdW5j X2VuZDsKLQl9Ci0KLQkvKiBBc3N1bWluZyB0aGF0IDAgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24g YWRkcmVzcyAqLwotCWlmIChobm9kZV9tZ3ItPmZ4bl9hZGRyc1swXSA9PSAwKSB7Ci0JCS8qIE5v IFJNUyBvbiB0YXJnZXQgLSB3ZSBjdXJyZW50bHkgY2FuJ3QgaGFuZGxlIHRoaXMgKi8KLQkJcHJf ZXJyKCIlczogRmFpbGVkLCBubyBSTVMgaW4gYmFzZSBpbWFnZVxuIiwgX19mdW5jX18pOwotCQlz dGF0dXMgPSAtRVBFUk07Ci0JfSBlbHNlIHsKLQkJLyogVmFsaWRhdGUgYXR0cl9pbiBmaWVsZHMs IGlmIG5vbi1OVUxMICovCi0JCWlmIChhdHRyX2luKSB7Ci0JCQkvKiBDaGVjayBpZiBhdHRyX2lu LT5wcmlvIGlzIHdpdGhpbiByYW5nZSAqLwotCQkJaWYgKGF0dHJfaW4tPnByaW8gPCBobm9kZV9t Z3ItPm1pbl9wcmkgfHwKLQkJCSAgICBhdHRyX2luLT5wcmlvID4gaG5vZGVfbWdyLT5tYXhfcHJp KQotCQkJCXN0YXR1cyA9IC1FRE9NOwotCQl9Ci0JfQotCS8qIEFsbG9jYXRlIG5vZGUgb2JqZWN0 IGFuZCBmaWxsIGluICovCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCXBub2Rl ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5vZGVfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KHBub2RlID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBmdW5jX2VuZDsK LQl9Ci0JcG5vZGUtPm5vZGVfbWdyID0gaG5vZGVfbWdyOwotCS8qIFRoaXMgY3JpdGljYWwgc2Vj dGlvbiBwcm90ZWN0cyBnZXRfbm9kZV9wcm9wcyAqLwotCW11dGV4X2xvY2soJmhub2RlX21nci0+ bm9kZV9tZ3JfbG9jayk7Ci0KLQkvKiBHZXQgZHNwX25kYnByb3BzIGZyb20gbm9kZSBkYXRhYmFz ZSAqLwotCXN0YXR1cyA9IGdldF9ub2RlX3Byb3BzKGhub2RlX21nci0+ZGNkX21nciwgcG5vZGUs IG5vZGVfdXVpZCwKLQkJCQkmKHBub2RlLT5kY2RfcHJvcHMpKTsKLQlpZiAoc3RhdHVzKQotCQln b3RvIGZ1bmNfY29udDsKLQotCXBub2RlLT5ub2RlX3V1aWQgPSAqbm9kZV91dWlkOwotCXBub2Rl LT5wcm9jZXNzb3IgPSBocHJvY2Vzc29yOwotCXBub2RlLT5udHlwZSA9IHBub2RlLT5kY2RfcHJv cHMub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLm50eXBlOwotCXBub2RlLT50aW1lb3V0ID0g cG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMudGltZW91dDsKLQlw bm9kZS0+cHJpbyA9IHBub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3Bz LnByaW87Ci0KLQkvKiBDdXJyZW50bHkgb25seSBDNjQgRFNQIGJ1aWxkcyBzdXBwb3J0IE5vZGUg RHluYW1pYyAqIGhlYXBzICovCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBub2RlIGhlYXAgKi8K LQlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5oZWFwX3NpemUgPSAwOwotCXBu b2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqLmRzcF9oZWFwX2FkZHIgPSAwOwotCXBu b2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqLmRzcF9oZWFwX3Jlc19hZGRyID0gMDsK LQlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5ncHBfaGVhcF9hZGRyID0gMDsK LQlpZiAoIWF0dHJfaW4pCi0JCWdvdG8gZnVuY19jb250OwotCi0JLyogQ2hlY2sgaWYgd2UgaGF2 ZSBhIHVzZXIgYWxsb2NhdGVkIG5vZGUgaGVhcCAqLwotCWlmICghKGF0dHJfaW4tPnBncHBfdmly dF9hZGRyKSkKLQkJZ290byBmdW5jX2NvbnQ7Ci0KLQkvKiBjaGVjayBmb3IgcGFnZSBhbGlnbmVk IEhlYXAgc2l6ZSAqLwotCWlmICgoKGF0dHJfaW4tPmhlYXBfc2l6ZSkgJiAoUEdfU0laRTRLIC0g MSkpKSB7Ci0JCXByX2VycigiJXM6IG5vZGUgaGVhcCBzaXplIG5vdCBhbGlnbmVkIHRvIDRLLCBz aXplID0gMHgleFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBhdHRyX2luLT5oZWFwX3NpemUpOwot CQlzdGF0dXMgPSAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCXBub2RlLT5jcmVhdGVfYXJncy5hc2Eu dGFza19hcmdfb2JqLmhlYXBfc2l6ZSA9Ci0JCSAgICBhdHRyX2luLT5oZWFwX3NpemU7Ci0JCXBu b2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqLmdwcF9oZWFwX2FkZHIgPQotCQkgICAg KHUzMikgYXR0cl9pbi0+cGdwcF92aXJ0X2FkZHI7Ci0JfQotCWlmIChzdGF0dXMpCi0JCWdvdG8g ZnVuY19jb250OwotCi0Jc3RhdHVzID0gcHJvY19yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAot CQkJCSAgICAgcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouCi0JCQkJICAgICBo ZWFwX3NpemUgKyBQQUdFX1NJWkUsCi0JCQkJICAgICAodm9pZCAqKikmKHBub2RlLT5jcmVhdGVf YXJncy5hc2EuCi0JCQkJCXRhc2tfYXJnX29iai5kc3BfaGVhcF9yZXNfYWRkciksCi0JCQkJICAg ICBwcl9jdHh0KTsKLQlpZiAoc3RhdHVzKSB7Ci0JCXByX2VycigiJXM6IEZhaWxlZCB0byByZXNl cnZlIG1lbW9yeSBmb3IgaGVhcDogMHgleFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMp OwotCQlnb3RvIGZ1bmNfY29udDsKLQl9Ci0jaWZkZWYgRFNQX0RNTV9ERUJVRwotCXN0YXR1cyA9 IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKLQlpZiAoIWRtbV9tZ3Ip IHsKLQkJc3RhdHVzID0gRFNQX0VIQU5ETEU7Ci0JCWdvdG8gZnVuY19jb250OwotCX0KLQotCWRt bV9tZW1fbWFwX2R1bXAoZG1tX21ncik7Ci0jZW5kaWYKLQotCW1hcF9hdHRycyB8PSBEU1BfTUFQ TElUVExFRU5ESUFOOwotCW1hcF9hdHRycyB8PSBEU1BfTUFQRUxFTVNJWkUzMjsKLQltYXBfYXR0 cnMgfD0gRFNQX01BUFZJUlRVQUxBRERSOwotCXN0YXR1cyA9IHByb2NfbWFwKGhwcm9jZXNzb3Is ICh2b2lkICopYXR0cl9pbi0+cGdwcF92aXJ0X2FkZHIsCi0JCQkgIHBub2RlLT5jcmVhdGVfYXJn cy5hc2EudGFza19hcmdfb2JqLmhlYXBfc2l6ZSwKLQkJCSAgKHZvaWQgKilwbm9kZS0+Y3JlYXRl X2FyZ3MuYXNhLnRhc2tfYXJnX29iai4KLQkJCSAgZHNwX2hlYXBfcmVzX2FkZHIsICh2b2lkICoq KSZtYXBwZWRfYWRkciwgbWFwX2F0dHJzLAotCQkJICBwcl9jdHh0KTsKLQlpZiAoc3RhdHVzKQot CQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gbWFwIG1lbW9yeSBmb3IgSGVhcDogMHgleFxuIiwKLQkJ ICAgICAgIF9fZnVuY19fLCBzdGF0dXMpOwotCWVsc2UKLQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFz YS50YXNrX2FyZ19vYmouZHNwX2hlYXBfYWRkciA9Ci0JCSAgICAodTMyKSBtYXBwZWRfYWRkcjsK LQotZnVuY19jb250OgotCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsK LQlpZiAoYXR0cl9pbiAhPSBOVUxMKSB7Ci0JCS8qIE92ZXJyaWRlcyBvZiBOQkQgcHJvcGVydGll cyAqLwotCQlwbm9kZS0+dGltZW91dCA9IGF0dHJfaW4tPnRpbWVvdXQ7Ci0JCXBub2RlLT5wcmlv ID0gYXR0cl9pbi0+cHJpbzsKLQl9Ci0JLyogQ3JlYXRlIG9iamVjdCB0byBtYW5hZ2Ugbm90aWZp Y2F0aW9ucyAqLwotCWlmICghc3RhdHVzKSB7Ci0JCXBub2RlLT5udGZ5X29iaiA9IGttYWxsb2Mo c2l6ZW9mKHN0cnVjdCBudGZ5X29iamVjdCksCi0JCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmIChw bm9kZS0+bnRmeV9vYmopCi0JCQludGZ5X2luaXQocG5vZGUtPm50Znlfb2JqKTsKLQkJZWxzZQot CQkJc3RhdHVzID0gLUVOT01FTTsKLQl9Ci0KLQlpZiAoIXN0YXR1cykgewotCQlub2RlX3R5cGUg PSBub2RlX2dldF90eXBlKHBub2RlKTsKLQkJLyogIEFsbG9jYXRlIGRzcF9zdHJlYW1jb25uZWN0 IGFycmF5IGZvciBkZXZpY2UsIHRhc2ssIGFuZAotCQkgKiAgZGFpcyBzb2NrZXQgbm9kZXMuICov Ci0JCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFKSB7Ci0JCQludW1fc3RyZWFtcyA9IE1B WF9JTlBVVFMocG5vZGUpICsgTUFYX09VVFBVVFMocG5vZGUpOwotCQkJcG5vZGUtPnN0cmVhbV9j b25uZWN0ID0ga3phbGxvYyhudW1fc3RyZWFtcyAqCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3N0 cmVhbWNvbm5lY3QpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmIChudW1fc3RyZWFtcyA+IDAg JiYgcG5vZGUtPnN0cmVhbV9jb25uZWN0ID09IE5VTEwpCi0JCQkJc3RhdHVzID0gLUVOT01FTTsK LQotCQl9Ci0JCWlmICghc3RhdHVzICYmIChub2RlX3R5cGUgPT0gTk9ERV9UQVNLIHx8Ci0JCQkJ CSAgICAgIG5vZGVfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQpKSB7Ci0JCQkvKiBBbGxvY2F0ZSBh cnJheXMgZm9yIG1haW50YWluaWcgc3RyZWFtIGNvbm5lY3Rpb25zICovCi0JCQlwbm9kZS0+aW5w dXRzID0ga3phbGxvYyhNQVhfSU5QVVRTKHBub2RlKSAqCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc3Ry ZWFtX2NobmwpLCBHRlBfS0VSTkVMKTsKLQkJCXBub2RlLT5vdXRwdXRzID0ga3phbGxvYyhNQVhf T1VUUFVUUyhwbm9kZSkgKgotCQkJCQlzaXplb2Yoc3RydWN0IHN0cmVhbV9jaG5sKSwgR0ZQX0tF Uk5FTCk7Ci0JCQlwdGFza19hcmdzID0gJihwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJn X29iaik7Ci0JCQlwdGFza19hcmdzLT5zdHJtX2luX2RlZiA9IGt6YWxsb2MoTUFYX0lOUFVUUyhw bm9kZSkgKgotCQkJCQkJc2l6ZW9mKHN0cnVjdCBub2RlX3N0cm1kZWYpLAotCQkJCQkJR0ZQX0tF Uk5FTCk7Ci0JCQlwdGFza19hcmdzLT5zdHJtX291dF9kZWYgPSBremFsbG9jKE1BWF9PVVRQVVRT KHBub2RlKSAqCi0JCQkJCQlzaXplb2Yoc3RydWN0IG5vZGVfc3RybWRlZiksCi0JCQkJCQlHRlBf S0VSTkVMKTsKLQkJCWlmICgoTUFYX0lOUFVUUyhwbm9kZSkgPiAwICYmIChwbm9kZS0+aW5wdXRz ID09IE5VTEwgfHwKLQkJCQkJCSAgICAgICBwdGFza19hcmdzLT5zdHJtX2luX2RlZgotCQkJCQkJ ICAgICAgID09IE5VTEwpKQotCQkJICAgIHx8IChNQVhfT1VUUFVUUyhwbm9kZSkgPiAwCi0JCQkJ JiYgKHBub2RlLT5vdXRwdXRzID09IE5VTEwKLQkJCQkgICAgfHwgcHRhc2tfYXJncy0+c3RybV9v dXRfZGVmID09IE5VTEwpKSkKLQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCQl9Ci0JfQotCWlmICgh c3RhdHVzICYmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpKSB7Ci0JCS8qIENyZWF0ZSBhbiBl dmVudCB0aGF0IHdpbGwgYmUgcG9zdGVkIHdoZW4gUk1TX0VYSVQgaXMKLQkJICogcmVjZWl2ZWQu ICovCi0JCXBub2RlLT5zeW5jX2RvbmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luY19vYmpl Y3QpLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKHBub2RlLT5zeW5jX2RvbmUpCi0JCQlz eW5jX2luaXRfZXZlbnQocG5vZGUtPnN5bmNfZG9uZSk7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IC1F Tk9NRU07Ci0KLQkJaWYgKCFzdGF0dXMpIHsKLQkJCS8qR2V0IHRoZSBzaGFyZWQgbWVtIG1nciBm b3IgdGhpcyBub2RlcyBkZXYgb2JqZWN0ICovCi0JCQlzdGF0dXMgPSBjbW1fZ2V0X2hhbmRsZSho cHJvY2Vzc29yLCAmaGNtbV9tZ3IpOwotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQkvKiBBbGxvY2F0 ZSBhIFNNIGFkZHIgdHJhbnNsYXRvciBmb3IgdGhpcyBub2RlCi0JCQkJICogdy8gZGVmbHQgYXR0 ciAqLwotCQkJCXN0YXR1cyA9IGNtbV94bGF0b3JfY3JlYXRlKCZwbm9kZS0+eGxhdG9yLAotCQkJ CQkJCSAgIGhjbW1fbWdyLCBOVUxMKTsKLQkJCX0KLQkJfQotCQlpZiAoIXN0YXR1cykgewotCQkJ LyogRmlsbCBpbiBtZXNzYWdlIGFyZ3MgKi8KLQkJCWlmICgocGFyZ3MgIT0gTlVMTCkgJiYgKHBh cmdzLT5jYl9kYXRhID4gMCkpIHsKLQkJCQlwbXNnX2FyZ3MgPQotCQkJCSAgICAmKHBub2RlLT5j cmVhdGVfYXJncy5hc2Eubm9kZV9tc2dfYXJncyk7Ci0JCQkJcG1zZ19hcmdzLT5wZGF0YSA9IGt6 YWxsb2MocGFyZ3MtPmNiX2RhdGEsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmIChwbXNn X2FyZ3MtPnBkYXRhID09IE5VTEwpIHsKLQkJCQkJc3RhdHVzID0gLUVOT01FTTsKLQkJCQl9IGVs c2UgewotCQkJCQlwbXNnX2FyZ3MtPmFyZ19sZW5ndGggPSBwYXJncy0+Y2JfZGF0YTsKLQkJCQkJ bWVtY3B5KHBtc2dfYXJncy0+cGRhdGEsCi0JCQkJCSAgICAgICBwYXJncy0+bm9kZV9kYXRhLAot CQkJCQkgICAgICAgcGFyZ3MtPmNiX2RhdGEpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlm ICghc3RhdHVzICYmIG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkgewotCQkvKiBDcmVhdGUgYSBt ZXNzYWdlIHF1ZXVlIGZvciB0aGlzIG5vZGUgKi8KLQkJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5p bnRmX2Z4bnM7Ci0JCXN0YXR1cyA9Ci0JCSAgICAoKmludGZfZnhucy0+bXNnX2NyZWF0ZV9xdWV1 ZSkgKGhub2RlX21nci0+bXNnX21ncl9vYmosCi0JCQkJCQkJJnBub2RlLT5tc2dfcXVldWVfb2Jq LAotCQkJCQkJCTAsCi0JCQkJCQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS4KLQkJCQkJCQlub2Rl X21zZ19hcmdzLm1heF9tc2dzLAotCQkJCQkJCXBub2RlKTsKLQl9Ci0KLQlpZiAoIXN0YXR1cykg ewotCQkvKiBDcmVhdGUgb2JqZWN0IGZvciBkeW5hbWljIGxvYWRpbmcgKi8KLQotCQlzdGF0dXMg PSBobm9kZV9tZ3ItPm5sZHJfZnhucy5hbGxvY2F0ZShobm9kZV9tZ3ItPm5sZHJfb2JqLAotCQkJ CQkJCSAgICh2b2lkICopcG5vZGUsCi0JCQkJCQkJICAgJnBub2RlLT5kY2RfcHJvcHMuCi0JCQkJ CQkJICAgb2JqX2RhdGEubm9kZV9vYmosCi0JCQkJCQkJICAgJnBub2RlLT4KLQkJCQkJCQkgICBu bGRyX25vZGVfb2JqLAotCQkJCQkJCSAgICZwbm9kZS0+cGhhc2Vfc3BsaXQpOwotCX0KLQotCS8q IENvbXBhcmUgdmFsdWUgcmVhZCBmcm9tIE5vZGUgUHJvcGVydGllcyBhbmQgY2hlY2sgaWYgaXQg aXMgc2FtZSBhcwotCSAqIFNUQUNLU0VHTEFCRUwsIGlmIHllcyByZWFkIHRoZSBBZGRyZXNzIG9m IFNUQUNLU0VHTEFCRUwsIGNhbGN1bGF0ZQotCSAqIEdQUCBBZGRyZXNzLCBSZWFkIHRoZSB2YWx1 ZSBpbiB0aGF0IGFkZHJlc3MgYW5kIG92ZXJyaWRlIHRoZQotCSAqIHN0YWNrX3NlZyB2YWx1ZSBp biB0YXNrIGFyZ3MgKi8KLQlpZiAoIXN0YXR1cyAmJgotCSAgICAoY2hhciAqKXBub2RlLT5kY2Rf cHJvcHMub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgotCSAgICBzdGFja19zZWdfbmFtZSAh PSBOVUxMKSB7Ci0JCWlmIChzdHJjbXAoKGNoYXIgKikKLQkJCSAgIHBub2RlLT5kY2RfcHJvcHMu b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgotCQkJICAgc3RhY2tfc2VnX25hbWUsIFNUQUNL U0VHTEFCRUwpID09IDApIHsKLQkJCXZvaWQgX19pb21lbSAqc3RhY2tfc2VnOwotCQkJdTMyIHN0 YWNrX3NlZ19wYTsKLQotCQkJc3RhdHVzID0KLQkJCSAgICBobm9kZV9tZ3ItPm5sZHJfZnhucy4K LQkJCSAgICBnZXRfZnhuX2FkZHIocG5vZGUtPm5sZHJfbm9kZV9vYmosICJEWU5FWFRfQkVHIiwK LQkJCQkJICAgICAmZHluZXh0X2Jhc2UpOwotCQkJaWYgKHN0YXR1cykKLQkJCQlwcl9lcnIoIiVz OiBGYWlsZWQgdG8gZ2V0IGFkZHIgZm9yIERZTkVYVF9CRUciCi0JCQkJICAgICAgICIgc3RhdHVz ID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0KLQkJCXN0YXR1cyA9Ci0JCQkgICAgaG5v ZGVfbWdyLT5ubGRyX2Z4bnMuCi0JCQkgICAgZ2V0X2Z4bl9hZGRyKHBub2RlLT5ubGRyX25vZGVf b2JqLAotCQkJCQkgICAgICJMMURTUkFNX0hFQVAiLCAmcHVsX3ZhbHVlKTsKLQotCQkJaWYgKHN0 YXR1cykKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IGFkZHIgZm9yIEwxRFNSQU1fSEVB UCIKLQkJCQkgICAgICAgIiBzdGF0dXMgPSAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQot CQkJaG9zdF9yZXMgPSBwYnJpZGdlX2NvbnRleHQtPnJlc291cmNlczsKLQkJCWlmICghaG9zdF9y ZXMpCi0JCQkJc3RhdHVzID0gLUVQRVJNOwotCi0JCQlpZiAoc3RhdHVzKSB7Ci0JCQkJcHJfZXJy KCIlczogRmFpbGVkIHRvIGdldCBob3N0IHJlc291cmNlLCBzdGF0dXMiCi0JCQkJICAgICAgICIg PSAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCQlnb3RvIGZ1bmNfZW5kOwotCQkJfQot Ci0JCQlvZmZfc2V0ID0gcHVsX3ZhbHVlIC0gZHluZXh0X2Jhc2U7Ci0JCQlzdGFja19zZWdfcGEg PSBob3N0X3Jlcy0+bWVtX3BoeXNbMV0gKyBvZmZfc2V0OwotCQkJc3RhY2tfc2VnID0gaW9yZW1h cChzdGFja19zZWdfcGEsIFNaXzMyKTsKLQkJCWlmICghc3RhY2tfc2VnKSB7Ci0JCQkJc3RhdHVz ID0gLUVOT01FTTsKLQkJCQlnb3RvIGZ1bmNfZW5kOwotCQkJfQotCi0JCQl1bF9zdGFja19zZWdf dmFsID0gcmVhZGwoc3RhY2tfc2VnKTsKLQotCQkJaW91bm1hcChzdGFja19zZWcpOwotCi0JCQlk ZXZfZGJnKGJyaWRnZSwgIiVzOiBTdGFja1NlZ1ZhbCA9IDB4JXgsIFN0YWNrU2VnQWRkciA9Igot CQkJCSIgMHgleFxuIiwgX19mdW5jX18sIHVsX3N0YWNrX3NlZ192YWwsCi0JCQkJaG9zdF9yZXMt Pm1lbV9iYXNlWzFdICsgb2ZmX3NldCk7Ci0KLQkJCXBub2RlLT5jcmVhdGVfYXJncy5hc2EudGFz a19hcmdfb2JqLnN0YWNrX3NlZyA9Ci0JCQkgICAgdWxfc3RhY2tfc2VnX3ZhbDsKLQotCQl9Ci0J fQotCi0JaWYgKCFzdGF0dXMpIHsKLQkJLyogQWRkIHRoZSBub2RlIHRvIHRoZSBub2RlIG1hbmFn ZXIncyBsaXN0IG9mIGFsbG9jYXRlZAotCQkgKiBub2Rlcy4gKi8KLQkJTk9ERV9TRVRfU1RBVEUo cG5vZGUsIE5PREVfQUxMT0NBVEVEKTsKLQotCQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVf bWdyX2xvY2spOwotCi0JCWxpc3RfYWRkX3RhaWwoJnBub2RlLT5saXN0X2VsZW0sICZobm9kZV9t Z3ItPm5vZGVfbGlzdCk7Ci0JCSsrKGhub2RlX21nci0+bnVtX25vZGVzKTsKLQotCQkvKiBFeGl0 IGNyaXRpY2FsIHNlY3Rpb24gKi8KLQkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdy X2xvY2spOwotCi0JCS8qIFByZXNldCB0aGlzIHRvIGFzc3VtZSBwaGFzZXMgYXJlIHNwbGl0Ci0J CSAqIChmb3Igb3ZlcmxheSBhbmQgZGxsKSAqLwotCQlwbm9kZS0+cGhhc2Vfc3BsaXQgPSB0cnVl OwotCi0JCS8qIE5vdGlmeSBhbGwgY2xpZW50cyByZWdpc3RlcmVkIGZvciBEU1BfTk9ERVNUQVRF Q0hBTkdFLiAqLwotCQlwcm9jX25vdGlmeV9hbGxfY2xpZW50cyhocHJvY2Vzc29yLCBEU1BfTk9E RVNUQVRFQ0hBTkdFKTsKLQl9IGVsc2UgewotCQkvKiBDbGVhbnVwICovCi0JCWlmIChwbm9kZSkK LQkJCWRlbGV0ZV9ub2RlKHBub2RlLCBwcl9jdHh0KTsKLQotCX0KLQotCWlmICghc3RhdHVzKSB7 Ci0JCXN0YXR1cyA9IGRydl9pbnNlcnRfbm9kZV9yZXNfZWxlbWVudChwbm9kZSwgJm5vZGVfcmVz LCBwcl9jdHh0KTsKLQkJaWYgKHN0YXR1cykgewotCQkJZGVsZXRlX25vZGUocG5vZGUsIHByX2N0 eHQpOwotCQkJZ290byBmdW5jX2VuZDsKLQkJfQotCi0JCSpub2RlcmVzID0gKHN0cnVjdCBub2Rl X3Jlc19vYmplY3QgKilub2RlX3JlczsKLQkJZHJ2X3Byb2Nfbm9kZV91cGRhdGVfaGVhcF9zdGF0 dXMobm9kZV9yZXMsIHRydWUpOwotCQlkcnZfcHJvY19ub2RlX3VwZGF0ZV9zdGF0dXMobm9kZV9y ZXMsIHRydWUpOwotCX0KLWZ1bmNfZW5kOgotCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNz b3I6ICVwIHBOb2RlSWQ6ICVwIHBhcmdzOiAlcCBhdHRyX2luOiAlcCAiCi0JCSJub2RlX3Jlczog JXAgc3RhdHVzOiAweCV4XG4iLCBfX2Z1bmNfXywgaHByb2Nlc3NvciwKLQkJbm9kZV91dWlkLCBw YXJncywgYXR0cl9pbiwgbm9kZXJlcywgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogID09PT09PT09IG5vZGVfYWxsb2NfbXNnX2J1ZiA9PT09PT09PQotICogIFB1cnBvc2U6 Ci0gKiAgICAgIEFsbG9jYXRlcyBidWZmZXIgZm9yIHplcm8gY29weSBtZXNzYWdpbmcuCi0gKi8K LURCQVBJIG5vZGVfYWxsb2NfbXNnX2J1ZihzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIg dXNpemUsCi0JCQkgc3RydWN0IGRzcF9idWZmZXJhdHRyICpwYXR0ciwKLQkJCSB1OCAqKnBidWZm ZXIpCi17Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3Qg Kilobm9kZTsKLQlpbnQgc3RhdHVzID0gMDsKLQlib29sIHZhX2ZsYWcgPSBmYWxzZTsKLQlib29s IHNldF9pbmZvOwotCXUzMiBwcm9jX2lkOwotCi0JaWYgKCFwbm9kZSkKLQkJc3RhdHVzID0gLUVG QVVMVDsKLQllbHNlIGlmIChub2RlX2dldF90eXBlKHBub2RlKSA9PSBOT0RFX0RFVklDRSkKLQkJ c3RhdHVzID0gLUVQRVJNOwotCi0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCWlm IChwYXR0ciA9PSBOVUxMKQotCQlwYXR0ciA9ICZub2RlX2RmbHRidWZhdHRyczsJLyogc2V0IGRl ZmF1bHRzICovCi0KLQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPnByb2Nl c3NvciwgJnByb2NfaWQpOwotCWlmIChwcm9jX2lkICE9IERTUF9VTklUKQotCQlnb3RvIGZ1bmNf ZW5kOwotCi0JLyogIElmIHNlZ21lbnQgSUQgaW5jbHVkZXMgTUVNX1NFVFZJUlRVQUxTRUdJRCB0 aGVuIHBidWZmZXIgaXMgYQotCSAqICB2aXJ0ICBhZGRyZXNzLCBzbyBzZXQgdGhpcyBpbmZvIGlu IHRoaXMgbm9kZSdzIHRyYW5zbGF0b3IKLQkgKiAgb2JqZWN0IGZvciAgZnV0dXJlIHJlZi4gSWYg TUVNX0dFVFZJUlRVQUxTRUdJRCB0aGVuIHJldHJpZXZlCi0JICogIHZpcnR1YWwgYWRkcmVzcyAg ZnJvbSBub2RlJ3MgdHJhbnNsYXRvci4gKi8KLQlpZiAoKHBhdHRyLT5zZWdtZW50X2lkICYgTUVN X1NFVFZJUlRVQUxTRUdJRCkgfHwKLQkgICAgKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX0dFVFZJ UlRVQUxTRUdJRCkpIHsKLQkJdmFfZmxhZyA9IHRydWU7Ci0JCXNldF9pbmZvID0gKHBhdHRyLT5z ZWdtZW50X2lkICYgTUVNX1NFVFZJUlRVQUxTRUdJRCkgPwotCQkgICAgdHJ1ZSA6IGZhbHNlOwot CQkvKiBDbGVhciBtYXNrIGJpdHMgKi8KLQkJcGF0dHItPnNlZ21lbnRfaWQgJj0gfk1FTV9NQVNL VklSVFVBTFNFR0lEOwotCQkvKiBTZXQvZ2V0IHRoaXMgbm9kZSdzIHRyYW5zbGF0b3JzIHZpcnR1 YWwgYWRkcmVzcyBiYXNlL3NpemUgKi8KLQkJc3RhdHVzID0gY21tX3hsYXRvcl9pbmZvKHBub2Rl LT54bGF0b3IsIHBidWZmZXIsIHVzaXplLAotCQkJCQkgcGF0dHItPnNlZ21lbnRfaWQsIHNldF9p bmZvKTsKLQl9Ci0JaWYgKCFzdGF0dXMgJiYgKCF2YV9mbGFnKSkgewotCQlpZiAocGF0dHItPnNl Z21lbnRfaWQgIT0gMSkgewotCQkJLyogTm9kZSBzdXBwb3J0cyBzaW5nbGUgU00gc2VnbWVudCBv bmx5LiAqLwotCQkJc3RhdHVzID0gLUVCQURSOwotCQl9Ci0JCS8qICBBcmJpdHJhcnkgU00gYnVm ZmVyIGFsaWdubWVudCBub3Qgc3VwcG9ydGVkIGZvciBob3N0IHNpZGUKLQkJICogIGFsbG9jcywg YnV0IGd1YXJhbnRlZWQgZm9yIHRoZSBmb2xsb3dpbmcgYWxpZ25tZW50Ci0JCSAqICB2YWx1ZXMu ICovCi0JCXN3aXRjaCAocGF0dHItPmJ1Zl9hbGlnbm1lbnQpIHsKLQkJY2FzZSAwOgotCQljYXNl IDE6Ci0JCWNhc2UgMjoKLQkJY2FzZSA0OgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBh bGlnbm1lbnQgdmFsdWUgbm90IHN1cHBvcnR0ZWQgKi8KLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJ CWJyZWFrOwotCQl9Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkvKiBhbGxvY2F0ZSBwaHlzaWNhbCBi dWZmZXIgZnJvbSBzZWdfaWQgaW4gbm9kZSdzCi0JCQkgKiB0cmFuc2xhdG9yICovCi0JCQkodm9p ZCljbW1feGxhdG9yX2FsbG9jX2J1Zihwbm9kZS0+eGxhdG9yLCBwYnVmZmVyLAotCQkJCQkJICAg dXNpemUpOwotCQkJaWYgKCpwYnVmZmVyID09IE5VTEwpIHsKLQkJCQlwcl9lcnIoIiVzOiBlcnJv ciAtIE91dCBvZiBzaGFyZWQgbWVtb3J5XG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCQkJ c3RhdHVzID0gLUVOT01FTTsKLQkJCX0KLQkJfQotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0 dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9jaGFuZ2VfcHJpb3JpdHkgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGEgbm9kZSBpbiB0 aGUgYWxsb2NhdGVkIHN0YXRlLCBvciB0aGF0IGlzCi0gKiAgICAgIGN1cnJlbnRseSBydW5uaW5n IG9yIHBhdXNlZCBvbiB0aGUgdGFyZ2V0LgotICovCi1pbnQgbm9kZV9jaGFuZ2VfcHJpb3JpdHko c3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgczMyIHByaW8pCi17Ci0Jc3RydWN0IG5vZGVfb2Jq ZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKLQlzdHJ1Y3Qgbm9kZV9t Z3IgKmhub2RlX21nciA9IE5VTEw7Ci0JZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOwotCWVudW0g bm9kZV9zdGF0ZSBzdGF0ZTsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgcHJvY19pZDsKLQotCWlm ICghaG5vZGUgfHwgIWhub2RlLT5ub2RlX21ncikgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0g ZWxzZSB7Ci0JCWhub2RlX21nciA9IGhub2RlLT5ub2RlX21ncjsKLQkJbm9kZV90eXBlID0gbm9k ZV9nZXRfdHlwZShobm9kZSk7Ci0JCWlmIChub2RlX3R5cGUgIT0gTk9ERV9UQVNLICYmIG5vZGVf dHlwZSAhPSBOT0RFX0RBSVNTT0NLRVQpCi0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCWVsc2UgaWYg KHByaW8gPCBobm9kZV9tZ3ItPm1pbl9wcmkgfHwgcHJpbyA+IGhub2RlX21nci0+bWF4X3ByaSkK LQkJCXN0YXR1cyA9IC1FRE9NOwotCX0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwot Ci0JLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLwotCW11dGV4X2xvY2soJmhub2RlX21nci0+ bm9kZV9tZ3JfbG9jayk7Ci0KLQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKLQlpZiAo c3RhdGUgPT0gTk9ERV9BTExPQ0FURUQgfHwgc3RhdGUgPT0gTk9ERV9QQVVTRUQpIHsKLQkJTk9E RV9TRVRfUFJJT1JJVFkoaG5vZGUsIHByaW8pOwotCX0gZWxzZSB7Ci0JCWlmIChzdGF0ZSAhPSBO T0RFX1JVTk5JTkcpIHsKLQkJCXN0YXR1cyA9IC1FQkFEUjsKLQkJCWdvdG8gZnVuY19jb250Owot CQl9Ci0JCXN0YXR1cyA9IHByb2NfZ2V0X3Byb2Nlc3Nvcl9pZChwbm9kZS0+cHJvY2Vzc29yLCAm cHJvY19pZCk7Ci0JCWlmIChwcm9jX2lkID09IERTUF9VTklUKSB7Ci0JCQlzdGF0dXMgPQotCQkJ ICAgIGRpc3Bfbm9kZV9jaGFuZ2VfcHJpb3JpdHkoaG5vZGVfbWdyLT5kaXNwX29iaiwKLQkJCQkJ CSAgICAgIGhub2RlLAotCQkJCQkJICAgICAgaG5vZGVfbWdyLT5meG5fYWRkcnMKLQkJCQkJCSAg ICAgIFtSTVNDSEFOR0VOT0RFUFJJT1JJVFldLAotCQkJCQkJICAgICAgaG5vZGUtPm5vZGVfZW52 LCBwcmlvKTsKLQkJfQotCQlpZiAoc3RhdHVzID49IDApCi0JCQlOT0RFX1NFVF9QUklPUklUWSho bm9kZSwgcHJpbyk7Ci0KLQl9Ci1mdW5jX2NvbnQ6Ci0JLyogTGVhdmUgY3JpdGljYWwgc2VjdGlv biAqLwotCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLWZ1bmNfZW5k OgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9jb25uZWN0ID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ29ubmVjdCB0d28gbm9kZXMgb24gdGhlIERT UCwgb3IgYSBub2RlIG9uIHRoZSBEU1AgdG8gdGhlIEdQUC4KLSAqLwotaW50IG5vZGVfY29ubmVj dChzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUxLCB1MzIgc3RyZWFtMSwKLQkJCXN0cnVjdCBub2Rl X29iamVjdCAqbm9kZTIsCi0JCQl1MzIgc3RyZWFtMiwgc3RydWN0IGRzcF9zdHJtYXR0ciAqcGF0 dHJzLAotCQkJc3RydWN0IGRzcF9jYmRhdGEgKmNvbm5fcGFyYW0pCi17Ci0Jc3RydWN0IG5vZGVf bWdyICpobm9kZV9tZ3I7Ci0JY2hhciAqcHN0cl9kZXZfbmFtZSA9IE5VTEw7Ci0JZW51bSBub2Rl X3R5cGUgbm9kZTFfdHlwZSA9IE5PREVfVEFTSzsKLQllbnVtIG5vZGVfdHlwZSBub2RlMl90eXBl ID0gTk9ERV9UQVNLOwotCWVudW0gZHNwX3N0cm1tb2RlIHN0cm1fbW9kZTsKLQlzdHJ1Y3Qgbm9k ZV9zdHJtZGVmICpwc3RybV9kZWY7Ci0Jc3RydWN0IG5vZGVfc3RybWRlZiAqaW5wdXQgPSBOVUxM OwotCXN0cnVjdCBub2RlX3N0cm1kZWYgKm91dHB1dCA9IE5VTEw7Ci0Jc3RydWN0IG5vZGVfb2Jq ZWN0ICpkZXZfbm9kZV9vYmo7Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZTsKLQlzdHJ1Y3Qg c3RyZWFtX2NobmwgKnBzdHJlYW07Ci0JdTMyIHBpcGVfaWQ7Ci0JdTMyIGNobmxfaWQ7Ci0Jczgg Y2hubF9tb2RlOwotCXUzMiBkd19sZW5ndGg7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAoIW5v ZGUxIHx8ICFub2RlMikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBUaGUgdHdvIG5vZGVzIG11 c3QgYmUgb24gdGhlIHNhbWUgcHJvY2Vzc29yICovCi0JaWYgKG5vZGUxICE9IChzdHJ1Y3Qgbm9k ZV9vYmplY3QgKilEU1BfSEdQUE5PREUgJiYKLQkJCW5vZGUyICE9IChzdHJ1Y3Qgbm9kZV9vYmpl Y3QgKilEU1BfSEdQUE5PREUgJiYKLQkJCW5vZGUxLT5ub2RlX21nciAhPSBub2RlMi0+bm9kZV9t Z3IpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiBDYW5ub3QgY29ubmVjdCBhIG5vZGUgdG8gaXRz ZWxmICovCi0JaWYgKG5vZGUxID09IG5vZGUyKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogbm9k ZV9nZXRfdHlwZSgpIHdpbGwgcmV0dXJuIE5PREVfR1BQIGlmIGhub2RlID0gIERTUF9IR1BQTk9E RS4gKi8KLQlub2RlMV90eXBlID0gbm9kZV9nZXRfdHlwZShub2RlMSk7Ci0Jbm9kZTJfdHlwZSA9 IG5vZGVfZ2V0X3R5cGUobm9kZTIpOwotCS8qIENoZWNrIHN0cmVhbSBpbmRpY2VzIHJhbmdlcyAq LwotCWlmICgobm9kZTFfdHlwZSAhPSBOT0RFX0dQUCAmJiBub2RlMV90eXBlICE9IE5PREVfREVW SUNFICYmCi0JCQkJc3RyZWFtMSA+PSBNQVhfT1VUUFVUUyhub2RlMSkpIHx8Ci0JCQkobm9kZTJf dHlwZSAhPSBOT0RFX0dQUCAmJiBub2RlMl90eXBlICE9IE5PREVfREVWSUNFICYmCi0JCQkgc3Ry ZWFtMiA+PSBNQVhfSU5QVVRTKG5vZGUyKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkg KiAgT25seSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGNvbm5lY3Rpb25zIGFyZSBhbGxvd2VkOgot CSAqICAgICAgdGFzay9kYWlzIHNvY2tldCA8ID09ID4gdGFzay9kYWlzIHNvY2tldAotCSAqICAg ICAgdGFzay9kYWlzIHNvY2tldCA8ID09ID4gZGV2aWNlCi0JICogICAgICB0YXNrL2RhaXMgc29j a2V0IDwgPT0gPiBHUFAKLQkgKgotCSAqICBpZSwgbm8gbWVzc2FnZSBub2RlcywgYW5kIGF0IGxl YXN0IG9uZSB0YXNrIG9yIGRhaXMKLQkgKiAgc29ja2V0IG5vZGUuCi0JICovCi0JaWYgKG5vZGUx X3R5cGUgPT0gTk9ERV9NRVNTQUdFIHx8IG5vZGUyX3R5cGUgPT0gTk9ERV9NRVNTQUdFIHx8Ci0J CQkobm9kZTFfdHlwZSAhPSBOT0RFX1RBU0sgJiYKLQkJCSBub2RlMV90eXBlICE9IE5PREVfREFJ U1NPQ0tFVCAmJgotCQkJIG5vZGUyX3R5cGUgIT0gTk9ERV9UQVNLICYmCi0JCQkgbm9kZTJfdHlw ZSAhPSBOT0RFX0RBSVNTT0NLRVQpKQotCQlyZXR1cm4gLUVQRVJNOwotCS8qCi0JICogQ2hlY2sg c3RyZWFtIG1vZGUuIERlZmF1bHQgaXMgU1RSTU1PREVfUFJPQ0NPUFkuCi0JICovCi0JaWYgKHBh dHRycyAmJiBwYXR0cnMtPnN0cm1fbW9kZSAhPSBTVFJNTU9ERV9QUk9DQ09QWSkKLQkJcmV0dXJu IC1FUEVSTTsJLyogaWxsZWdhbCBzdHJlYW0gbW9kZSAqLwotCi0JaWYgKG5vZGUxX3R5cGUgIT0g Tk9ERV9HUFApCi0JCWhub2RlX21nciA9IG5vZGUxLT5ub2RlX21ncjsKLQllbHNlCi0JCWhub2Rl X21nciA9IG5vZGUyLT5ub2RlX21ncjsKLQotCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8K LQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOwotCi0JLyogTm9kZXMgbXVz dCBiZSBpbiB0aGUgYWxsb2NhdGVkIHN0YXRlICovCi0JaWYgKG5vZGUxX3R5cGUgIT0gTk9ERV9H UFAgJiYKLQkJCW5vZGVfZ2V0X3N0YXRlKG5vZGUxKSAhPSBOT0RFX0FMTE9DQVRFRCkgewotCQlz dGF0dXMgPSAtRUJBRFI7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAobm9kZTJfdHlw ZSAhPSBOT0RFX0dQUCAmJgotCQkJbm9kZV9nZXRfc3RhdGUobm9kZTIpICE9IE5PREVfQUxMT0NB VEVEKSB7Ci0JCXN0YXR1cyA9IC1FQkFEUjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8q Ci0JICogIENoZWNrIHRoYXQgc3RyZWFtIGluZGljZXMgZm9yIHRhc2sgYW5kIGRhaXMgc29ja2V0 IG5vZGVzCi0JICogIGFyZSBub3QgYWxyZWFkeSBiZSB1c2VkLiAoRGV2aWNlIG5vZGVzIGNoZWNr ZWQgbGF0ZXIpCi0JICovCi0JaWYgKG5vZGUxX3R5cGUgPT0gTk9ERV9UQVNLIHx8IG5vZGUxX3R5 cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7Ci0JCW91dHB1dCA9ICYobm9kZTEtPmNyZWF0ZV9hcmdz LmFzYS4KLQkJCQl0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW3N0cmVhbTFdKTsKLQkJaWYgKG91 dHB1dC0+c3pfZGV2aWNlKSB7Ci0JCQlzdGF0dXMgPSAtRUlTQ09OTjsKLQkJCWdvdG8gb3V0X3Vu bG9jazsKLQkJfQotCi0JfQotCWlmIChub2RlMl90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMl90 eXBlID09IE5PREVfREFJU1NPQ0tFVCkgewotCQlpbnB1dCA9ICYobm9kZTItPmNyZWF0ZV9hcmdz LmFzYS4KLQkJCQl0YXNrX2FyZ19vYmouc3RybV9pbl9kZWZbc3RyZWFtMl0pOwotCQlpZiAoaW5w dXQtPnN6X2RldmljZSkgewotCQkJc3RhdHVzID0gLUVJU0NPTk47Ci0JCQlnb3RvIG91dF91bmxv Y2s7Ci0JCX0KLQotCX0KLQkvKiBDb25uZWN0aW5nIHR3byB0YXNrIG5vZGVzPyAqLwotCWlmICgo bm9kZTFfdHlwZSA9PSBOT0RFX1RBU0sgfHwgbm9kZTFfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQp ICYmCi0JCQkJKG5vZGUyX3R5cGUgPT0gTk9ERV9UQVNLIHx8Ci0JCQkJIG5vZGUyX3R5cGUgPT0g Tk9ERV9EQUlTU09DS0VUKSkgewotCQkvKiBGaW5kIGF2YWlsYWJsZSBwaXBlICovCi0JCXBpcGVf aWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGhub2RlX21nci0+cGlwZV9tYXAsIE1BWFBJUEVTKTsK LQkJaWYgKHBpcGVfaWQgPT0gTUFYUElQRVMpIHsKLQkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7 Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQkJc2V0X2JpdChwaXBlX2lkLCBobm9kZV9tZ3It PnBpcGVfbWFwKTsKLQkJbm9kZTEtPm91dHB1dHNbc3RyZWFtMV0udHlwZSA9IE5PREVDT05ORUNU OwotCQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLnR5cGUgPSBOT0RFQ09OTkVDVDsKLQkJbm9kZTEt Pm91dHB1dHNbc3RyZWFtMV0uZGV2X2lkID0gcGlwZV9pZDsKLQkJbm9kZTItPmlucHV0c1tzdHJl YW0yXS5kZXZfaWQgPSBwaXBlX2lkOwotCQlvdXRwdXQtPnN6X2RldmljZSA9IGt6YWxsb2MoUElQ RU5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJaW5wdXQtPnN6X2RldmljZSA9IGt6YWxsb2Mo UElQRU5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFvdXRwdXQtPnN6X2RldmljZSB8 fCAhaW5wdXQtPnN6X2RldmljZSkgewotCQkJLyogVW5kbyB0aGUgY29ubmVjdGlvbiAqLwotCQkJ a2ZyZWUob3V0cHV0LT5zel9kZXZpY2UpOwotCQkJa2ZyZWUoaW5wdXQtPnN6X2RldmljZSk7Ci0J CQljbGVhcl9iaXQocGlwZV9pZCwgaG5vZGVfbWdyLT5waXBlX21hcCk7Ci0JCQlzdGF0dXMgPSAt RU5PTUVNOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIENvcHkgIi9kYnBpcGU8cGlw SWQ+IiBuYW1lIHRvIGRldmljZSBuYW1lcyAqLwotCQlzcHJpbnRmKG91dHB1dC0+c3pfZGV2aWNl LCAiJXMlZCIsIFBJUEVQUkVGSVgsIHBpcGVfaWQpOwotCQlzdHJjcHkoaW5wdXQtPnN6X2Rldmlj ZSwgb3V0cHV0LT5zel9kZXZpY2UpOwotCX0KLQkvKiBDb25uZWN0aW5nIHRhc2sgbm9kZSB0byBo b3N0PyAqLwotCWlmIChub2RlMV90eXBlID09IE5PREVfR1BQIHx8IG5vZGUyX3R5cGUgPT0gTk9E RV9HUFApIHsKLQkJcHN0cl9kZXZfbmFtZSA9IGt6YWxsb2MoSE9TVE5BTUVMRU4gKyAxLCBHRlBf S0VSTkVMKTsKLQkJaWYgKCFwc3RyX2Rldl9uYW1lKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOwot CQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KLQkJY2hubF9tb2RlID0gKG5vZGUxX3R5cGUgPT0g Tk9ERV9HUFApID8KLQkJCUNITkxfTU9ERVRPRFNQIDogQ0hOTF9NT0RFRlJPTURTUDsKLQotCQkv KgotCQkgKiAgUmVzZXJ2ZSBhIGNoYW5uZWwgaWQuIFdlIG5lZWQgdG8gcHV0IHRoZSBuYW1lICIv aG9zdDxpZD4iCi0JCSAqICBpbiB0aGUgbm9kZSdzIGNyZWF0ZV9hcmdzLCBidXQgdGhlIGhvc3QK LQkJICogIHNpZGUgY2hhbm5lbCB3aWxsIG5vdCBiZSBvcGVuZWQgdW50aWwgRFNQU3RyZWFtX09w ZW4gaXMKLQkJICogIGNhbGxlZCBmb3IgdGhpcyBub2RlLgotCQkgKi8KLQkJc3RybV9tb2RlID0g cGF0dHJzID8gcGF0dHJzLT5zdHJtX21vZGUgOiBTVFJNTU9ERV9QUk9DQ09QWTsKLQkJc3dpdGNo IChzdHJtX21vZGUpIHsKLQkJY2FzZSBTVFJNTU9ERV9SRE1BOgotCQkJY2hubF9pZCA9IGZpbmRf Zmlyc3RfemVyb19iaXQoaG5vZGVfbWdyLT5kbWFfY2hubF9tYXAsCi0JCQkJCUNITkxfTUFYQ0hB Tk5FTFMpOwotCQkJaWYgKGNobmxfaWQgPCBDSE5MX01BWENIQU5ORUxTKSB7Ci0JCQkJc2V0X2Jp dChjaG5sX2lkLCBobm9kZV9tZ3ItPmRtYV9jaG5sX21hcCk7Ci0JCQkJLyogZG1hIGNoYW5zIGFy ZSAybmQgdHJhbnNwb3J0IGNobmwgc2V0Ci0JCQkJICogaWRzKGUuZy4gMTYtMzEpICovCi0JCQkJ Y2hubF9pZCA9IGNobmxfaWQgKyBobm9kZV9tZ3ItPm51bV9jaG5sczsKLQkJCX0KLQkJCWJyZWFr OwotCQljYXNlIFNUUk1NT0RFX1pFUk9DT1BZOgotCQkJY2hubF9pZCA9IGZpbmRfZmlyc3RfemVy b19iaXQoaG5vZGVfbWdyLT56Y19jaG5sX21hcCwKLQkJCQkJQ0hOTF9NQVhDSEFOTkVMUyk7Ci0J CQlpZiAoY2hubF9pZCA8IENITkxfTUFYQ0hBTk5FTFMpIHsKLQkJCQlzZXRfYml0KGNobmxfaWQs IGhub2RlX21nci0+emNfY2hubF9tYXApOwotCQkJCS8qIHplcm8tY29weSBjaGFucyBhcmUgM25k IHRyYW5zcG9ydCBzZXQKLQkJCQkgKiAoZS5nLiAzMi00NykgKi8KLQkJCQljaG5sX2lkID0gY2hu bF9pZCArCi0JCQkJCSgyICogaG5vZGVfbWdyLT5udW1fY2hubHMpOwotCQkJfQotCQkJYnJlYWs7 Ci0JCWNhc2UgU1RSTU1PREVfUFJPQ0NPUFk6Ci0JCQljaG5sX2lkID0gZmluZF9maXJzdF96ZXJv X2JpdChobm9kZV9tZ3ItPmNobmxfbWFwLAotCQkJCQlDSE5MX01BWENIQU5ORUxTKTsKLQkJCWlm IChjaG5sX2lkIDwgQ0hOTF9NQVhDSEFOTkVMUykKLQkJCQlzZXRfYml0KGNobmxfaWQsIGhub2Rl X21nci0+Y2hubF9tYXApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzdGF0dXMgPSAtRUlO VkFMOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCWlmIChjaG5sX2lkID09IENITkxfTUFY Q0hBTk5FTFMpIHsKLQkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7Ci0JCQlnb3RvIG91dF91bmxv Y2s7Ci0JCX0KLQotCQlpZiAobm9kZTEgPT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQ Tk9ERSkgewotCQkJbm9kZTItPmlucHV0c1tzdHJlYW0yXS50eXBlID0gSE9TVENPTk5FQ1Q7Ci0J CQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLmRldl9pZCA9IGNobmxfaWQ7Ci0JCQlpbnB1dC0+c3pf ZGV2aWNlID0gcHN0cl9kZXZfbmFtZTsKLQkJfSBlbHNlIHsKLQkJCW5vZGUxLT5vdXRwdXRzW3N0 cmVhbTFdLnR5cGUgPSBIT1NUQ09OTkVDVDsKLQkJCW5vZGUxLT5vdXRwdXRzW3N0cmVhbTFdLmRl dl9pZCA9IGNobmxfaWQ7Ci0JCQlvdXRwdXQtPnN6X2RldmljZSA9IHBzdHJfZGV2X25hbWU7Ci0J CX0KLQkJc3ByaW50Zihwc3RyX2Rldl9uYW1lLCAiJXMlZCIsIEhPU1RQUkVGSVgsIGNobmxfaWQp OwotCX0KLQkvKiBDb25uZWN0aW5nIHRhc2sgbm9kZSB0byBkZXZpY2Ugbm9kZT8gKi8KLQlpZiAo KG5vZGUxX3R5cGUgPT0gTk9ERV9ERVZJQ0UpIHx8IChub2RlMl90eXBlID09IE5PREVfREVWSUNF KSkgewotCQlpZiAobm9kZTJfdHlwZSA9PSBOT0RFX0RFVklDRSkgewotCQkJLyogbm9kZTEgPT0g PiBkZXZpY2UgKi8KLQkJCWRldl9ub2RlX29iaiA9IG5vZGUyOwotCQkJaG5vZGUgPSBub2RlMTsK LQkJCXBzdHJlYW0gPSAmKG5vZGUxLT5vdXRwdXRzW3N0cmVhbTFdKTsKLQkJCXBzdHJtX2RlZiA9 IG91dHB1dDsKLQkJfSBlbHNlIHsKLQkJCS8qIGRldmljZSA9PSA+IG5vZGUyICovCi0JCQlkZXZf bm9kZV9vYmogPSBub2RlMTsKLQkJCWhub2RlID0gbm9kZTI7Ci0JCQlwc3RyZWFtID0gJihub2Rl Mi0+aW5wdXRzW3N0cmVhbTJdKTsKLQkJCXBzdHJtX2RlZiA9IGlucHV0OwotCQl9Ci0JCS8qIFNl dCB1cCBjcmVhdGUgYXJncyAqLwotCQlwc3RyZWFtLT50eXBlID0gREVWSUNFQ09OTkVDVDsKLQkJ ZHdfbGVuZ3RoID0gc3RybGVuKGRldl9ub2RlX29iai0+c3RyX2Rldl9uYW1lKTsKLQkJaWYgKGNv bm5fcGFyYW0pCi0JCQlwc3RybV9kZWYtPnN6X2RldmljZSA9IGt6YWxsb2MoZHdfbGVuZ3RoICsg MSArCi0JCQkJCWNvbm5fcGFyYW0tPmNiX2RhdGEsCi0JCQkJCUdGUF9LRVJORUwpOwotCQllbHNl Ci0JCQlwc3RybV9kZWYtPnN6X2RldmljZSA9IGt6YWxsb2MoZHdfbGVuZ3RoICsgMSwKLQkJCQkJ R0ZQX0tFUk5FTCk7Ci0JCWlmICghcHN0cm1fZGVmLT5zel9kZXZpY2UpIHsKLQkJCXN0YXR1cyA9 IC1FTk9NRU07Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQkJLyogQ29weSBkZXZpY2UgbmFt ZSAqLwotCQlzdHJuY3B5KHBzdHJtX2RlZi0+c3pfZGV2aWNlLAotCQkJCWRldl9ub2RlX29iai0+ c3RyX2Rldl9uYW1lLCBkd19sZW5ndGgpOwotCQlpZiAoY29ubl9wYXJhbSkKLQkJCXN0cm5jYXQo cHN0cm1fZGVmLT5zel9kZXZpY2UsCi0JCQkJCShjaGFyICopY29ubl9wYXJhbS0+bm9kZV9kYXRh LAotCQkJCQkodTMyKSBjb25uX3BhcmFtLT5jYl9kYXRhKTsKLQkJZGV2X25vZGVfb2JqLT5kZXZp Y2Vfb3duZXIgPSBobm9kZTsKLQl9Ci0JLyogRmlsbCBpbiBjcmVhdGUgYXJncyAqLwotCWlmIChu b2RlMV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkg ewotCQlub2RlMS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5udW1fb3V0cHV0cysrOwot CQlmaWxsX3N0cmVhbV9kZWYobm9kZTEsIG91dHB1dCwgcGF0dHJzKTsKLQl9Ci0JaWYgKG5vZGUy X3R5cGUgPT0gTk9ERV9UQVNLIHx8IG5vZGUyX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7Ci0J CW5vZGUyLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqLm51bV9pbnB1dHMrKzsKLQkJZmls bF9zdHJlYW1fZGVmKG5vZGUyLCBpbnB1dCwgcGF0dHJzKTsKLQl9Ci0JLyogVXBkYXRlIG5vZGUx IGFuZCBub2RlMiBzdHJlYW1fY29ubmVjdCAqLwotCWlmIChub2RlMV90eXBlICE9IE5PREVfR1BQ ICYmIG5vZGUxX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKLQkJbm9kZTEtPm51bV9vdXRwdXRzKys7 Ci0JCWlmIChzdHJlYW0xID4gbm9kZTEtPm1heF9vdXRwdXRfaW5kZXgpCi0JCQlub2RlMS0+bWF4 X291dHB1dF9pbmRleCA9IHN0cmVhbTE7Ci0KLQl9Ci0JaWYgKG5vZGUyX3R5cGUgIT0gTk9ERV9H UFAgJiYgbm9kZTJfdHlwZSAhPSBOT0RFX0RFVklDRSkgewotCQlub2RlMi0+bnVtX2lucHV0cysr OwotCQlpZiAoc3RyZWFtMiA+IG5vZGUyLT5tYXhfaW5wdXRfaW5kZXgpCi0JCQlub2RlMi0+bWF4 X2lucHV0X2luZGV4ID0gc3RyZWFtMjsKLQotCX0KLQlmaWxsX3N0cmVhbV9jb25uZWN0KG5vZGUx LCBub2RlMiwgc3RyZWFtMSwgc3RyZWFtMik7Ci0JLyogZW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8K LQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KLW91dF91bmxvY2s6Ci0JaWYgKHN0YXR1cyAm JiBwc3RyX2Rldl9uYW1lKQotCQlrZnJlZShwc3RyX2Rldl9uYW1lKTsKLQltdXRleF91bmxvY2so Jmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogbm9kZTE6 ICVwIHN0cmVhbTE6ICVkIG5vZGUyOiAlcCBzdHJlYW0yOiAlZCIKLQkJCSJwYXR0cnM6ICVwIHN0 YXR1czogMHgleFxuIiwgX19mdW5jX18sIG5vZGUxLAotCQkJc3RyZWFtMSwgbm9kZTIsIHN0cmVh bTIsIHBhdHRycywgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09 PT09IG5vZGVfY3JlYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ3JlYXRlIGEg bm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVhdGUgZnVu Y3Rpb24uCi0gKi8KLWludCBub2RlX2NyZWF0ZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKQot ewotCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5v ZGU7Ci0Jc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50 ZXJmYWNlICppbnRmX2Z4bnM7Ci0JdTMyIHVsX2NyZWF0ZV9meG47Ci0JZW51bSBub2RlX3R5cGUg bm9kZV90eXBlOwotCWludCBzdGF0dXMgPSAwOwotCWludCBzdGF0dXMxID0gMDsKLQlzdHJ1Y3Qg ZHNwX2NiZGF0YSBjYl9kYXRhOwotCXUzMiBwcm9jX2lkID0gMjU1OwotCXN0cnVjdCBkc3BfcHJv Y2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKLQlzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3I7 Ci0jaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfRFZGUykgJiYgIWRlZmluZWQoQ09ORklH X0NQVV9GUkVRKQotCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQotCSAg ICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotI2VuZGlmCi0KLQlpZiAo IXBub2RlKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCWhw cm9jZXNzb3IgPSBobm9kZS0+cHJvY2Vzc29yOwotCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhw cm9jZXNzb3IsICZwcm9jX3N0YXRlLAotCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0 YXRlKSk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQkvKiBJZiBwcm9jZXNzb3Ig aXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNyZWF0ZQotCSAgIG5ldyBu b2RlICovCi0JaWYgKHByb2Nfc3RhdGUucHJvY19zdGF0ZSA9PSBQUk9DX0VSUk9SKSB7Ci0JCXN0 YXR1cyA9IC1FUEVSTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JLyogY3JlYXRlIHN0cnVjdCBk c3BfY2JkYXRhIHN0cnVjdCBmb3IgUFdSIGNhbGxzICovCi0JY2JfZGF0YS5jYl9kYXRhID0gUFdS X1RJTUVPVVQ7Ci0Jbm9kZV90eXBlID0gbm9kZV9nZXRfdHlwZShobm9kZSk7Ci0JaG5vZGVfbWdy ID0gaG5vZGUtPm5vZGVfbWdyOwotCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOwot CS8qIEdldCBhY2Nlc3MgdG8gbm9kZSBkaXNwYXRjaGVyICovCi0JbXV0ZXhfbG9jaygmaG5vZGVf bWdyLT5ub2RlX21ncl9sb2NrKTsKLQotCS8qIENoZWNrIG5vZGUgc3RhdGUgKi8KLQlpZiAobm9k ZV9nZXRfc3RhdGUoaG5vZGUpICE9IE5PREVfQUxMT0NBVEVEKQotCQlzdGF0dXMgPSAtRUJBRFI7 Ci0KLQlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2Rl LT5wcm9jZXNzb3IsICZwcm9jX2lkKTsKLQotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19jb250 MjsKLQotCWlmIChwcm9jX2lkICE9IERTUF9VTklUKQotCQlnb3RvIGZ1bmNfY29udDI7Ci0KLQkv KiBNYWtlIHN1cmUgc3RyZWFtcyBhcmUgcHJvcGVybHkgY29ubmVjdGVkICovCi0JaWYgKChobm9k ZS0+bnVtX2lucHV0cyAmJiBobm9kZS0+bWF4X2lucHV0X2luZGV4ID4KLQkgICAgIGhub2RlLT5u dW1faW5wdXRzIC0gMSkgfHwKLQkgICAgKGhub2RlLT5udW1fb3V0cHV0cyAmJiBobm9kZS0+bWF4 X291dHB1dF9pbmRleCA+Ci0JICAgICBobm9kZS0+bnVtX291dHB1dHMgLSAxKSkKLQkJc3RhdHVz ID0gLUVOT1RDT05OOwotCi0JaWYgKCFzdGF0dXMpIHsKLQkJLyogSWYgbm9kZSdzIGNyZWF0ZSBm dW5jdGlvbiBpcyBub3QgbG9hZGVkLCBsb2FkIGl0ICovCi0JCS8qIEJvb3N0IHRoZSBPUFAgbGV2 ZWwgdG8gbWF4IGxldmVsIHRoYXQgRFNQIGNhbiBiZSByZXF1ZXN0ZWQgKi8KLSNpZiBkZWZpbmVk KENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCi0J CWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQotCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRh dGEtPm1wdV9zcGVlZFtWREQxX09QUDNdKTsKLSNlbmRpZgotCQlzdGF0dXMgPSBobm9kZV9tZ3It Pm5sZHJfZnhucy5sb2FkKGhub2RlLT5ubGRyX25vZGVfb2JqLAotCQkJCQkJICAgICAgIE5MRFJf Q1JFQVRFKTsKLQkJLyogR2V0IGFkZHJlc3Mgb2Ygbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbiAqLwot CQlpZiAoIXN0YXR1cykgewotCQkJaG5vZGUtPmxvYWRlZCA9IHRydWU7Ci0JCQlpZiAobm9kZV90 eXBlICE9IE5PREVfREVWSUNFKSB7Ci0JCQkJc3RhdHVzID0gZ2V0X2Z4bl9hZGRyZXNzKGhub2Rl LCAmdWxfY3JlYXRlX2Z4biwKLQkJCQkJCQkgQ1JFQVRFUEhBU0UpOwotCQkJfQotCQl9IGVsc2Ug ewotCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGxvYWQgY3JlYXRlIGNvZGU6IDB4JXhcbiIsCi0J CQkgICAgICAgX19mdW5jX18sIHN0YXR1cyk7Ci0JCX0KLQkJLyogUmVxdWVzdCB0aGUgbG93ZXN0 IE9QUCBsZXZlbCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RWRlMpICYmICFk ZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKLQkJaWYgKHBkYXRhLT5jcHVfc2V0X2ZyZXEpCi0JCQko KnBkYXRhLT5jcHVfc2V0X2ZyZXEpIChwZGF0YS0+bXB1X3NwZWVkW1ZERDFfT1BQMV0pOwotI2Vu ZGlmCi0JCS8qIEdldCBhZGRyZXNzIG9mIGlBbGcgZnVuY3Rpb25zLCBpZiBzb2NrZXQgbm9kZSAq LwotCQlpZiAoIXN0YXR1cykgewotCQkJaWYgKG5vZGVfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQp IHsKLQkJCQlzdGF0dXMgPSBobm9kZV9tZ3ItPm5sZHJfZnhucy5nZXRfZnhuX2FkZHIKLQkJCQkg ICAgKGhub2RlLT5ubGRyX25vZGVfb2JqLAotCQkJCSAgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpf ZGF0YS5ub2RlX29iai4KLQkJCQkgICAgIHN0cl9pX2FsZ19uYW1lLAotCQkJCSAgICAgJmhub2Rl LT5jcmVhdGVfYXJncy5hc2EuCi0JCQkJICAgICB0YXNrX2FyZ19vYmouZGFpc19hcmcpOwotCQkJ fQotCQl9Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCWlmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJ Q0UpIHsKLQkJCXN0YXR1cyA9IGRpc3Bfbm9kZV9jcmVhdGUoaG5vZGVfbWdyLT5kaXNwX29iaiwg aG5vZGUsCi0JCQkJCQkgIGhub2RlX21nci0+ZnhuX2FkZHJzCi0JCQkJCQkgIFtSTVNDUkVBVEVO T0RFXSwKLQkJCQkJCSAgdWxfY3JlYXRlX2Z4biwKLQkJCQkJCSAgJihobm9kZS0+Y3JlYXRlX2Fy Z3MpLAotCQkJCQkJICAmKGhub2RlLT5ub2RlX2VudikpOwotCQkJaWYgKHN0YXR1cyA+PSAwKSB7 Ci0JCQkJLyogU2V0IHRoZSBtZXNzYWdlIHF1ZXVlIGlkIHRvIHRoZSBub2RlIGVudgotCQkJCSAq IHBvaW50ZXIgKi8KLQkJCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKLQkJCQko KmludGZfZnhucy0+bXNnX3NldF9xdWV1ZV9pZCkgKGhub2RlLT4KLQkJCQkJCQltc2dfcXVldWVf b2JqLAotCQkJCQkJCWhub2RlLT5ub2RlX2Vudik7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogIFBoYXNl IElJL092ZXJsYXlzOiBDcmVhdGUsIGV4ZWN1dGUsIGRlbGV0ZSBwaGFzZXMgIHBvc3NpYmx5IGlu Ci0JICogIGRpZmZlcmVudCBmaWxlcy9zZWN0aW9ucy4gKi8KLQlpZiAoaG5vZGUtPmxvYWRlZCAm JiBobm9kZS0+cGhhc2Vfc3BsaXQpIHsKLQkJLyogSWYgY3JlYXRlIGNvZGUgd2FzIGR5bmFtaWNh bGx5IGxvYWRlZCwgd2UgY2FuIG5vdyB1bmxvYWQKLQkJICogaXQuICovCi0JCXN0YXR1czEgPSBo bm9kZV9tZ3ItPm5sZHJfZnhucy51bmxvYWQoaG5vZGUtPm5sZHJfbm9kZV9vYmosCi0JCQkJCQkJ ICBOTERSX0NSRUFURSk7Ci0JCWhub2RlLT5sb2FkZWQgPSBmYWxzZTsKLQl9Ci0JaWYgKHN0YXR1 czEpCi0JCXByX2VycigiJXM6IEZhaWxlZCB0byB1bmxvYWQgY3JlYXRlIGNvZGU6IDB4JXhcbiIs Ci0JCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzMSk7Ci1mdW5jX2NvbnQyOgotCS8qIFVwZGF0ZSBu b2RlIHN0YXRlIGFuZCBub2RlIG1hbmFnZXIgc3RhdGUgKi8KLQlpZiAoc3RhdHVzID49IDApIHsK LQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfQ1JFQVRFRCk7Ci0JCWhub2RlX21nci0+bnVt X2NyZWF0ZWQrKzsKLQkJZ290byBmdW5jX2NvbnQ7Ci0JfQotCWlmIChzdGF0dXMgIT0gLUVCQURS KSB7Ci0JCS8qIFB1dCBiYWNrIGluIE5PREVfQUxMT0NBVEVEIHN0YXRlIGlmIGVycm9yIG9jY3Vy cmVkICovCi0JCU5PREVfU0VUX1NUQVRFKGhub2RlLCBOT0RFX0FMTE9DQVRFRCk7Ci0JfQotZnVu Y19jb250OgotCS8qIEZyZWUgYWNjZXNzIHRvIG5vZGUgZGlzcGF0Y2hlciAqLwotCW11dGV4X3Vu bG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLWZ1bmNfZW5kOgotCWlmIChzdGF0dXMg Pj0gMCkgewotCQlwcm9jX25vdGlmeV9jbGllbnRzKGhub2RlLT5wcm9jZXNzb3IsIERTUF9OT0RF U1RBVEVDSEFOR0UpOwotCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RB VEVDSEFOR0UpOwotCX0KLQotCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBzdGF0dXM6 IDB4JXhcbiIsIF9fZnVuY19fLAotCQlobm9kZSwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwot fQotCi0vKgotICogID09PT09PT09IG5vZGVfY3JlYXRlX21nciA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIENyZWF0ZSBhIE5PREUgTWFuYWdlciBvYmplY3QuCi0gKi8KLWludCBub2Rl X2NyZWF0ZV9tZ3Ioc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4sCi0JCQkgICBzdHJ1Y3QgZGV2 X29iamVjdCAqaGRldl9vYmopCi17Ci0JdTMyIGk7Ci0Jc3RydWN0IG5vZGVfbWdyICpub2RlX21n cl9vYmogPSBOVUxMOwotCXN0cnVjdCBkaXNwX2F0dHIgZGlzcF9hdHRyX29iajsKLQljaGFyICpz el96bF9maWxlID0gIiI7Ci0Jc3RydWN0IG5sZHJfYXR0cnMgbmxkcl9hdHRyc19vYmo7Ci0JaW50 IHN0YXR1cyA9IDA7Ci0JdTggZGV2X3R5cGU7Ci0KLQkqbm9kZV9tYW4gPSBOVUxMOwotCS8qIEFs bG9jYXRlIE5vZGUgbWFuYWdlciBvYmplY3QgKi8KLQlub2RlX21ncl9vYmogPSBremFsbG9jKHNp emVvZihzdHJ1Y3Qgbm9kZV9tZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5vZGVfbWdyX29iaikK LQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlub2RlX21ncl9vYmotPmRldl9vYmogPSBoZGV2X29iajsK LQotCW5vZGVfbWdyX29iai0+bnRmeV9vYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9v YmplY3QpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFub2RlX21ncl9vYmotPm50Znlfb2JqKSB7 Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0JbnRmeV9pbml0KG5v ZGVfbWdyX29iai0+bnRmeV9vYmopOwotCi0JSU5JVF9MSVNUX0hFQUQoJm5vZGVfbWdyX29iai0+ bm9kZV9saXN0KTsKLQotCWRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7Ci0K LQlzdGF0dXMgPSBkY2RfY3JlYXRlX21hbmFnZXIoc3pfemxfZmlsZSwgJm5vZGVfbWdyX29iai0+ ZGNkX21ncik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBvdXRfZXJyOwotCi0Jc3RhdHVzID0gZ2V0 X3Byb2NfcHJvcHMobm9kZV9tZ3Jfb2JqLCBoZGV2X29iaik7Ci0JaWYgKHN0YXR1cykKLQkJZ290 byBvdXRfZXJyOwotCi0JLyogQ3JlYXRlIE5PREUgRGlzcGF0Y2hlciAqLwotCWRpc3BfYXR0cl9v YmouY2hubF9vZmZzZXQgPSBub2RlX21ncl9vYmotPmNobmxfb2Zmc2V0OwotCWRpc3BfYXR0cl9v YmouY2hubF9idWZfc2l6ZSA9IG5vZGVfbWdyX29iai0+Y2hubF9idWZfc2l6ZTsKLQlkaXNwX2F0 dHJfb2JqLnByb2NfZmFtaWx5ID0gbm9kZV9tZ3Jfb2JqLT5wcm9jX2ZhbWlseTsKLQlkaXNwX2F0 dHJfb2JqLnByb2NfdHlwZSA9IG5vZGVfbWdyX29iai0+cHJvY190eXBlOwotCi0Jc3RhdHVzID0g ZGlzcF9jcmVhdGUoJm5vZGVfbWdyX29iai0+ZGlzcF9vYmosIGhkZXZfb2JqLCAmZGlzcF9hdHRy X29iaik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBvdXRfZXJyOwotCi0JLyogQ3JlYXRlIGEgU1RS TSBNYW5hZ2VyICovCi0Jc3RhdHVzID0gc3RybV9jcmVhdGUoJm5vZGVfbWdyX29iai0+c3RybV9t Z3Jfb2JqLCBoZGV2X29iaik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBvdXRfZXJyOwotCi0JZGV2 X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZub2RlX21ncl9vYmotPmludGZfZnhucyk7Ci0JLyog R2V0IG1zZ19jdHJsIHF1ZXVlIG1hbmFnZXIgKi8KLQlkZXZfZ2V0X21zZ19tZ3IoaGRldl9vYmos ICZub2RlX21ncl9vYmotPm1zZ19tZ3Jfb2JqKTsKLQltdXRleF9pbml0KCZub2RlX21ncl9vYmot Pm5vZGVfbWdyX2xvY2spOwotCi0JLyogQmxvY2sgb3V0IHJlc2VydmVkIGNoYW5uZWxzICovCi0J Zm9yIChpID0gMDsgaSA8IG5vZGVfbWdyX29iai0+Y2hubF9vZmZzZXQ7IGkrKykKLQkJc2V0X2Jp dChpLCBub2RlX21ncl9vYmotPmNobmxfbWFwKTsKLQotCS8qIEJsb2NrIG91dCBjaGFubmVscyBy ZXNlcnZlZCBmb3IgUk1TICovCi0Jc2V0X2JpdChub2RlX21ncl9vYmotPmNobmxfb2Zmc2V0LCBu b2RlX21ncl9vYmotPmNobmxfbWFwKTsKLQlzZXRfYml0KG5vZGVfbWdyX29iai0+Y2hubF9vZmZz ZXQgKyAxLCBub2RlX21ncl9vYmotPmNobmxfbWFwKTsKLQotCS8qIE5PIFJNIFNlcnZlciBvbiB0 aGUgSVZBICovCi0JaWYgKGRldl90eXBlICE9IElWQV9VTklUKSB7Ci0JCS8qIEdldCBhZGRyZXNz ZXMgb2YgYW55IFJNUyBmdW5jdGlvbnMgbG9hZGVkICovCi0JCXN0YXR1cyA9IGdldF9ybXNfZnhu cyhub2RlX21ncl9vYmopOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byBvdXRfZXJyOwotCX0KLQot CS8qIEdldCBsb2FkZXIgZnVuY3Rpb25zIGFuZCBjcmVhdGUgbG9hZGVyICovCi0Jbm9kZV9tZ3Jf b2JqLT5ubGRyX2Z4bnMgPSBubGRyX2Z4bnM7CS8qIER5biBsb2FkZXIgZnVuY3MgKi8KLQotCW5s ZHJfYXR0cnNfb2JqLm92bHkgPSBvdmx5OwotCW5sZHJfYXR0cnNfb2JqLndyaXRlID0gbWVtX3dy aXRlOwotCW5sZHJfYXR0cnNfb2JqLmRzcF93b3JkX3NpemUgPSBub2RlX21ncl9vYmotPmRzcF93 b3JkX3NpemU7Ci0Jbmxkcl9hdHRyc19vYmouZHNwX21hdV9zaXplID0gbm9kZV9tZ3Jfb2JqLT5k c3BfbWF1X3NpemU7Ci0Jc3RhdHVzID0gbm9kZV9tZ3Jfb2JqLT5ubGRyX2Z4bnMuY3JlYXRlKCZu b2RlX21ncl9vYmotPm5sZHJfb2JqLAotCQkJaGRldl9vYmosCi0JCQkmbmxkcl9hdHRyc19vYmop OwotCWlmIChzdGF0dXMpCi0JCWdvdG8gb3V0X2VycjsKLQotCSpub2RlX21hbiA9IG5vZGVfbWdy X29iajsKLQotCXJldHVybiBzdGF0dXM7Ci1vdXRfZXJyOgotCWRlbGV0ZV9ub2RlX21ncihub2Rl X21ncl9vYmopOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9k ZWxldGUgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEZWxldGUgYSBub2RlIG9uIHRo ZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbi4KLSAq ICAgICAgTG9hZHMgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LiBGcmVl IEdQUCBzaWRlIHJlc291cmNlcwotICogICAgICBhZnRlciBub2RlJ3MgZGVsZXRlIGZ1bmN0aW9u IHJldHVybnMuCi0gKi8KLWludCBub2RlX2RlbGV0ZShzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpu b2RlcmVzLAotCQkgICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKLXsKLQlz dHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0gbm9kZXJlcy0+bm9kZTsKLQlzdHJ1Y3Qgbm9kZV9t Z3IgKmhub2RlX21ncjsKLQlzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3I7Ci0Jc3RydWN0 IGRpc3Bfb2JqZWN0ICpkaXNwX29iajsKLQl1MzIgdWxfZGVsZXRlX2Z4bjsKLQllbnVtIG5vZGVf dHlwZSBub2RlX3R5cGU7Ci0JZW51bSBub2RlX3N0YXRlIHN0YXRlOwotCWludCBzdGF0dXMgPSAw OwotCWludCBzdGF0dXMxID0gMDsKLQlzdHJ1Y3QgZHNwX2NiZGF0YSBjYl9kYXRhOwotCXUzMiBw cm9jX2lkOwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwotCi0Jdm9p ZCAqbm9kZV9yZXMgPSBub2RlcmVzOwotCi0Jc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9j X3N0YXRlOwotCi0JaWYgKCFwbm9kZSkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1 bmNfZW5kOwotCX0KLQkvKiBjcmVhdGUgc3RydWN0IGRzcF9jYmRhdGEgc3RydWN0IGZvciBQV1Ig Y2FsbCAqLwotCWNiX2RhdGEuY2JfZGF0YSA9IFBXUl9USU1FT1VUOwotCWhub2RlX21nciA9IHBu b2RlLT5ub2RlX21ncjsKLQlocHJvY2Vzc29yID0gcG5vZGUtPnByb2Nlc3NvcjsKLQlkaXNwX29i aiA9IGhub2RlX21nci0+ZGlzcF9vYmo7Ci0Jbm9kZV90eXBlID0gbm9kZV9nZXRfdHlwZShwbm9k ZSk7Ci0JaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7Ci0JLyogRW50ZXIgY3JpdGlj YWwgc2VjdGlvbiAqLwotCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7Ci0K LQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKHBub2RlKTsKLQkvKiAgRXhlY3V0ZSBkZWxldGUgcGhh c2UgY29kZSBmb3Igbm9uLWRldmljZSBub2RlIGluIGFsbCBjYXNlcwotCSAqICBleGNlcHQgd2hl biB0aGUgbm9kZSB3YXMgb25seSBhbGxvY2F0ZWQuIERlbGV0ZSBwaGFzZSBtdXN0IGJlCi0JICog IGV4ZWN1dGVkIGV2ZW4gaWYgY3JlYXRlIHBoYXNlIHdhcyBleGVjdXRlZCwgYnV0IGZhaWxlZC4K LQkgKiAgSWYgdGhlIG5vZGUgZW52aXJvbm1lbnQgcG9pbnRlciBpcyBub24tTlVMTCwgdGhlIGRl bGV0ZSBwaGFzZQotCSAqICBjb2RlIG11c3QgYmUgIGV4ZWN1dGVkLiAqLwotCWlmICghKHN0YXRl ID09IE5PREVfQUxMT0NBVEVEICYmIHBub2RlLT5ub2RlX2VudiA9PSAodTMyKSBOVUxMKSAmJgot CSAgICBub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKLQkJc3RhdHVzID0gcHJvY19nZXRfcHJv Y2Vzc29yX2lkKHBub2RlLT5wcm9jZXNzb3IsICZwcm9jX2lkKTsKLQkJaWYgKHN0YXR1cykKLQkJ CWdvdG8gZnVuY19jb250MTsKLQotCQlpZiAocHJvY19pZCA9PSBEU1BfVU5JVCB8fCBwcm9jX2lk ID09IElWQV9VTklUKSB7Ci0JCQkvKiAgSWYgbm9kZSBoYXMgdGVybWluYXRlZCwgZXhlY3V0ZSBw aGFzZSBjb2RlIHdpbGwKLQkJCSAqICBoYXZlIGFscmVhZHkgYmVlbiB1bmxvYWRlZCBpbiBub2Rl X29uX2V4aXQoKS4gSWYgdGhlCi0JCQkgKiAgbm9kZSBpcyBQQVVTRUQsIHRoZSBleGVjdXRlIHBo YXNlIGlzIGxvYWRlZCwgYW5kIGl0Ci0JCQkgKiAgaXMgbm93IG9rIHRvIHVubG9hZCBpdC4gSWYg dGhlIG5vZGUgaXMgcnVubmluZywgd2UKLQkJCSAqICB3aWxsIHVubG9hZCB0aGUgZXhlY3V0ZSBw aGFzZSBvbmx5IGFmdGVyIGRlbGV0aW5nCi0JCQkgKiAgdGhlIG5vZGUuICovCi0JCQlpZiAoc3Rh dGUgPT0gTk9ERV9QQVVTRUQgJiYgcG5vZGUtPmxvYWRlZCAmJgotCQkJICAgIHBub2RlLT5waGFz ZV9zcGxpdCkgewotCQkJCS8qIE9rIHRvIHVubG9hZCBleGVjdXRlIGNvZGUgYXMgbG9uZyBhcyBu b2RlCi0JCQkJICogaXMgbm90ICogcnVubmluZyAqLwotCQkJCXN0YXR1czEgPQotCQkJCSAgICBo bm9kZV9tZ3ItPm5sZHJfZnhucy4KLQkJCQkgICAgdW5sb2FkKHBub2RlLT5ubGRyX25vZGVfb2Jq LAotCQkJCQkgICAgICAgTkxEUl9FWEVDVVRFKTsKLQkJCQlwbm9kZS0+bG9hZGVkID0gZmFsc2U7 Ci0JCQkJTk9ERV9TRVRfU1RBVEUocG5vZGUsIE5PREVfRE9ORSk7Ci0JCQl9Ci0JCQkvKiBMb2Fk IGRlbGV0ZSBwaGFzZSBjb2RlIGlmIG5vdCBsb2FkZWQgb3IgaWYgaGF2ZW4ndAotCQkJICogKiB1 bmxvYWRlZCBFWEVDVVRFIHBoYXNlICovCi0JCQlpZiAoKCEocG5vZGUtPmxvYWRlZCkgfHwgKHN0 YXRlID09IE5PREVfUlVOTklORykpICYmCi0JCQkgICAgcG5vZGUtPnBoYXNlX3NwbGl0KSB7Ci0J CQkJc3RhdHVzID0KLQkJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMuCi0JCQkJICAgIGxvYWQo cG5vZGUtPm5sZHJfbm9kZV9vYmosIE5MRFJfREVMRVRFKTsKLQkJCQlpZiAoIXN0YXR1cykKLQkJ CQkJcG5vZGUtPmxvYWRlZCA9IHRydWU7Ci0JCQkJZWxzZQotCQkJCQlwcl9lcnIoIiVzOiBmYWls IC0gbG9hZCBkZWxldGUgY29kZToiCi0JCQkJCSAgICAgICAiIDB4JXhcbiIsIF9fZnVuY19fLCBz dGF0dXMpOwotCQkJfQotCQl9Ci1mdW5jX2NvbnQxOgotCQlpZiAoIXN0YXR1cykgewotCQkJLyog VW5ibG9jayBhIHRocmVhZCB0cnlpbmcgdG8gdGVybWluYXRlIHRoZSBub2RlICovCi0JCQkodm9p ZClzeW5jX3NldF9ldmVudChwbm9kZS0+c3luY19kb25lKTsKLQkJCWlmIChwcm9jX2lkID09IERT UF9VTklUKSB7Ci0JCQkJLyogdWxfZGVsZXRlX2Z4biA9IGFkZHJlc3Mgb2Ygbm9kZSdzIGRlbGV0 ZQotCQkJCSAqIGZ1bmN0aW9uICovCi0JCQkJc3RhdHVzID0gZ2V0X2Z4bl9hZGRyZXNzKHBub2Rl LCAmdWxfZGVsZXRlX2Z4biwKLQkJCQkJCQkgREVMRVRFUEhBU0UpOwotCQkJfSBlbHNlIGlmIChw cm9jX2lkID09IElWQV9VTklUKQotCQkJCXVsX2RlbGV0ZV9meG4gPSAodTMyKSBwbm9kZS0+bm9k ZV9lbnY7Ci0JCQlpZiAoIXN0YXR1cykgewotCQkJCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhw cm9jZXNzb3IsCi0JCQkJCQkmcHJvY19zdGF0ZSwKLQkJCQkJCXNpemVvZihzdHJ1Y3QKLQkJCQkJ CSAgICAgICBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKLQkJCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0 YXRlICE9IFBST0NfRVJST1IpIHsKLQkJCQkJc3RhdHVzID0KLQkJCQkJICAgIGRpc3Bfbm9kZV9k ZWxldGUoZGlzcF9vYmosIHBub2RlLAotCQkJCQkJCSAgICAgaG5vZGVfbWdyLT4KLQkJCQkJCQkg ICAgIGZ4bl9hZGRycwotCQkJCQkJCSAgICAgW1JNU0RFTEVURU5PREVdLAotCQkJCQkJCSAgICAg dWxfZGVsZXRlX2Z4biwKLQkJCQkJCQkgICAgIHBub2RlLT5ub2RlX2Vudik7Ci0JCQkJfSBlbHNl Ci0JCQkJCU5PREVfU0VUX1NUQVRFKHBub2RlLCBOT0RFX0RPTkUpOwotCi0JCQkJLyogVW5sb2Fk IGV4ZWN1dGUsIGlmIG5vdCB1bmxvYWRlZCwgYW5kIGRlbGV0ZQotCQkJCSAqIGZ1bmN0aW9uICov Ci0JCQkJaWYgKHN0YXRlID09IE5PREVfUlVOTklORyAmJgotCQkJCSAgICBwbm9kZS0+cGhhc2Vf c3BsaXQpIHsKLQkJCQkJc3RhdHVzMSA9Ci0JCQkJCSAgICBobm9kZV9tZ3ItPm5sZHJfZnhucy4K LQkJCQkJICAgIHVubG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwKLQkJCQkJCSAgICAgICBOTERS X0VYRUNVVEUpOwotCQkJCX0KLQkJCQlpZiAoc3RhdHVzMSkKLQkJCQkJcHJfZXJyKCIlczogZmFp bCAtIHVubG9hZCBleGVjdXRlIGNvZGU6IgotCQkJCQkgICAgICAgIiAweCV4XG4iLCBfX2Z1bmNf Xywgc3RhdHVzMSk7Ci0KLQkJCQlzdGF0dXMxID0KLQkJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4 bnMudW5sb2FkKHBub2RlLT4KLQkJCQkJCQkgICAgbmxkcl9ub2RlX29iaiwKLQkJCQkJCQkgICAg TkxEUl9ERUxFVEUpOwotCQkJCXBub2RlLT5sb2FkZWQgPSBmYWxzZTsKLQkJCQlpZiAoc3RhdHVz MSkKLQkJCQkJcHJfZXJyKCIlczogZmFpbCAtIHVubG9hZCBkZWxldGUgY29kZTogIgotCQkJCQkg ICAgICAgIjB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMxKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBG cmVlIGhvc3Qgc2lkZSByZXNvdXJjZXMgZXZlbiBpZiBhIGZhaWx1cmUgb2NjdXJyZWQgKi8KLQkv KiBSZW1vdmUgbm9kZSBmcm9tIGhub2RlX21nci0+bm9kZV9saXN0ICovCi0JbGlzdF9kZWwoJnBu b2RlLT5saXN0X2VsZW0pOwotCWhub2RlX21nci0+bnVtX25vZGVzLS07Ci0JLyogRGVjcmVtZW50 IGNvdW50IG9mIG5vZGVzIGNyZWF0ZWQgb24gRFNQICovCi0JaWYgKChzdGF0ZSAhPSBOT0RFX0FM TE9DQVRFRCkgfHwgKChzdGF0ZSA9PSBOT0RFX0FMTE9DQVRFRCkgJiYKLQkJCQkJICAocG5vZGUt Pm5vZGVfZW52ICE9ICh1MzIpIE5VTEwpKSkKLQkJaG5vZGVfbWdyLT5udW1fY3JlYXRlZC0tOwot CS8qICBGcmVlIGhvc3Qtc2lkZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IG5vZGVfY3JlYXRlKCkK LQkgKiAgZGVsZXRlX25vZGUoKSBmYWlscyBpZiBTTSBidWZmZXJzIG5vdCBmcmVlZCBieSBjbGll bnQhICovCi0JZHJ2X3Byb2Nfbm9kZV91cGRhdGVfc3RhdHVzKG5vZGVfcmVzLCBmYWxzZSk7Ci0J ZGVsZXRlX25vZGUocG5vZGUsIHByX2N0eHQpOwotCi0JLyoKLQkgKiBSZWxlYXNlIGFsbCBOb2Rl IHJlc291cmNlcyBhbmQgaXRzIGNvbnRleHQKLQkgKi8KLQlpZHJfcmVtb3ZlKHByX2N0eHQtPm5v ZGVfaWQsICgoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKW5vZGVfcmVzKS0+aWQpOwotCWtmcmVl KG5vZGVfcmVzKTsKLQotCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLwotCW11dGV4X3VubG9j aygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQlwcm9jX25vdGlmeV9jbGllbnRzKGhwcm9j ZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOwotZnVuY19lbmQ6Ci0JZGV2X2RiZyhicmlkZ2Us ICIlczogcG5vZGU6ICVwIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgcG5vZGUsIHN0YXR1cyk7 Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBub2RlX2RlbGV0ZV9tZ3Ig PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBEZWxldGUgdGhlIE5PREUgTWFuYWdlci4K LSAqLwotaW50IG5vZGVfZGVsZXRlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncikKLXsK LQlpZiAoIWhub2RlX21ncikKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlkZWxldGVfbm9kZV9tZ3Io aG5vZGVfbWdyKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogID09PT09PT09IG5vZGVfZW51 bV9ub2RlcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEVudW1lcmF0ZSBjdXJyZW50 bHkgYWxsb2NhdGVkIG5vZGVzLgotICovCi1pbnQgbm9kZV9lbnVtX25vZGVzKHN0cnVjdCBub2Rl X21nciAqaG5vZGVfbWdyLCB2b2lkICoqbm9kZV90YWIsCi0JCQkgICB1MzIgbm9kZV90YWJfc2l6 ZSwgdTMyICpwdV9udW1fbm9kZXMsCi0JCQkgICB1MzIgKnB1X2FsbG9jYXRlZCkKLXsKLQlzdHJ1 Y3Qgbm9kZV9vYmplY3QgKmhub2RlOwotCXUzMiBpID0gMDsKLQlpbnQgc3RhdHVzID0gMDsKLQot CWlmICghaG5vZGVfbWdyKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7 Ci0JfQotCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KLQltdXRleF9sb2NrKCZobm9kZV9t Z3ItPm5vZGVfbWdyX2xvY2spOwotCi0JaWYgKGhub2RlX21nci0+bnVtX25vZGVzID4gbm9kZV90 YWJfc2l6ZSkgewotCQkqcHVfYWxsb2NhdGVkID0gaG5vZGVfbWdyLT5udW1fbm9kZXM7Ci0JCSpw dV9udW1fbm9kZXMgPSAwOwotCQlzdGF0dXMgPSAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCWxpc3Rf Zm9yX2VhY2hfZW50cnkoaG5vZGUsICZobm9kZV9tZ3ItPm5vZGVfbGlzdCwgbGlzdF9lbGVtKQot CQkJbm9kZV90YWJbaSsrXSA9IGhub2RlOwotCQkqcHVfYWxsb2NhdGVkID0gKnB1X251bV9ub2Rl cyA9IGhub2RlX21nci0+bnVtX25vZGVzOwotCX0KLQkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAq LwotCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLwotCW11dGV4X3VubG9jaygmaG5vZGVfbWdy LT5ub2RlX21ncl9sb2NrKTsKLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0g KiAgPT09PT09PT0gbm9kZV9mcmVlX21zZ19idWYgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICog ICAgICBGcmVlcyB0aGUgbWVzc2FnZSBidWZmZXIuCi0gKi8KLWludCBub2RlX2ZyZWVfbXNnX2J1 ZihzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1OCAqcGJ1ZmZlciwKLQkJCSAgICAgc3RydWN0 IGRzcF9idWZmZXJhdHRyICpwYXR0cikKLXsKLQlzdHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0g KHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOwotCWludCBzdGF0dXMgPSAwOwotCXUzMiBwcm9j X2lkOwotCi0JaWYgKCFobm9kZSkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNf ZW5kOwotCX0KLQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPnByb2Nlc3Nv ciwgJnByb2NfaWQpOwotCWlmIChwcm9jX2lkID09IERTUF9VTklUKSB7Ci0JCWlmICghc3RhdHVz KSB7Ci0JCQlpZiAocGF0dHIgPT0gTlVMTCkgewotCQkJCS8qIHNldCBkZWZhdWx0cyAqLwotCQkJ CXBhdHRyID0gJm5vZGVfZGZsdGJ1ZmF0dHJzOwotCQkJfQotCQkJLyogTm9kZSBzdXBwb3J0cyBz aW5nbGUgU00gc2VnbWVudCBvbmx5ICovCi0JCQlpZiAocGF0dHItPnNlZ21lbnRfaWQgIT0gMSkK LQkJCQlzdGF0dXMgPSAtRUJBRFI7Ci0KLQkJCS8qIHBidWZmZXIgaXMgY2xpZW50cyBWYS4gKi8K LQkJCXN0YXR1cyA9IGNtbV94bGF0b3JfZnJlZV9idWYocG5vZGUtPnhsYXRvciwgcGJ1ZmZlcik7 Ci0JCX0KLQl9IGVsc2UgewotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gbm9kZV9nZXRfYXR0ciA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAg ICAgIENvcHkgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgaW50 byBhIGRzcF9ub2RlYXR0cgotICogICAgICBzdHJ1Y3R1cmUuCi0gKi8KLWludCBub2RlX2dldF9h dHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCi0JCQkgc3RydWN0IGRzcF9ub2RlYXR0ciAq cGF0dHIsIHUzMiBhdHRyX3NpemUpCi17Ci0Jc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7Ci0K LQlpZiAoIWhub2RlKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWhub2RlX21nciA9IGhub2RlLT5u b2RlX21ncjsKLQkvKiBFbnRlciBobm9kZV9tZ3IgY3JpdGljYWwgc2VjdGlvbiBzaW5jZSB3ZSdy ZSBhY2Nlc3NpbmcKLQkgKiBkYXRhIHRoYXQgY291bGQgYmUgY2hhbmdlZCBieSBub2RlX2NoYW5n ZV9wcmlvcml0eSgpIGFuZAotCSAqIG5vZGVfY29ubmVjdCgpLiAqLwotCW11dGV4X2xvY2soJmhu b2RlX21nci0+bm9kZV9tZ3JfbG9jayk7Ci0JcGF0dHItPmNiX3N0cnVjdCA9IHNpemVvZihzdHJ1 Y3QgZHNwX25vZGVhdHRyKTsKLQkvKiBkc3Bfbm9kZWF0dHJpbiAqLwotCXBhdHRyLT5pbl9ub2Rl X2F0dHJfaW4uY2Jfc3RydWN0ID0KLQkJc2l6ZW9mKHN0cnVjdCBkc3Bfbm9kZWF0dHJpbik7Ci0J cGF0dHItPmluX25vZGVfYXR0cl9pbi5wcmlvID0gaG5vZGUtPnByaW87Ci0JcGF0dHItPmluX25v ZGVfYXR0cl9pbi50aW1lb3V0ID0gaG5vZGUtPnRpbWVvdXQ7Ci0JcGF0dHItPmluX25vZGVfYXR0 cl9pbi5oZWFwX3NpemUgPQotCQlobm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5o ZWFwX3NpemU7Ci0JcGF0dHItPmluX25vZGVfYXR0cl9pbi5wZ3BwX3ZpcnRfYWRkciA9ICh2b2lk ICopCi0JCWhub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqLmdwcF9oZWFwX2FkZHI7 Ci0JcGF0dHItPm5vZGVfYXR0cl9pbnB1dHMgPSBobm9kZS0+bnVtX2dwcF9pbnB1dHM7Ci0JcGF0 dHItPm5vZGVfYXR0cl9vdXRwdXRzID0gaG5vZGUtPm51bV9ncHBfb3V0cHV0czsKLQkvKiBkc3Bf bm9kZWluZm8gKi8KLQlnZXRfbm9kZV9pbmZvKGhub2RlLCAmKHBhdHRyLT5ub2RlX2luZm8pKTsK LQkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAqLwotCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAq LwotCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQotCXJldHVybiAw OwotfQotCi0vKgotICogID09PT09PT09IG5vZGVfZ2V0X2NoYW5uZWxfaWQgPT09PT09PT0KLSAq ICBQdXJwb3NlOgotICogICAgICBHZXQgdGhlIGNoYW5uZWwgaW5kZXggcmVzZXJ2ZWQgZm9yIGEg c3RyZWFtIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUKLSAqICAgICAgaG9zdCBhbmQgYSBub2RlLgot ICovCi1pbnQgbm9kZV9nZXRfY2hhbm5lbF9pZChzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1 MzIgZGlyLCB1MzIgaW5kZXgsCi0JCQkgICAgICAgdTMyICpjaGFuX2lkKQotewotCWVudW0gbm9k ZV90eXBlIG5vZGVfdHlwZTsKLQlpbnQgc3RhdHVzID0gLUVJTlZBTDsKLQotCWlmICghaG5vZGUp IHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0Jbm9kZV90eXBl ID0gbm9kZV9nZXRfdHlwZShobm9kZSk7Ci0JaWYgKG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYg bm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0JCXJl dHVybiBzdGF0dXM7Ci0JfQotCWlmIChkaXIgPT0gRFNQX1RPTk9ERSkgewotCQlpZiAoaW5kZXgg PCBNQVhfSU5QVVRTKGhub2RlKSkgewotCQkJaWYgKGhub2RlLT5pbnB1dHNbaW5kZXhdLnR5cGUg PT0gSE9TVENPTk5FQ1QpIHsKLQkJCQkqY2hhbl9pZCA9IGhub2RlLT5pbnB1dHNbaW5kZXhdLmRl dl9pZDsKLQkJCQlzdGF0dXMgPSAwOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGluZGV4 IDwgTUFYX09VVFBVVFMoaG5vZGUpKSB7Ci0JCQlpZiAoaG5vZGUtPm91dHB1dHNbaW5kZXhdLnR5 cGUgPT0gSE9TVENPTk5FQ1QpIHsKLQkJCQkqY2hhbl9pZCA9IGhub2RlLT5vdXRwdXRzW2luZGV4 XS5kZXZfaWQ7Ci0JCQkJc3RhdHVzID0gMDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gc3RhdHVz OwotfQotCi0vKgotICogID09PT09PT09IG5vZGVfZ2V0X21lc3NhZ2UgPT09PT09PT0KLSAqICBQ dXJwb3NlOgotICogICAgICBSZXRyaWV2ZSBhIG1lc3NhZ2UgZnJvbSBhIG5vZGUgb24gdGhlIERT UC4KLSAqLwotaW50IG5vZGVfZ2V0X21lc3NhZ2Uoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwK LQkJCSAgICBzdHJ1Y3QgZHNwX21zZyAqbWVzc2FnZSwgdTMyIHV0aW1lb3V0KQotewotCXN0cnVj dCBub2RlX21nciAqaG5vZGVfbWdyOwotCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKLQlzdHJ1 Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKLQlpbnQgc3RhdHVzID0gMDsKLQl2 b2lkICp0bXBfYnVmOwotCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKLQlz dHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3I7Ci0KLQlpZiAoIWhub2RlKSB7Ci0JCXN0YXR1 cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCWhwcm9jZXNzb3IgPSBobm9kZS0+ cHJvY2Vzc29yOwotCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0 YXRlLAotCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7Ci0JaWYgKHN0YXR1 cykKLQkJZ290byBmdW5jX2VuZDsKLQkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUg dGhlbiBkb24ndCBhdHRlbXB0IHRvIGdldCB0aGUKLQkgICBtZXNzYWdlICovCi0JaWYgKHByb2Nf c3RhdGUucHJvY19zdGF0ZSA9PSBQUk9DX0VSUk9SKSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJ Z290byBmdW5jX2VuZDsKLQl9Ci0JaG5vZGVfbWdyID0gaG5vZGUtPm5vZGVfbWdyOwotCW5vZGVf dHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOwotCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNT QUdFICYmIG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYKLQkgICAgbm9kZV90eXBlICE9IE5PREVf REFJU1NPQ0tFVCkgewotCQlzdGF0dXMgPSAtRVBFUk07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQot CS8qICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW5sZXNzIGEgbWVzc2FnZSBpcyBhdmFpbGFi bGUuIFNpbmNlCi0JICogIERTUE5vZGVfUmVnaXN0ZXJOb3RpZnkoKSBhbGxvd3Mgbm90aWZpY2F0 aW9uIHdoZW4gYSBtZXNzYWdlCi0JICogIGlzIGF2YWlsYWJsZSwgdGhlIHN5c3RlbSBjYW4gYmUg ZGVzaWduZWQgc28gdGhhdAotCSAqICBEU1BOb2RlX0dldE1lc3NhZ2UoKSBpcyBvbmx5IGNhbGxl ZCB3aGVuIGEgbWVzc2FnZSBpcwotCSAqICBhdmFpbGFibGUuICovCi0JaW50Zl9meG5zID0gaG5v ZGVfbWdyLT5pbnRmX2Z4bnM7Ci0Jc3RhdHVzID0KLQkgICAgKCppbnRmX2Z4bnMtPm1zZ19nZXQp IChobm9kZS0+bXNnX3F1ZXVlX29iaiwgbWVzc2FnZSwgdXRpbWVvdXQpOwotCS8qIENoZWNrIGlm IG1lc3NhZ2UgY29udGFpbnMgU00gZGVzY3JpcHRvciAqLwotCWlmIChzdGF0dXMgfHwgIShtZXNz YWdlLT5jbWQgJiBEU1BfUk1TQlVGREVTQykpCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQkvKiBUcmFu c2xhdGUgRFNQIGJ5dGUgYWRkciB0byBHUFAgVmEuICovCi0JdG1wX2J1ZiA9IGNtbV94bGF0b3Jf dHJhbnNsYXRlKGhub2RlLT54bGF0b3IsCi0JCQkJICAgICAgICh2b2lkICopKG1lc3NhZ2UtPmFy ZzEgKgotCQkJCQkJaG5vZGUtPm5vZGVfbWdyLT4KLQkJCQkJCWRzcF93b3JkX3NpemUpLCBDTU1f RFNQUEEyUEEpOwotCWlmICh0bXBfYnVmICE9IE5VTEwpIHsKLQkJLyogbm93IGNvbnZlcnQgdGhp cyBHUFAgUGEgdG8gVmEgKi8KLQkJdG1wX2J1ZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKGhub2Rl LT54bGF0b3IsIHRtcF9idWYsCi0JCQkJCSAgICAgICBDTU1fUEEyVkEpOwotCQlpZiAodG1wX2J1 ZiAhPSBOVUxMKSB7Ci0JCQkvKiBBZGp1c3QgU00gc2l6ZSBpbiBtc2cgKi8KLQkJCW1lc3NhZ2Ut PmFyZzEgPSAodTMyKSB0bXBfYnVmOwotCQkJbWVzc2FnZS0+YXJnMiAqPSBobm9kZS0+bm9kZV9t Z3ItPmRzcF93b3JkX3NpemU7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRVNSQ0g7Ci0JCX0K LQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRVNSQ0g7Ci0JfQotZnVuY19lbmQ6Ci0JZGV2X2RiZyhi cmlkZ2UsICIlczogaG5vZGU6ICVwIG1lc3NhZ2U6ICVwIHV0aW1lb3V0OiAweCV4XG4iLCBfX2Z1 bmNfXywKLQkJaG5vZGUsIG1lc3NhZ2UsIHV0aW1lb3V0KTsKLQlyZXR1cm4gc3RhdHVzOwotfQot Ci0vKgotICogICA9PT09PT09PSBub2RlX2dldF9ubGRyX29iaiA9PT09PT09PQotICovCi1pbnQg bm9kZV9nZXRfbmxkcl9vYmooc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IsCi0JCQkgICAgIHN0 cnVjdCBubGRyX29iamVjdCAqKm5sZHJfb3ZseW9iaikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlz dHJ1Y3Qgbm9kZV9tZ3IgKm5vZGVfbWdyX29iaiA9IGhub2RlX21ncjsKLQotCWlmICghaG5vZGVf bWdyKQotCQlzdGF0dXMgPSAtRUZBVUxUOwotCWVsc2UKLQkJKm5sZHJfb3ZseW9iaiA9IG5vZGVf bWdyX29iai0+bmxkcl9vYmo7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09 PT09IG5vZGVfZ2V0X3N0cm1fbWdyID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0 dXJucyB0aGUgU3RyZWFtIG1hbmFnZXIuCi0gKi8KLWludCBub2RlX2dldF9zdHJtX21ncihzdHJ1 Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAotCQkJICAgICBzdHJ1Y3Qgc3RybV9tZ3IgKipzdHJtX21h bikKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQotCWlmICghaG5vZGUpCi0JCXN0YXR1cyA9IC1FRkFV TFQ7Ci0JZWxzZQotCQkqc3RybV9tYW4gPSBobm9kZS0+bm9kZV9tZ3ItPnN0cm1fbWdyX29iajsK LQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9nZXRfbG9hZF90 eXBlID09PT09PT09Ci0gKi8KLWVudW0gbmxkcl9sb2FkdHlwZSBub2RlX2dldF9sb2FkX3R5cGUo c3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSkKLXsKLQlpZiAoIWhub2RlKSB7Ci0JCWRldl9kYmco YnJpZGdlLCAiJXM6IEZhaWxlZC4gaG5vZGU6ICVwXG4iLCBfX2Z1bmNfXywgaG5vZGUpOwotCQly ZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEu bm9kZV9vYmoubG9hZF90eXBlOwotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBub2RlX2dldF90 aW1lb3V0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0dXJucyB0aGUgdGltZW91 dCB2YWx1ZSBmb3IgdGhpcyBub2RlLgotICovCi11MzIgbm9kZV9nZXRfdGltZW91dChzdHJ1Y3Qg bm9kZV9vYmplY3QgKmhub2RlKQotewotCWlmICghaG5vZGUpIHsKLQkJZGV2X2RiZyhicmlkZ2Us ICIlczogZmFpbGVkLiBobm9kZTogJXBcbiIsIF9fZnVuY19fLCBobm9kZSk7Ci0JCXJldHVybiAw OwotCX0gZWxzZSB7Ci0JCXJldHVybiBobm9kZS0+dGltZW91dDsKLQl9Ci19Ci0KLS8qCi0gKiAg PT09PT09PT0gbm9kZV9nZXRfdHlwZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJl dHVybnMgdGhlIG5vZGUgdHlwZS4KLSAqLwotZW51bSBub2RlX3R5cGUgbm9kZV9nZXRfdHlwZShz dHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKQotewotCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsK LQotCWlmIChobm9kZSA9PSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFKQotCQlu b2RlX3R5cGUgPSBOT0RFX0dQUDsKLQllbHNlIHsKLQkJaWYgKCFobm9kZSkKLQkJCW5vZGVfdHlw ZSA9IC0xOwotCQllbHNlCi0JCQlub2RlX3R5cGUgPSBobm9kZS0+bnR5cGU7Ci0JfQotCXJldHVy biBub2RlX3R5cGU7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9vbl9leGl0ID09PT09PT09 Ci0gKiAgUHVycG9zZToKLSAqICAgICAgR2V0cyBjYWxsZWQgd2hlbiBSTVNfRVhJVCBpcyByZWNl aXZlZCBmb3IgYSBub2RlLgotICovCi12b2lkIG5vZGVfb25fZXhpdChzdHJ1Y3Qgbm9kZV9vYmpl Y3QgKmhub2RlLCBzMzIgbm9kZV9zdGF0dXMpCi17Ci0JaWYgKCFobm9kZSkKLQkJcmV0dXJuOwot Ci0JLyogU2V0IG5vZGUgc3RhdGUgdG8gZG9uZSAqLwotCU5PREVfU0VUX1NUQVRFKGhub2RlLCBO T0RFX0RPTkUpOwotCWhub2RlLT5leGl0X3N0YXR1cyA9IG5vZGVfc3RhdHVzOwotCWlmIChobm9k ZS0+bG9hZGVkICYmIGhub2RlLT5waGFzZV9zcGxpdCkgewotCQkodm9pZClobm9kZS0+bm9kZV9t Z3ItPm5sZHJfZnhucy51bmxvYWQoaG5vZGUtPgotCQkJCQkJCSAgICAgbmxkcl9ub2RlX29iaiwK LQkJCQkJCQkgICAgIE5MRFJfRVhFQ1VURSk7Ci0JCWhub2RlLT5sb2FkZWQgPSBmYWxzZTsKLQl9 Ci0JLyogVW5ibG9jayBjYWxsIHRvIG5vZGVfdGVybWluYXRlICovCi0JKHZvaWQpc3luY19zZXRf ZXZlbnQoaG5vZGUtPnN5bmNfZG9uZSk7Ci0JLyogTm90aWZ5IGNsaWVudHMgKi8KLQlwcm9jX25v dGlmeV9jbGllbnRzKGhub2RlLT5wcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOwotCW50 Znlfbm90aWZ5KGhub2RlLT5udGZ5X29iaiwgRFNQX05PREVTVEFURUNIQU5HRSk7Ci19Ci0KLS8q Ci0gKiAgPT09PT09PT0gbm9kZV9wYXVzZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IFN1c3BlbmQgZXhlY3V0aW9uIG9mIGEgbm9kZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgRFNQ LgotICovCi1pbnQgbm9kZV9wYXVzZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKQotewotCXN0 cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7Ci0J ZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOwotCWVudW0gbm9kZV9zdGF0ZSBzdGF0ZTsKLQlzdHJ1 Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQlpbnQgc3RhdHVzID0gMDsKLQl1MzIgcHJvY19pZDsK LQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7Ci0Jc3RydWN0IHByb2Nfb2Jq ZWN0ICpocHJvY2Vzc29yOwotCi0JaWYgKCFobm9kZSkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwot CX0gZWxzZSB7Ci0JCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOwotCQlpZiAobm9k ZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKQotCQkJ c3RhdHVzID0gLUVQRVJNOwotCX0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0J c3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5wcm9jZXNzb3IsICZwcm9jX2lk KTsKLQotCWlmIChwcm9jX2lkID09IElWQV9VTklUKQotCQlzdGF0dXMgPSAtRU5PU1lTOwotCi0J aWYgKCFzdGF0dXMpIHsKLQkJaG5vZGVfbWdyID0gaG5vZGUtPm5vZGVfbWdyOwotCi0JCS8qIEVu dGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KLQkJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21n cl9sb2NrKTsKLQkJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7Ci0JCS8qIENoZWNrIG5v ZGUgc3RhdGUgKi8KLQkJaWYgKHN0YXRlICE9IE5PREVfUlVOTklORykKLQkJCXN0YXR1cyA9IC1F QkFEUjsKLQotCQlpZiAoc3RhdHVzKQotCQkJZ290byBmdW5jX2NvbnQ7Ci0JCWhwcm9jZXNzb3Ig PSBobm9kZS0+cHJvY2Vzc29yOwotCQlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29y LCAmcHJvY19zdGF0ZSwKLQkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOwot CQlpZiAoc3RhdHVzKQotCQkJZ290byBmdW5jX2NvbnQ7Ci0JCS8qIElmIHByb2Nlc3NvciBpcyBp biBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQKLQkJICAgdG8gc2VuZCB0aGUgbWVzc2Fn ZSAqLwotCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKLQkJCXN0 YXR1cyA9IC1FUEVSTTsKLQkJCWdvdG8gZnVuY19jb250OwotCQl9Ci0KLQkJc3RhdHVzID0gZGlz cF9ub2RlX2NoYW5nZV9wcmlvcml0eShobm9kZV9tZ3ItPmRpc3Bfb2JqLCBobm9kZSwKLQkJCWhu b2RlX21nci0+ZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklPUklUWV0sCi0JCQlobm9kZS0+bm9k ZV9lbnYsIE5PREVfU1VTUEVOREVEUFJJKTsKLQotCQkvKiBVcGRhdGUgc3RhdGUgKi8KLQkJaWYg KHN0YXR1cyA+PSAwKQotCQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfUEFVU0VEKTsKLQot ZnVuY19jb250OgotCQkvKiBFbmQgb2Ygc3luY19lbnRlcl9jcyAqLwotCQkvKiBMZWF2ZSBjcml0 aWNhbCBzZWN0aW9uICovCi0JCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2Nr KTsKLQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQlwcm9jX25vdGlmeV9jbGllbnRzKGhub2RlLT5w cm9jZXNzb3IsCi0JCQkJCSAgICBEU1BfTk9ERVNUQVRFQ0hBTkdFKTsKLQkJCW50Znlfbm90aWZ5 KGhub2RlLT5udGZ5X29iaiwgRFNQX05PREVTVEFURUNIQU5HRSk7Ci0JCX0KLQl9Ci1mdW5jX2Vu ZDoKLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgc3RhdHVzIDB4JXhcbiIsIF9fZnVu Y19fLCBobm9kZSwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09 PT09IG5vZGVfcHV0X21lc3NhZ2UgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBTZW5k IGEgbWVzc2FnZSB0byBhIG1lc3NhZ2Ugbm9kZSwgdGFzayBub2RlLCBvciBYREFJUyBzb2NrZXQg bm9kZS4gVGhpcwotICogICAgICBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBtZXNzYWdl IHN0cmVhbSBjYW4gYWNjb21tb2RhdGUgdGhlCi0gKiAgICAgIG1lc3NhZ2UsIG9yIGEgdGltZW91 dCBvY2N1cnMuCi0gKi8KLWludCBub2RlX3B1dF9tZXNzYWdlKHN0cnVjdCBub2RlX29iamVjdCAq aG5vZGUsCi0JCQkgICAgY29uc3Qgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCkK LXsKLQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IE5VTEw7Ci0JZW51bSBub2RlX3R5cGUg bm9kZV90eXBlOwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwotCWVu dW0gbm9kZV9zdGF0ZSBzdGF0ZTsKLQlpbnQgc3RhdHVzID0gMDsKLQl2b2lkICp0bXBfYnVmOwot CXN0cnVjdCBkc3BfbXNnIG5ld19tc2c7Ci0Jc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9j X3N0YXRlOwotCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKLQotCWlmICghaG5vZGUp IHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JaHByb2Nlc3Nv ciA9IGhub2RlLT5wcm9jZXNzb3I7Ci0Jc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3Nv ciwgJnByb2Nfc3RhdGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsK LQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCS8qIElmIHByb2Nlc3NvciBpcyBpbiBi YWQgc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0IHNlbmRpbmcgdGhlCi0JICAgbWVzc2FnZSAqLwot CWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgewotCQlzdGF0dXMgPSAt RVBFUk07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCWhub2RlX21nciA9IGhub2RlLT5ub2RlX21n cjsKLQlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKLQlpZiAobm9kZV90eXBlICE9 IE5PREVfTUVTU0FHRSAmJiBub2RlX3R5cGUgIT0gTk9ERV9UQVNLICYmCi0JICAgIG5vZGVfdHlw ZSAhPSBOT0RFX0RBSVNTT0NLRVQpCi0JCXN0YXR1cyA9IC1FUEVSTTsKLQotCWlmICghc3RhdHVz KSB7Ci0JCS8qICBDaGVjayBub2RlIHN0YXRlLiBDYW4ndCBzZW5kIG1lc3NhZ2VzIHRvIGEgbm9k ZSBhZnRlcgotCQkgKiAgd2UndmUgc2VudCB0aGUgUk1TX0VYSVQgY29tbWFuZC4gVGhlcmUgaXMg c3RpbGwgdGhlCi0JCSAqICBwb3NzaWJpbGl0eSB0aGF0IG5vZGVfdGVybWluYXRlIGNhbiBiZSBj YWxsZWQgYWZ0ZXIgd2UndmUKLQkJICogIGNoZWNrZWQgdGhlIHN0YXRlLiBDb3VsZCBhZGQgYW5v dGhlciBTWU5DIG9iamVjdCB0bwotCQkgKiAgcHJldmVudCB0aGlzIChjYW4ndCB1c2Ugbm9kZV9t Z3JfbG9jaywgc2luY2Ugd2UgZG9uJ3QKLQkJICogIHdhbnQgdG8gYmxvY2sgb3RoZXIgTk9ERSBm dW5jdGlvbnMpLiBIb3dldmVyLCB0aGUgbm9kZSBtYXkKLQkJICogIHN0aWxsIGV4aXQgb24gaXRz IG93biwgYmVmb3JlIHRoaXMgbWVzc2FnZSBpcyBzZW50LiAqLwotCQltdXRleF9sb2NrKCZobm9k ZV9tZ3ItPm5vZGVfbWdyX2xvY2spOwotCQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsK LQkJaWYgKHN0YXRlID09IE5PREVfVEVSTUlOQVRJTkcgfHwgc3RhdGUgPT0gTk9ERV9ET05FKQot CQkJc3RhdHVzID0gLUVCQURSOwotCi0JCS8qIGVuZCBvZiBzeW5jX2VudGVyX2NzICovCi0JCW11 dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQl9Ci0JaWYgKHN0YXR1cykK LQkJZ290byBmdW5jX2VuZDsKLQotCS8qIGFzc2lnbiBwbXNnIHZhbHVlcyB0byBuZXcgbXNnICov Ci0JbmV3X21zZyA9ICpwbXNnOwotCS8qIE5vdywgY2hlY2sgaWYgbWVzc2FnZSBjb250YWlucyBh IFNNIGJ1ZmZlciBkZXNjcmlwdG9yICovCi0JaWYgKHBtc2ctPmNtZCAmIERTUF9STVNCVUZERVND KSB7Ci0JCS8qIFRyYW5zbGF0ZSBHUFAgVmEgdG8gRFNQIHBoeXNpY2FsIGJ1ZiBQdHIuICovCi0J CXRtcF9idWYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZShobm9kZS0+eGxhdG9yLAotCQkJCQkgICAg ICAgKHZvaWQgKiluZXdfbXNnLmFyZzEsCi0JCQkJCSAgICAgICBDTU1fVkEyRFNQUEEpOwotCQlp ZiAodG1wX2J1ZiAhPSBOVUxMKSB7Ci0JCQkvKiBnb3QgdHJhbnNsYXRpb24sIGNvbnZlcnQgdG8g TUFVcyBpbiBtc2cgKi8KLQkJCWlmIChobm9kZS0+bm9kZV9tZ3ItPmRzcF93b3JkX3NpemUgIT0g MCkgewotCQkJCW5ld19tc2cuYXJnMSA9Ci0JCQkJICAgICh1MzIpIHRtcF9idWYgLwotCQkJCSAg ICBobm9kZS0+bm9kZV9tZ3ItPmRzcF93b3JkX3NpemU7Ci0JCQkJLyogTUFVcyAqLwotCQkJCW5l d19tc2cuYXJnMiAvPSBobm9kZS0+bm9kZV9tZ3ItPgotCQkJCSAgICBkc3Bfd29yZF9zaXplOwot CQkJfSBlbHNlIHsKLQkJCQlwcl9lcnIoIiVzOiBkc3Bfd29yZF9zaXplIGlzIHplcm8hXG4iLAot CQkJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCQkJc3RhdHVzID0gLUVQRVJNOwkvKiBiYWQgRFNQV29y ZFNpemUgKi8KLQkJCX0KLQkJfSBlbHNlIHsJLyogZmFpbGVkIHRvIHRyYW5zbGF0ZSBidWZmZXIg YWRkcmVzcyAqLwotCQkJc3RhdHVzID0gLUVTUkNIOwotCQl9Ci0JfQotCWlmICghc3RhdHVzKSB7 Ci0JCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOwotCQlzdGF0dXMgPSAoKmludGZf Znhucy0+bXNnX3B1dCkgKGhub2RlLT5tc2dfcXVldWVfb2JqLAotCQkJCQkJICAgICZuZXdfbXNn LCB1dGltZW91dCk7Ci0JfQotZnVuY19lbmQ6Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogaG5vZGU6 ICVwIHBtc2c6ICVwIHV0aW1lb3V0OiAweCV4LCAiCi0JCSJzdGF0dXMgMHgleFxuIiwgX19mdW5j X18sIGhub2RlLCBwbXNnLCB1dGltZW91dCwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQot Ci0vKgotICogID09PT09PT09IG5vZGVfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgUmVnaXN0ZXIgdG8gYmUgbm90aWZpZWQgb24gc3BlY2lmaWMgZXZlbnRz IGZvciB0aGlzIG5vZGUuCi0gKi8KLWludCBub2RlX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3Qgbm9k ZV9vYmplY3QgKmhub2RlLCB1MzIgZXZlbnRfbWFzaywKLQkJCQl1MzIgbm90aWZ5X3R5cGUsCi0J CQkJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pCi17Ci0Jc3RydWN0IGJy aWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlpZiAo IWhub2RlKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJLyogQ2hlY2sgaWYg ZXZlbnQgbWFzayBpcyBhIHZhbGlkIG5vZGUgcmVsYXRlZCBldmVudCAqLwotCQlpZiAoZXZlbnRf bWFzayAmIH4oRFNQX05PREVTVEFURUNIQU5HRSB8IERTUF9OT0RFTUVTU0FHRVJFQURZKSkKLQkJ CXN0YXR1cyA9IC1FSU5WQUw7Ci0KLQkJLyogQ2hlY2sgaWYgbm90aWZ5IHR5cGUgaXMgdmFsaWQg Ki8KLQkJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkKLQkJCXN0YXR1cyA9IC1F SU5WQUw7Ci0KLQkJLyogT25seSBvbmUgTm90aWZpY2F0aW9uIGNhbiBiZSByZWdpc3RlcmVkIGF0 IGEKLQkJICogdGltZSAtIExpbWl0YXRpb24gKi8KLQkJaWYgKGV2ZW50X21hc2sgPT0gKERTUF9O T0RFU1RBVEVDSEFOR0UgfCBEU1BfTk9ERU1FU1NBR0VSRUFEWSkpCi0JCQlzdGF0dXMgPSAtRUlO VkFMOwotCX0KLQlpZiAoIXN0YXR1cykgewotCQlpZiAoZXZlbnRfbWFzayA9PSBEU1BfTk9ERVNU QVRFQ0hBTkdFKSB7Ci0JCQlzdGF0dXMgPSBudGZ5X3JlZ2lzdGVyKGhub2RlLT5udGZ5X29iaiwg aG5vdGlmaWNhdGlvbiwKLQkJCQkJICAgICAgIGV2ZW50X21hc2sgJiBEU1BfTk9ERVNUQVRFQ0hB TkdFLAotCQkJCQkgICAgICAgbm90aWZ5X3R5cGUpOwotCQl9IGVsc2UgewotCQkJLyogU2VuZCBN ZXNzYWdlIHBhcnQgb2YgZXZlbnQgbWFzayB0byBtc2dfY3RybCAqLwotCQkJaW50Zl9meG5zID0g aG5vZGUtPm5vZGVfbWdyLT5pbnRmX2Z4bnM7Ci0JCQlzdGF0dXMgPSAoKmludGZfZnhucy0+bXNn X3JlZ2lzdGVyX25vdGlmeSkKLQkJCSAgICAoaG5vZGUtPm1zZ19xdWV1ZV9vYmosCi0JCQkgICAg IGV2ZW50X21hc2sgJiBEU1BfTk9ERU1FU1NBR0VSRUFEWSwgbm90aWZ5X3R5cGUsCi0JCQkgICAg IGhub3RpZmljYXRpb24pOwotCQl9Ci0KLQl9Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogaG5vZGU6 ICVwIGV2ZW50X21hc2s6IDB4JXggbm90aWZ5X3R5cGU6IDB4JXggIgotCQkiaG5vdGlmaWNhdGlv bjogJXAgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBobm9kZSwKLQkJZXZlbnRfbWFzaywgbm90 aWZ5X3R5cGUsIGhub3RpZmljYXRpb24sIHN0YXR1cyk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQot LyoKLSAqICA9PT09PT09PSBub2RlX3J1biA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IFN0YXJ0IGV4ZWN1dGlvbiBvZiBhIG5vZGUncyBleGVjdXRlIHBoYXNlLCBvciByZXN1bWUgZXhl Y3V0aW9uIG9mIGEgbm9kZQotICogICAgICB0aGF0IGhhcyBiZWVuIHN1c3BlbmRlZCAodmlhIE5P REVfTm9kZVBhdXNlKCkpIG9uIHRoZSBEU1AuIExvYWQgdGhlCi0gKiAgICAgIG5vZGUncyBleGVj dXRlIGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4KLSAqLwotaW50IG5vZGVfcnVuKHN0cnVjdCBub2Rl X29iamVjdCAqaG5vZGUpCi17Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qg bm9kZV9vYmplY3QgKilobm9kZTsKLQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQllbnVt IG5vZGVfdHlwZSBub2RlX3R5cGU7Ci0JZW51bSBub2RlX3N0YXRlIHN0YXRlOwotCXUzMiB1bF9l eGVjdXRlX2Z4bjsKLQl1MzIgdWxfZnhuX2FkZHI7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTMyIHBy b2NfaWQ7Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0 IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOwotCXN0cnVjdCBwcm9jX29iamVjdCAqaHBy b2Nlc3NvcjsKLQotCWlmICghaG5vZGUpIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJZ290byBm dW5jX2VuZDsKLQl9Ci0JaHByb2Nlc3NvciA9IGhub2RlLT5wcm9jZXNzb3I7Ci0Jc3RhdHVzID0g cHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCi0JCQkJc2l6ZW9mKHN0cnVj dCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwot CS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQgdG8g cnVuIHRoZSBub2RlICovCi0JaWYgKHByb2Nfc3RhdGUucHJvY19zdGF0ZSA9PSBQUk9DX0VSUk9S KSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0Jbm9kZV90eXBl ID0gbm9kZV9nZXRfdHlwZShobm9kZSk7Ci0JaWYgKG5vZGVfdHlwZSA9PSBOT0RFX0RFVklDRSkK LQkJc3RhdHVzID0gLUVQRVJNOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19lbmQ7Ci0KLQlo bm9kZV9tZ3IgPSBobm9kZS0+bm9kZV9tZ3I7Ci0JaWYgKCFobm9kZV9tZ3IpIHsKLQkJc3RhdHVz ID0gLUVGQVVMVDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JaW50Zl9meG5zID0gaG5vZGVfbWdy LT5pbnRmX2Z4bnM7Ci0JLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLwotCW11dGV4X2xvY2so Jmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7Ci0KLQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhu b2RlKTsKLQlpZiAoc3RhdGUgIT0gTk9ERV9DUkVBVEVEICYmIHN0YXRlICE9IE5PREVfUEFVU0VE KQotCQlzdGF0dXMgPSAtRUJBRFI7Ci0KLQlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gcHJvY19n ZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5wcm9jZXNzb3IsICZwcm9jX2lkKTsKLQotCWlmIChzdGF0 dXMpCi0JCWdvdG8gZnVuY19jb250MTsKLQotCWlmICgocHJvY19pZCAhPSBEU1BfVU5JVCkgJiYg KHByb2NfaWQgIT0gSVZBX1VOSVQpKQotCQlnb3RvIGZ1bmNfY29udDE7Ci0KLQlpZiAoc3RhdGUg PT0gTk9ERV9DUkVBVEVEKSB7Ci0JCS8qIElmIG5vZGUncyBleGVjdXRlIGZ1bmN0aW9uIGlzIG5v dCBsb2FkZWQsIGxvYWQgaXQgKi8KLQkJaWYgKCEoaG5vZGUtPmxvYWRlZCkgJiYgaG5vZGUtPnBo YXNlX3NwbGl0KSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLmxv YWQoaG5vZGUtPm5sZHJfbm9kZV9vYmosCi0JCQkJCQkJICBOTERSX0VYRUNVVEUpOwotCQkJaWYg KCFzdGF0dXMpIHsKLQkJCQlobm9kZS0+bG9hZGVkID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJ cHJfZXJyKCIlczogZmFpbCAtIGxvYWQgZXhlY3V0ZSBjb2RlOiAweCV4XG4iLAotCQkJCSAgICAg ICBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCX0KLQkJfQotCQlpZiAoIXN0YXR1cykgewotCQkJLyog R2V0IGFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gKi8KLQkJCWlmIChwcm9jX2lk ID09IElWQV9VTklUKQotCQkJCXVsX2V4ZWN1dGVfZnhuID0gKHUzMikgaG5vZGUtPm5vZGVfZW52 OwotCQkJZWxzZSB7Ci0JCQkJc3RhdHVzID0gZ2V0X2Z4bl9hZGRyZXNzKGhub2RlLCAmdWxfZXhl Y3V0ZV9meG4sCi0JCQkJCQkJIEVYRUNVVEVQSEFTRSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFzdGF0 dXMpIHsKLQkJCXVsX2Z4bl9hZGRyID0gaG5vZGVfbWdyLT5meG5fYWRkcnNbUk1TRVhFQ1VURU5P REVdOwotCQkJc3RhdHVzID0KLQkJCSAgICBkaXNwX25vZGVfcnVuKGhub2RlX21nci0+ZGlzcF9v YmosIGhub2RlLAotCQkJCQkgIHVsX2Z4bl9hZGRyLCB1bF9leGVjdXRlX2Z4biwKLQkJCQkJICBo bm9kZS0+bm9kZV9lbnYpOwotCQl9Ci0JfSBlbHNlIGlmIChzdGF0ZSA9PSBOT0RFX1BBVVNFRCkg ewotCQl1bF9meG5fYWRkciA9IGhub2RlX21nci0+ZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklP UklUWV07Ci0JCXN0YXR1cyA9IGRpc3Bfbm9kZV9jaGFuZ2VfcHJpb3JpdHkoaG5vZGVfbWdyLT5k aXNwX29iaiwgaG5vZGUsCi0JCQkJCQkgICB1bF9meG5fYWRkciwgaG5vZGUtPm5vZGVfZW52LAot CQkJCQkJICAgTk9ERV9HRVRfUFJJT1JJVFkoaG5vZGUpKTsKLQl9IGVsc2UgewotCQkvKiBXZSBz aG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KLQl9Ci1mdW5jX2NvbnQxOgotCS8qIFVwZGF0ZSBub2Rl IHN0YXRlLiAqLwotCWlmIChzdGF0dXMgPj0gMCkKLQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5P REVfUlVOTklORyk7Ci0JZWxzZQkJCS8qIFNldCBzdGF0ZSBiYWNrIHRvIHByZXZpb3VzIHZhbHVl ICovCi0JCU5PREVfU0VUX1NUQVRFKGhub2RlLCBzdGF0ZSk7Ci0JLypFbmQgb2Ygc3luY19lbnRl cl9jcyAqLwotCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLwotCW11dGV4X3VubG9jaygmaG5v ZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQlpZiAoc3RhdHVzID49IDApIHsKLQkJcHJvY19ub3Rp ZnlfY2xpZW50cyhobm9kZS0+cHJvY2Vzc29yLCBEU1BfTk9ERVNUQVRFQ0hBTkdFKTsKLQkJbnRm eV9ub3RpZnkoaG5vZGUtPm50Znlfb2JqLCBEU1BfTk9ERVNUQVRFQ0hBTkdFKTsKLQl9Ci1mdW5j X2VuZDoKLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgc3RhdHVzIDB4JXhcbiIsIF9f ZnVuY19fLCBobm9kZSwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09 PT09PT09IG5vZGVfdGVybWluYXRlID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgU2ln bmFsIGEgbm9kZSBydW5uaW5nIG9uIHRoZSBEU1AgdGhhdCBpdCBzaG91bGQgZXhpdCBpdHMgZXhl Y3V0ZSBwaGFzZQotICogICAgICBmdW5jdGlvbi4KLSAqLwotaW50IG5vZGVfdGVybWluYXRlKHN0 cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIGludCAqcHN0YXR1cykKLXsKLQlzdHJ1Y3Qgbm9kZV9v YmplY3QgKnBub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOwotCXN0cnVjdCBub2Rl X21nciAqaG5vZGVfbWdyID0gTlVMTDsKLQllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7Ci0Jc3Ry dWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JZW51bSBub2RlX3N0YXRlIHN0 YXRlOwotCXN0cnVjdCBkc3BfbXNnIG1zZywga2lsbG1zZzsKLQlpbnQgc3RhdHVzID0gMDsKLQl1 MzIgcHJvY19pZCwga2lsbF90aW1lX291dDsKLQlzdHJ1Y3QgZGVoX21nciAqaGRlaF9tZ3I7Ci0J c3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOwotCi0JaWYgKCFobm9kZSB8fCAh aG5vZGUtPm5vZGVfbWdyKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7 Ci0JfQotCWlmIChwbm9kZS0+cHJvY2Vzc29yID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVGQVVM VDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0Jc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lk KHBub2RlLT5wcm9jZXNzb3IsICZwcm9jX2lkKTsKLQotCWlmICghc3RhdHVzKSB7Ci0JCWhub2Rl X21nciA9IGhub2RlLT5ub2RlX21ncjsKLQkJbm9kZV90eXBlID0gbm9kZV9nZXRfdHlwZShobm9k ZSk7Ci0JCWlmIChub2RlX3R5cGUgIT0gTk9ERV9UQVNLICYmIG5vZGVfdHlwZSAhPSBOT0RFX0RB SVNTT0NLRVQpCi0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JfQotCWlmICghc3RhdHVzKSB7Ci0JCS8q IENoZWNrIG5vZGUgc3RhdGUgKi8KLQkJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9s b2NrKTsKLQkJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7Ci0JCWlmIChzdGF0ZSAhPSBO T0RFX1JVTk5JTkcpIHsKLQkJCXN0YXR1cyA9IC1FQkFEUjsKLQkJCS8qIFNldCB0aGUgZXhpdCBz dGF0dXMgaWYgbm9kZSB0ZXJtaW5hdGVkIG9uCi0JCQkgKiBpdHMgb3duLiAqLwotCQkJaWYgKHN0 YXRlID09IE5PREVfRE9ORSkKLQkJCQkqcHN0YXR1cyA9IGhub2RlLT5leGl0X3N0YXR1czsKLQot CQl9IGVsc2UgewotCQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfVEVSTUlOQVRJTkcpOwot CQl9Ci0JCS8qIGVuZCBvZiBzeW5jX2VudGVyX2NzICovCi0JCW11dGV4X3VubG9jaygmaG5vZGVf bWdyLT5ub2RlX21ncl9sb2NrKTsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJLyoKLQkJICogIFNl bmQgZXhpdCBtZXNzYWdlLiBEbyBub3QgY2hhbmdlIHN0YXRlIHRvIE5PREVfRE9ORQotCQkgKiAg aGVyZS4gVGhhdCB3aWxsIGJlIGRvbmUgaW4gY2FsbGJhY2suCi0JCSAqLwotCQlzdGF0dXMgPSBw cm9jX2dldF9zdGF0ZShwbm9kZS0+cHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKLQkJCQkJc2l6ZW9m KHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gZnVu Y19jb250OwotCQkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBh dHRlbXB0IHRvIHNlbmQKLQkJICogQSBraWxsIHRhc2sgY29tbWFuZCAqLwotCQlpZiAocHJvY19z dGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJ CWdvdG8gZnVuY19jb250OwotCQl9Ci0KLQkJbXNnLmNtZCA9IFJNU19FWElUOwotCQltc2cuYXJn MSA9IGhub2RlLT5ub2RlX2VudjsKLQkJa2lsbG1zZy5jbWQgPSBSTVNfS0lMTFRBU0s7Ci0JCWtp bGxtc2cuYXJnMSA9IGhub2RlLT5ub2RlX2VudjsKLQkJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5p bnRmX2Z4bnM7Ci0KLQkJaWYgKGhub2RlLT50aW1lb3V0ID4gTUFYVElNRU9VVCkKLQkJCWtpbGxf dGltZV9vdXQgPSBNQVhUSU1FT1VUOwotCQllbHNlCi0JCQlraWxsX3RpbWVfb3V0ID0gKGhub2Rl LT50aW1lb3V0KSAqIDI7Ci0KLQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPm1zZ19wdXQpIChobm9k ZS0+bXNnX3F1ZXVlX29iaiwgJm1zZywKLQkJCQkJCSAgICBobm9kZS0+dGltZW91dCk7Ci0JCWlm IChzdGF0dXMpCi0JCQlnb3RvIGZ1bmNfY29udDsKLQotCQkvKgotCQkgKiBXYWl0IG9uIHN5bmNo cm9uaXphdGlvbiBvYmplY3QgdGhhdCB3aWxsIGJlCi0JCSAqIHBvc3RlZCBpbiB0aGUgY2FsbGJh Y2sgb24gcmVjZWl2aW5nIFJNU19FWElUCi0JCSAqIG1lc3NhZ2UsIG9yIGJ5IG5vZGVfZGVsZXRl LiBDaGVjayBmb3IgdmFsaWQgaG5vZGUsCi0JCSAqIGluIGNhc2UgcG9zdGVkIGJ5IG5vZGVfZGVs ZXRlKCkuCi0JCSAqLwotCQlzdGF0dXMgPSBzeW5jX3dhaXRfb25fZXZlbnQoaG5vZGUtPnN5bmNf ZG9uZSwKLQkJCQkJICAgIGtpbGxfdGltZV9vdXQgLyAyKTsKLQkJaWYgKHN0YXR1cyAhPSBFVElN RSkKLQkJCWdvdG8gZnVuY19jb250OwotCi0JCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5tc2dfcHV0 KShobm9kZS0+bXNnX3F1ZXVlX29iaiwKLQkJCQkJCSZraWxsbXNnLCBobm9kZS0+dGltZW91dCk7 Ci0JCWlmIChzdGF0dXMpCi0JCQlnb3RvIGZ1bmNfY29udDsKLQkJc3RhdHVzID0gc3luY193YWl0 X29uX2V2ZW50KGhub2RlLT5zeW5jX2RvbmUsCi0JCQkJCSAgICAga2lsbF90aW1lX291dCAvIDIp OwotCQlpZiAoc3RhdHVzKSB7Ci0JCQkvKgotCQkJICogSGVyZSBpdCBnb2VzIHRoZSBwYXJ0IG9m IHRoZSBzaW11bGF0aW9uIG9mCi0JCQkgKiB0aGUgRFNQIGV4Y2VwdGlvbi4KLQkJCSAqLwotCQkJ ZGV2X2dldF9kZWhfbWdyKGhub2RlX21nci0+ZGV2X29iaiwgJmhkZWhfbWdyKTsKLQkJCWlmICgh aGRlaF9tZ3IpCi0JCQkJZ290byBmdW5jX2NvbnQ7Ci0KLQkJCWJyaWRnZV9kZWhfbm90aWZ5KGhk ZWhfbWdyLCBEU1BfU1lTRVJST1IsCi0JCQkJCSAgRFNQX0VYQ0VQVElPTkFCT1JUKTsKLQkJfQot CX0KLWZ1bmNfY29udDoKLQlpZiAoIXN0YXR1cykgewotCQkvKiBFbnRlciBDUyBiZWZvcmUgZ2V0 dGluZyBleGl0IHN0YXR1cywgaW4gY2FzZSBub2RlIHdhcwotCQkgKiBkZWxldGVkLiAqLwotCQlt dXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOwotCQkvKiBNYWtlIHN1cmUgbm9k ZSB3YXNuJ3QgZGVsZXRlZCB3aGlsZSB3ZSBibG9ja2VkICovCi0JCWlmICghaG5vZGUpIHsKLQkJ CXN0YXR1cyA9IC1FUEVSTTsKLQkJfSBlbHNlIHsKLQkJCSpwc3RhdHVzID0gaG5vZGUtPmV4aXRf c3RhdHVzOwotCQkJZGV2X2RiZyhicmlkZ2UsICIlczogaG5vZGU6ICVwIGVudiAweCV4IHN0YXR1 cyAweCV4XG4iLAotCQkJCV9fZnVuY19fLCBobm9kZSwgaG5vZGUtPm5vZGVfZW52LCBzdGF0dXMp OwotCQl9Ci0JCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQl9CQkJ LypFbmQgb2Ygc3luY19lbnRlcl9jcyAqLwotZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0K LQotLyoKLSAqICA9PT09PT09PSBkZWxldGVfbm9kZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgICAgIEZyZWUgR1BQIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gbm9kZV9hbGxvY2F0ZSgpIG9y IG5vZGVfY29ubmVjdCgpLgotICovCi1zdGF0aWMgdm9pZCBkZWxldGVfbm9kZShzdHJ1Y3Qgbm9k ZV9vYmplY3QgKmhub2RlLAotCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKLXsK LQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZh Y2UgKmludGZfZnhuczsKLQl1MzIgaTsKLQllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7Ci0Jc3Ry dWN0IHN0cmVhbV9jaG5sIHN0cmVhbTsKLQlzdHJ1Y3Qgbm9kZV9tc2dhcmdzIG5vZGVfbXNnX2Fy Z3M7Ci0Jc3RydWN0IG5vZGVfdGFza2FyZ3MgdGFza19hcmdfb2JqOwotI2lmZGVmIERTUF9ETU1f REVCVUcKLQlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsKLQlzdHJ1Y3QgcHJvY19vYmplY3Qg KnBfcHJvY19vYmplY3QgPQotCSAgICAoc3RydWN0IHByb2Nfb2JqZWN0ICopaG5vZGUtPnByb2Nl c3NvcjsKLSNlbmRpZgotCWludCBzdGF0dXM7Ci0KLQlpZiAoIWhub2RlKQotCQlnb3RvIGZ1bmNf ZW5kOwotCWhub2RlX21nciA9IGhub2RlLT5ub2RlX21ncjsKLQlpZiAoIWhub2RlX21ncikKLQkJ Z290byBmdW5jX2VuZDsKLQotCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOwotCWlm IChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKLQkJbm9kZV9tc2dfYXJncyA9IGhub2RlLT5j cmVhdGVfYXJncy5hc2Eubm9kZV9tc2dfYXJnczsKLQkJa2ZyZWUobm9kZV9tc2dfYXJncy5wZGF0 YSk7Ci0KLQkJLyogRnJlZSBtc2dfY3RybCBxdWV1ZSAqLwotCQlpZiAoaG5vZGUtPm1zZ19xdWV1 ZV9vYmopIHsKLQkJCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOwotCQkJKCppbnRm X2Z4bnMtPm1zZ19kZWxldGVfcXVldWUpIChobm9kZS0+Ci0JCQkJCQkJICAgIG1zZ19xdWV1ZV9v YmopOwotCQkJaG5vZGUtPm1zZ19xdWV1ZV9vYmogPSBOVUxMOwotCQl9Ci0KLQkJa2ZyZWUoaG5v ZGUtPnN5bmNfZG9uZSk7Ci0KLQkJLyogRnJlZSBhbGwgc3RyZWFtIGluZm8gKi8KLQkJaWYgKGhu b2RlLT5pbnB1dHMpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU5QVVRTKGhub2RlKTsgaSsr KSB7Ci0JCQkJc3RyZWFtID0gaG5vZGUtPmlucHV0c1tpXTsKLQkJCQlmcmVlX3N0cmVhbShobm9k ZV9tZ3IsIHN0cmVhbSk7Ci0JCQl9Ci0JCQlrZnJlZShobm9kZS0+aW5wdXRzKTsKLQkJCWhub2Rl LT5pbnB1dHMgPSBOVUxMOwotCQl9Ci0JCWlmIChobm9kZS0+b3V0cHV0cykgewotCQkJZm9yIChp ID0gMDsgaSA8IE1BWF9PVVRQVVRTKGhub2RlKTsgaSsrKSB7Ci0JCQkJc3RyZWFtID0gaG5vZGUt Pm91dHB1dHNbaV07Ci0JCQkJZnJlZV9zdHJlYW0oaG5vZGVfbWdyLCBzdHJlYW0pOwotCQkJfQot CQkJa2ZyZWUoaG5vZGUtPm91dHB1dHMpOwotCQkJaG5vZGUtPm91dHB1dHMgPSBOVUxMOwotCQl9 Ci0JCXRhc2tfYXJnX29iaiA9IGhub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqOwot CQlpZiAodGFza19hcmdfb2JqLnN0cm1faW5fZGVmKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTUFY X0lOUFVUUyhobm9kZSk7IGkrKykgewotCQkJCWtmcmVlKHRhc2tfYXJnX29iai5zdHJtX2luX2Rl ZltpXS5zel9kZXZpY2UpOwotCQkJCXRhc2tfYXJnX29iai5zdHJtX2luX2RlZltpXS5zel9kZXZp Y2UgPSBOVUxMOwotCQkJfQotCQkJa2ZyZWUodGFza19hcmdfb2JqLnN0cm1faW5fZGVmKTsKLQkJ CXRhc2tfYXJnX29iai5zdHJtX2luX2RlZiA9IE5VTEw7Ci0JCX0KLQkJaWYgKHRhc2tfYXJnX29i ai5zdHJtX291dF9kZWYpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfT1VUUFVUUyhobm9kZSk7 IGkrKykgewotCQkJCWtmcmVlKHRhc2tfYXJnX29iai5zdHJtX291dF9kZWZbaV0uc3pfZGV2aWNl KTsKLQkJCQl0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW2ldLnN6X2RldmljZSA9IE5VTEw7Ci0J CQl9Ci0JCQlrZnJlZSh0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmKTsKLQkJCXRhc2tfYXJnX29i ai5zdHJtX291dF9kZWYgPSBOVUxMOwotCQl9Ci0JCWlmICh0YXNrX2FyZ19vYmouZHNwX2hlYXBf cmVzX2FkZHIpIHsKLQkJCXN0YXR1cyA9IHByb2NfdW5fbWFwKGhub2RlLT5wcm9jZXNzb3IsICh2 b2lkICopCi0JCQkJCSAgICAgdGFza19hcmdfb2JqLmRzcF9oZWFwX2FkZHIsCi0JCQkJCSAgICAg cHJfY3R4dCk7Ci0KLQkJCXN0YXR1cyA9IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkoaG5vZGUtPnBy b2Nlc3NvciwKLQkJCQkJCQkodm9pZCAqKQotCQkJCQkJCXRhc2tfYXJnX29iai4KLQkJCQkJCQlk c3BfaGVhcF9yZXNfYWRkciwKLQkJCQkJCQlwcl9jdHh0KTsKLSNpZmRlZiBEU1BfRE1NX0RFQlVH Ci0JCQlzdGF0dXMgPSBkbW1fZ2V0X2hhbmRsZShwX3Byb2Nfb2JqZWN0LCAmZG1tX21ncik7Ci0J CQlpZiAoZG1tX21ncikKLQkJCQlkbW1fbWVtX21hcF9kdW1wKGRtbV9tZ3IpOwotCQkJZWxzZQot CQkJCXN0YXR1cyA9IERTUF9FSEFORExFOwotI2VuZGlmCi0JCX0KLQl9Ci0JaWYgKG5vZGVfdHlw ZSAhPSBOT0RFX01FU1NBR0UpIHsKLQkJa2ZyZWUoaG5vZGUtPnN0cmVhbV9jb25uZWN0KTsKLQkJ aG5vZGUtPnN0cmVhbV9jb25uZWN0ID0gTlVMTDsKLQl9Ci0Ja2ZyZWUoaG5vZGUtPnN0cl9kZXZf bmFtZSk7Ci0JaG5vZGUtPnN0cl9kZXZfbmFtZSA9IE5VTEw7Ci0KLQlpZiAoaG5vZGUtPm50Znlf b2JqKSB7Ci0JCW50ZnlfZGVsZXRlKGhub2RlLT5udGZ5X29iaik7Ci0JCWtmcmVlKGhub2RlLT5u dGZ5X29iaik7Ci0JCWhub2RlLT5udGZ5X29iaiA9IE5VTEw7Ci0JfQotCi0JLyogVGhlc2Ugd2Vy ZSBhbGxvY2F0ZWQgaW4gZGNkX2dldF9vYmplY3RfZGVmICh2aWEgbm9kZV9hbGxvY2F0ZSkgKi8K LQlrZnJlZShobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnN0cl9jcmVhdGVfcGhh c2VfZnhuKTsKLQlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnN0cl9jcmVhdGVf cGhhc2VfZnhuID0gTlVMTDsKLQotCWtmcmVlKGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9k ZV9vYmouc3RyX2V4ZWN1dGVfcGhhc2VfZnhuKTsKLQlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRh Lm5vZGVfb2JqLnN0cl9leGVjdXRlX3BoYXNlX2Z4biA9IE5VTEw7Ci0KLQlrZnJlZShobm9kZS0+ ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnN0cl9kZWxldGVfcGhhc2VfZnhuKTsKLQlobm9k ZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnN0cl9kZWxldGVfcGhhc2VfZnhuID0gTlVM TDsKLQotCWtmcmVlKGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmouc3RyX2lfYWxn X25hbWUpOwotCWhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmouc3RyX2lfYWxnX25h bWUgPSBOVUxMOwotCi0JLyogRnJlZSBhbGwgU00gYWRkcmVzcyB0cmFuc2xhdG9yIHJlc291cmNl cyAqLwotCWtmcmVlKGhub2RlLT54bGF0b3IpOwotCWtmcmVlKGhub2RlLT5ubGRyX25vZGVfb2Jq KTsKLQlobm9kZS0+bmxkcl9ub2RlX29iaiA9IE5VTEw7Ci0JaG5vZGUtPm5vZGVfbWdyID0gTlVM TDsKLQlrZnJlZShobm9kZSk7Ci0JaG5vZGUgPSBOVUxMOwotZnVuY19lbmQ6Ci0JcmV0dXJuOwot fQotCi0vKgotICogID09PT09PT09IGRlbGV0ZV9ub2RlX21nciA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIEZyZWVzIHRoZSBub2RlIG1hbmFnZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGRl bGV0ZV9ub2RlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncikKLXsKLQlzdHJ1Y3Qgbm9k ZV9vYmplY3QgKmhub2RlLCAqdG1wOwotCi0JaWYgKGhub2RlX21ncikgewotCQkvKiBGcmVlIHJl c291cmNlcyAqLwotCQlpZiAoaG5vZGVfbWdyLT5kY2RfbWdyKQotCQkJZGNkX2Rlc3Ryb3lfbWFu YWdlcihobm9kZV9tZ3ItPmRjZF9tZ3IpOwotCi0JCS8qIFJlbW92ZSBhbnkgZWxlbWVudHMgcmVt YWluaW5nIGluIGxpc3RzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShobm9kZSwgdG1w LCAmaG5vZGVfbWdyLT5ub2RlX2xpc3QsCi0JCQkJbGlzdF9lbGVtKSB7Ci0JCQlsaXN0X2RlbCgm aG5vZGUtPmxpc3RfZWxlbSk7Ci0JCQlkZWxldGVfbm9kZShobm9kZSwgTlVMTCk7Ci0JCX0KLQkJ bXV0ZXhfZGVzdHJveSgmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLQkJaWYgKGhub2RlX21n ci0+bnRmeV9vYmopIHsKLQkJCW50ZnlfZGVsZXRlKGhub2RlX21nci0+bnRmeV9vYmopOwotCQkJ a2ZyZWUoaG5vZGVfbWdyLT5udGZ5X29iaik7Ci0JCX0KLQotCQlpZiAoaG5vZGVfbWdyLT5kaXNw X29iaikKLQkJCWRpc3BfZGVsZXRlKGhub2RlX21nci0+ZGlzcF9vYmopOwotCi0JCWlmIChobm9k ZV9tZ3ItPnN0cm1fbWdyX29iaikKLQkJCXN0cm1fZGVsZXRlKGhub2RlX21nci0+c3RybV9tZ3Jf b2JqKTsKLQotCQkvKiBEZWxldGUgdGhlIGxvYWRlciAqLwotCQlpZiAoaG5vZGVfbWdyLT5ubGRy X29iaikKLQkJCWhub2RlX21nci0+bmxkcl9meG5zLmRlbGV0ZShobm9kZV9tZ3ItPm5sZHJfb2Jq KTsKLQotCQlrZnJlZShobm9kZV9tZ3IpOwotCX0KLX0KLQotLyoKLSAqICA9PT09PT09PSBmaWxs X3N0cmVhbV9jb25uZWN0ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgRmlsbHMgc3Ry ZWFtIGluZm9ybWF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBmaWxsX3N0cmVhbV9jb25uZWN0KHN0 cnVjdCBub2RlX29iamVjdCAqbm9kZTEsCi0JCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMiwK LQkJCQl1MzIgc3RyZWFtMSwgdTMyIHN0cmVhbTIpCi17Ci0JdTMyIHN0cm1faW5kZXg7Ci0Jc3Ry dWN0IGRzcF9zdHJlYW1jb25uZWN0ICpzdHJtMSA9IE5VTEw7Ci0Jc3RydWN0IGRzcF9zdHJlYW1j b25uZWN0ICpzdHJtMiA9IE5VTEw7Ci0JZW51bSBub2RlX3R5cGUgbm9kZTFfdHlwZSA9IE5PREVf VEFTSzsKLQllbnVtIG5vZGVfdHlwZSBub2RlMl90eXBlID0gTk9ERV9UQVNLOwotCi0Jbm9kZTFf dHlwZSA9IG5vZGVfZ2V0X3R5cGUobm9kZTEpOwotCW5vZGUyX3R5cGUgPSBub2RlX2dldF90eXBl KG5vZGUyKTsKLQlpZiAobm9kZTEgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9E RSkgewotCi0JCWlmIChub2RlMV90eXBlICE9IE5PREVfREVWSUNFKSB7Ci0JCQlzdHJtX2luZGV4 ID0gbm9kZTEtPm51bV9pbnB1dHMgKwotCQkJICAgIG5vZGUxLT5udW1fb3V0cHV0cyAtIDE7Ci0J CQlzdHJtMSA9ICYobm9kZTEtPnN0cmVhbV9jb25uZWN0W3N0cm1faW5kZXhdKTsKLQkJCXN0cm0x LT5jYl9zdHJ1Y3QgPSBzaXplb2Yoc3RydWN0IGRzcF9zdHJlYW1jb25uZWN0KTsKLQkJCXN0cm0x LT50aGlzX25vZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMTsKLQkJfQotCi0JCWlmIChub2RlMiAh PSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFKSB7Ci0JCQkvKiBOT0RFID09ID4g Tk9ERSAqLwotCQkJaWYgKG5vZGUxX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKLQkJCQlzdHJtMS0+ Y29ubmVjdGVkX25vZGUgPSBub2RlMjsKLQkJCQlzdHJtMS0+dWlfY29ubmVjdGVkX25vZGVfaWQg PSBub2RlMi0+bm9kZV91dWlkOwotCQkJCXN0cm0xLT5jb25uZWN0ZWRfbm9kZV9zdHJlYW1faW5k ZXggPSBzdHJlYW0yOwotCQkJCXN0cm0xLT5jb25uZWN0X3R5cGUgPSBDT05ORUNUVFlQRV9OT0RF T1VUUFVUOwotCQkJfQotCQkJaWYgKG5vZGUyX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKLQkJCQlz dHJtX2luZGV4ID0gbm9kZTItPm51bV9pbnB1dHMgKwotCQkJCSAgICBub2RlMi0+bnVtX291dHB1 dHMgLSAxOwotCQkJCXN0cm0yID0gJihub2RlMi0+c3RyZWFtX2Nvbm5lY3Rbc3RybV9pbmRleF0p OwotCQkJCXN0cm0yLT5jYl9zdHJ1Y3QgPQotCQkJCSAgICBzaXplb2Yoc3RydWN0IGRzcF9zdHJl YW1jb25uZWN0KTsKLQkJCQlzdHJtMi0+dGhpc19ub2RlX3N0cmVhbV9pbmRleCA9IHN0cmVhbTI7 Ci0JCQkJc3RybTItPmNvbm5lY3RlZF9ub2RlID0gbm9kZTE7Ci0JCQkJc3RybTItPnVpX2Nvbm5l Y3RlZF9ub2RlX2lkID0gbm9kZTEtPm5vZGVfdXVpZDsKLQkJCQlzdHJtMi0+Y29ubmVjdGVkX25v ZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMTsKLQkJCQlzdHJtMi0+Y29ubmVjdF90eXBlID0gQ09O TkVDVFRZUEVfTk9ERUlOUFVUOwotCQkJfQotCQl9IGVsc2UgaWYgKG5vZGUxX3R5cGUgIT0gTk9E RV9ERVZJQ0UpCi0JCQlzdHJtMS0+Y29ubmVjdF90eXBlID0gQ09OTkVDVFRZUEVfR1BQT1VUUFVU OwotCX0gZWxzZSB7Ci0JCS8qIEdQUCA9PSA+IE5PREUgKi8KLQkJc3RybV9pbmRleCA9IG5vZGUy LT5udW1faW5wdXRzICsgbm9kZTItPm51bV9vdXRwdXRzIC0gMTsKLQkJc3RybTIgPSAmKG5vZGUy LT5zdHJlYW1fY29ubmVjdFtzdHJtX2luZGV4XSk7Ci0JCXN0cm0yLT5jYl9zdHJ1Y3QgPSBzaXpl b2Yoc3RydWN0IGRzcF9zdHJlYW1jb25uZWN0KTsKLQkJc3RybTItPnRoaXNfbm9kZV9zdHJlYW1f aW5kZXggPSBzdHJlYW0yOwotCQlzdHJtMi0+Y29ubmVjdF90eXBlID0gQ09OTkVDVFRZUEVfR1BQ SU5QVVQ7Ci0JfQotfQotCi0vKgotICogID09PT09PT09IGZpbGxfc3RyZWFtX2RlZiA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEZpbGxzIFN0cmVhbSBhdHRyaWJ1dGVzLgotICovCi1z dGF0aWMgdm9pZCBmaWxsX3N0cmVhbV9kZWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKLQkJ CSAgICBzdHJ1Y3Qgbm9kZV9zdHJtZGVmICpwc3RybV9kZWYsCi0JCQkgICAgc3RydWN0IGRzcF9z dHJtYXR0ciAqcGF0dHJzKQotewotCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gaG5vZGUt Pm5vZGVfbWdyOwotCi0JaWYgKHBhdHRycyAhPSBOVUxMKSB7Ci0JCXBzdHJtX2RlZi0+bnVtX2J1 ZnMgPSBwYXR0cnMtPm51bV9idWZzOwotCQlwc3RybV9kZWYtPmJ1Zl9zaXplID0KLQkJICAgIHBh dHRycy0+YnVmX3NpemUgLyBobm9kZV9tZ3ItPmRzcF9kYXRhX21hdV9zaXplOwotCQlwc3RybV9k ZWYtPnNlZ19pZCA9IHBhdHRycy0+c2VnX2lkOwotCQlwc3RybV9kZWYtPmJ1Zl9hbGlnbm1lbnQg PSBwYXR0cnMtPmJ1Zl9hbGlnbm1lbnQ7Ci0JCXBzdHJtX2RlZi0+dGltZW91dCA9IHBhdHRycy0+ dGltZW91dDsKLQl9IGVsc2UgewotCQlwc3RybV9kZWYtPm51bV9idWZzID0gREVGQVVMVE5CVUZT OwotCQlwc3RybV9kZWYtPmJ1Zl9zaXplID0KLQkJICAgIERFRkFVTFRCVUZTSVpFIC8gaG5vZGVf bWdyLT5kc3BfZGF0YV9tYXVfc2l6ZTsKLQkJcHN0cm1fZGVmLT5zZWdfaWQgPSBERUZBVUxUU0VH SUQ7Ci0JCXBzdHJtX2RlZi0+YnVmX2FsaWdubWVudCA9IERFRkFVTFRBTElHTk1FTlQ7Ci0JCXBz dHJtX2RlZi0+dGltZW91dCA9IERFRkFVTFRUSU1FT1VUOwotCX0KLX0KLQotLyoKLSAqICA9PT09 PT09PSBmcmVlX3N0cmVhbSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFVwZGF0ZXMg dGhlIGNoYW5uZWwgbWFzayBhbmQgZnJlZXMgdGhlIHBpcGUgaWQuCi0gKi8KLXN0YXRpYyB2b2lk IGZyZWVfc3RyZWFtKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLCBzdHJ1Y3Qgc3RyZWFtX2No bmwgc3RyZWFtKQotewotCS8qIEZyZWUgdXAgdGhlIHBpcGUgaWQgdW5sZXNzIG90aGVyIG5vZGUg aGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLiAqLwotCWlmIChzdHJlYW0udHlwZSA9PSBOT0RFQ09O TkVDVCkgewotCQlpZiAodGVzdF9iaXQoc3RyZWFtLmRldl9pZCwgaG5vZGVfbWdyLT5waXBlX2Rv bmVfbWFwKSkgewotCQkJLyogVGhlIG90aGVyIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVk ICovCi0JCQljbGVhcl9iaXQoc3RyZWFtLmRldl9pZCwgaG5vZGVfbWdyLT5waXBlX2RvbmVfbWFw KTsKLQkJCWNsZWFyX2JpdChzdHJlYW0uZGV2X2lkLCBobm9kZV9tZ3ItPnBpcGVfbWFwKTsKLQkJ fSBlbHNlIHsKLQkJCS8qIFRoZSBvdGhlciBub2RlIGhhcyBub3QgYmVlbiBkZWxldGVkIHlldCAq LwotCQkJc2V0X2JpdChzdHJlYW0uZGV2X2lkLCBobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXApOwot CQl9Ci0JfSBlbHNlIGlmIChzdHJlYW0udHlwZSA9PSBIT1NUQ09OTkVDVCkgewotCQlpZiAoc3Ry ZWFtLmRldl9pZCA8IGhub2RlX21nci0+bnVtX2NobmxzKSB7Ci0JCQljbGVhcl9iaXQoc3RyZWFt LmRldl9pZCwgaG5vZGVfbWdyLT5jaG5sX21hcCk7Ci0JCX0gZWxzZSBpZiAoc3RyZWFtLmRldl9p ZCA8ICgyICogaG5vZGVfbWdyLT5udW1fY2hubHMpKSB7Ci0JCQkvKiBkc3AtZG1hICovCi0JCQlj bGVhcl9iaXQoc3RyZWFtLmRldl9pZCAtICgxICogaG5vZGVfbWdyLT5udW1fY2hubHMpLAotCQkJ CQlobm9kZV9tZ3ItPmRtYV9jaG5sX21hcCk7Ci0JCX0gZWxzZSBpZiAoc3RyZWFtLmRldl9pZCA8 ICgzICogaG5vZGVfbWdyLT5udW1fY2hubHMpKSB7Ci0JCQkvKiB6ZXJvLWNvcHkgKi8KLQkJCWNs ZWFyX2JpdChzdHJlYW0uZGV2X2lkIC0gKDIgKiBobm9kZV9tZ3ItPm51bV9jaG5scyksCi0JCQkJ CWhub2RlX21nci0+emNfY2hubF9tYXApOwotCQl9Ci0JfQotfQotCi0vKgotICogID09PT09PT09 IGdldF9meG5fYWRkcmVzcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZl cyB0aGUgYWRkcmVzcyBmb3IgY3JlYXRlLCBleGVjdXRlIG9yIGRlbGV0ZSBwaGFzZSBmb3IgYSBu b2RlLgotICovCi1zdGF0aWMgaW50IGdldF9meG5fYWRkcmVzcyhzdHJ1Y3Qgbm9kZV9vYmplY3Qg Kmhub2RlLCB1MzIgKmZ4bl9hZGRyLAotCQkJCSAgdTMyIHBoYXNlKQotewotCWNoYXIgKnBzdHJf ZnhuX25hbWUgPSBOVUxMOwotCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gaG5vZGUtPm5v ZGVfbWdyOwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3dpdGNoIChwaGFzZSkgewotCWNhc2UgQ1JF QVRFUEhBU0U6Ci0JCXBzdHJfZnhuX25hbWUgPQotCQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpf ZGF0YS5ub2RlX29iai5zdHJfY3JlYXRlX3BoYXNlX2Z4bjsKLQkJYnJlYWs7Ci0JY2FzZSBFWEVD VVRFUEhBU0U6Ci0JCXBzdHJfZnhuX25hbWUgPQotCQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpf ZGF0YS5ub2RlX29iai5zdHJfZXhlY3V0ZV9waGFzZV9meG47Ci0JCWJyZWFrOwotCWNhc2UgREVM RVRFUEhBU0U6Ci0JCXBzdHJfZnhuX25hbWUgPQotCQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpf ZGF0YS5ub2RlX29iai5zdHJfZGVsZXRlX3BoYXNlX2Z4bjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoK LQkJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi0JCWJyZWFrOwotCX0KLQotCXN0YXR1cyA9 Ci0JICAgIGhub2RlX21nci0+bmxkcl9meG5zLmdldF9meG5fYWRkcihobm9kZS0+bmxkcl9ub2Rl X29iaiwKLQkJCQkJCSAgcHN0cl9meG5fbmFtZSwgZnhuX2FkZHIpOwotCi0JcmV0dXJuIHN0YXR1 czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBnZXRfbm9kZV9pbmZvID09PT09PT09Ci0gKiAgUHVy cG9zZToKLSAqICAgICAgUmV0cmlldmVzIHRoZSBub2RlIGluZm9ybWF0aW9uLgotICovCi12b2lk IGdldF9ub2RlX2luZm8oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgc3RydWN0IGRzcF9ub2Rl aW5mbyAqbm9kZV9pbmZvKQotewotCXUzMiBpOwotCi0Jbm9kZV9pbmZvLT5jYl9zdHJ1Y3QgPSBz aXplb2Yoc3RydWN0IGRzcF9ub2RlaW5mbyk7Ci0Jbm9kZV9pbmZvLT5uYl9ub2RlX2RhdGFiYXNl X3Byb3BzID0KLQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJv cHM7Ci0Jbm9kZV9pbmZvLT5leGVjdXRpb25fcHJpb3JpdHkgPSBobm9kZS0+cHJpbzsKLQlub2Rl X2luZm8tPmRldmljZV9vd25lciA9IGhub2RlLT5kZXZpY2Vfb3duZXI7Ci0Jbm9kZV9pbmZvLT5u dW1iZXJfc3RyZWFtcyA9IGhub2RlLT5udW1faW5wdXRzICsgaG5vZGUtPm51bV9vdXRwdXRzOwot CW5vZGVfaW5mby0+bm9kZV9lbnYgPSBobm9kZS0+bm9kZV9lbnY7Ci0KLQlub2RlX2luZm8tPm5z X2V4ZWN1dGlvbl9zdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKLQotCS8qIENvcHkgc3Ry ZWFtIGNvbm5lY3QgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCBobm9kZS0+bnVtX2lucHV0cyAr IGhub2RlLT5udW1fb3V0cHV0czsgaSsrKQotCQlub2RlX2luZm8tPnNjX3N0cmVhbV9jb25uZWN0 aW9uW2ldID0gaG5vZGUtPnN0cmVhbV9jb25uZWN0W2ldOwotCi19Ci0KLS8qCi0gKiAgPT09PT09 PT0gZ2V0X25vZGVfcHJvcHMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXRyaWV2 ZSBub2RlIHByb3BlcnRpZXMuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X25vZGVfcHJvcHMoc3RydWN0 IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKLQkJCQkgc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwK LQkJCQkgY29uc3Qgc3RydWN0IGRzcF91dWlkICpub2RlX3V1aWQsCi0JCQkJIHN0cnVjdCBkY2Rf Z2VuZXJpY29iaiAqZGNkX3Byb3ApCi17Ci0JdTMyIGxlbjsKLQlzdHJ1Y3Qgbm9kZV9tc2dhcmdz ICpwbXNnX2FyZ3M7Ci0Jc3RydWN0IG5vZGVfdGFza2FyZ3MgKnRhc2tfYXJnX29iajsKLQllbnVt IG5vZGVfdHlwZSBub2RlX3R5cGUgPSBOT0RFX1RBU0s7Ci0Jc3RydWN0IGRzcF9uZGJwcm9wcyAq cG5kYl9wcm9wcyA9Ci0JICAgICYoZGNkX3Byb3AtPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9w cyk7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JY2hhciBzel91dWlkW01BWFVVSURMRU5dOwotCi0Jc3Rh dHVzID0gZGNkX2dldF9vYmplY3RfZGVmKGhkY2RfbWdyLCAoc3RydWN0IGRzcF91dWlkICopbm9k ZV91dWlkLAotCQkJCSAgICBEU1BfRENETk9ERVRZUEUsIGRjZF9wcm9wKTsKLQotCWlmICghc3Rh dHVzKSB7Ci0JCWhub2RlLT5udHlwZSA9IG5vZGVfdHlwZSA9IHBuZGJfcHJvcHMtPm50eXBlOwot Ci0JCS8qIENyZWF0ZSBVVUlEIHZhbHVlIHRvIHNldCBpbiByZWdpc3RyeS4gKi8KLQkJc25wcmlu dGYoc3pfdXVpZCwgTUFYVVVJRExFTiwgIiVwVUwiLCBub2RlX3V1aWQpOwotCQlkZXZfZGJnKGJy aWRnZSwgIihub2RlKSBVVUlEOiAlc1xuIiwgc3pfdXVpZCk7Ci0KLQkJLyogRmlsbCBpbiBtZXNz YWdlIGFyZ3MgdGhhdCBjb21lIGZyb20gTkRCICovCi0JCWlmIChub2RlX3R5cGUgIT0gTk9ERV9E RVZJQ0UpIHsKLQkJCXBtc2dfYXJncyA9ICYoaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS5ub2RlX21z Z19hcmdzKTsKLQkJCXBtc2dfYXJncy0+c2VnX2lkID0KLQkJCSAgICBkY2RfcHJvcC0+b2JqX2Rh dGEubm9kZV9vYmoubXNnX3NlZ2lkOwotCQkJcG1zZ19hcmdzLT5ub3RpZnlfdHlwZSA9Ci0JCQkg ICAgZGNkX3Byb3AtPm9ial9kYXRhLm5vZGVfb2JqLm1zZ19ub3RpZnlfdHlwZTsKLQkJCXBtc2df YXJncy0+bWF4X21zZ3MgPSBwbmRiX3Byb3BzLT5tZXNzYWdlX2RlcHRoOwotCQkJZGV2X2RiZyhi cmlkZ2UsICIobm9kZSkgTWF4IE51bWJlciBvZiBNZXNzYWdlczogMHgleFxuIiwKLQkJCQlwbXNn X2FyZ3MtPm1heF9tc2dzKTsKLQkJfSBlbHNlIHsKLQkJCS8qIENvcHkgZGV2aWNlIG5hbWUgKi8K LQkJCWxlbiA9IHN0cmxlbihwbmRiX3Byb3BzLT5hY19uYW1lKTsKLQkJCWhub2RlLT5zdHJfZGV2 X25hbWUgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwotCQkJaWYgKGhub2RlLT5zdHJf ZGV2X25hbWUgPT0gTlVMTCkgewotCQkJCXN0YXR1cyA9IC1FTk9NRU07Ci0JCQl9IGVsc2Ugewot CQkJCXN0cm5jcHkoaG5vZGUtPnN0cl9kZXZfbmFtZSwKLQkJCQkJcG5kYl9wcm9wcy0+YWNfbmFt ZSwgbGVuKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBGaWxsIGluIGNy ZWF0ZSBhcmdzIHRoYXQgY29tZSBmcm9tIE5EQiAqLwotCQlpZiAobm9kZV90eXBlID09IE5PREVf VEFTSyB8fCBub2RlX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7Ci0JCQl0YXNrX2FyZ19vYmog PSAmKGhub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqKTsKLQkJCXRhc2tfYXJnX29i ai0+cHJpbyA9IHBuZGJfcHJvcHMtPnByaW87Ci0JCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NpemUg PSBwbmRiX3Byb3BzLT5zdGFja19zaXplOwotCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6 ZSA9Ci0JCQkgICAgcG5kYl9wcm9wcy0+c3lzX3N0YWNrX3NpemU7Ci0JCQl0YXNrX2FyZ19vYmot PnN0YWNrX3NlZyA9IHBuZGJfcHJvcHMtPnN0YWNrX3NlZzsKLQkJCWRldl9kYmcoYnJpZGdlLCAi KG5vZGUpIFByaW9yaXR5OiAweCV4IFN0YWNrIFNpemU6ICIKLQkJCQkiMHgleCB3b3JkcyBTeXN0 ZW0gU3RhY2sgU2l6ZTogMHgleCB3b3JkcyAiCi0JCQkJIlN0YWNrIFNlZ21lbnQ6IDB4JXggcHJv ZmlsZSBjb3VudCA6IDB4JXhcbiIsCi0JCQkJdGFza19hcmdfb2JqLT5wcmlvLCB0YXNrX2FyZ19v YmotPnN0YWNrX3NpemUsCi0JCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6ZSwKLQkJCQl0 YXNrX2FyZ19vYmotPnN0YWNrX3NlZywKLQkJCQlwbmRiX3Byb3BzLT5jb3VudF9wcm9maWxlcyk7 Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IGdldF9w cm9jX3Byb3BzID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIHBy b2Nlc3NvciBwcm9wZXJ0aWVzLgotICovCi1zdGF0aWMgaW50IGdldF9wcm9jX3Byb3BzKHN0cnVj dCBub2RlX21nciAqaG5vZGVfbWdyLAotCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmop Ci17Ci0Jc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKLQlzdHJ1Y3QgYnJpZGdlX2Rldl9j b250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlzdGF0dXMgPSBk ZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmcGJyaWRnZV9jb250ZXh0KTsKLQlpZiAo IXBicmlkZ2VfY29udGV4dCkKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQotCWlmICghc3RhdHVzKSB7 Ci0JCWhvc3RfcmVzID0gcGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7Ci0JCWlmICghaG9zdF9y ZXMpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlobm9kZV9tZ3ItPmNobmxfb2Zmc2V0ID0gaG9zdF9y ZXMtPmNobmxfb2Zmc2V0OwotCQlobm9kZV9tZ3ItPmNobmxfYnVmX3NpemUgPSBob3N0X3Jlcy0+ Y2hubF9idWZfc2l6ZTsKLQkJaG5vZGVfbWdyLT5udW1fY2hubHMgPSBob3N0X3Jlcy0+bnVtX2No bmxzOwotCi0JCS8qCi0JCSAqICBQUk9DIHdpbGwgYWRkIGFuIEFQSSB0byBnZXQgZHNwX3Byb2Nl c3NvcmluZm8uCi0JCSAqICBGaWxsIGluIGRlZmF1bHQgdmFsdWVzIGZvciBub3cuCi0JCSAqLwot CQkvKiBUT0RPIC0tIEluc3RlYWQgb2YgaGFyZCBjb2RpbmcsIHRha2UgZnJvbSByZWdpc3RyeSAq LwotCQlobm9kZV9tZ3ItPnByb2NfZmFtaWx5ID0gNjAwMDsKLQkJaG5vZGVfbWdyLT5wcm9jX3R5 cGUgPSA2NDEwOwotCQlobm9kZV9tZ3ItPm1pbl9wcmkgPSBEU1BfTk9ERV9NSU5fUFJJT1JJVFk7 Ci0JCWhub2RlX21nci0+bWF4X3ByaSA9IERTUF9OT0RFX01BWF9QUklPUklUWTsKLQkJaG5vZGVf bWdyLT5kc3Bfd29yZF9zaXplID0gRFNQV09SRFNJWkU7Ci0JCWhub2RlX21nci0+ZHNwX2RhdGFf bWF1X3NpemUgPSBEU1BXT1JEU0laRTsKLQkJaG5vZGVfbWdyLT5kc3BfbWF1X3NpemUgPSAxOwot Ci0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gbm9kZV9nZXRfdXVp ZF9wcm9wcyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEZldGNoIE5vZGUgVVVJRCBw cm9wZXJ0aWVzIGZyb20gRENEL0RPRiBmaWxlLgotICovCi1pbnQgbm9kZV9nZXRfdXVpZF9wcm9w cyh2b2lkICpocHJvY2Vzc29yLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9k ZV91dWlkLAotCQkJICAgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKm5vZGVfcHJvcHMpCi17Ci0J c3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpo ZGV2X29iajsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgZGNkX25vZGVwcm9wcyBkY2Rfbm9k ZV9wcm9wczsKLQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7Ci0KLQlpZiAo aHByb2Nlc3NvciA9PSBOVUxMIHx8IG5vZGVfdXVpZCA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IC1F RkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhw cm9jZXNzb3IsICZwcm9jX3N0YXRlLAotCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0 YXRlKSk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQkvKiBJZiBwcm9jZXNzb3Ig aXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0Ci0JICAgdG8gc2VuZCB0aGUgbWVz c2FnZSAqLwotCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgewotCQlz dGF0dXMgPSAtRVBFUk07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0Jc3RhdHVzID0gcHJvY19n ZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOwotCWlmIChoZGV2X29iaikgewot CQlzdGF0dXMgPSBkZXZfZ2V0X25vZGVfbWFuYWdlcihoZGV2X29iaiwgJmhub2RlX21ncik7Ci0J CWlmIChobm9kZV9tZ3IgPT0gTlVMTCkgewotCQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJCWdvdG8g ZnVuY19lbmQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEVudGVyIHRoZSBjcml0aWNhbCBzZWN0aW9u LiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCi0JICogZGNkX2dldF9vYmplY3RfZGVmIHdpbGwgdWx0 aW1hdGVseSBlbmQgdXAgY2FsbGluZyBkYmxsX29wZW4vY2xvc2UsCi0JICogd2hpY2ggbmVlZHMg dG8gYmUgcHJvdGVjdGVkIGluIG9yZGVyIHRvIG5vdCBjb3JydXB0IHRoZSB6bGliIG1hbmFnZXIK LQkgKiAoQ09EKS4KLQkgKi8KLQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2sp OwotCi0JZGNkX25vZGVfcHJvcHMuc3RyX2NyZWF0ZV9waGFzZV9meG4gPSBOVUxMOwotCWRjZF9u b2RlX3Byb3BzLnN0cl9leGVjdXRlX3BoYXNlX2Z4biA9IE5VTEw7Ci0JZGNkX25vZGVfcHJvcHMu c3RyX2RlbGV0ZV9waGFzZV9meG4gPSBOVUxMOwotCWRjZF9ub2RlX3Byb3BzLnN0cl9pX2FsZ19u YW1lID0gTlVMTDsKLQotCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0X2RlZihobm9kZV9tZ3ItPmRj ZF9tZ3IsCi0JCShzdHJ1Y3QgZHNwX3V1aWQgKilub2RlX3V1aWQsIERTUF9EQ0ROT0RFVFlQRSwK LQkJKHN0cnVjdCBkY2RfZ2VuZXJpY29iaiAqKSZkY2Rfbm9kZV9wcm9wcyk7Ci0KLQlpZiAoIXN0 YXR1cykgewotCQkqbm9kZV9wcm9wcyA9IGRjZF9ub2RlX3Byb3BzLm5kYl9wcm9wczsKLQkJa2Zy ZWUoZGNkX25vZGVfcHJvcHMuc3RyX2NyZWF0ZV9waGFzZV9meG4pOwotCi0JCWtmcmVlKGRjZF9u b2RlX3Byb3BzLnN0cl9leGVjdXRlX3BoYXNlX2Z4bik7Ci0KLQkJa2ZyZWUoZGNkX25vZGVfcHJv cHMuc3RyX2RlbGV0ZV9waGFzZV9meG4pOwotCi0JCWtmcmVlKGRjZF9ub2RlX3Byb3BzLnN0cl9p X2FsZ19uYW1lKTsKLQl9Ci0JLyogIExlYXZlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCB3ZSdyZSBk b25lLiAqLwotCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKLWZ1bmNf ZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gZ2V0X3Jtc19meG5z ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmUgdGhlIFJNUyBmdW5jdGlv bnMuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X3Jtc19meG5zKHN0cnVjdCBub2RlX21nciAqaG5vZGVf bWdyKQotewotCXMzMiBpOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaG5vZGVfbWdy LT5kZXZfb2JqOwotCWludCBzdGF0dXMgPSAwOwotCi0Jc3RhdGljIGNoYXIgKnBzel9meG5zW05V TVJNU0ZYTlNdID0gewotCQkiUk1TX3F1ZXJ5U2VydmVyIiwJLyogUk1TUVVFUllTRVJWRVIgKi8K LQkJIlJNU19jb25maWd1cmVTZXJ2ZXIiLAkvKiBSTVNDT05GSUdVUkVTRVJWRVIgKi8KLQkJIlJN U19jcmVhdGVOb2RlIiwJLyogUk1TQ1JFQVRFTk9ERSAqLwotCQkiUk1TX2V4ZWN1dGVOb2RlIiwJ LyogUk1TRVhFQ1VURU5PREUgKi8KLQkJIlJNU19kZWxldGVOb2RlIiwJLyogUk1TREVMRVRFTk9E RSAqLwotCQkiUk1TX2NoYW5nZU5vZGVQcmlvcml0eSIsCS8qIFJNU0NIQU5HRU5PREVQUklPUklU WSAqLwotCQkiUk1TX3JlYWRNZW1vcnkiLAkvKiBSTVNSRUFETUVNT1JZICovCi0JCSJSTVNfd3Jp dGVNZW1vcnkiLAkvKiBSTVNXUklURU1FTU9SWSAqLwotCQkiUk1TX2NvcHkiLAkvKiBSTVNDT1BZ ICovCi0JfTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1STVNGWE5TOyBpKyspIHsKLQkJc3RhdHVz ID0gZGV2X2dldF9zeW1ib2woZGV2X29iaiwgcHN6X2Z4bnNbaV0sCi0JCQkJCSYoaG5vZGVfbWdy LT5meG5fYWRkcnNbaV0pKTsKLQkJaWYgKHN0YXR1cykgewotCQkJaWYgKHN0YXR1cyA9PSAtRVNQ SVBFKSB7Ci0JCQkJLyoKLQkJCQkgKiAgTWF5IGJlIGxvYWRlZCBkeW5hbWljYWxseSAoaW4gdGhl IGZ1dHVyZSksCi0JCQkJICogIGJ1dCByZXR1cm4gYW4gZXJyb3IgZm9yIG5vdy4KLQkJCQkgKi8K LQkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBSTVMgZnVuY3Rpb246ICVzIGN1cnJlbnRseSIKLQkJ CQkJIiBub3QgbG9hZGVkXG4iLCBfX2Z1bmNfXywgcHN6X2Z4bnNbaV0pOwotCQkJfSBlbHNlIHsK LQkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBTeW1ib2wgbm90IGZvdW5kOiAlcyAiCi0JCQkJCSJz dGF0dXMgPSAweCV4XG4iLCBfX2Z1bmNfXywKLQkJCQkJcHN6X2Z4bnNbaV0sIHN0YXR1cyk7Ci0J CQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICog ID09PT09PT09IG92bHkgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBDYWxsZWQgZHVy aW5nIG92ZXJsYXkuU2VuZHMgY29tbWFuZCB0byBSTVMgdG8gY29weSBhIGJsb2NrIG9mIGRhdGEu Ci0gKi8KLXN0YXRpYyB1MzIgb3ZseSh2b2lkICpwcml2X3JlZiwgdTMyIGRzcF9ydW5fYWRkciwg dTMyIGRzcF9sb2FkX2FkZHIsCi0JCXUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fc3BhY2UpCi17 Ci0Jc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilwcml2 X3JlZjsKLQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQl1MzIgdWxfYnl0ZXMgPSAwOwot CXUzMiB1bF9zaXplOwotCXUzMiB1bF90aW1lb3V0OwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVj dCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKLQkvKiBGdW5jdGlvbiBpbnRl cmZhY2UgdG8gQnJpZGdlIGRyaXZlciovCi0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpp bnRmX2Z4bnM7Ci0KLQlobm9kZV9tZ3IgPSBobm9kZS0+bm9kZV9tZ3I7Ci0KLQl1bF9zaXplID0g dWxfbnVtX2J5dGVzIC8gaG5vZGVfbWdyLT5kc3Bfd29yZF9zaXplOwotCXVsX3RpbWVvdXQgPSBo bm9kZS0+dGltZW91dDsKLQotCS8qIENhbGwgbmV3IE1lbUNvcHkgZnVuY3Rpb24gKi8KLQlpbnRm X2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKLQlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9j b250ZXh0KGhub2RlX21nci0+ZGV2X29iaiwgJmhicmlkZ2VfY29udGV4dCk7Ci0JaWYgKCFzdGF0 dXMpIHsKLQkJc3RhdHVzID0KLQkJICAgICgqaW50Zl9meG5zLT5icmRfbWVtX2NvcHkpIChoYnJp ZGdlX2NvbnRleHQsCi0JCQkJCQlkc3BfcnVuX2FkZHIsIGRzcF9sb2FkX2FkZHIsCi0JCQkJCQl1 bF9udW1fYnl0ZXMsICh1MzIpIG1lbV9zcGFjZSk7Ci0JCWlmICghc3RhdHVzKQotCQkJdWxfYnl0 ZXMgPSB1bF9udW1fYnl0ZXM7Ci0JCWVsc2UKLQkJCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGNv cHkgYnJkIG1lbW9yeSwgc3RhdHVzIDB4JXhcbiIsCi0JCQkJIF9fZnVuY19fLCBzdGF0dXMpOwot CX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGdldCBCcmlkZ2UgY29udGV4dCwg c3RhdHVzIDB4JXhcbiIsCi0JCQkgX19mdW5jX18sIHN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIHVs X2J5dGVzOwotfQotCi0vKgotICogID09PT09PT09IG1lbV93cml0ZSA9PT09PT09PQotICovCi1z dGF0aWMgdTMyIG1lbV93cml0ZSh2b2lkICpwcml2X3JlZiwgdTMyIGRzcF9hZGQsIHZvaWQgKnBi dWYsCi0JCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSkKLXsKLQlzdHJ1Y3Qg bm9kZV9vYmplY3QgKmhub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKXByaXZfcmVmOwotCXN0 cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOwotCXUxNiBtZW1fc2VjdF90eXBlOwotCXUzMiB1bF90 aW1lb3V0OwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhi cmlkZ2VfY29udGV4dDsKLQkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAq LwotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwotCi0JaG5vZGVfbWdy ID0gaG5vZGUtPm5vZGVfbWdyOwotCi0JdWxfdGltZW91dCA9IGhub2RlLT50aW1lb3V0OwotCW1l bV9zZWN0X3R5cGUgPSAobWVtX3NwYWNlICYgREJMTF9DT0RFKSA/IFJNU19DT0RFIDogUk1TX0RB VEE7Ci0KLQkvKiBDYWxsIG5ldyBNZW1Xcml0ZSBmdW5jdGlvbiAqLwotCWludGZfZnhucyA9IGhu b2RlX21nci0+aW50Zl9meG5zOwotCXN0YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaG5v ZGVfbWdyLT5kZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKLQlzdGF0dXMgPSAoKmludGZfZnhu cy0+YnJkX21lbV93cml0ZSkgKGhicmlkZ2VfY29udGV4dCwgcGJ1ZiwKLQkJCQkJZHNwX2FkZCwg dWxfbnVtX2J5dGVzLCBtZW1fc2VjdF90eXBlKTsKLQotCXJldHVybiB1bF9udW1fYnl0ZXM7Ci19 Ci0KLSNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCi0vKgotICogID09PT09PT09 IG5vZGVfZmluZF9hZGRyID09PT09PT09Ci0gKi8KLWludCBub2RlX2ZpbmRfYWRkcihzdHJ1Y3Qg bm9kZV9tZ3IgKm5vZGVfbWdyLCB1MzIgc3ltX2FkZHIsCi0JCXUzMiBvZmZzZXRfcmFuZ2UsIHZv aWQgKnN5bV9hZGRyX291dHB1dCwgY2hhciAqc3ltX25hbWUpCi17Ci0Jc3RydWN0IG5vZGVfb2Jq ZWN0ICpub2RlX29iajsKLQlpbnQgc3RhdHVzID0gLUVOT0VOVDsKLQotCWxpc3RfZm9yX2VhY2hf ZW50cnkobm9kZV9vYmosICZub2RlX21nci0+bm9kZV9saXN0LCBsaXN0X2VsZW0pIHsKLQkJc3Rh dHVzID0gbmxkcl9maW5kX2FkZHIobm9kZV9vYmotPm5sZHJfbm9kZV9vYmosIHN5bV9hZGRyLAot CQkJb2Zmc2V0X3JhbmdlLCBzeW1fYWRkcl9vdXRwdXQsIHN5bV9uYW1lKTsKLQkJaWYgKCFzdGF0 dXMpIHsKLQkJCXByX2RlYnVnKCIlcygweCV4LCAweCV4LCAweCV4LCAweCV4LCAlcylcbiIsIF9f ZnVuY19fLAotCQkJCSAodW5zaWduZWQgaW50KSBub2RlX21nciwKLQkJCQkgc3ltX2FkZHIsIG9m ZnNldF9yYW5nZSwKLQkJCQkgKHVuc2lnbmVkIGludCkgc3ltX2FkZHJfb3V0cHV0LCBzeW1fbmFt ZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0jZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYyBiL2RyaXZl cnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMjNlNTE0Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3Bicmlk Z2Uvcm1nci9wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODM2ICswLDAgQEAKLS8qCi0gKiBw cm9jLmMKLSAqCi0gKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZv ciBUSSBPTUFQIHByb2Nlc3NvcnMuCi0gKgotICogUHJvY2Vzc29yIGludGVyZmFjZSBhdCB0aGUg ZHJpdmVyIGxldmVsLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3Ry dW1lbnRzLCBJbmMuCi0gKgotICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0Ug SVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElF RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KLSNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5j bHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRl ZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0 YXRpb24gTGF5ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgotI2luY2x1ZGUgPGRz cGJyaWRnZS9zeW5jLmg+Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g QnJpZGdlIERyaXZlciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+Ci0jaW5jbHVk ZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+Ci0j aW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jcHJpdi5o PgotI2luY2x1ZGUgPGRzcGJyaWRnZS9kbW0uaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv bWdyLmg+Ci0jaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGUuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv bmxkci5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KLQotLyogIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRj ZC5oPgotI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHNw aW9jdGwuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+Ci0KLS8qICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2Mu aD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+Ci0KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcmVz b3VyY2VjbGVhbnVwLmg+Ci0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g RGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLwotI2RlZmluZSBNQVhDTURMSU5F TEVOICAgICAgIDI1NQotI2RlZmluZSBQUk9DX0VOVlBST0NJRCAgICAgICJQUk9DX0lEPSVkIgot I2RlZmluZSBNQVhQUk9DSURMRU4JKDggKyA1KQotI2RlZmluZSBQUk9DX0RGTFRfVElNRU9VVCAg IDEwMDAwCS8qIFRpbWUgb3V0IGluIG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBQV1JfVElNRU9V VAkgNTAwCS8qIFNsZWVwL3dha2UgdGltb3V0IGluIG1zZWMgKi8KLSNkZWZpbmUgRVhURU5ECSAg ICAgICJfRVhUX0VORCIJLyogRXh0bWVtIGVuZCBhZGRyIGluIERTUCBiaW5hcnkgKi8KLQotI2Rl ZmluZSBEU1BfQ0FDSEVfTElORSAxMjgKLQotI2RlZmluZSBCVUZNT0RFX01BU0sJKDMgPDwgMTQp Ci0KLS8qIEJ1ZmZlciBtb2RlcyBmcm9tIERTUCBwZXJzcGVjdGl2ZSAqLwotI2RlZmluZSBSQlVG CQkweDQwMDAJCS8qIElucHV0IGJ1ZmZlciAqLwotI2RlZmluZSBXQlVGCQkweDgwMDAJCS8qIE91 dHB1dCBCdWZmZXIgKi8KLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmJyaWRnZTsKLQotLyogIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KLQotLyogVGhlIHBy b2Nfb2JqZWN0IHN0cnVjdHVyZS4gKi8KLXN0cnVjdCBwcm9jX29iamVjdCB7Ci0Jc3RydWN0IGxp c3RfaGVhZCBsaW5rOwkvKiBMaW5rIHRvIG5leHQgcHJvY19vYmplY3QgKi8KLQlzdHJ1Y3QgZGV2 X29iamVjdCAqZGV2X29iajsJLyogRGV2aWNlIHRoaXMgUFJPQyByZXByZXNlbnRzICovCi0JdTMy IHByb2Nlc3M7CQkvKiBQcm9jZXNzIG93bmluZyB0aGlzIFByb2Nlc3NvciAqLwotCXN0cnVjdCBt Z3Jfb2JqZWN0ICptZ3Jfb2JqOwkvKiBNYW5hZ2VyIE9iamVjdCBIYW5kbGUgKi8KLQl1MzIgYXR0 YWNoX2NvdW50OwkvKiBQcm9jZXNzb3IgYXR0YWNoIGNvdW50ICovCi0JdTMyIHByb2Nlc3Nvcl9p ZDsJLyogUHJvY2Vzc29yIG51bWJlciAqLwotCXUzMiB0aW1lb3V0OwkJLyogVGltZSBvdXQgY291 bnQgKi8KLQllbnVtIGRzcF9wcm9jc3RhdGUgcHJvY19zdGF0ZTsJLyogUHJvY2Vzc29yIHN0YXRl ICovCi0JdTMyIHVuaXQ7CQkvKiBERFNQIHVuaXQgbnVtYmVyICovCi0JYm9vbCBpc19hbHJlYWR5 X2F0dGFjaGVkOwkvKgotCQkJCQkgKiBUcnVlIGlmIHRoZSBEZXZpY2UgYmVsb3cgaGFzCi0JCQkJ CSAqIEdQUCBDbGllbnQgYXR0YWNoZWQKLQkJCQkJICovCi0Jc3RydWN0IG50Znlfb2JqZWN0ICpu dGZ5X29iajsJLyogTWFuYWdlcyAgbm90aWZpY2F0aW9ucyAqLwotCS8qIEJyaWRnZSBDb250ZXh0 IEhhbmRsZSAqLwotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0Owot CS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCi0Jc3RydWN0IGJyaWRn ZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JY2hhciAqbGFzdF9jb2ZmOwotCXN0cnVjdCBs aXN0X2hlYWQgcHJvY19saXN0OwotfTsKLQotREVGSU5FX01VVEVYKHByb2NfbG9jayk7CS8qIEZv ciBjcml0aWNhbCBzZWN0aW9ucyAqLwotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotc3RhdGljIGludCBwcm9jX21vbml0b3Io c3RydWN0IHByb2Nfb2JqZWN0ICpwcm9jX29iaik7Ci1zdGF0aWMgczMyIGdldF9lbnZwX2NvdW50 KGNoYXIgKiplbnZwKTsKLXN0YXRpYyBjaGFyICoqcHJlcGVuZF9lbnZwKGNoYXIgKipuZXdfZW52 cCwgY2hhciAqKmVudnAsIHMzMiBlbnZwX2VsZW1zLAotCQkJICAgczMyIGNuZXdfZW52cCwgY2hh ciAqc3pfdmFyKTsKLQotLyogcmVtZW1iZXIgbWFwcGluZyBpbmZvcm1hdGlvbiAqLwotc3RhdGlj IHN0cnVjdCBkbW1fbWFwX29iamVjdCAqYWRkX21hcHBpbmdfaW5mbyhzdHJ1Y3QgcHJvY2Vzc19j b250ZXh0ICpwcl9jdHh0LAotCQkJCXUzMiBtcHVfYWRkciwgdTMyIGRzcF9hZGRyLCB1MzIgc2l6 ZSkKLXsKLQlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7Ci0KLQl1MzIgbnVtX3Vzcl9w Z3MgPSBzaXplIC8gUEdfU0laRTRLOwotCi0JcHJfZGVidWcoIiVzOiBhZGRpbmcgbWFwIGluZm86 IG1wdV9hZGRyIDB4JXggdmlydCAweCV4IHNpemUgMHgleFxuIiwKLQkJCQkJCV9fZnVuY19fLCBt cHVfYWRkciwKLQkJCQkJCWRzcF9hZGRyLCBzaXplKTsKLQotCW1hcF9vYmogPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgZG1tX21hcF9vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1hcF9vYmop Ci0JCXJldHVybiBOVUxMOwotCi0JSU5JVF9MSVNUX0hFQUQoJm1hcF9vYmotPmxpbmspOwotCi0J bWFwX29iai0+cGFnZXMgPSBrY2FsbG9jKG51bV91c3JfcGdzLCBzaXplb2Yoc3RydWN0IHBhZ2Ug KiksCi0JCQkJIEdGUF9LRVJORUwpOwotCWlmICghbWFwX29iai0+cGFnZXMpIHsKLQkJa2ZyZWUo bWFwX29iaik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW1hcF9vYmotPm1wdV9hZGRyID0gbXB1 X2FkZHI7Ci0JbWFwX29iai0+ZHNwX2FkZHIgPSBkc3BfYWRkcjsKLQltYXBfb2JqLT5zaXplID0g c2l6ZTsKLQltYXBfb2JqLT5udW1fdXNyX3BncyA9IG51bV91c3JfcGdzOwotCi0Jc3Bpbl9sb2Nr KCZwcl9jdHh0LT5kbW1fbWFwX2xvY2spOwotCWxpc3RfYWRkKCZtYXBfb2JqLT5saW5rLCAmcHJf Y3R4dC0+ZG1tX21hcF9saXN0KTsKLQlzcGluX3VubG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2Nr KTsKLQotCXJldHVybiBtYXBfb2JqOwotfQotCi1zdGF0aWMgaW50IG1hdGNoX2V4YWN0X21hcF9v Ymooc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqLAotCQkJCQl1MzIgZHNwX2FkZHIsIHUz MiBzaXplKQotewotCWlmIChtYXBfb2JqLT5kc3BfYWRkciA9PSBkc3BfYWRkciAmJiBtYXBfb2Jq LT5zaXplICE9IHNpemUpCi0JCXByX2VycigiJXM6IGFkZHIgbWF0Y2ggKDB4JXgpLCBzaXplIGRv bid0ICgweCV4ICE9IDB4JXgpXG4iLAotCQkJCV9fZnVuY19fLCBkc3BfYWRkciwgbWFwX29iai0+ c2l6ZSwgc2l6ZSk7Ci0KLQlyZXR1cm4gbWFwX29iai0+ZHNwX2FkZHIgPT0gZHNwX2FkZHIgJiYK LQkJbWFwX29iai0+c2l6ZSA9PSBzaXplOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfbWFwcGlu Z19pbmZvcm1hdGlvbihzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0LAotCQkJCQkJdTMy IGRzcF9hZGRyLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7 Ci0KLQlwcl9kZWJ1ZygiJXM6IGxvb2tpbmcgZm9yIHZpcnQgMHgleCBzaXplIDB4JXhcbiIsIF9f ZnVuY19fLAotCQkJCQkJCWRzcF9hZGRyLCBzaXplKTsKLQotCXNwaW5fbG9jaygmcHJfY3R4dC0+ ZG1tX21hcF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcF9vYmosICZwcl9jdHh0LT5k bW1fbWFwX2xpc3QsIGxpbmspIHsKLQkJcHJfZGVidWcoIiVzOiBjYW5kaWRhdGU6IG1wdV9hZGRy IDB4JXggdmlydCAweCV4IHNpemUgMHgleFxuIiwKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQlt YXBfb2JqLT5tcHVfYWRkciwKLQkJCQkJCQltYXBfb2JqLT5kc3BfYWRkciwKLQkJCQkJCQltYXBf b2JqLT5zaXplKTsKLQotCQlpZiAobWF0Y2hfZXhhY3RfbWFwX29iaihtYXBfb2JqLCBkc3BfYWRk ciwgc2l6ZSkpIHsKLQkJCXByX2RlYnVnKCIlczogbWF0Y2gsIGRlbGV0aW5nIG1hcCBpbmZvXG4i LCBfX2Z1bmNfXyk7Ci0JCQlsaXN0X2RlbCgmbWFwX29iai0+bGluayk7Ci0JCQlrZnJlZShtYXBf b2JqLT5kbWFfaW5mby5zZyk7Ci0JCQlrZnJlZShtYXBfb2JqLT5wYWdlcyk7Ci0JCQlrZnJlZSht YXBfb2JqKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXByX2RlYnVnKCIlczogY2FuZGlkYXRlIGRp ZG4ndCBtYXRjaFxuIiwgX19mdW5jX18pOwotCX0KLQotCXByX2VycigiJXM6IGZhaWxlZCB0byBm aW5kIGdpdmVuIG1hcCBpbmZvXG4iLCBfX2Z1bmNfXyk7Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2soJnBy X2N0eHQtPmRtbV9tYXBfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgbWF0Y2hfY29udGFpbmluZ19t YXBfb2JqKHN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iaiwKLQkJCQkJdTMyIG1wdV9hZGRy LCB1MzIgc2l6ZSkKLXsKLQl1MzIgbWFwX29ial9lbmQgPSBtYXBfb2JqLT5tcHVfYWRkciArIG1h cF9vYmotPnNpemU7Ci0KLQlyZXR1cm4gbXB1X2FkZHIgPj0gbWFwX29iai0+bXB1X2FkZHIgJiYK LQkJbXB1X2FkZHIgKyBzaXplIDw9IG1hcF9vYmpfZW5kOwotfQotCi1zdGF0aWMgc3RydWN0IGRt bV9tYXBfb2JqZWN0ICpmaW5kX2NvbnRhaW5pbmdfbWFwcGluZygKLQkJCQlzdHJ1Y3QgcHJvY2Vz c19jb250ZXh0ICpwcl9jdHh0LAotCQkJCXUzMiBtcHVfYWRkciwgdTMyIHNpemUpCi17Ci0Jc3Ry dWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqOwotCi0JcHJfZGVidWcoIiVzOiBsb29raW5nIGZv ciBtcHVfYWRkciAweCV4IHNpemUgMHgleFxuIiwgX19mdW5jX18sCi0JCQkJCQltcHVfYWRkciwg c2l6ZSk7Ci0KLQlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7Ci0JbGlzdF9mb3Jf ZWFjaF9lbnRyeShtYXBfb2JqLCAmcHJfY3R4dC0+ZG1tX21hcF9saXN0LCBsaW5rKSB7Ci0JCXBy X2RlYnVnKCIlczogY2FuZGlkYXRlOiBtcHVfYWRkciAweCV4IHZpcnQgMHgleCBzaXplIDB4JXhc biIsCi0JCQkJCQlfX2Z1bmNfXywKLQkJCQkJCW1hcF9vYmotPm1wdV9hZGRyLAotCQkJCQkJbWFw X29iai0+ZHNwX2FkZHIsCi0JCQkJCQltYXBfb2JqLT5zaXplKTsKLQkJaWYgKG1hdGNoX2NvbnRh aW5pbmdfbWFwX29iaihtYXBfb2JqLCBtcHVfYWRkciwgc2l6ZSkpIHsKLQkJCXByX2RlYnVnKCIl czogbWF0Y2ghXG4iLCBfX2Z1bmNfXyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXByX2RlYnVn KCIlczogbm8gbWF0Y2ghXG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JbWFwX29iaiA9IE5VTEw7Ci1v dXQ6Ci0Jc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7Ci0JcmV0dXJuIG1hcF9v Ymo7Ci19Ci0KLXN0YXRpYyBpbnQgZmluZF9maXJzdF9wYWdlX2luX2NhY2hlKHN0cnVjdCBkbW1f bWFwX29iamVjdCAqbWFwX29iaiwKLQkJCQkJdW5zaWduZWQgbG9uZyBtcHVfYWRkcikKLXsKLQl1 MzIgbWFwcGVkX2Jhc2VfcGFnZSA9IG1hcF9vYmotPm1wdV9hZGRyID4+IFBBR0VfU0hJRlQ7Ci0J dTMyIHJlcXVlc3RlZF9iYXNlX3BhZ2UgPSBtcHVfYWRkciA+PiBQQUdFX1NISUZUOwotCWludCBw Z19pbmRleCA9IHJlcXVlc3RlZF9iYXNlX3BhZ2UgLSBtYXBwZWRfYmFzZV9wYWdlOwotCi0JaWYg KHBnX2luZGV4IDwgMCB8fCBwZ19pbmRleCA+PSBtYXBfb2JqLT5udW1fdXNyX3BncykgewotCQlw cl9lcnIoIiVzOiBmYWlsZWQgKGdvdCAlZClcbiIsIF9fZnVuY19fLCBwZ19pbmRleCk7Ci0JCXJl dHVybiAtMTsKLQl9Ci0KLQlwcl9kZWJ1ZygiJXM6IGZpcnN0IHBhZ2UgaXMgJWRcbiIsIF9fZnVu Y19fLCBwZ19pbmRleCk7Ci0JcmV0dXJuIHBnX2luZGV4OwotfQotCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCBwYWdlICpnZXRfbWFwcGluZ19wYWdlKHN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29i aiwKLQkJCQkJCQkJaW50IHBnX2kpCi17Ci0JcHJfZGVidWcoIiVzOiBsb29raW5nIGZvciBwZ19p ICVkLCBudW1fdXNyX3BnczogJWRcbiIsIF9fZnVuY19fLAotCQkJCQlwZ19pLCBtYXBfb2JqLT5u dW1fdXNyX3Bncyk7Ci0KLQlpZiAocGdfaSA8IDAgfHwgcGdfaSA+PSBtYXBfb2JqLT5udW1fdXNy X3BncykgewotCQlwcl9lcnIoIiVzOiByZXF1ZXN0ZWQgcGdfaSAlZCBpcyBvdXQgb2YgbWFwcGVk IHJhbmdlXG4iLAotCQkJCV9fZnVuY19fLCBwZ19pKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0J cmV0dXJuIG1hcF9vYmotPnBhZ2VzW3BnX2ldOwotfQotCi0vKgotICogID09PT09PT09IHByb2Nf YXR0YWNoID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUHJlcGFyZSBmb3IgY29tbXVu aWNhdGlvbiB3aXRoIGEgcGFydGljdWxhciBEU1AgcHJvY2Vzc29yLCBhbmQgcmV0dXJuCi0gKiAg ICAgIGEgaGFuZGxlIHRvIHRoZSBwcm9jZXNzb3Igb2JqZWN0LgotICovCi1pbnQKLXByb2NfYXR0 YWNoKHUzMiBwcm9jZXNzb3JfaWQsCi0JICAgIGNvbnN0IHN0cnVjdCBkc3BfcHJvY2Vzc29yYXR0 cmluICphdHRyX2luLAotCSAgICB2b2lkICoqcGhfcHJvY2Vzc29yLCBzdHJ1Y3QgcHJvY2Vzc19j b250ZXh0ICpwcl9jdHh0KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBkZXZfb2JqZWN0 ICpoZGV2X29iajsKLQlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSBOVUxMOwot CXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaiA9IE5VTEw7Ci0Jc3RydWN0IGRydl9vYmplY3Qg KmhkcnZfb2JqID0gTlVMTDsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRf ZHJ2ZGF0YShicmlkZ2UpOwotCXU4IGRldl90eXBlOwotCi0JaWYgKHByX2N0eHQtPnByb2Nlc3Nv cikgewotCQkqcGhfcHJvY2Vzc29yID0gcHJfY3R4dC0+cHJvY2Vzc29yOwotCQlyZXR1cm4gc3Rh dHVzOwotCX0KLQotCS8qIEdldCB0aGUgRHJpdmVyIGFuZCBNYW5hZ2VyIE9iamVjdCBIYW5kbGVz ICovCi0JaWYgKCFkcnZfZGF0YXAgfHwgIWRydl9kYXRhcC0+ZHJ2X29iamVjdCB8fCAhZHJ2X2Rh dGFwLT5tZ3Jfb2JqZWN0KSB7Ci0JCXN0YXR1cyA9IC1FTk9EQVRBOwotCQlwcl9lcnIoIiVzOiBG YWlsZWQgdG8gZ2V0IG9iamVjdCBoYW5kbGVzXG4iLCBfX2Z1bmNfXyk7Ci0JfSBlbHNlIHsKLQkJ aGRydl9vYmogPSBkcnZfZGF0YXAtPmRydl9vYmplY3Q7Ci0JCWhtZ3Jfb2JqID0gZHJ2X2RhdGFw LT5tZ3Jfb2JqZWN0OwotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCS8qIEdldCB0aGUgRGV2aWNl IE9iamVjdCAqLwotCQlzdGF0dXMgPSBkcnZfZ2V0X2Rldl9vYmplY3QocHJvY2Vzc29yX2lkLCBo ZHJ2X29iaiwgJmhkZXZfb2JqKTsKLQl9Ci0JaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGRldl9n ZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7Ci0KLQlpZiAoc3RhdHVzKQotCQlnb3Rv IGZ1bmNfZW5kOwotCi0JLyogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgY3JlYXRlIHRoZSBQcm9j ZXNzb3Igb2JqZWN0OiAqLwotCXBfcHJvY19vYmplY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qg cHJvY19vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQkvKiBGaWxsIG91dCB0aGUgUHJvY2Vzc29yIE9i amVjdDogKi8KLQlpZiAocF9wcm9jX29iamVjdCA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IC1FTk9N RU07Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCXBfcHJvY19vYmplY3QtPmRldl9vYmogPSBoZGV2 X29iajsKLQlwX3Byb2Nfb2JqZWN0LT5tZ3Jfb2JqID0gaG1ncl9vYmo7Ci0JcF9wcm9jX29iamVj dC0+cHJvY2Vzc29yX2lkID0gZGV2X3R5cGU7Ci0JLyogU3RvcmUgVEdJRCBpbnN0ZWFkIG9mIHBy b2Nlc3MgaGFuZGxlICovCi0JcF9wcm9jX29iamVjdC0+cHJvY2VzcyA9IGN1cnJlbnQtPnRnaWQ7 Ci0KLQlJTklUX0xJU1RfSEVBRCgmcF9wcm9jX29iamVjdC0+cHJvY19saXN0KTsKLQotCWlmIChh dHRyX2luKQotCQlwX3Byb2Nfb2JqZWN0LT50aW1lb3V0ID0gYXR0cl9pbi0+dGltZW91dDsKLQll bHNlCi0JCXBfcHJvY19vYmplY3QtPnRpbWVvdXQgPSBQUk9DX0RGTFRfVElNRU9VVDsKLQotCXN0 YXR1cyA9IGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmcF9wcm9jX29iamVjdC0+aW50Zl9m eG5zKTsKLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0 KGhkZXZfb2JqLAotCQkJCQkgICAgICZwX3Byb2Nfb2JqZWN0LT5icmlkZ2VfY29udGV4dCk7Ci0J CWlmIChzdGF0dXMpCi0JCQlrZnJlZShwX3Byb2Nfb2JqZWN0KTsKLQl9IGVsc2UKLQkJa2ZyZWUo cF9wcm9jX29iamVjdCk7Ci0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyog Q3JlYXRlIHRoZSBOb3RpZmljYXRpb24gT2JqZWN0ICovCi0JLyogVGhpcyBpcyBjcmVhdGVkIHdp dGggbm8gZXZlbnQgbWFzaywgbm8gbm90aWZ5IG1hc2sKLQkgKiBhbmQgbm8gdmFsaWQgaGFuZGxl IHRvIHRoZSBub3RpZmljYXRpb24uIFRoZXkgYWxsIGdldAotCSAqIGZpbGxlZCB1cCB3aGVuIHBy b2NfcmVnaXN0ZXJfbm90aWZ5IGlzIGNhbGxlZCAqLwotCXBfcHJvY19vYmplY3QtPm50Znlfb2Jq ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKLQkJCQkJCQlHRlBfS0VSTkVM KTsKLQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopCi0JCW50ZnlfaW5pdChwX3Byb2Nfb2Jq ZWN0LT5udGZ5X29iaik7Ci0JZWxzZQotCQlzdGF0dXMgPSAtRU5PTUVNOwotCi0JaWYgKCFzdGF0 dXMpIHsKLQkJLyogSW5zZXJ0IHRoZSBQcm9jZXNzb3IgT2JqZWN0IGludG8gdGhlIERFViBMaXN0 LgotCQkgKiBSZXR1cm4gaGFuZGxlIHRvIHRoaXMgUHJvY2Vzc29yIE9iamVjdDoKLQkJICogRmlu ZCBvdXQgaWYgdGhlIERldmljZSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEKLQkJICogUHJvY2Vz c29yLiBJZiBzbywgcmV0dXJuIEFscmVhZHlBdHRhY2hlZCBzdGF0dXMgKi8KLQkJc3RhdHVzID0g ZGV2X2luc2VydF9wcm9jX29iamVjdChwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkJKHUz MikgcF9wcm9jX29iamVjdCwKLQkJCQkJCSZwX3Byb2Nfb2JqZWN0LT4KLQkJCQkJCWlzX2FscmVh ZHlfYXR0YWNoZWQpOwotCQlpZiAoIXN0YXR1cykgewotCQkJaWYgKHBfcHJvY19vYmplY3QtPmlz X2FscmVhZHlfYXR0YWNoZWQpCi0JCQkJc3RhdHVzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChw X3Byb2Nfb2JqZWN0LT5udGZ5X29iaikgewotCQkJCW50ZnlfZGVsZXRlKHBfcHJvY19vYmplY3Qt Pm50Znlfb2JqKTsKLQkJCQlrZnJlZShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaik7Ci0JCQl9Ci0K LQkJCWtmcmVlKHBfcHJvY19vYmplY3QpOwotCQl9Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkqcGhf cHJvY2Vzc29yID0gKHZvaWQgKilwX3Byb2Nfb2JqZWN0OwotCQkJcHJfY3R4dC0+cHJvY2Vzc29y ID0gKnBoX3Byb2Nlc3NvcjsKLQkJCSh2b2lkKXByb2Nfbm90aWZ5X2NsaWVudHMocF9wcm9jX29i amVjdCwKLQkJCQkJCSAgRFNQX1BST0NFU1NPUkFUVEFDSCk7Ci0JCX0KLQl9IGVsc2UgewotCQkv KiBEb24ndCBsZWFrIG1lbW9yeSBpZiBzdGF0dXMgaXMgZmFpbGVkICovCi0JCWtmcmVlKHBfcHJv Y19vYmplY3QpOwotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBp bnQgZ2V0X2V4ZWNfZmlsZShzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKLQkJCQlz dHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCi0JCQkJdTMyIHNpemUsIGNoYXIgKmV4ZWNfZmls ZSkKLXsKLQl1OCBkZXZfdHlwZTsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9n ZXRfZHJ2ZGF0YShicmlkZ2UpOwotCi0JZGV2X2dldF9kZXZfdHlwZShoZGV2X29iaiwgKHU4ICop ICZkZXZfdHlwZSk7Ci0KLQlpZiAoIWV4ZWNfZmlsZSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlp ZiAoZGV2X3R5cGUgPT0gRFNQX1VOSVQpIHsKLQkJaWYgKCFkcnZfZGF0YXAgfHwgIWRydl9kYXRh cC0+YmFzZV9pbWcpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoc3RybGVuKGRydl9kYXRh cC0+YmFzZV9pbWcpID49IHNpemUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzdHJjcHkoZXhl Y19maWxlLCBkcnZfZGF0YXAtPmJhc2VfaW1nKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVOT0VO VDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2F1dG9fc3Rh cnQgPT09PT09PT0gPQotICogIFB1cnBvc2U6Ci0gKiAgICAgIEEgUGFydGljdWxhciBkZXZpY2Ug Z2V0cyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCBpbWFnZQotICogICAgICBpZiB0aGUgQXV0b1N0 YXJ0IGZsYWcgaXMgc2V0LgotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIGhkZXZfb2JqOiAgICAg SGFuZGxlIHRvIHRoZSBEZXZpY2UKLSAqICBSZXR1cm5zOgotICogICAgICAwOiAgIE9uIFN1Y2Nl c3NmdWwgTG9hZGluZwotICogICAgICAtRVBFUk0gIEdlbmVyYWwgRmFpbHVyZQotICogIFJlcXVp cmVzOgotICogICAgICBoZGV2X29iaiAhPSBOVUxMCi0gKiAgRW5zdXJlczoKLSAqLwotaW50IHBy b2NfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKLQkJCSAgIHN0 cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKLXsKLQlpbnQgc3RhdHVzID0gLUVQRVJNOwotCXN0 cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdDsKLQljaGFyIHN6X2V4ZWNfZmlsZVtNQVhD TURMSU5FTEVOXTsKLQljaGFyICphcmd2WzJdOwotCXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29i aiA9IE5VTEw7Ci0Jc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEo YnJpZGdlKTsKLQl1OCBkZXZfdHlwZTsKLQotCS8qIENyZWF0ZSBhIER1bW15IFBST0MgT2JqZWN0 ICovCi0JaWYgKCFkcnZfZGF0YXAgfHwgIWRydl9kYXRhcC0+bWdyX29iamVjdCkgewotCQlzdGF0 dXMgPSAtRU5PREFUQTsKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBvYmpl Y3QgaGFuZGxlXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfSBlbHNlIHsKLQkJ aG1ncl9vYmogPSBkcnZfZGF0YXAtPm1ncl9vYmplY3Q7Ci0JfQotCi0JcF9wcm9jX29iamVjdCA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmIChw X3Byb2Nfb2JqZWN0ID09IE5VTEwpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJZ290byBmdW5j X2VuZDsKLQl9Ci0JcF9wcm9jX29iamVjdC0+ZGV2X29iaiA9IGhkZXZfb2JqOwotCXBfcHJvY19v YmplY3QtPm1ncl9vYmogPSBobWdyX29iajsKLQlzdGF0dXMgPSBkZXZfZ2V0X2ludGZfZnhucyho ZGV2X29iaiwgJnBfcHJvY19vYmplY3QtPmludGZfZnhucyk7Ci0JaWYgKCFzdGF0dXMpCi0JCXN0 YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCi0JCQkJCSAgICAgJnBfcHJv Y19vYmplY3QtPmJyaWRnZV9jb250ZXh0KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfY29u dDsKLQotCS8qIFN0b3AgdGhlIERldmljZSwgcHV0IGl0IGludG8gc3RhbmRieSBtb2RlICovCi0J c3RhdHVzID0gcHJvY19zdG9wKHBfcHJvY19vYmplY3QpOwotCi0JaWYgKHN0YXR1cykKLQkJZ290 byBmdW5jX2NvbnQ7Ci0KLQkvKiBHZXQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSBmb3IgdGhpcyBi b2FyZC4uLiAqLwotCWRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICh1OCAqKSAmZGV2X3R5cGUp OwotCXBfcHJvY19vYmplY3QtPnByb2Nlc3Nvcl9pZCA9IGRldl90eXBlOwotCXN0YXR1cyA9IGdl dF9leGVjX2ZpbGUoZGV2X25vZGVfb2JqLCBoZGV2X29iaiwgc2l6ZW9mKHN6X2V4ZWNfZmlsZSks Ci0JCQkgICAgICAgc3pfZXhlY19maWxlKTsKLQlpZiAoIXN0YXR1cykgewotCQlhcmd2WzBdID0g c3pfZXhlY19maWxlOwotCQlhcmd2WzFdID0gTlVMTDsKLQkJLyogLi4uYW5kIHRyeSB0byBsb2Fk IGl0OiAqLwotCQlzdGF0dXMgPSBwcm9jX2xvYWQocF9wcm9jX29iamVjdCwgMSwgKGNvbnN0IGNo YXIgKiopYXJndiwgTlVMTCk7Ci0JCWlmICghc3RhdHVzKQotCQkJc3RhdHVzID0gcHJvY19zdGFy dChwX3Byb2Nfb2JqZWN0KTsKLQl9Ci0Ja2ZyZWUocF9wcm9jX29iamVjdC0+bGFzdF9jb2ZmKTsK LQlwX3Byb2Nfb2JqZWN0LT5sYXN0X2NvZmYgPSBOVUxMOwotZnVuY19jb250OgotCWtmcmVlKHBf cHJvY19vYmplY3QpOwotZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9 PT09PT09PSBwcm9jX2N0cmwgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBQYXNzIGNv bnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIEdQUCBkZXZpY2UgZHJpdmVyIG1hbmFnaW5nIHRoZQot ICogICAgICBEU1AgcHJvY2Vzc29yLgotICoKLSAqICAgICAgVGhpcyB3aWxsIGJlIGFuIE9FTS1v bmx5IGZ1bmN0aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlIERTUC9CSU9TIEJyaWRnZQotICogICAg ICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBBUEkuCi0gKiAgICAgIENhbGwgdGhlIGJyaWRnZV9k ZXZfY3RybCBmeG4gd2l0aCB0aGUgQXJndW1lbnQuIFRoaXMgaXMgYSBTeW5jaHJvbm91cwotICog ICAgICBPcGVyYXRpb24uIGFyZyBjYW4gYmUgbnVsbC4KLSAqLwotaW50IHByb2NfY3RybCh2b2lk ICpocHJvY2Vzc29yLCB1MzIgZHdfY21kLCBzdHJ1Y3QgZHNwX2NiZGF0YSAqYXJnKQotewotCWlu dCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IGhwcm9j ZXNzb3I7Ci0JdTMyIHRpbWVvdXQgPSAwOwotCi0JaWYgKHBfcHJvY19vYmplY3QpIHsKLQkJLyog aW50ZXJjZXB0IFBXUiBkZWVwIHNsZWVwIGNvbW1hbmQgKi8KLQkJaWYgKGR3X2NtZCA9PSBCUkRJ T0NUTF9ERUVQU0xFRVApIHsKLQkJCXRpbWVvdXQgPSBhcmctPmNiX2RhdGE7Ci0JCQlzdGF0dXMg PSBwd3Jfc2xlZXBfZHNwKFBXUl9ERUVQU0xFRVAsIHRpbWVvdXQpOwotCQl9Ci0JCS8qIGludGVy Y2VwdCBQV1IgZW1lcmdlbmN5IHNsZWVwIGNvbW1hbmQgKi8KLQkJZWxzZSBpZiAoZHdfY21kID09 IEJSRElPQ1RMX0VNRVJHRU5DWVNMRUVQKSB7Ci0JCQl0aW1lb3V0ID0gYXJnLT5jYl9kYXRhOwot CQkJc3RhdHVzID0gcHdyX3NsZWVwX2RzcChQV1JfRU1FUkdFTkNZREVFUFNMRUVQLCB0aW1lb3V0 KTsKLQkJfSBlbHNlIGlmIChkd19jbWQgPT0gUFdSX0RFRVBTTEVFUCkgewotCQkJLyogdGltZW91 dCA9IGFyZy0+Y2JfZGF0YTsgKi8KLQkJCXN0YXR1cyA9IHB3cl9zbGVlcF9kc3AoUFdSX0RFRVBT TEVFUCwgdGltZW91dCk7Ci0JCX0KLQkJLyogaW50ZXJjZXB0IFBXUiB3YWtlIGNvbW1hbmRzICov Ci0JCWVsc2UgaWYgKGR3X2NtZCA9PSBCUkRJT0NUTF9XQUtFVVApIHsKLQkJCXRpbWVvdXQgPSBh cmctPmNiX2RhdGE7Ci0JCQlzdGF0dXMgPSBwd3Jfd2FrZV9kc3AodGltZW91dCk7Ci0JCX0gZWxz ZSBpZiAoZHdfY21kID09IFBXUl9XQUtFVVApIHsKLQkJCS8qIHRpbWVvdXQgPSBhcmctPmNiX2Rh dGE7ICovCi0JCQlzdGF0dXMgPSBwd3Jfd2FrZV9kc3AodGltZW91dCk7Ci0JCX0gZWxzZQotCQkg ICAgaWYgKCEoKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPmRldl9jbnRybCkKLQkJCQkgICAg ICAocF9wcm9jX29iamVjdC0+YnJpZGdlX2NvbnRleHQsIGR3X2NtZCwKLQkJCQkgICAgICAgYXJn KSkpIHsKLQkJCXN0YXR1cyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAtRVBFUk07Ci0J CX0KLQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7 Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19kZXRhY2ggPT09PT09PT0KLSAqICBQdXJwb3Nl OgotICogICAgICBEZXN0cm95cyB0aGUgIFByb2Nlc3NvciBPYmplY3QuIFJlbW92ZXMgdGhlIG5v dGlmaWNhdGlvbiBmcm9tIHRoZSBEZXYKLSAqICAgICAgTGlzdC4KLSAqLwotaW50IHByb2NfZGV0 YWNoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7 Ci0Jc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gTlVMTDsKLQotCXBfcHJvY19v YmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopcHJfY3R4dC0+cHJvY2Vzc29yOwotCi0JaWYg KHBfcHJvY19vYmplY3QpIHsKLQkJLyogTm90aWZ5IHRoZSBDbGllbnQgKi8KLQkJbnRmeV9ub3Rp ZnkocF9wcm9jX29iamVjdC0+bnRmeV9vYmosIERTUF9QUk9DRVNTT1JERVRBQ0gpOwotCQkvKiBS ZW1vdmUgdGhlIG5vdGlmaWNhdGlvbiBtZW1vcnkgKi8KLQkJaWYgKHBfcHJvY19vYmplY3QtPm50 Znlfb2JqKSB7Ci0JCQludGZ5X2RlbGV0ZShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaik7Ci0JCQlr ZnJlZShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaik7Ci0JCX0KLQotCQlrZnJlZShwX3Byb2Nfb2Jq ZWN0LT5sYXN0X2NvZmYpOwotCQlwX3Byb2Nfb2JqZWN0LT5sYXN0X2NvZmYgPSBOVUxMOwotCQkv KiBSZW1vdmUgdGhlIFByb2MgZnJvbSB0aGUgREVWIExpc3QgKi8KLQkJKHZvaWQpZGV2X3JlbW92 ZV9wcm9jX29iamVjdChwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkgICAgICh1MzIpIHBf cHJvY19vYmplY3QpOwotCQkvKiBGcmVlIHRoZSBQcm9jZXNzb3IgT2JqZWN0ICovCi0JCWtmcmVl KHBfcHJvY19vYmplY3QpOwotCQlwcl9jdHh0LT5wcm9jZXNzb3IgPSBOVUxMOwotCX0gZWxzZSB7 Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAq ICA9PT09PT09PSBwcm9jX2VudW1fbm9kZXMgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBFbnVtZXJhdGUgYW5kIGdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IG5vZGVz IGFsbG9jYXRlZAotICogICAgICBvbiBhIERTUCBwcm9jZXNzb3IuCi0gKi8KLWludCBwcm9jX2Vu dW1fbm9kZXModm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqKm5vZGVfdGFiLAotCQkJICAgdTMyIG5v ZGVfdGFiX3NpemUsIHUzMiAqcHVfbnVtX25vZGVzLAotCQkJICAgdTMyICpwdV9hbGxvY2F0ZWQp Ci17Ci0JaW50IHN0YXR1cyA9IC1FUEVSTTsKLQlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19v YmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKLQlzdHJ1Y3Qgbm9kZV9t Z3IgKmhub2RlX21nciA9IE5VTEw7Ci0KLQlpZiAocF9wcm9jX29iamVjdCkgewotCQlpZiAoIShk ZXZfZ2V0X25vZGVfbWFuYWdlcihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkJICAgICAg ICZobm9kZV9tZ3IpKSkgewotCQkJaWYgKGhub2RlX21ncikgewotCQkJCXN0YXR1cyA9IG5vZGVf ZW51bV9ub2Rlcyhobm9kZV9tZ3IsIG5vZGVfdGFiLAotCQkJCQkJCSBub2RlX3RhYl9zaXplLAot CQkJCQkJCSBwdV9udW1fbm9kZXMsCi0JCQkJCQkJIHB1X2FsbG9jYXRlZCk7Ci0JCQl9Ci0JCX0K LQl9IGVsc2UgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLS8qIENhY2hlIG9wZXJhdGlvbiBhZ2FpbnN0IGtlcm5lbCBhZGRyZXNzIGluc3RlYWQgb2Yg dXNlcnMgKi8KLXN0YXRpYyBpbnQgYnVpbGRfZG1hX3NnKHN0cnVjdCBkbW1fbWFwX29iamVjdCAq bWFwX29iaiwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJCXNzaXplX3QgbGVuLCBpbnQgcGdf aSkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlzc2l6 ZV90IHJlc3Q7Ci0JaW50IHJldCA9IDAsIGkgPSAwOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cg PSBtYXBfb2JqLT5kbWFfaW5mby5zZzsKLQotCXdoaWxlIChsZW4pIHsKLQkJcGFnZSA9IGdldF9t YXBwaW5nX3BhZ2UobWFwX29iaiwgcGdfaSk7Ci0JCWlmICghcGFnZSkgewotCQkJcHJfZXJyKCIl czogbm8gcGFnZSBmb3IgJTA4bHhcbiIsIF9fZnVuY19fLCBzdGFydCk7Ci0JCQlyZXQgPSAtRUlO VkFMOwotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAoSVNfRVJSKHBhZ2UpKSB7Ci0JCQlwcl9l cnIoIiVzOiBlcnIgcGFnZSBmb3IgJTA4bHgoJWx1KVxuIiwgX19mdW5jX18sIHN0YXJ0LAotCQkJ ICAgICAgIFBUUl9FUlIocGFnZSkpOwotCQkJcmV0ID0gUFRSX0VSUihwYWdlKTsKLQkJCWdvdG8g b3V0OwotCQl9Ci0KLQkJb2Zmc2V0ID0gc3RhcnQgJiB+UEFHRV9NQVNLOwotCQlyZXN0ID0gbWlu X3Qoc3NpemVfdCwgUEFHRV9TSVpFIC0gb2Zmc2V0LCBsZW4pOwotCi0JCXNnX3NldF9wYWdlKCZz Z1tpXSwgcGFnZSwgcmVzdCwgb2Zmc2V0KTsKLQotCQlsZW4gLT0gcmVzdDsKLQkJc3RhcnQgKz0g cmVzdDsKLQkJcGdfaSsrLCBpKys7Ci0JfQotCi0JaWYgKGkgIT0gbWFwX29iai0+ZG1hX2luZm8u bnVtX3BhZ2VzKSB7Ci0JCXByX2VycigiJXM6IGJhZCBudW1iZXIgb2Ygc2cgaXRlcmF0aW9uc1xu IiwgX19mdW5jX18pOwotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoK LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG1lbW9yeV9yZWdhaW5fb3duZXJzaGlwKHN0 cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iaiwKLQkJdW5zaWduZWQgbG9uZyBzdGFydCwgc3Np emVfdCBsZW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQlpbnQgcmV0ID0gMDsK LQl1bnNpZ25lZCBsb25nIGZpcnN0X2RhdGFfcGFnZSA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0J dW5zaWduZWQgbG9uZyBsYXN0X2RhdGFfcGFnZSA9ICgodTMyKShzdGFydCArIGxlbiAtIDEpID4+ IFBBR0VfU0hJRlQpOwotCS8qIGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhpcyBh cmVhIHNwYW5zICovCi0JdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAt IGZpcnN0X2RhdGFfcGFnZSArIDE7Ci0Jc3RydWN0IGJyaWRnZV9kbWFfbWFwX2luZm8gKmRtYV9p bmZvID0gJm1hcF9vYmotPmRtYV9pbmZvOwotCi0JaWYgKCFkbWFfaW5mby0+c2cpCi0JCWdvdG8g b3V0OwotCi0JaWYgKGRtYV9pbmZvLT5kaXIgIT0gZGlyIHx8IGRtYV9pbmZvLT5udW1fcGFnZXMg IT0gbnVtX3BhZ2VzKSB7Ci0JCXByX2VycigiJXM6IGRtYSBpbmZvIGRvZXNuJ3QgbWF0Y2ggZ2l2 ZW4gcGFyYW1zXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRtYV91 bm1hcF9zZyhicmlkZ2UsIGRtYV9pbmZvLT5zZywgbnVtX3BhZ2VzLCBkbWFfaW5mby0+ZGlyKTsK LQotCXByX2RlYnVnKCIlczogZG1hX21hcF9zZyB1bm1hcHBlZFxuIiwgX19mdW5jX18pOwotCi0J a2ZyZWUoZG1hX2luZm8tPnNnKTsKLQotCW1hcF9vYmotPmRtYV9pbmZvLnNnID0gTlVMTDsKLQot b3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIENhY2hlIG9wZXJhdGlvbiBhZ2FpbnN0IGtlcm5l bCBhZGRyZXNzIGluc3RlYWQgb2YgdXNlcnMgKi8KLXN0YXRpYyBpbnQgbWVtb3J5X2dpdmVfb3du ZXJzaGlwKHN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iaiwKLQkJdW5zaWduZWQgbG9uZyBz dGFydCwgc3NpemVfdCBsZW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQlpbnQg cGdfaSwgcmV0LCBzZ19udW07Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBs b25nIGZpcnN0X2RhdGFfcGFnZSA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9u ZyBsYXN0X2RhdGFfcGFnZSA9ICgodTMyKShzdGFydCArIGxlbiAtIDEpID4+IFBBR0VfU0hJRlQp OwotCS8qIGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhpcyBhcmVhIHNwYW5zICov Ci0JdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAtIGZpcnN0X2RhdGFf cGFnZSArIDE7Ci0KLQlwZ19pID0gZmluZF9maXJzdF9wYWdlX2luX2NhY2hlKG1hcF9vYmosIHN0 YXJ0KTsKLQlpZiAocGdfaSA8IDApIHsKLQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGZpbmQgZmly c3QgcGFnZSBpbiBjYWNoZVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3Rv IG91dDsKLQl9Ci0KLQlzZyA9IGtjYWxsb2MobnVtX3BhZ2VzLCBzaXplb2YoKnNnKSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFzZykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0K LQlzZ19pbml0X3RhYmxlKHNnLCBudW1fcGFnZXMpOwotCi0JLyogY2xlYW51cCBhIHByZXZpb3Vz IHNnIGFsbG9jYXRpb24gKi8KLQkvKiB0aGlzIG1heSBoYXBwZW4gaWYgYXBwbGljYXRpb24gZG9l c24ndCBzaWduYWwgZm9yIGUvbyBETUEgKi8KLQlrZnJlZShtYXBfb2JqLT5kbWFfaW5mby5zZyk7 Ci0KLQltYXBfb2JqLT5kbWFfaW5mby5zZyA9IHNnOwotCW1hcF9vYmotPmRtYV9pbmZvLmRpciA9 IGRpcjsKLQltYXBfb2JqLT5kbWFfaW5mby5udW1fcGFnZXMgPSBudW1fcGFnZXM7Ci0KLQlyZXQg PSBidWlsZF9kbWFfc2cobWFwX29iaiwgc3RhcnQsIGxlbiwgcGdfaSk7Ci0JaWYgKHJldCkKLQkJ Z290byBrZnJlZV9zZzsKLQotCXNnX251bSA9IGRtYV9tYXBfc2coYnJpZGdlLCBzZywgbnVtX3Bh Z2VzLCBkaXIpOwotCWlmIChzZ19udW0gPCAxKSB7Ci0JCXByX2VycigiJXM6IGRtYV9tYXBfc2cg ZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHNnX251bSk7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdv dG8ga2ZyZWVfc2c7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBkbWFfbWFwX3NnIG1hcHBlZCAlZCBl bGVtZW50c1xuIiwgX19mdW5jX18sIHNnX251bSk7Ci0JbWFwX29iai0+ZG1hX2luZm8uc2dfbnVt ID0gc2dfbnVtOwotCi0JcmV0dXJuIDA7Ci0KLWtmcmVlX3NnOgotCWtmcmVlKHNnKTsKLQltYXBf b2JqLT5kbWFfaW5mby5zZyA9IE5VTEw7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHBy b2NfYmVnaW5fZG1hKHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3Np emUsCi0JCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCS8qIEtlZXAgU1RBVFVT IGhlcmUgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgdG8gdGhpcyBmdW5jdGlvbiAqLwotCWludCBzdGF0 dXMgPSAwOwotCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQgPSAoc3RydWN0IHByb2Nl c3NfY29udGV4dCAqKSBocHJvY2Vzc29yOwotCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29i ajsKLQotCWlmICghcHJfY3R4dCkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9v dXQ7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBhZGRyIDB4JXgsIHNpemUgMHgleCwgdHlwZSAlZFxu IiwgX19mdW5jX18sCi0JCQkJCQkJKHUzMilwbXB1X2FkZHIsCi0JCQkJCQkJdWxfc2l6ZSwgZGly KTsKLQotCW11dGV4X2xvY2soJnByb2NfbG9jayk7Ci0KLQkvKiBmaW5kIHJlcXVlc3RlZCBtZW1v cnkgYXJlIGluIGNhY2hlZCBtYXBwaW5nIGluZm9ybWF0aW9uICovCi0JbWFwX29iaiA9IGZpbmRf Y29udGFpbmluZ19tYXBwaW5nKHByX2N0eHQsICh1MzIpIHBtcHVfYWRkciwgdWxfc2l6ZSk7Ci0J aWYgKCFtYXBfb2JqKSB7Ci0JCXByX2VycigiJXM6IGZpbmRfY29udGFpbmluZ19tYXBwaW5nIGZh aWxlZFxuIiwgX19mdW5jX18pOwotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIG5vX21hcDsK LQl9Ci0KLQlpZiAobWVtb3J5X2dpdmVfb3duZXJzaGlwKG1hcF9vYmosICh1MzIpIHBtcHVfYWRk ciwgdWxfc2l6ZSwgZGlyKSkgewotCQlwcl9lcnIoIiVzOiBJblZhbGlkIGFkZHJlc3MgcGFyYW1l dGVycyAlcCAleFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcG1wdV9hZGRyLCB1bF9zaXplKTsK LQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0KLW5vX21hcDoKLQltdXRleF91bmxvY2soJnByb2Nf bG9jayk7Ci1lcnJfb3V0OgotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50IHByb2NfZW5kX2Rt YSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLAotCQkJZW51 bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCS8qIEtlZXAgU1RBVFVTIGhlcmUgZm9yIGZ1 dHVyZSBhZGRpdGlvbnMgdG8gdGhpcyBmdW5jdGlvbiAqLwotCWludCBzdGF0dXMgPSAwOwotCXN0 cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAq KSBocHJvY2Vzc29yOwotCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iajsKLQotCWlmICgh cHJfY3R4dCkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0J cHJfZGVidWcoIiVzOiBhZGRyIDB4JXgsIHNpemUgMHgleCwgdHlwZSAlZFxuIiwgX19mdW5jX18s Ci0JCQkJCQkJKHUzMilwbXB1X2FkZHIsCi0JCQkJCQkJdWxfc2l6ZSwgZGlyKTsKLQotCW11dGV4 X2xvY2soJnByb2NfbG9jayk7Ci0KLQkvKiBmaW5kIHJlcXVlc3RlZCBtZW1vcnkgYXJlIGluIGNh Y2hlZCBtYXBwaW5nIGluZm9ybWF0aW9uICovCi0JbWFwX29iaiA9IGZpbmRfY29udGFpbmluZ19t YXBwaW5nKHByX2N0eHQsICh1MzIpIHBtcHVfYWRkciwgdWxfc2l6ZSk7Ci0JaWYgKCFtYXBfb2Jq KSB7Ci0JCXByX2VycigiJXM6IGZpbmRfY29udGFpbmluZ19tYXBwaW5nIGZhaWxlZFxuIiwgX19m dW5jX18pOwotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIG5vX21hcDsKLQl9Ci0KLQlpZiAo bWVtb3J5X3JlZ2Fpbl9vd25lcnNoaXAobWFwX29iaiwgKHUzMikgcG1wdV9hZGRyLCB1bF9zaXpl LCBkaXIpKSB7Ci0JCXByX2VycigiJXM6IEluVmFsaWQgYWRkcmVzcyBwYXJhbWV0ZXJzICVwICV4 XG4iLAotCQkgICAgICAgX19mdW5jX18sIHBtcHVfYWRkciwgdWxfc2l6ZSk7Ci0JCXN0YXR1cyA9 IC1FRkFVTFQ7Ci0JfQotCi1ub19tYXA6Ci0JbXV0ZXhfdW5sb2NrKCZwcm9jX2xvY2spOwotZXJy X291dDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IHByb2NfZmx1c2hf bWVtb3J5ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICBGbHVzaCBjYWNoZQotICovCi1p bnQgcHJvY19mbHVzaF9tZW1vcnkodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLAot CQkJICAgICB1MzIgdWxfc2l6ZSwgdTMyIHVsX2ZsYWdzKQotewotCWVudW0gZG1hX2RhdGFfZGly ZWN0aW9uIGRpciA9IERNQV9CSURJUkVDVElPTkFMOwotCi0JcmV0dXJuIHByb2NfYmVnaW5fZG1h KGhwcm9jZXNzb3IsIHBtcHVfYWRkciwgdWxfc2l6ZSwgZGlyKTsKLX0KLQotLyoKLSAqICA9PT09 PT09PSBwcm9jX2ludmFsaWRhdGVfbWVtb3J5ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAg ICBJbnZhbGlkYXRlcyB0aGUgbWVtb3J5IHNwZWNpZmllZAotICovCi1pbnQgcHJvY19pbnZhbGlk YXRlX21lbW9yeSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiBzaXplKQot ewotCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IERNQV9GUk9NX0RFVklDRTsKLQotCXJl dHVybiBwcm9jX2JlZ2luX2RtYShocHJvY2Vzc29yLCBwbXB1X2FkZHIsIHNpemUsIGRpcik7Ci19 Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19nZXRfcmVzb3VyY2VfaW5mbyA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIEVudW1lcmF0ZSB0aGUgcmVzb3VyY2VzIGN1cnJlbnRseSBhdmFp bGFibGUgb24gYSBwcm9jZXNzb3IuCi0gKi8KLWludCBwcm9jX2dldF9yZXNvdXJjZV9pbmZvKHZv aWQgKmhwcm9jZXNzb3IsIHUzMiByZXNvdXJjZV90eXBlLAotCQkJCSAgc3RydWN0IGRzcF9yZXNv dXJjZWluZm8gKnJlc291cmNlX2luZm8sCi0JCQkJICB1MzIgcmVzb3VyY2VfaW5mb19zaXplKQot ewotCWludCBzdGF0dXMgPSAtRVBFUk07Ci0Jc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2Jq ZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7Ci0Jc3RydWN0IG5vZGVfbWdy ICpobm9kZV9tZ3IgPSBOVUxMOwotCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBOVUxM OwotCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqcm1tID0gTlVMTDsKLQlzdHJ1Y3QgaW9fbWdyICpo aW9fbWdyID0gTlVMTDsJLyogSU8gbWFuYWdlciBoYW5kbGUgKi8KLQotCWlmICghcF9wcm9jX29i amVjdCkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQlzd2l0 Y2ggKHJlc291cmNlX3R5cGUpIHsKLQljYXNlIERTUF9SRVNPVVJDRV9EWU5EQVJBTToKLQljYXNl IERTUF9SRVNPVVJDRV9EWU5TQVJBTToKLQljYXNlIERTUF9SRVNPVVJDRV9EWU5FWFRFUk5BTDoK LQljYXNlIERTUF9SRVNPVVJDRV9EWU5TUkFNOgotCQlzdGF0dXMgPSBkZXZfZ2V0X25vZGVfbWFu YWdlcihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkgICAgICAmaG5vZGVfbWdyKTsKLQkJ aWYgKCFobm9kZV9tZ3IpIHsKLQkJCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGZ1bmNfZW5k OwotCQl9Ci0KLQkJc3RhdHVzID0gbm9kZV9nZXRfbmxkcl9vYmooaG5vZGVfbWdyLCAmbmxkcl9v YmopOwotCQlpZiAoIXN0YXR1cykgewotCQkJc3RhdHVzID0gbmxkcl9nZXRfcm1tX21hbmFnZXIo bmxkcl9vYmosICZybW0pOwotCQkJaWYgKHJtbSkgewotCQkJCWlmICghcm1tX3N0YXQocm1tLAot CQkJCQkgICAgICAoZW51bSBkc3BfbWVtdHlwZSlyZXNvdXJjZV90eXBlLAotCQkJCQkgICAgICAo c3RydWN0IGRzcF9tZW1zdGF0ICopCi0JCQkJCSAgICAgICYocmVzb3VyY2VfaW5mby0+cmVzdWx0 LgotCQkJCQkJbWVtX3N0YXQpKSkKLQkJCQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJCX0gZWxzZSB7 Ci0JCQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIERTUF9S RVNPVVJDRV9QUk9DTE9BRDoKLQkJc3RhdHVzID0gZGV2X2dldF9pb19tZ3IocF9wcm9jX29iamVj dC0+ZGV2X29iaiwgJmhpb19tZ3IpOwotCQlpZiAoaGlvX21ncikKLQkJCXN0YXR1cyA9Ci0JCQkg ICAgcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT4KLQkJCSAgICBpb19nZXRfcHJvY19sb2FkKGhp b19tZ3IsCi0JCQkJCQkgKHN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICopCi0JCQkJCQkgJihyZXNv dXJjZV9pbmZvLT5yZXN1bHQuCi0JCQkJCQkgICBwcm9jX2xvYWRfc3RhdCkpOwotCQllbHNlCi0J CQlzdGF0dXMgPSAtRUZBVUxUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0dXMgPSAtRVBF Uk07Ci0JCWJyZWFrOwotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0g KiAgPT09PT09PT0gcHJvY19nZXRfZGV2X29iamVjdCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgICAgIFJldHVybiB0aGUgRGV2IE9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gUHJvY2Vzc29y LgotICoKLSAqLwotaW50IHByb2NfZ2V0X2Rldl9vYmplY3Qodm9pZCAqaHByb2Nlc3NvciwKLQkJ CSAgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqKmRldmljZV9vYmopCi17Ci0JaW50IHN0YXR1cyA9 IC1FUEVSTTsKLQlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHBy b2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKLQotCWlmIChwX3Byb2Nfb2JqZWN0KSB7Ci0JCSpkZXZp Y2Vfb2JqID0gcF9wcm9jX29iamVjdC0+ZGV2X29iajsKLQkJc3RhdHVzID0gMDsKLQl9IGVsc2Ug ewotCQkqZGV2aWNlX29iaiA9IE5VTEw7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCi0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2dldF9zdGF0ZSA9PT09PT09 PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFJlcG9ydCB0aGUgc3RhdGUgb2YgdGhlIHNwZWNpZmll ZCBEU1AgcHJvY2Vzc29yLgotICovCi1pbnQgcHJvY19nZXRfc3RhdGUodm9pZCAqaHByb2Nlc3Nv ciwKLQkJCSAgc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSAqcHJvY19zdGF0ZV9vYmosCi0JCQkg IHUzMiBzdGF0ZV9pbmZvX3NpemUpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHByb2Nf b2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7 Ci0JaW50IGJyZF9zdGF0dXM7Ci0KLQlpZiAocF9wcm9jX29iamVjdCkgewotCQkvKiBGaXJzdCwg cmV0cmlldmUgQlJEIHN0YXRlIGluZm9ybWF0aW9uICovCi0JCXN0YXR1cyA9ICgqcF9wcm9jX29i amVjdC0+aW50Zl9meG5zLT5icmRfc3RhdHVzKQotCQkgICAgKHBfcHJvY19vYmplY3QtPmJyaWRn ZV9jb250ZXh0LCAmYnJkX3N0YXR1cyk7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlzd2l0Y2ggKGJy ZF9zdGF0dXMpIHsKLQkJCWNhc2UgQlJEX1NUT1BQRUQ6Ci0JCQkJcHJvY19zdGF0ZV9vYmotPnBy b2Nfc3RhdGUgPSBQUk9DX1NUT1BQRUQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJSRF9TTEVFUF9U UkFOU0lUSU9OOgotCQkJY2FzZSBCUkRfRFNQX0hJQkVSTkFUSU9OOgotCQkJCS8qIEZhbGwgdGhy b3VnaCAqLwotCQkJY2FzZSBCUkRfUlVOTklORzoKLQkJCQlwcm9jX3N0YXRlX29iai0+cHJvY19z dGF0ZSA9IFBST0NfUlVOTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgQlJEX0xPQURFRDoKLQkJ CQlwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSA9IFBST0NfTE9BREVEOwotCQkJCWJyZWFrOwot CQkJY2FzZSBCUkRfRVJST1I6Ci0JCQkJcHJvY19zdGF0ZV9vYmotPnByb2Nfc3RhdGUgPSBQUk9D X0VSUk9SOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcm9jX3N0YXRlX29iai0+cHJv Y19zdGF0ZSA9IDB4RkY7Ci0JCQkJc3RhdHVzID0gLUVQRVJNOwotCQkJCWJyZWFrOwotCQkJfQot CQl9Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0JZGV2X2RiZyhicmlkZ2Us ICIlcywgcmVzdWx0czogc3RhdHVzOiAweCV4IHByb2Nfc3RhdGVfb2JqOiAweCV4XG4iLAotCQlf X2Z1bmNfXywgc3RhdHVzLCBwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSk7Ci0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBwcm9jX2dldF90cmFjZSA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIFJldHJpZXZlIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0 cmFjZSBidWZmZXIsIGxvY2F0ZWQgb24gdGhlCi0gKiAgICAgIFByb2Nlc3Nvci4gIFByZWRlZmlu ZWQgc3ltYm9scyBmb3IgdGhlIHRyYWNlIGJ1ZmZlciBtdXN0IGhhdmUgYmVlbgotICogICAgICBj b25maWd1cmVkIGludG8gdGhlIERTUCBleGVjdXRhYmxlLgotICogIERldGFpbHM6Ci0gKiAgICAg IFdlIHN1cHBvcnQgdXNpbmcgdGhlIHN5bWJvbHMgU1lTX1BVVENCRUcgYW5kIFNZU19QVVRDRU5E IHRvIGRlZmluZSBhCi0gKiAgICAgIHRyYWNlIGJ1ZmZlciwgb25seS4gIFRyZWF0IGl0IGFzIGFu IHVuZG9jdW1lbnRlZCBmZWF0dXJlLgotICogICAgICBUaGlzIGNhbGwgaXMgZGVzdHJ1Y3RpdmUs IG1lYW5pbmcgdGhlIHByb2Nlc3NvciBpcyBwbGFjZWQgaW4gdGhlIG1vbml0b3IKLSAqICAgICAg c3RhdGUgYXMgYSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbi4KLSAqLwotaW50IHByb2NfZ2V0X3Ry YWNlKHZvaWQgKmhwcm9jZXNzb3IsIHU4ICpwYnVmLCB1MzIgbWF4X3NpemUpCi17Ci0JaW50IHN0 YXR1czsKLQotCXN0YXR1cyA9IC1FTk9TWVM7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAq ICA9PT09PT09PSBwcm9jX2xvYWQgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBSZXNl dCBhIHByb2Nlc3NvciBhbmQgbG9hZCBhIG5ldyBiYXNlIHByb2dyYW0gaW1hZ2UuCi0gKiAgICAg IFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBE U1AvQklPUyBCcmlkZ2UKLSAqICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgQVBJLgotICov Ci1pbnQgcHJvY19sb2FkKHZvaWQgKmhwcm9jZXNzb3IsIGNvbnN0IHMzMiBhcmdjX2luZGV4LAot CQkgICAgIGNvbnN0IGNoYXIgKip1c2VyX2FyZ3MsIGNvbnN0IGNoYXIgKip1c2VyX2VudnApCi17 Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0g KHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7Ci0Jc3RydWN0IGlvX21nciAqaGlvX21n cjsJLyogSU8gbWFuYWdlciBoYW5kbGUgKi8KLQlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7Ci0J c3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOwkvKiBDb2RlIG1hbmFnZXIgaGFuZGxlICovCi0J Y2hhciAqcGFyZ3YwOwkJLyogdGVtcCBhcmd2WzBdIHB0ciAqLwotCWNoYXIgKipuZXdfZW52cDsJ LyogVXBkYXRlZCBlbnZwW10gYXJyYXkuICovCi0JY2hhciBzel9wcm9jX2lkW01BWFBST0NJRExF Tl07CS8qIFNpemUgb2YgIlBST0NfSUQ9PG4+IiAqLwotCXMzMiBlbnZwX2VsZW1zOwkJLyogTnVt IGVsZW1lbnRzIGluIGVudnBbXS4gKi8KLQlzMzIgY25ld19lbnZwOwkJLyogIiAgIiBpbiBuZXdf ZW52cFtdICovCi0JczMyIG5wcm9jX2lkID0gMDsJLyogQW50aWNpcGF0ZSBNUCB2ZXJzaW9uLiAq LwotCXN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9oYW5kbGU7Ci0Jc3RydWN0IGRtbV9vYmplY3Qg KmRtbV9tZ3I7Ci0JdTMyIGR3X2V4dF9lbmQ7Ci0JdTMyIHByb2NfaWQ7Ci0JaW50IGJyZF9zdGF0 ZTsKLQlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2Up OwotCi0jaWZkZWYgT1BUX0xPQURfVElNRV9JTlNUUlVNRU5UQVRJT04KLQlzdHJ1Y3QgdGltZXZh bCB0djE7Ci0Jc3RydWN0IHRpbWV2YWwgdHYyOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJ R19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCi0Jc3RydWN0 IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9Ci0JICAgIG9tYXBfZHNwYnJpZGdlX2Rl di0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0jZW5kaWYKLQotI2lmZGVmIE9QVF9MT0FEX1RJTUVfSU5T VFJVTUVOVEFUSU9OCi0JZG9fZ2V0dGltZW9mZGF5KCZ0djEpOwotI2VuZGlmCi0JaWYgKCFwX3By b2Nfb2JqZWN0KSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQot CWRldl9nZXRfY29kX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCAmY29kX21ncik7Ci0JaWYg KCFjb2RfbWdyKSB7Ci0JCXN0YXR1cyA9IC1FUEVSTTsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0J c3RhdHVzID0gcHJvY19zdG9wKGhwcm9jZXNzb3IpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVu Y19lbmQ7Ci0KLQkvKiBQbGFjZSB0aGUgYm9hcmQgaW4gdGhlIG1vbml0b3Igc3RhdGUuICovCi0J c3RhdHVzID0gcHJvY19tb25pdG9yKGhwcm9jZXNzb3IpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8g ZnVuY19lbmQ7Ci0KLQkvKiBTYXZlIHB0ciB0byAgb3JpZ2luYWwgYXJndlswXS4gKi8KLQlwYXJn djAgPSAoY2hhciAqKXVzZXJfYXJnc1swXTsKLQkvKlByZXBlbmQgIlBST0NfSUQ9PG5wcm9jX2lk PiJ0byBlbnZwIGFycmF5IGZvciB0YXJnZXQuICovCi0JZW52cF9lbGVtcyA9IGdldF9lbnZwX2Nv dW50KChjaGFyICoqKXVzZXJfZW52cCk7Ci0JY25ld19lbnZwID0gKGVudnBfZWxlbXMgPyAoZW52 cF9lbGVtcyArIDEpIDogKGVudnBfZWxlbXMgKyAyKSk7Ci0JbmV3X2VudnAgPSBremFsbG9jKGNu ZXdfZW52cCAqIHNpemVvZihjaGFyICoqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5ld19lbnZwKSB7 Ci0JCXN0YXR1cyA9IHNucHJpbnRmKHN6X3Byb2NfaWQsIE1BWFBST0NJRExFTiwgUFJPQ19FTlZQ Uk9DSUQsCi0JCQkJICBucHJvY19pZCk7Ci0JCWlmIChzdGF0dXMgPT0gLTEpIHsKLQkJCWRldl9k YmcoYnJpZGdlLCAiJXM6IFByb2MgSUQgc3RyaW5nIG92ZXJmbG93XG4iLAotCQkJCV9fZnVuY19f KTsKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQkJfSBlbHNlIHsKLQkJCW5ld19lbnZwID0KLQkJCSAg ICBwcmVwZW5kX2VudnAobmV3X2VudnAsIChjaGFyICoqKXVzZXJfZW52cCwKLQkJCQkJIGVudnBf ZWxlbXMsIGNuZXdfZW52cCwgc3pfcHJvY19pZCk7Ci0JCQkvKiBHZXQgdGhlIERDRCBIYW5kbGUg Ki8KLQkJCXN0YXR1cyA9IG1ncl9nZXRfZGNkX2hhbmRsZShwX3Byb2Nfb2JqZWN0LT5tZ3Jfb2Jq LAotCQkJCQkJICAgICh1MzIgKikgJmhkY2RfaGFuZGxlKTsKLQkJCWlmICghc3RhdHVzKSB7Ci0J CQkJLyogIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggbmV3IGxvYWQsCi0JCQkJICogIGNoZWNrIGlm IGEgcHJldmlvdXNseSByZWdpc3RlcmVkIENPRkYKLQkJCQkgKiAgZXhpc3RzLgotCQkJCSAqICBJ ZiB5ZXMsIHVucmVnaXN0ZXIgbm9kZXMgaW4gcHJldmlvdXNseQotCQkJCSAqICByZWdpc3RlcmVk IENPRkYuICBJZiBhbnkgZXJyb3Igb2NjdXJyZWQsCi0JCQkJICogIHNldCBwcmV2aW91c2x5IHJl Z2lzdGVyZWQgQ09GRiB0byBOVUxMLiAqLwotCQkJCWlmIChwX3Byb2Nfb2JqZWN0LT5sYXN0X2Nv ZmYgIT0gTlVMTCkgewotCQkJCQlzdGF0dXMgPQotCQkJCQkgICAgZGNkX2F1dG9fdW5yZWdpc3Rl cihoZGNkX2hhbmRsZSwKLQkJCQkJCQkJcF9wcm9jX29iamVjdC0+Ci0JCQkJCQkJCWxhc3RfY29m Zik7Ci0JCQkJCS8qIFJlZ2FyZGxlc3Mgb2YgYXV0byB1bnJlZ2lzdGVyIHN0YXR1cywKLQkJCQkJ ICogIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQKLQkJCQkJICogIG1lbW9yeS4gKi8KLQkJCQkJ a2ZyZWUocF9wcm9jX29iamVjdC0+bGFzdF9jb2ZmKTsKLQkJCQkJcF9wcm9jX29iamVjdC0+bGFz dF9jb2ZmID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBPbiBzdWNjZXNzLCBkbyBjb2Rfb3Bl bl9iYXNlKCkgKi8KLQkJCXN0YXR1cyA9IGNvZF9vcGVuX2Jhc2UoY29kX21nciwgKGNoYXIgKil1 c2VyX2FyZ3NbMF0sCi0JCQkJCSAgICAgICBDT0RfU1lNQik7Ci0JCX0KLQl9IGVsc2UgewotCQlz dGF0dXMgPSAtRU5PTUVNOwotCX0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBBdXRvLXJlZ2lzdGVy IGRhdGEgYmFzZSAqLwotCQkvKiBHZXQgdGhlIERDRCBIYW5kbGUgKi8KLQkJc3RhdHVzID0gbWdy X2dldF9kY2RfaGFuZGxlKHBfcHJvY19vYmplY3QtPm1ncl9vYmosCi0JCQkJCSAgICAodTMyICop ICZoZGNkX2hhbmRsZSk7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkvKiAgQXV0byByZWdpc3RlciBu b2RlcyBpbiBzcGVjaWZpZWQgQ09GRgotCQkJICogIGZpbGUuICBJZiByZWdpc3RyYXRpb24gZGlk IG5vdCBmYWlsLAotCQkJICogIChzdGF0dXMgPSAwIG9yIC1FQUNDRVMpCi0JCQkgKiAgc2F2ZSB0 aGUgbmFtZSBvZiB0aGUgQ09GRiBmaWxlIGZvcgotCQkJICogIGRlLXJlZ2lzdHJhdGlvbiBpbiB0 aGUgZnV0dXJlLiAqLwotCQkJc3RhdHVzID0KLQkJCSAgICBkY2RfYXV0b19yZWdpc3RlcihoZGNk X2hhbmRsZSwKLQkJCQkJICAgICAgKGNoYXIgKil1c2VyX2FyZ3NbMF0pOwotCQkJaWYgKHN0YXR1 cyA9PSAtRUFDQ0VTKQotCQkJCXN0YXR1cyA9IDA7Ci0KLQkJCWlmIChzdGF0dXMpIHsKLQkJCQlz dGF0dXMgPSAtRVBFUk07Ci0JCQl9IGVsc2UgewotCQkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Ig cHN6TGFzdENvZmYgKi8KLQkJCQlwX3Byb2Nfb2JqZWN0LT5sYXN0X2NvZmYgPQotCQkJCQkJa3ph bGxvYygoc3RybGVuKHVzZXJfYXJnc1swXSkgKwotCQkJCQkJMSksIEdGUF9LRVJORUwpOwotCQkJ CS8qIElmIG1lbW9yeSBhbGxvY2F0ZWQsIHNhdmUgQ09GRiBmaWxlIG5hbWUgKi8KLQkJCQlpZiAo cF9wcm9jX29iamVjdC0+bGFzdF9jb2ZmKSB7Ci0JCQkJCXN0cm5jcHkocF9wcm9jX29iamVjdC0+ bGFzdF9jb2ZmLAotCQkJCQkJKGNoYXIgKil1c2VyX2FyZ3NbMF0sCi0JCQkJCQkoc3RybGVuKChj aGFyICopdXNlcl9hcmdzWzBdKSArCi0JCQkJCQkgMSkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0K LQkvKiBVcGRhdGUgc2hhcmVkIG1lbW9yeSBhZGRyZXNzIGFuZCBzaXplICovCi0JaWYgKCFzdGF0 dXMpIHsKLQkJLyogIENyZWF0ZSB0aGUgbWVzc2FnZSBtYW5hZ2VyLiBUaGlzIG11c3QgYmUgZG9u ZQotCQkgKiAgYmVmb3JlIGNhbGxpbmcgdGhlIElPT25Mb2FkZWQgZnVuY3Rpb24uICovCi0JCWRl dl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCAmaG1zZ19tZ3IpOwotCQlpZiAo IWhtc2dfbWdyKSB7Ci0JCQlzdGF0dXMgPSBtc2dfY3JlYXRlKCZobXNnX21nciwgcF9wcm9jX29i amVjdC0+ZGV2X29iaiwKLQkJCQkJICAgIChtc2dfb25leGl0KSBub2RlX29uX2V4aXQpOwotCQkJ ZGV2X3NldF9tc2dfbWdyKHBfcHJvY19vYmplY3QtPmRldl9vYmosIGhtc2dfbWdyKTsKLQkJfQot CX0KLQlpZiAoIXN0YXR1cykgewotCQkvKiBTZXQgdGhlIERldmljZSBvYmplY3QncyBtZXNzYWdl IG1hbmFnZXIgKi8KLQkJc3RhdHVzID0gZGV2X2dldF9pb19tZ3IocF9wcm9jX29iamVjdC0+ZGV2 X29iaiwgJmhpb19tZ3IpOwotCQlpZiAoaGlvX21ncikKLQkJCXN0YXR1cyA9ICgqcF9wcm9jX29i amVjdC0+aW50Zl9meG5zLT5pb19vbl9sb2FkZWQpCi0JCQkJCQkJCShoaW9fbWdyKTsKLQkJZWxz ZQotCQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9Ci0JaWYgKCFzdGF0dXMpIHsKLQkJLyogTm93LCBh dHRlbXB0IHRvIGxvYWQgYW4gZXhlYzogKi8KLQotCQkvKiBCb29zdCB0aGUgT1BQIGxldmVsIHRv IE1heGltdW0gbGV2ZWwgc3VwcG9ydGVkIGJ5IGJhc2Vwb3J0ICovCi0jaWYgZGVmaW5lZChDT05G SUdfVElEU1BCUklER0VfRFZGUykgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9GUkVRKQotCQlpZiAo cGRhdGEtPmNwdV9zZXRfZnJlcSkKLQkJCSgqcGRhdGEtPmNwdV9zZXRfZnJlcSkgKHBkYXRhLT5t cHVfc3BlZWRbVkREMV9PUFA1XSk7Ci0jZW5kaWYKLQkJc3RhdHVzID0gY29kX2xvYWRfYmFzZShj b2RfbWdyLCBhcmdjX2luZGV4LCAoY2hhciAqKil1c2VyX2FyZ3MsCi0JCQkJICAgICAgIGRldl9i cmRfd3JpdGVfZnhuLAotCQkJCSAgICAgICBwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCBOVUxMKTsK LQkJaWYgKHN0YXR1cykgewotCQkJaWYgKHN0YXR1cyA9PSAtRUJBREYpIHsKLQkJCQlkZXZfZGJn KGJyaWRnZSwgIiVzOiBGYWlsdXJlIHRvIExvYWQgdGhlIEVYRVxuIiwKLQkJCQkJX19mdW5jX18p OwotCQkJfQotCQkJaWYgKHN0YXR1cyA9PSAtRVNQSVBFKSB7Ci0JCQkJcHJfZXJyKCIlczogQ291 bGRuJ3QgcGFyc2UgdGhlIGZpbGVcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKLQkJCX0KLQkJ fQotCQkvKiBSZXF1ZXN0aW5nIHRoZSBsb3dlc3Qgb3BwIHN1cHBvcnRlZCAqLwotI2lmIGRlZmlu ZWQoQ09ORklHX1RJRFNQQlJJREdFX0RWRlMpICYmICFkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkK LQkJaWYgKHBkYXRhLT5jcHVfc2V0X2ZyZXEpCi0JCQkoKnBkYXRhLT5jcHVfc2V0X2ZyZXEpIChw ZGF0YS0+bXB1X3NwZWVkW1ZERDFfT1BQMV0pOwotI2VuZGlmCi0KLQl9Ci0JaWYgKCFzdGF0dXMp IHsKLQkJLyogVXBkYXRlIHRoZSBQcm9jZXNzb3Igc3RhdHVzIHRvIGxvYWRlZCAqLwotCQlzdGF0 dXMgPSAoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+YnJkX3NldF9zdGF0ZSkKLQkJICAgIChw X3Byb2Nfb2JqZWN0LT5icmlkZ2VfY29udGV4dCwgQlJEX0xPQURFRCk7Ci0JCWlmICghc3RhdHVz KSB7Ci0JCQlwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID0gUFJPQ19MT0FERUQ7Ci0JCQlpZiAo cF9wcm9jX29iamVjdC0+bnRmeV9vYmopCi0JCQkJcHJvY19ub3RpZnlfY2xpZW50cyhwX3Byb2Nf b2JqZWN0LAotCQkJCQkJICAgIERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSk7Ci0JCX0KLQl9Ci0J aWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKGhwcm9jZXNz b3IsICZwcm9jX2lkKTsKLQkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKLQkJCS8qIFVzZSBh bGwgYXZhaWxhYmxlIERTUCBhZGRyZXNzIHNwYWNlIGFmdGVyIEVYVE1FTQotCQkJICogZm9yIERN TSAqLwotCQkJaWYgKCFzdGF0dXMpCi0JCQkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29k X21nciwgRVhURU5ELAotCQkJCQkJCSAgICZkd19leHRfZW5kKTsKLQotCQkJLyogUmVzZXQgRE1N IHN0cnVjdHMgYW5kIGFkZCBhbiBpbml0aWFsIGZyZWUgY2h1bmsgKi8KLQkJCWlmICghc3RhdHVz KSB7Ci0JCQkJc3RhdHVzID0KLQkJCQkgICAgZGV2X2dldF9kbW1fbWdyKHBfcHJvY19vYmplY3Qt PmRldl9vYmosCi0JCQkJCQkgICAgJmRtbV9tZ3IpOwotCQkJCWlmIChkbW1fbWdyKSB7Ci0JCQkJ CS8qIFNldCBkd19leHRfZW5kIHRvIERNTSBTVEFSVCB1OAotCQkJCQkgKiBhZGRyZXNzICovCi0J CQkJCWR3X2V4dF9lbmQgPQotCQkJCQkgICAgKGR3X2V4dF9lbmQgKyAxKSAqIERTUFdPUkRTSVpF OwotCQkJCQkvKiBETU0gbWVtb3J5IGlzIGZyb20gRVhUX0VORCAqLwotCQkJCQlzdGF0dXMgPSBk bW1fY3JlYXRlX3RhYmxlcyhkbW1fbWdyLAotCQkJCQkJCQkgICBkd19leHRfZW5kLAotCQkJCQkJ CQkgICBETU1QT09MU0laRSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc3RhdHVzID0gLUVGQVVMVDsK LQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgYXJndlswXSAq LwotCWtmcmVlKG5ld19lbnZwKTsKLQl1c2VyX2FyZ3NbMF0gPSBwYXJndjA7Ci0JaWYgKCFzdGF0 dXMpIHsKLQkJaWYgKCEoKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPmJyZF9zdGF0dXMpCi0J CQkJKHBfcHJvY19vYmplY3QtPmJyaWRnZV9jb250ZXh0LCAmYnJkX3N0YXRlKSkpIHsKLQkJCXBy X2luZm8oIiVzOiBQcm9jZXNzb3IgTG9hZGVkICVzXG4iLCBfX2Z1bmNfXywgcGFyZ3YwKTsKLQkJ CWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOwotCQkJZHJ2X2RhdGFwLT5iYXNlX2ltZyA9IGtz dHJkdXAocGFyZ3YwLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghZHJ2X2RhdGFwLT5iYXNlX2ltZykK LQkJCQlzdGF0dXMgPSAtRU5PTUVNOwotCQl9Ci0JfQotCi1mdW5jX2VuZDoKLQlpZiAoc3RhdHVz KSB7Ci0JCXByX2VycigiJXM6IFByb2Nlc3NvciBmYWlsZWQgdG8gbG9hZFxuIiwgX19mdW5jX18p OwotCQlwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7Ci0JfQotI2lmZGVmIE9QVF9MT0FEX1RJTUVf SU5TVFJVTUVOVEFUSU9OCi0JZG9fZ2V0dGltZW9mZGF5KCZ0djIpOwotCWlmICh0djIudHZfdXNl YyA8IHR2MS50dl91c2VjKSB7Ci0JCXR2Mi50dl91c2VjICs9IDEwMDAwMDA7Ci0JCXR2Mi50dl9z ZWMtLTsKLQl9Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogdGltZSB0byBsb2FkICVkIHNlYyBhbmQg JWQgdXNlY1xuIiwgX19mdW5jX18sCi0JCXR2Mi50dl9zZWMgLSB0djEudHZfc2VjLCB0djIudHZf dXNlYyAtIHR2MS50dl91c2VjKTsKLSNlbmRpZgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0g KiAgPT09PT09PT0gcHJvY19tYXAgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBNYXBz IGEgTVBVIGJ1ZmZlciB0byBEU1AgYWRkcmVzcyBzcGFjZS4KLSAqLwotaW50IHByb2NfbWFwKHZv aWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3NpemUsCi0JCSAgICB2b2lk ICpyZXFfYWRkciwgdm9pZCAqKnBwX21hcF9hZGRyLCB1MzIgdWxfbWFwX2F0dHIsCi0JCSAgICBz dHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQotewotCXUzMiB2YV9hbGlnbjsKLQl1MzIg cGFfYWxpZ247Ci0Jc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7Ci0JdTMyIHNpemVfYWxpZ247 Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0g KHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7Ci0Jc3RydWN0IGRtbV9tYXBfb2JqZWN0 ICptYXBfb2JqOwotCXUzMiB0bXBfYWRkciA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfVElEU1BCUklE R0VfQ0FDSEVfTElORV9DSEVDSwotCWlmICgodWxfbWFwX2F0dHIgJiBCVUZNT0RFX01BU0spICE9 IFJCVUYpIHsKLQkJaWYgKCFJU19BTElHTkVEKCh1MzIpcG1wdV9hZGRyLCBEU1BfQ0FDSEVfTElO RSkgfHwKLQkJICAgICFJU19BTElHTkVEKHVsX3NpemUsIERTUF9DQUNIRV9MSU5FKSkgewotCQkJ cHJfZXJyKCIlczogbm90IGFsaWduZWQ6IDB4JXggKCVkKVxuIiwgX19mdW5jX18sCi0JCQkJCQko dTMyKXBtcHVfYWRkciwgdWxfc2l6ZSk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLSNl bmRpZgotCi0JLyogQ2FsY3VsYXRlIHRoZSBwYWdlLWFsaWduZWQgUEEsIFZBIGFuZCBzaXplICov Ci0JdmFfYWxpZ24gPSBQR19BTElHTl9MT1coKHUzMikgcmVxX2FkZHIsIFBHX1NJWkU0Syk7Ci0J cGFfYWxpZ24gPSBQR19BTElHTl9MT1coKHUzMikgcG1wdV9hZGRyLCBQR19TSVpFNEspOwotCXNp emVfYWxpZ24gPSBQR19BTElHTl9ISUdIKHVsX3NpemUgKyAodTMyKSBwbXB1X2FkZHIgLSBwYV9h bGlnbiwKLQkJCQkgICBQR19TSVpFNEspOwotCi0JaWYgKCFwX3Byb2Nfb2JqZWN0KSB7Ci0JCXN0 YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCS8qIENyaXRpY2FsIHNlY3Rp b24gKi8KLQltdXRleF9sb2NrKCZwcm9jX2xvY2spOwotCWRtbV9nZXRfaGFuZGxlKHBfcHJvY19v YmplY3QsICZkbW1fbWdyKTsKLQlpZiAoZG1tX21ncikKLQkJc3RhdHVzID0gZG1tX21hcF9tZW1v cnkoZG1tX21nciwgdmFfYWxpZ24sIHNpemVfYWxpZ24pOwotCWVsc2UKLQkJc3RhdHVzID0gLUVG QVVMVDsKLQotCS8qIEFkZCBtYXBwaW5nIHRvIHRoZSBwYWdlIHRhYmxlcy4gKi8KLQlpZiAoIXN0 YXR1cykgewotCi0JCS8qIE1hcHBlZCBhZGRyZXNzID0gTVNCIG9mIFZBIHwgTFNCIG9mIFBBICov Ci0JCXRtcF9hZGRyID0gKHZhX2FsaWduIHwgKCh1MzIpIHBtcHVfYWRkciAmIChQR19TSVpFNEsg LSAxKSkpOwotCQkvKiBtYXBwZWQgbWVtb3J5IHJlc291cmNlIHRyYWNraW5nICovCi0JCW1hcF9v YmogPSBhZGRfbWFwcGluZ19pbmZvKHByX2N0eHQsIHBhX2FsaWduLCB0bXBfYWRkciwKLQkJCQkJ CXNpemVfYWxpZ24pOwotCQlpZiAoIW1hcF9vYmopCi0JCQlzdGF0dXMgPSAtRU5PTUVNOwotCQll bHNlCi0JCQlzdGF0dXMgPSAoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+YnJkX21lbV9tYXAp Ci0JCQkgICAgKHBfcHJvY19vYmplY3QtPmJyaWRnZV9jb250ZXh0LCBwYV9hbGlnbiwgdmFfYWxp Z24sCi0JCQkgICAgIHNpemVfYWxpZ24sIHVsX21hcF9hdHRyLCBtYXBfb2JqLT5wYWdlcyk7Ci0J fQotCWlmICghc3RhdHVzKSB7Ci0JCS8qIE1hcHBlZCBhZGRyZXNzID0gTVNCIG9mIFZBIHwgTFNC IG9mIFBBICovCi0JCSpwcF9tYXBfYWRkciA9ICh2b2lkICopIHRtcF9hZGRyOwotCX0gZWxzZSB7 Ci0JCXJlbW92ZV9tYXBwaW5nX2luZm9ybWF0aW9uKHByX2N0eHQsIHRtcF9hZGRyLCBzaXplX2Fs aWduKTsKLQkJZG1tX3VuX21hcF9tZW1vcnkoZG1tX21nciwgdmFfYWxpZ24sICZzaXplX2FsaWdu KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcm9jX2xvY2spOwotCi0JaWYgKHN0YXR1cykKLQkJZ290 byBmdW5jX2VuZDsKLQotZnVuY19lbmQ6Ci0JZGV2X2RiZyhicmlkZ2UsICIlczogaHByb2Nlc3Nv ciAlcCwgcG1wdV9hZGRyICVwLCB1bF9zaXplICV4LCAiCi0JCSJyZXFfYWRkciAlcCwgdWxfbWFw X2F0dHIgJXgsIHBwX21hcF9hZGRyICVwLCB2YV9hbGlnbiAleCwgIgotCQkicGFfYWxpZ24gJXgs IHNpemVfYWxpZ24gJXggc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLAotCQlocHJvY2Vzc29yLCBw bXB1X2FkZHIsIHVsX3NpemUsIHJlcV9hZGRyLCB1bF9tYXBfYXR0ciwKLQkJcHBfbWFwX2FkZHIs IHZhX2FsaWduLCBwYV9hbGlnbiwgc2l6ZV9hbGlnbiwgc3RhdHVzKTsKLQotCXJldHVybiBzdGF0 dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvZiBzcGVjaWZp YyBwcm9jZXNzb3IgZXZlbnRzLgotICovCi1pbnQgcHJvY19yZWdpc3Rlcl9ub3RpZnkodm9pZCAq aHByb2Nlc3NvciwgdTMyIGV2ZW50X21hc2ssCi0JCQkJdTMyIG5vdGlmeV90eXBlLCBzdHJ1Y3Qg ZHNwX25vdGlmaWNhdGlvbgotCQkJCSpobm90aWZpY2F0aW9uKQotewotCWludCBzdGF0dXMgPSAw OwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmpl Y3QgKilocHJvY2Vzc29yOwotCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsKLQotCS8qIENoZWNr IHByb2Nlc3NvciBoYW5kbGUgKi8KLQlpZiAoIXBfcHJvY19vYmplY3QpIHsKLQkJc3RhdHVzID0g LUVGQVVMVDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0JLyogQ2hlY2sgaWYgZXZlbnQgbWFzayBp cyBhIHZhbGlkIHByb2Nlc3NvciByZWxhdGVkIGV2ZW50ICovCi0JaWYgKGV2ZW50X21hc2sgJiB+ KERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSB8IERTUF9QUk9DRVNTT1JBVFRBQ0ggfAotCQkJRFNQ X1BST0NFU1NPUkRFVEFDSCB8IERTUF9QUk9DRVNTT1JSRVNUQVJUIHwKLQkJCURTUF9NTVVGQVVM VCB8IERTUF9TWVNFUlJPUiB8IERTUF9QV1JFUlJPUiB8Ci0JCQlEU1BfV0RUT1ZFUkZMT1cpKQot CQlzdGF0dXMgPSAtRUlOVkFMOwotCi0JLyogQ2hlY2sgaWYgbm90aWZ5IHR5cGUgaXMgdmFsaWQg Ki8KLQlpZiAobm90aWZ5X3R5cGUgIT0gRFNQX1NJR05BTEVWRU5UKQotCQlzdGF0dXMgPSAtRUlO VkFMOwotCi0JaWYgKCFzdGF0dXMpIHsKLQkJLyogSWYgZXZlbnQgbWFzayBpcyBub3QgRFNQX1NZ U0VSUk9SLCBEU1BfTU1VRkFVTFQsCi0JCSAqIG9yIERTUF9QV1JFUlJPUiB0aGVuIHJlZ2lzdGVy IGV2ZW50IGltbWVkaWF0ZWx5LiAqLwotCQlpZiAoZXZlbnRfbWFzayAmCi0JCSAgICB+KERTUF9T WVNFUlJPUiB8IERTUF9NTVVGQVVMVCB8IERTUF9QV1JFUlJPUiB8Ci0JCQkJRFNQX1dEVE9WRVJG TE9XKSkgewotCQkJc3RhdHVzID0gbnRmeV9yZWdpc3RlcihwX3Byb2Nfb2JqZWN0LT5udGZ5X29i aiwKLQkJCQkJICAgICAgIGhub3RpZmljYXRpb24sIGV2ZW50X21hc2ssCi0JCQkJCSAgICAgICBu b3RpZnlfdHlwZSk7Ci0JCQkvKiBTcGVjaWFsIGNhc2UgYWxlcnQsIHNwZWNpYWwgY2FzZSBhbGVy dCEKLQkJCSAqIElmIHdlJ3JlIHRyeWluZyB0byAqZGVyZWdpc3RlciogKGkuZS4gZXZlbnRfbWFz awotCQkJICogaXMgMCksIGEgRFNQX1NZU0VSUk9SIG9yIERTUF9NTVVGQVVMVCBub3RpZmljYXRp b24sCi0JCQkgKiB3ZSBoYXZlIHRvIGRlcmVnaXN0ZXIgd2l0aCB0aGUgREVIIG1hbmFnZXIuCi0J CQkgKiBUaGVyZSdzIG5vIHdheSB0byBrbm93LCBiYXNlZCBvbiBldmVudF9tYXNrIHdoaWNoCi0J CQkgKiBtYW5hZ2VyIHRoZSBub3RpZmljYXRpb24gZXZlbnQgd2FzIHJlZ2lzdGVyZWQgd2l0aCwK LQkJCSAqIHNvIGlmIHdlJ3JlIHRyeWluZyB0byBkZXJlZ2lzdGVyIGFuZCBudGZ5X3JlZ2lzdGVy Ci0JCQkgKiBmYWlsZWQsIHdlJ2xsIGdpdmUgdGhlIGRlaCBtYW5hZ2VyIGEgc2hvdC4KLQkJCSAq LwotCQkJaWYgKChldmVudF9tYXNrID09IDApICYmIHN0YXR1cykgewotCQkJCXN0YXR1cyA9Ci0J CQkJICAgIGRldl9nZXRfZGVoX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkJICAg ICZoZGVoX21ncik7Ci0JCQkJc3RhdHVzID0KLQkJCQkJYnJpZGdlX2RlaF9yZWdpc3Rlcl9ub3Rp ZnkoaGRlaF9tZ3IsCi0JCQkJCQkJZXZlbnRfbWFzaywKLQkJCQkJCQlub3RpZnlfdHlwZSwKLQkJ CQkJCQlobm90aWZpY2F0aW9uKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IGRldl9n ZXRfZGVoX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLAotCQkJCQkJICZoZGVoX21ncik7Ci0J CQlzdGF0dXMgPQotCQkJICAgIGJyaWRnZV9kZWhfcmVnaXN0ZXJfbm90aWZ5KGhkZWhfbWdyLAot CQkJCQkgICAgZXZlbnRfbWFzaywKLQkJCQkJICAgIG5vdGlmeV90eXBlLAotCQkJCQkgICAgaG5v dGlmaWNhdGlvbik7Ci0KLQkJfQotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0K LS8qCi0gKiAgPT09PT09PT0gcHJvY19yZXNlcnZlX21lbW9yeSA9PT09PT09PQotICogIFB1cnBv c2U6Ci0gKiAgICAgIFJlc2VydmUgYSB2aXJ0dWFsbHkgY29udGlndW91cyByZWdpb24gb2YgRFNQ IGFkZHJlc3Mgc3BhY2UuCi0gKi8KLWludCBwcm9jX3Jlc2VydmVfbWVtb3J5KHZvaWQgKmhwcm9j ZXNzb3IsIHUzMiB1bF9zaXplLAotCQkJICAgICAgIHZvaWQgKipwcF9yc3ZfYWRkciwKLQkJCSAg ICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQotewotCXN0cnVjdCBkbW1fb2Jq ZWN0ICpkbW1fbWdyOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9w cm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOwotCXN0cnVjdCBk bW1fcnN2X29iamVjdCAqcnN2X29iajsKLQotCWlmICghcF9wcm9jX29iamVjdCkgewotCQlzdGF0 dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCXN0YXR1cyA9IGRtbV9nZXRf aGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKLQlpZiAoIWRtbV9tZ3IpIHsKLQkJc3Rh dHVzID0gLUVGQVVMVDsKLQkJZ290byBmdW5jX2VuZDsKLQl9Ci0KLQlzdGF0dXMgPSBkbW1fcmVz ZXJ2ZV9tZW1vcnkoZG1tX21nciwgdWxfc2l6ZSwgKHUzMiAqKSBwcF9yc3ZfYWRkcik7Ci0JaWYg KHN0YXR1cyAhPSAwKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JLyoKLQkgKiBBIHN1Y2Nlc3NmdWwg cmVzZXJ2ZSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgaW5zZXJ0aW9uIG9mIHJzdl9vYmoKLQkgKiBp bnRvIGRtbV9yc3ZfbGlzdCwgc28gdGhhdCByZXNlcnZlZCBtZW1vcnkgcmVzb3VyY2UgdHJhY2tp bmcKLQkgKiByZW1haW5zIHVwdG9kYXRlCi0JICovCi0JcnN2X29iaiA9IGttYWxsb2Moc2l6ZW9m KHN0cnVjdCBkbW1fcnN2X29iamVjdCksIEdGUF9LRVJORUwpOwotCWlmIChyc3Zfb2JqKSB7Ci0J CXJzdl9vYmotPmRzcF9yZXNlcnZlZF9hZGRyID0gKHUzMikgKnBwX3Jzdl9hZGRyOwotCQlzcGlu X2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7Ci0JCWxpc3RfYWRkKCZyc3Zfb2JqLT5saW5r LCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9y c3ZfbG9jayk7Ci0JfQotCi1mdW5jX2VuZDoKLQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBocHJvY2Vz c29yOiAweCVwIHVsX3NpemU6IDB4JXggcHBfcnN2X2FkZHI6IDB4JXAgIgotCQkic3RhdHVzIDB4 JXhcbiIsIF9fZnVuY19fLCBocHJvY2Vzc29yLAotCQl1bF9zaXplLCBwcF9yc3ZfYWRkciwgc3Rh dHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IHByb2Nfc3RhcnQg PT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBTdGFydCBhIHByb2Nlc3NvciBydW5uaW5n LgotICovCi1pbnQgcHJvY19zdGFydCh2b2lkICpocHJvY2Vzc29yKQotewotCWludCBzdGF0dXMg PSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19v YmplY3QgKilocHJvY2Vzc29yOwotCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsJLyogQ29k ZSBtYW5hZ2VyIGhhbmRsZSAqLwotCXUzMiBkd19kc3BfYWRkcjsJLyogTG9hZGVkIGNvZGUncyBl bnRyeSBwb2ludC4gKi8KLQlpbnQgYnJkX3N0YXRlOwotCi0JaWYgKCFwX3Byb2Nfb2JqZWN0KSB7 Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCS8qIENhbGwgdGhl IGJyaWRnZV9icmRfc3RhcnQgKi8KLQlpZiAocF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSAhPSBQ Uk9DX0xPQURFRCkgewotCQlzdGF0dXMgPSAtRUJBRFI7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQot CXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCAmY29kX21n cik7Ci0JaWYgKCFjb2RfbWdyKSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19j b250OwotCX0KLQotCXN0YXR1cyA9IGNvZF9nZXRfZW50cnkoY29kX21nciwgJmR3X2RzcF9hZGRy KTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfY29udDsKLQotCXN0YXR1cyA9ICgqcF9wcm9j X29iamVjdC0+aW50Zl9meG5zLT5icmRfc3RhcnQpCi0JICAgIChwX3Byb2Nfb2JqZWN0LT5icmlk Z2VfY29udGV4dCwgZHdfZHNwX2FkZHIpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19jb250 OwotCi0JLyogQ2FsbCBkZXZfY3JlYXRlMiAqLwotCXN0YXR1cyA9IGRldl9jcmVhdGUyKHBfcHJv Y19vYmplY3QtPmRldl9vYmopOwotCWlmICghc3RhdHVzKSB7Ci0JCXBfcHJvY19vYmplY3QtPnBy b2Nfc3RhdGUgPSBQUk9DX1JVTk5JTkc7Ci0JCS8qIERlZXAgc2xlZXAgc3dpdGNlcyBvZmYgdGhl IHBlcmlwaGVyYWwgY2xvY2tzLgotCQkgKiB3ZSBqdXN0IHB1dCB0aGUgRFNQIENQVSBpbiBpZGxl IGluIHRoZSBpZGxlIGxvb3AuCi0JCSAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCBhIGNv bW1hbmQgdG8gRFNQICovCi0KLQkJaWYgKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKSB7Ci0JCQlw cm9jX25vdGlmeV9jbGllbnRzKHBfcHJvY19vYmplY3QsCi0JCQkJCSAgICBEU1BfUFJPQ0VTU09S U1RBVEVDSEFOR0UpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRmFpbGVkIHRvIENyZWF0ZSBOb2Rl IE1hbmFnZXIgYW5kIERJU1AgT2JqZWN0Ci0JCSAqIFN0b3AgdGhlIFByb2Nlc3NvciBmcm9tIHJ1 bm5pbmcuIFB1dCBpdCBpbiBTVE9QUEVEIFN0YXRlICovCi0JCSh2b2lkKSgqcF9wcm9jX29iamVj dC0+aW50Zl9meG5zLT4KLQkJICAgICAgIGJyZF9zdG9wKSAocF9wcm9jX29iamVjdC0+YnJpZGdl X2NvbnRleHQpOwotCQlwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID0gUFJPQ19TVE9QUEVEOwot CX0KLWZ1bmNfY29udDoKLQlpZiAoIXN0YXR1cykgewotCQlpZiAoISgoKnBfcHJvY19vYmplY3Qt PmludGZfZnhucy0+YnJkX3N0YXR1cykKLQkJCQkocF9wcm9jX29iamVjdC0+YnJpZGdlX2NvbnRl eHQsICZicmRfc3RhdGUpKSkgewotCQkJcHJfaW5mbygiJXM6IGRzcCBpbiBydW5uaW5nIHN0YXRl XG4iLCBfX2Z1bmNfXyk7Ci0JCX0KLQl9IGVsc2UgewotCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8g c3RhcnQgdGhlIGRzcFxuIiwgX19mdW5jX18pOwotCQlwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7 Ci0JfQotCi1mdW5jX2VuZDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IHByb2Nfc3RvcCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFN0b3AgYSBwcm9jZXNz b3IgcnVubmluZy4KLSAqLwotaW50IHByb2Nfc3RvcCh2b2lkICpocHJvY2Vzc29yKQotewotCWlu dCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1 Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOwotCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsK LQlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKLQl2b2lkICpobm9kZTsKLQl1MzIgbm9kZV90 YWJfc2l6ZSA9IDE7Ci0JdTMyIG51bV9ub2RlcyA9IDA7Ci0JdTMyIG5vZGVzX2FsbG9jYXRlZCA9 IDA7Ci0KLQlpZiAoIXBfcHJvY19vYmplY3QpIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQkJZ290 byBmdW5jX2VuZDsKLQl9Ci0JLyogY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBydW5uaW5nIG5vZGVz ICovCi0Jc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIocF9wcm9jX29iamVjdC0+ZGV2X29i aiwgJmhub2RlX21ncik7Ci0JaWYgKCFzdGF0dXMgJiYgaG5vZGVfbWdyKSB7Ci0JCXN0YXR1cyA9 IG5vZGVfZW51bV9ub2Rlcyhobm9kZV9tZ3IsICZobm9kZSwgbm9kZV90YWJfc2l6ZSwKLQkJCQkJ ICZudW1fbm9kZXMsICZub2Rlc19hbGxvY2F0ZWQpOwotCQlpZiAoKHN0YXR1cyA9PSAtRUlOVkFM KSB8fCAobm9kZXNfYWxsb2NhdGVkID4gMCkpIHsKLQkJCXByX2VycigiJXM6IENhbid0IHN0b3Ag ZGV2aWNlLCBhY3RpdmUgbm9kZXMgPSAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgbm9kZXNfYWxsb2Nh dGVkKTsKLQkJCXJldHVybiAtRUJBRFI7Ci0JCX0KLQl9Ci0JLyogQ2FsbCB0aGUgYnJpZGdlX2Jy ZF9zdG9wICovCi0JLyogSXQgaXMgT0sgdG8gc3RvcCBhIGRldmljZSB0aGF0IGRvZXMgbid0IGhh dmUgbm9kZXMgT1Igbm90IHN0YXJ0ZWQgKi8KLQlzdGF0dXMgPQotCSAgICAoKnBfcHJvY19vYmpl Y3QtPmludGZfZnhucy0+Ci0JICAgICBicmRfc3RvcCkgKHBfcHJvY19vYmplY3QtPmJyaWRnZV9j b250ZXh0KTsKLQlpZiAoIXN0YXR1cykgewotCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBwcm9jZXNz b3IgaW4gc3RhbmRieSBtb2RlXG4iLCBfX2Z1bmNfXyk7Ci0JCXBfcHJvY19vYmplY3QtPnByb2Nf c3RhdGUgPSBQUk9DX1NUT1BQRUQ7Ci0JCS8qIERlc3Ryb3kgdGhlIE5vZGUgTWFuYWdlciwgbXNn X2N0cmwgTWFuYWdlciAqLwotCQlpZiAoIShkZXZfZGVzdHJveTIocF9wcm9jX29iamVjdC0+ZGV2 X29iaikpKSB7Ci0JCQkvKiBEZXN0cm95IHRoZSBtc2dfY3RybCBieSBjYWxsaW5nIG1zZ19kZWxl dGUgKi8KLQkJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCAmaG1zZ19t Z3IpOwotCQkJaWYgKGhtc2dfbWdyKSB7Ci0JCQkJbXNnX2RlbGV0ZShobXNnX21ncik7Ci0JCQkJ ZGV2X3NldF9tc2dfbWdyKHBfcHJvY19vYmplY3QtPmRldl9vYmosIE5VTEwpOwotCQkJfQotCQl9 Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHN0b3AgdGhlIHByb2Nlc3Nvclxu IiwgX19mdW5jX18pOwotCX0KLWZ1bmNfZW5kOgotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoK LSAqICA9PT09PT09PSBwcm9jX3VuX21hcCA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IFJlbW92ZXMgYSBNUFUgYnVmZmVyIG1hcHBpbmcgZnJvbSB0aGUgRFNQIGFkZHJlc3Mgc3BhY2Uu Ci0gKi8KLWludCBwcm9jX3VuX21hcCh2b2lkICpocHJvY2Vzc29yLCB2b2lkICptYXBfYWRkciwK LQkJICAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1 cyA9IDA7Ci0Jc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9j X29iamVjdCAqKWhwcm9jZXNzb3I7Ci0Jc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7Ci0JdTMy IHZhX2FsaWduOwotCXUzMiBzaXplX2FsaWduOwotCi0JdmFfYWxpZ24gPSBQR19BTElHTl9MT1co KHUzMikgbWFwX2FkZHIsIFBHX1NJWkU0Syk7Ci0JaWYgKCFwX3Byb2Nfb2JqZWN0KSB7Ci0JCXN0 YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0Jc3RhdHVzID0gZG1tX2dl dF9oYW5kbGUoaHByb2Nlc3NvciwgJmRtbV9tZ3IpOwotCWlmICghZG1tX21ncikgewotCQlzdGF0 dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCS8qIENyaXRpY2FsIHNlY3Rp b24gKi8KLQltdXRleF9sb2NrKCZwcm9jX2xvY2spOwotCS8qCi0JICogVXBkYXRlIERNTSBzdHJ1 Y3R1cmVzLiBHZXQgdGhlIHNpemUgdG8gdW5tYXAuCi0JICogVGhpcyBmdW5jdGlvbiByZXR1cm5z IGVycm9yIGlmIHRoZSBWQSBpcyBub3QgbWFwcGVkCi0JICovCi0Jc3RhdHVzID0gZG1tX3VuX21h cF9tZW1vcnkoZG1tX21nciwgKHUzMikgdmFfYWxpZ24sICZzaXplX2FsaWduKTsKLQkvKiBSZW1v dmUgbWFwcGluZyBmcm9tIHRoZSBwYWdlIHRhYmxlcy4gKi8KLQlpZiAoIXN0YXR1cykgewotCQlz dGF0dXMgPSAoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+YnJkX21lbV91bl9tYXApCi0JCSAg ICAocF9wcm9jX29iamVjdC0+YnJpZGdlX2NvbnRleHQsIHZhX2FsaWduLCBzaXplX2FsaWduKTsK LQl9Ci0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIHVubWFwX2ZhaWxlZDsKLQotCS8qCi0JICogQSBz dWNjZXNzZnVsIHVubWFwIHNob3VsZCBiZSBmb2xsb3dlZCBieSByZW1vdmFsIG9mIG1hcF9vYmoK LQkgKiBmcm9tIGRtbV9tYXBfbGlzdCwgc28gdGhhdCBtYXBwZWQgbWVtb3J5IHJlc291cmNlIHRy YWNraW5nCi0JICogcmVtYWlucyB1cHRvZGF0ZQotCSAqLwotCXJlbW92ZV9tYXBwaW5nX2luZm9y bWF0aW9uKHByX2N0eHQsICh1MzIpIG1hcF9hZGRyLCBzaXplX2FsaWduKTsKLQotdW5tYXBfZmFp bGVkOgotCW11dGV4X3VubG9jaygmcHJvY19sb2NrKTsKLQotZnVuY19lbmQ6Ci0JZGV2X2RiZyhi cmlkZ2UsICIlczogaHByb2Nlc3NvcjogMHglcCBtYXBfYWRkcjogMHglcCBzdGF0dXM6IDB4JXhc biIsCi0JCV9fZnVuY19fLCBocHJvY2Vzc29yLCBtYXBfYWRkciwgc3RhdHVzKTsKLQlyZXR1cm4g c3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBGcmVlcyBhIHByZXZpb3VzbHkgcmVzZXJ2ZWQg cmVnaW9uIG9mIERTUCBhZGRyZXNzIHNwYWNlLgotICovCi1pbnQgcHJvY191bl9yZXNlcnZlX21l bW9yeSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwcnN2X2FkZHIsCi0JCQkJICBzdHJ1Y3QgcHJv Y2Vzc19jb250ZXh0ICpwcl9jdHh0KQotewotCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOwot CWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChz dHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOwotCXN0cnVjdCBkbW1fcnN2X29iamVjdCAq cnN2X29iajsKLQotCWlmICghcF9wcm9jX29iamVjdCkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwot CQlnb3RvIGZ1bmNfZW5kOwotCX0KLQotCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19v YmplY3QsICZkbW1fbWdyKTsKLQlpZiAoIWRtbV9tZ3IpIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsK LQkJZ290byBmdW5jX2VuZDsKLQl9Ci0KLQlzdGF0dXMgPSBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnko ZG1tX21nciwgKHUzMikgcHJzdl9hZGRyKTsKLQlpZiAoc3RhdHVzICE9IDApCi0JCWdvdG8gZnVu Y19lbmQ7Ci0KLQkvKgotCSAqIEEgc3VjY2Vzc2Z1bCB1bnJlc2VydmUgc2hvdWxkIGJlIGZvbGxv d2VkIGJ5IHJlbW92YWwgb2YgcnN2X29iagotCSAqIGZyb20gZG1tX3Jzdl9saXN0LCBzbyB0aGF0 IHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZSB0cmFja2luZwotCSAqIHJlbWFpbnMgdXB0b2RhdGUK LQkgKi8KLQlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7Ci0JbGlzdF9mb3JfZWFj aF9lbnRyeShyc3Zfb2JqLCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0LCBsaW5rKSB7Ci0JCWlmIChy c3Zfb2JqLT5kc3BfcmVzZXJ2ZWRfYWRkciA9PSAodTMyKSBwcnN2X2FkZHIpIHsKLQkJCWxpc3Rf ZGVsKCZyc3Zfb2JqLT5saW5rKTsKLQkJCWtmcmVlKHJzdl9vYmopOwotCQkJYnJlYWs7Ci0JCX0K LQl9Ci0Jc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7Ci0KLWZ1bmNfZW5kOgot CWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNzb3I6IDB4JXAgcHJzdl9hZGRyOiAweCVwIHN0 YXR1czogMHgleFxuIiwKLQkJX19mdW5jX18sIGhwcm9jZXNzb3IsIHByc3ZfYWRkciwgc3RhdHVz KTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09ID0gcHJvY19tb25pdG9y ID09PT09PT09ID09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUGxhY2UgdGhlIFByb2Nlc3NvciBp biBNb25pdG9yIFN0YXRlLiBUaGlzIGlzIGFuIGludGVybmFsCi0gKiAgICAgIGZ1bmN0aW9uIGFu ZCBhIHJlcXVpcmVtZW50IGJlZm9yZSBQcm9jZXNzb3IgaXMgbG9hZGVkLgotICogICAgICBUaGlz IGRvZXMgYSBicmlkZ2VfYnJkX3N0b3AsIGRldl9kZXN0cm95MiBhbmQgYnJpZGdlX2JyZF9tb25p dG9yLgotICogICAgICBJbiBkZXZfZGVzdHJveTIgd2UgZGVsZXRlIHRoZSBub2RlIG1hbmFnZXIu Ci0gKiAgUGFyYW1ldGVyczoKLSAqICAgICAgcF9wcm9jX29iamVjdDogICAgUG9pbnRlciB0byBQ cm9jZXNzb3IgT2JqZWN0Ci0gKiAgUmV0dXJuczoKLSAqICAgICAgMDoJUHJvY2Vzc29yIHBsYWNl ZCBpbiBtb25pdG9yIG1vZGUuCi0gKiAgICAgICEwOiAgICAgICBGYWlsZWQgdG8gcGxhY2UgcHJv Y2Vzc29yIGluIG1vbml0b3IgbW9kZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgVmFsaWQgUHJv Y2Vzc29yIEhhbmRsZQotICogIEVuc3VyZXM6Ci0gKiAgICAgIFN1Y2Nlc3M6CVByb2NPYmplY3Qg c3RhdGUgaXMgUFJPQ19JRExFCi0gKi8KLXN0YXRpYyBpbnQgcHJvY19tb25pdG9yKHN0cnVjdCBw cm9jX29iamVjdCAqcHJvY19vYmopCi17Ci0JaW50IHN0YXR1cyA9IC1FUEVSTTsKLQlzdHJ1Y3Qg bXNnX21nciAqaG1zZ19tZ3I7Ci0KLQkvKiBUaGlzIGlzIG5lZWRlZCBvbmx5IHdoZW4gRGV2aWNl IGlzIGxvYWRlZCB3aGVuIGl0IGlzCi0JICogYWxyZWFkeSAnQUNUSVZFJyAqLwotCS8qIERlc3Ry b3kgdGhlIE5vZGUgTWFuYWdlciwgbXNnX2N0cmwgTWFuYWdlciAqLwotCWlmICghZGV2X2Rlc3Ry b3kyKHByb2Nfb2JqLT5kZXZfb2JqKSkgewotCQkvKiBEZXN0cm95IHRoZSBtc2dfY3RybCBieSBj YWxsaW5nIG1zZ19kZWxldGUgKi8KLQkJZGV2X2dldF9tc2dfbWdyKHByb2Nfb2JqLT5kZXZfb2Jq LCAmaG1zZ19tZ3IpOwotCQlpZiAoaG1zZ19tZ3IpIHsKLQkJCW1zZ19kZWxldGUoaG1zZ19tZ3Ip OwotCQkJZGV2X3NldF9tc2dfbWdyKHByb2Nfb2JqLT5kZXZfb2JqLCBOVUxMKTsKLQkJfQotCX0K LQkvKiBQbGFjZSB0aGUgQm9hcmQgaW4gdGhlIE1vbml0b3IgU3RhdGUgKi8KLQlpZiAoISgoKnBy b2Nfb2JqLT5pbnRmX2Z4bnMtPmJyZF9tb25pdG9yKQotCQkJICAocHJvY19vYmotPmJyaWRnZV9j b250ZXh0KSkpIHsKLQkJc3RhdHVzID0gMDsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogID09PT09PT09IGdldF9lbnZwX2NvdW50ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAq ICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGVudnAgYXJyYXksIGlu Y2x1ZGluZyB0aGUKLSAqICAgICAgdGVybWluYXRpbmcgTlVMTCBlbGVtZW50LgotICovCi1zdGF0 aWMgczMyIGdldF9lbnZwX2NvdW50KGNoYXIgKiplbnZwKQotewotCXMzMiByZXQgPSAwOwotCi0J aWYgKGVudnApIHsKLQkJd2hpbGUgKCplbnZwKyspCi0JCQlyZXQrKzsKLQotCQlyZXQgKz0gMTsJ LyogSW5jbHVkZSB0aGUgdGVybWluYXRpbmcgTlVMTCBpbiB0aGUgY291bnQuICovCi0JfQotCi0J cmV0dXJuIHJldDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBwcmVwZW5kX2VudnAgPT09PT09PT0K LSAqICBQdXJwb3NlOgotICogICAgICBQcmVwZW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlPXZh bHVlIHBhaXIgdG8gdGhlIG5ldyBlbnZwIGFycmF5LCBhbmQKLSAqICAgICAgY29weSBpbiB0aGUg ZXhpc3RpbmcgdmFyPXZhbHVlIHBhaXJzIGluIHRoZSBvbGQgZW52cCBhcnJheS4KLSAqLwotc3Rh dGljIGNoYXIgKipwcmVwZW5kX2VudnAoY2hhciAqKm5ld19lbnZwLCBjaGFyICoqZW52cCwgczMy IGVudnBfZWxlbXMsCi0JCQkgICBzMzIgY25ld19lbnZwLCBjaGFyICpzel92YXIpCi17Ci0JY2hh ciAqKnBwX2VudnAgPSBuZXdfZW52cDsKLQotCS8qIFByZXBlbmQgbmV3IGVudmlyb24gdmFyPXZh bHVlIHN0cmluZyAqLwotCSpuZXdfZW52cCsrID0gc3pfdmFyOwotCi0JLyogQ29weSB1c2VyJ3Mg ZW52aXJvbm1lbnQgaW50byBvdXIgb3duLiAqLwotCXdoaWxlIChlbnZwX2VsZW1zLS0pCi0JCSpu ZXdfZW52cCsrID0gKmVudnArKzsKLQotCS8qIEVuc3VyZSBOVUxMIHRlcm1pbmF0ZXMgdGhlIG5l dyBlbnZpcm9ubWVudCBzdHJpbmdzIGFycmF5LiAqLwotCWlmIChlbnZwX2VsZW1zID09IDApCi0J CSpuZXdfZW52cCA9IE5VTEw7Ci0KLQlyZXR1cm4gcHBfZW52cDsKLX0KLQotLyoKLSAqICA9PT09 PT09PSBwcm9jX25vdGlmeV9jbGllbnRzID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAg Tm90aWZ5IHRoZSBwcm9jZXNzb3IgdGhlIGV2ZW50cy4KLSAqLwotaW50IHByb2Nfbm90aWZ5X2Ns aWVudHModm9pZCAqcHJvYywgdTMyIGV2ZW50cykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1 Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopcHJv YzsKLQotCWlmICghcF9wcm9jX29iamVjdCkgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3Rv IGZ1bmNfZW5kOwotCX0KLQotCW50Znlfbm90aWZ5KHBfcHJvY19vYmplY3QtPm50Znlfb2JqLCBl dmVudHMpOwotZnVuY19lbmQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09 PSBwcm9jX25vdGlmeV9hbGxfY2xpZW50cyA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAg IE5vdGlmeSB0aGUgcHJvY2Vzc29yIHRoZSBldmVudHMuIFRoaXMgaW5jbHVkZXMgbm90aWZ5aW5n IGFsbCBjbGllbnRzCi0gKiAgICAgIGF0dGFjaGVkIHRvIGEgcGFydGljdWxhdCBEU1AuCi0gKi8K LWludCBwcm9jX25vdGlmeV9hbGxfY2xpZW50cyh2b2lkICpwcm9jLCB1MzIgZXZlbnRzKQotewot CWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChz dHJ1Y3QgcHJvY19vYmplY3QgKilwcm9jOwotCi0JaWYgKCFwX3Byb2Nfb2JqZWN0KSB7Ci0JCXN0 YXR1cyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnVuY19lbmQ7Ci0JfQotCi0JZGV2X25vdGlmeV9jbGll bnRzKHBfcHJvY19vYmplY3QtPmRldl9vYmosIGV2ZW50cyk7Ci0KLWZ1bmNfZW5kOgotCXJldHVy biBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gcHJvY19nZXRfcHJvY2Vzc29yX2lkID09 PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmVzIHRoZSBwcm9jZXNzb3IgSUQu Ci0gKi8KLWludCBwcm9jX2dldF9wcm9jZXNzb3JfaWQodm9pZCAqcHJvYywgdTMyICpwcm9jX2lk KQotewotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVj dCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilwcm9jOwotCi0JaWYgKHBfcHJvY19vYmplY3QpCi0J CSpwcm9jX2lkID0gcF9wcm9jX29iamVjdC0+cHJvY2Vzc29yX2lkOwotCWVsc2UKLQkJc3RhdHVz ID0gLUVGQVVMVDsKLQotCXJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9wd3IuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRn ZS9ybWdyL3B3ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzc0OGRmLi4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jCisrKyAvZGV2 L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBwd3IuYwotICoKLSAqIERTUC1CSU9TIEJy aWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KLSAq Ci0gKiBQV1IgQVBJIGZvciBjb250cm9sbGluZyBEU1AgcG93ZXIgc3RhdGVzLgotICoKLSAqIENv cHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhp cyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFO RCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD SEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0K LS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0jaW5j bHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+Ci0KLS8qICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KLSNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+ Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5h Z2VyICovCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gTGluayBEcml2ZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv ZHNwaW9jdGwuaD4KLQotLyoKLSAqICA9PT09PT09PSBwd3Jfc2xlZXBfZHNwID09PT09PT09Ci0g KiAgICBTZW5kIGNvbW1hbmQgdG8gRFNQIHRvIGVudGVyIHNsZWVwIHN0YXRlLgotICovCi1pbnQg cHdyX3NsZWVwX2RzcChjb25zdCB1MzIgc2xlZXBfY29kZSwgY29uc3QgdTMyIHRpbWVvdXQpCi17 Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGJyaWRn ZV9kZXZfY29udGV4dCAqZHdfY29udGV4dDsKLQlpbnQgc3RhdHVzID0gLUVQRVJNOwotCXN0cnVj dCBkZXZfb2JqZWN0ICpoZGV2X29iaiA9IE5VTEw7Ci0JdTMyIGlvY3RsY29kZSA9IDA7Ci0JdTMy IGFyZyA9IHRpbWVvdXQ7Ci0KLQlmb3IgKGhkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICop ZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7Ci0JICAgICBoZGV2X29iaiAhPSBOVUxMOwotCSAg ICAgaGRldl9vYmogPQotCSAgICAgKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9uZXh0X2Rl dl9vYmplY3QoKHUzMikgaGRldl9vYmopKSB7Ci0JCWlmIChkZXZfZ2V0X2JyaWRnZV9jb250ZXh0 KGhkZXZfb2JqLAotCQkJCQkJKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKiopCi0JCQkJCQkg ICAmZHdfY29udGV4dCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChkZXZfZ2V0X2ludGZf ZnhucyhoZGV2X29iaiwKLQkJCQkJCShzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKiopCi0J CQkJCQkmaW50Zl9meG5zKSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHNsZWVwX2NvZGUg PT0gUFdSX0RFRVBTTEVFUCkKLQkJCWlvY3RsY29kZSA9IEJSRElPQ1RMX0RFRVBTTEVFUDsKLQkJ ZWxzZSBpZiAoc2xlZXBfY29kZSA9PSBQV1JfRU1FUkdFTkNZREVFUFNMRUVQKQotCQkJaW9jdGxj b2RlID0gQlJESU9DVExfRU1FUkdFTkNZU0xFRVA7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IC1FSU5W QUw7Ci0KLQkJaWYgKHN0YXR1cyAhPSAtRUlOVkFMKSB7Ci0JCQlzdGF0dXMgPSAoKmludGZfZnhu cy0+ZGV2X2NudHJsKSAoZHdfY29udGV4dCwKLQkJCQkJCQkgICAgICBpb2N0bGNvZGUsCi0JCQkJ CQkJICAgICAgKHZvaWQgKikmYXJnKTsKLQkJfQotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0v KgotICogID09PT09PT09IHB3cl93YWtlX2RzcCA9PT09PT09PQotICogICAgU2VuZCBjb21tYW5k IHRvIERTUCB0byB3YWtlIGl0IGZyb20gc2xlZXAuCi0gKi8KLWludCBwd3Jfd2FrZV9kc3AoY29u c3QgdTMyIHRpbWVvdXQpCi17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4 bnM7Ci0Jc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZHdfY29udGV4dDsKLQlpbnQgc3RhdHVz ID0gLUVQRVJNOwotCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiA9IE5VTEw7Ci0JdTMyIGFy ZyA9IHRpbWVvdXQ7Ci0KLQlmb3IgKGhkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2 X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7Ci0JICAgICBoZGV2X29iaiAhPSBOVUxMOwotCSAgICAg aGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X25leHRfZGV2X29iamVjdAot CSAgICAgKCh1MzIpIGhkZXZfb2JqKSkgewotCQlpZiAoIShkZXZfZ2V0X2JyaWRnZV9jb250ZXh0 KGhkZXZfb2JqLAotCQkJCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKLQkJCQkJ CSAgICAgICAqKikmZHdfY29udGV4dCkpKSB7Ci0JCQlpZiAoIShkZXZfZ2V0X2ludGZfZnhucyho ZGV2X29iaiwKLQkJCSAgICAgIChzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKiopJmludGZf ZnhucykpKSB7Ci0JCQkJc3RhdHVzID0KLQkJCQkgICAgKCppbnRmX2Z4bnMtPmRldl9jbnRybCkg KGR3X2NvbnRleHQsCi0JCQkJCQkJQlJESU9DVExfV0FLRVVQLAotCQkJCQkJCSh2b2lkICopJmFy Zyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09 PSBwd3JfcG1fcHJlX3NjYWxlPT09PT09PT0KLSAqICAgIFNlbmRzIHByZS1ub3RpZmljYXRpb24g bWVzc2FnZSB0byBEU1AuCi0gKi8KLWludCBwd3JfcG1fcHJlX3NjYWxlKHUxNiB2b2x0YWdlX2Rv bWFpbiwgdTMyIGxldmVsKQotewotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9m eG5zOwotCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7Ci0JaW50IHN0YXR1 cyA9IC1FUEVSTTsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOwotCXUzMiBh cmdbMl07Ci0KLQlhcmdbMF0gPSB2b2x0YWdlX2RvbWFpbjsKLQlhcmdbMV0gPSBsZXZlbDsKLQot CWZvciAoaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9v YmplY3QoKTsKLQkgICAgIGhkZXZfb2JqICE9IE5VTEw7Ci0JICAgICBoZGV2X29iaiA9IChzdHJ1 Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0Ci0JICAgICAoKHUzMikgaGRl dl9vYmopKSB7Ci0JCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCi0JCQkJ CQkgICAgICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCQkJICAgICAgICoqKSZkd19j b250ZXh0KSkpIHsKLQkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAotCQkJICAg ICAgKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKLQkJCQlz dGF0dXMgPQotCQkJCSAgICAoKmludGZfZnhucy0+ZGV2X2NudHJsKSAoZHdfY29udGV4dCwKLQkJ CQkJCUJSRElPQ1RMX1BSRVNDQUxFX05PVElGWSwKLQkJCQkJCSh2b2lkICopJmFyZyk7Ci0JCQl9 Ci0JCX0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBwd3JfcG1f cG9zdF9zY2FsZT09PT09PT09Ci0gKiAgICBTZW5kcyBwb3N0LW5vdGlmaWNhdGlvbiBtZXNzYWdl IHRvIERTUC4KLSAqLwotaW50IHB3cl9wbV9wb3N0X3NjYWxlKHUxNiB2b2x0YWdlX2RvbWFpbiwg dTMyIGxldmVsKQotewotCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwot CXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7Ci0JaW50IHN0YXR1cyA9IC1F UEVSTTsKLQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOwotCXUzMiBhcmdbMl07 Ci0KLQlhcmdbMF0gPSB2b2x0YWdlX2RvbWFpbjsKLQlhcmdbMV0gPSBsZXZlbDsKLQotCWZvciAo aGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3Qo KTsKLQkgICAgIGhkZXZfb2JqICE9IE5VTEw7Ci0JICAgICBoZGV2X29iaiA9IChzdHJ1Y3QgZGV2 X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0Ci0JICAgICAoKHUzMikgaGRldl9vYmop KSB7Ci0JCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCi0JCQkJCQkgICAg ICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAotCQkJCQkJICAgICAgICoqKSZkd19jb250ZXh0 KSkpIHsKLQkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAotCQkJICAgICAgKHN0 cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKLQkJCQlzdGF0dXMg PQotCQkJCSAgICAoKmludGZfZnhucy0+ZGV2X2NudHJsKSAoZHdfY29udGV4dCwKLQkJCQkJCUJS RElPQ1RMX1BPU1RTQ0FMRV9OT1RJRlksCi0JCQkJCQkodm9pZCAqKSZhcmcpOwotCQkJfQotCQl9 Ci0JfQotCXJldHVybiBzdGF0dXM7Ci0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90 aWRzcGJyaWRnZS9ybWdyL3JtbS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Iv cm1tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMTg3YmQuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMKKysrIC9kZXYvbnVsbApA QCAtMSw0NTYgKzAsMCBAQAotLyoKLSAqIHJtbS5jCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRy aXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIENv cHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKgotICogVGhp cyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFO RCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD SEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICovCi0K LS8qCi0gKiAgVGhpcyBtZW1vcnkgbWFuYWdlciBwcm92aWRlcyBnZW5lcmFsIGhlYXAgbWFuYWdl bWVudCBhbmQgYXJiaXRyYXJ5Ci0gKiAgYWxpZ25tZW50IGZvciBhbnkgbnVtYmVyIG9mIG1lbW9y eSBzZWdtZW50cy4KLSAqCi0gKiAgTm90ZXM6Ci0gKgotICogIE1lbW9yeSBibG9ja3MgYXJlIGFs bG9jYXRlZCBmcm9tIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGZyZWUgbWVtb3J5Ci0gKiAgYmxvY2sg bGFyZ2UgZW5vdWdoIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuICBBbGlnbm1lbnQgcmVxdWlyZW1l bnRzCi0gKiAgYXJlIHNhdGlzZmllZCBieSAic2xpZGluZyIgdGhlIGJsb2NrIGZvcndhcmQgdW50 aWwgaXRzIGJhc2Ugc2F0aXNmaWVzCi0gKiAgdGhlIGFsaWdubWVudCBzcGVjaWZpY2F0aW9uOyBp ZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSB0aGVuIHRoZSBuZXh0Ci0gKiAgZnJlZSBibG9jayBsYXJn ZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVxdWVzdCBpcyB0cmllZC4KLSAqCi0gKiAgU2luY2UgYWxp Z25tZW50IGNhbiBjYXVzZSB0aGUgY3JlYXRpb24gb2YgYSBuZXcgZnJlZSBibG9jayAtIHRoZQot ICogIHVudXNlZCBtZW1vcnkgZm9ybWVkIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5h bCBmcmVlIGJsb2NrCi0gKiAgYW5kIHRoZSBzdGFydCBvZiB0aGUgYWxsb2NhdGVkIGJsb2NrIC0g dGhlIG1lbW9yeSBtYW5hZ2VyIG11c3QgZnJlZQotICogIHRoaXMgbWVtb3J5IHRvIHByZXZlbnQg YSBtZW1vcnkgbGVhay4KLSAqCi0gKiAgT3ZlcmxheSBtZW1vcnkgaXMgbWFuYWdlZCBieSByZXNl cnZpbmcgdGhyb3VnaCBybW1fYWxsb2MsIGFuZCBmcmVlaW5nCi0gKiAgaXQgdGhyb3VnaCBybW1f ZnJlZS4gVGhlIG1lbW9yeSBtYW5hZ2VyIHByZXZlbnRzIERTUCBjb2RlL2RhdGEgdGhhdCBpcwot ICogIG92ZXJsYXllZCBmcm9tIGJlaW5nIG92ZXJ3cml0dGVuIGFzIGxvbmcgYXMgdGhlIG1lbW9y eSBpdCBydW5zIGF0IGhhcwotICogIGJlZW4gYWxsb2NhdGVkLCBhbmQgbm90IHlldCBmcmVlZC4K LSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9k YmRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMg Ki8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+Ci0KLS8qCi0gKiAgPT09PT09PT0gcm1tX2hl YWRlciA9PT09PT09PQotICogIFRoaXMgaGVhZGVyIGlzIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0 IG9mIGZyZWUgbWVtb3J5IGJsb2Nrcy4KLSAqLwotc3RydWN0IHJtbV9oZWFkZXIgewotCXN0cnVj dCBybW1faGVhZGVyICpuZXh0OwkvKiBmb3JtIGEgZnJlZSBtZW1vcnkgbGluayBsaXN0ICovCi0J dTMyIHNpemU7CQkvKiBzaXplIG9mIHRoZSBmcmVlIG1lbW9yeSAqLwotCXUzMiBhZGRyOwkJLyog RFNQIGFkZHJlc3Mgb2YgbWVtb3J5IGJsb2NrICovCi19OwotCi0vKgotICogID09PT09PT09IHJt bV9vdmx5X3NlY3QgPT09PT09PT0KLSAqICBLZWVwcyB0cmFjayBvZiBtZW1vcnkgb2NjdXBpZWQg Ynkgb3ZlcmxheSBzZWN0aW9uLgotICovCi1zdHJ1Y3Qgcm1tX292bHlfc2VjdCB7Ci0Jc3RydWN0 IGxpc3RfaGVhZCBsaXN0X2VsZW07Ci0JdTMyIGFkZHI7CQkvKiBTdGFydCBvZiBtZW1vcnkgc2Vj dGlvbiAqLwotCXUzMiBzaXplOwkJLyogTGVuZ3RoICh0YXJnZXQgTUFVcykgb2Ygc2VjdGlvbiAq LwotCXMzMiBwYWdlOwkJLyogTWVtb3J5IHBhZ2UgKi8KLX07Ci0KLS8qCi0gKiAgPT09PT09PT0g cm1tX3RhcmdldF9vYmogPT09PT09PT0KLSAqLwotc3RydWN0IHJtbV90YXJnZXRfb2JqIHsKLQlz dHJ1Y3Qgcm1tX3NlZ21lbnQgKnNlZ190YWI7Ci0Jc3RydWN0IHJtbV9oZWFkZXIgKipmcmVlX2xp c3Q7Ci0JdTMyIG51bV9zZWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgb3ZseV9saXN0OwkvKiBMaXN0 IG9mIG92ZXJsYXkgbWVtb3J5IGluIHVzZSAqLwotfTsKLQotc3RhdGljIGJvb2wgYWxsb2NfYmxv Y2soc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIHNpemUsCi0J CQl1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MpOwotc3RhdGljIGJvb2wgZnJlZV9ibG9jayhz dHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgYWRkciwKLQkJICAg ICAgIHUzMiBzaXplKTsKLQotLyoKLSAqICA9PT09PT09PSBybW1fYWxsb2MgPT09PT09PT0KLSAq LwotaW50IHJtbV9hbGxvYyhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lk LCB1MzIgc2l6ZSwKLQkJICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsIGJvb2wgcmVz ZXJ2ZSkKLXsKLQlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqc2VjdCwgKnByZXZfc2VjdCA9IE5VTEw7 Ci0Jc3RydWN0IHJtbV9vdmx5X3NlY3QgKm5ld19zZWN0OwotCXUzMiBhZGRyOwotCWludCBzdGF0 dXMgPSAwOwotCi0JaWYgKCFyZXNlcnZlKSB7Ci0JCWlmICghYWxsb2NfYmxvY2sodGFyZ2V0LCBz ZWdpZCwgc2l6ZSwgYWxpZ24sIGRzcF9hZGRyZXNzKSkgewotCQkJc3RhdHVzID0gLUVOT01FTTsK LQkJfSBlbHNlIHsKLQkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9j a3MgaW4gdGhpcwotCQkJICogc2VnbWVudCAqLwotCQkJdGFyZ2V0LT5zZWdfdGFiW3NlZ2lkXS5u dW1iZXIrKzsKLQkJfQotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQkvKiBBbiBvdmVybGF5IHNlY3Rp b24gLSBTZWUgaWYgYmxvY2sgaXMgYWxyZWFkeSBpbiB1c2UuIElmIG5vdCwKLQkgKiBpbnNlcnQg aW50byB0aGUgbGlzdCBpbiBhc2NlbmRpbmcgYWRkcmVzcyBzaXplLiAqLwotCWFkZHIgPSAqZHNw X2FkZHJlc3M7Ci0JLyogIEZpbmQgcGxhY2UgdG8gaW5zZXJ0IG5ldyBsaXN0IGVsZW1lbnQuIExp c3QgaXMgc29ydGVkIGZyb20KLQkgKiAgc21hbGxlc3QgdG8gbGFyZ2VzdCBhZGRyZXNzLiAqLwot CWxpc3RfZm9yX2VhY2hfZW50cnkoc2VjdCwgJnRhcmdldC0+b3ZseV9saXN0LCBsaXN0X2VsZW0p IHsKLQkJaWYgKGFkZHIgPD0gc2VjdC0+YWRkcikgewotCQkJLyogQ2hlY2sgZm9yIG92ZXJsYXAg d2l0aCBzZWN0ICovCi0JCQlpZiAoKGFkZHIgKyBzaXplID4gc2VjdC0+YWRkcikgfHwgKHByZXZf c2VjdCAmJgotCQkJCQkJCSAgIChwcmV2X3NlY3QtPmFkZHIgKwotCQkJCQkJCSAgICBwcmV2X3Nl Y3QtPnNpemUgPgotCQkJCQkJCSAgICBhZGRyKSkpIHsKLQkJCQlzdGF0dXMgPSAtRU5YSU87Ci0J CQl9Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2X3NlY3QgPSBzZWN0OwotCX0KLQlpZiAoIXN0YXR1 cykgewotCQkvKiBObyBvdmVybGFwIC0gYWxsb2NhdGUgbGlzdCBlbGVtZW50IGZvciBuZXcgc2Vj dGlvbi4gKi8KLQkJbmV3X3NlY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX292bHlfc2Vj dCksIEdGUF9LRVJORUwpOwotCQlpZiAobmV3X3NlY3QgPT0gTlVMTCkgewotCQkJc3RhdHVzID0g LUVOT01FTTsKLQkJfSBlbHNlIHsKLQkJCW5ld19zZWN0LT5hZGRyID0gYWRkcjsKLQkJCW5ld19z ZWN0LT5zaXplID0gc2l6ZTsKLQkJCW5ld19zZWN0LT5wYWdlID0gc2VnaWQ7Ci0JCQlpZiAobGlz dF9pc19sYXN0KCZzZWN0LT5saXN0X2VsZW0sICZ0YXJnZXQtPm92bHlfbGlzdCkpCi0JCQkJLyog UHV0IG5ldyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KLQkJCQlsaXN0X2FkZF90 YWlsKCZuZXdfc2VjdC0+bGlzdF9lbGVtLAotCQkJCQkJJnRhcmdldC0+b3ZseV9saXN0KTsKLQkJ CWVsc2UKLQkJCQkvKiBQdXQgbmV3IHNlY3Rpb24ganVzdCBiZWZvcmUgc2VjdCAqLwotCQkJCWxp c3RfYWRkX3RhaWwoJm5ld19zZWN0LT5saXN0X2VsZW0sCi0JCQkJCQkmc2VjdC0+bGlzdF9lbGVt KTsKLQkJfQotCX0KLWZ1bmNfZW5kOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gcm1tX2NyZWF0ZSA9PT09PT09PQotICovCi1pbnQgcm1tX2NyZWF0ZShzdHJ1Y3Qgcm1t X3RhcmdldF9vYmogKip0YXJnZXRfb2JqLAotCQkgICAgICBzdHJ1Y3Qgcm1tX3NlZ21lbnQgc2Vn X3RhYltdLCB1MzIgbnVtX3NlZ3MpCi17Ci0Jc3RydWN0IHJtbV9oZWFkZXIgKmhwdHI7Ci0Jc3Ry dWN0IHJtbV9zZWdtZW50ICpzcHRyLCAqdG1wOwotCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFy Z2V0OwotCXMzMiBpOwotCWludCBzdGF0dXMgPSAwOwotCi0JLyogQWxsb2NhdGUgREJMIHRhcmdl dCBvYmplY3QgKi8KLQl0YXJnZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX3RhcmdldF9v YmopLCBHRlBfS0VSTkVMKTsKLQotCWlmICh0YXJnZXQgPT0gTlVMTCkKLQkJc3RhdHVzID0gLUVO T01FTTsKLQotCWlmIChzdGF0dXMpCi0JCWdvdG8gZnVuY19jb250OwotCi0JdGFyZ2V0LT5udW1f c2VncyA9IG51bV9zZWdzOwotCWlmICghKG51bV9zZWdzID4gMCkpCi0JCWdvdG8gZnVuY19jb250 OwotCi0JLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgZnJlZWxpc3QgZnJvbSBob3N0J3MgbWVt b3J5ICovCi0JdGFyZ2V0LT5mcmVlX2xpc3QgPSBremFsbG9jKG51bV9zZWdzICogc2l6ZW9mKHN0 cnVjdCBybW1faGVhZGVyICopLAotCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICh0YXJnZXQtPmZy ZWVfbGlzdCA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JfSBlbHNlIHsKLQkJLyog QWxsb2NhdGUgaGVhZGVycyBmb3IgZWFjaCBlbGVtZW50IG9uIHRoZSBmcmVlIGxpc3QgKi8KLQkJ Zm9yIChpID0gMDsgaSA8IChzMzIpIG51bV9zZWdzOyBpKyspIHsKLQkJCXRhcmdldC0+ZnJlZV9s aXN0W2ldID0KLQkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX2hlYWRlciksIEdGUF9LRVJO RUwpOwotCQkJaWYgKHRhcmdldC0+ZnJlZV9saXN0W2ldID09IE5VTEwpIHsKLQkJCQlzdGF0dXMg PSAtRU5PTUVNOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8qIEFsbG9jYXRlIG1lbW9yeSBm b3IgaW5pdGlhbCBzZWdtZW50IHRhYmxlICovCi0JCXRhcmdldC0+c2VnX3RhYiA9IGt6YWxsb2Mo bnVtX3NlZ3MgKiBzaXplb2Yoc3RydWN0IHJtbV9zZWdtZW50KSwKLQkJCQkJCQkJR0ZQX0tFUk5F TCk7Ci0JCWlmICh0YXJnZXQtPnNlZ190YWIgPT0gTlVMTCkgewotCQkJc3RhdHVzID0gLUVOT01F TTsKLQkJfSBlbHNlIHsKLQkJCS8qIEluaXRpYWxpemUgc2VnbWVudCB0YWJsZSBhbmQgZnJlZSBs aXN0ICovCi0JCQlzcHRyID0gdGFyZ2V0LT5zZWdfdGFiOwotCQkJZm9yIChpID0gMCwgdG1wID0g c2VnX3RhYjsgbnVtX3NlZ3MgPiAwOwotCQkJICAgICBudW1fc2Vncy0tLCBpKyspIHsKLQkJCQkq c3B0ciA9ICp0bXA7Ci0JCQkJaHB0ciA9IHRhcmdldC0+ZnJlZV9saXN0W2ldOwotCQkJCWhwdHIt PmFkZHIgPSB0bXAtPmJhc2U7Ci0JCQkJaHB0ci0+c2l6ZSA9IHRtcC0+bGVuZ3RoOwotCQkJCWhw dHItPm5leHQgPSBOVUxMOwotCQkJCXRtcCsrOwotCQkJCXNwdHIrKzsKLQkJCX0KLQkJfQotCX0K LWZ1bmNfY29udDoKLQkvKiBJbml0aWFsaXplIG92ZXJsYXkgbWVtb3J5IGxpc3QgKi8KLQlpZiAo IXN0YXR1cykKLQkJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+b3ZseV9saXN0KTsKLQotCWlmICgh c3RhdHVzKSB7Ci0JCSp0YXJnZXRfb2JqID0gdGFyZ2V0OwotCX0gZWxzZSB7Ci0JCSp0YXJnZXRf b2JqID0gTlVMTDsKLQkJaWYgKHRhcmdldCkKLQkJCXJtbV9kZWxldGUodGFyZ2V0KTsKLQotCX0K LQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0gcm1tX2RlbGV0ZSA9PT09 PT09PQotICovCi12b2lkIHJtbV9kZWxldGUoc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQp Ci17Ci0Jc3RydWN0IHJtbV9vdmx5X3NlY3QgKnNlY3QsICp0bXA7Ci0Jc3RydWN0IHJtbV9oZWFk ZXIgKmhwdHI7Ci0Jc3RydWN0IHJtbV9oZWFkZXIgKm5leHQ7Ci0JdTMyIGk7Ci0KLQlrZnJlZSh0 YXJnZXQtPnNlZ190YWIpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlY3QsIHRtcCwg JnRhcmdldC0+b3ZseV9saXN0LCBsaXN0X2VsZW0pIHsKLQkJbGlzdF9kZWwoJnNlY3QtPmxpc3Rf ZWxlbSk7Ci0JCWtmcmVlKHNlY3QpOwotCX0KLQotCWlmICh0YXJnZXQtPmZyZWVfbGlzdCAhPSBO VUxMKSB7Ci0JCS8qIEZyZWUgZWxlbWVudHMgb24gZnJlZWxpc3QgKi8KLQkJZm9yIChpID0gMDsg aSA8IHRhcmdldC0+bnVtX3NlZ3M7IGkrKykgewotCQkJaHB0ciA9IG5leHQgPSB0YXJnZXQtPmZy ZWVfbGlzdFtpXTsKLQkJCXdoaWxlIChuZXh0KSB7Ci0JCQkJaHB0ciA9IG5leHQ7Ci0JCQkJbmV4 dCA9IGhwdHItPm5leHQ7Ci0JCQkJa2ZyZWUoaHB0cik7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUodGFy Z2V0LT5mcmVlX2xpc3QpOwotCX0KLQotCWtmcmVlKHRhcmdldCk7Ci19Ci0KLS8qCi0gKiAgPT09 PT09PT0gcm1tX2ZyZWUgPT09PT09PT0KLSAqLwotYm9vbCBybW1fZnJlZShzdHJ1Y3Qgcm1tX3Rh cmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgZHNwX2FkZHIsIHUzMiBzaXplLAotCSAg ICAgIGJvb2wgcmVzZXJ2ZWQpCi17Ci0Jc3RydWN0IHJtbV9vdmx5X3NlY3QgKnNlY3QsICp0bXA7 Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQotCS8qCi0JICogIEZyZWUgb3IgdW5yZXNlcnZlIG1lbW9y eS4KLQkgKi8KLQlpZiAoIXJlc2VydmVkKSB7Ci0JCXJldCA9IGZyZWVfYmxvY2sodGFyZ2V0LCBz ZWdpZCwgZHNwX2FkZHIsIHNpemUpOwotCQlpZiAocmV0KQotCQkJdGFyZ2V0LT5zZWdfdGFiW3Nl Z2lkXS5udW1iZXItLTsKLQotCX0gZWxzZSB7Ci0JCS8qIFVucmVzZXJ2ZSBtZW1vcnkgKi8KLQkJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlY3QsIHRtcCwgJnRhcmdldC0+b3ZseV9saXN0LAot CQkJCWxpc3RfZWxlbSkgewotCQkJaWYgKGRzcF9hZGRyID09IHNlY3QtPmFkZHIpIHsKLQkJCQkv KiBSZW1vdmUgZnJvbSBsaXN0ICovCi0JCQkJbGlzdF9kZWwoJnNlY3QtPmxpc3RfZWxlbSk7Ci0J CQkJa2ZyZWUoc2VjdCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJu IHJldDsKLX0KLQotLyoKLSAqICA9PT09PT09PSBybW1fc3RhdCA9PT09PT09PQotICovCi1ib29s IHJtbV9zdGF0KHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCBlbnVtIGRzcF9tZW10eXBl IHNlZ2lkLAotCSAgICAgIHN0cnVjdCBkc3BfbWVtc3RhdCAqbWVtX3N0YXRfYnVmKQotewotCXN0 cnVjdCBybW1faGVhZGVyICpoZWFkOwotCWJvb2wgcmV0ID0gZmFsc2U7Ci0JdTMyIG1heF9mcmVl X3NpemUgPSAwOwotCXUzMiB0b3RhbF9mcmVlX3NpemUgPSAwOwotCXUzMiBmcmVlX2Jsb2NrcyA9 IDA7Ci0KLQlpZiAoKHUzMikgc2VnaWQgPCB0YXJnZXQtPm51bV9zZWdzKSB7Ci0JCWhlYWQgPSB0 YXJnZXQtPmZyZWVfbGlzdFtzZWdpZF07Ci0KLQkJLyogQ29sbGVjdCBkYXRhIGZyb20gZnJlZV9s aXN0ICovCi0JCXdoaWxlIChoZWFkICE9IE5VTEwpIHsKLQkJCW1heF9mcmVlX3NpemUgPSBtYXgo bWF4X2ZyZWVfc2l6ZSwgaGVhZC0+c2l6ZSk7Ci0JCQl0b3RhbF9mcmVlX3NpemUgKz0gaGVhZC0+ c2l6ZTsKLQkJCWZyZWVfYmxvY2tzKys7Ci0JCQloZWFkID0gaGVhZC0+bmV4dDsKLQkJfQotCi0J CS8qIHVsX3NpemUgKi8KLQkJbWVtX3N0YXRfYnVmLT5zaXplID0gdGFyZ2V0LT5zZWdfdGFiW3Nl Z2lkXS5sZW5ndGg7Ci0KLQkJLyogbnVtX2ZyZWVfYmxvY2tzICovCi0JCW1lbV9zdGF0X2J1Zi0+ bnVtX2ZyZWVfYmxvY2tzID0gZnJlZV9ibG9ja3M7Ci0KLQkJLyogdG90YWxfZnJlZV9zaXplICov Ci0JCW1lbV9zdGF0X2J1Zi0+dG90YWxfZnJlZV9zaXplID0gdG90YWxfZnJlZV9zaXplOwotCi0J CS8qIGxlbl9tYXhfZnJlZV9ibG9jayAqLwotCQltZW1fc3RhdF9idWYtPmxlbl9tYXhfZnJlZV9i bG9jayA9IG1heF9mcmVlX3NpemU7Ci0KLQkJLyogbnVtX2FsbG9jX2Jsb2NrcyAqLwotCQltZW1f c3RhdF9idWYtPm51bV9hbGxvY19ibG9ja3MgPQotCQkgICAgdGFyZ2V0LT5zZWdfdGFiW3NlZ2lk XS5udW1iZXI7Ci0KLQkJcmV0ID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgot ICogID09PT09PT09IGJhbGxvYyA9PT09PT09PQotICogIFRoaXMgYWxsb2NhdGlvbiBmdW5jdGlv biBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIGxvd2VzdCBhZGRyZXNzZXMKLSAqICBmaXJzdC4K LSAqLwotc3RhdGljIGJvb2wgYWxsb2NfYmxvY2soc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJn ZXQsIHUzMiBzZWdpZCwgdTMyIHNpemUsCi0JCQl1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3Mp Ci17Ci0Jc3RydWN0IHJtbV9oZWFkZXIgKmhlYWQ7Ci0Jc3RydWN0IHJtbV9oZWFkZXIgKnByZXZo ZWFkID0gTlVMTDsKLQlzdHJ1Y3Qgcm1tX2hlYWRlciAqbmV4dDsKLQl1MzIgdG1wYWxpZ247Ci0J dTMyIGFsaWduYnl0ZXM7Ci0JdTMyIGhzaXplOwotCXUzMiBhbGxvY3NpemU7Ci0JdTMyIGFkZHI7 Ci0KLQlhbGlnbmJ5dGVzID0gKGFsaWduID09IDApID8gMSA6IGFsaWduOwotCXByZXZoZWFkID0g TlVMTDsKLQloZWFkID0gdGFyZ2V0LT5mcmVlX2xpc3Rbc2VnaWRdOwotCi0JZG8gewotCQloc2l6 ZSA9IGhlYWQtPnNpemU7Ci0JCW5leHQgPSBoZWFkLT5uZXh0OwotCi0JCWFkZHIgPSBoZWFkLT5h ZGRyOwkvKiBhbGxvYyBmcm9tIHRoZSBib3R0b20gKi8KLQotCQkvKiBhbGlnbiBhbGxvY2F0aW9u ICovCi0JCSh0bXBhbGlnbiA9ICh1MzIpIGFkZHIgJSBhbGlnbmJ5dGVzKTsKLQkJaWYgKHRtcGFs aWduICE9IDApCi0JCQl0bXBhbGlnbiA9IGFsaWduYnl0ZXMgLSB0bXBhbGlnbjsKLQotCQlhbGxv Y3NpemUgPSBzaXplICsgdG1wYWxpZ247Ci0KLQkJaWYgKGhzaXplID49IGFsbG9jc2l6ZSkgewkv KiBiaWcgZW5vdWdoICovCi0JCQlpZiAoaHNpemUgPT0gYWxsb2NzaXplICYmIHByZXZoZWFkICE9 IE5VTEwpIHsKLQkJCQlwcmV2aGVhZC0+bmV4dCA9IG5leHQ7Ci0JCQkJa2ZyZWUoaGVhZCk7Ci0J CQl9IGVsc2UgewotCQkJCWhlYWQtPnNpemUgPSBoc2l6ZSAtIGFsbG9jc2l6ZTsKLQkJCQloZWFk LT5hZGRyICs9IGFsbG9jc2l6ZTsKLQkJCX0KLQotCQkJLyogZnJlZSB1cCBhbnkgaG9sZSBjcmVh dGVkIGJ5IGFsaWdubWVudCAqLwotCQkJaWYgKHRtcGFsaWduKQotCQkJCWZyZWVfYmxvY2sodGFy Z2V0LCBzZWdpZCwgYWRkciwgdG1wYWxpZ24pOwotCi0JCQkqZHNwX2FkZHJlc3MgPSBhZGRyICsg dG1wYWxpZ247Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXByZXZoZWFkID0gaGVhZDsKLQkJ aGVhZCA9IG5leHQ7Ci0KLQl9IHdoaWxlIChoZWFkICE9IE5VTEwpOwotCi0JcmV0dXJuIGZhbHNl OwotfQotCi0vKgotICogID09PT09PT09IGZyZWVfYmxvY2sgPT09PT09PT0KLSAqICBUTyBETzog ZnJlZV9ibG9jaygpIGFsbG9jYXRlcyBtZW1vcnksIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBmYWls dXJlLgotICogIENvdWxkIGFsbG9jYXRlIGFuIHJtbV9oZWFkZXIgaW4gcm1tX2FsbG9jKCksIHRv IGJlIGtlcHQgaW4gYSBwb29sLgotICogIGZyZWVfYmxvY2soKSBjb3VsZCB1c2UgYW4gcm1tX2hl YWRlciBmcm9tIHRoZSBwb29sLCBmcmVlaW5nIGFzIGJsb2NrcwotICogIGFyZSBjb2FsZXNjZWQu Ci0gKi8KLXN0YXRpYyBib29sIGZyZWVfYmxvY2soc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJn ZXQsIHUzMiBzZWdpZCwgdTMyIGFkZHIsCi0JCSAgICAgICB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3Qg cm1tX2hlYWRlciAqaGVhZDsKLQlzdHJ1Y3Qgcm1tX2hlYWRlciAqdGhlYWQ7Ci0Jc3RydWN0IHJt bV9oZWFkZXIgKnJoZWFkOwotCWJvb2wgcmV0ID0gdHJ1ZTsKLQotCS8qIENyZWF0ZSBhIG1lbW9y eSBoZWFkZXIgdG8gaG9sZCB0aGUgbmV3bHkgZnJlZSdkIGJsb2NrLiAqLwotCXJoZWFkID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IHJtbV9oZWFkZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAocmhlYWQg PT0gTlVMTCkgewotCQlyZXQgPSBmYWxzZTsKLQl9IGVsc2UgewotCQkvKiBzZWFyY2ggZG93biB0 aGUgZnJlZSBsaXN0IHRvIGZpbmQgdGhlIHJpZ2h0IHBsYWNlIGZvciBhZGRyICovCi0JCWhlYWQg PSB0YXJnZXQtPmZyZWVfbGlzdFtzZWdpZF07Ci0KLQkJaWYgKGFkZHIgPj0gaGVhZC0+YWRkcikg ewotCQkJd2hpbGUgKGhlYWQtPm5leHQgIT0gTlVMTCAmJiBhZGRyID4gaGVhZC0+bmV4dC0+YWRk cikKLQkJCQloZWFkID0gaGVhZC0+bmV4dDsKLQotCQkJdGhlYWQgPSBoZWFkLT5uZXh0OwotCi0J CQloZWFkLT5uZXh0ID0gcmhlYWQ7Ci0JCQlyaGVhZC0+bmV4dCA9IHRoZWFkOwotCQkJcmhlYWQt PmFkZHIgPSBhZGRyOwotCQkJcmhlYWQtPnNpemUgPSBzaXplOwotCQl9IGVsc2UgewotCQkJKnJo ZWFkID0gKmhlYWQ7Ci0JCQloZWFkLT5uZXh0ID0gcmhlYWQ7Ci0JCQloZWFkLT5hZGRyID0gYWRk cjsKLQkJCWhlYWQtPnNpemUgPSBzaXplOwotCQkJdGhlYWQgPSByaGVhZC0+bmV4dDsKLQkJfQot Ci0JCS8qIGpvaW4gd2l0aCB1cHBlciBibG9jaywgaWYgcG9zc2libGUgKi8KLQkJaWYgKHRoZWFk ICE9IE5VTEwgJiYgKHJoZWFkLT5hZGRyICsgcmhlYWQtPnNpemUpID09Ci0JCSAgICB0aGVhZC0+ YWRkcikgewotCQkJaGVhZC0+bmV4dCA9IHJoZWFkLT5uZXh0OwotCQkJdGhlYWQtPnNpemUgPSBz aXplICsgdGhlYWQtPnNpemU7Ci0JCQl0aGVhZC0+YWRkciA9IGFkZHI7Ci0JCQlrZnJlZShyaGVh ZCk7Ci0JCQlyaGVhZCA9IHRoZWFkOwotCQl9Ci0KLQkJLyogam9pbiB3aXRoIHRoZSBsb3dlciBi bG9jaywgaWYgcG9zc2libGUgKi8KLQkJaWYgKChoZWFkLT5hZGRyICsgaGVhZC0+c2l6ZSkgPT0g cmhlYWQtPmFkZHIpIHsKLQkJCWhlYWQtPm5leHQgPSByaGVhZC0+bmV4dDsKLQkJCWhlYWQtPnNp emUgPSBoZWFkLT5zaXplICsgcmhlYWQtPnNpemU7Ci0JCQlrZnJlZShyaGVhZCk7Ci0JCX0KLQl9 Ci0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJp ZGdlL3JtZ3Ivc3RybS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivc3RybS5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODhiMjdiLi4wMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3N0cm0uYworKysgL2Rldi9udWxsCkBAIC0x LDczMyArMCwwIEBACi0vKgotICogc3RybS5jCi0gKgotICogRFNQLUJJT1MgQnJpZGdlIGRyaXZl ciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgotICoKLSAqIERTUC9C SU9TIEJyaWRnZSBTdHJlYW0gTWFuYWdlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw NiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICoKLSAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVT UyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElP TiwgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1Mg Ki8KLSNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCi0jaW5jbHVkZSA8ZHNwYnJp ZGdlL2RiZGVmcy5oPgotCi0vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g T1MgQWRhcHRhdGlvbiBMYXllciAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+Ci0KLS8q ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCcmlkZ2UgRHJpdmVyICovCi0j aW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uv bm9kZXByaXYuaD4KLQotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90 aGVycyAqLwotI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KLQotLyogIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KLSNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybS5o PgotCi0jaW5jbHVkZSA8ZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oPgotCi0vKiAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBU eXBlZGVmcyAqLwotI2RlZmluZSBERUZBVUxUVElNRU9VVCAgICAgIDEwMDAwCi0jZGVmaW5lIERF RkFVTFROVU1CVUZTICAgICAgMgotCi0vKgotICogID09PT09PT09IHN0cm1fbWdyID09PT09PT09 Ci0gKiAgVGhlIHN0cm1fbWdyIGNvbnRhaW5zIGRldmljZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8g b3BlbiB0aGUgdW5kZXJseWluZwotICogIGNoYW5uZWxzIG9mIGEgc3RyZWFtLgotICovCi1zdHJ1 Y3Qgc3RybV9tZ3IgewotCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOwkvKiBEZXZpY2UgZm9y IHRoaXMgcHJvY2Vzc29yICovCi0Jc3RydWN0IGNobmxfbWdyICpjaG5sX21ncjsJLyogQ2hhbm5l bCBtYW5hZ2VyICovCi0JLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIgKi8K LQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKLX07Ci0KLS8qCi0gKiAg PT09PT09PT0gc3RybV9vYmplY3QgPT09PT09PT0KLSAqICBUaGlzIG9iamVjdCBpcyBhbGxvY2F0 ZWQgaW4gc3RybV9vcGVuKCkuCi0gKi8KLXN0cnVjdCBzdHJtX29iamVjdCB7Ci0Jc3RydWN0IHN0 cm1fbWdyICpzdHJtX21ncl9vYmo7Ci0Jc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKLQl1 MzIgZGlyOwkJLyogRFNQX1RPTk9ERSBvciBEU1BfRlJPTU5PREUgKi8KLQl1MzIgdGltZW91dDsK LQl1MzIgbnVtX2J1ZnM7CQkvKiBNYXggIyBvZiBidWZzIGFsbG93ZWQgaW4gc3RyZWFtICovCi0J dTMyIGJ1ZnNfaW5fc3RybTsJLyogQ3VycmVudCAjIG9mIGJ1ZnMgaW4gc3RyZWFtICovCi0JdTMy IGJ5dGVzOwkJLyogYnl0ZXMgdHJhbnNmZXJyZWQgc2luY2UgaWRsZWQgKi8KLQkvKiBTVFJFQU1f SURMRSwgU1RSRUFNX1JFQURZLCAuLi4gKi8KLQllbnVtIGRzcF9zdHJlYW1zdGF0ZSBzdHJtX3N0 YXRlOwotCXZvaWQgKnVzZXJfZXZlbnQ7CS8qIFNhdmVkIGZvciBzdHJtX2dldF9pbmZvKCkgKi8K LQllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIFNUUk1NT0RFX1tQUk9DQ09QWV1bWkVS T0NPUFldLi4uICovCi0JdTMyIGRtYV9jaG5sX2lkOwkvKiBETUEgY2hubCBpZCAqLwotCXUzMiBk bWFfcHJpb3JpdHk7CS8qIERNQSBwcmlvcml0eTpETUFQUklfW0xPV11bSElHSF0gKi8KLQl1MzIg c2VnbWVudF9pZDsJCS8qID4wIGlzIFNNIHNlZ21lbnQuPTAgaXMgbG9jYWwgaGVhcCAqLwotCXUz MiBidWZfYWxpZ25tZW50OwkvKiBBbGlnbm1lbnQgZm9yIHN0cmVhbSBidWZzICovCi0JLyogU3Ry ZWFtJ3MgU00gYWRkcmVzcyB0cmFuc2xhdG9yICovCi0Jc3RydWN0IGNtbV94bGF0b3JvYmplY3Qg KnhsYXRvcjsKLX07Ci0KLS8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG dW5jdGlvbiBQcm90b3R5cGVzICovCi1zdGF0aWMgaW50IGRlbGV0ZV9zdHJtKHN0cnVjdCBzdHJt X29iamVjdCAqc3RyZWFtX29iaik7Ci0KLS8qCi0gKiAgPT09PT09PT0gc3RybV9hbGxvY2F0ZV9i dWZmZXIgPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBBbGxvY2F0ZXMgYnVmZmVycyBm b3IgYSBzdHJlYW0uCi0gKi8KLWludCBzdHJtX2FsbG9jYXRlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9y ZXNfb2JqZWN0ICpzdHJtcmVzLCB1MzIgdXNpemUsCi0JCQkJdTggKiphcF9idWZmZXIsIHUzMiBu dW1fYnVmcywKLQkJCQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQotewotCWludCBz dGF0dXMgPSAwOwotCXUzMiBhbGxvY19jbnQgPSAwOwotCXUzMiBpOwotCXN0cnVjdCBzdHJtX29i amVjdCAqc3RyZWFtX29iaiA9IHN0cm1yZXMtPnN0cmVhbTsKLQotCWlmIChzdHJlYW1fb2JqKSB7 Ci0JCS8qCi0JCSAqIEFsbG9jYXRlIGZyb20gc2VnbWVudCBzcGVjaWZpZWQgYXQgdGltZSBvZiBz dHJlYW0gb3Blbi4KLQkJICovCi0JCWlmICh1c2l6ZSA9PSAwKQotCQkJc3RhdHVzID0gLUVJTlZB TDsKLQotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfQotCi0JaWYgKHN0YXR1cykK LQkJZ290byBmdW5jX2VuZDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fYnVmczsgaSsrKSB7Ci0J CSh2b2lkKWNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cmVhbV9vYmotPnhsYXRvciwgJmFwX2J1ZmZl cltpXSwKLQkJCQkJICAgdXNpemUpOwotCQlpZiAoYXBfYnVmZmVyW2ldID09IE5VTEwpIHsKLQkJ CXN0YXR1cyA9IC1FTk9NRU07Ci0JCQlhbGxvY19jbnQgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9 Ci0JaWYgKHN0YXR1cykKLQkJc3RybV9mcmVlX2J1ZmZlcihzdHJtcmVzLCBhcF9idWZmZXIsIGFs bG9jX2NudCwgcHJfY3R4dCk7Ci0KLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0J ZHJ2X3Byb2NfdXBkYXRlX3N0cm1fcmVzKG51bV9idWZzLCBzdHJtcmVzKTsKLQotZnVuY19lbmQ6 Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBzdHJtX2Nsb3NlID09PT09 PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgQ2xvc2UgYSBzdHJlYW0gb3BlbmVkIHdpdGggc3Ry bV9vcGVuKCkuCi0gKi8KLWludCBzdHJtX2Nsb3NlKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0 cm1yZXMsCi0JCSAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCi17Ci0Jc3Ry dWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGNobmxfaW5mbyBj aG5sX2luZm9fb2JqOwotCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBzdHJtX29iamVjdCAqc3Ry ZWFtX29iaiA9IHN0cm1yZXMtPnN0cmVhbTsKLQotCWlmICghc3RyZWFtX29iaikgewotCQlzdGF0 dXMgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCS8qIEhhdmUgYWxsIGJ1ZmZlcnMgYmVlbiByZWNs YWltZWQ/IElmIG5vdCwgcmV0dXJuCi0JCSAqIC1FUElQRSAqLwotCQlpbnRmX2Z4bnMgPSBzdHJl YW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKLQkJc3RhdHVzID0KLQkJICAgICgqaW50 Zl9meG5zLT5jaG5sX2dldF9pbmZvKSAoc3RyZWFtX29iai0+Y2hubF9vYmosCi0JCQkJCQkgICAg ICZjaG5sX2luZm9fb2JqKTsKLQotCQlpZiAoY2hubF9pbmZvX29iai5jaW9fY3MgPiAwIHx8IGNo bmxfaW5mb19vYmouY2lvX3JlcXMgPiAwKQotCQkJc3RhdHVzID0gLUVQSVBFOwotCQllbHNlCi0J CQlzdGF0dXMgPSBkZWxldGVfc3RybShzdHJlYW1fb2JqKTsKLQl9Ci0KLQlpZiAoc3RhdHVzKQot CQlnb3RvIGZ1bmNfZW5kOwotCi0JaWRyX3JlbW92ZShwcl9jdHh0LT5zdHJlYW1faWQsIHN0cm1y ZXMtPmlkKTsKLWZ1bmNfZW5kOgotCWRldl9kYmcoYnJpZGdlLCAiJXM6IHN0cmVhbV9vYmo6ICVw LCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sCi0JCXN0cmVhbV9vYmosIHN0YXR1cyk7Ci0JcmV0 dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBzdHJtX2NyZWF0ZSA9PT09PT09PQot ICogIFB1cnBvc2U6Ci0gKiAgICAgIENyZWF0ZSBhIFNUUk0gbWFuYWdlciBvYmplY3QuCi0gKi8K LWludCBzdHJtX2NyZWF0ZShzdHJ1Y3Qgc3RybV9tZ3IgKipzdHJtX21hbiwKLQkJICAgICAgIHN0 cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqKQotewotCXN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jf b2JqOwotCWludCBzdGF0dXMgPSAwOwotCi0JKnN0cm1fbWFuID0gTlVMTDsKLQkvKiBBbGxvY2F0 ZSBTVFJNIG1hbmFnZXIgb2JqZWN0ICovCi0Jc3RybV9tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IHN0cm1fbWdyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0cm1fbWdyX29iaiA9PSBOVUxM KQotCQlzdGF0dXMgPSAtRU5PTUVNOwotCWVsc2UKLQkJc3RybV9tZ3Jfb2JqLT5kZXZfb2JqID0g ZGV2X29iajsKLQotCS8qIEdldCBDaGFubmVsIG1hbmFnZXIgYW5kIEJyaWRnZSBmdW5jdGlvbiBp bnRlcmZhY2UgKi8KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdy KGRldl9vYmosICYoc3RybV9tZ3Jfb2JqLT5jaG5sX21ncikpOwotCQlpZiAoIXN0YXR1cykgewot CQkJKHZvaWQpZGV2X2dldF9pbnRmX2Z4bnMoZGV2X29iaiwKLQkJCQkJCSYoc3RybV9tZ3Jfb2Jq LT5pbnRmX2Z4bnMpKTsKLQkJfQotCX0KLQotCWlmICghc3RhdHVzKQotCQkqc3RybV9tYW4gPSBz dHJtX21ncl9vYmo7Ci0JZWxzZQotCQlrZnJlZShzdHJtX21ncl9vYmopOwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBzdHJtX2RlbGV0ZSA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIERlbGV0ZSB0aGUgU1RSTSBNYW5hZ2VyIE9iamVjdC4KLSAqLwotdm9p ZCBzdHJtX2RlbGV0ZShzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iaikKLXsKLQlrZnJlZShz dHJtX21ncl9vYmopOwotfQotCi0vKgotICogID09PT09PT09IHN0cm1fZnJlZV9idWZmZXIgPT09 PT09PT0KLSAqICBQdXJwb3NlOgotICogICAgICBGcmVlcyB0aGUgYnVmZmVycyBhbGxvY2F0ZWQg Zm9yIGEgc3RyZWFtLgotICovCi1pbnQgc3RybV9mcmVlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9yZXNf b2JqZWN0ICpzdHJtcmVzLCB1OCAqKmFwX2J1ZmZlciwKLQkJCSAgICB1MzIgbnVtX2J1ZnMsIHN0 cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JdTMy IGkgPSAwOwotCXN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiA9IHN0cm1yZXMtPnN0cmVh bTsKLQotCWlmICghc3RyZWFtX29iaikKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQotCWlmICghc3Rh dHVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fYnVmczsgaSsrKSB7Ci0JCQlzdGF0dXMgPQot CQkJICAgIGNtbV94bGF0b3JfZnJlZV9idWYoc3RyZWFtX29iai0+eGxhdG9yLAotCQkJCQkJYXBf YnVmZmVyW2ldKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJYnJlYWs7Ci0JCQlhcF9idWZmZXJbaV0g PSBOVUxMOwotCQl9Ci0JfQotCWRydl9wcm9jX3VwZGF0ZV9zdHJtX3JlcyhudW1fYnVmcyAtIGks IHN0cm1yZXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBzdHJt X2dldF9pbmZvID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmV0cmlldmVzIGluZm9y bWF0aW9uIGFib3V0IGEgc3RyZWFtLgotICovCi1pbnQgc3RybV9nZXRfaW5mbyhzdHJ1Y3Qgc3Ry bV9vYmplY3QgKnN0cmVhbV9vYmosCi0JCQkgc3RydWN0IHN0cmVhbV9pbmZvICpzdHJlYW1faW5m bywKLQkJCSB1MzIgc3RyZWFtX2luZm9fc2l6ZSkKLXsKLQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRl cmZhY2UgKmludGZfZnhuczsKLQlzdHJ1Y3QgY2hubF9pbmZvIGNobmxfaW5mb19vYmo7Ci0JaW50 IHN0YXR1cyA9IDA7Ci0Jdm9pZCAqdmlydF9iYXNlID0gTlVMTDsJLyogTlVMTCBpZiBubyBTTSB1 c2VkICovCi0KLQlpZiAoIXN0cmVhbV9vYmopIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9IGVs c2UgewotCQlpZiAoc3RyZWFtX2luZm9fc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc3RyZWFtX2luZm8p KSB7Ci0JCQkvKiBzaXplIG9mIHVzZXJzIGluZm8gKi8KLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0J CX0KLQl9Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2VuZDsKLQotCWludGZfZnhucyA9IHN0 cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOwotCXN0YXR1cyA9Ci0JICAgICgqaW50 Zl9meG5zLT5jaG5sX2dldF9pbmZvKSAoc3RyZWFtX29iai0+Y2hubF9vYmosCi0JCQkJCQkgICZj aG5sX2luZm9fb2JqKTsKLQlpZiAoc3RhdHVzKQotCQlnb3RvIGZ1bmNfZW5kOwotCi0JaWYgKHN0 cmVhbV9vYmotPnhsYXRvcikgewotCQkvKiBXZSBoYXZlIGEgdHJhbnNsYXRvciAqLwotCQljbW1f eGxhdG9yX2luZm8oc3RyZWFtX29iai0+eGxhdG9yLCAodTggKiopICZ2aXJ0X2Jhc2UsIDAsCi0J CQkJc3RyZWFtX29iai0+c2VnbWVudF9pZCwgZmFsc2UpOwotCX0KLQlzdHJlYW1faW5mby0+c2Vn bWVudF9pZCA9IHN0cmVhbV9vYmotPnNlZ21lbnRfaWQ7Ci0Jc3RyZWFtX2luZm8tPnN0cm1fbW9k ZSA9IHN0cmVhbV9vYmotPnN0cm1fbW9kZTsKLQlzdHJlYW1faW5mby0+dmlydF9iYXNlID0gdmly dF9iYXNlOwotCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPm51bWJlcl9idWZzX2FsbG93ZWQgPSBz dHJlYW1fb2JqLT5udW1fYnVmczsKLQlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5udW1iZXJfYnVm c19pbl9zdHJlYW0gPSBjaG5sX2luZm9fb2JqLmNpb19jcyArCi0JICAgIGNobmxfaW5mb19vYmou Y2lvX3JlcXM7Ci0JLyogIyBvZiBieXRlcyB0cmFuc2ZlcnJlZCBzaW5jZSBsYXN0IGNhbGwgdG8g RFNQU3RyZWFtX0lkbGUoKSAqLwotCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPm51bWJlcl9ieXRl cyA9IGNobmxfaW5mb19vYmouYnl0ZXNfdHg7Ci0Jc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+c3lu Y19vYmplY3RfaGFuZGxlID0gY2hubF9pbmZvX29iai5ldmVudF9vYmo7Ci0JLyogRGV0ZXJtaW5l IHN0cmVhbSBzdGF0ZSBiYXNlZCBvbiBjaGFubmVsIHN0YXRlIGFuZCBpbmZvICovCi0JaWYgKGNo bmxfaW5mb19vYmouc3RhdGUgJiBDSE5MX1NUQVRFRU9TKSB7Ci0JCXN0cmVhbV9pbmZvLT51c2Vy X3N0cm0tPnNzX3N0cmVhbV9zdGF0ZSA9IFNUUkVBTV9ET05FOwotCX0gZWxzZSB7Ci0JCWlmIChj aG5sX2luZm9fb2JqLmNpb19jcyA+IDApCi0JCQlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5zc19z dHJlYW1fc3RhdGUgPSBTVFJFQU1fUkVBRFk7Ci0JCWVsc2UgaWYgKGNobmxfaW5mb19vYmouY2lv X3JlcXMgPiAwKQotCQkJc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+c3Nfc3RyZWFtX3N0YXRlID0K LQkJCSAgICBTVFJFQU1fUEVORElORzsKLQkJZWxzZQotCQkJc3RyZWFtX2luZm8tPnVzZXJfc3Ry bS0+c3Nfc3RyZWFtX3N0YXRlID0gU1RSRUFNX0lETEU7Ci0KLQl9Ci1mdW5jX2VuZDoKLQlyZXR1 cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09IHN0cm1faWRsZSA9PT09PT09PQotICog IFB1cnBvc2U6Ci0gKiAgICAgIElkbGVzIGEgcGFydGljdWxhciBzdHJlYW0uCi0gKi8KLWludCBz dHJtX2lkbGUoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCBib29sIGZsdXNoX2RhdGEp Ci17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JaW50IHN0YXR1 cyA9IDA7Ci0KLQlpZiAoIXN0cmVhbV9vYmopIHsKLQkJc3RhdHVzID0gLUVGQVVMVDsKLQl9IGVs c2UgewotCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsK LQotCQlzdGF0dXMgPSAoKmludGZfZnhucy0+Y2hubF9pZGxlKSAoc3RyZWFtX29iai0+Y2hubF9v YmosCi0JCQkJCQkgICAgICBzdHJlYW1fb2JqLT50aW1lb3V0LAotCQkJCQkJICAgICAgZmx1c2hf ZGF0YSk7Ci0JfQotCi0JZGV2X2RiZyhicmlkZ2UsICIlczogc3RyZWFtX29iajogJXAgZmx1c2hf ZGF0YTogMHgleCBzdGF0dXM6IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBzdHJlYW1fb2JqLCBmbHVz aF9kYXRhLCBzdGF0dXMpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiAgPT09PT09PT0g c3RybV9pc3N1ZSA9PT09PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIElzc3VlcyBhIGJ1ZmZl ciBvbiBhIHN0cmVhbQotICovCi1pbnQgc3RybV9pc3N1ZShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0 cmVhbV9vYmosIHU4ICpwYnVmLCB1MzIgdWxfYnl0ZXMsCi0JCSAgICAgIHUzMiB1bF9idWZfc2l6 ZSwgdTMyIGR3X2FyZykKLXsKLQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhu czsKLQlpbnQgc3RhdHVzID0gMDsKLQl2b2lkICp0bXBfYnVmID0gTlVMTDsKLQotCWlmICghc3Ry ZWFtX29iaikgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCWludGZfZnhucyA9 IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOwotCi0JCWlmIChzdHJlYW1fb2Jq LT5zZWdtZW50X2lkICE9IDApIHsKLQkJCXRtcF9idWYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZShz dHJlYW1fb2JqLT54bGF0b3IsCi0JCQkJCQkgICAgICAgKHZvaWQgKilwYnVmLAotCQkJCQkJICAg ICAgIENNTV9WQTJEU1BQQSk7Ci0JCQlpZiAodG1wX2J1ZiA9PSBOVUxMKQotCQkJCXN0YXR1cyA9 IC1FU1JDSDsKLQotCQl9Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlzdGF0dXMgPSAoKmludGZfZnhu cy0+Y2hubF9hZGRfaW9fcmVxKQotCQkJICAgIChzdHJlYW1fb2JqLT5jaG5sX29iaiwgcGJ1Ziwg dWxfYnl0ZXMsIHVsX2J1Zl9zaXplLAotCQkJICAgICAodTMyKSB0bXBfYnVmLCBkd19hcmcpOwot CQl9Ci0JCWlmIChzdGF0dXMgPT0gLUVJTykKLQkJCXN0YXR1cyA9IC1FTk9TUjsKLQl9Ci0KLQlk ZXZfZGJnKGJyaWRnZSwgIiVzOiBzdHJlYW1fb2JqOiAlcCBwYnVmOiAlcCB1bF9ieXRlczogMHgl eCBkd19hcmc6IgotCQkiIDB4JXggc3RhdHVzOiAweCV4XG4iLCBfX2Z1bmNfXywgc3RyZWFtX29i aiwgcGJ1ZiwKLQkJdWxfYnl0ZXMsIGR3X2FyZywgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwot fQotCi0vKgotICogID09PT09PT09IHN0cm1fb3BlbiA9PT09PT09PQotICogIFB1cnBvc2U6Ci0g KiAgICAgIE9wZW4gYSBzdHJlYW0gZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGRhdGEgYnVmZmVycyB0 by9mcm9tIGEgdGFzayBvcgotICogICAgICBYREFJUyBzb2NrZXQgbm9kZSBvbiB0aGUgRFNQLgot ICovCi1pbnQgc3RybV9vcGVuKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBkaXIsIHUz MiBpbmRleCwKLQkJICAgICBzdHJ1Y3Qgc3RybV9hdHRyICpwYXR0ciwKLQkJICAgICBzdHJ1Y3Qg c3RybV9yZXNfb2JqZWN0ICoqc3RybXJlcywKLQkJICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0 ICpwcl9jdHh0KQotewotCXN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jfb2JqOwotCXN0cnVjdCBi cmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOwotCXUzMiB1bF9jaG5sX2lkOwotCXN0cnVj dCBzdHJtX29iamVjdCAqc3RybV9vYmogPSBOVUxMOwotCXM4IGNobmxfbW9kZTsKLQlzdHJ1Y3Qg Y2hubF9hdHRyIGNobmxfYXR0cl9vYmo7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGNtbV9v YmplY3QgKmhjbW1fbWdyID0gTlVMTDsJLyogU2hhcmVkIG1lbW9yeSBtYW5hZ2VyIGhuZGwgKi8K LQotCXZvaWQgKnN0cmVhbV9yZXM7Ci0KLQkqc3RybXJlcyA9IE5VTEw7Ci0JaWYgKGRpciAhPSBE U1BfVE9OT0RFICYmIGRpciAhPSBEU1BfRlJPTU5PREUpIHsKLQkJc3RhdHVzID0gLUVQRVJNOwot CX0gZWxzZSB7Ci0JCS8qIEdldCB0aGUgY2hhbm5lbCBpZCBmcm9tIHRoZSBub2RlIChzZXQgaW4g bm9kZV9jb25uZWN0KCkpICovCi0JCXN0YXR1cyA9IG5vZGVfZ2V0X2NoYW5uZWxfaWQoaG5vZGUs IGRpciwgaW5kZXgsICZ1bF9jaG5sX2lkKTsKLQl9Ci0JaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9 IG5vZGVfZ2V0X3N0cm1fbWdyKGhub2RlLCAmc3RybV9tZ3Jfb2JqKTsKLQotCWlmICghc3RhdHVz KSB7Ci0JCXN0cm1fb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0cm1fb2JqZWN0KSwgR0ZQ X0tFUk5FTCk7Ci0JCWlmIChzdHJtX29iaiA9PSBOVUxMKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVN OwotCQl9IGVsc2UgewotCQkJc3RybV9vYmotPnN0cm1fbWdyX29iaiA9IHN0cm1fbWdyX29iajsK LQkJCXN0cm1fb2JqLT5kaXIgPSBkaXI7Ci0JCQlzdHJtX29iai0+c3RybV9zdGF0ZSA9IFNUUkVB TV9JRExFOwotCQkJc3RybV9vYmotPnVzZXJfZXZlbnQgPSBwYXR0ci0+dXNlcl9ldmVudDsKLQkJ CWlmIChwYXR0ci0+c3RyZWFtX2F0dHJfaW4gIT0gTlVMTCkgewotCQkJCXN0cm1fb2JqLT50aW1l b3V0ID0KLQkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT50aW1lb3V0OwotCQkJCXN0cm1f b2JqLT5udW1fYnVmcyA9Ci0JCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+bnVtX2J1ZnM7 Ci0JCQkJc3RybV9vYmotPnN0cm1fbW9kZSA9Ci0JCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9p bi0+c3RybV9tb2RlOwotCQkJCXN0cm1fb2JqLT5zZWdtZW50X2lkID0KLQkJCQkgICAgcGF0dHIt PnN0cmVhbV9hdHRyX2luLT5zZWdtZW50X2lkOwotCQkJCXN0cm1fb2JqLT5idWZfYWxpZ25tZW50 ID0KLQkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT5idWZfYWxpZ25tZW50OwotCQkJCXN0 cm1fb2JqLT5kbWFfY2hubF9pZCA9Ci0JCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+ZG1h X2NobmxfaWQ7Ci0JCQkJc3RybV9vYmotPmRtYV9wcmlvcml0eSA9Ci0JCQkJICAgIHBhdHRyLT5z dHJlYW1fYXR0cl9pbi0+ZG1hX3ByaW9yaXR5OwotCQkJCWNobmxfYXR0cl9vYmoudWlvX3JlcXMg PQotCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPm51bV9idWZzOwotCQkJfSBlbHNlIHsK LQkJCQlzdHJtX29iai0+dGltZW91dCA9IERFRkFVTFRUSU1FT1VUOwotCQkJCXN0cm1fb2JqLT5u dW1fYnVmcyA9IERFRkFVTFROVU1CVUZTOwotCQkJCXN0cm1fb2JqLT5zdHJtX21vZGUgPSBTVFJN TU9ERV9QUk9DQ09QWTsKLQkJCQlzdHJtX29iai0+c2VnbWVudF9pZCA9IDA7CS8qIGxvY2FsIG1l bSAqLwotCQkJCXN0cm1fb2JqLT5idWZfYWxpZ25tZW50ID0gMDsKLQkJCQlzdHJtX29iai0+ZG1h X2NobmxfaWQgPSAwOwotCQkJCXN0cm1fb2JqLT5kbWFfcHJpb3JpdHkgPSAwOwotCQkJCWNobmxf YXR0cl9vYmoudWlvX3JlcXMgPSBERUZBVUxUTlVNQlVGUzsKLQkJCX0KLQkJCWNobmxfYXR0cl9v YmoucmVzZXJ2ZWQxID0gTlVMTDsKLQkJCS8qIERNQSBjaG5sIGZsdXNoIHRpbWVvdXQgKi8KLQkJ CWNobmxfYXR0cl9vYmoucmVzZXJ2ZWQyID0gc3RybV9vYmotPnRpbWVvdXQ7Ci0JCQljaG5sX2F0 dHJfb2JqLmV2ZW50X29iaiA9IE5VTEw7Ci0JCQlpZiAocGF0dHItPnVzZXJfZXZlbnQgIT0gTlVM TCkKLQkJCQljaG5sX2F0dHJfb2JqLmV2ZW50X29iaiA9IHBhdHRyLT51c2VyX2V2ZW50OwotCi0J CX0KLQl9Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2NvbnQ7Ci0KLQlpZiAoKHBhdHRyLT52 aXJ0X2Jhc2UgPT0gTlVMTCkgfHwgIShwYXR0ci0+dmlydF9zaXplID4gMCkpCi0JCWdvdG8gZnVu Y19jb250OwotCi0JLyogTm8gU3lzdGVtIERNQSAqLwotCS8qIEdldCB0aGUgc2hhcmVkIG1lbSBt Z3IgZm9yIHRoaXMgc3RyZWFtcyBkZXYgb2JqZWN0ICovCi0Jc3RhdHVzID0gZGV2X2dldF9jbW1f bWdyKHN0cm1fbWdyX29iai0+ZGV2X29iaiwgJmhjbW1fbWdyKTsKLQlpZiAoIXN0YXR1cykgewot CQkvKkFsbG9jYXRlIGEgU00gYWRkciB0cmFuc2xhdG9yIGZvciB0aGlzIHN0cm0uICovCi0JCXN0 YXR1cyA9IGNtbV94bGF0b3JfY3JlYXRlKCZzdHJtX29iai0+eGxhdG9yLCBoY21tX21nciwgTlVM TCk7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQkvKiAgU2V0IHRyYW5zbGF0b3JzIFZpcnQgQWRkciBh dHRyaWJ1dGVzICovCi0JCQlzdGF0dXMgPSBjbW1feGxhdG9yX2luZm8oc3RybV9vYmotPnhsYXRv ciwKLQkJCQkJCSAodTggKiopICZwYXR0ci0+dmlydF9iYXNlLAotCQkJCQkJIHBhdHRyLT52aXJ0 X3NpemUsCi0JCQkJCQkgc3RybV9vYmotPnNlZ21lbnRfaWQsIHRydWUpOwotCQl9Ci0JfQotZnVu Y19jb250OgotCWlmICghc3RhdHVzKSB7Ci0JCS8qIE9wZW4gY2hhbm5lbCAqLwotCQljaG5sX21v ZGUgPSAoZGlyID09IERTUF9UT05PREUpID8KLQkJICAgIENITkxfTU9ERVRPRFNQIDogQ0hOTF9N T0RFRlJPTURTUDsKLQkJaW50Zl9meG5zID0gc3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7Ci0JCXN0 YXR1cyA9ICgqaW50Zl9meG5zLT5jaG5sX29wZW4pICgmKHN0cm1fb2JqLT5jaG5sX29iaiksCi0J CQkJCQkgICAgICBzdHJtX21ncl9vYmotPmNobmxfbWdyLAotCQkJCQkJICAgICAgY2hubF9tb2Rl LCB1bF9jaG5sX2lkLAotCQkJCQkJICAgICAgJmNobmxfYXR0cl9vYmopOwotCQlpZiAoc3RhdHVz KSB7Ci0JCQkvKgotCQkJICogb3Zlci1yaWRlIG5vbi1yZXR1cm5hYmxlIHN0YXR1cyBjb2RlcyBz byB3ZSByZXR1cm4KLQkJCSAqIHNvbWV0aGluZyBkb2N1bWVudGVkCi0JCQkgKi8KLQkJCWlmIChz dGF0dXMgIT0gLUVOT01FTSAmJiBzdGF0dXMgIT0KLQkJCSAgICAtRUlOVkFMICYmIHN0YXR1cyAh PSAtRVBFUk0pIHsKLQkJCQkvKgotCQkJCSAqIFdlIGdvdCBhIHN0YXR1cyB0aGF0J3Mgbm90IHJl dHVybi1hYmxlLgotCQkJCSAqIEFzc2VydCB0aGF0IHdlIGdvdCBzb21ldGhpbmcgd2Ugd2VyZQot CQkJCSAqIGV4cGVjdGluZyAoLUVGQVVMVCBpc24ndCBhY2NlcHRhYmxlLAotCQkJCSAqIHN0cm1f bWdyX29iai0+Y2hubF9tZ3IgYmV0dGVyIGJlIHZhbGlkIG9yIHdlCi0JCQkJICogYXNzZXJ0IGhl cmUpLCBhbmQgdGhlbiByZXR1cm4gLUVQRVJNLgotCQkJCSAqLwotCQkJCXN0YXR1cyA9IC1FUEVS TTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIXN0YXR1cykgewotCQlzdGF0dXMgPSBkcnZfcHJvY19p bnNlcnRfc3RybV9yZXNfZWxlbWVudChzdHJtX29iaiwKLQkJCQkJCQkmc3RyZWFtX3JlcywgcHJf Y3R4dCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlkZWxldGVfc3RybShzdHJtX29iaik7Ci0JCWVsc2UK LQkJCSpzdHJtcmVzID0gKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKilzdHJlYW1fcmVzOwotCX0g ZWxzZSB7Ci0JCSh2b2lkKWRlbGV0ZV9zdHJtKHN0cm1fb2JqKTsKLQl9Ci0KLQlkZXZfZGJnKGJy aWRnZSwgIiVzOiBobm9kZTogJXAgZGlyOiAweCV4IGluZGV4OiAweCV4IHBhdHRyOiAlcCAiCi0J CSJzdHJtcmVzOiAlcCBzdGF0dXM6IDB4JXhcbiIsIF9fZnVuY19fLAotCQlobm9kZSwgZGlyLCBp bmRleCwgcGF0dHIsIHN0cm1yZXMsIHN0YXR1cyk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoK LSAqICA9PT09PT09PSBzdHJtX3JlY2xhaW0gPT09PT09PT0KLSAqICBQdXJwb3NlOgotICogICAg ICBSZWxjYWltcyBhIGJ1ZmZlciBmcm9tIGEgc3RyZWFtLgotICovCi1pbnQgc3RybV9yZWNsYWlt KHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgdTggKipidWZfcHRyLAotCQkJdTMyICpu Ynl0ZXMsIHUzMiAqYnVmZl9zaXplLCB1MzIgKnBkd19hcmcpCi17Ci0Jc3RydWN0IGJyaWRnZV9k cnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IGNobmxfaW9jIGNobmxfaW9jX29iajsK LQlpbnQgc3RhdHVzID0gMDsKLQl2b2lkICp0bXBfYnVmID0gTlVMTDsKLQotCWlmICghc3RyZWFt X29iaikgewotCQlzdGF0dXMgPSAtRUZBVUxUOwotCQlnb3RvIGZ1bmNfZW5kOwotCX0KLQlpbnRm X2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKLQotCXN0YXR1cyA9 Ci0JICAgICgqaW50Zl9meG5zLT5jaG5sX2dldF9pb2MpIChzdHJlYW1fb2JqLT5jaG5sX29iaiwK LQkJCQkJICAgIHN0cmVhbV9vYmotPnRpbWVvdXQsCi0JCQkJCSAgICAmY2hubF9pb2Nfb2JqKTsK LQlpZiAoIXN0YXR1cykgewotCQkqbmJ5dGVzID0gY2hubF9pb2Nfb2JqLmJ5dGVfc2l6ZTsKLQkJ aWYgKGJ1ZmZfc2l6ZSkKLQkJCSpidWZmX3NpemUgPSBjaG5sX2lvY19vYmouYnVmX3NpemU7Ci0K LQkJKnBkd19hcmcgPSBjaG5sX2lvY19vYmouYXJnOwotCQlpZiAoIUNITkxfSVNfSU9fQ09NUExF VEUoY2hubF9pb2Nfb2JqKSkgewotCQkJaWYgKENITkxfSVNfVElNRURfT1VUKGNobmxfaW9jX29i aikpIHsKLQkJCQlzdGF0dXMgPSAtRVRJTUU7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEFsbG93IHJl Y2xhaW1zIGFmdGVyIGlkbGUgdG8gc3VjY2VlZCAqLwotCQkJCWlmICghQ0hOTF9JU19JT19DQU5D RUxMRUQoY2hubF9pb2Nfb2JqKSkKLQkJCQkJc3RhdHVzID0gLUVQRVJNOwotCi0JCQl9Ci0JCX0K LQkJLyogVHJhbnNsYXRlIHplcm9jb3B5IGJ1ZmZlciBpZiBjaGFubmVsIG5vdCBjYW5jZWxlZC4g Ki8KLQkJaWYgKCFzdGF0dXMKLQkJICAgICYmICghQ0hOTF9JU19JT19DQU5DRUxMRUQoY2hubF9p b2Nfb2JqKSkKLQkJICAgICYmIChzdHJlYW1fb2JqLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfWkVS T0NPUFkpKSB7Ci0JCQkvKgotCQkJICogIFRoaXMgaXMgYSB6ZXJvLWNvcHkgY2hhbm5lbCBzbyBj aG5sX2lvY19vYmouYnVmCi0JCQkgKiAgY29udGFpbnMgdGhlIERTUCBhZGRyZXNzIG9mIFNNLiBX ZSBuZWVkIHRvCi0JCQkgKiAgdHJhbnNsYXRlIGl0IHRvIGEgdmlydHVhbCBhZGRyZXNzIGZvciB0 aGUgdXNlcgotCQkJICogIHRocmVhZCB0byBhY2Nlc3MuCi0JCQkgKiAgTm90ZTogQ291bGQgYWRk IENNTV9EU1BQQTJWQSB0byBDTU0gaW4gdGhlIGZ1dHVyZS4KLQkJCSAqLwotCQkJdG1wX2J1ZiA9 IGNtbV94bGF0b3JfdHJhbnNsYXRlKHN0cmVhbV9vYmotPnhsYXRvciwKLQkJCQkJCSAgICAgICBj aG5sX2lvY19vYmouYnVmLAotCQkJCQkJICAgICAgIENNTV9EU1BQQTJQQSk7Ci0JCQlpZiAodG1w X2J1ZiAhPSBOVUxMKSB7Ci0JCQkJLyogbm93IGNvbnZlcnQgdGhpcyBHUFAgUGEgdG8gVmEgKi8K LQkJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+Ci0JCQkJCQkJ ICAgICAgIHhsYXRvciwKLQkJCQkJCQkgICAgICAgdG1wX2J1ZiwKLQkJCQkJCQkgICAgICAgQ01N X1BBMlZBKTsKLQkJCX0KLQkJCWlmICh0bXBfYnVmID09IE5VTEwpCi0JCQkJc3RhdHVzID0gLUVT UkNIOwotCi0JCQljaG5sX2lvY19vYmouYnVmID0gdG1wX2J1ZjsKLQkJfQotCQkqYnVmX3B0ciA9 IGNobmxfaW9jX29iai5idWY7Ci0JfQotZnVuY19lbmQ6Ci0JZGV2X2RiZyhicmlkZ2UsICIlczog c3RyZWFtX29iajogJXAgYnVmX3B0cjogJXAgbmJ5dGVzOiAlcCAiCi0JCSJwZHdfYXJnOiAlcCBz dGF0dXMgMHgleFxuIiwgX19mdW5jX18sIHN0cmVhbV9vYmosCi0JCWJ1Zl9wdHIsIG5ieXRlcywg cGR3X2FyZywgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogID09PT09PT09 IHN0cm1fcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09Ci0gKiAgUHVycG9zZToKLSAqICAgICAgUmVn aXN0ZXIgdG8gYmUgbm90aWZpZWQgb24gc3BlY2lmaWMgZXZlbnRzIGZvciB0aGlzIHN0cmVhbS4K LSAqLwotaW50IHN0cm1fcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFt X29iaiwgdTMyIGV2ZW50X21hc2ssCi0JCQkJdTMyIG5vdGlmeV90eXBlLCBzdHJ1Y3QgZHNwX25v dGlmaWNhdGlvbgotCQkJCSpobm90aWZpY2F0aW9uKQotewotCXN0cnVjdCBicmlkZ2VfZHJ2X2lu dGVyZmFjZSAqaW50Zl9meG5zOwotCWludCBzdGF0dXMgPSAwOwotCi0JaWYgKCFzdHJlYW1fb2Jq KSB7Ci0JCXN0YXR1cyA9IC1FRkFVTFQ7Ci0JfSBlbHNlIGlmICgoZXZlbnRfbWFzayAmIH4oKERT UF9TVFJFQU1JT0NPTVBMRVRJT04pIHwKLQkJCQkgICBEU1BfU1RSRUFNRE9ORSkpICE9IDApIHsK LQkJc3RhdHVzID0gLUVJTlZBTDsKLQl9IGVsc2UgewotCQlpZiAobm90aWZ5X3R5cGUgIT0gRFNQ X1NJR05BTEVWRU5UKQotCQkJc3RhdHVzID0gLUVOT1NZUzsKLQotCX0KLQlpZiAoIXN0YXR1cykg ewotCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKLQot CQlzdGF0dXMgPQotCQkgICAgKCppbnRmX2Z4bnMtPmNobmxfcmVnaXN0ZXJfbm90aWZ5KSAoc3Ry ZWFtX29iai0+Ci0JCQkJCQkJICAgIGNobmxfb2JqLAotCQkJCQkJCSAgICBldmVudF9tYXNrLAot CQkJCQkJCSAgICBub3RpZnlfdHlwZSwKLQkJCQkJCQkgICAgaG5vdGlmaWNhdGlvbik7Ci0JfQot Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBzdHJtX3NlbGVjdCA9PT09 PT09PQotICogIFB1cnBvc2U6Ci0gKiAgICAgIFNlbGVjdHMgYSByZWFkeSBzdHJlYW0uCi0gKi8K LWludCBzdHJtX3NlbGVjdChzdHJ1Y3Qgc3RybV9vYmplY3QgKipzdHJtX3RhYiwgdTMyIHN0cm1z LAotCQkgICAgICAgdTMyICpwbWFzaywgdTMyIHV0aW1lb3V0KQotewotCXUzMiBpbmRleDsKLQlz dHJ1Y3QgY2hubF9pbmZvIGNobmxfaW5mb19vYmo7Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJm YWNlICppbnRmX2Z4bnM7Ci0Jc3RydWN0IHN5bmNfb2JqZWN0ICoqc3luY19ldmVudHMgPSBOVUxM OwotCXUzMiBpOwotCWludCBzdGF0dXMgPSAwOwotCi0JKnBtYXNrID0gMDsKLQlmb3IgKGkgPSAw OyBpIDwgc3RybXM7IGkrKykgewotCQlpZiAoIXN0cm1fdGFiW2ldKSB7Ci0JCQlzdGF0dXMgPSAt RUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHN0YXR1cykKLQkJZ290byBmdW5jX2Vu ZDsKLQotCS8qIERldGVybWluZSB3aGljaCBjaGFubmVscyBoYXZlIElPIHJlYWR5ICovCi0JZm9y IChpID0gMDsgaSA8IHN0cm1zOyBpKyspIHsKLQkJaW50Zl9meG5zID0gc3RybV90YWJbaV0tPnN0 cm1fbWdyX29iai0+aW50Zl9meG5zOwotCQlzdGF0dXMgPSAoKmludGZfZnhucy0+Y2hubF9nZXRf aW5mbykgKHN0cm1fdGFiW2ldLT5jaG5sX29iaiwKLQkJCQkJCQkgICZjaG5sX2luZm9fb2JqKTsK LQkJaWYgKHN0YXR1cykgewotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY2hubF9pbmZv X29iai5jaW9fY3MgPiAwKQotCQkJCSpwbWFzayB8PSAoMSA8PCBpKTsKLQotCQl9Ci0JfQotCWlm ICghc3RhdHVzICYmIHV0aW1lb3V0ID4gMCAmJiAqcG1hc2sgPT0gMCkgewotCQkvKiBOb24temVy byB0aW1lb3V0ICovCi0JCXN5bmNfZXZlbnRzID0ga21hbGxvYyhzdHJtcyAqIHNpemVvZihzdHJ1 Y3Qgc3luY19vYmplY3QgKiksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCWlmIChzeW5jX2V2 ZW50cyA9PSBOVUxMKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOwotCQl9IGVsc2UgewotCQkJZm9y IChpID0gMDsgaSA8IHN0cm1zOyBpKyspIHsKLQkJCQlpbnRmX2Z4bnMgPQotCQkJCSAgICBzdHJt X3RhYltpXS0+c3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7Ci0JCQkJc3RhdHVzID0gKCppbnRmX2Z4 bnMtPmNobmxfZ2V0X2luZm8pCi0JCQkJICAgIChzdHJtX3RhYltpXS0+Y2hubF9vYmosICZjaG5s X2luZm9fb2JqKTsKLQkJCQlpZiAoc3RhdHVzKQotCQkJCQlicmVhazsKLQkJCQllbHNlCi0JCQkJ CXN5bmNfZXZlbnRzW2ldID0KLQkJCQkJICAgIGNobmxfaW5mb19vYmouc3luY19ldmVudDsKLQot CQkJfQotCQl9Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlzdGF0dXMgPQotCQkJICAgIHN5bmNfd2Fp dF9vbl9tdWx0aXBsZV9ldmVudHMoc3luY19ldmVudHMsIHN0cm1zLAotCQkJCQkJCSB1dGltZW91 dCwgJmluZGV4KTsKLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJLyogU2luY2Ugd2Ugd2FpdGVkIG9u IHRoZSBldmVudCwgd2UgaGF2ZSB0bwotCQkJCSAqIHJlc2V0IGl0ICovCi0JCQkJc3luY19zZXRf ZXZlbnQoc3luY19ldmVudHNbaW5kZXhdKTsKLQkJCQkqcG1hc2sgPSAxIDw8IGluZGV4OwotCQkJ fQotCQl9Ci0JfQotZnVuY19lbmQ6Ci0Ja2ZyZWUoc3luY19ldmVudHMpOwotCi0JcmV0dXJuIHN0 YXR1czsKLX0KLQotLyoKLSAqICA9PT09PT09PSBkZWxldGVfc3RybSA9PT09PT09PQotICogIFB1 cnBvc2U6Ci0gKiAgICAgIEZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBhIHN0cmVh bS4KLSAqLwotc3RhdGljIGludCBkZWxldGVfc3RybShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVh bV9vYmopCi17Ci0Jc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7Ci0JaW50 IHN0YXR1cyA9IDA7Ci0KLQlpZiAoc3RyZWFtX29iaikgewotCQlpZiAoc3RyZWFtX29iai0+Y2hu bF9vYmopIHsKLQkJCWludGZfZnhucyA9IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9m eG5zOwotCQkJLyogQ2hhbm5lbCBjbG9zZSBjYW4gZmFpbCBvbmx5IGlmIHRoZSBjaGFubmVsIGhh bmRsZQotCQkJICogaXMgaW52YWxpZC4gKi8KLQkJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5jaG5s X2Nsb3NlKQotCQkJCQkoc3RyZWFtX29iai0+Y2hubF9vYmopOwotCQl9Ci0JCS8qIEZyZWUgYWxs IFNNIGFkZHJlc3MgdHJhbnNsYXRvciByZXNvdXJjZXMgKi8KLQkJa2ZyZWUoc3RyZWFtX29iai0+ eGxhdG9yKTsKLQkJa2ZyZWUoc3RyZWFtX29iaik7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzID0gLUVG QVVMVDsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLS0gCjEuOC41LjUKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRldmVsIG1haWxpbmcgbGlzdApkZXZl bEBsaW51eGRyaXZlcnByb2plY3Qub3JnCmh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbAo=