From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16459 invoked by alias); 25 Jun 2002 08:26:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 16424 invoked by uid 71); 25 Jun 2002 08:26:01 -0000 Resent-Date: 25 Jun 2002 08:26:01 -0000 Resent-Message-ID: <20020625082601.16423.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, d.mueller@elsoft.ch Received: (qmail 10431 invoked by uid 61); 25 Jun 2002 08:18:46 -0000 Message-Id: <20020625081846.10430.qmail@sources.redhat.com> Date: Tue, 25 Jun 2002 02:16:00 -0000 From: d.mueller@elsoft.ch Reply-To: d.mueller@elsoft.ch To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: other/7114: ICE building strcoll.op from glibc-2.2.5 X-SW-Source: 2002-06/txt/msg00580.txt.bz2 List-Id: >Number: 7114 >Category: other >Synopsis: ICE building strcoll.op from glibc-2.2.5 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Jun 25 01:26:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: d.mueller@elsoft.ch >Release: gcc-3.1 >Organization: >Environment: PowerPC PPC405GP based hardware, native gcc-3.1, native binutils-2.12.1, glibc-2.2.5 >Description: If the "-mmultiple" options is specified, GCC throws an ICE while compiling the profiled version of strcoll.c from the "string" subdirectory of glibc-2.2.5. If the "-mmultiple" option is removed, everything is fine. >How-To-Repeat: > gcc strcoll.i -c -O2 -Wall -Wbad-function-cast -Wcast-qual -Wcomment -Wcomments -Wfloat-equal -Winline -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmultichar -Wsign-compare -Wstrict-prototypes -Wtrigraphs -Wwrite-strings -mmultiple -msoft-float -mnew-mnemonics -Wa,-mppc -mpowerpc -pg -nostdinc -o ~/strcoll.op strcoll.c: In function `findidx': strcoll.c:549: Attempt to delete prologue/epilogue insn: (insn 693 692 695 (parallel[ (set (reg:SI 30 r30) (mem:SI (plus:SI (reg/f:SI 1 r1) (const_int 24 [0x18])) [1 S4 A8])) (set (reg/f:SI 31 r31) (mem:SI (plus:SI (reg/f:SI 1 r1) (const_int 28 [0x1c])) [1 S4 A8])) ] ) -1 (nil) (nil)) strcoll.c:549: Internal compiler error in propagate_one_insn, at flow.c:1615 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. > gcc strcoll.i -c -O2 -Wall -Wbad-function-cast -Wcast-qual -Wcomment -Wcomments -Wfloat-equal -Winline -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmultichar -Wsign-compare -Wstrict-prototypes -Wtrigraphs -Wwrite-strings -msoft-float -mnew-mnemonics -Wa,-mppc -mpowerpc -pg -nostdinc -o ~/strcoll.op >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="strcoll.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="strcoll.i" IyAxICJzdHJjb2xsLmMiDQojIDEgIjxidWlsdC1pbj4iDQojIDEgIjxjb21tYW5kIGxpbmU+Ig0K IyAxICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAxDQojIDU0ICIuLi9pbmNsdWRlL2xpYmMt c3ltYm9scy5oIg0KIyAxICIvaG9tZS9jb21waWxlci9idWlsZC1nbGliYy0yLjIuNS1nY2N0ZXN0 L2NvbmZpZy5oIiAxDQojIDU1ICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAyDQojIDIgIjxj b21tYW5kIGxpbmU+IiAyDQojIDEgInN0cmNvbGwuYyINCiMgMjAgInN0cmNvbGwuYyINCiMgMSAi Li4vaW5jbHVkZS9hc3NlcnQuaCIgMQ0KIyAxICIuLi9hc3NlcnQvYXNzZXJ0LmgiIDENCiMgMzYg Ii4uL2Fzc2VydC9hc3NlcnQuaCINCiMgMSAiLi4vaW5jbHVkZS9mZWF0dXJlcy5oIiAxDQojIDI4 MyAiLi4vaW5jbHVkZS9mZWF0dXJlcy5oIg0KIyAxICIuLi9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx DQojIDEgIi4uL21pc2Mvc3lzL2NkZWZzLmgiIDENCiMgMiAiLi4vaW5jbHVkZS9zeXMvY2RlZnMu aCIgMg0KIyAyODQgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMg0KIyAzNyAiLi4vYXNzZXJ0L2Fz c2VydC5oIiAyDQojIDY1ICIuLi9hc3NlcnQvYXNzZXJ0LmgiDQoNCg0KDQpleHRlcm4gdm9pZCBf X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9f Y29uc3QgY2hhciAqX19mdW5jdGlvbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOw0KDQoNCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0s IF9fY29uc3QgY2hhciAqX19maWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX2xpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7DQoNCg0KDQoNCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2Vy dGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQ0KICAgICBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQojIDIgIi4uL2luY2x1ZGUvYXNzZXJ0LmgiIDINCiMg MjEgInN0cmNvbGwuYyIgMg0KIyAxICIuLi9pbmNsdWRlL2xhbmdpbmZvLmgiIDENCiMgMSAiLi4v bG9jYWxlL2xhbmdpbmZvLmgiIDENCiMgMjQgIi4uL2xvY2FsZS9sYW5naW5mby5oIg0KIyAxICIu Li9pbmNsdWRlL25sX3R5cGVzLmgiIDENCiMgMSAiLi4vY2F0Z2V0cy9ubF90eXBlcy5oIiAxDQoj IDMxICIuLi9jYXRnZXRzL25sX3R5cGVzLmgiDQoNCg0KDQp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7 DQoNCg0KdHlwZWRlZiBpbnQgbmxfaXRlbTsNCg0KDQpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChf X2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIDsNCg0KDQoNCmV4dGVybiBjaGFy ICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsDQog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgOw0KDQoNCmV4dGVy biBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSA7DQoNCg0KIyAyICIuLi9pbmNsdWRl L25sX3R5cGVzLmgiIDINCiMgMjUgIi4uL2xvY2FsZS9sYW5naW5mby5oIiAyDQoNCiMgMSAiLi4v aW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxDQojIDEgIi4uL2xvY2FsZS9iaXRzL2xvY2FsZS5oIiAx DQojIDI3ICIuLi9sb2NhbGUvYml0cy9sb2NhbGUuaCINCmVudW0NCnsNCiAgX19MQ19DVFlQRSA9 IDAsDQogIF9fTENfTlVNRVJJQyA9IDEsDQogIF9fTENfVElNRSA9IDIsDQogIF9fTENfQ09MTEFU RSA9IDMsDQogIF9fTENfTU9ORVRBUlkgPSA0LA0KICBfX0xDX01FU1NBR0VTID0gNSwNCiAgX19M Q19BTEwgPSA2LA0KICBfX0xDX1BBUEVSID0gNywNCiAgX19MQ19OQU1FID0gOCwNCiAgX19MQ19B RERSRVNTID0gOSwNCiAgX19MQ19URUxFUEhPTkUgPSAxMCwNCiAgX19MQ19NRUFTVVJFTUVOVCA9 IDExLA0KICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTINCn07DQojIDIgIi4uL2luY2x1ZGUvYml0 cy9sb2NhbGUuaCIgMg0KIyAyNyAiLi4vbG9jYWxlL2xhbmdpbmZvLmgiIDINCg0KDQoNCiMgNDMg Ii4uL2xvY2FsZS9sYW5naW5mby5oIg0KZW51bQ0Kew0KDQoNCg0KICBBQkRBWV8xID0gKCgoX19M Q19USU1FKSA8PCAxNikgfCAoMCkpLA0KDQogIEFCREFZXzIsDQoNCiAgQUJEQVlfMywNCg0KICBB QkRBWV80LA0KDQogIEFCREFZXzUsDQoNCiAgQUJEQVlfNiwNCg0KICBBQkRBWV83LA0KDQoNCg0K ICBEQVlfMSwNCg0KICBEQVlfMiwNCg0KICBEQVlfMywNCg0KICBEQVlfNCwNCg0KICBEQVlfNSwN Cg0KICBEQVlfNiwNCg0KICBEQVlfNywNCg0KDQoNCiAgQUJNT05fMSwNCg0KICBBQk1PTl8yLA0K DQogIEFCTU9OXzMsDQoNCiAgQUJNT05fNCwNCg0KICBBQk1PTl81LA0KDQogIEFCTU9OXzYsDQoN CiAgQUJNT05fNywNCg0KICBBQk1PTl84LA0KDQogIEFCTU9OXzksDQoNCiAgQUJNT05fMTAsDQoN CiAgQUJNT05fMTEsDQoNCiAgQUJNT05fMTIsDQoNCg0KDQogIE1PTl8xLA0KDQogIE1PTl8yLA0K DQogIE1PTl8zLA0KDQogIE1PTl80LA0KDQogIE1PTl81LA0KDQogIE1PTl82LA0KDQogIE1PTl83 LA0KDQogIE1PTl84LA0KDQogIE1PTl85LA0KDQogIE1PTl8xMCwNCg0KICBNT05fMTEsDQoNCiAg TU9OXzEyLA0KDQoNCiAgQU1fU1RSLA0KDQogIFBNX1NUUiwNCg0KDQogIERfVF9GTVQsDQoNCiAg RF9GTVQsDQoNCiAgVF9GTVQsDQoNCiAgVF9GTVRfQU1QTSwNCg0KDQogIEVSQSwNCg0KICBfX0VS QV9ZRUFSLA0KDQoNCg0KICBFUkFfRF9GTVQsDQoNCiAgQUxUX0RJR0lUUywNCg0KICBFUkFfRF9U X0ZNVCwNCg0KICBFUkFfVF9GTVQsDQoNCg0KICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsDQog IF9OTF9USU1FX0VSQV9FTlRSSUVTLA0KDQogIF9OTF9XQUJEQVlfMSwNCiAgX05MX1dBQkRBWV8y LA0KICBfTkxfV0FCREFZXzMsDQogIF9OTF9XQUJEQVlfNCwNCiAgX05MX1dBQkRBWV81LA0KICBf TkxfV0FCREFZXzYsDQogIF9OTF9XQUJEQVlfNywNCg0KDQogIF9OTF9XREFZXzEsDQogIF9OTF9X REFZXzIsDQogIF9OTF9XREFZXzMsDQogIF9OTF9XREFZXzQsDQogIF9OTF9XREFZXzUsDQogIF9O TF9XREFZXzYsDQogIF9OTF9XREFZXzcsDQoNCg0KICBfTkxfV0FCTU9OXzEsDQogIF9OTF9XQUJN T05fMiwNCiAgX05MX1dBQk1PTl8zLA0KICBfTkxfV0FCTU9OXzQsDQogIF9OTF9XQUJNT05fNSwN CiAgX05MX1dBQk1PTl82LA0KICBfTkxfV0FCTU9OXzcsDQogIF9OTF9XQUJNT05fOCwNCiAgX05M X1dBQk1PTl85LA0KICBfTkxfV0FCTU9OXzEwLA0KICBfTkxfV0FCTU9OXzExLA0KICBfTkxfV0FC TU9OXzEyLA0KDQoNCiAgX05MX1dNT05fMSwNCiAgX05MX1dNT05fMiwNCiAgX05MX1dNT05fMywN CiAgX05MX1dNT05fNCwNCiAgX05MX1dNT05fNSwNCiAgX05MX1dNT05fNiwNCiAgX05MX1dNT05f NywNCiAgX05MX1dNT05fOCwNCiAgX05MX1dNT05fOSwNCiAgX05MX1dNT05fMTAsDQogIF9OTF9X TU9OXzExLA0KICBfTkxfV01PTl8xMiwNCg0KICBfTkxfV0FNX1NUUiwNCiAgX05MX1dQTV9TVFIs DQoNCiAgX05MX1dEX1RfRk1ULA0KICBfTkxfV0RfRk1ULA0KICBfTkxfV1RfRk1ULA0KICBfTkxf V1RfRk1UX0FNUE0sDQoNCiAgX05MX1dFUkFfWUVBUiwNCiAgX05MX1dFUkFfRF9GTVQsDQogIF9O TF9XQUxUX0RJR0lUUywNCiAgX05MX1dFUkFfRF9UX0ZNVCwNCiAgX05MX1dFUkFfVF9GTVQsDQoN CiAgX05MX1RJTUVfV0VFS19OREFZUywNCiAgX05MX1RJTUVfV0VFS18xU1REQVksDQogIF9OTF9U SU1FX1dFRUtfMVNUV0VFSywNCiAgX05MX1RJTUVfRklSU1RfV0VFS0RBWSwNCiAgX05MX1RJTUVf RklSU1RfV09SS0RBWSwNCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwNCiAgX05MX1RJTUVfVElN RVpPTkUsDQoNCiAgX0RBVEVfRk1ULA0KDQogIF9OTF9XX0RBVEVfRk1ULA0KDQogIF9OTF9USU1F X0NPREVTRVQsDQoNCiAgX05MX05VTV9MQ19USU1FLA0KDQoNCg0KDQogIF9OTF9DT0xMQVRFX05S VUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwNCiAgX05MX0NPTExBVEVfUlVM RVNFVFMsDQogIF9OTF9DT0xMQVRFX1RBQkxFTUIsDQogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLA0K ICBfTkxfQ09MTEFURV9FWFRSQU1CLA0KICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLA0KICBfTkxf Q09MTEFURV9HQVAxLA0KICBfTkxfQ09MTEFURV9HQVAyLA0KICBfTkxfQ09MTEFURV9HQVAzLA0K ICBfTkxfQ09MTEFURV9UQUJMRVdDLA0KICBfTkxfQ09MTEFURV9XRUlHSFRXQywNCiAgX05MX0NP TExBVEVfRVhUUkFXQywNCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywNCiAgX05MX0NPTExBVEVf U1lNQl9IQVNIX1NJWkVNQiwNCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLA0KICBfTkxfQ09M TEFURV9TWU1CX0VYVFJBTUIsDQogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwNCiAgX05MX0NPTExB VEVfQ09MTFNFUVdDLA0KICBfTkxfQ09MTEFURV9DT0RFU0VULA0KICBfTkxfTlVNX0xDX0NPTExB VEUsDQoNCg0KDQoNCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwg KDApKSwNCiAgX05MX0NUWVBFX1RPVVBQRVIsDQogIF9OTF9DVFlQRV9HQVAxLA0KICBfTkxfQ1RZ UEVfVE9MT1dFUiwNCiAgX05MX0NUWVBFX0dBUDIsDQogIF9OTF9DVFlQRV9DTEFTUzMyLA0KICBf TkxfQ1RZUEVfR0FQMywNCiAgX05MX0NUWVBFX0dBUDQsDQogIF9OTF9DVFlQRV9HQVA1LA0KICBf TkxfQ1RZUEVfR0FQNiwNCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLA0KICBfTkxfQ1RZUEVfTUFQ X05BTUVTLA0KICBfTkxfQ1RZUEVfV0lEVEgsDQogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLA0KICBf TkxfQ1RZUEVfQ09ERVNFVF9OQU1FLA0KICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFN RSwNCg0KICBfTkxfQ1RZUEVfVE9VUFBFUjMyLA0KICBfTkxfQ1RZUEVfVE9MT1dFUjMyLA0KICBf TkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULA0KICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwNCiAgX05MX0NU WVBFX0lORElHSVRTX01CX0xFTiwNCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwNCiAgX05MX0NU WVBFX0lORElHSVRTMV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwNCiAgX05MX0NUWVBF X0lORElHSVRTM19NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwNCiAgX05MX0NUWVBFX0lO RElHSVRTNV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwNCiAgX05MX0NUWVBFX0lORElH SVRTN19NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRT OV9NQiwNCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwNCiAgX05MX0NUWVBFX0lORElHSVRT MF9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTMl9X QywNCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywNCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywN CiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywNCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywNCiAg X05MX0NUWVBFX0lORElHSVRTN19XQywNCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywNCiAgX05M X0NUWVBFX0lORElHSVRTOV9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUMF9NQiwNCiAgX05MX0NU WVBFX09VVERJR0lUMV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwNCiAgX05MX0NUWVBF X09VVERJR0lUM19NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwNCiAgX05MX0NUWVBFX09V VERJR0lUNV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwNCiAgX05MX0NUWVBFX09VVERJ R0lUN19NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lU OV9NQiwNCiAgX05MX0NUWVBFX09VVERJR0lUMF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUMV9X QywNCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywN CiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywNCiAg X05MX0NUWVBFX09VVERJR0lUNl9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywNCiAgX05M X0NUWVBFX09VVERJR0lUOF9XQywNCiAgX05MX0NUWVBFX09VVERJR0lUOV9XQywNCiAgX05MX0NU WVBFX1RSQU5TTElUX1RBQl9TSVpFLA0KICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsDQog IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lE WCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwNCiAgX05MX0NUWVBFX1RSQU5TTElUX0RF RkFVTFRfTUlTU0lOR19MRU4sDQogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcs DQogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLA0KICBfTkxfQ1RZUEVfVFJBTlNMSVRf SUdOT1JFLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsDQogIF9OTF9DVFlQRV9FWFRSQV9NQVBf MiwNCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsDQog IF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwNCiAgX05MX0NUWVBFX0VYVFJBX01BUF82LA0KICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzcsDQogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwNCiAgX05MX0NUWVBF X0VYVFJBX01BUF85LA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLA0KICBfTkxfQ1RZUEVfRVhU UkFfTUFQXzExLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLA0KICBfTkxfQ1RZUEVfRVhUUkFf TUFQXzEzLA0KICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LA0KICBfTkxfTlVNX0xDX0NUWVBFLA0K DQoNCg0KDQogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgoX19MQ19NT05FVEFSWSkgPDwgMTYpIHwg KDApKSwNCg0KDQoNCiAgX19DVVJSRU5DWV9TWU1CT0wsDQoNCg0KDQogIF9fTU9OX0RFQ0lNQUxf UE9JTlQsDQoNCg0KDQogIF9fTU9OX1RIT1VTQU5EU19TRVAsDQoNCg0KDQogIF9fTU9OX0dST1VQ SU5HLA0KDQoNCg0KICBfX1BPU0lUSVZFX1NJR04sDQoNCg0KDQogIF9fTkVHQVRJVkVfU0lHTiwN Cg0KDQoNCiAgX19JTlRfRlJBQ19ESUdJVFMsDQoNCg0KDQogIF9fRlJBQ19ESUdJVFMsDQoNCg0K DQogIF9fUF9DU19QUkVDRURFUywNCg0KDQoNCiAgX19QX1NFUF9CWV9TUEFDRSwNCg0KDQoNCiAg X19OX0NTX1BSRUNFREVTLA0KDQoNCg0KICBfX05fU0VQX0JZX1NQQUNFLA0KDQoNCg0KICBfX1Bf U0lHTl9QT1NOLA0KDQoNCg0KICBfX05fU0lHTl9QT1NOLA0KDQoNCg0KICBfTkxfTU9ORVRBUllf Q1JOQ1lTVFIsDQoNCiAgX19JTlRfUF9DU19QUkVDRURFUywNCg0KDQoNCiAgX19JTlRfUF9TRVBf QllfU1BBQ0UsDQoNCg0KDQogIF9fSU5UX05fQ1NfUFJFQ0VERVMsDQoNCg0KDQogIF9fSU5UX05f U0VQX0JZX1NQQUNFLA0KDQoNCg0KICBfX0lOVF9QX1NJR05fUE9TTiwNCg0KDQoNCiAgX19JTlRf Tl9TSUdOX1BPU04sDQoNCg0KDQogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLA0K ICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwNCiAgX05MX01PTkVUQVJZX0RVT19J TlRfRlJBQ19ESUdJVFMsDQogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsDQogIF9OTF9N T05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywNCiAgX05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9T UEFDRSwNCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLA0KICBfTkxfTU9ORVRBUllf RFVPX05fU0VQX0JZX1NQQUNFLA0KICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NTX1BSRUNFREVT LA0KICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwNCiAgX05MX01PTkVUQVJZ X0RVT19JTlRfTl9DU19QUkVDRURFUywNCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TRVBfQllf U1BBQ0UsDQogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sDQogIF9OTF9NT05FVEFSWV9E VU9fTl9TSUdOX1BPU04sDQogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLA0KICBf TkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwNCiAgX05MX01PTkVUQVJZX1VOT19WQUxJ RF9GUk9NLA0KICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLA0KICBfTkxfTU9ORVRBUllfRFVP X1ZBTElEX0ZST00sDQogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sDQogIF9OTF9NT05FVEFS WV9DT05WRVJTSU9OX1JBVEUsDQogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLA0KICBf TkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywNCiAgX05MX01PTkVUQVJZX0NPREVTRVQsDQog IF9OTF9OVU1fTENfTU9ORVRBUlksDQoNCg0KDQogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENf TlVNRVJJQykgPDwgMTYpIHwgKDApKSwNCg0KDQoNCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BP SU5ULA0KDQogIF9fVEhPVVNBTkRTX1NFUCwNCg0KDQoNCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRT X1NFUCwNCg0KICBfX0dST1VQSU5HLA0KDQoNCg0KICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5U X1dDLA0KICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLA0KICBfTkxfTlVNRVJJQ19DT0RF U0VULA0KICBfTkxfTlVNX0xDX05VTUVSSUMsDQoNCiAgX19ZRVNFWFBSID0gKCgoX19MQ19NRVNT QUdFUykgPDwgMTYpIHwgKDApKSwNCg0KICBfX05PRVhQUiwNCg0KICBfX1lFU1NUUiwNCg0KDQoN CiAgX19OT1NUUiwNCg0KDQoNCiAgX05MX01FU1NBR0VTX0NPREVTRVQsDQogIF9OTF9OVU1fTENf TUVTU0FHRVMsDQoNCiAgX05MX1BBUEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8 ICgwKSksDQogIF9OTF9QQVBFUl9XSURUSCwNCiAgX05MX1BBUEVSX0NPREVTRVQsDQogIF9OTF9O VU1fTENfUEFQRVIsDQoNCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2 KSB8ICgwKSksDQogIF9OTF9OQU1FX05BTUVfR0VOLA0KICBfTkxfTkFNRV9OQU1FX01SLA0KICBf TkxfTkFNRV9OQU1FX01SUywNCiAgX05MX05BTUVfTkFNRV9NSVNTLA0KICBfTkxfTkFNRV9OQU1F X01TLA0KICBfTkxfTkFNRV9DT0RFU0VULA0KICBfTkxfTlVNX0xDX05BTUUsDQoNCiAgX05MX0FE RFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwNCiAgX05M X0FERFJFU1NfQ09VTlRSWV9OQU1FLA0KICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsDQogIF9O TF9BRERSRVNTX0NPVU5UUllfQUIyLA0KICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywNCiAgX05M X0FERFJFU1NfQ09VTlRSWV9DQVIsDQogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLA0KICBfTkxf QUREUkVTU19DT1VOVFJZX0lTQk4sDQogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwNCiAgX05MX0FE RFJFU1NfTEFOR19BQiwNCiAgX05MX0FERFJFU1NfTEFOR19URVJNLA0KICBfTkxfQUREUkVTU19M QU5HX0xJQiwNCiAgX05MX0FERFJFU1NfQ09ERVNFVCwNCiAgX05MX05VTV9MQ19BRERSRVNTLA0K DQogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYp IHwgKDApKSwNCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwNCiAgX05MX1RFTEVQSE9ORV9J TlRfU0VMRUNULA0KICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsDQogIF9OTF9URUxFUEhPTkVf Q09ERVNFVCwNCiAgX05MX05VTV9MQ19URUxFUEhPTkUsDQoNCiAgX05MX01FQVNVUkVNRU5UX01F QVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwNCiAgX05MX01F QVNVUkVNRU5UX0NPREVTRVQsDQogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsDQoNCiAgX05MX0lE RU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDAp KSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX0FE RFJFU1MsDQogIF9OTF9JREVOVElGSUNBVElPTl9DT05UQUNULA0KICBfTkxfSURFTlRJRklDQVRJ T05fRU1BSUwsDQogIF9OTF9JREVOVElGSUNBVElPTl9URUwsDQogIF9OTF9JREVOVElGSUNBVElP Tl9GQVgsDQogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwNCiAgX05MX0lERU5USUZJQ0FU SU9OX1RFUlJJVE9SWSwNCiAgX05MX0lERU5USUZJQ0FUSU9OX0FVRElFTkNFLA0KICBfTkxfSURF TlRJRklDQVRJT05fQVBQTElDQVRJT04sDQogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJQVRJ T04sDQogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwNCiAgX05MX0lERU5USUZJQ0FUSU9O X0RBVEUsDQogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwNCiAgX05MX0lERU5USUZJQ0FU SU9OX0NPREVTRVQsDQogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sDQoNCg0KICBfTkxfTlVN DQp9Ow0KIyA1NzUgIi4uL2xvY2FsZS9sYW5naW5mby5oIg0KZXh0ZXJuIGNoYXIgKm5sX2xhbmdp bmZvIChubF9pdGVtIF9faXRlbSkgOw0KDQoNCg0KDQoNCg0KDQojIDEgIi4uL2luY2x1ZGUveGxv Y2FsZS5oIiAxDQojIDEgIi4uL2xvY2FsZS94bG9jYWxlLmgiIDENCiMgMjggIi4uL2xvY2FsZS94 bG9jYWxlLmgiDQp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QNCnsNCg0KICBzdHJ1Y3Qg bG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107DQoNCg0KICBjb25zdCB1bnNpZ25lZCBzaG9ydCBp bnQgKl9fY3R5cGVfYjsNCiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7DQogIGNvbnN0IGlu dCAqX19jdHlwZV90b3VwcGVyOw0KfSAqX19sb2NhbGVfdDsNCiMgMiAiLi4vaW5jbHVkZS94bG9j YWxlLmgiIDINCiMgNTg0ICIuLi9sb2NhbGUvbGFuZ2luZm8uaCIgMg0KDQoNCmV4dGVybiBjaGFy ICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOw0KDQoNCg0K IyAyICIuLi9pbmNsdWRlL2xhbmdpbmZvLmgiIDINCiMgMjIgInN0cmNvbGwuYyIgMg0KIyAxICIu Li9pbmNsdWRlL2xvY2FsZS5oIiAxDQoNCiMgMSAiLi4vbG9jYWxlL2xvY2FsZS5oIiAxDQojIDI5 ICIuLi9sb2NhbGUvbG9jYWxlLmgiDQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtu b3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDMwICIuLi9sb2NhbGUv bG9jYWxlLmgiIDINCiMgMSAiLi4vaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxDQojIDEgIi4uL2xv Y2FsZS9iaXRzL2xvY2FsZS5oIiAxDQojIDIgIi4uL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMg0K IyAzMSAiLi4vbG9jYWxlL2xvY2FsZS5oIiAyDQoNCg0KIyA1MiAiLi4vbG9jYWxlL2xvY2FsZS5o Ig0Kc3RydWN0IGxjb252DQp7DQoNCg0KICBjaGFyICpkZWNpbWFsX3BvaW50Ow0KICBjaGFyICp0 aG91c2FuZHNfc2VwOw0KDQoNCg0KDQoNCiAgY2hhciAqZ3JvdXBpbmc7DQoNCg0KDQoNCg0KICBj aGFyICppbnRfY3Vycl9zeW1ib2w7DQogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsNCiAgY2hhciAq bW9uX2RlY2ltYWxfcG9pbnQ7DQogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOw0KICBjaGFyICpt b25fZ3JvdXBpbmc7DQogIGNoYXIgKnBvc2l0aXZlX3NpZ247DQogIGNoYXIgKm5lZ2F0aXZlX3Np Z247DQogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOw0KICBjaGFyIGZyYWNfZGlnaXRzOw0KDQogIGNo YXIgcF9jc19wcmVjZWRlczsNCg0KICBjaGFyIHBfc2VwX2J5X3NwYWNlOw0KDQogIGNoYXIgbl9j c19wcmVjZWRlczsNCg0KICBjaGFyIG5fc2VwX2J5X3NwYWNlOw0KDQoNCg0KDQoNCg0KICBjaGFy IHBfc2lnbl9wb3NuOw0KICBjaGFyIG5fc2lnbl9wb3NuOw0KDQoNCiAgY2hhciBpbnRfcF9jc19w cmVjZWRlczsNCg0KICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsNCg0KICBjaGFyIGludF9uX2Nz X3ByZWNlZGVzOw0KDQogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOw0KDQoNCg0KDQoNCg0KICBj aGFyIGludF9wX3NpZ25fcG9zbjsNCiAgY2hhciBpbnRfbl9zaWduX3Bvc247DQojIDExOSAiLi4v bG9jYWxlL2xvY2FsZS5oIg0KfTsNCg0KDQoNCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBf X2NhdGVnb3J5LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSA7DQoNCg0KZXh0ZXJuIHN0cnVjdCBs Y29udiAqbG9jYWxlY29udiAodm9pZCkgOw0KIyAxNDEgIi4uL2xvY2FsZS9sb2NhbGUuaCINCiMg MSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDENCiMgMTQyICIuLi9sb2NhbGUvbG9jYWxlLmgiIDIN Cg0KDQoNCg0KDQoNCg0KZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVn b3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIDsNCg0KDQoNCmV4dGVybiBfX2xvY2FsZV90IF9f ZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOw0KDQoNCg0KZXh0ZXJuIHZvaWQgX19m cmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOw0KDQoNCg0KIyAzICIuLi9pbmNsdWRl L2xvY2FsZS5oIiAyDQoNCg0KZXh0ZXJuIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QgX25sX0NfbG9j b2JqOw0KDQoNCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKl9fbG9jYWxlY29udiAodm9pZCk7DQojIDIz ICJzdHJjb2xsLmMiIDINCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGlu dXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGli L3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVk ZWYgaW50IHB0cmRpZmZfdDsNCiMgMjAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93 bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgdW5zaWduZWQgaW50 IHNpemVfdDsNCiMgMjk0ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1n bnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsNCiMg MjQgInN0cmNvbGwuYyIgMg0KIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiIDENCiMg MjcgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCINCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmlj L2JpdHMvd2NoYXIuaCIgMQ0KIyAyOCAiLi4vc3lzZGVwcy9nZW5lcmljL3N0ZGludC5oIiAyDQoj IDEgIi4uL3N5c2RlcHMvd29yZHNpemUtMzIvYml0cy93b3Jkc2l6ZS5oIiAxDQojIDI5ICIuLi9z eXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiIDINCiMgMzcgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRp bnQuaCINCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90Ow0KdHlwZWRlZiBzaG9ydCBpbnQgaW50 MTZfdDsNCnR5cGVkZWYgaW50IGludDMyX3Q7DQoNCg0KDQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVm IGxvbmcgbG9uZyBpbnQgaW50NjRfdDsNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVp bnQ4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsNCg0KdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDMyX3Q7DQoNCg0KDQoNCg0KX19leHRlbnNpb25fXw0KdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90Ow0KDQoNCg0KDQoNCg0KdHlwZWRlZiBzaWdu ZWQgY2hhciBpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Ow0K dHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsNCg0KDQoNCl9fZXh0ZW5zaW9uX18NCnR5cGVkZWYg bG9uZyBsb25nIGludCBpbnRfbGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZf dDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90Ow0KDQoNCg0KX19leHRlbnNp b25fXw0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90Ow0KDQoN Cg0KDQoNCg0KdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsNCg0KDQoNCg0KDQp0eXBl ZGVmIGludCBpbnRfZmFzdDE2X3Q7DQp0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7DQpfX2V4dGVu c2lvbl9fDQp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90Ow0KDQoNCg0KdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVk IGludCB1aW50X2Zhc3QxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsN Cl9fZXh0ZW5zaW9uX18NCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zhc3Q2 NF90Ow0KIyAxMjYgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCINCnR5cGVkZWYgaW50IGlu dHB0cl90Ow0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsNCiMgMTM4ICIuLi9z eXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiDQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVmIGxvbmcgbG9u ZyBpbnQgaW50bWF4X3Q7DQpfX2V4dGVuc2lvbl9fDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgdWludG1heF90Ow0KIyAyNSAic3RyY29sbC5jIiAyDQojIDEgIi4uL2luY2x1ZGUvc3Rk bGliLmgiIDENCg0KDQoNCg0KDQoNCiMgMSAiLi4vc3RkbGliL3N0ZGxpYi5oIiAxDQojIDMzICIu Li9zdGRsaWIvc3RkbGliLmgiDQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3du LWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDM0ICIuLi9zdGRsaWIvc3Rk bGliLmgiIDINCg0KDQoNCg0KDQoNCg0KDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2JpdHMvd2FpdGZsYWdzLmgiIDENCiMgNDMgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMg0KIyAxICIu Li9zeXNkZXBzL2dlbmVyaWMvYml0cy93YWl0c3RhdHVzLmgiIDENCiMgNjMgIi4uL3N5c2RlcHMv Z2VuZXJpYy9iaXRzL3dhaXRzdGF0dXMuaCINCiMgMSAiLi4vaW5jbHVkZS9lbmRpYW4uaCIgMQ0K IyAxICIuLi9zdHJpbmcvZW5kaWFuLmgiIDENCiMgMzcgIi4uL3N0cmluZy9lbmRpYW4uaCINCiMg MSAiLi4vc3lzZGVwcy9wb3dlcnBjL2JpdHMvZW5kaWFuLmgiIDENCiMgMzggIi4uL3N0cmluZy9l bmRpYW4uaCIgMg0KIyAyICIuLi9pbmNsdWRlL2VuZGlhbi5oIiAyDQojIDY0ICIuLi9zeXNkZXBz L2dlbmVyaWMvYml0cy93YWl0c3RhdHVzLmgiIDINCg0KdW5pb24gd2FpdA0KICB7DQogICAgaW50 IHdfc3RhdHVzOw0KICAgIHN0cnVjdA0KICAgICAgew0KDQoNCg0KDQoNCg0KDQogICAgICAgIHVu c2lnbmVkIGludDoxNjsNCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7DQogICAg ICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsNCiAgICAgICAgdW5zaWduZWQgaW50IF9f d190ZXJtc2lnOjc7DQoNCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7DQogICAgc3RydWN0DQog ICAgICB7DQoNCg0KDQoNCg0KDQogICAgICAgIHVuc2lnbmVkIGludDoxNjsNCiAgICAgICAgdW5z aWduZWQgaW50IF9fd19zdG9wc2lnOjg7DQogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZh bDo4Ow0KDQogICAgICB9IF9fd2FpdF9zdG9wcGVkOw0KICB9Ow0KIyA0NCAiLi4vc3RkbGliL3N0 ZGxpYi5oIiAyDQojIDY4ICIuLi9zdGRsaWIvc3RkbGliLmgiDQp0eXBlZGVmIHVuaW9uDQogIHsN CiAgICB1bmlvbiB3YWl0ICpfX3VwdHI7DQogICAgaW50ICpfX2lwdHI7DQogIH0gX19XQUlUX1NU QVRVUyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7DQojIDk0ICIuLi9z dGRsaWIvc3RkbGliLmgiDQp0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgaW50IHF1b3Q7DQogICAg aW50IHJlbTsNCiAgfSBkaXZfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQogIHsNCiAgICBsb25n IGludCBxdW90Ow0KICAgIGxvbmcgaW50IHJlbTsNCiAgfSBsZGl2X3Q7DQoNCg0KDQoNCg0KX19l eHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgbG9uZyBsb25nIGludCBxdW90Ow0K ICAgIGxvbmcgbG9uZyBpbnQgcmVtOw0KICB9IGxsZGl2X3Q7DQojIDEzMyAiLi4vc3RkbGliL3N0 ZGxpYi5oIg0KZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7DQoN Cg0KDQpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVybiBsb25nIGludCBhdG9sIChf X2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpf X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9f bnB0cikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpleHRlcm4gZG91 YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgOw0KDQoNCg0KZXh0ZXJuIGZs b2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7DQoNCmV4dGVybiBsb25nIGRv dWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7DQoNCg0KDQpl eHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0K ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UpIDsNCg0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpDQogICAgIDsNCg0KDQoNCl9f ZXh0ZW5zaW9uX18NCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQ0KICAgICA7DQoNCg0KDQoNCg0KDQpfX2V4 dGVuc2lvbl9fDQpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpDQogICAgIDsNCiMgMjExICIuLi9zdGRs aWIvc3RkbGliLmgiDQojIDEgIi4uL2luY2x1ZGUveGxvY2FsZS5oIiAxDQojIDIxMiAiLi4vc3Rk bGliL3N0ZGxpYi5oIiAyDQoNCg0KDQpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7DQoNCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu dCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9j YWxlX3QgX19sb2MpIDsNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z dHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg Ow0KDQpfX2V4dGVuc2lvbl9fDQpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRv dWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf X2xvY2FsZV90IF9fbG9jKQ0KICAgICA7DQoNCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpDQogICAgIDsNCg0K ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs DQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9f bG9jYWxlX3QgX19sb2MpIDsNCg0KZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOw0KDQoNCg0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBf X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19ncm91cCkNCiAgICAgOw0KZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApDQogICAgIDsNCmV4 dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2dyb3VwKSA7DQoNCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7DQoNCg0KDQpl eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOw0KDQoN Cg0KDQpfX2V4dGVuc2lvbl9fDQpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91 cCkgOw0KDQoNCg0KX19leHRlbnNpb25fXw0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkNCiAgICAgOw0KDQoNCg0KDQoNCg0K DQpleHRlcm4gX19pbmxpbmUgZG91YmxlDQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQ0Kew0KICByZXR1cm4gX19zdHJ0 b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOw0KfQ0KZXh0ZXJuIF9faW5saW5lIGxv bmcgaW50DQpzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19z dHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7DQp9DQpleHRlcm4g X19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQNCnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLA0KICAgICAgICAgaW50IF9f YmFzZSkNCnsNCiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsNCn0NCg0KDQpleHRlcm4gX19pbmxpbmUgZmxvYXQNCnN0cnRvZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpDQp7 DQogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7DQp9DQpl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUNCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQ0Kew0KICByZXR1cm4gX19z dHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsNCn0NCg0KDQoNCl9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQNCnN0cnRvcSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsDQogICAgICAg IGludCBfX2Jhc2UpDQp7DQogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7DQp9DQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNp Z25lZCBsb25nIGxvbmcgaW50DQpzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwNCiAgICAgICAgIGludCBfX2Jhc2UpDQp7 DQogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOw0KfQ0KDQoNCg0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGlu dA0Kc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsDQogICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19zdHJ0 b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOw0KfQ0KX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludA0Kc3RydG91bGwgKF9f Y29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwNCiAgICAgICAgICBpbnQgX19iYXNlKQ0Kew0KICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsNCn0NCg0KDQpleHRlcm4gX19pbmxpbmUg ZG91YmxlDQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikNCnsNCiAgcmV0dXJuIHN0cnRvZCAo X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkpOw0KfQ0KZXh0ZXJuIF9faW5saW5lIGludA0K YXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpDQp7DQogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9f bnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7DQp9DQpleHRlcm4gX19pbmxpbmUgbG9u ZyBpbnQNCmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQ0Kew0KICByZXR1cm4gc3RydG9sIChf X25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOw0KfQ0KDQoNCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQNCmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0 cikNCnsNCiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAx MCk7DQp9DQojIDM4NCAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIGNoYXIgKmw2NGEgKGxv bmcgaW50IF9fbikgOw0KDQoNCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9f cykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KIyAxICIuLi9pbmNsdWRlL3N5cy90 eXBlcy5oIiAxDQojIDEgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAxDQojIDI4ICIuLi9wb3NpeC9z eXMvdHlwZXMuaCINCg0KDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvdHlw ZXMuaCIgMQ0KIyAyOSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90eXBlcy5oIg0K IyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMw0KIyAzMCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90 eXBlcy5oIiAyDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOw0KdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Ow0K dHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOw0KDQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90Ow0KX19leHRlbnNpb25fXyB0eXBlZGVm IGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7DQojIDQ5ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51 eC9iaXRzL3R5cGVzLmgiDQp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Ow0KdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIF9fdWludDhfdDsNCnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2 X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Ow0KdHlwZWRlZiBzaWdu ZWQgaW50IF9faW50MzJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7DQoNCl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7DQpfX2V4 dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90Ow0KDQp0 eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7DQoNCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90 Ow0KdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7DQp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsNCnR5 cGVkZWYgX191X2xvbmcgX19pbm9fdDsNCnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsNCnR5cGVk ZWYgX191X2ludCBfX25saW5rX3Q7DQp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7DQp0eXBlZGVm IF9fcXVhZF90IF9fbG9mZl90Ow0KdHlwZWRlZiBpbnQgX19waWRfdDsNCnR5cGVkZWYgaW50IF9f c3NpemVfdDsNCnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7DQp0eXBlZGVmIF9fdV9xdWFkX3Qg X19ybGltNjRfdDsNCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7DQoNCnR5cGVkZWYgc3RydWN0DQog IHsNCiAgICBpbnQgX192YWxbMl07DQogIH0gX19mc2lkX3Q7DQoNCg0KdHlwZWRlZiBpbnQgX19k YWRkcl90Ow0KdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7DQp0eXBlZGVmIGxvbmcgaW50IF9fdGlt ZV90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Ow0KdHlwZWRlZiBsb25nIGlu dCBfX3N1c2Vjb25kc190Ow0KdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7DQoNCnR5cGVkZWYg bG9uZyBpbnQgX19jbG9ja190Ow0KDQoNCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90Ow0KDQoNCnR5 cGVkZWYgaW50IF9fdGltZXJfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IF9fa2V5X3Q7DQoN Cg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7DQoNCg0KDQp0eXBlZGVm IGxvbmcgaW50IF9fYmxrc2l6ZV90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250 X3Q7DQp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsNCg0KDQp0eXBlZGVmIF9fdV9sb25n IF9fZnNibGtjbnRfdDsNCnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsNCg0KDQp0 eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsNCnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmls Y250NjRfdDsNCg0KDQp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90Ow0KDQoNCnR5cGVkZWYg X19sb2ZmX3QgX19vZmY2NF90Ow0KDQoNCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Ow0K dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90Ow0KDQoNCnR5cGVkZWYgaW50 IF9faW50cHRyX3Q7DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7DQoNCg0K DQoNCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBl cy5oIiAxDQojIDIzICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMvcHRocmVh ZHR5cGVzLmgiDQojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2NoZWQuaCIg MQ0KIyA2OCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zY2hlZC5oIg0Kc3RydWN0 IF9fc2NoZWRfcGFyYW0NCiAgew0KICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Ow0KICB9Ow0KIyAy NCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBlcy5oIiAy DQoNCg0Kc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrDQp7DQogIGxvbmcgaW50IF9fc3RhdHVzOw0K ICBpbnQgX19zcGlubG9jazsNCg0KfTsNCg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rl c2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX19w dGhyZWFkX2F0dHJfcw0Kew0KICBpbnQgX19kZXRhY2hzdGF0ZTsNCiAgaW50IF9fc2NoZWRwb2xp Y3k7DQogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsNCiAgaW50IF9faW5oZXJp dHNjaGVkOw0KICBpbnQgX19zY29wZTsNCiAgc2l6ZV90IF9fZ3VhcmRzaXplOw0KICBpbnQgX19z dGFja2FkZHJfc2V0Ow0KICB2b2lkICpfX3N0YWNrYWRkcjsNCiAgc2l6ZV90IF9fc3RhY2tzaXpl Ow0KfSBwdGhyZWFkX2F0dHJfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIHN0cnVjdCBf cHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsNCiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7 DQp9IHB0aHJlYWRfY29uZF90Ow0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgaW50IF9fZHVt bXk7DQp9IHB0aHJlYWRfY29uZGF0dHJfdDsNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhy ZWFkX2tleV90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIGludCBfX21fcmVzZXJ2 ZWQ7DQogIGludCBfX21fY291bnQ7DQogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsNCiAgaW50 IF9fbV9raW5kOw0KICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7DQp9IHB0aHJl YWRfbXV0ZXhfdDsNCg0KDQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIGludCBfX211dGV4a2luZDsN Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsNCg0KDQoNCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90 Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdA0Kew0KICBzdHJ1Y3Qg X3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOw0KICBpbnQgX19yd19yZWFkZXJzOw0KICBfcHRo cmVhZF9kZXNjciBfX3J3X3dyaXRlcjsNCiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRp bmc7DQogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsNCiAgaW50IF9fcndfa2lu ZDsNCiAgaW50IF9fcndfcHNoYXJlZDsNCn0gcHRocmVhZF9yd2xvY2tfdDsNCg0KDQoNCnR5cGVk ZWYgc3RydWN0DQp7DQogIGludCBfX2xvY2traW5kOw0KICBpbnQgX19wc2hhcmVkOw0KfSBwdGhy ZWFkX3J3bG9ja2F0dHJfdDsNCg0KDQoNCg0KdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z cGlubG9ja190Ow0KDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs b2NrIF9fYmFfbG9jazsNCiAgaW50IF9fYmFfcmVxdWlyZWQ7DQogIGludCBfX2JhX3ByZXNlbnQ7 DQogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsNCn0gcHRocmVhZF9iYXJyaWVyX3Q7DQoN Cg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBpbnQgX19wc2hhcmVkOw0KfSBwdGhyZWFkX2JhcnJpZXJh dHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7DQoj IDE0NCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90eXBlcy5oIiAyDQojIDMxICIu Li9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCg0KdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7DQp0 eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiBfX3VfaW50IHVfaW50Ow0KdHlwZWRl ZiBfX3VfbG9uZyB1X2xvbmc7DQp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsNCnR5cGVkZWYgX191 X3F1YWRfdCB1X3F1YWRfdDsNCnR5cGVkZWYgX19mc2lkX3QgZnNpZF90Ow0KDQoNCg0KDQp0eXBl ZGVmIF9fbG9mZl90IGxvZmZfdDsNCg0KDQoNCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsNCg0KDQoN Cg0KDQoNCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7DQoNCg0KDQoNCnR5cGVkZWYgX19kZXZf dCBkZXZfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX2dpZF90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVm IF9fbW9kZV90IG1vZGVfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsNCg0K DQoNCg0KdHlwZWRlZiBfX3VpZF90IHVpZF90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgX19vZmZfdCBv ZmZfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7DQoNCg0KDQoNCnR5 cGVkZWYgX19waWRfdCBwaWRfdDsNCg0KDQoNCg0KdHlwZWRlZiBfX2lkX3QgaWRfdDsNCg0KDQoN Cg0KdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIF9fZGFkZHJf dCBkYWRkcl90Ow0KdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsNCg0KDQoNCg0KDQp0eXBlZGVm IF9fa2V5X3Qga2V5X3Q7DQojIDEzMiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiDQojIDEgIi4uL2lu Y2x1ZGUvdGltZS5oIiAxDQoNCg0KIyAxICIuLi90aW1lL3RpbWUuaCIgMQ0KIyA1OSAiLi4vdGlt ZS90aW1lLmgiDQp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190Ow0KIyA3MCAiLi4vdGltZS90aW1l LmgiDQp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsNCiMgODIgIi4uL3RpbWUvdGltZS5oIg0KdHlw ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7DQojIDk0ICIuLi90aW1lL3RpbWUuaCINCnR5cGVk ZWYgX190aW1lcl90IHRpbWVyX3Q7DQojIDQgIi4uL2luY2x1ZGUvdGltZS5oIiAyDQojIDEzMyAi Li4vcG9zaXgvc3lzL3R5cGVzLmgiIDINCg0KDQoNCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv bmRzX3Q7DQoNCg0KDQp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7DQoNCg0KDQoN Cg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNDcgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyDQoNCg0K DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOw0KdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBpbnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsNCiMgMTk2ICIuLi9wb3Np eC9zeXMvdHlwZXMuaCINCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOw0KdHlwZWRlZiB1bnNpZ25lZCBp bnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOw0KdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f KSkpOw0KDQp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X193b3JkX18pKSk7DQojIDIxMiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiDQojIDEgIi4uL2luY2x1 ZGUvZW5kaWFuLmgiIDENCiMgMjEzICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCiMgMSAi Li4vaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDENCg0KIyAxICIuLi9taXNjL3N5cy9zZWxlY3QuaCIg MQ0KIyAzMSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiDQojIDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9i aXRzL3NlbGVjdC5oIiAxDQojIDMyICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMg0KDQoNCiMgMSAi Li4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdzZXQuaCIgMQ0KIyAyMyAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdzZXQuaCINCnR5cGVkZWYgaW50IF9fc2lnX2F0 b21pY190Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdA0KICB7DQogICAgdW5zaWduZWQgbG9uZyBp bnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOw0KICB9 IF9fc2lnc2V0X3Q7DQojIDM1ICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMg0KDQoNCg0KdHlwZWRl ZiBfX3NpZ3NldF90IHNpZ3NldF90Ow0KDQoNCg0KDQoNCiMgMSAiLi4vaW5jbHVkZS90aW1lLmgi IDENCg0KDQojIDEgIi4uL3RpbWUvdGltZS5oIiAxDQojIDEwNiAiLi4vdGltZS90aW1lLmgiDQpz dHJ1Y3QgdGltZXNwZWMNCiAgew0KICAgIF9fdGltZV90IHR2X3NlYzsNCiAgICBsb25nIGludCB0 dl9uc2VjOw0KICB9Ow0KIyA0ICIuLi9pbmNsdWRlL3RpbWUuaCIgMg0KIyA0NSAiLi4vbWlzYy9z eXMvc2VsZWN0LmgiIDINCg0KIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3Rp bWUuaCIgMQ0KIyA2MyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy90aW1lLmgiDQpz dHJ1Y3QgdGltZXZhbA0KICB7DQogICAgX190aW1lX3QgdHZfc2VjOw0KICAgIF9fc3VzZWNvbmRz X3QgdHZfdXNlYzsNCiAgfTsNCiMgNDcgIi4uL21pc2Mvc3lzL3NlbGVjdC5oIiAyDQojIDU1ICIu Li9taXNjL3N5cy9zZWxlY3QuaCINCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOw0KDQoNCg0K DQoNCg0KDQp0eXBlZGVmIHN0cnVjdA0KICB7DQoNCg0KDQogICAgX19mZF9tYXNrIGZkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOw0KDQoNCg0KDQoNCiAgfSBmZF9zZXQ7 DQoNCg0KDQoNCg0KDQp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOw0KIyA5NSAiLi4vbWlzYy9z eXMvc2VsZWN0LmgiDQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRz LCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLA0KICAgICAgICAgICAgICAgICAgIGZkX3Nl dCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLA0KICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y ZXN0cmljdCBfX2V4Y2VwdGZkcywNCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAq X19yZXN0cmljdCBfX3RpbWVvdXQpIDsNCg0KDQoNCg0KDQpleHRlcm4gaW50IHBzZWxlY3QgKGlu dCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsDQogICAgICAgICAgICAgICAg ICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLA0KICAgICAgICAgICAgICAgICAgICBm ZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsDQogICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSA7DQoNCg0KDQojIDMg Ii4uL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyDQoNCg0KZXh0ZXJuIGludCBfX3BzZWxlY3QgKGlu dCBfX25mZHMsIGZkX3NldCAqX19yZWFkZmRzLA0KICAgICAgICAgICAgICAgICAgICAgIGZkX3Nl dCAqX193cml0ZWZkcywgZmRfc2V0ICpfX2V4Y2VwdGZkcywNCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwNCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX3NpZ3NldF90ICpfX3NpZ21hc2spOw0KDQpleHRlcm4gaW50IF9fc2VsZWN0IChp bnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLA0KICAgICAgICAgICAgICAg ICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsDQogICAgICAgICAgICAgICAgICAg ICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsDQogICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpOw0KIyAyMTYgIi4uL3Bvc2l4L3N5 cy90eXBlcy5oIiAyDQoNCg0KIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvc3lz bWFjcm9zLmgiIDENCiMgMjE5ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMg0KDQoNCg0KDQp0eXBl ZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgX19ibGtjbnRf dCBibGtjbnRfdDsNCg0KDQoNCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7DQoNCg0K DQp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90Ow0KIyAyNTcgIi4uL3Bvc2l4L3N5cy90 eXBlcy5oIg0KdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsNCnR5cGVkZWYgX19mc2Js a2NudDY0X3QgZnNibGtjbnQ2NF90Ow0KdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0 X3Q7DQoNCg0KDQojIDIgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDINCiMgMzkxICIuLi9zdGRs aWIvc3RkbGliLmgiIDINCg0KDQoNCg0KDQoNCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQp IDsNCg0KDQpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7DQoNCg0K DQoNCg0KZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq X19zdGF0ZWJ1ZiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7 DQoNCg0KDQpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsNCg0KDQoN Cg0KDQoNCg0Kc3RydWN0IHJhbmRvbV9kYXRhDQogIHsNCiAgICBpbnQzMl90ICpmcHRyOw0KICAg IGludDMyX3QgKnJwdHI7DQogICAgaW50MzJfdCAqc3RhdGU7DQogICAgaW50IHJhbmRfdHlwZTsN CiAgICBpbnQgcmFuZF9kZWc7DQogICAgaW50IHJhbmRfc2VwOw0KICAgIGludDMyX3QgKmVuZF9w dHI7DQogIH07DQoNCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19y ZXN0cmljdCBfX2J1ZiwNCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIDsNCg0KZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQs IHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsNCg0KZXh0ZXJuIGludCBpbml0c3RhdGVfciAo dW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLA0KICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sDQogICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsNCg0KZXh0ZXJuIGlu dCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsDQogICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOw0KDQoNCg0K DQoNCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOw0KDQpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWdu ZWQgaW50IF9fc2VlZCkgOw0KDQoNCg0KZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAq X19zZWVkKSA7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOw0K ZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOw0K DQoNCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7DQpleHRlcm4gbG9uZyBpbnQgbnJh bmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIDsNCg0KDQpleHRlcm4gbG9uZyBp bnQgbXJhbmQ0OCAodm9pZCkgOw0KZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSA7DQoNCg0KZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQg X19zZWVkdmFsKSA7DQpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVk IHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsNCmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVk IHNob3J0IGludCBfX3BhcmFtWzddKSA7DQoNCg0KDQoNCg0Kc3RydWN0IGRyYW5kNDhfZGF0YQ0K ICB7DQogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsNCiAgICB1bnNpZ25lZCBzaG9ydCBp bnQgX19vbGRfeFszXTsNCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOw0KICAgIHVuc2lnbmVk IHNob3J0IGludCBfX2luaXQ7DQogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7DQogIH07 DQoNCg0KZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp Y3QgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSA7DQpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10sDQogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAq X19yZXN0cmljdCBfX3Jlc3VsdCkgOw0KZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50IG1yYW5kNDhfciAoc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAg ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOw0KZXh0ZXJuIGludCBqcmFuZDQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsDQogICAgICAgICAgICAg ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsNCg0KDQpleHRlcm4gaW50 IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1 ZmZlcikNCiAgICAgOw0KDQpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg X19zZWVkMTZ2WzNdLA0KICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19idWZmZXIpIDsNCg0KZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3BhcmFtWzddLA0KICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSA7DQojIDUyNyAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIHZvaWQgKm1hbGxv YyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsNCg0KZXh0ZXJu IHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpDQogICAgIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7DQoNCg0KDQoNCg0KZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp Ow0KDQpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgOw0KDQoNCg0KZXh0ZXJuIHZvaWQg Y2ZyZWUgKHZvaWQgKl9fcHRyKSA7DQoNCg0KDQojIDEgIi4uL2luY2x1ZGUvYWxsb2NhLmgiIDEN Cg0KDQojIDEgIi4uL3N0ZGxpYi9hbGxvY2EuaCIgMQ0KIyAyNSAiLi4vc3RkbGliL2FsbG9jYS5o Ig0KIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAyNiAiLi4vc3RkbGliL2FsbG9jYS5oIiAyDQoNCg0KDQoN Cg0KDQoNCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsNCg0KDQoNCg0KDQoN CiMgNCAiLi4vaW5jbHVkZS9hbGxvY2EuaCIgMg0KDQoNCg0KDQpleHRlcm4gdm9pZCAqX19hbGxv Y2EgKHNpemVfdCBfX3NpemUpOw0KIyA1NDcgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMg0KDQoNCg0K DQpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19t ZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkNCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsNCg0KDQoNCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQpleHRlcm4gaW50IGF0ZXhpdCAodm9p ZCAoKl9fZnVuYykgKHZvaWQpKSA7DQoNCg0KDQoNCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAo Kl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykNCiAgICAg Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOw0KDQoNCg0KDQpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3Rh dHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFy ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7DQoNCg0KDQpleHRlcm4gY2hhciAqX19z ZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOw0KDQoNCg0KDQoNCmV4dGVybiBp bnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOw0KDQoNCg0KDQoNCmV4dGVybiBpbnQgc2V0ZW52 IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBs YWNlKQ0KICAgICA7DQoNCg0KZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUpIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsNCiMgNjIzICIu Li9zdGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRl KSA7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg Ow0KIyA2NDAgIi4uL3N0ZGxpYi9zdGRsaWIuaCINCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFy ICpfX3RlbXBsYXRlKSA7DQojIDY1MCAiLi4vc3RkbGliL3N0ZGxpYi5oIg0KZXh0ZXJuIGNoYXIg Km1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsNCg0KDQoNCg0KZXh0ZXJuIGludCBzeXN0ZW0g KF9fY29uc3QgY2hhciAqX19jb21tYW5kKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gY2hhciAqY2Fu b25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsNCiMgNjcyICIuLi9z dGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25hbWUsDQogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg X19yZXNvbHZlZCkgOw0KDQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAo X19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsNCg0KDQp0eXBlZGVmIF9fY29tcGFyX2Zu X3QgY29tcGFyaXNvbl9mbl90Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2Nv bnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwNCiAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBh cik7DQoNCg0KDQpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVt Yiwgc2l6ZV90IF9fc2l6ZSwNCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29t cGFyKTsNCg0KDQoNCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7DQpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7DQoNCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVu b20pDQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsNCmV4dGVybiBsZGl2X3QgbGRp diAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkNCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOw0KDQpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChs b25nIGxvbmcgaW50IF9fbnVtZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsb25nIGxvbmcgaW50IF9fZGVub20pDQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsNCiMgNzI4ICIuLi9zdGRsaWIvc3RkbGliLmgiDQpleHRlcm4gY2hhciAqZWN2dCAoZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsDQogICAgICAg ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOw0KDQoNCg0KDQpleHRlcm4gY2hh ciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsDQogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOw0KDQoN Cg0KDQpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh ciAqX19idWYpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsDQogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7DQpleHRlcm4gY2hhciAqcWZjdnQgKGxv bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCiAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsNCmV4dGVybiBj aGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1 ZikgOw0KDQoNCg0KDQpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsDQogICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwNCiAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19sZW4pIDsNCmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwNCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLA0KICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOw0KDQpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwNCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sDQogICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOw0KZXh0ZXJuIGlu dCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsDQogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu LA0KICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s ZW4pIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBz aXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19wd2MsDQogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbikgOw0KDQoNCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3Qg X193Y2hhcikgOw0KDQoNCg0KZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3Y3MsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zLCBzaXplX3QgX19uKSA7DQoNCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikNCiAgICAgOw0KDQoNCg0KDQoNCg0KDQpl eHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOw0KIyA4MDggIi4u L3N0ZGxpYi9zdGRsaWIuaCINCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmlj dCBfX29wdGlvbnAsDQogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0 cmljdCBfX3Rva2VucywNCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X3ZhbHVlcCkgOw0KDQoNCg0KDQoNCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpf X2tleSkgOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2Zs YWcpIDsNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOw0KDQoN Cg0KZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIg KnB0c25hbWUgKGludCBfX2ZkKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IHB0c25hbWVfciAo aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsNCg0KDQpleHRlcm4gaW50 IGdldHB0ICh2b2lkKSA7DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJs ZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsNCg0KDQoNCg0KDQoNCiMgOCAiLi4vaW5jbHVk ZS9zdGRsaWIuaCIgMg0KDQoNCg0KZXh0ZXJuIGxvbmcgaW50IF9fcmFuZG9tICh2b2lkKTsNCmV4 dGVybiB2b2lkIF9fc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCk7DQpleHRlcm4gY2hhciAq X19pbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKTsNCmV4dGVybiBjaGFyICpf X3NldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKTsNCmV4dGVybiBpbnQgX19yYW5kb21fciAoc3Ry dWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJfdCAqX19yZXN1bHQpOw0KZXh0ZXJuIGludCBf X3NyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1 Zik7DQpleHRlcm4gaW50IF9faW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIg Kl9fc3RhdGVidWYsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsNCmV4dGVybiBpbnQgX19zZXRzdGF0ZV9yIChj aGFyICpfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsNCmV4dGVybiBpbnQg X19yYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKTsNCmV4dGVybiBpbnQgX19lcmFuZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLA0KICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIsIGRvdWJsZSAqX19yZXN1bHQpOw0KZXh0ZXJu IGludCBfX25yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sDQogICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwNCiAgICAgICAg ICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3VsdCk7DQpleHRlcm4gaW50IF9fanJhbmQ0 OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwNCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgbG9uZyBpbnQgKl9fcmVzdWx0KTsNCmV4dGVybiBpbnQgX19zcmFuZDQ4X3IgKGxvbmcgaW50 IF9fc2VlZHZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKTsNCmV4dGVybiBpbnQgX19zZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f c2VlZDE2dlszXSwNCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19idWZmZXIpOw0KZXh0ZXJuIGludCBfX2xjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f cGFyYW1bN10sDQogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlcik7DQoNCg0KZXh0ZXJuIGludCBfX2RyYW5kNDhfaXRlcmF0ZSAodW5zaWduZWQgc2hv cnQgaW50IF9feHN1YmlbM10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcik7DQoNCmV4dGVybiBpbnQgX19zZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsDQogICAgICAgICAgICAgICAgICAg ICBpbnQgX19yZXBsYWNlKTsNCmV4dGVybiBpbnQgX191bnNldGVudiAoX19jb25zdCBjaGFyICpf X25hbWUpOw0KZXh0ZXJuIGludCBfX2NsZWFyZW52ICh2b2lkKTsNCmV4dGVybiBjaGFyICpfX2Nh bm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKTsNCmV4dGVybiBjaGFy ICpfX3JlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCk7DQpl eHRlcm4gaW50IF9fcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1 Zmxlbik7DQpleHRlcm4gaW50IF9fZ2V0cHQgKHZvaWQpOw0KZXh0ZXJuIGludCBfX3Bvc2l4X29w ZW5wdCAoaW50IF9fb2ZsYWcpOw0KDQpleHRlcm4gaW50IF9fYWRkX3RvX2Vudmlyb24gKGNvbnN0 IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpjb21iaW5lcywgaW50IHJlcGxhY2UpOw0KDQpleHRlcm4gdm9pZCBf cXVpY2tzb3J0ICh2b2lkICpjb25zdCBwYmFzZSwgc2l6ZV90IHRvdGFsX2VsZW1zLA0KICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIF9fY29tcGFyX2ZuX3QgY21wKTsNCg0KZXh0 ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9f YXJnKSwgdm9pZCAqX19hcmcpOw0KDQpleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCAodm9pZCAoKmZ1 bmMpICh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmQpOw0KDQpleHRlcm4gdm9pZCBfX2N4YV9m aW5hbGl6ZSAodm9pZCAqZCk7DQoNCmV4dGVybiBpbnQgX19wb3NpeF9tZW1hbGlnbiAodm9pZCAq Km1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpDQogICAgIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7DQoNCmV4dGVybiBpbnQgX19saWJjX3N5c3RlbSAoY29uc3QgY2hh ciAqbGluZSk7DQojIDI2ICJzdHJjb2xsLmMiIDINCiMgMSAiLi4vaW5jbHVkZS9zdHJpbmcuaCIg MQ0KDQoNCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMQ0KIyA0ICIuLi9pbmNsdWRlL3N0 cmluZy5oIiAyDQoNCmV4dGVybiB2b2lkICpfX21lbWNjcHkgKHZvaWQgKl9fZGVzdCwgX19jb25z dCB2b2lkICpfX3NyYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90 IF9fbik7DQoNCmV4dGVybiBzaXplX3QgX19zdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n LCBzaXplX3QgX19tYXhsZW4pDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpl eHRlcm4gY2hhciAqX19zdHJzZXAgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19k ZWxpbSk7DQoNCmV4dGVybiBpbnQgX19zdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4 dGVybiBpbnQgX19zdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pDQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25z dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpDQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOw0KDQpleHRlcm4gY2hhciAqX19zdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9f aGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpDQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOw0KDQpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJp bmcpDQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7DQpleHRlcm4gY2hhciAqX19z dHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQ0KICAgICBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOw0KDQpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKF9fY29u c3Qgdm9pZCAqX19zLCBpbnQgX19jKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsN Cg0KZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykN CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVybiB2b2lkICpfX21lbXJj aHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQ0KICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7DQoNCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25z dCkpOw0KDQpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9f YnVmLCBzaXplX3QgX19idWZsZW4pOw0KDQoNCg0KIyAxICIuLi9zdHJpbmcvc3RyaW5nLmgiIDEN CiMgMjggIi4uL3N0cmluZy9zdHJpbmcuaCINCg0KDQoNCg0KDQojIDEgIi91c3IvbGliL2djYy1s aWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQoj IDM0ICIuLi9zdHJpbmcvc3RyaW5nLmgiIDINCg0KDQoNCmV4dGVybiB2b2lkICptZW1jcHkgKHZv aWQgKl9fcmVzdHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIHZvaWQgKm1lbW1v dmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikNCiAgICAg Ow0KDQoNCg0KDQoNCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLA0KICAgICAgICAgICAgICAgICAgICAg IGludCBfX2MsIHNpemVfdCBfX24pDQogICAgIDsNCg0KDQoNCg0KZXh0ZXJuIHZvaWQgKm1lbXNl dCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSA7DQoNCg0KZXh0ZXJuIGludCBtZW1j bXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQ0K ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gdm9pZCAqbWVtY2hy IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgICAgIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2Nv bnN0IHZvaWQgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0K ZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3Qg X19uKQ0KICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBj aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMpDQogICAgIDsNCg0KZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOw0KDQoNCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIg Kl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpDQogICAg IDsNCg0KZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsDQogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbikgOw0KDQoNCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCmV4dGVy biBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCmV4dGVybiBp bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpDQogICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCg0KDQoNCg0KDQojIDEgIi4uL2lu Y2x1ZGUveGxvY2FsZS5oIiAxDQojIDEwOSAiLi4vc3RyaW5nL3N0cmluZy5oIiAyDQoNCg0KZXh0 ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIsIF9fbG9jYWxlX3QgX19sKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K ZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f c3JjLCBzaXplX3QgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf X2wpIDsNCg0KDQoNCg0KZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gY2hhciAqc3Ry bmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsNCiMgMTU1ICIuLi9zdHJpbmcvc3RyaW5nLmgiDQpleHRlcm4g Y2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7DQoNCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFy ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsNCg0KDQoNCg0KZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIg Kl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7DQoNCg0KZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv bnN0IGNoYXIgKl9fYWNjZXB0KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K ZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f YWNjZXB0KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KZXh0ZXJuIGNoYXIg KnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl KQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQoNCmV4dGVybiBjaGFyICpz dHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVk bGUpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KZXh0ZXJuIGNoYXIg KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltKQ0KICAgICA7DQoNCg0KDQpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19y ZXN0cmljdCBfX3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19zYXZlX3B0cikgOw0KDQpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwNCiAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOw0KDQoNCg0KDQoNCg0KZXh0 ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlz dGFja2xlbiwNCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNp emVfdCBfX25lZWRsZWxlbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0K DQpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgOw0KZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LA0K ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgOw0KDQoNCg0KDQpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpf X3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQpleHRlcm4gc2l6ZV90IHN0 cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikNCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCmV4dGVybiBjaGFyICpzdHJlcnJvciAo aW50IF9fZXJybnVtKSA7DQoNCg0KDQpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJy bnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7DQoNCg0KDQoNCmV4dGVybiB2b2lk IF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOw0KDQoNCg0KZXh0ZXJuIHZvaWQgYmNv cHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgOw0KDQoN CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsNCg0KDQpleHRlcm4g aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg X19uKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gY2hhciAq aW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsNCg0KDQpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7DQoNCg0KDQpleHRlcm4gaW50IGZmcyAoaW50 IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IGZm c2wgKGxvbmcgaW50IF9fbCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQpfX2V4dGVu c2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkNCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQ0KICAgICBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsNCg0KDQpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIg Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsNCg0K ZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9j YWxlX3QgX19sb2MpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCg0KDQoN CmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwNCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSA7DQoNCg0K DQoNCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIpDQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOw0KDQoNCmV4dGVybiBj aGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgOw0KDQoNCmV4dGVybiBjaGFyICpfX3N0cGNweSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykN CiAgICAgOw0KZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykNCiAgICAgOw0KDQoNCg0KZXh0ZXJuIGNoYXIg Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCmV4dGVy biBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwNCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsNCg0K DQpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOw0KDQoNCmV4dGVybiB2b2lk ICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsNCg0KDQoNCg0KDQoNCmV4dGVybiBj aGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7DQojIDM1NyAiLi4vc3Ry aW5nL3N0cmluZy5oIg0KIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy9zdHJpbmcuaCIgMQ0K IyAzNTggIi4uL3N0cmluZy9zdHJpbmcuaCIgMg0KDQoNCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3N0 cmluZzIuaCIgMQ0KIyAxICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiIDENCiMgODAgIi4uL3N0 cmluZy9iaXRzL3N0cmluZzIuaCINCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fy clsyXTsgfSBfX1NUUklORzJfQ09QWV9BUlIyIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5 cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclszXTsgfSBfX1NUUklORzJfQ09QWV9B UlIzIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQg Y2hhciBfX2Fycls0XTsgfSBfX1NUUklORzJfQ09QWV9BUlI0IF9fYXR0cmlidXRlX18gKChwYWNr ZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls1XTsgfSBfX1NUUklO RzJfQ09QWV9BUlI1IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsg dW5zaWduZWQgY2hhciBfX2Fycls2XTsgfSBfX1NUUklORzJfQ09QWV9BUlI2IF9fYXR0cmlidXRl X18gKChwYWNrZWQpKTsNCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls3XTsg fSBfX1NUUklORzJfQ09QWV9BUlI3IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsNCnR5cGVkZWYg c3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls4XTsgfSBfX1NUUklORzJfQ09QWV9BUlI4IF9f YXR0cmlidXRlX18gKChwYWNrZWQpKTsNCiMgMzE3ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgi DQpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1wY3B5X3NtYWxsICh2b2lkICosIGNoYXIsIF9f U1RSSU5HMl9DT1BZX0FSUjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX1NUUklORzJfQ09QWV9BUlIzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI2LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjgsIHNpemVfdCk7DQpleHRl cm4gX19pbmxpbmUgdm9pZCAqDQpfX21lbXBjcHlfc21hbGwgKHZvaWQgKl9fZGVzdCwgY2hhciBf X3NyYzEsDQogICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zcmMyLCBfX1NU UklORzJfQ09QWV9BUlIzIF9fc3JjMywNCiAgICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlf QVJSNCBfX3NyYzQsIF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zcmM1LA0KICAgICAgICAgICAgICAg ICBfX1NUUklORzJfQ09QWV9BUlI2IF9fc3JjNiwgX19TVFJJTkcyX0NPUFlfQVJSNyBfX3NyYzcs DQogICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjggX19zcmM4LCBzaXplX3QgX19z cmNsZW4pDQp7DQogIHVuaW9uIHsNCiAgICBjaGFyIF9fYzsNCiAgICBfX1NUUklORzJfQ09QWV9B UlIyIF9fc2NhMjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlIzIF9fc2NhMzsNCiAgICBfX1NUUklO RzJfQ09QWV9BUlI0IF9fc2NhNDsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI1IF9fc2NhNTsNCiAg ICBfX1NUUklORzJfQ09QWV9BUlI2IF9fc2NhNjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI3IF9f c2NhNzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI4IF9fc2NhODsNCiAgfSAqX191ID0gX19kZXN0 Ow0KICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQ0KICAgIHsNCiAgICBjYXNlIDE6 DQogICAgICBfX3UtPl9fYyA9IF9fc3JjMTsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgMjoNCiAg ICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTIgPSBfX3NyYzI7DQogICAgICBicmVhazsNCiAg ICBjYXNlIDM6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2EzID0gX19zcmMzOw0KICAg ICAgYnJlYWs7DQogICAgY2FzZSA0Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNCA9 IF9fc3JjNDsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNToNCiAgICAgIF9fZXh0ZW5zaW9uX18g X191LT5fX3NjYTUgPSBfX3NyYzU7DQogICAgICBicmVhazsNCiAgICBjYXNlIDY6DQogICAgICBf X2V4dGVuc2lvbl9fIF9fdS0+X19zY2E2ID0gX19zcmM2Ow0KICAgICAgYnJlYWs7DQogICAgY2Fz ZSA3Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhNyA9IF9fc3JjNzsNCiAgICAgIGJy ZWFrOw0KICAgIGNhc2UgODoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTggPSBfX3Ny Yzg7DQogICAgICBicmVhazsNCiAgICB9DQogIHJldHVybiBfX2V4dGVuc2lvbl9fICh2b2lkICop KChjaGFyICopIF9fdSArIF9fc3JjbGVuKTsNCn0NCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIHZvaWQg Kl9fcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOw0KIyA0ODkgIi4uL3N0cmlu Zy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cmNweV9zbWFsbCAo Y2hhciAqLCBfX1NUUklORzJfQ09QWV9BUlIyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlIzLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI1LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI2LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI3LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI4LCBzaXplX3QpOw0K ZXh0ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJjcHlfc21hbGwgKGNoYXIgKl9fZGVzdCwNCiAg ICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlIyIF9fc3JjMiwgX19TVFJJTkcyX0NPUFlf QVJSMyBfX3NyYzMsDQogICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlfQVJSNCBfX3NyYzQs IF9fU1RSSU5HMl9DT1BZX0FSUjUgX19zcmM1LA0KICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9D T1BZX0FSUjYgX19zcmM2LCBfX1NUUklORzJfQ09QWV9BUlI3IF9fc3JjNywNCiAgICAgICAgICAg ICAgICBfX1NUUklORzJfQ09QWV9BUlI4IF9fc3JjOCwgc2l6ZV90IF9fc3JjbGVuKQ0Kew0KICB1 bmlvbiB7DQogICAgY2hhciBfX2M7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSMiBfX3NjYTI7DQog ICAgX19TVFJJTkcyX0NPUFlfQVJSMyBfX3NjYTM7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNCBf X3NjYTQ7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNSBfX3NjYTU7DQogICAgX19TVFJJTkcyX0NP UFlfQVJSNiBfX3NjYTY7DQogICAgX19TVFJJTkcyX0NPUFlfQVJSNyBfX3NjYTc7DQogICAgX19T VFJJTkcyX0NPUFlfQVJSOCBfX3NjYTg7DQogIH0gKl9fdSA9ICh2b2lkICopIF9fZGVzdDsNCiAg c3dpdGNoICgodW5zaWduZWQgaW50KSBfX3NyY2xlbikNCiAgICB7DQogICAgY2FzZSAxOg0KICAg ICAgX191LT5fX2MgPSAnXDAnOw0KICAgICAgYnJlYWs7DQogICAgY2FzZSAyOg0KICAgICAgX19l eHRlbnNpb25fXyBfX3UtPl9fc2NhMiA9IF9fc3JjMjsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2Ug MzoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTMgPSBfX3NyYzM7DQogICAgICBicmVh azsNCiAgICBjYXNlIDQ6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E0ID0gX19zcmM0 Ow0KICAgICAgYnJlYWs7DQogICAgY2FzZSA1Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9f c2NhNSA9IF9fc3JjNTsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNjoNCiAgICAgIF9fZXh0ZW5z aW9uX18gX191LT5fX3NjYTYgPSBfX3NyYzY7DQogICAgICBicmVhazsNCiAgICBjYXNlIDc6DQog ICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E3ID0gX19zcmM3Ow0KICAgICAgYnJlYWs7DQog ICAgY2FzZSA4Og0KICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhOCA9IF9fc3JjODsNCiAg ICAgIGJyZWFrOw0KICB9DQogIHJldHVybiBfX2Rlc3Q7DQp9DQojIDY1OSAiLi4vc3RyaW5nL2Jp dHMvc3RyaW5nMi5oIg0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RwY3B5X3NtYWxsIChjaGFy ICosIF9fU1RSSU5HMl9DT1BZX0FSUjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjQsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjUsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjYsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjcsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjgsIHNpemVfdCk7DQpleHRl cm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cGNweV9zbWFsbCAoY2hhciAqX19kZXN0LA0KICAgICAg ICAgICAgICAgIF9fU1RSSU5HMl9DT1BZX0FSUjIgX19zcmMyLCBfX1NUUklORzJfQ09QWV9BUlIz IF9fc3JjMywNCiAgICAgICAgICAgICAgICBfX1NUUklORzJfQ09QWV9BUlI0IF9fc3JjNCwgX19T VFJJTkcyX0NPUFlfQVJSNSBfX3NyYzUsDQogICAgICAgICAgICAgICAgX19TVFJJTkcyX0NPUFlf QVJSNiBfX3NyYzYsIF9fU1RSSU5HMl9DT1BZX0FSUjcgX19zcmM3LA0KICAgICAgICAgICAgICAg IF9fU1RSSU5HMl9DT1BZX0FSUjggX19zcmM4LCBzaXplX3QgX19zcmNsZW4pDQp7DQogIHVuaW9u IHsNCiAgICBjaGFyIF9fYzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlIyIF9fc2NhMjsNCiAgICBf X1NUUklORzJfQ09QWV9BUlIzIF9fc2NhMzsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI0IF9fc2Nh NDsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI1IF9fc2NhNTsNCiAgICBfX1NUUklORzJfQ09QWV9B UlI2IF9fc2NhNjsNCiAgICBfX1NUUklORzJfQ09QWV9BUlI3IF9fc2NhNzsNCiAgICBfX1NUUklO RzJfQ09QWV9BUlI4IF9fc2NhODsNCiAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0Ow0KICBzd2l0 Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQ0KICAgIHsNCiAgICBjYXNlIDE6DQogICAgICBf X3UtPl9fYyA9ICdcMCc7DQogICAgICBicmVhazsNCiAgICBjYXNlIDI6DQogICAgICBfX2V4dGVu c2lvbl9fIF9fdS0+X19zY2EyID0gX19zcmMyOw0KICAgICAgYnJlYWs7DQogICAgY2FzZSAzOg0K ICAgICAgX19leHRlbnNpb25fXyBfX3UtPl9fc2NhMyA9IF9fc3JjMzsNCiAgICAgIGJyZWFrOw0K ICAgIGNhc2UgNDoNCiAgICAgIF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTQgPSBfX3NyYzQ7DQog ICAgICBicmVhazsNCiAgICBjYXNlIDU6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E1 ID0gX19zcmM1Ow0KICAgICAgYnJlYWs7DQogICAgY2FzZSA2Og0KICAgICAgX19leHRlbnNpb25f XyBfX3UtPl9fc2NhNiA9IF9fc3JjNjsNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgNzoNCiAgICAg IF9fZXh0ZW5zaW9uX18gX191LT5fX3NjYTcgPSBfX3NyYzc7DQogICAgICBicmVhazsNCiAgICBj YXNlIDg6DQogICAgICBfX2V4dGVuc2lvbl9fIF9fdS0+X19zY2E4ID0gX19zcmM4Ow0KICAgICAg YnJlYWs7DQogIH0NCiAgcmV0dXJuIF9fZGVzdCArIF9fc3JjbGVuIC0gMTsNCn0NCiMgODkzICIu Li9zdHJpbmcvYml0cy9zdHJpbmcyLmgiDQpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nw bl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7DQpleHRlcm4gX19pbmxpbmUg c2l6ZV90DQpfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpDQp7 DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQogIHdoaWxlIChfX3NbX19yZXN1bHRd ICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkNCiAgICArK19fcmVzdWx0Ow0K ICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3Bu X2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19yZWplY3QyKTsNCmV4dGVybiBfX2lubGluZSBzaXpl X3QNCl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBf X3JlamVjdDIpDQp7DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQogIHdoaWxlIChf X3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDENCiAgICAg ICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyKQ0KICAgICsrX19yZXN1bHQ7DQogIHJl dHVybiBfX3Jlc3VsdDsNCn0NCg0KZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBfX3JlamVjdDMpOw0KZXh0ZXJuIF9f aW5saW5lIHNpemVfdA0KX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq ZWN0MSwgaW50IF9fcmVqZWN0MiwNCiAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MykNCnsNCiAg cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsNCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0g J1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQ0KICAgICAgICAgJiYgX19zW19fcmVz dWx0XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpDQogICAgKytf X3Jlc3VsdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KIyA5NTAgIi4uL3N0cmluZy9iaXRzL3N0 cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hh ciAqX19zLCBpbnQgX19hY2NlcHQpOw0KZXh0ZXJuIF9faW5saW5lIHNpemVfdA0KX19zdHJzcG5f YzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpDQp7DQogIHJlZ2lzdGVyIHNpemVf dCBfX3Jlc3VsdCA9IDA7DQoNCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpDQog ICAgKytfX3Jlc3VsdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQpleHRlcm4gX19pbmxpbmUg c2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOw0KZXh0ZXJu IF9faW5saW5lIHNpemVfdA0KX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h Y2NlcHQxLCBpbnQgX19hY2NlcHQyKQ0Kew0KICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw Ow0KDQogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRd ID09IF9fYWNjZXB0MikNCiAgICArK19fcmVzdWx0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoN CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YWNjZXB0MiwgaW50IF9fYWNjZXB0Myk7DQpleHRlcm4gX19pbmxpbmUgc2l6ZV90DQpfX3N0cnNw bl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGlu dCBfX2FjY2VwdDMpDQp7DQogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7DQoNCiAgd2hp bGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2Nl cHQyDQogICAgICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykNCiAgICArK19fcmVz dWx0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQojIDEwMDcgIi4uL3N0cmluZy9iaXRzL3N0cmlu ZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2FjY2VwdDIpOw0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJwYnJrX2MyIChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikNCnsNCg0KICB3 aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2Nl cHQyKQ0KICAgICsrX19zOw0KICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAo Y2hhciAqKSAoc2l6ZV90KSBfX3M7DQp9DQoNCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBi cmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOw0KZXh0 ZXJuIF9faW5saW5lIGNoYXIgKg0KX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwNCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykN CnsNCg0KICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3Mg IT0gX19hY2NlcHQyDQogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykNCiAgICArK19fczsN CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkg X19zOw0KfQ0KIyAxMDU5ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiDQpleHRlcm4gX19pbmxp bmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19u ZXh0cCk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cnRva19yXzFjIChjaGFyICpfX3Ms IGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQ0Kew0KICBjaGFyICpfX3Jlc3VsdDsNCiAgaWYg KF9fcyA9PSAoKHZvaWQgKikwKSkNCiAgICBfX3MgPSAqX19uZXh0cDsNCiAgd2hpbGUgKCpfX3Mg PT0gX19zZXApDQogICAgKytfX3M7DQogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7DQogIGlmICgq X19zICE9ICdcMCcpDQogICAgew0KICAgICAgX19yZXN1bHQgPSBfX3MrKzsNCiAgICAgIHdoaWxl ICgqX19zICE9ICdcMCcpDQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApDQogICAgICAgICAg ew0KICAgICAgICAgICAgX19zWy0xXSA9ICdcMCc7DQogICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICB9DQogICAgICAqX19uZXh0cCA9IF9fczsNCiAgICB9DQogIHJldHVybiBfX3Jlc3VsdDsN Cn0NCiMgMTA5MSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIg0KZXh0ZXJuIGNoYXIgKl9fc3Ry c2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7DQojIDExMDkg Ii4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNl cF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAq DQpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkNCnsNCiAgcmVnaXN0ZXIg Y2hhciAqX19yZXR2YWwgPSAqX19zOw0KICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkgJiYg KCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAm JiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9f cmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkN CiAgICAqKCpfX3MpKysgPSAnXDAnOw0KICByZXR1cm4gX19yZXR2YWw7DQp9DQoNCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNo YXIgX19yZWplY3QyKTsNCmV4dGVybiBfX2lubGluZSBjaGFyICoNCl9fc3Ryc2VwXzJjIChjaGFy ICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpDQp7DQogIHJlZ2lzdGVyIGNo YXIgKl9fcmV0dmFsID0gKl9fczsNCiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQ0KICAg IHsNCiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsNCiAgICAgIHdoaWxlICgx KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsNCiAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09 IF9fcmVqZWN0MikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7 DQogICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICsrX19jcDsN CiAgICAgICAgfQ0KICAgICAgKl9fcyA9IF9fY3A7DQogICAgfQ0KICByZXR1cm4gX19yZXR2YWw7 DQp9DQoNCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hh ciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyIF9fcmVqZWN0Myk7DQpleHRlcm4gX19pbmxpbmUgY2hhciAqDQpfX3N0cnNl cF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9f cmVqZWN0MykNCnsNCiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOw0KICBpZiAoX19y ZXR2YWwgIT0gKCh2b2lkICopMCkpDQogICAgew0KICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9 IF9fcmV0dmFsOw0KICAgICAgd2hpbGUgKDEpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoKl9f Y3AgPT0gJ1wwJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAq KTApOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmICgqX19j cCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0 MykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7DQogICAgICAg ICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICsrX19jcDsNCiAgICAgICAg fQ0KICAgICAgKl9fcyA9IF9fY3A7DQogICAgfQ0KICByZXR1cm4gX19yZXR2YWw7DQp9DQojIDEx OTAgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCINCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19j b25zdCBjaGFyICpfX3N0cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsNCiMgMTIw OSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIg0KZXh0ZXJuIGNoYXIgKl9fc3RybmR1cCAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikNCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsNCiMgMiAiLi4vaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMg0KIyAzNjEgIi4u L3N0cmluZy9zdHJpbmcuaCIgMg0KDQoNCg0KDQojIDUwICIuLi9pbmNsdWRlL3N0cmluZy5oIiAy DQojIDI3ICJzdHJjb2xsLmMiIDINCiMgNDYgInN0cmNvbGwuYyINCiMgMSAiLi4vbG9jYWxlL2xv Y2FsZWluZm8uaCIgMQ0KIyAyMyAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCINCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMNCiMgMjQgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiIDINCiMgMSAiLi4vaW5jbHVkZS9s YW5naW5mby5oIiAxDQojIDI1ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIiAyDQojIDEgIi4uL2lu Y2x1ZGUvbGltaXRzLmgiIDENCiMgMTI0ICIuLi9pbmNsdWRlL2xpbWl0cy5oIg0KIyAxICIvdXNy L2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvbGltaXRz LmgiIDEgMw0KIyAxMjUgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDINCiMgMTQ0ICIuLi9pbmNsdWRl L2xpbWl0cy5oIg0KIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxDQojIDEgIi4u L3Bvc2l4L2JpdHMvcG9zaXgxX2xpbS5oIiAxDQojIDEyNiAiLi4vcG9zaXgvYml0cy9wb3NpeDFf bGltLmgiDQojIDEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRz L2xvY2FsX2xpbS5oIiAxDQojIDM2ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3Yv bGludXgvYml0cy9sb2NhbF9saW0uaCINCiMgMSAiL3Vzci9zcmMvbGludXgvaW5jbHVkZS9saW51 eC9saW1pdHMuaCIgMSAzDQojIDM3ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3Yv bGludXgvYml0cy9sb2NhbF9saW0uaCIgMg0KIyAxMjcgIi4uL3Bvc2l4L2JpdHMvcG9zaXgxX2xp bS5oIiAyDQojIDIgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDINCiMgMTQ1ICIuLi9p bmNsdWRlL2xpbWl0cy5oIiAyDQoNCg0KDQojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDJfbGlt LmgiIDENCiMgMSAiLi4vcG9zaXgvYml0cy9wb3NpeDJfbGltLmgiIDENCiMgMiAiLi4vaW5jbHVk ZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMg0KIyAxNDkgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDINCg0K DQoNCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxDQojIDM0ICIuLi9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiDQojIDEgIi9ob21lL2NvbXBpbGVyL2J1aWxkLWdsaWJjLTIuMi41 LWdjY3Rlc3QvYml0cy9zdGRpb19saW0uaCIgMQ0KIyAzNSAiLi4vaW5jbHVkZS9iaXRzL3hvcGVu X2xpbS5oIiAyDQojIDE1MyAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMg0KIyAyNiAiLi4vbG9jYWxl L2xvY2FsZWluZm8uaCIgMg0KIyAxICIuLi9pbmNsdWRlL3RpbWUuaCIgMQ0KDQoNCg0KDQojIDEg Ii4uL3RpbWUvdGltZS5oIiAxDQojIDMwICIuLi90aW1lL3RpbWUuaCINCg0KDQoNCg0KDQoNCg0K DQojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5j bHVkZS9zdGRkZWYuaCIgMSAzDQojIDM5ICIuLi90aW1lL3RpbWUuaCIgMg0KDQoNCg0KIyAxICIu Li9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3RpbWUuaCIgMQ0KIyA0MyAiLi4vdGltZS90 aW1lLmgiIDINCiMgMTE4ICIuLi90aW1lL3RpbWUuaCINCnN0cnVjdCB0bQ0Kew0KICBpbnQgdG1f c2VjOw0KICBpbnQgdG1fbWluOw0KICBpbnQgdG1faG91cjsNCiAgaW50IHRtX21kYXk7DQogIGlu dCB0bV9tb247DQogIGludCB0bV95ZWFyOw0KICBpbnQgdG1fd2RheTsNCiAgaW50IHRtX3lkYXk7 DQogIGludCB0bV9pc2RzdDsNCg0KDQogIGxvbmcgaW50IHRtX2dtdG9mZjsNCiAgX19jb25zdCBj aGFyICp0bV96b25lOw0KDQoNCg0KDQp9Ow0KDQoNCg0KDQpzdHJ1Y3QgaXRpbWVyc3BlYw0KICB7 DQogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICAgIHN0cnVjdCB0aW1lc3BlYyBp dF92YWx1ZTsNCiAgfTsNCg0KDQpzdHJ1Y3Qgc2lnZXZlbnQ7DQojIDE2MyAiLi4vdGltZS90aW1l LmgiDQpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgOw0KDQoNCmV4dGVybiB0aW1lX3QgdGlt ZSAodGltZV90ICpfX3RpbWVyKSA7DQoNCg0KZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90 IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQ0KICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7DQoNCg0KZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOw0KDQoNCg0K DQoNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhzaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0g Kl9fcmVzdHJpY3QgX190cCkgOw0KDQoNCg0KDQpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQ0KICAgICA7DQoNCg0KDQoN Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOw0K DQoNCg0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l cikgOw0KDQoNCg0KDQpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3Qg Kl9fcmVzdHJpY3QgX190aW1lciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCkgOw0KDQoNCg0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l X3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsNCg0KDQoNCg0KZXh0 ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSA7DQoNCg0KZXh0ZXJu IGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOw0KDQoNCg0KDQoNCg0KZXh0 ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwN CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsNCg0KDQpl eHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwN CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7DQoNCg0KDQoN CmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsNCmV4dGVybiBpbnQgX19kYXlsaWdodDsNCmV4dGVy biBsb25nIGludCBfX3RpbWV6b25lOw0KDQoNCg0KDQpleHRlcm4gY2hhciAqdHpuYW1lWzJdOw0K DQoNCg0KZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIDsNCg0KDQoNCmV4dGVybiBpbnQgZGF5bGln aHQ7DQpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBzdGlt ZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgOw0KIyAyNzEgIi4uL3RpbWUvdGltZS5oIg0KZXh0 ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgOw0KDQoNCmV4dGVybiB0aW1lX3Qg dGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIDsNCg0KDQpleHRlcm4gaW50IGR5c2l6ZSAoaW50 IF9feWVhcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOw0KDQoNCg0KDQoNCmV4dGVybiBp bnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwN CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7DQoN Cg0KDQpleHRlcm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVj dCB0aW1lc3BlYyAqX19yZXMpIDsNCg0KDQpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIDsNCg0KDQpleHRlcm4gaW50 IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1l c3BlYyAqX190cCkNCiAgICAgOw0KDQoNCg0KZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNs b2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgOw0KDQoNCmV4dGVybiBpbnQgY2xvY2tf Z2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOw0KDQoN Cg0KDQpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLA0K ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSA7 DQoNCg0KZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7DQoNCg0K ZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3Ms DQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9f cmVzdHJpY3QgX192YWx1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1l cnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIDsNCg0KDQpleHRlcm4gaW50IHRpbWVyX2dldHRp bWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkNCiAgICAg Ow0KDQoNCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsN CiMgMzQyICIuLi90aW1lL3RpbWUuaCINCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7DQoNCg0KDQoN Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgOw0K IyAzNTcgIi4uL3RpbWUvdGltZS5oIg0KZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3N0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g Kl9fcmVzdHJpY3QgX19yZXNidWZwKSA7DQoNCg0KDQoNCiMgNiAiLi4vaW5jbHVkZS90aW1lLmgi IDINCg0KDQpzdHJ1Y3QgdG07DQoNCg0KZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCBf X21vbl95ZGF5WzJdWzEzXTsNCg0KDQpleHRlcm4gc3RydWN0IHRtIF90bWJ1ZjsNCg0KDQpleHRl cm4gY2hhciAqX190enN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nKTsNCg0KDQpleHRlcm4gc2l6 ZV90IF9fdHpuYW1lX2N1cl9tYXg7DQoNCg0KZXh0ZXJuIGludCBfX3VzZV90emZpbGU7DQoNCmV4 dGVybiB2b2lkIF9fdHpmaWxlX3JlYWQgKGNvbnN0IGNoYXIgKmZpbGUsIHNpemVfdCBleHRyYSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipleHRyYXApOw0KZXh0ZXJuIGludCBf X3R6ZmlsZV9jb21wdXRlICh0aW1lX3QgdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqbGVhcF9jb3JyZWN0LCBpbnQgKmxlYXBf aGl0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnRwKTsNCmV4dGVy biB2b2lkIF9fdHpmaWxlX2RlZmF1bHQgKGNvbnN0IGNoYXIgKnN0ZCwgY29uc3QgY2hhciAqZHN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgc3Rkb2ZmLCBsb25nIGlu dCBkc3RvZmYpOw0KDQoNCg0KDQpleHRlcm4gdGltZV90IF9fbWt0aW1lX2ludGVybmFsIChzdHJ1 Y3QgdG0gKl9fdHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0g KigqX19mdW5jKSAoY29uc3QgdGltZV90ICosDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICopLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGltZV90ICpfX29mZnNldCk7DQpleHRlcm4gc3RydWN0IHRtICpf X2xvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX190aW1lciwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX190cCk7DQoNCmV4dGVybiBzdHJ1Y3QgdG0gKl9f Z210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCk7DQoNCg0KDQoN Cg0KZXh0ZXJuIGludCBfX29mZnRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyLA0KICAgICAg ICAgICAgICAgICAgICAgIGxvbmcgaW50IF9fb2Zmc2V0LA0KICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0bSAqX190cCk7DQoNCmV4dGVybiBjaGFyICpfX2FzY3RpbWVfciAoX19jb25zdCBz dHJ1Y3QgdG0gKl9fdHAsIGNoYXIgKl9fYnVmKTsNCmV4dGVybiB2b2lkIF9fdHpzZXQgKHZvaWQp Ow0KDQoNCmV4dGVybiBzdHJ1Y3QgdG0gKl9fdHpfY29udmVydCAoY29uc3QgdGltZV90ICp0aW1l ciwgaW50IHVzZV9sb2NhbHRpbWUsIHN0cnVjdCB0bSAqdHApOw0KDQoNCg0KZXh0ZXJuIGxvbmcg aW50IF9fdHpuYW1lX21heCAodm9pZCk7DQoNCmV4dGVybiBpbnQgX19uYW5vc2xlZXAgKF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLA0KICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZyk7DQpleHRlcm4gaW50IF9fZ2V0ZGF0 ZV9yIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzdHJ1Y3QgdG0gKl9fcmVzYnVmcCk7DQoNCg0K DQpleHRlcm4gaW50IF9fZ2V0Y2xrdGNrICh2b2lkKTsNCiMgMjcgIi4uL2xvY2FsZS9sb2NhbGVp bmZvLmgiIDINCg0KIyAxICIuLi9pbmNsdWRlL3N5cy90eXBlcy5oIiAxDQojIDI5ICIuLi9sb2Nh bGUvbG9jYWxlaW5mby5oIiAyDQoNCg0KDQoNCiMgMSAiLi4vaW50bC9sb2FkaW5mby5oIiAxDQoj IDU1ICIuLi9pbnRsL2xvYWRpbmZvLmgiDQpzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlDQp7DQogIGNv bnN0IGNoYXIgKmZpbGVuYW1lOw0KICBpbnQgZGVjaWRlZDsNCg0KICBjb25zdCB2b2lkICpkYXRh Ow0KDQogIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKm5leHQ7DQogIHN0cnVjdCBsb2FkZWRfbDEw bmZpbGUgKnN1Y2Nlc3NvclsxXTsNCn07DQoNCg0KDQoNCg0KDQpleHRlcm4gY29uc3QgY2hhciAq X25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LCBzaXplX3QgbmFtZV9s ZW4pOw0KDQoNCmV4dGVybiBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoNCl9ubF9tYWtlX2wxMG5m bGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsIGNvbnN0IGNoYXIg KmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssIGNvbnN0IGNoYXIgKmxhbmd1 YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNo YXIgKm5vcm1hbGl6ZWRfY29kZXNldCwgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIg KnNwZWNpYWwsIGNvbnN0IGNoYXIgKnNwb25zb3IsIGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25z dCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKTsNCiMgODUgIi4uL2ludGwvbG9hZGlu Zm8uaCINCmV4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICpu YW1lKTsNCg0KDQoNCmV4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29u c3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKip0 ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LCBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9j b2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0 IGNoYXIgKipyZXZpc2lvbik7DQojIDk4ICIuLi9pbnRsL2xvYWRpbmZvLmgiDQpleHRlcm4gY2hh ciAqX25sX2ZpbmRfbGFuZ3VhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpOw0KIyAzNCAiLi4vbG9jYWxl L2xvY2FsZWluZm8uaCIgMg0KIyA0NyAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCINCnN0cnVjdCBs b2NhbGVfZGF0YQ0Kew0KICBjb25zdCBjaGFyICpuYW1lOw0KICBjb25zdCBjaGFyICpmaWxlZGF0 YTsNCiAgb2ZmX3QgZmlsZXNpemU7DQogIGludCBtbWFwZWQ7DQoNCiAgdW5zaWduZWQgaW50IHVz YWdlX2NvdW50Ow0KDQogIGludCB1c2VfdHJhbnNsaXQ7DQoNCiAgY29uc3QgY2hhciAqb3B0aW9u czsNCg0KDQogIHVuc2lnbmVkIGludCBuc3RyaW5nczsNCiAgdW5pb24gbG9jYWxlX2RhdGFfdmFs dWUNCiAgew0KICAgIGNvbnN0IHVpbnQzMl90ICp3c3RyOw0KICAgIGNvbnN0IGNoYXIgKnN0cmlu ZzsNCiAgICB1bnNpZ25lZCBpbnQgd29yZDsNCiAgfQ0KICB2YWx1ZXMgW107DQp9Ow0KDQoNCmVu dW0gY29sbF9zb3J0X3J1bGUNCnsNCiAgaWxsZWdhbF8wX18sDQogIHNvcnRfZm9yd2FyZCwNCiAg c29ydF9iYWNrd2FyZCwNCiAgaWxsZWdhbF8zX18sDQogIHNvcnRfcG9zaXRpb24sDQogIHNvcnRf Zm9yd2FyZF9wb3NpdGlvbiwNCiAgc29ydF9iYWNrd2FyZF9wb3NpdGlvbiwNCiAgc29ydF9tYXNr DQp9Ow0KDQoNCmVudW0gdmFsdWVfdHlwZQ0Kew0KICBub25lLA0KICBzdHJpbmcsDQogIHN0cmlu Z2FycmF5LA0KICBieXRlLA0KICBieXRlYXJyYXksDQogIHdvcmQsDQogIHN0cmluZ2xpc3QsDQog IHdvcmRhcnJheSwNCiAgd3N0cmluZywNCiAgd3N0cmluZ2FycmF5LA0KICB3c3RyaW5nbGlzdA0K fTsNCiMgMTEwICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIg0Kc3RydWN0IGVyYV9lbnRyeQ0Kew0K ICB1aW50MzJfdCBkaXJlY3Rpb247DQogIGludDMyX3Qgb2Zmc2V0Ow0KICBpbnQzMl90IHN0YXJ0 X2RhdGVbM107DQogIGludDMyX3Qgc3RvcF9kYXRlWzNdOw0KICBjb25zdCBjaGFyICplcmFfbmFt ZTsNCiAgY29uc3QgY2hhciAqZXJhX2Zvcm1hdDsNCiAgY29uc3Qgd2NoYXJfdCAqZXJhX3duYW1l Ow0KICBjb25zdCB3Y2hhcl90ICplcmFfd2Zvcm1hdDsNCiAgaW50IGFic29sdXRlX2RpcmVjdGlv bjsNCg0KDQoNCn07DQoNCg0KDQoNCmVudW0NCnsNCiAgX19UT1dfdG91cHBlciA9IDAsDQogIF9f VE9XX3RvbG93ZXIgPSAxDQp9Ow0KIyAxNDcgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiDQojIDEg Ii4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiIgMQ0KIyA0MiAiLi4vbG9jYWxlL2NhdGVnb3JpZXMu ZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAqX25sX2N1cnJlbnRfTENfQ09MTEFURTsN CiMgNjggIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2Rh dGEgKl9ubF9jdXJyZW50X0xDX0NUWVBFOw0KIyAxMzkgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRl ZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX01PTkVUQVJZOw0K IyAxOTEgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2Rh dGEgKl9ubF9jdXJyZW50X0xDX05VTUVSSUM7DQojIDIwNSAiLi4vbG9jYWxlL2NhdGVnb3JpZXMu ZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAqX25sX2N1cnJlbnRfTENfVElNRTsNCiMg MjUzICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5kZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRh ICpfbmxfY3VycmVudF9MQ19NRVNTQUdFUzsNCiMgMjY0ICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5k ZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfY3VycmVudF9MQ19QQVBFUjsNCiMg MjczICIuLi9sb2NhbGUvY2F0ZWdvcmllcy5kZWYiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRh ICpfbmxfY3VycmVudF9MQ19OQU1FOw0KIyAyODYgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRlZiIN CmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX0FERFJFU1M7DQojIDMw NSAiLi4vbG9jYWxlL2NhdGVnb3JpZXMuZGVmIg0KZXh0ZXJuIHN0cnVjdCBsb2NhbGVfZGF0YSAq X25sX2N1cnJlbnRfTENfVEVMRVBIT05FOw0KIyAzMTYgIi4uL2xvY2FsZS9jYXRlZ29yaWVzLmRl ZiINCmV4dGVybiBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9ubF9jdXJyZW50X0xDX01FQVNVUkVNRU5U Ow0KDQoNCg0KDQoNCg0KDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfY3VycmVudF9M Q19JREVOVElGSUNBVElPTjsNCiMgMTQ4ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIiAyDQoNCg0K ZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IF9ubF9jYXRlZ29yeV9uYW1lc1sxM107DQpleHRlcm4g Y29uc3Qgc2l6ZV90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzWzEzXTsNCmV4dGVybiBzdHJ1Y3Qg bG9jYWxlX2RhdGEgKiAqY29uc3QgX25sX2N1cnJlbnRbMTNdOw0KDQoNCmV4dGVybiBjb25zdCBj aGFyIF9ubF9DX25hbWVbXTsNCmV4dGVybiBjb25zdCBjaGFyIF9ubF9QT1NJWF9uYW1lW107DQoN Cg0KZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfY29kZXNldFtdOw0KIyAxODIgIi4uL2xvY2FsZS9s b2NhbGVpbmZvLmgiDQpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfZmluZF9sb2NhbGUg KGNvbnN0IGNoYXIgKmxvY2FsZV9wYXRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbG9jYWxlX3BhdGhfbGVuLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKipuYW1l KTsNCg0KDQpleHRlcm4gdm9pZCBfbmxfbG9hZF9sb2NhbGUgKHN0cnVjdCBsb2FkZWRfbDEwbmZp bGUgKmZpbGUsIGludCBjYXRlZ29yeSk7DQoNCg0KZXh0ZXJuIHZvaWQgX25sX3VubG9hZF9sb2Nh bGUgKHN0cnVjdCBsb2NhbGVfZGF0YSAqbG9jYWxlKTsNCg0KDQpleHRlcm4gdm9pZCBfbmxfcmVt b3ZlX2xvY2FsZSAoaW50IGxvY2FsZSwgc3RydWN0IGxvY2FsZV9kYXRhICpkYXRhKTsNCg0KDQoN CmV4dGVybiBzdHJ1Y3QgZXJhX2VudHJ5ICpfbmxfZ2V0X2VyYV9lbnRyeSAoY29uc3Qgc3RydWN0 IHRtICp0cCk7DQoNCg0KZXh0ZXJuIHN0cnVjdCBlcmFfZW50cnkgKl9ubF9zZWxlY3RfZXJhX2Vu dHJ5IChpbnQgY250KTsNCg0KDQpleHRlcm4gY29uc3QgY2hhciAqX25sX2dldF9hbHRfZGlnaXQg KHVuc2lnbmVkIGludCBudW1iZXIpOw0KDQoNCmV4dGVybiBjb25zdCB3Y2hhcl90ICpfbmxfZ2V0 X3dhbHRfZGlnaXQgKHVuc2lnbmVkIGludCBudW1iZXIpOw0KDQoNCmV4dGVybiBpbnQgX25sX3Bh cnNlX2FsdF9kaWdpdCAoY29uc3QgY2hhciAqKnN0cnApOw0KDQoNCmV4dGVybiB2b2lkIF9ubF9w b3N0bG9hZF9jdHlwZSAodm9pZCk7DQpleHRlcm4gdm9pZCBfbmxfcG9zdGxvYWRfdGltZSAodm9p ZCk7DQojIDQ3ICJzdHJjb2xsLmMiIDINCg0KDQppbnQNCnN0cmNvbGwgKHMxLCBzMikNCiAgICAg Y29uc3QgY2hhciAqczE7DQogICAgIGNvbnN0IGNoYXIgKnMyOw0KDQoNCg0KDQoNCg0KDQp7DQoN Cg0KDQoNCiAgdWludF9mYXN0MzJfdCBucnVsZXMgPSAoX25sX2N1cnJlbnRfTENfQ09MTEFURS0+ dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfTlJVTEVTKSAmIDB4ZmZmZildLndvcmQpOw0KDQoN Cg0KICBjb25zdCB1bnNpZ25lZCBjaGFyICpydWxlc2V0czsNCiAgY29uc3QgaW50MzJfdCAqdGFi bGU7DQogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHM7DQogIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmV4dHJhOw0KICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsNCiAgdWludF9mYXN0MzJfdCBw YXNzOw0KICBpbnQgcmVzdWx0ID0gMDsNCiAgY29uc3QgdW5zaWduZWQgY2hhciAqdXMxOw0KICBj b25zdCB1bnNpZ25lZCBjaGFyICp1czI7DQogIHNpemVfdCBzMWxlbjsNCiAgc2l6ZV90IHMybGVu Ow0KICBpbnQzMl90ICppZHgxYXJyOw0KICBpbnQzMl90ICppZHgyYXJyOw0KICB1bnNpZ25lZCBj aGFyICpydWxlMWFycjsNCiAgdW5zaWduZWQgY2hhciAqcnVsZTJhcnI7DQogIHNpemVfdCBpZHgx bWF4Ow0KICBzaXplX3QgaWR4Mm1heDsNCiAgc2l6ZV90IGlkeDFjbnQ7DQogIHNpemVfdCBpZHgy Y250Ow0KICBzaXplX3QgaWR4MW5vdzsNCiAgc2l6ZV90IGlkeDJub3c7DQogIHNpemVfdCBiYWNr dzFfc3RvcDsNCiAgc2l6ZV90IGJhY2t3Ml9zdG9wOw0KICBzaXplX3QgYmFja3cxOw0KICBzaXpl X3QgYmFja3cyOw0KICBpbnQgdmFsMTsNCiAgaW50IHZhbDI7DQogIGludCBwb3NpdGlvbjsNCiAg aW50IHNlcTFsZW47DQogIGludCBzZXEybGVuOw0KICBpbnQgdXNlX21hbGxvYzsNCg0KIyAxICIu Li9sb2NhbGUvd2VpZ2h0LmgiIDENCiMgMjEgIi4uL2xvY2FsZS93ZWlnaHQuaCINCnN0YXRpYyBp bmxpbmUgaW50MzJfdA0KZmluZGlkeCAoY29uc3QgdW5zaWduZWQgY2hhciAqKmNwcCkNCnsNCiAg aW50X2Zhc3QzMl90IGkgPSB0YWJsZVsqKCpjcHApKytdOw0KICBjb25zdCB1bnNpZ25lZCBjaGFy ICpjcDsNCiAgY29uc3QgdW5zaWduZWQgY2hhciAqdXNyYzsNCg0KICBpZiAoaSA+PSAwKQ0KDQog ICAgcmV0dXJuIGk7DQoNCg0KDQogIGNwID0gJmV4dHJhWy1pXTsNCiAgdXNyYyA9ICpjcHA7DQog IHdoaWxlICgxKQ0KICAgIHsNCiAgICAgIHNpemVfdCBuaGVyZTsNCg0KDQogICAgICBpID0gKigo Y29uc3QgaW50MzJfdCAqKSBjcCk7DQogICAgICBjcCArPSBzaXplb2YgKGludDMyX3QpOw0KDQoN Cg0KDQogICAgICBuaGVyZSA9ICpjcCsrOw0KDQogICAgICBpZiAoaSA+PSAwKQ0KICAgICAgICB7 DQoNCg0KDQoNCg0KICAgICAgICAgIHNpemVfdCBjbnQ7DQoNCiAgICAgICAgICBmb3IgKGNudCA9 IDA7IGNudCA8IG5oZXJlOyArK2NudCkNCiAgICAgICAgICAgIGlmIChjcFtjbnRdICE9IHVzcmNb Y250XSkNCiAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICBpZiAoY250ID09IG5oZXJl KQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICpjcHAgKz0gbmhlcmU7DQogICAgICAg ICAgICAgIHJldHVybiBpOw0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICBjcCArPSBuaGVy ZTsNCiAgICAgICAgICBpZiAoKDEgKyBuaGVyZSkgJSBfX2FsaWdub2ZfXyAoaW50MzJfdCkgIT0g MCkNCiAgICAgICAgICAgIGNwICs9IF9fYWxpZ25vZl9fIChpbnQzMl90KSAtICgxICsgbmhlcmUp ICUgX19hbGlnbm9mX18gKGludDMyX3QpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAg IHsNCg0KDQogICAgICAgICAgc2l6ZV90IGNudDsNCiAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g MDsNCg0KICAgICAgICAgIGZvciAoY250ID0gMDsgY250IDwgbmhlcmU7ICsrY250KQ0KICAgICAg ICAgICAgaWYgKGNwW2NudF0gIT0gdXNyY1tjbnRdKQ0KICAgICAgICAgICAgICBicmVhazsNCg0K ICAgICAgICAgIGlmIChjbnQgIT0gbmhlcmUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg IGlmIChjcFtjbnRdID4gdXNyY1tjbnRdKQ0KICAgICAgICAgICAgICAgIHsNCg0KICAgICAgICAg ICAgICAgICAgY3AgKz0gMiAqIG5oZXJlOw0KICAgICAgICAgICAgICAgICAgaWYgKCgxICsgMiAq IG5oZXJlKSAlIF9fYWxpZ25vZl9fIChpbnQzMl90KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAg ICBjcCArPSAoX19hbGlnbm9mX18gKGludDMyX3QpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAtICgxICsgMiAqIG5oZXJlKSAlIF9fYWxpZ25vZl9fIChpbnQzMl90KSk7DQogICAgICAgICAg ICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQoNCg0KICAgICAgICAgICAgICBm b3IgKGNudCA9IDA7IGNudCA8IG5oZXJlOyArK2NudCkNCiAgICAgICAgICAgICAgICBpZiAoY3Bb bmhlcmUgKyBjbnRdICE9IHVzcmNbY250XSkNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQog ICAgICAgICAgICAgIGlmIChjbnQgIT0gbmhlcmUgJiYgY3BbbmhlcmUgKyBjbnRdIDwgdXNyY1tj bnRdKQ0KICAgICAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICAgICAgY3AgKz0gMiAqIG5o ZXJlOw0KICAgICAgICAgICAgICAgICAgaWYgKCgxICsgMiAqIG5oZXJlKSAlIF9fYWxpZ25vZl9f IChpbnQzMl90KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICBjcCArPSAoX19hbGlnbm9mX18g KGludDMyX3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAtICgxICsgMiAqIG5oZXJlKSAl IF9fYWxpZ25vZl9fIChpbnQzMl90KSk7DQogICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAg ICAgICAgICAgICAgICB9DQoNCg0KDQogICAgICAgICAgICAgIGZvciAoY250ID0gMDsgY3BbY250 XSA9PSB1c3JjW2NudF07ICsrY250KTsNCg0KICAgICAgICAgICAgICBkbw0KICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgIG9mZnNldCA8PD0gODsNCiAgICAgICAgICAgICAgICAg IG9mZnNldCArPSB1c3JjW2NudF0gLSBjcFtjbnRdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgd2hpbGUgKCsrY250IDwgbmhlcmUpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAg ICAgKmNwcCArPSBuaGVyZTsNCiAgICAgICAgICByZXR1cm4gaW5kaXJlY3RbLWkgKyBvZmZzZXRd Ow0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgcmV0dXJuIDB4NDMyMTk4NzY7DQp9DQojIDEwMiAi c3RyY29sbC5jIiAyDQoNCiAgaWYgKG5ydWxlcyA9PSAwKQ0KICAgIHJldHVybiBfX2V4dGVuc2lv bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo czEpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChzMikgJiYgKF9fczFfbGVuID0gc3RybGVuIChz MSksIF9fczJfbGVuID0gc3RybGVuIChzMiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHMx KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzMSkgPT0gMSkgfHwgX19zMV9sZW4gPj0g NCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoczIpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKHMyKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0 IGNoYXIgKikgKHMxKSwgKF9fY29uc3QgY2hhciAqKSAoczIpLCAoX19zMV9sZW4gPCBfX3MyX2xl biA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHMx KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoczEpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKHMxKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHMxKSwgX19zMV9sZW4gPCA0 KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoczIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICop KChzMikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoczIpID09IDEpID8gKF9fZXh0ZW5z aW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopKHMyKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoczEpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHMyKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEp KVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlb Ml0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMxKSlbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzNdKTsgfSB9IF9fcmVz dWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIg PSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKTsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHMxKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHMxKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHMxKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9 PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChzMSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoczIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChzMikgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikoczIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoczIp LCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzMSkgJiYgKChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKHMxKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzMSkgPT0g MSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEpKVswXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoczIpKVswXSk7IGlmIChfX3MyX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChzMSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoczIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChzMSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoczIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczEp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHMyKSlb M10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoczEpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzMikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoczIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6 IHN0cmNtcCAoczEsIHMyKSkpKTsgfSk7DQojIDExOCAic3RyY29sbC5jIg0KICBydWxlc2V0cyA9 IChjb25zdCB1bnNpZ25lZCBjaGFyICopDQogICAgKF9ubF9jdXJyZW50X0xDX0NPTExBVEUtPnZh bHVlc1soKGludCkgKF9OTF9DT0xMQVRFX1JVTEVTRVRTKSAmIDB4ZmZmZildLnN0cmluZyk7DQog IHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikNCiAgICAoX25sX2N1cnJlbnRfTENfQ09MTEFURS0+ dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfVEFCTEVNQikgJiAweGZmZmYpXS5zdHJpbmcpOw0K ICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikNCiAgICAoX25sX2N1cnJlbnRfTENf Q09MTEFURS0+dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfV0VJR0hUTUIpICYgMHhmZmZmKV0u c3RyaW5nKTsNCiAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQ0KICAgIChfbmxfY3Vy cmVudF9MQ19DT0xMQVRFLT52YWx1ZXNbKChpbnQpIChfTkxfQ09MTEFURV9FWFRSQU1CKSAmIDB4 ZmZmZildLnN0cmluZyk7DQogIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikNCiAgICAoX25s X2N1cnJlbnRfTENfQ09MTEFURS0+dmFsdWVzWygoaW50KSAoX05MX0NPTExBVEVfSU5ESVJFQ1RN QikgJiAweGZmZmYpXS5zdHJpbmcpOw0KDQogIHVzZV9tYWxsb2MgPSAwOw0KDQogICgodm9pZCkg KCgoKHVpbnRwdHJfdCkgdGFibGUpICUgX19hbGlnbm9mX18gKHRhYmxlWzBdKSA9PSAwKSA/IDAg OiAoX19hc3NlcnRfZmFpbCAoIigodWludHB0cl90KSB0YWJsZSkgJSBfX2FsaWdub2ZfXyAodGFi bGVbMF0pID09IDAiLCAic3RyY29sbC5jIiwgMTMxLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsNCiAgKCh2b2lkKSAoKCgodWludHB0cl90KSB3ZWlnaHRzKSAlIF9fYWxpZ25vZl9fICh3ZWln aHRzWzBdKSA9PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIigodWludHB0cl90KSB3ZWlnaHRz KSAlIF9fYWxpZ25vZl9fICh3ZWlnaHRzWzBdKSA9PSAwIiwgInN0cmNvbGwuYyIsIDEzMiwgX19Q UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7DQogICgodm9pZCkgKCgoKHVpbnRwdHJfdCkgZXh0cmEp ICUgX19hbGlnbm9mX18gKGV4dHJhWzBdKSA9PSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIigo dWludHB0cl90KSBleHRyYSkgJSBfX2FsaWdub2ZfXyAoZXh0cmFbMF0pID09IDAiLCAic3RyY29s bC5jIiwgMTMzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsNCiAgKCh2b2lkKSAoKCgodWlu dHB0cl90KSBpbmRpcmVjdCkgJSBfX2FsaWdub2ZfXyAoaW5kaXJlY3RbMF0pID09IDApID8gMCA6 IChfX2Fzc2VydF9mYWlsICgiKCh1aW50cHRyX3QpIGluZGlyZWN0KSAlIF9fYWxpZ25vZl9fIChp bmRpcmVjdFswXSkgPT0gMCIsICJzdHJjb2xsLmMiLCAxMzQsIF9fUFJFVFRZX0ZVTkNUSU9OX18p LCAwKSkpOw0KDQoNCiAgczFsZW4gPSBzdHJsZW4gKHMxKTsNCiAgczJsZW4gPSBzdHJsZW4gKHMy KTsNCg0KDQoNCiAgdXMxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgczE7DQogIHVzMiA9IChj b25zdCB1bnNpZ25lZCBjaGFyICopIHMyOw0KIyAxNTQgInN0cmNvbGwuYyINCiAgaWYgKHMxbGVu ICsgczJsZW4gPj0gMTYzODQpDQogICAgew0KICAgICAgaWR4MWFyciA9IChpbnQzMl90ICopIG1h bGxvYyAoKHMxbGVuICsgczJsZW4pICogKHNpemVvZiAoaW50MzJfdCkgKyAxKSk7DQogICAgICBp ZHgyYXJyID0gJmlkeDFhcnJbczFsZW5dOw0KICAgICAgcnVsZTFhcnIgPSAodW5zaWduZWQgY2hh ciAqKSAmaWR4MmFycltzMmxlbl07DQogICAgICBydWxlMmFyciA9ICZydWxlMWFycltzMWxlbl07 DQoNCiAgICAgIGlmIChpZHgxYXJyID09ICgodm9pZCAqKTApKQ0KDQoNCg0KDQoNCg0KICAgICAg ICBnb3RvIHRyeV9zdGFjazsNCiAgICAgIHVzZV9tYWxsb2MgPSAxOw0KICAgIH0NCiAgZWxzZQ0K ICAgIHsNCiAgICB0cnlfc3RhY2s6DQogICAgICBpZHgxYXJyID0gKGludDMyX3QgKikgX19idWls dGluX2FsbG9jYSAoczFsZW4gKiBzaXplb2YgKGludDMyX3QpKTsNCiAgICAgIGlkeDJhcnIgPSAo aW50MzJfdCAqKSBfX2J1aWx0aW5fYWxsb2NhIChzMmxlbiAqIHNpemVvZiAoaW50MzJfdCkpOw0K ICAgICAgcnVsZTFhcnIgPSAodW5zaWduZWQgY2hhciAqKSBfX2J1aWx0aW5fYWxsb2NhIChzMWxl bik7DQogICAgICBydWxlMmFyciA9ICh1bnNpZ25lZCBjaGFyICopIF9fYnVpbHRpbl9hbGxvY2Eg KHMybGVuKTsNCiAgICB9DQoNCiAgaWR4MWNudCA9IDA7DQogIGlkeDJjbnQgPSAwOw0KICBpZHgx bWF4ID0gMDsNCiAgaWR4Mm1heCA9IDA7DQogIGlkeDFub3cgPSAwOw0KICBpZHgybm93ID0gMDsN CiAgYmFja3cxX3N0b3AgPSB+MHVsOw0KICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogIGJhY2t3MSA9 IH4wdWw7DQogIGJhY2t3MiA9IH4wdWw7DQogIHNlcTFsZW4gPSAwOw0KICBzZXEybGVuID0gMDsN CiAgcG9zaXRpb24gPSBydWxlc2V0c1swXSAmIHNvcnRfcG9zaXRpb247DQogIHdoaWxlICgxKQ0K ICAgIHsNCiAgICAgIHZhbDEgPSAwOw0KICAgICAgdmFsMiA9IDA7DQoNCg0KICAgICAgaWYgKHNl cTFsZW4gPT0gMCkNCiAgICAgICAgZG8NCiAgICAgICAgICB7DQogICAgICAgICAgICArK3ZhbDE7 DQoNCiAgICAgICAgICAgIGlmIChiYWNrdzFfc3RvcCAhPSB+MHVsKQ0KICAgICAgICAgICAgICB7 DQoNCiAgICAgICAgICAgICAgICBpZiAoYmFja3cxID09IGJhY2t3MV9zdG9wKQ0KICAgICAgICAg ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlkeDFjbnQgPCBpZHgxbWF4 KQ0KICAgICAgICAgICAgICAgICAgICAgIGlkeDFub3cgPSBpZHgxY250Ow0KICAgICAgICAgICAg ICAgICAgICBlbHNlDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgaWR4 MW5vdyA9IC0tYmFja3cxOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBiYWNrdzFfc3RvcCA9IGlkeDFtYXg7DQoNCiAg ICAgICAgICAgICAgICB3aGlsZSAoKnVzMSAhPSAnXDAnKQ0KICAgICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHRtcCA9IGZpbmRpZHggKCZ1czEpOw0KICAgICAg ICAgICAgICAgICAgICBydWxlMWFycltpZHgxbWF4XSA9IHRtcCA+PiAyNDsNCiAgICAgICAgICAg ICAgICAgICAgaWR4MWFycltpZHgxbWF4XSA9IHRtcCAmIDB4ZmZmZmZmOw0KICAgICAgICAgICAg ICAgICAgICBpZHgxY250ID0gaWR4MW1heCsrOw0KDQogICAgICAgICAgICAgICAgICAgIGlmICgo cnVsZXNldHNbcnVsZTFhcnJbaWR4MWNudF0gKiBucnVsZXNdDQogICAgICAgICAgICAgICAgICAg ICAgICAgJiBzb3J0X2JhY2t3YXJkKSA9PSAwKQ0KDQogICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICAgICAgICAgICsraWR4MWNudDsNCiAgICAgICAgICAgICAgICAgIH0N Cg0KICAgICAgICAgICAgICAgIGlmIChiYWNrdzFfc3RvcCA+PSBpZHgxY250KQ0KICAgICAgICAg ICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpZHgxY250ID09IGlkeDFtYXgg fHwgYmFja3cxX3N0b3AgPiBpZHgxY250KQ0KDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQoNCiAgICAgICAgICAgICAgICAgICAgYmFja3cxX3N0b3AgPSB+MHVsOw0KICAgICAgICAgICAg ICAgICAgICBpZHgxbm93ID0gaWR4MWNudDsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICBlbHNlDQoNCiAgICAgICAgICAgICAgICAgIGlkeDFub3cgPSBiYWNrdzEgPSBpZHgx Y250IC0gMTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgd2hpbGUgKChz ZXExbGVuID0gd2VpZ2h0c1tpZHgxYXJyW2lkeDFub3ddKytdKSA9PSAwKTsNCg0KDQogICAgICBp ZiAoc2VxMmxlbiA9PSAwKQ0KICAgICAgICBkbw0KICAgICAgICAgIHsNCiAgICAgICAgICAgICsr dmFsMjsNCg0KICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wICE9IH4wdWwpDQogICAgICAgICAg ICAgIHsNCg0KICAgICAgICAgICAgICAgIGlmIChiYWNrdzIgPT0gYmFja3cyX3N0b3ApDQogICAg ICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaWR4MmNudCA8IGlk eDJtYXgpDQogICAgICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGlkeDJjbnQ7DQogICAgICAg ICAgICAgICAgICAgIGVsc2UNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg ICBpZHgybm93ID0gLS1iYWNrdzI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UN CiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGJhY2t3Ml9zdG9wID0gaWR4Mm1heDsN Cg0KICAgICAgICAgICAgICAgIHdoaWxlICgqdXMyICE9ICdcMCcpDQogICAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICAgIGludDMyX3QgdG1wID0gZmluZGlkeCAoJnVzMik7DQog ICAgICAgICAgICAgICAgICAgIHJ1bGUyYXJyW2lkeDJtYXhdID0gdG1wID4+IDI0Ow0KICAgICAg ICAgICAgICAgICAgICBpZHgyYXJyW2lkeDJtYXhdID0gdG1wICYgMHhmZmZmZmY7DQogICAgICAg ICAgICAgICAgICAgIGlkeDJjbnQgPSBpZHgybWF4Kys7DQoNCiAgICAgICAgICAgICAgICAgICAg aWYgKChydWxlc2V0c1tydWxlMmFycltpZHgyY250XSAqIG5ydWxlc10NCiAgICAgICAgICAgICAg ICAgICAgICAgICAmIHNvcnRfYmFja3dhcmQpID09IDApDQoNCiAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgKytpZHgyY250Ow0KICAgICAgICAgICAgICAg ICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wID49IGlkeDJjbnQpDQogICAg ICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlkeDJjbnQgPT0gaWR4 Mm1heCB8fCBiYWNrdzJfc3RvcCA+IGlkeDJjbnQpDQoNCiAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCg0KICAgICAgICAgICAgICAgICAgICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogICAgICAg ICAgICAgICAgICAgIGlkeDJub3cgPSBpZHgyY250Ow0KICAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGJhY2t3MiA9 IGlkeDJjbnQgLSAxOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB3aGls ZSAoKHNlcTJsZW4gPSB3ZWlnaHRzW2lkeDJhcnJbaWR4Mm5vd10rK10pID09IDApOw0KDQoNCiAg ICAgIGlmIChzZXExbGVuID09IDAgfHwgc2VxMmxlbiA9PSAwKQ0KICAgICAgICB7DQogICAgICAg ICAgaWYgKHNlcTFsZW4gPT0gc2VxMmxlbikNCg0KDQogICAgICAgICAgICBicmVhazsNCg0KDQoN CiAgICAgICAgICByZXN1bHQgPSBzZXExbGVuID09IDAgPyAtMSA6IDE7DQogICAgICAgICAgZ290 byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgIH0NCg0KDQogICAgICBpZiAocG9zaXRpb24gJiYg dmFsMSAhPSB2YWwyKQ0KICAgICAgICB7DQogICAgICAgICAgcmVzdWx0ID0gdmFsMSAtIHZhbDI7 DQogICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgIH0NCg0KDQogICAgICBk bw0KICAgICAgICB7DQogICAgICAgICAgaWYgKHdlaWdodHNbaWR4MWFycltpZHgxbm93XV0gIT0g d2VpZ2h0c1tpZHgyYXJyW2lkeDJub3ddXSkNCiAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAg ICByZXN1bHQgPSB3ZWlnaHRzW2lkeDFhcnJbaWR4MW5vd11dIC0gd2VpZ2h0c1tpZHgyYXJyW2lk eDJub3ddXTsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47DQogICAgICAgICAg ICB9DQoNCg0KICAgICAgICAgICsraWR4MWFycltpZHgxbm93XTsNCiAgICAgICAgICArK2lkeDJh cnJbaWR4Mm5vd107DQoNCiAgICAgICAgICAtLXNlcTFsZW47DQogICAgICAgICAgLS1zZXEybGVu Ow0KICAgICAgICB9DQogICAgICB3aGlsZSAoc2VxMWxlbiA+IDAgJiYgc2VxMmxlbiA+IDApOw0K DQogICAgICBpZiAocG9zaXRpb24gJiYgc2VxMWxlbiAhPSBzZXEybGVuKQ0KICAgICAgICB7DQog ICAgICAgICAgcmVzdWx0ID0gc2VxMWxlbiAtIHNlcTJsZW47DQogICAgICAgICAgZ290byBmcmVl X2FuZF9yZXR1cm47DQogICAgICAgIH0NCiAgICB9DQoNCg0KDQogIGZvciAocGFzcyA9IDE7IHBh c3MgPCBucnVsZXM7ICsrcGFzcykNCiAgICB7DQoNCg0KICAgICAgaWR4MWNudCA9IDA7DQogICAg ICBpZHgyY250ID0gMDsNCiAgICAgIGJhY2t3MV9zdG9wID0gfjB1bDsNCiAgICAgIGJhY2t3Ml9z dG9wID0gfjB1bDsNCiAgICAgIGJhY2t3MSA9IH4wdWw7DQogICAgICBiYWNrdzIgPSB+MHVsOw0K ICAgICAgcG9zaXRpb24gPSBydWxlc2V0c1tydWxlMWFyclswXSAqIG5ydWxlcyArIHBhc3NdICYg c29ydF9wb3NpdGlvbjsNCg0KICAgICAgd2hpbGUgKDEpDQogICAgICAgIHsNCiAgICAgICAgICB2 YWwxID0gMDsNCiAgICAgICAgICB2YWwyID0gMDsNCg0KDQogICAgICAgICAgaWYgKHNlcTFsZW4g PT0gMCkNCiAgICAgICAgICAgIGRvDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAr K3ZhbDE7DQoNCiAgICAgICAgICAgICAgICBpZiAoYmFja3cxX3N0b3AgIT0gfjB1bCkNCiAgICAg ICAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3cxID09IGJhY2t3 MV9zdG9wKQ0KICAgICAgICAgICAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoaWR4MWNudCA8IGlkeDFtYXgpDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlk eDFub3cgPSBpZHgxY250Ow0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDFu b3cgPSB+MHVsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgaWR4MW5vdyA9IC0tYmFja3cxOw0K ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgYmFja3cxX3N0b3AgPSBpZHgxY250Ow0KDQogICAg ICAgICAgICAgICAgICAgIHdoaWxlIChpZHgxY250IDwgaWR4MW1heCkNCiAgICAgICAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ1bGVzZXRzW3J1bGUxYXJy W2lkeDFjbnRdICogbnJ1bGVzICsgcGFzc10NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiBzb3J0X2JhY2t3YXJkKSA9PSAwKQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgICAgICAgICAgICAgKytpZHgxY250Ow0KICAgICAgICAgICAgICAgICAg ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3cxX3N0b3AgPT0gaWR4MWNudCkN CiAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp ZHgxY250ID09IGlkeDFtYXgpDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3MV9zdG9wID0gfjB1bDsNCiAgICAgICAgICAg ICAgICAgICAgICAgIGlkeDFub3cgPSBpZHgxY250Kys7DQogICAgICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQoNCiAgICAgICAgICAgICAgICAgICAgICBpZHgx bm93ID0gYmFja3cxID0gaWR4MWNudCAtIDE7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIHdoaWxlICgoc2VxMWxlbiA9IHdlaWdodHNbaWR4MWFycltp ZHgxbm93XSsrXSkgPT0gMCk7DQoNCg0KICAgICAgICAgIGlmIChzZXEybGVuID09IDApDQogICAg ICAgICAgICBkbw0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgKyt2YWwyOw0KDQog ICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wICE9IH4wdWwpDQogICAgICAgICAgICAgICAg ICB7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t3MiA9PSBiYWNrdzJfc3RvcCkNCiAg ICAgICAgICAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlk eDJjbnQgPCBpZHgybWF4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgybm93ID0gaWR4 MmNudDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgybm93ID0gfjB1bDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICAgICAgIGlkeDJub3cgPSAtLWJhY2t3MjsNCiAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgICAgIGJhY2t3Ml9zdG9wID0gaWR4MmNudDsNCg0KICAgICAgICAgICAgICAg ICAgICB3aGlsZSAoaWR4MmNudCA8IGlkeDJtYXgpDQogICAgICAgICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChydWxlc2V0c1tydWxlMmFycltpZHgyY250XSAq IG5ydWxlcyArIHBhc3NdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgc29ydF9iYWNr d2FyZCkgPT0gMCkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg ICAgICAgICAgICAgICAgICsraWR4MmNudDsNCiAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAg ICAgICAgICAgICAgICAgICAgaWYgKGJhY2t3Ml9zdG9wID09IGlkeDJjbnQpDQogICAgICAgICAg ICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4MmNudCA9PSBp ZHgybWF4KQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAg ICAgICAgICAgICAgICBiYWNrdzJfc3RvcCA9IH4wdWw7DQogICAgICAgICAgICAgICAgICAgICAg ICBpZHgybm93ID0gaWR4MmNudCsrOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgICAgICAgZWxzZQ0KDQogICAgICAgICAgICAgICAgICAgICAgaWR4Mm5vdyA9IGJhY2t3 MiA9IGlkeDJjbnQgLSAxOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQog ICAgICAgICAgICB3aGlsZSAoKHNlcTJsZW4gPSB3ZWlnaHRzW2lkeDJhcnJbaWR4Mm5vd10rK10p ID09IDApOw0KDQoNCiAgICAgICAgICBpZiAoc2VxMWxlbiA9PSAwIHx8IHNlcTJsZW4gPT0gMCkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHNlcTFsZW4gPT0gc2VxMmxlbikNCg0K DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCg0KDQogICAgICAgICAgICAgIHJlc3VsdCA9IHNl cTFsZW4gPT0gMCA/IC0xIDogMTsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47 DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiB2YWwxICE9IHZh bDIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDEgLSB2YWwyOw0K ICAgICAgICAgICAgICBnb3RvIGZyZWVfYW5kX3JldHVybjsNCiAgICAgICAgICAgIH0NCg0KDQog ICAgICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHdlaWdodHNbaWR4 MWFycltpZHgxbm93XV0gIT0gd2VpZ2h0c1tpZHgyYXJyW2lkeDJub3ddXSkNCiAgICAgICAgICAg ICAgICB7DQoNCiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICh3ZWlnaHRzW2lkeDFhcnJbaWR4 MW5vd11dDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB3ZWlnaHRzW2lkeDJhcnJbaWR4 Mm5vd11dKTsNCiAgICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9hbmRfcmV0dXJuOw0KICAgICAg ICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICsraWR4MWFycltpZHgxbm93XTsNCiAgICAg ICAgICAgICAgKytpZHgyYXJyW2lkeDJub3ddOw0KDQogICAgICAgICAgICAgIC0tc2VxMWxlbjsN CiAgICAgICAgICAgICAgLS1zZXEybGVuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxl IChzZXExbGVuID4gMCAmJiBzZXEybGVuID4gMCk7DQoNCiAgICAgICAgICBpZiAocG9zaXRpb24g JiYgc2VxMWxlbiAhPSBzZXEybGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICByZXN1 bHQgPSBzZXExbGVuIC0gc2VxMmxlbjsNCiAgICAgICAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1 cm47DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCg0KIGZyZWVfYW5kX3JldHVy bjoNCiAgaWYgKHVzZV9tYWxsb2MpDQogICAgZnJlZSAoaWR4MWFycik7DQoNCiAgcmV0dXJuIHJl c3VsdDsNCn0NCg==