public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: davidm@hpl.hp.com To: gcc-gnats@gcc.gnu.org Cc: wilson@redhat.com, davidm@hpl.hp.com Subject: c++/2920: compiler crashes while compiling static constructor Date: Thu, 24 May 2001 00:16:00 -0000 [thread overview] Message-ID: <20010524071151.21692.qmail@sourceware.cygnus.com> (raw) >Number: 2920 >Category: c++ >Synopsis: compiler crashes while compiling static constructor >Confidential: no >Severity: critical >Priority: high >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Thu May 24 00:16:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: davidm@hpl.hp.com >Release: gcc version 3.0 20010523 (prerelease) >Organization: >Environment: IA-64 Linux >Description: The compiler crashes due to a line of the form: nsCOMPtr<nsIFile> nsSoftwareUpdate::mProgramDir = 0; If the line is changed to: nsCOMPtr<nsIFile> nsSoftwareUpdate::mProgramDir; then no crash occurs. >How-To-Repeat: $ c++ -c bug-swupdate.i In file included from nsInstall.h:40, from nsSoftwareUpdate.cpp:45: ../../dist/include/nsHashtable.h: In member function `virtual PRUint32 nsISupportsKey::HashCode() const': ../../dist/include/nsHashtable.h:190: warning: cast from pointer to integer of different size ../../dist/include/nsHashtable.h: In member function `virtual PRUint32 nsVoidKey::HashCode() const': ../../dist/include/nsHashtable.h:219: warning: cast from pointer to integer of different size ../../dist/include/nsBufferHandle.h: In function `void __static_initialization_and_destruction_0(int, int)': ../../dist/include/nsBufferHandle.h:94: Internal compiler error in emit_move_insn_1, at expr.c:2986 Please submit a full bug report, with preprocessed source if appropriate. See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug-swupdate.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug-swupdate.i" IyAxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIKIyAxICIuLi8uLi9jb25maWctZGVmcy5oIiAxCiMg MiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAyNiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiCiMg MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMzcgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc2NvcmUuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAxCiMgMzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcnR5cGVzLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByY3B1Y2ZnLmgiIDEKIyA0MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIgMgoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQt aHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9nY2MtcHJlMy4w L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl ZiBsb25nIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIv aWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgdW5zaWdu ZWQgaW50IHNpemVfdDsKIyA0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIgMgojIDIzNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHlwZXMuaCIKZXh0ZXJuICJDIiB7CiMgMjQ0ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFJV aW50ODsKIyAyNTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5 cGVzLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgUFJJbnQ4OwojIDI3MSAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBQUlVpbnQxNjsKdHlwZWRlZiBzaG9ydCBQUkludDE2OwojIDI4NCAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQg UFJVaW50MzI7CnR5cGVkZWYgaW50IFBSSW50MzI7CiMgMzA5ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIGxvbmcgUFJJbnQ2NDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIFBSVWludDY0OwojIDM0MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBpbnQgUFJJbnRuOwp0eXBlZGVm IHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBkb3VibGUgUFJGbG9hdDY0OwoKCgoKCgp0 eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgUFJPZmZzZXQzMjsK dHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7CgoKCgoKCgp0eXBlZGVmIHB0cmRpZmZfdCBQUlB0 cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUFJVcHRyZGlmZjsKIyAzOTUgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYg UFJJbnRuIFBSQm9vbDsKIyA0MDUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQUlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRl ZiBlbnVtIHsgUFJfRkFJTFVSRSA9IC0xLCBQUl9TVUNDRVNTID0gMCB9IFBSU3RhdHVzOwojIDQy NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw ZWRlZiBsb25nIFBSV29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIv dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5o IiAxCiMgMjkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0 ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4gdWludG47Cgp0eXBlZGVmIFBSSW50biBpbnRu OwojIDUzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUv cHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMv Y2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIg MSAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDIgMwoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy IDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3Vf cXVhZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fcXVhZF90Owp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90 Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp bnQzMl90Owp0eXBlZGVmIHNpZ25lZCBsb25nIGludCBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgX191aW50NjRfdDsKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlw ZWRlZiBfX3VpbnQ2NF90IF9fZGV2X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3VpZF90Owp0eXBl ZGVmIF9fdWludDMyX3QgX19naWRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vX3Q7CnR5cGVk ZWYgX191aW50NjRfdCBfX2lubzY0X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX21vZGVfdDsKdHlw ZWRlZiBfX3VpbnQ2NF90IF9fbmxpbmtfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19vZmZfdDsKdHlw ZWRlZiBfX2ludDY0X3QgX19vZmY2NF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2xvZmZfdDsKdHlw ZWRlZiBfX2ludDMyX3QgX19waWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19zc2l6ZV90Owp0eXBl ZGVmIF9fdWludDY0X3QgX19ybGltX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3JsaW02NF90Owp0 eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudDY0 X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191aW50NjRfdCBf X2ZzYmxrY250NjRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf X3VpbnQ2NF90IF9fZnNmaWxjbnQ2NF90Owp0eXBlZGVmIF9fdWludDMyX3QgX19pZF90OwoKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVm IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50 IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9u ZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5cGVkZWYg bG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9f Y2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGludCBfX2lwY19w aWRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIGludCBf X3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl ZiBsb25nIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90 OwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vz ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z Y2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19z Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3Iv aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxv Y2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRl ZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBl ZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQg X19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50 IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBp bnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNr c2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBw dGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl YWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAg X3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYg aW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QK ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVy czsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3Jl YWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9f cndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf cndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190 OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2Nr OwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVz Y3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsK ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxMTQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191 X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQg dV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsK dHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0 eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0 eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoK dHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0 eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoK CnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsK CgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0 eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsK dHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEy NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Ns b2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz CiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90 OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9j a2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9f c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2dj Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVs b25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQg aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBp bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBp bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBp bnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vz ci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMiAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vz ci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoK Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8g KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2ln c2V0X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAg ICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1 ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2 MCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAg ICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAi L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9t YXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNb MTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoK dHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZk X3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9f cmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj dCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3Ry aWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19u ZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZk X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAq X19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg dGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEwICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNt YWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlw ZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtj bnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2Zz ZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0 eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZz YmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDU0 ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlw ZXMuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50NjQgdWludDY0OwoKdHlwZWRlZiBQUlVpbnQzMiB1 aW50MzI7CgoKCnR5cGVkZWYgUFJVaW50MTYgdWludDE2Owp0eXBlZGVmIFBSVWludDggdWludDg7 CiMgNzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9w cm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIg aW50MzI7CgoKCgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CnR5cGVkZWYgUFJJbnQ4IGludDg7CgoK CgoKdHlwZWRlZiBQUkZsb2F0NjQgZmxvYXQ2NDsKdHlwZWRlZiBQUlVwdHJkaWZmIHVwdHJkaWZm X3Q7CnR5cGVkZWYgUFJVd29yZCB1cHJ3b3JkX3Q7CnR5cGVkZWYgUFJXb3JkIHByd29yZF90Owoj IDQ2NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg MgoKCgoKCn0KIyAzOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAyCgoKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl YnVnLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlz dC9pbmNsdWRlL25zRGVidWcuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcu aCIgMgojIDQyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgpjbGFzcyBuc0RlYnVnIHsK cHVibGljOgoKCgoKCgogIHN0YXRpYyB2b2lkIEFib3J0SWZGYWxzZShjb25zdCBjaGFyKiBhU3Ry LCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwojIDYwICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNEZWJ1Zy5oIgogIHN0YXRpYyBQUkJvb2wgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwg Y29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CiMgNzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0RlYnVnLmgiCiAgc3RhdGljIHZvaWQgU2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUoUFJCb29s IGFPbk9mZik7CgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUo dm9pZCk7CiMgOTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZvaWQg QWJvcnQoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lk IEJyZWFrKGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9p ZCBQcmVDb25kaXRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFM aW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgUG9zdENvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBj b25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgQXNzZXJ0aW9u KGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRp YyB2b2lkIE5vdFlldEltcGxlbWVudGVkKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFM aW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgTm90UmVhY2hlZChjb25zdCBjaGFyKiBhTWVzc2FnZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRu IGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgRXJyb3IoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUp OwoKCgoKICBzdGF0aWMgdm9pZCBXYXJuaW5nKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwp9 OwojIDQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDIKIyAyMTMgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc2NvcmUuaCIKICAgIHR5cGVkZWYgUFJVaW50MTYgUFJVbmljaGFyOwojIDI3ICJu c1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmlj RmFjdG9yeS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmljRmFjdG9yeS5o IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAxMCAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y dHMuaCIgMQojIDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDEKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z cm9vdGlkbC5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDEyICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMxICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDUwICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCmV4dGVybiBQUkludDY0 IExMX01heEludCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfTWluSW50KHZvaWQpOwpleHRlcm4g UFJJbnQ2NCBMTF9aZXJvKHZvaWQpOwojIDQwNyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgMzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBQUkludDY0IFBS VGltZTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJUaW1lUGFyYW1ldGVycyB7CiAgICBQUkludDMy IHRwX2dtdF9vZmZzZXQ7CiAgICBQUkludDMyIHRwX2RzdF9vZmZzZXQ7Cn0gUFJUaW1lUGFyYW1l dGVyczsKIyA5NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGlt ZS5oIgp0eXBlZGVmIHN0cnVjdCBQUkV4cGxvZGVkVGltZSB7CiAgICBQUkludDMyIHRtX3VzZWM7 CiAgICBQUkludDMyIHRtX3NlYzsKCiAgICBQUkludDMyIHRtX21pbjsKICAgIFBSSW50MzIgdG1f aG91cjsKICAgIFBSSW50MzIgdG1fbWRheTsKCiAgICBQUkludDMyIHRtX21vbnRoOwogICAgUFJJ bnQxNiB0bV95ZWFyOwoKCiAgICBQUkludDggdG1fd2RheTsKCiAgICBQUkludDE2IHRtX3lkYXk7 CgoKICAgIFBSVGltZVBhcmFtZXRlcnMgdG1fcGFyYW1zOwp9IFBSRXhwbG9kZWRUaW1lOwojIDEz OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBl ZGVmIFBSVGltZVBhcmFtZXRlcnMgKCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRp bWUgKmdtdCk7CiMgMTYxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0aW1lLmgiCmV4dGVybiBQUlRpbWUKClBSX05vdyh2b2lkKTsKIyAxNzUgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIHZvaWQgUFJfRXhw bG9kZVRpbWUoCiAgICBQUlRpbWUgdXNlY3MsIFBSVGltZVBhcmFtRm4gcGFyYW1zLCBQUkV4cGxv ZGVkVGltZSAqZXhwbG9kZWQpOwoKCgoKCmV4dGVybiBQUlRpbWUKClBSX0ltcGxvZGVUaW1lKGNv bnN0IFBSRXhwbG9kZWRUaW1lICpleHBsb2RlZCk7CiMgMTk4ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX05vcm1hbGl6ZVRp bWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFtRm4gcGFyYW1zKTsK CgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFyYW1ldGVycyhjb25z dCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1ldGVycyBQUl9HTVRQ YXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4dGVybiBQUlRpbWVQ YXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1l ICpnbXQpOwojIDI0OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By dGltZS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUGFyc2VUaW1lU3RyaW5nICgKICAgICAgICBjb25z dCBjaGFyICpzdHJpbmcsCiAgICAgICAgUFJCb29sIGRlZmF1bHRfdG9fZ210LAogICAgICAgIFBS VGltZSAqcmVzdWx0KTsKIyAyNjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVWludDMyIFBSX0Zvcm1hdFRpbWUoY2hhciAqYnVmLCBp bnQgYnVmbGVuLCBjb25zdCBjaGFyICpmbXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBQUkV4cGxvZGVkVGltZSAqdG0pOwoKCgoKZXh0ZXJuIFBSVWlu dDMyClBSX0Zvcm1hdFRpbWVVU0VuZ2xpc2goIGNoYXIqIGJ1ZiwgUFJVaW50MzIgYnVmU2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0LCBjb25zdCBQUkV4cGxv ZGVkVGltZSogdG0gKTsKCgoKfQojIDEzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgi IDIKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDIKIyAxMTcgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT dXBwb3J0c1V0aWxzLmgiIDEKIyAzMiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp bHMuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMyAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zRGVidWcuaCIgMQojIDM2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5o IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJRC5oIgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNy L2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICpt ZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK ZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChf X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRo cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0 IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6 ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRl L3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3Qg bG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQg Kl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9f Y3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcu aCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv bnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0 LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg Y2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4 dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9f aGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVt cGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFy ICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8g KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChf X2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0 KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u ZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4 dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu dCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK ZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNl Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2Vw IChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3Ry dmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25h bCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy b3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp IHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyNyAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUQuaCIgMgojIDQwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgpz dHJ1Y3QgbnNJRCB7CgoKCgoKICBQUlVpbnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQx NiBtMjsKICBQUlVpbnQ4IG0zWzhdOwojIDYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgog IGlubGluZSBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CiAgICByZXR1 cm4gKFBSQm9vbCkKICAgICAgKCgoKFBSVWludDMyKikgJm0wKVswXSA9PSAoKFBSVWludDMyKikg Jm90aGVyLm0wKVswXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsxXSA9PSAoKFBSVWlu dDMyKikgJm90aGVyLm0wKVsxXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsyXSA9PSAo KFBSVWludDMyKikgJm90aGVyLm0wKVsyXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsz XSA9PSAoKFBSVWludDMyKikgJm90aGVyLm0wKVszXSkpOwogIH0KCgoKCgogICAgICAgICBQUkJv b2wgUGFyc2UoY29uc3QgY2hhciAqYUlEU3RyKTsKCgoKCgogICAgICAgICBjaGFyKiBUb1N0cmlu ZygpIGNvbnN0OwoKfTsKIyAxMDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnR5cGVkZWYg bnNJRCBuc0NJRDsKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIg MgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJRC5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lJRC5oIgp0eXBlZGVmIG5zSUQgbnNJSUQ7CiMgMzggIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5o IiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgiCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoj IDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEK IyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50 MzIgbnNyZXN1bHQ7CiMgMjYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIgpleHRlcm4g bnNyZXN1bHQKTlNfRXJyb3JBY2NvcmRpbmdUb05TUFIoKTsKIyAzOSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMQojIDI3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI4ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAzMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIiAyCgpleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgp0eXBlZGVmIHN0cnVjdCBQ UkxvY2sgUFJMb2NrOwojIDY0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJsb2NrLmgiCmV4dGVybiBQUkxvY2sqIFBSX05ld0xvY2sodm9pZCk7CiMgNzUgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIHZvaWQg UFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyA4NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAq bG9jayk7CiMgOTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv Y2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2spOwoKfQojIDI5ICIv dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKCmV4dGVy biAiQyIgewojIDQxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJh dG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0luY3JlbWVudChQUkludDMyICp2YWwpOwoj IDUyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4 dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQUkludDMyICp2YWwpOwojIDY0ICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUklu dDMyIFBSX0F0b21pY1NldChQUkludDMyICp2YWwsIFBSSW50MzIgbmV3dmFsKTsKIyA3NiAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJJ bnQzMiBQUl9BdG9taWNBZGQoUFJJbnQzMiAqcHRyLCBQUkludDMyIHZhbCk7CgoKCgp0eXBlZGVm IHN0cnVjdCBQUlN0YWNrRWxlbVN0ciBQUlN0YWNrRWxlbTsKCnN0cnVjdCBQUlN0YWNrRWxlbVN0 ciB7CiAgICBQUlN0YWNrRWxlbSAqcHJzdGtfZWxlbV9uZXh0OwoKfTsKCnR5cGVkZWYgc3RydWN0 IFBSU3RhY2tTdHIgUFJTdGFjazsKIyA5OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGFjayAqIFBSX0NyZWF0ZVN0YWNrKGNvbnN0 IGNoYXIgKnN0YWNrX25hbWUpOwojIDExMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAqc3Rh Y2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxMjQgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhY2tFbGVtICogUFJfU3Rh Y2tQb3AoUFJTdGFjayAqc3RhY2spOwojIDEzOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVN0YWNrKFBS U3RhY2sgKnN0YWNrKTsKCn0KIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp bHMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By Y21vbi5oIiAxCiMgMzIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmNtb24uaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJt b24uaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJt b24uaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBl cy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1v bi5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5y dmFsLmgiIDEKIyAzNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW5ydmFsLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By dHlwZXMuaCIgMQojIDM1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJpbnJ2YWwuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBQUlVpbnQzMiBQUkludGVy dmFsVGltZTsKIyA4OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW5ydmFsLmgiCmV4dGVybiBQUkludGVydmFsVGltZSBQUl9JbnRlcnZhbE5vdyh2b2lkKTsKIyAx MDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpl eHRlcm4gUFJVaW50MzIgUFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTI2ICIvdXNyL3NyYy9t aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50ZXJ2 YWxUaW1lIFBSX1NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIHNlY29uZHMpOwpleHRlcm4gUFJJ bnRlcnZhbFRpbWUgUFJfTWlsbGlzZWNvbmRzVG9JbnRlcnZhbChQUlVpbnQzMiBtaWxsaSk7CmV4 dGVybiBQUkludGVydmFsVGltZSBQUl9NaWNyb3NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p Y3JvKTsKIyAxNDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlu cnZhbC5oIgpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb1NlY29uZHMoUFJJbnRlcnZhbFRp bWUgdGlja3MpOwpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pbGxpc2Vjb25kcyhQUklu dGVydmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvTWljcm9zZWNv bmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKCn0KIyAyNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1 Y3QgUFJNb25pdG9yIFBSTW9uaXRvcjsKIyAzNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUk1vbml0b3IqIFBSX05ld01vbml0b3Iodm9p ZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBQUl9EZXN0cm95TW9uaXRvcihQUk1vbml0b3IgKm1vbik7 CgoKCgoKCmV4dGVybiB2b2lkIFBSX0VudGVyTW9uaXRvcihQUk1vbml0b3IgKm1vbik7CgoKCgoK CmV4dGVybiBQUlN0YXR1cyBQUl9FeGl0TW9uaXRvcihQUk1vbml0b3IgKm1vbik7CiMgNzYgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgpleHRlcm4gUFJT dGF0dXMgUFJfV2FpdChQUk1vbml0b3IgKm1vbiwgUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKCgoK CgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5KFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJu IFBSU3RhdHVzIFBSX05vdGlmeUFsbChQUk1vbml0b3IgKm1vbik7Cgp9CiMgMzMgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzQgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgoKZXh0ZXJuICJD IiB7CiMgNDUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24u aCIKZXh0ZXJuIFBSTW9uaXRvciogUFJfQ0VudGVyTW9uaXRvcih2b2lkICphZGRyZXNzKTsKCgoK CgpleHRlcm4gUFJTdGF0dXMgUFJfQ0V4aXRNb25pdG9yKHZvaWQgKmFkZHJlc3MpOwoKCgoKCmV4 dGVybiBQUlN0YXR1cyBQUl9DV2FpdCh2b2lkICphZGRyZXNzLCBQUkludGVydmFsVGltZSB0aW1l b3V0KTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeSh2b2lkICphZGRyZXNzKTsKCgoK CgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeUFsbCh2b2lkICphZGRyZXNzKTsKCgoKCgpleHRl cm4gdm9pZCBQUl9DU2V0T25Nb25pdG9yUmVjeWNsZSh2b2lkICggKmNhbGxiYWNrKSh2b2lkICph ZGRyZXNzKSk7Cgp9CiMgNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi IDIKIyA3MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKdHlwZWRlZiBQ UlVpbnQzMiBuc3JlZmNudDsKIyA5MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp bHMuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAxCiMgMjYgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoK IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAt bGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o IiAxIDMKIyAzNyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2djYy1wcmUz LjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg NDMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRl L3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NSAi L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCiMgNTMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4 LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2 MyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUv c3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvZ2Nj LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xp Yi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAi L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMg MSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAz CiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19j b3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwog IH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9f c3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwog IF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcg Ii91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg MwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIv Z2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2Nv bnYuaCIgMiAzCgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIg MwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NP TlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NP TlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01Q TEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRF Uk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19H Q09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0 cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3Ry dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0 cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5z aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq Kiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3Qp IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3Qp IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVk IGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoK dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVm IGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3Qg Y2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29u c3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAq KTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3Ry YW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7 CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7 CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29u dl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsK ICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19m cm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2dj b252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoK ICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBf X21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVs OwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5z aWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAg aW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2lu dGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3Rh dGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRl ZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2Nv bnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0 YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVj dAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGlu dCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm IGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f SElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1 MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1s aWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvZ2Nj LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAz CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5j bHVkZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBf SU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg Mwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3Ry dWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50 IF9wb3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0 X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2 dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjU5ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFk X3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFy KiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0 ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFy ICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2 ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxF ICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRf b2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92 dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2Nr OwojIDMwMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoK CgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBf dW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoK CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f Ml8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDIgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAq X19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBf X3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19i dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoK dHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3Bv cywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUp OwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRl ZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vl a19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2ll X2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVh ZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19j bG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9f Y29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9f Y29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nv b2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5z KTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICop IHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl cm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1 ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9J T19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJy b3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tl ZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2Zp bGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9J T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxF ICopIHRocm93ICgpOwojIDQ1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf SU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmlj dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj dCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUg KiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lP X0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f c2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVy biBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJv dyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKIyA1MTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn0KIyA3NCAiL3Vzci9nY2MtcHJl My4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK Cgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9nY2Mt cHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwp0 eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90 OwojIDEzNyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2lu Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMK IyAxMzggIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNs dWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRv dXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1s aWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3Zl IChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUg KF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OCAiL3Vzci9nY2MtcHJl My4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl cm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFt IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpf X3MpIHRocm93ICgpOwojIDE4OCAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAt bGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7 CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5h bWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl cywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93 ICgpOwojIDIzMiAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAq ZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBf X2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywg c2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJu IEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93 ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy b3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRm IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRm IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVy biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hh ciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBf X2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBh c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRw cmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmlu dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK CgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93 ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDAp KSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg Z2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNo YXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9f YywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAo aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g Y2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM2ICIv dXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19s aW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVs aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRz X3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5n ZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f cmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAo dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNl KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDk5 ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29m ZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg dGhyb3cgKCk7CiMgNTMzICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51 eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3Ry ZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29m ZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0 cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9f cG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0s IF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJl cnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vy cmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j b25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9f Y29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBj bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlk IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpf X3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3By aW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy b3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0 cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKIyA2NDMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0 LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDI5ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNUcmFjZVJlZmNudC5oIiAyCgpjbGFzcyBuc0lTdXBwb3J0czsKIyAxMzMgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewog IG5zcmVmY250IG1BZGRSZWZzOwogIG5zcmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3Jl YXRlczsKICBuc3JlZmNudCBtRGVzdHJveXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3Rh bDsKICBkb3VibGUgbVJlZnNPdXRzdGFuZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3Rh bmRpbmdUb3RhbDsKICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTUyICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1Ry YWNlUmVmY250U3RhdEZ1bmMpCiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIg YUluc3RhbmNlU2l6ZSwKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBu c1RyYWNlUmVmY250U3RhdHMqIGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpj bGFzcyBuc1RyYWNlUmVmY250IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAg c3RhdGljIHZvaWQgU2h1dGRvd24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQ dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0 YXRpYyB2b2lkIExvZ1JlbGVhc2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZv aWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFU eXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3Rh bmNlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZp bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRp YyB2b2lkIExvZ0RlbGV0ZVhQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2 b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNu dCBhTmV3UmVmY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGFMaW5lKTsKCiAgc3RhdGljIG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZp bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoK ICBzdGF0aWMgdm9pZCBMb2dDdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAg c3RhdGljIHZvaWQgTG9nRHRvcih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0 YXRpYyB2b2lkIExvZ0FkZENPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVj dCk7CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3Vw cG9ydHMgKmFPYmplY3QpOwoKICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywK ICAgIE5FV19TVEFUUwogIH07CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0 aXN0aWNzVHlwZSB0eXBlID0gQUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSogb3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGlj cyh2b2lkKTsKCiAgc3RhdGljIHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3Rh dEZ1bmMgYUZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog YUNsb3N1cmUpOwoKICBzdGF0aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciog YUxpYnJhcnlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCogYUxpYnJheUhhbmRsZSk7CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNo YXIgKiBhU3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICog YUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4p OwoKICBzdGF0aWMgdm9pZCBXYWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2 b2lkIFNldFByZWZTZXJ2aWNlQXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3Rh dGljIHZvaWQgU2V0QWN0aXZpdHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJu ICJDIiB2b2lkCk5TX01lYW5BbmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywg ZG91YmxlIHN1bU9mU3F1YXJlZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5S ZXN1bHQsIGRvdWJsZSAqc3RkRGV2UmVzdWx0KTsKIyA5MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVN1cHBvcnRzVXRpbHMuaCIgMgoKCgoKCgoKY2xhc3MgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiMg MTE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkKiogYUluc3RhbmNlUHRyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKIyAxMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw b3J0c1V0aWxzLmgiCiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKCgp9Owoj IDE2MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKZXh0ZXJuICJDIiB2 b2lkKiBOU19DdXJyZW50VGhyZWFkKHZvaWQpOwpleHRlcm4gIkMiIHZvaWQgTlNfQ2hlY2tUaHJl YWRTYWZlKHZvaWQqIG93bmluZ1RocmVhZCwgY29uc3QgY2hhciogbXNnKTsKIyAzMTEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCmlubGluZQpuc3JlZmNudApOU19EZWJ1 Z0dldFJlZkNvdW50KCBuc0lTdXBwb3J0cyogb2JqICkKCgogIHsKICAgIG5zcmVmY250IHJlZl9j b3VudCA9IDA7CgogICAgaWYgKCBvYmogKQogICAgICB7CgoKICAgICAgICBvYmotPkFkZFJlZigp OwogICAgICAgIHJlZl9jb3VudCA9IG9iai0+UmVsZWFzZSgpOwoKCgoKICAgICAgICBpZiAoIShy ZWZfY291bnQpKSBuc0RlYnVnOjpBc3NlcnRpb24oIk9vcHMhIENhbGxpbmcgfE5TX0RlYnVnR2V0 UmVmQ291bnQoKXwgcHJvYmFibHkganVzdCBkZXN0cm95ZWQgdGhpcyBvYmplY3QuIiwgInJlZl9j b3VudCIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiwgMzI5KTsKICAg ICAgfQoKICAgICByZXR1cm4gcmVmX2NvdW50OwogIH0KIyAxMTE3ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZiggVCBleHByICkKCgoKICB7CiAgICByZXR1 cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9CgogfQojIDEyMzIgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCmV4dGVybiAiQysrIiB7CgoKCmNsYXNzIG5zSVN1 cHBvcnRzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBuc0NPTVR5cGVJbmZvCiAgewogICAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHJldHVybiBUOjpHZXRJSUQoKTsgfQogIH07 Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz4KICB7CiAgICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsKICAgICAgICBzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07IHJldHVybiBpaWQ7CiAgICB9CiAgfTsKCgoK CnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsUXVl cnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhU291cmNlLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVz dGluYXRpb24gKQogIHsKICAgIGlmICghKGFTb3VyY2UpKSBuc0RlYnVnOjpQcmVDb25kaXRpb24o Im51bGwgcGFyYW1ldGVyIiwgImFTb3VyY2UiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv cnRzVXRpbHMuaCIsIDEyNjApOwogICAgaWYgKCEoYURlc3RpbmF0aW9uKSkgbnNEZWJ1Zzo6UHJl Q29uZGl0aW9uKCJudWxsIHBhcmFtZXRlciIsICJhRGVzdGluYXRpb24iLCAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIsIDEyNjEpOwoKICAgIHJldHVybiBhU291cmNlLT5R dWVyeUludGVyZmFjZShuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLCAo dm9pZCoqKWFEZXN0aW5hdGlvbik7CiAgfQoKfQoKCgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lDbGFzc0luZm8uaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZv LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIgMQoj IDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5oIgpjbGFzcyBu c0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAwLCAweDEwLCAweGE0 LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51bSB7IFVOS05PV04g PSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQg PSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBFUkwgPSA0VSB9OwoK ICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0gNlUgfTsKCiAgZW51 bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD bGFzc0luZm8uaCIgMgojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgiCmNs YXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5ODZj MTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhl NywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lDbGFzc0luZm8uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIg KmNvdW50LCBuc0lJRCAqICoqYXJyYXkpID0gMDsKIyA1OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJV aW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNj cmlwdGlvbikgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAq ICphQ2xhc3NJRCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlv bkxhbmd1YWdlKFBSVWludDMyICphSW1wbGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBl bnVtIHsgU0lOR0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBl bnVtIHsgTUFJTl9USFJFQURfT05MWSA9IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUg fTsKCiAgZW51bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0g MjE0NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFG bGFncykgPSAwOwoKfTsKIyAxMjc0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls cy5oIiAyCiMgMTE4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMgojIDExICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJRmFjdG9yeS5oIiAyCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lGYWN0b3J5LmgiCmNsYXNzIG5zSUZhY3RvcnkgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ SUQgaWlkID0gezB4MDAwMDAwMDEsIDB4MDAwMCwgMHgwMDAwLCB7IDB4YzAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJ RCAmIGlpZCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9ja0Zh Y3RvcnkoUFJCb29sIGxvY2spID0gMDsKCn07CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lH ZW5lcmljRmFjdG9yeS5oIiAyCiMgMzkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmljRmFj dG9yeS5oIgpzdHJ1Y3QgbnNNb2R1bGVDb21wb25lbnRJbmZvOwoKCgoKCmNsYXNzIG5zSUdlbmVy aWNGYWN0b3J5IDogcHVibGljIG5zSUZhY3RvcnkgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgzYmM5N2YwMCwgMHhjY2Rm LCAweDExZDIsIHsgMHhiYSwgMHhiOCwgMHhiNSwgMHg0OCwgMHg2NSwgMHg0NCwgMHg2MSwgMHhm YyB9IH07IHJldHVybiBpaWQ7IH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBvbmVudElu Zm8obnNNb2R1bGVDb21wb25lbnRJbmZvICppbmZvKSA9IDA7CiAgICB2aXJ0dWFsIG5zcmVzdWx0 IEdldENvbXBvbmVudEluZm8obnNNb2R1bGVDb21wb25lbnRJbmZvICoqaW5mb3ApID0gMDsKfTsK CmV4dGVybiBuc3Jlc3VsdApOU19OZXdHZW5lcmljRmFjdG9yeShuc0lHZW5lcmljRmFjdG9yeSAq KnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgbnNNb2R1bGVDb21wb25lbnRJbmZvICppbmZv KTsKCgoKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vZHVsZS5oIiAxCiMgMTggIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lNb2R1bGUuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RmlsZS5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNp bXBsZUVudW1lcmF0b3I7CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNz IG5zSUZpbGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4 MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUs IDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9 IDBVIH07CgogIGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgY2hhciAq bm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0IFBSVW5p Y2hhciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUodm9pZCkg PSAwOwojIDg1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25zKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7CiAg dmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVuaWNoYXIgKiAqYVVu aWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5pY29kZUxlYWZOYW1l KGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAxMjIgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG8obnNJRmlsZSAq bmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBQUlVuaWNoYXIg Km5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rcyhuc0lGaWxlICpuZXdQYXJlbnREaXIs IGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weVRvRm9s bG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFy ICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgY2hhciAq bmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9Vbmljb2RlKG5zSUZpbGUg Km5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3QgY2hhciAqKmFyZ3MsIFBSVWludDMyIGNvdW50KSA9 IDA7CiMgMTg3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1 bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0UGVybWlzc2lvbnMoUFJVaW50MzIgKmFQZXJtaXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0UGVybWlzc2lvbnMoUFJVaW50MzIgYVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyICphUGVybWlzc2lvbnNP ZkxpbmspID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWlu dDMyIGFQZXJtaXNzaW9uc09mTGluaykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dExhc3RNb2RpZmljYXRpb25EYXRlKFBSSW50NjQgKmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFz dE1vZGlmaWNhdGlvbkRhdGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlm aWNhdGlvbkRhdGVPZkxpbmsoUFJJbnQ2NCAqYUxhc3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUklu dDY0IGFMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluaykgPSAwOwojIDIyMCAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQg KmFGaWxlU2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBh RmlsZVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJ bnQ2NCAqYUZpbGVTaXplT2ZMaW5rKSA9IDA7CiMgMjQ4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5p Y29kZVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBh dGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICog KmFVbmljb2RlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFs KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IElzU3ltbGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1 YWwgbnNyZXN1bHQgSXNTcGVjaWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShj b25zdCBjaGFyICpzdWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNz aW9ucykgPSAwOwojIDMyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVj dXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJl bnQobnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVF bnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkwo Y29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgODMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RmlsZS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMg MjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgojIDEgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51 bWVyYXRvci5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNs YXNzIG5zSVNpbXBsZUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g ezB4ZDE4OTkyNDAsIDB4ZjlkMiwgMHgxMWQyLCB7IDB4YmQsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4 NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzTW9yZUVsZW1lbnRz KFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDcwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVy YXRvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lTdXBwb3J0cyAqKl9yZXR2YWwp ID0gMDsKCn07CiMgMTQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgpjbGFz cyBuc0lFbnVtZXJhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGFkMzg1 Mjg2LCAweGNiYzQsIDB4MTFkMiwgeyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAweGZj LCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJz dCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEN1cnJlbnRJdGVtKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAw OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0RvbmUodm9pZCkgPSAwOwoKfTsKIyAyNTUgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUJpZGlyZWN0aW9uYWxF bnVtZXJhdG9yIDogcHVibGljIG5zSUVudW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzVmMTU4YTAs IDB4Y2FkZCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4 MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhc3Qodm9p ZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXYodm9pZCkgPSAwOwoKfTsKIyAzMzEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQK TlNfTmV3RW1wdHlFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhUmVzdWx0KTsKCgoK CmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3Q29uam9pbmluZ0VudW1lcmF0b3IobnNJRW51bWVy YXRvciogZmlyc3QsIG5zSUVudW1lcmF0b3IqIHNlY29uZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwoK CgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9y KiBmaXJzdCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgbnNJ RW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQK TlNfTmV3SW50ZXJzZWN0aW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwgbnNJRW51 bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUVudW1lcmF0 b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t cG9uZW50TWFuYWdlci5oIiAyCgoKCgoKCmNsYXNzIG5zSUZpbGU7CiMgMzUgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCmNsYXNzIG5zSUNvbXBvbmVudE1hbmFnZXIg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODQ1OGE3NDAsIDB4ZDVkYywgMHgx MWQyLCB7IDB4OTIsIDB4ZmIsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4MDUsIDB4NTcsIDB4MGYgfX07 IHJldHVybiBpaWQ7fQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdl ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJiBhQ2xhc3Ms IG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNjAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD b21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25z dCBuc0NJRCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lkICogKl9yZXR2YWwpID0g MDsKIyA3MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IENvbnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs IG5zQ0lEICphQ2xhc3MpID0gMDsKIyA4NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVu dE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5z Q0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5 OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBwb3J0cyAq YURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDEx MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5z cmVzdWx0IENyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEKGNvbnN0IGNoYXIgKmFDb250cmFjdElE LCBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIElJRCwgdm9pZCAqICpfcmV0 dmFsKSA9IDA7CiMgMTI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5o IgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNw ZWMsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTMzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t cG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3BlY0ZvclJlZ2lzdHJ5TG9jYXRp b24oY29uc3QgY2hhciAqYUxvY2F0aW9uLCBuc0lGaWxlICoqX3JldHZhbCkgPSAwOwojIDE0OCAi Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz dWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNs YXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZhY3RvcnkgKmFGYWN0b3J5LCBQ UkJvb2wgYVJlcGxhY2UpID0gMDsKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBu c0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRy YWN0SUQsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl cnNpc3QpID0gMDsKIyAxOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudFdpdGhUeXBlKGNvbnN0IG5z Q0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJh Y3RJRCwgbnNJRmlsZSAqYVNwZWMsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBs YWNlLCBQUkJvb2wgYVBlcnNpc3QsIGNvbnN0IGNoYXIgKmFUeXBlKSA9IDA7CiMgMjA5ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg UmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICph Q2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmlsZSAqYUxpYnJhcnksIFBS Qm9vbCBhUmVwbGFjZSwgUFJCb29sIGFQZXJzaXN0KSA9IDA7CiMgMjI4ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJD b21wb25lbnRMaWIoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUs IGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFS ZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAyNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9y eShjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmFjdG9yeSAqYUZhY3RvcnkpID0gMDsKIyAyNTQg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFy ICphTG9jYXRpb24pID0gMDsKIyAyNjMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25z dCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJhcmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19T dGFydHVwID0gMCB9OwoKICBlbnVtIHsgTlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGlt ZXIgPSAyIH07CgogIGVudW0geyBOU19TaHV0ZG93biA9IDMgfTsKIyAyOTUgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVn aXN0ZXIoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpkaXJlY3RvcnkpID0gMDsKIyAzMDggIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBB dXRvUmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9u KSA9IDA7CiMgMzE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgog IHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBu c0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMgMzI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ Q29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZWdpc3RlcmVkKGNvbnN0 IG5zQ0lEICYgYUNsYXNzLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAzMzkgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVDTFNJRHMobnNJRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAzNDkgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MDIgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyMyAiLi4vLi4vZGlzdC9pbmNs dWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z Q09NUHRyLmgiIDEKIyA0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRl L25zQ09NUHRyLmgiIDIKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg NTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAyCiMgMTA3ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDT01QdHIuaCIKICB0eXBlZGVmIFBSQm9vbCBOU0NBUF9CT09MOwojIDE1OSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0Rl cml2ZWRTYWZlIDogcHVibGljIFQKIyAxNzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5o IgogIHsKICAgIHByaXZhdGU6CgogICAgICB1c2luZyBUOjpBZGRSZWY7CiAgICAgIHVzaW5nIFQ6 OlJlbGVhc2U7CgoKCgoKCiAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKCB2b2lkKiwgc2l6ZV90 ICk7CgoKCiAgICAgIG5zRGVyaXZlZFNhZmU8VD4mIG9wZXJhdG9yPSggY29uc3QgVCYgKTsKIyAx OTQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIH07CiMgMjE1ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBhbHJlYWR5X0Fk ZFJlZmVkCiMgMjMyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBhbHJl YWR5X0FkZFJlZmVkKCBUKiBhUmF3UHRyICkKICAgICAgICA6IG1SYXdQdHIoYVJhd1B0cikKICAg ICAgewoKICAgICAgfQoKICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1SYXdQdHI7IH0KCiAg ICBUKiBtUmF3UHRyOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IGFscmVh ZHlfQWRkUmVmZWQ8VD4KZ2V0dGVyX0FkZFJlZnMoIFQqIGFSYXdQdHIgKQoKCgoKICB7CiAgICBy ZXR1cm4gYWxyZWFkeV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZ2V0dGVyX0FkZFJlZnMoIGNvbnN0 IGFscmVhZHlfQWRkUmVmZWQ8VD4mIGFBbHJlYWR5QWRkUmVmZWRQdHIgKQogIHsKICAgIHJldHVy biBhQWxyZWFkeUFkZFJlZmVkUHRyOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpkb250X0FkZFJlZiggVCogYVJhd1B0ciApCiAgewogICAg cmV0dXJuIGFscmVhZHlfQWRkUmVmZWQ8VD4oYVJhd1B0cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBjb25zdCBh bHJlYWR5X0FkZFJlZmVkPFQ+IGFBbHJlYWR5QWRkUmVmZWRQdHIgKQogIHsKICAgIHJldHVybiBh QWxyZWFkeUFkZFJlZmVkUHRyOwogIH0KIyAyOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0 ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lClQqCmRvbnRfUXVlcnlJbnRlcmZhY2UoIFQq IGV4cHIgKQogIHsKICAgIHJldHVybiBleHByOwogIH0KCgoKY2xhc3MgbnNDT01QdHJfaGVscGVy CiMgMzE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAg ICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBj b25zdCA9IDA7CiAgfTsKCmNsYXNzIG5zUXVlcnlJbnRlcmZhY2UgOiBwdWJsaWMgbnNDT01QdHJf aGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc1F1ZXJ5SW50ZXJmYWNlKCBuc0lTdXBwb3J0 cyogYVJhd1B0ciwgbnNyZXN1bHQqIGVycm9yICkKICAgICAgICAgIDogbVJhd1B0cihhUmF3UHRy KSwKICAgICAgICAgICAgbUVycm9yUHRyKGVycm9yKQogICAgICAgIHsKCiAgICAgICAgfQoKICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoq ICkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgbnNJU3VwcG9ydHMqIG1SYXdQdHI7CiAgICAg IG5zcmVzdWx0KiBtRXJyb3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc1F1ZXJ5SW50ZXJmYWNl CmRvX1F1ZXJ5SW50ZXJmYWNlKCBuc0lTdXBwb3J0cyogYVJhd1B0ciwgbnNyZXN1bHQqIGVycm9y ID0gMCApCiAgewogICAgcmV0dXJuIG5zUXVlcnlJbnRlcmZhY2UoYVJhd1B0ciwgZXJyb3IpOwog IH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxy ZWFkeV9BZGRSZWZlZDxUPiYgKQogIHsKCgoKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l CnZvaWQKZG9fUXVlcnlJbnRlcmZhY2UoIGFscmVhZHlfQWRkUmVmZWQ8VD4mLCBuc3Jlc3VsdCog KQogIHsKCgoKICB9CiMgMzgyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKY2xhc3Mg bnNDT01QdHJfYmFzZQojIDM5NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewog ICAgcHVibGljOgoKICAgICAgbnNDT01QdHJfYmFzZSggbnNJU3VwcG9ydHMqIHJhd1B0ciA9IDAg KQogICAgICAgICAgOiBtUmF3UHRyKHJhd1B0cikKICAgICAgICB7CgogICAgICAgIH0KCgoKCgoK ICAgICAgICAgICAgICAgIH5uc0NPTVB0cl9iYXNlKCkgeyB9CgoKICAgICAgICAgICAgICAgIHZv aWQgYXNzaWduX3dpdGhfQWRkUmVmKCBuc0lTdXBwb3J0cyogKTsKICAgICAgICAgICAgICAgIHZv aWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25zdCBuc0lJ RCYgKTsKICAgICAgICAgICAgICAgIHZvaWQqKiBiZWdpbl9hc3NpZ25tZW50KCk7CgogICAgcHJv dGVjdGVkOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsKCiAgICAgIHZvaWQKICAgICAgYXNz aWduX2Fzc3VtaW5nX0FkZFJlZiggbnNJU3VwcG9ydHMqIG5ld1B0ciApCiAgICAgICAgewojIDQz MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgICAgICBuc0lTdXBwb3J0cyog b2xkUHRyID0gbVJhd1B0cjsKICAgICAgICAgIG1SYXdQdHIgPSBuZXdQdHI7CiAgICAgICAgICA7 OwogICAgICAgICAgaWYgKCBvbGRQdHIgKQogICAgICAgICAgICAob2xkUHRyKS0+UmVsZWFzZSgp OwogICAgICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNDT01QdHIKCgoK ICB7CiAgICBlbnVtIHsgX2ZvcmNlX2V2ZW5fY29tcGxpYW50X2NvbXBpbGVyc190b19mYWlsXyA9 IHNpemVvZihUKSB9OwojIDQ1OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICBw cml2YXRlOgogICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAg ICAgIHZvaWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25z dCBuc0lJRCYgKTsKICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQoKTsKCiAgICAgIHZvaWQK ICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZiggVCogbmV3UHRyICkKICAgICAgICB7CiAgICAg ICAgICBUKiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5ld1B0cjsKICAg ICAgICAgIDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChvbGRQdHIpLT5S ZWxlYXNlKCk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIFQqIG1SYXdQdHI7CgoKCgoK CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgVCBlbGVtZW50X3R5cGU7CgoKICAgICB+bnNDT01Q dHIoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3 UHRyKS0+UmVsZWFzZSgpOwogICAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBBc3NlcnRfTm9R dWVyeU5lZWRlZCgpCiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIG5zQ09NUHRyPFQ+IHF1ZXJ5X3Jlc3VsdCggZG9fUXVlcnlJbnRl cmZhY2UobVJhd1B0cikgKTsKICAgICAgICAgICAgICBpZiAoIShxdWVyeV9yZXN1bHQuZ2V0KCkg PT0gbVJhd1B0cikpIG5zRGVidWc6OkFzc2VydGlvbigiUXVlcnlJbnRlcmZhY2UgbmVlZGVkIiwg InF1ZXJ5X3Jlc3VsdC5nZXQoKSA9PSBtUmF3UHRyIiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP TVB0ci5oIiwgNTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyA1MTIgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbVJhd1B0 cigwKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBj b25zdCBuc0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBtUmF3UHRyKGFTbWFy dFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAg ICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBu c0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQoKICAg ICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFk ZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7 CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4mIGFT bWFydFB0ciApCiAgICAgICAgICAgIDogbVJhd1B0cihhU21hcnRQdHIubVJhd1B0cikKCiAgICAg ICAgewogICAgICAgICAgOzsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAg ICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkK ICAgICAgICAgICAgOiBtUmF3UHRyKDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAg ICAgYXNzaWduX2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkp OwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5lZWRlZCgpOzsKICAgICAgICB9CgoKCgoKICAg ICAgbnNDT01QdHIoIGNvbnN0IG5zUXVlcnlJbnRlcmZhY2UmIGhlbHBlciApCiAgICAgICAgICAg IDogbVJhd1B0cigwKQogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJv bV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgfQoK CgoKCiAgICAgIG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPFQ+ JiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzLm1SYXdQ dHIpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+ JgogICAgICBvcGVyYXRvcj0oIFQqIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93 aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5lZWRlZCgpOzsKICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxUPiYKICAgICAg b3BlcmF0b3I9KCBjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiByaHMgKQoKICAgICAgICB7CiAg ICAgICAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIDsg QXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg fQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHJfaGVs cGVyJiByaHMgKQoKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywg bnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkpOwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5l ZWRlZCgpOzsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKCgoKICAgICAgbnND T01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNRdWVyeUludGVyZmFjZSYgcmhzICkK ICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NPTVR5cGVJbmZv PFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCiAg ICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4qID4obVJh d1B0cik7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxUPiooKSBjb25z dAoKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAg ICAgbnNEZXJpdmVkU2FmZTxUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3Ug Y2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5zQ09NUHRyIHdpdGggb3BlcmF0b3ItPigpLiIsICJt UmF3UHRyICE9IDAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiLCA2NDkpOwogICAg ICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KIyA2NjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0NPTVB0ci5oIgogICAgICBuc0NPTVB0cjxUPioKICAgICAgZ2V0X2FkZHJlc3MoKQoKCiAgICAg ICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgY29uc3QgbnNDT01Q dHI8VD4qCiAgICAgIGdldF9hZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJl dHVybiB0aGlzOwogICAgICAgIH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09N UHRyPFQ+KgogICAgICBvcGVyYXRvciYoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAgICAg IHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+KgogICAgICBvcGVyYXRv ciYoKQoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICBw dWJsaWM6CiAgICAgIG5zRGVyaXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg ICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0 aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5zQ09NUHRyIHdpdGggb3BlcmF0b3Iq KCkuIiwgIm1SYXdQdHIgIT0gMCIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIsIDcx Myk7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgVCoqCiAg ICAgIFN0YXJ0QXNzaWdubWVudCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVy cHJldF9jYXN0PCBUKiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAgICAgICB9CiAgfTsK IyA3NDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8PgpjbGFzcyBu c0NPTVB0cjxuc0lTdXBwb3J0cz4KICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCiAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIG5zSVN1cHBvcnRzIGVsZW1lbnRfdHlwZTsKCgogICAgIH5u c0NPTVB0cigpCiAgICAgICAgIHsKICAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg ICAgKG1SYXdQdHIpLT5SZWxlYXNlKCk7CiAgICAgICAgIH0KCgoKCgogICAgICBuc0NPTVB0cigp CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7Owog ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFT bWFydFB0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikK CiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIp LT5BZGRSZWYoKTsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIG5zSVN1 cHBvcnRzKiBhUmF3UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFSYXdQdHIpCgog ICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3UHRyKS0+ QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBh bHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBu c0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICA7Owog ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIGhlbHBlciAp CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAgICAgewogICAgICAgICAgOzsK ICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5zQ09NVHlwZUluZm88bnNJU3Vw cG9ydHM+OjpHZXRJSUQoKSk7CiAgICAgICAgfQoKCgoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y dHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgcmhzICkK CiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0 cz4mCiAgICAgIG9wZXJhdG9yPSggbnNJU3VwcG9ydHMqIHJocyApCgogICAgICAgIHsKICAgICAg ICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25z dCBhbHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgcmhzICkKCiAgICAgICAgewogICAgICAg ICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVy YXRvcj0oIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgcmhzICkKCgogICAgICAgIHsKICAgICAgICAg IGFzc2lnbl9mcm9tX2hlbHBlcihyaHMsIG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJ SUQoKSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKICAgICAgbnNEZXJp dmVkU2FmZTxuc0lTdXBwb3J0cz4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9y dHM+KiA+KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8 bnNJU3VwcG9ydHM+KigpIGNvbnN0CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn ZXQoKTsKICAgICAgICB9CgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPioKICAgICAg b3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAw KSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5z Q09NUHRyIHdpdGggb3BlcmF0b3ItPigpLiIsICJtUmF3UHRyICE9IDAiLCAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQ09NUHRyLmgiLCA4NzApOwogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAg IH0KIyA4ODcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cjxu c0lTdXBwb3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJl dHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPioK ICAgICAgZ2V0X2FkZHJlc3MoKSBjb25zdAoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRo aXM7CiAgICAgICAgfQoKCgoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgbnNDT01QdHI8bnNJ U3VwcG9ydHM+KgogICAgICBvcGVyYXRvciYoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAg ICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPioK ICAgICAgb3BlcmF0b3ImKCkKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAg ICAgICB9CgogICAgcHVibGljOgoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4mCiAg ICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAh PSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxM IG5zQ09NUHRyIHdpdGggb3BlcmF0b3IqKCkuIiwgIm1SYXdQdHIgIT0gMCIsICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNDT01QdHIuaCIsIDkzNSk7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAg ICAgIH0KCgoKCgoKICAgICAgbnNJU3VwcG9ydHMqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQog ICAgICAgIHsKCiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9ydHMq KiA+KGJlZ2luX2Fzc2lnbm1lbnQoKSk7CgoKCgogICAgICAgIH0KICB9OwoKCnRlbXBsYXRlIDxj bGFzcyBUPgp2b2lkCm5zQ09NUHRyPFQ+Ojphc3NpZ25fd2l0aF9BZGRSZWYoIG5zSVN1cHBvcnRz KiByYXdQdHIgKQogIHsKICAgIGlmICggcmF3UHRyICkKICAgICAgKHJhd1B0ciktPkFkZFJlZigp OwogICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyZWludGVycHJldF9jYXN0PCBUKiA+KHJhd1B0 cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkCm5zQ09NUHRyPFQ+Ojphc3NpZ25fZnJv bV9oZWxwZXIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyLCBjb25zdCBuc0lJRCYgYUlJ RCApCiAgewogICAgVCogbmV3UmF3UHRyOwogICAgaWYgKCAhKCEoKGhlbHBlcihhSUlELCByZWlu dGVycHJldF9jYXN0PCB2b2lkKiogPigmbmV3UmF3UHRyKSkpICYgMHg4MDAwMDAwMCkpICkKICAg ICAgbmV3UmF3UHRyID0gMDsKICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYobmV3UmF3UHRyKTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCoqCm5zQ09NUHRyPFQ+OjpiZWdpbl9hc3NpZ25t ZW50KCkKICB7CiAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKDApOwogICAgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KCZtUmF3UHRyKTsKICB9CiMgOTk5ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc0NPTVB0cjxUPioK YWRkcmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9h ZGRyZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBuc0NPTVB0cjxU PioKYWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBh UHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNHZXR0 ZXJBZGRSZWZzCiMgMTAzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAg cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBuc0dldHRlckFkZFJlZnMoIG5zQ09NUHRyPFQ+ JiBhU21hcnRQdHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21hcnRQdHIoYVNtYXJ0UHRyKQogICAg ICAgIHsKCiAgICAgICAgfQoKCiAgICAgfm5zR2V0dGVyQWRkUmVmcygpCiAgICAgICAgewoKCgoK CiAgICAgICAgICBtVGFyZ2V0U21hcnRQdHIuQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTsKCiAgICAg ICAgfQoKCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1l bnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAg ewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFy Z2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9y IFQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFz c2lnbm1lbnQoKTsKICAgICAgICB9CgogICAgICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAg ICB7CiAgICAgICAgICByZXR1cm4gKihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkp OwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0 UHRyOwogIH07CgoKdGVtcGxhdGUgPD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRz PgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBu c0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFy dFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CiMgMTEwMiAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5T dGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMq KigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2ln bm1lbnQoKTsKICAgICAgICB9CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigp CiAgICAgICAgewogICAgICAgICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdu bWVudCgpKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y dHM+JiBtVGFyZ2V0U21hcnRQdHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5z R2V0dGVyQWRkUmVmczxUPgpnZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciAp CgoKCgogIHsKICAgIHJldHVybiBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoK CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9y PT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsK ICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRp Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBU LCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxU PiYgbGhzLCBjb25zdCBuc0NPTVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh c3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCog PihyaHMuZ2V0KCkpOwogIH0KCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK TlNDQVBfQk9PTApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiBy aHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkp ID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywg Y29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25z dCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0 b3IhPSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1 cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwg Y29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxp bmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+ JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9 IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyMDYgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5s aW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhz ICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9 PSBzdGF0aWNfY2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz cyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRy PFQ+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0 YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRy PFQ+JiBsaHMsIFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lk KiA+KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhz LCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZv aWQqID4obGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0K CgoKCgoKY2xhc3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBf Qk9PTApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMg KQoKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9 PSByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNs YXNzIFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29u c3QgbnNDT01QdHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBj b25zdCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgp KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSgg Y29uc3QgbnNDT01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJu IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2Fz dDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlND QVBfQk9PTApvcGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiBy aHMgKQoKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMp ICE9IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEzMDkgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09NSWRl bnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJldHVy biBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBuc0NP TVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRlbXBs YXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jl c3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNlUHRy LCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVyeUlu dGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDI0ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMgojIDM0ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU0dl dEZhY3RvcnkobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3Rvcnkg KiphRmFjdG9yeSk7CmV4dGVybiAiQyIgUFJCb29sIE5TQ2FuVW5sb2FkKG5zSVN1cHBvcnRzKiBh U2Vydk1ncik7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNSZWdpc3RlclNlbGYobnNJU3VwcG9ydHMq IGFTZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0aCk7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNV bnJlZ2lzdGVyU2VsZihuc0lTdXBwb3J0cyogYVNlcnZNZ3IsIGNvbnN0IGNoYXIgKmZ1bGxwYXRo KTsKCnR5cGVkZWYgbnNyZXN1bHQgKCpuc0ZhY3RvcnlQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZN Z3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NJRCAmYUNsYXNz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFj dElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqKmFGYWN0 b3J5KTsKdHlwZWRlZiBQUkJvb2wgKCpuc0NhblVubG9hZFByb2MpKG5zSVN1cHBvcnRzKiBhU2Vy dk1ncik7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc1JlZ2lzdGVyUHJvYykobnNJU3VwcG9ydHMqIGFT ZXJ2TWdyLCBjb25zdCBjaGFyICpwYXRoKTsKdHlwZWRlZiBuc3Jlc3VsdCAoKm5zVW5yZWdpc3Rl clByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3QgY2hhciAqcGF0aCk7CiMgNjMgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgpleHRlcm4gbnNyZXN1 bHQKTlNfR2V0R2xvYmFsQ29tcG9uZW50TWFuYWdlcihuc0lDb21wb25lbnRNYW5hZ2VyKiAqcmVz dWx0KTsKCgoKCgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3RhdGljIG5z cmVzdWx0IEluaXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZhY3Rvcnko Y29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFj dG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25z dCBuc0NJRCAmYUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENvbnRyYWN0 SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENMU0lEVG9D b250cmFjdElEKG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciogKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciog KmFDb250cmFjdElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBu c0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0 cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ RCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQp OwoKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFDb250cmFj dElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVn YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3Rh dGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3RvcnksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDExOCAiLi4v Li4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiAgc3RhdGljIG5zcmVz dWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNpc3RlbnREZXNjcmlwdG9yLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKICBzdGF0aWMgbnNyZXN1 bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKCiAgc3RhdGljIG5zcmVz dWx0IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElE LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGxs TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBs YWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVBlcnNp c3QpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAm YUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICph RmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBu c0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50 U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZy ZWVMaWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyKFBS SW50MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1Jl Z2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqY29tcG9uZW50KTsKICBzdGF0 aWMgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxl ICpjb21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVnaXN0ZXJlZChjb25zdCBuc0NJ RCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphUmVnaXN0 ZXJlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3Iq KiBhRW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ29udHJhY3RJRHMo bnNJRW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CgoKY2xhc3MgbnNDcmVhdGVJbnN0YW5j ZUJ5Q0lEIDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAg IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBj b25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0 ciApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1DSUQoYUNJRCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihh T3V0ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt RXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0 OwoKICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG5zQ0lEJiBtQ0lEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91dGVy OwogICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAgIH07 CgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEIDogcHVibGljIG5zQ09NUHRyX2hl bHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg ICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRyYWN0 SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihh T3V0ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt RXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0 OwoKICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIG1Db250cmFjdElEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyog bU91dGVyOwogICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAg ICAgIH07CgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5IDogcHVibGljIG5zQ09N UHRyX2hlbHBlcgp7CnB1YmxpYzoKICAgIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoY29u c3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIp CiAgICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVnb3J5KSwKICAgICAgICAgIG1FbnRyeShhRW50cnkp LAogICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgIHsKCiAgICB9CiAgICB2aXJ0dWFs IG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2 aXJ0dWFsIH5uc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCkge307Cgpwcml2YXRlOgogICAg Y29uc3QgY2hhciAqbUNhdGVnb3J5OwogICAgY29uc3QgY2hhciAqbUVudHJ5OwogICAgbnNJU3Vw cG9ydHMgKm1PdXRlcjsKICAgIG5zcmVzdWx0ICptRXJyb3JQdHI7Cn07CgppbmxpbmUKY29uc3Qg bnNDcmVhdGVJbnN0YW5jZUJ5Q0lECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCYgYUNJ RCwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRChhQ0lELCAwLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5l CmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnND SUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwg YU91dGVyLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VC eUNvbnRyYWN0SUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBu c3Jlc3VsdCogZXJyb3IgPSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnND cmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgMCwgZXJyb3IpOwogICAgICAg IH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElECmRvX0NyZWF0ZUlu c3RhbmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNy ZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3Jl YXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFPdXRlciwgZXJyb3IpOwogICAg ICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5CmRvX0NyZWF0 ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIg KmFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVzdWx0ICphRXJyb3JQ dHIgPSAwKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdv cnksIGFFbnRyeSwgMCwgYUVycm9yUHRyKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFu Y2VGcm9tQ2F0ZWdvcnkKZG9fQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoIGNvbnN0IGNoYXIg KmFDYXRlZ29yeSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJU3VwcG9ydHMgKmFPdXRlciwgbnNyZXN1bHQgKmFFcnJvclB0ciA9IDApCnsKICAg IHJldHVybiBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGFDYXRlZ29yeSwgYUVudHJ5LCBh T3V0ZXIsIGFFcnJvclB0cik7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5hbWVbXTsK ZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4gY29uc3Qg Y2hhciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXplVmFsdWVO YW1lW107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKIyA2MDMgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDIKIyAyOCAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJRC5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAy CgoKCgoKY2xhc3MgbnNJU2h1dGRvd25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2Vydmlj ZVByb3ZpZGVyOwojIDg3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIK Y2xhc3MgbnNJU2VydmljZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6Cgog ICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9 IHsgMHhjZjBkZjNiMCwgMHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAw eDA4LCAweDExLCAweDlkLCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVh bCBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1 cHBvcnRzKiBhU2VydmljZSkgPSAwOwojIDExMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZp Y2VNYW5hZ2VyLmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj b25zdCBuc0NJRCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2Vy dmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAg ICAgbnNJU3VwcG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVu ZXIqIHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAg IFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNl LAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5l ciA9IDApID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAg IHZpcnR1YWwgbnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250 cmFjdElEKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBj aGFyKiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1 cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0 ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNl U2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAg ICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0g MCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5o IgpjbGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj OgoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp aWQgPSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2 MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwg bnNyZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMq IHNlcnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoK ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xh c3MsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJl Z2lzdGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQK ICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAg ICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0 ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3Vs dAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNl cnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxp c3RlbmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3Rh dGljIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJ RCk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250 cmFjdElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpy ZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVu ZXIgPSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBj aGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAg ICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0 aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy ZXN1bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFn ZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNl QnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dl dFNlcnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1h bmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAg ICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl cikgKSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAg IH0KCiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwg dm9pZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsK CiAgICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJ U2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0 cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNv bnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNH ZXRTZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNl cnZpY2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMq IGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5z R2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNz IG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAg ICBwdWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNv bnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQ dHIgKQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1T ZXJ2aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAg ICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAg ICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBj b25zdDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307Cgog ICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRy PG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJy b3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0 U2VydmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQog IHsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVy cm9yKTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNl cnZpY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5h Z2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlD b250cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFz cyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVi bGljOgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNv bnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq IGFTZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFF cnJvclB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkp LAogICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl cikgKSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jl c3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwg fm5zR2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciog bUNhdGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFu YWdlcj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2 aWNlRnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNf TmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2OSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBuc3Jlc3VsdApOU19J bml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUqIGJpbkRpcmVjdG9y eSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2aWNlTWFuYWdlciog KnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlTZXJ2aWNlUHJvdmlk ZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfU2h1dGRvd25YUENPTShuc0lT ZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgODMyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmls ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvcGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFk MywgeyAweDkzLCAweGI2LCAweDAwLCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyBy ZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAq cHJvcCwgbnNJU3VwcG9ydHMgKmluaXRpYWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z cmVzdWx0IFVuZGVmaW5lKGNvbnN0IGNoYXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXQoY29uc3QgY2hhciAqcHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICog KnJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpw cm9wLCBuc0lTdXBwb3J0cyAqdmFsdWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFz KGNvbnN0IGNoYXIgKnByb3AsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjUgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lQcm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SUNvbXBvbmVudE1hbmFnZXIuaCIgMQojIDE2NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3Bl cnRpZXMuaCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9ydHMq IG91dGVyLCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQg a1Byb3BlcnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5MywgMHhi NiwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBuc0Nv bXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3BlcnRp ZXM+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh2b2lkKiopcmVzdWx0KTsKfQojIDgzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUu aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgODM0ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNyZXN1bHQKTlNfR2V0U3BlY2lhbERp cmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwgbnNJRmlsZSogKnJlc3VsdCkKewog ICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0RpcmVjdG9yeVNlcnZpY2VD SUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhjLCAweDljLCAweDAwLCAweDAwLCAw eDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0cjxuc0lQcm9wZXJ0aWVzPiBzZXJ2 ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJRCwgJnJ2KTs7CiAgICBpZiAoKChy dikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IGRp cjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1lLCBuc0NPTVR5cGVJbmZvPG5zSUZp bGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAoKChydikgJiAweDgw MDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChuc0lGaWxlKilkaXIuZ2V0KCk7CiAg ICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7 Cn0KIyAxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vZHVsZS5oIiAyCiMgMzcgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lNb2R1bGUuaCIKY2xhc3MgbnNJTW9kdWxlIDogcHVibGljIG5zSVN1cHBv cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweDczOTJkMDMyLCAweDUzNzEsIDB4MTFkMywgeyAweDk5LCAweDRl LCAweDAwLCAweDgwLCAweDVmLCAweGQyLCAweDZmLCAweGVlIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3QobnNJQ29tcG9uZW50TWFuYWdlciAqYUNv bXBNZ3IsIGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAq cmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyU2VsZihuc0lDb21wb25l bnRNYW5hZ2VyICphQ29tcE1nciwgbnNJRmlsZSAqbG9jYXRpb24sIGNvbnN0IGNoYXIgKnJlZ2lz dHJ5TG9jYXRpb24sIGNvbnN0IGNoYXIgKmNvbXBvbmVudFR5cGUpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgVW5yZWdpc3RlclNlbGYobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIG5z SUZpbGUgKmxvY2F0aW9uLCBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IENhblVubG9hZChuc0lDb21wb25lbnRNYW5hZ2VyICphQ29tcE1nciwg UFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDEzNSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1v ZHVsZS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TR2V0TW9kdWxlKG5zSUNvbXBvbmVudE1hbmFn ZXIgKmFDb21wTWdyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lGaWxlKiBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnNJTW9kdWxlKiogcmV0dXJuX2NvYmopOwp0eXBlZGVmIG5zcmVzdWx0ICgqbnNHZXRNb2R1 bGVQcm9jKShuc0lDb21wb25lbnRNYW5hZ2VyICphQ29tcE1nciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJRmlsZSogbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zSU1vZHVsZSoqIHJldHVybl9jb2JqKTsKIyA2NCAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSUdlbmVyaWNGYWN0b3J5LmgiIDIKCnR5cGVkZWYgbnNyZXN1bHQgKCogTlND b25zdHJ1Y3RvclByb2NQdHIpIChuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCYgYUlJ RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVz dWx0KTsKCnR5cGVkZWYgbnNyZXN1bHQgKCogTlNSZWdpc3RlclNlbGZQcm9jUHRyKSAobnNJQ29t cG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNJRmlsZSAqYVBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVnaXN0cnlMb2NhdGlvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb25lbnRUeXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zTW9k dWxlQ29tcG9uZW50SW5mbyAqaW5mbyk7Cgp0eXBlZGVmIG5zcmVzdWx0ICgqIE5TVW5yZWdpc3Rl clNlbGZQcm9jUHRyKSAobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphUGF0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlZ2lz dHJ5TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc01vZHVsZUNvbXBvbmVudEluZm8gKmluZm8pOwoKdHlwZWRlZiBuc3Jlc3VsdCAo KiBOU0ZhY3RvcnlEZXN0cnVjdG9yUHJvY1B0cikgKHZvaWQpOwoKdHlwZWRlZiBuc3Jlc3VsdCAo KiBOU0dldEludGVyZmFjZXNQcm9jUHRyKSAoUFJVaW50MzIgKmNvdW50cCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSUQqICoqYXJyYXkpOwoKdHlwZWRl ZiBuc3Jlc3VsdCAoKiBOU0dldExhbmd1YWdlSGVscGVyUHJvY1B0cikgKFBSVWludDMyIGxhbmd1 YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3VwcG9ydHMgKipoZWxwZXIpOwoKCgoKCgoKc3RydWN0IG5zTW9kdWxlQ29tcG9uZW50SW5mbyB7 CiAgICBjb25zdCBjaGFyKiBtRGVzY3JpcHRpb247CiAgICBuc0NJRCBtQ0lEOwogICAgY29uc3Qg Y2hhciogbUNvbnRyYWN0SUQ7CiAgICBOU0NvbnN0cnVjdG9yUHJvY1B0ciBtQ29uc3RydWN0b3I7 CiAgICBOU1JlZ2lzdGVyU2VsZlByb2NQdHIgbVJlZ2lzdGVyU2VsZlByb2M7CiAgICBOU1VucmVn aXN0ZXJTZWxmUHJvY1B0ciBtVW5yZWdpc3RlclNlbGZQcm9jOwogICAgTlNGYWN0b3J5RGVzdHJ1 Y3RvclByb2NQdHIgbUZhY3RvcnlEZXN0cnVjdG9yOwogICAgTlNHZXRJbnRlcmZhY2VzUHJvY1B0 ciBtR2V0SW50ZXJmYWNlc1Byb2M7CiAgICBOU0dldExhbmd1YWdlSGVscGVyUHJvY1B0ciBtR2V0 TGFuZ3VhZ2VIZWxwZXJQcm9jOwogICAgbnNJQ2xhc3NJbmZvICoqIG1DbGFzc0luZm9HbG9iYWw7 CiAgICBQUlVpbnQzMiBtRmxhZ3M7Cn07Cgp0eXBlZGVmIHZvaWQgKCAqbnNNb2R1bGVEZXN0cnVj dG9yUHJvYykgKG5zSU1vZHVsZSAqc2VsZik7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3R2VuZXJp Y01vZHVsZShjb25zdCBjaGFyKiBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgICAgIFBSVWlu dDMyIGNvbXBvbmVudENvdW50LAogICAgICAgICAgICAgICAgICAgIG5zTW9kdWxlQ29tcG9uZW50 SW5mbyogY29tcG9uZW50cywKICAgICAgICAgICAgICAgICAgICBuc01vZHVsZURlc3RydWN0b3JQ cm9jIGR0b3IsCiAgICAgICAgICAgICAgICAgICAgbnNJTW9kdWxlKiAqcmVzdWx0KTsKIyAyOCAi bnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFjdG9y eS5oIiAxCiMgMjkgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSVN1cHBvcnRzLmgiIDEKIyAzMCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAxCiMgMzEgIm5zU29mdHdh cmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2Vy LmgiIDEKIyAzMiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNh dGVnb3J5TWFuYWdlci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDYXRlZ29yeUhhbmRs ZXIuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlIYW5kbGVyLmgiCmNs YXNzIG5zSUNhdGVnb3J5SGFuZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHg5YzFhZjgyMiwgMHgxZGQxLCAweDExYjIsIHsgMHhiOCwgMHhjZSwgMHhhMSwgMHhkMiwgMHgz MSwgMHhjNywgMHg5NSwgMHgzZiB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q2F0ZWdvcnlFbnRyeShjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAq ZW50cnksIGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiIDIKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVn b3J5TWFuYWdlci5oIgpjbGFzcyBuc0lDYXRlZ29yeU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9y dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u c3QgbnNJSUQgaWlkID0gezB4NWExZTFhMmMsIDB4MWRkMiwgMHgxMWIyLCB7IDB4YTcsIDB4MmYs IDB4OTYsIDB4NzMsIDB4NTcsIDB4ZTQsIDB4M2EsIDB4MDAgfX07IHJldHVybiBpaWQ7fQojIDQ5 ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDYXRlZ29yeUVudHJ5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSwgY29uc3QgY2hhciAq YUVudHJ5LCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 Q2F0ZWdvcnlFbnRyeVJhdyhjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRy eSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA2OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVn b3J5TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQ2F0ZWdvcnlFbnRyeShjb25zdCBj aGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRyeSwgY29uc3QgY2hhciAqYVZhbHVlLCBQ UkJvb2wgYVBlcnNpc3QsIFBSQm9vbCBhUmVwbGFjZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA3 OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVnb3J5TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgRGVsZXRlQ2F0ZWdvcnlFbnRyeShjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNo YXIgKmFFbnRyeSwgUFJCb29sIGFQZXJzaXN0LCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSkg PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlQ2F0ZWdvcnkoY29uc3QgY2hh ciAqYUNhdGVnb3J5LCBuc0lTaW1wbGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDYXRlZ29yeUNvbnRlbnRzKGNvbnN0IGNoYXIgKmNhdGVnb3J5 LCBjaGFyICoqKmVudHJpZXMsIGNoYXIgKioqdmFsdWVzLCBQUlVpbnQzMiAqY291bnQpID0gMDsK CiAgZW51bSB7IE9WRVJSSURFID0gMCB9OwoKICBlbnVtIHsgRkFMTEJBQ0sgPSAxIH07CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ2F0ZWdvcnlIYW5kbGVyKGNvbnN0IGNoYXIgKmFDYXRl Z29yeSwgbnNJQ2F0ZWdvcnlIYW5kbGVyICphSGFuZGxlciwgUFJJbnQzMiBhTW9kZSwgbnNJQ2F0 ZWdvcnlIYW5kbGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lz dGVyQ2F0ZWdvcnlIYW5kbGVyKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBuc0lDYXRlZ29yeUhhbmRs ZXIgKmhhbmRsZXIsIG5zSUNhdGVnb3J5SGFuZGxlciAqcHJldmlvdXMpID0gMDsKCn07CiMgMjQx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCmV4dGVybiAiQyIgbnNy ZXN1bHQgTlNfQ2F0ZWdvcnlNYW5hZ2VyR2V0RmFjdG9yeSggbnNJRmFjdG9yeSoqICk7CiMgMzMg Im5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRy LmgiIDEKIyAzNCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNDUlQuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMiAzCgoKCgoKCgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxp bnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFn cy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh dHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1 ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1 czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3 OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBp bnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9 IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQg aW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAg ICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07 CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9 IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25n IGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAog IHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxk aXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5 cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2Yg KF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hh ciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRl bnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3Vi bGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g ZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRv dWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg ICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3Eg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgdGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoK CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRl bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy biBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl X3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9f c3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhy b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19z dHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp IHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9f Z3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf X3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhy b3cgKCk7CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEg KGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVu c2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWdu ZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2 b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRo cm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25l ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0 YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBp bnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBz aG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpl eHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19y ZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJh bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpl eHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVk NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBs Y29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2Fs bG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpf X3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p KTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv aWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs b2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAx ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMi IHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoK Cgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZh bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p KTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90 IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq X19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgq X19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRo cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0 ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192 YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52 IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJl bnYgKHZvaWQpIHRocm93ICgpOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDEgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkg dGhyb3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1r ZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0g KF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNh bm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2 NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9f Y29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChf X2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29t cGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFy KTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs b25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwg aW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpl eHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBl eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2 dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0 cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpx Z2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3Ig KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBp bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAg ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp OwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNo YXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAo Y2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1i c3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFy ICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl eHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoK CmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVu bG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50 IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNo YXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQg KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xv YWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAyNiAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQ1JULmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI3ICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIiAxCiMgNDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gUFJV aW50MzIKUExfc3RybGVuKGNvbnN0IGNoYXIgKnN0cik7CiMgNjIgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJVaW50MzIKUExfc3Rybmxl bihjb25zdCBjaGFyICpzdHIsIFBSVWludDMyIG1heCk7CiMgNzMgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShj aGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDg2ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY3B5KGNoYXIg KmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMDkgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0 cm5jcHl6KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMjMg Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4g Y2hhciAqClBMX3N0cmR1cChjb25zdCBjaGFyICpzKTsKCgoKCgoKCmV4dGVybiB2b2lkClBMX3N0 cmZyZWUoY2hhciAqcyk7CiMgMTQ3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBS VWludDMyIG1heCk7CiMgMTU5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFy ICpzcmMpOwojIDE3NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs c3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy YywgUFJVaW50MzIgbWF4KTsKIyAxODggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVp bnQzMiBtYXgsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMjAwICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjbXAoY29uc3Qg Y2hhciAqYSwgY29uc3QgY2hhciAqYik7CiMgMjE0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJuY21wKGNvbnN0IGNo YXIgKmEsIGNvbnN0IGNoYXIgKmIsIFBSVWludDMyIG1heCk7CiMgMjI2ICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJj YXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDIzOCAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUkludG4KUExfc3Ry bmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIgbWF4KTsKIyAy NDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl cm4gY2hhciAqClBMX3N0cmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI2MCAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoK UExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI3MiAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNo cihjb25zdCBjaGFyICpzLCBjaGFyIGMsIFBSVWludDMyIG4pOwojIDI4NCAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ry bnJjaHIoY29uc3QgY2hhciAqcywgY2hhciBjLCBQUlVpbnQzMiBuKTsKIyAzMDAgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBM X3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCk7CiMgMzExICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ TF9zdHJwcmJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0KTsKIyAzMjIgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAq ClBMX3N0cm5wYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4p OwojIDMzMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgi CmV4dGVybiBjaGFyICoKUExfc3RybnByYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxp c3QsIFBSVWludDMyIG4pOwojIDM0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ryc3RyKGNvbnN0IGNoYXIgKmJpZywg Y29uc3QgY2hhciAqbGl0dGxlKTsKIyAzNTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnJzdHIoY29uc3QgY2hhciAq YmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM2NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBj aGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzc1ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ TF9zdHJucnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIg bWF4KTsKIyAzODUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0 ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBj aGFyICpsaXR0bGUpOwojIDM5NSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmln LCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQwNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhc2VzdHIoY29uc3Qg Y2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CiMgNDE3ICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg KgpQTF9zdHJuY2FzZXJzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBS VWludDMyIG1heCk7CgoKCgoKCgp9CiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAy CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0NSVC5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAxCgoKCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z TWVtb3J5LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIiAxCiMgMzYgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKY2xhc3MgbnNJTWVtb3J5IDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDU5ZTdlNzdhLCAweDM4ZTQsIDB4MTFkNCwgeyAweDhj LCAweGY1LCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlk O30KIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCAq IEFsbG9jKHNpemVfdCBzaXplKSA9IDA7CiMgNjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1v cnkuaCIKICB2aXJ0dWFsIHZvaWQgKiBSZWFsbG9jKHZvaWQgKiBwdHIsIHNpemVfdCBuZXdTaXpl KSA9IDA7CiMgNzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFsIHZv aWQgRnJlZSh2b2lkICogcHRyKSA9IDA7CiMgODggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1v cnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQUkJvb2wgaW1tZWRpYXRlKSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb3dNZW1vcnkoUFJCb29sICpfcmV0dmFs KSA9IDA7Cgp9OwojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1vcnkuaCIgMgoKCgoKCgoK Y2xhc3MgbnNNZW1vcnkKewpwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCogQWxsb2Moc2l6ZV90IHNp emUpOwogICAgc3RhdGljIHZvaWQqIFJlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSk7CiAg ICBzdGF0aWMgdm9pZCBGcmVlKHZvaWQqIHB0cik7CiAgICBzdGF0aWMgbnNyZXN1bHQgSGVhcE1p bmltaXplKFBSQm9vbCBhSW1tZWRpYXRlKTsKICAgIHN0YXRpYyB2b2lkKiBDbG9uZShjb25zdCB2 b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyBuc0lNZW1vcnkqIEdldEdsb2JhbE1l bW9yeVNlcnZpY2UoKTsKfTsKIyA1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxv Y2F0b3IuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDYgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiL3Vzci9nY2MtcHJl My4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL3Vzci9nY2MtcHJl My4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAzCiMgMSAiL3Vzci9nY2MtcHJlMy4w L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzCiMgMzQgIi91 c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vz ci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzQgIi91c3IvZ2NjLXByZTMu MC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKyst djMvY3N0ZGRlZiIgMSAzCgojIDEgIi91c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQwICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0ZGRlZi5oIiAzCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lh NjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQxICIvdXNyL2djYy1wcmUz LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMyAiL3Vzci9nY2Mt cHJlMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDIgMwojIDM1ICIvdXNyL2djYy1wcmUzLjAv aW5jbHVkZS9nKystdjMvbmV3IiAyIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKyst djMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL2V4 Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0 aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFs IH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29u c3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlv bgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1 YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p bmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgp OwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0 aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVy KSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu X18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgMzYgIi91 c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5h bWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg cHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9hbGxv YygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0 IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5l d19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0KCgp2b2lkICpvcGVyYXRv ciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9y IG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9y IGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqKSB0 aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJv d190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0 ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCBjb25z dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAq LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQgKm9wZXJhdG9y IG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0K aW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhy b3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgMzUgIi91c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2cr Ky12My9iYWNrd2FyZC9uZXcuaCIgMiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3Rk Ojpub3Rocm93X3Q7CnVzaW5nIHN0ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsK dXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CiMgNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3Bw U2hhcmVkQWxsb2NhdG9yLmgiIDIKIyAyMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVk QWxsb2NhdG9yLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGlu dXgvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2djYy1wcmUzLjAvbGliL2dj Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvZ2Nj LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMKCgoKCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51 eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2djYy1wcmUzLjAvbGliL2dj Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9saW1pdHMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy IDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5j bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5o IiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vz ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1p dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAx NDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv eG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK IyAxMzEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNs dWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1o cC1saW51eC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvZ2NjLXByZTMu MC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAy NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDIKCgoKdGVtcGxh dGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoKCgogIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVf dHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlw ZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X3BvaW50ZXI7Cgog ICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9y ZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKCgoKCiAgICAg fm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRlcgogICAgICBhZGRyZXNz KCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuICZyOwogICAg ICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyggY29uc3RfcmVmZXJlbmNl IHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsKICAgICAgICB9CgogICAg ICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCogPTAgKQog ICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBwb2ludGVyID4obnNN ZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6ZW9mKFQpKSkpOwogICAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRlciBwLCBzaXplX3R5cGUg KQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwogICAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCApCiAgICAgICAg ewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBk ZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAtPn5UKCk7CiAgICAgICAg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QKICAgICAgICB7CgoKCiAg ICAgICAgICByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMICogMlVMICsgMSkgLyBzaXplb2Yo VCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9j YXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApvcGVyYXRvcj09KCBjb25z dCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+ JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApvcGVy YXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hhcmVk QWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDMxICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNDUlQuaCIgMgojIDQ3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKZXh0ZXJu IGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0aW4xVG9VQ1MyWzI1Nl07CiMgODYgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0NSVC5oIgpjbGFzcyBuc0NSVCB7CnB1YmxpYzoKICBlbnVtIHsKICAgIFRBQj0n XHQnICwKICAgIExGPSdcbicgLAogICAgVlRBQj0nXHYnICwKICAgIEZGPSdcZicgLAogICAgQ1I9 J1xyJwogIH07CgoKCgoKCiAgc3RhdGljIHZvaWQgbWVtY3B5KHZvaWQqIGFEZXN0LCBjb25zdCB2 b2lkKiBhU3JjLCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChhRGVzdCAhPSBfX251bGwg JiYgYVNyYyAhPSBfX251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24o IkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCAmJiBhU3JjICE9IE5VTEwp IHx8IChhQ291bnQgPT0gMCkiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiLCAxMDIpOwog ICAgOjptZW1jcHkoYURlc3QsIGFTcmMsIChzaXplX3QpYUNvdW50KTsKICB9CgogIHN0YXRpYyBQ UkludDMyIG1lbWNtcCh2b2lkKiBhRGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNv dW50KSB7CiAgICBpZiAoISgoYURlc3QgIT0gX19udWxsICYmIGFTcmMgIT0gX19udWxsKSB8fCAo YUNvdW50ID09IDApKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbnZhbGlkIE5VTEwgYXJndW1lbnQi LCAiKGFEZXN0ICE9IE5VTEwgJiYgYVNyYyAhPSBOVUxMKSB8fCAoYUNvdW50ID09IDApIiwgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiwgMTA3KTsKICAgIHJldHVybiA6Om1lbWNtcChhRGVz dCwgYVNyYywgKHNpemVfdClhQ291bnQpOwogIH0KCiAgc3RhdGljIHZvaWQgbWVtbW92ZSh2b2lk KiBhRGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoISgo YURlc3QgIT0gX19udWxsICYmIGFTcmMgIT0gX19udWxsKSB8fCAoYUNvdW50ID09IDApKSkgbnNE ZWJ1Zzo6QXNzZXJ0aW9uKCJJbnZhbGlkIE5VTEwgYXJndW1lbnQiLCAiKGFEZXN0ICE9IE5VTEwg JiYgYVNyYyAhPSBOVUxMKSB8fCAoYUNvdW50ID09IDApIiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0NSVC5oIiwgMTEyKTsKICAgIDo6bWVtbW92ZShhRGVzdCwgYVNyYywgKHNpemVfdClhQ291bnQp OwogIH0KCiAgc3RhdGljIHZvaWQgbWVtc2V0KHZvaWQqIGFEZXN0LCBQUlVpbnQ4IGFCeXRlLCBQ UlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChhRGVzdCAhPSBfX251bGwpIHx8IChhQ291bnQg PT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURl c3QgIT0gTlVMTCkgfHwgKGFDb3VudCA9PSAwKSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQu aCIsIDExNyk7CiAgICA6Om1lbXNldChhRGVzdCwgYUJ5dGUsIGFDb3VudCk7CiAgfQoKICBzdGF0 aWMgdm9pZCB6ZXJvKHZvaWQqIGFEZXN0LCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChh RGVzdCAhPSBfX251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIklu dmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCkgfHwgKGFDb3VudCA9PSAwKSIs ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIsIDEyMik7CiAgICA6Om1lbXNldChhRGVzdCwg MCwgKHNpemVfdClhQ291bnQpOwogIH0KCgoKCgogIHN0YXRpYyBQUlVpbnQzMiBzdHJsZW4oY29u c3QgY2hhciogcykgewogICAgcmV0dXJuIFBSVWludDMyKDo6c3RybGVuKHMpKTsKICB9CgoKICBz dGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAg ICByZXR1cm4gUFJJbnQzMihQTF9zdHJjbXAoczEsIHMyKSk7CiAgfQoKICBzdGF0aWMgUFJJbnQz MiBzdHJuY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAgICAgICAgICAg ICAgICAgICAgIFBSVWludDMyIGFNYXhMZW4pIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cm5j bXAoczEsIHMyLCBhTWF4TGVuKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChj b25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0 cmNhc2VjbXAoczEsIHMyKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29u c3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICBQUklu dDMyIHJlc3VsdD1QUkludDMyKFBMX3N0cm5jYXNlY21wKHMxLCBzMiwgYU1heExlbikpOwoKCiAg ICBpZihyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog IHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQ UkludDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0IHVuc2lnbmVkIGNo YXIqKXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwogICAgaWYgKGRpZmYg IT0gMCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJuY21wKHMxLHMyLHVu c2lnbmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIq IHN0cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0 cm5kdXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJldHVybiBQTF9zdHJu ZHVwKHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciogc3RyKSB7CiAgICBQ TF9zdHJmcmVlKHN0cik7CiAgfQojIDE5NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiCiAg c3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGRlbGltcywgY2hhciog Km5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVuKGNvbnN0IFBSVW5pY2hhciogcyk7 CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJV bmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBz MSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy IGFNYXhMZW4pOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBQUlVuaWNoYXIq IHMxLCBjb25zdCBQUlVuaWNoYXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAo Y29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNt cChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMy IHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIsCiAgICAgICAgICAg ICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNh c2VjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIpOwoKICBzdGF0aWMgUFJJ bnQzMiBzdHJuY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgoKICBzdGF0aWMg UFJVbmljaGFyKiBzdHJkdXAoY29uc3QgUFJVbmljaGFyKiBzdHIpOwoKICBzdGF0aWMgUFJVbmlj aGFyKiBzdHJuZHVwKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pOwoKICBzdGF0 aWMgdm9pZCBmcmVlKFBSVW5pY2hhciogc3RyKSB7CiAgICAgICAgbnNDcHBTaGFyZWRBbGxvY2F0 b3I8UFJVbmljaGFyPiBzaGFyZWRfYWxsb2NhdG9yOwogICAgICAgIHNoYXJlZF9hbGxvY2F0b3Iu ZGVhbGxvY2F0ZShzdHIsIDAgKTsKICB9CgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29u c3QgY2hhciogc3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0aWMg UFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSVWludDMyKiByZXN1bHRp bmdTdHJMZW4gPSAwKTsKCgogIHN0YXRpYyBQUlVpbnQzMiBCdWZmZXJIYXNoQ29kZShjb25zdCBj aGFyKiBzdHIsIFBSVWludDMyIHN0ckxlbik7CgoKICBzdGF0aWMgUFJJbnQzMiBhdG9pKCBjb25z dCBQUlVuaWNoYXIgKnN0cmluZyApOwoKICBzdGF0aWMgUFJVbmljaGFyIFRvVXBwZXIoUFJVbmlj aGFyIGFDaGFyKTsKCiAgc3RhdGljIFBSVW5pY2hhciBUb0xvd2VyKFBSVW5pY2hhciBhQ2hhcik7 CgogIHN0YXRpYyBQUkJvb2wgSXNVcHBlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJC b29sIElzTG93ZXIoUFJVbmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFy IGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBS Qm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBh Q2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp YyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJvb2wgSXNB c2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lpRGlnaXQo UFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVuaWNoYXIg YUNoYXIpOwp9OwojIDM1ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lPYnNlcnZlclNlcnZpY2UuaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJT2JzZXJ2ZXJTZXJ2aWNlLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVy LmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVyLmgiCmNsYXNzIG5zSU9i c2VydmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRiMjQyZTAxLCAweGU0 ZDksIDB4MTFkMiwgeyAweDlkLCAweGRlLCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAw eDc0IH19OyByZXR1cm4gaWlkO30KIyA0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPYnNlcnZlKG5zSVN1cHBvcnRzICphU3ViamVjdCwgY29u c3QgUFJVbmljaGFyICphVG9waWMsIGNvbnN0IFBSVW5pY2hhciAqYURhdGEpID0gMDsKCn07CiMg MTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lPYnNlcnZlclNlcnZpY2UuaCIgMgojIDMzICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJT2JzZXJ2ZXJTZXJ2aWNlLmgiCmNsYXNzIG5zSU9ic2VydmVyU2Vy dmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMDdmNTE5MiwgMHhlM2Qx LCAweDExZDIsIHsgMHg4YSwgMHhjZCwgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHg4OCwgMHg2 MCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZE9ic2VydmVyKG5zSU9i c2VydmVyICphbk9ic2VydmVyLCBjb25zdCBQUlVuaWNoYXIgKmFUb3BpYykgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSZW1vdmVPYnNlcnZlcihuc0lPYnNlcnZlciAqYW5PYnNlcnZlciwgY29u c3QgUFJVbmljaGFyICpuc1N0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVPYnNlcnZlckxpc3QoY29uc3QgUFJVbmljaGFyICphVG9waWMsIG5zSUVudW1lcmF0b3IgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeShuc0lTdXBwb3J0cyAqYVN1 YmplY3QsIGNvbnN0IFBSVW5pY2hhciAqYVRvcGljLCBjb25zdCBQUlVuaWNoYXIgKnNvbWVEYXRh KSA9IDA7Cgp9OwojIDM2ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKIyAxICIvdXNyL3NyYy9t aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAxCiMgMjIgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJiaXQuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJiaXQuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIiAyCmV4dGVybiAiQyIgewoKCgoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHByYml0bWFwX3Q7CiMgNDAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIgpleHRlcm4gUFJJbnRuIFBSX0NlaWxpbmdMb2cyKFBS VWludDMyIGkpOwoKCgoKZXh0ZXJuIFBSSW50biBQUl9GbG9vckxvZzIoUFJVaW50MzIgaSk7CiMg OTEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIgp9CiMg MjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAx ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjbGlzdC5oIiAxCiMg MjIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNsaXN0LmgiCiMg MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj IDIzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjbGlzdC5oIiAy Cgp0eXBlZGVmIHN0cnVjdCBQUkNMaXN0U3RyIFBSQ0xpc3Q7CgoKCgpzdHJ1Y3QgUFJDTGlzdFN0 ciB7CiAgICBQUkNMaXN0ICpuZXh0OwogICAgUFJDTGlzdCAqcHJldjsKfTsKIyAyNSAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMQojIDI2ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAxCiMgMjIgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmN2YXIuaCIKIyAxICIvdXNyL3NyYy9t aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAyMyAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAyCiMgMSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAyNCAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAyCgpleHRlcm4gIkMi IHsKCnR5cGVkZWYgc3RydWN0IFBSQ29uZFZhciBQUkNvbmRWYXI7CiMgNDAgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmN2YXIuaCIKZXh0ZXJuIFBSQ29uZFZhciog UFJfTmV3Q29uZFZhcihQUkxvY2sgKmxvY2spOwoKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfRGVzdHJv eUNvbmRWYXIoUFJDb25kVmFyICpjdmFyKTsKIyA3OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMgUFJfV2FpdENvbmRWYXIo UFJDb25kVmFyICpjdmFyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyA5MyAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMg UFJfTm90aWZ5Q29uZFZhcihQUkNvbmRWYXIgKmN2YXIpOwojIDEwMyAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTm90 aWZ5QWxsQ29uZFZhcihQUkNvbmRWYXIgKmN2YXIpOwoKfQojIDI3ICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZHRvYS5oIiAxCiMgMjIgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIKZXh0ZXJuIFBS RmxvYXQ2NAoKUFJfc3RydG9kKGNvbnN0IGNoYXIgKnMwMCwgY2hhciAqKnNlKTsKCgoKCgoKCmV4 dGVybiB2b2lkIFBSX2NudnRmKGNoYXIgKmJ1ZiwgUFJJbnRuIGJ1ZnN6LCBQUkludG4gcHJjc24s IFBSRmxvYXQ2NCBmdmFsKTsKIyA2NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByZHRvYS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfZHRvYShQUkZsb2F0NjQgZCwgUFJJ bnRuIG1vZGUsIFBSSW50biBuZGlnaXRzLAogICAgICAgIFBSSW50biAqZGVjcHQsIFBSSW50biAq c2lnbiwgY2hhciAqKnJ2ZSwgY2hhciAqYnVmLCBQUlNpemUgYnVmc2l6ZSk7Cgp9CiMgMjggIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIgMQojIDIyICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIKIyAxICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVudi5oIiAyCgoKCgoKCgpleHRl cm4gIkMiIHsKCgoKCgpleHRlcm4gY2hhciogUFJfR2V0RW52KGNvbnN0IGNoYXIgKnZhcik7CgoK CgoKfQojIDI5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5o IiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyb3Iu aCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJv ci5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz LmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJy b3IuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIFBSSW50MzIgUFJFcnJvckNvZGU7CgoKCiMg MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyLmgiIDEKIyAy NTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVyci5oIgpleHRl cm4gdm9pZCBuc3ByX0luaXRpYWxpemVQUkVycm9yVGFibGUodm9pZCk7CiMgMzEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiIDIKCgoKCgoKCmV4dGVy biB2b2lkIFBSX1NldEVycm9yKFBSRXJyb3JDb2RlIGVycm9yQ29kZSwgUFJJbnQzMiBvc2Vycik7 CiMgNDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgi CmV4dGVybiB2b2lkIFBSX1NldEVycm9yVGV4dCgKICAgIFBSSW50biB0ZXh0TGVuZ3RoLCBjb25z dCBjaGFyICp0ZXh0KTsKCgoKCmV4dGVybiBQUkVycm9yQ29kZSBQUl9HZXRFcnJvcih2b2lkKTsK CgoKCgpleHRlcm4gUFJJbnQzMiBQUl9HZXRPU0Vycm9yKHZvaWQpOwoKCgoKCgpleHRlcm4gUFJJ bnQzMiBQUl9HZXRFcnJvclRleHRMZW5ndGgodm9pZCk7CgoKCgoKCmV4dGVybiBQUkludDMyIFBS X0dldEVycm9yVGV4dChjaGFyICp0ZXh0KTsKIyAxNTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCnR5cGVkZWYgUFJVaW50MzIgUFJMYW5ndWFnZUNv ZGU7CiMgMTY3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJv ci5oIgpzdHJ1Y3QgUFJFcnJvck1lc3NhZ2UgewogICAgY29uc3QgY2hhciAqIG5hbWU7CiAgICBj b25zdCBjaGFyICogZW5fdGV4dDsKfTsKCgoKCgoKc3RydWN0IFBSRXJyb3JUYWJsZSB7CiAgICBj b25zdCBzdHJ1Y3QgUFJFcnJvck1lc3NhZ2UgKiBtc2dzOwogICAgY29uc3QgY2hhciAqbmFtZTsK ICAgIFBSRXJyb3JDb2RlIGJhc2U7CiAgICBpbnQgbl9tc2dzOwp9OwoKCgoKCgpzdHJ1Y3QgUFJF cnJvckNhbGxiYWNrUHJpdmF0ZTsKCgoKCgoKCnN0cnVjdCBQUkVycm9yQ2FsbGJhY2tUYWJsZVBy aXZhdGU7CiMgMjA5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJl cnJvci5oIgp0eXBlZGVmIGNvbnN0IGNoYXIgKgpQUkVycm9yQ2FsbGJhY2tMb29rdXBGbihQUkVy cm9yQ29kZSBjb2RlLCBQUkxhbmd1YWdlQ29kZSBsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBQUkVycm9yVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgc3Ry dWN0IFBSRXJyb3JDYWxsYmFja1ByaXZhdGUgKmNiX3ByaXZhdGUsCiAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgUFJFcnJvckNhbGxiYWNrVGFibGVQcml2YXRlICp0YWJsZV9wcml2YXRlKTsKIyAy MjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCnR5 cGVkZWYgc3RydWN0IFBSRXJyb3JDYWxsYmFja1RhYmxlUHJpdmF0ZSAqClBSRXJyb3JDYWxsYmFj a05ld1RhYmxlRm4oY29uc3Qgc3RydWN0IFBSRXJyb3JUYWJsZSAqdGFibGUsCiAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBQUkVycm9yQ2FsbGJhY2tQcml2YXRlICpjYl9wcml2YXRlKTsK IyAyNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgi CmV4dGVybiBjb25zdCBjaGFyICogUFJfRXJyb3JUb1N0cmluZyhQUkVycm9yQ29kZSBjb2RlLAog ICAgUFJMYW5ndWFnZUNvZGUgbGFuZ3VhZ2UpOwojIDI1NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyb3IuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKiBQUl9FcnJv clRvTmFtZShQUkVycm9yQ29kZSBjb2RlKTsKIyAyNzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCmV4dGVybiBjb25zdCBjaGFyICogY29uc3QgKiBQ Ul9FcnJvckxhbmd1YWdlcyh2b2lkKTsKIyAyODQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCmV4dGVybiBQUkVycm9yQ29kZSBQUl9FcnJvckluc3Rh bGxUYWJsZShjb25zdCBzdHJ1Y3QgUFJFcnJvclRhYmxlICp0YWJsZSk7CiMgMzAwICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJvci5oIgpleHRlcm4gdm9pZCBQ Ul9FcnJvckluc3RhbGxDYWxsYmFjayhjb25zdCBjaGFyICogY29uc3QgKiBsYW5ndWFnZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRXJyb3JDYWxsYmFja0xvb2t1cEZuICpsb29r dXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRXJyb3JDYWxsYmFja05ld1RhYmxl Rm4gKm5ld3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgUFJFcnJv ckNhbGxiYWNrUHJpdmF0ZSAqY2JfcHJpdmF0ZSk7Cgp9CiMgMzAgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDEKIyA0OCAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMSAzCiMgNDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmluZXQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDIzICIvdXNy L2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl L3N5cy91aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUg Ii91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy91aW8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMv dWlvLmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYml0cy91aW8uaCIgMwpzdHJ1Y3QgaW92ZWMK ICB7CiAgICB2b2lkICppb3ZfYmFzZTsKICAgIHNpemVfdCBpb3ZfbGVuOwogIH07CiMgMzAgIi91 c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZHYgKGlu dCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAg IHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3NpemVfdCB3cml0ZXYgKGludCBfX2ZkLCBfX2NvbnN0 IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRocm93ICgpOwoKfQoj IDI4ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9nY2MtcHJlMy4w L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMw ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NvY2tldC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKIyAx ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCiMgMSAi L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvbGlt aXRzLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0 LmgiIDIgMwoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKCgoKCmVudW0gX19zb2Nr ZXRfdHlwZQp7CiAgU09DS19TVFJFQU0gPSAxLAoKCiAgU09DS19ER1JBTSA9IDIsCgoKICBTT0NL X1JBVyA9IDMsCgogIFNPQ0tfUkRNID0gNCwKCiAgU09DS19TRVFQQUNLRVQgPSA1LAoKCiAgU09D S19QQUNLRVQgPSAxMAoKCgp9OwojIDEzOCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrYWRkci5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl L2JpdHMvc29ja2FkZHIuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHlf dDsKIyAxMzkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgpzdHJ1Y3Qgc29ja2Fk ZHIKICB7CiAgICBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CiAgICBjaGFyIHNhX2RhdGFbMTRdOwog IH07CiMgMTU4ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMwpzdHJ1Y3Qgc29ja2FkZHJf c3RvcmFnZQogIHsKICAgIHNhX2ZhbWlseV90IHNzX2ZhbWlseTsKICAgIF9fdWludDY0X3QgX19z c19hbGlnbjsKICAgIGNoYXIgX19zc19wYWRkaW5nWygxMjggLSAoMiAqIHNpemVvZiAoX191aW50 NjRfdCkpKV07CiAgfTsKCgoKZW51bQogIHsKICAgIE1TR19PT0IgPSAweDAxLAoKICAgIE1TR19Q RUVLID0gMHgwMiwKCiAgICBNU0dfRE9OVFJPVVRFID0gMHgwNCwKCgoKICAgIE1TR19UUllIQVJE ID0gTVNHX0RPTlRST1VURSwKCgogICAgTVNHX0NUUlVOQyA9IDB4MDgsCgogICAgTVNHX1BST1hZ ID0gMHgxMCwKCiAgICBNU0dfVFJVTkMgPSAweDIwLAoKICAgIE1TR19ET05UV0FJVCA9IDB4NDAs CgogICAgTVNHX0VPUiA9IDB4ODAsCgogICAgTVNHX1dBSVRBTEwgPSAweDEwMCwKCiAgICBNU0df RklOID0gMHgyMDAsCgogICAgTVNHX1NZTiA9IDB4NDAwLAoKICAgIE1TR19DT05GSVJNID0gMHg4 MDAsCgogICAgTVNHX1JTVCA9IDB4MTAwMCwKCiAgICBNU0dfRVJSUVVFVUUgPSAweDIwMDAsCgog ICAgTVNHX05PU0lHTkFMID0gMHg0MDAwCgogIH07CgoKCgpzdHJ1Y3QgbXNnaGRyCiAgewogICAg dm9pZCAqbXNnX25hbWU7CiAgICBzb2NrbGVuX3QgbXNnX25hbWVsZW47CgogICAgc3RydWN0IGlv dmVjICptc2dfaW92OwogICAgc2l6ZV90IG1zZ19pb3ZsZW47CgogICAgdm9pZCAqbXNnX2NvbnRy b2w7CiAgICBzaXplX3QgbXNnX2NvbnRyb2xsZW47CgogICAgaW50IG1zZ19mbGFnczsKICB9OwoK CnN0cnVjdCBjbXNnaGRyCiAgewogICAgc2l6ZV90IGNtc2dfbGVuOwoKICAgIGludCBjbXNnX2xl dmVsOwogICAgaW50IGNtc2dfdHlwZTsKICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgY2hhciBf X2Ntc2dfZGF0YSBbXTsKCiAgfTsKIyAyNTAgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz CmV4dGVybiBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19t aGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRy ICpfX2Ntc2cpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK ZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAxLAoKCiAgICBTQ01fQ1JFREVOVElBTFMgPSAw eDAyLAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgwMwogIH07CgoKCnN0cnVjdCB1Y3JlZAp7CiAg cGlkX3QgcGlkOwogIHVpZF90IHVpZDsKICBnaWRfdCBnaWQ7Cn07CgoKIyAxICIvdXNyL2luY2x1 ZGUvYXNtL3NvY2tldC5oIiAxIDMKIyAxMSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyAxMiAiL3Vzci9pbmNsdWRlL2Fz bS9zb2NrZXQuaCIgMiAzCiMgMjk5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoK CnN0cnVjdCBsaW5nZXIKICB7CiAgICBpbnQgbF9vbm9mZjsKICAgIGludCBsX2xpbmdlcjsKICB9 OwojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCnN0cnVjdCBvc29ja2Fk ZHIKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5OwogICAgdW5zaWduZWQgY2hh ciBzYV9kYXRhWzE0XTsKICB9OwoKCgoKZW51bQp7CiAgU0hVVF9SRCA9IDAsCgogIFNIVVRfV1Is CgogIFNIVVRfUkRXUgoKfTsKIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMKZXh0 ZXJuIGludCBzb2NrZXQgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9jb2wp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc29ja2V0cGFpciAoaW50IF9fZG9tYWluLCBpbnQg X190eXBlLCBpbnQgX19wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZHNb Ml0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmluZCAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0 IHNvY2thZGRyICogX19hZGRyLCBzb2NrbGVuX3QgX19sZW4pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBnZXRzb2NrbmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmlj dCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBf X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBjb25uZWN0IChpbnQgX19mZCwgX19jb25z dCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBnZXRwZWVybmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAq X19yZXN0cmljdCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19y ZXN0cmljdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZCAoaW50IF9fZmQsIF9f Y29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHJlY3YgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwg aW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZHRvIChpbnQgX19m ZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgIGlu dCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwKICAgICAgICAgICAg ICAgICAgIHNvY2tsZW5fdCBfX2FkZHJfbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJl Y3Zmcm9tIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwgaW50 IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmlj dCBfX2FkZHIsIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBzZW5kbXNnIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgbXNnaGRy ICpfX21lc3NhZ2UsIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJl Y3Ztc2cgKGludCBfX2ZkLCBzdHJ1Y3QgbXNnaGRyICpfX21lc3NhZ2UsIGludCBfX2ZsYWdzKQog ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c29ja29wdCAoaW50IF9fZmQsIGludCBf X2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVz dHJpY3QgX19vcHR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3Ry aWN0IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c29ja29wdCAoaW50IF9f ZmQsIGludCBfX2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgdm9pZCAqX19vcHR2YWwsIHNvY2tsZW5fdCBfX29wdGxlbikgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBsaXN0ZW4gKGludCBfX2ZkLCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBhY2NlcHQgKGludCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3QgX19h ZGRyLAogICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4p CiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHNodXRkb3duIChpbnQgX19mZCwgaW50 IF9faG93KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2ZkdHlwZSAoaW50IF9fZmQsIGlu dCBfX2ZkdHlwZSkgdGhyb3cgKCk7CgoKfQojIDUwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5o IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv c3RkaW50LmgiIDIgMwoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1s aW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMzAgIi91c3IvaW5j bHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAz CiMgMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9zdGRp bnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50NjRfdDsKIyA2OCAiL3Vzci9pbmNsdWRlL3N0ZGlu dC5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGlu dCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoKdHlwZWRlZiBsb25n IGludCBpbnRfbGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFz dDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1 aW50X2xlYXN0NjRfdDsKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgc2ln bmVkIGNoYXIgaW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IGludF9mYXN0MTZfdDsKdHlw ZWRlZiBsb25nIGludCBpbnRfZmFzdDMyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgaW50X2Zhc3Q2NF90 OwojIDEwNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1 aW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVpbnRfZmFzdDE2X3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludF9mYXN0MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCB1aW50X2Zhc3Q2NF90OwojIDEyMiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5 cGVkZWYgbG9uZyBpbnQgaW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50 cHRyX3Q7CiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBsb25nIGludCBp bnRtYXhfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi91c3Iv aW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgpleHRlcm4gIkMiIHsK CgplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwK CiAgICBJUFBST1RPX0lDTVAgPSAxLAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9U T19JUElQID0gNCwKCiAgICBJUFBST1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoK ICAgIElQUFJPVE9fUFVQID0gMTIsCgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RP X0lEUCA9IDIyLAoKICAgIElQUFJPVE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwK CiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgog ICAgSVBQUk9UT19SU1ZQID0gNDYsCgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RP X0VTUCA9IDUwLAoKICAgIElQUFJPVE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4 LAoKICAgIElQUFJPVE9fTk9ORSA9IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAg IElQUFJPVE9fTVRQID0gOTIsCgogICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9f UElNID0gMTAzLAoKICAgIElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1 NSwKCiAgICBJUFBST1RPX01BWAogIH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoK CmVudW0KICB7CiAgICBJUFBPUlRfRUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAg ICBJUFBPUlRfU1lTVEFUID0gMTEsCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JU X05FVFNUQVQgPSAxNSwKICAgIElQUE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAy MywKICAgIElQUE9SVF9TTVRQID0gMjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAg SVBQT1JUX05BTUVTRVJWRVIgPSA0MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JU X01UUCA9IDU3LAoKICAgIElQUE9SVF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAg ICBJUFBPUlRfRklOR0VSID0gNzksCiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JU X1NVUERVUCA9IDk1LAoKCiAgICBJUFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9M T0dJTlNFUlZFUiA9IDUxMywKICAgIElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRf RUZTU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9X SE9TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9S VF9SRVNFUlZFRCA9IDEwMjQsCgoKICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsK CgoKdHlwZWRlZiB1aW50MzJfdCBpbl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5f YWRkcl90IHNfYWRkcjsKICB9OwojIDE5MCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpz dHJ1Y3QgaW42X2FkZHIKICB7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhfdCB1Nl9h ZGRyOFsxNl07CiAgICAgICAgdWludDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVpbnQzMl90 IHU2X2FkZHIzMls0XTsKICAgICAgfSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVj dCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZh ZGRyX2xvb3BiYWNrOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAz CiMgMjEzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKc3RydWN0IHNvY2thZGRy X2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9y dDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96 ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAg IChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m IChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNh X2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQz Ml90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWlu dDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3Ry dWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJf aW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAi L3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBp bl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJl cQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRk ciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGlu X2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAg aW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBp X2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5f YWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAz CiMgMjU5ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJfdCBudG9o bCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBodG9ubCAo dWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyAxICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDEgMwojIDI2OCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9u ZXRpbmV0L2luLmgiIDIgMwojIDMzMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRl cm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9f c29ja19pbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2Nr ZmQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEg Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAg c3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7 CiAgfTsKCn0KIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW5ldC5oIiAyCiMgNjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmluZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIvdXNyL2lu Y2x1ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjMgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL25ldGlu ZXQvaW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoKCgoKCgpl eHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3QgY2hhciAq X19jcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5f YWRkciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFk ZHIgKGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAoKTsKCgpl eHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgp OwoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpfX2NwKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIgX19pbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmlj dCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250b3AgKGlu dCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19sZW4pCiAg ICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNo YXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy ICppbmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYsIF9fY29u c3Qgdm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpbmV0X25l dF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVu c2lnbmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50IF9fbGVu KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19sZW4sIF9f Y29uc3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDY2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDEg MwojIDI2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAy IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1 ZGUvcnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgNDAg Ii91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGli L2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91 c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCnN0cnVjdCBycGNlbnQK ewogIGNoYXIgKnJfbmFtZTsKICBjaGFyICoqcl9hbGlhc2VzOwogIGludCByX251bWJlcjsKfTsK CmV4dGVybiB2b2lkIHNldHJwY2VudCAoaW50IF9fc3RheW9wZW4pIHRocm93ICgpOwpleHRlcm4g dm9pZCBlbmRycGNlbnQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0 cnBjYnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3Qg cnBjZW50ICpnZXRycGNieW51bWJlciAoaW50IF9fbnVtYmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHN0 cnVjdCBycGNlbnQgKmdldHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRy cGNieW5hbWVfciAoX19jb25zdCBjaGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0 X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBf X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAqKl9fcmVz dWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVy LCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBn ZXRycGNlbnRfciAoc3RydWN0IHJwY2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fYnVmbGVuLCBzdHJ1Y3QgcnBjZW50ICoq X19yZXN1bHQpIHRocm93ICgpOwoKCn0KIyAzNCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1 ZGUvYml0cy9zaWdpbmZvLmgiIDMKdHlwZWRlZiB1bmlvbiBzaWd2YWwKICB7CiAgICBpbnQgc2l2 YWxfaW50OwogICAgdm9pZCAqc2l2YWxfcHRyOwogIH0gc2lndmFsX3Q7CiMgMjk3ICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWdpbmZvLmgiIDMKc3RydWN0IF9fcHRocmVhZF9hdHRyX3M7Cgp0eXBlZGVm IHN0cnVjdCBzaWdldmVudAogIHsKICAgIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogICAgaW50IHNp Z2V2X3NpZ25vOwogICAgaW50IHNpZ2V2X25vdGlmeTsKCiAgICB1bmlvbgogICAgICB7CiAgICAg ICAgaW50IF9wYWRbKCg2NCAvIHNpemVvZiAoaW50KSkgLSA0KV07CgogICAgICAgIHN0cnVjdAog ICAgICAgICAgewogICAgICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKSAoc2lndmFsX3QpOwogICAg ICAgICAgICBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcyAqX2F0dHJpYnV0ZTsKICAgICAgICAgIH0g X3NpZ2V2X3RocmVhZDsKICAgICAgfSBfc2lnZXZfdW47CiAgfSBzaWdldmVudF90OwoKCgoKCgpl bnVtCnsKICBTSUdFVl9TSUdOQUwgPSAwLAoKICBTSUdFVl9OT05FLAoKICBTSUdFVl9USFJFQUQK Cn07CiMgMzkgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL25ldGRiLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9uZXRkYi5oIiAz CnN0cnVjdCBuZXRlbnQKewogIGNoYXIgKm5fbmFtZTsKICBjaGFyICoqbl9hbGlhc2VzOwogIGlu dCBuX2FkZHJ0eXBlOwogIHVpbnQzMl90IG5fbmV0Owp9OwojIDQ0ICIvdXNyL2luY2x1ZGUvbmV0 ZGIuaCIgMiAzCiMgNTQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiAiQyIgewoKCmV4 dGVybiBpbnQgaF9lcnJubzsKCgpleHRlcm4gaW50ICpfX2hfZXJybm9fbG9jYXRpb24gKHZvaWQp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAxMDUgIi91c3IvaW5jbHVk ZS9uZXRkYi5oIiAzCmV4dGVybiB2b2lkIGhlcnJvciAoX19jb25zdCBjaGFyICpfX3N0cikgdGhy b3cgKCk7CgoKZXh0ZXJuIF9fY29uc3QgY2hhciAqaHN0cmVycm9yIChpbnQgX19lcnJfbnVtKSB0 aHJvdyAoKTsKCgoKCnN0cnVjdCBob3N0ZW50CnsKICBjaGFyICpoX25hbWU7CiAgY2hhciAqKmhf YWxpYXNlczsKICBpbnQgaF9hZGRydHlwZTsKICBpbnQgaF9sZW5ndGg7CiAgY2hhciAqKmhfYWRk cl9saXN0OwoKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0aG9zdGVudCAoaW50IF9fc3RheV9vcGVuKSB0 aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRob3N0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgX19z b2NrbGVuX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1l IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCBob3N0 ZW50ICpnZXRob3N0YnluYW1lMiAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX2FmKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0ZW50X3IgKHN0cnVjdCBob3N0ZW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0 aG9zdGJ5YWRkcl9yIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19hZGRyLCBfX3NvY2tsZW5f dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9i dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVu dCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5h bWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1 ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0 cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZTJfciAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgaW50IF9fYWYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9f cmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldG5ldGVudCAo aW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRuZXRlbnQgKHZvaWQp IHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0ZW50ICh2b2lkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5YWRkciAodWludDMyX3QgX19u ZXQsIGludCBfX3R5cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdl dG5ldGJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBnZXRuZXRlbnRfciAoc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYs CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqKl9fcmVzdHJp Y3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hf ZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0YnlhZGRyX3IgKHVpbnQzMl90IF9f bmV0LCBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0 ZXJuIGludCBnZXRuZXRieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jl c3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5l dGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBzZXJ2ZW50CnsK ICBjaGFyICpzX25hbWU7CiAgY2hhciAqKnNfYWxpYXNlczsKICBpbnQgc19wb3J0OwogIGNoYXIg KnNfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHNlcnZlbnQgKGludCBfX3N0YXlfb3Blbikg dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kc2VydmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Byb3Rv KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2Ynlwb3J0IChpbnQg X19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGludCBnZXRzZXJ2ZW50X3IgKHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1 ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieW5hbWVfciAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVm bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3Ry aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0c2VydmJ5cG9ydF9yIChpbnQg X19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3QgcHJvdG9lbnQKewogIGNoYXIg KnBfbmFtZTsKICBjaGFyICoqcF9hbGlhc2VzOwogIGludCBwX3Byb3RvOwp9OwoKCgpleHRlcm4g dm9pZCBzZXRwcm90b2VudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p ZCBlbmRwcm90b2VudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQg KmdldHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IHByb3RvZW50ICpn ZXRwcm90b2J5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBz dHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIgKGludCBfX3Byb3RvKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IGdldHByb3RvZW50X3IgKHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmlj dCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBn ZXRwcm90b2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3Vs dF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1 Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBw cm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRw cm90b2J5bnVtYmVyX3IgKGludCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1Zmxl biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRuZXRncmVudCAoX19j b25zdCBjaGFyICpfX25ldGdyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRuZXRncmVu dCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ2V0bmV0Z3JlbnQgKGNoYXIgKipfX3Jl c3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9t YWlucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaW5uZXRnciAoX19jb25zdCBjaGFyICpfX25l dGdyb3VwLCBfX2NvbnN0IGNoYXIgKl9faG9zdCwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fdXNlciwgX19jb25zdCBjaGFyICpkb21haW4pIHRocm93ICgpOwoKCmV4dGVybiBp bnQgZ2V0bmV0Z3JlbnRfciAoY2hhciAqKl9fcmVzdHJpY3QgX19ob3N0cCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9tYWlucCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4pIHRocm93 ICgpOwojIDM1MSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIGludCByY21kIChjaGFy ICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJw KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJjbWRfYWYgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAg ICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgcmV4ZWMgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAp CiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmV4ZWNfYWYgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAgICAgICAgICAgICAgICAgICAg IHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBydXNlcm9rIChfX2Nv bnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9jdXNlcikgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcnVzZXJva19hZiAoX19jb25zdCBjaGFyICpfX3Job3N0LCBpbnQgX19zdXNl ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVtdXNlciwgX19jb25z dCBjaGFyICpfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19h ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJyZXN2cG9ydCAoaW50ICpfX2FscG9ydCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcnJlc3Zwb3J0X2FmIChpbnQgKl9fYWxwb3J0LCBzYV9mYW1p bHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKc3RydWN0IGFkZHJpbmZvCnsKICBpbnQgYWlfZmxh Z3M7CiAgaW50IGFpX2ZhbWlseTsKICBpbnQgYWlfc29ja3R5cGU7CiAgaW50IGFpX3Byb3RvY29s OwogIHNvY2tsZW5fdCBhaV9hZGRybGVuOwogIHN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsKICBj aGFyICphaV9jYW5vbm5hbWU7CiAgc3RydWN0IGFkZHJpbmZvICphaV9uZXh0Owp9OwoKCgpzdHJ1 Y3QgZ2FpY2IKewogIGNvbnN0IGNoYXIgKmFyX25hbWU7CiAgY29uc3QgY2hhciAqYXJfc2Vydmlj ZTsKICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFyX3JlcXVlc3Q7CiAgc3RydWN0IGFkZHJpbmZv ICphcl9yZXN1bHQ7CgogIGludCBfX3JldHVybjsKICBpbnQgX191bnVzZWRbNV07Cn07CiMgNDc2 ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpleHRlcm4gaW50IGdldGFkZHJpbmZvIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCBhZGRyaW5mbyAqX19yZXN0cmljdCBfX3JlcSwKICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGFkZHJpbmZvICoqX19yZXN0cmljdCBfX3BhaSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIHZvaWQgZnJlZWFkZHJpbmZvIChzdHJ1Y3QgYWRkcmluZm8gKl9fYWkpIHRocm93ICgpOwoK CmV4dGVybiBjaGFyICpnYWlfc3RyZXJyb3IgKGludCBfX2Vjb2RlKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGdldG5hbWVpbmZvIChfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBf X3NhLAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19y ZXN0cmljdCBfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX2hvc3Rs ZW4sIGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2LAogICAgICAgICAgICAgICAgICAgICAgICBzb2Nr bGVuX3QgX19zZXJ2bGVuLCB1bnNpZ25lZCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBnZXRhZGRyaW5mb19hIChpbnQgX19tb2RlLCBzdHJ1Y3QgZ2FpY2IgKl9fbGlzdFtd LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2VudCwgc3RydWN0IHNpZ2V2ZW50ICpf X3Jlc3RyaWN0IF9fc2lnKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnYWlfc3VzcGVu ZCAoX19jb25zdCBzdHJ1Y3QgZ2FpY2IgKl9fY29uc3QgX19saXN0W10sIGludCBfX2VudCwKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnYWlfZXJyb3IgKHN0cnVjdCBnYWljYiAqX19yZXEpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgZ2FpX2NhbmNlbCAoc3RydWN0IGdhaWNiICpfX2dhaWNicCkg dGhyb3cgKCk7CgoKCn0KIyA2OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW5ldC5oIiAyCiMgMzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpbml0LmgiIDEKIyAyMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3ByaW5pdC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcnRocmVhZC5oIiAxCiMgNTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnRocmVhZC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnR5cGVzLmgiIDEKIyA2MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydGhyZWFkLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpbnJ2YWwuaCIgMQojIDYxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBQ UlRocmVhZCBQUlRocmVhZDsKdHlwZWRlZiBzdHJ1Y3QgUFJUaHJlYWRTdGFjayBQUlRocmVhZFN0 YWNrOwoKdHlwZWRlZiBlbnVtIFBSVGhyZWFkVHlwZSB7CiAgICBQUl9VU0VSX1RIUkVBRCwKICAg IFBSX1NZU1RFTV9USFJFQUQKfSBQUlRocmVhZFR5cGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRT Y29wZSB7CiAgICBQUl9MT0NBTF9USFJFQUQsCiAgICBQUl9HTE9CQUxfVEhSRUFELAogICAgUFJf R0xPQkFMX0JPVU5EX1RIUkVBRAp9IFBSVGhyZWFkU2NvcGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJl YWRTdGF0ZSB7CiAgICBQUl9KT0lOQUJMRV9USFJFQUQsCiAgICBQUl9VTkpPSU5BQkxFX1RIUkVB RAp9IFBSVGhyZWFkU3RhdGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRQcmlvcml0eQp7CiAgICBQ Ul9QUklPUklUWV9GSVJTVCA9IDAsCiAgICBQUl9QUklPUklUWV9MT1cgPSAwLAogICAgUFJfUFJJ T1JJVFlfTk9STUFMID0gMSwKICAgIFBSX1BSSU9SSVRZX0hJR0ggPSAyLAogICAgUFJfUFJJT1JJ VFlfVVJHRU5UID0gMywKICAgIFBSX1BSSU9SSVRZX0xBU1QgPSAzCn0gUFJUaHJlYWRQcmlvcml0 eTsKIyAxMTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVh ZC5oIgpleHRlcm4gUFJUaHJlYWQqIFBSX0NyZWF0ZVRocmVhZChQUlRocmVhZFR5cGUgdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICpzdGFydCkodm9pZCAqYXJnKSwKICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqYXJnLAogICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFByaW9y aXR5IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFNjb3BlIHNjb3BlLAog ICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFN0YXRlIHN0YXRlLAogICAgICAgICAgICAgICAg ICAgICBQUlVpbnQzMiBzdGFja1NpemUpOwojIDEzOSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Kb2luVGhyZWFk KFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKCmV4dGVybiBQUlRocmVhZCogUFJfR2V0Q3VycmVudFRo cmVhZCh2b2lkKTsKCgoKCgpleHRlcm4gUFJUaHJlYWRQcmlvcml0eSBQUl9HZXRUaHJlYWRQcmlv cml0eShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCgoKCmV4dGVybiB2b2lkIFBSX1NldFRocmVh ZFByaW9yaXR5KFBSVGhyZWFkICp0aHJlYWQsIFBSVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOwoj IDE4MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgi CnR5cGVkZWYgdm9pZCAoICpQUlRocmVhZFByaXZhdGVEVE9SKSh2b2lkICpwcml2KTsKCmV4dGVy biBQUlN0YXR1cyBQUl9OZXdUaHJlYWRQcml2YXRlSW5kZXgoCiAgICBQUlVpbnRuICpuZXdJbmRl eCwgUFJUaHJlYWRQcml2YXRlRFRPUiBkZXN0cnVjdG9yKTsKIyAxOTggIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJf U2V0VGhyZWFkUHJpdmF0ZShQUlVpbnRuIHRwZEluZGV4LCB2b2lkICpwcml2KTsKIyAyMDkgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4g dm9pZCogUFJfR2V0VGhyZWFkUHJpdmF0ZShQUlVpbnRuIHRwZEluZGV4KTsKIyAyMjEgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJT dGF0dXMgUFJfSW50ZXJydXB0KFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKCmV4dGVybiB2b2lkIFBS X0NsZWFySW50ZXJydXB0KHZvaWQpOwoKCgoKZXh0ZXJuIHZvaWQgUFJfQmxvY2tJbnRlcnJ1cHQo dm9pZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9VbmJsb2NrSW50ZXJydXB0KHZvaWQpOwojIDI0NiAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9TbGVlcChQUkludGVydmFsVGltZSB0aWNrcyk7CgoKCgpleHRlcm4gUFJU aHJlYWRTY29wZSBQUl9HZXRUaHJlYWRTY29wZShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCgoK CmV4dGVybiBQUlRocmVhZFR5cGUgUFJfR2V0VGhyZWFkVHlwZShjb25zdCBQUlRocmVhZCAqdGhy ZWFkKTsKCgoKCmV4dGVybiBQUlRocmVhZFN0YXRlIFBSX0dldFRocmVhZFN0YXRlKGNvbnN0IFBS VGhyZWFkICp0aHJlYWQpOwoKfQojIDIzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpbml0LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmluaXQuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcndpbjE2LmgiIDEKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByaW5pdC5oIiAyCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGli L2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjYgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIgMgoKZXh0ZXJuICJDIiB7CiMg NjkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKdHlw ZWRlZiBQUkJvb2wgKCpQUlZlcnNpb25DaGVjaykoY29uc3QgY2hhciopOwojIDc5ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbml0LmgiCmV4dGVybiBQUkJvb2wg UFJfVmVyc2lvbkNoZWNrKGNvbnN0IGNoYXIgKmltcG9ydGVkVmVyc2lvbik7CiMgOTIgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKZXh0ZXJuIHZvaWQg UFJfSW5pdCgKICAgIFBSVGhyZWFkVHlwZSB0eXBlLCBQUlRocmVhZFByaW9yaXR5IHByaW9yaXR5 LCBQUlVpbnRuIG1heFBURHMpOwojIDExMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW5pdC5oIgp0eXBlZGVmIFBSSW50biAoICpQUlByaW1vcmRpYWxGbikoUFJJ bnRuIGFyZ2MsIGNoYXIgKiphcmd2KTsKCmV4dGVybiBQUkludG4gUFJfSW5pdGlhbGl6ZSgKICAg IFBSUHJpbW9yZGlhbEZuIHBybWFpbiwgUFJJbnRuIGFyZ2MsIGNoYXIgKiphcmd2LCBQUlVpbnRu IG1heFBURHMpOwoKCgoKZXh0ZXJuIFBSQm9vbCBQUl9Jbml0aWFsaXplZCh2b2lkKTsKIyAxMzkg Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKZXh0ZXJu IFBSU3RhdHVzIFBSX0NsZWFudXAodm9pZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRGlzYWJsZUNs b2NrSW50ZXJydXB0cyh2b2lkKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9FbmFibGVDbG9ja0ludGVy cnVwdHModm9pZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfQmxvY2tDbG9ja0ludGVycnVwdHModm9p ZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfVW5ibG9ja0Nsb2NrSW50ZXJydXB0cyh2b2lkKTsKCgoK CmV4dGVybiB2b2lkIFBSX1NldENvbmN1cnJlbmN5KFBSVWludG4gbnVtQ1BVcyk7CgoKCgoKCmV4 dGVybiBQUlN0YXR1cyBQUl9TZXRGRENhY2hlU2l6ZShQUkludG4gbG93LCBQUkludG4gaGlnaCk7 CgoKCgoKCmV4dGVybiB2b2lkIFBSX1Byb2Nlc3NFeGl0KFBSSW50biBzdGF0dXMpOwoKCgoKCgpl eHRlcm4gdm9pZCBQUl9BYm9ydCh2b2lkKTsKIyAxOTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJDYWxsT25jZVR5cGUg ewogICAgUFJJbnRuIGluaXRpYWxpemVkOwogICAgUFJJbnQzMiBpblByb2dyZXNzOwogICAgUFJT dGF0dXMgc3RhdHVzOwp9IFBSQ2FsbE9uY2VUeXBlOwoKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNh bGxPbmNlRk4pKHZvaWQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0NhbGxPbmNlKAogICAgUFJDYWxs T25jZVR5cGUgKm9uY2UsCiAgICBQUkNhbGxPbmNlRk4gZnVuYwopOwoKCn0KIyAzMiAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzMgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjkgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCiMgMSAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIiAxCiMgMzAgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMSAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgojIDEgIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzIgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDEKIyAzMyAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgoKZXh0ZXJuICJDIiB7CgoKdHlw ZWRlZiBzdHJ1Y3QgUFJEaXIgUFJEaXI7CnR5cGVkZWYgc3RydWN0IFBSRGlyRW50cnkgUFJEaXJF bnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlRGVzYyBQUkZpbGVEZXNjOwp0eXBlZGVmIHN0cnVj dCBQUkZpbGVJbmZvIFBSRmlsZUluZm87CnR5cGVkZWYgc3RydWN0IFBSRmlsZUluZm82NCBQUkZp bGVJbmZvNjQ7CnR5cGVkZWYgdW5pb24gUFJOZXRBZGRyIFBSTmV0QWRkcjsKdHlwZWRlZiBzdHJ1 Y3QgUFJJT01ldGhvZHMgUFJJT01ldGhvZHM7CnR5cGVkZWYgc3RydWN0IFBSUG9sbERlc2MgUFJQ b2xsRGVzYzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlUHJpdmF0ZSBQUkZpbGVQcml2YXRlOwp0eXBl ZGVmIHN0cnVjdCBQUlNlbmRGaWxlRGF0YSBQUlNlbmRGaWxlRGF0YTsKIyA1OSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBQUkludG4gUFJE ZXNjSWRlbnRpdHk7CgpzdHJ1Y3QgUFJGaWxlRGVzYyB7CiAgICBjb25zdCBQUklPTWV0aG9kcyAq bWV0aG9kczsKICAgIFBSRmlsZVByaXZhdGUgKnNlY3JldDsKICAgIFBSRmlsZURlc2MgKmxvd2Vy LCAqaGlnaGVyOwogICAgdm9pZCAoICpkdG9yKShQUkZpbGVEZXNjICpmZCk7CgogICAgUFJEZXNj SWRlbnRpdHkgaWRlbnRpdHk7Cn07CiMgNzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlRyYW5zbWl0RmlsZUZsYWdzIHsKICAg IFBSX1RSQU5TTUlURklMRV9LRUVQX09QRU4gPSAwLAoKICAgIFBSX1RSQU5TTUlURklMRV9DTE9T RV9TT0NLRVQgPSAxCgp9IFBSVHJhbnNtaXRGaWxlRmxhZ3M7CiMgMTMyICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpzdHJ1Y3QgUFJJUHY2QWRkciB7CiAg ICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgUFJVaW50OCBfUzZfdThbMTZdOwogICAgICAg ICAgICAgICAgUFJVaW50MTYgX1M2X3UxNls4XTsKICAgICAgICAgICAgICAgIFBSVWludDMyIF9T Nl91MzJbNF07CiAgICAgICAgICAgICAgICBQUlVpbnQ2NCBfUzZfdTY0WzJdOwogICAgICAgIH0g X1M2X3VuOwp9OwoKCgoKCnR5cGVkZWYgc3RydWN0IFBSSVB2NkFkZHIgUFJJUHY2QWRkcjsKCnVu aW9uIFBSTmV0QWRkciB7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKCgoK ICAgICAgICBjaGFyIGRhdGFbMTRdOwoKICAgIH0gcmF3OwogICAgc3RydWN0IHsKICAgICAgICBQ UlVpbnQxNiBmYW1pbHk7CiAgICAgICAgUFJVaW50MTYgcG9ydDsKICAgICAgICBQUlVpbnQzMiBp cDsKCgoKICAgICAgICBjaGFyIHBhZFs4XTsKCiAgICB9IGluZXQ7CiAgICBzdHJ1Y3QgewogICAg ICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWlu dDMyIGZsb3dpbmZvOwogICAgICAgIFBSSVB2NkFkZHIgaXA7CiAgICAgICAgUFJVaW50MzIgc2Nv cGVfaWQ7CiAgICB9IGlwdjY7CgogICAgc3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7 CiAgICAgICAgY2hhciBwYXRoWzEwNF07CiAgICB9IGxvY2FsOwoKfTsKIyAxOTAgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlNv Y2tPcHRpb24KewogICAgUFJfU29ja09wdF9Ob25ibG9ja2luZywKICAgIFBSX1NvY2tPcHRfTGlu Z2VyLAogICAgUFJfU29ja09wdF9SZXVzZWFkZHIsCiAgICBQUl9Tb2NrT3B0X0tlZXBhbGl2ZSwK ICAgIFBSX1NvY2tPcHRfUmVjdkJ1ZmZlclNpemUsCiAgICBQUl9Tb2NrT3B0X1NlbmRCdWZmZXJT aXplLAoKICAgIFBSX1NvY2tPcHRfSXBUaW1lVG9MaXZlLAogICAgUFJfU29ja09wdF9JcFR5cGVP ZlNlcnZpY2UsCgogICAgUFJfU29ja09wdF9BZGRNZW1iZXIsCiAgICBQUl9Tb2NrT3B0X0Ryb3BN ZW1iZXIsCiAgICBQUl9Tb2NrT3B0X01jYXN0SW50ZXJmYWNlLAogICAgUFJfU29ja09wdF9NY2Fz dFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X01jYXN0TG9vcGJhY2ssCgogICAgUFJfU29ja09w dF9Ob0RlbGF5LAogICAgUFJfU29ja09wdF9NYXhTZWdtZW50LAogICAgUFJfU29ja09wdF9Ccm9h ZGNhc3QsCiAgICBQUl9Tb2NrT3B0X0xhc3QKfSBQUlNvY2tPcHRpb247Cgp0eXBlZGVmIHN0cnVj dCBQUkxpbmdlciB7CiAgICAgICAgUFJCb29sIHBvbGFyaXR5OwogICAgICAgIFBSSW50ZXJ2YWxU aW1lIGxpbmdlcjsKfSBQUkxpbmdlcjsKCnR5cGVkZWYgc3RydWN0IFBSTWNhc3RSZXF1ZXN0IHsK ICAgICAgICBQUk5ldEFkZHIgbWNhZGRyOwogICAgICAgIFBSTmV0QWRkciBpZmFkZHI7Cn0gUFJN Y2FzdFJlcXVlc3Q7Cgp0eXBlZGVmIHN0cnVjdCBQUlNvY2tldE9wdGlvbkRhdGEKewogICAgUFJT b2NrT3B0aW9uIG9wdGlvbjsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgUFJVaW50biBpcF90dGw7 CiAgICAgICAgUFJVaW50biBtY2FzdF90dGw7CiAgICAgICAgUFJVaW50biB0b3M7CiAgICAgICAg UFJCb29sIG5vbl9ibG9ja2luZzsKICAgICAgICBQUkJvb2wgcmV1c2VfYWRkcjsKICAgICAgICBQ UkJvb2wga2VlcF9hbGl2ZTsKICAgICAgICBQUkJvb2wgbWNhc3RfbG9vcGJhY2s7CiAgICAgICAg UFJCb29sIG5vX2RlbGF5OwogICAgICAgIFBSQm9vbCBicm9hZGNhc3Q7CiAgICAgICAgUFJTaXpl IG1heF9zZWdtZW50OwogICAgICAgIFBSU2l6ZSByZWN2X2J1ZmZlcl9zaXplOwogICAgICAgIFBS U2l6ZSBzZW5kX2J1ZmZlcl9zaXplOwogICAgICAgIFBSTGluZ2VyIGxpbmdlcjsKICAgICAgICBQ Uk1jYXN0UmVxdWVzdCBhZGRfbWVtYmVyOwogICAgICAgIFBSTWNhc3RSZXF1ZXN0IGRyb3BfbWVt YmVyOwogICAgICAgIFBSTmV0QWRkciBtY2FzdF9pZjsKICAgIH0gdmFsdWU7Cn0gUFJTb2NrZXRP cHRpb25EYXRhOwojIDI1NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKdHlwZWRlZiBzdHJ1Y3QgUFJJT1ZlYyB7CiAgICBjaGFyICppb3ZfYmFzZTsKICAg IGludCBpb3ZfbGVuOwp9IFBSSU9WZWM7CgoKCgoKCnR5cGVkZWYgZW51bSBQUkRlc2NUeXBlCnsK ICAgIFBSX0RFU0NfRklMRSA9IDEsCiAgICBQUl9ERVNDX1NPQ0tFVF9UQ1AgPSAyLAogICAgUFJf REVTQ19TT0NLRVRfVURQID0gMywKICAgIFBSX0RFU0NfTEFZRVJFRCA9IDQsCiAgICBQUl9ERVND X1BJUEUgPSA1Cn0gUFJEZXNjVHlwZTsKCnR5cGVkZWYgZW51bSBQUlNlZWtXaGVuY2UgewogICAg UFJfU0VFS19TRVQgPSAwLAogICAgUFJfU0VFS19DVVIgPSAxLAogICAgUFJfU0VFS19FTkQgPSAy Cn0gUFJTZWVrV2hlbmNlOwoKZXh0ZXJuIFBSRGVzY1R5cGUgUFJfR2V0RGVzY1R5cGUoUFJGaWxl RGVzYyAqZmlsZSk7CiMgMjk5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJpby5oIgp0eXBlZGVmIFBSU3RhdHVzICggKlBSQ2xvc2VGTikoUFJGaWxlRGVzYyAqZmQp Owp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWFkRk4pKFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYs IFBSSW50MzIgYW1vdW50KTsKdHlwZWRlZiBQUkludDMyICggKlBSV3JpdGVGTikoUFJGaWxlRGVz YyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIg KCAqUFJBdmFpbGFibGVGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBSSW50NjQgKCAqUFJB dmFpbGFibGU2NEZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGc3lu Y0ZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJPZmZzZXQzMiAoICpQUlNlZWtGTikoUFJG aWxlRGVzYyAqZmQsIFBST2Zmc2V0MzIgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRl ZiBQUk9mZnNldDY0ICggKlBSU2VlazY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDY0IG9m ZnNldCwgUFJTZWVrV2hlbmNlIGhvdyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mb0ZO KShQUkZpbGVEZXNjICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAq UFJGaWxlSW5mbzY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwp0eXBl ZGVmIFBSSW50MzIgKCAqUFJXcml0ZXZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJ T1ZlYyAqaW92LCBQUkludDMyIGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7 CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJDb25uZWN0Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNv bnN0IFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJG aWxlRGVzYyogKCAqUFJBY2NlcHRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAq YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJCaW5k Rk4pKFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3Rh dHVzICggKlBSTGlzdGVuRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CnR5cGVk ZWYgUFJTdGF0dXMgKCAqUFJTaHV0ZG93bkZOKShQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGhvdyk7 CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlY3ZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgdm9pZCAq YnVmLCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGlt ZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlNlbmRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQs IGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSSW50 ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWN2ZnJvbUZOKSgKICAg IFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZs YWdzLCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBS SW50MzIgKCAqUFJTZW5kdG9GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVm LCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgY29uc3QgUFJOZXRBZGRyICphZGRy LCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDE2ICggKlBSUG9sbEZOKSgK ICAgIFBSRmlsZURlc2MgKmZkLCBQUkludDE2IGluX2ZsYWdzLCBQUkludDE2ICpvdXRfZmxhZ3Mp Owp0eXBlZGVmIFBSSW50MzIgKCAqUFJBY2NlcHRyZWFkRk4pKAogICAgUFJGaWxlRGVzYyAqc2Qs IFBSRmlsZURlc2MgKipuZCwgUFJOZXRBZGRyICoqcmFkZHIsCiAgICB2b2lkICpidWYsIFBSSW50 MzIgYW1vdW50LCBQUkludGVydmFsVGltZSB0KTsKdHlwZWRlZiBQUkludDMyICggKlBSVHJhbnNt aXRmaWxlRk4pKAogICAgIFBSRmlsZURlc2MgKnNkLCBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9p ZCAqaGVhZGVycywKICAgICBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3Ms IFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja25hbWVGTiko UFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJH ZXRwZWVybmFtZUZOKShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQ UlN0YXR1cyAoICpQUkdldHNvY2tldG9wdGlvbkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNv Y2tldE9wdGlvbkRhdGEgKmRhdGEpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSU2V0c29ja2V0b3B0 aW9uRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0 YSk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlNlbmRmaWxlRk4pKAogICAgICAgIFBSRmlsZURlc2Mg Km5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5z bWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUklu dG4gKCAqUFJSZXNlcnZlZEZOKShQUkZpbGVEZXNjICpmZCk7CgpzdHJ1Y3QgUFJJT01ldGhvZHMg ewogICAgUFJEZXNjVHlwZSBmaWxlX3R5cGU7CiAgICBQUkNsb3NlRk4gY2xvc2U7CiAgICBQUlJl YWRGTiByZWFkOwogICAgUFJXcml0ZUZOIHdyaXRlOwogICAgUFJBdmFpbGFibGVGTiBhdmFpbGFi bGU7CiAgICBQUkF2YWlsYWJsZTY0Rk4gYXZhaWxhYmxlNjQ7CiAgICBQUkZzeW5jRk4gZnN5bmM7 CiAgICBQUlNlZWtGTiBzZWVrOwogICAgUFJTZWVrNjRGTiBzZWVrNjQ7CiAgICBQUkZpbGVJbmZv Rk4gZmlsZUluZm87CiAgICBQUkZpbGVJbmZvNjRGTiBmaWxlSW5mbzY0OwogICAgUFJXcml0ZXZG TiB3cml0ZXY7CiAgICBQUkNvbm5lY3RGTiBjb25uZWN0OwogICAgUFJBY2NlcHRGTiBhY2NlcHQ7 CiAgICBQUkJpbmRGTiBiaW5kOwogICAgUFJMaXN0ZW5GTiBsaXN0ZW47CiAgICBQUlNodXRkb3du Rk4gc2h1dGRvd247CiAgICBQUlJlY3ZGTiByZWN2OwogICAgUFJTZW5kRk4gc2VuZDsKICAgIFBS UmVjdmZyb21GTiByZWN2ZnJvbTsKICAgIFBSU2VuZHRvRk4gc2VuZHRvOwogICAgUFJQb2xsRk4g cG9sbDsKICAgIFBSQWNjZXB0cmVhZEZOIGFjY2VwdHJlYWQ7CiAgICBQUlRyYW5zbWl0ZmlsZUZO IHRyYW5zbWl0ZmlsZTsKICAgIFBSR2V0c29ja25hbWVGTiBnZXRzb2NrbmFtZTsKICAgIFBSR2V0 cGVlcm5hbWVGTiBnZXRwZWVybmFtZTsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl82Owog ICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzU7CiAgICBQUkdldHNvY2tldG9wdGlvbkZOIGdl dHNvY2tldG9wdGlvbjsKCiAgICBQUlNldHNvY2tldG9wdGlvbkZOIHNldHNvY2tldG9wdGlvbjsK CiAgICBQUlNlbmRmaWxlRk4gc2VuZGZpbGU7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5f NDsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl8zOwogICAgUFJSZXNlcnZlZEZOIHJlc2Vy dmVkX2ZuXzI7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMTsKICAgIFBSUmVzZXJ2ZWRG TiByZXNlcnZlZF9mbl8wOwp9OwojIDQxMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU3BlY2lhbEZECnsKICAgIFBSX1N0YW5k YXJkSW5wdXQsCiAgICBQUl9TdGFuZGFyZE91dHB1dCwKICAgIFBSX1N0YW5kYXJkRXJyb3IKfSBQ UlNwZWNpYWxGRDsKCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9HZXRTcGVjaWFsRkQoUFJTcGVjaWFs RkQgaWQpOwojIDQ1NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldFVuaXF1ZUlkZW50aXR5KGNvbnN0IGNo YXIgKmxheWVyX25hbWUpOwpleHRlcm4gY29uc3QgY2hhciogUFJfR2V0TmFtZUZvcklkZW50aXR5 KFBSRGVzY0lkZW50aXR5IGlkZW50KTsKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldExheWVy c0lkZW50aXR5KFBSRmlsZURlc2MqIGZkKTsKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0dldElkZW50 aXRpZXNMYXllcihQUkZpbGVEZXNjKiBmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQpOwojIDQ2 OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu IGNvbnN0IFBSSU9NZXRob2RzICogUFJfR2V0RGVmYXVsdElPTWV0aG9kcyh2b2lkKTsKIyA0ODAg Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ UkZpbGVEZXNjKiBQUl9DcmVhdGVJT0xheWVyU3R1YigKICAgIFBSRGVzY0lkZW50aXR5IGlkZW50 LCBjb25zdCBQUklPTWV0aG9kcyAqbWV0aG9kcyk7CiMgNDk3ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUHVzaElPTGF5 ZXIoCiAgICBQUkZpbGVEZXNjICpmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQsIFBSRmlsZURl c2MgKmxheWVyKTsKIyA1MTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9Qb3BJT0xheWVyKFBSRmlsZURlc2MgKmZk X3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCk7CiMgNTg4ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3Blbihjb25z dCBjaGFyICpuYW1lLCBQUkludG4gZmxhZ3MsIFBSSW50biBtb2RlKTsKIyA2MTQgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNj KiBQUl9PcGVuRmlsZSgKICAgIGNvbnN0IGNoYXIgKm5hbWUsIFBSSW50biBmbGFncywgUFJJbnRu IG1vZGUpOwojIDYzNyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlKFBSRmlsZURlc2MgKmZkKTsKIyA2NzIgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUklu dDMyIFBSX1JlYWQoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwoj IDY5NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0 ZXJuIFBSSW50MzIgUFJfV3JpdGUoUFJGaWxlRGVzYyAqZmQsY29uc3Qgdm9pZCAqYnVmLFBSSW50 MzIgYW1vdW50KTsKIyA3MzAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1dyaXRldigKICAgIFBSRmlsZURlc2MgKmZkLCBj b25zdCBQUklPVmVjICppb3YsIFBSSW50MzIgaW92X3NpemUsCiAgICBQUkludGVydmFsVGltZSB0 aW1lb3V0KTsKIyA3NTEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZWxldGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCnR5 cGVkZWYgZW51bSBQUkZpbGVUeXBlCnsKICAgIFBSX0ZJTEVfRklMRSA9IDEsCiAgICBQUl9GSUxF X0RJUkVDVE9SWSA9IDIsCiAgICBQUl9GSUxFX09USEVSID0gMwp9IFBSRmlsZVR5cGU7CgpzdHJ1 Y3QgUFJGaWxlSW5mbyB7CiAgICBQUkZpbGVUeXBlIHR5cGU7CiAgICBQUk9mZnNldDMyIHNpemU7 CiAgICBQUlRpbWUgY3JlYXRpb25UaW1lOwogICAgUFJUaW1lIG1vZGlmeVRpbWU7Cn07CgpzdHJ1 Y3QgUFJGaWxlSW5mbzY0IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0NjQgc2l6 ZTsKICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKIyA3 OTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9HZXRGaWxlSW5mbyhjb25zdCBjaGFyICpmbiwgUFJGaWxlSW5mbyAqaW5m byk7CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRGaWxlSW5mbzY0KGNvbnN0IGNoYXIgKmZuLCBQUkZp bGVJbmZvNjQgKmluZm8pOwojIDgxNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldE9wZW5GaWxlSW5mbyhQUkZpbGVE ZXNjICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRPcGVuRmls ZUluZm82NChQUkZpbGVEZXNjICpmZCwgUFJGaWxlSW5mbzY0ICppbmZvKTsKIyA4MzMgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1 cyBQUl9SZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwojIDg1OSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVt IFBSQWNjZXNzSG93IHsKICAgIFBSX0FDQ0VTU19FWElTVFMgPSAxLAogICAgUFJfQUNDRVNTX1dS SVRFX09LID0gMiwKICAgIFBSX0FDQ0VTU19SRUFEX09LID0gMwp9IFBSQWNjZXNzSG93OwoKZXh0 ZXJuIFBSU3RhdHVzIFBSX0FjY2Vzcyhjb25zdCBjaGFyICpuYW1lLCBQUkFjY2Vzc0hvdyBob3cp OwojIDkwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK ZXh0ZXJuIFBST2Zmc2V0MzIgUFJfU2VlayhQUkZpbGVEZXNjICpmZCwgUFJPZmZzZXQzMiBvZmZz ZXQsIFBSU2Vla1doZW5jZSB3aGVuY2UpOwpleHRlcm4gUFJPZmZzZXQ2NCBQUl9TZWVrNjQoUFJG aWxlRGVzYyAqZmQsIFBST2Zmc2V0NjQgb2Zmc2V0LCBQUlNlZWtXaGVuY2Ugd2hlbmNlKTsKIyA5 MjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUkludDMyIFBSX0F2YWlsYWJsZShQUkZpbGVEZXNjICpmZCk7CmV4dGVybiBQUkludDY0IFBS X0F2YWlsYWJsZTY0KFBSRmlsZURlc2MgKmZkKTsKIyA5NDMgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TeW5jKFBSRmls ZURlc2MgKmZkKTsKCgoKc3RydWN0IFBSRGlyRW50cnkgewogICAgY29uc3QgY2hhciAqbmFtZTsK fTsKIyA5NzUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUkRpciogUFJfT3BlbkRpcihjb25zdCBjaGFyICpuYW1lKTsKIyAxMDAwICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0g UFJEaXJGbGFncyB7CiAgICBQUl9TS0lQX05PTkUgPSAweDAsCiAgICBQUl9TS0lQX0RPVCA9IDB4 MSwKICAgIFBSX1NLSVBfRE9UX0RPVCA9IDB4MiwKICAgIFBSX1NLSVBfQk9USCA9IDB4MywKICAg IFBSX1NLSVBfSElEREVOID0gMHg0Cn0gUFJEaXJGbGFnczsKCmV4dGVybiBQUkRpckVudHJ5KiBQ Ul9SZWFkRGlyKFBSRGlyICpkaXIsIFBSRGlyRmxhZ3MgZmxhZ3MpOwojIDEwMjcgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ Ul9DbG9zZURpcihQUkRpciAqZGlyKTsKIyAxMDQ5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTWtEaXIoY29uc3QgY2hh ciAqbmFtZSwgUFJJbnRuIG1vZGUpOwojIDEwNjEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9NYWtlRGlyKGNvbnN0IGNo YXIgKm5hbWUsIFBSSW50biBtb2RlKTsKIyAxMDgxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUm1EaXIoY29uc3QgY2hh ciAqbmFtZSk7CiMgMTEwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX05ld1VEUFNvY2tldCh2b2lkKTsKIyAxMTE5 ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g UFJGaWxlRGVzYyogUFJfTmV3VENQU29ja2V0KHZvaWQpOwojIDExMzkgIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9P cGVuVURQU29ja2V0KFBSSW50biBhZik7CiMgMTE1OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5UQ1BTb2Nr ZXQoUFJJbnRuIGFmKTsKIyAxMTgzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ29ubmVjdCgKICAgIFBSRmlsZURlc2Mg KmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDEy MTIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUlN0YXR1cyBQUl9HZXRDb25uZWN0U3RhdHVzKGNvbnN0IFBSUG9sbERlc2MgKnBkKTsKIyAx MjM2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl cm4gUFJGaWxlRGVzYyogUFJfQWNjZXB0KAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAq YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTI1OCAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0JpbmQoUFJG aWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRkciAqYWRkcik7CiMgMTI4MCAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0xp c3RlbihQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGJhY2tsb2cpOwojIDEzMDQgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlNodXRk b3duSG93CnsKICAgIFBSX1NIVVRET1dOX1JDViA9IDAsCiAgICBQUl9TSFVURE9XTl9TRU5EID0g MSwKICAgIFBSX1NIVVRET1dOX0JPVEggPSAyCn0gUFJTaHV0ZG93bkhvdzsKCmV4dGVybiBQUlN0 YXR1cyBQUl9TaHV0ZG93bihQUkZpbGVEZXNjICpmZCwgUFJTaHV0ZG93bkhvdyBob3cpOwojIDEz NDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy biBQUkludDMyIFBSX1JlY3YoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91 bnQsCiAgICAgICAgICAgICAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQp OwojIDEzNzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi CmV4dGVybiBQUkludDMyIFBSX1NlbmQoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1Ziwg UFJJbnQzMiBhbW91bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGZs YWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNDA4ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9SZWN2RnJvbSgK ICAgIFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludG4gZmxh Z3MsCiAgICBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0NDEg Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ UkludDMyIFBSX1NlbmRUbygKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpidWYsIFBS SW50MzIgYW1vdW50LCBQUkludG4gZmxhZ3MsCiAgICBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBS SW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0ODEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1RyYW5zbWl0RmlsZSgKICAg IFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSRmlsZURlc2MgKnNvdXJjZUZpbGUsCiAgICBj b25zdCB2b2lkICpoZWFkZXJzLCBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxh Z3MsCiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNTIwICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpzdHJ1Y3QgUFJTZW5kRmlsZURhdGEgewog ICAgICAgIFBSRmlsZURlc2MgKmZkOwogICAgICAgIFBSVWludDMyIGZpbGVfb2Zmc2V0OwogICAg ICAgIFBSU2l6ZSBmaWxlX25ieXRlczsKCgogICAgICAgIGNvbnN0IHZvaWQgKmhlYWRlcjsKICAg ICAgICBQUkludDMyIGhsZW47CiAgICAgICAgY29uc3Qgdm9pZCAqdHJhaWxlcjsKICAgICAgICBQ UkludDMyIHRsZW47Cn07CgoKZXh0ZXJuIFBSSW50MzIgUFJfU2VuZEZpbGUoCiAgICBQUkZpbGVE ZXNjICpuZXR3b3JrU29ja2V0LCBQUlNlbmRGaWxlRGF0YSAqc2VuZERhdGEsCiAgICAgICAgUFJU cmFuc21pdEZpbGVGbGFncyBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTU4NyAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS SW50MzIgUFJfQWNjZXB0UmVhZCgKICAgIFBSRmlsZURlc2MgKmxpc3RlblNvY2ssIFBSRmlsZURl c2MgKiphY2NlcHRlZFNvY2ssCiAgICBQUk5ldEFkZHIgKipwZWVyQWRkciwgdm9pZCAqYnVmLCBQ UkludDMyIGFtb3VudCwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTYxMSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBS X05ld1RDUFNvY2tldFBhaXIoUFJGaWxlRGVzYyAqZmRzWzJdKTsKIyAxNjMxICIvdXNyL3NyYy9t aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJf R2V0U29ja05hbWUoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7CiMgMTY1MyAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh dHVzIFBSX0dldFBlZXJOYW1lKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFkZHIgKmFkZHIpOwoKZXh0 ZXJuIFBSU3RhdHVzIFBSX0dldFNvY2tldE9wdGlvbigKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNv Y2tldE9wdGlvbkRhdGEgKmRhdGEpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFNvY2tldE9wdGlv bigKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUlNvY2tldE9wdGlvbkRhdGEgKmRhdGEpOwoj IDE2ODggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4 dGVybiBQUlN0YXR1cyBQUl9TZXRGREluaGVyaXRhYmxlKAogICAgUFJGaWxlRGVzYyAqZmQsCiAg ICBQUkJvb2wgaW5oZXJpdGFibGUpOwojIDE3MDggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjICogUFJfR2V0SW5oZXJpdGVk RkQoY29uc3QgY2hhciAqbmFtZSk7CiMgMTcxOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlTWFwIFBSRmlsZU1hcDsK CgoKCnR5cGVkZWYgZW51bSBQUkZpbGVNYXBQcm90ZWN0IHsKICAgIFBSX1BST1RfUkVBRE9OTFks CiAgICBQUl9QUk9UX1JFQURXUklURSwKICAgIFBSX1BST1RfV1JJVEVDT1BZCn0gUFJGaWxlTWFw UHJvdGVjdDsKCmV4dGVybiBQUkZpbGVNYXAgKiBQUl9DcmVhdGVGaWxlTWFwKAogICAgUFJGaWxl RGVzYyAqZmQsCiAgICBQUkludDY0IHNpemUsCiAgICBQUkZpbGVNYXBQcm90ZWN0IHByb3QpOwoK ZXh0ZXJuIHZvaWQgKiBQUl9NZW1NYXAoCiAgICBQUkZpbGVNYXAgKmZtYXAsCiAgICBQUk9mZnNl dDY0IG9mZnNldCwKICAgIFBSVWludDMyIGxlbik7CgpleHRlcm4gUFJTdGF0dXMgUFJfTWVtVW5t YXAodm9pZCAqYWRkciwgUFJVaW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9DbG9zZUZp bGVNYXAoUFJGaWxlTWFwICpmbWFwKTsKIyAxNzU2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ3JlYXRlUGlwZSgKICAg IFBSRmlsZURlc2MgKipyZWFkUGlwZSwKICAgIFBSRmlsZURlc2MgKip3cml0ZVBpcGUKKTsKCgoK CgpzdHJ1Y3QgUFJQb2xsRGVzYyB7CiAgICBQUkZpbGVEZXNjKiBmZDsKICAgIFBSSW50MTYgaW5f ZmxhZ3M7CiAgICBQUkludDE2IG91dF9mbGFnczsKfTsKIyAxODMyICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Qb2xsKAog ICAgUFJQb2xsRGVzYyAqcGRzLCBQUkludG4gbnBkcywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7 CiMgMTg3NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK ZXh0ZXJuIFBSRmlsZURlc2MgKiBQUl9OZXdQb2xsYWJsZUV2ZW50KHZvaWQpOwoKZXh0ZXJuIFBS U3RhdHVzIFBSX0Rlc3Ryb3lQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsKCmV4dGVy biBQUlN0YXR1cyBQUl9TZXRQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsKCmV4dGVy biBQUlN0YXR1cyBQUl9XYWl0Rm9yUG9sbGFibGVFdmVudChQUkZpbGVEZXNjICpldmVudCk7Cgp9 CiMgMzQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIK IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNzZW0uaCIg MQojIDQwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNzZW0u aCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o IiAxCiMgNDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3Nl bS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8u aCIgMQojIDQyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNz ZW0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJTZW0gUFJTZW07CiMg NzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3NlbS5oIgpl eHRlcm4gUFJTZW0gKiBQUl9PcGVuU2VtYXBob3JlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJ bnRuIGZsYWdzLCBQUkludG4gbW9kZSwgUFJVaW50biB2YWx1ZSk7CiMgODYgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3NlbS5oIgpleHRlcm4gUFJTdGF0dXMg UFJfV2FpdFNlbWFwaG9yZShQUlNlbSAqc2VtKTsKCgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9Q b3N0U2VtYXBob3JlKFBSU2VtICpzZW0pOwoKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3Nl U2VtYXBob3JlKFBSU2VtICpzZW0pOwoKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0RlbGV0ZVNl bWFwaG9yZShjb25zdCBjaGFyICpuYW1lKTsKCn0KIyAzNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIgMQojIDI1ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1 Y3QgUFJMaWJyYXJ5IFBSTGlicmFyeTsKCnR5cGVkZWYgc3RydWN0IFBSU3RhdGljTGlua1RhYmxl IHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB2b2lkICgqZnApKCk7Cn0gUFJTdGF0aWNMaW5r VGFibGU7CiMgNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxp bmsuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldExpYnJhcnlQYXRoKGNvbnN0IGNoYXIgKnBhdGgp OwojIDUzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgi CmV4dGVybiBjaGFyKiBQUl9HZXRMaWJyYXJ5UGF0aCh2b2lkKTsKIyA2NiAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0 TGlicmFyeU5hbWUoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpsaWIpOwoKCgoKCmV4dGVy biB2b2lkIFBSX0ZyZWVMaWJyYXJ5TmFtZShjaGFyICptZW0pOwojIDg2ICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkqIFBS X0xvYWRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUpOwojIDEwNyAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgp0eXBlZGVmIGVudW0gUFJMaWJTcGVjVHlw ZSB7CiAgICBQUl9MaWJTcGVjX1BhdGhuYW1lLAogICAgUFJfTGliU3BlY19NYWNOYW1lZEZyYWdt ZW50LAogICAgUFJfTGliU3BlY19NYWNJbmRleGVkRnJhZ21lbnQKfSBQUkxpYlNwZWNUeXBlOwoK c3RydWN0IEZTU3BlYzsKCnR5cGVkZWYgc3RydWN0IFBSTGliU3BlYyB7CiAgICBQUkxpYlNwZWNU eXBlIHR5cGU7CiAgICB1bmlvbiB7CgogICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lOwoKCiAg ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgY29uc3Qgc3RydWN0IEZTU3BlYyAqZnNzcGVjOwog ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIH0gbWFjX25hbWVkX2ZyYWdtZW50 OwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgY29uc3Qgc3RydWN0IEZTU3BlYyAqZnNz cGVjOwogICAgICAgICAgICBQUlVpbnQzMiBpbmRleDsKICAgICAgICB9IG1hY19pbmRleGVkX2Zy YWdtZW50OwogICAgfSB2YWx1ZTsKfSBQUkxpYlNwZWM7CiMgMTUwICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkgKgpQUl9M b2FkTGlicmFyeVdpdGhGbGFncygKICAgIFBSTGliU3BlYyBsaWJTcGVjLAogICAgUFJJbnRuIGZs YWdzCik7CiMgMTY1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJs aW5rLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9VbmxvYWRMaWJyYXJ5KFBSTGlicmFyeSAqbGliKTsK IyAxNzUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIK ZXh0ZXJuIHZvaWQqIFBSX0ZpbmRTeW1ib2woUFJMaWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKm5h bWUpOwojIDE4NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGlu ay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJvbEFuZExpYnJhcnkoY29uc3QgY2hhciAqbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJMaWJyYXJ5KiAqbGliKTsKIyAyMDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZFN0YXRpY0xpYnJhcnko CiAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBQUlN0YXRpY0xpbmtUYWJsZSAqdGFibGUpOwoK fQojIDM2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAy CiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIiAx CiMgMzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIK IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIgMQoj IDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIKIyAx ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMg MjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIiAyCgpl eHRlcm4gIkMiIHsKIyAxMTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmxvZy5oIgp0eXBlZGVmIGVudW0gUFJMb2dNb2R1bGVMZXZlbCB7CiAgICBQUl9MT0dfTk9O RSA9IDAsCiAgICBQUl9MT0dfQUxXQVlTID0gMSwKICAgIFBSX0xPR19FUlJPUiA9IDIsCiAgICBQ Ul9MT0dfV0FSTklORyA9IDMsCiAgICBQUl9MT0dfREVCVUcgPSA0LAoKICAgIFBSX0xPR19OT1RJ Q0UgPSBQUl9MT0dfREVCVUcsCiAgICBQUl9MT0dfV0FSTiA9IFBSX0xPR19XQVJOSU5HLAogICAg UFJfTE9HX01JTiA9IFBSX0xPR19ERUJVRywKICAgIFBSX0xPR19NQVggPSBQUl9MT0dfREVCVUcK fSBQUkxvZ01vZHVsZUxldmVsOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBQUkxvZ01vZHVsZUluZm8g ewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIFBSTG9nTW9kdWxlTGV2ZWwgbGV2ZWw7CiAgICBz dHJ1Y3QgUFJMb2dNb2R1bGVJbmZvICpuZXh0Owp9IFBSTG9nTW9kdWxlSW5mbzsKCgoKCmV4dGVy biBQUkxvZ01vZHVsZUluZm8qIFBSX05ld0xvZ01vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKCgoK CgpleHRlcm4gUFJCb29sIFBSX1NldExvZ0ZpbGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCgoKZXh0 ZXJuIHZvaWQgUFJfU2V0TG9nQnVmZmVyaW5nKFBSSW50biBidWZmZXJfc2l6ZSk7CgoKCgoKCgpl eHRlcm4gdm9pZCBQUl9Mb2dQcmludChjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgpleHRlcm4g dm9pZCBQUl9Mb2dGbHVzaCh2b2lkKTsKIyAyMjEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmxvZy5oIgpleHRlcm4gdm9pZCBQUl9Bc3NlcnQoY29uc3QgY2hhciAq cywgY29uc3QgY2hhciAqZmlsZSwgUFJJbnRuIGxuKTsKIyAyMzUgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIgp9CiMgMzggIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDEKIyAzOSAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIiAxCiMgMjcgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BybWVtLmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2dj Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjkgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIiAyCiMgMSAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybWVtLmgiIDIKCmV4dGVybiAiQyIgewojIDQ4ICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtZW0uaCIKZXh0ZXJuIHZvaWQgKiBQUl9NYWxsb2Mo UFJVaW50MzIgc2l6ZSk7CgpleHRlcm4gdm9pZCAqIFBSX0NhbGxvYyhQUlVpbnQzMiBuZWxlbSwg UFJVaW50MzIgZWxzaXplKTsKCmV4dGVybiB2b2lkICogUFJfUmVhbGxvYyh2b2lkICpwdHIsIFBS VWludDMyIHNpemUpOwoKZXh0ZXJuIHZvaWQgUFJfRnJlZSh2b2lkICpwdHIpOwojIDEzOCAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybWVtLmgiCn0KIyA0MCAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAxCiMgNDEgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAxCiMgMjMgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCiMgMSAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMQojIDI0ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCiMgMSAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI1ICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCiMgMSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY2xpc3QuaCIgMQojIDI2ICIv dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCgpleHRl cm4gIkMiIHsKIyA1MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By bXdhaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJXYWl0R3JvdXAgUFJXYWl0R3JvdXA7CiMgNzQgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCnR5cGVkZWYg ZW51bSBQUk1XU3RhdHVzCnsKICAgIFBSX01XX1BFTkRJTkcgPSAxLAogICAgUFJfTVdfU1VDQ0VT UyA9IDAsCiAgICBQUl9NV19GQUlMVVJFID0gLTEsCiAgICBQUl9NV19USU1FT1VUID0gLTIsCiAg ICBQUl9NV19JTlRFUlJVUFQgPSAtMwp9IFBSTVdTdGF0dXM7CiMgOTAgIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCnR5cGVkZWYgc3RydWN0IFBSTWVt b3J5RGVzY3JpcHRvcgp7CiAgICB2b2lkICpzdGFydDsKICAgIFBSU2l6ZSBsZW5ndGg7Cn0gUFJN ZW1vcnlEZXNjcmlwdG9yOwojIDEwMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybXdhaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJNV2FpdENsaWVudERhdGEgUFJNV2Fp dENsaWVudERhdGE7CiMgMTIxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJtd2FpdC5oIgp0eXBlZGVmIHN0cnVjdCBQUlJlY3ZXYWl0CnsKICAgIFBSQ0xpc3QgaW50 ZXJuYWw7CgogICAgUFJGaWxlRGVzYyAqZmQ7CiAgICBQUk1XU3RhdHVzIG91dGNvbWU7CiAgICBQ UkludGVydmFsVGltZSB0aW1lb3V0OwoKICAgIFBSSW50MzIgYnl0ZXNSZWN2OwogICAgUFJNZW1v cnlEZXNjcmlwdG9yIGJ1ZmZlcjsKICAgIFBSTVdhaXRDbGllbnREYXRhICpjbGllbnQ7Cn0gUFJS ZWN2V2FpdDsKIyAxNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cm13YWl0LmgiCnR5cGVkZWYgc3RydWN0IFBSTVdhaXRFbnVtZXJhdG9yIFBSTVdhaXRFbnVtZXJh dG9yOwojIDE3NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybXdh aXQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0FkZFdhaXRGaWxlRGVzYyhQUldhaXRHcm91cCAqZ3Jv dXAsIFBSUmVjdldhaXQgKmRlc2MpOwojIDIxMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BybXdhaXQuaCIKZXh0ZXJuIFBSUmVjdldhaXQqIFBSX1dhaXRSZWN2UmVh ZHkoUFJXYWl0R3JvdXAgKmdyb3VwKTsKIyAyNDYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DYW5jZWxXYWl0Rmls ZURlc2MoUFJXYWl0R3JvdXAgKmdyb3VwLCBQUlJlY3ZXYWl0ICpkZXNjKTsKIyAyNzMgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlJl Y3ZXYWl0KiBQUl9DYW5jZWxXYWl0R3JvdXAoUFJXYWl0R3JvdXAgKmdyb3VwKTsKIyAzMDAgIi91 c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQ UldhaXRHcm91cCogUFJfQ3JlYXRlV2FpdEdyb3VwKFBSSW50MzIgc2l6ZSk7CiMgMzIzICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIgpleHRlcm4gUFJT dGF0dXMgUFJfRGVzdHJveVdhaXRHcm91cChQUldhaXRHcm91cCAqZ3JvdXApOwojIDM0NSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybXdhaXQuaCIKZXh0ZXJuIFBS TVdhaXRFbnVtZXJhdG9yKiBQUl9DcmVhdGVNV2FpdEVudW1lcmF0b3IoUFJXYWl0R3JvdXAgKmdy b3VwKTsKIyAzNjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13 YWl0LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZXN0cm95TVdhaXRFbnVtZXJhdG9yKFBSTVdhaXRF bnVtZXJhdG9yKiBlbnVtZXJhdG9yKTsKIyAzODYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlJlY3ZXYWl0KiBQUl9FbnVtZXJhdGVX YWl0R3JvdXAoCiAgICBQUk1XYWl0RW51bWVyYXRvciAqZW51bWVyYXRvciwgY29uc3QgUFJSZWN2 V2FpdCAqcHJldmlvdXMpOwoKfQojIDQyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BybmV0ZGIuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJuZXRkYi5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1 ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybmV0ZGIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAyNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybmV0ZGIuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gUFJTdGF0 dXMgUFJfU3RyaW5nVG9OZXRBZGRyKAogICAgY29uc3QgY2hhciAqc3RyaW5nLCBQUk5ldEFkZHIg KmFkZHIpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX05ldEFkZHJUb1N0cmluZygKICAgIGNvbnN0IFBS TmV0QWRkciAqYWRkciwgY2hhciAqc3RyaW5nLCBQUlVpbnQzMiBzaXplKTsKIyA0OSAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKdHlwZWRlZiBzdHJ1 Y3QgUFJIb3N0RW50IHsKICAgIGNoYXIgKmhfbmFtZTsKICAgIGNoYXIgKipoX2FsaWFzZXM7CgoK CgogICAgUFJJbnQzMiBoX2FkZHJ0eXBlOwogICAgUFJJbnQzMiBoX2xlbmd0aDsKCiAgICBjaGFy ICoqaF9hZGRyX2xpc3Q7Cn0gUFJIb3N0RW50OwojIDkwICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0SG9zdEJ5 TmFtZSgKICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjaGFyICpidWYsIFBSSW50biBidWZzaXpl LCBQUkhvc3RFbnQgKmhvc3RlbnRyeSk7CiMgMTI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0SVBOb2RlQnlO YW1lKAogICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICBQUlVpbnQxNiBhZiwKICAgIFBSSW50 biBmbGFncywKICAgIGNoYXIgKmJ1ZiwKICAgIFBSSW50biBidWZzaXplLAogICAgUFJIb3N0RW50 ICpob3N0ZW50cnkpOwojIDE1NSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BybmV0ZGIuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEhvc3RCeUFkZHIoCiAgICBjb25z dCBQUk5ldEFkZHIgKmhvc3RhZGRyLCBjaGFyICpidWYsIFBSSW50biBidWZzaXplLCBQUkhvc3RF bnQgKmhvc3RlbnRyeSk7CiMgMTg5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJJbnRuIFBSX0VudW1lcmF0ZUhvc3RFbnQoCiAgICBQ UkludG4gZW51bUluZGV4LCBjb25zdCBQUkhvc3RFbnQgKmhvc3RFbnQsIFBSVWludDE2IHBvcnQs IFBSTmV0QWRkciAqYWRkcmVzcyk7CiMgMjE0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJuZXRkYi5oIgp0eXBlZGVmIGVudW0gUFJOZXRBZGRyVmFsdWUKewogICAg UFJfSXBBZGRyTnVsbCwKICAgIFBSX0lwQWRkckFueSwKICAgIFBSX0lwQWRkckxvb3BiYWNrLAog ICAgUFJfSXBBZGRyVjRNYXBwZWQKfSBQUk5ldEFkZHJWYWx1ZTsKCmV4dGVybiBQUlN0YXR1cyBQ Ul9Jbml0aWFsaXplTmV0QWRkcigKICAgIFBSTmV0QWRkclZhbHVlIHZhbCwgUFJVaW50MTYgcG9y dCwgUFJOZXRBZGRyICphZGRyKTsKIyAyNTAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcm5ldGRiLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXROZXRBZGRyKAogICAg UFJOZXRBZGRyVmFsdWUgdmFsLCBQUlVpbnQxNiBhZiwgUFJVaW50MTYgcG9ydCwgUFJOZXRBZGRy ICphZGRyKTsKIyAyNjYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w cm5ldGRiLmgiCmV4dGVybiBQUkJvb2wgUFJfSXNOZXRBZGRyVHlwZShjb25zdCBQUk5ldEFkZHIg KmFkZHIsIFBSTmV0QWRkclZhbHVlIHZhbCk7CiMgMjgzICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gdm9pZCBQUl9Db252ZXJ0SVB2NEFk ZHJUb0lQdjYoUFJVaW50MzIgdjRhZGRyLCBQUklQdjZBZGRyICp2NmFkZHIpOwojIDMzNCAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKdHlwZWRlZiBz dHJ1Y3QgUFJQcm90b0VudCB7CiAgICBjaGFyICpwX25hbWU7CiAgICBjaGFyICoqcF9hbGlhc2Vz OwoKCgogICAgUFJJbnQzMiBwX251bTsKCn0gUFJQcm90b0VudDsKCmV4dGVybiBQUlN0YXR1cyBQ Ul9HZXRQcm90b0J5TmFtZSgKICAgIGNvbnN0IGNoYXIqIHByb3RvY29sbmFtZSwgY2hhciogYnVm ZmVyLCBQUkludDMyIGJ1ZnNpemUsIFBSUHJvdG9FbnQqIHJlc3VsdCk7CiMgMzY5ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0 dXMgUFJfR2V0UHJvdG9CeU51bWJlcigKICAgIFBSSW50MzIgcHJvdG9jb2xudW1iZXIsIGNoYXIq IGJ1ZmZlciwgUFJJbnQzMiBidWZzaXplLCBQUlByb3RvRW50KiByZXN1bHQpOwojIDM4NSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKZXh0ZXJuIFBS VWludDE2IFBSX250b2hzKFBSVWludDE2KTsKZXh0ZXJuIFBSVWludDMyIFBSX250b2hsKFBSVWlu dDMyKTsKZXh0ZXJuIFBSVWludDY0IFBSX250b2hsbChQUlVpbnQ2NCk7CmV4dGVybiBQUlVpbnQx NiBQUl9odG9ucyhQUlVpbnQxNik7CmV4dGVybiBQUlVpbnQzMiBQUl9odG9ubChQUlVpbnQzMik7 CmV4dGVybiBQUlVpbnQ2NCBQUl9odG9ubGwoUFJVaW50NjQpOwoKfQojIDQzICIvdXNyL3NyYy9t aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDEKIyAzOCAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM5ICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJwcmYuaCIgMgojIDEgIi91c3Ivc3JjL21pc2Mv bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyA0MCAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAv bGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA0MSAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDIKIyAxICIv dXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRh cmcuaCIgMSAzCiMgMTEwICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51 eC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7 CiMgNDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByZi5oIiAy CgpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIFBSVWludDMyIFBSX3NucHJpbnRmKGNoYXIgKm91 dCwgUFJVaW50MzIgb3V0bGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgoKCmV4dGVybiBj aGFyKiBQUl9zbXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgpleHRlcm4gdm9pZCBQ Ul9zbXByaW50Zl9mcmVlKGNoYXIgKm1lbSk7CiMgNzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnByZi5oIgpleHRlcm4gY2hhciogUFJfc3ByaW50Zl9hcHBlbmQo Y2hhciAqbGFzdCwgY29uc3QgY2hhciAqZm10LCAuLi4pOwojIDgwICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJwcmYuaCIKdHlwZWRlZiBQUkludG4gKCpQUlN0dWZm RnVuYykodm9pZCAqYXJnLCBjb25zdCBjaGFyICpzLCBQUlVpbnQzMiBzbGVuKTsKCmV4dGVybiBQ UlVpbnQzMiBQUl9zeHByaW50ZihQUlN0dWZmRnVuYyBmLCB2b2lkICphcmcsIGNvbnN0IGNoYXIg KmZtdCwgLi4uKTsKCgoKCmV4dGVybiBQUlVpbnQzMiBQUl9mcHJpbnRmKHN0cnVjdCBQUkZpbGVE ZXNjKiBmZCwgY29uc3QgY2hhciAqZm10LCAuLi4pOwoKCgoKZXh0ZXJuIFBSVWludDMyIFBSX3Zz bnByaW50ZihjaGFyICpvdXQsIFBSVWludDMyIG91dGxlbiwgY29uc3QgY2hhciAqZm10LCB2YV9s aXN0IGFwKTsKZXh0ZXJuIGNoYXIqIFBSX3ZzbXByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xp c3QgYXApOwpleHRlcm4gY2hhciogUFJfdnNwcmludGZfYXBwZW5kKGNoYXIgKmxhc3QsIGNvbnN0 IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CmV4dGVybiBQUlVpbnQzMiBQUl92c3hwcmludGYoUFJT dHVmZkZ1bmMgZiwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwpleHRl cm4gUFJVaW50MzIgUFJfdmZwcmludGYoc3RydWN0IFBSRmlsZURlc2MqIGZkLCBjb25zdCBjaGFy ICpmbXQsIHZhX2xpc3QgYXApOwojIDEzMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BycHJmLmgiCmV4dGVybiBQUkludDMyIFBSX3NzY2FuZihjb25zdCBjaGFyICpi dWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCn0KIyA0NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMjIgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJvY2VzLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21v emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAyCgpleHRlcm4gIkMiIHsKCgoKCgp0 eXBlZGVmIHN0cnVjdCBQUlByb2Nlc3MgUFJQcm9jZXNzOwp0eXBlZGVmIHN0cnVjdCBQUlByb2Nl c3NBdHRyIFBSUHJvY2Vzc0F0dHI7CgpleHRlcm4gUFJQcm9jZXNzQXR0ciAqIFBSX05ld1Byb2Nl c3NBdHRyKHZvaWQpOwoKZXh0ZXJuIHZvaWQgUFJfUmVzZXRQcm9jZXNzQXR0cihQUlByb2Nlc3NB dHRyICphdHRyKTsKCmV4dGVybiB2b2lkIFBSX0Rlc3Ryb3lQcm9jZXNzQXR0cihQUlByb2Nlc3NB dHRyICphdHRyKTsKCmV4dGVybiB2b2lkIFBSX1Byb2Nlc3NBdHRyU2V0U3RkaW9SZWRpcmVjdCgK ICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUlNwZWNpYWxGRCBzdGRpb0ZkLAogICAgUFJG aWxlRGVzYyAqcmVkaXJlY3RGZAopOwoKCgoKZXh0ZXJuIHZvaWQgUFJfU2V0U3RkaW9SZWRpcmVj dCgKICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUlNwZWNpYWxGRCBzdGRpb0ZkLAogICAg UFJGaWxlRGVzYyAqcmVkaXJlY3RGZAopOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1Byb2Nlc3NBdHRy U2V0Q3VycmVudERpcmVjdG9yeSgKICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBjb25zdCBj aGFyICpkaXIKKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9Qcm9jZXNzQXR0clNldEluaGVyaXRhYmxl RkQoCiAgICBQUlByb2Nlc3NBdHRyICphdHRyLAogICAgUFJGaWxlRGVzYyAqZmQsCiAgICBjb25z dCBjaGFyICpuYW1lCik7CiMgNzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnByb2Nlcy5oIgpleHRlcm4gUFJQcm9jZXNzKiBQUl9DcmVhdGVQcm9jZXNzKAogICAg Y29uc3QgY2hhciAqcGF0aCwKICAgIGNoYXIgKmNvbnN0ICphcmd2LAogICAgY2hhciAqY29uc3Qg KmVudnAsCiAgICBjb25zdCBQUlByb2Nlc3NBdHRyICphdHRyKTsKCmV4dGVybiBQUlN0YXR1cyBQ Ul9DcmVhdGVQcm9jZXNzRGV0YWNoZWQoCiAgICBjb25zdCBjaGFyICpwYXRoLAogICAgY2hhciAq Y29uc3QgKmFyZ3YsCiAgICBjaGFyICpjb25zdCAqZW52cCwKICAgIGNvbnN0IFBSUHJvY2Vzc0F0 dHIgKmF0dHIpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0RldGFjaFByb2Nlc3MoUFJQcm9jZXNzICpw cm9jZXNzKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9XYWl0UHJvY2VzcyhQUlByb2Nlc3MgKnByb2Nl c3MsIFBSSW50MzIgKmV4aXRDb2RlKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9LaWxsUHJvY2VzcyhQ UlByb2Nlc3MgKnByb2Nlc3MpOwoKfQojIDQ1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3Bycm5nLmgiIDEKIyAzMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3Bycm5nLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHlwZXMuaCIgMQojIDMxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJybmcuaCIgMgoKZXh0ZXJuICJDIiB7CiMgODAgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJuZy5oIgpleHRlcm4gUFJTaXplIFBSX0dldFJhbmRv bU5vaXNlKAogICAgdm9pZCAqYnVmLAogICAgUFJTaXplIHNpemUKKTsKCn0KIyA0NiAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIiAxCiMgMjggIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgojIDEgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bycndsb2NrLmgiIDIKCmV4dGVy biAiQyIgewojIDQwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJy d2xvY2suaCIKdHlwZWRlZiBzdHJ1Y3QgUFJSV0xvY2sgUFJSV0xvY2s7CiMgNTcgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgpleHRlcm4gUFJSV0xv Y2sqIFBSX05ld1JXTG9jayhQUlVpbnQzMiBsb2NrX3JhbmssIGNvbnN0IGNoYXIgKmxvY2tfbmFt ZSk7CiMgNjcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9j ay5oIgpleHRlcm4gdm9pZCBQUl9EZXN0cm95UldMb2NrKFBSUldMb2NrICpsb2NrKTsKIyA3NyAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bycndsb2NrLmgiCmV4dGVy biB2b2lkIFBSX1JXTG9ja19SbG9jayhQUlJXTG9jayAqbG9jayk7CiMgODcgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgpleHRlcm4gdm9pZCBQUl9S V0xvY2tfV2xvY2soUFJSV0xvY2sgKmxvY2spOwojIDk3ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJyd2xvY2suaCIKZXh0ZXJuIHZvaWQgUFJfUldMb2NrX1VubG9j ayhQUlJXTG9jayAqbG9jayk7Cgp9CiMgNDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJzaG0uaCIgMQojIDExNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3Byc2htLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHlwZXMuaCIgMQojIDExNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3Byc2htLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJpby5oIiAxCiMgMTE3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJzaG0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIHN0cnVjdCBQUlNo YXJlZE1lbW9yeSBQUlNoYXJlZE1lbW9yeTsKIyAxNjAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnNobS5oIgpleHRlcm4gUFJTaGFyZWRNZW1vcnkgKgogICAgUFJf T3BlblNoYXJlZE1lbW9yeSgKICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgIFBSU2l6 ZSBzaXplLAogICAgICAgIFBSSW50biBmbGFncywKICAgICAgICBQUkludG4gbW9kZQopOwojIDE5 NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVy biB2b2lkICoKICAgIFBSX0F0dGFjaFNoYXJlZE1lbW9yeSgKICAgICAgICBQUlNoYXJlZE1lbW9y eSAqc2htLAogICAgICAgIFBSSW50biBmbGFncwopOwojIDIyMCAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfRGV0 YWNoU2hhcmVkTWVtb3J5KAogICAgICAgIFBSU2hhcmVkTWVtb3J5ICpzaG0sCiAgICAgICAgdm9p ZCAqYWRkcgopOwojIDI0MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfQ2xvc2VTaGFyZWRNZW1vcnkoCiAgICAg ICAgUFJTaGFyZWRNZW1vcnkgKnNobQopOwojIDI2MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfRGVsZXRlU2hh cmVkTWVtb3J5KAogICAgICAgIGNvbnN0IGNoYXIgKm5hbWUKKTsKCn0KIyA0OCAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMQojIDExNSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htYS5oIgojIDEgIi91c3Ivc3JjL21p c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMTYgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAxMTcgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMTE4ICIvdXNy L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzaG1hLmgiIDIKCmV4dGVybiAi QyIgewojIDE0NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2ht YS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfT3BlbkFub25GaWxlTWFwKAogICAgY29uc3QgY2hh ciAqZGlyTmFtZSwKICAgIFBSU2l6ZSBzaXplLAogICAgUFJGaWxlTWFwUHJvdGVjdCBwcm90Cik7 CiMgMTc1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzaG1hLmgi CmV4dGVybiBQUlN0YXR1cwpQUl9Qcm9jZXNzQXR0clNldEluaGVyaXRhYmxlRmlsZU1hcCgKICAg IFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUkZpbGVNYXAgKmZtLAogICAgY29uc3QgY2hhciAq c2htbmFtZQopOwojIDIwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3Byc2htYS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfR2V0SW5oZXJpdGVkRmlsZU1hcCgKICAg IGNvbnN0IGNoYXIgKnNobW5hbWUKKTsKIyAyMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnNobWEuaCIKZXh0ZXJuIFBSU3RhdHVzClBSX0V4cG9ydEZpbGVNYXBB c1N0cmluZygKICAgIFBSRmlsZU1hcCAqZm0sCiAgICBQUlNpemUgYnVmc2l6ZSwKICAgIGNoYXIg KmJ1ZgopOwojIDI0NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By c2htYS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfSW1wb3J0RmlsZU1hcEZyb21TdHJpbmcoCiAg ICBjb25zdCBjaGFyICpmbXN0cmluZwopOwoKfQojIDQ5ICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiIDEKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzeXN0ZW0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpl eHRlcm4gY2hhciBQUl9HZXREaXJlY3RvcnlTZXBhcmF0b3Iodm9pZCk7CgoKCgoKCmV4dGVybiBj aGFyIFBSX0dldERpcmVjdG9yeVNlcGFydG9yKHZvaWQpOwoKCgp0eXBlZGVmIGVudW0gewogICAg UFJfU0lfSE9TVE5BTUUsCiAgICBQUl9TSV9TWVNOQU1FLAogICAgUFJfU0lfUkVMRUFTRSwKICAg IFBSX1NJX0FSQ0hJVEVDVFVSRQp9IFBSU3lzSW5mbzsKIyA2NSAiL3Vzci9zcmMvbWlzYy9tb3pp bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRT eXN0ZW1JbmZvKFBSU3lzSW5mbyBjbWQsIGNoYXIgKmJ1ZiwgUFJVaW50MzIgYnVmbGVuKTsKCgoK CmV4dGVybiBQUkludDMyIFBSX0dldFBhZ2VTaXplKHZvaWQpOwoKCgoKZXh0ZXJuIFBSSW50MzIg UFJfR2V0UGFnZVNoaWZ0KHZvaWQpOwoKfQojIDUwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDUyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv aW5jbHVkZS9uc3ByL3BydHBvb2wuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz dC9pbmNsdWRlL25zcHIvcHJ0cG9vbC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp c3QvaW5jbHVkZS9uc3ByL3BydHBvb2wuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjUgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJvci5oIiAxCiMgMjYgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKCgoKCgoKCmV4dGVybiAiQyIgewoK dHlwZWRlZiBzdHJ1Y3QgUFJKb2JJb0Rlc2MgewogICAgUFJGaWxlRGVzYyAqc29ja2V0OwogICAg UFJFcnJvckNvZGUgZXJyb3I7CiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0Owp9IFBSSm9iSW9E ZXNjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJUaHJlYWRQb29sIFBSVGhyZWFkUG9vbDsKdHlwZWRlZiBz dHJ1Y3QgUFJKb2IgUFJKb2I7CnR5cGVkZWYgdm9pZCAoICpQUkpvYkZuKSAodm9pZCAqYXJnKTsK CgpleHRlcm4gUFJUaHJlYWRQb29sICoKUFJfQ3JlYXRlVGhyZWFkUG9vbChQUkludDMyIGluaXRp YWxfdGhyZWFkcywgUFJJbnQzMiBtYXhfdGhyZWFkcywKICAgICAgICAgICAgICAgICAgICAgICAg ICBQUlVpbnQzMiBzdGFja3NpemUpOwoKCmV4dGVybiBQUkpvYiAqClBSX1F1ZXVlSm9iKFBSVGhy ZWFkUG9vbCAqdHBvb2wsIFBSSm9iRm4gZm4sIHZvaWQgKmFyZywgUFJCb29sIGpvaW5hYmxlKTsK CgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9SZWFkKFBSVGhyZWFkUG9vbCAqdHBvb2wsIFBS Sm9iSW9EZXNjICppb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsK CgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9Xcml0ZShQUlRocmVhZFBvb2wgKnRwb29sLCBQ UkpvYklvRGVzYyAqaW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpv aW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9BY2NlcHQoUFJUaHJlYWRQb29s ICp0cG9vbCwgUFJKb2JJb0Rlc2MgKmlvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9p ZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9D b25uZWN0KFBSVGhyZWFkUG9vbCAqdHBvb2wsIFBSSm9iSW9EZXNjICppb2QsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFBSTmV0QWRkciAqYWRkciwgUFJKb2JGbiBmbiwgdm9pZCAqIGFy ZywgUFJCb29sIGpvaW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9UaW1lcihQ UlRocmVhZFBvb2wgKnRwb29sLCBQUkludGVydmFsVGltZSB0aW1lb3V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JG biBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsKCmV4dGVybiBQUlN0YXR1cwpQUl9D YW5jZWxKb2IoUFJKb2IgKmpvYik7CgoKZXh0ZXJuIFBSU3RhdHVzClBSX0pvaW5Kb2IoUFJKb2Ig KmpvYik7CgoKZXh0ZXJuIFBSU3RhdHVzClBSX1NodXRkb3duVGhyZWFkUG9vbChQUlRocmVhZFBv b2wgKnRwb29sKTsKCgpleHRlcm4gUFJTdGF0dXMKUFJfSm9pblRocmVhZFBvb2woUFJUaHJlYWRQ b29sICp0cG9vbCk7Cgp9CiMgNTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJ0cmFjZS5oIiAxCiMgNzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnRyYWNlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIgMQojIDc4ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcHJ0cmFjZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA3OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BydHJhY2UuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDgwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p bmNsdWRlL25zcHIvcHJ0cmFjZS5oIiAyCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiB2b2lk ICogUFJUcmFjZUhhbmRsZTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVHJhY2VFbnRyeQp7CiAg ICBQUlRocmVhZCAqdGhyZWFkOwogICAgUFJUcmFjZUhhbmRsZSBoYW5kbGU7CiAgICBQUlRpbWUg dGltZTsKICAgIFBSVWludDMyIHVzZXJEYXRhWzhdOwp9IFBSVHJhY2VFbnRyeTsKCgoKCgoKdHlw ZWRlZiBlbnVtIFBSVHJhY2VPcHRpb24KewogICAgUFJUcmFjZUJ1ZlNpemUsCiAgICBQUlRyYWNl RW5hYmxlLAogICAgUFJUcmFjZURpc2FibGUsCiAgICBQUlRyYWNlU3VzcGVuZCwKICAgIFBSVHJh Y2VSZXN1bWUsCiAgICBQUlRyYWNlU3VzcGVuZFJlY29yZGluZywKICAgIFBSVHJhY2VSZXN1bWVS ZWNvcmRpbmcsCiAgICBQUlRyYWNlTG9ja0hhbmRsZXMsCiAgICBQUlRyYWNlVW5Mb2NrSGFuZGxl cywKICAgIFBSVHJhY2VTdG9wUmVjb3JkaW5nCn0gUFJUcmFjZU9wdGlvbjsKIyAxODIgIi91c3Iv c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUlRy YWNlSGFuZGxlCiAgICAgICAgUFJfQ3JlYXRlVHJhY2UoCiAgICAgICAgY29uc3QgY2hhciAqcU5h bWUsCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJOYW1lLAogICAgICAgICAgICBjb25zdCBjaGFy ICpkZXNjcmlwdGlvbgopOwojIDIxMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk ZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIHZvaWQKICAgICAgICBQUl9EZXN0cm95VHJhY2UoCiAg ICAgICAgICAgICAgICBQUlRyYWNlSGFuZGxlIGhhbmRsZQopOwojIDI0OSAiL3Vzci9zcmMvbWlz Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIHZvaWQKICAgICAg ICBQUl9UcmFjZSgKICAgICAgICBQUlRyYWNlSGFuZGxlIGhhbmRsZSwKICAgICAgICAgICAgUFJV aW50MzIgdXNlckRhdGEwLAogICAgICAgICAgICBQUlVpbnQzMiB1c2VyRGF0YTEsCiAgICAgICAg ICAgIFBSVWludDMyIHVzZXJEYXRhMiwKICAgICAgICAgICAgUFJVaW50MzIgdXNlckRhdGEzLAog ICAgICAgICAgICBQUlVpbnQzMiB1c2VyRGF0YTQsCiAgICAgICAgICAgIFBSVWludDMyIHVzZXJE YXRhNSwKICAgICAgICAgICAgUFJVaW50MzIgdXNlckRhdGE2LAogICAgICAgICAgICBQUlVpbnQz MiB1c2VyRGF0YTcKKTsKIyAzMzIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnRyYWNlLmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfU2V0VHJhY2VPcHRpb24oCiAg ICAgICAgICAgIFBSVHJhY2VPcHRpb24gY29tbWFuZCwKICAgICAgICAgICAgdm9pZCAqdmFsdWUK KTsKIyAzNjYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRyYWNl LmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfR2V0VHJhY2VPcHRpb24oCiAgICAgICAgUFJUcmFj ZU9wdGlvbiBjb21tYW5kLAogICAgICAgICAgICB2b2lkICp2YWx1ZQopOwojIDM5OCAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIFBSVHJh Y2VIYW5kbGUKICAgICAgICBQUl9HZXRUcmFjZUhhbmRsZUZyb21OYW1lKAogICAgICAgIGNvbnN0 IGNoYXIgKnFOYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKnJOYW1lCik7CiMgNDI2ICIvdXNyL3Ny Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0cmFjZS5oIgpleHRlcm4gdm9pZAog ICAgICAgIFBSX0dldFRyYWNlTmFtZUZyb21IYW5kbGUoCiAgICAgICAgUFJUcmFjZUhhbmRsZSBo YW5kbGUsCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKipxTmFtZSwKICAgICAgICAgICAgY29uc3Qg Y2hhciAqKnJOYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKipkZXNjcmlwdGlvbgopOwojIDQ2NCAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJu IFBSVHJhY2VIYW5kbGUKICAgICAgICBQUl9GaW5kTmV4dFRyYWNlUW5hbWUoCiAgICAgICAgUFJU cmFjZUhhbmRsZSBoYW5kbGUKKTsKIyA1MDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu Y2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUlRyYWNlSGFuZGxlCiAgICAgICAgUFJfRmlu ZE5leHRUcmFjZVJuYW1lKAogICAgICAgIFBSVHJhY2VIYW5kbGUgcmhhbmRsZSwKICAgICAgICBQ UlRyYWNlSGFuZGxlIHFoYW5kbGUKKTsKIyA1NTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfUmVjb3JkVHJh Y2VFbnRyaWVzKAogICAgICAgIHZvaWQKKTsKIyA2MDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUkludG4KICAgIFBSX0dldFRyYWNl RW50cmllcygKICAgICAgICBQUlRyYWNlRW50cnkgKmJ1ZmZlciwKICAgICAgICBQUkludDMyIGNv dW50LAogICAgICAgIFBSSW50MzIgKmZvdW5kCik7CiMgNjMyICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0cmFjZS5oIgp9CiMgNTQgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgNTUgIi91c3Ivc3JjL21pc2MvbW96 aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAzOCAibnNTb2Z0d2FyZVVwZGF0ZS5j cHAiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2Nr LmgiIDEKIyAzOSAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNYUElETFN0cmluZy5oIiAxCiMgOTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3Ry aW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgOTEgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnND b20uaCIgMQojIDkyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMSAi L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDkz ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMTA4ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURMU3RyaW5nIHsKcHJpdmF0ZToK ICAgIFBSVW5pY2hhciogbUJ1ZjsKICAgIFBSQm9vbCBtQnVmT3duZXI7CgogICAgUFJVbmljaGFy KiogU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpOwogICAgY29uc3QgUFJVbmljaGFyKiogU3RhcnRB c3NpZ25tZW50QnlSZWZlcmVuY2UoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExTdHJpbmcoKSA6 IG1CdWYoMCksIG1CdWZPd25lcigwKSB7fQoKICAgIH5uc1hQSURMU3RyaW5nKCk7CgoKCgogICAg b3BlcmF0b3IgY29uc3QgUFJVbmljaGFyKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CgoKCgog ICAgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CgoKCgoKICAg IHN0YXRpYyBQUlVuaWNoYXIqIENvcHkoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nKTsKCgoKCiAg ICBjbGFzcyBHZXR0ZXJDb3BpZXMgewogICAgcHJpdmF0ZToKICAgICAgICBuc1hQSURMU3RyaW5n JiBtWFBJRExTdHJpbmc7CgogICAgcHVibGljOgogICAgICAgIEdldHRlckNvcGllcyhuc1hQSURM U3RyaW5nJiBhWFBJRExTdHJpbmcpCiAgICAgICAgICAgIDogbVhQSURMU3RyaW5nKGFYUElETFN0 cmluZykge30KCiAgICAgICAgb3BlcmF0b3IgUFJVbmljaGFyKiooKSB7CiAgICAgICAgICAgIHJl dHVybiBtWFBJRExTdHJpbmcuU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpOwogICAgICAgIH0KCiAg ICAgICAgZnJpZW5kIEdldHRlckNvcGllcyBnZXR0ZXJfQ29waWVzKG5zWFBJRExTdHJpbmcmIGFY UElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJDb3BpZXM7CgoKCgog ICAgY2xhc3MgR2V0dGVyU2hhcmVzIHsKICAgIHByaXZhdGU6CiAgICAgICAgbnNYUElETFN0cmlu ZyYgbVhQSURMU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgICBHZXR0ZXJTaGFyZXMobnNYUElE TFN0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAgICAgICA6IG1YUElETFN0cmluZyhhWFBJRExT dHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIGNvbnN0IFBSVW5pY2hhcioqKCkgewogICAgICAg ICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNzaWdubWVudEJ5UmVmZXJlbmNlKCk7CiAg ICAgICAgfQoKICAgICAgICBmcmllbmQgR2V0dGVyU2hhcmVzIGdldHRlcl9TaGFyZXMobnNYUElE TFN0cmluZyYgYVhQSURMU3RyaW5nKTsKICAgIH07CgogICAgZnJpZW5kIGNsYXNzIEdldHRlclNo YXJlczsKCnByaXZhdGU6CgogICAgbnNYUElETFN0cmluZyhuc1hQSURMU3RyaW5nJiApIHt9CiAg ICB2b2lkIG9wZXJhdG9yPShuc1hQSURMU3RyaW5nJiApIHt9Cn07CgoKCgoKCmlubGluZSBuc1hQ SURMU3RyaW5nOjpHZXR0ZXJDb3BpZXMKZ2V0dGVyX0NvcGllcyhuc1hQSURMU3RyaW5nJiBhWFBJ RExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURMU3RyaW5nOjpHZXR0ZXJDb3BpZXMoYVhQSURM U3RyaW5nKTsKfQoKCgoKCmlubGluZSBuc1hQSURMU3RyaW5nOjpHZXR0ZXJTaGFyZXMKZ2V0dGVy X1NoYXJlcyhuc1hQSURMU3RyaW5nJiBhWFBJRExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURM U3RyaW5nOjpHZXR0ZXJTaGFyZXMoYVhQSURMU3RyaW5nKTsKfQoKCgppbmxpbmUKUFJCb29sCm9w ZXJhdG9yPT0oY29uc3QgUFJVbmljaGFyKiBsaHMsIGNvbnN0IG5zWFBJRExTdHJpbmcmIHJocykK ewogICAgcmV0dXJuIGxocyA9PSBzdGF0aWNfY2FzdDwgY29uc3QgUFJVbmljaGFyKiA+KHJocyk7 Cn0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBuc1hQSURMU3RyaW5nJiBsaHMsIGNv bnN0IFBSVW5pY2hhciogcmhzKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IFBSVW5p Y2hhciogPihsaHMpID09IHJoczsKfQojIDI1MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExT dHJpbmcuaCIKY2xhc3MgbnNYUElETENTdHJpbmcgewpwcml2YXRlOgogICAgY2hhciogbUJ1ZjsK ICAgIFBSQm9vbCBtQnVmT3duZXI7CgogICAgY2hhcioqIFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUo KTsKICAgIGNvbnN0IGNoYXIqKiBTdGFydEFzc2lnbm1lbnRCeVJlZmVyZW5jZSgpOwoKcHVibGlj OgoKCgogICAgbnNYUElETENTdHJpbmcoKSA6IG1CdWYoMCksIG1CdWZPd25lcigwKSB7fQoKICAg IH5uc1hQSURMQ1N0cmluZygpOwoKCgoKCiAgICBuc1hQSURMQ1N0cmluZyYgb3BlcmF0b3I9KGNv bnN0IGNoYXIqIGFTdHJpbmcpOwoKCgoKICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qg eyByZXR1cm4gZ2V0KCk7IH0KCgoKCiAgICBjb25zdCBjaGFyKiBnZXQoKSBjb25zdCB7IHJldHVy biBtQnVmOyB9CgoKCgoKICAgIHN0YXRpYyBjaGFyKiBDb3B5KGNvbnN0IGNoYXIqIGFTdHJpbmcp OwoKCgoKICAgIGNsYXNzIEdldHRlckNvcGllcyB7CiAgICBwcml2YXRlOgogICAgICAgIG5zWFBJ RExDU3RyaW5nJiBtWFBJRExTdHJpbmc7CgogICAgcHVibGljOgogICAgICAgIEdldHRlckNvcGll cyhuc1hQSURMQ1N0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAgICAgICA6IG1YUElETFN0cmlu ZyhhWFBJRExTdHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIGNoYXIqKigpIHsKICAgICAgICAg ICAgcmV0dXJuIG1YUElETFN0cmluZy5TdGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CiAgICAgICAg fQoKICAgICAgICBmcmllbmQgR2V0dGVyQ29waWVzIGdldHRlcl9Db3BpZXMobnNYUElETENTdHJp bmcmIGFYUElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJDb3BpZXM7 CgoKCgogICAgY2xhc3MgR2V0dGVyU2hhcmVzIHsKICAgIHByaXZhdGU6CiAgICAgICAgbnNYUElE TENTdHJpbmcmIG1YUElETFN0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgICAgR2V0dGVyU2hhcmVz KG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpCiAgICAgICAgICAgIDogbVhQSURMU3RyaW5n KGFYUElETFN0cmluZykge30KCiAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhcioqKCkgewogICAg ICAgICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNzaWdubWVudEJ5UmVmZXJlbmNlKCk7 CiAgICAgICAgfQoKICAgICAgICBmcmllbmQgR2V0dGVyU2hhcmVzIGdldHRlcl9TaGFyZXMobnNY UElETENTdHJpbmcmIGFYUElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0 ZXJTaGFyZXM7Cgpwcml2YXRlOgoKICAgIG5zWFBJRExDU3RyaW5nKG5zWFBJRExDU3RyaW5nJiAp IHt9CiAgICB2b2lkIG9wZXJhdG9yPShuc1hQSURMQ1N0cmluZyYgKSB7fQp9OwoKCgoKCmlubGlu ZSBuc1hQSURMQ1N0cmluZzo6R2V0dGVyQ29waWVzCmdldHRlcl9Db3BpZXMobnNYUElETENTdHJp bmcmIGFYUElETFN0cmluZykKewogICAgcmV0dXJuIG5zWFBJRExDU3RyaW5nOjpHZXR0ZXJDb3Bp ZXMoYVhQSURMU3RyaW5nKTsKfQoKCgoKCgppbmxpbmUgbnNYUElETENTdHJpbmc6OkdldHRlclNo YXJlcwpnZXR0ZXJfU2hhcmVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpCnsKICAgIHJl dHVybiBuc1hQSURMQ1N0cmluZzo6R2V0dGVyU2hhcmVzKGFYUElETFN0cmluZyk7Cn0KCgppbmxp bmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgY2hhciogbGhzLCBjb25zdCBuc1hQSURMQ1N0cmlu ZyYgcmhzKQp7CiAgICByZXR1cm4gbGhzID09IHN0YXRpY19jYXN0PCBjb25zdCBjaGFyKiA+KHJo cyk7Cn0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBuc1hQSURMQ1N0cmluZyYgbGhz LCBjb25zdCBjaGFyKiByaHMpCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3QgY2hhciog PihsaHMpID09IHJoczsKfQojIDQwICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9OU1JlZy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5o Igp0eXBlZGVmIHZvaWQgKCpucl9SZWdQYWNrQ2FsbGJhY2tGdW5jKSAodm9pZCAqdXNlckRhdGEs IGludDMyIGJ5dGVzLCBpbnQzMiB0b3RhbEJ5dGVzKTsKCnR5cGVkZWYgaW50MzIgUkVHRVJSOwp0 eXBlZGVmIGludDMyIFJLRVk7CnR5cGVkZWYgdWludDMyIFJFR0VOVU07CnR5cGVkZWYgdm9pZCAq IEhSRUc7Cgp0eXBlZGVmIHN0cnVjdCBfcmVnaW5mbwp7CiAgIHVpbnQxNiBzaXplOwogICB1aW50 MTYgZW50cnlUeXBlOwogICB1aW50MzIgZW50cnlMZW5ndGg7Cn0gUkVHSU5GTzsKIyAxMjIgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpleHRlcm4gIkMiIHsKIyAxNDMgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9OU1JlZy5oIgppbnQgTlJfUmVnU2V0QnVmZmVyU2l6ZSgKICAgICAgICAgSFJFRyBo UmVnLAogICAgICAgICBpbnQgYnVmc2l6ZQogICAgICAgKTsKIyAxNjAgIi4uLy4uL2Rpc3QvaW5j bHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnT3BlbigKICAgICAgICAgY2hhciAqZmlsZW5hbWUs CiAgICAgICAgIEhSRUcgKmhSZWcKICAgICAgICk7CiMgMTc1ICIuLi8uLi9kaXN0L2luY2x1ZGUv TlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0Nsb3NlKAogICAgICAgICBIUkVHIGhSZWcKICAgICAgICk7 CiMgMTg4ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0ZsdXNoKAog ICAgICAgICBIUkVHIGhSZWcKICAgICAgICk7CiMgMjAzICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNS ZWcuaCIKUkVHRVJSIE5SX1JlZ0lzV3JpdGFibGUoCiAgICAgICAgIEhSRUcgaFJlZwogICAgICAg KTsKClJFR0VSUiBOUl9SZWdQYWNrKAogICAgICAgICBIUkVHIGhSZWcsCiAgICAgICAgIHZvaWQg KnVzZXJEYXRhLAogICAgICAgICBucl9SZWdQYWNrQ2FsbGJhY2tGdW5jIGZuCiAgICAgICApOwoj IDIyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdTZXRVc2VybmFt ZSgKICAgICAgICAgY29uc3QgY2hhciAqbmFtZQogICAgICAgKTsKIyAyNDIgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnR2V0VW5pcXVlTmFtZSgKICAgICAgICAgSFJF RyBoUmVnLAogICAgICAgICBjaGFyKiBvdXRidWYsCiAgICAgICAgIHVpbnQzMiBidWZsZW4KICAg ICAgICk7CgoKCgoKClJFR0VSUiBOUl9SZWdHZXRVc2VybmFtZSgKICAgICAgICAgY2hhciAqKm5h bWUKICAgICAgICk7CiMgMjgxICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5S X1JlZ0FkZEtleSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAg ICAgY2hhciAqcGF0aCwKICAgICAgICAgUktFWSAqbmV3S2V5CiAgICAgICApOwojIDMwNCAiLi4v Li4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdBZGRLZXlSYXcoCiAgICAgICAg IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUsCiAg ICAgICAgIFJLRVkgKm5ld0tleQogICAgICAgKTsKIyAzMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9O U1JlZy5oIgpSRUdFUlIgTlJfUmVnRGVsZXRlS2V5KAogICAgICAgICBIUkVHIGhSZWcsCiAgICAg ICAgIFJLRVkga2V5LAogICAgICAgICBjaGFyICpwYXRoCiAgICAgICApOwojIDM0NSAiLi4vLi4v ZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdEZWxldGVLZXlSYXcoCiAgICAgICAg IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUKICAg ICAgICk7CiMgMzYzICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dl dEtleSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAgY2hh ciAqcGF0aCwKICAgICAgICAgUktFWSAqcmVzdWx0CiAgICAgICApOwojIDM4MiAiLi4vLi4vZGlz dC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdHZXRLZXlSYXcoCiAgICAgICAgIEhSRUcg aFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUsCiAgICAgICAg IFJLRVkgKnJlc3VsdAogICAgICAgKTsKIyA0MDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5o IgpSRUdFUlIgTlJfUmVnRW51bVN1YmtleXMoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAg UktFWSBrZXksCiAgICAgICAgIFJFR0VOVU0gKnN0YXRlLAogICAgICAgICBjaGFyICpidWZmZXIs CiAgICAgICAgIHVpbnQzMiBidWZzaXplLAogICAgICAgICB1aW50MzIgc3R5bGUKICAgICAgICk7 CiMgNDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dldEVudHJ5 SW5mbygKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAgY2hh ciAqbmFtZSwKICAgICAgICAgUkVHSU5GTyAqaW5mbwogICAgICAgKTsKIyA0NTQgIi4uLy4uL2Rp c3QvaW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnR2V0RW50cnlTdHJpbmcoCiAgICAgICAg IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAg ICAgIGNoYXIgKmJ1ZmZlciwKICAgICAgICAgdWludDMyIGJ1ZnNpemUKICAgICAgICk7CiMgNDc1 ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dldEVudHJ5KAogICAg ICAgICBIUkVHIGhSZWcsCiAgICAgICAgIFJLRVkga2V5LAogICAgICAgICBjaGFyICpuYW1lLAog ICAgICAgICB2b2lkICpidWZmZXIsCiAgICAgICAgIHVpbnQzMiAqc2l6ZQogICAgICAgKTsKIyA0 OTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnU2V0RW50cnlTdHJp bmcoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIg Km5hbWUsCiAgICAgICAgIGNoYXIgKmJ1ZmZlcgogICAgICAgKTsKIyA1MTcgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnU2V0RW50cnkoCiAgICAgICAgIEhSRUcgaFJl ZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgIHVpbnQx NiB0eXBlLAogICAgICAgICB2b2lkICpidWZmZXIsCiAgICAgICAgIHVpbnQzMiBzaXplCiAgICAg ICApOwojIDUzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdEZWxl dGVFbnRyeSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAg Y2hhciAqbmFtZQogICAgICAgKTsKIyA1NTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpS RUdFUlIgTlJfUmVnRW51bUVudHJpZXMoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAgUktF WSBrZXksCiAgICAgICAgIFJFR0VOVU0gKnN0YXRlLAogICAgICAgICBjaGFyICpidWZmZXIsCiAg ICAgICAgIHVpbnQzMiBidWZzaXplLAogICAgICAgICBSRUdJTkZPICppbmZvCiAgICAgICApOwoK CnZvaWQgTlJfU2h1dGRvd25SZWdpc3RyeSh2b2lkKTsKUkVHRVJSIE5SX1N0YXJ0dXBSZWdpc3Ry eSh2b2lkKTsKCgp9CiMgNDEgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlz dC9pbmNsdWRlL1ZlclJlZy5oIiAxCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9WZXJSZWcuaCIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1 ZGUvVmVyUmVnLmgiIDIKCnR5cGVkZWYgc3RydWN0IF92ZXJzaW9uCnsKICAgaW50MzIgbWFqb3I7 CiAgIGludDMyIG1pbm9yOwogICBpbnQzMiByZWxlYXNlOwogICBpbnQzMiBidWlsZDsKICAgaW50 MzIgY2hlY2s7Cn0gVkVSU0lPTjsKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKUkVHRVJSIFZSX0Ny ZWF0ZVJlZ2lzdHJ5KGNoYXIgKmluc3RhbGxhdGlvbiwgY2hhciAqcHJvZ3JhbVBhdGgsIGNoYXIg KnZlcnNpb25TdHIpOwpSRUdFUlIgVlJfU2V0UmVnRGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgp OwpSRUdFUlIgVlJfUGFja1JlZ2lzdHJ5KHZvaWQgKnVzZXJEYXRhLCBucl9SZWdQYWNrQ2FsbGJh Y2tGdW5jIHBkQ2FsbGJhY2tGdW5jdGlvbik7ClJFR0VSUiBWUl9DbG9zZSh2b2lkKTsKCgpSRUdF UlIgVlJfSW5zdGFsbChjaGFyICpjb21wb25lbnRfcGF0aCwgY2hhciAqZmlsZXBhdGgsIGNoYXIg KnZlcnNpb24sIGludCBiRGlyZWN0b3J5KTsKUkVHRVJSIFZSX1JlbW92ZShjaGFyICpjb21wb25l bnRfcGF0aCk7ClJFR0VSUiBWUl9JblJlZ2lzdHJ5KGNoYXIgKnBhdGgpOwpSRUdFUlIgVlJfVmFs aWRhdGVDb21wb25lbnQoY2hhciAqcGF0aCk7ClJFR0VSUiBWUl9FbnVtKGNoYXIgKmNvbXBvbmVu dF9wYXRoLCBSRUdFTlVNICpzdGF0ZSwgY2hhciAqYnVmZmVyLCB1aW50MzIgYnVmbGVuKTsKCgpS RUdFUlIgVlJfR2V0VmVyc2lvbihjaGFyICpjb21wb25lbnRfcGF0aCwgVkVSU0lPTiAqcmVzdWx0 KTsKUkVHRVJSIFZSX0dldFBhdGgoY2hhciAqY29tcG9uZW50X3BhdGgsIHVpbnQzMiBzaXplYnVm LCBjaGFyICpidWYpOwpSRUdFUlIgVlJfU2V0UmVmQ291bnQoY2hhciAqY29tcG9uZW50X3BhdGgs IGludCByZWZjb3VudCk7ClJFR0VSUiBWUl9HZXRSZWZDb3VudChjaGFyICpjb21wb25lbnRfcGF0 aCwgaW50ICpyZXN1bHQpOwpSRUdFUlIgVlJfR2V0RGVmYXVsdERpcmVjdG9yeShjaGFyICpjb21w b25lbnRfcGF0aCwgdWludDMyIHNpemVidWYsIGNoYXIgKmJ1Zik7ClJFR0VSUiBWUl9TZXREZWZh dWx0RGlyZWN0b3J5KGNoYXIgKmNvbXBvbmVudF9wYXRoLCBjaGFyICpkaXJlY3RvcnkpOwoKClJF R0VSUiBWUl9Vbmluc3RhbGxDcmVhdGVOb2RlKGNoYXIgKnJlZ1BhY2thZ2VOYW1lLCBjaGFyICp1 c2VyUGFja2FnZU5hbWUpOwpSRUdFUlIgVlJfVW5pbnN0YWxsQWRkRmlsZVRvTGlzdChjaGFyICpy ZWdQYWNrYWdlTmFtZSwgY2hhciAqdnJOYW1lKTsKUkVHRVJSIFZSX1VuaW5zdGFsbEZpbGVFeGlz dHNJbkxpc3QoY2hhciAqcmVnUGFja2FnZU5hbWUsIGNoYXIgKnZyTmFtZSk7ClJFR0VSUiBWUl9V bmluc3RhbGxFbnVtU2hhcmVkRmlsZXMoY2hhciAqY29tcG9uZW50X3BhdGgsIFJFR0VOVU0gKnN0 YXRlLCBjaGFyICpidWZmZXIsIHVpbnQzMiBidWZsZW4pOwpSRUdFUlIgVlJfVW5pbnN0YWxsRGVs ZXRlRmlsZUZyb21MaXN0KGNoYXIgKmNvbXBvbmVudF9wYXRoLCBjaGFyICp2ck5hbWUpOwpSRUdF UlIgVlJfVW5pbnN0YWxsRGVsZXRlU2hhcmVkRmlsZXNLZXkoY2hhciAqcmVnUGFja2FnZU5hbWUp OwpSRUdFUlIgVlJfVW5pbnN0YWxsRGVzdHJveShjaGFyICpyZWdQYWNrYWdlTmFtZSk7ClJFR0VS UiBWUl9FbnVtVW5pbnN0YWxsKFJFR0VOVU0gKnN0YXRlLCBjaGFyKiB1c2VyUGFja2FnZU5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIGxlbjEsIGNoYXIqcmVn UGFja2FnZU5hbWUsIGludDMyIGxlbjIsIFBSQm9vbCBiU2hhcmVkTGlzdCk7ClJFR0VSUiBWUl9H ZXRVbmluc3RhbGxVc2VyTmFtZShjaGFyICpyZWdQYWNrYWdlTmFtZSwgY2hhciAqb3V0YnVmLCB1 aW50MzIgYnVmbGVuKTsKCn0KIyA0MiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJRGlyZWN0b3J5U2VydmljZS5oIiAxCiMgMzMgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lEaXJlY3RvcnlTZXJ2aWNlLmgiCmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQ cm92aWRlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiYmY4Y2FiMCwgMHhk NDNhLCAweDExZDMsIHsgMHg4YywgMHhjMiwgMHgwMCwgMHg2MCwgMHg5NywgMHg5MiwgMHgyNywg MHg4YyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGUoY29uc3Qg Y2hhciAqcHJvcCwgUFJCb29sICpwZXJzaXN0YW50LCBuc0lGaWxlICoqX3JldHZhbCkgPSAwOwoK fTsKIyAxMDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEaXJlY3RvcnlTZXJ2aWNlLmgiCmNsYXNz IG5zSURpcmVjdG9yeVNlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4 NTdhNjZhNjAsIDB4ZDQzYSwgMHgxMWQzLCB7IDB4OGMsIDB4YzIsIDB4MDAsIDB4NjAsIDB4OTcs IDB4OTIsIDB4MjcsIDB4OGMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ bml0KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJQcm92aWRlcihuc0lE aXJlY3RvcnlTZXJ2aWNlUHJvdmlkZXIgKnByb3YpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg VW5yZWdpc3RlclByb3ZpZGVyKG5zSURpcmVjdG9yeVNlcnZpY2VQcm92aWRlciAqcHJvdikgPSAw OwoKfTsKIyA0MyAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNEaXJlY3RvcnlTZXJ2aWNlRGVmcy5oIiAxCiMgNDQgIm5zU29mdHdhcmVVcGRhdGUuY3Bw IiAyCgojIDEgIm5zSW5zdGFsbC5oIiAxCiMgMzAgIm5zSW5zdGFsbC5oIgojIDEgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDMxICJuc0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzIgIm5zSW5zdGFsbC5oIiAyCgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIiAxCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2Fw aS5oIgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0MSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIK IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyA0MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIKIyAxICIu Li8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIiAxCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9q c3B1YnRkLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMQojIDYzICIuLi8u Li9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxp Yi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA2NCAiLi4vLi4vZGlz dC9pbmNsdWRlL2pzdHlwZXMuaCIgMgojIDIzNSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMu aCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhdXRvY2ZnLmgiIDEKIyAyMzYgIi4uLy4uL2Rp c3QvaW5jbHVkZS9qc3R5cGVzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNvc2RlcC5o IiAxCiMgNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc29zZGVwLmgiCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL3BsYXRmb3JtLmgiIDEKIyA0MyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzb3NkZXAuaCIg MgojIDIzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMgoKCgoKZXh0ZXJuICJDIiB7 CiMgMjUxICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNo YXIgSlNVaW50ODsKdHlwZWRlZiBzaWduZWQgY2hhciBKU0ludDg7CiMgMjY0ICIuLi8uLi9kaXN0 L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEpTVWludDE2Owp0eXBl ZGVmIHNob3J0IEpTSW50MTY7CiMgMjc3ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0 eXBlZGVmIHVuc2lnbmVkIGludCBKU1VpbnQzMjsKdHlwZWRlZiBpbnQgSlNJbnQzMjsKIyAzMDIg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9qc3R5cGVzLmgiCnR5cGVkZWYgbG9uZyBKU0ludDY0Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgSlNVaW50NjQ7CiMgMzM1ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0 eXBlcy5oIgp0eXBlZGVmIGludCBKU0ludG47CnR5cGVkZWYgdW5zaWduZWQgaW50IEpTVWludG47 CiMgMzQ2ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIGRvdWJsZSBKU0Zs b2F0NjQ7CgoKCgoKCnR5cGVkZWYgc2l6ZV90IEpTU2l6ZTsKCgoKCgoKCnR5cGVkZWYgcHRyZGlm Zl90IEpTUHRyZGlmZjsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBKU1VwdHJkaWZmOwoj IDM3OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIKdHlwZWRlZiBKU0ludG4gSlNCb29s OwojIDM4OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIKdHlwZWRlZiBKU1VpbnQ4IEpT UGFja2VkQm9vbDsKCgoKCnR5cGVkZWYgbG9uZyBKU1dvcmQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBKU1V3b3JkOwoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNvdHlwZXMuaCIgMQojIDM5OCAi Li4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMgoKfQojIDQxICIuLi8uLi9kaXN0L2luY2x1 ZGUvanNwdWJ0ZC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzY29tcGF0LmgiIDEKIyA0 NCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzY29tcGF0LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L2pzdHlwZXMuaCIgMQojIDQ1ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNjb21wYXQuaCIgMgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9qc2xvbmcuaCIgMQojIDQ2ICIuLi8uLi9kaXN0L2luY2x1ZGUv anNsb25nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMQojIDQ3ICIuLi8u Li9kaXN0L2luY2x1ZGUvanNsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDY2ICIuLi8uLi9kaXN0 L2luY2x1ZGUvanNsb25nLmgiCmV4dGVybiBKU0ludDY0IEpTTExfTWF4SW50KHZvaWQpOwpleHRl cm4gSlNJbnQ2NCBKU0xMX01pbkludCh2b2lkKTsKZXh0ZXJuIEpTSW50NjQgSlNMTF9aZXJvKHZv aWQpOwojIDQzMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzbG9uZy5oIgp9CiMgNDYgIi4uLy4uL2Rp c3QvaW5jbHVkZS9qc2NvbXBhdC5oIiAyCgp0eXBlZGVmIEpTSW50biBpbnROOwp0eXBlZGVmIEpT VWludG4gdWludE47CnR5cGVkZWYgSlNVd29yZCBqc3V3b3JkOwp0eXBlZGVmIEpTV29yZCBqc3dv cmQ7CnR5cGVkZWYgZmxvYXQgZmxvYXQzMjsKIyA0MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVi dGQuaCIgMgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB1aW50MTYganNjaGFyOwp0eXBlZGVmIGlu dDMyIGpzaW50Owp0eXBlZGVmIHVpbnQzMiBqc3VpbnQ7CnR5cGVkZWYgZmxvYXQ2NCBqc2RvdWJs ZTsKdHlwZWRlZiBqc3dvcmQganN2YWw7CnR5cGVkZWYganN3b3JkIGpzaWQ7CnR5cGVkZWYgaW50 MzIganNyZWZjb3VudDsKCnR5cGVkZWYgZW51bSBKU1ZlcnNpb24gewogICAgSlNWRVJTSU9OXzFf MCA9IDEwMCwKICAgIEpTVkVSU0lPTl8xXzEgPSAxMTAsCiAgICBKU1ZFUlNJT05fMV8yID0gMTIw LAogICAgSlNWRVJTSU9OXzFfMyA9IDEzMCwKICAgIEpTVkVSU0lPTl8xXzQgPSAxNDAsCiAgICBK U1ZFUlNJT05fMV81ID0gMTUwLAogICAgSlNWRVJTSU9OX0RFRkFVTFQgPSAwLAogICAgSlNWRVJT SU9OX1VOS05PV04gPSAtMQp9IEpTVmVyc2lvbjsKCgoKCgp0eXBlZGVmIGVudW0gSlNUeXBlIHsK ICAgIEpTVFlQRV9WT0lELAogICAgSlNUWVBFX09CSkVDVCwKICAgIEpTVFlQRV9GVU5DVElPTiwK ICAgIEpTVFlQRV9TVFJJTkcsCiAgICBKU1RZUEVfTlVNQkVSLAogICAgSlNUWVBFX0JPT0xFQU4s CiAgICBKU1RZUEVfTElNSVQKfSBKU1R5cGU7CgoKdHlwZWRlZiBlbnVtIEpTQWNjZXNzTW9kZSB7 CiAgICBKU0FDQ19QUk9UTywKICAgIEpTQUNDX1BBUkVOVCwKICAgIEpTQUNDX0lNUE9SVCwKICAg IEpTQUNDX1dBVENILAogICAgSlNBQ0NfTElNSVQKfSBKU0FjY2Vzc01vZGU7CgoKCgoKdHlwZWRl ZiBlbnVtIEpTSXRlcmF0ZU9wIHsKICAgIEpTRU5VTUVSQVRFX0lOSVQsCiAgICBKU0VOVU1FUkFU RV9ORVhULAogICAgSlNFTlVNRVJBVEVfREVTVFJPWQp9IEpTSXRlcmF0ZU9wOwoKCnR5cGVkZWYg c3RydWN0IEpTQ2xhc3MgSlNDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgSlNDb25zdERvdWJsZVNwZWMg SlNDb25zdERvdWJsZVNwZWM7CnR5cGVkZWYgc3RydWN0IEpTQ29udGV4dCBKU0NvbnRleHQ7CnR5 cGVkZWYgc3RydWN0IEpTRXJyb3JSZXBvcnQgSlNFcnJvclJlcG9ydDsKdHlwZWRlZiBzdHJ1Y3Qg SlNGdW5jdGlvbiBKU0Z1bmN0aW9uOwp0eXBlZGVmIHN0cnVjdCBKU0Z1bmN0aW9uU3BlYyBKU0Z1 bmN0aW9uU3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNJZEFycmF5IEpTSWRBcnJheTsKdHlwZWRlZiBz dHJ1Y3QgSlNQcm9wZXJ0eSBKU1Byb3BlcnR5Owp0eXBlZGVmIHN0cnVjdCBKU1Byb3BlcnR5U3Bl YyBKU1Byb3BlcnR5U3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNPYmplY3QgSlNPYmplY3Q7CnR5cGVk ZWYgc3RydWN0IEpTT2JqZWN0TWFwIEpTT2JqZWN0TWFwOwp0eXBlZGVmIHN0cnVjdCBKU09iamVj dE9wcyBKU09iamVjdE9wczsKdHlwZWRlZiBzdHJ1Y3QgSlNSdW50aW1lIEpTUnVudGltZTsKdHlw ZWRlZiBzdHJ1Y3QgSlNSdW50aW1lIEpTVGFza1N0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU1Njcmlw dCBKU1NjcmlwdDsKdHlwZWRlZiBzdHJ1Y3QgSlNTdHJpbmcgSlNTdHJpbmc7CnR5cGVkZWYgc3Ry dWN0IEpTWERSU3RhdGUgSlNYRFJTdGF0ZTsKdHlwZWRlZiBzdHJ1Y3QgSlNFeGNlcHRpb25TdGF0 ZSBKU0V4Y2VwdGlvblN0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU0xvY2FsZUNhbGxiYWNrcyBKU0xv Y2FsZUNhbGxiYWNrczsKIyAxMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVk ZWYgSlNCb29sCigqIEpTUHJvcGVydHlPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg anN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CiMg MTU5ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU05l d0VudW1lcmF0ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNJdGVyYXRlT3AgZW51bV9vcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpzdGF0ZXAsIGpzaWQgKmlkcCk7CgoKCgoK dHlwZWRlZiBKU0Jvb2wKKCogSlNFbnVtZXJhdGVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg Km9iaik7CiMgMTgzICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9v bAooKiBKU1Jlc29sdmVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQp OwojIDE5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCog SlNOZXdSZXNvbHZlT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGZsYWdzLCBKU09iamVjdCAq Km9ianApOwoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpTQ29udmVydE9wKShKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLCBKU1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqc3ZhbCAqdnApOwoKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNGaW5hbGl6ZU9wKShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNTdHJpbmdG aW5hbGl6ZU9wKShKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyKTsKIyAyNDIgIi4uLy4uL2Rp c3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVkZWYgSlNPYmplY3RPcHMgKgooKiBKU0dldE9iamVj dE9wcykoSlNDb250ZXh0ICpjeCwgSlNDbGFzcyAqY2xhc3ApOwojIDI1NyAiLi4vLi4vZGlzdC9p bmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNDaGVja0FjY2Vzc09wKShKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSlNBY2Nlc3NNb2RlIG1vZGUsIGpzdmFsICp2cCk7CgoKCgoKdHlwZWRl ZiBKU0Jvb2wKKCogSlNYRFJPYmplY3RPcCkoSlNYRFJTdGF0ZSAqeGRyLCBKU09iamVjdCAqKm9i anApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU0hhc0luc3RhbmNlT3ApKEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEpTQm9vbCAqYnApOwojIDI5MCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIK dHlwZWRlZiB1aW50MzIKKCogSlNNYXJrT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos IHZvaWQgKmFyZyk7CiMgMzA4ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVm IEpTT2JqZWN0TWFwICoKKCogSlNOZXdPYmplY3RNYXBPcCkoSlNDb250ZXh0ICpjeCwganNyZWZj b3VudCBucmVmcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0 T3BzICpvcHMsIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSlNPYmplY3QgKm9iaik7CgoKCgoKdHlwZWRlZiB2b2lkCigqIEpTT2JqZWN0TWFwT3Ap KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0TWFwICptYXApOwojIDMzNyAiLi4vLi4vZGlzdC9pbmNs dWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb29rdXBQcm9wT3ApKEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBKU1Byb3BlcnR5ICoqcHJvcHAKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgY2hhciAqZmlsZSwgdWludE4gbGluZQoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiMgMzU3ICIuLi8uLi9kaXN0L2luY2x1 ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU0RlZmluZVByb3BPcCkoSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq c2lkIGlkLCBqc3ZhbCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK U1Byb3BlcnR5T3AgZ2V0dGVyLCBKU1Byb3BlcnR5T3Agc2V0dGVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnROIGF0dHJzLCBKU1Byb3BlcnR5ICoqcHJvcHApOwojIDM3 MSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNQcm9w ZXJ0eUlkT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCgoKCgoKCnR5cGVkZWYgSlNC b29sCigqIEpTQXR0cmlidXRlc09wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2lk IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHkgKnByb3As IHVpbnROICphdHRyc3ApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU0NoZWNrQWNjZXNzSWRP cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBKU0FjY2Vzc01vZGUgbW9kZSwganN2YWwgKnZwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3ApOwoKCgoKCgp0 eXBlZGVmIEpTT2JqZWN0ICoKKCogSlNPYmplY3RPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg Km9iaik7CgoKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNQcm9wZXJ0eVJlZk9wKShKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK U1Byb3BlcnR5ICpwcm9wKTsKCgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNTZXRPYmplY3RTbG90 T3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyIHNsb3QsIEpTT2JqZWN0ICpwb2JqKTsKIyA0MzUgIi4uLy4u L2Rpc3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVkZWYganN2YWwKKCogSlNHZXRSZXF1aXJlZFNs b3RPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMiBzbG90KTsKCnR5cGVkZWYgdm9pZAooKiBKU1NldFJl cXVpcmVkU2xvdE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIHNsb3QsIGpzdmFsIHYpOwoKCgp0eXBl ZGVmIEpTQm9vbAooKiBKU05hdGl2ZSkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdWlu dE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqYXJndiwganN2YWwg KnJ2YWwpOwoKCgp0eXBlZGVmIGVudW0gSlNHQ1N0YXR1cyB7CiAgICBKU0dDX0JFR0lOLAogICAg SlNHQ19FTkQsCiAgICBKU0dDX01BUktfRU5ELAogICAgSlNHQ19GSU5BTElaRV9FTkQKfSBKU0dD U3RhdHVzOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNHQ0NhbGxiYWNrKShKU0NvbnRleHQgKmN4LCBK U0dDU3RhdHVzIHN0YXR1cyk7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0JyYW5jaENhbGxiYWNrKShK U0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0KTsKCnR5cGVkZWYgdm9pZAooKiBKU0Vycm9y UmVwb3J0ZXIpKEpTQ29udGV4dCAqY3gsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JSZXBvcnQgKnJlcG9ydCk7Cgp0eXBlZGVm IHN0cnVjdCBKU0Vycm9yRm9ybWF0U3RyaW5nIHsKICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKICAg IHVpbnROIGFyZ0NvdW50Owp9IEpTRXJyb3JGb3JtYXRTdHJpbmc7Cgp0eXBlZGVmIGNvbnN0IEpT RXJyb3JGb3JtYXRTdHJpbmcgKgooKiBKU0Vycm9yQ2FsbGJhY2spKHZvaWQgKnVzZXJSZWYsIGNv bnN0IGNoYXIgKmxvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludE4gZXJyb3JOdW1iZXIpOwoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNBcmd1bWVudEZv cm1hdHRlcikoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCb29sIGZyb21KUywganN2YWwgKip2cHAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICphcHApOwoKCnR5 cGVkZWYgSlNCb29sCigqIEpTTG9jYWxlVG9VcHBlckNhc2UpKEpTQ29udGV4dCAqY3gsIEpTU3Ry aW5nICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAq cnZhbCk7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0xvY2FsZVRvTG93ZXJDYXNlKShKU0NvbnRleHQg KmN4LCBKU1N0cmluZyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganN2YWwgKnJ2YWwpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb2NhbGVDb21wYXJlKShKU0Nv bnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1N0cmluZyAq c3JjMSwgSlNTdHJpbmcgKnNyYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpzdmFsICpydmFsKTsKCn0KIyA0MyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIKCmV4 dGVybiAiQyIgewojIDE0NCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBqc3Zh bApKU19HZXROYU5WYWx1ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBqc3ZhbApKU19HZXROZWdh dGl2ZUluZmluaXR5VmFsdWUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4ganN2YWwKSlNfR2V0UG9z aXRpdmVJbmZpbml0eVZhbHVlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIGpzdmFsCkpTX0dldEVt cHR5U3RyaW5nVmFsdWUoSlNDb250ZXh0ICpjeCk7CiMgMTg5ICIuLi8uLi9kaXN0L2luY2x1ZGUv anNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19Db252ZXJ0QXJndW1lbnRzKEpTQ29udGV4dCAqY3gs IHVpbnROIGFyZ2MsIGpzdmFsICphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgLi4uKTsKCgpleHRlcm4gSlNCb29sCkpTX0NvbnZlcnRBcmd1bWVudHNWQShKU0Nv bnRleHQgKmN4LCB1aW50TiBhcmdjLCBqc3ZhbCAqYXJndiwKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CiMgMjA5ICIuLi8uLi9kaXN0L2luY2x1 ZGUvanNhcGkuaCIKZXh0ZXJuIGpzdmFsICoKSlNfUHVzaEFyZ3VtZW50cyhKU0NvbnRleHQgKmN4 LCB2b2lkICoqbWFya3AsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKCgpleHRlcm4ganN2YWwg KgpKU19QdXNoQXJndW1lbnRzVkEoSlNDb250ZXh0ICpjeCwgdm9pZCAqKm1hcmtwLCBjb25zdCBj aGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOwoKCmV4dGVybiB2b2lkCkpTX1BvcEFyZ3VtZW50cyhK U0NvbnRleHQgKmN4LCB2b2lkICptYXJrKTsKIyAyNjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2Fw aS5oIgpleHRlcm4gSlNCb29sCkpTX0FkZEFyZ3VtZW50Rm9ybWF0dGVyKEpTQ29udGV4dCAqY3gs IGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgSlNBcmd1bWVudEZv cm1hdHRlciBmb3JtYXR0ZXIpOwoKZXh0ZXJuIHZvaWQKSlNfUmVtb3ZlQXJndW1lbnRGb3JtYXR0 ZXIoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqZm9ybWF0KTsKCgoKZXh0ZXJuIEpTQm9vbApK U19Db252ZXJ0VmFsdWUoSlNDb250ZXh0ICpjeCwganN2YWwgdiwgSlNUeXBlIHR5cGUsIGpzdmFs ICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0ICpjeCwganN2 YWwgdiwgSlNPYmplY3QgKipvYmpwKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfVmFsdWVUb0Z1 bmN0aW9uKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19W YWx1ZVRvQ29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNTdHJp bmcgKgpKU19WYWx1ZVRvU3RyaW5nKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIEpT Qm9vbApKU19WYWx1ZVRvTnVtYmVyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIGpzZG91YmxlICpk cCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvRUNNQUludDMyKEpTQ29udGV4dCAqY3gs IGpzdmFsIHYsIGludDMyICppcCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvRUNNQVVp bnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCB1aW50MzIgKmlwKTsKCgoKCgoKZXh0ZXJuIEpT Qm9vbApKU19WYWx1ZVRvSW50MzIoSlNDb250ZXh0ICpjeCwganN2YWwgdiwgaW50MzIgKmlwKTsK CgoKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb1VpbnQxNihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2 LCB1aW50MTYgKmlwKTsKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb0Jvb2xlYW4oSlNDb250ZXh0 ICpjeCwganN2YWwgdiwgSlNCb29sICpicCk7CgpleHRlcm4gSlNUeXBlCkpTX1R5cGVPZlZhbHVl KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKgpKU19HZXRUeXBl TmFtZShKU0NvbnRleHQgKmN4LCBKU1R5cGUgdHlwZSk7CiMgMzM1ICIuLi8uLi9kaXN0L2luY2x1 ZGUvanNhcGkuaCIKZXh0ZXJuIEpTUnVudGltZSAqCkpTX0luaXQodWludDMyIG1heGJ5dGVzKTsK CmV4dGVybiB2b2lkCkpTX0ZpbmlzaChKU1J1bnRpbWUgKnJ0KTsKCmV4dGVybiB2b2lkCkpTX1No dXREb3duKHZvaWQpOwoKdm9pZCAqCkpTX0dldFJ1bnRpbWVQcml2YXRlKEpTUnVudGltZSAqcnQp OwoKdm9pZApKU19TZXRSdW50aW1lUHJpdmF0ZShKU1J1bnRpbWUgKnJ0LCB2b2lkICpkYXRhKTsK CgoKZXh0ZXJuIHZvaWQKSlNfQmVnaW5SZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv aWQKSlNfRW5kUmVxdWVzdChKU0NvbnRleHQgKmN4KTsKCgpleHRlcm4gdm9pZApKU19ZaWVsZFJl cXVlc3QoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4ganNyZWZjb3VudApKU19TdXNwZW5kUmVxdWVz dChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpTX1Jlc3VtZVJlcXVlc3QoSlNDb250ZXh0 ICpjeCwganNyZWZjb3VudCBzYXZlRGVwdGgpOwoKCgpleHRlcm4gdm9pZApKU19Mb2NrKEpTUnVu dGltZSAqcnQpOwoKZXh0ZXJuIHZvaWQKSlNfVW5sb2NrKEpTUnVudGltZSAqcnQpOwoKZXh0ZXJu IEpTQ29udGV4dCAqCkpTX05ld0NvbnRleHQoSlNSdW50aW1lICpydCwgc2l6ZV90IHN0YWNrQ2h1 bmtTaXplKTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lDb250ZXh0KEpTQ29udGV4dCAqY3gpOwoK ZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUNvbnRleHROb0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKSlNfRGVzdHJveUNvbnRleHRNYXliZUdDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv aWQgKgpKU19HZXRDb250ZXh0UHJpdmF0ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpT X1NldENvbnRleHRQcml2YXRlKEpTQ29udGV4dCAqY3gsIHZvaWQgKmRhdGEpOwoKZXh0ZXJuIEpT UnVudGltZSAqCkpTX0dldFJ1bnRpbWUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNDb250ZXh0 ICoKSlNfQ29udGV4dEl0ZXJhdG9yKEpTUnVudGltZSAqcnQsIEpTQ29udGV4dCAqKml0ZXJwKTsK CmV4dGVybiBKU1ZlcnNpb24KSlNfR2V0VmVyc2lvbihKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBK U1ZlcnNpb24KSlNfU2V0VmVyc2lvbihKU0NvbnRleHQgKmN4LCBKU1ZlcnNpb24gdmVyc2lvbik7 CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX1ZlcnNpb25Ub1N0cmluZyhKU1ZlcnNpb24gdmVyc2lv bik7CgpleHRlcm4gSlNWZXJzaW9uCkpTX1N0cmluZ1RvVmVyc2lvbihjb25zdCBjaGFyICpzdHJp bmcpOwojIDQyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiB1aW50MzIKSlNf R2V0T3B0aW9ucyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB1aW50MzIKSlNfU2V0T3B0aW9ucyhK U0NvbnRleHQgKmN4LCB1aW50MzIgb3B0aW9ucyk7CgpleHRlcm4gdWludDMyCkpTX1RvZ2dsZU9w dGlvbnMoSlNDb250ZXh0ICpjeCwgdWludDMyIG9wdGlvbnMpOwoKZXh0ZXJuIGNvbnN0IGNoYXIg KgpKU19HZXRJbXBsZW1lbnRhdGlvblZlcnNpb24odm9pZCk7CgpleHRlcm4gSlNPYmplY3QgKgpK U19HZXRHbG9iYWxPYmplY3QoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gdm9pZApKU19TZXRHbG9i YWxPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CiMgNDUxICIuLi8uLi9kaXN0 L2luY2x1ZGUvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19Jbml0U3RhbmRhcmRDbGFzc2VzKEpT Q29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwojIDQ2NyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pz YXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfUmVzb2x2ZVN0YW5kYXJkQ2xhc3MoSlNDb250ZXh0ICpj eCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTQm9v bCAqcmVzb2x2ZWQpOwoKZXh0ZXJuIEpTQm9vbApKU19FbnVtZXJhdGVTdGFuZGFyZENsYXNzZXMo SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CgpleHRlcm4gSlNPYmplY3QgKgpKU19HZXRT Y29wZUNoYWluKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQgKgpKU19tYWxsb2MoSlNDb250 ZXh0ICpjeCwgc2l6ZV90IG5ieXRlcyk7CgpleHRlcm4gdm9pZCAqCkpTX3JlYWxsb2MoSlNDb250 ZXh0ICpjeCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7CgpleHRlcm4gdm9pZApKU19mcmVlKEpT Q29udGV4dCAqY3gsIHZvaWQgKnApOwoKZXh0ZXJuIGNoYXIgKgpKU19zdHJkdXAoSlNDb250ZXh0 ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4ganNkb3VibGUgKgpKU19OZXdEb3VibGUoSlND b250ZXh0ICpjeCwganNkb3VibGUgZCk7CgpleHRlcm4gSlNCb29sCkpTX05ld0RvdWJsZVZhbHVl KEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wK SlNfTmV3TnVtYmVyVmFsdWUoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCwganN2YWwgKnJ2YWwp OwojIDUxNCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfQWRk Um9vdChKU0NvbnRleHQgKmN4LCB2b2lkICpycCk7CgpleHRlcm4gSlNCb29sCkpTX0FkZE5hbWVk Um9vdChKU0NvbnRleHQgKmN4LCB2b2lkICpycCwgY29uc3QgY2hhciAqbmFtZSk7CgpleHRlcm4g SlNCb29sCkpTX0FkZE5hbWVkUm9vdFJUKEpTUnVudGltZSAqcnQsIHZvaWQgKnJwLCBjb25zdCBj aGFyICpuYW1lKTsKCmV4dGVybiBKU0Jvb2wKSlNfUmVtb3ZlUm9vdChKU0NvbnRleHQgKmN4LCB2 b2lkICpycCk7CgpleHRlcm4gSlNCb29sCkpTX1JlbW92ZVJvb3RSVChKU1J1bnRpbWUgKnJ0LCB2 b2lkICpycCk7CgoKZXh0ZXJuIHZvaWQKSlNfRHVtcE5hbWVkUm9vdHMoSlNSdW50aW1lICpydCwK ICAgICAgICAgICAgICAgICAgdm9pZCAoKmR1bXApKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnJw LCB2b2lkICpkYXRhKSwKICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CiMgNTU4ICIuLi8u Li9kaXN0L2luY2x1ZGUvanNhcGkuaCIKdHlwZWRlZiBpbnROCigqIEpTR0NSb290TWFwRnVuKSh2 b2lkICpycCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7CgpleHRlcm4gdWludDMyCkpT X01hcEdDUm9vdHMoSlNSdW50aW1lICpydCwgSlNHQ1Jvb3RNYXBGdW4gbWFwLCB2b2lkICpkYXRh KTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9ja0dDVGhpbmcoSlNDb250ZXh0ICpjeCwgdm9pZCAqdGhp bmcpOwoKZXh0ZXJuIEpTQm9vbApKU19VbmxvY2tHQ1RoaW5nKEpTQ29udGV4dCAqY3gsIHZvaWQg KnRoaW5nKTsKIyA1ODMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gdm9pZApK U19NYXJrR0NUaGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZywgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqYXJnKTsKCmV4dGVybiB2b2lkCkpTX0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu IHZvaWQKSlNfTWF5YmVHQyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0dDQ2FsbGJhY2sKSlNf U2V0R0NDYWxsYmFjayhKU0NvbnRleHQgKmN4LCBKU0dDQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpT R0NDYWxsYmFjawpKU19TZXRHQ0NhbGxiYWNrUlQoSlNSdW50aW1lICpydCwgSlNHQ0NhbGxiYWNr IGNiKTsKCmV4dGVybiBKU0Jvb2wKSlNfSXNBYm91dFRvQmVGaW5hbGl6ZWQoSlNDb250ZXh0ICpj eCwgdm9pZCAqdGhpbmcpOwojIDYxMyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVy biBpbnROCkpTX0FkZEV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBm aW5hbGl6ZXIpOwojIDYyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBpbnRO CkpTX1JlbW92ZUV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBmaW5h bGl6ZXIpOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdFeHRlcm5hbFN0cmluZyhKU0Nv bnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLCBpbnROIHR5cGUpOwojIDY0 NyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCnN0cnVjdCBKU0NsYXNzIHsKICAgIGNvbnN0 IGNoYXIgKm5hbWU7CiAgICB1aW50MzIgZmxhZ3M7CgoKICAgIEpTUHJvcGVydHlPcCBhZGRQcm9w ZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBkZWxQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBnZXRQ cm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBzZXRQcm9wZXJ0eTsKICAgIEpTRW51bWVyYXRlT3Ag ZW51bWVyYXRlOwogICAgSlNSZXNvbHZlT3AgcmVzb2x2ZTsKICAgIEpTQ29udmVydE9wIGNvbnZl cnQ7CiAgICBKU0ZpbmFsaXplT3AgZmluYWxpemU7CgoKICAgIEpTR2V0T2JqZWN0T3BzIGdldE9i amVjdE9wczsKICAgIEpTQ2hlY2tBY2Nlc3NPcCBjaGVja0FjY2VzczsKICAgIEpTTmF0aXZlIGNh bGw7CiAgICBKU05hdGl2ZSBjb25zdHJ1Y3Q7CiAgICBKU1hEUk9iamVjdE9wIHhkck9iamVjdDsK ICAgIEpTSGFzSW5zdGFuY2VPcCBoYXNJbnN0YW5jZTsKICAgIEpTTWFya09wIG1hcms7CiAgICBq c3dvcmQgc3BhcmU7Cn07CiMgNjk2ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhcGkuaCIKc3RydWN0 IEpTT2JqZWN0T3BzIHsKCiAgICBKU05ld09iamVjdE1hcE9wIG5ld09iamVjdE1hcDsKICAgIEpT T2JqZWN0TWFwT3AgZGVzdHJveU9iamVjdE1hcDsKICAgIEpTTG9va3VwUHJvcE9wIGxvb2t1cFBy b3BlcnR5OwogICAgSlNEZWZpbmVQcm9wT3AgZGVmaW5lUHJvcGVydHk7CiAgICBKU1Byb3BlcnR5 SWRPcCBnZXRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlJZE9wIHNldFByb3BlcnR5OwogICAgSlNB dHRyaWJ1dGVzT3AgZ2V0QXR0cmlidXRlczsKICAgIEpTQXR0cmlidXRlc09wIHNldEF0dHJpYnV0 ZXM7CiAgICBKU1Byb3BlcnR5SWRPcCBkZWxldGVQcm9wZXJ0eTsKICAgIEpTQ29udmVydE9wIGRl ZmF1bHRWYWx1ZTsKICAgIEpTTmV3RW51bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNDaGVja0Fj Y2Vzc0lkT3AgY2hlY2tBY2Nlc3M7CgoKICAgIEpTT2JqZWN0T3AgdGhpc09iamVjdDsKICAgIEpT UHJvcGVydHlSZWZPcCBkcm9wUHJvcGVydHk7CiAgICBKU05hdGl2ZSBjYWxsOwogICAgSlNOYXRp dmUgY29uc3RydWN0OwogICAgSlNYRFJPYmplY3RPcCB4ZHJPYmplY3Q7CiAgICBKU0hhc0luc3Rh bmNlT3AgaGFzSW5zdGFuY2U7CiAgICBKU1NldE9iamVjdFNsb3RPcCBzZXRQcm90bzsKICAgIEpT U2V0T2JqZWN0U2xvdE9wIHNldFBhcmVudDsKICAgIEpTTWFya09wIG1hcms7CiAgICBKU0ZpbmFs aXplT3AgY2xlYXI7CiAgICBKU0dldFJlcXVpcmVkU2xvdE9wIGdldFJlcXVpcmVkU2xvdDsKICAg IEpTU2V0UmVxdWlyZWRTbG90T3Agc2V0UmVxdWlyZWRTbG90Owp9OwojIDczNiAiLi4vLi4vZGlz dC9pbmNsdWRlL2pzYXBpLmgiCnN0cnVjdCBKU1Byb3BlcnR5IHsKICAgIGpzaWQgaWQ7Cn07Cgpz dHJ1Y3QgSlNJZEFycmF5IHsKICAgIGpzaW50IGxlbmd0aDsKICAgIGpzaWQgdmVjdG9yWzFdOwp9 OwoKZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUlkQXJyYXkoSlNDb250ZXh0ICpjeCwgSlNJZEFycmF5 ICppZGEpOwoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvSWQoSlNDb250ZXh0ICpjeCwganN2YWwg diwganNpZCAqaWRwKTsKCmV4dGVybiBKU0Jvb2wKSlNfSWRUb1ZhbHVlKEpTQ29udGV4dCAqY3gs IGpzaWQgaWQsIGpzdmFsICp2cCk7CgoKCgpleHRlcm4gSlNCb29sCkpTX1Byb3BlcnR5U3R1YihK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwKTsKCmV4dGVy biBKU0Jvb2wKSlNfRW51bWVyYXRlU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsK CmV4dGVybiBKU0Jvb2wKSlNfUmVzb2x2ZVN0dWIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i aiwganN2YWwgaWQpOwoKZXh0ZXJuIEpTQm9vbApKU19Db252ZXJ0U3R1YihKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLCBKU1R5cGUgdHlwZSwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpT X0ZpbmFsaXplU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCnN0cnVjdCBKU0Nv bnN0RG91YmxlU3BlYyB7CiAgICBqc2RvdWJsZSBkdmFsOwogICAgY29uc3QgY2hhciAqbmFtZTsK ICAgIHVpbnQ4IGZsYWdzOwogICAgdWludDggc3BhcmVbM107Cn07CgoKCgoKCnN0cnVjdCBKU1By b3BlcnR5U3BlYyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgaW50OCB0aW55aWQ7CiAgICB1 aW50OCBmbGFnczsKICAgIEpTUHJvcGVydHlPcCBnZXR0ZXI7CiAgICBKU1Byb3BlcnR5T3Agc2V0 dGVyOwp9OwoKc3RydWN0IEpTRnVuY3Rpb25TcGVjIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAg ICBKU05hdGl2ZSBjYWxsOwogICAgdWludDggbmFyZ3M7CiAgICB1aW50OCBmbGFnczsKICAgIHVp bnQxNiBleHRyYTsKfTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0luaXRDbGFzcyhKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBKU09iamVjdCAqcGFyZW50X3Byb3RvLAogICAgICAgICAgICAg SlNDbGFzcyAqY2xhc3AsIEpTTmF0aXZlIGNvbnN0cnVjdG9yLCB1aW50TiBuYXJncywKICAgICAg ICAgICAgIEpTUHJvcGVydHlTcGVjICpwcywgSlNGdW5jdGlvblNwZWMgKmZzLAogICAgICAgICAg ICAgSlNQcm9wZXJ0eVNwZWMgKnN0YXRpY19wcywgSlNGdW5jdGlvblNwZWMgKnN0YXRpY19mcyk7 CgoKZXh0ZXJuIEpTQ2xhc3MgKgpKU19HZXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq b2JqKTsKIyA4MTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpT X0luc3RhbmNlT2YoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNDbGFzcyAqY2xhc3As IGpzdmFsICphcmd2KTsKCmV4dGVybiB2b2lkICoKSlNfR2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJpdmF0ZShKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCB2b2lkICpkYXRhKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0SW5z dGFuY2VQcml2YXRlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ2xhc3MgKmNsYXNw LAogICAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK SlNfR2V0UHJvdG90eXBlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpT Qm9vbApKU19TZXRQcm90b3R5cGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNPYmpl Y3QgKnByb3RvKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0dldFBhcmVudChKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UGFyZW50KEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmosIEpTT2JqZWN0ICpwYXJlbnQpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK SlNfR2V0Q29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnByb3RvKTsKCmV4dGVy biBKU09iamVjdCAqCkpTX05ld09iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwg SlNPYmplY3QgKnByb3RvLCBKU09iamVjdCAqcGFyZW50KTsKCmV4dGVybiBKU09iamVjdCAqCkpT X0NvbnN0cnVjdE9iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3Qg KnByb3RvLAogICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCk7CgpleHRlcm4gSlNP YmplY3QgKgpKU19EZWZpbmVPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29u c3QgY2hhciAqbmFtZSwgSlNDbGFzcyAqY2xhc3AsCiAgICAgICAgICAgICAgICBKU09iamVjdCAq cHJvdG8sIHVpbnROIGF0dHJzKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lQ29uc3REb3VibGVz KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ29uc3REb3VibGVTcGVjICpjZHMpOwoK ZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQcm9wZXJ0aWVzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0 ICpvYmosIEpTUHJvcGVydHlTcGVjICpwcyk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZVByb3Bl cnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFs IHZhbHVlLAogICAgICAgICAgICAgICAgICBKU1Byb3BlcnR5T3AgZ2V0dGVyLCBKU1Byb3BlcnR5 T3Agc2V0dGVyLCB1aW50TiBhdHRycyk7CgoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0dldFByb3Bl cnR5QXR0cmlidXRlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpu YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gKmF0dHJzcCwgSlNCb29sICpmb3Vu ZHApOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19TZXRQcm9wZXJ0eUF0dHJpYnV0ZXMoSlNDb250 ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnROIGF0dHJzLCBKU0Jvb2wgKmZvdW5kcCk7CgpleHRlcm4gSlNCb29sCkpT X0RlZmluZVByb3BlcnR5V2l0aFRpbnlJZChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBj b25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OCB0aW55aWQs IGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdl dHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnROIGF0dHJzKTsKCmV4dGVybiBKU0Jvb2wKSlNfQWxpYXNQcm9wZXJ0eShKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmFsaWFzKTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9va3VwUHJvcGVydHkoSlNDb250ZXh0 ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganN2YWwgKnZwKTsKCmV4dGVy biBKU0Jvb2wKSlNfR2V0UHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29u c3QgY2hhciAqbmFtZSwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJvcGVydHko SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganN2YWwgKnZw KTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRlUHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CgpleHRlcm4gSlNCb29sCkpTX0RlbGV0ZVByb3Bl cnR5MihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAogICAg ICAgICAgICAgICAgICAganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVVQ1By b3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAg Y29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwganN2YWwgdmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwKICAg ICAgICAgICAgICAgICAgICB1aW50TiBhdHRycyk7CgoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0dl dFVDUHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3AsIEpTQm9vbCAqZm91bmRw KTsKCgoKCgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0VUNQcm9wZXJ0eUF0dHJpYnV0ZXMoSlNDb250 ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg anNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludE4gYXR0cnMsIEpTQm9vbCAqZm91bmRwKTsKCgpleHRlcm4gSlNCb29sCkpTX0RlZmluZVVD UHJvcGVydHlXaXRoVGlueUlkKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDggdGlueWlkLCBqc3ZhbCB2YWx1ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9w ZXJ0eU9wIHNldHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gYXR0cnMp OwoKZXh0ZXJuIEpTQm9vbApKU19Mb29rdXBVQ1Byb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3Qg bmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApK U19HZXRVQ1Byb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAg ICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAg ICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRVQ1Byb3BlcnR5KEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBz aXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9v bApKU19EZWxldGVVQ1Byb3BlcnR5MihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAg ICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAg ICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNPYmplY3QgKgpKU19OZXdB cnJheU9iamVjdChKU0NvbnRleHQgKmN4LCBqc2ludCBsZW5ndGgsIGpzdmFsICp2ZWN0b3IpOwoK ZXh0ZXJuIEpTQm9vbApKU19Jc0FycmF5T2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpv YmopOwoKZXh0ZXJuIEpTQm9vbApKU19HZXRBcnJheUxlbmd0aChKU0NvbnRleHQgKmN4LCBKU09i amVjdCAqb2JqLCBqc3VpbnQgKmxlbmd0aHApOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRBcnJheUxl bmd0aChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3VpbnQgbGVuZ3RoKTsKCmV4dGVy biBKU0Jvb2wKSlNfSGFzQXJyYXlMZW5ndGgoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg anN1aW50ICpsZW5ndGhwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lRWxlbWVudChKU0NvbnRl eHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwgdmFsdWUsCiAgICAgICAg ICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwgdWludE4g YXR0cnMpOwoKZXh0ZXJuIEpTQm9vbApKU19BbGlhc0VsZW1lbnQoSlNDb250ZXh0ICpjeCwgSlNP YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganNpbnQgYWxpYXMpOwoKZXh0ZXJuIEpTQm9v bApKU19Mb29rdXBFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGlu ZGV4LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19HZXRFbGVtZW50KEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9v bApKU19TZXRFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4 LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19EZWxldGVFbGVtZW50KEpTQ29udGV4dCAq Y3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4KTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRl RWxlbWVudDIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpbnQgaW5kZXgsIGpzdmFs ICpydmFsKTsKCmV4dGVybiB2b2lkCkpTX0NsZWFyU2NvcGUoSlNDb250ZXh0ICpjeCwgSlNPYmpl Y3QgKm9iaik7CgpleHRlcm4gSlNJZEFycmF5ICoKSlNfRW51bWVyYXRlKEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpTQm9vbApKU19DaGVja0FjY2VzcyhKU0NvbnRleHQg KmN4LCBKU09iamVjdCAqb2JqLCBqc2lkIGlkLCBKU0FjY2Vzc01vZGUgbW9kZSwKICAgICAgICAg ICAgICAganN2YWwgKnZwLCB1aW50TiAqYXR0cnNwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0UmVz ZXJ2ZWRTbG90KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIHVpbnQzMiBpbmRleCwganN2 YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UmVzZXJ2ZWRTbG90KEpTQ29udGV4dCAqY3gs IEpTT2JqZWN0ICpvYmosIHVpbnQzMiBpbmRleCwganN2YWwgdik7CgoKCgoKCnR5cGVkZWYgc3Ry dWN0IEpTUHJpbmNpcGFscyB7CiAgICBjaGFyICpjb2RlYmFzZTsKICAgIHZvaWQgKigqZ2V0UHJp bmNpcGFsQXJyYXkpKEpTQ29udGV4dCAqY3gsIHN0cnVjdCBKU1ByaW5jaXBhbHMgKik7CiAgICBK U0Jvb2wgKCpnbG9iYWxQcml2aWxlZ2VzRW5hYmxlZCkoSlNDb250ZXh0ICpjeCwgc3RydWN0IEpT UHJpbmNpcGFscyAqKTsKCgogICAgdWludE4gcmVmY291bnQ7CiAgICB2b2lkICgqZGVzdHJveSko SlNDb250ZXh0ICpjeCwgc3RydWN0IEpTUHJpbmNpcGFscyAqKTsKfSBKU1ByaW5jaXBhbHM7CiMg MTA0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNf TmV3RnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNOYXRpdmUgY2FsbCwgdWludE4gbmFyZ3MsIHVp bnROIGZsYWdzLAogICAgICAgICAgICAgICBKU09iamVjdCAqcGFyZW50LCBjb25zdCBjaGFyICpu YW1lKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0dldEZ1bmN0aW9uT2JqZWN0KEpTRnVuY3Rpb24g KmZ1bik7CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX0dldEZ1bmN0aW9uTmFtZShKU0Z1bmN0aW9u ICpmdW4pOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVGdW5jdGlvbnMoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwgSlNGdW5jdGlvblNwZWMgKmZzKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoK SlNfRGVmaW5lRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hh ciAqbmFtZSwgSlNOYXRpdmUgY2FsbCwKICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIHVp bnROIGF0dHJzKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0Nsb25lRnVuY3Rpb25PYmplY3QoSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKmZ1bm9iaiwgSlNPYmplY3QgKnBhcmVudCk7CiMgMTA3NiAi Li4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfQnVmZmVySXNDb21w aWxhYmxlVW5pdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKIyAxMDg3ICIuLi8u Li9kaXN0L2luY2x1ZGUvanNhcGkuaCIKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVNjcmlw dChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZp bGVuYW1lLCB1aW50TiBsaW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVNjcmlw dEZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGxlbmd0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu byk7CgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwg SlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMsIHNp emVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWlu dE4gbGluZW5vKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVVQ1NjcmlwdEZvclByaW5j aXBhbHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5v KTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVGaWxlKEpTQ29udGV4dCAqY3gsIEpTT2Jq ZWN0ICpvYmosIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0Nv bXBpbGVGaWxlSGFuZGxlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICBGSUxFICpmaCk7CgpleHRlcm4gSlNTY3Jp cHQgKgpKU19Db21waWxlRmlsZUhhbmRsZUZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpjeCwgSlNP YmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBGSUxFICpmaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT UHJpbmNpcGFscyAqcHJpbmNpcGFscyk7CiMgMTEzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBp LmgiCmV4dGVybiBKU09iamVjdCAqCkpTX05ld1NjcmlwdE9iamVjdChKU0NvbnRleHQgKmN4LCBK U1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lTY3JpcHQoSlNDb250ZXh0 ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVG dW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAog ICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAogICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4g SlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVGdW5jdGlvbkZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpj eCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ByaW5j aXBhbHMgKnByaW5jaXBhbHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGxlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWlu dE4gbGluZW5vKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfQ29tcGlsZVVDRnVuY3Rpb24oSlND b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg ICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAgICAgICAg ICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4gSlNG dW5jdGlvbiAqCkpTX0NvbXBpbGVVQ0Z1bmN0aW9uRm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4 LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmlu Y2lwYWxzICpwcmluY2lwYWxzLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMsIHNpemVfdCBs ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxl bmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZVNjcmlw dChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBjb25zdCBjaGFyICpuYW1lLAogICAg ICAgICAgICAgICAgICAgdWludE4gaW5kZW50KTsKCgoKCgoKCmV4dGVybiBKU1N0cmluZyAqCkpT X0RlY29tcGlsZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTRnVuY3Rpb24gKmZ1biwgdWludE4g aW5kZW50KTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1bmN0aW9uQm9keShKU0Nv bnRleHQgKmN4LCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGluZGVudCk7CiMgMTIyMCAiLi4vLi4v ZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfRXhlY3V0ZVNjcmlwdChKU0Nv bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1NjcmlwdCAqc2NyaXB0LCBqc3ZhbCAqcnZhbCk7 CgoKCgoKdHlwZWRlZiBlbnVtIEpTRXhlY1BhcnQgeyBKU0VYRUNfUFJPTE9HLCBKU0VYRUNfTUFJ TiB9IEpTRXhlY1BhcnQ7CgpleHRlcm4gSlNCb29sCkpTX0V4ZWN1dGVTY3JpcHRQYXJ0KEpTQ29u dGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NyaXB0ICpzY3JpcHQsCiAgICAgICAgICAgICAg ICAgICAgIEpTRXhlY1BhcnQgcGFydCwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19F dmFsdWF0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpieXRlcywgdWludE4gbGVuZ3RoLAogICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAogICAgICAgICAgICAgICAgICBqc3Zh bCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlU2NyaXB0Rm9yUHJpbmNpcGFscyhK U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqYnl0ZXMsIHVpbnROIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1 YXRlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAg ICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCB1aW50TiBsZW5ndGgsCiAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubywKICAgICAgICAgICAgICAgICAg ICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNTY3JpcHRGb3JQcmlu Y2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFscywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgdWludE4gbGVuZ3RoLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGlu ZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRl cm4gSlNCb29sCkpTX0NhbGxGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK U0Z1bmN0aW9uICpmdW4sIHVpbnROIGFyZ2MsCiAgICAgICAgICAgICAgICBqc3ZhbCAqYXJndiwg anN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19DYWxsRnVuY3Rpb25OYW1lKEpTQ29udGV4 dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnROIGFyZ2MsCiAgICAg ICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wK SlNfQ2FsbEZ1bmN0aW9uVmFsdWUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwg ZnZhbCwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFs ICpydmFsKTsKCmV4dGVybiBKU0JyYW5jaENhbGxiYWNrCkpTX1NldEJyYW5jaENhbGxiYWNrKEpT Q29udGV4dCAqY3gsIEpTQnJhbmNoQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpTQm9vbApKU19Jc1J1 bm5pbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29sCkpTX0lzQ29uc3RydWN0aW5nKEpT Q29udGV4dCAqY3gpOwoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0lzQXNzaWduaW5nKEpTQ29udGV4 dCAqY3gpOwojIDEyOTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gdm9pZApK U19TZXRDYWxsUmV0dXJuVmFsdWUyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwojIDEzMTAgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdTdHJpbmco SlNDb250ZXh0ICpjeCwgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwoKZXh0ZXJuIEpTU3Ry aW5nICoKSlNfTmV3U3RyaW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcywgc2l6 ZV90IG4pOwoKZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3U3RyaW5nQ29weVooSlNDb250ZXh0ICpj eCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19JbnRlcm5TdHJpbmcoSlND b250ZXh0ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0 cmluZyhKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVy biBKU1N0cmluZyAqCkpTX05ld1VDU3RyaW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QganNj aGFyICpzLCBzaXplX3Qgbik7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZ0NvcHla KEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19J bnRlcm5VQ1N0cmluZ04oSlNDb250ZXh0ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3QgbGVu Z3RoKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0ludGVyblVDU3RyaW5nKEpTQ29udGV4dCAqY3gs IGNvbnN0IGpzY2hhciAqcyk7CgpleHRlcm4gY2hhciAqCkpTX0dldFN0cmluZ0J5dGVzKEpTU3Ry aW5nICpzdHIpOwoKZXh0ZXJuIGpzY2hhciAqCkpTX0dldFN0cmluZ0NoYXJzKEpTU3RyaW5nICpz dHIpOwoKZXh0ZXJuIHNpemVfdApKU19HZXRTdHJpbmdMZW5ndGgoSlNTdHJpbmcgKnN0cik7Cgpl eHRlcm4gaW50TgpKU19Db21wYXJlU3RyaW5ncyhKU1N0cmluZyAqc3RyMSwgSlNTdHJpbmcgKnN0 cjIpOwoKCgoKCgpzdHJ1Y3QgSlNMb2NhbGVDYWxsYmFja3MgewogICAgSlNMb2NhbGVUb1VwcGVy Q2FzZSBsb2NhbGVUb1VwcGVyQ2FzZTsKICAgIEpTTG9jYWxlVG9Mb3dlckNhc2UgbG9jYWxlVG9M b3dlckNhc2U7CiAgICBKU0xvY2FsZUNvbXBhcmUgbG9jYWxlQ29tcGFyZTsKfTsKCgoKCgpleHRl cm4gdm9pZApKU19TZXRMb2NhbGVDYWxsYmFja3MoSlNDb250ZXh0ICpjeCwgSlNMb2NhbGVDYWxs YmFja3MgKmNhbGxiYWNrcyk7CgoKCgoKZXh0ZXJuIEpTTG9jYWxlQ2FsbGJhY2tzICoKSlNfR2V0 TG9jYWxlQ2FsbGJhY2tzKEpTQ29udGV4dCAqY3gpOwojIDEzODYgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvcihKU0NvbnRleHQgKmN4LCBjb25z dCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvck51bWJl cihKU0NvbnRleHQgKmN4LCBKU0Vycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywKICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqdXNlclJlZiwgY29uc3QgdWludE4gZXJyb3JOdW1iZXIsIC4uLik7 CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvck51bWJlclVDKEpTQ29udGV4dCAqY3gsIEpT RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICB2b2lkICp1 c2VyUmVmLCBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsKCgoKCgoKCmV4dGVybiBKU0Jv b2wKSlNfUmVwb3J0V2FybmluZyhKU0NvbnRleHQgKmN4LCBjb25zdCBjaGFyICpmb3JtYXQsIC4u Lik7CgpleHRlcm4gSlNCb29sCkpTX1JlcG9ydEVycm9yRmxhZ3NBbmROdW1iZXIoSlNDb250ZXh0 ICpjeCwgdWludE4gZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvckNh bGxiYWNrIGVycm9yQ2FsbGJhY2ssIHZvaWQgKnVzZXJSZWYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludE4gZXJyb3JOdW1iZXIsIC4uLik7CgpleHRlcm4gSlNCb29sCkpT X1JlcG9ydEVycm9yRmxhZ3NBbmROdW1iZXJVQyhKU0NvbnRleHQgKmN4LCB1aW50TiBmbGFncywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JDYWxsYmFjayBlcnJvckNhbGxi YWNrLCB2b2lkICp1c2VyUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dWludE4gZXJyb3JOdW1iZXIsIC4uLik7CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRPdXRPZk1l bW9yeShKU0NvbnRleHQgKmN4KTsKCnN0cnVjdCBKU0Vycm9yUmVwb3J0IHsKICAgIGNvbnN0IGNo YXIgKmZpbGVuYW1lOwogICAgdWludE4gbGluZW5vOwogICAgY29uc3QgY2hhciAqbGluZWJ1ZjsK ICAgIGNvbnN0IGNoYXIgKnRva2VucHRyOwogICAgY29uc3QganNjaGFyICp1Y2xpbmVidWY7CiAg ICBjb25zdCBqc2NoYXIgKnVjdG9rZW5wdHI7CiAgICB1aW50TiBmbGFnczsKICAgIHVpbnROIGVy cm9yTnVtYmVyOwogICAgY29uc3QganNjaGFyICp1Y21lc3NhZ2U7CiAgICBjb25zdCBqc2NoYXIg KiptZXNzYWdlQXJnczsKfTsKIyAxNDYwICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhcGkuaCIKZXh0 ZXJuIEpTRXJyb3JSZXBvcnRlcgpKU19TZXRFcnJvclJlcG9ydGVyKEpTQ29udGV4dCAqY3gsIEpT RXJyb3JSZXBvcnRlciBlcik7CiMgMTQ3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4 dGVybiBKU09iamVjdCAqCkpTX05ld1JlZ0V4cE9iamVjdChKU0NvbnRleHQgKmN4LCBjaGFyICpi eXRlcywgc2l6ZV90IGxlbmd0aCwgdWludE4gZmxhZ3MpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNf TmV3VUNSZWdFeHBPYmplY3QoSlNDb250ZXh0ICpjeCwganNjaGFyICpjaGFycywgc2l6ZV90IGxl bmd0aCwgdWludE4gZmxhZ3MpOwoKZXh0ZXJuIHZvaWQKSlNfU2V0UmVnRXhwSW5wdXQoSlNDb250 ZXh0ICpjeCwgSlNTdHJpbmcgKmlucHV0LCBKU0Jvb2wgbXVsdGlsaW5lKTsKCmV4dGVybiB2b2lk CkpTX0NsZWFyUmVnRXhwU3RhdGljcyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpTX0Ns ZWFyUmVnRXhwUm9vdHMoSlNDb250ZXh0ICpjeCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19Jc0V4 Y2VwdGlvblBlbmRpbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29sCkpTX0dldFBlbmRp bmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpTX1Nl dFBlbmRpbmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gdm9pZApK U19DbGVhclBlbmRpbmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCk7CiMgMTUxNCAiLi4vLi4vZGlz dC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0V4Y2VwdGlvblN0YXRlICoKSlNfU2F2ZUV4Y2Vw dGlvblN0YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNfUmVzdG9yZUV4Y2VwdGlv blN0YXRlKEpTQ29udGV4dCAqY3gsIEpTRXhjZXB0aW9uU3RhdGUgKnN0YXRlKTsKCmV4dGVybiB2 b2lkCkpTX0Ryb3BFeGNlcHRpb25TdGF0ZShKU0NvbnRleHQgKmN4LCBKU0V4Y2VwdGlvblN0YXRl ICpzdGF0ZSk7CgoKCgoKCgpleHRlcm4gSlNFcnJvclJlcG9ydCAqCkpTX0Vycm9yRnJvbUV4Y2Vw dGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKIyAxNTQ0ICIuLi8uLi9kaXN0L2luY2x1ZGUv anNhcGkuaCIKZXh0ZXJuIGludE4KSlNfR2V0Q29udGV4dFRocmVhZChKU0NvbnRleHQgKmN4KTsK CmV4dGVybiBpbnROCkpTX1NldENvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4g aW50TgpKU19DbGVhckNvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7CgoKCgoKfQojIDM0ICJu c0luc3RhbGwuaCIgMgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIiAxCiMgMTY4 ICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJjbGlzdC5oIiAxCiMgMTcwICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIiAyCiMg MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEK IyAxNzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNj L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAxNzIgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs dWRlL25zcHIvcHJjdmFyLmgiIDEKIyAxNzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50Lmgi IDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIg MQojIDE3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMgojIDE4NiAiLi4vLi4vZGlz dC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IFBMRXZl bnQgUExFdmVudDsKdHlwZWRlZiBzdHJ1Y3QgUExFdmVudFF1ZXVlIFBMRXZlbnRRdWV1ZTsKIyAy MDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCmV4dGVybiBQTEV2ZW50UXVldWUqClBM X0NyZWF0ZUV2ZW50UXVldWUoY2hhciogbmFtZSwgUFJUaHJlYWQqIGhhbmRsZXJUaHJlYWQpOwoj IDIzMiAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIFBMRXZlbnRRdWV1ZSAq CiAgICBQTF9DcmVhdGVOYXRpdmVFdmVudFF1ZXVlKAogICAgICAgIGNoYXIgKm5hbWUsCiAgICAg ICAgUFJUaHJlYWQgKmhhbmRsZXJUaHJlYWQKICAgICk7CiMgMjYxICIuLi8uLi9kaXN0L2luY2x1 ZGUvcGxldmVudC5oIgpleHRlcm4gUExFdmVudFF1ZXVlICoKICAgIFBMX0NyZWF0ZU1vbml0b3Jl ZEV2ZW50UXVldWUoCiAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICBQUlRocmVhZCAqaGFuZGxl clRocmVhZAogICAgKTsKCgoKCmV4dGVybiB2b2lkClBMX0Rlc3Ryb3lFdmVudFF1ZXVlKFBMRXZl bnRRdWV1ZSogc2VsZik7CgoKCgoKCgpleHRlcm4gUFJNb25pdG9yKgpQTF9HZXRFdmVudFF1ZXVl TW9uaXRvcihQTEV2ZW50UXVldWUqIHNlbGYpOwojIDI5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL3Bs ZXZlbnQuaCIKZXh0ZXJuIFBSU3RhdHVzClBMX1Bvc3RFdmVudChQTEV2ZW50UXVldWUqIHNlbGYs IFBMRXZlbnQqIGV2ZW50KTsKIyAzMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCmV4 dGVybiB2b2lkKgpQTF9Qb3N0U3luY2hyb25vdXNFdmVudChQTEV2ZW50UXVldWUqIHNlbGYsIFBM RXZlbnQqIGV2ZW50KTsKCgoKCgpleHRlcm4gUExFdmVudCoKUExfR2V0RXZlbnQoUExFdmVudFF1 ZXVlKiBzZWxmKTsKCgoKCmV4dGVybiBQUkJvb2wKUExfRXZlbnRBdmFpbGFibGUoUExFdmVudFF1 ZXVlKiBzZWxmKTsKCgoKCgp0eXBlZGVmIHZvaWQKKCAqUExFdmVudEZ1blByb2MpKFBMRXZlbnQq IGV2ZW50LCB2b2lkKiBkYXRhLCBQTEV2ZW50UXVldWUqIHF1ZXVlKTsKCgoKCgoKZXh0ZXJuIHZv aWQKUExfTWFwRXZlbnRzKFBMRXZlbnRRdWV1ZSogc2VsZiwgUExFdmVudEZ1blByb2MgZnVuLCB2 b2lkKiBkYXRhKTsKCgoKCgpleHRlcm4gdm9pZApQTF9SZXZva2VFdmVudHMoUExFdmVudFF1ZXVl KiBzZWxmLCB2b2lkKiBvd25lcik7CgoKCgoKCmV4dGVybiB2b2lkClBMX1Byb2Nlc3NQZW5kaW5n RXZlbnRzKFBMRXZlbnRRdWV1ZSogc2VsZik7CiMgMzY1ICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxl dmVudC5oIgpleHRlcm4gUExFdmVudCoKUExfV2FpdEZvckV2ZW50KFBMRXZlbnRRdWV1ZSogc2Vs Zik7CgoKCgoKCmV4dGVybiB2b2lkClBMX0V2ZW50TG9vcChQTEV2ZW50UXVldWUqIHNlbGYpOwoj IDM4OCAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIFBSSW50MzIKUExfR2V0 RXZlbnRRdWV1ZVNlbGVjdEZEKFBMRXZlbnRRdWV1ZSogc2VsZik7CgoKCgoKCmV4dGVybiBQUkJv b2wKICAgIFBMX0lzUXVldWVPbkN1cnJlbnRUaHJlYWQoIFBMRXZlbnRRdWV1ZSAqcXVldWUgKTsK CgoKCmV4dGVybiBQUkJvb2wKUExfSXNRdWV1ZU5hdGl2ZShQTEV2ZW50UXVldWUgKnF1ZXVlKTsK IyA0MTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCnR5cGVkZWYgdm9pZCoKKCAqUExI YW5kbGVFdmVudFByb2MpKFBMRXZlbnQqIHNlbGYpOwoKCgoKCgp0eXBlZGVmIHZvaWQKKCAqUExE ZXN0cm95RXZlbnRQcm9jKShQTEV2ZW50KiBzZWxmKTsKCgoKCgoKZXh0ZXJuIHZvaWQKUExfSW5p dEV2ZW50KFBMRXZlbnQqIHNlbGYsIHZvaWQqIG93bmVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFBM RGVzdHJveUV2ZW50UHJvYyBkZXN0cnVjdG9yKTsKCgoKCmV4dGVybiB2b2lkKgpQTF9HZXRFdmVu dE93bmVyKFBMRXZlbnQqIHNlbGYpOwoKCgoKZXh0ZXJuIHZvaWQKUExfSGFuZGxlRXZlbnQoUExF dmVudCogc2VsZik7CgoKCgpleHRlcm4gdm9pZApQTF9EZXN0cm95RXZlbnQoUExFdmVudCogc2Vs Zik7CgoKCgpleHRlcm4gdm9pZApQTF9EZXF1ZXVlRXZlbnQoUExFdmVudCogc2VsZiwgUExFdmVu dFF1ZXVlKiBxdWV1ZSk7CgoKCgoKc3RydWN0IFBMRXZlbnQgewogICAgUFJDTGlzdCBsaW5rOwog ICAgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlcjsKICAgIFBMRGVzdHJveUV2ZW50UHJvYyBkZXN0 cnVjdG9yOwogICAgdm9pZCogb3duZXI7CiAgICB2b2lkKiBzeW5jaHJvbm91c1Jlc3VsdDsKICAg IFBSTG9jayogbG9jazsKICAgIFBSQ29uZFZhciogY29uZFZhcjsKICAgIFBSQm9vbCBoYW5kbGVk OwoKCgoKICAgIHVuc2lnbmVkIGxvbmcgaWQ7CgoKfTsKIyA1MzEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9wbGV2ZW50LmgiCmV4dGVybiBQUkludDMyClBMX1Byb2Nlc3NFdmVudHNCZWZvcmVJRChQTEV2 ZW50UXVldWUgKmFTZWxmLCB1bnNpZ25lZCBsb25nIGFJRCk7CgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcKKCAqUExHZXRFdmVudElERnVuYykodm9pZCAqYUNsb3N1cmUpOwojIDU1OCAiLi4vLi4v ZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIHZvaWQKUExfUmVnaXN0ZXJFdmVudElERnVu YyhQTEV2ZW50UXVldWUgKmFTZWxmLCBQTEdldEV2ZW50SURGdW5jIGFGdW5jLAogICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmFDbG9zdXJlKTsKIyA1NzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9w bGV2ZW50LmgiCmV4dGVybiB2b2lkClBMX1VucmVnaXN0ZXJFdmVudElERnVuYyhQTEV2ZW50UXVl dWUgKmFTZWxmKTsKIyA2MjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCn0KIyAzNiAi bnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA0 NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zU3RyaW5nMi5oIiAxCiMgNDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKIyAx ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMg NDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc2NvcmUuaCIgMQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIK IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMg MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQoj IDE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVy OwoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDMwICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNB UmVhZGFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEK IyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0cmluZ0Z3ZC5oIiAxCiMgMzQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3 ZC5oIgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5zQVBy b21pc2VTdHJpbmc7CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FGbGF0 U3RyaW5nOwpjbGFzcyBuc0FGbGF0Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNEZXBlbmRlbnRTdHJp bmc7CmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZzsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z QVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJhYmxl U3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJhYmxlU3Ry aW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiIDEKIyAzMCAi Li4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4w L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAiL3Vzci9zcmMv bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM0ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zRGVidWcuaCIgMQojIDM3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIg MgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNDAgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0J1ZmZlckhhbmRsZS5oIiAyCiMgODAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1 ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxl CiAgewogICAgcHVibGljOgogICAgICBuc0J1ZmZlckhhbmRsZSgpIHsgfQogICAgICBuc0J1ZmZl ckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFy dChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFFbmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3Rh cnQoIENoYXJUKiBhTmV3RGF0YVN0YXJ0ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFydDsg fQogICAgICBDaGFyVCogRGF0YVN0YXJ0KCkgeyByZXR1cm4gbURhdGFTdGFydDsgfQogICAgICBj b25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFTdGFydDsgfQoKICAg ICAgdm9pZCBEYXRhRW5kKCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7IG1EYXRhRW5kID0gYU5ld0Rh dGFFbmQ7IH0KICAgICAgQ2hhclQqIERhdGFFbmQoKSB7IHJldHVybiBtRGF0YUVuZDsgfQogICAg ICBjb25zdCBDaGFyVCogRGF0YUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kOyB9CgogICAg ICBwdHJkaWZmX3QgRGF0YUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kIC0gbURhdGFT dGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgQ2hhclQqIG1EYXRhU3RhcnQ7CiAgICAgIENo YXJUKiBtRGF0YUVuZDsKICB9OwoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0NvbnN0 QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICBuc0NvbnN0QnVmZmVySGFuZGxlKCkg eyB9CiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGUoIGNvbnN0IENoYXJUKiBhRGF0YVN0YXJ0LCBj b25zdCBDaGFyVCogYURhdGFFbmQgKSA6IG1EYXRhU3RhcnQoYURhdGFTdGFydCksIG1EYXRhRW5k KGFEYXRhRW5kKSB7IH0KCiAgICAgIHZvaWQgRGF0YVN0YXJ0KCBjb25zdCBDaGFyVCogYU5ld0Rh dGFTdGFydCApIHsgbURhdGFTdGFydCA9IGFOZXdEYXRhU3RhcnQ7IH0KICAgICAgY29uc3QgQ2hh clQqIERhdGFTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhU3RhcnQ7IH0KCiAgICAgIHZvaWQg RGF0YUVuZCggY29uc3QgQ2hhclQqIGFOZXdEYXRhRW5kICkgeyBtRGF0YUVuZCA9IGFOZXdEYXRh RW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQ7IH0KCiAgICAgIHB0cmRpZmZfdCBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBjb25zdCBDaGFyVCogbURh dGFTdGFydDsKICAgICAgY29uc3QgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zU3RyaW5nQWxsb2NhdG9yCiAgewogICAgcHVibGljOgoK ICAgICAgdmlydHVhbCB2b2lkIERlYWxsb2NhdGUoIENoYXJUKiApIGNvbnN0ID0gMDsKICB9OwoK CgoKICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPGNoYXI+JiBTdHJpbmdBbGxvY2F0b3JfY2hhcigp OwogICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8UFJVbmljaGFyPiYgU3RyaW5nQWxsb2NhdG9yX3dj aGFyX3QoKTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IG5zU3RyaW5nQWxsb2NhdG9y VHJhaXRzCiAgewogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFp dHM8Y2hhcj4KICB7CiAgICBzdGF0aWMgbnNTdHJpbmdBbGxvY2F0b3I8Y2hhcj4mIGdsb2JhbF9z dHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1cm4gU3RyaW5nQWxsb2NhdG9yX2NoYXIoKTsgfQogIH07 Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8UFJVbmljaGFyPgog IHsKICAgIHN0YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxQUlVuaWNoYXI+JiBnbG9iYWxfc3RyaW5n X2FsbG9jYXRvcigpIHsgcmV0dXJuIFN0cmluZ0FsbG9jYXRvcl93Y2hhcl90KCk7IH0KICB9Owoj IDE3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCnRlbXBsYXRlIDxjbGFz cyBDaGFyVD4KY2xhc3MgbnNTaGFyZWRCdWZmZXJIYW5kbGUKICAgIDogcHVibGljIG5zQnVmZmVy SGFuZGxlPENoYXJUPgogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZW51bQogICAgICAgIHsKICAg ICAgICAgIGtJc1NoYXJlZCA9IDB4MDgwMDAwMDAsCiAgICAgICAgICBrSXNTaW5nbGVBbGxvY2F0 aW9uV2l0aEJ1ZmZlciA9IDB4MDQwMDAwMDAsCiAgICAgICAgICBrSXNTdG9yYWdlRGVmaW5lZFNl cGFyYXRlbHkgPSAweDAyMDAwMDAwLAogICAgICAgICAga0lzVXNlckFsbG9jYXRvciA9IDB4MDEw MDAwMDAsCgoKICAgICAgICAgIGtJc05VTEwgPSAweDgwMDAwMDAwLAogICAgICAgICAga0ltcGxl bWVudGF0aW9uRmxhZ3NNYXNrID0gMHhGMDAwMDAwMCwKCiAgICAgICAgICBrRmxhZ3NNYXNrID0g MHhGRjAwMDAwMCwKICAgICAgICAgIGtSZWZDb3VudE1hc2sgPSAweDAwRkZGRkZGCiAgICAgICAg fTsKCiAgICBwdWJsaWM6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFT dGFydCwgQ2hhclQqIGFEYXRhRW5kICkKICAgICAgICAgIDogbnNCdWZmZXJIYW5kbGU8Q2hhclQ+ KGFEYXRhU3RhcnQsIGFEYXRhRW5kKQogICAgICAgIHsKICAgICAgICAgIG1GbGFncyA9IGtJc1No YXJlZDsKICAgICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRh U3RhcnQsIENoYXJUKiBhRGF0YUVuZCwgQ2hhclQqLCBDaGFyVCosIFBSQm9vbCBpc1NpbmdsZUFs bG9jYXRpb24gKQogICAgICAgICAgOiBuc0J1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwg YURhdGFFbmQpCiAgICAgICAgewogICAgICAgICAgbUZsYWdzID0ga0lzU2hhcmVkOwogICAgICAg ICAgaWYgKCBpc1NpbmdsZUFsbG9jYXRpb24gKQogICAgICAgICAgICBtRmxhZ3MgfD0ga0lzU2lu Z2xlQWxsb2NhdGlvbldpdGhCdWZmZXI7CiAgICAgICAgfQoKICAgICAgfm5zU2hhcmVkQnVmZmVy SGFuZGxlKCk7CgogICAgICB2b2lkCiAgICAgIEFjcXVpcmVSZWZlcmVuY2UoKSBjb25zdAogICAg ICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlz ID0gY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAg ICAgICAgbXV0YWJsZV90aGlzLT5zZXRfcmVmY291bnQoIGdldF9yZWZjb3VudCgpKzEgKTsKICAg ICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlbGVhc2VSZWZlcmVuY2UoKSBjb25zdAogICAgICAg IHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlzID0g Y29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAgICAg ICAgaWYgKCAhbXV0YWJsZV90aGlzLT5zZXRfcmVmY291bnQoIGdldF9yZWZjb3VudCgpLTEgKSAp CiAgICAgICAgICAgIGRlbGV0ZSBtdXRhYmxlX3RoaXM7CgogICAgICAgIH0KCiAgICAgIFBSQm9v bAogICAgICBJc1JlZmVyZW5jZWQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn ZXRfcmVmY291bnQoKSAhPSAwOwogICAgICAgIH0KCiAgICAgIFBSVWludDMyCiAgICAgIEdldElt cGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRmxh Z3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01hc2s7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAg ICBTZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCBQUlVpbnQzMiBhTmV3RmxhZ3MgKQogICAgICAgIHsK ICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrKSB8 IChhTmV3RmxhZ3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01hc2spOwogICAgICAgIH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIFBSVWludDMyIG1GbGFnczsKCiAgICAgIFBSVWludDMyCiAgICAgIGdl dF9yZWZjb3VudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GbGFncyAmIGtS ZWZDb3VudE1hc2s7CiAgICAgICAgfQoKICAgICAgUFJVaW50MzIKICAgICAgc2V0X3JlZmNvdW50 KCBQUlVpbnQzMiBhTmV3UmVmQ291bnQgKQogICAgICAgIHsKICAgICAgICAgIGlmICghKGFOZXdS ZWZDb3VudCA8PSBrUmVmQ291bnRNYXNrKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJhTmV3UmVmQ291 bnQgPD0ga1JlZkNvdW50TWFzayIsICJhTmV3UmVmQ291bnQgPD0ga1JlZkNvdW50TWFzayIsICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIsIDI1Myk7CgogICAgICAgICAgbUZs YWdzID0gKG1GbGFncyAmIGtGbGFnc01hc2spIHwgYU5ld1JlZkNvdW50OwogICAgICAgICAgcmV0 dXJuIGFOZXdSZWZDb3VudDsKICAgICAgICB9CgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFy VD4mIGdldF9hbGxvY2F0b3IoKSBjb25zdDsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K Y2xhc3MgbnNGbGV4QnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc1NoYXJlZEJ1ZmZlckhhbmRs ZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZSggQ2hhclQq IGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCwgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJU KiBhU3RvcmFnZUVuZCApCiAgICAgICAgICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihh RGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAgICAgICAgICAgIG1TdG9yYWdlU3RhcnQoYVN0b3JhZ2VT dGFydCksCiAgICAgICAgICAgIG1TdG9yYWdlRW5kKGFTdG9yYWdlRW5kKQogICAgICAgIHsKICAg ICAgICAgIHRoaXMtPm1GbGFncyB8PSB0aGlzLT5rSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHk7 CiAgICAgICAgfQoKICAgICAgdm9pZCBTdG9yYWdlU3RhcnQoIENoYXJUKiBhTmV3U3RvcmFnZVN0 YXJ0ICkgeyBtU3RvcmFnZVN0YXJ0ID0gYU5ld1N0b3JhZ2VTdGFydDsgfQogICAgICBDaGFyVCog U3RvcmFnZVN0YXJ0KCkgeyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQogICAgICBjb25zdCBDaGFy VCogU3RvcmFnZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQoKICAgICAg dm9pZCBTdG9yYWdlRW5kKCBDaGFyVCogYU5ld1N0b3JhZ2VFbmQgKSB7IG1TdG9yYWdlRW5kID0g YU5ld1N0b3JhZ2VFbmQ7IH0KICAgICAgQ2hhclQqIFN0b3JhZ2VFbmQoKSB7IHJldHVybiBtU3Rv cmFnZUVuZDsgfQogICAgICBjb25zdCBDaGFyVCogU3RvcmFnZUVuZCgpIGNvbnN0IHsgcmV0dXJu IG1TdG9yYWdlRW5kOyB9CgogICAgICBwdHJkaWZmX3QgU3RvcmFnZUxlbmd0aCgpIGNvbnN0IHsg cmV0dXJuIG1TdG9yYWdlRW5kIC0gbVN0b3JhZ2VTdGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgQ2hhclQqIG1TdG9yYWdlU3RhcnQ7CiAgICAgIENoYXJUKiBtU3RvcmFnZUVuZDsKICB9OwoK dGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhBbGxv Y2F0b3IKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHB1 YmxpYzoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoQWxsb2NhdG9yKCBDaGFyVCogYURh dGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGFBbGxv Y2F0b3IgKQogICAgICAgICAgOiBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFy dCwgYURhdGFFbmQpLAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAg ewogICAgICAgICAgdGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAg ICAgfQoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29u c3QgeyByZXR1cm4gbUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdB bGxvY2F0b3I8Q2hhclQ+JiBtQWxsb2NhdG9yOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+ CmNsYXNzIG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zRmxl eEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhh bmRsZVdpdGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJUKiBhU3RvcmFnZVN0YXJ0 LCBDaGFyVCogYVN0b3JhZ2VFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAgICA6IG5z RmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQsIGFTdG9yYWdlU3Rh cnQsIGFTdG9yYWdlRW5kKSwKICAgICAgICAgICAgbUFsbG9jYXRvcihhQWxsb2NhdG9yKQogICAg ICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PSB0aGlzLT5rSXNVc2VyQWxsb2NhdG9yOwog ICAgICAgIH0KCiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0b3I7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zU3Ry aW5nQWxsb2NhdG9yPENoYXJUPiYgbUFsbG9jYXRvcjsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBD aGFyVD4KbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+Jgpuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFy VD46OmdldF9hbGxvY2F0b3IoKSBjb25zdAoKICB7CiAgICBpZiAoIG1GbGFncyAmIGtJc1VzZXJB bGxvY2F0b3IgKQogICAgICB7CiAgICAgICAgaWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5l ZFNlcGFyYXRlbHkgKQogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5z RmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2Nh dG9yKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNv bnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdl dF9hbGxvY2F0b3IoKTsKICAgICAgfQoKICAgIHJldHVybiBuc1N0cmluZ0FsbG9jYXRvclRyYWl0 czxDaGFyVD46Omdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFz cyBDaGFyVD4KbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+Ojp+bnNTaGFyZWRCdWZmZXJIYW5k bGUoKQoKICB7CiAgICBpZiAoISghSXNSZWZlcmVuY2VkKCkpKSBuc0RlYnVnOjpBc3NlcnRpb24o IiFJc1JlZmVyZW5jZWQoKSIsICIhSXNSZWZlcmVuY2VkKCkiLCAiLi4vLi4vZGlzdC9pbmNsdWRl L25zQnVmZmVySGFuZGxlLmgiLCAzNTEpOwoKICAgIGlmICggIShtRmxhZ3MgJiBrSXNTaW5nbGVB bGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7CiAgICAgICAgQ2hhclQqIHN0cmluZ19zdG9y YWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAgICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VE ZWZpbmVkU2VwYXJhdGVseSApCiAgICAgICAgICBzdHJpbmdfc3RvcmFnZSA9IHJlaW50ZXJwcmV0 X2Nhc3Q8IG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4odGhpcyktPlN0b3JhZ2VTdGFydCgp OwoKICAgICAgICBnZXRfYWxsb2NhdG9yKCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAg ICAgIH0KICB9CiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmlu Zy5oIiAyCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5o IgpjbGFzcyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiBQUlVuaWNoYXIgY2hhcl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQ cml2YXRlU2hhcmFibGVTdHJpbmcoKSB7fQoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBHZXRJbXBs ZW1lbnRhdGlvbkZsYWdzKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5k bGU8Y2hhcl90eXBlPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFs IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0 OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdl dFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICB9OwoKY2xhc3MgbnNQcml2YXRl U2hhcmFibGVDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90 eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFibGVDU3RyaW5n KCkge30KCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNv bnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZs YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs ZTxjaGFyX3R5cGU+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z dCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUo KSBjb25zdDsKCgoKCgoKCiAgfTsKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5o IiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAxCiMgMjcgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMK CmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoK ZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8 ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6 ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkg PDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8 PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4 ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAo KDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3By aW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwK ICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+ PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8 ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6 ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTAp KSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAo KDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlw ZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9f Y29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlw ZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2Fs cGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp IHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg aXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgp OwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAo aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGlu dCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjExICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwoj IDIxMiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBl LmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93 ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp OwojIDI3NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDI4ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNDaGFyVHJhaXRzLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMg MzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIgMgojIDM5ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n SXRlcmF0b3JVdGlscy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJh dG9yVXRpbHMuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQUkJvb2wKU2Ft ZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYgcmhzICkKICB7 CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVudCgpLm1TdGFy dDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9yOwoK CgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8UFJVbmlj aGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAgICAgICBzaXpl X3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29uc3QgbnNSZWFk aW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp dHMuaCIgMgoKCmV4dGVybiAiQyIgeyB2b2lkICptZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBz aXplX3QpOyB9CgoKCgogIHR5cGVkZWYgUFJCb29sIG5zQ2hhclRyYWl0c19ib29sOwoKCnRlbXBs YXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zQ2hhclRyYWl0cwogIHsKICAgIHR5cGVkZWYgQ2hh clQgY2hhcl90eXBlOwogICAgdHlwZWRlZiBjaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7Cgog ICAgc3RhdGljCiAgICB2b2lkCiAgICBhc3NpZ24oIGNoYXJfdHlwZSYgbGhzLCBjb25zdCBjaGFy X3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSByaHM7CiAgICAgIH0KCgoKCiAgICB0 eXBlZGVmIGludCBpbnRfdHlwZTsKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZQogICAgdG9fY2hh cl90eXBlKCBjb25zdCBpbnRfdHlwZSYgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcl90 eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50X3R5cGUo IGNvbnN0IGNoYXJfdHlwZSYgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gaW50X3R5cGUoYyk7 CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcV9pbnRfdHlw ZSggY29uc3QgaW50X3R5cGUmIGxocywgY29uc3QgaW50X3R5cGUmIHJocyApCiAgICAgIHsKICAg ICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgbnNDaGFy VHJhaXRzX2Jvb2wKICAgIGVxKCBjb25zdCBjaGFyX3R5cGUmIGxocywgY29uc3QgY2hhcl90eXBl JiByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCiAgICBz dGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBsdCggY29uc3QgY2hhcl90eXBlJiBsaHMs IGNvbnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7 CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIGNvcHkoIGNoYXJfdHlw ZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIGNo YXJfdHlwZSogcmVzdWx0ID0gczE7CiAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgYXNz aWduKCpzMSsrLCAqczIrKyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQoKICAgIHN0 YXRpYwogICAgY2hhcl90eXBlKgogICAgbW92ZSggY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90 eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBz MTsKCiAgICAgICAgaWYgKCBuICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBzMiA+IHMx ICkKICAgICAgICAgICAgICBjb3B5KHMxLCBzMiwgbik7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBzMSArPSBuOwogICAgICAgICAgICAgICAgczIgKz0g bjsKICAgICAgICAgICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgICAgICAgICAgYXNzaWdu KCotLXMxLCAqLS1zMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICByZXR1 cm4gcmVzdWx0OwogICAgICB9CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBhc3NpZ24o IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYgYyApCiAgICAgIHsKICAg ICAgICBjaGFyX3R5cGUqIHJlc3VsdCA9IHM7CiAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAg ICAgYXNzaWduKCpzKyssIGMpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBz dGF0aWMKICAgIGludAogICAgY29tcGFyZSggY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hh cl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgZm9yICggOyBuLS07ICsrczEs ICsrczIgKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIGx0KCpzMSwgKnMyKSApCiAgICAg ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICBpZiAoIGx0KCpzMiwgKnMxKSApCiAgICAg ICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgICB9 CgogICAgc3RhdGljCiAgICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkK ICAgICAgewogICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgICAgIHdoaWxlICggIWVxKCpz KyssIENoYXJUKDApKSApCiAgICAgICAgICArK3Jlc3VsdDsKICAgICAgICByZXR1cm4gcmVzdWx0 OwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBjaGFyX3R5cGUqCiAgICBmaW5kKCBjb25z dCBjaGFyX3R5cGUqIHMsIHNpemVfdCBuLCBjb25zdCBjaGFyX3R5cGUmIGMgKQogICAgICB7CiAg ICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIGVxKCpzLCBj KSApCiAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICsrczsKICAgICAgICAgIH0K CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KIyAyMTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0No YXJUcmFpdHMuaCIKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ2hhclRyYWl0czxjaGFyPgog IHsKICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIFBSVW5pY2hhciBpbmNv bXBhdGlibGVfY2hhcl90eXBlOwoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFy JiBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAgICAgfQoKCgoK ICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcgogICAgdG9fY2hh cl90eXBlKCBpbnQgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcihjKTsKICAgICAgfQoK ICAgIHN0YXRpYwogICAgaW50CiAgICB0b19pbnRfdHlwZSggY2hhciBjICkKICAgICAgewogICAg ICAgIHJldHVybiBpbnQoIHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyID4oYykgKTsKICAgICAg fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGVxX2ludF90eXBlKCBpbnQg bGhzLCBpbnQgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9 CgoKCgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNoYXIgbGhzLCBj aGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKICAg IHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyIGxocywgY2hhciByaHMg KQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRp YwogICAgY2hhcioKICAgIG1vdmUoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4g KQogICAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbW1vdmUoczEs IHMyLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXIqCiAgICBjb3B5KCBjaGFyKiBz MSwgY29uc3QgY2hhciogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0 aWNfY2FzdDwgY2hhciogPihtZW1jcHkoczEsIHMyLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMK ICAgIGNoYXIqCiAgICBhc3NpZ24oIGNoYXIqIHMsIHNpemVfdCBuLCBjaGFyIGMgKQogICAgICB7 CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbXNldChzLCB0b19pbnRfdHlw ZShjKSwgbikpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIGNvbXBhcmUoIGNvbnN0 IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgcmV0 dXJuIG1lbWNtcChzMSwgczIsIG4pOwogICAgICB9CgogICAgc3RhdGljCiAgICBzaXplX3QKICAg IGxlbmd0aCggY29uc3QgY2hhciogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKHMp OwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBjaGFyKgogICAgZmluZCggY29uc3QgY2hh ciogcywgc2l6ZV90IG4sIGNoYXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgY2hhciogPihtZW1jaHIocywgdG9faW50X3R5cGUoYyksIG4pKTsKICAg ICAgfQojIDMzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07CiMgNDY4 ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBJbnB1 dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU291cmNlVHJhaXRzCiAgewogICAgdHlwZWRlZiB0eXBl bmFtZSBJbnB1dEl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwojIDQ4 MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogICAgc3RhdGljCiAgICBQUlVp bnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2UoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIgKQog ICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIuc2l6ZV9mb3J3YXJkKCk7CiAgICAgIH0KCiAgICBz dGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggY29uc3QgSW5wdXRJdGVy YXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0b3ImIGxhc3QgKQogICAgICB7CiAgICAgICAg cmV0dXJuIFBSVWludDMyKFNhbWVGcmFnbWVudChmaXJzdCwgbGFzdCkgPyBsYXN0LmdldCgpLWZp cnN0LmdldCgpIDogZmlyc3Quc2l6ZV9mb3J3YXJkKCkpOwogICAgICB9CgogICAgc3RhdGljCiAg ICBjb25zdCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlKgogICAgcmVhZCggY29u c3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1cm4gaXRlci5nZXQo KTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYWR2YW5jZSggSW5wdXRJdGVyYXRv ciYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcy5hZHZhbmNlKG4pOwog ICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyU291cmNl VHJhaXRzPENoYXJUKj4KICB7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CiMgNTI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAg IFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIHMgKQogICAgICB7CiAgICAg ICAgcmV0dXJuIFBSVWludDMyKG5zQ2hhclRyYWl0czxDaGFyVD46Omxlbmd0aChzKSk7CgogICAg ICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2UoIENoYXJU KiBmaXJzdCwgQ2hhclQqIGxhc3QgKQogICAgICB7CiAgICAgICAgcmV0dXJuIFBSVWludDMyKGxh c3QtZmlyc3QpOwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBDaGFyVCoKICAgIHJlYWQo IENoYXJUKiBzICkKICAgICAgewogICAgICAgIHJldHVybiBzOwogICAgICB9CgogICAgc3RhdGlj CiAgICB2b2lkCiAgICBhZHZhbmNlKCBDaGFyVComIHMsIGRpZmZlcmVuY2VfdHlwZSBuICkKICAg ICAgewogICAgICAgIHMgKz0gbjsKICAgICAgfQogIH07CiMgNjUxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNDaGFyVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4Kc3RydWN0 IG5zQ2hhclNpbmtUcmFpdHMKICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSgg T3V0cHV0SXRlcmF0b3ImIGl0ZXIsIGNvbnN0IHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yOjp2YWx1 ZV90eXBlKiBzLCBQUlVpbnQzMiBuICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLndyaXRl KHMsIG4pOwogICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnND aGFyU2lua1RyYWl0czxDaGFyVCo+CiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3Jp dGUoIENoYXJUKiYgaXRlciwgY29uc3QgQ2hhclQqIHMsIFBSVWludDMyIG4gKQogICAgICB7CiAg ICAgICAgbnNDaGFyVHJhaXRzPENoYXJUPjo6bW92ZShpdGVyLCBzLCBuKTsKICAgICAgICBpdGVy ICs9IG47CiAgICAgICAgcmV0dXJuIG47CiAgICAgIH0KICB9OwojIDM3ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNBU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJ dGVyYXRvci5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgi CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIgMQojIDM4ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgplbnVtIG5zRnJhZ21lbnRSZXF1ZXN0 IHsga1ByZXZGcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQsIGtOZXh0RnJh Z21lbnQsIGtGcmFnbWVudEF0IH07CiMgNTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Zy YWdtZW50LmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zUmVhZGFibGVGcmFnbWVu dAogIHsKICAgIGNvbnN0IENoYXJUKiBtU3RhcnQ7CiAgICBjb25zdCBDaGFyVCogbUVuZDsKICAg IGNvbnN0IHZvaWQqIG1GcmFnbWVudElkZW50aWZpZXI7CgogICAgbnNSZWFkYWJsZUZyYWdtZW50 KCkKICAgICAgICA6IG1TdGFydCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRlbnRpZmllcigwKQog ICAgICB7CgogICAgICB9CiAgfTsKIyA4MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJh Z21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNXcml0YWJsZUZyYWdtZW50 CiAgewogICAgQ2hhclQqIG1TdGFydDsKICAgIENoYXJUKiBtRW5kOwogICAgdm9pZCogbUZyYWdt ZW50SWRlbnRpZmllcjsKCiAgICBuc1dyaXRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0 KDApLCBtRW5kKDApLCBtRnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9 OwojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiAyCgoKCgoKCgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIiAxCiMgNDQgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVj dCBuc1N0cmluZ1RyYWl0cwogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIGFic3RyYWN0X3N0cmlu Z190eXBlOwogICAgdHlwZWRlZiBuc0FQcm9taXNlU3RyaW5nIGFic3RyYWN0X3Byb21pc2VfdHlw ZTsKICAgIHR5cGVkZWYgbnNBRmxhdFN0cmluZyBhYnN0cmFjdF9mbGF0X3R5cGU7CiAgICB0eXBl ZGVmIGNvbnN0IG5zRGVwZW5kZW50U3RyaW5nIGxpdGVyYWxfc3RyaW5nX3R5cGU7CiAgfTsKIyA2 NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDw+CnN0cnVj dCBuc1N0cmluZ1RyYWl0czxjaGFyPgogIHsKICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBhYnN0cmFj dF9zdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgbnNBUHJvbWlzZUNTdHJpbmcgYWJzdHJhY3RfcHJv bWlzZV90eXBlOwogICAgdHlwZWRlZiBuc0FGbGF0Q1N0cmluZyBhYnN0cmFjdF9mbGF0X3R5cGU7 CiAgICB0eXBlZGVmIGNvbnN0IG5zRGVwZW5kZW50Q1N0cmluZyBsaXRlcmFsX3N0cmluZ190eXBl OwogIH07CiMgMzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIgMQojIDM4ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBU JgpOU19NSU4oIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJldHVybiBiIDwgYSA/ IGIgOiBhOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgVCYKTlNfTUFYKCBj b25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYSA+IGIgPyBhIDogYjsKICB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4KaW5saW5lClBSVWludDMy Ck5TX0NPVU5UKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5wdXRJdGVyYXRvciYgbGFz dCwgY29uc3QgVCYgdmFsdWUgKQogIHsKICAgIFBSVWludDMyIHJlc3VsdCA9IDA7CiAgICBmb3Ig KCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICBpZiAoICpmaXJzdCA9PSB2YWx1ZSAp CiAgICAgICAgKytyZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCnRlbXBsYXRlIDxjbGFz cyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5lCk91dHB1dEl0ZXJh dG9yJgpjb3B5X3N0cmluZyggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0 b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQogIHsKICAgIHR5cGVkZWYgbnNDaGFy U291cmNlVHJhaXRzPElucHV0SXRlcmF0b3I+IHNvdXJjZV90cmFpdHM7CiAgICB0eXBlZGVmIG5z Q2hhclNpbmtUcmFpdHM8T3V0cHV0SXRlcmF0b3I+IHNpbmtfdHJhaXRzOwoKICAgIHdoaWxlICgg Zmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBQUkludDMyIGNvdW50X2NvcGllZCA9IFBS SW50MzIoc2lua190cmFpdHM6OndyaXRlKHJlc3VsdCwgc291cmNlX3RyYWl0czo6cmVhZChmaXJz dCksIHNvdXJjZV90cmFpdHM6OnJlYWRhYmxlX2Rpc3RhbmNlKGZpcnN0LCBsYXN0KSkpOwogICAg ICAgIGlmICghKGNvdW50X2NvcGllZCA+IDApKSBuc0RlYnVnOjpBc3NlcnRpb24oInxjb3B5X3N0 cmluZ3wgd2lsbCBuZXZlciB0ZXJtaW5hdGUiLCAiY291bnRfY29waWVkID4gMCIsICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIsIDc3KTsKICAgICAgICBzb3VyY2VfdHJhaXRzOjph ZHZhbmNlKGZpcnN0LCBjb3VudF9jb3BpZWQpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsK ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+ Ck91dHB1dEl0ZXJhdG9yJgpjb3B5X3N0cmluZ19iYWNrd2FyZCggY29uc3QgSW5wdXRJdGVyYXRv ciYgZmlyc3QsIElucHV0SXRlcmF0b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQog IHsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBsYXN0Lm5vcm1h bGl6ZV9iYWNrd2FyZCgpOwogICAgICAgIHJlc3VsdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAg ICAgICBQUlVpbnQzMiBsZW5ndGhUb0NvcHkgPSBQUlVpbnQzMiggTlNfTUlOKGxhc3Quc2l6ZV9i YWNrd2FyZCgpLCByZXN1bHQuc2l6ZV9iYWNrd2FyZCgpKSApOwogICAgICAgIGlmICggZmlyc3Qu ZnJhZ21lbnQoKS5tU3RhcnQgPT0gbGFzdC5mcmFnbWVudCgpLm1TdGFydCApCiAgICAgICAgICBs ZW5ndGhUb0NvcHkgPSBOU19NSU4obGVuZ3RoVG9Db3B5LCBQUlVpbnQzMihsYXN0LmdldCgpIC0g Zmlyc3QuZ2V0KCkpKTsKCiAgICAgICAgaWYgKCEobGVuZ3RoVG9Db3B5KSkgbnNEZWJ1Zzo6QXNz ZXJ0aW9uKCJ8Y29weV9zdHJpbmdfYmFja3dhcmR8IHdpbGwgbmV2ZXIgdGVybWluYXRlIiwgImxl bmd0aFRvQ29weSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIsIDk2KTsKCgoK CgogICAgICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlw ZT46Om1vdmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29weSwgbGFzdC5nZXQoKS1sZW5ndGhUb0Nv cHksIGxlbmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0 aFRvQ29weSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5 KSApOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgNDEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKIyA1NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry aW5nSXRlcmF0b3IuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1JlYWRpbmdJdGVy YXRvcgoKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICAgICAgdHlwZWRlZiBDaGFyVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0 IENoYXJUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IENoYXJUJiByZWZlcmVuY2U7CgoK ICAgIHByaXZhdGU6CiAgICAgIGZyaWVuZCBjbGFzcyBuc0FTdHJpbmc7CiAgICAgIGZyaWVuZCBj bGFzcyBuc0FDU3RyaW5nOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIG5zU3RyaW5nVHJhaXRzPENo YXJUPjo6YWJzdHJhY3Rfc3RyaW5nX3R5cGUgc3RyaW5nX3R5cGU7CgogICAgICBuc1JlYWRhYmxl RnJhZ21lbnQ8Q2hhclQ+IG1GcmFnbWVudDsKICAgICAgY29uc3QgQ2hhclQqIG1Qb3NpdGlvbjsK ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUqIG1Pd25pbmdTdHJpbmc7CgogICAgcHVibGljOgogICAg ICBuc1JlYWRpbmdJdGVyYXRvcigpIHsgfQoKCgogICAgICBpbmxpbmUgdm9pZCBub3JtYWxpemVf Zm9yd2FyZCgpOwogICAgICBpbmxpbmUgdm9pZCBub3JtYWxpemVfYmFja3dhcmQoKTsKCiAgICAg IHBvaW50ZXIKICAgICAgZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBv c2l0aW9uOwogICAgICAgIH0KCiAgICAgIENoYXJUCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg ICAgICAgewogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CiMgMTA1ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxD aGFyVD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9u OwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3Ir KyggaW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVz dWx0KCp0aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2Zv cndhcmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAg ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgog ICAgICBvcGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJh dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7 CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg fQoKICAgICAgY29uc3QgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQo KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoK ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgaWYgKCEobU93bmluZ1N0cmluZykpIG5zRGVidWc6OkFzc2VydGlvbigiaXRlcmF0 b3Igbm90IGF0dGFjaGVkIHRvIGEgc3RyaW5nICh8bU93bmluZ1N0cmluZ3wgPT0gMCkiLCAibU93 bmluZ1N0cmluZyIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTQ4 KTsKICAgICAgICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZm ZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAg ICByZXR1cm4gbUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlm ZmVyZW5jZV90eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgIHJldHVybiBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAg IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBl IG4gKQogICAgICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3 YXJkKCkpOwoKICAgICAgICAgICAgICBpZiAoIShvbmVfaG9wPjApKSBuc0RlYnVnOjpBc3NlcnRp b24oIkluZmluaXRlIGxvb3A6IGNhbid0IGFkdmFuY2UgYSByZWFkaW5nIGl0ZXJhdG9yIGJleW9u ZCB0aGUgZW5kIG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A+MCIsICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNTdHJpbmdJdGVyYXRvci5oIiwgMTcxKTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBv bmVfaG9wOwogICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAg biAtPSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgp KTsKCiAgICAgICAgICAgICAgaWYgKCEob25lX2hvcDwwKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJ bmZpbml0ZSBsb29wOiBjYW4ndCBhZHZhbmNlIChiYWNrd2FyZCkgYSByZWFkaW5nIGl0ZXJhdG9y IGJleW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A8MCIsICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTg0KTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlv biArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoK ICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBD aGFyVD4KY2xhc3MgbnNXcml0aW5nSXRlcmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVf dHlwZTsKICAgICAgdHlwZWRlZiBDaGFyVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYg cmVmZXJlbmNlOwoKCiAgICBwcml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwog ICAgICBmcmllbmQgY2xhc3MgbnNBQ1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0 cmluZ1RyYWl0czxDaGFyVD46OmFic3RyYWN0X3N0cmluZ190eXBlIHN0cmluZ190eXBlOwoKICAg ICAgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9z aXRpb247CiAgICAgIHN0cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAg ICAgbnNXcml0aW5nSXRlcmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXpl X2ZvcndhcmQoKTsKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAg ICBwb2ludGVyCiAgICAgIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Q b3NpdGlvbjsKICAgICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29u c3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNDUgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiCiAgICAgIG5zV3JpdGluZ0l0ZXJh dG9yPENoYXJUPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9z aXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVy YXRvcisrKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJU PiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxp emVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBu c1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAg ICAgICAgIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRlcmF0b3I8Q2hh clQ+CiAgICAgIG9wZXJhdG9yLS0oIGludCApCiAgICAgICAgewogICAgICAgICAgbnNXcml0aW5n SXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgqdGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dh cmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg ICAgICB9CgogICAgICBjb25zdCBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFn bWVudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAg ICB9CgogICAgICBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpCiAg ICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25z dCBzdHJpbmdfdHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBp ZiAoIShtT3duaW5nU3RyaW5nKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJpdGVyYXRvciBub3QgYXR0 YWNoZWQgdG8gYSBzdHJpbmcgKHxtT3duaW5nU3RyaW5nfCA9PSAwKSIsICJtT3duaW5nU3RyaW5n IiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiLCAyOTQpOwogICAgICAg ICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIHN0cmluZ190eXBlJgog ICAgICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIGlmICghKG1Pd25pbmdTdHJpbmcpKSBu c0RlYnVnOjpBc3NlcnRpb24oIml0ZXJhdG9yIG5vdCBhdHRhY2hlZCB0byBhIHN0cmluZyAofG1P d25pbmdTdHJpbmd8ID09IDApIiwgIm1Pd25pbmdTdHJpbmciLCAiLi4vLi4vZGlzdC9pbmNsdWRl L25zU3RyaW5nSXRlcmF0b3IuaCIsIDMwMSk7CiAgICAgICAgICByZXR1cm4gKm1Pd25pbmdTdHJp bmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfZm9yd2FyZCgp IGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudC5tRW5kIC0gbVBvc2l0 aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBzaXplX2JhY2t3YXJk KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uIC0gbUZyYWdtZW50 Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAg IGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAo IG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvbmVf aG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAgICAgICAgICAgICAgaWYgKCEob25l X2hvcD4wKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbmZpbml0ZSBsb29wOiBjYW4ndCBhZHZhbmNl IGEgd3JpdGluZyBpdGVyYXRvciBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyIsICJvbmVfaG9w PjAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMyNCk7CgoKICAg ICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3JtYWxpemVf Zm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoKICAg ICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbm9ybWFs aXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBO U19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIGlmICghKG9uZV9ob3A8 MCkpIG5zRGVidWc6OkFzc2VydGlvbigiSW5maW5pdGUgbG9vcDogY2FuJ3QgYWR2YW5jZSAoYmFj a3dhcmQpIGEgd3JpdGluZyBpdGVyYXRvciBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyIsICJv bmVfaG9wPDAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMzNyk7 CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBuIC09 IG9uZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg fQoKICAgICAgUFJVaW50MzIKICAgICAgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHMsIFBSVWlu dDMyIG4gKQogICAgICAgIHsKICAgICAgICAgIGlmICghKHNpemVfZm9yd2FyZCgpID4gMCkpIG5z RGVidWc6OkFzc2VydGlvbigiWW91IGNhbid0IHx3cml0ZXwgaW50byBhbiB8bnNXcml0aW5nSXRl cmF0b3J8IHdpdGggbm8gc3BhY2UhIiwgInNpemVfZm9yd2FyZCgpID4gMCIsICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMzUwKTsKCiAgICAgICAgICBuID0gTlNfTUlO KG4sIFBSVWludDMyKHNpemVfZm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFs dWVfdHlwZT46Om1vdmUobVBvc2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZl cmVuY2VfdHlwZShuKSApOwogICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1w bGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6 bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVu dC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZy YWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1T dGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0 ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3Np dGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJl YWRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0 aW9uID0gbUZyYWdtZW50Lm1FbmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUK UFJCb29sCm9wZXJhdG9yPT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBj b25zdCBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5n ZXQoKSA9PSByaHMuZ2V0KCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJC b29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25z dCBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQo KSAhPSByaHMuZ2V0KCk7CiAgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2 b2lkCm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAg IHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdT dHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAg ICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENo YXJUPgppbmxpbmUKdm9pZApuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNr d2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAg ICAgICAmJiBtT3duaW5nU3RyaW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1By ZXZGcmFnbWVudCkgKQogICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0 aW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYg cmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5n SXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhz ICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6 IHB1YmxpYyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiBuc0FTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcg cHJvbWlzZV90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFk aW5nSXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dy aXRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQz MiBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAg ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3Im IEJlZ2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25z dF9pdGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBp bmxpbmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBp dGVyYXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlw ZSBMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1 cm4gTGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNl bGZfdHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiAp IGNvbnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJf dHlwZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUg KSBjb25zdDsKIyAxMTIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6 ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5 cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6 ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUklu dDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBjb25zdDsK IyAxMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lk IFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlICkgeyB9 CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFOZXdMZW5ndGg9MCApCiAg ICAgICAgewogICAgICAgICAgaWYgKCEoYU5ld0xlbmd0aDw9dGhpcy0+TGVuZ3RoKCkpKSBuc0Rl YnVnOjpBc3NlcnRpb24oIkNhbid0IHVzZSB8VHJ1bmNhdGUoKXwgdG8gbWFrZSBhIHN0cmluZyBs b25nZXIuIiwgImFOZXdMZW5ndGg8PXRoaXMtPkxlbmd0aCgpIiwgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0FTdHJpbmcuaCIsIDE0OSk7CgogICAgICAgICAgaWYgKCBhTmV3TGVuZ3RoIDwgdGhpcy0+ TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0aCk7CiAgICAgICAgfQoj IDE3OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2lnbigg Y29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbkZyb21SZWFkYWJsZShhUmVhZGFi bGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVh ZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0 ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAgICAg IHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkg eyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2 b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hh cik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBhUmVh ZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZf dHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNzaWdu KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSgg Y29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsgfQog ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBlIGFDaGFyICkgeyBBc3NpZ24oYUNo YXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBzZWxm X3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0KICAg ICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApOwog ICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAoYVB0cikgZG9f QXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNo YXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50 UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjaGFyX3R5cGUg YUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAgc2VsZl90eXBl JiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFk YWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0 IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQoYVJlYWRhYmxlKTsgcmV0dXJuICp0 aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3QgY2hhcl90eXBlKiBhUHRy ICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJh dG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9 CiMgMjE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0 KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJ bnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAgICBpbmxpbmUg dm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0 UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5k ZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0cikgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIo YVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSog YVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBzaXplX3R5cGUgYUxlbmd0aCApIHsgZG9fSW5z ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYXRQb3NpdGlvbiwgYUxlbmd0aCk7IH0KICAg ICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hhciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkg eyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwgYXRQb3NpdGlvbik7IH0KCgoKICAgICAgdmly dHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCAp OwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBj dXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBSZXBsYWNlRnJvbVJlYWRh YmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFkYWJsZSk7IH0KCgogICAgcHJpdmF0ZToKCiAg ICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICkgY29uc3Q7 CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2 b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBvcGVyYXRv cis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFwcGVuZCAoIGluY29t cGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBpbmNvbXBhdGlibGVfY2hh cl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAgICAgICAgICAgICB2b2lk IEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZv aWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2 b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0 dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAg ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFy X3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVt ZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9tUmVhZGFibGUo IGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIEFwcGVuZEZyb21Qcm9taXNl KCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVh ZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZy b21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B cHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29uc3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7 CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggY2hhcl90eXBlICk7Cgog ICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp bmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9pZCBJbnNlcnRGcm9tUHJvbWlzZSggY29uc3Qg c2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJv bVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwg dm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlw ZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNv bnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZv aWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAg ICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwg Y29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgUmVwbGFjZUZyb21Qcm9taXNl KCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVh bCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29u c3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgY29uc3QgPSAwOwogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNo YXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAwOwogICAgICB2 aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBj b25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlzOyB9CiAgfTsKCmNsYXNzIG5zQUNTdHJpbmcK ICAgIDogcHVibGljIG5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBuc0FDU3RyaW5nIHNlbGZfdHlwZTsKICAgICAgdHlwZWRlZiBuc0FQcm9taXNl Q1N0cmluZyBwcm9taXNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRl ZiBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBl ZGVmIG5zV3JpdGluZ0l0ZXJhdG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVm IFBSVWludDMyIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoK CgoKCgogICAgICB2aXJ0dWFsIH5uc0FDU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3Rf aXRlcmF0b3ImIEJlZ2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlu bGluZSBjb25zdF9pdGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7 CgogICAgICBpbmxpbmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAg IGlubGluZSBpdGVyYXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFs IHNpemVfdHlwZSBMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29u c3QgeyByZXR1cm4gTGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMo IGNvbnN0IHNlbGZfdHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hh cl90eXBlKiApIGNvbnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAg ICAgIGNoYXJfdHlwZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBj aGFyX3R5cGUgKSBjb25zdDsKIyAzNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIK ICAgICAgc2l6ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAg ICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsK ICAgICAgc2l6ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgog ICAgICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIFBSVWludDMyIGFPZmZzZXQgPSAwICkg Y29uc3Q7CiMgMzU4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1 YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlICkgeyB9CiMgMzczICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRMZW5ndGgoIHNpemVfdHlw ZSApIHsgfQoKCiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUoIHNpemVfdHlwZSBhTmV3TGVuZ3Ro PTAgKQogICAgICAgIHsKICAgICAgICAgIGlmICghKGFOZXdMZW5ndGg8PXRoaXMtPkxlbmd0aCgp KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJDYW4ndCB1c2UgfFRydW5jYXRlKCl8IHRvIG1ha2UgYSBz dHJpbmcgbG9uZ2VyLiIsICJhTmV3TGVuZ3RoPD10aGlzLT5MZW5ndGgoKSIsICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNBU3RyaW5nLmgiLCAzNzkpOwoKICAgICAgICAgIGlmICggYU5ld0xlbmd0aCA8 IHRoaXMtPkxlbmd0aCgpICkKICAgICAgICAgICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAg ICAgIH0KIyA0MDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBB c3NpZ24oIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ25Gcm9tUmVhZGFibGUo YVJlYWRhYmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBc3NpZ24oIGNvbnN0IHByb21pc2VfdHlw ZSYgYVJlYWRhYmxlICk7CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIg KSB7IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsg fQogICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxl bmd0aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0K ICAgICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1l bnQoYUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlw ZSYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAg ICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7 IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVy YXRvcj0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRo aXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXNz aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKCgogICAgICB2b2lkIEFwcGVuZCggY29u c3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZEZyb21SZWFkYWJsZShhUmVhZGFibGUp OyB9CiAgICAgIGlubGluZSB2b2lkIEFwcGVuZCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFi bGUgKTsKICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgaWYgKGFQ dHIpIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBj b25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19BcHBlbmRGcm9t RWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFwcGVuZCggY2hh cl90eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hhcik7IH0KCiAgICAgIHNl bGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVu ZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9 KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJl dHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IGNoYXJfdHlw ZSogYVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBl JiBvcGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVuZChhQ2hhcik7IHJldHVybiAq dGhpczsgfQojIDQ0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lk IEluc2VydCggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlv biApIHsgSW5zZXJ0RnJvbVJlYWRhYmxlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7IH0KICAgICAg aW5saW5lIHZvaWQgSW5zZXJ0KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhf dHlwZSBhdFBvc2l0aW9uICk7CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5cGUqIGFQ dHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZyb21FbGVt ZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFy X3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5ndGggKSB7 IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFMZW5ndGgp OyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUgYXRQb3Np dGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9CgoKCiAg ICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRM ZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0LCBzaXpl X3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgUmVwbGFjZUZy b21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9CgoKICAgIHByaXZh dGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp IGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsK ICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQg b3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBcHBlbmQg KCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgSW5zZXJ0ICggaW5jb21wYXRp YmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAg ICAgdm9pZCBBc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg ICAgICB2b2lkIEFzc2lnbkZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp cnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aCggY29u c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25G cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJvbVJl YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9t UHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5k RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B cHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZv aWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVf dHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlw ZSApOwoKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90 eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVByb21pc2Uo IGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0lu c2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2 aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGlu ZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVu Z3RoKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmly dHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsK CiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXpl X3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9t UHJvbWlzZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg IHZpcnR1YWwgdm9pZCBkb19SZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5 cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy X3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn bWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsK ICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc2VsZl90eXBlJiBhU3Ry aW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07CgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0FQcm9taXNlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zQVByb21pc2VTdHJpbmcuaCIKY2xhc3MgbnNBUHJvbWlzZVN0cmluZyA6IHB1YmxpYyBu c0FTdHJpbmcgeyB9OwpjbGFzcyBuc0FQcm9taXNlQ1N0cmluZyA6IHB1YmxpYyBuc0FDU3RyaW5n IHsgfTsKIyA1MDkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKaW5saW5lCnZv aWQKbnNBU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVByb21pc2VTdHJpbmcmIGFSZWFkYWJsZSAp CiAgewogICAgQXNzaWduRnJvbVByb21pc2UoYVJlYWRhYmxlKTsKICB9CgppbmxpbmUKdm9pZApu c0FTdHJpbmc6OkFwcGVuZCggY29uc3QgbnNBUHJvbWlzZVN0cmluZyYgYVJlYWRhYmxlICkKICB7 CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlubGluZQp2b2lkCm5zQVN0 cmluZzo6SW5zZXJ0KCBjb25zdCBuc0FQcm9taXNlU3RyaW5nJiBhUmVhZGFibGUsIGluZGV4X3R5 cGUgYXRQb3NpdGlvbiApCiAgewogICAgSW5zZXJ0RnJvbVByb21pc2UoYVJlYWRhYmxlLCBhdFBv c2l0aW9uKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVBy b21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFzc2lnbkZyb21Qcm9taXNlKGFSZWFk YWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6QXBwZW5kKCBjb25zdCBuc0FQcm9t aXNlQ1N0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFi bGUpOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6Okluc2VydCggY29uc3QgbnNBUHJvbWlz ZUNTdHJpbmcmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkKICB7CiAgICBJbnNl cnRGcm9tUHJvbWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOwogIH0KCgoKCgppbmxpbmUKbnNB U3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0 ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0 aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJh Z21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7 CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9 CgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpFbmRSZWFkaW5n KCBjb25zdF9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgewogICAgYVJlc3VsdC5tT3duaW5n U3RyaW5nID0gdGhpczsKICAgIEdldFJlYWRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQs IGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVu dC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6Oml0ZXJh dG9yJgpuc0FTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3ImIGFSZXN1bHQgKQogIHsKICAg IGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRXcml0YWJsZUZyYWdtZW50KGFS ZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9 IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQo KTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNBU3RyaW5nOjppdGVyYXRvciYK bnNBU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3Vs dC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5t RnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0 Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmNsYXNzIG5zU3RyaW5n Q29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSgg Y29uc3QgUFJVbmljaGFyKiwgY29uc3QgUFJVbmljaGFyKiwgUFJVaW50MzIgYUxlbmd0aCApIGNv bnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJs aWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBv cGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBh TGVuZ3RoICkgY29uc3Q7CiAgfTsKCmNsYXNzIG5zQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFy YXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAg ICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNo YXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSgg Y29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzLCBjb25zdCBuc1N0cmlu Z0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigpICk7CgppbmxpbmUKUFJC b29sCm5zQVN0cmluZzo6RXF1YWxzKCBjb25zdCBzZWxmX3R5cGUmIHJocyApIGNvbnN0CiAgewog ICAgcmV0dXJuIExlbmd0aCgpPT1yaHMuTGVuZ3RoKCkgJiYgQ29tcGFyZSgqdGhpcywgcmhzKT09 MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQVN0cmluZyYgbGhzLCBj b25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuICFsaHMuRXF1YWxzKHJocyk7CiAg fQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3Qg bnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9 CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQVN0cmluZyYgbGhzLCBjb25zdCBu c0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPD0wOwogIH0K CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5z QVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFscyhyaHMpOwogIH0KCmlubGlu ZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmlu ZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5saW5l ClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5n JiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKT4gMDsKICB9CgppbmxpbmUK bnNBU3RyaW5nOjpzaXplX3R5cGUKbnNBU3RyaW5nOjpMZWZ0KCBuc0FTdHJpbmcmIGFSZXN1bHQs IHNpemVfdHlwZSBhTGVuZ3RoVG9Db3B5ICkgY29uc3QKICB7CiAgICByZXR1cm4gTWlkKGFSZXN1 bHQsIDAsIGFMZW5ndGhUb0NvcHkpOwogIH0KCgoKCgoKaW5saW5lCm5zQUNTdHJpbmc6OmNvbnN0 X2l0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVz dWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0 UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAg YVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0 Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNB Q1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0 ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0 aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFn bWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7Cgog ICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FD U3RyaW5nOjpCZWdpbldyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBhUmVzdWx0 Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVzdWx0Lm1G cmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0 Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICBy ZXR1cm4gYVJlc3VsdDsKICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3Ry aW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3du aW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21l bnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFn bWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgpjbGFzcyBuc0NTdHJpbmdDb21w YXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25z dCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7CiAgfTsK CmNsYXNzIG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdD b21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBj b25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoK Y2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnND U3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0 b3IoKSggY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7 CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu c0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0 cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5lClBSQm9vbApuc0FDU3RyaW5nOjpFcXVhbHMoIGNv bnN0IHNlbGZfdHlwZSYgcmhzICkgY29uc3QKICB7CiAgICByZXR1cm4gTGVuZ3RoKCk9PXJocy5M ZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3Bl cmF0b3IhPSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQog IHsKICAgIHJldHVybiAhbGhzLkVxdWFscyhyaHMpOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0 b3I8ICggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsK ICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJh dG9yPD0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7 CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVy YXRvcj09KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAg ewogICAgcmV0dXJuIGxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9y Pj0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAg ICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRv cj4gKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewog ICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwogIH0KCmlubGluZQpuc0FDU3RyaW5nOjpz aXplX3R5cGUKbnNBQ1N0cmluZzo6TGVmdCggbnNBQ1N0cmluZyYgYVJlc3VsdCwgc2l6ZV90eXBl IGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVybiBNaWQoYVJlc3VsdCwgMCwgYUxl bmd0aFRvQ29weSk7CiAgfQoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudENv bmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25j YXRlbmF0aW9uLmgiCmNsYXNzIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMg bnNBUHJvbWlzZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVu dENvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHN0 cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1Jl YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp IGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNX cml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg KSB7IHJldHVybiAwOyB9CgogICAgICBlbnVtIHsga0xlZnRTdHJpbmcsIGtSaWdodFN0cmluZyB9 OwoKICAgICAgaW50CiAgICAgIEdldEN1cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IG5z UmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsK ICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDwgUFJVcHRyZGlmZiA+KGFGcmFnbWVu dC5tRnJhZ21lbnRJZGVudGlmaWVyKSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdo dFN0cmluZyA6IGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0 U3RyaW5nSW5GcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVu dCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZp ZXIgPSByZWludGVycHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVXB0cmRp ZmYgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiB+bUZyYWdtZW50SWRlbnRpZmll ck1hc2spOwogICAgICAgICAgcmV0dXJuIGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGlu dAogICAgICBTZXRSaWdodFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy X3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGFGcmFnbWVudC5t RnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCogPihyZWludGVycHJl dF9jYXN0PCBQUlVwdHJkaWZmID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpIHwgbUZy YWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtSaWdodFN0cmluZzsKICAg ICAgICB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24oIGNvbnN0 IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmlu ZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1h c2soYU1hc2spCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFM ZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJp bmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uKCBjb25zdCBzZWxm X3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdfdHlwZSYgYVJpZ2h0U3RyaW5nICkKICAg ICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYUxlZnRTdHJpbmcubUZyYWdtZW50SWRl bnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmdd ID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmln aHRTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9y PSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgUFJVaW50 MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNv bnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAgICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJ ZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOyB9 CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRvcisoIGNvbnN0IHNlbGZfdHlwZSYgKTsK CgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlKiBtU3RyaW5nc1syXTsKICAg ICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1hc2s7CiAgfTsKCmNsYXNzIG5zRGVwZW5k ZW50Q0NvbmNhdGVuYXRpb24KICAgIDogcHVibGljIG5zQVByb21pc2VDU3RyaW5nCiAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBl OwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcg c3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNv bnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+Jiwg bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYs IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0KCiAgICAgIGVudW0g eyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07CgogICAgICBpbnQKICAgICAgR2V0Q3VycmVu dFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChyZWludGVycHJl dF9jYXN0PCBQUlVwdHJkaWZmID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgbUZy YWdtZW50SWRlbnRpZmllck1hc2spID8ga1JpZ2h0U3RyaW5nIDoga0xlZnRTdHJpbmc7CiAgICAg ICAgfQoKICAgICAgaW50CiAgICAgIFNldExlZnRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxl RnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAg ICBhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQq ID4ocmVpbnRlcnByZXRfY2FzdDwgUFJVcHRyZGlmZiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVu dGlmaWVyKSAmIH5tRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xl ZnRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFn bWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAg ICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVy cHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVXB0cmRpZmYgPihhRnJhZ21l bnQubUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAg ICAgICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIG5z RGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywg Y29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAg ICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAg ICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmlu Z3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBl bmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBhTGVmdFN0cmluZywgY29uc3Qg c3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZyApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZp ZXJNYXNrKGFMZWZ0U3RyaW5nLm1GcmFnbWVudElkZW50aWZpZXJNYXNrPDwxKQogICAgICAgIHsK ICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5nXSA9ICZhTGVmdFN0cmluZzsKICAgICAgICAg IG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJpZ2h0U3RyaW5nOwogICAgICAgIH0KCgoKCiAg ICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAg ICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2 aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25zdDsK CgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmllck1hc2soKSBjb25zdCB7IHJl dHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQg b3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwcml2YXRlOgogICAgICBjb25z dCBzdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAgIFBSVWludDMyIG1GcmFnbWVudElkZW50 aWZpZXJNYXNrOwogIH07CiMgMjI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25j YXRlbmF0aW9uLmgiCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0 b3IrKCBjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24mIGxocywgY29uc3QgbnNBU3RyaW5n JiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMs IGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8PDEpOwogIH0KCmlubGluZQpjb25zdCBu c0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNEZXBlbmRlbnRDQ29u Y2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBu c0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywgcmhzLCBsaHMuR2V0RnJhZ21lbnRJZGVudGlm aWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9u Cm9wZXJhdG9yKyggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkK ICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uKGxocywgcmhzKTsKICB9Cgpp bmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0IG5z QUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNE ZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbihsaHMsIHJocyk7CiAgfQojIDgxMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zQVN0cmluZy5oIiAyCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJs ZVN0cmluZy5oIiAyCgoKdHlwZWRlZiBjb25zdCBuc0FTdHJpbmcgbnNBUmVhZGFibGVTdHJpbmc7 CnR5cGVkZWYgY29uc3QgbnNBQ1N0cmluZyBuc0FSZWFkYWJsZUNTdHJpbmc7CgoKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAiLi4vLi4vZGlzdC9pbmNs dWRlL25zTGl0ZXJhbFN0cmluZy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVu dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0cmluZy5o IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FGbGF0U3RyaW5nLmgiIDEKIyAzMyAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxhdFN0cmluZwogICAgOiBw dWJsaWMgbnNBU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBjb25zdCBQUlVu aWNoYXIqIGdldCgpIGNvbnN0OwogICAgICBQUlVuaWNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIg aSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgUFJVbmljaGFyIENoYXJBdCgg UFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7 CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxl RnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVl c3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJs ZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1 ZXN0LCBQUlVpbnQzMiApOwogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMg bnNBQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogZ2V0 KCkgY29uc3Q7CiAgICAgIGNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgcmV0 dXJuIGdldCgpWyBpIF07IH0KICAgICAgY2hhciBDaGFyQXQoIFBSVWludDMyICkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAgICBwdWJsaWM6CiAgICAg IHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdt ZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZp cnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXI+ JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlubGluZQpQUlVuaWNoYXIK bnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBpICkgY29uc3QKICB7CiAgICBpZiAoIShp PExlbmd0aCgpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJ8Q2hhckF0fCBvdXQtb2YtcmFuZ2UiLCAi aTxMZW5ndGgoKSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBRmxhdFN0cmluZy5oIiwgNzEpOwog ICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQoKaW5saW5lCmNoYXIKbnNBRmxhdENTdHJpbmc6 OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAgaWYgKCEoaTxMZW5ndGgoKSkpIG5z RGVidWc6OkFzc2VydGlvbigifENoYXJBdHwgb3V0LW9mLXJhbmdlIiwgImk8TGVuZ3RoKCkiLCAi Li4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIsIDc5KTsKICAgIHJldHVybiBvcGVy YXRvcltdKGkpOwogIH0KIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3RyaW5n LmgiIDIKIyA0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3RyaW5nLmgiCmNsYXNz IG5zRGVwZW5kZW50U3RyaW5nCiAgICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcKICB7CiAgICBw dWJsaWM6CiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBQUlVuaWNoYXIqIGFQdHIgKQog ICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwogICAgICAgICAgbUhh bmRsZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8UFJVbmljaGFyPjo6bGVuZ3Ro KGFQdHIpKSA6IDApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBQ UlVuaWNoYXIqIGFTdGFydFB0ciwgY29uc3QgUFJVbmljaGFyKiBhRW5kUHRyICkKICAgICAgICB7 CiAgICAgICAgICBtSGFuZGxlLkRhdGFTdGFydChhU3RhcnRQdHIpOwogICAgICAgICAgbUhhbmRs ZS5EYXRhRW5kKGFFbmRQdHIpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBj b25zdCBQUlVuaWNoYXIqIGFQdHIsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAg ICAgIGlmICggYUxlbmd0aCA9PSBQUlVpbnQzMigtMSkgKQogICAgICAgICAgICB7CgogICAgICAg ICAgICAgIFJlYmluZChhUHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICBSZWJpbmQoYVB0ciwgYVB0cithTGVuZ3RoKTsKICAgICAgICB9CgogICAgICBuc0RlcGVu ZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhU3RhcnRQdHIsIGNvbnN0IFBSVW5pY2hhciog YUVuZFB0ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBlbmRl bnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVB0ciwgUFJVaW50MzIgYUxlbmd0aCApIHsgUmVi aW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxpY2l0IG5zRGVwZW5kZW50U3RyaW5nKCBj b25zdCBQUlVuaWNoYXIqIGFQdHIgKSB7IFJlYmluZChhUHRyKTsgfQoKCgoKICAgIHByaXZhdGU6 CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBlbmRlbnRTdHJpbmcmICk7CgogICAg cHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qIEdl dEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25z dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiA+KCZtSGFuZGxlKTsgfQogICAgICB2aXJ0dWFs IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0 IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hh cj4qID4oJm1IYW5kbGUpOyB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDb25zdEJ1ZmZlckhhbmRs ZTxQUlVuaWNoYXI+IG1IYW5kbGU7CiAgfTsKCgoKY2xhc3MgbnNEZXBlbmRlbnRDU3RyaW5nCiAg ICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB2b2lkCiAg ICAgIFJlYmluZCggY29uc3QgY2hhciogYVB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRs ZS5EYXRhU3RhcnQoYVB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRy K25zQ2hhclRyYWl0czxjaGFyPjo6bGVuZ3RoKGFQdHIpKSA6IDApOwogICAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXIqIGFF bmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0cik7 CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAgdm9p ZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIqIGFQdHIsIFBSVWludDMyIGFMZW5ndGggKQogICAg ICAgIHsKICAgICAgICAgIGlmICggYUxlbmd0aCA9PSBQUlVpbnQzMigtMSkgKQogICAgICAgICAg ICB7CgogICAgICAgICAgICAgIFJlYmluZChhUHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAg ZWxzZQogICAgICAgICAgICBSZWJpbmQoYVB0ciwgYVB0cithTGVuZ3RoKTsKICAgICAgICB9Cgog ICAgICBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFTdGFydFB0ciwgY29uc3QgY2hh ciogYUVuZFB0ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBl bmRlbnRDU3RyaW5nKCBjb25zdCBjaGFyKiBhUHRyLCBQUlVpbnQzMiBhTGVuZ3RoICkgeyBSZWJp bmQoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgZXhwbGljaXQgbnNEZXBlbmRlbnRDU3RyaW5nKCBj b25zdCBjaGFyKiBhUHRyICkgeyBSZWJpbmQoYVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAg ICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zRGVwZW5kZW50Q1N0cmluZyYgKTsKCiAgICBwdWJs aWM6CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEZsYXRCdWZm ZXJIYW5kbGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0J1ZmZl ckhhbmRsZTxjaGFyPiogPigmbUhhbmRsZSk7IH0KICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZl ckhhbmRsZTxjaGFyPiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy ZXRfY2FzdDwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qID4oJm1IYW5kbGUpOyB9CgogICAg cHJpdmF0ZToKICAgICAgbnNDb25zdEJ1ZmZlckhhbmRsZTxjaGFyPiBtSGFuZGxlOwogIH07CiMg MzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0xpdGVyYWxTdHJpbmcuaCIgMgojIDM4ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0RlcGVuZGVudFN1YnN0cmluZy5oIiAxCiMgNDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0RlcGVuZGVudFN1YnN0cmluZy5oIgpjbGFzcyBuc0RlcGVuZGVudFN1YnN0cmluZwogICAgICA6 IHB1YmxpYyBuc0FQcm9taXNlU3RyaW5nCiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVu ZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwog ICAgdHlwZWRlZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Cgog ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciogR2V0UmVhZGFibGVG cmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVz dCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxl RnJhZ21lbnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVl c3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBlbmRl bnRTdWJzdHJpbmcoIGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQ b3MsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAg ICAgICAgICBtU3RhcnRQb3MoIE5TX01JTihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICks CiAgICAgICAgICAgIG1MZW5ndGgoIE5TX01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1T dGFydFBvcykgKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdWJzdHJp bmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhU3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBh RW5kICkKICAgICAgICAgIDogbVN0cmluZyhhU3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAg ICAgICAgY29uc3RfaXRlcmF0b3IgemVyb1BvaW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJl YWRpbmcoemVyb1BvaW50KTsKICAgICAgICAgIG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2lu dCwgYVN0YXJ0KTsKICAgICAgICAgIG1MZW5ndGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwog ICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5z RGVwZW5kZW50U3Vic3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBQUlVpbnQz MiBMZW5ndGgoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29u c3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLklzRGVwZW5k ZW50T24oYVN0cmluZyk7IH0KCiAgICBwcml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSYg bVN0cmluZzsKICAgICAgUFJVaW50MzIgbVN0YXJ0UG9zOwogICAgICBQUlVpbnQzMiBtTGVuZ3Ro OwogIH07CgpjbGFzcyBuc0RlcGVuZGVudENTdWJzdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBUHJv bWlzZUNTdHJpbmcKIyAxMDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN1YnN0cmlu Zy5oIgogIHsKICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYg c3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3Rl ZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRh YmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsK ICAgICAgdmlydHVhbCBjaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21l bnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9Cgog ICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IHN0cmluZ190eXBl JiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAg ICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3RhcnRQb3MoIE5TX01JTihhU3Rh cnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAgIG1MZW5ndGgoIE5TX01JTihh TGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQogICAgICAgIHsKCiAgICAgICAg fQoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVyYXRvciYgYVN0 YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0 YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHplcm9Qb2lu dDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAgICAgICAgICBt U3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAgICBtTGVuZ3Ro ID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAg ICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0RlcGVuZGVudENTdWJzdHJpbmcmICk7CgogICAg cHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0 dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJpbmdfdHlwZSYgYVN0cmluZyApIGNv bnN0IHsgcmV0dXJuIG1TdHJpbmcuSXNEZXBlbmRlbnRPbihhU3RyaW5nKTsgfQoKICAgIHByaXZh dGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQzMiBtU3Rh cnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCgoKCgoKCmlubGluZQpjb25zdCBu c0RlcGVuZGVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5n LCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAg IHJldHVybiBuc0RlcGVuZGVudENTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3Ry aW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3Ry aW5nKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50 MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5n KGFTdHJpbmcsIGFTdGFydFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0 IG5zRGVwZW5kZW50Q1N1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9y PGNoYXI+JiBhU3RhcnQsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiBhRW5kICkKICB7 CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdGFydCwgYUVuZCk7CiAgfQoKaW5s aW5lCmNvbnN0IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFkaW5n SXRlcmF0b3I8UFJVbmljaGFyPiYgYVN0YXJ0LCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQUlVu aWNoYXI+JiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJpbmcoYVN0YXJ0 LCBhRW5kKTsKICB9CiMgNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5o IiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRTdHJpbmcuaCIgMQoj IDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0cmluZy5oIgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc1NoYXJhYmxlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zU2hhcmFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJI YW5kbGVVdGlscy5oIiAxCiMgMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0 aWxzLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5o IiAxIDMKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIgMgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQXV0b0J1ZmZlckhhbmRsZQogIHsKICAg IHB1YmxpYzoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCkgOiBtSGFuZGxlKDApIHsgfQoKICAg ICAgbnNBdXRvQnVmZmVySGFuZGxlKCBjb25zdCBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JiBh T3RoZXIgKQogICAgICAgICAgOiBtSGFuZGxlKGFPdGhlci5nZXQoKSkKICAgICAgICB7CiAgICAg ICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAgICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNl KCk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCBj b25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIGFIYW5kbGUgKQogICAgICAgICAgOiBt SGFuZGxlKCBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4oYUhhbmRs ZSkgKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5k bGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAgIH5uc0F1dG9CdWZmZXJIYW5k bGUoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5k bGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5k bGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPENo YXJUPiogcmhzICkKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFy VD4qIG9sZF9oYW5kbGUgPSBtSGFuZGxlOwogICAgICAgICAgaWYgKCAobUhhbmRsZSA9IGNvbnN0 X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihyaHMpKSApCiAgICAgICAgICAg IG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICAgIGlmICggb2xkX2hhbmRsZSAp CiAgICAgICAgICAgIG9sZF9oYW5kbGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+Jgog ICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIHJocyApCiAg ICAgICAgewogICAgICAgICAgcmV0dXJuIG9wZXJhdG9yPShyaHMuZ2V0KCkpOwogICAgICAgIH0K CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPioKICAgICAgZ2V0KCkgY29uc3QKICAg ICAgICB7CiAgICAgICAgICByZXR1cm4gbUhhbmRsZTsKICAgICAgICB9CgogICAgICBvcGVyYXRv ciBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qKCkgY29uc3QKICAgICAgICB7CiAgICAgICAg ICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hh clQ+KgogICAgICBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g Z2V0KCk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxl PENoYXJUPiogbUhhbmRsZTsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBD aGFyVD4KaW5saW5lCnNpemVfdApOU19BbGlnbmVkSGFuZGxlU2l6ZSggY29uc3QgSGFuZGxlVCos IGNvbnN0IENoYXJUKiApCiAgewoKICAgIHJldHVybiAoKHNpemVvZihIYW5kbGVUKSArIHNpemVv ZihDaGFyVCkgLSAxKSAvIHNpemVvZihDaGFyVCkpICogc2l6ZW9mKENoYXJUKTsKICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgQ2hhclQ+CmlubGluZQpjb25zdCBDaGFyVCoKTlNf RGF0YUFmdGVySGFuZGxlKCBjb25zdCBIYW5kbGVUKiBhSGFuZGxlUHRyLCBjb25zdCBDaGFyVCog YUR1bW15Q2hhclRQdHIgKQogIHsKICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIENoYXJUX3B0cjsK ICAgIHJldHVybiBDaGFyVF9wdHIoc3RhdGljX2Nhc3Q8IGNvbnN0IHVuc2lnbmVkIGNoYXIqID4o YUhhbmRsZVB0cikgKyBOU19BbGlnbmVkSGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFy VFB0cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5l CkNoYXJUKgpOU19EYXRhQWZ0ZXJIYW5kbGUoIEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENo YXJUKiBhRHVtbXlDaGFyVFB0ciApCiAgewogICAgdHlwZWRlZiBDaGFyVCogQ2hhclRfcHRyOwog ICAgcmV0dXJuIENoYXJUX3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihhSGFuZGxl UHRyKSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7 CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0cmluZ1Q+CkhhbmRsZVQqCk5T X0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlI YW5kbGVQdHIsIFBSVWludDMyIGFBZGRpdGlvbmFsQ2FwYWNpdHksIGNvbnN0IFN0cmluZ1QqIGFE YXRhU291cmNlICkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFN0cmluZ1Q6OmNoYXJfdHlwZSBj aGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9wdHI7CgoKICAgIHNpemVfdCBo YW5kbGVfc2l6ZSA9IE5TX0FsaWduZWRIYW5kbGVTaXplKGFEdW1teUhhbmRsZVB0ciwgY2hhcl9w dHIoMCkpOwoKCiAgICBzaXplX3QgZGF0YV9sZW5ndGggPSBhRGF0YVNvdXJjZT8gYURhdGFTb3Vy Y2UtPkxlbmd0aCgpIDogMDsKICAgIHNpemVfdCBidWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGgg KyBhQWRkaXRpb25hbENhcGFjaXR5OwoKCiAgICBzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJf bGVuZ3RoICogc2l6ZW9mKGNoYXJfdHlwZSk7CgoKICAgIEhhbmRsZVQqIHJlc3VsdCA9IDA7CiAg ICB2b2lkKiBoYW5kbGVfcHRyID0gOjpvcGVyYXRvciBuZXcoaGFuZGxlX3NpemUgKyBidWZmZXJf c2l6ZSk7CgogICAgaWYgKCBoYW5kbGVfcHRyICkKICAgICAgewogICAgICAgIGNoYXJfcHRyIGRh dGFfc3RhcnRfcHRyID0gY2hhcl9wdHIoc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIqID4oaGFu ZGxlX3B0cikgKyBoYW5kbGVfc2l6ZSk7CiAgICAgICAgY2hhcl9wdHIgZGF0YV9lbmRfcHRyID0g ZGF0YV9zdGFydF9wdHIgKyBkYXRhX2xlbmd0aDsKICAgICAgICBjaGFyX3B0ciBidWZmZXJfZW5k X3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgYnVmZmVyX2xlbmd0aDsKCiAgICAgICAgY2hhcl9wdHIg dG9CZWdpbiA9IGRhdGFfc3RhcnRfcHRyOwoKICAgICAgICBpZiAoIGRhdGFfbGVuZ3RoICkKICAg ICAgICAgIHsKICAgICAgICAgICAgdHlwZW5hbWUgU3RyaW5nVDo6Y29uc3RfaXRlcmF0b3IgZnJv bUJlZ2luLCBmcm9tRW5kOwogICAgICAgICAgICBjb3B5X3N0cmluZyhhRGF0YVNvdXJjZS0+QmVn aW5SZWFkaW5nKGZyb21CZWdpbiksIGFEYXRhU291cmNlLT5FbmRSZWFkaW5nKGZyb21FbmQpLCB0 b0JlZ2luKTsKICAgICAgICAgIH0KCgogICAgICAgIGlmICggYUFkZGl0aW9uYWxDYXBhY2l0eSA+ IDAgKQogICAgICAgICAgKnRvQmVnaW4gPSBjaGFyX3R5cGUoMCk7CgogICAgICAgIHJlc3VsdCA9 IG5ldyAoaGFuZGxlX3B0cikgSGFuZGxlVChkYXRhX3N0YXJ0X3B0ciwgZGF0YV9lbmRfcHRyLCBk YXRhX3N0YXJ0X3B0ciwgYnVmZmVyX2VuZF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJl c3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5l CkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5k bGVUKiBhRHVtbXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQz MiBhQWRkaXRpb25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1 b3VzSGFuZGxlV2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAm YURhdGFTb3VyY2UpOwogIH0KIyAzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJp bmcuaCIgMgojIDQ0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgpjbGFz cyBuc1NoYXJhYmxlU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIG5zU2hhcmFibGVTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBl ZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190 eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyYWJsZVN0cmluZygpIHsgfQogICAgICBuc1No YXJhYmxlU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIu bUJ1ZmZlcikgeyB9CiAgICAgIGV4cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IHN0cmlu Z190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CiAgICAgIGV4cGxpY2l0 IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4q IGFIYW5kbGUgKSA6IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAg IG9wZXJhdG9yPSggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAg ICAgICAgYXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg fQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiAp OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdl dFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1 ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKCgpjbGFzcyBuc1NoYXJhYmxlQ1N0 cmluZwogICAgOiBwdWJsaWMgbnNBRmxhdENTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgbnNTaGFyYWJsZUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CgogICAgcHVibGlj OgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygpIHsgfQogICAgICBuc1NoYXJhYmxlQ1N0cmluZygg Y29uc3Qgc2VsZl90eXBlJiBhT3RoZXIgKSA6IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQog ICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFk YWJsZSApIHsgYXNzaWduKGFSZWFkYWJsZSk7IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNT dHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6 IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSgg Y29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWdu KGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3Rl Y3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0 dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZl ckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxj aGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlz ZUZsYXRTdHJpbmcuaCIgMgojIDgzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0 cmluZy5oIgpjbGFzcyBuc1Byb21pc2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3Ry aW5nCiAgewogICAgZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRT dHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZs YXRTdHJpbmcoIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgog ICAgICBuc1Byb21pc2VGbGF0U3RyaW5nKCkgOiBtUHJvbWlzZWRTdHJpbmcoJm1GbGF0dGVuZWRT dHJpbmcpIHsgfQogICAgICBleHBsaWNpdCBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FT dHJpbmcmIGFTdHJpbmcgKTsKCgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBS VW5pY2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg ICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRTaGFy ZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRP biggY29uc3QgbnNBU3RyaW5nJiApIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFs IGNvbnN0IFBSVW5pY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVu Z3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFy KiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5z RnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwoKCiAgICBwcml2YXRlOgoKICAgICAg dm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJpdmF0 ZToKICAgICAgbnNTaGFyYWJsZVN0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25zdCBu c0FGbGF0U3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsKCmNsYXNzIG5zUHJvbWlzZUZsYXRD U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBu c1Byb21pc2VGbGF0Q1N0cmluZyBQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcm ICk7CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNQcm9t aXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VGbGF0Q1N0 cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhw bGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsK CgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVmZmVy SGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4q IEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVm ZmVySGFuZGxlPGNoYXI+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmly dHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3QgbnNBQ1N0cmluZyYgKSBjb25zdDsKCgoK ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdDsKICAgICAg dmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8 Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKCgogICAgcHJpdmF0 ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1Byb21pc2VGbGF0Q1N0cmluZyYgKTsK CiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlQ1N0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwog ICAgICBjb25zdCBuc0FGbGF0Q1N0cmluZyogbVByb21pc2VkU3RyaW5nOwogIH07CgoKaW5saW5l CmNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcKUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IG5zQVN0 cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUZsYXRTdHJpbmcoYVN0cmlu Zyk7CiAgfQoKaW5saW5lCmNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nClByb21pc2VGbGF0Q1N0 cmluZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlz ZUZsYXRDU3RyaW5nKGFTdHJpbmcpOwogIH0KIyA0NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJl YWRhYmxlU3RyaW5nLmgiIDIKIyAzMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3Ry aW5nLmgiIDIKCgp0eXBlZGVmIG5zQVN0cmluZyBuc0FXcml0YWJsZVN0cmluZzsKdHlwZWRlZiBu c0FDU3RyaW5nIG5zQVdyaXRhYmxlQ1N0cmluZzsKIyAyMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SUF0b20uaCIgMgojIDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lB dG9tIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkMWIxNWIwLCAweDkzYjQs IDB4MTFkMSwgeyAweDg5LCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgx IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNBV3Jp dGFibGVTdHJpbmcgJiBhU3RyaW5nKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVu aWNvZGUoY29uc3QgUFJVbmljaGFyICoqYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciAqYUhhbmRsZXIsIFBSVWludDMyICpfcmV0dmFs KSA9IDA7Cgp9OwojIDEyNSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIKZXh0ZXJuIG5z SUF0b20qIE5TX05ld0F0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKTsKCgoKCmV4dGVybiBuc0lB dG9tKiBOU19OZXdBdG9tKGNvbnN0IFBSVW5pY2hhciogdW5pY29kZSk7CgoKCmV4dGVybiBuc0lB dG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKCgoKCmV4 dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJPZkF0b21zKHZvaWQpOwpleHRlcm4gdm9pZCBOU19Q dXJnZUF0b21UYWJsZSh2b2lkKTsKIyA1MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5o IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDEKIyAxOTEgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1N0ci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDE5 MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNNZW1vcnkuaCIgMQojIDE5MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIv dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDE5NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry LmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAv aW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxOTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAy CiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAx CiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIK IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BsaGFzaC5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u c3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl L25zcHIvcGxoYXNoLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoRW50 cnkgUExIYXNoRW50cnk7CnR5cGVkZWYgc3RydWN0IFBMSGFzaFRhYmxlIFBMSGFzaFRhYmxlOwp0 eXBlZGVmIFBSVWludDMyIFBMSGFzaE51bWJlcjsKCnR5cGVkZWYgUExIYXNoTnVtYmVyICggKlBM SGFzaEZ1bmN0aW9uKShjb25zdCB2b2lkICprZXkpOwp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hD b21wYXJhdG9yKShjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpOwoKCgoKdHlwZWRlZiBQ UkludG4gKCAqUExIYXNoRW51bWVyYXRvcikoUExIYXNoRW50cnkgKmhlLCBQUkludG4gaSwgdm9p ZCAqYXJnKTsKIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs aGFzaC5oIgp0eXBlZGVmIHN0cnVjdCBQTEhhc2hBbGxvY09wcyB7CiAgICB2b2lkICogKCAqYWxs b2NUYWJsZSkodm9pZCAqcG9vbCwgUFJTaXplIHNpemUpOwogICAgdm9pZCAoICpmcmVlVGFibGUp KHZvaWQgKnBvb2wsIHZvaWQgKml0ZW0pOwogICAgUExIYXNoRW50cnkgKiAoICphbGxvY0VudHJ5 KSh2b2lkICpwb29sLCBjb25zdCB2b2lkICprZXkpOwogICAgdm9pZCAoICpmcmVlRW50cnkpKHZv aWQgKnBvb2wsIFBMSGFzaEVudHJ5ICpoZSwgUFJVaW50biBmbGFnKTsKfSBQTEhhc2hBbGxvY09w czsKCgoKCnN0cnVjdCBQTEhhc2hFbnRyeSB7CiAgICBQTEhhc2hFbnRyeSAqbmV4dDsKICAgIFBM SGFzaE51bWJlciBrZXlIYXNoOwogICAgY29uc3Qgdm9pZCAqa2V5OwogICAgdm9pZCAqdmFsdWU7 Cn07CgpzdHJ1Y3QgUExIYXNoVGFibGUgewogICAgUExIYXNoRW50cnkgKipidWNrZXRzOwogICAg UFJVaW50MzIgbmVudHJpZXM7CiAgICBQUlVpbnQzMiBzaGlmdDsKICAgIFBMSGFzaEZ1bmN0aW9u IGtleUhhc2g7CiAgICBQTEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmU7CiAgICBQTEhhc2hDb21w YXJhdG9yIHZhbHVlQ29tcGFyZTsKICAgIGNvbnN0IFBMSGFzaEFsbG9jT3BzICphbGxvY09wczsK ICAgIHZvaWQgKmFsbG9jUG9vbDsKCgoKCgoKfTsKCgoKCgpleHRlcm4gUExIYXNoVGFibGUgKgpQ TF9OZXdIYXNoVGFibGUoUFJVaW50MzIgbnVtQnVja2V0cywgUExIYXNoRnVuY3Rpb24ga2V5SGFz aCwKICAgICAgICAgICAgICAgIFBMSGFzaENvbXBhcmF0b3Iga2V5Q29tcGFyZSwgUExIYXNoQ29t cGFyYXRvciB2YWx1ZUNvbXBhcmUsCiAgICAgICAgICAgICAgICBjb25zdCBQTEhhc2hBbGxvY09w cyAqYWxsb2NPcHMsIHZvaWQgKmFsbG9jUG9vbCk7CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVE ZXN0cm95KFBMSGFzaFRhYmxlICpodCk7CgoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRh YmxlQWRkKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7Cgpl eHRlcm4gUFJCb29sClBMX0hhc2hUYWJsZVJlbW92ZShQTEhhc2hUYWJsZSAqaHQsIGNvbnN0IHZv aWQgKmtleSk7CgpleHRlcm4gdm9pZCAqClBMX0hhc2hUYWJsZUxvb2t1cChQTEhhc2hUYWJsZSAq aHQsIGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gdm9pZCAqClBMX0hhc2hUYWJsZUxvb2t1cENv bnN0KFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQUkludG4KUExf SGFzaFRhYmxlRW51bWVyYXRlRW50cmllcyhQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudW1lcmF0 b3IgZiwgdm9pZCAqYXJnKTsKCgpleHRlcm4gUExIYXNoTnVtYmVyClBMX0hhc2hTdHJpbmcoY29u c3Qgdm9pZCAqa2V5KTsKCgpleHRlcm4gUFJJbnRuClBMX0NvbXBhcmVTdHJpbmdzKGNvbnN0IHZv aWQgKnYxLCBjb25zdCB2b2lkICp2Mik7CgoKZXh0ZXJuIFBSSW50bgpQTF9Db21wYXJlVmFsdWVz KGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Mik7CgoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoq ClBMX0hhc2hUYWJsZVJhd0xvb2t1cChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlI YXNoLCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoqClBMX0hhc2hUYWJs ZVJhd0xvb2t1cENvbnN0KFBMSGFzaFRhYmxlICpodCwgUExIYXNoTnVtYmVyIGtleUhhc2gsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUExIYXNo RW50cnkgKgpQTF9IYXNoVGFibGVSYXdBZGQoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnRyeSAq KmhlcCwgUExIYXNoTnVtYmVyIGtleUhhc2gsCiAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk ICprZXksIHZvaWQgKnZhbHVlKTsKCmV4dGVybiB2b2lkClBMX0hhc2hUYWJsZVJhd1JlbW92ZShQ TEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudHJ5ICoqaGVwLCBQTEhhc2hFbnRyeSAqaGUpOwoKCmV4 dGVybiBQUkludG4KUExfSGFzaFRhYmxlRHVtcChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudW1l cmF0b3IgZHVtcCwgRklMRSAqZnApOwoKfQojIDE5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry LmgiIDIKCgoKZW51bSBlQ2hhclNpemUge2VPbmVCeXRlPTAsZVR3b0J5dGU9MX07CgoKCgoKCgpj b25zdCBQUkludDMyIGtEZWZhdWx0U3RyaW5nU2l6ZSA9IDY0Owpjb25zdCBQUkludDMyIGtOb3RG b3VuZCA9IC0xOwoKCgoKY2xhc3MgQ0J1ZkRlc2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRlc2Ny aXB0b3IoY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0 eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFTdHJp bmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3Ro PS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVuaWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tC YXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3Jp cHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMy IGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVDaGFy U2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIgbUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0aDsK ICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJCb29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0IG5z U3RyIHsKCiAgbnNTdHIoKSB7CiAgICBkbyB7IG5zVHJhY2VSZWZjbnQ6OkxvZ0N0b3IoKHZvaWQq KXRoaXMsICJuc1N0ciIsIHNpemVvZigqdGhpcykpOyB9IHdoaWxlICgwKTsKICB9CgogIH5uc1N0 cigpIHsKICAgIGRvIHsgbnNUcmFjZVJlZmNudDo6TG9nRHRvcigodm9pZCopdGhpcywgIm5zU3Ry Iiwgc2l6ZW9mKCp0aGlzKSk7IH0gd2hpbGUgKDApOwogIH0KIyAyNDggIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGVDaGFy U2l6ZSBhQ2hhclNpemUpOwojIDI1NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3Rh dGljIHZvaWQgSW5pdGlhbGl6ZShuc1N0ciYgYURlc3QsY2hhciogYUNTdHJpbmcsUFJVaW50MzIg YUNhcGFjaXR5LFBSVWludDMyIGFMZW5ndGgsZUNoYXJTaXplIGFDaGFyU2l6ZSxQUkJvb2wgYU93 bnNCdWZmZXIpOwojIDI2OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZv aWQgRGVzdHJveShuc1N0ciYgYURlc3QpOwojIDI3OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry LmgiCiAgc3RhdGljIFBSQm9vbCBFbnN1cmVDYXBhY2l0eShuc1N0ciYgYVN0cmluZyxQUlVpbnQz MiBhTmV3TGVuZ3RoKTsKICBzdGF0aWMgUFJCb29sIEdyb3dDYXBhY2l0eShuc1N0ciYgYVN0cmlu ZyxQUlVpbnQzMiBhTmV3TGVuZ3RoKTsKIyAyOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5o IgogIHN0YXRpYyB2b2lkIFN0ckFwcGVuZChuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3Vy Y2UsUFJVaW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwojIDMwMyAiLi4vLi4vZGlzdC9p bmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyQXNzaWduKG5zU3RyJiBhRGVzdCxjb25z dCBuc1N0ciYgYVNvdXJjZSxQUlVpbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiMgMzE2 ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJJbnNlcnQoIG5z U3RyJiBhRGVzdCxQUlVpbnQzMiBhRGVzdE9mZnNldCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUlVp bnQzMiBhU3JjT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMjggIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIERlbGV0ZShuc1N0ciYgYURlc3QsUFJVaW50MzIgYURl c3RPZmZzZXQsUFJVaW50MzIgYUNvdW50KTsKIyAzNDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 ci5oIgogIHN0YXRpYyB2b2lkIFN0clRydW5jYXRlKG5zU3RyJiBhRGVzdCxQUlVpbnQzMiBhRGVz dE9mZnNldCk7CiMgMzUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p ZCBDaGFuZ2VDYXNlKG5zU3RyJiBhRGVzdCxQUkJvb2wgYVRvVXBwZXIpOwojIDM2MiAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgVHJpbShuc1N0ciYgYURlc3QsY29u c3QgY2hhciogYVNldCxQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmcsUFJCb29sIGFFbGltaW5hdGVU cmFpbGluZyk7CiMgMzc0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p ZCBDb21wcmVzc1NldChuc1N0ciYgYURlc3QsY29uc3QgY2hhciogYVNldCxQUkJvb2wgYUVsaW1p bmF0ZUxlYWRpbmcsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZyk7CiMgMzg2ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJpcENoYXJzKG5zU3RyJiBhRGVzdCxj b25zdCBjaGFyKiBhU2V0KTsKIyAzOTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0 YXRpYyBQUkludDMyIFN0ckNvbXBhcmUoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBh U291cmNlLFBSSW50MzIgYUNvdW50LFBSQm9vbCBhSWdub3JlQ2FzZSk7CiMgNDEwICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgUFJJbnQzMiBGaW5kU3Vic3RyKGNvbnN0IG5z U3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSwgUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50 MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIEZpbmRDaGFyKGNv bnN0IG5zU3RyJiBhRGVzdCxQUlVuaWNoYXIgYUNoYXIsIFBSQm9vbCBhSWdub3JlQ2FzZSxQUklu dDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJbnQzMiBGaW5kQ2hhcklu U2V0KGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNldCxQUkJvb2wgYUlnbm9yZUNh c2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyBQUkludDMyIFJGaW5kU3Vic3RyKGNvbnN0 IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSwgUFJCb29sIGFJZ25vcmVDYXNlLFBS SW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIFJGaW5kQ2hh cihjb25zdCBuc1N0ciYgYURlc3QsUFJVbmljaGFyIGFDaGFyLCBQUkJvb2wgYUlnbm9yZUNhc2Us UFJJbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSSW50MzIgUkZpbmRD aGFySW5TZXQoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBhU2V0LFBSQm9vbCBhSWdu b3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0KTsKCiAgc3RhdGljIHZvaWQgT3ZlcndyaXRlKG5zU3Ry JiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFuT2Zmc2V0KTsKCiAgc3RhdGlj IFBSQm9vbCBEaWRBY3F1aXJlTWVtb3J5KHZvaWQpOwoKCgoKICBzdGF0aWMgUFJVaW50MzIgSGFz aENvZGUoY29uc3QgbnNTdHImIGFEZXN0KTsKIyA0MzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 ci5oIgogIFBSVWludDMyIG1MZW5ndGg7CiAgUFJVaW50MzIgbUNhcGFjaXR5OwogIGVDaGFyU2l6 ZSBtQ2hhclNpemU7CiAgUFJCb29sIG1Pd25zQnVmZmVyOwoKICB1bmlvbiB7CiAgICBjaGFyKiBt U3RyOwogICAgUFJVbmljaGFyKiBtVVN0cjsKICB9OwoKcHJpdmF0ZToKICBzdGF0aWMgUFJCb29s IEFsbG9jKG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSQm9vbCBS ZWFsbG9jKG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSQm9vbCBG cmVlKG5zU3RyJiBhU3RyaW5nKTsKCn07CiMgNDYwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIu aCIKaW5saW5lIFBSSW50MzIgTWluSW50KFBSSW50MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsK ICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5JbnQxIDogYW5JbnQyOwp9CgppbmxpbmUgUFJJ bnQzMiBNYXhJbnQoUFJJbnQzMiBhbkludDEsUFJJbnQzMiBhbkludDIpewogIHJldHVybiAoYW5J bnQxPGFuSW50MikgPyBhbkludDIgOiBhbkludDE7Cn0KCmlubGluZSB2b2lkIEFkZE51bGxUZXJt aW5hdG9yKG5zU3RyJiBhRGVzdCkgewogIGlmKGVUd29CeXRlPT1hRGVzdC5tQ2hhclNpemUpCiAg ICBhRGVzdC5tVVN0clthRGVzdC5tTGVuZ3RoXT0wOwogIGVsc2UgYURlc3QubVN0clthRGVzdC5t TGVuZ3RoXT0wOwp9CgoKCgoKCgppbmxpbmUgdm9pZCBSZWN5Y2xlKCBjaGFyKiBhQnVmZmVyKSB7 IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CmlubGluZSB2b2lkIFJlY3ljbGUoIFBSVW5pY2hh ciogYUJ1ZmZlcikgeyBuc01lbW9yeTo6RnJlZShhQnVmZmVyKTsgfQojIDQ5MSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zU3RyLmgiCmlubGluZSBQUlVuaWNoYXIgR2V0Q2hhckF0KGNvbnN0IG5zU3Ry JiBhRGVzdCxQUlVpbnQzMiBhbkluZGV4KSB7CiAgaWYoYW5JbmRleDxhRGVzdC5tTGVuZ3RoKSB7 CiAgICByZXR1cm4gKGVUd29CeXRlPT1hRGVzdC5tQ2hhclNpemUpID8gYURlc3QubVVTdHJbYW5J bmRleF0gOiAoUFJVbmljaGFyKWFEZXN0Lm1TdHJbYW5JbmRleF07CiAgfQogIHJldHVybiAwOwp9 CiMgNTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0NSVC5oIiAxCiMgNTQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIg MgojIDYzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCmNsYXNzIG5zSVNpemVPZkhh bmRsZXI7CgoKCgoKY2xhc3MgbnNTdWJzdW1lU3RyOwoKY2xhc3MgbnNTdHJpbmcgOgogIHB1Ymxp YyBuc0FGbGF0U3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBj b25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29u c3Q7CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVh ZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg Y29uc3Q7CiAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFi bGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7Cgpw dWJsaWM6CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIEdl dFVuaWNvZGUoKTsgfQoKcHVibGljOgoKCgogIG5zU3RyaW5nKCk7CgoKCgoKICBuc1N0cmluZyhj b25zdCBuc1N0cmluZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNvbnN0IG5zQVN0 cmluZyYpOwoKICBleHBsaWNpdCBuc1N0cmluZyhjb25zdCBQUlVuaWNoYXIqKTsKICBuc1N0cmlu Zyhjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyKTsKIyAxMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c1N0cmluZzIuaCIKICBleHBsaWNpdCBuc1N0cmluZyhuc1N1YnN1bWVTdHImIGFTdWJzdW1lU3Ry KTsKCgoKCgoKICB2aXJ0dWFsIH5uc1N0cmluZygpOwoKCgoKCiAgdmlydHVhbCBQUlVpbnQzMiBM ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKICB2aXJ0dWFsIHZvaWQgU2l6 ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7 CgoKCgoKCgogIHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQg U2V0Q2FwYWNpdHkoUFJVaW50MzIgYUxlbmd0aCk7CiMgMTUxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNTdHJpbmcyLmgiCiAgUFJCb29sIElzVW5pY29kZSh2b2lkKSBjb25zdCB7CiAgICBQUkJvb2wg cmVzdWx0PVBSQm9vbChtQ2hhclNpemU9PWVUd29CeXRlKTsKICAgIHJldHVybiByZXN1bHQ7CiAg fQojIDE2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIGNvbnN0IGNoYXIqIEdl dEJ1ZmZlcih2b2lkKSBjb25zdDsKICBjb25zdCBQUlVuaWNoYXIqIEdldFVuaWNvZGUodm9pZCkg Y29uc3Q7CgoKCgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFu SW5kZXgpOwojIDE4MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgVG9M b3dlckNhc2UoKTsKIyAxOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lk IFRvTG93ZXJDYXNlKG5zU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKCgoKCgogIHZvaWQgVG9VcHBl ckNhc2UoKTsKCgoKCgoKCiAgdm9pZCBUb1VwcGVyQ2FzZShuc1N0cmluZyYgYVN0cmluZykgY29u c3Q7CiMgMjE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBTdHJpcENo YXJzKCBjb25zdCBjaGFyKiBhU2V0ICk7CiAgdm9pZCBTdHJpcENoYXIoIFBSVW5pY2hhciBhQ2hh ciwgUFJJbnQzMiBhbk9mZnNldD0wICk7CiAgdm9pZCBTdHJpcENoYXIoIGNoYXIgYUNoYXIsIFBS SW50MzIgYW5PZmZzZXQ9MCApIHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpICh1bnNpZ25lZCBjaGFy KWFDaGFyLGFuT2Zmc2V0KTsgfQogIHZvaWQgU3RyaXBDaGFyKCBQUkludDMyIGFuSW50LCBQUklu dDMyIGFuT2Zmc2V0PTAgKSB7IFN0cmlwQ2hhcigoUFJVbmljaGFyKWFuSW50LGFuT2Zmc2V0KTsg fQoKCgoKCgogIHZvaWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hh ciggUFJVbmljaGFyIGFuT2xkQ2hhciwgUFJVbmljaGFyIGFOZXdDaGFyICk7CiAgdm9pZCBSZXBs YWNlQ2hhciggY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFOZXdDaGFyICk7CgogIHZvaWQg UmVwbGFjZVN1YnN0cmluZyggY29uc3QgbnNTdHJpbmcmIGFUYXJnZXQsIGNvbnN0IG5zU3RyaW5n JiBhTmV3VmFsdWUgKTsKICB2b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNvbnN0IFBSVW5pY2hhciog YVRhcmdldCwgY29uc3QgUFJVbmljaGFyKiBhTmV3VmFsdWUgKTsKIyAyNDkgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIFRyaW0oY29uc3QgY2hhciogYVNldCxQUkJvb2wg YUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wgYUVsaW1pbmF0ZVRyYWlsaW5nPTEsUFJCb29sIGFJ Z25vcmVRdW90ZXM9MCk7CiMgMjYwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAg dm9pZCBDb21wcmVzc1NldChjb25zdCBjaGFyKiBhU2V0LCBQUlVuaWNoYXIgYUNoYXIsUFJCb29s IGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyNzEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIENvbXByZXNzV2hpdGVzcGFj ZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0x KTsKIyAyODEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBuc1N0cmluZyogVG9O ZXdTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoK CgoKCgogIGNoYXIqIFRvTmV3VVRGOFN0cmluZygpIGNvbnN0OwoKCgoKCgoKICBQUlVuaWNoYXIq IFRvTmV3VW5pY29kZSgpIGNvbnN0OwojIDMxNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n Mi5oIgogIGNoYXIqIFRvQ1N0cmluZyhjaGFyKiBhQnVmLFBSVWludDMyIGFCdWZMZW5ndGgsUFJV aW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CgoKCgoKCiAgZmxvYXQgVG9GbG9hdChQUkludDMyKiBh RXJyb3JDb2RlKSBjb25zdDsKCgoKCgoKCiAgUFJJbnQzMiBUb0ludGVnZXIoUFJJbnQzMiogYUVy cm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29uc3Q7CiMgMzQ1ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNTdHJpbmcm IGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcm IG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFi bGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgUFJVbmlj aGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsgfQogIG5zU3RyaW5nJiBv cGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlz OyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY2hhcik7CiAgdm9pZCBBc3NpZ25XaXRo Q29udmVyc2lvbihjb25zdCBjaGFyKik7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbihjb25z dCBjaGFyKiwgUFJJbnQzMik7CiMgMzY0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi CiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiwgUFJJbnQzMj0xMCk7CiAgdm9pZCBBcHBlbmRGbG9h dChkb3VibGUpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSSW50 MzI9LTEpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY2hhcik7CgogIHZpcnR1YWwgdm9p ZCBkb19BcHBlbmRGcm9tRWxlbWVudCggUFJVbmljaGFyICk7CgoKCiAgdm9pZCBJbnNlcnRXaXRo Q29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJVaW50MzIsIFBSSW50MzI9LTEpOwojIDM4OSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc1N0cmlu ZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQz MiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBuc1N0ciYgYVN0cmluZyxQ UkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEp IGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3Jl Q2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJ bnQzMiBGaW5kKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ UkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQwNSAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZENoYXIoUFJVbmljaGFyIGFD aGFyLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3Vu dD0tMSkgY29uc3Q7CiMgNDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJ bnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0w KSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5n LFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0 IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgNDI3ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZChjb25zdCBjaGFyKiBhQ1N0 cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNv dW50PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLFBS Qm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEp IGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25v cmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAg UFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDQzICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXIoUFJVbmlj aGFyIGFDaGFyLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQz MiBhQ291bnQ9LTEpIGNvbnN0OwojIDQ1MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5o IgogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFu T2Zmc2V0PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hh ciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kQ2hh ckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0Owoj IDQ3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgQ29tcGFyZVdp dGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJ bnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNv bnN0IG5zU3RyaW5nJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50 PS0xKSBjb25zdDsKICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNo YXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0 OwoKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcgJmFTdHJpbmcs UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBF cXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz ZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNp b24oY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg YUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzQXRvbSggbnNJQXRvbSogYW5BdG9tLFBS Qm9vbCBhSWdub3JlQ2FzZSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKGNvbnN0 IG5zU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25z dCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxz SWdub3JlQ2FzZSggbnNJQXRvbSAqYUF0b20pIGNvbnN0OwojIDQ5MCAiLi4vLi4vZGlzdC9pbmNs dWRlL25zU3RyaW5nMi5oIgogIFBSQm9vbCBJc0FTQ0lJKGNvbnN0IFBSVW5pY2hhciogYUJ1ZmZl cj0wKTsKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7CgoKCgoKCgogIHN0YXRpYyBQUkJv b2wgSXNTcGFjZShQUlVuaWNoYXIgY2gpOwoKCgoKCgoKICBzdGF0aWMgUFJCb29sIElzQWxwaGEo UFJVbmljaGFyIGNoKTsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc0RpZ2l0KFBSVW5pY2hhciBj aCk7Cgpwcml2YXRlOgoKCiAgdm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldp dGhDb252ZXJzaW9uKCBQUlVuaWNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBj b25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lv biggUFJVbmljaGFyICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgUFJVbmlj aGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oIGNvbnN0IFBS VW5pY2hhciosIFBSVWludDMyLCBQUkludDMyPS0xICk7Cn07CgoKCgpleHRlcm4gaW50IGZwdXRz KGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBGSUxFKiBvdXQpOwojIDU0MiAiLi4vLi4vZGlzdC9p bmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc0F1dG9TdHJpbmcgOiBwdWJsaWMgbnNTdHJpbmcg ewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNBdXRvU3RyaW5nKCk7CiAgICBuc0F1dG9TdHJpbmco KTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBuc0F1dG9TdHJpbmcmIGFTdHJpbmcpOwogICAgZXhw bGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNp dCBuc0F1dG9TdHJpbmcoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwogICAgZXhwbGljaXQgbnNB dXRvU3RyaW5nKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyk7CiAgICBuc0F1dG9TdHJpbmcoY29u c3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYUxlbmd0aCk7CiAgICBleHBsaWNpdCBuc0F1 dG9TdHJpbmcoUFJVbmljaGFyIGFDaGFyKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25z dCBDQnVmRGVzY3JpcHRvciYgYUJ1ZmZlcik7CgoKCgogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5n KG5zU3Vic3VtZVN0ciYgYVN1YnN1bWVTdHIpOwoKCgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRv cj0oIGNvbnN0IG5zQXV0b1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFTdHJpbmcpOyByZXR1 cm4gKnRoaXM7IH0KICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICBwdWJs aWM6CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFi bGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0F1dG9TdHJp bmcmIG9wZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJl dHVybiAqdGhpczsgfQogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hh ciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIHZpcnR1YWwgdm9p ZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBj b25zdDsKCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplPDxlVHdvQnl0ZV07Cn07 CgoKCmNsYXNzIE5TX0NvbnZlcnRBU0NJSXRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJp bmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5TX0NvbnZlcnRBU0NJSXRvVUNT MiggY29uc3QgY2hhciogKTsKICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBjaGFy KiwgUFJVaW50MzIgKTsKICAgICAgZXhwbGljaXQgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjaGFy ICk7CiMgNjAwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgICBwcml2YXRlOgoK ICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBQUlVuaWNoYXIgKTsKICB9OwoKY2xhc3MgTlNf Q29udmVydFVURjh0b1VDUzIKICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCiAgewogICAgcHVi bGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggY29uc3QgY2hh ciogYUNTdHJpbmcgKQogICAgICAgIHsKICAgICAgICAgIEluaXQoIGFDU3RyaW5nLCB+UFJVaW50 MzIoMCkgKTsKICAgICAgICB9CgogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggY29uc3QgY2hh ciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEluaXQo IGFDU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNf Q29udmVydFVURjh0b1VDUzIoIGNoYXIgYUNoYXIgKQogICAgICAgIHsKICAgICAgICAgIEluaXQo ICZhQ2hhciwgMSApOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgSW5pdCgg Y29uc3QgY2hhciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2YXRlOgog ICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggUFJVbmljaGFyICk7CiAgfTsKIyA2NDYgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKY2xhc3MgbnNTdWJzdW1lU3RyIDogcHVibGljIG5z U3RyaW5nIHsKcHVibGljOgogIG5zU3Vic3VtZVN0cigpOwogIGV4cGxpY2l0IG5zU3Vic3VtZVN0 cihuc1N0ciYgYVN0cmluZyk7CiAgbnNTdWJzdW1lU3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJv b2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxlbmd0aD0tMSk7CiAgbnNTdWJzdW1lU3RyKGNo YXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwog IGludCBTdWJzdW1lKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBS SW50MzIgYUxlbmd0aD0tMSk7CgogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBjb25zdCBuc1N1 YnN1bWVTdHImIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsg fQogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSAp IHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICBuc1N1YnN1bWVTdHImIG9w ZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAq dGhpczsgfQogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFz c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KCBj aGFyICk7Cn07CiMgNDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiL3Vz ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDQ4ICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c2NvcmUuaCIgMQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi91 c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlv LmgiIDEgMwojIDUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu Zy5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQojIDUyICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3Ry aW5nLmgiIDEKIyA1NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyA2MiAiLi4v Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdy aXRhYmxlU3RyaW5nLmgiIDEKIyA2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIK CgoKY2xhc3MgbnNTdWJzdW1lQ1N0cjsKCmNsYXNzIG5zQ1N0cmluZyA6CiAgcHVibGljIG5zQUZs YXRDU3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBjb25zdCBu c0J1ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogIHZpcnR1 YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNo YXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBjaGFy KiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdt ZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGdl dCgpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KCnB1YmxpYzoKCgoKICBuc0NTdHJpbmcoKTsKCgoK CgogIG5zQ1N0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc0NT dHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmICk7CgogIGV4cGxpY2l0IG5zQ1N0cmluZyhjb25zdCBj aGFyKik7CiAgbnNDU3RyaW5nKGNvbnN0IGNoYXIqLCBQUkludDMyKTsKCgoKCgogIGV4cGxpY2l0 IG5zQ1N0cmluZyhuc1N1YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCgoKICB2aXJ0dWFsIH5u c0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1 cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVy KiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwojIDEyOCAiLi4vLi4vZGlzdC9p bmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCk7CgoK CgoKCiAgdm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgogIFBSQm9vbCBT ZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFuSW5kZXgpOwojIDE1MSAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZSgpOwojIDE2MCAiLi4v Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc0NTdHJpbmcm IGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBUb1VwcGVyQ2FzZSgpOwoKCgoKCgoKICB2b2lk IFRvVXBwZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiMgMTg0ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIFN0cmlwQ2hhcnMoY29uc3QgY2hhciogYVNldCk7 CiAgdm9pZCBTdHJpcENoYXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCk7CiAg dm9pZCBTdHJpcENoYXIoY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PTApIHsgU3RyaXBDaGFy KChQUlVuaWNoYXIpICh1bnNpZ25lZCBjaGFyKWFDaGFyLGFuT2Zmc2V0KTsgfQoKCgoKCgogIHZv aWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hhcihQUlVuaWNoYXIg YU9sZENoYXIsUFJVbmljaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJlcGxhY2VDaGFyKGNvbnN0IGNo YXIqIGFTZXQsUFJVbmljaGFyIGFOZXdDaGFyKTsKCiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNv bnN0IG5zQ1N0cmluZyYgYVRhcmdldCxjb25zdCBuc0NTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgdm9p ZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0IGNoYXIqIGFUYXJnZXQsY29uc3QgY2hhciogYU5ld1Zh bHVlKTsKIyAyMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgVHJpbShj b25zdCBjaGFyKiBhU2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWlu YXRlVHJhaWxpbmc9MSxQUkJvb2wgYUlnbm9yZVF1b3Rlcz0wKTsKIyAyMjggIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgQ29tcHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwg UFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWlu YXRlVHJhaWxpbmc9MSk7CiMgMjM5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2 b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29s IGFFbGltaW5hdGVUcmFpbGluZz0xKTsKCgoKCgogIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29u c3Qge3JldHVybiAoY29uc3QgY2hhciopbVN0cjt9CgoKCgoKCgogIG5zQ1N0cmluZyogVG9OZXdT dHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoKCgoK CgogIFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCkgY29uc3Q7CiMgMjc4ICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBh QnVmTGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxv YXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CiMgMjk0ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNTdHJpbmcuaCIKICBQUkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWlu dDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAzMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu Zy5oIgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcgKSB7 IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNDU3RyaW5nJiBvcGVyYXRvcj0o IGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy biAqdGhpczsgfQoKICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsg QXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY2hh ciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWdu V2l0aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFyKixQUkludDMyPS0xKTsKICB2b2lkIEFzc2ln bldpdGhDb252ZXJzaW9uKCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWdu V2l0aENvbnZlcnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWdu V2l0aENvbnZlcnNpb24oUFJVbmljaGFyKTsKIyAzMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0 cmluZy5oIgogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcmLCBQUklu dDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKFBSVW5pY2hhciBhQ2hhcik7CiAg dm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiAg dm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xKTsK CiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiBhSW50ZWdlcixQUkludDMyIGFSYWRpeD0xMCk7CiAg dm9pZCBBcHBlbmRGbG9hdCggZG91YmxlIGFGbG9hdCApOwoKCiAgdm9pZCBJbnNlcnRXaXRoQ29u dmVyc2lvbihQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5PZmZzZXQpOwojIDM2MyAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5zU3RyJiBhU3Ry aW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3Vu dD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ Z25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsK ICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz ZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzc2ICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hh ciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBh Q291bnQ9LTEpIGNvbnN0OwojIDM4NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAg UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNl dD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3Ry aW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNv bnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzk3ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kKGNvbnN0IGNoYXIqIGFD U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBh Q291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJC b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkg Y29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ Z25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7 CiMgNDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hh cihQUlVuaWNoYXIgYUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0t MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNT dHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJ bnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQ UlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBS RmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBj b25zdDsKIyA0MzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29t cGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9y ZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENv bnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMy IGFDb3VudD0tMSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBu c1N0cmluZyAmYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkg Y29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcs UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBF cXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25v cmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdub3Jl Q2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJv b2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhQ291 bnQ9LTEpIGNvbnN0OwoKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgoK CiAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNp b24oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJ bnQzMj0tMSApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lkIElu c2VydFdpdGhDb252ZXJzaW9uKCBjaGFyLCBQUlVpbnQzMiApOwp9OwoKCgoKZXh0ZXJuIGludCBm cHV0cyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsIEZJTEUqIG91dCk7CiMgNDc0ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKY2xhc3MgbnNDQXV0b1N0cmluZyA6IHB1YmxpYyBuc0NT dHJpbmcgewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNDQXV0b1N0cmluZygpOwoKICAgIG5zQ0F1 dG9TdHJpbmcoKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNDU3RyaW5nJiAp OwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nKTsK ICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmluZyk7CiAgICBuc0NB dXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsKICAgIGV4cGxp Y2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoKICAg IGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcobnNTdWJzdW1lQ1N0ciYgYVN1YnN1bWVTdHIpOwoKCgog ICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NBdXRvU3RyaW5nJiBhU3RyaW5n ICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lk IG9wZXJhdG9yPSggUFJVbmljaGFyICk7CiAgcHVibGljOgogICAgbnNDQXV0b1N0cmluZyYgb3Bl cmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUp OyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IGNo YXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0NBdXRvU3Ry aW5nJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhp czsgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0 U3RyaW5nU2l6ZV07Cn07CgoKCgoKCmNsYXNzIE5TX0NvbnZlcnRVQ1MydG9VVEY4CiAgICAgIDog cHVibGljIG5zQ0F1dG9TdHJpbmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcgKQogICAg ICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAg fQoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZywg UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBhU3RyaW5nLCBh TGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydFVDUzJ0 b1VURjgoIFBSVW5pY2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCAmYUNo YXIsIDEgKTsKICAgICAgICB9CgogICAgICBleHBsaWNpdCBOU19Db252ZXJ0VUNTMnRvVVRGOCgg Y29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEFw cGVuZCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICk7CgogICAg cHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjaGFyICk7CiAgICAgIG9wZXJh dG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiAgfTsKIyA1NjUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c1N0cmluZy5oIgpjbGFzcyBuc1N1YnN1bWVDU3RyIDogcHVibGljIG5zQ1N0cmluZyB7CnB1Ymxp YzoKICBleHBsaWNpdCBuc1N1YnN1bWVDU3RyKG5zU3RyJiBhU3RyaW5nKTsKICBuc1N1YnN1bWVD U3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxl bmd0aD0tMSk7CiAgbnNTdWJzdW1lQ1N0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVPd25l cnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lQ1N0ciYgb3BlcmF0b3I9KCBj b25zdCBuc1N1YnN1bWVDU3RyJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAq dGhpczsgfQogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgbnNBQ1N0cmluZyYgYVJl YWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3Vic3Vt ZUNTdHImIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1 cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFz c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KCBQ UlVuaWNoYXIgKTsKfTsKIyAzOCAibnNJbnN0YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNGaWxlU3BlYy5oIiAxCiMgMTMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDEzMiAiLi4vLi4vZGlzdC9p bmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgi IDEKIyAxMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDEzNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmls ZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAxCiMgMTM1ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDEzNiAiLi4vLi4vZGlzdC9pbmNsdWRl L25zRmlsZVNwZWMuaCIgMgojIDE2MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiIDEKIyAxNyAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0 L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2Fs RmlsZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By bGluay5oIiAxCiMgMTkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEg Ii91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDEgMwojIDIwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiIDIKIyAy OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgpjbGFzcyBuc0lMb2NhbEZpbGUg OiBwdWJsaWMgbnNJRmlsZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhYTYxMGYyMCwgMHhhODg5LCAweDExZDMs IHsgMHg4YywgMHg4MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHg2NSwgMHg3MywgMHg3NCB9fTsgcmV0 dXJuIGlpZDt9CiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IEluaXRXaXRoUGF0aChjb25zdCBjaGFyICpmaWxlUGF0aCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFVuaWNvZGVQYXRoKGNvbnN0IFBSVW5pY2hhciAqZmls ZVBhdGgpID0gMDsKIyA3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0Rm9sbG93TGlua3MoUFJCb29sICphRm9sbG93TGlua3MpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbGxvd0xpbmtzKFBSQm9vbCBhRm9sbG93TGlua3MpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbk5TUFJGaWxlRGVzYyhQUkludDMyIGZsYWdzLCBQ UkludDMyIG1vZGUsIFBSRmlsZURlc2MgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBPcGVuQU5TSUZpbGVEZXNjKGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKiAqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2FkKFBSTGlicmFyeSAqICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2tTcGFjZUF2YWlsYWJsZShQUkludDY0ICphRGlz a1NwYWNlQXZhaWxhYmxlKSA9IDA7CiMgOTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZp bGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZlUGF0aChjb25zdCBjaGFyICpy ZWxhdGl2ZUZpbGVQYXRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZl VW5pY29kZVBhdGgoY29uc3QgUFJVbmljaGFyICpyZWxhdGl2ZUZpbGVQYXRoKSA9IDA7CgoKCgoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0ZW50RGVzY3JpcHRvcihjaGFyICogKmFQZXJz aXN0ZW50RGVzY3JpcHRvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVyc2lzdGVudERl c2NyaXB0b3IoY29uc3QgY2hhciAqIGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwoKCgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IFJldmVhbCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgTGF1bmNoKHZvaWQpID0gMDsKCn07CiMgMjkzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ TG9jYWxGaWxlLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3TG9jYWxGaWxlKGNvbnN0IGNo YXIqIHBhdGgsIFBSQm9vbCBmb2xsb3dMaW5rcywgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKZXh0 ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdVbmljb2RlTG9jYWxGaWxlKGNvbnN0IFBSVW5pY2hhciog cGF0aCwgUFJCb29sIGZvbGxvd0xpbmtzLCBuc0lMb2NhbEZpbGUqICpyZXN1bHQpOwojIDE2MSAi Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0NPTVB0ci5oIiAxCiMgMTYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAy CiMgMTc2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgojIDEgIi91c3IvaW5jbHVk ZS9kaXJlbnQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMK CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAi L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUv Yml0cy9kaXJlbnQuaCIgMwpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAg ICBfX29mZl90IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAg IHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVj dCBkaXJlbnQ2NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBl OwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwojIDYzICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDIgMwojIDk4ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZW51bQogIHsKICAgIERUX1VOS05P V04gPSAwLAoKICAgIERUX0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0g NCwKCiAgICBEVF9CTEsgPSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgog ICAgRFRfU09DSyA9IDEyLAoKICAgIERUX1dIVCA9IDE0CgogIH07CiMgMTI4ICIvdXNyL2luY2x1 ZGUvZGlyZW50LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19kaXJzdHJlYW0gRElSOwoKCgpleHRlcm4g RElSICpvcGVuZGlyIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgY2xvc2VkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9k aXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudCAqcmVhZGRpciAoRElSICpfX2RpcnApIHRo cm93ICgpOwojIDE1NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1Y3QgZGly ZW50NjQgKnJlYWRkaXI2NCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHJlYWRkaXJfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKIyAxNzkgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVz dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9f cmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0 ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCByZXdpbmRk aXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDE5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKCgpleHRlcm4gdm9pZCBz ZWVrZGlyIChESVIgKl9fZGlycCwgbG9uZyBpbnQgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBk aXJmZCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9wb3NpeDFfbGltLmgiIDEgMwojIDIxMCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyAy MjAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2Nj LWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91c3Iv aW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQgc2NhbmRpciAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQg KioqX19yZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgIGludCAoKl9fc2Vs ZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQgKiksCiAgICAgICAgICAgICAgICAgICAgaW50 ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsKIyAy NDcgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHNjYW5kaXI2NCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp cmVudDY0ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAgIGlu dCAoKl9fc2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQ2NCAqKSwKICAgICAgICAgICAg ICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2UxLCBf X2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CiMgMjY5ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBhbHBoYXNvcnQ2 NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCB2ZXJzaW9uc29ydCAo X19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjkwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMK ZXh0ZXJuIGludCB2ZXJzaW9uc29ydDY0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9p ZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAzMDAg Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXMg KGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX29mZl90ICpfX3Jlc3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwojIDMxNiAiL3Vzci9pbmNs dWRlL2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllczY0IChpbnQgX19m ZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f b2ZmNjRfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKCgoKCn0KIyAxNzcgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxOTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0ZpbGVTcGVjLmgiCmNsYXNzIG5zRmlsZVNwZWM7CmNsYXNzIG5zRmlsZVBhdGg7CmNsYXNzIG5z RmlsZVVSTDsKY2xhc3MgbnNOU1BSUGF0aDsKY2xhc3MgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0 b3I7CgoKCgpjbGFzcyBuc091dHB1dFN0cmVhbTsKY2xhc3MgbnNJbnB1dFN0cmVhbTsKY2xhc3Mg bnNJT3V0cHV0U3RyZWFtOwpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKY2xhc3MgbnNPdXRwdXRGaWxl U3RyZWFtOwpjbGFzcyBuc0lucHV0RmlsZVN0cmVhbTsKY2xhc3MgbnNPdXRwdXRDb25zb2xlU3Ry ZWFtOwoKY2xhc3MgbnNTdHJpbmc7CgpjbGFzcyBuc0lVbmljb2RlRW5jb2RlcjsKY2xhc3MgbnNJ VW5pY29kZURlY29kZXI7CiMgMjI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgpu c3Jlc3VsdCBuc19maWxlX2NvbnZlcnRfcmVzdWx0KFBSSW50MzIgbmF0aXZlRXJyKTsKCgoKY2xh c3MgbnNBdXRvQ1N0cmluZwojIDI0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK ewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXV0b0NTdHJpbmco Y29uc3QgbnNTdHJpbmcmIG90aGVyKSA6IG1DU3RyaW5nKG90aGVyLlRvTmV3Q1N0cmluZygpKSB7 fQogICAgdmlydHVhbCB+bnNBdXRvQ1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0IHsgcmV0dXJuIG1DU3RyaW5nOyB9 CgoKCgpwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIqIG1DU3RyaW5nOwp9OwoKCmNsYXNzIG5zU2ltcGxlQ2hhclN0cmluZwoKCgp7CnB1YmxpYzoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nKCk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBj aGFyKik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmlu Zyhjb25zdCBuc1N0cmluZyYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1Np bXBsZUNoYXJTdHJpbmcoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJik7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBjaGFyKiBpbkRhdGEs IFBSVWludDMyIGluTGVuZ3RoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5u c1NpbXBsZUNoYXJTdHJpbmcoKTsKCiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqKTsK ICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcmKTsKICAgIHZvaWQgb3BlcmF0b3Ig PSAoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJik7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0IHsgcmV0dXJuIG1EYXRhID8gbURh dGEtPm1TdHJpbmcgOiAwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh dG9yIGNoYXIqICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2NEYXRhKExlbmd0aCgpKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRGF0YSA/IG1EYXRhLT5tU3Ry aW5nIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIG9w ZXJhdG9yID09IChjb25zdCBjaGFyKik7CiAgICBQUkJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IG5z U3RyaW5nJik7CiAgICBQUkJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmlu ZyYpOwoKICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IGNoYXIqIGluU3RyaW5nKTsKICAgIG5z U2ltcGxlQ2hhclN0cmluZyBvcGVyYXRvciArIChjb25zdCBjaGFyKiBpblN0cmluZykgY29uc3Q7 CgogICAgY2hhciBvcGVyYXRvciBbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gbURhdGEgPyBtRGF0 YS0+bVN0cmluZ1tpXSA6ICdcMCc7IH0KICAgIGNoYXImIG9wZXJhdG9yIFtdKGludCBpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoaSA+PSAoaW50KUxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlYWxsb2NEYXRhKChQUlVpbnQzMilpICsgMSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbURhdGEtPm1TdHJpbmdbaV07CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIGNoYXImIG9wZXJhdG9yIFtdKHVu c2lnbmVkIGludCBpKSB7IHJldHVybiAoKnRoaXMpWyhpbnQpaV07IH0KCiAgICB2b2lkIENhdGVu YXRlKGNvbnN0IGNoYXIqIGluU3RyaW5nMSwgY29uc3QgY2hhciogaW5TdHJpbmcyKTsKCiAgICB2 b2lkIFNldFRvRW1wdHkoKTsKICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVu Z3RoKCkgPT0gMDsgfQoKICAgIFBSVWludDMyIExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRh ID8gbURhdGEtPm1MZW5ndGggOiAwOyB9CiAgICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBpbkxl bmd0aCkgeyBSZWFsbG9jRGF0YShpbkxlbmd0aCk7IH0KICAgIHZvaWQgQ29weUZyb20oY29uc3Qg Y2hhciogaW5EYXRhLCBQUlVpbnQzMiBpbkxlbmd0aCk7CiAgICB2b2lkIExlYWZSZXBsYWNlKGNo YXIgaW5TZXBhcmF0b3IsIGNvbnN0IGNoYXIqIGluTGVhZk5hbWUpOwogICAgY2hhciogR2V0TGVh ZihjaGFyIGluU2VwYXJhdG9yKSBjb25zdDsKICAgIHZvaWQgVW5lc2NhcGUoKTsKCnByb3RlY3Rl ZDoKCiAgICB2b2lkIEFkZFJlZkRhdGEoKTsKICAgIHZvaWQgUmVsZWFzZURhdGEoKTsKICAgIHZv aWQgUmVhbGxvY0RhdGEoUFJVaW50MzIgaW5MZW5ndGgpOwoKCgoKCnByb3RlY3RlZDoKCiAgICBz dHJ1Y3QgRGF0YSB7CiAgICAgICAgaW50IG1SZWZDb3VudDsKICAgICAgICBQUlVpbnQzMiBtTGVu Z3RoOwogICAgICAgIGNoYXIgbVN0cmluZ1sxXTsKICAgICAgICB9OwogICAgRGF0YSogbURhdGE7 Cn07CgoKY2xhc3MgbnNGaWxlU3BlYwoKCgp7CiAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNGaWxlU3BlYygpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNGaWxlU3BlYyhjb25zdCBjaGFyKiBpbk5hdGl2ZVBhdGgsIFBSQm9vbCBpbkNyZWF0 ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNv bnN0IG5zU3RyaW5nJiBpbk5hdGl2ZVBhdGgsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMoY29uc3QgbnNGaWxlUGF0 aCYgaW5QYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNv bnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z RmlsZVNwZWMoY29uc3QgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImIGluVVJMKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IG5zRmlsZVNwZWMmIGlu UGF0aCk7CiAgICAgICAgdmlydHVhbCB+bnNGaWxlU3BlYygpOwoKCiAgICAgICAgdm9pZCBvcGVy YXRvciA9IChjb25zdCBjaGFyKiBpbk5hdGl2ZVBhdGgpOwogICAgICAgIHZvaWQgb3BlcmF0b3Ig PSAoY29uc3QgbnNTdHJpbmcmIGluTmF0aXZlUGF0aCk7CgogICAgICAgIHZvaWQgb3BlcmF0b3Ig PSAoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRoKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNv bnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNG aWxlU3BlYyYgaW5PdGhlcik7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1BlcnNp c3RlbnRGaWxlRGVzY3JpcHRvciYgaW5PdGhlcik7CgogICAgICAgIFBSQm9vbCBvcGVyYXRvciA9 PShjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKSBjb25zdDsKICAgICAgICBQUkJvb2wgb3BlcmF0 b3IgIT0oY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcikgY29uc3Q7CiMgMzcyICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgICAgY29uc3QgY2hhciogR2V0Q1N0cmluZygpIGNv bnN0OwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNo YXIqICgpIGNvbnN0IHsgcmV0dXJuIEdldENTdHJpbmcoKTsgfQoKCgogICAgICAgY29uc3QgY2hh ciogR2V0TmF0aXZlUGF0aENTdHJpbmcoKSBjb25zdCB7IHJldHVybiBHZXRDU3RyaW5nKCk7IH0K CgoKICAgICAgIHZvaWQgR2V0TmF0aXZlUGF0aFN0cmluZyhuc1N0cmluZyAmbmF0aXZlUGF0aFN0 cmluZyk7CgogICAgICAgUFJCb29sIElzQ2hpbGRPZihuc0ZpbGVTcGVjICZwb3NzaWJsZVBhcmVu dCk7CiMgNDIxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgICAgIFBSQm9v bCBWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICghKChFcnJvcigpKSAmIDB4ODAwMDAwMDApKTsgfQog ICAgICAgIG5zcmVzdWx0IEVycm9yKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBhdGguSXNF bXB0eSgpICYmICghKChtRXJyb3IpICYgMHg4MDAwMDAwMCkpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChuc0ZpbGVTcGVjKil0aGlzKS0+bUVycm9yID0gKCgobnNy ZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbUVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICBQUkJvb2wgRmFpbGVkKCkgY29uc3QgeyByZXR1cm4gKFBSQm9vbCkoKEVycm9yKCkpICYg MHg4MDAwMDAwMCk7IH0KCgoKCgogICAgICAgIGNoYXIqIEdldExlYWZOYW1lKCkgY29uc3Q7CgoK ICAgICAgICB2b2lkIEdldExlYWZOYW1lKG5zU3RyaW5nICZuYXRpdmVQYXRoU3RyaW5nKTsKIyA0 NTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgdm9pZCBTZXRMZWFm TmFtZShjb25zdCBjaGFyKiBpbkxlYWZOYW1lKTsKICAgICAgICB2b2lkIFNldExlYWZOYW1lKGNv bnN0IG5zU3RyaW5nJiBpbkxlYWZOYW1lKTsKCgoKCgoKCiAgICAgICAgdm9pZCBHZXRQYXJlbnQo bnNGaWxlU3BlYyYgb3V0U3BlYykgY29uc3Q7CiMgNDY4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNG aWxlU3BlYy5oIgogICAgICAgIHR5cGVkZWYgUFJVaW50MzIgVGltZVN0YW1wOwoKCgoKCiAgICAg ICAgdm9pZCBHZXRNb2REYXRlKFRpbWVTdGFtcCYgb3V0U3RhbXApIGNvbnN0OwoKICAgICAgICBQ UkJvb2wgTW9kRGF0ZUNoYW5nZWQoY29uc3QgVGltZVN0YW1wJiBvbGRTdGFtcCkgY29uc3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRpbWVTdGFtcCBuZXdTdGFtcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2V0TW9kRGF0ZShuZXdTdGFtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBuZXdTdGFtcCAhPSBvbGRTdGFtcDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgIFBSVWludDMyIEdldEZpbGVTaXplKCkgY29uc3Q7CiAg ICAgICAgUFJJbnQ2NCBHZXREaXNrU3BhY2VBdmFpbGFibGUoKSBjb25zdDsKCiAgICAgICAgbnNG aWxlU3BlYyBvcGVyYXRvciArIChjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0 OwogICAgICAgIG5zRmlsZVNwZWMgb3BlcmF0b3IgKyAoY29uc3QgbnNTdHJpbmcmIGluUmVsYXRp dmVVbml4UGF0aCkgY29uc3Q7CiMgNDk3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o IgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0 aCk7CgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IG5zU3RyaW5nJiBpblJlbGF0aXZl VW5peFBhdGgpOwoKICAgICAgICB2b2lkIE1ha2VVbmlxdWUoKTsKICAgICAgICB2b2lkIE1ha2VV bmlxdWUoY29uc3QgY2hhciogaW5TdWdnZXN0ZWRMZWFmTmFtZSk7CiAgICAgICAgdm9pZCBNYWtl VW5pcXVlKGNvbnN0IG5zU3RyaW5nJiBpblN1Z2dlc3RlZExlYWZOYW1lKTsKCgogICAgICAgIFBS Qm9vbCBJc0RpcmVjdG9yeSgpIGNvbnN0OwogICAgICAgIFBSQm9vbCBJc0ZpbGUoKSBjb25zdDsK ICAgICAgICBQUkJvb2wgRXhpc3RzKCkgY29uc3Q7CgogICAgICAgIFBSQm9vbCBJc0hpZGRlbigp IGNvbnN0OwoKICAgICAgICBQUkJvb2wgSXNTeW1saW5rKCkgY29uc3Q7CgoKCgoKCgogICAgICAg IG5zcmVzdWx0IFJlc29sdmVTeW1saW5rKFBSQm9vbCYgd2FzU3ltbGluayk7CgogICAgICAgIHZv aWQgQ3JlYXRlRGlyZWN0b3J5KGludCBtb2RlID0gMDc3NSApOwogICAgICAgIHZvaWQgQ3JlYXRl RGlyKGludCBtb2RlID0gMDc3NSkgeyBDcmVhdGVEaXJlY3RvcnkobW9kZSk7IH0KCiAgICAgICAg dm9pZCBEZWxldGUoUFJCb29sIGluUmVjdXJzaXZlKSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBU cnVuY2F0ZShQUkludDMyIGFOZXdMZW5ndGgpIGNvbnN0OwogICAgICAgIHZvaWQgUmVjdXJzaXZl Q29weShuc0ZpbGVTcGVjIG5ld0RpcikgY29uc3Q7CgogICAgICAgIG5zcmVzdWx0IFJlbmFtZShj b25zdCBjaGFyKiBpbk5ld05hbWUpOwogICAgICAgIG5zcmVzdWx0IFJlbmFtZShjb25zdCBuc1N0 cmluZyYgaW5OZXdOYW1lKTsKICAgICAgICBuc3Jlc3VsdCBDb3B5VG9EaXIoY29uc3QgbnNGaWxl U3BlYyYgaW5OZXdQYXJlbnREaXJlY3RvcnkpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IE1vdmVU b0Rpcihjb25zdCBuc0ZpbGVTcGVjJiBpbk5ld1BhcmVudERpcmVjdG9yeSk7CiAgICAgICAgbnNy ZXN1bHQgRXhlY3V0ZShjb25zdCBjaGFyKiBhcmdzKSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBF eGVjdXRlKGNvbnN0IG5zU3RyaW5nJiBhcmdzKSBjb25zdDsKCgoKCgogICAgcHJvdGVjdGVkOgoK CiAgICAgICBQUlVuaWNoYXIqIENvbnZlcnRGcm9tRmlsZVN5c3RlbUNoYXJzZXQoY29uc3QgY2hh ciAqaW5TdHJpbmcpOwogICAgICAgc3RhdGljIHZvaWQgR2V0RmlsZVN5c3RlbUNoYXJzZXQobnNT dHJpbmcgJiBmaWxlU3lzdGVtQ2hhcnNldCk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKICAgICAg IHZvaWQgQ2xlYXIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNs YXNzIG5zRmlsZVBhdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNs YXNzIG5zRmlsZVVSTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xh c3MgbnNEaXJlY3RvcnlJdGVyYXRvcjsKCgoKICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcgbVBh dGg7CiAgICAgICAgbnNyZXN1bHQgbUVycm9yOwoKfTsKCgoKdHlwZWRlZiBuc0ZpbGVTcGVjIG5z TmF0aXZlRmlsZVNwZWM7CgoKY2xhc3MgbnNGaWxlVVJMCgoKCgp7CiAgICBwdWJsaWM6CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IG5zRmlsZVVSTCYgaW5V UkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVVSTChjb25zdCBjaGFy KiBpblVSTFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zRmlsZVVSTChjb25zdCBuc1N0cmluZyYgaW5VUkxTdHJpbmcsIFBS Qm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0ZpbGVVUkwoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc0ZpbGVVUkwoY29uc3QgbnNGaWxlU3BlYyYgaW5QYXRoKTsKICAgICAgICB2 aXJ0dWFsIH5uc0ZpbGVVUkwoKTsKCgoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3Qg bnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKiBp blVSTFN0cmluZyk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5V UkxTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F1dG9DU3RyaW5nIHN0cmluZyhpblVSTFN0 cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzID0gc3RyaW5n OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICB2b2lkIG9wZXJhdG9y ID0gKGNvbnN0IG5zRmlsZVBhdGgmIGluT3RoZXIpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAo Y29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcik7CgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0oY29u c3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKICAgICAgICBuc0ZpbGVVUkwgb3BlcmF0b3Ig Kyhjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqICgpIGNvbnN0IHsgcmV0dXJuIChj b25zdCBjaGFyKiltVVJMOyB9CiAgICAgICAgY29uc3QgY2hhciogR2V0VVJMU3RyaW5nKCkgY29u c3QgeyByZXR1cm4gKGNvbnN0IGNoYXIqKW1VUkw7IH0KCiAgICAgICAgY29uc3QgY2hhciogR2V0 QXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hhciopbVVSTDsgfQojIDYxNyAiLi4v Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgIHByb3RlY3RlZDoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNGaWxlUGF0aDsKICAgICAgICBuc1Np bXBsZUNoYXJTdHJpbmcgbVVSTDsKCgoKCgoKfTsKCgpjbGFzcyBuc0ZpbGVQYXRoCgoKCgp7CiAg ICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25z dCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z RmlsZVBhdGgoY29uc3QgY2hhciogaW5Vbml4UGF0aFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGly cyA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3Qg bnNTdHJpbmcmIGluVW5peFBhdGhTdHJpbmcsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zRmlsZVVSTCYg aW5VUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3Qg bnNGaWxlU3BlYyYgaW5QYXRoKTsKICAgICAgICB2aXJ0dWFsIH5uc0ZpbGVQYXRoKCk7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKiAoKSBjb25z dCB7IHJldHVybiBtUGF0aDsgfQoKCgoKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z RmlsZVBhdGgmIGluUGF0aCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKiBp blVuaXhQYXRoU3RyaW5nKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5n JiBpblVuaXhQYXRoU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdXRvQ1N0cmluZyBzdHJp bmcoaW5Vbml4UGF0aFN0cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICp0aGlzID0gc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgIHZvaWQg b3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcik7CgogICAgICAgIHZvaWQgb3Bl cmF0b3IgKz0oY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKICAgICAgICBuc0ZpbGVQ YXRoIG9wZXJhdG9yICsoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKSBjb25zdDsKIyA2 NzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICBwcml2YXRlOgoKICAgICAg ICBuc1NpbXBsZUNoYXJTdHJpbmcgbVBhdGg7CgoKCgoKfTsKCgpjbGFzcyBuc1BlcnNpc3RlbnRG aWxlRGVzY3JpcHRvcgoKCgoKCnsKICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcigpIHt9CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKGNvbnN0IG5zUGVyc2lz dGVudEZpbGVEZXNjcmlwdG9yJiBpbkVuY29kZWREYXRhKTsKICAgICAgICB2aXJ0dWFsIH5uc1Bl cnNpc3RlbnRGaWxlRGVzY3JpcHRvcigpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3Qg bnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImIGluRW5jb2RlZERhdGEpOwoKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IoY29uc3QgbnNG aWxlU3BlYyYgaW5TcGVjKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVNw ZWMmIGluU3BlYyk7CgoKCgogICAgICAgIGZyaWVuZCBuc3Jlc3VsdCBSZWFkKG5zSUlucHV0U3Ry ZWFtKiBhU3RyZWFtLCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwogICAgICAgIGZyaWVu ZCBuc3Jlc3VsdCBXcml0ZShuc0lPdXRwdXRTdHJlYW0qIGFTdHJlYW0sIGNvbnN0IG5zUGVyc2lz dGVudEZpbGVEZXNjcmlwdG9yJik7CgogICAgICAgIGZyaWVuZCBuc0lucHV0U3RyZWFtJiBvcGVy YXRvciA+PiAobnNJbnB1dFN0cmVhbSYsIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJik7Cgog ICAgICAgIGZyaWVuZCBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFt JiwgY29uc3QgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKCiAgICAgICAgZnJpZW5kIGNs YXNzIG5zRmlsZVNwZWM7CgogICAgICAgIHZvaWQgR2V0RGF0YShuc1NpbXBsZUNoYXJTdHJpbmcm IG91dERhdGEpIGNvbnN0OwogICAgICAgIHZvaWQgU2V0RGF0YShjb25zdCBuc1NpbXBsZUNoYXJT dHJpbmcmIGluRGF0YSk7CiAgICAgICAgdm9pZCBHZXREYXRhKG5zU2ltcGxlQ2hhclN0cmluZyYg b3V0RGF0YSwgUFJJbnQzMiYgb3V0U2l6ZSkgY29uc3Q7CiAgICAgICAgdm9pZCBTZXREYXRhKGNv bnN0IG5zU2ltcGxlQ2hhclN0cmluZyYgaW5EYXRhLCBQUkludDMyIGluU2l6ZSk7CiAgICAgICAg dm9pZCBTZXREYXRhKGNvbnN0IGNoYXIqIGluRGF0YSwgUFJJbnQzMiBpblNpemUpOwoKCgoKCiAg ICBwcm90ZWN0ZWQ6CgogICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBtRGVzY3JpcHRvclN0cmlu ZzsKCn07CgoKY2xhc3MgbnNEaXJlY3RvcnlJdGVyYXRvcgojIDc0NyAiLi4vLi4vZGlzdC9pbmNs dWRlL25zRmlsZVNwZWMuaCIKewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciggY29uc3QgbnNGaWxlU3BlYyYgcGFy ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkJvb2wgcmVzb3ZlU3ltTGlua3MpOwoKCiAgICAgICAgICAgIHZpcnR1YWwgfm5zRGly ZWN0b3J5SXRlcmF0b3IoKTsKCiAgICAgICAgICAgIFBSQm9vbCBFeGlzdHMoKSBjb25zdCB7IHJl dHVybiBtRXhpc3RzOyB9CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9y ICsrKCk7CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9yICsrKGludCkg eyByZXR1cm4gKysoKnRoaXMpOyB9CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9w ZXJhdG9yIC0tKCk7CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9yIC0t KGludCkgeyByZXR1cm4gLS0oKnRoaXMpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9wZXJhdG9yIG5zRmlsZVNwZWMmKCkgeyByZXR1cm4gbUN1cnJlbnQ7IH0KCiAgICAg ICAgICAgIG5zRmlsZVNwZWMmIFNwZWMoKSB7IHJldHVybiBtQ3VycmVudDsgfQoKICAgICAgICBw cml2YXRlOgojIDc3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICBw cml2YXRlOgoKICAgICAgICAgICAgbnNGaWxlU3BlYyBtQ3VycmVudDsKICAgICAgICAgICAgUFJC b29sIG1FeGlzdHM7CiAgICAgICAgUFJCb29sIG1SZXNvdmVTeW1MaW5rczsKCgogICAgICAgICAg ICBuc0ZpbGVTcGVjIG1TdGFydGluZzsKCgoKICAgICAgICAgICAgRElSKiBtRGlyOwojIDc5NCAi Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKfTsKCgpjbGFzcyBuc05TUFJQYXRoCgoK Cgp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNOU1BSUGF0aChj b25zdCBuc0ZpbGVTcGVjJiBpblNwZWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IG1GaWxlUGF0aChpblNwZWMpLCBtb2RpZmllZE5TUFJQYXRoKDApIHt9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zTlNQUlBhdGgoY29uc3QgbnNGaWxlVVJMJiBpblVS TCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUZpbGVQYXRoKGluVVJM KSwgbW9kaWZpZWROU1BSUGF0aCgwKSB7fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuc05TUFJQYXRoKGNvbnN0IG5zRmlsZVBhdGgmIGluVW5peFBhdGgpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlUGF0aChpblVuaXhQYXRoKSwgbW9kaWZpZWRO U1BSUGF0aCgwKSB7fQoKICAgIHZpcnR1YWwgfm5zTlNQUlBhdGgoKTsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiMgODIzICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgpwcml2YXRlOgoKICAgIG5zRmlsZVBhdGgg bUZpbGVQYXRoOwogICAgY2hhciogbW9kaWZpZWROU1BSUGF0aDsKfTsKCgogICAgICAgbnNyZXN1 bHQgTlNfRmlsZVNwZWNUb0lGaWxlKG5zRmlsZVNwZWMqIGZpbGVTcGVjLCBuc0lMb2NhbEZpbGUq ICpyZXN1bHQpOwojIDM5ICJuc0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c1ZvaWRBcnJheS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNWb2lkQXJyYXkuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0 cmluZy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIiAyCmNsYXNz IG5zSVNpemVPZkhhbmRsZXI7CgoKdHlwZWRlZiBQUkJvb2wgKCogbnNWb2lkQXJyYXlFbnVtRnVu Yykodm9pZCogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKCgpjbGFzcyBuc1ZvaWRBcnJheSB7CnB1 YmxpYzoKICBuc1ZvaWRBcnJheSgpOwogIG5zVm9pZEFycmF5KFBSSW50MzIgYUNvdW50KTsKICB2 aXJ0dWFsIH5uc1ZvaWRBcnJheSgpOwoKICBuc1ZvaWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5z Vm9pZEFycmF5JiBvdGhlcik7CgogIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogIFBSSW50MzIgQ291bnQoKSBjb25zdCB7 CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50IDogMDsKICB9CgogIHZvaWQqIEVsZW1l bnRBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgdm9pZCogb3BlcmF0b3JbXShQUkludDMyIGFJ bmRleCkgY29uc3QgeyByZXR1cm4gRWxlbWVudEF0KGFJbmRleCk7IH0KCiAgUFJJbnQzMiBJbmRl eE9mKHZvaWQqIGFQb3NzaWJsZUVsZW1lbnQpIGNvbnN0OwoKICBQUkJvb2wgSW5zZXJ0RWxlbWVu dEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlRWxl bWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRF bGVtZW50KHZvaWQqIGFFbGVtZW50KSB7CiAgICByZXR1cm4gSW5zZXJ0RWxlbWVudEF0KGFFbGVt ZW50LCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVFbGVtZW50KHZvaWQqIGFFbGVtZW50 KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KTsKICB2b2lkIENsZWFy KCk7CgogIHZvaWQgQ29tcGFjdCgpOwoKICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNWb2lk QXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBSQm9vbCBFbnVtZXJhdGVCYWNr d2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKcHJvdGVjdGVk OgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1CaXRzOwoKCgoKICAgIFBSSW50 MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9OwoKICBJbXBsKiBtSW1wbDsK CiAgZW51bSB7CiAgICBrQXJyYXlPd25lck1hc2sgPSAxIDw8IDMxLAogICAga0FycmF5U2l6ZU1h c2sgPSB+a0FycmF5T3duZXJNYXNrCiAgfTsKCgoKICBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNv bnN0OwogIHZvaWQgU2V0QXJyYXlTaXplKFBSSW50MzIgYVNpemUpOwogIFBSQm9vbCBJc0FycmF5 T3duZXIoKSBjb25zdDsKICB2b2lkIFNldEFycmF5T3duZXIoUFJCb29sIGFPd25lcik7Cgpwcml2 YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwp9OwoKCgpjbGFz cyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNBdXRv Vm9pZEFycmF5KCk7Cgpwcm90ZWN0ZWQ6CgoKICBlbnVtIHsga0F1dG9CdWZTaXplID0gOCB9Owog IGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtBdXRvQnVmU2l6ZSAtIDEpICogc2l6ZW9m KHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0eXBlZGVmIFBSQm9vbCAoKm5zU3RyaW5n QXJyYXlFbnVtRnVuYykobnNTdHJpbmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBu c1N0cmluZ0FycmF5OiBwcm90ZWN0ZWQgbnNWb2lkQXJyYXkKewpwdWJsaWM6CiAgbnNTdHJpbmdB cnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZvaWQpOwoKICBuc1N0cmluZ0Fy cmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVP Zihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoK ICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291 bnQoKTsKICB9CgogIHZvaWQgU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgsIG5zQVdyaXRhYmxlU3Ry aW5nJiBhU3RyaW5nKSBjb25zdDsKICBuc1N0cmluZyogU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgp IGNvbnN0OwogIG5zU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50MzIgYUluZGV4KSBjb25zdCB7IHJl dHVybiBTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0FSZWFk YWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKICBQUkludDMyIEluZGV4T2ZJZ25v cmVDYXNlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwoK ICBQUkJvb2wgSW5zZXJ0U3RyaW5nQXQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcs IFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VTdHJpbmdBdChjb25zdCBuc0FSZWFk YWJsZVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kU3Ry aW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0 U3RyaW5nQXQoYVN0cmluZywgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlU3RyaW5nKGNv bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlU3RyaW5nSWdu b3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92 ZVN0cmluZ0F0KFBSSW50MzIgYUluZGV4KTsKICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENv bXBhY3Qodm9pZCkgewogICAgbnNWb2lkQXJyYXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBF bnVtZXJhdGVGb3J3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRh KTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zU3RyaW5nQXJyYXlFbnVtRnVuYyBhRnVu Yywgdm9pZCogYURhdGEpOwoKcHJpdmF0ZToKCiAgbnNTdHJpbmdBcnJheShjb25zdCBuc1N0cmlu Z0FycmF5JiBvdGhlcik7Cn07CgoKY2xhc3MgbnNDU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wgKCpu c0NTdHJpbmdBcnJheUVudW1GdW5jKShuc0NTdHJpbmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7 CgpjbGFzcyBuc0NTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgog IG5zQ1N0cmluZ0FycmF5KHZvaWQpOwogIHZpcnR1YWwgfm5zQ1N0cmluZ0FycmF5KHZvaWQpOwoK ICBuc0NTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7 CgogIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJl c3VsdCkgY29uc3Q7CgogIFBSSW50MzIgQ291bnQodm9pZCkgY29uc3QgewogICAgcmV0dXJuIG5z Vm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgs IG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmluZyogQ1N0cmluZ0F0KFBSSW50 MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgp IGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZihj b25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRleE9m SWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CgogIFBS Qm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBhQ1N0cmluZywgUFJJbnQzMiBh SW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25zdCBuc0NTdHJpbmcmIGFDU3Ry aW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRDU3RyaW5nKGNvbnN0IG5zQ1N0 cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3RyaW5nQXQoYUNTdHJpbmcsIENv dW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBhQ1N0 cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNlKGNvbnN0IG5zQ1N0cmluZyYg YUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgpOwogIHZv aWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7CiAgICBuc1ZvaWRBcnJheTo6 Q29tcGFjdCgpOwogIH0KCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zQ1N0cmluZ0FycmF5 RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRz KG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6Cgog IG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CiMgNDAgIm5z SW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDEKIyAz NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMzcgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0hhc2h0YWJsZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BybG9jay5oIiAxCiMgMzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJs ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAzOSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3Jl LmgiIDEKIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNI YXNodGFibGUuaCIgMgoKY2xhc3MgbnNIYXNodGFibGU7CmNsYXNzIG5zU3RyaW5nS2V5OwoKY2xh c3MgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSGFzaEtleSh2b2lkKTsKCnB1YmxpYzoKICB2 aXJ0dWFsIH5uc0hhc2hLZXkodm9pZCk7CiAgdmlydHVhbCBQUlVpbnQzMiBIYXNoQ29kZSh2b2lk KSBjb25zdCA9IDA7CiAgdmlydHVhbCBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSAqYUtl eSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNIYXNoS2V5ICpDbG9uZSgpIGNvbnN0ID0gMDsKCgpw dWJsaWM6CgogIGVudW0gbnNIYXNoS2V5VHlwZSB7CiAgICBVbmtub3duS2V5LAogICAgU3VwcG9y dHNLZXksCiAgICBWb2lkS2V5LAogICAgSURLZXksCiAgICBDU3RyaW5nS2V5LAogICAgU3RyaW5n S2V5LAogICAgT3BhcXVlS2V5CiAgfTsKICBuc0hhc2hLZXlUeXBlIEdldEtleVR5cGUoKSBjb25z dCB7IHJldHVybiBtS2V5VHlwZTsgfQpwcm90ZWN0ZWQ6CiAgbnNIYXNoS2V5VHlwZSBtS2V5VHlw ZTsKCn07CgoKCnR5cGVkZWYgUFJCb29sICgqIG5zSGFzaHRhYmxlRW51bUZ1bmMpKG5zSGFzaEtl eSAqYUtleSwgdm9pZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNIYXNodGFibGUg ewpwcm90ZWN0ZWQ6CgogIFBSTG9jayogbUxvY2s7CiAgUExIYXNoVGFibGUgbUhhc2h0YWJsZTsK ICBQUkJvb2wgbUVudW1lcmF0aW5nOwoKcHVibGljOgogIG5zSGFzaHRhYmxlKFBSVWludDMyIGFT aXplID0gMTYsIFBSQm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgdmlydHVhbCB+bnNIYXNodGFibGUo KTsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSB7IHJldHVybiBtSGFzaHRhYmxlLm5lbnRyaWVzOyB9 CiAgUFJCb29sIEV4aXN0cyhuc0hhc2hLZXkgKmFLZXkpOwogIHZvaWQgKlB1dChuc0hhc2hLZXkg KmFLZXksIHZvaWQgKmFEYXRhKTsKICB2b2lkICpHZXQobnNIYXNoS2V5ICphS2V5KTsKICB2b2lk ICpSZW1vdmUobnNIYXNoS2V5ICphS2V5KTsKICBuc0hhc2h0YWJsZSAqQ2xvbmUoKTsKICB2b2lk IEVudW1lcmF0ZShuc0hhc2h0YWJsZUVudW1GdW5jIGFFbnVtRnVuYywgdm9pZCogY2xvc3VyZSA9 IF9fbnVsbCk7CiAgdm9pZCBSZXNldCgpOwogIHZvaWQgUmVzZXQobnNIYXNodGFibGVFbnVtRnVu YyBkZXN0cm95RnVuYywgdm9pZCogY2xvc3VyZSA9IF9fbnVsbCk7Cn07CgoKCgoKdHlwZWRlZiB2 b2lkKiAoKiBuc0hhc2h0YWJsZUNsb25lRWxlbWVudEZ1bmMpKG5zSGFzaEtleSAqYUtleSwgdm9p ZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNPYmplY3RIYXNodGFibGUgOiBwdWJs aWMgbnNIYXNodGFibGUgewpwdWJsaWM6CiAgbnNPYmplY3RIYXNodGFibGUobnNIYXNodGFibGVD bG9uZUVsZW1lbnRGdW5jIGNsb25lRWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAgICB2b2lk KiBjbG9uZUVsZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIG5zSGFzaHRhYmxlRW51 bUZ1bmMgZGVzdHJveUVsZW1lbnRGdW4sCiAgICAgICAgICAgICAgICAgICAgdm9pZCogZGVzdHJv eUVsZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFTaXplID0gMTYs IFBSQm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgfm5zT2JqZWN0SGFzaHRhYmxlKCk7CgogIG5zSGFz aHRhYmxlICpDbG9uZSgpOwogIHZvaWQgUmVzZXQoKTsKICBQUkJvb2wgUmVtb3ZlQW5kRGVsZXRl KG5zSGFzaEtleSAqYUtleSk7Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIFBSSW50biBDb3B5RWxlbWVu dChQTEhhc2hFbnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwoKICBuc0hhc2h0YWJsZUNs b25lRWxlbWVudEZ1bmMgbUNsb25lRWxlbWVudEZ1bjsKICB2b2lkKiBtQ2xvbmVFbGVtZW50Q2xv c3VyZTsKICBuc0hhc2h0YWJsZUVudW1GdW5jIG1EZXN0cm95RWxlbWVudEZ1bjsKICB2b2lkKiBt RGVzdHJveUVsZW1lbnRDbG9zdXJlOwp9OwoKCgoKY2xhc3MgbnNJU3VwcG9ydHM7CgpjbGFzcyBu c1N1cHBvcnRzSGFzaHRhYmxlCiA6IHByaXZhdGUgbnNIYXNodGFibGUKewpwdWJsaWM6CiAgdHlw ZWRlZiBQUkJvb2wgKCogRW51bUZ1bmMpIChuc0hhc2hLZXkgKmFLZXksIHZvaWQgKmFEYXRhLCB2 b2lkKiBjbG9zdXJlKTsKCiAgbnNTdXBwb3J0c0hhc2h0YWJsZShQUlVpbnQzMiBhU2l6ZSA9IDE2 LCBQUkJvb2wgdGhyZWFkU2FmZSA9IDApCiAgICA6IG5zSGFzaHRhYmxlKGFTaXplLCB0aHJlYWRT YWZlKSB7fQogIH5uc1N1cHBvcnRzSGFzaHRhYmxlKCk7CgogIFBSSW50MzIgQ291bnQgKHZvaWQp CiAgewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpDb3VudCgpOwogIH0KICBQUkJvb2wgRXhpc3Rz IChuc0hhc2hLZXkgKmFLZXkpCiAgewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpFeGlzdHMgKGFL ZXkpOwogIH0KICBQUkJvb2wgUHV0IChuc0hhc2hLZXkgKmFLZXksCiAgICAgICAgICAgICAgbnNJ U3VwcG9ydHMgKmFEYXRhLAogICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqdmFsdWUgPSAwKTsK ICBuc0lTdXBwb3J0cyogR2V0IChuc0hhc2hLZXkgKmFLZXkpOwogIFBSQm9vbCBSZW1vdmUgKG5z SGFzaEtleSAqYUtleSwgbnNJU3VwcG9ydHMgKip2YWx1ZSA9IDApOwogIG5zSGFzaHRhYmxlICpD bG9uZSgpOwogIHZvaWQgRW51bWVyYXRlIChFbnVtRnVuYyBhRW51bUZ1bmMsIHZvaWQqIGNsb3N1 cmUgPSBfX251bGwpCiAgewogICAgbnNIYXNodGFibGU6OkVudW1lcmF0ZSAoYUVudW1GdW5jLCBj bG9zdXJlKTsKICB9CiAgdm9pZCBSZXNldCgpOwoKIHByaXZhdGU6CiAgc3RhdGljIFBSQm9vbCBS ZWxlYXNlRWxlbWVudCAobnNIYXNoS2V5ICosIHZvaWQgKiwgdm9pZCAqKTsKICBzdGF0aWMgUFJJ bnRuIEVudW1lcmF0ZUNvcHkgKFBMSGFzaEVudHJ5ICosIFBSSW50biwgdm9pZCAqKTsKfTsKCgoK CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAxNzEgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0lTdXBwb3J0c0tleSA6IHB1Ymxp YyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNJU3VwcG9ydHMqIG1LZXk7CgpwdWJsaWM6CiAg bnNJU3VwcG9ydHNLZXkobnNJU3VwcG9ydHMqIGtleSkgewoKICAgIG1LZXlUeXBlID0gU3VwcG9y dHNLZXk7CgogICAgbUtleSA9IGtleTsKICAgICgoMCAhPSAobUtleSkpID8gbnNfaWZfYWRkcmVm KG1LZXkpIDogMCk7CiAgfQoKICB+bnNJU3VwcG9ydHNLZXkodm9pZCkgewogICAgZG8geyBpZiAo bUtleSkgeyAobUtleSktPlJlbGVhc2UoKTsgKG1LZXkpID0gMDsgfSB9IHdoaWxlICgwKTsKICB9 CgogIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJVaW50MzIp bUtleTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7 CiAgICBpZiAoIShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gU3VwcG9ydHNLZXkpKSBuc0RlYnVnOjpB c3NlcnRpb24oIm1pc21hdGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5cGUoKSA9PSBT dXBwb3J0c0tleSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDE5NCk7CiAg ICByZXR1cm4gKG1LZXkgPT0gKChuc0lTdXBwb3J0c0tleSAqKSBhS2V5KS0+bUtleSk7CiAgfQoK ICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lTdXBwb3J0c0tl eShtS2V5KTsKICB9Cn07CgoKCgpjbGFzcyBuc1ZvaWRLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsK cHJvdGVjdGVkOgogIHZvaWQqIG1LZXk7CgpwdWJsaWM6CiAgbnNWb2lkS2V5KHZvaWQqIGtleSkg ewoKICAgIG1LZXlUeXBlID0gVm9pZEtleTsKCiAgICBtS2V5ID0ga2V5OwogIH0KCiAgUFJVaW50 MzIgSGFzaENvZGUodm9pZCkgY29uc3QgewogICAgcmV0dXJuIChQUlVpbnQzMiltS2V5OwogIH0K CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0IHsKICAgIGlmICgh KGFLZXktPkdldEtleVR5cGUoKSA9PSBWb2lkS2V5KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJtaXNt YXRjaGVkIGtleSB0eXBlcyIsICJhS2V5LT5HZXRLZXlUeXBlKCkgPT0gVm9pZEtleSIsICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDIyMyk7CiAgICByZXR1cm4gKG1LZXkgPT0g KChjb25zdCBuc1ZvaWRLZXkgKikgYUtleSktPm1LZXkpOwogIH0KCiAgbnNIYXNoS2V5ICpDbG9u ZSgpIGNvbnN0IHsKICAgIHJldHVybiBuZXcgbnNWb2lkS2V5KG1LZXkpOwogIH0KCiAgdm9pZCog R2V0VmFsdWUoKSB7IHJldHVybiBtS2V5OyB9Cn07CgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lELmgiIDEKIyAyMzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpj bGFzcyBuc0lES2V5IDogcHVibGljIG5zSGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lEIG1JRDsK CnB1YmxpYzoKICBuc0lES2V5KGNvbnN0IG5zSUQgJmFJRCkgewoKICAgIG1LZXlUeXBlID0gSURL ZXk7CgogICAgbUlEID0gYUlEOwogIH0KCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Qg ewogICAgcmV0dXJuIG1JRC5tMDsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5 ICphS2V5KSBjb25zdCB7CiAgICBpZiAoIShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gSURLZXkpKSBu c0RlYnVnOjpBc3NlcnRpb24oIm1pc21hdGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5 cGUoKSA9PSBJREtleSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDI1Nik7 CiAgICByZXR1cm4gKG1JRC5FcXVhbHMoKChjb25zdCBuc0lES2V5ICopIGFLZXkpLT5tSUQpKTsK ICB9CgogIG5zSGFzaEtleSAqQ2xvbmUoKSBjb25zdCB7CiAgICByZXR1cm4gbmV3IG5zSURLZXko bUlEKTsKICB9Cn07CgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAy NjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgoKY2xhc3MgbnNDU3RyaW5n S2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAg TkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsKCiAgbnNDU3RyaW5nS2V5KGNv bnN0IGNoYXIqIHN0ciwgUFJJbnQzMiBzdHJMZW4gPSAtMSwgT3duZXJzaGlwIG93biA9IE9XTl9D TE9ORSk7CiAgbnNDU3RyaW5nS2V5KGNvbnN0IG5zQ1N0cmluZyYgc3RyKTsKICB+bnNDU3RyaW5n S2V5KHZvaWQpOwoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1 YWxzKGNvbnN0IG5zSGFzaEtleSogYUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNv bnN0OwoKCgogIGNvbnN0IGNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0K ICBQUlVpbnQzMiBHZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpw cm90ZWN0ZWQ6CiAgY2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hpcCBt T3duZXJzaGlwOwp9OwoKCmNsYXNzIG5zU3RyaW5nS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1 YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAog ICAgT1dOCiAgfTsKCiAgbnNTdHJpbmdLZXkoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSSW50MzIg c3RyTGVuID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUpOwogIG5zU3RyaW5nS2V5KGNv bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBzdHIpOwogIH5uc1N0cmluZ0tleSh2b2lkKTsKCiAgUFJV aW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hL ZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBQ UlVuaWNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KICBQUlVpbnQzMiBH ZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAg UFJVbmljaGFyKiBtU3RyOwogIFBSVWludDMyIG1TdHJMZW47CiAgT3duZXJzaGlwIG1Pd25lcnNo aXA7Cn07CgoKY2xhc3MgbnNPcGFxdWVLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHVibGljOgoK ICBlbnVtIE93bmVyc2hpcCB7CiAgICBORVZFUl9PV04sCiAgICBPV05fQ0xPTkUsCiAgICBPV04K ICB9OwoKICBuc09wYXF1ZUtleShjb25zdCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZkxlbiwgT3du ZXJzaGlwIG93biA9IE9XTl9DTE9ORSk7CiAgfm5zT3BhcXVlS2V5KHZvaWQpOwoKICBQUlVpbnQz MiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSog YUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNvbnN0OwoKCgogIGNvbnN0IGNoYXIq IEdldEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KICBQUlVpbnQzMiBHZXRCdWZmZXJM ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAgY2hhciogbUJ1 ZjsKICBQUlVpbnQzMiBtQnVmTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9OwojIDQxICJu c0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgNDIg Im5zSW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAx CiMgNDMgIm5zSW5zdGFsbC5oIiAyCgojIDEgIm5zU29mdHdhcmVVcGRhdGUuaCIgMQoKCgoKIyAx ICIuLi9wdWJsaWMvbnNTb2Z0d2FyZVVwZGF0ZUlJRHMuaCIgMQojIDYgIm5zU29mdHdhcmVVcGRh dGUuaCIgMgojIDEgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAxCiMgMjkgIi4uL3B1 YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw b3J0cy5oIiAxCiMgMzAgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIgMQojIDMxICIuLi9wdWJsaWMvbnNJU29mdHdh cmVVcGRhdGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMzIg Ii4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSUZpbGVTcGVjLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgi CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDE4ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIgMgpjbGFzcyBuc0lGaWxlVVJMOwoKY2xhc3MgbnNJRmls ZVBhdGg7CgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKIyA0 MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCmNsYXNzIG5zSUZpbGVTcGVjIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4YzBhMDgwLCAweDA4NjgsIDB4MTFk MywgeyAweDkxLCAweDVmLCAweGQ5LCAweGQ4LCAweDg5LCAweGQ0LCAweDhlLCAweDNjIH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgRnJvbUZpbGVTcGVjKGNvbnN0IG5zSUZp bGVTcGVjICpvcmlnaW5hbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVUkxTdHJpbmco Y2hhciAqICphVVJMU3RyaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkxTdHJpbmco Y29uc3QgY2hhciAqIGFVUkxTdHJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5p eFN0eWxlRmlsZVBhdGgoY2hhciAqICphVW5peFN0eWxlRmlsZVBhdGgpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFVuaXhTdHlsZUZpbGVQYXRoKGNvbnN0IGNoYXIgKiBhVW5peFN0eWxlRmls ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVyc2lzdGVudERlc2NyaXB0b3JT dHJpbmcoY2hhciAqICphUGVyc2lzdGVudERlc2NyaXB0b3JTdHJpbmcpID0gMDsKICB2aXJ0dWFs IG5zcmVzdWx0IFNldFBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKGNvbnN0IGNoYXIgKiBhUGVy c2lzdGVudERlc2NyaXB0b3JTdHJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmF0 aXZlUGF0aChjaGFyICogKmFOYXRpdmVQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRO YXRpdmVQYXRoKGNvbnN0IGNoYXIgKiBhTmF0aXZlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXROU1BSUGF0aChjaGFyICogKmFOU1BSUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBFcnJvcih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmFsaWQoUFJCb29s ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZhaWxlZChQUkJvb2wgKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVhZk5hbWUoY2hhciAqICphTGVhZk5h bWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlYWZOYW1lKGNvbnN0IGNoYXIgKiBhTGVh Zk5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50KG5zSUZpbGVTcGVjICog KmFQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5wdXRTdHJlYW0obnNJSW5w dXRTdHJlYW0gKiAqYUlucHV0U3RyZWFtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE91 dHB1dFN0cmVhbShuc0lPdXRwdXRTdHJlYW0gKiAqYU91dHB1dFN0cmVhbSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBJc0NoaWxkT2YobnNJRmlsZVNwZWMgKnBvc3NpYmxlUGFyZW50LCBQUkJv b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNwZWMobnNGaWxl U3BlYyAqYUZpbGVTcGVjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyb21GaWxlU3Bl Yyhjb25zdCBuc0ZpbGVTcGVjICYgc3BlYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG aWxlQ29udGVudHMoY2hhciAqICphRmlsZUNvbnRlbnRzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXRGaWxlQ29udGVudHMoY29uc3QgY2hhciAqIGFGaWxlQ29udGVudHMpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgTWFrZVVuaXF1ZSh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IE1ha2VVbmlxdWVXaXRoU3VnZ2VzdGVkTmFtZShjb25zdCBjaGFyICpzdWdnZXN0ZWROYW1lKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vZERhdGUoUFJVaW50MzIgKmFNb2REYXRlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vZERhdGVDaGFuZ2VkKFBSVWludDMyIG9sZFN0YW1w LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNEaXJlY3Rvcnko UFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRmlsZShQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXhpc3RzKFBSQm9vbCAqX3JldHZh bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0hpZGRlbihQUkJvb2wgKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSUZpbGVTcGVjICpzcGVjLCBQUkJvb2wg Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemUoUFJVaW50MzIg KmFGaWxlU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNrU3BhY2VBdmFpbGFi bGUoUFJJbnQ2NCAqYURpc2tTcGFjZUF2YWlsYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBBcHBlbmRSZWxhdGl2ZVVuaXhQYXRoKGNvbnN0IGNoYXIgKnJlbGF0aXZlUGF0aCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVEaXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBUb3VjaCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3ltbGluayhQUkJv b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVN5bWxpbmsodm9p ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGUoUFJCb29sIHJlY3Vyc2l2ZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcnVuY2F0ZShQUkludDMyIGFOZXdMZW5ndGgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IGNoYXIgKm5ld0xlYWZOYW1lKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUb0Rpcihjb25zdCBuc0lGaWxlU3BlYyAqbmV3UGFy ZW50RGlyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUb0Rpcihjb25zdCBuc0lGaWxl U3BlYyAqbmV3UGFyZW50RGlyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4ZWN1dGUoY29u c3QgY2hhciAqYXJncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9yUmVh ZGluZyh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5TdHJlYW1Gb3JXcml0aW5n KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVhbUZvclJlYWRpbmdBbmRX cml0aW5nKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2VTdHJlYW0odm9pZCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N0cmVhbU9wZW4oUFJCb29sICpfcmV0dmFsKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVvZihQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgUmVhZChjaGFyICoqYnVmZmVyLCBQUkludDMyIHJlcXVlc3RlZENvdW50 LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWRMaW5lKGNo YXIgKipsaW5lLCBQUkludDMyIGJ1ZmZlclNpemUsIFBSQm9vbCAqd2FzVHJ1bmNhdGVkKSA9IDA7 CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXcml0ZShjb25zdCBjaGFyICpkYXRhLCBQUkludDMy IHJlcXVlc3RlZENvdW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IEZsdXNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VlayhQUkludDMyIG9m ZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUZWxsKFBSSW50MzIgKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5kTGluZSh2b2lkKSA9IDA7Cgp9OwojIDc3OSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCmNsYXNzIG5zSURpcmVjdG9yeUl0ZXJhdG9y IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4YzBhMDgzLCAweDA4NjgsIDB4 MTFkMywgeyAweDkxLCAweDVmLCAweGQ5LCAweGQ4LCAweDg5LCAweGQ0LCAweDhlLCAweDNjIH19 OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGaWxlU3BlYyAqcGFy ZW50LCBQUkJvb2wgcmVzb2x2ZVN5bWxpbmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXhp c3RzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXh0KHZvaWQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VycmVudFNwZWMobnNJRmlsZVNwZWMgKiAq YUN1cnJlbnRTcGVjKSA9IDA7Cgp9OwojIDg3NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVT cGVjLmgiCiAgICAgICBuc3Jlc3VsdCBOU19OZXdGaWxlU3BlY1dpdGhTcGVjKGNvbnN0IG5zRmls ZVNwZWMmIGFTcmNGaWxlU3BlYywgbnNJRmlsZVNwZWMgKipyZXN1bHQpOwogICAgICAgbnNyZXN1 bHQgTlNfTmV3RmlsZVNwZWMobnNJRmlsZVNwZWMqKiByZXN1bHQpOwogICAgICAgbnNyZXN1bHQg TlNfTmV3RGlyZWN0b3J5SXRlcmF0b3IobnNJRGlyZWN0b3J5SXRlcmF0b3IqKiByZXN1bHQpOwoK aW5saW5lIFBSQm9vbCBFeGlzdHMobnNJRmlsZVNwZWMqIGYpIHsgUFJCb29sIHllczsgcmV0dXJu ICghKChmLT5FeGlzdHMoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQppbmxpbmUgUFJC b29sIEV4aXN0cyhuc0lEaXJlY3RvcnlJdGVyYXRvciogZikgeyBQUkJvb2wgeWVzOyByZXR1cm4g KCEoKGYtPkV4aXN0cygmeWVzKSkgJiAweDgwMDAwMDAwKSkgJiYgeWVzOyB9CmlubGluZSBQUkJv b2wgSXNEaXJlY3RvcnkobnNJRmlsZVNwZWMqIGYpIHsgUFJCb29sIHllczsgcmV0dXJuICghKChm LT5Jc0RpcmVjdG9yeSgmeWVzKSkgJiAweDgwMDAwMDAwKSkgJiYgeWVzOyB9CiMgMzMgIi4uL3B1 YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lY UElOb3RpZmllci5oIiAxCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUElOb3RpZmllci5o IgpjbGFzcyBuc0lYUElMaXN0ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHhlZWE5MGQ0MCwgMHhiMDU5LCAweDExZDIsIHsgMHg5MSwgMHg1ZSwgMHhjMSwgMHgyYiwgMHg2 OSwgMHg2YywgMHg5MywgMHgzMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEJlZm9yZUphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJMKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVySmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmlj aGFyICpVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbFN0YXJ0ZWQoY29uc3Qg UFJVbmljaGFyICpVUkwsIGNvbnN0IFBSVW5pY2hhciAqVUlQYWNrYWdlTmFtZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBJdGVtU2NoZWR1bGVkKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5hbGl6ZVByb2dyZXNzKGNvbnN0IFBSVW5pY2hh ciAqbWVzc2FnZSwgUFJJbnQzMiBpdGVtTnVtLCBQUkludDMyIHRvdE51bSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBGaW5hbFN0YXR1cyhjb25zdCBQUlVuaWNoYXIgKlVSTCwgUFJJbnQzMiBz dGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9nQ29tbWVudChjb25zdCBQUlVuaWNo YXIgKmNvbW1lbnQpID0gMDsKCn07CiMgMzUgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5o IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAzNiAiLi4vcHVibGlj L25zSVNvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTW9kdWxl LmgiIDEKIyAzNyAiLi4vcHVibGljL25zSVNvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJR2VuZXJpY0ZhY3RvcnkuaCIgMQojIDM4ICIuLi9wdWJsaWMvbnNJU29m dHdhcmVVcGRhdGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3dJbnRl cm5hbC5oIiAxCiMgMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3dJbnRlcm5hbC5o IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3cuaCIgMQojIDEwICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJRE9NV2luZG93LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0 dWJzLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiCiMgMSAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNs dWRlL2RvbXN0dWJzLmgiIDIKaW5saW5lIFBSQm9vbCBET01TdHJpbmdJc051bGwoY29uc3QgbnNB UmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpCnsKCiAgcmV0dXJuIDA7Cn0KaW5saW5lIHZvaWQgU2V0 RE9NU3RyaW5nVG9OdWxsKG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKQp7CiAgYVN0cmluZy5U cnVuY2F0ZSgpOwoKfQp0eXBlZGVmIFBSVWludDY0IERPTVRpbWVTdGFtcDsKCmNsYXNzIG5zSURP TUF0dHI7CgpjbGFzcyBuc0lET01DREFUQVNlY3Rpb247CgpjbGFzcyBuc0lET01DaGFyYWN0ZXJE YXRhOwoKY2xhc3MgbnNJRE9NQ29tbWVudDsKCmNsYXNzIG5zSURPTURPTUltcGxlbWVudGF0aW9u OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnQ7CgpjbGFzcyBuc0lET01Eb2N1bWVudEZyYWdtZW50OwoK Y2xhc3MgbnNJRE9NRG9jdW1lbnRUeXBlOwoKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5z SURPTUVudGl0eTsKCmNsYXNzIG5zSURPTUVudGl0eVJlZmVyZW5jZTsKCmNsYXNzIG5zSURPTU5T RG9jdW1lbnQ7CgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXA7CgpjbGFzcyBuc0lET01Ob2RlOwoK Y2xhc3MgbnNJRE9NTm9kZUxpc3Q7CgpjbGFzcyBuc0lET01Ob3RhdGlvbjsKCmNsYXNzIG5zSURP TVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKCmNsYXNzIG5zSURPTVRleHQ7CgpjbGFzcyBET01FeGNl cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu c0lET01IVE1MRWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKCmNsYXNzIG5z SURPTUhUTUxDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWU7CgpjbGFzcyBuc0lET01D U1NQcmltaXRpdmVWYWx1ZTsKCmNsYXNzIG5zSURPTUNTU1J1bGU7CgpjbGFzcyBuc0lET01DU1NS dWxlTGlzdDsKCmNsYXNzIG5zSURPTUNTU1N0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01DU1NTdHls ZURlY2xhcmF0aW9uOwoKY2xhc3MgbnNJRE9NQ291bnRlcjsKCmNsYXNzIG5zSURPTVJlY3Q7Cgpj bGFzcyBuc0lET01SR0JDb2xvcjsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVsZTsKCmNsYXNzIG5z SURPTUNTU1N0eWxlUnVsZUNvbGxlY3Rpb247CgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9u RWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwoKY2xhc3MgbnNJ RE9NUmFuZ2U7CgpjbGFzcyBuc0lET01DUk1GT2JqZWN0OwoKY2xhc3MgbnNJRE9NQ3J5cHRvOwoK Y2xhc3MgbnNJRE9NUGtjczExOwojIDExICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NV2luZG93 LmgiIDIKCgoKCgoKY2xhc3MgbnNJU2VsZWN0aW9uOwojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJRE9NV2luZG93LmgiCmNsYXNzIG5zSURPTVdpbmRvdyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHhhNmNmOTA2YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURPTURvY3VtZW50ICogKmFEb2N1bWVudCkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRE9NV2luZG93ICogKmFQYXJlbnQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5zSURPTVdpbmRvdyAqICphVG9wKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbGJhcnMobnNJRE9NQmFyUHJvcCAqICph U2Nyb2xsYmFycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZXMobnNJRE9NV2lu ZG93Q29sbGVjdGlvbiAqICphRnJhbWVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5h bWUobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 TmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEdldFNjcm9sbFgoUFJJbnQzMiAqYVNjcm9sbFgpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0U2Nyb2xsWShQUkludDMyICphU2Nyb2xsWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBTY3JvbGxUbyhQUkludDMyIHhTY3JvbGwsIFBSSW50MzIgeVNjcm9sbCkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxCeShQUkludDMyIHhTY3JvbGxEaWYsIFBSSW50MzIgeVNj cm9sbERpZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24obnNJU2VsZWN0 aW9uICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxCeUxpbmVzKFBS SW50MzIgbnVtTGluZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnlQYWdlcyhQ UkludDMyIG51bVBhZ2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUb0NvbnRlbnQo dm9pZCkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTVdpbmRvd0ludGVy bmFsLmgiIDIKCgoKCgoKY2xhc3MgbnNJU2lkZWJhcjsKCmNsYXNzIG5zSVByb21wdDsKCmNsYXNz IG5zSUNvbnRyb2xsZXJzOwoKY2xhc3MgbnNJRE9NTG9jYXRpb247CiMgMzMgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lET01XaW5kb3dJbnRlcm5hbC5oIgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5h bCA6IHB1YmxpYyBuc0lET01XaW5kb3cgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWM5MTE4NjAsIDB4N2RkOSwg MHgxMWQ0LCB7IDB4OWEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQg fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJRE9NV2lu ZG93SW50ZXJuYWwgKiAqYVdpbmRvdykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxm KG5zSURPTVdpbmRvd0ludGVybmFsICogKmFTZWxmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldE5hdmlnYXRvcihuc0lET01OYXZpZ2F0b3IgKiAqYU5hdmlnYXRvcikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW4obnNJRE9NU2NyZWVuICogKmFTY3JlZW4pID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGlzdG9yeShuc0lET01IaXN0b3J5ICogKmFIaXN0b3J5KSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJRE9NV2luZG93ICogKmFDb250 ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpZGViYXIobnNJU2lkZWJhciAqICph U2lkZWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9tcHRlcihuc0lQcm9tcHQg KiAqYVByb21wdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnViYXIobnNJRE9N QmFyUHJvcCAqICphTWVudWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sYmFy KG5zSURPTUJhclByb3AgKiAqYVRvb2xiYXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TG9jYXRpb25iYXIobnNJRE9NQmFyUHJvcCAqICphTG9jYXRpb25iYXIpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UGVyc29uYWxiYXIobnNJRE9NQmFyUHJvcCAqICphUGVyc29uYWxiYXIp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzYmFyKG5zSURPTUJhclByb3AgKiAq YVN0YXR1c2JhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJlY3Rvcmllcyhuc0lE T01CYXJQcm9wICogKmFEaXJlY3RvcmllcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD bG9zZWQoUFJCb29sICphQ2xvc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENyeXB0 byhuc0lET01DcnlwdG8gKiAqYUNyeXB0bykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ a2NzMTEobnNJRE9NUGtjczExICogKmFQa2NzMTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29udHJvbGxlcnMobnNJQ29udHJvbGxlcnMgKiAqYUNvbnRyb2xsZXJzKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldE9wZW5lcihuc0lET01XaW5kb3dJbnRlcm5hbCAqICphT3BlbmVy KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXIobnNJRE9NV2luZG93SW50ZXJuYWwg KiBhT3BlbmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXR1cyhuc0FXcml0YWJs ZVN0cmluZyAmIGFTdGF0dXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0YXR1cyhjb25z dCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTdGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0RGVmYXVsdFN0YXR1cyhuc0FXcml0YWJsZVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0U3RhdHVzKGNvbnN0IG5zQVJlYWRhYmxlU3Ry aW5nICYgYURlZmF1bHRTdGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYXRp b24obnNJRE9NTG9jYXRpb24gKiAqYUxvY2F0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldFRpdGxlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVRpdGxlKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRUaXRsZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRJbm5lcldpZHRoKFBSSW50MzIgKmFJbm5lcldpZHRoKSA9IDA7 CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lcldpZHRoKFBSSW50MzIgYUlubmVyV2lkdGgpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIZWlnaHQoUFJJbnQzMiAqYUlubmVySGVp Z2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lckhlaWdodChQUkludDMyIGFJbm5l ckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRlcldpZHRoKFBSSW50MzIg KmFPdXRlcldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlcldpZHRoKFBSSW50 MzIgYU91dGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0ZXJIZWlnaHQo UFJJbnQzMiAqYU91dGVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlckhl aWdodChQUkludDMyIGFPdXRlckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT Y3JlZW5YKFBSSW50MzIgKmFTY3JlZW5YKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3Jl ZW5YKFBSSW50MzIgYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyZWVu WShQUkludDMyICphU2NyZWVuWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2NyZWVuWShQ UkludDMyIGFTY3JlZW5ZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VYT2Zmc2V0 KFBSSW50MzIgKmFQYWdlWE9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdl WU9mZnNldChQUkludDMyICphUGFnZVlPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFs ZXJ0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBDb25maXJtKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdGV4dCwgUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb21wdChjb25zdCBuc0FSZWFkYWJsZVN0 cmluZyAmIGFNZXNzYWdlLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFJbml0aWFsLCBjb25z dCBuc0FSZWFkYWJsZVN0cmluZyAmIGFUaXRsZSwgUFJVaW50MzIgYVNhdmVQYXNzd29yZCwgbnNB V3JpdGFibGVTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3Vz KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEJhY2sodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3J3YXJk KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSG9tZSh2b2lkKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFN0b3Aodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmludCh2 b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUbyhQUkludDMyIHhQb3MsIFBSSW50 MzIgeVBvcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlQnkoUFJJbnQzMiB4RGlmLCBQ UkludDMyIHlEaWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzaXplVG8oUFJJbnQzMiB3 aWR0aCwgUFJJbnQzMiBoZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzaXplQnko UFJJbnQzMiB3aWR0aERpZiwgUFJJbnQzMiBoZWlnaHREaWYpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0QXR0ZW50aW9uKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xs KFBSSW50MzIgeFNjcm9sbCwgUFJJbnQzMiB5U2Nyb2xsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IENsZWFyVGltZW91dChQUkludDMyIHRpbWVySUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgQ2xlYXJJbnRlcnZhbChQUkludDMyIHRpbWVySUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgU2V0Q3Vyc29yKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgY3Vyc29yKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IE9wZW4oY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiB1cmwsIGNvbnN0 IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBvcHRp b25zLCBuc0lET01XaW5kb3cgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9w ZW5EaWFsb2coY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiB1cmwsIGNvbnN0IG5zQVJlYWRhYmxl U3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBvcHRpb25zLCBuc0lTdXBw b3J0cyAqYUV4dHJhQXJndW1lbnQsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgQ2xvc2Uodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRh dGVDb21tYW5kcyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFjdGlvbikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBzdHIsIG5zQVdy aXRhYmxlU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2Fw ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIHN0ciwgbnNBV3JpdGFibGVTdHJpbmcgJiBfcmV0 dmFsKSA9IDA7Cgp9OwojIDM5ICIuLi9wdWJsaWMvbnNJU29mdHdhcmVVcGRhdGUuaCIgMgojIDYw ICIuLi9wdWJsaWMvbnNJU29mdHdhcmVVcGRhdGUuaCIKY2xhc3MgbnNJU29mdHdhcmVVcGRhdGUg OiBwdWJsaWMgbnNJU3VwcG9ydHMKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgc3RhdGlj IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgxOGMy Zjk5MiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBl LCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7fQoKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBJbnN0YWxsSmFyKG5zSUZpbGUqIGxvY2FsRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJWFBJTGlzdGVuZXIqIGFMaXN0ZW5lciA9IDApID0gMDsK CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbENocm9tZShQUlVpbnQzMiBhVHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUqIGFGaWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBVUkws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFO YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFTZWxlY3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxp c3RlbmVyID0gMCkgPSAwOwoKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3Rlckxp c3RlbmVyKG5zSVhQSUxpc3RlbmVyICphTGlzdGVuZXIpID0gMDsKCgogICAgICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IEluc3RhbGxKYXJDYWxsQmFjaygpID0gMDsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBHZXRNYXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAqKmFMaXN0ZW5lcikg PSAwOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQ SUxpc3RlbmVyICphTGlzdGVuZXIpID0gMDsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dGFydHVwVGFza3MoIFBSQm9vbCogb3V0QXV0b3JlZyApID0gMDsKfTsKCgoKY2xhc3MgbnNTb2Z0 d2FyZVVwZGF0ZU1vZHVsZSA6IHB1YmxpYyBuc0lNb2R1bGUKewpwdWJsaWM6CiAgICBuc1NvZnR3 YXJlVXBkYXRlTW9kdWxlKCk7CiAgICB2aXJ0dWFsIH5uc1NvZnR3YXJlVXBkYXRlTW9kdWxlKCk7 CgogICAgcHVibGljOiB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlE JiBhSUlELCB2b2lkKiogYUluc3RhbmNlUHRyKTsgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9p ZCk7IHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKTsgcHJvdGVjdGVkOiBuc3JlZmNudCBt UmVmQ250OyB2b2lkKiBfbU93bmluZ1RocmVhZDsgcHVibGljOgoKICAgIHZpcnR1YWwgbnNyZXN1 bHQgR2V0Q2xhc3NPYmplY3QobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIGNvbnN0IG5z Q0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KTsgdmlydHVh bCBuc3Jlc3VsdCBSZWdpc3RlclNlbGYobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIG5z SUZpbGUgKmxvY2F0aW9uLCBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uLCBjb25zdCBjaGFy ICpjb21wb25lbnRUeXBlKTsgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyU2VsZihuc0lDb21w b25lbnRNYW5hZ2VyICphQ29tcE1nciwgbnNJRmlsZSAqbG9jYXRpb24sIGNvbnN0IGNoYXIgKnJl Z2lzdHJ5TG9jYXRpb24pOyB2aXJ0dWFsIG5zcmVzdWx0IENhblVubG9hZChuc0lDb21wb25lbnRN YW5hZ2VyICphQ29tcE1nciwgUFJCb29sICpfcmV0dmFsKTsKCnByb3RlY3RlZDoKICAgIG5zcmVz dWx0IEluaXRpYWxpemUoKTsKCiAgICB2b2lkIFNodXRkb3duKCk7CgogICAgUFJCb29sIG1Jbml0 aWFsaXplZDsKICAgIG5zQ09NUHRyPG5zSUdlbmVyaWNGYWN0b3J5PiBtU29mdHdhcmVVcGRhdGVG YWN0b3J5OwogICAgbnNDT01QdHI8bnNJR2VuZXJpY0ZhY3Rvcnk+IG1JbnN0YWxsVHJpZ2dlckZh Y3Rvcnk7CiAgICBuc0NPTVB0cjxuc0lHZW5lcmljRmFjdG9yeT4gbUluc3RhbGxWZXJzaW9uRmFj dG9yeTsKfTsKIyA3ICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zY29yZS5oIiAxCiMgOSAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSUZhY3RvcnkuaCIgMQojIDEwICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDExICJuc1NvZnR3YXJlVXBk YXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDEyICJuc1Nv ZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIg MQojIDEzICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEv ZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAxNCAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAy CgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIiAxCiMgMTYgIm5zU29mdHdhcmVVcGRh dGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgMTcgIm5zU29m dHdhcmVVcGRhdGUuaCIgMgoKY2xhc3MgbnNJbnN0YWxsSW5mbzsKCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSVNjcmlwdEV4dGVybmFsTmFtZVNldC5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0RXh0ZXJu YWxOYW1lU2V0LmgiIDIKCgoKCgpjbGFzcyBuc0lTY3JpcHRDb250ZXh0OwojIDQyICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJU2NyaXB0RXh0ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlwdEV4 dGVybmFsTmFtZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZGEs IDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhk ZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6 ZU5hbWVTZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpID0gMDsKfTsKIyAyMSAi bnNTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUFwcFNoZWxs Q29tcG9uZW50LmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUFwcFNoZWxsQ29tcG9u ZW50LmgiCmNsYXNzIG5zSUFwcFNoZWxsU2VydmljZTsKY2xhc3MgbnNJQ21kTGluZVNlcnZpY2U7 CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBcHBTaGVsbENvbXBvbmVudC5oIgpjbGFzcyBu c0lBcHBTaGVsbENvbXBvbmVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh NmNmOTBlZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElu aXRpYWxpemUoIG5zSUFwcFNoZWxsU2VydmljZSAqIGFuQXBwU2hlbGwsIG5zSUNtZExpbmVTZXJ2 aWNlICogYXJncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaHV0ZG93bih2b2lkKSA9IDA7 Cgp9OwojIDIyICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJRE9NV2luZG93SW50ZXJuYWwuaCIgMQojIDIzICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT2JzZXJ2ZXIuaCIgMQojIDI0ICJuc1NvZnR3YXJlVXBk YXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQSVhQSVN0dWJIb29rLmgiIDEKIyAz OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUElYUElTdHViSG9vay5oIgpjbGFzcyBuc1BJWFBJU3R1 Ykhvb2sgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MDg5OTI5ZjAsIDB4NGVk OSwgMHgxMWQzLCB7IDB4YWIsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4 NzQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdHViSW5pdGlhbGl6ZShu c0lGaWxlICpkaXIsIGNvbnN0IGNoYXIgKmxvZ05hbWUpID0gMDsKCn07CiMgMjUgIm5zU29mdHdh cmVVcGRhdGUuaCIgMgojIDEgIm5zVG9wUHJvZ3Jlc3NOb3RpZmllci5oIiAxCiMgMjkgIm5zVG9w UHJvZ3Jlc3NOb3RpZmllci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAx CiMgMzAgIm5zVG9wUHJvZ3Jlc3NOb3RpZmllci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSVhQSU5vdGlmaWVyLmgiIDEKIyAzMSAibnNUb3BQcm9ncmVzc05vdGlmaWVyLmgiIDIKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDMyICJuc1RvcFByb2dyZXNz Tm90aWZpZXIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw ci9wcmxvY2suaCIgMQojIDMzICJuc1RvcFByb2dyZXNzTm90aWZpZXIuaCIgMgoKY2xhc3MgbnNU b3BQcm9ncmVzc0xpc3RlbmVyIDogcHVibGljIG5zSVhQSUxpc3RlbmVyCnsKICAgIHB1YmxpYzoK CiAgICAgICAgbnNUb3BQcm9ncmVzc0xpc3RlbmVyKCk7CiAgICAgICAgdmlydHVhbCB+bnNUb3BQ cm9ncmVzc0xpc3RlbmVyKCk7CgogICAgICAgIGxvbmcgUmVnaXN0ZXJMaXN0ZW5lcihuc0lYUElM aXN0ZW5lciAqIG5ld0xpc3RlbmVyKTsKICAgICAgICB2b2lkIFVucmVnaXN0ZXJMaXN0ZW5lcihs b25nIGlkKTsKICAgICAgICB2b2lkIFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQSUxpc3RlbmVyICph TGlzdGVuZXIpCiAgICAgICAgICAgIHsgbUFjdGl2ZSA9IGFMaXN0ZW5lcjsgfQoKICAgICAgICBw dWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQs IHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmly dHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7 IHZvaWQqIF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IEJlZm9yZUphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJMKTsgdmlydHVh bCBuc3Jlc3VsdCBBZnRlckphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJM KTsgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YWxsU3RhcnRlZChjb25zdCBQUlVuaWNoYXIgKlVSTCwg Y29uc3QgUFJVbmljaGFyICpVSVBhY2thZ2VOYW1lKTsgdmlydHVhbCBuc3Jlc3VsdCBJdGVtU2No ZWR1bGVkKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSk7IHZpcnR1YWwgbnNyZXN1bHQgRmluYWxp emVQcm9ncmVzcyhjb25zdCBQUlVuaWNoYXIgKm1lc3NhZ2UsIFBSSW50MzIgaXRlbU51bSwgUFJJ bnQzMiB0b3ROdW0pOyB2aXJ0dWFsIG5zcmVzdWx0IEZpbmFsU3RhdHVzKGNvbnN0IFBSVW5pY2hh ciAqVVJMLCBQUkludDMyIHN0YXR1cyk7IHZpcnR1YWwgbnNyZXN1bHQgTG9nQ29tbWVudChjb25z dCBQUlVuaWNoYXIgKmNvbW1lbnQpOwoKICAgcHJpdmF0ZToKICAgICAgICBuc1ZvaWRBcnJheSAq bUxpc3RlbmVyczsKICAgICAgICBQUkxvY2sgKm1Mb2NrOwogICAgICAgIG5zQ09NUHRyPG5zSVhQ SUxpc3RlbmVyPiBtQWN0aXZlOwp9OwojIDI2ICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKCgoKCgoK Y2xhc3MgbnNTb2Z0d2FyZVVwZGF0ZTogcHVibGljIG5zSVNvZnR3YXJlVXBkYXRlLAogICAgICAg ICAgICAgICAgICAgICAgICBwdWJsaWMgbnNQSVhQSVN0dWJIb29rLAogICAgICAgICAgICAgICAg ICAgICAgICBwdWJsaWMgbnNJT2JzZXJ2ZXIKewogICAgcHVibGljOgoKICAgICAgICBzdGF0aWMg Y29uc3QgbnNJRCYgR2V0Q0lEKCkge3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHgxOGMyZjk4 OSwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAw eDEzLCAweDUzfSB9OyByZXR1cm4gY2lkO307CgogICAgICAgIHN0YXRpYyBuc1NvZnR3YXJlVXBk YXRlICpHZXRJbnN0YW5jZSgpOwoKCgoKCiAgICAgICAgc3RhdGljIG5zSUZpbGUqIEdldFByb2dy YW1EaXJlY3RvcnkoKSB7IHJldHVybiBtUHJvZ3JhbURpcjsgfQoKCgoKICAgICAgICBzdGF0aWMg Y2hhciogR2V0TG9nTmFtZSgpIHsgcmV0dXJuIG1Mb2dOYW1lOyB9CgogICAgICAgIHB1YmxpYzog dmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoq IGFJbnN0YW5jZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpOyB2aXJ0dWFsIG5z cmVmY250IFJlbGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJlZkNudDsgdm9pZCog X21Pd25pbmdUaHJlYWQ7IHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWJJbml0 aWFsaXplKG5zSUZpbGUgKmRpciwgY29uc3QgY2hhciAqbG9nTmFtZSk7CiAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBPYnNlcnZlKG5zSVN1cHBvcnRzICphU3ViamVjdCwgY29uc3QgUFJVbmljaGFy ICphVG9waWMsIGNvbnN0IFBSVW5pY2hhciAqYURhdGEpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVz dWx0IEluc3RhbGxKYXIoIG5zSUZpbGUqIGxvY2FsRmlsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUFJVbmljaGFyKiBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzID0gMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5zSVhQSUxpc3RlbmVyKiBhTGlzdGVuZXIgPSAwKTsKCiAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBJbnN0YWxsQ2hyb21lKCBQUlVpbnQzMiBhVHlwZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBVUkwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFOYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUFJCb29sIGFTZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxpc3RlbmVyID0gMCk7CgogICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgUmVnaXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAqYUxpc3RlbmVyKTsKCiAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YWxsSmFyQ2FsbEJhY2soKTsKICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IEdldE1hc3Rlckxpc3RlbmVyKG5zSVhQSUxpc3RlbmVyICoqYUxpc3RlbmVy KTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQSUxpc3Rl bmVyICphTGlzdGVuZXIpOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3RhcnR1cFRhc2tzKCBQ UkJvb2wqIG5lZWRBdXRvcmVnICk7CgogICAgICAgIG5zU29mdHdhcmVVcGRhdGUoKTsKICAgICAg ICB2aXJ0dWFsIH5uc1NvZnR3YXJlVXBkYXRlKCk7CgogICAgICAgIHN0YXRpYyBQUkJvb2wgbU5l ZWRDbGVhbnVwOwoKICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIG5zU29mdHdhcmVVcGRhdGUq IG1JbnN0YW5jZTsKICAgICAgICBzdGF0aWMgbnNDT01QdHI8bnNJRmlsZT4gbVByb2dyYW1EaXI7 CiAgICAgICAgc3RhdGljIGNoYXIqIG1Mb2dOYW1lOwoKICAgICAgICBuc3Jlc3VsdCBSdW5OZXh0 SW5zdGFsbCgpOwogICAgICAgIG5zcmVzdWx0IFJlZ2lzdGVyTmFtZXNldCgpOwogICAgICAgIHZv aWQgQ3JlYXRlTWFzdGVyTGlzdGVuZXIoKTsKICAgICAgICB2b2lkIFNodXRkb3duKCk7CgogICAg ICAgIFBSTG9jayogbUxvY2s7CiAgICAgICAgUFJCb29sIG1JbnN0YWxsaW5nOwogICAgICAgIG5z Vm9pZEFycmF5IG1KYXJJbnN0YWxsUXVldWU7CiAgICAgICAgbnNUb3BQcm9ncmVzc0xpc3RlbmVy ICptTWFzdGVyTGlzdGVuZXI7CgogICAgICAgIEhSRUcgbVJlZzsKfTsKCgpjbGFzcyBuc1NvZnR3 YXJlVXBkYXRlTmFtZVNldCA6IHB1YmxpYyBuc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQKewogICAg cHVibGljOgogICAgICAgIG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0KCk7CiAgICAgICAgdmlydHVh bCB+bnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKTsKCgogICAgICAgIHB1YmxpYzogdmlydHVhbCBu c3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5j ZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpOyB2aXJ0dWFsIG5zcmVmY250IFJl bGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJlZkNudDsgdm9pZCogX21Pd25pbmdU aHJlYWQ7IHB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6ZU5hbWVT ZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpOwp9OwojIDQ1ICJuc0luc3RhbGwu aCIgMgoKIyAxICJuc0luc3RhbGxPYmplY3QuaCIgMQojIDI2ICJuc0luc3RhbGxPYmplY3QuaCIK IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx CiMgMjcgIm5zSW5zdGFsbE9iamVjdC5oIiAyCgpjbGFzcyBuc0luc3RhbGw7CgpjbGFzcyBuc0lu c3RhbGxPYmplY3QKewogICAgcHVibGljOgoKICAgICAgICBuc0luc3RhbGxPYmplY3QobnNJbnN0 YWxsKiBpbkluc3RhbGwpIHttSW5zdGFsbCA9IGluSW5zdGFsbDsgfQogICAgICAgIHZpcnR1YWwg fm5zSW5zdGFsbE9iamVjdCgpIHt9CgoKICAgICAgICB2aXJ0dWFsIFBSSW50MzIgUHJlcGFyZSgp ID0gMDsKCgogICAgICAgIHZpcnR1YWwgUFJJbnQzMiBDb21wbGV0ZSgpID0gMDsKCgogICAgICAg IHZpcnR1YWwgY2hhciogdG9TdHJpbmcoKSA9IDA7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgQWJv cnQoKSA9IDA7CgoKICAgICAgICB2aXJ0dWFsIFBSQm9vbCBDYW5Vbmluc3RhbGwoKSA9IDA7CiAg ICAgICAgdmlydHVhbCBQUkJvb2wgUmVnaXN0ZXJQYWNrYWdlTm9kZSgpID0gMDsKCiAgICBwcm90 ZWN0ZWQ6CiAgICAgICAgbnNJbnN0YWxsKiBtSW5zdGFsbDsKfTsKIyA0NyAibnNJbnN0YWxsLmgi IDIKIyAxICJuc0luc3RhbGxWZXJzaW9uLmgiIDEKCgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNjb3JlLmgiIDEKIyA1ICJuc0luc3RhbGxWZXJzaW9uLmgiIDIKIyAxICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNTdHJpbmcuaCIgMQojIDYgIm5zSW5zdGFsbFZlcnNpb24uaCIgMgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyA3ICJuc0luc3RhbGxWZXJzaW9uLmgiIDIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDggIm5zSW5zdGFsbFZl cnNpb24uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5o IiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVNjcmlwdENvbnRleHQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29u dGV4dC5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQu aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjkgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiIDIKCmNsYXNzIG5zSVNjcmlwdEdsb2Jh bE9iamVjdDsKY2xhc3MgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOwpjbGFzcyBuc0lTY3JpcHRD b250ZXh0T3duZXI7CmNsYXNzIG5zSVByaW5jaXBhbDsKCnR5cGVkZWYgdm9pZCAoKm5zU2NyaXB0 VGVybWluYXRpb25GdW5jKShuc0lTdXBwb3J0cyogYVJlZik7CiMgNDkgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCmNsYXNzIG5zSVNjcmlwdENvbnRleHQgOiBwdWJsaWMg bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg4ZjZiY2E3ZCwgMHhjZTQyLCAweDExZDEsIHsweGI3 LCAweDI0LCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweGQ4LCAweGM5fSB9OyByZXR1cm4gaWlk O30KIyA3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFs IG5zcmVzdWx0IEV2YWx1YXRlU3RyaW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU2NyaXB0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRhYmxl U3RyaW5nJiBhUmV0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJ c1VuZGVmaW5lZCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEV2YWx1YXRlU3RyaW5nV2l0aFZh bHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU2NyaXB0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFSZXRWYWx1ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVW5kZWZpbmVkKSA9IDA7CiMgMTA2ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29t cGlsZVNjcmlwdChjb25zdCBQUlVuaWNoYXIqIGFUZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBQUkludDMyIGFUZXh0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk KiBhU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByaW5jaXBhbCog YVByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVVSTCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQqKiBhU2NyaXB0T2JqZWN0KSA9IDA7CiMgMTI5ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXhlY3V0ZVNjcmlwdCh2 b2lkKiBhU2NyaXB0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhU2Nv cGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRhYmxlU3RyaW5nKiBh UmV0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVW5kZWZpbmVk KSA9IDA7CiMgMTU2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZp cnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50SGFuZGxlcih2b2lkKiBhVGFyZ2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFCb2R5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNoYXJlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCoqIGFIYW5kbGVyKSA9IDA7CiMgMTc0ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FsbEV2ZW50 SGFuZGxlcih2b2lkKiBhVGFyZ2V0LCB2b2lkKiBhSGFuZGxlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJVaW50MzIgYXJnYywgdm9pZCogYXJndiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJCb29sKiBhQm9vbFJlc3VsdCwgUFJCb29sIGFSZXZlcnNlUmV0dXJuUmVz dWx0KSA9IDA7CiMgMTk0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgog IHZpcnR1YWwgbnNyZXN1bHQgQmluZENvbXBpbGVkRXZlbnRIYW5kbGVyKHZvaWQqIGFUYXJnZXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUhhbmRsZXIpID0gMDsK CiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRnVuY3Rpb24odm9pZCogYVRhcmdldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NTdHJpbmcmIGFOYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFBcmdDb3VudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiogYUFyZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhQm9keSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBhVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFT aGFyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFGdW5jdGlvbk9iamVj dCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRMYW5ndWFnZVZlcnNp b24oY29uc3QgY2hhciogYVZlcnNpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNJU2NyaXB0R2xv YmFsT2JqZWN0KiBHZXRHbG9iYWxPYmplY3QoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIHZvaWQqIEdl dE5hdGl2ZUNvbnRleHQoKSA9IDA7CiMgMjM2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0 Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENvbnRleHQobnNJU2NyaXB0R2xvYmFs T2JqZWN0ICphR2xvYmFsT2JqZWN0KSA9IDA7CiMgMjQ1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ U2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb250ZXh0SW5pdGlhbGl6ZWQo KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR0MoKSA9IDA7CgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldFNlY3VyaXR5TWFuYWdlcihuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIqKiBh SW5zdGFuY2VQdHIpID0gMDsKIyAyNzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250 ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JpcHRFdmFsdWF0ZWQoUFJCb29sIGFUZXJtaW5h dGVkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3duZXIobnNJU2NyaXB0Q29u dGV4dE93bmVyKiBvd25lcikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVy KG5zSVNjcmlwdENvbnRleHRPd25lcioqIG93bmVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0VGVybWluYXRpb25GdW5jdGlvbihuc1NjcmlwdFRlcm1pbmF0aW9uRnVuYyBhRnVu YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFSZWYp ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgKmFF bmFibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wg YUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJvY2Vzc2luZ1Njcmlw dFRhZyhQUkJvb2wgKiBhUmVzdWx0KSA9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb2Nlc3Np bmdTY3JpcHRUYWcoUFJCb29sIGFSZXN1bHQpID0wOwp9OwojIDI4ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FS ZWFkYWJsZVN0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmpl Y3RPd25lci5oIiAyCiMgNDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25l ci5oIgpjbGFzcyBuc0lTY3JpcHRPYmplY3RPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1 YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0geyAweDhmNmJjYTdlLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4MDAsIDB4 NjAsIDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDU4ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNjcmlwdE9iamVjdChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgdm9pZCoqIGFTY3JpcHRP YmplY3QpID0gMDsKIyA3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdE9iamVjdE93bmVy LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNjcmlwdE9iamVj dCkgPSAwOwp9OwoKY2xhc3MgbnNJQXRvbTsKIyA4NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNj cmlwdE9iamVjdE93bmVyLmgiCmNsYXNzIG5zSVNjcmlwdEV2ZW50SGFuZGxlck93bmVyIDogcHVi bGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4MmFkNTRhZTAsIDB4YTgzOSwgMHgxMWQzLCB7 MHhiYSwgMHg5NywgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHgyZCwgMHgzZH0gfTsgcmV0dXJu IGlpZDt9CiMgMTAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIK ICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBpbGVFdmVudEhhbmRsZXIobnNJU2NyaXB0Q29udGV4dCog YUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFUYXJnZXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20gKmFOYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYUJvZHks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhSGFuZGxlcikgPSAwOwoj IDExNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdE9iamVjdE93bmVyLmgiCiAgdmlydHVh bCBuc3Jlc3VsdCBHZXRDb21waWxlZEV2ZW50SGFuZGxlcihuc0lBdG9tICphTmFtZSwgdm9pZCoq IGFIYW5kbGVyKSA9IDA7Cn07CiMgOSAibnNJbnN0YWxsVmVyc2lvbi5oIiAyCgojIDEgIi4uL3B1 YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAxCiMgMjcgIi4uL3B1YmxpYy9uc0lET01JbnN0 YWxsVmVyc2lvbi5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg MjggIi4uL3B1YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAyCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyOSAiLi4vcHVibGljL25zSURPTUluc3RhbGxWZXJzaW9u LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAxCiMgMzAg Ii4uL3B1YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAyCgpjbGFzcyBuc0lET01JbnN0YWxs VmVyc2lvbjsKCgoKCgpjbGFzcyBuc0lET01JbnN0YWxsVmVyc2lvbiA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5z SUlEIGlpZCA9IHsgMHgxOGMyZjk4NiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAw LCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7IH0KICBlbnVtIHsK ICAgIEVRVUFMID0gMCwKICAgIEJMRF9ESUZGID0gMSwKICAgIEJMRF9ESUZGX01JTlVTID0gLTEs CiAgICBSRUxfRElGRiA9IDIsCiAgICBSRUxfRElGRl9NSU5VUyA9IC0yLAogICAgTUlOT1JfRElG RiA9IDMsCiAgICBNSU5PUl9ESUZGX01JTlVTID0gLTMsCiAgICBNQUpPUl9ESUZGID0gNCwKICAg IE1BSk9SX0RJRkZfTUlOVVMgPSAtNAogIH07CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFqb3Io UFJJbnQzMiogYU1ham9yKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFqb3IoUFJJbnQzMiBh TWFqb3IpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWlub3IoUFJJbnQzMiogYU1pbm9yKT0w OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWlub3IoUFJJbnQzMiBhTWlub3IpPTA7CgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0UmVsZWFzZShQUkludDMyKiBhUmVsZWFzZSk9MDsKICB2aXJ0dWFsIG5z cmVzdWx0IFNldFJlbGVhc2UoUFJJbnQzMiBhUmVsZWFzZSk9MDsKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRCdWlsZChQUkludDMyKiBhQnVpbGQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCdWls ZChQUkludDMyIGFCdWlsZCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KGNvbnN0IG5zU3Ry aW5nJiBhVmVyc2lvblN0cmluZyk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhuc1N0 cmluZyYgYVJldHVybik9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVG8obnNJRE9NSW5z dGFsbFZlcnNpb24qIGFWZXJzaW9uT2JqZWN0LCBQUkludDMyKiBhUmV0dXJuKT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgQ29tcGFyZVRvKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBQUkludDMyKiBh UmV0dXJuKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKFBSSW50MzIgYU1ham9yLCBQ UkludDMyIGFNaW5vciwgUFJJbnQzMiBhUmVsZWFzZSwgUFJJbnQzMiBhQnVpbGQsIFBSSW50MzIq IGFSZXR1cm4pPTA7Cn07CiMgMTA3ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFZlcnNpb24uaCIK ZXh0ZXJuIG5zcmVzdWx0IE5TX0luaXRJbnN0YWxsVmVyc2lvbkNsYXNzKG5zSVNjcmlwdENvbnRl eHQgKmFDb250ZXh0LCB2b2lkICoqYVByb3RvdHlwZSk7CgpleHRlcm4gIkMiIG5zcmVzdWx0IE5T X05ld1NjcmlwdEluc3RhbGxWZXJzaW9uKG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCBuc0lT dXBwb3J0cyAqYVN1cHBvcnRzLCBuc0lTdXBwb3J0cyAqYVBhcmVudCwgdm9pZCAqKmFSZXR1cm4p OwojIDExICJuc0luc3RhbGxWZXJzaW9uLmgiIDIKIyAxICJuc1NvZnR3YXJlVXBkYXRlLmgiIDEK IyAxMiAibnNJbnN0YWxsVmVyc2lvbi5oIiAyCgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxNCAibnNJbnN0YWxsVmVyc2lvbi5oIiAy CgpjbGFzcyBuc0luc3RhbGxWZXJzaW9uOiBwdWJsaWMgbnNJU2NyaXB0T2JqZWN0T3duZXIsIHB1 YmxpYyBuc0lET01JbnN0YWxsVmVyc2lvbgp7CiAgICBwdWJsaWM6CiAgICAgICAgc3RhdGljIGNv bnN0IG5zSUlEJiBJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MThjMmY5OGYsIDB4YjA5 ZiwgMHgxMWQyLCB7MHhiYywgMHhkZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwgMHgxMywgMHg1 M30gfTsgcmV0dXJuIGlpZDsgfQoKICAgICAgICBuc0luc3RhbGxWZXJzaW9uKCk7CiAgICAgICAg dmlydHVhbCB+bnNJbnN0YWxsVmVyc2lvbigpOwoKICAgICAgICBwdWJsaWM6IHZpcnR1YWwgbnNy ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQ dHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxl YXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9tT3duaW5nVGhy ZWFkOyBwdWJsaWM6CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyaXB0T2JqZWN0KG5z SVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCB2b2lkKiogYVNjcmlwdE9iamVjdCk7CiAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNjcmlwdE9iamVjdCk7Cgog ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChQUkludDMyIGFNYWpvciwgUFJJbnQzMiBhTWlu b3IsIFBSSW50MzIgYVJlbGVhc2UsIFBSSW50MzIgYUJ1aWxkKTsKICAgICAgICB2aXJ0dWFsIG5z cmVzdWx0IEluaXQoY29uc3QgbnNTdHJpbmcmIGFWZXJzaW9uU3RyaW5nKTsKCiAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBHZXRNYWpvcihQUkludDMyKiBhTWFqb3IpOwogICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU2V0TWFqb3IoUFJJbnQzMiBhTWFqb3IpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVz dWx0IEdldE1pbm9yKFBSSW50MzIqIGFNaW5vcik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT ZXRNaW5vcihQUkludDMyIGFNaW5vcik7CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVs ZWFzZShQUkludDMyKiBhUmVsZWFzZSk7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWxl YXNlKFBSSW50MzIgYVJlbGVhc2UpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1aWxk KFBSSW50MzIqIGFCdWlsZCk7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCdWlsZChQUklu dDMyIGFCdWlsZCk7CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNTdHJpbmcm IGFSZXR1cm4pOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKG5zSURPTUluc3Rh bGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik7CiAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBDb21wYXJlVG8oY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIqIGFSZXR1 cm4pOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKFBSSW50MzIgYU1ham9yLCBQ UkludDMyIGFNaW5vciwgUFJJbnQzMiBhUmVsZWFzZSwgUFJJbnQzMiBhQnVpbGQsIFBSSW50MzIq IGFSZXR1cm4pOwoKICAgICAgICBzdGF0aWMgbnNyZXN1bHQgU3RyaW5nVG9WZXJzaW9uTnVtYmVy cyhjb25zdCBuc1N0cmluZyYgdmVyc2lvbiwgUFJJbnQzMiAqYU1ham9yLCBQUkludDMyICphTWlu b3IsIFBSSW50MzIgKmFSZWxlYXNlLCBQUkludDMyICphQnVpbGQpOwoKICAgIHByaXZhdGU6CiAg ICAgICAgdm9pZCAqbVNjcmlwdE9iamVjdDsKICAgICAgICBQUkludDMyIG1ham9yOwogICAgICAg IFBSSW50MzIgbWlub3I7CiAgICAgICAgUFJJbnQzMiByZWxlYXNlOwogICAgICAgIFBSSW50MzIg YnVpbGQ7Cn07CiMgNDggIm5zSW5zdGFsbC5oIiAyCiMgMSAibnNJbnN0YWxsRm9sZGVyLmgiIDEK IyAzMCAibnNJbnN0YWxsRm9sZGVyLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o IiAxCiMgMzEgIm5zSW5zdGFsbEZvbGRlci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMyICJuc0luc3RhbGxGb2xkZXIuaCIg MgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDM0ICJuc0luc3RhbGxG b2xkZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDEKIyAzNSAi bnNJbnN0YWxsRm9sZGVyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lz dGVtRGlyZWN0b3J5LmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3BlY2lhbFN5c3Rl bURpcmVjdG9yeS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDMwICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lzdGVtRGlyZWN0b3J5LmgiIDIKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAxCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c1NwZWNpYWxTeXN0ZW1EaXJlY3RvcnkuaCIgMgoKCgoKCgpleHRlcm4gdm9pZCBTdGFydHVwU3Bl Y2lhbFN5c3RlbURpcmVjdG9yeSgpOwpleHRlcm4gdm9pZCBTaHV0ZG93blNwZWNpYWxTeXN0ZW1E aXJlY3RvcnkoKTsKCgoKCgpjbGFzcyBuc1NwZWNpYWxTeXN0ZW1EaXJlY3RvcnkgOiBwdWJsaWMg bnNGaWxlU3BlYwp7CgogICAgcHVibGljOgogICAgICAgIGVudW0gU3lzdGVtRGlyZWN0b3JpZXMK ICAgICAgICB7CiAgICAgICAgICAgIE9TX0RyaXZlRGlyZWN0b3J5ID0gMQogICAgICAgICwgT1Nf VGVtcG9yYXJ5RGlyZWN0b3J5ID0gMgogICAgICAgICwgT1NfQ3VycmVudFByb2Nlc3NEaXJlY3Rv cnk9IDMKICAgICAgICAsIE9TX0N1cnJlbnRXb3JraW5nRGlyZWN0b3J5PSA0CgogICAgICAgICwg WFBDT01fQ3VycmVudFByb2Nlc3NDb21wb25lbnREaXJlY3Rvcnk9IDUKICAgICAgICAsIFhQQ09N X0N1cnJlbnRQcm9jZXNzQ29tcG9uZW50UmVnaXN0cnk9IDYKCiAgICAgICAgLCBNb3pfQmluRGly ZWN0b3J5ID0gMTAKCiAgICAgICAgLCBNYWNfU3lzdGVtRGlyZWN0b3J5ID0gMTAxCiAgICAgICAg LCBNYWNfRGVza3RvcERpcmVjdG9yeSA9IDEwMgogICAgICAgICwgTWFjX1RyYXNoRGlyZWN0b3J5 ID0gMTAzCiAgICAgICAgLCBNYWNfU3RhcnR1cERpcmVjdG9yeSA9IDEwNAogICAgICAgICwgTWFj X1NodXRkb3duRGlyZWN0b3J5ID0gMTA1CiAgICAgICAgLCBNYWNfQXBwbGVNZW51RGlyZWN0b3J5 ID0gMTA2CiAgICAgICAgLCBNYWNfQ29udHJvbFBhbmVsRGlyZWN0b3J5ID0gMTA3CiAgICAgICAg LCBNYWNfRXh0ZW5zaW9uRGlyZWN0b3J5ID0gMTA4CiAgICAgICAgLCBNYWNfRm9udHNEaXJlY3Rv cnkgPSAxMDkKICAgICAgICAsIE1hY19QcmVmZXJlbmNlc0RpcmVjdG9yeSA9IDExMAogICAgICAg ICwgTWFjX0RvY3VtZW50c0RpcmVjdG9yeSA9IDExMQogICAgICAgICwgTWFjX0ludGVybmV0U2Vh cmNoRGlyZWN0b3J5ID0gMTEyCiAgICAgICAgLCBNYWNfRGVmYXVsdERvd25sb2FkRGlyZWN0b3J5 ID0gMTEzCgogICAgICAgICwgV2luX1N5c3RlbURpcmVjdG9yeSA9IDIwMQogICAgICAgICwgV2lu X1dpbmRvd3NEaXJlY3RvcnkgPSAyMDIKCiAgICAgICAgLCBXaW5fSG9tZURpcmVjdG9yeSA9IDIw MwogICAgICAgICwgV2luX0Rlc2t0b3AgPSAyMDQKICAgICAgICAsIFdpbl9Qcm9ncmFtcyA9IDIw NQogICAgICAgICwgV2luX0NvbnRyb2xzID0gMjA2CiAgICAgICAgLCBXaW5fUHJpbnRlcnMgPSAy MDcKICAgICAgICAsIFdpbl9QZXJzb25hbCA9IDIwOAogICAgICAgICwgV2luX0Zhdm9yaXRlcyA9 IDIwOQogICAgICAgICwgV2luX1N0YXJ0dXAgPSAyMTAKICAgICAgICAsIFdpbl9SZWNlbnQgPSAy MTEKICAgICAgICAsIFdpbl9TZW5kdG8gPSAyMTIKICAgICAgICAsIFdpbl9CaXRidWNrZXQgPSAy MTMKICAgICAgICAsIFdpbl9TdGFydG1lbnUgPSAyMTQKICAgICAgICAsIFdpbl9EZXNrdG9wZGly ZWN0b3J5ID0gMjE1CiAgICAgICAgLCBXaW5fRHJpdmVzID0gMjE2CiAgICAgICAgLCBXaW5fTmV0 d29yayA9IDIxNwogICAgICAgICwgV2luX05ldGhvb2QgPSAyMTgKICAgICAgICAsIFdpbl9Gb250 cyA9IDIxOQogICAgICAgICwgV2luX1RlbXBsYXRlcyA9IDIyMAogICAgICAgICwgV2luX0NvbW1v bl9TdGFydG1lbnUgPSAyMjEKICAgICAgICAsIFdpbl9Db21tb25fUHJvZ3JhbXMgPSAyMjIKICAg ICAgICAsIFdpbl9Db21tb25fU3RhcnR1cCA9IDIyMwogICAgICAgICwgV2luX0NvbW1vbl9EZXNr dG9wZGlyZWN0b3J5ID0gMjI0CiAgICAgICAgLCBXaW5fQXBwZGF0YSA9IDIyNQogICAgICAgICwg V2luX1ByaW50aG9vZCA9IDIyNgoKICAgICAgICAsIFVuaXhfTG9jYWxEaXJlY3RvcnkgPSAzMDEK ICAgICAgICAsIFVuaXhfTGliRGlyZWN0b3J5ID0gMzAyCiAgICAgICAgLCBVbml4X0hvbWVEaXJl Y3RvcnkgPSAzMDMKCiAgICAgICAgLCBCZU9TX1NldHRpbmdzRGlyZWN0b3J5ID0gNDAxCiAgICAg ICAgLCBCZU9TX0hvbWVEaXJlY3RvcnkgPSA0MDIKICAgICAgICAsIEJlT1NfRGVza3RvcERpcmVj dG9yeSA9IDQwMwogICAgICAgICwgQmVPU19TeXN0ZW1EaXJlY3RvcnkgPSA0MDQKCiAgICAgICAg LCBPUzJfU3lzdGVtRGlyZWN0b3J5ID0gNTAxCiAgICAgICAgLCBPUzJfT1MyRGlyZWN0b3J5ID0g NTAyCiAgICAgICAgLCBPUzJfRGVza3RvcERpcmVjdG9yeSA9IDUwMwogICAgICAgICwgT1MyX0hv bWVEaXJlY3RvcnkgPSA1MDQKICAgICAgICB9OwoKCiAgICAgICAgICAgICAgICAgICAgbnNTcGVj aWFsU3lzdGVtRGlyZWN0b3J5KFN5c3RlbURpcmVjdG9yaWVzIGFTeXN0ZW1TeXN0ZW1EaXJlY3Rv cnkpOwoKICAgIHZpcnR1YWwgfm5zU3BlY2lhbFN5c3RlbURpcmVjdG9yeSgpOwoKICAgIHZvaWQg b3BlcmF0b3IgPSAoU3lzdGVtRGlyZWN0b3JpZXMgYVN5c3RlbVN5c3RlbURpcmVjdG9yeSk7CiMg MTQwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lzdGVtRGlyZWN0b3J5LmgiCiAgICBz dGF0aWMgdm9pZCBTZXQoU3lzdGVtRGlyZWN0b3JpZXMgZGlyVG9TZXQsIG5zRmlsZVNwZWMgKmRp clNwZWMpOwoKCnByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluUGF0 aCkgeyAqKG5zRmlsZVNwZWMqKXRoaXMgPSBpblBhdGg7IH0KCn07CiMgMzYgIm5zSW5zdGFsbEZv bGRlci5oIiAyCgpjbGFzcyBuc0luc3RhbGxGb2xkZXIKewogICAgcHVibGljOgoKICAgICAgIG5z SW5zdGFsbEZvbGRlcigpOwogICAgICAgdmlydHVhbCB+bnNJbnN0YWxsRm9sZGVyKCk7CgogICAg ICAgbnNyZXN1bHQgSW5pdChuc0luc3RhbGxGb2xkZXImIGluRm9sZGVyLCBjb25zdCBuc1N0cmlu ZyYgc3ViU3RyaW5nKTsKICAgICAgIG5zcmVzdWx0IEluaXQoY29uc3QgbnNTdHJpbmcmIGFGb2xk ZXJJRCwgY29uc3QgbnNTdHJpbmcmIGFSZWxhdGl2ZVBhdGgpOwogICAgICAgbnNyZXN1bHQgSW5p dChuc0lGaWxlKiByYXdJRmlsZSk7CgogICAgICAgdm9pZCBHZXREaXJlY3RvcnlQYXRoKG5zQ1N0 cmluZyYgYURpcmVjdG9yeVBhdGgpOwogICAgICAgbnNJRmlsZSogR2V0RmlsZVNwZWMoKTsKICAg ICAgIFBSSW50MzIgVG9TdHJpbmcobnNBdXRvU3RyaW5nKiBvdXRTdHJpbmcpOwoKICAgIHByaXZh dGU6CgogICAgICAgIG5zQ09NUHRyPG5zSUZpbGU+IG1GaWxlU3BlYzsKCiAgICAgICAgdm9pZCBT ZXREaXJlY3RvcnlQYXRoKGNvbnN0IG5zU3RyaW5nJiBhRm9sZGVySUQsIGNvbnN0IG5zU3RyaW5n JiBhUmVsYXRpdmVQYXRoKTsKICAgICAgICB2b2lkIEFwcGVuZFhQUGF0aChjb25zdCBuc1N0cmlu ZyYgYVJlbGF0aXZlUGF0aCk7CiAgICAgICAgUFJJbnQzMiBNYXBOYW1lVG9FbnVtKGNvbnN0IG5z U3RyaW5nJiBuYW1lKTsKfTsKIyA0OSAibnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSVhQSU5vdGlmaWVyLmgiIDEKIyA1MSAibnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIiAxCiMgMzkgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIKY2xhc3MgbnNJU3RyaW5nQnVuZGxlIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4NWExN2MyLCAweGFhN2MsIDB4MTFkMiwgeyAweDli LCAweDhjLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH19OyByZXR1cm4gaWlk O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBQUlVu aWNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0Zyb21O YW1lKGNvbnN0IFBSVW5pY2hhciAqYU5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgRm9ybWF0U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBjb25zdCBQ UlVuaWNoYXIgKipwYXJhbXMsIFBSVWludDMyIGxlbmd0aCwgUFJVbmljaGFyICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdHJpbmdGcm9tTmFtZShjb25zdCBQUlVu aWNoYXIgKmFOYW1lLCBjb25zdCBQUlVuaWNoYXIgKipwYXJhbXMsIFBSVWludDMyIGxlbmd0aCwg UFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbnVtZXJh dGlvbihuc0lCaWRpcmVjdGlvbmFsRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0U2ltcGxlRW51bWVyYXRpb24obnNJU2ltcGxlRW51bWVyYXRvciAqKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9hZGVkKFBSQm9vbCAqYUxvYWRl ZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9hZGVkKFBSQm9vbCBhTG9hZGVkKSA9IDA7 Cgp9OwojIDE4NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIgpjbGFzcyBu c0lTdHJpbmdCdW5kbGVTZXJ2aWNlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eGQ4NWExN2MwLCAweGFhN2MsIDB4MTFkMiwgeyAweDliLCAweDhjLCAweDAwLCAweDgwLCAweDVm LCAweDhhLCAweDE2LCAweGQ5IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg Q3JlYXRlQnVuZGxlKGNvbnN0IGNoYXIgKmFVUkxTcGVjLCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUFzeW5jQnVuZGxlKGNvbnN0IGNo YXIgKmFVUkxTcGVjLCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IENyZWF0ZUV4dGVuc2libGVCdW5kbGUoY29uc3QgY2hhciAqYVJlZ2lzdHJ5S2V5 LCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CiMgMjEwICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdGF0dXNNZXNz YWdlKG5zcmVzdWx0IGFTdGF0dXMsIGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c0FyZywgUFJVbmlj aGFyICoqX3JldHZhbCkgPSAwOwojIDIyMiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1 bmRsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmx1c2hCdW5kbGVzKHZvaWQpID0gMDsKCn07CiMg NTMgIm5zSW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsZS5oIiAx CiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbGUuaCIKY2xhc3MgbnNJTG9jYWxlIDog cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIxMDM1ZWUwLCAweDQ1NTYsIDB4MTFk MywgeyAweDkxLCAweGNkLCAweDAwLCAweDEwLCAweDVhLCAweGEzLCAweGY3LCAweGRjIH19OyBy ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2F0ZWdvcnkoY29uc3QgUFJVbmlj aGFyICpjYXRlZ29yeSwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA1NCAibnNJbnN0 YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIg MQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKIyAxICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZS5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lFdmVudFF1ZXVlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j bHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV2ZW50 UXVldWUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDEKIyAxOSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSUV2ZW50UXVldWUuaCIgMgojIDMyICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJRXZlbnRRdWV1ZS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlIDogcHVibGljIG5zSVN1cHBv cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv bnN0IG5zSUlEIGlpZCA9IHsweDE3NmFmYjQxLCAweDAwYTQsIDB4MTFkMywgeyAweDlmLCAweDJh LCAweDAwLCAweDQwLCAweDA1LCAweDUzLCAweGVlLCAweGYwIH19OyByZXR1cm4gaWlkO30KCgog IHZpcnR1YWwgbnNyZXN1bHQgSW5pdEV2ZW50KFBMRXZlbnQgKiBhRXZlbnQsIHZvaWQgKiBvd25l ciwgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlciwgUExEZXN0cm95RXZlbnRQcm9jIGRlc3RydWN0 b3IpID0gMDsKCgogIHZpcnR1YWwgUFJTdGF0dXMgUG9zdEV2ZW50KFBMRXZlbnQgKiBhRXZlbnQp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdFN5bmNocm9ub3VzRXZlbnQoUExFdmVudCAq IGFFdmVudCwgdm9pZCAqICphUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBlbmRp bmdFdmVudHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb2Nl c3NQZW5kaW5nRXZlbnRzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXZlbnRMb29w KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXZlbnRBdmFpbGFibGUoUFJCb29sICYg YVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudChQTEV2ZW50ICogKl9y ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQoUExFdmVudCAqIGFF dmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXYWl0Rm9yRXZlbnQoUExFdmVudCAqICpf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgR2V0RXZlbnRRdWV1ZVNlbGVjdEZEKHZv aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChQUkJvb2wgYU5hdGl2ZSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RnJvbVBSVGhyZWFkKFBSVGhyZWFkICogdGhyZWFkLCBQ UkJvb2wgYU5hdGl2ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RnJvbVBMUXVldWUo UExFdmVudFF1ZXVlICogYVF1ZXVlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudGVyTW9u aXRvcih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXRNb25pdG9yKHZvaWQpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2b2tlRXZlbnRzKHZvaWQgKiBvd25lcikgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQTEV2ZW50UXVldWUoUExFdmVudFF1ZXVlICogKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNRdWV1ZU9uQ3VycmVudFRocmVhZChQUkJv b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNRdWV1ZU5hdGl2ZShQUkJv b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcEFjY2VwdGluZ0V2ZW50 cyh2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNl cnZpY2UuaCIgMgoKCgoKCgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv bnNwci9wcnRocmVhZC5oIiAxCiMgMjIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVl U2VydmljZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMQojIDIzICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIgMgojIDMzICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKY2xhc3MgbnNJVGhyZWFkOwojIDQz ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKY2xhc3MgbnNJRXZl bnRRdWV1ZVNlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMg Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw ZGMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDU2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RXZlbnRRdWV1ZVNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVRocmVhZEV2ZW50 UXVldWUodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZU1vbml0b3Jl ZFRocmVhZEV2ZW50UXVldWUodm9pZCkgPSAwOwojIDc1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RXZlbnRRdWV1ZVNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3lUaHJlYWRFdmVu dFF1ZXVlKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRnJvbUlUaHJlYWQo bnNJVGhyZWFkICphVGhyZWFkLCBQUkJvb2wgYU5hdGl2ZSwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRnJvbVBMRXZlbnRRdWV1ZShQTEV2 ZW50UXVldWUgKiBhUExFdmVudFF1ZXVlLCBuc0lFdmVudFF1ZXVlICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBQdXNoVGhyZWFkRXZlbnRRdWV1ZShuc0lFdmVudFF1ZXVlICoq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3BUaHJlYWRFdmVudFF1ZXVlKG5z SUV2ZW50UXVldWUgKmFRdWV1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUaHJlYWRF dmVudFF1ZXVlKFBSVGhyZWFkICogYVRocmVhZCwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2YWwpID0g MDsKIyAxMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIgogIHZp cnR1YWwgbnNyZXN1bHQgUmVzb2x2ZUV2ZW50UXVldWUobnNJRXZlbnRRdWV1ZSAqcXVldWVPckNv bnN0YW50LCBuc0lFdmVudFF1ZXVlICoqX3JldHZhbCkgPSAwOwojIDEyMyAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSUV2ZW50UXVldWVTZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTcGVj aWFsRXZlbnRRdWV1ZShQUkludDMyIGFRdWV1ZSwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2YWwpID0g MDsKCiAgZW51bSB7IENVUlJFTlRfVEhSRUFEX0VWRU5UX1FVRVVFID0gMCB9OwoKICBlbnVtIHsg VUlfVEhSRUFEX0VWRU5UX1FVRVVFID0gMSB9OwoKfTsKIyA1NSAibnNJbnN0YWxsLmgiIDIKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIgMQojIDU2ICJuc0luc3Rh bGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEK IyA1NyAibnNJbnN0YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUGVyc2lzdGVu dFByb3BlcnRpZXMyLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQ cm9wZXJ0aWVzMi5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiIDEK IyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMg MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lDb2xsZWN0aW9uLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbGxlY3Rpb24u aCIKY2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7 MHg4M2I2MDE5YywgMHhjYmM0LCAweDExZDIsIHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhi MCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IENvdW50KFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVs ZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5RWxlbWVudEF0KFBSVWludDMyIGluZGV4LCBjb25zdCBuc0lJ RCAmIHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVs ZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgQXBwZW5kRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50KG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhcih2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIiAyCgoKCgoKCmNsYXNzIG5zSUJpZGlyZWN0aW9u YWxFbnVtZXJhdG9yOwojIDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5o Igp0eXBlZGVmIFBSQm9vbCAoKm5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYykobnNJU3VwcG9ydHMq IGFFbGVtZW50LCB2b2lkICphRGF0YSk7CiMgNDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw b3J0c0FycmF5LmgiCmNsYXNzIG5zSVN1cHBvcnRzQXJyYXkgOiBwdWJsaWMgbnNJQ29sbGVjdGlv biB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHg3OTFlYWZhMCwgMHhiOWU2LCAweDExZDEsIHsgMHg4MCwgMHgzMSwg MHgwMCwgMHg2MCwgMHgwOCwgMHgxNSwgMHg5YiwgMHg1YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2 aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3VwcG9ydHNBcnJheSAqb3RoZXIpID0gMDsK CgogIHZpcnR1YWwgbnNJU3VwcG9ydHMgKiBFbGVtZW50QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7 CgoKICB2aXJ0dWFsIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0lTdXBwb3J0cyAqYVBvc3NpYmxl RWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIEluZGV4T2ZTdGFydGluZ0F0KGNvbnN0 IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUlVpbnQzMiBhU3RhcnRJbmRleCkgPSAw OwoKCiAgdmlydHVhbCBQUkludDMyIExhc3RJbmRleE9mKGNvbnN0IG5zSVN1cHBvcnRzICphUG9z c2libGVFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZGV4T2YobnNJU3Vw cG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0SW5kZXhPZlN0YXJ0aW5nQXQobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVs ZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RJbmRleE9mKG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVt ZW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBJbnNlcnRFbGVt ZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZp cnR1YWwgUFJCb29sIFJlcGxhY2VFbGVtZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVp bnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUlVp bnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92ZUxhc3RFbGVtZW50KGNv bnN0IG5zSVN1cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxl dGVMYXN0RWxlbWVudChuc0lTdXBwb3J0cyAqYUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgRGVsZXRlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQ UkJvb2wgQXBwZW5kRWxlbWVudHMobnNJU3VwcG9ydHNBcnJheSAqYUVsZW1lbnRzKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhY3Qodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wg RW51bWVyYXRlRm9yd2FyZHMobnNJU3VwcG9ydHNBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkICog YURhdGEpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc0lTdXBw b3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBDbG9uZShuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkgPSAwOwoKcHJpdmF0ZToK CiAgdmlydHVhbCBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0lTdXBwb3J0c0FycmF5JiBvdGhl cikgPSAwOwogIHZpcnR1YWwgbnNJU3VwcG9ydHMqIG9wZXJhdG9yW10oUFJVaW50MzIgYUluZGV4 KSA9IDA7Cn07CiMgMzI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIgpl eHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXkobnNJU3VwcG9ydHNBcnJheSoqIGFJ bnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXlF bnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQp OwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW5wdXRTdHJlYW0uaCIgMQojIDE3ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CgpjbGFz cyBuc0lJbnB1dFN0cmVhbU9ic2VydmVyOwojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW5w dXRTdHJlYW0uaCIKdHlwZWRlZiBuc3Jlc3VsdCAoKiBuc1dyaXRlU2VnbWVudEZ1bikobnNJSW5w dXRTdHJlYW0qIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk KiBjbG9zdXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBmcm9tUmF3U2VnbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUFJVaW50MzIgdG9PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSVWludDMyIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUlVpbnQzMiAqd3JpdGVDb3VudCk7CiMgNDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnB1 dFN0cmVhbS5oIgpjbGFzcyBuc0lJbnB1dFN0cmVhbSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHhmYTljN2Y2YywgMHg2MWIzLCAweDExZDQsIHsgMHg5OCwgMHg3NywgMHgwMCwg MHhjMCwgMHg0ZiwgMHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IENsb3NlKHZvaWQpID0gMDsKIyA2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SUlucHV0U3RyZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdmFpbGFibGUoUFJVaW50MzIgKl9y ZXR2YWwpID0gMDsKIyA3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlucHV0U3RyZWFtLmgiCiAg dmlydHVhbCBuc3Jlc3VsdCBSZWFkKGNoYXIgKiBidWYsIFBSVWludDMyIGNvdW50LCBQUlVpbnQz MiAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVhZFNlZ21lbnRzKG5z V3JpdGVTZWdtZW50RnVuIHdyaXRlciwgdm9pZCAqIGNsb3N1cmUsIFBSVWludDMyIGNvdW50LCBQ UlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb25CbG9j a2luZyhQUkJvb2wgKmFOb25CbG9ja2luZykgPSAwOwojIDk2ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9ic2VydmVyKG5zSUlucHV0 U3RyZWFtT2JzZXJ2ZXIgKiAqYU9ic2VydmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRP YnNlcnZlcihuc0lJbnB1dFN0cmVhbU9ic2VydmVyICogYU9ic2VydmVyKSA9IDA7Cgp9OwojIDIx MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3Ry ZWFtT2JzZXJ2ZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MDE5ZDY3Y2Ms IDB4NjFiNCwgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAsIDB4YzAsIDB4NGYsIDB4YTAsIDB4 Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkVtcHR5 KG5zSUlucHV0U3RyZWFtICpvdXRTdHIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25D bG9zZShuc0lJbnB1dFN0cmVhbSAqb3V0U3RyKSA9IDA7Cgp9OwojIDIwICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJT3V0cHV0U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1 dFN0cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lPdXRwdXRTdHJlYW1P YnNlcnZlcjsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwojIDMzICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJT3V0cHV0U3RyZWFtLmgiCnR5cGVkZWYgbnNyZXN1bHQgKCogbnNSZWFkU2VnbWVudEZ1biko bnNJT3V0cHV0U3RyZWFtKiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCogY2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyKiB0b1Jhd1NlZ21lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UFJVaW50MzIgZnJvbU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQUlVpbnQzMiBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ UlVpbnQzMiAqcmVhZENvdW50KTsKIyA0NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0 cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW0gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4MGQwYWNkMmEsIDB4NjFiNCwgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAsIDB4 YzAsIDB4NGYsIDB4YTAsIDB4Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVh bCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNo KHZvaWQpID0gMDsKIyA3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0cmVhbS5oIgog IHZpcnR1YWwgbnNyZXN1bHQgV3JpdGUoY29uc3QgY2hhciAqYnVmLCBQUlVpbnQzMiBjb3VudCwg UFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyA4OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1 dFN0cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV3JpdGVGcm9tKG5zSUlucHV0U3RyZWFtICpp blN0ciwgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmly dHVhbCBuc3Jlc3VsdCBXcml0ZVNlZ21lbnRzKG5zUmVhZFNlZ21lbnRGdW4gcmVhZGVyLCB2b2lk ICogY2xvc3VyZSwgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vbkJsb2NraW5nKFBSQm9vbCAqYU5vbkJsb2NraW5nKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROb25CbG9ja2luZyhQUkJvb2wgYU5vbkJsb2NraW5n KSA9IDA7CiMgMTExICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT3V0cHV0U3RyZWFtLmgiCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRPYnNlcnZlcihuc0lPdXRwdXRTdHJlYW1PYnNlcnZlciAqICphT2Jz ZXJ2ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE9ic2VydmVyKG5zSU91dHB1dFN0cmVh bU9ic2VydmVyICogYU9ic2VydmVyKSA9IDA7Cgp9OwojIDI0MiAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSU91dHB1dFN0cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW1PYnNlcnZlciA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgxMjMxNDE5NCwgMHg2MWI0LCAweDExZDQsIHsg MHg5OCwgMHg3NywgMHgwMCwgMHhjMCwgMHg0ZiwgMHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJu IGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uV3JpdGUobnNJT3V0cHV0U3RyZWFtICpp blN0ciwgUFJVaW50MzIgYW1vdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRnVs bChuc0lPdXRwdXRTdHJlYW0gKmluU3RyKSA9IDA7Cgp9OwojIDIxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJUHJvcGVydGllcy5oIiAxCiMgMjIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQZXJzaXN0ZW50 UHJvcGVydGllczIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiIDEKIyAyMyAi Li4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ ZXJzaXN0ZW50UHJvcGVydGllczIuaCIKY2xhc3MgbnNJUHJvcGVydHlFbGVtZW50IDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDI4M2VlNjQ2LCAweDFhZWYsIDB4MTFkNCwgeyAw eDk4LCAweGIzLCAweDAwLCAweGMwLCAweDRmLCAweGEwLCAweGNlLCAweDlhIH19OyByZXR1cm4g aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0S2V5KG5zU3RyaW5nICogYUtleSkgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWYWx1ZShuc1N0cmluZyAqIGFWYWx1ZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRLZXkoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEz MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIgpzdGF0aWMg Y29uc3QgbnNDSUQga1Byb3BlcnR5RWxlbWVudENJRCA9IHsgMHgyODNlZTY0NSwgMHgxYWVmLCAw eDExZDQsIHsgMHg5OCwgMHhiMywgMHgwLCAweGMwLCAweDRmLCAweGEwLCAweGNlLCAweDlhIH0g fTsKCgoKCgoKCnN0YXRpYyBjb25zdCBuc0NJRCBrUGVyc2lzdGVudFByb3BlcnRpZXNDSUQgPSB7 IDB4MjI0NWU1NzMsIDB4OTQ2NCwgMHgxMWQyLCB7IDB4OWIsIDB4OGIsIDB4MCwgMHg4MCwgMHg1 ZiwgMHg4YSwgMHgxNiwgMHhkOSB9IH07CgoKY2xhc3MgbnNJUGVyc2lzdGVudFByb3BlcnRpZXMg OiBwdWJsaWMgbnNJUHJvcGVydGllcwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgxYTE4MGY2MCwgMHg5M2IyLCAweDExZDIs IHsgMHg5YiwgMHg4YiwgMHgwLCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH0gfTsgcmV0 dXJuIGlpZDsgfQogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZChuc0lJbnB1dFN0cmVhbSogYUluKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTYXZlKG5zSU91dHB1dFN0cmVhbSogYU91dCwgY29uc3Qg bnNTdHJpbmcmIGFIZWFkZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN1YmNsYXNzKG5zSVBl cnNpc3RlbnRQcm9wZXJ0aWVzKiBhU3ViY2xhc3MpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBFbnVtZXJhdGVQcm9wZXJ0aWVzKG5zSUJpZGlyZWN0aW9uYWxFbnVtZXJhdG9yKiogYVJlc3Vs dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2ltcGxlRW51bWVyYXRlUHJvcGVydGllcyhuc0lT aW1wbGVFbnVtZXJhdG9yKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT dHJpbmdQcm9wZXJ0eShjb25zdCBuc1N0cmluZyYgYUtleSwgbnNTdHJpbmcmIGFWYWx1ZSkgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3RyaW5nUHJvcGVydHkoY29uc3QgbnNTdHJpbmcmIGFL ZXksIG5zU3RyaW5nJiBhTmV3VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c1N0cmluZyYgYU9sZFZhbHVlKSA9IDA7Cn07CiMgNTggIm5zSW5zdGFsbC5oIiAyCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIgMQojIDU5ICJuc0luc3RhbGwuaCIgMgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0laaXBSZWFkZXIuaCIgMQojIDE3ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNJWmlwUmVhZGVyLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7CgpjbGFz cyBuc0lJbnB1dFN0cmVhbTsKCmNsYXNzIG5zSUZpbGU7CiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0laaXBSZWFkZXIuaCIKY2xhc3MgbnNJWmlwRW50cnkgOiBwdWJsaWMgbnNJU3VwcG9ydHMg ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg bnNJSUQgaWlkID0gezB4NmNhNWU0M2UsIDB4OTYzMiwgMHgxMWQzLCB7IDB4OGMsIDB4ZDksIDB4 MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0Q29tcHJlc3Npb24oUFJVaW50MTYgKmFDb21wcmVzc2lvbikgPSAwOwoKCiAgdmly dHVhbCBuc3Jlc3VsdCBHZXRTaXplKFBSVWludDMyICphU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRSZWFsU2l6ZShQUlVpbnQzMiAqYVJlYWxTaXplKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldENSQzMyKFBSVWludDMyICphQ1JDMzIpID0gMDsKCn07CiMgMTQ3ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJWmlwUmVhZGVyLmgiCmNsYXNzIG5zSVppcFJlYWRlciA6IHB1Ymxp YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg2ZmY2YTk2NiwgMHg5NjMyLCAweDExZDMsIHsg MHg4YywgMHhkOSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJu IGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRmlsZSAqemlwRmlsZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlKG5zSUZpbGUgKiAqYUZpbGUpID0gMDsKCgoK CgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbih2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBDbG9zZSh2b2lkKSA9IDA7CiMgMTgxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWmlwUmVh ZGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBUZXN0KGNvbnN0IGNoYXIgKmFFbnRyeU5hbWUpID0g MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXh0cmFjdChjb25zdCBjaGFyICp6aXBFbnRyeSwg bnNJRmlsZSAqb3V0RmlsZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbnRyeShj b25zdCBjaGFyICp6aXBFbnRyeSwgbnNJWmlwRW50cnkgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEZpbmRFbnRyaWVzKGNvbnN0IGNoYXIgKmFQYXR0ZXJuLCBuc0lTaW1w bGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ bnB1dFN0cmVhbShjb25zdCBjaGFyICp6aXBFbnRyeSwgbnNJSW5wdXRTdHJlYW0gKipfcmV0dmFs KSA9IDA7Cgp9OwojIDMzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVppcFJlYWRlci5oIgpjbGFz cyBuc0laaXBSZWFkZXJDYWNoZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1 MmM0NWQ4NiwgMHgwY2MzLCAweDExZDQsIHsgMHg5OCwgMHg2ZSwgMHgwMCwgMHhjMCwgMHg0Ziwg MHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJuIGlpZDt9CiMgMzUyICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJWmlwUmVhZGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KFBSVWludDMyIGNhY2hl U2l6ZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRaaXAobnNJRmlsZSAqemlwRmls ZSwgbnNJWmlwUmVhZGVyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MCAibnNJbnN0YWxsLmgiIDIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIgMQojIDE0ICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJVVJMLmgiIDEKIyAxMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSTC5oIgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIgMQojIDYxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ VVJJLmgiCmNsYXNzIG5zSVVSSSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgw N2EyMmNjMCwgMHgwY2U1LCAweDExZDMsIHsgMHg5MywgMHgzMSwgMHgwMCwgMHgxMCwgMHg0Yiwg MHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CiMgNzMgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNwZWMoY2hhciAqICphU3BlYykgPSAw OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3BlYyhjb25zdCBjaGFyICogYVNwZWMpID0gMDsKCgoK CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVQYXRoKGNoYXIgKiAqYVByZVBhdGgpID0gMDsK ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZVBhdGgoY29uc3QgY2hhciAqIGFQcmVQYXRoKSA9IDA7 CiMgOTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFNjaGVtZShjaGFyICogKmFTY2hlbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjaGVt ZShjb25zdCBjaGFyICogYVNjaGVtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 UHJlSG9zdChjaGFyICogKmFQcmVIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVI b3N0KGNvbnN0IGNoYXIgKiBhUHJlSG9zdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRV c2VybmFtZShjaGFyICogKmFVc2VybmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VXNl cm5hbWUoY29uc3QgY2hhciAqIGFVc2VybmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRQYXNzd29yZChjaGFyICogKmFQYXNzd29yZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0 UGFzc3dvcmQoY29uc3QgY2hhciAqIGFQYXNzd29yZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy ZXN1bHQgR2V0SG9zdChjaGFyICogKmFIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRI b3N0KGNvbnN0IGNoYXIgKiBhSG9zdCkgPSAwOwojIDEzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9ydChQUkludDMyICphUG9ydCkgPSAwOwog IHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9ydChQUkludDMyIGFQb3J0KSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UGF0aChjaGFyICogKmFQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXRQYXRoKGNvbnN0IGNoYXIgKiBhUGF0aCkgPSAwOwojIDE1MSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSVVSSSAqb3RoZXIs IFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5o IgogIHZpcnR1YWwgbnNyZXN1bHQgU2NoZW1lSXMoY29uc3QgY2hhciAqc2NoZW1lLCBQUkJvb2wg Kl9yZXR2YWwpID0gMDsKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0 dWFsIG5zcmVzdWx0IENsb25lKG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyAxNzggIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmUoY29uc3QgY2hh ciAqcmVsYXRpdmVQYXRoLCBjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSVVSTC5oIiAyCiMgNjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkwuaCIK Y2xhc3MgbnNJVVJMIDogcHVibGljIG5zSVVSSSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkNjExNjk3MCwgMHg4 MDM0LCAweDExZDMsIHsgMHg5MywgMHg5OSwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwg MHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVBh dGgoY2hhciAqICphRmlsZVBhdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZpbGVQYXRo KGNvbnN0IGNoYXIgKiBhRmlsZVBhdGgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dFBhcmFtKGNoYXIgKiAqYVBhcmFtKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJhbShj b25zdCBjaGFyICogYVBhcmFtKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRRdWVy eShjaGFyICogKmFRdWVyeSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UXVlcnkoY29uc3Qg Y2hhciAqIGFRdWVyeSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVmKGNoYXIg KiAqYVJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmKGNvbnN0IGNoYXIgKiBhUmVm KSA9IDA7CiMgMTEyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJMLmgiCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXREaXJlY3RvcnkoY2hhciAqICphRGlyZWN0b3J5KSA9IDA7CiAgdmlydHVhbCBuc3Jl c3VsdCBTZXREaXJlY3RvcnkoY29uc3QgY2hhciAqIGFEaXJlY3RvcnkpID0gMDsKIyAxMjUgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lVUkwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVOYW1l KGNoYXIgKiAqYUZpbGVOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGaWxlTmFtZShj b25zdCBjaGFyICogYUZpbGVOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVC YXNlTmFtZShjaGFyICogKmFGaWxlQmFzZU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEZpbGVCYXNlTmFtZShjb25zdCBjaGFyICogYUZpbGVCYXNlTmFtZSkgPSAwOwoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0RmlsZUV4dGVuc2lvbihjaGFyICogKmFGaWxlRXh0ZW5zaW9uKSA9 IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IGNoYXIgKiBhRmls ZUV4dGVuc2lvbikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVzY2FwZWRRdWVy eShjaGFyICogKmFFc2NhcGVkUXVlcnkpID0gMDsKCn07CiMgMzQzICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJVVJMLmgiCmNsYXNzIG5zSVN0YW5kYXJkVVJMIDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDg3OTMzNzBhLCAweDMxMWYsIDB4MTFkNCwgeyAweDk4LCAweDc2LCAweDAw LCAweGMwLCAweDRmLCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7 IFVSTFRZUEVfU1RBTkRBUkQgPSAxVSB9OwoKICBlbnVtIHsgVVJMVFlQRV9BVVRIT1JJVFkgPSAy VSB9OwoKICBlbnVtIHsgVVJMVFlQRV9OT19BVVRIT1JJVFkgPSAzVSB9OwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBJbml0KFBSVWludDMyIHVybFR5cGUsIFBSSW50MzIgZGVmYXVsdFBvcnQsIGNvbnN0 IGNoYXIgKmluaXRpYWxTcGVjLCBuc0lVUkkgKmluaXRpYWxCYXNlVVJJKSA9IDA7Cgp9OwojIDE1 ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIgMgojIDI5ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIKY2xhc3MgbnNJRG9jU2hlbGw7CiMgMzkg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVSZWdpc3RyeS5oIgpjbGFzcyBuc0lDaHJvbWVS ZWdpc3RyeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGM3ZDhhMSwgMHhl ODRjLCAweDExZDIsIHsgMHhiZiwgMHg4NywgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwg MHgyNyB9fTsgcmV0dXJuIGlpZDt9CiMgNjMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVS ZWdpc3RyeS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2Fub25pZnkobnNJVVJJICphQ2hyb21lVVJM KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udmVydENocm9tZVVSTChuc0lVUkkg KmFDaHJvbWVVUkwsIGNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl dE92ZXJsYXlzKG5zSVVSSSAqYUNocm9tZVVSTCwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVTaGVldHMobnNJVVJJICphQ2hy b21lVVJMLCBuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBSZWxvYWRDaHJvbWUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZyZXNo U2tpbnModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RTa2luKGNvbnN0IFBS VW5pY2hhciAqc2tpbk5hbWUsIFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IFNlbGVjdExvY2FsZShjb25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1 c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc2VsZWN0U2tpbihjb25zdCBQ UlVuaWNoYXIgKnNraW5OYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBEZXNlbGVjdExvY2FsZShjb25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9v bCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2tpblNlbGVjdGVkKGNv bnN0IFBSVW5pY2hhciAqc2tpbk5hbWUsIFBSQm9vbCB1c2VQcm9maWxlLCBQUkJvb2wgKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb2NhbGVTZWxlY3RlZChjb25zdCBQUlVu aWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxlLCBQUkJvb2wgKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0U2tpbkZvclBhY2thZ2UoY29uc3QgUFJVbmlj aGFyICpza2luTmFtZSwgY29uc3QgUFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVBy b2ZpbGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0TG9jYWxlRm9yUGFja2FnZShj b25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIGNvbnN0IFBSVW5pY2hhciAqcGFja2FnZU5hbWUs IFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc2VsZWN0U2tp bkZvclBhY2thZ2UoY29uc3QgUFJVbmljaGFyICpza2luTmFtZSwgY29uc3QgUFJVbmljaGFyICpw YWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg RGVzZWxlY3RMb2NhbGVGb3JQYWNrYWdlKGNvbnN0IFBSVW5pY2hhciAqbG9jYWxlTmFtZSwgY29u c3QgUFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgSXNTa2luU2VsZWN0ZWRGb3JQYWNrYWdlKGNvbnN0IFBSVW5pY2hhciAq c2tpbk5hbWUsIGNvbnN0IFBSVW5pY2hhciAqcGFja2FnZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxl LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb2NhbGVTZWxl Y3RlZEZvclBhY2thZ2UoY29uc3QgUFJVbmljaGFyICpsb2NhbGVOYW1lLCBjb25zdCBQUlVuaWNo YXIgKnBhY2thZ2VOYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdExvY2FsZUZvclByb2ZpbGUoY29uc3QgUFJVbmlj aGFyICpsb2NhbGVOYW1lLCBjb25zdCBQUlVuaWNoYXIgKnByb2ZpbGVQYXRoKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGVkTG9jYWxlKGNvbnN0IFBSVW5pY2hhciAqcGFja2Fn ZU5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5z dGFsbFNraW4oY29uc3QgY2hhciAqYmFzZVVSTCwgUFJCb29sIHVzZVByb2ZpbGUsIFBSQm9vbCBh bGxvd1NjcmlwdHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5pbnN0YWxsU2tpbihjb25z dCBQUlVuaWNoYXIgKnNraW5OYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBJbnN0YWxsTG9jYWxlKGNvbnN0IGNoYXIgKmJhc2VVUkwsIFBSQm9vbCB1c2VQ cm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuaW5zdGFsbExvY2FsZShjb25zdCBQ UlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEluc3RhbGxQYWNrYWdlKGNvbnN0IGNoYXIgKmJhc2VVUkwsIFBSQm9vbCB1c2VQ cm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuaW5zdGFsbFBhY2thZ2UoY29uc3Qg UFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0QmFja3N0b3BTaGVldHMobnNJRG9jU2hlbGwgKmRvY1NoZWxsLCBuc0lT dXBwb3J0c0FycmF5ICoqc3R5bGVTaGVldHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 VXNlclNoZWV0cyhQUkJvb2wgdXNlQ2hyb21lU2hlZXRzLCBuc0lTdXBwb3J0c0FycmF5ICoqc3R5 bGVTaGVldHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWxsb3dTY3JpcHRzRm9yU2tpbihu c0lVUkkgKnVybCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENo ZWNrRm9yTmV3Q2hyb21lKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tUaGVt ZVZlcnNpb24oY29uc3QgUFJVbmljaGFyICpza2luTmFtZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoZWNrTG9jYWxlVmVyc2lvbihjb25zdCBQUlVuaWNoYXIg KmxvY2FsZU5hbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA2MSAibnNJbnN0YWxsLmgi IDIKIyA3MyAibnNJbnN0YWxsLmgiCmNsYXNzIG5zSW5zdGFsbEluZm8KewogIHB1YmxpYzoKCiAg ICBuc0luc3RhbGxJbmZvKCBQUlVpbnQzMiBhSW5zdGFsbFR5cGUsCiAgICAgICAgICAgICAgICAg ICBuc0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYVVS TCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYUFyZ3MsCiAgICAgICAgICAg ICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5l ciogYUxpc3RlbmVyLAogICAgICAgICAgICAgICAgICAgbnNJRE9NV2luZG93SW50ZXJuYWwqIGFQ YXJlbnRXaW5kb3csCiAgICAgICAgICAgICAgICAgICBuc0lDaHJvbWVSZWdpc3RyeSogYUNocm9t ZVJlZyk7CgogICAgdmlydHVhbCB+bnNJbnN0YWxsSW5mbygpOwoKICAgIG5zSUZpbGUqIEdldEZp bGUoKSB7IHJldHVybiBtRmlsZS5nZXQoKTsgfQogICAgY29uc3QgUFJVbmljaGFyKiBHZXRVUkwo KSB7IHJldHVybiBtVVJMLkdldFVuaWNvZGUoKTsgfQogICAgY29uc3QgUFJVbmljaGFyKiBHZXRB cmd1bWVudHMoKSB7IHJldHVybiBtQXJncy5HZXRVbmljb2RlKCk7IH0KICAgIFBSVWludDMyIEdl dEZsYWdzKCkgeyByZXR1cm4gbUZsYWdzOyB9CiAgICBQUlVpbnQzMiBHZXRUeXBlKCkgeyByZXR1 cm4gbVR5cGU7IH0KICAgIG5zSVhQSUxpc3RlbmVyKiBHZXRMaXN0ZW5lcigpIHsgcmV0dXJuIG1M aXN0ZW5lci5nZXQoKTsgfQogICAgbnNJQ2hyb21lUmVnaXN0cnkqIEdldENocm9tZVJlZ2lzdHJ5 KCkgeyByZXR1cm4gbUNocm9tZVJlZy5nZXQoKTsgfQogICAgbnNJRE9NV2luZG93SW50ZXJuYWwq IEdldFBhcmVudERPTVdpbmRvdygpIHsgcmV0dXJuIG1QYXJlbnQuZ2V0KCk7IH0KCiAgcHJpdmF0 ZToKCiAgICBuc3Jlc3VsdCBtRXJyb3I7CgogICAgUFJVaW50MzIgbVR5cGU7CiAgICBQUlVpbnQz MiBtRmxhZ3M7CiAgICBuc1N0cmluZyBtVVJMOwogICAgbnNTdHJpbmcgbUFyZ3M7CgogICAgbnND T01QdHI8bnNJRmlsZT4gbUZpbGU7CiAgICBuc0NPTVB0cjxuc0lYUElMaXN0ZW5lcj4gbUxpc3Rl bmVyOwogICAgbnNDT01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IG1QYXJlbnQ7CiAgICBuc0NP TVB0cjxuc0lDaHJvbWVSZWdpc3RyeT4gbUNocm9tZVJlZzsKfTsKIyAxMjIgIm5zSW5zdGFsbC5o IgpjbGFzcyBuc0luc3RhbGwKewogICAgZnJpZW5kIGNsYXNzIG5zV2luUmVnOwogICAgZnJpZW5k IGNsYXNzIG5zV2luUHJvZmlsZTsKCiAgICBwdWJsaWM6CgogICAgICAgIGVudW0KICAgICAgICB7 CiAgICAgICAgICAgIEJBRF9QQUNLQUdFX05BTUUgPSAtMjAwLAogICAgICAgICAgICBVTkVYUEVD VEVEX0VSUk9SID0gLTIwMSwKICAgICAgICAgICAgQUNDRVNTX0RFTklFRCA9IC0yMDIsCiAgICAg ICAgICAgIFRPT19NQU5ZX0NFUlRJRklDQVRFUyA9IC0yMDMsCiAgICAgICAgICAgIE5PX0lOU1RB TExfU0NSSVBUID0gLTIwNCwKICAgICAgICAgICAgTk9fQ0VSVElGSUNBVEUgPSAtMjA1LAogICAg ICAgICAgICBOT19NQVRDSElOR19DRVJUSUZJQ0FURSA9IC0yMDYsCiAgICAgICAgICAgIENBTlRf UkVBRF9BUkNISVZFID0gLTIwNywKICAgICAgICAgICAgSU5WQUxJRF9BUkdVTUVOVFMgPSAtMjA4 LAogICAgICAgICAgICBJTExFR0FMX1JFTEFUSVZFX1BBVEggPSAtMjA5LAogICAgICAgICAgICBV U0VSX0NBTkNFTExFRCA9IC0yMTAsCiAgICAgICAgICAgIElOU1RBTExfTk9UX1NUQVJURUQgPSAt MjExLAogICAgICAgICAgICBTSUxFTlRfTU9ERV9ERU5JRUQgPSAtMjEyLAogICAgICAgICAgICBO T19TVUNIX0NPTVBPTkVOVCA9IC0yMTMsCiAgICAgICAgICAgIERPRVNfTk9UX0VYSVNUID0gLTIx NCwKICAgICAgICAgICAgUkVBRF9PTkxZID0gLTIxNSwKICAgICAgICAgICAgSVNfRElSRUNUT1JZ ID0gLTIxNiwKICAgICAgICAgICAgTkVUV09SS19GSUxFX0lTX0lOX1VTRSA9IC0yMTcsCiAgICAg ICAgICAgIEFQUExFX1NJTkdMRV9FUlIgPSAtMjE4LAogICAgICAgICAgICBJTlZBTElEX1BBVEhf RVJSID0gLTIxOSwKICAgICAgICAgICAgUEFUQ0hfQkFEX0RJRkYgPSAtMjIwLAogICAgICAgICAg ICBQQVRDSF9CQURfQ0hFQ0tTVU1fVEFSR0VUID0gLTIyMSwKICAgICAgICAgICAgUEFUQ0hfQkFE X0NIRUNLU1VNX1JFU1VMVCA9IC0yMjIsCiAgICAgICAgICAgIFVOSU5TVEFMTF9GQUlMRUQgPSAt MjIzLAogICAgICAgICAgICBQQUNLQUdFX0ZPTERFUl9OT1RfU0VUID0gLTIyNCwKICAgICAgICAg ICAgRVhUUkFDVElPTl9GQUlMRUQgPSAtMjI1LAogICAgICAgICAgICBGSUxFTkFNRV9BTFJFQURZ X1VTRUQgPSAtMjI2LAogICAgICAgICAgICBJTlNUQUxMX0NBTkNFTExFRCA9IC0yMjcsCiAgICAg ICAgICAgIERPV05MT0FEX0VSUk9SID0gLTIyOCwKICAgICAgICAgICAgU0NSSVBUX0VSUk9SID0g LTIyOSwKCiAgICAgICAgICAgIEFMUkVBRFlfRVhJU1RTID0gLTIzMCwKICAgICAgICAgICAgSVNf RklMRSA9IC0yMzEsCiAgICAgICAgICAgIFNPVVJDRV9ET0VTX05PVF9FWElTVCA9IC0yMzIsCiAg ICAgICAgICAgIFNPVVJDRV9JU19ESVJFQ1RPUlkgPSAtMjMzLAogICAgICAgICAgICBTT1VSQ0Vf SVNfRklMRSA9IC0yMzQsCiAgICAgICAgICAgIElOU1VGRklDSUVOVF9ESVNLX1NQQUNFID0gLTIz NSwKICAgICAgICAgICAgRklMRU5BTUVfVE9PX0xPTkcgPSAtMjM2LAoKICAgICAgICAgICAgVU5B QkxFX1RPX0xPQ0FURV9MSUJfRlVOQ1RJT04gPSAtMjM3LAogICAgICAgICAgICBVTkFCTEVfVE9f TE9BRF9MSUJSQVJZID0gLTIzOCwKCiAgICAgICAgICAgIENIUk9NRV9SRUdJU1RSWV9FUlJPUiA9 IC0yMzksCgogICAgICAgICAgICBNQUxGT1JNRURfSU5TVEFMTCA9IC0yNDAsCgogICAgICAgICAg ICBLRVlfQUNDRVNTX0RFTklFRCA9IC0yNDEsCiAgICAgICAgICAgIEtFWV9ET0VTX05PVF9FWElT VCA9IC0yNDIsCiAgICAgICAgICAgIFZBTFVFX0RPRVNfTk9UX0VYSVNUID0gLTI0MywKCiAgICAg ICAgICAgIE9VVF9PRl9NRU1PUlkgPSAtMjk5LAoKICAgICAgICAgICAgR0VTVEFMVF9VTktOT1dO X0VSUiA9IC01NTUwLAogICAgICAgICAgICBHRVNUQUxUX0lOVkFMSURfQVJHVU1FTlQgPSAtNTU1 MSwKCiAgICAgICAgICAgIFNVQ0NFU1MgPSAwLAogICAgICAgICAgICBSRUJPT1RfTkVFREVEID0g OTk5LAoKICAgICAgICAgICAgSU5TVEFMTF9GSUxFX1VORVhQRUNURURfTVNHX0lEID0gMCwKICAg ICAgICAgICAgREVUQUlMU19SRVBMQUNFX0ZJTEVfTVNHX0lEID0gMSwKICAgICAgICAgICAgREVU QUlMU19JTlNUQUxMX0ZJTEVfTVNHX0lEID0gMiwKCiAgICAgICAgICAgIERPX05PVF9VTklOU1RB TEwgPSAyLAogICAgICAgICAgICBXSU5fU0hBUkVEX0ZJTEUgPSA0CiAgICAgICAgfTsKCgogICAg ICAgIG5zSW5zdGFsbChuc0laaXBSZWFkZXIgKiB0aGVKQVJGaWxlKTsKICAgICAgICB2aXJ0dWFs IH5uc0luc3RhbGwoKTsKCiAgICAgICAgUFJJbnQzMiBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNj cmlwdE9iamVjdCk7CgogICAgICAgIFBSSW50MzIgU2F2ZVdpblJlZ1Byb3RvdHlwZSh2b2lkKiBh U2NyaXB0T2JqZWN0KTsKICAgICAgICBQUkludDMyIFNhdmVXaW5Qcm9maWxlUHJvdG90eXBlKHZv aWQqIGFTY3JpcHRPYmplY3QpOwoKICAgICAgICBKU09iamVjdCogUmV0cmlldmVXaW5SZWdQcm90 b3R5cGUodm9pZCk7CiAgICAgICAgSlNPYmplY3QqIFJldHJpZXZlV2luUHJvZmlsZVByb3RvdHlw ZSh2b2lkKTsKCiAgICAgICAgUFJJbnQzMiBBYm9ydEluc3RhbGwoUFJJbnQzMiBhRXJyb3JOdW1i ZXIpOwoKICAgICAgICBQUkludDMyIEFkZERpcmVjdG9yeShjb25zdCBuc1N0cmluZyYgYVJlZ05h bWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFKYXJTb3VyY2Us IG5zSW5zdGFsbEZvbGRlciogYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFTdWJkaXIsIFBSSW50 MzIgYU1vZGUsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgQWRkRGlyZWN0b3J5 KGNvbnN0IG5zU3RyaW5nJiBhUmVnTmFtZSwgY29uc3QgbnNTdHJpbmcmIGFWZXJzaW9uLCBjb25z dCBuc1N0cmluZyYgYUphclNvdXJjZSwgbnNJbnN0YWxsRm9sZGVyKiBhRm9sZGVyLCBjb25zdCBu c1N0cmluZyYgYVN1YmRpciwgUFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGRE aXJlY3RvcnkoY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1lLCBjb25zdCBuc1N0cmluZyYgYUphclNv dXJjZSwgbnNJbnN0YWxsRm9sZGVyKiBhRm9sZGVyLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpciwg UFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGREaXJlY3RvcnkoY29uc3QgbnNT dHJpbmcmIGFKYXJTb3VyY2UsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIEFk ZFN1YmNvbXBvbmVudChjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBh VmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFKYXJTb3VyY2UsIG5zSW5zdGFsbEZvbGRlciAqYUZv bGRlciwgY29uc3QgbnNTdHJpbmcmIGFUYXJnZXROYW1lLCBQUkludDMyIGFNb2RlLCBQUkludDMy KiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEFkZFN1YmNvbXBvbmVudChjb25zdCBuc1N0cmlu ZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFK YXJTb3VyY2UsIG5zSW5zdGFsbEZvbGRlciAqYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFUYXJn ZXROYW1lLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEFkZFN1YmNvbXBvbmVu dChjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBu c0luc3RhbGxGb2xkZXIgKmFGb2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJ bnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGRTdWJjb21wb25lbnQoY29uc3QgbnNT dHJpbmcmIGFKYXJTb3VyY2UsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIERp c2tTcGFjZUF2YWlsYWJsZShjb25zdCBuc1N0cmluZyYgYUZvbGRlciwgUFJJbnQ2NCogYVJldHVy bik7CiAgICAgICAgUFJJbnQzMiBFeGVjdXRlKGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBj b25zdCBuc1N0cmluZyYgYUFyZ3MsIFBSQm9vbCBhQmxvY2tpbmcsIFBSSW50MzIqIGFSZXR1cm4p OwogICAgICAgIFBSSW50MzIgRmluYWxpemVJbnN0YWxsKFBSSW50MzIqIGFSZXR1cm4pOwogICAg ICAgIFBSSW50MzIgR2VzdGFsdChjb25zdCBuc1N0cmluZyYgYVNlbGVjdG9yLCBQUkludDMyKiBh UmV0dXJuKTsKCiAgICAgICAgUFJJbnQzMiBHZXRDb21wb25lbnRGb2xkZXIoY29uc3QgbnNTdHJp bmcmIGFDb21wb25lbnROYW1lLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpcmVjdG9yeSwgbnNJbnN0 YWxsRm9sZGVyKiogYUZvbGRlcik7CiAgICAgICAgUFJJbnQzMiBHZXRDb21wb25lbnRGb2xkZXIo Y29uc3QgbnNTdHJpbmcmIGFDb21wb25lbnROYW1lLCBuc0luc3RhbGxGb2xkZXIqKiBhRm9sZGVy KTsKCiAgICAgICAgUFJJbnQzMiBHZXRGb2xkZXIobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0Rm9s ZGVyLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpcmVjdG9yeSwgbnNJbnN0YWxsRm9sZGVyKiogYUZv bGRlcik7CiAgICAgICAgUFJJbnQzMiBHZXRGb2xkZXIoY29uc3QgbnNTdHJpbmcmIGFUYXJnZXRG b2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhU3ViZGlyZWN0b3J5LCBuc0luc3RhbGxGb2xkZXIqKiBh Rm9sZGVyKTsKICAgICAgICBQUkludDMyIEdldEZvbGRlcihjb25zdCBuc1N0cmluZyYgYVRhcmdl dEZvbGRlciwgbnNJbnN0YWxsRm9sZGVyKiogYUZvbGRlcik7CgogICAgICAgIFBSSW50MzIgR2V0 TGFzdEVycm9yKFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgR2V0V2luUHJvZmls ZShjb25zdCBuc1N0cmluZyYgYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFGaWxlLCBKU0NvbnRl eHQqIGpzY29udGV4dCwgSlNDbGFzcyogV2luUHJvZmlsZUNsYXNzLCBqc3ZhbCogYVJldHVybik7 CiAgICAgICAgUFJJbnQzMiBHZXRXaW5SZWdpc3RyeShKU0NvbnRleHQqIGpzY29udGV4dCwgSlND bGFzcyogV2luUmVnQ2xhc3MsIGpzdmFsKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIExvYWRS ZXNvdXJjZXMoSlNDb250ZXh0KiBjeCwgY29uc3QgbnNTdHJpbmcmIGFCYXNlTmFtZSwganN2YWwq IGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgUGF0Y2goY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1l LCBjb25zdCBuc1N0cmluZyYgYVZlcnNpb24sIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBu c0luc3RhbGxGb2xkZXIqIGFGb2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJ bnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBQYXRjaChjb25zdCBuc1N0cmluZyYgYVJl Z05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBuc0luc3RhbGxGb2xkZXIqIGFGb2xk ZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJbnQzMiogYVJldHVybik7CiAgICAg ICAgUFJJbnQzMiBSZWdpc3RlckNocm9tZShuc0lGaWxlKiBjaHJvbWUsIFBSVWludDMyIGNocm9t ZVR5cGUsIGNvbnN0IGNoYXIqIHBhdGgpOwogICAgICAgIFBSSW50MzIgUmVmcmVzaFBsdWdpbnMo KTsKICAgICAgICBQUkludDMyIFJlc2V0RXJyb3IoUFJJbnQzMiBhRXJyb3IpOwogICAgICAgIFBS SW50MzIgU2V0UGFja2FnZUZvbGRlcihuc0luc3RhbGxGb2xkZXImIGFGb2xkZXIpOwogICAgICAg IFBSSW50MzIgU3RhcnRJbnN0YWxsKGNvbnN0IG5zU3RyaW5nJiBhVXNlclBhY2thZ2VOYW1lLCBj b25zdCBuc1N0cmluZyYgYVBhY2thZ2VOYW1lLCBjb25zdCBuc1N0cmluZyYgYVZlcnNpb24sIFBS SW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgVW5pbnN0YWxsKGNvbnN0IG5zU3RyaW5n JiBhUGFja2FnZU5hbWUsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIEZpbGVP cERpckNyZWF0ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50MzIqIGFSZXR1cm4pOwog ICAgICAgIFBSSW50MzIgRmlsZU9wRGlyR2V0UGFyZW50KG5zSW5zdGFsbEZvbGRlciYgYVRhcmdl dCwgbnNJbnN0YWxsRm9sZGVyKiogdGhlUGFyZW50Rm9sZGVyKTsKICAgICAgICBQUkludDMyIEZp bGVPcERpclJlbW92ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50MzIgYUZsYWdzLCBQ UkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcERpclJlbmFtZShuc0luc3Rh bGxGb2xkZXImIGFTcmMsIG5zU3RyaW5nJiBhVGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAg ICAgICBQUkludDMyIEZpbGVPcEZpbGVDb3B5KG5zSW5zdGFsbEZvbGRlciYgYVNyYywgbnNJbnN0 YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZp bGVPcEZpbGVEZWxldGUobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkludDMyIGFGbGFncywg UFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlRXhpc3RzKG5zSW5z dGFsbEZvbGRlciYgYVRhcmdldCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZp bGVPcEZpbGVFeGVjdXRlKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgbnNTdHJpbmcmIGFQYXJh bXMsIFBSQm9vbCBhQmxvY2tpbmcsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIg RmlsZU9wRmlsZUdldE5hdGl2ZVZlcnNpb24obnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBuc1N0 cmluZyogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0RGlza1NwYWNlQXZh aWxhYmxlKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJJbnQ2NCogYVJldHVybik7CiAgICAg ICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0TW9kRGF0ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQs IGRvdWJsZSogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0U2l6ZShuc0lu c3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50NjQqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIg RmlsZU9wRmlsZUlzRGlyZWN0b3J5KG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJCb29sKiBh UmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVJc1dyaXRhYmxlKG5zSW5zdGFsbEZv bGRlciYgYVRhcmdldCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZp bGVJc0ZpbGUobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkJvb2wqIGFSZXR1cm4pOwogICAg ICAgIFBSSW50MzIgRmlsZU9wRmlsZU1vZERhdGVDaGFuZ2VkKG5zSW5zdGFsbEZvbGRlciYgYVRh cmdldCwgZG91YmxlIGFPbGRTdGFtcCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMy IEZpbGVPcEZpbGVNb3ZlKG5zSW5zdGFsbEZvbGRlciYgYVNyYywgbnNJbnN0YWxsRm9sZGVyJiBh VGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVSZW5h bWUobnNJbnN0YWxsRm9sZGVyJiBhU3JjLCBuc1N0cmluZyYgYVRhcmdldCwgUFJJbnQzMiogYVJl dHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlV2luZG93c0dldFNob3J0TmFtZShuc0lu c3RhbGxGb2xkZXImIGFUYXJnZXQsIG5zU3RyaW5nJiBhU2hvcnRQYXRoTmFtZSk7CiAgICAgICAg UFJJbnQzMiBGaWxlT3BGaWxlV2luZG93c1Nob3J0Y3V0KG5zSUZpbGUqIGFUYXJnZXQsIG5zSUZp bGUqIGFTaG9ydGN1dFBhdGgsIG5zU3RyaW5nJiBhRGVzY3JpcHRpb24sIG5zSUZpbGUqIGFXb3Jr aW5nUGF0aCwgbnNTdHJpbmcmIGFQYXJhbXMsIG5zSUZpbGUqIGFJY29uLCBQUkludDMyIGFJY29u SWQsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgRmlsZU9wRmlsZU1hY0FsaWFz KG5zSUZpbGUgKmFTb3VyY2VGaWxlLCBuc0lGaWxlICphQWxpYXNGaWxlLCBQUkludDMyKiBhUmV0 dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVVbml4TGluayhuc0luc3RhbGxGb2xkZXIm IGFUYXJnZXQsIFBSSW50MzIgYUZsYWdzLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUklu dDMyIEZpbGVPcFdpblJlZ2lzdGVyU2VydmVyKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJJ bnQzMiogYVJldHVybik7CgogICAgICAgIHZvaWQgTG9nQ29tbWVudChuc1N0cmluZyYgYUNvbW1l bnQpOwoKICAgICAgICBQUkludDMyIEV4dHJhY3RGaWxlRnJvbUphcihjb25zdCBuc1N0cmluZyYg YUphcmZpbGUsIG5zSUZpbGUqIGFTdWdnZXN0ZWROYW1lLCBuc0lGaWxlKiogYVJlYWxOYW1lKTsK ICAgICAgICBjaGFyKiBHZXRSZXNvdXJjZWRTdHJpbmcoY29uc3QgbnNTdHJpbmcmIGFSZXNOYW1l KTsKICAgICAgICB2b2lkIEFkZFBhdGNoKG5zSGFzaEtleSAqYUtleSwgbnNJRmlsZSogZmlsZU5h bWUpOwogICAgICAgIHZvaWQgR2V0UGF0Y2gobnNIYXNoS2V5ICphS2V5LCBuc0lGaWxlKiogZmls ZU5hbWUpOwoKICAgICAgICBuc0lGaWxlKiBHZXRKYXJGaWxlTG9jYXRpb24oKSB7IHJldHVybiBt SmFyRmlsZUxvY2F0aW9uOyB9CiAgICAgICAgdm9pZCBTZXRKYXJGaWxlTG9jYXRpb24obnNJRmls ZSogYUZpbGUpOwoKICAgICAgICB2b2lkIEdldEluc3RhbGxBcmd1bWVudHMobnNTdHJpbmcmIGFy Z3MpOwogICAgICAgIHZvaWQgU2V0SW5zdGFsbEFyZ3VtZW50cyhjb25zdCBuc1N0cmluZyYgYXJn cyk7CgogICAgICAgIHZvaWQgR2V0SW5zdGFsbFVSTChuc1N0cmluZyYgdXJsKTsKICAgICAgICB2 b2lkIFNldEluc3RhbGxVUkwoY29uc3QgbnNTdHJpbmcmIHVybCk7CgogICAgICAgIFBSVWludDMy IEdldEluc3RhbGxGbGFncygpIHsgcmV0dXJuIG1JbnN0YWxsRmxhZ3M7IH0KICAgICAgICB2b2lk IFNldEluc3RhbGxGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsgbUluc3RhbGxGbGFncyA9IGFGbGFn czsgfQoKICAgICAgICBQUkludDMyIEdldEluc3RhbGxQbGF0Zm9ybShuc0NTdHJpbmcmIGFQbGF0 Zm9ybSk7CgogICAgICAgIG5zSUNocm9tZVJlZ2lzdHJ5KiBHZXRDaHJvbWVSZWdpc3RyeSgpIHsg cmV0dXJuIG1DaHJvbWVSZWdpc3RyeTsgfQogICAgICAgIHZvaWQgU2V0Q2hyb21lUmVnaXN0cnko bnNJQ2hyb21lUmVnaXN0cnkqIHJlZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IG1DaHJvbWVSZWdpc3RyeSA9IHJlZzsgfQoKICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCog R2V0UGFyZW50RE9NV2luZG93KCkgeyByZXR1cm4gbVBhcmVudDsgfQogICAgICAgIHZvaWQgU2V0 UGFyZW50RE9NV2luZG93KG5zSURPTVdpbmRvd0ludGVybmFsKiBwYXJlbnQpCiAgICAgICAgeyBt UGFyZW50ID0gcGFyZW50OyB9CgogICAgICAgIFBSQm9vbCBHZXRTdGF0dXNTZW50KCkgeyByZXR1 cm4gbVN0YXR1c1NlbnQ7IH0KICAgICAgICBQUkJvb2wgSW5JbnN0YWxsVHJhbnNhY3Rpb24odm9p ZCkgeyByZXR1cm4gbUluc3RhbGxlZEZpbGVzICE9IDA7IH0KCiAgICAgICAgUFJJbnQzMiBBbGVy dChuc1N0cmluZyYgc3RyaW5nKTsKICAgICAgICBQUkludDMyIENvbmZpcm0obnNTdHJpbmcmIHN0 cmluZywgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2b2lkIEludGVybmFsQWJvcnQoUFJJbnQz MiBlcnJjb2RlKTsKCiAgICAgICAgUFJJbnQzMiBTY2hlZHVsZUZvckluc3RhbGwobnNJbnN0YWxs T2JqZWN0KiBvYik7CgogICAgICAgIFBSSW50MzIgU2F2ZUVycm9yKFBSSW50MzIgZXJyY29kZSk7 CgogICAgcHJpdmF0ZToKICAgICAgICBKU09iamVjdCogbVNjcmlwdE9iamVjdDsKCiAgICAgICAg SlNPYmplY3QqIG1XaW5SZWdPYmplY3Q7CiAgICAgICAgSlNPYmplY3QqIG1XaW5Qcm9maWxlT2Jq ZWN0OwoKCiAgICAgICAgbnNDT01QdHI8bnNJRmlsZT4gbUphckZpbGVMb2NhdGlvbjsKICAgICAg ICBuc0laaXBSZWFkZXIqIG1KYXJGaWxlRGF0YTsKCiAgICAgICAgbnNTdHJpbmcgbUluc3RhbGxB cmd1bWVudHM7CiAgICAgICAgbnNTdHJpbmcgbUluc3RhbGxVUkw7CiAgICAgICAgUFJVaW50MzIg bUluc3RhbGxGbGFnczsKICAgICAgICBuc0NTdHJpbmcgbUluc3RhbGxQbGF0Zm9ybTsKICAgICAg ICBuc0lDaHJvbWVSZWdpc3RyeSogbUNocm9tZVJlZ2lzdHJ5OwogICAgICAgIG5zSURPTVdpbmRv d0ludGVybmFsKiBtUGFyZW50OwogICAgICAgIG5zSW5zdGFsbEZvbGRlciogbVBhY2thZ2VGb2xk ZXI7CgogICAgICAgIFBSQm9vbCBtVXNlckNhbmNlbGxlZDsKICAgICAgICBQUkJvb2wgbVN0YXR1 c1NlbnQ7CgogICAgICAgIFBSQm9vbCBtVW5pbnN0YWxsUGFja2FnZTsKICAgICAgICBQUkJvb2wg bVJlZ2lzdGVyUGFja2FnZTsKICAgICAgICBQUkJvb2wgbVN0YXJ0SW5zdGFsbENvbXBsZXRlZDsK CiAgICAgICAgbnNTdHJpbmcgbVJlZ2lzdHJ5UGFja2FnZU5hbWU7CiAgICAgICAgbnNTdHJpbmcg bVVJTmFtZTsKICAgICAgICBuc0luc3RhbGxWZXJzaW9uKiBtVmVyc2lvbkluZm87CgogICAgICAg IG5zVm9pZEFycmF5KiBtSW5zdGFsbGVkRmlsZXM7CgogICAgICAgIG5zSGFzaHRhYmxlKiBtUGF0 Y2hMaXN0OwoKICAgICAgICBuc0NPTVB0cjxuc0lYUElMaXN0ZW5lcj4gbUxpc3RlbmVyOwoKICAg ICAgICBuc0NPTVB0cjxuc0lTdHJpbmdCdW5kbGU+IG1TdHJpbmdCdW5kbGU7CgogICAgICAgIFBS SW50MzIgbUxhc3RFcnJvcjsKCiAgICAgICAgdm9pZCBQYXJzZUZsYWdzKGludCBmbGFncyk7CiAg ICAgICAgUFJJbnQzMiBTYW5pdHlDaGVjayh2b2lkKTsKICAgICAgICB2b2lkIEdldFRpbWUobnNT dHJpbmcgJmFTdHJpbmcpOwoKCiAgICAgICAgUFJJbnQzMiBHZXRRdWFsaWZpZWRSZWdOYW1lKGNv bnN0IG5zU3RyaW5nJiBuYW1lLCBuc1N0cmluZyYgcXVhbGlmaWVkUmVnTmFtZSApOwogICAgICAg IFBSSW50MzIgR2V0UXVhbGlmaWVkUGFja2FnZU5hbWUoIGNvbnN0IG5zU3RyaW5nJiBuYW1lLCBu c1N0cmluZyYgcXVhbGlmaWVkTmFtZSApOwoKICAgICAgICB2b2lkIEN1cnJlbnRVc2VyTm9kZShu c1N0cmluZyYgdXNlclJlZ05vZGUpOwogICAgICAgIFBSQm9vbCBCYWRSZWdOYW1lKGNvbnN0IG5z U3RyaW5nJiByZWdOYW1lKTsKCiAgICAgICAgdm9pZCBDbGVhblVwKCk7CgogICAgICAgIFBSSW50 MzIgRXh0cmFjdERpckVudHJpZXMoY29uc3QgbnNTdHJpbmcmIGRpcmVjdG9yeSwgbnNWb2lkQXJy YXkgKnBhdGhzKTsKCiAgICAgICAgc3RhdGljIHZvaWQgRGVsZXRlVmVjdG9yKG5zVm9pZEFycmF5 KiB2ZWN0b3IpOwp9OwoKbnNyZXN1bHQgTWFrZVVuaXF1ZShuc0lMb2NhbEZpbGUqIGZpbGUpOwoj IDQ2ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uL3B1YmxpYy9uc1NvZnR3YXJlVXBk YXRlSUlEcy5oIiAxCiMgNDcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNTb2Z0d2Fy ZVVwZGF0ZS5oIiAxCiMgNDggIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNTb2Z0d2Fy ZVVwZGF0ZVJ1bi5oIiAxCgoKClBSSW50MzIgUnVuSW5zdGFsbChuc0luc3RhbGxJbmZvICppbnN0 YWxsSW5mbyk7CiMgNDkgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNJbnN0YWxsVHJp Z2dlci5oIiAxCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNSAibnNJ bnN0YWxsVHJpZ2dlci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEK IyA2ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFj dG9yeS5oIiAxCiMgNyAibnNJbnN0YWxsVHJpZ2dlci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSVN1cHBvcnRzLmgiIDEKIyA4ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKIyAxICIuLi8u Li9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIgMQojIDkgIm5zSW5zdGFsbFRy aWdnZXIuaCIgMgoKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAxCiMgMTEgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAxCiMgMTIgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgoKIyAx ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwuaCIgMQojIDI2ICIuLi9wdWJs aWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9i YWwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjggIi4uL3B1 YmxpYy9uc0lET01JbnN0YWxsVHJpZ2dlckdsb2JhbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSVNjcmlwdENvbnRleHQuaCIgMQojIDI5ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRy aWdnZXJHbG9iYWwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZv LmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIKIyAxICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNYUElUcmlnZ2VySW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5 LmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1hQSVRyaWdnZXJJbmZvLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y dHNVdGlscy5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZvLmgi IDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiIDEKIyAzNCAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc0lMb2NhbEZpbGUuaCIgMQojIDM1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElUcmlnZ2Vy SW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0cmVhbS5oIiAxCiMg MzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZvLmgiIDIKIyAxICIuLi8uLi9k aXN0L2luY2x1ZGUvanNhcGkuaCIgMQojIDM3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElUcmln Z2VySW5mby5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BydGhyZWFkLmgiIDEKIyAzOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8u aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDEKIyAzOSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lYUENvbm5lY3QuaCIgMQojIDE4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0Lmgi CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIgMQojIDE0ICIuLi8uLi9k aXN0L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNl eGNlcHRpb24uaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjZXhjZXB0aW9uLmgiCiMg MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV4Y2VwdGlvbi5oIiAxCiMgMjkgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lFeGNlcHRpb24uaCIKY2xhc3MgbnNJU3RhY2tGcmFtZSA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5MWQ4MjEwNSwgMHg3YzYyLCAweDRmOGIsIHsgMHg5Nywg MHg3OSwgMHgxNSwgMHg0MiwgMHg3NywgMHhjMCwgMHhlZSwgMHg5MCB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKFBSVWludDMyICphTGFuZ3VhZ2UpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2VOYW1lKGNoYXIgKiAqYUxhbmd1YWdl TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlbmFtZShjaGFyICogKmFGaWxl bmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGluZU51bWJlcihQUkludDMyICphTGluZU51bWJl cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTb3VyY2VMaW5lKGNoYXIgKiAqYVNvdXJj ZUxpbmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVyKG5zSVN0YWNrRnJhbWUg KiAqYUNhbGxlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3Jl dHZhbCkgPSAwOwoKfTsKIyAxODEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFeGNlcHRpb24uaCIK Y2xhc3MgbnNJRXhjZXB0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGYz YThkM2I0LCAweGM0MjQsIDB4NGVkYywgeyAweDhiLCAweGY2LCAweDg5LCAweDc0LCAweGM5LCAw eDgzLCAweGJhLCAweDc4IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TWVzc2FnZShjaGFyICogKmFNZXNzYWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJl c3VsdChuc3Jlc3VsdCAqYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1l KGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZW5hbWUoY2hh ciAqICphRmlsZW5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGluZU51bWJlcihQ UlVpbnQzMiAqYUxpbmVOdW1iZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29sdW1u TnVtYmVyKFBSVWludDMyICphQ29sdW1uTnVtYmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0 IEdldExvY2F0aW9uKG5zSVN0YWNrRnJhbWUgKiAqYUxvY2F0aW9uKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldElubmVyKG5zSUV4Y2VwdGlvbiAqICphSW5uZXIpID0gMDsKCgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0RGF0YShuc0lTdXBwb3J0cyAqICphRGF0YSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4v ZGlzdC9pbmNsdWRlL3hwY2V4Y2VwdGlvbi5oIiAyCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94 cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRXhjZXB0aW9uIDogcHVibGljIG5zSUV4Y2VwdGlv biB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z dCBuc0lJRCBpaWQgPSB7MHhiMmEzNDAxMCwgMHgzOTgzLCAweDExZDMsIHsgMHg5OCwgMHg4OCwg MHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxpemUoY29uc3QgY2hhciAqYU1lc3NhZ2UsIG5zcmVzdWx0 IGFSZXN1bHQsIGNvbnN0IGNoYXIgKmFOYW1lLCBuc0lTdGFja0ZyYW1lICphTG9jYXRpb24sIG5z SVN1cHBvcnRzICphRGF0YSwgbnNJRXhjZXB0aW9uICphSW5uZXIpID0gMDsKCn07CiMgOTcgIi4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRE9NRXhjZXB0aW9u IDogcHVibGljIG5zSVhQQ0V4Y2VwdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4NDI3OTA0MCwgMHg0MGNl LCAweDExZDUsIHsgMHg5MCwgMHhiYiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5 YSB9fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBJTkRFWF9TSVpFX0VSUiA9IDFVIH07CgogIGVu dW0geyBET01TVFJJTkdfU0laRV9FUlIgPSAyVSB9OwoKICBlbnVtIHsgSElFUkFSQ0hZX1JFUVVF U1RfRVJSID0gM1UgfTsKCiAgZW51bSB7IFdST05HX0RPQ1VNRU5UX0VSUiA9IDRVIH07CgogIGVu dW0geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgPSA1VSB9OwoKICBlbnVtIHsgTk9fREFUQV9BTExP V0VEX0VSUiA9IDZVIH07CgogIGVudW0geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgPSA3 VSB9OwoKICBlbnVtIHsgTk9UX0ZPVU5EX0VSUiA9IDhVIH07CgogIGVudW0geyBOT1RfU1VQUE9S VEVEX0VSUiA9IDlVIH07CgogIGVudW0geyBJTlVTRV9BVFRSSUJVVEVfRVJSID0gMTBVIH07Cgog IGVudW0geyBJTlZBTElEX1NUQVRFX0VSUiA9IDExVSB9OwoKICBlbnVtIHsgU1lOVEFYX0VSUiA9 IDEyVSB9OwoKICBlbnVtIHsgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSID0gMTNVIH07CgogIGVu dW0geyBOQU1FU1BBQ0VfRVJSID0gMTRVIH07CgogIGVudW0geyBJTlZBTElEX0FDQ0VTU19FUlIg PSAxNVUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29kZShQUlVpbnQzMiAqYUNvZGUpID0g MDsKCn07CiMgMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgiIDIKCgoKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjanNpZC5oIiAxCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVk ZS94cGNqc2lkLmgiCmNsYXNzIG5zSUpTSUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk ID0gezB4Yzg2YWUxMzEsIDB4ZDEwMSwgMHgxMWQyLCB7IDB4OTgsIDB4NDEsIDB4MDAsIDB4NjAs IDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0 TnVtYmVyKGNoYXIgKiAqYU51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChu c0lEICogKmFJZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWxpZChQUkJvb2wgKmFW YWxpZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJSlNJRCAqb3RoZXIsIFBS Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0aWFsaXplKGNvbnN0 IGNoYXIgKmlkU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIg KipfcmV0dmFsKSA9IDA7Cgp9OwojIDE2NSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2pzaWQuaCIK Y2xhc3MgbnNJSlNJSUQgOiBwdWJsaWMgbnNJSlNJRCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlMDhkY2RhMCwg MHhkNjUxLCAweDExZDIsIHsgMHg5OCwgMHg0MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgy NCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIyNCAiLi4vLi4vZGlzdC9pbmNsdWRlL3hw Y2pzaWQuaCIKY2xhc3MgbnNJSlNDSUQgOiBwdWJsaWMgbnNJSlNJRCB7CiBwdWJsaWM6CgogIHN0 YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhl M2EyNGE2MCwgMHhkNjUxLCAweDExZDIsIHsgMHg5OCwgMHg0MywgMHgwMCwgMHg2MCwgMHgwOCwg MHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy ZWF0ZUluc3RhbmNlKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRTZXJ2aWNlKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxOSAiLi4v Li4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIgMgojIDQxICIuLi8uLi9kaXN0L2luY2x1 ZGUveHBjY29tcG9uZW50cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0ludGVyZmFjZXMgOiBw dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NGI2MmE2NDAsIDB4ZDI2YywgMHgxMWQy LCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJl dHVybiBpaWQ7fQoKfTsKIyAxMDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgi CmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfQ2xhc3NlcyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHg5NzhmZjUyMCwgMHhkMjZjLCAweDExZDIsIHsgMHg5OCwgMHg0MiwgMHgwMCwg MHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDE2NyAi Li4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50 c19DbGFzc2VzQnlJRCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMzZhOTU5 MCwgMHg0ZDE5LCAweDExZDMsIHsgMHg5OCwgMHg5MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5Niwg MHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIzMCAiLi4vLi4vZGlzdC9pbmNsdWRl L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19SZXN1bHRzIDogcHVibGlj IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7 c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDJmYzIyOWEwLCAweDU4NjAsIDB4MTFkMywgeyAw eDk4LCAweDk5LCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4g aWlkO30KCn07CiMgMjkzICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgpjbGFz cyBuc0lYUENDb21wb25lbnRzX0lEIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw eDc5OTRhNmUwLCAweGUwMjgsIDB4MTFkMywgeyAweDhmLCAweDVkLCAweDAwLCAweDEwLCAweGE0 LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCn07CiMgMzU2ICIuLi8uLi9kaXN0 L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0V4Y2VwdGlv biA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1YmYwMzljMCwgMHhlMDI4LCAw eDExZDMsIHsgMHg4ZiwgMHg1ZCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9 fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDQxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVu dHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19Db25zdHJ1Y3RvciA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHg4ODY1NTY0MCwgMHhlMDI4LCAweDExZDMsIHsgMHg4ZiwgMHg1 ZCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9Cgp9 OwojIDQ4MiAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBD Q29uc3RydWN0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzgxNGNhMjAs IDB4ZTBkYywgMHgxMWQzLCB7IDB4OGYsIDB4NWYsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4 M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lE KG5zSUpTQ0lEICogKmFDbGFzc0lEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVy ZmFjZUlEKG5zSUpTSUlEICogKmFJbnRlcmZhY2VJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRJbml0aWFsaXplcihjaGFyICogKmFJbml0aWFsaXplcikgPSAwOwoKfTsKIyA1NzcgIi4u Ly4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHMg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NDI2MjRmODAsIDB4ZDI2YywgMHgx MWQyLCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnRlcmZhY2VzKG5zSVhQQ0Nv bXBvbmVudHNfSW50ZXJmYWNlcyAqICphSW50ZXJmYWNlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRDbGFzc2VzKG5zSVhQQ0NvbXBvbmVudHNfQ2xhc3NlcyAqICphQ2xhc3NlcykgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc2VzQnlJRChuc0lYUENDb21wb25lbnRzX0Ns YXNzZXNCeUlEICogKmFDbGFzc2VzQnlJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT dGFjayhuc0lTdGFja0ZyYW1lICogKmFTdGFjaykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH ZXRSZXN1bHRzKG5zSVhQQ0NvbXBvbmVudHNfUmVzdWx0cyAqICphUmVzdWx0cykgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRNYW5hZ2VyKG5zSUNvbXBvbmVudE1hbmFnZXIgKiAqYU1hbmFn ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUQobnNJWFBDQ29tcG9uZW50c19JRCAq ICphSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uKG5zSVhQQ0NvbXBv bmVudHNfRXhjZXB0aW9uICogKmFFeGNlcHRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0Q29uc3RydWN0b3IobnNJWFBDQ29tcG9uZW50c19Db25zdHJ1Y3RvciAqICphQ29uc3RydWN0 b3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTdWNjZXNzQ29kZShuc3Jlc3VsdCByZXN1 bHQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVhQQ29ubmVjdC5oIiAyCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW50ZXJmYWNlSW5mby5oIiAxCiMgMTcgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvLmgiCmNsYXNzIG5zWFBUTWV0aG9kSW5mbzsK Y2xhc3MgbnNYUFRDb25zdGFudDsKY2xhc3MgbnNYUFRQYXJhbUluZm87CmNsYXNzIG5zWFBUVHlw ZTsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUludGVyZmFjZUluZm8uaCIKY2xhc3MgbnNJ SW50ZXJmYWNlSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyMTVkYmUw NCwgMHg5NGE3LCAweDExZDIsIHsgMHhiYSwgMHg1OCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg MHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUo Y2hhciAqICphTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSUQobnNJSUQgKiAq YUlJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NjcmlwdGFibGUoUFJCb29sICpfcmV0 dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudChuc0lJbnRlcmZhY2VJbmZv ICogKmFQYXJlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0aG9kQ291bnQo UFJVaW50MTYgKmFNZXRob2RDb3VudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb25z dGFudENvdW50KFBSVWludDE2ICphQ29uc3RhbnRDb3VudCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldE1ldGhvZEluZm8oUFJVaW50MTYgaW5kZXgsIGNvbnN0IG5zWFBUTWV0aG9k SW5mbyAqICppbmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZEluZm9Gb3JO YW1lKGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsIFBSVWludDE2ICppbmRleCwgY29uc3QgbnNYUFRN ZXRob2RJbmZvICogKmluZm8pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29uc3RhbnQo UFJVaW50MTYgaW5kZXgsIGNvbnN0IG5zWFBUQ29uc3RhbnQgKiAqY29uc3RhbnQpID0gMDsKCgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZm9Gb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRl eCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgbnNJSW50ZXJmYWNlSW5mbyAqKl9yZXR2 YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUlERm9yUGFyYW0oUFJVaW50MTYgbWV0 aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIG5zSUlEICogKl9yZXR2YWwp ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZUZvclBhcmFtKFBSVWludDE2IG1l dGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQxNiBkaW1lbnNp b24sIG5zWFBUVHlwZSAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaXpl SXNBcmdOdW1iZXJGb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJh bUluZm8gKiBwYXJhbSwgUFJVaW50MTYgZGltZW5zaW9uLCBQUlVpbnQ4ICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aElzQXJnTnVtYmVyRm9yUGFyYW0oUFJVaW50 MTYgbWV0aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIFBSVWludDE2IGRp bWVuc2lvbiwgUFJVaW50OCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ bnRlcmZhY2VJc0FyZ051bWJlckZvclBhcmFtKFBSVWludDE2IG1ldGhvZEluZGV4LCBjb25zdCBu c1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQ4ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IElzSUlEKGNvbnN0IG5zSUlEICogSUlELCBQUkJvb2wgKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVNoYXJlZChjb25zdCBjaGFyICoqbmFtZSkgPSAw OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSURTaGFyZWQoY29uc3QgbnNJSUQgKiAqaWlkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRnVuY3Rpb24oUFJCb29sICpfcmV0dmFsKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0FuY2VzdG9yKGNvbnN0IG5zSUlEICogaWlkLCBQUkJv b2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5l Y3QuaCIgMgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvTWFuYWdl ci5oIiAxCiMgMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvTWFuYWdlci5o IgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvTWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ RCBpaWQgPSB7MHg4YjE2MTkwMCwgMHhiZTJiLCAweDExZDIsIHsgMHg5OCwgMHgzMSwgMHgwMCwg MHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEdldEluZm9Gb3JJSUQoY29uc3QgbnNJSUQgKiBpaWQsIG5zSUludGVyZmFjZUlu Zm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZm9Gb3JOYW1lKGNv bnN0IGNoYXIgKm5hbWUsIG5zSUludGVyZmFjZUluZm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldElJREZvck5hbWUoY29uc3QgY2hhciAqbmFtZSwgbnNJSUQgKiAqX3Jl dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lRm9ySUlEKGNvbnN0IG5zSUlE ICogaWlkLCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh dGVJbnRlcmZhY2VzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z cmVzdWx0IEF1dG9SZWdpc3RlckludGVyZmFjZXModm9pZCkgPSAwOwoKfTsKIyAzNSAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSUV4Y2VwdGlvblNlcnZpY2UuaCIgMQojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXhj ZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25Qcm92aWRlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc3NzQ0YywgMHhjMWQyLCAweDQ3ZjIsIHsgMHg4Yiwg MHhjYywgMHhjZSwgMHg3YSwgMHg5ZSwgMHg1YSwgMHg4OCwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9 CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRpb24obnNyZXN1bHQgcmVzdWx0LCBuc0lF eGNlcHRpb24gKipfcmV0dmFsKSA9IDA7Cgp9OwojIDk4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ RXhjZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25NYW5hZ2VyIDogcHVibGljIG5z SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVmYzlkMDBiLCAweDIzMWMsIDB4NGZlYiwgeyAweDg1 LCAweDJjLCAweGFjLCAweDAxLCAweDcyLCAweDY2LCAweGE0LCAweDE1IH19OyByZXR1cm4gaWlk O30KCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnJlbnRFeGNlcHRpb24obnNJRXhjZXB0aW9u ICplcnJvcikgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VycmVudEV4Y2VwdGlvbihu c0lFeGNlcHRpb24gKipfcmV0dmFsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhj ZXB0aW9uRnJvbVByb3ZpZGVyKG5zcmVzdWx0IHJjLCBuc0lFeGNlcHRpb24gKipfcmV0dmFsKSA9 IDA7Cgp9OwojIDE5NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV4Y2VwdGlvblNlcnZpY2UuaCIK Y2xhc3MgbnNJRXhjZXB0aW9uU2VydmljZSA6IHB1YmxpYyBuc0lFeGNlcHRpb25NYW5hZ2VyIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDM1YTg4ZjU0LCAweGYyNjcsIDB4NDQxNCwgeyAweDkyLCAweGE3LCAweDE5 LCAweDFmLCAweDY0LCAweDU0LCAweGFiLCAweDUyIH19OyByZXR1cm4gaWlkO30KCgoKICB2aXJ0 dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRFeGNlcHRpb25NYW5hZ2VyKG5zSUV4Y2VwdGlvbk1hbmFn ZXIgKiAqYUN1cnJlbnRFeGNlcHRpb25NYW5hZ2VyKSA9IDA7CiMgMjEyICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJRXhjZXB0aW9uU2VydmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJF eGNlcHRpb25Qcm92aWRlcihuc0lFeGNlcHRpb25Qcm92aWRlciAqcHJvdmlkZXIsIFBSVWludDMy IG1vZHVsZUNvZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlckV4Y2VwdGlv blByb3ZpZGVyKG5zSUV4Y2VwdGlvblByb3ZpZGVyICpwcm92aWRlciwgUFJVaW50MzIgbW9kdWxl Q29kZSkgPSAwOwoKfTsKIyAzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIiAy CgoKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIgMQojIDQ2ICIuLi8uLi9k aXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0 aW5mby5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiCiMgMSAiL3Vzci9z cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI5ICIuLi8u Li9kaXN0L2luY2x1ZGUveHB0aW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9z dHJ1Y3QuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS94cHRfYXJlbmEuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUv eHB0X2FyZW5hLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By L3BydHlwZXMuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X2FyZW5hLmgiIDIKIyAx ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9h c3NlcnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsK CgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBf X2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3Jf ZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQg KGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAzMiAi Li4vLi4vZGlzdC9pbmNsdWRlL3hwdF9hcmVuYS5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAxIDMKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9hcmVuYS5oIiAyCiMgNTYgIi4u Ly4uL2Rpc3QvaW5jbHVkZS94cHRfYXJlbmEuaCIKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBz dHJ1Y3QgWFBUQXJlbmEgWFBUQXJlbmE7CgpYUFRBcmVuYSAqClhQVF9OZXdBcmVuYShQUlVpbnQz MiBibG9ja19zaXplLCBzaXplX3QgYWxpZ25tZW50LCBjb25zdCBjaGFyKiBuYW1lKTsKCnZvaWQK WFBUX0Rlc3Ryb3lBcmVuYShYUFRBcmVuYSAqYXJlbmEpOwoKdm9pZApYUFRfRHVtcFN0YXRzKFhQ VEFyZW5hICphcmVuYSk7Cgp2b2lkICoKWFBUX0FyZW5hTWFsbG9jKFhQVEFyZW5hICphcmVuYSwg c2l6ZV90IHNpemUpOwoKY2hhciAqClhQVF9BcmVuYVN0ckR1cChYUFRBcmVuYSAqYXJlbmEsIGNv bnN0IGNoYXIgKiBzKTsKCnZvaWQKWFBUX05vdGlmeURvbmVMb2FkaW5nKFhQVEFyZW5hICphcmVu YSk7Cgp2b2lkClhQVF9BcmVuYUZyZWUoWFBUQXJlbmEgKmFyZW5hLCB2b2lkKiBibG9jayk7CiMg MTExICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X2FyZW5hLmgiCn0KIyAzMiAiLi4vLi4vZGlzdC9p bmNsdWRlL3hwdF9zdHJ1Y3QuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDYgIi4uLy4uL2Rpc3QvaW5j bHVkZS94cHRfc3RydWN0LmgiCnR5cGVkZWYgc3RydWN0IFhQVEhlYWRlciBYUFRIZWFkZXI7CnR5 cGVkZWYgc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IFhQVEludGVyZmFjZURpcmVj dG9yeUVudHJ5Owp0eXBlZGVmIHN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIFhQVEludGVy ZmFjZURlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVENvbnN0RGVzY3JpcHRvciBYUFRDb25z dERlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVE1ldGhvZERlc2NyaXB0b3IgWFBUTWV0aG9k RGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUUGFyYW1EZXNjcmlwdG9yIFhQVFBhcmFtRGVz Y3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUVHlwZURlc2NyaXB0b3IgWFBUVHlwZURlc2NyaXB0 b3I7CnR5cGVkZWYgc3RydWN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IFhQVFR5cGVEZXNjcmlw dG9yUHJlZml4Owp0eXBlZGVmIHN0cnVjdCBYUFRTdHJpbmcgWFBUU3RyaW5nOwp0eXBlZGVmIHN0 cnVjdCBYUFRBbm5vdGF0aW9uIFhQVEFubm90YXRpb247CiMgODkgIi4uLy4uL2Rpc3QvaW5jbHVk ZS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRIZWFkZXIgewogICAgUFJVaW50OCBtYWdpY1sxNl07 CiAgICBQUlVpbnQ4IG1ham9yX3ZlcnNpb247CiAgICBQUlVpbnQ4IG1pbm9yX3ZlcnNpb247CiAg ICBQUlVpbnQxNiBudW1faW50ZXJmYWNlczsKICAgIFBSVWludDMyIGZpbGVfbGVuZ3RoOwogICAg WFBUSW50ZXJmYWNlRGlyZWN0b3J5RW50cnkgKmludGVyZmFjZV9kaXJlY3Rvcnk7CiAgICBQUlVp bnQzMiBkYXRhX3Bvb2w7CiAgICBYUFRBbm5vdGF0aW9uICphbm5vdGF0aW9uczsKfTsKIyAxMTkg Ii4uLy4uL2Rpc3QvaW5jbHVkZS94cHRfc3RydWN0LmgiCmV4dGVybiBYUFRIZWFkZXIgKgpYUFRf TmV3SGVhZGVyKFhQVEFyZW5hICphcmVuYSwgUFJVaW50MTYgbnVtX2ludGVyZmFjZXMpOwoKZXh0 ZXJuIHZvaWQKWFBUX0ZyZWVIZWFkZXIoWFBUQXJlbmEgKmFyZW5hLCBYUFRIZWFkZXIqIGFIZWFk ZXIpOwoKCmV4dGVybiBQUlVpbnQzMgpYUFRfU2l6ZU9mSGVhZGVyKFhQVEhlYWRlciAqaGVhZGVy KTsKCgpleHRlcm4gUFJVaW50MzIKWFBUX1NpemVPZkhlYWRlckJsb2NrKFhQVEhlYWRlciAqaGVh ZGVyKTsKCgoKCgoKCnN0cnVjdCBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeSB7CiAgICBuc0lE IGlpZDsKICAgIGNoYXIgKm5hbWU7CiAgICBjaGFyICpuYW1lX3NwYWNlOwogICAgWFBUSW50ZXJm YWNlRGVzY3JpcHRvciAqaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CgoKCgoKfTsKCmV4dGVybiBQUkJv b2wKWFBUX0ZpbGxJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeShYUFRBcmVuYSAqYXJlbmEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBUSW50ZXJmYWNlRGlyZWN0b3J5RW50cnkgKmlk ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEICppaWQsIGNoYXIgKm5hbWUs IGNoYXIgKm5hbWVfc3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBUSW50 ZXJmYWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcik7CgpleHRlcm4gdm9pZApYUFRfRGVzdHJveUlu dGVyZmFjZURpcmVjdG9yeUVudHJ5KFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeSogaWRlKTsKCgoKCgpz dHJ1Y3QgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciB7CiAgICBQUlVpbnQxNiBwYXJlbnRfaW50ZXJm YWNlOwogICAgUFJVaW50MTYgbnVtX21ldGhvZHM7CiAgICBYUFRNZXRob2REZXNjcmlwdG9yICpt ZXRob2RfZGVzY3JpcHRvcnM7CiAgICBQUlVpbnQxNiBudW1fY29uc3RhbnRzOwogICAgWFBUQ29u c3REZXNjcmlwdG9yICpjb25zdF9kZXNjcmlwdG9yczsKICAgIFBSVWludDggZmxhZ3M7CiMgMTg5 ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgogICAgWFBUVHlwZURlc2NyaXB0b3Ig KmFkZGl0aW9uYWxfdHlwZXM7CiAgICBQUlVpbnQxNiBudW1fYWRkaXRpb25hbF90eXBlczsKfTsK IyAyMDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wKWFBU X0dldEludGVyZmFjZUluZGV4QnlOYW1lKFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5ICppZGVf YmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQxNiBudW1faW50ZXJmYWNl cywgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2ICppbmRl eHApOwoKZXh0ZXJuIFhQVEludGVyZmFjZURlc2NyaXB0b3IgKgpYUFRfTmV3SW50ZXJmYWNlRGVz Y3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu dDE2IHBhcmVudF9pbnRlcmZhY2UsIFBSVWludDE2IG51bV9tZXRob2RzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBQUlVpbnQxNiBudW1fY29uc3RhbnRzLCBQUlVpbnQ4IGZsYWdzKTsKCmV4 dGVybiB2b2lkClhQVF9GcmVlSW50ZXJmYWNlRGVzY3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsIFhQ VEludGVyZmFjZURlc2NyaXB0b3IqIGlkKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURl c2NyaXB0b3JBZGRUeXBlcyhYUFRBcmVuYSAqYXJlbmEsIFhQVEludGVyZmFjZURlc2NyaXB0b3Ig KmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2IG51bSk7CgpleHRl cm4gUFJCb29sClhQVF9JbnRlcmZhY2VEZXNjcmlwdG9yQWRkTWV0aG9kcyhYUFRBcmVuYSAqYXJl bmEsIFhQVEludGVyZmFjZURlc2NyaXB0b3IgKmlkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUFJVaW50MTYgbnVtKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURlc2Ny aXB0b3JBZGRDb25zdHMoWFBUQXJlbmEgKmFyZW5hLCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yICpp ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MTYgbnVtKTsKCgoKCgpz dHJ1Y3QgWFBUU3RyaW5nIHsKICAgIFBSVWludDE2IGxlbmd0aDsKICAgIGNoYXIgKmJ5dGVzOwp9 OwoKZXh0ZXJuIFhQVFN0cmluZyAqClhQVF9OZXdTdHJpbmcoWFBUQXJlbmEgKmFyZW5hLCBQUlVp bnQxNiBsZW5ndGgsIGNoYXIgKmJ5dGVzKTsKCmV4dGVybiBYUFRTdHJpbmcgKgpYUFRfTmV3U3Ry aW5nWihYUFRBcmVuYSAqYXJlbmEsIGNoYXIgKmJ5dGVzKTsKIyAyNjAgIi4uLy4uL2Rpc3QvaW5j bHVkZS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRUeXBlRGVzY3JpcHRvclByZWZpeCB7CiAgICBQ UlVpbnQ4IGZsYWdzOwp9OwojIDI4MCAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9zdHJ1Y3QuaCIK ZW51bSBYUFRUeXBlRGVzY3JpcHRvclRhZ3MgewogICAgVERfSU5UOCA9IDAsCiAgICBURF9JTlQx NiA9IDEsCiAgICBURF9JTlQzMiA9IDIsCiAgICBURF9JTlQ2NCA9IDMsCiAgICBURF9VSU5UOCA9 IDQsCiAgICBURF9VSU5UMTYgPSA1LAogICAgVERfVUlOVDMyID0gNiwKICAgIFREX1VJTlQ2NCA9 IDcsCiAgICBURF9GTE9BVCA9IDgsCiAgICBURF9ET1VCTEUgPSA5LAogICAgVERfQk9PTCA9IDEw LAogICAgVERfQ0hBUiA9IDExLAogICAgVERfV0NIQVIgPSAxMiwKICAgIFREX1ZPSUQgPSAxMywK ICAgIFREX1BOU0lJRCA9IDE0LAogICAgVERfRE9NU1RSSU5HID0gMTUsCiAgICBURF9QU1RSSU5H ID0gMTYsCiAgICBURF9QV1NUUklORyA9IDE3LAogICAgVERfSU5URVJGQUNFX1RZUEUgPSAxOCwK ICAgIFREX0lOVEVSRkFDRV9JU19UWVBFID0gMTksCiAgICBURF9BUlJBWSA9IDIwLAogICAgVERf UFNUUklOR19TSVpFX0lTID0gMjEsCiAgICBURF9QV1NUUklOR19TSVpFX0lTID0gMjIKfTsKCnN0 cnVjdCBYUFRUeXBlRGVzY3JpcHRvciB7CiAgICBYUFRUeXBlRGVzY3JpcHRvclByZWZpeCBwcmVm aXg7CiAgICBQUlVpbnQ4IGFyZ251bTsKICAgIFBSVWludDggYXJnbnVtMjsKICAgIHVuaW9uIHsK ICAgICAgICBQUlVpbnQxNiBpZmFjZTsKICAgICAgICBQUlVpbnQxNiBhZGRpdGlvbmFsX3R5cGU7 CiAgICB9IHR5cGU7Cn07CiMgMzM5ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgp1 bmlvbiBYUFRDb25zdFZhbHVlIHsKICAgIFBSSW50OCBpODsKICAgIFBSVWludDggdWk4OwogICAg UFJJbnQxNiBpMTY7CiAgICBQUlVpbnQxNiB1aTE2OwogICAgUFJJbnQzMiBpMzI7CiAgICBQUlVp bnQzMiB1aTMyOwogICAgUFJJbnQ2NCBpNjQ7CiAgICBQUlVpbnQ2NCB1aTY0OwogICAgZmxvYXQg Zmx0OwogICAgZG91YmxlIGRibDsKICAgIFBSQm9vbCBidWw7CiAgICBjaGFyIGNoOwogICAgUFJV aW50MTYgd2NoOwogICAgbnNJRCAqaWlkOwogICAgWFBUU3RyaW5nICpzdHJpbmc7CiAgICBjaGFy ICpzdHI7CiAgICBQUlVpbnQxNiAqd3N0cjsKfTsKCnN0cnVjdCBYUFRDb25zdERlc2NyaXB0b3Ig ewogICAgY2hhciAqbmFtZTsKICAgIFhQVFR5cGVEZXNjcmlwdG9yIHR5cGU7CiAgICB1bmlvbiBY UFRDb25zdFZhbHVlIHZhbHVlOwp9OwoKCgoKCnN0cnVjdCBYUFRQYXJhbURlc2NyaXB0b3Igewog ICAgUFJVaW50OCBmbGFnczsKICAgIFhQVFR5cGVEZXNjcmlwdG9yIHR5cGU7Cn07CiMgMzkyICIu Li8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpleHRlcm4gUFJCb29sClhQVF9GaWxsUGFy YW1EZXNjcmlwdG9yKFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAgICAgICAgWFBU UGFyYW1EZXNjcmlwdG9yICpwZCwgUFJVaW50OCBmbGFncywKICAgICAgICAgICAgICAgICAgICAg ICAgWFBUVHlwZURlc2NyaXB0b3IgKnR5cGUpOwoKCgoKCnN0cnVjdCBYUFRNZXRob2REZXNjcmlw dG9yIHsKICAgIFBSVWludDggZmxhZ3M7CiAgICBjaGFyICpuYW1lOwogICAgUFJVaW50OCBudW1f YXJnczsKICAgIFhQVFBhcmFtRGVzY3JpcHRvciAqcGFyYW1zOwogICAgWFBUUGFyYW1EZXNjcmlw dG9yICpyZXN1bHQ7Cn07CiMgNDIzICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpl eHRlcm4gUFJCb29sClhQVF9GaWxsTWV0aG9kRGVzY3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsCiAg ICAgICAgICAgICAgICAgICAgICAgICBYUFRNZXRob2REZXNjcmlwdG9yICptZXRoLCBQUlVpbnQ4 IGZsYWdzLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBudW1f YXJncyk7CiMgNDQ3ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpzdHJ1Y3QgWFBU QW5ub3RhdGlvbiB7CiAgICBYUFRBbm5vdGF0aW9uICpuZXh0OwogICAgUFJVaW50OCBmbGFnczsK CiAgICBYUFRTdHJpbmcgKmNyZWF0b3I7CiAgICBYUFRTdHJpbmcgKnByaXZhdGVfZGF0YTsKfTsK CgoKCgoKZXh0ZXJuIFhQVEFubm90YXRpb24gKgpYUFRfTmV3QW5ub3RhdGlvbihYUFRBcmVuYSAq YXJlbmEsIFBSVWludDggZmxhZ3MsIFhQVFN0cmluZyAqY3JlYXRvciwKICAgICAgICAgICAgICAg ICAgWFBUU3RyaW5nICpwcml2YXRlX2RhdGEpOwoKfQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUv eHB0aW5mby5oIiAyCiMgNTkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiCmNsYXNzIG5z SUludGVyZmFjZUluZm9NYW5hZ2VyOwpleHRlcm4gIkMiIHsKCm5zSUludGVyZmFjZUluZm9NYW5h Z2VyKgpYUFRJX0dldEludGVyZmFjZUluZm9NYW5hZ2VyKCk7CgoKdm9pZApYUFRJX0ZyZWVJbnRl cmZhY2VJbmZvTWFuYWdlcigpOwp9CgoKCgoKCgpjbGFzcyBuc1hQVFR5cGUgOiBwdWJsaWMgWFBU VHlwZURlc2NyaXB0b3JQcmVmaXgKewoKcHVibGljOgogICAgbnNYUFRUeXBlKCkKICAgICAgICB7 fQogICAgbnNYUFRUeXBlKGNvbnN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4JiBwcmVmaXgpCiAg ICAgICAgeyooWFBUVHlwZURlc2NyaXB0b3JQcmVmaXgqKXRoaXMgPSBwcmVmaXg7fQoKICAgIG5z WFBUVHlwZShjb25zdCB1aW50OCYgcHJlZml4KQogICAgICAgIHsqKHVpbnQ4Kil0aGlzID0gcHJl Zml4O30KCiAgICBuc1hQVFR5cGUmIG9wZXJhdG9yPSh1aW50OCB2YWwpCiAgICAgICAge2ZsYWdz ID0gdmFsOyByZXR1cm4gKnRoaXM7fQoKICAgIG5zWFBUVHlwZSYgb3BlcmF0b3I9KGNvbnN0IG5z WFBUVHlwZSYgb3RoZXIpCiAgICAgICAge2ZsYWdzID0gb3RoZXIuZmxhZ3M7IHJldHVybiAqdGhp czt9CgogICAgb3BlcmF0b3IgdWludDgoKSBjb25zdAogICAgICAgIHtyZXR1cm4gZmxhZ3M7fQoK ICAgIFBSQm9vbCBJc1BvaW50ZXIoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgKChm bGFncyAmIDB4ODApKTt9CgogICAgUFJCb29sIElzVW5pcXVlUG9pbnRlcigpIGNvbnN0CiAgICAg ICAge3JldHVybiAoUFJCb29sKSAoKGZsYWdzICYgMHg0MCkpO30KCiAgICBQUkJvb2wgSXNSZWZl cmVuY2UoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgKChmbGFncyAmIDB4MjApKTt9 CgogICAgUFJCb29sIElzQXJpdGhtZXRpYygpIGNvbnN0CiAgICAgICAge3JldHVybiBmbGFncyA8 PSBUX1dDSEFSO30KCiAgICBQUkJvb2wgSXNJbnRlcmZhY2VQb2ludGVyKCkgY29uc3QKICAgICAg ICB7IHN3aXRjaCAoVGFnUGFydCgpKSB7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGNhc2UgVF9JTlRFUkZBQ0U6CiAgICAgICAgICAg ICBjYXNlIFRfSU5URVJGQUNFX0lTOgogICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAg ICB9CiAgICAgICAgfQoKICAgIFBSQm9vbCBJc0FycmF5KCkgY29uc3QKICAgICAgICB7cmV0dXJu IChQUkJvb2wpIFRhZ1BhcnQoKSA9PSBUX0FSUkFZO30KCgoKCiAgICBQUkJvb2wgSXNEZXBlbmRl bnQoKSBjb25zdAogICAgICAgIHsgc3dpdGNoIChUYWdQYXJ0KCkpIHsKICAgICAgICAgICAgIGRl ZmF1bHQ6CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgY2FzZSBUX0lOVEVS RkFDRV9JUzoKICAgICAgICAgICAgIGNhc2UgVERfQVJSQVk6CiAgICAgICAgICAgICBjYXNlIFRf UFNUUklOR19TSVpFX0lTOgogICAgICAgICAgICAgY2FzZSBUX1BXU1RSSU5HX1NJWkVfSVM6CiAg ICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgdWludDgg VGFnUGFydCgpIGNvbnN0CiAgICAgICAge3JldHVybiAodWludDgpIChmbGFncyAmICh+MHhlMCkp O30KCiAgICBlbnVtCiAgICB7CiAgICAgICAgVF9JOCA9IFREX0lOVDggLAogICAgICAgIFRfSTE2 ID0gVERfSU5UMTYgLAogICAgICAgIFRfSTMyID0gVERfSU5UMzIgLAogICAgICAgIFRfSTY0ID0g VERfSU5UNjQgLAogICAgICAgIFRfVTggPSBURF9VSU5UOCAsCiAgICAgICAgVF9VMTYgPSBURF9V SU5UMTYgLAogICAgICAgIFRfVTMyID0gVERfVUlOVDMyICwKICAgICAgICBUX1U2NCA9IFREX1VJ TlQ2NCAsCiAgICAgICAgVF9GTE9BVCA9IFREX0ZMT0FUICwKICAgICAgICBUX0RPVUJMRSA9IFRE X0RPVUJMRSAsCiAgICAgICAgVF9CT09MID0gVERfQk9PTCAsCiAgICAgICAgVF9DSEFSID0gVERf Q0hBUiAsCiAgICAgICAgVF9XQ0hBUiA9IFREX1dDSEFSICwKICAgICAgICBUX1ZPSUQgPSBURF9W T0lEICwKICAgICAgICBUX0lJRCA9IFREX1BOU0lJRCAsCiAgICAgICAgVF9ET01TVFJJTkcgPSBU RF9ET01TVFJJTkcgLAogICAgICAgIFRfQ0hBUl9TVFIgPSBURF9QU1RSSU5HICwKICAgICAgICBU X1dDSEFSX1NUUiA9IFREX1BXU1RSSU5HICwKICAgICAgICBUX0lOVEVSRkFDRSA9IFREX0lOVEVS RkFDRV9UWVBFICwKICAgICAgICBUX0lOVEVSRkFDRV9JUyA9IFREX0lOVEVSRkFDRV9JU19UWVBF LAogICAgICAgIFRfQVJSQVkgPSBURF9BUlJBWSAsCiAgICAgICAgVF9QU1RSSU5HX1NJWkVfSVMg PSBURF9QU1RSSU5HX1NJWkVfSVMgLAogICAgICAgIFRfUFdTVFJJTkdfU0laRV9JUyA9IFREX1BX U1RSSU5HX1NJWkVfSVMKICAgIH07Cgp9OwoKY2xhc3MgbnNYUFRQYXJhbUluZm8gOiBwdWJsaWMg WFBUUGFyYW1EZXNjcmlwdG9yCnsKCnB1YmxpYzoKICAgIG5zWFBUUGFyYW1JbmZvKGNvbnN0IFhQ VFBhcmFtRGVzY3JpcHRvciYgZGVzYykKICAgICAgICB7KihYUFRQYXJhbURlc2NyaXB0b3IqKXRo aXMgPSBkZXNjO30KCgogICAgUFJCb29sIElzSW4oKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFn cyAmIDB4ODApKTt9CiAgICBQUkJvb2wgSXNPdXQoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFn cyAmIDB4NDApKTt9CiAgICBQUkJvb2wgSXNSZXR2YWwoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChm bGFncyAmIDB4MjApKTt9CiAgICBQUkJvb2wgSXNTaGFyZWQoKSBjb25zdCB7cmV0dXJuIDAgIT0g KChmbGFncyAmIDB4MTApKTt9CiAgICBQUkJvb2wgSXNEaXBwZXIoKSBjb25zdCB7cmV0dXJuIDAg IT0gKChmbGFncyAmIDB4MDgpKTt9CiAgICBjb25zdCBuc1hQVFR5cGUgR2V0VHlwZSgpIGNvbnN0 IHtyZXR1cm4gdHlwZS5wcmVmaXg7fQoKCgpwcml2YXRlOgogICAgbnNYUFRQYXJhbUluZm8oKTsK Cn07CgpjbGFzcyBuc1hQVE1ldGhvZEluZm8gOiBwdWJsaWMgWFBUTWV0aG9kRGVzY3JpcHRvcgp7 CgpwdWJsaWM6CiAgICBuc1hQVE1ldGhvZEluZm8oY29uc3QgWFBUTWV0aG9kRGVzY3JpcHRvciYg ZGVzYykKICAgICAgICB7KihYUFRNZXRob2REZXNjcmlwdG9yKil0aGlzID0gZGVzYzt9CgogICAg UFJCb29sIElzR2V0dGVyKCkgY29uc3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDgwKSApO30K ICAgIFBSQm9vbCBJc1NldHRlcigpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg0MCkg KTt9CiAgICBQUkJvb2wgSXNOb3RYUENPTSgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYg MHgyMCkpO30KICAgIFBSQm9vbCBJc0NvbnN0cnVjdG9yKCkgY29uc3Qge3JldHVybiAwICE9ICgo ZmxhZ3MgJiAweDEwKSApO30KICAgIFBSQm9vbCBJc0hpZGRlbigpIGNvbnN0IHtyZXR1cm4gMCAh PSAoKGZsYWdzICYgMHgwOCkgKTt9CiAgICBjb25zdCBjaGFyKiBHZXROYW1lKCkgY29uc3Qge3Jl dHVybiBuYW1lO30KICAgIHVpbnQ4IEdldFBhcmFtQ291bnQoKSBjb25zdCB7cmV0dXJuIG51bV9h cmdzO30KCiAgICBjb25zdCBuc1hQVFBhcmFtSW5mbyBHZXRQYXJhbSh1aW50OCBpZHgpIGNvbnN0 CiAgICAgICAgewogICAgICAgICAgICBpZiAoIShpZHggPCBHZXRQYXJhbUNvdW50KCkpKSBuc0Rl YnVnOjpQcmVDb25kaXRpb24oImJhZCBhcmciLCAiaWR4IDwgR2V0UGFyYW1Db3VudCgpIiwgIi4u Ly4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiLCAyMDgpOwogICAgICAgICAgICByZXR1cm4gcGFy YW1zW2lkeF07CiAgICAgICAgfQogICAgY29uc3QgbnNYUFRQYXJhbUluZm8gR2V0UmVzdWx0KCkg Y29uc3QKICAgICAgICB7cmV0dXJuICpyZXN1bHQ7fQpwcml2YXRlOgogICAgbnNYUFRNZXRob2RJ bmZvKCk7Cgp9OwoKCgpzdHJ1Y3QgbnNYUFRDTWluaVZhcmlhbnQ7CgpjbGFzcyBuc1hQVENvbnN0 YW50IDogcHVibGljIFhQVENvbnN0RGVzY3JpcHRvcgp7CgpwdWJsaWM6CiAgICBuc1hQVENvbnN0 YW50KGNvbnN0IFhQVENvbnN0RGVzY3JpcHRvciYgZGVzYykKICAgICAgICB7KihYUFRDb25zdERl c2NyaXB0b3IqKXRoaXMgPSBkZXNjO30KCiAgICBjb25zdCBjaGFyKiBHZXROYW1lKCkgY29uc3QK ICAgICAgICB7cmV0dXJuIG5hbWU7fQoKICAgIGNvbnN0IG5zWFBUVHlwZSBHZXRUeXBlKCkgY29u c3QKICAgICAgICB7cmV0dXJuIHR5cGUucHJlZml4O30KCgoKCgogICAgY29uc3QgbnNYUFRDTWlu aVZhcmlhbnQqIEdldFZhbHVlKCkgY29uc3QKICAgICAgICB7cmV0dXJuIChuc1hQVENNaW5pVmFy aWFudCopICZ2YWx1ZTt9CnByaXZhdGU6CiAgICBuc1hQVENvbnN0YW50KCk7Cgp9OwojIDQ3ICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiIDIKIyAxMDYgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZTsKCmNsYXNzIG5zSVhQ Q29ubmVjdDsKCmNsYXNzIG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU7CgpjbGFzcyBuc0lJbnRl cmZhY2VJbmZvOwoKY2xhc3MgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOwojIDEyNSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRl ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4OTE2YTMyMCwgMHhkMTE4LCAw eDExZDMsIHsgMHg4ZiwgMHgzYSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9 fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTT2JqZWN0KEpTT2JqZWN0 ICogKmFKU09iamVjdCkgPSAwOwoKfTsKIyAxOTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENv bm5lY3QuaCIKY2xhc3MgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSA6IHB1YmxpYyBuc0lYUENv bm5lY3RKU09iamVjdEhvbGRlciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0 SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyMTVkYmUwMiwgMHg5NGE3LCAweDEx ZDIsIHsgMHhiYSwgMHg1OCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsg cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hdGl2ZShuc0lTdXBwb3J0cyAq ICphTmF0aXZlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTT2JqZWN0UHJvdG90eXBl KEpTT2JqZWN0ICogKmFKU09iamVjdFByb3RvdHlwZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRYUENvbm5lY3QobnNJWFBDb25uZWN0ICogKmFYUENvbm5lY3QpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgRmluZEludGVyZmFjZVdpdGhNZW1iZXIoanN2YWwgbmFtZUlELCBuc0lJ bnRlcmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kSW50 ZXJmYWNlV2l0aE5hbWUoanN2YWwgbmFtZUlELCBuc0lJbnRlcmZhY2VJbmZvICoqX3JldHZhbCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXAoUFJJbnQxNiBkZXB0aCkgPSAwOwoK fTsKIyAzMjQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBD b25uZWN0V3JhcHBlZEpTIDogcHVibGljIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyIHsKIHB1 YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE IGlpZCA9IHsweGJlZDUyMDMwLCAweGJjYTYsIDB4MTFkMiwgeyAweGJhLCAweDc5LCAweDAwLCAw eDgwLCAweDVmLCAweDhhLCAweDVkLCAweGQ3IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0SW50ZXJmYWNlSW5mbyhuc0lJbnRlcmZhY2VJbmZvICogKmFJbnRlcmZhY2VJ bmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJRChuc0lJRCAqICphSUlEKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRlcHRoKSA9IDA7CgoKICB2 aXJ0dWFsIG5zcmVzdWx0IEFnZ3JlZ2F0ZWRRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCAmIHV1 aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7Cgp9OwojIDQzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwZmE2OGE2MCwgMHg4Mjg5LCAweDExZDMsIHsgMHhiYiwg MHgxYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZShuc0lTdXBwb3J0cyAqICphQ2FsbGVlKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZU1ldGhvZEluZGV4KFBSVWludDE2ICph Q2FsbGVlTWV0aG9kSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVlV3Jh cHBlcihuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICogKmFDYWxsZWVXcmFwcGVyKSA9IDA7CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTQ29udGV4dChKU0NvbnRleHQgKiAqYUpTQ29udGV4dCkg PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmdjKFBSVWludDMyICphQXJnYykgPSAwOwoK CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmd2UHRyKGpzdmFsICogKmFBcmd2UHRyKSA9IDA7CgoK CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldFZhbFB0cihqc3ZhbCAqICphUmV0VmFsUHRyKSA9 IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uV2FzVGhyb3duKFBSQm9v bCAqYUV4Y2VwdGlvbldhc1Rocm93bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RXhjZXB0 aW9uV2FzVGhyb3duKFBSQm9vbCBhRXhjZXB0aW9uV2FzVGhyb3duKSA9IDA7CgoKCgoKCgogIHZp cnR1YWwgbnNyZXN1bHQgR2V0UmV0dXJuVmFsdWVXYXNTZXQoUFJCb29sICphUmV0dXJuVmFsdWVX YXNTZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJldHVyblZhbHVlV2FzU2V0KFBSQm9v bCBhUmV0dXJuVmFsdWVXYXNTZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVl SW50ZXJmYWNlKG5zSUludGVyZmFjZUluZm8gKiAqYUNhbGxlZUludGVyZmFjZSkgPSAwOwoKCiAg dmlydHVhbCBuc3Jlc3VsdCBHZXRDYWxsZWVDbGFzc0luZm8obnNJQ2xhc3NJbmZvICogKmFDYWxs ZWVDbGFzc0luZm8pID0gMDsKCn07CiMgNzI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25u ZWN0LmgiCmNsYXNzIG5zSVhQQ1dyYXBwZWRKU09iamVjdEdldHRlciA6IHB1YmxpYyBuc0lTdXBw b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj b25zdCBuc0lJRCBpaWQgPSB7MHgyNTRiYjJlMCwgMHg2NDM5LCAweDExZDQsIHsgMHg4ZiwgMHhl MCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoK ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5ldmVyQ2FsbGVkKG5zSVN1cHBvcnRzICogKmFOZXZlckNh bGxlZCkgPSAwOwoKfTsKIyA3OTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIK Y2xhc3MgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7 CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu c0lJRCBpaWQgPSB7MHgwMzllZjI2MCwgMHgyYTBkLCAweDExZDUsIHsgMHg5MCwgMHhhNywgMHgw MCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0 dWFsIG5zcmVzdWx0IFRyYW5zbGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFsVGhpcywgbnNJ SW50ZXJmYWNlSW5mbyAqYUludGVyZmFjZUluZm8sIFBSVWludDE2IGFNZXRob2RJbmRleCwgUFJC b29sICphSGlkZUZpcnN0UGFyYW1Gcm9tSlMsIG5zSUlEICogKmFJSURPZlJlc3VsdCwgbnNJU3Vw cG9ydHMgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDg2NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQ Q29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg aWlkID0gezB4ZWZhZTM3YjAsIDB4OTQ2ZCwgMHgxMWQyLCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4 ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKICBzdGF0aWMgY29u c3QgbnNJRCYgR2V0Q0lEKCkge3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHhjYjY1OTNlMCwg MHhmOWIyLCAweDExZDIsIHsgMHhiZCwgMHhkNiwgMHgwLCAweDAsIDB4NjQsIDB4NjUsIDB4NzMs IDB4NzQgfSB9OyByZXR1cm4gY2lkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMo SlNDb250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhR2xvYmFsSlNPYmopID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXNXaXRoTmV3V3JhcHBlZEdsb2JhbChKU0NvbnRl eHQgKiBhSlNDb250ZXh0LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBhSUlE LCBQUkJvb2wgYUNhbGxKU19Jbml0U3RhbmRhcmRDbGFzc2VzLCBuc0lYUENvbm5lY3RKU09iamVj dEhvbGRlciAqKl9yZXR2YWwpID0gMDsKIyA5MTIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENv bm5lY3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdyYXBOYXRpdmUoSlNDb250ZXh0ICogYUpTQ29u dGV4dCwgSlNPYmplY3QgKiBhU2NvcGUsIG5zSVN1cHBvcnRzICphQ09NT2JqLCBjb25zdCBuc0lJ RCAmIGFJSUQsIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyICoqX3JldHZhbCkgPSAwOwojIDkz OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg V3JhcEpTKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpTT2JqZWN0ICogYUpTT2JqLCBjb25zdCBu c0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRXcmFwcGVkTmF0aXZlT2ZKU09iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09i amVjdCAqIGFKU09iaiwgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VjdXJpdHlNYW5hZ2VyRm9ySlNDb250ZXh0KEpTQ29u dGV4dCAqIGFKU0NvbnRleHQsIG5zSVhQQ1NlY3VyaXR5TWFuYWdlciAqYU1hbmFnZXIsIFBSVWlu dDE2IGZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5TWFuYWdlckZv ckpTQ29udGV4dChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBuc0lYUENTZWN1cml0eU1hbmFnZXIg KiphTWFuYWdlciwgUFJVaW50MTYgKmZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTZXREZWZhdWx0U2VjdXJpdHlNYW5hZ2VyKG5zSVhQQ1NlY3VyaXR5TWFuYWdlciAqYU1hbmFn ZXIsIFBSVWludDE2IGZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRT ZWN1cml0eU1hbmFnZXIobnNJWFBDU2VjdXJpdHlNYW5hZ2VyICoqYU1hbmFnZXIsIFBSVWludDE2 ICpmbGFncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTdGFja0ZyYW1lTG9jYXRp b24oUFJVaW50MzIgYUxhbmd1YWdlLCBjb25zdCBjaGFyICphRmlsZW5hbWUsIGNvbnN0IGNoYXIg KmFGdW5jdGlvbk5hbWUsIFBSSW50MzIgYUxpbmVOdW1iZXIsIG5zSVN0YWNrRnJhbWUgKmFDYWxs ZXIsIG5zSVN0YWNrRnJhbWUgKipfcmV0dmFsKSA9IDA7CiMgOTc0ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTeW5jSlNDb250ZXh0cyh2b2lk KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRKU1N0YWNrKG5zSVN0YWNrRnJh bWUgKiAqYUN1cnJlbnRKU1N0YWNrKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJl bnROYXRpdmVDYWxsQ29udGV4dChuc0lYUENOYXRpdmVDYWxsQ29udGV4dCAqICphQ3VycmVudE5h dGl2ZUNhbGxDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlbmRpbmdFeGNl cHRpb24obnNJRXhjZXB0aW9uICogKmFQZW5kaW5nRXhjZXB0aW9uKSA9IDA7CiAgdmlydHVhbCBu c3Jlc3VsdCBTZXRQZW5kaW5nRXhjZXB0aW9uKG5zSUV4Y2VwdGlvbiAqIGFQZW5kaW5nRXhjZXB0 aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRlcHRoKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcE9iamVjdChuc0lTdXBwb3J0cyAqYUNP TU9iaiwgUFJJbnQxNiBkZXB0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXBK U1N0YWNrKFBSQm9vbCBzaG93QXJncywgUFJCb29sIHNob3dMb2NhbHMsIFBSQm9vbCBzaG93VGhp c1Byb3BzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcEV2YWxJbkpTU3RhY2tG cmFtZShQUlVpbnQzMiBhRnJhbWVOdW1iZXIsIGNvbnN0IGNoYXIgKmFTb3VyY2VUZXh0KSA9IDA7 CiMgMTAwNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNy ZXN1bHQgU2V0U2FmZUpTQ29udGV4dEZvckN1cnJlbnRUaHJlYWQoSlNDb250ZXh0ICogY3gpID0g MDsKIyAxMDIzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBu c3Jlc3VsdCBXcmFwSlNBZ2dyZWdhdGVkVG9OYXRpdmUobnNJU3VwcG9ydHMgKmFPdXRlciwgSlND b250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmosIGNvbnN0IG5zSUlEICYgYUlJ RCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdyYXBw ZWROYXRpdmVPZk5hdGl2ZU9iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAq IGFTY29wZSwgbnNJU3VwcG9ydHMgKmFDT01PYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgbnNJWFBD b25uZWN0V3JhcHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg R2V0RnVuY3Rpb25UaGlzVHJhbnNsYXRvcihjb25zdCBuc0lJRCAmIGFJSUQsIG5zSVhQQ0Z1bmN0 aW9uVGhpc1RyYW5zbGF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl dEZ1bmN0aW9uVGhpc1RyYW5zbGF0b3IoY29uc3QgbnNJSUQgJiBhSUlELCBuc0lYUENGdW5jdGlv blRoaXNUcmFuc2xhdG9yICphVHJhbnNsYXRvciwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRv ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYXJlbnRXcmFwcGVkTmF0 aXZlSWZGb3VuZChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwgSlNP YmplY3QgKiBhTmV3UGFyZW50LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgbnNJWFBDb25uZWN0SlNP YmplY3RIb2xkZXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyQWxs V3JhcHBlZE5hdGl2ZVNlY3VyaXR5UG9saWNpZXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRXcmFwcGVkTmF0aXZlUHJvdG90eXBlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpT T2JqZWN0ICogYVNjb3BlLCBuc0lDbGFzc0luZm8gKmFDbGFzc0luZm8sIG5zSVhQQ29ubmVjdEpT T2JqZWN0SG9sZGVyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRl L25zWFBJVHJpZ2dlckluZm8uaCIgMgoKCgp0eXBlZGVmIHN0cnVjdCBYUElUcmlnZ2VyRXZlbnQg ewogICAgUExFdmVudCBlOwogICAgbnNTdHJpbmcgVVJMOwogICAgUFJJbnQzMiBzdGF0dXM7CiAg ICBKU0NvbnRleHQqIGN4OwogICAganN2YWwgZ2xvYmFsOwogICAganN2YWwgY2J2YWw7Cn0gWFBJ VHJpZ2dlckV2ZW50OwoKCgpjbGFzcyBuc1hQSVRyaWdnZXJJdGVtCnsKICBwdWJsaWM6CiAgICBu c1hQSVRyaWdnZXJJdGVtKCBjb25zdCBQUlVuaWNoYXIqIG5hbWUsIGNvbnN0IFBSVW5pY2hhciog VVJMLCBQUkludDMyIGZsYWdzID0gMCk7CiAgICB+bnNYUElUcmlnZ2VySXRlbSgpOwoKICAgIG5z U3RyaW5nIG1OYW1lOwogICAgbnNTdHJpbmcgbVVSTDsKICAgIG5zU3RyaW5nIG1Bcmd1bWVudHM7 CiAgICBQUkludDMyIG1GbGFnczsKCiAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IG1GaWxlOwog ICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBtT3V0U3RyZWFtOwoKICAgIFBSQm9vbCBJc0Zp bGVVUkwoKSB7IHJldHVybiBtVVJMLkVxdWFsc1dpdGhDb252ZXJzaW9uKCJmaWxlOi8iLDAsNik7 IH0KICAgIFBSQm9vbCBJc1JlbGF0aXZlVVJMKCk7CgogIHByaXZhdGU6CgogICAgbnNYUElUcmln Z2VySXRlbSYgb3BlcmF0b3I9KGNvbnN0IG5zWFBJVHJpZ2dlckl0ZW0mIHJocyk7CiAgICBuc1hQ SVRyaWdnZXJJdGVtKGNvbnN0IG5zWFBJVHJpZ2dlckl0ZW0mIHJocyk7Cn07CgoKCmNsYXNzIG5z WFBJVHJpZ2dlckluZm8KewogIHB1YmxpYzoKICAgIG5zWFBJVHJpZ2dlckluZm8oKTsKICAgIH5u c1hQSVRyaWdnZXJJbmZvKCk7CgogICAgdm9pZCBBZGQoIG5zWFBJVHJpZ2dlckl0ZW0gKmFJdGVt ICkKICAgICAgICAgICAgICAgICAgICAgICAgeyBpZiAoIGFJdGVtICkgbUl0ZW1zLkFwcGVuZEVs ZW1lbnQoICh2b2lkKilhSXRlbSApOyB9CgogICAgbnNYUElUcmlnZ2VySXRlbSogR2V0KCBQUlVp bnQzMiBhSW5kZXggKQogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAobnNYUElUcmln Z2VySXRlbSopbUl0ZW1zLkVsZW1lbnRBdChhSW5kZXgpO30KCiAgICB2b2lkIFNhdmVDYWxsYmFj ayggSlNDb250ZXh0ICphQ3gsIGpzdmFsIGFWYWwgKTsKCiAgICBQUlVpbnQzMiBTaXplKCkgeyBy ZXR1cm4gbUl0ZW1zLkNvdW50KCk7IH0KCiAgICB2b2lkIFNlbmRTdGF0dXMoY29uc3QgUFJVbmlj aGFyKiBVUkwsIFBSSW50MzIgc3RhdHVzKTsKCiAgcHJpdmF0ZToKICAgIG5zVm9pZEFycmF5IG1J dGVtczsKICAgIEpTQ29udGV4dCAqbUN4OwogICAgbnNDT01QdHI8bnNJWFBDb25uZWN0SlNPYmpl Y3RIb2xkZXI+IG1HbG9iYWxXcmFwcGVyOwogICAganN2YWwgbUNidmFsOwogICAgUFJUaHJlYWQq IG1UaHJlYWQ7CgoKICAgIG5zWFBJVHJpZ2dlckluZm8mIG9wZXJhdG9yPShjb25zdCBuc1hQSVRy aWdnZXJJbmZvJiByaHMpOwogICAgbnNYUElUcmlnZ2VySW5mbyhjb25zdCBuc1hQSVRyaWdnZXJJ bmZvJiByaHMpOwp9OwojIDMwICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwu aCIgMgoKCgoKCgpjbGFzcyBuc0lET01JbnN0YWxsVHJpZ2dlckdsb2JhbCA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGlj IG5zSUlEIGlpZCA9IHsgMHgxOGMyZjk4NywgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAw eDAwLCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7IH0KICBlbnVt IHsKICAgIE1BSk9SX0RJRkYgPSA0LAogICAgTUlOT1JfRElGRiA9IDMsCiAgICBSRUxfRElGRiA9 IDIsCiAgICBCTERfRElGRiA9IDEsCiAgICBFUVVBTCA9IDAKICB9OwoKICB2aXJ0dWFsIG5zcmVz dWx0IFVwZGF0ZUVuYWJsZWQoUFJCb29sKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0 IEluc3RhbGwobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIG5zWFBJVHJpZ2dl ckluZm8qIGFJbmZvLCBQUkJvb2wqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5z dGFsbENocm9tZShuc0lTY3JpcHRHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUFJVaW50MzIg YVR5cGUsIG5zWFBJVHJpZ2dlckl0ZW0qIGFJdGVtLCBQUkJvb2wqIGFSZXR1cm4pPTA7CgogIHZp cnR1YWwgbnNyZXN1bHQgU3RhcnRTb2Z0d2FyZVVwZGF0ZShuc0lTY3JpcHRHbG9iYWxPYmplY3Qq IGdsb2JhbE9iamVjdCwgY29uc3QgbnNTdHJpbmcmIGFVUkwsIFBSSW50MzIgYUZsYWdzLCBQUkJv b2wqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVZlcnNpb24oY29uc3Qg bnNTdHJpbmcmIGFSZWdOYW1lLCBQUkludDMyIGFNYWpvciwgUFJJbnQzMiBhTWlub3IsIFBSSW50 MzIgYVJlbGVhc2UsIFBSSW50MzIgYUJ1aWxkLCBQUkludDMyKiBhUmV0dXJuKT0wOwogIHZpcnR1 YWwgbnNyZXN1bHQgQ29tcGFyZVZlcnNpb24oY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1lLCBjb25z dCBuc1N0cmluZyYgYVZlcnNpb24sIFBSSW50MzIqIGFSZXR1cm4pPTA7CiAgdmlydHVhbCBuc3Jl c3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIG5zSURPTUluc3Rh bGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik9MDsKCiAgdmlydHVhbCBuc3Jl c3VsdCBHZXRWZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBjb21wb25lbnQsIG5zU3RyaW5nJiB2ZXJz aW9uKT0wOwoKfTsKCmV4dGVybiBuc3Jlc3VsdCBOU19Jbml0SW5zdGFsbFRyaWdnZXJHbG9iYWxD bGFzcyhuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgdm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0 ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdTY3JpcHRJbnN0YWxsVHJpZ2dlckdsb2JhbChuc0lTY3Jp cHRDb250ZXh0ICphQ29udGV4dCwgbnNJU3VwcG9ydHMgKmFTdXBwb3J0cywgbnNJU3VwcG9ydHMg KmFQYXJlbnQsIHZvaWQgKiphUmV0dXJuKTsKIyAxNCAibnNJbnN0YWxsVHJpZ2dlci5oIiAyCiMg MSAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAxCiMgMTUgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgojIDEg Im5zWFBJVHJpZ2dlckluZm8uaCIgMQojIDE2ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKCiMgMSAi Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnRIYW5kbGVyLmgiIDEKIyAxNyAiLi4vLi4vZGlz dC9pbmNsdWRlL25zSUNvbnRlbnRIYW5kbGVyLmgiCmNsYXNzIG5zSVJlcXVlc3Q7CiMgMjcgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50SGFuZGxlci5oIgpjbGFzcyBuc0lDb250ZW50SGFu ZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyZjBmOTI3YSwgMHg4Njc3 LCAweDExZDMsIHsgMHg5OCwgMHg5ZCwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5 YiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUNvbnRlbnQoY29u c3QgY2hhciAqYUNvbnRlbnRUeXBlLCBjb25zdCBjaGFyICphQ29tbWFuZCwgbnNJU3VwcG9ydHMg KmFXaW5kb3dDb250ZXh0LCBuc0lSZXF1ZXN0ICphUmVxdWVzdCkgPSAwOwoKfTsKIyAxOCAibnNJ bnN0YWxsVHJpZ2dlci5oIiAyCiMgMjggIm5zSW5zdGFsbFRyaWdnZXIuaCIKY2xhc3MgbnNJbnN0 YWxsVHJpZ2dlcjogcHVibGljIG5zSVNjcmlwdE9iamVjdE93bmVyLAogICAgICAgICAgICAgICAg ICAgICAgICBwdWJsaWMgbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwsCiAgICAgICAgICAgICAg ICAgICAgICAgIHB1YmxpYyBuc0lDb250ZW50SGFuZGxlcgp7CiAgICBwdWJsaWM6CiAgICAgICAg c3RhdGljIGNvbnN0IG5zSUlEJiBJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MThjMmY5 OGQsIDB4YjA5ZiwgMHgxMWQyLCB7MHhiYywgMHhkZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwg MHgxMywgMHg1M30gfTsgcmV0dXJuIGlpZDsgfQoKICAgICAgICBuc0luc3RhbGxUcmlnZ2VyKCk7 CiAgICAgICAgdmlydHVhbCB+bnNJbnN0YWxsVHJpZ2dlcigpOwoKICAgICAgICBwdWJsaWM6IHZp cnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBh SW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3Jl ZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9t T3duaW5nVGhyZWFkOyBwdWJsaWM6CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVDb250 ZW50KGNvbnN0IGNoYXIgKmFDb250ZW50VHlwZSwgY29uc3QgY2hhciAqYUNvbW1hbmQsIG5zSVN1 cHBvcnRzICphV2luZG93Q29udGV4dCwgbnNJUmVxdWVzdCAqYVJlcXVlc3QpOwoKICAgICAgICB2 aXJ0dWFsIG5zcmVzdWx0IEdldFNjcmlwdE9iamVjdChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4 dCwgdm9pZCoqIGFTY3JpcHRPYmplY3QpOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Ny aXB0T2JqZWN0KHZvaWQqIGFTY3JpcHRPYmplY3QpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IFVwZGF0ZUVuYWJsZWQoUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IEluc3RhbGwobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBhR2xvYmFsT2JqZWN0LCBuc1hQSVRyaWdn ZXJJbmZvICphSW5mbywgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IEluc3RhbGxDaHJvbWUobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBhR2xvYmFsT2JqZWN0LCBQUlVp bnQzMiBhVHlwZSwgbnNYUElUcmlnZ2VySXRlbSogYUl0ZW0sIFBSQm9vbCogYVJldHVybik7CiAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydFNvZnR3YXJlVXBkYXRlKG5zSVNjcmlwdEdsb2Jh bE9iamVjdCogYUdsb2JhbE9iamVjdCwgY29uc3QgbnNTdHJpbmcmIGFVUkwsIFBSSW50MzIgYUZs YWdzLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhcmVW ZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBhUmVnTmFtZSwgUFJJbnQzMiBhTWFqb3IsIFBSSW50MzIg YU1pbm9yLCBQUkludDMyIGFSZWxlYXNlLCBQUkludDMyIGFCdWlsZCwgUFJJbnQzMiogYVJldHVy bik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmlu ZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik7 CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmluZyYg YVJlZ05hbWUsIG5zSURPTUluc3RhbGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVy bik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBj b21wb25lbnQsIG5zU3RyaW5nJiB2ZXJzaW9uKTsKCgogICAgcHJpdmF0ZToKICAgICAgICB2b2lk ICptU2NyaXB0T2JqZWN0Owp9OwojIDUwICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIm5z SW5zdGFsbFZlcnNpb24uaCIgMQojIDUxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIlNj aGVkdWxlZFRhc2tzLmgiIDEKIyAzMSAiU2NoZWR1bGVkVGFza3MuaCIKIyAxICIuLi8uLi9kaXN0 L2luY2x1ZGUvTlNSZWcuaCIgMQojIDMyICJTY2hlZHVsZWRUYXNrcy5oIiAyCgojIDEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDEKIyAzNCAiU2NoZWR1bGVkVGFza3MuaCIgMgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiIDEKIyAzNSAiU2NoZWR1bGVkVGFza3Mu aCIgMgoKZXh0ZXJuICJDIiB7CgpQUkludDMyIERlbGV0ZUZpbGVOb3dPclNjaGVkdWxlKG5zSUZp bGUqIGZpbGVuYW1lKTsKUFJJbnQzMiBSZXBsYWNlRmlsZU5vd09yU2NoZWR1bGUobnNJRmlsZSog dG1wZmlsZSwgbnNJRmlsZSogdGFyZ2V0ICk7ClBSSW50MzIgU2NoZWR1bGVGaWxlRm9yRGVsZXRp b24obnNJRmlsZSogZmlsZW5hbWUpOwpjaGFyKiBHZXRSZWdGaWxlUGF0aCgpOwoKCnZvaWQgUGVy Zm9ybVNjaGVkdWxlZFRhc2tzKEhSRUcgcmVnKTsKCn0KIyA1MiAibnNTb2Z0d2FyZVVwZGF0ZS5j cHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvSW5zdGFsbENsZWFudXBEZWZpbmVzLmgiIDEK IyA1MyAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKCiMgMSAibnNUb3BQcm9ncmVzc05vdGlmaWVy LmgiIDEKIyA1NSAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICJuc0xvZ2dpbmdQcm9ncmVz c05vdGlmaWVyLmgiIDEKIyAzMSAibnNMb2dnaW5nUHJvZ3Jlc3NOb3RpZmllci5oIgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lYUElOb3RpZmllci5oIiAxCiMgMzIgIm5zTG9nZ2luZ1Byb2dy ZXNzTm90aWZpZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJlYW0uaCIg MQojIDg1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3RyZWFtLmgiCiMgMSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zY29yZS5oIiAxCiMgODYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJl YW0uaCIgMgoKCgoKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJpby5oIiAxCiMgOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJlYW0uaCIgMgoKCiMg MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyA5NCAiLi4vLi4vZGlzdC9pbmNs dWRlL25zRmlsZVN0cmVhbS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJl YW0uaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVN0cmVhbS5oIgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lJbnB1dFN0cmVhbS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lGaWxlU3RyZWFtLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT3V0cHV0 U3RyZWFtLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJlYW0uaCIgMgoj IDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAy OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJlYW0uaCIgMgoKY2xhc3MgbnNGaWxlU3Bl YzsKCgoKCgoKCmNsYXNzIG5zSU9wZW5GaWxlCgoKOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJs aWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9 IHsgMHhhNmNmOTBlOCwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAw eDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CiAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBPcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IG5zcHJNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJJbnRuIGFjY2Vzc01vZGUpID0gMDsKCgoKICAgIHZpcnR1YWwgbnNyZXN1 bHQgR2V0SXNPcGVuKFBSQm9vbCogb3V0T3BlbikgPSAwOwoKfTsKCgoKCgoKCmNsYXNzIG5zSVJh bmRvbUFjY2Vzc1N0b3JlCgoKOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgICBzdGF0 aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBl YiwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw eGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlZWsoUFJT ZWVrV2hlbmNlIHdoZW5jZSwgUFJJbnQzMiBvZmZzZXQpID0gMDsKICAgIHZpcnR1YWwgbnNyZXN1 bHQgVGVsbChQUkludG4qIG91dFdoZXJlKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0 QXRFT0YoUFJCb29sKiBvdXRBdEVPRikgPSAwOwogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdEVP RihQUkJvb2wgaW5BdEVPRikgPSAwOwp9OwojIDg2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmls ZVN0cmVhbS5oIgpjbGFzcyBuc0lGaWxlU3BlY0lucHV0U3RyZWFtCgoKCgo6IHB1YmxpYyBuc0lJ bnB1dFN0cmVhbQp7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBz dGF0aWMgbnNJSUQgaWlkID0geyAweGE2Y2Y5MGU2LCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4 MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7IH0K fTsKCgoKCgoKCmNsYXNzIG5zSUZpbGVTcGVjT3V0cHV0U3RyZWFtCgoKCgo6IHB1YmxpYyBuc0lP dXRwdXRTdHJlYW0KewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsg c3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBlNywgMHgxNWIzLCAweDExZDIsIHsweDkzLCAw eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9 Cn07CgoKCgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1R5cGljYWxJbnB1dEZpbGVTdHJlYW0o CiAgICBuc0lTdXBwb3J0cyoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0ZpbGVTcGVjJiBp bkZpbGUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCgoKZXh0 ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdPdXRwdXRDb25zb2xlU3RyZWFtKAogICAgbnNJU3VwcG9y dHMqKiBhU3RyZWFtUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdUeXBpY2Fs T3V0cHV0RmlsZVN0cmVhbSgKICAgIG5zSVN1cHBvcnRzKiogYVN0cmVhbVJlc3VsdCwKICAgIGNv bnN0IG5zRmlsZVNwZWMmIGluRmlsZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3VHlwaWNhbElPRmlsZVN0cmVh bSgKICAgIG5zSVN1cHBvcnRzKiogYVN0cmVhbVJlc3VsdCwKICAgIGNvbnN0IG5zRmlsZVNwZWMm IGluRmlsZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCgoK ZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdJT0ZpbGVTdHJlYW0oCiAgICBuc0lTdXBwb3J0cyoq IGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICBQUkludDMy IG5zcHJNb2RlLAogICAgUFJJbnQzMiBhY2Nlc3NNb2RlKTsKIyA5NSAiLi4vLi4vZGlzdC9pbmNs dWRlL25zRmlsZVN0cmVhbS5oIiAyCgoKY2xhc3MgbnNGaWxlU3BlYzsKY2xhc3MgbnNTdHJpbmc7 CmNsYXNzIG5zSUlucHV0U3RyZWFtOwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CmNsYXNzIG5zSUZp bGVTcGVjOwojIDE0NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVN0cmVhbS5oIgpjbGFzcyBp c3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDE2MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVN0 cmVhbS5oIgpjbGFzcyBuc0lucHV0U3RyZWFtCgoKCgoKewpwdWJsaWM6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dFN0cmVhbShuc0lJbnB1dFN0cmVhbSogaW5T dHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtSW5wdXRTdHJl YW0oZG9fUXVlcnlJbnRlcmZhY2UoaW5TdHJlYW0pKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICwgbUVPRigwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHt9CiAgICB2aXJ0dWFsIH5uc0lucHV0U3RyZWFtKCk7CgogICAgbnNDT01QdHI8bnNJSW5w dXRTdHJlYW0+IEdldElTdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIG1JbnB1dFN0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICBQUkJvb2wgZW9mKCkgY29uc3QgeyByZXR1cm4gZ2V0X2F0X2VvZigpOyB9CiAgICBjaGFy IGdldCgpOwogICAgbnNyZXN1bHQgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh KG1JbnB1dFN0cmVhbSkpIG5zRGVidWc6OkFzc2VydGlvbigibUlucHV0U3RyZWFtIGlzIG51bGwh IiwgIm1JbnB1dFN0cmVhbSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3RyZWFtLmgiLCAx ODMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1JbnB1dFN0 cmVhbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gbUlucHV0U3RyZWFtLT5DbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSSW50MzIgcmVhZCh2b2lkKiBzLCBQUklu dDMyIG4pOwoKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNoYXImIGNoKTsKCgog ICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5w dXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGYoKnRoaXMpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCnByb3RlY3RlZDoKCgoKICAg dmlydHVhbCB2b2lkIHNldF9hdF9lb2YoUFJCb29sIGF0RW5kKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtRU9GID0gYXRFbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICB2aXJ0dWFsIFBSQm9vbCBnZXRfYXRfZW9mKCkgY29uc3QKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBtRU9GOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KcHJpdmF0ZToKCiAgICBuc0lucHV0U3RyZWFtJiBvcGVyYXRvciA+PiAoY2hhciogYnVmKTsK CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXRTdHJlYW0oY29u c3QgbnNJbnB1dFN0cmVhbSYgcmhzKTsKICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yPShjb25z dCBuc0lucHV0U3RyZWFtJiByaHMpOwoKCnByb3RlY3RlZDoKICAgIG5zQ09NUHRyPG5zSUlucHV0 U3RyZWFtPiBtSW5wdXRTdHJlYW07CiAgICBQUkJvb2wgbUVPRjsKfTsKCnR5cGVkZWYgbnNJbnB1 dFN0cmVhbSBuc0Jhc2ljSW5TdHJlYW07CgoKY2xhc3MgbnNPdXRwdXRTdHJlYW0KCgoKCgp7CnB1 YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc091dHB1dFN0cmVh bSgpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNPdXRwdXRTdHJl YW0obnNJT3V0cHV0U3RyZWFtKiBpblN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IG1PdXRwdXRTdHJlYW0oZG9fUXVlcnlJbnRlcmZhY2UoaW5TdHJlYW0pKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fQoKICAgIHZpcnR1YWwg fm5zT3V0cHV0U3RyZWFtKCk7CgogICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBHZXRJU3Ry ZWFtKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtT3V0cHV0U3RyZWFt OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIG5zcmVzdWx0IGNs b3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT3V0cHV0U3RyZWFtKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtT3V0cHV0U3RyZWFt LT5DbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICB2b2lkIHB1 dChjaGFyIGMpOwogICAgUFJJbnQzMiB3cml0ZShjb25zdCB2b2lkKiBzLCBQUkludDMyIG4pOwog ICAgdmlydHVhbCBuc3Jlc3VsdCBmbHVzaCgpOwoKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJh dG9yIDw8IChjb25zdCBjaGFyKiBidWYpOwogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8 IChjaGFyIGNoKTsKICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoc2hvcnQgdmFsKTsK ICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgc2hvcnQgdmFsKTsKICAg IG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobG9uZyB2YWwpOwogICAgbnNPdXRwdXRTdHJl YW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBsb25nIHZhbCk7CiAgICBuc091dHB1dFN0cmVhbSYg b3BlcmF0b3IgPDwgKGludCB2YWwpOwogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1 bnNpZ25lZCBpbnQgdmFsKTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091 dHB1dFN0cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcGYoKnRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c091dHB1dFN0cmVhbShjb25zdCBuc091dHB1dFN0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0U3Ry ZWFtJiBvcGVyYXRvcj0oY29uc3QgbnNPdXRwdXRTdHJlYW0mIHJocyk7CgoKcHJvdGVjdGVkOgog ICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBtT3V0cHV0U3RyZWFtOwp9OwoKdHlwZWRlZiBu c091dHB1dFN0cmVhbSBuc0Jhc2ljT3V0U3RyZWFtOwoKCmNsYXNzIG5zRXJyb3JQcm9uZQoKCnsK cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXJyb3JQcm9u ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtUmVzdWx0KDApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCBmYWlsZWQoKSBjb25zdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgobVJlc3VsdCkgJiAweDgwMDAwMDAwKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICBuc3Jlc3VsdCBlcnJvcigpIGNvbnN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVJlc3VsdDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CgoKcHJvdGVjdGVkOgogICAgbnNyZXN1bHQgbVJlc3Vs dDsKfTsKCgpjbGFzcyBuc0ZpbGVDbGllbnQKCgoKCjogcHVibGljIHZpcnR1YWwgbnNFcnJvclBy b25lCnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmls ZUNsaWVudChjb25zdCBuc0NPTVB0cjxuc0lPcGVuRmlsZT4mIGluRmlsZSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlKGRvX1F1ZXJ5SW50ZXJmYWNlKGluRmls ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIHZpcnR1YWwgfm5zRmlsZUNsaWVudCgpIHt9 CgogICAgdm9pZCBvcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBuc3ByTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUFJJbnRuIGFjY2Vzc01vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAobUZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt UmVzdWx0ID0gbUZpbGUtPk9wZW4oaW5GaWxlLCBuc3ByTW9kZSwgYWNjZXNzTW9kZSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIGlzX29wZW4oKSBj b25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIHJlc3VsdCA9IDA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRmlsZSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GaWxlLT5HZXRJc09wZW4oJnJlc3Vs dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1 bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIGlz X2ZpbGUoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1GaWxlID8gMSA6 IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKcHJvdGVjdGVkOgoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVDbGllbnQoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lPcGVuRmlsZT4g bUZpbGU7Cn07CgoKY2xhc3MgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudAoKCgoKOiBwdWJsaWMg dmlydHVhbCBuc0Vycm9yUHJvbmUKewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCgpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vz c1N0b3JlQ2xpZW50KGNvbnN0IG5zQ09NUHRyPG5zSVJhbmRvbUFjY2Vzc1N0b3JlPiYgaW5TdG9y ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1TdG9yZShkb19RdWVy eUludGVyZmFjZShpblN0b3JlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgdmlydHVhbCB+ bnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCgpIHt9CgogICAgdm9pZCBzZWVrKFBSSW50MzIgb2Zm c2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlayhQUl9TRUVLX1NFVCwgb2Zmc2V0KTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgdm9pZCBzZWVrKFBS U2Vla1doZW5jZSB3aGVuY2UsIFBSSW50MzIgb2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2V0X2F0X2VvZigwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1SZXN1bHQgPSBtU3RvcmUtPlNlZWsod2hlbmNlLCBvZmZzZXQpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSSW50biB0ZWxsKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBSSW50biByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1SZXN1bHQgPSBtU3RvcmUtPlRlbGwoJnJlc3VsdCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKcHJvdGVjdGVkOgoKICAgdmlydHVh bCBQUkJvb2wgZ2V0X2F0X2VvZigpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv b2wgcmVzdWx0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1TdG9yZS0+R2V0QXRFT0YoJnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQoKICAgdmlydHVhbCB2b2lkIHNldF9hdF9lb2YoUFJCb29sIGF0RW5kKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1TdG9yZS0+U2V0QXRFT0YoYXRFbmQpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGNvbnN0IG5z UmFuZG9tQWNjZXNzU3RvcmVDbGllbnQmIHJocyk7CiAgICBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xp ZW50JiBvcGVyYXRvcj0oY29uc3QgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCYgcmhzKTsKCgpw cm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lSYW5kb21BY2Nlc3NTdG9yZT4gbVN0b3JlOwp9OwoK CmNsYXNzIG5zUmFuZG9tQWNjZXNzSW5wdXRTdHJlYW0KCgo6IHB1YmxpYyBuc1JhbmRvbUFjY2Vz c1N0b3JlQ2xpZW50CiwgcHVibGljIG5zSW5wdXRTdHJlYW0KewpwdWJsaWM6CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVhbShuc0lJ bnB1dFN0cmVhbSogaW5TdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKGluU3RyZWFt KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5zSW5wdXRTdHJlYW0o aW5TdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCByZWFkbGluZShjaGFy KiBzLCBQUkludDMyIG4pOwoKCgoKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNo YXImIGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJu IG5zSW5wdXRTdHJlYW06Om9wZXJhdG9yID4+KGNoKTsgfQogICAgbnNJbnB1dFN0cmVhbSYgb3Bl cmF0b3IgPj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5wdXRTdHJlYW0mKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0U3RyZWFtOjpv cGVyYXRvciA+PihwZik7IH0KCnByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtKCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IG5zSW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQoKICAgdmlydHVhbCBQUkJvb2wgZ2V0X2F0X2VvZigpIGNvbnN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudDo6Z2V0X2F0X2VvZigp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgIHZpcnR1YWwgdm9p ZCBzZXRfYXRfZW9mKFBSQm9vbCBhdEVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmFu ZG9tQWNjZXNzU3RvcmVDbGllbnQ6OnNldF9hdF9lb2YoYXRFbmQpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtKGNvbnN0IG5zUmFuZG9t QWNjZXNzSW5wdXRTdHJlYW0mIHJocyk7CiAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtJiBv cGVyYXRvcj0oY29uc3QgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVhbSYgcmhzKTsKCn07CgoKY2xh c3MgbnNJbnB1dFN0cmluZ1N0cmVhbQoKOiBwdWJsaWMgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVh bQp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0 U3RyaW5nU3RyZWFtKGNvbnN0IGNoYXIqIHN0cmluZ1RvUmVhZCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dFN0cmluZ1N0cmVhbShjb25zdCBuc1N0cmluZyYg c3RyaW5nVG9SZWFkKTsKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNoYXImIGNo KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zSW5w dXRTdHJlYW06Om9wZXJhdG9yID4+KGNoKTsgfQogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3Ig Pj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5wdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0U3RyZWFtOjpvcGVyYXRv ciA+PihwZik7IH0KCgpwcml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJbnB1dFN0cmluZ1N0cmVhbShjb25zdCBuc0lucHV0U3RyaW5nU3RyZWFtJiByaHMp OwogICAgbnNJbnB1dFN0cmluZ1N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zSW5wdXRTdHJpbmdT dHJlYW0mIHJocyk7CgoKfTsKCgpjbGFzcyBuc0lucHV0RmlsZVN0cmVhbQoKCjogcHVibGljIG5z UmFuZG9tQWNjZXNzSW5wdXRTdHJlYW0KLCBwdWJsaWMgbnNGaWxlQ2xpZW50CnsKcHVibGljOgog ICAgICAgIGVudW0geyBrRGVmYXVsdE1vZGUgPSAweDAxIH07CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNJbnB1dEZpbGVTdHJlYW0obnNJSW5wdXRTdHJlYW0qIGluU3Ry ZWFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnNSYW5kb21BY2Nl c3NJbnB1dFN0cmVhbShpblN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAsIG5zRmlsZUNsaWVudChkb19RdWVyeUludGVyZmFjZShpblN0cmVhbSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtRmlsZUlucHV0U3RyZWFtKGRvX1F1ZXJ5 SW50ZXJmYWNlKGluU3RyZWFtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXRGaWxlU3RyZWFtKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc3ByTW9kZSA9IGtE ZWZhdWx0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJ bnRuIGFjY2Vzc01vZGUgPSAwMDY2Nik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNJbnB1dEZpbGVTdHJlYW0obnNJRmlsZVNwZWMqIGluRmlsZSk7CiAgICB2aXJ0dWFs IH5uc0lucHV0RmlsZVN0cmVhbSgpOwoKICAgIHZvaWQgT3BlbigKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNwck1vZGUgPSBrRGVmYXVs dE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBh Y2Nlc3NNb2RlID0gMDA2NjYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZpbGUpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlsZS0+T3Blbihp bkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CgoKICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yID4+IChjaGFyJiBjaCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0 U3RyZWFtOjpvcGVyYXRvciA+PihjaCk7IH0KICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yID4+ IChuc0lucHV0U3RyZWFtJiAoKnBmKShuc0lucHV0U3RyZWFtJikpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNJbnB1dFN0cmVhbTo6b3BlcmF0b3Ig Pj4ocGYpOyB9Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIEFzc2lnbkZyb20obnNJU3VwcG9ydHMqIHN0 cmVhbSk7Cgpwcml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNJbnB1dEZpbGVTdHJlYW0oY29uc3QgbnNJbnB1dEZpbGVTdHJlYW0mIHJocyk7CiAgICBuc0lu cHV0RmlsZVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zSW5wdXRGaWxlU3RyZWFtJiByaHMpOwoK CnByb3RlY3RlZDoKICAgIG5zQ09NUHRyPG5zSUZpbGVTcGVjSW5wdXRTdHJlYW0+IG1GaWxlSW5w dXRTdHJlYW07Cn07CgoKY2xhc3MgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0KCgo6IHB1Ymxp YyBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50CiwgcHVibGljIG5zT3V0cHV0U3RyZWFtCnsKcHVi bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmFuZG9tQWNjZXNz T3V0cHV0U3RyZWFtKG5zSU91dHB1dFN0cmVhbSogaW5TdHJlYW0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGRvX1F1ZXJ5 SW50ZXJmYWNlKGluU3RyZWFtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsIG5zT3V0cHV0U3RyZWFtKGluU3RyZWFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAg IG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoY29uc3QgY2hhciogYnVmKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9w ZXJhdG9yIDw8IChidWYpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNoYXIg Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091 dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKGNoKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJh dG9yIDw8IChzaG9ydCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0 cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgc2hvcnQgdmFsKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJh dG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGxvbmcgdmFs KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRw dXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0 b3IgPDwgKHVuc2lnbmVkIGxvbmcgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAg ICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGludCB2YWwpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig PDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgaW50 IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5z T3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9w ZXJhdG9yIDw8IChuc091dHB1dFN0cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt OjpvcGVyYXRvciA8PCAocGYpOyB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0oKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogbnNPdXRwdXRTdHJlYW0oMCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQoKcHJpdmF0ZToKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtKGNvbnN0IG5zUmFuZG9tQWNjZXNzT3V0cHV0 U3RyZWFtJiByaHMpOwogICAgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0mIG9wZXJhdG9yPShj b25zdCBuc1JhbmRvbUFjY2Vzc091dHB1dFN0cmVhbSYgcmhzKTsKCn07CgoKY2xhc3MgbnNPdXRw dXRTdHJpbmdTdHJlYW0KCjogcHVibGljIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtCnsKcHVi bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zT3V0cHV0U3RyaW5n U3RyZWFtKGNoYXIqJiBzdHJpbmdUb0NoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNPdXRwdXRTdHJpbmdTdHJlYW0obnNTdHJpbmcmIHN0cmluZ1RvQ2hhbmdl KTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjb25zdCBjaGFyKiBidWYpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0 cmVhbTo6b3BlcmF0b3IgPDwgKGJ1Zik7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8 PCAoY2hhciBjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0 dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoY2gpOyB9CiAgICBuc091dHB1dFN0cmVh bSYgb3BlcmF0b3IgPDwgKHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQog ICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBzaG9ydCB2YWwpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVh bTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAo bG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVy biBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFt JiBvcGVyYXRvciA8PCAodW5zaWduZWQgbG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZh bCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoaW50IHZhbCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpv cGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNp Z25lZCBpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBy ZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0 cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFtJiAoKnBmKShuc091dHB1dFN0cmVhbSYp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRw dXRTdHJlYW06Om9wZXJhdG9yIDw8IChwZik7IH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc091dHB1dFN0cmluZ1N0cmVhbShjb25zdCBuc091dHB1 dFN0cmluZ1N0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0U3RyaW5nU3RyZWFtJiBvcGVyYXRvcj0o Y29uc3QgbnNPdXRwdXRTdHJpbmdTdHJlYW0mIHJocyk7Cgp9OwoKCmNsYXNzIG5zT3V0cHV0Rmls ZVN0cmVhbQoKCjogcHVibGljIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtCiwgcHVibGljIG5z RmlsZUNsaWVudAp7CnB1YmxpYzoKICAgICAgICBlbnVtIHsga0RlZmF1bHRNb2RlID0gKDB4MDIg fCAweDA4IHwgMHgyMCkgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnNPdXRwdXRGaWxlU3RyZWFtKCkge30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc091dHB1dEZpbGVTdHJlYW0obnNJT3V0cHV0U3RyZWFtKiBpblN0cmVhbSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFzc2lnbkZyb20oaW5TdHJlYW0pOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc091dHB1dEZpbGVTdHJlYW0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNwck1vZGUgPSBrRGVmYXVsdE1vZGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYWNjZXNzTW9kZSA9 IDAwNjY2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIHN0cmVhbTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTlNfTmV3SU9GaWxl U3RyZWFtKCAmc3RyZWFtLCBpbkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKSkgJiAweDgwMDAw MDAwKSkKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25Gcm9t KHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsg KHN0cmVhbSktPlJlbGVhc2UoKTsgKHN0cmVhbSkgPSAwOyB9IHdoaWxlICgwKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNPdXRwdXRGaWxlU3RyZWFtKG5zSUZpbGVTcGVjKiBpbkZpbGUpOwogICAg dmlydHVhbCB+bnNPdXRwdXRGaWxlU3RyZWFtKCk7CgogICAgdmlydHVhbCBuc3Jlc3VsdCBmbHVz aCgpOwogICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CgoKICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVy YXRvciA8PCAoY29uc3QgY2hhciogYnVmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChidWYpOyB9CiAg ICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNoYXIgY2gpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig PDwgKGNoKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChzaG9ydCB2YWwpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0 cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8 PCAodW5zaWduZWQgc2hvcnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBu c091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGxvbmcgdmFsKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8 ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIGxvbmcg dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNP dXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3Bl cmF0b3IgPDwgKGludCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0 cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgaW50IHZhbCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRv ciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091dHB1dFN0 cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAocGYpOyB9 Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIEFzc2lnbkZyb20obnNJU3VwcG9ydHMqIHN0cmVhbSk7Cgpw cml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNPdXRwdXRG aWxlU3RyZWFtKGNvbnN0IG5zT3V0cHV0RmlsZVN0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0Rmls ZVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zT3V0cHV0RmlsZVN0cmVhbSYgcmhzKTsKCgpwcm90 ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lGaWxlU3BlY091dHB1dFN0cmVhbT4gbUZpbGVPdXRwdXRT dHJlYW07Cn07CgoKY2xhc3MgbnNPdXRwdXRDb25zb2xlU3RyZWFtCgoKOiBwdWJsaWMgbnNPdXRw dXRGaWxlU3RyZWFtCnsKcHVibGljOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuc091dHB1dENvbnNvbGVTdHJlYW0oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ U3VwcG9ydHMqIHN0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCgoTlNfTmV3T3V0cHV0Q29uc29sZVN0cmVhbSgmc3RyZWFtKSkgJiAweDgwMDAwMDAw KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGUgPSBkb19RdWVy eUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtT3V0cHV0U3RyZWFtID0gZG9fUXVlcnlJbnRlcmZhY2Uoc3RyZWFtKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGVPdXRwdXRTdHJlYW0gPSBkb19R dWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkbyB7IChzdHJlYW0pLT5SZWxlYXNlKCk7IChzdHJlYW0pID0gMDsgfSB3aGlsZSAo MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICBuc091dHB1 dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNvbnN0IGNoYXIqIGJ1ZikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8 PCAoYnVmKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjaGFyIGNoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJl YW06Om9wZXJhdG9yIDw8IChjaCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAo c2hvcnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1 cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVh bSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAo dmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChsb25nIHZhbCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt OjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1 bnNpZ25lZCBsb25nIHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRw dXRTdHJlYW0mIG9wZXJhdG9yIDw8IChpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwp OyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIGludCB2YWwpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0 cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8 PCAobnNPdXRwdXRTdHJlYW0mICgqcGYpKG5zT3V0cHV0U3RyZWFtJikpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0 b3IgPDwgKHBmKTsgfQoKCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuc091dHB1dENvbnNvbGVTdHJlYW0oY29uc3QgbnNPdXRwdXRDb25zb2xlU3RyZWFt JiByaHMpOwogICAgbnNPdXRwdXRDb25zb2xlU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgbnNPdXRw dXRDb25zb2xlU3RyZWFtJiByaHMpOwoKCn07CgoKY2xhc3MgbnNJT0ZpbGVTdHJlYW0KCgo6IHB1 YmxpYyBuc0lucHV0RmlsZVN0cmVhbQosIHB1YmxpYyBuc091dHB1dFN0cmVhbQp7CnB1YmxpYzoK ICAgICAgICBlbnVtIHsga0RlZmF1bHRNb2RlID0gKDB4MDQgfCAweDA4KSB9OwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lPRmlsZVN0cmVhbSgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSW5wdXRTdHJlYW0qIGluSW5wdXRTdHJl YW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5zSU91dHB1dFN0cmVh bSogaW5PdXRwdXRTdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBuc0lucHV0RmlsZVN0cmVhbShpbklucHV0U3RyZWFtKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICwgbnNPdXRwdXRTdHJlYW0oaW5PdXRwdXRTdHJlYW0pCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtRmlsZU91dHB1dFN0cmVhbShkb19RdWVy eUludGVyZmFjZShpbk91dHB1dFN0cmVhbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lPRmlsZVN0cmVhbSgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zRmlsZVNwZWMmIGluRmls ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc3ByTW9k ZSA9IGtEZWZhdWx0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBSSW50biBhY2Nlc3NNb2RlID0gMDA2NjYpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBuc0lucHV0RmlsZVN0cmVhbSgobnNJSW5wdXRTdHJlYW0qKTApCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuc091dHB1dFN0cmVhbSgwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIHN0cmVhbTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTlNfTmV3SU9GaWxlU3RyZWFtKCAmc3Ry ZWFtLCBpbkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKSkgJiAweDgwMDAwMDAwKSkKCgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlsZSA9IGRvX1F1ZXJ5SW50ZXJm YWNlKHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1T dG9yZSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1JbnB1dFN0cmVhbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHN0cmVh bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRTdHJl YW0gPSBkb19RdWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtRmlsZUlucHV0U3RyZWFtID0gZG9fUXVlcnlJbnRlcmZhY2Uoc3Ry ZWFtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGVPdXRw dXRTdHJlYW0gPSBkb19RdWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkbyB7IChzdHJlYW0pLT5SZWxlYXNlKCk7IChzdHJlYW0p ID0gMDsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQoKICAgIHZpcnR1YWwgbnNyZXN1bHQgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gbnNJbnB1dEZpbGVTdHJlYW06OmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQoKCiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNv bnN0IGNoYXIqIGJ1ZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg cmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoYnVmKTsgfQogICAgbnNPdXRwdXRT dHJlYW0mIG9wZXJhdG9yIDw8IChjaGFyIGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChjaCk7IH0K ICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoc2hvcnQgdmFsKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJh dG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVk IHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0 dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJl YW0mIG9wZXJhdG9yIDw8IChsb25nIHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQog ICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBsb25nIHZhbCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt OjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChp bnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g bnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYg b3BlcmF0b3IgPDwgKHVuc2lnbmVkIGludCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7 IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobnNPdXRwdXRTdHJlYW0mICgqcGYp KG5zT3V0cHV0U3RyZWFtJikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHBmKTsgfQoKCiAgICBuc0lu cHV0U3RyZWFtJiBvcGVyYXRvciA+PiAoY2hhciYgY2gpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNJbnB1dFN0cmVhbTo6b3BlcmF0b3IgPj4oY2gp OyB9CiAgICBuc0lucHV0U3RyZWFtJiBvcGVyYXRvciA+PiAobnNJbnB1dFN0cmVhbSYgKCpwZiko bnNJbnB1dFN0cmVhbSYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsgcmV0dXJuIG5zSW5wdXRTdHJlYW06Om9wZXJhdG9yID4+KHBmKTsgfQoKICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IGZsdXNoKCkge2lmIChtRmlsZU91dHB1dFN0cmVhbSkgbUZpbGVPdXRwdXRT dHJlYW0tPkZsdXNoKCk7IHJldHVybiBlcnJvcigpOyB9CgoKcHJpdmF0ZToKCgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSU9GaWxlU3RyZWFtKGNvbnN0IG5zSU9GaWxl U3RyZWFtJiByaHMpOwogICAgbnNJT0ZpbGVTdHJlYW0mIG9wZXJhdG9yPShjb25zdCBuc0lPRmls ZVN0cmVhbSYgcmhzKTsKCgpwcm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lGaWxlU3BlY091dHB1 dFN0cmVhbT4gbUZpbGVPdXRwdXRTdHJlYW07Cn07CgoKCgoKICAgICAgIG5zT3V0cHV0U3RyZWFt JiBuc0VuZGwobnNPdXRwdXRTdHJlYW0mIG9zKTsKCgpjbGFzcyBuc1NhdmVWaWFUZW1wU3RyZWFt CgoKCiA6IHB1YmxpYyBuc091dHB1dEZpbGVTdHJlYW0Kewpwcml2YXRlOgoKICAgICAgICB0eXBl ZGVmIG5zT3V0cHV0RmlsZVN0cmVhbSBJbmhlcml0ZWQ7CgpwdWJsaWM6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5zU2F2ZVZpYVRlbXBTdHJlYW0oY29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlVG9TYXZlKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfm5zU2F2ZVZpYVRlbXBTdHJlYW0oKTsKICAgICAgICB2aXJ0dWFsIHZvaWQg Y2xvc2UoKTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjb25zdCBjaGFyKiBi dWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091 dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKGJ1Zik7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVy YXRvciA8PCAoY2hhciBjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoY2gpOyB9CiAgICBuc091dHB1 dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFs KTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBzaG9ydCB2YWwp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1 dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRv ciA8PCAobG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0 U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgbG9uZyB2YWwpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig PDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoaW50IHZhbCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3Ry ZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8 ICh1bnNpZ25lZCBpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091 dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFtJiAoKnBmKShuc091dHB1dFN0 cmVhbSYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g bnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChwZik7IH0KCnByaXZhdGU6CgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NhdmVWaWFUZW1wU3RyZWFtKGNvbnN0IG5z U2F2ZVZpYVRlbXBTdHJlYW0mIHJocyk7CiAgICBuc1NhdmVWaWFUZW1wU3RyZWFtJiBvcGVyYXRv cj0oY29uc3QgbnNTYXZlVmlhVGVtcFN0cmVhbSYgcmhzKTsKCgpwcm90ZWN0ZWQ6CgogICAgICAg IGNvbnN0IG5zRmlsZVNwZWMmIG1GaWxlVG9TYXZlOwogICAgICAgIG5zRmlsZVNwZWMqIG1UZW1w RmlsZVNwZWM7Cn07CiMgMzMgIm5zTG9nZ2luZ1Byb2dyZXNzTm90aWZpZXIuaCIgMgojIDEgIi4u Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiIDEKIyAzNCAibnNMb2dnaW5nUHJvZ3Jlc3NOb3Rp Zmllci5oIiAyCgoKY2xhc3MgbnNMb2dnaW5nUHJvZ3Jlc3NMaXN0ZW5lciA6IHB1YmxpYyBuc0lY UElMaXN0ZW5lcgp7CiAgICBwdWJsaWM6CgogICAgICAgIG5zTG9nZ2luZ1Byb2dyZXNzTGlzdGVu ZXIoKTsKICAgICAgICB2aXJ0dWFsIH5uc0xvZ2dpbmdQcm9ncmVzc0xpc3RlbmVyKCk7CgogICAg ICAgIHB1YmxpYzogdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYg YUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQp OyB2aXJ0dWFsIG5zcmVmY250IFJlbGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJl ZkNudDsgdm9pZCogX21Pd25pbmdUaHJlYWQ7IHB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgbnNy ZXN1bHQgQmVmb3JlSmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmljaGFyICpVUkwpOyB2 aXJ0dWFsIG5zcmVzdWx0IEFmdGVySmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmljaGFy ICpVUkwpOyB2aXJ0dWFsIG5zcmVzdWx0IEluc3RhbGxTdGFydGVkKGNvbnN0IFBSVW5pY2hhciAq VVJMLCBjb25zdCBQUlVuaWNoYXIgKlVJUGFja2FnZU5hbWUpOyB2aXJ0dWFsIG5zcmVzdWx0IEl0 ZW1TY2hlZHVsZWQoY29uc3QgUFJVbmljaGFyICptZXNzYWdlKTsgdmlydHVhbCBuc3Jlc3VsdCBG aW5hbGl6ZVByb2dyZXNzKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSwgUFJJbnQzMiBpdGVtTnVt LCBQUkludDMyIHRvdE51bSk7IHZpcnR1YWwgbnNyZXN1bHQgRmluYWxTdGF0dXMoY29uc3QgUFJV bmljaGFyICpVUkwsIFBSSW50MzIgc3RhdHVzKTsgdmlydHVhbCBuc3Jlc3VsdCBMb2dDb21tZW50 KGNvbnN0IFBSVW5pY2hhciAqY29tbWVudCk7CgogICAgIHByaXZhdGU6CiAgICAgICAgdm9pZCBH ZXRUaW1lKGNoYXIqKiBhU3RyaW5nKTsKICAgICAgICBuc091dHB1dEZpbGVTdHJlYW0gKm1Mb2dT dHJlYW07Cn07Cgpuc3Jlc3VsdCBDb252ZXJ0X25zSUZpbGVfVG9fbnNGaWxlU3BlYyhuc0lGaWxl ICphSW5JRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxl U3BlYyAqKmFPdXRGaWxlU3BlYyk7CiMgNTYgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIiAxCiMgMjEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lSZWdpc3RyeS5oIgp0eXBlZGVmIFBSVWludDMyIG5zUmVnaXN0cnlLZXk7Cgp0eXBl ZGVmIFBSSW50MzIgbnNXZWxsS25vd25SZWdpc3RyeTsKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSVJlZ2lzdHJ5LmgiCmNsYXNzIG5zSVJlZ2lzdHJ5IDogcHVibGljIG5zSVN1cHBvcnRzIHsK IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z SUlEIGlpZCA9IHsweDVkNDFhNDQwLCAweDhlMzcsIDB4MTFkMiwgeyAweDgwLCAweDU5LCAweDAw LCAweDYwLCAweDA4LCAweDExLCAweGE5LCAweGMzIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7 IE5vbmUgPSAwIH07CgogIGVudW0geyBVc2VycyA9IDEgfTsKCiAgZW51bSB7IENvbW1vbiA9IDIg fTsKCiAgZW51bSB7IEN1cnJlbnRVc2VyID0gMyB9OwoKICBlbnVtIHsgQXBwbGljYXRpb25Db21w b25lbnRSZWdpc3RyeSA9IDEgfTsKCiAgZW51bSB7IEFwcGxpY2F0aW9uUmVnaXN0cnkgPSAyIH07 CgogIGVudW0geyBBcHBsaWNhdGlvbkN1c3RvbVJlZ2lzdHJ5ID0gLTEgfTsKCgogIHZpcnR1YWwg bnNyZXN1bHQgT3Blbihjb25zdCBjaGFyICpyZWdGaWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz dWx0IE9wZW5XZWxsS25vd25SZWdpc3RyeShuc1dlbGxLbm93blJlZ2lzdHJ5IHJlZ2lkKSA9IDA7 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1 bHQgSXNPcGVuKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRL ZXkobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBQUlVuaWNoYXIgKmtleW5hbWUsIG5zUmVn aXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5KG5zUmVn aXN0cnlLZXkgYmFzZUtleSwgY29uc3QgUFJVbmljaGFyICprZXluYW1lLCBuc1JlZ2lzdHJ5S2V5 ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUtleShuc1JlZ2lzdHJ5 S2V5IGJhc2VLZXksIGNvbnN0IFBSVW5pY2hhciAqa2V5bmFtZSkgPSAwOwoKCiAgdmlydHVhbCBu c3Jlc3VsdCBHZXRTdHJpbmcobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBQUlVuaWNoYXIg KnZhbG5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg U2V0U3RyaW5nKG5zUmVnaXN0cnlLZXkgYmFzZUtleSwgY29uc3QgUFJVbmljaGFyICp2YWxuYW1l LCBjb25zdCBQUlVuaWNoYXIgKnZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0 cmluZ1VURjgobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBjaGFyICpwYXRoLCBjaGFyICoq X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHJpbmdVVEY4KG5zUmVnaXN0 cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qnl0ZXNVVEY4KG5zUmVnaXN0cnlLZXkgYmFzZUtleSwg Y29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgKmxlbmd0aCwgUFJVaW50OCAqKnZhbHVlQXJyYXkp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qnl0ZXNVVEY4KG5zUmVnaXN0cnlLZXkgYmFz ZUtleSwgY29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgbGVuZ3RoLCBQUlVpbnQ4ICp2YWx1ZUFy cmF5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludChuc1JlZ2lzdHJ5S2V5IGJhc2VL ZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgU2V0SW50KG5zUmVnaXN0cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwg UFJJbnQzMiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb25nTG9uZyhuc1Jl Z2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSSW50NjQgKl9yZXR2YWwpID0g MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9uZ0xvbmcobnNSZWdpc3RyeUtleSBiYXNlS2V5 LCBjb25zdCBjaGFyICpwYXRoLCBQUkludDY0ICp2YWx1ZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg bnNyZXN1bHQgQWRkU3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBh dGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVt b3ZlU3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNv bnN0IGNoYXIgKnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgQWRkU3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIg KnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg UmVtb3ZlU3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgp ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJh c2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlU3VidHJlZXMobnNSZWdpc3RyeUtleSBiYXNlS2V5 LCBuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVt ZXJhdGVBbGxTdWJ0cmVlcyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIG5zSUVudW1lcmF0b3IgKipf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZVZhbHVlcyhuc1JlZ2lz dHJ5S2V5IGJhc2VLZXksIG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgogIGVudW0geyBT dHJpbmcgPSAxVSB9OwoKICBlbnVtIHsgSW50MzIgPSAyVSB9OwoKICBlbnVtIHsgQnl0ZXMgPSAz VSB9OwoKICBlbnVtIHsgRmlsZSA9IDRVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVl VHlwZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSVWludDMyICpf cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlTGVuZ3RoKG5zUmVnaXN0 cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlVmFsdWUobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBj b25zdCBjaGFyICpwYXRoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGVLZXko UFJVaW50OCAqa2V5LCBQUlVpbnQzMiB0ZXJtaW5hdG9yLCBQUlVpbnQzMiAqbGVuZ3RoLCBQUlVp bnQ4ICoqZXNjYXBlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2FwZUtleShQUlVp bnQ4ICplc2NhcGVkLCBQUlVpbnQzMiB0ZXJtaW5hdG9yLCBQUlVpbnQzMiAqbGVuZ3RoLCBQUlVp bnQ4ICoqa2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRVc2VyTmFtZShj aGFyICogKmFDdXJyZW50VXNlck5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnJl bnRVc2VyTmFtZShjb25zdCBjaGFyICogYUN1cnJlbnRVc2VyTmFtZSkgPSAwOwoKCiAgdmlydHVh bCBuc3Jlc3VsdCBQYWNrKHZvaWQpID0gMDsKCn07CiMgNTIzICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlFbnVtZXJhdG9yIDogcHVibGljIG5zSUVu dW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0 aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGNlY2YyMzYsIDB4MWRkMiwgMHgxMWIyLCB7IDB4ODks IDB4M2MsIDB4ZjksIDB4ODQsIDB4ODksIDB4NTYsIDB4ZWEsIDB4ZWMgfX07IHJldHVybiBpaWQ7 fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDdXJyZW50SXRlbUluUGxhY2VVVEY4KG5zUmVnaXN0cnlL ZXkgKmtleSwgY29uc3QgY2hhciAqKml0ZW0pID0gMDsKCn07CiMgNTkxICIuLi8uLi9kaXN0L2lu Y2x1ZGUvbnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlOb2RlIDogcHVibGljIG5zSVN1 cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj IGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxYjU0ODMxLCAweGFjMDcsIDB4MTFkMiwgeyAweDgwLCAw eDVlLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweGE5LCAweGMzIH19OyByZXR1cm4gaWlkO30K CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVVURjgoY2hhciAqICphTmFtZVVURjgpID0gMDsK CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShQUlVuaWNoYXIgKiAqYU5hbWUpID0gMDsKCgog IHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5KG5zUmVnaXN0cnlLZXkgKmFLZXkpID0gMDsKCn07CiMg NjgzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlW YWx1ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1MzE2YzM4MCwgMHhiMmY4 LCAweDExZDIsIHsgMHhhMywgMHg3NCwgMHgwMCwgMHg4MCwgMHhjNiwgMHhmOCwgMHgwZSwgMHg0 YiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUoUFJVbmljaGFy ICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVVVEY4KGNoYXIgKiAq YU5hbWVVVEY4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJVaW50MzIgKmFU eXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0 aCkgPSAwOwoKfTsKIyA3NzkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeVV0aWxzLmgiIDEKIyA3ODAgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIiAyCiMgNTggIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAy CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVpbGRJRC5oIiAxCiMgNTkgIm5zU29mdHdhcmVV cGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3BlY2lhbFN5c3RlbURpcmVj dG9yeS5oIiAxCiMgNjAgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9p bmNsdWRlL25zUHJvY2Vzcy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3Mu aCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvY2Vzcy5oIiAxCiMgMjkgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lQcm9jZXNzLmgiCmNsYXNzIG5zSVByb2Nlc3MgOiBwdWJsaWMgbnNJU3Vw cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg Y29uc3QgbnNJSUQgaWlkID0gezB4M2VkODZkYmUsIDB4ZDA4NCwgMHgxMWQ0LCB7IDB4YmEsIDB4 N2EsIDB4MDAsIDB4YzAsIDB4NGYsIDB4YTAsIDB4ZDIsIDB4NmIgfX07IHJldHVybiBpaWQ7fQoK CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSUZpbGUgKmV4ZWN1dGFibGUpID0gMDsKCgogIHZp cnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhQaWQoUFJVaW50MzIgcGlkKSA9IDA7CgoKICB2aXJ0dWFs IG5zcmVzdWx0IEtpbGwodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSdW4oUFJCb29s IGJsb2NraW5nLCBjb25zdCBjaGFyICoqYXJncywgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpw aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYXRpb24obnNJRmlsZSAqICphTG9j YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGlkKFBSVWludDMyICphUGlkKSA9 IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NOYW1lKGNoYXIgKiAqYVByb2Nlc3NO YW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NTaWduYXR1cmUoUFJVaW50 MzIgKmFQcm9jZXNzU2lnbmF0dXJlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV4aXRW YWx1ZShQUkludDMyICphRXhpdFZhbHVlKSA9IDA7Cgp9OwojIDI5ICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNQcm9jZXNzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5o IiAxCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3MuaCIgMgojIDEgIi91c3Ivc3Jj L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMzEgIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3MuaCIgMgoKCgoKCmNsYXNzIG5zUHJvY2VzcyA6IHB1Ymxp YyBuc0lQcm9jZXNzCnsKcHVibGljOgoKICBwdWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJ bnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFs IG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBw cm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6 CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSUZpbGUgKmV4ZWN1dGFibGUpOyB2aXJ0dWFsIG5z cmVzdWx0IEluaXRXaXRoUGlkKFBSVWludDMyIHBpZCk7IHZpcnR1YWwgbnNyZXN1bHQgS2lsbCh2 b2lkKTsgdmlydHVhbCBuc3Jlc3VsdCBSdW4oUFJCb29sIGJsb2NraW5nLCBjb25zdCBjaGFyICoq YXJncywgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpwaWQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdl dExvY2F0aW9uKG5zSUZpbGUgKiAqYUxvY2F0aW9uKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaWQo UFJVaW50MzIgKmFQaWQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NOYW1lKGNoYXIgKiAq YVByb2Nlc3NOYW1lKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9jZXNzU2lnbmF0dXJlKFBSVWlu dDMyICphUHJvY2Vzc1NpZ25hdHVyZSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhpdFZhbHVlKFBS SW50MzIgKmFFeGl0VmFsdWUpOwoKICBuc1Byb2Nlc3MoKTsKICB2aXJ0dWFsIH5uc1Byb2Nlc3Mo KTsKCnByaXZhdGU6CiAgbnNDT01QdHI8bnNJRmlsZT4gbUV4ZWN1dGFibGU7CiAgUFJJbnQzMiBt RXhpdFZhbHVlOwogIG5zWFBJRExDU3RyaW5nIG1UYXJnZXRQYXRoOwogIFBSUHJvY2VzcyAqbVBy b2Nlc3M7Cgp9OwojIDYxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKCiMgMSAiLi4vLi4vZGlz dC9pbmNsdWRlL25zRE9NQ0lELmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRE9NQ0lE LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4v ZGlzdC9pbmNsdWRlL25zRE9NQ0lELmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFj dG9yeS5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RPTUNJRC5oIiAyCiMgMSAiLi4v Li4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMQojIDI5ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNET01DSUQuaCIgMgojIDY0ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMgNjUgIm5zU29mdHdh cmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFn ZXIuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv bnNsYXlvdXQuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIKIyAxICIu Li8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z bGF5b3V0LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3 ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk ZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0Lmgi IDIKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgojIDEg Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKCmNsYXNzIG5zSUF0b207CmNsYXNz IG5zU3RyaW5nOwpjbGFzcyBuc0lOYW1lU3BhY2U7CiMgNjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0lOYW1lU3BhY2VNYW5hZ2VyLmgiCmNsYXNzIG5zSU5hbWVTcGFjZU1hbmFnZXIgOiBwdWJsaWMg bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0 YXRpYyBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwZDUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgy ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkOyB9Cgog IHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUm9vdE5hbWVTcGFjZShuc0lOYW1lU3BhY2UqJiBhUm9v dE5hbWVTcGFjZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyTmFtZVNwYWNlKGNv bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlEKSA9IDA7CgogIHZpcnR1 YWwgbnNyZXN1bHQgR2V0TmFtZVNwYWNlVVJJKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0FXcml0 YWJsZVN0cmluZyYgYVVSSSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVNwYWNlSUQo Y29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFVUkksIFBSSW50MzImIGFOYW1lU3BhY2VJRCkgPSAw Owp9OwoKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3TmFtZVNwYWNlTWFuYWdlcihuc0lOYW1lU3Bh Y2VNYW5hZ2VyKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyA2NiAibnNTb2Z0d2FyZVVwZGF0ZS5j cHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0TmFtZVNwYWNlTWFuYWdlci5o IiAxCiMgNjcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSVNjcmlwdEV4dGVybmFsTmFtZVNldC5oIiAxCiMgNjggIm5zU29mdHdhcmVVcGRhdGUuY3Bw IiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIiAxCiMg NzAgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy b3h5T2JqZWN0TWFuYWdlci5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcm94eU9i amVjdE1hbmFnZXIuaCIKY2xhc3MgbnNJRXZlbnRRdWV1ZTsKIyAyNyAiLi4vLi4vZGlzdC9pbmNs dWRlL25zSVByb3h5T2JqZWN0TWFuYWdlci5oIgpjbGFzcyBuc0lQcm94eU9iamVjdE1hbmFnZXIg OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWVhOTBkNDMsIDB4YjA1OSwgMHgx MWQyLCB7IDB4OTEsIDB4NWUsIDB4YzEsIDB4MmIsIDB4NjksIDB4NmMsIDB4OTMsIDB4MzMgfX07 IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm94eUZvck9iamVjdChuc0lF dmVudFF1ZXVlICpkZXN0UXVldWUsIGNvbnN0IG5zSUlEICYgaWlkLCBuc0lTdXBwb3J0cyAqb2Jq ZWN0LCBQUkludDMyIHByb3h5VHlwZSwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgogIHZpcnR1YWwg bnNyZXN1bHQgR2V0UHJveHkobnNJRXZlbnRRdWV1ZSAqZGVzdFF1ZXVlLCBjb25zdCBuc0lJRCAm IGNpZCwgbnNJU3VwcG9ydHMgKmFPdXRlciwgY29uc3QgbnNJSUQgJiBpaWQsIFBSSW50MzIgcHJv eHlUeXBlLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKfTsKIyA5OSAiLi4vLi4vZGlzdC9pbmNsdWRl L25zSVByb3h5T2JqZWN0TWFuYWdlci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5 RXZlbnQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94eUV2ZW50LmgiCiMgMSAi Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRl L25zUHJveHlFdmVudC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg MjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv aW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5 RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAzMCAi Li4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5j bHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c1Byb3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlLmgi IDEKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCiMgMSAiLi4vLi4v ZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMQojIDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94 eUV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv cHJ0eXBlcy5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIgMgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNs dWRlL3hwdGNhbGwuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z cHIvcHJ0eXBlcy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyAx ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRl L3hwdGNhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg MzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUveHB0X3N0cnVjdC5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIK IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0aW5mby5oIiAxCiMgMzMgIi4uLy4uL2Rpc3QvaW5j bHVkZS94cHRjYWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW50ZXJmYWNlSW5m by5oIiAxCiMgMzQgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyA2NSAiLi4vLi4v ZGlzdC9pbmNsdWRlL3hwdGNhbGwuaCIKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50CnsKCgogICAg dW5pb24KICAgIHsKICAgICAgICBQUkludDggaTg7CiAgICAgICAgUFJJbnQxNiBpMTY7CiAgICAg ICAgUFJJbnQzMiBpMzI7CiAgICAgICAgUFJJbnQ2NCBpNjQ7CiAgICAgICAgUFJVaW50OCB1ODsK ICAgICAgICBQUlVpbnQxNiB1MTY7CiAgICAgICAgUFJVaW50MzIgdTMyOwogICAgICAgIFBSVWlu dDY0IHU2NDsKICAgICAgICBmbG9hdCBmOwogICAgICAgIGRvdWJsZSBkOwogICAgICAgIFBSQm9v bCBiOwogICAgICAgIGNoYXIgYzsKICAgICAgICBQUlVuaWNoYXIgd2M7CiAgICAgICAgdm9pZCog cDsKICAgIH0gdmFsOwp9OwoKc3RydWN0IG5zWFBUQ1ZhcmlhbnQgOiBwdWJsaWMgbnNYUFRDTWlu aVZhcmlhbnQKewoKCgoKICAgIHZvaWQqIHB0cjsKICAgIG5zWFBUVHlwZSB0eXBlOwogICAgUFJV aW50OCBmbGFnczsKCiAgICBlbnVtCiAgICB7CgogICAgICAgIFBUUl9JU19EQVRBID0gMHgxLAog ICAgICAgIFZBTF9JU19BTExPQ0Q9IDB4MiwKICAgICAgICBWQUxfSVNfSUZBQ0UgPSAweDQsCiAg ICAgICAgVkFMX0lTX0FSUkFZID0gMHg4LAogICAgICAgIFZBTF9JU19ET01TVFI9IDB4MTAKICAg IH07CgogICAgdm9pZCBDbGVhckZsYWdzKCkge2ZsYWdzID0gMDt9CiAgICB2b2lkIFNldFB0cklz RGF0YSgpIHtmbGFncyB8PSBQVFJfSVNfREFUQTt9CiAgICB2b2lkIFNldFZhbElzQWxsb2NhdGVk KCkge2ZsYWdzIHw9IFZBTF9JU19BTExPQ0Q7fQogICAgdm9pZCBTZXRWYWxJc0ludGVyZmFjZSgp IHtmbGFncyB8PSBWQUxfSVNfSUZBQ0U7fQogICAgdm9pZCBTZXRWYWxJc0FycmF5KCkge2ZsYWdz IHw9IFZBTF9JU19BUlJBWTt9CiAgICB2b2lkIFNldFZhbElzRE9NU3RyaW5nKCkge2ZsYWdzIHw9 IFZBTF9JU19ET01TVFI7fQoKICAgIFBSQm9vbCBJc1B0ckRhdGEoKSBjb25zdCB7cmV0dXJuIDAg IT0gKGZsYWdzICYgUFRSX0lTX0RBVEEpO30KICAgIFBSQm9vbCBJc1ZhbEFsbG9jYXRlZCgpIGNv bnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxfSVNfQUxMT0NEKTt9CiAgICBQUkJvb2wgSXNW YWxJbnRlcmZhY2UoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFMX0lTX0lGQUNFKTt9 CiAgICBQUkJvb2wgSXNWYWxBcnJheSgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxf SVNfQVJSQVkpO30KICAgIFBSQm9vbCBJc1ZhbERPTVN0cmluZygpIGNvbnN0IHtyZXR1cm4gMCAh PSAoZmxhZ3MgJiBWQUxfSVNfRE9NU1RSKTt9CgogICAgdm9pZCBJbml0KGNvbnN0IG5zWFBUQ01p bmlWYXJpYW50JiBtdiwgY29uc3QgbnNYUFRUeXBlJiB0LCBQUlVpbnQ4IGYpCiAgICB7CiAgICAg ICAgdHlwZSA9IHQ7CiAgICAgICAgZmxhZ3MgPSBmOwoKICAgICAgICBpZihmICYgUFRSX0lTX0RB VEEpCiAgICAgICAgewogICAgICAgICAgICBwdHIgPSBtdi52YWwucDsKICAgICAgICAgICAgdmFs LnAgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBwdHIg PSAwOwogICAgICAgICAgICBzd2l0Y2godC5UYWdQYXJ0KCkpIHsKICAgICAgICAgICAgICBjYXNl IG5zWFBUVHlwZTo6VF9JODogdmFsLmk4ID0gbXYudmFsLmk4OyBicmVhazsKICAgICAgICAgICAg ICBjYXNlIG5zWFBUVHlwZTo6VF9JMTY6IHZhbC5pMTYgPSBtdi52YWwuaTE2OyBicmVhazsKICAg ICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JMzI6IHZhbC5pMzIgPSBtdi52YWwuaTMyOyBi cmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JNjQ6IHZhbC5pNjQgPSBtdi52 YWwuaTY0OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9VODogdmFsLnU4 ID0gbXYudmFsLnU4OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9VMTY6 IHZhbC51MTYgPSBtdi52YWwudTE2OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlw ZTo6VF9VMzI6IHZhbC51MzIgPSBtdi52YWwudTMyOyBicmVhazsKICAgICAgICAgICAgICBjYXNl IG5zWFBUVHlwZTo6VF9VNjQ6IHZhbC51NjQgPSBtdi52YWwudTY0OyBicmVhazsKICAgICAgICAg ICAgICBjYXNlIG5zWFBUVHlwZTo6VF9GTE9BVDogdmFsLmYgPSBtdi52YWwuZjsgYnJlYWs7CiAg ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRE9VQkxFOiB2YWwuZCA9IG12LnZhbC5kOyBi cmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9CT09MOiB2YWwuYiA9IG12LnZh bC5iOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9DSEFSOiB2YWwuYyA9 IG12LnZhbC5jOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9XQ0hBUjog dmFsLndjID0gbXYudmFsLndjOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6 VF9WT0lEOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0lJRDoKICAgICAgICAgICAg ICBjYXNlIG5zWFBUVHlwZTo6VF9ET01TVFJJTkc6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5 cGU6OlRfQ0hBUl9TVFI6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfV0NIQVJfU1RS OgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0lOVEVSRkFDRToKICAgICAgICAgICAg ICBjYXNlIG5zWFBUVHlwZTo6VF9JTlRFUkZBQ0VfSVM6CiAgICAgICAgICAgICAgY2FzZSBuc1hQ VFR5cGU6OlRfQVJSQVk6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfUFNUUklOR19T SVpFX0lTOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1BXU1RSSU5HX1NJWkVfSVM6 CiAgICAgICAgICAgICAgZGVmYXVsdDogdmFsLnAgPSBtdi52YWwucDsgYnJlYWs7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICB9Cn07CgoKCmNsYXNzIG5zWFBUQ1N0dWJCYXNlIDogcHVibGlj IG5zSVN1cHBvcnRzCnsKcHVibGljOgoKCgoKICAgICAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1 bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIp OwoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjc3R1YnNkZWNsLmluYyIgMQojIDExICIu Li8uLi9kaXN0L2luY2x1ZGUveHB0Y3N0dWJzZGVjbC5pbmMiCiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNCgpOwog ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1KCk7CiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNygpOwog ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4KCk7CiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViMTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViMTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTcoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViMTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViMTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjAoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjMoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViMjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjYoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjcoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViMjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjkoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzAoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViMzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzIo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzMoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViMzQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi MzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzYoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViMzcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViMzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzkoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViNDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDIoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViNDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDUoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDYoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViNDcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDgoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDkoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViNTAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTEo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTIoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViNTMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi NTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTUoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViNTYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViNTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTgoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViNjAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjEoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViNjMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjQoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjUoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViNjYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjcoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjgoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViNjkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzAo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzEoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViNzIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi NzMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzQoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViNzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViNzYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzcoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViNzkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODAoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViODIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODMoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODQoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViODUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODYoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODcoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViODgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODko KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTAoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViOTEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi OTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTMoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViOTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViOTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTYoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViOTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTkoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAwKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjEwMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDIoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAzKCk7CiAgICAgICAgICAgIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjEwNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx MDUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA2KCk7CiAgICAgICAgICAg IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwNygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxMDgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA5KCk7CiAgICAg ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxMTEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEyKCk7 CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMygpOwogICAgICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxMTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTE1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExNigpOwogICAgICAgICAg ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTE4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExOSgpOwogICAg ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjAoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViMTIxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEyMigp OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjMoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViMTI0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjEyNSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjYoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTI3KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjEyOCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjkoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMwKCk7CiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjEzMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzIo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMzKCk7CiAgICAgICAgICAgIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjEzNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxMzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM2KCk7CiAgICAgICAg ICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzNygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxMzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM5KCk7CiAg ICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MCgpOwogICAgICAgICAgICB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxNDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQy KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MygpOwogICAgICAgICAgICB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViMTQ1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0NigpOwogICAgICAg ICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViMTQ4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0OSgpOwog ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTAoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViMTUxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1 MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTMoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViMTU0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjE1NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTYoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU3KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjE1OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTkoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYwKCk7CiAgICAgICAgICAgIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjE2MSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx NjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYzKCk7CiAgICAgICAgICAg IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2NCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIxNjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY2KCk7CiAgICAg ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2NygpOwogICAgICAgICAgICB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIxNjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY5KCk7 CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3MCgpOwogICAgICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIxNzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi MTcyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3MygpOwogICAgICAgICAg ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViMTc1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3NigpOwogICAg ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzcoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViMTc4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3OSgp OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODAoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViMTgxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjE4MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODMoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjE4NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODYoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg3KCk7CiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjE4OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODko KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkwKCk7CiAgICAgICAgICAgIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjE5MSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIxOTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkzKCk7CiAgICAgICAg ICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5NCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVz dWx0IFN0dWIxOTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk2KCk7CiAg ICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5NygpOwogICAgICAgICAgICB2aXJ0dWFs IG5zcmVzdWx0IFN0dWIxOTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk5 KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwMCgpOwogICAgICAgICAgICB2 aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT dHViMjAyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwMygpOwogICAgICAg ICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl c3VsdCBTdHViMjA1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwNigpOwog ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDcoKTsKICAgICAgICAgICAgdmlydHVh bCBuc3Jlc3VsdCBTdHViMjA4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIw OSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTAoKTsKICAgICAgICAgICAg dmlydHVhbCBuc3Jlc3VsdCBTdHViMjExKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg U3R1YjIxMigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTMoKTsKICAgICAg ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy ZXN1bHQgU3R1YjIxNSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTYoKTsK ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE3KCk7CiAgICAgICAgICAgIHZpcnR1 YWwgbnNyZXN1bHQgU3R1YjIxOCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIy MTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjIwKCk7CiAgICAgICAgICAg IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0 IFN0dWIyMjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjIzKCk7CiAgICAg ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5z cmVzdWx0IFN0dWIyMjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjI2KCk7 CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNygpOwogICAgICAgICAgICB2aXJ0 dWFsIG5zcmVzdWx0IFN0dWIyMjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi MjI5KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMCgpOwogICAgICAgICAg ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs dCBTdHViMjMyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMygpOwogICAg ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzQoKTsKICAgICAgICAgICAgdmlydHVhbCBu c3Jlc3VsdCBTdHViMjM1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzNigp OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzcoKTsKICAgICAgICAgICAgdmly dHVhbCBuc3Jlc3VsdCBTdHViMjM4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1 YjIzOSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDAoKTsKICAgICAgICAg ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1 bHQgU3R1YjI0MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDMoKTsKICAg ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ0KCk7CiAgICAgICAgICAgIHZpcnR1YWwg bnNyZXN1bHQgU3R1YjI0NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDYo KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ3KCk7CiAgICAgICAgICAgIHZp cnR1YWwgbnNyZXN1bHQgU3R1YjI0OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0 dWIyNDkoKTsKCgogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMCgpOwogICAg ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMSgpOwogICAgICAgICAgICB2aXJ0dWFs IG5zcmVzdWx0IFNlbnRpbmVsMigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRp bmVsMygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsNCgpOwojIDE3OCAi Li4vLi4vZGlzdC9pbmNsdWRlL3hwdGNhbGwuaCIgMgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0 IEdldEludGVyZmFjZUluZm8obnNJSW50ZXJmYWNlSW5mbyoqIGluZm8pID0gMDsKCgogICAgdmly dHVhbCBuc3Jlc3VsdCBDYWxsTWV0aG9kKFBSVWludDE2IG1ldGhvZEluZGV4LAogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG5zWFBUTWV0aG9kSW5mbyogaW5mbywKICAgICAgICAgICAg ICAgICAgICAgICAgICBuc1hQVENNaW5pVmFyaWFudCogcGFyYW1zKSA9IDA7Cn07CgoKZXh0ZXJu ICJDIiB7Cgpuc3Jlc3VsdApYUFRDX0ludm9rZUJ5SW5kZXgobnNJU3VwcG9ydHMqIHRoYXQsIFBS VWludDMyIG1ldGhvZEluZGV4LAogICAgICAgICAgICAgICAgICAgUFJVaW50MzIgcGFyYW1Db3Vu dCwgbnNYUFRDVmFyaWFudCogcGFyYW1zKTsKCgpleHRlcm4gdm9pZCB4cHRjX2R1bW15KCk7CmV4 dGVybiB2b2lkIHhwdGNfZHVtbXkyKCk7Cgp9CiMgMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1By b3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiIDEKIyAzNyAi Li4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCgpjbGFzcyBuc1Byb3h5T2JqZWN0 Q2FsbEluZm87CiMgNzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIKY2xhc3Mg bnNQcm94eU9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgICBwdWJsaWM6 IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQq KiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBu c3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQq IF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwg ezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07IHJldHVy biBpaWQ7fQoKCiAgICBuc1Byb3h5T2JqZWN0KCk7CiAgICBuc1Byb3h5T2JqZWN0KG5zSUV2ZW50 UXVldWUgKmRlc3RRdWV1ZSwgUFJJbnQzMiBwcm94eVR5cGUsIG5zSVN1cHBvcnRzICpyZWFsT2Jq ZWN0KTsKICAgIG5zUHJveHlPYmplY3QobnNJRXZlbnRRdWV1ZSAqZGVzdFF1ZXVlLCBQUkludDMy IHByb3h5VHlwZSwgY29uc3QgbnNDSUQgJmFDbGFzcywgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwg Y29uc3QgbnNJSUQgJmFJSUQpOwoKICAgIHZpcnR1YWwgfm5zUHJveHlPYmplY3QoKTsKCiAgICBu c3Jlc3VsdCBQb3N0KCBQUlVpbnQzMiBtZXRob2RJbmRleCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnNYUFRNZXRob2RJbmZvICogaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbnNYUFRDTWluaVZhcmlhbnQgKiBwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5zSUludGVyZmFjZUluZm8gKiBpbnRlcmZhY2VJbmZvKTsKCiAgICBuc3Jlc3VsdCBQ b3N0QW5kV2FpdChuc1Byb3h5T2JqZWN0Q2FsbEluZm8gKnByb3h5SW5mbyk7CiAgICBuc0lTdXBw b3J0cyogR2V0UmVhbE9iamVjdCgpIGNvbnN0OwogICAgbnNJRXZlbnRRdWV1ZSogR2V0UXVldWUo KSBjb25zdDsKICAgIFBSSW50MzIgR2V0UHJveHlUeXBlKCkgY29uc3QgeyByZXR1cm4gbVByb3h5 VHlwZTsgfQoKICAgIGZyaWVuZCBjbGFzcyBuc1Byb3h5RXZlbnRPYmplY3Q7CnByaXZhdGU6Cgog ICAgUFJJbnQzMiBtUHJveHlUeXBlOwoKICAgIG5zQ09NUHRyPG5zSUV2ZW50UXVldWU+IG1EZXN0 UXVldWU7CgogICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1SZWFsT2JqZWN0OwoKICAgIG5zQ09N UHRyPG5zSUV2ZW50UXVldWVTZXJ2aWNlPiBtRXZlbnRRU2VydmljZTsKCiAgICBuc3Jlc3VsdCBj b252ZXJ0TWluaVZhcmlhbnRUb1ZhcmlhbnQobnNYUFRNZXRob2RJbmZvICogbWV0aG9kSW5mbywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQVENNaW5pVmFyaWFu dCAqIHBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQ VENWYXJpYW50ICoqZnVsbFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4ICpwYXJhbUNvdW50KTsKCn07CgoKY2xhc3MgbnNQcm94eU9iamVjdENhbGxJ bmZvCnsKcHVibGljOgoKICAgIG5zUHJveHlPYmplY3RDYWxsSW5mbyhuc1Byb3h5T2JqZWN0KiBv d25lciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQVE1ldGhvZEluZm8gKm1ldGhvZElu Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgbWV0aG9kSW5kZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgbnNYUFRDVmFyaWFudCogcGFyYW1ldGVyTGlzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBwYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBQTEV2ZW50ICpldmVudCk7CgogICAgdmlydHVhbCB+bnNQcm94eU9iamVj dENhbGxJbmZvKCk7CgogICAgUFJVaW50MzIgR2V0TWV0aG9kSW5kZXgoKSBjb25zdCB7IHJldHVy biBtTWV0aG9kSW5kZXg7IH0KICAgIG5zWFBUQ1ZhcmlhbnQqIEdldFBhcmFtZXRlckxpc3QoKSBj b25zdCB7IHJldHVybiBtUGFyYW1ldGVyTGlzdDsgfQogICAgUFJVaW50MzIgR2V0UGFyYW1ldGVy Q291bnQoKSBjb25zdCB7IHJldHVybiBtUGFyYW1ldGVyQ291bnQ7IH0KICAgIFBMRXZlbnQqIEdl dFBMRXZlbnQoKSBjb25zdCB7IHJldHVybiBtRXZlbnQ7IH0KICAgIG5zcmVzdWx0IEdldFJlc3Vs dCgpIGNvbnN0IHsgcmV0dXJuIG1SZXN1bHQ7IH0KICAgIG5zUHJveHlPYmplY3QqIEdldFByb3h5 T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbU93bmVyOyB9CgogICAgUFJCb29sIEdldENvbXBsZXRl ZCgpOwogICAgdm9pZCBTZXRDb21wbGV0ZWQoKTsKICAgIHZvaWQgUG9zdENvbXBsZXRlZCgpOwoK ICAgIHZvaWQgU2V0UmVzdWx0KG5zcmVzdWx0IHJ2KSB7bVJlc3VsdCA9IHJ2OyB9CgogICAgbnNJ RXZlbnRRdWV1ZSogR2V0Q2FsbGVyc1F1ZXVlKCk7CiAgICB2b2lkIFNldENhbGxlcnNRdWV1ZShu c0lFdmVudFF1ZXVlKiBxdWV1ZSk7Cgpwcml2YXRlOgoKICAgIG5zcmVzdWx0IG1SZXN1bHQ7CiAg ICBuc1hQVE1ldGhvZEluZm8gKm1NZXRob2RJbmZvOwogICAgUFJVaW50MzIgbU1ldGhvZEluZGV4 OwogICAgbnNYUFRDVmFyaWFudCAqbVBhcmFtZXRlckxpc3Q7CiAgICBQUlVpbnQzMiBtUGFyYW1l dGVyQ291bnQ7CiAgICBQTEV2ZW50ICptRXZlbnQ7CiAgICBQUkludDMyIG1Db21wbGV0ZWQ7Cgog ICAgbnNDT01QdHI8bnNJRXZlbnRRdWV1ZT4gbUNhbGxlcnNFdmVudFE7CgoKCiAgICBuc0NPTVB0 cjxuc1Byb3h5T2JqZWN0PiBtT3duZXI7CgogICAgdm9pZCBSZWZDb3VudEluSW50ZXJmYWNlUG9p bnRlcnMoUFJCb29sIGFkZFJlZik7CiAgICB2b2lkIENvcHlTdHJpbmdzKFBSQm9vbCBjb3B5KTsK Cn07CiMgMTAwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJveHlPYmplY3RNYW5hZ2VyLmgiIDIK IyAxMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcm94eU9iamVjdE1hbmFnZXIuaCIKZXh0ZXJu IG5zcmVzdWx0Ck5TX0dldFByb3h5Rm9yT2JqZWN0KG5zSUV2ZW50UXVldWUgKmRlc3RRdWV1ZSwK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgICAg ICAgIG5zSVN1cHBvcnRzKiBhT2JqLAogICAgICAgICAgICAgICAgICAgICBQUkludDMyIHByb3h5 VHlwZSwKICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFQcm94eU9iamVjdCk7CiMgNzEgIm5z U29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJveGllZFNl cnZpY2UuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94aWVkU2VydmljZS5oIgoj IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMgMjggIi4uLy4u L2Rpc3QvaW5jbHVkZS9uc1Byb3hpZWRTZXJ2aWNlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1 ZGUvbnNJUHJveHlPYmplY3RNYW5hZ2VyLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z UHJveGllZFNlcnZpY2UuaCIgMgojIDc4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94aWVkU2Vy dmljZS5oIgpjbGFzcyBuc1Byb3hpZWRTZXJ2aWNlCnsKIHB1YmxpYzoKCiAgICBuc1Byb3hpZWRT ZXJ2aWNlKGNvbnN0IG5zQ0lEICZhQ2xhc3MsIGNvbnN0IG5zSUlEICZhSUlELAogICAgICAgICAg ICAgICAgICAgICBuc0lFdmVudFF1ZXVlKiBwSVByb3h5UXVldWUsIFBSQm9vbCBhbHdheXMsIG5z cmVzdWx0KnJ2KQogICAgewogICAgICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtQcm94eU9iamVjdE1h bmFnZXJDSUQgPSB7IDB4ZWVhOTBkNDEsIDB4YjA1OSwgMHgxMWQyLCB7MHg5MSwgMHg1ZSwgMHhj MSwgMHgyYiwgMHg2OSwgMHg2YywgMHg5MywgMHgzM319OwoKCiAgICAgICAqcnYgPSBuc1NlcnZp Y2VNYW5hZ2VyOjpHZXRTZXJ2aWNlKGFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlcnZpY2UpKTsKICAgICAgIGlmICgoKCpydikgJiAweDgw MDAwMDAwKSkgcmV0dXJuOwoKICAgICAgIG5zQ09NUHRyPG5zSVByb3h5T2JqZWN0TWFuYWdlcj4g cElQcm94eU9iamVjdE1hbmFnZXIgPSBkb19HZXRTZXJ2aWNlKGtQcm94eU9iamVjdE1hbmFnZXJD SUQsIHJ2KTs7CgogICAgICAgaWYgKCgoKnJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm47CgogICAg ICAgUFJJbnQzMiBwcm94eVR5cGUgPSAweDAwMDE7CiAgICAgICBpZiAoYWx3YXlzKSBwcm94eVR5 cGUgfD0gMHgwMDA0OwogICAgICAgKnJ2ID0gcElQcm94eU9iamVjdE1hbmFnZXItPkdldFByb3h5 Rm9yT2JqZWN0KHBJUHJveHlRdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByb3h5VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtUHJveGllZFNlcnZpY2UpKTsK ICAgIH0KCgogICAgfm5zUHJveGllZFNlcnZpY2UoKQogICAgewogICAgfQoKICAgbnNJU3VwcG9y dHMqIG9wZXJhdG9yLT4oKSBjb25zdAogICB7CiAgICAgICBpZiAoIShtUHJveGllZFNlcnZpY2Ug IT0gMCkpIG5zRGVidWc6OlByZUNvbmRpdGlvbigiWW91ciBjb2RlIHNob3VsZCB0ZXN0IHRoZSBl cnJvciByZXN1bHQgZnJvbSB0aGUgY29uc3RydWN0b3IuIiwgIm1Qcm94aWVkU2VydmljZSAhPSAw IiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3hpZWRTZXJ2aWNlLmgiLCAxMTMpOwogICAgICAg cmV0dXJuIG1Qcm94aWVkU2VydmljZTsKICAgfQoKICAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3Qg bnNJU3VwcG9ydHMqIG90aGVyKQogICB7CiAgICAgIHJldHVybiAoKG1Qcm94aWVkU2VydmljZSA9 PSBvdGhlcikgfHwgKG1TZXJ2aWNlID09IG90aGVyKSk7CiAgIH0KCiAgIG9wZXJhdG9yIG5zSVN1 cHBvcnRzKigpIGNvbnN0CiAgIHsKICAgICAgIHJldHVybiBtUHJveGllZFNlcnZpY2U7CiAgIH0K CiBwcm90ZWN0ZWQ6CiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtUHJveGllZFNlcnZpY2U7CiAg IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VydmljZTsKCiB9OwojIDcyICJuc1NvZnR3YXJlVXBk YXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVSZWdpc3RyeS5oIiAx CiMgNzMgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u c0NVUklMb2FkZXIuaCIgMQojIDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDVVJJTG9hZGVyLmgi CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSUxvYWRlci5oIiAxCiMgMTcgIi4uLy4uL2Rp c3QvaW5jbHVkZS9uc0lVUklMb2FkZXIuaCIKY2xhc3MgbnNJVVJJQ29udGVudExpc3RlbmVyOwoK Y2xhc3MgbnNJVVJJOwoKY2xhc3MgbnNJTG9hZEdyb3VwOwoKY2xhc3MgbnNJRG9jdW1lbnRMb2Fk ZXI7CgpjbGFzcyBuc0lQcm9ncmVzc0V2ZW50U2luazsKCmNsYXNzIG5zSUNoYW5uZWw7CgpjbGFz cyBuc0lSZXF1ZXN0OwoKY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CgpjbGFzcyBuc0lJbnB1dFN0 cmVhbTsKCnR5cGVkZWYgUFJJbnQzMiBuc1VSSUxvYWRDb21tYW5kOwojIDQ1ICIuLi8uLi9kaXN0 L2luY2x1ZGUvbnNJVVJJTG9hZGVyLmgiCmNsYXNzIG5zSVVSSUxvYWRlciA6IHB1YmxpYyBuc0lT dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0MGFlY2I1MywgMHg4YjY1LCAweDExZDMsIHsgMHg5OCwg MHg5ZCwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5YiB9fTsgcmV0dXJuIGlpZDt9 CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29udGVudExpc3RlbmVyKG5zSVVSSUNvbnRl bnRMaXN0ZW5lciAqYUNvbnRlbnRMaXN0ZW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBV blJlZ2lzdGVyQ29udGVudExpc3RlbmVyKG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqYUNvbnRlbnRM aXN0ZW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuVVJJKG5zSUNoYW5uZWwgKmFD aGFubmVsLCBuc1VSSUxvYWRDb21tYW5kIGFDb21tYW5kLCBuc0lTdXBwb3J0cyAqYVdpbmRvd0Nv bnRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblVSSVZpYShuc0lDaGFubmVsICph Q2hhbm5lbCwgbnNVUklMb2FkQ29tbWFuZCBhQ29tbWFuZCwgbnNJU3VwcG9ydHMgKmFXaW5kb3dD b250ZXh0LCBQUlVpbnQzMiBhZGFwdGVyQmluZGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBTdG9wKG5zSVN1cHBvcnRzICphTG9hZENvb2tpZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs dCBHZXRMb2FkR3JvdXBGb3JDb250ZXh0KG5zSVN1cHBvcnRzICphV2luZG93Q29udGV4dCwgbnNJ TG9hZEdyb3VwICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVu dExvYWRlckZvckNvbnRleHQobnNJU3VwcG9ydHMgKmFXaW5kb3dDb250ZXh0LCBuc0lEb2N1bWVu dExvYWRlciAqKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7IHZpZXdOb3JtYWwgPSAwIH07CgogIGVu dW0geyB2aWV3VXNlckNsaWNrID0gNyB9OwoKICBlbnVtIHsgdmlld05vcm1hbEJhY2tncm91bmQg PSAwIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc3BhdGNoQ29udGVudChjb25zdCBjaGFyICph Q29udGVudFR5cGUsIG5zVVJJTG9hZENvbW1hbmQgYUNvbW1hbmQsIG5zSVJlcXVlc3QgKmFSZXF1 ZXN0LCBuc0lTdXBwb3J0cyAqYUN0eHQsIG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqYUNvbnRlbnRM aXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFTcmNXaW5kb3dDb250ZXh0LCBjaGFyICoqYURlc2lyZWRD b250ZW50VHlwZSwgbnNJVVJJQ29udGVudExpc3RlbmVyICoqYVRhcmdldExpc3RlbmVyLCBQUkJv b2wgKmFib3J0RGlzcGF0Y2gpID0gMDsKCn07CiMgMTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NV UklMb2FkZXIuaCIgMgojIDc1ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKZXh0ZXJuICJDIiB2 b2lkIFJ1bkNocm9tZUluc3RhbGxPblRocmVhZCh2b2lkICpkYXRhKTsKCgoKCnN0YXRpYyBjb25z dCBuc0NJRCBrQ29tcG9uZW50TWFuYWdlckNJRCA9IHsgMHg5MTc3NWQ2MCwgMHhkNWRjLCAweDEx ZDIsIHsweDkyLCAweGZiLCAweDAwLCAweGUwLCAweDk4LCAweDA1LCAweDU3LCAweDBmfSB9OwoK c3RhdGljIGNvbnN0IG5zQ0lEIGtDU2NyaXB0TmFtZVNldFJlZ2lzdHJ5Q0lEID0geyAweDQ1ZjI3 ZDEwLCAweDk4N2IsIDB4MTFkMiwgezB4YmQsIDB4NDAsIDB4MDAsIDB4MTAsIDB4NWEsIDB4YTQs IDB4NWUsIDB4ODl9IH07CnN0YXRpYyBjb25zdCBuc0NJRCBrSW5zdGFsbFRyaWdnZXJfQ0lEID0g eyAweDE4YzJmOThkLCAweGIwOWYsIDB4MTFkMiwgezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4 NWYsIDB4MGUsIDB4MTMsIDB4NTN9IH07CgpzdGF0aWMgY29uc3QgbnNDSUQga0luc3RhbGxWZXJz aW9uX0NJRCA9IHsgMHgxOGMyZjk4ZiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAw LCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfSB9OwoKc3RhdGljIGNvbnN0IG5zQ0lEIGtD aHJvbWVSZWdpc3RyeUNJRCA9IHsgMHhkOGM3ZDhhMiwgMHhlODRjLCAweDExZDIsIHsgMHhiZiwg MHg4NywgMHgwLCAweDEwLCAweDVhLCAweDFiLCAweDYsIDB4MjcgfSB9OwpzdGF0aWMgY29uc3Qg bnNDSUQga25zUmVnaXN0cnlDSUQgPSB7IDB4YmU3NjFmMDAsIDB4YTNiMCwgMHgxMWQyLCB7MHg5 OSwgMHg2YywgMHgwMCwgMHg4MCwgMHhjNywgMHhjYiwgMHgxMCwgMHg4MX0gfTsKCnN0YXRpYyBj b25zdCBuc0NJRCBrSVByb2Nlc3NDSUQgPSB7MHg3YjRlZWIyMCwgMHhkNzgxLCAweDExZDQsIHsw eDhBLCAweDgzLCAweDAwLCAweDEwLCAweGE0LCAweGUwLCAweGM5LCAweGNhfX07Cgpuc1NvZnR3 YXJlVXBkYXRlKiBuc1NvZnR3YXJlVXBkYXRlOjptSW5zdGFuY2UgPSAwOwpuc0NPTVB0cjxuc0lG aWxlPiBuc1NvZnR3YXJlVXBkYXRlOjptUHJvZ3JhbURpciA9IDA7CmNoYXIqIG5zU29mdHdhcmVV cGRhdGU6Om1Mb2dOYW1lID0gMDsKUFJCb29sIG5zU29mdHdhcmVVcGRhdGU6Om1OZWVkQ2xlYW51 cCA9IDA7CgoKbnNTb2Z0d2FyZVVwZGF0ZSAqCm5zU29mdHdhcmVVcGRhdGU6OkdldEluc3RhbmNl KCkKewogICAgaWYgKG1JbnN0YW5jZSA9PSAwKQogICAgICAgIG1JbnN0YW5jZSA9IG5ldyBuc1Nv ZnR3YXJlVXBkYXRlKCk7CgogICAgKCgwICE9IChtSW5zdGFuY2UpKSA/IG5zX2lmX2FkZHJlZiht SW5zdGFuY2UpIDogMCk7CiAgICByZXR1cm4gbUluc3RhbmNlOwp9CgoKCm5zU29mdHdhcmVVcGRh dGU6Om5zU29mdHdhcmVVcGRhdGUoKQo6IG1JbnN0YWxsaW5nKDApLAogIG1NYXN0ZXJMaXN0ZW5l cigwKSwKICBtUmVnKDApCnsKICAgIChtUmVmQ250ID0gMCwgKF9tT3duaW5nVGhyZWFkID0gTlNf Q3VycmVudFRocmVhZCgpKSk7CgogICAgbUxvY2sgPSBQUl9OZXdMb2NrKCk7CgoKCgoKICAgIE5S X1N0YXJ0dXBSZWdpc3RyeSgpOwoKCiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSVBy b3BlcnRpZXM+IGRpcmVjdG9yeVNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcv ZmlsZS9kaXJlY3Rvcnlfc2VydmljZTsxIiwgJnJ2KTs7CgogICAgaWYoIWRpcmVjdG9yeVNlcnZp Y2UpIHJldHVybjsKCiAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGRpcjsKICAgIGRpcmVjdG9y eVNlcnZpY2UtPkdldCgiQ3VyUHJvY0QiLCBuc0NPTVR5cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQo KSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAoZGlyKQogICAgewogICAgICAgIGNoYXIq IG5hdGl2ZVBhdGg7CiAgICAgICAgZGlyLT5HZXRQYXRoKCZuYXRpdmVQYXRoKTsKCiAgICAgICAg VlJfU2V0UmVnRGlyZWN0b3J5KCBuYXRpdmVQYXRoICk7CiAgICAgICAgaWYgKG5hdGl2ZVBhdGgp CiAgICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKG5hdGl2ZVBhdGgpOwoKICAgIH0KCgoKICAgIG5z Q09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gb2JzZXJ2ZXJTZXJ2aWNlID0gZG9fR2V0U2Vydmlj ZSgiQG1vemlsbGEub3JnL29ic2VydmVyLXNlcnZpY2U7MSIsICZydik7OwoKCiAgICBpZiAoKCEo KHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICBvYnNlcnZlclNlcnZpY2UtPkFkZE9ic2VydmVy KHRoaXMsIHN0YXRpY19jYXN0PCBjb25zdCBuc0FGbGF0U3RyaW5nJiA+KE5TX0NvbnZlcnRBU0NJ SXRvVUNTMigieHBjb20tc2h1dGRvd24iLCBQUlVpbnQzMihzaXplb2YoInhwY29tLXNodXRkb3du IiktMSkpKS5nZXQoKSk7Cn0KCgpuc1NvZnR3YXJlVXBkYXRlOjp+bnNTb2Z0d2FyZVVwZGF0ZSgp CnsKICAgIFBSX0xvY2sobUxvY2spOwoKICAgIG5zSW5zdGFsbEluZm8qIGVsZW1lbnQ7CiAgICBm b3IgKFBSSW50MzIgaT0wOyBpIDwgbUphckluc3RhbGxRdWV1ZS5Db3VudCgpOyBpKyspCiAgICB7 CiAgICAgICAgZWxlbWVudCA9IChuc0luc3RhbGxJbmZvKiltSmFySW5zdGFsbFF1ZXVlLkVsZW1l bnRBdChpKTsKCiAgICAgICAgZGVsZXRlIGVsZW1lbnQ7CiAgICB9CgogICAgbUphckluc3RhbGxR dWV1ZS5DbGVhcigpOwoKICAgIFBSX1VubG9jayhtTG9jayk7CiAgICBQUl9EZXN0cm95TG9jayht TG9jayk7CgogICAgTlJfU2h1dGRvd25SZWdpc3RyeSgpOwoKICAgIGRvIHsgaWYgKG1NYXN0ZXJM aXN0ZW5lcikgeyAobU1hc3Rlckxpc3RlbmVyKS0+UmVsZWFzZSgpOyAobU1hc3Rlckxpc3RlbmVy KSA9IDA7IH0gfSB3aGlsZSAoMCk7CiAgICBtSW5zdGFuY2UgPSAwOwoKICAgIGlmIChtTG9nTmFt ZSkgeyBQUl9GcmVlKG1Mb2dOYW1lKTsgKG1Mb2dOYW1lKSA9IF9fbnVsbDsgfTsKfQoKCgoKCgpu c3JlZmNudCBuc1NvZnR3YXJlVXBkYXRlOjpBZGRSZWYodm9pZCkgeyBpZiAoIShQUkludDMyKG1S ZWZDbnQpID49IDApKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImlsbGVnYWwgcmVmY250IiwgIlBS SW50MzIobVJlZkNudCkgPj0gMCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDE4NSk7IG5zcmVm Y250IGNvdW50OyBjb3VudCA9IFBSX0F0b21pY0luY3JlbWVudCgoUFJJbnQzMiopJm1SZWZDbnQp OyBuc1RyYWNlUmVmY250OjpMb2dBZGRSZWYoKHRoaXMpLCAoY291bnQpLCAoIm5zU29mdHdhcmVV cGRhdGUiKSwgKFBSVWludDMyKSAoc2l6ZW9mKCp0aGlzKSkpOyByZXR1cm4gY291bnQ7IH0gbnNy ZWZjbnQgbnNTb2Z0d2FyZVVwZGF0ZTo6UmVsZWFzZSh2b2lkKSB7IG5zcmVmY250IGNvdW50OyBp ZiAoISgwICE9IG1SZWZDbnQpKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImR1cCByZWxlYXNlIiwg IjAgIT0gbVJlZkNudCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDE4NSk7IGNvdW50ID0gUFJf QXRvbWljRGVjcmVtZW50KChQUkludDMyICopJm1SZWZDbnQpOyBuc1RyYWNlUmVmY250OjpMb2dS ZWxlYXNlKCh0aGlzKSwgKGNvdW50KSwgKCJuc1NvZnR3YXJlVXBkYXRlIikpOyBpZiAoMCA9PSBj b3VudCkgeyBtUmVmQ250ID0gMTsgZG8geyA7IGRlbGV0ZSAodGhpcyk7IH0gd2hpbGUgKDApOyBy ZXR1cm4gMDsgfSByZXR1cm4gY291bnQ7IH0gbnNyZXN1bHQgbnNTb2Z0d2FyZVVwZGF0ZTo6UXVl cnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpIHsgaWYg KCEoYUluc3RhbmNlUHRyKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJRdWVyeUludGVyZmFjZSByZXF1 aXJlcyBhIG5vbi1OVUxMIGRlc3RpbmF0aW9uISIsICJhSW5zdGFuY2VQdHIiLCAibnNTb2Z0d2Fy ZVVwZGF0ZS5jcHAiLCAxODUpOyBpZiAoICFhSW5zdGFuY2VQdHIgKSByZXR1cm4gKChuc3Jlc3Vs dCkgMHg4MDAwNDAwM0wpOyBuc0lTdXBwb3J0cyogZm91bmRJbnRlcmZhY2U7IGlmICggYUlJRC5F cXVhbHMobnNDT01UeXBlSW5mbzxuc0lTb2Z0d2FyZVVwZGF0ZT46OkdldElJRCgpKSApIGZvdW5k SW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVNvZnR3YXJlVXBkYXRlKiA+KHRoaXMpOyBlbHNl IGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc1BJWFBJU3R1Ykhvb2s+OjpHZXRJSUQo KSkgKSBmb3VuZEludGVyZmFjZSA9IHN0YXRpY19jYXN0PCBuc1BJWFBJU3R1Ykhvb2sqID4odGhp cyk7IGVsc2UgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSU9ic2VydmVyPjo6R2V0 SUlEKCkpICkgZm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJT2JzZXJ2ZXIqID4odGhp cyk7IGVsc2UgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0 SUlEKCkpICkgZm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJU3VwcG9ydHMqID4oc3Rh dGljX2Nhc3Q8IG5zSVNvZnR3YXJlVXBkYXRlKiA+KHRoaXMpKTsgZWxzZSBmb3VuZEludGVyZmFj ZSA9IDA7IG5zcmVzdWx0IHN0YXR1czsgaWYgKCAhZm91bmRJbnRlcmZhY2UgKSB7IHN0YXRpYyBj b25zdCBuc0lJRCBrSXNUaHJlYWRzYWZlSUlEID0geyAweDg4MjEwODkwLCAweDQ3YTYsIDB4MTFk MiwgezB4YmUsIDB4YzMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NjYsIDB4ZGN9IH07IHN0 YXR1cyA9IGFJSUQuRXF1YWxzKGtJc1RocmVhZHNhZmVJSUQpID8gMCA6ICgobnNyZXN1bHQpIDB4 ODAwMDQwMDJMKTsgfSBlbHNlIHsgKGZvdW5kSW50ZXJmYWNlKS0+QWRkUmVmKCk7IHN0YXR1cyA9 IDA7IH0gKmFJbnN0YW5jZVB0ciA9IGZvdW5kSW50ZXJmYWNlOyByZXR1cm4gc3RhdHVzOyB9OwoK CgoKdm9pZApuc1NvZnR3YXJlVXBkYXRlOjpTaHV0ZG93bigpCnsKICAgIGlmIChtTmVlZENsZWFu dXApCiAgICB7CgogICAgICAgIG5zcmVzdWx0IHJ2OwogICAgICAgIG5zQ09NUHRyPG5zSUxvY2Fs RmlsZT4gcGF0aFRvQ2xlYW51cFV0aWxpdHk7CgogICAgICAgIG5zQ09NUHRyPG5zSVByb3BlcnRp ZXM+IGRpcmVjdG9yeVNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZmlsZS9k aXJlY3Rvcnlfc2VydmljZTsxIiwgJnJ2KTs7CiAgICAgICAgZGlyZWN0b3J5U2VydmljZS0+R2V0 KCJDdXJQcm9jRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88 bnNJRmlsZT46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJf QWRkUmVmcyhwYXRoVG9DbGVhbnVwVXRpbGl0eSkpOwoKCgoKICAgICAgICBwYXRoVG9DbGVhbnVw VXRpbGl0eS0+QXBwZW5kKCJ4cGljbGVhbnVwIik7CiAgICAgICAgbnNDT01QdHI8bnNJUHJvY2Vz cz4gY2xlYW51cFByb2Nlc3MgPSBkb19DcmVhdGVJbnN0YW5jZShrSVByb2Nlc3NDSUQpOwogICAg ICAgIHJ2ID0gY2xlYW51cFByb2Nlc3MtPkluaXQocGF0aFRvQ2xlYW51cFV0aWxpdHkpOwogICAg ICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpKQogICAgICAgIHsKCiAgICAgICAgICAgIHJ2 ID0gY2xlYW51cFByb2Nlc3MtPlJ1bigwLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICB9Cn0KCm5z cmVzdWx0IG5zU29mdHdhcmVVcGRhdGU6Ok9ic2VydmUobnNJU3VwcG9ydHMgKmFTdWJqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyICph VG9waWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVu aWNoYXIgKmFEYXRhKQp7CiAgICBuc0RlcGVuZGVudFN0cmluZyB0b3BpY1N0cmluZyhhVG9waWMp OwogICAgaWYgKHRvcGljU3RyaW5nLkVxdWFscyhzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0 cmluZyYgPihOU19Db252ZXJ0QVNDSUl0b1VDUzIoInhwY29tLXNodXRkb3duIiwgUFJVaW50MzIo c2l6ZW9mKCJ4cGNvbS1zaHV0ZG93biIpLTEpKSkpKQogICAgICBTaHV0ZG93bigpOwoKICAgIHJl dHVybiAwOwp9Cgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpSZWdpc3Rlckxpc3RlbmVyKG5z SVhQSUxpc3RlbmVyICphTGlzdGVuZXIpCnsKCgoKICAgIGlmICghbU1hc3Rlckxpc3RlbmVyKQog ICAgICAgIENyZWF0ZU1hc3Rlckxpc3RlbmVyKCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIp CiAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgICBtTWFzdGVyTGlz dGVuZXItPlJlZ2lzdGVyTGlzdGVuZXIoYUxpc3RlbmVyKTsKICAgIHJldHVybiAwOwp9Cgpuc3Jl c3VsdApuc1NvZnR3YXJlVXBkYXRlOjpHZXRNYXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAq KmFMaXN0ZW5lcikKewogICAgaWYgKCEoYUxpc3RlbmVyKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJn ZXR0ZXIgaGFzIGludmFsaWQgcmV0dXJuIHBvaW50ZXIiLCAiYUxpc3RlbmVyIiwgIm5zU29mdHdh cmVVcGRhdGUuY3BwIiwgMjQ4KTsKICAgIGlmICghYUxpc3RlbmVyKQogICAgICAgIHJldHVybiAo KG5zcmVzdWx0KSAweDgwMDA0MDAzTCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIpCiAgICAg ICAgQ3JlYXRlTWFzdGVyTGlzdGVuZXIoKTsKCiAgICBpZiAoIW1NYXN0ZXJMaXN0ZW5lcikKICAg ICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwoKICAgIChtTWFzdGVyTGlzdGVu ZXIpLT5BZGRSZWYoKTsKICAgICphTGlzdGVuZXIgPSBtTWFzdGVyTGlzdGVuZXI7CiAgICByZXR1 cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6OlNldEFjdGl2ZUxpc3RlbmVyKG5z SVhQSUxpc3RlbmVyICphTGlzdGVuZXIpCnsKICAgIGlmICghbU1hc3Rlckxpc3RlbmVyKQogICAg ICAgIENyZWF0ZU1hc3Rlckxpc3RlbmVyKCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIpCiAg ICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgICBtTWFzdGVyTGlzdGVu ZXItPlNldEFjdGl2ZUxpc3RlbmVyIChhTGlzdGVuZXIpOwogICAgcmV0dXJuIDA7Cn0KCnZvaWQg bnNTb2Z0d2FyZVVwZGF0ZTo6Q3JlYXRlTWFzdGVyTGlzdGVuZXIoKQp7CiAgICBtTWFzdGVyTGlz dGVuZXIgPSBuZXcgbnNUb3BQcm9ncmVzc0xpc3RlbmVyOwogICAgaWYgKG1NYXN0ZXJMaXN0ZW5l cikKICAgIHsKICAgICAgICAobU1hc3Rlckxpc3RlbmVyKS0+QWRkUmVmKCk7CgogICAgICAgIG5z TG9nZ2luZ1Byb2dyZXNzTGlzdGVuZXIgKmxvZ2dlciA9IG5ldyBuc0xvZ2dpbmdQcm9ncmVzc0xp c3RlbmVyKCk7CiAgICAgICAgbU1hc3Rlckxpc3RlbmVyLT5SZWdpc3Rlckxpc3RlbmVyKGxvZ2dl cik7CiAgICB9Cn0KCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6Okluc3RhbGxKYXIoIG5zSUZp bGUqIGFMb2NhbEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVu aWNoYXIqIGFVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNo YXIqIGFBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01XaW5k b3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBJTGlz dGVuZXIqIGFMaXN0ZW5lcikKewogICAgaWYgKCAhYUxvY2FsRmlsZSApCiAgICAgICAgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsKCgogICAgbnNyZXN1bHQgcnY7CiAgICBuc0lDaHJv bWVSZWdpc3RyeSogY2hyb21lUmVnID0gMDsKICAgIG5zUHJveGllZFNlcnZpY2UgX3NlcnZ0bXBS ZWcoa0Nocm9tZVJlZ2lzdHJ5Q0lELCBuc0NPTVR5cGVJbmZvPG5zSUNocm9tZVJlZ2lzdHJ5Pjo6 R2V0SUlEKCksICgobnNJRXZlbnRRdWV1ZSopMSksIDEsICZydik7IG5zSUNocm9tZVJlZ2lzdHJ5 KiB0bXBSZWcgPSAobnNJQ2hyb21lUmVnaXN0cnkqKShuc0lTdXBwb3J0cyopX3NlcnZ0bXBSZWc7 OwoKCgogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpCiAgICAgICAgY2hyb21lUmVnID0g dG1wUmVnOwoKCiAgICBuc0luc3RhbGxJbmZvICppbmZvID0gbmV3IG5zSW5zdGFsbEluZm8oIDAs IGFMb2NhbEZpbGUsIGFVUkwsIGFBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzLCBhTGlzdGVuZXIsIGFQYXJlbnRXaW5kb3csIGNocm9t ZVJlZyApOwoKICAgIGlmICghaW5mbykKICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3 MDAwZUwpOwoKICAgIFBSX0xvY2sobUxvY2spOwogICAgbUphckluc3RhbGxRdWV1ZS5BcHBlbmRF bGVtZW50KCBpbmZvICk7CiAgICBQUl9VbmxvY2sobUxvY2spOwogICAgUnVuTmV4dEluc3RhbGwo KTsKCiAgICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6Okluc3RhbGxD aHJvbWUoIFBSVWludDMyIGFUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJV bmljaGFyKiBVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5p Y2hhciogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2Vs ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxp c3RlbmVyKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zUHJveGllZFNlcnZpY2UgX3NlcnZjaHJv bWVSZWcoa0Nocm9tZVJlZ2lzdHJ5Q0lELCBuc0NPTVR5cGVJbmZvPG5zSUNocm9tZVJlZ2lzdHJ5 Pjo6R2V0SUlEKCksICgobnNJRXZlbnRRdWV1ZSopMSksIDEsICZydik7IG5zSUNocm9tZVJlZ2lz dHJ5KiBjaHJvbWVSZWcgPSAobnNJQ2hyb21lUmVnaXN0cnkqKShuc0lTdXBwb3J0cyopX3NlcnZj aHJvbWVSZWc7OwoKCgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpCiAgICAgICAgcmV0dXJu IHJ2OwoKICAgIG5zSW5zdGFsbEluZm8gKmluZm8gPSBuZXcgbnNJbnN0YWxsSW5mbyggYVR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGaWxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkwsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFJVaW50MzIpYVNlbGVjdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUxpc3RlbmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWVSZWcpOwogICAgaWYgKCFpbmZvKQogICAg ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CgogICAgUFJfQ3JlYXRlVGhyZWFk KFBSX1VTRVJfVEhSRUFELAogICAgICAgICAgICAgICAgICAgIFJ1bkNocm9tZUluc3RhbGxPblRo cmVhZCwKICAgICAgICAgICAgICAgICAgICAodm9pZCopaW5mbywKICAgICAgICAgICAgICAgICAg ICBQUl9QUklPUklUWV9OT1JNQUwsCiAgICAgICAgICAgICAgICAgICAgUFJfR0xPQkFMX1RIUkVB RCwKICAgICAgICAgICAgICAgICAgICBQUl9VTkpPSU5BQkxFX1RIUkVBRCwKICAgICAgICAgICAg ICAgICAgICAwKTsKCiAgICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6 Okluc3RhbGxKYXJDYWxsQmFjaygpCnsKICAgIFBSX0xvY2sobUxvY2spOwoKICAgIG5zSW5zdGFs bEluZm8gKm5leHRJbnN0YWxsID0gKG5zSW5zdGFsbEluZm8qKW1KYXJJbnN0YWxsUXVldWUuRWxl bWVudEF0KDApOwogICAgaWYgKG5leHRJbnN0YWxsICE9IDApCiAgICAgICAgZGVsZXRlIG5leHRJ bnN0YWxsOwoKICAgIG1KYXJJbnN0YWxsUXVldWUuUmVtb3ZlRWxlbWVudEF0KDApOwogICAgbUlu c3RhbGxpbmcgPSAwOwoKICAgIFBSX1VubG9jayhtTG9jayk7CgogICAgcmV0dXJuIFJ1bk5leHRJ bnN0YWxsKCk7Cn0KCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpTdGFydHVwVGFza3MoIFBS Qm9vbCAqbmVlZEF1dG9yZWcgKQp7CiAgICBQUkJvb2wgYXV0b1JlZyA9IDA7CiAgICBSS0VZIHhw aVJvb3Q7CiAgICBSRUdFUlIgZXJyOwoKICAgICpuZWVkQXV0b3JlZyA9IDE7CgoKCgoKCiAgICBp ZiAoICgwKSA9PSBOUl9SZWdPcGVuKCIiLCAmbVJlZykgKQogICAgewoKICAgICAgICBQZXJmb3Jt U2NoZWR1bGVkVGFza3MobVJlZyk7CgoKICAgICAgICBlcnIgPSBOUl9SZWdHZXRLZXkoIG1SZWcs ICgweDAyKSwgInNvZnR3YXJlL21vemlsbGEveHBpbnN0YWxsIiwgJnhwaVJvb3QpOwogICAgICAg IGlmICggZXJyID09ICgwKSApCiAgICAgICAgewogICAgICAgICAgICBjaGFyIGJ1Zls4XTsKICAg ICAgICAgICAgZXJyID0gTlJfUmVnR2V0RW50cnlTdHJpbmcoIG1SZWcsIHhwaVJvb3QsICJBdXRv cmVnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9m KGJ1ZikgKTsKCiAgICAgICAgICAgIGlmICggZXJyID09ICgwKSAmJiAhc3RyY21wKCBidWYsICJ5 ZXMiICkgKQogICAgICAgICAgICAgICAgYXV0b1JlZyA9IDE7CiAgICAgICAgfQogICAgfQoKCiAg ICBuc3Jlc3VsdCBydjsKICAgIFBSSW50MzIgYnVpbGRJRCA9IC0xOwogICAgbnNSZWdpc3RyeUtl eSBpZEtleSA9IDA7CiAgICBuc0NPTVB0cjxuc0lSZWdpc3RyeT4gcmVnID0gZG9fR2V0U2Vydmlj ZShrbnNSZWdpc3RyeUNJRCwmcnYpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpCiAg ICB7CiAgICAgICAgcnYgPSByZWctPk9wZW5XZWxsS25vd25SZWdpc3RyeShuc0lSZWdpc3RyeTo6 QXBwbGljYXRpb25Db21wb25lbnRSZWdpc3RyeSk7CiAgICAgICAgaWYgKCghKChydikgJiAweDgw MDAwMDAwKSkpCiAgICAgICAgewogICAgICAgICAgICBydiA9IHJlZy0+R2V0U3VidHJlZShuc0lS ZWdpc3RyeTo6Q29tbW9uLCJzb2Z0d2FyZS9tb3ppbGxhL1hQQ09NIiwmaWRLZXkpOwogICAgICAg ICAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgcnYgPSByZWctPkdldEludCggaWRLZXksICJBdXRvcmVnIiwgJmJ1aWxkSUQgKTsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCgoKICAgIGlmICggYXV0b1JlZyB8fCAoKHJ2KSAm IDB4ODAwMDAwMDApIHx8IGJ1aWxkSUQgIT0gMDAwMDAwMDAwMCApCiAgICB7CiAgICAgICAgcnYg PSBuc0NvbXBvbmVudE1hbmFnZXI6OkF1dG9SZWdpc3Rlcihuc0lDb21wb25lbnRNYW5hZ2VyOjpO U19TdGFydHVwLDApOwoKICAgICAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAg ICB7CiAgICAgICAgICAgICpuZWVkQXV0b3JlZyA9IDA7CgoKICAgICAgICAgICAgaWYgKCBhdXRv UmVnICkKICAgICAgICAgICAgICAgIE5SX1JlZ1NldEVudHJ5U3RyaW5nKCBtUmVnLCB4cGlSb290 LCAiQXV0b3JlZyIsICJubyIgKTsKCiAgICAgICAgICAgIGlmICggYnVpbGRJRCAhPSAwMDAwMDAw MDAwICYmIGlkS2V5ICE9IDAgKQogICAgICAgICAgICAgICAgcmVnLT5TZXRJbnQoIGlkS2V5LCAi QXV0b3JlZyIsIDAwMDAwMDAwMDAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7Cgog ICAgICAgICpuZWVkQXV0b3JlZyA9IDA7CgoKICAgICAgICAqbmVlZEF1dG9yZWcgPSAxOwoKICAg IH0KCiAgICByZXR1cm4gcnY7Cn0KCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpSdW5OZXh0 SW5zdGFsbCgpCnsKICAgIG5zcmVzdWx0IHJ2ID0gMDsKICAgIG5zSW5zdGFsbEluZm8qIGluZm8g PSAwOwoKICAgIFBSX0xvY2sobUxvY2spOwoKCiAgICBpZiAoIW1NYXN0ZXJMaXN0ZW5lcikKICAg ICAgICBDcmVhdGVNYXN0ZXJMaXN0ZW5lcigpOwoKICAgIGlmICghbUluc3RhbGxpbmcpCiAgICB7 CiAgICAgICAgaWYgKCBtSmFySW5zdGFsbFF1ZXVlLkNvdW50KCkgPiAwICkKICAgICAgICB7CiAg ICAgICAgICAgIGluZm8gPSAobnNJbnN0YWxsSW5mbyopbUphckluc3RhbGxRdWV1ZS5FbGVtZW50 QXQoMCk7CgogICAgICAgICAgICBpZiAoIGluZm8gKQogICAgICAgICAgICAgICAgbUluc3RhbGxp bmcgPSAxOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBu c0RlYnVnOjpFcnJvcigibGVha3MgcmVtYWluaW5nIG5zSW5zdGFsbEluZm9zLCBwbGVhc2UgZmls ZSBidWchIiwgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiwgNDg4KTsKICAgICAgICAgICAgICAgIHJ2 ID0gKChuc3Jlc3VsdCkgMHg4MDAwNDAwM0wpOwogICAgICAgICAgICAgICAgVlJfQ2xvc2UoKTsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAg ICAgVlJfQ2xvc2UoKTsKICAgICAgICB9CiAgICB9CiAgICBQUl9VbmxvY2sobUxvY2spOwoKCiAg ICBpZiAoaW5mbykKICAgICAgICBSdW5JbnN0YWxsKCBpbmZvICk7CgogICAgcmV0dXJuIHJ2Owp9 CgoKbnNyZXN1bHQKbnNTb2Z0d2FyZVVwZGF0ZTo6U3R1YkluaXRpYWxpemUobnNJRmlsZSAqYURp ciwgY29uc3QgY2hhciogbG9nTmFtZSkKewogICAgaWYgKCAhYURpciApCiAgICAgICAgcmV0dXJu ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsKCgogICAgbnNyZXN1bHQgcnYgPSBhRGlyLT5DbG9u ZShnZXR0ZXJfQWRkUmVmcyhtUHJvZ3JhbURpcikpOwoKCiAgICBuc1hQSURMQ1N0cmluZyB0ZW1w UGF0aDsKICAgIHJ2ID0gYURpci0+R2V0UGF0aChnZXR0ZXJfQ29waWVzKHRlbXBQYXRoKSk7CiAg ICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICBWUl9TZXRSZWdEaXJlY3Rvcnko IHRlbXBQYXRoICk7CgoKICAgIGlmIChsb2dOYW1lKQogICAgewogICAgICAgIG1Mb2dOYW1lID0g UExfc3RyZHVwKGxvZ05hbWUpOwogICAgICAgIGlmICghbUxvZ05hbWUpCiAgICAgICAgICAgIHJl dHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICB9CgogICAgcmV0dXJuIHJ2Owp9CgoK CgoKCm5zU29mdHdhcmVVcGRhdGVOYW1lU2V0Ojpuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCgpCnsK ICAgIChtUmVmQ250ID0gMCwgKF9tT3duaW5nVGhyZWFkID0gTlNfQ3VycmVudFRocmVhZCgpKSk7 Cn0KCm5zU29mdHdhcmVVcGRhdGVOYW1lU2V0Ojp+bnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKQp7 Cn0KCm5zcmVmY250IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpBZGRSZWYodm9pZCkgeyBpZiAo IShQUkludDMyKG1SZWZDbnQpID49IDApKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImlsbGVnYWwg cmVmY250IiwgIlBSSW50MzIobVJlZkNudCkgPj0gMCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIs IDU0OSk7IE5TX0NoZWNrVGhyZWFkU2FmZShfbU93bmluZ1RocmVhZCwgIm5zU29mdHdhcmVVcGRh dGVOYW1lU2V0IiAiIG5vdCB0aHJlYWQtc2FmZSIpOyArK21SZWZDbnQ7IG5zVHJhY2VSZWZjbnQ6 OkxvZ0FkZFJlZigodGhpcyksIChtUmVmQ250KSwgKCJuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCIp LCAoUFJVaW50MzIpIChzaXplb2YoKnRoaXMpKSk7IHJldHVybiBtUmVmQ250OyB9IG5zcmVmY250 IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpSZWxlYXNlKHZvaWQpIHsgaWYgKCEoMCAhPSBtUmVm Q250KSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJkdXAgcmVsZWFzZSIsICIwICE9IG1SZWZDbnQi LCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiLCA1NDkpOyBOU19DaGVja1RocmVhZFNhZmUoX21Pd25p bmdUaHJlYWQsICJuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCIgIiBub3QgdGhyZWFkLXNhZmUiKTsg LS1tUmVmQ250OyBuc1RyYWNlUmVmY250OjpMb2dSZWxlYXNlKCh0aGlzKSwgKG1SZWZDbnQpLCAo Im5zU29mdHdhcmVVcGRhdGVOYW1lU2V0IikpOyBpZiAobVJlZkNudCA9PSAwKSB7IG1SZWZDbnQg PSAxOyBkbyB7IDsgZGVsZXRlICh0aGlzKTsgfSB3aGlsZSAoMCk7IHJldHVybiAwOyB9IHJldHVy biBtUmVmQ250OyB9IG5zcmVzdWx0IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpRdWVyeUludGVy ZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cikgeyBpZiAoX19udWxs ID09IGFJbnN0YW5jZVB0cikgeyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwM0wpOyB9ICph SW5zdGFuY2VQdHIgPSBfX251bGw7IHN0YXRpYyBjb25zdCBuc0lJRCBrQ2xhc3NJSUQgPSBuc0NP TVR5cGVJbmZvPG5zSVNjcmlwdEV4dGVybmFsTmFtZVNldD46OkdldElJRCgpOyBpZiAoYUlJRC5F cXVhbHMoa0NsYXNzSUlEKSkgeyAqYUluc3RhbmNlUHRyID0gKHZvaWQqKSB0aGlzOyBBZGRSZWYo KTsgcmV0dXJuIDA7IH0gaWYgKGFJSUQuRXF1YWxzKG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+ OjpHZXRJSUQoKSkpIHsgKmFJbnN0YW5jZVB0ciA9ICh2b2lkKikgKChuc0lTdXBwb3J0cyopdGhp cyk7IEFkZFJlZigpOyByZXR1cm4gMDsgfSByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwMkwp OyB9OwoKCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlTmFtZVNldDo6SW5pdGlhbGl6ZU5hbWVT ZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpCnsKICAgIG5zcmVzdWx0IHJlc3Vs dCA9IDA7CgogICAgcmVzdWx0ID0gTlNfSW5pdEluc3RhbGxWZXJzaW9uQ2xhc3MoYVNjcmlwdENv bnRleHQsIDApOwogICAgaWYgKCgocmVzdWx0KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcmVzdWx0 OwoKICAgIHJlc3VsdCA9IE5TX0luaXRJbnN0YWxsVHJpZ2dlckdsb2JhbENsYXNzKGFTY3JpcHRD b250ZXh0LCAwKTsKCiAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpzdGF0aWMgbnNyZXN1bHQg bnNTb2Z0d2FyZVVwZGF0ZUNvbnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5z SUlEJiBhSUlELCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBydjsgbnNTb2Z0d2FyZVVwZGF0 ZSAqIGluc3Q7IGlmIChfX251bGwgPT0gYVJlc3VsdCkgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAw MDQwMDNMKTsgcmV0dXJuIHJ2OyB9ICphUmVzdWx0ID0gX19udWxsOyBpZiAoX19udWxsICE9IGFP dXRlcikgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNDAxMTBMKTsgcmV0dXJuIHJ2OyB9IGluc3Qg PSBuc1NvZnR3YXJlVXBkYXRlOjpHZXRJbnN0YW5jZSgpOyBpZiAoX19udWxsID09IGluc3QpIHsg cnYgPSAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IHJldHVybiBydjsgfSBydiA9IGluc3QtPlF1 ZXJ5SW50ZXJmYWNlKGFJSUQsIGFSZXN1bHQpOyBkbyB7IChpbnN0KS0+UmVsZWFzZSgpOyAoaW5z dCkgPSAwOyB9IHdoaWxlICgwKTsgcmV0dXJuIHJ2OyB9OwoKc3RhdGljIG5zcmVzdWx0IG5zSW5z dGFsbFRyaWdnZXJDb25zdHJ1Y3Rvcihuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCYg YUlJRCwgdm9pZCAqKmFSZXN1bHQpIHsgbnNyZXN1bHQgcnY7IG5zSW5zdGFsbFRyaWdnZXIgKiBp bnN0OyBpZiAoX19udWxsID09IGFSZXN1bHQpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDA0MDAz TCk7IHJldHVybiBydjsgfSAqYVJlc3VsdCA9IF9fbnVsbDsgaWYgKF9fbnVsbCAhPSBhT3V0ZXIp IHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDQwMTEwTCk7IHJldHVybiBydjsgfSBkbyB7IGluc3Qg PSBuZXcgbnNJbnN0YWxsVHJpZ2dlcigpOyA7IH0gd2hpbGUgKDApOyBpZiAoX19udWxsID09IGlu c3QpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IHJldHVybiBydjsgfSAoaW5zdCkt PkFkZFJlZigpOyBydiA9IGluc3QtPlF1ZXJ5SW50ZXJmYWNlKGFJSUQsIGFSZXN1bHQpOyBkbyB7 IChpbnN0KS0+UmVsZWFzZSgpOyAoaW5zdCkgPSAwOyB9IHdoaWxlICgwKTsgcmV0dXJuIHJ2OyB9 OwpzdGF0aWMgbnNyZXN1bHQgbnNJbnN0YWxsVmVyc2lvbkNvbnN0cnVjdG9yKG5zSVN1cHBvcnRz ICphT3V0ZXIsIGNvbnN0IG5zSUlEJiBhSUlELCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBy djsgbnNJbnN0YWxsVmVyc2lvbiAqIGluc3Q7IGlmIChfX251bGwgPT0gYVJlc3VsdCkgeyBydiA9 ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsgcmV0dXJuIHJ2OyB9ICphUmVzdWx0ID0gX19udWxs OyBpZiAoX19udWxsICE9IGFPdXRlcikgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNDAxMTBMKTsg cmV0dXJuIHJ2OyB9IGRvIHsgaW5zdCA9IG5ldyBuc0luc3RhbGxWZXJzaW9uKCk7IDsgfSB3aGls ZSAoMCk7IGlmIChfX251bGwgPT0gaW5zdCkgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM KTsgcmV0dXJuIHJ2OyB9IChpbnN0KS0+QWRkUmVmKCk7IHJ2ID0gaW5zdC0+UXVlcnlJbnRlcmZh Y2UoYUlJRCwgYVJlc3VsdCk7IGRvIHsgKGluc3QpLT5SZWxlYXNlKCk7IChpbnN0KSA9IDA7IH0g d2hpbGUgKDApOyByZXR1cm4gcnY7IH07CnN0YXRpYyBuc3Jlc3VsdCBuc1NvZnR3YXJlVXBkYXRl TmFtZVNldENvbnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5zSUlEJiBhSUlE LCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBydjsgbnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQg KiBpbnN0OyBpZiAoX19udWxsID09IGFSZXN1bHQpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDA0 MDAzTCk7IHJldHVybiBydjsgfSAqYVJlc3VsdCA9IF9fbnVsbDsgaWYgKF9fbnVsbCAhPSBhT3V0 ZXIpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDQwMTEwTCk7IHJldHVybiBydjsgfSBkbyB7IGlu c3QgPSBuZXcgbnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKTsgOyB9IHdoaWxlICgwKTsgaWYgKF9f bnVsbCA9PSBpbnN0KSB7IHJ2ID0gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyByZXR1cm4gcnY7 IH0gKGluc3QpLT5BZGRSZWYoKTsgcnYgPSBpbnN0LT5RdWVyeUludGVyZmFjZShhSUlELCBhUmVz dWx0KTsgZG8geyAoaW5zdCktPlJlbGVhc2UoKTsgKGluc3QpID0gMDsgfSB3aGlsZSAoMCk7IHJl dHVybiBydjsgfTsKIyA1ODcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIgpzdGF0aWMgbnNyZXN1bHQK UmVnaXN0ZXJTb2Z0d2FyZVVwZGF0ZSggbnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAg ICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUgKmFQYXRoLAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpjb21wb25lbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBuc01vZHVsZUNvbXBvbmVudEluZm8gKmluZm8pCnsKICBuc3Jlc3VsdCBydiA9IDA7CgogIG5z Q09NUHRyPG5zSUNhdGVnb3J5TWFuYWdlcj4gY2F0bWFuID0KICAgIGRvX0dldFNlcnZpY2UoIkBt b3ppbGxhLm9yZy9jYXRlZ29yeW1hbmFnZXI7MSIsICZydik7CiAgZG8geyBpZigoISgoISgocnYp ICYgMHg4MDAwMDAwMCkpKSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgi ICJOU19TVUNDRUVERUQocnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIs ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDU5OCkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgw KTsKCiAgbnNYUElETENTdHJpbmcgcHJldmlvdXM7CiAgcnYgPSBjYXRtYW4tPkFkZENhdGVnb3J5 RW50cnkoIkphdmFTY3JpcHQgZ2xvYmFsIGNvbnN0cnVjdG9yIiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiSW5zdGFsbFZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJAbW96aWxsYS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hwaW5zdGFsbC9pbnN0 YWxsdmVyc2lvbjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBnZXR0 ZXJfQ29waWVzKHByZXZpb3VzKSk7CiAgZG8geyBpZigoISgoISgocnYpICYgMHg4MDAwMDAwMCkp KSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgiICJOU19TVUNDRUVERUQo cnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIsICJuc1NvZnR3YXJlVXBk YXRlLmNwcCIsIDYwNSkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgwKTsKCiAgcnYgPSBjYXRt YW4tPkFkZENhdGVnb3J5RW50cnkoIkphdmFTY3JpcHQgZ2xvYmFsIHByb3BlcnR5IiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zdGFsbFRyaWdnZXIiLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJAbW96aWxsYS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hw aW5zdGFsbC9pbnN0YWxsdHJpZ2dlcjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxLCAxLCBnZXR0ZXJfQ29waWVzKHByZXZpb3VzKSk7CiAgZG8geyBpZigoISgoISgocnYpICYg MHg4MDAwMDAwMCkpKSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgiICJO U19TVUNDRUVERUQocnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIsICJu c1NvZnR3YXJlVXBkYXRlLmNwcCIsIDYxMSkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgwKTsK CiAgcmV0dXJuIDA7Cn0KCgoKc3RhdGljIG5zTW9kdWxlQ29tcG9uZW50SW5mbyBjb21wb25lbnRz W10gPQp7CiAgICB7ICJTb2Z0d2FyZVVwZGF0ZSBDb21wb25lbnQiLAogICAgICAgeyAweDE4YzJm OTg5LCAweGIwOWYsIDB4MTFkMiwgezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4MGUs IDB4MTMsIDB4NTN9IH0sCiAgICAgICAiQG1vemlsbGEub3JnL2FwcHNoZWxsL2NvbXBvbmVudCIg Ii94cGluc3RhbGw7MSIsCiAgICAgICBuc1NvZnR3YXJlVXBkYXRlQ29uc3RydWN0b3IsCiAgICAg ICBSZWdpc3RlclNvZnR3YXJlVXBkYXRlCiAgICB9LAoKICAgIHsgIkluc3RhbGxUcmlnZ2VyIENv bXBvbmVudCIsCiAgICAgICB7IDB4MThjMmY5OGQsIDB4YjA5ZiwgMHgxMWQyLCB7MHhiYywgMHhk ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwgMHgxMywgMHg1M30gfSwKICAgICAgICJAbW96aWxs YS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hwaW5zdGFsbC9pbnN0YWxsdHJpZ2dlcjsxIiwK ICAgICAgIG5zSW5zdGFsbFRyaWdnZXJDb25zdHJ1Y3RvcgogICAgfSwKCiAgICB7ICJJbnN0YWxs VmVyc2lvbiBDb21wb25lbnQiLAogICAgICAgeyAweDE4YzJmOThmLCAweGIwOWYsIDB4MTFkMiwg ezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4MGUsIDB4MTMsIDB4NTN9IH0sCiAgICAg ICAiQG1vemlsbGEub3JnL2FwcHNoZWxsL2NvbXBvbmVudCIgIi94cGluc3RhbGwvaW5zdGFsbHZl cnNpb247MSIsCiAgICAgICBuc0luc3RhbGxWZXJzaW9uQ29uc3RydWN0b3IKICAgIH0sCgogICAg eyAiWFBJbnN0YWxsIENvbnRlbnQgSGFuZGxlciIsCiAgICAgIHsgMHgxOGMyZjk4ZCwgMHhiMDlm LCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUz fSB9LAogICAgICAiQG1vemlsbGEub3JnL3VyaWxvYWRlci9jb250ZW50LWhhbmRsZXI7MSIgIj90 eXBlPSIiYXBwbGljYXRpb24veC14cGluc3RhbGwiLAogICAgICBuc0luc3RhbGxUcmlnZ2VyQ29u c3RydWN0b3IKICAgIH0sCgogICAgeyAiU29mdHdhcmUgdXBkYXRlIG5hbWVzZXQiLAogICAgICB7 IDB4Y2RlNDgwMTAsIDB4OTQ5NCwgMHg0YTczLCB7IDB4OTYsIDB4OWEsIDB4MjYsIDB4MzMsIDB4 NTAsIDB4MCwgMHg3MCwgMHhkZSB9fSwKICAgICAgIkBtb3ppbGxhLm9yZy94cGluc3RhbGwvc29m dHdhcmV1cGRhdGVuYW1lc2V0OzEiLAogICAgICBuc1NvZnR3YXJlVXBkYXRlTmFtZVNldENvbnN0 cnVjdG9yCiAgICB9Cn07CgoKCmVudW0geyBOU0dldE1vZHVsZV9jb21wb25lbnRzX2NvdW50ID0g c2l6ZW9mKGNvbXBvbmVudHMpIC8gc2l6ZW9mKGNvbXBvbmVudHNbMF0pIH07IHN0YXRpYyBuc01v ZHVsZUNvbXBvbmVudEluZm8qIE5TR2V0TW9kdWxlX2NvbXBvbmVudHMgPSAoY29tcG9uZW50cyk7 IGV4dGVybiAiQyIgbnNyZXN1bHQgTlNHZXRNb2R1bGUgKG5zSUNvbXBvbmVudE1hbmFnZXIgKnNl cnZNZ3IsIG5zSUZpbGUqIGxvY2F0aW9uLCBuc0lNb2R1bGUqKiByZXN1bHQpIHsgcmV0dXJuIE5T X05ld0dlbmVyaWNNb2R1bGUoKCJuc1NvZnR3YXJlVXBkYXRlIiksIE5TR2V0TW9kdWxlX2NvbXBv bmVudHNfY291bnQsIE5TR2V0TW9kdWxlX2NvbXBvbmVudHMsIDAsIHJlc3VsdCk7IH0K
next reply other threads:[~2001-05-24 0:16 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2001-05-24 0:16 davidm [this message] 2002-01-13 14:40 rodrigc
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20010524071151.21692.qmail@sourceware.cygnus.com \ --to=davidm@hpl.hp.com \ --cc=gcc-gnats@gcc.gnu.org \ --cc=wilson@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).