From mboxrd@z Thu Jan 1 00:00:00 1970 From: michael.frommeyer@rbg.de To: gcc-gnats@gcc.gnu.org Subject: c++/4723: g++ Date: Sun, 28 Oct 2001 21:46:00 -0000 Message-id: <20011029054020.20158.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00637.html List-Id: >Number: 4723 >Category: c++ >Synopsis: g++ >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun Oct 28 21:46:02 PST 2001 >Closed-Date: >Last-Modified: >Originator: michael.frommeyer@rbg.de >Release: gcc version 2.95.2 19991024 (release) >Organization: >Environment: s390-suse-linux >Description: Internal compiler error 305 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="mqqueue.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mqqueue.ii" IyAxICIvaG9tZS94aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvbXFxdWV1ZS5jcHAiCgoKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRlLmhw cCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lz dHJlYW0uaHBwIiAxCgoKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAoKIAoKIyA0MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pc3RyZWFtLmhwcCIKCgogCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaW9zdHJlYW0i IDEgMwogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91c3IvaW5jbHVk ZS9nKysvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdt YSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMSAzCiAKCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKIAoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoK CgogCgojIDE2NiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoK CgoKCiAKCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgogCgoKCgoKCgoKIAoKCgoKIyA3MSAiL3Vzci9pbmNs dWRlL3N5cy9jZGVmcy5oIiAzCgoKIAoKCgoKCgoKIAoKCgojIDEwMyAiL3Vzci9pbmNsdWRlL3N5 cy9jZGVmcy5oIiAzCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoK CgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgojIDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDIgMwoKCiAKCgoKCgoKCgogCgoKCgoKIAoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2du dS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjc4ICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMiAzCgoKCgojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy IDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3Vz ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYx ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vz ci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgdW5z aWduZWQgaW50IHNpemVfdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCiMgMjcxICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1s aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7 Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5 cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJ IAp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkg CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJ IAp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90 OwkJIAp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJ CSAKdHlwZWRlZiBpbnQgX19zc2l6ZV90OwkJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJ CSAKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX2lk X3Q7CQkJIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf dDsJCQkJIAoKIAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2Fk ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3Ymxr X3Q7CQkgCgwKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX19mZF9tYXNrOwoKIAoKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICAg CgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0ICAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2sp KSBdOwoKCgoKCiAgfSBfX2ZkX3NldDsKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgogCgogCnR5cGVkZWYgbG9uZyBpbnQg X19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191 X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7Cgog CnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Zp bGNudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9m Zl90IF9fb2ZmNjRfdDsKCiAKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJf dDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl ZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlv cml0eTsKICB9OwoKCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK CgogCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7ICAgICAg ICAgICAgIAogIGludCBfX3NwaW5sb2NrOyAgICAgICAgICAgICAgICAKfTsKCgogCnR5cGVkZWYg c3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBz dHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwog IGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0 OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0 dHJfdDsKCgogCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19j X2xvY2s7ICAKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsgICAgICAgICAKfSBwdGhyZWFk X2NvbmRfdDsKCgogCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2Nv bmRhdHRyX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKIAogCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsgICAgICAgICAgICAgICAgCiAgaW50 IF9fbV9jb3VudDsgICAgICAgICAgICAgICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVy OyAgICAgICAgCiAgaW50IF9fbV9raW5kOyAgICAgICAgICAgICAgICAgICAgCiAgc3RydWN0IF9w dGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOyAgCn0gcHRocmVhZF9tdXRleF90OwoKCiAKdHlwZWRl ZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCiAK dHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf cndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7ICAKICBpbnQg X19yd19yZWFkZXJzOyAgICAgICAgICAgICAgICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19yd193 cml0ZXI7ICAgICAgICAgIAogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOyAgICAK ICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7ICAgCiAgaW50IF9fcndfa2luZDsg ICAgICAgICAgICAgICAgICAgICAgIAogIGludCBfX3J3X3BzaGFyZWQ7ICAgICAgICAgICAgICAg ICAgICAKfSBwdGhyZWFkX3J3bG9ja190OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xv Y2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCiAKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgoKIyAxNTAgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDIgMwoKCgoKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoK CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2Ut bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3Iv bGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK IAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5j bHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5 cGVkZWYgdW5zaWduZWQgaW50ICB3aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2Nj LWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoK CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3Mz OTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvdmEtczM5MC5o IiAxIDMKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgX192YV9saXN0X3RhZyB7CiAgaW50IGdwcjsgICAg ICAgICAgICAgICAgICAgICAgIAoKCiAgaW50IGZwcjsgICAgICAgICAgICAgICAgICAgICAgIAoK CiAgY2hhciAqaW5jb21pbmdfYXJnc19hcmVhOyAgICAgIAoKICBjaGFyICpyZWdfc2F2ZV9hcmVh OyAgICAgICAgICAgCgp9IF9fZ251Y192YV9saXN0WzFdLCpfX2dudWNfdmFfbGlzdHA7CgoKIAoK IyAxNjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3Zh LXMzOTAuaCIgMwoKCiMgNjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL3N0ZGFyZy5oIiAyIDMKCiMgMTI3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3Vz ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAy MTMgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGFy Zy5oIiAzCgoKCgojIDQ4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgoKCgoKCgojIDY3ICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDk4ICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7Cgog CgoKCgoKCgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIg ewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwog ICAKCiAgIAogIGludCBfcG9zOwojIDE4NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07Cgpz dHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19y ZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7 CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBj aGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lP X2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNr dXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIg Kl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAg aW50IF9ibGtzaXplOwogIF9fb2ZmX3QgICBfb2xkX29mZnNldDsgIAoKCiAgIAogIHVuc2lnbmVk IHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIg X3Nob3J0YnVmWzFdOwoKICAgCgogIF9JT19sb2NrX3QgKl9sb2NrOwoKCgoKCgoKCiAgX19vZmY2 NF90ICAgX29mZnNldDsKICAgCiAgaW50IF91bnVzZWQyWzE2XTsKCn07CgoKCgoKc3RydWN0IF9J T19GSUxFX3BsdXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVj dCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0eXBlZGVm IF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gICh2b2lkICogIF9fY29va2llLCBjaGFyICpfX2J1ZiwK CQkJCSAgICAgICBzaXplX3QgX19uYnl0ZXMpICA7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3Qg X19pb193cml0ZV9mbiAgKHZvaWQgKiAgX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJ CQkgICAgICBzaXplX3QgX19uKSAgOwoKIAoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAg KHZvaWQgKiAgX19jb29raWUsIF9fb2ZmX3QgICBfX3BvcywgaW50IF9fdykgIDsKCiAKdHlwZWRl ZiBpbnQgX19pb19jbG9zZV9mbiAgKHZvaWQgKiAgX19jb29raWUpICA7CgoKCiAKdHlwZWRlZiBf X2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2Zu IGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vl a19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9u X3Q7CgogCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CQkgCiAgX19pb193 cml0ZV9mbiAqd3JpdGU7CQkgCiAgX19pb19zZWVrX2ZuICpzZWVrOwkJIAogIF9faW9fY2xvc2Vf Zm4gKmNsb3NlOwkJIAp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nv b2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgogCnN0cnVjdCBfSU9f Y29va2llX2ZpbGUKewogIHN0cnVjdCBfSU9fRklMRSBfX2ZpbGU7CiAgY29uc3Qgdm9pZCAqX192 dGFibGU7CiAgdm9pZCAqX19jb29raWU7CiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lv X2Z1bmN0aW9uczsKfTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cg IChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUg KikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkg IHRocm93ICgpICA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJ TEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19wdXRjICAoaW50IF9fYywgX0lP X0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZW9mICAoX0lPX0ZJTEUg Kl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19m cCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgIChfSU9fRklMRSAq X19mcCkgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9f RklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJ TEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxF ICopICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lP X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJICAgICBfX2du dWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lP X3ZmcHJpbnRmICAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qs CgkJCSAgICAgIF9fZ251Y192YV9saXN0ICkgIHRocm93ICgpICA7CmV4dGVybiBfX3NzaXplX3Qg ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApICB0aHJvdyAoKSAgOwpl eHRlcm4gc2l6ZV90ICAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QgICkg IHRocm93ICgpICA7CgpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAq LCBfX29mZjY0X3QgICwgaW50LCBpbnQpICB0aHJvdyAoKSAgOwpleHRlcm4gX19vZmY2NF90ICAg X0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50KSAgdGhyb3cgKCkgIDsK CmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikgIHRocm93ICgp ICA7CgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAyIDMKCn0KIAoK IyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRh cmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgv Mi45NS4yL2luY2x1ZGUvdmEtczM5MC5oIiAxIDMKIAoKIyAxOCAiL3Vzci9saWIvZ2NjLWxpYi9z MzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvdmEtczM5MC5oIiAzCgoKIAoKCgogCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgewogIGxvbmcgICBiYWNrY2hhaW47CiAgbG9uZyAgIHNwYXJlOwogIGxv bmcgICBfX2dwX3NhdmVbMTRdOyAgICAgICAgICAgICAgICAgCiAgbG9uZyBsb25nICAgIF9fZnBf c2F2ZVs0XTsgICAgICAgICAgICAKfSBfX3ZhX3JlZ3NhdmVfdDsKCiAKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTU5ICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS92YS1zMzkwLmgi IDMKCgoKIAoKCgoKCiMgNjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL3N0ZGFyZy5oIiAyIDMKCiMgMTI3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3Vz ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK IAoKCgoKCgoKCgoKCgoKIyAxNzkgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIu OTUuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKIAoKCgoKIAoKIAoKIAoKdHlwZWRlZiBfX2dudWNf dmFfbGlzdCB2YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQwICIvdXNyL2luY2x1 ZGUvZysrL3N0cmVhbWJ1Zi5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAi QysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoK IAoKCgoKdHlwZWRlZiBfX29mZjY0X3QgICBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90ICAg c3RyZWFtcG9zOwoKCgoKdHlwZWRlZiBfX3NzaXplX3QgICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7 CgpzdHJ1Y3QgX2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3Ry ZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2No YXJfdCAgIF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0 aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoK CgoKCgoKCgoKIyAxMjQgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBp b3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlv cyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10Zmxh Z3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAg ICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdv b2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsK ICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBw ID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJ YmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywg Y3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBl bnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAw MTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0g MDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0g MDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRi dWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2Vm aWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0 ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvaW5jbHVkZS9n Kysvc3RyZWFtYnVmLmgiIDMKCgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3Rp ZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7 IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoKICAgICAKICAgIHdjaGFyX3QgICBmaWxsKCkgY29u c3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHdjaGFyX3QgICBmaWxsKHdjaGFyX3QgICBuZXdmKQoJ e3djaGFyX3QgICBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAg Zm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZs YWdzKGZtdGZsYWdzIG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFn cyA9IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3Qg eyByZXR1cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5z aWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hv cnQpbmV3cDsKCXJldHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkg ewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRi aXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJ Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAo dmFsICYgbWFzayk7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10Zmxh Z3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsg cmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsg fQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZh bDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9 CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/ IHN0YXRlIDogc3RhdGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3df ZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7 CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQg c2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYg X2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyBy ZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUg JiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAo aW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJu IF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJl dHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgp ID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsg cmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4g X2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4 Y2VwdGlvbnMgPSBlbmFibGU7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWls dXJlKCk7IH0KCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1Zjsg fQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAq X29sZCA9IF9zdHJidWY7IF9zdHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9Cgog ICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5 bmNfd2l0aF9zdGRpbygpIHsgc3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10Zmxh Z3MgYml0YWxsb2MoKTsKICAgIHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQo aW50KTsKICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwog ICAgbG9uZyBpd29yZChpbnQpIGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7 CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBp bmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlu bGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwg b3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGly OwoKCiAKIAogCiAKIAoKIAogCmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtl ciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBv ZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJl YW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVy biAgMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07 CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNz IGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07 CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUo KSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90 ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYg eGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lk IF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdz ICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBw dHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9f cmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2Vu ZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQog ICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8g X0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsg cmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9J T19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0g X0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9w dHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQg eGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9 CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNl dGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFz aykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAg JiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9p ZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFy KiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXAp CiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVw OyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlm IChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9J T19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0K ICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2Jh Y2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2Uo KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9 CiAgICAgCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVf ZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGlu X2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJw dHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkg eyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAg IGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIo KSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJu IF9JT19zYXZlX2Jhc2UgIT0gX19udWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0 dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwog ICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBf ZmxhZ3MgJiAweDgwMCA7IH0KICAgIGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAg c3RyZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2Fs bCgpOwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0 dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSAp OyAgCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3co KTsgIAogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJl YW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBz dHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJl YW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6 Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBt b2RlID0gaW9zOjppbnxpb3M6Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFt b2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJl dHVybiBfSU9fc2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJz ZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAg eyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBz c2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7 CiAgICBzdHJlYW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6Omlu fGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxl bik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7 CgogICAgaW50IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAg ICBpbnQgc3B1dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVm ZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZl cmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZm ZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9 CiAgICB2b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7 IGVsc2UgX2ZsYWdzICY9IH4weDIwMCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJh c2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgp OyB9CiAgICAgCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRv YWxsb2NidWYoKTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7 IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGlu ZygpIHsgcmV0dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFt c2l6ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihz LCBuKTsgfQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0 dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciog cywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGlu dCBpZ25vcmUoaW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihp bnQpOwogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIHNpemVfdCAgIG4sIGNoYXIgZGVsaW0s IGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lPX3B1 dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlzKTsg fQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+PSAo ICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAoLTEp ICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0cikg IDsgfQogICAgaW50IHNuZXh0YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRfZW5k ICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNlIHJl dHVybiBfSU9fcmVhZF9wdHIrKywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChf SU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQgdnNj YW4oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9IF9f bnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZmb3Jt KGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0ICBhcCk7CiAgICBpbnQgZm9ybShjaGFy IGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNo YXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3Jp dGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3Nl ZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAg ICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKCiAgICB2aXJ0dWFsIGludCBzaG93bWFu eWMoKTsKICAgIHZpcnR1YWwgdm9pZCBpbWJ1ZSh2b2lkICopOwoKfTsKCiAKIAoKY2xhc3MgZmls ZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwog IHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsK ICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVu KTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZp bGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAg ZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBp bnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFs IGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyBy ZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVu KCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFs IGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9m ZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3Ry ZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihj b25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciog cywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAK IAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAg IGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigp OyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAK ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6 ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7 CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXpl KTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lz X2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9z dHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRi aXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7 IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNp b249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3Ry ZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsK CgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMg MzEgIi91c3IvaW5jbHVkZS9nKysvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xh c3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7 CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0m ICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMp OwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBl bmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsK CmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9pZCBkb19v c2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYq IHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29k KCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4g MTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1 Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7 CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRo aXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3RyZWFtc2l6ZSBu KTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUg bikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0m IHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJu IHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB2b2lk ICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBu KTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYgc2Vla3Aoc3Ry ZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBvc3RyZWFtJiBm b3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0oY29uc3QgY2hh ciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8 PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0 dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQg Y2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlz KSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lk ICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0 b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAg ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25f XyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0 cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFt JiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWdu ZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3Bl cmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAg ICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJs ZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbik7CgoKCiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMp OyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMp OyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoK fTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6 CiAgICBzaXplX3QgICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAg IGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9z dHJlYW0qdGllZD0gX19udWxsICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVu LCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRy LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBs ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0 KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0m IGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3Ry ZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc bicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3Ry ZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBp c3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp Cgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdl dGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJl dHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFk KGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hh ciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7 IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAg ICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQg KnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9 CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAg aXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngo aW50IG5lZWQgPSAwKSB7CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJu IDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCkt PmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFn cygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsK CX0KICAgIH0KICAgIGludCBpcGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFp bGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNo KCk7CgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBl bHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkg eyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3Rp ZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAx OwoJfQogICAgfQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlw ZngxKCkpIHJldHVybiAoLTEpIDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7 CgkJICAgICAgIGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNm eCgpOwoJCSAgICAgICByZXR1cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBz aXplX3QgICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUo aW50IG49MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFt JiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19k aXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gp IHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIo aW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYg KGdvb2QoKSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0 KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAu Li4pOwogICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlz dCAgYXJncyk7CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hh ciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4g b3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0 b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykg e3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGlu dCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBp c3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFt JiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4oc2hvcnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBp c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4odW5zaWduZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAg ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRv dWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhp czt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVu YykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xh c3MgaW9zdHJlYW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoK ICAgIGlvc3RyZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRp ZWQ9IF9fbnVsbCApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBp c3RyZWFtIHsKcHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3Ry ZWFtJik7CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dp dGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVh bSY+IChyaHMpKTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBv c3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3Ry ZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dp dGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVh bSY+IChyaHMpKTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4 dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJl YW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlu cyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0m IGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0 cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYg aSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJu IGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVj fGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkK eyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7 IH0KfSAgCgoKIyA2ICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtIiAyIDMKCgojIDQ1ICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJlYW0uaHBw IiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaW9zZndkIiAxIDMKIAogCgoKCmNsYXNzIGlvczsK Y2xhc3Mgc3RyZWFtYnVmOwpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwpjbGFzcyBpb3N0 cmVhbTsKY2xhc3MgZmlsZWJ1ZjsKY2xhc3MgaWZzdHJlYW07CmNsYXNzIG9mc3RyZWFtOwpjbGFz cyBmc3RyZWFtOwoKIyA0NiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pc3RyZWFtLmhwcCIgMgoKCgoKCgoKIAoKIAoKCgoKCiMgMjkgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWRhdGUuaHBwIiAyCgoj IDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJh c2UuaHBwIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAoKIAoKCgoKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pbGFuZ2x2bC5ocHAiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoK IAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWNvbWRlZnMuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCiAKCiAgCgoKCgoK ICAKCgoKCgogIAoKCgoKCiAgCgoKCgoKCgoKCgojIDYwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ljb21kZWZzLmgiCgoKIAogCgogIAoKCiAgCiAg ICAKICAgIAogIAogIAoKCgoKCgogIAoKCiAgCiAgICAKICAKICAKCgogIAoKCiAgCgoKCgoKCgoK CgogIAogIAoKCgoKCgoKCiAgCgoKCgoKICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK ICAKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKIAoKICAgIAoKCgogICAgCgoKCiAgICAKCgoKICAgIAoKCgogICAgCiAgICAgICAgCiAg ICAKCiAgICAKCgoKICAgIAoKCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogICAg CiAgICAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgICAKICAgIAoKCgoKCgojIDMyNiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pY29tZGVm cy5oIgoKCiAKIAojIDM0MyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pY29tZGVmcy5oIgoKCgojIDI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lsYW5nbHZsLmhwcCIgMgoKIAoKIAogCiAKIAogCgoK CgoKCgogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIyA4OCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbGFuZ2x2bC5ocHAi CgogCgoKCgojIDExOCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pbGFuZ2x2bC5ocHAiCgoKCgoKCgogCnR5cGVkZWYgaW50IElCb29sOwoKIyAxNDQg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWxhbmds dmwuaHBwIgoKCiMgMTU3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2lsYW5nbHZsLmhwcCIKCgoKCgoKCgoKCgoKCgoKCm5hbWVzcGFjZSBpb2MgewoK CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVuaWNoYXJfdDsKCiAgICAKCgoKCiAgICB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgdW51bWVyaWNfdDsKICAgIHR5cGVkZWYgICBzaWduZWQgbG9u ZyAgbnVtZXJpY190OwoKCn07CgogCgojIDM0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liYXNlLmhwcCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liYXNlcGwuaHBwIiAxCgoKCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCiAKCgogIAoKCiAgICAK ICAKCgoKICAKCgogICAgCiAgCgoKIAoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lwcmFnbGliLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAog CgoKCgogCgoKCgoKCiAgICAKCgoKCgoKCgoKCgogICAgICAgIAoKCiMgNjcgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXByYWdsaWIuaCIKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKICAgICAgICAKCgogICAgICAgICAgICAgICAgCiAgICAg ICAgCgoKCgoKICAgICAgICAKCgoKCgogICAgICAgIAoKCgogICAgICAgICAgICAgICAgCiAgICAg ICAgCgoKCgoKICAgICAgICAKCgoKCgogICAgICAgIAoKCgoKCiAgICAgICAgCiAgICAgICAgCgoK CgoKICAgICAgICAKCgoKIyA0OSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pYmFzZXBsLmhwcCIgMgoKCgoKICAgIAogICAgICAJCiMgMTA1ICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liYXNlcGwuaHBw IgoKICAgIAojIDEyOCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pYmFzZXBsLmhwcCIKCgoKIAoKIyAzNSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmFzZS5ocHAiIDIKCiAKIAogCiAKCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RyZWFtLmhw cCIgMQojIDU2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lzdHJlYW0uaHBwIgoKCgoKCiMgNDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJhc2UuaHBwIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIiAxCiMgMTAgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2Uu aHBwIgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAojIDEgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJhc2UuaHBw IiAxCiMgMTkyICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2liYXNlLmhwcCIKCiMgNjQgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIiAyCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ljY29uc3RhLmgiIDEKCgogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCiMgMTg5ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2ljY29uc3RhLmgiCgoKIyAyMDggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWNjb25zdGEuaCIKCgoKIyA2NiAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiIDIKCiMgMSAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbXNndGV4 dC5ocHAiIDEKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pcHJpbXR5cC5o cHAiIDEKCgoKIAoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAoKIAojIDEgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKIyAxICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIyA0MSAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoK CgoKCiMgNjM4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgojIDMxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMiAzCgoKIAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51 eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9n Y2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoK IAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog CgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiMgMzggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgogCgoKCgoKCgoKCgoKIAp0eXBl ZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50OwkJIAogIHdpbnRfdCB2YWx1ZTsJCSAKfSBtYnN0YXRl X3Q7CgoKIAoKCgoKCgoKCiAKCgoKCgogCgpzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7IAoKIApl eHRlcm4gd2NoYXJfdCAqd2NzY3B5ICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRl cm4gd2NoYXJfdCAqd2NzbmNweSAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAo KSAgOwoKIApleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl c3QsCgkJCSAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhyb3cgKCkg IDsKIApleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0 LAoJCQkgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p ICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHdjc2NtcCAgKF9fY29uc3Qgd2NoYXJfdCAqX19z MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHdjc25j bXAgIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKCQkJIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCB3Y3NjYXNlY21wICAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gaW50IHdjc25jYXNlY21wICAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj aGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgIHRo cm93ICgpICA7CgogCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3Ry dWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbNl07CSAKCiAgIAogIGNvbnN0IHVuc2lnbmVkIHNo b3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0 IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwoKCiMgMTEyICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAgKF9fY29uc3Qgd2No YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAoJCQkJX19sb2NhbGVfdCBfX2xvYykg IHRocm93ICgpICA7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAgKF9fY29uc3Qgd2NoYXJf dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAoJCQkJIHNpemVfdCBfX24sIF9fbG9jYWxl X3QgX19sb2MpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgd2NzY29sbCAgKF9fY29uc3Qg d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSAgdGhyb3cgKCkgIDsKIAoKCmV4 dGVybiBzaXplX3Qgd2NzeGZybSAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKCQkJICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsK CgogCgoKIAoKZXh0ZXJuIGludCBfX3djc2NvbGxfbCAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwg X19jb25zdCB3Y2hhcl90ICpfX3MyLAoJCQkgICAgIF9fbG9jYWxlX3QgX19sb2MpICB0aHJvdyAo KSAgOwogCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAgKHdjaGFyX3QgKl9fczEsIF9fY29u c3Qgd2NoYXJfdCAqX19zMiwKCQkJCXNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gd2NoYXJfdCAqd2NzZHVwICAoX19jb25zdCB3Y2hhcl90ICpfX3Mp ICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAgKF9fY29uc3Qgd2NoYXJf dCAqX193Y3MsIHdjaGFyX3QgX193YykgIHRocm93ICgpICA7CiAKZXh0ZXJuIHdjaGFyX3QgKndj c3JjaHIgIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpICB0aHJvdyAoKSAg OwoKIAoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuICAoX19jb25zdCB3Y2hhcl90ICpfX3djcywKCQkJ ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpICB0aHJvdyAoKSAgOwogCgpleHRlcm4gc2l6 ZV90IHdjc3NwbiAgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19h Y2NlcHQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrICAoX19jb25zdCB3 Y2hhcl90ICpfX3djcywKCQkJICAgICAgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkgIHRocm93 ICgpICA7CiAKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlz dGFjaywKCQkJICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKSAgdGhyb3cgKCkgIDsKCgoK CgoKCiAKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAoJ CQkgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgIHdjaGFy X3QgKipfX3Jlc3RyaWN0IF9fcHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHNpemVfdCBfX3dj c2xlbiAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHNpemVfdCB3 Y3NsZW4gIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgIHRocm93ICgpICA7CgoKIApleHRlcm4gc2l6 ZV90IHdjc25sZW4gIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKSAgdGhy b3cgKCkgIDsKCgoKIApleHRlcm4gd2NoYXJfdCAqd21lbWNociAgKF9fY29uc3Qgd2NoYXJfdCAq X19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg d21lbWNtcCAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAoJCQkgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRl cm4gd2NoYXJfdCAqd21lbWNweSAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKCQkJICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pICB0aHJvdyAoKSAg OwoKIAoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3 Y2hhcl90ICpfX3MyLAoJCQkgICAgICAgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVy biB3Y2hhcl90ICp3bWVtc2V0ICAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9f bikgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIHdpbnRfdCBidG93YyAgKGludCBfX2MpICB0aHJv dyAoKSAgOwoKIAoKZXh0ZXJuIGludCB3Y3RvYiAgKHdpbnRfdCBfX2MpICB0aHJvdyAoKSAgOwoK IAoKZXh0ZXJuIGludCBtYnNpbml0ICAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpICB0aHJvdyAo KSAgOwoKIAoKZXh0ZXJuIHNpemVfdCBtYnJ0b3djICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3 YywKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCgkJCSAg ICBtYnN0YXRlX3QgKl9fcCkgIHRocm93ICgpICA7CgogCmV4dGVybiBzaXplX3Qgd2NydG9tYiAg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hhcl90IF9fd2MsCgkJCSAgICBtYnN0YXRlX3QgKl9f cmVzdHJpY3QgX19wcykgIHRocm93ICgpICA7CgogCmV4dGVybiBzaXplX3QgX19tYnJsZW4gIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAoJCQkgICAgIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAoJCQkgICBtYnN0YXRlX3Qg Kl9fcmVzdHJpY3QgX19wcykgIHRocm93ICgpICA7CgoKCgoKCgoKCgogCgpleHRlcm4gc2l6ZV90 IG1ic3J0b3djcyAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCgkJCSAgICAgIF9fY29uc3Qg Y2hhciAqKl9fcmVzdHJpY3QgX19zcmMsCgkJCSAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90 ICpfX3Jlc3RyaWN0IF9fcHMpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHNpemVfdCB3Y3NydG9t YnMgIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAoJCQkgICAgICBfX2NvbnN0IHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fc3JjLAoJCQkgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICAo d2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKCQkJICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKCQkJICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHNpemVfdCB3Y3Nu cnRvbWJzICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKCQkJICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19zcmMsCgkJCSAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xl biwKCQkJICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSAgdGhyb3cgKCkgIDsKCgoK IAoKIApleHRlcm4gaW50IHdjd2lkdGggICh3aW50X3QgX19jKSAgdGhyb3cgKCkgIDsKCiAKCmV4 dGVybiBpbnQgd2Nzd2lkdGggIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgIHRo cm93ICgpICA7CgoKCiAKCmV4dGVybiBkb3VibGUgd2NzdG9kICAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpICB0 aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGZsb2F0IHdjc3RvZiAgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCgkJCSAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpICB0aHJv dyAoKSAgOwpleHRlcm4gbG9uZyBkb3VibGUgIHdjc3RvbGQgIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikg IHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu dCB3Y3N0b3VsICAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgICAgICBpbnQgX19iYXNlKSAg dGhyb3cgKCkgIDsKCgogCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3Rv cSAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCiAKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAoJCQkJCSAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIAoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsICAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKCQkJCSAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19iYXNlKSAgdGhyb3cgKCkgIDsKCiAKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgd2NzdG91bGwgIChfX2NvbnN0IHdjaGFyX3QgKgoJCQkJCSAgICAgX19yZXN0 cmljdCBfX25wdHIsCgkJCQkJICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJ CQkgICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgoKCgoKCgoKCgogCgoKCiAKCmV4 dGVybiBsb25nIGludCBfX3djc3RvbF9sICAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKCQkJCSB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKCQkJ CSBfX2xvY2FsZV90IF9fbG9jKSAgdGhyb3cgKCkgIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu dCBfX3djc3RvdWxfbCAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJ ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgaW50IF9fYmFzZSwgX19s b2NhbGVfdCBfX2xvYykgIHRocm93ICgpICA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IF9fd2NzdG9sbF9sICAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK CQkJCSAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgICAgICBpbnQg X19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSAgdGhyb3cgKCkgIDsKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sICAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0CgkJCQkJCSBfX25wdHIsCgkJCQkJCSB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwKCQkJCQkJIGludCBfX2Jhc2UsCgkJCQkJCSBfX2xvY2FsZV90IF9fbG9jKSAgdGhy b3cgKCkgIDsKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCgkJCSAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwK CQkJICAgICAgIF9fbG9jYWxlX3QgX19sb2MpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGZsb2F0IF9f d2NzdG9mX2wgIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJICAgICAgX19sb2NhbGVfdCBfX2xvYykg IHRocm93ICgpICA7CgpleHRlcm4gbG9uZyBkb3VibGUgIF9fd2NzdG9sZF9sICAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCgkJCQkJIF9fbG9jYWxlX3QgX19sb2MpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4g ZG91YmxlIF9fd2NzdG9kX2ludGVybmFsICAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKCQkJCSAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAg aW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwg IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgICAgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpl eHRlcm4gbG9uZyBkb3VibGUgIF9fd2NzdG9sZF9pbnRlcm5hbCAgKF9fY29uc3Qgd2NoYXJfdCAq CgkJCQkJCV9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCQl3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCmV4dGVybiBsb25nIGludCBf X3djc3RvbF9pbnRlcm5hbCAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCgkJ CQkJd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJaW50IF9fYmFzZSwgaW50IF9f Z3JvdXApICB0aHJvdyAoKSAgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3Vs X2ludGVybmFsICAoX19jb25zdCB3Y2hhcl90ICoKCQkJCQkJICBfX3Jlc3RyaWN0IF9fbnB0ciwK CQkJCQkJICB3Y2hhcl90ICoqCgkJCQkJCSAgX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsICAoX19jb25zdCB3Y2hhcl90ICoK CQkJCQkgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93 ICgpICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193 Y3N0b3VsbF9pbnRlcm5hbCAgKF9fY29uc3Qgd2NoYXJfdCAqCgkJCQkJCQlfX3Jlc3RyaWN0IF9f bnB0ciwKCQkJCQkJCXdjaGFyX3QgKioKCQkJCQkJCV9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJ CQlpbnQgX19iYXNlLAoJCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCgoKIyA0NzYg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgogCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICAo d2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSAgdGhyb3cgKCkgIDsKCiAK CmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFy X3QgKl9fc3JjLAoJCQkgICAgICBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIAoKCgoKCgoK CgoKfSAKCgojIDI1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lwcmltdHlwLmhwcCIgMgoKCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWxvbmdsbmcuaHBwIiAxCgoKCiAKIAogCgoKCgoKCgoK CgoKIAogCiAKIAogCiAKCiAKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoK CgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCgoKCgoKdHlwZWRlZiBsb25nIGxvbmcgSUxv bmdMb25nOwoKIyA0MjAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWxvbmdsbmcuaHBwIgoKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3By YWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFn bWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCgoKIyAyOCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pcHJpbXR5cC5ocHAi IDIKCiAKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVbmlDaGFyOwoKIAoKIyAyNCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbXNndGV4dC5ocHAi IDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19I RUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEg bmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVt KDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSU1lc3NhZ2VUZXh0UHJpdmF0ZURhdGE7CiAKCiAK CmNsYXNzICAgSU1lc3NhZ2VUZXh0CnsKcHVibGljOgogICAgIAogICAgc3RhdGljIGNvbnN0IGNo YXIgKm1lc3NhZ2VGaWxlKCk7CiAgICBzdGF0aWMgY29uc3QgaW9jOjp1bmljaGFyX3QqIG1lc3Nh Z2VGaWxlVygpOwoKICAgIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VGaWxlKGNvbnN0IGNoYXIqIG1z Z0ZpbGVOYW1lKTsKICAgIHN0YXRpYyB2b2lkIHNldE1lc3NhZ2VGaWxlVyhjb25zdCBpb2M6OnVu aWNoYXJfdCogbXNnRmlsZU5hbWUpOwoKICAgICAKICAgIElNZXNzYWdlVGV4dChpb2M6OnVudW1l cmljX3QgbWVzc2FnZUlkKTsKCiAgICBJTWVzc2FnZVRleHQoaW9jOjp1bnVtZXJpY190IG1lc3Nh Z2VJZCwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlRmlsZU5hbWUsCiAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogdGV4dEluc2VydDEgPSAwLAogICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIqIHRleHRJbnNlcnQyID0gMCwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFy KiB0ZXh0SW5zZXJ0MyA9IDAsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGV4dEluc2Vy dDQgPSAwLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRleHRJbnNlcnQ1ID0gMCwKICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXh0SW5zZXJ0NiA9IDAsCiAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciogdGV4dEluc2VydDcgPSAwLAogICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIqIHRleHRJbnNlcnQ4ID0gMCwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXh0SW5z ZXJ0OSA9IDApOwoKICAgIElNZXNzYWdlVGV4dChpb2M6OnVudW1lcmljX3QgbWVzc2FnZUlkLAog ICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBtZXNzYWdlRmlsZU5hbWUsCiAg ICAgICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRleHRJbnNlcnQxID0gMCwKICAg ICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCogdGV4dEluc2VydDIgPSAwLAogICAg ICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0SW5zZXJ0MyA9IDAsCiAgICAg ICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRleHRJbnNlcnQ0ID0gMCwKICAgICAg ICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCogdGV4dEluc2VydDUgPSAwLAogICAgICAg ICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0SW5zZXJ0NiA9IDAsCiAgICAgICAg ICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRleHRJbnNlcnQ3ID0gMCwKICAgICAgICAg ICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCogdGV4dEluc2VydDggPSAwLAogICAgICAgICAg ICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0SW5zZXJ0OSA9IDApOwoKICAgIElNZXNz YWdlVGV4dChjb25zdCBJTWVzc2FnZVRleHQmIHRleHQpOwoKICAgIH5JTWVzc2FnZVRleHQoKTsK CiAgICAgCgogICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsKCgogICAgY29uc3QgY2hh ciogdGV4dCgpIGNvbnN0OwogICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRleHRXKCkgY29uc3Q7 CgogICAgSU1lc3NhZ2VUZXh0JiBzZXREZWZhdWx0VGV4dChjb25zdCBjaGFyKiB0ZXh0KTsKICAg IElNZXNzYWdlVGV4dCYgc2V0RGVmYXVsdFRleHRXKGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0 KTsKCiAgICBJTWVzc2FnZVRleHQmIG9wZXJhdG9yPShjb25zdCBJTWVzc2FnZVRleHQmIHRleHQp OwoKICAgIGJvb2wgc3VjY2Vzc2Z1bCgpIGNvbnN0OwoKcHJpdmF0ZToKCiAgICBzdGF0aWMgY29u c3QgVW5pQ2hhciogbWVzc2FnZUZpbGVVbmlDaGFyKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRNZXNz YWdlRmlsZVVuaUNoYXIoY29uc3QgVW5pQ2hhciogbXNnRmlsZU5hbWUpOwogICAgY29uc3QgVW5p Q2hhciogdGV4dFVuaUNoYXIoKSBjb25zdDsKICAgIElNZXNzYWdlVGV4dCYgc2V0RGVmYXVsdFRl eHRVbmlDaGFyKGNvbnN0IFVuaUNoYXIqIHRleHQpOwogICAgdm9pZCBpbml0aWFsaXplV2l0aFVu aUNoYXIoaW9jOjp1bnVtZXJpY190IG1lc3NhZ2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFVuaUNoYXIqIG1lc3NhZ2VGaWxlTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFVuaUNoYXIqIHRleHRJbnNlcnQxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hhciogdGV4dEluc2VydDIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiB0ZXh0SW5zZXJ0MywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaUNoYXIqIHRleHRJbnNlcnQ0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hhciogdGV4dEluc2VydDUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiB0ZXh0SW5zZXJ0NiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaUNoYXIqIHRleHRJbnNlcnQ3LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hhciogdGV4dEluc2VydDgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiB0ZXh0SW5zZXJ0OSk7 CiAgICB2b2lkIGluaXRpYWxpemVXaXRoQ2hhcihpb2M6OnVudW1lcmljX3QgbWVzc2FnZUlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZUZpbGVOYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGV4dEluc2VydDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXh0SW5zZXJ0MiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRleHRJbnNlcnQzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGV4dEluc2VydDQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXh0SW5zZXJ0NSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIHRleHRJbnNlcnQ2LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciogdGV4dEluc2VydDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiB0ZXh0SW5zZXJ0OCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIHRleHRJbnNlcnQ5KTsKCiAgICBJTWVzc2FnZVRleHRQcml2YXRlRGF0YSAqZkRhdGE7 Cn07CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5n KHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2ltc2d0ZXh0LmlubCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCgppbmxp bmUKY29uc3QgaW9jOjp1bmljaGFyX3QgKgpJTWVzc2FnZVRleHQ6Om1lc3NhZ2VGaWxlVygpCnsK ICAgIHJldHVybiAoY29uc3QgaW9jOjp1bmljaGFyX3QgKilJTWVzc2FnZVRleHQ6Om1lc3NhZ2VG aWxlVW5pQ2hhcigpOwp9CgppbmxpbmUKdm9pZApJTWVzc2FnZVRleHQ6OnNldE1lc3NhZ2VGaWxl Vyhjb25zdCBpb2M6OnVuaWNoYXJfdCAqbXNnRmlsZU5hbWUpCnsKICAgIElNZXNzYWdlVGV4dDo6 c2V0TWVzc2FnZUZpbGVVbmlDaGFyKChjb25zdCBVbmlDaGFyICopbXNnRmlsZU5hbWUpOwp9Cgpp bmxpbmUKY29uc3QgaW9jOjp1bmljaGFyX3QqIElNZXNzYWdlVGV4dDo6dGV4dFcoKSBjb25zdAp7 CiAgICByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopdGV4dFVuaUNoYXIoKTsKfQoKaW5s aW5lCklNZXNzYWdlVGV4dCYKSU1lc3NhZ2VUZXh0OjpzZXREZWZhdWx0VGV4dFcoY29uc3QgaW9j Ojp1bmljaGFyX3QqIGRlZmF1bHRUZXh0KQp7CiAgICByZXR1cm4gc2V0RGVmYXVsdFRleHRVbmlD aGFyKChjb25zdCBVbmlDaGFyICopZGVmYXVsdFRleHQpOwp9CgppbmxpbmUKSU1lc3NhZ2VUZXh0 OjpJTWVzc2FnZVRleHQoaW9jOjp1bnVtZXJpY190IG1lc3NhZ2VfaWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBtZXNzYWdlX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCogdGV4dEluc2VydDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0SW5z ZXJ0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRl eHRJbnNlcnQzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJf dCogdGV4dEluc2VydDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5p Y2hhcl90KiB0ZXh0SW5zZXJ0NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW9j Ojp1bmljaGFyX3QqIHRleHRJbnNlcnQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBpb2M6OnVuaWNoYXJfdCogdGV4dEluc2VydDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZXh0SW5zZXJ0OCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRleHRJbnNlcnQ5KQogICAgICAgIDogZkRhdGEo MCkKewogICAgaW5pdGlhbGl6ZVdpdGhVbmlDaGFyKG1lc3NhZ2VfaWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IFVuaUNoYXIqKW1lc3NhZ2VfZmlsZW5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IFVuaUNoYXIqKXRleHRJbnNlcnQxLAogICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCBVbmlDaGFyKil0ZXh0SW5zZXJ0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3QgVW5pQ2hhciopdGV4dEluc2VydDMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IFVuaUNoYXIqKXRleHRJbnNlcnQ0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBVbmlDaGFyKil0ZXh0SW5zZXJ0NSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgVW5pQ2hhciopdGV4dEluc2VydDYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IFVuaUNoYXIqKXRleHRJbnNlcnQ3LAogICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBVbmlDaGFyKil0ZXh0SW5zZXJ0OCwKICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3QgVW5pQ2hhciopdGV4dEluc2VydDkpOwp9CgoKIyAxNzAgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaW1zZ3RleHQuaHBwIiAyCgogCgogCiNw cmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3Jl KQogCgogCgoKCgoKIyA2NyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiIDIKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJh Z21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZv KHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdf U0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoKIAoKIyAxMTIgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIgoK CiAKCiAKCgoKCgoKCgoKIApjbGFzcyBJRXhjZXB0aW9uTG9jYXRpb25EYXRhOwpjbGFzcyBJRXhj ZXB0aW9uRGF0YTsKY2xhc3MgSVN5c3RlbUVycm9ySW5mb0RhdGE7CmNsYXNzIElDTGliRXJyb3JJ bmZvRGF0YTsKY2xhc3MgSVNpbXBsZVRleHQ7CiAKCiAKY2xhc3MgICBJRXhjZXB0aW9uTG9jYXRp b24gewpwdWJsaWM6CgogCiAgICBJRXhjZXB0aW9uTG9jYXRpb24oKTsKICAgIElFeGNlcHRpb25M b2NhdGlvbihjb25zdCBjaGFyKiBmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBmdW5jdGlvbk5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgIGlvYzo6dW51 bWVyaWNfdCBsaW5lTnVtYmVyID0gMCk7CiAgICBJRXhjZXB0aW9uTG9jYXRpb24oY29uc3QgaW9j Ojp1bmljaGFyX3QqIGZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6 dW5pY2hhcl90KiBmdW5jdGlvbk5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgIGlvYzo6 dW51bWVyaWNfdCBsaW5lTnVtYmVyID0gMCk7CiAgICBJRXhjZXB0aW9uTG9jYXRpb24oY29uc3Qg SUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2MpOwogICAgfklFeGNlcHRpb25Mb2NhdGlvbigpOwoKIAog ICAgY29uc3QgY2hhciAqZmlsZU5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9u TmFtZSgpIGNvbnN0OwogICAgY29uc3QgaW9jOjp1bmljaGFyX3QgKmZpbGVOYW1lVygpIGNvbnN0 OwogICAgY29uc3QgaW9jOjp1bmljaGFyX3QgKmZ1bmN0aW9uTmFtZVcoKSBjb25zdDsKCiAgICBp b2M6OnVudW1lcmljX3QgbGluZU51bWJlcigpIGNvbnN0OwoKICAgIElFeGNlcHRpb25Mb2NhdGlv biYgb3BlcmF0b3I9KGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiAmbG9jKTsKCnByaXZhdGU6CiAK ICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhVbmlDaGFyKGNvbnN0IFVuaUNoYXIgKmZpbGVOYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hhciAqZnVuY3Rpb25OYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jOjp1bnVtZXJpY190IGxpbmVOdW1i ZXIpOwogICAgY29uc3QgVW5pQ2hhciAqZmlsZU5hbWVVbmlDaGFyKCkgY29uc3Q7CiAgICBjb25z dCBVbmlDaGFyICpmdW5jdGlvbk5hbWVVbmlDaGFyKCkgY29uc3Q7CiAgICBJRXhjZXB0aW9uTG9j YXRpb25EYXRhICpmRGF0YTsKfTsKCmNsYXNzICAgSUV4Y2VwdGlvbiB7CnB1YmxpYzoKCiAgICBl bnVtIFNldmVyaXR5CiAgICB7CiAgICAgICAgdW5yZWNvdmVyYWJsZSwgcmVjb3ZlcmFibGUKICAg IH07CgogCiAgICBJRXhjZXB0aW9uKGNvbnN0IGNoYXIqIGVycm9yVGV4dCwKICAgICAgICAgICAg ICAgaW9jOjp1bnVtZXJpY190IGVycm9ySWQgPSAwLAogICAgICAgICAgICAgICBTZXZlcml0eSBz ZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwogIAoKCgogICAgSUV4Y2VwdGlv bihjb25zdCBpb2M6OnVuaWNoYXJfdCogZXJyb3JUZXh0LAogICAgICAgICAgICAgICBpb2M6OnVu dW1lcmljX3QgZXJyb3JJZCA9IDAsCiAgICAgICAgICAgICAgIFNldmVyaXR5IHNldmVyaXR5ID0g SUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSk7CiAgICBJRXhjZXB0aW9uKGNvbnN0IElFeGNlcHRp b24mIGV4Y2VwdGlvbik7CgogICAgdmlydHVhbCB+SUV4Y2VwdGlvbigpOwoKIAogICAgdHlwZWRl ZiBjb25zdCBjaGFyKiBFcnJvckNvZGVHcm91cDsKCiAgICBzdGF0aWMgRXJyb3JDb2RlR3JvdXAg Y29uc3QKICAgICAgICAgIGJhc2VMaWJyYXJ5LAogICAgICAgICAgQ0xpYnJhcnksCiAgICAgICAg ICBvcGVyYXRpbmdTeXN0ZW0sCiAgICAgICAgICBwcmVzZW50YXRpb25TeXN0ZW0sCiAgICAgICAg ICBvdGhlcjsKCiAgICBJRXhjZXB0aW9uJiBzZXRFcnJvckNvZGVHcm91cChFcnJvckNvZGVHcm91 cCBlcnJvckdyb3VwKTsKICAgIEVycm9yQ29kZUdyb3VwIGVycm9yQ29kZUdyb3VwKCkgY29uc3Q7 CgogCiAgICBJRXhjZXB0aW9uICZhcHBlbmRUZXh0KGNvbnN0IGNoYXIqIGVycm9yVGV4dCk7CiAg ICBJRXhjZXB0aW9uICZzZXRUZXh0KGNvbnN0IGNoYXIqIGVycm9yVGV4dCk7CiAgICBjb25zdCBj aGFyICp0ZXh0KGlvYzo6dW51bWVyaWNfdCBpbmRleEZyb21Ub3AgPSAwKSBjb25zdDsKCiAgICBJ RXhjZXB0aW9uICZhcHBlbmRUZXh0Vyhjb25zdCBpb2M6OnVuaWNoYXJfdCogZXJyb3JUZXh0KTsK ICAgIElFeGNlcHRpb24gJnNldFRleHRXKGNvbnN0IGlvYzo6dW5pY2hhcl90KiBlcnJvclRleHQp OwogICAgY29uc3QgaW9jOjp1bmljaGFyX3QgKnRleHRXKGlvYzo6dW51bWVyaWNfdCBpbmRleEZy b21Ub3AgPSAwKSBjb25zdDsKCiAgICBpb2M6OnVudW1lcmljX3QgdGV4dENvdW50KCkgY29uc3Q7 CgogCiAgICBJRXhjZXB0aW9uICZzZXRTZXZlcml0eShTZXZlcml0eSBzZXZlcml0eSk7CiAgICB2 aXJ0dWFsIGludCBpc1JlY292ZXJhYmxlKCkgY29uc3Q7CgogCiAgICBJRXhjZXB0aW9uICZzZXRF cnJvcklkKGlvYzo6dW51bWVyaWNfdCBlcnJvcklkKTsKICAgIGlvYzo6dW51bWVyaWNfdCBlcnJv cklkKCkgY29uc3Q7CgogCiAgICB2aXJ0dWFsIElFeGNlcHRpb24gJmFkZExvY2F0aW9uKGNvbnN0 IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRpb24pOwoKICAgIGlvYzo6dW51bWVyaWNfdCBsb2Nh dGlvbkNvdW50KCkgY29uc3Q7CgogICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uICpsb2NhdGlv bkF0SW5kZXgKICAgIChpb2M6OnVudW1lcmljX3QgbG9jYXRpb25JbmRleCkgY29uc3Q7CgogCiAg ICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIHZpcnR1YWwgY29uc3QgaW9j Ojp1bmljaGFyX3QgKm5hbWVXKCkgY29uc3Q7CgogCgoKCgogCiAgICBzdGF0aWMgdm9pZCBhc3Nl cnRQYXJhbWV0ZXIoY29uc3QgY2hhciogZXhjZXB0aW9uVGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBJRXhjZXB0aW9uTG9jYXRpb24mIGxvY2F0aW9uKTsKICAgIHN0 YXRpYyB2b2lkIGFzc2VydFBhcmFtZXRlclcoY29uc3QgaW9jOjp1bmljaGFyX3QqIGV4Y2VwdGlv blRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25M b2NhdGlvbiYgbG9jYXRpb24pOwoKIAoKICAgIGNsYXNzICAgVHJhY2VGbiB7CiAgICBwdWJsaWM6 CiAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IGNoYXIqIGJ1ZmZlcik7CiAgICAgICAg dmlydHVhbCB2b2lkIHdyaXRlVyhjb25zdCBpb2M6OnVuaWNoYXJfdCogYnVmZmVyKTsKICAgICAg ICB2aXJ0dWFsIHZvaWQgbG9nRGF0YShJRXhjZXB0aW9uJiBleGNlcHRpb24pOwogICAgICAgIHZp cnR1YWwgdm9pZCBsb2dEYXRhVyhJRXhjZXB0aW9uJiBleGNlcHRpb24pOwoKICAgIHByb3RlY3Rl ZDoKICAgICAgICBUcmFjZUZuKCk7CiAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VwdGlvbkxvZ2dl ZCgpOwogICAgcHJpdmF0ZToKICAgICAgICB2b2lkIHdyaXRlVW5pQ2hhcihjb25zdCBVbmlDaGFy KiBidWZmZXIpOwogICAgfTsKCiAgICBzdGF0aWMgSUV4Y2VwdGlvbjo6VHJhY2VGbiAqc2V0VHJh Y2VGdW5jdGlvbihJRXhjZXB0aW9uOjpUcmFjZUZuJgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VGdW5jdGlvbik7CiAgICB2aXJ0dWFsIElFeGNl cHRpb24gJmxvZ0V4Y2VwdGlvbkRhdGEoKTsKICAgIHZpcnR1YWwgSUV4Y2VwdGlvbiAmbG9nRXhj ZXB0aW9uRGF0YVcoKTsKCnByaXZhdGU6CiAgICBJRXhjZXB0aW9uICZvcGVyYXRvcj0oY29uc3Qg SUV4Y2VwdGlvbiYgZXhjKTsKICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhVbmlDaGFyKGNvbnN0IFVu aUNoYXIqIHRleHQsIGlvYzo6dW51bWVyaWNfdCBlcnJvcklkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU2V2ZXJpdHkgc2V2KTsKICAgIElFeGNlcHRpb24gJmFwcGVuZFRleHRVbmlD aGFyKGNvbnN0IFVuaUNoYXIqIGVycm9yVGV4dCk7CiAgICBJRXhjZXB0aW9uICZzZXRUZXh0VW5p Q2hhcihjb25zdCBVbmlDaGFyKiBlcnJvclRleHQpOwogICAgY29uc3QgVW5pQ2hhciAqdGV4dFVu aUNoYXIoaW9jOjp1bnVtZXJpY190IGluZGV4RnJvbVRvcCA9IDApIGNvbnN0OwogICAgY29uc3Qg VW5pQ2hhciAqbmFtZVVuaUNoYXIoKSBjb25zdDsKICAgIHN0YXRpYyB2b2lkIGFzc2VydFBhcmFt ZXRlclVuaUNoYXIoY29uc3QgVW5pQ2hhciogZXhjZXB0aW9uVGV4dCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlv bik7CgogICAgSUV4Y2VwdGlvbkRhdGEgKmZEYXRhOwogICAgZnJpZW5kIGNsYXNzICAgSUV4Y2Vw dGlvbjo6VHJhY2VGbjsKfTsKCmNsYXNzICAgSUJhc2VFcnJvckluZm8gewpwdWJsaWM6CgogCiAg ICBJQmFzZUVycm9ySW5mbygpOwogICAgdmlydHVhbCB+SUJhc2VFcnJvckluZm8oKTsKCiAKCgog ICAgdmlydHVhbCBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIGNv bnN0IGNoYXIgKnRleHQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGNvbnN0IGlvYzo6dW5pY2hh cl90ICp0ZXh0VygpIGNvbnN0OwoKICAgIHZpcnR1YWwgaW9jOjp1bnVtZXJpY190IGVycm9ySWQo KSBjb25zdCA9IDA7CgogICAgdmlydHVhbCBib29sIGlzQXZhaWxhYmxlKCkgY29uc3QgPSAwOwoK ICAgIGVudW0gRXhjZXB0aW9uVHlwZSB7CiAgICAgICAgYWNjZXNzRXJyb3IsCiAgICAgICAgZGV2 aWNlRXJyb3IsCiAgICAgICAgaW52YWxpZFBhcmFtZXRlciwKICAgICAgICBpbnZhbGlkUmVxdWVz dCwKICAgICAgICBvdXRPZlN5c3RlbVJlc291cmNlLAogICAgICAgIG91dE9mV2luZG93UmVzb3Vy Y2UsCiAgICAgICAgb3V0T2ZNZW1vcnksCiAgICAgICAgcmVzb3VyY2VFeGhhdXN0ZWQKICAgIH07 CgogCiAgICB2b2lkIHRocm93RXJyb3IoY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlv biwKICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25UeXBlIG5hbWUgPSBhY2Nlc3NFcnJvciwK ICAgICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZlcml0eSA9IElFeGNl cHRpb246OnJlY292ZXJhYmxlLAogICAgICAgICAgICAgICAgICAgIElFeGNlcHRpb246OkVycm9y Q29kZUdyb3VwIGVycm9yR3JvdXAgPQogICAgICAgICAgICAgICAgICAgIElFeGNlcHRpb246OmJh c2VMaWJyYXJ5KTsKCiAgICB2b2lkIHRocm93RXJyb3JXKGNvbnN0IElFeGNlcHRpb25Mb2NhdGlv biYgbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvblR5cGUgbmFtZSA9IGFj Y2Vzc0Vycm9yLAogICAgICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZl cml0eSA9IElFeGNlcHRpb246OnJlY292ZXJhYmxlLAogICAgICAgICAgICAgICAgICAgICBJRXhj ZXB0aW9uOjpFcnJvckNvZGVHcm91cCBlcnJvckdyb3VwID0KICAgICAgICAgICAgICAgICAgICAg SUV4Y2VwdGlvbjo6YmFzZUxpYnJhcnkpOwpwcml2YXRlOgogICAgY29uc3QgVW5pQ2hhciAqdGV4 dFVuaUNoYXIoKSBjb25zdDsKCiAgICBtdXRhYmxlCgogICAgSVNpbXBsZVRleHQgKmZEYXRhOwp9 OyAgCgoKCnR5cGVkZWYgSUJhc2VFcnJvckluZm8gSUVycm9ySW5mbzsKCgoKY2xhc3MgICBJU3lz dGVtRXJyb3JJbmZvIDogcHVibGljIElCYXNlRXJyb3JJbmZvCnsKcHVibGljOgogCiAgICBJU3lz dGVtRXJyb3JJbmZvKGlvYzo6dW51bWVyaWNfdCBzeXN0ZW1FcnJvcklkKTsKICAgIElTeXN0ZW1F cnJvckluZm8oaW9jOjp1bnVtZXJpY190IHN5c3RlbUVycm9ySWQsCiAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIHN5c3RlbUZ1bmN0aW9uTmFtZSk7CiAgICBJU3lzdGVtRXJyb3JJbmZv KGlvYzo6dW51bWVyaWNfdCBzeXN0ZW1FcnJvcklkLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBpb2M6OnVuaWNoYXJfdCogc3lzdGVtRnVuY3Rpb25OYW1lKTsKCiAgICB2aXJ0dWFsIH5JU3lz dGVtRXJyb3JJbmZvKCk7CgogCgogICAgdmlydHVhbCBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNv bnN0OwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnRleHQoKSBjb25zdDsKICAgIHZpcnR1YWwg Y29uc3QgaW9jOjp1bmljaGFyX3QgKnRleHRXKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGlvYzo6dW51 bWVyaWNfdCBlcnJvcklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgaXNBdmFpbGFibGUoKSBj b25zdDsKCiAKICAgIHN0YXRpYyB2b2lkIHRocm93U3lzdGVtRXJyb3IoaW9jOjp1bnVtZXJpY190 IHN5c3RlbUVycm9ySWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIqIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg SUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSUJhc2VFcnJvckluZm86OkV4Y2VwdGlvblR5cGUgbmFtZSA9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFjY2Vzc0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZlcml0eSA9CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElFeGNlcHRpb246OnJlY292ZXJhYmxlKTsKCiAgICBzdGF0aWMgdm9p ZCB0aHJvd1N5c3RlbUVycm9yVyhpb2M6OnVudW1lcmljX3Qgc3lzdGVtRXJyb3JJZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBmdW5jdGlv bk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJRXhjZXB0aW9u TG9jYXRpb24mIGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJh c2VFcnJvckluZm86OkV4Y2VwdGlvblR5cGUgbmFtZSA9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhY2Nlc3NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElFeGNlcHRpb246OlNldmVyaXR5IHNldmVyaXR5ID0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIElFeGNlcHRpb246OnJlY292ZXJhYmxlKTsKCnByaXZhdGU6CiAgICBJU3lzdGVt RXJyb3JJbmZvKGNvbnN0IElTeXN0ZW1FcnJvckluZm8mIGVycm9ySW5mb3JtYXRpb24pOwogICAg SVN5c3RlbUVycm9ySW5mbyAmb3BlcmF0b3I9KGNvbnN0IElTeXN0ZW1FcnJvckluZm8mIGVycm9y SW5mb3JtYXRpb24pOwogICAgc3RhdGljIHZvaWQgdGhyb3dTeXN0ZW1FcnJvclVuaUNoYXIoaW9j Ojp1bnVtZXJpY190IHN5c3RlbUVycm9ySWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBVbmlDaGFyKiBmdW5jdGlvbk5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJRXhjZXB0aW9uTG9jYXRpb24mIGxvY2F0aW9u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUJhc2VFcnJvckluZm86 OkV4Y2VwdGlvblR5cGUgbmFtZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhY2Nlc3NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElFeGNlcHRpb246OlNldmVyaXR5IHNldmVyaXR5ID0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElFeGNlcHRpb246OnJlY292ZXJhYmxlKTsKICAgIHZvaWQgaW5pdGlh bGl6ZVdpdGhVbmlDaGFyKGlvYzo6dW51bWVyaWNfdCBpZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFVuaUNoYXIgKmZ1bmN0aW9uX25hbWUpOwogICAgY29uc3QgVW5pQ2hh ciAqdGV4dFVuaUNoYXIoKSBjb25zdDsKICAgIElTeXN0ZW1FcnJvckluZm9EYXRhICpmRGF0YTsK fTsgIAoKY2xhc3MgICBJQ0xpYkVycm9ySW5mbyA6IHB1YmxpYyBJQmFzZUVycm9ySW5mbwp7CnB1 YmxpYzoKIAogICAgSUNMaWJFcnJvckluZm8oKTsKICAgIElDTGliRXJyb3JJbmZvKGNvbnN0IGNo YXIqIENMaWJGdW5jdGlvbk5hbWUpOwogIAoKCgogICAgSUNMaWJFcnJvckluZm8oY29uc3QgaW9j Ojp1bmljaGFyX3QqIENMaWJGdW5jdGlvbk5hbWUpOwoKICAgIHZpcnR1YWwgfklDTGliRXJyb3JJ bmZvKCk7CgogCgogICAgdmlydHVhbCBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwoKCiAg ICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnRleHQoKSBjb25zdDsKICAgIHZpcnR1YWwgY29uc3QgaW9j Ojp1bmljaGFyX3QgKnRleHRXKCkgY29uc3Q7CgogICAgdmlydHVhbCBpb2M6OnVudW1lcmljX3Qg ZXJyb3JJZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBpc0F2YWlsYWJsZSgpIGNvbnN0OwoK IAogICAgc3RhdGljIHZvaWQgdGhyb3dDTGliRXJyb3IoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9u JiBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZv OjpFeGNlcHRpb25UeXBlIG5hbWUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNj ZXNzRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpTZXZl cml0eSBzZXZlcml0eSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRXhjZXB0aW9u OjpyZWNvdmVyYWJsZSk7CiAgICBzdGF0aWMgdm9pZCB0aHJvd0NMaWJFcnJvclcoY29uc3QgaW9j Ojp1bmljaGFyX3QqIGZ1bmN0aW9uTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJRXhjZXB0aW9uTG9jYXRpb24mIGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjpFeGNlcHRpb25UeXBlIG5hbWUgPQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc0Vycm9yLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElFeGNlcHRpb246OlNldmVyaXR5IHNldmVyaXR5ID0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpyZWNvdmVyYWJsZSk7Cgpwcml2YXRlOgog ICAgSUNMaWJFcnJvckluZm8oY29uc3QgSUNMaWJFcnJvckluZm8mIGVycm9ySW5mb3JtYXRpb24p OwogICAgSUNMaWJFcnJvckluZm8gJm9wZXJhdG9yPShjb25zdCBJQ0xpYkVycm9ySW5mbyYgZXJy b3JJbmZvcm1hdGlvbik7CiAgICB2b2lkIGluaXRpYWxpemVXaXRoVW5pQ2hhcihjb25zdCBVbmlD aGFyICpmdW5jdGlvbl9uYW1lKTsKICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhDaGFyKGNvbnN0IGNo YXIgKmZ1bmN0aW9uX25hbWUpOwogICAgY29uc3QgVW5pQ2hhciAqdGV4dFVuaUNoYXIoKSBjb25z dDsKCiAgICBJQ0xpYkVycm9ySW5mb0RhdGEgKmZEYXRhOwp9OwoKY2xhc3MgICAgSUFjY2Vzc0Vy cm9yICA6IHB1YmxpYyAgSUV4Y2VwdGlvbiAgeyBwdWJsaWM6ICBJQWNjZXNzRXJyb3IgKGNvbnN0 IGNoYXIqIGEsIGlvYzo6dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246 OnVucmVjb3ZlcmFibGUpIDogIElFeGNlcHRpb24gKGEsIGIsIGMpIHt9ICBJQWNjZXNzRXJyb3Ig KGNvbnN0IGlvYzo6dW5pY2hhcl90KiBhLCBpb2M6OnVudW1lcmljX3QgYiA9IDAsIFNldmVyaXR5 IGMgPSBJRXhjZXB0aW9uOjp1bnJlY292ZXJhYmxlKSA6ICBJRXhjZXB0aW9uIChhLCBiLCBjKSB7 fSB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiAoIklBY2Nlc3NFcnJv ciIpOyB9IHZpcnR1YWwgY29uc3QgaW9jOjp1bmljaGFyX3QqIG5hbWVXKCkgY29uc3QgeyByZXR1 cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopTCJJQWNjZXNzRXJyb3IiOyB9IHZpcnR1YWwgfiBJ QWNjZXNzRXJyb3IgKCkge30gIElBY2Nlc3NFcnJvciAoY29uc3QgIElBY2Nlc3NFcnJvciAgJmEp IDogIElFeGNlcHRpb24gKGEpIHt9cHJpdmF0ZTogIElBY2Nlc3NFcnJvciAgJm9wZXJhdG9yID0o Y29uc3QgIElBY2Nlc3NFcnJvciAgJik7fSA7CmNsYXNzICAgIElBc3NlcnRpb25GYWlsdXJlICA6 IHB1YmxpYyAgSUV4Y2VwdGlvbiAgeyBwdWJsaWM6ICBJQXNzZXJ0aW9uRmFpbHVyZSAoY29uc3Qg Y2hhciogYSwgaW9jOjp1bnVtZXJpY190IGIgPSAwLCBTZXZlcml0eSBjID0gSUV4Y2VwdGlvbjo6 dW5yZWNvdmVyYWJsZSkgOiAgSUV4Y2VwdGlvbiAoYSwgYiwgYykge30gIElBc3NlcnRpb25GYWls dXJlIChjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwgaW9jOjp1bnVtZXJpY190IGIgPSAwLCBTZXZl cml0eSBjID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSkgOiAgSUV4Y2VwdGlvbiAoYSwgYiwg Yykge30gdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKCJJQXNzZXJ0 aW9uRmFpbHVyZSIpOyB9IHZpcnR1YWwgY29uc3QgaW9jOjp1bmljaGFyX3QqIG5hbWVXKCkgY29u c3QgeyByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopTCJJQXNzZXJ0aW9uRmFpbHVyZSI7 IH0gdmlydHVhbCB+IElBc3NlcnRpb25GYWlsdXJlICgpIHt9ICBJQXNzZXJ0aW9uRmFpbHVyZSAo Y29uc3QgIElBc3NlcnRpb25GYWlsdXJlICAmYSkgOiAgSUV4Y2VwdGlvbiAoYSkge31wcml2YXRl OiAgSUFzc2VydGlvbkZhaWx1cmUgICZvcGVyYXRvciA9KGNvbnN0ICBJQXNzZXJ0aW9uRmFpbHVy ZSAgJik7fSA7CmNsYXNzICAgIElEZXZpY2VFcnJvciAgOiBwdWJsaWMgIElFeGNlcHRpb24gIHsg cHVibGljOiAgSURldmljZUVycm9yIChjb25zdCBjaGFyKiBhLCBpb2M6OnVudW1lcmljX3QgYiA9 IDAsIFNldmVyaXR5IGMgPSBJRXhjZXB0aW9uOjp1bnJlY292ZXJhYmxlKSA6ICBJRXhjZXB0aW9u IChhLCBiLCBjKSB7fSAgSURldmljZUVycm9yIChjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwgaW9j Ojp1bnVtZXJpY190IGIgPSAwLCBTZXZlcml0eSBjID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJs ZSkgOiAgSUV4Y2VwdGlvbiAoYSwgYiwgYykge30gdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkg Y29uc3QgeyByZXR1cm4gKCJJRGV2aWNlRXJyb3IiKTsgfSB2aXJ0dWFsIGNvbnN0IGlvYzo6dW5p Y2hhcl90KiBuYW1lVygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNoYXJfdCAqKUwi SURldmljZUVycm9yIjsgfSB2aXJ0dWFsIH4gSURldmljZUVycm9yICgpIHt9ICBJRGV2aWNlRXJy b3IgKGNvbnN0ICBJRGV2aWNlRXJyb3IgICZhKSA6ICBJRXhjZXB0aW9uIChhKSB7fXByaXZhdGU6 ICBJRGV2aWNlRXJyb3IgICZvcGVyYXRvciA9KGNvbnN0ICBJRGV2aWNlRXJyb3IgICYpO30gOwpj bGFzcyAgICBJSW52YWxpZFBhcmFtZXRlciAgOiBwdWJsaWMgIElFeGNlcHRpb24gIHsgcHVibGlj OiAgSUludmFsaWRQYXJhbWV0ZXIgKGNvbnN0IGNoYXIqIGEsIGlvYzo6dW51bWVyaWNfdCBiID0g MCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElFeGNlcHRpb24g KGEsIGIsIGMpIHt9ICBJSW52YWxpZFBhcmFtZXRlciAoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEs IGlvYzo6dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3Zl cmFibGUpIDogIElFeGNlcHRpb24gKGEsIGIsIGMpIHt9IHZpcnR1YWwgY29uc3QgY2hhciogbmFt ZSgpIGNvbnN0IHsgcmV0dXJuICgiSUludmFsaWRQYXJhbWV0ZXIiKTsgfSB2aXJ0dWFsIGNvbnN0 IGlvYzo6dW5pY2hhcl90KiBuYW1lVygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNo YXJfdCAqKUwiSUludmFsaWRQYXJhbWV0ZXIiOyB9IHZpcnR1YWwgfiBJSW52YWxpZFBhcmFtZXRl ciAoKSB7fSAgSUludmFsaWRQYXJhbWV0ZXIgKGNvbnN0ICBJSW52YWxpZFBhcmFtZXRlciAgJmEp IDogIElFeGNlcHRpb24gKGEpIHt9cHJpdmF0ZTogIElJbnZhbGlkUGFyYW1ldGVyICAmb3BlcmF0 b3IgPShjb25zdCAgSUludmFsaWRQYXJhbWV0ZXIgICYpO30gOwpjbGFzcyAgICBJSW52YWxpZFJl cXVlc3QgIDogcHVibGljICBJRXhjZXB0aW9uICB7IHB1YmxpYzogIElJbnZhbGlkUmVxdWVzdCAo Y29uc3QgY2hhciogYSwgaW9jOjp1bnVtZXJpY190IGIgPSAwLCBTZXZlcml0eSBjID0gSUV4Y2Vw dGlvbjo6dW5yZWNvdmVyYWJsZSkgOiAgSUV4Y2VwdGlvbiAoYSwgYiwgYykge30gIElJbnZhbGlk UmVxdWVzdCAoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGlvYzo6dW51bWVyaWNfdCBiID0gMCwg U2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElFeGNlcHRpb24gKGEs IGIsIGMpIHt9IHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuICgiSUlu dmFsaWRSZXF1ZXN0Iik7IH0gdmlydHVhbCBjb25zdCBpb2M6OnVuaWNoYXJfdCogbmFtZVcoKSBj b25zdCB7IHJldHVybiAoY29uc3QgaW9jOjp1bmljaGFyX3QgKilMIklJbnZhbGlkUmVxdWVzdCI7 IH0gdmlydHVhbCB+IElJbnZhbGlkUmVxdWVzdCAoKSB7fSAgSUludmFsaWRSZXF1ZXN0IChjb25z dCAgSUludmFsaWRSZXF1ZXN0ICAmYSkgOiAgSUV4Y2VwdGlvbiAoYSkge31wcml2YXRlOiAgSUlu dmFsaWRSZXF1ZXN0ICAmb3BlcmF0b3IgPShjb25zdCAgSUludmFsaWRSZXF1ZXN0ICAmKTt9IDsK Y2xhc3MgICAgSVJlc291cmNlRXhoYXVzdGVkICA6IHB1YmxpYyAgSUV4Y2VwdGlvbiAgeyBwdWJs aWM6ICBJUmVzb3VyY2VFeGhhdXN0ZWQgKGNvbnN0IGNoYXIqIGEsIGlvYzo6dW51bWVyaWNfdCBi ID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElFeGNlcHRp b24gKGEsIGIsIGMpIHt9ICBJUmVzb3VyY2VFeGhhdXN0ZWQgKGNvbnN0IGlvYzo6dW5pY2hhcl90 KiBhLCBpb2M6OnVudW1lcmljX3QgYiA9IDAsIFNldmVyaXR5IGMgPSBJRXhjZXB0aW9uOjp1bnJl Y292ZXJhYmxlKSA6ICBJRXhjZXB0aW9uIChhLCBiLCBjKSB7fSB2aXJ0dWFsIGNvbnN0IGNoYXIq IG5hbWUoKSBjb25zdCB7IHJldHVybiAoIklSZXNvdXJjZUV4aGF1c3RlZCIpOyB9IHZpcnR1YWwg Y29uc3QgaW9jOjp1bmljaGFyX3QqIG5hbWVXKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGlvYzo6 dW5pY2hhcl90ICopTCJJUmVzb3VyY2VFeGhhdXN0ZWQiOyB9IHZpcnR1YWwgfiBJUmVzb3VyY2VF eGhhdXN0ZWQgKCkge30gIElSZXNvdXJjZUV4aGF1c3RlZCAoY29uc3QgIElSZXNvdXJjZUV4aGF1 c3RlZCAgJmEpIDogIElFeGNlcHRpb24gKGEpIHt9cHJpdmF0ZTogIElSZXNvdXJjZUV4aGF1c3Rl ZCAgJm9wZXJhdG9yID0oY29uc3QgIElSZXNvdXJjZUV4aGF1c3RlZCAgJik7fSA7CmNsYXNzICAg IElPdXRPZk1lbW9yeSAgOiBwdWJsaWMgIElSZXNvdXJjZUV4aGF1c3RlZCAgeyBwdWJsaWM6ICBJ T3V0T2ZNZW1vcnkgKGNvbnN0IGNoYXIqIGEsIGlvYzo6dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJp dHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElSZXNvdXJjZUV4aGF1c3RlZCAo YSwgYiwgYykge30gIElPdXRPZk1lbW9yeSAoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGlvYzo6 dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUp IDogIElSZXNvdXJjZUV4aGF1c3RlZCAoYSwgYiwgYykge30gdmlydHVhbCBjb25zdCBjaGFyKiBu YW1lKCkgY29uc3QgeyByZXR1cm4gKCJJT3V0T2ZNZW1vcnkiKTsgfSB2aXJ0dWFsIGNvbnN0IGlv Yzo6dW5pY2hhcl90KiBuYW1lVygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNoYXJf dCAqKUwiSU91dE9mTWVtb3J5IjsgfSB2aXJ0dWFsIH4gSU91dE9mTWVtb3J5ICgpIHt9ICBJT3V0 T2ZNZW1vcnkgKGNvbnN0ICBJT3V0T2ZNZW1vcnkgICZhKSA6ICBJUmVzb3VyY2VFeGhhdXN0ZWQg KGEpIHt9cHJpdmF0ZTogIElPdXRPZk1lbW9yeSAgJm9wZXJhdG9yID0oY29uc3QgIElPdXRPZk1l bW9yeSAgJik7fSA7CmNsYXNzICAgIElPdXRPZlN5c3RlbVJlc291cmNlICA6IHB1YmxpYyAgSVJl c291cmNlRXhoYXVzdGVkICB7IHB1YmxpYzogIElPdXRPZlN5c3RlbVJlc291cmNlIChjb25zdCBj aGFyKiBhLCBpb2M6OnVudW1lcmljX3QgYiA9IDAsIFNldmVyaXR5IGMgPSBJRXhjZXB0aW9uOjp1 bnJlY292ZXJhYmxlKSA6ICBJUmVzb3VyY2VFeGhhdXN0ZWQgKGEsIGIsIGMpIHt9ICBJT3V0T2ZT eXN0ZW1SZXNvdXJjZSAoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGlvYzo6dW51bWVyaWNfdCBi ID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElSZXNvdXJj ZUV4aGF1c3RlZCAoYSwgYiwgYykge30gdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qg eyByZXR1cm4gKCJJT3V0T2ZTeXN0ZW1SZXNvdXJjZSIpOyB9IHZpcnR1YWwgY29uc3QgaW9jOjp1 bmljaGFyX3QqIG5hbWVXKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICop TCJJT3V0T2ZTeXN0ZW1SZXNvdXJjZSI7IH0gdmlydHVhbCB+IElPdXRPZlN5c3RlbVJlc291cmNl ICgpIHt9ICBJT3V0T2ZTeXN0ZW1SZXNvdXJjZSAoY29uc3QgIElPdXRPZlN5c3RlbVJlc291cmNl ICAmYSkgOiAgSVJlc291cmNlRXhoYXVzdGVkIChhKSB7fXByaXZhdGU6ICBJT3V0T2ZTeXN0ZW1S ZXNvdXJjZSAgJm9wZXJhdG9yID0oY29uc3QgIElPdXRPZlN5c3RlbVJlc291cmNlICAmKTt9IDsK Y2xhc3MgICAgSU91dE9mV2luZG93UmVzb3VyY2UgIDogcHVibGljICBJUmVzb3VyY2VFeGhhdXN0 ZWQgIHsgcHVibGljOiAgSU91dE9mV2luZG93UmVzb3VyY2UgKGNvbnN0IGNoYXIqIGEsIGlvYzo6 dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUp IDogIElSZXNvdXJjZUV4aGF1c3RlZCAoYSwgYiwgYykge30gIElPdXRPZldpbmRvd1Jlc291cmNl IChjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwgaW9jOjp1bnVtZXJpY190IGIgPSAwLCBTZXZlcml0 eSBjID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSkgOiAgSVJlc291cmNlRXhoYXVzdGVkIChh LCBiLCBjKSB7fSB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiAoIklP dXRPZldpbmRvd1Jlc291cmNlIik7IH0gdmlydHVhbCBjb25zdCBpb2M6OnVuaWNoYXJfdCogbmFt ZVcoKSBjb25zdCB7IHJldHVybiAoY29uc3QgaW9jOjp1bmljaGFyX3QgKilMIklPdXRPZldpbmRv d1Jlc291cmNlIjsgfSB2aXJ0dWFsIH4gSU91dE9mV2luZG93UmVzb3VyY2UgKCkge30gIElPdXRP ZldpbmRvd1Jlc291cmNlIChjb25zdCAgSU91dE9mV2luZG93UmVzb3VyY2UgICZhKSA6ICBJUmVz b3VyY2VFeGhhdXN0ZWQgKGEpIHt9cHJpdmF0ZTogIElPdXRPZldpbmRvd1Jlc291cmNlICAmb3Bl cmF0b3IgPShjb25zdCAgSU91dE9mV2luZG93UmVzb3VyY2UgICYpO30gOwpjbGFzcyAgICBJRGVj aW1hbERhdGFFcnJvciAgOiBwdWJsaWMgIElFeGNlcHRpb24gIHsgcHVibGljOiAgSURlY2ltYWxE YXRhRXJyb3IgKGNvbnN0IGNoYXIqIGEsIGlvYzo6dW51bWVyaWNfdCBiID0gMCwgU2V2ZXJpdHkg YyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElFeGNlcHRpb24gKGEsIGIsIGMpIHt9 ICBJRGVjaW1hbERhdGFFcnJvciAoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGlvYzo6dW51bWVy aWNfdCBiID0gMCwgU2V2ZXJpdHkgYyA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpIDogIElF eGNlcHRpb24gKGEsIGIsIGMpIHt9IHZpcnR1YWwgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsg cmV0dXJuICgiSURlY2ltYWxEYXRhRXJyb3IiKTsgfSB2aXJ0dWFsIGNvbnN0IGlvYzo6dW5pY2hh cl90KiBuYW1lVygpIGNvbnN0IHsgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNoYXJfdCAqKUwiSURl Y2ltYWxEYXRhRXJyb3IiOyB9IHZpcnR1YWwgfiBJRGVjaW1hbERhdGFFcnJvciAoKSB7fSAgSURl Y2ltYWxEYXRhRXJyb3IgKGNvbnN0ICBJRGVjaW1hbERhdGFFcnJvciAgJmEpIDogIElFeGNlcHRp b24gKGEpIHt9cHJpdmF0ZTogIElEZWNpbWFsRGF0YUVycm9yICAmb3BlcmF0b3IgPShjb25zdCAg SURlY2ltYWxEYXRhRXJyb3IgICYpO30gOwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkK CgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQoj cHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgoKCnZvaWQgIApJ RXhjZXB0X19hc3NlcnRQYXJhbWV0ZXIoY29uc3QgY2hhciogYXNzZXJ0RXhwcmVzc2lvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRpb24p OwoKdm9pZCAgCklFeGNlcHRfX2Fzc2VydFBhcmFtZXRlcihjb25zdCBVbmlDaGFyKiBhc3NlcnRF eHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0 aW9uJiBsb2NhdGlvbik7Cgp2b2lkICAKSUV4Y2VwdF9fYXNzZXJ0U3RhdGUoY29uc3QgVW5pQ2hh ciogYXNzZXJ0RXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlv bkxvY2F0aW9uJiBsb2NhdGlvbik7Cgp2b2lkICAKSUV4Y2VwdF9fYXNzZXJ0U3RhdGUoY29uc3Qg Y2hhciogYXNzZXJ0RXhwcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2Vw dGlvbkxvY2F0aW9uJiBsb2NhdGlvbik7Cgp2b2lkICAKSUV4Y2VwdF9fdGhyb3dMaWJyYXJ5RXJy b3IoaW9jOjp1bnVtZXJpY190IG1lc3NhZ2VJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgSUJhc2VFcnJvckluZm86OkV4Y2VwdGlvblR5cGUgbmFtZSA9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjppbnZhbGlkUmVxdWVzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgSUV4Y2VwdGlvbjo6U2V2ZXJpdHkgc2V2ZXJpdHkgPQogICAgICAgICAg ICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpyZWNvdmVyYWJsZSk7Cgp2b2lkICAKSUV4Y2Vw dF9fdGhyb3dMaWJyYXJ5RXJyb3IoaW9jOjp1bnVtZXJpY190IG1lc3NhZ2VJZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgSUJhc2VFcnJvckluZm86OkV4Y2VwdGlvblR5cGUgbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSUV4Y2VwdGlvbjo6U2V2ZXJpdHkgc2V2ZXJp dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRleHQpOwoKdm9pZCAg CklFeGNlcHRfX3Rocm93TGlicmFyeUVycm9yKGlvYzo6dW51bWVyaWNfdCBtZXNzYWdlSWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRp b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjpFeGNlcHRpb25U eXBlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIElFeGNlcHRpb246OlNldmVyaXR5 IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiB0ZXh0 KTsKCnZvaWQgIApJRXhjZXB0X190aHJvd0Vycm9yKGlvYzo6dW51bWVyaWNfdCBtZXNzYWdlSWQs CiAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlvbiwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlRmlsZSwKICAgICAgICAgICAg ICAgICAgICBJRXhjZXB0aW9uOjpFcnJvckNvZGVHcm91cCBlcnJvckdyb3VwLAogICAgICAgICAg ICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjpFeGNlcHRpb25UeXBlIG5hbWUgPQogICAgICAgICAg ICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjppbnZhbGlkUmVxdWVzdCwKICAgICAgICAgICAgICAg ICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZlcml0eSA9IElFeGNlcHRpb246OnJlY292ZXJh YmxlKTsKCnZvaWQgIApJRXhjZXB0X190aHJvd0Vycm9yKGlvYzo6dW51bWVyaWNfdCBtZXNzYWdl SWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBsb2NhdGlv biwKICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiBtZXNzYWdlRmlsZSwKICAgICAg ICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpFcnJvckNvZGVHcm91cCBlcnJvckdyb3VwLAogICAg ICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjpFeGNlcHRpb25UeXBlIG5hbWUgPQogICAg ICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjppbnZhbGlkUmVxdWVzdCwKICAgICAgICAg ICAgICAgICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZlcml0eSA9IElFeGNlcHRpb246OnJl Y292ZXJhYmxlKTsKCnZvaWQgIApJRXhjZXB0X190aHJvd0Vycm9yKGlvYzo6dW51bWVyaWNfdCBt ZXNzYWdlSWQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0aW9uJiBs b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlRmlsZSwKICAg ICAgICAgICAgICAgICAgICBJRXhjZXB0aW9uOjpFcnJvckNvZGVHcm91cCBlcnJvckdyb3VwLAog ICAgICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJbmZvOjpFeGNlcHRpb25UeXBlIG5hbWUsCiAg ICAgICAgICAgICAgICAgICAgSUV4Y2VwdGlvbjo6U2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogc3Vic3RpdHV0aW9uVGV4dCk7Cgp2b2lkICAKSUV4Y2Vw dF9fdGhyb3dFcnJvcihpb2M6OnVudW1lcmljX3QgbWVzc2FnZUlkLAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRpb24sCiAgICAgICAgICAgICAgICAg ICAgY29uc3QgVW5pQ2hhciogbWVzc2FnZUZpbGUsCiAgICAgICAgICAgICAgICAgICAgSUV4Y2Vw dGlvbjo6RXJyb3JDb2RlR3JvdXAgZXJyb3JHcm91cCwKICAgICAgICAgICAgICAgICAgICBJQmFz ZUVycm9ySW5mbzo6RXhjZXB0aW9uVHlwZSBuYW1lLAogICAgICAgICAgICAgICAgICAgIElFeGNl cHRpb246OlNldmVyaXR5IHNldmVyaXR5LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaUNo YXIqIHN1YnN0aXR1dGlvblRleHQpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU5MiAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5o cHAiCgoKCgoKCgoKCgoKIAogCiMgNjE1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lleGNiYXNlLmhwcCIKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDY4MSAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiCgoKCgojIDY5 MyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhj YmFzZS5ocHAiCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiMgMSAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5pbmwiIDEKCgoK IAogCiAKIAogCiAKIAogCiAKIAoKaW5saW5lCklFeGNlcHRpb25Mb2NhdGlvbjo6SUV4Y2VwdGlv bkxvY2F0aW9uKGNvbnN0IGlvYzo6dW5pY2hhcl90KiBmaWxlTmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIGZ1bmN0aW9uTmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jOjp1bnVtZXJpY190 IGxpbmVOdW1iZXIpCiAgICAgICAgOiBmRGF0YSgwKQp7CiAgICBpbml0aWFsaXplV2l0aFVuaUNo YXIoKGNvbnN0IFVuaUNoYXIgKilmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3QgVW5pQ2hhciAqKWZ1bmN0aW9uTmFtZSwgbGluZU51bWJlcik7Cn0KCmlubGluZQpjb25z dCBpb2M6OnVuaWNoYXJfdCAqCklFeGNlcHRpb25Mb2NhdGlvbjo6ZmlsZU5hbWVXKCkgY29uc3QK ewogICAgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNoYXJfdCAqKWZpbGVOYW1lVW5pQ2hhcigpOwp9 CgppbmxpbmUKY29uc3QgaW9jOjp1bmljaGFyX3QgKgpJRXhjZXB0aW9uTG9jYXRpb246OmZ1bmN0 aW9uTmFtZVcoKSBjb25zdAp7CiAgICByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopZnVu Y3Rpb25OYW1lVW5pQ2hhcigpOwp9CgppbmxpbmUKSUV4Y2VwdGlvbjo6SUV4Y2VwdGlvbihjb25z dCBpb2M6OnVuaWNoYXJfdCogdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBpb2M6OnVudW1l cmljX3QgZXJyb3JJZCwKICAgICAgICAgICAgICAgICAgICAgICBTZXZlcml0eSBzZXYpCiAgICAg ICAgOiBmRGF0YSgwKQp7CiAgICBpbml0aWFsaXplV2l0aFVuaUNoYXIoKGNvbnN0IFVuaUNoYXIg Kil0ZXh0LCBlcnJvcklkLCBzZXYpOwp9CgppbmxpbmUKdm9pZApJRXhjZXB0aW9uOjpUcmFjZUZu Ojp3cml0ZVcoY29uc3QgaW9jOjp1bmljaGFyX3QqIGJ1ZmZlcikKewogICAgd3JpdGVVbmlDaGFy KChjb25zdCBVbmlDaGFyICopYnVmZmVyKTsKfQoKaW5saW5lCklFeGNlcHRpb24gJgpJRXhjZXB0 aW9uOjphcHBlbmRUZXh0Vyhjb25zdCBpb2M6OnVuaWNoYXJfdCogZXJyb3JUZXh0KSB7CiAgICBy ZXR1cm4gYXBwZW5kVGV4dFVuaUNoYXIoKGNvbnN0IFVuaUNoYXIgKillcnJvclRleHQpOwp9Cgpp bmxpbmUKSUV4Y2VwdGlvbiAmCklFeGNlcHRpb246OnNldFRleHRXKGNvbnN0IGlvYzo6dW5pY2hh cl90KiBlcnJvclRleHQpIHsKICAgIHJldHVybiBzZXRUZXh0VW5pQ2hhcigoY29uc3QgVW5pQ2hh ciAqKWVycm9yVGV4dCk7Cn0KCmlubGluZQpjb25zdCBpb2M6OnVuaWNoYXJfdCAqCklFeGNlcHRp b246OnRleHRXKGlvYzo6dW51bWVyaWNfdCBpbmRleEZyb21Ub3ApIGNvbnN0IHsKICAgIHJldHVy biAoY29uc3QgaW9jOjp1bmljaGFyX3QgKil0ZXh0VW5pQ2hhcihpbmRleEZyb21Ub3ApOwp9Cgpp bmxpbmUKY29uc3QgaW9jOjp1bmljaGFyX3QgKgpJRXhjZXB0aW9uOjpuYW1lVygpIGNvbnN0IHsK ICAgIHJldHVybiAoY29uc3QgaW9jOjp1bmljaGFyX3QgKiluYW1lVW5pQ2hhcigpOwp9Cgppbmxp bmUKdm9pZApJRXhjZXB0aW9uOjphc3NlcnRQYXJhbWV0ZXJXKGNvbnN0IGlvYzo6dW5pY2hhcl90 KiBleGNlcHRpb25UZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNl cHRpb25Mb2NhdGlvbiYgbG9jYXRpb24pCnsKICAgIGFzc2VydFBhcmFtZXRlclVuaUNoYXIoKGNv bnN0IFVuaUNoYXIgKilleGNlcHRpb25UZXh0LCBsb2NhdGlvbik7Cn0KCmlubGluZQpjb25zdCBp b2M6OnVuaWNoYXJfdCAqCklCYXNlRXJyb3JJbmZvOjp0ZXh0VygpIGNvbnN0CnsKICAgIHJldHVy biAoY29uc3QgaW9jOjp1bmljaGFyX3QgKil0ZXh0VW5pQ2hhcigpOwp9CgppbmxpbmUKSVN5c3Rl bUVycm9ySW5mbzo6SVN5c3RlbUVycm9ySW5mbyhpb2M6OnVudW1lcmljX3Qgc3lzdGVtRXJyb3JJ ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJf dCogc3lzdGVtRnVuY3Rpb25OYW1lKQogICAgICAgIDogZkRhdGEoMCkKewogICAgaW5pdGlhbGl6 ZVdpdGhVbmlDaGFyKHN5c3RlbUVycm9ySWQsIChjb25zdCBVbmlDaGFyICopc3lzdGVtRnVuY3Rp b25OYW1lKTsKfQoKaW5saW5lCmNvbnN0IGlvYzo6dW5pY2hhcl90ICoKSVN5c3RlbUVycm9ySW5m bzo6dGV4dFcoKSBjb25zdAp7CiAgICByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopdGV4 dFVuaUNoYXIoKTsKfQoKaW5saW5lCnZvaWQKSVN5c3RlbUVycm9ySW5mbzo6dGhyb3dTeXN0ZW1F cnJvclcoaW9jOjp1bnVtZXJpY190IHN5c3RlbUVycm9ySWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBmdW5jdGlvbk5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYg bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCYXNlRXJyb3JJ bmZvOjpFeGNlcHRpb25UeXBlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElFeGNlcHRpb246OlNldmVyaXR5IHNldmVyaXR5KQp7CiAgICB0aHJvd1N5c3RlbUVycm9y VW5pQ2hhcihzeXN0ZW1FcnJvcklkLCAoY29uc3QgVW5pQ2hhciAqKWZ1bmN0aW9uTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBuYW1lLCBzZXZlcml0eSk7Cn0KCmlu bGluZQpJQ0xpYkVycm9ySW5mbzo6SUNMaWJFcnJvckluZm8oKQogICAgICAgIDogZkRhdGEoMCkK ewogICAgaW5pdGlhbGl6ZVdpdGhDaGFyKDApOwp9CgppbmxpbmUKdm9pZCBJQ0xpYkVycm9ySW5m bzo6dGhyb3dDTGliRXJyb3JXKGNvbnN0IGlvYzo6dW5pY2hhcl90ICpmdW5jdGlvbl9uYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSUV4Y2VwdGlvbkxvY2F0 aW9uICZsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCYXNl RXJyb3JJbmZvOjpFeGNlcHRpb25UeXBlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJRXhjZXB0aW9uOjpTZXZlcml0eSBzZXZlcml0eSkKewogICAgSUNMaWJFcnJv ckluZm8gaW5mbyhmdW5jdGlvbl9uYW1lKTsKICAgIGluZm8udGhyb3dFcnJvclcobG9jYXRpb24s IG5hbWUsIHNldmVyaXR5LCBJRXhjZXB0aW9uOjpDTGlicmFyeSk7Cn0KCmlubGluZQpJQ0xpYkVy cm9ySW5mbzo6SUNMaWJFcnJvckluZm8oY29uc3QgaW9jOjp1bmljaGFyX3QgKmZ1bmN0aW9uX25h bWUpCiAgICAgICAgOiBmRGF0YSgwKQp7CiAgICBpbml0aWFsaXplV2l0aFVuaUNoYXIoKGNvbnN0 IFVuaUNoYXIgKilmdW5jdGlvbl9uYW1lKTsKfQoKaW5saW5lCmNvbnN0IGlvYzo6dW5pY2hhcl90 ICoKSUNMaWJFcnJvckluZm86OnRleHRXKCkgY29uc3QKewogICAgcmV0dXJuIChjb25zdCBpb2M6 OnVuaWNoYXJfdCAqKXRleHRVbmlDaGFyKCk7Cn0KCgojIDcyMiAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiIDIKCiAKCiAKCgoK CgoKIyA0MiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pYmFzZS5ocHAiIDIKCgogCgoKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoK CgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSVN0cmluZzsKY2xhc3Mg SU1lc3NhZ2VUZXh0OwpjbGFzcyBJQmFzZTsKCgppbmxpbmUgc3RkOjpvc3RyZWFtICYKICBvcGVy YXRvcjw8KHN0ZDo6b3N0cmVhbSAmYVN0cmVhbSwgY29uc3QgSUJhc2UgJmFuT2JqZWN0KTsKCgoK CiAKCiAKCmNsYXNzICAgSUJhc2UKewpwdWJsaWM6CiAgICAgCgogICAgdHlwZWRlZiBib29sIEJv b2xlYW47CgoKICAgICAKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtZXNzYWdlRmlsZSggKTsKCiAg ICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlRmlsZSAoIGNvbnN0IGNoYXIgKm1zZ0ZpbGVOYW1lICk7 CgogICAgc3RhdGljIElNZXNzYWdlVGV4dAogICAgbWVzc2FnZVRleHQoaW9jOjp1bnVtZXJpY190 IG1lc3NhZ2VJZCwKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgdGV4dEluc2VydDEgPSAw LAogICAgICAgICAgICAgICAgY29uc3QgY2hhciogICB0ZXh0SW5zZXJ0MiA9IDAsCiAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKiAgIHRleHRJbnNlcnQzID0gMCwKICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqICAgdGV4dEluc2VydDQgPSAwLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciog ICB0ZXh0SW5zZXJ0NSA9IDAsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgIHRleHRJbnNl cnQ2ID0gMCwKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgdGV4dEluc2VydDcgPSAwLAog ICAgICAgICAgICAgICAgY29uc3QgY2hhciogICB0ZXh0SW5zZXJ0OCA9IDAsCiAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiAgIHRleHRJbnNlcnQ5ID0gMCApOwoKICAgICAKCiAgICBmcmllbmQg aW5saW5lIHN0ZDo6b3N0cmVhbSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmYVN0cmVhbSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJQmFz ZSAmYW5PYmplY3QpOwoKCgoKICAgIGNoYXIqIGFzVGV4dCgpIGNvbnN0OwoKICAgIElTdHJpbmcg YXNTdHJpbmcoKSBjb25zdDsKCiAgICBJU3RyaW5nIGFzRGVidWdJbmZvKCkgY29uc3Q7CgogICAg c3RydWN0IFZlcnNpb24KICAgIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYWpvcjsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBtaW5vcjsKICAgIH07CgogICAgc3RhdGljIFZlcnNpb24gdmVyc2lv bigpOwoKcHJpdmF0ZToKICAgICAKfTsKCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoK I3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAppbmxpbmUKCnN0ZDo6b3N0cmVhbSAm b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sIGNvbnN0IElCYXNlJiBhbk9iamVjdCkK CgoKewogICAgY2hhciogcHN6VGV4dCA9IGFuT2JqZWN0LmFzVGV4dCgpOwogICAgYVN0cmVhbSA8 PCBwc3pUZXh0OwogICAgZGVsZXRlIHBzelRleHQ7CiAgICByZXR1cm4gYVN0cmVhbTsKfQogCgog CiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0 b3JlKQogCgoKCiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pc3lub255bS5ocHAiIDEKIyAxMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3lub255bS5ocHAiCgoKCgoKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgog CgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVS X1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVt YW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoK CgoKCgoKIAoKIAoKCgogICAKCiAKCgoKCgoKCgoKCgp0eXBlZGVmIGJvb2wgSUJvb2xlYW47CgoK CgoKICAgCiAKCgoKCgoKCgogICAgCgoKCgoKCgoKCgoKICAgCiAgZW51bSB7CiAgICAgIEZhbHNl ID0gMCwKICAgICAgVHJ1ZSAgPSAxCiAgIH07CgoKCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKCgoK CgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgog CiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZv KHJlc3RvcmUpCiAKCiAKCiMgMTg4ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2liYXNlLmhwcCIgMgoKCgogCgojIDMwICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRlLmhwcCIgMgoKIyAxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRzdHJtLmhw cCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCgoKIAoKIAojcHJhZ21hIGlu Zm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwp CiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0Nf TkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoK IApjbGFzcyBJTVN0cmVhbWFibGU7CmNsYXNzIElUeXBlUmVwcmVzZW50YXRpb247CmNsYXNzIElT dHJlYW1GaW5kZXI7CmNsYXNzIElTdHJlYW1GYWN0b3J5OwpjbGFzcyBJU3RyZWFtSU87CiAKCiAK CmNsYXNzIElEYXRhU3RyZWFtCnsKcHVibGljOgogICAgfklEYXRhU3RyZWFtKCk7CgogICAgZW51 bSBFU3RyZWFtRW5jb2RpbmcKICAgIHsKICAgICAgICBrSW50ZXJvcGVyYWJsZUJpbmFyeSwKICAg ICAgICBrUmF3QmluYXJ5LAogICAgICAgIGtEZWJ1ZwogICAgfTsKCiAgICBzdGF0aWMgSURhdGFT dHJlYW0qIGNyZWF0ZU1lbW9yeVN0cmVhbShpbnQgZW5jb2RpbmcgPSBrSW50ZXJvcGVyYWJsZUJp bmFyeSk7CgogICAgSVN0cmVhbUlPKiBzdHJlYW1JTygpIGNvbnN0OwoKICAgIHZvaWQgd3JpdGVC eXRlKGNoYXIgc291cmNlKTsKICAgIHZvaWQgd3JpdGVTaG9ydChzaG9ydCBzb3VyY2UpOwogICAg dm9pZCB3cml0ZUludChpbnQgc291cmNlKTsKICAgIHZvaWQgd3JpdGVMb25nKGxvbmcgc291cmNl KTsKICAgIHZvaWQgd3JpdGVGbG9hdChmbG9hdCBzb3VyY2UpOwogICAgdm9pZCB3cml0ZURvdWJs ZShkb3VibGUgc291cmNlKTsKCiAgICB2b2lkIHdyaXRlQm9vbChib29sIHNvdXJjZSk7CgoKICAg IGNoYXIgICByZWFkQnl0ZSgpOwogICAgc2hvcnQgIHJlYWRTaG9ydCgpOwogICAgaW50ICAgIHJl YWRJbnQoKTsKICAgIGxvbmcgICByZWFkTG9uZygpOwogICAgZmxvYXQgIHJlYWRGbG9hdCgpOwog ICAgZG91YmxlIHJlYWREb3VibGUoKTsKCiAgICBib29sIHJlYWRCb29sKCk7CgoKICAgIHZvaWQg d3JpdGVCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSk7CiAg ICB2b2lkIHJlYWRCeXRlcyhjaGFyKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSk7CiAg ICB2b2lkIHdyaXRlU2hvcnRzKGNvbnN0IHNob3J0KiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93 TWFueSk7CiAgICB2b2lkIHJlYWRTaG9ydHMoc2hvcnQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBo b3dNYW55KTsKICAgIHZvaWQgd3JpdGVJbnRzKGNvbnN0IGludCogZGF0YSwgaW9jOjp1bnVtZXJp Y190IGhvd01hbnkpOwogICAgdm9pZCByZWFkSW50cyhpbnQqIGRhdGEsIGlvYzo6dW51bWVyaWNf dCBob3dNYW55KTsKICAgIHZvaWQgd3JpdGVMb25ncyhjb25zdCBsb25nKiBkYXRhLCBpb2M6OnVu dW1lcmljX3QgaG93TWFueSk7CiAgICB2b2lkIHJlYWRMb25ncyhsb25nKiBkYXRhLCBpb2M6OnVu dW1lcmljX3QgaG93TWFueSk7CiAgICB2b2lkIHdyaXRlRmxvYXRzKGNvbnN0IGZsb2F0KiBkYXRh LCBpb2M6OnVudW1lcmljX3QgaG93TWFueSk7CiAgICB2b2lkIHJlYWRGbG9hdHMoZmxvYXQqIGRh dGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KTsKICAgIHZvaWQgd3JpdGVEb3VibGVzKGNvbnN0 IGRvdWJsZSogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpOwogICAgdm9pZCByZWFkRG91 Ymxlcyhkb3VibGUqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KTsKCiAgICB2b2lkIHdy aXRlQm9vbHMoY29uc3QgYm9vbCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpOwogICAg dm9pZCByZWFkQm9vbHMoYm9vbCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpOwoKCiAg ICB2b2lkIHJlc2V0KCk7CgogICAgdm9pZCBmbHVzaCgpOwoKcHJpdmF0ZToKICAgIElEYXRhU3Ry ZWFtKCk7CiAgICBJRGF0YVN0cmVhbShjb25zdCBJRGF0YVN0cmVhbSYgb3RoZXIpOwoKICAgIGZy aWVuZCBjbGFzcyBJU3RyZWFtRmFjdG9yeTsKICAgIElEYXRhU3RyZWFtKElTdHJlYW1JTyogc3Ry ZWFtSU8pOwoKcHJpdmF0ZToKICAgIElTdHJlYW1JTyogIGZTdHJlYW1JTzsKfTsKCiAKCiAKCgoK CgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoK IAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWRhdHN0cm0uaW5sIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJtaW8u aHBwIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKCiAKCiAKI3ByYWdtYSBp bmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVM KQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9D X05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAK CiAKY2xhc3MgSU1TdHJlYW1hYmxlOwpjbGFzcyBJTVJlZkNvdW50ZWQ7CmNsYXNzIElUeXBlUmVw cmVzZW50YXRpb247CmNsYXNzIElTdHJlYW1GaW5kZXI7CmNsYXNzIElUeXBlTmFtZTsKY2xhc3Mg SVN0cmVhbUNvbnRleHRGcmFtZTsKY2xhc3MgSURhdGFTdHJlYW07CmNsYXNzIElTdHJlYW1JbkZy YW1lOwpjbGFzcyBJU3RyZWFtT3V0RnJhbWU7CmNsYXNzIElTdHJlYW1Db250ZXh0RnJhbWU7CmNs YXNzIElTdHJlYW1hYmxlR2xvYmFsVGVtcGxhdGVIZWxwZXI7CiAKCiAKCmNsYXNzIElTdHJlYW1J Twp7CnByb3RlY3RlZDoKICAgIElTdHJlYW1JTygpOwogICAgSVN0cmVhbUlPKGNvbnN0IElTdHJl YW1JTyYgb3RoZXIpOwogICAgdmlydHVhbCB+SVN0cmVhbUlPKCk7CgogICAgZnJpZW5kIGNsYXNz IElEYXRhU3RyZWFtOwogICAgIAogICAgIAogICAgIAogICAgIAogICAgdmlydHVhbCB2b2lkICAg IHNldFN0cmVhbShJRGF0YVN0cmVhbSogZGF0YVN0cmVhbSkgPSAwOwoKICAgICAKICAgICAKICAg ICAKICAgIHZpcnR1YWwgdm9pZCAgICByZXNldCgpID0gMDsKCiAgICAgCiAgICAgCiAgICAgCiAg ICB2aXJ0dWFsIHZvaWQgICAgZmx1c2goKSA9IDA7CgogICAgIAogICAgIAogICAgIAogICAgIAog ICAgdmlydHVhbCB2b2lkICAgIHdyaXRlQnl0ZShjaGFyIHNvdXJjZSkgPSAwOwogICAgdmlydHVh bCB2b2lkICAgIHdyaXRlU2hvcnQoc2hvcnQgc291cmNlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg ICAgd3JpdGVJbnQoaW50IHNvdXJjZSkgPSAwOwogICAgdmlydHVhbCB2b2lkICAgIHdyaXRlTG9u Zyhsb25nIHNvdXJjZSkgPSAwOwogICAgdmlydHVhbCB2b2lkICAgIHdyaXRlRmxvYXQoZmxvYXQg c291cmNlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgICAgd3JpdGVEb3VibGUoZG91YmxlIHNvdXJj ZSkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZUJvb2woYm9vbCBzb3VyY2UpID0gMDsK CiAgICAgCiAgICAgCiAgICAgCiAgICB2aXJ0dWFsIGNoYXIgICAgcmVhZEJ5dGUoKSA9IDA7CiAg ICB2aXJ0dWFsIHNob3J0ICAgcmVhZFNob3J0KCkgPSAwOwogICAgdmlydHVhbCBpbnQgICAgIHJl YWRJbnQoKSA9IDA7CiAgICB2aXJ0dWFsIGxvbmcgICAgcmVhZExvbmcoKSA9IDA7CiAgICB2aXJ0 dWFsIGZsb2F0ICAgcmVhZEZsb2F0KCkgPSAwOwogICAgdmlydHVhbCBkb3VibGUgIHJlYWREb3Vi bGUoKSA9IDA7CgogICAgdmlydHVhbCBib29sICAgIHJlYWRCb29sKCkgPSAwOwoKICAgICAKICAg ICAKICAgICAKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEs IGlvYzo6dW51bWVyaWNfdCBob3dNYW55KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgICAgcmVhZEJ5 dGVzKGNoYXIqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KSA9IDA7CiAgICB2aXJ0dWFs IHZvaWQgICAgd3JpdGVTaG9ydHMoY29uc3Qgc2hvcnQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBo b3dNYW55KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgICAgcmVhZFNob3J0cyhzaG9ydCogZGF0YSwg aW9jOjp1bnVtZXJpY190IGhvd01hbnkpID0gMDsKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZUlu dHMoY29uc3QgaW50KiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSkgPSAwOwogICAgdmly dHVhbCB2b2lkICAgIHJlYWRJbnRzKGludCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkp ID0gMDsKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZUxvbmdzKGNvbnN0IGxvbmcqIGRhdGEsIGlv Yzo6dW51bWVyaWNfdCBob3dNYW55KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgICAgcmVhZExvbmdz KGxvbmcqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KSA9IDA7CiAgICB2aXJ0dWFsIHZv aWQgICAgd3JpdGVGbG9hdHMoY29uc3QgZmxvYXQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dN YW55KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgICAgcmVhZEZsb2F0cyhmbG9hdCogZGF0YSwgaW9j Ojp1bnVtZXJpY190IGhvd01hbnkpID0gMDsKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZURvdWJs ZXMoY29uc3QgZG91YmxlKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSkgPSAwOwogICAg dmlydHVhbCB2b2lkICAgIHJlYWREb3VibGVzKGRvdWJsZSogZGF0YSwgaW9jOjp1bnVtZXJpY190 IGhvd01hbnkpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgICAgd3JpdGVCb29scyhjb25zdCBib29s KiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSkgPSAwOwogICAgdmlydHVhbCB2b2lkICAg IHJlYWRCb29scyhib29sKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSkgPSAwOwoKCiAg ICBmcmllbmQgY2xhc3MgSVN0cmVhbWFibGVHbG9iYWxUZW1wbGF0ZUhlbHBlcjsKICAgICAKICAg ICAKICAgICAKICAgIHZpcnR1YWwgdm9pZCAgICB3cml0ZU9iamVjdChjb25zdCBJTVN0cmVhbWFi bGUqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJVHlwZVJl cHJlc2VudGF0aW9uKiB0eXBlUmVwKSA9IDA7CiAgICB2aXJ0dWFsIElNU3RyZWFtYWJsZSogICBy ZWFkT2JqZWN0KGNvbnN0IElTdHJlYW1GaW5kZXIqIGZpbmRlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlvbiogdHlwZVJlcCkg PSAwOwogICAgdmlydHVhbCBib29sICAgIHdyaXRlQWxpYXNlZE9iamVjdChjb25zdCBJTVN0cmVh bWFibGUqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgSU1SZWZDb3VudGVkKiByZWZDb3VudGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uKiB0eXBlUmVwKSA9IDA7CiAgICB2 aXJ0dWFsIGJvb2wgICAgcmVhZEFsaWFzZWRPYmplY3QoSU1TdHJlYW1hYmxlKiYgb2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUmVmQ291bnRlZComIHJlZkNv dW50ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmVh bUZpbmRlciogZmluZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IElUeXBlUmVwcmVzZW50YXRpb24qIHR5cGVSZXApID0gMDsKCiAgICBmcmllbmQgY2xhc3Mg SVN0cmVhbUluRnJhbWU7CiAgICBmcmllbmQgY2xhc3MgSVN0cmVhbU91dEZyYW1lOwogICAgIAog ICAgIAogICAgIAogICAgdmlydHVhbCB2b2lkICAgIHdyaXRlQmVnaW5GcmFtZSgpID0gMDsKICAg IHZpcnR1YWwgdm9pZCAgICB3cml0ZUVuZEZyYW1lKCkgPSAwOwogICAgdmlydHVhbCB2b2lkICAg IHJlYWRCZWdpbkZyYW1lKCkgPSAwOwogICAgdmlydHVhbCB2b2lkICAgIHJlYWRFbmRGcmFtZSgp ID0gMDsKICAgIHZpcnR1YWwgYm9vbCAgICBhdEVuZE9mRnJhbWUoKSA9IDA7CgogICAgZnJpZW5k IGNsYXNzIElTdHJlYW1Db250ZXh0RnJhbWU7CiAgICAgCiAgICAgCiAgICAgCiAgICB2aXJ0dWFs IGJvb2wgICAgZXN0YWJsaXNoQ29udGV4dCgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCAgICBjbGVh ckNvbnRleHQoKSA9IDA7CgogICAgIAogICAgIAogICAgIAogICAgc3RhdGljIElNU3RyZWFtYWJs ZSogY3JlYXRlVW5pbml0aWFsaXplZChjb25zdCBJU3RyZWFtRmluZGVyKiBmaW5kZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElUeXBlTmFtZSYg dHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElN UmVmQ291bnRlZComIHJlZkNvdW50ZWQpOwogICAgc3RhdGljIGNvbnN0IElUeXBlUmVwcmVzZW50 YXRpb24qIGZpbmRUeXBlUmVwcmVzZW50YXRpb24KICAgIChjb25zdCBJU3RyZWFtRmluZGVyKiBm aW5kZXIsIGNvbnN0IElUeXBlTmFtZSYgdHlwZU5hbWUpOwp9OwoKIAoKIAoKCgoKCgoKI3ByYWdt YSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUp CiAKCiAKCiMgMjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWRhdHN0cm0uaW5sIiAyCgogCgogCiAKIAppbmxpbmUKSVN0cmVhbUlPKgpJRGF0YVN0 cmVhbTo6c3RyZWFtSU8oKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIGZTdHJlYW1JTzsKfQoKIAog CiAKIAppbmxpbmUKdm9pZApJRGF0YVN0cmVhbTo6d3JpdGVCeXRlKGNoYXIgc291cmNlKQp7CiAg ICAgICAgZlN0cmVhbUlPLT53cml0ZUJ5dGUoc291cmNlKTsKfQoKaW5saW5lCnZvaWQKSURhdGFT dHJlYW06OndyaXRlU2hvcnQoc2hvcnQgc291cmNlKQp7CiAgICAgICAgZlN0cmVhbUlPLT53cml0 ZVNob3J0KHNvdXJjZSk7Cn0KCmlubGluZQp2b2lkCklEYXRhU3RyZWFtOjp3cml0ZUludChpbnQg c291cmNlKQp7CiAgICAgICAgZlN0cmVhbUlPLT53cml0ZUludChzb3VyY2UpOwp9CgppbmxpbmUK dm9pZApJRGF0YVN0cmVhbTo6d3JpdGVMb25nKGxvbmcgc291cmNlKQp7CiAgICAgICAgZlN0cmVh bUlPLT53cml0ZUxvbmcoc291cmNlKTsKfQoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06OndyaXRl RmxvYXQoZmxvYXQgc291cmNlKQp7CiAgICAgICAgZlN0cmVhbUlPLT53cml0ZUZsb2F0KHNvdXJj ZSk7Cn0KCmlubGluZQp2b2lkCklEYXRhU3RyZWFtOjp3cml0ZURvdWJsZShkb3VibGUgc291cmNl KQp7CiAgICAgICAgZlN0cmVhbUlPLT53cml0ZURvdWJsZShzb3VyY2UpOwp9CgoKaW5saW5lCnZv aWQKSURhdGFTdHJlYW06OndyaXRlQm9vbChib29sIHNvdXJjZSkKewogICAgICAgIGZTdHJlYW1J Ty0+d3JpdGVCb29sKHNvdXJjZSk7Cn0KCgogCiAKIAppbmxpbmUKY2hhcgpJRGF0YVN0cmVhbTo6 cmVhZEJ5dGUoKQp7CiAgICAgICAgcmV0dXJuIGZTdHJlYW1JTy0+cmVhZEJ5dGUoKTsKfQoKaW5s aW5lCnNob3J0CklEYXRhU3RyZWFtOjpyZWFkU2hvcnQoKQp7CiAgICAgICAgcmV0dXJuIGZTdHJl YW1JTy0+cmVhZFNob3J0KCk7Cn0KCmlubGluZQppbnQKSURhdGFTdHJlYW06OnJlYWRJbnQoKQp7 CiAgICAgICAgcmV0dXJuIGZTdHJlYW1JTy0+cmVhZEludCgpOwp9CgppbmxpbmUKbG9uZwpJRGF0 YVN0cmVhbTo6cmVhZExvbmcoKQp7CiAgICAgICAgcmV0dXJuIGZTdHJlYW1JTy0+cmVhZExvbmco KTsKfQoKaW5saW5lCmZsb2F0CklEYXRhU3RyZWFtOjpyZWFkRmxvYXQoKQp7CiAgICAgICAgcmV0 dXJuIGZTdHJlYW1JTy0+cmVhZEZsb2F0KCk7Cn0KCmlubGluZQpkb3VibGUKSURhdGFTdHJlYW06 OnJlYWREb3VibGUoKQp7CiAgICAgICAgcmV0dXJuIGZTdHJlYW1JTy0+cmVhZERvdWJsZSgpOwp9 CgoKaW5saW5lCmJvb2wKSURhdGFTdHJlYW06OnJlYWRCb29sKCkKewogICAgICAgIHJldHVybiBm U3RyZWFtSU8tPnJlYWRCb29sKCk7Cn0KCgogCiAKIAppbmxpbmUKdm9pZApJRGF0YVN0cmVhbTo6 d3JpdGVCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93TWFueSkKewog ICAgICAgIGZTdHJlYW1JTy0+d3JpdGVCeXRlcyhkYXRhLCBob3dNYW55KTsKfQoKaW5saW5lCnZv aWQKSURhdGFTdHJlYW06OnJlYWRCeXRlcyhjaGFyKiBkYXRhLCBpb2M6OnVudW1lcmljX3QgaG93 TWFueSkKewogICAgICAgIGZTdHJlYW1JTy0+cmVhZEJ5dGVzKGRhdGEsIGhvd01hbnkpOwp9Cgpp bmxpbmUKdm9pZApJRGF0YVN0cmVhbTo6d3JpdGVTaG9ydHMoY29uc3Qgc2hvcnQqIGRhdGEsIGlv Yzo6dW51bWVyaWNfdCBob3dNYW55KQp7CiAgICAgICAgZlN0cmVhbUlPLT53cml0ZVNob3J0cyhk YXRhLCBob3dNYW55KTsKfQoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06OnJlYWRTaG9ydHMoc2hv cnQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KQp7CiAgICAgICAgZlN0cmVhbUlPLT5y ZWFkU2hvcnRzKGRhdGEsIGhvd01hbnkpOwp9CgppbmxpbmUKdm9pZApJRGF0YVN0cmVhbTo6d3Jp dGVJbnRzKGNvbnN0IGludCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpCnsKICAgICAg ICBmU3RyZWFtSU8tPndyaXRlSW50cyhkYXRhLCBob3dNYW55KTsKfQoKaW5saW5lCnZvaWQKSURh dGFTdHJlYW06OnJlYWRJbnRzKGludCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpCnsK ICAgICAgICBmU3RyZWFtSU8tPnJlYWRJbnRzKGRhdGEsIGhvd01hbnkpOwp9CgppbmxpbmUKdm9p ZApJRGF0YVN0cmVhbTo6d3JpdGVMb25ncyhjb25zdCBsb25nKiBkYXRhLCBpb2M6OnVudW1lcmlj X3QgaG93TWFueSkKewogICAgICAgIGZTdHJlYW1JTy0+d3JpdGVMb25ncyhkYXRhLCBob3dNYW55 KTsKfQoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06OnJlYWRMb25ncyhsb25nKiBkYXRhLCBpb2M6 OnVudW1lcmljX3QgaG93TWFueSkKewogICAgICAgIGZTdHJlYW1JTy0+cmVhZExvbmdzKGRhdGEs IGhvd01hbnkpOwp9CgppbmxpbmUKdm9pZApJRGF0YVN0cmVhbTo6d3JpdGVGbG9hdHMoY29uc3Qg ZmxvYXQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KQp7CiAgICAgICAgZlN0cmVhbUlP LT53cml0ZUZsb2F0cyhkYXRhLCBob3dNYW55KTsKfQoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06 OnJlYWRGbG9hdHMoZmxvYXQqIGRhdGEsIGlvYzo6dW51bWVyaWNfdCBob3dNYW55KQp7CiAgICAg ICAgZlN0cmVhbUlPLT5yZWFkRmxvYXRzKGRhdGEsIGhvd01hbnkpOwp9CgppbmxpbmUKdm9pZApJ RGF0YVN0cmVhbTo6d3JpdGVEb3VibGVzKGNvbnN0IGRvdWJsZSogZGF0YSwgaW9jOjp1bnVtZXJp Y190IGhvd01hbnkpCnsKICAgICAgICBmU3RyZWFtSU8tPndyaXRlRG91YmxlcyhkYXRhLCBob3dN YW55KTsKfQoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06OnJlYWREb3VibGVzKGRvdWJsZSogZGF0 YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpCnsKICAgICAgICBmU3RyZWFtSU8tPnJlYWREb3Vi bGVzKGRhdGEsIGhvd01hbnkpOwp9CgoKaW5saW5lCnZvaWQKSURhdGFTdHJlYW06OndyaXRlQm9v bHMoY29uc3QgYm9vbCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpCnsKICAgICAgICBm U3RyZWFtSU8tPndyaXRlQm9vbHMoZGF0YSwgaG93TWFueSk7Cn0KCmlubGluZQp2b2lkCklEYXRh U3RyZWFtOjpyZWFkQm9vbHMoYm9vbCogZGF0YSwgaW9jOjp1bnVtZXJpY190IGhvd01hbnkpCnsK ICAgICAgICBmU3RyZWFtSU8tPnJlYWRCb29scyhkYXRhLCBob3dNYW55KTsKfQoKCmlubGluZQp2 b2lkCklEYXRhU3RyZWFtOjpyZXNldCgpCnsKICAgICAgICBmU3RyZWFtSU8tPnJlc2V0KCk7Cn0K CmlubGluZQp2b2lkCklEYXRhU3RyZWFtOjpmbHVzaCgpCnsKICAgICAgICBmU3RyZWFtSU8tPmZs dXNoKCk7Cn0KCiAKCiMgMTU3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2lkYXRzdHJtLmhwcCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnc3RyZWFtLmhwcCIgMQoKCgogCiAKIAoKCgoK CgoKCgoKCiAKIAogCiAKIAogCgogCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVw b3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9y ZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUp CgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSURhdGFTdHJlYW07 CmNsYXNzIElNU3RyZWFtYWJsZTsKCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KElNU3RyZWFtYWJs ZSYgYywgSURhdGFTdHJlYW0mIHMpOwppbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShjaGFyJiBjLCBJ RGF0YVN0cmVhbSYgcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHNpZ25lZCBjaGFyJiBjLCBJ RGF0YVN0cmVhbSYgcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHVuc2lnbmVkIGNoYXImIGMs IElEYXRhU3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oc2hvcnQmIGMsIElEYXRh U3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0odW5zaWduZWQgc2hvcnQmIGMsIElE YXRhU3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oaW50JiBjLCBJRGF0YVN0cmVh bSYgcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHVuc2lnbmVkIGludCYgYywgSURhdGFTdHJl YW0mIHMpOwppbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShsb25nJiBjLCBJRGF0YVN0cmVhbSYgcyk7 CmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHVuc2lnbmVkIGxvbmcmIGMsIElEYXRhU3RyZWFtJiBz KTsKaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oZmxvYXQmIGMsIElEYXRhU3RyZWFtJiBzKTsKaW5s aW5lIHZvaWQgb3BlcmF0b3I8PD0oZG91YmxlJiBjLCBJRGF0YVN0cmVhbSYgcyk7CgppbmxpbmUg dm9pZCBvcGVyYXRvcjw8PShib29sJiBjLCBJRGF0YVN0cmVhbSYgcyk7CgoKaW5saW5lIHZvaWQg b3BlcmF0b3I+Pj0oY29uc3QgSU1TdHJlYW1hYmxlJiBvYmplY3QsIElEYXRhU3RyZWFtJiBzKTsK aW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oY2hhciBjLCBJRGF0YVN0cmVhbSYgcyk7CmlubGluZSB2 b2lkIG9wZXJhdG9yPj49KHNpZ25lZCBjaGFyIGMsIElEYXRhU3RyZWFtJiBzKTsKaW5saW5lIHZv aWQgb3BlcmF0b3I+Pj0odW5zaWduZWQgY2hhciBjLCBJRGF0YVN0cmVhbSYgcyk7CmlubGluZSB2 b2lkIG9wZXJhdG9yPj49KHNob3J0IGMsIElEYXRhU3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3Bl cmF0b3I+Pj0odW5zaWduZWQgc2hvcnQgYywgSURhdGFTdHJlYW0mIHMpOwppbmxpbmUgdm9pZCBv cGVyYXRvcj4+PShpbnQgYywgSURhdGFTdHJlYW0mIHMpOwppbmxpbmUgdm9pZCBvcGVyYXRvcj4+ PSh1bnNpZ25lZCBpbnQgYywgSURhdGFTdHJlYW0mIHMpOwppbmxpbmUgdm9pZCBvcGVyYXRvcj4+ PShsb25nIGMsIElEYXRhU3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0odW5zaWdu ZWQgbG9uZyBjLCBJRGF0YVN0cmVhbSYgcyk7CmlubGluZSB2b2lkIG9wZXJhdG9yPj49KGZsb2F0 IGMsIElEYXRhU3RyZWFtJiBzKTsKaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oZG91YmxlIGMsIElE YXRhU3RyZWFtJiBzKTsKCmlubGluZSB2b2lkIG9wZXJhdG9yPj49KGJvb2wgYywgSURhdGFTdHJl YW0mIHMpOwoKIAoKIAogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFt ZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnc3RyZWFtLmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoK CiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pZGF0c3RybS5ocHAiIDEKIyAxNjggIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWRhdHN0cm0uaHBwIgoKIyAyNiAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ3N0cmVhbS5pbmwi IDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pbXN0cm1ibC5ocHAiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvdHlwZWlu Zm8iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJ0eXBlaW5mbyIKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvZXhjZXB0aW9uIiAxIDMK IAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9uIgoKZXh0ZXJuICJDKysiIHsKCm5h bWVzcGFjZSBzdGQgewoKY2xhc3MgZXhjZXB0aW9uIHsKcHVibGljOgogIGV4Y2VwdGlvbiAoKSB7 IH0KICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0 ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24gewpw dWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uICgp IHsgfQp9OwoKdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZv aWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1p bmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOwp2b2lkIHRlcm1pbmF0ZSAoKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CnVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCAodW5l eHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1bmV4cGVjdGVkICgpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKYm9vbCB1bmNhdWdodF9leGNlcHRpb24gKCk7Cgp9ICAKCn0gIAoKCiMgOSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvdHlwZWluZm8i IDIgMwoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIHR5cGVfaW5mbyB7 CnByaXZhdGU6CiAgIAogIHR5cGVfaW5mbyYgb3BlcmF0b3I9IChjb25zdCB0eXBlX2luZm8mKTsK ICB0eXBlX2luZm8gKGNvbnN0IHR5cGVfaW5mbyYpOwoKcHJvdGVjdGVkOgogIGV4cGxpY2l0IHR5 cGVfaW5mbyAoY29uc3QgY2hhciAqbik6IF9uYW1lIChuKSB7IH0KCiAgY29uc3QgY2hhciAqX25h bWU7CgpwdWJsaWM6CiAgIAogIHZpcnR1YWwgfnR5cGVfaW5mbyAoKTsKICAgIAogIGJvb2wgYmVm b3JlIChjb25zdCB0eXBlX2luZm8mIGFyZykgY29uc3Q7CiAgY29uc3QgY2hhciogbmFtZSAoKSBj b25zdAogICAgeyByZXR1cm4gX25hbWU7IH0KICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHR5cGVf aW5mbyYgYXJnKSBjb25zdDsKICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJn KSBjb25zdDsKfTsKCmlubGluZSBib29sIHR5cGVfaW5mbzo6Cm9wZXJhdG9yIT0gKGNvbnN0IHR5 cGVfaW5mbyYgYXJnKSBjb25zdAp7CiAgcmV0dXJuICFvcGVyYXRvcj09IChhcmcpOwp9CgpjbGFz cyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24gewpwdWJsaWM6CiAgYmFkX2Nhc3QoKSB7IH0K ICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHsgfQp9OwoKY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBl eGNlcHRpb24gewogcHVibGljOgogIGJhZF90eXBlaWQgKCkgeyB9CiAgdmlydHVhbCB+YmFkX3R5 cGVpZCAoKSB7IH0KfTsKCn0gIAoKfSAgCgojIDI3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ltc3RybWJsLmhwcCIgMgoKCiAKCiAKCiAKI3ByYWdt YSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xF VkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9f SU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgog CiAKCiAKY2xhc3MgSURhdGFTdHJlYW07CmNsYXNzIElUeXBlUmVwcmVzZW50YXRpb247CiAKCiAK CmNsYXNzIElNU3RyZWFtYWJsZQp7CnB1YmxpYzoKICAgICAgICB2aXJ0dWFsIH5JTVN0cmVhbWFi bGUoKTsKCiAgICAgICAgdmlydHVhbCBjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiAgICAgIHR5 cGVSZXByZXNlbnRhdGlvbigpIGNvbnN0ID0gMDsKCiAgICAgICAgIAogICAgICAgICAKICAgICAg ICAgCiAgICAgICAgIAogICAgICAgIHZvaWQgZXh0ZXJuYWxpemVUb1N0cmVhbShJRGF0YVN0cmVh bSYgdG93aGVyZSkgY29uc3Q7CiAgICAgICAgdm9pZCBpbnRlcm5hbGl6ZUZyb21TdHJlYW0oSURh dGFTdHJlYW0mIGZyb213aGVyZSk7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB2b2lkIHdy aXRlVG9TdHJlYW0oSURhdGFTdHJlYW0mIHRvd2hlcmUpIGNvbnN0ID0gMDsKICAgICAgICB2aXJ0 dWFsIHZvaWQgcmVhZEZyb21TdHJlYW0oSURhdGFTdHJlYW0mIGZyb213aGVyZSkgPSAwOwoKICAg ICAgICBJTVN0cmVhbWFibGUoKTsKICAgICAgICBJTVN0cmVhbWFibGUoY29uc3QgSU1TdHJlYW1h YmxlJiBvdGhlcik7Cn07CgpjbGFzcyBJU3RyZWFtT3V0RnJhbWUKewpwdWJsaWM6CiAgICAgICAg SVN0cmVhbU91dEZyYW1lKElEYXRhU3RyZWFtJiBhU3RyZWFtKTsKICAgICAgICB+SVN0cmVhbU91 dEZyYW1lKCk7Cgpwcml2YXRlOgogICAgICAgIElTdHJlYW1PdXRGcmFtZSgpOwogICAgICAgIElT dHJlYW1PdXRGcmFtZShjb25zdCBJU3RyZWFtT3V0RnJhbWUmIG90aGVyKTsKCnByaXZhdGU6CiAg ICAgICAgSURhdGFTdHJlYW0qICAgIGZTdHJlYW07Cn07CgoKY2xhc3MgSVN0cmVhbUluRnJhbWUK ewpwdWJsaWM6CiAgICAgICAgSVN0cmVhbUluRnJhbWUoSURhdGFTdHJlYW0mIGFTdHJlYW0pOwog ICAgICAgIH5JU3RyZWFtSW5GcmFtZSgpOwoKICAgICAgICBib29sICAgIGF0RW5kKCk7Cgpwcml2 YXRlOgogICAgICAgIElTdHJlYW1JbkZyYW1lKCk7CiAgICAgICAgSVN0cmVhbUluRnJhbWUoY29u c3QgSVN0cmVhbUluRnJhbWUmIG90aGVyKTsKCnByaXZhdGU6CiAgICAgICAgSURhdGFTdHJlYW0q ICAgIGZTdHJlYW07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPiB2b2lkIHdyaXRlT2JqZWN0 KGNvbnN0IEFUeXBlKiB0aGVPYmplY3QsIElEYXRhU3RyZWFtJiB0aGVTdHJlYW0pOwoKdGVtcGxh dGUgPGNsYXNzIEFUeXBlPiB2b2lkIHdyaXRlQWxpYXNlZE9iamVjdChjb25zdCBBVHlwZSogdGhl T2JqZWN0LCBJRGF0YVN0cmVhbSYgdGhlU3RyZWFtKTsKCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4g dm9pZCByZWFkT2JqZWN0KEFUeXBlKiYgdGhlUmVzdWx0LCBJRGF0YVN0cmVhbSYgdGhlU3RyZWFt KTsKCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4gdm9pZCByZWFkQWxpYXNlZE9iamVjdChBVHlwZSom IHRoZVJlc3VsdCwgSURhdGFTdHJlYW0mIHRoZVN0cmVhbSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5 cGU+IEFUeXBlKiBjb3B5KGNvbnN0IEFUeXBlJiBzb3VyY2UpOwoKdGVtcGxhdGUgPGNsYXNzIEFU eXBlPiBBVHlwZSogY29weVBvaW50ZXIoY29uc3QgQVR5cGUqIHNvdXJjZSk7CgogCgogCgoKCgoK CgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lt c3RybWJsLmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCgoKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRzdHJt LmhwcCIgMQojIDE2OCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pZGF0c3RybS5ocHAiCgojIDI4ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ltc3RybWJsLmlubCIgMgoKIyAxICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0eXBlcmVwLmhwcCIgMQoKCgog CiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAoKIAoKIAoKIAojcHJhZ21hIGluZm8obm9u ZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFn bWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1B TkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIApjbGFz cyBJTVN0cmVhbWFibGU7CmNsYXNzIElTdHJlYW1Nb2R1bGU7CmNsYXNzIElTdHJlYW1hYmxlRmFj dG9yeTsKY2xhc3MgSVR5cGVOYW1lOwogCgogCgpjbGFzcyBJVHlwZVJlcHJlc2VudGF0aW9uCnsK cHVibGljOgogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24mIG90 aGVyKTsKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiBvdGhl cik7Cgpwcml2YXRlOgogICAgSVR5cGVSZXByZXNlbnRhdGlvbigpOwogICAgSVR5cGVSZXByZXNl bnRhdGlvbihjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiBvdGhlcik7CiAgICBJVHlwZVJlcHJl c2VudGF0aW9uJiBvcGVyYXRvcj0oY29uc3QgSVR5cGVSZXByZXNlbnRhdGlvbiYgb3RoZXIpOwog ICAgdmlydHVhbCB+SVR5cGVSZXByZXNlbnRhdGlvbigpOwoKICAgIGZyaWVuZCBjbGFzcyBJVHlw ZU5hbWU7CiAgICBjb25zdCBJVHlwZU5hbWUmIHR5cGVOYW1lKCkgY29uc3Q7CgogICAgZnJpZW5k IGNsYXNzIElTdHJlYW1GaW5kZXI7CiAgICBzdGF0aWMgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlv biogZmluZFR5cGVXaXRoTmFtZShjb25zdCBJVHlwZU5hbWUmIHR5cGVOYW1lKTsKCiAgICBmcmll bmQgY2xhc3MgSVN0cmVhbU1vZHVsZTsKICAgIGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24qICBu ZXh0VHlwZUluTW9kdWxlKCkgY29uc3Q7CiAgICB2b2lkIHNldE5leHQoY29uc3QgSVR5cGVSZXBy ZXNlbnRhdGlvbiogdHlwZVJlcCk7CiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Q7CgogICAg ZnJpZW5kIGNsYXNzIElTdHJlYW1hYmxlRmFjdG9yeTsKICAgIGZyaWVuZCBjbGFzcyBJU3RyZWFt YWJsZUdsb2JhbFRlbXBsYXRlSGVscGVyOwogICAgSVR5cGVSZXByZXNlbnRhdGlvbihJU3RyZWFt YWJsZUZhY3RvcnkqIHN0cmVhbWFibGVGYWN0b3J5KTsKICAgIGNvbnN0IElTdHJlYW1hYmxlRmFj dG9yeSYgc3RyZWFtYWJsZUZhY3RvcnkoKSBjb25zdDsKCiAgICAgCiAgICAgCiAgICAgCiAgICBm cmllbmQgY2xhc3MgSVN0cmVhbVRlc3RIZWxwZXI7CiAgICB2b2lkIG1ha2VDb25zdCgpIGNvbnN0 OwoKcHJpdmF0ZToKICAgIElTdHJlYW1hYmxlRmFjdG9yeSogZkZhY3Rvcnk7CiAgICBjb25zdCBJ VHlwZVJlcHJlc2VudGF0aW9uKiBmTmV4dFR5cGVSZXA7Cn07CgogCgogCgoKCgoKCgojcHJhZ21h IGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJh Z21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKIAoKIyAyOSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pbXN0cm1ibC5pbmwiIDIKCgoKCgoKIAoKCgoKCgoKIAoKIAojcHJhZ21hIGluZm8obm9u ZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFn bWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1B TkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIApjbGFz cyBJU3RyZWFtTW9kdWxlOwpjbGFzcyBJU3RyZWFtSU87CmNsYXNzIElNUmVmQ291bnRlZDsKY2xh c3MgSVZvaWRNYXN0ZXJQb2ludGVyOwogCgogCgpjbGFzcyBJU3RyZWFtYWJsZUZhY3RvcnkKewpw dWJsaWM6CiAgICAgICAgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlvbiYgdHlwZVJlcHJlc2VudGF0 aW9uKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gZlR5cGVSZXA7CiAgICB9OwoKcHJvdGVj dGVkOgogICAgICAgIElTdHJlYW1hYmxlRmFjdG9yeShJU3RyZWFtTW9kdWxlKiBtb2R1bGUpOwoK ZnJpZW5kIGNsYXNzIElTdHJlYW1hYmxlR2xvYmFsVGVtcGxhdGVIZWxwZXI7CiAgICAgICAgdmly dHVhbCBJTVN0cmVhbWFibGUqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSU1SZWZDb3VudGVkKiYgcmVm Q291bnRlZCkgY29uc3QgPSAwOwogICAgICAgIHZpcnR1YWwgSU1TdHJlYW1hYmxlKiBjcmVhdGVD b3B5KGNvbnN0IElNU3RyZWFtYWJsZSYgb3RoZXIpIGNvbnN0ID0gMDsKICAgICAgICB2aXJ0dWFs IGNvbnN0IGNoYXIqICAgICBuYW1lKCkgY29uc3QgPSAwOwoKICAgICAgICBJU3RyZWFtYWJsZUZh Y3RvcnkoKTsKICAgICAgICB+SVN0cmVhbWFibGVGYWN0b3J5KCk7CiAgICAgICAgSVN0cmVhbWFi bGVGYWN0b3J5KGNvbnN0IElTdHJlYW1hYmxlRmFjdG9yeSYgb3RoZXIpOwogICAgICAgIElTdHJl YW1hYmxlRmFjdG9yeSYgICAgIG9wZXJhdG9yPShjb25zdCBJU3RyZWFtYWJsZUZhY3RvcnkmIG90 aGVyKTsKCnByaXZhdGU6CiAgICAgICAgSVR5cGVSZXByZXNlbnRhdGlvbiAgICAgZlR5cGVSZXA7 CiAgICAgICAgSVN0cmVhbU1vZHVsZSogIGZNb2R1bGU7CiAgICAgICAgSVR5cGVOYW1lKiAgICAg IGZUeXBlTmFtZTsKCiAgICBmcmllbmQgY2xhc3MgSVR5cGVSZXByZXNlbnRhdGlvbjsKICAgICAg ICBjb25zdCBJVHlwZU5hbWUmICAgICAgICB0eXBlTmFtZSgpOwoKICAgIGZyaWVuZCBjbGFzcyBJ U3RyZWFtRmluZGVyOwogICAgICAgIHN0YXRpYyAgY29uc3QgSVN0cmVhbWFibGVGYWN0b3J5JiAg ICAgICBmaW5kRmFjdG9yeShjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiB0eXBlUmVwcmVzZW50 YXRpb24pOwp9OwoKI3ByYWdtYSBlbnVtKHBvcCkKCgoKCgoKCmlubGluZSB2b2lkCnN0cmVhbWFi bGVIZWxwZXJBc3NpZ25SZWZDb3VudGVkKElNUmVmQ291bnRlZComIHJlZkNvdW50ZWQsIHZvaWQq KQp7CiAgICAgICAgcmVmQ291bnRlZCA9IDA7Cn0KCmlubGluZSB2b2lkCnN0cmVhbWFibGVIZWxw ZXJBc3NpZ25SZWZDb3VudGVkKElNUmVmQ291bnRlZComIHJlZkNvdW50ZWQsIElNUmVmQ291bnRl ZCogdGVtcCkKewogICAgICAgIHJlZkNvdW50ZWQgPSB0ZW1wOwp9CgoKCgoKCgojcHJhZ21hIGVu dW0oNCkKCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4KY2xhc3MgSVN0cmVhbWFibGVIZWxwZXJGb3Ig OiBwdWJsaWMgSVN0cmVhbWFibGVGYWN0b3J5CnsKcHVibGljOgoKICAgICAgICBJU3RyZWFtYWJs ZUhlbHBlckZvcihJU3RyZWFtTW9kdWxlKiBtb2R1bGUsIC4uLikKICAgICAgICAgICAgICAgIDog SVN0cmVhbWFibGVGYWN0b3J5KG1vZHVsZSkKICAgICAgICAgICAgICAgICwgZkNsYXNzTmFtZSh0 eXBlaWQoQVR5cGUpLm5hbWUoKSkKCgoKCgogICAgICAgIHsKICAgICAgICB9OwogICAgICAgIHZp cnR1YWwgSU1TdHJlYW1hYmxlKiAgIGNyZWF0ZUNvcHkoY29uc3QgSU1TdHJlYW1hYmxlJiBvdGhl cikgY29uc3QKICAgICAgICB7CgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVHlwZShk eW5hbWljX2Nhc3Q8Y29uc3QgQVR5cGUmPihvdGhlcikpOwoKCgoKICAgICAgICB9OwogICAgICAg IHZpcnR1YWwgSU1TdHJlYW1hYmxlKiAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSU1SZWZDb3VudGVk KiYgcmVmQ291bnRlZCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBBVHlwZSogdGVt cCA9IG5ldyBBVHlwZSgpOwogICAgICAgICAgICAgICAgc3RyZWFtYWJsZUhlbHBlckFzc2lnblJl ZkNvdW50ZWQocmVmQ291bnRlZCwgdGVtcCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGVtcDsK ICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogICAgIG5hbWUoKSBjb25zdCB7 IHJldHVybiBmQ2xhc3NOYW1lOyB9OwoKcHJpdmF0ZToKICAgICAgICBjb25zdCBjaGFyKiAgICAg ZkNsYXNzTmFtZTsKCiAgICAgICAgSVN0cmVhbWFibGVIZWxwZXJGb3IoKSB7fTsKICAgICAgICBJ U3RyZWFtYWJsZUhlbHBlckZvcihjb25zdCBJU3RyZWFtYWJsZUhlbHBlckZvcjxBVHlwZT4mIG90 aGVyKSB7fTsKICAgICAgICBJU3RyZWFtYWJsZUhlbHBlckZvcjxBVHlwZT4mICAgIG9wZXJhdG9y PShjb25zdCBJU3RyZWFtYWJsZUhlbHBlckZvcjxBVHlwZT4mIG90aGVyKSB7IHJldHVybiAqdGhp czsgfTsKfTsKCiNwcmFnbWEgZW51bShwb3ApCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgpjbGFzcyB3cml0ZU9iamVjdEludmFsaWRGb3JOb25TdHJlYW1hYmxlT2JqZWN0czsKY2xh c3Mgd3JpdGVPYmplY3RJbnZhbGlkRm9yUmVmQ291bnRlZE9iamVjdHM7CmNsYXNzIHdyaXRlQWxp YXNlZE9iamVjdEludmFsaWRGb3JOb25TdHJlYW1hYmxlT2JqZWN0czsKY2xhc3Mgd3JpdGVBbGlh c2VkT2JqZWN0SW52YWxpZEZvck5vblJlZkNvdW50ZWRPYmplY3RzOwpjbGFzcyByZWFkT2JqZWN0 SW52YWxpZEZvck5vblN0cmVhbWFibGVPYmplY3RzOwpjbGFzcyByZWFkT2JqZWN0SW52YWxpZEZv clJlZkNvdW50ZWRPYmplY3RzOwpjbGFzcyByZWFkQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25T dHJlYW1hYmxlT2JqZWN0czsKY2xhc3MgcmVhZEFsaWFzZWRPYmplY3RJbnZhbGlkRm9yTm9uUmVm Q291bnRlZE9iamVjdHM7CgoKCgoKCgojcHJhZ21hIGVudW0oNCkKCmNsYXNzIElTdHJlYW1hYmxl R2xvYmFsVGVtcGxhdGVIZWxwZXIKewpwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAKICAgICAg ICAgCiAgICAgICAgIAogICAgICAgIHN0YXRpYyAgdm9pZCAgICB3cml0ZVVuYWxpYXNlZE9iamVj dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgSU1TdHJlYW1hYmxlKiBzb3VyY2UpOwogICAgICAgIHN0YXRpYyAgdm9pZCAgICB3cml0ZVVu YWxpYXNlZE9iamVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgSU1TdHJlYW1hYmxlKiAgICAgc291cmNlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiB0eXBlUmVwcmVzZW50YXRpb24pOwoKICAgICAgICAg CiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgc3RhdGljICB2b2lkICAgIHdy aXRlQWxpYXNlZE9iamVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSU1TdHJlYW1hYmxlKiBzb3VyY2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IElNUmVmQ291bnRlZCogcmVmQ291bnRlZCk7CiAgICAgICAgc3RhdGljICB2b2lkICAgIHdy aXRlQWxpYXNlZE9iamVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSU1TdHJlYW1hYmxlKiAgICAgc291cmNlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJTVJlZkNvdW50ZWQqIHJlZkNvdW50ZWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElU eXBlUmVwcmVzZW50YXRpb24mIHR5cGVSZXByZXNlbnRhdGlvbik7CiAgICAgICAgc3RhdGljICB2 b2lkICAgIHdyaXRlQWxpYXNlZE9iamVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJl YW1JTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU1TdHJlYW1hYmxlKiAgICAgc291cmNlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBJTVJlZkNvdW50ZWQqIHJlZkNvdW50ZWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgaXNXcmFwcGVkKTsKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAg IAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBzdGF0aWMg IElNU3RyZWFtYWJsZSogICByZWFkVW5hbGlhc2VkT2JqZWN0KElTdHJlYW1JTyYgc3RyZWFtSU8p OwogICAgICAgIHN0YXRpYyAgSU1TdHJlYW1hYmxlKiAgIHJlYWRVbmFsaWFzZWRPYmplY3QoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBz dHJlYW1JTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiB0eXBlUmVwcmVzZW50YXRpb24pOwogICAgICAgIHN0 YXRpYyAgSU1TdHJlYW1hYmxlKiAgIHJlYWRVbmFsaWFzZWRPYmplY3QoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyZWFt RmluZGVyJiBmaW5kZXIpOwogICAgICAgIHN0YXRpYyAgSU1TdHJlYW1hYmxlKiAgIHJlYWRVbmFs aWFzZWRPYmplY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBJU3RyZWFtRmluZGVyJiBmaW5kZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlv biYgdHlwZVJlcHJlc2VudGF0aW9uKTsKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAg ICAgICAgIAogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBz dGF0aWMgIElNU3RyZWFtYWJsZSogICByZWFkQWxpYXNlZE9iamVjdChJU3RyZWFtSU8mIHN0cmVh bUlPKTsKICAgICAgICBzdGF0aWMgIElNU3RyZWFtYWJsZSogICByZWFkQWxpYXNlZE9iamVjdCgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RyZWFtSU8m IHN0cmVhbUlPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24mIHR5cGVSZXByZXNlbnRhdGlvbik7CiAgICAgICAg c3RhdGljICBJTVN0cmVhbWFibGUqICAgcmVhZEFsaWFzZWRPYmplY3QoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyZWFt RmluZGVyJiBmaW5kZXIpOwogICAgICAgIHN0YXRpYyAgSU1TdHJlYW1hYmxlKiAgIHJlYWRBbGlh c2VkT2JqZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElTdHJlYW1JTyYgc3RyZWFtSU8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSVN0cmVhbUZpbmRlciYgZmluZGVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24m IHR5cGVSZXByZXNlbnRhdGlvbik7CiAgICAgICAgc3RhdGljICBJTVN0cmVhbWFibGUqICAgcmVh ZEFsaWFzZWRPYmplY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSVN0cmVhbUlPJiBzdHJlYW1JTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJVm9pZE1hc3RlclBvaW50ZXIqJiByZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1dyYXBwZWQpOwoKICAg ICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBzdGF0aWMgIElNU3RyZWFtYWJsZSog ICBjcmVhdGVDb3B5KGNvbnN0IElNU3RyZWFtYWJsZSYgc291cmNlKTsKfTsKCiAKCiAKI3ByYWdt YSBlbnVtKHBvcCkKCgoKCgoKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCgog CiAKCmlubGluZSB3cml0ZU9iamVjdEludmFsaWRGb3JOb25TdHJlYW1hYmxlT2JqZWN0cyYKd3Jp dGVPYmplY3RDaGVjayhJRGF0YVN0cmVhbSYgdGhlU3RyZWFtLCB2b2lkKiAgLCB2b2lkKiAgKQp7 CiAgICAgICAgcmV0dXJuICood3JpdGVPYmplY3RJbnZhbGlkRm9yTm9uU3RyZWFtYWJsZU9iamVj dHMqKTA7Cn0KCiAKCmlubGluZSBJRGF0YVN0cmVhbSYKd3JpdGVPYmplY3RDaGVjayhJRGF0YVN0 cmVhbSYgdGhlU3RyZWFtLCBJTVN0cmVhbWFibGUqICAsIHZvaWQqICApCnsKICAgICAgICByZXR1 cm4gdGhlU3RyZWFtOwp9CgppbmxpbmUgd3JpdGVPYmplY3RJbnZhbGlkRm9yUmVmQ291bnRlZE9i amVjdHMmCndyaXRlT2JqZWN0Q2hlY2soSURhdGFTdHJlYW0mIHRoZVN0cmVhbSwgSU1TdHJlYW1h YmxlKiAgLCBJTVJlZkNvdW50ZWQqICApCnsKICAgICAgICByZXR1cm4gKih3cml0ZU9iamVjdElu dmFsaWRGb3JSZWZDb3VudGVkT2JqZWN0cyopMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgpp bmxpbmUgdm9pZCB3cml0ZU9iamVjdChjb25zdCBBVHlwZSogdGhlT2JqZWN0LCBJRGF0YVN0cmVh bSYgdGhlU3RyZWFtKQp7CiAgICAgICAgSVN0cmVhbWFibGVHbG9iYWxUZW1wbGF0ZUhlbHBlcjo6 d3JpdGVVbmFsaWFzZWRPYmplY3QoKjo6d3JpdGVPYmplY3RDaGVjayh0aGVTdHJlYW0sIChBVHlw ZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCB0aGVPYmplY3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQVR5cGU+CmlubGluZSB2b2lkCndyaXRlT2JqZWN0KGNvbnN0IEFUeXBlKiB0aGVPYmplY3Qs IGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24mIHR5cGVSZXAsIElEYXRhU3RyZWFtJiB0aGVTdHJl YW0pCnsKICAgICAgICBJU3RyZWFtYWJsZUdsb2JhbFRlbXBsYXRlSGVscGVyOjp3cml0ZVVuYWxp YXNlZE9iamVjdCgqOjp3cml0ZU9iamVjdENoZWNrKHRoZVN0cmVhbSwgKEFUeXBlKikwLCAoQVR5 cGUqKTApLnN0cmVhbUlPKCksIHRoZU9iamVjdCwgdHlwZVJlcCk7Cn0KCiAKIAoKaW5saW5lIHdy aXRlQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25TdHJlYW1hYmxlT2JqZWN0cyYKd3JpdGVBbGlh c2VkT2JqZWN0Q2hlY2soSURhdGFTdHJlYW0mIHRoZVN0cmVhbSwgdm9pZCogICwgdm9pZCogICkK ewogICAgICAgIHJldHVybiAqKHdyaXRlQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25TdHJlYW1h YmxlT2JqZWN0cyopMDsKfQoKaW5saW5lIHdyaXRlQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25S ZWZDb3VudGVkT2JqZWN0cyYKd3JpdGVBbGlhc2VkT2JqZWN0Q2hlY2soSURhdGFTdHJlYW0mIHRo ZVN0cmVhbSwgSU1TdHJlYW1hYmxlKiAgLCB2b2lkKiAgKQp7CiAgICAgICAgcmV0dXJuICood3Jp dGVBbGlhc2VkT2JqZWN0SW52YWxpZEZvck5vblJlZkNvdW50ZWRPYmplY3RzKikwOwp9CgogCgpp bmxpbmUgSURhdGFTdHJlYW0mCndyaXRlQWxpYXNlZE9iamVjdENoZWNrKElEYXRhU3RyZWFtJiB0 aGVTdHJlYW0sIElNU3RyZWFtYWJsZSogICwgSU1SZWZDb3VudGVkKiAgKQp7CiAgICAgICAgcmV0 dXJuIHRoZVN0cmVhbTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9pZCB3cml0 ZUFsaWFzZWRPYmplY3QoY29uc3QgQVR5cGUqIHRoZU9iamVjdCwgSURhdGFTdHJlYW0mIHRoZVN0 cmVhbSkKewogICAgICAgIElTdHJlYW1hYmxlR2xvYmFsVGVtcGxhdGVIZWxwZXI6OndyaXRlQWxp YXNlZE9iamVjdCgqOjp3cml0ZUFsaWFzZWRPYmplY3RDaGVjayh0aGVTdHJlYW0sIChBVHlwZSop MCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCB0aGVPYmplY3QsIHRoZU9iamVjdCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBBVHlwZT4KaW5saW5lIHZvaWQKd3JpdGVBbGlhc2VkT2JqZWN0KGNvbnN0IEFU eXBlKiB0aGVPYmplY3QsIGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24mIHR5cGVSZXAsIElEYXRh U3RyZWFtJiB0aGVTdHJlYW0pCnsKICAgICAgICBJU3RyZWFtYWJsZUdsb2JhbFRlbXBsYXRlSGVs cGVyOjp3cml0ZUFsaWFzZWRPYmplY3QoKjo6d3JpdGVBbGlhc2VkT2JqZWN0Q2hlY2sodGhlU3Ry ZWFtLCAoQVR5cGUqKTAsIChBVHlwZSopMCkuc3RyZWFtSU8oKSwgdGhlT2JqZWN0LCB0aGVPYmpl Y3QsIHR5cGVSZXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGluZSB2b2lkCndyaXRl Q291bnRlZE9iamVjdChjb25zdCBBVHlwZSogdGhlT2JqZWN0LCBJTVJlZkNvdW50ZWQqIHJlZkNv dW50ZWQsIGJvb2wgaXNXcmFwcGVkLCBJRGF0YVN0cmVhbSYgdGhlU3RyZWFtKQp7CiAgICAgICAg SVN0cmVhbWFibGVHbG9iYWxUZW1wbGF0ZUhlbHBlcjo6d3JpdGVBbGlhc2VkT2JqZWN0KCAqdGhl U3RyZWFtLnN0cmVhbUlPKCksIHRoZU9iamVjdCwgcmVmQ291bnRlZCwgaXNXcmFwcGVkICk7Cn0K CiAKCmlubGluZSByZWFkT2JqZWN0SW52YWxpZEZvck5vblN0cmVhbWFibGVPYmplY3RzJgpyZWFk T2JqZWN0Q2hlY2soSURhdGFTdHJlYW0mIHRoZVN0cmVhbSwgdm9pZCogICwgdm9pZCogICkKewog ICAgICAgIHJldHVybiAqKHJlYWRPYmplY3RJbnZhbGlkRm9yTm9uU3RyZWFtYWJsZU9iamVjdHMq KTA7Cn0KCiAKCmlubGluZSBJRGF0YVN0cmVhbSYKcmVhZE9iamVjdENoZWNrKElEYXRhU3RyZWFt JiB0aGVTdHJlYW0sIElNU3RyZWFtYWJsZSogICwgdm9pZCogICkKewogICAgICAgIHJldHVybiB0 aGVTdHJlYW07Cn0KCmlubGluZSByZWFkT2JqZWN0SW52YWxpZEZvclJlZkNvdW50ZWRPYmplY3Rz JgpyZWFkT2JqZWN0Q2hlY2soSURhdGFTdHJlYW0mIHRoZVN0cmVhbSwgSU1TdHJlYW1hYmxlKiAg LCBJTVJlZkNvdW50ZWQqICApCnsKICAgICAgICByZXR1cm4gKihyZWFkT2JqZWN0SW52YWxpZEZv clJlZkNvdW50ZWRPYmplY3RzKikwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGluZSB2 b2lkIHJlYWRPYmplY3QoQVR5cGUqJiB0aGVSZXN1bHQsIElEYXRhU3RyZWFtJiB0aGVTdHJlYW0p CnsKICAgICAgICBJTVN0cmVhbWFibGUqIHRoZVN0cmVhbWFibGUgPSBJU3RyZWFtYWJsZUdsb2Jh bFRlbXBsYXRlSGVscGVyOjpyZWFkVW5hbGlhc2VkT2JqZWN0KCo6OnJlYWRPYmplY3RDaGVjayh0 aGVTdHJlYW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpKTsKCiAgICAgICAgdGhl UmVzdWx0ID0gZHluYW1pY19jYXN0PEFUeXBlKj4odGhlU3RyZWFtYWJsZSk7CgoKCn0KCnRlbXBs YXRlIDxjbGFzcyBBVHlwZT4KaW5saW5lIHZvaWQKcmVhZE9iamVjdChBVHlwZSomIHRoZVJlc3Vs dCwgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlvbiYgdHlwZVJlcCwgSURhdGFTdHJlYW0mIHRoZVN0 cmVhbSkKewogICAgICAgIElNU3RyZWFtYWJsZSogdGhlU3RyZWFtYWJsZSA9IElTdHJlYW1hYmxl R2xvYmFsVGVtcGxhdGVIZWxwZXI6OnJlYWRVbmFsaWFzZWRPYmplY3QoKjo6cmVhZE9iamVjdENo ZWNrKHRoZVN0cmVhbSwgKEFUeXBlKikwLCAoQVR5cGUqKTApLnN0cmVhbUlPKCksIHR5cGVSZXAp OwoKICAgICAgICB0aGVSZXN1bHQgPSBkeW5hbWljX2Nhc3Q8QVR5cGUqPih0aGVTdHJlYW1hYmxl KTsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9pZApyZWFkT2JqZWN0KEFU eXBlKiYgdGhlUmVzdWx0LCBjb25zdCBJU3RyZWFtRmluZGVyJiBmaW5kZXIsIElEYXRhU3RyZWFt JiB0aGVTdHJlYW0pCnsKICAgICAgICBJTVN0cmVhbWFibGUqIHRoZVN0cmVhbWFibGUgPSBJU3Ry ZWFtYWJsZUdsb2JhbFRlbXBsYXRlSGVscGVyOjpyZWFkVW5hbGlhc2VkT2JqZWN0KCo6OnJlYWRP YmplY3RDaGVjayh0aGVTdHJlYW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCBm aW5kZXIpOwoKICAgICAgICB0aGVSZXN1bHQgPSBkeW5hbWljX2Nhc3Q8QVR5cGUqPih0aGVTdHJl YW1hYmxlKTsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9pZApyZWFkT2Jq ZWN0KEFUeXBlKiYgdGhlUmVzdWx0LCBjb25zdCBJU3RyZWFtRmluZGVyJiBmaW5kZXIsIGNvbnN0 IElUeXBlUmVwcmVzZW50YXRpb24mIHR5cGVSZXAsIElEYXRhU3RyZWFtJiB0aGVTdHJlYW0pCnsK ICAgICAgICBJTVN0cmVhbWFibGUqIHRoZVN0cmVhbWFibGUgPSBJU3RyZWFtYWJsZUdsb2JhbFRl bXBsYXRlSGVscGVyOjpyZWFkVW5hbGlhc2VkT2JqZWN0KCo6OnJlYWRPYmplY3RDaGVjayh0aGVT dHJlYW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCBmaW5kZXIsIHR5cGVSZXAp OwoKICAgICAgICB0aGVSZXN1bHQgPSBkeW5hbWljX2Nhc3Q8QVR5cGUqPih0aGVTdHJlYW1hYmxl KTsKCgoKfQoKIAoKIAogCmlubGluZSByZWFkQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25TdHJl YW1hYmxlT2JqZWN0cyYKcmVhZEFsaWFzZWRPYmplY3RDaGVjayhJRGF0YVN0cmVhbSYgdGhlU3Ry ZWFtLCB2b2lkKiAgLCB2b2lkKiAgKQp7CiAgICAgICAgcmV0dXJuICoocmVhZEFsaWFzZWRPYmpl Y3RJbnZhbGlkRm9yTm9uU3RyZWFtYWJsZU9iamVjdHMqKTA7Cn0KCmlubGluZSByZWFkQWxpYXNl ZE9iamVjdEludmFsaWRGb3JOb25SZWZDb3VudGVkT2JqZWN0cyYKcmVhZEFsaWFzZWRPYmplY3RD aGVjayhJRGF0YVN0cmVhbSYgdGhlU3RyZWFtLCBJTVN0cmVhbWFibGUqICAsIHZvaWQqICApCnsK ICAgICAgICByZXR1cm4gKihyZWFkQWxpYXNlZE9iamVjdEludmFsaWRGb3JOb25SZWZDb3VudGVk T2JqZWN0cyopMDsKfQoKIAoKaW5saW5lIElEYXRhU3RyZWFtJgpyZWFkQWxpYXNlZE9iamVjdENo ZWNrKElEYXRhU3RyZWFtJiB0aGVTdHJlYW0sIElNU3RyZWFtYWJsZSogICwgSU1SZWZDb3VudGVk KiAgKQp7CiAgICAgICAgcmV0dXJuIHRoZVN0cmVhbTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBl PgppbmxpbmUgdm9pZCByZWFkQWxpYXNlZE9iamVjdChBVHlwZSomIHRoZVJlc3VsdCwgSURhdGFT dHJlYW0mIHRoZVN0cmVhbSkKewogCgogICAgICAgIHRoZVJlc3VsdCA9IGR5bmFtaWNfY2FzdDxB VHlwZSo+KHRoZVN0cmVhbWFibGUpOwoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGlu ZSB2b2lkCnJlYWRBbGlhc2VkT2JqZWN0KEFUeXBlKiYgdGhlUmVzdWx0LCBjb25zdCBJVHlwZVJl cHJlc2VudGF0aW9uJiB0eXBlUmVwLCBJRGF0YVN0cmVhbSYgdGhlU3RyZWFtKQp7CiAgICAgICAg SU1TdHJlYW1hYmxlKiB0aGVTdHJlYW1hYmxlID0gSVN0cmVhbWFibGVHbG9iYWxUZW1wbGF0ZUhl bHBlcjo6cmVhZEFsaWFzZWRPYmplY3QoKjo6cmVhZEFsaWFzZWRPYmplY3RDaGVjayh0aGVTdHJl YW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCB0eXBlUmVwKTsKCiAKCgoKfQoK dGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9pZApyZWFkQWxpYXNlZE9iamVjdChBVHlw ZSomIHRoZVJlc3VsdCwgY29uc3QgSVN0cmVhbUZpbmRlciYgZmluZGVyLCBJRGF0YVN0cmVhbSYg dGhlU3RyZWFtKQp7CiAgICAgICAgSU1TdHJlYW1hYmxlKiB0aGVTdHJlYW1hYmxlID0gSVN0cmVh bWFibGVHbG9iYWxUZW1wbGF0ZUhlbHBlcjo6cmVhZEFsaWFzZWRPYmplY3QoKjo6cmVhZEFsaWFz ZWRPYmplY3RDaGVjayh0aGVTdHJlYW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygp LCBmaW5kZXIpOwoKICAgICAgICB0aGVSZXN1bHQgPSBkeW5hbWljX2Nhc3Q8QVR5cGUqPih0aGVT dHJlYW1hYmxlKTsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9pZApyZWFk QWxpYXNlZE9iamVjdChBVHlwZSomIHRoZVJlc3VsdCwgY29uc3QgSVN0cmVhbUZpbmRlciYgZmlu ZGVyLCBjb25zdCBJVHlwZVJlcHJlc2VudGF0aW9uJiB0eXBlUmVwLCBJRGF0YVN0cmVhbSYgdGhl U3RyZWFtKQp7CiAgICAgICAgSU1TdHJlYW1hYmxlKiB0aGVTdHJlYW1hYmxlID0gSVN0cmVhbWFi bGVHbG9iYWxUZW1wbGF0ZUhlbHBlcjo6cmVhZEFsaWFzZWRPYmplY3QoKjo6cmVhZEFsaWFzZWRP YmplY3RDaGVjayh0aGVTdHJlYW0sIChBVHlwZSopMCwgKEFUeXBlKikwKS5zdHJlYW1JTygpLCBm aW5kZXIsIHR5cGVSZXApOwoKICAgICAgICB0aGVSZXN1bHQgPSBkeW5hbWljX2Nhc3Q8QVR5cGUq Pih0aGVTdHJlYW1hYmxlKTsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgdm9p ZApyZWFkQ291bnRlZE9iamVjdChBVHlwZSomIHRoZVJlc3VsdCwgSVZvaWRNYXN0ZXJQb2ludGVy KiYgaW5kaXJlY3QsIGJvb2wgaXNXcmFwcGVkLCBJRGF0YVN0cmVhbSYgdGhlU3RyZWFtKQp7CiAg ICAgICAgSU1TdHJlYW1hYmxlKiB0aGVTdHJlYW1hYmxlID0gSVN0cmVhbWFibGVHbG9iYWxUZW1w bGF0ZUhlbHBlcjo6cmVhZEFsaWFzZWRPYmplY3QoKnRoZVN0cmVhbS5zdHJlYW1JTygpLCBpbmRp cmVjdCwgaXNXcmFwcGVkKTsKCiAgICAgICAgdGhlUmVzdWx0ID0gZHluYW1pY19jYXN0PEFUeXBl Kj4odGhlU3RyZWFtYWJsZSk7CgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4KaW5saW5lIEFU eXBlKiBjb3B5KGNvbnN0IEFUeXBlJiBzb3VyY2UpCnsKICAgICAgICBJTVN0cmVhbWFibGUqIHRo ZUNvcHkgPSBJU3RyZWFtYWJsZUdsb2JhbFRlbXBsYXRlSGVscGVyOjpjcmVhdGVDb3B5KHNvdXJj ZSk7CgogICAgICAgIHJldHVybiBkeW5hbWljX2Nhc3Q8QVR5cGUqPih0aGVDb3B5KTsKCgoKfQoK dGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUgQVR5cGUqIGNvcHlQb2ludGVyKGNvbnN0IEFU eXBlKiBzb3VyY2UpCnsKICAgICAgICBpZiAoc291cmNlID09IDApCiAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKICAgICAgICByZXR1cm4gOjpjb3B5KCpzb3VyY2UpOwp9CgogCgogCiNwcmFnbWEg aW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgog CgojIDE1NSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pbXN0cm1ibC5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWdzdHJlYW0uaW5sIiAyCgogCgppbmxp bmUgdm9pZCBvcGVyYXRvcjw8PShJTVN0cmVhbWFibGUmIG9iamVjdCwgSURhdGFTdHJlYW0mIHMp CnsKICAgICAgICBvYmplY3QuaW50ZXJuYWxpemVGcm9tU3RyZWFtKHMpOwp9CgppbmxpbmUgdm9p ZCBvcGVyYXRvcjw8PShjaGFyJiBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAgIGMgPSBzLnJl YWRCeXRlKCk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHNpZ25lZCBjaGFyJiBjLCBJRGF0 YVN0cmVhbSYgcykKewogICAgICAgIGMgPSAoc2lnbmVkIGNoYXIpIHMucmVhZEJ5dGUoKTsKfQoK aW5saW5lIHZvaWQgb3BlcmF0b3I8PD0odW5zaWduZWQgY2hhciYgYywgSURhdGFTdHJlYW0mIHMp CnsKICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpIHMucmVhZEJ5dGUoKTsKfQoKaW5saW5lIHZv aWQgb3BlcmF0b3I8PD0oc2hvcnQmIGMsIElEYXRhU3RyZWFtJiBzKQp7CiAgICAgICAgYyA9IHMu cmVhZFNob3J0KCk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHVuc2lnbmVkIHNob3J0JiBj LCBJRGF0YVN0cmVhbSYgcykKewogICAgICAgIGMgPSAodW5zaWduZWQgc2hvcnQpIHMucmVhZFNo b3J0KCk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KGludCYgYywgSURhdGFTdHJlYW0mIHMp CnsKICAgICAgICBjID0gcy5yZWFkSW50KCk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KHVu c2lnbmVkIGludCYgYywgSURhdGFTdHJlYW0mIHMpCnsKICAgICAgICBjID0gKHVuc2lnbmVkIGlu dCkgcy5yZWFkSW50KCk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KGxvbmcmIGMsIElEYXRh U3RyZWFtJiBzKQp7CiAgICAgICAgYyA9IHMucmVhZExvbmcoKTsKfQoKaW5saW5lIHZvaWQgb3Bl cmF0b3I8PD0odW5zaWduZWQgbG9uZyYgYywgSURhdGFTdHJlYW0mIHMpCnsKICAgICAgICBjID0g KHVuc2lnbmVkIGxvbmcpIHMucmVhZExvbmcoKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0o ZmxvYXQmIGMsIElEYXRhU3RyZWFtJiBzKQp7CiAgICAgICAgYyA9IHMucmVhZEZsb2F0KCk7Cn0K CmlubGluZSB2b2lkIG9wZXJhdG9yPDw9KGRvdWJsZSYgYywgSURhdGFTdHJlYW0mIHMpCnsKICAg ICAgICBjID0gcy5yZWFkRG91YmxlKCk7Cn0KCgppbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShib29s JiBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAgIGMgPSBzLnJlYWRCb29sKCk7Cn0KCgppbmxp bmUgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBJTVN0cmVhbWFibGUmIG9iamVjdCwgSURhdGFTdHJl YW0mIHMpCnsKICAgICAgICBvYmplY3QuZXh0ZXJuYWxpemVUb1N0cmVhbShzKTsKfQoKaW5saW5l IHZvaWQgb3BlcmF0b3I+Pj0oY2hhciBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAgIHMud3Jp dGVCeXRlKGMpOwp9CgppbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShzaWduZWQgY2hhciBjLCBJRGF0 YVN0cmVhbSYgcykKewogICAgICAgIHMud3JpdGVCeXRlKChjaGFyKSBjKTsKfQoKaW5saW5lIHZv aWQgb3BlcmF0b3I+Pj0odW5zaWduZWQgY2hhciBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAg IHMud3JpdGVCeXRlKChjaGFyKSBjKTsKfQoKaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oc2hvcnQg YywgSURhdGFTdHJlYW0mIHMpCnsKICAgICAgICBzLndyaXRlU2hvcnQoYyk7Cn0KCmlubGluZSB2 b2lkIG9wZXJhdG9yPj49KHVuc2lnbmVkIHNob3J0IGMsIElEYXRhU3RyZWFtJiBzKQp7CiAgICAg ICAgcy53cml0ZVNob3J0KChzaG9ydCkgYyk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPj49KGlu dCBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAgIHMud3JpdGVJbnQoYyk7Cn0KCmlubGluZSB2 b2lkIG9wZXJhdG9yPj49KHVuc2lnbmVkIGludCBjLCBJRGF0YVN0cmVhbSYgcykKewogICAgICAg IHMud3JpdGVMb25nKChpbnQpIGMpOwp9CgppbmxpbmUgdm9pZCBvcGVyYXRvcj4+PShsb25nIGMs IElEYXRhU3RyZWFtJiBzKQp7CiAgICAgICAgcy53cml0ZUxvbmcoYyk7Cn0KCmlubGluZSB2b2lk IG9wZXJhdG9yPj49KHVuc2lnbmVkIGxvbmcgYywgSURhdGFTdHJlYW0mIHMpCnsKICAgICAgICBz LndyaXRlTG9uZygobG9uZykgYyk7Cn0KCmlubGluZSB2b2lkIG9wZXJhdG9yPj49KGZsb2F0IGMs IElEYXRhU3RyZWFtJiBzKQp7CiAgICAgICAgcy53cml0ZUZsb2F0KGMpOwp9CgppbmxpbmUgdm9p ZCBvcGVyYXRvcj4+PShkb3VibGUgYywgSURhdGFTdHJlYW0mIHMpCnsKICAgICAgICBzLndyaXRl RG91YmxlKGMpOwp9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3I+Pj0oYm9vbCBjLCBJRGF0YVN0cmVh bSYgcykKewogICAgICAgIHMud3JpdGVCb29sKGMpOwp9CgoKIAoKIyAxMTUgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWdzdHJlYW0uaHBwIiAyCgog CgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgogCgojIDE1OCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pZGF0c3RybS5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNw cmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMzEgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWRhdGUuaHBwIiAy CgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aXN0cmluZy5ocHAiIDEKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pc3RyZWFtLmhwcCIgMQojIDU2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJlYW0uaHBwIgoKCgoKCiMgMjkgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmluZy5ocHAiIDIKCgoj IDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0 cmVudW0uaHBwIiAxCiMgMTAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaXN0cmVudW0uaHBwIgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAoKIAoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSBy ZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0 b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVN RSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIAogCgogCgpjbGFzcyAgIElT dHJpbmdFbnVtIHsKcHVibGljOgogCnR5cGVkZWYgZW51bSB7CiAgbGVhZGluZywKICB0cmFpbGlu ZywKICBib3RoCiAgfSBTdHJpcE1vZGU7CgogCnR5cGVkZWYgZW51bSB7CiAgc2JjcywKICBkYmNz MSA9IDEsCiAgbWJjczEgPSAxLAogIGRiY3MyID0gMiwKICBtYmNzMiA9IDIsCiAgbWJjczMgPSAz LAogIG1iY3M0ID0gNAogIH0gQ2hhclR5cGU7Cgp9OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVt KHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiAKCiAKI3ByYWdtYSBp bmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAK CgoKCgoKCiMgMzEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaXN0cmluZy5ocHAiIDIKCgoKZXh0ZXJuICJDIgp7CiAgICAKIyAxICIvdXNyL2xpYi9n Y2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgog CgoKCgoKIAojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs dWRlL3N5c2xpbWl0cy5oIiAxIDMKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1 c2UtbGludXgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3Iv bGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK CiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK CiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvbG9jYWxfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCiMgMSAiL3Vz ci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjcgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKCgogCgoKCgoKIAoKIAoKCiAKCiAKCgog CgogCgoKIAoKCgogCgojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMK CgoKCgoKCgogCgoKCgoKCgojIDMwICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDM0ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RkaW9fbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzIgIi91c3IvaW5j bHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAzCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKIAoKCgogCgoK CgogCgoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAyIDMKCgoKCiAKCgoKCgogCgojIDEyMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoK CgogIAoKCgoKCgoKCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1 LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDcgIi91c3IvbGliL2djYy1saWIvczM5MC1z dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xp Yi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoK CgoKIAoKCgogCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoK CgogCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCgog CgoKCgoKCgoKCiMgMzYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaXN0cmluZy5ocHAiIDIKCn0KIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdt YSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1ND SEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIApjbGFzcyBJU3RyaW5n VGVzdDsKY2xhc3MgSUJ1ZmZlcjsKY2xhc3MgSVRleHQ7CmNsYXNzIElTdHJpbmc7CgogCgppbmxp bmUgc3RkOjpvc3RyZWFtJiAgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYVN0 cmluZyk7CmlubGluZSBzdGQ6OmlzdHJlYW0mICAgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmFT dHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU3RyaW5n ICZhU3RyaW5nKTsKCgoKCgoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJU3RyaW5nICZz dHJpbmcxLCBjb25zdCBJU3RyaW5nICZzdHJpbmcyKTsKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCBJU3RyaW5nICZzdHJpbmcxLCBjb25zdCBjaGFyICpwU3RyaW5nMik7CmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgY2hhciAqcFN0cmluZzEsIGNvbnN0IElTdHJpbmcgJnN0cmluZzIp OwppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElTdHJpbmcgJnN0cmluZzEsIGNvbnN0IElT dHJpbmcgJnN0cmluZzIpOwppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElTdHJpbmcgJnN0 cmluZzEsIGNvbnN0IGNoYXIgKnBTdHJpbmcyKTsKaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCBjaGFyICpwU3RyaW5nMSwgY29uc3QgSVN0cmluZyAmc3RyaW5nMik7CmlubGluZSBib29sIG9w ZXJhdG9yPChjb25zdCBJU3RyaW5nICZzdHJpbmcxLCBjb25zdCBJU3RyaW5nICZzdHJpbmcyKTsK aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IElTdHJpbmcgJnN0cmluZzEsIGNvbnN0IGNoYXIg KnBTdHJpbmcyKTsKaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGNoYXIgKnBTdHJpbmcxLCBj b25zdCBJU3RyaW5nICZzdHJpbmcyKTsKaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBJU3Ry aW5nICZzdHJpbmcxLCBjb25zdCBJU3RyaW5nICZzdHJpbmcyKTsKaW5saW5lIGJvb2wgb3BlcmF0 b3I8PShjb25zdCBJU3RyaW5nICZzdHJpbmcxLCBjb25zdCBjaGFyICpwU3RyaW5nMik7CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgY2hhciAqcFN0cmluZzEsIGNvbnN0IElTdHJpbmcgJnN0 cmluZzIpOwppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgSVN0cmluZyAmc3RyaW5nMSwgY29u c3QgSVN0cmluZyAmc3RyaW5nMik7CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBJU3RyaW5n ICZzdHJpbmcxLCBjb25zdCBjaGFyICpwU3RyaW5nMik7CmlubGluZSBib29sIG9wZXJhdG9yPihj b25zdCBjaGFyICpwU3RyaW5nMSwgY29uc3QgSVN0cmluZyAmc3RyaW5nMik7CmlubGluZSBib29s IG9wZXJhdG9yPj0oY29uc3QgSVN0cmluZyAmc3RyaW5nMSwgY29uc3QgSVN0cmluZyAmc3RyaW5n Mik7CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgSVN0cmluZyAmc3RyaW5nMSwgY29uc3Qg Y2hhciAqcFN0cmluZzIpOwppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGNoYXIgKnBTdHJp bmcxLCBjb25zdCBJU3RyaW5nICZzdHJpbmcyKTsKSVN0cmluZyAgIG9wZXJhdG9yKyhjb25zdCBj aGFyICpwU3RyaW5nLCBjb25zdCBJU3RyaW5nICZhU3RyaW5nKTsKSVN0cmluZyAgIG9wZXJhdG9y Jihjb25zdCBjaGFyICpwU3RyaW5nLCBjb25zdCBJU3RyaW5nICZhU3RyaW5nKTsKSVN0cmluZyAg IG9wZXJhdG9yfChjb25zdCBjaGFyICpwU3RyaW5nLCBjb25zdCBJU3RyaW5nICZhU3RyaW5nKTsK SVN0cmluZyAgIG9wZXJhdG9yXihjb25zdCBjaGFyICpwU3RyaW5nLCBjb25zdCBJU3RyaW5nICZh U3RyaW5nKTsKCiAKCiAKCmNsYXNzICAgSVN0cmluZwp7CnB1YmxpYzoKCiAKIAogCgoKCgoKCgoj IDEzNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p c3RyaW5nLmhwcCIKCgogICB0eXBlZGVmIHVuc2lnbmVkIGludCB1b2Zmc2V0X3Q7CiAgIHR5cGVk ZWYgdW5zaWduZWQgaW50IHVsZW5ndGhfdDsKICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNvdW50 X3Q7CiAgIHR5cGVkZWYgICBzaWduZWQgaW50IG9mZnNldF90OwoKCgoKCiAKICBJU3RyaW5nICAg ICAgICAgICAoICk7CiAgSVN0cmluZyAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5n ICk7CiAgSVN0cmluZyAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICpwSVN0cmluZyApOwoKICBJ U3RyaW5nICAgICAgICAgICAoIGludCAgYW5JbnQgKTsKICBJU3RyaW5nICAgICAgICAgICAoIHVu c2lnbmVkICBhblVuc2lnbmVkICk7CiAgSVN0cmluZyAgICAgICAgICAgKCBsb25nICBhTG9uZyAp OwogIElTdHJpbmcgICAgICAgICAgICggdW5zaWduZWQgbG9uZyAgYW5VbnNpZ25lZExvbmcgKTsK CgoKCiAgSVN0cmluZyAgICAgICAgICAgKCBzaG9ydCAgYVNob3J0ICk7CiAgSVN0cmluZyAgICAg ICAgICAgKCB1bnNpZ25lZCBzaG9ydCAgYW5VbnNpZ25lZFNob3J0ICk7CiAgSVN0cmluZyAgICAg ICAgICAgKCBkb3VibGUgIGFEb3VibGUgKTsKCiAgSVN0cmluZyAgICAgICAgICAgKCBjaGFyICBh Q2hhciApOwogIElTdHJpbmcgICAgICAgICAgICggdW5zaWduZWQgY2hhciAgYW5VbnNpZ25lZENo YXIgKTsKICBJU3RyaW5nICAgICAgICAgICAoIHNpZ25lZCBjaGFyICBhU2lnbmVkQ2hhcik7Cgog IElTdHJpbmcgICAgICAgICAgICggY29uc3QgY2hhciAgKnBDaGFyICk7CiAgSVN0cmluZyAgICAg ICAgICAgKCBjb25zdCB1bnNpZ25lZCBjaGFyICAqcFVuc2lnbmVkQ2hhciApOwogIElTdHJpbmcg ICAgICAgICAgICggY29uc3Qgc2lnbmVkIGNoYXIgICpwU2lnbmVkQ2hhciApOwoKICBJU3RyaW5n ICAgICAgICAgICAoIGNvbnN0IHZvaWQgKnBCdWZmZXIxLAogICAgICAgICAgICAgICAgICAgICAg dWxlbmd0aF90ICAgbGVuQnVmZmVyMSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAg IHBhZENoYXJhY3RlciA9ICcgJyApOwogIElTdHJpbmcgICAgICAgICAgICggY29uc3Qgdm9pZCAq cEJ1ZmZlcjEsCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBsZW5CdWZmZXIxLAog ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAgKnBCdWZmZXIyLAogICAgICAgICAgICAg ICAgICAgICAgdWxlbmd0aF90ICAgbGVuQnVmZmVyMiwKICAgICAgICAgICAgICAgICAgICAgIGNo YXIgICAgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKTsKICBJU3RyaW5nICAgICAgICAgICAoIGNv bnN0IHZvaWQgKnBCdWZmZXIxLAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgbGVu QnVmZmVyMSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgICpwQnVmZmVyMiwKICAg ICAgICAgICAgICAgICAgICAgIHVsZW5ndGhfdCAgIGxlbkJ1ZmZlcjIsCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB2b2lkICAqcEJ1ZmZlcjMsCiAgICAgICAgICAgICAgICAgICAgICB1bGVu Z3RoX3QgICBsZW5CdWZmZXIzLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgIHBh ZENoYXJhY3RlciA9ICcgJyApOwogIElTdHJpbmcgICAgICAgICAgICggY29uc3QgSVRleHQgJmFu SVRleHQgKTsKICB+SVN0cmluZyAgICAgICAgICAoICk7CgogCklTdHJpbmcKICBhc1N0cmluZyAg ICAgICAgICAoICkgY29uc3QsCiAgYXNEZWJ1Z0luZm8gICAgICAgKCApIGNvbnN0OwoKCmZyaWVu ZCBzdGQ6Om9zdHJlYW0mICAgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJmFTdHJlYW0sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZhU3Ry aW5nKTsKZnJpZW5kIHN0ZDo6aXN0cmVhbSYgICBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmYVN0 cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdHJpbmcg JmFTdHJpbmcpOwpzdGF0aWMgSVN0cmluZyBsaW5lRnJvbShzdGQ6OmlzdHJlYW0gJmFTdHJlYW0s IGNoYXIgZGVsaW0gPSAnXG4nKTsKCgoKCgoKIApib29sCiAgaXNBbHBoYW51bWVyaWMgICAgKCAp IGNvbnN0LAogIGlzQWxwaGFiZXRpYyAgICAgICggKSBjb25zdCwKICBpc0FTQ0lJICAgICAgICAg ICAoICkgY29uc3QsCiAgaXNCaW5hcnlEaWdpdHMgICAgKCApIGNvbnN0LAogIGlzQ29udHJvbCAg ICAgICAgICggKSBjb25zdCwKICBpc0RpZ2l0cyAgICAgICAgICAoICkgY29uc3QsCiAgaXNHcmFw aGljcyAgICAgICAgKCApIGNvbnN0LAogIGlzSGV4RGlnaXRzICAgICAgICggKSBjb25zdCwKICBp c0xvd2VyQ2FzZSAgICAgICAoICkgY29uc3QsCiAgaXNQcmludGFibGUgICAgICAgKCApIGNvbnN0 LAogIGlzUHVuY3R1YXRpb24gICAgICggKSBjb25zdCwKICBpc1VwcGVyQ2FzZSAgICAgICAoICkg Y29uc3QsCiAgaXNXaGl0ZVNwYWNlICAgICAgKCApIGNvbnN0OwoKIApib29sCiAgaXNNQkNTICAg ICAgICAgICAgKCApIGNvbnN0LAogIGlzREJDUyAgICAgICAgICAgICggKSBjb25zdCwKICBpc1NC Q1MgICAgICAgICAgICAoICkgY29uc3QsCiAgaXNWYWxpZE1CQ1MgICAgICAgKCApIGNvbnN0LAog IGlzVmFsaWREQkNTICAgICAgICggKSBjb25zdCwKICBpbmNsdWRlc01CQ1MgICAgICAoICkgY29u c3QsCiAgaW5jbHVkZXNEQkNTICAgICAgKCApIGNvbnN0LAogIGluY2x1ZGVzU0JDUyAgICAgICgg KSBjb25zdDsKCgogCmJvb2wKICBpc0xpa2UgICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFQ YXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgemVyb09yTW9yZSA9 ICcqJywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIGFueUNoYXIgICAgPSAn PycgKSBjb25zdCwKICBpc0xpa2UgICAgICAgICAgICAoIGNvbnN0IGNoYXIgICAgKnBQYXR0ZXJu LAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgemVyb09yTW9yZSA9ICcqJywK ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIGFueUNoYXIgICAgPSAnPycgKSBj b25zdCwKCiAgaXNBYmJyZXZpYXRpb25Gb3IgKCBjb25zdCBJU3RyaW5nICZmdWxsU3RyaW5nLAog ICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgICBtaW5BYmJyZXZMZW5ndGggPSAwICkg Y29uc3QsCiAgaXNBYmJyZXZpYXRpb25Gb3IgKCBjb25zdCBjaGFyICAgICpwRnVsbFN0cmluZywK ICAgICAgICAgICAgICAgICAgICAgIHVsZW5ndGhfdCAgICAgbWluQWJicmV2TGVuZ3RoID0gMCAp IGNvbnN0LAoKICBpbmNsdWRlcyAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgICAgICZhU3RyaW5n ICkgY29uc3QsCiAgaW5jbHVkZXMgICAgICAgICAgKCBjb25zdCBjaGFyICAgICAgICAqcFN0cmlu ZyApIGNvbnN0LAogIGluY2x1ZGVzICAgICAgICAgICggY2hhciAgICAgICAgICAgICAgIGFDaGFy ICAgKSBjb25zdCwKICBpbmNsdWRlcyAgICAgICAgICAoIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVz dCAgICkgY29uc3Q7CgogCmZyaWVuZCBib29sCiAgb3BlcmF0b3IgPT0gICAgICAoIGNvbnN0IElT dHJpbmcgJnN0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJnN0cmlu ZzIgICksCiAgb3BlcmF0b3IgPT0gICAgICAoIGNvbnN0IElTdHJpbmcgJnN0cmluZzEsCiAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcyICksCiAgb3BlcmF0b3IgPT0g ICAgICAoIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcxLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBJU3RyaW5nICZzdHJpbmcyICApLAoKICBvcGVyYXRvciAhPSAgICAgICggY29uc3QgSVN0cmlu ZyAmc3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmc3RyaW5nMiAg KSwKICBvcGVyYXRvciAhPSAgICAgICggY29uc3QgSVN0cmluZyAmc3RyaW5nMSwKICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcFN0cmluZzIgKSwKICBvcGVyYXRvciAhPSAgICAg ICggY29uc3QgY2hhciAgICAqcFN0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElT dHJpbmcgJnN0cmluZzIgICksCgogIG9wZXJhdG9yIDwgICAgICAgKCBjb25zdCBJU3RyaW5nICZz dHJpbmcxLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZzdHJpbmcyICApLAog IG9wZXJhdG9yIDwgICAgICAgKCBjb25zdCBJU3RyaW5nICZzdHJpbmcxLAogICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICAgICpwU3RyaW5nMiApLAogIG9wZXJhdG9yIDwgICAgICAgKCBj b25zdCBjaGFyICAgICpwU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmlu ZyAmc3RyaW5nMiAgKSwKCiAgb3BlcmF0b3IgPD0gICAgICAoIGNvbnN0IElTdHJpbmcgJnN0cmlu ZzEsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJnN0cmluZzIgICksCiAgb3Bl cmF0b3IgPD0gICAgICAoIGNvbnN0IElTdHJpbmcgJnN0cmluZzEsCiAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcyICksCiAgb3BlcmF0b3IgPD0gICAgICAoIGNvbnN0 IGNoYXIgICAgKnBTdHJpbmcxLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZz dHJpbmcyICApLAoKICBvcGVyYXRvciA+ICAgICAgICggY29uc3QgSVN0cmluZyAmc3RyaW5nMSwK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmc3RyaW5nMiAgKSwKICBvcGVyYXRv ciA+ICAgICAgICggY29uc3QgSVN0cmluZyAmc3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAgICAqcFN0cmluZzIgKSwKICBvcGVyYXRvciA+ICAgICAgICggY29uc3QgY2hh ciAgICAqcFN0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJnN0cmlu ZzIgICksCgogIG9wZXJhdG9yID49ICAgICAgKCBjb25zdCBJU3RyaW5nICZzdHJpbmcxLAogICAg ICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZzdHJpbmcyICApLAogIG9wZXJhdG9yID49 ICAgICAgKCBjb25zdCBJU3RyaW5nICZzdHJpbmcxLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICAgICpwU3RyaW5nMiApLAogIG9wZXJhdG9yID49ICAgICAgKCBjb25zdCBjaGFyICAg ICpwU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmc3RyaW5nMiAg KTsKCiAKICBvcGVyYXRvciBjaGFyKiAgICAgICAgICAoICkgY29uc3Q7CiAgb3BlcmF0b3IgdW5z aWduZWQgY2hhciogKCApIGNvbnN0OwogIG9wZXJhdG9yIHNpZ25lZCBjaGFyKiAgICggKSBjb25z dDsKCgpsb25nCiAgYXNJbnQgICAgICAgICAgICAgICAgICAgKCApIGNvbnN0OwoKdW5zaWduZWQg bG9uZwogIGFzVW5zaWduZWQgICAgICAgICAgICAgICggKSBjb25zdDsKCgoKCgoKCgoKZG91Ymxl CiAgYXNEb3VibGUgICAgICAgICAgICAgICAgKCApIGNvbnN0OwoKIApJU3RyaW5nCiAmYjJjICAg ICAgICAgICAgICAoICksCiAmYjJkICAgICAgICAgICAgICAoICksCiAmYjJ4ICAgICAgICAgICAg ICAoICk7CgpzdGF0aWMgSVN0cmluZwogIGIyYyAgICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5n ICZhU3RyaW5nICksCiAgYjJkICAgICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcg KSwKICBiMnggICAgICAgICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApOwoKIApJU3Ry aW5nCiAmYzJiICAgICAgICAgICAgICAoICksCiAmYzJkICAgICAgICAgICAgICAoICksCiAmYzJ4 ICAgICAgICAgICAgICAoICk7CgpzdGF0aWMgSVN0cmluZwogIGMyYiAgICAgICAgICAgICAgKCBj b25zdCBJU3RyaW5nICZhU3RyaW5nICksCiAgYzJkICAgICAgICAgICAgICAoIGNvbnN0IElTdHJp bmcgJmFTdHJpbmcgKSwKICBjMnggICAgICAgICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmlu ZyApOwoKIApJU3RyaW5nCiAmZDJiICAgICAgICAgICAgICAoICksCiAmZDJjICAgICAgICAgICAg ICAoICksCiAmZDJ4ICAgICAgICAgICAgICAoICk7CgpzdGF0aWMgSVN0cmluZwogIGQyYiAgICAg ICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nICksCiAgZDJjICAgICAgICAgICAgICAo IGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICBkMnggICAgICAgICAgICAgICggY29uc3QgSVN0 cmluZyAmYVN0cmluZyApOwoKIApJU3RyaW5nCiAmeDJiICAgICAgICAgICAgICAoICksCiAmeDJj ICAgICAgICAgICAgICAoICksCiAmeDJkICAgICAgICAgICAgICAoICk7CgpzdGF0aWMgSVN0cmlu ZwogIHgyYiAgICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nICksCiAgeDJjICAg ICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICB4MmQgICAgICAgICAgICAg ICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApOwoKCiAKSVN0cmluZwogJm9wZXJhdG9yID0gICAg ICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nICksCiAgb3BlcmF0b3IgfiAgICAgICAoICAgICAg ICAgICAgICAgICAgICAgICAgKSBjb25zdCwKICBvcGVyYXRvciArICAgICAgICggY29uc3QgSVN0 cmluZyAmYVN0cmluZyApIGNvbnN0LAogIG9wZXJhdG9yICsgICAgICAgKCBjb25zdCBjaGFyICAg ICpwU3RyaW5nICkgY29uc3QsCiAmb3BlcmF0b3IgKz0gICAgICAoIGNvbnN0IElTdHJpbmcgJmFT dHJpbmcgKSwKICZvcGVyYXRvciArPSAgICAgICggY29uc3QgY2hhciAgICAqcFN0cmluZyApLAog IG9wZXJhdG9yICYgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nICkgY29uc3QsCiAgb3Bl cmF0b3IgJiAgICAgICAoIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcgKSBjb25zdCwKICZvcGVyYXRv ciAmPSAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApLAogJm9wZXJhdG9yICY9ICAgICAg KCBjb25zdCBjaGFyICAgICpwU3RyaW5nICksCiAgb3BlcmF0b3IgfCAgICAgICAoIGNvbnN0IElT dHJpbmcgJmFTdHJpbmcgKSBjb25zdCwKICBvcGVyYXRvciB8ICAgICAgICggY29uc3QgY2hhciAg ICAqcFN0cmluZyApIGNvbnN0LAogJm9wZXJhdG9yIHw9ICAgICAgKCBjb25zdCBJU3RyaW5nICZh U3RyaW5nICksCiAmb3BlcmF0b3IgfD0gICAgICAoIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcgKSwK ICBvcGVyYXRvciBeICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApIGNvbnN0LAogIG9w ZXJhdG9yIF4gICAgICAgKCBjb25zdCBjaGFyICAgICpwU3RyaW5nICkgY29uc3QsCiAmb3BlcmF0 b3IgXj0gICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICZvcGVyYXRvciBePSAgICAg ICggY29uc3QgY2hhciAgICAqcFN0cmluZyApOwoKZnJpZW5kIElTdHJpbmcKICAgIG9wZXJhdG9y ICsgICAgICAgKCBjb25zdCBjaGFyICAgICpwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICAgIG9wZXJhdG9yICYgICAgICAg KCBjb25zdCBjaGFyICAgICpwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICAgIG9wZXJhdG9yIHwgICAgICAgKCBjb25zdCBj aGFyICAgICpwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElT dHJpbmcgJmFTdHJpbmcgKSwKICAgIG9wZXJhdG9yIF4gICAgICAgKCBjb25zdCBjaGFyICAgICpw U3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFT dHJpbmcgKTsKCiAKdWxlbmd0aF90CiAgc2l6ZSAgICAgICAgICAgICAgKCApIGNvbnN0LAogIGxl bmd0aCAgICAgICAgICAgICggKSBjb25zdDsKCklTdHJpbmcKICBzdWJTdHJpbmcgICAgICAgICAo IHVvZmZzZXRfdCBzdGFydFBvcyApIGNvbnN0LAogIHN1YlN0cmluZyAgICAgICAgICggdW9mZnNl dF90IHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90IGxlbmd0aCwKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgIHBhZENoYXJhY3RlciA9ICcgJyApIGNvbnN0OwoK Y2hhcgogJm9wZXJhdG9yIFtdICAgICAgICggdW5zaWduZWQgaW5kZXggKTsKCmNvbnN0IGNoYXIK ICZvcGVyYXRvciBbXSAgICAgICAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3Q7CgpjaGFyCiAmb3Bl cmF0b3IgW10gICAgICAgKCBzaWduZWQgaW5kZXggKTsKCmNvbnN0IGNoYXIKICZvcGVyYXRvciBb XSAgICAgICAoIHNpZ25lZCBpbmRleCApIGNvbnN0OwoKY2hhcgogJm9wZXJhdG9yIFtdICAgICAg ICggdW5zaWduZWQgbG9uZyBpbmRleCApOwoKY29uc3QgY2hhcgogJm9wZXJhdG9yIFtdICAgICAg ICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNvbnN0OwoKY2hhcgogJm9wZXJhdG9yIFtdICAgICAg ICggc2lnbmVkIGxvbmcgaW5kZXggKTsKCmNvbnN0IGNoYXIKICZvcGVyYXRvciBbXSAgICAgICAo IHNpZ25lZCBsb25nIGluZGV4ICkgY29uc3Q7CgpJU3RyaW5nRW51bTo6Q2hhclR5cGUKICBjaGFy VHlwZSAgICAgICAgICAoIHVvZmZzZXRfdCBpbmRleCApIGNvbnN0OwoKIAp1b2Zmc2V0X3QKICBp bmRleE9mICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAg ICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9mICAg ICAgICAgICAoIGNvbnN0IGNoYXIgICAgKnBTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1 b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9mICAgICAgICAgICAo IGNoYXIgICAgICAgICAgIGFDaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0 X3QgICAgICBzdGFydFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9mICAgICAgICAgICAoIGNvbnN0 IElTdHJpbmdUZXN0ICZhVGVzdCwKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAg IHN0YXJ0UG9zID0gMSApIGNvbnN0LAoKICBpbmRleE9mQW55QnV0ICAgICAoIGNvbnN0IElTdHJp bmcgJnZhbGlkQ2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFy dFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9mQW55QnV0ICAgICAoIGNvbnN0IGNoYXIgICAgKnBW YWxpZENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3Mg PSAxICkgY29uc3QsCiAgaW5kZXhPZkFueUJ1dCAgICAgKCBjaGFyICAgICAgICAgICB2YWxpZENo YXIsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDEgKSBj b25zdCwKICBpbmRleE9mQW55QnV0ICAgICAoIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVzdCwKICAg ICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSApIGNvbnN0LAoK ICBpbmRleE9mQW55T2YgICAgICAoIGNvbnN0IElTdHJpbmcgJnNlYXJjaENoYXJzLAogICAgICAg ICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAxICkgY29uc3QsCiAgaW5k ZXhPZkFueU9mICAgICAgKCBjb25zdCBjaGFyICAgICpwU2VhcmNoQ2hhcnMsCiAgICAgICAgICAg ICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9m QW55T2YgICAgICAoIGNoYXIgICAgICAgICAgIHNlYXJjaENoYXIsCiAgICAgICAgICAgICAgICAg ICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDEgKSBjb25zdCwKICBpbmRleE9mQW55T2Yg ICAgICAoIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVzdCwKICAgICAgICAgICAgICAgICAgICAgIHVv ZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSApIGNvbnN0Owp1Y291bnRfdAogIG9jY3VycmVuY2Vz T2YgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVv ZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSApIGNvbnN0LAogIG9jY3VycmVuY2VzT2YgICAgICgg Y29uc3QgY2hhciAgICAqcFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAg ICAgIHN0YXJ0UG9zID0gMSApIGNvbnN0LAogIG9jY3VycmVuY2VzT2YgICAgICggY2hhciAgICAg ICAgICAgYUNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0 YXJ0UG9zID0gMSApIGNvbnN0LAogIG9jY3VycmVuY2VzT2YgICAgICggY29uc3QgSVN0cmluZ1Rl c3QgJmFUZXN0LAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3Mg PSAxICkgY29uc3Q7CgoKIApzdGF0aWMgY29uc3QgSVN0cmluZzo6dW9mZnNldF90CiAgICBrRW5k T2ZTdHJpbmc7Cgp1b2Zmc2V0X3QKICBsYXN0SW5kZXhPZiAgICAgICAoIGNvbnN0IElTdHJpbmcg JmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9 IGtFbmRPZlN0cmluZyApIGNvbnN0LAogIGxhc3RJbmRleE9mICAgICAgICggY29uc3QgY2hhciAg ICAqcFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9z ID0ga0VuZE9mU3RyaW5nICkgY29uc3QsCiAgbGFzdEluZGV4T2YgICAgICAgKCBjaGFyICAgICAg ICAgICBhQ2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3Rh cnRQb3MgPSBrRW5kT2ZTdHJpbmcgKSBjb25zdCwKICBsYXN0SW5kZXhPZiAgICAgICAoIGNvbnN0 IElTdHJpbmdUZXN0ICZhVGVzdCwKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAg IHN0YXJ0UG9zID0ga0VuZE9mU3RyaW5nICkgY29uc3QsCgogIGxhc3RJbmRleE9mQW55QnV0ICgg Y29uc3QgSVN0cmluZyAmdmFsaWRDaGFycywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRf dCAgICAgIHN0YXJ0UG9zID0ga0VuZE9mU3RyaW5nICkgY29uc3QsCiAgbGFzdEluZGV4T2ZBbnlC dXQgKCBjb25zdCBjaGFyICAgICpwVmFsaWRDaGFycywKICAgICAgICAgICAgICAgICAgICAgIHVv ZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0ga0VuZE9mU3RyaW5nICkgY29uc3QsCiAgbGFzdEluZGV4 T2ZBbnlCdXQgKCBjaGFyICAgICAgICAgICB2YWxpZENoYXIsCiAgICAgICAgICAgICAgICAgICAg ICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IGtFbmRPZlN0cmluZyApIGNvbnN0LAogIGxhc3RJ bmRleE9mQW55QnV0ICggY29uc3QgSVN0cmluZ1Rlc3QgJmFUZXN0LAogICAgICAgICAgICAgICAg ICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSBrRW5kT2ZTdHJpbmcgKSBjb25zdCwKCiAg bGFzdEluZGV4T2ZBbnlPZiAgKCBjb25zdCBJU3RyaW5nICZzZWFyY2hDaGFycywKICAgICAgICAg ICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0ga0VuZE9mU3RyaW5nICkgY29u c3QsCiAgbGFzdEluZGV4T2ZBbnlPZiAgKCBjb25zdCBjaGFyICAgICpwU2VhcmNoQ2hhcnMsCiAg ICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IGtFbmRPZlN0cmlu ZyApIGNvbnN0LAogIGxhc3RJbmRleE9mQW55T2YgICggY2hhciAgICAgICAgICAgc2VhcmNoQ2hh ciwKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0ga0VuZE9m U3RyaW5nICkgY29uc3QsCiAgbGFzdEluZGV4T2ZBbnlPZiAgKCBjb25zdCBJU3RyaW5nVGVzdCAm YVRlc3QsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IGtF bmRPZlN0cmluZyApIGNvbnN0OwoKIApzdGF0aWMgY29uc3QgSVN0cmluZzo6dWNvdW50X3QKICAg IGtBbGxDaGFuZ2VzOwoKSVN0cmluZwogJmNlbnRlciAgICAgICAgICAgICggdWxlbmd0aF90IGxl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcg KSwKCiAmY2hhbmdlICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZpbnB1dFN0cmluZywKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJm91dHB1dFN0cmluZywKICAgICAgICAg ICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSwKICAgICAgICAgICAgICAg ICAgICAgIHVjb3VudF90ICAgICAgIG51bUNoYW5nZXMgPSBrQWxsQ2hhbmdlcyApLAogJmNoYW5n ZSAgICAgICAgICAgICggY29uc3QgSVN0cmluZyAmaW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICAgICpwT3V0cHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAxLAogICAgICAgICAgICAgICAgICAgICAgdWNv dW50X3QgICAgICAgbnVtQ2hhbmdlcyA9IGtBbGxDaGFuZ2VzICksCiAmY2hhbmdlICAgICAgICAg ICAgKCBjb25zdCBjaGFyICAgICpwSW5wdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBJU3RyaW5nICZvdXRwdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0 X3QgICAgICBzdGFydFBvcyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAg ICBudW1DaGFuZ2VzID0ga0FsbENoYW5nZXMgKSwKICZjaGFuZ2UgICAgICAgICAgICAoIGNvbnN0 IGNoYXIgICAgKnBJbnB1dFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg ICAgKnBPdXRwdXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBz dGFydFBvcyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAgICBudW1DaGFu Z2VzID0ga0FsbENoYW5nZXMgKSwKCiAmY29weSAgICAgICAgICAgICAgKCB1Y291bnRfdCBudW1D b3BpZXMgKSwKCiAmaW5zZXJ0ICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAog ICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgaW5kZXggPSAwLAogICAgICAgICAg ICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyID0gJyAnICksCiAmaW5zZXJ0 ICAgICAgICAgICAgKCBjb25zdCBjaGFyICAgICpwU3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgdW9mZnNldF90ICAgICAgaW5kZXggPSAwLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAg ICAgICAgICAgcGFkQ2hhcmFjdGVyID0gJyAnICksCgogJmxlZnRKdXN0aWZ5ICAgICAgICggdWxl bmd0aF90ICAgICAgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAg cGFkQ2hhcmFjdGVyID0gJyAnICksCgogJmxvd2VyQ2FzZSAgICAgICAgICggKSwKCiAmb3Zlcmxh eVdpdGggICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgdW9mZnNldF90ICAgICAgaW5kZXggICAgICAgID0gMSwKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciA9ICcgJyApLAogJm92ZXJsYXlXaXRoICAgICAg ICggY29uc3QgY2hhciAgICAqcFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRf dCAgICAgIGluZGV4ICAgICAgICA9IDEsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAg ICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKSwKCiAmcmVtb3ZlICAgICAgICAgICAgKCB1b2Zmc2V0 X3Qgc3RhcnRQb3MgKSwKICZyZW1vdmUgICAgICAgICAgICAoIHVvZmZzZXRfdCBzdGFydFBvcywK ICAgICAgICAgICAgICAgICAgICAgIHVjb3VudF90ICBudW1DaGFycyApLAoKICZyZXZlcnNlICAg ICAgICAgICAoICksCgogJnJpZ2h0SnVzdGlmeSAgICAgICggdWxlbmd0aF90IGxlbmd0aCwKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKSwKCiAmc3Ry aXAgICAgICAgICAgICAgKCApLAogJnN0cmlwICAgICAgICAgICAgICggY2hhciAgICAgICAgICAg ICAgIGFDaGFyYWN0ZXIgKSwKICZzdHJpcCAgICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgICAg ICZhU3RyaW5nICksCiAmc3RyaXAgICAgICAgICAgICAgKCBjb25zdCBjaGFyICAgICAgICAqcFN0 cmluZyApLAogJnN0cmlwICAgICAgICAgICAgICggY29uc3QgSVN0cmluZ1Rlc3QgJmFUZXN0ICks CgogJnN0cmlwTGVhZGluZyAgICAgICggKSwKICZzdHJpcExlYWRpbmcgICAgICAoIGNoYXIgICAg ICAgICAgICAgICBhQ2hhcmFjdGVyICksCiAmc3RyaXBMZWFkaW5nICAgICAgKCBjb25zdCBJU3Ry aW5nICAgICAmYVN0cmluZyApLAogJnN0cmlwTGVhZGluZyAgICAgICggY29uc3QgY2hhciAgICAg ICAgKnBTdHJpbmcgKSwKICZzdHJpcExlYWRpbmcgICAgICAoIGNvbnN0IElTdHJpbmdUZXN0ICZh VGVzdCApLAoKICZzdHJpcFRyYWlsaW5nICAgICAoICksCiAmc3RyaXBUcmFpbGluZyAgICAgKCBj aGFyICAgICAgICAgICAgICAgYUNoYXJhY3RlciApLAogJnN0cmlwVHJhaWxpbmcgICAgICggY29u c3QgSVN0cmluZyAgICAgJmFTdHJpbmcgKSwKICZzdHJpcFRyYWlsaW5nICAgICAoIGNvbnN0IGNo YXIgICAgICAgICpwU3RyaW5nICksCiAmc3RyaXBUcmFpbGluZyAgICAgKCBjb25zdCBJU3RyaW5n VGVzdCAmYVRlc3QgKSwKCiAmdHJhbnNsYXRlICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZpbnB1 dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmb3V0cHV0Q2hhcnMs CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcg KSwKICZ0cmFuc2xhdGUgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmlucHV0Q2hhcnMsCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpwT3V0cHV0Q2hhcnMsCiAgICAgICAgICAg ICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKSwKICZ0cmFuc2xh dGUgICAgICAgICAoIGNvbnN0IGNoYXIgICAgKnBJbnB1dENoYXJzLAogICAgICAgICAgICAgICAg ICAgICAgY29uc3QgSVN0cmluZyAmb3V0cHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICBj aGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKSwKICZ0cmFuc2xhdGUgICAgICAgICAo IGNvbnN0IGNoYXIgICAgKnBJbnB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAgICAqcE91dHB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAg ICAgcGFkQ2hhcmFjdGVyID0gJyAnICksCgogJnVwcGVyQ2FzZSAgICAgICAgICggKTsKCnN0YXRp YyBJU3RyaW5nCiAgY2VudGVyICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAog ICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgICAgbGVuZ3RoLAogICAgICAgICAgICAg ICAgICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyID0gJyAnICksCgogIGNoYW5nZSAg ICAgICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElTdHJpbmcgJmlucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg SVN0cmluZyAmb3V0cHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAg ICAgc3RhcnRQb3MgPSAxLAogICAgICAgICAgICAgICAgICAgICAgdWNvdW50X3QgICAgICAgbnVt Q2hhbmdlcyA9IGtBbGxDaGFuZ2VzICksCiAgY2hhbmdlICAgICAgICAgICAgKCBjb25zdCBJU3Ry aW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmaW5wdXRT dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpwT3V0cHV0U3RyaW5n LAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAxLAogICAg ICAgICAgICAgICAgICAgICAgdWNvdW50X3QgICAgICAgbnVtQ2hhbmdlcyA9IGtBbGxDaGFuZ2Vz ICksCiAgY2hhbmdlICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcElucHV0U3RyaW5nLAogICAgICAgICAgICAg ICAgICAgICAgY29uc3QgSVN0cmluZyAmb3V0cHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAxLAogICAgICAgICAgICAgICAgICAgICAgdWNv dW50X3QgICAgICAgbnVtQ2hhbmdlcyA9IGtBbGxDaGFuZ2VzICksCiAgY2hhbmdlICAgICAgICAg ICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAgICAqcElucHV0U3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAg ICAqcE91dHB1dFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0 YXJ0UG9zID0gMSwKICAgICAgICAgICAgICAgICAgICAgIHVjb3VudF90ICAgICAgIG51bUNoYW5n ZXMgPSBrQWxsQ2hhbmdlcyApLAoKICBjb3B5ICAgICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcg JmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAgICBudW1Db3BpZXMg KSwKCiAgaW5zZXJ0ICAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAg ICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYW5JbnNlcnQsCiAgICAgICAgICAgICAgICAg ICAgICB1b2Zmc2V0X3QgICAgICBpbmRleCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFy ICAgICAgICAgICBwYWRDaGFyYWN0ZXIgPSAnICcgKSwKICBpbnNlcnQgICAgICAgICAgICAoIGNv bnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAg ICpwSW5zZXJ0LAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgaW5kZXggPSAw LAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyID0gJyAn ICksCgogIGxlZnRKdXN0aWZ5ICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAg ICAgICAgICAgICAgICAgIHVsZW5ndGhfdCAgICAgIGxlbmd0aCwKICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciA9ICcgJyApLAoKICBsb3dlckNhc2UgICAg ICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKCiAgb3ZlcmxheVdpdGggICAgICAgKCBj b25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmlu ZyAmYW5PdmVybGF5LAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgaW5kZXgg ICAgICAgID0gMSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJh Y3RlciA9ICcgJyApLAogIG92ZXJsYXlXaXRoICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKnBPdmVybGF5LAogICAgICAg ICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgaW5kZXggICAgICAgID0gMSwKICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciA9ICcgJyApLAoKICByZW1v dmUgICAgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcyApLAogIHJlbW92ZSAgICAgICAgICAgICggY29u c3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAg IHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgdWNvdW50X3QgICAgICAgbnVtQ2hhcnMg KSwKCiAgcmV2ZXJzZSAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nICksCgogIHJp Z2h0SnVzdGlmeSAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAg ICAgICAgIHVsZW5ndGhfdCAgICAgIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg ICAgICAgICAgIHBhZENoYXJhY3RlciA9ICcgJyApLAoKICBzdHJpcEJsYW5rcyAgICAgICAoIGNv bnN0IElTdHJpbmcgJmFTdHJpbmcgKSwKICBzdHJpcCAgICAgICAgICAgICAoIGNvbnN0IElTdHJp bmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBhQ2hhciAp LAogIHN0cmlwICAgICAgICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFTdHJpbmdPZkNoYXJzICksCiAgc3RyaXAgICAg ICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAgICAqcFN0cmluZ09mQ2hhcnMgKSwKICBzdHJpcCAgICAgICAgICAgICAoIGNv bnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5n VGVzdCAmYVRlc3QgKSwKCiAgc3RyaXBMZWFkaW5nQmxhbmtzICggY29uc3QgSVN0cmluZyAmYVN0 cmluZyApLAogIHN0cmlwTGVhZGluZyAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIGFDaGFyICksCiAgc3RyaXBMZWFkaW5n ICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29u c3QgSVN0cmluZyAmYVN0cmluZ09mQ2hhcnMgKSwKICBzdHJpcExlYWRpbmcgICAgICAoIGNvbnN0 IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpw U3RyaW5nT2ZDaGFycyApLAogIHN0cmlwTGVhZGluZyAgICAgICggY29uc3QgSVN0cmluZyAmYVN0 cmluZywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVzdCApLAoK ICBzdHJpcFRyYWlsaW5nQmxhbmtzICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApLAogIHN0cmlw VHJhaWxpbmcgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgICAgICAgICAgIGFDaGFyICksCiAgc3RyaXBUcmFpbGluZyAgICAgKCBjb25zdCBJ U3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYVN0 cmluZ09mQ2hhcnMgKSwKICBzdHJpcFRyYWlsaW5nICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJp bmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpwU3RyaW5nT2ZDaGFycyAp LAogIHN0cmlwVHJhaWxpbmcgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZywKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVzdCApLAoKICB0cmFuc2xhdGUgICAg ICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25z dCBJU3RyaW5nICZpbnB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmlu ZyAmb3V0cHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRD aGFyYWN0ZXIgPSAnICcgKSwKICB0cmFuc2xhdGUgICAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFT dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZpbnB1dENoYXJzLAog ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcE91dHB1dENoYXJzLAogICAgICAg ICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyID0gJyAnICksCiAgdHJh bnNsYXRlICAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAgICAqcElucHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBJU3RyaW5nICZvdXRwdXRDaGFycywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAg ICAgICAgIHBhZENoYXJhY3RlciA9ICcgJyApLAogIHRyYW5zbGF0ZSAgICAgICAgICggY29uc3Qg SVN0cmluZyAmYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKnBJ bnB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcE91dHB1dENo YXJzLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyID0g JyAnICksCgogIHVwcGVyQ2FzZSAgICAgICAgICggY29uc3QgSVN0cmluZyAmYVN0cmluZyApOwoK IApJU3RyaW5nCiAmcmVtb3ZlV29yZHMgICAgICAgKCB1Y291bnRfdCBmaXJzdFdvcmQgKSwKICZy ZW1vdmVXb3JkcyAgICAgICAoIHVjb3VudF90IGZpcnN0V29yZCwKICAgICAgICAgICAgICAgICAg ICAgIHVjb3VudF90IG51bVdvcmRzICksCgogJnNwYWNlICAgICAgICAgICAgICggdWNvdW50X3Qg bnVtU3BhY2VzID0gMSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgIHNwYWNlQ2hhciA9 ICcgJyApLAoKICB3b3JkICAgICAgICAgICAgICAoIHVjb3VudF90IHdvcmROdW1iZXIgKSBjb25z dCwKCiAgd29yZHMgICAgICAgICAgICAgKCB1Y291bnRfdCBmaXJzdFdvcmQgKSBjb25zdCwKICB3 b3JkcyAgICAgICAgICAgICAoIHVjb3VudF90IGZpcnN0V29yZCwKICAgICAgICAgICAgICAgICAg ICAgIHVjb3VudF90IG51bVdvcmRzICApIGNvbnN0OwoKdW9mZnNldF90CiAgaW5kZXhPZlBocmFz ZSAgICAgKCBjb25zdCBJU3RyaW5nICZ3b3JkU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg dWNvdW50X3QgICAgICAgc3RhcnRXb3JkID0gMSApIGNvbnN0LAoKICBpbmRleE9mV29yZCAgICAg ICAoIHVjb3VudF90IHdvcmROdW1iZXIgKSBjb25zdDsKCnVsZW5ndGhfdAogIGxlbmd0aE9mV29y ZCAgICAgICggdWNvdW50X3Qgd29yZE51bWJlciApIGNvbnN0OwoKdWNvdW50X3QKICBudW1Xb3Jk cyAgICAgICAgICAoICkgY29uc3QsCgogIHdvcmRJbmRleE9mUGhyYXNlICggY29uc3QgSVN0cmlu ZyAmYVBocmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHVjb3VudF90ICAgICAgIHN0YXJ0V29y ZCA9IDEgKSBjb25zdDsKCnN0YXRpYyBJU3RyaW5nCiAgc3BhY2UgICAgICAgICAgICAgKCBjb25z dCBJU3RyaW5nICZhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgdWNvdW50X3QgICAgICAg bnVtU3BhY2VzID0gMSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIHNwYWNl Q2hhciA9ICcgJyApLAoKICByZW1vdmVXb3JkcyAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJp bmcsCiAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAgICBzdGFydFdvcmQgKSwKICBy ZW1vdmVXb3JkcyAgICAgICAoIGNvbnN0IElTdHJpbmcgJmFTdHJpbmcsCiAgICAgICAgICAgICAg ICAgICAgICB1Y291bnRfdCAgICAgICBzdGFydFdvcmQsCiAgICAgICAgICAgICAgICAgICAgICB1 Y291bnRfdCAgICAgICBudW1Xb3JkcyAgKTsKCgoKCgoKIAp2b2lkCiAgb3BlcmF0b3IgPj49ICgg SURhdGFTdHJlYW0gJnRvV2hlcmUgKTsKdm9pZAogIG9wZXJhdG9yIDw8PSAoIElEYXRhU3RyZWFt ICZmcm9tV2hlcmUgKTsKCnByb3RlY3RlZDoKIApzdGF0aWMgY29uc3QgY2hhcgogICAqIGNvbnN0 IG51bGwsCiAgICogY29uc3QgemVybywKICAgKiBjb25zdCBtYXhMb25nOwoKIApzdGF0aWMgY29u c3QgY2hhciAqIG51bGxCdWYoKTsKCgogCklTdHJpbmcKICZzZXRCdWZmZXIgICAgICAgICAoIElC dWZmZXIgKmlidWZmICksCgogJmluaXRCdWZmZXIgICAgICAgICggY29uc3Qgdm9pZCAqcDEsCiAg ICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBsZW4xLAogICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgdm9pZCAqcDIgICAgICA9IDAsCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3Ro X3QgICBsZW4yICAgID0gMCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnAzICAg ICAgPSAwLAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgbGVuMyAgICA9IDAsCiAg ICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBwYWRDaGFyID0gMCApLAogJmluaXRCdWZm ZXIgICAgICAgICggbG9uZyAgYUxvbmcgKSwKICZpbml0QnVmZmVyICAgICAgICAoIHVuc2lnbmVk IGxvbmcgIGFuVW5zaWduZWRMb25nICksCgoKCgogJmluaXRCdWZmZXIgICAgICAgICggZG91Ymxl ICBhRG91YmxlICk7CgoKIApjaGFyCiAqZGF0YSAgICAgICAgICAgICAgKCApIGNvbnN0OwoKSUJ1 ZmZlcgogKmJ1ZmZlciAgICAgICAgICAgICggKSBjb25zdDsKCnN0YXRpYyB1bGVuZ3RoX3QKICBs ZW5ndGhPZiAgICAgICAgICAoIGNvbnN0IGNoYXIgKnBDaGFyICk7CgpzdGF0aWMgY2hhcgogKmRl ZmF1bHRCdWZmZXIgICAgICggKTsKCgogCnR5cGVkZWYgZW51bSB7CiAgY2hhckluZGV4LAogIHdv cmRJbmRleAogIH0gSW5kZXhUeXBlOwoKdW9mZnNldF90CiAgaW5kZXhPZldvcmQgICAgICAgKCB1 Y291bnRfdCAgd29yZE51bWJlciwKICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCBzdGFy dFBvcywKICAgICAgICAgICAgICAgICAgICAgIHVjb3VudF90ICBudW1Xb3JkcyApIGNvbnN0OwoK dWNvdW50X3QKICBvY2N1cnJlbmNlc09mICAgICAoIGNvbnN0IGNoYXIgKnBTZWFyY2hTdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBzZWFyY2hMZW4sCiAgICAgICAgICAg ICAgICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcyApIGNvbnN0OwoKdW9mZnNldF90CiAgZmlu ZFBocmFzZSAgICAgICAgKCBjb25zdCBJU3RyaW5nICZhUGhyYXNlLAogICAgICAgICAgICAgICAg ICAgICAgdWNvdW50X3QgICAgICAgc3RhcnRXb3JkLAogICAgICAgICAgICAgICAgICAgICAgSW5k ZXhUeXBlICAgICAgY2hhck9yV29yZCApIGNvbnN0OwoKYm9vbAogIGlzTGlrZSAgICAgICAgICAg ICggY29uc3QgY2hhciAqcFBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3Qg ICBwYXR0ZXJuTGVuLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgemVyb09yTW9y ZSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIGFueUNoYXIgKSBjb25zdCwKCiAg aXNBYmJyZXZGb3IgICAgICAgKCBjb25zdCBjaGFyICpwRnVsbFN0cmluZywKICAgICAgICAgICAg ICAgICAgICAgIHVsZW5ndGhfdCAgIGZ1bGxMZW4sCiAgICAgICAgICAgICAgICAgICAgICB1bGVu Z3RoX3QgICBtaW5MZW4gKSBjb25zdDsKCiAKSVN0cmluZwogJmNoYW5nZSAgICAgICAgICAgICgg Y29uc3QgY2hhciAqcFBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBw YXR0ZXJuTGVuLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcFJlcGxhY2VtZW50 LAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgcmVwbGFjZW1lbnRMZW4sCiAgICAg ICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcywKICAgICAgICAgICAgICAgICAg ICAgIHVjb3VudF90ICAgIG51bUNoYW5nZXMgKSwKCiAmaW5zZXJ0ICAgICAgICAgICAgKCBjb25z dCBjaGFyICpwSW5zZXJ0LAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgaW5zZXJ0 TGVuLAogICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgc3RhcnRQb3MsCiAgICAgICAg ICAgICAgICAgICAgICBjaGFyICAgICAgICBwYWRDaGFyYWN0ZXIgKSwKCiAmb3ZlcmxheVdpdGgg ICAgICAgKCBjb25zdCBjaGFyICpwT3ZlcmxheSwKICAgICAgICAgICAgICAgICAgICAgIHVsZW5n dGhfdCAgIG92ZXJsYXlMZW4sCiAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBpbmRl eCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIHBhZENoYXJhY3RlciApLAoKICZz dHJpcCAgICAgICAgICAgICAoIGNvbnN0IGNoYXIgICAgICAgICAgICAgKnBDaGFyLAogICAgICAg ICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAg ICAgICAgICAgSVN0cmluZ0VudW06OlN0cmlwTW9kZSAgbW9kZSApLAoKICZzdHJpcCAgICAgICAg ICAgICAoIGNvbnN0IElTdHJpbmdUZXN0ICAgICAgJmFUZXN0LAogICAgICAgICAgICAgICAgICAg ICAgSVN0cmluZ0VudW06OlN0cmlwTW9kZSAgbW9kZSApLAoKICZ0cmFuc2xhdGUgICAgICAgICAo IGNvbnN0IGNoYXIgKnBJbnB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgdWxlbmd0aF90 ICAgaW5wdXRMZW4sCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwT3V0cHV0Q2hh cnMsCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBvdXRwdXRMZW4sCiAgICAgICAg ICAgICAgICAgICAgICBjaGFyICAgICAgICBwYWRDaGFyYWN0ZXIgKTsKCgogCnR5cGVkZWYgZW51 bSB7CiAgYml0QW5kLAogIGJpdE9yLAogIGJpdEV4Y2x1c2l2ZU9yCgoKIAoKCgoKCgoKCiAgfSBC aXRPcGVyYXRvcjsKCklTdHJpbmcKICZhcHBseUJpdE9wICAgICAgICAoIGNvbnN0IGNoYXIgKnBB cmcsCiAgICAgICAgICAgICAgICAgICAgICB1bGVuZ3RoX3QgICBhcmdMZW4sCiAgICAgICAgICAg ICAgICAgICAgICBCaXRPcGVyYXRvciBvcCApOwoKIAp2b2lkCiAgd3JpdGVUb1N0cmVhbSggSURh dGFTdHJlYW0gJnRvV2hlcmUgKSBjb25zdDsKdm9pZAogIHJlYWRGcm9tU3RyZWFtKCBJRGF0YVN0 cmVhbSAmZnJvbVdoZXJlICk7Cgpwcml2YXRlOgogCiAgSVN0cmluZyAgICAgICAgICAgKCBJQnVm ZmVyICpwQnVmZmVyICk7CnZvaWQKICBiaW5hcnlNYXRoICAgICAgICAoIHVuc2lnbmVkIGNoYXIg bmV3RGlnaXQgKSwKICBkZWNpbWFsTWF0aCAgICAgICAoIHVuc2lnbmVkIGNoYXIgbmV3RGlnaXQg KTsKSVN0cmluZwogJnByZXBhcmVUb0NoYW5nZSAgICggKTsKY2hhcgogKnBCdWZmZXI7CgpzdGF0 aWMgdm9pZAogIHNldERlZmF1bHRCdWZmZXIgICggY2hhciAqICk7CgpzdGF0aWMgY2hhcgogICpu dWxsQnVmZmVyOwoKZnJpZW5kIGNsYXNzIElCdWZmZXI7CmZyaWVuZCBjbGFzcyBJVGV4dDsKfTsK CiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9w KQoKCgoKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaXN0cmluZy5pbmwiIDEKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKCiAKZXh0ZXJuICJDIgp7CiAgICAKIyAxICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAK CgogCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAx IDMKIAoKCgoKCgojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwoKCiAKCgoKCgoKCgoK CgoKCiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9JU3Vw cGVyID0gKDEgPDwgKCAwICkpICwJIAogIF9JU2xvd2VyID0gKDEgPDwgKCAxICkpICwJIAogIF9J U2FscGhhID0gKDEgPDwgKCAyICkpICwJIAogIF9JU2RpZ2l0ID0gKDEgPDwgKCAzICkpICwJIAog IF9JU3hkaWdpdCA9ICgxIDw8ICggNCApKSAsCSAKICBfSVNzcGFjZSA9ICgxIDw8ICggNSApKSAs CSAKICBfSVNwcmludCA9ICgxIDw8ICggNiApKSAsCSAKICBfSVNncmFwaCA9ICgxIDw8ICggNyAp KSAsCSAKICBfSVNibGFuayA9ICgxIDw8ICggOCApKSAsCSAKICBfSVNjbnRybCA9ICgxIDw8ICgg OSApKSAsCSAKICBfSVNwdW5jdCA9ICgxIDw8ICggMTAgKSkgLAkgCiAgX0lTYWxudW0gPSAoMSA8 PCAoIDExICkpIAkgCn07CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hv cnQgaW50ICpfX2N0eXBlX2I7CSAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3Rv bG93ZXI7ICAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7ICAKCgoK CgoKCgoKIAoKCgpleHRlcm4gaW50ICBpc2FsbnVtICAgKGludCkgIHRocm93ICgpICAgOwpleHRl cm4gaW50ICBpc2FscGhhICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBpc2NudHJs ICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBpc2RpZ2l0ICAgKGludCkgIHRocm93 ICgpICAgOwpleHRlcm4gaW50ICBpc2xvd2VyICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4g aW50ICBpc2dyYXBoICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBpc3ByaW50ICAg KGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBpc3B1bmN0ICAgKGludCkgIHRocm93ICgp ICAgOwpleHRlcm4gaW50ICBpc3NwYWNlICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50 ICBpc3VwcGVyICAgKGludCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBpc3hkaWdpdCAgIChp bnQpICB0aHJvdyAoKSAgIDsKCgpleHRlcm4gaW50ICBpc2JsYW5rICAgKGludCkgIHRocm93ICgp ICAgOwoKCgogCmV4dGVybiBpbnQgdG9sb3dlciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gaW50IHRvdXBwZXIgIChpbnQgX19jKSAgdGhyb3cgKCkgIDsKCgoKCiAKCmV4dGVybiBp bnQgaXNhc2NpaSAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCB0b2FzY2lp ICAoaW50IF9fYykgIHRocm93ICgpICA7CgoKCgogCgpleHRlcm4gaW50ICBfdG91cHBlciAgIChp bnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgX3RvbG93ZXIgICAoaW50KSAgdGhyb3cgKCkg ICA7CgoKCgoKCgoKCgoKCgoKCgoKCgojIDE2NCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCgoj IDE4NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgog CgoKCiAKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50ICBfX2lzYWxudW1fbCAgIChpbnQsIF9fbG9j YWxlX3QpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgX19pc2FscGhhX2wgICAoaW50LCBfX2xv Y2FsZV90KSAgdGhyb3cgKCkgICA7CmV4dGVybiBpbnQgIF9faXNjbnRybF9sICAgKGludCwgX19s b2NhbGVfdCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBfX2lzZGlnaXRfbCAgIChpbnQsIF9f bG9jYWxlX3QpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgX19pc2xvd2VyX2wgICAoaW50LCBf X2xvY2FsZV90KSAgdGhyb3cgKCkgICA7CmV4dGVybiBpbnQgIF9faXNncmFwaF9sICAgKGludCwg X19sb2NhbGVfdCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBfX2lzcHJpbnRfbCAgIChpbnQs IF9fbG9jYWxlX3QpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgX19pc3B1bmN0X2wgICAoaW50 LCBfX2xvY2FsZV90KSAgdGhyb3cgKCkgICA7CmV4dGVybiBpbnQgIF9faXNzcGFjZV9sICAgKGlu dCwgX19sb2NhbGVfdCkgIHRocm93ICgpICAgOwpleHRlcm4gaW50ICBfX2lzdXBwZXJfbCAgIChp bnQsIF9fbG9jYWxlX3QpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgX19pc3hkaWdpdF9sICAg KGludCwgX19sb2NhbGVfdCkgIHRocm93ICgpICAgOwoKZXh0ZXJuIGludCAgX19pc2JsYW5rX2wg ICAoaW50LCBfX2xvY2FsZV90KSAgdGhyb3cgKCkgICA7CgoKIApleHRlcm4gaW50IF9fdG9sb3dl cl9sICAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50 IF9fdG91cHBlcl9sICAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpICB0aHJvdyAoKSAgOwoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0gCgoKIyAzMiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RyaW5nLmlubCIgMgoKICAgIAojIDEgIi91c3Iv bGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMK IAoKCiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5j bHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAzMyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RyaW5nLmlubCIgMgoKICAgIAojIDEgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJD IiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkw LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoK IyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEg Ii91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1 LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2Mt bGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICogIG1lbWNweSAgKHZvaWQg KiAgX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1lbW1vdmUg ICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNpemVfdCBf X24pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBf X2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19u KSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICogIF9fcywg aW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVtY21wICAo X19jb25zdCB2b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXplX3QgX19u KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2b2lkICog IF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIHZvaWQg KiAgcmF3bWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50IF9fYykgIHRocm93ICgpICA7 CgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNweSAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNo YXIgKnN0cm5jcHkgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNo YXIgKnN0cmNhdCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgIChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzdHJjbXAgIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAKZXh0ZXJu IGludCBzdHJuY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNvbGwgIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAKZXh0ZXJuIHNpemVf dCBzdHJ4ZnJtICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKCgoKCiAKZXh0 ZXJuIGludCBfX3N0cmNvbGxfbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLAoJCQkgICAgIF9fbG9jYWxlX3QgX19sKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90 IF9fc3RyeGZybV9sICAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3Qg X19uLAoJCQkJX19sb2NhbGVfdCBfX2wpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBjaGFyICpf X3N0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnN0 cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCgoKCmV4dGVybiBjaGFy ICpzdHJuZHVwICAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikgIHRocm93ICgp ICA7CgoKCiAKCgoKCgoKCgoKIAoKIyAxNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAK ZXh0ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cg KCkgIDsKIApleHRlcm4gY2hhciAqc3RycmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j KSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gY2hhciAqc3RyY2hybnVsICAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAg KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSAgdGhyb3cgKCkgIDsK IAoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFy ICpfX2FjY2VwdCkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgIChfX2NvbnN0 IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIHRocm93ICgpICA7CiAKZXh0ZXJu IGNoYXIgKnN0cnN0ciAgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpf X25lZWRsZSkgIHRocm93ICgpICA7CgoKIApleHRlcm4gY2hhciAqX19zdHJjYXNlc3RyICAoX19j b25zdCBjaGFyICpfX2hheXN0YWNrLAoJCQkJX19jb25zdCBjaGFyICpfX25lZWRsZSkgIHRocm93 ICgpICA7CmV4dGVybiBjaGFyICpzdHJjYXNlc3RyICAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr LAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVy biBjaGFyICpzdHJ0b2sgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gY2hhciAqX19zdHJ0 b2tfciAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19kZWxpbSwKCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgIHRo cm93ICgpICA7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK CQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgY2hhciAqKl9f cmVzdHJpY3QgX19zYXZlX3B0cikgIHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gdm9pZCAqICBt ZW1tZW0gIChfX2NvbnN0IHZvaWQgKiAgX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4s CgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikgIHRo cm93ICgpICA7CgogCgpleHRlcm4gdm9pZCAqICBfX21lbXBjcHkgICh2b2lkICogIF9fcmVzdHJp Y3QgX19kZXN0LAoJCQkgICAgICAgX19jb25zdCB2b2lkICogIF9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCAqICBtZW1wY3B5ICAodm9pZCAqICBf X3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gIChf X2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIHNpemVfdCBzdHJubGVu ICAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKSAgdGhyb3cgKCkgIDsK CgoKIApleHRlcm4gY2hhciAqc3RyZXJyb3IgIChpbnQgX19lcnJudW0pICB0aHJvdyAoKSAgOwoK IAoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYs IHNpemVfdCBfX2J1ZmxlbikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yICAo aW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsK CgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJv dyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgYmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZv aWQgKiAgX19kZXN0LCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnpl cm8gICh2b2lkICogIF9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg YmNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAgX19zMiwgc2l6ZV90 IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICppbmRleCAgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAgKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgX19mZnMg IChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGlu dCBmZnMgIChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCiAK CgpleHRlcm4gaW50IGZmc2wgIChsb25nIGludCBfX2wpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRl X18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsICAobG9uZyBsb25n IGludCBfX2xsKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgog CmV4dGVybiBpbnQgX19zdHJjYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHN0cmNhc2VjbXAgIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg c3RybmNhc2VjbXAgIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKCQkJ ICAgICBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBfX3N0cmNhc2Vj bXBfbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAoJCQkJX19sb2Nh bGVfdCBfX2xvYykgIHRocm93ICgpICA7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAoJCQkJIHNpemVfdCBfX24sIF9f bG9jYWxlX3QgX19sb2MpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gY2hhciAqc3Ryc2VwICAo Y2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IHN0cnZlcnNjbXAgIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CgogCmV4dGVy biBjaGFyICpzdHJzaWduYWwgIChpbnQgX19zaWcpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hh ciAqX19zdHBjcHkgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpzdHBjcHkgIChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpzdHBuY3B5ICAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsCgkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpzdHJmcnkgIChjaGFyICpfX3N0cmlu ZykgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIG1lbWZyb2IgICh2b2lkICogIF9fcywg c2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKIAoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgIChf X2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpICB0aHJvdyAoKSAgOwoKCgoKCiMgMzQ3ICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAKCgojIDM0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJpbmcuaW5sIiAyCgogICAgCiMgMSAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoj IDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4 LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3Iv bGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK IAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9n Y2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAK CgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvczM5MC1z dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgojIDI4MyAiL3Vzci9saWIv Z2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewog ICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJlbTsJCQkgCiAgfSBkaXZfdDsKCiAKCnR5cGVkZWYg c3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsJCSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9 IGxkaXZfdDsKCgoKCiAKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcg bG9uZyBpbnQgcXVvdDsJCSAKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGxkaXZfdDsK CgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAg KHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBhdG9mICAoX19jb25zdCBjaGFy ICpfX25wdHIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgYXRvaSAgKF9fY29uc3QgY2hhciAq X19ucHRyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gbG9uZyBpbnQgYXRvbCAgKF9fY29uc3QgY2hh ciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgYXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CgoKIApleHRl cm4gZG91YmxlIHN0cnRvZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBmbG9h dCBzdHJ0b2YgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBsb25nIGRvdWJsZSAgc3Ry dG9sZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBsb25nIGludCBzdHJ0 b2wgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdW5zaWdu ZWQgbG9uZyBpbnQgc3RydG91bCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJ CQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICAgICAgaW50IF9fYmFz ZSkgIHRocm93ICgpICA7CgoKIApfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvcSAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKIApfX2V4dGVuc2lvbl9f CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAoJCQkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJ CQkgICAgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CgoKCiAKCiAKX19leHRlbnNpb25fXwpleHRl cm4gbG9uZyBsb25nIGludCBzdHJ0b2xsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cg KCkgIDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv dWxsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCSAgICAgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CgoK CgogCgoKCgoKCgoKCgogCgoKCiAKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sICAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSwKCQkJCSBfX2xvY2FsZV90IF9fbG9jKSAgdGhyb3cgKCkgIDsKCmV4dGVy biB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCgkJCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgaW50 IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgIHRocm93ICgpICA7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSwKCQkJCSAgICAgICBfX2xvY2FsZV90IF9fbG9jKSAgdGhyb3cgKCkgIDsKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sICAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0CgkJCQkJCSBfX25wdHIsCgkJCQkJCSBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKCQkJCQkJIGludCBfX2Jhc2UsCgkJCQkJCSBfX2xvY2FsZV90IF9fbG9jKSAgdGhy b3cgKCkgIDsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCgkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2Nh bGVfdCBfX2xvYykgIHRocm93ICgpICA7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBsb25nIGRvdWJs ZSAgX19zdHJ0b2xkX2wgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgX19sb2NhbGVfdCBfX2xvYykgIHRocm93 ICgpICA7CgoKCiAKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsICAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAoJCQkJICAgICAgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX19z dHJ0b2ZfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpl eHRlcm4gbG9uZyBkb3VibGUgIF9fc3RydG9sZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqCgkJ CQkJCV9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK CQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s X2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQlpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93 ICgpICA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgIChf X2NvbnN0IGNoYXIgKgoJCQkJCQkgIF9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCQkgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCQkgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhy b3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xs X2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkgIHRocm93ICgpICA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCQlfX3Jl c3RyaWN0IF9fbnB0ciwKCQkJCQkJCWNoYXIgKioKCQkJCQkJCV9fcmVzdHJpY3QgX19lbmRwdHIs CgkJCQkJCQlpbnQgX19iYXNlLAoJCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCgoK IyAzMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKIAoKCmV4dGVybiBjaGFyICpsNjRh ICAobG9uZyBpbnQgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgIChf X2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoK CnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBl ZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVh ZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90 IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlu b190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90 IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBt b2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90 IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0 X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90 IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJf dCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qg a2V5X3Q7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoK CgogCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoKCgoKCiAKdHlwZWRlZiBfX3RpbWVf dCB0aW1lX3Q7CgoKCgoKIyA4OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAyNzkgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAxMjMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1 c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2 MSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91 c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGli L3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5j bHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEyNiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVs b25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnQ7CgoKIAoKIyAxNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiAKCgoK CgoKCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9f ICkpKSA7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9f SElfXyApKSkgOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo ICBfX1NJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKCAgX19ESV9fICkpKSA7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRy aWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBlZGVm IHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lf XyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fICggIF9fRElfXyApKSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKCiAKCgoKCgoKIAoKCiAKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgog CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK IAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVk IGxvbmcgaW50KSkpIF07CiAgfSBfX3NpZ3NldF90OwoKCgoKIAoKCgoKCiMgMTI1ICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMwoKIyAzNCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MiAzCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjIgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoK CgoKCiAKCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsJCSAKICAgIGxv bmcgaW50IHR2X25zZWM7CQkgCiAgfTsKCgoKCgojIDI3OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwoKCgojIDM4ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgpleHRlcm4gIkMiIHsg CgogCgoKCnN0cnVjdCB0aW1ldmFsOwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCiAKdHlw ZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CgogCgoKCiAKCgoKCiAKCgoKCgoKIAoKCgoKZXh0ZXJuIGlu dCBfX3NlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsCgkJCSAgX19mZF9z ZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJICBzdHJ1Y3QgdGltZXZh bCAqX190aW1lb3V0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzZWxlY3QgIChpbnQgX19uZmRz LCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQlfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQg Kl9fZXhjZXB0ZmRzLAoJCQlzdHJ1Y3QgdGltZXZhbCAqX190aW1lb3V0KSAgdGhyb3cgKCkgIDsK CgogCgogCgoKZXh0ZXJuIGludCBwc2VsZWN0ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh ZGZkcywKCQkJIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJ CSBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwKCQkJIGNvbnN0IF9fc2lnc2V0X3Qg Kl9fc2lnbWFzaykgIHRocm93ICgpICA7CgoKfSAKCgojIDE5NSAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc3lz bWFjcm9zLmgiIDMKCgoKIyAxOTggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgog Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19mc2Jsa2NudF90IGZz YmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsgIAoKCgoKCgoKdHlw ZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsgICAgICAKdHlwZWRlZiBfX2ZzYmxrY250NjRf dCBmc2Jsa2NudDY0X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7ICAK Cgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAKCgoKIApleHRlcm4g aW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmRv bSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAq ICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9fc3RhdGVidWYsCgkJ CSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7CgogCgpleHRlcm4gdm9pZCAq ICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1ZikgIHRocm93ICgpICA7CgoKCiAKCgoKc3Ry dWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAgIGludDMyX3QgKnJw dHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5cGU7CQkgCiAgICBp bnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQzMl90ICplbmRfcHRy OwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAo KSAgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3Ig ICh1bnNpZ25lZCBpbnQgX19zZWVkLAoJCQkgICAgIHZvaWQgKiAgX19yZXN0cmljdCBfX3N0YXRl YnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLAoJCQkgICAgIHN0cnVjdCByYW5kb21fZGF0 YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgpleHRlcm4gaW50IHNldHN0YXRlX3Ig ICh2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkJICAgIHN0cnVjdCByYW5kb21fZGF0 YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7CgoKCgogCmV4dGVybiBpbnQgcmFuZCAg KHZvaWQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lkIHNyYW5kICAodW5zaWduZWQgaW50IF9f c2VlZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IHJhbmRfciAgKHVuc2lnbmVkIGludCAq X19zZWVkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9p ZCkgIHRocm93ICgpICA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggICh2 b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggICh1bnNpZ25lZCBzaG9y dCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25nIGludCBtcmFuZDQ4 ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBzcmFuZDQ4 ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0 IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgIHRocm93ICgp ICA7CmV4dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkg IHRocm93ICgpICA7CgogCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgeFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CSAKICAgIHVuc2lnbmVk IHNob3J0IGludCBjOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107ICAKICAgIGlu dCBpbml0OwkJCSAKICB9OwoKCiAKZXh0ZXJuIGludCBkcmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3QgX19y ZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoK IApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkg IDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK CQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgbG9u ZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IG1y YW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBq cmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJp Y3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHNyYW5kNDhfciAgKGxvbmcg aW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAoKSAg OwoKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10s CgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKZXh0ZXJu IGludCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKCQkJICAgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKCgoKCgoKIApleHRlcm4g dm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9p ZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7 CgoKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9fcHRyLCBzaXplX3QgX19z aXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBmcmVlICAodm9pZCAqICBfX3B0cikgIHRo cm93ICgpICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAo KSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvczM5MC1z dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMg NjEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4y L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxp Yi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vz ci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNSAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAq ICBhbGxvY2EgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCgoKCgp9IAoKCiMgNDkyICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKIApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChz aXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAgKHZvaWQp ICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBp bnQgYXRleGl0ICAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSAgdGhyb3cgKCkgIDsKCgogCgpleHRl cm4gaW50IF9fb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAg X19hcmcpLAoJCQkgICB2b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBvbl9l eGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSB2 b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBf X3N0YXR1cykgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAK CmV4dGVybiB2b2lkIF9FeGl0ICAoaW50IF9fc3RhdHVzKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCiAKZXh0ZXJuIGNoYXIgKmdldGVudiAgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRl bnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgoKIAogCgpleHRlcm4gaW50 IHB1dGVudiAgKGNoYXIgKl9fc3RyaW5nKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBz ZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLAoJCQlp bnQgX19yZXBsYWNlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFyZW52 ICAodm9pZCkgIHRocm93ICgpICA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFy ICpfX3RlbXBsYXRlKSAgdGhyb3cgKCkgIDsKCiAKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAgKGNo YXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19j b25zdCBjaGFyICpfX2NvbW1hbmQpICB0aHJvdyAoKSAgOwoKCgogCgoKZXh0ZXJuIGNoYXIgKmNh bm9uaWNhbGl6ZV9maWxlX25hbWUgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7 CgoKCiAKCgoKCgpleHRlcm4gY2hhciAqcmVhbHBhdGggIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19uYW1lLAoJCQkgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSAgdGhyb3cgKCkg IDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgIChfX2NvbnN0IHZvaWQgKiAs IF9fY29uc3Qgdm9pZCAqICkgIDsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9m bl90OwoKCgogCgpleHRlcm4gdm9pZCAqICBic2VhcmNoICAoX19jb25zdCB2b2lkICogIF9fa2V5 LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNlLAoJCQkgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVf dCBfX3NpemUsCgkJCSAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSAgOwoKIAoKZXh0ZXJu IHZvaWQgcXNvcnQgICh2b2lkICogIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3Np emUsCgkJCSAgX19jb21wYXJfZm5fdCBfX2NvbXBhcikgIDsKCgogCmV4dGVybiBpbnQgYWJzICAo aW50IF9feCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g bG9uZyBpbnQgbGFicyAgKGxvbmcgaW50IF9feCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAg KGxvbmcgbG9uZyBpbnQgX194KSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKIAoKIApleHRlcm4gZGl2X3QgZGl2ICAoaW50IF9fbnVtZXIsIGludCBfX2Rl bm9tKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2 X3QgbGRpdiAgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pICB0aHJvdyAoKSAg CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g bGxkaXZfdCBsbGRpdiAgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKCQkJCQkgbG9uZyBsb25nIGlu dCBfX2Rlbm9tKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCiAKCgogCgoKZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg IHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9f c2lnbikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGNoYXIgKmdjdnQgIChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFy ICpxZWN2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgIHRocm93ICgpICA7CmV4 dGVybiBjaGFyICpxZmN2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJ CSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgIHRocm93 ICgpICA7CmV4dGVybiBjaGFyICpxZ2N2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBlY3Z0X3Ig IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK CQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJc2l6 ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBmY3Z0X3IgIChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgdGhy b3cgKCkgIDsKCmV4dGVybiBpbnQgcWVjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbiwKCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgp ICA7CmV4dGVybiBpbnQgcWZjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGln aXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwK CQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgoK CgogCgpleHRlcm4gaW50IG1ibGVuICAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pICB0 aHJvdyAoKSAgOwogCgpleHRlcm4gaW50IG1idG93YyAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w d2MsCgkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAo KSAgOwogCgpleHRlcm4gaW50IHdjdG9tYiAgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSAg dGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgICh3Y2hhcl90ICpfX3Jlc3Ry aWN0ICBfX3B3Y3MsCgkJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbikgIHRocm93ICgpICA7CiAKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAgKGNoYXIgKl9fcmVz dHJpY3QgX19zLAoJCQkgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAgKF9fY29u c3QgY2hhciAqX19yZXNwb25zZSkgIHRocm93ICgpICA7CgoKCgogCgoKCgoKZXh0ZXJuIGludCBn ZXRzdWJvcHQgIChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCgkJCSAgIF9fY29uc3QgY2hh ciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKCQkJICAgY2hhciAqKl9fcmVzdHJpY3Qg X192YWx1ZXApICB0aHJvdyAoKSAgOwoKCgoKCiAKZXh0ZXJuIHZvaWQgc2V0a2V5ICAoX19jb25z dCBjaGFyICpfX2tleSkgIHRocm93ICgpICA7CgogCgogCgoKIApleHRlcm4gaW50IGdyYW50cHQg IChpbnQgX19mZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHVubG9ja3B0ICAoaW50IF9f ZmQpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBjaGFyICpwdHNuYW1lICAoaW50IF9fZmQpICB0 aHJvdyAoKSAgOwoKCgogCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgIChpbnQgX19mZCwgY2hhciAq X19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgZ2V0cHQg ICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKCgp9IAoKCiMgMzUgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmluZy5pbmwiIDIKCn0KCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5o cHAiIDEKIyAxMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pZXhjYmFzZS5ocHAiCgoKIyA3MjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIgoKCgoKCgojIDM4ICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJpbmcuaW5sIiAyCgoj IDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJ1 ZmZlci5ocHAiIDEKIyAxMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pYnVmZmVyLmhwcCIKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKCiAKZXh0ZXJuICJDIiB7CiAgCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK CgoKCgogCgogCgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAt c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0 cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3Mz OTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoj IDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3Mz OTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKIyA0MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pYnVmZmVyLmhwcCIgMgoKICAKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKIyAxICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1 LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9n Y2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1s aWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoK IAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkw LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAK CiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVk ZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAzMyAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCnR5cGVkZWYgX19v ZmZfdCAgZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgIGZwb3M2NF90OwoKCiAKCgoKCgog CgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpb19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIyAxMTAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKIApleHRlcm4gRklMRSAqc3Rk aW47CQkgCmV4dGVybiBGSUxFICpzdGRvdXQ7CQkgCmV4dGVybiBGSUxFICpzdGRlcnI7CQkgCiAK CgoKCgogCmV4dGVybiBpbnQgcmVtb3ZlICAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSAgdGhy b3cgKCkgIDsKIApleHRlcm4gaW50IHJlbmFtZSAgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29u c3QgY2hhciAqX19uZXcpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICAo dm9pZCkgIHRocm93ICgpICA7CgoKCgoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAgKHZvaWQp ICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqdG1wbmFtICAoY2hhciAqX19zKSAgdGhyb3cg KCkgIDsKCgogCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgIChjaGFyICpfX3MpICB0aHJvdyAoKSAg OwoKCgoKIAoKCgoKCgpleHRlcm4gY2hhciAqdGVtcG5hbSAgKF9fY29uc3QgY2hhciAqX19kaXIs IF9fY29uc3QgY2hhciAqX19wZngpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgZmNsb3Nl ICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgZmZsdXNoICAoRklM RSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQg IChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBmY2xvc2VhbGwg ICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJuIEZJTEUgKmZvcGVuICAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19tb2RlcykgIHRocm93ICgpICA7CiAKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCgkJCSAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvdyAoKSAgOwoj IDIwMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9wZW42NCAgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAoJCQkgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcykgIHRocm93ICgpICA7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkJICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcywKCQkJICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAg dGhyb3cgKCkgIDsKCgoKIApleHRlcm4gRklMRSAqZmRvcGVuICAoaW50IF9fZmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tp ZSAgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCgkJCSAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19tb2RlcywKCQkJICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25z X3QgX19pb19mdW5jcykgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3Ry ZWFtICAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCgkJCQkgIHNpemVfdCAqX19yZXN0cmlj dCBfX3NpemVsb2MpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gdm9pZCBzZXRidWYgIChGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSAgdGhyb3cgKCkg IDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCSBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgIHRocm93 ICgpICA7CgoKIAoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyICAoRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJICAgIHNpemVfdCBfX3NpemUpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gdm9pZCBzZXRsaW5lYnVmICAoRklMRSAqX19zdHJlYW0pICB0aHJv dyAoKSAgOwoKCgogCmV4dGVybiBpbnQgZnByaW50ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgIHRocm93ICgp ICA7CiAKZXh0ZXJuIGludCBwcmludGYgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBzcHJpbnRmICAoY2hhciAqX19yZXN0 cmljdCBfX3MsCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgIHRo cm93ICgpICA7CgogCmV4dGVybiBpbnQgdmZwcmludGYgIChGSUxFICpfX3Jlc3RyaWN0IF9fcywK CQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xp c3QgIF9fYXJnKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHZwcmludGYgIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJv dyAoKSAgOwogCmV4dGVybiBpbnQgdnNwcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJ ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xpc3Qg IF9fYXJnKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgc25wcmludGYgIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCBfX3ZzbnByaW50ZiAgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCgkJCSAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAoJCQkgICAgIF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93 ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkp KTsKZXh0ZXJuIGludCB2c25wcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bWF4bGVuLAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgIF9f Z251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKIAoKZXh0ZXJuIGludCB2YXNwcmludGYg IChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZiwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmlu dGYgIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZtdCwgLi4uKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmICAoY2hhciAqKl9f cmVzdHJpY3QgX19wdHIsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p ICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s IDIsIDMpKSk7CgogCmV4dGVybiBpbnQgdmRwcmludGYgIChpbnQgX19mZCwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm10LAoJCQkgIF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgp ICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsK ZXh0ZXJuIGludCBkcHJpbnRmICAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZtdCwgLi4uKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAzKSkpOwoKCgogCmV4dGVybiBpbnQgZnNjYW5mICAoRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSwKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p ICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgc2NhbmYgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBzc2NhbmYgIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IHZmc2NhbmYgIChGSUxFICpf X3Jlc3RyaWN0IF9fcywKCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkJ IF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKIApleHRlcm4gaW50IHZzY2FuZiAgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAg dGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEs IDApKSk7CgogCmV4dGVybiBpbnQgdnNzY2FuZiAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSBfX2dudWNfdmFf bGlzdCAgX19hcmcpICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKIApleHRlcm4gaW50IGZnZXRjICAoRklMRSAqX19zdHJl YW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGdldGMgIChGSUxFICpfX3N0cmVhbSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgZ2V0Y2hhciAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKCgoK IApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7 CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCgogCmV4 dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoK CiAKZXh0ZXJuIGludCBmcHV0YyAgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkg IDsKZXh0ZXJuIGludCBwdXRjICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAg OwoKIApleHRlcm4gaW50IHB1dGNoYXIgIChpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKCgoKCiAK ZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhy b3cgKCkgIDsKCgoKIApleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAgKGludCBf X2MpICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gaW50IGdldHcgIChGSUxFICpfX3N0cmVhbSkg IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHV0dyAgKGludCBfX3csIEZJTEUgKl9fc3RyZWFt KSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gY2hhciAqZmdldHMgIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgaW50IF9fbiwKCQkJIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvdyAoKSAg OwoKCiAKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkICAoY2hhciAqX19yZXN0cmljdCBfX3Ms IGludCBfX24sCgkJCQkgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvdyAoKSAgOwoK CiAKCmV4dGVybiBjaGFyICpnZXRzICAoY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgoKIAoKCgoK ZXh0ZXJuIF9fc3NpemVfdCAgIF9fZ2V0ZGVsaW0gIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw dHIsCgkJCQkgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAoJCQkJ ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gX19zc2l6 ZV90ICAgZ2V0ZGVsaW0gIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCgkJCQkgIHNpemVf dCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKCQkJCSAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBfX3NzaXplX3QgICBnZXRsaW5lICAo Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAoJCQkJIHNpemVfdCAqX19yZXN0cmljdCBfX24s CgkJCQkgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJu IGludCBmcHV0cyAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCgkJICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmcHV0c191 bmxvY2tlZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCQlGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgcHV0cyAgKF9fY29uc3Qg Y2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgdW5nZXRjICAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBmcmVhZCAgKHZv aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgc2l6ZV90IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHNpemVfdCBmd3Jp dGUgIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAg IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVy biBzaXplX3QgZnJlYWRfdW5sb2NrZWQgICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLAoJCQkJICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRo cm93ICgpICA7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkICAoX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fcHRyLAoJCQkJICAgIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCgkJCQkg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGlu dCBmc2VlayAgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSAg dGhyb3cgKCkgIDsKIApleHRlcm4gbG9uZyBpbnQgZnRlbGwgIChGSUxFICpfX3N0cmVhbSkgIHRo cm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgcmV3aW5kICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAo KSAgOwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBmc2Vla28gIChGSUxF ICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSAgdGhyb3cgKCkgIDsKIApl eHRlcm4gX19vZmZfdCBmdGVsbG8gIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKIApl eHRlcm4gaW50IGZnZXRwb3MgIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAoJCQkgZnBvc190 ICpfX3Jlc3RyaWN0IF9fcG9zKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IGZzZXRwb3MgIChG SUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSAgdGhyb3cgKCkgIDsKIyA1MjMg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgIChGSUxFICpf X3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpICB0aHJvdyAoKSAgOwpleHRl cm4gX19vZmY2NF90IGZ0ZWxsbzY0ICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwpleHRl cm4gaW50IGZnZXRwb3M2NCAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJCSAgIGZwb3M2 NF90ICpfX3Jlc3RyaWN0IF9fcG9zKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBmc2V0cG9zNjQg IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpICB0aHJvdyAoKSAgOwoK CiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CiAK ZXh0ZXJuIGludCBmZW9mICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBp bnQgZmVycm9yICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQg Y2xlYXJlcnJfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CmV4dGVybiBp bnQgZmVvZl91bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGlu dCBmZXJyb3JfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0 ZXJuIHZvaWQgcGVycm9yICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKIAoKCmV4 dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxp c3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25z dCBfc3lzX2Vycmxpc3RbXTsKCgoKCiAKZXh0ZXJuIGludCBmaWxlbm8gIChGSUxFICpfX3N0cmVh bSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgIChGSUxFICpf X3N0cmVhbSkgIHRocm93ICgpICA7CgoKCgoKIApleHRlcm4gRklMRSAqcG9wZW4gIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSAgdGhyb3cgKCkgIDsKCiAK ZXh0ZXJuIGludCBwY2xvc2UgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCgogCmV4 dGVybiBjaGFyICpjdGVybWlkICAoY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJu IGNoYXIgKmN1c2VyaWQgIChjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCgoKc3RydWN0IG9ic3Rh Y2s7CQkJIAoKIApleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmICAoc3RydWN0IG9ic3RhY2sgKl9f cmVzdHJpY3QgX19vYnN0YWNrLAoJCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAgKHN0cnVjdCBv YnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKCQkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCgkJCQkgX19nbnVjX3ZhX2xpc3QgIF9fYXJncykgIHRocm93ICgpICA7CgoK CgogCgogCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkg IDsKCiAKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAo KSAgOwoKIApleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cg KCkgIDsKCgoKCgoKCgoKCiAKCgoKCgp9IAoKCgoKIyA0MiAiL2hvbWUvYWtub2xsL2lvY3NyYy9s aW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYnVmZmVyLmhwcCIgMgoKICAKICAKIyAxICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIg MSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4y L2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgNDQgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJ1ZmZlci5ocHAiIDIKCiAgfQoKCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RyZW51bS5o cHAiIDEKIyAxMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pc3RyZW51bS5ocHAiCgoKIyAxMjggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmVudW0uaHBwIgoKCgoKCgoKIyA0OCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYnVmZmVyLmhwcCIgMgoK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lt cmVmY250LmhwcCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAoKIAogCgog CgojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9S RVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFu Z2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoK CgoKCiAKCiAKIAoKIAogCgogCgogIAojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1l LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDczICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK CgojIDI3OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDI5ICIvdXNyL2luY2x1ZGUvc2No ZWQuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgogCnN0cnVjdCBzY2hlZF9w YXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7IAoKIAoK ZXh0ZXJuIGludCBjbG9uZSAgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hp bGRfc3RhY2ssCgkJICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgIHRocm93ICgpICA7 CgoKfSAKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwoKIyAzMiAiL3Vzci9p bmNsdWRlL3NjaGVkLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIGludCBfX3NjaGVk X3NldHBhcmFtICAoX19waWRfdCBfX3BpZCwKCQkJCSAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy YW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtICAoX19w aWRfdCBfX3BpZCwKCQkJCV9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldHBhcmFtICAoX19waWRfdCBfX3BpZCwg c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hl ZF9nZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9zZXRzY2hlZHVsZXIgIChfX3BpZF90 IF9fcGlkLCBpbnQgX19wb2xpY3ksCgkJCQkgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyICAo X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAoJCQkJICAgIF9fY29uc3Qgc3RydWN0IHNjaGVk X3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNj aGVkdWxlciAgKF9fcGlkX3QgX19waWQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX2dl dHNjaGVkdWxlciAgKF9fcGlkX3QgX19waWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9f c2NoZWRfeWllbGQgICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAg KHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21h eCAgKGludCBfX2FsZ29yaXRobSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3By aW9yaXR5X21heCAgKGludCBfX2FsZ29yaXRobSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg X19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAoaW50IF9fYWxnb3JpdGhtKSAgdGhyb3cgKCkgIDsK ZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAoaW50IF9fYWxnb3JpdGhtKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgKF9fcGlkX3Qg X19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hl ZF9ycl9nZXRfaW50ZXJ2YWwgIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkg IHRocm93ICgpICA7Cgp9IAoKCiMgMjAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CmV4dGVybiAiQyIgeyAKCgoKCiAKCgojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxp bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli L2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAK CgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv czM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK CiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIv czM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoK CgoKCgogCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgogCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK IAoKCiAKCgoKCgogCgoKCgoKCgojIDU5ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIAoj IDQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgogCgoKCgoKCgoKCiMgNjIgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA4OSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCiAKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwkJ CSAKICBpbnQgdG1fbWluOwkJCSAKICBpbnQgdG1faG91cjsJCQkgCiAgaW50IHRtX21kYXk7CQkJ IAogIGludCB0bV9tb247CQkJIAogIGludCB0bV95ZWFyOwkJCSAKICBpbnQgdG1fd2RheTsJCQkg CiAgaW50IHRtX3lkYXk7CQkJIAogIGludCB0bV9pc2RzdDsJCQkgCgoKICBsb25nIGludCB0bV9n bXRvZmY7CQkgCiAgX19jb25zdCBjaGFyICp0bV96b25lOwkgCgoKCgp9OwoKCiAKCmV4dGVybiBj bG9ja190IGNsb2NrICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB0aW1lX3QgdGltZSAg KHRpbWVfdCAqX190aW1lcikgIHRocm93ICgpICA7CgogCmV4dGVybiBkb3VibGUgZGlmZnRpbWUg ICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApICB0aHJvdyAoKSAgCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gdGltZV90IG1rdGltZSAgKHN0cnVjdCB0 bSAqX190cCkgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKCQkJICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX190cCkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lICAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19mbXQsCgkJCSAgICBzdHJ1Y3QgdG0gKl9fdHAp ICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgIChfX2NvbnN0IHRp bWVfdCAqX190aW1lcikgIHRocm93ICgpICA7CgogCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRp bWUgIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIHN0 cnVjdCB0bSAqX19nbXRpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIs CgkJCQkgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgIHRocm93ICgpICA7CmV4dGVybiBz dHJ1Y3QgdG0gKmdtdGltZV9yICAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwK CQkJCSBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgIHRocm93ICgpICA7CgogCgpleHRlcm4g c3RydWN0IHRtICpsb2NhbHRpbWVfciAgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGlt ZXIsCgkJCQkgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApICB0aHJvdyAoKSAgOwoKCiAK CmV4dGVybiBjaGFyICphc2N0aW1lICAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApICB0aHJvdyAo KSAgOwoKIApleHRlcm4gY2hhciAqY3RpbWUgIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgIHRo cm93ICgpICA7CgoKIAoKIAoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAgKF9fY29uc3Qgc3RydWN0 IHRtICpfX3Jlc3RyaWN0IF9fdHAsCgkJCSAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgIHRo cm93ICgpICA7CgogCmV4dGVybiBjaGFyICpjdGltZV9yICAoX19jb25zdCB0aW1lX3QgKl9fcmVz dHJpY3QgX190aW1lciwKCQkJICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7 CgoKCiAKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwkgCmV4dGVybiBpbnQgX19kYXlsaWdodDsJ CSAKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CSAKCgoKIApleHRlcm4gY2hhciAqdHpuYW1l WzJdOwoKIAoKZXh0ZXJuIHZvaWQgdHpzZXQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKZXh0ZXJu IGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgogCgpleHRlcm4gaW50 IHN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgIHRocm93ICgpICA7CgoKCiAKCgoKCgoK IAoKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gIChzdHJ1Y3QgdG0gKl9fdHApICB0aHJvdyAoKSAg OwoKIApleHRlcm4gdGltZV90IHRpbWVsb2NhbCAgKHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgp ICA7CgogCmV4dGVybiBpbnQgZHlzaXplICAoaW50IF9feWVhcikgIHRocm93ICgpICA7CgoKCgog CmV4dGVybiBpbnQgbmFub3NsZWVwICAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVz dGVkX3RpbWUsCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpICB0aHJvdyAoKSAg OwoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCiAKCgoKZXh0ZXJuIHN0 cnVjdCB0bSAqZ2V0ZGF0ZSAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpICB0aHJvdyAoKSAgOwoK CgogCgoKCgpleHRlcm4gaW50IGdldGRhdGVfciAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3N0cmluZywKCQkJICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgIHRocm93ICgp ICA7CgoKCn0gCgoKCgojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKIyAxICIv dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CmV4dGVybiAiQyIgeyAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgoKCiAK CgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzMgIi91c3IvaW5j bHVkZS9zaWduYWwuaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNp Z3NldF90OwoKCgojIDM2MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCgoKfSAKCgojIDI0ICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh ZHR5cGVzLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKIyAxMjIgIi91c3Iv aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKZW51bQp7CiAg UFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoK ZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVE Cgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJP Q0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVY X1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAKCiAgLAogIFBUSFJF QURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhf UkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9F UlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhf REVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9D RVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRI UkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJ VEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVDVVJTSVZFX05QLAog IFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVS X05QCn07CgoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpf X3JvdXRpbmUpICAodm9pZCAqKSAgOwkgICAKICB2b2lkICpfX2FyZzsJCQkJICAgCiAgaW50IF9f Y2FuY2VsdHlwZTsJCQkgICAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJl djsgIAp9OwoKIAoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NB TkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRI UkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwoKCgogCgogCgoKZXh0ZXJuIGludCBwdGhyZWFk X2NyZWF0ZSAgKHB0aHJlYWRfdCAqX190aHJlYWQsCgkJCQlfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX2F0dHIsCgkJCQl2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksCgkJCQl2b2lk ICpfX2FyZykgIHRocm93ICgpICA7CgogCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICAo dm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAgKHB0aHJlYWRf dCBfX3RocmVhZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g dm9pZCBwdGhyZWFkX2V4aXQgICh2b2lkICpfX3JldHZhbCkgIHRocm93ICgpICAgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luICAocHRo cmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pICB0aHJvdyAoKSAgOwoKIAoKCgpl eHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoICAocHRocmVhZF90IF9fdGgpICB0aHJvdyAoKSAgOwoK CiAKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0ICAocHRocmVhZF9hdHRyX3QgKl9f YXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfc2V0ZGV0YWNoc3RhdGUgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAg aW50IF9fZGV0YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRkZXRhY2hzdGF0ZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkg ICAgIGludCAqX19kZXRhY2hzdGF0ZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHNjaGVkcGFyYW0gIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJICAgICAg ICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gIChfX2NvbnN0IHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIsCgkJCQkJICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5ICAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX3BvbGljeSkgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5ICAoX19jb25zdCBwdGhyZWFk X2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgICAgaW50ICpfX3BvbGljeSkgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAgKHB0aHJlYWRfYXR0cl90 ICpfX2F0dHIsCgkJCQkJICAgICAgaW50IF9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fYXR0ciwKCQkJCQkgICAgICBpbnQgKl9faW5oZXJpdCkgIHRocm93ICgpICA7CgogCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwg aW50IF9fc2NvcGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz Y29wZSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICBpbnQgKl9f c2NvcGUpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRz aXplICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICBzaXplX3QgX19ndWFyZHNpemUp ICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgIChf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAgc2l6ZV90ICpfX2d1YXJkc2l6 ZSkgIHRocm93ICgpICA7CgoKIAoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2Fk ZHIgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgIHZvaWQgKl9fc3RhY2thZGRyKSAg dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyICAoX19j b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCSAgIHZvaWQgKipfX3N0YWNrYWRkcikg IHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplICAo cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICBzaXplX3QgX19zdGFja3NpemUpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAgc2l6ZV90ICpfX3N0YWNrc2l6ZSkgIHRo cm93ICgpICA7CgogCgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAgKHB0aHJl YWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKCQkJCSAgICAgICBfX2NvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRo cmVhZF9nZXRzY2hlZHBhcmFtICAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKCQkJCSAgICAg ICBpbnQgKl9fcG9saWN5LAoJCQkJICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg IHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgICh2b2lk KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5ICAoaW50 IF9fbGV2ZWwpICB0aHJvdyAoKSAgOwoKCiAKCiAKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4 X2luaXQgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJCQkJICAgX19jb25zdCBw dGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g aW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95ICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgIChwdGhyZWFkX211 dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl eF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9sb2NrICAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xv Y2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50 IF9fcHRocmVhZF9tdXRleF91bmxvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJv dyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrICAocHRocmVhZF9tdXRleF90 ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKCgogCgogCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl eGF0dHJfaW5pdCAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f YXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9kZXN0 cm95ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy KSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX3NldHR5 cGUgIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCgkJCQkJICAgICBpbnQgX19raW5kKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlICAocHRocmVh ZF9tdXRleGF0dHJfdCAqX19hdHRyLAoJCQkJCSAgIGludCBfX2tpbmQpICB0aHJvdyAoKSAgOwoK IApleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgIChfX2NvbnN0IHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fYXR0ciwKCQkJCQkgICBpbnQgKl9fa2luZCkgIHRocm93ICgpICA7CgoK CiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgIChwdGhyZWFkX2NvbmRfdCAqX19j b25kLAoJCQkJICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fY29uZF9hdHRyKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveSAgKHB0aHJlYWRfY29u ZF90ICpfX2NvbmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWdu YWwgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBw dGhyZWFkX2NvbmRfYnJvYWRjYXN0ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgIHRocm93ICgp ICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0ICAocHRocmVhZF9jb25kX3QgKl9f Y29uZCwKCQkJCSAgIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRocm93ICgpICA7CgogCgoK CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAgKHB0aHJlYWRfY29uZF90ICpfX2Nv bmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJCQkJCV9fY29uc3Qgc3RydWN0IHRp bWVzcGVjICpfX2Fic3RpbWUpICB0aHJvdyAoKSAgOwoKIAoKIApleHRlcm4gaW50IHB0aHJlYWRf Y29uZGF0dHJfaW5pdCAgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsK CiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgIChwdGhyZWFkX2NvbmRhdHRy X3QgKl9fYXR0cikgIHRocm93ICgpICA7CgoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2tfaW5pdCAgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrLAoJCQkJICAgICBfX2NvbnN0IHB0 aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0 aHJlYWRfcndsb2NrX2Rlc3Ryb3kgIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrICAocHRocmVhZF9yd2xv Y2tfdCAqX19yd2xvY2spICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3RyeXJkbG9jayAgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSAgdGhyb3cgKCkgIDsKCiAK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgIChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2Nr ICAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50 IHB0aHJlYWRfcndsb2NrX3VubG9jayAgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSAgdGhy b3cgKCkgIDsKCgogCgogCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgIChwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhy ZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkICAo X19jb25zdAoJCQkJCSAgICAgICBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAoJCQkJCSAg ICAgICBpbnQgKl9fcHNoYXJlZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2thdHRyX3NldHBzaGFyZWQgIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAoJCQkJ CSAgICAgICBpbnQgX19wc2hhcmVkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAgKF9fY29uc3QKCQkJCQkgICAgICAgcHRocmVhZF9yd2xv Y2thdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICAgaW50ICpfX3ByZWYpICB0aHJvdyAoKSAgOwoK IApleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wICAocHRocmVhZF9yd2xv Y2thdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgICAgaW50IF9fcHJlZikgIHRocm93ICgpICA7CgoK CiAKCiAKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9rZXlfY3JlYXRlICAocHRocmVhZF9rZXlf dCAqX19rZXksCgkJCQkgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpICB0 aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAgKHB0aHJlYWRfa2V5X3Qg Kl9fa2V5LAoJCQkJICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlICAocHRocmVhZF9rZXlfdCBf X2tleSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19wdGhyZWFkX3NldHNwZWNpZmljICAo cHRocmVhZF9rZXlfdCBfX2tleSwKCQkJCSAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikg IHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5 X3QgX19rZXksCgkJCQkgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSAgdGhyb3cgKCkgIDsK CiAKZXh0ZXJuIHZvaWQgKl9fcHRocmVhZF9nZXRzcGVjaWZpYyAgKHB0aHJlYWRfa2V5X3QgX19r ZXkpICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAgKHB0aHJl YWRfa2V5X3QgX19rZXkpICB0aHJvdyAoKSAgOwoKCiAKCiAKCgoKZXh0ZXJuIGludCBfX3B0aHJl YWRfb25jZSAgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKCQkJCXZvaWQgKCpfX2lu aXRfcm91dGluZSkgKHZvaWQpKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX29uY2Ug IChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCSAgICAgIHZvaWQgKCpfX2luaXRf cm91dGluZSkgKHZvaWQpKSAgdGhyb3cgKCkgIDsKCgogCgogCgpleHRlcm4gaW50IHB0aHJlYWRf c2V0Y2FuY2Vsc3RhdGUgIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSAgdGhyb3cgKCkg IDsKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlICAoaW50IF9fdHlwZSwgaW50 ICpfX29sZHR5cGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsICAo cHRocmVhZF90IF9fdGhyZWFkKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gdm9pZCBwdGhyZWFk X3Rlc3RjYW5jZWwgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoKCgoKCgpleHRlcm4gdm9p ZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg Kl9fYnVmZmVyLAoJCQkJCXZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJCQkJCXZvaWQgKl9f YXJnKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3Bv cCAgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCgkJCQkgICAgICAg aW50IF9fZXhlY3V0ZSkgIHRocm93ICgpICA7CgogCgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVh ZF9jbGVhbnVwX3B1c2hfZGVmZXIgIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f YnVmZmVyLAoJCQkJCSAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJCQkJCSAgICAg IHZvaWQgKl9fYXJnKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRf Y2xlYW51cF9wb3BfcmVzdG9yZSAgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19i dWZmZXIsCgkJCQkJICAgICAgIGludCBfX2V4ZWN1dGUpICB0aHJvdyAoKSAgOwoKCiAKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrICAoaW50IF9faG93LCBfX2NvbnN0 IF9fc2lnc2V0X3QgKl9fbmV3bWFzaywKCQkJCSBfX3NpZ3NldF90ICpfX29sZG1hc2spICB0aHJv dyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVhZCwg aW50IF9fc2lnbm8pICB0aHJvdyAoKSAgOwoKCiMgNTE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAyIDMKCgoKIAoKIAoKCgoKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICAodm9p ZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJ CSAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVh ZF9hdGZvcmsgICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCgkJCQl2b2lkICgqX19wYXJlbnQp ICh2b2lkKSwKCQkJCXZvaWQgKCpfX2NoaWxkKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKIAoKCmV4 dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIHRocm93ICgp ICA7CgoKIApleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAgKHZvaWQpICB0aHJvdyAo KSAgOwoKfSAKCgojIDY0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2ltcmVmY250LmhwcCIgMgoKCiAgdm9pZCBQUl9Bc3NlcnQoY29uc3QgY2hhciAq cywgY29uc3QgY2hhciAqZmlsZSwgaW50IGxuKTsKICAKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoK CgpjbGFzcyBJTVJlZkNvdW50ZWQgewpwdWJsaWM6CiAgICAgICAgIAoKCgoKICAgICAgICB2b2lk ICAgICAgICAgICAgICAgICAgICBhZGRSZWYoKTsKCiAgICAgICAgIAoKCgoKCiAgICAgICAgdm9p ZCAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVmKCk7CgogICAgICAgICAKICAgICAgICBpb2M6 OnVudW1lcmljX3QgICBjb3VudCgpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUmVmQ291bnRlZCgpOwoKICAgICAg ICAgCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVJlZkNv dW50ZWQoY29uc3QgSU1SZWZDb3VudGVkJik7CgogICAgICAgICAKCgoKCgoKICAgICAgICBJTVJl ZkNvdW50ZWQmICAgb3BlcmF0b3I9KGNvbnN0IElNUmVmQ291bnRlZCYpOwoKICAgICAgICAgCgoK CgoKICAgICAgICB2aXJ0dWFsICAgICAgICAgICAgICAgICB+SU1SZWZDb3VudGVkKCk7Cgpwcml2 YXRlOgogICAgICAgIGlvYzo6dW51bWVyaWNfdCAgIGZDb3VudDsKIAoKICAgICAgICBzdGF0aWMg cHRocmVhZF9tdXRleF90IF9zb2xhcmlzX2F0b21pYzsKCiAKfTsKCiAKCiAKCgoKCgoKCiNwcmFn bWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCgogCiNw cmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3Jl KQogCgogCgojIDQ5ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lidWZmZXIuaHBwIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmluZy5ocHAiIDEKIyA5NTAgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmluZy5ocHAiCgojIDUwICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lidWZmZXIu aHBwIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19J T0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJh Z21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEg ZW51bSg0KQoKCgoKCgoKIAoKIAogCgogCmNsYXNzIElTdHJpbmdUZXN0Owp0ZW1wbGF0ZTxjbGFz cyBUPiBjbGFzcyBJU3RhdGljT2JqZWN0SGVscGVyOwogCgogCgpjbGFzcyAgIElCdWZmZXIgOiBw dWJsaWMgSU1SZWZDb3VudGVkIHsKcHVibGljOgogCklCdWZmZXIKICpuZXdCdWZmZXIgICAgICAg ICAgICggY29uc3Qgdm9pZCogICAgICAgICAgcDEsCiAgICAgICAgICAgICAgICAgICAgICAgIElT dHJpbmc6OnVsZW5ndGhfdCAgIGxlbjEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv aWQqICAgICAgICAgIHAyICAgICAgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBJU3RyaW5n Ojp1bGVuZ3RoX3QgICBsZW4yICAgID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dm9pZCogICAgICAgICAgcDMgICAgICA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIElTdHJp bmc6OnVsZW5ndGhfdCAgIGxlbjMgICAgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICAgICAgICAgICAgICAgICBwYWRDaGFyID0gMCApIGNvbnN0OwoKc3RhdGljIElTdHJpbmc6OnVs ZW5ndGhfdAogIGNoZWNrQWRkaXRpb24gICAgICAgKCBJU3RyaW5nOjp1bGVuZ3RoX3QgYWRkZW5k MSwKICAgICAgICAgICAgICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0aF90IGFkZGVuZDIgKSwK ICBjaGVja011bHRpcGxpY2F0aW9uICggSVN0cmluZzo6dWxlbmd0aF90IGZhY3RvcjEsCiAgICAg ICAgICAgICAgICAgICAgICAgIElTdHJpbmc6OnVsZW5ndGhfdCBmYWN0b3IyICksCiAgb3ZlcmZs b3cgICAgICAgICAgICAoICk7CgpzdGF0aWMgdm9pZAogIHNldERlZmF1bHRCdWZmZXIgICAgKCBJ QnVmZmVyKiBuZXdEZWZhdWx0QnVmZmVyICk7CgogCnN0YXRpYyBJQnVmZmVyCiAqZGVmYXVsdEJ1 ZmZlciAoICksCiAqZnJvbUNvbnRlbnRzICAoIGNvbnN0IGNoYXIgKnBCdWZmZXIgKTsKCklCdWZm ZXIKICpudWxsICAgICAgICAgICggKSBjb25zdDsKCklTdHJpbmc6OnVjb3VudF90CiAgdXNlQ291 bnQgICAgICAoICkgY29uc3Q7CklTdHJpbmc6OnVsZW5ndGhfdAogIGxlbmd0aCAgICAgICAgKCAp IGNvbnN0OwoKY29uc3QgY2hhcgogKmNvbnRlbnRzICAgICAgKCApIGNvbnN0OwoKY2hhcgogKmNv bnRlbnRzICAgICAgKCApOwoKdmlydHVhbCBJU3RyaW5nRW51bTo6Q2hhclR5cGUKICBjaGFyVHlw ZSAgICAgICggSVN0cmluZzo6dW9mZnNldF90IGluZGV4ICkgY29uc3Q7Cgp2aXJ0dWFsIGNoYXIK ICpuZXh0ICAgICAgICAgICggY29uc3QgY2hhciAqcHJldiApOwoKdmlydHVhbCBjb25zdCBjaGFy CiAqbmV4dCAgICAgICAgICAoIGNvbnN0IGNoYXIgKnByZXYgKSBjb25zdDsKCiAKdHlwZWRlZiBl bnVtIHsKICBlcXVhbCwKICBncmVhdGVyVGhhbiwKICBsZXNzVGhhbgogIH0gQ29tcGFyaXNvbjsK CnZpcnR1YWwgQ29tcGFyaXNvbgogIGNvbXBhcmUgKCBjb25zdCB2b2lkKiBwLAogICAgICAgICAg ICBJU3RyaW5nOjp1bGVuZ3RoX3QgICBsZW4gKSBjb25zdDsKIAp2aXJ0dWFsIElCdWZmZXIKICpz dWJTdHJpbmcgKCBJU3RyaW5nOjp1b2Zmc2V0X3Qgc3RhcnRQb3MsCiAgICAgICAgICAgICAgSVN0 cmluZzo6dWxlbmd0aF90IGxlbiwKICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgcGFk Q2hhcmFjdGVyICkgY29uc3Q7CgogCgoKCgoKIAp2aXJ0dWFsIElTdHJpbmcKICBhc0RlYnVnSW5m byAoICkgY29uc3Q7CgogCnZpcnR1YWwgYm9vbAogIGlzQWxwaGFudW1lcmljICggKSBjb25zdCwK ICBpc0FscGhhYmV0aWMgICAoICkgY29uc3QsCiAgaXNBU0NJSSAgICAgICAgKCApIGNvbnN0LAog IGlzQ29udHJvbCAgICAgICggKSBjb25zdCwKICBpc0RpZ2l0cyAgICAgICAoICkgY29uc3QsCiAg aXNHcmFwaGljcyAgICAgKCApIGNvbnN0LAogIGlzSGV4RGlnaXRzICAgICggKSBjb25zdCwKICBp c0xvd2VyQ2FzZSAgICAoICkgY29uc3QsCiAgaXNQcmludGFibGUgICAgKCApIGNvbnN0LAogIGlz UHVuY3R1YXRpb24gICggKSBjb25zdCwKICBpc1VwcGVyQ2FzZSAgICAoICkgY29uc3QsCiAgaXNX aGl0ZVNwYWNlICAgKCApIGNvbnN0OwoKIAp2aXJ0dWFsIGJvb2wKICBpc01CQ1MgICAgICAgKCAp IGNvbnN0LAogIGlzREJDUyAgICAgICAoICkgY29uc3QsCiAgaXNTQkNTICAgICAgICggKSBjb25z dCwKICBpc1ZhbGlkTUJDUyAgKCApIGNvbnN0LAogIGlzVmFsaWREQkNTICAoICkgY29uc3QsCiAg aW5jbHVkZXNNQkNTICggKSBjb25zdCwKICBpbmNsdWRlc0RCQ1MgKCApIGNvbnN0LAogIGluY2x1 ZGVzU0JDUyAoICkgY29uc3Q7CgogCnZpcnR1YWwgSVN0cmluZzo6dW9mZnNldF90CiAgaW5kZXhP ZiAgICAgICAgICAgKCBjb25zdCBjaGFyKiAgICAgICAgICAgICBwU3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0aF90ICAgICAgbGVuLAogICAgICAgICAgICAgICAg ICAgICAgSVN0cmluZzo6dW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAxICkgY29uc3QsCiAgaW5k ZXhPZiAgICAgICAgICAgKCBjb25zdCBJU3RyaW5nVGVzdCYgICAgICBhVGVzdCwKICAgICAgICAg ICAgICAgICAgICAgIElTdHJpbmc6OnVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSApIGNvbnN0 LAogIGluZGV4T2ZBbnlCdXQgICAgICggY29uc3QgY2hhciogICAgICAgICAgICAgcFN0cmluZywK ICAgICAgICAgICAgICAgICAgICAgIElTdHJpbmc6OnVsZW5ndGhfdCAgICAgIGxlbiwKICAgICAg ICAgICAgICAgICAgICAgIElTdHJpbmc6OnVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMSApIGNv bnN0LAogIGluZGV4T2ZBbnlCdXQgICAgICggY29uc3QgSVN0cmluZ1Rlc3QmICAgICAgYVRlc3Qs CiAgICAgICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9 IDEgKSBjb25zdCwKICBpbmRleE9mQW55T2YgICAgICAoIGNvbnN0IGNoYXIqICAgICAgICAgICAg IHBTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1bGVuZ3RoX3QgICAgICBs ZW4sCiAgICAgICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1b2Zmc2V0X3QgICAgICBzdGFydFBv cyA9IDEgKSBjb25zdCwKICBpbmRleE9mQW55T2YgICAgICAoIGNvbnN0IElTdHJpbmdUZXN0JiAg ICAgIGFUZXN0LAogICAgICAgICAgICAgICAgICAgICAgSVN0cmluZzo6dW9mZnNldF90ICAgICAg c3RhcnRQb3MgPSAxICkgY29uc3QsCiAgbGFzdEluZGV4T2YgICAgICAgKCBjb25zdCBjaGFyKiAg ICAgICAgICAgICBwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0 aF90ICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAgSVN0cmluZzo6dW9mZnNldF90ICAg ICAgc3RhcnRQb3MgPSAwICkgY29uc3QsCiAgbGFzdEluZGV4T2YgICAgICAgKCBjb25zdCBJU3Ry aW5nVGVzdCYgICAgICBhVGVzdCwKICAgICAgICAgICAgICAgICAgICAgIElTdHJpbmc6OnVvZmZz ZXRfdCAgICAgIHN0YXJ0UG9zID0gMCApIGNvbnN0LAogIGxhc3RJbmRleE9mQW55QnV0ICggY29u c3QgY2hhciogICAgICAgICAgICAgcFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgIElTdHJp bmc6OnVsZW5ndGhfdCAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICAgIElTdHJpbmc6OnVv ZmZzZXRfdCAgICAgIHN0YXJ0UG9zID0gMCApIGNvbnN0LAogIGxhc3RJbmRleE9mQW55QnV0ICgg Y29uc3QgSVN0cmluZ1Rlc3QmICAgICAgYVRlc3QsCiAgICAgICAgICAgICAgICAgICAgICBJU3Ry aW5nOjp1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDAgKSBjb25zdCwKICBsYXN0SW5kZXhPZkFu eU9mICAoIGNvbnN0IGNoYXIqICAgICAgICAgICAgIHBTdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICBJU3RyaW5nOjp1bGVuZ3RoX3QgICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICBJ U3RyaW5nOjp1b2Zmc2V0X3QgICAgICBzdGFydFBvcyA9IDAgKSBjb25zdCwKICBsYXN0SW5kZXhP ZkFueU9mICAoIGNvbnN0IElTdHJpbmdUZXN0JiAgICAgIGFUZXN0LAogICAgICAgICAgICAgICAg ICAgICAgSVN0cmluZzo6dW9mZnNldF90ICAgICAgc3RhcnRQb3MgPSAwICkgY29uc3Q7CgogCnZp cnR1YWwgSUJ1ZmZlcgogKmNlbnRlciAgICAgICAoIElTdHJpbmc6OnVsZW5ndGhfdCAgIG5ld0xl biwKICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICBwYWRDaGFyYWN0ZXIgKSwK ICpjaGFuZ2UgICAgICAgKCBjb25zdCBjaGFyKiAgICAgICAgICBwU291cmNlLAogICAgICAgICAg ICAgICAgIElTdHJpbmc6OnVsZW5ndGhfdCAgIHNvdXJjZUxlbiwKICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiAgICAgICAgICBwVGFyZ2V0LAogICAgICAgICAgICAgICAgIElTdHJpbmc6OnVs ZW5ndGhfdCAgIHRhcmdldExlbiwKICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1b2Zmc2V0X3Qg ICBzdGFydFBvcywKICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1Y291bnRfdCAgICBudW1DaGFu Z2VzICksCiAqY29weSAgICAgICAgICggSVN0cmluZzo6dWNvdW50X3QgICAgbnVtQ29waWVzICks CiAqaW5zZXJ0ICAgICAgICggY29uc3QgY2hhciogICAgICAgICAgcEluc2VydCwKICAgICAgICAg ICAgICAgICBJU3RyaW5nOjp1bGVuZ3RoX3QgICBpbnNlcnRMZW4sCiAgICAgICAgICAgICAgICAg SVN0cmluZzo6dW9mZnNldF90ICAgcG9zLAogICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAg ICAgICAgIHBhZENoYXJhY3RlciApLAogKmxlZnRKdXN0aWZ5ICAoIElTdHJpbmc6OnVsZW5ndGhf dCAgIG5ld0xlbiwKICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAgICAgICBwYWRDaGFy YWN0ZXIgKSwKICpsb3dlckNhc2UgICAgKCApLAogKm92ZXJsYXlXaXRoICAoIGNvbnN0IGNoYXIq ICAgICAgICAgIG92ZXJsYXksCiAgICAgICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0aF90ICAg bGVuLAogICAgICAgICAgICAgICAgIElTdHJpbmc6OnVvZmZzZXRfdCAgIHBvcywKICAgICAgICAg ICAgICAgICBjaGFyICAgICAgICAgICAgICAgICBwYWRDaGFyYWN0ZXIgKSwKICpyZW1vdmUgICAg ICAgKCBJU3RyaW5nOjp1b2Zmc2V0X3QgICBzdGFydFBvcywKICAgICAgICAgICAgICAgICBJU3Ry aW5nOjp1Y291bnRfdCAgICBudW1DaGFycyApLAogKnJldmVyc2UgICAgICAoICksCiAqcmlnaHRK dXN0aWZ5ICggSVN0cmluZzo6dWxlbmd0aF90ICAgbmV3TGVuLAogICAgICAgICAgICAgICAgIGNo YXIgICAgICAgICAgICAgICAgIHBhZENoYXJhY3RlciApLAogKnN0cmlwICAgICAgICAoIGNvbnN0 IGNoYXIqICAgICAgICAgIHBDaGFycywKICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1bGVuZ3Ro X3QgICBsZW4sCiAgICAgICAgICAgICAgICAgSVN0cmluZ0VudW06OlN0cmlwTW9kZSBtb2RlICks CiAqc3RyaXAgICAgICAgICggY29uc3QgSVN0cmluZ1Rlc3QmICAgICBhVGVzdCwKICAgICAgICAg ICAgICAgICBJU3RyaW5nRW51bTo6U3RyaXBNb2RlIG1vZGUgKSwKICp0cmFuc2xhdGUgICAgKCBj b25zdCBjaGFyKiAgICAgICAgICBwSW5wdXRDaGFycywKICAgICAgICAgICAgICAgICBJU3RyaW5n Ojp1bGVuZ3RoX3QgICBpbnB1dExlbiwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAg ICAgICBwT3V0cHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0aF90ICAg b3V0cHV0TGVuLAogICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgIHBhZENoYXJh Y3RlciApLAogKnVwcGVyQ2FzZSAgICAoICk7Cgpwcm90ZWN0ZWQ6CgpzdGF0aWMgYm9vbCBpczMy Ynl0ZXNBbGlnbmVkOwoKCgoKCgogCnZpcnR1YWwgSVN0cmluZzo6dW9mZnNldF90CiAgc3RhcnRT ZWFyY2ggICAgICAgICAgKCBJU3RyaW5nOjp1b2Zmc2V0X3Qgc3RhcnRQb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICBJU3RyaW5nOjp1bGVuZ3RoX3Qgc2VhcmNoTGVuICkgY29uc3QsCiAgc3Rh cnRCYWNrd2FyZHNTZWFyY2ggKCBJU3RyaW5nOjp1b2Zmc2V0X3Qgc3RhcnRQb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICBJU3RyaW5nOjp1bGVuZ3RoX3Qgc2VhcmNoTGVuICkgY29uc3Q7Cgog CnZpcnR1YWwgSUJ1ZmZlcgogKmFsbG9jYXRlICAgICAgICAoIElTdHJpbmc6OnVsZW5ndGhfdCBi dWZMZW5ndGggKSBjb25zdDsKCiMgMjkyICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lidWZmZXIuaHBwIgoKdm9pZAogKm9wZXJhdG9yIG5ldyAgICAo IHNpemVfdCAgICAgIHQsCiAgICAgICAgICAgICAgICAgICAgSVN0cmluZzo6dWxlbmd0aF90ICAg YnVmTGVuICk7CnZvaWQKICBvcGVyYXRvciBkZWxldGUgKCB2b2lkKiAgICBwICk7CgoKIApzdGF0 aWMgSUJ1ZmZlcgogKmluaXRpYWxpemUgKCApOwoKIAp2aXJ0dWFsIGNvbnN0IGNoYXIKICpjbGFz c05hbWUgKCApIGNvbnN0OwoKIAogIElCdWZmZXIgKCBJU3RyaW5nOjp1bGVuZ3RoX3QgbmV3TGVu ICk7CnZpcnR1YWwKIH5JQnVmZmVyICggKTsKCnByaXZhdGU6CiAKSVN0cmluZzo6dWxlbmd0aF90 CiAgbGVuOwpjaGFyCiAgZGF0YVsxXTsKCnN0YXRpYyBJQnVmZmVyCiAqbnVsbEJ1ZmZlcjsKCnN0 YXRpYyBJQnVmZmVyCiAqbnVsbElCdWZmZXI7CgoKCgoKCgpmcmllbmQgY2xhc3MgSVN0cmluZzsK ZnJpZW5kIGNsYXNzIElTdGF0aWNPYmplY3RIZWxwZXI8SUJ1ZmZlcj47Cn07CgogCgogCgoKCgoK CgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2li dWZmZXIuaW5sIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCgogCmV4dGVybiAiQyIgewogIAojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xp Yi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoK CgoKIyAzMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pYnVmZmVyLmlubCIgMgoKfQoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lleGNiYXNlLmhwcCIgMQojIDEwICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGNiYXNlLmhwcCIKCgojIDcyNiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFz ZS5ocHAiCgoKCgoKCiMgMzQgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaWJ1ZmZlci5pbmwiIDIKCiAKCiNwcmFnbWEgaW5mbyhub3BhcikKCiAKaW5s aW5lIElTdHJpbmc6OnVsZW5ndGhfdCBJQnVmZmVyIDo6IGNoZWNrQWRkaXRpb24gKCBJU3RyaW5n Ojp1bGVuZ3RoX3QgYWRkZW5kMSwgSVN0cmluZzo6dWxlbmd0aF90IGFkZGVuZDIgKQogIHsKICBy ZXR1cm4gKCBhZGRlbmQxIDwKCgoKICAgICAgICAgICAgICAgICAgICAgKDIxNDc0ODM2NDcgICAq IDJVICsgMSkgCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFkZGVuZDIgKSA/IGFk ZGVuZDEgKyBhZGRlbmQyIDogb3ZlcmZsb3coKTsKICB9CmlubGluZSBJU3RyaW5nOjp1bGVuZ3Ro X3QgSUJ1ZmZlciA6OiBjaGVja011bHRpcGxpY2F0aW9uICggSVN0cmluZzo6dWxlbmd0aF90IGZh Y3RvcjEsIElTdHJpbmc6OnVsZW5ndGhfdCBmYWN0b3IyICkKICB7CiAgcmV0dXJuICggZmFjdG9y MSA8CgoKCiAgICAgICAgICAgICAgICAgICAgICgyMTQ3NDgzNjQ3ICAgKiAyVSArIDEpIAoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBmYWN0b3IyICkgPyBmYWN0b3IxICogZmFjdG9y MiA6IG92ZXJmbG93KCk7CiAgfQogCmlubGluZSBJU3RyaW5nOjp1bGVuZ3RoX3QgSUJ1ZmZlciA6 OiB1c2VDb3VudCAoICkgY29uc3QKICB7CiAgcmV0dXJuIChJU3RyaW5nOjp1bGVuZ3RoX3QpKHRo aXMtPmNvdW50KCkpOwogIH0KaW5saW5lIElTdHJpbmc6OnVsZW5ndGhfdCBJQnVmZmVyIDo6IGxl bmd0aCAoICkgY29uc3QKICB7CiAgcmV0dXJuIGxlbjsKICB9CmlubGluZSBjb25zdCBjaGFyICpJ QnVmZmVyIDo6IGNvbnRlbnRzICggKSBjb25zdAogIHsKICByZXR1cm4gZGF0YTsKICB9CmlubGlu ZSBjaGFyICpJQnVmZmVyIDo6IGNvbnRlbnRzICggKQogIHsKICByZXR1cm4gZGF0YTsKICB9Cgoj IDk2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2li dWZmZXIuaW5sIgoKCgoKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCgogCgojIDM1NyAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYnVmZmVyLmhwcCIgMgoK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2li dWZmZXJuLmlubCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAoKIyA0NiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pYnVmZmVybi5pbmwiCgoKaW5saW5lIHZvaWQqCklCdWZmZXI6Om9wZXJhdG9yIG5l dyhzaXplX3QsIElTdHJpbmc6OnVsZW5ndGhfdCByZWFsU2l6ZSkKewogIHZvaWQgKnAgPSA6Om5l dyBjaGFyW2NoZWNrQWRkaXRpb24oc2l6ZW9mKElCdWZmZXIpLCByZWFsU2l6ZSldOwogIHJldHVy biBwOwp9CgppbmxpbmUgdm9pZApJQnVmZmVyOjpvcGVyYXRvciBkZWxldGUodm9pZCAqcCkKewog ICAgOjpkZWxldGUgW10gKGNoYXIqKXA7Cn0KCgoKIAoKIyAzNTggIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJ1ZmZlci5ocHAiIDIKCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUp CiAKCiAKCgoKCgoKIyAzOSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pc3RyaW5nLmlubCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJ0ZXN0LmhwcCIgMQojIDEwICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJ0ZXN0LmhwcCIKCgoK CgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCiAKCiAK I3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQ T1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmds aW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoK CgogCgogCmV4dGVybiAiQyIKICB7CgoKCgogIHR5cGVkZWYgaW50IElDU3RyVGVzdEZuKCBpbnQg KTsKCiAgfQogCgogCiAKCiAKCmNsYXNzICAgSVN0cmluZ1Rlc3QgewpwdWJsaWM6CgogCnR5cGVk ZWYgSUNTdHJUZXN0Rm4KICBDRnVuY3Rpb247CnR5cGVkZWYgYm9vbAogIENQUEZ1bmN0aW9uKCBp bnQgKTsKCiAKIyAxMDggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaXN0cnRlc3QuaHBwIgoKICBJU3RyaW5nVGVzdCAoIENGdW5jdGlvbiAgICZjRnVu YyApOwoKCgoKCgp2aXJ0dWFsCiB+SVN0cmluZ1Rlc3QgKCApOwoKIAp2aXJ0dWFsIGJvb2wKICB0 ZXN0ICAgICAgICAoIGludCBjICkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAKZW51bSBGblR5cGUgewog IHVzZXIsCiAgYywKICBjcHAsCiAgbWVtRm4sCiAgY01lbUZuCiAgfTsKCkZuVHlwZQogIHR5cGU7 CgoKCgogICB1bmlvbiB7IENGdW5jdGlvbiAqY0ZuOyB2b2lkICp1c2VyOyB9IGRhdGE7CgoKCiAK ICBJU3RyaW5nVGVzdCAoIEZuVHlwZSAgdHlwZSwKICAgICAgICAgICAgICAgIHZvaWQgICAqdXNl ckRhdGEgKTsKCn07ICAKCnRlbXBsYXRlIDwgY2xhc3MgVCA+CmNsYXNzICAgSVN0cmluZ1Rlc3RN ZW1iZXJGbiA6IHB1YmxpYyBJU3RyaW5nVGVzdCB7CnB1YmxpYzoKIAp0eXBlZGVmIGJvb2wKICgg VDo6KkNvbnN0Rm4gKSggaW50ICkgY29uc3Q7CnR5cGVkZWYgYm9vbAogKCBUOjoqTm9uY29uc3RG biApKCBpbnQgKTsKCiAKICBJU3RyaW5nVGVzdE1lbWJlckZuICggY29uc3QgVCAgICAmb2JqZWN0 LAogICAgICAgICAgICAgICAgICAgICAgICBDb25zdEZuICAgICBjb25zdEZuICkKICAgIDogSVN0 cmluZ1Rlc3QgKCBjTWVtRm4sICh2b2lkKikmb2JqZWN0ICksCiAgICAgIGNNRiAgICAgICAgICgg Y29uc3RGbiApCiAgICB7CiAgICB9CiAgSVN0cmluZ1Rlc3RNZW1iZXJGbiAoIFQgICAgICAgICAg Jm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgTm9uY29uc3RGbiAgbm9uY29uc3RGbiAp CiAgICA6IElTdHJpbmdUZXN0ICggdXNlciwgKHZvaWQqKSZvYmplY3QgKSwKICAgICAgbmNNRiAg ICAgICAgKCBub25jb25zdEZuICkKICAgIHsKICAgIH0KCiAKdmlydHVhbCBib29sCiAgdGVzdCAg ICAgICAgICAgICAgICAoIGludCBjICkgY29uc3QKICAgIHsKICAgIGlmICggdGhpcy0+dHlwZSA9 PSBjTWVtRm4gKQogICAgICByZXR1cm4gKChjb25zdCBUKilkYXRhLnVzZXItPipjTUYpKCBjICk7 CiAgICBlbHNlCiAgICAgIHJldHVybiAoKFQqKWRhdGEudXNlci0+Km5jTUYpKCBjICk7CiAgICB9 Cgpwcml2YXRlOgogCnVuaW9uIHsgQ29uc3RGbiBjTUY7IE5vbmNvbnN0Rm4gbmNNRjsgfTsKCn07 CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBv cCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2lzdHJ0ZXN0LmlubCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgppbmxpbmUgSVN0cmluZ1Rlc3QgOjogSVN0cmlu Z1Rlc3QgKCBGblR5cGUgdHlwLCB2b2lkICpwICkKICA6IHR5cGUoIHR5cCApCiAgewogIGRhdGEu dXNlciA9IHA7CiAgfQoKIAoKIyAyMDkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1z aGFyZWQuYmluL2luY2x1ZGUvaXN0cnRlc3QuaHBwIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25l KQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgoKCgoKCgoj IDQwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lz dHJpbmcuaW5sIiAyCgogCgogCmlubGluZSBJQnVmZmVyKiBJU3RyaW5nOjpidWZmZXIoKSBjb25z dAp7CiAgICAKCgogICAgcmV0dXJuIElCdWZmZXI6OmZyb21Db250ZW50cyhwQnVmZmVyKTsKfQoK aW5saW5lIGNoYXIqIElTdHJpbmc6OmRhdGEoKSBjb25zdAp7CiAgICByZXR1cm4gcEJ1ZmZlcjsK fQoKaW5saW5lIElTdHJpbmc6OnVsZW5ndGhfdCBJU3RyaW5nOjpsZW5ndGhPZiAoY29uc3QgY2hh ciogcCkKewogICAgcmV0dXJuIHAgPyBzdHJsZW4ocCkgOiAwOwp9CgppbmxpbmUgSVN0cmluZyYg SVN0cmluZzo6c2V0QnVmZmVyKElCdWZmZXIqIGlidWZmKQp7CiAgICAKCgogICAgcEJ1ZmZlciA9 IGlidWZmLT5jb250ZW50cygpOwogICAgcmV0dXJuICp0aGlzOwp9CgoKIAppbmxpbmUgSVN0cmlu Zzo6dWxlbmd0aF90IElTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5i dWZmZXIoKS0+bGVuZ3RoKCk7Cn0KCmlubGluZSBJU3RyaW5nOjp1bGVuZ3RoX3QgSVN0cmluZzo6 c2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+bGVuZ3RoKCk7Cn0KCmlu bGluZSBJU3RyaW5nRW51bTo6Q2hhclR5cGUgSVN0cmluZzo6Y2hhclR5cGUgKCB1b2Zmc2V0X3Qg aW5kZXggKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmNoYXJUeXBlKGluZGV4 KTsKfQoKIAppbmxpbmUgSVN0cmluZzo6dW9mZnNldF90IElTdHJpbmc6OmluZGV4T2YoIGNvbnN0 IElTdHJpbmcmIGFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5i dWZmZXIoKS0+aW5kZXhPZiggYVN0cmluZy5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFTdHJpbmcubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0UG9zICk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmlu Zzo6aW5kZXhPZiggY29uc3QgY2hhciogcFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcykgY29uc3QKewogICAgcmV0 dXJuIHRoaXMtPmJ1ZmZlcigpLT5pbmRleE9mKCBwU3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZW5ndGhPZiggcFN0cmluZyApLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGFydFBvcyApOwp9CgppbmxpbmUgSVN0cmluZzo6dW9mZnNldF90 IElTdHJpbmc6OmluZGV4T2YoIGNvbnN0IElTdHJpbmdUZXN0JiAgYVRlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgICAgICBzdGFy dFBvcykgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pbmRleE9mKGFUZXN0LCBz dGFydFBvcyApOwp9CgppbmxpbmUgSVN0cmluZzo6dW9mZnNldF90IElTdHJpbmc6OmluZGV4T2ZB bnlCdXQoIGNvbnN0IElTdHJpbmcmICBhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgICBzdGFydFBvcykgY29uc3QK ewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pbmRleE9mQW55QnV0KCAgIGFTdHJpbmcuZGF0 YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFTdHJpbmcu bGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnRQb3MgKTsKfQoKaW5saW5lIElTdHJpbmc6OnVvZmZzZXRfdCBJU3RyaW5nOjppbmRleE9mQW55 QnV0KCBjb25zdCBjaGFyKiBwVmFsaWRDaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcykgY29uc3QKewogICAg cmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pbmRleE9mQW55QnV0KCAgIHBWYWxpZENoYXJzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aE9mKHBWYWxpZENo YXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBv cyk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6aW5kZXhPZkFueUJ1dCAo IGNoYXIgICAgICB2YWxpZENoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVvZmZzZXRfdCBzdGFydFBvcyApIGNvbnN0CnsKICAgIHJldHVybiB0 aGlzLT5idWZmZXIoKS0+aW5kZXhPZkFueUJ1dCgmdmFsaWRDaGFyLCAxLCBzdGFydFBvcyApOwp9 CgppbmxpbmUgSVN0cmluZzo6dW9mZnNldF90IElTdHJpbmc6OmluZGV4T2ZBbnlCdXQgKCBjb25z dCBJU3RyaW5nVGVzdCAmYVRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgICAgICBzdGFydFBvcyApIGNvbnN0CnsKICBy ZXR1cm4gdGhpcy0+YnVmZmVyKCktPmluZGV4T2ZBbnlCdXQoIGFUZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3MgKTsKfQoKaW5saW5lIElTdHJpbmc6 OnVvZmZzZXRfdCBJU3RyaW5nOjppbmRleE9mQW55T2YgKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5n LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZz ZXRfdCAgICAgIHN0YXJ0UG9zICkgY29uc3QKewogIHJldHVybiB0aGlzLT5idWZmZXIoKS0+aW5k ZXhPZkFueU9mKCBhU3RyaW5nLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYVN0cmluZy5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnRQb3MgKTsKfQoKaW5saW5lIElTdHJpbmc6OnVvZmZzZXRfdCBJU3RyaW5n OjppbmRleE9mQW55T2YgKCBjb25zdCBjaGFyICpwU2VhcmNoQ2hhcnMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgc3RhcnRQb3Mg KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pbmRleE9mQW55T2YoIHBTZWFyY2hD aGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoT2YoIHBT ZWFyY2hDaGFycyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy dFBvcyApOwp9CgppbmxpbmUgSVN0cmluZzo6dW9mZnNldF90IElTdHJpbmc6OmluZGV4T2ZBbnlP ZiAoIGNoYXIgICAgICBzZWFyY2hDaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCBzdGFydFBvcyApIGNvbnN0CnsKICAgIHJldHVy biB0aGlzLT5idWZmZXIoKS0+aW5kZXhPZkFueU9mKCZzZWFyY2hDaGFyLCAxLCBzdGFydFBvcyk7 Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6aW5kZXhPZkFueU9mICggY29u c3QgSVN0cmluZ1Rlc3QgJmFUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgICAgICBzdGFydFBvcyApIGNvbnN0CnsKICAg IHJldHVybiB0aGlzLT5idWZmZXIoKS0+aW5kZXhPZkFueU9mKGFUZXN0LCBzdGFydFBvcyk7Cn0K CmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6bGFzdEluZGV4T2YgKCBjb25zdCBJ U3RyaW5nJiBhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3MgKSBjb25zdAp7CiAgICByZXR1cm4gdGhp cy0+YnVmZmVyKCktPmxhc3RJbmRleE9mKCBhU3RyaW5nLmRhdGEoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFTdHJpbmcubGVuZ3RoKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvcyk7Cn0KCmlubGluZSBJU3RyaW5nOjp1 b2Zmc2V0X3QgSVN0cmluZzo6bGFzdEluZGV4T2YgKCBjb25zdCBjaGFyICpwU3RyaW5nLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAg c3RhcnRQb3MgKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmxhc3RJbmRleE9m KCBwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro T2YocFN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy dFBvcyk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6bGFzdEluZGV4T2Yg KCBjb25zdCBJU3RyaW5nVGVzdCAmYVRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICAgICAgc3RhcnRQb3MgKSBjb25zdAp7 CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmxhc3RJbmRleE9mKGFUZXN0LCBzdGFydFBvcyk7 Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6bGFzdEluZGV4T2ZBbnlCdXQo IGNvbnN0IElTdHJpbmcmICBhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICAgc3RhcnRQb3MpIGNvbnN0CnsK ICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+bGFzdEluZGV4T2ZBbnlCdXQoICAgYVN0cmluZy5k YXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFT dHJpbmcubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXJ0UG9zICk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QKSVN0cmluZzo6 bGFzdEluZGV4T2ZBbnlCdXQoY29uc3QgY2hhciogcFZhbGlkQ2hhcnMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVvZmZzZXRfdCAgIHN0YXJ0UG9zKSBjb25zdAp7CiAgICByZXR1cm4gdGhp cy0+YnVmZmVyKCktPmxhc3RJbmRleE9mQW55QnV0KCAgIHBWYWxpZENoYXJzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhPZihwVmFsaWRDaGFy cyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0 UG9zKTsKfQoKaW5saW5lIElTdHJpbmc6OnVvZmZzZXRfdApJU3RyaW5nOjpsYXN0SW5kZXhPZkFu eUJ1dChjaGFyICAgICAgdmFsaWRDaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1b2Zm c2V0X3Qgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+bGFzdElu ZGV4T2ZBbnlCdXQoJnZhbGlkQ2hhciwgMSwgc3RhcnRQb3MpOwp9CgppbmxpbmUgSVN0cmluZzo6 dW9mZnNldF90CklTdHJpbmc6Omxhc3RJbmRleE9mQW55QnV0KGNvbnN0IElTdHJpbmdUZXN0ICZh VGVzdCwgdW9mZnNldF90IHN0YXJ0UG9zKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVy KCktPmxhc3RJbmRleE9mQW55QnV0KGFUZXN0LCBzdGFydFBvcyk7Cn0KCmlubGluZSBJU3RyaW5n Ojp1b2Zmc2V0X3QKSVN0cmluZzo6bGFzdEluZGV4T2ZBbnlPZiAoY29uc3QgSVN0cmluZyYgYVN0 cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3Mp IGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+bGFzdEluZGV4T2ZBbnlPZihhU3Ry aW5nLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh U3RyaW5nLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXJ0UG9zKTsKfQoKaW5saW5lIElTdHJpbmc6OnVvZmZzZXRfdApJU3RyaW5nOjpsYXN0 SW5kZXhPZkFueU9mKGNvbnN0IGNoYXIgKnBTZWFyY2hDaGFycywKICAgICAgICAgICAgICAgICAg ICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcykgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1 ZmZlcigpLT5sYXN0SW5kZXhPZkFueU9mKHBTZWFyY2hDaGFycywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhPZihwU2VhcmNoQ2hhcnMpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zKTsKfQoKaW5saW5l IElTdHJpbmc6OnVvZmZzZXRfdApJU3RyaW5nOjpsYXN0SW5kZXhPZkFueU9mKGNoYXIgICAgICBz ZWFyY2hDaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCBzdGFydFBvcykg Y29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5sYXN0SW5kZXhPZkFueU9mKCZzZWFy Y2hDaGFyLCAxLCBzdGFydFBvcyk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QKSVN0cmlu Zzo6bGFzdEluZGV4T2ZBbnlPZihjb25zdCBJU3RyaW5nVGVzdCYgYVRlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgICAgIHN0YXJ0UG9zKSBjb25zdAp7CiAgICBy ZXR1cm4gdGhpcy0+YnVmZmVyKCktPmxhc3RJbmRleE9mQW55T2YoYVRlc3QsIHN0YXJ0UG9zKTsK fQoKaW5saW5lIElTdHJpbmc6OnVjb3VudF90CklTdHJpbmc6Om9jY3VycmVuY2VzT2YoY29uc3Qg SVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBz dGFydFBvcykgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPm9jY3VycmVuY2VzT2YoYVN0cmluZy5k YXRhKCksIGFTdHJpbmcubGVuZ3RoKCksIHN0YXJ0UG9zKTsKfQoKaW5saW5lIElTdHJpbmc6OnVj b3VudF90CklTdHJpbmc6Om9jY3VycmVuY2VzT2YoY29uc3QgY2hhciogcFN0cmluZywKICAgICAg ICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBzdGFydFBvcykgY29uc3QKewogICAgcmV0dXJu IHRoaXMtPm9jY3VycmVuY2VzT2YocFN0cmluZywgbGVuZ3RoT2YocFN0cmluZyksIHN0YXJ0UG9z ICk7Cn0KCiAKaW5saW5lIGJvb2wgSVN0cmluZzo6aXNBbHBoYW51bWVyaWMoKSBjb25zdAp7CiAg ICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzQWxwaGFudW1lcmljKCk7Cn0KCmlubGluZSBib29s IElTdHJpbmc6OmlzQWxwaGFiZXRpYygpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIo KS0+aXNBbHBoYWJldGljKCk7Cn0KCmlubGluZSBib29sIElTdHJpbmc6OmlzQVNDSUkoKSBjb25z dAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzQVNDSUkoKTsKfQoKaW5saW5lIGJvb2wg SVN0cmluZzo6aXNDb250cm9sKCkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5p c0NvbnRyb2woKTsKfQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aXNEaWdpdHMoKSBjb25zdAp7CiAg ICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzRGlnaXRzKCk7Cn0KCmlubGluZSBib29sIElTdHJp bmc6OmlzR3JhcGhpY3MoKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzR3Jh cGhpY3MoKTsKfQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aXNIZXhEaWdpdHMoKSBjb25zdAp7CiAg ICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzSGV4RGlnaXRzKCk7Cn0KCmlubGluZSBib29sIElT dHJpbmc6OmlzTG93ZXJDYXNlKCkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5p c0xvd2VyQ2FzZSgpOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppc1ByaW50YWJsZSgpIGNvbnN0 CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+aXNQcmludGFibGUoKTsKfQoKaW5saW5lIGJv b2wgSVN0cmluZzo6aXNQdW5jdHVhdGlvbigpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZm ZXIoKS0+aXNQdW5jdHVhdGlvbigpOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppc1VwcGVyQ2Fz ZSgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5idWZmZXIoKS0+aXNVcHBlckNhc2UoKTsKfQoK aW5saW5lIGJvb2wgSVN0cmluZzo6aXNXaGl0ZVNwYWNlKCkgY29uc3QKewogICAgcmV0dXJuIHRo aXMtPmJ1ZmZlcigpLT5pc1doaXRlU3BhY2UoKTsKfQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aXNN QkNTKCkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pc01CQ1MoKTsKfQoKaW5s aW5lIGJvb2wgSVN0cmluZzo6aXNEQkNTKCkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmJ1ZmZl cigpLT5pc0RCQ1MoKTsKfQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aXNTQkNTKCkgY29uc3QKewog ICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pc1NCQ1MoKTsKfQoKaW5saW5lIGJvb2wgSVN0cmlu Zzo6aXNWYWxpZE1CQ1MoKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmlzVmFs aWRNQkNTKCk7Cn0KCmlubGluZSBib29sIElTdHJpbmc6OmlzVmFsaWREQkNTKCkgY29uc3QKewog ICAgcmV0dXJuIHRoaXMtPmJ1ZmZlcigpLT5pc1ZhbGlkREJDUygpOwp9CgppbmxpbmUgYm9vbCBJ U3RyaW5nOjppbmNsdWRlc01CQ1MoKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCkt PmluY2x1ZGVzTUJDUygpOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppbmNsdWRlc0RCQ1MoKSBj b25zdAp7CiAgICByZXR1cm4gdGhpcy0+YnVmZmVyKCktPmluY2x1ZGVzREJDUygpOwp9Cgppbmxp bmUgYm9vbCBJU3RyaW5nOjppbmNsdWRlc1NCQ1MoKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+ YnVmZmVyKCktPmluY2x1ZGVzU0JDUygpOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppc0xpa2Uo Y29uc3QgSVN0cmluZyYgYVBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICAgICAgICAgICB6ZXJvT3JNb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAg ICAgICAgICAgYW55Q2hhciApIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+aXNMaWtlKCBhUGF0dGVy bi5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgYVBhdHRlcm4ubGVuZ3RoKCksCiAgICAg ICAgICAgICAgICAgICAgICAgemVyb09yTW9yZSwKICAgICAgICAgICAgICAgICAgICAgICBhbnlD aGFyICk7Cn0KCmlubGluZSBib29sIElTdHJpbmc6OmlzTGlrZShjb25zdCBjaGFyKiBwUGF0dGVy biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgIHplcm9Pck1vcmUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBhbnlDaGFyKSBjb25zdAp7CiAg cmV0dXJuIHRoaXMtPmlzTGlrZSggcFBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgbGVu Z3RoT2YocFBhdHRlcm4pLAogICAgICAgICAgICAgICAgICAgICAgIHplcm9Pck1vcmUsCiAgICAg ICAgICAgICAgICAgICAgICAgYW55Q2hhciApOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppc0Fi YnJldmlhdGlvbkZvciggY29uc3QgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVsZW5ndGhfdCAgICAgIG1pbkFiYnJldkxlbmd0aCkgY29u c3QKewogIHJldHVybiB0aGlzLT5pc0FiYnJldkZvciggYVN0cmluZy5kYXRhKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhU3RyaW5nLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWluQWJicmV2TGVuZ3RoICk7Cn0KCmlubGluZSBib29sIElTdHJpbmc6OmlzQWJi cmV2aWF0aW9uRm9yKCBjb25zdCBjaGFyKiBwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWxlbmd0aF90ICAgbWluQWJicmV2TGVuZ3RoKSBjb25zdAp7CiAg cmV0dXJuIHRoaXMtPmlzQWJicmV2Rm9yKCBwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVuZ3RoT2YocFN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5B YmJyZXZMZW5ndGgpOwp9CgppbmxpbmUgYm9vbCBJU3RyaW5nOjppbmNsdWRlcyhjb25zdCBJU3Ry aW5nJiBhU3RyaW5nKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+aW5kZXhPZihhU3RyaW5nKTsK fQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aW5jbHVkZXMoY29uc3QgY2hhciogcFN0cmluZykgY29u c3QKewogICAgcmV0dXJuIHRoaXMtPmluZGV4T2YocFN0cmluZyk7Cn0KCmlubGluZSBib29sIElT dHJpbmc6OmluY2x1ZGVzKGNoYXIgYUNoYXIpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5pbmRl eE9mKGFDaGFyKTsKfQoKaW5saW5lIGJvb2wgSVN0cmluZzo6aW5jbHVkZXMoY29uc3QgSVN0cmlu Z1Rlc3QmIGFUZXN0KSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+aW5kZXhPZihhVGVzdCk7Cn0K CiAKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJU3RyaW5nJiBzdHJpbmcxLCBjb25zdCBJ U3RyaW5nJiBzdHJpbmcyKQp7CiAgICByZXR1cm4oc3RyaW5nMS5idWZmZXIoKS0+Y29tcGFyZShz dHJpbmcyLmRhdGEoKSwgc3RyaW5nMi5sZW5ndGgoKSkKICAgICAgICAgICAgPT0gSUJ1ZmZlcjo6 ZXF1YWwpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElTdHJpbmcmIHN0cmluZzEs IGNvbnN0IGNoYXIqIHBTdHJpbmcyKQp7CiAgICByZXR1cm4gKHN0cmluZzEuYnVmZmVyKCktPmNv bXBhcmUocFN0cmluZzIsIElTdHJpbmc6Omxlbmd0aE9mKHBTdHJpbmcyKSkKICAgICAgICAgICAg PT0gSUJ1ZmZlcjo6ZXF1YWwpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIq IHBTdHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJpbmcyKQp7CiAgcmV0dXJuIChzdHJpbmcyLmJ1 ZmZlcigpLT5jb21wYXJlKHBTdHJpbmcxLCBJU3RyaW5nOjpsZW5ndGhPZihwU3RyaW5nMSkpCiAg ICAgICAgICAgID09IElCdWZmZXI6OmVxdWFsKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj b25zdCBJU3RyaW5nJiBzdHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJpbmcyKQp7CiAgICByZXR1 cm4gIShzdHJpbmcxID09IHN0cmluZzIpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IElTdHJpbmcmIHN0cmluZzEsIGNvbnN0IGNoYXIqIHBTdHJpbmcyKQp7CiAgICByZXR1cm4gIShz dHJpbmcxID09IHBTdHJpbmcyKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGFy KiBwU3RyaW5nMSwgY29uc3QgSVN0cmluZyYgc3RyaW5nMikKewogICAgcmV0dXJuICEocFN0cmlu ZzEgPT0gc3RyaW5nMik7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBJU3RyaW5nJiBz dHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJpbmcyKQp7CiAgICByZXR1cm4gKHN0cmluZzEuYnVm ZmVyKCktPmNvbXBhcmUoc3RyaW5nMi5kYXRhKCksIHN0cmluZzIubGVuZ3RoKCkpCiAgICAgICAg ICAgID09IElCdWZmZXI6OmdyZWF0ZXJUaGFuICk7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPihj b25zdCBJU3RyaW5nJiBzdHJpbmcxLCBjb25zdCBjaGFyKiBwU3RyaW5nMikKewogICAgcmV0dXJu IChzdHJpbmcxLmJ1ZmZlcigpLT5jb21wYXJlKHBTdHJpbmcyLCBJU3RyaW5nOjpsZW5ndGhPZihw U3RyaW5nMikpCiAgICAgICAgICAgID09IElCdWZmZXI6OmdyZWF0ZXJUaGFuKTsKfQoKaW5saW5l IGJvb2wgb3BlcmF0b3I+KGNvbnN0IGNoYXIqIHBTdHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJp bmcyKQp7CiAgICByZXR1cm4gKHN0cmluZzIuYnVmZmVyKCktPmNvbXBhcmUocFN0cmluZzEsIElT dHJpbmc6Omxlbmd0aE9mKHBTdHJpbmcxKSkKICAgICAgICAgICAgPT0gSUJ1ZmZlcjo6bGVzc1Ro YW4pOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IElTdHJpbmcmIHN0cmluZzEsIGNv bnN0IElTdHJpbmcmIHN0cmluZzIpCnsKICAgIHJldHVybiAhKHN0cmluZzEuYnVmZmVyKCktPmNv bXBhcmUoIHN0cmluZzIuZGF0YSgpLCBzdHJpbmcyLmxlbmd0aCgpKQogICAgICAgICAgICA9PSBJ QnVmZmVyOjpsZXNzVGhhbik7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgSVN0cmlu ZyYgc3RyaW5nMSwgY29uc3QgY2hhciogcFN0cmluZzIpCnsKICAgIHJldHVybiAhKHN0cmluZzEu YnVmZmVyKCktPmNvbXBhcmUocFN0cmluZzIsIElTdHJpbmc6Omxlbmd0aE9mKHBTdHJpbmcyKSkK ICAgICAgICAgICAgPT0gSUJ1ZmZlcjo6bGVzc1RoYW4gKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0 b3I+PShjb25zdCBjaGFyKiBwU3RyaW5nMSwgY29uc3QgSVN0cmluZyYgc3RyaW5nMikKewogICAg cmV0dXJuICEoc3RyaW5nMi5idWZmZXIoKS0+Y29tcGFyZShwU3RyaW5nMSwgSVN0cmluZzo6bGVu Z3RoT2YocFN0cmluZzEpKQogICAgICAgICAgICA9PSBJQnVmZmVyOjpncmVhdGVyVGhhbiApOwp9 CgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgSVN0cmluZyYgc3RyaW5nMSwgY29uc3QgSVN0 cmluZyYgc3RyaW5nMikKewogICAgcmV0dXJuICEoc3RyaW5nMSA+PSBzdHJpbmcyKTsKfQoKaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IElTdHJpbmcmIHN0cmluZzEsIGNvbnN0IGNoYXIqIHBT dHJpbmcyKQp7CiAgICByZXR1cm4gIShzdHJpbmcxID49IHBTdHJpbmcyKTsKfQoKaW5saW5lIGJv b2wgb3BlcmF0b3I8KGNvbnN0IGNoYXIqIHBTdHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJpbmcy KQp7CiAgICByZXR1cm4gIShwU3RyaW5nMSA+PSBzdHJpbmcyKTsKfQoKaW5saW5lIGJvb2wgb3Bl cmF0b3I8PShjb25zdCBJU3RyaW5nJiBzdHJpbmcxLCBjb25zdCBJU3RyaW5nJiBzdHJpbmcyKQp7 CiAgICByZXR1cm4gIShzdHJpbmcxID4gc3RyaW5nMik7Cn0KCmlubGluZSBib29sIG9wZXJhdG9y PD0oY29uc3QgSVN0cmluZyYgc3RyaW5nMSwgY29uc3QgY2hhciogcFN0cmluZzIpCnsKICAgIHJl dHVybiAhKCBzdHJpbmcxID4gcFN0cmluZzIgKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj b25zdCBjaGFyKiBwU3RyaW5nMSwgY29uc3QgSVN0cmluZyYgc3RyaW5nMikKewogICAgcmV0dXJu ICEoIHBTdHJpbmcxID4gc3RyaW5nMiApOwp9CgogCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OmFz U3RyaW5nKCkgY29uc3QKewogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgbG9uZyBpbnQgSVN0 cmluZzo6YXNJbnQoKSBjb25zdAp7CiAgICByZXR1cm4gc3RydG9sKCB0aGlzLT5kYXRhKCksIDAs IDEwICk7Cn0KCmlubGluZSB1bnNpZ25lZCBsb25nIElTdHJpbmc6OmFzVW5zaWduZWQoKSBjb25z dAp7CiAgICByZXR1cm4gc3RydG91bCggdGhpcy0+ZGF0YSgpLCAwLCAxMCApOwp9CgojIDU0OSAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RyaW5n LmlubCIKCgppbmxpbmUgZG91YmxlIElTdHJpbmc6OmFzRG91YmxlKCkgY29uc3QKewogICAgcmV0 dXJuIHN0cnRvZCggdGhpcy0+ZGF0YSgpLCAwICk7Cn0KCmlubGluZSBJU3RyaW5nOjpvcGVyYXRv ciBjaGFyKigpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5kYXRhKCk7Cn0KCmlubGluZSBJU3Ry aW5nOjpvcGVyYXRvciB1bnNpZ25lZCBjaGFyKigpIGNvbnN0CnsKICAgIHJldHVybiAodW5zaWdu ZWQgY2hhciopIHRoaXMtPmRhdGEoKTsKfQoKaW5saW5lIElTdHJpbmc6Om9wZXJhdG9yIHNpZ25l ZCBjaGFyKigpIGNvbnN0CnsKICAgIHJldHVybiAoc2lnbmVkIGNoYXIqKSB0aGlzLT5kYXRhKCk7 Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OmMyYiggY29uc3QgSVN0cmluZyYgYVN0cmluZyAp CnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLmMyYigpOwp9CgppbmxpbmUgSVN0cmluZyBJ U3RyaW5nOjpjMmQoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcgKQp7CiAgICByZXR1cm4gSVN0cmlu ZyhhU3RyaW5nKS5jMmQoKTsKfQoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6YzJ4KCBjb25zdCBJ U3RyaW5nJiBhU3RyaW5nICkKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuYzJ4KCk7Cn0K CmlubGluZSBJU3RyaW5nIElTdHJpbmc6OmIyYyggY29uc3QgSVN0cmluZyYgYVN0cmluZyApCnsK ICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLmIyYygpOwp9CgppbmxpbmUgSVN0cmluZyYgIElT dHJpbmc6OmIyZCgpCnsKICAgIHRoaXMtPmIyYygpLmMyZCgpOwogICAgcmV0dXJuICp0aGlzOwp9 CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpiMmQoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcgKQp7 CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS5iMmQoKTsKfQoKaW5saW5lIElTdHJpbmcmICBJ U3RyaW5nOjpiMngoKQp7CiAgICB0aGlzLT5iMmMoKS5jMngoKTsKICAgIHJldHVybiAqdGhpczsK fQoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6YjJ4KCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nICkK ewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuYjJ4KCk7Cn0KCmlubGluZSBJU3RyaW5nIElT dHJpbmc6OmQyYyggY29uc3QgSVN0cmluZyYgYVN0cmluZyApCnsKICAgIHJldHVybiBJU3RyaW5n KGFTdHJpbmcpLmQyYygpOwp9CgppbmxpbmUgSVN0cmluZyYgIElTdHJpbmc6OmQyYigpCnsKICAg IHRoaXMtPmQyYygpLmMyYigpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSVN0cmluZyBJ U3RyaW5nOjpkMmIoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcgKQp7CiAgICByZXR1cm4gSVN0cmlu ZyhhU3RyaW5nKS5kMmIoKTsKfQoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6OmQyeCgpCnsKICAg IHRoaXMtPmQyYygpLmMyeCgpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSVN0cmluZyBJ U3RyaW5nOjpkMngoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcgKQp7CiAgICByZXR1cm4gSVN0cmlu ZyhhU3RyaW5nKS5kMngoKTsKfQoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6eDJjKCBjb25zdCBJ U3RyaW5nJiBhU3RyaW5nICkKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykueDJjKCk7Cn0K CmlubGluZSBJU3RyaW5nJiBJU3RyaW5nOjp4MmIoKQp7CiAgICB0aGlzLT54MmMoKS5jMmIoKTsK ICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6eDJiKCBjb25zdCBJ U3RyaW5nJiBhU3RyaW5nICkKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykueDJiKCk7Cn0K CmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6eDJkKCkKewogICAgdGhpcy0+eDJjKCkuYzJkKCk7 CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OngyZCggY29uc3Qg SVN0cmluZyYgYVN0cmluZyApCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLngyZCgpOwp9 CgogCmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6Y2hhbmdlICggY29uc3QgSVN0cmluZyYgYVBh dHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyYg YVJlcGxhY2VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRf dCAgICAgIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjb3Vu dF90ICAgICAgIG51bUNoYW5nZXMgKQogIHsKICByZXR1cm4gdGhpcy0+Y2hhbmdlKCBhUGF0dGVy bi5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgYVBhdHRlcm4ubGVuZ3RoKCksCiAgICAg ICAgICAgICAgICAgICAgICAgYVJlcGxhY2VtZW50LmRhdGEoKSwKICAgICAgICAgICAgICAgICAg ICAgICBhUmVwbGFjZW1lbnQubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQ b3MsCiAgICAgICAgICAgICAgICAgICAgICAgbnVtQ2hhbmdlcyApOwogIH0KaW5saW5lIElTdHJp bmcmICBJU3RyaW5nOjpjaGFuZ2UgKCBjb25zdCBJU3RyaW5nJiBhUGF0dGVybiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpwUmVwbGFjZW1lbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgc3RhcnRQb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNvdW50X3QgICAgICAgbnVtQ2hh bmdlcyApCiAgewogIHJldHVybiB0aGlzLT5jaGFuZ2UoIGFQYXR0ZXJuLmRhdGEoKSwKICAgICAg ICAgICAgICAgICAgICAgICBhUGF0dGVybi5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAg ICBwUmVwbGFjZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoT2YoIHBSZXBsYWNl bWVudCApLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAg ICAgICAgIG51bUNoYW5nZXMgKTsKICB9CmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6Y2hhbmdl ICggY29uc3QgY2hhciAgICAqcFBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgSVN0cmluZyYgYVJlcGxhY2VtZW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVjb3VudF90ICAgICAgIG51bUNoYW5nZXMgKQogIHsKICByZXR1cm4g dGhpcy0+Y2hhbmdlKCBwUGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhPZigg cFBhdHRlcm4gKSwKICAgICAgICAgICAgICAgICAgICAgICBhUmVwbGFjZW1lbnQuZGF0YSgpLAog ICAgICAgICAgICAgICAgICAgICAgIGFSZXBsYWNlbWVudC5sZW5ndGgoKSwKICAgICAgICAgICAg ICAgICAgICAgICBzdGFydFBvcywKICAgICAgICAgICAgICAgICAgICAgICBudW1DaGFuZ2VzICk7 CiAgfQppbmxpbmUgSVN0cmluZyYgIElTdHJpbmc6OmNoYW5nZSAoIGNvbnN0IGNoYXIgKnBQYXR0 ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBSZXBs YWNlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBz dGFydFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICBu dW1DaGFuZ2VzICkKICB7CiAgcmV0dXJuIHRoaXMtPmNoYW5nZSggcFBhdHRlcm4sCiAgICAgICAg ICAgICAgICAgICAgICAgbGVuZ3RoT2YoIHBQYXR0ZXJuICksCiAgICAgICAgICAgICAgICAgICAg ICAgcFJlcGxhY2VtZW50LAogICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aE9mKCBwUmVwbGFj ZW1lbnQgKSwKICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvcywKICAgICAgICAgICAgICAg ICAgICAgICBudW1DaGFuZ2VzICk7CiAgfQppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpjaGFuZ2Ug KCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJU3RyaW5nJiBhUGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAgICAqcFJlcGxhY2VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1b2Zmc2V0X3QgICAgICBzdGFydFBvcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWNvdW50X3QgICAgICAgbnVtQ2hhbmdlcyApCiAgewogIHJldHVybiBJU3RyaW5n KGFTdHJpbmcpLmNoYW5nZSggYVBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwUmVwbGFjZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy dFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNoYW5nZXMgKTsKICB9 CmlubGluZSBJU3RyaW5nIElTdHJpbmc6OmNoYW5nZSAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKnBQYXR0ZXJu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nJiBhUmVwbGFj ZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0 YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAgICBu dW1DaGFuZ2VzICkKICB7CiAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuY2hhbmdlKCBwUGF0dGVy biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXBsYWNlbWVudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnVtQ2hhbmdlcyApOwogIH0KaW5saW5lIElTdHJpbmcgSVN0cmluZzo6 Y29weSAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1Y291bnRfdCAgICAgICBudW1Db3BpZXMgKQogIHsKICByZXR1cm4gSVN0cmluZyhhU3Ry aW5nKS5jb3B5KCBudW1Db3BpZXMgKTsKICB9CmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6aW5z ZXJ0ICggY29uc3QgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1b2Zmc2V0X3QgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgKQogIHsKICByZXR1cm4gdGhpcy0+ aW5zZXJ0KCBhU3RyaW5nLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICBhU3RyaW5nLmxl bmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAg ICAgIHBhZENoYXJhY3RlciApOwogIH0KaW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjppbnNlcnQg KCBjb25zdCBjaGFyICpwU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVvZmZzZXRfdCAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgICAgICAgIHBhZENoYXJhY3RlciApCiAgewogIHJldHVybiB0aGlzLT5pbnNlcnQoIHBTdHJp bmcsCiAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoT2YoIHBTdHJpbmcgKSwKICAgICAgICAg ICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICBwYWRDaGFyYWN0ZXIg KTsKICB9CmlubGluZSBJU3RyaW5nIElTdHJpbmc6Omluc2VydCAoIGNvbnN0IElTdHJpbmcmIGFT dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcmIGFu SW5zZXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICAgICBp bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFk Q2hhcmFjdGVyICkKICB7CiAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuaW5zZXJ0KCBhbkluc2Vy dCwgaW5kZXgsIHBhZENoYXJhY3RlciApOwogIH0KaW5saW5lIElTdHJpbmcgSVN0cmluZzo6aW5z ZXJ0ICggY29uc3QgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAgICAqcEluc2VydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW9mZnNldF90ICAgICAgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciApCiAgewogIHJldHVybiBJU3RyaW5nKGFT dHJpbmcpLmluc2VydCggcEluc2VydCwgaW5kZXgsIHBhZENoYXJhY3RlciApOwogIH0KaW5saW5l IElTdHJpbmcgSVN0cmluZzo6bGVmdEp1c3RpZnkgKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsZW5ndGhfdCAgICAgIG5ld0xl bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAg ICBwYWRDaGFyYWN0ZXIgKQogIHsKICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS5sZWZ0SnVzdGlm eSggbmV3TGVuZ3RoLCBwYWRDaGFyYWN0ZXIgKTsKICB9CmlubGluZSBJU3RyaW5nIElTdHJpbmc6 Omxvd2VyQ2FzZSAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcgKQogIHsKICByZXR1cm4gSVN0cmlu ZyhhU3RyaW5nKS5sb3dlckNhc2UoKTsKICB9CmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6b3Zl cmxheVdpdGggKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW9mZnNldF90ICAgICAgaW5kZXgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgKQogIHsK ICByZXR1cm4gdGhpcy0+b3ZlcmxheVdpdGgoIGFTdHJpbmcuZGF0YSgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgYVN0cmluZy5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkQ2hhcmFjdGVyICk7CiAg fQppbmxpbmUgSVN0cmluZyYgSVN0cmluZzo6b3ZlcmxheVdpdGggKCBjb25zdCBjaGFyICpwU3Ry aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1b2Zmc2V0X3QgICBp bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAg cGFkQ2hhcmFjdGVyICkKICAgewogICByZXR1cm4gdGhpcy0+b3ZlcmxheVdpdGgoIHBTdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoT2YoIHBTdHJpbmcgKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYWRDaGFyYWN0ZXIgKTsKICAgfQppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpvdmVybGF5V2l0 aCAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgSVN0cmluZyYgYW5PdmVybGF5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciApCiAgewogIHJl dHVybiBJU3RyaW5nKGFTdHJpbmcpLm92ZXJsYXlXaXRoKCBhbk92ZXJsYXksIGluZGV4LCBwYWRD aGFyYWN0ZXIgKTsKICB9CmlubGluZSBJU3RyaW5nIElTdHJpbmc6Om92ZXJsYXlXaXRoICggY29u c3QgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICAgICpwT3ZlcmxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1b2Zmc2V0X3QgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRDaGFyYWN0ZXIgKQogIHsKICByZXR1cm4gSVN0 cmluZyhhU3RyaW5nKS5vdmVybGF5V2l0aCggcE92ZXJsYXksIGluZGV4LCBwYWRDaGFyYWN0ZXIg KTsKICB9CmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnJlbW92ZSAoIGNvbnN0IElTdHJpbmcmIGFT dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVvZmZzZXRfdCAgICAgIHN0 YXJ0UG9zICkKICB7CiAgcmV0dXJuIElTdHJpbmc6OnJlbW92ZSggYVN0cmluZywgc3RhcnRQb3Ms IGtBbGxDaGFuZ2VzICk7CiAgfQppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpyZXZlcnNlICggY29u c3QgSVN0cmluZyYgYVN0cmluZyApCiAgewogIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnJldmVy c2UoKTsKICB9CmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnJpZ2h0SnVzdGlmeSAoIGNvbnN0IElT dHJpbmcmIGFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVs ZW5ndGhfdCAgICAgIG5ld0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAgICAgICAgICAgcGFkQ2hhcmFjdGVyICkKewogICAgcmV0dXJuIElTdHJpbmco YVN0cmluZykucmlnaHRKdXN0aWZ5KCBuZXdMZW5ndGgsIHBhZENoYXJhY3RlciApOwp9Cgppbmxp bmUgSVN0cmluZyYgIElTdHJpbmc6OnN0cmlwTGVhZGluZygpCnsKICAgIHJldHVybiB0aGlzLT5z dHJpcCggSVN0cmluZ1Rlc3QoIGlzc3BhY2UgKSwgSVN0cmluZ0VudW06OmxlYWRpbmcgKTsKfQoK aW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJpcFRyYWlsaW5nKCkKewogICAgcmV0dXJuIHRo aXMtPnN0cmlwKCBJU3RyaW5nVGVzdCggaXNzcGFjZSApLCBJU3RyaW5nRW51bTo6dHJhaWxpbmcg KTsKfQoKaW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJpcCAoIGNoYXIgYUNoYXIgKQp7CiAg ICByZXR1cm4gdGhpcy0+c3RyaXAoICZhQ2hhciwgMSwgSVN0cmluZ0VudW06OmJvdGggKTsKfQoK aW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJpcExlYWRpbmcgKCBjaGFyIGFDaGFyICkKewog ICAgcmV0dXJuIHRoaXMtPnN0cmlwKCAmYUNoYXIsIDEsIElTdHJpbmdFbnVtOjpsZWFkaW5nICk7 Cn0KCmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6c3RyaXBUcmFpbGluZyAoIGNoYXIgYUNoYXIg KQp7CiAgICByZXR1cm4gdGhpcy0+c3RyaXAoICZhQ2hhciwgMSwgSVN0cmluZ0VudW06OnRyYWls aW5nICk7Cn0KCmlubGluZSBJU3RyaW5nJiAgSVN0cmluZzo6c3RyaXAgKCBjb25zdCBJU3RyaW5n JiBhU3RyaW5nICkKewogICAgcmV0dXJuIHRoaXMtPnN0cmlwKCBhU3RyaW5nLmRhdGEoKSwgYVN0 cmluZy5sZW5ndGgoKSwgSVN0cmluZ0VudW06OmJvdGggKTsKfQoKaW5saW5lIElTdHJpbmcmICBJ U3RyaW5nOjpzdHJpcExlYWRpbmcgKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nICkKewogICAgcmV0 dXJuIHRoaXMtPnN0cmlwKCBhU3RyaW5nLmRhdGEoKSwgYVN0cmluZy5sZW5ndGgoKSwgSVN0cmlu Z0VudW06OmxlYWRpbmcgKTsKfQoKaW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJpcFRyYWls aW5nICggY29uc3QgSVN0cmluZyYgYVN0cmluZyApCnsKICAgIHJldHVybiB0aGlzLT5zdHJpcCgg YVN0cmluZy5kYXRhKCksIGFTdHJpbmcubGVuZ3RoKCksIElTdHJpbmdFbnVtOjp0cmFpbGluZyAp Owp9CgppbmxpbmUgSVN0cmluZyYgIElTdHJpbmc6OnN0cmlwICggY29uc3QgY2hhciAqcFN0cmlu ZyApCnsKICAgIHJldHVybiB0aGlzLT5zdHJpcCggcFN0cmluZywgbGVuZ3RoT2YoIHBTdHJpbmcg KSwgSVN0cmluZ0VudW06OmJvdGggKTsKfQoKaW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJp cExlYWRpbmcgKCBjb25zdCBjaGFyICpwU3RyaW5nICkKewogICAgcmV0dXJuIHRoaXMtPnN0cmlw KCBwU3RyaW5nLCBsZW5ndGhPZiggcFN0cmluZyApLCBJU3RyaW5nRW51bTo6bGVhZGluZyApOwp9 CgppbmxpbmUgSVN0cmluZyYgIElTdHJpbmc6OnN0cmlwVHJhaWxpbmcgKCBjb25zdCBjaGFyICpw U3RyaW5nICkKewogICAgcmV0dXJuIHRoaXMtPnN0cmlwKCBwU3RyaW5nLCBsZW5ndGhPZiggcFN0 cmluZyApLCBJU3RyaW5nRW51bTo6dHJhaWxpbmcgKTsKfQoKaW5saW5lIElTdHJpbmcmICBJU3Ry aW5nOjpzdHJpcCAoIGNvbnN0IElTdHJpbmdUZXN0ICZhVGVzdCApCnsKICAgIHJldHVybiB0aGlz LT5zdHJpcCggYVRlc3QsIElTdHJpbmdFbnVtOjpib3RoICk7Cn0KCmlubGluZSBJU3RyaW5nJiAg SVN0cmluZzo6c3RyaXBMZWFkaW5nICggY29uc3QgSVN0cmluZ1Rlc3QgJmFUZXN0ICkKewogICAg cmV0dXJuIHRoaXMtPnN0cmlwKCBhVGVzdCwgSVN0cmluZ0VudW06OmxlYWRpbmcgKTsKfQoKaW5s aW5lIElTdHJpbmcmICBJU3RyaW5nOjpzdHJpcFRyYWlsaW5nICggY29uc3QgSVN0cmluZ1Rlc3Qg JmFUZXN0ICkKewogICAgcmV0dXJuIHRoaXMtPnN0cmlwKCBhVGVzdCwgSVN0cmluZ0VudW06OnRy YWlsaW5nICk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnN0cmlwQmxhbmtzICggY29uc3Qg SVN0cmluZyYgYVN0cmluZyApCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwKCk7 Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnN0cmlwKGNvbnN0IElTdHJpbmcmIGFTdHJpbmcs IGNoYXIgYUNoYXIpCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwKGFDaGFyKTsK fQoKaW5saW5lIElTdHJpbmcKSVN0cmluZzo6c3RyaXAoY29uc3QgSVN0cmluZyYgYVN0cmluZywg Y29uc3QgSVN0cmluZyYgYVN0cmluZ09mQ2hhcnMpCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJp bmcpLnN0cmlwKGFTdHJpbmdPZkNoYXJzKTsKfQoKaW5saW5lIElTdHJpbmcKSVN0cmluZzo6c3Ry aXAoY29uc3QgSVN0cmluZyYgYVN0cmluZywgY29uc3QgY2hhciogcFN0cmluZ09mQ2hhcnMpCnsK ICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwKHBTdHJpbmdPZkNoYXJzKTsKfQoKaW5s aW5lIElTdHJpbmcKSVN0cmluZzo6c3RyaXAoY29uc3QgSVN0cmluZyYgYVN0cmluZywgY29uc3Qg SVN0cmluZ1Rlc3QmIGFUZXN0KQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS5zdHJpcChh VGVzdCk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnN0cmlwTGVhZGluZ0JsYW5rcyAoIGNv bnN0IElTdHJpbmcmIGFTdHJpbmcgKQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS5zdHJp cExlYWRpbmcoKTsKfQoKaW5saW5lIElTdHJpbmcKSVN0cmluZzo6c3RyaXBMZWFkaW5nKGNvbnN0 IElTdHJpbmcmIGFTdHJpbmcsIGNoYXIgYUNoYXIpCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJp bmcpLnN0cmlwTGVhZGluZyhhQ2hhcik7Cn0KCmlubGluZSBJU3RyaW5nCklTdHJpbmc6OnN0cmlw TGVhZGluZyhjb25zdCBJU3RyaW5nJiBhU3RyaW5nLCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nT2ZD aGFycyApCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwTGVhZGluZyhhU3RyaW5n T2ZDaGFycyk7Cn0KCmlubGluZSBJU3RyaW5nCklTdHJpbmc6OnN0cmlwTGVhZGluZyhjb25zdCBJ U3RyaW5nJiBhU3RyaW5nLCBjb25zdCBjaGFyKiBwU3RyaW5nT2ZDaGFycyApCnsKICAgIHJldHVy biBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwTGVhZGluZyhwU3RyaW5nT2ZDaGFycyk7Cn0KCmlubGlu ZSBJU3RyaW5nCklTdHJpbmc6OnN0cmlwTGVhZGluZyhjb25zdCBJU3RyaW5nJiBhU3RyaW5nLCBj b25zdCBJU3RyaW5nVGVzdCYgYVRlc3QpCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0 cmlwTGVhZGluZyhhVGVzdCk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnN0cmlwVHJhaWxp bmdCbGFua3MgKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nICkKewogICAgcmV0dXJuIElTdHJpbmco YVN0cmluZykuc3RyaXBUcmFpbGluZygpOwp9CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpzdHJp cFRyYWlsaW5nIChjb25zdCBJU3RyaW5nJiBhU3RyaW5nLCBjaGFyIGFDaGFyKQp7CiAgICByZXR1 cm4gSVN0cmluZyhhU3RyaW5nKS5zdHJpcFRyYWlsaW5nKGFDaGFyKTsKfQoKaW5saW5lIElTdHJp bmcKSVN0cmluZzo6c3RyaXBUcmFpbGluZyhjb25zdCBJU3RyaW5nJiBhU3RyaW5nLCBjb25zdCBJ U3RyaW5nJiBhU3RyaW5nT2ZDaGFycykKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuc3Ry aXBUcmFpbGluZyhhU3RyaW5nT2ZDaGFycyk7Cn0KCmlubGluZSBJU3RyaW5nCklTdHJpbmc6OnN0 cmlwVHJhaWxpbmcoY29uc3QgSVN0cmluZyYgYVN0cmluZywgY29uc3QgY2hhciogcFN0cmluZ09m Q2hhcnMpCnsKICAgIHJldHVybiBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwVHJhaWxpbmcocFN0cmlu Z09mQ2hhcnMpOwp9CgppbmxpbmUgSVN0cmluZwpJU3RyaW5nOjpzdHJpcFRyYWlsaW5nKGNvbnN0 IElTdHJpbmcmIGFTdHJpbmcsIGNvbnN0IElTdHJpbmdUZXN0JiBhVGVzdCApCnsKICAgIHJldHVy biBJU3RyaW5nKGFTdHJpbmcpLnN0cmlwVHJhaWxpbmcoYVRlc3QpOwp9CgppbmxpbmUgSVN0cmlu ZyYgIElTdHJpbmc6OnRyYW5zbGF0ZSAoIGNvbnN0IElTdHJpbmcmIGlucHV0Q2hhcnMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyYgb3V0cHV0Q2hh cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAg cGFkQ2hhcmFjdGVyICkKewogIHJldHVybiB0aGlzLT50cmFuc2xhdGUoIGlucHV0Q2hhcnMuZGF0 YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q2hhcnMubGVuZ3RoKCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0Q2hhcnMuZGF0YSgpLAogICAgICAgICAgICAgICAg ICAgICAgICAgIG91dHB1dENoYXJzLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg IHBhZENoYXJhY3RlciApOwp9CgppbmxpbmUgSVN0cmluZyYgIElTdHJpbmc6OnRyYW5zbGF0ZSAo IGNvbnN0IElTdHJpbmcmIGlucHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAgICAqcE91dHB1dENoYXJzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgIHBhZENoYXJhY3RlciApCnsKICByZXR1 cm4gdGhpcy0+dHJhbnNsYXRlKCBpbnB1dENoYXJzLmRhdGEoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dENoYXJzLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBP dXRwdXRDaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhPZiggcE91dHB1dENo YXJzICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkQ2hhcmFjdGVyICk7Cn0KCmlubGlu ZSBJU3RyaW5nJiAgSVN0cmluZzo6dHJhbnNsYXRlICggY29uc3QgY2hhciAgICAqcElucHV0Q2hh cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyYg b3V0cHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAg ICAgICAgICAgcGFkQ2hhcmFjdGVyICkKewogIHJldHVybiB0aGlzLT50cmFuc2xhdGUoIHBJbnB1 dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aE9mKCBwSW5wdXRDaGFycyAp LAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dENoYXJzLmRhdGEoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBvdXRwdXRDaGFycy5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBwYWRDaGFyYWN0ZXIgKTsKfQoKaW5saW5lIElTdHJpbmcmICBJU3RyaW5nOjp0cmFu c2xhdGUgKCBjb25zdCBjaGFyICpwSW5wdXRDaGFycywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwT3V0cHV0Q2hhcnMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgcGFkQ2hhcmFjdGVyICkKewogIHJldHVy biB0aGlzLT50cmFuc2xhdGUoIHBJbnB1dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgICAg IGxlbmd0aE9mKCBwSW5wdXRDaGFycyApLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBPdXRw dXRDaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhPZiggcE91dHB1dENoYXJz ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkQ2hhcmFjdGVyICk7Cn0KCmlubGluZSBJ U3RyaW5nIElTdHJpbmc6OnRyYW5zbGF0ZSAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcmIGlucHV0Q2hhcnMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcmIG91dHB1 dENoYXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAg ICBwYWRDaGFyYWN0ZXIgKQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS50cmFuc2xhdGUo IGlucHV0Q2hhcnMsIG91dHB1dENoYXJzLCBwYWRDaGFyYWN0ZXIgKTsKfQoKaW5saW5lIElTdHJp bmcgSVN0cmluZzo6dHJhbnNsYXRlICggY29uc3QgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyYgaW5wdXRDaGFycywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcE91dHB1dENo YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBw YWRDaGFyYWN0ZXIgKQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS50cmFuc2xhdGUoIGlu cHV0Q2hhcnMsIHBPdXRwdXRDaGFycywgcGFkQ2hhcmFjdGVyICk7Cn0KCmlubGluZSBJU3RyaW5n IElTdHJpbmc6OnRyYW5zbGF0ZSAoIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKnBJbnB1dENoYXJzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nJiBvdXRwdXRDaGFy cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGFk Q2hhcmFjdGVyICkKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykudHJhbnNsYXRlKCBwSW5w dXRDaGFycywgb3V0cHV0Q2hhcnMsIHBhZENoYXJhY3RlciApOwp9CgppbmxpbmUgSVN0cmluZyBJ U3RyaW5nOjp0cmFuc2xhdGUgKCBjb25zdCBJU3RyaW5nJiBhU3RyaW5nLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpwSW5wdXRDaGFycywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqcE91dHB1dENoYXJz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICBwYWRD aGFyYWN0ZXIgKQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS50cmFuc2xhdGUoIHBJbnB1 dENoYXJzLCBwT3V0cHV0Q2hhcnMsIHBhZENoYXJhY3RlciApOwp9CgogCmlubGluZSBJU3RyaW5n JiAgSVN0cmluZzo6cmVtb3ZlV29yZHMgKCB1Y291bnRfdCBmaXJzdFdvcmQgKQp7CiAgICByZXR1 cm4gdGhpcy0+cmVtb3ZlV29yZHMoIGZpcnN0V29yZCwga0FsbENoYW5nZXMgKTsKfQoKaW5saW5l IElTdHJpbmcgSVN0cmluZzo6cmVtb3ZlV29yZHMoY29uc3QgSVN0cmluZyYgYVN0cmluZywgdWNv dW50X3QgZmlyc3RXb3JkKQp7CiAgICByZXR1cm4gSVN0cmluZyhhU3RyaW5nKS5yZW1vdmVXb3Jk cyggZmlyc3RXb3JkICk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnJlbW92ZVdvcmRzKGNv bnN0ICAgSVN0cmluZyYgYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWNvdW50X3QgICAgICAgICBmaXJzdFdvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVjb3VudF90ICAgICAgICAgbnVtV29yZHMgKQp7CiAgICByZXR1cm4gSVN0cmlu ZyhhU3RyaW5nKS5yZW1vdmVXb3JkcyggZmlyc3RXb3JkLCBudW1Xb3JkcyApOwp9CgppbmxpbmUg SVN0cmluZzo6dW9mZnNldF90CklTdHJpbmc6OmluZGV4T2ZQaHJhc2UoY29uc3QgSVN0cmluZyYg YVBocmFzZSwgdWNvdW50X3Qgc3RhcnRXb3JkKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+Zmlu ZFBocmFzZSAoIGFQaHJhc2UsIHN0YXJ0V29yZCwgY2hhckluZGV4ICk7Cn0KCmlubGluZSBJU3Ry aW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6aW5kZXhPZldvcmQgKCB1Y291bnRfdCB3b3JkTnVtYmVy ICkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmluZGV4T2ZXb3JkKCB3b3JkTnVtYmVyLCAxLCAw ICk7Cn0KCmlubGluZSBJU3RyaW5nOjp1b2Zmc2V0X3QgSVN0cmluZzo6d29yZEluZGV4T2ZQaHJh c2UoIGNvbnN0IElTdHJpbmcmIGFQaHJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVjb3VudF90ICAgICAgc3RhcnRXb3JkICkgY29uc3QK ewogICAgcmV0dXJuIHRoaXMtPmZpbmRQaHJhc2UoIGFQaHJhc2UsIHN0YXJ0V29yZCwgd29yZElu ZGV4ICk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OnNwYWNlICggY29uc3QgSVN0cmluZyYg YVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y291bnRfdCAgICAgICBu dW1TcGFjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAg c3BhY2VDaGFyICkKewogICAgcmV0dXJuIElTdHJpbmcoYVN0cmluZykuc3BhY2UoIG51bVNwYWNl cywgc3BhY2VDaGFyICk7Cn0KCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OndvcmRzICggdWNvdW50 X3QgZmlyc3RXb3JkICkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPndvcmRzKCBmaXJzdFdvcmQs IGtBbGxDaGFuZ2VzICk7Cn0KCmlubGluZSB2b2lkIElTdHJpbmc6Om9wZXJhdG9yPj49KElEYXRh U3RyZWFtJiB0b1doZXJlKQp7CiAgICB3cml0ZVRvU3RyZWFtKHRvV2hlcmUpOwp9CgppbmxpbmUg dm9pZCBJU3RyaW5nOjpvcGVyYXRvcjw8PShJRGF0YVN0cmVhbSYgZnJvbVdoZXJlKQp7CiAgICBy ZWFkRnJvbVN0cmVhbShmcm9tV2hlcmUpOwp9CgppbmxpbmUKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0 b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sIGNvbnN0IElTdHJpbmcmIGFTdHJpbmcpCgoKCnsK ICAgIHJldHVybiBhU3RyZWFtIDw8IGFTdHJpbmcuZGF0YSgpOwp9CgppbmxpbmUKCnN0ZDo6aXN0 cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mIGFTdHJlYW0sIElTdHJpbmcmIGFTdHJpbmcp CgoKCnsKICAgIGlmICggYVN0cmluZy5sZW5ndGgoKSA9PSAwICkKICAgICAgICBhU3RyaW5nID0g SVN0cmluZyggMCwgMTI4ICk7CgogICAgSVN0cmluZzo6dWxlbmd0aF90IGJ5dGVzID0gMDsKICAg IGNoYXIgYzsKCiAgICAgCiAgICBJU3RyaW5nOjp1bGVuZ3RoX3QgcGVla1Jlc3VsdDsKICAgIElT dHJpbmc6OnVsZW5ndGhfdCB3ID0gYVN0cmVhbS53aWR0aCgwKTsKCiAgICBpZiAoYVN0cmVhbS5m bGFncygpICYKCiAgICAgICAgc3RkOjppb3M6OnNraXB3cwoKCgogICAgICAgICkKICAgIHsKIAog ICAgICAgIGlmKDAgICkKICAgICAgICB7CiAgICAgICAgICAgIGFTdHJpbmcucmVtb3ZlKDEpOwog ICAgICAgICAgICByZXR1cm4gYVN0cmVhbTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7 CiAKICAgICAgICBpZigwICApCiAgICAgICAgewogICAgICAgICAgICBhU3RyaW5nLnJlbW92ZSgx KTsKICAgICAgICAgICAgcmV0dXJuIGFTdHJlYW07CiAgICAgICAgfQogICAgfQoKICAgIGlmICh3 ID4gMCkKICAgIHsKICAgICAgICBmb3IgKHBlZWtSZXN1bHQgPSBhU3RyZWFtLnBlZWsoKTsKICAg ICAgICAgICAgISAoX19jdHlwZV9iWyhpbnQpICggKCBwZWVrUmVzdWx0ICkgKV0gJiAodW5zaWdu ZWQgc2hvcnQgaW50KSAgIF9JU3NwYWNlICkgICAmJiBwZWVrUmVzdWx0ICE9ICgtMSkgICAmJiAt LXcgPiAwOwogICAgICAgICAgICBwZWVrUmVzdWx0ID0gYVN0cmVhbS5wZWVrKCkpCiAgICAgICAg ewogICAgICAgICAgICBhU3RyZWFtLmdldChjKTsKICAgICAgICAgICAgaWYgKGJ5dGVzID09IGFT dHJpbmcubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICBhU3RyaW5nICs9IElTdHJpbmcoIDAsIGJ5 dGVzICk7CiAgICAgICAgICAgIGFTdHJpbmdbKytieXRlc10gPSBjOwogICAgICAgIH0KICAgIH0K ICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IgKHBlZWtSZXN1bHQgPSBhU3RyZWFtLnBlZWsoKTsK ICAgICAgICAgICAgICEgKF9fY3R5cGVfYlsoaW50KSAoICggcGVla1Jlc3VsdCApICldICYgKHVu c2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICAgJiYgcGVla1Jlc3VsdCAhPSAoLTEpIDsK ICAgICAgICAgICAgIHBlZWtSZXN1bHQgPSBhU3RyZWFtLnBlZWsoKSkKICAgICAgICB7CiAgICAg ICAgICAgIGFTdHJlYW0uZ2V0KGMpOwogICAgICAgICAgICBpZiAoYnl0ZXMgPT0gYVN0cmluZy5s ZW5ndGgoKSkKICAgICAgICAgICAgICAgIGFTdHJpbmcgKz0gSVN0cmluZyggMCwgYnl0ZXMgKTsK ICAgICAgICAgICAgICAgIGFTdHJpbmdbKytieXRlc10gPSBjOwogICAgICAgIH0KICAgIH0KCiAg ICAgCiAgICBhU3RyaW5nLnJlbW92ZShieXRlcysxKTsKCiAgICByZXR1cm4gYVN0cmVhbTsKfQoK aW5saW5lCgpJU3RyaW5nIElTdHJpbmc6OmxpbmVGcm9tKHN0ZDo6aXN0cmVhbSYgYVN0cmVhbSwg Y2hhciBkZWxpbSkKCgoKewogICAgSVN0cmluZyByZXN1bHQoMCwgMTI4KTsKCiAgICBJU3RyaW5n Ojp1bGVuZ3RoX3QgICAgYnl0ZXMgPSAwOwogICAgY2hhciAgICAgICAgYzsKCiAgICBmb3IoIGFT dHJlYW0uZ2V0KCBjICk7IGMgIT0gZGVsaW0gJiYgIWFTdHJlYW0uZmFpbCgpOyBhU3RyZWFtLmdl dChjKSApCiAgICB7CiAgICAgICAgaWYgKCBieXRlcyA9PSByZXN1bHQubGVuZ3RoKCkgKQogICAg ICAgICAgICByZXN1bHQgKz0gSVN0cmluZyggMCwgYnl0ZXMgKTsKICAgICAgICByZXN1bHRbKyti eXRlc10gPSBjOwogICAgfQoKICAgICAKICAgIHJlc3VsdC5yZW1vdmUoIGJ5dGVzKzEgKTsKICAg IHJldHVybiByZXN1bHQ7Cn0KCiAKCiMgOTQwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJpbmcuaHBwIiAyCgogCgogCiNwcmFnbWEgaW5mbyhu b25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgojIDMy ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRl LmhwcCIgMgoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBf X0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKI3By YWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21h IGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIAoKIAoKCgoKCgpjbGFzcyBJRGF0ZTsKY2xhc3MgSVRl eHQ7CgoKaW5saW5lIHN0ZDo6b3N0cmVhbSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0 cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElE YXRlJiBhRGF0ZSk7CgoKCiAKCiAKc3RydWN0IElDbnJEYXRlCnsKICAgIHVuc2lnbmVkIGNoYXIg ZGF5OwogICAgdW5zaWduZWQgY2hhciBtb250aDsKICAgIHVuc2lnbmVkIHNob3J0IHllYXI7Cn07 CgpjbGFzcyAgIElEYXRlCnsKcHVibGljOgogICAgIAogICAgdHlwZWRlZiBlbnVtCiAgICB7CiAg ICAgICAgTW9uZGF5ID0gMCwKICAgICAgICBUdWVzZGF5LAogICAgICAgIFdlZG5lc2RheSwKICAg ICAgICBUaHVyc2RheSwKICAgICAgICBGcmlkYXksCiAgICAgICAgU2F0dXJkYXksCiAgICAgICAg U3VuZGF5CiAgICB9IERheU9mV2VlazsKCiAgICB0eXBlZGVmIGVudW0KICAgIHsKICAgICAgICBK YW51YXJ5ID0gMSwKICAgICAgICBGZWJydWFyeSwKICAgICAgICBNYXJjaCwKICAgICAgICBBcHJp bCwKICAgICAgICBNYXksCiAgICAgICAgSnVuZSwKICAgICAgICBKdWx5LAogICAgICAgIEF1Z3Vz dCwKICAgICAgICBTZXB0ZW1iZXIsCiAgICAgICAgT2N0b2JlciwKICAgICAgICBOb3ZlbWJlciwK ICAgICAgICBEZWNlbWJlcgogICAgfSBNb250aDsKCiAgICB0eXBlZGVmIGVudW0KICAgIHsKICAg ICAgICB5eSwKICAgICAgICB5eXl5CiAgICB9IFllYXJGb3JtYXQ7CgogICAgIAogICAgSURhdGUo ICk7CgogICAgSURhdGUoTW9udGggYU1vbnRoLCBpbnQgYURheSwgaW50IGFZZWFyKTsKCiAgICBJ RGF0ZShpbnQgYURheSwgTW9udGggYU1vbnRoLCBpbnQgYVllYXIpOwoKICAgIElEYXRlKGludCBh WWVhciwgaW50IGFEYXkpOwoKICAgIElEYXRlKGNvbnN0IElEYXRlJiBhRGF0ZSk7CgogICAgSURh dGUoaW9jOjp1bnVtZXJpY190IGp1bGlhbkRheU51bWJlcik7CgogICAgSURhdGUoY29uc3QgSUNu ckRhdGUmIGNuckRhdGUpOwoKICAgICAKICAgIHN0YXRpYyBJRGF0ZSB0b2RheSgpOwoKICAgICAK ICAgIElTdHJpbmcgYXNTdHJpbmcoWWVhckZvcm1hdCB5ZWFyRm10ID0geXkpIGNvbnN0OwogICAg SVN0cmluZyBhc1N0cmluZyhjb25zdCBjaGFyICpmbXQpIGNvbnN0OwoKICAgIElUZXh0IGFzVGV4 dChZZWFyRm9ybWF0IHllYXJGbXQgPSB5eXl5KSBjb25zdDsKICAgIElUZXh0IGFzVGV4dChjb25z dCBpb2M6OnVuaWNoYXJfdCAqZm10KSBjb25zdDsKCgogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYg ICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJRGF0ZSYgYURhdGUpOwoKCgoKICAgICAK ICAgIERheU9mV2VlayBkYXlPZldlZWsoKSBjb25zdDsKCiAgICBJU3RyaW5nIGRheU5hbWUoKSBj b25zdDsKICAgIElUZXh0IGRheU5hbWVXKCkgY29uc3Q7CgogICAgaW50IGRheU9mTW9udGgoKSBj b25zdDsKICAgIGludCBkYXlPZlllYXIoKSBjb25zdDsKCiAgICAgCiAgICBNb250aCBtb250aE9m WWVhcigpIGNvbnN0OwoKICAgIElTdHJpbmcgbW9udGhOYW1lKCkgY29uc3Q7CiAgICBJVGV4dCBt b250aE5hbWVXKCkgY29uc3Q7CgogICAgIAogICAgaW50IHllYXIoKSBjb25zdDsKCiAgICAgCiAg ICBpb2M6OnVudW1lcmljX3QganVsaWFuRGF0ZSgpIGNvbnN0OwoKICAgIElDbnJEYXRlIGFzSUNu ckRhdGUoKSBjb25zdDsKCiAgICAgCiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURhdGUmIGFE YXRlKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJRGF0ZSYgYURhdGUpIGNvbnN0 OwogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSURhdGUmIGFEYXRlKSBjb25zdDsKICAgIGJvb2wg b3BlcmF0b3I8PShjb25zdCBJRGF0ZSYgYURhdGUpIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj4o Y29uc3QgSURhdGUmIGFEYXRlKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBJRGF0 ZSYgYURhdGUpIGNvbnN0OwoKICAgICAKICAgIElEYXRlIG9wZXJhdG9yKyhpbnQgbnVtRGF5cykg Y29uc3Q7CiAgICBJRGF0ZSBvcGVyYXRvci0oaW50IG51bURheXMpIGNvbnN0OwoKICAgIElEYXRl JiBvcGVyYXRvcis9KGludCBudW1EYXlzKTsKICAgIElEYXRlJiBvcGVyYXRvci09KGludCBudW1E YXlzKTsKCiAgICBpb2M6Om51bWVyaWNfdCBvcGVyYXRvci0oY29uc3QgSURhdGUmIGFEYXRlKSBj b25zdDsKCiAgICAgCiAgICBzdGF0aWMgSVN0cmluZyBkYXlOYW1lKERheU9mV2VlayBhRGF5KTsK ICAgIHN0YXRpYyBJU3RyaW5nIG1vbnRoTmFtZShNb250aCBhTW9udGgpOwogICAgc3RhdGljIElU ZXh0IGRheU5hbWVXKERheU9mV2VlayBhRGF5KTsKICAgIHN0YXRpYyBJVGV4dCBtb250aE5hbWVX KE1vbnRoIGFNb250aCk7CgogICAgc3RhdGljIGludCBkYXlzSW5Nb250aChNb250aCBhTW9udGgs IGludCBhWWVhcik7CiAgICBzdGF0aWMgaW50IGRheXNJblllYXIoaW50IGFZZWFyKTsKCiAgICAg CiAgICBzdGF0aWMgYm9vbCBpc0xlYXBZZWFyKGludCBhWWVhcik7CiAgICBzdGF0aWMgYm9vbCBp c1ZhbGlkKE1vbnRoIGFNb250aCwgaW50IGFEYXksIGludCBhWWVhcik7CiAgICBzdGF0aWMgYm9v bCBpc1ZhbGlkKGludCBhRGF5LCBNb250aCBhTW9udGgsIGludCBhWWVhcik7CiAgICBzdGF0aWMg Ym9vbCBpc1ZhbGlkKGludCBhWWVhciwgaW50IGFEYXkpOwoKICAgICAKICAgIHZvaWQgb3BlcmF0 b3I+Pj0oSURhdGFTdHJlYW0gJnRvV2hlcmUpOwogICAgdm9pZCBvcGVyYXRvcjw8PShJRGF0YVN0 cmVhbSAmZnJvbVdoZXJlKTsKCgoKCgoKCgpwcm90ZWN0ZWQ6CiAgICAgCiAgICBJRGF0ZSYgaW5p dGlhbGl6ZShNb250aCBhTW9udGgsIGludCBhRGF5LCBpbnQgYVllYXIpOwoKICAgICAKICAgIHZv aWQgd3JpdGVUb1N0cmVhbShJRGF0YVN0cmVhbSAmdG9XaGVyZSkgY29uc3Q7CiAgICB2b2lkIHJl YWRGcm9tU3RyZWFtKElEYXRhU3RyZWFtICZmcm9tV2hlcmUpOwoKcHJpdmF0ZToKICAgICAKICAg IElUZXh0IGFzVGV4dFVuaUNoYXIoY29uc3QgVW5pQ2hhciAqZm10KSBjb25zdDsKICAgIGlvYzo6 dW51bWVyaWNfdCBqdWxpYW47Cn07CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNw cmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lkYXRlLmlubCIgMQoKCgogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIApleHRlcm4gIkMiCnsKCn0K IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0 ZXh0LmhwcCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCgojIDEgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXR4dHN0eWwuaHBw IiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgogCgogCiNw cmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9S VF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGlu ZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoK IAoKIAogCgogCmNsYXNzIElUZXh0U3R5bGVTZXQ7CiAKCiAKCiAKIAogCiAKY2xhc3MgSVRleHRT dHlsZSB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgZW51bSBFU3R5bGVQcm9wYWdh dGlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGtQcm9wYWdhdGVCeUNoYXJhY3RlciwKICAg ICAgICAgICAgICAgICAgICAgICAga1Byb3BhZ2F0ZUJ5UGFyYWdyYXBoLAogICAgICAgICAgICAg ICAgICAgICAgICBrTWF4aW11bVByb3BhZ2F0aW9uID0gMTI3CiAgICAgICAgICAgICAgICB9OwoK ICAgICAgICAgICAgICAgIHZpcnR1YWwgfklUZXh0U3R5bGUoKTsKCiAgICAgICAgICAgICAgICB2 aXJ0dWFsIEVTdHlsZVByb3BhZ2F0aW9uIHByb3BhZ2F0ZXMoKSBjb25zdCA9IDA7CgogICAgICAg IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgIElUZXh0U3R5bGUoKTsKICAgICAgICAgICAgICAg IElUZXh0U3R5bGUoIGNvbnN0IElUZXh0U3R5bGUmICk7CgogICAgICAgICAgICAgICAgSVRleHRT dHlsZSYgIG9wZXJhdG9yPSggY29uc3QgSVRleHRTdHlsZSYgKTsKCiAgICAgICAgICAgICAgICB2 aXJ0dWFsIHZvaWQgYWRkVG9TZXQoSVRleHRTdHlsZVNldCYgc2V0KSBjb25zdCA9IDA7CiAgICAg ICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVNldChJVGV4dFN0eWxlU2V0JiAgICBz ZXQpIGNvbnN0ID0gMDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRWYWx1ZUZyb21T ZXQoY29uc3QgSVRleHRTdHlsZVNldCYgICAgc2V0KSA9IDA7CiAgICAgICAgICAgICAgICB2aXJ0 dWFsIGJvb2wgaXNDb250YWluZWRJblNldChjb25zdCBJVGV4dFN0eWxlU2V0JiAgIHNldCkgY29u c3QgPSAwOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsdWVDb250YWluZWRJblNl dChjb25zdCBJVGV4dFN0eWxlU2V0JiAgICAgIHNldCkgY29uc3QgPSAwOwoKICAgICAgICBwcml2 YXRlOgogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIElUZXh0U3R5bGVTZXQ7Cn07CgogCiAK IAogCmNsYXNzIElDaGFyYWN0ZXJTdHlsZSA6IHB1YmxpYyBJVGV4dFN0eWxlIHsKICAgICAgICBw dWJsaWM6CiAgICAgICAgICAgICAgICB2aXJ0dWFsIH5JQ2hhcmFjdGVyU3R5bGUoKTsKCiAgICAg ICAgICAgICAgICB2aXJ0dWFsIElUZXh0U3R5bGU6OkVTdHlsZVByb3BhZ2F0aW9uCiAgICAgICAg ICAgICAgICBwcm9wYWdhdGVzKCkgY29uc3Q7CgogICAgICAgIHByb3RlY3RlZDoKICAgICAgICAg ICAgICAgIElDaGFyYWN0ZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgSUNoYXJhY3RlclN0eWxl KCBjb25zdCBJQ2hhcmFjdGVyU3R5bGUmICk7CgogICAgICAgICAgICAgICAgSUNoYXJhY3RlclN0 eWxlJiBvcGVyYXRvcj0oIGNvbnN0IElDaGFyYWN0ZXJTdHlsZSYgKTsKfTsKCiAKIAogCiAKY2xh c3MgSVBhcmFncmFwaFN0eWxlIDogcHVibGljIElUZXh0U3R5bGUgewogICAgICAgIHB1YmxpYzoK ICAgICAgICAgICAgICAgIHZpcnR1YWwgfklQYXJhZ3JhcGhTdHlsZSgpOwoKICAgICAgICAgICAg ICAgIHZpcnR1YWwgSVRleHRTdHlsZTo6RVN0eWxlUHJvcGFnYXRpb24KICAgICAgICAgICAgICAg IHByb3BhZ2F0ZXMoKSBjb25zdDsKCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg SVBhcmFncmFwaFN0eWxlKCk7CiAgICAgICAgICAgICAgICBJUGFyYWdyYXBoU3R5bGUoIGNvbnN0 IElQYXJhZ3JhcGhTdHlsZSYgKTsKCiAgICAgICAgICAgICAgICBJUGFyYWdyYXBoU3R5bGUmIG9w ZXJhdG9yPSggY29uc3QgSVBhcmFncmFwaFN0eWxlJiApOwp9OwoKIAoKIAoKCgoKCgoKI3ByYWdt YSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUp CiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaXRleHQuaHBwIiAyCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2Ut bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxp Yi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzIgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXRleHQuaHBwIiAy CgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aXN0cmVhbS5ocHAiIDEKIyA1NiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pc3RyZWFtLmhwcCIKCgoKCgojIDMzICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0ZXh0LmhwcCIgMgoKCgogCgogCiNwcmFn bWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9M RVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9f SU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgog CiAKCiAKY2xhc3MgSUJ1ZmZlcjsKY2xhc3MgSVN0cmluZzsKY2xhc3MgSVRleHRTdG9yYWdlOwpj bGFzcyBJRGF0YVN0cmVhbTsKY2xhc3MgSVRleHRTdHlsZVNldDsKCmNsYXNzIElDaGFyYWN0ZXJS ZWZlcmVuY2U7CmNsYXNzIElUZXh0SXRlcmF0b3I7CmNsYXNzIElDb25zdFRleHRJdGVyYXRvcjsK CnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4gY2xhc3Mg SVJldmVyc2VJdGVyYXRvcjsKdHlwZWRlZiBJUmV2ZXJzZUl0ZXJhdG9yPElUZXh0SXRlcmF0b3Is IElDaGFyYWN0ZXJSZWZlcmVuY2U+CklSZXZlcnNlVGV4dEl0ZXJhdG9yOwp0eXBlZGVmIElSZXZl cnNlSXRlcmF0b3I8SUNvbnN0VGV4dEl0ZXJhdG9yLCBpb2M6OnVuaWNoYXJfdD4KSVJldmVyc2VD b25zdFRleHRJdGVyYXRvcjsKIAoKIAoKIAogCiAKIApjbGFzcyBJVGV4dCB7CnB1YmxpYzoKICAg ICAKICAgICAKICAgICAKICAgIHR5cGVkZWYgc2l6ZV90IGxlbmd0aF90eXBlOyAgCiAgICB0eXBl ZGVmIHNpemVfdCBvZmZzZXRfdHlwZTsgIAogICAgc3RhdGljIGNvbnN0IGxlbmd0aF90eXBlICAg bnBvczsKCiAgICAgCiAgICAgCiAgICAgCiAgICBzdGF0aWMgY29uc3QgSVRleHQmIGVtcHR5VGV4 dCgpOwoKICAgICAKICAgICAKICAgICAKCiAgICBJVGV4dCgpOwogICAgSVRleHQoY29uc3QgSVRl eHQmIHRoYXQpOwogICAgSVRleHQoY29uc3QgSVRleHQmIHRoYXQsIG9mZnNldF90eXBlIHRoYXRQ b3MsIGxlbmd0aF90eXBlIHRoYXRMZW5ndGgpOwogICAgSVRleHQoY29uc3QgaW9jOjp1bmljaGFy X3QgdGhhdFtdLCBsZW5ndGhfdHlwZSB0aGF0TGVuZ3RoKTsKICAgIElUZXh0KGNvbnN0IGlvYzo6 dW5pY2hhcl90KiB0aGF0KTsKICAgIElUZXh0KGxlbmd0aF90eXBlIHRoYXRDb3BpZXMsIGlvYzo6 dW5pY2hhcl90IHRoYXQpOwogICAgSVRleHQoSVRleHRJdGVyYXRvciB0aGF0RnJvbSwgSVRleHRJ dGVyYXRvciB0aGF0VG8pOwogICAgSVRleHQoaW9jOjp1bmljaGFyX3QgdGhhdCk7ICAKICAgIElU ZXh0KGNvbnN0IGNoYXIqIHRoYXQsIGNvbnN0IGNoYXIgKmNvZGVzZXQgPSAwKTsgIAogICAgSVRl eHQoY29uc3QgSVN0cmluZyYgdGhhdCwgY29uc3QgY2hhciAqY29kZXNldCA9IDApOyAgCgogICAg fklUZXh0KCk7CgogICAgIAogICAgIAogICAgIAoKICAgIElUZXh0JiBvcGVyYXRvcj0oY29uc3Qg SVRleHQmIHRoYXQpOwogICAgSVRleHQmIG9wZXJhdG9yPShjb25zdCBpb2M6OnVuaWNoYXJfdCog dGhhdCk7CiAgICBJVGV4dCYgb3BlcmF0b3I9KGlvYzo6dW5pY2hhcl90IHRoYXQpOwoKICAgIElU ZXh0JiBhc3NpZ24oY29uc3QgSVRleHQmIHRoYXQpOwogICAgSVRleHQmIGFzc2lnbihjb25zdCBJ VGV4dCYgdGhhdCwgb2Zmc2V0X3R5cGUgdGhhdFBvcywKICAgICAgICAgICAgICAgICAgbGVuZ3Ro X3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgYXNzaWduKGNvbnN0IGlvYzo6dW5pY2hhcl90 IHRoYXRbXSwgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgYXNzaWduKGNvbnN0 IGlvYzo6dW5pY2hhcl90KiB0aGF0KTsKICAgIElUZXh0JiBhc3NpZ24obGVuZ3RoX3R5cGUgdGhh dENvcGllcywgaW9jOjp1bmljaGFyX3QgdGhhdCk7CiAgICBJVGV4dCYgYXNzaWduKElUZXh0SXRl cmF0b3IgdGhhdEZyb20sIElUZXh0SXRlcmF0b3IgdGhhdFRvKTsKCiAgICAgCiAgICAgCiAgICAg CgogICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsgIAogICAgIAogICAgb3BlcmF0b3Ig Y29uc3QgaW9jOjp1bmljaGFyX3QqKCkgY29uc3Q7ICAKCiAgICAgCiAgICAgCiAgICAgCgogICAg dm9pZCBvcGVyYXRvcj4+PShJRGF0YVN0cmVhbSYgdG9XaGVyZSkgY29uc3Q7ICAKICAgIHZvaWQg b3BlcmF0b3I8PD0oSURhdGFTdHJlYW0mIGZyb21XaGVyZSk7ICAKCiAgICAgCiAgICAgCiAgICAg CgogICAgbGVuZ3RoX3R5cGUgc2l6ZSgpIGNvbnN0OwogICAgbGVuZ3RoX3R5cGUgbGVuZ3RoKCkg Y29uc3Q7CiAgICBsZW5ndGhfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0OwogICAgdm9pZCByZXNpemUo bGVuZ3RoX3R5cGUgbnVtQ2hhcnMsIGlvYzo6dW5pY2hhcl90IGZpbGxDaGFyKTsKICAgIHZvaWQg cmVzaXplKGxlbmd0aF90eXBlIG51bUNoYXJzKTsKICAgIGxlbmd0aF90eXBlIGNhcGFjaXR5KCkg Y29uc3Q7CiAgICB2b2lkIHJlc2VydmUobGVuZ3RoX3R5cGUgbnVtQ2hhcnMpOwogICAgYm9vbCBl bXB0eSgpIGNvbnN0OwoKICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBjX3N0cigpIGNvbnN0Owog ICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIGRhdGEoKSBjb25zdDsKICAgIGNvbnN0IGlvYzo6dW5p Y2hhcl90KiBzdG9yYWdlX2NodW5rKG9mZnNldF90eXBlIHNlYXJjaFBvcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlJiBjaHVua1BvcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlJiBjaHVua0xlbmd0aCkgY29uc3Q7ICAK CiAgICAgCiAgICAgCiAgICAgCgogICAgSVRleHRJdGVyYXRvciBiZWdpbigpOwogICAgSUNvbnN0 VGV4dEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CiAgICBJVGV4dEl0ZXJhdG9yIGVuZCgpOwogICAg SUNvbnN0VGV4dEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwogICAgSVJldmVyc2VUZXh0SXRlcmF0b3Ig cmJlZ2luKCk7CiAgICBJUmV2ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yIHJiZWdpbigpIGNvbnN0Owog ICAgSVJldmVyc2VUZXh0SXRlcmF0b3IgcmVuZCgpOwogICAgSVJldmVyc2VDb25zdFRleHRJdGVy YXRvciByZW5kKCkgY29uc3Q7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgIGlvYzo6dW5pY2hh cl90IG9wZXJhdG9yW10ob2Zmc2V0X3R5cGUgcG9zKSBjb25zdDsKICAgIElDaGFyYWN0ZXJSZWZl cmVuY2Ugb3BlcmF0b3JbXShvZmZzZXRfdHlwZSBwb3MpOwoKICAgIGlvYzo6dW5pY2hhcl90IGF0 KG9mZnNldF90eXBlIHBvcykgY29uc3Q7CiAgICBJQ2hhcmFjdGVyUmVmZXJlbmNlIGF0KG9mZnNl dF90eXBlIHBvcyk7CgoKCgoKICAgIHZvaWQgYXRfcHV0KG9mZnNldF90eXBlIHBvcywgaW9jOjp1 bmljaGFyX3QgbmV3Q2hhcik7ICAKCiAgICAgCiAgICAgCiAgICAgCgogICAgSVRleHQgc3Vic3Ry KG9mZnNldF90eXBlIHBvcyA9IDAsCiAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgbGVuZ3Ro ID0gbnBvcykgY29uc3Q7CgogICAgIAogICAgIAogICAgIAoKICAgIElUZXh0JiBvcGVyYXRvcis9 KGNvbnN0IElUZXh0JiB0aGF0KTsKICAgIElUZXh0JiBvcGVyYXRvcis9KGNvbnN0IGlvYzo6dW5p Y2hhcl90KiB0aGF0KTsKICAgIElUZXh0JiBvcGVyYXRvcis9KGlvYzo6dW5pY2hhcl90IHRoYXQp OwoKICAgIElUZXh0JiBhcHBlbmQoY29uc3QgSVRleHQmIHRoYXQpOwogICAgSVRleHQmIGFwcGVu ZChjb25zdCBJVGV4dCYgdGhhdCwgb2Zmc2V0X3R5cGUgdGhhdFBvcywKICAgICAgICAgICAgICAg ICAgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgYXBwZW5kKGNvbnN0IGlvYzo6 dW5pY2hhcl90IHRoYXRbXSwgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgYXBw ZW5kKGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0aGF0KTsKICAgIElUZXh0JiBhcHBlbmQobGVuZ3Ro X3R5cGUgdGhhdENvcGllcywgaW9jOjp1bmljaGFyX3QgdGhhdCk7CiAgICBJVGV4dCYgYXBwZW5k KElUZXh0SXRlcmF0b3IgdGhhdEZyb20sIElUZXh0SXRlcmF0b3IgdGhhdFRvKTsKCiAgICAgCiAg ICAgCiAgICAgCgogICAgSVRleHQmIGluc2VydChvZmZzZXRfdHlwZSBpbnNlcnRQb3MsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IElUZXh0JiB0aGF0KTsKICAgIElUZXh0JiBpbnNlcnQob2Zmc2V0 X3R5cGUgaW5zZXJ0UG9zLAogICAgICAgICAgICAgICAgICBjb25zdCBJVGV4dCYgdGhhdCwKICAg ICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgdGhhdFBvcywKICAgICAgICAgICAgICAgICAgbGVu Z3RoX3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgaW5zZXJ0KG9mZnNldF90eXBlIGluc2Vy dFBvcywKICAgICAgICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QgdGhhdFtdLAogICAg ICAgICAgICAgICAgICBsZW5ndGhfdHlwZSB0aGF0TGVuZ3RoKTsKICAgIElUZXh0JiBpbnNlcnQo b2Zmc2V0X3R5cGUgaW5zZXJ0UG9zLAogICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNo YXJfdCogdGhhdCk7CiAgICBJVGV4dCYgaW5zZXJ0KG9mZnNldF90eXBlIGluc2VydFBvcywKICAg ICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgdGhhdENvcGllcywKICAgICAgICAgICAgICAgICAg aW9jOjp1bmljaGFyX3QgdGhhdCk7CiAgICBJVGV4dEl0ZXJhdG9yIGluc2VydChJVGV4dEl0ZXJh dG9yIGluc2VydFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90IHRo YXQpOwogICAgdm9pZCBpbnNlcnQoSVRleHRJdGVyYXRvciBpbnNlcnRQb3MsCiAgICAgICAgICAg ICAgICBsZW5ndGhfdHlwZSB0aGF0Q29waWVzLAogICAgICAgICAgICAgICAgaW9jOjp1bmljaGFy X3QgdGhhdCk7CiAgICB2b2lkIGluc2VydChJVGV4dEl0ZXJhdG9yIGluc2VydFBvcywKICAgICAg ICAgICAgICAgIElUZXh0SXRlcmF0b3IgdGhhdEZyb20sCiAgICAgICAgICAgICAgICBJVGV4dEl0 ZXJhdG9yIHRoYXRUbyk7CgogICAgSVRleHQmIGluc2VydF9hbmRfcHJvcGFnYXRlX3N0eWxlcyhv ZmZzZXRfdHlwZSBpbnNlcnRQb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90IHRoYXRbXSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCk7CiAgICBJVGV4dCYgaW5zZXJ0 X2FuZF9wcm9wYWdhdGVfc3R5bGVzKG9mZnNldF90eXBlIGluc2VydFBvcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgdGhhdENvcGllcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jOjp1bmljaGFyX3QgdGhhdCk7Cgog ICAgIAogICAgIAogICAgIAoKICAgIElUZXh0JiBlcmFzZShvZmZzZXRfdHlwZSBwb3MgPSAwLCBs ZW5ndGhfdHlwZSBudW1DaGFycyA9IG5wb3MpOwogICAgSVRleHRJdGVyYXRvciBlcmFzZShJVGV4 dEl0ZXJhdG9yIHBvcyk7CiAgICBJVGV4dEl0ZXJhdG9yIGVyYXNlKElUZXh0SXRlcmF0b3IgZnJv bSwgSVRleHRJdGVyYXRvciB0byk7CgogICAgIAogICAgIAogICAgIAoKICAgIElUZXh0JiByZXBs YWNlKG9mZnNldF90eXBlIHRoaXNQb3MsIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBJVGV4dCYgdGhhdCk7CiAgICBJVGV4dCYgcmVwbGFjZShvZmZzZXRf dHlwZSB0aGlzUG9zLCBsZW5ndGhfdHlwZSB0aGlzTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg Y29uc3QgSVRleHQmIHRoYXQsCiAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSB0aGF0UG9z LCBsZW5ndGhfdHlwZSB0aGF0TGVuZ3RoKTsKICAgIElUZXh0JiByZXBsYWNlKG9mZnNldF90eXBl IHRoaXNQb3MsIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAgICAgICAgICAgICAgICAgICBjb25z dCBpb2M6OnVuaWNoYXJfdCB0aGF0W10sIGxlbmd0aF90eXBlIHRoYXRMZW5ndGgpOwogICAgSVRl eHQmIHJlcGxhY2Uob2Zmc2V0X3R5cGUgdGhpc1BvcywgbGVuZ3RoX3R5cGUgdGhpc0xlbmd0aCwK ICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0aGF0KTsKICAgIElUZXh0 JiByZXBsYWNlKG9mZnNldF90eXBlIHRoaXNQb3MsIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAg ICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSB0aGF0Q29waWVzLCBpb2M6OnVuaWNoYXJfdCB0 aGF0KTsKICAgIElUZXh0JiByZXBsYWNlKElUZXh0SXRlcmF0b3IgdGhpc0Zyb20sIElUZXh0SXRl cmF0b3IgdGhpc1RvLAogICAgICAgICAgICAgICAgICAgY29uc3QgSVRleHQmIHRoYXQpOwogICAg SVRleHQmIHJlcGxhY2UoSVRleHRJdGVyYXRvciB0aGlzRnJvbSwgSVRleHRJdGVyYXRvciB0aGlz VG8sCiAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCB0aGF0W10sIGxlbmd0 aF90eXBlIHRoYXRMZW5ndGgpOwogICAgSVRleHQmIHJlcGxhY2UoSVRleHRJdGVyYXRvciB0aGlz RnJvbSwgSVRleHRJdGVyYXRvciB0aGlzVG8sCiAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6 OnVuaWNoYXJfdCogdGhhdCk7CiAgICBJVGV4dCYgcmVwbGFjZShJVGV4dEl0ZXJhdG9yIHRoaXNG cm9tLCBJVGV4dEl0ZXJhdG9yIHRoaXNUbywKICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBl IHRoYXRDb3BpZXMsIGlvYzo6dW5pY2hhcl90IHRoYXQpOwogICAgSVRleHQmIHJlcGxhY2UoSVRl eHRJdGVyYXRvciB0aGlzRnJvbSwgSVRleHRJdGVyYXRvciB0aGlzVG8sCiAgICAgICAgICAgICAg ICAgICBJVGV4dEl0ZXJhdG9yIHRoYXRGcm9tLCBJVGV4dEl0ZXJhdG9yIHRoYXRUbyk7CgogICAg IAogICAgIAogICAgIAoKICAgIGludCBjb21wYXJlKGNvbnN0IElUZXh0JiB0aGF0KSBjb25zdDsK ICAgIGludCBjb21wYXJlKG9mZnNldF90eXBlIHRoaXNQb3MsIGxlbmd0aF90eXBlIHRoaXNMZW5n dGgsCiAgICAgICAgICAgICAgICBjb25zdCBJVGV4dCYgdGhhdCkgY29uc3Q7CiAgICBpbnQgY29t cGFyZShvZmZzZXRfdHlwZSB0aGlzUG9zLCBsZW5ndGhfdHlwZSB0aGlzTGVuZ3RoLAogICAgICAg ICAgICAgICAgY29uc3QgSVRleHQmIHRoYXQsIG9mZnNldF90eXBlIHRoYXRQb3MsCiAgICAgICAg ICAgICAgICBsZW5ndGhfdHlwZSB0aGF0TGVuZ3RoKSBjb25zdDsKICAgIGludCBjb21wYXJlKGNv bnN0IGlvYzo6dW5pY2hhcl90KiB0aGF0KSBjb25zdDsKICAgIGludCBjb21wYXJlKG9mZnNldF90 eXBlIHRoaXNQb3MsIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAgICAgICAgICAgICAgICBjb25z dCBpb2M6OnVuaWNoYXJfdCB0aGF0W10sIGxlbmd0aF90eXBlIHRoYXRMZW5ndGgpIGNvbnN0OwoK ICAgIGxvbmcgaGFzaCgpIGNvbnN0OyAgCgogICAgIAogICAgIAogICAgIAoKICAgIGxlbmd0aF90 eXBlIGNvcHkoaW9jOjp1bmljaGFyX3QgdGhhdFtdLCBsZW5ndGhfdHlwZSBtYXhDaGFycywKICAg ICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSAwKSBjb25zdDsKCiAgICB2 b2lkIHN3YXAoSVRleHQmIHRoYXQpOwogICAgSVN0cmluZyBjb2RlU2V0KCkgY29uc3Q7CgogICAg IAogICAgIAogICAgIAoKICAgIG9mZnNldF90eXBlIGZpbmQoY29uc3QgSVRleHQmIGtleSwKICAg ICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSAwKSBjb25zdDsKICAgIG9m ZnNldF90eXBlIGZpbmQoY29uc3QgaW9jOjp1bmljaGFyX3Qga2V5W10sCiAgICAgICAgICAgICAg ICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICBsZW5ndGhf dHlwZSBrZXlMZW5ndGgpIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmluZChjb25zdCBpb2M6OnVu aWNoYXJfdCoga2V5LAogICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFydFBvcyA9 IDApIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmluZChpb2M6OnVuaWNoYXJfdCBrZXksCiAgICAg ICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zID0gMCkgY29uc3Q7CgogICAgb2Zm c2V0X3R5cGUgcmZpbmQoY29uc3QgSVRleHQmIGtleSwKICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldF90eXBlIHN0YXJ0UG9zID0gbnBvcykgY29uc3Q7CiAgICBvZmZzZXRfdHlwZSByZmluZChj b25zdCBpb2M6OnVuaWNoYXJfdCBrZXlbXSwKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90 eXBlIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUga2V5TGVuZ3Ro KSBjb25zdDsKICAgIG9mZnNldF90eXBlIHJmaW5kKGNvbnN0IGlvYzo6dW5pY2hhcl90KiBrZXks CiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFydFBvcyA9IG5wb3MpIGNvbnN0 OwogICAgb2Zmc2V0X3R5cGUgcmZpbmQoaW9jOjp1bmljaGFyX3Qga2V5LAogICAgICAgICAgICAg ICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSBucG9zKSBjb25zdDsKCiAgICBvZmZzZXRf dHlwZSBmaW5kX2ZpcnN0X29mKGNvbnN0IElUZXh0JiBrZXlzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFydFBvcyA9IDApIGNvbnN0OwogICAgb2Zmc2V0X3R5 cGUgZmluZF9maXJzdF9vZihjb25zdCBpb2M6OnVuaWNoYXJfdCBrZXlzW10sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBudW1LZXlzKSBjb25zdDsKICAgIG9mZnNldF90eXBl IGZpbmRfZmlyc3Rfb2YoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zID0gMCkgY29uc3Q7CiAgICBvZmZz ZXRfdHlwZSBmaW5kX2ZpcnN0X29mKGlvYzo6dW5pY2hhcl90IGtleSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSAwKSBjb25zdDsKCiAgICBvZmZz ZXRfdHlwZSBmaW5kX2xhc3Rfb2YoY29uc3QgSVRleHQmIGtleXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSBucG9zKSBjb25zdDsKICAgIG9mZnNl dF90eXBlIGZpbmRfbGFzdF9vZihjb25zdCBpb2M6OnVuaWNoYXJfdCBrZXlzW10sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgbnVtS2V5cykgY29uc3Q7CiAgICBvZmZzZXRfdHlw ZSBmaW5kX2xhc3Rfb2YoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSBucG9zKSBjb25zdDsKICAgIG9m ZnNldF90eXBlIGZpbmRfbGFzdF9vZihpb2M6OnVuaWNoYXJfdCBrZXksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSBucG9zKSBjb25zdDsKCiAgICBv ZmZzZXRfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBJVGV4dCYga2V5cywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zID0gMCkgY29uc3Q7 CiAgICBvZmZzZXRfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBpb2M6OnVuaWNoYXJfdCBr ZXlzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFy dFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlIG51bUtl eXMpIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgaW9jOjp1 bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRf dHlwZSBzdGFydFBvcyA9IDApIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmluZF9maXJzdF9ub3Rf b2YoaW9jOjp1bmljaGFyX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2Zmc2V0X3R5cGUgc3RhcnRQb3MgPSAwKSBjb25zdDsKCiAgICBvZmZzZXRfdHlwZSBmaW5kX2xh c3Rfbm90X29mKGNvbnN0IElUZXh0JiBrZXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvZmZzZXRfdHlwZSBzdGFydFBvcyA9IG5wb3MpIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUg ZmluZF9sYXN0X25vdF9vZihjb25zdCBpb2M6OnVuaWNoYXJfdCBrZXlzW10sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBudW1LZXlzKSBjb25zdDsKICAgIG9mZnNl dF90eXBlIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHN0YXJ0UG9zID0gbnBvcykg Y29uc3Q7CiAgICBvZmZzZXRfdHlwZSBmaW5kX2xhc3Rfbm90X29mKGlvYzo6dW5pY2hhcl90IGtl eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3Mg PSBucG9zKSBjb25zdDsKCiAgICAgCiAgICAgCiAgICAgCgogICAgdm9pZCBhZGRTdHlsZXMoY29u c3QgSVRleHRTdHlsZSYgc3R5bGUsCiAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFy dGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBjb3VudCA9IG5wb3MpOyAg CiAgICB2b2lkIGFkZFN0eWxlcyhjb25zdCBJVGV4dFN0eWxlU2V0JiBzdHlsZXMsCiAgICAgICAg ICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFydGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICBs ZW5ndGhfdHlwZSBjb3VudCA9IG5wb3MpOyAgCgogICAgdm9pZCByZW1vdmVTdHlsZXMoY29uc3Qg SVRleHRTdHlsZSYgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFy dGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBjb3VudCA9IG5wb3Mp OyAgCiAgICB2b2lkIHJlbW92ZVN0eWxlcyhjb25zdCBJVGV4dFN0eWxlU2V0JiBzdHlsZXMsCiAg ICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSBzdGFydGluZyA9IDAsCiAgICAgICAgICAg ICAgICAgICAgICBsZW5ndGhfdHlwZSBjb3VudCA9IG5wb3MpOyAgCiAgICB2b2lkIHJlbW92ZVN0 eWxlcyhvZmZzZXRfdHlwZSBzdGFydGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBsZW5n dGhfdHlwZSBjb3VudCA9IG5wb3MpOyAgCgogICAgIAogICAgIAogICAgIAoKICAgIGNvbnN0IElU ZXh0U3R5bGVTZXQgKnN0eWxlc0F0KG9mZnNldF90eXBlIHBvc2l0aW9uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUmIHN0YXJ0aW5nLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUmIGNvdW50KSBjb25zdDsgIAogICAgdm9p ZCBzdHlsZXNBdChvZmZzZXRfdHlwZSBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgSVRleHRT dHlsZVNldCYgc2V0LAogICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSYgc3RhcnRpbmcsCiAg ICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlJiBjb3VudCwKICAgICAgICAgICAgICAgICAgSVRl eHRTdHlsZTo6RVN0eWxlUHJvcGFnYXRpb24gcHJvcGFnYXRpb25Ub01hdGNoCiAgICAgICAgICAg ICAgICAgID0gSVRleHRTdHlsZTo6a01heGltdW1Qcm9wYWdhdGlvbikgY29uc3Q7ICAKCiAgICBi b29sIG1heGltdW1TdHlsZVNwYW4ob2Zmc2V0X3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSVRleHRTdHlsZSYgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgb2Zmc2V0X3R5cGUmIHN0YXJ0aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxl bmd0aF90eXBlJiBjb3VudCkgY29uc3Q7ICAKICAgIGJvb2wgbWF4aW11bVN0eWxlU3BhbihvZmZz ZXRfdHlwZSBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJVGV4dFN0 eWxlU2V0JiBzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUmIHN0YXJ0 aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlJiBjb3VudCkgY29uc3Q7 ICAKCiAgICBib29sIGNvbnRpbnVvdXNTdHlsZXNPdmVyKG9mZnNldF90eXBlIHN0YXJ0aW5nLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBjb3VudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSVRleHRTdHlsZVNldCYgc3R5bGVzKSBjb25zdDsgIAogICAg Ym9vbCBjb250aW51b3VzU3R5bGVzT3ZlcihvZmZzZXRfdHlwZSBzdGFydGluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgY291bnQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElUZXh0U3R5bGVTZXQmIHN0eWxlcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSVRleHRTdHlsZTo6RVN0eWxlUHJvcGFnYXRpb24gcHJvcGFnYXRpb25Ub01hdGNo KSBjb25zdDsgIAoKICAgIGJvb2wgaXNTdHlsZWQoKSBjb25zdDsgIAoKICAgIGJvb2wgc2FtZVN0 eWxlZFRleHQoY29uc3QgSVRleHQmIG90aGVyKSBjb25zdDsgIAogICAgYm9vbCBzYW1lQ2hhcmFj dGVycyhjb25zdCBJVGV4dCYgb3RoZXIpIGNvbnN0OyAgCgogICAgIAogICAgIAogICAgIAoKICAg IHZvaWQgcHJpbnREZWJ1Z0luZm8oKSBjb25zdDsgIAoKcHJpdmF0ZToKICAgIElUZXh0KElUZXh0 U3RvcmFnZSogdHh0c3RvcmFnZSk7CiAgICB2b2lkIHdyaXRlVG9TdHJlYW0oSURhdGFTdHJlYW0m IHRvV2hlcmUpIGNvbnN0OwogICAgdm9pZCByZWFkRnJvbVN0cmVhbShJRGF0YVN0cmVhbSYgZnJv bVdoZXJlKTsKICAgIElUZXh0U3RvcmFnZSAqc3RvcmFnZSgpIGNvbnN0OwoKCiAgICBtdXRhYmxl CgogICAgSVRleHRTdG9yYWdlKiBmU3RvcmFnZTsKCiAgICBtdXRhYmxlCgogICAgSUJ1ZmZlciAq ZkxhenlTdG9yYWdlOwoKICAgIGludCBmQ29kZVNldDsKCiAgICB2b2lkIGxhenlJbml0U3RvcmFn ZSgpIGNvbnN0OyAgCiAgICB2b2lkIGFzc2lnbkNvZGVTZXRGcm9tKGNvbnN0IElUZXh0JiB0aGF0 KTsKCiAgICBpbnQgY29tcGFyZVVuaUNoYXIoY29uc3QgVW5pQ2hhciogdGhhdCkgY29uc3Q7CiAg ICBpbnQgY29tcGFyZVVuaUNoYXIob2Zmc2V0X3R5cGUgdGhpc1BvcywgbGVuZ3RoX3R5cGUgdGhp c0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyIGF0aGF0W10sIGxl bmd0aF90eXBlIHRoYXRMZW5ndGgpIGNvbnN0OwogICAgbGVuZ3RoX3R5cGUgY29weVVuaUNoYXIo VW5pQ2hhciB0aGF0W10sIGxlbmd0aF90eXBlIG1heENoYXJzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2Zmc2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmlu ZFVuaUNoYXIoVW5pQ2hhciBrZXksIG9mZnNldF90eXBlIHN0YXJ0UG9zKSBjb25zdDsKICAgIG9m ZnNldF90eXBlIHJmaW5kVW5pQ2hhcihVbmlDaGFyIGtleSwgb2Zmc2V0X3R5cGUgc3RhcnRQb3Mp IGNvbnN0OwogICAgb2Zmc2V0X3R5cGUgZmluZF9maXJzdF9ub3Rfb2ZVbmlDaGFyKFVuaUNoYXIg a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBl IHN0YXJ0UG9zKSBjb25zdDsKICAgIG9mZnNldF90eXBlIGZpbmRfbGFzdF9ub3Rfb2ZVbmlDaGFy KFVuaUNoYXIga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm c2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0OwoKICAgIGZyaWVuZCBjbGFzcyBJVGV4dFN0b3JhZ2U7 CiAgICBmcmllbmQgY2xhc3MgSVN0eWxlU3RvcmFnZTsKICAgIGZyaWVuZCBjbGFzcyBJRmFzdFRl eHRJdGVyYXRvcjsKICAgIGZyaWVuZCBjbGFzcyBJU3RyaW5nOwp9OwoKIAogCiAKCiAKIAogCgpp bmxpbmUgSVRleHQgb3BlcmF0b3IrKGNvbnN0IElUZXh0JiBhLCBjb25zdCBJVGV4dCYgYik7Cmlu bGluZSBJVGV4dCBvcGVyYXRvcisoY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGNvbnN0IElUZXh0 JiBiKTsKaW5saW5lIElUZXh0IG9wZXJhdG9yKyhpb2M6OnVuaWNoYXJfdCBhLCBjb25zdCBJVGV4 dCYgYik7CmlubGluZSBJVGV4dCBvcGVyYXRvcisoY29uc3QgSVRleHQmIGEsIGNvbnN0IGlvYzo6 dW5pY2hhcl90KiBiKTsKaW5saW5lIElUZXh0IG9wZXJhdG9yKyhjb25zdCBJVGV4dCYgYSwgaW9j Ojp1bmljaGFyX3QgYik7CgogCiAKIAoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJVGV4 dCYgYSwgY29uc3QgSVRleHQmIGIpOwppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlvYzo6 dW5pY2hhcl90KiBhLCBjb25zdCBJVGV4dCYgYik7CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u c3QgSVRleHQmIGEsIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBiKTsKCmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgSVRleHQmIGEsIGNvbnN0IElUZXh0JiBiKTsKaW5saW5lIGJvb2wgb3BlcmF0 b3IhPShjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwgY29uc3QgSVRleHQmIGIpOwppbmxpbmUgYm9v bCBvcGVyYXRvciE9KGNvbnN0IElUZXh0JiBhLCBjb25zdCBpb2M6OnVuaWNoYXJfdCogYik7Cgpp bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgSVRleHQmIGEsIGNvbnN0IElUZXh0JiBiKTsKaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGlvYzo6dW5pY2hhcl90KiBhLCBjb25zdCBJVGV4dCYg Yik7CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBJVGV4dCYgYSwgY29uc3QgaW9jOjp1bmlj aGFyX3QqIGIpOwoKaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IElUZXh0JiBhLCBjb25zdCBJ VGV4dCYgYik7CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwg Y29uc3QgSVRleHQmIGIpOwppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgSVRleHQmIGEsIGNv bnN0IGlvYzo6dW5pY2hhcl90KiBiKTsKCmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgSVRl eHQmIGEsIGNvbnN0IElUZXh0JiBiKTsKaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpb2M6 OnVuaWNoYXJfdCogYSwgY29uc3QgSVRleHQmIGIpOwppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv bnN0IElUZXh0JiBhLCBjb25zdCBpb2M6OnVuaWNoYXJfdCogYik7CgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IElUZXh0JiBhLCBjb25zdCBJVGV4dCYgYik7CmlubGluZSBib29sIG9wZXJh dG9yPj0oY29uc3QgaW9jOjp1bmljaGFyX3QqIGEsIGNvbnN0IElUZXh0JiBiKTsKaW5saW5lIGJv b2wgb3BlcmF0b3I+PShjb25zdCBJVGV4dCYgYSwgY29uc3QgaW9jOjp1bmljaGFyX3QqIGIpOwoK IAogCiAKCnZvaWQgc3dhcChJVGV4dCYgYSwgSVRleHQmIGIpOwoKaW5saW5lIHN0ZDo6b3N0cmVh bSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIHN0cmVhbSwgY29uc3QgSVRleHQmIHRleHQpOwpp bmxpbmUgc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgc3RyZWFtLCBJVGV4 dCYgdGV4dCk7CmlubGluZSBzdGQ6OmlzdHJlYW0mIGdldGxpbmUoc3RkOjppc3RyZWFtJiBzdHJl YW0sIElUZXh0JiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGVsaW1p dGVyID0gJ1xuJyk7CgoKCgoKCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdt YSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCiAKIAogCgojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXRleHQuaW5sIiAxCgoKCiAKIAog CgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIAogCiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdHh0c3Rvci5ocHAiIDEKCgoKIAogCiAK CgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3luY2hyLmhwcCIgMQoKCgogCiAKIAoKCgoKCgoK CgoKCiAKIAogCiAKIAogCiAKIAoKIAogCgoKCgoKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQoj cHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBp bmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJ TkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoKIAogCgogCiAKCiAKCnRl bXBsYXRlIDxjbGFzcyBBVHlwZT4gY2xhc3MgSVN5bmNocm9uaXplZAp7CnB1YmxpYzoKIAogCiAK CiAgICAgICAgSVN5bmNocm9uaXplZCgpOwogICAgICAgIH5JU3luY2hyb25pemVkKCk7CiAgICAg ICAgQVR5cGUgICBnZXQoKSBjb25zdDsKICAgICAgICBvcGVyYXRvciBBVHlwZSgpIGNvbnN0OwoJ CiAgICAgICAgdm9sYXRpbGUgQVR5cGUgZkF0b207CgkKICAgICAgICAgCiAgICAgICAgYm9vbCBz ZXRTaW5nbGUoQVR5cGUgbmV3VmFsdWUpOwogICAgICAgIAogICAgICAgIHB0aHJlYWRfbXV0ZXhf dCBmTXV0ZXg7CiAgICAgICAgCiMgMTEwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lzeW5jaHIuaHBwIgoKfTsKCiAKIAogCnRlbXBsYXRlPGNsYXNz IEFUeXBlPiBBVHlwZSAqc3luY2hyb25pemVkSW5pdChJU3luY2hyb25pemVkPEFUeXBlICo+ICZ2 YXIsIEFUeXBlICp2YWx1ZSk7CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFn bWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzeW5jaHIuaW5sIiAxCgoKCiAKIAogCgoKCgoK CgoKCgoKIAogCiAKIAogCiAKIAogCiAKCiAKCgp0ZW1wbGF0ZTxjbGFzcyBBVHlwZT4gaW5saW5l CklTeW5jaHJvbml6ZWQ8QVR5cGU+OjpJU3luY2hyb25pemVkKCkKewogICAgZkF0b20gPSAwOwog ICAgcHRocmVhZF9tdXRleF9pbml0KCAmZk11dGV4LCAwICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEFU eXBlPiBpbmxpbmUKSVN5bmNocm9uaXplZDxBVHlwZT46On5JU3luY2hyb25pemVkKCkKewogICAg cHRocmVhZF9tdXRleF9kZXN0cm95KCAmZk11dGV4ICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEFUeXBl PiBpbmxpbmUKQVR5cGUgSVN5bmNocm9uaXplZDxBVHlwZT46OmdldCgpIGNvbnN0CnsKICAgcmV0 dXJuKCAoQVR5cGUpZkF0b20gKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQVR5cGU+IGlubGluZQpJU3lu Y2hyb25pemVkPEFUeXBlPjo6b3BlcmF0b3IgQVR5cGUoKSBjb25zdAp7CiAgICByZXR1cm4gZ2V0 KCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEFUeXBlPiBpbmxpbmUKYm9vbCBJU3luY2hyb25pemVkPEFU eXBlPjo6c2V0U2luZ2xlKEFUeXBlIG5ld1ZhbHVlKQp7CiAgYm9vbCByYyA9IHRydWU7CiAgCiAg aWYgKCBmQXRvbSA9PSAwICkgewogICAgcHRocmVhZF9tdXRleF9sb2NrKCAmZk11dGV4ICk7CiAg ICBpZiAoIGZBdG9tID09IDAgKSB7CiAgICAgIGZBdG9tID0gbmV3VmFsdWU7CiAgICAgIHJjID0g ZmFsc2U7CiAgICB9CiAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmZNdXRleCApOwogIH0KICAK ICByZXR1cm4oIHJjICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEFUeXBlPiBpbmxpbmUgQVR5cGUgKgpz eW5jaHJvbml6ZWRJbml0KElTeW5jaHJvbml6ZWQ8QVR5cGUgKj4gJnZhciwgQVR5cGUgKnZhbHVl KQp7CiAgaWYgKCB2YXIuc2V0U2luZ2xlKHZhbHVlKSApIHsKICAgIGRlbGV0ZSB2YWx1ZTsKICB9 CiAgCiAgcmV0dXJuKCB2YXIuZ2V0KCkgKTsKfQoKIyAyMTYgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN5bmNoci5pbmwiCgoKIAoKIyAxMzkgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN5bmNoci5o cHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdt YSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMjggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaXR4dHN0b3IuaHBwIiAyCgoKIyAxICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0eHRpdGVyLmhwcCIgMQoKCgog CiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKIyAxICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9z dGRkZWYuaCIgMwoKIyAzNSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pdHh0aXRlci5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFn bWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8o cmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19T Q0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSVRleHQ7 CiAKCiAKCiAKIAogCiAKCmNsYXNzIElDaGFyYWN0ZXJSZWZlcmVuY2UgewpwdWJsaWM6CiAgICB+ SUNoYXJhY3RlclJlZmVyZW5jZSgpOwoKICAgIElDaGFyYWN0ZXJSZWZlcmVuY2UmIG9wZXJhdG9y PShpb2M6OnVuaWNoYXJfdCBuZXdDaGFyKTsKICAgIElDaGFyYWN0ZXJSZWZlcmVuY2UmIG9wZXJh dG9yPShjb25zdCBJQ2hhcmFjdGVyUmVmZXJlbmNlJiB0aGF0KTsKCiAgICBvcGVyYXRvciBpb2M6 OnVuaWNoYXJfdCgpIGNvbnN0OwoKICAgIElUZXh0KiB0ZXh0KCkgY29uc3Q7ICAKICAgIHNpemVf dCBvZmZzZXQoKSBjb25zdDsgIAoKICAgIElDaGFyYWN0ZXJSZWZlcmVuY2UoY29uc3QgSUNoYXJh Y3RlclJlZmVyZW5jZSYgdGhhdCk7Cgpwcml2YXRlOgogICAgSUNoYXJhY3RlclJlZmVyZW5jZShp b2M6OnVuaWNoYXJfdCogdGhlQ2hhcik7CgogICAgSUNoYXJhY3RlclJlZmVyZW5jZShJVGV4dCog dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCk7CgogICAgSUNoYXJh Y3RlclJlZmVyZW5jZSgpOwoKICAgIGlvYzo6dW5pY2hhcl90IGRlcmVmZXJlbmNlKCkgY29uc3Q7 CgogICAgdW5pb24gewogICAgICAgIGlvYzo6dW5pY2hhcl90KiBmQ2hhcjsKICAgICAgICBJVGV4 dCogZlRleHQ7CiAgICB9OwogICAgc2l6ZV90IGZPZmZzZXQ7CgogICAgZnJpZW5kIGNsYXNzIElU ZXh0OwogICAgZnJpZW5kIGNsYXNzIElUZXh0SXRlcmF0b3I7Cn07CgogCiAKIAogCgpjbGFzcyBJ VGV4dEl0ZXJhdG9yIHsKcHVibGljOgogICAgSVRleHRJdGVyYXRvcigpOwoKCgoKICAgIElUZXh0 SXRlcmF0b3IoY29uc3QgSVRleHRJdGVyYXRvciYgdGhhdCk7CgoKCgogICAgfklUZXh0SXRlcmF0 b3IoKTsKCiAgICBJVGV4dEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgSVRleHRJdGVyYXRvciYg dGhhdCk7CgogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElUZXh0SXRlcmF0b3ImIHRoYXQpIGNv bnN0OwogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0 OwoKICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IElUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0Owog ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSVRleHRJdGVyYXRvciYgdGhhdCkgY29uc3Q7CiAgICBi b29sIG9wZXJhdG9yPj0oY29uc3QgSVRleHRJdGVyYXRvciYgdGhhdCkgY29uc3Q7CiAgICBib29s IG9wZXJhdG9yPD0oY29uc3QgSVRleHRJdGVyYXRvciYgdGhhdCkgY29uc3Q7CgogICAgSUNoYXJh Y3RlclJlZmVyZW5jZSBvcGVyYXRvcltdKGlvYzo6bnVtZXJpY190IG9mZnNldCkgY29uc3Q7CiAg ICBJQ2hhcmFjdGVyUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0OwoKICAgIElUZXh0SXRlcmF0 b3ImIG9wZXJhdG9yKysoKTsKICAgIElUZXh0SXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpOwogICAg SVRleHRJdGVyYXRvciYgb3BlcmF0b3ItLSgpOwogICAgSVRleHRJdGVyYXRvciBvcGVyYXRvci0t KGludCk7CgogICAgSVRleHRJdGVyYXRvciYgb3BlcmF0b3IrPShpb2M6Om51bWVyaWNfdCBkaXN0 YW5jZSk7CiAgICBJVGV4dEl0ZXJhdG9yJiBvcGVyYXRvci09KGlvYzo6bnVtZXJpY190IGRpc3Rh bmNlKTsKCiAgICBJVGV4dEl0ZXJhdG9yIG9wZXJhdG9yLShpb2M6Om51bWVyaWNfdCBkaXN0YW5j ZSkgY29uc3Q7CiAgICBpb2M6Om51bWVyaWNfdCBvcGVyYXRvci0oY29uc3QgSVRleHRJdGVyYXRv ciYgdGhhdCkgY29uc3Q7CgogICAgSVRleHQqIHRleHQoKSBjb25zdDsKCgoKCiAgICBzaXplX3Qg b2Zmc2V0KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgSVRleHRJdGVyYXRvcihJVGV4dCogdGhlVGV4 dCwKICAgICAgICAgICAgICAgICAgc2l6ZV90IHRoZU9mZnNldCk7CiAgICB2b2lkIHRocm93RXhj ZXB0aW9uKCkgY29uc3Q7CgogICAgSVRleHQqIGZUZXh0OwogICAgc2l6ZV90IGZPZmZzZXQ7Cgog ICAgZnJpZW5kIGNsYXNzIElUZXh0OwogICAgZnJpZW5kIGNsYXNzIElDb25zdFRleHRJdGVyYXRv cjsKfTsKCiAKIAogCgppbmxpbmUgSVRleHRJdGVyYXRvciBvcGVyYXRvcisoY29uc3QgSVRleHRJ dGVyYXRvciYgaXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb2M6Om51 bWVyaWNfdCBvZmZzZXQpOwppbmxpbmUgSVRleHRJdGVyYXRvciBvcGVyYXRvcisoaW9jOjpudW1l cmljX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVRleHRJ dGVyYXRvciYgaXRlcmF0b3IpOwoKaW5saW5lIGlvYzo6dW5pY2hhcl90KiB2YWx1ZV90eXBlKGNv bnN0IElUZXh0SXRlcmF0b3ImKTsKaW5saW5lIGlvYzo6bnVtZXJpY190IGRpc3RhbmNlX3R5cGUo Y29uc3QgSVRleHRJdGVyYXRvciYpOwoKIAoKIAogCiAKIAoKY2xhc3MgSUNvbnN0VGV4dEl0ZXJh dG9yIHsKcHVibGljOgogICAgSUNvbnN0VGV4dEl0ZXJhdG9yKCk7CiAgICBJQ29uc3RUZXh0SXRl cmF0b3IoY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJiB0aGF0KTsKICAgIH5JQ29uc3RUZXh0SXRl cmF0b3IoKTsKCiAgICBJQ29uc3RUZXh0SXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJQ29uc3RU ZXh0SXRlcmF0b3ImIHRoYXQpOwoKICAgIG9wZXJhdG9yIElUZXh0SXRlcmF0b3IoKSBjb25zdDsK CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25z dDsKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJQ29uc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNv bnN0OwoKICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhhdCkg Y29uc3Q7CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBJQ29uc3RUZXh0SXRlcmF0b3ImIHRoYXQp IGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhh dCkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJiB0 aGF0KSBjb25zdDsKCiAgICBpb2M6OnVuaWNoYXJfdCBvcGVyYXRvcltdKGlvYzo6bnVtZXJpY190 IG9mZnNldCkgY29uc3Q7CiAgICBpb2M6OnVuaWNoYXJfdCBvcGVyYXRvciooKSBjb25zdDsKCiAg ICBJQ29uc3RUZXh0SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKICAgIElDb25zdFRleHRJdGVyYXRv ciBvcGVyYXRvcisrKGludCk7CiAgICBJQ29uc3RUZXh0SXRlcmF0b3ImIG9wZXJhdG9yLS0oKTsK ICAgIElDb25zdFRleHRJdGVyYXRvciBvcGVyYXRvci0tKGludCk7CgogICAgSUNvbnN0VGV4dEl0 ZXJhdG9yJiBvcGVyYXRvcis9KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKTsKICAgIElDb25zdFRl eHRJdGVyYXRvciYgb3BlcmF0b3ItPShpb2M6Om51bWVyaWNfdCBkaXN0YW5jZSk7CgogICAgSUNv bnN0VGV4dEl0ZXJhdG9yIG9wZXJhdG9yLShpb2M6Om51bWVyaWNfdCBkaXN0YW5jZSkgY29uc3Q7 CiAgICBpb2M6Om51bWVyaWNfdCBvcGVyYXRvci0oY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJiB0 aGF0KSBjb25zdDsKCiAgICBjb25zdCBJVGV4dCogdGV4dCgpIGNvbnN0OwogICAgc2l6ZV90IG9m ZnNldCgpIGNvbnN0OwoKcHJpdmF0ZToKICAgIElDb25zdFRleHRJdGVyYXRvcihjb25zdCBJVGV4 dCogdGhlVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGhlT2Zmc2V0KTsKICAg IHZvaWQgdGhyb3dFeGNlcHRpb24oKSBjb25zdDsKCiAgICBjb25zdCBJVGV4dCogZlRleHQ7CiAg ICBzaXplX3QgZk9mZnNldDsKCiAgICBmcmllbmQgY2xhc3MgSVRleHQ7Cn07CgogCiAKIAoKaW5s aW5lIElDb25zdFRleHRJdGVyYXRvciBvcGVyYXRvcisoY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9y JiBpdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9jOjpudW1l cmljX3Qgb2Zmc2V0KTsKaW5saW5lIElDb25zdFRleHRJdGVyYXRvciBvcGVyYXRvcisoaW9jOjpu dW1lcmljX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBJQ29uc3RUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKTsKCmlubGluZSBpb2M6OnVuaWNoYXJfdCog dmFsdWVfdHlwZShjb25zdCBJQ29uc3RUZXh0SXRlcmF0b3ImKTsKaW5saW5lIGlvYzo6bnVtZXJp Y190IGRpc3RhbmNlX3R5cGUoY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJik7CgogCgogCiAKIAog CiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0 dXJuVHlwZT4KY2xhc3MgSVJldmVyc2VJdGVyYXRvciB7CnB1YmxpYzoKICAgIElSZXZlcnNlSXRl cmF0b3IoKTsKICAgIElSZXZlcnNlSXRlcmF0b3IoY29uc3QgQVJlYWxJdGVyYXRvciYgdGhlUmVh bEl0ZXJhdG9yKTsKICAgIElSZXZlcnNlSXRlcmF0b3IoY29uc3QgSVJldmVyc2VJdGVyYXRvcjxB UmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mIHRoYXQpOwogICAgfklSZXZlcnNlSXRlcmF0b3Io KTsKCiAgICBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYKICAg IG9wZXJhdG9yPShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5U eXBlPiYgdGhhdCk7CgogICAgb3BlcmF0b3IgQVJlYWxJdGVyYXRvcigpIGNvbnN0OwoKICAgIGJv b2wgb3BlcmF0b3I9PShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1 cm5UeXBlPiYgdGhhdCkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSVJldmVyc2VJ dGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mIHRoYXQpIGNvbnN0OwoKICAgIGJv b2wgb3BlcmF0b3I+KGNvbnN0IElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVy blR5cGU+JiB0aGF0KSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IElSZXZlcnNlSXRl cmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+JiB0aGF0KSBjb25zdDsKICAgIGJvb2wg b3BlcmF0b3I+PShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5U eXBlPiYgdGhhdCkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgSVJldmVyc2VJdGVy YXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mIHRoYXQpIGNvbnN0OwoKICAgIEFSZXR1 cm5UeXBlIG9wZXJhdG9yW10oaW9jOjpudW1lcmljX3Qgb2Zmc2V0KSBjb25zdDsKICAgIEFSZXR1 cm5UeXBlIG9wZXJhdG9yKigpIGNvbnN0OwoKICAgIElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVy YXRvciwgQVJldHVyblR5cGU+JgogICAgb3BlcmF0b3IrKygpOwogICAgSVJldmVyc2VJdGVyYXRv cjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4KICAgIG9wZXJhdG9yKysoaW50KTsKICAgIElS ZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+JgogICAgb3BlcmF0b3It LSgpOwogICAgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4KICAg IG9wZXJhdG9yLS0oaW50KTsKCiAgICBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFS ZXR1cm5UeXBlPiYKICAgIG9wZXJhdG9yKz0oaW9jOjpudW1lcmljX3QgZGlzdGFuY2UpOwogICAg SVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mCiAgICBvcGVyYXRv ci09KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKTsKCiAgICBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFs SXRlcmF0b3IsIEFSZXR1cm5UeXBlPgogICAgb3BlcmF0b3ItKGlvYzo6bnVtZXJpY190IGRpc3Rh bmNlKSBjb25zdDsKICAgIGlvYzo6bnVtZXJpY190IG9wZXJhdG9yLShjb25zdCBJUmV2ZXJzZUl0 ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYgdGhhdCkgY29uc3Q7Cgpwcml2YXRl OgogICAgQVJlYWxJdGVyYXRvciBmUmVhbEl0ZXJhdG9yOwp9OwoKIAogCiAKCnRlbXBsYXRlIDxj bGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5lCklSZXZlcnNlSXRl cmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+Cm9wZXJhdG9yKyhjb25zdCBJUmV2ZXJz ZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYgaXRlcmF0b3IsCiAgICAgICAg ICBpb2M6Om51bWVyaWNfdCBvZmZzZXQpOwoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0b3Is IGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUKSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9y LCBBUmV0dXJuVHlwZT4Kb3BlcmF0b3IrKGlvYzo6bnVtZXJpY190IG9mZnNldCwKICAgICAgICAg IGNvbnN0IElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+JiBpdGVy YXRvcik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+ CmlubGluZQppb2M6OnVuaWNoYXJfdCogdmFsdWVfdHlwZShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9y PEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYpOwoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRl cmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUKaW9jOjpudW1lcmljX3QgZGlzdGFuY2Vf dHlwZShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYp OwoKIAogCgogCiAKIAoKdHlwZWRlZiBJUmV2ZXJzZUl0ZXJhdG9yPElUZXh0SXRlcmF0b3IsIElD aGFyYWN0ZXJSZWZlcmVuY2U+IElSZXZlcnNlVGV4dEl0ZXJhdG9yOwp0eXBlZGVmIElSZXZlcnNl SXRlcmF0b3I8SUNvbnN0VGV4dEl0ZXJhdG9yLCBpb2M6OnVuaWNoYXJfdD4gSVJldmVyc2VDb25z dFRleHRJdGVyYXRvcjsKCiAKIAogCiAKIAogCiAKIAogCgppbmxpbmUgSVJldmVyc2VUZXh0SXRl cmF0b3Igb3BlcmF0b3IrKGNvbnN0IElSZXZlcnNlVGV4dEl0ZXJhdG9yJiBpdGVyYXRvciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb2M6Om51bWVyaWNfdCBvZmZzZXQp OwoKaW5saW5lIElSZXZlcnNlVGV4dEl0ZXJhdG9yIG9wZXJhdG9yKyhpb2M6Om51bWVyaWNfdCBv ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVJldmVy c2VUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKTsKCmlubGluZSBJUmV2ZXJzZUNvbnN0VGV4dEl0ZXJh dG9yIG9wZXJhdG9yKyhjb25zdCBJUmV2ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yJiBpdGVyYXRvciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYzo6bnVtZXJpY190 IG9mZnNldCk7CgppbmxpbmUgSVJldmVyc2VDb25zdFRleHRJdGVyYXRvciBvcGVyYXRvcisoaW9j OjpudW1lcmljX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgSVJldmVyc2VDb25zdFRleHRJdGVyYXRvciYgaXRlcmF0b3IpOwoKIAogCiAK IApjbGFzcyBJRmFzdFRleHRJdGVyYXRvciB7CnB1YmxpYzoKICAgIElGYXN0VGV4dEl0ZXJhdG9y KCk7CiAgICBJRmFzdFRleHRJdGVyYXRvcihjb25zdCBJRmFzdFRleHRJdGVyYXRvciYgdGhhdCk7 CiAgICBJRmFzdFRleHRJdGVyYXRvcihjb25zdCBJVGV4dEl0ZXJhdG9yJiB0aGF0LAogICAgICAg ICAgICAgICAgICAgICAgYm9vbCB3aWxsV3JpdGUgPSB0cnVlKTsKICAgIElGYXN0VGV4dEl0ZXJh dG9yKGNvbnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhhdCwKICAgICAgICAgICAgICAgICAgICAg IGJvb2wgd2lsbFdyaXRlID0gdHJ1ZSk7CiAgICB+SUZhc3RUZXh0SXRlcmF0b3IoKTsKCiAgICBJ RmFzdFRleHRJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0 KTsKCiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNv bnN0OwogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBj b25zdDsKCiAgICBib29sIG9wZXJhdG9yPihjb25zdCBJRmFzdFRleHRJdGVyYXRvciYgdGhhdCkg Y29uc3Q7CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBJRmFzdFRleHRJdGVyYXRvciYgdGhhdCkg Y29uc3Q7CiAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImIHRoYXQp IGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0 KSBjb25zdDsKCiAgICBpb2M6OnVuaWNoYXJfdCYgb3BlcmF0b3JbXShpb2M6Om51bWVyaWNfdCBv ZmZzZXQpIGNvbnN0OwogICAgaW9jOjp1bmljaGFyX3QmIG9wZXJhdG9yKigpIGNvbnN0OwoKICAg IElGYXN0VGV4dEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiAgICBJRmFzdFRleHRJdGVyYXRvciBv cGVyYXRvcisrKGludCk7CiAgICBJRmFzdFRleHRJdGVyYXRvciYgb3BlcmF0b3ItLSgpOwogICAg SUZhc3RUZXh0SXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpOwoKICAgIElGYXN0VGV4dEl0ZXJhdG9y JiBvcGVyYXRvcis9KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKTsKICAgIElGYXN0VGV4dEl0ZXJh dG9yJiBvcGVyYXRvci09KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKTsKCiAgICBJRmFzdFRleHRJ dGVyYXRvciBvcGVyYXRvci0oaW9jOjpudW1lcmljX3QgZGlzdGFuY2UpIGNvbnN0OwogICAgaW9j OjpudW1lcmljX3Qgb3BlcmF0b3ItKGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25z dDsKCnByaXZhdGU6CiAgICBJRmFzdFRleHRJdGVyYXRvcihpb2M6OnVuaWNoYXJfdCogdGhlQ2hh ciwKICAgICAgICAgICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90KiBnYXBTdGFydCwKICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBnYXBMZW5ndGgpOwoKICAgIGlvYzo6dW5pY2hhcl90KiBm Q2hhcjsKICAgIGlvYzo6dW5pY2hhcl90KiBmR2FwU3RhcnQ7CiAgICBzaXplX3QgZkdhcExlbmd0 aDsKCiAgICBmcmllbmQgY2xhc3MgSVRleHRTdG9yYWdlOwp9OwoKIAogCiAKCmlubGluZSBJRmFz dFRleHRJdGVyYXRvciBvcGVyYXRvcisoY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImIGl0ZXJhdG9y LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYzo6bnVtZXJpY190IG9mZnNl dCk7CmlubGluZSBJRmFzdFRleHRJdGVyYXRvciBvcGVyYXRvcisoaW9jOjpudW1lcmljX3Qgb2Zm c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElGYXN0VGV4dEl0 ZXJhdG9yJiBpdGVyYXRvcik7CgppbmxpbmUgaW9jOjp1bmljaGFyX3QqIHZhbHVlX3R5cGUoY29u c3QgSUZhc3RUZXh0SXRlcmF0b3ImKTsKaW5saW5lIGlvYzo6bnVtZXJpY190IGRpc3RhbmNlX3R5 cGUoY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImKTsKCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShw b3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCgojIDEgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXR4dGl0ZXIuaW5sIiAx CgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKCiAKCgoKIAoKIAogCiAKCmlu bGluZQpJQ2hhcmFjdGVyUmVmZXJlbmNlOjpJQ2hhcmFjdGVyUmVmZXJlbmNlKCkKICAgICAgICA6 IGZUZXh0KChJVGV4dCopKCZJVGV4dDo6ZW1wdHlUZXh0KCkpKSwKICAgICAgICAgIGZPZmZzZXQo MCkKewogICAgIAp9CgppbmxpbmUKSUNoYXJhY3RlclJlZmVyZW5jZTo6SUNoYXJhY3RlclJlZmVy ZW5jZShjb25zdCBJQ2hhcmFjdGVyUmVmZXJlbmNlJiB0aGF0KQogICAgICAgIDogZlRleHQodGhh dC5mVGV4dCksCiAgICAgICAgICBmT2Zmc2V0KHRoYXQuZk9mZnNldCkKewp9CgppbmxpbmUKSUNo YXJhY3RlclJlZmVyZW5jZTo6SUNoYXJhY3RlclJlZmVyZW5jZShpb2M6OnVuaWNoYXJfdCogdGhl Q2hhcikKICAgICAgICA6IGZDaGFyKHRoZUNoYXIpLAogICAgICAgICAgZk9mZnNldCgoc2l6ZV90 KSgtMSkpCnsKfQoKaW5saW5lCklDaGFyYWN0ZXJSZWZlcmVuY2U6OklDaGFyYWN0ZXJSZWZlcmVu Y2UoSVRleHQqIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICBvZmZzZXQpCiAgICAgICAgOiBmVGV4dCh0ZXh0KSwKICAgICAgICAgIGZPZmZzZXQo b2Zmc2V0KQp7Cn0KCmlubGluZQpJQ2hhcmFjdGVyUmVmZXJlbmNlOjp+SUNoYXJhY3RlclJlZmVy ZW5jZSgpCnsKfQoKaW5saW5lIGlvYzo6dW5pY2hhcl90CklDaGFyYWN0ZXJSZWZlcmVuY2U6OmRl cmVmZXJlbmNlKCkgY29uc3QKewogICAgaWYgKGZPZmZzZXQgPT0gKHNpemVfdCkoLTEpKQogICAg ICAgIHJldHVybiAqZkNoYXI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICgqKChjb25zdCBJVGV4 dCopZlRleHQpKVtmT2Zmc2V0XTsKICAgICAKICAgICAKICAgICAKfQoKaW5saW5lIElDaGFyYWN0 ZXJSZWZlcmVuY2UmCklDaGFyYWN0ZXJSZWZlcmVuY2U6Om9wZXJhdG9yPShpb2M6OnVuaWNoYXJf dCBuZXdDaGFyKQp7CiAgICBpZiAoZk9mZnNldCA9PSAoc2l6ZV90KSgtMSkpCiAgICAgICAgKmZD aGFyID0gbmV3Q2hhcjsKICAgIGVsc2UKICAgICAgICBmVGV4dC0+YXRfcHV0KGZPZmZzZXQsIG5l d0NoYXIpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSUNoYXJhY3RlclJlZmVyZW5jZSYK SUNoYXJhY3RlclJlZmVyZW5jZTo6b3BlcmF0b3I9KGNvbnN0IElDaGFyYWN0ZXJSZWZlcmVuY2Um IHRoYXQpCnsKICAgIHJldHVybiBvcGVyYXRvcj0odGhhdC5kZXJlZmVyZW5jZSgpKTsKfQoKaW5s aW5lCklDaGFyYWN0ZXJSZWZlcmVuY2U6Om9wZXJhdG9yIGlvYzo6dW5pY2hhcl90KCkgY29uc3QK ewogICAgcmV0dXJuIGRlcmVmZXJlbmNlKCk7Cn0KCmlubGluZSBJVGV4dCoKSUNoYXJhY3RlclJl ZmVyZW5jZTo6dGV4dCgpIGNvbnN0CnsKICAgIHJldHVybiBmVGV4dDsKfQoKaW5saW5lIHNpemVf dApJQ2hhcmFjdGVyUmVmZXJlbmNlOjpvZmZzZXQoKSBjb25zdAp7CiAgICByZXR1cm4gZk9mZnNl dDsKfQoKIAogCiAKCgoKI3ByYWdtYSBpbmZvKG5vY252KQppbmxpbmUKSVRleHRJdGVyYXRvcjo6 SVRleHRJdGVyYXRvcigpCiAgICAgICAgOiBmVGV4dCgoSVRleHQqKSgmSVRleHQ6OmVtcHR5VGV4 dCgpKSksICAKICAgIGZPZmZzZXQoMCkKewp9CiNwcmFnbWEgaW5mbyhyZXN0b3JlKQoKaW5saW5l CklUZXh0SXRlcmF0b3I6OklUZXh0SXRlcmF0b3IoSVRleHQqICB0aGVUZXh0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAgdGhlT2Zmc2V0KQogICAgICAgIDogZlRleHQodGhl VGV4dCksCiAgICAgICAgICBmT2Zmc2V0KHRoZU9mZnNldCkKewp9CgppbmxpbmUKSVRleHRJdGVy YXRvcjo6SVRleHRJdGVyYXRvcihjb25zdCBJVGV4dEl0ZXJhdG9yJiB0aGF0KQogICAgICAgIDog ZlRleHQodGhhdC5mVGV4dCksCiAgICAgICAgICBmT2Zmc2V0KHRoYXQuZk9mZnNldCkKewp9Cgpp bmxpbmUKSVRleHRJdGVyYXRvcjo6fklUZXh0SXRlcmF0b3IoKQp7Cn0KCmlubGluZSBJVGV4dEl0 ZXJhdG9yJgpJVGV4dEl0ZXJhdG9yOjpvcGVyYXRvcj0oY29uc3QgSVRleHRJdGVyYXRvciYgdGhh dCkKewogICAgZlRleHQgPSB0aGF0LmZUZXh0OwogICAgZk9mZnNldCA9IHRoYXQuZk9mZnNldDsK ICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGJvb2wKSVRleHRJdGVyYXRvcjo6b3BlcmF0b3I9 PShjb25zdCBJVGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZlRleHQgPT0g dGhhdC5mVGV4dCAmJiBmT2Zmc2V0ID09IHRoYXQuZk9mZnNldDsKfQoKaW5saW5lIGJvb2wKSVRl eHRJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJVGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7 CiAgICByZXR1cm4gZlRleHQgIT0gdGhhdC5mVGV4dCB8fCBmT2Zmc2V0ICE9IHRoYXQuZk9mZnNl dDsKfQoKaW5saW5lIGJvb2wKSVRleHRJdGVyYXRvcjo6b3BlcmF0b3I+KGNvbnN0IElUZXh0SXRl cmF0b3ImIHRoYXQpIGNvbnN0CnsKICAgIGlmICghKCBmVGV4dCA9PSB0aGF0LmZUZXh0ICkpIHRo cm93RXhjZXB0aW9uKCkgOwogICAgcmV0dXJuIGZPZmZzZXQgPiB0aGF0LmZPZmZzZXQ7Cn0KCmlu bGluZSBib29sCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9yPChjb25zdCBJVGV4dEl0ZXJhdG9yJiB0 aGF0KSBjb25zdAp7CiAgICBpZiAoISggZlRleHQgPT0gdGhhdC5mVGV4dCApKSB0aHJvd0V4Y2Vw dGlvbigpIDsKICAgIHJldHVybiBmT2Zmc2V0IDwgdGhhdC5mT2Zmc2V0Owp9CgppbmxpbmUgYm9v bApJVGV4dEl0ZXJhdG9yOjpvcGVyYXRvcj49KGNvbnN0IElUZXh0SXRlcmF0b3ImIHRoYXQpIGNv bnN0CnsKICAgIGlmICghKCBmVGV4dCA9PSB0aGF0LmZUZXh0ICkpIHRocm93RXhjZXB0aW9uKCkg OwogICAgcmV0dXJuIGZPZmZzZXQgPj0gdGhhdC5mT2Zmc2V0Owp9CgppbmxpbmUgYm9vbApJVGV4 dEl0ZXJhdG9yOjpvcGVyYXRvcjw9KGNvbnN0IElUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0CnsK ICAgIGlmICghKCBmVGV4dCA9PSB0aGF0LmZUZXh0ICkpIHRocm93RXhjZXB0aW9uKCkgOwogICAg cmV0dXJuIGZPZmZzZXQgPD0gdGhhdC5mT2Zmc2V0Owp9CgppbmxpbmUgSUNoYXJhY3RlclJlZmVy ZW5jZQpJVGV4dEl0ZXJhdG9yOjpvcGVyYXRvcltdKGlvYzo6bnVtZXJpY190ICBvZmZzZXQpIGNv bnN0CnsKICAgIHJldHVybiAoKmZUZXh0KVsoc2l6ZV90KShmT2Zmc2V0ICsgb2Zmc2V0KV07Cn0K CmlubGluZSBJQ2hhcmFjdGVyUmVmZXJlbmNlCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNv bnN0CnsKICAgIHJldHVybiAoKmZUZXh0KVtmT2Zmc2V0XTsKfQoKaW5saW5lIElUZXh0SXRlcmF0 b3ImCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQp7CiAgICBmT2Zmc2V0Kys7CiAgICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZSBJVGV4dEl0ZXJhdG9yCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9y KysoaW50KQp7CiAgICBJVGV4dEl0ZXJhdG9yICAgdGVtcCgqdGhpcyk7CiAgICBmT2Zmc2V0Kys7 CiAgICByZXR1cm4gdGVtcDsKfQoKaW5saW5lIElUZXh0SXRlcmF0b3ImCklUZXh0SXRlcmF0b3I6 Om9wZXJhdG9yLS0oKQp7CiAgICBmT2Zmc2V0LS07CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu ZSBJVGV4dEl0ZXJhdG9yCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9yLS0oaW50KQp7CiAgICBJVGV4 dEl0ZXJhdG9yICAgdGVtcCgqdGhpcyk7CiAgICBmT2Zmc2V0LS07CiAgICByZXR1cm4gdGVtcDsK fQoKaW5saW5lIElUZXh0SXRlcmF0b3ImCklUZXh0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaW9jOjpu dW1lcmljX3QgZGlzdGFuY2UpCnsKICAgIGZPZmZzZXQgKz0gZGlzdGFuY2U7CiAgICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBJVGV4dEl0ZXJhdG9yJgpJVGV4dEl0ZXJhdG9yOjpvcGVyYXRvci09 KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKQp7CiAgICBmT2Zmc2V0IC09IGRpc3RhbmNlOwogICAg cmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSVRleHRJdGVyYXRvcgpJVGV4dEl0ZXJhdG9yOjpvcGVy YXRvci0oaW9jOjpudW1lcmljX3QgZGlzdGFuY2UpIGNvbnN0CnsKICAgIElUZXh0SXRlcmF0b3Ig ICB0ZW1wKCp0aGlzKTsKICAgIHJldHVybiB0ZW1wIC09IGRpc3RhbmNlOwp9CgppbmxpbmUgaW9j OjpudW1lcmljX3QKSVRleHRJdGVyYXRvcjo6b3BlcmF0b3ItKGNvbnN0IElUZXh0SXRlcmF0b3Im IHRoYXQpIGNvbnN0CnsKICAgIGlmICghKCBmVGV4dCA9PSB0aGF0LmZUZXh0ICkpIHRocm93RXhj ZXB0aW9uKCkgOwogICAgcmV0dXJuIGZPZmZzZXQgLSB0aGF0LmZPZmZzZXQ7Cn0KCmlubGluZSBJ VGV4dCoKSVRleHRJdGVyYXRvcjo6dGV4dCgpIGNvbnN0CnsKICAgIHJldHVybiBmVGV4dDsKfQoK aW5saW5lIHNpemVfdApJVGV4dEl0ZXJhdG9yOjpvZmZzZXQoKSBjb25zdAp7CiAgICByZXR1cm4g Zk9mZnNldDsKfQoKIAogCiAKCmlubGluZSBJVGV4dEl0ZXJhdG9yCm9wZXJhdG9yKyhjb25zdCBJ VGV4dEl0ZXJhdG9yJiBpdGVyYXRvciwKICAgICAgICAgIGlvYzo6bnVtZXJpY190IG9mZnNldCkK ewogICAgSVRleHRJdGVyYXRvciAgIHJlc3VsdChpdGVyYXRvcik7CiAgICByZXR1cm4gcmVzdWx0 ICs9IG9mZnNldDsKfQoKaW5saW5lIElUZXh0SXRlcmF0b3IKb3BlcmF0b3IrKGlvYzo6bnVtZXJp Y190IG9mZnNldCwKICAgICAgICAgIGNvbnN0IElUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKQp7CiAg ICBJVGV4dEl0ZXJhdG9yICAgcmVzdWx0KGl0ZXJhdG9yKTsKICAgIHJldHVybiByZXN1bHQgKz0g b2Zmc2V0Owp9CgppbmxpbmUgaW9jOjp1bmljaGFyX3QqCnZhbHVlX3R5cGUoY29uc3QgSVRleHRJ dGVyYXRvciYpCnsKICAgIHJldHVybiAwOwp9CgppbmxpbmUgaW9jOjpudW1lcmljX3QKZGlzdGFu Y2VfdHlwZShjb25zdCBJVGV4dEl0ZXJhdG9yJikKewogICAgcmV0dXJuIDA7Cn0KCiAKIAogCiAK IAoKIAogCiAKCmlubGluZQpJQ29uc3RUZXh0SXRlcmF0b3I6OklDb25zdFRleHRJdGVyYXRvcigp CiAgICAgICAgOiBmVGV4dCgmSVRleHQ6OmVtcHR5VGV4dCgpKSwKICAgICAgICAgIGZPZmZzZXQo MCkKewp9CgppbmxpbmUKSUNvbnN0VGV4dEl0ZXJhdG9yOjpJQ29uc3RUZXh0SXRlcmF0b3IoY29u c3QgSUNvbnN0VGV4dEl0ZXJhdG9yJiB0aGF0KQogICAgICAgIDogZlRleHQodGhhdC5mVGV4dCks CiAgICAgICAgICBmT2Zmc2V0KHRoYXQuZk9mZnNldCkKewp9CgppbmxpbmUKSUNvbnN0VGV4dEl0 ZXJhdG9yOjpJQ29uc3RUZXh0SXRlcmF0b3IoY29uc3QgSVRleHQqIHRoZVRleHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB0aGVPZmZzZXQpCiAgICAgICAg OiBmVGV4dCh0aGVUZXh0KSwKICAgICAgICAgIGZPZmZzZXQodGhlT2Zmc2V0KQp7Cn0KCmlubGlu ZQpJQ29uc3RUZXh0SXRlcmF0b3I6On5JQ29uc3RUZXh0SXRlcmF0b3IoKQp7Cn0KCmlubGluZSBJ Q29uc3RUZXh0SXRlcmF0b3ImCklDb25zdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0IElD b25zdFRleHRJdGVyYXRvciYgdGhhdCkKewogICAgZlRleHQgPSB0aGF0LmZUZXh0OwogICAgZk9m ZnNldCA9IHRoYXQuZk9mZnNldDsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklDb25zdFRl eHRJdGVyYXRvcjo6b3BlcmF0b3IgSVRleHRJdGVyYXRvcigpIGNvbnN0CnsKICAgIHJldHVybiBJ VGV4dEl0ZXJhdG9yKChJVGV4dCopZlRleHQsIGZPZmZzZXQpOyAgICAKICAgICAKICAgICAKICAg ICAKfQoKaW5saW5lIGJvb2wKSUNvbnN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IElD b25zdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QKewogICAgcmV0dXJuIGZUZXh0ID09IHRoYXQu ZlRleHQgJiYgZk9mZnNldCA9PSB0aGF0LmZPZmZzZXQ7Cn0KCmlubGluZSBib29sCklDb25zdFRl eHRJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJQ29uc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNv bnN0CnsKICAgIHJldHVybiBmVGV4dCAhPSB0aGF0LmZUZXh0IHx8IGZPZmZzZXQgIT0gdGhhdC5m T2Zmc2V0Owp9CgppbmxpbmUgYm9vbApJQ29uc3RUZXh0SXRlcmF0b3I6Om9wZXJhdG9yPihjb25z dCBJQ29uc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0CnsKICAgIGlmICghKCBmVGV4dCA9PSB0 aGF0LmZUZXh0ICkpIHRocm93RXhjZXB0aW9uKCkgOwogICAgcmV0dXJuIGZPZmZzZXQgPiB0aGF0 LmZPZmZzZXQ7Cn0KCmlubGluZSBib29sCklDb25zdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I8KGNv bnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QKewogICAgaWYgKCEoIGZUZXh0ID09 IHRoYXQuZlRleHQgKSkgdGhyb3dFeGNlcHRpb24oKSA7CiAgICByZXR1cm4gZk9mZnNldCA8IHRo YXQuZk9mZnNldDsKfQoKaW5saW5lIGJvb2wKSUNvbnN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvcj49 KGNvbnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QKewogICAgaWYgKCEoIGZUZXh0 ID09IHRoYXQuZlRleHQgKSkgdGhyb3dFeGNlcHRpb24oKSA7CiAgICByZXR1cm4gZk9mZnNldCA+ PSB0aGF0LmZPZmZzZXQ7Cn0KCmlubGluZSBib29sCklDb25zdFRleHRJdGVyYXRvcjo6b3BlcmF0 b3I8PShjb25zdCBJQ29uc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0CnsKICAgIGlmICghKCBm VGV4dCA9PSB0aGF0LmZUZXh0ICkpIHRocm93RXhjZXB0aW9uKCkgOwogICAgcmV0dXJuIGZPZmZz ZXQgPD0gdGhhdC5mT2Zmc2V0Owp9CgppbmxpbmUgaW9jOjp1bmljaGFyX3QKSUNvbnN0VGV4dEl0 ZXJhdG9yOjpvcGVyYXRvcltdKGlvYzo6bnVtZXJpY190IG9mZnNldCkgY29uc3QKewogICAgcmV0 dXJuICgqZlRleHQpWyhzaXplX3QpKGZPZmZzZXQgKyBvZmZzZXQpXTsKfQoKaW5saW5lIGlvYzo6 dW5pY2hhcl90CklDb25zdFRleHRJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKewogICAgcmV0 dXJuICgqZlRleHQpW2ZPZmZzZXRdOwp9CgppbmxpbmUgSUNvbnN0VGV4dEl0ZXJhdG9yJgpJQ29u c3RUZXh0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQp7CiAgICBmT2Zmc2V0Kys7CiAgICByZXR1cm4g KnRoaXM7Cn0KCmlubGluZSBJQ29uc3RUZXh0SXRlcmF0b3IKSUNvbnN0VGV4dEl0ZXJhdG9yOjpv cGVyYXRvcisrKGludCkKewogICAgSUNvbnN0VGV4dEl0ZXJhdG9yICAgICAgdGVtcCgqdGhpcyk7 CiAgICBmT2Zmc2V0Kys7CiAgICByZXR1cm4gdGVtcDsKfQoKaW5saW5lIElDb25zdFRleHRJdGVy YXRvciYKSUNvbnN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvci0tKCkKewogICAgZk9mZnNldC0tOwog ICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSUNvbnN0VGV4dEl0ZXJhdG9yCklDb25zdFRleHRJ dGVyYXRvcjo6b3BlcmF0b3ItLShpbnQpCnsKICAgIElDb25zdFRleHRJdGVyYXRvciAgICAgIHRl bXAoKnRoaXMpOwogICAgZk9mZnNldC0tOwogICAgcmV0dXJuIHRlbXA7Cn0KCmlubGluZSBJQ29u c3RUZXh0SXRlcmF0b3ImCklDb25zdFRleHRJdGVyYXRvcjo6b3BlcmF0b3IrPShpb2M6Om51bWVy aWNfdCBkaXN0YW5jZSkKewogICAgZk9mZnNldCArPSBkaXN0YW5jZTsKICAgIHJldHVybiAqdGhp czsKfQoKaW5saW5lIElDb25zdFRleHRJdGVyYXRvciYKSUNvbnN0VGV4dEl0ZXJhdG9yOjpvcGVy YXRvci09KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKQp7CiAgICBmT2Zmc2V0IC09IGRpc3RhbmNl OwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSUNvbnN0VGV4dEl0ZXJhdG9yCklDb25zdFRl eHRJdGVyYXRvcjo6b3BlcmF0b3ItKGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKSBjb25zdAp7CiAg ICBJQ29uc3RUZXh0SXRlcmF0b3IgICAgICByZXN1bHQoKnRoaXMpOwogICAgcmV0dXJuIHJlc3Vs dCAtPSBkaXN0YW5jZTsKfQoKaW5saW5lIGlvYzo6bnVtZXJpY190CklDb25zdFRleHRJdGVyYXRv cjo6b3BlcmF0b3ItKGNvbnN0IElDb25zdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QKewogICAg aWYgKCEoIGZUZXh0ID09IHRoYXQuZlRleHQgKSkgdGhyb3dFeGNlcHRpb24oKSA7CiAgICByZXR1 cm4gZk9mZnNldCAtIHRoYXQuZk9mZnNldDsKfQoKaW5saW5lIGNvbnN0IElUZXh0KgpJQ29uc3RU ZXh0SXRlcmF0b3I6OnRleHQoKSBjb25zdAp7CiAgICByZXR1cm4gZlRleHQ7Cn0KCmlubGluZSBz aXplX3QKSUNvbnN0VGV4dEl0ZXJhdG9yOjpvZmZzZXQoKSBjb25zdAp7CiAgICByZXR1cm4gZk9m ZnNldDsKfQoKIAogCiAKCmlubGluZSBJQ29uc3RUZXh0SXRlcmF0b3IKb3BlcmF0b3IrKGNvbnN0 IElDb25zdFRleHRJdGVyYXRvciYgaXRlcmF0b3IsCiAgICAgICAgICBpb2M6Om51bWVyaWNfdCBv ZmZzZXQpCnsKICAgIElDb25zdFRleHRJdGVyYXRvciAgICAgIHJlc3VsdChpdGVyYXRvcik7CiAg ICByZXR1cm4gcmVzdWx0ICs9IG9mZnNldDsKfQoKaW5saW5lIElDb25zdFRleHRJdGVyYXRvcgpv cGVyYXRvcisoaW9jOjpudW1lcmljX3Qgb2Zmc2V0LAogICAgICAgICAgY29uc3QgSUNvbnN0VGV4 dEl0ZXJhdG9yJiBpdGVyYXRvcikKewogICAgSUNvbnN0VGV4dEl0ZXJhdG9yICAgICAgcmVzdWx0 KGl0ZXJhdG9yKTsKICAgIHJldHVybiByZXN1bHQgKz0gb2Zmc2V0Owp9CgppbmxpbmUgaW9jOjp1 bmljaGFyX3QqCnZhbHVlX3R5cGUoY29uc3QgSUNvbnN0VGV4dEl0ZXJhdG9yJikKewogICAgcmV0 dXJuIDA7Cn0KCmlubGluZSBpb2M6Om51bWVyaWNfdApkaXN0YW5jZV90eXBlKGNvbnN0IElDb25z dFRleHRJdGVyYXRvciYpCnsKICAgIHJldHVybiAwOwp9CgogCiAKIAogCiAKCiAKIAogCgp0ZW1w bGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGluZQpJUmV2 ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPjo6SVJldmVyc2VJdGVyYXRv cigpCiAgICAgICAgOiBmUmVhbEl0ZXJhdG9yKCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJ dGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGluZQpJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFs SXRlcmF0b3IsIEFSZXR1cm5UeXBlPjo6SVJldmVyc2VJdGVyYXRvcihjb25zdCBBUmVhbEl0ZXJh dG9yJiAgICAgdGhlUmVhbEl0ZXJhdG9yKQogICAgICAgIDogZlJlYWxJdGVyYXRvcih0aGVSZWFs SXRlcmF0b3IpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1 cm5UeXBlPgppbmxpbmUKSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlw ZT46OklSZXZlcnNlSXRlcmF0b3IoY29uc3QgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9y LCBBUmV0dXJuVHlwZT4mICAgICAgdGhhdCkKICAgICAgICA6IGZSZWFsSXRlcmF0b3IodGhhdC5m UmVhbEl0ZXJhdG9yKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBB UmV0dXJuVHlwZT4KaW5saW5lCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVy blR5cGU+Ojp+SVJldmVyc2VJdGVyYXRvcigpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRl cmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0 ZXJhdG9yLCBBUmV0dXJuVHlwZT4mCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJl dHVyblR5cGU+OjpvcGVyYXRvcj0oY29uc3QgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9y LCBBUmV0dXJuVHlwZT4mICAgICB0aGF0KQp7CiAgICBmUmVhbEl0ZXJhdG9yID0gdGhhdC5mUmVh bEl0ZXJhdG9yOwogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVy YXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGluZQpJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRl cmF0b3IsIEFSZXR1cm5UeXBlPjo6b3BlcmF0b3IgQVJlYWxJdGVyYXRvcigpIGNvbnN0CnsKICAg IHJldHVybiBmUmVhbEl0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwg Y2xhc3MgQVJldHVyblR5cGU+CmlubGluZSBib29sCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVy YXRvciwgQVJldHVyblR5cGU+OjpvcGVyYXRvcj09KGNvbnN0IElSZXZlcnNlSXRlcmF0b3I8QVJl YWxJdGVyYXRvciwgQVJldHVyblR5cGU+JiAgICB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZlJl YWxJdGVyYXRvciA9PSB0aGF0LmZSZWFsSXRlcmF0b3I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUmVh bEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5lIGJvb2wKSVJldmVyc2VJdGVyYXRv cjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT46Om9wZXJhdG9yIT0oY29uc3QgSVJldmVyc2VJ dGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mICAgIHRoYXQpIGNvbnN0CnsKICAg IHJldHVybiBmUmVhbEl0ZXJhdG9yICE9IHRoYXQuZlJlYWxJdGVyYXRvcjsKfQoKdGVtcGxhdGUg PGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgYm9vbApJUmV2 ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPjo6b3BlcmF0b3I+KGNvbnN0 IElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+JiAgICAgdGhhdCkg Y29uc3QKewogICAgcmV0dXJuIGZSZWFsSXRlcmF0b3IgPiB0aGF0LmZSZWFsSXRlcmF0b3I7Cn0K CnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5l IGJvb2wKSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT46Om9wZXJh dG9yPChjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYg ICAgIHRoYXQpIGNvbnN0CnsKICAgIHJldHVybiBmUmVhbEl0ZXJhdG9yIDwgdGhhdC5mUmVhbEl0 ZXJhdG9yOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5 cGU+CmlubGluZSBib29sCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5 cGU+OjpvcGVyYXRvcj49KGNvbnN0IElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJl dHVyblR5cGU+JiAgICB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZlJlYWxJdGVyYXRvciA+PSB0 aGF0LmZSZWFsSXRlcmF0b3I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFz cyBBUmV0dXJuVHlwZT4KaW5saW5lIGJvb2wKSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9y LCBBUmV0dXJuVHlwZT46Om9wZXJhdG9yPD0oY29uc3QgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0 ZXJhdG9yLCBBUmV0dXJuVHlwZT4mICAgIHRoYXQpIGNvbnN0CnsKICAgIHJldHVybiBmUmVhbEl0 ZXJhdG9yIDw9IHRoYXQuZlJlYWxJdGVyYXRvcjsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRl cmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgQVJldHVyblR5cGUKSVJldmVyc2VJdGVy YXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT46Om9wZXJhdG9yW10oaW9jOjpudW1lcmlj X3QgICBvZmZzZXQpIGNvbnN0CnsKICAgIHJldHVybiBmUmVhbEl0ZXJhdG9yW29mZnNldF07Cn0K CnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5l IEFSZXR1cm5UeXBlCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+ OjpvcGVyYXRvciooKSBjb25zdAp7CiAgICByZXR1cm4gKmZSZWFsSXRlcmF0b3I7Cn0KCnRlbXBs YXRlIDxjbGFzcyBBUmVhbEl0ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5lIElSZXZl cnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+JgpJUmV2ZXJzZUl0ZXJhdG9y PEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPjo6b3BlcmF0b3IrKygpCnsKICAgIC0tZlJlYWxJ dGVyYXRvcjsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0 b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJh dG9yLCBBUmV0dXJuVHlwZT4KSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJu VHlwZT46Om9wZXJhdG9yKysoaW50KQp7CiAgICByZXR1cm4gZlJlYWxJdGVyYXRvci0tOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGluZSBJ UmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiYKSVJldmVyc2VJdGVy YXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT46Om9wZXJhdG9yLS0oKQp7CiAgICArK2ZS ZWFsSXRlcmF0b3I7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0 ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5lIElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJ dGVyYXRvciwgQVJldHVyblR5cGU+CklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJl dHVyblR5cGU+OjpvcGVyYXRvci0tKGludCkKewogICAgcmV0dXJuIGZSZWFsSXRlcmF0b3IrKzsK fQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxp bmUgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mCklSZXZlcnNl SXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+OjpvcGVyYXRvcis9KGlvYzo6bnVt ZXJpY190ICAgICAgICAgICBkaXN0YW5jZSkKewogICAgZlJlYWxJdGVyYXRvciAtPSBkaXN0YW5j ZTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNs YXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBB UmV0dXJuVHlwZT4mCklSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVyblR5cGU+ OjpvcGVyYXRvci09KGlvYzo6bnVtZXJpY190ICAgICAgICAgICBkaXN0YW5jZSkKewogICAgZlJl YWxJdGVyYXRvciArPSBkaXN0YW5jZTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs YXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgSVJldmVyc2VJdGVy YXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4KSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0 ZXJhdG9yLCBBUmV0dXJuVHlwZT46Om9wZXJhdG9yLShpb2M6Om51bWVyaWNfdCAgICAgICAgICAg IGRpc3RhbmNlKSBjb25zdAp7CiAgICByZXR1cm4gZlJlYWxJdGVyYXRvciArIGRpc3RhbmNlOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGlu ZSBpb2M6Om51bWVyaWNfdApJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5U eXBlPjo6b3BlcmF0b3ItKGNvbnN0IElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJl dHVyblR5cGU+JiAgICAgdGhhdCkgY29uc3QKewogICAgIAogICAgIAogICAgIAogICAgIAogICAg IAogICAgcmV0dXJuIGZSZWFsSXRlcmF0b3IgLSB0aGF0LmZSZWFsSXRlcmF0b3I7Cn0KCiAKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJlYWxJdGVyYXRvciwgY2xhc3MgQVJldHVyblR5cGU+CmlubGlu ZSBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPgpvcGVyYXRvciso Y29uc3QgSVJldmVyc2VJdGVyYXRvcjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mIGl0ZXJh dG9yLAogICAgICAgICAgaW9jOjpudW1lcmljX3Qgb2Zmc2V0KQp7CiAgICBJUmV2ZXJzZUl0ZXJh dG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBlPiAgICByZXR1cm5WYWwoaXRlcmF0b3IpOwog ICAgcmV0dXJuIHJldHVyblZhbCArPSBvZmZzZXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUmVhbEl0 ZXJhdG9yLCBjbGFzcyBBUmV0dXJuVHlwZT4KaW5saW5lIElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJ dGVyYXRvciwgQVJldHVyblR5cGU+Cm9wZXJhdG9yKyhpb2M6Om51bWVyaWNfdCBvZmZzZXQsCiAg ICAgICAgICBjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0b3IsIEFSZXR1cm5UeXBl PiYgaXRlcmF0b3IpCnsKICAgIElSZXZlcnNlSXRlcmF0b3I8QVJlYWxJdGVyYXRvciwgQVJldHVy blR5cGU+ICAgIHJldHVyblZhbChpdGVyYXRvcik7CiAgICByZXR1cm4gcmV0dXJuVmFsICs9IG9m ZnNldDsKfQoKdGVtcGxhdGUgPGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBl PgppbmxpbmUgaW9jOjp1bmljaGFyX3QqCnZhbHVlX3R5cGUoY29uc3QgSVJldmVyc2VJdGVyYXRv cjxBUmVhbEl0ZXJhdG9yLCBBUmV0dXJuVHlwZT4mKQp7CiAgICByZXR1cm4gMDsKfQoKdGVtcGxh dGUgPGNsYXNzIEFSZWFsSXRlcmF0b3IsIGNsYXNzIEFSZXR1cm5UeXBlPgppbmxpbmUgaW9jOjpu dW1lcmljX3QKZGlzdGFuY2VfdHlwZShjb25zdCBJUmV2ZXJzZUl0ZXJhdG9yPEFSZWFsSXRlcmF0 b3IsIEFSZXR1cm5UeXBlPiYpCnsKICAgIHJldHVybiAwOwp9CgogCiAKIAogCiAKIAoKIAogCiAK IAogCiAKIAogCiAKCmlubGluZSBJUmV2ZXJzZVRleHRJdGVyYXRvcgpvcGVyYXRvcisoY29uc3Qg SVJldmVyc2VUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yLAogICAgICAgICAgaW9jOjpudW1lcmljX3Qg b2Zmc2V0KQp7CiAgICBJUmV2ZXJzZVRleHRJdGVyYXRvciAgICByZXR1cm5WYWwoaXRlcmF0b3Ip OwogICAgcmV0dXJuIHJldHVyblZhbCArPSBvZmZzZXQ7Cn0KCmlubGluZSBJUmV2ZXJzZVRleHRJ dGVyYXRvcgpvcGVyYXRvcisoaW9jOjpudW1lcmljX3Qgb2Zmc2V0LAogICAgICAgICAgY29uc3Qg SVJldmVyc2VUZXh0SXRlcmF0b3ImIGl0ZXJhdG9yKQp7CiAgICBJUmV2ZXJzZVRleHRJdGVyYXRv ciAgICByZXR1cm5WYWwoaXRlcmF0b3IpOwogICAgcmV0dXJuIHJldHVyblZhbCArPSBvZmZzZXQ7 Cn0KCmlubGluZSBJUmV2ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yCm9wZXJhdG9yKyhjb25zdCBJUmV2 ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yJiBpdGVyYXRvciwKICAgICAgICAgIGlvYzo6bnVtZXJpY190 IG9mZnNldCkKewogICAgSVJldmVyc2VDb25zdFRleHRJdGVyYXRvciAgICAgICByZXR1cm5WYWwo aXRlcmF0b3IpOwogICAgcmV0dXJuIHJldHVyblZhbCArPSBvZmZzZXQ7Cn0KCmlubGluZSBJUmV2 ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yCm9wZXJhdG9yKyhpb2M6Om51bWVyaWNfdCBvZmZzZXQsCiAg ICAgICAgICBjb25zdCBJUmV2ZXJzZUNvbnN0VGV4dEl0ZXJhdG9yJiBpdGVyYXRvcikKewogICAg SVJldmVyc2VDb25zdFRleHRJdGVyYXRvciAgICAgICByZXR1cm5WYWwoaXRlcmF0b3IpOwogICAg cmV0dXJuIHJldHVyblZhbCArPSBvZmZzZXQ7Cn0KCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKCmlubGluZQpJRmFzdFRleHRJdGVyYXRvcjo6SUZhc3RUZXh0SXRlcmF0b3IoKQogICAg ICAgIDogZkNoYXIoMCksCiAgICAgICAgICBmR2FwU3RhcnQoMCksCiAgICAgICAgICBmR2FwTGVu Z3RoKDApCnsKICAgICAKICAgICAKICAgICAKfQoKaW5saW5lCklGYXN0VGV4dEl0ZXJhdG9yOjpJ RmFzdFRleHRJdGVyYXRvcihpb2M6OnVuaWNoYXJfdCogdGhlQ2hhciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90KiBnYXBTdGFydCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgIGdhcExlbmd0aCkKICAgICAgICA6 IGZDaGFyKHRoZUNoYXIpLAogICAgICAgICAgZkdhcFN0YXJ0KGdhcFN0YXJ0KSwKICAgICAgICAg IGZHYXBMZW5ndGgoZ2FwTGVuZ3RoKQp7Cn0KCmlubGluZQpJRmFzdFRleHRJdGVyYXRvcjo6SUZh c3RUZXh0SXRlcmF0b3IoY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImIHRoYXQpCiAgICAgICAgOiBm Q2hhcih0aGF0LmZDaGFyKSwKICAgICAgICAgIGZHYXBTdGFydCh0aGF0LmZHYXBTdGFydCksCiAg ICAgICAgICBmR2FwTGVuZ3RoKHRoYXQuZkdhcExlbmd0aCkKewp9CgppbmxpbmUKSUZhc3RUZXh0 SXRlcmF0b3I6On5JRmFzdFRleHRJdGVyYXRvcigpCnsKfQoKaW5saW5lIElGYXN0VGV4dEl0ZXJh dG9yJgpJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9y JiB0aGF0KQp7CiAgICBmQ2hhciA9IHRoYXQuZkNoYXI7CiAgICBmR2FwU3RhcnQgPSB0aGF0LmZH YXBTdGFydDsKICAgIGZHYXBMZW5ndGggPSB0aGF0LmZHYXBMZW5ndGg7CiAgICByZXR1cm4gKnRo aXM7Cn0KCmlubGluZSBib29sCklGYXN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IElG YXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZkNoYXIgPT0gdGhhdC5m Q2hhcjsKfQoKaW5saW5lIGJvb2wKSUZhc3RUZXh0SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3Qg SUZhc3RUZXh0SXRlcmF0b3ImIHRoYXQpIGNvbnN0CnsKICAgIHJldHVybiBmQ2hhciAhPSB0aGF0 LmZDaGFyOwp9CgppbmxpbmUgYm9vbApJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I+KGNvbnN0 IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZkNoYXIgPiB0aGF0 LmZDaGFyOwp9CgppbmxpbmUgYm9vbApJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I8KGNvbnN0 IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZkNoYXIgPCB0aGF0 LmZDaGFyOwp9CgppbmxpbmUgYm9vbApJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3I+PShjb25z dCBJRmFzdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QKewogICAgcmV0dXJuIGZDaGFyID49IHRo YXQuZkNoYXI7Cn0KCmlubGluZSBib29sCklGYXN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvcjw9KGNv bnN0IElGYXN0VGV4dEl0ZXJhdG9yJiB0aGF0KSBjb25zdAp7CiAgICByZXR1cm4gZkNoYXIgPD0g dGhhdC5mQ2hhcjsKfQoKaW5saW5lIGlvYzo6dW5pY2hhcl90JgpJRmFzdFRleHRJdGVyYXRvcjo6 b3BlcmF0b3IqKCkgY29uc3QKewogICAgcmV0dXJuICpmQ2hhcjsKfQoKaW5saW5lIElGYXN0VGV4 dEl0ZXJhdG9yJgpJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3IrKygpCnsKICAgIGZDaGFyKys7 CiAgICBpZiAoZkdhcFN0YXJ0ICYmIGZDaGFyID09IGZHYXBTdGFydCkKICAgICAgICBmQ2hhciAr PSBmR2FwTGVuZ3RoOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSUZhc3RUZXh0SXRlcmF0 b3IKSUZhc3RUZXh0SXRlcmF0b3I6Om9wZXJhdG9yKysoaW50KQp7CiAgICBJRmFzdFRleHRJdGVy YXRvciAgICAgICB0ZW1wKCp0aGlzKTsKICAgICsrKCp0aGlzKTsKICAgIHJldHVybiB0ZW1wOwp9 CgppbmxpbmUgSUZhc3RUZXh0SXRlcmF0b3ImCklGYXN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvci0t KCkKewogICAgZkNoYXItLTsKICAgIGlmIChmR2FwU3RhcnQgJiYgZkNoYXIgKyAxID09IGZHYXBT dGFydCArIGZHYXBMZW5ndGgpCiAgICAgICAgZkNoYXIgLT0gZkdhcExlbmd0aDsKICAgIHJldHVy biAqdGhpczsKfQoKaW5saW5lIElGYXN0VGV4dEl0ZXJhdG9yCklGYXN0VGV4dEl0ZXJhdG9yOjpv cGVyYXRvci0tKGludCkKewogICAgSUZhc3RUZXh0SXRlcmF0b3IgICAgICAgdGVtcCgqdGhpcyk7 CiAgICAtLSgqdGhpcyk7CiAgICByZXR1cm4gdGVtcDsKfQoKaW5saW5lIElGYXN0VGV4dEl0ZXJh dG9yJgpJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3IrPShpb2M6Om51bWVyaWNfdCBkaXN0YW5j ZSkKewogICAgaW9jOjp1bmljaGFyX3QqICAgICAgICB0ZW1wID0gZkNoYXIgKyBkaXN0YW5jZTsK ICAgIGlmIChmR2FwU3RhcnQpIHsKICAgICAgICBpZiAoZkNoYXIgPCBmR2FwU3RhcnQgJiYgdGVt cCA+PSBmR2FwU3RhcnQpCiAgICAgICAgICAgIHRlbXAgKz0gZkdhcExlbmd0aDsKICAgICAgICBl bHNlIGlmIChmQ2hhciA+PSBmR2FwU3RhcnQgKyBmR2FwTGVuZ3RoICYmIHRlbXAgPCBmR2FwU3Rh cnQgKyBmR2FwTGVuZ3RoKQogICAgICAgICAgICB0ZW1wIC09IGZHYXBMZW5ndGg7CiAgICB9CiAg ICBmQ2hhciA9IHRlbXA7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBpb2M6OnVuaWNoYXJf dCYKSUZhc3RUZXh0SXRlcmF0b3I6Om9wZXJhdG9yW10oaW9jOjpudW1lcmljX3Qgb2Zmc2V0KSBj b25zdAp7CiAgICBJRmFzdFRleHRJdGVyYXRvciAgICAgICB0ZW1wKCp0aGlzKTsKICAgIHRlbXAg Kz0gb2Zmc2V0OwogICAgcmV0dXJuICp0ZW1wOwp9CgppbmxpbmUgSUZhc3RUZXh0SXRlcmF0b3Im CklGYXN0VGV4dEl0ZXJhdG9yOjpvcGVyYXRvci09KGlvYzo6bnVtZXJpY190IGRpc3RhbmNlKQp7 CiAgICByZXR1cm4gKnRoaXMgKz0gKC1kaXN0YW5jZSk7Cn0KCmlubGluZSBJRmFzdFRleHRJdGVy YXRvcgpJRmFzdFRleHRJdGVyYXRvcjo6b3BlcmF0b3ItKGlvYzo6bnVtZXJpY190IGRpc3RhbmNl KSBjb25zdAp7CiAgICBJRmFzdFRleHRJdGVyYXRvciAgICAgICB0ZW1wKCp0aGlzKTsKICAgIHJl dHVybiB0ZW1wIC09IGRpc3RhbmNlOwp9CgppbmxpbmUgaW9jOjpudW1lcmljX3QKSUZhc3RUZXh0 SXRlcmF0b3I6Om9wZXJhdG9yLShjb25zdCBJRmFzdFRleHRJdGVyYXRvciYgdGhhdCkgY29uc3QK ewogICAgaW9jOjpudW1lcmljX3QgICAgZGlzdGFuY2U7CgogICAgZGlzdGFuY2UgPSBmQ2hhciAt IHRoYXQuZkNoYXI7CiAgICBpZiAoZkdhcFN0YXJ0ICYmICgoZkNoYXIgPCBmR2FwU3RhcnQgJiYg dGhhdC5mQ2hhciA+PSBmR2FwU3RhcnQpIHx8IChmQ2hhciA+PSBmR2FwU3RhcnQgKyBmR2FwTGVu Z3RoICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZDaGFyIDwgZkdhcFN0YXJ0ICsgZkdhcExlbmd0 aCkpKQogICAgICAgIGRpc3RhbmNlIC09IGZHYXBMZW5ndGg7CiAgICByZXR1cm4gZGlzdGFuY2U7 Cn0KCiAKIAogCgppbmxpbmUgSUZhc3RUZXh0SXRlcmF0b3IKb3BlcmF0b3IrKGNvbnN0IElGYXN0 VGV4dEl0ZXJhdG9yJiBpdGVyYXRvciwKICAgICAgICAgIGlvYzo6bnVtZXJpY190IG9mZnNldCkK ewogICAgSUZhc3RUZXh0SXRlcmF0b3IgICAgICAgcmVzdWx0KGl0ZXJhdG9yKTsKICAgIHJldHVy biByZXN1bHQgKz0gb2Zmc2V0Owp9CgppbmxpbmUgSUZhc3RUZXh0SXRlcmF0b3IKb3BlcmF0b3Ir KGlvYzo6bnVtZXJpY190IG9mZnNldCwKICAgICAgICAgIGNvbnN0IElGYXN0VGV4dEl0ZXJhdG9y JiBpdGVyYXRvcikKewogICAgSUZhc3RUZXh0SXRlcmF0b3IgICAgICAgcmVzdWx0KGl0ZXJhdG9y KTsKICAgIHJldHVybiByZXN1bHQgKz0gb2Zmc2V0Owp9CgppbmxpbmUgaW9jOjp1bmljaGFyX3Qq CnZhbHVlX3R5cGUoY29uc3QgSUZhc3RUZXh0SXRlcmF0b3ImKQp7CiAgICByZXR1cm4gMDsKfQoK aW5saW5lIGlvYzo6bnVtZXJpY190CmRpc3RhbmNlX3R5cGUoY29uc3QgSUZhc3RUZXh0SXRlcmF0 b3ImKQp7CiAgICByZXR1cm4gMDsKfQoKIAogCiAKIAogCgogCgoKIAogCiAKIAogCiAKIAogCiMg MTAyMiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p dHh0aXRlci5pbmwiCgoKCiMgNDUxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2l0eHRpdGVyLmhwcCIgMgoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUp CiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMzAgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXR4dHN0b3Iu aHBwIiAyCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1s aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzNCAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdHh0c3Rvci5ocHAiIDIKCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JU X0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5n KF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgog CgogCiAKCiAKY2xhc3MgSVRleHQ7CmNsYXNzIElEYXRhU3RyZWFtOwpjbGFzcyBJU3R5bGVTdG9y YWdlOwpjbGFzcyBJVGV4dFN0eWxlOwpjbGFzcyBJVGV4dFN0eWxlU2V0OwpjbGFzcyBJU3RyaW5n OwogCgogCgogCiAKIAogCiAKIAogCiAKIAogCgpjbGFzcyBJVGV4dFN0b3JhZ2UgOiBwdWJsaWMg SU1SZWZDb3VudGVkLCBwdWJsaWMgdmlydHVhbCBJTVN0cmVhbWFibGUgCnsKcHVibGljOgogICAg dHlwZWRlZiBzaXplX3Qgb2Zmc2V0X3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBsZW5ndGhfdHlw ZTsKCiAgICBzdGF0aWMgSVN5bmNocm9uaXplZDxJVGV4dFN0b3JhZ2UgKj4gZmdFbXB0eVRleHRT dG9yYWdlOwoKICAgIHZpcnR1YWwgfklUZXh0U3RvcmFnZSgpOwoKICAgIHN0YXRpYyBJVGV4dFN0 b3JhZ2UqIGNyZWF0ZU5ldyhsZW5ndGhfdHlwZSBtaW5DYXBhY2l0eSk7CiAgICB2b2lkIGRyb3Ao KTsKCiAgICB2aXJ0dWFsIHZvaWQgaW5pdEZyb20oSVRleHRTdG9yYWdlKiB0aGF0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlIHBvczEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVuZ3RoX3R5cGUgbGVuZ3RoMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz ZXRfdHlwZSBwb3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlIGxlbmd0 aDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgZ2FwTGVuZ3RoLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2lsbERyb3BPcmlnaW5hbCk7CgogICAgdmlydHVh bCBJVGV4dFN0b3JhZ2UqIHJlcGxhY2Uob2Zmc2V0X3R5cGUgdGhpc1BvcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJVGV4dFN0b3JhZ2UqIHRoYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvZmZzZXRfdHlwZSB0aGF0UG9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCk7CgogICAgdmlydHVhbCBJ VGV4dFN0b3JhZ2UqIHJlcGxhY2Uob2Zmc2V0X3R5cGUgdGhpc1BvcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlIHRoaXNMZW5ndGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmlDaGFyKiB0aGF0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgdGhhdExlbmd0aCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlIGdhcExlbmd0aCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2wgcHJvcGFnYXRlU3R5bGVzID0gZmFsc2UpOwoKICAgIHZpcnR1YWwgSVRleHRT dG9yYWdlKiByZXBsYWNlKG9mZnNldF90eXBlIHRoaXNQb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsZW5ndGhfdHlwZSB0aGlzTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxlbmd0aF90eXBlIHRoYXRMZW5ndGgpOwoKICAgIElUZXh0U3RvcmFnZSogYXRQ dXQob2Zmc2V0X3R5cGUgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBVbmlDaGFyIG5ld0No YXIpOwoKICAgIHZpcnR1YWwgdm9pZCBjb3B5T3V0KFVuaUNoYXIqIHRoYXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICBvZmZzZXRfdHlwZSB0aGlzUG9zLAogICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoX3R5cGUgbnVtQ2hhcnMpIGNvbnN0ID0gMDsKCiAgICB2aXJ0dWFsIGNvbnN0IElT dHJpbmcmIGNoYXJCdWZmZXIoaW50IGNvZGVzZXQpOwogICAgdmlydHVhbCBJVGV4dFN0b3JhZ2Uq IHJlcGxhY2VXaXRoQ2hhckJ1ZmZlcihjb25zdCBJU3RyaW5nJiBidWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2Rlc2V0KTsKCiAgICB2 aXJ0dWFsIGNvbnN0IFVuaUNoYXIqIGNfc3RyKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBVbmlD aGFyJiBhdChvZmZzZXRfdHlwZSBwb3MpID0gMDsKCiAgICB2aXJ0dWFsIGxvbmcgaGFzaCgpOwoK ICAgIGxlbmd0aF90eXBlIGxlbmd0aCgpIGNvbnN0OwogICAgbGVuZ3RoX3R5cGUgbWF4U2l6ZSgp IGNvbnN0OwogICAgbGVuZ3RoX3R5cGUgY2FwYWNpdHkoKSBjb25zdDsKICAgIHZpcnR1YWwgSVRl eHRTdG9yYWdlKiByZXNlcnZlKGxlbmd0aF90eXBlIG51bUNoYXJzKSA9IDA7CiAgICB2aXJ0dWFs IElUZXh0U3RvcmFnZSogY29tcGFjdCgpID0gMDsKICAgIHZpcnR1YWwgY29uc3QgVW5pQ2hhciog c3RvcmFnZUNodW5rKG9mZnNldF90eXBlIHNlYXJjaFBvcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9mZnNldF90eXBlJiBjaHVua1BvcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlJiBjaHVua0xlbmd0aCkgY29uc3Qg PSAwOwoKICAgIElUZXh0U3RvcmFnZSogY2xvbmVJZk5lY2Vzc2FyeSgpOwoKICAgIGJvb2wgaXNT dHlsZWQoKSBjb25zdDsKICAgIElTdHlsZVN0b3JhZ2UqIHN0eWxlcygpOwogICAgY29uc3QgSVN0 eWxlU3RvcmFnZSogc3R5bGVzKCkgY29uc3Q7CiAgICB2b2lkIGluaXRTdHlsZXNGcm9tKElUZXh0 U3RvcmFnZSogdGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5BZG9wdCk7CiAg ICB2b2lkIHJlbW92ZUFsbFN0eWxlcygpOwoKICAgIHZpcnR1YWwgSUZhc3RUZXh0SXRlcmF0b3IK ICAgIGJlZ2luQXQob2Zmc2V0X3R5cGUgcG9zaXRpb24pID0gMDsKCiAgICBzdGF0aWMgSVRleHRT dG9yYWdlKiBlbXB0eVRleHRTdG9yYWdlKCk7CgogICAgdmlydHVhbCB2b2lkIHByaW50RGVidWdJ bmZvKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgICBJVGV4dFN0b3JhZ2UoKTsKICAgIElUZXh0U3Rv cmFnZShjb25zdCBJVGV4dFN0b3JhZ2UmIHRoYXQpOwoKICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVJ bnNlcnRHYXAob2Zmc2V0X3R5cGUgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsZW5ndGhfdHlwZSBudW1DaGFycykgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEZWxl dGVDaGFycyhvZmZzZXRfdHlwZSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoX3R5cGUgbnVtQ2hhcnMpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgY29weUluKG9m ZnNldF90eXBlIHRoaXNQb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0U3RvcmFnZSog dGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X3R5cGUgdGhhdFBvcywKICAgICAg ICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgbnVtQ2hhcnMpOwoKICAgIHZpcnR1YWwgdm9p ZCBoYW5kbGVDb3B5SW4ob2Zmc2V0X3R5cGUgdGhpc1BvcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgVW5pQ2hhciogdGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVuZ3RoX3R5cGUgbnVtQ2hhcnMpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmls bChvZmZzZXRfdHlwZSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlDaGFyIGZp bGxDaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgbnVtQ29waWVz KSA9IDA7CgogICAgYm9vbCBtdXN0Q29weShsZW5ndGhfdHlwZSBuZXdMZW5ndGgpIGNvbnN0Owog ICAgYm9vbCBtdXN0Q29weShsZW5ndGhfdHlwZSBuZXdMZW5ndGgsCiAgICAgICAgICAgICAgICAg IGNvbnN0IElUZXh0U3RvcmFnZSogdGhhdCkgY29uc3Q7CgogICAgSVRleHRTdG9yYWdlKiBtYWtl Q29weShsZW5ndGhfdHlwZSBuZXdDYXBhY2l0eSA9IDApOwoKICAgIElUZXh0U3RvcmFnZSogbWFr ZUNvcHkob2Zmc2V0X3R5cGUgZ2FwUG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5n dGhfdHlwZSBvbGRHYXBMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90 eXBlIG9sZFRvdGFsTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlw ZSBuZXdUb3RhbExlbmd0aCk7CgogICAgSVRleHRTdG9yYWdlKiBtb2RpZnlJblBsYWNlKG9mZnNl dF90eXBlIGdhcFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlw ZSBvbGRHYXBMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoX3R5 cGUgbmV3R2FwTGVuZ3RoKTsKCiAgICB2b2lkIHNldENhcGFjaXR5KGxlbmd0aF90eXBlIG5ld0Nh cGFjaXR5KTsKICAgIHZvaWQgc2V0TGVuZ3RoKGxlbmd0aF90eXBlIG5ld0xlbmd0aCk7CiAgICB2 b2lkIHNldFN0eWxlcyhJU3R5bGVTdG9yYWdlKiBuZXdTdHlsZXMpOwoKICAgIHZpcnR1YWwgdm9p ZCB3cml0ZVRvU3RyZWFtKElEYXRhU3RyZWFtJiB0b1doZXJlKSBjb25zdDsKICAgIHZpcnR1YWwg dm9pZCByZWFkRnJvbVN0cmVhbShJRGF0YVN0cmVhbSYgZnJvbVdoZXJlKTsKCiAgICBzdGF0aWMg dm9pZCBmaWxsSW5JdGVyYXRvckZpZWxkcyhJRmFzdFRleHRJdGVyYXRvciYgaXRlcmF0b3IsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlDaGFyKiB0aGVDaGFyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pQ2hhciogZ2FwU3RhcnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSBnYXBMZW5ndGgpOwoK cHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBJU3RyZWFtSW5UZXh0U3RvcmFnZTsKCiAgICBJVGV4 dFN0b3JhZ2UmIG9wZXJhdG9yPShjb25zdCBJVGV4dFN0b3JhZ2UmIHRoYXQpOwoKICAgIGxlbmd0 aF90eXBlIGZMZW5ndGg7CiAgICBsZW5ndGhfdHlwZSBmQ2FwYWNpdHk7CiAgICBJU3RyaW5nICpm OEJpdENoYXJDYWNoZTsKICAgIGxvbmcgZkhhc2g7CiAgICBJU3R5bGVTdG9yYWdlKiBmU3R5bGVz Owp9OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGlu Zyhwb3ApCgoKCgogCgogCmlubGluZSB2b2lkCklUZXh0U3RvcmFnZTo6ZHJvcCgpCnsKICAgIHJl bW92ZVJlZigpOwp9CgppbmxpbmUgSVRleHRTdG9yYWdlOjpsZW5ndGhfdHlwZQpJVGV4dFN0b3Jh Z2U6Omxlbmd0aCgpIGNvbnN0CnsKICAgIHJldHVybiBmTGVuZ3RoOwp9CgppbmxpbmUgSVRleHRT dG9yYWdlOjpsZW5ndGhfdHlwZQpJVGV4dFN0b3JhZ2U6Om1heFNpemUoKSBjb25zdAp7CiAgICBy ZXR1cm4gKGxlbmd0aF90eXBlKSgtMSkgLSAxOyAgCiAgICAgCn0KCmlubGluZSBJVGV4dFN0b3Jh Z2U6Omxlbmd0aF90eXBlCklUZXh0U3RvcmFnZTo6Y2FwYWNpdHkoKSBjb25zdAp7CiAgICByZXR1 cm4gZkNhcGFjaXR5Owp9CgppbmxpbmUgdm9pZApJVGV4dFN0b3JhZ2U6OnNldENhcGFjaXR5KGxl bmd0aF90eXBlIG5ld0NhcGFjaXR5KQp7CiAgICBmQ2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKfQoK aW5saW5lIHZvaWQKSVRleHRTdG9yYWdlOjpzZXRMZW5ndGgobGVuZ3RoX3R5cGUgbmV3TGVuZ3Ro KQp7CiAgICBmTGVuZ3RoID0gbmV3TGVuZ3RoOwp9CgogCgogCiNwcmFnbWEgaW5mbyhub25lKQoj cHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgojIDMwICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0ZXh0LmlubCIg MgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2l1Z25ybC5ocHAiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAK CiAKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0Nf SEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21h IG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51 bSg0KQoKCgoKCgoKIAoKIAogCgogCmNsYXNzIFVMYXRpbjsKY2xhc3MgVU1vZGlmaWVyTGV0dGVy OwpjbGFzcyBVQ29tYmluaW5nOwpjbGFzcyBVVW5pY29kZURpZ2l0OwpjbGFzcyBVQVNDSUk7CmNs YXNzIFVMYXRpbjE7CmNsYXNzIFVHZW5lcmFsUHVuY3R1YXRpb247CmNsYXNzIFVVbmljb2RlU3Bl Y2lhbDsKIAoKIAoKIAogCiAKCmNsYXNzIFVMYXRpbiB7CnB1YmxpYzoKICAgIGVudW0gRUxhdGlu TmFtZXMgewogICAgICAgIGtDYXBpdGFsTGV0dGVyQSA9IDB4MDA0MSwKICAgICAgICBrQ2FwaXRh bExldHRlckIgPSAweDAwNDIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJDID0gMHgwMDQzLAogICAg ICAgIGtDYXBpdGFsTGV0dGVyRCA9IDB4MDA0NCwKICAgICAgICBrQ2FwaXRhbExldHRlckUgPSAw eDAwNDUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJGID0gMHgwMDQ2LAogICAgICAgIGtDYXBpdGFs TGV0dGVyRyA9IDB4MDA0NywKICAgICAgICBrQ2FwaXRhbExldHRlckggPSAweDAwNDgsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJJID0gMHgwMDQ5LAogICAgICAgIGtDYXBpdGFsTGV0dGVySiA9IDB4 MDA0QSwKICAgICAgICBrQ2FwaXRhbExldHRlcksgPSAweDAwNEIsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJMID0gMHgwMDRDLAogICAgICAgIGtDYXBpdGFsTGV0dGVyTSA9IDB4MDA0RCwKICAgICAg ICBrQ2FwaXRhbExldHRlck4gPSAweDAwNEUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPID0gMHgw MDRGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyUCA9IDB4MDA1MCwKICAgICAgICBrQ2FwaXRhbExl dHRlclEgPSAweDAwNTEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJSID0gMHgwMDUyLAogICAgICAg IGtDYXBpdGFsTGV0dGVyUyA9IDB4MDA1MywKICAgICAgICBrQ2FwaXRhbExldHRlclQgPSAweDAw NTQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVID0gMHgwMDU1LAogICAgICAgIGtDYXBpdGFsTGV0 dGVyViA9IDB4MDA1NiwKICAgICAgICBrQ2FwaXRhbExldHRlclcgPSAweDAwNTcsCiAgICAgICAg a0NhcGl0YWxMZXR0ZXJYID0gMHgwMDU4LAogICAgICAgIGtDYXBpdGFsTGV0dGVyWSA9IDB4MDA1 OSwKICAgICAgICBrQ2FwaXRhbExldHRlclogPSAweDAwNUEsCiAgICAgICAga1NtYWxsTGV0dGVy QSA9IDB4MDA2MSwKICAgICAgICBrU21hbGxMZXR0ZXJCID0gMHgwMDYyLAogICAgICAgIGtTbWFs bExldHRlckMgPSAweDAwNjMsCiAgICAgICAga1NtYWxsTGV0dGVyRCA9IDB4MDA2NCwKICAgICAg ICBrU21hbGxMZXR0ZXJFID0gMHgwMDY1LAogICAgICAgIGtTbWFsbExldHRlckYgPSAweDAwNjYs CiAgICAgICAga1NtYWxsTGV0dGVyRyA9IDB4MDA2NywKICAgICAgICBrU21hbGxMZXR0ZXJIID0g MHgwMDY4LAogICAgICAgIGtTbWFsbExldHRlckkgPSAweDAwNjksCiAgICAgICAga1NtYWxsTGV0 dGVySiA9IDB4MDA2QSwKICAgICAgICBrU21hbGxMZXR0ZXJLID0gMHgwMDZCLAogICAgICAgIGtT bWFsbExldHRlckwgPSAweDAwNkMsCiAgICAgICAga1NtYWxsTGV0dGVyTSA9IDB4MDA2RCwKICAg ICAgICBrU21hbGxMZXR0ZXJOID0gMHgwMDZFLAogICAgICAgIGtTbWFsbExldHRlck8gPSAweDAw NkYsCiAgICAgICAga1NtYWxsTGV0dGVyUCA9IDB4MDA3MCwKICAgICAgICBrU21hbGxMZXR0ZXJR ID0gMHgwMDcxLAogICAgICAgIGtTbWFsbExldHRlclIgPSAweDAwNzIsCiAgICAgICAga1NtYWxs TGV0dGVyUyA9IDB4MDA3MywKICAgICAgICBrU21hbGxMZXR0ZXJUID0gMHgwMDc0LAogICAgICAg IGtTbWFsbExldHRlclUgPSAweDAwNzUsCiAgICAgICAga1NtYWxsTGV0dGVyViA9IDB4MDA3NiwK ICAgICAgICBrU21hbGxMZXR0ZXJXID0gMHgwMDc3LAogICAgICAgIGtTbWFsbExldHRlclggPSAw eDAwNzgsCiAgICAgICAga1NtYWxsTGV0dGVyWSA9IDB4MDA3OSwKICAgICAgICBrU21hbGxMZXR0 ZXJaID0gMHgwMDdBLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhHcmF2ZSA9IDB4MDBDMCwK ICAgICAgICBrQ2FwaXRhbExldHRlckFXaXRoQWN1dGUgPSAweDAwQzEsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJBV2l0aENpcmN1bWZsZXggPSAweDAwQzIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJB V2l0aFRpbGRlID0gMHgwMEMzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhEaWFlcmVzaXMg PSAweDAwQzQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aFJpbmdBYm92ZSA9IDB4MDBDNSwK ICAgICAgICBrQ2FwaXRhbExpZ2F0dXJlQWUgPSAweDAwQzYsCiAgICAgICAga0NhcGl0YWxMZXR0 ZXJDV2l0aENlZGlsbGEgPSAweDAwQzcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJFV2l0aEdyYXZl ID0gMHgwMEM4LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhBY3V0ZSA9IDB4MDBDOSwKICAg ICAgICBrQ2FwaXRhbExldHRlckVXaXRoQ2lyY3VtZmxleCA9IDB4MDBDQSwKICAgICAgICBrQ2Fw aXRhbExldHRlckVXaXRoRGlhZXJlc2lzID0gMHgwMENCLAogICAgICAgIGtDYXBpdGFsTGV0dGVy SVdpdGhHcmF2ZSA9IDB4MDBDQywKICAgICAgICBrQ2FwaXRhbExldHRlcklXaXRoQWN1dGUgPSAw eDAwQ0QsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJJV2l0aENpcmN1bWZsZXggPSAweDAwQ0UsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJJV2l0aERpYWVyZXNpcyA9IDB4MDBDRiwKICAgICAgICBrQ2Fw aXRhbExldHRlckV0aCA9IDB4MDBEMCwKICAgICAgICBrQ2FwaXRhbExldHRlck5XaXRoVGlsZGUg PSAweDAwRDEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aEdyYXZlID0gMHgwMEQyLAogICAg ICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhBY3V0ZSA9IDB4MDBEMywKICAgICAgICBrQ2FwaXRhbExl dHRlck9XaXRoQ2lyY3VtZmxleCA9IDB4MDBENCwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRo VGlsZGUgPSAweDAwRDUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aERpYWVyZXNpcyA9IDB4 MDBENiwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoU3Ryb2tlID0gMHgwMEQ4LAogICAgICAg IGtDYXBpdGFsTGV0dGVyVVdpdGhHcmF2ZSA9IDB4MDBEOSwKICAgICAgICBrQ2FwaXRhbExldHRl clVXaXRoQWN1dGUgPSAweDAwREEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aENpcmN1bWZs ZXggPSAweDAwREIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aERpYWVyZXNpcyA9IDB4MDBE QywKICAgICAgICBrQ2FwaXRhbExldHRlcllXaXRoQWN1dGUgPSAweDAwREQsCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJUaG9ybiA9IDB4MDBERSwKICAgICAgICBrU21hbGxMZXR0ZXJTaGFycFMgPSAw eDAwREYsCiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhHcmF2ZSA9IDB4MDBFMCwKICAgICAgICBr U21hbGxMZXR0ZXJBV2l0aEFjdXRlID0gMHgwMEUxLAogICAgICAgIGtTbWFsbExldHRlckFXaXRo Q2lyY3VtZmxleCA9IDB4MDBFMiwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aFRpbGRlID0gMHgw MEUzLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoRGlhZXJlc2lzID0gMHgwMEU0LAogICAgICAg IGtTbWFsbExldHRlckFXaXRoUmluZ0Fib3ZlID0gMHgwMEU1LAogICAgICAgIGtTbWFsbExpZ2F0 dXJlQWUgPSAweDAwRTYsCiAgICAgICAga1NtYWxsTGV0dGVyQ1dpdGhDZWRpbGxhID0gMHgwMEU3 LAogICAgICAgIGtTbWFsbExldHRlckVXaXRoR3JhdmUgPSAweDAwRTgsCiAgICAgICAga1NtYWxs TGV0dGVyRVdpdGhBY3V0ZSA9IDB4MDBFOSwKICAgICAgICBrU21hbGxMZXR0ZXJFV2l0aENpcmN1 bWZsZXggPSAweDAwRUEsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhEaWFlcmVzaXMgPSAweDAw RUIsCiAgICAgICAga1NtYWxsTGV0dGVySVdpdGhHcmF2ZSA9IDB4MDBFQywKICAgICAgICBrU21h bGxMZXR0ZXJJV2l0aEFjdXRlID0gMHgwMEVELAogICAgICAgIGtTbWFsbExldHRlcklXaXRoQ2ly Y3VtZmxleCA9IDB4MDBFRSwKICAgICAgICBrU21hbGxMZXR0ZXJJV2l0aERpYWVyZXNpcyA9IDB4 MDBFRiwKICAgICAgICBrU21hbGxMZXR0ZXJFdGggPSAweDAwRjAsCiAgICAgICAga1NtYWxsTGV0 dGVyTldpdGhUaWxkZSA9IDB4MDBGMSwKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aEdyYXZlID0g MHgwMEYyLAogICAgICAgIGtTbWFsbExldHRlck9XaXRoQWN1dGUgPSAweDAwRjMsCiAgICAgICAg a1NtYWxsTGV0dGVyT1dpdGhDaXJjdW1mbGV4ID0gMHgwMEY0LAogICAgICAgIGtTbWFsbExldHRl ck9XaXRoVGlsZGUgPSAweDAwRjUsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhEaWFlcmVzaXMg PSAweDAwRjYsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhTdHJva2UgPSAweDAwRjgsCiAgICAg ICAga1NtYWxsTGV0dGVyVVdpdGhHcmF2ZSA9IDB4MDBGOSwKICAgICAgICBrU21hbGxMZXR0ZXJV V2l0aEFjdXRlID0gMHgwMEZBLAogICAgICAgIGtTbWFsbExldHRlclVXaXRoQ2lyY3VtZmxleCA9 IDB4MDBGQiwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aERpYWVyZXNpcyA9IDB4MDBGQywKICAg ICAgICBrU21hbGxMZXR0ZXJZV2l0aEFjdXRlID0gMHgwMEZELAogICAgICAgIGtTbWFsbExldHRl clRob3JuID0gMHgwMEZFLAogICAgICAgIGtTbWFsbExldHRlcllXaXRoRGlhZXJlc2lzID0gMHgw MEZGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhNYWNyb24gPSAweDAxMDAsCiAgICAgICAg a1NtYWxsTGV0dGVyQVdpdGhNYWNyb24gPSAweDAxMDEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJB V2l0aEJyZXZlID0gMHgwMTAyLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoQnJldmUgPSAweDAx MDMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aE9nb25layA9IDB4MDEwNCwKICAgICAgICBr U21hbGxMZXR0ZXJBV2l0aE9nb25layA9IDB4MDEwNSwKICAgICAgICBrQ2FwaXRhbExldHRlckNX aXRoQWN1dGUgPSAweDAxMDYsCiAgICAgICAga1NtYWxsTGV0dGVyQ1dpdGhBY3V0ZSA9IDB4MDEw NywKICAgICAgICBrQ2FwaXRhbExldHRlckNXaXRoQ2lyY3VtZmxleCA9IDB4MDEwOCwKICAgICAg ICBrU21hbGxMZXR0ZXJDV2l0aENpcmN1bWZsZXggPSAweDAxMDksCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJDV2l0aERvdEFib3ZlID0gMHgwMTBBLAogICAgICAgIGtTbWFsbExldHRlckNXaXRoRG90 QWJvdmUgPSAweDAxMEIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJDV2l0aENhcm9uID0gMHgwMTBD LAogICAgICAgIGtTbWFsbExldHRlckNXaXRoQ2Fyb24gPSAweDAxMEQsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJEV2l0aENhcm9uID0gMHgwMTBFLAogICAgICAgIGtTbWFsbExldHRlckRXaXRoQ2Fy b24gPSAweDAxMEYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJEV2l0aFN0cm9rZSA9IDB4MDExMCwK ICAgICAgICBrU21hbGxMZXR0ZXJEV2l0aFN0cm9rZSA9IDB4MDExMSwKICAgICAgICBrQ2FwaXRh bExldHRlckVXaXRoTWFjcm9uID0gMHgwMTEyLAogICAgICAgIGtTbWFsbExldHRlckVXaXRoTWFj cm9uID0gMHgwMTEzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhCcmV2ZSA9IDB4MDExNCwK ICAgICAgICBrU21hbGxMZXR0ZXJFV2l0aEJyZXZlID0gMHgwMTE1LAogICAgICAgIGtDYXBpdGFs TGV0dGVyRVdpdGhEb3RBYm92ZSA9IDB4MDExNiwKICAgICAgICBrU21hbGxMZXR0ZXJFV2l0aERv dEFib3ZlID0gMHgwMTE3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhPZ29uZWsgPSAweDAx MTgsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhPZ29uZWsgPSAweDAxMTksCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJFV2l0aENhcm9uID0gMHgwMTFBLAogICAgICAgIGtTbWFsbExldHRlckVXaXRo Q2Fyb24gPSAweDAxMUIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJHV2l0aENpcmN1bWZsZXggPSAw eDAxMUMsCiAgICAgICAga1NtYWxsTGV0dGVyR1dpdGhDaXJjdW1mbGV4ID0gMHgwMTFELAogICAg ICAgIGtDYXBpdGFsTGV0dGVyR1dpdGhCcmV2ZSA9IDB4MDExRSwKICAgICAgICBrU21hbGxMZXR0 ZXJHV2l0aEJyZXZlID0gMHgwMTFGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyR1dpdGhEb3RBYm92 ZSA9IDB4MDEyMCwKICAgICAgICBrU21hbGxMZXR0ZXJHV2l0aERvdEFib3ZlID0gMHgwMTIxLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyR1dpdGhDZWRpbGxhID0gMHgwMTIyLAogICAgICAgIGtTbWFs bExldHRlckdXaXRoQ2VkaWxsYSA9IDB4MDEyMywKICAgICAgICBrQ2FwaXRhbExldHRlckhXaXRo Q2lyY3VtZmxleCA9IDB4MDEyNCwKICAgICAgICBrU21hbGxMZXR0ZXJIV2l0aENpcmN1bWZsZXgg PSAweDAxMjUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJIV2l0aFN0cm9rZSA9IDB4MDEyNiwKICAg ICAgICBrU21hbGxMZXR0ZXJIV2l0aFN0cm9rZSA9IDB4MDEyNywKICAgICAgICBrQ2FwaXRhbExl dHRlcklXaXRoVGlsZGUgPSAweDAxMjgsCiAgICAgICAga1NtYWxsTGV0dGVySVdpdGhUaWxkZSA9 IDB4MDEyOSwKICAgICAgICBrQ2FwaXRhbExldHRlcklXaXRoTWFjcm9uID0gMHgwMTJBLAogICAg ICAgIGtTbWFsbExldHRlcklXaXRoTWFjcm9uID0gMHgwMTJCLAogICAgICAgIGtDYXBpdGFsTGV0 dGVySVdpdGhCcmV2ZSA9IDB4MDEyQywKICAgICAgICBrU21hbGxMZXR0ZXJJV2l0aEJyZXZlID0g MHgwMTJELAogICAgICAgIGtDYXBpdGFsTGV0dGVySVdpdGhPZ29uZWsgPSAweDAxMkUsCiAgICAg ICAga1NtYWxsTGV0dGVySVdpdGhPZ29uZWsgPSAweDAxMkYsCiAgICAgICAga0NhcGl0YWxMZXR0 ZXJJV2l0aERvdEFib3ZlID0gMHgwMTMwLAogICAgICAgIGtTbWFsbExldHRlckRvdGxlc3NJID0g MHgwMTMxLAogICAgICAgIGtDYXBpdGFsTGlnYXR1cmVJaiA9IDB4MDEzMiwKICAgICAgICBrU21h bGxMaWdhdHVyZUlqID0gMHgwMTMzLAogICAgICAgIGtDYXBpdGFsTGV0dGVySldpdGhDaXJjdW1m bGV4ID0gMHgwMTM0LAogICAgICAgIGtTbWFsbExldHRlckpXaXRoQ2lyY3VtZmxleCA9IDB4MDEz NSwKICAgICAgICBrQ2FwaXRhbExldHRlcktXaXRoQ2VkaWxsYSA9IDB4MDEzNiwKICAgICAgICBr U21hbGxMZXR0ZXJLV2l0aENlZGlsbGEgPSAweDAxMzcsCiAgICAgICAga1NtYWxsTGV0dGVyS3Jh ID0gMHgwMTM4LAogICAgICAgIGtDYXBpdGFsTGV0dGVyTFdpdGhBY3V0ZSA9IDB4MDEzOSwKICAg ICAgICBrU21hbGxMZXR0ZXJMV2l0aEFjdXRlID0gMHgwMTNBLAogICAgICAgIGtDYXBpdGFsTGV0 dGVyTFdpdGhDZWRpbGxhID0gMHgwMTNCLAogICAgICAgIGtTbWFsbExldHRlckxXaXRoQ2VkaWxs YSA9IDB4MDEzQywKICAgICAgICBrQ2FwaXRhbExldHRlckxXaXRoQ2Fyb24gPSAweDAxM0QsCiAg ICAgICAga1NtYWxsTGV0dGVyTFdpdGhDYXJvbiA9IDB4MDEzRSwKICAgICAgICBrQ2FwaXRhbExl dHRlckxXaXRoTWlkZGxlRG90ID0gMHgwMTNGLAogICAgICAgIGtTbWFsbExldHRlckxXaXRoTWlk ZGxlRG90ID0gMHgwMTQwLAogICAgICAgIGtDYXBpdGFsTGV0dGVyTFdpdGhTdHJva2UgPSAweDAx NDEsCiAgICAgICAga1NtYWxsTGV0dGVyTFdpdGhTdHJva2UgPSAweDAxNDIsCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJOV2l0aEFjdXRlID0gMHgwMTQzLAogICAgICAgIGtTbWFsbExldHRlck5XaXRo QWN1dGUgPSAweDAxNDQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJOV2l0aENlZGlsbGEgPSAweDAx NDUsCiAgICAgICAga1NtYWxsTGV0dGVyTldpdGhDZWRpbGxhID0gMHgwMTQ2LAogICAgICAgIGtD YXBpdGFsTGV0dGVyTldpdGhDYXJvbiA9IDB4MDE0NywKICAgICAgICBrU21hbGxMZXR0ZXJOV2l0 aENhcm9uID0gMHgwMTQ4LAogICAgICAgIGtTbWFsbExldHRlck5QcmVjZWRlZEJ5QXBvc3Ryb3Bo ZSA9IDB4MDE0OSwKICAgICAgICBrQ2FwaXRhbExldHRlckVuZyA9IDB4MDE0QSwKICAgICAgICBr U21hbGxMZXR0ZXJFbmcgPSAweDAxNEIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aE1hY3Jv biA9IDB4MDE0QywKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aE1hY3JvbiA9IDB4MDE0RCwKICAg ICAgICBrQ2FwaXRhbExldHRlck9XaXRoQnJldmUgPSAweDAxNEUsCiAgICAgICAga1NtYWxsTGV0 dGVyT1dpdGhCcmV2ZSA9IDB4MDE0RiwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoRG91Ymxl QWN1dGUgPSAweDAxNTAsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhEb3VibGVBY3V0ZSA9IDB4 MDE1MSwKICAgICAgICBrQ2FwaXRhbExpZ2F0dXJlT2UgPSAweDAxNTIsCiAgICAgICAga1NtYWxs TGlnYXR1cmVPZSA9IDB4MDE1MywKICAgICAgICBrQ2FwaXRhbExldHRlclJXaXRoQWN1dGUgPSAw eDAxNTQsCiAgICAgICAga1NtYWxsTGV0dGVyUldpdGhBY3V0ZSA9IDB4MDE1NSwKICAgICAgICBr Q2FwaXRhbExldHRlclJXaXRoQ2VkaWxsYSA9IDB4MDE1NiwKICAgICAgICBrU21hbGxMZXR0ZXJS V2l0aENlZGlsbGEgPSAweDAxNTcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJSV2l0aENhcm9uID0g MHgwMTU4LAogICAgICAgIGtTbWFsbExldHRlclJXaXRoQ2Fyb24gPSAweDAxNTksCiAgICAgICAg a0NhcGl0YWxMZXR0ZXJTV2l0aEFjdXRlID0gMHgwMTVBLAogICAgICAgIGtTbWFsbExldHRlclNX aXRoQWN1dGUgPSAweDAxNUIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJTV2l0aENpcmN1bWZsZXgg PSAweDAxNUMsCiAgICAgICAga1NtYWxsTGV0dGVyU1dpdGhDaXJjdW1mbGV4ID0gMHgwMTVELAog ICAgICAgIGtDYXBpdGFsTGV0dGVyU1dpdGhDZWRpbGxhID0gMHgwMTVFLAogICAgICAgIGtTbWFs bExldHRlclNXaXRoQ2VkaWxsYSA9IDB4MDE1RiwKICAgICAgICBrQ2FwaXRhbExldHRlclNXaXRo Q2Fyb24gPSAweDAxNjAsCiAgICAgICAga1NtYWxsTGV0dGVyU1dpdGhDYXJvbiA9IDB4MDE2MSwK ICAgICAgICBrQ2FwaXRhbExldHRlclRXaXRoQ2VkaWxsYSA9IDB4MDE2MiwKICAgICAgICBrU21h bGxMZXR0ZXJUV2l0aENlZGlsbGEgPSAweDAxNjMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJUV2l0 aENhcm9uID0gMHgwMTY0LAogICAgICAgIGtTbWFsbExldHRlclRXaXRoQ2Fyb24gPSAweDAxNjUs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJUV2l0aFN0cm9rZSA9IDB4MDE2NiwKICAgICAgICBrU21h bGxMZXR0ZXJUV2l0aFN0cm9rZSA9IDB4MDE2NywKICAgICAgICBrQ2FwaXRhbExldHRlclVXaXRo VGlsZGUgPSAweDAxNjgsCiAgICAgICAga1NtYWxsTGV0dGVyVVdpdGhUaWxkZSA9IDB4MDE2OSwK ICAgICAgICBrQ2FwaXRhbExldHRlclVXaXRoTWFjcm9uID0gMHgwMTZBLAogICAgICAgIGtTbWFs bExldHRlclVXaXRoTWFjcm9uID0gMHgwMTZCLAogICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhC cmV2ZSA9IDB4MDE2QywKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aEJyZXZlID0gMHgwMTZELAog ICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhSaW5nQWJvdmUgPSAweDAxNkUsCiAgICAgICAga1Nt YWxsTGV0dGVyVVdpdGhSaW5nQWJvdmUgPSAweDAxNkYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJV V2l0aERvdWJsZUFjdXRlID0gMHgwMTcwLAogICAgICAgIGtTbWFsbExldHRlclVXaXRoRG91Ymxl QWN1dGUgPSAweDAxNzEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aE9nb25layA9IDB4MDE3 MiwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aE9nb25layA9IDB4MDE3MywKICAgICAgICBrQ2Fw aXRhbExldHRlcldXaXRoQ2lyY3VtZmxleCA9IDB4MDE3NCwKICAgICAgICBrU21hbGxMZXR0ZXJX V2l0aENpcmN1bWZsZXggPSAweDAxNzUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJZV2l0aENpcmN1 bWZsZXggPSAweDAxNzYsCiAgICAgICAga1NtYWxsTGV0dGVyWVdpdGhDaXJjdW1mbGV4ID0gMHgw MTc3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyWVdpdGhEaWFlcmVzaXMgPSAweDAxNzgsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJaV2l0aEFjdXRlID0gMHgwMTc5LAogICAgICAgIGtTbWFsbExldHRl clpXaXRoQWN1dGUgPSAweDAxN0EsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJaV2l0aERvdEFib3Zl ID0gMHgwMTdCLAogICAgICAgIGtTbWFsbExldHRlclpXaXRoRG90QWJvdmUgPSAweDAxN0MsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJaV2l0aENhcm9uID0gMHgwMTdELAogICAgICAgIGtTbWFsbExl dHRlclpXaXRoQ2Fyb24gPSAweDAxN0UsCiAgICAgICAga1NtYWxsTGV0dGVyTG9uZ1MgPSAweDAx N0YsCiAgICAgICAga1NtYWxsTGV0dGVyQldpdGhTdHJva2UgPSAweDAxODAsCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJCV2l0aEhvb2sgPSAweDAxODEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJCV2l0 aFRvcGJhciA9IDB4MDE4MiwKICAgICAgICBrU21hbGxMZXR0ZXJCV2l0aFRvcGJhciA9IDB4MDE4 MywKICAgICAgICBrQ2FwaXRhbExldHRlclRvbmVTaXggPSAweDAxODQsCiAgICAgICAga1NtYWxs TGV0dGVyVG9uZVNpeCA9IDB4MDE4NSwKICAgICAgICBrQ2FwaXRhbExldHRlck9wZW5PID0gMHgw MTg2LAogICAgICAgIGtDYXBpdGFsTGV0dGVyQ1dpdGhIb29rID0gMHgwMTg3LAogICAgICAgIGtT bWFsbExldHRlckNXaXRoSG9vayA9IDB4MDE4OCwKICAgICAgICBrQ2FwaXRhbExldHRlckFmcmlj YW5EID0gMHgwMTg5LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRFdpdGhIb29rID0gMHgwMThBLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyRFdpdGhUb3BiYXIgPSAweDAxOEIsCiAgICAgICAga1NtYWxs TGV0dGVyRFdpdGhUb3BiYXIgPSAweDAxOEMsCiAgICAgICAga1NtYWxsTGV0dGVyVHVybmVkRGVs dGEgPSAweDAxOEQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJSZXZlcnNlZEUgPSAweDAxOEUsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJTY2h3YSA9IDB4MDE4RiwKICAgICAgICBrQ2FwaXRhbExldHRl ck9wZW5FID0gMHgwMTkwLAogICAgICAgIGtDYXBpdGFsTGV0dGVyRldpdGhIb29rID0gMHgwMTkx LAogICAgICAgIGtTbWFsbExldHRlckZXaXRoSG9vayA9IDB4MDE5MiwKICAgICAgICBrQ2FwaXRh bExldHRlckdXaXRoSG9vayA9IDB4MDE5MywKICAgICAgICBrQ2FwaXRhbExldHRlckdhbW1hID0g MHgwMTk0LAogICAgICAgIGtTbWFsbExldHRlckh2ID0gMHgwMTk1LAogICAgICAgIGtDYXBpdGFs TGV0dGVySW90YSA9IDB4MDE5NiwKICAgICAgICBrQ2FwaXRhbExldHRlcklXaXRoU3Ryb2tlID0g MHgwMTk3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyS1dpdGhIb29rID0gMHgwMTk4LAogICAgICAg IGtTbWFsbExldHRlcktXaXRoSG9vayA9IDB4MDE5OSwKICAgICAgICBrU21hbGxMZXR0ZXJMV2l0 aEJhciA9IDB4MDE5QSwKICAgICAgICBrU21hbGxMZXR0ZXJMYW1iZGFXaXRoU3Ryb2tlID0gMHgw MTlCLAogICAgICAgIGtDYXBpdGFsTGV0dGVyVHVybmVkTSA9IDB4MDE5QywKICAgICAgICBrQ2Fw aXRhbExldHRlck5XaXRoTGVmdEhvb2sgPSAweDAxOUQsCiAgICAgICAga1NtYWxsTGV0dGVyTldp dGhMb25nUmlnaHRMZWcgPSAweDAxOUUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aE1pZGRs ZVRpbGRlID0gMHgwMTlGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhIb3JuID0gMHgwMUEw LAogICAgICAgIGtTbWFsbExldHRlck9XaXRoSG9ybiA9IDB4MDFBMSwKICAgICAgICBrQ2FwaXRh bExldHRlck9pID0gMHgwMUEyLAogICAgICAgIGtTbWFsbExldHRlck9pID0gMHgwMUEzLAogICAg ICAgIGtDYXBpdGFsTGV0dGVyUFdpdGhIb29rID0gMHgwMUE0LAogICAgICAgIGtTbWFsbExldHRl clBXaXRoSG9vayA9IDB4MDFBNSwKICAgICAgICBrTGV0dGVyWXIgPSAweDAxQTYsCiAgICAgICAg a0NhcGl0YWxMZXR0ZXJUb25lVHdvID0gMHgwMUE3LAogICAgICAgIGtTbWFsbExldHRlclRvbmVU d28gPSAweDAxQTgsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJFc2ggPSAweDAxQTksCiAgICAgICAg a0xldHRlclJldmVyc2VkRXNoTG9vcCA9IDB4MDFBQSwKICAgICAgICBrU21hbGxMZXR0ZXJUV2l0 aFBhbGF0YWxIb29rID0gMHgwMUFCLAogICAgICAgIGtDYXBpdGFsTGV0dGVyVFdpdGhIb29rID0g MHgwMUFDLAogICAgICAgIGtTbWFsbExldHRlclRXaXRoSG9vayA9IDB4MDFBRCwKICAgICAgICBr Q2FwaXRhbExldHRlclRXaXRoUmV0cm9mbGV4SG9vayA9IDB4MDFBRSwKICAgICAgICBrQ2FwaXRh bExldHRlclVXaXRoSG9ybiA9IDB4MDFBRiwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aEhvcm4g PSAweDAxQjAsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVcHNpbG9uID0gMHgwMUIxLAogICAgICAg IGtDYXBpdGFsTGV0dGVyVldpdGhIb29rID0gMHgwMUIyLAogICAgICAgIGtDYXBpdGFsTGV0dGVy WVdpdGhIb29rID0gMHgwMUIzLAogICAgICAgIGtTbWFsbExldHRlcllXaXRoSG9vayA9IDB4MDFC NCwKICAgICAgICBrQ2FwaXRhbExldHRlclpXaXRoU3Ryb2tlID0gMHgwMUI1LAogICAgICAgIGtT bWFsbExldHRlclpXaXRoU3Ryb2tlID0gMHgwMUI2LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRXpo ID0gMHgwMUI3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRXpoUmV2ZXJzZWQgPSAweDAxQjgsCiAg ICAgICAga1NtYWxsTGV0dGVyRXpoUmV2ZXJzZWQgPSAweDAxQjksCiAgICAgICAga1NtYWxsTGV0 dGVyRXpoV2l0aFRhaWwgPSAweDAxQkEsCiAgICAgICAga0xldHRlclR3b1dpdGhTdHJva2UgPSAw eDAxQkIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJUb25lRml2ZSA9IDB4MDFCQywKICAgICAgICBr U21hbGxMZXR0ZXJUb25lRml2ZSA9IDB4MDFCRCwKICAgICAgICBrTGV0dGVySW52ZXJ0ZWRHbG90 dGFsU3RvcFdpdGhTdHJva2UgPSAweDAxQkUsCiAgICAgICAga0xldHRlcld5bm4gPSAweDAxQkYs CiAgICAgICAga0xldHRlckRlbnRhbENsaWNrID0gMHgwMUMwLAogICAgICAgIGtMZXR0ZXJMYXRl cmFsQ2xpY2sgPSAweDAxQzEsCiAgICAgICAga0xldHRlckFsdmVvbGFyQ2xpY2sgPSAweDAxQzIs CiAgICAgICAga0xldHRlclJldHJvZmxleENsaWNrID0gMHgwMUMzLAogICAgICAgIGtDYXBpdGFs TGV0dGVyRHpXaXRoQ2Fyb24gPSAweDAxQzQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJEV2l0aFNt YWxsTGV0dGVyWldpdGhDYXJvbiA9IDB4MDFDNSwKICAgICAgICBrU21hbGxMZXR0ZXJEeldpdGhD YXJvbiA9IDB4MDFDNiwKICAgICAgICBrQ2FwaXRhbExldHRlckxqID0gMHgwMUM3LAogICAgICAg IGtDYXBpdGFsTGV0dGVyTFdpdGhTbWFsbExldHRlckogPSAweDAxQzgsCiAgICAgICAga1NtYWxs TGV0dGVyTGogPSAweDAxQzksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJOaiA9IDB4MDFDQSwKICAg ICAgICBrQ2FwaXRhbExldHRlck5XaXRoU21hbGxMZXR0ZXJKID0gMHgwMUNCLAogICAgICAgIGtT bWFsbExldHRlck5qID0gMHgwMUNDLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhDYXJvbiA9 IDB4MDFDRCwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aENhcm9uID0gMHgwMUNFLAogICAgICAg IGtDYXBpdGFsTGV0dGVySVdpdGhDYXJvbiA9IDB4MDFDRiwKICAgICAgICBrU21hbGxMZXR0ZXJJ V2l0aENhcm9uID0gMHgwMUQwLAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhDYXJvbiA9IDB4 MDFEMSwKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aENhcm9uID0gMHgwMUQyLAogICAgICAgIGtD YXBpdGFsTGV0dGVyVVdpdGhDYXJvbiA9IDB4MDFEMywKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0 aENhcm9uID0gMHgwMUQ0LAogICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhEaWFlcmVzaXNBbmRN YWNyb24gPSAweDAxRDUsCiAgICAgICAga1NtYWxsTGV0dGVyVVdpdGhEaWFlcmVzaXNBbmRNYWNy b24gPSAweDAxRDYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aERpYWVyZXNpc0FuZEFjdXRl ID0gMHgwMUQ3LAogICAgICAgIGtTbWFsbExldHRlclVXaXRoRGlhZXJlc2lzQW5kQWN1dGUgPSAw eDAxRDgsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aERpYWVyZXNpc0FuZENhcm9uID0gMHgw MUQ5LAogICAgICAgIGtTbWFsbExldHRlclVXaXRoRGlhZXJlc2lzQW5kQ2Fyb24gPSAweDAxREEs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aERpYWVyZXNpc0FuZEdyYXZlID0gMHgwMURCLAog ICAgICAgIGtTbWFsbExldHRlclVXaXRoRGlhZXJlc2lzQW5kR3JhdmUgPSAweDAxREMsCiAgICAg ICAga1NtYWxsTGV0dGVyVHVybmVkRSA9IDB4MDFERCwKICAgICAgICBrQ2FwaXRhbExldHRlckFX aXRoRGlhZXJlc2lzQW5kTWFjcm9uID0gMHgwMURFLAogICAgICAgIGtTbWFsbExldHRlckFXaXRo RGlhZXJlc2lzQW5kTWFjcm9uID0gMHgwMURGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhE b3RBYm92ZUFuZE1hY3JvbiA9IDB4MDFFMCwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aERvdEFi b3ZlQW5kTWFjcm9uID0gMHgwMUUxLAogICAgICAgIGtDYXBpdGFsTGlnYXR1cmVBZVdpdGhNYWNy b24gPSAweDAxRTIsCiAgICAgICAga1NtYWxsTGlnYXR1cmVBZVdpdGhNYWNyb24gPSAweDAxRTMs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJHV2l0aFN0cm9rZSA9IDB4MDFFNCwKICAgICAgICBrU21h bGxMZXR0ZXJHV2l0aFN0cm9rZSA9IDB4MDFFNSwKICAgICAgICBrQ2FwaXRhbExldHRlckdXaXRo Q2Fyb24gPSAweDAxRTYsCiAgICAgICAga1NtYWxsTGV0dGVyR1dpdGhDYXJvbiA9IDB4MDFFNywK ICAgICAgICBrQ2FwaXRhbExldHRlcktXaXRoQ2Fyb24gPSAweDAxRTgsCiAgICAgICAga1NtYWxs TGV0dGVyS1dpdGhDYXJvbiA9IDB4MDFFOSwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoT2dv bmVrID0gMHgwMUVBLAogICAgICAgIGtTbWFsbExldHRlck9XaXRoT2dvbmVrID0gMHgwMUVCLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhPZ29uZWtBbmRNYWNyb24gPSAweDAxRUMsCiAgICAg ICAga1NtYWxsTGV0dGVyT1dpdGhPZ29uZWtBbmRNYWNyb24gPSAweDAxRUQsCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJFemhXaXRoQ2Fyb24gPSAweDAxRUUsCiAgICAgICAga1NtYWxsTGV0dGVyRXpo V2l0aENhcm9uID0gMHgwMUVGLAogICAgICAgIGtTbWFsbExldHRlckpXaXRoQ2Fyb24gPSAweDAx RjAsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJEeiA9IDB4MDFGMSwKICAgICAgICBrQ2FwaXRhbExl dHRlckRXaXRoU21hbGxMZXR0ZXJaID0gMHgwMUYyLAogICAgICAgIGtTbWFsbExldHRlckR6ID0g MHgwMUYzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyR1dpdGhBY3V0ZSA9IDB4MDFGNCwKICAgICAg ICBrU21hbGxMZXR0ZXJHV2l0aEFjdXRlID0gMHgwMUY1LAogICAgICAgIGtDYXBpdGFsTGV0dGVy QVdpdGhSaW5nQWJvdmVBbmRBY3V0ZSA9IDB4MDFGQSwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0 aFJpbmdBYm92ZUFuZEFjdXRlID0gMHgwMUZCLAogICAgICAgIGtDYXBpdGFsTGlnYXR1cmVBZVdp dGhBY3V0ZSA9IDB4MDFGQywKICAgICAgICBrU21hbGxMaWdhdHVyZUFlV2l0aEFjdXRlID0gMHgw MUZELAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhTdHJva2VBbmRBY3V0ZSA9IDB4MDFGRSwK ICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aFN0cm9rZUFuZEFjdXRlID0gMHgwMUZGLAogICAgICAg IGtDYXBpdGFsTGV0dGVyQVdpdGhEb3VibGVHcmF2ZSA9IDB4MDIwMCwKICAgICAgICBrU21hbGxM ZXR0ZXJBV2l0aERvdWJsZUdyYXZlID0gMHgwMjAxLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdp dGhJbnZlcnRlZEJyZXZlID0gMHgwMjAyLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoSW52ZXJ0 ZWRCcmV2ZSA9IDB4MDIwMywKICAgICAgICBrQ2FwaXRhbExldHRlckVXaXRoRG91YmxlR3JhdmUg PSAweDAyMDQsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhEb3VibGVHcmF2ZSA9IDB4MDIwNSwK ICAgICAgICBrQ2FwaXRhbExldHRlckVXaXRoSW52ZXJ0ZWRCcmV2ZSA9IDB4MDIwNiwKICAgICAg ICBrU21hbGxMZXR0ZXJFV2l0aEludmVydGVkQnJldmUgPSAweDAyMDcsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJJV2l0aERvdWJsZUdyYXZlID0gMHgwMjA4LAogICAgICAgIGtTbWFsbExldHRlcklX aXRoRG91YmxlR3JhdmUgPSAweDAyMDksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJJV2l0aEludmVy dGVkQnJldmUgPSAweDAyMEEsCiAgICAgICAga1NtYWxsTGV0dGVySVdpdGhJbnZlcnRlZEJyZXZl ID0gMHgwMjBCLAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhEb3VibGVHcmF2ZSA9IDB4MDIw QywKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aERvdWJsZUdyYXZlID0gMHgwMjBELAogICAgICAg IGtDYXBpdGFsTGV0dGVyT1dpdGhJbnZlcnRlZEJyZXZlID0gMHgwMjBFLAogICAgICAgIGtTbWFs bExldHRlck9XaXRoSW52ZXJ0ZWRCcmV2ZSA9IDB4MDIwRiwKICAgICAgICBrQ2FwaXRhbExldHRl clJXaXRoRG91YmxlR3JhdmUgPSAweDAyMTAsCiAgICAgICAga1NtYWxsTGV0dGVyUldpdGhEb3Vi bGVHcmF2ZSA9IDB4MDIxMSwKICAgICAgICBrQ2FwaXRhbExldHRlclJXaXRoSW52ZXJ0ZWRCcmV2 ZSA9IDB4MDIxMiwKICAgICAgICBrU21hbGxMZXR0ZXJSV2l0aEludmVydGVkQnJldmUgPSAweDAy MTMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aERvdWJsZUdyYXZlID0gMHgwMjE0LAogICAg ICAgIGtTbWFsbExldHRlclVXaXRoRG91YmxlR3JhdmUgPSAweDAyMTUsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJVV2l0aEludmVydGVkQnJldmUgPSAweDAyMTYsCiAgICAgICAga1NtYWxsTGV0dGVy VVdpdGhJbnZlcnRlZEJyZXZlID0gMHgwMjE3LAogICAgICAgIGtTbWFsbExldHRlclR1cm5lZEEg PSAweDAyNTAsCiAgICAgICAga1NtYWxsTGV0dGVyQWxwaGEgPSAweDAyNTEsCiAgICAgICAga1Nt YWxsTGV0dGVyVHVybmVkQWxwaGEgPSAweDAyNTIsCiAgICAgICAga1NtYWxsTGV0dGVyQldpdGhI b29rID0gMHgwMjUzLAogICAgICAgIGtTbWFsbExldHRlck9wZW5PID0gMHgwMjU0LAogICAgICAg IGtTbWFsbExldHRlckNXaXRoQ3VybCA9IDB4MDI1NSwKICAgICAgICBrU21hbGxMZXR0ZXJEV2l0 aFRhaWwgPSAweDAyNTYsCiAgICAgICAga1NtYWxsTGV0dGVyRFdpdGhIb29rID0gMHgwMjU3LAog ICAgICAgIGtTbWFsbExldHRlclJldmVyc2VkRSA9IDB4MDI1OCwKICAgICAgICBrU21hbGxMZXR0 ZXJTY2h3YSA9IDB4MDI1OSwKICAgICAgICBrU21hbGxMZXR0ZXJTY2h3YVdpdGhIb29rID0gMHgw MjVBLAogICAgICAgIGtTbWFsbExldHRlck9wZW5FID0gMHgwMjVCLAogICAgICAgIGtTbWFsbExl dHRlclJldmVyc2VkT3BlbkUgPSAweDAyNUMsCiAgICAgICAga1NtYWxsTGV0dGVyUmV2ZXJzZWRP cGVuRVdpdGhIb29rID0gMHgwMjVELAogICAgICAgIGtTbWFsbExldHRlckNsb3NlZFJldmVyc2Vk T3BlbkUgPSAweDAyNUUsCiAgICAgICAga1NtYWxsTGV0dGVyRG90bGVzc0pXaXRoU3Ryb2tlID0g MHgwMjVGLAogICAgICAgIGtTbWFsbExldHRlckdXaXRoSG9vayA9IDB4MDI2MCwKICAgICAgICBr U21hbGxMZXR0ZXJTY3JpcHRHID0gMHgwMjYxLAogICAgICAgIGtMZXR0ZXJTbWFsbENhcGl0YWxH ID0gMHgwMjYyLAogICAgICAgIGtTbWFsbExldHRlckdhbW1hID0gMHgwMjYzLAogICAgICAgIGtT bWFsbExldHRlclJhbXNIb3JuID0gMHgwMjY0LAogICAgICAgIGtTbWFsbExldHRlclR1cm5lZEgg PSAweDAyNjUsCiAgICAgICAga1NtYWxsTGV0dGVySFdpdGhIb29rID0gMHgwMjY2LAogICAgICAg IGtTbWFsbExldHRlckhlbmdXaXRoSG9vayA9IDB4MDI2NywKICAgICAgICBrU21hbGxMZXR0ZXJJ V2l0aFN0cm9rZSA9IDB4MDI2OCwKICAgICAgICBrU21hbGxMZXR0ZXJJb3RhID0gMHgwMjY5LAog ICAgICAgIGtMZXR0ZXJTbWFsbENhcGl0YWxJID0gMHgwMjZBLAogICAgICAgIGtTbWFsbExldHRl ckxXaXRoTWlkZGxlVGlsZGUgPSAweDAyNkIsCiAgICAgICAga1NtYWxsTGV0dGVyTFdpdGhCZWx0 ID0gMHgwMjZDLAogICAgICAgIGtTbWFsbExldHRlckxXaXRoUmV0cm9mbGV4SG9vayA9IDB4MDI2 RCwKICAgICAgICBrU21hbGxMZXR0ZXJMZXpoID0gMHgwMjZFLAogICAgICAgIGtTbWFsbExldHRl clR1cm5lZE0gPSAweDAyNkYsCiAgICAgICAga1NtYWxsTGV0dGVyVHVybmVkTVdpdGhMb25nTGVn ID0gMHgwMjcwLAogICAgICAgIGtTbWFsbExldHRlck1XaXRoSG9vayA9IDB4MDI3MSwKICAgICAg ICBrU21hbGxMZXR0ZXJOV2l0aExlZnRIb29rID0gMHgwMjcyLAogICAgICAgIGtTbWFsbExldHRl ck5XaXRoUmV0cm9mbGV4SG9vayA9IDB4MDI3MywKICAgICAgICBrTGV0dGVyU21hbGxDYXBpdGFs TiA9IDB4MDI3NCwKICAgICAgICBrU21hbGxMZXR0ZXJCYXJyZWRPID0gMHgwMjc1LAogICAgICAg IGtMZXR0ZXJTbWFsbENhcGl0YWxPZSA9IDB4MDI3NiwKICAgICAgICBrU21hbGxMZXR0ZXJDbG9z ZWRPbWVnYSA9IDB4MDI3NywKICAgICAgICBrU21hbGxMZXR0ZXJQaGkgPSAweDAyNzgsCiAgICAg ICAga1NtYWxsTGV0dGVyVHVybmVkUiA9IDB4MDI3OSwKICAgICAgICBrU21hbGxMZXR0ZXJUdXJu ZWRSV2l0aExvbmdMZWcgPSAweDAyN0EsCiAgICAgICAga1NtYWxsTGV0dGVyVHVybmVkUldpdGhI b29rID0gMHgwMjdCLAogICAgICAgIGtTbWFsbExldHRlclJXaXRoTG9uZ0xlZyA9IDB4MDI3QywK ICAgICAgICBrU21hbGxMZXR0ZXJSV2l0aFRhaWwgPSAweDAyN0QsCiAgICAgICAga1NtYWxsTGV0 dGVyUldpdGhGaXNoaG9vayA9IDB4MDI3RSwKICAgICAgICBrU21hbGxMZXR0ZXJSZXZlcnNlZFJX aXRoRmlzaGhvb2sgPSAweDAyN0YsCiAgICAgICAga0xldHRlclNtYWxsQ2FwaXRhbFIgPSAweDAy ODAsCiAgICAgICAga0xldHRlclNtYWxsQ2FwaXRhbEludmVydGVkUiA9IDB4MDI4MSwKICAgICAg ICBrU21hbGxMZXR0ZXJTV2l0aEhvb2sgPSAweDAyODIsCiAgICAgICAga1NtYWxsTGV0dGVyRXNo ID0gMHgwMjgzLAogICAgICAgIGtTbWFsbExldHRlckRvdGxlc3NKV2l0aFN0cm9rZUFuZEhvb2sg PSAweDAyODQsCiAgICAgICAga1NtYWxsTGV0dGVyU3F1YXRSZXZlcnNlZEVzaCA9IDB4MDI4NSwK ICAgICAgICBrU21hbGxMZXR0ZXJFc2hXaXRoQ3VybCA9IDB4MDI4NiwKICAgICAgICBrU21hbGxM ZXR0ZXJUdXJuZWRUID0gMHgwMjg3LAogICAgICAgIGtTbWFsbExldHRlclRXaXRoUmV0cm9mbGV4 SG9vayA9IDB4MDI4OCwKICAgICAgICBrU21hbGxMZXR0ZXJVQmFyID0gMHgwMjg5LAogICAgICAg IGtTbWFsbExldHRlclVwc2lsb24gPSAweDAyOEEsCiAgICAgICAga1NtYWxsTGV0dGVyVldpdGhI b29rID0gMHgwMjhCLAogICAgICAgIGtTbWFsbExldHRlclR1cm5lZFYgPSAweDAyOEMsCiAgICAg ICAga1NtYWxsTGV0dGVyVHVybmVkVyA9IDB4MDI4RCwKICAgICAgICBrU21hbGxMZXR0ZXJUdXJu ZWRZID0gMHgwMjhFLAogICAgICAgIGtMZXR0ZXJTbWFsbENhcGl0YWxZID0gMHgwMjhGLAogICAg ICAgIGtTbWFsbExldHRlclpXaXRoUmV0cm9mbGV4SG9vayA9IDB4MDI5MCwKICAgICAgICBrU21h bGxMZXR0ZXJaV2l0aEN1cmwgPSAweDAyOTEsCiAgICAgICAga1NtYWxsTGV0dGVyRXpoID0gMHgw MjkyLAogICAgICAgIGtTbWFsbExldHRlckV6aFdpdGhDdXJsID0gMHgwMjkzLAogICAgICAgIGtM ZXR0ZXJHbG90dGFsU3RvcCA9IDB4MDI5NCwKICAgICAgICBrTGV0dGVyUGhhcnluZ2VhbFZvaWNl ZEZyaWNhdGl2ZSA9IDB4MDI5NSwKICAgICAgICBrTGV0dGVySW52ZXJ0ZWRHbG90dGFsU3RvcCA9 IDB4MDI5NiwKICAgICAgICBrTGV0dGVyU3RyZXRjaGVkQyA9IDB4MDI5NywKICAgICAgICBrTGV0 dGVyQmlsYWJpYWxDbGljayA9IDB4MDI5OCwKICAgICAgICBrTGV0dGVyU21hbGxDYXBpdGFsQiA9 IDB4MDI5OSwKICAgICAgICBrU21hbGxMZXR0ZXJDbG9zZWRPcGVuRSA9IDB4MDI5QSwKICAgICAg ICBrTGV0dGVyU21hbGxDYXBpdGFsR1dpdGhIb29rID0gMHgwMjlCLAogICAgICAgIGtMZXR0ZXJT bWFsbENhcGl0YWxIID0gMHgwMjlDLAogICAgICAgIGtTbWFsbExldHRlckpXaXRoQ3Jvc3NlZFRh aWwgPSAweDAyOUQsCiAgICAgICAga1NtYWxsTGV0dGVyVHVybmVkSyA9IDB4MDI5RSwKICAgICAg ICBrTGV0dGVyU21hbGxDYXBpdGFsTCA9IDB4MDI5RiwKICAgICAgICBrU21hbGxMZXR0ZXJRV2l0 aEhvb2sgPSAweDAyQTAsCiAgICAgICAga0xldHRlckdsb3R0YWxTdG9wV2l0aFN0cm9rZSA9IDB4 MDJBMSwKICAgICAgICBrTGV0dGVyUmV2ZXJzZWRHbG90dGFsU3RvcFdpdGhTdHJva2UgPSAweDAy QTIsCiAgICAgICAga1NtYWxsTGV0dGVyRHpEaWdyYXBoID0gMHgwMkEzLAogICAgICAgIGtTbWFs bExldHRlckRlemhEaWdyYXBoID0gMHgwMkE0LAogICAgICAgIGtTbWFsbExldHRlckR6RGlncmFw aFdpdGhDdXJsID0gMHgwMkE1LAogICAgICAgIGtTbWFsbExldHRlclRzRGlncmFwaCA9IDB4MDJB NiwKICAgICAgICBrU21hbGxMZXR0ZXJUZXNoRGlncmFwaCA9IDB4MDJBNywKICAgICAgICBrU21h bGxMZXR0ZXJUY0RpZ3JhcGhXaXRoQ3VybCA9IDB4MDJBOCwKICAgICAgICBrQ2FwaXRhbExldHRl ckFXaXRoUmluZ0JlbG93ID0gMHgxRTAwLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoUmluZ0Jl bG93ID0gMHgxRTAxLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQldpdGhEb3RBYm92ZSA9IDB4MUUw MiwKICAgICAgICBrU21hbGxMZXR0ZXJCV2l0aERvdEFib3ZlID0gMHgxRTAzLAogICAgICAgIGtD YXBpdGFsTGV0dGVyQldpdGhEb3RCZWxvdyA9IDB4MUUwNCwKICAgICAgICBrU21hbGxMZXR0ZXJC V2l0aERvdEJlbG93ID0gMHgxRTA1LAogICAgICAgIGtDYXBpdGFsTGV0dGVyQldpdGhMaW5lQmVs b3cgPSAweDFFMDYsCiAgICAgICAga1NtYWxsTGV0dGVyQldpdGhMaW5lQmVsb3cgPSAweDFFMDcs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJDV2l0aENlZGlsbGFBbmRBY3V0ZSA9IDB4MUUwOCwKICAg ICAgICBrU21hbGxMZXR0ZXJDV2l0aENlZGlsbGFBbmRBY3V0ZSA9IDB4MUUwOSwKICAgICAgICBr Q2FwaXRhbExldHRlckRXaXRoRG90QWJvdmUgPSAweDFFMEEsCiAgICAgICAga1NtYWxsTGV0dGVy RFdpdGhEb3RBYm92ZSA9IDB4MUUwQiwKICAgICAgICBrQ2FwaXRhbExldHRlckRXaXRoRG90QmVs b3cgPSAweDFFMEMsCiAgICAgICAga1NtYWxsTGV0dGVyRFdpdGhEb3RCZWxvdyA9IDB4MUUwRCwK ICAgICAgICBrQ2FwaXRhbExldHRlckRXaXRoTGluZUJlbG93ID0gMHgxRTBFLAogICAgICAgIGtT bWFsbExldHRlckRXaXRoTGluZUJlbG93ID0gMHgxRTBGLAogICAgICAgIGtDYXBpdGFsTGV0dGVy RFdpdGhDZWRpbGxhID0gMHgxRTEwLAogICAgICAgIGtTbWFsbExldHRlckRXaXRoQ2VkaWxsYSA9 IDB4MUUxMSwKICAgICAgICBrQ2FwaXRhbExldHRlckRXaXRoQ2lyY3VtZmxleEJlbG93ID0gMHgx RTEyLAogICAgICAgIGtTbWFsbExldHRlckRXaXRoQ2lyY3VtZmxleEJlbG93ID0gMHgxRTEzLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhNYWNyb25BbmRHcmF2ZSA9IDB4MUUxNCwKICAgICAg ICBrU21hbGxMZXR0ZXJFV2l0aE1hY3JvbkFuZEdyYXZlID0gMHgxRTE1LAogICAgICAgIGtDYXBp dGFsTGV0dGVyRVdpdGhNYWNyb25BbmRBY3V0ZSA9IDB4MUUxNiwKICAgICAgICBrU21hbGxMZXR0 ZXJFV2l0aE1hY3JvbkFuZEFjdXRlID0gMHgxRTE3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdp dGhDaXJjdW1mbGV4QmVsb3cgPSAweDFFMTgsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhDaXJj dW1mbGV4QmVsb3cgPSAweDFFMTksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJFV2l0aFRpbGRlQmVs b3cgPSAweDFFMUEsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhUaWxkZUJlbG93ID0gMHgxRTFC LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhDZWRpbGxhQW5kQnJldmUgPSAweDFFMUMsCiAg ICAgICAga1NtYWxsTGV0dGVyRVdpdGhDZWRpbGxhQW5kQnJldmUgPSAweDFFMUQsCiAgICAgICAg a0NhcGl0YWxMZXR0ZXJGV2l0aERvdEFib3ZlID0gMHgxRTFFLAogICAgICAgIGtTbWFsbExldHRl ckZXaXRoRG90QWJvdmUgPSAweDFFMUYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJHV2l0aE1hY3Jv biA9IDB4MUUyMCwKICAgICAgICBrU21hbGxMZXR0ZXJHV2l0aE1hY3JvbiA9IDB4MUUyMSwKICAg ICAgICBrQ2FwaXRhbExldHRlckhXaXRoRG90QWJvdmUgPSAweDFFMjIsCiAgICAgICAga1NtYWxs TGV0dGVySFdpdGhEb3RBYm92ZSA9IDB4MUUyMywKICAgICAgICBrQ2FwaXRhbExldHRlckhXaXRo RG90QmVsb3cgPSAweDFFMjQsCiAgICAgICAga1NtYWxsTGV0dGVySFdpdGhEb3RCZWxvdyA9IDB4 MUUyNSwKICAgICAgICBrQ2FwaXRhbExldHRlckhXaXRoRGlhZXJlc2lzID0gMHgxRTI2LAogICAg ICAgIGtTbWFsbExldHRlckhXaXRoRGlhZXJlc2lzID0gMHgxRTI3LAogICAgICAgIGtDYXBpdGFs TGV0dGVySFdpdGhDZWRpbGxhID0gMHgxRTI4LAogICAgICAgIGtTbWFsbExldHRlckhXaXRoQ2Vk aWxsYSA9IDB4MUUyOSwKICAgICAgICBrQ2FwaXRhbExldHRlckhXaXRoQnJldmVCZWxvdyA9IDB4 MUUyQSwKICAgICAgICBrU21hbGxMZXR0ZXJIV2l0aEJyZXZlQmVsb3cgPSAweDFFMkIsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJJV2l0aFRpbGRlQmVsb3cgPSAweDFFMkMsCiAgICAgICAga1NtYWxs TGV0dGVySVdpdGhUaWxkZUJlbG93ID0gMHgxRTJELAogICAgICAgIGtDYXBpdGFsTGV0dGVySVdp dGhEaWFlcmVzaXNBbmRBY3V0ZSA9IDB4MUUyRSwKICAgICAgICBrU21hbGxMZXR0ZXJJV2l0aERp YWVyZXNpc0FuZEFjdXRlID0gMHgxRTJGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyS1dpdGhBY3V0 ZSA9IDB4MUUzMCwKICAgICAgICBrU21hbGxMZXR0ZXJLV2l0aEFjdXRlID0gMHgxRTMxLAogICAg ICAgIGtDYXBpdGFsTGV0dGVyS1dpdGhEb3RCZWxvdyA9IDB4MUUzMiwKICAgICAgICBrU21hbGxM ZXR0ZXJLV2l0aERvdEJlbG93ID0gMHgxRTMzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyS1dpdGhM aW5lQmVsb3cgPSAweDFFMzQsCiAgICAgICAga1NtYWxsTGV0dGVyS1dpdGhMaW5lQmVsb3cgPSAw eDFFMzUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJMV2l0aERvdEJlbG93ID0gMHgxRTM2LAogICAg ICAgIGtTbWFsbExldHRlckxXaXRoRG90QmVsb3cgPSAweDFFMzcsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJMV2l0aERvdEJlbG93QW5kTWFjcm9uID0gMHgxRTM4LAogICAgICAgIGtTbWFsbExldHRl ckxXaXRoRG90QmVsb3dBbmRNYWNyb24gPSAweDFFMzksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJM V2l0aExpbmVCZWxvdyA9IDB4MUUzQSwKICAgICAgICBrU21hbGxMZXR0ZXJMV2l0aExpbmVCZWxv dyA9IDB4MUUzQiwKICAgICAgICBrQ2FwaXRhbExldHRlckxXaXRoQ2lyY3VtZmxleEJlbG93ID0g MHgxRTNDLAogICAgICAgIGtTbWFsbExldHRlckxXaXRoQ2lyY3VtZmxleEJlbG93ID0gMHgxRTNE LAogICAgICAgIGtDYXBpdGFsTGV0dGVyTVdpdGhBY3V0ZSA9IDB4MUUzRSwKICAgICAgICBrU21h bGxMZXR0ZXJNV2l0aEFjdXRlID0gMHgxRTNGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyTVdpdGhE b3RBYm92ZSA9IDB4MUU0MCwKICAgICAgICBrU21hbGxMZXR0ZXJNV2l0aERvdEFib3ZlID0gMHgx RTQxLAogICAgICAgIGtDYXBpdGFsTGV0dGVyTVdpdGhEb3RCZWxvdyA9IDB4MUU0MiwKICAgICAg ICBrU21hbGxMZXR0ZXJNV2l0aERvdEJlbG93ID0gMHgxRTQzLAogICAgICAgIGtDYXBpdGFsTGV0 dGVyTldpdGhEb3RBYm92ZSA9IDB4MUU0NCwKICAgICAgICBrU21hbGxMZXR0ZXJOV2l0aERvdEFi b3ZlID0gMHgxRTQ1LAogICAgICAgIGtDYXBpdGFsTGV0dGVyTldpdGhEb3RCZWxvdyA9IDB4MUU0 NiwKICAgICAgICBrU21hbGxMZXR0ZXJOV2l0aERvdEJlbG93ID0gMHgxRTQ3LAogICAgICAgIGtD YXBpdGFsTGV0dGVyTldpdGhMaW5lQmVsb3cgPSAweDFFNDgsCiAgICAgICAga1NtYWxsTGV0dGVy TldpdGhMaW5lQmVsb3cgPSAweDFFNDksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJOV2l0aENpcmN1 bWZsZXhCZWxvdyA9IDB4MUU0QSwKICAgICAgICBrU21hbGxMZXR0ZXJOV2l0aENpcmN1bWZsZXhC ZWxvdyA9IDB4MUU0QiwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoVGlsZGVBbmRBY3V0ZSA9 IDB4MUU0QywKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aFRpbGRlQW5kQWN1dGUgPSAweDFFNEQs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aFRpbGRlQW5kRGlhZXJlc2lzID0gMHgxRTRFLAog ICAgICAgIGtTbWFsbExldHRlck9XaXRoVGlsZGVBbmREaWFlcmVzaXMgPSAweDFFNEYsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJPV2l0aE1hY3JvbkFuZEdyYXZlID0gMHgxRTUwLAogICAgICAgIGtT bWFsbExldHRlck9XaXRoTWFjcm9uQW5kR3JhdmUgPSAweDFFNTEsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJPV2l0aE1hY3JvbkFuZEFjdXRlID0gMHgxRTUyLAogICAgICAgIGtTbWFsbExldHRlck9X aXRoTWFjcm9uQW5kQWN1dGUgPSAweDFFNTMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJQV2l0aEFj dXRlID0gMHgxRTU0LAogICAgICAgIGtTbWFsbExldHRlclBXaXRoQWN1dGUgPSAweDFFNTUsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJQV2l0aERvdEFib3ZlID0gMHgxRTU2LAogICAgICAgIGtTbWFs bExldHRlclBXaXRoRG90QWJvdmUgPSAweDFFNTcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJSV2l0 aERvdEFib3ZlID0gMHgxRTU4LAogICAgICAgIGtTbWFsbExldHRlclJXaXRoRG90QWJvdmUgPSAw eDFFNTksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJSV2l0aERvdEJlbG93ID0gMHgxRTVBLAogICAg ICAgIGtTbWFsbExldHRlclJXaXRoRG90QmVsb3cgPSAweDFFNUIsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJSV2l0aERvdEJlbG93QW5kTWFjcm9uID0gMHgxRTVDLAogICAgICAgIGtTbWFsbExldHRl clJXaXRoRG90QmVsb3dBbmRNYWNyb24gPSAweDFFNUQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJS V2l0aExpbmVCZWxvdyA9IDB4MUU1RSwKICAgICAgICBrU21hbGxMZXR0ZXJSV2l0aExpbmVCZWxv dyA9IDB4MUU1RiwKICAgICAgICBrQ2FwaXRhbExldHRlclNXaXRoRG90QWJvdmUgPSAweDFFNjAs CiAgICAgICAga1NtYWxsTGV0dGVyU1dpdGhEb3RBYm92ZSA9IDB4MUU2MSwKICAgICAgICBrQ2Fw aXRhbExldHRlclNXaXRoRG90QmVsb3cgPSAweDFFNjIsCiAgICAgICAga1NtYWxsTGV0dGVyU1dp dGhEb3RCZWxvdyA9IDB4MUU2MywKICAgICAgICBrQ2FwaXRhbExldHRlclNXaXRoQWN1dGVBbmRE b3RBYm92ZSA9IDB4MUU2NCwKICAgICAgICBrU21hbGxMZXR0ZXJTV2l0aEFjdXRlQW5kRG90QWJv dmUgPSAweDFFNjUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJTV2l0aENhcm9uQW5kRG90QWJvdmUg PSAweDFFNjYsCiAgICAgICAga1NtYWxsTGV0dGVyU1dpdGhDYXJvbkFuZERvdEFib3ZlID0gMHgx RTY3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyU1dpdGhEb3RCZWxvd0FuZERvdEFib3ZlID0gMHgx RTY4LAogICAgICAgIGtTbWFsbExldHRlclNXaXRoRG90QmVsb3dBbmREb3RBYm92ZSA9IDB4MUU2 OSwKICAgICAgICBrQ2FwaXRhbExldHRlclRXaXRoRG90QWJvdmUgPSAweDFFNkEsCiAgICAgICAg a1NtYWxsTGV0dGVyVFdpdGhEb3RBYm92ZSA9IDB4MUU2QiwKICAgICAgICBrQ2FwaXRhbExldHRl clRXaXRoRG90QmVsb3cgPSAweDFFNkMsCiAgICAgICAga1NtYWxsTGV0dGVyVFdpdGhEb3RCZWxv dyA9IDB4MUU2RCwKICAgICAgICBrQ2FwaXRhbExldHRlclRXaXRoTGluZUJlbG93ID0gMHgxRTZF LAogICAgICAgIGtTbWFsbExldHRlclRXaXRoTGluZUJlbG93ID0gMHgxRTZGLAogICAgICAgIGtD YXBpdGFsTGV0dGVyVFdpdGhDaXJjdW1mbGV4QmVsb3cgPSAweDFFNzAsCiAgICAgICAga1NtYWxs TGV0dGVyVFdpdGhDaXJjdW1mbGV4QmVsb3cgPSAweDFFNzEsCiAgICAgICAga0NhcGl0YWxMZXR0 ZXJVV2l0aERpYWVyZXNpc0JlbG93ID0gMHgxRTcyLAogICAgICAgIGtTbWFsbExldHRlclVXaXRo RGlhZXJlc2lzQmVsb3cgPSAweDFFNzMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aFRpbGRl QmVsb3cgPSAweDFFNzQsCiAgICAgICAga1NtYWxsTGV0dGVyVVdpdGhUaWxkZUJlbG93ID0gMHgx RTc1LAogICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhDaXJjdW1mbGV4QmVsb3cgPSAweDFFNzYs CiAgICAgICAga1NtYWxsTGV0dGVyVVdpdGhDaXJjdW1mbGV4QmVsb3cgPSAweDFFNzcsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJVV2l0aFRpbGRlQW5kQWN1dGUgPSAweDFFNzgsCiAgICAgICAga1Nt YWxsTGV0dGVyVVdpdGhUaWxkZUFuZEFjdXRlID0gMHgxRTc5LAogICAgICAgIGtDYXBpdGFsTGV0 dGVyVVdpdGhNYWNyb25BbmREaWFlcmVzaXMgPSAweDFFN0EsCiAgICAgICAga1NtYWxsTGV0dGVy VVdpdGhNYWNyb25BbmREaWFlcmVzaXMgPSAweDFFN0IsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJW V2l0aFRpbGRlID0gMHgxRTdDLAogICAgICAgIGtTbWFsbExldHRlclZXaXRoVGlsZGUgPSAweDFF N0QsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJWV2l0aERvdEJlbG93ID0gMHgxRTdFLAogICAgICAg IGtTbWFsbExldHRlclZXaXRoRG90QmVsb3cgPSAweDFFN0YsCiAgICAgICAga0NhcGl0YWxMZXR0 ZXJXV2l0aEdyYXZlID0gMHgxRTgwLAogICAgICAgIGtTbWFsbExldHRlcldXaXRoR3JhdmUgPSAw eDFFODEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJXV2l0aEFjdXRlID0gMHgxRTgyLAogICAgICAg IGtTbWFsbExldHRlcldXaXRoQWN1dGUgPSAweDFFODMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJX V2l0aERpYWVyZXNpcyA9IDB4MUU4NCwKICAgICAgICBrU21hbGxMZXR0ZXJXV2l0aERpYWVyZXNp cyA9IDB4MUU4NSwKICAgICAgICBrQ2FwaXRhbExldHRlcldXaXRoRG90QWJvdmUgPSAweDFFODYs CiAgICAgICAga1NtYWxsTGV0dGVyV1dpdGhEb3RBYm92ZSA9IDB4MUU4NywKICAgICAgICBrQ2Fw aXRhbExldHRlcldXaXRoRG90QmVsb3cgPSAweDFFODgsCiAgICAgICAga1NtYWxsTGV0dGVyV1dp dGhEb3RCZWxvdyA9IDB4MUU4OSwKICAgICAgICBrQ2FwaXRhbExldHRlclhXaXRoRG90QWJvdmUg PSAweDFFOEEsCiAgICAgICAga1NtYWxsTGV0dGVyWFdpdGhEb3RBYm92ZSA9IDB4MUU4QiwKICAg ICAgICBrQ2FwaXRhbExldHRlclhXaXRoRGlhZXJlc2lzID0gMHgxRThDLAogICAgICAgIGtTbWFs bExldHRlclhXaXRoRGlhZXJlc2lzID0gMHgxRThELAogICAgICAgIGtDYXBpdGFsTGV0dGVyWVdp dGhEb3RBYm92ZSA9IDB4MUU4RSwKICAgICAgICBrU21hbGxMZXR0ZXJZV2l0aERvdEFib3ZlID0g MHgxRThGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyWldpdGhDaXJjdW1mbGV4ID0gMHgxRTkwLAog ICAgICAgIGtTbWFsbExldHRlclpXaXRoQ2lyY3VtZmxleCA9IDB4MUU5MSwKICAgICAgICBrQ2Fw aXRhbExldHRlclpXaXRoRG90QmVsb3cgPSAweDFFOTIsCiAgICAgICAga1NtYWxsTGV0dGVyWldp dGhEb3RCZWxvdyA9IDB4MUU5MywKICAgICAgICBrQ2FwaXRhbExldHRlclpXaXRoTGluZUJlbG93 ID0gMHgxRTk0LAogICAgICAgIGtTbWFsbExldHRlclpXaXRoTGluZUJlbG93ID0gMHgxRTk1LAog ICAgICAgIGtTbWFsbExldHRlckhXaXRoTGluZUJlbG93ID0gMHgxRTk2LAogICAgICAgIGtTbWFs bExldHRlclRXaXRoRGlhZXJlc2lzID0gMHgxRTk3LAogICAgICAgIGtTbWFsbExldHRlcldXaXRo UmluZ0Fib3ZlID0gMHgxRTk4LAogICAgICAgIGtTbWFsbExldHRlcllXaXRoUmluZ0Fib3ZlID0g MHgxRTk5LAogICAgICAgIGtTbWFsbExldHRlckFXaXRoUmlnaHRIYWxmUmluZyA9IDB4MUU5QSwK ICAgICAgICBrQ2FwaXRhbExldHRlckFXaXRoRG90QmVsb3cgPSAweDFFQTAsCiAgICAgICAga1Nt YWxsTGV0dGVyQVdpdGhEb3RCZWxvdyA9IDB4MUVBMSwKICAgICAgICBrQ2FwaXRhbExldHRlckFX aXRoSG9va0Fib3ZlID0gMHgxRUEyLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoSG9va0Fib3Zl ID0gMHgxRUEzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhDaXJjdW1mbGV4QW5kQWN1dGUg PSAweDFFQTQsCiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhDaXJjdW1mbGV4QW5kQWN1dGUgPSAw eDFFQTUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aENpcmN1bWZsZXhBbmRHcmF2ZSA9IDB4 MUVBNiwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aENpcmN1bWZsZXhBbmRHcmF2ZSA9IDB4MUVB NywKICAgICAgICBrQ2FwaXRhbExldHRlckFXaXRoQ2lyY3VtZmxleEFuZEhvb2tBYm92ZSA9IDB4 MUVBOCwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aENpcmN1bWZsZXhBbmRIb29rQWJvdmUgPSAw eDFFQTksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aENpcmN1bWZsZXhBbmRUaWxkZSA9IDB4 MUVBQSwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0aENpcmN1bWZsZXhBbmRUaWxkZSA9IDB4MUVB QiwKICAgICAgICBrQ2FwaXRhbExldHRlckFXaXRoQ2lyY3VtZmxleEFuZERvdEJlbG93ID0gMHgx RUFDLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoQ2lyY3VtZmxleEFuZERvdEJlbG93ID0gMHgx RUFELAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhCcmV2ZUFuZEFjdXRlID0gMHgxRUFFLAog ICAgICAgIGtTbWFsbExldHRlckFXaXRoQnJldmVBbmRBY3V0ZSA9IDB4MUVBRiwKICAgICAgICBr Q2FwaXRhbExldHRlckFXaXRoQnJldmVBbmRHcmF2ZSA9IDB4MUVCMCwKICAgICAgICBrU21hbGxM ZXR0ZXJBV2l0aEJyZXZlQW5kR3JhdmUgPSAweDFFQjEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJB V2l0aEJyZXZlQW5kSG9va0Fib3ZlID0gMHgxRUIyLAogICAgICAgIGtTbWFsbExldHRlckFXaXRo QnJldmVBbmRIb29rQWJvdmUgPSAweDFFQjMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aEJy ZXZlQW5kVGlsZGUgPSAweDFFQjQsCiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhCcmV2ZUFuZFRp bGRlID0gMHgxRUI1LAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhCcmV2ZUFuZERvdEJlbG93 ID0gMHgxRUI2LAogICAgICAgIGtTbWFsbExldHRlckFXaXRoQnJldmVBbmREb3RCZWxvdyA9IDB4 MUVCNywKICAgICAgICBrQ2FwaXRhbExldHRlckVXaXRoRG90QmVsb3cgPSAweDFFQjgsCiAgICAg ICAga1NtYWxsTGV0dGVyRVdpdGhEb3RCZWxvdyA9IDB4MUVCOSwKICAgICAgICBrQ2FwaXRhbExl dHRlckVXaXRoSG9va0Fib3ZlID0gMHgxRUJBLAogICAgICAgIGtTbWFsbExldHRlckVXaXRoSG9v a0Fib3ZlID0gMHgxRUJCLAogICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhUaWxkZSA9IDB4MUVC QywKICAgICAgICBrU21hbGxMZXR0ZXJFV2l0aFRpbGRlID0gMHgxRUJELAogICAgICAgIGtDYXBp dGFsTGV0dGVyRVdpdGhDaXJjdW1mbGV4QW5kQWN1dGUgPSAweDFFQkUsCiAgICAgICAga1NtYWxs TGV0dGVyRVdpdGhDaXJjdW1mbGV4QW5kQWN1dGUgPSAweDFFQkYsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJFV2l0aENpcmN1bWZsZXhBbmRHcmF2ZSA9IDB4MUVDMCwKICAgICAgICBrU21hbGxMZXR0 ZXJFV2l0aENpcmN1bWZsZXhBbmRHcmF2ZSA9IDB4MUVDMSwKICAgICAgICBrQ2FwaXRhbExldHRl ckVXaXRoQ2lyY3VtZmxleEFuZEhvb2tBYm92ZSA9IDB4MUVDMiwKICAgICAgICBrU21hbGxMZXR0 ZXJFV2l0aENpcmN1bWZsZXhBbmRIb29rQWJvdmUgPSAweDFFQzMsCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJFV2l0aENpcmN1bWZsZXhBbmRUaWxkZSA9IDB4MUVDNCwKICAgICAgICBrU21hbGxMZXR0 ZXJFV2l0aENpcmN1bWZsZXhBbmRUaWxkZSA9IDB4MUVDNSwKICAgICAgICBrQ2FwaXRhbExldHRl ckVXaXRoQ2lyY3VtZmxleEFuZERvdEJlbG93ID0gMHgxRUM2LAogICAgICAgIGtTbWFsbExldHRl ckVXaXRoQ2lyY3VtZmxleEFuZERvdEJlbG93ID0gMHgxRUM3LAogICAgICAgIGtDYXBpdGFsTGV0 dGVySVdpdGhIb29rQWJvdmUgPSAweDFFQzgsCiAgICAgICAga1NtYWxsTGV0dGVySVdpdGhIb29r QWJvdmUgPSAweDFFQzksCiAgICAgICAga0NhcGl0YWxMZXR0ZXJJV2l0aERvdEJlbG93ID0gMHgx RUNBLAogICAgICAgIGtTbWFsbExldHRlcklXaXRoRG90QmVsb3cgPSAweDFFQ0IsCiAgICAgICAg a0NhcGl0YWxMZXR0ZXJPV2l0aERvdEJlbG93ID0gMHgxRUNDLAogICAgICAgIGtTbWFsbExldHRl ck9XaXRoRG90QmVsb3cgPSAweDFFQ0QsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aEhvb2tB Ym92ZSA9IDB4MUVDRSwKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aEhvb2tBYm92ZSA9IDB4MUVD RiwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoQ2lyY3VtZmxleEFuZEFjdXRlID0gMHgxRUQw LAogICAgICAgIGtTbWFsbExldHRlck9XaXRoQ2lyY3VtZmxleEFuZEFjdXRlID0gMHgxRUQxLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhDaXJjdW1mbGV4QW5kR3JhdmUgPSAweDFFRDIsCiAg ICAgICAga1NtYWxsTGV0dGVyT1dpdGhDaXJjdW1mbGV4QW5kR3JhdmUgPSAweDFFRDMsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJPV2l0aENpcmN1bWZsZXhBbmRIb29rQWJvdmUgPSAweDFFRDQsCiAg ICAgICAga1NtYWxsTGV0dGVyT1dpdGhDaXJjdW1mbGV4QW5kSG9va0Fib3ZlID0gMHgxRUQ1LAog ICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhDaXJjdW1mbGV4QW5kVGlsZGUgPSAweDFFRDYsCiAg ICAgICAga1NtYWxsTGV0dGVyT1dpdGhDaXJjdW1mbGV4QW5kVGlsZGUgPSAweDFFRDcsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJPV2l0aENpcmN1bWZsZXhBbmREb3RCZWxvdyA9IDB4MUVEOCwKICAg ICAgICBrU21hbGxMZXR0ZXJPV2l0aENpcmN1bWZsZXhBbmREb3RCZWxvdyA9IDB4MUVEOSwKICAg ICAgICBrQ2FwaXRhbExldHRlck9XaXRoSG9ybkFuZEFjdXRlID0gMHgxRURBLAogICAgICAgIGtT bWFsbExldHRlck9XaXRoSG9ybkFuZEFjdXRlID0gMHgxRURCLAogICAgICAgIGtDYXBpdGFsTGV0 dGVyT1dpdGhIb3JuQW5kR3JhdmUgPSAweDFFREMsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhI b3JuQW5kR3JhdmUgPSAweDFFREQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aEhvcm5BbmRI b29rQWJvdmUgPSAweDFFREUsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhIb3JuQW5kSG9va0Fi b3ZlID0gMHgxRURGLAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dpdGhIb3JuQW5kVGlsZGUgPSAw eDFFRTAsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhIb3JuQW5kVGlsZGUgPSAweDFFRTEsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aEhvcm5BbmREb3RCZWxvdyA9IDB4MUVFMiwKICAgICAg ICBrU21hbGxMZXR0ZXJPV2l0aEhvcm5BbmREb3RCZWxvdyA9IDB4MUVFMywKICAgICAgICBrQ2Fw aXRhbExldHRlclVXaXRoRG90QmVsb3cgPSAweDFFRTQsCiAgICAgICAga1NtYWxsTGV0dGVyVVdp dGhEb3RCZWxvdyA9IDB4MUVFNSwKICAgICAgICBrQ2FwaXRhbExldHRlclVXaXRoSG9va0Fib3Zl ID0gMHgxRUU2LAogICAgICAgIGtTbWFsbExldHRlclVXaXRoSG9va0Fib3ZlID0gMHgxRUU3LAog ICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhIb3JuQW5kQWN1dGUgPSAweDFFRTgsCiAgICAgICAg a1NtYWxsTGV0dGVyVVdpdGhIb3JuQW5kQWN1dGUgPSAweDFFRTksCiAgICAgICAga0NhcGl0YWxM ZXR0ZXJVV2l0aEhvcm5BbmRHcmF2ZSA9IDB4MUVFQSwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0 aEhvcm5BbmRHcmF2ZSA9IDB4MUVFQiwKICAgICAgICBrQ2FwaXRhbExldHRlclVXaXRoSG9ybkFu ZEhvb2tBYm92ZSA9IDB4MUVFQywKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aEhvcm5BbmRIb29r QWJvdmUgPSAweDFFRUQsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aEhvcm5BbmRUaWxkZSA9 IDB4MUVFRSwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aEhvcm5BbmRUaWxkZSA9IDB4MUVFRiwK ICAgICAgICBrQ2FwaXRhbExldHRlclVXaXRoSG9ybkFuZERvdEJlbG93ID0gMHgxRUYwLAogICAg ICAgIGtTbWFsbExldHRlclVXaXRoSG9ybkFuZERvdEJlbG93ID0gMHgxRUYxLAogICAgICAgIGtD YXBpdGFsTGV0dGVyWVdpdGhHcmF2ZSA9IDB4MUVGMiwKICAgICAgICBrU21hbGxMZXR0ZXJZV2l0 aEdyYXZlID0gMHgxRUYzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyWVdpdGhEb3RCZWxvdyA9IDB4 MUVGNCwKICAgICAgICBrU21hbGxMZXR0ZXJZV2l0aERvdEJlbG93ID0gMHgxRUY1LAogICAgICAg IGtDYXBpdGFsTGV0dGVyWVdpdGhIb29rQWJvdmUgPSAweDFFRjYsCiAgICAgICAga1NtYWxsTGV0 dGVyWVdpdGhIb29rQWJvdmUgPSAweDFFRjcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJZV2l0aFRp bGRlID0gMHgxRUY4LAogICAgICAgIGtTbWFsbExldHRlcllXaXRoVGlsZGUgPSAweDFFRjkKICAg IH07Cn07CgogCiAKIAoKY2xhc3MgVU1vZGlmaWVyTGV0dGVyIHsKcHVibGljOgogICAgZW51bSBF TW9kaWZpZXJMZXR0ZXJOYW1lcyB7CiAgICAgICAga1NtYWxsSCA9IDB4MDJCMCwKICAgICAgICBr U21hbGxIV2l0aEhvb2sgPSAweDAyQjEsCiAgICAgICAga1NtYWxsSiA9IDB4MDJCMiwKICAgICAg ICBrU21hbGxSID0gMHgwMkIzLAogICAgICAgIGtTbWFsbFR1cm5lZFIgPSAweDAyQjQsCiAgICAg ICAga1NtYWxsVHVybmVkUldpdGhIb29rID0gMHgwMkI1LAogICAgICAgIGtTbWFsbENhcGl0YWxJ bnZlcnRlZFIgPSAweDAyQjYsCiAgICAgICAga1NtYWxsVyA9IDB4MDJCNywKICAgICAgICBrU21h bGxZID0gMHgwMkI4LAogICAgICAgIGtUdXJuZWRDb21tYSA9IDB4MDJCQiwKICAgICAgICBrQXBv c3Ryb3BoZSA9IDB4MDJCQywKICAgICAgICBrUmV2ZXJzZWRDb21tYSA9IDB4MDJCRCwKICAgICAg ICBrUmlnaHRIYWxmUmluZyA9IDB4MDJCRSwKICAgICAgICBrTGVmdEhhbGZSaW5nID0gMHgwMkJG LAogICAgICAgIGtHbG90dGFsU3RvcCA9IDB4MDJDMCwKICAgICAgICBrUmV2ZXJzZWRHbG90dGFs U3RvcCA9IDB4MDJDMSwKICAgICAgICBrVHJpYW5ndWxhckNvbG9uID0gMHgwMkQwLAogICAgICAg IGtIYWxmVHJpYW5ndWxhckNvbG9uID0gMHgwMkQxLAogICAgICAgIGtTbWFsbEdhbW1hID0gMHgw MkUwLAogICAgICAgIGtTbWFsbEwgPSAweDAyRTEsCiAgICAgICAga1NtYWxsUyA9IDB4MDJFMiwK ICAgICAgICBrU21hbGxYID0gMHgwMkUzLAogICAgICAgIGtTbWFsbFJldmVyc2VkR2xvdHRhbFN0 b3AgPSAweDAyRTQsCiAgICAgICAga0RvdWJsZUFwb3N0cm9waGUgPSAweDAyRUUsCiAgICAgICAg a0dyZWVrWXBvZ2VncmFtbWVuaSA9IDB4MDM3QSwKICAgICAgICBrQXJtZW5pYW5MZWZ0SGFsZlJp bmcgPSAweDA1NTksCiAgICAgICAga0FyYWJpY1RhdHdlZWwgPSAweDA2NDAsCiAgICAgICAga0Fy YWJpY1NtYWxsV2F3ID0gMHgwNkU1LAogICAgICAgIGtBcmFiaWNTbWFsbFllaCA9IDB4MDZFNiwK ICAgICAgICBrVGhhaUNoYXJhY3Rlck1haXlhbW9rID0gMHgwRTQ2LAogICAgICAgIGtMYW9Lb0xh ID0gMHgwRUM2LAogICAgICAgIGtNb25nb2xpYW5MZXR0ZXJUb2RvTG9uZ1Zvd2VsU2lnbiA9IDB4 MTg0MywKICAgICAgICBrSWRlb2dyYXBoaWNJdGVyYXRpb25NYXJrID0gMHgzMDA1LAogICAgICAg IGtWZXJ0aWNhbEthbmFSZXBlYXRNYXJrID0gMHgzMDMxLAogICAgICAgIGtWZXJ0aWNhbEthbmFS ZXBlYXRXaXRoVm9pY2VkU291bmRNYXJrID0gMHgzMDMyLAogICAgICAgIGtWZXJ0aWNhbEthbmFS ZXBlYXRNYXJrVXBwZXJIYWxmID0gMHgzMDMzLAogICAgICAgIGtWZXJ0aWNhbEthbmFSZXBlYXRX aXRoVm9pY2VkU291bmRNYXJrVXBwZXJIYWxmID0gMHgzMDM0LAogICAgICAgIGtWZXJ0aWNhbEth bmFSZXBlYXRNYXJrTG93ZXJIYWxmID0gMHgzMDM1LAogICAgICAgIGtIaXJhZ2FuYUl0ZXJhdGlv bk1hcmsgPSAweDMwOUQsCiAgICAgICAga0hpcmFnYW5hVm9pY2VkSXRlcmF0aW9uTWFyayA9IDB4 MzA5RSwKICAgICAgICBrS2F0YWthbmFIaXJhZ2FuYVByb2xvbmdlZFNvdW5kTWFyayA9IDB4MzBG QywKICAgICAgICBrS2F0YWthbmFJdGVyYXRpb25NYXJrID0gMHgzMEZELAogICAgICAgIGtLYXRh a2FuYVZvaWNlZEl0ZXJhdGlvbk1hcmsgPSAweDMwRkUsCgoKICAgICAgICAgCiAgICAgICAga1By aW1lID0gMHgwMkI5LAogICAgICAgIGtEb3VibGVQcmltZSA9IDB4MDJCQSwKICAgICAgICBrVXBB cnJvd2hlYWQgPSAweDAyQzQsCiAgICAgICAga0Rvd25BcnJvd2hlYWQgPSAweDAyQzUsCiAgICAg ICAga0NlbnRyZWRSaWdodEhhbGZSaW5nID0gMHgwMkQyLAogICAgICAgIGtDZW50cmVkTGVmdEhh bGZSaW5nID0gMHgwMkQzLAogICAgICAgIGtVcFRhY2sgPSAweDAyRDQsCiAgICAgICAga0Rvd25U YWNrID0gMHgwMkQ1LAogICAgICAgIGtFeHRyYUhpZ2hUb25lQmFyID0gMHgwMkU1LAogICAgICAg IGtFeHRyYUxvd1RvbmVCYXIgPSAweDAyRTksCiAgICAgICAga0hpZ2hUb25lQmFyID0gMHgwMkU2 LAogICAgICAgIGtMZWZ0QXJyb3doZWFkID0gMHgwMkMyLAogICAgICAgIGtMb3dBY3V0ZUFjY2Vu dCA9IDB4MDJDRiwKICAgICAgICBrTG93R3JhdmVBY2NlbnQgPSAweDAyQ0UsCiAgICAgICAga0xv d01hY3JvbiA9IDB4MDJDRCwKICAgICAgICBrTG93VG9uZUJhciA9IDB4MDJFOCwKICAgICAgICBr TG93VmVydGljYWxMaW5lID0gMHgwMkNDLAogICAgICAgIGtNaWRUb25lQmFyID0gMHgwMkU3LAog ICAgICAgIGtSaG90aWNIb29rID0gMHgwMkRFLAogICAgICAgIGtSaWdodEFycm93aGVhZCA9IDB4 MDJDMywKICAgICAgICBrU21hbGxUaWxkZSA9IDB4MDJEQywKCgogICAgICAgICAKICAgICAgICBr U21hbGxISG9vayA9IGtTbWFsbEhXaXRoSG9vaywKICAgICAgICBrU21hbGxUdXJuZWRSSG9vayA9 IGtTbWFsbFR1cm5lZFJXaXRoSG9vaywKICAgICAgICBrR3JlZWtTcGFjaW5nSW90YUJlbG93ID0g a0dyZWVrWXBvZ2VncmFtbWVuaSwKICAgICAgICBrVGhhaU1haVlhbW9rID0ga1RoYWlDaGFyYWN0 ZXJNYWl5YW1vawogICAgfTsKfTsKCiAKIAogCgpjbGFzcyBVQ29tYmluaW5nIHsKcHVibGljOgog ICAgZW51bSBFQ29tYmluaW5nTmFtZXMgewogICAgICAgIGtHcmF2ZUFjY2VudCA9IDB4MDMwMCwK ICAgICAgICBrQWN1dGVBY2NlbnQgPSAweDAzMDEsCiAgICAgICAga0NpcmN1bWZsZXhBY2NlbnQg PSAweDAzMDIsCiAgICAgICAga1RpbGRlID0gMHgwMzAzLAogICAgICAgIGtNYWNyb24gPSAweDAz MDQsCiAgICAgICAga092ZXJsaW5lID0gMHgwMzA1LAogICAgICAgIGtCcmV2ZSA9IDB4MDMwNiwK ICAgICAgICBrRG90QWJvdmUgPSAweDAzMDcsCiAgICAgICAga0RpYWVyZXNpcyA9IDB4MDMwOCwK ICAgICAgICBrSG9va0Fib3ZlID0gMHgwMzA5LAogICAgICAgIGtSaW5nQWJvdmUgPSAweDAzMEEs CiAgICAgICAga0RvdWJsZUFjdXRlQWNjZW50ID0gMHgwMzBCLAogICAgICAgIGtDYXJvbiA9IDB4 MDMwQywKICAgICAgICBrVmVydGljYWxMaW5lQWJvdmUgPSAweDAzMEQsCiAgICAgICAga0RvdWJs ZVZlcnRpY2FsTGluZUFib3ZlID0gMHgwMzBFLAogICAgICAgIGtEb3VibGVHcmF2ZUFjY2VudCA9 IDB4MDMwRiwKICAgICAgICBrQ2FuZHJhYmluZHUgPSAweDAzMTAsCiAgICAgICAga0ludmVydGVk QnJldmUgPSAweDAzMTEsCiAgICAgICAga1R1cm5lZENvbW1hQWJvdmUgPSAweDAzMTIsCiAgICAg ICAga0NvbW1hQWJvdmUgPSAweDAzMTMsCiAgICAgICAga1JldmVyc2VkQ29tbWFBYm92ZSA9IDB4 MDMxNCwKICAgICAgICBrQ29tbWFBYm92ZVJpZ2h0ID0gMHgwMzE1LAogICAgICAgIGtHcmF2ZUFj Y2VudEJlbG93ID0gMHgwMzE2LAogICAgICAgIGtBY3V0ZUFjY2VudEJlbG93ID0gMHgwMzE3LAog ICAgICAgIGtMZWZ0VGFja0JlbG93ID0gMHgwMzE4LAogICAgICAgIGtSaWdodFRhY2tCZWxvdyA9 IDB4MDMxOSwKICAgICAgICBrTGVmdEFuZ2xlQWJvdmUgPSAweDAzMUEsCiAgICAgICAga0hvcm4g PSAweDAzMUIsCiAgICAgICAga0xlZnRIYWxmUmluZ0JlbG93ID0gMHgwMzFDLAogICAgICAgIGtV cFRhY2tCZWxvdyA9IDB4MDMxRCwKICAgICAgICBrRG93blRhY2tCZWxvdyA9IDB4MDMxRSwKICAg ICAgICBrUGx1c1NpZ25CZWxvdyA9IDB4MDMxRiwKICAgICAgICBrTWludXNTaWduQmVsb3cgPSAw eDAzMjAsCiAgICAgICAga1BhbGF0YWxpemVkSG9va0JlbG93ID0gMHgwMzIxLAogICAgICAgIGtS ZXRyb2ZsZXhIb29rQmVsb3cgPSAweDAzMjIsCiAgICAgICAga0RvdEJlbG93ID0gMHgwMzIzLAog ICAgICAgIGtEaWFlcmVzaXNCZWxvdyA9IDB4MDMyNCwKICAgICAgICBrUmluZ0JlbG93ID0gMHgw MzI1LAogICAgICAgIGtDb21tYUJlbG93ID0gMHgwMzI2LAogICAgICAgIGtDZWRpbGxhID0gMHgw MzI3LAogICAgICAgIGtPZ29uZWsgPSAweDAzMjgsCiAgICAgICAga1ZlcnRpY2FsTGluZUJlbG93 ID0gMHgwMzI5LAogICAgICAgIGtCcmlkZ2VCZWxvdyA9IDB4MDMyQSwKICAgICAgICBrSW52ZXJ0 ZWREb3VibGVBcmNoQmVsb3cgPSAweDAzMkIsCiAgICAgICAga0Nhcm9uQmVsb3cgPSAweDAzMkMs CiAgICAgICAga0NpcmN1bWZsZXhBY2NlbnRCZWxvdyA9IDB4MDMyRCwKICAgICAgICBrQnJldmVC ZWxvdyA9IDB4MDMyRSwKICAgICAgICBrSW52ZXJ0ZWRCcmV2ZUJlbG93ID0gMHgwMzJGLAogICAg ICAgIGtUaWxkZUJlbG93ID0gMHgwMzMwLAogICAgICAgIGtNYWNyb25CZWxvdyA9IDB4MDMzMSwK ICAgICAgICBrTG93TGluZSA9IDB4MDMzMiwKICAgICAgICBrRG91YmxlTG93TGluZSA9IDB4MDMz MywKICAgICAgICBrVGlsZGVPdmVybGF5ID0gMHgwMzM0LAogICAgICAgIGtTaG9ydFN0cm9rZU92 ZXJsYXkgPSAweDAzMzUsCiAgICAgICAga0xvbmdTdHJva2VPdmVybGF5ID0gMHgwMzM2LAogICAg ICAgIGtTaG9ydFNvbGlkdXNPdmVybGF5ID0gMHgwMzM3LAogICAgICAgIGtMb25nU29saWR1c092 ZXJsYXkgPSAweDAzMzgsCiAgICAgICAga1JpZ2h0SGFsZlJpbmdCZWxvdyA9IDB4MDMzOSwKICAg ICAgICBrSW52ZXJ0ZWRCcmlkZ2VCZWxvdyA9IDB4MDMzQSwKICAgICAgICBrU3F1YXJlQmVsb3cg PSAweDAzM0IsCiAgICAgICAga1NlYWd1bGxCZWxvdyA9IDB4MDMzQywKICAgICAgICBrWEFib3Zl ID0gMHgwMzNELAogICAgICAgIGtWZXJ0aWNhbFRpbGRlID0gMHgwMzNFLAogICAgICAgIGtEb3Vi bGVPdmVybGluZSA9IDB4MDMzRiwKICAgICAgICBrR3JhdmVUb25lTWFyayA9IDB4MDM0MCwKICAg ICAgICBrQWN1dGVUb25lTWFyayA9IDB4MDM0MSwKICAgICAgICBrR3JlZWtQZXJpc3BvbWVuaSA9 IDB4MDM0MiwKICAgICAgICBrR3JlZWtLb3JvbmlzID0gMHgwMzQzLAogICAgICAgIGtHcmVla0Rp YWx5dGlrYVRvbm9zID0gMHgwMzQ0LAogICAgICAgIGtHcmVla1lwb2dlZ3JhbW1lbmkgPSAweDAz NDUsCiAgICAgICAga0JyaWRnZUFib3ZlID0gMHgwMzQ2LAogICAgICAgIGtFcXVhbHNTaWduQmVs b3cgPSAweDAzNDcsCiAgICAgICAga0RvdWJsZVZlcnRpY2FsTGluZUJlbG93ID0gMHgwMzQ4LAog ICAgICAgIGtMZWZ0QW5nbGVCZWxvdyA9IDB4MDM0OSwKICAgICAgICBrTm90VGlsZGVBYm92ZSA9 IDB4MDM0QSwKICAgICAgICBrSG9tb3RoZXRpY0Fib3ZlID0gMHgwMzRCLAogICAgICAgIGtBbG1v c3RFcXVhbFRvQWJvdmUgPSAweDAzNEMsCiAgICAgICAga0xlZnRSaWdodEFycm93QmVsb3cgPSAw eDAzNEQsCiAgICAgICAga1Vwd2FyZHNBcnJvd0JlbG93ID0gMHgwMzRFLAogICAgICAgIGtEb3Vi bGVUaWxkZSA9IDB4MDM2MCwKICAgICAgICBrRG91YmxlSW52ZXJ0ZWRCcmV2ZSA9IDB4MDM2MSwK ICAgICAgICBrRG91YmxlUmlnaHR3YXJkc0Fycm93QmVsb3cgPSAweDAzNjIsCiAgICAgICAga0N5 cmlsbGljVGl0bG8gPSAweDA0ODMsCiAgICAgICAga0N5cmlsbGljUGFsYXRhbGl6YXRpb24gPSAw eDA0ODQsCiAgICAgICAga0N5cmlsbGljRGFzaWFQbmV1bWF0YSA9IDB4MDQ4NSwKICAgICAgICBr Q3lyaWxsaWNQc2lsaVBuZXVtYXRhID0gMHgwNDg2LAogICAgICAgIEhlYnJld0FjY2VudEV0bmFo dGEgPSAweDA1OTEsCiAgICAgICAga0hlYnJld0FjY2VudFNlZ29sID0gMHgwNTkyLAogICAgICAg IGtIZWJyZXdBY2NlbnRTaGFsc2hlbGV0ID0gMHgwNTkzLAogICAgICAgIGtIZWJyZXdBY2NlbnRa YXFlZlFhdGFuID0gMHgwNTk0LAogICAgICAgIGtIZWJyZXdBY2NlbnRaYXFlZkdhZG9sID0gMHgw NTk1LAogICAgICAgIGtIZWJyZXdBY2NlbnRUaXBlaGEgPSAweDA1OTYsCiAgICAgICAga0hlYnJl d0FjY2VudFJldmlhID0gMHgwNTk3LAogICAgICAgIGtIZWJyZXdBY2NlbnRaYXJxYSA9IDB4MDU5 OCwKICAgICAgICBrSGVicmV3QWNjZW50UGFzaHRhID0gMHgwNTk5LAogICAgICAgIGtIZWJyZXdB Y2NlbnRZZXRpdiA9IDB4MDU5QSwKICAgICAgICBrSGVicmV3QWNjZW50VGV2aXIgPSAweDA1OUIs CiAgICAgICAga0hlYnJld0FjY2VudEdlcmVzaCA9IDB4MDU5QywKICAgICAgICBrSGVicmV3QWNj ZW50R2VyZXNoTXVxZGFtID0gMHgwNTlELAogICAgICAgIGtIZWJyZXdBY2NlbnRHZXJzaGF5aW0g PSAweDA1OUUsCiAgICAgICAga0hlYnJld0FjY2VudFFhcm5leVBhcmEgPSAweDA1OUYsCiAgICAg ICAga0hlYnJld0FjY2VudFRlbGlzaGFHZWRvbGEgPSAweDA1QTAsCiAgICAgICAga0hlYnJld0Fj Y2VudFBhemVyID0gMHgwNUExLAogICAgICAgIGtIZWJyZXdBY2NlbnRNdW5haCA9IDB4MDVBMywK ICAgICAgICBrSGVicmV3QWNjZW50TWFoYXBha2ggPSAweDA1QTQsCiAgICAgICAga0hlYnJld0Fj Y2VudE1lcmtoYSA9IDB4MDVBNSwKICAgICAgICBrSGVicmV3QWNjZW50TWVya2hhS2VmdWxhID0g MHgwNUE2LAogICAgICAgIGtIZWJyZXdBY2NlbnREYXJnYSA9IDB4MDVBNywKICAgICAgICBrSGVi cmV3QWNjZW50UWFkbWEgPSAweDA1QTgsCiAgICAgICAga0hlYnJld0FjY2VudFRlbGlzaGFRZXRh bmEgPSAweDA1QTksCiAgICAgICAga0hlYnJld0FjY2VudFllcmFoQmVuWW9tbyA9IDB4MDVBQSwK ICAgICAgICBrSGVicmV3QWNjZW50T2xlID0gMHgwNUFCLAogICAgICAgIGtIZWJyZXdBY2NlbnRJ bHV5ID0gMHgwNUFDLAogICAgICAgIGtIZWJyZXdBY2NlbnREZWhpID0gMHgwNUFELAogICAgICAg IGtIZWJyZXdBY2NlbnRaaW5vciA9IDB4MDVBRSwKICAgICAgICBrSGVicmV3TWFya01hc29yYUNp cmNsZSA9IDB4MDVBRiwKICAgICAgICBrSGVicmV3UG9pbnRTaGV2YSA9IDB4MDVCMCwKICAgICAg ICBrSGVicmV3UG9pbnRIYXRhZlNlZ29sID0gMHgwNUIxLAogICAgICAgIGtIZWJyZXdQb2ludEhh dGFmUGF0YWggPSAweDA1QjIsCiAgICAgICAga0hlYnJld1BvaW50SGF0YWZRYW1hdHMgPSAweDA1 QjMsCiAgICAgICAga0hlYnJld1BvaW50SGlyaXEgPSAweDA1QjQsCiAgICAgICAga0hlYnJld1Bv aW50VHNlcmUgPSAweDA1QjUsCiAgICAgICAga0hlYnJld1BvaW50U2Vnb2wgPSAweDA1QjYsCiAg ICAgICAga0hlYnJld1BvaW50UGF0YWggPSAweDA1QjcsCiAgICAgICAga0hlYnJld1BvaW50UWFt YXRzID0gMHgwNUI4LAogICAgICAgIGtIZWJyZXdQb2ludEhvbGFtID0gMHgwNUI5LAogICAgICAg IGtIZWJyZXdQb2ludFF1YnV0cyA9IDB4MDVCQiwKICAgICAgICBrSGVicmV3UG9pbnREYWdlc2hP ck1hcGlxID0gMHgwNUJDLAogICAgICAgIGtIZWJyZXdQb2ludE1ldGVnID0gMHgwNUJELAogICAg ICAgIGtIZWJyZXdQb2ludFJhZmUgPSAweDA1QkYsCiAgICAgICAga0hlYnJld1BvaW50U2hpbkRv dCA9IDB4MDVDMSwKICAgICAgICBrSGVicmV3UG9pbnRTaW5Eb3QgPSAweDA1QzIsCiAgICAgICAg a0hlYnJld01hcmtVcHBlckRvdCA9IDB4MDVDNCwKICAgICAgICBrQXJhYmljRmF0aGF0YW4gPSAw eDA2NEIsCiAgICAgICAga0FyYWJpY0RhbW1hdGFuID0gMHgwNjRDLAogICAgICAgIGtBcmFiaWNL YXNyYXRhbiA9IDB4MDY0RCwKICAgICAgICBrQXJhYmljRmF0aGEgPSAweDA2NEUsCiAgICAgICAg a0FyYWJpY0RhbW1hID0gMHgwNjRGLAogICAgICAgIGtBcmFiaWNLYXNyYSA9IDB4MDY1MCwKICAg ICAgICBrQXJhYmljU2hhZGRhID0gMHgwNjUxLAogICAgICAgIGtBcmFiaWNTdWt1biA9IDB4MDY1 MiwKICAgICAgICBrQXJhYmljTWFkZGFoQWJvdmUgPSAweDA2NTMsCiAgICAgICAga0FyYWJpY0hh bXphQWJvdmUgPSAweDA2NTQsCiAgICAgICAga0FyYWJpY0hhbXphQmVsb3cgPSAweDA2NTUsCiAg ICAgICAga0FyYWJpY0xldHRlclN1cGVyc2NyaXB0QWxlZiA9IDB4MDY3MCwKICAgICAgICBrQXJh YmljU21hbGxIaWdoTGlnYXR1cmVTYWRXaXRoTGFtV2l0aEFsZWZNYWtzdXJhID0gMHgwNkQ2LAog ICAgICAgIGtBcmFiaWNTbWFsbEhpZ2hMaWdhdHVyZVFhZldpdGhMYW1XaXRoQWxlZk1ha3N1cmEg PSAweDA2RDcsCiAgICAgICAga0FyYWJpY1NtYWxsSGlnaE1lZW1Jbml0aWFsRm9ybSA9IDB4MDZE OCwKICAgICAgICBrQXJhYmljU21hbGxIaWdoTGFtQWxlZiA9IDB4MDZEOSwKICAgICAgICBrQXJh YmljU21hbGxIaWdoSmVlbSA9IDB4MDZEQSwKICAgICAgICBrQXJhYmljU21hbGxIaWdoVGhyZWVE b3RzID0gMHgwNkRCLAogICAgICAgIGtBcmFiaWNTbWFsbEhpZ2hTZWVuID0gMHgwNkRDLAogICAg ICAgIGtBcmFiaWNTbWFsbEhpZ2hSb3VuZGVkWmVybyA9IDB4MDZERiwKICAgICAgICBrQXJhYmlj U21hbGxIaWdoVXByaWdodFJlY3Rhbmd1bGFyWmVybyA9IDB4MDZFMCwKICAgICAgICBrQXJhYmlj U21hbGxIaWdoRG90bGVzc0hlYWRPZktoYWggPSAweDA2RTEsCiAgICAgICAga0FyYWJpY1NtYWxs SGlnaE1lZW1Jc29sYXRlZEZvcm0gPSAweDA2RTIsCiAgICAgICAga0FyYWJpY1NtYWxsTG93U2Vl biA9IDB4MDZFMywKICAgICAgICBrQXJhYmljU21hbGxIaWdoTWFkZGEgPSAweDA2RTQsCiAgICAg ICAga0FyYWJpY1NtYWxsSGlnaFllaCA9IDB4MDZFNywKICAgICAgICBrQXJhYmljU21hbGxIaWdo Tm9vbiA9IDB4MDZFOCwKICAgICAgICBrQXJhYmljRW1wdHlDZW50cmVMb3dTdG9wID0gMHgwNkVB LAogICAgICAgIGtBcmFiaWNFbXB0eUNlbnRyZUhpZ2hTdG9wID0gMHgwNkVCLAogICAgICAgIGtB cmFiaWNSb3VuZGVkSGlnaFN0b3BXaXRoRmlsbGVkQ2VudHJlID0gMHgwNkVDLAogICAgICAgIGtB cmFiaWNTbWFsbExvd01lZW0gPSAweDA2RUQsCiAgICAgICAga1N5cmlhY0xldHRlclN1cGVyc2Ny aXB0QWxhcGggPSAweDA3MTEsCiAgICAgICAga1N5cmlhY1B0aGFoYUFib3ZlID0gMHgwNzMwLAog ICAgICAgIGtTeXJpYWNQdGhhaGFCZWxvdyA9IDB4MDczMSwKICAgICAgICBrU3lyaWFjUHRoYWhh RG90dGVkID0gMHgwNzMyLAogICAgICAgIGtTeXJpYWNacWFwaGFBYm92ZSA9IDB4MDczMywKICAg ICAgICBrU3lyaWFjWnFhcGhhQmVsb3cgPSAweDA3MzQsCiAgICAgICAga1N5cmlhY1pxYXBoYURv dHRlZCA9IDB4MDczNSwKICAgICAgICBrU3lyaWFjUmJhc2FBYm92ZSA9IDB4MDczNiwKICAgICAg ICBrU3lyaWFjUmJhc2FCZWxvdyA9IDB4MDczNywKICAgICAgICBrU3lyaWFjRG90dGVkWmxhbWFI b3Jpem9udGFsID0gMHgwNzM4LAogICAgICAgIGtTeXJpYWNEb3R0ZWRabGFtYUFuZ3VsYXIgPSAw eDA3MzksCiAgICAgICAga1N5cmlhY0hiYXNhQWJvdmUgPSAweDA3M0EsCiAgICAgICAga1N5cmlh Y0hiYXNhQmVsb3cgPSAweDA3M0IsCiAgICAgICAga1N5cmlhY0hiYXNhRXNhc2FEb3R0ZWQgPSAw eDA3M0MsCiAgICAgICAga1N5cmlhY0VzYXNhQWJvdmUgPSAweDA3M0QsCiAgICAgICAga1N5cmlh Y0VzYXNhQmVsb3cgPSAweDA3M0UsCiAgICAgICAga1N5cmlhY1J3YWhhID0gMHgwNzNGLAogICAg ICAgIGtTeXJpYWNGZW1pbmluZURvdCA9IDB4MDc0MCwKICAgICAgICBrU3lyaWFjUXVzaHNoYXlh ID0gMHgwNzQxLAogICAgICAgIGtTeXJpYWNSdWtrYWtoYSA9IDB4MDc0MiwKICAgICAgICBrU3ly aWFjVHdvVmVydGljYWxEb3RzQWJvdmUgPSAweDA3NDMsCiAgICAgICAga1N5cmlhY1R3b1ZlcnRp Y2FsRG90c0JlbG93ID0gMHgwNzQ0LAogICAgICAgIGtTeXJpYWNUaHJlZURvdHNBYm92ZSA9IDB4 MDc0NSwKICAgICAgICBrU3lyaWFjVGhyZWVEb3RzQmVsb3cgPSAweDA3NDYsCiAgICAgICAga1N5 cmlhY09ibGlxdWVMaW5lQWJvdmUgPSAweDA3NDcsCiAgICAgICAga1N5cmlhY09ibGlxdWVMaW5l QmVsb3cgPSAweDA3NDgsCiAgICAgICAga1N5cmlhY011c2ljID0gMHgwNzQ5LAogICAgICAgIGtT eXJpYWNCYXJyZWtoID0gMHgwNzRBLAogICAgICAgIGtEZXZhbmFnYXJpU2lnbk51a3RhID0gMHgw OTNDLAogICAgICAgIGtEZXZhbmFnYXJpU2lnblZpcmFtYSA9IDB4MDk0RCwKICAgICAgICBrRGV2 YW5hZ2FyaVN0cmVzc1NpZ25VZGF0dGEgPSAweDA5NTEsCiAgICAgICAga0RldmFuYWdhcmlTdHJl c3NTaWduQW51ZGF0dGEgPSAweDA5NTIsCiAgICAgICAga0RldmFuYWdhcmlHcmF2ZUFjY2VudCA9 IDB4MDk1MywKICAgICAgICBrRGV2YW5hZ2FyaUFjdXRlQWNjZW50ID0gMHgwOTU0LAogICAgICAg IGtCZW5nYWxpU2lnbk51a3RhID0gMHgwOUJDLAogICAgICAgIGtCZW5nYWxpU2lnblZpcmFtYSA9 IDB4MDlDRCwKICAgICAgICBrR3VybXVraGlTaWduTnVrdGEgPSAweDBBM0MsCiAgICAgICAga0d1 cm11a2hpU2lnblZpcmFtYSA9IDB4MEE0RCwKICAgICAgICBrR3VqYXJhdGlTaWduTnVrdGEgPSAw eDBBQkMsCiAgICAgICAga0d1amFyYXRpU2lnblZpcmFtYSA9IDB4MEFDRCwKICAgICAgICBrT3Jp eWFTaWduTnVrdGEgPSAweDBCM0MsCiAgICAgICAga09yaXlhU2lnblZpcmFtYSA9IDB4MEI0RCwK ICAgICAgICBrVGFtaWxTaWduVmlyYW1hID0gMHgwQkNELAogICAgICAgIGtUZWx1Z3VTaWduVmly YW1hID0gMHgwQzRELAogICAgICAgIGtUZWx1Z3VMZW5ndGhNYXJrID0gMHgwQzU1LAogICAgICAg IGtUZWx1Z3VBaUxlbmd0aE1hcmsgPSAweDBDNTYsCiAgICAgICAga0thbm5hZGFTaWduVmlyYW1h ID0gMHgwQ0NELAogICAgICAgIGtNYWxheWFsYW1TaWduVmlyYW1hID0gMHgwRDRELAogICAgICAg IGtTaW5oYWxhU2lnbkFsTGFrdW5hID0gMHgwRENBLAogICAgICAgIGtUaGFpQ2hhcmFjdGVyU2Fy YVUgPSAweDBFMzgsCiAgICAgICAga1RoYWlDaGFyYWN0ZXJTYXJhVXUgPSAweDBFMzksCiAgICAg ICAga1RoYWlDaGFyYWN0ZXJQaGludGh1ID0gMHgwRTNBLAogICAgICAgIGtUaGFpQ2hhcmFjdGVy TWFpRWsgPSAweDBFNDgsCiAgICAgICAga1RoYWlDaGFyYWN0ZXJNYWlUaG8gPSAweDBFNDksCiAg ICAgICAga1RoYWlDaGFyYWN0ZXJNYWlUcmkgPSAweDBFNEEsCiAgICAgICAga1RoYWlDaGFyYWN0 ZXJNYWlDaGF0dGF3YSA9IDB4MEU0QiwKICAgICAgICBrTGFvVm93ZWxTaWduVSA9IDB4MEVCOCwK ICAgICAgICBrTGFvVm93ZWxTaWduVXUgPSAweDBFQjksCiAgICAgICAga0xhb1RvbmVNYWlFayA9 IDB4MEVDOCwKICAgICAgICBrTGFvVG9uZU1haVRobyA9IDB4MEVDOSwKICAgICAgICBrTGFvVG9u ZU1haVRpID0gMHgwRUNBLAogICAgICAgIGtMYW9Ub25lTWFpQ2F0YXdhID0gMHgwRUNCLAogICAg ICAgIGtUaWJldGFuQXN0cm9sb2dpY2FsU2lnbktoeXVkUGEgPSAweDBGMTgsCiAgICAgICAga1Rp YmV0YW5Bc3Ryb2xvZ2ljYWxTaWduU2RvbmdUc2h1Z3MgPSAweDBGMTksCiAgICAgICAga1RpYmV0 YW5NYXJrTmdhc0J6dW5nTnlpWmxhID0gMHgwRjM1LAogICAgICAgIGtUaWJldGFuTWFya05nYXNC enVuZ1Nnb3JSdGFncyA9IDB4MEYzNywKICAgICAgICBrVGliZXRhbk1hcmtUc2FQaHJ1ID0gMHgw RjM5LAogICAgICAgIGtUaWJldGFuVm93ZWxTaWduQWEgPSAweDBGNzEsCiAgICAgICAga1RpYmV0 YW5Wb3dlbFNpZ25JID0gMHgwRjcyLAogICAgICAgIGtUaWJldGFuVm93ZWxTaWduVSA9IDB4MEY3 NCwKICAgICAgICBrVGliZXRhblZvd2VsU2lnbkUgPSAweDBGN0EsCiAgICAgICAga1RpYmV0YW5W b3dlbFNpZ25FZSA9IDB4MEY3QiwKICAgICAgICBrVGliZXRhblZvd2VsU2lnbk8gPSAweDBGN0Ms CiAgICAgICAga1RpYmV0YW5Wb3dlbFNpZ25PbyA9IDB4MEY3RCwKICAgICAgICBrVGliZXRhblZv d2VsU2lnblJldmVyc2VkSSA9IDB4MEY4MCwKICAgICAgICBrVGliZXRhblNpZ25OeWlabGFOYWFE YSA9IDB4MEY4MiwKICAgICAgICBrVGliZXRhblNpZ25TbmFMZGFuID0gMHgwRjgzLAogICAgICAg IGtUaWJldGFuTWFya0hhbGFudGEgPSAweDBGODQsCiAgICAgICAga1RpYmV0YW5TaWduTGNpUnRh Z3MgPSAweDBGODYsCiAgICAgICAga1RpYmV0YW5TaWduWWFuZ1J0YWdzID0gMHgwRjg3LAogICAg ICAgIGtUaWJldGFuU3ltYm9sUGFkbWFHZGFuID0gMHgwRkM2LAogICAgICAgIGtNeWFubWFyU2ln bkRvdEJlbG93ID0gMHgxMDM3LAogICAgICAgIGtNeWFubWFyU2lnblZpcmFtYSA9IDB4MTAzOSwK ICAgICAgICBrS2htZXJTaWduQ29lbmcgPSAweDE3RDIsCiAgICAgICAga01vbmdvbGlhbkxldHRl ckFsaUdhbGlEYWdhbGdhID0gMHgxOEE5LAogICAgICAgIGtMZWZ0SGFycG9vbkFib3ZlID0gMHgy MEQwLAogICAgICAgIGtSaWdodEhhcnBvb25BYm92ZSA9IDB4MjBEMSwKICAgICAgICBrTG9uZ1Zl cnRpY2FsTGluZU92ZXJsYXkgPSAweDIwRDIsCiAgICAgICAga1Nob3J0VmVydGljYWxMaW5lT3Zl cmxheSA9IDB4MjBEMywKICAgICAgICBrQW50aWNsb2Nrd2lzZUFycm93QWJvdmUgPSAweDIwRDQs CiAgICAgICAga0Nsb2Nrd2lzZUFycm93QWJvdmUgPSAweDIwRDUsCiAgICAgICAga0xlZnRBcnJv d0Fib3ZlID0gMHgyMEQ2LAogICAgICAgIGtSaWdodEFycm93QWJvdmUgPSAweDIwRDcsCiAgICAg ICAga1JpbmdPdmVybGF5ID0gMHgyMEQ4LAogICAgICAgIGtDbG9ja3dpc2VSaW5nT3ZlcmxheSA9 IDB4MjBEOSwKICAgICAgICBrQW50aWNsb2Nrd2lzZVJpbmdPdmVybGF5ID0gMHgyMERBLAogICAg ICAgIGtUaHJlZURvdHNBYm92ZSA9IDB4MjBEQiwKICAgICAgICBrRm91ckRvdHNBYm92ZSA9IDB4 MjBEQywKICAgICAgICBrTGVmdFJpZ2h0QXJyb3dBYm92ZSA9IDB4MjBFMSwKICAgICAgICBJZGVv Z3JhcGhpY0xldmVsVG9uZU1hcmsgPSAweDMwMkEsCiAgICAgICAgSWRlb2dyYXBoaWNSaXNpbmdU b25lTWFyayA9IDB4MzAyQiwKICAgICAgICBJZGVvZ3JhcGhpY0RlcGFydGluZ1RvbmVNYXJrID0g MHgzMDJDLAogICAgICAgIElkZW9ncmFwaGljRW50ZXJpbmdUb25lTWFyayA9IDB4MzAyRCwKICAg ICAgICBIYW5ndWxTaW5nbGVEb3RUb25lTWFyayA9IDB4MzAyRSwKICAgICAgICBIYW5ndWxEb3Vi bGVEb3RUb25lTWFyayA9IDB4MzAyRiwKICAgICAgICBrS2F0YWthbmFIaXJhZ2FuYVZvaWNlZFNv dW5kTWFyayA9IDB4MzA5OSwKICAgICAgICBrS2F0YWthbmFIaXJhZ2FuYVNlbWlWb2ljZWRTb3Vu ZE1hcmsgPSAweDMwOUEsCiAgICAgICAga0hlYnJld1BvaW50SnVkZW9TcGFuaXNoVmFyaWthID0g MHhGQjFFLAogICAgICAgIGtMaWdhdHVyZUxlZnRIYWxmID0gMHhGRTIwLAogICAgICAgIGtMaWdh dHVyZVJpZ2h0SGFsZiA9IDB4RkUyMSwKICAgICAgICBrRG91YmxlVGlsZGVMZWZ0SGFsZiA9IDB4 RkUyMiwKICAgICAgICBrRG91YmxlVGlsZGVSaWdodEhhbGYgPSAweEZFMjMsCgoKICAgICAgICAg CiAgICAgICAgIAogICAgICAgICAKICAgICAgICBrQmVuZ2FsaVNpZ25DYW5kcmFiaW5kdSA9IDB4 MDk4MSwKICAgICAgICBrQmVuZ2FsaVZvd2VsU2lnblUgPSAweDA5QzEsCiAgICAgICAga0Jlbmdh bGlWb3dlbFNpZ25VdSA9IDB4MDlDMiwKICAgICAgICBrQmVuZ2FsaVZvd2VsU2lnblZvY2FsaWNM ID0gMHgwOUUyLAogICAgICAgIGtCZW5nYWxpVm93ZWxTaWduVm9jYWxpY0xsID0gMHgwOUUzLAog ICAgICAgIGtCZW5nYWxpVm93ZWxTaWduVm9jYWxpY1IgPSAweDA5QzMsCiAgICAgICAga0Jlbmdh bGlWb3dlbFNpZ25Wb2NhbGljUnIgPSAweDA5QzQsCiAgICAgICAga0RldmFuYWdhcmlTaWduQW51 c3ZhcmEgPSAweDA5MDIsCiAgICAgICAga0RldmFuYWdhcmlTaWduQXZhZ3JhaGEgPSAweDA5M0Qs CiAgICAgICAga0RldmFuYWdhcmlTaWduQ2FuZHJhYmluZHUgPSAweDA5MDEsCiAgICAgICAga0Rl dmFuYWdhcmlWb3dlbFNpZ25VID0gMHgwOTQxLAogICAgICAgIGtEZXZhbmFnYXJpVm93ZWxTaWdu VXUgPSAweDA5NDIsCiAgICAgICAga0RldmFuYWdhcmlWb3dlbFNpZ25Wb2NhbGljUiA9IDB4MDk0 MywKICAgICAgICBrRGV2YW5hZ2FyaVZvd2VsU2lnblZvY2FsaWNSciA9IDB4MDk0NCwKICAgICAg ICBrRGV2YW5hZ2FyaVZvd2VsU2lnbkNhbmRyYUUgPSAweDA5NDUsCiAgICAgICAga0RldmFuYWdh cmlWb3dlbFNpZ25TaG9ydEUgPSAweDA5NDYsCiAgICAgICAga0RldmFuYWdhcmlWb3dlbFNpZ25F ID0gMHgwOTQ3LAogICAgICAgIGtEZXZhbmFnYXJpVm93ZWxTaWduQWkgPSAweDA5NDgsCiAgICAg ICAga0RldmFuYWdhcmlWb3dlbFNpZ25Wb2NhbGljTCA9IDB4MDk2MiwKICAgICAgICBrRGV2YW5h Z2FyaVZvd2VsU2lnblZvY2FsaWNMbCA9IDB4MDk2MywKICAgICAgICBrRW5jbG9zaW5nQ2lyY2xl ID0gMHgyMERELAogICAgICAgIGtFbmNsb3NpbmdDaXJjbGVCYWNrc2xhc2ggPSAweDIwRTAsCiAg ICAgICAga0VuY2xvc2luZ0RpYW1vbmQgPSAweDIwREYsCiAgICAgICAga0VuY2xvc2luZ1NxdWFy ZSA9IDB4MjBERSwKICAgICAgICBrR3VqYXJhdGlTaWduQ2FuZHJhYmluZHUgPSAweDBBODEsCiAg ICAgICAga0d1amFyYXRpU2lnbkFudXN2YXJhID0gMHgwQTgyLAogICAgICAgIGtHdWphcmF0aVZv d2VsU2lnblUgPSAweDBBQzEsCiAgICAgICAga0d1amFyYXRpVm93ZWxTaWduVXUgPSAweDBBQzIs CiAgICAgICAga0d1amFyYXRpVm93ZWxTaWduVm9jYWxpY1IgPSAweDBBQzMsCiAgICAgICAga0d1 amFyYXRpVm93ZWxTaWduVm9jYWxpY1JyID0gMHgwQUM0LAogICAgICAgIGtHdWphcmF0aVZvd2Vs U2lnbkNhbmRyYUUgPSAweDBBQzUsCiAgICAgICAga0d1amFyYXRpVm93ZWxTaWduRSA9IDB4MEFD NywKICAgICAgICBrR3VqYXJhdGlWb3dlbFNpZ25BaSA9IDB4MEFDOCwKICAgICAgICBrR3VqYXJh dGlWb3dlbFNpZ25DYW5kcmFPID0gMHgwQUM5LAogICAgICAgIGtHdXJtdWtoaVNpZ25CaW5kaSA9 IDB4MEEwMiwKICAgICAgICBrR3VybXVraGlWb3dlbFNpZ25VID0gMHgwQTQxLAogICAgICAgIGtH dXJtdWtoaVZvd2VsU2lnblV1ID0gMHgwQTQyLAogICAgICAgIGtHdXJtdWtoaVZvd2VsU2lnbkVl ID0gMHgwQTQ3LAogICAgICAgIGtHdXJtdWtoaVZvd2VsU2lnbkFpID0gMHgwQTQ4LAogICAgICAg IGtHdXJtdWtoaVZvd2VsU2lnbk9vID0gMHgwQTRCLAogICAgICAgIGtHdXJtdWtoaVZvd2VsU2ln bkF1ID0gMHgwQTRDLAogICAgICAgIGtHdXJtdWtoaVRpcHBpID0gMHgwQTcwLAogICAgICAgIGtH dXJtdWtoaUFkZGFrID0gMHgwQTcxLAogICAgICAgIGtIYW5ndWxTaW5nbGVEb3RUb25lTWFyayA9 IDB4MzAyRSwKICAgICAgICBrSGFuZ3VsRG91YmxlRG90VG9uZU1hcmsgPSAweDMwMkYsCiAgICAg ICAga0lkZW9ncmFwaGljTGV2ZWxUb25lTWFyayA9IDB4MzAyQSwKICAgICAgICBrSWRlb2dyYXBo aWNSaXNpbmdUb25lTWFyayA9IDB4MzAyQiwKICAgICAgICBrSWRlb2dyYXBoaWNEZXBhcnRpbmdU b25lTWFyayA9IDB4MzAyQywKICAgICAgICBrSWRlb2dyYXBoaWNFbnRlcmluZ1RvbmVNYXJrID0g MHgzMDJELAogICAgICAgIGtLYW5uYWRhVm93ZWxTaWduSSA9IDB4MENCRiwKICAgICAgICBrS2Fu bmFkYVZvd2VsU2lnbkUgPSAweDBDQzYsCiAgICAgICAga0thbm5hZGFWb3dlbFNpZ25BdSA9IDB4 MENDQywKICAgICAgICBrTGFvQ2FuY2VsbGF0aW9uTWFyayA9IDB4MEVDQywKICAgICAgICBrTGFv TmlnZ2FoaXRhID0gMHgwRUNELAogICAgICAgIGtMYW9Wb3dlbFNpZ25NYWlLYW4gPSAweDBFQjEs CiAgICAgICAga0xhb1Zvd2VsU2lnbkkgPSAweDBFQjQsCiAgICAgICAga0xhb1Zvd2VsU2lnbklp ID0gMHgwRUI1LAogICAgICAgIGtMYW9Wb3dlbFNpZ25ZID0gMHgwRUI2LAogICAgICAgIGtMYW9W b3dlbFNpZ25ZeSA9IDB4MEVCNywKICAgICAgICBrTGFvVm93ZWxTaWduTWFpS29uID0gMHgwRUJC LAogICAgICAgIGtMYW9TZW1pdm93ZWxTaWduTG8gPSAweDBFQkMsCiAgICAgICAga01hbGF5YWxh bVZvd2VsU2lnblUgPSAweDBENDEsCiAgICAgICAga01hbGF5YWxhbVZvd2VsU2lnblV1ID0gMHgw RDQyLAogICAgICAgIGtNYWxheWFsYW1Wb3dlbFNpZ25Wb2NhbGljUiA9IDB4MEQ0MywKICAgICAg ICBrT3JpeWFTaWduQ2FuZHJhYmluZHUgPSAweDBCMDEsCiAgICAgICAga09yaXlhVm93ZWxTaWdu SSA9IDB4MEIzRiwKICAgICAgICBrT3JpeWFWb3dlbFNpZ25VID0gMHgwQjQxLAogICAgICAgIGtP cml5YVZvd2VsU2lnblV1ID0gMHgwQjQyLAogICAgICAgIGtPcml5YVZvd2VsU2lnblZvY2FsaWNS ID0gMHgwQjQzLAogICAgICAgIGtPcml5YUFpTGVuZ3RoTWFyayA9IDB4MEI1NiwKICAgICAgICBr VGFtaWxWb3dlbFNpZ25JaSA9IDB4MEJDMCwKICAgICAgICBrVGVsdWd1Vm93ZWxTaWduQWEgPSAw eDBDM0UsCiAgICAgICAga1RlbHVndVZvd2VsU2lnbkkgPSAweDBDM0YsCiAgICAgICAga1RlbHVn dVZvd2VsU2lnbklpID0gMHgwQzQwLAogICAgICAgIGtUZWx1Z3VWb3dlbFNpZ25FID0gMHgwQzQ2 LAogICAgICAgIGtUZWx1Z3VWb3dlbFNpZ25FZSA9IDB4MEM0NywKICAgICAgICBrVGVsdWd1Vm93 ZWxTaWduQWkgPSAweDBDNDgsCiAgICAgICAga1RlbHVndVZvd2VsU2lnbk8gPSAweDBDNEEsCiAg ICAgICAga1RlbHVndVZvd2VsU2lnbk9vID0gMHgwQzRCLAogICAgICAgIGtUZWx1Z3VWb3dlbFNp Z25BdSA9IDB4MEM0QywKICAgICAgICBrVGhhaUNoYXJhY3Rlck1haUhhbkFrYXQgPSAweDBFMzEs CiAgICAgICAga1RoYWlDaGFyYWN0ZXJNYWl0YWlraHUgPSAweDBFNDcsCiAgICAgICAga1RoYWlD aGFyYWN0ZXJOaWtoYWhpdCA9IDB4MEU0RCwKICAgICAgICBrVGhhaUNoYXJhY3RlclNhcmFJID0g MHgwRTM0LAogICAgICAgIGtUaGFpQ2hhcmFjdGVyU2FyYUlpID0gMHgwRTM1LAogICAgICAgIGtU aGFpQ2hhcmFjdGVyU2FyYVVlID0gMHgwRTM2LAogICAgICAgIGtUaGFpQ2hhcmFjdGVyU2FyYVVl ZSA9IDB4MEUzNywKICAgICAgICBrVGhhaUNoYXJhY3RlclRoYW50aGFraGF0ID0gMHgwRTRDLAoK ICAgICAgICAgCgogICAgICAgIGtOb25TcGFjaW5nR3JhdmUgPSBrR3JhdmVBY2NlbnQsCiAgICAg ICAga05vblNwYWNpbmdBY3V0ZSA9IGtBY3V0ZUFjY2VudCwKICAgICAgICBrTm9uU3BhY2luZ0Np cmN1bWZsZXggPSBrQ2lyY3VtZmxleEFjY2VudCwKICAgICAgICBrTm9uU3BhY2luZ1RpbGRlID0g a1RpbGRlLAogICAgICAgIGtOb25TcGFjaW5nTWFjcm9uID0ga01hY3JvbiwKICAgICAgICBrTm9u U3BhY2luZ092ZXJzY29yZSA9IGtPdmVybGluZSwKICAgICAgICBrTm9uU3BhY2luZ0JyZXZlID0g a0JyZXZlLAogICAgICAgIGtOb25TcGFjaW5nRG90QWJvdmUgPSBrRG90QWJvdmUsCiAgICAgICAg a05vblNwYWNpbmdEaWFlcmVzaXMgPSBrRGlhZXJlc2lzLAogICAgICAgIGtOb25TcGFjaW5nSG9v a0Fib3ZlID0ga0hvb2tBYm92ZSwKICAgICAgICBrTm9uU3BhY2luZ1JpbmdBYm92ZSA9IGtSaW5n QWJvdmUsCiAgICAgICAgTm9uU3BhY2luZ0RvdWJsZUFjdXRlID0ga0RvdWJsZUFjdXRlQWNjZW50 LAogICAgICAgIGtOb25TcGFjaW5nSGFjZWsgPSBrQ2Fyb24sCiAgICAgICAga05vblNwYWNpbmdW ZXJ0aWNhbExpbmVBYm92ZSA9IGtWZXJ0aWNhbExpbmVBYm92ZSwKICAgICAgICBrTm9uU3BhY2lu Z0RvdWJsZVZlcnRpY2FsTGluZUFib3ZlID0ga0RvdWJsZVZlcnRpY2FsTGluZUFib3ZlLAogICAg ICAgIGtOb25TcGFjaW5nRG91YmxlR3JhdmUgPSBrRG91YmxlR3JhdmVBY2NlbnQsCiAgICAgICAg a05vblNwYWNpbmdDYW5kcmFiaW5kdSA9IGtDYW5kcmFiaW5kdSwKICAgICAgICBrTm9uU3BhY2lu Z0ludmVydGVkQnJldmUgPSBrSW52ZXJ0ZWRCcmV2ZSwKICAgICAgICBrTm9uU3BhY2luZ1R1cm5l ZENvbW1hQWJvdmUgPSBrVHVybmVkQ29tbWFBYm92ZSwKICAgICAgICBrTm9uU3BhY2luZ0NvbW1h QWJvdmUgPSBrQ29tbWFBYm92ZSwKICAgICAgICBrTm9uU3BhY2luZ1JldmVyc2VkQ29tbWFBYm92 ZSA9IGtSZXZlcnNlZENvbW1hQWJvdmUsCiAgICAgICAga05vblNwYWNpbmdDb21tYUFib3ZlUmln aHQgPSBrQ29tbWFBYm92ZVJpZ2h0LAogICAgICAgIGtOb25TcGFjaW5nR3JhdmVCZWxvdyA9IGtH cmF2ZUFjY2VudEJlbG93LAogICAgICAgIGtOb25TcGFjaW5nQWN1dGVCZWxvdyA9IGtBY3V0ZUFj Y2VudEJlbG93LAogICAgICAgIGtOb25TcGFjaW5nTGVmdFRhY2tCZWxvdyA9IGtMZWZ0VGFja0Jl bG93LAogICAgICAgIGtOb25TcGFjaW5nUmlnaHRUYWNrQmVsb3cgPSBrUmlnaHRUYWNrQmVsb3cs CiAgICAgICAga05vblNwYWNpbmdMZWZ0QW5nbGVBYm92ZSA9IGtMZWZ0QW5nbGVBYm92ZSwKICAg ICAgICBrTm9uU3BhY2luZ0hvcm4gPSBrSG9ybiwKICAgICAgICBrTm9uU3BhY2luZ0xlZnRIYWxm UmluZ0JlbG93ID0ga0xlZnRIYWxmUmluZ0JlbG93LAogICAgICAgIGtOb25TcGFjaW5nVXBUYWNr QmVsb3cgPSBrVXBUYWNrQmVsb3csCiAgICAgICAga05vblNwYWNpbmdEb3duVGFja0JlbG93ID0g a0Rvd25UYWNrQmVsb3csCiAgICAgICAga05vblNwYWNpbmdQbHVzU2lnbkJlbG93ID0ga1BsdXNT aWduQmVsb3csCiAgICAgICAga05vblNwYWNpbmdNaW51c1NpZ25CZWxvdyA9IGtNaW51c1NpZ25C ZWxvdywKICAgICAgICBrTm9uU3BhY2luZ1BhbGF0YWxpemVkSG9va0JlbG93ID0ga1BhbGF0YWxp emVkSG9va0JlbG93LAogICAgICAgIGtOb25TcGFjaW5nUmV0cm9mbGV4SG9va0JlbG93ID0ga1Jl dHJvZmxleEhvb2tCZWxvdywKICAgICAgICBrTm9uU3BhY2luZ0RvdEJlbG93ID0ga0RvdEJlbG93 LAogICAgICAgIGtOb25TcGFjaW5nRG91YmxlRG90QmVsb3cgPSBrRGlhZXJlc2lzQmVsb3csCiAg ICAgICAga05vblNwYWNpbmdSaW5nQmVsb3cgPSBrUmluZ0JlbG93LAogICAgICAgIGtOb25TcGFj aW5nQ29tbWFCZWxvdyA9IGtDb21tYUJlbG93LAogICAgICAgIGtOb25TcGFjaW5nQ2VkaWxsYSA9 IGtDZWRpbGxhLAogICAgICAgIGtOb25TcGFjaW5nT2dvbmVrID0ga09nb25laywKICAgICAgICBr Tm9uU3BhY2luZ1ZlcnRpY2FsTGluZUJlbG93ID0ga1ZlcnRpY2FsTGluZUJlbG93LAogICAgICAg IGtOb25TcGFjaW5nQnJpZGdlQmVsb3cgPSBrQnJpZGdlQmVsb3csCiAgICAgICAga05vblNwYWNp bmdJbnZlcnRlZERvdWJsZUFyY2hCZWxvdyA9IGtJbnZlcnRlZERvdWJsZUFyY2hCZWxvdywKICAg ICAgICBrTm9uU3BhY2luZ0hhY2VrQmVsb3cgPSBrQ2Fyb25CZWxvdywKICAgICAgICBrTm9uU3Bh Y2luZ0NpcmN1bWZsZXhCZWxvdyA9IGtDaXJjdW1mbGV4QWNjZW50QmVsb3csCiAgICAgICAga05v blNwYWNpbmdCcmV2ZUJlbG93ID0ga0JyZXZlQmVsb3csCiAgICAgICAga05vblNwYWNpbmdJbnZl cnRlZEJyZXZlQmVsb3cgPSBrSW52ZXJ0ZWRCcmV2ZUJlbG93LAogICAgICAgIGtOb25TcGFjaW5n VGlsZGVCZWxvdyA9IGtUaWxkZUJlbG93LAogICAgICAgIGtOb25TcGFjaW5nTWFjcm9uQmVsb3cg PSBrTWFjcm9uQmVsb3csCiAgICAgICAga05vblNwYWNpbmdVbmRlcnNjb3JlID0ga0xvd0xpbmUs CiAgICAgICAga05vblNwYWNpbmdEb3VibGVVbmRlcnNjb3JlID0ga0RvdWJsZUxvd0xpbmUsCiAg ICAgICAga05vblNwYWNpbmdUaWxkZU92ZXJsYXkgPSBrVGlsZGVPdmVybGF5LAogICAgICAgIGtO b25TcGFjaW5nU2hvcnRCYXJPdmVybGF5ID0ga1Nob3J0U3Ryb2tlT3ZlcmxheSwKICAgICAgICBr Tm9uU3BhY2luZ0xvbmdCYXJPdmVybGF5ID0ga0xvbmdTdHJva2VPdmVybGF5LAogICAgICAgIGtO b25TcGFjaW5nU2hvcnRTbGFzaE92ZXJsYXkgPSBrU2hvcnRTb2xpZHVzT3ZlcmxheSwKICAgICAg ICBrTm9uU3BhY2luZ0xvbmdTbGFzaE92ZXJsYXkgPSBrTG9uZ1NvbGlkdXNPdmVybGF5LAogICAg ICAgIGtOb25TcGFjaW5nUmlnaHRIYWxmUmluZ0JlbG93ID0ga1JpZ2h0SGFsZlJpbmdCZWxvdywK ICAgICAgICBrTm9uU3BhY2luZ0ludmVydGVkQnJpZGdlQmVsb3cgPSBrSW52ZXJ0ZWRCcmlkZ2VC ZWxvdywKICAgICAgICBrTm9uU3BhY2luZ1NxdWFyZUJlbG93ID0ga1NxdWFyZUJlbG93LAogICAg ICAgIGtOb25TcGFjaW5nU2VhZ3VsbEJlbG93ID0ga1NlYWd1bGxCZWxvdywKICAgICAgICBrTm9u U3BhY2luZ1hBYm92ZSA9IGtYQWJvdmUsCiAgICAgICAga05vblNwYWNpbmdWZXJ0aWNhbFRpbGRl ID0ga1ZlcnRpY2FsVGlsZGUsCiAgICAgICAga05vblNwYWNpbmdEb3VibGVPdmVyc2NvcmUgPSBr RG91YmxlT3ZlcmxpbmUsCiAgICAgICAga05vblNwYWNpbmdHcmF2ZVRvbmVNYXJrID0ga0dyYXZl VG9uZU1hcmssCiAgICAgICAga05vblNwYWNpbmdBY3V0ZVRvbmVNYXJrID0ga0FjdXRlVG9uZU1h cmssCiAgICAgICAgR3JlZWtOb25TcGFjaW5nRGlhZXJlc2lzVG9ub3MgPSBrR3JlZWtEaWFseXRp a2FUb25vcywKICAgICAgICBHcmVla05vblNwYWNpbmdJb3RhQmVsb3cgPSBrR3JlZWtZcG9nZWdy YW1tZW5pLAogICAgICAgIGtDeXJpbGxpY05vblNwYWNpbmdUaXRsbyA9IGtDeXJpbGxpY1RpdGxv LAogICAgICAgIGtDeXJpbGxpY05vblNwYWNpbmdQYWxhdGFsaXphdGlvbiA9IGtDeXJpbGxpY1Bh bGF0YWxpemF0aW9uLAogICAgICAgIGtDeXJpbGxpY05vblNwYWNpbmdEYXNpYVBuZXVtYXRhID0g a0N5cmlsbGljRGFzaWFQbmV1bWF0YSwKICAgICAgICBrQ3lyaWxsaWNOb25TcGFjaW5nUHNpbGlQ bmV1bWF0YSA9IGtDeXJpbGxpY1BzaWxpUG5ldW1hdGEsCiAgICAgICAga0hlYnJld1BvaW50RGFn ZXNoID0ga0hlYnJld1BvaW50RGFnZXNoT3JNYXBpcSwKICAgICAgICBrQXJhYmljRmF0aGFoID0g a0FyYWJpY0ZhdGhhLAogICAgICAgIGtBcmFiaWNEYW1tYWggPSBrQXJhYmljRGFtbWEsCiAgICAg ICAga0FyYWJpY0thc3JhaCA9IGtBcmFiaWNLYXNyYSwKICAgICAgICBrQXJhYmljU2hhZGRhaCA9 IGtBcmFiaWNTaGFkZGEsCiAgICAgICAga0FyYWJpY0FsZWZBYm92ZSA9IGtBcmFiaWNMZXR0ZXJT dXBlcnNjcmlwdEFsZWYsCiAgICAgICAga1RoYWlWb3dlbFNpZ25TYXJhVSA9IGtUaGFpQ2hhcmFj dGVyU2FyYVUsCiAgICAgICAga1RoYWlWb3dlbFNpZ25TYXJhVXUgPSBrVGhhaUNoYXJhY3RlclNh cmFVdSwKICAgICAgICBrVGhhaVZvd2VsU2lnblBoaW50aHUgPSBrVGhhaUNoYXJhY3RlclBoaW50 aHUsCiAgICAgICAga1RoYWlUb25lTWFpRWsgPSBrVGhhaUNoYXJhY3Rlck1haUVrLAogICAgICAg IGtUaGFpVG9uZU1haVRobyA9IGtUaGFpQ2hhcmFjdGVyTWFpVGhvLAogICAgICAgIGtUaGFpVG9u ZU1haVRyaSA9IGtUaGFpQ2hhcmFjdGVyTWFpVHJpLAogICAgICAgIGtUaGFpVG9uZU1haUNoYXR0 YXdhID0ga1RoYWlDaGFyYWN0ZXJNYWlDaGF0dGF3YSwKICAgICAgICBrVGliZXRhbkhvbm9yaWZp Y1VuZGVyUmluZyA9IGtUaWJldGFuTWFya05nYXNCenVuZ055aVpsYSwKICAgICAgICBrVGliZXRh blVuZGVyUmluZyA9IGtUaWJldGFuTWFya05nYXNCenVuZ1Nnb3JSdGFncywKICAgICAgICBrVGli ZXRhbkxlbml0aW9uTWFyayA9IGtUaWJldGFuTWFya1RzYVBocnUsCiAgICAgICAga1RpYmV0YW5W b3dlbFNpZ25BaSA9IGtUaWJldGFuVm93ZWxTaWduRWUsCiAgICAgICAga1RpYmV0YW5Wb3dlbFNp Z25BdSA9IGtUaWJldGFuVm93ZWxTaWduT28sCiAgICAgICAga1RpYmV0YW5Wb3dlbFNpZ25TaG9y dEkgPSBrVGliZXRhblZvd2VsU2lnblJldmVyc2VkSSwKICAgICAgICBrVGliZXRhbkNhbmRyYWJp bmR1V2l0aE9ybmFtZW50ID0ga1RpYmV0YW5TaWduTnlpWmxhTmFhRGEsCiAgICAgICAga1RpYmV0 YW5DYW5kcmFiaW5kdSA9IGtUaWJldGFuU2lnblNuYUxkYW4sCiAgICAgICAga1RpYmV0YW5WaXJh bWEgPSBrVGliZXRhbk1hcmtIYWxhbnRhLAogICAgICAgIGtOb25TcGFjaW5nTGVmdEhhcnBvb25B Ym92ZSA9IGtMZWZ0SGFycG9vbkFib3ZlLAogICAgICAgIGtOb25TcGFjaW5nUmlnaHRIYXJwb29u QWJvdmUgPSBrUmlnaHRIYXJwb29uQWJvdmUsCiAgICAgICAga05vblNwYWNpbmdMb25nVmVydGlj YWxCYXJPdmVybGF5ID0ga0xvbmdWZXJ0aWNhbExpbmVPdmVybGF5LAogICAgICAgIGtOb25TcGFj aW5nU2hvcnRWZXJ0aWNhbEJhck92ZXJsYXkgPSBrU2hvcnRWZXJ0aWNhbExpbmVPdmVybGF5LAog ICAgICAgIGtOb25TcGFjaW5nQW50aWNsb2Nrd2lzZUFycm93QWJvdmUgPSBrQW50aWNsb2Nrd2lz ZUFycm93QWJvdmUsCiAgICAgICAga05vblNwYWNpbmdDbG9ja3dpc2VBcnJvd0Fib3ZlID0ga0Ns b2Nrd2lzZUFycm93QWJvdmUsCiAgICAgICAga05vblNwYWNpbmdMZWZ0QXJyb3dBYm92ZSA9IGtM ZWZ0QXJyb3dBYm92ZSwKICAgICAgICBrTm9uU3BhY2luZ1JpZ2h0QXJyb3dBYm92ZSA9IGtSaWdo dEFycm93QWJvdmUsCiAgICAgICAga05vblNwYWNpbmdSaW5nT3ZlcmxheSA9IGtSaW5nT3Zlcmxh eSwKICAgICAgICBrTm9uU3BhY2luZ0Nsb2Nrd2lzZVJpbmdPdmVybGF5ID0ga0Nsb2Nrd2lzZVJp bmdPdmVybGF5LAogICAgICAgIGtOb25TcGFjaW5nQW50aWNsb2Nrd2lzZVJpbmdPdmVybGF5ID0g a0FudGljbG9ja3dpc2VSaW5nT3ZlcmxheSwKICAgICAgICBrTm9uU3BhY2luZ1RocmVlRG90c0Fi b3ZlID0ga1RocmVlRG90c0Fib3ZlLAogICAgICAgIGtOb25TcGFjaW5nRm91ckRvdHNBYm92ZSA9 IGtGb3VyRG90c0Fib3ZlLAogICAgICAgIGtOb25TcGFjaW5nTGVmdFJpZ2h0QXJyb3dBYm92ZSA9 IGtMZWZ0UmlnaHRBcnJvd0Fib3ZlLAogICAgICAgIGtOb25TcGFjaW5nS2F0YWthbmFIaXJhZ2Fu YVZvaWNlZFNvdW5kTWFyayA9IGtLYXRha2FuYUhpcmFnYW5hVm9pY2VkU291bmRNYXJrLAogICAg ICAgIGtOb25TcGFjaW5nS2F0YWthbmFIaXJhZ2FuYVNlbWlWb2ljZWRTb3VuZE1hcmsgPSBrS2F0 YWthbmFIaXJhZ2FuYVNlbWlWb2ljZWRTb3VuZE1hcmssCiAgICAgICAga0hlYnJld1BvaW50VmFy aWthID0ga0hlYnJld1BvaW50SnVkZW9TcGFuaXNoVmFyaWthCiAgICB9Owp9OwoKIAogCiAKY2xh c3MgVVVuaWNvZGVEaWdpdCB7CnB1YmxpYzoKICAgIGVudW0gRVVuaWNvZGVEaWdpdE5hbWVzIHsK ICAgICAgICBrWmVybyA9IDB4MDAzMCwKICAgICAgICBrT25lID0gMHgwMDMxLAogICAgICAgIGtU d28gPSAweDAwMzIsCiAgICAgICAga1RocmVlID0gMHgwMDMzLAogICAgICAgIGtGb3VyID0gMHgw MDM0LAogICAgICAgIGtGaXZlID0gMHgwMDM1LAogICAgICAgIGtTaXggPSAweDAwMzYsCiAgICAg ICAga1NldmVuID0gMHgwMDM3LAogICAgICAgIGtFaWdodCA9IDB4MDAzOCwKICAgICAgICBrTmlu ZSA9IDB4MDAzOSwKICAgICAgICBrQXJhYmljSW5kaWNaZXJvID0gMHgwNjYwLAogICAgICAgIGtB cmFiaWNJbmRpY09uZSA9IDB4MDY2MSwKICAgICAgICBrQXJhYmljSW5kaWNUd28gPSAweDA2NjIs CiAgICAgICAga0FyYWJpY0luZGljVGhyZWUgPSAweDA2NjMsCiAgICAgICAga0FyYWJpY0luZGlj Rm91ciA9IDB4MDY2NCwKICAgICAgICBrQXJhYmljSW5kaWNGaXZlID0gMHgwNjY1LAogICAgICAg IGtBcmFiaWNJbmRpY1NpeCA9IDB4MDY2NiwKICAgICAgICBrQXJhYmljSW5kaWNTZXZlbiA9IDB4 MDY2NywKICAgICAgICBrQXJhYmljSW5kaWNFaWdodCA9IDB4MDY2OCwKICAgICAgICBrQXJhYmlj SW5kaWNOaW5lID0gMHgwNjY5LAogICAgICAgIGtFeHRlbmRlZEFyYWJpY0luZGljWmVybyA9IDB4 MDZGMCwKICAgICAgICBrRXh0ZW5kZWRBcmFiaWNJbmRpY09uZSA9IDB4MDZGMSwKICAgICAgICBr RXh0ZW5kZWRBcmFiaWNJbmRpY1R3byA9IDB4MDZGMiwKICAgICAgICBrRXh0ZW5kZWRBcmFiaWNJ bmRpY1RocmVlID0gMHgwNkYzLAogICAgICAgIGtFeHRlbmRlZEFyYWJpY0luZGljRm91ciA9IDB4 MDZGNCwKICAgICAgICBrRXh0ZW5kZWRBcmFiaWNJbmRpY0ZpdmUgPSAweDA2RjUsCiAgICAgICAg a0V4dGVuZGVkQXJhYmljSW5kaWNTaXggPSAweDA2RjYsCiAgICAgICAga0V4dGVuZGVkQXJhYmlj SW5kaWNTZXZlbiA9IDB4MDZGNywKICAgICAgICBrRXh0ZW5kZWRBcmFiaWNJbmRpY0VpZ2h0ID0g MHgwNkY4LAogICAgICAgIGtFeHRlbmRlZEFyYWJpY0luZGljTmluZSA9IDB4MDZGOSwKICAgICAg ICBrRGV2YW5hZ2FyaVplcm8gPSAweDA5NjYsCiAgICAgICAga0RldmFuYWdhcmlPbmUgPSAweDA5 NjcsCiAgICAgICAga0RldmFuYWdhcmlUd28gPSAweDA5NjgsCiAgICAgICAga0RldmFuYWdhcmlU aHJlZSA9IDB4MDk2OSwKICAgICAgICBrRGV2YW5hZ2FyaUZvdXIgPSAweDA5NkEsCiAgICAgICAg a0RldmFuYWdhcmlGaXZlID0gMHgwOTZCLAogICAgICAgIGtEZXZhbmFnYXJpU2l4ID0gMHgwOTZD LAogICAgICAgIGtEZXZhbmFnYXJpU2V2ZW4gPSAweDA5NkQsCiAgICAgICAga0RldmFuYWdhcmlF aWdodCA9IDB4MDk2RSwKICAgICAgICBrRGV2YW5hZ2FyaU5pbmUgPSAweDA5NkYsCiAgICAgICAg a0JlbmdhbGlaZXJvID0gMHgwOUU2LAogICAgICAgIGtCZW5nYWxpT25lID0gMHgwOUU3LAogICAg ICAgIGtCZW5nYWxpVHdvID0gMHgwOUU4LAogICAgICAgIGtCZW5nYWxpVGhyZWUgPSAweDA5RTks CiAgICAgICAga0JlbmdhbGlGb3VyID0gMHgwOUVBLAogICAgICAgIGtCZW5nYWxpRml2ZSA9IDB4 MDlFQiwKICAgICAgICBrQmVuZ2FsaVNpeCA9IDB4MDlFQywKICAgICAgICBrQmVuZ2FsaVNldmVu ID0gMHgwOUVELAogICAgICAgIGtCZW5nYWxpRWlnaHQgPSAweDA5RUUsCiAgICAgICAga0Jlbmdh bGlOaW5lID0gMHgwOUVGLAogICAgICAgIGtHdXJtdWtoaVplcm8gPSAweDBBNjYsCiAgICAgICAg a0d1cm11a2hpT25lID0gMHgwQTY3LAogICAgICAgIGtHdXJtdWtoaVR3byA9IDB4MEE2OCwKICAg ICAgICBrR3VybXVraGlUaHJlZSA9IDB4MEE2OSwKICAgICAgICBrR3VybXVraGlGb3VyID0gMHgw QTZBLAogICAgICAgIGtHdXJtdWtoaUZpdmUgPSAweDBBNkIsCiAgICAgICAga0d1cm11a2hpU2l4 ID0gMHgwQTZDLAogICAgICAgIGtHdXJtdWtoaVNldmVuID0gMHgwQTZELAogICAgICAgIGtHdXJt dWtoaUVpZ2h0ID0gMHgwQTZFLAogICAgICAgIGtHdXJtdWtoaU5pbmUgPSAweDBBNkYsCiAgICAg ICAga0d1amFyYXRpWmVybyA9IDB4MEFFNiwKICAgICAgICBrR3VqYXJhdGlPbmUgPSAweDBBRTcs CiAgICAgICAga0d1amFyYXRpVHdvID0gMHgwQUU4LAogICAgICAgIGtHdWphcmF0aVRocmVlID0g MHgwQUU5LAogICAgICAgIGtHdWphcmF0aUZvdXIgPSAweDBBRUEsCiAgICAgICAga0d1amFyYXRp Rml2ZSA9IDB4MEFFQiwKICAgICAgICBrR3VqYXJhdGlTaXggPSAweDBBRUMsCiAgICAgICAga0d1 amFyYXRpU2V2ZW4gPSAweDBBRUQsCiAgICAgICAga0d1amFyYXRpRWlnaHQgPSAweDBBRUUsCiAg ICAgICAga0d1amFyYXRpTmluZSA9IDB4MEFFRiwKICAgICAgICBrT3JpeWFaZXJvID0gMHgwQjY2 LAogICAgICAgIGtPcml5YU9uZSA9IDB4MEI2NywKICAgICAgICBrT3JpeWFUd28gPSAweDBCNjgs CiAgICAgICAga09yaXlhVGhyZWUgPSAweDBCNjksCiAgICAgICAga09yaXlhRm91ciA9IDB4MEI2 QSwKICAgICAgICBrT3JpeWFGaXZlID0gMHgwQjZCLAogICAgICAgIGtPcml5YVNpeCA9IDB4MEI2 QywKICAgICAgICBrT3JpeWFTZXZlbiA9IDB4MEI2RCwKICAgICAgICBrT3JpeWFFaWdodCA9IDB4 MEI2RSwKICAgICAgICBrT3JpeWFOaW5lID0gMHgwQjZGLAogICAgICAgIGtUYW1pbE9uZSA9IDB4 MEJFNywKICAgICAgICBrVGFtaWxUd28gPSAweDBCRTgsCiAgICAgICAga1RhbWlsVGhyZWUgPSAw eDBCRTksCiAgICAgICAga1RhbWlsRm91ciA9IDB4MEJFQSwKICAgICAgICBrVGFtaWxGaXZlID0g MHgwQkVCLAogICAgICAgIGtUYW1pbFNpeCA9IDB4MEJFQywKICAgICAgICBrVGFtaWxTZXZlbiA9 IDB4MEJFRCwKICAgICAgICBrVGFtaWxFaWdodCA9IDB4MEJFRSwKICAgICAgICBrVGFtaWxOaW5l ID0gMHgwQkVGLAogICAgICAgIGtUZWx1Z3VaZXJvID0gMHgwQzY2LAogICAgICAgIGtUZWx1Z3VP bmUgPSAweDBDNjcsCiAgICAgICAga1RlbHVndVR3byA9IDB4MEM2OCwKICAgICAgICBrVGVsdWd1 VGhyZWUgPSAweDBDNjksCiAgICAgICAga1RlbHVndUZvdXIgPSAweDBDNkEsCiAgICAgICAga1Rl bHVndUZpdmUgPSAweDBDNkIsCiAgICAgICAga1RlbHVndVNpeCA9IDB4MEM2QywKICAgICAgICBr VGVsdWd1U2V2ZW4gPSAweDBDNkQsCiAgICAgICAga1RlbHVndUVpZ2h0ID0gMHgwQzZFLAogICAg ICAgIGtUZWx1Z3VOaW5lID0gMHgwQzZGLAogICAgICAgIGtLYW5uYWRhWmVybyA9IDB4MENFNiwK ICAgICAgICBrS2FubmFkYU9uZSA9IDB4MENFNywKICAgICAgICBrS2FubmFkYVR3byA9IDB4MENF OCwKICAgICAgICBrS2FubmFkYVRocmVlID0gMHgwQ0U5LAogICAgICAgIGtLYW5uYWRhRm91ciA9 IDB4MENFQSwKICAgICAgICBrS2FubmFkYUZpdmUgPSAweDBDRUIsCiAgICAgICAga0thbm5hZGFT aXggPSAweDBDRUMsCiAgICAgICAga0thbm5hZGFTZXZlbiA9IDB4MENFRCwKICAgICAgICBrS2Fu bmFkYUVpZ2h0ID0gMHgwQ0VFLAogICAgICAgIGtLYW5uYWRhTmluZSA9IDB4MENFRiwKICAgICAg ICBrTWFsYXlhbGFtWmVybyA9IDB4MEQ2NiwKICAgICAgICBrTWFsYXlhbGFtT25lID0gMHgwRDY3 LAogICAgICAgIGtNYWxheWFsYW1Ud28gPSAweDBENjgsCiAgICAgICAga01hbGF5YWxhbVRocmVl ID0gMHgwRDY5LAogICAgICAgIGtNYWxheWFsYW1Gb3VyID0gMHgwRDZBLAogICAgICAgIGtNYWxh eWFsYW1GaXZlID0gMHgwRDZCLAogICAgICAgIGtNYWxheWFsYW1TaXggPSAweDBENkMsCiAgICAg ICAga01hbGF5YWxhbVNldmVuID0gMHgwRDZELAogICAgICAgIGtNYWxheWFsYW1FaWdodCA9IDB4 MEQ2RSwKICAgICAgICBrTWFsYXlhbGFtTmluZSA9IDB4MEQ2RiwKICAgICAgICBrVGhhaVplcm8g PSAweDBFNTAsCiAgICAgICAga1RoYWlPbmUgPSAweDBFNTEsCiAgICAgICAga1RoYWlUd28gPSAw eDBFNTIsCiAgICAgICAga1RoYWlUaHJlZSA9IDB4MEU1MywKICAgICAgICBrVGhhaUZvdXIgPSAw eDBFNTQsCiAgICAgICAga1RoYWlGaXZlID0gMHgwRTU1LAogICAgICAgIGtUaGFpU2l4ID0gMHgw RTU2LAogICAgICAgIGtUaGFpU2V2ZW4gPSAweDBFNTcsCiAgICAgICAga1RoYWlFaWdodCA9IDB4 MEU1OCwKICAgICAgICBrVGhhaU5pbmUgPSAweDBFNTksCiAgICAgICAga0xhb1plcm8gPSAweDBF RDAsCiAgICAgICAga0xhb09uZSA9IDB4MEVEMSwKICAgICAgICBrTGFvVHdvID0gMHgwRUQyLAog ICAgICAgIGtMYW9UaHJlZSA9IDB4MEVEMywKICAgICAgICBrTGFvRm91ciA9IDB4MEVENCwKICAg ICAgICBrTGFvRml2ZSA9IDB4MEVENSwKICAgICAgICBrTGFvU2l4ID0gMHgwRUQ2LAogICAgICAg IGtMYW9TZXZlbiA9IDB4MEVENywKICAgICAgICBrTGFvRWlnaHQgPSAweDBFRDgsCiAgICAgICAg a0xhb05pbmUgPSAweDBFRDksCiAgICAgICAga1RpYmV0YW5aZXJvID0gMHgwRjIwLAogICAgICAg IGtUaWJldGFuT25lID0gMHgwRjIxLAogICAgICAgIGtUaWJldGFuVHdvID0gMHgwRjIyLAogICAg ICAgIGtUaWJldGFuVGhyZWUgPSAweDBGMjMsCiAgICAgICAga1RpYmV0YW5Gb3VyID0gMHgwRjI0 LAogICAgICAgIGtUaWJldGFuRml2ZSA9IDB4MEYyNSwKICAgICAgICBrVGliZXRhblNpeCA9IDB4 MEYyNiwKICAgICAgICBrVGliZXRhblNldmVuID0gMHgwRjI3LAogICAgICAgIGtUaWJldGFuRWln aHQgPSAweDBGMjgsCiAgICAgICAga1RpYmV0YW5OaW5lID0gMHgwRjI5LAogICAgICAgIGtNeWFu bWFyWmVybyA9IDB4MTA0MCwKICAgICAgICBrTXlhbm1hck9uZSA9IDB4MTA0MSwKICAgICAgICBr TXlhbm1hclR3byA9IDB4MTA0MiwKICAgICAgICBrTXlhbm1hclRocmVlID0gMHgxMDQzLAogICAg ICAgIGtNeWFubWFyRm91ciA9IDB4MTA0NCwKICAgICAgICBrTXlhbm1hckZpdmUgPSAweDEwNDUs CiAgICAgICAga015YW5tYXJTaXggPSAweDEwNDYsCiAgICAgICAga015YW5tYXJTZXZlbiA9IDB4 MTA0NywKICAgICAgICBrTXlhbm1hckVpZ2h0ID0gMHgxMDQ4LAogICAgICAgIGtNeWFubWFyTmlu ZSA9IDB4MTA0OSwKICAgICAgICBrRXRoaW9waWNPbmUgPSAweDEzNjksCiAgICAgICAga0V0aGlv cGljVHdvID0gMHgxMzZBLAogICAgICAgIGtFdGhpb3BpY1RocmVlID0gMHgxMzZCLAogICAgICAg IGtFdGhpb3BpY0ZvdXIgPSAweDEzNkMsCiAgICAgICAga0V0aGlvcGljRml2ZSA9IDB4MTM2RCwK ICAgICAgICBrRXRoaW9waWNTaXggPSAweDEzNkUsCiAgICAgICAga0V0aGlvcGljU2V2ZW4gPSAw eDEzNkYsCiAgICAgICAga0V0aGlvcGljRWlnaHQgPSAweDEzNzAsCiAgICAgICAga0V0aGlvcGlj TmluZSA9IDB4MTM3MSwKICAgICAgICBrS2htZXJaZXJvID0gMHgxN0UwLAogICAgICAgIGtLaG1l ck9uZSA9IDB4MTdFMSwKICAgICAgICBrS2htZXJUd28gPSAweDE3RTIsCiAgICAgICAga0tobWVy VGhyZWUgPSAweDE3RTMsCiAgICAgICAga0tobWVyRm91ciA9IDB4MTdFNCwKICAgICAgICBrS2ht ZXJGaXZlID0gMHgxN0U1LAogICAgICAgIGtLaG1lclNpeCA9IDB4MTdFNiwKICAgICAgICBrS2ht ZXJTZXZlbiA9IDB4MTdFNywKICAgICAgICBrS2htZXJFaWdodCA9IDB4MTdFOCwKICAgICAgICBr S2htZXJOaW5lID0gMHgxN0U5LAogICAgICAgIGtNb25nb2xpYW5aZXJvID0gMHgxODEwLAogICAg ICAgIGtNb25nb2xpYW5PbmUgPSAweDE4MTEsCiAgICAgICAga01vbmdvbGlhblR3byA9IDB4MTgx MiwKICAgICAgICBrTW9uZ29saWFuVGhyZWUgPSAweDE4MTMsCiAgICAgICAga01vbmdvbGlhbkZv dXIgPSAweDE4MTQsCiAgICAgICAga01vbmdvbGlhbkZpdmUgPSAweDE4MTUsCiAgICAgICAga01v bmdvbGlhblNpeCA9IDB4MTgxNiwKICAgICAgICBrTW9uZ29saWFuU2V2ZW4gPSAweDE4MTcsCiAg ICAgICAga01vbmdvbGlhbkVpZ2h0ID0gMHgxODE4LAogICAgICAgIGtNb25nb2xpYW5OaW5lID0g MHgxODE5LAoKCiAgICAgICAgIAogICAgICAgICAKICAgICAgICBrSGFuZ3pob3VPbmUgPSAweDMw MjEsCiAgICAgICAga0hhbmd6aG91VHdvID0gMHgzMDIyLAogICAgICAgIGtIYW5nemhvdVRocmVl ID0gMHgzMDIzLAogICAgICAgIGtIYW5nemhvdUZvdXIgPSAweDMwMjQsCiAgICAgICAga0hhbmd6 aG91Rml2ZSA9IDB4MzAyNSwKICAgICAgICBrSGFuZ3pob3VTaXggPSAweDMwMjYsCiAgICAgICAg a0hhbmd6aG91U2V2ZW4gPSAweDMwMjcsCiAgICAgICAga0hhbmd6aG91RWlnaHQgPSAweDMwMjgs CiAgICAgICAga0hhbmd6aG91TmluZSA9IDB4MzAyOSwKICAgICAgICBrSGFuWmVybyA9IDB4MzAw NywKICAgICAgICBrSGFuT25lID0gMHg0RTAwLAogICAgICAgIGtIYW5Ud28gPSAweDRFOEMsCiAg ICAgICAga0hhblRocmVlID0gMHg0RTA5LAogICAgICAgIGtIYW5Gb3VyID0gMHg1NkRCLAogICAg ICAgIGtIYW5GaXZlID0gMHg0RTk0LAogICAgICAgIGtIYW5TaXggPSAweDUxNkQsCiAgICAgICAg a0hhblNldmVuID0gMHg0RTAzLAogICAgICAgIGtIYW5FaWdodCA9IDB4NTE2QiwKICAgICAgICBr SGFuTmluZSA9IDB4NEU1RCwKICAgICAgICBrU3VwZXJzY3JpcHRPbmUgPSAweDAwQjksCiAgICAg ICAga1N1cGVyc2NyaXB0VGhyZWUgPSAweDAwQjMsCiAgICAgICAga1N1cGVyc2NyaXB0VHdvID0g MHgwMEIyLAoKICAgICAgICAgCiAgICAgICAga0Vhc3Rlcm5BcmFiaWNJbmRpY1plcm8gPSBrRXh0 ZW5kZWRBcmFiaWNJbmRpY1plcm8sCiAgICAgICAga0Vhc3Rlcm5BcmFiaWNJbmRpY09uZSA9IGtF eHRlbmRlZEFyYWJpY0luZGljT25lLAogICAgICAgIGtFYXN0ZXJuQXJhYmljSW5kaWNUd28gPSBr RXh0ZW5kZWRBcmFiaWNJbmRpY1R3bywKICAgICAgICBrRWFzdGVybkFyYWJpY0luZGljVGhyZWUg PSBrRXh0ZW5kZWRBcmFiaWNJbmRpY1RocmVlLAogICAgICAgIGtFYXN0ZXJuQXJhYmljSW5kaWNG b3VyID0ga0V4dGVuZGVkQXJhYmljSW5kaWNGb3VyLAogICAgICAgIGtFYXN0ZXJuQXJhYmljSW5k aWNGaXZlID0ga0V4dGVuZGVkQXJhYmljSW5kaWNGaXZlLAogICAgICAgIGtFYXN0ZXJuQXJhYmlj SW5kaWNTaXggPSBrRXh0ZW5kZWRBcmFiaWNJbmRpY1NpeCwKICAgICAgICBrRWFzdGVybkFyYWJp Y0luZGljU2V2ZW4gPSBrRXh0ZW5kZWRBcmFiaWNJbmRpY1NldmVuLAogICAgICAgIGtFYXN0ZXJu QXJhYmljSW5kaWNFaWdodCA9IGtFeHRlbmRlZEFyYWJpY0luZGljRWlnaHQsCiAgICAgICAga0Vh c3Rlcm5BcmFiaWNJbmRpY05pbmUgPSBrRXh0ZW5kZWRBcmFiaWNJbmRpY05pbmUKICAgIH07Cn07 CgogCiAKIAoKY2xhc3MgVUFTQ0lJIHsKcHVibGljOgogICAgZW51bSBFQVNDSUlOYW1lcyB7CiAg ICAgICAga051bGwgPSAweDAwMDAsCiAgICAgICAga1N0YXJ0T2ZIZWFkaW5nID0gMHgwMDAxLAog ICAgICAgIGtTdGFydE9mVGV4dCA9IDB4MDAwMiwKICAgICAgICBrRW5kT2ZUZXh0ID0gMHgwMDAz LAogICAgICAgIGtFbmRPZlRyYW5zbWlzc2lvbiA9IDB4MDAwNCwKICAgICAgICBrRW5xdWlyeSA9 IDB4MDAwNSwKICAgICAgICBrQWNrbm93bGVkZ2UgPSAweDAwMDYsCiAgICAgICAga0JlbGwgPSAw eDAwMDcsCiAgICAgICAga0JhY2tzcGFjZSA9IDB4MDAwOCwKCiAgICAgICAga0hvcml6b250YWxU YWJ1bGF0aW9uID0gMHgwMDA5LAogICAgICAgIGtMaW5lRmVlZCA9IDB4MDAwQSwKICAgICAgICBr VmVydGljYWxUYWJ1bGF0aW9uID0gMHgwMDBCLAogICAgICAgIGtGb3JtRmVlZCA9IDB4MDAwQywK ICAgICAgICBrQ2FycmlhZ2VSZXR1cm4gPSAweDAwMEQsCiAgICAgICAga1NoaWZ0T3V0ID0gMHgw MDBFLAogICAgICAgIGtTaGlmdEluID0gMHgwMDBGLAogICAgICAgIGtEYXRhTGlua0VzY2FwZSA9 IDB4MDAxMCwKICAgICAgICBrRGV2aWNlQ29udHJvbE9uZSA9IDB4MDAxMSwKICAgICAgICBrRGV2 aWNlQ29udHJvbFR3byA9IDB4MDAxMiwKICAgICAgICBrRGV2aWNlQ29udHJvbFRocmVlID0gMHgw MDEzLAogICAgICAgIGtEZXZpY2VDb250cm9sRm91ciA9IDB4MDAxNCwKICAgICAgICBrTmVnYXRp dmVBY2tub3dsZWRnZSA9IDB4MDAxNSwKICAgICAgICBrU3luY2hyb25vdXNJZGxlID0gMHgwMDE2 LAogICAgICAgIGtFbmRPZlRyYW5zbWlzc2lvbkJsb2NrID0gMHgwMDE3LAogICAgICAgIGtDYW5j ZWwgPSAweDAwMTgsCiAgICAgICAga0VuZE9mTWVkaXVtID0gMHgwMDE5LAogICAgICAgIGtTdWJz dGl0dXRlID0gMHgwMDFBLAogICAgICAgIGtFc2NhcGUgPSAweDAwMUIsCiAgICAgICAga0ZpbGVT ZXBhcmF0b3IgPSAweDAwMUMsCiAgICAgICAga0dyb3VwU2VwYXJhdG9yID0gMHgwMDFELAogICAg ICAgIGtSZWNvcmRTZXBhcmF0b3IgPSAweDAwMUUsCiAgICAgICAga1VuaXRTZXBhcmF0b3IgPSAw eDAwMUYsCgogICAgICAgIGtTcGFjZSA9IDB4MDAyMCwKICAgICAgICBrRXhjbGFtYXRpb25NYXJr ID0gMHgwMDIxLAogICAgICAgIGtRdW90YXRpb25NYXJrID0gMHgwMDIyLAogICAgICAgIGtOdW1i ZXJTaWduID0gMHgwMDIzLAogICAgICAgIGtEb2xsYXJTaWduID0gMHgwMDI0LAogICAgICAgIGtQ ZXJjZW50U2lnbiA9IDB4MDAyNSwKICAgICAgICBrQW1wZXJzYW5kID0gMHgwMDI2LAogICAgICAg IGtBcG9zdHJvcGhlID0gMHgwMDI3LAogICAgICAgIGtMZWZ0UGFyZW50aGVzaXMgPSAweDAwMjgs CiAgICAgICAga1JpZ2h0UGFyZW50aGVzaXMgPSAweDAwMjksCiAgICAgICAga0FzdGVyaXNrID0g MHgwMDJBLAogICAgICAgIGtQbHVzU2lnbiA9IDB4MDAyQiwKICAgICAgICBrQ29tbWEgPSAweDAw MkMsCiAgICAgICAga0h5cGhlbk1pbnVzID0gMHgwMDJELAogICAgICAgIGtGdWxsU3RvcCA9IDB4 MDAyRSwKICAgICAgICBrU29saWR1cyA9IDB4MDAyRiwKICAgICAgICBrRGlnaXRaZXJvID0gMHgw MDMwLAogICAgICAgIGtEaWdpdE9uZSA9IDB4MDAzMSwKICAgICAgICBrRGlnaXRUd28gPSAweDAw MzIsCiAgICAgICAga0RpZ2l0VGhyZWUgPSAweDAwMzMsCiAgICAgICAga0RpZ2l0Rm91ciA9IDB4 MDAzNCwKICAgICAgICBrRGlnaXRGaXZlID0gMHgwMDM1LAogICAgICAgIGtEaWdpdFNpeCA9IDB4 MDAzNiwKICAgICAgICBrRGlnaXRTZXZlbiA9IDB4MDAzNywKICAgICAgICBrRGlnaXRFaWdodCA9 IDB4MDAzOCwKICAgICAgICBrRGlnaXROaW5lID0gMHgwMDM5LAogICAgICAgIGtDb2xvbiA9IDB4 MDAzQSwKICAgICAgICBrU2VtaWNvbG9uID0gMHgwMDNCLAogICAgICAgIGtMZXNzVGhhblNpZ24g PSAweDAwM0MsCiAgICAgICAga0VxdWFsc1NpZ24gPSAweDAwM0QsCiAgICAgICAga0dyZWF0ZXJU aGFuU2lnbiA9IDB4MDAzRSwKICAgICAgICBrUXVlc3Rpb25NYXJrID0gMHgwMDNGLAogICAgICAg IGtDb21tZXJjaWFsQXQgPSAweDAwNDAsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBID0gMHgwMDQx LAogICAgICAgIGtDYXBpdGFsTGV0dGVyQiA9IDB4MDA0MiwKICAgICAgICBrQ2FwaXRhbExldHRl ckMgPSAweDAwNDMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJEID0gMHgwMDQ0LAogICAgICAgIGtD YXBpdGFsTGV0dGVyRSA9IDB4MDA0NSwKICAgICAgICBrQ2FwaXRhbExldHRlckYgPSAweDAwNDYs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJHID0gMHgwMDQ3LAogICAgICAgIGtDYXBpdGFsTGV0dGVy SCA9IDB4MDA0OCwKICAgICAgICBrQ2FwaXRhbExldHRlckkgPSAweDAwNDksCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJKID0gMHgwMDRBLAogICAgICAgIGtDYXBpdGFsTGV0dGVySyA9IDB4MDA0QiwK ICAgICAgICBrQ2FwaXRhbExldHRlckwgPSAweDAwNEMsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJN ID0gMHgwMDRELAogICAgICAgIGtDYXBpdGFsTGV0dGVyTiA9IDB4MDA0RSwKICAgICAgICBrQ2Fw aXRhbExldHRlck8gPSAweDAwNEYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJQID0gMHgwMDUwLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyUSA9IDB4MDA1MSwKICAgICAgICBrQ2FwaXRhbExldHRlclIg PSAweDAwNTIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJTID0gMHgwMDUzLAogICAgICAgIGtDYXBp dGFsTGV0dGVyVCA9IDB4MDA1NCwKICAgICAgICBrQ2FwaXRhbExldHRlclUgPSAweDAwNTUsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJWID0gMHgwMDU2LAogICAgICAgIGtDYXBpdGFsTGV0dGVyVyA9 IDB4MDA1NywKICAgICAgICBrQ2FwaXRhbExldHRlclggPSAweDAwNTgsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJZID0gMHgwMDU5LAogICAgICAgIGtDYXBpdGFsTGV0dGVyWiA9IDB4MDA1QSwKICAg ICAgICBrTGVmdFNxdWFyZUJyYWNrZXQgPSAweDAwNUIsCiAgICAgICAga1JldmVyc2VTb2xpZHVz ID0gMHgwMDVDLAogICAgICAgIGtSaWdodFNxdWFyZUJyYWNrZXQgPSAweDAwNUQsCiAgICAgICAg a0NpcmN1bWZsZXhBY2NlbnQgPSAweDAwNUUsCiAgICAgICAga0xvd0xpbmUgPSAweDAwNUYsCiAg ICAgICAga0dyYXZlQWNjZW50ID0gMHgwMDYwLAogICAgICAgIGtTbWFsbExldHRlckEgPSAweDAw NjEsCiAgICAgICAga1NtYWxsTGV0dGVyQiA9IDB4MDA2MiwKICAgICAgICBrU21hbGxMZXR0ZXJD ID0gMHgwMDYzLAogICAgICAgIGtTbWFsbExldHRlckQgPSAweDAwNjQsCiAgICAgICAga1NtYWxs TGV0dGVyRSA9IDB4MDA2NSwKICAgICAgICBrU21hbGxMZXR0ZXJGID0gMHgwMDY2LAogICAgICAg IGtTbWFsbExldHRlckcgPSAweDAwNjcsCiAgICAgICAga1NtYWxsTGV0dGVySCA9IDB4MDA2OCwK ICAgICAgICBrU21hbGxMZXR0ZXJJID0gMHgwMDY5LAogICAgICAgIGtTbWFsbExldHRlckogPSAw eDAwNkEsCiAgICAgICAga1NtYWxsTGV0dGVySyA9IDB4MDA2QiwKICAgICAgICBrU21hbGxMZXR0 ZXJMID0gMHgwMDZDLAogICAgICAgIGtTbWFsbExldHRlck0gPSAweDAwNkQsCiAgICAgICAga1Nt YWxsTGV0dGVyTiA9IDB4MDA2RSwKICAgICAgICBrU21hbGxMZXR0ZXJPID0gMHgwMDZGLAogICAg ICAgIGtTbWFsbExldHRlclAgPSAweDAwNzAsCiAgICAgICAga1NtYWxsTGV0dGVyUSA9IDB4MDA3 MSwKICAgICAgICBrU21hbGxMZXR0ZXJSID0gMHgwMDcyLAogICAgICAgIGtTbWFsbExldHRlclMg PSAweDAwNzMsCiAgICAgICAga1NtYWxsTGV0dGVyVCA9IDB4MDA3NCwKICAgICAgICBrU21hbGxM ZXR0ZXJVID0gMHgwMDc1LAogICAgICAgIGtTbWFsbExldHRlclYgPSAweDAwNzYsCiAgICAgICAg a1NtYWxsTGV0dGVyVyA9IDB4MDA3NywKICAgICAgICBrU21hbGxMZXR0ZXJYID0gMHgwMDc4LAog ICAgICAgIGtTbWFsbExldHRlclkgPSAweDAwNzksCiAgICAgICAga1NtYWxsTGV0dGVyWiA9IDB4 MDA3QSwKICAgICAgICBrTGVmdEN1cmx5QnJhY2tldCA9IDB4MDA3QiwKICAgICAgICBrVmVydGlj YWxMaW5lID0gMHgwMDdDLAogICAgICAgIGtSaWdodEN1cmx5QnJhY2tldCA9IDB4MDA3RCwKICAg ICAgICBrVGlsZGUgPSAweDAwN0UsCiAgICAgICAga0RlbGV0ZSA9IDB4MDA3RiwKCiAgICAgICAg IAoKICAgICAgICBrQXBvc3Ryb3BoZVF1b3RlID0ga0Fwb3N0cm9waGUsCiAgICAgICAga09wZW5p bmdQYXJlbnRoZXNpcyA9IGtMZWZ0UGFyZW50aGVzaXMsCiAgICAgICAga0Nsb3NpbmdQYXJlbnRo ZXNpcyA9IGtSaWdodFBhcmVudGhlc2lzLAogICAgICAgIGtQZXJpb2QgPSBrRnVsbFN0b3AsCiAg ICAgICAga1NsYXNoID0ga1NvbGlkdXMsCiAgICAgICAga0JhY2tzbGFzaCA9IGtSZXZlcnNlU29s aWR1cywKICAgICAgICBrU3BhY2luZ1VuZGVyc2NvcmUgPSBrTG93TGluZSwKICAgICAgICBrT3Bl bmluZ0N1cmx5QnJhY2tldCA9IGtMZWZ0Q3VybHlCcmFja2V0LAogICAgICAgIGtWZXJ0aWNhbEJh ciA9IGtWZXJ0aWNhbExpbmUsCiAgICAgICAga0Nsb3NpbmdDdXJseUJyYWNrZXQgPSBrUmlnaHRD dXJseUJyYWNrZXQKICAgIH07Cn07CgogCiAKIApjbGFzcyBVTGF0aW4xIHsKcHVibGljOgogICAg ZW51bSBFTGF0aW4xTmFtZXMgewogICAgICAgIGtOdWxsID0gMHgwMDAwLAogICAgICAgIGtTdGFy dE9mSGVhZGluZyA9IDB4MDAwMSwKICAgICAgICBrU3RhcnRPZlRleHQgPSAweDAwMDIsCiAgICAg ICAga0VuZE9mVGV4dCA9IDB4MDAwMywKICAgICAgICBrRW5kT2ZUcmFuc21pc3Npb24gPSAweDAw MDQsCiAgICAgICAga0VucXVpcnkgPSAweDAwMDUsCiAgICAgICAga0Fja25vd2xlZGdlID0gMHgw MDA2LAogICAgICAgIGtCZWxsID0gMHgwMDA3LAogICAgICAgIGtCYWNrc3BhY2UgPSAweDAwMDgs CgogICAgICAgIGtIb3Jpem9udGFsVGFidWxhdGlvbiA9IDB4MDAwOSwKICAgICAgICBrTGluZUZl ZWQgPSAweDAwMEEsCiAgICAgICAga1ZlcnRpY2FsVGFidWxhdGlvbiA9IDB4MDAwQiwKICAgICAg ICBrRm9ybUZlZWQgPSAweDAwMEMsCiAgICAgICAga0NhcnJpYWdlUmV0dXJuID0gMHgwMDBELAog ICAgICAgIGtTaGlmdE91dCA9IDB4MDAwRSwKICAgICAgICBrU2hpZnRJbiA9IDB4MDAwRiwKICAg ICAgICBrRGF0YUxpbmtFc2NhcGUgPSAweDAwMTAsCiAgICAgICAga0RldmljZUNvbnRyb2xPbmUg PSAweDAwMTEsCiAgICAgICAga0RldmljZUNvbnRyb2xUd28gPSAweDAwMTIsCiAgICAgICAga0Rl dmljZUNvbnRyb2xUaHJlZSA9IDB4MDAxMywKICAgICAgICBrRGV2aWNlQ29udHJvbEZvdXIgPSAw eDAwMTQsCiAgICAgICAga05lZ2F0aXZlQWNrbm93bGVkZ2UgPSAweDAwMTUsCiAgICAgICAga1N5 bmNocm9ub3VzSWRsZSA9IDB4MDAxNiwKICAgICAgICBrRW5kT2ZUcmFuc21pc3Npb25CbG9jayA9 IDB4MDAxNywKICAgICAgICBrQ2FuY2VsID0gMHgwMDE4LAogICAgICAgIGtFbmRPZk1lZGl1bSA9 IDB4MDAxOSwKICAgICAgICBrU3Vic3RpdHV0ZSA9IDB4MDAxQSwKICAgICAgICBrRXNjYXBlID0g MHgwMDFCLAogICAgICAgIGtGaWxlU2VwYXJhdG9yID0gMHgwMDFDLAogICAgICAgIGtHcm91cFNl cGFyYXRvciA9IDB4MDAxRCwKICAgICAgICBrUmVjb3JkU2VwYXJhdG9yID0gMHgwMDFFLAogICAg ICAgIGtVbml0U2VwYXJhdG9yID0gMHgwMDFGLAoKICAgICAgICBrU3BhY2UgPSAweDAwMjAsCiAg ICAgICAga0V4Y2xhbWF0aW9uTWFyayA9IDB4MDAyMSwKICAgICAgICBrUXVvdGF0aW9uTWFyayA9 IDB4MDAyMiwKICAgICAgICBrTnVtYmVyU2lnbiA9IDB4MDAyMywKICAgICAgICBrRG9sbGFyU2ln biA9IDB4MDAyNCwKICAgICAgICBrUGVyY2VudFNpZ24gPSAweDAwMjUsCiAgICAgICAga0FtcGVy c2FuZCA9IDB4MDAyNiwKICAgICAgICBrQXBvc3Ryb3BoZSA9IDB4MDAyNywKICAgICAgICBrTGVm dFBhcmVudGhlc2lzID0gMHgwMDI4LAogICAgICAgIGtSaWdodFBhcmVudGhlc2lzID0gMHgwMDI5 LAogICAgICAgIGtBc3RlcmlzayA9IDB4MDAyQSwKICAgICAgICBrUGx1c1NpZ24gPSAweDAwMkIs CiAgICAgICAga0NvbW1hID0gMHgwMDJDLAogICAgICAgIGtIeXBoZW5NaW51cyA9IDB4MDAyRCwK ICAgICAgICBrRnVsbFN0b3AgPSAweDAwMkUsCiAgICAgICAga1NvbGlkdXMgPSAweDAwMkYsCiAg ICAgICAga0RpZ2l0WmVybyA9IDB4MDAzMCwKICAgICAgICBrRGlnaXRPbmUgPSAweDAwMzEsCiAg ICAgICAga0RpZ2l0VHdvID0gMHgwMDMyLAogICAgICAgIGtEaWdpdFRocmVlID0gMHgwMDMzLAog ICAgICAgIGtEaWdpdEZvdXIgPSAweDAwMzQsCiAgICAgICAga0RpZ2l0Rml2ZSA9IDB4MDAzNSwK ICAgICAgICBrRGlnaXRTaXggPSAweDAwMzYsCiAgICAgICAga0RpZ2l0U2V2ZW4gPSAweDAwMzcs CiAgICAgICAga0RpZ2l0RWlnaHQgPSAweDAwMzgsCiAgICAgICAga0RpZ2l0TmluZSA9IDB4MDAz OSwKICAgICAgICBrQ29sb24gPSAweDAwM0EsCiAgICAgICAga1NlbWljb2xvbiA9IDB4MDAzQiwK ICAgICAgICBrTGVzc1RoYW5TaWduID0gMHgwMDNDLAogICAgICAgIGtFcXVhbHNTaWduID0gMHgw MDNELAogICAgICAgIGtHcmVhdGVyVGhhblNpZ24gPSAweDAwM0UsCiAgICAgICAga1F1ZXN0aW9u TWFyayA9IDB4MDAzRiwKICAgICAgICBrQ29tbWVyY2lhbEF0ID0gMHgwMDQwLAogICAgICAgIGtD YXBpdGFsTGV0dGVyQSA9IDB4MDA0MSwKICAgICAgICBrQ2FwaXRhbExldHRlckIgPSAweDAwNDIs CiAgICAgICAga0NhcGl0YWxMZXR0ZXJDID0gMHgwMDQzLAogICAgICAgIGtDYXBpdGFsTGV0dGVy RCA9IDB4MDA0NCwKICAgICAgICBrQ2FwaXRhbExldHRlckUgPSAweDAwNDUsCiAgICAgICAga0Nh cGl0YWxMZXR0ZXJGID0gMHgwMDQ2LAogICAgICAgIGtDYXBpdGFsTGV0dGVyRyA9IDB4MDA0NywK ICAgICAgICBrQ2FwaXRhbExldHRlckggPSAweDAwNDgsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJJ ID0gMHgwMDQ5LAogICAgICAgIGtDYXBpdGFsTGV0dGVySiA9IDB4MDA0QSwKICAgICAgICBrQ2Fw aXRhbExldHRlcksgPSAweDAwNEIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJMID0gMHgwMDRDLAog ICAgICAgIGtDYXBpdGFsTGV0dGVyTSA9IDB4MDA0RCwKICAgICAgICBrQ2FwaXRhbExldHRlck4g PSAweDAwNEUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPID0gMHgwMDRGLAogICAgICAgIGtDYXBp dGFsTGV0dGVyUCA9IDB4MDA1MCwKICAgICAgICBrQ2FwaXRhbExldHRlclEgPSAweDAwNTEsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJSID0gMHgwMDUyLAogICAgICAgIGtDYXBpdGFsTGV0dGVyUyA9 IDB4MDA1MywKICAgICAgICBrQ2FwaXRhbExldHRlclQgPSAweDAwNTQsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJVID0gMHgwMDU1LAogICAgICAgIGtDYXBpdGFsTGV0dGVyViA9IDB4MDA1NiwKICAg ICAgICBrQ2FwaXRhbExldHRlclcgPSAweDAwNTcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJYID0g MHgwMDU4LAogICAgICAgIGtDYXBpdGFsTGV0dGVyWSA9IDB4MDA1OSwKICAgICAgICBrQ2FwaXRh bExldHRlclogPSAweDAwNUEsCiAgICAgICAga0xlZnRTcXVhcmVCcmFja2V0ID0gMHgwMDVCLAog ICAgICAgIGtSZXZlcnNlU29saWR1cyA9IDB4MDA1QywKICAgICAgICBrUmlnaHRTcXVhcmVCcmFj a2V0ID0gMHgwMDVELAogICAgICAgIGtDaXJjdW1mbGV4QWNjZW50ID0gMHgwMDVFLAogICAgICAg IGtMb3dMaW5lID0gMHgwMDVGLAogICAgICAgIGtHcmF2ZUFjY2VudCA9IDB4MDA2MCwKICAgICAg ICBrU21hbGxMZXR0ZXJBID0gMHgwMDYxLAogICAgICAgIGtTbWFsbExldHRlckIgPSAweDAwNjIs CiAgICAgICAga1NtYWxsTGV0dGVyQyA9IDB4MDA2MywKICAgICAgICBrU21hbGxMZXR0ZXJEID0g MHgwMDY0LAogICAgICAgIGtTbWFsbExldHRlckUgPSAweDAwNjUsCiAgICAgICAga1NtYWxsTGV0 dGVyRiA9IDB4MDA2NiwKICAgICAgICBrU21hbGxMZXR0ZXJHID0gMHgwMDY3LAogICAgICAgIGtT bWFsbExldHRlckggPSAweDAwNjgsCiAgICAgICAga1NtYWxsTGV0dGVySSA9IDB4MDA2OSwKICAg ICAgICBrU21hbGxMZXR0ZXJKID0gMHgwMDZBLAogICAgICAgIGtTbWFsbExldHRlcksgPSAweDAw NkIsCiAgICAgICAga1NtYWxsTGV0dGVyTCA9IDB4MDA2QywKICAgICAgICBrU21hbGxMZXR0ZXJN ID0gMHgwMDZELAogICAgICAgIGtTbWFsbExldHRlck4gPSAweDAwNkUsCiAgICAgICAga1NtYWxs TGV0dGVyTyA9IDB4MDA2RiwKICAgICAgICBrU21hbGxMZXR0ZXJQID0gMHgwMDcwLAogICAgICAg IGtTbWFsbExldHRlclEgPSAweDAwNzEsCiAgICAgICAga1NtYWxsTGV0dGVyUiA9IDB4MDA3MiwK ICAgICAgICBrU21hbGxMZXR0ZXJTID0gMHgwMDczLAogICAgICAgIGtTbWFsbExldHRlclQgPSAw eDAwNzQsCiAgICAgICAga1NtYWxsTGV0dGVyVSA9IDB4MDA3NSwKICAgICAgICBrU21hbGxMZXR0 ZXJWID0gMHgwMDc2LAogICAgICAgIGtTbWFsbExldHRlclcgPSAweDAwNzcsCiAgICAgICAga1Nt YWxsTGV0dGVyWCA9IDB4MDA3OCwKICAgICAgICBrU21hbGxMZXR0ZXJZID0gMHgwMDc5LAogICAg ICAgIGtTbWFsbExldHRlclogPSAweDAwN0EsCiAgICAgICAga0xlZnRDdXJseUJyYWNrZXQgPSAw eDAwN0IsCiAgICAgICAga1ZlcnRpY2FsTGluZSA9IDB4MDA3QywKICAgICAgICBrUmlnaHRDdXJs eUJyYWNrZXQgPSAweDAwN0QsCiAgICAgICAga1RpbGRlID0gMHgwMDdFLAogICAgICAgIGtEZWxl dGUgPSAweDAwN0YsCgogICAgICAgIGtOb0JyZWFrU3BhY2UgPSAweDAwQTAsCiAgICAgICAga0lu dmVydGVkRXhjbGFtYXRpb25NYXJrID0gMHgwMEExLAogICAgICAgIGtDZW50U2lnbiA9IDB4MDBB MiwKICAgICAgICBrUG91bmRTaWduID0gMHgwMEEzLAogICAgICAgIGtDdXJyZW5jeVNpZ24gPSAw eDAwQTQsCiAgICAgICAga1llblNpZ24gPSAweDAwQTUsCiAgICAgICAga0Jyb2tlbkJhciA9IDB4 MDBBNiwKICAgICAgICBrU2VjdGlvblNpZ24gPSAweDAwQTcsCiAgICAgICAga0RpYWVyZXNpcyA9 IDB4MDBBOCwKICAgICAgICBrQ29weXJpZ2h0U2lnbiA9IDB4MDBBOSwKICAgICAgICBrRmVtaW5p bmVPcmRpbmFsSW5kaWNhdG9yID0gMHgwMEFBLAogICAgICAgIGtMZWZ0UG9pbnRpbmdEb3VibGVB bmdsZVF1b3RhdGlvbk1hcmsgPSAweDAwQUIsCiAgICAgICAga05vdFNpZ24gPSAweDAwQUMsCiAg ICAgICAga1NvZnRIeXBoZW4gPSAweDAwQUQsCiAgICAgICAga1JlZ2lzdGVyZWRTaWduID0gMHgw MEFFLAogICAgICAgIGtNYWNyb24gPSAweDAwQUYsCiAgICAgICAga0RlZ3JlZVNpZ24gPSAweDAw QjAsCiAgICAgICAga1BsdXNNaW51c1NpZ24gPSAweDAwQjEsCiAgICAgICAga0FjdXRlQWNjZW50 ID0gMHgwMEI0LAogICAgICAgIGtNaWNyb1NpZ24gPSAweDAwQjUsCiAgICAgICAga1BpbGNyb3dT aWduID0gMHgwMEI2LAogICAgICAgIGtNaWRkbGVEb3QgPSAweDAwQjcsCiAgICAgICAga0NlZGls bGEgPSAweDAwQjgsCiAgICAgICAga01hc2N1bGluZU9yZGluYWxJbmRpY2F0b3IgPSAweDAwQkEs CiAgICAgICAga1JpZ2h0UG9pbnRpbmdEb3VibGVBbmdsZVF1b3RhdGlvbk1hcmsgPSAweDAwQkIs CiAgICAgICAga1Z1bGdhckZyYWN0aW9uT25lUXVhcnRlciA9IDB4MDBCQywKICAgICAgICBrVnVs Z2FyRnJhY3Rpb25PbmVIYWxmID0gMHgwMEJELAogICAgICAgIGtWdWxnYXJGcmFjdGlvblRocmVl UXVhcnRlcnMgPSAweDAwQkUsCiAgICAgICAga0ludmVydGVkUXVlc3Rpb25NYXJrID0gMHgwMEJG LAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhHcmF2ZSA9IDB4MDBDMCwKICAgICAgICBrQ2Fw aXRhbExldHRlckFXaXRoQWN1dGUgPSAweDAwQzEsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0 aENpcmN1bWZsZXggPSAweDAwQzIsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aFRpbGRlID0g MHgwMEMzLAogICAgICAgIGtDYXBpdGFsTGV0dGVyQVdpdGhEaWFlcmVzaXMgPSAweDAwQzQsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJBV2l0aFJpbmdBYm92ZSA9IDB4MDBDNSwKICAgICAgICBrQ2Fw aXRhbExpZ2F0dXJlQWUgPSAweDAwQzYsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJDV2l0aENlZGls bGEgPSAweDAwQzcsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJFV2l0aEdyYXZlID0gMHgwMEM4LAog ICAgICAgIGtDYXBpdGFsTGV0dGVyRVdpdGhBY3V0ZSA9IDB4MDBDOSwKICAgICAgICBrQ2FwaXRh bExldHRlckVXaXRoQ2lyY3VtZmxleCA9IDB4MDBDQSwKICAgICAgICBrQ2FwaXRhbExldHRlckVX aXRoRGlhZXJlc2lzID0gMHgwMENCLAogICAgICAgIGtDYXBpdGFsTGV0dGVySVdpdGhHcmF2ZSA9 IDB4MDBDQywKICAgICAgICBrQ2FwaXRhbExldHRlcklXaXRoQWN1dGUgPSAweDAwQ0QsCiAgICAg ICAga0NhcGl0YWxMZXR0ZXJJV2l0aENpcmN1bWZsZXggPSAweDAwQ0UsCiAgICAgICAga0NhcGl0 YWxMZXR0ZXJJV2l0aERpYWVyZXNpcyA9IDB4MDBDRiwKICAgICAgICBrQ2FwaXRhbExldHRlckV0 aCA9IDB4MDBEMCwKICAgICAgICBrQ2FwaXRhbExldHRlck5XaXRoVGlsZGUgPSAweDAwRDEsCiAg ICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aEdyYXZlID0gMHgwMEQyLAogICAgICAgIGtDYXBpdGFs TGV0dGVyT1dpdGhBY3V0ZSA9IDB4MDBEMywKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoQ2ly Y3VtZmxleCA9IDB4MDBENCwKICAgICAgICBrQ2FwaXRhbExldHRlck9XaXRoVGlsZGUgPSAweDAw RDUsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJPV2l0aERpYWVyZXNpcyA9IDB4MDBENiwKICAgICAg ICBrTXVsdGlwbGljYXRpb25TaWduID0gMHgwMEQ3LAogICAgICAgIGtDYXBpdGFsTGV0dGVyT1dp dGhTdHJva2UgPSAweDAwRDgsCiAgICAgICAga0NhcGl0YWxMZXR0ZXJVV2l0aEdyYXZlID0gMHgw MEQ5LAogICAgICAgIGtDYXBpdGFsTGV0dGVyVVdpdGhBY3V0ZSA9IDB4MDBEQSwKICAgICAgICBr Q2FwaXRhbExldHRlclVXaXRoQ2lyY3VtZmxleCA9IDB4MDBEQiwKICAgICAgICBrQ2FwaXRhbExl dHRlclVXaXRoRGlhZXJlc2lzID0gMHgwMERDLAogICAgICAgIGtDYXBpdGFsTGV0dGVyWVdpdGhB Y3V0ZSA9IDB4MDBERCwKICAgICAgICBrQ2FwaXRhbExldHRlclRob3JuID0gMHgwMERFLAogICAg ICAgIGtTbWFsbExldHRlclNoYXJwUyA9IDB4MDBERiwKICAgICAgICBrU21hbGxMZXR0ZXJBV2l0 aEdyYXZlID0gMHgwMEUwLAogICAgICAgIGtTbWFsbExldHRlckFXaXRoQWN1dGUgPSAweDAwRTEs CiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhDaXJjdW1mbGV4ID0gMHgwMEUyLAogICAgICAgIGtT bWFsbExldHRlckFXaXRoVGlsZGUgPSAweDAwRTMsCiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhE aWFlcmVzaXMgPSAweDAwRTQsCiAgICAgICAga1NtYWxsTGV0dGVyQVdpdGhSaW5nQWJvdmUgPSAw eDAwRTUsCiAgICAgICAga1NtYWxsTGlnYXR1cmVBZSA9IDB4MDBFNiwKICAgICAgICBrU21hbGxM ZXR0ZXJDV2l0aENlZGlsbGEgPSAweDAwRTcsCiAgICAgICAga1NtYWxsTGV0dGVyRVdpdGhHcmF2 ZSA9IDB4MDBFOCwKICAgICAgICBrU21hbGxMZXR0ZXJFV2l0aEFjdXRlID0gMHgwMEU5LAogICAg ICAgIGtTbWFsbExldHRlckVXaXRoQ2lyY3VtZmxleCA9IDB4MDBFQSwKICAgICAgICBrU21hbGxM ZXR0ZXJFV2l0aERpYWVyZXNpcyA9IDB4MDBFQiwKICAgICAgICBrU21hbGxMZXR0ZXJJV2l0aEdy YXZlID0gMHgwMEVDLAogICAgICAgIGtTbWFsbExldHRlcklXaXRoQWN1dGUgPSAweDAwRUQsCiAg ICAgICAga1NtYWxsTGV0dGVySVdpdGhDaXJjdW1mbGV4ID0gMHgwMEVFLAogICAgICAgIGtTbWFs bExldHRlcklXaXRoRGlhZXJlc2lzID0gMHgwMEVGLAogICAgICAgIGtTbWFsbExldHRlckV0aCA9 IDB4MDBGMCwKICAgICAgICBrU21hbGxMZXR0ZXJOV2l0aFRpbGRlID0gMHgwMEYxLAogICAgICAg IGtTbWFsbExldHRlck9XaXRoR3JhdmUgPSAweDAwRjIsCiAgICAgICAga1NtYWxsTGV0dGVyT1dp dGhBY3V0ZSA9IDB4MDBGMywKICAgICAgICBrU21hbGxMZXR0ZXJPV2l0aENpcmN1bWZsZXggPSAw eDAwRjQsCiAgICAgICAga1NtYWxsTGV0dGVyT1dpdGhUaWxkZSA9IDB4MDBGNSwKICAgICAgICBr U21hbGxMZXR0ZXJPV2l0aERpYWVyZXNpcyA9IDB4MDBGNiwKICAgICAgICBrRGl2aXNpb25TaWdu ID0gMHgwMEY3LAogICAgICAgIGtTbWFsbExldHRlck9XaXRoU3Ryb2tlID0gMHgwMEY4LAogICAg ICAgIGtTbWFsbExldHRlclVXaXRoR3JhdmUgPSAweDAwRjksCiAgICAgICAga1NtYWxsTGV0dGVy VVdpdGhBY3V0ZSA9IDB4MDBGQSwKICAgICAgICBrU21hbGxMZXR0ZXJVV2l0aENpcmN1bWZsZXgg PSAweDAwRkIsCiAgICAgICAga1NtYWxsTGV0dGVyVVdpdGhEaWFlcmVzaXMgPSAweDAwRkMsCiAg ICAgICAga1NtYWxsTGV0dGVyWVdpdGhBY3V0ZSA9IDB4MDBGRCwKICAgICAgICBrU21hbGxMZXR0 ZXJUaG9ybiA9IDB4MDBGRSwKICAgICAgICBrU21hbGxMZXR0ZXJZV2l0aERpYWVyZXNpcyA9IDB4 MDBGRiwKCiAgICAgICAgIAoKICAgICAgICBrQXBvc3Ryb3BoZVF1b3RlID0ga0Fwb3N0cm9waGUs CiAgICAgICAga09wZW5pbmdQYXJlbnRoZXNpcyA9IGtMZWZ0UGFyZW50aGVzaXMsCiAgICAgICAg a0Nsb3NpbmdQYXJlbnRoZXNpcyA9IGtSaWdodFBhcmVudGhlc2lzLAogICAgICAgIGtQZXJpb2Qg PSBrRnVsbFN0b3AsCiAgICAgICAga1NsYXNoID0ga1NvbGlkdXMsCiAgICAgICAga0JhY2tzbGFz aCA9IGtSZXZlcnNlU29saWR1cywKICAgICAgICBrU3BhY2luZ1VuZGVyc2NvcmUgPSBrTG93TGlu ZSwKICAgICAgICBrT3BlbmluZ0N1cmx5QnJhY2tldCA9IGtMZWZ0Q3VybHlCcmFja2V0LAogICAg ICAgIGtWZXJ0aWNhbEJhciA9IGtWZXJ0aWNhbExpbmUsCiAgICAgICAga0Nsb3NpbmdDdXJseUJy YWNrZXQgPSBrUmlnaHRDdXJseUJyYWNrZXQsCiAgICAgICAga05vbkJyZWFraW5nU3BhY2UgPSBr Tm9CcmVha1NwYWNlLAogICAgICAgIGtCcm9rZW5WZXJ0aWNhbEJhciA9IGtCcm9rZW5CYXIsCiAg ICAgICAga1NwYWNpbmdEaWFlcmVzaXMgPSBrRGlhZXJlc2lzLAogICAgICAgIGtMZWZ0UG9pbnRp bmdHdWlsbGVtZXQgPSBrTGVmdFBvaW50aW5nRG91YmxlQW5nbGVRdW90YXRpb25NYXJrLAogICAg ICAgIGtSZWdpc3RlcmVkVHJhZGVNYXJrU2lnbiA9IGtSZWdpc3RlcmVkU2lnbiwKICAgICAgICBr UGx1c09yTWludXNTaWduID0ga1BsdXNNaW51c1NpZ24sCiAgICAgICAga1BhcmFncmFwaFNpZ24g PSBrUGlsY3Jvd1NpZ24sCiAgICAgICAga1JpZ2h0UG9pbnRpbmdHdWlsbGVtZXQgPSBrUmlnaHRQ b2ludGluZ0RvdWJsZUFuZ2xlUXVvdGF0aW9uTWFyawogICAgfTsKfTsKCiAKIAogCmNsYXNzIFVH ZW5lcmFsUHVuY3R1YXRpb24gewpwdWJsaWM6CiAgICBlbnVtIEVHZW5lcmFsUHVuY3R1YXRpb25O YW1lcyB7CiAgICAgICAga0V4Y2xhbWF0aW9uTWFyayA9IDB4MDAyMSwKICAgICAgICBrUXVvdGF0 aW9uTWFyayA9IDB4MDAyMiwKICAgICAgICBrTnVtYmVyU2lnbiA9IDB4MDAyMywKICAgICAgICBr UGVyY2VudFNpZ24gPSAweDAwMjUsCiAgICAgICAga0FtcGVyc2FuZCA9IDB4MDAyNiwKICAgICAg ICBrQXBvc3Ryb3BoZSA9IDB4MDAyNywKICAgICAgICBrTGVmdFBhcmVudGhlc2lzID0gMHgwMDI4 LAogICAgICAgIGtSaWdodFBhcmVudGhlc2lzID0gMHgwMDI5LAogICAgICAgIGtBc3RlcmlzayA9 IDB4MDAyQSwKICAgICAgICBrQ29tbWEgPSAweDAwMkMsCiAgICAgICAga0h5cGhlbk1pbnVzID0g MHgwMDJELAogICAgICAgIGtGdWxsU3RvcCA9IDB4MDAyRSwKICAgICAgICBrU29saWR1cyA9IDB4 MDAyRiwKICAgICAgICBrQ29sb24gPSAweDAwM0EsCiAgICAgICAga1NlbWljb2xvbiA9IDB4MDAz QiwKICAgICAgICBrUXVlc3Rpb25NYXJrID0gMHgwMDNGLAogICAgICAgIGtDb21tZXJjaWFsQXQg PSAweDAwNDAsCiAgICAgICAga0xlZnRTcXVhcmVCcmFja2V0ID0gMHgwMDVCLAogICAgICAgIGtS ZXZlcnNlU29saWR1cyA9IDB4MDA1QywKICAgICAgICBrUmlnaHRTcXVhcmVCcmFja2V0ID0gMHgw MDVELAogICAgICAgIGtMb3dMaW5lID0gMHgwMDVGLAogICAgICAgIGtMZWZ0Q3VybHlCcmFja2V0 ID0gMHgwMDdCLAogICAgICAgIGtSaWdodEN1cmx5QnJhY2tldCA9IDB4MDA3RCwKICAgICAgICBr SW52ZXJ0ZWRFeGNsYW1hdGlvbk1hcmsgPSAweDAwQTEsCiAgICAgICAga0xlZnRQb2ludGluZ0Rv dWJsZUFuZ2xlUXVvdGF0aW9uTWFyayA9IDB4MDBBQiwKICAgICAgICBrU29mdEh5cGhlbiA9IDB4 MDBBRCwKICAgICAgICBrTWlkZGxlRG90ID0gMHgwMEI3LAogICAgICAgIGtSaWdodFBvaW50aW5n RG91YmxlQW5nbGVRdW90YXRpb25NYXJrID0gMHgwMEJCLAogICAgICAgIGtJbnZlcnRlZFF1ZXN0 aW9uTWFyayA9IDB4MDBCRiwKICAgICAgICBrR3JlZWtRdWVzdGlvbk1hcmsgPSAweDAzN0UsCiAg ICAgICAga0dyZWVrQW5vVGVsZWlhID0gMHgwMzg3LAogICAgICAgIGtBcm1lbmlhbkFwb3N0cm9w aGUgPSAweDA1NUEsCiAgICAgICAga0FybWVuaWFuRW1waGFzaXNNYXJrID0gMHgwNTVCLAogICAg ICAgIGtBcm1lbmlhbkV4Y2xhbWF0aW9uTWFyayA9IDB4MDU1QywKICAgICAgICBrQXJtZW5pYW5D b21tYSA9IDB4MDU1RCwKICAgICAgICBrQXJtZW5pYW5RdWVzdGlvbk1hcmsgPSAweDA1NUUsCiAg ICAgICAga0FybWVuaWFuQWJicmV2aWF0aW9uTWFyayA9IDB4MDU1RiwKICAgICAgICBrQXJtZW5p YW5GdWxsU3RvcCA9IDB4MDU4OSwKICAgICAgICBrQXJtZW5pYW5IeXBoZW4gPSAweDA1OEEsCiAg ICAgICAga0hlYnJld1B1bmN0dWF0aW9uTWFxYWYgPSAweDA1QkUsCiAgICAgICAga0hlYnJld1B1 bmN0dWF0aW9uUGFzZXEgPSAweDA1QzAsCiAgICAgICAga0hlYnJld1B1bmN0dWF0aW9uU29mUGFz dXEgPSAweDA1QzMsCiAgICAgICAga0hlYnJld1B1bmN0dWF0aW9uR2VyZXNoID0gMHgwNUYzLAog ICAgICAgIGtIZWJyZXdQdW5jdHVhdGlvbkdlcnNoYXlpbSA9IDB4MDVGNCwKICAgICAgICBrQXJh YmljQ29tbWEgPSAweDA2MEMsCiAgICAgICAga0FyYWJpY1NlbWljb2xvbiA9IDB4MDYxQiwKICAg ICAgICBrQXJhYmljUXVlc3Rpb25NYXJrID0gMHgwNjFGLAogICAgICAgIGtBcmFiaWNQZXJjZW50 U2lnbiA9IDB4MDY2QSwKICAgICAgICBrQXJhYmljRGVjaW1hbFNlcGFyYXRvciA9IDB4MDY2QiwK ICAgICAgICBrQXJhYmljVGhvdXNhbmRzU2VwYXJhdG9yID0gMHgwNjZDLAogICAgICAgIGtBcmFi aWNGaXZlUG9pbnRlZFN0YXIgPSAweDA2NkQsCiAgICAgICAga0FyYWJpY0Z1bGxTdG9wID0gMHgw NkQ0LAogICAgICAgIGtTeXJpYWNFbmRPZlBhcmFncmFwaCA9IDB4MDcwMCwKICAgICAgICBrU3ly aWFjU3VwcmFsaW5lYXJGdWxsU3RvcCA9IDB4MDcwMSwKICAgICAgICBrU3lyaWFjU3VibGluZWFy RnVsbFN0b3AgPSAweDA3MDIsCiAgICAgICAga1N5cmlhY1N1cHJhbGluZWFyQ29sb24gPSAweDA3 MDMsCiAgICAgICAga1N5cmlhY1N1YmxpbmVhckNvbG9uID0gMHgwNzA0LAogICAgICAgIGtTeXJp YWNIb3Jpem9udGFsQ29sb24gPSAweDA3MDUsCiAgICAgICAga1N5cmlhY0NvbG9uU2tld2VkTGVm dCA9IDB4MDcwNiwKICAgICAgICBrU3lyaWFjQ29sb25Ta2V3ZWRSaWdodCA9IDB4MDcwNywKICAg ICAgICBrU3lyaWFjU3VwcmFsaW5lYXJDb2xvblNrZXdlZExlZnQgPSAweDA3MDgsCiAgICAgICAg a1N5cmlhY1N1YmxpbmVhckNvbG9uU2tld2VkUmlnaHQgPSAweDA3MDksCiAgICAgICAga1N5cmlh Y0NvbnRyYWN0aW9uID0gMHgwNzBBLAogICAgICAgIGtTeXJpYWNIYXJrbGVhbk9iZWx1cyA9IDB4 MDcwQiwKICAgICAgICBrU3lyaWFjSGFya2xlYW5NZXRvYmVsdXMgPSAweDA3MEMsCiAgICAgICAg a1N5cmlhY0hhcmtsZWFuQXN0ZXJpc2N1cyA9IDB4MDcwRCwKICAgICAgICBrRGV2YW5hZ2FyaURh bmRhID0gMHgwOTY0LAogICAgICAgIGtEZXZhbmFnYXJpRG91YmxlRGFuZGEgPSAweDA5NjUsCiAg ICAgICAga0RldmFuYWdhcmlBYmJyZXZpYXRpb25TaWduID0gMHgwOTcwLAogICAgICAgIGtTaW5o YWxhUHVuY3R1YXRpb25LdW5kZGFsaXlhID0gMHgwREY0LAogICAgICAgIGtUaGFpQ2hhcmFjdGVy Rm9uZ21hbiA9IDB4MEU0RiwKICAgICAgICBrVGhhaUNoYXJhY3RlckFuZ2toYW5raHUgPSAweDBF NUEsCiAgICAgICAga1RoYWlDaGFyYWN0ZXJLaG9tdXQgPSAweDBFNUIsCiAgICAgICAga1RpYmV0 YW5NYXJrSW5pdGlhbFlpZ01nb01kdW5NYSA9IDB4MEYwNCwKICAgICAgICBrVGliZXRhbk1hcmtD bG9zaW5nWWlnTWdvU2dhYk1hID0gMHgwRjA1LAogICAgICAgIGtUaWJldGFuTWFya0NhcmV0WWln TWdvUGh1clNoYWRNYSA9IDB4MEYwNiwKICAgICAgICBrVGliZXRhbk1hcmtZaWdNZ29Uc2hlZ1No YWRNYSA9IDB4MEYwNywKICAgICAgICBrVGliZXRhbk1hcmtTYnJ1bFNoYWQgPSAweDBGMDgsCiAg ICAgICAga1RpYmV0YW5NYXJrQnNrdXJZaWdNZ28gPSAweDBGMDksCiAgICAgICAga1RpYmV0YW5N YXJrQmthU2hvZ1lpZ01nbyA9IDB4MEYwQSwKICAgICAgICBrVGliZXRhbk1hcmtJbnRlcnN5bGxh YmljVHNoZWcgPSAweDBGMEIsCiAgICAgICAga1RpYmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3Rh ciA9IDB4MEYwQywKICAgICAgICBrVGliZXRhbk1hcmtTaGFkID0gMHgwRjBELAogICAgICAgIGtU aWJldGFuTWFya055aXNTaGFkID0gMHgwRjBFLAogICAgICAgIGtUaWJldGFuTWFya1RzaGVnU2hh ZCA9IDB4MEYwRiwKICAgICAgICBrVGliZXRhbk1hcmtOeWlzVHNoZWdTaGFkID0gMHgwRjEwLAog ICAgICAgIGtUaWJldGFuTWFya1JpbkNoZW5TcHVuZ3NTaGFkID0gMHgwRjExLAogICAgICAgIGtU aWJldGFuTWFya1JneWFHcmFtU2hhZCA9IDB4MEYxMiwKICAgICAgICBrVGliZXRhbk1hcmtHdWdS dGFnc0d5b24gPSAweDBGM0EsCiAgICAgICAga1RpYmV0YW5NYXJrR3VnUnRhZ3NHeWFzID0gMHgw RjNCLAogICAgICAgIGtUaWJldGFuTWFya0FuZ0toYW5nR3lvbiA9IDB4MEYzQywKICAgICAgICBr VGliZXRhbk1hcmtBbmdLaGFuZ0d5YXMgPSAweDBGM0QsCiAgICAgICAga1RpYmV0YW5NYXJrUGFs dXRhID0gMHgwRjg1LAogICAgICAgIGtNeWFubWFyU2lnbkxpdHRsZVNlY3Rpb24gPSAweDEwNEEs CiAgICAgICAga015YW5tYXJTaWduU2VjdGlvbiA9IDB4MTA0QiwKICAgICAgICBrTXlhbm1hclN5 bWJvbExvY2F0aXZlID0gMHgxMDRDLAogICAgICAgIGtNeWFubWFyU3ltYm9sQ29tcGxldGVkID0g MHgxMDRELAogICAgICAgIGtNeWFubWFyU3ltYm9sQWZvcmVtZW50aW9uZWQgPSAweDEwNEUsCiAg ICAgICAga015YW5tYXJTeW1ib2xHZW5pdGl2ZSA9IDB4MTA0RiwKICAgICAgICBrR2VvcmdpYW5Q YXJhZ3JhcGhTZXBhcmF0b3IgPSAweDEwRkIsCiAgICAgICAga0V0aGlvcGljV29yZHNwYWNlID0g MHgxMzYxLAogICAgICAgIGtFdGhpb3BpY0Z1bGxTdG9wID0gMHgxMzYyLAogICAgICAgIGtFdGhp b3BpY0NvbW1hID0gMHgxMzYzLAogICAgICAgIGtFdGhpb3BpY1NlbWljb2xvbiA9IDB4MTM2NCwK ICAgICAgICBrRXRoaW9waWNDb2xvbiA9IDB4MTM2NSwKICAgICAgICBrRXRoaW9waWNQcmVmYWNl Q29sb24gPSAweDEzNjYsCiAgICAgICAga0V0aGlvcGljUXVlc3Rpb25NYXJrID0gMHgxMzY3LAog ICAgICAgIGtFdGhpb3BpY1BhcmFncmFwaFNlcGFyYXRvciA9IDB4MTM2OCwKICAgICAgICBrQ2Fu YWRpYW5TeWxsYWJpY3NDaGlTaWduID0gMHgxNjZELAogICAgICAgIGtDYW5hZGlhblN5bGxhYmlj c0Z1bGxTdG9wID0gMHgxNjZFLAogICAgICAgIGtPZ2hhbUZlYXRoZXJNYXJrID0gMHgxNjlCLAog ICAgICAgIGtPZ2hhbVJldmVyc2VkRmVhdGhlck1hcmsgPSAweDE2OUMsCiAgICAgICAga1J1bmlj U2luZ2xlUHVuY3R1YXRpb24gPSAweDE2RUIsCiAgICAgICAga1J1bmljTXVsdGlwbGVQdW5jdHVh dGlvbiA9IDB4MTZFQywKICAgICAgICBrUnVuaWNDcm9zc1B1bmN0dWF0aW9uID0gMHgxNkVELAog ICAgICAgIGtLaG1lclNpZ25LaGFuID0gMHgxN0Q0LAogICAgICAgIGtLaG1lclNpZ25CYXJpeW9v c2FuID0gMHgxN0Q1LAogICAgICAgIGtLaG1lclNpZ25DYW1udWNQaWlLdXVoID0gMHgxN0Q2LAog ICAgICAgIGtLaG1lclNpZ25MZWtUb28gPSAweDE3RDcsCiAgICAgICAga0tobWVyU2lnbkJleXlh bCA9IDB4MTdEOCwKICAgICAgICBrS2htZXJTaWduUGhuYWVrTXVhbiA9IDB4MTdEOSwKICAgICAg ICBrS2htZXJTaWduS29vbXV1dCA9IDB4MTdEQSwKICAgICAgICBrS2htZXJTaWduQXZha3JhaGFz YW55YSA9IDB4MTdEQywKICAgICAgICBrTW9uZ29saWFuQmlyZ2EgPSAweDE4MDAsCiAgICAgICAg a01vbmdvbGlhbkVsbGlwc2lzID0gMHgxODAxLAogICAgICAgIGtNb25nb2xpYW5Db21tYSA9IDB4 MTgwMiwKICAgICAgICBrTW9uZ29saWFuRnVsbFN0b3AgPSAweDE4MDMsCiAgICAgICAga01vbmdv bGlhbkNvbG9uID0gMHgxODA0LAogICAgICAgIGtNb25nb2xpYW5Gb3VyRG90cyA9IDB4MTgwNSwK ICAgICAgICBrTW9uZ29saWFuVG9kb1NvZnRIeXBoZW4gPSAweDE4MDYsCiAgICAgICAga01vbmdv bGlhblNpYmVTeWxsYWJsZUJvdW5kYXJ5TWFya2VyID0gMHgxODA3LAogICAgICAgIGtNb25nb2xp YW5NYW5jaHVDb21tYSA9IDB4MTgwOCwKICAgICAgICBrTW9uZ29saWFuTWFuY2h1RnVsbFN0b3Ag PSAweDE4MDksCiAgICAgICAga01vbmdvbGlhbk5pcnVndSA9IDB4MTgwQSwKICAgICAgICBrSHlw aGVuID0gMHgyMDEwLAogICAgICAgIGtOb25CcmVha2luZ0h5cGhlbiA9IDB4MjAxMSwKICAgICAg ICBrRmlndXJlRGFzaCA9IDB4MjAxMiwKICAgICAgICBrRW5EYXNoID0gMHgyMDEzLAogICAgICAg IGtFbURhc2ggPSAweDIwMTQsCiAgICAgICAga0hvcml6b250YWxCYXIgPSAweDIwMTUsCiAgICAg ICAga0RvdWJsZVZlcnRpY2FsTGluZSA9IDB4MjAxNiwKICAgICAgICBrRG91YmxlTG93TGluZSA9 IDB4MjAxNywKICAgICAgICBrTGVmdFNpbmdsZVF1b3RhdGlvbk1hcmsgPSAweDIwMTgsCiAgICAg ICAga1JpZ2h0U2luZ2xlUXVvdGF0aW9uTWFyayA9IDB4MjAxOSwKICAgICAgICBrU2luZ2xlTG93 OVF1b3RhdGlvbk1hcmsgPSAweDIwMUEsCiAgICAgICAga1NpbmdsZUhpZ2hSZXZlcnNlZDlRdW90 YXRpb25NYXJrID0gMHgyMDFCLAogICAgICAgIGtMZWZ0RG91YmxlUXVvdGF0aW9uTWFyayA9IDB4 MjAxQywKICAgICAgICBrUmlnaHREb3VibGVRdW90YXRpb25NYXJrID0gMHgyMDFELAogICAgICAg IGtEb3VibGVMb3c5UXVvdGF0aW9uTWFyayA9IDB4MjAxRSwKICAgICAgICBrRG91YmxlSGlnaFJl dmVyc2VkOVF1b3RhdGlvbk1hcmsgPSAweDIwMUYsCiAgICAgICAga0RhZ2dlciA9IDB4MjAyMCwK ICAgICAgICBrRG91YmxlRGFnZ2VyID0gMHgyMDIxLAogICAgICAgIGtCdWxsZXQgPSAweDIwMjIs CiAgICAgICAga1RyaWFuZ3VsYXJCdWxsZXQgPSAweDIwMjMsCiAgICAgICAga09uZURvdExlYWRl ciA9IDB4MjAyNCwKICAgICAgICBrVHdvRG90TGVhZGVyID0gMHgyMDI1LAogICAgICAgIGtIb3Jp em9udGFsRWxsaXBzaXMgPSAweDIwMjYsCiAgICAgICAga0h5cGhlbmF0aW9uUG9pbnQgPSAweDIw MjcsCiAgICAgICAga1Blck1pbGxlU2lnbiA9IDB4MjAzMCwKICAgICAgICBrUGVyVGVuVGhvdXNh bmRTaWduID0gMHgyMDMxLAogICAgICAgIGtQcmltZSA9IDB4MjAzMiwKICAgICAgICBrRG91Ymxl UHJpbWUgPSAweDIwMzMsCiAgICAgICAga1RyaXBsZVByaW1lID0gMHgyMDM0LAogICAgICAgIGtS ZXZlcnNlZFByaW1lID0gMHgyMDM1LAogICAgICAgIGtSZXZlcnNlZERvdWJsZVByaW1lID0gMHgy MDM2LAogICAgICAgIGtSZXZlcnNlZFRyaXBsZVByaW1lID0gMHgyMDM3LAogICAgICAgIGtDYXJl dCA9IDB4MjAzOCwKICAgICAgICBrU2luZ2xlTGVmdFBvaW50aW5nQW5nbGVRdW90YXRpb25NYXJr ID0gMHgyMDM5LAogICAgICAgIGtTaW5nbGVSaWdodFBvaW50aW5nQW5nbGVRdW90YXRpb25NYXJr ID0gMHgyMDNBLAogICAgICAgIGtSZWZlcmVuY2VNYXJrID0gMHgyMDNCLAogICAgICAgIGtEb3Vi bGVFeGNsYW1hdGlvbk1hcmsgPSAweDIwM0MsCiAgICAgICAga0ludGVycm9iYW5nID0gMHgyMDNE LAogICAgICAgIGtPdmVybGluZSA9IDB4MjAzRSwKICAgICAgICBrVW5kZXJ0aWUgPSAweDIwM0Ys CiAgICAgICAga0NoYXJhY3RlclRpZSA9IDB4MjA0MCwKICAgICAgICBrQ2FyZXRJbnNlcnRpb25Q b2ludCA9IDB4MjA0MSwKICAgICAgICBrQXN0ZXJpc20gPSAweDIwNDIsCiAgICAgICAga0h5cGhl bkJ1bGxldCA9IDB4MjA0MywKICAgICAgICBrTGVmdFNxdWFyZUJyYWNrZXRXaXRoUXVpbGwgPSAw eDIwNDUsCiAgICAgICAga1JpZ2h0U3F1YXJlQnJhY2tldFdpdGhRdWlsbCA9IDB4MjA0NiwKICAg ICAgICBrUXVlc3Rpb25FeGNsYW1hdGlvbk1hcmsgPSAweDIwNDgsCiAgICAgICAga0V4Y2xhbWF0 aW9uUXVlc3Rpb25NYXJrID0gMHgyMDQ5LAogICAgICAgIGtUaXJvbmlhblNpZ25FdCA9IDB4MjA0 QSwKICAgICAgICBrUmV2ZXJzZWRQaWxjcm93U2lnbiA9IDB4MjA0QiwKICAgICAgICBrQmxhY2tM ZWZ0d2FyZHNCdWxsZXQgPSAweDIwNEMsCiAgICAgICAga0JsYWNrUmlnaHR3YXJkc0J1bGxldCA9 IDB4MjA0RCwKICAgICAgICBrU3VwZXJzY3JpcHRMZWZ0UGFyZW50aGVzaXMgPSAweDIwN0QsCiAg ICAgICAga1N1cGVyc2NyaXB0UmlnaHRQYXJlbnRoZXNpcyA9IDB4MjA3RSwKICAgICAgICBrU3Vi c2NyaXB0TGVmdFBhcmVudGhlc2lzID0gMHgyMDhELAogICAgICAgIGtTdWJzY3JpcHRSaWdodFBh cmVudGhlc2lzID0gMHgyMDhFLAogICAgICAgIGtMZWZ0UG9pbnRpbmdBbmdsZUJyYWNrZXQgPSAw eDIzMjksCiAgICAgICAga1JpZ2h0UG9pbnRpbmdBbmdsZUJyYWNrZXQgPSAweDIzMkEsCiAgICAg ICAga0lkZW9ncmFwaGljQ29tbWEgPSAweDMwMDEsCiAgICAgICAga0lkZW9ncmFwaGljRnVsbFN0 b3AgPSAweDMwMDIsCiAgICAgICAga0RpdHRvTWFyayA9IDB4MzAwMywKICAgICAgICBrTGVmdEFu Z2xlQnJhY2tldCA9IDB4MzAwOCwKICAgICAgICBrUmlnaHRBbmdsZUJyYWNrZXQgPSAweDMwMDks CiAgICAgICAga0xlZnREb3VibGVBbmdsZUJyYWNrZXQgPSAweDMwMEEsCiAgICAgICAga1JpZ2h0 RG91YmxlQW5nbGVCcmFja2V0ID0gMHgzMDBCLAogICAgICAgIGtMZWZ0Q29ybmVyQnJhY2tldCA9 IDB4MzAwQywKICAgICAgICBrUmlnaHRDb3JuZXJCcmFja2V0ID0gMHgzMDBELAogICAgICAgIGtM ZWZ0V2hpdGVDb3JuZXJCcmFja2V0ID0gMHgzMDBFLAogICAgICAgIGtSaWdodFdoaXRlQ29ybmVy QnJhY2tldCA9IDB4MzAwRiwKICAgICAgICBrTGVmdEJsYWNrTGVudGljdWxhckJyYWNrZXQgPSAw eDMwMTAsCiAgICAgICAga1JpZ2h0QmxhY2tMZW50aWN1bGFyQnJhY2tldCA9IDB4MzAxMSwKICAg ICAgICBrTGVmdFRvcnRvaXNlU2hlbGxCcmFja2V0ID0gMHgzMDE0LAogICAgICAgIGtSaWdodFRv cnRvaXNlU2hlbGxCcmFja2V0ID0gMHgzMDE1LAogICAgICAgIGtMZWZ0V2hpdGVMZW50aWN1bGFy QnJhY2tldCA9IDB4MzAxNiwKICAgICAgICBrUmlnaHRXaGl0ZUxlbnRpY3VsYXJCcmFja2V0ID0g MHgzMDE3LAogICAgICAgIGtMZWZ0V2hpdGVUb3J0b2lzZVNoZWxsQnJhY2tldCA9IDB4MzAxOCwK ICAgICAgICBrUmlnaHRXaGl0ZVRvcnRvaXNlU2hlbGxCcmFja2V0ID0gMHgzMDE5LAogICAgICAg IGtMZWZ0V2hpdGVTcXVhcmVCcmFja2V0ID0gMHgzMDFBLAogICAgICAgIGtSaWdodFdoaXRlU3F1 YXJlQnJhY2tldCA9IDB4MzAxQiwKICAgICAgICBrV2F2ZURhc2ggPSAweDMwMUMsCiAgICAgICAg a1JldmVyc2VkRG91YmxlUHJpbWVRdW90YXRpb25NYXJrID0gMHgzMDFELAogICAgICAgIGtEb3Vi bGVQcmltZVF1b3RhdGlvbk1hcmsgPSAweDMwMUUsCiAgICAgICAga0xvd0RvdWJsZVByaW1lUXVv dGF0aW9uTWFyayA9IDB4MzAxRiwKICAgICAgICBrV2F2eURhc2ggPSAweDMwMzAsCiAgICAgICAg a0thdGFrYW5hTWlkZGxlRG90ID0gMHgzMEZCLAogICAgICAgIGtPcm5hdGVMZWZ0UGFyZW50aGVz aXMgPSAweEZEM0UsCiAgICAgICAga09ybmF0ZVJpZ2h0UGFyZW50aGVzaXMgPSAweEZEM0YsCiAg ICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFR3b0RvdExlYWRlciA9IDB4RkUzMCwK ICAgICAgICBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsRW1EYXNoID0gMHhGRTMxLAogICAg ICAgIGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxFbkRhc2ggPSAweEZFMzIsCiAgICAgICAg a1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbExvd0xpbmUgPSAweEZFMzMsCiAgICAgICAga1By ZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFdhdnlMb3dMaW5lID0gMHhGRTM0LAogICAgICAgIGtQ cmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0UGFyZW50aGVzaXMgPSAweEZFMzUsCiAgICAg ICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFJpZ2h0UGFyZW50aGVzaXMgPSAweEZFMzYs CiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbExlZnRDdXJseUJyYWNrZXQgPSAw eEZFMzcsCiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFJpZ2h0Q3VybHlCcmFj a2V0ID0gMHhGRTM4LAogICAgICAgIGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0VG9y dG9pc2VTaGVsbEJyYWNrZXQgPSAweEZFMzksCiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JW ZXJ0aWNhbFJpZ2h0VG9ydG9pc2VTaGVsbEJyYWNrZXQgPSAweEZFM0EsCiAgICAgICAga1ByZXNl bnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbExlZnRCbGFja0xlbnRpY3VsYXJCcmFja2V0ID0gMHhGRTNC LAogICAgICAgIGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxSaWdodEJsYWNrTGVudGljdWxh ckJyYWNrZXQgPSAweEZFM0MsCiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbExl ZnREb3VibGVBbmdsZUJyYWNrZXQgPSAweEZFM0QsCiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1G b3JWZXJ0aWNhbFJpZ2h0RG91YmxlQW5nbGVCcmFja2V0ID0gMHhGRTNFLAogICAgICAgIGtQcmVz ZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0QW5nbGVCcmFja2V0ID0gMHhGRTNGLAogICAgICAg IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxSaWdodEFuZ2xlQnJhY2tldCA9IDB4RkU0MCwK ICAgICAgICBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsTGVmdENvcm5lckJyYWNrZXQgPSAw eEZFNDEsCiAgICAgICAga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFJpZ2h0Q29ybmVyQnJh Y2tldCA9IDB4RkU0MiwKICAgICAgICBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsTGVmdFdo aXRlQ29ybmVyQnJhY2tldCA9IDB4RkU0MywKICAgICAgICBrUHJlc2VudGF0aW9uRm9ybUZvclZl cnRpY2FsUmlnaHRXaGl0ZUNvcm5lckJyYWNrZXQgPSAweEZFNDQsCiAgICAgICAga0Rhc2hlZE92 ZXJsaW5lID0gMHhGRTQ5LAogICAgICAgIGtDZW50cmVsaW5lT3ZlcmxpbmUgPSAweEZFNEEsCiAg ICAgICAga1dhdnlPdmVybGluZSA9IDB4RkU0QiwKICAgICAgICBrRG91YmxlV2F2eU92ZXJsaW5l ID0gMHhGRTRDLAogICAgICAgIGtEYXNoZWRMb3dMaW5lID0gMHhGRTRELAogICAgICAgIGtDZW50 cmVsaW5lTG93TGluZSA9IDB4RkU0RSwKICAgICAgICBrV2F2eUxvd0xpbmUgPSAweEZFNEYsCiAg ICAgICAga1NtYWxsQ29tbWEgPSAweEZFNTAsCiAgICAgICAga1NtYWxsSWRlb2dyYXBoaWNDb21t YSA9IDB4RkU1MSwKICAgICAgICBrU21hbGxGdWxsU3RvcCA9IDB4RkU1MiwKICAgICAgICBrU21h bGxTZW1pY29sb24gPSAweEZFNTQsCiAgICAgICAga1NtYWxsQ29sb24gPSAweEZFNTUsCiAgICAg ICAga1NtYWxsUXVlc3Rpb25NYXJrID0gMHhGRTU2LAogICAgICAgIGtTbWFsbEV4Y2xhbWF0aW9u TWFyayA9IDB4RkU1NywKICAgICAgICBrU21hbGxFbURhc2ggPSAweEZFNTgsCiAgICAgICAga1Nt YWxsTGVmdFBhcmVudGhlc2lzID0gMHhGRTU5LAogICAgICAgIGtTbWFsbFJpZ2h0UGFyZW50aGVz aXMgPSAweEZFNUEsCiAgICAgICAga1NtYWxsTGVmdEN1cmx5QnJhY2tldCA9IDB4RkU1QiwKICAg ICAgICBrU21hbGxSaWdodEN1cmx5QnJhY2tldCA9IDB4RkU1QywKICAgICAgICBrU21hbGxMZWZ0 VG9ydG9pc2VTaGVsbEJyYWNrZXQgPSAweEZFNUQsCiAgICAgICAga1NtYWxsUmlnaHRUb3J0b2lz ZVNoZWxsQnJhY2tldCA9IDB4RkU1RSwKICAgICAgICBrU21hbGxOdW1iZXJTaWduID0gMHhGRTVG LAogICAgICAgIGtTbWFsbEFtcGVyc2FuZCA9IDB4RkU2MCwKICAgICAgICBrU21hbGxBc3Rlcmlz ayA9IDB4RkU2MSwKICAgICAgICBrU21hbGxIeXBoZW5NaW51cyA9IDB4RkU2MywKICAgICAgICBr U21hbGxSZXZlcnNlU29saWR1cyA9IDB4RkU2OCwKICAgICAgICBrU21hbGxQZXJjZW50U2lnbiA9 IDB4RkU2QSwKICAgICAgICBrU21hbGxDb21tZXJjaWFsQXQgPSAweEZFNkIsCgoKICAgICAgICAg CiAgICAgICAgIAogICAgICAgIGtMaW5lU2VwYXJhdG9yID0gMHgyMDI4LAogICAgICAgIGtQYXJh Z3JhcGhTZXBhcmF0b3IgPSAweDIwMjksCiAgICAgICAga0luaGliaXRTeW1tZXRyaWNTd2FwcGlu ZyA9IDB4MjA2QSwKICAgICAgICBrQWN0aXZhdGVTeW1tZXRyaWNTd2FwcGluZyA9IDB4MjA2QiwK ICAgICAgICBrRG91YmxlSGlnaFJldmVyc2VkUXVvdGF0aW9uTWFyayA9IDB4MjAxRiwKICAgICAg ICBrRG91YmxlTG93UXVvdGF0aW9uTWFyayA9IDB4MjAxRSwKICAgICAgICBrRnJhY3Rpb25TbGFz aCA9IDB4MjA0NCwKICAgICAgICBrTGVmdFRvUmlnaHRNYXJrID0gMHgyMDBFLAogICAgICAgIGtS aWdodFRvTGVmdE1hcmsgPSAweDIwMEYsCiAgICAgICAga1NpbmdsZUhpZ2hSZXZlcnNlZFF1b3Rh dGlvbk1hcmsgPSAweDIwMUIsCiAgICAgICAga1NpbmdsZUxvd1F1b3RhdGlvbk1hcmsgPSAweDIw MUEsCiAgICAgICAga1plcm9XaWR0aEpvaW5lciA9IDB4MjAwRCwKICAgICAgICBrWmVyb1dpZHRo Tm9uSm9pbmVyID0gMHgyMDBDLAogICAgICAgIGtQb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmcgPSAw eDIwMkMsCgoKICAgICAgICAgCgogICAgICAgIGtBcG9zdHJvcGhlUXVvdGUgPSBrQXBvc3Ryb3Bo ZSwKICAgICAgICBrT3BlbmluZ1BhcmVudGhlc2lzID0ga0xlZnRQYXJlbnRoZXNpcywKICAgICAg ICBrQ2xvc2luZ1BhcmVudGhlc2lzID0ga1JpZ2h0UGFyZW50aGVzaXMsCiAgICAgICAga1Blcmlv ZCA9IGtGdWxsU3RvcCwKICAgICAgICBrU2xhc2ggPSBrU29saWR1cywKICAgICAgICBrT3Blbmlu Z1NxdWFyZUJyYWNrZXQgPSBrTGVmdFNxdWFyZUJyYWNrZXQsCiAgICAgICAga0JhY2tzbGFzaCA9 IGtSZXZlcnNlU29saWR1cywKICAgICAgICBrQ2xvc2luZ1NxdWFyZUJyYWNrZXQgPSBrUmlnaHRT cXVhcmVCcmFja2V0LAogICAgICAgIGtTcGFjaW5nVW5kZXJzY29yZSA9IGtMb3dMaW5lLAogICAg ICAgIGtPcGVuaW5nQ3VybHlCcmFja2V0ID0ga0xlZnRDdXJseUJyYWNrZXQsCiAgICAgICAga0Ns b3NpbmdDdXJseUJyYWNrZXQgPSBrUmlnaHRDdXJseUJyYWNrZXQsCiAgICAgICAga0xlZnRQb2lu dGluZ0d1aWxsZW1ldCA9IGtMZWZ0UG9pbnRpbmdEb3VibGVBbmdsZVF1b3RhdGlvbk1hcmssCiAg ICAgICAga1JpZ2h0UG9pbnRpbmdHdWlsbGVtZXQgPSBrUmlnaHRQb2ludGluZ0RvdWJsZUFuZ2xl UXVvdGF0aW9uTWFyaywKICAgICAgICBrQXJtZW5pYW5Nb2RpZmllckxldHRlclJpZ2h0SGFsZlJp bmcgPSBrQXJtZW5pYW5BcG9zdHJvcGhlLAogICAgICAgIGtBcm1lbmlhblBlcmlvZCA9IGtBcm1l bmlhbkZ1bGxTdG9wLAogICAgICAgIGtIZWJyZXdQb2ludFBhc2VxID0ga0hlYnJld1B1bmN0dWF0 aW9uUGFzZXEsCiAgICAgICAga0FyYWJpY1BlcmlvZCA9IGtBcmFiaWNGdWxsU3RvcCwKICAgICAg ICBrVGhhaUZvbmdtYW4gPSBrVGhhaUNoYXJhY3RlckZvbmdtYW4sCiAgICAgICAga1RoYWlBbmdr aGFua2h1ID0ga1RoYWlDaGFyYWN0ZXJBbmdraGFua2h1LAogICAgICAgIGtUaGFpS2hvbXV0ID0g a1RoYWlDaGFyYWN0ZXJLaG9tdXQsCiAgICAgICAga1RpYmV0YW5TaW5nbGVPcm5hbWVudCA9IGtU aWJldGFuTWFya0luaXRpYWxZaWdNZ29NZHVuTWEsCiAgICAgICAga1RpYmV0YW5SZ3lhbnNoYWQg PSBrVGliZXRhbk1hcmtTYnJ1bFNoYWQsCiAgICAgICAga1RpYmV0YW5Uc2VnID0ga1RpYmV0YW5N YXJrSW50ZXJzeWxsYWJpY1RzaGVnLAogICAgICAgIGtUaWJldGFuU2hhZCA9IGtUaWJldGFuTWFy a1NoYWQsCiAgICAgICAga1RpYmV0YW5Eb3VibGVTaGFkID0ga1RpYmV0YW5NYXJrTnlpc1NoYWQs CiAgICAgICAga1RpYmV0YW5SaW5jaGFucGh1bmdzaGFkID0ga1RpYmV0YW5NYXJrUmluQ2hlblNw dW5nc1NoYWQsCiAgICAgICAga1RpYmV0YW5MZWZ0QnJhY2UgPSBrVGliZXRhbk1hcmtBbmdLaGFu Z0d5b24sCiAgICAgICAga1RpYmV0YW5SaWdodEJyYWNlID0ga1RpYmV0YW5NYXJrQW5nS2hhbmdH eWFzLAogICAgICAgIGtUaWJldGFuQ2h1Y2hlbnlpZ2UgPSBrVGliZXRhbk1hcmtQYWx1dGEsCiAg ICAgICAga1F1b3RhdGlvbkRhc2ggPSBrSG9yaXpvbnRhbEJhciwKICAgICAgICBrRG91YmxlVmVy dGljYWxCYXIgPSBrRG91YmxlVmVydGljYWxMaW5lLAogICAgICAgIGtTcGFjaW5nRG91YmxlVW5k ZXJzY29yZSA9IGtEb3VibGVMb3dMaW5lLAogICAgICAgIGtTaW5nbGVUdXJuZWRDb21tYVF1b3Rh dGlvbk1hcmsgPSBrTGVmdFNpbmdsZVF1b3RhdGlvbk1hcmssCiAgICAgICAga1NpbmdsZUNvbW1h UXVvdGF0aW9uTWFyayA9IGtSaWdodFNpbmdsZVF1b3RhdGlvbk1hcmssCiAgICAgICAga0xvd1Np bmdsZUNvbW1hUXVvdGF0aW9uTWFyayA9IGtTaW5nbGVMb3c5UXVvdGF0aW9uTWFyaywKICAgICAg ICBrU2luZ2xlUmV2ZXJzZWRDb21tYVF1b3RhdGlvbk1hcmsgPSBrU2luZ2xlSGlnaFJldmVyc2Vk OVF1b3RhdGlvbk1hcmssCiAgICAgICAga0RvdWJsZVR1cm5lZENvbW1hUXVvdGF0aW9uTWFyayA9 IGtMZWZ0RG91YmxlUXVvdGF0aW9uTWFyaywKICAgICAgICBrRG91YmxlQ29tbWFRdW90YXRpb25N YXJrID0ga1JpZ2h0RG91YmxlUXVvdGF0aW9uTWFyaywKICAgICAgICBrTG93RG91YmxlQ29tbWFR dW90YXRpb25NYXJrID0ga0RvdWJsZUxvdzlRdW90YXRpb25NYXJrLAogICAgICAgIGtEb3VibGVS ZXZlcnNlZENvbW1hUXVvdGF0aW9uTWFyayA9IGtEb3VibGVIaWdoUmV2ZXJzZWQ5UXVvdGF0aW9u TWFyaywKICAgICAgICBrTGVmdFBvaW50aW5nU2luZ2xlR3VpbGxlbWV0ID0ga1NpbmdsZUxlZnRQ b2ludGluZ0FuZ2xlUXVvdGF0aW9uTWFyaywKICAgICAgICBrUmlnaHRQb2ludGluZ1NpbmdsZUd1 aWxsZW1ldCA9IGtTaW5nbGVSaWdodFBvaW50aW5nQW5nbGVRdW90YXRpb25NYXJrLAogICAgICAg IGtTcGFjaW5nT3ZlcnNjb3JlID0ga092ZXJsaW5lLAogICAgICAgIGtTdXBlcnNjcmlwdE9wZW5p bmdQYXJlbnRoZXNpcyA9IGtTdXBlcnNjcmlwdExlZnRQYXJlbnRoZXNpcywKICAgICAgICBrU3Vw ZXJzY3JpcHRDbG9zaW5nUGFyZW50aGVzaXMgPSBrU3VwZXJzY3JpcHRSaWdodFBhcmVudGhlc2lz LAogICAgICAgIGtTdWJzY3JpcHRPcGVuaW5nUGFyZW50aGVzaXMgPSBrU3Vic2NyaXB0TGVmdFBh cmVudGhlc2lzLAogICAgICAgIGtTdWJzY3JpcHRDbG9zaW5nUGFyZW50aGVzaXMgPSBrU3Vic2Ny aXB0UmlnaHRQYXJlbnRoZXNpcywKICAgICAgICBrQnJhID0ga0xlZnRQb2ludGluZ0FuZ2xlQnJh Y2tldCwKICAgICAgICBrS2V0ID0ga1JpZ2h0UG9pbnRpbmdBbmdsZUJyYWNrZXQsCiAgICAgICAg a0lkZW9ncmFwaGljUGVyaW9kID0ga0lkZW9ncmFwaGljRnVsbFN0b3AsCiAgICAgICAga09wZW5p bmdBbmdsZUJyYWNrZXQgPSBrTGVmdEFuZ2xlQnJhY2tldCwKICAgICAgICBrQ2xvc2luZ0FuZ2xl QnJhY2tldCA9IGtSaWdodEFuZ2xlQnJhY2tldCwKICAgICAgICBrT3BlbmluZ0RvdWJsZUFuZ2xl QnJhY2tldCA9IGtMZWZ0RG91YmxlQW5nbGVCcmFja2V0LAogICAgICAgIGtDbG9zaW5nRG91Ymxl QW5nbGVCcmFja2V0ID0ga1JpZ2h0RG91YmxlQW5nbGVCcmFja2V0LAogICAgICAgIGtPcGVuaW5n Q29ybmVyQnJhY2tldCA9IGtMZWZ0Q29ybmVyQnJhY2tldCwKICAgICAgICBrQ2xvc2luZ0Nvcm5l ckJyYWNrZXQgPSBrUmlnaHRDb3JuZXJCcmFja2V0LAogICAgICAgIGtPcGVuaW5nV2hpdGVDb3Ju ZXJCcmFja2V0ID0ga0xlZnRXaGl0ZUNvcm5lckJyYWNrZXQsCiAgICAgICAga0Nsb3NpbmdXaGl0 ZUNvcm5lckJyYWNrZXQgPSBrUmlnaHRXaGl0ZUNvcm5lckJyYWNrZXQsCiAgICAgICAga09wZW5p bmdCbGFja0xlbnRpY3VsYXJCcmFja2V0ID0ga0xlZnRCbGFja0xlbnRpY3VsYXJCcmFja2V0LAog ICAgICAgIGtDbG9zaW5nQmxhY2tMZW50aWN1bGFyQnJhY2tldCA9IGtSaWdodEJsYWNrTGVudGlj dWxhckJyYWNrZXQsCiAgICAgICAga09wZW5pbmdUb3J0b2lzZVNoZWxsQnJhY2tldCA9IGtMZWZ0 VG9ydG9pc2VTaGVsbEJyYWNrZXQsCiAgICAgICAga0Nsb3NpbmdUb3J0b2lzZVNoZWxsQnJhY2tl dCA9IGtSaWdodFRvcnRvaXNlU2hlbGxCcmFja2V0LAogICAgICAgIGtPcGVuaW5nV2hpdGVMZW50 aWN1bGFyQnJhY2tldCA9IGtMZWZ0V2hpdGVMZW50aWN1bGFyQnJhY2tldCwKICAgICAgICBrQ2xv c2luZ1doaXRlTGVudGljdWxhckJyYWNrZXQgPSBrUmlnaHRXaGl0ZUxlbnRpY3VsYXJCcmFja2V0 LAogICAgICAgIGtPcGVuaW5nV2hpdGVUb3J0b2lzZVNoZWxsQnJhY2tldCA9IGtMZWZ0V2hpdGVU b3J0b2lzZVNoZWxsQnJhY2tldCwKICAgICAgICBrQ2xvc2luZ1doaXRlVG9ydG9pc2VTaGVsbEJy YWNrZXQgPSBrUmlnaHRXaGl0ZVRvcnRvaXNlU2hlbGxCcmFja2V0LAogICAgICAgIGtPcGVuaW5n V2hpdGVTcXVhcmVCcmFja2V0ID0ga0xlZnRXaGl0ZVNxdWFyZUJyYWNrZXQsCiAgICAgICAga0Ns b3NpbmdXaGl0ZVNxdWFyZUJyYWNrZXQgPSBrUmlnaHRXaGl0ZVNxdWFyZUJyYWNrZXQsCiAgICAg ICAga0dseXBoRm9yVmVydGljYWxUd29Eb3RMZWFkZXIgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZl cnRpY2FsVHdvRG90TGVhZGVyLAogICAgICAgIGtHbHlwaEZvclZlcnRpY2FsRW1EYXNoID0ga1By ZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbEVtRGFzaCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNh bEVuRGFzaCA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxFbkRhc2gsCiAgICAgICAga0ds eXBoRm9yVmVydGljYWxTcGFjaW5nVW5kZXJzY29yZSA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVy dGljYWxMb3dMaW5lLAogICAgICAgIGtHbHlwaEZvclZlcnRpY2FsU3BhY2luZ1dhdnlVbmRlcnNj b3JlID0ga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbFdhdnlMb3dMaW5lLAogICAgICAgIGtH bHlwaEZvclZlcnRpY2FsT3BlbmluZ1BhcmVudGhlc2lzID0ga1ByZXNlbnRhdGlvbkZvcm1Gb3JW ZXJ0aWNhbExlZnRQYXJlbnRoZXNpcywKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbENsb3NpbmdQ YXJlbnRoZXNpcyA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxSaWdodFBhcmVudGhlc2lz LAogICAgICAgIGtHbHlwaEZvclZlcnRpY2FsT3BlbmluZ0N1cmx5QnJhY2tldCA9IGtQcmVzZW50 YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0Q3VybHlCcmFja2V0LAogICAgICAgIGtHbHlwaEZvclZl cnRpY2FsQ2xvc2luZ0N1cmx5QnJhY2tldCA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxS aWdodEN1cmx5QnJhY2tldCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbE9wZW5pbmdUb3J0b2lz ZVNoZWxsQnJhY2tldCA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0VG9ydG9pc2VT aGVsbEJyYWNrZXQsCiAgICAgICAga0dseXBoRm9yVmVydGljYWxDbG9zaW5nVG9ydG9pc2VTaGVs bEJyYWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsUmlnaHRUb3J0b2lzZVNoZWxs QnJhY2tldCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbE9wZW5pbmdCbGFja0xlbnRpY3VsYXJC cmFja2V0ID0ga1ByZXNlbnRhdGlvbkZvcm1Gb3JWZXJ0aWNhbExlZnRCbGFja0xlbnRpY3VsYXJC cmFja2V0LAogICAgICAgIGtHbHlwaEZvclZlcnRpY2FsQ2xvc2luZ0JsYWNrTGVudGljdWxhckJy YWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsUmlnaHRCbGFja0xlbnRpY3VsYXJC cmFja2V0LAogICAgICAgIGtHbHlwaEZvclZlcnRpY2FsT3BlbmluZ0RvdWJsZUFuZ2xlQnJhY2tl dCA9IGtQcmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0RG91YmxlQW5nbGVCcmFja2V0LAog ICAgICAgIGtHbHlwaEZvclZlcnRpY2FsQ2xvc2luZ0RvdWJsZUFuZ2xlQnJhY2tldCA9IGtQcmVz ZW50YXRpb25Gb3JtRm9yVmVydGljYWxSaWdodERvdWJsZUFuZ2xlQnJhY2tldCwKICAgICAgICBr R2x5cGhGb3JWZXJ0aWNhbE9wZW5pbmdBbmdsZUJyYWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZv clZlcnRpY2FsTGVmdEFuZ2xlQnJhY2tldCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbENsb3Np bmdBbmdsZUJyYWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsUmlnaHRBbmdsZUJy YWNrZXQsCiAgICAgICAga0dseXBoRm9yVmVydGljYWxPcGVuaW5nQ29ybmVyQnJhY2tldCA9IGtQ cmVzZW50YXRpb25Gb3JtRm9yVmVydGljYWxMZWZ0Q29ybmVyQnJhY2tldCwKICAgICAgICBrR2x5 cGhGb3JWZXJ0aWNhbENsb3NpbmdDb3JuZXJCcmFja2V0ID0ga1ByZXNlbnRhdGlvbkZvcm1Gb3JW ZXJ0aWNhbFJpZ2h0Q29ybmVyQnJhY2tldCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbE9wZW5p bmdXaGl0ZUNvcm5lckJyYWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsTGVmdFdo aXRlQ29ybmVyQnJhY2tldCwKICAgICAgICBrR2x5cGhGb3JWZXJ0aWNhbENsb3NpbmdXaGl0ZUNv cm5lckJyYWNrZXQgPSBrUHJlc2VudGF0aW9uRm9ybUZvclZlcnRpY2FsUmlnaHRXaGl0ZUNvcm5l ckJyYWNrZXQsCiAgICAgICAga1NwYWNpbmdEYXNoZWRPdmVyc2NvcmUgPSBrRGFzaGVkT3Zlcmxp bmUsCiAgICAgICAga1NwYWNpbmdDZW50ZXJsaW5lT3ZlcnNjb3JlID0ga0NlbnRyZWxpbmVPdmVy bGluZSwKICAgICAgICBrU3BhY2luZ1dhdnlPdmVyc2NvcmUgPSBrV2F2eU92ZXJsaW5lLAogICAg ICAgIGtTcGFjaW5nRG91YmxlV2F2eU92ZXJzY29yZSA9IGtEb3VibGVXYXZ5T3ZlcmxpbmUsCiAg ICAgICAga1NwYWNpbmdEYXNoZWRVbmRlcnNjb3JlID0ga0Rhc2hlZExvd0xpbmUsCiAgICAgICAg a1NwYWNpbmdDZW50ZXJsaW5lVW5kZXJzY29yZSA9IGtDZW50cmVsaW5lTG93TGluZSwKICAgICAg ICBrU3BhY2luZ1dhdnlVbmRlcnNjb3JlID0ga1dhdnlMb3dMaW5lLAogICAgICAgIGtTbWFsbFBl cmlvZCA9IGtTbWFsbEZ1bGxTdG9wLAogICAgICAgIGtTbWFsbE9wZW5pbmdQYXJlbnRoZXNpcyA9 IGtTbWFsbExlZnRQYXJlbnRoZXNpcywKICAgICAgICBrU21hbGxDbG9zaW5nUGFyZW50aGVzaXMg PSBrU21hbGxSaWdodFBhcmVudGhlc2lzLAogICAgICAgIGtTbWFsbE9wZW5pbmdDdXJseUJyYWNr ZXQgPSBrU21hbGxMZWZ0Q3VybHlCcmFja2V0LAogICAgICAgIGtTbWFsbENsb3NpbmdDdXJseUJy YWNrZXQgPSBrU21hbGxSaWdodEN1cmx5QnJhY2tldCwKICAgICAgICBrU21hbGxPcGVuaW5nVG9y dG9pc2VTaGVsbEJyYWNrZXQgPSBrU21hbGxMZWZ0VG9ydG9pc2VTaGVsbEJyYWNrZXQsCiAgICAg ICAga1NtYWxsQ2xvc2luZ1RvcnRvaXNlU2hlbGxCcmFja2V0ID0ga1NtYWxsUmlnaHRUb3J0b2lz ZVNoZWxsQnJhY2tldCwKICAgICAgICBrU21hbGxCYWNrc2xhc2ggPSBrU21hbGxSZXZlcnNlU29s aWR1cwogICAgfTsKfTsKCiAKIAogCmNsYXNzIFVXaGl0ZVNwYWNlIHsKcHVibGljOgogICAgZW51 bSBFV2hpdGVTcGFjZU5hbWVzIHsKICAgICAgICBrRm9ybUZlZWQgPSAweDAwMEMsCiAgICAgICAg a1NwYWNlID0gMHgwMDIwLAogICAgICAgIGtPZ2hhbVNwYWNlTWFyayA9IDB4MTY4MCwKICAgICAg ICBrRW5RdWFkID0gMHgyMDAwLAogICAgICAgIGtFbVF1YWQgPSAweDIwMDEsCiAgICAgICAga0Vu U3BhY2UgPSAweDIwMDIsCiAgICAgICAga0VtU3BhY2UgPSAweDIwMDMsCiAgICAgICAga1RocmVl UGVyRW1TcGFjZSA9IDB4MjAwNCwKICAgICAgICBrRm91clBlckVtU3BhY2UgPSAweDIwMDUsCiAg ICAgICAga1NpeFBlckVtU3BhY2UgPSAweDIwMDYsCiAgICAgICAga0ZpZ3VyZVNwYWNlID0gMHgy MDA3LAogICAgICAgIGtQdW5jdHVhdGlvblNwYWNlID0gMHgyMDA4LAogICAgICAgIGtUaGluU3Bh Y2UgPSAweDIwMDksCiAgICAgICAga0hhaXJTcGFjZSA9IDB4MjAwQSwKICAgICAgICBrTGluZVNl cGFyYXRvciA9IDB4MjAyOCwKICAgICAgICBrTmFycm93Tm9CcmVha1NwYWNlID0gMHgyMDJGLAog ICAgICAgIGtJZGVvZ3JhcGhpY1NwYWNlID0gMHgzMDAwLAoKCiAgICAgICAgIAogICAgICAgICAK ICAgICAgICBrSG9yaXpvbnRhbFRhYnVsYXRpb24gPSAweDAwMDksCiAgICAgICAga0xpbmVGZWVk ID0gMHgwMDBBLAogICAgICAgIGtOb0JyZWFrU3BhY2UgPSAweDAwQTAsCiAgICAgICAga1BhcmFn cmFwaFNlcGFyYXRvciA9IDB4MjAyOSwKICAgICAgICBrWmVyb1dpZHRoU3BhY2UgPSAweDIwMEIs CiAgICAgICAga1plcm9XaWR0aE5vQnJlYWtTcGFjZSA9IDB4RkVGRiwKICAgICAgICBrTm9uQnJl YWtpbmdTcGFjZSA9IGtOb0JyZWFrU3BhY2UsCiAgICAgICAga0J5dGVPcmRlck1hcmsgPSBrWmVy b1dpZHRoTm9CcmVha1NwYWNlCgogICAgfTsKfTsKCiAKIAogCgpjbGFzcyBVVW5pY29kZVNwZWNp YWwgewpwdWJsaWM6CiAgICBlbnVtIEVVbmljb2RlU3BlY2lhbE5hbWVzIHsKICAgICAgICBrTnVs bCA9IDB4MDAwMCwKICAgICAgICBrWmVyb1dpZHRoTm9CcmVha1NwYWNlID0gMHhGRUZGLAogICAg ICAgIGtCeXRlT3JkZXJNYXJrID0gMHhGRUZGLAogICAgICAgIGtSZXBsYWNlbWVudENoYXJhY3Rl ciA9IDB4RkZGRCwKICAgICAgICBrQ29ycnVwdEJ5dGVPcmRlck1hcmsgPSAweEZGRkUsCiAgICAg ICAga05vdEFVbmljb2RlID0gMHhGRkZGLAogICAgICAgIGtNaXNzaW5nQ2hhciA9IGtOb3RBVW5p Y29kZQogICAgfTsKfTsKCiAKIAogCgpjbGFzcyBVQ29udHJvbENvZGUgewpwdWJsaWM6CiAgICBl bnVtIEVDb250cm9sQ29kZU5hbWVzIHsKICAgICAgICBrTnVsbCA9IDB4MDAwMCwKICAgICAgICBr U3RhcnRPZkhlYWRpbmcgPSAweDAwMDEsCiAgICAgICAga1N0YXJ0T2ZUZXh0ID0gMHgwMDAyLAog ICAgICAgIGtFbmRPZlRleHQgPSAweDAwMDMsCiAgICAgICAga0VuZE9mVHJhbnNtaXNzaW9uID0g MHgwMDA0LAogICAgICAgIGtFbnF1aXJ5ID0gMHgwMDA1LAogICAgICAgIGtBY2tub3dsZWRnZSA9 IDB4MDAwNiwKICAgICAgICBrQmVsbCA9IDB4MDAwNywKICAgICAgICBrQmFja3NwYWNlID0gMHgw MDA4LAogICAgICAgIGtIb3Jpem9udGFsVGFidWxhdGlvbiA9IDB4MDAwOSwKICAgICAgICBrTGlu ZUZlZWQgPSAweDAwMEEsCiAgICAgICAga1ZlcnRpY2FsVGFidWxhdGlvbiA9IDB4MDAwQiwKICAg ICAgICBrRm9ybUZlZWQgPSAweDAwMEMsCiAgICAgICAga0NhcnJpYWdlUmV0dXJuID0gMHgwMDBE LAogICAgICAgIGtTaGlmdE91dCA9IDB4MDAwRSwKICAgICAgICBrU2hpZnRJbiA9IDB4MDAwRiwK ICAgICAgICBrRGF0YUxpbmtFc2NhcGUgPSAweDAwMTAsCiAgICAgICAga0RldmljZUNvbnRyb2xP bmUgPSAweDAwMTEsCiAgICAgICAga0RldmljZUNvbnRyb2xUd28gPSAweDAwMTIsCiAgICAgICAg a0RldmljZUNvbnRyb2xUaHJlZSA9IDB4MDAxMywKICAgICAgICBrRGV2aWNlQ29udHJvbEZvdXIg PSAweDAwMTQsCiAgICAgICAga05lZ2F0aXZlQWNrbm93bGVkZ2UgPSAweDAwMTUsCiAgICAgICAg a1N5bmNocm9ub3VzSWRsZSA9IDB4MDAxNiwKICAgICAgICBrRW5kT2ZUcmFuc21pc3Npb25CbG9j ayA9IDB4MDAxNywKICAgICAgICBrQ2FuY2VsID0gMHgwMDE4LAogICAgICAgIGtFbmRPZk1lZGl1 bSA9IDB4MDAxOSwKICAgICAgICBrU3Vic3RpdHV0ZSA9IDB4MDAxQSwKICAgICAgICBrRXNjYXBl ID0gMHgwMDFCLAogICAgICAgIGtGaWxlU2VwYXJhdG9yID0gMHgwMDFDLAogICAgICAgIGtHcm91 cFNlcGFyYXRvciA9IDB4MDAxRCwKICAgICAgICBrUmVjb3JkU2VwYXJhdG9yID0gMHgwMDFFLAog ICAgICAgIGtVbml0U2VwYXJhdG9yID0gMHgwMDFGLAogICAgICAgIGtEZWxldGUgPSAweDAwN0Ys CiAgICAgICAga0JyZWFrUGVybWl0dGVkSGVyZSA9IDB4MDA4MiwKICAgICAgICBrTm9CcmVha0hl cmUgPSAweDAwODMsCiAgICAgICAga0luZGV4ID0gMHgwMDg0LAogICAgICAgIGtOZXh0TGluZSA9 IDB4MDA4NSwKICAgICAgICBrU3RhcnRPZlNlbGVjdGVkQXJlYSA9IDB4MDA4NiwKICAgICAgICBr RW5kT2ZTZWxlY3RlZEFyZWEgPSAweDAwODcsCiAgICAgICAga0NoYXJhY3RlclRhYnVsYXRpb25T ZXQgPSAweDAwODgsCiAgICAgICAga0NoYXJhY3RlclRhYnVsYXRpb25XaXRoSnVzdGlmaWNhdGlv biA9IDB4MDA4OSwKICAgICAgICBrTGluZVRhYnVsYXRpb25TZXQgPSAweDAwOEEsCiAgICAgICAg a1BhcnRpYWxMaW5lRG93biA9IDB4MDA4QiwKICAgICAgICBrUGFydGlhbExpbmVVcCA9IDB4MDA4 QywKICAgICAgICBrUmV2ZXJzZUxpbmVGZWVkID0gMHgwMDhELAogICAgICAgIGtTaW5nbGVTaGlm dFR3byA9IDB4MDA4RSwKICAgICAgICBrU2luZ2xlU2hpZnRUaHJlZSA9IDB4MDA4RiwKICAgICAg ICBrRGV2aWNlQ29udHJvbFN0cmluZyA9IDB4MDA5MCwKICAgICAgICBrUHJpdmF0ZVVzZU9uZSA9 IDB4MDA5MSwKICAgICAgICBrUHJpdmF0ZVVzZVR3byA9IDB4MDA5MiwKICAgICAgICBrU2V0VHJh bnNtaXRTdGF0ZSA9IDB4MDA5MywKICAgICAgICBrQ2FuY2VsQ2hhcmFjdGVyID0gMHgwMDk0LAog ICAgICAgIGtNZXNzYWdlV2FpdGluZyA9IDB4MDA5NSwKICAgICAgICBrU3RhcnRPZkd1YXJkZWRB cmVhID0gMHgwMDk2LAogICAgICAgIGtFbmRPZkd1YXJkZWRBcmVhID0gMHgwMDk3LAogICAgICAg IGtTdGFydE9mU3RyaW5nID0gMHgwMDk4LAogICAgICAgIGtTaW5nbGVDaGFyYWN0ZXJJbnRyb2R1 Y2VyID0gMHgwMDlBLAogICAgICAgIGtDb250cm9sU2VxdWVuY2VJbnRyb2R1Y2VyID0gMHgwMDlC LAogICAgICAgIGtTdHJpbmdUZXJtaW5hdG9yID0gMHgwMDlDLAogICAgICAgIGtPcGVyYXRpbmdT eXN0ZW1Db21tYW5kID0gMHgwMDlELAogICAgICAgIGtQcml2YWN5TWVzc2FnZSA9IDB4MDA5RSwK ICAgICAgICBrQXBwbGljYXRpb25Qcm9ncmFtQ29tbWFuZCA9IDB4MDA5RiwKCiAgICAgICAgIAog ICAgICAgIGtCeXRlT3JkZXJNYXJrID0gVVVuaWNvZGVTcGVjaWFsOjprWmVyb1dpZHRoTm9CcmVh a1NwYWNlCgoKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAsCiAgICAgICAg azAwODAgPSAweDAwODAsCiAgICAgICAgazAwODEgPSAweDAwODEsCiAgICAgICAgazAwODIgPSAw eDAwODIsCiAgICAgICAgazAwODMgPSAweDAwODMsCiAgICAgICAgazAwODQgPSAweDAwODQsCiAg ICAgICAgazAwODUgPSAweDAwODUsCiAgICAgICAgazAwODYgPSAweDAwODYsCiAgICAgICAgazAw ODcgPSAweDAwODcsCiAgICAgICAgazAwODggPSAweDAwODgsCiAgICAgICAgazAwODkgPSAweDAw ODksCiAgICAgICAgazAwOEEgPSAweDAwOEEsCiAgICAgICAgazAwOEIgPSAweDAwOEIsCiAgICAg ICAgazAwOEMgPSAweDAwOEMsCiAgICAgICAgazAwOEQgPSAweDAwOEQsCiAgICAgICAgazAwOEUg PSAweDAwOEUsCiAgICAgICAgazAwOEYgPSAweDAwOEYsCiAgICAgICAgazAwOTAgPSAweDAwOTAs CiAgICAgICAgazAwOTEgPSAweDAwOTEsCiAgICAgICAgazAwOTIgPSAweDAwOTIsCiAgICAgICAg azAwOTMgPSAweDAwOTMsCiAgICAgICAgazAwOTQgPSAweDAwOTQsCiAgICAgICAgazAwOTUgPSAw eDAwOTUsCiAgICAgICAgazAwOTYgPSAweDAwOTYsCiAgICAgICAgazAwOTcgPSAweDAwOTcsCiAg ICAgICAgazAwOTggPSAweDAwOTgsCiAgICAgICAgazAwOTkgPSAweDAwOTksCiAgICAgICAgazAw OUEgPSAweDAwOUEsCiAgICAgICAgazAwOUIgPSAweDAwOUIsCiAgICAgICAgazAwOUMgPSAweDAw OUMsCiAgICAgICAgazAwOUQgPSAweDAwOUQsCiAgICAgICAgazAwOUUgPSAweDAwOUUsCiAgICAg ICAgazAwOUYgPSAweDAwOUYsCiAgICAgICAga05hdGlvbmFsRGlnaXRTaGFwZXMgPSAweDIwNkUs CiAgICAgICAga05vbWluYWxEaWdpdFNoYXBlcyA9IDB4MjA2RgoKICAgIH07Cn07CgogCgogCgoK CgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAK CiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKIAoKIyAzMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pdGV4dC5pbmwiIDIKCgppbmxpbmUKSVRleHRTdG9yYWdlICoKSVRl eHQ6OnN0b3JhZ2UoKSBjb25zdAp7CiAgICBpZiAoZkxhenlTdG9yYWdlKSB7CiAgICAgICAgbGF6 eUluaXRTdG9yYWdlKCk7CiAgICB9CiAgICByZXR1cm4gZlN0b3JhZ2U7Cn0KCmlubGluZQpJVGV4 dDo6bGVuZ3RoX3R5cGUKZmluZF9sZW5ndGgoY29uc3QgaW9jOjp1bmljaGFyX3QqIHgpCnsKICAg IGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0ZW1wID0geDsKICAgIHdoaWxlICgqdGVtcCAhPSAoaW9j Ojp1bmljaGFyX3QpVVVuaWNvZGVTcGVjaWFsOjprTnVsbCkKICAgICAgICB0ZW1wKys7CiAgICBy ZXR1cm4gdGVtcCAtIHg7Cn0KCmlubGluZQp2b2lkCnBpbihJVGV4dDo6bGVuZ3RoX3R5cGUmIHZh bHVlLAogICAgSVRleHQ6Omxlbmd0aF90eXBlIHBpblRvKQp7CiAgICBpZiAodmFsdWUgPiBwaW5U bykKICAgICAgICB2YWx1ZSA9IHBpblRvOwp9CgppbmxpbmUKSVRleHQ6OklUZXh0KGNvbnN0IGlv Yzo6dW5pY2hhcl90IHRoYXRbXSwKICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSB0aGF0 TGVuZ3RoKQogICAgICAgIDogZkxhenlTdG9yYWdlKDApLAogICAgICAgICAgZkNvZGVTZXQoLTEp CnsKICAgICAKICAgICAKICAgIGlmICh0aGF0TGVuZ3RoID09IDApIHsKICAgICAgICBmU3RvcmFn ZSA9IElUZXh0U3RvcmFnZTo6ZW1wdHlUZXh0U3RvcmFnZSgpOwogICAgICAgIGZTdG9yYWdlLT5h ZGRSZWYoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGZTdG9yYWdlID0gSVRleHRTdG9yYWdl OjpjcmVhdGVOZXcodGhhdExlbmd0aCk7CiAgICAgICAgZlN0b3JhZ2UgPSBmU3RvcmFnZS0+cmVw bGFjZSgwLCAwLCAoY29uc3QgVW5pQ2hhciAqKXRoYXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGF0TGVuZ3RoLCAwLCBmYWxzZSk7CiAgICB9Cn0KCmlubGluZQpJVGV4 dDo6SVRleHQoY29uc3QgaW9jOjp1bmljaGFyX3QqIHRoYXQpCiAgICAgICAgOiBmTGF6eVN0b3Jh Z2UoMCksCiAgICAgICAgICBmQ29kZVNldCgtMSkKewogICAgSVRleHQ6Omxlbmd0aF90eXBlIHRo YXRMZW5ndGggPSBmaW5kX2xlbmd0aCh0aGF0KTsKCiAgICAgCiAgICAgCiAgICBpZiAodGhhdExl bmd0aCA9PSAwKSB7CiAgICAgICAgZlN0b3JhZ2UgPSBJVGV4dFN0b3JhZ2U6OmVtcHR5VGV4dFN0 b3JhZ2UoKTsKICAgICAgICBmU3RvcmFnZS0+YWRkUmVmKCk7CiAgICB9CiAgICBlbHNlIHsKICAg ICAgICBmU3RvcmFnZSA9IElUZXh0U3RvcmFnZTo6Y3JlYXRlTmV3KHRoYXRMZW5ndGgpOwogICAg ICAgIGZTdG9yYWdlID0gZlN0b3JhZ2UtPnJlcGxhY2UoMCwgMCwgKGNvbnN0IFVuaUNoYXIgKil0 aGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdExlbmd0aCwgMCwg ZmFsc2UpOwogICAgfQp9CgppbmxpbmUKSVRleHQ6OklUZXh0KElUZXh0OjpsZW5ndGhfdHlwZSB0 aGF0Q29waWVzLCBpb2M6OnVuaWNoYXJfdCB0aGF0KQogICAgICAgIDogZkxhenlTdG9yYWdlKDAp LAogICAgICAgICAgZkNvZGVTZXQoLTEpCnsKICAgICAKICAgICAKICAgIGlmICh0aGF0Q29waWVz ID09IDApIHsKICAgICAgICBmU3RvcmFnZSA9IElUZXh0U3RvcmFnZTo6ZW1wdHlUZXh0U3RvcmFn ZSgpOwogICAgICAgIGZTdG9yYWdlLT5hZGRSZWYoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAg IGZTdG9yYWdlID0gSVRleHRTdG9yYWdlOjpjcmVhdGVOZXcodGhhdENvcGllcyk7CiAgICAgICAg ZlN0b3JhZ2UgPSBmU3RvcmFnZS0+cmVwbGFjZSgwLCAwLCAoY29uc3QgVW5pQ2hhciAqKSZ0aGF0 LCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdENvcGllcyAtIDEs IHRydWUpOwogICAgfQp9CgppbmxpbmUKSVRleHQ6OklUZXh0KGlvYzo6dW5pY2hhcl90IHRoYXQp CiAgICAgICAgOiBmTGF6eVN0b3JhZ2UoMCksCiAgICAgICAgICBmQ29kZVNldCgtMSkKewogICAg ZlN0b3JhZ2UgPSBJVGV4dFN0b3JhZ2U6OmNyZWF0ZU5ldygxKTsKICAgIGZTdG9yYWdlID0gZlN0 b3JhZ2UtPnJlcGxhY2UoMCwgMCwgKGNvbnN0IFVuaUNoYXIgKikmdGhhdCwgMSwgMCwgZmFsc2Up Owp9CgppbmxpbmUKSVRleHQmCklUZXh0OjpvcGVyYXRvcj0oY29uc3QgaW9jOjp1bmljaGFyX3Qq IHRoYXQpCnsKICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5yZXBsYWNlKDAsIGxlbmd0aCgpLCAo Y29uc3QgVW5pQ2hhciAqKXRoYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm aW5kX2xlbmd0aCh0aGF0KSwgMCwgZmFsc2UpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUK SVRleHQmCklUZXh0OjpvcGVyYXRvcj0oaW9jOjp1bmljaGFyX3QgdGhhdCkKewogICAgZlN0b3Jh Z2UgPSBzdG9yYWdlKCktPnJlcGxhY2UoMCwgbGVuZ3RoKCksIChjb25zdCBVbmlDaGFyICopJnRo YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBmYWxzZSk7CiAgICBy ZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUKSVRleHQmCklUZXh0Ojphc3NpZ24oY29uc3QgaW9jOjp1 bmljaGFyX3QgdGhhdFtdLAogICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSB0aGF0TGVu Z3RoKQp7CiAgICBmU3RvcmFnZSA9IHN0b3JhZ2UoKS0+cmVwbGFjZSgwLCBsZW5ndGgoKSwgKGNv bnN0IFVuaUNoYXIgKil0aGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhh dExlbmd0aCwgMCwgZmFsc2UpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSVRleHQmCklU ZXh0Ojphc3NpZ24oY29uc3QgaW9jOjp1bmljaGFyX3QqIHRoYXQpCnsKICAgIGZTdG9yYWdlID0g c3RvcmFnZSgpLT5yZXBsYWNlKDAsIGxlbmd0aCgpLCAoY29uc3QgVW5pQ2hhciAqKXRoYXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX2xlbmd0aCh0aGF0KSwgMCwgZmFs c2UpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSVRleHQmCklUZXh0Ojphc3NpZ24oSVRl eHQ6Omxlbmd0aF90eXBlIHRoYXRDb3BpZXMsCiAgICAgICAgICAgICAgaW9jOjp1bmljaGFyX3Qg dGhhdCkKewogICAgaWYgKHRoYXRDb3BpZXMgPT0gMCkKICAgICAgICByZXR1cm4gZXJhc2UoMCwg bGVuZ3RoKCkpOwogICAgZWxzZQogICAgICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5yZXBsYWNl KDAsIGxlbmd0aCgpLCAoY29uc3QgVW5pQ2hhciAqKSZ0aGF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEsIHRoYXRDb3BpZXMgLSAxLCB0cnVlKTsKICAgIHJldHVybiAq dGhpczsKfQoKaW5saW5lCklUZXh0OjpvcGVyYXRvciBjb25zdCBpb2M6OnVuaWNoYXJfdCooKSBj b25zdAp7CiAgICByZXR1cm4gKGNvbnN0IGlvYzo6dW5pY2hhcl90ICopKHN0b3JhZ2UoKS0+Y19z dHIoKSk7Cn0KCmlubGluZQp2b2lkCklUZXh0OjpyZXNpemUoSVRleHQ6Omxlbmd0aF90eXBlIG51 bUNoYXJzLAogICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90IGZpbGxDaGFyKQp7CiAgICBpZiAo bnVtQ2hhcnMgPiBsZW5ndGgoKSkKICAgICAgICBmU3RvcmFnZSA9IHN0b3JhZ2UoKS0+cmVwbGFj ZShsZW5ndGgoKSwgMCwgKGNvbnN0IFVuaUNoYXIgKikmZmlsbENoYXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMSwgbnVtQ2hhcnMgLSAxIC0gbGVuZ3RoKCksIHRydWUp OwogICAgZWxzZSBpZiAobnVtQ2hhcnMgPCBsZW5ndGgoKSkKICAgICAgICBmU3RvcmFnZSA9IHN0 b3JhZ2UoKS0+cmVwbGFjZShudW1DaGFycywgbGVuZ3RoKCkgLSBudW1DaGFycywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGV4dFN0b3JhZ2U6OmVtcHR5VGV4dFN0b3Jh Z2UoKSwgMCwgMCk7Cn0KCmlubGluZQpjb25zdCBpb2M6OnVuaWNoYXJfdCoKSVRleHQ6OmNfc3Ry KCkgY29uc3QKewogICAgcmV0dXJuIChjb25zdCBpb2M6OnVuaWNoYXJfdCAqKXN0b3JhZ2UoKS0+ Y19zdHIoKTsKfQoKaW5saW5lCmNvbnN0IGlvYzo6dW5pY2hhcl90KgpJVGV4dDo6ZGF0YSgpIGNv bnN0CnsKICAgIHJldHVybiBjX3N0cigpOwp9CgppbmxpbmUKY29uc3QgaW9jOjp1bmljaGFyX3Qq CklUZXh0OjpzdG9yYWdlX2NodW5rKElUZXh0OjpvZmZzZXRfdHlwZSBzZWFyY2hQb3MsCiAgICAg ICAgICAgICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSYgY2h1bmtQb3MsCiAgICAgICAgICAg ICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSYgY2h1bmtMZW5ndGgpIGNvbnN0CnsKICAgIHJl dHVybiAoY29uc3QgaW9jOjp1bmljaGFyX3QgKilzdG9yYWdlKCktPnN0b3JhZ2VDaHVuayhzZWFy Y2hQb3MsIGNodW5rUG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNodW5rTGVuZ3RoKTsKfQoKaW5saW5lCmlvYzo6dW5pY2hhcl90CklUZXh0 OjpvcGVyYXRvcltdKG9mZnNldF90eXBlIHBvcykgY29uc3QKewogICAgcmV0dXJuIChpb2M6OnVu aWNoYXJfdClzdG9yYWdlKCktPmF0KHBvcyk7Cn0KCmlubGluZQppb2M6OnVuaWNoYXJfdApJVGV4 dDo6YXQob2Zmc2V0X3R5cGUgcG9zKSBjb25zdAp7CiAgICByZXR1cm4gKGlvYzo6dW5pY2hhcl90 KXN0b3JhZ2UoKS0+YXQocG9zKTsKfQoKaW5saW5lCnZvaWQKSVRleHQ6OmF0X3B1dChJVGV4dDo6 b2Zmc2V0X3R5cGUgcG9zLAogICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90IG5ld0NoYXIpCnsK ICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5hdFB1dChwb3MsIChVbmlDaGFyKW5ld0NoYXIpOwp9 CgppbmxpbmUKSVRleHQmCklUZXh0OjpvcGVyYXRvcis9KGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0 aGF0KQp7CiAgICBmU3RvcmFnZSA9IHN0b3JhZ2UoKS0+cmVwbGFjZShsZW5ndGgoKSwgMCwgKGNv bnN0IFVuaUNoYXIgKil0aGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlu ZF9sZW5ndGgodGhhdCksIDAsIGZhbHNlKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklU ZXh0JgpJVGV4dDo6b3BlcmF0b3IrPShpb2M6OnVuaWNoYXJfdCB0aGF0KQp7CiAgICBmU3RvcmFn ZSA9IHN0b3JhZ2UoKS0+cmVwbGFjZShsZW5ndGgoKSwgMCwgKGNvbnN0IFVuaUNoYXIgKikmdGhh dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIGZhbHNlKTsKICAgIHJl dHVybiAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4dDo6YXBwZW5kKGNvbnN0IGlvYzo6dW5p Y2hhcl90IHRoYXRbXSwKICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhhdExlbmd0 aCkKewogICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2UobGVuZ3RoKCksIDAsIChjb25z dCBVbmlDaGFyICopdGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRM ZW5ndGgsIDAsIGZhbHNlKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4 dDo6YXBwZW5kKGNvbnN0IGlvYzo6dW5pY2hhcl90KiB0aGF0KQp7CiAgICBmU3RvcmFnZSA9IHN0 b3JhZ2UoKS0+cmVwbGFjZShsZW5ndGgoKSwgMCwgKGNvbnN0IFVuaUNoYXIgKil0aGF0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZF9sZW5ndGgodGhhdCksIDAsIGZhbHNl KTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4dDo6YXBwZW5kKElUZXh0 OjpsZW5ndGhfdHlwZSB0aGF0Q29waWVzLAogICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90IHRo YXQpCnsKICAgIGlmICh0aGF0Q29waWVzICE9IDApIHsKICAgICAgICBmU3RvcmFnZSA9IHN0b3Jh Z2UoKS0+cmVwbGFjZShsZW5ndGgoKSwgMCwgKGNvbnN0IFVuaUNoYXIgKikmdGhhdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCB0aGF0Q29waWVzIC0gMSwgdHJ1ZSk7 CiAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJVGV4dCYKSVRleHQ6Omluc2VydChJ VGV4dDo6b2Zmc2V0X3R5cGUgaW5zZXJ0UG9zLAogICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5p Y2hhcl90IHRoYXRbXSwKICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhhdExlbmd0 aCkKewogICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2UoaW5zZXJ0UG9zLCAwLCAoY29u c3QgVW5pQ2hhciAqKXRoYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0 TGVuZ3RoLCAwLCBmYWxzZSk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJVGV4dCYKSVRl eHQ6Omluc2VydChJVGV4dDo6b2Zmc2V0X3R5cGUgaW5zZXJ0UG9zLAogICAgICAgICAgICAgIGNv bnN0IGlvYzo6dW5pY2hhcl90KiB0aGF0KQp7CiAgICBmU3RvcmFnZSA9IHN0b3JhZ2UoKS0+cmVw bGFjZShpbnNlcnRQb3MsIDAsIChjb25zdCBVbmlDaGFyICopdGhhdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZpbmRfbGVuZ3RoKHRoYXQpLCAwLCBmYWxzZSk7CiAgICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZQpJVGV4dCYKSVRleHQ6Omluc2VydChJVGV4dDo6b2Zmc2V0X3R5 cGUgaW5zZXJ0UG9zLAogICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSB0aGF0Q29waWVz LAogICAgICAgICAgICAgIGlvYzo6dW5pY2hhcl90IHRoYXQpCnsKICAgIGlmICh0aGF0Q29waWVz ICE9MCkgewogICAgICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5yZXBsYWNlKGluc2VydFBvcywg MCwgKGNvbnN0IFVuaUNoYXIgKikmdGhhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxLCB0aGF0Q29waWVzIC0gMSwgdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7 Cn0KCmlubGluZQpJVGV4dEl0ZXJhdG9yCklUZXh0OjppbnNlcnQoSVRleHRJdGVyYXRvciBpbnNl cnRQb3MsCiAgICAgICAgICAgICAgaW9jOjp1bmljaGFyX3QgdGhhdCkKewogICAgZlN0b3JhZ2Ug PSBzdG9yYWdlKCktPnJlcGxhY2UoaW5zZXJ0UG9zLm9mZnNldCgpLCAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFVuaUNoYXIgKikmdGhhdCwgMSwgMCwgZmFsc2Up OwogICAgcmV0dXJuIGluc2VydFBvczsKfQoKaW5saW5lCnZvaWQKSVRleHQ6Omluc2VydChJVGV4 dEl0ZXJhdG9yIGluc2VydFBvcywKICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhh dENvcGllcywKICAgICAgICAgICAgICBpb2M6OnVuaWNoYXJfdCB0aGF0KQp7CiAgICBpZiAodGhh dENvcGllcyAhPSAwKSB7CiAgICAgICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2UoaW5z ZXJ0UG9zLm9mZnNldCgpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBVbmlDaGFyICopJnRoYXQsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhhdENvcGllcyAtIDEsIHRydWUpOwogICAgfQp9CgppbmxpbmUKSVRleHQmCklU ZXh0OjppbnNlcnRfYW5kX3Byb3BhZ2F0ZV9zdHlsZXMoSVRleHQ6Om9mZnNldF90eXBlIGluc2Vy dFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNo YXJfdCB0aGF0W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRleHQ6Omxl bmd0aF90eXBlIHRoYXRMZW5ndGgpCnsKICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5yZXBsYWNl KGluc2VydFBvcywgMCwgKGNvbnN0IFVuaUNoYXIgKil0aGF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhhdExlbmd0aCwgMCwgZmFsc2UsIHRydWUpOwogICAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUKSVRleHQmCklUZXh0OjppbnNlcnRfYW5kX3Byb3BhZ2F0ZV9zdHlsZXMo SVRleHQ6Om9mZnNldF90eXBlIGluc2VydFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhhdENvcGllcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpb2M6OnVuaWNoYXJfdCB0aGF0KQp7CiAgICBpZiAodGhhdENvcGll cyAhPSAwKSB7CiAgICAgICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2UoaW5zZXJ0UG9z LCAwLCAoY29uc3QgVW5pQ2hhciAqKSZ0aGF0LCAxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoYXRDb3BpZXMgLSAxLCB0cnVlLCB0cnVlKTsKICAgIH0KICAgIHJldHVy biAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4dDo6cmVwbGFjZShJVGV4dDo6b2Zmc2V0X3R5 cGUgdGhpc1BvcywKICAgICAgICAgICAgICAgSVRleHQ6Omxlbmd0aF90eXBlIHRoaXNMZW5ndGgs CiAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90IHRoYXRbXSwKICAgICAgICAgICAg ICAgSVRleHQ6Omxlbmd0aF90eXBlIHRoYXRMZW5ndGgpCnsKICAgIHBpbih0aGlzTGVuZ3RoLCBs ZW5ndGgoKSAtIHRoaXNQb3MpOwogICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2UodGhp c1BvcywgdGhpc0xlbmd0aCwgKGNvbnN0IFVuaUNoYXIgKil0aGF0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhhdExlbmd0aCwgMCwgZmFsc2UpOwogICAgcmV0dXJuICp0aGlz Owp9CgppbmxpbmUKSVRleHQmCklUZXh0OjpyZXBsYWNlKElUZXh0OjpvZmZzZXRfdHlwZSB0aGlz UG9zLAogICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhpc0xlbmd0aCwKICAgICAg ICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRoYXQpCnsKICAgIHBpbih0aGlzTGVuZ3Ro LCBsZW5ndGgoKSAtIHRoaXNQb3MpOwogICAgZlN0b3JhZ2UgPSBzdG9yYWdlKCktPnJlcGxhY2Uo dGhpc1BvcywgdGhpc0xlbmd0aCwgKGNvbnN0IFVuaUNoYXIgKil0aGF0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmluZF9sZW5ndGgodGhhdCksIDAsIGZhbHNlKTsKICAgIHJl dHVybiAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4dDo6cmVwbGFjZShJVGV4dDo6b2Zmc2V0 X3R5cGUgdGhpc1BvcywKICAgICAgICAgICAgICAgSVRleHQ6Omxlbmd0aF90eXBlIHRoaXNMZW5n dGgsCiAgICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSB0aGF0Q29waWVzLAogICAgICAg ICAgICAgICBpb2M6OnVuaWNoYXJfdCB0aGF0KQp7CiAgICBwaW4odGhpc0xlbmd0aCwgbGVuZ3Ro KCkgLSB0aGlzUG9zKTsKICAgIGlmICh0aGF0Q29waWVzID09IDApCiAgICAgICAgcmV0dXJuIGVy YXNlKHRoaXNQb3MsIHRoaXNMZW5ndGgpOwogICAgZWxzZQogICAgICAgIGZTdG9yYWdlID0gc3Rv cmFnZSgpLT5yZXBsYWNlKHRoaXNQb3MsIHRoaXNMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IFVuaUNoYXIgKikmdGhhdCwgMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Q29waWVzIC0gMSwgdHJ1ZSk7CiAgICByZXR1 cm4gKnRoaXM7Cn0KCmlubGluZQpJVGV4dCYKSVRleHQ6OnJlcGxhY2UoSVRleHRJdGVyYXRvciB0 aGlzRnJvbSwKICAgICAgICAgICAgICAgSVRleHRJdGVyYXRvciB0aGlzVG8sCiAgICAgICAgICAg ICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90IHRoYXRbXSwKICAgICAgICAgICAgICAgSVRleHQ6Omxl bmd0aF90eXBlIHRoYXRMZW5ndGgpCnsKICAgIGZTdG9yYWdlID0gc3RvcmFnZSgpLT5yZXBsYWNl KHRoaXNGcm9tLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp c1RvLm9mZnNldCgpIC0gdGhpc0Zyb20ub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3QgVW5pQ2hhciAqKXRoYXQsIHRoYXRMZW5ndGgsIDAsIGZhbHNlKTsK ICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklUZXh0JgpJVGV4dDo6cmVwbGFjZShJVGV4dEl0 ZXJhdG9yIHRoaXNGcm9tLAogICAgICAgICAgICAgICBJVGV4dEl0ZXJhdG9yIHRoaXNUbywKICAg ICAgICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIHRoYXQpCnsKICAgIGZTdG9yYWdlID0g c3RvcmFnZSgpLT5yZXBsYWNlKHRoaXNGcm9tLm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpc1RvLm9mZnNldCgpIC0gdGhpc0Zyb20ub2Zmc2V0KCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgVW5pQ2hhciAqKXRoYXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX2xlbmd0aCh0aGF0KSwgMCwgZmFsc2Up OwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSVRleHQmCklUZXh0OjpyZXBsYWNlKElUZXh0 SXRlcmF0b3IgdGhpc0Zyb20sCiAgICAgICAgICAgICAgIElUZXh0SXRlcmF0b3IgdGhpc1RvLAog ICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3RoX3R5cGUgdGhhdENvcGllcywKICAgICAgICAgICAg ICAgaW9jOjp1bmljaGFyX3QgdGhhdCkKewogICAgaWYgKHRoYXRDb3BpZXMgPT0gMCkKICAgICAg ICBlcmFzZSh0aGlzRnJvbSwgdGhpc1RvKTsKICAgIGVsc2UKICAgICAgICBmU3RvcmFnZSA9IHN0 b3JhZ2UoKS0+cmVwbGFjZSh0aGlzRnJvbS5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGlzVG8ub2Zmc2V0KCkgLSB0aGlzRnJvbS5vZmZzZXQoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgVW5pQ2hhciAqKSZ0aGF0 LCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRDb3BpZXMgLSAx LCB0cnVlKTsKICAgIHJldHVybiAqdGhpczsKfQoKCmlubGluZQpJVGV4dDo6bGVuZ3RoX3R5cGUK SVRleHQ6OmNvcHkoaW9jOjp1bmljaGFyX3QgdGhhdFtdLAogICAgICAgICAgICBJVGV4dDo6bGVu Z3RoX3R5cGUgbWF4Q2hhcnMsCiAgICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBv cykgY29uc3QKewogICAgcmV0dXJuIGNvcHlVbmlDaGFyKChVbmlDaGFyICopdGhhdCwgbWF4Q2hh cnMsIHN0YXJ0UG9zKTsKfQoKaW5saW5lCmludApJVGV4dDo6Y29tcGFyZShjb25zdCBpb2M6OnVu aWNoYXJfdCogdGhhdCkgY29uc3QgewogICAgcmV0dXJuIGNvbXBhcmVVbmlDaGFyKChjb25zdCBV bmlDaGFyICopdGhhdCk7Cn0KCmlubGluZQppbnQKSVRleHQ6OmNvbXBhcmUoSVRleHQ6Om9mZnNl dF90eXBlIHRoaXNQb3MsIElUZXh0OjpsZW5ndGhfdHlwZSB0aGlzTGVuZ3RoLAogICAgICAgICAg ICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCB0aGF0W10sIElUZXh0OjpsZW5ndGhfdHlwZSB0aGF0 TGVuZ3RoKSBjb25zdAp7CiAgICByZXR1cm4gY29tcGFyZVVuaUNoYXIodGhpc1BvcywgdGhpc0xl bmd0aCwgKGNvbnN0IFVuaUNoYXIgKil0aGF0LCB0aGF0TGVuZ3RoKTsKfQoKaW5saW5lCklUZXh0 OjpvZmZzZXRfdHlwZQpJVGV4dDo6ZmluZChjb25zdCBpb2M6OnVuaWNoYXJfdCBrZXlbXSwKICAg ICAgICAgICAgSVRleHQ6Om9mZnNldF90eXBlIHN0YXJ0UG9zLAogICAgICAgICAgICBJVGV4dDo6 bGVuZ3RoX3R5cGUga2V5TGVuZ3RoKSBjb25zdAp7CiAgICByZXR1cm4gZmluZChJVGV4dChrZXks IGtleUxlbmd0aCksIHN0YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0OjpvZmZzZXRfdHlwZQpJVGV4 dDo6ZmluZChjb25zdCBpb2M6OnVuaWNoYXJfdCoga2V5LAogICAgICAgICAgICBJVGV4dDo6b2Zm c2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiBmaW5kKElUZXh0KGtleSksIHN0 YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0OjpvZmZzZXRfdHlwZQpJVGV4dDo6ZmluZChpb2M6OnVu aWNoYXJfdCBrZXksIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcykgY29uc3QgewogICAgcmV0 dXJuIGZpbmRVbmlDaGFyKChVbmlDaGFyKWtleSwgc3RhcnRQb3MpOwp9CgppbmxpbmUKSVRleHQ6 Om9mZnNldF90eXBlCklUZXh0OjpyZmluZChjb25zdCBpb2M6OnVuaWNoYXJfdCBrZXlbXSwKICAg ICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcywKICAgICAgICAgICAgIElUZXh0 OjpsZW5ndGhfdHlwZSBrZXlMZW5ndGgpIGNvbnN0CnsKICAgIHJldHVybiByZmluZChJVGV4dChr ZXksIGtleUxlbmd0aCksIHN0YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0OjpvZmZzZXRfdHlwZQpJ VGV4dDo6cmZpbmQoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleSwKICAgICAgICAgICAgIElUZXh0 OjpvZmZzZXRfdHlwZSBzdGFydFBvcykgY29uc3QKewogICAgcmV0dXJuIHJmaW5kKElUZXh0KGtl eSksIHN0YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0OjpvZmZzZXRfdHlwZQpJVGV4dDo6cmZpbmQo aW9jOjp1bmljaGFyX3Qga2V5LCBJVGV4dDo6b2Zmc2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0IHsK ICAgIHJldHVybiByZmluZFVuaUNoYXIoKFVuaUNoYXIpa2V5LCBzdGFydFBvcyk7Cn0KCmlubGlu ZQpJVGV4dDo6b2Zmc2V0X3R5cGUKSVRleHQ6OmZpbmRfZmlyc3Rfb2YoY29uc3QgaW9jOjp1bmlj aGFyX3Qga2V5c1tdLAogICAgICAgICAgICAgICAgICAgICBJVGV4dDo6b2Zmc2V0X3R5cGUgc3Rh cnRQb3MsCiAgICAgICAgICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSBudW1LZXlzKSBj b25zdAp7CiAgICByZXR1cm4gZmluZF9maXJzdF9vZihJVGV4dChrZXlzLCBudW1LZXlzKSwgc3Rh cnRQb3MpOwp9CgppbmxpbmUKSVRleHQ6Om9mZnNldF90eXBlCklUZXh0OjpmaW5kX2ZpcnN0X29m KGNvbnN0IGlvYzo6dW5pY2hhcl90KiBrZXlzLAogICAgICAgICAgICAgICAgICAgICBJVGV4dDo6 b2Zmc2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiBmaW5kX2ZpcnN0X29mKElU ZXh0KGtleXMpLCBzdGFydFBvcyk7Cn0KCmlubGluZQpJVGV4dDo6b2Zmc2V0X3R5cGUKSVRleHQ6 OmZpbmRfZmlyc3Rfb2YoaW9jOjp1bmljaGFyX3Qga2V5LAogICAgICAgICAgICAgICAgICAgICBJ VGV4dDo6b2Zmc2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiBmaW5kKGtleSwg c3RhcnRQb3MpOwp9CgppbmxpbmUKSVRleHQ6Om9mZnNldF90eXBlCklUZXh0OjpmaW5kX2xhc3Rf b2YoY29uc3QgaW9jOjp1bmljaGFyX3Qga2V5c1tdLAogICAgICAgICAgICAgICAgICAgIElUZXh0 OjpvZmZzZXRfdHlwZSBzdGFydFBvcywKICAgICAgICAgICAgICAgICAgICBJVGV4dDo6bGVuZ3Ro X3R5cGUgbnVtS2V5cykgY29uc3QKewogICAgcmV0dXJuIGZpbmRfbGFzdF9vZihJVGV4dChrZXlz LCBudW1LZXlzKSwgc3RhcnRQb3MpOwp9CgppbmxpbmUKSVRleHQ6Om9mZnNldF90eXBlCklUZXh0 OjpmaW5kX2xhc3Rfb2YoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAg ICAgICAgSVRleHQ6Om9mZnNldF90eXBlIHN0YXJ0UG9zKSBjb25zdAp7CiAgICByZXR1cm4gZmlu ZF9sYXN0X29mKElUZXh0KGtleXMpLCBzdGFydFBvcyk7Cn0KCmlubGluZQpJVGV4dDo6b2Zmc2V0 X3R5cGUKSVRleHQ6OmZpbmRfbGFzdF9vZihpb2M6OnVuaWNoYXJfdCBrZXksCiAgICAgICAgICAg ICAgICAgICAgSVRleHQ6Om9mZnNldF90eXBlIHN0YXJ0UG9zKSBjb25zdAp7CiAgICByZXR1cm4g cmZpbmQoa2V5LCBzdGFydFBvcyk7Cn0KCmlubGluZQpJVGV4dDo6b2Zmc2V0X3R5cGUKSVRleHQ6 OmZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGlvYzo6dW5pY2hhcl90IGtleXNbXSwKICAgICAgICAg ICAgICAgICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcywKICAgICAgICAgICAg ICAgICAgICAgICAgIElUZXh0OjpsZW5ndGhfdHlwZSBudW1LZXlzKSBjb25zdAp7CiAgICByZXR1 cm4gZmluZF9maXJzdF9ub3Rfb2YoSVRleHQoa2V5cywgbnVtS2V5cyksIHN0YXJ0UG9zKTsKfQoK aW5saW5lCklUZXh0OjpvZmZzZXRfdHlwZQpJVGV4dDo6ZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg aW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBJVGV4dDo6b2Zm c2V0X3R5cGUgc3RhcnRQb3MpIGNvbnN0CnsKICAgIHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZihJ VGV4dChrZXlzKSwgc3RhcnRQb3MpOwp9CgppbmxpbmUKSVRleHQ6Om9mZnNldF90eXBlCklUZXh0 OjpmaW5kX2ZpcnN0X25vdF9vZihpb2M6OnVuaWNoYXJfdCBrZXksCiAgICAgICAgICAgICAgICAg IElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcykgY29uc3QgewogICAgcmV0dXJuIGZpbmRfZmly c3Rfbm90X29mVW5pQ2hhcigoVW5pQ2hhcilrZXksIHN0YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0 OjpvZmZzZXRfdHlwZQpJVGV4dDo6ZmluZF9sYXN0X25vdF9vZihjb25zdCBpb2M6OnVuaWNoYXJf dCBrZXlzW10sCiAgICAgICAgICAgICAgICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFy dFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgSVRleHQ6Omxlbmd0aF90eXBlIG51bUtleXMp IGNvbnN0CnsKICAgIHJldHVybiBmaW5kX2xhc3Rfbm90X29mKElUZXh0KGtleXMsIG51bUtleXMp LCBzdGFydFBvcyk7Cn0KCmlubGluZQpJVGV4dDo6b2Zmc2V0X3R5cGUKSVRleHQ6OmZpbmRfbGFz dF9ub3Rfb2YoY29uc3QgaW9jOjp1bmljaGFyX3QqIGtleXMsCiAgICAgICAgICAgICAgICAgICAg ICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcykgY29uc3QKewogICAgcmV0dXJuIGZpbmRf bGFzdF9ub3Rfb2YoSVRleHQoa2V5cyksIHN0YXJ0UG9zKTsKfQoKaW5saW5lCklUZXh0OjpvZmZz ZXRfdHlwZQpJVGV4dDo6ZmluZF9sYXN0X25vdF9vZihpb2M6OnVuaWNoYXJfdCBrZXksCiAgICAg ICAgICAgICAgICAgICAgICAgIElUZXh0OjpvZmZzZXRfdHlwZSBzdGFydFBvcykgY29uc3QKewog ICAgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2ZVbmlDaGFyKChVbmlDaGFyKWtleSwgc3RhcnRQb3Mp Owp9CgogCiAKIAoKaW5saW5lCklUZXh0Cm9wZXJhdG9yKyhjb25zdCBJVGV4dCYgYSwKICAgICAg ICAgIGNvbnN0IElUZXh0JiBiKQp7CiAgICBJVGV4dCByZXN1bHQoYSk7CiAgICByZXR1cm4gcmVz dWx0ICs9IGI7Cn0KCmlubGluZQpJVGV4dApvcGVyYXRvcisoY29uc3QgaW9jOjp1bmljaGFyX3Qq IGEsCiAgICAgICAgICBjb25zdCBJVGV4dCYgYikKewogICAgSVRleHQgcmVzdWx0KGEpOwogICAg cmV0dXJuIHJlc3VsdCArPSBiOwp9CgppbmxpbmUKSVRleHQKb3BlcmF0b3IrKGlvYzo6dW5pY2hh cl90IGEsCiAgICAgICAgICBjb25zdCBJVGV4dCYgYikKewogICAgSVRleHQgcmVzdWx0KDEsIGEp OwogICAgcmV0dXJuIHJlc3VsdCArPSBiOwp9CgppbmxpbmUKSVRleHQKb3BlcmF0b3IrKGNvbnN0 IElUZXh0JiBhLAogICAgICAgICAgY29uc3QgaW9jOjp1bmljaGFyX3QqIGIpCnsKICAgIElUZXh0 IHJlc3VsdChhKTsKICAgIHJldHVybiByZXN1bHQgKz0gYjsKfQoKaW5saW5lCklUZXh0Cm9wZXJh dG9yKyhjb25zdCBJVGV4dCYgYSwKICAgICAgICAgIGlvYzo6dW5pY2hhcl90IGIpCnsKICAgIElU ZXh0IHJlc3VsdChhKTsKICAgIHJldHVybiByZXN1bHQgKz0gYjsKfQoKIAogCiAKCmlubGluZQpi b29sCm9wZXJhdG9yPT0oY29uc3QgSVRleHQmIGEsCiAgICAgICAgICAgY29uc3QgSVRleHQmIGIp CnsKICAgIHJldHVybiBhLmNvbXBhcmUoYikgPT0gMDsKfQoKaW5saW5lCmJvb2wKb3BlcmF0b3I9 PShjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwKICAgICAgICAgICBjb25zdCBJVGV4dCYgYikKewog ICAgcmV0dXJuIGIuY29tcGFyZShhKSA9PSAwOwp9CgppbmxpbmUKYm9vbApvcGVyYXRvcj09KGNv bnN0IElUZXh0JiBhLAogICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBiKQp7CiAgICBy ZXR1cm4gYS5jb21wYXJlKGIpID09IDA7Cn0KCmlubGluZQpib29sCm9wZXJhdG9yIT0oY29uc3Qg SVRleHQmIGEsCiAgICAgICAgICAgY29uc3QgSVRleHQmIGIpCnsKICAgIHJldHVybiBhLmNvbXBh cmUoYikgIT0gMDsKfQoKaW5saW5lCmJvb2wKb3BlcmF0b3IhPShjb25zdCBpb2M6OnVuaWNoYXJf dCogYSwKICAgICAgICAgICBjb25zdCBJVGV4dCYgYikKewogICAgcmV0dXJuIGIuY29tcGFyZShh KSAhPSAwOwp9CgppbmxpbmUKYm9vbApvcGVyYXRvciE9KGNvbnN0IElUZXh0JiBhLAogICAgICAg ICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBiKQp7CiAgICByZXR1cm4gYS5jb21wYXJlKGIpICE9 IDA7Cn0KCmlubGluZQpib29sCm9wZXJhdG9yPChjb25zdCBJVGV4dCYgYSwKICAgICAgICAgIGNv bnN0IElUZXh0JiBiKQp7CiAgICByZXR1cm4gYS5jb21wYXJlKGIpIDwgMDsKfQoKaW5saW5lCmJv b2wKb3BlcmF0b3I8KGNvbnN0IGlvYzo6dW5pY2hhcl90KiBhLAogICAgICAgICAgY29uc3QgSVRl eHQmIGIpCnsKICAgIHJldHVybiBiLmNvbXBhcmUoYSkgPiAwOwp9CgppbmxpbmUKYm9vbApvcGVy YXRvcjwoY29uc3QgSVRleHQmIGEsCiAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCogYikK ewogICAgcmV0dXJuIGEuY29tcGFyZShiKSA8IDA7Cn0KCmlubGluZQpib29sCm9wZXJhdG9yPihj b25zdCBJVGV4dCYgYSwKICAgICAgICAgIGNvbnN0IElUZXh0JiBiKQp7CiAgICByZXR1cm4gYS5j b21wYXJlKGIpID4gMDsKfQoKaW5saW5lCmJvb2wKb3BlcmF0b3I+KGNvbnN0IGlvYzo6dW5pY2hh cl90KiBhLAogICAgICAgICAgY29uc3QgSVRleHQmIGIpCnsKICAgIHJldHVybiBiLmNvbXBhcmUo YSkgPCAwOwp9CgppbmxpbmUKYm9vbApvcGVyYXRvcj4oY29uc3QgSVRleHQmIGEsCiAgICAgICAg ICBjb25zdCBpb2M6OnVuaWNoYXJfdCogYikKewogICAgcmV0dXJuIGEuY29tcGFyZShiKSA+IDA7 Cn0KCmlubGluZQpib29sCm9wZXJhdG9yPD0oY29uc3QgSVRleHQmIGEsCiAgICAgICAgICAgY29u c3QgSVRleHQmIGIpCnsKICAgIHJldHVybiBhLmNvbXBhcmUoYikgPD0gMDsKfQoKaW5saW5lCmJv b2wKb3BlcmF0b3I8PShjb25zdCBpb2M6OnVuaWNoYXJfdCogYSwKICAgICAgICAgICBjb25zdCBJ VGV4dCYgYikKewogICAgcmV0dXJuIGIuY29tcGFyZShhKSA+PSAwOwp9CgppbmxpbmUKYm9vbApv cGVyYXRvcjw9KGNvbnN0IElUZXh0JiBhLAogICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90 KiBiKQp7CiAgICByZXR1cm4gYS5jb21wYXJlKGIpIDw9IDA7Cn0KCmlubGluZQpib29sCm9wZXJh dG9yPj0oY29uc3QgSVRleHQmIGEsCiAgICAgICAgICAgY29uc3QgSVRleHQmIGIpCnsKICAgIHJl dHVybiBhLmNvbXBhcmUoYikgPj0gMDsKfQoKaW5saW5lCmJvb2wKb3BlcmF0b3I+PShjb25zdCBp b2M6OnVuaWNoYXJfdCogYSwKICAgICAgICAgICBjb25zdCBJVGV4dCYgYikKewogICAgcmV0dXJu IGIuY29tcGFyZShhKSA8PSAwOwp9CgppbmxpbmUKYm9vbApvcGVyYXRvcj49KGNvbnN0IElUZXh0 JiBhLAogICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBiKQp7CiAgICByZXR1cm4gYS5j b21wYXJlKGIpID49IDA7Cn0KCiAKIAogCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8 KHN0ZDo6b3N0cmVhbSYgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVRl eHQmIHRleHQpCgoKCgp7CiAgICBjb25zdCBjaGFyKiBjaGFycyA9IChjb25zdCBjaGFyKikodGV4 dCk7CiAgICAgCgogICAgcmV0dXJuIHN0cmVhbSA8PCBjaGFyczsKfQoKaW5saW5lCgpzdGQ6Omlz dHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiBzdHJlYW0sIElUZXh0JiB0ZXh0KQoKCgp7 CiAgICBzaXplX3QgbWF4Q2hhcnMgPSBzdHJlYW0ud2lkdGgoKTsKICAgIGlmIChtYXhDaGFycyA9 PSAwKQogICAgICAgIG1heENoYXJzID0gdGV4dC5tYXhfc2l6ZSgpOwoKICAgIHNpemVfdCBjaGFy c1JlYWQgPSAwOwogICAgY2hhciBidWZmZXJbMTAxXTsKICAgIHNob3J0IGJ1ZlB0ciA9IDA7CiAg ICBpbnQgY3VyQ2hhcjsKCiAgICBidWZmZXJbMTAwXSA9ICdcMCc7CiAgICB0ZXh0LmVyYXNlKCk7 CiAKIAogCiAKICAgIHdoaWxlIChjaGFyc1JlYWQgPCBtYXhDaGFycyAmJiAhc3RyZWFtLmVvZigp KSB7CiAgICAgICAgY3VyQ2hhciA9IHN0cmVhbS5nZXQoKTsKICAgICAgICBpZiAoY3VyQ2hhciAh PSAoLTEpICAmJiAhIChfX2N0eXBlX2JbKGludCkgKCAoIGN1ckNoYXIgKSApXSAmICh1bnNpZ25l ZCBzaG9ydCBpbnQpICAgX0lTc3BhY2UgKSAgKSB7CiAgICAgICAgICAgIGJ1ZmZlcltidWZQdHIr K10gPSAoY2hhciljdXJDaGFyOwogICAgICAgICAgICBjaGFyc1JlYWQrKzsKICAgICAgICAgICAg aWYgKGJ1ZlB0ciA9PSAxMDApIHsKICAgICAgICAgICAgICAgIHRleHQgKz0gYnVmZmVyOwogICAg ICAgICAgICAgICAgYnVmUHRyID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBl bHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgYnVmZmVyW2J1ZlB0cl0gPSAnXDAnOwog ICAgdGV4dCArPSBidWZmZXI7CgogCiAKIAoKICAgIHJldHVybiBzdHJlYW07Cn0KCmlubGluZQoK c3RkOjppc3RyZWFtJiBnZXRsaW5lKHN0ZDo6aXN0cmVhbSYgc3RyZWFtLCBJVGV4dCYgdGV4dCwg Y2hhciBkZWxpbWl0ZXIpCgoKCnsKICAgIHNpemVfdCBtYXhDaGFycyA9IHN0cmVhbS53aWR0aCgp OwogICAgaWYgKG1heENoYXJzID09IDApCiAgICAgICAgbWF4Q2hhcnMgPSB0ZXh0Lm1heF9zaXpl KCk7CgogICAgc2l6ZV90IGNoYXJzUmVhZCA9IDA7CiAgICBjaGFyIGJ1ZmZlclsxMDFdOwogICAg c2hvcnQgYnVmUHRyID0gMDsKICAgIGludCBjdXJDaGFyOwoKICAgIGJ1ZmZlclsxMDBdID0gJ1ww JzsKICAgIHRleHQuZXJhc2UoKTsKIAogCiAKICAgIHdoaWxlIChjaGFyc1JlYWQgPCBtYXhDaGFy cyAmJiAhc3RyZWFtLmVvZigpKSB7CiAgICAgICAgY3VyQ2hhciA9IHN0cmVhbS5nZXQoKTsKICAg ICAgICBpZiAoY3VyQ2hhciAhPSAoLTEpICAmJiBjdXJDaGFyICE9IGRlbGltaXRlcikgewogICAg ICAgICAgICBidWZmZXJbYnVmUHRyKytdID0gKGNoYXIpY3VyQ2hhcjsKICAgICAgICAgICAgY2hh cnNSZWFkKys7CiAgICAgICAgICAgIGlmIChidWZQdHIgPT0gMTAwKSB7CiAgICAgICAgICAgICAg ICB0ZXh0ICs9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgIGJ1ZlB0ciA9IDA7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGJ1 ZmZlcltidWZQdHJdID0gJ1wwJzsKICAgIHRleHQgKz0gYnVmZmVyOwoKIAogCiAKCiAgICByZXR1 cm4gc3RyZWFtOwp9CgogCgojIDU2NyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pdGV4dC5ocHAiIDIKCgoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUp CiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMzQgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWRhdGUuaW5s IiAyCgogCgppbmxpbmUgSURhdGU6OklEYXRlKE1vbnRoIGFNb250aCwgaW50IGFEYXksIGludCBh WWVhcikKewogICAgdGhpcy0+aW5pdGlhbGl6ZShhTW9udGgsIGFEYXksIGFZZWFyKTsKfQoKaW5s aW5lIElEYXRlOjpJRGF0ZShpbnQgYURheSwgTW9udGggYU1vbnRoLCBpbnQgYVllYXIpCnsKICAg IHRoaXMtPmluaXRpYWxpemUoYU1vbnRoLCBhRGF5LCBhWWVhcik7Cn0KCmlubGluZSBJRGF0ZTo6 SURhdGUoY29uc3QgSURhdGUmIGFEYXRlKSA6CgogICAganVsaWFuKGFEYXRlLmp1bGlhbikKewp9 CgppbmxpbmUgSURhdGU6OklEYXRlKGlvYzo6dW51bWVyaWNfdCBqdWxpYW5EYXlOdW1iZXIpIDoK CiAgICBqdWxpYW4oanVsaWFuRGF5TnVtYmVyKQp7Cn0KCmlubGluZSBJRGF0ZTo6RGF5T2ZXZWVr IElEYXRlOjpkYXlPZldlZWsoKSBjb25zdAp7CiAgICByZXR1cm4gRGF5T2ZXZWVrKHRoaXMtPmp1 bGlhbiAlIDcpOwp9CgppbmxpbmUgaW9jOjp1bnVtZXJpY190IElEYXRlOjpqdWxpYW5EYXRlKCkg Y29uc3QKewogICAgcmV0dXJuIHRoaXMtPmp1bGlhbjsKfQoKaW5saW5lIGJvb2wgSURhdGU6Om9w ZXJhdG9yPT0oY29uc3QgSURhdGUmIGFEYXRlKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+anVs aWFuID09IGFEYXRlLmp1bGlhbjsKfQoKaW5saW5lIGJvb2wgSURhdGU6Om9wZXJhdG9yIT0oY29u c3QgSURhdGUmIGFEYXRlKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+anVsaWFuICE9IGFEYXRl Lmp1bGlhbjsKfQoKaW5saW5lIGJvb2wgSURhdGU6Om9wZXJhdG9yPChjb25zdCBJRGF0ZSYgYURh dGUpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5qdWxpYW4gPCAgYURhdGUuanVsaWFuOwp9Cgpp bmxpbmUgYm9vbCBJRGF0ZTo6b3BlcmF0b3I8PShjb25zdCBJRGF0ZSYgYURhdGUpIGNvbnN0CnsK ICAgIHJldHVybiB0aGlzLT5qdWxpYW4gPD0gYURhdGUuanVsaWFuOwp9CgppbmxpbmUgYm9vbCBJ RGF0ZTo6b3BlcmF0b3I+KGNvbnN0IElEYXRlJiBhRGF0ZSkgY29uc3QKewogICAgcmV0dXJuIHRo aXMtPmp1bGlhbiA+ICBhRGF0ZS5qdWxpYW47Cn0KCmlubGluZSBib29sIElEYXRlOjpvcGVyYXRv cj49KGNvbnN0IElEYXRlJiBhRGF0ZSkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmp1bGlhbiA+ PSBhRGF0ZS5qdWxpYW47Cn0KCmlubGluZSBJRGF0ZSBJRGF0ZTo6b3BlcmF0b3IrKGludCBudW1E YXlzKSBjb25zdAp7CiAgICByZXR1cm4gSURhdGUoIHRoaXMtPmp1bGlhbiArIG51bURheXMgKTsK fQoKaW5saW5lIElEYXRlIElEYXRlOjpvcGVyYXRvci0oaW50IG51bURheXMpIGNvbnN0CnsKICAg IHJldHVybiBJRGF0ZSh0aGlzLT5qdWxpYW4gLSBudW1EYXlzKTsKfQoKaW5saW5lIElEYXRlJiBJ RGF0ZTo6b3BlcmF0b3IrPShpbnQgbnVtRGF5cykKewogICAgdGhpcy0+anVsaWFuICs9IG51bURh eXM7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBJRGF0ZSYgSURhdGU6Om9wZXJhdG9yLT0o aW50IG51bURheXMpCnsKICAgIHRoaXMtPmp1bGlhbiAtPSBudW1EYXlzOwogICAgcmV0dXJuICp0 aGlzOwp9CgppbmxpbmUgaW9jOjpudW1lcmljX3QgSURhdGU6Om9wZXJhdG9yLShjb25zdCBJRGF0 ZSYgYURhdGUpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5qdWxpYW4gLSBhRGF0ZS5qdWxpYW47 Cn0KCmlubGluZSBib29sIElEYXRlOjppc1ZhbGlkKGludCBhRGF5LCBNb250aCBhTW9udGgsIGlu dCBhWWVhcikKewogICAgcmV0dXJuIElEYXRlOjppc1ZhbGlkKGFNb250aCwgYURheSwgYVllYXIp Owp9CgppbmxpbmUgYm9vbCBJRGF0ZTo6aXNWYWxpZChpbnQgYVllYXIsIGludCAgYURheSkKewog ICAgcmV0dXJuKGFZZWFyICE9IDAKICAgICAgICAgICAmJgogICAgICAgICAgIGFEYXkgPD0gSURh dGU6OmRheXNJblllYXIoYVllYXIpKTsKfQoKaW5saW5lIHZvaWQgSURhdGU6Om9wZXJhdG9yPj49 KElEYXRhU3RyZWFtICZ0b1doZXJlKQp7CiAgICB3cml0ZVRvU3RyZWFtKHRvV2hlcmUpOwp9Cgpp bmxpbmUgdm9pZCBJRGF0ZTo6b3BlcmF0b3I8PD0oSURhdGFTdHJlYW0gJmZyb21XaGVyZSkKewog ICAgcmVhZEZyb21TdHJlYW0oZnJvbVdoZXJlKTsKfQoKaW5saW5lCklUZXh0CklEYXRlOjphc1Rl eHQoY29uc3QgaW9jOjp1bmljaGFyX3QgKmZtdCkgY29uc3QKewogICAgcmV0dXJuIGFzVGV4dFVu aUNoYXIoKGNvbnN0IFVuaUNoYXIgKilmbXQpOwp9CgppbmxpbmUKCnN0ZDo6b3N0cmVhbSYgb3Bl cmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sIGNvbnN0IElEYXRlJiBhRGF0ZSkKCgoKewog ICAgcmV0dXJuIGFTdHJlYW0gPDwgYURhdGUuYXNTdHJpbmcoKTsKfQoKIAoKIyAyNjEgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWRhdGUuaHBwIiAy CgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5m byhyZXN0b3JlKQogCgogCgojIDMgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1 ZXVlLmNwcCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2l0aW1lLmhwcCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lzdHJlYW0uaHBwIiAxCiMgNTYgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cmVhbS5ocHAiCgoKCgoKIyAyOSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdGltZS5ocHAi IDIKCgoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lP Q19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKI3ByYWdt YSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVu dW0oNCkKCgoKCgoKCiAKCiAKIAoKIAoKCgoKCgpjbGFzcyBJVGltZTsKY2xhc3MgSVRleHQ7CgoK aW5saW5lIHN0ZDo6b3N0cmVhbSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElUaW1lJiBh VGltZSk7CgoKCiAKCiAKc3RydWN0IElDbnJUaW1lCnsKICAgIHVuc2lnbmVkIGNoYXIgaG91cnM7 CiAgICB1bnNpZ25lZCBjaGFyIG1pbnV0ZXM7CiAgICB1bnNpZ25lZCBjaGFyIHNlY29uZHM7CiAg ICB1bnNpZ25lZCBjaGFyIHVjUmVzZXJ2ZWQ7Cn07CgpjbGFzcyAgIElUaW1lCnsKcHVibGljOgog ICAgIAogICAgSVRpbWUoKTsKICAgIElUaW1lKGlvYzo6bnVtZXJpY190IHNlY29uZHMpOwogICAg SVRpbWUodW5zaWduZWQgaG91cnMsCiAgICAgICAgICB1bnNpZ25lZCBtaW51dGVzLAogICAgICAg ICAgdW5zaWduZWQgc2Vjb25kcyA9IDApOwogICAgSVRpbWUoY29uc3QgSVRpbWUgJmFUaW1lKTsK ICAgIElUaW1lKGNvbnN0IElDbnJUaW1lICZjbnJUaW1lKTsKCiAgICAgCiAgICBzdGF0aWMgSVRp bWUgbm93KCk7CgogICAgIAogICAgSVN0cmluZyBhc1N0cmluZyhjb25zdCBjaGFyKiBmbXQgPSAi JVgiKSBjb25zdDsKIAogCiAKICAgIElUZXh0IGFzVGV4dCgpIGNvbnN0OwogICAgSVRleHQgYXNU ZXh0KGNvbnN0IGlvYzo6dW5pY2hhcl90KiBmbXQpIGNvbnN0OwoKCiAgICBmcmllbmQgc3RkOjpv c3RyZWFtJiAgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFtLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElUaW1lJiBhVGltZSk7CgoK CgogICAgIAogICAgaW9jOjpudW1lcmljX3QgYXNTZWNvbmRzKCkgY29uc3Q7CgogICAgSUNuclRp bWUgYXNJQ25yVGltZSgpIGNvbnN0OwoKICAgIHVuc2lnbmVkIGhvdXJzKCkgY29uc3Q7CiAgICB1 bnNpZ25lZCBtaW51dGVzKCkgY29uc3Q7CiAgICB1bnNpZ25lZCBzZWNvbmRzKCkgY29uc3Q7Cgog ICAgIAogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElUaW1lJiBhVGltZSApIGNvbnN0OwogICAg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IElUaW1lJiBhVGltZSApIGNvbnN0OwogICAgYm9vbCBvcGVy YXRvcjwgKGNvbnN0IElUaW1lJiBhVGltZSApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjw9KGNv bnN0IElUaW1lJiBhVGltZSApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IElUaW1l JiBhVGltZSApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IElUaW1lJiBhVGltZSAp IGNvbnN0OwoKICAgICAKICAgIElUaW1lIG9wZXJhdG9yKyhjb25zdCBJVGltZSYgYVRpbWUpIGNv bnN0OwogICAgSVRpbWUgb3BlcmF0b3ItKGNvbnN0IElUaW1lJiBhVGltZSkgY29uc3Q7CgogICAg SVRpbWUmIG9wZXJhdG9yKz0oY29uc3QgSVRpbWUmIGFUaW1lICk7CiAgICBJVGltZSYgb3BlcmF0 b3ItPShjb25zdCBJVGltZSYgYVRpbWUgKTsKCiAgICAgCiAgICB2b2lkIG9wZXJhdG9yPj49KElE YXRhU3RyZWFtJiB0b1doZXJlKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oSURhdGFTdHJlYW0mIGZy b21XaGVyZSk7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICBJVGltZSYgaW5pdGlhbGl6ZShpb2M6Om51 bWVyaWNfdCBzZWNvbmRzKTsKCiAgICAgCiAgICB2b2lkIHdyaXRlVG9TdHJlYW0oSURhdGFTdHJl YW0mIHRvV2hlcmUpIGNvbnN0OwogICAgdm9pZCByZWFkRnJvbVN0cmVhbShJRGF0YVN0cmVhbSYg ZnJvbVdoZXJlKTsKCgogICAgIAoKCgoKCgoKCnByaXZhdGU6CiAgICBJVGV4dCBhc1RleHRVbmlD aGFyKGNvbnN0IFVuaUNoYXIqIGZtdCkgY29uc3Q7CiAgICBpb2M6Om51bWVyaWNfdCB0aWNrczsK fTsKCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmco cG9wKQoKCgoKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaXRpbWUuaW5sIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCgogCmV4dGVybiAiQyIKewogICAgCn0KCiAKCiAKaW5saW5lIElU aW1lJiBJVGltZSA6OiBpbml0aWFsaXplICggaW9jOjpudW1lcmljX3Qgc2Vjb25kcyApCiAgewog IGNvbnN0IGlvYzo6bnVtZXJpY190IHNlY29uZHNQZXJEYXkgPSAyNCo2MCo2MEw7CiAgaWYgKCBz ZWNvbmRzIDwgMCApCiAgICB0aGlzLT50aWNrcyA9IHNlY29uZHNQZXJEYXkgLSAoLXNlY29uZHMg JSBzZWNvbmRzUGVyRGF5KTsKICBlbHNlCiAgICB0aGlzLT50aWNrcyA9IHNlY29uZHMgJSBzZWNv bmRzUGVyRGF5OwogIHJldHVybiAqdGhpczsKICB9CgogCmlubGluZSBJVGltZSA6OiBJVGltZSAo IHVuc2lnbmVkIGhvdXJzLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW51dGVz LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzZWNvbmRzICkKICB7CiAgaW9jOjpu dW1lcmljX3Qgc2VjcyA9IGhvdXJzOwogIHNlY3MgKj0gNjA7CiAgc2VjcyArPSBtaW51dGVzOwog IHNlY3MgKj0gNjA7CiAgc2VjcyArPSBzZWNvbmRzOwogIHRoaXMtPmluaXRpYWxpemUoIHNlY3Mg KTsKICB9CmlubGluZSBJVGltZSA6OiBJVGltZSAoIGlvYzo6bnVtZXJpY190IHNlY29uZHMgKQog IHsKICB0aGlzLT5pbml0aWFsaXplKCBzZWNvbmRzICk7CiAgfQppbmxpbmUgSVRpbWUgOjogSVRp bWUgKCBjb25zdCBJVGltZSAmYVRpbWUgKQogIHsKICB0aGlzLT50aWNrcyA9IGFUaW1lLnRpY2tz OwogIH0KIAppbmxpbmUgaW9jOjpudW1lcmljX3QgSVRpbWUgOjogYXNTZWNvbmRzICggKSBjb25z dAogIHsKICByZXR1cm4gdGhpcy0+dGlja3M7CiAgfQppbmxpbmUgdW5zaWduZWQgSVRpbWUgOjog aG91cnMgKCApIGNvbnN0CiAgewogICAKICByZXR1cm4gKCh1bnNpZ25lZCkodGhpcy0+dGlja3Mg LyAzNjAwKSk7CiAgfQppbmxpbmUgdW5zaWduZWQgSVRpbWUgOjogbWludXRlcyAoICkgY29uc3QK ICB7CiAgIAogIHJldHVybiAoKHVuc2lnbmVkKSgodGhpcy0+dGlja3MgJSAzNjAwICkgLyA2MCkp OwogIH0KaW5saW5lIHVuc2lnbmVkIElUaW1lIDo6IHNlY29uZHMgKCApIGNvbnN0CiAgewogICAK ICByZXR1cm4gKCh1bnNpZ25lZCkodGhpcy0+dGlja3MgJSA2MCkpOwogIH0KIAppbmxpbmUgYm9v bCBJVGltZSA6OiBvcGVyYXRvciA9PSAoIGNvbnN0IElUaW1lICZhVGltZSApIGNvbnN0CiAgewog IHJldHVybiB0aGlzLT50aWNrcyA9PSBhVGltZS50aWNrczsKICB9CmlubGluZSBib29sIElUaW1l IDo6IG9wZXJhdG9yICE9ICggY29uc3QgSVRpbWUgJmFUaW1lICkgY29uc3QKICB7CiAgcmV0dXJu IHRoaXMtPnRpY2tzICE9IGFUaW1lLnRpY2tzOwogIH0KaW5saW5lIGJvb2wgSVRpbWUgOjogb3Bl cmF0b3IgPCAgKCBjb25zdCBJVGltZSAmYVRpbWUgKSBjb25zdAogIHsKICByZXR1cm4gdGhpcy0+ dGlja3MgPCAgYVRpbWUudGlja3M7CiAgfQppbmxpbmUgYm9vbCBJVGltZSA6OiBvcGVyYXRvciA8 PSAoIGNvbnN0IElUaW1lICZhVGltZSApIGNvbnN0CiAgewogIHJldHVybiB0aGlzLT50aWNrcyA8 PSBhVGltZS50aWNrczsKICB9CmlubGluZSBib29sIElUaW1lIDo6IG9wZXJhdG9yID4gICggY29u c3QgSVRpbWUgJmFUaW1lICkgY29uc3QKICB7CiAgcmV0dXJuIHRoaXMtPnRpY2tzID4gIGFUaW1l LnRpY2tzOwogIH0KaW5saW5lIGJvb2wgSVRpbWUgOjogb3BlcmF0b3IgPj0gKCBjb25zdCBJVGlt ZSAmYVRpbWUgKSBjb25zdAogIHsKICByZXR1cm4gdGhpcy0+dGlja3MgPj0gYVRpbWUudGlja3M7 CiAgfQogCmlubGluZSBJVGltZSYgSVRpbWUgOjogb3BlcmF0b3IgKz0gKCBjb25zdCBJVGltZSAm YVRpbWUgKQogIHsKICByZXR1cm4gdGhpcy0+aW5pdGlhbGl6ZSggdGhpcy0+dGlja3MgKyBhVGlt ZS50aWNrcyApOwogIH0KaW5saW5lIElUaW1lIElUaW1lIDo6IG9wZXJhdG9yICsgKCBjb25zdCBJ VGltZSAmYVRpbWUgKSBjb25zdAogIHsKICByZXR1cm4gSVRpbWUoIHRoaXMtPnRpY2tzICsgYVRp bWUudGlja3MgKTsKICB9CmlubGluZSBJVGltZSYgSVRpbWUgOjogb3BlcmF0b3IgLT0gKCBjb25z dCBJVGltZSAmYVRpbWUgKQogIHsKICByZXR1cm4gdGhpcy0+aW5pdGlhbGl6ZSggdGhpcy0+dGlj a3MgLSBhVGltZS50aWNrcyApOwogIH0KaW5saW5lIElUaW1lIElUaW1lIDo6IG9wZXJhdG9yIC0g KCBjb25zdCBJVGltZSAmYVRpbWUgKSBjb25zdAogIHsKICByZXR1cm4gSVRpbWUoIHRoaXMtPnRp Y2tzIC0gYVRpbWUudGlja3MgKTsKICB9CgoKaW5saW5lIHZvaWQgSVRpbWU6Om9wZXJhdG9yPj49 KElEYXRhU3RyZWFtJiB0b1doZXJlKQp7CiAgICB3cml0ZVRvU3RyZWFtKHRvV2hlcmUpOwp9Cgpp bmxpbmUgdm9pZCBJVGltZTo6b3BlcmF0b3I8PD0oSURhdGFTdHJlYW0mIGZyb21XaGVyZSkKewog ICAgcmVhZEZyb21TdHJlYW0oZnJvbVdoZXJlKTsKfQoKaW5saW5lIElUZXh0IElUaW1lOjphc1Rl eHQoY29uc3QgaW9jOjp1bmljaGFyX3QqIGZtdCkgY29uc3QKewoJcmV0dXJuIGFzVGV4dFVuaUNo YXIoKGNvbnN0IFVuaUNoYXIgKilmbXQpOwp9CgppbmxpbmUKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0 b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sIGNvbnN0IElUaW1lJiBhVGltZSkKCgoKewogICAg cmV0dXJuIGFTdHJlYW0gPDwgYVRpbWUuYXNTdHJpbmcoKTsKfQoKIAoKIyAxOTEgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXRpbWUuaHBwIiAyCgog CgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgogCgoKCgoKCiMgNCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21x cXVldWUuY3BwIiAyCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2ljb25kaXRuLmhwcCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJoYW5kbGUuaHBwIiAxCgoKCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKCiAKCgoKZXh0ZXJuICJDIgp7CgoKICAgICAKICAgIAojIDU3ICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liaGFuZGxlLmhwcCIKCgogICAgCgoK ICAgIAoKCgogICAgCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoK CiAKCgoKIAoKCgogCgoKCiAKCgoKCgoKIAoKCiAKCgoKCiAKCgogCgoKIAoKCgogCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5o IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoK CiAKCgogCiAKCiAKCgogCgogCgoKIAoKCiAKCgoKCgojIDE3NSAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAyIDMKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25t ZW50cy5oIiAyIDMKCgogCgoKCgoKCgoKCgoKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJv bm1lbnRzLmgiIDMKCgogCgoKIAoKCiAKCgoKCiMgMTc5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDIgMwoKCgogCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3Vz ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8y Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2Mt bGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoK CiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2Mt bGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKIyAxOTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIF9faW50cHRyX3QgaW50cHRy X3Q7CgoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBhY2Nlc3MgIChfX2NvbnN0IGNoYXIgKl9fbmFt ZSwgaW50IF9fdHlwZSkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGludCBldWlkYWNjZXNzICAo X19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpICB0aHJvdyAoKSAgOwoKCgogCgoKCgoK CgogCgoKCgoKCiAKCgoKCmV4dGVybiBfX29mZl90IF9fbHNlZWsgIChpbnQgX19mZCwgX19vZmZf dCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBfX29mZl90IGxz ZWVrICAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgIHRocm93ICgp ICA7CiMgMjg5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgpleHRlcm4gX19vZmY2NF90IGxz ZWVrNjQgIChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpICB0aHJv dyAoKSAgOwoKCiAKZXh0ZXJuIGludCBfX2Nsb3NlICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwpl eHRlcm4gaW50IGNsb3NlICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHNzaXpl X3QgIF9fcmVhZCAgKGludCBfX2ZkLCB2b2lkICogIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMpICB0 aHJvdyAoKSAgOwpleHRlcm4gc3NpemVfdCAgcmVhZCAgKGludCBfX2ZkLCB2b2lkICogIF9fYnVm LCBzaXplX3QgX19uYnl0ZXMpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gc3NpemVfdCAgX193cml0 ZSAgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICB0aHJvdyAo KSAgOwpleHRlcm4gc3NpemVfdCAgd3JpdGUgIChpbnQgX19mZCwgX19jb25zdCB2b2lkICogIF9f YnVmLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIHNzaXplX3QgIF9fcHJl YWQ2NCAgKGludCBfX2ZkLCB2b2lkICogIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCgkJCSAgICAg ICBfX29mZjY0X3QgX19vZmZzZXQpICB0aHJvdyAoKSAgOwogCgpleHRlcm4gc3NpemVfdCAgX19w d3JpdGU2NCAgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24sCgkJ CQlfX29mZjY0X3QgX19vZmZzZXQpICB0aHJvdyAoKSAgOwoKCmV4dGVybiBzc2l6ZV90ICBwcmVh ZCAgKGludCBfX2ZkLCB2b2lkICogIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCgkJCSAgIF9fb2Zm X3QgX19vZmZzZXQpICB0aHJvdyAoKSAgOwpleHRlcm4gc3NpemVfdCAgcHdyaXRlICAoaW50IF9f ZmQsIF9fY29uc3Qgdm9pZCAqICBfX2J1Ziwgc2l6ZV90IF9fbiwKCQkJICAgIF9fb2ZmX3QgX19v ZmZzZXQpICB0aHJvdyAoKSAgOwojIDMzNSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCmV4 dGVybiBzc2l6ZV90ICBwcmVhZDY0ICAoaW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBf X25ieXRlcywKCQkJICAgICBfX29mZjY0X3QgX19vZmZzZXQpICB0aHJvdyAoKSAgOwpleHRlcm4g c3NpemVfdCAgcHdyaXRlNjQgIChpbnQgX19mZCwgX19jb25zdCB2b2lkICogIF9fYnVmLCBzaXpl X3QgX19uLAoJCQkgICAgICBfX29mZjY0X3QgX19vZmZzZXQpICB0aHJvdyAoKSAgOwoKCgogCgoK CmV4dGVybiBpbnQgcGlwZSAgKGludCBfX3BpcGVkZXNbMl0pICB0aHJvdyAoKSAgOwoKIAoKCgoK CgpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgIHRo cm93ICgpICA7CgogCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgICh1bnNpZ25lZCBp bnQgX19zZWNvbmRzKSAgdGhyb3cgKCkgIDsKCgogCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgdWFs YXJtICAodW5zaWduZWQgaW50IF9fdmFsdWUsCgkJCQkgdW5zaWduZWQgaW50IF9faW50ZXJ2YWwp ICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHZvaWQgdXNsZWVwICAodW5zaWduZWQgaW50IF9fdXNl Y29uZHMpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gaW50IHBhdXNlICAodm9pZCkgIHRocm93 ICgpICA7CgoKIApleHRlcm4gaW50IGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlk X3QgX19vd25lciwKCQkgICAgICAgX19naWRfdCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgogCmV4 dGVybiBpbnQgZmNob3duICAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dy b3VwKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50IGxjaG93biAgKF9fY29uc3QgY2hhciAq X19maWxlLCBfX3VpZF90IF9fb3duZXIsCgkJCV9fZ2lkX3QgX19ncm91cCkgIHRocm93ICgpICA7 CgoKCiAKZXh0ZXJuIGludCBjaGRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAgdGhyb3cgKCkg IDsKCgogCmV4dGVybiBpbnQgZmNoZGlyICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKCiAKCgoK CgoKZXh0ZXJuIGNoYXIgKmdldGN3ZCAgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSAgdGhy b3cgKCkgIDsKCgogCgoKZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICAodm9pZCkg IHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gY2hhciAqZ2V0d2QgIChjaGFyICpfX2J1ZikgIHRo cm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBkdXAgIChpbnQgX19mZCkgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgZHVwMiAgKGludCBfX2ZkLCBpbnQgX19mZDIpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVybiBjaGFyICoqZW52aXJvbjsKCgoKIAoKZXh0 ZXJuIGludCBleGVjdmUgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2Fy Z3ZbXSwKCQkJY2hhciAqX19jb25zdCBfX2VudnBbXSkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJu IGludCBmZXhlY3ZlICAoaW50IF9fZmQsCgkJCSBjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFy ICpfX2NvbnN0IF9fZW52cFtdKSAgdGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJuIGludCBleGVjdiAg KF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSAgdGhyb3cgKCkg IDsKCiAKCmV4dGVybiBpbnQgZXhlY2xlICAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3Qg Y2hhciAqX19hcmcsIC4uLikgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGV4ZWNsICAoX19j b25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgIHRocm93ICgpICA7 CgogCgpleHRlcm4gaW50IGV4ZWN2cCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2Nv bnN0IF9fYXJndltdKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gaW50IGV4ZWNscCAgKF9fY29u c3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICB0aHJvdyAoKSAgOwoK CgogCmV4dGVybiBpbnQgbmljZSAgKGludCBfX2luYykgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJu IHZvaWQgX2V4aXQgIChpbnQgX19zdGF0dXMpICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f XykpOwoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCmVudW0KICB7CiAgICBfUENfTElOS19NQVgsCgogICAgX1BDX01B WF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENf UEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoK ICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgog ICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwK CiAgICBfUENfRklMRVNJWkVCSVRTCgogIH07CgogCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwK CiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01B WCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFN RV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1ND X1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1ND X1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9J TywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQ UEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAg IF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9T Q19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJ T19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9N QVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBf U0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAg ICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFM VUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgogICAg IAoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNf U0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNf TUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgog ICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1Nf TkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9T Q18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAg IF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAg X1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwK CiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9T Q19VSU9fTUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlf SU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9D TFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgogICAgIAogICAg X1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VU R1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5f TkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNU T1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURf U1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9B VFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19U SFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwK CiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hB UkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05M TiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19B VEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgog ICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19Y T1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwK CgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9V UEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19Y T1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9T Q19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0Nf TE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9T Q19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1ND X1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9T Q19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAg X1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwK CiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgs CgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9T Q19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19Y QlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5f UkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMKCiAgfTsKCgoKCiAKZW51 bQogIHsKICAgIF9DU19QQVRICQkJIAoKCgoKICAgICwKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAw MCwKCiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNf TElOVEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1Ms CgogICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUwoKCgoKICAgICwK ICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAsCgogICAgX0NTX1hCUzVfSUxQ MzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSUJTLAoKICAgIF9D U19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdf Q0ZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1 X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1Ms CgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2 NF9MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfWEJTNV9M UDY0X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoK ICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09G RkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MKCgogIH07Cgoj IDQ5NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgogCmV4dGVybiBsb25nIGludCBwYXRo Y29uZiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAK ZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAgKGludCBfX2ZkLCBpbnQgX19uYW1lKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IHN5c2NvbmYgIChpbnQgX19uYW1lKSAgdGhyb3cgKCkg IDsKCgogCmV4dGVybiBzaXplX3QgY29uZnN0ciAgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBz aXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBfX3BpZF90IF9fZ2V0cGlkICAo dm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBfX3BpZF90IGdldHBpZCAgKHZvaWQpICB0aHJvdyAo KSAgOwoKIApleHRlcm4gX19waWRfdCBnZXRwcGlkICAodm9pZCkgIHRocm93ICgpICA7CgogCgoK ZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCiAKZXh0 ZXJuIF9fcGlkX3QgX19nZXRwZ2lkICAoX19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgpleHRl cm4gX19waWRfdCBnZXRwZ2lkICAoX19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgoKCiAKCgpl eHRlcm4gaW50IF9fc2V0cGdpZCAgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSAgdGhy b3cgKCkgIDsKZXh0ZXJuIGludCBzZXRwZ2lkICAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3Bn aWQpICB0aHJvdyAoKSAgOwoKCiAKCgoKCgoKCgoKCgogCgpleHRlcm4gaW50IHNldHBncnAgICh2 b2lkKSAgdGhyb3cgKCkgIDsKCiMgNTczICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoK CmV4dGVybiBfX3BpZF90IHNldHNpZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIF9f cGlkX3QgZ2V0c2lkICAoX19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gX191 aWRfdCBnZXR1aWQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVp ZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gX19naWRfdCBnZXRnaWQgICh2b2lkKSAg dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAgKHZvaWQpICB0aHJvdyAoKSAg OwoKIAoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzICAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3Rb XSkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IGdyb3VwX21lbWJlciAgKF9fZ2lkX3QgX19n aWQpICB0aHJvdyAoKSAgOwoKCiAKCgoKZXh0ZXJuIGludCBzZXR1aWQgIChfX3VpZF90IF9fdWlk KSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50IHNldHJldWlkICAoX191aWRfdCBfX3J1aWQs IF9fdWlkX3QgX19ldWlkKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IHNldGV1aWQgIChf X3VpZF90IF9fdWlkKSAgdGhyb3cgKCkgIDsKCgogCgoKCmV4dGVybiBpbnQgc2V0Z2lkICAoX19n aWRfdCBfX2dpZCkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGludCBzZXRyZWdpZCAgKF9fZ2lk X3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBz ZXRlZ2lkICAoX19naWRfdCBfX2dpZCkgIHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gX19waWRf dCBfX2ZvcmsgICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIF9fcGlkX3QgZm9yayAgKHZvaWQp ICB0aHJvdyAoKSAgOwoKCiAKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgICh2b2lkKSAgdGhyb3cg KCkgIDsKCgoKIAoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgIChpbnQgX19mZCkgIHRocm93ICgpICA7 CgogCgpleHRlcm4gaW50IHR0eW5hbWVfciAgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgaXNhdHR5ICAoaW50IF9fZmQp ICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgdHR5c2xvdCAgKHZvaWQpICB0aHJvdyAoKSAg OwoKCgogCmV4dGVybiBpbnQgbGluayAgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNo YXIgKl9fdG8pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBzeW1saW5rICAoX19jb25zdCBj aGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgIHRocm93ICgpICA7CgogCgoKZXh0ZXJu IGludCByZWFkbGluayAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgdW5saW5rICAoX19jb25zdCBjaGFy ICpfX25hbWUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHJtZGlyICAoX19jb25zdCBjaGFy ICpfX3BhdGgpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwICAoaW50 IF9fZmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHRjc2V0cGdycCAgKGludCBfX2ZkLCBf X3BpZF90IF9fcGdycF9pZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gY2hhciAqZ2V0bG9naW4g ICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgogCmV4dGVybiBpbnQgc2V0bG9naW4gIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgoKCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2dldG9wdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoK IAoKCgoKCmV4dGVybiBjaGFyICpvcHRhcmc7CgogCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBvcHRp bmQ7CgogCgoKZXh0ZXJuIGludCBvcHRlcnI7CgogCgpleHRlcm4gaW50IG9wdG9wdDsKCiMgMTAy ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBj b25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CgoKCgojIDE1MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5o IiAzCgojIDE2MCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCgoKCn0KCgogCgoKCiMgNzI0ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgogCgoKZXh0ZXJuIGludCBnZXRob3N0bmFt ZSAgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBp bnQgc2V0aG9zdG5hbWUgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSAgdGhy b3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgc2V0aG9zdGlkICAobG9uZyBpbnQgX19pZCkgIHRocm93 ICgpICA7CgoKIAoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAgKGNoYXIgKl9fbmFtZSwgc2l6 ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lICAoX19jb25z dCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50 IGZzeW5jICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKCiAKCgpleHRlcm4gaW50IHZoYW5ndXAg ICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCByZXZva2UgIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSkgIHRocm93ICgpICA7CgoKIAoKCgoKZXh0ZXJuIGludCBwcm9maWwgICh1bnNpZ25l ZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKCQkJc2l6ZV90IF9f b2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19zY2FsZSkgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiBp bnQgYWNjdCAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBp bnQgY2hyb290ICAoX19jb25zdCBjaGFyICpfX3BhdGgpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJu IGNoYXIgKmdldHVzZXJzaGVsbCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCBlbmR1 c2Vyc2hlbGwgICh2b2lkKSAgdGhyb3cgKCkgIDsgIApleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwg ICh2b2lkKSAgdGhyb3cgKCkgIDsgIAoKCiAKCmV4dGVybiBjaGFyICpnZXRwYXNzICAoX19jb25z dCBjaGFyICpfX3Byb21wdCkgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBkYWVtb24gIChp bnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSAgdGhyb3cgKCkgIDsKCgoKCgoKIApleHRlcm4g bG9uZyBpbnQgZ2V0aG9zdGlkICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgc3lu YyAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgX19nZXRwYWdlc2l6ZSAgKHZv aWQpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGludCBn ZXRwYWdlc2l6ZSAgKHZvaWQpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgogCgpleHRlcm4gaW50IHRydW5jYXRlICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2Zm X3QgX19sZW5ndGgpICB0aHJvdyAoKSAgOwojIDgyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CgoKZXh0ZXJuIGludCB0cnVuY2F0ZTY0ICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRf dCBfX2xlbmd0aCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50IF9fZnRydW5jYXRlICAoaW50 IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBmdHJ1bmNh dGUgIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgIHRocm93ICgpICA7CgoKCgoKCgoKCmV4 dGVybiBpbnQgZnRydW5jYXRlNjQgIChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSAgdGhy b3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICAodm9pZCkgIHRocm93ICgp ICA7CgoKCgoKCiAKCmV4dGVybiBpbnQgYnJrICAodm9pZCAqICBfX2FkZHIpICB0aHJvdyAoKSAg OwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2Ut bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2dj Yy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoK CgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgODYz ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCiAKCgoKZXh0ZXJuIHZvaWQgKiAgX19zYnJr ICAocHRyZGlmZl90IF9fZGVsdGEpICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCAqICBzYnJrICAo cHRyZGlmZl90IF9fZGVsdGEpICB0aHJvdyAoKSAgOwoKCgoKIAoKCgoKCgoKCgpleHRlcm4gbG9u ZyBpbnQgc3lzY2FsbCAgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgIHRocm93ICgpICA7CgoKCgoK IAoKCgogCgoKCgoKCgoKCmV4dGVybiBpbnQgbG9ja2YgIChpbnQgX19mZCwgaW50IF9fY21kLCBf X29mZl90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKZXh0ZXJuIGludCBsb2NrZjY0ICAo aW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgoKCgoK IAoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIGludCBfX2xpYmNfZW5hYmxlX3NlY3VyZTsKCgoKCiAK CmV4dGVybiBpbnQgZmRhdGFzeW5jICAoaW50IF9fZmlsZGVzKSAgdGhyb3cgKCkgIDsKCgoKIAoK CiAKZXh0ZXJuIGNoYXIgKmNyeXB0ICAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFy ICpfX3NhbHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBzZXRrZXkgIChfX2NvbnN0IGNo YXIgKl9fa2V5KSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiB2b2lkIGVuY3J5cHQgIChjaGFyICpf X2Jsb2NrLCBpbnQgX19lZGZsYWcpICB0aHJvdyAoKSAgOwoKCiAKCgoKZXh0ZXJuIHZvaWQgc3dh YiAgKF9fY29uc3Qgdm9pZCAqICBfX2Zyb20sIHZvaWQgKiAgX190bywgc3NpemVfdCAgX19uKSAg dGhyb3cgKCkgIDsKCgoKIAoKCiAKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgIChjaGFyICpfX3MpICB0 aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgIChjaGFyICpfX3MpICB0aHJvdyAo KSAgOwoKIApleHRlcm4gaW50IHJlbmFtZSAgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3Qg Y2hhciAqX19uZXcpICB0aHJvdyAoKSAgOwoKCgoKIAoKIAoKCgoKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfYXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAoJCQkJdm9pZCAoKl9fcGFy ZW50KSAodm9pZCksCgkJCQl2b2lkICgqX19jaGlsZCkgKHZvaWQpKSAgdGhyb3cgKCkgIDsKCgp9 IAoKCiMgNjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWJoYW5kbGUuaHBwIiAyCgogICAgCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9h c20vZXJybm8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNCAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwoKCiMgMTQgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5o IiAzCgoKCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMwoKCiAKCgogCgoKCgog CmV4dGVybiBpbnQgZXJybm87CgogCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gICh2b2lk KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgogCgoKCgoK CgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoK IAoKCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2Nh dGlvbl9zaG9ydF9uYW1lOwoKCgp9IAoKCgogCgoKCgoKdHlwZWRlZiBpbnQgZXJyb3JfdDsKCgoK CiMgNjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWJoYW5kbGUuaHBwIiAyCgoKCgoKCn0KCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXZ0ZGF0YS5ocHAiIDEKCgoKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKIAoKIAojcHJhZ21h IGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVW RUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19J T0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAK IAoKIAogCgogCgpjbGFzcyAgIElFdmVudERhdGEKewpwdWJsaWM6CiAgICAgCiAgICBJRXZlbnRE YXRhKCApOwoKICAgIElFdmVudERhdGEoYm9vbCB2YWx1ZSk7CgogICAgSUV2ZW50RGF0YSh2b2lk KiB2YWx1ZSk7CiAgICBJRXZlbnREYXRhKHVuc2lnbmVkIGxvbmcgdmFsdWUpOwogICAgSUV2ZW50 RGF0YShpbnQgdmFsdWUpOwogICAgSUV2ZW50RGF0YSh1bnNpZ25lZCBzaG9ydCBsb3dWYWx1ZSwg dW5zaWduZWQgc2hvcnQgaGlWYWx1ZSk7CiAgICBJRXZlbnREYXRhKHVuc2lnbmVkIHNob3J0IGxv d1ZhbHVlLCBjaGFyIGxvd0J5dGUsIGNoYXIgaGlCeXRlKTsKCiAgICAgCiAgICB1bnNpZ25lZCBz aG9ydCBsb3dOdW1iZXIoKSBjb25zdDsKICAgIHVuc2lnbmVkIHNob3J0IGhpZ2hOdW1iZXIoKSBj b25zdDsKICAgIHVuc2lnbmVkIHNob3J0IG51bWJlcjEoKSBjb25zdDsKICAgIHVuc2lnbmVkIHNo b3J0IG51bWJlcjIoKSBjb25zdDsKCiAgICBjaGFyIGxvd0xvd0J5dGUoKSBjb25zdDsKICAgIGNo YXIgbG93SGlnaEJ5dGUoKSBjb25zdDsKICAgIGNoYXIgaGlnaExvd0J5dGUoKSBjb25zdDsKICAg IGNoYXIgaGlnaEhpZ2hCeXRlKCkgY29uc3Q7CiAgICBjaGFyIGNoYXIxKCkgY29uc3Q7CiAgICBj aGFyIGNoYXIyKCkgY29uc3Q7CiAgICBjaGFyIGNoYXIzKCkgY29uc3Q7CiAgICBjaGFyIGNoYXI0 KCkgY29uc3Q7CgogICAgIAogICAgdW5zaWduZWQgbG9uZyBhc1Vuc2lnbmVkTG9uZygpIGNvbnN0 OwogICAgbG9uZyBhc0xvbmcoKSBjb25zdDsKCiAgICBvcGVyYXRvciBjaGFyKigpIGNvbnN0Owog ICAgb3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0OwoKcHJpdmF0ZToKICAgICAKICAgIHZv aWQqIHB2Q2xNc2c7Cn07Cgp0eXBlZGVmIElFdmVudERhdGEgSUV2ZW50UGFyYW1ldGVyMTsKdHlw ZWRlZiBJRXZlbnREYXRhIElFdmVudFBhcmFtZXRlcjI7CnR5cGVkZWYgSUV2ZW50RGF0YSBJTG93 RXZlbnRQYXJhbWV0ZXI7CnR5cGVkZWYgSUV2ZW50RGF0YSBJSGlnaEV2ZW50UGFyYW1ldGVyOwp0 eXBlZGVmIElFdmVudERhdGEgSUV2ZW50UmVzdWx0OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVt KHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXZ0ZGF0YS5pbmwiIDEK CgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgppbmxpbmUg SUV2ZW50RGF0YSA6OiBJRXZlbnREYXRhICggKQogIDogcHZDbE1zZyAoIDAgKQogIHsgfQoKaW5s aW5lIElFdmVudERhdGEgOjogSUV2ZW50RGF0YSAoIGJvb2wgdmFsdWUgKQogIHsKICBwdkNsTXNn ID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdmFsdWUpOwogIH0KCmlubGluZSBJRXZlbnREYXRh IDo6IElFdmVudERhdGEgKCB2b2lkKiB2YWx1ZSApCiAgewogIHB2Q2xNc2cgPSB2YWx1ZTsKICB9 CmlubGluZSBJRXZlbnREYXRhIDo6IElFdmVudERhdGEgKCB1bnNpZ25lZCBsb25nIHZhbHVlICkK ICB7CiAgcHZDbE1zZyA9ICh2b2lkKil2YWx1ZTsKICB9CmlubGluZSBJRXZlbnREYXRhIDo6IElF dmVudERhdGEgKCBpbnQgdmFsdWUgKQogIHsKICBwdkNsTXNnID0gKHZvaWQqKSgodW5zaWduZWQg bG9uZyl2YWx1ZSk7CiAgfQppbmxpbmUgSUV2ZW50RGF0YSA6OiBJRXZlbnREYXRhICggdW5zaWdu ZWQgc2hvcnQgbG93VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBzaG9ydCBoaVZhbHVlICkKICB7CiAgcHZDbE1zZyA9ICh2b2lkKikobG93VmFsdWUgfCAo dW5zaWduZWQgbG9uZyloaVZhbHVlIDw8IDE2KTsKICB9CmlubGluZSBJRXZlbnREYXRhIDo6IElF dmVudERhdGEgKCB1bnNpZ25lZCBzaG9ydCBsb3dWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgbG93Qnl0ZSwgY2hhciBoaUJ5dGUgKQogIHsKICB1bnNpZ25lZCBz aG9ydCBoaVZhbHVlID0gKHVuc2lnbmVkIHNob3J0KShsb3dCeXRlIHwgKHVuc2lnbmVkIHNob3J0 KWhpQnl0ZSA8PAogIDgpOyBwdkNsTXNnID0gKHZvaWQqKShsb3dWYWx1ZSB8ICh1bnNpZ25lZCBs b25nKWhpVmFsdWUgPDwgMTYpOwogIH0KaW5saW5lIGNoYXIgIElFdmVudERhdGEgOjogbG93TG93 Qnl0ZSAoICkgY29uc3QKICB7CiAgcmV0dXJuIChjaGFyKSh1bnNpZ25lZCBsb25nKXB2Q2xNc2c7 CiAgfQppbmxpbmUgY2hhciAgSUV2ZW50RGF0YSA6OiBsb3dIaWdoQnl0ZSAoICkgY29uc3QKICB7 CiAgcmV0dXJuIChjaGFyKSgodW5zaWduZWQgbG9uZylwdkNsTXNnID4+IDgpOwogIH0KaW5saW5l IGNoYXIgIElFdmVudERhdGEgOjogaGlnaExvd0J5dGUgKCApIGNvbnN0CiAgewogIHJldHVybiAo Y2hhcikoKHVuc2lnbmVkIGxvbmcpcHZDbE1zZyA+PiAxNik7CiAgfQppbmxpbmUgY2hhciAgSUV2 ZW50RGF0YSA6OiBoaWdoSGlnaEJ5dGUgKCApIGNvbnN0CiAgewogIHJldHVybiAoY2hhcikoKHVu c2lnbmVkIGxvbmcpcHZDbE1zZyA+PiAyNCk7CiAgfQppbmxpbmUgY2hhciAgSUV2ZW50RGF0YSA6 OiBjaGFyMSAoICkgY29uc3QKICB7CiAgcmV0dXJuIGxvd0xvd0J5dGUoKTsKICB9CmlubGluZSBj aGFyICBJRXZlbnREYXRhIDo6IGNoYXIyICggKSBjb25zdAogIHsKICByZXR1cm4gbG93SGlnaEJ5 dGUoKTsKICB9CmlubGluZSBjaGFyICBJRXZlbnREYXRhIDo6IGNoYXIzICggKSBjb25zdAogIHsK ICByZXR1cm4gaGlnaExvd0J5dGUoKTsKICB9CmlubGluZSBjaGFyICBJRXZlbnREYXRhIDo6IGNo YXI0ICggKSBjb25zdAogIHsKICByZXR1cm4gaGlnaEhpZ2hCeXRlKCk7CiAgfQppbmxpbmUgdW5z aWduZWQgc2hvcnQgIElFdmVudERhdGEgOjogbG93TnVtYmVyICggKSBjb25zdAogIHsKICByZXR1 cm4gKHVuc2lnbmVkIHNob3J0KSh1bnNpZ25lZCBsb25nKXB2Q2xNc2c7CiAgfQppbmxpbmUgdW5z aWduZWQgc2hvcnQgIElFdmVudERhdGEgOjogaGlnaE51bWJlciAoICkgY29uc3QKICB7CiAgcmV0 dXJuICh1bnNpZ25lZCBzaG9ydCkoKHVuc2lnbmVkIGxvbmcpcHZDbE1zZyA+PiAxNik7CiAgfQpp bmxpbmUgdW5zaWduZWQgc2hvcnQgIElFdmVudERhdGEgOjogbnVtYmVyMSAoICkgY29uc3QKICB7 CiAgcmV0dXJuIGxvd051bWJlcigpOwogIH0KaW5saW5lIHVuc2lnbmVkIHNob3J0ICBJRXZlbnRE YXRhIDo6IG51bWJlcjIgKCApIGNvbnN0CiAgewogIHJldHVybiBoaWdoTnVtYmVyKCk7CiAgfQpp bmxpbmUgdW5zaWduZWQgbG9uZyAgSUV2ZW50RGF0YSA6OiBhc1Vuc2lnbmVkTG9uZyAoICkgY29u c3QKICB7CiAgcmV0dXJuICh1bnNpZ25lZCBsb25nKXB2Q2xNc2c7CiAgfQppbmxpbmUgbG9uZyAg SUV2ZW50RGF0YSA6OiBhc0xvbmcgKCApIGNvbnN0CiAgewogIHJldHVybiAobG9uZylwdkNsTXNn OwogIH0KaW5saW5lIElFdmVudERhdGEgOjogb3BlcmF0b3IgY2hhciogKCApIGNvbnN0CiAgewog IHJldHVybiAoY2hhciopcHZDbE1zZzsKICB9CmlubGluZSBJRXZlbnREYXRhIDo6IG9wZXJhdG9y IHVuc2lnbmVkIGxvbmcgKCApIGNvbnN0CiAgewogIHJldHVybiAodW5zaWduZWQgbG9uZylwdkNs TXNnOwogIH0KCiAKCiMgMTM4ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2lldnRkYXRhLmhwcCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3By YWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyA3NSAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmhhbmRsZS5ocHAi IDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pc3RyZWFtLmhwcCIgMQojIDU2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lzdHJlYW0uaHBwIgoKCgoKCiMgNzYgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJoYW5kbGUuaHBwIiAyCgogCgogCiNw cmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9S VF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKIAoKIAoKI3ByYWdtYSBuYW1lbWFu Z2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoK CgoKCiAKCiAKIAoKIApjbGFzcyBJU3RyaW5nOwpjbGFzcyBJSGFuZGxlOwpjbGFzcyBJVGhyZWFk SWQ7CmNsYXNzIElQcm9jZXNzSWQ7CmNsYXNzIElFbnVtSGFuZGxlOwpjbGFzcyBJUHJpdmF0ZVNl bWFwaG9yZUhhbmRsZTsKY2xhc3MgSVNoYXJlZFNlbWFwaG9yZUhhbmRsZTsKY2xhc3MgSU1vZHVs ZUhhbmRsZTsKCgppbmxpbmUgc3RkOjpvc3RyZWFtJiAgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt JiBhU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgSUhhbmRsZSYgYUhhbmRsZSk7CmlubGluZSBzdGQ6Om9zdHJlYW0mICAgb3BlcmF0b3I8PChz dGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBJVGhyZWFkSWQmIGFIYW5kbGUpOwoKCgoKCmlubGluZSBzdGQ6Om9zdHJl YW0mICAgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJUHJvY2Vzc0lkJiBhSGFuZGxlKTsKaW5s aW5lIHN0ZDo6b3N0cmVhbSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFbnVtSGFuZGxl JiBhSGFuZGxlKTsKaW5saW5lIHN0ZDo6b3N0cmVhbSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVh bSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IElQcml2YXRlU2VtYXBob3JlSGFuZGxlJiBhSGFuZGxlKTsKaW5saW5lIHN0ZDo6b3N0cmVh bSYgICBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTaGFyZWRTZW1hcGhvcmVIYW5kbGUmIGFI YW5kbGUpOwppbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0 cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTW9kdWxlSGFuZGxl JiBhSGFuZGxlKTsKIyAxNTkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaWJoYW5kbGUuaHBwIgoKCmJvb2wgICBvcGVyYXRvcj09KGNvbnN0IElUaHJl YWRJZCAmdGhyZWFkSWQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJVGhyZWFk SWQgJnRocmVhZElkMik7CmJvb2wgICBvcGVyYXRvciE9KGNvbnN0IElUaHJlYWRJZCAmdGhyZWFk SWQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJVGhyZWFkSWQgJnRocmVhZElk Mik7CgogCgogCgpjbGFzcyAgIElIYW5kbGUKewpwdWJsaWM6CiAgICAgCgoKCiAgICB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgVmFsdWU7CgoKICAgICAKICAgIElIYW5kbGUgKFZhbHVlIHZhbHVlKTsK CiAgICAgCiAgICBJU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7CiAgICBJU3RyaW5nIGFzRGVidWdJ bmZvKCkgY29uc3Q7CgoKICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0gIAogICAgICAgICZvcGVyYXRv cjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwgY29uc3QgSUhhbmRsZSYgYUhhbmRsZSk7CgoKCgoK ICAgIHVuc2lnbmVkIGxvbmcgYXNVbnNpZ25lZCgpIGNvbnN0OwoKICAgICAKICAgIG9wZXJhdG9y IFZhbHVlKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICBWYWx1ZSBoYW5kbGU7Cn07CgoK Y2xhc3MgICBJVGhyZWFkSWQKewpwdWJsaWM6CiAgICAgCiAgICBJVGhyZWFkSWQoKTsKICAgIElU aHJlYWRJZChjb25zdCBJVGhyZWFkSWQmIHRpZCApOwogICAgSVRocmVhZElkJiBvcGVyYXRvcj0g KCBjb25zdCBJVGhyZWFkSWQmIHRpZCApOwoKCgoKICAgIElUaHJlYWRJZCh1bnNpZ25lZCBsb25n IHRoaWQpOwoKCiAgICAgCiAgICB+SVRocmVhZElkKCk7CgoKICAgICAKICAgIGZyaWVuZCBib29s ICAgb3BlcmF0b3I9PSggIGNvbnN0IElUaHJlYWRJZCAgJnRocmVhZElkMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElUaHJlYWRJZCAgJnRocmVhZElkMik7 CgogICAgZnJpZW5kIGJvb2wgICBvcGVyYXRvciE9KCAgY29uc3QgSVRocmVhZElkICAmdGhyZWFk SWQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVRocmVh ZElkICAmdGhyZWFkSWQyKTsKCiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCgogICAgIAogICAg SVN0cmluZyBhc1N0cmluZygpIGNvbnN0OwogICAgSVN0cmluZyBhc0RlYnVnSW5mbygpIGNvbnN0 OwoKCiAgICBmcmllbmQgc3RkOjpvc3RyZWFtICAgJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYg YVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgSVRocmVhZElkJiBhSGFuZGxlICk7CgoKCgoKCiAgICB1bnNpZ25lZCBsb25nIGFzVW5z aWduZWQoKSBjb25zdDsKCgoKCgoKCgogICAgIAoKICAgIG9wZXJhdG9yIHVuc2lnbmVkIGxvbmco KSBjb25zdDsKCgoKCnByaXZhdGU6CgoKCgogICAgdW5zaWduZWQgbG9uZyAgIGZTeXN0ZW1UaHJl YWRJZDsKCn07CgoKIyAzMDYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaWJoYW5kbGUuaHBwIgoKdHlwZWRlZiBJVGhyZWFkSWQgSVRocmVhZEhhbmRs ZTsKCgoKY2xhc3MgICBJUHJvY2Vzc0lkCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiB1bnNpZ25l ZCBsb25nIFZhbHVlOwoKCiAgICAgCiAgICBJUHJvY2Vzc0lkKFZhbHVlIHBpZCA9IDApOwoKICAg ICAKICAgIElTdHJpbmcgYXNTdHJpbmcoKSBjb25zdDsKICAgIElTdHJpbmcgYXNEZWJ1Z0luZm8o KSBjb25zdDsKCgogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSAgICZvcGVyYXRvcjw8KHN0ZDo6b3N0 cmVhbSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBJUHJvY2Vzc0lkJiBhSGFuZGxlKTsKCgoKCgogICAgdW5zaWduZWQgbG9uZyBh c1Vuc2lnbmVkKCkgY29uc3Q7CgogICAgIAogICAgb3BlcmF0b3IgVmFsdWUoKSBjb25zdDsKCnBy aXZhdGU6CiAgICAgCiAgICBWYWx1ZSBoYW5kbGU7Cgp9OwoKCmNsYXNzICAgSUVudW1IYW5kbGUK ewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVmFsdWU7CgoKICAgICAKICAg IElFbnVtSGFuZGxlKFZhbHVlIGhlbnVtID0gMCk7CgogICAgIAogICAgSVN0cmluZyBhc1N0cmlu ZyAoKSBjb25zdDsKICAgIElTdHJpbmcgYXNEZWJ1Z0luZm8oKSBjb25zdDsKCgogICAgZnJpZW5k IHN0ZDo6b3N0cmVhbSAgCiAgICAgICAgJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFt LCBjb25zdCBJRW51bUhhbmRsZSYgYUhhbmRsZSk7CgoKCgoKICAgIHVuc2lnbmVkIGxvbmcgYXNV bnNpZ25lZCgpIGNvbnN0OwoKICAgICAKICAgIG9wZXJhdG9yIFZhbHVlKCkgY29uc3Q7Cgpwcml2 YXRlOgogICAgIAogICAgVmFsdWUgaGFuZGxlOwp9OwoKCmNsYXNzICAgSVByaXZhdGVTZW1hcGhv cmVIYW5kbGUKewpwdWJsaWM6CgoKCgogIHR5cGVkZWYgdm9pZCogVmFsdWU7CgoKICAgICAKICAg IElQcml2YXRlU2VtYXBob3JlSGFuZGxlKFZhbHVlIHByaXZTZW1JZCA9IDApOwoKCiAKICAgIElQ cml2YXRlU2VtYXBob3JlSGFuZGxlJiBvcGVyYXRvcj0oVmFsdWUgcHJpdlNlbUlkKTsKCgogICAg IAogICAgfklQcml2YXRlU2VtYXBob3JlSGFuZGxlKCk7CgogICAgIAogICAgSVN0cmluZyBhc1N0 cmluZygpIGNvbnN0OwogICAgSVN0cmluZyBhc0RlYnVnSW5mbygpIGNvbnN0OwoKCiAgICBmcmll bmQgc3RkOjpvc3RyZWFtICAKICAgICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwK ICAgICAgICAgICAgICAgIGNvbnN0IElQcml2YXRlU2VtYXBob3JlSGFuZGxlJiBhSGFuZGxlKTsK CgoKCgogCiAgICB1bnNpZ25lZCBsb25nIGFzVW5zaWduZWQoKSBjb25zdDsKIAoKICAgICAKICAg IG9wZXJhdG9yIFZhbHVlKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgICAKICAgIFZhbHVlIGZTeXN0 ZW1Qcml2U2VtSWQ7Cn07CgoKY2xhc3MgICBJU2hhcmVkU2VtYXBob3JlSGFuZGxlCnsKcHVibGlj OgoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICBWYWx1ZTsKCgogICAgIAogICAgSVNoYXJl ZFNlbWFwaG9yZUhhbmRsZShWYWx1ZSBoc2VtID0gMCk7CgogICAgIAogICAgSVN0cmluZyBhc1N0 cmluZygpIGNvbnN0OwogICAgSVN0cmluZyBhc0RlYnVnSW5mbygpIGNvbnN0OwoKCiAgICBmcmll bmQgc3RkOjpvc3RyZWFtICAKICAgICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwg Y29uc3QgSVNoYXJlZFNlbWFwaG9yZUhhbmRsZSYgYUhhbmRsZSk7CgoKCgoKICAgIHVuc2lnbmVk IGxvbmcgYXNVbnNpZ25lZCgpIGNvbnN0OwoKICAgICAKICAgIG9wZXJhdG9yIFZhbHVlKCkgY29u c3Q7Cgpwcml2YXRlOgogICAgIAogICAgVmFsdWUgaGFuZGxlOwp9OwoKdHlwZWRlZiBJU2hhcmVk U2VtYXBob3JlSGFuZGxlIElTZW1hcGhvcmVIYW5kbGU7CmNsYXNzIElNb2R1bGVIYW5kbGUKewpw dWJsaWM6CiAgICAgCgogICAgdHlwZWRlZiB2b2lkKiBWYWx1ZTsKCgoKCgoKCgoKCgoKCgogICAg IAogICAgSU1vZHVsZUhhbmRsZShWYWx1ZSB2YWx1ZSA9IDApOwoKICAgICAKICAgIElTdHJpbmcg YXNTdHJpbmcoKSBjb25zdDsKICAgIElTdHJpbmcgYXNEZWJ1Z0luZm8oKSBjb25zdDsKCgogICAg ZnJpZW5kIHN0ZDo6b3N0cmVhbQogICAgJm9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFt LCBjb25zdCBJTW9kdWxlSGFuZGxlJiBhSGFuZGxlKTsKCgoKCgogICAgdW5zaWduZWQgbG9uZyBh c1Vuc2lnbmVkKCkgY29uc3Q7CgogICAgIAogICAgb3BlcmF0b3IgVmFsdWUoKSBjb25zdDsKCnBy aXZhdGU6CiAgICAgCiAgICBWYWx1ZSBmaGFuZGxlOwp9OwogCgogCgoKCgoKCgojcHJhZ21hIGVu dW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9h a25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liaGFuZGxlLmlubCIg MQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIyAx ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdHJl YW0uaHBwIiAxCiMgNTYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaXN0cmVhbS5ocHAiCgoKCgoKIyAyOSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmhhbmRsZS5pbmwiIDIKCiAKCiAKIAogCmlubGlu ZSBJSGFuZGxlOjpJSGFuZGxlKFZhbHVlIHZhbHVlKSA6CgogICAgaGFuZGxlKCB2YWx1ZSApCnsK fQoKaW5saW5lIHVuc2lnbmVkIGxvbmcgSUhhbmRsZTo6YXNVbnNpZ25lZCgpIGNvbnN0CnsKICAg IHJldHVybiAodW5zaWduZWQgbG9uZyl0aGlzLT5oYW5kbGU7Cn0KCmlubGluZQoKc3RkOjpvc3Ry ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwgY29uc3QgSUhhbmRsZSYgYUhh bmRsZSApCgoKCnsKICAgIHJldHVybiBhU3RyZWFtIDw8IGFIYW5kbGUuYXNTdHJpbmcoKTsKfQoK aW5saW5lIElIYW5kbGU6Om9wZXJhdG9yIElIYW5kbGU6OlZhbHVlKCkgY29uc3QKewogICAgcmV0 dXJuIHRoaXMtPmhhbmRsZTsKfQoKCiAKIAogCmlubGluZSBJUHJvY2Vzc0lkOjpJUHJvY2Vzc0lk IChWYWx1ZSB2YWx1ZSkgOgoKICAgIGhhbmRsZSggdmFsdWUgKQp7Cn0KCmlubGluZSB1bnNpZ25l ZCBsb25nIElQcm9jZXNzSWQ6OmFzVW5zaWduZWQoKSBjb25zdAp7CiAgICByZXR1cm4gKCh1bnNp Z25lZCBsb25nKXRoaXMtPmhhbmRsZSk7Cn0KCmlubGluZSBJUHJvY2Vzc0lkOjpvcGVyYXRvciBJ UHJvY2Vzc0lkOjpWYWx1ZSgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5oYW5kbGU7Cn0KCmlu bGluZSBJVGhyZWFkSWQ6OklUaHJlYWRJZCAoKQp7CgoKCgogICAgZlN5c3RlbVRocmVhZElkID0g MDsKCn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0 cmVhbSwgY29uc3QgSVByb2Nlc3NJZCYgYUhhbmRsZSkKCgoKewogICAgcmV0dXJuIGFTdHJlYW0g PDwgYUhhbmRsZS5hc1N0cmluZygpOwp9CgoKIAogCiAKIyAxMTMgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJoYW5kbGUuaW5sIgoKCmlubGluZSBJ VGhyZWFkSWQ6OklUaHJlYWRJZCAgKHVuc2lnbmVkIGxvbmcgIHRoaWQpCnsKCgoKCiAgICB0aGlz LT5mU3lzdGVtVGhyZWFkSWQgPSB0aGlkOwoKfQoKCgppbmxpbmUgSVRocmVhZElkOjp+SVRocmVh ZElkICggKQp7CgoKCgoKICAgICAgIGZTeXN0ZW1UaHJlYWRJZCA9IDA7CgoKfQoKaW5saW5lIElU aHJlYWRJZDo6SVRocmVhZElkIChjb25zdCBJVGhyZWFkSWQgICZ0aWQgKQp7CiAKCiAKCiAKIAog CiAKIAogCgogCgoKCgogICAgZlN5c3RlbVRocmVhZElkID0gdGlkOwoKCiAKfQoKaW5saW5lCgpz dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFtLCBjb25zdCBJVGhy ZWFkSWQmIGFIYW5kbGUpCgoKCnsKICAgIHJldHVybiBhU3RyZWFtIDw8IGFIYW5kbGUuYXNTdHJp bmcoKTsKfQoKCiAKIAogCiMgMTkzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2liaGFuZGxlLmlubCIKCgoKCiAKIAogCmlubGluZSBJRW51bUhhbmRs ZTo6SUVudW1IYW5kbGUoVmFsdWUgdmFsdWUpIDoKCiAgICBoYW5kbGUoIHZhbHVlICkKewp9Cgpp bmxpbmUgdW5zaWduZWQgbG9uZyBJRW51bUhhbmRsZTo6YXNVbnNpZ25lZCgpIGNvbnN0CnsKICAg IHJldHVybiAoICh1bnNpZ25lZCBsb25nKXRoaXMtPmhhbmRsZSApOwp9CgppbmxpbmUgSUVudW1I YW5kbGU6Om9wZXJhdG9yIElFbnVtSGFuZGxlOjpWYWx1ZSgpIGNvbnN0CnsKICAgIHJldHVybiB0 aGlzLT5oYW5kbGU7Cn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0 cmVhbSYgYVN0cmVhbSwgY29uc3QgSUVudW1IYW5kbGUmIGFIYW5kbGUpCgoKCnsKICAgIHJldHVy biBhU3RyZWFtIDw8IGFIYW5kbGUuYXNTdHJpbmcoKTsKfQoKCiAKIAogCmlubGluZSBJUHJpdmF0 ZVNlbWFwaG9yZUhhbmRsZTo6SVByaXZhdGVTZW1hcGhvcmVIYW5kbGUoVmFsdWUgcHJpdlNlbUlk KQp7CiAgICBmU3lzdGVtUHJpdlNlbUlkID0gcHJpdlNlbUlkOwp9CgppbmxpbmUgSVByaXZhdGVT ZW1hcGhvcmVIYW5kbGU6On5JUHJpdmF0ZVNlbWFwaG9yZUhhbmRsZSgpCnsKCiAgICBpZiAoZlN5 c3RlbVByaXZTZW1JZCAhPSAwKQogICAgewogICAgICAgIGZTeXN0ZW1Qcml2U2VtSWQgID0gMDsK ICAgIH0KCn0KCmlubGluZSBJUHJpdmF0ZVNlbWFwaG9yZUhhbmRsZTo6b3BlcmF0b3IgSVByaXZh dGVTZW1hcGhvcmVIYW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgICByZXR1cm4gdGhpcy0+ZlN5 c3RlbVByaXZTZW1JZDsKfQoKaW5saW5lCgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpv c3RyZWFtJiBhU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSVByaXZhdGVT ZW1hcGhvcmVIYW5kbGUmIGFIYW5kbGUpCgoKCnsKICAgIHJldHVybiBhU3RyZWFtIDw8IGFIYW5k bGUuYXNTdHJpbmcoKTsKfQoKCiAKIAogCmlubGluZSBJU2hhcmVkU2VtYXBob3JlSGFuZGxlOjpJ U2hhcmVkU2VtYXBob3JlSGFuZGxlKFZhbHVlIHZhbHVlKSA6CgogICAgaGFuZGxlKHZhbHVlKQp7 Cn0KCmlubGluZSB1bnNpZ25lZCBsb25nIElTaGFyZWRTZW1hcGhvcmVIYW5kbGU6OmFzVW5zaWdu ZWQoKSBjb25zdAp7CiAgICByZXR1cm4oKHVuc2lnbmVkIGxvbmcpdGhpcy0+aGFuZGxlKTsKfQoK aW5saW5lIElTaGFyZWRTZW1hcGhvcmVIYW5kbGU6Om9wZXJhdG9yIElTaGFyZWRTZW1hcGhvcmVI YW5kbGU6OlZhbHVlKCkgY29uc3QKewogICAgcmV0dXJuIHRoaXMtPmhhbmRsZTsKfQoKaW5saW5l CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBhU3RyZWFtLAogICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgSVNoYXJlZFNlbWFwaG9yZUhhbmRsZSYgYUhhbmRsZSkK CgoKewogICAgcmV0dXJuIGFTdHJlYW0gPDwgYUhhbmRsZS5hc1N0cmluZygpOwp9CgogCiAKIApp bmxpbmUgSU1vZHVsZUhhbmRsZTo6SU1vZHVsZUhhbmRsZSAoVmFsdWUgdmFsdWUpIDoKCiAgICBm aGFuZGxlKHZhbHVlKQp7Cn0KCmlubGluZSB1bnNpZ25lZCBsb25nIElNb2R1bGVIYW5kbGU6OmFz VW5zaWduZWQoKSBjb25zdAp7CiAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRoaXMtPmZoYW5k bGU7Cn0KCmlubGluZSBJTW9kdWxlSGFuZGxlOjpvcGVyYXRvciBJTW9kdWxlSGFuZGxlOjpWYWx1 ZSgpIGNvbnN0CnsKICAgIHJldHVybiB0aGlzLT5maGFuZGxlOwp9CgppbmxpbmUKCnN0ZDo6b3N0 cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sIGNvbnN0IElNb2R1bGVIYW5k bGUmIGhhbmRsZSkKCgoKewogICAgcmV0dXJuIGFTdHJlYW0gPDwgaGFuZGxlLmFzU3RyaW5nKCk7 Cn0KCiAKCiMgNTMwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2liaGFuZGxlLmhwcCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSBy ZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzNiAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pY29uZGl0bi5ocHAiIDIKCiAK CiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJf UkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1h bmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoK CgoKCgogCgogCiAKCiAKY2xhc3MgSVN0cmluZzsKY2xhc3MgSVJlc291cmNlTG9jazsKY2xhc3Mg SVByaXZDb25kSW1wbDsKY2xhc3MgSVNoYXJlZENvbmRJbXBsOwpjbGFzcyBJU3RhcnRlZFRocmVh ZDsKIAoKIAoKY2xhc3MgSUNvbmRpdGlvbgp7CnB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIFJlbG9j ayhJUmVzb3VyY2VMb2NrJiwgaW9jOjpudW1lcmljX3QgdGltZXMpOwogICAgc3RhdGljIGlvYzo6 bnVtZXJpY190IFVubG9jayhJUmVzb3VyY2VMb2NrJik7CgpwdWJsaWM6CiAgICB2aXJ0dWFsIGJv b2wgd2FpdChpb2M6Om51bWVyaWNfdCB0aW1lT3V0ID0gLTEpID0gMDsKICAgIHZpcnR1YWwgYm9v bCB3YWl0KElSZXNvdXJjZUxvY2smIGFsb2NrLCBpb2M6Om51bWVyaWNfdCB0aW1lT3V0ID0gLTEp ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzaWduYWwoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgYnJv YWRjYXN0KCkgPSAwOwogICAgdmlydHVhbCB+SUNvbmRpdGlvbigpIHt9Cgpwcm90ZWN0ZWQ6CiAg ICBJQ29uZGl0aW9uKCkge30KCnByaXZhdGU6CiAgICBJQ29uZGl0aW9uKGNvbnN0IElDb25kaXRp b24mIGNvbmRpdGlvbik7CiAgICBJQ29uZGl0aW9uICYgb3BlcmF0b3I9KGNvbnN0IElDb25kaXRp b24mIGNvbmRpdGlvbik7Cn07CgpjbGFzcyBJUHJpdmF0ZUNvbmRpdGlvbiA6IHB1YmxpYyBJQ29u ZGl0aW9uCnsKcHVibGljOgogICAgSVByaXZhdGVDb25kaXRpb24oKTsKICAgIHZpcnR1YWwgfklQ cml2YXRlQ29uZGl0aW9uKCk7CgogICAgdmlydHVhbCBib29sIHdhaXQoaW9jOjpudW1lcmljX3Qg dGltZU91dCA9IC0xKTsKICAgIHZpcnR1YWwgYm9vbCB3YWl0KElSZXNvdXJjZUxvY2smIGFMb2Nr LCBpb2M6Om51bWVyaWNfdCB0aW1lT3V0ID0gLTEpOwoKICAgIHZpcnR1YWwgdm9pZCBzaWduYWwo KTsKCiAgICB2aXJ0dWFsIHZvaWQgYnJvYWRjYXN0KCk7Cgpwcml2YXRlOgogICAgSVByaXZhdGVD b25kaXRpb24oY29uc3QgSVByaXZhdGVDb25kaXRpb24mIGNvbmRpdGlvbik7CiAgICBJUHJpdmF0 ZUNvbmRpdGlvbiYgb3BlcmF0b3I9KGNvbnN0IElQcml2YXRlQ29uZGl0aW9uJiBjb25kaXRpb24p OwogICAgZnJpZW5kIGNsYXNzIElTdGFydGVkVGhyZWFkOwogICAgSVByaXZDb25kSW1wbCogZklt cGw7Cn07CgpjbGFzcyBJU2hhcmVkQ29uZGl0aW9uIDogcHVibGljIElDb25kaXRpb24KewpwdWJs aWM6CiAgICBJU2hhcmVkQ29uZGl0aW9uKCk7CiAgICBJU2hhcmVkQ29uZGl0aW9uKGNvbnN0IGNo YXIqIGtleU5hbWUpOwogICAgdmlydHVhbCB+SVNoYXJlZENvbmRpdGlvbigpOwoKICAgIHZpcnR1 YWwgYm9vbCB3YWl0KGlvYzo6bnVtZXJpY190IHRpbWVPdXQgPSAtMSk7CiAgICB2aXJ0dWFsIGJv b2wgd2FpdChJUmVzb3VyY2VMb2NrJiBhbG9jaywgaW9jOjpudW1lcmljX3QgdGltZU91dCA9IC0x KTsKCiAgICB2aXJ0dWFsIHZvaWQgc2lnbmFsKCk7CgogICAgdmlydHVhbCB2b2lkIGJyb2FkY2Fz dCgpOwoKICAgIElTdHJpbmcga2V5TmFtZSgpIGNvbnN0OwoKICAgIHN0YXRpYyBib29sIGV4aXN0 cyhjb25zdCBjaGFyKiBrZXlOYW1lKTsKCnByaXZhdGU6CiAgICBJU2hhcmVkQ29uZGl0aW9uKGNv bnN0IElTaGFyZWRDb25kaXRpb24mIGNvbmRpdGlvbik7CiAgICBJU2hhcmVkQ29uZGl0aW9uJiBv cGVyYXRvcj0oY29uc3QgSVNoYXJlZENvbmRpdGlvbiYgY29uZGl0aW9uKTsKICAgIGZyaWVuZCBj bGFzcyBJU3RhcnRlZFRocmVhZDsKCiAgICBJU2hhcmVkQ29uZEltcGwqIGZJbXBsOwp9OwoKIAoK IAoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoK CgogCgogCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdt YSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgNiAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNl L21xcXVldWUuY3BwIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaXJlc2xvY2suaHBwIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKCgpleHRlcm4gIkMiCnsKCn0KCgoKCgog CgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVS X1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVt YW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoK CgoKCgoKIAoKIAogCgogCmNsYXNzIElSZXNvdXJjZUxvY2s7CmNsYXNzIElQcml2YXRlUmVzb3Vy Y2U7CmNsYXNzIElTaGFyZWRSZXNvdXJjZTsKY2xhc3MgSUNvbmRpdGlvbjsKY2xhc3MgSVByaXZD b25kSW1wbDsKIAoKIAoKY2xhc3MgICBJUmVzb3VyY2UKewpwdWJsaWM6CiAgICAgCiAgICBJUmVz b3VyY2UoKTsKICAgIHZpcnR1YWwgfklSZXNvdXJjZSgpOwoKICAgICAKICAgIHZpcnR1YWwgSVJl c291cmNlJiBsb2NrKGlvYzo6bnVtZXJpY190IHRpbWVPdXQgPSAtMSkgPSAwOwogICAgdmlydHVh bCBJUmVzb3VyY2UmIHVubG9jaygpID0gMDsKCnByb3RlY3RlZDoKICAgICAKICAgIGlvYzo6bnVt ZXJpY190IHVubG9ja0FsbCgpOwogICAgdm9pZCByZWxvY2tBbGwoaW9jOjpudW1lcmljX3QgdGlt ZXMpOwoKcHJpdmF0ZToKICAgICAKICAgIElSZXNvdXJjZShjb25zdCBJUmVzb3VyY2UmIHJlc291 cmNlKTsKICAgIElSZXNvdXJjZSAmb3BlcmF0b3I9KGNvbnN0IElSZXNvdXJjZSYgcmVzb3VyY2Up OwoKICAgICAKICAgIElUaHJlYWRJZCBsb2NraW5nVGhyZWFkOwogICAgaW9jOjpudW1lcmljX3Qg IHJlY3Vyc2lvbkNvdW50OwoKICAgIGZyaWVuZCBjbGFzcyBJQ29uZGl0aW9uOwogICAgZnJpZW5k IGNsYXNzIElSZXNvdXJjZUxvY2s7CiAgICBmcmllbmQgY2xhc3MgSVByaXZhdGVSZXNvdXJjZTsK ICAgIGZyaWVuZCBjbGFzcyBJU2hhcmVkUmVzb3VyY2U7CiAgICBmcmllbmQgY2xhc3MgSVByaXZD b25kSW1wbDsKfTsKCgpjbGFzcyAgIElQcml2YXRlUmVzb3VyY2UgOiBwdWJsaWMgSVJlc291cmNl CnsKICAgIHR5cGVkZWYgSVJlc291cmNlIEluaGVyaXRlZDsKcHVibGljOgogICAgIAogICAgSVBy aXZhdGVSZXNvdXJjZSgpOwogICAgdmlydHVhbCB+SVByaXZhdGVSZXNvdXJjZSgpOwoKICAgICAK ICAgIHZpcnR1YWwgSVByaXZhdGVSZXNvdXJjZSYgbG9jayhpb2M6Om51bWVyaWNfdCB0aW1lT3V0 ID0gLTEpOwogICAgdmlydHVhbCBJUHJpdmF0ZVJlc291cmNlJiB1bmxvY2soKTsKCgpwcm90ZWN0 ZWQ6CiAgICAgCiAgICBJUHJpdmF0ZVNlbWFwaG9yZUhhbmRsZSYgaGFuZGxlKCk7Cgpwcml2YXRl OgogICAgIAogICAgSVByaXZhdGVSZXNvdXJjZShjb25zdCBJUHJpdmF0ZVJlc291cmNlJiBwcml2 YXRlUmVzb3VyY2UpOwogICAgSVByaXZhdGVSZXNvdXJjZSAmb3BlcmF0b3I9KGNvbnN0IElQcml2 YXRlUmVzb3VyY2UmIHByaXZhdGVSZXNvdXJjZSk7CgogICAgIAoKICAgIHB0aHJlYWRfbXV0ZXhf dCBmTXV0ZXg7CgoKICAgIElQcml2YXRlU2VtYXBob3JlSGFuZGxlIHJlc291cmNlSGFuZGxlQ2w7 CiAgICBmcmllbmQgY2xhc3MgSVJlc291cmNlTG9jazsKICAgIGZyaWVuZCBjbGFzcyBJUHJpdkNv bmRJbXBsOwp9OwoKCmNsYXNzICAgSVNoYXJlZFJlc291cmNlIDogcHVibGljIElSZXNvdXJjZQp7 CiAgICB0eXBlZGVmIElSZXNvdXJjZSBJbmhlcml0ZWQ7CnB1YmxpYzoKICAgICAKICAgIElTaGFy ZWRSZXNvdXJjZShjb25zdCBjaGFyKiBrZXlOYW1lKTsKICAgIHZpcnR1YWwgfklTaGFyZWRSZXNv dXJjZSgpOwoKICAgICAKICAgIElTdHJpbmcga2V5TmFtZSgpIGNvbnN0OwoKCiAgICAgCiAgICB2 aXJ0dWFsIElTaGFyZWRSZXNvdXJjZSYgbG9jayhpb2M6Om51bWVyaWNfdCB0aW1lT3V0ID0gLTEp OwogICAgdmlydHVhbCBJU2hhcmVkUmVzb3VyY2UmIHVubG9jaygpOwoKcHJvdGVjdGVkOgogICAg IAogICAgSVNoYXJlZFNlbWFwaG9yZUhhbmRsZSYgaGFuZGxlKCk7Cgpwcml2YXRlOgogICAgIAog ICAgSVNoYXJlZFJlc291cmNlKGNvbnN0IElTaGFyZWRSZXNvdXJjZSYgc2hhcmVkUmVzb3VyY2Up OwogICAgSVNoYXJlZFJlc291cmNlICZvcGVyYXRvcj0oY29uc3QgSVNoYXJlZFJlc291cmNlJiBz aGFyZWRSZXNvdXJjZSk7CgogICAgIAogICAgSVNoYXJlZFNlbWFwaG9yZUhhbmRsZSByZXNvdXJj ZUhhbmRsZUNsOwogICAgSVN0cmluZyBrZXlOYW1lQ2w7CgogICAgZnJpZW5kIGNsYXNzIElSZXNv dXJjZUxvY2s7Cn07CgpjbGFzcyAgIElSZXNvdXJjZUxvY2sKewpwdWJsaWM6CiAgICAgCiAgICBJ UmVzb3VyY2VMb2NrKCBJUmVzb3VyY2UmIHJlc291cmNlLCBpb2M6Om51bWVyaWNfdCB0aW1lT3V0 ID0gLTEpOwogICAgdmlydHVhbCB+SVJlc291cmNlTG9jaygpOwoKcHJvdGVjdGVkOgogICAgIAog ICAgdmlydHVhbCBJUmVzb3VyY2VMb2NrJiBzZXRMb2NrKGlvYzo6bnVtZXJpY190IHRpbWVPdXQg PSAtMSk7CiAgICB2aXJ0dWFsIElSZXNvdXJjZUxvY2smIGNsZWFyTG9jaygpOwoKcHJpdmF0ZToK ICAgICAKICAgIElSZXNvdXJjZUxvY2soY29uc3QgSVJlc291cmNlTG9jayYgcmVzb3VyY2VMb2Nr KTsKICAgIElSZXNvdXJjZUxvY2smIG9wZXJhdG9yPShjb25zdCBJUmVzb3VyY2VMb2NrJiByZXNv dXJjZUxvY2spOwoKICAgICAKICAgIElSZXNvdXJjZSogcHJlc0NsOwoKICAgIGZyaWVuZCBjbGFz cyBJQ29uZGl0aW9uOwogICAgZnJpZW5kIGNsYXNzIElQcml2Q29uZEltcGw7Cn07CgogCgogCgoK CgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAK CiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lyZXNsb2NrLmlubCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKCgoKCgoKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pdHJhY2UuaHBwIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAoKIAoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEg cmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVz dG9yZSkKIAoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVN RSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKCgoKCgoKCgoKCgogIAoKCgoKCgoK CgoKICAgCiAgIAogICAKCgoKCgoKCgoKCiAgIAogICAKICAgCgoKCiAgIAogICAKICAgCgoKCgoK CiMgMTIxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2l0cmFjZS5ocHAiCgogICAKICAgCiAgIAogICAKICAgCiAgIAoKIAoKIApjbGFzcyBJU3RyaW5n OwpjbGFzcyBJVHJhY2VQcml2YXRlRGF0YTsKIAoKIAoKY2xhc3MgICBJVHJhY2UKewpwdWJsaWM6 CiAKICAgIElUcmFjZSgpOwogICAgSVRyYWNlKGNvbnN0IGNoYXIqIHRyYWNlTmFtZSwgaW9jOjpu dW1lcmljX3QgbGluZU51bWJlciA9IDApOwogICAgSVRyYWNlKGNvbnN0IGlvYzo6dW5pY2hhcl90 KiB0cmFjZU5hbWUsIGlvYzo6bnVtZXJpY190IGxpbmVOdW1iZXIgPSAwKTsKCiAgICB+SVRyYWNl KCk7CgogCiAgICBzdGF0aWMgdm9pZCB3cml0ZShjb25zdCBJU3RyaW5nJiB0ZXh0KTsKICAgIHN0 YXRpYyB2b2lkIHdyaXRlKGNvbnN0IGNoYXIqIHRleHQpOwogICAgc3RhdGljIHZvaWQgd3JpdGUo Y29uc3QgaW9jOjp1bmljaGFyX3QgKnRleHQpOwoKICAgIGVudW0gRGVzdGluYXRpb24gewogICAg ICAgIHF1ZXVlLAogICAgICAgIHN0YW5kYXJkRXJyb3IsCiAgICAgICAgc3RhbmRhcmRPdXRwdXQs CiAgICAgICAgZmlsZQogICAgfTsKCiAgICBzdGF0aWMgSVRyYWNlOjpEZXN0aW5hdGlvbiB0cmFj ZURlc3RpbmF0aW9uKCk7CgogICAgc3RhdGljIHZvaWQgd3JpdGVUb1F1ZXVlKCk7CiAgICBzdGF0 aWMgdm9pZCB3cml0ZVRvU3RhbmRhcmRFcnJvcigpOwogICAgc3RhdGljIHZvaWQgd3JpdGVUb1N0 YW5kYXJkT3V0cHV0KCk7CiAgICBzdGF0aWMgdm9pZCB3cml0ZVRvRmlsZSgpOwoKIAogICAgc3Rh dGljIHZvaWQgZW5hYmxlVHJhY2UoKTsKICAgIHN0YXRpYyB2b2lkIGRpc2FibGVUcmFjZSgpOwog ICAgc3RhdGljIHZvaWQgZW5hYmxlVW5pY29kZVRyYWNlKCk7CiAgICBzdGF0aWMgdm9pZCBkaXNh YmxlVW5pY29kZVRyYWNlKCk7CiAgICBzdGF0aWMgYm9vbCBpc1RyYWNlRW5hYmxlZCgpOwoKIAog ICAgc3RhdGljIHZvaWQgc2V0TWFya2VyKGNvbnN0IGNoYXIgKmJlZ2luX21hcmtlciA9ICIrIiwK ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmRfbWFya2VyID0gIi0iKTsK ICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlclcoY29uc3QgaW9jOjp1bmljaGFyX3QgKmJlZ2luX21h cmtlciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBpb2M6OnVuaWNoYXJfdCAq KUwiKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90ICpl bmRfbWFya2VyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGlvYzo6dW5pY2hh cl90ICopTCItIik7CgogICAgc3RhdGljIHZvaWQgZW5hYmxlV3JpdGVMaW5lTnVtYmVyKCk7CiAg ICBzdGF0aWMgdm9pZCBkaXNhYmxlV3JpdGVMaW5lTnVtYmVyKCk7CiAgICBzdGF0aWMgdm9pZCBl bmFibGVXcml0ZVByZWZpeCgpOwogICAgc3RhdGljIHZvaWQgZGlzYWJsZVdyaXRlUHJlZml4KCk7 CgogICAgc3RhdGljIGJvb2wgaXNXcml0ZUxpbmVOdW1iZXJFbmFibGVkKCk7CiAgICBzdGF0aWMg Ym9vbCBpc1dyaXRlUHJlZml4RW5hYmxlZCgpOwoKIAogICAgc3RhdGljIHZvaWQgd3JpdGVEZWJ1 Z0xvY2F0aW9uKGNvbnN0IGNoYXIqIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBJRXhjZXB0aW9uTG9jYXRpb24mIGxvY2F0aW9uKTsKICAgIHN0YXRpYyB2b2lk IHdyaXRlRGVidWdMb2NhdGlvbihjb25zdCBpb2M6OnVuaWNoYXJfdCogc3RyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRp b24pOwoKcHJvdGVjdGVkOgogCgoKCiAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aHJlYWRJZCgp OwoKICAgIHN0YXRpYyBpb2M6OnVudW1lcmljX3QgcGlkKCk7CgogCiAgICBzdGF0aWMgdm9pZCB3 cml0ZVN0cmluZyhjb25zdCBjaGFyICp0ZXh0KTsKICAgIHN0YXRpYyB2b2lkIHdyaXRlU3RyaW5n KGNvbnN0IGlvYzo6dW5pY2hhcl90ICp0ZXh0KTsKICAgIHN0YXRpYyB2b2lkIHdyaXRlRm9ybWF0 dGVkU3RyaW5nKGNvbnN0IElTdHJpbmcmIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1hcmtlcik7CiAgICBzdGF0aWMgdm9pZCB3cml0ZUZv cm1hdHRlZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXJrZXIpOwogICAgc3RhdGljIHZvaWQgd3JpdGVG b3JtYXR0ZWRTdHJpbmcoY29uc3QgaW9jOjp1bmljaGFyX3QqIHN0cmluZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBtYXJrZXIpOwpw cml2YXRlOgogICAgSVRyYWNlUHJpdmF0ZURhdGEgKmZEYXRhOwogICAgc3RhdGljIElUcmFjZTo6 RGVzdGluYXRpb24gZkRlc3RpbmF0aW9uOwoKICAgIHN0YXRpYyBpbnQgZ2V0SW5kZW50SWQoaW9j Ojp1bnVtZXJpY190IHRpZCk7CiAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RQcmVmaXgoaW50IGlu ZGVudElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYzo6dW51bWVyaWNfdCB0 aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwcmVmaXhfYnVmZmVyW10p OwoKICAgIHN0YXRpYyBpb2M6OnVudW1lcmljX3QgcmVtYWluaW5nU3RhY2soKTsKICAgIHN0YXRp YyB2b2lkIHdyaXRlU3RyaW5nVW5pQ2hhcihjb25zdCBVbmlDaGFyICp0ZXh0KTsKICAgIHN0YXRp YyB2b2lkIHdyaXRlRm9ybWF0dGVkU3RyaW5nVW5pQ2hhcihjb25zdCBVbmlDaGFyICpzdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hh ciogbWFya2VyKTsKICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlclVuaUNoYXIoY29uc3QgVW5pQ2hh ciAqYmVnaW5fbWFya2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV bmlDaGFyICplbmRfbWFya2VyKTsKICAgIHN0YXRpYyB2b2lkIHdyaXRlVW5pQ2hhcihjb25zdCBV bmlDaGFyKiBwc3pUZXh0KTsKICAgIHN0YXRpYyB2b2lkIHdyaXRlRGVidWdMb2NhdGlvblVuaUNo YXIoY29uc3QgVW5pQ2hhciogc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBJRXhjZXB0aW9uTG9jYXRpb24mIGxvY2F0aW9uKTsKICAgIHZvaWQgaW5p dGlhbGl6ZVdpdGhVbmlDaGFyKGNvbnN0IFVuaUNoYXIqIHBzelRyYWNlTmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlvYzo6bnVtZXJpY190IGxMaW5lTm8pOwogICAgZnJpZW5k IGNsYXNzIElUcmFjZVByaXZhdGVEYXRhOwp9OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVtKHBv cCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdHJhY2UuaW5sIiAxCiAKCgog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgogCgppbmxpbmUKdm9pZApJVHJhY2U6 OndyaXRlU3RyaW5nKGNvbnN0IGlvYzo6dW5pY2hhcl90ICp0ZXh0KQp7CiAgICB3cml0ZVN0cmlu Z1VuaUNoYXIoKGNvbnN0IFVuaUNoYXIgKil0ZXh0KTsKfQoKaW5saW5lCnZvaWQKSVRyYWNlOjp3 cml0ZUZvcm1hdHRlZFN0cmluZyhjb25zdCBpb2M6OnVuaWNoYXJfdCAqdGV4dCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCAqbWFya2VyKQp7CiAgICB3 cml0ZUZvcm1hdHRlZFN0cmluZ1VuaUNoYXIoKGNvbnN0IFVuaUNoYXIgKil0ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBVbmlDaGFyICopbWFya2VyKTsKfQoKaW5s aW5lCnZvaWQKSVRyYWNlOjpzZXRNYXJrZXJXKGNvbnN0IGlvYzo6dW5pY2hhcl90ICpiZWdpbl9t YXJrZXIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBpb2M6OnVuaWNoYXJfdCAqZW5kX21hcmtl cikKewogICAgc2V0TWFya2VyVW5pQ2hhcigoY29uc3QgVW5pQ2hhciAqKWJlZ2luX21hcmtlciwK ICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFVuaUNoYXIgKillbmRfbWFya2VyKTsKfQoKaW5s aW5lCnZvaWQKSVRyYWNlOjp3cml0ZShjb25zdCBpb2M6OnVuaWNoYXJfdCogcHN6VGV4dCkKewog ICAgd3JpdGVVbmlDaGFyKChjb25zdCBVbmlDaGFyICopcHN6VGV4dCk7Cn0KCmlubGluZQp2b2lk CklUcmFjZTo6d3JpdGVEZWJ1Z0xvY2F0aW9uKGNvbnN0IGlvYzo6dW5pY2hhcl90KiBzdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElFeGNlcHRpb25Mb2NhdGlvbiYgbG9jYXRp b24pCnsKICAgIHdyaXRlRGVidWdMb2NhdGlvblVuaUNoYXIoKGNvbnN0IFVuaUNoYXIgKilzdHIs IGxvY2F0aW9uKTsKfQoKaW5saW5lCnZvaWQKSVRyYWNlOjp3cml0ZUZvcm1hdHRlZFN0cmluZyhj b25zdCBJU3RyaW5nJiBzdHJTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogcHN6TWFya2VyKQp7CiAgICB3cml0ZUZvcm1hdHRlZFN0cmluZygoY29uc3QgY2hh ciAqKXN0clN0cmluZywgcHN6TWFya2VyKTsKfQoKaW5saW5lCklUcmFjZTo6SVRyYWNlKGNvbnN0 IGlvYzo6dW5pY2hhcl90ICpwc3pUcmFjZU5hbWUsIGlvYzo6bnVtZXJpY190IGxMaW5lTm8pCiAg ICAgICAgOiBmRGF0YSgwKQp7CiAgICBpbml0aWFsaXplV2l0aFVuaUNoYXIoKGNvbnN0IFVuaUNo YXIqKXBzelRyYWNlTmFtZSwgbExpbmVObyk7Cn0KCgojIDI1OCAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdHJhY2UuaHBwIiAyCgogCgogCiNwcmFn bWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQog CgogCgojIDM0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lyZXNsb2NrLmlubCIgMgoKCgoKCgppbmxpbmUgSVN0cmluZyBJU2hhcmVkUmVzb3VyY2Ug Ojoga2V5TmFtZSgpIGNvbnN0CiAgeyByZXR1cm4ga2V5TmFtZUNsOyB9CgogCgoKIyAyMjcgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXJlc2xvY2su aHBwIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFn bWEgaW5mbyhyZXN0b3JlKQogCgogCgojIDcgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2Vydmlj ZS9tcXF1ZXVlLmNwcCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lzZXEuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAog CgogCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWFzZXEuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYXNxbnRsLmgi IDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFvcmRlci5oIiAxCgoKCiAKIAog CgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhY2xsY3QuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoK CiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pYmNsbGN0LmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAK IAoKIAoKCgoKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pbWNsbGN0LmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoj IDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlh Y2xsY3QuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWdsb2JhbC5oIiAx CgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbnVtcG9z LmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKdHlwZWRlZiB1bnNpZ25lZCBs b25nIElOdW1iZXI7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgSVBvc2l0aW9uOwoKIAoKIyA0MiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWdsb2Jh bC5oIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWlrZXlvcHMuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiMg MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWds b2JhbC5oIiAxCiMgNTAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWlnbG9iYWwuaCIKCiMgMjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlrZXlvcHMuaCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpc3RyZWFtLmgiIDEKCgoKIAogCiAK CgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgogCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFzdHIuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoK CiAKIAogCiAKIAogCgoKCiAKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoK CgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKY2xhc3MgSUFDb2xsZWN0 aW9uU3RyZWFtZXIKewpwdWJsaWM6CiAgSUFDb2xsZWN0aW9uU3RyZWFtZXIoKSB7fTsKICB2aXJ0 dWFsIHZvaWQgc3RyZWFtT3V0IChJRGF0YVN0cmVhbSYgc3RyZWFtLCB2b2lkKiBlbGVtZW50KSA9 IDA7CiAgdmlydHVhbCB2b2lkIHN0cmVhbUluICAoSURhdGFTdHJlYW0mIHN0cmVhbSwgdm9pZCog ZWxlbWVudCkgPSAwOwoKICB2aXJ0dWFsIH5JQUNvbGxlY3Rpb25TdHJlYW1lciAoKSB7fTsKfTsK CiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9w KQoKCgoKIAoKIAogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNw cmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKCiAKCiMgMjkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzdHJlYW0uaCIgMgoKIAoKIAojcHJhZ21hIGlu Zm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwp CiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0Nf TkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKCgog CgogCiAKCiAKCmNsYXNzIElTdHJlYW1lclB0cgp7CnB1YmxpYzoKCiAgSVN0cmVhbWVyUHRyICgp CiAgOiBpdlB0clJjICgwKQogIHsKICB9OwoKICBJU3RyZWFtZXJQdHIgKElBQ29sbGVjdGlvblN0 cmVhbWVyKik7CgogIElTdHJlYW1lclB0ciAoSVN0cmVhbWVyUHRyIGNvbnN0JiBwdHIpCiAgeyBp dlB0clJjID0gcHRyLml2UHRyUmM7CiAgICBpZiAoaXZQdHJSYyAhPSAwKSBpdlB0clJjLT5pdlJj Kys7CiAgfTsKCiAgSVN0cmVhbWVyUHRyJgogIG9wZXJhdG9yPSAoSVN0cmVhbWVyUHRyIGNvbnN0 JiBwdHIpCiAgeyBpZiAodGhpcyAhPSAmcHRyKSB7CiAgICAgIGlmIChpdlB0clJjICYmIC0taXZQ dHJSYy0+aXZSYyA9PSAwKSBkZWxldGUgaXZQdHJSYzsKICAgICAgaXZQdHJSYyA9IHB0ci5pdlB0 clJjOwogICAgICBpZiAoaXZQdHJSYyAhPSAwKSBpdlB0clJjLT5pdlJjKys7CiAgICB9CiAgICBy ZXR1cm4gKnRoaXM7CiAgfTsKCiAgSUFDb2xsZWN0aW9uU3RyZWFtZXIqIG9wZXJhdG9yLT4gKCkg Y29uc3Q7CgogIG9wZXJhdG9yIElBQ29sbGVjdGlvblN0cmVhbWVyKiAoKSBjb25zdDsKCiAgSUFD b2xsZWN0aW9uU3RyZWFtZXImIG9wZXJhdG9yKiAoKSBjb25zdDsKCiAgSUFDb2xsZWN0aW9uU3Ry ZWFtZXIqIFB0ck9mICgpIGNvbnN0CiAgeyByZXR1cm4gKGl2UHRyUmMgPyBpdlB0clJjLT5pdlB0 ciA6IDApOwogIH0KCiAgfklTdHJlYW1lclB0ciAgICAgKCkKICB7IGlmIChpdlB0clJjICE9IDAg JiYgLS1pdlB0clJjLT5pdlJjID09IDApIGRlbGV0ZSBpdlB0clJjOwogIH07Cgpwcml2YXRlOgog IHN0cnVjdCBQdHJSYwogIHsgSUFDb2xsZWN0aW9uU3RyZWFtZXIgKml2UHRyOwoKICAgIHVuc2ln bmVkIGludCBpdlJjOwoKICAgICAgICAgICAgIFB0clJjIChJQUNvbGxlY3Rpb25TdHJlYW1lciAq cHRyKQogICAgICAgICAgICAgOiBpdlB0ciAocHRyKSwgaXZSYyAoMSkKICAgICAgICAgICAgIHsK ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH5QdHJSYyAoKQogICAgICAgICAgICAgeyBkZWxl dGUgaXZQdHI7IH0KCiAgfSAqaXZQdHJSYzsKfTsKCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShw b3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCgogCiNwcmFnbWEgaW5m byhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKCiAK CiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWlrZXlvcHMuaCIgMgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1 c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMjkgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlrZXlvcHMuaCIgMgoKCgoKCgog CgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVS X1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVt YW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoK CgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5Pgp2b2lkKiBJ S2V5RnJvbU9wcyAoS2V5IGNvbnN0Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5PgpLZXkgY29uc3Qm IElLZXlGb3JPcHMgKEtleSBjb25zdCopOwoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNs YXNzIEVsZW1lbnRPcHM+CmNsYXNzICAgSU9wc1dpdGhLZXkgOiBwdWJsaWMgRWxlbWVudE9wcyB7 CnB1YmxpYzoKCiAgRWxlbWVudE9wcwogICAgICAgICAgIGtleU9wczsKCiAgICAgICAgICAgSU9w c1dpdGhLZXkgICAgICAoKTsKCiAgICAgICAgICAgSU9wc1dpdGhLZXkgICAgICAodm9pZCopOwoK ICBFbGVtZW50IGNvbnN0JgogICAgICAgICAgIEtleSAgICAgICAgICAgICAgKEVsZW1lbnQgY29u c3QmKSBjb25zdDsKCnByb3RlY3RlZDoKCnByaXZhdGU6Cgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNw cmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAojIDEg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlrZXlv cHMuaW5sIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0 MiAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm LmgiIDMKCiMgMjUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWlrZXlvcHMuaW5sIiAyCgoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBLZXk+CmlubGlu ZSB2b2lkKiBJS2V5RnJvbU9wcyAoS2V5IGNvbnN0JiBrKQp7IHJldHVybiAodm9pZCopJms7Cn0K CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5PgppbmxpbmUgS2V5IGNvbnN0JiBJS2V5Rm9yT3Bz IChLZXkgY29uc3QqIGspCnsgcmV0dXJuICprOwp9CgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHM+CmlubGluZQpJT3BzV2l0aEtleSA8RWxlbWVudCwg RWxlbWVudE9wcz46OgpJT3BzV2l0aEtleSAoKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUKSU9wc1dpdGhLZXkgPEVsZW1lbnQsIEVsZW1lbnRP cHM+OjoKSU9wc1dpdGhLZXkgKHZvaWQqIG9wc0FyZykKOiBFbGVtZW50T3BzIChvcHNBcmcpLCBr ZXlPcHMgKG9wc0FyZykKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVu dE9wcz4KaW5saW5lIEVsZW1lbnQgY29uc3QmCklPcHNXaXRoS2V5IDxFbGVtZW50LCBFbGVtZW50 T3BzPjo6CktleSAoRWxlbWVudCBjb25zdCYgZSkgY29uc3QKeyByZXR1cm4gZTsKfQoKIAoKIyAx MjkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlr ZXlvcHMuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQoj cHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyA0MyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWdsb2JhbC5oIiAyCgoKIyAxICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhcmd0eXBlLmgiIDEKCgoK IAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAogCgogCiNwcmFnbWEgaW5mbyhub25lKQoj cHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBp bmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJ TkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoKIAoKZW51bSBJQXJnVHlw ZQp7CiAgICBrS2V5LAogICAga0VsZW1lbnQsCiAgICBrS2V5S2V5LAogICAga0VsZW1lbnRLZXks CiAgICBrRWxlbWVudEVsZW1lbnQKfTsKCiAKCiAKIAoKIAogCgogCgoKCgoKCgojcHJhZ21hIGVu dW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21h IGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoK IAoKIyA0NSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9paWdsb2JhbC5oIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWZ1bmMuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAog CgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWlnbG9iYWwuaCIgMQojIDUwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2lpZ2xvYmFsLmgiCgojIDI1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lmdW5jLmgiIDIKCgp0eXBlZGVmIGJvb2wgKCpJQXBw bEZ1bmMpICh2b2lkKiwgdm9pZCopOwoKdHlwZWRlZiBib29sICgqSVByZWRGdW5jKSAodm9pZCBj b25zdCosIHZvaWQqKTsKCnR5cGVkZWYgbG9uZyAoKklDb21wRnVuYykgKHZvaWQgY29uc3QqLCB2 b2lkIGNvbnN0Kiwgdm9pZCopOwoKIAoKIyA0NiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWdsb2JhbC5oIiAyCgogCgogCgojIDI2ICIvaG9tZS9h a25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpYWNsbGN0LmgiIDIK CiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p ZXhjdHh0LmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoKIyAxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ltc2d0ZXh0Lmhw cCIgMQojIDE4MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pbXNndGV4dC5ocHAiCgoKCgoKIyAyNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjdHh0LmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5v bmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJh Z21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVN QU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKIAoKIAogCgog CiAKCiAKCmNsYXNzICAgSUNvbGxlY3Rpb25FeGNlcHRpb25UZXh0CnsKcHVibGljOgoKICAgICAg ICAgICBJQ29sbGVjdGlvbkV4Y2VwdGlvblRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nIHJlc291cmNlSWQpOwoKICAgICAgICAgIH5JQ29sbGVjdGlvbkV4Y2Vw dGlvblRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICBjaGFyIGNvbnN0Kgog ICAgICAgICAgIHRleHQgICAgICAgICAgICAgKCkgY29uc3Q7CgogICAgICAgICAgIG9wZXJhdG9y IGNoYXIgY29uc3QqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSBjb25zdDsKCnByb3Rl Y3RlZDoKCnByaXZhdGU6CgogIElNZXNzYWdlVGV4dCogaXZNc2dUeHQ7Cgp9OwoKIAoKIAoKCgoK CgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoK IAoKIAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWV4Y3R4dC5pbmwiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKaW5saW5l CklDb2xsZWN0aW9uRXhjZXB0aW9uVGV4dDo6Cn5JQ29sbGVjdGlvbkV4Y2VwdGlvblRleHQgKCAp CnsgZGVsZXRlIGl2TXNnVHh0Owp9CgppbmxpbmUgY2hhciBjb25zdCoKSUNvbGxlY3Rpb25FeGNl cHRpb25UZXh0OjoKdGV4dCAoICkgY29uc3QKeyBpZiAoaXZNc2dUeHQgIT0gMCkKICAgIHJldHVy biBpdk1zZ1R4dC0+dGV4dCgpOwogIGVsc2UKICAgIHJldHVybiAidW5rbm93biBleGNlcHRpb24g dGV4dCI7Cn0KCmlubGluZQpJQ29sbGVjdGlvbkV4Y2VwdGlvblRleHQ6OgpvcGVyYXRvciBjaGFy IGNvbnN0KiAoKSBjb25zdAp7IHJldHVybiB0ZXh0ICgpOwp9CgogCgojIDExNiAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjdHh0LmgiIDIKCiAK CiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJl c3RvcmUpCiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaWlhY2xsY3QuaCIgMgoKCgoKCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpdmNsbGN0LmgiIDEKCgoKIAogCiAKCgoK CgoKCgoKCgogCiAKIAogCiAKIAoKIAoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzdGRudGZ5LmhwcCIgMQoKCgogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lub3RpZnkuaHBwIiAxCgoKCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKIyAxICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lub3RhZHIuaHBwIiAxCgoK CiAKIAogCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKCiAKCiAKI3ByYWdtYSBpbmZvKG5v bmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJh Z21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVN QU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKY2xh c3MgSU5vdGlmaWVyOwogCgogCgpjbGFzcyBJTm90aWZpZXJBZGRyZXNzIHsKcHVibGljOgogICAg ICAgIElOb3RpZmllckFkZHJlc3MoKTsKICAgICAgICBJTm90aWZpZXJBZGRyZXNzKGNvbnN0IElO b3RpZmllciogbm90aWZpZXIpOwogICAgICAgIHZpcnR1YWwgfklOb3RpZmllckFkZHJlc3MoKTsK CiAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElOb3RpZmllckFkZHJlc3MmIHNyYyApIGNv bnN0OwogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJTm90aWZpZXJBZGRyZXNzJiBzcmMg KSBjb25zdDsKICAgICAgICBJTm90aWZpZXJBZGRyZXNzICYgb3BlcmF0b3I9KGNvbnN0IElOb3Rp ZmllckFkZHJlc3MmIHNyYyApOwoKIApwdWJsaWM6CiAgICAgICAgSU5vdGlmaWVyJiBub3RpZmll cigpOwoKcHJpdmF0ZToKCiAgICAgICAgY29uc3QgSU5vdGlmaWVyKiBmTm90aWZpZXI7Cn07Cgog CgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkK CgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJh Z21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbm90aWZ5LmhwcCIgMgoKIyAxICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2luZ3RocmQuaHBwIiAxCgoKCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgoK CgoKCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2ljbnRwdHIuaHBwIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCgog CgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hF QURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBu YW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0o NCkKCgoKCgoKCiAKCiAKIAoKIApjbGFzcyBJRGF0YVN0cmVhbTsKY2xhc3MgSVZvaWRNYXN0ZXJQ b2ludGVyOwogCgogCgogCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEFUeXBlPiBjbGFz cyBJQ291bnRlZFBvaW50ZXJUbyB7CiAgcHVibGljOgogCgogICAgIAoKCgoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDb3VudGVkUG9pbnRlclRvICAgICAgICgpOyAg ICAgIAoKICAgICAKCgoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElDb3VudGVkUG9pbnRlclRvICAgICAgIChBVHlwZSogYWRvcHQpOwoKICAgICAKCgoKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNvdW50ZWRQb2ludGVyVG8g ICAgICAgKGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBlPiYgc2hhcmUpOwoKICAgICAKCgoK CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5JQ291bnRlZFBvaW50 ZXJUbyAgICAgICgpOwoKIAogICAgIAoKCgoKCgoKCgoKCgogICAgSUNvdW50ZWRQb2ludGVyVG88 QVR5cGU+JiBvcGVyYXRvciA9IChBVHlwZSogYWRvcHQpOwoKICAgICAKCgoKCgoKCgoKCiAgICBJ Q291bnRlZFBvaW50ZXJUbzxBVHlwZT4mIG9wZXJhdG9yID0gKGNvbnN0IElDb3VudGVkUG9pbnRl clRvPEFUeXBlPiYgc2hhcmUpOwoKIAogICAgIAoKCgoKCgoKCiAgICBBVHlwZSogICAgICAgICAg ICAgICAgICAgICAgb3BlcmF0b3IgLT4gICAgICAgICAgICAgKCkgICAgICBjb25zdDsKCiAgICAg CgoKCgoKICAgIEFUeXBlJiAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciAqICAgICAgICAg ICAgICAoKSAgICAgIGNvbnN0OwoKIAoKICAgICAKCgoKCgoKCgoKCiAgICBBVHlwZSogICAgICAg ICAgICAgICAgICAgICAgZ2V0QWxpYXMgICAgICAgICAgICAgICAgKCkgICAgICBjb25zdDsKCiAg ICAgCgoKCgoKICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCAgICAgICAgICAg ICAgICAgICAoKSAgICAgIGNvbnN0OwoKICAgICAKCgoKCgoKICAgIHZvaWQgICAgICAgICAgICAg ICAgICAgICAgICB2YWxpZGF0ZSAgICAgICAgICAgICAgICAoKSAgICAgIGNvbnN0OwoKICAgICAK CgoKCgoKCgoKCiAgICAgICAgaW9jOjp1bnVtZXJpY190ICAgY291bnQgKCkgY29uc3Q7CgogCgog ICAgIAogICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09ICAgICAgICAg ICAgIChjb25zdCBBVHlwZSAqcikgY29uc3Q7CgogICAgIAoKCiAgICBib29sICAgICAgICAgICAg ICAgICAgICAgICAgb3BlcmF0b3IgPT0gICAgICAgICAgICAgKGNvbnN0IElDb3VudGVkUG9pbnRl clRvPEFUeXBlPiYgcikgY29uc3Q7CgogICAgIAogICAgYm9vbCAgICAgICAgICAgICAgICAgICAg ICAgIG9wZXJhdG9yICE9ICAgICAgICAgICAgIChjb25zdCBBVHlwZSAqcikgY29uc3Q7CgogICAg IAoKCiAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgIT0gICAgICAgICAg ICAgKGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBlPiYgcikgY29uc3Q7CgogCgoKCgogICAg ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbihBVHlwZSogciwg SVZvaWRNYXN0ZXJQb2ludGVyICppbmRpcmVjdCwgSU1SZWZDb3VudGVkICopOwogICAgICAgIHZv aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbihBVHlwZSogciwgSVZvaWRN YXN0ZXJQb2ludGVyICppbmRpcmVjdCwgdm9pZCAqKTsKICAgICAgICBJTVJlZkNvdW50ZWQqICAg ICAgICAgICAgICAgICAgIGdldENvdW50ZWQoKSBjb25zdDsKICAgICAgICBzdGF0aWMgYm9vbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNXcmFwcGVkICgpOwoKCnByaXZhdGU6CiAKICAg ICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVmKCk7CiAg ICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlZigp OwoKICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcEl0 IChJTVJlZkNvdW50ZWQqIGl0KTsKICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd3JhcEl0ICh2b2lkKiBpdCk7CiAgICAgICAgc3RhdGljIGJvb2wgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlzV3JhcHBlZCAoSU1SZWZDb3VudGVkKik7CiAgICAgICAg c3RhdGljIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzV3JhcHBlZCAodm9pZCop OwogICAgICAgIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgZG9EZWxldGUodm9pZCog aXQpOwoKIAogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIEFUeXBlICogICAgICAgICAg ICAgICAgICAgICAgICAgZkRpcmVjdDsKICAgICAgICAgICAgICAgIElWb2lkTWFzdGVyUG9pbnRl ciogICAgIGZJbmRpcmVjdDsKICAgICAgICB9Owp9OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVt KHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pY250cHRyLmlubCIgMQoK CgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCgogCgoKIyAxICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGNiYXNlLmhwcCIgMQoj IDEwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ll eGNiYXNlLmhwcCIKCgojIDcyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiCgoKCgoKCiMgMzEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWNudHB0ci5pbmwiIDIKCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JU X0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5n KF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgog CgogCiAKCiAKIAoKIAoKIAogCiAKIAogCiAKY2xhc3MgSVZvaWRNYXN0ZXJQb2ludGVyIDogcHVi bGljIElNUmVmQ291bnRlZCwgcHVibGljIHZpcnR1YWwgSU1TdHJlYW1hYmxlICB7CiAgICAgICAg cHVibGljOiB2aXJ0dWFsIGNvbnN0IElUeXBlUmVwcmVzZW50YXRpb24mICAgICAgdHlwZVJlcHJl c2VudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmdTdHJlYW1hYmxlSGVscGVyLnR5cGVSZXByZXNl bnRhdGlvbigpOyB9OyBzdGF0aWMgY29uc3QgSVR5cGVSZXByZXNlbnRhdGlvbiYgICAgICAgc3Rh dGljVHlwZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gZmdTdHJlYW1hYmxlSGVscGVyLnR5cGVS ZXByZXNlbnRhdGlvbigpOyB9OyBwcml2YXRlOiBzdGF0aWMgIElTdHJlYW1hYmxlSGVscGVyRm9y PCBJVm9pZE1hc3RlclBvaW50ZXIgPiBmZ1N0cmVhbWFibGVIZWxwZXIgOwpwdWJsaWM6CiAgICAg ICAgdHlwZWRlZiB2b2lkICgqRGVsZXRlcikgKHZvaWQqIHRoZU9iamVjdCk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIElWb2lkTWFzdGVyUG9pbnRlcih2b2lkKiBhZG9wdE9iamVj dCwgRGVsZXRlciBmdW5jdGlvbik7CiAgICAgICAgdmlydHVhbCAgICAgICAgIH5JVm9pZE1hc3Rl clBvaW50ZXIgICAgICgpOwoKICAgICAgICB2b2lkKiAgICAgICAgICAgZ2V0T2JqZWN0ICgpIGNv bnN0OwogICAgICAgIHZvaWQgICAgICAgICAgICBhZG9wdE9iamVjdCh2b2lkICpvYmosIERlbGV0 ZXIgZnVuY3Rpb24pOwoKICAgICAgICBzdGF0aWMgdm9pZCB0aHJvd0ludmFsaWQoKTsKCiAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElWb2lkTWFzdGVyUG9pbnRlcigp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElWb2lkTWFzdGVyUG9pbnRlcihjb25z dCBJVm9pZE1hc3RlclBvaW50ZXImKTsgICAKICAgICAgICB2b2lkICAgICAgICAgICAgd3JpdGVU b1N0cmVhbShJRGF0YVN0cmVhbSYpIGNvbnN0OwogICAgICAgIHZvaWQgICAgICAgICAgICByZWFk RnJvbVN0cmVhbShJRGF0YVN0cmVhbSYpOwoKcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgdm9p ZCAgICAgICAgICAgIG9wZXJhdG9yPShjb25zdCBJVm9pZE1hc3RlclBvaW50ZXImKTsKCiAgICAg ICAgdm9pZCogICAgICAgICAgIGZPYmplY3Q7CiAgICAgICAgRGVsZXRlciAgICAgICAgIGZEZWxl dGVyOwp9OwoKIAoKIAoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5n bGluZyhwb3ApCgoKCgogCgogCmlubGluZSB2b2lkICoKSVZvaWRNYXN0ZXJQb2ludGVyOjpnZXRP YmplY3QgKCkgY29uc3QKewogICAgICAgIHJldHVybiBmT2JqZWN0Owp9CgppbmxpbmUgdm9pZApJ Vm9pZE1hc3RlclBvaW50ZXI6OmFkb3B0T2JqZWN0ICh2b2lkICpvYmosIERlbGV0ZXIgZnVuY3Rp b24pCnsKICAgICAgICBmT2JqZWN0ID0gb2JqOwogICAgICAgIGZEZWxldGVyID0gZnVuY3Rpb247 Cn0KCgogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4KaW5saW5lCnZvaWQgSUNvdW50ZWRQ b2ludGVyVG88QVR5cGU+Ojp3cmFwSXQoSU1SZWZDb3VudGVkKikKewogICAgICAgICAKfQoKdGVt cGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUKdm9pZCBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46 OndyYXBJdCh2b2lkKiBpdCkKewogICAgICAgIGZJbmRpcmVjdCA9IGl0ID8gbmV3IElWb2lkTWFz dGVyUG9pbnRlciAoaXQsICZkb0RlbGV0ZSkgOiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+ CmlubGluZQp2b2lkIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6ZG9EZWxldGUodm9pZCogaXQp CnsKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGRlbGV0ZSAoQVR5cGUqKSBpdDsKfQoKdGVt cGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUKYm9vbCBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46 OmlzV3JhcHBlZChJTVJlZkNvdW50ZWQqKQp7CiAgICAgICAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGluZQpib29sIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6 aXNXcmFwcGVkKHZvaWQqKQp7CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFz cyBBVHlwZT4KaW5saW5lCmJvb2wgSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+Ojppc1dyYXBwZWQo KQp7CiAgICAgICAgcmV0dXJuIGlzV3JhcHBlZCgoQVR5cGUqKTApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQVR5cGU+CmlubGluZQpJTVJlZkNvdW50ZWQqCklDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6 Z2V0Q291bnRlZCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gaXNXcmFwcGVkKCkgPyBmSW5kaXJl Y3QgOiAoSU1SZWZDb3VudGVkKilmRGlyZWN0Owp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgQVR5 cGU+CmlubGluZQp2b2lkCklDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6YWRkUmVmKCkKewogICAg ICAgIGlmICh2YWxpZCgpKQogICAgICAgICAgICAgICAgZ2V0Q291bnRlZCgpLT5hZGRSZWYoKTsK fQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUKdm9pZApJQ291bnRlZFBvaW50ZXJUbzxB VHlwZT46OnJlbW92ZVJlZigpCnsKICAgICAgICBpZiAodmFsaWQoKSkKICAgICAgICAgICAgICAg IGdldENvdW50ZWQoKS0+cmVtb3ZlUmVmKCk7CiAgICAgICAgZkRpcmVjdCA9IDA7Cn0KCiAKIAog CnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4gaW5saW5lCklDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6 SUNvdW50ZWRQb2ludGVyVG8oQVR5cGUqIGFkb3B0KQogICAgICAgIDogZkRpcmVjdChhZG9wdCkK ewogICAgICAgICAKICAgICAgICAgCiAgICAgICAgd3JhcEl0KGFkb3B0KTsKICAgICAgICBhZGRS ZWYoKTsKfQoKIAogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+IGlubGluZQpJQ291bnRlZFBv aW50ZXJUbzxBVHlwZT46OklDb3VudGVkUG9pbnRlclRvKCkKOiBmRGlyZWN0KDApCnsKfQoKdGVt cGxhdGUgPGNsYXNzIEFUeXBlPiBpbmxpbmUKSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+OjpJQ291 bnRlZFBvaW50ZXJUbyhjb25zdCBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT4mIHNoYXJlKQo6IGZE aXJlY3Qoc2hhcmUuZkRpcmVjdCkKewogICAgICAgIGFkZFJlZigpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQVR5cGU+IGlubGluZQpJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46On5JQ291bnRlZFBvaW50 ZXJUbygpCnsKICAgICAgICByZW1vdmVSZWYoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBlPiBp bmxpbmUKSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+JiBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46 Om9wZXJhdG9yPShBVHlwZSogYWRvcHQpCnsKICAgIGlmKGdldEFsaWFzKCkgIT0gYWRvcHQpIHsK ICAgICAgICAgICAgICAgIHJlbW92ZVJlZigpOwogICAgICAgICAgICAgICAgZkRpcmVjdCA9IGFk b3B0OwogICAgICAgICAgICAgICAgd3JhcEl0KGFkb3B0KTsKICAgICAgICAgICAgICAgIGFkZFJl ZigpOwogICAgICAgIH0KICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIEFUeXBl PiBpbmxpbmUKSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+JiBJQ291bnRlZFBvaW50ZXJUbzxBVHlw ZT46Om9wZXJhdG9yPShjb25zdCBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT4mIHNoYXJlKQp7CiAg ICBpZihmRGlyZWN0ICE9IHNoYXJlLmZEaXJlY3QpIHsKICAgICAgICAgICAgICAgIHJlbW92ZVJl ZigpOwogICAgICAgICAgICAgICAgZkRpcmVjdCA9IHNoYXJlLmZEaXJlY3Q7CiAgICAgICAgICAg ICAgICBhZGRSZWYoKTsKICAgICAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0KCgogCiAKIAp0ZW1w bGF0ZSA8Y2xhc3MgQVR5cGU+IGlubGluZQpBVHlwZSogIElDb3VudGVkUG9pbnRlclRvPEFUeXBl Pjo6Z2V0QWxpYXMoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIGlzV3JhcHBlZCgpICAgICAgPyAo ZkluZGlyZWN0ID8gKEFUeXBlKilmSW5kaXJlY3QtPmdldE9iamVjdCgpIDogMCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmRGlyZWN0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQVR5cGU+IGlubGluZQpib29sIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6 dmFsaWQoKSBjb25zdAp7CiAgICByZXR1cm4gKGZEaXJlY3QgIT0gMCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBBVHlwZT4gaW5saW5lCnZvaWQgSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+Ojp2YWxpZGF0 ZSgpIGNvbnN0CnsKICAgIGlmICghdmFsaWQoKSkKICAgICAgICAgICAgICAgIElWb2lkTWFzdGVy UG9pbnRlcjo6dGhyb3dJbnZhbGlkKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBVHlwZT4gaW5saW5l CkFUeXBlKiBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46Om9wZXJhdG9yLT4oKSBjb25zdAp7CiAg ICB2YWxpZGF0ZSgpOwogICAgcmV0dXJuIGdldEFsaWFzKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBB VHlwZT4gaW5saW5lCkFUeXBlJiBJQ291bnRlZFBvaW50ZXJUbzxBVHlwZT46Om9wZXJhdG9yKigp IGNvbnN0CnsKICAgIHZhbGlkYXRlKCk7CiAgICByZXR1cm4gKihnZXRBbGlhcygpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIEFUeXBlPiBpbmxpbmUKaW9jOjp1bnVtZXJpY190IElDb3VudGVkUG9pbnRl clRvPEFUeXBlPjo6Y291bnQgKCkgY29uc3QKewogICAgICAgIHJldHVybiB2YWxpZCgpID8gZ2V0 Q291bnRlZCgpLT5jb3VudCgpIDogMDsKfQoKIAogCiAKdGVtcGxhdGU8Y2xhc3MgQVR5cGU+IGlu bGluZQpib29sIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6b3BlcmF0b3IgPT0gKGNvbnN0IEFU eXBlICpyKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIGdldEFsaWFzKCkgPT0gcjsKfQoKdGVtcGxh dGU8Y2xhc3MgQVR5cGU+IGlubGluZQpib29sIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6b3Bl cmF0b3IgIT0gKGNvbnN0IEFUeXBlICpyKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIGdldEFsaWFz KCkgIT0gcjsKfQoKdGVtcGxhdGU8Y2xhc3MgQVR5cGU+IGlubGluZQpib29sIElDb3VudGVkUG9p bnRlclRvPEFUeXBlPjo6b3BlcmF0b3IgPT0gKGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBl PiYgcikgY29uc3QKewogICAgICAgIHJldHVybiBnZXRBbGlhcygpID09IHIuZ2V0QWxpYXMoKTsK fQoKdGVtcGxhdGU8Y2xhc3MgQVR5cGU+IGlubGluZQpib29sIElDb3VudGVkUG9pbnRlclRvPEFU eXBlPjo6b3BlcmF0b3IgIT0gKGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBlPiYgcikgY29u c3QKewogICAgICAgIHJldHVybiBnZXRBbGlhcygpICE9IHIuZ2V0QWxpYXMoKTsKfQoKdGVtcGxh dGU8Y2xhc3MgQVR5cGU+IGlubGluZQpib29sIG9wZXJhdG9yID09IChjb25zdCBBVHlwZSogbCwg Y29uc3QgSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+JnIpCnsKICAgICAgICByZXR1cm4gbCA9PSBy LmdldEFsaWFzKCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEFUeXBlPiBpbmxpbmUKYm9vbCBvcGVyYXRv ciAhPSAoY29uc3QgQVR5cGUqIGwsIGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBlPiZyKQp7 CiAgICAgICAgcmV0dXJuIGwgIT0gci5nZXRBbGlhcygpOwp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xh c3MgQVR5cGU+CmlubGluZQp2b2lkIElDb3VudGVkUG9pbnRlclRvPEFUeXBlPjo6aW4oQVR5cGUq IHJhdywgSVZvaWRNYXN0ZXJQb2ludGVyKiBpbmRpcmVjdCwgdm9pZCopCnsKICAgICAgICByZW1v dmVSZWYoKTsKCiAgICAgICAgIAogICAgICAgIGZJbmRpcmVjdCA9IGluZGlyZWN0OwogICAgICAg IGlmIChyYXcpCiAgICAgICAgICAgICAgICBmSW5kaXJlY3QtPmFkb3B0T2JqZWN0KHJhdywgZG9E ZWxldGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGluZQp2b2lkIElDb3VudGVkUG9p bnRlclRvPEFUeXBlPjo6aW4oQVR5cGUqIHJhdywgSVZvaWRNYXN0ZXJQb2ludGVyKiwgSU1SZWZD b3VudGVkKikKewoKICAgICAgICAgCiAgICAgICAgb3BlcmF0b3I9KCByYXcgKTsKCiAgICAgICAg Z2V0Q291bnRlZCgpLT5yZW1vdmVSZWYoKTsKfQoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBB VHlwZT4KaW5saW5lCkFUeXBlKgpjb3B5UG9pbnRlcihjb25zdCBJQ291bnRlZFBvaW50ZXJUbzxB VHlwZT4mIG9iamVjdCkKewogICAgICAgIHJldHVybiA6OmNvcHkoICoob2JqZWN0LmdldEFsaWFz KCkpICkgOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+CmlubGluZQp2b2lkCm9wZXJhdG9yPj49 KGNvbnN0IElDb3VudGVkUG9pbnRlclRvPEFUeXBlPiYgb2JqZWN0LCBJRGF0YVN0cmVhbSYgdG9T dHJlYW0pCnsKICAgICAgICA6OndyaXRlQ291bnRlZE9iamVjdCggb2JqZWN0LmdldEFsaWFzKCks IG9iamVjdC5nZXRDb3VudGVkKCksIG9iamVjdC5pc1dyYXBwZWQoKSwgdG9TdHJlYW0gKTsKfQoK dGVtcGxhdGUgPGNsYXNzIEFUeXBlPgppbmxpbmUKdm9pZApvcGVyYXRvcjw8PShJQ291bnRlZFBv aW50ZXJUbzxBVHlwZT4mIHJlc3VsdCwgSURhdGFTdHJlYW0mIGZyb21TdHJlYW0pCnsKICAgICAg ICBBVHlwZSogcmF3OwogICAgICAgIElWb2lkTWFzdGVyUG9pbnRlciogaW5kaXJlY3Q7CiAgICAg ICAgOjpyZWFkQ291bnRlZE9iamVjdCggcmF3LCBpbmRpcmVjdCwgcmVzdWx0LmlzV3JhcHBlZCgp LCBmcm9tU3RyZWFtICk7CiAgICAgICAgcmVzdWx0LmluKCByYXcsIGluZGlyZWN0LCAoQVR5cGUq KTAgKTsKfQoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJh Z21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyODUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWNudHB0ci5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZv KG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCnRlbXBs YXRlIDxjbGFzcyBBVHlwZT4gQVR5cGUqICAgY29weVBvaW50ZXIoY29uc3QgSUNvdW50ZWRQb2lu dGVyVG88QVR5cGU+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVR5cGU+IHZvaWQgICAgICAgICAgICAg b3BlcmF0b3I+Pj0oY29uc3QgSUNvdW50ZWRQb2ludGVyVG88QVR5cGU+JiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElEYXRhU3RyZWFtJiB0b1N0cmVhbSk7CnRlbXBsYXRlIDxjbGFz cyBBVHlwZT4gdm9pZCAgICAgICAgICAgICBvcGVyYXRvcjw8PShJQ291bnRlZFBvaW50ZXJUbzxB VHlwZT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURhdGFTdHJlYW0mIGZyb21T dHJlYW0pOwoKIAoKIyA0MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pbmd0aHJkLmhwcCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdt YSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1ND SEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIApjbGFzcyBJQ3VycmVu dE5vbkdVSVRocmVhZDsKY2xhc3MgSUN1cnJlbnROb25HVUlUaHJlYWREYXRhOwpjbGFzcyBJU3Rh cnRlZFRocmVhZDsKY2xhc3MgSVRocmVhZEN1cnNvckRhdGE7CiAKCiAKCmNsYXNzICAgSVRocmVh ZEZuIDogcHVibGljIElNUmVmQ291bnRlZCB7CnB1YmxpYzoKICAgIElUaHJlYWRGbigpIHt9CiAg ICB2aXJ0dWFsIH5JVGhyZWFkRm4oKSB7fQogICAgdmlydHVhbCB2b2lkIHJ1bigpID0gMDsKcHJp dmF0ZToKICAgIElUaHJlYWRGbihjb25zdCBJVGhyZWFkRm4mIGZ1bmN0aW9uKSB7fQogICAgSVRo cmVhZEZuICZvcGVyYXRvcj0oY29uc3QgSVRocmVhZEZuJiBmdW5jdGlvbikgeyByZXR1cm4gKnRo aXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyAgIElUaHJlYWRNZW1iZXJGbiA6IHB1 YmxpYyBJVGhyZWFkRm4KewpwdWJsaWM6CiAgICBJVGhyZWFkTWVtYmVyRm4oVCAmb2JqLCB2b2lk IChUIDo6ICptZW0pKCkpCiAgICAgICAgICAgIDogbWVtYmVyKG1lbSksIG9iamVjdChvYmopIHt9 CiAgICB2aXJ0dWFsIH5JVGhyZWFkTWVtYmVyRm4oKSB7fQogICAgdmlydHVhbCB2b2lkIHJ1bigp IHsgKG9iamVjdC4qbWVtYmVyKSgpOyB9Cgpwcml2YXRlOgogICAgSVRocmVhZE1lbWJlckZuKGNv bnN0IElUaHJlYWRNZW1iZXJGbjxUPiYgdGhyZWFkRnVuY3Rpb24pCiAgICAgICAgICAgIDogbWVt YmVyKHRocmVhZEZ1bmN0aW9uLm1lbWJlciksIG9iamVjdCh0aHJlYWRGdW5jdGlvbi5vYmplY3Qp IHt9CiAgICBJVGhyZWFkTWVtYmVyRm48VD4gJm9wZXJhdG9yPShjb25zdCBJVGhyZWFkTWVtYmVy Rm48VD4mIHRocmVhZEZ1bmN0aW9uKQogICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgVCAm b2JqZWN0OwogICAgdm9pZCAoVDo6Km1lbWJlcikoKTsKfTsKCmNsYXNzICAgSU5vbkdVSVRocmVh ZAp7CnB1YmxpYzoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCiAgICBlbnVtIEVUaHJlYWRQcmlv cml0eQogICAgewogICAgICAgIGlkbGUgICAgICAgICAgICAgID0gMTAwMCwKICAgICAgICBiZWxv d05vcm1hbCAgICAgICA9IDEwMDEsCiAgICAgICAgbm9ybWFsICAgICAgICAgICAgPSAxMDAyLAog ICAgICAgIGFib3ZlTm9ybWFsICAgICAgID0gMTAwMywKICAgICAgICB0aW1lQ3JpdGljYWwgICAg ICA9IDEwMDQsCgogICAgICAgIG1pblByaW9yaXR5ICAgICAgID0gMTAwMCwKICAgICAgICBtYXhQ cmlvcml0eSAgICAgICA9IDEwMDQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICggKiBPcHRsaW5r Rm5QdHIpICh2b2lkKik7CiAgICB0eXBlZGVmIHZvaWQgKCAqICBTeXN0ZW1GblB0cikgKGlvYzo6 dW51bWVyaWNfdCk7CgogICAgIAogICAgIAogICAgIAogICAgSU5vbkdVSVRocmVhZCgpOwogICAg SU5vbkdVSVRocmVhZChjb25zdCBJTm9uR1VJVGhyZWFkJiB0aHJlYWQpOwogICAgSU5vbkdVSVRo cmVhZChjb25zdCBJVGhyZWFkSWQmIHRocmVhZElELAogICAgICAgICAgICAgICAgICBjb25zdCBJ VGhyZWFkSGFuZGxlJiB0aHJlYWRIYW5kbGUgPSBJVGhyZWFkSGFuZGxlKCkpOwogICAgSU5vbkdV SVRocmVhZChjb25zdCBJQ291bnRlZFBvaW50ZXJUbzxJVGhyZWFkRm4+JiBmdW5jdGlvbik7CiAg ICBJTm9uR1VJVGhyZWFkKE9wdGxpbmtGblB0ciBmdW5jdGlvbiwgdm9pZCAqZnVuY3Rpb25Bcmd1 bWVudCk7CiAgICBJTm9uR1VJVGhyZWFkKFN5c3RlbUZuUHRyIGZ1bmN0aW9uLCBpb2M6OnVudW1l cmljX3QgZnVuY3Rpb25Bcmd1bWVudCk7CiAgICB2aXJ0dWFsIH5JTm9uR1VJVGhyZWFkKCk7Cgog ICAgIAogICAgIAogICAgIAogICAgdmlydHVhbCB2b2lkIHN0YXJ0KGNvbnN0IElDb3VudGVkUG9p bnRlclRvPElUaHJlYWRGbj4mIGZ1bmN0aW9uKTsKICAgIHZpcnR1YWwgdm9pZCBzdGFydChPcHRs aW5rRm5QdHIgZnVuY3Rpb24sIHZvaWQgKmZ1bmN0aW9uQXJndW1lbnQpOwogICAgdmlydHVhbCB2 b2lkIHN0YXJ0KFN5c3RlbUZuUHRyIGZ1bmN0aW9uLCBpb2M6OnVudW1lcmljX3QgIGZ1bmN0aW9u QXJndW1lbnQpOwogICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKICAgIHZpcnR1YWwgdm9pZCBzdXNw ZW5kKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CgogICAgIAogICAgIAogICAgIAogICAg dmlydHVhbCBpb2M6OnVudW1lcmljX3Qgc3RhY2tTaXplKCkgY29uc3Q7CiAgICB2aXJ0dWFsIElO b25HVUlUaHJlYWQmIHNldFN0YWNrU2l6ZShpb2M6OnVudW1lcmljX3Qgc2l6ZSk7CiAgICBzdGF0 aWMgaW9jOjp1bnVtZXJpY190IGRlZmF1bHRTdGFja1NpemUoKTsKICAgIHN0YXRpYyB2b2lkIHNl dERlZmF1bHRTdGFja1NpemUoaW9jOjp1bnVtZXJpY190IHNpemUpOwoKICAgICAKICAgICAKICAg ICAKICAgIHZpcnR1YWwgSU5vbkdVSVRocmVhZDo6RVRocmVhZFByaW9yaXR5IHRocmVhZFByaW9y aXR5KCkgY29uc3Q7CiAgICB2aXJ0dWFsIElOb25HVUlUaHJlYWQmIHNldFRocmVhZFByaW9yaXR5 KAogICAgY29uc3QgSU5vbkdVSVRocmVhZDo6RVRocmVhZFByaW9yaXR5IG5ld1ByaW9yaXR5KTsK CiAgICAgCiAgICAgCiAgICAgCiAgICBzdGF0aWMgSUN1cnJlbnROb25HVUlUaHJlYWQmIGN1cnJl bnQoKTsKICAgIHZpcnR1YWwgSVRocmVhZElkIGlkKCkgY29uc3Q7CiAgICBzdGF0aWMgSVRocmVh ZElkIGN1cnJlbnRJZCgpOwogICAgdmlydHVhbCBJVGhyZWFkSGFuZGxlIGhhbmRsZSgpIGNvbnN0 OwogICAgc3RhdGljIElUaHJlYWRIYW5kbGUgY3VycmVudEhhbmRsZSgpOwogICAgdmlydHVhbCBi b29sIGlzU3RhcnRlZCgpIGNvbnN0OwogICAgaW9jOjp1bnVtZXJpY190IGV4aXRDb2RlKCkgY29u c3Q7CgogICAgIAogICAgIAogICAgIAogICAgdmlydHVhbCBJU3RyaW5nIGFzU3RyaW5nKCkgY29u c3Q7CiAgICB2aXJ0dWFsIElTdHJpbmcgYXNEZWJ1Z0luZm8oKSBjb25zdDsKCiAgICAgCiAgICAg CiAgICAgCiAgICAgCiAgICBJU3RyaW5nIHZhcmlhYmxlKGNvbnN0IElTdHJpbmcmIGtleSkgY29u c3Q7CiAgICBJTm9uR1VJVGhyZWFkJiBzZXRWYXJpYWJsZShjb25zdCBJU3RyaW5nJiBrZXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nJiB2YWx1ZSk7CgogICAg IAogICAgIAogICAgIAogICAgY2xhc3MgICBDdXJzb3IKICAgIHsKICAgIHB1YmxpYzoKICAgICAg ICBDdXJzb3IoYm9vbCBhbGxUaHJlYWRzID0gdHJ1ZSk7CiAgICAgICAgdmlydHVhbCB+Q3Vyc29y KCk7CiAgICAgICAgdmlydHVhbCBib29sIHNldFRvRmlyc3QoKTsKICAgICAgICB2aXJ0dWFsIGJv b2wgc2V0VG9OZXh0KCk7CiAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKICAg ICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgICAgIElUaHJlYWRJZCB0aHJlYWRJ ZCgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgZnJpZW5kIGNsYXNzIElTdGFydGVkVGhy ZWFkOwogICAgICAgIGZyaWVuZCBjbGFzcyBJV2luZG93OwoKICAgICAgICBib29sIGFsbDsKICAg ICAgICBib29sIGl0ZXJhdGVkQWxsOwogICAgICAgIGJvb2wgYWR2YW5jZSgpOwogICAgICAgIHVu c2lnbmVkIGN1cnNvcjsKICAgICAgICB1bnNpZ25lZCBjcmVhdGVkOwogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCB0aW1lU3RhbXA7CiAgICAgICAgSVRocmVhZEN1cnNvckRhdGEqIGZDdXJzb3JEYXRh OwogICAgfTsKCgogICAgIAoKCgoKIyAyNDIgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaW5ndGhyZC5ocHAiCgoKcHJvdGVjdGVkOgogICAgdmlydHVh bCBJU3RhcnRlZFRocmVhZCogc3RhcnRlZFRocmVhZCgpIGNvbnN0OwogICAgc3RhdGljIElTdGFy dGVkVGhyZWFkKiBuZXdTdGFydGVkVGhyZWFkKCk7CiAgICBJTm9uR1VJVGhyZWFkJiBvcGVyYXRv cj0oY29uc3QgSU5vbkdVSVRocmVhZCYgdGhyZWFkKTsKCnByaXZhdGU6CiAgICBmcmllbmQgY2xh c3MgSUN1cnJlbnROb25HVUlUaHJlYWQ7CiAgICBmcmllbmQgY2xhc3MgSVdpbmRvdzsKCiAgICBJ U3RhcnRlZFRocmVhZCogcHJlcGFyZVRvU3RhcnQoY29uc3QgSUNvdW50ZWRQb2ludGVyVG88SVRo cmVhZEZuPiYpOwogICAgdm9pZCB0aHJlYWRTdGFydGVkKElTdGFydGVkVGhyZWFkKiB0aHJlYWQs IGludCByYywgSVRocmVhZElkIHRocmVhZElkKTsKCiAgICBJU3RhcnRlZFRocmVhZCAqdGhyZWFk OwogICAgc3RhdGljIGlvYzo6dW51bWVyaWNfdCBkZmx0U3RhY2tTaXplOwoKCiAKICAgIHB0aHJl YWRfdCBwdGg7CiAKICAgIHN0YXRpYyBib29sIGluaXRJblByb2dyZXNzOwoKfTsgIAoKIAoKCmNs YXNzICAgSUN1cnJlbnROb25HVUlUaHJlYWQgOiBwdWJsaWMgSU5vbkdVSVRocmVhZAp7CiAgICB0 eXBlZGVmIElOb25HVUlUaHJlYWQgSW5oZXJpdGVkOwpwdWJsaWM6CiAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSUN1cnJlbnROb25HVUlUaHJlYWQoKTsKICAgIHZp cnR1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICB+SUN1cnJlbnROb25HVUlUaHJlYWQoKTsK CiAgICB2aXJ0dWFsIGlvYzo6dW51bWVyaWNfdCAgICAgICAgICByZW1haW5pbmdTdGFjaygpIGNv bnN0OwoKICAgIHZpcnR1YWwgSUN1cnJlbnROb25HVUlUaHJlYWQmICAgIHNsZWVwKGlvYzo6dW51 bWVyaWNfdCBtaWxsaXNlY29uZHMpOwogICAgdmlydHVhbCBJQ3VycmVudE5vbkdVSVRocmVhZCYg ICAgd2FpdEZvcihjb25zdCBJTm9uR1VJVGhyZWFkJiBhbm90aGVyVGhyZWFkKTsKICAgIHZpcnR1 YWwgSUN1cnJlbnROb25HVUlUaHJlYWQmICAgIHdhaXRGb3IoY29uc3QgSU5vbkdVSVRocmVhZCYg YW5vdGhlclRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW9jOjpudW1lcmljX3QgdGltZW91dCk7CiAgICB2aXJ0dWFsIElDdXJyZW50Tm9uR1VJVGhy ZWFkJiAgICB3YWl0Rm9yKGNvbnN0IElOb25HVUlUaHJlYWQmIGFub3RoZXJUaHJlYWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvYzo6bnVtZXJpY190IHRp bWVvdXQsIGJvb2wgKnRpbWVkT3V0KTsKICAgIHZpcnR1YWwgSUN1cnJlbnROb25HVUlUaHJlYWQm ICAgIHdhaXRGb3JBbGxUaHJlYWRzKGlvYzo6bnVtZXJpY190IHRpbWVvdXQgPSAtMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnRp bWVkT3V0ID0gMCk7CiAgICB2aXJ0dWFsIElUaHJlYWRJZCAgICAgICAgICAgICAgICB3YWl0Rm9y QW55VGhyZWFkKGlvYzo6bnVtZXJpY190IHRpbWVvdXQgPSAtMSk7CgogICAgdmlydHVhbCB2b2lk ICAgICAgICAgICAgICAgICAgICAgZXhpdChpb2M6OnVudW1lcmljX3QgcmV0dXJuQ29kZSk7Cgog ICAgIAogICAgdmlydHVhbCBJVGhyZWFkSWQgICAgICAgICAgICAgICAgaWQoKSBjb25zdDsKICAg IHZpcnR1YWwgSVRocmVhZEhhbmRsZSAgICAgICAgICAgIGhhbmRsZSgpIGNvbnN0OwoKICAgICAK ICAgIHZpcnR1YWwgdm9pZCAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmQoKTsKCnByb3RlY3Rl ZDoKICAgICAKICAgIHZpcnR1YWwgSVN0YXJ0ZWRUaHJlYWQqICAgICAgICAgIHN0YXJ0ZWRUaHJl YWQoKSBjb25zdDsKcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyAgICAgICAgICAgICAgICAgICAg IElOb25HVUlUaHJlYWQ7CiAgICBmcmllbmQgY2xhc3MgICAgICAgICAgICAgICAgICAgICBJQ3Vy cmVudFRocmVhZDsKCiAgICBJQ3VycmVudE5vbkdVSVRocmVhZERhdGEqICAgICAgICBmQ3VycmVu dFRocmVhZERhdGE7Cn07CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEg bmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2luZ3RocmQuaW5sIiAxCgoKCiAKIAogCgoKCgoKCgoK CgoKCgoKIAogCiAKIAogCiAKCgppbmxpbmUgaW9jOjp1bnVtZXJpY190IElOb25HVUlUaHJlYWQg OjogZGVmYXVsdFN0YWNrU2l6ZSgpCnsKICAgIHJldHVybiBJTm9uR1VJVGhyZWFkOjpkZmx0U3Rh Y2tTaXplOwp9CgppbmxpbmUgdm9pZCBJTm9uR1VJVGhyZWFkIDo6IHNldERlZmF1bHRTdGFja1Np emUoaW9jOjp1bnVtZXJpY190IG5ld1N0a1NpemUpCnsKICAgIElOb25HVUlUaHJlYWQ6OmRmbHRT dGFja1NpemUgPSBuZXdTdGtTaXplOwp9CgoKCiAKCiMgMzMwICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2luZ3RocmQuaHBwIiAyCgogCgogCiNwcmFn bWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQog CgogCgojIDMxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lub3RpZnkuaHBwIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9y dChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUp CiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoK CgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoKIAp0eXBlZGVmIGNvbnN0IGNoYXIqIElOb3Rp ZmljYXRpb25JZDsKIAoKIApjbGFzcyBJSW50ZXJlc3Q7CmNsYXNzIElOb3RpZmllckFkZHJlc3M7 CmNsYXNzIElPYnNlcnZlcjsKY2xhc3MgSU9ic2VydmVyTGlzdDsKY2xhc3MgSU5vdGlmaWNhdGlv bkV2ZW50OwpjbGFzcyBJRXZlbnREYXRhOwogCgogCgpjbGFzcyBJTm90aWZpZXIKewpwdWJsaWM6 CiAgICAgCiAgICBJTm90aWZpZXIoKTsKICAgIHZpcnR1YWwgfklOb3RpZmllcigpOwoKICAgICAK ICAgIHZpcnR1YWwgSU5vdGlmaWVyJiBlbmFibGVOb3RpZmljYXRpb24oYm9vbCBlbmFibGUgPSB0 cnVlKSA9IDA7CiAgICB2aXJ0dWFsIElOb3RpZmllciYgZGlzYWJsZU5vdGlmaWNhdGlvbigpID0g MDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9yTm90aWZpY2F0aW9uKCkgY29uc3QgPSAw OwoKICAgICAKICAgIHZpcnR1YWwgSU5vdGlmaWVyJiBub3RpZnlPYnNlcnZlcnMoY29uc3QgSU5v dGlmaWNhdGlvbkV2ZW50JiBldmVudCkgPSAwOwogICAgdmlydHVhbCBJTm90aWZpZXImIG5vdGlm eU9ic2VydmVyc0FzeW5jKGNvbnN0IElOb3RpZmljYXRpb25FdmVudCYgZXZlbnQpOwoKICAgIHZp cnR1YWwgSU5vdGlmaWVyQWRkcmVzcyBub3RpZmllckFkZHJlc3MoKSBjb25zdDsKCiAgICBjb25z dCBJVGhyZWFkSWQmIHRocmVhZElkKCkgY29uc3Q7CgoKICAgICAKICAgIHN0YXRpYyBJTm90aWZp Y2F0aW9uSWQgY29uc3QgICBhbGxDaGFuZ2VzSWQ7CiAgICBzdGF0aWMgSU5vdGlmaWNhdGlvbklk IGNvbnN0ICAgZGVsZXRlSWQ7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2aXJ0dWFsIElOb3RpZmll ciYgYWRkT2JzZXJ2ZXIoSU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgSUludGVyZXN0JiBpbnRl cmVzdCk7CiAgICB2aXJ0dWFsIElOb3RpZmllciYgcmVtb3ZlT2JzZXJ2ZXIoSU9ic2VydmVyJiBv YnNlcnZlcikgPSAwOwogICAgdmlydHVhbCBJTm90aWZpZXImIHJlbW92ZU9ic2VydmVyKElPYnNl cnZlciYgb2JzZXJ2ZXIsIGNvbnN0IElJbnRlcmVzdCYgaW50ZXJlc3QpOwogICAgdmlydHVhbCBJ Tm90aWZpZXImIHJlbW92ZUFsbE9ic2VydmVycygpID0gMDsKCiAgICB2aXJ0dWFsIElPYnNlcnZl ckxpc3QmIG9ic2VydmVyTGlzdChjb25zdCBJSW50ZXJlc3QqIGFuSW50ZXJlc3QgPSAwKSBjb25z dCA9IDA7CgogICAgIAogICAgdmlydHVhbCBJTm90aWZpZXImIG5vdGlmeU9ic2VydmVycyhjb25z dCBJTm90aWZpY2F0aW9uSWQmIGlkKSA9IDA7Cgpwcml2YXRlOgogICAgIAogICAgZnJpZW5kIGNs YXNzIElPYnNlcnZlcjsKICAgIGZyaWVuZCBjbGFzcyBJSW50ZXJlc3Q7CgogICAgSVRocmVhZElk IGZUaHJlYWRJZDsKCiAgICAgCgpwdWJsaWM6CiAgICB2aXJ0dWFsIElOb3RpZmllciYgYWRkT2Jz ZXJ2ZXIoSU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgSUV2ZW50RGF0YSYgdXNlckRhdGEpID0g MDsKCn07CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmds aW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQo cG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyOSAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RkbnRmeS5ocHAiIDIKCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pb2JzbGlzdC5o cHAiIDEKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgog CgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVB REVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5h bWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0 KQoKCgoKCgoKIAoKIAogCgogCmNsYXNzIElPYnNlcnZlcjsKY2xhc3MgSU5vdGlmaWNhdGlvbkV2 ZW50OwpjbGFzcyBJT2JzZXJ2ZXJQb2ludGVyczsKY2xhc3MgSU9ic2VydmVyTGlzdERhdGE7CiAK CiAKCmNsYXNzIElPYnNlcnZlckxpc3QKewpwdWJsaWM6CiAgICAgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJT2JzZXJ2ZXJMaXN0KCk7CiAgICB2aXJ0dWFsICAgICAgICAgICAgICAgICB+ SU9ic2VydmVyTGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPYnNlcnZlckxp c3QoY29uc3QgSU9ic2VydmVyTGlzdCYgb2JzTGlzdCk7CgogICAgSU9ic2VydmVyTGlzdCYgICAg ICAgICAgb3BlcmF0b3I9KGNvbnN0IElPYnNlcnZlckxpc3QmIG9ic0xpc3QpOwoKICAgICAKICAg IElPYnNlcnZlckxpc3QmICAgICAgICAgIG5vdGlmeU9ic2VydmVycyhjb25zdCBJTm90aWZpY2F0 aW9uRXZlbnQmIGV2ZW50KTsKCiAgICBJT2JzZXJ2ZXJMaXN0JiAgICAgICAgICBub3RpZnlPYnNl cnZlcnNBc3luYyhjb25zdCBJTm90aWZpY2F0aW9uRXZlbnQmIGFuRXZlbnQpOwoKICAgICAKICAg IHZpcnR1YWwgYm9vbCAgICAgICAgICAgIGFkZChJT2JzZXJ2ZXImIG9ic2VydmVyLCB2b2lkKiB1 c2VyRGF0YSk7CgogICAgdmlydHVhbCBJT2JzZXJ2ZXJMaXN0JiAgcmVtb3ZlKGNvbnN0IElPYnNl cnZlciYgb2JzZXJ2ZXIpOwogICAgdmlydHVhbCBJT2JzZXJ2ZXJMaXN0JiAgcmVtb3ZlQWxsKCk7 CgogICAgYm9vbCAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSgpIGNvbnN0OwoKCnByaXZhdGU6 CiAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICBsb2NrTGlzdCgpOwogICAgdm9pZCAg ICAgICAgICAgICAgICAgICAgdW5sb2NrTGlzdCgpOwoKICAgIElPYnNlcnZlclBvaW50ZXJzKiAg ICAgIGZPYnNlcnZlclBvaW50ZXJzOwogICAgaW9jOjp1bnVtZXJpY190ICAgICAgICAgZk5vdGlm eURlcHRoOwogICAgSU9ic2VydmVyTGlzdERhdGEqICAgICAgZk9ic2VydmVyTGlzdERhdGE7Cgog ICAgZnJpZW5kIGNsYXNzICAgICAgICAgICAgSU9ic2VydmVyTGlzdERhdGE7Cn07CgogCgogCgoK CgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAK CiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKIAoKIyAzMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pc3RkbnRmeS5ocHAiIDIKCgojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWludHJzdC5ocHAiIDEKCgoKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgoKIAoKIAojcHJhZ21h IGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVW RUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19J T0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAK IAoKIApjbGFzcyBJSW50ZXJlc3Q7CmlubGluZSBpb2M6OnVudW1lcmljX3QgaGFzaChJSW50ZXJl c3QgY29uc3QmIGssIGlvYzo6dW51bWVyaWNfdCBuKTsKIAoKIAoKY2xhc3MgSUludGVyZXN0CnsK cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICBJSW50ZXJlc3QoKTsKICAgICAgICAgICAg ICAgICAgICAgICAgSUludGVyZXN0KGNvbnN0IElOb3RpZmllciYsIGNvbnN0IElOb3RpZmljYXRp b25JZCYpOwogICAgICAgICAgICAgICAgICAgICAgICBJSW50ZXJlc3QoY29uc3QgSUludGVyZXN0 JiBzcmMpOwoKICAgIHZpcnR1YWwgICAgICAgICAgICAgfklJbnRlcmVzdCgpOwogICAgSU5vdGlm aWNhdGlvbklkICAgICBub3RpZmljYXRpb25JZCgpIGNvbnN0OwogICAgSU5vdGlmaWVyQWRkcmVz cyAgICBub3RpZmllckFkZHJlc3MoKSBjb25zdDsKICAgIElJbnRlcmVzdCYgICAgICAgICAgb3Bl cmF0b3I9KGNvbnN0IElJbnRlcmVzdCYgcmhzICk7CiAgICBib29sICAgICAgICAgICAgICAgIG9w ZXJhdG9yPChjb25zdCBJSW50ZXJlc3QmIHJocykgY29uc3Q7CiAgICBib29sICAgICAgICAgICAg ICAgIG9wZXJhdG9yPT0oY29uc3QgSUludGVyZXN0JiB0aGVJbnRlcmVzdCkgY29uc3Q7CiAgICBi b29sICAgICAgICAgICAgICAgIG9wZXJhdG9yIT0oY29uc3QgSUludGVyZXN0JiB0aGVJbnRlcmVz dCkgY29uc3Q7CiAgICBpb2M6OnVudW1lcmljX3QgICAgIGhhc2hWYWx1ZSgpIGNvbnN0OwoKICAg IGZyaWVuZCBpb2M6OnVudW1lcmljX3QgaGFzaCAoSUludGVyZXN0IGNvbnN0JiBrLCBpb2M6OnVu dW1lcmljX3Qgbik7CgogICAgdmlydHVhbCB2b2lkICAgICAgICBub3RpZnlPYnNlcnZlcnMoSU5v dGlmaWNhdGlvbkV2ZW50Jik7CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIG5vdGlmeU9ic2VydmVy c0FzeW5jKElOb3RpZmljYXRpb25FdmVudCYpOwoKcHJvdGVjdGVkOgogICAgc3RhdGljICBpb2M6 OnVudW1lcmljX3QgY29tcHV0ZUhhc2hWYWx1ZShjb25zdCBjaGFyKiBwU3RyaW5nKTsKCnByaXZh dGU6CiAgICBJTm90aWZpY2F0aW9uSWQgICAgIGZOYW1lOwogICAgSU5vdGlmaWVyQWRkcmVzcyAg ICBmTm90aWZpZXJBZGRyZXNzOwogICAgaW9jOjp1bnVtZXJpY190ICAgICBmSGFzaFZhbHVlOwog ICAgSU9ic2VydmVyTGlzdCogICAgICBmcE9ic2VydmVyQ2FjaGU7Cn07CgogCgogCgoKCgoKCgoj cHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAx ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpbnRy c3QuaW5sIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAoKaW5saW5lIGJvb2wgSUludGVyZXN0OjpvcGVyYXRvcjwoY29uc3QgSUludGVyZXN0JiByaHMp IGNvbnN0CnsKICAgIHJldHVybiAoZk5hbWUgPCByaHMuZk5hbWUpOwp9CgppbmxpbmUgaW9jOjp1 bnVtZXJpY190IGhhc2goSUludGVyZXN0IGNvbnN0JiBrLCBpb2M6OnVudW1lcmljX3QgbikKewog ICAgcmV0dXJuIGsuaGFzaFZhbHVlKCkgJSBuOwp9CgogCgojIDEyMCAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paW50cnN0LmhwcCIgMgoKIAoKIAoj cHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9y ZSkKIAoKIAoKIyAzMiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pc3RkbnRmeS5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEg cmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVz dG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hF TUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSU9ic2VydmVy TGlzdDsKY2xhc3MgSU9ic2VydmVyOwpjbGFzcyBJTm90aWZpY2F0aW9uRXZlbnQ7CmNsYXNzIElO b3RpZmllckltcGxlbWVudGF0aW9uOwogCgogCgpjbGFzcyBJU3RhbmRhcmROb3RpZmllciA6IHB1 YmxpYyBJTm90aWZpZXIKewogICAgdHlwZWRlZiBJTm90aWZpZXIgSW5oZXJpdGVkOwoKcHVibGlj OgogICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSVN0YW5kYXJkTm90aWZpZXIoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTdGFuZGFyZE5vdGlmaWVyKGNvbnN0IElTdGFu ZGFyZE5vdGlmaWVyJiBjb3B5KTsKICAgIElTdGFuZGFyZE5vdGlmaWVyJiAgICAgIG9wZXJhdG9y PShjb25zdCBJU3RhbmRhcmROb3RpZmllciYgYVN0YW5kYXJkTm90aWZpZXIpOwoKICAgIHZpcnR1 YWwgICAgICAgICAgICAgICAgIH5JU3RhbmRhcmROb3RpZmllcigpOwoKICAgICAKICAgIHZpcnR1 YWwgSVN0YW5kYXJkTm90aWZpZXImIGVuYWJsZU5vdGlmaWNhdGlvbihib29sIGVuYWJsZSA9IHRy dWUpOwogICAgdmlydHVhbCBJU3RhbmRhcmROb3RpZmllciYgZGlzYWJsZU5vdGlmaWNhdGlvbigp OwoKICAgIHZpcnR1YWwgYm9vbCAgICAgICAgICAgIGlzRW5hYmxlZEZvck5vdGlmaWNhdGlvbigp IGNvbnN0OwoKICAgIHZpcnR1YWwgSU5vdGlmaWVyQWRkcmVzcyBub3RpZmllckFkZHJlc3MoKSBj b25zdDsKCiAgICAgCiAgICB2aXJ0dWFsIElTdGFuZGFyZE5vdGlmaWVyJiBub3RpZnlPYnNlcnZl cnMoY29uc3QgSU5vdGlmaWNhdGlvbkV2ZW50JiBhbkV2ZW50KTsKICAgIHZpcnR1YWwgSVN0YW5k YXJkTm90aWZpZXImIG5vdGlmeU9ic2VydmVyc0FzeW5jKGNvbnN0IElOb3RpZmljYXRpb25FdmVu dCYgYW5FdmVudCk7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2aXJ0dWFsIElTdGFuZGFyZE5vdGlm aWVyJiBhZGRPYnNlcnZlcihJT2JzZXJ2ZXImIG9ic2VydmVyLCBjb25zdCBJSW50ZXJlc3QmIGlu dGVyZXN0KTsKICAgIHZpcnR1YWwgSVN0YW5kYXJkTm90aWZpZXImIHJlbW92ZU9ic2VydmVyKElP YnNlcnZlciYgb2JzZXJ2ZXIpOwogICAgdmlydHVhbCBJU3RhbmRhcmROb3RpZmllciYgcmVtb3Zl T2JzZXJ2ZXIoSU9ic2VydmVyJiBvYnNlcnZlciwgY29uc3QgSUludGVyZXN0JiBpbnRlcmVzdCk7 CiAgICB2aXJ0dWFsIElTdGFuZGFyZE5vdGlmaWVyJiByZW1vdmVBbGxPYnNlcnZlcnMoKTsKCiAg ICB2aXJ0dWFsIElPYnNlcnZlckxpc3QmICBvYnNlcnZlckxpc3QoY29uc3QgSUludGVyZXN0KiBh bkludGVyZXN0ID0gMCkgY29uc3Q7CgogICAgIAogICAgdmlydHVhbCBJU3RhbmRhcmROb3RpZmll ciYgbm90aWZ5T2JzZXJ2ZXJzKGNvbnN0IElOb3RpZmljYXRpb25JZCYgbklkKTsKCnByaXZhdGU6 CiAgICAgCiAgICBJTm90aWZpZXJJbXBsZW1lbnRhdGlvbiogICAgbm90aWZpZXJJbXAoYm9vbCBj cmVhdGUgPSB0cnVlKTsKICAgIElOb3RpZmllckltcGxlbWVudGF0aW9uKiAgICBub3RpZmllcklt cChib29sIGNyZWF0ZSA9IHRydWUpIGNvbnN0OwoKICAgIGJvb2wgICAgZW5hYmxlZDsKCiAgICBJ Tm90aWZpZXJJbXBsZW1lbnRhdGlvbiogICAgZk5vdGlmaWVySW1wOwoKICAgICAKCnB1YmxpYzoK ICAgIHZpcnR1YWwgSVN0YW5kYXJkTm90aWZpZXImICBhZGRPYnNlcnZlcihJT2JzZXJ2ZXImIG9i c2VydmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IElFdmVudERhdGEmIHVzZXJEYXRhID0gSUV2ZW50RGF0YSgwKSk7Cgp9OwoKIAoKIAoKCgoKCgoK I3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiAK CiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJl c3RvcmUpCiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaWl2Y2xsY3QuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdt YSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1ND SEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKCiAgCgogCgogCmNsYXNzIElD dXJzb3I7CgpjbGFzcyBJQ3Vyc29ySW1wbDsKCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 PgpjbGFzcyBJVkNvbGxlY3Rpb25FdmVudERhdGEKewpwdWJsaWM6CgogICAgICAgICAgIElWQ29s bGVjdGlvbkV2ZW50RGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElDdXJzb3IgY29u c3QmLCBFbGVtZW50IGNvbnN0KiA9IDApOwoKICBJQ3Vyc29yIGNvbnN0JgogICAgICAgICAgIGN1 cnNvciAgICAgICAgICAgKCkgY29uc3Q7CgogIEVsZW1lbnQgY29uc3QqY29uc3QKICAgICAgICAg ICBlbGVtZW50ICAgICAgICAgICgpIGNvbnN0OwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgSUN1 cnNvciBjb25zdCoKICAgICAgICAgICBpdkN1cnNvcjsKCiAgRWxlbWVudCBjb25zdCoKICAgICAg ICAgICBpdkVsZW1lbnQ7Cgp9OwoKCgoKCgoKCgpjbGFzcyAgIElWQ29sbGVjdGlvbkltcGwgOiBw dWJsaWMgSVN0YW5kYXJkTm90aWZpZXIKewogIHR5cGVkZWYgIElTdGFuZGFyZE5vdGlmaWVyIElu aGVyaXRlZDsKCnB1YmxpYzoKCiAgc3RhdGljCiAgSU5vdGlmaWNhdGlvbklkIGNvbnN0CiAgICBh ZGRJZCwKICAgIG1vZGlmeUlkLAogICAgcmVtb3ZlSWQsCiAgICByZXBsYWNlSWQ7CgogICAKICBz dGF0aWMKICBJTm90aWZpY2F0aW9uSWQgY29uc3QKICAgIGFkZGVkSWQsCiAgICBtb2RpZmllZElk LAogICAgcmVtb3ZlZElkLAogICAgcmVwbGFjZWRJZDsKCiAgICAgICAgICB+SVZDb2xsZWN0aW9u SW1wbCAoKTsKCiAgSU5vdGlmaWVyJgogICAgICAgICAgIERpc2FibGVOb3RpZmljYXRpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICBJTm90aWZpZXImCiAgICAgICAgICAgRW5h YmxlTm90aWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm9vbCA9IHRydWUp OwoKICBib29sIElzRW5hYmxlZEZvck5vdGlmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElWQ29sbGVjdGlvbkltcGwg KCk7CgogIHZvaWQgICAgIE5vdGlmeU9mQWRkQXQgICAgKElDdXJzb3JJbXBsIGNvbnN0Jik7Cgog IHZvaWQgICAgIE5vdGlmeU9mTW9kaWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKTsKCiAgdm9pZCAgICAgTm90aWZ5T2ZSZW1vdmVBdCAoSUN1cnNvckltcGwgY29uc3QmKTsK CiAgdm9pZCAgICAgTm90aWZ5T2ZSZXBsYWNlQXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChJQ3Vyc29ySW1wbCBjb25zdCYsIHZvaWQgY29uc3QqID0gMCk7Cgpwcml2YXRlOgoKIyAxNzgg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2Y2xs Y3QuaCIKCgp9OwoKdHlwZWRlZiBJVkNvbGxlY3Rpb25JbXBsIElWQ29sbGVjdGlvbjsKCiAKCiAK CgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkK CgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lpdmNsbGN0LmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoK CgoKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSVZDb2xsZWN0aW9u RXZlbnREYXRhIDxFbGVtZW50Pjo6CklWQ29sbGVjdGlvbkV2ZW50RGF0YSAoSUN1cnNvciBjb25z dCYgY3Vyc29yLAogICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgY29uc3QqIGVsZW1lbnQp CjogaXZDdXJzb3IgKCZjdXJzb3IpLCBpdkVsZW1lbnQgKGVsZW1lbnQpCnsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSBJQ3Vyc29yIGNvbnN0JgpJVkNvbGxlY3Rpb25FdmVudERh dGEgPEVsZW1lbnQ+OjoKY3Vyc29yICgpIGNvbnN0CnsgcmV0dXJuICppdkN1cnNvcjsKfQoKdGVt cGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50IGNvbnN0KmNvbnN0CklWQ29sbGVj dGlvbkV2ZW50RGF0YSA8RWxlbWVudD46OgplbGVtZW50ICgpIGNvbnN0CnsgcmV0dXJuIGl2RWxl bWVudDsKfQoKIAogCiAKCiAKCmlubGluZSBJTm90aWZpZXImCklWQ29sbGVjdGlvbkltcGw6OgpE aXNhYmxlTm90aWZpY2F0aW9uICgpCnsgcmV0dXJuIGRpc2FibGVOb3RpZmljYXRpb24gKCk7Cn0K CmlubGluZSBJTm90aWZpZXImCklWQ29sbGVjdGlvbkltcGw6OgpFbmFibGVOb3RpZmljYXRpb24g KGJvb2wgZW5hYmxlKQp7IHJldHVybiBlbmFibGVOb3RpZmljYXRpb24gKGVuYWJsZSk7Cn0KCmlu bGluZSBib29sCklWQ29sbGVjdGlvbkltcGw6OgpJc0VuYWJsZWRGb3JOb3RpZmljYXRpb24gKCkg Y29uc3QKeyByZXR1cm4gaXNFbmFibGVkRm9yTm90aWZpY2F0aW9uICgpOwp9CgoKCgoKIAoKIyAy MDkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2 Y2xsY3QuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQoj cHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzNCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWFjbGxjdC5oIiAyCgoKIAoKIAojcHJhZ21hIGlu Zm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwp CiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0Nf TkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCgoKCgoKCgoK IAoKIAogCgogCiAKCiAKCmNsYXNzIElBQ29sbGVjdGlvbkltcGw7CgoKCgoKCgojcHJhZ21hIGVu dW0oNCkKCgpjbGFzcyAgIElDb2xsZWN0aW9uUmVzb3VyY2VJbXBsCnsKcHVibGljOgogICAgICAg ICAgIElDb2xsZWN0aW9uUmVzb3VyY2VJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KTsKCiAgICAgICAgICAgfklDb2xsZWN0aW9uUmVzb3VyY2VJbXBsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKTsKCiAgdm9pZCAgICAgbG9jayAgICAgICAgICAgICAobG9uZyk7CgogIHZv aWQgICAgIHVubG9jayAgICAgICAgICAgKCk7Cgpwcm90ZWN0ZWQ6CiAgSVJlc291cmNlKiBpdlJl c291cmNlOwoKcHJpdmF0ZToKCiMgMTE2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpYWNsbGN0LmgiCgp9OwoKCmNsYXNzICAgSUN1cnNvckltcGwg ewpwdWJsaWM6CgogICAgICAgICAgIElDdXJzb3JJbXBsICAgICAgKElBQ29sbGVjdGlvbkltcGwg Y29uc3QmKTsKCiAgdmlydHVhbCB+SUN1cnNvckltcGwgICAgICAoKTsKCiAgdmlydHVhbAogIElD dXJzb3JJbXBsKgogICAgICAgICAgIENsb25lICAgICAgICAgICAgKCkgY29uc3QgPSAwOwoKICB2 aXJ0dWFsCiAgdm9pZCAgICAgQ29weSAgICAgICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSA9 IDA7CgogIHZvaWQgY29uc3QqCiAgICAgICAgICAgRWxlbWVudCAgICAgICAgICAoKSBjb25zdDsK CiAgdmlydHVhbAogIHZvaWQgICAgIEludmFsaWRhdGUgICAgICAgKCkgPSAwOwoKICBib29sIElz Rm9yICAgICAgICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKSBjb25zdDsKCiAgdmlydHVh bAogIGJvb2wgSXNJbkJldHdlZW4gICAgICAoKSBjb25zdCA9IDA7CgogIHZpcnR1YWwKICBib29s IElzTW5nQ3Vyc29yICAgICAgKCkgY29uc3Q7CgogIHZpcnR1YWwKICBib29sIElzVmFsaWQgICAg ICAgICAgKCkgY29uc3QgPSAwOwoKICBJUG9zaXRpb24KICAgICAgICAgICBQb3NpdGlvbiAgICAg ICAgICgpIGNvbnN0OwoKICBib29sIFNldFRvRmlyc3QgICAgICAgKCk7CgogIGJvb2wgU2V0VG9M YXN0ICAgICAgICAoKTsKCiAgYm9vbCBTZXRUb05leHQgICAgICAgICgpOwoKICB2b2lkICAgICBT ZXRUb1Bvc2l0aW9uICAgIChJUG9zaXRpb24pOwoKICBib29sIFNldFRvUHJldmlvdXMgICAgKCk7 CgogIHZpcnR1YWwKICBib29sIG9wZXJhdG9yPT0gICAgICAgKElDdXJzb3JJbXBsIGNvbnN0Jikg Y29uc3Q7CgogIGJvb2wgb3BlcmF0b3IhPSAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25z dDsKCnByb3RlY3RlZDoKCiAgSUFDb2xsZWN0aW9uSW1wbCBjb25zdCoKICAgICAgICAgICBpdkNv bGxlY3Rpb247CgogIHN0YXRpYwogIHZvaWQqICAgIENoZWNrUG9pbnRlciAgICAgKHZvaWQqKTsK CnByaXZhdGU6CgojIDIwMyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9paWFjbGxjdC5oIgoKCn07CgoKCgoKCmNsYXNzIElBQ29sbGVjdGlvbk9wczsK CgpjbGFzcyAgIElBQ29sbGVjdGlvbkltcGwgOiBwdWJsaWMgSVZDb2xsZWN0aW9uSW1wbAp7CgoK CgpwdWJsaWM6CgogIHR5cGVkZWYgIElBQ29sbGVjdGlvbk9wcyBPcHM7CgogICAgICAgICAgfklB Q29sbGVjdGlvbkltcGwgKCk7CgogIGJvb2wgQWRkICAgICAgICAgICAgICAodm9pZCBjb25zdCop OwoKICB2aXJ0dWFsCiAgYm9vbCBBZGQgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNv ckltcGwmKSA9IDA7CgogIHZvaWQgICAgIEFkZEFzRmlyc3QgICAgICAgKHZvaWQgY29uc3QqKTsK CiAgdmlydHVhbAogIHZvaWQgICAgIEFkZEFzRmlyc3QgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vy c29ySW1wbCYpOyAgCgogIHZvaWQgICAgIEFkZEFzTGFzdCAgICAgICAgKHZvaWQgY29uc3QqKTsK CiAgdmlydHVhbAogIHZvaWQgICAgIEFkZEFzTGFzdCAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vy c29ySW1wbCYpOyAgCgogIHZpcnR1YWwKICB2b2lkICAgICBBZGRBc05leHQgICAgICAgICh2b2lk IGNvbnN0KiwgSUN1cnNvckltcGwmKTsgIAoKICB2aXJ0dWFsCiAgdm9pZCAgICAgQWRkQXNQcmV2 aW91cyAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7ICAKCiAgdm9pZCAgICAgQWRkQXRQ b3NpdGlvbiAgICAoSVBvc2l0aW9uLCB2b2lkIGNvbnN0Kik7CgogIHZpcnR1YWwKICB2b2lkICAg ICBBZGRBdFBvc2l0aW9uICAgIChJUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7ICAKCiAgYm9vbCBBZGRPclJlcGxhY2VFbGVt ZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqKTsKCiAg dmlydHVhbAogIGJvb2wgQWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsgIAoKICB2aXJ0dWFsCiAg dm9pZCAgICAgQWRkQWxsRnJvbSAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBjb25zdCYpOwoKICB2 aXJ0dWFsCiAgYm9vbCBBbGxFbGVtZW50c0RvICAgIChJQXBwbEZ1bmMsIHZvaWQqKTsKCiAgdmly dHVhbAogIHZvaWQqICAgIEFueSAgICAgICAgICAgICAgKCkgY29uc3QgPSAwOwoKICBzdGF0aWMK ICB2b2lkKiAgICBDaGVja1BvaW50ZXIgICAgICh2b2lkKik7CgogIHZpcnR1YWwKICBjaGFyIGNv bnN0KgogICAgICAgICAgIENsYXNzTmFtZSAgICAgICAgKCkgY29uc3QgPSAwOwoKICB2aXJ0dWFs CiAgSUFDb2xsZWN0aW9uSW1wbCoKICAgICAgICAgICBDbG9uZSAgICAgICAgICAgICgpIGNvbnN0 ID0gMDsKCiAgdmlydHVhbAogIGJvb2wgQ29udGFpbnMgICAgICAgICAodm9pZCBjb25zdCopIGNv bnN0OyAgCgogIHZpcnR1YWwKICBib29sIENvbnRhaW5zQWxsRnJvbSAgKElBQ29sbGVjdGlvbklt cGwgY29uc3QmKSBjb25zdDsgIAoKICB2aXJ0dWFsCiAgYm9vbCBDb250YWluc0FsbEtleXNGcm9t CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBjb25zdCYpIGNv bnN0OyAgCgogIHZpcnR1YWwKICBib29sIENvbnRhaW5zRWxlbWVudFdpdGhLZXkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0KikgY29uc3Q7ICAKCiAgdmlydHVhbAogIHZv aWQgICAgIENvcHkgICAgICAgICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKTsKCiAgdmly dHVhbAogIElDdXJzb3JJbXBsKgogICAgICAgICAgIENyZWF0ZUN1cnNvciAgICAgKCkgY29uc3Qg PSAwOwoKICB2aXJ0dWFsCiAgSUN1cnNvckltcGwqCiAgICAgICAgICAgQ3JlYXRlTW5nQ3Vyc29y ICAoKSBjb25zdCA9IDA7CgogIHZvaWQgICAgIERlbGV0ZSAgICAgICAgICAgKCk7CgogIHZpcnR1 YWwKICB2b2lkKiAgICBFbGVtZW50QXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNvbnN0 ID0gMDsKCiAgdmlydHVhbAogIHZvaWQqICAgIEVsZW1lbnRBdFBvc2l0aW9uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoSVBvc2l0aW9uKSBjb25zdDsgIAoKICB2aXJ0dWFsCiAgdm9pZCog ICAgRWxlbWVudFdpdGhLZXkgICAodm9pZCBjb25zdCopIGNvbnN0OyAgCgogIHZpcnR1YWwKICB2 b2lkKiAgICBGaXJzdCAgICAgICAgICAgICgpIGNvbnN0OwoKICB2b2lkICAgICBJbml0aWFsaXpl ICAgICAgICgpOwoKICB2aXJ0dWFsCiAgYm9vbCBJc0JvdW5kZWQgICAgICAgICgpIGNvbnN0ID0g MDsKCiAgdmlydHVhbAogIGJvb2wgSXNDb25zaXN0ZW50ICAgICAoKSBjb25zdCA9IDA7CgogIHZp cnR1YWwKICBib29sIElzRW1wdHkgICAgICAgICAgKCkgY29uc3Q7CgogIHZpcnR1YWwKICBib29s IElzRmlyc3RBdCAgICAgICAgKElDdXJzb3JJbXBsIGNvbnN0JikgY29uc3Q7CgogIHZpcnR1YWwK ICBib29sIElzRnVsbCAgICAgICAgICAgKCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsCiAgYm9vbCBJ c0xhc3RBdCAgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNvbnN0OwoKICB2aXJ0dWFsCiAg dm9pZCogICAgS2V5ICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OyAgCgogIHZpcnR1 YWwKICB2b2lkKiAgICBMYXN0ICAgICAgICAgICAgICgpIGNvbnN0OwoKICB2aXJ0dWFsCiAgYm9v bCBMb2NhdGUgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKSBjb25zdDsgIAoK ICB2aXJ0dWFsCiAgYm9vbCBMb2NhdGVFbGVtZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpIGNvbnN0OyAgCgogIHZpcnR1YWwK ICBib29sIExvY2F0ZU5leHQgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpIGNvbnN0 OyAgCgogIHZpcnR1YWwKICBib29sIExvY2F0ZU5leHRFbGVtZW50V2l0aEtleQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpIGNvbnN0OyAgCgog IGJvb2wgTG9jYXRlT3JBZGQgICAgICAodm9pZCBjb25zdCopOwoKICB2aXJ0dWFsCiAgYm9vbCBM b2NhdGVPckFkZCAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsgIAoKICBib29sIExv Y2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk IGNvbnN0Kik7CgogIHZpcnR1YWwKICBib29sIExvY2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsgIAoK ICB2aXJ0dWFsCiAgdm9pZCAgICAgTG9ja0JlZm9yZVJlYWRpbmcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nID0gLTEpOwoKICB2aXJ0dWFsCiAgdm9pZCAgICAgTG9ja0JlZm9yZVdy aXRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nID0gLTEpOwoKICB2aXJ0dWFs CiAgSU51bWJlciAgTWF4TnVtYmVyT2ZFbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCkgY29uc3Q7CgogIHZpcnR1YWwKICBJTnVtYmVyICBOdW1iZXJPZkRpZmZlcmVudEtleXMK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIGNvbnN0OyAgCgogIHZpcnR1YWwKICBJTnVt YmVyICBOdW1iZXJPZkVsZW1lbnRzICgpIGNvbnN0ID0gMDsKCiAgdmlydHVhbAogIElOdW1iZXIg IE51bWJlck9mRWxlbWVudHNXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9p ZCBjb25zdCopIGNvbnN0OyAgCgogIHZpcnR1YWwKICBJTnVtYmVyICBOdW1iZXJPZk9jY3VycmVu Y2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OyAgCgog IHZpcnR1YWwKICBJUG9zaXRpb24KICAgICAgICAgICBQb3NpdGlvbkF0ICAgICAgIChJQ3Vyc29y SW1wbCBjb25zdCYpIGNvbnN0OyAgCgogIHZpcnR1YWwKICB2b2lkICAgICBSZWxlYXNlICAgICAg ICAgICgpIGNvbnN0OwoKICB2aXJ0dWFsCiAgYm9vbCBSZW1vdmUgICAgICAgICAgICh2b2lkIGNv bnN0Kik7ICAKCiAgdmlydHVhbAogIElOdW1iZXIgIFJlbW92ZUFsbCAgICAgICAgKCkgPSAwOwoK ICB2aXJ0dWFsCiAgSU51bWJlciAgUmVtb3ZlQWxsICAgICAgICAoSVByZWRGdW5jLCB2b2lkKikg PSAwOwoKICB2aXJ0dWFsCiAgSU51bWJlciAgUmVtb3ZlQWxsRWxlbWVudHNXaXRoS2V5CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCopOyAgCgogIHZpcnR1YWwKICBJTnVt YmVyICBSZW1vdmVBbGxPY2N1cnJlbmNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv aWQgY29uc3QqKTsgIAoKICB2aXJ0dWFsCiAgdm9pZCAgICAgUmVtb3ZlQXQgICAgICAgICAoSUN1 cnNvckltcGwmKSA9IDA7CgoKICB2aXJ0dWFsCiAgdm9pZCAgICAgUmVtb3ZlQXRQb3NpdGlvbiAo SVBvc2l0aW9uKTsgIAoKICB2aXJ0dWFsCiAgYm9vbCBSZW1vdmVFbGVtZW50V2l0aEtleQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqKTsgIAoKICB2aXJ0dWFsCiAgdm9p ZCAgICAgUmVtb3ZlRmlyc3QgICAgICAoKTsKCiAgdmlydHVhbAogIHZvaWQgICAgIFJlbW92ZUxh c3QgICAgICAgKCk7CgogIHZpcnR1YWwKICB2b2lkICAgICBSZXBsYWNlQXQgICAgICAgIChJQ3Vy c29ySW1wbCBjb25zdCYsIHZvaWQgY29uc3QqKSA9IDA7CgogIHZpcnR1YWwKICB2b2lkICAgICBS ZXBsYWNlQXRQb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQb3NpdGlvbiwg dm9pZCBjb25zdCopOwoKICBib29sIFJlcGxhY2VFbGVtZW50V2l0aEtleQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqKTsKCiAgdmlydHVhbAogIGJvb2wgUmVwbGFjZUVs ZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElD dXJzb3JJbXBsJik7ICAKCiAgdmlydHVhbAogIHZvaWQgICAgIFJldmVyc2UgICAgICAgICAgKCk7 ICAKCiAgdmlydHVhbAogIHZvaWQgICAgIFNlaXplICAgICAgICAgICAgKGxvbmcgdGltZW91dCA9 IC0xKTsKCiAgdmlydHVhbAogIGJvb2wgU2V0VG9GaXJzdCAgICAgICAoSUN1cnNvckltcGwmKSBj b25zdCA9IDA7CgogIHZpcnR1YWwKICBib29sIFNldFRvTGFzdCAgICAgICAgKElDdXJzb3JJbXBs JikgY29uc3Q7ICAKCiAgdmlydHVhbAogIGJvb2wgU2V0VG9OZXh0ICAgICAgICAoSUN1cnNvcklt cGwmKSBjb25zdCA9IDA7CgogIHZpcnR1YWwKICBib29sIFNldFRvTmV4dFdpdGhEaWZmZXJlbnRL ZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OyAgCgog IHZpcnR1YWwKICB2b2lkICAgICBTZXRUb1Bvc2l0aW9uICAgIChJUG9zaXRpb24sIElDdXJzb3JJ bXBsJikgY29uc3Q7ICAKCiAgdmlydHVhbAogIGJvb2wgU2V0VG9QcmV2aW91cyAgICAoSUN1cnNv ckltcGwmKSBjb25zdDsgIAoKICB2aXJ0dWFsCiAgdm9pZCAgICAgU29ydCAgICAgICAgICAgICAo SUNvbXBGdW5jLCB2b2lkKik7ICAKCiAgdmlydHVhbAogIHZvaWQgICAgIFVubG9ja0FmdGVyUmVh ZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwKICB2b2lkICAg ICBVbmxvY2tBZnRlcldyaXRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKCnBy b3RlY3RlZDoKCgoKCgogIHN0cnVjdCBQcmVkaWNhdGUgewoKICAgIHN0YXRpYwogICAgYm9vbCBJ c0NvbnRhaW5lZCAgICAgICh2b2lkIGNvbnN0Kiwgdm9pZCopOwoKICAgIHN0YXRpYwogICAgYm9v bCBJc05vdENvbnRhaW5lZCAgICh2b2lkIGNvbnN0Kiwgdm9pZCopOwoKICB9OwoKCgoKCiAgICAg ICAgICAgSUFDb2xsZWN0aW9uSW1wbCAoT3BzJik7CgogICAgICAgICAgIElBQ29sbGVjdGlvbklt cGwgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKTsKCiAgc3RhdGljCiAgaW5saW5lCiAgSUN1cnNv ckltcGwmCiAgICAgICAgICAgQ3Vyc29yT2YgICAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBjb25z dCYpOwoKICBzdGF0aWMKICBPcHMmICAgICBPcHNPZiAgICAgICAgICAgIChJQUNvbGxlY3Rpb25J bXBsIGNvbnN0Jik7CnByaXZhdGU6CgogIE9wcyogICAgIGl2T3BzOwoKICBJTnVtYmVyICBpdlJl ZmVyZW5jZUNvdW50OwoKICBJQ3Vyc29ySW1wbCoKICAgICAgICAgICBpdkR1bW15Q3Vyc29yOwoK CiAgSUNvbGxlY3Rpb25SZXNvdXJjZUltcGwqCiAgICAgICAgICAgaXZSZXNvdXJjZTsKCgoKcHJv dGVjdGVkOgogIElTdHJlYW1lclB0cgogICAgICAgICAgIGl2U3RyZWFtZXI7CgpwdWJsaWM6CiAg dmlydHVhbAogIElTdHJlYW1lclB0ciYKICAgICAgICAgICBTdHJlYW1lck9mICAgICAgIChJQUNv bGxlY3Rpb25JbXBsIGNvbnN0JikgPSAwOwoKICB2aXJ0dWFsCiAgdm9pZCAgICAgU3RyZWFtSW4g ICAgICAgICAoSURhdGFTdHJlYW0mKSA9IDA7CgogIHZpcnR1YWwKICB2b2lkICAgICBTdHJlYW1P dXQgICAgICAgIChJRGF0YVN0cmVhbSYpIGNvbnN0ID0gMDsKCiAgdmlydHVhbAogIHZvaWQgICAg IEFkb3B0U3RyZWFtZXIgICAgKElBQ29sbGVjdGlvblN0cmVhbWVyKikgPSAwOwoKICB2aXJ0dWFs CiAgdm9pZCAgICAgV3JpdGVWZXJzaW9uICAgICAoSURhdGFTdHJlYW0mKSBjb25zdDsKCiAgdmly dHVhbAogIHZvaWQgICAgIFJlYWRWZXJzaW9uICAgICAgKElEYXRhU3RyZWFtJik7CgoKIyA2ODgg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlhY2xs Y3QuaCIKCgp9OwoKY2xhc3MgICBJQUNvbGxlY3Rpb25PcHMKewpwdWJsaWM6CgogIHZpcnR1YWwg fklBQ29sbGVjdGlvbk9wcyAgKCk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKCgoKCgoKfTsKCiAK CiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBv cCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2lpYWNsbGN0LmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAog CgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lpZXhjLmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoKIyAxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIgMQoK CgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCgojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIiAxCiMgMTAgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2Uu aHBwIgoKCiMgNzI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lleGNiYXNlLmhwcCIKCgoKCgoKIyAyNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiIDIKCgogCgogCiNwcmFnbWEgaW5mbyhu b25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3By YWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1F TUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKIAogCgogCiAKCiAKCgpjbGFzcyAgIElDb2xsZWN0aW9uUmVzb3VyY2VFeGNlcHRpb24g OiBwdWJsaWMgSUV4Y2VwdGlvbgp7CnB1YmxpYzoKCiAgICAgICAgICAgSUNvbGxlY3Rpb25SZXNv dXJjZUV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCB1 bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXZlcml0eSA9 IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJQ29sbGVjdGlvblJlc291 cmNlRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUNvbGxlY3Rpb25SZXNv dXJjZUV4Y2VwdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsICB+SUNvbGxlY3Rpb25SZXNvdXJjZUV4 Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwgIGNoYXIg Y29uc3QqIG5hbWUgKCkgY29uc3Q7CgogIHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25z dCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgICAgICAgdm9pZCAg ICAgb3BlcmF0b3I9ICAgICAgICAoSUNvbGxlY3Rpb25SZXNvdXJjZUV4Y2VwdGlvbiBjb25zdCYp OwoKIyAxMTUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWV4Yy5oIgoKfTsKCmNsYXNzICAgSUNvbGxlY3Rpb25Mb2NrRXhjZXB0aW9uIDogcHVibGlj IElFeGNlcHRpb24KewpwdWJsaWM6CgogICAgICAgICAgIElDb2xsZWN0aW9uTG9ja0V4Y2VwdGlv bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25n ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246 OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJQ29sbGVjdGlvbkxvY2tFeGNlcHRpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChJQ29sbGVjdGlvbkxvY2tFeGNlcHRpb24gY29uc3Qm KTsKCiAgdmlydHVhbCAgfklDb2xsZWN0aW9uTG9ja0V4Y2VwdGlvbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwgIGNoYXIgY29uc3QqIG5hbWUgKCkgY29uc3Q7Cgog IHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAgICAgICAgKHVuc2lnbmVkIGxvbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJv dGVjdGVkOgoKcHJpdmF0ZToKCiAgICAgICAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUNv bGxlY3Rpb25Mb2NrRXhjZXB0aW9uIGNvbnN0Jik7CgojIDE1MyAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiCgp9OwoKY2xhc3MgICBJQ29s bGVjdGlvbkxvY2tUaW1lT3V0RXhjZXB0aW9uIDogcHVibGljIElFeGNlcHRpb24KewpwdWJsaWM6 CgogICAgICAgICAgIElDb2xsZWN0aW9uTG9ja1RpbWVPdXRFeGNlcHRpb24KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyA9IDAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkgPSBJRXhjZXB0aW9uOjp1bnJlY292ZXJhYmxl KTsKCiAgICAgICAgICAgSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2VwdGlvbgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKElDb2xsZWN0aW9uTG9ja1RpbWVPdXRFeGNlcHRpb24gY29uc3Qm KTsKCiAgdmlydHVhbCAgfklDb2xsZWN0aW9uTG9ja1RpbWVPdXRFeGNlcHRpb24KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgpOwoKICB2aXJ0dWFsICBjaGFyIGNvbnN0KiBuYW1lICgpIGNv bnN0OwoKICBzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0ICAgICAgICAgICh1bnNpZ25lZCBsb25n LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25n KTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogICAgICAgIHZvaWQgICAgIG9wZXJhdG9yPSAgICAg ICAgKElDb2xsZWN0aW9uTG9ja1RpbWVPdXRFeGNlcHRpb24gY29uc3QmKTsKCiMgMTkxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCn07 CgpjbGFzcyAgIElDb2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uIDogcHVibGljIElFeGNlcHRpb24K ewpwdWJsaWM6CgogICAgICAgICAgIElDb2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcgPSAwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNldmVyaXR5ID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVy YWJsZSk7CgogICAgICAgICAgIElDb2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoSUNvbGxlY3Rpb25VbmxvY2tFeGNlcHRpb24gY29uc3QmKTsKCiAg dmlydHVhbCAgfklDb2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKTsKCiAgdmlydHVhbCAgY2hhciBjb25zdCogbmFtZSAoKSBjb25zdDsKCiAgc3Rh dGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0 ZWQ6Cgpwcml2YXRlOgoKICAgICAgICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJQ29sbGVj dGlvblVubG9ja0V4Y2VwdGlvbiBjb25zdCYpOwoKIyAyMjkgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKfTsKCgpjbGFzcyAgIElQcmVj b25kaXRpb25WaW9sYXRpb24gOiBwdWJsaWMgSUV4Y2VwdGlvbgp7CnB1YmxpYzoKCiAgICAgICAg ICAgSVByZWNvbmRpdGlvblZpb2xhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJUHJl Y29uZGl0aW9uVmlvbGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVByZWNvbmRp dGlvblZpb2xhdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsIH5JUHJlY29uZGl0aW9uVmlvbGF0aW9u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgdmlydHVhbAogIGNoYXIgY29uc3Qq CiAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25zdDsKCiAgc3RhdGljCiAgdm9pZCAg ICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRl OgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJUHJlY29uZGl0aW9uVmlvbGF0aW9uIGNv bnN0Jik7CgojIDI3MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pZXhjLmgiCgoKfTsKCmNsYXNzICAgSUZ1bGxFeGNlcHRpb24gOiBwdWJsaWMgSVBy ZWNvbmRpdGlvblZpb2xhdGlvbgp7CnB1YmxpYzoKCiAgICAgICAgICAgSUZ1bGxFeGNlcHRpb24g ICAoY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNldmVyaXR5ID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSk7CgogICAgICAgICAg IElGdWxsRXhjZXB0aW9uICAgKElGdWxsRXhjZXB0aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklG dWxsRXhjZXB0aW9uICAgKCk7CgogIHZpcnR1YWwKICBjaGFyIGNvbnN0KgogICAgICAgICAgIG5h bWUgICAgICAgICAgICAgKCkgY29uc3Q7CgogIHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAg b3BlcmF0b3I9ICAgICAgICAoSUZ1bGxFeGNlcHRpb24gY29uc3QmKTsKCiMgMzA3ICIvaG9tZS9h a25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgp9OwoK Y2xhc3MgICBJRW1wdHlFeGNlcHRpb24gOiBwdWJsaWMgSVByZWNvbmRpdGlvblZpb2xhdGlvbiB7 CnB1YmxpYzoKCiAgICAgICAgICAgSUVtcHR5RXhjZXB0aW9uICAoY2hhciBjb25zdCosIHVuc2ln bmVkIGxvbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldmVyaXR5ID0gSUV4 Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSk7CgogICAgICAgICAgIElFbXB0eUV4Y2VwdGlvbiAgKElF bXB0eUV4Y2VwdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsIH5JRW1wdHlFeGNlcHRpb24gICgpOwoK ICB2aXJ0dWFsCiAgY2hhciBjb25zdCoKICAgICAgICAgICBuYW1lICAgICAgICAgICAgICgpIGNv bnN0OwoKICBzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0ICAgICAgICAgICh1bnNpZ25lZCBsb25n LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25n KTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElF bXB0eUV4Y2VwdGlvbiBjb25zdCYpOwoKIyAzNDQgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKCn07CgpjbGFzcyAgIElOb3RFbXB0eUV4 Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0aW9uCnsKcHVibGljOgoKICAgICAg ICAgICBJTm90RW1wdHlFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgdW5zaWduZWQgbG9uZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2V2ZXJpdHkgPSBJRXhjZXB0aW9uOjp1bnJlY292ZXJhYmxlKTsKCiAgICAgICAgICAgSU5vdEVt cHR5RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5vdEVtcHR5RXhjZXB0 aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklOb3RFbXB0eUV4Y2VwdGlvbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwKICBjaGFyIGNvbnN0KgogICAgICAgICAgIG5h bWUgICAgICAgICAgICAgKCkgY29uc3Q7CgogIHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAg b3BlcmF0b3I9ICAgICAgICAoSU5vdEVtcHR5RXhjZXB0aW9uIGNvbnN0Jik7CgojIDM4NSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiCgoK fTsKCmNsYXNzICAgSU5vdEJvdW5kZWRFeGNlcHRpb24gOiBwdWJsaWMgSVByZWNvbmRpdGlvblZp b2xhdGlvbgp7CnB1YmxpYzoKCiAgICAgICAgICAgSU5vdEJvdW5kZWRFeGNlcHRpb24KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyA9IDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkgPSBJRXhjZXB0aW9uOjp1bnJlY292 ZXJhYmxlKTsKCiAgICAgICAgICAgSU5vdEJvdW5kZWRFeGNlcHRpb24KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChJTm90Qm91bmRlZEV4Y2VwdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsIH5J Tm90Qm91bmRlZEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZp cnR1YWwKICBjaGFyIGNvbnN0KgogICAgICAgICAgIG5hbWUgICAgICAgICAgICAgKCkgY29uc3Q7 CgogIHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAgICAgICAgKHVuc2lnbmVkIGxvbmcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoK cHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSU5vdEJv dW5kZWRFeGNlcHRpb24gY29uc3QmKTsKCiMgNDI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgp9OwoKY2xhc3MgICBJQ3Vyc29ySW52 YWxpZEV4Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0aW9uCnsKcHVibGljOgoK ICAgICAgICAgICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAg ICAgICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg KElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklDdXJzb3JJbnZh bGlkRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgdmlydHVhbAog IGNoYXIgY29uc3QqCiAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25zdDsKCiAgc3Rh dGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0 ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJQ3Vyc29ySW52YWxp ZEV4Y2VwdGlvbiBjb25zdCYpOwoKIyA0NjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKCn07CgpjbGFzcyAgIElQb3NpdGlvbkludmFs aWRFeGNlcHRpb24gOiBwdWJsaWMgSVByZWNvbmRpdGlvblZpb2xhdGlvbgp7CnB1YmxpYzoKCiAg ICAgICAgICAgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAg ICAgICBJUG9zaXRpb25JbnZhbGlkRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsIH5JUG9zaXRp b25JbnZhbGlkRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgdmly dHVhbAogIGNoYXIgY29uc3QqCiAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25zdDsK CiAgc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpw cm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJUG9zaXRp b25JbnZhbGlkRXhjZXB0aW9uIGNvbnN0Jik7CgojIDUwOCAiL2hvbWUvYWtub2xsL2lvY3NyYy9s aW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiCgoKfTsKCmNsYXNzICAgSU5vdENv bnRhaW5zS2V5RXhjZXB0aW9uIDogcHVibGljIElQcmVjb25kaXRpb25WaW9sYXRpb24KewpwdWJs aWM6CgogICAgICAgICAgIElOb3RDb250YWluc0tleUV4Y2VwdGlvbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoK ICAgICAgICAgICBJTm90Q29udGFpbnNLZXlFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChJTm90Q29udGFpbnNLZXlFeGNlcHRpb24gY29uc3QmKTsKCiAgdmlydHVhbCB+SU5v dENvbnRhaW5zS2V5RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAg dmlydHVhbAogIGNoYXIgY29uc3QqCiAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25z dDsKCiAgc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7 Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJTm90 Q29udGFpbnNLZXlFeGNlcHRpb24gY29uc3QmKTsKCiMgNTQ5ICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgp9OwoKY2xhc3MgICBJS2V5 QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0aW9uCnsK cHVibGljOgoKICAgICAgICAgICBJS2V5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFi bGUpOwoKICAgICAgICAgICBJS2V5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKElLZXlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uIGNvbnN0Jik7CgogIHZp cnR1YWwgfklLZXlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKTsKCiAgdmlydHVhbAogIGNoYXIgY29uc3QqCiAgICAgICAgICAgbmFtZSAgICAgICAg ICAgICAoKSBjb25zdDsKCiAgc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5z aWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5z aWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0g ICAgICAgIChJS2V5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiBjb25zdCYpOwoKIyA1OTAgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKCn07 CgpjbGFzcyAgIElSb290QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0 aW9uVmlvbGF0aW9uCnsKcHVibGljOgoKICAgICAgICAgICBJUm9vdEFscmVhZHlFeGlzdHNFeGNl cHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgdW5zaWduZWQg bG9uZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkgPSBJRXhjZXB0 aW9uOjp1bnJlY292ZXJhYmxlKTsKCiAgICAgICAgICAgSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0 aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0 aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklSb290QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwKICBjaGFyIGNvbnN0KgogICAg ICAgICAgIG5hbWUgICAgICAgICAgICAgKCkgY29uc3Q7CgogIHN0YXRpYwogIHZvaWQgICAgIHRo cm93SXQgICAgICAgICAgKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAg dm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0aW9uIGNv bnN0Jik7CgojIDYzMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pZXhjLmgiCgoKfTsKCmNsYXNzICAgSUNoaWxkQWxyZWFkeUV4aXN0c0V4Y2VwdGlv biA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0aW9uCnsKcHVibGljOgoKICAgICAgICAgICBJ Q2hpbGRBbHJlYWR5RXhpc3RzRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNldmVyaXR5ID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSk7CgogICAgICAgICAgIElD aGlsZEFscmVhZHlFeGlzdHNFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJ Q2hpbGRBbHJlYWR5RXhpc3RzRXhjZXB0aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklDaGlsZEFs cmVhZHlFeGlzdHNFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICB2 aXJ0dWFsCiAgY2hhciBjb25zdCoKICAgICAgICAgICBuYW1lICAgICAgICAgICAgICgpIGNvbnN0 OwoKICBzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0ICAgICAgICAgICh1bnNpZ25lZCBsb25nLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsK CnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElDaGls ZEFscmVhZHlFeGlzdHNFeGNlcHRpb24gY29uc3QmKTsKCiMgNjcyICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgp9OwoKY2xhc3MgICBJ SWRlbnRpY2FsQ29sbGVjdGlvbkV4Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0 aW9uCnsKcHVibGljOgoKICAgICAgICAgICBJSWRlbnRpY2FsQ29sbGVjdGlvbkV4Y2VwdGlvbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0g MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVu cmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJSWRlbnRpY2FsQ29sbGVjdGlvbkV4Y2VwdGlvbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKElJZGVudGljYWxDb2xsZWN0aW9uRXhjZXB0aW9u IGNvbnN0Jik7CgogIHZpcnR1YWwgfklJZGVudGljYWxDb2xsZWN0aW9uRXhjZXB0aW9uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgdmlydHVhbAogIGNoYXIgY29uc3QqCiAgICAg ICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25zdDsKCiAgc3RhdGljCiAgdm9pZCAgICAgdGhy b3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2 b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJSWRlbnRpY2FsQ29sbGVjdGlvbkV4Y2VwdGlvbiBj b25zdCYpOwoKIyA3MTMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWV4Yy5oIgoKCn07CgpjbGFzcyAgIElJbnZhbGlkUmVwbGFjZW1lbnRFeGNlcHRp b24gOiBwdWJsaWMgSVByZWNvbmRpdGlvblZpb2xhdGlvbgp7CnB1YmxpYzoKCiAgICAgICAgICAg SUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJ SW52YWxpZFJlcGxhY2VtZW50RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo SUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsIH5JSW52YWxp ZFJlcGxhY2VtZW50RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAg dmlydHVhbAogIGNoYXIgY29uc3QqCiAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25z dDsKCiAgc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7 Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJSW52 YWxpZFJlcGxhY2VtZW50RXhjZXB0aW9uIGNvbnN0Jik7CgojIDc1NCAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiCgoKfTsKCmNsYXNzICAg SUN5Y2xpY0F0dGFjaEV4Y2VwdGlvbiA6IHB1YmxpYyBJUHJlY29uZGl0aW9uVmlvbGF0aW9uCnsK cHVibGljOgoKICAgICAgICAgICBJQ3ljbGljQXR0YWNoRXhjZXB0aW9uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcgPSAwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNldmVyaXR5ID0gSUV4Y2VwdGlvbjo6dW5yZWNvdmVyYWJsZSk7 CgogICAgICAgICAgIElDeWNsaWNBdHRhY2hFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChJQ3ljbGljQXR0YWNoRXhjZXB0aW9uIGNvbnN0Jik7CgogIHZpcnR1YWwgfklDeWNs aWNBdHRhY2hFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICB2aXJ0 dWFsCiAgY2hhciBjb25zdCoKICAgICAgICAgICBuYW1lICAgICAgICAgICAgICgpIGNvbnN0OwoK ICBzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0ICAgICAgICAgICh1bnNpZ25lZCBsb25nLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnBy b3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElDeWNsaWNB dHRhY2hFeGNlcHRpb24gY29uc3QmKTsKCiMgNzk1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgp9OwoKY2xhc3MgICBJT3V0T2ZDb2xs ZWN0aW9uTWVtb3J5IDogcHVibGljIElPdXRPZk1lbW9yeQp7CnB1YmxpYzoKCiAgICAgICAgICAg SU91dE9mQ29sbGVjdGlvbk1lbW9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Y29uc3QqLCB1bnNpZ25lZCBsb25nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT ZXZlcml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJT3V0T2ZD b2xsZWN0aW9uTWVtb3J5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU91dE9mQ29sbGVj dGlvbk1lbW9yeSBjb25zdCYpOwoKICB2aXJ0dWFsIH5JT3V0T2ZDb2xsZWN0aW9uTWVtb3J5CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgdmlydHVhbAogIGNoYXIgY29uc3QqCiAg ICAgICAgICAgbmFtZSAgICAgICAgICAgICAoKSBjb25zdDsKCiAgc3RhdGljCiAgdm9pZCAgICAg dGhyb3dJdCAgICAgICAgICAodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoK ICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJT3V0T2ZDb2xsZWN0aW9uTWVtb3J5IGNvbnN0 Jik7CgojIDgzNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pZXhjLmgiCgoKfTsKCiMgODgxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lleGMuaCIKCgojIDEwNDcgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKCgpjbGFzcyAgIElTdHJlYW1F cnJvckV4Y2VwdGlvbiA6IHB1YmxpYyBJRXhjZXB0aW9uCnsKcHVibGljOgoKICAgICAgICAgICBJ U3RyZWFtRXJyb3JFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNv bnN0KiwgdW5zaWduZWQgbG9uZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXZl cml0eSA9IElFeGNlcHRpb246OnVucmVjb3ZlcmFibGUpOwoKICAgICAgICAgICBJU3RyZWFtRXJy b3JFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJU3RyZWFtRXJyb3JFeGNl cHRpb24gY29uc3QmKTsKCiAgdmlydHVhbCAgfklTdHJlYW1FcnJvckV4Y2VwdGlvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwgIGNoYXIgY29uc3QqIG5hbWUgKCkg Y29uc3Q7CgogIHN0YXRpYwogIHZvaWQgICAgIHRocm93SXQgICAgICAgICAgKHVuc2lnbmVkIGxv bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxv bmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgICAgICAgdm9pZCAgICAgb3BlcmF0b3I9ICAg ICAgICAoSVN0cmVhbUVycm9yRXhjZXB0aW9uIGNvbnN0Jik7CgojIDEwODUgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Yy5oIgoKfTsKCmNsYXNz ICAgSVN0cmVhbWVySW52YWxpZEV4Y2VwdGlvbiA6IHB1YmxpYyBJRXhjZXB0aW9uCnsKcHVibGlj OgoKICAgICAgICAgICBJU3RyZWFtZXJJbnZhbGlkRXhjZXB0aW9uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2V2ZXJpdHkgPSBJRXhjZXB0aW9uOjp1bnJlY292ZXJhYmxlKTsKCiAg ICAgICAgICAgSVN0cmVhbWVySW52YWxpZEV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKElTdHJlYW1lckludmFsaWRFeGNlcHRpb24gY29uc3QmKTsKCiAgdmlydHVhbCAgfklT dHJlYW1lckludmFsaWRFeGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoK ICB2aXJ0dWFsICBjaGFyIGNvbnN0KiBuYW1lICgpIGNvbnN0OwoKICBzdGF0aWMKICB2b2lkICAg ICB0aHJvd0l0ICAgICAgICAgICh1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZhdGU6 CgogICAgICAgIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElTdHJlYW1lckludmFsaWRFeGNl cHRpb24gY29uc3QmKTsKCiMgMTEyMyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pZXhjLmgiCgp9OwoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKI3By YWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiAKCiAK I3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3Rv cmUpCiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWlleGMuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBv cnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3Jl KQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkK CgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIAogCgogCgpjbGFzcyAgIElGdWxs RXhjZXB0aW9uSW1wbCA6IHB1YmxpYyBJRnVsbEV4Y2VwdGlvbgp7CnB1YmxpYzoKICAgIHR5cGVk ZWYgSUZ1bGxFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6CgogICAgICAgICAgIElGdWxs RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsK CiAgICAgICAgICAgSUZ1bGxFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcpOwoKICAgICAgICAgICBJRnVsbEV4Y2VwdGlvbkltcGwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChJRnVsbEV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCiAgICAgICAg ICB+SUZ1bGxFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCnN0 YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAg b3BlcmF0b3I9ICAgICAgICAoSUZ1bGxFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoKY2xhc3Mg ICBJRW1wdHlFeGNlcHRpb25JbXBsIDogcHVibGljIElFbXB0eUV4Y2VwdGlvbgp7CnB1YmxpYzoK ICAgIHR5cGVkZWYgSUVtcHR5RXhjZXB0aW9uIEluaGVyaXRlZElCTTsKcHVibGljOgoKICAgICAg ICAgICBJRW1wdHlFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciBjb25zdCopOwoKICAgICAgICAgICBJRW1wdHlFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOwoKICAgICAgICAgICBJRW1wdHlFeGNlcHRpb25J bXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUVtcHR5RXhjZXB0aW9uSW1wbCBjb25z dCYpOwoKICAgICAgICAgIH5JRW1wdHlFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0 ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUVtcHR5RXhjZXB0aW9uSW1wbCBjb25z dCYpOwoKfTsKCmNsYXNzICAgSU5vdEVtcHR5RXhjZXB0aW9uSW1wbCA6IHB1YmxpYyBJTm90RW1w dHlFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0eXBlZGVmIElOb3RFbXB0eUV4Y2VwdGlvbiBJbmhl cml0ZWRJQk07CnB1YmxpYzoKCiAgICAgICAgICAgSU5vdEVtcHR5RXhjZXB0aW9uSW1wbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSU5vdEVt cHR5RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3Qq LCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0Kiwg dW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n KTsKCiAgICAgICAgICAgSU5vdEVtcHR5RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKElOb3RFbXB0eUV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCiAgICAgICAgICB+SU5v dEVtcHR5RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgpzdGF0 aWMKICB2b2lkICAgICB0aHJvd0l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBj b25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29u c3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9w ZXJhdG9yPSAgICAgICAgKElOb3RFbXB0eUV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCn07CgpjbGFz cyAgIElOb3RCb3VuZGVkRXhjZXB0aW9uSW1wbCA6IHB1YmxpYyBJTm90Qm91bmRlZEV4Y2VwdGlv bgp7CnB1YmxpYzoKICAgIHR5cGVkZWYgSU5vdEJvdW5kZWRFeGNlcHRpb24gSW5oZXJpdGVkSUJN OwpwdWJsaWM6CgogICAgICAgICAgIElOb3RCb3VuZGVkRXhjZXB0aW9uSW1wbAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSU5vdEJvdW5kZWRF eGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNo YXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNp Z25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOwoK ICAgICAgICAgICBJTm90Qm91bmRlZEV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChJTm90Qm91bmRlZEV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCiAgICAgICAgICB+SU5v dEJvdW5kZWRFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCnN0 YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAg b3BlcmF0b3I9ICAgICAgICAoSU5vdEJvdW5kZWRFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoK Y2xhc3MgICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbkltcGwgOiBwdWJsaWMgSUN1cnNvckludmFs aWRFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0eXBlZGVmIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9u IEluaGVyaXRlZElCTTsKcHVibGljOgoKICAgICAgICAgICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlv bkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0Kik7CgogICAgICAg ICAgIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nKTsKCiAgICAgICAgICAgSUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBs IGNvbnN0Jik7CgogICAgICAgICAgfklDdXJzb3JJbnZhbGlkRXhjZXB0aW9uSW1wbAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCk7CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3Rl Y3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElDdXJzb3JJbnZh bGlkRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoKfTsKCmNsYXNzICAgSUN1cnNvck5vdEZvclRoaXNF eGNlcHRpb25JbXBsIDogcHVibGljIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uCnsKcHVibGljOgog ICAgdHlwZWRlZiBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbiBJbmhlcml0ZWRJQk07CnB1YmxpYzoK CiAgICAgICAgICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ3Vyc29yTm90Rm9yVGhp c0V4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0Kiwg Y2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVu c2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7 CgogICAgICAgICAgIElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoK ICAgICAgICAgIH5JQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpw cml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJQ3Vyc29yTm90Rm9yVGhpc0V4 Y2VwdGlvbkltcGwgY29uc3QmKTsKCn07CgpjbGFzcyAgIElDdXJzb3JOb3RGb3JHaXZlbkV4Y2Vw dGlvbkltcGwgOiBwdWJsaWMgSUN1cnNvckludmFsaWRFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0 eXBlZGVmIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uIEluaGVyaXRlZElCTTsKcHVibGljOgoKICAg ICAgICAgICBJQ3Vyc29yTm90Rm9yR2l2ZW5FeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ3Vyc29yTm90Rm9yR2l2ZW5F eGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNo YXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNp Z25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOwoK ICAgICAgICAgICBJQ3Vyc29yTm90Rm9yR2l2ZW5FeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoSUN1cnNvck5vdEZvckdpdmVuRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoK ICAgICAgICAgIH5JQ3Vyc29yTm90Rm9yR2l2ZW5FeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoK cHJpdmF0ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUN1cnNvck5vdEZvckdpdmVu RXhjZXB0aW9uSW1wbCBjb25zdCYpOwoKfTsKCmNsYXNzICAgSUN1cnNvck5vdENvbnRhaW5lZEV4 Y2VwdGlvbkltcGwgOiBwdWJsaWMgSUN1cnNvckludmFsaWRFeGNlcHRpb24KewpwdWJsaWM6CiAg ICB0eXBlZGVmIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uIEluaGVyaXRlZElCTTsKcHVibGljOgoK ICAgICAgICAgICBJQ3Vyc29yTm90Q29udGFpbmVkRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSUN1cnNvck5vdENvbnRh aW5lZEV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0 KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCos IHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u Zyk7CgogICAgICAgICAgIElDdXJzb3JOb3RDb250YWluZWRFeGNlcHRpb25JbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoSUN1cnNvck5vdENvbnRhaW5lZEV4Y2VwdGlvbkltcGwgY29u c3QmKTsKCiAgICAgICAgICB+SUN1cnNvck5vdENvbnRhaW5lZEV4Y2VwdGlvbkltcGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90 ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJQ3Vyc29yTm90 Q29udGFpbmVkRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoKfTsKCmNsYXNzICAgSVBvc2l0aW9uSW52 YWxpZEV4Y2VwdGlvbkltcGwgOiBwdWJsaWMgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbgp7CnB1 YmxpYzoKICAgIHR5cGVkZWYgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbiBJbmhlcml0ZWRJQk07 CnB1YmxpYzoKCiAgICAgICAgICAgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbkltcGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0Kik7CgogICAgICAgICAgIElQb3NpdGlv bkludmFsaWRFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBj b25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29u c3QqLCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcpOwoKICAgICAgICAgICBJUG9zaXRpb25JbnZhbGlkRXhjZXB0aW9uSW1wbAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKElQb3NpdGlvbkludmFsaWRFeGNlcHRpb25JbXBsIGNvbnN0 Jik7CgogICAgICAgICAgfklQb3NpdGlvbkludmFsaWRFeGNlcHRpb25JbXBsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVk OgoKcHJpdmF0ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSVBvc2l0aW9uSW52YWxp ZEV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCn07CgpjbGFzcyAgIElOb3RDb250YWluc0tleUV4Y2Vw dGlvbkltcGwgOiBwdWJsaWMgSU5vdENvbnRhaW5zS2V5RXhjZXB0aW9uCnsKcHVibGljOgogICAg dHlwZWRlZiBJTm90Q29udGFpbnNLZXlFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6Cgog ICAgICAgICAgIElOb3RDb250YWluc0tleUV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyIGNvbnN0Kik7CgogICAgICAgICAgIElOb3RDb250YWluc0tleUV4Y2Vw dGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBj b25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVk IGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7CgogICAg ICAgICAgIElOb3RDb250YWluc0tleUV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChJTm90Q29udGFpbnNLZXlFeGNlcHRpb25JbXBsIGNvbnN0Jik7CgogICAgICAgICAg fklOb3RDb250YWluc0tleUV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2 b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJTm90Q29udGFpbnNLZXlFeGNlcHRpb25JbXBsIGNv bnN0Jik7Cgp9OwoKY2xhc3MgICBJS2V5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbkltcGwgOiBwdWJs aWMgSUtleUFscmVhZHlFeGlzdHNFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0eXBlZGVmIElLZXlB bHJlYWR5RXhpc3RzRXhjZXB0aW9uIEluaGVyaXRlZElCTTsKcHVibGljOgoKICAgICAgICAgICBJ S2V5QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyIGNvbnN0Kik7CgogICAgICAgICAgIElLZXlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1w bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKCiAgICAgICAgICAg SUtleUFscmVhZHlFeGlzdHNFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoSUtleUFscmVhZHlFeGlzdHNFeGNlcHRpb25JbXBsIGNvbnN0Jik7CgogICAgICAgICAgfklL ZXlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCk7CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZv aWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElLZXlBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbCBj b25zdCYpOwoKfTsKCmNsYXNzICAgSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbCA6IHB1 YmxpYyBJUm9vdEFscmVhZHlFeGlzdHNFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0eXBlZGVmIElS b290QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiBJbmhlcml0ZWRJQk07CnB1YmxpYzoKCiAgICAgICAg ICAgSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0 aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNv bnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQg bG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKCiAgICAg ICAgICAgSVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKElSb290QWxyZWFkeUV4aXN0c0V4Y2VwdGlvbkltcGwgY29uc3QmKTsKCiAgICAg ICAgICB+SVJvb3RBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCk7CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZh dGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElSb290QWxyZWFkeUV4aXN0c0V4Y2Vw dGlvbkltcGwgY29uc3QmKTsKCn07CgpjbGFzcyAgIElDaGlsZEFscmVhZHlFeGlzdHNFeGNlcHRp b25JbXBsIDogcHVibGljIElDaGlsZEFscmVhZHlFeGlzdHNFeGNlcHRpb24KewpwdWJsaWM6CiAg ICB0eXBlZGVmIElDaGlsZEFscmVhZHlFeGlzdHNFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJs aWM6CgogICAgICAgICAgIElDaGlsZEFscmVhZHlFeGlzdHNFeGNlcHRpb25JbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ2hpbGRBbHJl YWR5RXhpc3RzRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Y29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNv bnN0KiwgdW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nKTsKCiAgICAgICAgICAgSUNoaWxkQWxyZWFkeUV4aXN0c0V4Y2VwdGlvbkltcGwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChJQ2hpbGRBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1w bCBjb25zdCYpOwoKICAgICAgICAgIH5JQ2hpbGRBbHJlYWR5RXhpc3RzRXhjZXB0aW9uSW1wbAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsK CnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElDaGls ZEFscmVhZHlFeGlzdHNFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoKY2xhc3MgICBJSWRlbnRp Y2FsQ29sbGVjdGlvbkV4Y2VwdGlvbkltcGwgOiBwdWJsaWMgSUlkZW50aWNhbENvbGxlY3Rpb25F eGNlcHRpb24KewpwdWJsaWM6CiAgICB0eXBlZGVmIElJZGVudGljYWxDb2xsZWN0aW9uRXhjZXB0 aW9uIEluaGVyaXRlZElCTTsKcHVibGljOgoKICAgICAgICAgICBJSWRlbnRpY2FsQ29sbGVjdGlv bkV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0Kik7 CgogICAgICAgICAgIElJZGVudGljYWxDb2xsZWN0aW9uRXhjZXB0aW9uSW1wbAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKCiAgICAgICAgICAgSUlkZW50aWNhbENv bGxlY3Rpb25FeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUlkZW50 aWNhbENvbGxlY3Rpb25FeGNlcHRpb25JbXBsIGNvbnN0Jik7CgogICAgICAgICAgfklJZGVudGlj YWxDb2xsZWN0aW9uRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7 CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQg ICAgIG9wZXJhdG9yPSAgICAgICAgKElJZGVudGljYWxDb2xsZWN0aW9uRXhjZXB0aW9uSW1wbCBj b25zdCYpOwoKfTsKCmNsYXNzICAgSUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbkltcGwgOiBw dWJsaWMgSUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbgp7CnB1YmxpYzoKICAgIHR5cGVkZWYg SUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbiBJbmhlcml0ZWRJQk07CnB1YmxpYzoKCiAgICAg ICAgICAgSUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyIGNvbnN0Kik7CgogICAgICAgICAgIElJbnZhbGlkUmVwbGFjZW1lbnRF eGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNo YXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNp Z25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOwoK ICAgICAgICAgICBJSW52YWxpZFJlcGxhY2VtZW50RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKElJbnZhbGlkUmVwbGFjZW1lbnRFeGNlcHRpb25JbXBsIGNvbnN0Jik7 CgogICAgICAgICAgfklJbnZhbGlkUmVwbGFjZW1lbnRFeGNlcHRpb25JbXBsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVk OgoKcHJpdmF0ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUludmFsaWRSZXBsYWNl bWVudEV4Y2VwdGlvbkltcGwgY29uc3QmKTsKCn07CgpjbGFzcyAgIElDeWNsaWNBdHRhY2hFeGNl cHRpb25JbXBsIDogcHVibGljIElDeWNsaWNBdHRhY2hFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0 eXBlZGVmIElDeWNsaWNBdHRhY2hFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6CgogICAg ICAgICAgIElDeWNsaWNBdHRhY2hFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ3ljbGljQXR0YWNoRXhjZXB0aW9uSW1w bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKTsKCiAgICAgICAgICAg SUN5Y2xpY0F0dGFjaEV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJ Q3ljbGljQXR0YWNoRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoKICAgICAgICAgIH5JQ3ljbGljQXR0 YWNoRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgpzdGF0aWMK ICB2b2lkICAgICB0aHJvd0l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25z dCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3Qq LCB1bnNpZ25lZCBsb25nKTsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJh dG9yPSAgICAgICAgKElDeWNsaWNBdHRhY2hFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoKY2xh c3MgICBJT3V0T2ZDb2xsZWN0aW9uTWVtb3J5SW1wbCA6IHB1YmxpYyBJT3V0T2ZDb2xsZWN0aW9u TWVtb3J5CnsKcHVibGljOgogICAgdHlwZWRlZiBJT3V0T2ZDb2xsZWN0aW9uTWVtb3J5IEluaGVy aXRlZElCTTsKcHVibGljOgoKICAgICAgICAgICBJT3V0T2ZDb2xsZWN0aW9uTWVtb3J5SW1wbAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSU91 dE9mQ29sbGVjdGlvbk1lbW9yeUltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyk7CgogICAgICAgICAgIElPdXRPZkNvbGxlY3Rpb25NZW1vcnlJbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoSU91dE9mQ29sbGVjdGlvbk1lbW9yeUltcGwgY29uc3QmKTsK CiAgICAgICAgICB+SU91dE9mQ29sbGVjdGlvbk1lbW9yeUltcGwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2 YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJT3V0T2ZDb2xsZWN0aW9uTWVtb3J5 SW1wbCBjb25zdCYpOwoKfTsKCgpjbGFzcyAgIElDb2xsZWN0aW9uUmVzb3VyY2VFeGNlcHRpb25J bXBsIDogcHVibGljIElDb2xsZWN0aW9uUmVzb3VyY2VFeGNlcHRpb24KewpwdWJsaWM6CiAgICB0 eXBlZGVmIElDb2xsZWN0aW9uUmVzb3VyY2VFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6 CgogICAgICAgICAgIElDb2xsZWN0aW9uUmVzb3VyY2VFeGNlcHRpb25JbXBsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ29sbGVjdGlvblJl c291cmNlRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29u c3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0 KiwgdW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nKTsKCiAgICAgICAgICAgSUNvbGxlY3Rpb25SZXNvdXJjZUV4Y2VwdGlvbkltcGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChJQ29sbGVjdGlvblJlc291cmNlRXhjZXB0aW9uSW1wbCBj b25zdCYpOwoKICAgICAgICAgIH5JQ29sbGVjdGlvblJlc291cmNlRXhjZXB0aW9uSW1wbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgpzdGF0aWMKICB2b2lkICAgICB0aHJvd0l0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nKTsKCnBy b3RlY3RlZDoKCnByaXZhdGU6CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElDb2xsZWN0 aW9uUmVzb3VyY2VFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoKY2xhc3MgICBJQ29sbGVjdGlv bkxvY2tFeGNlcHRpb25JbXBsIDogcHVibGljIElDb2xsZWN0aW9uTG9ja0V4Y2VwdGlvbgp7CnB1 YmxpYzoKICAgIHR5cGVkZWYgSUNvbGxlY3Rpb25Mb2NrRXhjZXB0aW9uIEluaGVyaXRlZElCTTsK cHVibGljOgoKICAgICAgICAgICBJQ29sbGVjdGlvbkxvY2tFeGNlcHRpb25JbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCopOwoKICAgICAgICAgICBJQ29sbGVjdGlv bkxvY2tFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25z dCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3Qq LCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcpOwoKICAgICAgICAgICBJQ29sbGVjdGlvbkxvY2tFeGNlcHRpb25JbXBsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoSUNvbGxlY3Rpb25Mb2NrRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoK ICAgICAgICAgIH5JQ29sbGVjdGlvbkxvY2tFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJp dmF0ZToKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUNvbGxlY3Rpb25Mb2NrRXhjZXB0 aW9uSW1wbCBjb25zdCYpOwoKfTsKCmNsYXNzICAgSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2Vw dGlvbkltcGwgOiBwdWJsaWMgSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2VwdGlvbgp7CnB1Ymxp YzoKICAgIHR5cGVkZWYgSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2VwdGlvbiBJbmhlcml0ZWRJ Qk07CnB1YmxpYzoKCiAgICAgICAgICAgSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2VwdGlvbklt cGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0Kik7CgogICAgICAgICAg IElDb2xsZWN0aW9uTG9ja1RpbWVPdXRFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcpOwoKICAgICAgICAgICBJQ29sbGVjdGlvbkxvY2tUaW1lT3V0 RXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElDb2xsZWN0aW9uTG9j a1RpbWVPdXRFeGNlcHRpb25JbXBsIGNvbnN0Jik7CgogICAgICAgICAgfklDb2xsZWN0aW9uTG9j a1RpbWVPdXRFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCnN0 YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9pZCAgICAg b3BlcmF0b3I9ICAgICAgICAoSUNvbGxlY3Rpb25Mb2NrVGltZU91dEV4Y2VwdGlvbkltcGwgY29u c3QmKTsKCn07CgpjbGFzcyAgIElDb2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uSW1wbCA6IHB1Ymxp YyBJQ29sbGVjdGlvblVubG9ja0V4Y2VwdGlvbgp7CnB1YmxpYzoKICAgIHR5cGVkZWYgSUNvbGxl Y3Rpb25VbmxvY2tFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6CgogICAgICAgICAgIElD b2xsZWN0aW9uVW5sb2NrRXhjZXB0aW9uSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSUNvbGxlY3Rpb25VbmxvY2tFeGNlcHRpb25JbXBs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqLCB1bnNpZ25lZCBsb25nLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcpOwoKICAgICAgICAgICBJ Q29sbGVjdGlvblVubG9ja0V4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChJQ29sbGVjdGlvblVubG9ja0V4Y2VwdGlvbkltcGwgY29uc3QmKTsKCiAgICAgICAgICB+SUNv bGxlY3Rpb25VbmxvY2tFeGNlcHRpb25JbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KTsKCnN0YXRpYwogIHZvaWQgICAgIHRocm93SXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgdm9p ZCAgICAgb3BlcmF0b3I9ICAgICAgICAoSUNvbGxlY3Rpb25VbmxvY2tFeGNlcHRpb25JbXBsIGNv bnN0Jik7Cgp9OwoKCgojIDc5MiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9paWV4Yy5oIgoKCgpjbGFzcyAgIElTdHJlYW1FcnJvckV4Y2VwdGlvbklt cGwgOiBwdWJsaWMgSVN0cmVhbUVycm9yRXhjZXB0aW9uCnsKcHVibGljOgogICAgdHlwZWRlZiBJ U3RyZWFtRXJyb3JFeGNlcHRpb24gSW5oZXJpdGVkSUJNOwpwdWJsaWM6CgogICAgICAgICAgIElT dHJlYW1FcnJvckV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0Kik7CgogICAgICAgICAgIElTdHJlYW1FcnJvckV4Y2VwdGlvbkltcGwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCosIHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyk7CgogICAgICAgICAgIElTdHJlYW1FcnJv ckV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJU3RyZWFtRXJyb3JF eGNlcHRpb25JbXBsIGNvbnN0Jik7CgogICAgICAgICAgfklTdHJlYW1FcnJvckV4Y2VwdGlvbklt cGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhy b3dJdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0 KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9u Zyk7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJ U3RyZWFtRXJyb3JFeGNlcHRpb25JbXBsIGNvbnN0Jik7Cgp9OwoKY2xhc3MgICBJU3RyZWFtZXJJ bnZhbGlkRXhjZXB0aW9uSW1wbCA6IHB1YmxpYyBJU3RyZWFtZXJJbnZhbGlkRXhjZXB0aW9uCnsK cHVibGljOgogICAgdHlwZWRlZiBJU3RyZWFtZXJJbnZhbGlkRXhjZXB0aW9uIEluaGVyaXRlZElC TTsKcHVibGljOgoKICAgICAgICAgICBJU3RyZWFtZXJJbnZhbGlkRXhjZXB0aW9uSW1wbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqKTsKCiAgICAgICAgICAgSVN0cmVh bWVySW52YWxpZEV4Y2VwdGlvbkltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy IGNvbnN0KiwgY2hhciBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBj b25zdCosIHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyk7CgogICAgICAgICAgIElTdHJlYW1lckludmFsaWRFeGNlcHRpb25JbXBsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoSVN0cmVhbWVySW52YWxpZEV4Y2VwdGlvbkltcGwgY29u c3QmKTsKCiAgICAgICAgICB+SVN0cmVhbWVySW52YWxpZEV4Y2VwdGlvbkltcGwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgpOwoKc3RhdGljCiAgdm9pZCAgICAgdGhyb3dJdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiwgdW5zaWduZWQgbG9uZyk7Cgpwcm90ZWN0 ZWQ6Cgpwcml2YXRlOgoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJU3RyZWFtZXJJbnZh bGlkRXhjZXB0aW9uSW1wbCBjb25zdCYpOwoKfTsKCgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0o cG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGlu Zm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCgoK CgoKCgoKCiAgCiAgCiAgCiAgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiMgMjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlhY2xsY3QuaW5sIiAyCgogCiAKIAoKaW5saW5lCklD b2xsZWN0aW9uUmVzb3VyY2VJbXBsOjoKfklDb2xsZWN0aW9uUmVzb3VyY2VJbXBsICgpCnsgZGVs ZXRlIGl2UmVzb3VyY2U7Cn0KCgogCiAKIAoKIAoKaW5saW5lCklDdXJzb3JJbXBsOjoKSUN1cnNv ckltcGwgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmIGNvbGxlY3Rpb24pCjogaXZDb2xsZWN0aW9u ICgmY29sbGVjdGlvbikKewp9CgppbmxpbmUKSUN1cnNvckltcGw6Ogp+SUN1cnNvckltcGwgKCkK ewp9CgppbmxpbmUgdm9pZCBjb25zdCoKSUN1cnNvckltcGw6OgpFbGVtZW50ICgpIGNvbnN0Cnsg cmV0dXJuIGl2Q29sbGVjdGlvbi0+RWxlbWVudEF0ICgqdGhpcyk7Cn0KCmlubGluZSBib29sCklD dXJzb3JJbXBsOjoKSXNGb3IgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmIGNvbGxlY3Rpb24pIGNv bnN0CnsgcmV0dXJuIChpdkNvbGxlY3Rpb24gPT0gJmNvbGxlY3Rpb24pOwp9CgppbmxpbmUgSVBv c2l0aW9uCklDdXJzb3JJbXBsOjoKUG9zaXRpb24gKCkgY29uc3QKeyByZXR1cm4gaXZDb2xsZWN0 aW9uLT5Qb3NpdGlvbkF0ICgqdGhpcyk7Cn0KCmlubGluZSBib29sCklDdXJzb3JJbXBsOjoKU2V0 VG9GaXJzdCAoKQp7IHJldHVybiBpdkNvbGxlY3Rpb24tPlNldFRvRmlyc3QgKCp0aGlzKTsKfQoK aW5saW5lIGJvb2wKSUN1cnNvckltcGw6OgpTZXRUb0xhc3QgKCkKeyByZXR1cm4gaXZDb2xsZWN0 aW9uLT5TZXRUb0xhc3QgKCp0aGlzKTsKfQoKaW5saW5lIGJvb2wKSUN1cnNvckltcGw6OgpTZXRU b05leHQgKCkKeyByZXR1cm4gaXZDb2xsZWN0aW9uLT5TZXRUb05leHQgKCp0aGlzKTsKfQoKaW5s aW5lIHZvaWQKSUN1cnNvckltcGw6OgpTZXRUb1Bvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRpb24p CnsgaXZDb2xsZWN0aW9uLT5TZXRUb1Bvc2l0aW9uIChwb3NpdGlvbiwgKnRoaXMpOwp9Cgppbmxp bmUgYm9vbApJQ3Vyc29ySW1wbDo6ClNldFRvUHJldmlvdXMgKCkKeyByZXR1cm4gaXZDb2xsZWN0 aW9uLT5TZXRUb1ByZXZpb3VzICgqdGhpcyk7Cn0KCmlubGluZSBib29sCklDdXJzb3JJbXBsOjoK b3BlcmF0b3I9PSAoSUN1cnNvckltcGwgY29uc3QmIGN1cnNvcikgY29uc3QKeyByZXR1cm4gKGl2 Q29sbGVjdGlvbiA9PSBjdXJzb3IuaXZDb2xsZWN0aW9uKTsKfQoKaW5saW5lIGJvb2wKSUN1cnNv ckltcGw6OgpvcGVyYXRvciE9IChJQ3Vyc29ySW1wbCBjb25zdCYgY3Vyc29yKSBjb25zdAp7IHJl dHVybiAhIG9wZXJhdG9yPT0gKGN1cnNvcik7Cn0KCiAKCmlubGluZSB2b2lkKgpJQ3Vyc29ySW1w bDo6CkNoZWNrUG9pbnRlciAodm9pZCogcHRyKQp7IHJldHVybiBJQUNvbGxlY3Rpb25JbXBsOjpD aGVja1BvaW50ZXIgKHB0cik7Cn0KCiAKIAogCgogCgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb25J bXBsOjoKQWRkICh2b2lkIGNvbnN0KiBlbGVtZW50KQp7IHJldHVybiBBZGQgKGVsZW1lbnQsICpp dkR1bW15Q3Vyc29yKTsKfQoKaW5saW5lIHZvaWQKSUFDb2xsZWN0aW9uSW1wbDo6CkFkZEFzRmly c3QgKHZvaWQgY29uc3QqIGVsZW1lbnQpCnsgQWRkQXNGaXJzdCAoZWxlbWVudCwgQ3Vyc29yT2Yg KCp0aGlzKSk7Cn0KCmlubGluZSB2b2lkCklBQ29sbGVjdGlvbkltcGw6OgpBZGRBc0xhc3QgKHZv aWQgY29uc3QqIGVsZW1lbnQpCnsgQWRkQXNMYXN0IChlbGVtZW50LCBDdXJzb3JPZiAoKnRoaXMp KTsKfQoKaW5saW5lIHZvaWQKSUFDb2xsZWN0aW9uSW1wbDo6CkFkZEF0UG9zaXRpb24gKElQb3Np dGlvbiBwb3NpdGlvbiwgdm9pZCBjb25zdCogZWxlbWVudCkKeyBBZGRBdFBvc2l0aW9uIChwb3Np dGlvbiwgZWxlbWVudCwgQ3Vyc29yT2YgKCp0aGlzKSk7Cn0KCmlubGluZSBib29sCklBQ29sbGVj dGlvbkltcGw6OgpBZGRPclJlcGxhY2VFbGVtZW50V2l0aEtleSAodm9pZCBjb25zdCogZWxlbWVu dCkKeyByZXR1cm4gQWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkgKGVsZW1lbnQsIEN1cnNvck9m ICgqdGhpcykpOwp9CgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb25JbXBsOjoKQ29udGFpbnMgKHZv aWQgY29uc3QqIGVsZW1lbnQpIGNvbnN0CnsgcmV0dXJuIExvY2F0ZSAoZWxlbWVudCwgQ3Vyc29y T2YgKCp0aGlzKSk7Cn0KCmlubGluZSBib29sCklBQ29sbGVjdGlvbkltcGw6OgpMb2NhdGVPckFk ZCAodm9pZCBjb25zdCogZWxlbWVudCkKeyByZXR1cm4gTG9jYXRlT3JBZGQgKGVsZW1lbnQsIEN1 cnNvck9mICgqdGhpcykpOwp9CgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb25JbXBsOjoKTG9jYXRl T3JBZGRFbGVtZW50V2l0aEtleSAodm9pZCBjb25zdCogZWxlbWVudCkKeyByZXR1cm4gTG9jYXRl T3JBZGRFbGVtZW50V2l0aEtleSAoZWxlbWVudCwgQ3Vyc29yT2YgKCp0aGlzKSk7Cn0KCmlubGlu ZSBib29sCklBQ29sbGVjdGlvbkltcGw6OgpSZXBsYWNlRWxlbWVudFdpdGhLZXkgKHZvaWQgY29u c3QqIGVsZW1lbnQpCnsgcmV0dXJuIFJlcGxhY2VFbGVtZW50V2l0aEtleSAoZWxlbWVudCwgQ3Vy c29yT2YgKCp0aGlzKSk7Cn0KCiAKCmlubGluZQpJQUNvbGxlY3Rpb25JbXBsOjoKSUFDb2xsZWN0 aW9uSW1wbCAoSUFDb2xsZWN0aW9uSW1wbCBjb25zdCYpCnsgIAp9CgppbmxpbmUgSUN1cnNvcklt cGwmCklBQ29sbGVjdGlvbkltcGw6OgpDdXJzb3JPZiAoSUFDb2xsZWN0aW9uSW1wbCBjb25zdCYg Y29sbGVjdGlvbikKeyByZXR1cm4gKmNvbGxlY3Rpb24uaXZEdW1teUN1cnNvcjsKfQoKaW5saW5l IElBQ29sbGVjdGlvbkltcGw6Ok9wcyYKSUFDb2xsZWN0aW9uSW1wbDo6Ck9wc09mIChJQUNvbGxl Y3Rpb25JbXBsIGNvbnN0JiBjb2xsZWN0aW9uKQp7IHJldHVybiAqY29sbGVjdGlvbi5pdk9wczsK fQoKIAoKIyA3MzUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWlhY2xsY3QuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBv cnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyNiAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbWNsbGN0LmgiIDIKCiAKCiAKI3By YWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JU X0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5n KF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoK CgoKCgoKCiAKCiAKCgoKIAoKIAogCgogCgpjbGFzcyAgIElNZXRhQ29sbGVjdGlvbgp7CnB1Ymxp YzoKCnByb3RlY3RlZDoKCiAgSUFDb2xsZWN0aW9uSW1wbCoKICAgICAgICAgICBpdkltcGw7Cgog ICAgICAgICAgIElNZXRhQ29sbGVjdGlvbiAgKCk7CgogICAgICAgICAgIElNZXRhQ29sbGVjdGlv biAgKElNZXRhQ29sbGVjdGlvbiBjb25zdCYpOwoKICB2aXJ0dWFsICB+SU1ldGFDb2xsZWN0aW9u ICAoKTsKCiAgc3RhdGljCiAgdm9pZCogICAgQ2hlY2tQb2ludGVyICAgICAodm9pZCopOwoKICB2 b2lkICAgICBDbG9uZUltcGxPZiAgICAgIChJTWV0YUNvbGxlY3Rpb24gY29uc3QmKTsKCiAgc3Rh dGljCiAgSUFDb2xsZWN0aW9uSW1wbCYKICAgICAgICAgICBJbXBsT2YgICAgICAgICAgIChJTWV0 YUNvbGxlY3Rpb24gY29uc3QmKTsKCiAgdm9pZCAgICAgU2V0SW1wbCAgICAgICAgICAoSUFDb2xs ZWN0aW9uSW1wbCopOwoKIyAxMDggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaW1jbGxjdC5oIgoKCn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdtYSBl bnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbWNsbGN0LmlubCIg MQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiAKIAoKIAoKaW5saW5lCklNZXRh Q29sbGVjdGlvbjo6CklNZXRhQ29sbGVjdGlvbiAoKQo6IGl2SW1wbCAoMCkKewp9CgppbmxpbmUK SU1ldGFDb2xsZWN0aW9uOjoKSU1ldGFDb2xsZWN0aW9uIChJTWV0YUNvbGxlY3Rpb24gY29uc3Qm KQo6IGl2SW1wbCAoMCkKewp9CgppbmxpbmUgdm9pZCoKSU1ldGFDb2xsZWN0aW9uOjoKQ2hlY2tQ b2ludGVyICh2b2lkKiBwKQp7IHJldHVybiBJQUNvbGxlY3Rpb25JbXBsOjpDaGVja1BvaW50ZXIg KHApOwp9CgppbmxpbmUgSUFDb2xsZWN0aW9uSW1wbCYKSU1ldGFDb2xsZWN0aW9uOjoKSW1wbE9m IChJTWV0YUNvbGxlY3Rpb24gY29uc3QmIGNvbGxlY3Rpb24pCnsgcmV0dXJuICooSUFDb2xsZWN0 aW9uSW1wbCopY29sbGVjdGlvbi5pdkltcGw7Cn0KCiAKCiMgMTM3ICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ltY2xsY3QuaCIgMgoKIAoKIAojcHJh Z21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKIAoKIyAzMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pYmNsbGN0LmgiIDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFscy5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAK IAogCiAKCiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pY3N0ci5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKIAoK IAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURF Ul9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1l bWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkK CgoKCgoKCiAKCiAKIAoKIAogCgogCgp0ZW1wbGF0ZSA8IGNsYXNzIEVsZW1lbnQgPgpjbGFzcyBJ Q29sbGVjdGlvblN0cmVhbWVyIDogcHVibGljIElBQ29sbGVjdGlvblN0cmVhbWVyCnsKcHVibGlj OgogIElDb2xsZWN0aW9uU3RyZWFtZXIgKCkge307CiAgdmlydHVhbCB+SUNvbGxlY3Rpb25TdHJl YW1lciAoKSB7fTsKCiAgdmlydHVhbCB2b2lkIHN0cmVhbU91dCAoSURhdGFTdHJlYW0mIHRvV2hl cmUsIHZvaWQqIGVsZW1lbnQpCiAgeyAqKEVsZW1lbnQqKWVsZW1lbnQgPj49IHRvV2hlcmU7CiAg fTsKCiAgdmlydHVhbCB2b2lkIHN0cmVhbUluIChJRGF0YVN0cmVhbSYgZnJvbVdoZXJlLCB2b2lk KiBlbGVtZW50KQogIHsgbmV3IChlbGVtZW50KSBFbGVtZW50ICgpOwogICAgKihFbGVtZW50Kill bGVtZW50IDw8PSBmcm9tV2hlcmU7CiAgfTsKCn07CgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0o cG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGlu Zm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCgog CgojIDI3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lnbG9iYWxzLmgiIDIKCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2ljb21wYXQuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAK IAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKIyAzMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFscy5oIiAyCgojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0ZG9wcy5oIiAxCgoKCiAKIAog CgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnbG9iYWxzLmgiIDEKIyAzOSAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFscy5oIgoKIyAyNiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3Rkb3Bz LmgiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgv Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0ZG9wcy5oIiAyCgoKCgoKCiAKCiAKI3ByYWdt YSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xF VkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9f SU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoK CiAKCiAKIAoKIAogCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KRWxlbWVudCYgZWxl bWVudEZvck9wcyAoRWxlbWVudCYgZSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KRWxlbWVu dCBjb25zdCYgZWxlbWVudEZvck9wcyAoRWxlbWVudCBjb25zdCYgZSk7CgogCgpjbGFzcyBJU3Rk TWVtT3BzIHsKcHVibGljOgoKICB2b2lkKiBhbGxvY2F0ZSAgIChzaXplX3QKIAoKCgoKCgoKCiAg ICAgICAgICAgICAgICAgICApIGNvbnN0OwoKICB2b2lkICBkZWFsbG9jYXRlICh2b2lkKgogCiAK CgoKCgogICAgICAgICAgICAgICAgICAgKSBjb25zdDsKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudE9wcz4KY2xhc3MgSVdTdGRNZW1PcHMgewogIEVsZW1lbnRPcHMgaXZFbGVtZW50T3BzOwpw dWJsaWM6CgogIHZvaWQqIEFsbG9jYXRlICAgKHNpemVfdAogCgoKCgoKCgoKICAgICAgICAgICAg ICAgICAgICkgY29uc3Q7CgogIHZvaWQgIERlYWxsb2NhdGUgKHZvaWQqCiAKCgoKCgogICAgICAg ICAgICAgICAgICAgKSBjb25zdDsKCn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xh c3MgSVN0ZEFzT3BzIHsKcHVibGljOgogIHZvaWQgYXNzaWduIChFbGVtZW50JiwgRWxlbWVudCBj b25zdCYpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRP cHM+CmNsYXNzIElXU3RkQXNPcHMgewogIEVsZW1lbnRPcHMgaXZFbGVtZW50T3BzOwpwdWJsaWM6 CiAgdm9pZCBBc3NpZ24gKEVsZW1lbnQmLCBFbGVtZW50IGNvbnN0JikgY29uc3Q7Cn07CgogCgp0 ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSVN0ZEVxT3BzIHsKcHVibGljOgogIGJvb2wg ZXF1YWwgKEVsZW1lbnQgY29uc3QmLCBFbGVtZW50IGNvbnN0JikgY29uc3Q7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSVdTdGRFcU9wcyB7CiAg RWxlbWVudE9wcyBpdkVsZW1lbnRPcHM7CnB1YmxpYzoKICBib29sIEVxdWFsIChFbGVtZW50IGNv bnN0JiwgRWxlbWVudCBjb25zdCYpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xh c3MgRWxlbWVudE9wcz4KY2xhc3MgSVdTdGRFcUtleU9wcyB7CiAgRWxlbWVudE9wcyBpdkVsZW1l bnRPcHM7CnB1YmxpYzoKICBib29sIEVxdWFsIChLZXkgY29uc3QmLCBLZXkgY29uc3QmKSBjb25z dDsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJU3RkQ21wT3BzIHsKcHVi bGljOgogIGxvbmcgY29tcGFyZSAoRWxlbWVudCBjb25zdCYsIEVsZW1lbnQgY29uc3QmKSBjb25z dDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJ V1N0ZENtcE9wcyB7CiAgRWxlbWVudE9wcyBpdkVsZW1lbnRPcHM7CnB1YmxpYzoKICBsb25nIENv bXBhcmUgKEVsZW1lbnQgY29uc3QmLCBFbGVtZW50IGNvbnN0JikgY29uc3Q7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgS2V5LCBjbGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJV1N0ZENtcEtleU9wcyB7CiAg RWxlbWVudE9wcyBpdkVsZW1lbnRPcHM7CnB1YmxpYzoKICBsb25nIENvbXBhcmUgKEtleSBjb25z dCYsIEtleSBjb25zdCYpIGNvbnN0Owp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmNs YXNzIElTdGRIc2hPcHMgewpwdWJsaWM6CiAgdW5zaWduZWQgbG9uZyBoYXNoIChFbGVtZW50IGNv bnN0JiwgdW5zaWduZWQgbG9uZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwg Y2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSVdTdGRIc2hPcHMgewogIEVsZW1lbnRPcHMgaXZFbGVt ZW50T3BzOwpwdWJsaWM6CiAgdW5zaWduZWQgbG9uZyBIYXNoIChFbGVtZW50IGNvbnN0JiwgdW5z aWduZWQgbG9uZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBFbGVtZW50 T3BzPgpjbGFzcyBJV1N0ZEhzaEtleU9wcyB7CiAgRWxlbWVudE9wcyBpdkVsZW1lbnRPcHM7CnB1 YmxpYzoKICB1bnNpZ25lZCBsb25nIEhhc2ggKEtleSBjb25zdCYsIHVuc2lnbmVkIGxvbmcpIGNv bnN0Owp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KY2xhc3MgSVN0 ZEtleU9wcyB7CnB1YmxpYzoKICBLZXkgY29uc3QmIGtleSAoRWxlbWVudCBjb25zdCYpIGNvbnN0 Owp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIF9LZXksIGNsYXNzIEVsZW1lbnRP cHM+CmNsYXNzIElXU3RkS2V5T3BzIHsKICBFbGVtZW50T3BzIGl2RWxlbWVudE9wczsKcHVibGlj OgogIF9LZXkgY29uc3QmIEtleSAoRWxlbWVudCBjb25zdCYpIGNvbnN0Owp9OwoKIAoKdGVtcGxh dGUgPGNsYXNzIEVsZW1lbnQ+CmNsYXNzIElTdGRPcHMgOiBwdWJsaWMgSVN0ZE1lbU9wcywKICAg ICAgICAgICAgICAgIHB1YmxpYyBJU3RkQXNPcHMgPEVsZW1lbnQ+IHsKfTsKCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJV1N0ZE9wcyA6CiAgcHVibGlj IElXU3RkTWVtT3BzIDxFbGVtZW50T3BzPiwKICBwdWJsaWMgSVdTdGRBc09wcyA8RWxlbWVudCwg RWxlbWVudE9wcz4gewpwdWJsaWM6CiAgSVdTdGRPcHMgKHZvaWQqID0gMCkge30KfTsKCnRlbXBs YXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJRU9wcyA6IHB1YmxpYyBJU3RkT3BzIDxFbGVtZW50 PiwKICAgICAgICAgICAgICBwdWJsaWMgSVN0ZEVxT3BzIDxFbGVtZW50PiB7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSVdFT3BzIDoKICBwdWJs aWMgSVdTdGRPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHM+LAogIHB1YmxpYyBJV1N0ZEVxT3BzIDxF bGVtZW50LCBFbGVtZW50T3BzPiB7CnB1YmxpYzoKICBJV0VPcHMgKHZvaWQqID0gMCkge30KfTsK CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJQ09wcyA6IHB1YmxpYyBJU3RkT3BzIDxF bGVtZW50PiwKICAgICAgICAgICAgICBwdWJsaWMgSVN0ZENtcE9wcyA8RWxlbWVudD4gewp9OwoK dGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHM+CmNsYXNzIElXQ09wcyA6 CiAgcHVibGljIElXU3RkT3BzIDxFbGVtZW50LCBFbGVtZW50T3BzPiwKICBwdWJsaWMgSVdTdGRD bXBPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHM+IHsKcHVibGljOgogIElXQ09wcyAodm9pZCogPSAw KSB7fQp9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSUVDT3BzIDogcHVibGlj IElFT3BzIDxFbGVtZW50PiwKICAgICAgICAgICAgICAgcHVibGljIElTdGRDbXBPcHMgPEVsZW1l bnQ+IHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJRUhPcHMgOiBwdWJsaWMg SUVPcHMgPEVsZW1lbnQ+LAogICAgICAgICAgICAgICBwdWJsaWMgSVN0ZEhzaE9wcyA8RWxlbWVu dD4gewp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHM+CmNsYXNz IElXRUhPcHMgOgogIHB1YmxpYyBJV0VPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHM+LAogIHB1Ymxp YyBJV1N0ZEhzaE9wcyA8RWxlbWVudCwgRWxlbWVudE9wcz4gewpwdWJsaWM6CiAgSVdFSE9wcyAo dm9pZCogPSAwKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleT4KY2xhc3MgSUtDS2V5T3BzIDog cHVibGljIElTdGRDbXBPcHMgPEtleT4gewp9OwoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3Mg RWxlbWVudE9wcz4KY2xhc3MgSVdLQ0tleU9wcyA6CiAgcHVibGljIElXU3RkQ21wS2V5T3BzIDxL ZXksIEVsZW1lbnRPcHM+IHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+ CmNsYXNzIElLQ09wcyA6IHB1YmxpYyBJU3RkT3BzIDxFbGVtZW50PiwKICAgICAgICAgICAgICAg cHVibGljIElTdGRLZXlPcHMgPEVsZW1lbnQsIEtleT4gewpwdWJsaWM6CiAgSUtDS2V5T3BzIDxL ZXk+IGtleU9wczsKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBfS2V5LCBjbGFz cyBFbGVtZW50T3BzPgpjbGFzcyBJV0tDT3BzIDoKICBwdWJsaWMgSVdTdGRPcHMgPEVsZW1lbnQs IEVsZW1lbnRPcHM+LAogIHB1YmxpYyBJV1N0ZEtleU9wcyA8RWxlbWVudCwgX0tleSwgRWxlbWVu dE9wcz4gewpwdWJsaWM6CiAgSVdLQ0tleU9wcyA8X0tleSwgRWxlbWVudE9wcz4ga2V5T3BzOwog IElXS0NPcHMgKHZvaWQqID0gMCkge307Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5PgpjbGFzcyBJ S0VIS2V5T3BzIDogcHVibGljIElTdGRFcU9wcyA8S2V5PiwKICAgICAgICAgICAgICAgICAgIHB1 YmxpYyBJU3RkSHNoT3BzIDxLZXk+IHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIEVs ZW1lbnRPcHM+CmNsYXNzIElXS0VIS2V5T3BzIDoKICBwdWJsaWMgSVdTdGRFcUtleU9wcyA8S2V5 LCBFbGVtZW50T3BzPiwKICBwdWJsaWMgSVdTdGRIc2hLZXlPcHMgPEtleSwgRWxlbWVudE9wcz4g ewpwdWJsaWM6Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgpjbGFzcyBJ S0VIT3BzIDogcHVibGljIElTdGRPcHMgPEVsZW1lbnQ+LAogICAgICAgICAgICAgICAgcHVibGlj IElTdGRLZXlPcHMgPEVsZW1lbnQsIEtleT4gewpwdWJsaWM6CiAgSUtFSEtleU9wcyA8S2V5PiBr ZXlPcHM7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgX0tleSwgY2xhc3MgRWxl bWVudE9wcz4KY2xhc3MgSVdLRUhPcHMgOgogIHB1YmxpYyBJV1N0ZE9wcyA8RWxlbWVudCwgRWxl bWVudE9wcz4sCiAgcHVibGljIElXU3RkS2V5T3BzIDxFbGVtZW50LCBfS2V5LCBFbGVtZW50T3Bz PiB7CnB1YmxpYzoKICBJV0tFSEtleU9wcyA8X0tleSwgRWxlbWVudE9wcz4ga2V5T3BzOwogIElX S0VIT3BzICh2b2lkKiA9IDApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5PgpjbGFzcyBJRUtD S2V5T3BzIDogcHVibGljIElTdGRDbXBPcHMgPEtleT4gewp9OwoKdGVtcGxhdGUgPGNsYXNzIEtl eSwgY2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSVdFS0NLZXlPcHMgOgogIHB1YmxpYyBJV1N0ZENt cEtleU9wcyA8S2V5LCBFbGVtZW50T3BzPiB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwg Y2xhc3MgS2V5PgpjbGFzcyBJRUtDT3BzIDogcHVibGljIElFT3BzIDxFbGVtZW50PiwKICAgICAg ICAgICAgICAgIHB1YmxpYyBJU3RkS2V5T3BzIDxFbGVtZW50LCBLZXk+IHsKcHVibGljOgogIElF S0NLZXlPcHMgPEtleT4ga2V5T3BzOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNz IF9LZXksIGNsYXNzIEVsZW1lbnRPcHM+CmNsYXNzIElXRUtDT3BzIDoKICBwdWJsaWMgSVdFT3Bz IDxFbGVtZW50LCBFbGVtZW50T3BzPiwKICBwdWJsaWMgSVdTdGRLZXlPcHMgPEVsZW1lbnQsIF9L ZXksIEVsZW1lbnRPcHM+IHsKcHVibGljOgogIElXRUtDS2V5T3BzIDxfS2V5LCBFbGVtZW50T3Bz PiBrZXlPcHM7CiAgSVdFS0NPcHMgKHZvaWQqID0gMCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBL ZXk+CmNsYXNzIElFS0VIS2V5T3BzIDogcHVibGljIElTdGRFcU9wcyA8S2V5PiwKICAgICAgICAg ICAgICAgICAgICBwdWJsaWMgSVN0ZEhzaE9wcyA8S2V5PiB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg S2V5LCBjbGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJV0VLRUhLZXlPcHMgOgogIHB1YmxpYyBJV1N0 ZEVxS2V5T3BzIDxLZXksIEVsZW1lbnRPcHM+LAogIHB1YmxpYyBJV1N0ZEhzaEtleU9wcyA8S2V5 LCBFbGVtZW50T3BzPiB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5Pgpj bGFzcyBJRUtFSE9wcyA6IHB1YmxpYyBJRU9wcyA8RWxlbWVudD4sCiAgICAgICAgICAgICAgICAg cHVibGljIElTdGRLZXlPcHMgPEVsZW1lbnQsIEtleT4gewpwdWJsaWM6CiAgSUVLRUhLZXlPcHMg PEtleT4ga2V5T3BzOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBfS2V5LCBj bGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJV0VLRUhPcHMgOgogIHB1YmxpYyBJV0VPcHMgPEVsZW1l bnQsIEVsZW1lbnRPcHM+LAogIHB1YmxpYyBJV1N0ZEtleU9wcyA8RWxlbWVudCwgX0tleSwgRWxl bWVudE9wcz4gewpwdWJsaWM6CiAgSVdFS0VIS2V5T3BzIDxfS2V5LCBFbGVtZW50T3BzPiBrZXlP cHM7CiAgSVdFS0VIT3BzICh2b2lkKiA9IDApIHt9Cn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdt YSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3Rkb3BzLmlu bCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoKCiAKIAogCgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQmIGVsZW1lbnRGb3JPcHMgKEVsZW1lbnQmIGUp CnsgcmV0dXJuIGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBj b25zdCYgZWxlbWVudEZvck9wcyAoRWxlbWVudCBjb25zdCYgZSkKeyByZXR1cm4gZTsKfQoKIAog CiAKCmlubGluZSB2b2lkKgpJU3RkTWVtT3BzOjoKYWxsb2NhdGUgKHNpemVfdCBzCiAKCgoKCgoK CgogICAgICAgICApIGNvbnN0CnsKIyA3MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9pc3Rkb3BzLmlubCIKCiAgICByZXR1cm4gOjpvcGVyYXRvciBu ZXcgKHMKIAoKCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKfQoKaW5saW5lIHZv aWQKSVN0ZE1lbU9wczo6CmRlYWxsb2NhdGUgKHZvaWQqIHAKIAoKCgoKCiAgICAgICAgICAgKSBj b25zdAp7IDo6b3BlcmF0b3IgZGVsZXRlIChwCiAKCgoKCgogICAgICAgICAgICAgICAgICAgICk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUgdm9pZCoKSVdTdGRNZW1PcHMg PEVsZW1lbnRPcHM+OjoKQWxsb2NhdGUgKHNpemVfdCBzCiAKCgoKCgoKCgogICAgICAgICApIGNv bnN0CnsgcmV0dXJuIGl2RWxlbWVudE9wcy5hbGxvY2F0ZSAocwogCgoKCgoKCgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50T3BzPgpp bmxpbmUgdm9pZApJV1N0ZE1lbU9wcyA8RWxlbWVudE9wcz46OgpEZWFsbG9jYXRlICh2b2lkKiBw CiAKCgoKCgogICAgICAgICAgICkgY29uc3QKeyBpdkVsZW1lbnRPcHMuZGVhbGxvY2F0ZSAocAog CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICApOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSB2b2lkCmFzc2lnbiAoRWxlbWVudCYgZTEsIEVsZW1lbnQgY29u c3QmIGUyKQp7IGUxID0gZTI7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUg dm9pZApJU3RkQXNPcHMgPEVsZW1lbnQ+OjoKYXNzaWduIChFbGVtZW50JiBlMSwgRWxlbWVudCBj b25zdCYgZTIpIGNvbnN0CnsgOjphc3NpZ24gKGUxLCBlMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBF bGVtZW50LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUgdm9pZApJV1N0ZEFzT3BzIDxFbGVtZW50 LCBFbGVtZW50T3BzPjo6CkFzc2lnbiAoRWxlbWVudCYgZTEsIEVsZW1lbnQgY29uc3QmIGUyKSBj b25zdAp7IGl2RWxlbWVudE9wcy5hc3NpZ24gKGUxLCBlMik7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudD4KaW5saW5lIGJvb2wKZXF1YWwgKEVsZW1lbnQgY29uc3QmIGUxLCBFbGVt ZW50IGNvbnN0JiBlMikKeyByZXR1cm4gKGUxID09IGUyKTsKfQoKaW5saW5lIGJvb2wKZXF1YWwg KGNoYXIgY29uc3QqIGUxLCBjaGFyIGNvbnN0KiBlMikKeyByZXR1cm4gKHN0cmNtcCAoZTEsIGUy KSA9PSAwKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklTdGRF cU9wcyA8RWxlbWVudD46OgplcXVhbCAoRWxlbWVudCBjb25zdCYgZTEsIEVsZW1lbnQgY29uc3Qm IGUyKSBjb25zdAp7IHJldHVybiA6OmVxdWFsIChlbGVtZW50Rm9yT3BzIChlMSksIGVsZW1lbnRG b3JPcHMgKGUyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3Bz PgppbmxpbmUgYm9vbApJV1N0ZEVxT3BzIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6CkVxdWFsIChF bGVtZW50IGNvbnN0JiBlMSwgRWxlbWVudCBjb25zdCYgZTIpIGNvbnN0CnsgcmV0dXJuIGl2RWxl bWVudE9wcy5lcXVhbCAoZTEsIGUyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgRWxl bWVudE9wcz4KaW5saW5lIGJvb2wKSVdTdGRFcUtleU9wcyA8S2V5LCBFbGVtZW50T3BzPjo6CkVx dWFsIChLZXkgY29uc3QmIGsxLCBLZXkgY29uc3QmIGsyKSBjb25zdAp7IHJldHVybiBpdkVsZW1l bnRPcHMua2V5T3BzLmVxdWFsIChrMSwgazIpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQ+CmlubGluZSBsb25nCmNvbXBhcmUgKEVsZW1lbnQgY29uc3QmIGUxLCBFbGVtZW50IGNv bnN0JiBlMikKeyBpZiAgICAgIChlMSA8IGUyKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZTIgPCBl MSkgcmV0dXJuICAxOwogIGVsc2UgICAgICAgICAgICAgIHJldHVybiAgMDsKfQoKaW5saW5lIGxv bmcKY29tcGFyZSAoaW50IGUxLCBpbnQgZTIpCnsgcmV0dXJuIChlMSAtIGUyKTsKfQoKaW5saW5l IGxvbmcKY29tcGFyZSAoY2hhciBjb25zdCogZTEsIGNoYXIgY29uc3QqIGUyKQp7IHJldHVybiBz dHJjbXAgKGUxLCBlMik7Cn0KCmlubGluZSBsb25nCmNvbXBhcmUgKGNoYXIqIGNvbnN0IGUxLCBj aGFyKiBjb25zdCBlMikKewogIHJldHVybiBzdHJjbXAgKGUxLCBlMik7Cn0KCgogCgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIGxvbmcKSVN0ZENtcE9wcyA8RWxlbWVudD46Ogpjb21w YXJlIChFbGVtZW50IGNvbnN0JiBlMSwgRWxlbWVudCBjb25zdCYgZTIpIGNvbnN0CnsgcmV0dXJu IDo6Y29tcGFyZSAoZWxlbWVudEZvck9wcyAoZTEpLCBlbGVtZW50Rm9yT3BzIChlMikpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9wcz4KaW5saW5lIGxvbmcKSVdT dGRDbXBPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHM+OjoKQ29tcGFyZSAoRWxlbWVudCBjb25zdCYg ZTEsIEVsZW1lbnQgY29uc3QmIGUyKSBjb25zdAp7IHJldHVybiBpdkVsZW1lbnRPcHMuY29tcGFy ZSAoZTEsIGUyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgRWxlbWVudE9wcz4KaW5s aW5lIGxvbmcKSVdTdGRDbXBLZXlPcHMgPEtleSwgRWxlbWVudE9wcz46OgpDb21wYXJlIChLZXkg Y29uc3QmIGsxLCBLZXkgY29uc3QmIGsyKSBjb25zdAp7IHJldHVybiBpdkVsZW1lbnRPcHMua2V5 T3BzLmNvbXBhcmUgKGsxLCBrMik7Cn0KCiAKIAogCgppbmxpbmUgdW5zaWduZWQgbG9uZwpoYXNo IChpbnQgZSwgdW5zaWduZWQgbG9uZyBoKQp7IHJldHVybiBlICUgaDsKfQoKaW5saW5lIHVuc2ln bmVkIGxvbmcKaGFzaCAoY2hhciBjb25zdCogcywgdW5zaWduZWQgbG9uZyBoKQp7IHVuc2lnbmVk IGxvbmcgaGFzaFZhbHVlID0gMCwgZzsKICBmb3IgKGNoYXIqIHAgPSAoY2hhciopczsgKnAgIT0g J1wwJzsgcCsrKSB7CiAgICBoYXNoVmFsdWUgPSAoaGFzaFZhbHVlIDw8IDQpICsgKnA7CgogICAg aWYgKChnID0gaGFzaFZhbHVlICYgMHhmMDAwMDAwMEwpICE9IDApIHsKICAgICAgaGFzaFZhbHVl IF49IChnID4+IDI0KTsKCgoKCgoKICAgICAgaGFzaFZhbHVlIF49IGc7CiAgICB9CiAgfQogIHJl dHVybiBoYXNoVmFsdWUgJSBoOwp9ICAKICAgCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4K aW5saW5lIHVuc2lnbmVkIGxvbmcKSVN0ZEhzaE9wcyA8RWxlbWVudD46OgpoYXNoIChFbGVtZW50 IGNvbnN0JiBlLCB1bnNpZ25lZCBsb25nIGgpIGNvbnN0CnsgcmV0dXJuIDo6aGFzaCAoZWxlbWVu dEZvck9wcyAoZSksIGgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVu dE9wcz4KaW5saW5lIHVuc2lnbmVkIGxvbmcKSVdTdGRIc2hPcHMgPEVsZW1lbnQsIEVsZW1lbnRP cHM+OjoKSGFzaCAoRWxlbWVudCBjb25zdCYgZSwgdW5zaWduZWQgbG9uZyBoKSBjb25zdAp7IHJl dHVybiBpdkVsZW1lbnRPcHMuaGFzaCAoZSwgaCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNs YXNzIEVsZW1lbnRPcHM+CmlubGluZSB1bnNpZ25lZCBsb25nCklXU3RkSHNoS2V5T3BzIDxLZXks IEVsZW1lbnRPcHM+OjoKSGFzaCAoS2V5IGNvbnN0JiBrLCB1bnNpZ25lZCBsb25nIGgpIGNvbnN0 CnsgcmV0dXJuIGl2RWxlbWVudE9wcy5rZXlPcHMuaGFzaCAoaywgaCk7Cn0KCiAKIAogCgogCgoK dGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIF9LZXk+IF9LZXkgY29uc3QmIGtleShFbGVt ZW50IGNvbnN0JiBlbGVtZW50KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgX0tl eT4KaW5saW5lIF9LZXkgY29uc3QmCklTdGRLZXlPcHMgPEVsZW1lbnQsIF9LZXk+OjoKa2V5IChF bGVtZW50IGNvbnN0JiBlKSBjb25zdAp7IHJldHVybiA6OmtleSAoZWxlbWVudEZvck9wcyAoZSkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgX0tleSwgY2xhc3MgRWxlbWVudE9w cz4KaW5saW5lIF9LZXkgY29uc3QmCklXU3RkS2V5T3BzIDxFbGVtZW50LCBfS2V5LCBFbGVtZW50 T3BzPjo6CktleSAoRWxlbWVudCBjb25zdCYgZSkgY29uc3QKeyByZXR1cm4gaXZFbGVtZW50T3Bz LmtleSAoZSk7Cn0KCiAKCiMgNDI1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lzdGRvcHMuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3By YWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCgogCgojIDMxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnbG9iYWxzLmgi IDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9paXRlci5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhcHBsLmgiIDEK CgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWdsb2JhbHMuaCIgMQojIDM5ICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnbG9iYWxzLmgi CgojIDI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lhcHBsLmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVs LCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAK CiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3By YWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KY2xhc3MgSUFwcGxpY2F0b3IKewpwdWJsaWM6CgogIHZpcnR1YWwKICBib29s IGFwcGx5VG8gICAgICAgICAgKEVsZW1lbnQmKSA9IDA7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoK CgoKCgoKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmNsYXNzIElDb25zdGFudEFwcGxp Y2F0b3IKewpwdWJsaWM6CgogIHZpcnR1YWwKICBib29sIGFwcGx5VG8gICAgICAgICAgKEVsZW1l bnQgY29uc3QmKSA9IDA7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKCgoKCgoKCgp9OwoKY2xhc3Mg SUludGVybmFsQXBwbGljYXRvcgp7CnB1YmxpYzoKCiAgdmlydHVhbAogIGJvb2wgYXBwbHlUbyAg ICAgICAgICAodm9pZCopCiAgICAgICAgICAgeyByZXR1cm4gdHJ1ZTsKICAgICAgICAgICB9Cgpw cm90ZWN0ZWQ6Cgpwcml2YXRlOgoKCgoKCgoKCgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFnbWEg ZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAoKaW5saW5lIGJv b2wKX19hcHBsRnVuYyAodm9pZCogZWxlbWVudCwgdm9pZCogYXBwbGljYXRvcikKewoKCgogIHJl dHVybiAoKElJbnRlcm5hbEFwcGxpY2F0b3IqKWFwcGxpY2F0b3IpLT5hcHBseVRvIChlbGVtZW50 KTsKfQogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEg aW5mbyhyZXN0b3JlKQogCgogCgojIDI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpdGVyLmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNw cmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElO R19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAog CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSUl0ZXJhdG9yIDogcHVibGljIElB cHBsaWNhdG9yIDxFbGVtZW50Pgp7CgoKCgoKCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 PgpjbGFzcyBJQ29uc3RhbnRJdGVyYXRvciA6IHB1YmxpYyBJQ29uc3RhbnRBcHBsaWNhdG9yIDxF bGVtZW50Pgp7CgoKCgoKCgoKfTsKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoK CiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9u ZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzMiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFs cy5oIiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaXB0ci5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnbG9iYWxz LmgiIDEKIyAzOSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pZ2xvYmFscy5oIgoKIyAyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pcHRyLmgiIDIKCgoKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQoj cHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBp bmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJ TkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKCgoKCgoKCgogCgogCmVudW0g SUV4cGxpY2l0SW5pdAp7CiAgICBJSU5JVAp9OwogCgogCnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFz cyBJRWxlbVBvaW50ZXI7CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBJTW5nRWxlbVBvaW50ZXI7 CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBJQXV0b0VsZW1Qb2ludGVyOwp0ZW1wbGF0ZSA8Y2xh c3MgVD4gaW5saW5lIFQmIGVsZW1lbnRGb3JPcHMoSUVsZW1Qb2ludGVyIDxUPiYpOwp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW5saW5lIFQgY29uc3QmIGVsZW1lbnRGb3JPcHMoSUVsZW1Qb2ludGVyIDxU PiBjb25zdCYpIDsKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUJiBlbGVtZW50Rm9yT3BzKElN bmdFbGVtUG9pbnRlciA8VD4mKTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUIGNvbnN0JiBl bGVtZW50Rm9yT3BzKElNbmdFbGVtUG9pbnRlciA8VD4gY29uc3QmKTsKdGVtcGxhdGUgPGNsYXNz IFQ+IGlubGluZSBUJiBlbGVtZW50Rm9yT3BzKElBdXRvRWxlbVBvaW50ZXIgPFQ+Jik7CnRlbXBs YXRlIDxjbGFzcyBUPiBpbmxpbmUgVCBjb25zdCYgZWxlbWVudEZvck9wcyhJQXV0b0VsZW1Qb2lu dGVyIDxUPiBjb25zdCYpOwogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSUVs ZW1Qb2ludGVyCnsKcHVibGljOgoKICAgICAgICAgICBJRWxlbVBvaW50ZXIgICAgICgpOwoKICAg ICAgICAgICBJRWxlbVBvaW50ZXIgICAgIChFbGVtZW50KiwgSUV4cGxpY2l0SW5pdCA9IElJTklU KTsKCiAgRWxlbWVudCYgb3BlcmF0b3IqICAgICAgICAoKSBjb25zdDsKCiAgRWxlbWVudCogb3Bl cmF0b3ItPiAgICAgICAoKSBjb25zdDsKCiAgICAgICAgICAgb3BlcmF0b3IgRWxlbWVudCoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgpIGNvbnN0OwogIGZyaWVuZCBFbGVtZW50JiBlbGVt ZW50Rm9yT3BzCgogICAgICAgIDxFbGVtZW50PgoKCQkoSUVsZW1Qb2ludGVyIDxFbGVtZW50PiYp OwoKICBmcmllbmQgRWxlbWVudCBjb25zdCYgZWxlbWVudEZvck9wcwoKICAgICAgICA8RWxlbWVu dD4KCiAJCShJRWxlbVBvaW50ZXIgPEVsZW1lbnQ+IGNvbnN0JikgOwpwcm90ZWN0ZWQ6Cgpwcml2 YXRlOgoKICBFbGVtZW50KiBpdlB0cjsKCiMgMTI4ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lwdHIuaCIKCgp9OwoKIyAxNDAgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXB0ci5oIgoKCnRlbXBsYXRl IDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJTW5nUG9pbnRlciB7CnB1YmxpYzoKCiAgICAgICAgICAg SU1uZ1BvaW50ZXIgICAgICAoKTsKCiAgICAgICAgICAgSU1uZ1BvaW50ZXIgICAgICAoRWxlbWVu dCosIElFeHBsaWNpdEluaXQpOwoKICAgICAgICAgICBJTW5nUG9pbnRlciAgICAgIChJTW5nUG9p bnRlciA8RWxlbWVudD4gY29uc3QmKTsKCiAgICAgICAgICB+SU1uZ1BvaW50ZXIgICAgICAoKTsK CiAgSU1uZ1BvaW50ZXIgPEVsZW1lbnQ+JgogICAgICAgICAgIG9wZXJhdG9yPSAgICAgICAgKElN bmdQb2ludGVyIDxFbGVtZW50PiBjb25zdCYpOwoKICBFbGVtZW50JiBvcGVyYXRvciogICAgICAg ICgpIGNvbnN0OwoKICBFbGVtZW50KiBvcGVyYXRvci0+ICAgICAgICgpIGNvbnN0OwoKICAgICAg ICAgICBvcGVyYXRvciBFbGVtZW50KiAoKSBjb25zdDsKCiMgMTc2ICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lwdHIuaCIKCgpwcml2YXRlOgoKICBz dHJ1Y3QgUHRyUmMKICB7IEVsZW1lbnQgKml2UHRyOwoKICAgIHVuc2lnbmVkIGludCBpdlJjOwoK ICAgICAgICAgICAgIFB0clJjIChFbGVtZW50ICpwdHIpCiAgICAgICAgICAgICA6IGl2UHRyIChw dHIpLCBpdlJjICgxKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQoKICAgICAgICAgICAg flB0clJjICgpCiAgICAgICAgICAgICB7IGRlbGV0ZSBpdlB0cjsgfQoKICB9ICppdlB0clJjOwoK IyAyMDYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aXB0ci5oIgoKCn07CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmNsYXNzIElTdHJlYW1hYmxl UG9pbnRlciB7CnB1YmxpYzoKCiAgICAgICAgICAgSVN0cmVhbWFibGVQb2ludGVyICAgICAgKCk7 CgogICAgICAgICAgIElTdHJlYW1hYmxlUG9pbnRlciAgICAgIChFbGVtZW50KiwgSUV4cGxpY2l0 SW5pdCk7CgogICAgICAgICAgIElTdHJlYW1hYmxlUG9pbnRlciAgICAgIChJU3RyZWFtYWJsZVBv aW50ZXIgPEVsZW1lbnQ+IGNvbnN0Jik7CgogICAgICAgICAgfklTdHJlYW1hYmxlUG9pbnRlciAg ICAgICgpOwoKICBJU3RyZWFtYWJsZVBvaW50ZXIgPEVsZW1lbnQ+JgogICAgICAgICAgIG9wZXJh dG9yPSAgICAgICAgKElTdHJlYW1hYmxlUG9pbnRlciA8RWxlbWVudD4gY29uc3QmKTsKCiAgRWxl bWVudCYgb3BlcmF0b3IqICAgICAgICAoKSBjb25zdDsKCiAgRWxlbWVudCogb3BlcmF0b3ItPiAg ICAgICAoKSBjb25zdDsKCiAgICAgICAgICAgb3BlcmF0b3IgRWxlbWVudCogKCkgY29uc3Q7Cgpw cml2YXRlOgoKICBzdHJ1Y3QgUHRyUmMKICB7IEVsZW1lbnQgKml2UHRyOwoKICAgIHVuc2lnbmVk IGludCBpdlJjOwoKICAgICAgICAgICAgIFB0clJjIChFbGVtZW50ICpwdHIpCiAgICAgICAgICAg ICA6IGl2UHRyIChwdHIpLCBpdlJjICgxKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQoK ICAgICAgICAgICAgflB0clJjICgpCiAgICAgICAgICAgICB7IGRlbGV0ZSBpdlB0cjsgfQoKICB9 ICppdlB0clJjOwoKIyAyNjAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaXB0ci5oIgoKCn07CgpjbGFzcyBJRGF0YVN0cmVhbTsKCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50Pgp2b2lkIG9wZXJhdG9yPDw9KCBJU3RyZWFtYWJsZVBvaW50ZXI8RWxlbWVu dD4mLCBJRGF0YVN0cmVhbSYpOwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CnZvaWQgb3BlcmF0 b3I+Pj0oIGNvbnN0IElTdHJlYW1hYmxlUG9pbnRlcjxFbGVtZW50PiYsIElEYXRhU3RyZWFtJik7 CgoKIyAyODEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaXB0ci5oIgoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJTW5nRWxlbVBvaW50 ZXIgOiBwcm90ZWN0ZWQgSU1uZ1BvaW50ZXIgPEVsZW1lbnQ+IHsKcHVibGljOgoKICAgICAgICAg ICBJTW5nRWxlbVBvaW50ZXIgICgpIDsKCiAgICAgICAgICAgSU1uZ0VsZW1Qb2ludGVyICAoRWxl bWVudCosIElFeHBsaWNpdEluaXQpOwoKCgoKCgoKICBFbGVtZW50JiBvcGVyYXRvciogICAgICAg ICgpIGNvbnN0OwoKICBFbGVtZW50KiBvcGVyYXRvci0+ICAgICAgICgpIGNvbnN0OwoKICAgICAg ICAgICBvcGVyYXRvciBFbGVtZW50KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgY29u c3Q7CgogIGZyaWVuZCBFbGVtZW50JiBlbGVtZW50Rm9yT3BzCgogICAgICAgIDxFbGVtZW50PgoK CQkoSU1uZ0VsZW1Qb2ludGVyIDxFbGVtZW50PiYpOwoKICBmcmllbmQgRWxlbWVudCBjb25zdCYg ZWxlbWVudEZvck9wcwoKICAgICAgICA8RWxlbWVudD4KCgkJKElNbmdFbGVtUG9pbnRlciA8RWxl bWVudD4gY29uc3QmKTsKCiMgMzI2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lwdHIuaCIKCgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKIyAzNDAgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXB0ci5oIgoK Cn07CgoKIyAzNTYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaXB0ci5oIgoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJQXV0b1BvaW50 ZXIgewpwdWJsaWM6CgogICAgICAgICAgIElBdXRvUG9pbnRlciAgICAgKCk7CgogICAgICAgICAg IElBdXRvUG9pbnRlciAgICAgKEVsZW1lbnQqLCBJRXhwbGljaXRJbml0KTsKCiAgICAgICAgICAg SUF1dG9Qb2ludGVyICAgICAoSUF1dG9Qb2ludGVyIDxFbGVtZW50PiBjb25zdCYpOwoKICAgICAg ICAgIH5JQXV0b1BvaW50ZXIgICAgICgpOwoKICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJ QXV0b1BvaW50ZXIgPEVsZW1lbnQ+IGNvbnN0Jik7CgogICAgICAgICAgIG9wZXJhdG9yIEVsZW1l bnQqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSBjb25zdDsKCiAgRWxlbWVudCYgb3Bl cmF0b3IqICAgICAgICAoKSBjb25zdDsKCiAgRWxlbWVudCogb3BlcmF0b3ItPiAgICAgICAoKSBj b25zdDsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIEVsZW1lbnQqIGl2UHRyOwoKIyAzOTUgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXB0ci5oIgoK Cn07CgojIDQwNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pcHRyLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmNsYXNzIElBdXRvRWxlbVBv aW50ZXIgOiBwcm90ZWN0ZWQgSUF1dG9Qb2ludGVyIDxFbGVtZW50PiB7CnB1YmxpYzoKCiAgICAg ICAgICAgSUF1dG9FbGVtUG9pbnRlciAoKTsKCiAgICAgICAgICAgSUF1dG9FbGVtUG9pbnRlciAo RWxlbWVudCosIElFeHBsaWNpdEluaXQpOwoKICBFbGVtZW50JiBvcGVyYXRvciogICAgICAgICgp IGNvbnN0OwoKICBFbGVtZW50KiBvcGVyYXRvci0+ICAgICAgICgpIGNvbnN0OwoKICAgICAgICAg ICBvcGVyYXRvciBFbGVtZW50KgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgY29uc3Q7 CgogIGZyaWVuZCBFbGVtZW50JiBlbGVtZW50Rm9yT3BzCgogICAgICAgIDxFbGVtZW50PgoKCQko SUF1dG9FbGVtUG9pbnRlciA8RWxlbWVudD4mKTsKCiAgZnJpZW5kIEVsZW1lbnQgY29uc3QmIGVs ZW1lbnRGb3JPcHMKCiAgICAgICAgPEVsZW1lbnQ+CgoJCShJQXV0b0VsZW1Qb2ludGVyIDxFbGVt ZW50PiBjb25zdCYpOwoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiMgNDQ4ICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lwdHIuaCIKCgp9OwoKIyA0NjAg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXB0ci5o IgoKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmds aW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lwdHIuaW5sIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAog CiAKCiAKIAoKIApleHRlcm4gdm9pZCBBdG9taWNJbmNyZW1lbnQodm9pZCogY29uc3Qgdm9sYXRp bGUqIGFkZHJlc3MpOwpleHRlcm4gbG9uZyBBdG9taWNEZWNyZW1lbnQodm9pZCogY29uc3Qgdm9s YXRpbGUqIGFkZHJlc3MpOwogCgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+Cmlu bGluZQpJRWxlbVBvaW50ZXIgPEVsZW1lbnQ+OjoKSUVsZW1Qb2ludGVyICgpCjogaXZQdHIgKDAp CnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJRWxlbVBvaW50ZXIgPEVsZW1l bnQ+OjoKSUVsZW1Qb2ludGVyIChFbGVtZW50KiBwdHIsIElFeHBsaWNpdEluaXQpCjogaXZQdHIg KHB0cikKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQmCklFbGVt UG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRvciogKCkgY29uc3QKeyByZXR1cm4gKml2UHRyOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQqCklFbGVtUG9pbnRlciA8 RWxlbWVudD46OgpvcGVyYXRvci0+ICgpIGNvbnN0CnsgcmV0dXJuIGl2UHRyOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklFbGVtUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRv ciBFbGVtZW50KiAoKSBjb25zdAp7IHJldHVybiBpdlB0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQ+CmlubGluZSBFbGVtZW50JgplbGVtZW50Rm9yT3BzIChJRWxlbVBvaW50ZXIgPEVsZW1l bnQ+JiBwdHIpCnsgcmV0dXJuICpwdHIuaXZQdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 PgppbmxpbmUgRWxlbWVudCBjb25zdCYKZWxlbWVudEZvck9wcyAoSUVsZW1Qb2ludGVyIDxFbGVt ZW50PiBjb25zdCYgcHRyKQp7IHJldHVybiAqcHRyLml2UHRyOwp9CgogCiAKIAoKIAoKdGVtcGxh dGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJTW5nUG9pbnRlciA8RWxlbWVudD46OgpJTW5nUG9p bnRlciAoKQo6IGl2UHRyUmMgKDApCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGlu ZQpJTW5nUG9pbnRlciA8RWxlbWVudD46OgpJTW5nUG9pbnRlciAoRWxlbWVudCAqcHRyLCBJRXhw bGljaXRJbml0KQo6IGl2UHRyUmMgKG5ldyBQdHJSYyAocHRyKSkKewp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lCklNbmdQb2ludGVyIDxFbGVtZW50Pjo6CklNbmdQb2ludGVyIChJ TW5nUG9pbnRlciA8RWxlbWVudD4gY29uc3QmIHB0cikKewogICAgaXZQdHJSYyA9IHB0ci5pdlB0 clJjOwogICAgaWYgKGl2UHRyUmMgIT0gMCkKICAgICAgICBBdG9taWNJbmNyZW1lbnQoKHZvaWQg KiBjb25zdCB2b2xhdGlsZSAqKSYoaXZQdHJSYy0+aXZSYykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg RWxlbWVudD4KaW5saW5lCklNbmdQb2ludGVyIDxFbGVtZW50Pjo6Cn5JTW5nUG9pbnRlciAoKQp7 CiAgICBpZiAoaXZQdHJSYyAhPSAwICYmIEF0b21pY0RlY3JlbWVudCgodm9pZCAqIGNvbnN0IHZv bGF0aWxlICopJihpdlB0clJjLT5pdlJjKSkgPT0gMCkKICAgICAgICBkZWxldGUgaXZQdHJSYzsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBJTW5nUG9pbnRlciA8RWxlbWVudD4m CklNbmdQb2ludGVyIDxFbGVtZW50Pjo6Cm9wZXJhdG9yPSAoSU1uZ1BvaW50ZXIgPEVsZW1lbnQ+ IGNvbnN0JiBwdHIpCnsKICAgIGlmICh0aGlzICE9ICZwdHIpIHsKICAgICAgICBpZiAoaXZQdHJS YyAmJiBBdG9taWNEZWNyZW1lbnQoKHZvaWQgKiBjb25zdCB2b2xhdGlsZSAqKSYoaXZQdHJSYy0+ aXZSYykpID09IDApCiAgICAgICAgICAgIGRlbGV0ZSBpdlB0clJjOwogICAgICAgIGl2UHRyUmMg PSBwdHIuaXZQdHJSYzsKICAgICAgICBpZiAoaXZQdHJSYyAhPSAwKQogICAgICAgICAgICBBdG9t aWNJbmNyZW1lbnQoKHZvaWQgKiBjb25zdCB2b2xhdGlsZSAqKSYoaXZQdHJSYy0+aXZSYykpOwog ICAgfQogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5l IEVsZW1lbnQmCklNbmdQb2ludGVyIDxFbGVtZW50Pjo6Cm9wZXJhdG9yKiAoKSBjb25zdAp7IHJl dHVybiAqaXZQdHJSYy0+aXZQdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUg RWxlbWVudCoKSU1uZ1BvaW50ZXIgPEVsZW1lbnQ+OjoKb3BlcmF0b3ItPiAoKSBjb25zdAp7IHJl dHVybiBpdlB0clJjLT5pdlB0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJ TW5nUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRvciBFbGVtZW50KiAoKSBjb25zdAp7IGlmIChp dlB0clJjID09IDApIHJldHVybiAwOwogIGVsc2UgcmV0dXJuIGl2UHRyUmMtPml2UHRyOwp9Cgog CiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJTW5nRWxlbVBvaW50ZXIg PEVsZW1lbnQ+OjoKSU1uZ0VsZW1Qb2ludGVyIChFbGVtZW50ICpwdHIsIElFeHBsaWNpdEluaXQp CjogSU1uZ1BvaW50ZXIgPEVsZW1lbnQ+IChwdHIsIElJTklUKQp7Cn0KCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50PgppbmxpbmUKSU1uZ0VsZW1Qb2ludGVyIDxFbGVtZW50Pjo6CklNbmdFbGVtUG9p bnRlciAoKQp7Cn0KCiMgMjAzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2lwdHIuaW5sIgoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUg RWxlbWVudCYKSU1uZ0VsZW1Qb2ludGVyIDxFbGVtZW50Pjo6Cm9wZXJhdG9yKiAoKSBjb25zdAp7 IHJldHVybiBJTW5nUG9pbnRlciA8RWxlbWVudD46Om9wZXJhdG9yKiAoKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50KgpJTW5nRWxlbVBvaW50ZXIgPEVsZW1lbnQ+ OjoKb3BlcmF0b3ItPiAoKSBjb25zdAp7IHJldHVybiBJTW5nUG9pbnRlciA8RWxlbWVudD46Om9w ZXJhdG9yLT4gKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSU1uZ0VsZW1Q b2ludGVyIDxFbGVtZW50Pjo6Cm9wZXJhdG9yIEVsZW1lbnQqICgpIGNvbnN0CnsgcmV0dXJuIChJ TW5nUG9pbnRlciA8RWxlbWVudD4gY29uc3QmKSp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudD4KaW5saW5lIEVsZW1lbnQmCmVsZW1lbnRGb3JPcHMgKElNbmdFbGVtUG9pbnRlciA8RWxl bWVudD4mIHB0cikKeyByZXR1cm4gKihFbGVtZW50KilwdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBF bGVtZW50PgppbmxpbmUgRWxlbWVudCBjb25zdCYKZWxlbWVudEZvck9wcyAoSU1uZ0VsZW1Qb2lu dGVyIDxFbGVtZW50PiBjb25zdCYgcHRyKQp7IHJldHVybiAqKEVsZW1lbnQqKXB0cjsKfQoKIAog CiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUF1dG9Qb2ludGVyIDxFbGVt ZW50Pjo6CklBdXRvUG9pbnRlciAoRWxlbWVudCogcHRyLCBJRXhwbGljaXRJbml0KQo6IGl2UHRy IChwdHIpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQXV0b1BvaW50ZXIg PEVsZW1lbnQ+OjoKSUF1dG9Qb2ludGVyICgpCjogaXZQdHIgKDApCnsKfQoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZQpJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+OjoKSUF1dG9Qb2ludGVy IChJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+IGNvbnN0JiBwdHIpCnsgaXZQdHIgPSBwdHIuaXZQdHI7 CiAgKChJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+JilwdHIpLml2UHRyID0gMDsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+OjoKfklBdXRvUG9p bnRlciAoKQp7IGRlbGV0ZSBpdlB0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGlu ZSB2b2lkCklBdXRvUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRvcj0gKElBdXRvUG9pbnRlciA8 RWxlbWVudD4gY29uc3QmIHB0cikKeyBpZiAodGhpcyAhPSAmcHRyKSB7CiAgICBkZWxldGUgaXZQ dHI7CiAgICBpdlB0ciA9IHB0ci5pdlB0cjsKICAgICgoSUF1dG9Qb2ludGVyIDxFbGVtZW50PiYp IHB0cikuaXZQdHIgPSAwOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJ QXV0b1BvaW50ZXIgPEVsZW1lbnQ+OjoKb3BlcmF0b3IgRWxlbWVudCogKCkgY29uc3QKeyByZXR1 cm4gaXZQdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCYKSUF1 dG9Qb2ludGVyIDxFbGVtZW50Pjo6Cm9wZXJhdG9yICogKCkgY29uc3QKeyByZXR1cm4gKml2UHRy Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQqCklBdXRvUG9pbnRl ciA8RWxlbWVudD46OgpvcGVyYXRvci0+ICgpIGNvbnN0CnsgcmV0dXJuIGl2UHRyOwp9CgoKIAog CiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUF1dG9FbGVtUG9pbnRlciA8 RWxlbWVudD46OgpJQXV0b0VsZW1Qb2ludGVyICgpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1l bnQ+CmlubGluZQpJQXV0b0VsZW1Qb2ludGVyIDxFbGVtZW50Pjo6CklBdXRvRWxlbVBvaW50ZXIg KEVsZW1lbnQgKnB0ciwgSUV4cGxpY2l0SW5pdCkKOiBJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+IChw dHIsIElJTklUKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCYK SUF1dG9FbGVtUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRvciogKCkgY29uc3QKeyByZXR1cm4g SUF1dG9Qb2ludGVyIDxFbGVtZW50Pjo6b3BlcmF0b3IqICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg RWxlbWVudD4KaW5saW5lIEVsZW1lbnQqCklBdXRvRWxlbVBvaW50ZXIgPEVsZW1lbnQ+OjoKb3Bl cmF0b3ItPiAoKSBjb25zdAp7IHJldHVybiBJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+OjpvcGVyYXRv ci0+KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUF1dG9FbGVtUG9pbnRl ciA8RWxlbWVudD46OgpvcGVyYXRvciBFbGVtZW50KiAoKSBjb25zdAp7CiAgCiAgCiByZXR1cm4g KChJQXV0b1BvaW50ZXIgPEVsZW1lbnQ+Kil0aGlzKS0+b3BlcmF0b3IgRWxlbWVudCogKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCYKZWxlbWVudEZvck9wcyAo SUF1dG9FbGVtUG9pbnRlciA8RWxlbWVudD4mIHB0cikKeyByZXR1cm4gKihFbGVtZW50KilwdHI7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBjb25zdCYKZWxlbWVu dEZvck9wcyAoSUF1dG9FbGVtUG9pbnRlciA8RWxlbWVudD4gY29uc3QmIHB0cikKeyByZXR1cm4g KihFbGVtZW50KilwdHI7Cn0KCgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+Cmlu bGluZQpJU3RyZWFtYWJsZVBvaW50ZXIgPEVsZW1lbnQ+OjoKSVN0cmVhbWFibGVQb2ludGVyICgp CjogaXZQdHJSYyAoMCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklTdHJl YW1hYmxlUG9pbnRlciA8RWxlbWVudD46OgpJU3RyZWFtYWJsZVBvaW50ZXIgKEVsZW1lbnQgKnB0 ciwgSUV4cGxpY2l0SW5pdCkKOiBpdlB0clJjIChuZXcgUHRyUmMgKHB0cikpCnsKfQoKdGVtcGxh dGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJU3RyZWFtYWJsZVBvaW50ZXIgPEVsZW1lbnQ+OjoK SVN0cmVhbWFibGVQb2ludGVyIChJU3RyZWFtYWJsZVBvaW50ZXIgPEVsZW1lbnQ+IGNvbnN0JiBw dHIpCnsKICAgIGl2UHRyUmMgPSBwdHIuaXZQdHJSYzsKICAgIGlmIChpdlB0clJjICE9IDApCiAg ICAgICAgQXRvbWljSW5jcmVtZW50KCh2b2lkICogY29uc3Qgdm9sYXRpbGUgKikmKGl2UHRyUmMt Pml2UmMpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJU3RyZWFtYWJsZVBv aW50ZXIgPEVsZW1lbnQ+OjoKfklTdHJlYW1hYmxlUG9pbnRlciAoKQp7CiAgICBpZiAoaXZQdHJS YyAhPSAwICYmIEF0b21pY0RlY3JlbWVudCgodm9pZCAqIGNvbnN0IHZvbGF0aWxlICopJihpdlB0 clJjLT5pdlJjKSkgPT0gMCkKICAgICAgICBkZWxldGUgaXZQdHJSYzsKfQoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSBJU3RyZWFtYWJsZVBvaW50ZXIgPEVsZW1lbnQ+JgpJU3RyZWFt YWJsZVBvaW50ZXIgPEVsZW1lbnQ+OjoKb3BlcmF0b3I9IChJU3RyZWFtYWJsZVBvaW50ZXIgPEVs ZW1lbnQ+IGNvbnN0JiBwdHIpCnsKICAgIGlmICh0aGlzICE9ICZwdHIpIHsKICAgICAgICBpZiAo aXZQdHJSYyAmJiBBdG9taWNEZWNyZW1lbnQoKHZvaWQgKiBjb25zdCB2b2xhdGlsZSAqKSYoaXZQ dHJSYy0+aXZSYykpID09IDApCiAgICAgICAgICAgIGRlbGV0ZSBpdlB0clJjOwogICAgICAgIGl2 UHRyUmMgPSBwdHIuaXZQdHJSYzsKICAgICAgICBpZiAoaXZQdHJSYyAhPSAwKQogICAgICAgICAg ICBBdG9taWNJbmNyZW1lbnQoKHZvaWQgKiBjb25zdCB2b2xhdGlsZSAqKSYoaXZQdHJSYy0+aXZS YykpOwogICAgfQogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4K aW5saW5lIEVsZW1lbnQmCklTdHJlYW1hYmxlUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRvciog KCkgY29uc3QKeyByZXR1cm4gKml2UHRyUmMtPml2UHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudD4KaW5saW5lIEVsZW1lbnQqCklTdHJlYW1hYmxlUG9pbnRlciA8RWxlbWVudD46OgpvcGVy YXRvci0+ICgpIGNvbnN0CnsgcmV0dXJuIGl2UHRyUmMtPml2UHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lCklTdHJlYW1hYmxlUG9pbnRlciA8RWxlbWVudD46OgpvcGVyYXRv ciBFbGVtZW50KiAoKSBjb25zdAp7IGlmIChpdlB0clJjID09IDApIHJldHVybiAwOwogIGVsc2Ug cmV0dXJuIGl2UHRyUmMtPml2UHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5l CnZvaWQKb3BlcmF0b3I8PD0oIElTdHJlYW1hYmxlUG9pbnRlcjxFbGVtZW50PiYgZWxlbWVudCwg SURhdGFTdHJlYW0mIGZyb21XaGVyZSkKeyBlbGVtZW50ID0gSVN0cmVhbWFibGVQb2ludGVyPEVs ZW1lbnQ+IChuZXcgRWxlbWVudCgpLElJTklUKTsKICAqKChFbGVtZW50KillbGVtZW50KSA8PD0g ZnJvbVdoZXJlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCnZvaWQKb3BlcmF0 b3I+Pj0oY29uc3QgSVN0cmVhbWFibGVQb2ludGVyPEVsZW1lbnQ+JmVsZW1lbnQsIElEYXRhU3Ry ZWFtJiB0b1doZXJlKQp7ICooKEVsZW1lbnQqKWVsZW1lbnQpID4+PSB0b1doZXJlOwp9CgoKIAoK IyA0ODcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aXB0ci5oIiAyCgoKIyA0OTcgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaXB0ci5oIgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBv cnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzMyAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFscy5oIiAyCgojIDEgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWNvbm5lY3Qu aCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZ2xvYmFscy5oIiAxCiMgMzkg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWdsb2Jh bHMuaCIKCiMgMjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWNvbm5lY3QuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBv cnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3Jl KQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkK CgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCgoKCgoKCiNwcmFnbWEgZW51bShw b3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCgogCiNwcmFnbWEgaW5m byhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgoj IDM0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2ln bG9iYWxzLmgiIDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pY2NscGwuaHBwIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAogIAogICAgICAKICAgICAg CQojIDYzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2ljY2xwbC5ocHAiCgogICAgICAKICAKCgogCgojIDM1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lnbG9iYWxzLmgiIDIKCiAKCiAKCiMgMzIgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWJjbGxjdC5o IiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0Nf SEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21h IG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51 bSg0KQoKCgoKCgoKCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKY2xhc3MgICBJQ3Vyc29yCnsKICB0 eXBlZGVmICBJQ3Vyc29ySW1wbCBJbXBsZW1lbnRhdGlvbjsKCnB1YmxpYzoKCiAgdmlydHVhbCAg fklDdXJzb3IgICAgICAgICAgKCk7CgogIHZvaWQgICAgIGNvcHkgICAgICAgICAgICAgKElDdXJz b3IgY29uc3QmKTsKCiAgdm9pZCAgICAgaW52YWxpZGF0ZSAgICAgICAoKTsKCgoKCgoKCiAgYm9v bCBpc1ZhbGlkICAgICAgICAgICgpIGNvbnN0OwoKICBib29sIHNldFRvRmlyc3QgICAgICAgKCk7 CgogIGJvb2wgc2V0VG9OZXh0ICAgICAgICAoKTsKCiAgdm9pZCAgICAgb3BlcmF0b3I9ICAgICAg ICAoSUN1cnNvciBjb25zdCYpOwoKICBib29sIG9wZXJhdG9yPT0gICAgICAgKElDdXJzb3IgY29u c3QmKSBjb25zdDsKCiAgYm9vbCBvcGVyYXRvciE9ICAgICAgIChJQ3Vyc29yIGNvbnN0JikgY29u c3Q7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElDdXJzb3IgICAgICAgICAgKEltcGxlbWVudGF0 aW9uKik7CgogICAgICAgICAgIElDdXJzb3IgICAgICAgICAgKElDdXJzb3IgY29uc3QmKTsKCiAg c3RhdGljCiAgaW5saW5lCiAgSW1wbGVtZW50YXRpb24mCiAgICAgICAgICAgSW1wbE9mICAgICAg ICAgICAoSUN1cnNvciBjb25zdCYpOwoKcHJpdmF0ZToKCiAgSW1wbGVtZW50YXRpb24qCiAgICAg ICAgICAgaXZJbXBsOwoKICBmcmllbmQKICBjbGFzcyAgICBJQUNvbGxlY3Rpb25CYXNlOwoKCiAg ZnJpZW5kCiAgY2xhc3MgICAgSVZDb2xsZWN0aW9uSW1wbDsKCgojIDE0MyAiL2hvbWUvYWtub2xs L2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmNsbGN0LmgiCgoKfTsKCgoK CiAKCgoKY2xhc3MgICBJQUNvbGxlY3Rpb25CYXNlIDogcHJvdGVjdGVkIElNZXRhQ29sbGVjdGlv biB7CnB1YmxpYzoKCnByb3RlY3RlZDoKCiAgICAgICAgICAgSUFDb2xsZWN0aW9uQmFzZSAoKTsK CiAgICAgICAgICAgSUFDb2xsZWN0aW9uQmFzZSAoSUFDb2xsZWN0aW9uQmFzZSBjb25zdCYpOwoK ICAgICAgICAgIH5JQUNvbGxlY3Rpb25CYXNlICgpOwoKICBzdGF0aWMKICBJQ3Vyc29ySW1wbCYK ICAgICAgICAgICBDcnNySW1wbE9mICAgICAgIChJQ3Vyc29yJiBjdXJzb3IpOwoKICBzdGF0aWMK ICBJQ3Vyc29ySW1wbCBjb25zdCYKICAgICAgICAgICBDcnNySW1wbE9mICAgICAgIChJQ3Vyc29y IGNvbnN0JiBjdXJzb3IpOwoKICBzdGF0aWMKICBJQ3Vyc29yKiBJbnRlcmZhY2VGb3IgICAgIChJ Q3Vyc29ySW1wbCogY3Vyc29yKTsKCgoKCgoKCgoKCn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdt YSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmNsbGN0Lmlu bCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiAKIAoKIAoKaW5saW5lIHZv aWQKSUN1cnNvcjo6CmNvcHkgKElDdXJzb3IgY29uc3QmIGN1cnNvcikKeyBJbXBsT2YgKCp0aGlz KS5Db3B5ICgqY3Vyc29yLml2SW1wbCk7Cn0KCmlubGluZSB2b2lkCklDdXJzb3I6OgppbnZhbGlk YXRlICgpCnsgSW1wbE9mICgqdGhpcykuSW52YWxpZGF0ZSAoKTsKfQoKIyA1NiAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYmNsbGN0LmlubCIKCmlu bGluZSBib29sCklDdXJzb3I6Ogppc1ZhbGlkICgpIGNvbnN0CnsgcmV0dXJuIEltcGxPZiAoKnRo aXMpLklzVmFsaWQgKCk7Cn0KCmlubGluZSBib29sCklDdXJzb3I6OgpzZXRUb0ZpcnN0ICgpCnsg cmV0dXJuIEltcGxPZiAoKnRoaXMpLlNldFRvRmlyc3QgKCk7Cn0KCmlubGluZSBib29sCklDdXJz b3I6OgpzZXRUb05leHQgKCkKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuU2V0VG9OZXh0ICgpOwp9 CgppbmxpbmUgdm9pZApJQ3Vyc29yOjoKb3BlcmF0b3I9IChJQ3Vyc29yIGNvbnN0JiBjdXJzb3Ip CnsgSW1wbE9mICgqdGhpcykuQ29weSAoSW1wbE9mIChjdXJzb3IpKTsKfQoKaW5saW5lIGJvb2wK SUN1cnNvcjo6Cm9wZXJhdG9yPT0gKElDdXJzb3IgY29uc3QmIGN1cnNvcikgY29uc3QKeyByZXR1 cm4gSW1wbE9mICgqdGhpcykub3BlcmF0b3I9PSAoKmN1cnNvci5pdkltcGwpOwp9CgppbmxpbmUg Ym9vbApJQ3Vyc29yOjoKb3BlcmF0b3IhPSAoSUN1cnNvciBjb25zdCYgY3Vyc29yKSBjb25zdAp7 IHJldHVybiBJbXBsT2YgKCp0aGlzKS5vcGVyYXRvciE9ICgqY3Vyc29yLml2SW1wbCk7Cn0KCiAK CmlubGluZQpJQ3Vyc29yOjoKSUN1cnNvciAoSW1wbGVtZW50YXRpb24qIGltcGwpCjogaXZJbXBs IChpbXBsKQp7Cn0KCmlubGluZQpJQ3Vyc29yOjoKSUN1cnNvciAoSUN1cnNvciBjb25zdCYgY3Vy c29yKQo6IGl2SW1wbCAoSW1wbE9mIChjdXJzb3IpLkNsb25lICgpKQp7Cn0KCmlubGluZSBJQ3Vy c29yOjpJbXBsZW1lbnRhdGlvbiYKSUN1cnNvcjo6CkltcGxPZiAoSUN1cnNvciBjb25zdCYgY3Vy c29yKQp7IHJldHVybiAqY3Vyc29yLml2SW1wbDsKfQoKIAogCiAKCiAKCmlubGluZQpJQUNvbGxl Y3Rpb25CYXNlOjoKSUFDb2xsZWN0aW9uQmFzZSAoKQo6IElNZXRhQ29sbGVjdGlvbiAoKQp7Cn0K CmlubGluZQpJQUNvbGxlY3Rpb25CYXNlOjoKSUFDb2xsZWN0aW9uQmFzZSAoSUFDb2xsZWN0aW9u QmFzZSBjb25zdCYgY29sbGVjdGlvbikKOiBJTWV0YUNvbGxlY3Rpb24gKGNvbGxlY3Rpb24pCnsK fQoKaW5saW5lCklBQ29sbGVjdGlvbkJhc2U6Ogp+SUFDb2xsZWN0aW9uQmFzZSAoKQp7Cn0KCmlu bGluZSBJQ3Vyc29ySW1wbCYKSUFDb2xsZWN0aW9uQmFzZTo6CkNyc3JJbXBsT2YgKElDdXJzb3Im IGN1cnNvcikKeyByZXR1cm4gKmN1cnNvci5pdkltcGw7Cn0KCmlubGluZSBJQ3Vyc29ySW1wbCBj b25zdCYKSUFDb2xsZWN0aW9uQmFzZTo6CkNyc3JJbXBsT2YgKElDdXJzb3IgY29uc3QmIGN1cnNv cikKeyByZXR1cm4gKmN1cnNvci5pdkltcGw7Cn0KCiAKCiMgMjEyICIvaG9tZS9ha25vbGwvaW9j c3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2liY2xsY3QuaCIgMgoKIAoKIAojcHJh Z21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKIAoKIyAyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9pYWNsbGN0LmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkK IAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoK CgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudD4gY2xhc3MgSUFDb2xsZWN0aW9uOwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg RWxlbWVudD4KY2xhc3MgSUNvbGxlY3Rpb25HdWFyZCB7CnB1YmxpYzoKICBJQ29sbGVjdGlvbkd1 YXJkIChJQUNvbGxlY3Rpb248RWxlbWVudD4mLCBsb25nIHRpbWVvdXQ9LTEpOwoKICB+SUNvbGxl Y3Rpb25HdWFyZCAoKTsKCnByaXZhdGU6CiAgSUFDb2xsZWN0aW9uPEVsZW1lbnQ+JiBpdkNvbGxl Y3Rpb247CgogIElDb2xsZWN0aW9uR3VhcmQgKGNvbnN0IElDb2xsZWN0aW9uR3VhcmQ8RWxlbWVu dD4mKTsKCiAgICAgICAgIElDb2xsZWN0aW9uR3VhcmQ8RWxlbWVudD4KICAgICAgICAgICZvcGVy YXRvcj0gICAgICAoY29uc3QgSUNvbGxlY3Rpb25HdWFyZDxFbGVtZW50PiYpOwoKIyA5OCAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYWNsbGN0Lmgi Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJRWxlbWVudEN1cnNvciA6IHB1 YmxpYyBJQ3Vyc29yIHsKCiAgdHlwZWRlZiAgSUN1cnNvckltcGwgSW1wbGVtZW50YXRpb247Cgpw dWJsaWM6CgogIEVsZW1lbnQgY29uc3QmCiAgICAgICAgICAgZWxlbWVudCAgICAgICAgICAoKSBj b25zdDsKCnByb3RlY3RlZDoKCiAgICAgICAgICAgSUVsZW1lbnRDdXJzb3IgICAoSW1wbGVtZW50 YXRpb24qKTsKCgoKCgoKCgoKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSUFD b2xsZWN0aW9uIDogcHJvdGVjdGVkIElBQ29sbGVjdGlvbkJhc2UgewoKICB0eXBlZGVmICBJQUNv bGxlY3Rpb25JbXBsIEltcGxlbWVudGF0aW9uOwoKcHVibGljOgoKCiAgICAgICAgICAgSUFDb2xs ZWN0aW9uICAgICAoSU5vdGlmaWVyJik7CgoKICB2aXJ0dWFsIH5JQUNvbGxlY3Rpb24gICAgICgp OwoKCgoKICBib29sIGFkZCAgICAgICAgICAgICAgKEVsZW1lbnQgY29uc3QmKTsKCgoKCiAgYm9v bCBhZGQgICAgICAgICAgICAgIChFbGVtZW50IGNvbnN0JiwgSUN1cnNvciYpOwoKCgoKICB2b2lk ICAgICBhZGRBbGxGcm9tICAgICAgIChJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0Jik7Cgog IGJvb2wgYWxsRWxlbWVudHNEbyAgICAoYm9vbCAoKmFwcGxpY2F0b3JGdW5jdGlvbikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQmLCB2b2lkKiksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCogYWRkaXRpb25hbEFyZ3VtZW50ID0gMCk7CgogIGJvb2wgYWxs RWxlbWVudHNEbyAgICAoYm9vbCAoKmFwcGxpY2F0b3JGdW5jdGlvbikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKEVsZW1lbnQgY29uc3QmLCB2b2lkKiksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCogYWRkaXRpb25hbEFyZ3VtZW50ID0gMCkgY29uc3Q7CgogIGJvb2wg YWxsRWxlbWVudHNEbyAgICAoSUFwcGxpY2F0b3IgPEVsZW1lbnQ+Jik7CgogIGJvb2wgYWxsRWxl bWVudHNEbyAgICAoSUNvbnN0YW50QXBwbGljYXRvciA8RWxlbWVudD4mKSBjb25zdDsKCiAgRWxl bWVudCBjb25zdCYKICAgICAgICAgICBhbnkgICAgICAgICAgICAgICgpIGNvbnN0OwoKCgoKICB2 b2lkICAgICBjb3B5ICAgICAgICAgICAgIChJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0Jik7 CgoKICBJTm90aWZpZXImCiAgICAgICAgICAgZGlzYWJsZU5vdGlmaWNhdGlvbgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCk7CgoKCiAgRWxlbWVudCYgZWxlbWVudEF0ICAgICAgICAoSUN1 cnNvciBjb25zdCYpOwoKICBFbGVtZW50IGNvbnN0JgogICAgICAgICAgIGVsZW1lbnRBdCAgICAg ICAgKElDdXJzb3IgY29uc3QmKSBjb25zdDsKCgogIElOb3RpZmllciYKICAgICAgICAgICBlbmFi bGVOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChib29sID0gdHJ1ZSk7 CgoKICBib29sIGlzQm91bmRlZCAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgaXNDb25zaXN0ZW50 ICAgICAoKSBjb25zdDsKCiAgYm9vbCBpc0VtcHR5ICAgICAgICAgICgpIGNvbnN0OwoKCiAgYm9v bCBpc0VuYWJsZWRGb3JOb3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgp IGNvbnN0OwoKCiAgYm9vbCBpc0Z1bGwgICAgICAgICAgICgpIGNvbnN0OwoKICBJTnVtYmVyICBt YXhOdW1iZXJPZkVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSBjb25zdDsK CgoKCiAgSUN1cnNvciogbmV3Q3Vyc29yICAgICAgICAoKSBjb25zdDsKCgoKCgoKICBJTm90aWZp ZXImCiAgICAgICAgICAgbm90aWZpZXIgICAgICAgICAoKTsKCiAgSU5vdGlmaWVyIGNvbnN0Jgog ICAgICAgICAgIG5vdGlmaWVyICAgICAgICAgKCkgY29uc3Q7CgogIElOb3RpZmllciYKICAgICAg ICAgICBub3RpZnlPYnNlcnZlcnMgIChJTm90aWZpY2F0aW9uRXZlbnQgY29uc3QmKTsKCgogIElO dW1iZXIgIG51bWJlck9mRWxlbWVudHMgKCkgY29uc3Q7CgoKCgogIElOdW1iZXIgIHJlbW92ZUFs bCAgICAgICAgKCk7CgoKCgogIElOdW1iZXIgIHJlbW92ZUFsbCAgICAgICAgKGJvb2wgKCpwcmVk aWNhdGVGdW5jdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQgY29u c3QmLCB2b2lkKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYWRkaXRpb25h bEFyZ3VtZW50ID0gMCk7CgoKCgogIHZvaWQgICAgIHJlbW92ZUF0ICAgICAgICAgKElDdXJzb3Im KTsKCgoKCiAgdm9pZCAgICAgcmVwbGFjZUF0ICAgICAgICAoSUN1cnNvciBjb25zdCYsIEVsZW1l bnQgY29uc3QmKTsKCiAgYm9vbCBzZXRUb0ZpcnN0ICAgICAgIChJQ3Vyc29yJikgY29uc3Q7Cgog IGJvb2wgc2V0VG9OZXh0ICAgICAgICAoSUN1cnNvciYpIGNvbnN0OwoKCiAgICAgICAgICAgb3Bl cmF0b3IgSU5vdGlmaWVyJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgY29uc3Q7CgoK ICAgCiAgRWxlbWVudCBjb25zdCYKICAgICAgICAgICBhbnlFbGVtZW50ICAgICAgICgpIGNvbnN0 OwoKcHJvdGVjdGVkOgoKCiAgICAgICAgZnJpZW5kIGNsYXNzIElDb2xsZWN0aW9uR3VhcmQ8RWxl bWVudD47CgoKICAgICAgICAgICBJQUNvbGxlY3Rpb24gICAgICgpOwoKICAgICAgICAgICBJQUNv bGxlY3Rpb24gICAgIChJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0Jik7CgogIHN0YXRpYwog IEltcGxlbWVudGF0aW9uJgogICAgICAgICAgIEltcGxPZiAgICAgICAgICAgKElBQ29sbGVjdGlv biA8RWxlbWVudD4gY29uc3QmKTsKCnByaXZhdGU6CgoKcHVibGljOgoKCgogIHZvaWQgICBvcGVy YXRvcjw8PSAgICAgIChJRGF0YVN0cmVhbSYpOwoKCgoKICB2b2lkICAgb3BlcmF0b3I+Pj0gICAg ICAoSURhdGFTdHJlYW0mKTsKCiAgdm9pZCAgIGFkb3B0U3RyZWFtZXIgICAgKElBQ29sbGVjdGlv blN0cmVhbWVyKik7CgoKIyAzMzMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWFjbGxjdC5oIgoKCn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdtYSBl bnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYWNsbGN0LmlubCIg MQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoKCgogCiAKIAoKIAoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQ29sbGVjdGlvbkd1YXJkPEVsZW1lbnQ+OjoKSUNvbGxl Y3Rpb25HdWFyZCAoSUFDb2xsZWN0aW9uPEVsZW1lbnQ+JiBjLCBsb25nIHRpbWVvdXQpCjogaXZD b2xsZWN0aW9uKGMpCnsgYy5JbXBsT2YoYykuU2VpemUodGltZW91dCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50PgppbmxpbmUKSUNvbGxlY3Rpb25HdWFyZDxFbGVtZW50Pjo6Cn5JQ29sbGVj dGlvbkd1YXJkICgpCnsgaXZDb2xsZWN0aW9uLkltcGxPZihpdkNvbGxlY3Rpb24pLlJlbGVhc2Uo KTsKfQoKCgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50 IGNvbnN0JgpJRWxlbWVudEN1cnNvciA8RWxlbWVudD46OgplbGVtZW50ICgpIGNvbnN0CnsgcmV0 dXJuICooRWxlbWVudCBjb25zdCopIEltcGxPZiAoKnRoaXMpLkVsZW1lbnQgKCk7Cn0KCiAKCnRl bXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUVsZW1lbnRDdXJzb3IgPEVsZW1lbnQ+OjoK SUVsZW1lbnRDdXJzb3IgKEltcGxlbWVudGF0aW9uKiBpbXBsKQo6IElDdXJzb3IgKGltcGwpCnsK fQoKIAogCiAKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklBQ29sbGVjdGlv biA8RWxlbWVudD46OgpJQUNvbGxlY3Rpb24gKElOb3RpZmllciYgbm90aWZpZXIpCnsKICAgIElB Q29sbGVjdGlvbkJhc2U6OlNldEltcGwgKChJbXBsZW1lbnRhdGlvbiopJm5vdGlmaWVyKTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6 Cn5JQUNvbGxlY3Rpb24gKCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIGJv b2wKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CmFkZCAoRWxlbWVudCBjb25zdCYgZWxlbWVudCkK eyByZXR1cm4gSW1wbE9mICgqdGhpcykuQWRkICgmZWxlbWVudCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50PgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYWRkIChFbGVt ZW50IGNvbnN0JiBlbGVtZW50LCBJQ3Vyc29yJiBjdXJzb3IpCnsgcmV0dXJuIEltcGxPZiAoKnRo aXMpLkFkZCAoJmVsZW1lbnQsIENyc3JJbXBsT2YgKGN1cnNvcikpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CmFkZEFsbEZy b20gKElBQ29sbGVjdGlvbiA8RWxlbWVudD4gY29uc3QmIGNvbGxlY3Rpb24pCnsgSW1wbE9mICgq dGhpcykuQWRkQWxsRnJvbSAoSW1wbE9mIChjb2xsZWN0aW9uKSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50PgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYWxsRWxlbWVu dHNEbyAoYm9vbCAoKmFwcGxGdW5jKSAoRWxlbWVudCYsIHZvaWQqKSwgdm9pZCogYWRkQXJnKQp7 IHJldHVybiBJbXBsT2YgKCp0aGlzKS5BbGxFbGVtZW50c0RvICgoSUFwcGxGdW5jKWFwcGxGdW5j LCBhZGRBcmcpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIGJvb2wKSUFDb2xs ZWN0aW9uIDxFbGVtZW50Pjo6CmFsbEVsZW1lbnRzRG8gKGJvb2wgKCphcHBsRnVuYykgKEVsZW1l bnQgY29uc3QmLCB2b2lkKiksCiAgICAgICAgICAgICAgIHZvaWQqIGFkZEFyZykgY29uc3QKeyBy ZXR1cm4gSW1wbE9mICgqdGhpcykuQWxsRWxlbWVudHNEbyAoKElBcHBsRnVuYylhcHBsRnVuYywg YWRkQXJnKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBQ29sbGVj dGlvbiA8RWxlbWVudD46OgphbGxFbGVtZW50c0RvIChJQXBwbGljYXRvciA8RWxlbWVudD4mIGFw cGxpY2F0b3IpCnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpLkFsbEVsZW1lbnRzRG8gKF9fYXBwbEZ1 bmMsICZhcHBsaWNhdG9yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29s CklBQ29sbGVjdGlvbiA8RWxlbWVudD46OgphbGxFbGVtZW50c0RvIChJQ29uc3RhbnRBcHBsaWNh dG9yIDxFbGVtZW50PiYgYXBwbGljYXRvcikgY29uc3QKeyByZXR1cm4gSW1wbE9mICgqdGhpcyku QWxsRWxlbWVudHNEbyAoX19hcHBsRnVuYywgJmFwcGxpY2F0b3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQgY29uc3QmCklBQ29sbGVjdGlvbiA8RWxlbWVudD46 OgphbnkgKCkgY29uc3QKeyByZXR1cm4gKihFbGVtZW50IGNvbnN0KikgSW1wbE9mICgqdGhpcyku QW55ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQgY29uc3Qm CklBQ29sbGVjdGlvbiA8RWxlbWVudD46OgphbnlFbGVtZW50ICgpIGNvbnN0CnsgcmV0dXJuICoo RWxlbWVudCBjb25zdCopIEltcGxPZiAoKnRoaXMpLkFueSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQ+CmlubGluZSB2b2lkCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpjb3B5IChJQUNv bGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0JiBjb2xsZWN0aW9uKQp7IEltcGxPZiAoKnRoaXMpLkNv cHkgKEltcGxPZiAoY29sbGVjdGlvbikpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+Cmlu bGluZSBJTm90aWZpZXImCklBQ29sbGVjdGlvbiA8RWxlbWVudD46OgpkaXNhYmxlTm90aWZpY2F0 aW9uICgpCnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpLkRpc2FibGVOb3RpZmljYXRpb24gKCk7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQmCklBQ29sbGVjdGlvbiA8 RWxlbWVudD46OgplbGVtZW50QXQgKElDdXJzb3IgY29uc3QmIGN1cnNvcikKeyByZXR1cm4gKihF bGVtZW50KikgSW1wbE9mICgqdGhpcykuRWxlbWVudEF0IChDcnNySW1wbE9mIChjdXJzb3IpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50IGNvbnN0JgpJQUNvbGxl Y3Rpb24gPEVsZW1lbnQ+OjoKZWxlbWVudEF0IChJQ3Vyc29yIGNvbnN0JiBjdXJzb3IpIGNvbnN0 CnsgcmV0dXJuICooRWxlbWVudCBjb25zdCopIEltcGxPZiAoKnRoaXMpLgogICAgRWxlbWVudEF0 IChDcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50Pgppbmxp bmUgSU5vdGlmaWVyJgpJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKZW5hYmxlTm90aWZpY2F0aW9u IChib29sIGVuYWJsZSkKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuRW5hYmxlTm90aWZpY2F0aW9u IChlbmFibGUpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBQ29s bGVjdGlvbiA8RWxlbWVudD46Ogppc0JvdW5kZWQgKCkgY29uc3QKeyByZXR1cm4gSW1wbE9mICgq dGhpcykuSXNCb3VuZGVkICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIGJv b2wKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CmlzQ29uc2lzdGVudCAoKSBjb25zdAp7IHJldHVy biBJbXBsT2YgKCp0aGlzKS5Jc0NvbnNpc3RlbnQgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVt ZW50PgppbmxpbmUgYm9vbApJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKaXNFbXB0eSAoKSBjb25z dAp7IHJldHVybiBJbXBsT2YgKCp0aGlzKS5Jc0VtcHR5ICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQ+CmlubGluZSBib29sCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogppc0VuYWJsZWRG b3JOb3RpZmljYXRpb24gKCkgY29uc3QKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuSXNFbmFibGVk Rm9yTm90aWZpY2F0aW9uICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBi b29sCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogppc0Z1bGwgKCkgY29uc3QKeyByZXR1cm4gSW1w bE9mICgqdGhpcykuSXNGdWxsICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5l IElOdW1iZXIKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6Cm1heE51bWJlck9mRWxlbWVudHMgKCkg Y29uc3QKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuTWF4TnVtYmVyT2ZFbGVtZW50cyAoKTsKfQoK dGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBJQ3Vyc29yKgpJQUNvbGxlY3Rpb24gPEVs ZW1lbnQ+OjoKbmV3Q3Vyc29yICgpIGNvbnN0CnsgcmV0dXJuIEludGVyZmFjZUZvciAoSW1wbE9m ICgqdGhpcykuQ3JlYXRlQ3Vyc29yICgpKTsKfQoKIyAyNjAgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFjbGxjdC5pbmwiCgoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSBJTm90aWZpZXImCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpu b3RpZmllciAoKQp7IHJldHVybiBJbXBsT2YgKCp0aGlzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQ+CmlubGluZSBJTm90aWZpZXIgY29uc3QmCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpu b3RpZmllciAoKSBjb25zdAp7IHJldHVybiBJbXBsT2YgKCp0aGlzKTsKfQoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSBJTm90aWZpZXImCklBQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpu b3RpZnlPYnNlcnZlcnMgKElOb3RpZmljYXRpb25FdmVudCBjb25zdCYgZXZlbnQpCnsgcmV0dXJu IEltcGxPZiAoKnRoaXMpLm5vdGlmeU9ic2VydmVycyAoZXZlbnQpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSBJTnVtYmVyCklBQ29sbGVjdGlvbiA8RWxlbWVudD46OgpudW1i ZXJPZkVsZW1lbnRzICgpIGNvbnN0CnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpLk51bWJlck9mRWxl bWVudHMgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgSU51bWJlcgpJQUNv bGxlY3Rpb24gPEVsZW1lbnQ+OjoKcmVtb3ZlQWxsICgpCnsgcmV0dXJuIEltcGxPZiAoKnRoaXMp LlJlbW92ZUFsbCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBJTnVtYmVy CklBQ29sbGVjdGlvbiA8RWxlbWVudD46OgpyZW1vdmVBbGwgKGJvb2wgKCpwcmVkRnVuYykgKEVs ZW1lbnQgY29uc3QmLCB2b2lkKiksIHZvaWQqIGFkZEFyZykKeyByZXR1cm4gSW1wbE9mICgqdGhp cykuUmVtb3ZlQWxsICgoSVByZWRGdW5jKXByZWRGdW5jLCBhZGRBcmcpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CnJlbW92 ZUF0IChJQ3Vyc29yJiBjdXJzb3IpCnsgSW1wbE9mICgqdGhpcykuUmVtb3ZlQXQgKENyc3JJbXBs T2YgKGN1cnNvcikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFD b2xsZWN0aW9uIDxFbGVtZW50Pjo6CnJlcGxhY2VBdCAoSUN1cnNvciBjb25zdCYgY3Vyc29yLCBF bGVtZW50IGNvbnN0JiBlbGVtZW50KQp7IEltcGxPZiAoKnRoaXMpLlJlcGxhY2VBdCAoQ3Jzcklt cGxPZiAoY3Vyc29yKSwgJmVsZW1lbnQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5s aW5lIGJvb2wKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CnNldFRvRmlyc3QgKElDdXJzb3ImIGN1 cnNvcikgY29uc3QKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuU2V0VG9GaXJzdCAoQ3JzckltcGxP ZiAoY3Vyc29yKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgYm9vbApJQUNv bGxlY3Rpb24gPEVsZW1lbnQ+OjoKc2V0VG9OZXh0IChJQ3Vyc29yJiBjdXJzb3IpIGNvbnN0Cnsg cmV0dXJuIEltcGxPZiAoKnRoaXMpLlNldFRvTmV4dCAoQ3JzckltcGxPZiAoY3Vyc29yKSk7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklBQ29sbGVjdGlvbiA8RWxlbWVudD46 OgpvcGVyYXRvciBJTm90aWZpZXImICgpIGNvbnN0CnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpOwp9 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCnZvaWQKSUFDb2xsZWN0aW9uIDxF bGVtZW50Pjo6Cm9wZXJhdG9yPDw9IChJRGF0YVN0cmVhbSYgc3RyZWFtKQp7IEltcGxPZiAoKnRo aXMpLlN0cmVhbUluIChzdHJlYW0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5l CnZvaWQKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6Cm9wZXJhdG9yPj49IChJRGF0YVN0cmVhbSYg c3RyZWFtKQp7IEltcGxPZiAoKnRoaXMpLlN0cmVhbU91dCAoc3RyZWFtKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSB2b2lkCklBQ29sbGVjdGlvbjxFbGVtZW50Pjo6CmFkb3B0 U3RyZWFtZXIgKElBQ29sbGVjdGlvblN0cmVhbWVyICpzdHJlYW1lcikKeyBJbXBsT2YgKCp0aGlz KS5BZG9wdFN0cmVhbWVyKHN0cmVhbWVyKTsKfQoKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 PgppbmxpbmUKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CklBQ29sbGVjdGlvbiAoKQo6IElBQ29s bGVjdGlvbkJhc2UgKCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklBQ29s bGVjdGlvbiA8RWxlbWVudD46OgpJQUNvbGxlY3Rpb24gKElBQ29sbGVjdGlvbiA8RWxlbWVudD4g Y29uc3QmIGNvbGxlY3Rpb24pCjogSUFDb2xsZWN0aW9uQmFzZSAoY29sbGVjdGlvbikKewp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHR5cGVuYW1lICBJQUNvbGxlY3Rpb24gPEVs ZW1lbnQ+OjpJbXBsZW1lbnRhdGlvbiYKSUFDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CkltcGxPZiAo SUFDb2xsZWN0aW9uIDxFbGVtZW50PiBjb25zdCYgY29sbGVjdGlvbikKeyByZXR1cm4gKihJbXBs ZW1lbnRhdGlvbiopY29sbGVjdGlvbi5pdkltcGw7Cn0KCiAKCiMgMzYyICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhY2xsY3QuaCIgMgoKIAoKIAoj cHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9y ZSkKIAoKIAoKIyAyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pYW9yZGVyLmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVw b3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9y ZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUp CgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgp0ZW1w bGF0ZSA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSU9yZGVyZWRDdXJzb3IgOiBwdWJsaWMgSUVsZW1l bnRDdXJzb3IgPEVsZW1lbnQ+CnsKICB0eXBlZGVmICBJQ3Vyc29ySW1wbCBJbXBsZW1lbnRhdGlv bjsKCnB1YmxpYzoKCiAgYm9vbCBzZXRUb0xhc3QgICAgICAgICgpOwoKICBib29sIHNldFRvUHJl dmlvdXMgICAgKCk7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElPcmRlcmVkQ3Vyc29yICAgKElt cGxlbWVudGF0aW9uKik7CgojIDkzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lhb3JkZXIuaCIKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+ CmNsYXNzIElBT3JkZXJlZENvbGxlY3Rpb24gOiBwdWJsaWMgdmlydHVhbCBJQUNvbGxlY3Rpb24g PEVsZW1lbnQ+IHsKCiAgdHlwZWRlZiAgSUFDb2xsZWN0aW9uSW1wbCBJbXBsZW1lbnRhdGlvbjsK CnB1YmxpYzoKCgogICAgICAgICAgIElBT3JkZXJlZENvbGxlY3Rpb24KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChJTm90aWZpZXImKTsKCgogICAgICAgICAgfklBT3JkZXJlZENvbGxlY3Rp b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICBFbGVtZW50IGNvbnN0JgogICAg ICAgICAgIGVsZW1lbnRBdFBvc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVBv c2l0aW9uKSBjb25zdDsKCiAgRWxlbWVudCBjb25zdCYKICAgICAgICAgICBmaXJzdCAgICAgICAg ICAgICgpIGNvbnN0OwoKICBib29sIGlzRmlyc3RBdCAgICAgICAgKElDdXJzb3IgY29uc3QmKSBj b25zdDsKCiAgYm9vbCBpc0xhc3RBdCAgICAgICAgIChJQ3Vyc29yIGNvbnN0JikgY29uc3Q7Cgog IEVsZW1lbnQgY29uc3QmCiAgICAgICAgICAgbGFzdCAgICAgICAgICAgICAoKSBjb25zdDsKCiAg SVBvc2l0aW9uCiAgICAgICAgICAgcG9zaXRpb25BdCAgICAgICAoSUN1cnNvciBjb25zdCYpIGNv bnN0OwoKCgoKICB2b2lkICAgICByZW1vdmVBdFBvc2l0aW9uIChJUG9zaXRpb24pOwoKCgoKICB2 b2lkICAgICByZW1vdmVGaXJzdCAgICAgICgpOwoKCgoKICB2b2lkICAgICByZW1vdmVMYXN0ICAg ICAgICgpOwoKICBib29sIHNldFRvTGFzdCAgICAgICAgKElDdXJzb3ImKSBjb25zdDsKCiAgdm9p ZCAgICAgc2V0VG9Qb3NpdGlvbiAgICAoSVBvc2l0aW9uLCBJQ3Vyc29yJikgY29uc3Q7CgogIGJv b2wgc2V0VG9QcmV2aW91cyAgICAoSUN1cnNvciYpIGNvbnN0OwoKICAgCiAgRWxlbWVudCBjb25z dCYKICAgICAgICAgICBmaXJzdEVsZW1lbnQgICAgICgpIGNvbnN0OwoKICBib29sIGlzRmlyc3Qg ICAgICAgICAgKElDdXJzb3IgY29uc3QmKSBjb25zdDsKCiAgYm9vbCBpc0xhc3QgICAgICAgICAg IChJQ3Vyc29yIGNvbnN0JikgY29uc3Q7CgogIEVsZW1lbnQgY29uc3QmCiAgICAgICAgICAgbGFz dEVsZW1lbnQgICAgICAoKSBjb25zdDsKCiAgSVBvc2l0aW9uCiAgICAgICAgICAgcG9zaXRpb24g ICAgICAgICAoSUN1cnNvciBjb25zdCYpIGNvbnN0OwoKcHJvdGVjdGVkOgoKICAgICAgICAgICBJ QU9yZGVyZWRDb2xsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgICAg ICAgICAgSUFPcmRlcmVkQ29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElB T3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0Jik7Cgpwcml2YXRlOgoKICBzdGF0aWMK ICBJbXBsZW1lbnRhdGlvbiYKICAgICAgICAgICBJbXBsT2YgICAgICAgICAgIChJQU9yZGVyZWRD b2xsZWN0aW9uIDxFbGVtZW50PiBjb25zdCYpOwoKIyAxOTYgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFvcmRlci5oIgoKCn07CgogCgogCgoKCgoK CgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgog CgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pYW9yZGVyLmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiAKIAoK CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIGJvb2wKSU9yZGVyZWRDdXJzb3Ig PEVsZW1lbnQ+OjoKc2V0VG9MYXN0ICgpCnsgcmV0dXJuIHRoaXMtPkltcGxPZiAoKnRoaXMpLlNl dFRvTGFzdCAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgYm9vbApJT3Jk ZXJlZEN1cnNvciA8RWxlbWVudD46OgpzZXRUb1ByZXZpb3VzICgpCnsgcmV0dXJuIHRoaXMtPklt cGxPZiAoKnRoaXMpLlNldFRvUHJldmlvdXMgKCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVt ZW50PgppbmxpbmUKSU9yZGVyZWRDdXJzb3IgPEVsZW1lbnQ+OjoKSU9yZGVyZWRDdXJzb3IgKElt cGxlbWVudGF0aW9uKiBpbXBsKQo6IElFbGVtZW50Q3Vyc29yIDxFbGVtZW50PiAoaW1wbCkKewp9 CgogCiAKIAoKIAoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUFPcmRlcmVkQ29s bGVjdGlvbiA8RWxlbWVudD46OgpJQU9yZGVyZWRDb2xsZWN0aW9uIChJTm90aWZpZXImIG5vdGlm aWVyKQp7IHRoaXMtPlNldEltcGwgKChJbXBsZW1lbnRhdGlvbiopJm5vdGlmaWVyKTsKfQoKCnRl bXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVu dD46Ogp+SUFPcmRlcmVkQ29sbGVjdGlvbiAoKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 PgppbmxpbmUgRWxlbWVudCBjb25zdCYKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpl bGVtZW50QXRQb3NpdGlvbiAoSVBvc2l0aW9uIHBvc2l0aW9uKSBjb25zdAp7IHJldHVybiAqKEVs ZW1lbnQgY29uc3QqKSBJbXBsT2YgKCp0aGlzKS4KICAgIEVsZW1lbnRBdFBvc2l0aW9uIChwb3Np dGlvbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBjb25zdCYK SUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46OgpmaXJzdEVsZW1lbnQgKCkgY29uc3QKeyBy ZXR1cm4gKihFbGVtZW50IGNvbnN0KikgSW1wbE9mICgqdGhpcykuRmlyc3QgKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBjb25zdCYKSUFPcmRlcmVkQ29sbGVj dGlvbiA8RWxlbWVudD46OgpmaXJzdCAoKSBjb25zdAp7IHJldHVybiAqKEVsZW1lbnQgY29uc3Qq KSBJbXBsT2YgKCp0aGlzKS5GaXJzdCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+Cmlu bGluZSBib29sCklBT3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKaXNGaXJzdCAoSUN1cnNv ciBjb25zdCYgY3Vyc29yKSBjb25zdAp7IHJldHVybiB0aGlzLT5JbXBsT2YgKCp0aGlzKS5Jc0Zp cnN0QXQgKHRoaXMtPkNyc3JJbXBsT2YgKGN1cnNvcikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudD4KaW5saW5lIGJvb2wKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46Ogppc0ZpcnN0 QXQgKElDdXJzb3IgY29uc3QmIGN1cnNvcikgY29uc3QKeyByZXR1cm4gdGhpcy0+SW1wbE9mICgq dGhpcykuSXNGaXJzdEF0ICh0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBT3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+ OjoKaXNMYXN0IChJQ3Vyc29yIGNvbnN0JiBjdXJzb3IpIGNvbnN0CnsgcmV0dXJuIHRoaXMtPklt cGxPZiAoKnRoaXMpLklzTGFzdEF0ICh0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBT3JkZXJlZENvbGxlY3Rpb24gPEVs ZW1lbnQ+OjoKaXNMYXN0QXQgKElDdXJzb3IgY29uc3QmIGN1cnNvcikgY29uc3QKeyByZXR1cm4g dGhpcy0+SW1wbE9mICgqdGhpcykuSXNMYXN0QXQgKHRoaXMtPkNyc3JJbXBsT2YgKGN1cnNvcikp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQgY29uc3QmCklBT3Jk ZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKbGFzdEVsZW1lbnQgKCkgY29uc3QKeyByZXR1cm4g KihFbGVtZW50IGNvbnN0KikgSW1wbE9mICgqdGhpcykuTGFzdCAoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50IGNvbnN0JgpJQU9yZGVyZWRDb2xsZWN0aW9uIDxF bGVtZW50Pjo6Cmxhc3QgKCkgY29uc3QKeyByZXR1cm4gKihFbGVtZW50IGNvbnN0KikgSW1wbE9m ICgqdGhpcykuTGFzdCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBJUG9z aXRpb24KSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpwb3NpdGlvbiAoSUN1cnNvciBj b25zdCYgY3Vyc29yKSBjb25zdAp7IHJldHVybiB0aGlzLT5JbXBsT2YgKCp0aGlzKS5Qb3NpdGlv bkF0ICh0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1l bnQ+CmlubGluZSBJUG9zaXRpb24KSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpwb3Np dGlvbkF0IChJQ3Vyc29yIGNvbnN0JiBjdXJzb3IpIGNvbnN0CnsgcmV0dXJuIHRoaXMtPkltcGxP ZiAoKnRoaXMpLlBvc2l0aW9uQXQgKHRoaXMtPkNyc3JJbXBsT2YgKGN1cnNvcikpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxl bWVudD46OgpyZW1vdmVBdFBvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRpb24pCnsgdGhpcy0+SW1w bE9mICgqdGhpcykuUmVtb3ZlQXRQb3NpdGlvbiAocG9zaXRpb24pOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD46Ogpy ZW1vdmVGaXJzdCAoKQp7IHRoaXMtPkltcGxPZiAoKnRoaXMpLlJlbW92ZUZpcnN0ICgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFPcmRlcmVkQ29sbGVjdGlvbiA8 RWxlbWVudD46OgpyZW1vdmVMYXN0ICgpCnsgdGhpcy0+SW1wbE9mICgqdGhpcykuUmVtb3ZlTGFz dCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBT3JkZXJlZENv bGxlY3Rpb24gPEVsZW1lbnQ+OjoKc2V0VG9MYXN0IChJQ3Vyc29yJiBjdXJzb3IpIGNvbnN0Cnsg cmV0dXJuIHRoaXMtPkltcGxPZiAoKnRoaXMpLlNldFRvTGFzdCAodGhpcy0+Q3JzckltcGxPZiAo Y3Vyc29yKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgdm9pZApJQU9yZGVy ZWRDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CnNldFRvUG9zaXRpb24gKElQb3NpdGlvbiBwb3NpdGlv biwgSUN1cnNvciYgY3Vyc29yKSBjb25zdAp7IHRoaXMtPkltcGxPZiAoKnRoaXMpLlNldFRvUG9z aXRpb24gKHBvc2l0aW9uLCB0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSBib29sCklBT3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+ OjoKc2V0VG9QcmV2aW91cyAoSUN1cnNvciYgY3Vyc29yKSBjb25zdAp7IHJldHVybiB0aGlzLT5J bXBsT2YgKCp0aGlzKS5TZXRUb1ByZXZpb3VzICh0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsK fQoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQU9yZGVyZWRDb2xsZWN0aW9u IDxFbGVtZW50Pjo6CklBT3JkZXJlZENvbGxlY3Rpb24gKCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg RWxlbWVudD4KaW5saW5lCklBT3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKSUFPcmRlcmVk Q29sbGVjdGlvbiAoSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxlbWVudD4gY29uc3QmKQp7Cn0KCiAK CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgdHlwZW5hbWUgIElBT3JkZXJlZENvbGxl Y3Rpb24gPEVsZW1lbnQ+OjpJbXBsZW1lbnRhdGlvbiYKSUFPcmRlcmVkQ29sbGVjdGlvbiA8RWxl bWVudD46OgpJbXBsT2YgKElBT3JkZXJlZENvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0JiBjb2xs ZWN0aW9uKQp7IHJldHVybiAqKEltcGxlbWVudGF0aW9uKiljb2xsZWN0aW9uLml2SW1wbDsKfQoK IAoKIyAyMjUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWFvcmRlci5oIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChw b3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgojIDI2ICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhc3FudGwuaCIgMgoKIAoKIAojcHJhZ21h IGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVW RUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19J T0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCgoKCgoK CgoKIAoKIAogCgogCiAKCiAKCnRlbXBsYXRlICA8Y2xhc3MgRWxlbWVudD4KY2xhc3MgSUFTZXF1 ZW50aWFsQ29sbGVjdGlvbiA6IHB1YmxpYyBJQU9yZGVyZWRDb2xsZWN0aW9uIDxFbGVtZW50Pgp7 CiAgdHlwZWRlZiBJQUNvbGxlY3Rpb25JbXBsIEltcGxlbWVudGF0aW9uOwoKcHVibGljOgoKCiAg ICAgICAgICAgSUFTZXF1ZW50aWFsQ29sbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKElOb3RpZmllciYpOwoKCiAgICAgICAgICB+SUFTZXF1ZW50aWFsQ29sbGVjdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgoKCgogIHZvaWQgICAgIGFkZEFzRmlyc3QgICAg ICAgKEVsZW1lbnQgY29uc3QmKTsKCgoKCiAgdm9pZCAgICAgYWRkQXNGaXJzdCAgICAgICAoRWxl bWVudCBjb25zdCYsIElDdXJzb3ImKTsKCgoKCiAgdm9pZCAgICAgYWRkQXNMYXN0ICAgICAgICAo RWxlbWVudCBjb25zdCYpOwoKCgoKICB2b2lkICAgICBhZGRBc0xhc3QgICAgICAgIChFbGVtZW50 IGNvbnN0JiwgSUN1cnNvciYpOwoKCgoKICB2b2lkICAgICBhZGRBc05leHQgICAgICAgIChFbGVt ZW50IGNvbnN0JiwgSUN1cnNvciYpOwoKCgoKICB2b2lkICAgICBhZGRBc1ByZXZpb3VzICAgIChF bGVtZW50IGNvbnN0JiwgSUN1cnNvciYpOwoKCgoKICB2b2lkICAgICBhZGRBdFBvc2l0aW9uICAg IChJUG9zaXRpb24sIEVsZW1lbnQgY29uc3QmKTsKCgoKCiAgdm9pZCAgICAgYWRkQXRQb3NpdGlv biAgICAoSVBvc2l0aW9uLCBFbGVtZW50IGNvbnN0JiwgSUN1cnNvciYpOwoKICBFbGVtZW50JiBh bnkgICAgICAgICAgICAgICgpOwoKICBFbGVtZW50IGNvbnN0JgogICAgICAgICAgIGFueSAgICAg ICAgICAgICAgKCkgY29uc3Q7CgogIEVsZW1lbnQmIGVsZW1lbnRBdFBvc2l0aW9uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoSVBvc2l0aW9uKTsKCiAgRWxlbWVudCBjb25zdCYKICAgICAg ICAgICBlbGVtZW50QXRQb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQb3Np dGlvbikgY29uc3Q7CgogIEVsZW1lbnQmIGZpcnN0ICAgICAgICAgICAgKCk7CgogIEVsZW1lbnQg Y29uc3QmCiAgICAgICAgICAgZmlyc3QgICAgICAgICAgICAoKSBjb25zdDsKCiAgRWxlbWVudCYg bGFzdCAgICAgICAgICAgICAoKTsKCiAgRWxlbWVudCBjb25zdCYKICAgICAgICAgICBsYXN0ICAg ICAgICAgICAgICgpIGNvbnN0OwoKCgoKICB2b2lkICAgICByZXZlcnNlICAgICAgICAgICgpOwoK CgoKICB2b2lkICAgICBzb3J0ICAgICAgICAgICAgIChsb25nICgqY29tcGFyaXNvbkZ1bmN0aW9u KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRWxlbWVudCBjb25zdCYsIEVsZW1lbnQg Y29uc3QmKSk7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElBU2VxdWVudGlhbENvbGxlY3Rpb24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICAgICAgICAgICBJQVNlcXVlbnRpYWxD b2xsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUFTZXF1ZW50aWFsQ29sbGVj dGlvbiA8RWxlbWVudD4gY29uc3QmKTsKCnByaXZhdGU6CgogIHN0YXRpYwogIEltcGxlbWVudGF0 aW9uJgogICAgICAgICAgIEltcGxPZiAgICAgICAgICAgKElBU2VxdWVudGlhbENvbGxlY3Rpb24g PEVsZW1lbnQ+IGNvbnN0Jik7CgojIDE4NyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9pYXNxbnRsLmgiCgoKfTsKCiAKCiAKCgoKCgoKCgoKCgojcHJh Z21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhc3FudGwu aW5sIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIAogCgoKCiAKCgp0ZW1w bGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1l bnQ+OjoKSUFTZXF1ZW50aWFsQ29sbGVjdGlvbiAoSU5vdGlmaWVyJiBub3RpZmllcikKeyB0aGlz LT5TZXRJbXBsICgoSW1wbGVtZW50YXRpb24qKSZub3RpZmllcik7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKfklB U2VxdWVudGlhbENvbGxlY3Rpb24gKCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5s aW5lIHZvaWQKSUFTZXF1ZW50aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46OgphZGRBc0ZpcnN0IChF bGVtZW50IGNvbnN0JiBlbGVtZW50KQp7IEltcGxPZiAoKnRoaXMpLkFkZEFzRmlyc3QgKCZlbGVt ZW50KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSB2b2lkCklBU2VxdWVudGlh bENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYWRkQXNGaXJzdCAoRWxlbWVudCBjb25zdCYgZWxlbWVu dCwgSUN1cnNvciYgY3Vyc29yKQp7IEltcGxPZiAoKnRoaXMpLkFkZEFzRmlyc3QgKCZlbGVtZW50 LCB0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+ CmlubGluZSB2b2lkCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYWRkQXNMYXN0 IChFbGVtZW50IGNvbnN0JiBlbGVtZW50KQp7IEltcGxPZiAoKnRoaXMpLkFkZEFzTGFzdCAoJmVs ZW1lbnQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFTZXF1ZW50 aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46OgphZGRBc0xhc3QgKEVsZW1lbnQgY29uc3QmIGVsZW1l bnQsIElDdXJzb3ImIGN1cnNvcikKeyBJbXBsT2YgKCp0aGlzKS5BZGRBc0xhc3QgKCZlbGVtZW50 LCB0aGlzLT5DcnNySW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+ CmlubGluZSB2b2lkCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYWRkQXNOZXh0 IChFbGVtZW50IGNvbnN0JiBlbGVtZW50LCBJQ3Vyc29yJiBjdXJzb3IpCnsgSW1wbE9mICgqdGhp cykuQWRkQXNOZXh0ICgmZWxlbWVudCwgdGhpcy0+Q3JzckltcGxPZiAoY3Vyc29yKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgdm9pZApJQVNlcXVlbnRpYWxDb2xsZWN0aW9u IDxFbGVtZW50Pjo6CmFkZEFzUHJldmlvdXMgKEVsZW1lbnQgY29uc3QmIGVsZW1lbnQsIElDdXJz b3ImIGN1cnNvcikKeyBJbXBsT2YgKCp0aGlzKS5BZGRBc1ByZXZpb3VzICgmZWxlbWVudCwgdGhp cy0+Q3JzckltcGxPZiAoY3Vyc29yKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50Pgppbmxp bmUgdm9pZApJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CmFkZEF0UG9zaXRpb24g KElQb3NpdGlvbiBwb3NpdGlvbiwgRWxlbWVudCBjb25zdCYgZWxlbWVudCkKeyBJbXBsT2YgKCp0 aGlzKS5BZGRBdFBvc2l0aW9uIChwb3NpdGlvbiwgJmVsZW1lbnQpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSUFTZXF1ZW50aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46 OgphZGRBdFBvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRpb24sCiAgICAgICAgICAgICAgIEVsZW1l bnQgY29uc3QmIGVsZW1lbnQsIElDdXJzb3ImIGN1cnNvcikKeyBJbXBsT2YgKCp0aGlzKS4KICAg IEFkZEF0UG9zaXRpb24gKHBvc2l0aW9uLCAmZWxlbWVudCwgdGhpcy0+Q3JzckltcGxPZiAoY3Vy c29yKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCYKSUFTZXF1 ZW50aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46OgphbnkgKCkKeyByZXR1cm4gKihFbGVtZW50Kikg SW1wbE9mICgqdGhpcykuQW55ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5l IEVsZW1lbnQgY29uc3QmCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKYW55ICgp IGNvbnN0CnsgcmV0dXJuICooRWxlbWVudCBjb25zdCopIEltcGxPZiAoKnRoaXMpLkFueSAoKTsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50JgpJQVNlcXVlbnRpYWxD b2xsZWN0aW9uIDxFbGVtZW50Pjo6CmVsZW1lbnRBdFBvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRp b24pCnsgcmV0dXJuICooRWxlbWVudCopIEltcGxPZiAoKnRoaXMpLkVsZW1lbnRBdFBvc2l0aW9u IChwb3NpdGlvbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBj b25zdCYKSUFTZXF1ZW50aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46OgplbGVtZW50QXRQb3NpdGlv biAoSVBvc2l0aW9uIHBvc2l0aW9uKSBjb25zdAp7IHJldHVybiAqKEVsZW1lbnQgY29uc3QqKSBJ bXBsT2YgKCp0aGlzKS5FbGVtZW50QXRQb3NpdGlvbiAocG9zaXRpb24pOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudD4KaW5saW5lIEVsZW1lbnQmCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVs ZW1lbnQ+OjoKZmlyc3QgKCkKeyByZXR1cm4gKihFbGVtZW50KikgSW1wbE9mICgqdGhpcykuRmly c3QgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUgRWxlbWVudCBjb25zdCYK SUFTZXF1ZW50aWFsQ29sbGVjdGlvbiA8RWxlbWVudD46OgpmaXJzdCAoKSBjb25zdAp7IHJldHVy biAqKEVsZW1lbnQgY29uc3QqKSBJbXBsT2YgKCp0aGlzKS5GaXJzdCAoKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50JgpJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxF bGVtZW50Pjo6Cmxhc3QgKCkKeyByZXR1cm4gKihFbGVtZW50KikgSW1wbE9mICgqdGhpcykuTGFz dCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBFbGVtZW50IGNvbnN0JgpJ QVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVtZW50Pjo6Cmxhc3QgKCkgY29uc3QKeyByZXR1cm4g KihFbGVtZW50IGNvbnN0KikgSW1wbE9mICgqdGhpcykuTGFzdCAoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQ+CmlubGluZSB2b2lkCklBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+ OjoKcmV2ZXJzZSAoKQp7IEltcGxPZiAoKnRoaXMpLlJldmVyc2UgKCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50PgppbmxpbmUgdm9pZApJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVtZW50 Pjo6CnNvcnQgKGxvbmcgKCpjb21wRnVuYykgKEVsZW1lbnQgY29uc3QmLCBFbGVtZW50IGNvbnN0 JikpCnsgSW1wbE9mICgqdGhpcykuU29ydCAoKElDb21wRnVuYyljb21wRnVuYywgMCk7Cn0KCiAK CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSUFTZXF1ZW50aWFsQ29sbGVjdGlvbiA8 RWxlbWVudD46OgpJQVNlcXVlbnRpYWxDb2xsZWN0aW9uICgpCnsKfQoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQ+CmlubGluZQpJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVtZW50Pjo6CklBU2Vx dWVudGlhbENvbGxlY3Rpb24gKElBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0 JikKewp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHR5cGVuYW1lICBJQVNl cXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVtZW50Pjo6SW1wbGVtZW50YXRpb24mCklBU2VxdWVudGlh bENvbGxlY3Rpb24gPEVsZW1lbnQ+OjoKSW1wbE9mIChJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxF bGVtZW50PiBjb25zdCYgY29sbGVjdGlvbikKeyByZXR1cm4gKihJbXBsZW1lbnRhdGlvbiopY29s bGVjdGlvbi5pdkltcGw7Cn0KCiAKCiMgMjE2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhc3FudGwuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9u ZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyNiAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYXNlcS5o IiAyCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWlhc2VxLmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoKIAoKIAoj cHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBP UlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xp bmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoK CgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCmNsYXNzICAgSUFTZXF1ZW5jZUltcGwgOiBwdWJsaWMg SUFDb2xsZWN0aW9uSW1wbCB7CnB1YmxpYzoKCiAgICAgICAgICB+SUFTZXF1ZW5jZUltcGwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICB2aXJ0dWFsCiAgbG9uZyAgICAgQ29tcGFy ZSAgICAgICAgICAoSUFTZXF1ZW5jZUltcGwgY29uc3QmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElDb21wRnVuYywgdm9pZCopIGNvbnN0OwoKcHJvdGVjdGVkOgoKICAgICAgICAgICBJ QVNlcXVlbmNlSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9wcyYpOwoKcHJpdmF0 ZToKCiMgOTUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWlhc2VxLmgiCgoKfTsKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNw cmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkK I3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyNyAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYXNlcS5oIiAy CgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwgX19JT0NfSEVB REVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgojcHJhZ21hIG5h bWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0 KQoKCgoKCgoKCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+ CmNsYXNzIElBU2VxdWVuY2UgOgogIHB1YmxpYyBJQVNlcXVlbnRpYWxDb2xsZWN0aW9uIDxFbGVt ZW50PiB7CgogIHR5cGVkZWYgIElBU2VxdWVudGlhbENvbGxlY3Rpb24gPEVsZW1lbnQ+IEluaGVy aXRlZDsKCiAgdHlwZWRlZiAgSUFTZXF1ZW5jZUltcGwgSW1wbGVtZW50YXRpb247CgpwdWJsaWM6 CgoKICAgICAgICAgICBJQVNlcXVlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5v dGlmaWVyJik7CgoKICAgICAgICAgIH5JQVNlcXVlbmNlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKTsKCiAgbG9uZyAgICAgY29tcGFyZSAgICAgICAgICAoSUFTZXF1ZW5jZSA8RWxlbWVu dD4gY29uc3QmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKCpjb21wYXJpc29u RnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFbGVtZW50IGNvbnN0Jiwg RWxlbWVudCBjb25zdCYpKSBjb25zdDsKCnByb3RlY3RlZDoKCiAgICAgICAgICAgSUFTZXF1ZW5j ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogICAgICAgICAgIElBU2VxdWVuY2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJQVNlcXVlbmNlIDxFbGVtZW50PiBjb25zdCYp OwoKcHJpdmF0ZToKCiAgc3RhdGljCiAgSW1wbGVtZW50YXRpb24mCiAgICAgICAgICAgSW1wbE9m ICAgICAgICAgICAoSUFTZXF1ZW5jZSA8RWxlbWVudD4gY29uc3QmKTsKCiMgMTE2ICIvaG9tZS9h a25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lhc2VxLmgiCgoKfTsK CiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5n KHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVk LmJpbi9pbmNsdWRlL2lhc2VxLmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAog CgogCiAKIAoKCgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQVNlcXVlbmNlIDxF bGVtZW50Pjo6CklBU2VxdWVuY2UgKElOb3RpZmllciYgbm90aWZpZXIpCnsgdGhpcy0+U2V0SW1w bCAoKEltcGxlbWVudGF0aW9uKikmbm90aWZpZXIpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1l bnQ+CmlubGluZQpJQVNlcXVlbmNlIDxFbGVtZW50Pjo6Cn5JQVNlcXVlbmNlICgpCnsKfQoKdGVt cGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZSBsb25nCklBU2VxdWVuY2UgPEVsZW1lbnQ+OjoK Y29tcGFyZSAoSUFTZXF1ZW5jZSA8RWxlbWVudD4gY29uc3QmIGNvbGxlY3Rpb24sCiAgICAgICAg IGxvbmcgKCpjb21wRnVuYykgKEVsZW1lbnQgY29uc3QmLCBFbGVtZW50IGNvbnN0JikpIGNvbnN0 CnsgcmV0dXJuIHRoaXMtPkltcGxPZiAoKnRoaXMpLgogICAgQ29tcGFyZSAodGhpcy0+SW1wbE9m IChjb2xsZWN0aW9uKSwgKElDb21wRnVuYyljb21wRnVuYywgMCk7Cn0KCiAKCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50PgppbmxpbmUKSUFTZXF1ZW5jZSA8RWxlbWVudD46OgpJQVNlcXVlbmNlICgp CnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJQVNlcXVlbmNlIDxFbGVtZW50 Pjo6CklBU2VxdWVuY2UgKElBU2VxdWVuY2UgPEVsZW1lbnQ+IGNvbnN0JiBjb2xsZWN0aW9uKQo6 IEluaGVyaXRlZCAoY29sbGVjdGlvbikKewp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4K aW5saW5lIHR5cGVuYW1lICBJQVNlcXVlbmNlIDxFbGVtZW50Pjo6SW1wbGVtZW50YXRpb24mCklB U2VxdWVuY2UgPEVsZW1lbnQ+OjoKSW1wbE9mIChJQVNlcXVlbmNlIDxFbGVtZW50PiBjb25zdCYg Y29sbGVjdGlvbikKeyByZXR1cm4gKihJbXBsZW1lbnRhdGlvbiopY29sbGVjdGlvbi5pdkltcGw7 Cn0KCiAKCiMgMTQ1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lhc2VxLmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMjcgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXNlcS5oIiAyCgojIDEgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmgiIDEKCgoK IAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUp CiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21h IGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5H TElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoK IAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KY2xhc3MgSUNTZXF1ZW5jZUltcGwg OiBwdWJsaWMgQ0luaGVyaXRlZCB7CnB1YmxpYzoKCiAgdHlwZWRlZiB0eXBlbmFtZSAgQ0luaGVy aXRlZDo6T3BzIE9wczsKCiAgICAgICAgICAgSUNTZXF1ZW5jZUltcGwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChPcHMmLCBJTnVtYmVyKTsKCiAgICAgICAgICAgSUNTZXF1ZW5jZUltcGwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHMmLCBJQ1NlcXVlbmNlSW1wbAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q0luaGVyaXRlZD4gY29uc3QmKTsKCiAgYm9v bCAgICAgQWRkICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIHZv aWQgICAgIEFkZEFsbEZyb20gICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKTsKCiAgdm9p ZCAgICAgQWRkQXNGaXJzdCAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIHZv aWQgICAgIEFkZEFzTGFzdCAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2 b2lkICAgICBBZGRBc05leHQgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsKCiAg dm9pZCAgICAgQWRkQXNQcmV2aW91cyAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7Cgog IHZvaWQgICAgIEFkZEF0UG9zaXRpb24gICAgKElQb3NpdGlvbiwgdm9pZCBjb25zdCosIElDdXJz b3JJbXBsJik7CgogIHZvaWQqICAgIEFueSAgICAgICAgICAgICAgKCkgY29uc3Q7CgogIHZvaWQq ICAgIEVsZW1lbnRBdCAgICAgICAgKElDdXJzb3JJbXBsIGNvbnN0JikgY29uc3Q7CgogIHZvaWQq ICAgIEVsZW1lbnRBdFBvc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVBvc2l0 aW9uKSBjb25zdDsKCiAgdm9pZCogICAgRmlyc3QgICAgICAgICAgICAoKSBjb25zdDsKCiAgYm9v bCAgICAgSXNGaXJzdEF0ICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgYm9v bCAgICAgSXNMYXN0QXQgICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgdm9p ZCogICAgTGFzdCAgICAgICAgICAgICAoKSBjb25zdDsKCiAgSVBvc2l0aW9uCiAgICAgICAgICAg UG9zaXRpb25BdCAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgdm9pZCAgICAg UmVtb3ZlQXQgICAgICAgICAoSUN1cnNvckltcGwmKTsKCiAgdm9pZCAgICAgUmVtb3ZlQXRQb3Np dGlvbiAoSVBvc2l0aW9uKTsKCiAgdm9pZCAgICAgUmVtb3ZlRmlyc3QgICAgICAoKTsKCiAgdm9p ZCAgICAgUmVtb3ZlTGFzdCAgICAgICAoKTsKCiAgdm9pZCAgICAgUmVwbGFjZUF0ICAgICAgICAo SUN1cnNvckltcGwgY29uc3QmIGN1cnNvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkIGNvbnN0Kik7CgogIHZvaWQgICAgIFJlcGxhY2VBdFBvc2l0aW9uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoSVBvc2l0aW9uLCB2b2lkIGNvbnN0Kik7CgogIGJvb2wgICAgIFNldFRv Rmlyc3QgICAgICAgKElDdXJzb3JJbXBsJikgY29uc3Q7CgogIGJvb2wgICAgIFNldFRvTGFzdCAg ICAgICAgKElDdXJzb3JJbXBsJikgY29uc3Q7CgogIGJvb2wgICAgIFNldFRvTmV4dCAgICAgICAg KElDdXJzb3JJbXBsJikgY29uc3Q7CgogIHZvaWQgICAgIFNldFRvUG9zaXRpb24gICAgKElQb3Np dGlvbiwgSUN1cnNvckltcGwmKSBjb25zdDsKCiAgYm9vbCAgICAgU2V0VG9QcmV2aW91cyAgICAo SUN1cnNvckltcGwmKSBjb25zdDsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgojIDE1MyAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuaCIKCgp9 OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xp bmcocG9wKQoKCgoKIAoKIAoKCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiAxCiAKIAoKCgoKCgoKCgoKCgogCiAKIAogCgoK CgoKCgoKCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KSUNTZXF1ZW5jZUlt cGwgPENJbmhlcml0ZWQ+OjoKSUNTZXF1ZW5jZUltcGwgKE9wcyYgb3BzLCBJTnVtYmVyIG51bWJl ck9mRWxlbWVudHMpCjogQ0luaGVyaXRlZCAob3BzLCBudW1iZXJPZkVsZW1lbnRzKQp7Cn0KCnRl bXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgpJQ1NlcXVlbmNlSW1wbCA8Q0luaGVyaXRlZD46OgpJ Q1NlcXVlbmNlSW1wbAogIChPcHMmIG9wcywgSUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+IGNv bnN0JiBjb2xsZWN0aW9uKQo6IENJbmhlcml0ZWQgKG9wcywgY29sbGVjdGlvbikKewp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ1NlcXVlbmNlSW1wbCA8Q0luaGVyaXRlZD46 OgpBZGQgKHZvaWQgY29uc3QqIGVsZW1lbnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsgeyBpZiAo ISAoIGN1cnNvci5Jc0ZvciAoKnRoaXMpICkpICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25J bXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiQWRkIiAgLCAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIs IDUzKTsgfSAgCgogIGJvb2wgaGFzQmVlbkFkZGVkID0gQ0luaGVyaXRlZDo6QWRkIChlbGVtZW50 LCBjdXJzb3IpOwogIHJldHVybiBoYXNCZWVuQWRkZWQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5o ZXJpdGVkPgp2b2lkCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6CkFkZEFsbEZyb20gKElB Q29sbGVjdGlvbkltcGwgY29uc3QmIGNvbGxlY3Rpb24pCnsgeyBpZiAoISAoIHRoaXMgIT0gJmNv bGxlY3Rpb24gKSkgICBJSWRlbnRpY2FsQ29sbGVjdGlvbkV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0 ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJBZGRBbGxGcm9tIiAgLCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIsIDYzKTsg fSAgCgogIENJbmhlcml0ZWQ6OkFkZEFsbEZyb20gKGNvbGxlY3Rpb24pOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZApJQ1NlcXVlbmNlSW1wbCA8Q0luaGVyaXRlZD46OgpBZGRB c0ZpcnN0ICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJQ3Vyc29ySW1wbCYgY3Vyc29yKQp7IHsgaWYg KCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9u SW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkFkZEFzRmlyc3Qi ICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lp Y3NlcS5jIiwgNzIpOyB9ICAKCiAgQ0luaGVyaXRlZDo6QWRkQXNGaXJzdCAoZWxlbWVudCwgY3Vy c29yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIENJbmhlcml0ZWQ+CnZvaWQKSUNTZXF1ZW5jZUltcGwg PENJbmhlcml0ZWQ+OjoKQWRkQXNMYXN0ICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJQ3Vyc29ySW1w bCYgY3Vyc29yKQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JO b3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAg LCAgICAgIkFkZEFzTGFzdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCA4MSk7IH0gIAoKICBDSW5oZXJpdGVkOjpBZGRBc0xh c3QgKGVsZW1lbnQsIGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lk CklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6CkFkZEFzTmV4dCAodm9pZCBjb25zdCogZWxl bWVudCwgSUN1cnNvckltcGwmIGN1cnNvcikKeyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhp cykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlz LT5DbGFzc05hbWUgKCkgICwgICAgICJBZGRBc05leHQiICAsICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgOTApOyB9ICAKICB7IGlm ICghICggY3Vyc29yLklzVmFsaWQgKCkgKSkgICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbkltcGwg Ojp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJBZGRBc05leHQiICAsICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5j IiwgOTEpOyB9ICAKCgoKCiAgQ0luaGVyaXRlZDo6QWRkQXNOZXh0IChlbGVtZW50LCBjdXJzb3Ip Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZApJQ1NlcXVlbmNlSW1wbCA8Q0lu aGVyaXRlZD46OgpBZGRBc1ByZXZpb3VzICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJQ3Vyc29ySW1w bCYgY3Vyc29yKQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JO b3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAg LCAgICAgIkFkZEFzUHJldmlvdXMiICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMTAzKTsgfSAgCiAgeyBpZiAoISAoIGN1cnNv ci5Jc1ZhbGlkICgpICkpICAgSUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAo ICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiQWRkQXNQcmV2aW91cyIgICwgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAxMDQp OyB9ICAKCgoKCiAgQ0luaGVyaXRlZDo6QWRkQXNQcmV2aW91cyAoZWxlbWVudCwgY3Vyc29yKTsK fQoKdGVtcGxhdGUgPGNsYXNzIENJbmhlcml0ZWQ+CnZvaWQKSUNTZXF1ZW5jZUltcGwgPENJbmhl cml0ZWQ+OjoKQWRkQXRQb3NpdGlvbiAoSVBvc2l0aW9uIHBvc2l0aW9uLAogICAgICAgICAgICAg ICB2b2lkIGNvbnN0KiBlbGVtZW50LAogICAgICAgICAgICAgICBJQ3Vyc29ySW1wbCYgY3Vyc29y KQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JOb3RGb3JUaGlz RXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkFk ZEF0UG9zaXRpb24iICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2lpY3NlcS5jIiwgMTE4KTsgfSAgCiAgeyBpZiAoISAoIDEgPD0gcG9zaXRpb24g JiYgcG9zaXRpb24gPD0gdGhpcy0+TnVtYmVyT2ZFbGVtZW50cyAoKSArIDEgKSkgICBJUG9zaXRp b25JbnZhbGlkRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAg LCAgICAgIkFkZEF0UG9zaXRpb24iICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMTE5KTsgfSAgCgogIENJbmhlcml0ZWQ6OkFk ZEF0UG9zaXRpb24gKHBvc2l0aW9uLCBlbGVtZW50LCBjdXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQ0luaGVyaXRlZD4Kdm9pZCoKSUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+OjoKQW55ICgp IGNvbnN0CnsgeyBpZiAoISAoICEgdGhpcy0+SXNFbXB0eSAoKSApKSAgIElFbXB0eUV4Y2VwdGlv bkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJBbnkiICAsICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5j IiwgMTI4KTsgfSAgCgogIHJldHVybiBDSW5oZXJpdGVkOjpBbnkgKCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBDSW5oZXJpdGVkPgp2b2lkKgpJQ1NlcXVlbmNlSW1wbCA8Q0luaGVyaXRlZD46OgpFbGVt ZW50QXQgKElDdXJzb3JJbXBsIGNvbnN0JiBjdXJzb3IpIGNvbnN0CnsgeyBpZiAoISAoIGN1cnNv ci5Jc0ZvciAoKnRoaXMpICkpICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsIDo6dGhy b3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiRWxlbWVudEF0IiAgLCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIsIDEz Nyk7IH0gIAogIHsgaWYgKCEgKCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJbnZhbGlk RXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkVs ZW1lbnRBdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWljc2VxLmMiLCAxMzgpOyB9ICAKCgoKCgoKCiAgcmV0dXJuIENJbmhlcml0ZWQ6OkVs ZW1lbnRBdCAoY3Vyc29yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIENJbmhlcml0ZWQ+CnZvaWQqCklD U2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6CkVsZW1lbnRBdFBvc2l0aW9uIChJUG9zaXRpb24g cG9zaXRpb24pIGNvbnN0CnsgeyBpZiAoISAoIDEgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPD0g dGhpcy0+TnVtYmVyT2ZFbGVtZW50cyAoKSApKSAgIElQb3NpdGlvbkludmFsaWRFeGNlcHRpb25J bXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiRWxlbWVudEF0UG9z aXRpb24iICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lpY3NlcS5jIiwgMTUzKTsgfSAgCgogIHJldHVybiBDSW5oZXJpdGVkOjpFbGVtZW50QXRQ b3NpdGlvbiAocG9zaXRpb24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZCoK SUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+OjoKRmlyc3QgKCkgY29uc3QKeyB7IGlmICghICgg ISB0aGlzLT5Jc0VtcHR5ICgpICkpICAgSUVtcHR5RXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAg IHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkZpcnN0IiAgLCAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIsIDE2Mik7IH0gIAoKICBy ZXR1cm4gQ0luaGVyaXRlZDo6Rmlyc3QgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVk Pgpib29sCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6CklzRmlyc3RBdCAoSUN1cnNvcklt cGwgY29uc3QmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykg KSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5D bGFzc05hbWUgKCkgICwgICAgICJJc0ZpcnN0QXQiICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMTcxKTsgfSAgCiAgeyBpZiAo ISAoIGN1cnNvci5Jc1ZhbGlkICgpICkpICAgSUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBsIDo6 dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiSXNGaXJzdEF0IiAgLCAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIs IDE3Mik7IH0gIAoKCgoKCgoKICByZXR1cm4gQ0luaGVyaXRlZDo6SXNGaXJzdEF0IChjdXJzb3Ip Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ1NlcXVlbmNlSW1wbCA8Q0lu aGVyaXRlZD46OgpJc0xhc3RBdCAoSUN1cnNvckltcGwgY29uc3QmIGN1cnNvcikgY29uc3QKeyB7 IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2Vw dGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJJc0xhc3RB dCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWljc2VxLmMiLCAxODcpOyB9ICAKICB7IGlmICghICggY3Vyc29yLklzVmFsaWQgKCkgKSkgICBJ Q3Vyc29ySW52YWxpZEV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUg KCkgICwgICAgICJJc0xhc3RBdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1z aGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAxODgpOyB9ICAKCgoKCgoKCiAgcmV0dXJuIENJ bmhlcml0ZWQ6OklzTGFzdEF0IChjdXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRl ZD4Kdm9pZCoKSUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+OjoKTGFzdCAoKSBjb25zdAp7IHsg aWYgKCEgKCAhIHRoaXMtPklzRW1wdHkgKCkgKSkgICBJRW1wdHlFeGNlcHRpb25JbXBsIDo6dGhy b3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiTGFzdCIgICwgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAyMDMpOyB9 ICAKCiAgcmV0dXJuIENJbmhlcml0ZWQ6Okxhc3QgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5o ZXJpdGVkPgpJUG9zaXRpb24KSUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+OjoKUG9zaXRpb25B dCAoSUN1cnNvckltcGwgY29uc3QmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklz Rm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0 ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJQb3NpdGlvbkF0IiAgLCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIsIDIxMik7 IH0gIAogIHsgaWYgKCEgKCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJbnZhbGlkRXhj ZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIlBvc2l0 aW9uQXQiICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lpY3NlcS5jIiwgMjEzKTsgfSAgCgoKCgoKCgogIHJldHVybiBDSW5oZXJpdGVkOjpQb3Np dGlvbkF0IChjdXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZApJQ1Nl cXVlbmNlSW1wbCA8Q0luaGVyaXRlZD46OgpSZW1vdmVBdCAoSUN1cnNvckltcGwmIGN1cnNvcikK eyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4 Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJSZW1v dmVBdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWljc2VxLmMiLCAyMjgpOyB9ICAKICB7IGlmICghICggY3Vyc29yLklzVmFsaWQgKCkgKSkg ICBJQ3Vyc29ySW52YWxpZEV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05h bWUgKCkgICwgICAgICJSZW1vdmVBdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAyMjkpOyB9ICAKCgoKCgoKCiAgQ0luaGVy aXRlZDo6UmVtb3ZlQXQgKGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2 b2lkCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClJlbW92ZUF0UG9zaXRpb24gKElQb3Np dGlvbiBwb3NpdGlvbikKeyB7IGlmICghICggMSA8PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA8PSB0 aGlzLT5OdW1iZXJPZkVsZW1lbnRzICgpICkpICAgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbklt cGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJSZW1vdmVBdFBvc2l0 aW9uIiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9paWNzZXEuYyIsIDI0NCk7IH0gIAoKICBDSW5oZXJpdGVkOjpSZW1vdmVBdFBvc2l0aW9uIChw b3NpdGlvbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lkCklDU2VxdWVuY2VJ bXBsIDxDSW5oZXJpdGVkPjo6ClJlbW92ZUZpcnN0ICgpCnsgeyBpZiAoISAoICEgdGhpcy0+SXNF bXB0eSAoKSApKSAgIElFbXB0eUV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFz c05hbWUgKCkgICwgICAgICJSZW1vdmVGaXJzdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAyNTMpOyB9ICAKCiAgQ0luaGVy aXRlZDo6UmVtb3ZlRmlyc3QgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lk CklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClJlbW92ZUxhc3QgKCkKeyB7IGlmICghICgg ISB0aGlzLT5Jc0VtcHR5ICgpICkpICAgSUVtcHR5RXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAg IHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIlJlbW92ZUxhc3QiICAsICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMjYyKTsgfSAg CgogIENJbmhlcml0ZWQ6OlJlbW92ZUxhc3QgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJp dGVkPgp2b2lkCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClJlcGxhY2VBdCAoSUN1cnNv ckltcGwgY29uc3QmIGN1cnNvciwgdm9pZCBjb25zdCogZWxlbWVudCkKeyB7IGlmICghICggY3Vy c29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0 aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJSZXBsYWNlQXQiICAsICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwg MjcxKTsgfSAgCiAgeyBpZiAoISAoIGN1cnNvci5Jc1ZhbGlkICgpICkpICAgSUN1cnNvckludmFs aWRFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAi UmVwbGFjZUF0IiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9paWNzZXEuYyIsIDI3Mik7IH0gIAoKCgoKCgoKICBDSW5oZXJpdGVkOjpSZXBsYWNl QXQgKGN1cnNvciwgZWxlbWVudCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lk CklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClJlcGxhY2VBdFBvc2l0aW9uIChJUG9zaXRp b24gcG9zaXRpb24sIHZvaWQgY29uc3QqIGVsZW1lbnQpCnsgeyBpZiAoISAoIDEgPD0gcG9zaXRp b24gJiYgcG9zaXRpb24gPD0gdGhpcy0+TnVtYmVyT2ZFbGVtZW50cyAoKSApKSAgIElQb3NpdGlv bkludmFsaWRFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAs ICAgICAiUmVwbGFjZUF0UG9zaXRpb24iICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMjg3KTsgfSAgCgogIENJbmhlcml0ZWQ6 OlJlcGxhY2VBdFBvc2l0aW9uIChwb3NpdGlvbiwgZWxlbWVudCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBDSW5oZXJpdGVkPgpib29sCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClNldFRvRmly c3QgKElDdXJzb3JJbXBsJiBjdXJzb3IpIGNvbnN0CnsgeyBpZiAoISAoIGN1cnNvci5Jc0ZvciAo KnRoaXMpICkpICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAg dGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiU2V0VG9GaXJzdCIgICwgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAyOTYpOyB9ICAK CiAgcmV0dXJuIENJbmhlcml0ZWQ6OlNldFRvRmlyc3QgKGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxj bGFzcyBDSW5oZXJpdGVkPgpib29sCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClNldFRv TGFzdCAoSUN1cnNvckltcGwmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklzRm9y ICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICgg ICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJTZXRUb0xhc3QiICAsICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMzA1KTsgfSAg CgogIHJldHVybiBDSW5oZXJpdGVkOjpTZXRUb0xhc3QgKGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxj bGFzcyBDSW5oZXJpdGVkPgpib29sCklDU2VxdWVuY2VJbXBsIDxDSW5oZXJpdGVkPjo6ClNldFRv TmV4dCAoSUN1cnNvckltcGwmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklzRm9y ICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICgg ICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJTZXRUb05leHQiICAsICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMzE0KTsgfSAg CiAgeyBpZiAoISAoIGN1cnNvci5Jc1ZhbGlkICgpICkpICAgSUN1cnNvckludmFsaWRFeGNlcHRp b25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiU2V0VG9OZXh0 IiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p aWNzZXEuYyIsIDMxNSk7IH0gIAoKCgoKICByZXR1cm4gQ0luaGVyaXRlZDo6U2V0VG9OZXh0IChj dXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZApJQ1NlcXVlbmNlSW1w bCA8Q0luaGVyaXRlZD46OgpTZXRUb1Bvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRpb24sIElDdXJz b3JJbXBsJiBjdXJzb3IpIGNvbnN0CnsgeyBpZiAoISAoIGN1cnNvci5Jc0ZvciAoKnRoaXMpICkp ICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xh c3NOYW1lICgpICAsICAgICAiU2V0VG9Qb3NpdGlvbiIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWljc2VxLmMiLCAzMjcpOyB9ICAKICB7IGlm ICghICggMSA8PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA8PSB0aGlzLT5OdW1iZXJPZkVsZW1lbnRz ICgpICkpICAgSVBvc2l0aW9uSW52YWxpZEV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlz LT5DbGFzc05hbWUgKCkgICwgICAgICJTZXRUb1Bvc2l0aW9uIiAgLCAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEuYyIsIDMyOCk7IH0gIAoK ICBDSW5oZXJpdGVkOjpTZXRUb1Bvc2l0aW9uIChwb3NpdGlvbiwgY3Vyc29yKTsKfQoKdGVtcGxh dGUgPGNsYXNzIENJbmhlcml0ZWQ+CmJvb2wKSUNTZXF1ZW5jZUltcGwgPENJbmhlcml0ZWQ+OjoK U2V0VG9QcmV2aW91cyAoSUN1cnNvckltcGwmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vy c29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0 aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJTZXRUb1ByZXZpb3VzIiAgLCAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNzZXEu YyIsIDMzNyk7IH0gIAogIHsgaWYgKCEgKCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJ bnZhbGlkRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAg ICAgIlNldFRvUHJldmlvdXMiICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5jIiwgMzM4KTsgfSAgCgoKCgogIHJldHVybiBDSW5oZXJp dGVkOjpTZXRUb1ByZXZpb3VzIChjdXJzb3IpOwp9CgoKCgoKCiMgMTg2ICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY3NlcS5oIiAyCgoKCiAKCiAK I3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3Rv cmUpCiAKCiAKCiMgMjggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaXNlcS5oIiAyCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpdnNlcS5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAK IAogCiAKCiAKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwg X19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgoj cHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFn bWEgZW51bSg0KQoKCgoKCgoKCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNz IFZJbmhlcml0ZWQ+CmNsYXNzIElWU2VxdWVuY2VJbXBsIDogcHVibGljIFZJbmhlcml0ZWQgewpw dWJsaWM6CgogIHR5cGVkZWYgdHlwZW5hbWUgIFZJbmhlcml0ZWQ6Ok9wcyBPcHM7CgogICAgICAg ICAgIElWU2VxdWVuY2VJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT3BzJiwgSU51 bWJlcik7CgogICAgICAgICAgIElWU2VxdWVuY2VJbXBsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoT3BzJiwgSVZTZXF1ZW5jZUltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPFZJbmhlcml0ZWQ+IGNvbnN0Jik7CgogIGJvb2wgICAgIEFkZCAgICAgICAgICAgICAg KHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBBZGRBbGxGcm9tICAgICAg IChJQUNvbGxlY3Rpb25JbXBsIGNvbnN0Jik7CgogIHZvaWQgICAgIEFkZEFzRmlyc3QgICAgICAg KHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBBZGRBc0xhc3QgICAgICAg ICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsKCiAgdm9pZCAgICAgQWRkQXNOZXh0ICAgICAg ICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIHZvaWQgICAgIEFkZEFzUHJldmlvdXMg ICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBBZGRBdFBvc2l0aW9u ICAgIChJUG9zaXRpb24sIHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBD b3B5ICAgICAgICAgICAgIChJQUNvbGxlY3Rpb25JbXBsIGNvbnN0Jik7CgogIElOdW1iZXIgIFJl bW92ZUFsbCAgICAgICAgKCk7CgogIElOdW1iZXIgIFJlbW92ZUFsbCAgICAgICAgKElQcmVkRnVu Yywgdm9pZCopOwoKICB2b2lkICAgICBSZW1vdmVBdCAgICAgICAgIChJQ3Vyc29ySW1wbCYpOwoK ICB2b2lkICAgICBSZW1vdmVBdFBvc2l0aW9uIChJUG9zaXRpb24pOwoKICB2b2lkICAgICBSZW1v dmVGaXJzdCAgICAgICgpOwoKICB2b2lkICAgICBSZW1vdmVMYXN0ICAgICAgICgpOwoKICB2b2lk ICAgICBSZXBsYWNlQXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYsIHZvaWQgY29uc3QqKTsK CiAgdm9pZCAgICAgUmV2ZXJzZSAgICAgICAgICAoKTsKCiAgdm9pZCAgICAgU29ydCAgICAgICAg ICAgICAoSUNvbXBGdW5jLCB2b2lkKik7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKIyAxMzEgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2c2VxLmgi CgoKfTsKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1h bmdsaW5nKHBvcCkKCgoKCiAKCiAKCgoKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paXZzZXEuYyIgMQogCiAKCgoKCgoKCgoKCgoKIAogCiAK IAoKCgoKCgoKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBWSW5oZXJpdGVkPgpJVlNlcXVlbmNl SW1wbCA8VkluaGVyaXRlZD46OgpJVlNlcXVlbmNlSW1wbCAoT3BzJiBvcHMsIElOdW1iZXIgbnVt YmVyT2ZFbGVtZW50cykKOiBWSW5oZXJpdGVkIChvcHMsIG51bWJlck9mRWxlbWVudHMpCnsKfQoK dGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CklWU2VxdWVuY2VJbXBsIDxWSW5oZXJpdGVkPjo6 CklWU2VxdWVuY2VJbXBsCiAgKE9wcyYgb3BzLCBJVlNlcXVlbmNlSW1wbCA8VkluaGVyaXRlZD4g Y29uc3QmIGNvbGxlY3Rpb24pCjogVkluaGVyaXRlZCAob3BzLCBjb2xsZWN0aW9uKQp7Cn0KCnRl bXBsYXRlIDxjbGFzcyBWSW5oZXJpdGVkPgpib29sCklWU2VxdWVuY2VJbXBsIDxWSW5oZXJpdGVk Pjo6CkFkZCAodm9pZCBjb25zdCogZWxlbWVudCwgSUN1cnNvckltcGwmIGN1cnNvcikKeyBib29s IGlzRW5hYmxlZCA9IHRoaXMtPklzRW5hYmxlZEZvck5vdGlmaWNhdGlvbiAoKTsKICB0aGlzLT5E aXNhYmxlTm90aWZpY2F0aW9uICgpOwogIGJvb2wgaGFzQmVlbkFkZGVkID0gVkluaGVyaXRlZDo6 QWRkIChlbGVtZW50LCBjdXJzb3IpOwogIHRoaXMtPkVuYWJsZU5vdGlmaWNhdGlvbiAoaXNFbmFi bGVkKTsKICBpZiAoaGFzQmVlbkFkZGVkKSB7CiAgICB0aGlzLT5Ob3RpZnlPZkFkZEF0IChjdXJz b3IpOwogIH0KICByZXR1cm4gaGFzQmVlbkFkZGVkOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVy aXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8VkluaGVyaXRlZD46OgpBZGRBbGxGcm9tIChJQUNv bGxlY3Rpb25JbXBsIGNvbnN0JiBjb2xsZWN0aW9uKQp7IGJvb2wgaXNFbmFibGVkID0gdGhpcy0+ SXNFbmFibGVkRm9yTm90aWZpY2F0aW9uICgpOwogIHRoaXMtPkRpc2FibGVOb3RpZmljYXRpb24g KCk7CiAgVkluaGVyaXRlZDo6QWRkQWxsRnJvbSAoY29sbGVjdGlvbik7CiAgdGhpcy0+RW5hYmxl Tm90aWZpY2F0aW9uIChpc0VuYWJsZWQpOwogIHRoaXMtPk5vdGlmeU9mTW9kaWZpY2F0aW9uICgp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8Vklu aGVyaXRlZD46OgpBZGRBc0ZpcnN0ICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJQ3Vyc29ySW1wbCYg Y3Vyc29yKQp7IFZJbmhlcml0ZWQ6OkFkZEFzRmlyc3QgKGVsZW1lbnQsIGN1cnNvcik7CiAgdGhp cy0+Tm90aWZ5T2ZBZGRBdCAoY3Vyc29yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+ CnZvaWQKSVZTZXF1ZW5jZUltcGwgPFZJbmhlcml0ZWQ+OjoKQWRkQXNMYXN0ICh2b2lkIGNvbnN0 KiBlbGVtZW50LCBJQ3Vyc29ySW1wbCYgY3Vyc29yKQp7IFZJbmhlcml0ZWQ6OkFkZEFzTGFzdCAo ZWxlbWVudCwgY3Vyc29yKTsKICB0aGlzLT5Ob3RpZnlPZkFkZEF0IChjdXJzb3IpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8VkluaGVyaXRlZD46 OgpBZGRBc05leHQgKHZvaWQgY29uc3QqIGVsZW1lbnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsg VkluaGVyaXRlZDo6QWRkQXNOZXh0IChlbGVtZW50LCBjdXJzb3IpOwogIHRoaXMtPk5vdGlmeU9m QWRkQXQgKGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBWSW5oZXJpdGVkPgp2b2lkCklWU2Vx dWVuY2VJbXBsIDxWSW5oZXJpdGVkPjo6CkFkZEFzUHJldmlvdXMgKHZvaWQgY29uc3QqIGVsZW1l bnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsgVkluaGVyaXRlZDo6QWRkQXNQcmV2aW91cyAoZWxl bWVudCwgY3Vyc29yKTsKICB0aGlzLT5Ob3RpZnlPZkFkZEF0IChjdXJzb3IpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8VkluaGVyaXRlZD46OgpB ZGRBdFBvc2l0aW9uIChJUG9zaXRpb24gcG9zaXRpb24sCiAgICAgICAgICAgICAgIHZvaWQgY29u c3QqIGVsZW1lbnQsCiAgICAgICAgICAgICAgIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsgVkluaGVy aXRlZDo6QWRkQXRQb3NpdGlvbiAocG9zaXRpb24sIGVsZW1lbnQsIGN1cnNvcik7CiAgdGhpcy0+ Tm90aWZ5T2ZBZGRBdCAoY3Vyc29yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CnZv aWQKSVZTZXF1ZW5jZUltcGwgPFZJbmhlcml0ZWQ+OjoKQ29weSAoSUFDb2xsZWN0aW9uSW1wbCBj b25zdCYgY29sbGVjdGlvbikKeyBib29sIGlzRW5hYmxlZCA9IHRoaXMtPklzRW5hYmxlZEZvck5v dGlmaWNhdGlvbiAoKTsKICB0aGlzLT5EaXNhYmxlTm90aWZpY2F0aW9uICgpOwogIFZJbmhlcml0 ZWQ6OkNvcHkgKGNvbGxlY3Rpb24pOwogIHRoaXMtPkVuYWJsZU5vdGlmaWNhdGlvbiAoaXNFbmFi bGVkKTsKICB0aGlzLT5Ob3RpZnlPZk1vZGlmaWNhdGlvbiAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz IFZJbmhlcml0ZWQ+CklOdW1iZXIKSVZTZXF1ZW5jZUltcGwgPFZJbmhlcml0ZWQ+OjoKUmVtb3Zl QWxsICgpCnsgSU51bWJlciByZXN1bHQgPSBWSW5oZXJpdGVkOjpSZW1vdmVBbGwgKCk7CiAgaWYg KHJlc3VsdCA+IDApIHsKICAgIHRoaXMtPk5vdGlmeU9mTW9kaWZpY2F0aW9uICgpOwogIH0KICBy ZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4KSU51bWJlcgpJVlNl cXVlbmNlSW1wbCA8VkluaGVyaXRlZD46OgpSZW1vdmVBbGwgKElQcmVkRnVuYyBwcmVkRnVuYywg dm9pZCogYWRkQXJnKQp7IElOdW1iZXIgcmVzdWx0ID0gVkluaGVyaXRlZDo6UmVtb3ZlQWxsIChw cmVkRnVuYywgYWRkQXJnKTsKICBpZiAocmVzdWx0ID4gMCkgewogICAgdGhpcy0+Tm90aWZ5T2ZN b2RpZmljYXRpb24gKCk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBW SW5oZXJpdGVkPgp2b2lkCklWU2VxdWVuY2VJbXBsIDxWSW5oZXJpdGVkPjo6ClJlbW92ZUF0IChJ Q3Vyc29ySW1wbCYgY3Vyc29yKQp7IHRoaXMtPk5vdGlmeU9mUmVtb3ZlQXQgKGN1cnNvcik7CiAg VkluaGVyaXRlZDo6UmVtb3ZlQXQgKGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBWSW5oZXJp dGVkPgp2b2lkCklWU2VxdWVuY2VJbXBsIDxWSW5oZXJpdGVkPjo6ClJlbW92ZUF0UG9zaXRpb24g KElQb3NpdGlvbiBwb3NpdGlvbikKeyB0aGlzLT5TZXRUb1Bvc2l0aW9uIChwb3NpdGlvbiwgdGhp cy0+Q3Vyc29yT2YgKCp0aGlzKSk7CiAgdGhpcy0+Tm90aWZ5T2ZSZW1vdmVBdCAodGhpcy0+Q3Vy c29yT2YgKCp0aGlzKSk7CiAgVkluaGVyaXRlZDo6UmVtb3ZlQXRQb3NpdGlvbiAocG9zaXRpb24p Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8Vklu aGVyaXRlZD46OgpSZW1vdmVGaXJzdCAoKQp7IHRoaXMtPlNldFRvRmlyc3QgKHRoaXMtPkN1cnNv ck9mICgqdGhpcykpOwogIHRoaXMtPk5vdGlmeU9mUmVtb3ZlQXQgKHRoaXMtPkN1cnNvck9mICgq dGhpcykpOwogIFZJbmhlcml0ZWQ6OlJlbW92ZUZpcnN0ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg VkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1wbCA8VkluaGVyaXRlZD46OgpSZW1vdmVMYXN0 ICgpCnsgdGhpcy0+U2V0VG9MYXN0ICh0aGlzLT5DdXJzb3JPZiAoKnRoaXMpKTsKICB0aGlzLT5O b3RpZnlPZlJlbW92ZUF0ICh0aGlzLT5DdXJzb3JPZiAoKnRoaXMpKTsKICBWSW5oZXJpdGVkOjpS ZW1vdmVMYXN0ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVl bmNlSW1wbCA8VkluaGVyaXRlZD46OgpSZXBsYWNlQXQgKElDdXJzb3JJbXBsIGNvbnN0JiBjdXJz b3IsIHZvaWQgY29uc3QqIGVsZW1lbnQpCnsKCgoKICB0aGlzLT5Ob3RpZnlPZlJlcGxhY2VBdCAo Y3Vyc29yLCBlbGVtZW50KTsKCiAgVkluaGVyaXRlZDo6UmVwbGFjZUF0IChjdXJzb3IsIGVsZW1l bnQpOwoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4Kdm9pZApJVlNlcXVlbmNlSW1w bCA8VkluaGVyaXRlZD46OgpSZXZlcnNlICgpCnsgVkluaGVyaXRlZDo6UmV2ZXJzZSAoKTsKICB0 aGlzLT5Ob3RpZnlPZk1vZGlmaWNhdGlvbiAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0 ZWQ+CnZvaWQKSVZTZXF1ZW5jZUltcGwgPFZJbmhlcml0ZWQ+OjoKU29ydCAoSUNvbXBGdW5jIGNv bXBGdW5jLCB2b2lkKiBhZGRBcmcpCnsgVkluaGVyaXRlZDo6U29ydCAoY29tcEZ1bmMsIGFkZEFy Zyk7CiAgdGhpcy0+Tm90aWZ5T2ZNb2RpZmljYXRpb24gKCk7Cn0KCgoKCgoKIyAxNjQgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2c2VxLmgiIDIK CgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKIAoKIyAzMCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pc2VxLmgiIDIKCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzZXFsc3QuaCIgMQoKCgogCiAKIAoKCgoKCgoK CgoKCiAKIAogCiAKIAogCgogCgoKCgoKCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21h IHJlcG9ydChsZXZlbCwgX19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJl c3RvcmUpCiAKCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NI RU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKCgoKCiAKCiAKIAoKIApjbGFzcyBJU2Vx dWVuY2VBc0xpc3RJbXBsOwogCgogCgpzdHJ1Y3QgSUFTZXF1ZW5jZUFzTGlzdE5vZGVJbXBsIHsK ICBJQVNlcXVlbmNlQXNMaXN0Tm9kZUltcGwoKTsKICBJQVNlcXVlbmNlQXNMaXN0Tm9kZUltcGwK ICAgICAgICAgICppdk5leHQsCiAgICAgICAgICAqaXZQcmV2aW91czsKfTsKCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50PgpzdHJ1Y3QgSVNlcXVlbmNlQXNMaXN0Tm9kZUltcGwgOiBwdWJsaWMgSUFT ZXF1ZW5jZUFzTGlzdE5vZGVJbXBsIHsKCiAgRWxlbWVudCAgaXZFbGVtZW50OwoKICAgICAgICAg ICBJU2VxdWVuY2VBc0xpc3ROb2RlSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVs ZW1lbnQgY29uc3QmKTsKCiAgICAgICAgICB+SVNlcXVlbmNlQXNMaXN0Tm9kZUltcGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgpOwoKCiAgdm9pZCAgICAgU3RyZWFtSW4gICAgICAgICAo SUFDb2xsZWN0aW9uU3RyZWFtZXIqLCBJRGF0YVN0cmVhbSYpOwoKCgoKCgoKfTsKCgoKCgoKCgoK CmNsYXNzICAgSVNlcXVlbmNlQXNMaXN0Q3Vyc29ySW1wbCA6IHB1YmxpYyBJQ3Vyc29ySW1wbCB7 CgogIHR5cGVkZWYgIElDdXJzb3JJbXBsIEluaGVyaXRlZDsKCiAgdHlwZWRlZiAgSVNlcXVlbmNl QXNMaXN0Q3Vyc29ySW1wbCBTZWxmOwoKcHVibGljOgoKICAgICAgICAgICBJU2VxdWVuY2VBc0xp c3RDdXJzb3JJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUFDb2xsZWN0aW9uSW1w bCBjb25zdCYpOwoKICAgICAgICAgICBJU2VxdWVuY2VBc0xpc3RDdXJzb3JJbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoSVNlcXVlbmNlQXNMaXN0Q3Vyc29ySW1wbCBjb25zdCYpOwoK ICAgICAgICAgIH5JU2VxdWVuY2VBc0xpc3RDdXJzb3JJbXBsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKTsKCiAgSUN1cnNvckltcGwqCiAgICAgICAgICAgQ2xvbmUgICAgICAgICAgICAo KSBjb25zdDsKCiAgdm9pZCAgICAgQ29weSAgICAgICAgICAgICAoSUN1cnNvckltcGwgY29uc3Qm KTsKCiAgdm9pZCAgICAgSW52YWxpZGF0ZSAgICAgICAoKTsKCiAgYm9vbCBJc0luQmV0d2VlbiAg ICAgICgpIGNvbnN0OwoKICBib29sIElzVmFsaWQgICAgICAgICAgKCkgY29uc3Q7CgogIHZvaWQg ICAgIG9wZXJhdG9yPSAgICAgICAgKElTZXF1ZW5jZUFzTGlzdEN1cnNvckltcGwgY29uc3QmKTsK CiAgYm9vbCBvcGVyYXRvcj09ICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNvbnN0OwoKcHJv dGVjdGVkOgoKcHJpdmF0ZToKCiAgSUFTZXF1ZW5jZUFzTGlzdE5vZGVJbXBsKgogICAgICAgICAg IGl2Tm9kZTsKCiAgZnJpZW5kCiAgY2xhc3MgICAgSVNlcXVlbmNlQXNMaXN0SW1wbDsKCgoKCgoK CgoKCn07CgojIDIyMyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9paXNlcWxzdC5oIgoKCmNsYXNzIElBU2VxdWVuY2VBc0xpc3RPcHM7CgpjbGFzcyAg IElTZXF1ZW5jZUFzTGlzdEltcGwgOiBwdWJsaWMgSUFTZXF1ZW5jZUltcGwgewoKICB0eXBlZGVm ICBJQVNlcXVlbmNlSW1wbCBJbmhlcml0ZWQ7CgogIHR5cGVkZWYgIElTZXF1ZW5jZUFzTGlzdElt cGwgU2VsZjsKCiAgdHlwZWRlZiAgSUFTZXF1ZW5jZUFzTGlzdE5vZGVJbXBsIE5vZGU7CgpwdWJs aWM6CgogIHR5cGVkZWYgIElBU2VxdWVuY2VBc0xpc3RPcHMgT3BzOwoKICB0eXBlZGVmICBJU2Vx dWVuY2VBc0xpc3RDdXJzb3JJbXBsIEN1cnNvcjsKCgoKCiAgdHlwZWRlZiAgSVNlcXVlbmNlQXNM aXN0Q3Vyc29ySW1wbCBNbmdDdXJzb3I7CgoKICAgICAgICAgICBJU2VxdWVuY2VBc0xpc3RJbXBs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT3BzJiwgSU51bWJlcik7CgogICAgICAgICAg IElTZXF1ZW5jZUFzTGlzdEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHMmLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTZXF1ZW5jZUFzTGlzdEltcGwgY29uc3QmKTsK CiAgICAgICAgICB+SVNlcXVlbmNlQXNMaXN0SW1wbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCk7CgogIGJvb2wgQWRkICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBs Jik7CgogIHZvaWQgICAgIEFkZEFsbEZyb20gICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3Qm KTsKCiAgdm9pZCAgICAgQWRkQXNGaXJzdCAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBs Jik7CgogIHZvaWQgICAgIEFkZEFzTGFzdCAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1w bCYpOwoKICB2b2lkICAgICBBZGRBc05leHQgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvcklt cGwmKTsKCiAgdm9pZCAgICAgQWRkQXNQcmV2aW91cyAgICAodm9pZCBjb25zdCosIElDdXJzb3JJ bXBsJik7CgogIHZvaWQgICAgIEFkZEF0UG9zaXRpb24gICAgKElQb3NpdGlvbiwgdm9pZCBjb25z dCosIElDdXJzb3JJbXBsJik7CgogIGJvb2wgQWxsRWxlbWVudHNEbyAgICAoSUFwcGxGdW5jLCB2 b2lkKik7CgogIHZvaWQqICAgIEFueSAgICAgICAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgQ2hl Y2tDdXJzb3IgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgY2hhciBjb25zdCoK ICAgICAgICAgICBDbGFzc05hbWUgICAgICAgICgpIGNvbnN0OwoKICBJQUNvbGxlY3Rpb25JbXBs KgogICAgICAgICAgIENsb25lICAgICAgICAgICAgKCkgY29uc3Q7CgogIHZvaWQgICAgIENvcHkg ICAgICAgICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKTsKCiAgQ3Vyc29yKiAgQ3JlYXRl Q3Vyc29yICAgICAoKSBjb25zdDsKCiAgTW5nQ3Vyc29yKgogICAgICAgICAgIENyZWF0ZU1uZ0N1 cnNvciAgKCkgY29uc3Q7CgogIHZvaWQqICAgIEVsZW1lbnRBdCAgICAgICAgKElDdXJzb3JJbXBs IGNvbnN0JikgY29uc3Q7CgogIHZvaWQqICAgIEVsZW1lbnRBdFBvc2l0aW9uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoSVBvc2l0aW9uKSBjb25zdDsKCiAgdm9pZCogICAgRmlyc3QgICAg ICAgICAgICAoKSBjb25zdDsKCiAgYm9vbCBJc0JvdW5kZWQgICAgICAgICgpIGNvbnN0OwoKICBi b29sIElzQ29uc2lzdGVudCAgICAgKCkgY29uc3Q7CgogIGJvb2wgSXNFbXB0eSAgICAgICAgICAo KSBjb25zdDsKCiAgYm9vbCBJc0ZpcnN0QXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNv bnN0OwoKICBib29sIElzRnVsbCAgICAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgSXNMYXN0QXQg ICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgdm9pZCogICAgTGFzdCAgICAg ICAgICAgICAoKSBjb25zdDsKCiAgSU51bWJlciAgTnVtYmVyT2ZFbGVtZW50cyAoKSBjb25zdDsK CiAgSVBvc2l0aW9uCiAgICAgICAgICAgUG9zaXRpb25BdCAgICAgICAoSUN1cnNvckltcGwgY29u c3QmKSBjb25zdDsKCiAgSU51bWJlciAgUmVtb3ZlQWxsICAgICAgICAoKTsKCiAgSU51bWJlciAg UmVtb3ZlQWxsICAgICAgICAoSVByZWRGdW5jLCB2b2lkKik7CgogIHZvaWQgICAgIFJlbW92ZUF0 ICAgICAgICAgKElDdXJzb3JJbXBsJik7CgogIHZvaWQgICAgIFJlbW92ZUF0UG9zaXRpb24gKElQ b3NpdGlvbik7CgogIHZvaWQgICAgIFJlbW92ZUZpcnN0ICAgICAgKCk7CgogIHZvaWQgICAgIFJl bW92ZUxhc3QgICAgICAgKCk7CgogIHZvaWQgICAgIFJlcGxhY2VBdCAgICAgICAgKElDdXJzb3JJ bXBsIGNvbnN0Jiwgdm9pZCBjb25zdCopOwoKICB2b2lkICAgICBSZXBsYWNlQXRQb3NpdGlvbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQb3NpdGlvbiwgdm9pZCBjb25zdCopOwoKICB2 b2lkICAgICBSZXZlcnNlICAgICAgICAgICgpOwoKICBib29sIFNldFRvRmlyc3QgICAgICAgKElD dXJzb3JJbXBsJikgY29uc3Q7CgogIGJvb2wgU2V0VG9MYXN0ICAgICAgICAoSUN1cnNvckltcGwm KSBjb25zdDsKCiAgYm9vbCBTZXRUb05leHQgICAgICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoK ICB2b2lkICAgICBTZXRUb1Bvc2l0aW9uICAgIChJUG9zaXRpb24sIElDdXJzb3JJbXBsJikgY29u c3Q7CgogIGJvb2wgU2V0VG9QcmV2aW91cyAgICAoSUN1cnNvckltcGwmKSBjb25zdDsKCiAgdm9p ZCAgICAgU29ydCAgICAgICAgICAgICAoSUNvbXBGdW5jLCB2b2lkKik7CgogIHZvaWQgICAgIG9w ZXJhdG9yPSAgICAgICAgKElTZXF1ZW5jZUFzTGlzdEltcGwgY29uc3QmKTsKCnByb3RlY3RlZDoK CiAgdm9pZCAgICAgQXNzaWduICAgICAgICAgICAodm9pZCosIHZvaWQgY29uc3QqKSBjb25zdDsK CiAgdm9pZCogICAgQ3JlYXRlTm9kZSAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICB2b2lk ICAgICBEZWxldGVOb2RlICAgICAgICh2b2lkKikgY29uc3Q7CgoKcHJpdmF0ZToKCiAgZW51bSB7 IGtPcmlnaW5hbFZlcnNpb24gfTsKCiAgc3RhdGljCiAgY2hhciBjb25zdCoKICAgICAgICAgICBj dkNsYXNzTmFtZTsKCiAgTW5nQ3Vyc29yKgogICAgICAgICAgIGl2TW5nQ3Vyc29yczsKCiAgTm9k ZSogICAgaXZGaXJzdDsKCiAgTm9kZSogICAgaXZMYXN0OwoKICBJTnVtYmVyICBpdk51bWJlck9m RWxlbWVudHM7CgogIHZvaWQgICAgIEFkZEFzTmV4dE5vZGUgICAgKE5vZGUqLCBOb2RlKik7Cgog IHZvaWQqICAgIEVsZW1lbnRPZiAgICAgICAgKE5vZGUgY29uc3QqKSBjb25zdDsKCiAgc3RhdGlj CiAgYm9vbCBJc0luQmV0d2VlbiAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpOwoKICBzdGF0aWMK ICBOb2RlKiYgICBOZXh0Tm9kZU9mICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpOwoKICBzdGF0 aWMKICBOb2RlKiYgICBOb2RlT2YgICAgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpOwoKICBz dGF0aWMKICBPcHMmICAgICBPcHNPZiAgICAgICAgICAgIChJU2VxdWVuY2VBc0xpc3RJbXBsIGNv bnN0Jik7CgogIHN0YXRpYwogIE5vZGUqJiAgIFByZXZpb3VzTm9kZU9mICAgKElDdXJzb3JJbXBs IGNvbnN0Jik7CgogIHZvaWQgICAgIFJlbW92ZU5vZGUgICAgICAgKE5vZGUqKTsKCiAgdm9pZCAg ICAgU2V0SW5CZXR3ZWVuICAgICAoTW5nQ3Vyc29yJikgY29uc3Q7CgogIHZvaWQgICAgIFNldE5v ZGVUb1Bvc2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVBvc2l0aW9uLCBOb2Rl KiYpIGNvbnN0OwoKICBmcmllbmQKICBjbGFzcyAgICBJU2VxdWVuY2VBc0xpc3RNbmdDdXJzb3JJ bXBsOwoKCnByb3RlY3RlZDoKICB2b2lkKiAgICBDcmVhdGVOb2RlV2l0aFN0cmVhbWVyCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChJRGF0YVN0cmVhbSYpIGNvbnN0OwoKcHVibGljOgog IElTdHJlYW1lclB0ciYKICAgICAgICAgICBTdHJlYW1lck9mICAgICAgIChJQUNvbGxlY3Rpb25J bXBsIGNvbnN0Jik7CgogIHZvaWQgICAgIFN0cmVhbUluICAgICAgICAgKElEYXRhU3RyZWFtJik7 CgogIHZvaWQgICAgIFN0cmVhbU91dCAgICAgICAgKElEYXRhU3RyZWFtJikgY29uc3Q7CgogIHZv aWQgICAgIEFkb3B0U3RyZWFtZXIgICAgKElBQ29sbGVjdGlvblN0cmVhbWVyKik7CgoKIyA0NTMg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzZXFs c3QuaCIKCgp9OwoKY2xhc3MgICBJQVNlcXVlbmNlQXNMaXN0T3BzIDogcHVibGljIElBQ29sbGVj dGlvbk9wcyB7CnB1YmxpYzoKCiAgdmlydHVhbCB+SUFTZXF1ZW5jZUFzTGlzdE9wcwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1YWwKICB2b2lkICAgICBBc3NpZ24gICAg ICAgICAgICh2b2lkKiwgdm9pZCBjb25zdCopIGNvbnN0ID0gMDsKCiAgdmlydHVhbAogIElBQ29s bGVjdGlvbkltcGwqCiAgICAgICAgICAgQ2xvbmUgICAgICAgICAgICAoKSBjb25zdCA9IDA7Cgog IHZpcnR1YWwKICB2b2lkKiAgICBDcmVhdGVOb2RlICAgICAgICh2b2lkIGNvbnN0KikgY29uc3Qg PSAwOwoKICB2aXJ0dWFsCiAgdm9pZCAgICAgRGVsZXRlTm9kZSAgICAgICAodm9pZCopIGNvbnN0 ID0gMDsKCiAgdmlydHVhbAogIHZvaWQqICAgIEVsZW1lbnRQdHIgICAgICAgKHZvaWQgY29uc3Qq KSBjb25zdCA9IDA7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElBU2VxdWVuY2VBc0xpc3RPcHMK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChib29sKTsKCnByaXZhdGU6CgogIGJvb2wgaXZD b250YWluc0RUU09iamVjdHM7CgogIGZyaWVuZAogIGNsYXNzICAgIElTZXF1ZW5jZUFzTGlzdElt cGw7CgoKcHVibGljOgogIHZpcnR1YWwKICB2b2lkKiAgICBDcmVhdGVOb2RlV2l0aFN0cmVhbWVy CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUFDb2xsZWN0aW9uU3RyZWFtZXIqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElEYXRhU3RyZWFtJikgY29uc3QgPSAwOwoKCiMgNTEz ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpc2Vx bHN0LmgiCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzLCBj bGFzcyBJbXBsZW1lbnRhdGlvbj4KY2xhc3MgICBJU2VxdWVuY2VBc0xpc3RPcHMgOiBwdWJsaWMg SUFTZXF1ZW5jZUFzTGlzdE9wcyB7CgogIHR5cGVkZWYgIElBU2VxdWVuY2VBc0xpc3RPcHMgSW5o ZXJpdGVkOwoKICB0eXBlZGVmICBJU2VxdWVuY2VBc0xpc3RPcHMKICAgICAgICAgICAgPEVsZW1l bnQsIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPiBTZWxmOwoKICB0eXBlZGVmICBJU2VxdWVu Y2VBc0xpc3ROb2RlSW1wbCA8RWxlbWVudD4gTm9kZTsKCnB1YmxpYzoKCiAgdHlwZWRlZiAgSW1w bGVtZW50YXRpb24gSW1wbFR5cGU7CgogIHR5cGVkZWYgIEVsZW1lbnQgRWxlbWVudFR5cGU7Cgog IHR5cGVkZWYgIHZvaWQgS2V5VHlwZTsKCiAgICAgICAgICAgSVNlcXVlbmNlQXNMaXN0T3BzCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoSU51bWJlcik7CgogICAgICAgICAgIElTZXF1ZW5j ZUFzTGlzdE9wcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOdW1iZXIsIHZvaWQqKTsK CiAgICAgICAgICAgSVNlcXVlbmNlQXNMaXN0T3BzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoSVNlcXVlbmNlQXNMaXN0T3BzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFbGVt ZW50LCBFbGVtZW50T3BzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZW50 YXRpb24+IGNvbnN0Jik7CgogIHZvaWQgICAgIEFzc2lnbiAgICAgICAgICAgKHZvaWQqLCB2b2lk IGNvbnN0KikgY29uc3Q7CgogIElBQ29sbGVjdGlvbkltcGwqCiAgICAgICAgICAgQ2xvbmUgICAg ICAgICAgICAoKSBjb25zdDsKCiAgdm9pZCogICAgQ3JlYXRlTm9kZSAgICAgICAodm9pZCBjb25z dCopIGNvbnN0OwoKICB2b2lkICAgICBEZWxldGVOb2RlICAgICAgICh2b2lkKikgY29uc3Q7Cgog IHZvaWQqICAgIEVsZW1lbnRQdHIgICAgICAgKHZvaWQgY29uc3QqKSBjb25zdDsKCiAgICAgICAg ICAgb3BlcmF0b3IgSW1wbGVtZW50YXRpb24qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KTsKCiMgNTc2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lpc2VxbHN0LmgiCgoKcHJvdGVjdGVkOgoKcHJpdmF0ZToKCiAgRWxlbWVudE9wcwogICAg ICAgICAgIGl2RWxlbWVudE9wczsKCiAgSW1wbGVtZW50YXRpb24KICAgICAgICAgICBpdkltcGw7 CgoKcHVibGljOgogIHZvaWQqICAgIENyZWF0ZU5vZGVXaXRoU3RyZWFtZXIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChJQUNvbGxlY3Rpb25TdHJlYW1lciosIElEYXRhU3RyZWFtJikgY29u c3Q7CgoKIyA2MDMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWlzZXFsc3QuaCIKCgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFnbWEgZW51bShwb3Ap CgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzZXFsc3QuaW5sIiAxCgoKCiAK IAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIAogCgogCgppbmxpbmUKSUFTZXF1ZW5jZUFz TGlzdE5vZGVJbXBsOjoKSUFTZXF1ZW5jZUFzTGlzdE5vZGVJbXBsKCkKOiBpdk5leHQgKDApLCBp dlByZXZpb3VzICgwKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSVNlcXVl bmNlQXNMaXN0Tm9kZUltcGwgPEVsZW1lbnQ+OjoKSVNlcXVlbmNlQXNMaXN0Tm9kZUltcGwgKEVs ZW1lbnQgY29uc3QmIGVsZW1lbnQpCjogSUFTZXF1ZW5jZUFzTGlzdE5vZGVJbXBsKCksIGl2RWxl bWVudCAoZWxlbWVudCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklTZXF1 ZW5jZUFzTGlzdE5vZGVJbXBsIDxFbGVtZW50Pjo6Cn5JU2VxdWVuY2VBc0xpc3ROb2RlSW1wbCAo KQp7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lIHZvaWQKSVNlcXVlbmNlQXNM aXN0Tm9kZUltcGw8RWxlbWVudD46OgpTdHJlYW1JbiAoSUFDb2xsZWN0aW9uU3RyZWFtZXIgKnN0 cmVhbWVyLCBJRGF0YVN0cmVhbSYgZnJvbVdoZXJlKQp7IGl2TmV4dCA9IGl2UHJldmlvdXMgPSAw OwogIHN0cmVhbWVyLT5zdHJlYW1Jbihmcm9tV2hlcmUsICZpdkVsZW1lbnQpOwp9CgoKIAogCiAK CiAKCmlubGluZSB2b2lkCklTZXF1ZW5jZUFzTGlzdEN1cnNvckltcGw6OgpJbnZhbGlkYXRlICgp CnsgaXZOb2RlID0gMDsKfQoKaW5saW5lIGJvb2wKSVNlcXVlbmNlQXNMaXN0Q3Vyc29ySW1wbDo6 CklzSW5CZXR3ZWVuICgpIGNvbnN0CnsgcmV0dXJuIGZhbHNlOwp9CgppbmxpbmUgYm9vbApJU2Vx dWVuY2VBc0xpc3RDdXJzb3JJbXBsOjoKSXNWYWxpZCAoKSBjb25zdAp7IHJldHVybiAoaXZOb2Rl ICE9IDApOwp9CgppbmxpbmUgdm9pZApJU2VxdWVuY2VBc0xpc3RDdXJzb3JJbXBsOjoKb3BlcmF0 b3I9IChJU2VxdWVuY2VBc0xpc3RDdXJzb3JJbXBsIGNvbnN0JiBjdXJzb3IpCnsgSW5oZXJpdGVk OjpvcGVyYXRvcj0gKGN1cnNvcik7CiAgaXZOb2RlID0gY3Vyc29yLml2Tm9kZTsKfQoKaW5saW5l IGJvb2wKSVNlcXVlbmNlQXNMaXN0Q3Vyc29ySW1wbDo6Cm9wZXJhdG9yPT0gKElDdXJzb3JJbXBs IGNvbnN0JiBjdXJzb3IpIGNvbnN0CnsgcmV0dXJuIChJbmhlcml0ZWQ6Om9wZXJhdG9yPT0gKGN1 cnNvcikgJiYKICAgICAgICAgIGl2Tm9kZSA9PSAoKFNlbGYgY29uc3QmKWN1cnNvcikuaXZOb2Rl KTsKfQoKIAogCiAKCiAKCmlubGluZQpJQVNlcXVlbmNlQXNMaXN0T3BzOjoKfklBU2VxdWVuY2VB c0xpc3RPcHMgKCkKewp9CgogCgppbmxpbmUKSUFTZXF1ZW5jZUFzTGlzdE9wczo6CklBU2VxdWVu Y2VBc0xpc3RPcHMgKGJvb2wgY29udGFpbnNEVFNPYmplY3RzKQo6IGl2Q29udGFpbnNEVFNPYmpl Y3RzIChjb250YWluc0RUU09iamVjdHMpCnsKfQoKIAoKIyA2MzIgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzZXFsc3QuaCIgMgoKCgoKCgojIDEg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlzZXFs c3QuYyIgMQogCiAKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgojIDEgIi91c3IvbGliL2djYy1saWIv czM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldy5oIiAxIDMKIAoKCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXciIDEgMwogCiAK CgoKCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1 c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2Nj LWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgOCAiL3Vz ci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvbmV3IiAyIDMKCgoK ZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJs aWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBj b25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0IG5vdGhy b3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lk ICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdfaGFu ZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93IChzdGQ6OmJh ZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9h bGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0 b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3Qs IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNp emVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0 ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig ZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKIAppbmxp bmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1 cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqcGxh Y2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGli L3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMiAzCgoKdXNpbmcgc3RkOjpu ZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyAyMiAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paXNlcWxzdC5jIiAyCgoK CgoKCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9wcywg Y2xhc3MgSW1wbGVtZW50YXRpb24+CklTZXF1ZW5jZUFzTGlzdE9wcyA8RWxlbWVudCwgRWxlbWVu dE9wcywgSW1wbGVtZW50YXRpb24+OjoKSVNlcXVlbmNlQXNMaXN0T3BzIChJTnVtYmVyIG51bWJl ck9mRWxlbWVudHMpCjogSW5oZXJpdGVkICgwICksCiAgaXZFbGVtZW50T3BzICgpLAogIGl2SW1w bCAoKnRoaXMsIG51bWJlck9mRWxlbWVudHMpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQs IGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgpJU2VxdWVuY2VBc0xpc3RP cHMgPEVsZW1lbnQsIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPjo6CklTZXF1ZW5jZUFzTGlz dE9wcyAoSU51bWJlciBudW1iZXJPZkVsZW1lbnRzLCB2b2lkKiBvcHNBcmcpCjogSW5oZXJpdGVk ICgwICksCiAgaXZFbGVtZW50T3BzIChvcHNBcmcpLAogIGl2SW1wbCAoKnRoaXMsIG51bWJlck9m RWxlbWVudHMpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHMs IGNsYXNzIEltcGxlbWVudGF0aW9uPgpJU2VxdWVuY2VBc0xpc3RPcHMgPEVsZW1lbnQsIEVsZW1l bnRPcHMsIEltcGxlbWVudGF0aW9uPjo6CklTZXF1ZW5jZUFzTGlzdE9wcwogIChJU2VxdWVuY2VB c0xpc3RPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHMsCiAgICAgICAgICAgICAgICAgICAgICAgSW1w bGVtZW50YXRpb24+IGNvbnN0JiBjb2xsZWN0aW9uKQo6IEluaGVyaXRlZCAoMCApLAogIGl2RWxl bWVudE9wcyAoY29sbGVjdGlvbi5pdkVsZW1lbnRPcHMpLAogIGl2SW1wbCAoKnRoaXMsIGNvbGxl Y3Rpb24uaXZJbXBsKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50 T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4Kdm9pZApJU2VxdWVuY2VBc0xpc3RPcHMgPEVsZW1l bnQsIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPjo6CkFzc2lnbiAodm9pZCogZWxlbWVudDEs IHZvaWQgY29uc3QqIGVsZW1lbnQyKSBjb25zdAp7IGl2RWxlbWVudE9wcy5Bc3NpZ24gKCooRWxl bWVudCopZWxlbWVudDEsCiAgICAgICAgICAgICAgICAgICAgICAgKihFbGVtZW50IGNvbnN0Kill bGVtZW50Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzLCBj bGFzcyBJbXBsZW1lbnRhdGlvbj4KSUFDb2xsZWN0aW9uSW1wbCoKSVNlcXVlbmNlQXNMaXN0T3Bz IDxFbGVtZW50LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj46OgpDbG9uZSAoKSBjb25zdAp7 IHJldHVybiAoSW1wbGVtZW50YXRpb24qKSAqbmV3IFNlbGYgKCp0aGlzKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgp2 b2lkKgpJU2VxdWVuY2VBc0xpc3RPcHMgPEVsZW1lbnQsIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0 aW9uPjo6CkNyZWF0ZU5vZGUgKHZvaWQgY29uc3QqIGVsZW1lbnQpIGNvbnN0CnsKICB2b2lkKiBu b2RlID0gaXZFbGVtZW50T3BzLkFsbG9jYXRlIChzaXplb2YgKE5vZGUpCgoKCgoKCgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgcmV0dXJuIG5ldyAoaXZJbXBsLkNo ZWNrUG9pbnRlciAobm9kZSkpCiAgICAgICAgICAgICAgTm9kZSAoKihFbGVtZW50IGNvbnN0Kill bGVtZW50KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzLCBj bGFzcyBJbXBsZW1lbnRhdGlvbj4Kdm9pZCoKSVNlcXVlbmNlQXNMaXN0T3BzIDxFbGVtZW50LCBF bGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj46OgpDcmVhdGVOb2RlV2l0aFN0cmVhbWVyKElBQ29s bGVjdGlvblN0cmVhbWVyICpzdHJlYW1lciwKICAgICAgICAgICAgICAgICAgICAgICBJRGF0YVN0 cmVhbSYgZnJvbVdoZXJlKSBjb25zdAp7IHZvaWQqIG5vZGUgPSBpdkVsZW1lbnRPcHMuQWxsb2Nh dGUgKHNpemVvZiAoTm9kZSkKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICBpdkltcGwuQ2hlY2tQb2ludGVyIChub2RlKTsKICAoKE5vZGUqKW5vZGUpLT5TdHJl YW1JbiAoc3RyZWFtZXIsIGZyb21XaGVyZSk7CiAgcmV0dXJuIG5vZGU7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9wcywgY2xhc3MgSW1wbGVtZW50YXRpb24+CnZv aWQKSVNlcXVlbmNlQXNMaXN0T3BzIDxFbGVtZW50LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlv bj46OgpEZWxldGVOb2RlICh2b2lkKiBub2RlKSBjb25zdAp7ICgoTm9kZSopbm9kZSktPn5Ob2Rl ICgpOwogIGl2RWxlbWVudE9wcy5EZWFsbG9jYXRlIChub2RlCgoKCgoKICAgICAgICAgICAgICAg ICAgICAgICAgICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgRWxlbWVudE9w cywgY2xhc3MgSW1wbGVtZW50YXRpb24+CnZvaWQqCklTZXF1ZW5jZUFzTGlzdE9wcyA8RWxlbWVu dCwgRWxlbWVudE9wcywgSW1wbGVtZW50YXRpb24+OjoKRWxlbWVudFB0ciAodm9pZCBjb25zdCog bm9kZSkgY29uc3QKeyByZXR1cm4gKHZvaWQgKikoJigoKE5vZGUgY29uc3QqKW5vZGUpLT5pdkVs ZW1lbnQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHMsIGNs YXNzIEltcGxlbWVudGF0aW9uPgpJU2VxdWVuY2VBc0xpc3RPcHMgPEVsZW1lbnQsIEVsZW1lbnRP cHMsIEltcGxlbWVudGF0aW9uPjo6Cm9wZXJhdG9yIEltcGxlbWVudGF0aW9uKiAoKQp7IGl2SW1w bC5DaGVja1BvaW50ZXIgKHRoaXMpOwogIHJldHVybiAmaXZJbXBsOwp9CgoKCgoKCiMgNjM4ICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpc2VxbHN0 LmgiIDIKCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJh Z21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzMiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc2VxLmgiIDIKCgoKCgoKIAoKIAojcHJhZ21hIGluZm8o bm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNw cmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1F TUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKCgoKCgoKCgogCgog CiAKCgogCgogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3Bz PgpjbGFzcyBJR1NlcXVlbmNlQ3Vyc29yOwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNz IEVsZW1lbnRPcHM+CmNsYXNzIElHU2VxdWVuY2UgOgogIHB1YmxpYyBJQVNlcXVlbmNlIDxFbGVt ZW50PiB7CnByb3RlY3RlZDoKCiAgdHlwZWRlZiAgSUdTZXF1ZW5jZSA8RWxlbWVudCwgRWxlbWVu dE9wcz4gU2VsZjsKCiAgdHlwZWRlZiAgSVNlcXVlbmNlQXNMaXN0SW1wbCBQdXJlSW1wbGVtZW50 YXRpb247CgoKICB0eXBlZGVmICBQdXJlSW1wbGVtZW50YXRpb24gSW1wbGVtZW50YXRpb247CgoK CgoKCgoKCgoKICAgICAgICAgICB0eXBlZGVmICBJU2VxdWVuY2VBc0xpc3RPcHMgPCBFbGVtZW50 ICwgSVdTdGRPcHMgPCBFbGVtZW50ICwgICBFbGVtZW50T3BzID4sIEltcGxlbWVudGF0aW9uPiBJ bnN0YW50aWF0aW9uIDsKCnB1YmxpYzoKCgogIHR5cGVkZWYgSUNvbGxlY3Rpb25HdWFyZDxFbGVt ZW50PiBHdWFyZDsKCgogIHR5cGVkZWYgIElHU2VxdWVuY2VDdXJzb3IKICAgICAgICAgICAgPEVs ZW1lbnQsIEVsZW1lbnRPcHM+IEN1cnNvcjsKCgoKCgoKICAgICAgICAgICBJR1NlcXVlbmNlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoSU51bWJlciA9IDEwMCk7CgogICAgICAgICAgIElH U2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJR1NlcXVlbmNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVs ZW1lbnQsIEVsZW1lbnRPcHM+IGNvbnN0Jik7CgogIElHU2VxdWVuY2UgPEVsZW1lbnQsIEVsZW1l bnRPcHM+JgogICAgICAgICAgIG9wZXJhdG9yPSAgICAgICAgKElHU2VxdWVuY2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxl bWVudCwgRWxlbWVudE9wcz4gY29uc3QmKTsKCiMgMTUzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzZXEuaCIKCgpwcm90ZWN0ZWQ6CgogICAgICAg ICAgIElHU2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXJlSW1wbGVtZW50 YXRpb24mKTsKCiAgc3RhdGljCiAgSW1wbGVtZW50YXRpb24mCiAgICAgICAgICAgSW1wbE9mICAg ICAgICAgICAoSUdTZXF1ZW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LCBFbGVtZW50T3BzPiBjb25zdCYpOwoK cHJpdmF0ZToKCiAgZnJpZW5kCiAgY2xhc3MgICAgSUdTZXF1ZW5jZUN1cnNvciA8RWxlbWVudCwg RWxlbWVudE9wcz47CgoKCgoKCgojIDE5MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9pc2VxLmgiCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 LCBjbGFzcyBFbGVtZW50T3BzPgpjbGFzcyBJR1NlcXVlbmNlQ3Vyc29yIDoKICBwdWJsaWMgSU9y ZGVyZWRDdXJzb3IgPEVsZW1lbnQ+IHsKCiAgdHlwZWRlZiAgSU9yZGVyZWRDdXJzb3IgPEVsZW1l bnQ+IEluaGVyaXRlZDsKCiAgdHlwZWRlZiB0eXBlbmFtZSAgSUdTZXF1ZW5jZQogICAgICAgICAg ICA8RWxlbWVudCwgRWxlbWVudE9wcz46OgogICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uOjpD dXJzb3IgSW1wbGVtZW50YXRpb247CgpwdWJsaWM6CgogICAgICAgICAgIElHU2VxdWVuY2VDdXJz b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJR1NlcXVlbmNlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQs IEVsZW1lbnRPcHM+IGNvbnN0Jik7CgogIElHU2VxdWVuY2VDdXJzb3IgPEVsZW1lbnQsIEVsZW1l bnRPcHM+JgogICAgICAgICAgIG9wZXJhdG9yPSAgICAgICAgKElHU2VxdWVuY2VDdXJzb3IKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRWxlbWVudCwgRWxlbWVudE9wcz4gY29uc3QmKTsKCnByb3RlY3RlZDoKCiAgICAgICAgICAg SUdTZXF1ZW5jZUN1cnNvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElDdXJzb3JJbXBs Kik7Cgpwcml2YXRlOgoKIyAyMzUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaXNlcS5oIgoKCn07CgojIDI4MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9s aW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc2VxLmgiCgoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQ+CmNsYXNzIElTZXF1ZW5jZSA6CiAgcHVibGljIElHU2VxdWVuY2UKICAgICAgICAgIDxF bGVtZW50LCBJU3RkT3BzIDxFbGVtZW50PiA+IHsKCiAgdHlwZWRlZiAgSUdTZXF1ZW5jZQogICAg ICAgICAgICA8RWxlbWVudCwKICAgICAgICAgICAgIElTdGRPcHMgPEVsZW1lbnQ+ID4gSW5oZXJp dGVkOwoKcHJvdGVjdGVkOgoKICB0eXBlZGVmIHR5cGVuYW1lICBJbmhlcml0ZWQ6OlB1cmVJbXBs ZW1lbnRhdGlvbiBQdXJlSW1wbGVtZW50YXRpb247CgogIHR5cGVkZWYgIElTZXF1ZW5jZSA8RWxl bWVudD4gU2VsZjsKCgoKCgoKCnB1YmxpYzoKCgogIHR5cGVkZWYgSUNvbGxlY3Rpb25HdWFyZDxF bGVtZW50PiBHdWFyZDsKCgogICAgICAgICAgIElTZXF1ZW5jZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKElOdW1iZXIgPSAxMDApOwoKIyAzMjggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXNlcS5oIgoKCnByb3RlY3RlZDoKCiAgICAgICAg ICAgSVNlcXVlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXJlSW1wbGVtZW50 YXRpb24mKTsKCnByaXZhdGU6CgojIDM0NiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9pc2VxLmgiCgoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVu dCwgY2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSVZHU2VxdWVuY2UgOgogIHB1YmxpYyBJR1NlcXVl bmNlCiAgICAgICAgICA8RWxlbWVudCwgRWxlbWVudE9wcyA+IHsKCiAgdHlwZWRlZiAgSVZHU2Vx dWVuY2UKICAgICAgICAgICAgPEVsZW1lbnQsIEVsZW1lbnRPcHM+IEluaGVyaXRlZDsKCnByb3Rl Y3RlZDoKCiAgdHlwZWRlZiB0eXBlbmFtZSAKICAgICAgICAgICBJR1NlcXVlbmNlCiAgICAgICAg ICAgIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6UHVyZUltcGxlbWVudGF0aW9uIFB1cmVJbXBsZW1l bnRhdGlvbjsKCgogIHR5cGVkZWYgIElWU2VxdWVuY2VJbXBsCiAgICAgICAgICAgIDxQdXJlSW1w bGVtZW50YXRpb24+IEltcGxlbWVudGF0aW9uOwoKCgoKCgoKCgoKCgogICAgICAgICAgIHR5cGVk ZWYgIElTZXF1ZW5jZUFzTGlzdE9wcyA8IEVsZW1lbnQgLCBJV1N0ZE9wcyA8IEVsZW1lbnQgLCAg IEVsZW1lbnRPcHMgPiwgSW1wbGVtZW50YXRpb24+IEluc3RhbnRpYXRpb24gOwoKcHVibGljOgoK CiAgdHlwZWRlZiBJQ29sbGVjdGlvbkd1YXJkPEVsZW1lbnQ+IEd1YXJkOwoKCiAgICAgICAgICAg SVZHU2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTnVtYmVyID0gMTAwKTsK CiMgNDA3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lzZXEuaCIKCgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElWR1NlcXVlbmNlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChQdXJlSW1wbGVtZW50YXRpb24mKTsKCnByaXZhdGU6CgojIDQy NSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc2Vx LmgiCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgpjbGFzcyBJVlNlcXVlbmNlIDoKICBw dWJsaWMgSVZHU2VxdWVuY2UKICAgICAgICAgIDxFbGVtZW50LCBJU3RkT3BzIDxFbGVtZW50PiA+ IHsKCiAgdHlwZWRlZiAgSVZHU2VxdWVuY2UKICAgICAgICAgICAgPEVsZW1lbnQsCiAgICAgICAg ICAgICBJU3RkT3BzIDxFbGVtZW50PiA+IEluaGVyaXRlZDsKCnByb3RlY3RlZDoKCiAgdHlwZWRl ZiB0eXBlbmFtZSAgSW5oZXJpdGVkOjpQdXJlSW1wbGVtZW50YXRpb24gUHVyZUltcGxlbWVudGF0 aW9uOwoKICB0eXBlZGVmICBJVlNlcXVlbmNlIDxFbGVtZW50PiBTZWxmOwoKCgoKCgoKcHVibGlj OgoKCiAgdHlwZWRlZiBJQ29sbGVjdGlvbkd1YXJkPEVsZW1lbnQ+IEd1YXJkOwoKCiAgICAgICAg ICAgSVZTZXF1ZW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOdW1iZXIgPSAxMDAp OwoKIyA0NzUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaXNlcS5oIgoKCnByb3RlY3RlZDoKCiAgICAgICAgICAgSVZTZXF1ZW5jZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoUHVyZUltcGxlbWVudGF0aW9uJik7Cgpwcml2YXRlOgoKIyA0 OTMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXNl cS5oIgoKCn07CgoKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEg bmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lzZXEuaW5sIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoK IAogCiAKIAogCiAKCiAKIAogCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBF bGVtZW50T3BzPgppbmxpbmUKSUdTZXF1ZW5jZUN1cnNvciA8RWxlbWVudCwgRWxlbWVudE9wcz46 OgpJR1NlcXVlbmNlQ3Vyc29yCiAgKElHU2VxdWVuY2UKICAgIDxFbGVtZW50LCBFbGVtZW50T3Bz PiBjb25zdCYgY29sbGVjdGlvbikKOiBJT3JkZXJlZEN1cnNvciA8RWxlbWVudD4KICAgIChjb2xs ZWN0aW9uLml2SW1wbC0+Q3JlYXRlQ3Vyc29yICgpKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVt ZW50LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUgSUdTZXF1ZW5jZUN1cnNvciA8RWxlbWVudCwg RWxlbWVudE9wcz4mCklHU2VxdWVuY2VDdXJzb3IgPEVsZW1lbnQsIEVsZW1lbnRPcHM+OjoKb3Bl cmF0b3I9CiAgKElHU2VxdWVuY2VDdXJzb3IKICAgIDxFbGVtZW50LCBFbGVtZW50T3BzPiBjb25z dCYgY3Vyc29yKQp7IEluaGVyaXRlZDo6b3BlcmF0b3I9IChjdXJzb3IpOwogIHJldHVybiAqdGhp czsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHM+CmlubGlu ZQpJR1NlcXVlbmNlQ3Vyc29yIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6CklHU2VxdWVuY2VDdXJz b3IgKElDdXJzb3JJbXBsKiBpbXBsKQo6IElPcmRlcmVkQ3Vyc29yIDxFbGVtZW50PiAoaW1wbCkK ewp9CgojIDkyICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lzZXEuaW5sIgoKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBF bGVtZW50T3BzPgppbmxpbmUKSUdTZXF1ZW5jZSA8RWxlbWVudCwgRWxlbWVudE9wcz46OgpJR1Nl cXVlbmNlIChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMpCnsgdGhpcy0+U2V0SW1wbCAoKEltcGxl bWVudGF0aW9uKikgKm5ldwoKCgoKICAgICAgICAgICAgICAgIEluc3RhbnRpYXRpb24gKG51bWJl ck9mRWxlbWVudHMpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEVsZW1lbnRP cHM+CmlubGluZQpJR1NlcXVlbmNlIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6CklHU2VxdWVuY2UK ICAoSUdTZXF1ZW5jZQogICAgPEVsZW1lbnQsIEVsZW1lbnRPcHM+IGNvbnN0JiBjb2xsZWN0aW9u KQp7IHRoaXMtPkNsb25lSW1wbE9mIChjb2xsZWN0aW9uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQsIGNsYXNzIEVsZW1lbnRPcHM+CmlubGluZSBJR1NlcXVlbmNlIDxFbGVtZW50LCBFbGVt ZW50T3BzPiYKSUdTZXF1ZW5jZSA8RWxlbWVudCwgRWxlbWVudE9wcz46OgpvcGVyYXRvcj0gKElH U2VxdWVuY2UKICAgICAgICAgICAgPEVsZW1lbnQsIEVsZW1lbnRPcHM+IGNvbnN0JiBjb2xsZWN0 aW9uKQp7IHRoaXMtPkltcGxPZiAoKnRoaXMpLkNvcHkgKHRoaXMtPkltcGxPZiAoY29sbGVjdGlv bikpOwogIHJldHVybiAqdGhpczsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNz IEVsZW1lbnRPcHM+CmlubGluZQpJR1NlcXVlbmNlIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6CklH U2VxdWVuY2UgKFB1cmVJbXBsZW1lbnRhdGlvbiYgaW1wbCkKeyB0aGlzLT5TZXRJbXBsICgmaW1w bCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUg dHlwZW5hbWUgIElHU2VxdWVuY2UKIDxFbGVtZW50LCBFbGVtZW50T3BzPjo6SW1wbGVtZW50YXRp b24mCklHU2VxdWVuY2UgPEVsZW1lbnQsIEVsZW1lbnRPcHM+OjoKSW1wbE9mIChJR1NlcXVlbmNl CiAgICAgICAgIDxFbGVtZW50LCBFbGVtZW50T3BzPiBjb25zdCYgY29sbGVjdGlvbikKeyByZXR1 cm4gKihJbXBsZW1lbnRhdGlvbiopY29sbGVjdGlvbi5pdkltcGw7Cn0KCiAKIAogCgogCgp0ZW1w bGF0ZSA8Y2xhc3MgRWxlbWVudD4KaW5saW5lCklTZXF1ZW5jZSA8RWxlbWVudD46OgpJU2VxdWVu Y2UgKElOdW1iZXIgbnVtYmVyT2ZFbGVtZW50cykKOiBJR1NlcXVlbmNlCiAgIDxFbGVtZW50LCBJ U3RkT3BzIDxFbGVtZW50PiA+IChudW1iZXJPZkVsZW1lbnRzKQp7Cn0KCiAKCnRlbXBsYXRlIDxj bGFzcyBFbGVtZW50PgppbmxpbmUKSVNlcXVlbmNlIDxFbGVtZW50Pjo6CklTZXF1ZW5jZSAoUHVy ZUltcGxlbWVudGF0aW9uJiBpbXBsKQo6IElHU2VxdWVuY2UKICAgPEVsZW1lbnQsIElTdGRPcHMg PEVsZW1lbnQ+ID4gKGltcGwpCnsKfQoKCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVu dCwgY2xhc3MgRWxlbWVudE9wcz4KaW5saW5lCklWR1NlcXVlbmNlIDxFbGVtZW50LCBFbGVtZW50 T3BzPjo6CklWR1NlcXVlbmNlIChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMpCjogSUdTZXF1ZW5j ZQogICAgPEVsZW1lbnQsIEVsZW1lbnRPcHM+ICgqKEltcGxlbWVudGF0aW9uKikgKm5ldwoKCgoK ICAgICAgICAgICAgICAgIEluc3RhbnRpYXRpb24gKG51bWJlck9mRWxlbWVudHMpKQp7Cn0KCiAK CnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUKSVZHU2Vx dWVuY2UgPEVsZW1lbnQsIEVsZW1lbnRPcHM+OjoKSVZHU2VxdWVuY2UgKFB1cmVJbXBsZW1lbnRh dGlvbiYgaW1wbCkKOiBJR1NlcXVlbmNlCiAgICA8RWxlbWVudCwgRWxlbWVudE9wcz4gKGltcGwp CnsKfQoKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50PgppbmxpbmUKSVZTZXF1ZW5j ZSA8RWxlbWVudD46OgpJVlNlcXVlbmNlIChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMpCjogSVZH U2VxdWVuY2UKICAgPEVsZW1lbnQsIElTdGRPcHMgPEVsZW1lbnQ+ID4gKG51bWJlck9mRWxlbWVu dHMpCnsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJVlNlcXVlbmNlIDxF bGVtZW50Pjo6CklWU2VxdWVuY2UgKFB1cmVJbXBsZW1lbnRhdGlvbiYgaW1wbCkKOiBJVkdTZXF1 ZW5jZQogICA8RWxlbWVudCwgSVN0ZE9wcyA8RWxlbWVudD4gPiAoaW1wbCkKewp9CgoKIAoKIyA1 MjQgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXNl cS5oIiAyCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFn bWEgaW5mbyhyZXN0b3JlKQogCgoKCiMgOCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNl L21xcXVldWUuY3BwIiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKysvZnN0cmVhbS5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmV4dGVybiAiQysr IiB7CmNsYXNzIGZzdHJlYW1iYXNlIDogdmlydHVhbCBwdWJsaWMgaW9zIHsKCiAgICBtdXRhYmxl IGZpbGVidWYgX19teV9mYjsgIAoKICAgIHZvaWQgX19mYl9pbml0ICgpOwogIHB1YmxpYzoKICAg IGZzdHJlYW1iYXNlKCk7CiAgICBmc3RyZWFtYmFzZShpbnQgZmQpOwogICAgZnN0cmVhbWJhc2Uo aW50IGZkLCBjaGFyICpwLCBpbnQgbCk7ICAKICAgIGZzdHJlYW1iYXNlKGNvbnN0IGNoYXIgKm5h bWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIHZvaWQgY2xvc2UoKTsKCiAgICBmaWxl YnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuICZfX215X2ZiOyB9CgoKCiAgICB2b2lkIG9wZW4o Y29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQpOwogICAgaW50IGlzX29w ZW4oKSBjb25zdCB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVuKCk7IH0KICAgIHZvaWQgc2V0YnVm KGNoYXIgKnB0ciwgaW50IGxlbikgeyByZGJ1ZigpLT5zZXRidWYocHRyLCBsZW4pOyB9CiAgICB2 b2lkIGF0dGFjaChpbnQgZmQpOwoKCgoKfTsKCmNsYXNzIGlmc3RyZWFtIDogcHVibGljIGZzdHJl YW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGljOgogICAgaWZzdHJlYW0oKSA6IGZzdHJl YW1iYXNlKCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQog ICAgaWZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwg bCkgeyB9ICAKICAgIGlmc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6aW4s IGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUgfCBpb3M6OmluLCBwcm90 KSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6OmluLCBp bnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlIHwgaW9zOjppbiwg cHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMg b3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAg ICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgb2ZzdHJlYW0oaW50 IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIG9m c3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0LCBpbnQgcHJvdD0wNjY0 KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjpvdXQsIHByb3QpIHsgfQogICAgdm9p ZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0LCBpbnQgcHJvdD0wNjY0 KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlIHwgaW9zOjpvdXQsIHByb3QpOyB9Cn07 CgpjbGFzcyBmc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgaW9zdHJlYW0gewog IHB1YmxpYzoKICAgIGZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBmc3RyZWFtKGlu dCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBmc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUs IGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlLCBwcm90 KSB7IH0KICAgIGZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShm ZCwgcCwgbCkgeyB9ICAKICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSwg aW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSwgcHJvdCk7IH0K fTsKfSAgCgojIDkgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIg MgoKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvdHJhY2VtYWNyb3MuaHBwIiAxCgoK CiAKCgoKCgoKCgoKIyA2MCAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvdHJhY2VtYWNyb3Mu aHBwIgoKCgkKCQoJCgkKCQoKCgoKIyAxMSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNl L21xcXVldWUuY3BwIiAyCgoKIyAxICIvaG9tZS94aHU2MDMxL3RzZncvSW5jbHVkZS9UU0ZXRXJy b3IuaHBwIiAxCgoKCgoKCQkJCgoKCQkJCgoKCgoKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0lu Y2x1ZGUvVFNGV0RhdGFTZXQuaHBwIiAxCiAKIAogCiAKIAoKCiAgICAKCiAgICAgCiAgICAKIyAx ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMu aCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgMTEgIi9ob21lL3hodTYwMzEvdHNmdy9J bmNsdWRlL1RTRldEYXRhU2V0LmhwcCIgMgoKICAgIAojIDEgIi91c3IvbGliL2djYy1saWIvczM5 MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2Zsb2F0LmgiIDEgMwogCgoKIAoKICAgIAoKCiAg ICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCiAgICAKCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCiAgICAKCgogICAgCgoKICAgIAoKCgoKIyAxMiAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1 ZGUvVFNGV0RhdGFTZXQuaHBwIiAyCgoKICAgICAKICAgIAojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cGFyc2UuaHBwIiAxCiMgMTAgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cGFyc2Uu aHBwIgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK CiAKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19I RUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEg bmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVt KDQpCgoKCgoKCgogCgogCiAKCiAKY2xhc3MgSVN0cmluZzsKY2xhc3MgSVN0cmluZ1Rlc3Q7CmNs YXNzIElTdHJpbmdQYXJzZXJEYXRhOwpjbGFzcyBJU3RyaW5nUGFyc2VyOwoKSVN0cmluZ1BhcnNl ciAgIG9wZXJhdG9yPj4oY29uc3QgSVN0cmluZyYgdGV4dCwgSVN0cmluZyYgdG9rZW4gKTsKSVN0 cmluZ1BhcnNlciAgIG9wZXJhdG9yPj4oY29uc3QgSVN0cmluZyYgdGV4dCwgY29uc3QgSVN0cmlu ZyYgcGF0dGVybik7CklTdHJpbmdQYXJzZXIgICBvcGVyYXRvcj4+KGNvbnN0IElTdHJpbmcmIHRl eHQsIGNvbnN0IGNoYXIqIHBhdHRlcm4pOwpJU3RyaW5nUGFyc2VyICAgb3BlcmF0b3I+Pihjb25z dCBJU3RyaW5nJiB0ZXh0LCBjaGFyIHBhdHRlcm4pOwpJU3RyaW5nUGFyc2VyICAgb3BlcmF0b3I+ Pihjb25zdCBJU3RyaW5nJiB0ZXh0LCBpb2M6OnVudW1lcmljX3QgcG9zaXRpb24pOwpJU3RyaW5n UGFyc2VyICAgb3BlcmF0b3I+Pihjb25zdCBJU3RyaW5nJiB0ZXh0LCBpbnQgcG9zaXRpb24pOwpJ U3RyaW5nUGFyc2VyICAgb3BlcmF0b3I8PChjb25zdCBJU3RyaW5nJiB0ZXh0LCBpb2M6OnVudW1l cmljX3QgcG9zaXRpb24pOwpJU3RyaW5nUGFyc2VyICAgb3BlcmF0b3I+Pihjb25zdCBJU3RyaW5n JiB0ZXh0LCBjb25zdCBJU3RyaW5nVGVzdCYgdGVzdCk7CgogCgogCgpjbGFzcyAgIElTdHJpbmdQ YXJzZXIgewpwdWJsaWM6CgogCiB+SVN0cmluZ1BhcnNlciAoICk7CgogCgplbnVtIENvbW1hbmQg ewogICAgcmVzZXQsCiAgICBza2lwV29yZAp9OwoKY2xhc3MgICBTa2lwV29yZHMgewpwdWJsaWM6 CiAgU2tpcFdvcmRzICAgICAoIGlvYzo6dW51bWVyaWNfdCBudW1iZXJPZldvcmRzID0gMSApOwpp b2M6OnVudW1lcmljX3QKICBudW1iZXJPZldvcmRzICggKSBjb25zdDsKcHJpdmF0ZToKaW9jOjp1 bnVtZXJpY190CiAgZk51bVNraXA7Cgp9OwoKSVN0cmluZ1BhcnNlcgogJm9wZXJhdG9yID4+ICAg KCBDb21tYW5kICAgICAgICAgIGNvbW1hbmQgKSwKICZvcGVyYXRvciA+PiAgICggY29uc3QgU2tp cFdvcmRzJiBza2lwT2JqZWN0ICk7CgogCmZyaWVuZCBJU3RyaW5nUGFyc2VyICAKICBvcGVyYXRv ciA+PiAgICggY29uc3QgSVN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgSVN0 cmluZyYgdG9rZW4gKTsKCmZyaWVuZCBJU3RyaW5nUGFyc2VyICAKICBvcGVyYXRvciA+PiAgICgg Y29uc3QgSVN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyYgcGF0 dGVybiApOwpmcmllbmQgSVN0cmluZ1BhcnNlciAgCiAgb3BlcmF0b3IgPj4gICAoIGNvbnN0IElT dHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgIHBhdHRlcm4gKTsK CmZyaWVuZCBJU3RyaW5nUGFyc2VyICAKICBvcGVyYXRvciA+PiAgICggY29uc3QgSVN0cmluZyYg dGV4dCwKICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgcGF0dGVybiApOwoKZnJpZW5k IElTdHJpbmdQYXJzZXIgIAogIG9wZXJhdG9yID4+ICAgKCBjb25zdCBJU3RyaW5nJiB0ZXh0LAog ICAgICAgICAgICAgICAgICBpb2M6OnVudW1lcmljX3QgIHBvc2l0aW9uICk7CmZyaWVuZCBJU3Ry aW5nUGFyc2VyICAKICBvcGVyYXRvciA+PiAgICggY29uc3QgSVN0cmluZyYgdGV4dCwKICAgICAg ICAgICAgICAgICAgaW50ICAgICAgICAgICAgcG9zaXRpb24gKTsKCmZyaWVuZCBJU3RyaW5nUGFy c2VyICAKICBvcGVyYXRvciA8PCAgICggY29uc3QgSVN0cmluZyYgdGV4dCwKICAgICAgICAgICAg ICAgICAgaW9jOjp1bnVtZXJpY190ICBwb3NpdGlvbiApOwoKZnJpZW5kIElTdHJpbmdQYXJzZXIg IAogIG9wZXJhdG9yID4+ICAgKCBjb25zdCBJU3RyaW5nJiAgICAgdGV4dCwKICAgICAgICAgICAg ICAgICAgY29uc3QgSVN0cmluZ1Rlc3QmIHRlc3QgKTsKCmZyaWVuZCBJU3RyaW5nUGFyc2VyICAK ICBvcGVyYXRvciA+PiAgICggY29uc3QgSVN0cmluZyYgICAgICAgICB0ZXh0LAogICAgICAgICAg ICAgICAgICBJU3RyaW5nUGFyc2VyOjpDb21tYW5kIGNvbW1hbmQgKTsKCmZyaWVuZCBJU3RyaW5n UGFyc2VyICAKICBvcGVyYXRvciA+PiAgICggY29uc3QgSVN0cmluZyYgICAgICAgICAgICAgICAg ICB0ZXh0LAogICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nUGFyc2VyOjpTa2lwV29yZHMm IHNraXBPYmplY3QgKTsKCiAKSVN0cmluZ1BhcnNlcgogJm9wZXJhdG9yID4+ICAgKCBJU3RyaW5n JiB0b2tlbiApOwoKIApJU3RyaW5nUGFyc2VyCiAmb3BlcmF0b3IgPj4gICAoIGNvbnN0IElTdHJp bmcmICAgICBwYXR0ZXJuICksCiAmb3BlcmF0b3IgPj4gICAoIGNvbnN0IGNoYXIqICAgICAgICBw YXR0ZXJuICksCiAmb3BlcmF0b3IgPj4gICAoIGNoYXIgICAgICAgICAgICAgICBwYXR0ZXJuICks CiAmb3BlcmF0b3IgPj4gICAoIGNvbnN0IElTdHJpbmdUZXN0JiB0ZXN0ICk7CgogCklTdHJpbmdQ YXJzZXIKICZvcGVyYXRvciA+PiAgICggaW50ICAgICAgICAgICBkZWx0YSApLAogJm9wZXJhdG9y ID4+ICAgKCBpb2M6OnVudW1lcmljX3QgZGVsdGEgKTsKCiAKSVN0cmluZ1BhcnNlcgogJm9wZXJh dG9yIDw8ICAgKCBpb2M6OnVudW1lcmljX3QgcG9zaXRpb24gKTsKCgpwcm90ZWN0ZWQ6CiAKICBJ U3RyaW5nUGFyc2VyICggY29uc3QgSVN0cmluZyYgICAgICAgdGV4dCApOwogIElTdHJpbmdQYXJz ZXIgKCBjb25zdCBJU3RyaW5nUGFyc2VyJiBwYXJzZXIgKTsKCgogCnByaXZhdGU6CklTdHJpbmdQ YXJzZXJEYXRhCiAqZkRhdGE7Cgp9OyAgCgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoK CiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9u ZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKSVN0cmluZ1Bh cnNlciAgIG9wZXJhdG9yPj4oY29uc3QgSVN0cmluZyYgdGV4dCwgSVN0cmluZ1BhcnNlcjo6Q29t bWFuZCBjb21tYW5kKTsKSVN0cmluZ1BhcnNlciAgIG9wZXJhdG9yPj4oY29uc3QgSVN0cmluZyYg dGV4dCwgY29uc3QgSVN0cmluZ1BhcnNlcjo6U2tpcFdvcmRzJiBza2lwT2JqZWN0KTsKCiAKCgoK CgojIDE1ICIvaG9tZS94aHU2MDMxL3RzZncvSW5jbHVkZS9UU0ZXRGF0YVNldC5ocHAiIDIKCiAg ICAKICAgIAojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWV4Y2Jhc2UuaHBwIiAxCiMgMTAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIgoKCiMgNzI2ICIvaG9tZS9ha25vbGwv aW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lleGNiYXNlLmhwcCIKCgoKCgoK IyAxNyAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0RhdGFTZXQuaHBwIiAyCgogICAg CiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p a3MuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCgojIDEgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFrcy5oIiAxCgoKCiAK IAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xp bnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lha2V5LmgiIDEKCgoKIAogCiAKCgoKCgoKCgoK CgogCiAKIAogCiAKIAoKIAoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQo bGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQog CgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoK CgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCnRlbXBsYXRl IDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+CmNsYXNzIElBS2V5Q29sbGVjdGlvbiA6IHB1Ymxp YyB2aXJ0dWFsIElBQ29sbGVjdGlvbiA8RWxlbWVudD4KewogIHR5cGVkZWYgIElBQ29sbGVjdGlv bkltcGwgSW1wbGVtZW50YXRpb247CgpwdWJsaWM6CgoKICAgICAgICAgICBJQUtleUNvbGxlY3Rp b24gIChJTm90aWZpZXImKTsKCgogICAgICAgICAgfklBS2V5Q29sbGVjdGlvbiAgKCk7CgoKCgog IGJvb2wgYWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChFbGVtZW50IGNvbnN0Jik7CgoKCgogIGJvb2wgYWRkT3JSZXBsYWNlRWxlbWVudFdpdGhL ZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFbGVtZW50IGNvbnN0JiwgSUN1cnNvciYp OwoKICBib29sIGNvbnRhaW5zQWxsS2V5c0Zyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAg IChJQUNvbGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0JikgY29uc3Q7CgogIGJvb2wgY29udGFpbnNF bGVtZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEtleSBjb25zdCYpIGNv bnN0OwoKICBFbGVtZW50JiBlbGVtZW50V2l0aEtleSAgIChLZXkgY29uc3QmKTsKCiAgRWxlbWVu dCBjb25zdCYKICAgICAgICAgICBlbGVtZW50V2l0aEtleSAgIChLZXkgY29uc3QmKSBjb25zdDsK CiAgS2V5IGNvbnN0JgogICAgICAgICAgIGtleSAgICAgICAgICAgICAgKEVsZW1lbnQgY29uc3Qm KSBjb25zdDsKCiAgYm9vbCBsb2NhdGVFbGVtZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKEtleSBjb25zdCYsIElDdXJzb3ImKSBjb25zdDsKCiAgYm9vbCBsb2NhdGVOZXh0 RWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLZXkgY29uc3QmLCBJ Q3Vyc29yJikgY29uc3Q7CgoKCgogIGJvb2wgbG9jYXRlT3JBZGRFbGVtZW50V2l0aEtleQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKEVsZW1lbnQgY29uc3QmKTsKCgoKCiAgYm9vbCBsb2Nh dGVPckFkZEVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRWxlbWVu dCBjb25zdCYsIElDdXJzb3ImKTsKCiAgSU51bWJlciAgbnVtYmVyT2ZEaWZmZXJlbnRLZXlzCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKSBjb25zdDsKCiAgSU51bWJlciAgbnVtYmVyT2ZF bGVtZW50c1dpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLZXkgY29uc3QmKSBj b25zdDsKCgoKCiAgSU51bWJlciAgcmVtb3ZlQWxsRWxlbWVudHNXaXRoS2V5CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoS2V5IGNvbnN0Jik7CgoKCgogIGJvb2wgcmVtb3ZlRWxlbWVudFdp dGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChLZXkgY29uc3QmKTsKCgoKCiAgYm9v bCByZXBsYWNlRWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFbGVt ZW50IGNvbnN0Jik7CgoKCgogIGJvb2wgcmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoRWxlbWVudCBjb25zdCYsIElDdXJzb3ImKTsKCiAgYm9vbCBzZXRU b05leHRXaXRoRGlmZmVyZW50S2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUN1cnNv ciYpIGNvbnN0OwoKcHJvdGVjdGVkOgoKICAgICAgICAgICBJQUtleUNvbGxlY3Rpb24gICgpOwoK ICAgICAgICAgICBJQUtleUNvbGxlY3Rpb24gIChJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtl eT4gY29uc3QmKTsKCnByaXZhdGU6CgogIHN0YXRpYwogIEltcGxlbWVudGF0aW9uJgogICAgICAg ICAgIEltcGxPZiAgICAgICAgICAgKElBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5PiBjb25z dCYpOwoKIyAyMTEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaWFrZXkuaCIKCgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoK I3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAojIDEgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFrZXkuaW5sIiAxCgoKCiAKIAogCgoK CgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIAogCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVu dCwgY2xhc3MgS2V5PgppbmxpbmUKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKSUFL ZXlDb2xsZWN0aW9uIChJTm90aWZpZXImIG5vdGlmaWVyKQp7IHRoaXMtPlNldEltcGwgKChJbXBs ZW1lbnRhdGlvbiopJm5vdGlmaWVyKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFz cyBLZXk+CmlubGluZQpJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtleT46Ogp+SUFLZXlDb2xs ZWN0aW9uICgpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5l IGJvb2wKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKYWRkT3JSZXBsYWNlRWxlbWVu dFdpdGhLZXkgKEVsZW1lbnQgY29uc3QmIGVsZW1lbnQpCnsgcmV0dXJuIEltcGxPZiAoKnRoaXMp LkFkZE9yUmVwbGFjZUVsZW1lbnRXaXRoS2V5ICgmZWxlbWVudCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50LCBjbGFzcyBLZXk+CmlubGluZSBib29sCklBS2V5Q29sbGVjdGlvbiA8RWxlbWVu dCwgS2V5Pjo6CmFkZE9yUmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAgKEVsZW1lbnQgY29uc3QmIGVs ZW1lbnQsIElDdXJzb3ImIGN1cnNvcikKeyByZXR1cm4gSW1wbE9mICgqdGhpcykuCiAgICBBZGRP clJlcGxhY2VFbGVtZW50V2l0aEtleSAoJmVsZW1lbnQsIHRoaXMtPkNyc3JJbXBsT2YgKGN1cnNv cikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUgYm9vbApJ QUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtleT46Ogpjb250YWluc0FsbEtleXNGcm9tIChJQUNv bGxlY3Rpb24gPEVsZW1lbnQ+IGNvbnN0JiBjb2xsZWN0aW9uKSBjb25zdAp7IHJldHVybiBJbXBs T2YgKCp0aGlzKS4KICAgIENvbnRhaW5zQWxsS2V5c0Zyb20gKElBQ29sbGVjdGlvbiA8RWxlbWVu dD46OkltcGxPZiAoY29sbGVjdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xh c3MgS2V5PgppbmxpbmUgYm9vbApJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtleT46Ogpjb250 YWluc0VsZW1lbnRXaXRoS2V5IChLZXkgY29uc3QmIGtleSkgY29uc3QKeyByZXR1cm4gSW1wbE9m ICgqdGhpcykuQ29udGFpbnNFbGVtZW50V2l0aEtleSAoJmtleSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50LCBjbGFzcyBLZXk+CmlubGluZSBFbGVtZW50JgpJQUtleUNvbGxlY3Rpb24gPEVs ZW1lbnQsIEtleT46OgplbGVtZW50V2l0aEtleSAoS2V5IGNvbnN0JiBrZXkpCnsgcmV0dXJuICoo RWxlbWVudCopIEltcGxPZiAoKnRoaXMpLkVsZW1lbnRXaXRoS2V5ICgma2V5KTsKfQoKdGVtcGxh dGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIEVsZW1lbnQgY29uc3QmCklBS2V5 Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6CmVsZW1lbnRXaXRoS2V5IChLZXkgY29uc3QmIGtl eSkgY29uc3QKeyByZXR1cm4gKihFbGVtZW50KikgSW1wbE9mICgqdGhpcykuRWxlbWVudFdpdGhL ZXkgKCZrZXkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUg S2V5IGNvbnN0JgpJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtleT46OgprZXkgKEVsZW1lbnQg Y29uc3QmIGVsZW1lbnQpIGNvbnN0CnsgcmV0dXJuICooS2V5KikgSW1wbE9mICgqdGhpcykuS2V5 ICgmZWxlbWVudCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+CmlubGlu ZSBib29sCklBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6CmxvY2F0ZUVsZW1lbnRXaXRo S2V5IChLZXkgY29uc3QmIGtleSwgSUN1cnNvciYgY3Vyc29yKSBjb25zdAp7IHJldHVybiBJbXBs T2YgKCp0aGlzKS4KICAgIExvY2F0ZUVsZW1lbnRXaXRoS2V5ICgma2V5LCB0aGlzLT5DcnNySW1w bE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5s aW5lIGJvb2wKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKbG9jYXRlTmV4dEVsZW1l bnRXaXRoS2V5IChLZXkgY29uc3QmIGtleSwgSUN1cnNvciYgY3Vyc29yKSBjb25zdAp7IHJldHVy biBJbXBsT2YgKCp0aGlzKS4KICAgIExvY2F0ZU5leHRFbGVtZW50V2l0aEtleSAoJmtleSwgdGhp cy0+Q3JzckltcGxPZiAoY3Vyc29yKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFz cyBLZXk+CmlubGluZSBib29sCklBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6CmxvY2F0 ZU9yQWRkRWxlbWVudFdpdGhLZXkgKEVsZW1lbnQgY29uc3QmIGVsZW1lbnQpCnsgcmV0dXJuIElt cGxPZiAoKnRoaXMpLkxvY2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkgKCZlbGVtZW50KTsKfQoKdGVt cGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIGJvb2wKSUFLZXlDb2xsZWN0 aW9uIDxFbGVtZW50LCBLZXk+OjoKbG9jYXRlT3JBZGRFbGVtZW50V2l0aEtleSAoRWxlbWVudCBj b25zdCYgZWxlbWVudCwgSUN1cnNvciYgY3Vyc29yKQp7IHJldHVybiBJbXBsT2YgKCp0aGlzKS4K ICAgIExvY2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkgKCZlbGVtZW50LCB0aGlzLT5DcnNySW1wbE9m IChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5l IElOdW1iZXIKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKbnVtYmVyT2ZEaWZmZXJl bnRLZXlzICgpIGNvbnN0CnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpLk51bWJlck9mRGlmZmVyZW50 S2V5cyAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIElO dW1iZXIKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKbnVtYmVyT2ZFbGVtZW50c1dp dGhLZXkgKEtleSBjb25zdCYga2V5KSBjb25zdAp7IHJldHVybiBJbXBsT2YgKCp0aGlzKS5OdW1i ZXJPZkVsZW1lbnRzV2l0aEtleSAoJmtleSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBj bGFzcyBLZXk+CmlubGluZSBib29sCklBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6CnJl bW92ZUVsZW1lbnRXaXRoS2V5IChLZXkgY29uc3QmIGtleSkKeyByZXR1cm4gSW1wbE9mICgqdGhp cykuUmVtb3ZlRWxlbWVudFdpdGhLZXkgKCZrZXkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVu dCwgY2xhc3MgS2V5PgppbmxpbmUgSU51bWJlcgpJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtl eT46OgpyZW1vdmVBbGxFbGVtZW50c1dpdGhLZXkgKEtleSBjb25zdCYga2V5KQp7IHJldHVybiBJ bXBsT2YgKCp0aGlzKS5SZW1vdmVBbGxFbGVtZW50c1dpdGhLZXkgKCZrZXkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUgYm9vbApJQUtleUNvbGxlY3Rpb24g PEVsZW1lbnQsIEtleT46OgpyZXBsYWNlRWxlbWVudFdpdGhLZXkgKEVsZW1lbnQgY29uc3QmIGVs ZW1lbnQpCnsgcmV0dXJuIEltcGxPZiAoKnRoaXMpLlJlcGxhY2VFbGVtZW50V2l0aEtleSAoJmVs ZW1lbnQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUgYm9v bApJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtleT46OgpyZXBsYWNlRWxlbWVudFdpdGhLZXkg KEVsZW1lbnQgY29uc3QmIGVsZW1lbnQsIElDdXJzb3ImIGN1cnNvcikKeyByZXR1cm4gSW1wbE9m ICgqdGhpcykuCiAgICBSZXBsYWNlRWxlbWVudFdpdGhLZXkgKCZlbGVtZW50LCB0aGlzLT5DcnNy SW1wbE9mIChjdXJzb3IpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4K aW5saW5lIGJvb2wKSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKc2V0VG9OZXh0V2l0 aERpZmZlcmVudEtleSAoSUN1cnNvciYgY3Vyc29yKSBjb25zdAp7IHJldHVybiBJbXBsT2YgKCp0 aGlzKS4KICAgIFNldFRvTmV4dFdpdGhEaWZmZXJlbnRLZXkgKHRoaXMtPkNyc3JJbXBsT2YgKGN1 cnNvcikpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUK SUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjoKSUFLZXlDb2xsZWN0aW9uICgpCnsKfQoK dGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lCklBS2V5Q29sbGVjdGlv biA8RWxlbWVudCwgS2V5Pjo6CklBS2V5Q29sbGVjdGlvbiAoSUFLZXlDb2xsZWN0aW9uIDxFbGVt ZW50LCBLZXk+IGNvbnN0JikKewp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3Mg S2V5PgppbmxpbmUgdHlwZW5hbWUgIElBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6SW1w bGVtZW50YXRpb24mCklBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6CkltcGxPZiAoSUFL ZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+IGNvbnN0JiBjb2xsZWN0aW9uKQp7IHJldHVybiAq KEltcGxlbWVudGF0aW9uKiljb2xsZWN0aW9uLml2SW1wbDsKfQoKIAoKIyAyNDAgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWFrZXkuaCIgMgoKIAoK IAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVz dG9yZSkKIAoKIAoKIyAyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9pYWtzLmgiIDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9paWFrcy5oIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAK IAogCiAKCiAKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBf X0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNw cmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdt YSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgpjbGFzcyAgIElBS2V5U2V0 SW1wbCA6IHB1YmxpYyBJQUNvbGxlY3Rpb25JbXBsIHsKcHVibGljOgoKICAgICAgICAgIH5JQUtl eVNldEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKcHJvdGVjdGVkOgoKICAg ICAgICAgICBJQUtleVNldEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHMmKTsK CiAgYm9vbCAgICAgTG9jYXRlTmV4dEVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJikgY29uc3Q7CgogIElOdW1iZXIgIE51 bWJlck9mRGlmZmVyZW50S2V5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgY29uc3Q7 CgogIElOdW1iZXIgIE51bWJlck9mRWxlbWVudHNXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICBJTnVtYmVyICBSZW1vdmVBbGxFbGVtZW50 c1dpdGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0Kik7CgogIGJv b2wgICAgIFNldFRvTmV4dFdpdGhEaWZmZXJlbnRLZXkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoKcHJpdmF0ZToKCgoKCgoKCgoKfTsKCiAKCiAKCgoK CgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoK CiAKCiAKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21h IGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9pYWtzLmgiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNw cmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElO R19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAog CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgpjbGFzcyBJQUtleVNldCA6 CiAgcHVibGljIElBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5PiB7CgogIHR5cGVkZWYgIElB S2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5PiBJbmhlcml0ZWQ7CgogIHR5cGVkZWYgIElBS2V5 U2V0SW1wbCBJbXBsZW1lbnRhdGlvbjsKCnB1YmxpYzoKCgogICAgICAgICAgIElBS2V5U2V0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5vdGlmaWVyJik7CgoKICAgICAgICAgIH5JQUtl eVNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7Cgpwcm90ZWN0ZWQ6CgogICAgICAg ICAgIElBS2V5U2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgICAgICAgICAg SUFLZXlTZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJQUtleVNldCA8RWxlbWVudCwg S2V5PiBjb25zdCYpOwoKICBib29sICAgICBsb2NhdGVOZXh0RWxlbWVudFdpdGhLZXkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChLZXkgY29uc3QmLCBJQ3Vyc29yJikgY29uc3Q7CgogIElO dW1iZXIgIG51bWJlck9mRGlmZmVyZW50S2V5cwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCkgY29uc3Q7CgogIElOdW1iZXIgIG51bWJlck9mRWxlbWVudHNXaXRoS2V5CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoS2V5IGNvbnN0JikgY29uc3Q7CgogIElOdW1iZXIgIHJlbW92ZUFs bEVsZW1lbnRzV2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEtleSBjb25zdCYp OwoKICBib29sICAgICBzZXRUb05leHRXaXRoRGlmZmVyZW50S2V5CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoSUN1cnNvciYpIGNvbnN0OwoKcHJpdmF0ZToKCiAgc3RhdGljCiAgSW1wbGVt ZW50YXRpb24mCiAgICAgICAgICAgSW1wbE9mICAgICAgICAgICAoSUFLZXlTZXQgPEVsZW1lbnQs IEtleT4gY29uc3QmKTsKCgoKCgoKCgoKfTsKCiAKCiAKCgoKCgoKCgoKCgojcHJhZ21hIGVudW0o cG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lha3MuaW5sIiAxCgoKCiAK IAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiAKIAogCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudCwgY2xhc3MgS2V5PgppbmxpbmUKSUFLZXlTZXQgPEVsZW1lbnQsIEtleT46OgpJQUtleVNl dCAoSU5vdGlmaWVyJiBub3RpZmllcikKeyB0aGlzLT5TZXRJbXBsICgoSW1wbGVtZW50YXRpb24q KSZub3RpZmllcik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5Pgppbmxp bmUKSUFLZXlTZXQgPEVsZW1lbnQsIEtleT46Ogp+SUFLZXlTZXQgKCkKewp9CgogCgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUKSUFLZXlTZXQgPEVsZW1lbnQsIEtl eT46OgpJQUtleVNldCAoKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+ CmlubGluZQpJQUtleVNldCA8RWxlbWVudCwgS2V5Pjo6CklBS2V5U2V0IChJQUtleVNldCA8RWxl bWVudCwgS2V5PiBjb25zdCYgY29sbGVjdGlvbikKOiBJbmhlcml0ZWQgKGNvbGxlY3Rpb24pCnsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIGJvb2wKSUFLZXlT ZXQgPEVsZW1lbnQsIEtleT46Ogpsb2NhdGVOZXh0RWxlbWVudFdpdGhLZXkgKEtleSBjb25zdCYg a2V5LCBJQ3Vyc29yJiBjdXJzb3IpIGNvbnN0CnsgcmV0dXJuIElBS2V5Q29sbGVjdGlvbiA8RWxl bWVudCwgS2V5Pjo6CiAgICBsb2NhdGVOZXh0RWxlbWVudFdpdGhLZXkgKGtleSwgY3Vyc29yKTsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIElOdW1iZXIKSUFL ZXlTZXQgPEVsZW1lbnQsIEtleT46OgpudW1iZXJPZkRpZmZlcmVudEtleXMgKCkgY29uc3QKeyBy ZXR1cm4gSUFLZXlDb2xsZWN0aW9uIDxFbGVtZW50LCBLZXk+OjpudW1iZXJPZkRpZmZlcmVudEtl eXMgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+CmlubGluZSBJTnVt YmVyCklBS2V5U2V0IDxFbGVtZW50LCBLZXk+OjoKbnVtYmVyT2ZFbGVtZW50c1dpdGhLZXkgKEtl eSBjb25zdCYga2V5KSBjb25zdAp7IHJldHVybiBJQUtleUNvbGxlY3Rpb24gPEVsZW1lbnQsIEtl eT46Om51bWJlck9mRWxlbWVudHNXaXRoS2V5IChrZXkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudCwgY2xhc3MgS2V5PgppbmxpbmUgSU51bWJlcgpJQUtleVNldCA8RWxlbWVudCwgS2V5Pjo6 CnJlbW92ZUFsbEVsZW1lbnRzV2l0aEtleSAoS2V5IGNvbnN0JiBrZXkpCnsgcmV0dXJuIElBS2V5 Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5Pjo6cmVtb3ZlQWxsRWxlbWVudHNXaXRoS2V5IChrZXkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgppbmxpbmUgYm9vbApJQUtl eVNldCA8RWxlbWVudCwgS2V5Pjo6CnNldFRvTmV4dFdpdGhEaWZmZXJlbnRLZXkgKElDdXJzb3Im IGN1cnNvcikgY29uc3QKeyByZXR1cm4KICAgIElBS2V5Q29sbGVjdGlvbiA8RWxlbWVudCwgS2V5 Pjo6c2V0VG9OZXh0V2l0aERpZmZlcmVudEtleSAoY3Vyc29yKTsKfQoKIAoKdGVtcGxhdGUgPGNs YXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lIHR5cGVuYW1lICBJQUtleVNldCA8RWxlbWVu dCwgS2V5Pjo6SW1wbGVtZW50YXRpb24mCklBS2V5U2V0IDxFbGVtZW50LCBLZXk+OjoKSW1wbE9m IChJQUtleVNldCA8RWxlbWVudCwgS2V5PiBjb25zdCYgY29sbGVjdGlvbikKeyByZXR1cm4gKihJ bXBsZW1lbnRhdGlvbiopY29sbGVjdGlvbi5pdkltcGw7Cn0KCiAKCiMgMTUzICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lha3MuaCIgMgoKIAoKIAoj cHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9y ZSkKIAoKIAoKIyAyNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4v aW5jbHVkZS9pa3MuaCIgMgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lpY2tzLmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAK IAoKIAoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lP Q19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKCiAKCiNwcmFn bWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoKCgoKI3ByYWdtYSBl bnVtKDQpCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAoKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgQ0lu aGVyaXRlZD4KY2xhc3MgSUNLZXlTZXRJbXBsIDogcHVibGljIENJbmhlcml0ZWQgewpwdWJsaWM6 CgogIHR5cGVkZWYgdHlwZW5hbWUgIENJbmhlcml0ZWQ6Ok9wcyBPcHM7CgogICAgICAgICAgIElD S2V5U2V0SW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9wcyYsIElOdW1iZXIpOwoK ICAgICAgICAgICBJQ0tleVNldEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHMm LCBJQ0tleVNldEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENJbmhl cml0ZWQ+IGNvbnN0Jik7CgogIGJvb2wgICAgIEFkZCAgICAgICAgICAgICAgKHZvaWQgY29uc3Qq LCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBBZGRBbGxGcm9tICAgICAgIChJQUNvbGxlY3Rp b25JbXBsIGNvbnN0Jik7CgogIGJvb2wgICAgIEFkZE9yUmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7Cgog IHZvaWQqICAgIEFueSAgICAgICAgICAgICAgKCkgY29uc3Q7CgogIHZvaWQqICAgIEVsZW1lbnRB dCAgICAgICAgKElDdXJzb3JJbXBsIGNvbnN0JikgY29uc3Q7CgogIHZvaWQqICAgIEVsZW1lbnRX aXRoS2V5ICAgKHZvaWQgY29uc3QqKSBjb25zdDsKCiAgYm9vbCAgICAgTG9jYXRlRWxlbWVudFdp dGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvcklt cGwmKSBjb25zdDsKCiAgYm9vbCAgICAgTG9jYXRlTmV4dEVsZW1lbnRXaXRoS2V5CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJikgY29uc3Q7Cgog IGJvb2wgICAgIExvY2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsKCiAgdm9pZCAgICAgUmVtb3ZlQXQg ICAgICAgICAoSUN1cnNvckltcGwmKTsKCiAgdm9pZCAgICAgUmVwbGFjZUF0ICAgICAgICAoSUN1 cnNvckltcGwgY29uc3QmIGN1cnNvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IGNvbnN0Kik7CgogIGJvb2wgICAgIFJlcGxhY2VFbGVtZW50V2l0aEtleQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICBib29sICAgICBT ZXRUb0ZpcnN0ICAgICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoKICBib29sICAgICBTZXRUb05l eHQgICAgICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoKICBib29sICAgICBTZXRUb05leHRXaXRo RGlmZmVyZW50S2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUN1cnNvckltcGwmKSBj b25zdDsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgojIDEzNCAiL2hvbWUvYWtub2xsL2lvY3NyYy9s aW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5oIgoKCn07CgogCgogCgoKCgoKCgoK CgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgog CgoKCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWlja3MuYyIgMQogCiAKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoKCgoKCgogCiAKIAoKIAoK dGVtcGxhdGUgPGNsYXNzIENJbmhlcml0ZWQ+CklDS2V5U2V0SW1wbCA8Q0luaGVyaXRlZD46OgpJ Q0tleVNldEltcGwgKE9wcyYgb3BzLCBJTnVtYmVyIG51bWJlck9mRWxlbWVudHMpCjogQ0luaGVy aXRlZCAob3BzLCBudW1iZXJPZkVsZW1lbnRzKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJp dGVkPgpJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKSUNLZXlTZXRJbXBsCiAgKE9wcyYgb3Bz LCBJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+IGNvbnN0JiBjb2xsZWN0aW9uKQo6IENJbmhlcml0 ZWQgKG9wcywgY29sbGVjdGlvbikKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9v bApJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKQWRkICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJ Q3Vyc29ySW1wbCYgY3Vyc29yKQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAg IElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNz TmFtZSAoKSAgLCAgICAgIkFkZCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1z aGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDUzKTsgfSAgCgogIGJvb2wgaGFzQmVlbkFkZGVk ID0gQ0luaGVyaXRlZDo6QWRkIChlbGVtZW50LCBjdXJzb3IpOwogIHJldHVybiBoYXNCZWVuQWRk ZWQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lkCklDS2V5U2V0SW1wbCA8Q0lu aGVyaXRlZD46OgpBZGRBbGxGcm9tIChJQUNvbGxlY3Rpb25JbXBsIGNvbnN0JiBjb2xsZWN0aW9u KQp7IHsgaWYgKCEgKCB0aGlzICE9ICZjb2xsZWN0aW9uICkpICAgSUlkZW50aWNhbENvbGxlY3Rp b25FeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAi QWRkQWxsRnJvbSIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWlja3MuYyIsIDYzKTsgfSAgCgogIENJbmhlcml0ZWQ6OkFkZEFsbEZyb20gKGNv bGxlY3Rpb24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ0tleVNldElt cGwgPENJbmhlcml0ZWQ+OjoKQWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkgKHZvaWQgY29uc3Qq IGVsZW1lbnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsgeyBpZiAoISAoIGN1cnNvci5Jc0ZvciAo KnRoaXMpICkpICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAg dGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiQWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkiICAs ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY2tz LmMiLCA3Mik7IH0gIAoKICByZXR1cm4gQ0luaGVyaXRlZDo6QWRkT3JSZXBsYWNlRWxlbWVudFdp dGhLZXkgKGVsZW1lbnQsIGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2 b2lkKgpJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKQW55ICgpIGNvbnN0CnsgeyBpZiAoISAo ICEgdGhpcy0+SXNFbXB0eSAoKSApKSAgIElFbXB0eUV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICgg ICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJBbnkiICAsICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY2tzLmMiLCA4MSk7IH0gIAoKICByZXR1 cm4gQ0luaGVyaXRlZDo6QW55ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9p ZCoKSUNLZXlTZXRJbXBsIDxDSW5oZXJpdGVkPjo6CkVsZW1lbnRBdCAoSUN1cnNvckltcGwgY29u c3QmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkgICBJ Q3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05h bWUgKCkgICwgICAgICJFbGVtZW50QXQiICAsICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY2tzLmMiLCA5MCk7IH0gIAogIHsgaWYgKCEgKCBjdXJz b3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uSW1wbCA6OnRocm93SXQg KCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkVsZW1lbnRBdCIgICwgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDkxKTsgfSAg CgoKCgoKCgogIHJldHVybiBDSW5oZXJpdGVkOjpFbGVtZW50QXQgKGN1cnNvcik7Cn0KCnRlbXBs YXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lkKgpJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoK RWxlbWVudFdpdGhLZXkgKHZvaWQgY29uc3QqIGtleSkgY29uc3QKeyByZXR1cm4gQ0luaGVyaXRl ZDo6RWxlbWVudFdpdGhLZXkgKGtleSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgpi b29sCklDS2V5U2V0SW1wbCA8Q0luaGVyaXRlZD46OgpMb2NhdGVFbGVtZW50V2l0aEtleSAodm9p ZCBjb25zdCoga2V5LCBJQ3Vyc29ySW1wbCYgY3Vyc29yKSBjb25zdAp7IHsgaWYgKCEgKCBjdXJz b3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRo cm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIkxvY2F0ZUVsZW1lbnRXaXRoS2V5 IiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p aWNrcy5jIiwgMTEzKTsgfSAgCgogIHJldHVybiBDSW5oZXJpdGVkOjpMb2NhdGVFbGVtZW50V2l0 aEtleSAoa2V5LCBjdXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJ Q0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKTG9jYXRlTmV4dEVsZW1lbnRXaXRoS2V5ICh2b2lk IGNvbnN0KiBrZXksIElDdXJzb3JJbXBsJiBjdXJzb3IpIGNvbnN0CnsgeyBpZiAoISAoIGN1cnNv ci5Jc0ZvciAoKnRoaXMpICkpICAgSUN1cnNvck5vdEZvclRoaXNFeGNlcHRpb25JbXBsIDo6dGhy b3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiTG9jYXRlTmV4dEVsZW1lbnRXaXRo S2V5IiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9paWNrcy5jIiwgMTIyKTsgfSAgCiAgeyBpZiAoISAoIGN1cnNvci5Jc1ZhbGlkICgpICkpICAg SUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBsIDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1l ICgpICAsICAgICAiTG9jYXRlTmV4dEVsZW1lbnRXaXRoS2V5IiAgLCAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5jIiwgMTIzKTsgfSAgCgoK CgogIHJldHVybiBDSW5oZXJpdGVkOjpMb2NhdGVOZXh0RWxlbWVudFdpdGhLZXkgKGtleSwgY3Vy c29yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIENJbmhlcml0ZWQ+CmJvb2wKSUNLZXlTZXRJbXBsIDxD SW5oZXJpdGVkPjo6CkxvY2F0ZU9yQWRkRWxlbWVudFdpdGhLZXkgKHZvaWQgY29uc3QqIGtleSwg SUN1cnNvckltcGwmIGN1cnNvcikKeyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkg ICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFz c05hbWUgKCkgICwgICAgICJMb2NhdGVPckFkZEVsZW1lbnRXaXRoS2V5IiAgLCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5jIiwgMTM1KTsg fSAgCgogIHJldHVybiBDSW5oZXJpdGVkOjpMb2NhdGVPckFkZEVsZW1lbnRXaXRoS2V5IChrZXks IGN1cnNvcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDSW5oZXJpdGVkPgp2b2lkCklDS2V5U2V0SW1w bCA8Q0luaGVyaXRlZD46OgpSZW1vdmVBdCAoSUN1cnNvckltcGwmIGN1cnNvcikKeyB7IGlmICgh ICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbklt cGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJSZW1vdmVBdCIgICwg Ii9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3Mu YyIsIDE0NCk7IH0gIAogIHsgaWYgKCEgKCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJ bnZhbGlkRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAg ICAgIlJlbW92ZUF0IiAgLCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5i aW4vaW5jbHVkZS9paWNrcy5jIiwgMTQ1KTsgfSAgCgoKCgoKCgogIENJbmhlcml0ZWQ6OlJlbW92 ZUF0IChjdXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4Kdm9pZApJQ0tleVNl dEltcGwgPENJbmhlcml0ZWQ+OjoKUmVwbGFjZUF0IChJQ3Vyc29ySW1wbCBjb25zdCYgY3Vyc29y LCB2b2lkIGNvbnN0KiBlbGVtZW50KQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSAp KSAgIElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNs YXNzTmFtZSAoKSAgLCAgICAgIlJlcGxhY2VBdCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDE2MCk7IH0gIAogIHsgaWYgKCEg KCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJbnZhbGlkRXhjZXB0aW9uSW1wbCA6OnRo cm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIlJlcGxhY2VBdCIgICwgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDE2 MSk7IH0gIAoKCgoKCgogIHsgaWYgKCEgKCB0aGlzLT5DaGVja1JlcGxhY2VtZW50IChjdXJzb3Is IGVsZW1lbnQpICkpICAgSUludmFsaWRSZXBsYWNlbWVudEV4Y2VwdGlvbkltcGwgOjp0aHJvd0l0 ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJSZXBsYWNlQXQiICAsICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpY2tzLmMiLCAxNjgpOyB9 ICAKCiAgQ0luaGVyaXRlZDo6UmVwbGFjZUF0IChjdXJzb3IsIGVsZW1lbnQpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKUmVw bGFjZUVsZW1lbnRXaXRoS2V5ICh2b2lkIGNvbnN0KiBlbGVtZW50LCBJQ3Vyc29ySW1wbCYgY3Vy c29yKQp7IHsgaWYgKCEgKCBjdXJzb3IuSXNGb3IgKCp0aGlzKSApKSAgIElDdXJzb3JOb3RGb3JU aGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAg IlJlcGxhY2VFbGVtZW50V2l0aEtleSIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDE3Nyk7IH0gIAoKICByZXR1cm4gQ0luaGVy aXRlZDo6UmVwbGFjZUVsZW1lbnRXaXRoS2V5IChlbGVtZW50LCBjdXJzb3IpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKU2V0 VG9GaXJzdCAoSUN1cnNvckltcGwmIGN1cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklz Rm9yICgqdGhpcykgKSkgICBJQ3Vyc29yTm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0 ICggICB0aGlzLT5DbGFzc05hbWUgKCkgICwgICAgICJTZXRUb0ZpcnN0IiAgLCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5jIiwgMTg2KTsg fSAgCgogIHJldHVybiBDSW5oZXJpdGVkOjpTZXRUb0ZpcnN0IChjdXJzb3IpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ0tleVNldEltcGwgPENJbmhlcml0ZWQ+OjoKU2V0 VG9OZXh0IChJQ3Vyc29ySW1wbCYgY3Vyc29yKSBjb25zdAp7IHsgaWYgKCEgKCBjdXJzb3IuSXNG b3IgKCp0aGlzKSApKSAgIElDdXJzb3JOb3RGb3JUaGlzRXhjZXB0aW9uSW1wbCA6OnRocm93SXQg KCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIlNldFRvTmV4dCIgICwgIi9ob21lL2Frbm9s bC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlja3MuYyIsIDE5NSk7IH0g IAogIHsgaWYgKCEgKCBjdXJzb3IuSXNWYWxpZCAoKSApKSAgIElDdXJzb3JJbnZhbGlkRXhjZXB0 aW9uSW1wbCA6OnRocm93SXQgKCAgIHRoaXMtPkNsYXNzTmFtZSAoKSAgLCAgICAgIlNldFRvTmV4 dCIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUv aWlja3MuYyIsIDE5Nik7IH0gIAoKCgoKICByZXR1cm4gQ0luaGVyaXRlZDo6U2V0VG9OZXh0IChj dXJzb3IpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ0luaGVyaXRlZD4KYm9vbApJQ0tleVNldEltcGwg PENJbmhlcml0ZWQ+OjoKU2V0VG9OZXh0V2l0aERpZmZlcmVudEtleSAoSUN1cnNvckltcGwmIGN1 cnNvcikgY29uc3QKeyB7IGlmICghICggY3Vyc29yLklzRm9yICgqdGhpcykgKSkgICBJQ3Vyc29y Tm90Rm9yVGhpc0V4Y2VwdGlvbkltcGwgOjp0aHJvd0l0ICggICB0aGlzLT5DbGFzc05hbWUgKCkg ICwgICAgICJTZXRUb05leHRXaXRoRGlmZmVyZW50S2V5IiAgLCAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5jIiwgMjA4KTsgfSAgCiAgeyBp ZiAoISAoIGN1cnNvci5Jc1ZhbGlkICgpICkpICAgSUN1cnNvckludmFsaWRFeGNlcHRpb25JbXBs IDo6dGhyb3dJdCAoICAgdGhpcy0+Q2xhc3NOYW1lICgpICAsICAgICAiU2V0VG9OZXh0V2l0aERp ZmZlcmVudEtleSIgICwgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWlja3MuYyIsIDIwOSk7IH0gIAoKCgoKCgoKICByZXR1cm4gQ0luaGVyaXRlZDo6 U2V0VG9OZXh0V2l0aERpZmZlcmVudEtleSAoY3Vyc29yKTsKfQoKCgoKCgojIDE2NyAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWNrcy5oIiAyCgoK CiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZv KHJlc3RvcmUpCiAKCiAKCiMgMjggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWtzLmgiIDIKCgojIDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2a3MuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAK IAogCiAKIAogCgogCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2 ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoK IAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgoj cHJhZ21hIGVudW0oNCkKCgoKCgoKCgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCnRlbXBsYXRlIDxj bGFzcyBWSW5oZXJpdGVkPgpjbGFzcyBJVktleVNldEltcGwgOiBwdWJsaWMgVkluaGVyaXRlZCB7 CnB1YmxpYzoKCiAgdHlwZWRlZiB0eXBlbmFtZSAgVkluaGVyaXRlZDo6T3BzIE9wczsKCiAgICAg ICAgICAgSVZLZXlTZXRJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT3BzJiwgSU51 bWJlcik7CgogICAgICAgICAgIElWS2V5U2V0SW1wbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKE9wcyYsIElWS2V5U2V0SW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8VkluaGVyaXRlZD4gY29uc3QmKTsKCiAgYm9vbCAgICAgQWRkICAgICAgICAgICAgICAodm9p ZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIHZvaWQgICAgIEFkZEFsbEZyb20gICAgICAgKElB Q29sbGVjdGlvbkltcGwgY29uc3QmKTsKCiAgYm9vbCAgICAgQWRkT3JSZXBsYWNlRWxlbWVudFdp dGhLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvcklt cGwmKTsKCiAgdm9pZCAgICAgQ29weSAgICAgICAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBjb25z dCYpOwoKICBib29sICAgICBMb2NhdGVPckFkZEVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIElOdW1iZXIgIFJl bW92ZUFsbCAgICAgICAgKCk7CgogIElOdW1iZXIgIFJlbW92ZUFsbCAgICAgICAgKElQcmVkRnVu Yywgdm9pZCopOwoKICBJTnVtYmVyICBSZW1vdmVBbGxFbGVtZW50c1dpdGhLZXkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0Kik7CgogIHZvaWQgICAgIFJlbW92ZUF0ICAg ICAgICAgKElDdXJzb3JJbXBsJik7CgogIGJvb2wgICAgIFJlbW92ZUVsZW1lbnRXaXRoS2V5CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCopOwoKICB2b2lkICAgICBSZXBs YWNlQXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYsIHZvaWQgY29uc3QqKTsKCiAgYm9vbCAg ICAgUmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9p ZCBjb25zdCosIElDdXJzb3JJbXBsJik7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRlOgoKIyAxMjYgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2a3MuaCIK Cgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFnbWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFu Z2xpbmcocG9wKQoKCgoKIAoKIAoKCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpdmtzLmMiIDEKIAogCgoKCgoKCgoKCgoKCiAKIAogCiAK CgoKCgoKCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4KSVZLZXlTZXRJbXBs IDxWSW5oZXJpdGVkPjo6CklWS2V5U2V0SW1wbCAoT3BzJiBvcHMsIElOdW1iZXIgbnVtYmVyT2ZF bGVtZW50cykKOiBWSW5oZXJpdGVkIChvcHMsIG51bWJlck9mRWxlbWVudHMpCnsKfQoKdGVtcGxh dGUgPGNsYXNzIFZJbmhlcml0ZWQ+CklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpJVktleVNl dEltcGwKICAoT3BzJiBvcHMsIElWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD4gY29uc3QmIGNvbGxl Y3Rpb24pCjogVkluaGVyaXRlZCAob3BzLCBjb2xsZWN0aW9uKQp7Cn0KCnRlbXBsYXRlIDxjbGFz cyBWSW5oZXJpdGVkPgpib29sCklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpBZGQgKHZvaWQg Y29uc3QqIGVsZW1lbnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsgYm9vbCBpc0VuYWJsZWQgPSB0 aGlzLT5Jc0VuYWJsZWRGb3JOb3RpZmljYXRpb24gKCk7CiAgdGhpcy0+RGlzYWJsZU5vdGlmaWNh dGlvbiAoKTsKICBib29sIGhhc0JlZW5BZGRlZCA9IFZJbmhlcml0ZWQ6OkFkZCAoZWxlbWVudCwg Y3Vyc29yKTsKICB0aGlzLT5FbmFibGVOb3RpZmljYXRpb24gKGlzRW5hYmxlZCk7CiAgaWYgKGhh c0JlZW5BZGRlZCkgewogICAgdGhpcy0+Tm90aWZ5T2ZBZGRBdCAoY3Vyc29yKTsKICB9CiAgcmV0 dXJuIGhhc0JlZW5BZGRlZDsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CnZvaWQKSVZL ZXlTZXRJbXBsIDxWSW5oZXJpdGVkPjo6CkFkZEFsbEZyb20gKElBQ29sbGVjdGlvbkltcGwgY29u c3QmIGNvbGxlY3Rpb24pCnsgYm9vbCBpc0VuYWJsZWQgPSB0aGlzLT5Jc0VuYWJsZWRGb3JOb3Rp ZmljYXRpb24gKCk7CiAgdGhpcy0+RGlzYWJsZU5vdGlmaWNhdGlvbiAoKTsKICBWSW5oZXJpdGVk OjpBZGRBbGxGcm9tIChjb2xsZWN0aW9uKTsKICB0aGlzLT5FbmFibGVOb3RpZmljYXRpb24gKGlz RW5hYmxlZCk7CiAgdGhpcy0+Tm90aWZ5T2ZNb2RpZmljYXRpb24gKCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBWSW5oZXJpdGVkPgpib29sCklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpBZGRPclJl cGxhY2VFbGVtZW50V2l0aEtleSAodm9pZCBjb25zdCogZWxlbWVudCwgSUN1cnNvckltcGwmIGN1 cnNvcikKeyBib29sIGhhc0JlZW5BZGRlZCA9IGZhbHNlOwogIGlmIChWSW5oZXJpdGVkOjpMb2Nh dGVFbGVtZW50V2l0aEtleSAodGhpcy0+S2V5IChlbGVtZW50KSwgY3Vyc29yKSkgewoKCgogICAg dGhpcy0+Tm90aWZ5T2ZSZXBsYWNlQXQgKGN1cnNvciwgZWxlbWVudCk7CgogICAgVkluaGVyaXRl ZDo6UmVwbGFjZUF0IChjdXJzb3IsIGVsZW1lbnQpOwoKCgogIH0KICBlbHNlIHsKICAgIGhhc0Jl ZW5BZGRlZCA9IFZJbmhlcml0ZWQ6OkFkZCAoZWxlbWVudCwgY3Vyc29yKTsKICAgIHRoaXMtPk5v dGlmeU9mQWRkQXQgKGN1cnNvcik7CiAgfQogIHJldHVybiBoYXNCZWVuQWRkZWQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBWSW5oZXJpdGVkPgp2b2lkCklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpD b3B5IChJQUNvbGxlY3Rpb25JbXBsIGNvbnN0JiBjb2xsZWN0aW9uKQp7IGJvb2wgaXNFbmFibGVk ID0gdGhpcy0+SXNFbmFibGVkRm9yTm90aWZpY2F0aW9uICgpOwogIHRoaXMtPkRpc2FibGVOb3Rp ZmljYXRpb24gKCk7CiAgVkluaGVyaXRlZDo6Q29weSAoY29sbGVjdGlvbik7CiAgdGhpcy0+RW5h YmxlTm90aWZpY2F0aW9uIChpc0VuYWJsZWQpOwogIHRoaXMtPk5vdGlmeU9mTW9kaWZpY2F0aW9u ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVkluaGVyaXRlZD4KYm9vbApJVktleVNldEltcGwgPFZJ bmhlcml0ZWQ+OjoKTG9jYXRlT3JBZGRFbGVtZW50V2l0aEtleSAodm9pZCBjb25zdCoga2V5LCBJ Q3Vyc29ySW1wbCYgY3Vyc29yKQp7IGJvb2wgaXNFbmFibGVkID0gdGhpcy0+SXNFbmFibGVkRm9y Tm90aWZpY2F0aW9uICgpOwogIHRoaXMtPkRpc2FibGVOb3RpZmljYXRpb24gKCk7CiAgYm9vbCBo YXNCZWVuTG9jYXRlZCA9CiAgICBWSW5oZXJpdGVkOjpMb2NhdGVPckFkZEVsZW1lbnRXaXRoS2V5 IChrZXksIGN1cnNvcik7CiAgdGhpcy0+RW5hYmxlTm90aWZpY2F0aW9uIChpc0VuYWJsZWQpOwog IGlmICghaGFzQmVlbkxvY2F0ZWQpIHsKICAgIHRoaXMtPk5vdGlmeU9mQWRkQXQgKGN1cnNvcik7 CiAgfQogIHJldHVybiBoYXNCZWVuTG9jYXRlZDsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0 ZWQ+CklOdW1iZXIKSVZLZXlTZXRJbXBsIDxWSW5oZXJpdGVkPjo6ClJlbW92ZUFsbCAoKQp7IElO dW1iZXIgcmVzdWx0ID0gVkluaGVyaXRlZDo6UmVtb3ZlQWxsICgpOwogIGlmIChyZXN1bHQgPiAw KSB7CiAgICB0aGlzLT5Ob3RpZnlPZk1vZGlmaWNhdGlvbiAoKTsKICB9CiAgcmV0dXJuIHJlc3Vs dDsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CklOdW1iZXIKSVZLZXlTZXRJbXBsIDxW SW5oZXJpdGVkPjo6ClJlbW92ZUFsbCAoSVByZWRGdW5jIHByZWRGdW5jLCB2b2lkKiBhZGRBcmcp CnsgSU51bWJlciByZXN1bHQgPSBWSW5oZXJpdGVkOjpSZW1vdmVBbGwgKHByZWRGdW5jLCBhZGRB cmcpOwogIGlmIChyZXN1bHQgPiAwKSB7CiAgICB0aGlzLT5Ob3RpZnlPZk1vZGlmaWNhdGlvbiAo KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CklO dW1iZXIKSVZLZXlTZXRJbXBsIDxWSW5oZXJpdGVkPjo6ClJlbW92ZUFsbEVsZW1lbnRzV2l0aEtl eSAodm9pZCBjb25zdCoga2V5KQp7IGJvb2wgaXNFbmFibGVkID0gdGhpcy0+SXNFbmFibGVkRm9y Tm90aWZpY2F0aW9uICgpOwogIHRoaXMtPkRpc2FibGVOb3RpZmljYXRpb24gKCk7CiAgSU51bWJl ciByZXN1bHQgPSBWSW5oZXJpdGVkOjpSZW1vdmVBbGxFbGVtZW50c1dpdGhLZXkgKGtleSk7CiAg dGhpcy0+RW5hYmxlTm90aWZpY2F0aW9uIChpc0VuYWJsZWQpOwogIGlmIChyZXN1bHQgPiAwKSB7 CiAgICB0aGlzLT5Ob3RpZnlPZk1vZGlmaWNhdGlvbiAoKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsK fQoKdGVtcGxhdGUgPGNsYXNzIFZJbmhlcml0ZWQ+CnZvaWQKSVZLZXlTZXRJbXBsIDxWSW5oZXJp dGVkPjo6ClJlbW92ZUF0IChJQ3Vyc29ySW1wbCYgY3Vyc29yKQp7IHRoaXMtPk5vdGlmeU9mUmVt b3ZlQXQgKGN1cnNvcik7CiAgVkluaGVyaXRlZDo6UmVtb3ZlQXQgKGN1cnNvcik7Cn0KCnRlbXBs YXRlIDxjbGFzcyBWSW5oZXJpdGVkPgpib29sCklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpS ZW1vdmVFbGVtZW50V2l0aEtleSAodm9pZCBjb25zdCoga2V5KQp7IGlmICh0aGlzLT5Mb2NhdGVF bGVtZW50V2l0aEtleSAoa2V5LCB0aGlzLT5DdXJzb3JPZiAoKnRoaXMpKSkgewogICAgdGhpcy0+ Tm90aWZ5T2ZSZW1vdmVBdCAodGhpcy0+Q3Vyc29yT2YgKCp0aGlzKSk7CiAgfQogIHJldHVybiBW SW5oZXJpdGVkOjpSZW1vdmVFbGVtZW50V2l0aEtleSAoa2V5KTsKfQoKdGVtcGxhdGUgPGNsYXNz IFZJbmhlcml0ZWQ+CnZvaWQKSVZLZXlTZXRJbXBsIDxWSW5oZXJpdGVkPjo6ClJlcGxhY2VBdCAo SUN1cnNvckltcGwgY29uc3QmIGN1cnNvciwgdm9pZCBjb25zdCogZWxlbWVudCkKewoKCgogIHRo aXMtPk5vdGlmeU9mUmVwbGFjZUF0IChjdXJzb3IsIGVsZW1lbnQpOwoKICBWSW5oZXJpdGVkOjpS ZXBsYWNlQXQgKGN1cnNvciwgZWxlbWVudCk7CgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBWSW5oZXJp dGVkPgpib29sCklWS2V5U2V0SW1wbCA8VkluaGVyaXRlZD46OgpSZXBsYWNlRWxlbWVudFdpdGhL ZXkgKHZvaWQgY29uc3QqIGVsZW1lbnQsIElDdXJzb3JJbXBsJiBjdXJzb3IpCnsKCgoKICB0aGlz LT5Ob3RpZnlPZlJlcGxhY2VBdCAoY3Vyc29yLCBlbGVtZW50KTsKCiAgYm9vbCBoYXNCZWVuUmVw bGFjZWQgPQogICAgVkluaGVyaXRlZDo6UmVwbGFjZUVsZW1lbnRXaXRoS2V5IChlbGVtZW50LCBj dXJzb3IpOwoKCgogIHJldHVybiBoYXNCZWVuUmVwbGFjZWQ7Cn0KCgoKCgoKIyAxNTkgIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWl2a3MuaCIgMgoK CgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5m byhyZXN0b3JlKQogCgogCgojIDMwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lrcy5oIiAyCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4 X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpa3NhdmwuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoK CiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9paWtza3NzLmgiIDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAK IAoKIAoKCgoKCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWws IF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoK I3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJh Z21hIGVudW0oNCkKCgoKCgoKCgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCnRlbXBsYXRlIDxjbGFz cyBCYXNlPgpjbGFzcyBJS2V5U2V0T25LZXlTb3J0ZWRTZXRNbmdDdXJzb3JJbXBsOwoKdGVtcGxh dGUgPGNsYXNzIEJhc2U+CmNsYXNzIElLZXlTZXRPbktleVNvcnRlZFNldEltcGw7Cgp0ZW1wbGF0 ZSA8Y2xhc3MgQmFzZT4KY2xhc3MgICBJS2V5U2V0T25LZXlTb3J0ZWRTZXRNbmdDdXJzb3JJbXBs IDogcHVibGljIEJhc2U6Ok1uZ0N1cnNvcgp7CiAgdHlwZWRlZiB0eXBlbmFtZSAgQmFzZTo6TW5n Q3Vyc29yIEluaGVyaXRlZDsKCnB1YmxpYzoKCiAgICAgICAgICAgSUtleVNldE9uS2V5U29ydGVk U2V0TW5nQ3Vyc29ySW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElLZXlTZXRPbktl eVNvcnRlZFNldEltcGwgPEJhc2U+IGNvbnN0Jik7CgogICAgICAgICAgfklLZXlTZXRPbktleVNv cnRlZFNldE1uZ0N1cnNvckltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKcHJv dGVjdGVkOgoKcHJpdmF0ZToKCgoKCgoKCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBCYXNlPgpjbGFz cyBJQmFnT25LZXlTZXRJbXBsOwoKdGVtcGxhdGUgPGNsYXNzIEJhc2U+CmNsYXNzIElBS2V5U2V0 T25LZXlTb3J0ZWRTZXRPcHM7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KY2xhc3MgICBJS2V5U2V0 T25LZXlTb3J0ZWRTZXRJbXBsIDogcHVibGljIElBS2V5U2V0SW1wbCB7CgogIHR5cGVkZWYgIElB S2V5U2V0SW1wbCBJbmhlcml0ZWQ7CgogIHR5cGVkZWYgIElLZXlTZXRPbktleVNvcnRlZFNldElt cGwgPEJhc2U+IFNlbGY7CgpwdWJsaWM6CgogIHR5cGVkZWYgIElBS2V5U2V0T25LZXlTb3J0ZWRT ZXRPcHMgPEJhc2U+IE9wczsKCiAgdHlwZWRlZiB0eXBlbmFtZSAgQmFzZTo6Q3Vyc29yIEN1cnNv cjsKCiAgdHlwZWRlZiAgSUtleVNldE9uS2V5U29ydGVkU2V0TW5nQ3Vyc29ySW1wbCA8QmFzZT4g TW5nQ3Vyc29yOwoKICAgICAgICAgICBJS2V5U2V0T25LZXlTb3J0ZWRTZXRJbXBsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoT3BzJiwgSU51bWJlcik7CgogICAgICAgICAgIElLZXlTZXRP bktleVNvcnRlZFNldEltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPcHMmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElLZXlTZXRPbktleVNvcnRlZFNldEltcGwgPEJhc2U+ IGNvbnN0Jik7CgogICAgICAgICAgfklLZXlTZXRPbktleVNvcnRlZFNldEltcGwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgpOwoKICBib29sIEFkZCAgICAgICAgICAgICAgKHZvaWQgY29u c3QqLCBJQ3Vyc29ySW1wbCYpOwoKICB2b2lkICAgICBBZGRBbGxGcm9tICAgICAgIChJQUNvbGxl Y3Rpb25JbXBsIGNvbnN0Jik7CgogIGJvb2wgQWRkT3JSZXBsYWNlRWxlbWVudFdpdGhLZXkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsKCiAg Ym9vbCBBbGxFbGVtZW50c0RvICAgIChJQXBwbEZ1bmMsIHZvaWQqKTsKCiAgdm9pZCogICAgQW55 ICAgICAgICAgICAgICAoKSBjb25zdDsKCiAgYm9vbCBDaGVja0N1cnNvciAgICAgIChJQ3Vyc29y SW1wbCBjb25zdCYpIGNvbnN0OwoKICBib29sIENoZWNrUmVwbGFjZW1lbnQgKElDdXJzb3JJbXBs IGNvbnN0Jiwgdm9pZCBjb25zdCogKSBjb25zdDsKCiAgY2hhciBjb25zdCoKICAgICAgICAgICBD bGFzc05hbWUgICAgICAgICgpIGNvbnN0OwoKICBJQUNvbGxlY3Rpb25JbXBsKgogICAgICAgICAg IENsb25lICAgICAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgQ29udGFpbnNBbGxLZXlzRnJvbQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKElBQ29sbGVjdGlvbkltcGwgY29uc3QmKSBjb25z dDsKCiAgYm9vbCBDb250YWluc0VsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICB2b2lkICAgICBDb3B5ICAgICAgICAgICAgIChJ QUNvbGxlY3Rpb25JbXBsIGNvbnN0Jik7CgogIEN1cnNvciogIENyZWF0ZUN1cnNvciAgICAgKCkg Y29uc3Q7CgogIE1uZ0N1cnNvcioKICAgICAgICAgICBDcmVhdGVNbmdDdXJzb3IgICgpIGNvbnN0 OwoKICB2b2lkKiAgICBFbGVtZW50QXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNvbnN0 OwoKICB2b2lkKiAgICBFbGVtZW50V2l0aEtleSAgICh2b2lkIGNvbnN0KikgY29uc3Q7CgogIGJv b2wgSXNCb3VuZGVkICAgICAgICAoKSBjb25zdDsKCiAgYm9vbCBJc0NvbnNpc3RlbnQgICAgICgp IGNvbnN0OwoKICBib29sIElzRW1wdHkgICAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgSXNGdWxs ICAgICAgICAgICAoKSBjb25zdDsKCiAgdm9pZCogICAgS2V5ICAgICAgICAgICAgICAodm9pZCBj b25zdCopIGNvbnN0OwoKICBib29sIExvY2F0ZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJikgY29uc3Q7CgogIGJvb2wg TG9jYXRlT3JBZGRFbGVtZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv aWQgY29uc3QqLCBJQ3Vyc29ySW1wbCYpOwoKICBJTnVtYmVyICBOdW1iZXJPZkVsZW1lbnRzICgp IGNvbnN0OwoKICBJTnVtYmVyICBSZW1vdmVBbGwgICAgICAgICgpOwoKICBJTnVtYmVyICBSZW1v dmVBbGwgICAgICAgIChJUHJlZEZ1bmMsIHZvaWQqKTsKCiAgdm9pZCAgICAgUmVtb3ZlQXQgICAg ICAgICAoSUN1cnNvckltcGwmKTsKCiAgYm9vbCBSZW1vdmVFbGVtZW50V2l0aEtleQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqKTsKCiAgdm9pZCAgICAgUmVwbGFjZUF0 ICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmLCB2b2lkIGNvbnN0Kik7CgogIGJvb2wgUmVwbGFj ZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCos IElDdXJzb3JJbXBsJik7CgogIGJvb2wgU2V0VG9GaXJzdCAgICAgICAoSUN1cnNvckltcGwmKSBj b25zdDsKCiAgYm9vbCBTZXRUb05leHQgICAgICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoKICB2 b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJS2V5U2V0T25LZXlTb3J0ZWRTZXRJbXBsIDxCYXNl PiBjb25zdCYpOwoKcHJvdGVjdGVkOgoKICBib29sIEVxdWFsS2V5cyAgICAgICAgKHZvaWQgY29u c3QqLCB2b2lkIGNvbnN0KiwgSUFyZ1R5cGUpIGNvbnN0OwoKcHJpdmF0ZToKCiAgc3RhdGljCiAg Y2hhciBjb25zdCoKICAgICAgICAgICBjdkNsYXNzTmFtZTsKCiAgQmFzZSYgICAgaXZCYXNlOwoK ICBzdGF0aWMKICBCYXNlJiAgICBCYXNlT2YgICAgICAgICAgIChJS2V5U2V0T25LZXlTb3J0ZWRT ZXRJbXBsIDxCYXNlPiBjb25zdCYpOwoKICBzdGF0aWMKICBPcHMmICAgICBPcHNPZiAgICAgICAg ICAgIChJS2V5U2V0T25LZXlTb3J0ZWRTZXRJbXBsIDxCYXNlPiBjb25zdCYpOwoKICBmcmllbmQK ICBjbGFzcyAgICBJS2V5U2V0T25LZXlTb3J0ZWRTZXRNbmdDdXJzb3JJbXBsIDxCYXNlPjsKCiAK IAogCiAKIAoKICBmcmllbmQKICBjbGFzcyAgICBJQmFnT25LZXlTZXRJbXBsIDxTZWxmPjsKCgpw dWJsaWM6CiAgSVN0cmVhbWVyUHRyJgogICAgICAgICAgIFN0cmVhbWVyT2YgICAgICAgKElBQ29s bGVjdGlvbkltcGwgY29uc3QmKTsKCiAgdm9pZCAgICAgU3RyZWFtSW4gICAgICAgICAoSURhdGFT dHJlYW0mKTsKCiAgdm9pZCAgICAgU3RyZWFtT3V0ICAgICAgICAoSURhdGFTdHJlYW0mKSBjb25z dDsKCiAgdm9pZCAgICAgQWRvcHRTdHJlYW1lciAgICAoSUFDb2xsZWN0aW9uU3RyZWFtZXIqKTsK CgojIDI4MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9paWtza3NzLmgiCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBCYXNlPgpjbGFzcyAgIElBS2V5U2V0 T25LZXlTb3J0ZWRTZXRPcHMKewpwdWJsaWM6CgogIHZpcnR1YWwgfklBS2V5U2V0T25LZXlTb3J0 ZWRTZXRPcHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICB2aXJ0dWFsCiAgSUFD b2xsZWN0aW9uSW1wbCoKICAgICAgICAgICBDbG9uZSAgICAgICAgICAgICgpIGNvbnN0ID0gMDsK CiAgdmlydHVhbCAgb3BlcmF0b3IgQmFzZSYgICAoKSA9IDA7Cgpwcm90ZWN0ZWQ6Cgpwcml2YXRl OgoKCgoKCgoKCn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21h IG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtza3NzLmlubCIgMQoKCgogCiAKIAoKCgoKCgoK CgoKCiAKIAogCiAKIAogCgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEJhc2U+CmlubGluZSB2 b2lkCklLZXlTZXRPbktleVNvcnRlZFNldEltcGwgPEJhc2U+OjoKb3BlcmF0b3I9IChJS2V5U2V0 T25LZXlTb3J0ZWRTZXRJbXBsIDxCYXNlPiBjb25zdCYgY29sbGVjdGlvbikKeyBCYXNlT2YgKCp0 aGlzKS5CYXNlOjpvcGVyYXRvcj0gKEJhc2VPZiAoY29sbGVjdGlvbikpOwp9CgoKIAogCiAKCiAK CnRlbXBsYXRlIDxjbGFzcyBCYXNlPgppbmxpbmUKSUFLZXlTZXRPbktleVNvcnRlZFNldE9wcyA8 QmFzZT46Ogp+SUFLZXlTZXRPbktleVNvcnRlZFNldE9wcyAoKQp7Cn0KCiAKCiMgMzM2ICIvaG9t ZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpa3Nrc3MuaCIg MgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGlu Zm8ocmVzdG9yZSkKIAoKIAoKIyAyNiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9paWtzYXZsLmgiIDIKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9s aW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzc2F2bC5oIiAxCgoKCiAKIAogCgoKCgoK CgoKCgoKIAogCiAKIAogCiAKCiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9paWFrc3MuaCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAog CiAKIAogCgogCgogCgogCiNwcmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChsZXZlbCwg X19JT0NfSEVBREVSX1JFUE9SVF9MRVZFTCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCgogCgoj cHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFn bWEgZW51bSg0KQoKCgoKCgoKCgoKCgoKCgogCgogCiAKCiAKIAoKIAoKY2xhc3MgICBJQUtleVNv cnRlZFNldEltcGwgOiBwdWJsaWMgSUFDb2xsZWN0aW9uSW1wbCB7CnB1YmxpYzoKCiAgICAgICAg ICB+SUFLZXlTb3J0ZWRTZXRJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAg dmlydHVhbAogIGxvbmcgICAgIENvbXBhcmUgICAgICAgICAgKElBS2V5U29ydGVkU2V0SW1wbCBj b25zdCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNvbXBGdW5jLCB2b2lkKikgY29u c3Q7Cgpwcm90ZWN0ZWQ6CgogICAgICAgICAgIElBS2V5U29ydGVkU2V0SW1wbAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKE9wcyYpOwoKICBJTnVtYmVyICBOdW1iZXJPZkRpZmZlcmVudEtl eXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIGNvbnN0OwoKICBJTnVtYmVyICBOdW1i ZXJPZkVsZW1lbnRzV2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgY29u c3QqKSBjb25zdDsKCiAgSU51bWJlciAgUmVtb3ZlQWxsRWxlbWVudHNXaXRoS2V5CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCopOwoKICBib29sICAgICBTZXRUb05leHRX aXRoRGlmZmVyZW50S2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUN1cnNvckltcGwm KSBjb25zdDsKCnByaXZhdGU6CgojIDEwNyAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkw LXNoYXJlZC5iaW4vaW5jbHVkZS9paWFrc3MuaCIKCgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFn bWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAogCgogCiNw cmFnbWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3Jl KQogCgogCgojIDI3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lpa3NzYXZsLmgiIDIKCgoKCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdt YSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhy ZXN0b3JlKQogCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NI RU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKCgoKCiAKCiAKdHlwZWRlZiBzaG9ydCBE aXJlY3Rpb247CgpzdHJ1Y3QgSUFLZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2RlSW1wbCB7CgogIElB S2V5U29ydGVkU2V0QXNBdmxUcmVlTm9kZUltcGwKICAgICAgICAgICppdkxlZnQsCiAgICAgICAg ICAqaXZSaWdodCwKICAgICAgICAgICppdlBhcmVudDsKCiAgRGlyZWN0aW9uCiAgICAgICAgICAg aXZEZWVwZXJTdWJ0cmVlOwoKICAgICAgICAgICBJQUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJ bXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgSUFLZXlTb3J0ZWRTZXRBc0F2 bFRyZWVOb2RlSW1wbComCiAgICAgICAgICAgTGluayAgICAgICAgICAgICAoRGlyZWN0aW9uKTsK CiAgdm9pZCAgICAgUGFyZW50ICAgICAgICAgICAoSUFLZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2Rl SW1wbComLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiYpOwoKICB2b2lk ICAgICBDb25uZWN0Q2hpbGQgICAgIChEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSUFLZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2RlSW1wbCopOwoKICB2b2lkICAgICBDb25u ZWN0Q2hpbGQwICAgIChEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFL ZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2RlSW1wbCopOwoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVt ZW50PgpzdHJ1Y3QgSUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJbXBsIDoKICBwdWJsaWMgSUFL ZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2RlSW1wbCB7CgogIEVsZW1lbnQgIGl2RWxlbWVudDsKCiAg ICAgICAgICAgSUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJbXBsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoRWxlbWVudCBjb25zdCYpOwoKICAgICAgICAgIH5JS2V5U29ydGVkU2V0QXNB dmxUcmVlTm9kZUltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKCiAgdm9pZCAg ICAgU3RyZWFtSW4gICAgICAgICAoSUFDb2xsZWN0aW9uU3RyZWFtZXIqLCBJRGF0YVN0cmVhbSYp OwoKCgoKCgoKCn07CgoKCgoKCgoKCgogCgogCiAKCiAKCmNsYXNzICAgSUtleVNvcnRlZFNldEFz QXZsVHJlZUN1cnNvckltcGwgOiBwdWJsaWMgSUN1cnNvckltcGwgewoKICB0eXBlZGVmICBJQ3Vy c29ySW1wbCBJbmhlcml0ZWQ7CgogIHR5cGVkZWYgIElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVDdXJz b3JJbXBsIFNlbGY7CgpwdWJsaWM6CgogICAgICAgICAgIElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVD dXJzb3JJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBj b25zdCYpOwoKICAgICAgICAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlQ3Vyc29ySW1wbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVDdXJzb3JJbXBs IGNvbnN0Jik7CgogICAgICAgICAgfklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVDdXJzb3JJbXBsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgSUN1cnNvckltcGwqCiAgICAgICAgICAg Q2xvbmUgICAgICAgICAgICAoKSBjb25zdDsKCiAgdm9pZCAgICAgQ29weSAgICAgICAgICAgICAo SUN1cnNvckltcGwgY29uc3QmKTsKCiAgdm9pZCAgICAgSW52YWxpZGF0ZSAgICAgICAoKTsKCiAg Ym9vbCBJc0luQmV0d2VlbiAgICAgICgpIGNvbnN0OwoKICBib29sIElzVmFsaWQgICAgICAgICAg KCkgY29uc3Q7CgogIHZvaWQgICAgIG9wZXJhdG9yPSAgICAgICAgKElLZXlTb3J0ZWRTZXRBc0F2 bFRyZWVDdXJzb3JJbXBsIGNvbnN0Jik7CgogIGJvb2wgb3BlcmF0b3I9PSAgICAgICAoSUN1cnNv ckltcGwgY29uc3QmKSBjb25zdDsKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIElBS2V5U29ydGVk U2V0QXNBdmxUcmVlTm9kZUltcGwqCiAgICAgICAgICAgaXZOb2RlOwoKICBmcmllbmQKICBjbGFz cyAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlSW1wbDsKCgoKCgoKCgoKCn07CgojIDI0NSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzc2F2bC5o IgoKCnRlbXBsYXRlIDxjbGFzcyBCYXNlPiBjbGFzcyBJS2V5U2V0T25LZXlTb3J0ZWRTZXRJbXBs OwoKdGVtcGxhdGUgPGNsYXNzIEJhc2U+IGNsYXNzIElTb3J0ZWRCYWdPbktleVNvcnRlZFNldElt cGw7Cgp0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4gY2xhc3MgSVNvcnRlZE1hcE9uS2V5U29ydGVkU2V0 SW1wbDsKCmNsYXNzIElBS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzOwoKY2xhc3MgICBJS2V5U29y dGVkU2V0QXNBdmxUcmVlSW1wbCA6IHB1YmxpYyBJQUtleVNvcnRlZFNldEltcGwgewoKICB0eXBl ZGVmICBJQUtleVNvcnRlZFNldEltcGwgSW5oZXJpdGVkOwoKICB0eXBlZGVmICBJS2V5U29ydGVk U2V0QXNBdmxUcmVlSW1wbCBTZWxmOwoKICB0eXBlZGVmICBJQUtleVNvcnRlZFNldEFzQXZsVHJl ZU5vZGVJbXBsIE5vZGU7CgoKICB0eXBlZGVmICBJQUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJ bXBsIFN0cmVhbWVyTm9kZTsKCgpwdWJsaWM6CgogIHR5cGVkZWYgIElBS2V5U29ydGVkU2V0QXNB dmxUcmVlT3BzIE9wczsKCiAgdHlwZWRlZiAgSUtleVNvcnRlZFNldEFzQXZsVHJlZUN1cnNvcklt cGwgQ3Vyc29yOwoKCgoKICB0eXBlZGVmICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlQ3Vyc29ySW1w bCBNbmdDdXJzb3I7CgoKICAgICAgICAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlSW1wbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKE9wcyYsIElOdW1iZXIpOwoKICAgICAgICAgICBJS2V5 U29ydGVkU2V0QXNBdmxUcmVlSW1wbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9wcyYs IElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVJbXBsIGNvbnN0Jik7CgogICAgICAgICAgfklLZXlTb3J0 ZWRTZXRBc0F2bFRyZWVJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKCiAgYm9v bCBBZGQgICAgICAgICAgICAgICh2b2lkIGNvbnN0KiwgSUN1cnNvckltcGwmKTsKCiAgdm9pZCAg ICAgQWRkQWxsRnJvbSAgICAgICAoSUFDb2xsZWN0aW9uSW1wbCBjb25zdCYpOwoKICBib29sIEFk ZE9yUmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9p ZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIGJvb2wgQWxsRWxlbWVudHNEbyAgICAoSUFwcGxG dW5jLCB2b2lkKik7CgogIHZvaWQqICAgIEFueSAgICAgICAgICAgICAgKCkgY29uc3Q7CgogIGJv b2wgQ2hlY2tDdXJzb3IgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgYm9vbCBD aGVja1JlcGxhY2VtZW50IChJQ3Vyc29ySW1wbCBjb25zdCYsIHZvaWQgY29uc3QqKSBjb25zdDsK CiAgY2hhciBjb25zdCoKICAgICAgICAgICBDbGFzc05hbWUgICAgICAgICgpIGNvbnN0OwoKICBJ QUNvbGxlY3Rpb25JbXBsKgogICAgICAgICAgIENsb25lICAgICAgICAgICAgKCkgY29uc3Q7Cgog IGJvb2wgQ29udGFpbnNBbGxLZXlzRnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElB Q29sbGVjdGlvbkltcGwgY29uc3QmKSBjb25zdDsKCiAgYm9vbCBDb250YWluc0VsZW1lbnRXaXRo S2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICB2 b2lkICAgICBDb3B5ICAgICAgICAgICAgIChJQUNvbGxlY3Rpb25JbXBsIGNvbnN0Jik7CgogIEN1 cnNvciogIENyZWF0ZUN1cnNvciAgICAgKCkgY29uc3Q7CgogIE1uZ0N1cnNvcioKICAgICAgICAg ICBDcmVhdGVNbmdDdXJzb3IgICgpIGNvbnN0OwoKICB2b2lkKiAgICBFbGVtZW50QXQgICAgICAg IChJQ3Vyc29ySW1wbCBjb25zdCYpIGNvbnN0OwoKICB2b2lkKiAgICBFbGVtZW50QXRQb3NpdGlv bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQb3NpdGlvbikgY29uc3Q7CgogIHZvaWQq ICAgIEVsZW1lbnRXaXRoS2V5ICAgKHZvaWQgY29uc3QqKSBjb25zdDsKCiAgdm9pZCogICAgRmly c3QgICAgICAgICAgICAoKSBjb25zdDsKCiAgYm9vbCBJc0JvdW5kZWQgICAgICAgICgpIGNvbnN0 OwoKICBib29sIElzQ29uc2lzdGVudCAgICAgKCkgY29uc3Q7CgogIGJvb2wgSXNFbXB0eSAgICAg ICAgICAoKSBjb25zdDsKCiAgYm9vbCBJc0ZpcnN0QXQgICAgICAgIChJQ3Vyc29ySW1wbCBjb25z dCYpIGNvbnN0OwoKICBib29sIElzRnVsbCAgICAgICAgICAgKCkgY29uc3Q7CgogIGJvb2wgSXNM YXN0QXQgICAgICAgICAoSUN1cnNvckltcGwgY29uc3QmKSBjb25zdDsKCiAgdm9pZCogICAgS2V5 ICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICB2b2lkKiAgICBMYXN0ICAgICAg ICAgICAgICgpIGNvbnN0OwoKICBib29sIExvY2F0ZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJikgY29uc3Q7CgogIGJv b2wgTG9jYXRlTmV4dEVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dm9pZCBjb25zdCosIElDdXJzb3JJbXBsJikgY29uc3Q7CgogIGJvb2wgTG9jYXRlT3JBZGRFbGVt ZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QqLCBJQ3Vy c29ySW1wbCYpOwoKICBJTnVtYmVyICBOdW1iZXJPZkVsZW1lbnRzICgpIGNvbnN0OwoKICBJUG9z aXRpb24KICAgICAgICAgICBQb3NpdGlvbkF0ICAgICAgIChJQ3Vyc29ySW1wbCBjb25zdCYpIGNv bnN0OwoKICBJTnVtYmVyICBSZW1vdmVBbGwgICAgICAgICgpOwoKICBJTnVtYmVyICBSZW1vdmVB bGwgICAgICAgIChJUHJlZEZ1bmMsIHZvaWQqKTsKCiAgdm9pZCAgICAgUmVtb3ZlQXQgICAgICAg ICAoSUN1cnNvckltcGwmKTsKCiAgdm9pZCAgICAgUmVtb3ZlQXRQb3NpdGlvbiAoSVBvc2l0aW9u KTsKCiAgYm9vbCBSZW1vdmVFbGVtZW50V2l0aEtleQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZvaWQgY29uc3QqKTsKCiAgdm9pZCAgICAgUmVtb3ZlRmlyc3QgICAgICAoKTsKCiAgdm9p ZCAgICAgUmVtb3ZlTGFzdCAgICAgICAoKTsKCiAgdm9pZCAgICAgUmVwbGFjZUF0ICAgICAgICAo SUN1cnNvckltcGwgY29uc3QmLCB2b2lkIGNvbnN0Kik7CgogIHZvaWQgICAgIFJlcGxhY2VBdFBv c2l0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVBvc2l0aW9uLCB2b2lkIGNvbnN0 Kik7CgogIGJvb2wgUmVwbGFjZUVsZW1lbnRXaXRoS2V5CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodm9pZCBjb25zdCosIElDdXJzb3JJbXBsJik7CgogIGJvb2wgU2V0VG9GaXJzdCAgICAg ICAoSUN1cnNvckltcGwmKSBjb25zdDsKCiAgYm9vbCBTZXRUb05leHQgICAgICAgIChJQ3Vyc29y SW1wbCYpIGNvbnN0OwoKICBib29sIFNldFRvTGFzdCAgICAgICAgKElDdXJzb3JJbXBsJikgY29u c3Q7CgogIHZvaWQgICAgIFNldFRvUG9zaXRpb24gICAgKElQb3NpdGlvbiwgSUN1cnNvckltcGwm KSBjb25zdDsKCiAgYm9vbCBTZXRUb1ByZXZpb3VzICAgIChJQ3Vyc29ySW1wbCYpIGNvbnN0OwoK ICB2b2lkICAgICBvcGVyYXRvcj0gICAgICAgIChJS2V5U29ydGVkU2V0QXNBdmxUcmVlSW1wbCBj b25zdCYpOwoKcHJvdGVjdGVkOgoKICB2b2lkICAgICBBc3NpZ24gICAgICAgICAgICh2b2lkKiwg dm9pZCBjb25zdCopIGNvbnN0OwoKICB2b2lkKiAgICBDcmVhdGVOb2RlICAgICAgICh2b2lkIGNv bnN0KikgY29uc3Q7CgogIGxvbmcgICAgIENvbXBhcmVLZXlzICAgICAgKHZvaWQgY29uc3QqLCB2 b2lkIGNvbnN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQXJnVHlwZSkgY29uc3Q7 CgogIHZvaWQgICAgIERlbGV0ZU5vZGUgICAgICAgKHZvaWQqKSBjb25zdDsKCnByaXZhdGU6Cgog IGVudW0geyBrT3JpZ2luYWxWZXJzaW9uIH07CgogIHN0YXRpYwogIGNoYXIgY29uc3QqCiAgICAg ICAgICAgY3ZDbGFzc05hbWU7CgogIE1uZ0N1cnNvcioKICAgICAgICAgICBpdk1uZ0N1cnNvcnM7 CgogIE5vZGUqICAgIGl2Um9vdDsKCiAgSU51bWJlciAgaXZOdW1iZXJPZkVsZW1lbnRzOwoKICB2 b2lkICAgICBBZGRBbGxGcm9tU3VidHJlZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5v ZGUgY29uc3QqKTsKCiAgYm9vbCBBbGxFbGVtZW50c0RvU3VidHJlZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKElBcHBsRnVuYywgdm9pZCosIE5vZGUqKSBjb25zdDsKCiAgdm9pZCAgICAg QmFsYW5jZSAgICAgICAgICAoTm9kZSosIERpcmVjdGlvbiwgYm9vbCYpOwoKICBib29sIENoZWNr Tm9kZSAgICAgICAgKE5vZGUgY29uc3QqLCBOb2RlKikgY29uc3Q7CgogIGJvb2wgQ29udGFpbnNB bGxLZXlzRnJvbVN1YnRyZWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb2RlIGNvbnN0 KikgY29uc3Q7CgogIE5vZGUqICAgIENvcHlTdWJ0cmVlICAgICAgKE5vZGUgY29uc3QqKSBjb25z dDsKCiAgdm9pZCAgICAgRGVsZXRlU3VidHJlZSAgICAoTm9kZSopIGNvbnN0OwoKICB2b2lkICAg ICBEaXNjb25uZWN0QW5kUmVtb3ZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9kZSos IGJvb2wmKTsKCiAgdm9pZCogICAgRWxlbWVudE9mICAgICAgICAoTm9kZSBjb25zdCopIGNvbnN0 OwoKICBib29sIElzQ29uc2lzdGVudFN1YnRyZWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChOb2RlIGNvbnN0KiwgaW50JiwgSU51bWJlciYpIGNvbnN0OwoKICBzdGF0aWMKICBib29sIElz SW5CZXR3ZWVuICAgICAgKElDdXJzb3JJbXBsIGNvbnN0Jik7CgogIHN0YXRpYwogIE5vZGUqJiAg IE5leHROb2RlT2YgICAgICAgKElDdXJzb3JJbXBsIGNvbnN0Jik7CgogIHN0YXRpYwogIE5vZGUq JiAgIE5vZGVPZiAgICAgICAgICAgKElDdXJzb3JJbXBsIGNvbnN0Jik7CgogIHN0YXRpYwogIE9w cyYgICAgIE9wc09mICAgICAgICAgICAgKElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVJbXBsIGNvbnN0 Jik7CgogIHN0YXRpYwogIE5vZGUqJiAgIFByZXZpb3VzTm9kZU9mICAgKElDdXJzb3JJbXBsIGNv bnN0Jik7CgogIHZvaWQgICAgIFJlcGxhY2VOb2RlICAgICAgKE5vZGUqLCBOb2RlKik7CgogIHZv aWQgICAgIFNldEluQmV0d2VlbiAgICAgKE1uZ0N1cnNvciYpIGNvbnN0OwoKICBmcmllbmQKICBj bGFzcyAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlTW5nQ3Vyc29ySW1wbDsKCiAgZnJpZW5kCiAg Y2xhc3MgICAgSUtleVNldE9uS2V5U29ydGVkU2V0SW1wbCA8U2VsZj47CgogIGZyaWVuZAogIGNs YXNzICAgIElTb3J0ZWRCYWdPbktleVNvcnRlZFNldEltcGwgPFNlbGY+OwoKICBmcmllbmQKICBj bGFzcyAgICBJU29ydGVkTWFwT25LZXlTb3J0ZWRTZXRJbXBsIDxTZWxmPjsKCgpwcm90ZWN0ZWQ6 CiAgdm9pZCAgICAgQWRkRnJvbVN0cmVhbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElE YXRhU3RyZWFtJiwgSUN1cnNvckltcGwmKTsKCiAgdm9pZCogICAgQ3JlYXRlTm9kZVdpdGhTdHJl YW1lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSURhdGFTdHJlYW0mKSBjb25zdDsK CnB1YmxpYzoKICBJU3RyZWFtZXJQdHImCiAgICAgICAgICAgU3RyZWFtZXJPZiAgICAgICAoSUFD b2xsZWN0aW9uSW1wbCBjb25zdCYpOwoKICB2b2lkICAgICBTdHJlYW1JbiAgICAgICAgIChJRGF0 YVN0cmVhbSYpOwoKICB2b2lkICAgICBTdHJlYW1PdXQgICAgICAgIChJRGF0YVN0cmVhbSYpIGNv bnN0OwoKICB2b2lkICAgICBBZG9wdFN0cmVhbWVyICAgIChJQUNvbGxlY3Rpb25TdHJlYW1lciop OwoKCiMgNTQ0ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lpa3NzYXZsLmgiCgoKfTsKCmNsYXNzICAgSUFLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMg OiBwdWJsaWMgSUFDb2xsZWN0aW9uT3BzIHsKcHVibGljOgoKICB2aXJ0dWFsIH5JQUtleVNvcnRl ZFNldEFzQXZsVHJlZU9wcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgogIHZpcnR1 YWwKICB2b2lkICAgICBBc3NpZ24gICAgICAgICAgICh2b2lkKiwgdm9pZCBjb25zdCopIGNvbnN0 ID0gMDsKCiAgdmlydHVhbAogIElBQ29sbGVjdGlvbkltcGwqCiAgICAgICAgICAgQ2xvbmUgICAg ICAgICAgICAoKSBjb25zdCA9IDA7CgogIHZpcnR1YWwKICBsb25nICAgICBDb21wYXJlS2V5cyAg ICAgICh2b2lkIGNvbnN0Kiwgdm9pZCBjb25zdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSUFyZ1R5cGUpIGNvbnN0ID0gMDsKCiAgdmlydHVhbAogIHZvaWQqICAgIENyZWF0ZU5vZGUg ICAgICAgKHZvaWQgY29uc3QqKSBjb25zdCA9IDA7CgogIHZpcnR1YWwKICB2b2lkICAgICBEZWxl dGVOb2RlICAgICAgICh2b2lkKikgY29uc3QgPSAwOwoKICB2aXJ0dWFsCiAgdm9pZCogICAgS2V5 ICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0ID0gMDsKCiAgdmlydHVhbAogIHZvaWQq ICAgIEVsZW1lbnRQdHIgICAgICAgKHZvaWQgY29uc3QqKSBjb25zdCA9IDA7Cgpwcm90ZWN0ZWQ6 CgogICAgICAgICAgIElBS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYm9vbCk7Cgpwcml2YXRlOgoKICBib29sIGl2Q29udGFpbnNEVFNPYmplY3Rz OwoKICBmcmllbmQKICBjbGFzcyAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlSW1wbDsKCgpwdWJs aWM6CiAgdmlydHVhbAogIHZvaWQqICAgIENyZWF0ZU5vZGVXaXRoU3RyZWFtZXIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChJQUNvbGxlY3Rpb25TdHJlYW1lciosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSURhdGFTdHJlYW0mKSBjb25zdCA9IDA7CgoKIyA2MTMgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWlrc3NhdmwuaCIKCgp9 OwoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIF9LZXksCiAgICAgICAgICBjbGFzcyBF bGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4KY2xhc3MgICBJS2V5U29ydGVkU2V0QXNB dmxUcmVlT3BzIDogcHVibGljIElBS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIHsKCiAgdHlwZWRl ZiAgSUFLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMgSW5oZXJpdGVkOwoKICB0eXBlZGVmICBJS2V5 U29ydGVkU2V0QXNBdmxUcmVlT3BzCiAgICAgICAgICAgIDxFbGVtZW50LCBfS2V5LCBFbGVtZW50 T3BzLCBJbXBsZW1lbnRhdGlvbj4gU2VsZjsKCiAgdHlwZWRlZiAgSUtleVNvcnRlZFNldEFzQXZs VHJlZU5vZGVJbXBsIDxFbGVtZW50PiBOb2RlOwoKcHVibGljOgoKICB0eXBlZGVmICBJbXBsZW1l bnRhdGlvbiBJbXBsVHlwZTsKCiAgdHlwZWRlZiAgRWxlbWVudCBFbGVtZW50VHlwZTsKCiAgdHlw ZWRlZiAgX0tleSBLZXlUeXBlOwoKICAgICAgICAgICBJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3Bz CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU51bWJlcik7CgogICAgICAgICAgIElLZXlT b3J0ZWRTZXRBc0F2bFRyZWVPcHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTnVtYmVy LCB2b2lkKik7CgogICAgICAgICAgIElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDxFbGVtZW50LCBfS2V5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRWxlbWVudE9wcywgSW1wbGVtZW50YXRpb24+IGNvbnN0Jik7CgogICAgICAgICAg fklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgp OwoKICB2b2lkICAgICBBc3NpZ24gICAgICAgICAgICh2b2lkKiwgdm9pZCBjb25zdCopIGNvbnN0 OwoKICBJQUNvbGxlY3Rpb25JbXBsKgogICAgICAgICAgIENsb25lICAgICAgICAgICAgKCkgY29u c3Q7CgogIGxvbmcgICAgIENvbXBhcmVLZXlzICAgICAgKHZvaWQgY29uc3QqLCB2b2lkIGNvbnN0 KiwgSUFyZ1R5cGUpIGNvbnN0OwoKICB2b2lkKiAgICBDcmVhdGVOb2RlICAgICAgICh2b2lkIGNv bnN0KikgY29uc3Q7CgogIHZvaWQgICAgIERlbGV0ZU5vZGUgICAgICAgKHZvaWQqKSBjb25zdDsK CiAgdm9pZCogICAgS2V5ICAgICAgICAgICAgICAodm9pZCBjb25zdCopIGNvbnN0OwoKICB2b2lk KiAgICBFbGVtZW50UHRyICAgICAgICh2b2lkIGNvbnN0KikgY29uc3Q7CgogICAgICAgICAgIG9w ZXJhdG9yIEltcGxlbWVudGF0aW9uKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7Cgoj IDY4NCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p aWtzc2F2bC5oIgoKCnByb3RlY3RlZDoKCnByaXZhdGU6CgogIEVsZW1lbnRPcHMKICAgICAgICAg ICBpdkVsZW1lbnRPcHM7CgogIEltcGxlbWVudGF0aW9uCiAgICAgICAgICAgaXZJbXBsOwoKCiAg dm9pZCogICAgQ3JlYXRlTm9kZVdpdGhTdHJlYW1lcgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKElBQ29sbGVjdGlvblN0cmVhbWVyKiwgSURhdGFTdHJlYW0mKSBjb25zdDsKCgojIDcxMCAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzc2F2 bC5oIgoKCn07CgogCgogCgoKCgoKCgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5h bWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzc2F2bC5pbmwiIDEKCgoKIAogCiAKCgoKCgoKCgoK CgogCiAKIAogCiAKIAoKCgogCiAKIAoKIAoKaW5saW5lCklBS2V5U29ydGVkU2V0QXNBdmxUcmVl Tm9kZUltcGw6OgpJQUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJbXBsICgpCiAgICAgICAgOiBp dkxlZnQgKDApLCBpdlJpZ2h0ICgwKSwgaXZQYXJlbnQgKDApLCBpdkRlZXBlclN1YnRyZWUgKDAp ICAKewp9CgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQ+CmlubGluZQpJS2V5U29y dGVkU2V0QXNBdmxUcmVlTm9kZUltcGwgPEVsZW1lbnQ+OjoKSUtleVNvcnRlZFNldEFzQXZsVHJl ZU5vZGVJbXBsIChFbGVtZW50IGNvbnN0JiBlbGVtZW50KQo6IElBS2V5U29ydGVkU2V0QXNBdmxU cmVlTm9kZUltcGwgKCksIGl2RWxlbWVudCAoZWxlbWVudCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg RWxlbWVudD4KaW5saW5lCklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVOb2RlSW1wbCA8RWxlbWVudD46 Ogp+SUtleVNvcnRlZFNldEFzQXZsVHJlZU5vZGVJbXBsICgpCnsKfQoKCnRlbXBsYXRlIDxjbGFz cyBFbGVtZW50PgppbmxpbmUgdm9pZApJS2V5U29ydGVkU2V0QXNBdmxUcmVlTm9kZUltcGwgPEVs ZW1lbnQ+OjoKU3RyZWFtSW4gKElBQ29sbGVjdGlvblN0cmVhbWVyICpzdHJlYW1lciwgSURhdGFT dHJlYW0mIGZyb21XaGVyZSkKeyBpdkxlZnQgPSBpdlJpZ2h0ID0gaXZQYXJlbnQgPSAwOwogIGl2 RGVlcGVyU3VidHJlZSA9IDA7ICAKICBzdHJlYW1lci0+c3RyZWFtSW4gKGZyb21XaGVyZSwgJml2 RWxlbWVudCk7Cn0KCgogCiAKIAoKIAoKaW5saW5lIHZvaWQKSUtleVNvcnRlZFNldEFzQXZsVHJl ZUN1cnNvckltcGw6OgpJbnZhbGlkYXRlICgpCnsgaXZOb2RlID0gMDsKfQoKaW5saW5lIGJvb2wK SUtleVNvcnRlZFNldEFzQXZsVHJlZUN1cnNvckltcGw6OgpJc0luQmV0d2VlbiAoKSBjb25zdAp7 IHJldHVybiBmYWxzZTsKfQoKaW5saW5lIGJvb2wKSUtleVNvcnRlZFNldEFzQXZsVHJlZUN1cnNv ckltcGw6OgpJc1ZhbGlkICgpIGNvbnN0CnsgcmV0dXJuIChpdk5vZGUgIT0gMCk7Cn0KCmlubGlu ZSB2b2lkCklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVDdXJzb3JJbXBsOjoKb3BlcmF0b3I9IChJS2V5 U29ydGVkU2V0QXNBdmxUcmVlQ3Vyc29ySW1wbCBjb25zdCYgY3Vyc29yKQp7IEluaGVyaXRlZDo6 b3BlcmF0b3I9IChjdXJzb3IpOwogIGl2Tm9kZSA9IGN1cnNvci5pdk5vZGU7Cn0KCmlubGluZSBi b29sCklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVDdXJzb3JJbXBsOjoKb3BlcmF0b3I9PSAoSUN1cnNv ckltcGwgY29uc3QmIGN1cnNvcikgY29uc3QKeyByZXR1cm4gKEluaGVyaXRlZDo6b3BlcmF0b3I9 PSAoY3Vyc29yKSAmJgogICAgICAgICAgaXZOb2RlID09ICgoU2VsZiBjb25zdCYpY3Vyc29yKS5p dk5vZGUpOwp9CgoKIAogCiAKCiAKCmlubGluZQpJQUtleVNvcnRlZFNldEFzQXZsVHJlZU9wczo6 Cn5JQUtleVNvcnRlZFNldEFzQXZsVHJlZU9wcyAoKQp7Cn0KCiAKCmlubGluZQpJQUtleVNvcnRl ZFNldEFzQXZsVHJlZU9wczo6CklBS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIChib29sIGNvbnRh aW5zRFRTT2JqZWN0cykKOiBpdkNvbnRhaW5zRFRTT2JqZWN0cyAoY29udGFpbnNEVFNPYmplY3Rz KQp7Cn0KCiAKCiMgNzM5ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2lpa3NzYXZsLmgiIDIKCgogCgoKCiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzc2F2bC5jIiAxCiAKIAoKCgoKCgoK CgoKCgogCiAKIAogCgoKCgoKCgoKCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwg Y2xhc3MgS2V5LAogICAgICAgICAgY2xhc3MgRWxlbWVudE9wcywgY2xhc3MgSW1wbGVtZW50YXRp b24+CklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcywg SW1wbGVtZW50YXRpb24+OjoKSUtleVNvcnRlZFNldEFzQXZsVHJlZU9wcyAoSU51bWJlciBudW1i ZXJPZkVsZW1lbnRzKQo6IEluaGVyaXRlZCAoMCApLAogIGl2RWxlbWVudE9wcyAoKSwKICBpdklt cGwgKCp0aGlzLCBudW1iZXJPZkVsZW1lbnRzKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 LCBjbGFzcyBLZXksCiAgICAgICAgICBjbGFzcyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRh dGlvbj4KSUtleVNvcnRlZFNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3Bz LCBJbXBsZW1lbnRhdGlvbj46OgpJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIChJTnVtYmVyIG51 bWJlck9mRWxlbWVudHMsIHZvaWQqIG9wc0FyZykKOiBJbmhlcml0ZWQgKDAgKSwKICBpdkVsZW1l bnRPcHMgKG9wc0FyZyksCiAgaXZJbXBsICgqdGhpcywgbnVtYmVyT2ZFbGVtZW50cykKewp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgX0tleSwKICAgICAgICAgIGNsYXNzIEVsZW1l bnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgpJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxF bGVtZW50LCBfS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj46OgpJS2V5U29ydGVkU2V0 QXNBdmxUcmVlT3BzCiAgKElLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMKICAgIDxFbGVtZW50LCBf S2V5LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj4gY29uc3QmIGNvbGxlY3Rpb24pCjogSW5o ZXJpdGVkICgwICksCiAgaXZFbGVtZW50T3BzIChjb2xsZWN0aW9uLml2RWxlbWVudE9wcyksCiAg aXZJbXBsICgqdGhpcywgY29sbGVjdGlvbi5pdkltcGwpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVs ZW1lbnQsIGNsYXNzIEtleSwKICAgICAgICAgIGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxl bWVudGF0aW9uPgpJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXksIEVsZW1l bnRPcHMsIEltcGxlbWVudGF0aW9uPjo6Cn5JS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzICgpCnsK fQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwKICAgICAgICAgIGNsYXNzIEVs ZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgp2b2lkCklLZXlTb3J0ZWRTZXRBc0F2bFRy ZWVPcHMgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcywgSW1wbGVtZW50YXRpb24+OjoKQXNzaWdu ICh2b2lkKiBlbGVtZW50MSwgdm9pZCBjb25zdCogZWxlbWVudDIpIGNvbnN0CnsgaXZFbGVtZW50 T3BzLkFzc2lnbiAoKihFbGVtZW50KillbGVtZW50MSwgKihFbGVtZW50IGNvbnN0KillbGVtZW50 Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXksCiAgICAgICAgICBjbGFz cyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4KSUFDb2xsZWN0aW9uSW1wbCoKSUtl eVNvcnRlZFNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1l bnRhdGlvbj46OgpDbG9uZSAoKSBjb25zdAp7IHJldHVybiAoSW1wbGVtZW50YXRpb24qKSAqbmV3 IFNlbGYgKCp0aGlzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIF9LZXksCiAg ICAgICAgICBjbGFzcyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4KbG9uZwpJS2V5 U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBfS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1l bnRhdGlvbj46OgpDb21wYXJlS2V5cyAodm9pZCBjb25zdCogYXJnMSwgdm9pZCBjb25zdCogYXJn MiwgSUFyZ1R5cGUgYXJnVHlwZSkgY29uc3QKeyBsb25nIGNvbXAgPSAwOwogIHN3aXRjaCAoYXJn VHlwZSkgewogICAgY2FzZSBrRWxlbWVudEVsZW1lbnQ6IHsKICAgICAgY29tcCA9IGl2RWxlbWVu dE9wcy5rZXlPcHMuQ29tcGFyZQogICAgICAgIChpdkVsZW1lbnRPcHMuS2V5ICgqKEVsZW1lbnQg Y29uc3QqKWFyZzEpLAogICAgICAgICBpdkVsZW1lbnRPcHMuS2V5ICgqKEVsZW1lbnQgY29uc3Qq KWFyZzIpKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlIGtFbGVtZW50S2V5OiB7CiAgICAg IGNvbXAgPSBpdkVsZW1lbnRPcHMua2V5T3BzLkNvbXBhcmUKICAgICAgICAoaXZFbGVtZW50T3Bz LktleSgqKEVsZW1lbnQgY29uc3QqKWFyZzEpLAogICAgICAgICBJS2V5Rm9yT3BzKChfS2V5IGNv bnN0KilhcmcyKSk7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBrS2V5S2V5OiB7CiAgICAg IGNvbXAgPSBpdkVsZW1lbnRPcHMua2V5T3BzLkNvbXBhcmUKICAgICAgICAoSUtleUZvck9wcyAo KF9LZXkgY29uc3QqKWFyZzEpLCBJS2V5Rm9yT3BzICgoX0tleSBjb25zdCopYXJnMikpOwogICAg fQogIH0KICByZXR1cm4gY29tcDsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtl eSwKICAgICAgICAgIGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgp2b2lk KgpJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHMsIElt cGxlbWVudGF0aW9uPjo6CkNyZWF0ZU5vZGUgKHZvaWQgY29uc3QqIGVsZW1lbnQpIGNvbnN0CnsK ICB2b2lkKiBub2RlID0gaXZFbGVtZW50T3BzLkFsbG9jYXRlIChzaXplb2YgKE5vZGUpCgoKCgoK CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgcmV0dXJuIG5ldyAo aXZJbXBsLkNoZWNrUG9pbnRlciAobm9kZSkpCiAgICBOb2RlICgqKEVsZW1lbnQgY29uc3QqKWVs ZW1lbnQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwKICAgICAgICAg IGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgp2b2lkKgpJS2V5U29ydGVk U2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9u Pjo6CkNyZWF0ZU5vZGVXaXRoU3RyZWFtZXIoSUFDb2xsZWN0aW9uU3RyZWFtZXIgKnN0cmVhbWVy LAogICAgICAgICAgICAgICAgICAgICAgIElEYXRhU3RyZWFtJiBmcm9tV2hlcmUpIGNvbnN0Cnsg dm9pZCogbm9kZSA9IGl2RWxlbWVudE9wcy5BbGxvY2F0ZSAoc2l6ZW9mIChOb2RlKQoKCgoKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogIGl2SW1wbC5DaGVja1BvaW50 ZXIgKG5vZGUpOwogICgoTm9kZSopbm9kZSktPlN0cmVhbUluIChzdHJlYW1lciwgZnJvbVdoZXJl KTsKICByZXR1cm4gbm9kZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXks CiAgICAgICAgICBjbGFzcyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4Kdm9pZApJ S2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHMsIEltcGxl bWVudGF0aW9uPjo6CkRlbGV0ZU5vZGUgKHZvaWQqIG5vZGUpIGNvbnN0CnsgKChOb2RlKilub2Rl KS0+fk5vZGUgKCk7CiAgaXZFbGVtZW50T3BzLkRlYWxsb2NhdGUgKG5vZGUKCgoKCgogICAgICAg ICAgICAgICAgICAgICAgICAgICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBf S2V5LAogICAgICAgICAgY2xhc3MgRWxlbWVudE9wcywgY2xhc3MgSW1wbGVtZW50YXRpb24+CnZv aWQqCklLZXlTb3J0ZWRTZXRBc0F2bFRyZWVPcHMgPEVsZW1lbnQsIF9LZXksIEVsZW1lbnRPcHMs IEltcGxlbWVudGF0aW9uPjo6CktleSAodm9pZCBjb25zdCogZWxlbWVudCkgY29uc3QKeyByZXR1 cm4gSUtleUZyb21PcHMKICAgIChpdkVsZW1lbnRPcHMuS2V5ICgqKEVsZW1lbnQgY29uc3QqKWVs ZW1lbnQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIF9LZXksCiAgICAgICAg ICBjbGFzcyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4Kdm9pZCoKSUtleVNvcnRl ZFNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgX0tleSwgRWxlbWVudE9wcywgSW1wbGVtZW50YXRp b24+OjoKRWxlbWVudFB0ciAodm9pZCBjb25zdCogZWxlbWVudCkgY29uc3QKeyByZXR1cm4gKHZv aWQgKikoJigoKE5vZGUgY29uc3QqKWVsZW1lbnQpLT5pdkVsZW1lbnQpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwKICAgICAgICAgIGNsYXNzIEVsZW1lbnRPcHMsIGNs YXNzIEltcGxlbWVudGF0aW9uPgpJS2V5U29ydGVkU2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBL ZXksIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPjo6Cm9wZXJhdG9yIEltcGxlbWVudGF0aW9u KiAoKQp7IGl2SW1wbC5DaGVja1BvaW50ZXIgKHRoaXMpOwogIHJldHVybiAmaXZJbXBsOwp9CgoK CgoKCiMgNzQ3ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lpa3NzYXZsLmgiIDIKCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBv cnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAyNyAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzYXZsLmgiIDIKCgoKCgoKIAoK IAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9S RVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFu Z2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoK CgoKCgoKCgoKCgoKIAoKIAogCgogCiAKCiAKCnR5cGVkZWYgSUtleVNldE9uS2V5U29ydGVkU2V0 SW1wbAogICAgICAgICA8SUtleVNvcnRlZFNldEFzQXZsVHJlZUltcGw+IElLZXlTZXRBc0F2bFRy ZWVJbXBsOwoKdHlwZWRlZiBJQUtleVNldE9uS2V5U29ydGVkU2V0T3BzCiAgICAgICAgIDxJS2V5 U29ydGVkU2V0QXNBdmxUcmVlSW1wbD4gSUFLZXlTZXRBc0F2bFRyZWVPcHM7Cgp0ZW1wbGF0ZSA8 Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5LAogICAgICAgICAgY2xhc3MgRWxlbWVudE9wcywgY2xh c3MgSW1wbGVtZW50YXRpb24+CmNsYXNzICAgSUtleVNldEFzQXZsVHJlZU9wcyA6CiAgcHVibGlj IElBS2V5U2V0QXNBdmxUcmVlT3BzIHsKCiAgdHlwZWRlZiAgSUtleVNldEFzQXZsVHJlZU9wcwog ICAgICAgICAgICA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj4gU2Vs ZjsKCiAgdHlwZWRlZiAgSUtleVNvcnRlZFNldEFzQXZsVHJlZU9wcwogICAgICAgICAgICA8RWxl bWVudCwgS2V5LAogICAgICAgICAgICAgRWxlbWVudE9wcywgSUtleVNvcnRlZFNldEFzQXZsVHJl ZUltcGw+IEJhc2U7CgpwdWJsaWM6CgogIHR5cGVkZWYgIEltcGxlbWVudGF0aW9uIEltcGxUeXBl OwoKICB0eXBlZGVmICBFbGVtZW50IEVsZW1lbnRUeXBlOwoKICB0eXBlZGVmICBLZXkgS2V5VHlw ZTsKCiAgICAgICAgICAgSUtleVNldEFzQXZsVHJlZU9wcwogICAgICAgICAgICAgICAgICAgICAg ICAgICAoSU51bWJlcik7CgogICAgICAgICAgIElLZXlTZXRBc0F2bFRyZWVPcHMKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKElOdW1iZXIsIHZvaWQqKTsKCiAgICAgICAgICAgSUtleVNldEFz QXZsVHJlZU9wcwogICAgICAgICAgICAgICAgICAgICAgICAgICAoSUtleVNldEFzQXZsVHJlZU9w cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFbGVtZW50LCBLZXksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPiBjb25zdCYpOwoK ICAgICAgICAgIH5JS2V5U2V0QXNBdmxUcmVlT3BzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICgpOwoKICBJQUNvbGxlY3Rpb25JbXBsKgogICAgICAgICAgIENsb25lICAgICAgICAgICAoKSBj b25zdDsKCiAgICAgICAgICAgb3BlcmF0b3IgSUtleVNvcnRlZFNldEFzQXZsVHJlZUltcGwmCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICgpOwoKICAgICAgICAgICBvcGVyYXRvciBJbXBsZW1l bnRhdGlvbioKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CgojIDE0MCAiL2hvbWUvYWtu b2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9paWtzYXZsLmgiCgoKcHJv dGVjdGVkOgoKcHJpdmF0ZToKCiAgQmFzZSAgICAgaXZCYXNlOwoKICBJbXBsZW1lbnRhdGlvbgog ICAgICAgICAgIGl2SW1wbDsKCiMgMTYwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAt c2hhcmVkLmJpbi9pbmNsdWRlL2lpa3NhdmwuaCIKCgp9OwoKIAoKIAoKCgoKCgoKCgoKCiNwcmFn bWEgZW51bShwb3ApCgoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcocG9wKQoKCgoKIAoKIAoKCgoKIyAx ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lpa3Nh dmwuYyIgMQogCiAKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoKCgoKIAogCiAKCiAKCnRlbXBsYXRl IDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXksCiAgICAgICAgICBjbGFzcyBFbGVtZW50T3BzLCBj bGFzcyBJbXBsZW1lbnRhdGlvbj4KSUtleVNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgS2V5LCBF bGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj46OgpJS2V5U2V0QXNBdmxUcmVlT3BzIChJTnVtYmVy IG51bWJlck9mRWxlbWVudHMpCjogaXZCYXNlIChudW1iZXJPZkVsZW1lbnRzKSwKICBpdkltcGwg KCp0aGlzLCBudW1iZXJPZkVsZW1lbnRzKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBj bGFzcyBLZXksCiAgICAgICAgICBjbGFzcyBFbGVtZW50T3BzLCBjbGFzcyBJbXBsZW1lbnRhdGlv bj4KSUtleVNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1l bnRhdGlvbj46OgpJS2V5U2V0QXNBdmxUcmVlT3BzIChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMs IHZvaWQqIG9wc0FyZykKOiBpdkJhc2UgKG51bWJlck9mRWxlbWVudHMsIG9wc0FyZyksCiAgaXZJ bXBsICgqdGhpcywgbnVtYmVyT2ZFbGVtZW50cykKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVu dCwgY2xhc3MgS2V5LAogICAgICAgICAgY2xhc3MgRWxlbWVudE9wcywgY2xhc3MgSW1wbGVtZW50 YXRpb24+CklLZXlTZXRBc0F2bFRyZWVPcHMgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcywgSW1w bGVtZW50YXRpb24+OjoKSUtleVNldEFzQXZsVHJlZU9wcwogIChJS2V5U2V0QXNBdmxUcmVlT3Bz CiAgICA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj4gY29uc3QmIGNv bGxlY3Rpb24pCjogaXZCYXNlIChjb2xsZWN0aW9uLml2QmFzZSksCiAgaXZJbXBsICgqdGhpcywg Y29sbGVjdGlvbi5pdkltcGwpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtl eSwKICAgICAgICAgIGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0aW9uPgpJS2V5 U2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9u Pjo6Cn5JS2V5U2V0QXNBdmxUcmVlT3BzICgpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQs IGNsYXNzIEtleSwKICAgICAgICAgIGNsYXNzIEVsZW1lbnRPcHMsIGNsYXNzIEltcGxlbWVudGF0 aW9uPgpJQUNvbGxlY3Rpb25JbXBsKgpJS2V5U2V0QXNBdmxUcmVlT3BzIDxFbGVtZW50LCBLZXks IEVsZW1lbnRPcHMsIEltcGxlbWVudGF0aW9uPjo6CkNsb25lICgpIGNvbnN0CnsgcmV0dXJuIChJ bXBsZW1lbnRhdGlvbiopICpuZXcgU2VsZiAoKnRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxl bWVudCwgY2xhc3MgS2V5LAogICAgICAgICAgY2xhc3MgRWxlbWVudE9wcywgY2xhc3MgSW1wbGVt ZW50YXRpb24+CklLZXlTZXRBc0F2bFRyZWVPcHMgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcywg SW1wbGVtZW50YXRpb24+OjoKb3BlcmF0b3IgSUtleVNvcnRlZFNldEFzQXZsVHJlZUltcGwmICgp CnsgcmV0dXJuICooSUtleVNvcnRlZFNldEFzQXZsVHJlZUltcGwqKWl2QmFzZSA7Cn0KCnRlbXBs YXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXksCiAgICAgICAgICBjbGFzcyBFbGVtZW50T3Bz LCBjbGFzcyBJbXBsZW1lbnRhdGlvbj4KSUtleVNldEFzQXZsVHJlZU9wcyA8RWxlbWVudCwgS2V5 LCBFbGVtZW50T3BzLCBJbXBsZW1lbnRhdGlvbj46OgpvcGVyYXRvciBJbXBsZW1lbnRhdGlvbiog KCkKeyBpdkltcGwuQ2hlY2tQb2ludGVyICh0aGlzKTsKICByZXR1cm4gJml2SW1wbCA7Cn0KCgoK CgoKIyAxOTMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1 ZGUvaWlrc2F2bC5oIiAyCgoKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0 KHBvcCkKI3ByYWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgMzIgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWtzLmgiIDIKCgoKCgoKIAoKIAojcHJh Z21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRf TEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoKIAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmco X19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgojcHJhZ21hIGVudW0oNCkKCgoKCgoKCgoK CgoKCgoKIAoKIAogCgogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXks IGNsYXNzIEVsZW1lbnRPcHM+CmNsYXNzIElHS2V5U2V0Q3Vyc29yOwoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQsIGNsYXNzIEtleSwgY2xhc3MgRWxlbWVudE9wcz4KY2xhc3MgSUdLZXlTZXQgOgog IHB1YmxpYyBJQUtleVNldCA8RWxlbWVudCwgS2V5PiB7CnByb3RlY3RlZDoKCiAgdHlwZWRlZiAg SUdLZXlTZXQgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gU2VsZjsKCiAgdHlwZWRlZiAgSUtl eVNldEFzQXZsVHJlZUltcGwgUHVyZUltcGxlbWVudGF0aW9uOwoKCiAgdHlwZWRlZiAgUHVyZUlt cGxlbWVudGF0aW9uIEltcGxlbWVudGF0aW9uOwoKCgoKCgoKCgoKCiAgICAgICAgICAgdHlwZWRl ZiAgSUtleVNldEFzQXZsVHJlZU9wcyA8IEVsZW1lbnQgLCAgIEtleSAsIElXS0NPcHMgPCBFbGVt ZW50ICwgICBLZXkgLCAgIEVsZW1lbnRPcHMgPiwgSW1wbGVtZW50YXRpb24+IEluc3RhbnRpYXRp b24gOwoKcHVibGljOgoKCiAgdHlwZWRlZiBJQ29sbGVjdGlvbkd1YXJkPEVsZW1lbnQ+IEd1YXJk OwoKCiAgdHlwZWRlZiAgSUdLZXlTZXRDdXJzb3IKICAgICAgICAgICAgPEVsZW1lbnQsIEtleSwg RWxlbWVudE9wcz4gQ3Vyc29yOwoKCgoKCgogICAgICAgICAgIElHS2V5U2V0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoSU51bWJlciA9IDEwMCk7CgogICAgICAgICAgIElHS2V5U2V0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoSUdLZXlTZXQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCwgS2V5LCBF bGVtZW50T3BzPiBjb25zdCYpOwoKICBJR0tleVNldCA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3Bz PiYKICAgICAgICAgICBvcGVyYXRvcj0gICAgICAgIChJR0tleVNldAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LCBL ZXksIEVsZW1lbnRPcHM+IGNvbnN0Jik7CgojIDE1MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51 eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pa3MuaCIKCgpwcm90ZWN0ZWQ6CgogICAgICAgICAg IElHS2V5U2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHVyZUltcGxlbWVudGF0aW9u Jik7CgogIHN0YXRpYwogIEltcGxlbWVudGF0aW9uJgogICAgICAgICAgIEltcGxPZiAgICAgICAg ICAgKElHS2V5U2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gY29uc3QmKTsKCnBy aXZhdGU6CgogIGZyaWVuZAogIGNsYXNzICAgIElHS2V5U2V0Q3Vyc29yIDxFbGVtZW50LCBLZXks IEVsZW1lbnRPcHM+OwoKCgoKCgoKIyAxODggIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5 MC1zaGFyZWQuYmluL2luY2x1ZGUvaWtzLmgiCgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50 LCBjbGFzcyBLZXksIGNsYXNzIEVsZW1lbnRPcHM+CmNsYXNzIElHS2V5U2V0Q3Vyc29yIDoKICBw dWJsaWMgSUVsZW1lbnRDdXJzb3IgPEVsZW1lbnQ+IHsKCiAgdHlwZWRlZiAgSUVsZW1lbnRDdXJz b3IgPEVsZW1lbnQ+IEluaGVyaXRlZDsKCiAgdHlwZWRlZiB0eXBlbmFtZSAgSUdLZXlTZXQKICAg ICAgICAgICAgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz46OgogICAgICAgICAgICAgIEltcGxl bWVudGF0aW9uOjpDdXJzb3IgSW1wbGVtZW50YXRpb247CgpwdWJsaWM6CgogICAgICAgICAgIElH S2V5U2V0Q3Vyc29yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSUdLZXlTZXQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzPiBjb25zdCYpOwoKICBJR0tleVNldEN1cnNvciA8RWxl bWVudCwgS2V5LCBFbGVtZW50T3BzPiYKICAgICAgICAgICBvcGVyYXRvcj0gICAgICAgIChJR0tl eVNldEN1cnNvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFbGVtZW50LCBLZXksIEVsZW1lbnRPcHM+IGNvbnN0Jik7Cgpwcm90 ZWN0ZWQ6CgogICAgICAgICAgIElHS2V5U2V0Q3Vyc29yCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoSUN1cnNvckltcGwqKTsKCnByaXZhdGU6CgojIDIzMyAiL2hvbWUvYWtub2xsL2lvY3Ny Yy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pa3MuaCIKCgp9OwoKIyAyNzggIi9ob21l L2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWtzLmgiCgoKdGVt cGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleT4KY2xhc3MgSUtleVNldCA6CiAgcHVibGlj IElHS2V5U2V0CiAgICAgICAgICA8RWxlbWVudCwgS2V5LCBJS0NPcHMgPEVsZW1lbnQsIEtleT4g PiB7CgogIHR5cGVkZWYgIElHS2V5U2V0CiAgICAgICAgICAgIDxFbGVtZW50LCBLZXksCiAgICAg ICAgICAgICBJS0NPcHMgPEVsZW1lbnQsIEtleT4gPiBJbmhlcml0ZWQ7Cgpwcm90ZWN0ZWQ6Cgog IHR5cGVkZWYgdHlwZW5hbWUgIEluaGVyaXRlZDo6UHVyZUltcGxlbWVudGF0aW9uIFB1cmVJbXBs ZW1lbnRhdGlvbjsKCiAgdHlwZWRlZiAgSUtleVNldCA8RWxlbWVudCwgS2V5PiBTZWxmOwoKCgoK CgoKcHVibGljOgoKCiAgdHlwZWRlZiBJQ29sbGVjdGlvbkd1YXJkPEVsZW1lbnQ+IEd1YXJkOwoK CiAgICAgICAgICAgSUtleVNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOdW1iZXIg PSAxMDApOwoKIyAzMjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWtzLmgiCgoKcHJvdGVjdGVkOgoKICAgICAgICAgICBJS2V5U2V0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChQdXJlSW1wbGVtZW50YXRpb24mKTsKCnByaXZhdGU6Cgoj IDM0NCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p a3MuaCIKCgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXksIGNsYXNzIEVs ZW1lbnRPcHM+CmNsYXNzIElWR0tleVNldCA6CiAgcHVibGljIElHS2V5U2V0CiAgICAgICAgICA8 RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzID4gewoKICB0eXBlZGVmICBJVkdLZXlTZXQKICAgICAg ICAgICAgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gSW5oZXJpdGVkOwoKcHJvdGVjdGVkOgoK ICB0eXBlZGVmIHR5cGVuYW1lIAogICAgICAgICAgIElHS2V5U2V0CiAgICAgICAgICAgIDxFbGVt ZW50LCBLZXksIEVsZW1lbnRPcHM+OjpQdXJlSW1wbGVtZW50YXRpb24gUHVyZUltcGxlbWVudGF0 aW9uOwoKCiAgdHlwZWRlZiAgSVZLZXlTZXRJbXBsCiAgICAgICAgICAgIDxQdXJlSW1wbGVtZW50 YXRpb24+IEltcGxlbWVudGF0aW9uOwoKCgoKCgoKCgoKCgogICAgICAgICAgIHR5cGVkZWYgIElL ZXlTZXRBc0F2bFRyZWVPcHMgPCBFbGVtZW50ICwgICBLZXkgLCBJV0tDT3BzIDwgRWxlbWVudCAs ICAgS2V5ICwgICBFbGVtZW50T3BzID4sIEltcGxlbWVudGF0aW9uPiBJbnN0YW50aWF0aW9uIDsK CnB1YmxpYzoKCgogIHR5cGVkZWYgSUNvbGxlY3Rpb25HdWFyZDxFbGVtZW50PiBHdWFyZDsKCgog ICAgICAgICAgIElWR0tleVNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOdW1iZXIg PSAxMDApOwoKIyA0MDUgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWtzLmgiCgoKcHJvdGVjdGVkOgoKICAgICAgICAgICBJVkdLZXlTZXQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFB1cmVJbXBsZW1lbnRhdGlvbiYpOwoKcHJpdmF0ZToK CiMgNDIzICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2lrcy5oIgoKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5PgpjbGFzcyBJ VktleVNldCA6CiAgcHVibGljIElWR0tleVNldAogICAgICAgICAgPEVsZW1lbnQsIEtleSwgSUtD T3BzIDxFbGVtZW50LCBLZXk+ID4gewoKICB0eXBlZGVmICBJVkdLZXlTZXQKICAgICAgICAgICAg PEVsZW1lbnQsIEtleSwKICAgICAgICAgICAgIElLQ09wcyA8RWxlbWVudCwgS2V5PiA+IEluaGVy aXRlZDsKCnByb3RlY3RlZDoKCiAgdHlwZWRlZiB0eXBlbmFtZSAgSW5oZXJpdGVkOjpQdXJlSW1w bGVtZW50YXRpb24gUHVyZUltcGxlbWVudGF0aW9uOwoKICB0eXBlZGVmICBJVktleVNldCA8RWxl bWVudCwgS2V5PiBTZWxmOwoKCgoKCgoKcHVibGljOgoKCiAgdHlwZWRlZiBJQ29sbGVjdGlvbkd1 YXJkPEVsZW1lbnQ+IEd1YXJkOwoKCiAgICAgICAgICAgSVZLZXlTZXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChJTnVtYmVyID0gMTAwKTsKCiMgNDczICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lrcy5oIgoKCnByb3RlY3RlZDoKCiAgICAg ICAgICAgSVZLZXlTZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB1cmVJbXBsZW1l bnRhdGlvbiYpOwoKcHJpdmF0ZToKCiMgNDkxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3Mz OTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lrcy5oIgoKCn07CgoKCiAKCiAKCgoKCgoKCgoKCgojcHJh Z21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIyAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lrcy5pbmwi IDEKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKIAogCiAKCgoKIAoKdGVtcGxhdGUg PGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwgY2xhc3MgRWxlbWVudE9wcz4KaW5saW5lCklHS2V5 U2V0Q3Vyc29yIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHM+OjoKSUdLZXlTZXRDdXJzb3IKICAo SUdLZXlTZXQKICAgIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHM+IGNvbnN0JiBjb2xsZWN0aW9u KQo6IElFbGVtZW50Q3Vyc29yIDxFbGVtZW50PgogICAgKGNvbGxlY3Rpb24uaXZJbXBsLT5DcmVh dGVDdXJzb3IgKCkpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwgY2xh c3MgRWxlbWVudE9wcz4KaW5saW5lIElHS2V5U2V0Q3Vyc29yIDxFbGVtZW50LCBLZXksIEVsZW1l bnRPcHM+JgpJR0tleVNldEN1cnNvciA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzPjo6Cm9wZXJh dG9yPQogIChJR0tleVNldEN1cnNvcgogICAgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gY29u c3QmIGN1cnNvcikKeyBJbmhlcml0ZWQ6Om9wZXJhdG9yPSAoY3Vyc29yKTsKICByZXR1cm4gKnRo aXM7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXksIGNsYXNzIEVsZW1l bnRPcHM+CmlubGluZQpJR0tleVNldEN1cnNvciA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzPjo6 CklHS2V5U2V0Q3Vyc29yIChJQ3Vyc29ySW1wbCogaW1wbCkKOiBJRWxlbWVudEN1cnNvciA8RWxl bWVudD4gKGltcGwpCnsKfQoKIyA5MiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNo YXJlZC5iaW4vaW5jbHVkZS9pa3MuaW5sIgoKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVt ZW50LCBjbGFzcyBLZXksIGNsYXNzIEVsZW1lbnRPcHM+CmlubGluZQpJR0tleVNldCA8RWxlbWVu dCwgS2V5LCBFbGVtZW50T3BzPjo6CklHS2V5U2V0IChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMp CnsgdGhpcy0+U2V0SW1wbCAoKEltcGxlbWVudGF0aW9uKikgKm5ldwoKCgoKICAgICAgICAgICAg ICAgIEluc3RhbnRpYXRpb24gKG51bWJlck9mRWxlbWVudHMpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQsIGNsYXNzIEtleSwgY2xhc3MgRWxlbWVudE9wcz4KaW5saW5lCklHS2V5U2V0IDxF bGVtZW50LCBLZXksIEVsZW1lbnRPcHM+OjoKSUdLZXlTZXQKICAoSUdLZXlTZXQKICAgIDxFbGVt ZW50LCBLZXksIEVsZW1lbnRPcHM+IGNvbnN0JiBjb2xsZWN0aW9uKQp7IHRoaXMtPkNsb25lSW1w bE9mIChjb2xsZWN0aW9uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwg Y2xhc3MgRWxlbWVudE9wcz4KaW5saW5lIElHS2V5U2V0IDxFbGVtZW50LCBLZXksIEVsZW1lbnRP cHM+JgpJR0tleVNldCA8RWxlbWVudCwgS2V5LCBFbGVtZW50T3BzPjo6Cm9wZXJhdG9yPSAoSUdL ZXlTZXQKICAgICAgICAgICAgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gY29uc3QmIGNvbGxl Y3Rpb24pCnsgdGhpcy0+SW1wbE9mICgqdGhpcykuQ29weSAodGhpcy0+SW1wbE9mIChjb2xsZWN0 aW9uKSk7CiAgcmV0dXJuICp0aGlzOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudCwgY2xh c3MgS2V5LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUKSUdLZXlTZXQgPEVsZW1lbnQsIEtleSwg RWxlbWVudE9wcz46OgpJR0tleVNldCAoUHVyZUltcGxlbWVudGF0aW9uJiBpbXBsKQp7IHRoaXMt PlNldEltcGwgKCZpbXBsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNsYXNzIEtleSwg Y2xhc3MgRWxlbWVudE9wcz4KaW5saW5lIHR5cGVuYW1lICBJR0tleVNldAogPEVsZW1lbnQsIEtl eSwgRWxlbWVudE9wcz46OkltcGxlbWVudGF0aW9uJgpJR0tleVNldCA8RWxlbWVudCwgS2V5LCBF bGVtZW50T3BzPjo6CkltcGxPZiAoSUdLZXlTZXQKICAgICAgICAgPEVsZW1lbnQsIEtleSwgRWxl bWVudE9wcz4gY29uc3QmIGNvbGxlY3Rpb24pCnsgcmV0dXJuICooSW1wbGVtZW50YXRpb24qKWNv bGxlY3Rpb24uaXZJbXBsOwp9CgogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIEVsZW1lbnQsIGNs YXNzIEtleT4KaW5saW5lCklLZXlTZXQgPEVsZW1lbnQsIEtleT46OgpJS2V5U2V0IChJTnVtYmVy IG51bWJlck9mRWxlbWVudHMpCjogSUdLZXlTZXQKICAgPEVsZW1lbnQsIEtleSwgSUtDT3BzIDxF bGVtZW50LCBLZXk+ID4gKG51bWJlck9mRWxlbWVudHMpCnsKfQoKIAoKdGVtcGxhdGUgPGNsYXNz IEVsZW1lbnQsIGNsYXNzIEtleT4KaW5saW5lCklLZXlTZXQgPEVsZW1lbnQsIEtleT46OgpJS2V5 U2V0IChQdXJlSW1wbGVtZW50YXRpb24mIGltcGwpCjogSUdLZXlTZXQKICAgPEVsZW1lbnQsIEtl eSwgSUtDT3BzIDxFbGVtZW50LCBLZXk+ID4gKGltcGwpCnsKfQoKCiAKIAogCgogCgp0ZW1wbGF0 ZSA8Y2xhc3MgRWxlbWVudCwgY2xhc3MgS2V5LCBjbGFzcyBFbGVtZW50T3BzPgppbmxpbmUKSVZH S2V5U2V0IDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHM+OjoKSVZHS2V5U2V0IChJTnVtYmVyIG51 bWJlck9mRWxlbWVudHMpCjogSUdLZXlTZXQKICAgIDxFbGVtZW50LCBLZXksIEVsZW1lbnRPcHM+ ICgqKEltcGxlbWVudGF0aW9uKikgKm5ldwoKCgoKICAgICAgICAgICAgICAgIEluc3RhbnRpYXRp b24gKG51bWJlck9mRWxlbWVudHMpKQp7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBj bGFzcyBLZXksIGNsYXNzIEVsZW1lbnRPcHM+CmlubGluZQpJVkdLZXlTZXQgPEVsZW1lbnQsIEtl eSwgRWxlbWVudE9wcz46OgpJVkdLZXlTZXQgKFB1cmVJbXBsZW1lbnRhdGlvbiYgaW1wbCkKOiBJ R0tleVNldAogICAgPEVsZW1lbnQsIEtleSwgRWxlbWVudE9wcz4gKGltcGwpCnsKfQoKIAogCiAK CiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+CmlubGluZQpJVktleVNldCA8 RWxlbWVudCwgS2V5Pjo6CklWS2V5U2V0IChJTnVtYmVyIG51bWJlck9mRWxlbWVudHMpCjogSVZH S2V5U2V0CiAgIDxFbGVtZW50LCBLZXksIElLQ09wcyA8RWxlbWVudCwgS2V5PiA+IChudW1iZXJP ZkVsZW1lbnRzKQp7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBFbGVtZW50LCBjbGFzcyBLZXk+Cmlu bGluZQpJVktleVNldCA8RWxlbWVudCwgS2V5Pjo6CklWS2V5U2V0IChQdXJlSW1wbGVtZW50YXRp b24mIGltcGwpCjogSVZHS2V5U2V0CiAgIDxFbGVtZW50LCBLZXksIElLQ09wcyA8RWxlbWVudCwg S2V5PiA+IChpbXBsKQp7Cn0KCgogCgojIDUyMiAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pa3MuaCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkK I3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAxOCAiL2hv bWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0RhdGFTZXQuaHBwIiAyCgoKICAgICAKICAgIAoj IDEgIi9ob21lL3hodTYwMzEvdHNmdy9JbmNsdWRlL1RTRldOZXRCYXNlT2JqZWN0LmhwcCIgMQog CiAKIAogCiAKCgogICAgCgogICAgIAogICAgCiAgICAKICAgIAojIDEgIi9ob21lL2Frbm9sbC9p b2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXRpbWUuaHBwIiAxCiMgMjAxICIv aG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l0aW1lLmhw cCIKCgoKCgoKIyAxMyAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV05ldEJhc2VPYmpl Y3QuaHBwIiAyCgogICAgCgogICAgIAogICAgZXh0ZXJuICJDIiB7CiAgICAgICAgIAogICAgICAg IAojIDEgIi91c3IvaW5jbHVkZS9ycGMvcnBjLmgiIDEgMwogCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL3R5cGVzLmgiIDEgMwog CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAogCgoKCgoKdHlwZWRlZiBpbnQgYm9v bF90Owp0eXBlZGVmIGludCBlbnVtX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMg NDMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwoKCgoKCgoKCiAKCnN0cnVjdCB0aW1ldmFs CiAgewogICAgX190aW1lX3QgdHZfc2VjOwkJIAogICAgX190aW1lX3QgdHZfdXNlYzsJCSAKICB9 OwoKIAojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKCmV4dGVybiAiQyIgeyAK CiAKCgoKCgoKCgoKCiAKCnN0cnVjdCB0aW1lem9uZQogIHsKICAgIGludCB0el9taW51dGVzd2Vz dDsJCSAKICAgIGludCB0el9kc3R0aW1lOwkJIAogIH07CgogCgoKCgpleHRlcm4gaW50IGdldHRp bWVvZmRheSAgKHN0cnVjdCB0aW1ldmFsICpfX3R2LAoJCQkgICAgICBzdHJ1Y3QgdGltZXpvbmUg Kl9fdHopICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkgIChfX2NvbnN0 IHN0cnVjdCB0aW1ldmFsICpfX3R2LAoJCQkgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAq X190eikgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiBpbnQgYWRqdGltZSAgKF9fY29uc3Qgc3Ry dWN0IHRpbWV2YWwgKl9fZGVsdGEsCgkJCSBzdHJ1Y3QgdGltZXZhbCAqX19vbGRkZWx0YSkgIHRo cm93ICgpICA7CgoKIAplbnVtIF9faXRpbWVyX3doaWNoCiAgewogICAgIAogICAgSVRJTUVSX1JF QUwgPSAwLAoKICAgICAKICAgIElUSU1FUl9WSVJUVUFMID0gMSwKCiAgICAgCgogICAgSVRJTUVS X1BST0YgPSAyCgogIH07CgogCgpzdHJ1Y3QgaXRpbWVydmFsCiAgewogICAgIAogICAgc3RydWN0 IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsK ICB9OwoKIAoKZXh0ZXJuIGludCBnZXRpdGltZXIgIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hp Y2gsCgkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fdmFsdWUpICB0aHJvdyAoKSAgOwoKIAoKCmV4 dGVybiBpbnQgc2V0aXRpbWVyICAoZW51bSBfX2l0aW1lcl93aGljaCBfX3doaWNoLAoJCQkgICBf X2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9fbmV3LAoJCQkgICBzdHJ1Y3QgaXRpbWVydmFsICpf X29sZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHV0aW1lcyAgKF9fY29uc3QgY2hhciAq X19maWxlLCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkgIHRocm93ICgpICA7CgoKIAoKCgoKCgoK CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwoKIyAxNDIgIi91c3IvaW5jbHVkZS9z eXMvdGltZS5oIiAzCgp9IAoKCiMgNjMgIi91c3IvaW5jbHVkZS9ycGMvdHlwZXMuaCIgMiAzCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1p dHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgv Mi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMv cGFyYW0uaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMSAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDQgIi91c3IvaW5jbHVkZS9saW51eC9wYXJhbS5oIiAyIDMKCgoKIyAyNSAiL3Vzci9p bmNsdWRlL3N5cy9wYXJhbS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoK IAoKCgoKIAoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL3JwYy90eXBlcy5oIiAyIDMKCgojIDEgIi91 c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgi IDEgMwogCgoKIAoKIyAxMTQgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgoKCgojIDIzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9p bi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIv czM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoK IAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoj IDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIv dXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoK CgoKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy93b3Jkc2l6ZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1 ZGUvc3RkaW50LmgiIDIgMwoKCiAKCiAKCiAKIyA0NyAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAz CgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgaW50CXVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludDMyX3Q7CgoKCl9fZXh0 ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CXVpbnQ2NF90OwoKCgogCgog CnR5cGVkZWYgc2lnbmVkIGNoYXIJCWludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQJCWlu dF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50CQkJaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25f Xwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQJCWludF9sZWFzdDY0X3Q7CgoKIAp0eXBlZGVmIHVuc2ln bmVkIGNoYXIJCXVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnRf bGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9sZWFzdDMyX3Q7CgoKCl9fZXh0 ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CXVpbnRfbGVhc3Q2NF90OwoK CgogCgogCnR5cGVkZWYgc2lnbmVkIGNoYXIJCWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgaW50 CQkJaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludAkJCWludF9mYXN0MzJfdDsKX19leHRlbnNpb25f Xwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQJCWludF9mYXN0NjRfdDsKCgogCnR5cGVkZWYgdW5zaWdu ZWQgY2hhcgkJdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50X2Zh c3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9mYXN0MzJfdDsKX19leHRlbnNpb25f Xwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQJdWludF9mYXN0NjRfdDsKCgoKIAoKCgoK CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50cHRyX3Q7CgoKCiAKCgoKCl9fZXh0ZW5z aW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50CQlpbnRtYXhfdDsKX19leHRlbnNpb25fXwp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQJdWludG1heF90OwoKCgogCgojIDI4MCAiL3Vzci9p bmNsdWRlL3N0ZGludC5oIiAzCgoKCiAKCiMgMzE2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMK CgoKIyAyNCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc29ja2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIv Z2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2Mt bGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAK CiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvczM5 MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgog CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMjkgIi91c3IvaW5j bHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNl LWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xp Yi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoK CgoKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDIgMwoKCgogCnR5cGVkZWYgdW5z aWduZWQgaW50IHNvY2tsZW5fdDsKCiAKZW51bSBfX3NvY2tldF90eXBlCnsKICBTT0NLX1NUUkVB TSA9IDEsCQkgCgoKICBTT0NLX0RHUkFNID0gMiwJCSAKCgogIFNPQ0tfUkFXID0gMywJCQkgCgog IFNPQ0tfUkRNID0gNCwJCQkgCgogIFNPQ0tfU0VRUEFDS0VUID0gNSwJCSAKCgogIFNPQ0tfUEFD S0VUID0gMTAJCSAKCgoKfTsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKIAojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NvY2thZGRyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5X3Q7CgogCgoKCgoKCgoKIAoKZXh0ZXJu IGludCBfX2xpYmNfc2FfbGVuICAoc2FfZmFtaWx5X3QgX19hZikgIHRocm93ICgpICA7CgoKIyAx MzMgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgogCnN0cnVjdCBzb2NrYWRkcgog IHsKICAgIHNhX2ZhbWlseV90ICBzYV9mYW1pbHkgOwkgCiAgICBjaGFyIHNhX2RhdGFbMTRdOwkJ IAogIH07CgoKIAoKCgoKCgoKCgpzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQogIHsKICAgIHNhX2Zh bWlseV90ICBfX3NzX2ZhbWlseSA7CSAKICAgIF9fdWludDMyX3QgIF9fc3NfYWxpZ247CSAKICAg IGNoYXIgX19zc19wYWRkaW5nWygxMjggIC0gKDIgKiBzaXplb2YgKF9fdWludDMyX3QgKSkpIF07 CiAgfTsKCgogCmVudW0KICB7CiAgICBNU0dfT09CCQk9IDB4MDEsCSAKCiAgICBNU0dfUEVFSwkJ PSAweDAyLAkgCgogICAgTVNHX0RPTlRST1VURQk9IDB4MDQsCSAKCgogICAgIAogICAgTVNHX1RS WUhBUkQJCT0gTVNHX0RPTlRST1VURSAsCgoKICAgIE1TR19DVFJVTkMJCT0gMHgwOCwJIAoKICAg IE1TR19QUk9YWQkJPSAweDEwLAkgCgogICAgTVNHX1RSVU5DCQk9IDB4MjAsCgogICAgTVNHX0RP TlRXQUlUCT0gMHg0MCwgIAoKICAgIE1TR19FT1IJCT0gMHg4MCwgIAoKICAgIE1TR19XQUlUQUxM CQk9IDB4MTAwLCAgCgogICAgTVNHX0ZJTgkJPSAweDIwMCwKCiAgICBNU0dfU1lOCQk9IDB4NDAw LAoKICAgIE1TR19VUkcJCT0gMHg4MDAsCgogICAgTVNHX1JTVAkJPSAweDEwMDAsCgogICAgTVNH X0VSUlFVRVVFCT0gMHgyMDAwLCAgCgogICAgTVNHX05PU0lHTkFMCT0gMHg0MDAwICAgCgogIH07 CgoKIAoKc3RydWN0IG1zZ2hkcgogIHsKICAgIHZvaWQgKiAgbXNnX25hbWU7CQkgCiAgICBzb2Nr bGVuX3QgbXNnX25hbWVsZW47CSAKCiAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CSAKICAgIHNp emVfdCBtc2dfaW92bGVuOwkJIAoKICAgIHZvaWQgKiAgbXNnX2NvbnRyb2w7CSAKICAgIHNpemVf dCBtc2dfY29udHJvbGxlbjsJIAoKICAgIGludCBtc2dfZmxhZ3M7CQkgCiAgfTsKCiAKc3RydWN0 IGNtc2doZHIKICB7CiAgICBzaXplX3QgY21zZ19sZW47CQkgCgogICAgaW50IGNtc2dfbGV2ZWw7 CQkgCiAgICBpbnQgY21zZ190eXBlOwkJIAoKICAgIHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGFb MF07ICAKICAgICAKCiAgfTsKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHN0cnVjdCBjbXNnaGRy ICpfX2Ntc2dfbnh0aGRyICAoc3RydWN0IG1zZ2hkciAqX19taGRyLAoJCQkJCSAgIHN0cnVjdCBj bXNnaGRyICpfX2Ntc2cpICB0aHJvdyAoKSAgOwojIDI3MCAiL3Vzci9pbmNsdWRlL2JpdHMvc29j a2V0LmgiIDMKCgogCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4MDEsCQkgCgoKICAgIFND TV9DUkVERU5USUFMUyA9IDB4MDIsICAgICAgCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAweDAzCSAK ICB9OwoKIAoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCAgcGlkOwkJCSAKICB1aWRfdCAgdWlkOwkJ CSAKICBnaWRfdCAgZ2lkOwkJCSAKfTsKCiAKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tldC5o IiAxIDMKIAoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMSAzCiAK CgoKCgoKCgoKCiAKCgoKCgoKCgojIDEyICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMK CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvYXNt L3NvY2tldC5oIiAzCgoKCgogCgoKCgojIDI5NSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Lmgi IDIgMwoKCgogCnN0cnVjdCBsaW5nZXIKICB7CiAgICBpbnQgbF9vbm9mZjsJCSAKICAgIGludCBs X2xpbmdlcjsJCSAKICB9OwoKCiMgMjcgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoK CgpleHRlcm4gIkMiIHsgCgogCmVudW0KICB7CiAgICBJUFBST1RPX0lQID0gMCwJICAgIAogICAg SVBQUk9UT19IT1BPUFRTID0gMCwgICAgCiAgICBJUFBST1RPX0lDTVAgPSAxLAkgICAgCiAgICBJ UFBST1RPX0lHTVAgPSAyLAkgICAgCiAgICBJUFBST1RPX0lQSVAgPSA0LAkgICAgCiAgICBJUFBS T1RPX1RDUCA9IDYsCSAgICAKICAgIElQUFJPVE9fRUdQID0gOCwJICAgIAogICAgSVBQUk9UT19Q VVAgPSAxMiwJICAgIAogICAgSVBQUk9UT19VRFAgPSAxNywJICAgIAogICAgSVBQUk9UT19JRFAg PSAyMiwJICAgIAogICAgSVBQUk9UT19UUCA9IDI5LAkgICAgCiAgICBJUFBST1RPX0lQVjYgPSA0 MSwgICAgICAKICAgIElQUFJPVE9fUk9VVElORyA9IDQzLCAgIAogICAgSVBQUk9UT19GUkFHTUVO VCA9IDQ0LCAgCiAgICBJUFBST1RPX1JTVlAgPSA0NiwJICAgIAogICAgSVBQUk9UT19HUkUgPSA0 NywJICAgIAogICAgSVBQUk9UT19FU1AgPSA1MCwgICAgICAgCiAgICBJUFBST1RPX0FIID0gNTEs ICAgICAgICAKICAgIElQUFJPVE9fSUNNUFY2ID0gNTgsICAgIAogICAgSVBQUk9UT19OT05FID0g NTksICAgICAgCiAgICBJUFBST1RPX0RTVE9QVFMgPSA2MCwgICAKICAgIElQUFJPVE9fTVRQID0g OTIsCSAgICAKICAgIElQUFJPVE9fRU5DQVAgPSA5OCwJICAgIAogICAgSVBQUk9UT19QSU0gPSAx MDMsCSAgICAKICAgIElQUFJPVE9fQ09NUCA9IDEwOCwJICAgIAogICAgSVBQUk9UT19SQVcgPSAy NTUsCSAgICAKICAgIElQUFJPVE9fTUFYCiAgfTsKCiAKZW51bQogIHsKICAgIElQUE9SVF9FQ0hP ID0gNywJCSAKICAgIElQUE9SVF9ESVNDQVJEID0gOSwJCSAKICAgIElQUE9SVF9TWVNUQVQgPSAx MSwJCSAKICAgIElQUE9SVF9EQVlUSU1FID0gMTMsCSAKICAgIElQUE9SVF9ORVRTVEFUID0gMTUs CSAKICAgIElQUE9SVF9GVFAgPSAyMSwJCSAKICAgIElQUE9SVF9URUxORVQgPSAyMywJCSAKICAg IElQUE9SVF9TTVRQID0gMjUsCQkgCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAkgCiAgICBJ UFBPUlRfTkFNRVNFUlZFUiA9IDQyLAkgCiAgICBJUFBPUlRfV0hPSVMgPSA0MywJCSAKICAgIElQ UE9SVF9NVFAgPSA1NywKCiAgICBJUFBPUlRfVEZUUCA9IDY5LAkJIAogICAgSVBQT1JUX1JKRSA9 IDc3LAogICAgSVBQT1JUX0ZJTkdFUiA9IDc5LAkJIAogICAgSVBQT1JUX1RUWUxJTksgPSA4NywK ICAgIElQUE9SVF9TVVBEVVAgPSA5NSwJCSAKCgogICAgSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTIs CSAKICAgIElQUE9SVF9MT0dJTlNFUlZFUiA9IDUxMywJIAogICAgSVBQT1JUX0NNRFNFUlZFUiA9 IDUxNCwKICAgIElQUE9SVF9FRlNTRVJWRVIgPSA1MjAsCgogICAgIAogICAgSVBQT1JUX0JJRkZV RFAgPSA1MTIsCiAgICBJUFBPUlRfV0hPU0VSVkVSID0gNTEzLAogICAgSVBQT1JUX1JPVVRFU0VS VkVSID0gNTIwLAoKICAgICAKICAgIElQUE9SVF9SRVNFUlZFRCA9IDEwMjQsCgogICAgIAogICAg SVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKICB9OwoKCiAKc3RydWN0IGluX2FkZHIKICB7CiAg ICB1aW50MzJfdCBzX2FkZHI7CiAgfTsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CiAKCiAKCgogCgogCgoKCgogCgoKCgoKCiAKc3RydWN0IGluNl9hZGRyCiAgewogICAgdW5pb24K ICAgICAgewoJdWludDhfdAkJdTZfYWRkcjhbMTZdOwoJdWludDE2X3QJdTZfYWRkcjE2WzhdOwoJ dWludDMyX3QJdTZfYWRkcjMyWzRdOwoKCgogICAgICB9IGluNl91OwoKCgoKICB9OwoKZXh0ZXJu IGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsgICAgICAgICAKZXh0ZXJuIGNvbnN0 IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOyAgICAKCgoKCgoKIAoKCgogCnN0cnVj dCBzb2NrYWRkcl9pbgogIHsKICAgIHNhX2ZhbWlseV90ICBzaW5fZmFtaWx5IDsKICAgIHVpbnQx Nl90IHNpbl9wb3J0OwkJCSAKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwkJIAoKICAgICAK ICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KCQkJ ICAgKHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50KSkgIC0KCQkJICAgc2l6ZW9mICh1aW50MTZf dCkgLQoJCQkgICBzaXplb2YgKHN0cnVjdCBpbl9hZGRyKV07CiAgfTsKCiAKc3RydWN0IHNvY2th ZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90ICBzaW42X2ZhbWlseSA7CiAgICB1aW50MTZfdCBz aW42X3BvcnQ7CQkgCiAgICB1aW50MzJfdCBzaW42X2Zsb3dpbmZvOwkgCiAgICBzdHJ1Y3QgaW42 X2FkZHIgc2luNl9hZGRyOwkgCiAgfTsKCiAKc3RydWN0IGlwdjZfbXJlcQogIHsKICAgICAKICAg IHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOwoKICAgICAKICAgIHVuc2lnbmVkIGlu dCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CiAKCgoKCiAKCgoKCgoKIAoKCnN0cnVjdCBpcF9vcHRzCiAgewogICAgc3RydWN0IGluX2FkZHIg aXBfZHN0OwkgCiAgICBjaGFyIGlwX29wdHNbNDBdOwkJIAogIH07CgogCnN0cnVjdCBpcF9tcmVx CiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsJIAogICAgc3RydWN0IGluX2Fk ZHIgaW1yX2ludGVyZmFjZTsJIAogIH07CgogCnN0cnVjdCBpcF9tcmVxbgogIHsKICAgIHN0cnVj dCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CSAKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNz OwkJIAogICAgaW50CWltcl9pZmluZGV4OwkJCSAKICB9OwoKIApzdHJ1Y3QgaW5fcGt0aW5mbwog IHsKICAgIGludCBpcGlfaWZpbmRleDsJCQkgCiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19k c3Q7CSAKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9hZGRyOwkJIAogIH07CgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgogCgoKIyAyMjUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgi IDIgMwoKCiAKCgoKCgoKZXh0ZXJuIHVpbnQzMl90IG50b2hsICAodWludDMyX3QgX19uZXRsb25n KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVpbnQxNl90IG50b2hzICAodWludDE2X3QgX19uZXRzaG9y dCkgIHRocm93ICgpICA7CmV4dGVybiB1aW50MzJfdCBodG9ubCAgKHVpbnQzMl90IF9faG9zdGxv bmcpICB0aHJvdyAoKSAgOwpleHRlcm4gdWludDE2X3QgaHRvbnMgICh1aW50MTZfdCBfX2hvc3Rz aG9ydCkgIHRocm93ICgpICA7CgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5o IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDQ1ICIvdXNyL2luY2x1ZGUv Yml0cy9ieXRlc3dhcC5oIiAzCgoKCgoKIAoKCgoKCgojIDcyICIvdXNyL2luY2x1ZGUvYml0cy9i eXRlc3dhcC5oIiAzCgoKCgoKIAoKCgoKCgoKCgoKIyAyNDIgIi91c3IvaW5jbHVkZS9uZXRpbmV0 L2luLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCmV4dGVybiBpbnQgYmluZHJlc3Zwb3J0ICAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gKl9fc29ja19pbikgIHRocm93ICgpICA7CgoKCgoKCgoKCgoKCgoKCgoKCiAKc3RydWN0 IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0IGluNl9hZGRyCWlwaTZfYWRkcjsgICAgIAogICAg dW5zaWduZWQgaW50CWlwaTZfaWZpbmRleDsgIAogIH07Cgp9IAoKCiMgNjYgIi91c3IvaW5jbHVk ZS9ycGMvdHlwZXMuaCIgMiAzCgoKCgoKCgoKCgojIDQxICIvdXNyL2luY2x1ZGUvcnBjL3JwYy5o IiAyIDMKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9ycGMveGRyLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgpleHRlcm4gIkMiIHsgCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKZW51bSB4ZHJfb3AgewogIFhEUl9FTkNPREUg PSAwLAogIFhEUl9ERUNPREUgPSAxLAogIFhEUl9GUkVFID0gMgp9OwoKIAoKCgogCgoKCgoKCgoK CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IFhEUiBYRFI7CnN0cnVjdCBYRFIKICB7CiAgICBlbnVt IHhkcl9vcCB4X29wOwkJIAogICAgc3RydWN0IHhkcl9vcHMKICAgICAgewoJYm9vbF90ICgqeF9n ZXRsb25nKSAgKFhEUiAqX194ZHJzLCBsb25nICpfX2xwKSAgOwoJIAoJYm9vbF90ICgqeF9wdXRs b25nKSAgKFhEUiAqX194ZHJzLCBfX2NvbnN0IGxvbmcgKl9fbHApICA7CgkgCglib29sX3QgKCp4 X2dldGJ5dGVzKSAgKFhEUiAqX194ZHJzLCBjYWRkcl90IF9fYWRkciwKCQkJCSAgICAgdV9pbnQg X19sZW4pICA7CgkgCglib29sX3QgKCp4X3B1dGJ5dGVzKSAgKFhEUiAqX194ZHJzLCBfX2NvbnN0 IGNoYXIgKl9fYWRkciwKCQkJCSAgICAgdV9pbnQgX19sZW4pICA7CgkgCgl1X2ludCAoKnhfZ2V0 cG9zdG4pICAoX19jb25zdCBYRFIgKl9feGRycykgIDsKCSAKCWJvb2xfdCAoKnhfc2V0cG9zdG4p ICAoWERSICpfX3hkcnMsIHVfaW50IHBvcykgIDsKCSAKCWludDMyX3QgKigqeF9pbmxpbmUpICAo WERSICpfX3hkcnMsIGludCBsZW4pICA7CgkgCgl2b2lkICgqeF9kZXN0cm95KSAgKFhEUiAqX194 ZHJzKSAgOwoJIAoJYm9vbF90ICgqeF9nZXRpbnQzMikgIChYRFIgKl9feGRycywgaW50MzJfdCAq X19pcCkgIDsKCSAKCWJvb2xfdCAoKnhfcHV0aW50MzIpICAoWERSICpfX3hkcnMsIF9fY29uc3Qg aW50MzJfdCAqX19pcCkgIDsKCSAKICAgICAgfQogICAgICp4X29wczsKICAgIGNhZGRyX3QgeF9w dWJsaWM7CQkgCiAgICBjYWRkcl90IHhfcHJpdmF0ZTsJCSAKICAgIGNhZGRyX3QgeF9iYXNlOwkJ IAogICAgaW50IHhfaGFuZHk7CQkgCiAgfTsKCiAKCgoKCgoKCgp0eXBlZGVmIGJvb2xfdCAoKnhk cnByb2NfdCkgIChYRFIgKiwgdm9pZCAqLC4uLikgIDsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK c3RydWN0IHhkcl9kaXNjcmltCnsKICBpbnQgdmFsdWU7CiAgeGRycHJvY190IHByb2M7Cn07Cgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKZXh0ZXJu IGJvb2xfdCB4ZHJfdm9pZCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl9z aG9ydCAgKFhEUiAqX194ZHJzLCBzaG9ydCAqX19zcCkgIHRocm93ICgpICA7CmV4dGVybiBib29s X3QgeGRyX3Vfc2hvcnQgIChYRFIgKl9feGRycywgdV9zaG9ydCAqX191c3ApICB0aHJvdyAoKSAg OwpleHRlcm4gYm9vbF90IHhkcl9pbnQgIChYRFIgKl9feGRycywgaW50ICpfX2lwKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJfdV9pbnQgIChYRFIgKl9feGRycywgdV9pbnQgKl9fdXAp ICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl9sb25nICAoWERSICpfX3hkcnMsIGxvbmcg Kl9fbHApICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl91X2xvbmcgIChYRFIgKl9feGRy cywgdV9sb25nICpfX3VscCkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX2h5cGVyICAo WERSICpfX3hkcnMsIHF1YWRfdCAqX19sbHApICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhk cl91X2h5cGVyICAoWERSICpfX3hkcnMsIHVfcXVhZF90ICpfX3VsbHApICB0aHJvdyAoKSAgOwpl eHRlcm4gYm9vbF90IHhkcl9sb25nbG9uZ190ICAoWERSICpfX3hkcnMsIHF1YWRfdCAqX19sbHAp ICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl91X2xvbmdsb25nX3QgIChYRFIgKl9feGRy cywgdV9xdWFkX3QgKl9fdWxscCkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX2ludDhf dCAgKFhEUiAqX194ZHJzLCBpbnQ4X3QgKl9faXApICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90 IHhkcl91aW50OF90ICAoWERSICpfX3hkcnMsIHVpbnQ4X3QgKl9fdXApICB0aHJvdyAoKSAgOwpl eHRlcm4gYm9vbF90IHhkcl9pbnQxNl90ICAoWERSICpfX3hkcnMsIGludDE2X3QgKl9faXApICB0 aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl91aW50MTZfdCAgKFhEUiAqX194ZHJzLCB1aW50 MTZfdCAqX191cCkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX2ludDMyX3QgIChYRFIg Kl9feGRycywgaW50MzJfdCAqX19pcCkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX3Vp bnQzMl90ICAoWERSICpfX3hkcnMsIHVpbnQzMl90ICpfX3VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJu IGJvb2xfdCB4ZHJfaW50NjRfdCAgKFhEUiAqX194ZHJzLCBpbnQ2NF90ICpfX2lwKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJfdWludDY0X3QgIChYRFIgKl9feGRycywgdWludDY0X3Qg Kl9fdXApICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl9ib29sICAoWERSICpfX3hkcnMs IGJvb2xfdCAqX19icCkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX2VudW0gIChYRFIg Kl9feGRycywgZW51bV90ICpfX2VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJfYXJy YXkgIChYRFIgKiBfeGRycywgY2FkZHJfdCAqX19hZGRycCwgdV9pbnQgKl9fc2l6ZXAsCgkJCSAg ICAgIHVfaW50IF9fbWF4c2l6ZSwgdV9pbnQgX19lbHNpemUsCgkJCSAgICAgIHhkcnByb2NfdCBf X2VscHJvYykgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX2J5dGVzICAoWERSICpfX3hk cnMsIGNoYXIgKipfX2NwcCwgdV9pbnQgKl9fc2l6ZXAsCgkJCSAgICAgIHVfaW50IF9fbWF4c2l6 ZSkgIHRocm93ICgpICA7CmV4dGVybiBib29sX3QgeGRyX29wYXF1ZSAgKFhEUiAqX194ZHJzLCBj YWRkcl90IF9fY3AsIHVfaW50IF9fY250KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJf c3RyaW5nICAoWERSICpfX3hkcnMsIGNoYXIgKipfX2NwcCwgdV9pbnQgX19tYXhzaXplKSAgdGhy b3cgKCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJfdW5pb24gIChYRFIgKl9feGRycywgZW51bV90ICpf X2RzY21wLCBjaGFyICpfX3VucCwKCQkJICAgICAgX19jb25zdCBzdHJ1Y3QgeGRyX2Rpc2NyaW0g Kl9fY2hvaWNlcywKCQkJICAgICAgeGRycHJvY190IGRmYXVsdCkgIHRocm93ICgpICA7CmV4dGVy biBib29sX3QgeGRyX2NoYXIgIChYRFIgKl9feGRycywgY2hhciAqX19jcCkgIHRocm93ICgpICA7 CmV4dGVybiBib29sX3QgeGRyX3VfY2hhciAgKFhEUiAqX194ZHJzLCB1X2NoYXIgKl9fY3ApICB0 aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl92ZWN0b3IgIChYRFIgKl9feGRycywgY2hhciAq X19iYXNlcCwgdV9pbnQgX19uZWxlbSwKCQkJICAgICAgIHVfaW50IF9fZWxlbXNpemUsIHhkcnBy b2NfdCBfX3hkcl9lbGVtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGJvb2xfdCB4ZHJfZmxvYXQgIChY RFIgKl9feGRycywgZmxvYXQgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHhkcl9k b3VibGUgIChYRFIgKl9feGRycywgZG91YmxlICpfX2RwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGJv b2xfdCB4ZHJfcmVmZXJlbmNlICAoWERSICpfX3hkcnMsIGNhZGRyX3QgKl9feHBwLCB1X2ludCBf X3NpemUsCgkJCQkgIHhkcnByb2NfdCBfX3Byb2MpICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90 IHhkcl9wb2ludGVyICAoWERSICpfX3hkcnMsIGNoYXIgKipfX29ianBwLAoJCQkJdV9pbnQgX19v Ympfc2l6ZSwgeGRycHJvY190IF9feGRyX29iaikgIHRocm93ICgpICA7CmV4dGVybiBib29sX3Qg eGRyX3dyYXBzdHJpbmcgIChYRFIgKl9feGRycywgY2hhciAqKl9fY3BwKSAgdGhyb3cgKCkgIDsK ZXh0ZXJuIHVfbG9uZyB4ZHJfc2l6ZW9mICAoeGRycHJvY190LCB2b2lkICopICB0aHJvdyAoKSAg OwoKIAoKCgoKc3RydWN0IG5ldG9iagp7CiAgdV9pbnQgbl9sZW47CiAgY2hhciAqbl9ieXRlczsK fTsKdHlwZWRlZiBzdHJ1Y3QgbmV0b2JqIG5ldG9iajsKZXh0ZXJuIGJvb2xfdCB4ZHJfbmV0b2Jq ICAoWERSICpfX3hkcnMsIHN0cnVjdCBuZXRvYmogKl9fbnApICB0aHJvdyAoKSAgOwoKIAoKCgoK IApleHRlcm4gdm9pZCB4ZHJtZW1fY3JlYXRlICAoWERSICpfX3hkcnMsIF9fY29uc3QgY2FkZHJf dCBfX2FkZHIsCgkJCQl1X2ludCBfX3NpemUsIGVudW0geGRyX29wIF9feG9wKSAgdGhyb3cgKCkg IDsKCiAKZXh0ZXJuIHZvaWQgeGRyc3RkaW9fY3JlYXRlICAoWERSICpfX3hkcnMsIEZJTEUgKl9f ZmlsZSwKCQkJCSAgZW51bSB4ZHJfb3AgX194b3ApICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9p ZCB4ZHJyZWNfY3JlYXRlICAoWERSICpfX3hkcnMsIHVfaW50IF9fc2VuZHNpemUsCgkJCQl1X2lu dCBfX3JlY3ZzaXplLCBjYWRkcl90IF9fdGNwX2hhbmRsZSwKCQkJCWludCAoKl9fcmVhZGl0KSAo Y2hhciAqLCBjaGFyICosIGludCksCgkJCQlpbnQgKCpfX3dyaXRlaXQpIChjaGFyICosIGNoYXIg KiwgaW50KSkgIHRocm93ICgpICA7CgogCmV4dGVybiBib29sX3QgeGRycmVjX2VuZG9mcmVjb3Jk ICAoWERSICpfX3hkcnMsIGJvb2xfdCBfX3NlbmRub3cpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g Ym9vbF90IHhkcnJlY19za2lwcmVjb3JkICAoWERSICpfX3hkcnMpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gYm9vbF90IHhkcnJlY19lb2YgIChYRFIgKl9feGRycykgIHRocm93ICgpICA7CgogCmV4 dGVybiB2b2lkIHhkcl9mcmVlICAoeGRycHJvY190IF9fcHJvYywgY2hhciAqX19vYmpwKSAgdGhy b3cgKCkgIDsKCn0gCgoKIyA0NSAiL3Vzci9pbmNsdWRlL3JwYy9ycGMuaCIgMiAzCgoKIAojIDEg Ii91c3IvaW5jbHVkZS9ycGMvYXV0aC5oIiAxIDMKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKCiAKCgplbnVtIGF1dGhfc3Rh dCB7CglBVVRIX09LPTAsCgkgCgoKCUFVVEhfQkFEQ1JFRD0xLAkJCSAKCUFVVEhfUkVKRUNURURD UkVEPTIsCQkgCglBVVRIX0JBRFZFUkY9MywJCQkgCglBVVRIX1JFSkVDVEVEVkVSRj00LAkJIAoJ QVVUSF9UT09XRUFLPTUsCQkJIAoJIAoKCglBVVRIX0lOVkFMSURSRVNQPTYsCQkgCglBVVRIX0ZB SUxFRD03CQkJIAp9OwoKdW5pb24gZGVzX2Jsb2NrIHsKCXN0cnVjdCB7CgkJdV9pbnQzMl90IGhp Z2g7CgkJdV9pbnQzMl90IGxvdzsKCX0ga2V5OwoJY2hhciBjWzhdOwp9Owp0eXBlZGVmIHVuaW9u IGRlc19ibG9jayBkZXNfYmxvY2s7CmV4dGVybiBib29sX3QgeGRyX2Rlc19ibG9jayAgKFhEUiAq X194ZHJzLCBkZXNfYmxvY2sgKl9fYmxrcCkgIHRocm93ICgpICA7CgogCgoKc3RydWN0IG9wYXF1 ZV9hdXRoIHsKCWVudW1fdAlvYV9mbGF2b3I7CQkgCgljYWRkcl90CW9hX2Jhc2U7CQkgCgl1X2lu dAlvYV9sZW5ndGg7CQkgCn07CgogCgoKdHlwZWRlZiBzdHJ1Y3QgQVVUSCBBVVRIOwpzdHJ1Y3Qg QVVUSCB7CiAgc3RydWN0IG9wYXF1ZV9hdXRoIGFoX2NyZWQ7CiAgc3RydWN0IG9wYXF1ZV9hdXRo IGFoX3ZlcmY7CiAgdW5pb24gZGVzX2Jsb2NrIGFoX2tleTsKICBzdHJ1Y3QgYXV0aF9vcHMgewog ICAgdm9pZCAoKmFoX25leHR2ZXJmKSAgKEFVVEggKikgIDsKICAgIGludCAgKCphaF9tYXJzaGFs KSAgKEFVVEggKiwgWERSICopICA7CSAKICAgIGludCAgKCphaF92YWxpZGF0ZSkgIChBVVRIICos IHN0cnVjdCBvcGFxdWVfYXV0aCAqKSAgOwoJCQkJCQkgCiAgICBpbnQgICgqYWhfcmVmcmVzaCkg IChBVVRIICopICA7CSAKICAgIHZvaWQgKCphaF9kZXN0cm95KSAgKEFVVEggKikgIDsgICAgIAkg CiAgfSAqYWhfb3BzOwogIGNhZGRyX3QgYWhfcHJpdmF0ZTsKfTsKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3Qgb3BhcXVlX2F1dGggX251bGxfYXV0aDsK CgogCgoKCiAKCgoKCgoKCgpleHRlcm4gQVVUSCAqYXV0aHVuaXhfY3JlYXRlICAoY2hhciAqX19t YWNobmFtZSwgX191aWRfdCBfX3VpZCwKCQkJCSAgIF9fZ2lkX3QgX19naWQsIGludCBfX2xlbiwK CQkJCSAgIF9fZ2lkX3QgKl9fYXVwX2dpZHMpICB0aHJvdyAoKSAgOwpleHRlcm4gQVVUSCAqYXV0 aHVuaXhfY3JlYXRlX2RlZmF1bHQgICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIEFVVEggKmF1 dGhub25lX2NyZWF0ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gQVVUSCAqYXV0aGRlc19j cmVhdGUgIChjb25zdCBjaGFyICpfX3NlcnZlcm5hbWUsIHVfaW50IF9fd2luZG93LAoJCQkJICBz dHJ1Y3Qgc29ja2FkZHIgKl9fc3luY2FkZHIsCgkJCQkgIGRlc19ibG9jayAqX19ja2V5KSAgdGhy b3cgKCkgIDsKZXh0ZXJuIEFVVEggKmF1dGhkZXNfcGtfY3JlYXRlICAoY29uc3QgY2hhciAqLCBu ZXRvYmogKiwgdV9pbnQsCgkJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqLCBkZXNfYmxvY2sgKikg IHRocm93ICgpICA7CgoKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50IGdldG5ldG5hbWUgIChjaGFy ICopICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGhvc3QybmV0bmFtZSAgKGNoYXIgKiwgX19jb25z dCBjaGFyICosIF9fY29uc3QgY2hhciAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCB1c2VyMm5l dG5hbWUgIChjaGFyICosIF9fY29uc3QgdWlkX3QgLCBfX2NvbnN0IGNoYXIgKikgIHRocm93ICgp ICA7CmV4dGVybiBpbnQgbmV0bmFtZTJ1c2VyICAoX19jb25zdCBjaGFyICosIHVpZF90ICAqLCBn aWRfdCAgKiwgaW50ICosCgkJCSAgICAgIGdpZF90ICAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGlu dCBuZXRuYW1lMmhvc3QgIChfX2NvbnN0IGNoYXIgKiwgY2hhciAqLCBfX2NvbnN0IGludCkgIHRo cm93ICgpICA7CgogCgoKCgpleHRlcm4gaW50IGtleV9kZWNyeXB0c2Vzc2lvbiAgKGNoYXIgKiwg ZGVzX2Jsb2NrICopICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGtleV9kZWNyeXB0c2Vzc2lvbl9w ayAgKGNoYXIgKiwgbmV0b2JqICosIGRlc19ibG9jayAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGlu dCBrZXlfZW5jcnlwdHNlc3Npb24gIChjaGFyICosIGRlc19ibG9jayAqKSAgdGhyb3cgKCkgIDsK ZXh0ZXJuIGludCBrZXlfZW5jcnlwdHNlc3Npb25fcGsgIChjaGFyICosIG5ldG9iaiAqLCBkZXNf YmxvY2sgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQga2V5X2dlbmRlcyAgKGRlc19ibG9jayAq KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBrZXlfc2V0c2VjcmV0ICAoY2hhciAqKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIGludCBrZXlfc2VjcmV0a2V5X2lzX3NldCAgKHZvaWQpICB0aHJvdyAoKSAg OwpleHRlcm4gaW50IGtleV9nZXRfY29udiAgKGNoYXIgKiwgZGVzX2Jsb2NrICopICB0aHJvdyAo KSAgOwoKIAoKCmV4dGVybiBib29sX3QgeGRyX29wYXF1ZV9hdXRoICAoWERSICosIHN0cnVjdCBv cGFxdWVfYXV0aCAqKSAgdGhyb3cgKCkgIDsKCn0gCgoKIyA0OCAiL3Vzci9pbmNsdWRlL3JwYy9y cGMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9ycGMvY2xudC5oIiAxIDMKIAogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy91bi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKZXh0ZXJuICJDIiB7IAoK IApzdHJ1Y3Qgc29ja2FkZHJfdW4KICB7CiAgICBzYV9mYW1pbHlfdCAgc3VuX2ZhbWlseSA7CiAg ICBjaGFyIHN1bl9wYXRoWzEwOF07CQkgCiAgfTsKCgogCgoKCn0gCgoKIyA0NCAiL3Vzci9pbmNs dWRlL3JwYy9jbG50LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCmVudW0gY2xudF9zdGF0 IHsKCVJQQ19TVUNDRVNTPTAsCQkJIAoJIAoKCglSUENfQ0FOVEVOQ09ERUFSR1M9MSwJCSAKCVJQ Q19DQU5UREVDT0RFUkVTPTIsCQkgCglSUENfQ0FOVFNFTkQ9MywJCQkgCglSUENfQ0FOVFJFQ1Y9 NCwJCQkgCglSUENfVElNRURPVVQ9NSwJCQkgCgkgCgoKCVJQQ19WRVJTTUlTTUFUQ0g9NiwJCSAK CVJQQ19BVVRIRVJST1I9NywJCSAKCVJQQ19QUk9HVU5BVkFJTD04LAkJIAoJUlBDX1BST0dWRVJT TUlTTUFUQ0g9OSwJCSAKCVJQQ19QUk9DVU5BVkFJTD0xMCwJCSAKCVJQQ19DQU5UREVDT0RFQVJH Uz0xMSwJCSAKCVJQQ19TWVNURU1FUlJPUj0xMiwJCSAKCVJQQ19OT0JST0FEQ0FTVCA9IDIxLAkJ IAoJIAoKCglSUENfVU5LTk9XTkhPU1Q9MTMsCQkgCglSUENfVU5LTk9XTlBST1RPPTE3LAkJIAoJ UlBDX1VOS05PV05BRERSID0gMTksCQkgCgoJIAoKCglSUENfUlBDQkZBSUxVUkU9MTQsCQkgCgoJ UlBDX1BST0dOT1RSRUdJU1RFUkVEPTE1LAkgCglSUENfTjJBWExBVEVGQUlMVVJFID0gMjIsCSAK CSAKCgoJUlBDX0ZBSUxFRD0xNiwKCVJQQ19JTlRSPTE4LAoJUlBDX1RMSUVSUk9SPTIwLAoJUlBD X1VERVJST1I9MjMsCiAgICAgICAgIAoKCiAgICAgICAgUlBDX0lOUFJPR1JFU1MgPSAyNCwKICAg ICAgICBSUENfU1RBTEVSQUNIQU5ETEUgPSAyNQp9OwoKCiAKCgpzdHJ1Y3QgcnBjX2VyciB7CiAg ZW51bSBjbG50X3N0YXQgcmVfc3RhdHVzOwogIHVuaW9uIHsKICAgIGludCBSRV9lcnJubzsJCSAK ICAgIGVudW0gYXV0aF9zdGF0IFJFX3doeTsJIAogICAgc3RydWN0IHsKICAgICAgdV9sb25nIGxv dzsJCSAKICAgICAgdV9sb25nIGhpZ2g7CQkgCiAgICB9IFJFX3ZlcnM7CiAgICBzdHJ1Y3QgewkJ CSAKICAgICAgbG9uZyBzMTsKICAgICAgbG9uZyBzMjsKICAgIH0gUkVfbGI7CQkJIAogIH0gcnU7 CgoKCgp9OwoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IENMSUVOVCBDTElFTlQ7CnN0cnVjdCBDTElF TlQgewogIEFVVEgJKmNsX2F1dGg7CQkgIAogIHN0cnVjdCBjbG50X29wcyB7CiAgICBlbnVtIGNs bnRfc3RhdCAoKmNsX2NhbGwpICAoQ0xJRU5UICosIHVfbG9uZywgeGRycHJvY190LAoJCQkJICAg ICAgY2FkZHJfdCwgeGRycHJvY190LAoJCQkJICAgICAgY2FkZHJfdCwgc3RydWN0IHRpbWV2YWwp ICA7CgkJCSAgICAgICAJIAogICAgdm9pZCAoKmNsX2Fib3J0KSAgKHZvaWQpICA7ICAgCiAgICB2 b2lkICgqY2xfZ2V0ZXJyKSAgKENMSUVOVCAqLCBzdHJ1Y3QgcnBjX2VyciAqKSAgOwoJCQkJIAog ICAgYm9vbF90ICgqY2xfZnJlZXJlcykgIChDTElFTlQgKiwgeGRycHJvY190LCBjYWRkcl90KSAg OwoJCQkJIAogICAgdm9pZCAoKmNsX2Rlc3Ryb3kpICAoQ0xJRU5UICopICA7ICAKICAgIGJvb2xf dCAoKmNsX2NvbnRyb2wpICAoQ0xJRU5UICosIGludCwgY2hhciAqKSAgOwoJCQkJIAogIH0gKmNs X29wczsKICBjYWRkcl90IGNsX3ByaXZhdGU7CQkgCn07CgoKIAoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCiAK CgoKCgoKZXh0ZXJuIENMSUVOVCAqY2xudHJhd19jcmVhdGUgIChfX2NvbnN0IHVfbG9uZyBfX3By b2csCgkJCQkgICAgX19jb25zdCB1X2xvbmcgX192ZXJzKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoK CgoKCmV4dGVybiBDTElFTlQgKmNsbnRfY3JlYXRlICAoX19jb25zdCBjaGFyICpfX2hvc3QsIF9f Y29uc3QgdV9sb25nIF9fcHJvZywKCQkJCSBfX2NvbnN0IHVfbG9uZyBfX3ZlcnMsIF9fY29uc3Qg Y2hhciAqX19wcm90KSAgdGhyb3cgKCkgIDsKCgogCgoKCgoKCgoKCgpleHRlcm4gQ0xJRU5UICpj bG50dGNwX2NyZWF0ZSAgKHN0cnVjdCBzb2NrYWRkcl9pbiAqX19yYWRkciwKCQkJCSAgICB1X2xv bmcgX19wcm9nLCB1X2xvbmcgX192ZXJzaW9uLAoJCQkJICAgIGludCAqX19zb2NrcCwgdV9pbnQg X19zZW5kc3osCgkJCQkgICAgdV9pbnQgX19yZWN2c3opICB0aHJvdyAoKSAgOwoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCmV4dGVybiBDTElFTlQgKmNsbnR1ZHBfY3JlYXRlICAoc3RydWN0IHNvY2th ZGRyX2luICpfX3JhZGRyLAoJCQkJICAgIHVfbG9uZyBfX3Byb2dyYW0sIHVfbG9uZyBfX3ZlcnNp b24sCgkJCQkgICAgc3RydWN0IHRpbWV2YWwgX193YWl0X3Jlc2VuZCwKCQkJCSAgICBpbnQgKl9f c29ja3ApICB0aHJvdyAoKSAgOwpleHRlcm4gQ0xJRU5UICpjbG50dWRwX2J1ZmNyZWF0ZSAgKHN0 cnVjdCBzb2NrYWRkcl9pbiAqX19yYWRkciwKCQkJCSAgICAgICB1X2xvbmcgX19wcm9ncmFtLCB1 X2xvbmcgX192ZXJzaW9uLAoJCQkJICAgICAgIHN0cnVjdCB0aW1ldmFsIF9fd2FpdF9yZXNlbmQs CgkJCQkgICAgICAgaW50ICpfX3NvY2twLCB1X2ludCBfX3NlbmRzeiwKCQkJCSAgICAgICB1X2lu dCBfX3JlY3ZzeikgIHRocm93ICgpICA7CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIENMSUVOVCAqY2xu dHVuaXhfY3JlYXRlICAgKHN0cnVjdCBzb2NrYWRkcl91biAqX19yYWRkciwKCQkJCSAgICAgIHVf bG9uZyBfX3Byb2dyYW0sIHVfbG9uZyBfX3ZlcnNpb24sCgkJCQkgICAgICBpbnQgKl9fc29ja3As IHVfaW50IF9fc2VuZHN6LAoJCQkJICAgICAgdV9pbnQgX19yZWN2c3opICB0aHJvdyAoKSAgOwoK CmV4dGVybiBpbnQgY2FsbHJwYyAgKF9fY29uc3QgY2hhciAqX19ob3N0LCBfX2NvbnN0IHVfbG9u ZyBfX3Byb2dudW0sCgkJCSBfX2NvbnN0IHVfbG9uZyBfX3ZlcnNudW0sIF9fY29uc3QgdV9sb25n IF9fcHJvY251bSwKCQkJIF9fY29uc3QgeGRycHJvY190IF9faW5wcm9jLCBfX2NvbnN0IGNoYXIg Kl9faW4sCgkJCSBfX2NvbnN0IHhkcnByb2NfdCBfX291dHByb2MsIGNoYXIgKl9fb3V0KSAgdGhy b3cgKCkgIDsKZXh0ZXJuIGludCBfcnBjX2R0YWJsZXNpemUgICh2b2lkKSAgdGhyb3cgKCkgIDsK CiAKCgpleHRlcm4gdm9pZCBjbG50X3BjcmVhdGVlcnJvciAgKF9fY29uc3QgY2hhciAqX19tc2cp ICB0aHJvdyAoKSAgOwkgCmV4dGVybiBjaGFyICpjbG50X3NwY3JlYXRlZXJyb3IgIChfX2NvbnN0 IGNoYXIgKl9fbXNnKSAgdGhyb3cgKCkgIDsJIAoKIAoKCmV4dGVybiB2b2lkIGNsbnRfcGVycm5v ICAoZW51bSBjbG50X3N0YXQgX19udW0pICB0aHJvdyAoKSAgOwkgCgogCgoKZXh0ZXJuIHZvaWQg Y2xudF9wZXJyb3IgIChDTElFTlQgKl9fY2xudCwgX19jb25zdCBjaGFyICpfX21zZykgIHRocm93 ICgpICA7CgkJCQkJCQkgCmV4dGVybiBjaGFyICpjbG50X3NwZXJyb3IgIChDTElFTlQgKl9fY2xu dCwgX19jb25zdCBjaGFyICpfX21zZykgIHRocm93ICgpICA7CgkJCQkJCQkgCgogCgoKc3RydWN0 IHJwY19jcmVhdGVlcnIgewoJZW51bSBjbG50X3N0YXQgY2Zfc3RhdDsKCXN0cnVjdCBycGNfZXJy IGNmX2Vycm9yOyAgCn07CgpleHRlcm4gc3RydWN0IHJwY19jcmVhdGVlcnIgcnBjX2NyZWF0ZWVy cjsKCgoKIAoKCmV4dGVybiBjaGFyICpjbG50X3NwZXJybm8gIChlbnVtIGNsbnRfc3RhdCBfX251 bSkgIHRocm93ICgpICA7CSAKCiAKCgpleHRlcm4gaW50IGdldHJwY3BvcnQgIChfX2NvbnN0IGNo YXIgKiBfX2hvc3QsIHVfbG9uZyBfX3Byb2dudW0sCgkJCSAgIHVfbG9uZyBfX3ZlcnNudW0sIHVf aW50IHByb3RvKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgZ2V0X215YWRkcmVzcyAg KHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAgdGhyb3cgKCkgIDsKCgoKCn0gCgoKIyA1MSAiL3Vzci9p bmNsdWRlL3JwYy9ycGMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9ycGMvcnBjX21zZy5o IiAxIDMKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoK CgpleHRlcm4gIkMiIHsgCgogCgoKCgoKZW51bSBtc2dfdHlwZSB7CglDQUxMPTAsCglSRVBMWT0x Cn07CgplbnVtIHJlcGx5X3N0YXQgewoJTVNHX0FDQ0VQVEVEPTAsCglNU0dfREVOSUVEPTEKfTsK CmVudW0gYWNjZXB0X3N0YXQgewoJU1VDQ0VTUz0wLAoJUFJPR19VTkFWQUlMPTEsCglQUk9HX01J U01BVENIPTIsCglQUk9DX1VOQVZBSUw9MywKCUdBUkJBR0VfQVJHUz00LAoJU1lTVEVNX0VSUj01 Cn07CgplbnVtIHJlamVjdF9zdGF0IHsKCVJQQ19NSVNNQVRDSD0wLAoJQVVUSF9FUlJPUj0xCn07 CgogCgoKCiAKCgoKCnN0cnVjdCBhY2NlcHRlZF9yZXBseSB7CglzdHJ1Y3Qgb3BhcXVlX2F1dGgJ YXJfdmVyZjsKCWVudW0gYWNjZXB0X3N0YXQJYXJfc3RhdDsKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJ CQl1X2xvbmcJbG93OwoJCQl1X2xvbmcJaGlnaDsKCQl9IEFSX3ZlcnNpb25zOwoJCXN0cnVjdCB7 CgkJCWNhZGRyX3QJd2hlcmU7CgkJCXhkcnByb2NfdCBwcm9jOwoJCX0gQVJfcmVzdWx0czsKCQkg Cgl9IHJ1OwoKCn07CgogCgoKc3RydWN0IHJlamVjdGVkX3JlcGx5IHsKCWVudW0gcmVqZWN0X3N0 YXQgcmpfc3RhdDsKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQl1X2xvbmcgbG93OwoJCQl1X2xvbmcg aGlnaDsKCQl9IFJKX3ZlcnNpb25zOwoJCWVudW0gYXV0aF9zdGF0IFJKX3doeTsgICAKCX0gcnU7 CgoKfTsKCiAKCgpzdHJ1Y3QgcmVwbHlfYm9keSB7CgllbnVtIHJlcGx5X3N0YXQgcnBfc3RhdDsK CXVuaW9uIHsKCQlzdHJ1Y3QgYWNjZXB0ZWRfcmVwbHkgUlBfYXI7CgkJc3RydWN0IHJlamVjdGVk X3JlcGx5IFJQX2RyOwoJfSBydTsKCgp9OwoKIAoKCnN0cnVjdCBjYWxsX2JvZHkgewoJdV9sb25n IGNiX3JwY3ZlcnM7CSAKCXVfbG9uZyBjYl9wcm9nOwoJdV9sb25nIGNiX3ZlcnM7Cgl1X2xvbmcg Y2JfcHJvYzsKCXN0cnVjdCBvcGFxdWVfYXV0aCBjYl9jcmVkOwoJc3RydWN0IG9wYXF1ZV9hdXRo IGNiX3ZlcmY7ICAKfTsKCiAKCgpzdHJ1Y3QgcnBjX21zZyB7Cgl1X2xvbmcJCQlybV94aWQ7Cgll bnVtIG1zZ190eXBlCQlybV9kaXJlY3Rpb247Cgl1bmlvbiB7CgkJc3RydWN0IGNhbGxfYm9keSBS TV9jbWI7CgkJc3RydWN0IHJlcGx5X2JvZHkgUk1fcm1iOwoJfSBydTsKCgp9OwoKCgoKIAoKCgoK CmV4dGVybiBib29sX3QJeGRyX2NhbGxtc2cgIChYRFIgKl9feGRycywgc3RydWN0IHJwY19tc2cg Kl9fY21zZykgIHRocm93ICgpICA7CgogCgoKCgoKZXh0ZXJuIGJvb2xfdAl4ZHJfY2FsbGhkciAg KFhEUiAqX194ZHJzLCBzdHJ1Y3QgcnBjX21zZyAqX19jbXNnKSAgdGhyb3cgKCkgIDsKCiAKCgoK CgpleHRlcm4gYm9vbF90CXhkcl9yZXBseW1zZyAgKFhEUiAqX194ZHJzLCBzdHJ1Y3QgcnBjX21z ZyAqX19ybXNnKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgpleHRlcm4gdm9pZAlfc2V0ZXJyX3JlcGx5 ICAoc3RydWN0IHJwY19tc2cgKl9fbXNnLAoJCQkJICAgIHN0cnVjdCBycGNfZXJyICpfX2Vycm9y KSAgdGhyb3cgKCkgIDsKCn0gCgoKIyA1NCAiL3Vzci9pbmNsdWRlL3JwYy9ycGMuaCIgMiAzCgoj IDEgIi91c3IvaW5jbHVkZS9ycGMvYXV0aF91bml4LmgiIDEgMwogCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoK CiAKCgogCgoKc3RydWN0IGF1dGh1bml4X3Bhcm1zCiAgewogICAgdV9sb25nIGF1cF90aW1lOwog ICAgY2hhciAqYXVwX21hY2huYW1lOwogICAgX191aWRfdCBhdXBfdWlkOwogICAgX19naWRfdCBh dXBfZ2lkOwogICAgdV9pbnQgYXVwX2xlbjsKICAgIF9fZ2lkX3QgKmF1cF9naWRzOwogIH07Cgpl eHRlcm4gYm9vbF90IHhkcl9hdXRodW5peF9wYXJtcyAgKFhEUiAqX194ZHJzLAoJCQkJICAgICAg IHN0cnVjdCBhdXRodW5peF9wYXJtcyAqX19wKSAgdGhyb3cgKCkgIDsKCiAKCgoKCnN0cnVjdCBz aG9ydF9oYW5kX3ZlcmYKICB7CiAgICBzdHJ1Y3Qgb3BhcXVlX2F1dGggbmV3X2NyZWQ7CiAgfTsK Cn0gCgoKIyA1NSAiL3Vzci9pbmNsdWRlL3JwYy9ycGMuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9ycGMvYXV0aF9kZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMi IHsgCgogCmVudW0gYXV0aGRlc19uYW1la2luZAogIHsKICAgIEFETl9GVUxMTkFNRSwKICAgIEFE Tl9OSUNLTkFNRQogIH07CgogCgpzdHJ1Y3QgYXV0aGRlc19mdWxsbmFtZQogIHsKICAgIGNoYXIg Km5hbWU7CQkgCiAgICBkZXNfYmxvY2sga2V5OwkgCiAgICB1aW50MzJfdCB3aW5kb3c7CSAKICB9 OwoKIApzdHJ1Y3QgYXV0aGRlc19jcmVkCiAgewogICAgZW51bSBhdXRoZGVzX25hbWVraW5kIGFk Y19uYW1la2luZDsKICAgIHN0cnVjdCBhdXRoZGVzX2Z1bGxuYW1lIGFkY19mdWxsbmFtZTsKICAg IHVpbnQzMl90IGFkY19uaWNrbmFtZTsKICB9OwoKIApzdHJ1Y3QgcnBjX3RpbWV2YWwKICB7CiAg ICB1aW50MzJfdCB0dl9zZWM7ICAgICAgICAgICAgIAogICAgdWludDMyX3QgdHZfdXNlYzsgICAg ICAgICAgICAKICB9OwoKIApzdHJ1Y3QgYXV0aGRlc192ZXJmCiAgewogICAgdW5pb24KICAgICAg ewoJc3RydWN0IHJwY190aW1ldmFsIGFkdl9jdGltZTsJIAoJZGVzX2Jsb2NrIGFkdl94dGltZTsJ CSAKICAgICAgfQogICAgYWR2X3RpbWVfdTsKICAgIHVpbnQzMl90IGFkdl9pbnRfdTsKICB9OwoK IAoKCgoKCgoKCiAKCgoKCgoKCgogCmV4dGVybiBpbnQgYXV0aGRlc19nZXR1Y3JlZCAgKF9fY29u c3Qgc3RydWN0IGF1dGhkZXNfY3JlZCAqIF9fYWRjLAoJCQkJICB1aWRfdCAgKiBfX3VpZCwgZ2lk X3QgICogX19naWQsCgkJCQkgIHNob3J0ICpfX2dyb3VwbGVuLCBnaWRfdCAgKiBfX2dyb3Vwcykg IHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBnZXRwdWJsaWNrZXkgIChfX2NvbnN0IGNoYXIg Kl9fbmFtZSwgY2hhciAqX19rZXkpICB0aHJvdyAoKSAgOwoKIAoKCgoKZXh0ZXJuIGludCBnZXRz ZWNyZXRrZXkgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19rZXksCgkJCSAgICAgIF9f Y29uc3QgY2hhciAqX19wYXNzd2QpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBydGltZSAgKHN0 cnVjdCBzb2NrYWRkcl9pbiAqX19hZGRycCwKCQkgICAgICAgc3RydWN0IHJwY190aW1ldmFsICpf X3RpbWVwLAoJCSAgICAgICBzdHJ1Y3QgcnBjX3RpbWV2YWwgKl9fdGltZW91dCkgIHRocm93ICgp ICA7Cgp9IAoKCgojIDU2ICIvdXNyL2luY2x1ZGUvcnBjL3JwYy5oIiAyIDMKCgogCiMgMSAiL3Vz ci9pbmNsdWRlL3JwYy9zdmMuaCIgMSAzCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZW51bSB4 cHJ0X3N0YXQgewoJWFBSVF9ESUVELAoJWFBSVF9NT1JFUkVRUywKCVhQUlRfSURMRQp9OwoKIAoK CnR5cGVkZWYgc3RydWN0IFNWQ1hQUlQgU1ZDWFBSVDsKc3RydWN0IFNWQ1hQUlQgewogIGludCB4 cF9zb2NrOwogIHVfc2hvcnQgeHBfcG9ydDsJCSAKICBjb25zdCBzdHJ1Y3QgeHBfb3BzIHsKICAg IGJvb2xfdAkoKnhwX3JlY3YpICAoU1ZDWFBSVCAqX194cHJ0LCBzdHJ1Y3QgcnBjX21zZyAqX19t c2cpICA7CgkJCQkgCiAgICBlbnVtIHhwcnRfc3RhdCAoKnhwX3N0YXQpICAoU1ZDWFBSVCAqX194 cHJ0KSAgOwoJCQkJIAogICAgYm9vbF90CSgqeHBfZ2V0YXJncykgIChTVkNYUFJUICpfX3hwcnQs IHhkcnByb2NfdCBfX3hkcl9hcmdzLAoJCQkJICAgICAgY2FkZHJfdCBhcmdzX3B0cikgIDsgIAog ICAgYm9vbF90CSgqeHBfcmVwbHkpICAoU1ZDWFBSVCAqX194cHJ0LCBzdHJ1Y3QgcnBjX21zZyAq X19tc2cpICA7CgkJCQkgCiAgICBib29sX3QJKCp4cF9mcmVlYXJncykgIChTVkNYUFJUICpfX3hw cnQsIHhkcnByb2NfdCBfX3hkcl9hcmdzLAoJCQkJICAgICAgIGNhZGRyX3QgYXJnc19wdHIpICA7 CgkJCQkgCiAgICB2b2lkCSgqeHBfZGVzdHJveSkgIChTVkNYUFJUICpfX3hwcnQpICA7CgkJCQkg CiAgfSAqeHBfb3BzOwogIGludAkJeHBfYWRkcmxlbjsJICAKICBzdHJ1Y3Qgc29ja2FkZHJfaW4g eHBfcmFkZHI7CSAgCiAgc3RydWN0IG9wYXF1ZV9hdXRoIHhwX3ZlcmY7CSAgCiAgY2FkZHJfdAkJ eHBfcDE7CQkgIAogIGNhZGRyX3QJCXhwX3AyOwkJICAKfTsKCiAKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKc3RydWN0IHN2Y19yZXEgewoJdV9sb25nCQly cV9wcm9nOwkgCgl1X2xvbmcJCXJxX3ZlcnM7CSAKCXVfbG9uZwkJcnFfcHJvYzsJIAoJc3RydWN0 IG9wYXF1ZV9hdXRoIHJxX2NyZWQ7CSAKCWNhZGRyX3QJCXJxX2NsbnRjcmVkOwkgCglTVkNYUFJU CSpycV94cHJ0OwkJIAp9OwoKCgp0eXBlZGVmIHZvaWQgKCpfX2Rpc3BhdGNoX2ZuX3QpICAoc3Ry dWN0IHN2Y19yZXEqLCBTVkNYUFJUKikgIDsKCgogCgoKCgoKCgoKCmV4dGVybiBib29sX3QJc3Zj X3JlZ2lzdGVyICAoU1ZDWFBSVCAqX194cHJ0LCB1X2xvbmcgX19wcm9nLAoJCQkJICAgdV9sb25n IF9fdmVycywgX19kaXNwYXRjaF9mbl90IF9fZGlzcGF0Y2gsCgkJCQkgICB1X2xvbmcgX19wcm90 b2NvbCkgIHRocm93ICgpICA7CgogCgoKCgoKCmV4dGVybiB2b2lkCXN2Y191bnJlZ2lzdGVyICAo dV9sb25nIF9fcHJvZywgdV9sb25nIF9fdmVycykgIHRocm93ICgpICA7CgogCgoKCgoKZXh0ZXJu IHZvaWQJeHBydF9yZWdpc3RlciAgKFNWQ1hQUlQgKl9feHBydCkgIHRocm93ICgpICA7CgogCgoK CgoKZXh0ZXJuIHZvaWQJeHBydF91bnJlZ2lzdGVyICAoU1ZDWFBSVCAqX194cHJ0KSAgdGhyb3cg KCkgIDsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBib29sX3QJc3ZjX3Nl bmRyZXBseSAgKFNWQ1hQUlQgKnhwcnQsIHhkcnByb2NfdCBfX3hkcl9yZXN1bHRzLAoJCQkJICAg IGNhZGRyX3QgX194ZHJfbG9jYXRpb24pICB0aHJvdyAoKSAgOwoKZXh0ZXJuIHZvaWQJc3ZjZXJy X2RlY29kZSAgKFNWQ1hQUlQgKl9feHBydCkgIHRocm93ICgpICA7CgpleHRlcm4gdm9pZAlzdmNl cnJfd2Vha2F1dGggIChTVkNYUFJUICpfX3hwcnQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIHZvaWQJ c3ZjZXJyX25vcHJvYyAgKFNWQ1hQUlQgKl9feHBydCkgIHRocm93ICgpICA7CgpleHRlcm4gdm9p ZAlzdmNlcnJfcHJvZ3ZlcnMgIChTVkNYUFJUICpfX3hwcnQsIHVfbG9uZyBfX2xvd192ZXJzLAoJ CQkJICAgICAgdV9sb25nIF9faGlnaF92ZXJzKSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkCXN2 Y2Vycl9hdXRoICAoU1ZDWFBSVCAqX194cHJ0LCBlbnVtIGF1dGhfc3RhdCBfX3doeSkgIHRocm93 ICgpICA7CgpleHRlcm4gdm9pZAlzdmNlcnJfbm9wcm9nICAoU1ZDWFBSVCAqX194cHJ0KSAgdGhy b3cgKCkgIDsKCmV4dGVybiB2b2lkCXN2Y2Vycl9zeXN0ZW1lcnIgIChTVkNYUFJUICpfX3hwcnQp ICB0aHJvdyAoKSAgOwoKIAoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIGZkX3NldCBzdmNfZmRzZXQ7 CgoKCgoKIAoKCgpleHRlcm4gdm9pZCBzdmNfZ2V0cmVxICAoaW50IF9fcmRmZHMpICB0aHJvdyAo KSAgOwpleHRlcm4gdm9pZCBzdmNfZ2V0cmVxc2V0ICAoZmRfc2V0ICpfX3JlYWRmZHMpICB0aHJv dyAoKSAgOwpleHRlcm4gdm9pZCBzdmNfZXhpdCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4g dm9pZCBzdmNfcnVuICAodm9pZCkgIHRocm93ICgpICA7CgogCgoKCgogCgoKCiAKCgpleHRlcm4g U1ZDWFBSVCAqc3ZjcmF3X2NyZWF0ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBT VkNYUFJUICpzdmN1ZHBfY3JlYXRlICAoaW50IF9fc29jaykgIHRocm93ICgpICA7CmV4dGVybiBT VkNYUFJUICpzdmN1ZHBfYnVmY3JlYXRlICAoaW50IF9fc29jaywgdV9pbnQgX19zZW5kc3osCgkJ CQkgICAgICAgdV9pbnQgX19yZWN2c3opICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBTVkNYUFJU ICpzdmN0Y3BfY3JlYXRlICAoaW50IF9fc29jaywgdV9pbnQgX19zZW5kc2l6ZSwKCQkJCSAgICB1 X2ludCBfX3JlY3ZzaXplKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIFNWQ1hQUlQgKnN2Y3Vu aXhfY3JlYXRlICAoaW50IF9fc29jaywgdV9pbnQgX19zZW5kc2l6ZSwKCQkJCSAgICAgdV9pbnQg X19yZWN2c2l6ZSwgY2hhciAqX19wYXRoKSAgdGhyb3cgKCkgIDsKCgp9IAoKCiMgNTkgIi91c3Iv aW5jbHVkZS9ycGMvcnBjLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL3N2Y19hdXRoLmgi IDEgMwogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgoKCmV4dGVy biAiQyIgeyAKCiAKCgpleHRlcm4gZW51bSBhdXRoX3N0YXQgX2F1dGhlbnRpY2F0ZSAgKHN0cnVj dCBzdmNfcmVxICpfX3Jxc3QsCgkJCQkJICBzdHJ1Y3QgcnBjX21zZyAqX19tc2cpICB0aHJvdyAo KSAgOwoKfSAKCgojIDYwICIvdXNyL2luY2x1ZGUvcnBjL3JwYy5oIiAyIDMKCgogCgoKCgogCiMg MSAiL3Vzci9pbmNsdWRlL3JwYy9uZXRkYi5oIiAxIDMKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51 eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9n Y2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoK IAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog CgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs dWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL3Mz OTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoj IDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL3Mz OTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKIyA0MiAiL3Vzci9pbmNsdWRlL3JwYy9uZXRkYi5oIiAyIDMKCgpleHRlcm4g IkMiIHsgCgpzdHJ1Y3QgcnBjZW50CnsKICBjaGFyICpyX25hbWU7CQkgCiAgY2hhciAqKnJfYWxp YXNlczsJIAogIGludCByX251bWJlcjsJCSAKfTsKCmV4dGVybiB2b2lkIHNldHJwY2VudCAgKGlu dCBfc3RheW9wZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCBlbmRycGNlbnQgICh2b2lkKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bmFtZSAgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5 bnVtYmVyICAoaW50IF9fbnVtYmVyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHN0cnVjdCBycGNlbnQg KmdldHJwY2VudCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCmV4dGVybiBpbnQgZ2V0cnBjYnluYW1l X3IgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwKCQkJCXN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1 ZiwgY2hhciAqX19idWZmZXIsCgkJCQlzaXplX3QgX19idWZsZW4sIHN0cnVjdCBycGNlbnQgKipf X3Jlc3VsdCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGdldHJwY2J5bnVtYmVyX3IgIChpbnQg X19udW1iZXIsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKCQkJCSAgY2hhciAqX19idWZm ZXIsIHNpemVfdCBfX2J1ZmxlbiwKCQkJCSAgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSAgdGhy b3cgKCkgIDsKCmV4dGVybiBpbnQgZ2V0cnBjZW50X3IgIChzdHJ1Y3QgcnBjZW50ICpfX3Jlc3Vs dF9idWYsIGNoYXIgKl9fYnVmZmVyLAoJCQkgICAgIHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJw Y2VudCAqKl9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKCgp9IAoKCiMgNjggIi91c3IvaW5jbHVkZS9y cGMvcnBjLmgiIDIgMwoKCgojIDE5ICIvaG9tZS94aHU2MDMxL3RzZncvSW5jbHVkZS9UU0ZXTmV0 QmFzZU9iamVjdC5ocHAiIDIKCiAgICAgICAgIAogICAgfQogICAgCiAgICAgCiAgICAKIyAxICIv aG9tZS94aHU2MDMxL3RzZncvSW5jbHVkZS9pY2VrZXkuaHBwIiAxCiAKCgoKCgoKCgoKCmNsYXNz IEljZVN1YmtleTsKCmNsYXNzIEljZUtleSB7CiAgICBwdWJsaWM6CglJY2VLZXkgKGludCBuKTsK CX5JY2VLZXkgKCk7CgoJdm9pZAkJc2V0IChjb25zdCB1bnNpZ25lZCBjaGFyICprZXkpOwoKCXZv aWQJCWVuY3J5cHQgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKCQkJCQl1bnNpZ25l ZCBjaGFyICpjaXBoZXJ0ZXh0KSBjb25zdDsKCgl2b2lkCQlkZWNyeXB0IChjb25zdCB1bnNpZ25l ZCBjaGFyICpjaXBoZXJ0ZXh0LAoJCQkJCXVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCkgY29uc3Q7 CgoJaW50CQlrZXlTaXplICgpIGNvbnN0OwoKCWludAkJYmxvY2tTaXplICgpIGNvbnN0OwoKICAg IHByaXZhdGU6Cgl2b2lkCQlzY2hlZHVsZUJ1aWxkICh1bnNpZ25lZCBzaG9ydCAqaywgaW50IG4s CgkJCQkJCQljb25zdCBpbnQgKmtleXJvdCk7CgoJaW50CQlfc2l6ZTsKCWludAkJX3JvdW5kczsK CUljZVN1YmtleQkqX2tleXNjaGVkOwp9OwoKCiMgMjQgIi9ob21lL3hodTYwMzEvdHNmdy9JbmNs dWRlL1RTRldOZXRCYXNlT2JqZWN0LmhwcCIgMgoKICAgIAogICAgIAogICAgIAoKCgoKCgoKICAg IAogICAgY2xhc3MgVFNGV05ldEJhc2VPYmplY3QgewogICAgcHVibGljOgogICAgCiAgICAgICAg IAogICAgICAgICAKCgogICAgICAgIFRTRldOZXRCYXNlT2JqZWN0KCk7CgkKICAgICAgICAgCiAg ICAgICAgIAoKCiAgICAgICAgflRTRldOZXRCYXNlT2JqZWN0KCk7CgogICAgICAgICAKICAgICAg ICAgCgoKCgogICAgICAgIHZpcnR1YWwgYm9vbCByZXBseShTVkNYUFJUICphSGFuZGxlKTsKCiAg ICAgICAgIAogICAgICAgICAKCgoKCiAgICAgICAgdmlydHVhbCBib29sIHJlY2VpdmUoU1ZDWFBS VCAqYUhhbmRsZSk7CgogICAgICAgICAKICAgICAgICAgCgoKCgogICAgICAgIHZpcnR1YWwgdm9p ZCByZXBseUVycm9yKFNWQ1hQUlQgKmFIYW5kbGUpOwoKICAgICAgICAgCiAgICAgICAgIAoKCgoK CiAgICAgICAgdmlydHVhbCBib29sIGVuY29kZShYRFIgKnBYRFIpID0gMDsKCiAgICAgICAgIAog ICAgICAgICAKCgoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBkZWNvZGUoWERSICpwWERSKSA9IDA7 CgogICAgICAgCiAgICAgICAgIAogICAgICAgICAKCgoKICAgICAgICB2b2lkIHhkckNoYXIoWERS ICpwWERSLCAgICBzaWduZWQgY2hhciAgJmFDaGFyKTsKICAgICAgICAKICAgICAgICAgCgoKICAg ICAgICAKICAgICAgICB2b2lkIHhkclVDaGFyKFhEUiAqcFhEUiwgICB1bnNpZ25lZCBjaGFyICAm YUNoYXIpOwogICAgICAgIAogICAgICAgICAKCgogICAgICAgCiAgICAgICAgdm9pZCB4ZHJCb29s KFhEUiAqcFhEUiwgICAgYm9vbCAgICAgICAgICAgJmFCb29sKTsKICAgICAgICAKICAgICAgICAg CgoKCiAgICAgICAgdm9pZCB4ZHJEb3VibGUoWERSICpwWERSLCAgZG91YmxlICAgICAgICAgJmFE b3VibGUpOwogICAgICAgIAogICAgICAgIAogICAgICAgICAKCgoKICAgICAgICB2b2lkIHhkckZs b2F0KFhEUiAqcFhEUiwgICBmbG9hdCAgICAgICAgICAmYUZsb2F0KTsKICAgICAgICAKICAgICAg ICAgCgoKICAgICAgIAogICAgICAgIHZvaWQgeGRyU2hvcnQoWERSICpwWERSLCAgIHNob3J0ICAg ICAgICAgICZhU2hvcnQpOwogICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgICAgIAogICAg ICAgIHZvaWQgeGRyVVNob3J0KFhEUiAqcFhEUiwgIHVuc2lnbmVkIHNob3J0ICZhVVMpOyAgICAg ICAKICAgICAgICAKICAgICAgICAgCgoKICAgICAgIAogICAgICAgIHZvaWQgeGRySW50ZWdlcihY RFIgKnBYRFIsIGludCAgICAgICAgICAgICZhSW50KTsKICAgICAgICAKICAgICAgICAKICAgICAg ICAgCgoKICAgICAgIAogICAgICAgIHZvaWQgeGRyVUludChYRFIgKnBYRFIsICAgIHVuc2lnbmVk IGludCAgICZhVUludCk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgIAoKCiAgICAgICAKICAg ICAgICB2b2lkIHhkckxvbmcoWERSICpwWERSLCAgICBsb25nICAgICAgICAgICAmYUxvbmcpOwog ICAgICAgIAogICAgICAgIAogICAgICAgICAKCgogICAgICAgCiAgICAgICAgdm9pZCB4ZHJVTG9u ZyhYRFIgKnBYRFIsICAgdW5zaWduZWQgbG9uZyAgJmFVTCk7CiAgICAgICAgCiAgICAgICAgCiAg ICAgICAgIAoKCiAgICAgICAKICAgICAgICB2b2lkIHhkclZvaWQoWERSICpwWERSKTsKICAgICAg ICAKICAgICAgICAgCgoKICAgICAgIAogICAgICAgIHZvaWQgeGRySVN0cmluZyhYRFIgKnBYRFIs IElTdHJpbmcgICAgICAgICZhU3RyaW5nKTsKICAgICAgICAKICAgICAgICAgCgoKICAgICAgIAog ICAgICAgIHZvaWQgeGRySURhdGUoWERSICpwWERSLCAgIElEYXRlICAgICAgICAgICZhRGF0ZSk7 CiAgICAgICAgCiAgICAgICAgIAoKCiAgICAgICAKICAgICAgICB2b2lkIHhkcklUaW1lKFhEUiAq cFhEUiwgICBJVGltZSAgICAgICAgICAmYVRpbWUpOwogICAgICAgIAogICAgICAgICAKCgogICAg ICAgCiAgICAgICAgdm9pZCB4ZHJCeXRlcyhYRFIgKnBYRFIsICAgY2hhciAqKnBwY2hCdWZmZXIs IHVuc2lnbmVkIGludCAmcGlMZW4pOwoKICAgICAgICAgCgoKCiAgICAgICAKICAgICAgICBJU3Ry aW5nIGRlY3J5cHQoY29uc3QgY2hhciAqYUNpcGhlcnRleHQpIGNvbnN0OwoKICAgICAgICAgCgoK CiAgICAgICAKICAgICAgICBJU3RyaW5nIGVuY3J5cHQoY29uc3QgY2hhciogcHN6UGxhaW50ZXh0 KSBjb25zdDsKCiAgICBwcml2YXRlOiAgICAKCiAgICAgICAgIAogICAgICAgICAKCgoKCgogICAg ICAgIHN0YXRpYyBJUHJpdmF0ZVJlc291cmNlKiBnZXRSUENSZXNvdXJjZSgpOwogICAgICAgIAog ICAgICAgICAKICAgICAgICBzdGF0aWMgSVByaXZhdGVSZXNvdXJjZSogcnBjUmVzb3VyY2U7CiAg ICAgICAgCgoKICAgICAgIAogICAgfTsKICAgIAogICAgIAogICAgY2xhc3MgVFNGV05ldEV4Y2Vw dGlvbiA6IHB1YmxpYyBJRXhjZXB0aW9uIHsKICAgIHB1YmxpYzoKCiAgICAgICAgIAogICAgICAg IFRTRldOZXRFeGNlcHRpb24oY29uc3QgWERSICphU3RyZWFtLCBjb25zdCBjaGFyICphRnVuY3Rp b25OYW1lKTsKCiAgICAgICAgIAogICAgICAgIH5UU0ZXTmV0RXhjZXB0aW9uKCk7CgogICAgICAg ICAKICAgICAgICBjb25zdCBjaGFyICpuYW1lKHZvaWQpIGNvbnN0OwoKICAgIH07CiAgICAKCgog CiAKIAogCiAKIyAyMSAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0RhdGFTZXQuaHBw IiAyCgogICAgCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV1JlYWRXcml0ZUxv Y2suaHBwIiAxCiAKIAogCiAKIAoKCiAgICAKCiAgICAgCiAgICAKICAgICAgICAKICAgIAoKICAg ICAKICAgIAoKICAgICAKICAgIAogICAgCiAgICAKCiAgICAgCiAgICBjbGFzcyBUU0ZXUmVhZFdy aXRlTG9jayB7CiAgICBwdWJsaWM6CiAgICAKICAgICAgICAgCgoKICAgICAgICB+VFNGV1JlYWRX cml0ZUxvY2soKTsKCiAgICAgICAgIAoKCiAgICAgICAgc3RhdGljIFRTRldSZWFkV3JpdGVMb2Nr ICpnZXRJbnN0YW5jZShjb25zdCB2b2lkICphTG9ja2VkUmVzb3VyY2UpOwogICAgICAgIAogICAg ICAgICAKCgogICAgICAgIHZvaWQgcmVsZWFzZUluc3RhbmNlKHZvaWQpOwogICAgICAgIAogICAg ICAgICAKCgogICAgICAgIHZvaWQgbG9ja0ZvclJlYWQodm9pZCk7CgogICAgICAgICAKCgogICAg ICAgIHZvaWQgbG9ja0ZvcldyaXRlKHZvaWQpOwoKICAgICAgICAgCgoKICAgICAgICB2b2lkIHJl bG9ja0ZvcldyaXRlKHZvaWQpOwoKICAgICAgICAgCgoKICAgICAgICB2b2lkIHVubG9jayh2b2lk KTsKCiAgICAgICAgIAoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBjb25zdCAma2V5KHZvaWQpIGNv bnN0IHsKCiAgICAgICAgICAgIHJldHVybih0aGlzLT50aGVMb2NrZWRSZXNvdXJjZSk7CiAgICAg ICAgfQogICAgICAgIAogICAgcHJpdmF0ZToKCiAgICAgICAgIAoKCiAgICAgICAgVFNGV1JlYWRX cml0ZUxvY2sodW5zaWduZWQgbG9uZyBhTG9ja2VkUmVzb3VyY2UgPSAwKTsKCiAgICAgICAgIAog ICAgICAgIAoKCiAgICAgICAgICAgIHB0aHJlYWRfcndsb2NrX3QgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZUxvY2s7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgdW5zaWduZWQg bG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUxvY2tlZFJlc291 cmNlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGVSZWZDb3VudGVyOwoKICAgICAgICAgCiAgICAgICAgc3RhdGljIElQcml2YXRl UmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVBvb2xSZXNvdXJjZTsKICAg ICAgICBzdGF0aWMgSUtleVNldDxUU0ZXUmVhZFdyaXRlTG9jayAqLCB1bnNpZ25lZCBsb25nPiAg dGhlUG9vbDsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlSW5pdGlhbFBvb2xTaXplOwogICAgfTsKCiAgICBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBjb25zdCAma2V5KFRTRldSZWFkV3JpdGVMb2NrIGNvbnN0ICphRWxlbWVudCkgewoK ICAgICAgICByZXR1cm4oYUVsZW1lbnQtPmtleSgpKTsKICAgIH0KCiAgICBpbmxpbmUgdW5zaWdu ZWQgbG9uZyBjb25zdCAma2V5KFRTRldSZWFkV3JpdGVMb2NrIGNvbnN0ICZhRWxlbWVudCkgewoK ICAgICAgICByZXR1cm4oYUVsZW1lbnQua2V5KCkpOwogICAgfQoKCgoKIAogCiAKIAogCiMgMjIg Ii9ob21lL3hodTYwMzEvdHNmdy9JbmNsdWRlL1RTRldEYXRhU2V0LmhwcCIgMgoKICAgIAojIDEg Ii9ob21lL3hodTYwMzEvdHNmdy9JbmNsdWRlL1RTRldCeXRlQXJyYXkuaHBwIiAxCiAKIAogCiAK IAoKICAgIAoKICAgICAKICAgIAoKICAgICAKICAgICAKCgoKCgoKCgogICAgY2xhc3MgVFNGV0J5 dGVBcnJheSB7CiAgICBwdWJsaWM6CgogICAgICAgICAKICAgICAgICBUU0ZXQnl0ZUFycmF5KCk7 CiAgICAgICAgVFNGV0J5dGVBcnJheShjb25zdCBJU3RyaW5nICZhU3RyaW5nKTsKICAgICAgICBU U0ZXQnl0ZUFycmF5KGNvbnN0IGNoYXIgKmFTdHJpbmcpOwogICAgICAgIFRTRldCeXRlQXJyYXko Y29uc3Qgdm9pZCAqYUJ1ZmZlciwgdW5zaWduZWQgYUxlbik7CgogICAgICAgICAKICAgICAgICBU U0ZXQnl0ZUFycmF5IG9wZXJhdG9yICsoY29uc3QgVFNGV0J5dGVBcnJheSAmYVJlZikgICAgY29u c3Q7CiAgICAgICAgVFNGV0J5dGVBcnJheSBvcGVyYXRvciArKGNvbnN0IGNoYXIgICAgICAgICAg KmFTdHJpbmcpIGNvbnN0OwogICAgICAgIFRTRldCeXRlQXJyYXkgb3BlcmF0b3IgKyhjb25zdCBJ U3RyaW5nICAgICAgICZhU3RyaW5nKSBjb25zdDsKCiAgICAgICAgIAogICAgICAgIFRTRldCeXRl QXJyYXkgJm9wZXJhdG9yICs9KGNvbnN0IFRTRldCeXRlQXJyYXkgJmFTdHJpbmcpOwogICAgICAg IFRTRldCeXRlQXJyYXkgJm9wZXJhdG9yICs9KGNvbnN0IElTdHJpbmcmIGFTdHJpbmcpOwogICAg ICAgIFRTRldCeXRlQXJyYXkgJm9wZXJhdG9yICs9KGNvbnN0IGNoYXIqIGFTdHJpbmcpOwoKICAg ICAgICAgCiAgICAgICAgVFNGV0J5dGVBcnJheSAmIG9wZXJhdG9yPShjb25zdCBUU0ZXQnl0ZUFy cmF5ICZhUmVmKTsKICAgICAgICBUU0ZXQnl0ZUFycmF5ICYgb3BlcmF0b3I9KGNvbnN0IElTdHJp bmcgICAgICAgJmFTdHJpbmcpOwogICAgICAgIFRTRldCeXRlQXJyYXkgJiBvcGVyYXRvcj0oY29u c3QgY2hhciAgICAgICAgICAqYVN0cmluZyk7CgogICAgICAgICAKICAgICAgICBvcGVyYXRvciBJ U3RyaW5nKCkgICAgICAgICBjb25zdCB7IHJldHVybih0aGlzLT50aGVCeXRlQXJyYXkpOyAgICAg ICAgICAgICAgICAgIH0KICAgICAgICBvcGVyYXRvciBJU3RyaW5nJigpICAgICAgICAgICAgICB7 IHJldHVybih0aGlzLT50aGVCeXRlQXJyYXkpOyAgICAgICAgICAgICAgICAgIH0KICAgICAgICBv cGVyYXRvciBjaGFyICooKSAgICAgICAgICBjb25zdCB7IHJldHVybigoY2hhciAqKXRoaXMtPnRo ZUJ5dGVBcnJheSk7ICAgICAgICAgIH0KICAgICAgICBvcGVyYXRvciBzaWduZWQgY2hhciAqKCkg ICBjb25zdCB7IHJldHVybigoc2lnbmVkIGNoYXIgKil0aGlzLT50aGVCeXRlQXJyYXkpOyAgIH0K ICAgICAgICBvcGVyYXRvciB1bnNpZ25lZCBjaGFyICooKSBjb25zdCB7IHJldHVybigodW5zaWdu ZWQgY2hhciAqKXRoaXMtPnRoZUJ5dGVBcnJheSk7IH0KCiAgICAgICAgIAogICAgICAgIHVuc2ln bmVkIGxlbmd0aCh2b2lkKSBjb25zdDsKICAgICAgICB1bnNpZ25lZCBzaXplKHZvaWQpICAgY29u c3Q7CgogICAgcHJpdmF0ZToKCiAgICAgICAgIAogICAgICAgIElTdHJpbmcgICAgICAgICAgICAg ICAgICAgdGhlQnl0ZUFycmF5OwoKICAgIH07CgoKCiAKIAogCiAKIAojIDIzICIvaG9tZS94aHU2 MDMxL3RzZncvSW5jbHVkZS9UU0ZXRGF0YVNldC5ocHAiIDIKCgogICAgIAogICAgY2xhc3MgVFNG V0RhdGFDb250YWluZXI7CiAgICBjbGFzcyBUU0ZXRGF0YUFycmF5OwogICAgY2xhc3MgVFNGV0Rh dGFJdGVtOwoKICAgICAKICAgICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgIGNsYXNzIFRT RldEYXRhSXRlbSA6IHB1YmxpYyBUU0ZXTmV0QmFzZU9iamVjdCB7CiAgICBwdWJsaWM6CgogICAg ICAgICAKCgogICAgICAgIGVudW0gRGF0YVR5cGUgewogICAgICAgICAgICB1bmtub3duRGF0YVR5 cGUgICAgICAgPSAwLAogICAgICAgICAgICBzaWduZWRDaGFyLAogICAgICAgICAgICB1bnNpZ25l ZENoYXIsCiAgICAgICAgICAgIHNpZ25lZFNob3J0LAogICAgICAgICAgICB1bnNpZ25lZFNob3J0 LAogICAgICAgICAgICBzaWduZWRJbnRlZ2VyLAogICAgICAgICAgICB1bnNpZ25lZEludGVnZXIs CiAgICAgICAgICAgIHNpZ25lZExvbmcsCiAgICAgICAgICAgIHVuc2lnbmVkTG9uZywKICAgICAg ICAgICAgc2luZ2xlRmxvYXQsCiAgICAgICAgICAgIGRvdWJsZUZsb2F0LAogICAgICAgICAgICBz dHJpbmcsCiAgICAgICAgICAgIGRhdGUsCiAgICAgICAgICAgIHRpbWUsCiAgICAgICAgICAgIGNv bXBvdW5kLAogICAgICAgICAgICBhcnJheSwKICAgICAgICAgICAgYm9vbGVhbiwKICAgICAgICAg ICAgYnl0ZUFycmF5CiAgICAgICAgfTsKCiAgICAgICAgIAoKCiAgICAgICAgZW51bSBBY2Nlc3NN b2RlIHsKICAgICAgICAgICAgcHVibGljQWNjZXNzID0gMCwKICAgICAgICAgICAgcHJpdmF0ZUFj Y2VzcwogICAgICAgIH07CgogICAgICAgICAKCgogICAgICAgIGVudW0gUmVhZFdyaXRlTW9kZSB7 CiAgICAgICAgICAgIHJlYWRPbmx5ID0gMCwKICAgICAgICAgICAgd3JpdGVhYmxlCiAgICAgICAg fTsKCiAgICAgICAgIAoKCgoKCgoKCgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbShjb25zdCBJ U3RyaW5nICZhTmFtZSA9ICIiLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIEFjY2Vz c01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAgICAgICAgICAg ICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0gcmVhZE9ubHkp OwoKICAgICAgICAgCgoKCgoKCgoKCgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbShjb25zdCBl bnVtIERhdGFUeXBlICZhVHlwZSwgICAgY29uc3QgSVN0cmluZyAmYU5hbWUsCiAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGVudW0gQWNjZXNzTW9kZSAgICAmYUFjY2VzTW9kZSAgICAgPSBwdWJs aWNBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0gUmVhZFdyaXRlTW9kZSAm YVJlYWRXcml0ZU1vZGUgPSByZWFkT25seSk7CgogICAgICAgICAKCgoKCgoKCgoKCgoKCgoKICAg ICAgICBUU0ZXRGF0YUl0ZW0oY29uc3QgY2hhciAmYUNoYXIsICAgICAgICAgICAgIGNvbnN0IElT dHJpbmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIEFjY2Vzc01vZGUg ICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICBj b25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0gcmVhZE9ubHkpOwoKICAg ICAgICAgCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVtKGNvbnN0IHVuc2lnbmVk IGNoYXIgJmFDaGFyLCAgICBjb25zdCBJU3RyaW5nICZhTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZW51bSBBY2Nlc3NNb2RlICAgICZhQWNjZXNNb2RlICAgICA9IHB1YmxpY0FjY2Vz cywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBSZWFkV3JpdGVNb2RlICZhUmVhZFdy aXRlTW9kZSA9IHJlYWRPbmx5KTsKCiAgICAgICAgIAoKCgoKCgoKCgoKCgoKCgogICAgICAgIFRT RldEYXRhSXRlbShjb25zdCBzaG9ydCAmYVNob3J0LCAgICAgICAgICAgY29uc3QgSVN0cmluZyAm YU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0gQWNjZXNzTW9kZSAgICAmYUFj Y2VzTW9kZSAgICAgPSBwdWJsaWNBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVu dW0gUmVhZFdyaXRlTW9kZSAmYVJlYWRXcml0ZU1vZGUgPSByZWFkT25seSk7CgogICAgICAgICAK CgoKCgoKCgoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0oY29uc3QgdW5zaWduZWQgc2hvcnQg JmFTaG9ydCwgIGNvbnN0IElTdHJpbmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBlbnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAg ICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2Rl ID0gcmVhZE9ubHkpOwoKICAgICAgICAgCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJ dGVtKGNvbnN0IGludCAmYUludGVnZXIsICAgICAgICAgICBjb25zdCBJU3RyaW5nICZhTmFtZSwK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBBY2Nlc3NNb2RlICAgICZhQWNjZXNNb2Rl ICAgICA9IHB1YmxpY0FjY2VzcywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBSZWFk V3JpdGVNb2RlICZhUmVhZFdyaXRlTW9kZSA9IHJlYWRPbmx5KTsKCiAgICAgICAgIAoKCgoKCgoK CgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbShjb25zdCB1bnNpZ25lZCBpbnQgJmFJbnRlZ2Vy LCAgY29uc3QgSVN0cmluZyAmYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0g QWNjZXNzTW9kZSAgICAmYUFjY2VzTW9kZSAgICAgPSBwdWJsaWNBY2Nlc3MsCiAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGVudW0gUmVhZFdyaXRlTW9kZSAmYVJlYWRXcml0ZU1vZGUgPSByZWFk T25seSk7CgogICAgICAgICAKCgoKCgoKCgoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0oY29u c3QgbG9uZyAmYUxvbmcsICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFOYW1lLAogICAgICAg ICAgICAgICAgICAgICBjb25zdCBlbnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0g cHVibGljQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1v ZGUgJmFSZWFkV3JpdGVNb2RlID0gcmVhZE9ubHkpOwoKICAgICAgICAgCgoKCgoKCgoKCgoKCgoK CiAgICAgICAgVFNGV0RhdGFJdGVtKGNvbnN0IHVuc2lnbmVkIGxvbmcgJmFMb25nLCAgICBjb25z dCBJU3RyaW5nICZhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBBY2Nlc3NN b2RlICAgICZhQWNjZXNNb2RlICAgICA9IHB1YmxpY0FjY2VzcywKICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZW51bSBSZWFkV3JpdGVNb2RlICZhUmVhZFdyaXRlTW9kZSA9IHJlYWRPbmx5KTsK CiAgICAgICAgIAoKCgoKCgoKCgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbShjb25zdCBJU3Ry aW5nICZhU3RyaW5nLCAgICAgICAgY29uc3QgSVN0cmluZyAmYU5hbWUsCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGVudW0gQWNjZXNzTW9kZSAgICAmYUFjY2VzTW9kZSAgICAgPSBwdWJsaWNB Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0gUmVhZFdyaXRlTW9kZSAmYVJl YWRXcml0ZU1vZGUgPSByZWFkT25seSk7CgogICAgICAgICAKCgoKCgoKCgoKCgoKCgoKICAgICAg ICBUU0ZXRGF0YUl0ZW0oY29uc3QgSURhdGUgJmFEYXRlLCAgICAgICAgICAgIGNvbnN0IElTdHJp bmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIEFjY2Vzc01vZGUgICAg JmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICBjb25z dCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0gcmVhZE9ubHkpOwoKICAgICAg ICAgCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVtKGNvbnN0IElUaW1lICZhVGlt ZSwgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZhTmFtZSwKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZW51bSBBY2Nlc3NNb2RlICAgICZhQWNjZXNNb2RlICAgICA9IHB1YmxpY0FjY2VzcywK ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBSZWFkV3JpdGVNb2RlICZhUmVhZFdyaXRl TW9kZSA9IHJlYWRPbmx5KTsKCiAgICAgICAgIAoKCgoKCgoKCgoKCgoKCgogICAgICAgIFRTRldE YXRhSXRlbShjb25zdCBUU0ZXRGF0YUNvbnRhaW5lciAmYUNuciwgY29uc3QgSVN0cmluZyAmYU5h bWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0gQWNjZXNzTW9kZSAgICAmYUFjY2Vz TW9kZSAgICAgPSBwdWJsaWNBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0g UmVhZFdyaXRlTW9kZSAmYVJlYWRXcml0ZU1vZGUgPSByZWFkT25seSk7CgogICAgICAgICAKCgoK CgoKCgoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0oY29uc3QgVFNGV0RhdGFBcnJheSAmYUFy cmF5LCAgIGNvbnN0IElTdHJpbmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBl bnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAg ICAgICAgICAgICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0g cmVhZE9ubHkpOwoKICAgICAgICAgCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVt KGJvb2wgYUJvb2xlYW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFOYW1l LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01v ZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIFJl YWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0gcmVhZE9ubHkpOwoKICAgICAgICAgCgoKCgoK CgoKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVtKGNvbnN0IGNoYXIgKmFTdHJpbmcsCiAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAg ICBjb25zdCBlbnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNz LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3Jp dGVNb2RlID0gcmVhZE9ubHkpOwoKICAgICAgICAgCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgVFNG V0RhdGFJdGVtKGNvbnN0IFRTRldCeXRlQXJyYXkgJmFCeXRlQXJyYXksCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IElTdHJpbmcgJmFOYW1lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBl bnVtIEFjY2Vzc01vZGUgICAgJmFBY2Nlc01vZGUgICAgID0gcHVibGljQWNjZXNzLAogICAgICAg ICAgICAgICAgICAgICBjb25zdCBlbnVtIFJlYWRXcml0ZU1vZGUgJmFSZWFkV3JpdGVNb2RlID0g cmVhZE9ubHkpOwoKICAgICAgICAgCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0oY29uc3QgVFNGV0Rh dGFJdGVtICZhUmVmZXJlbmNlKTsKCiAgICAgICAgIAoKCiAgICAgICAgflRTRldEYXRhSXRlbSgp OwoKICAgICAgICAgCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShjb25zdCBU U0ZXRGF0YUl0ZW0gJmFJdGVtKTsKCiAgICAgICAgIAoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVt ICZvcGVyYXRvcj0oY29uc3QgY2hhciAmYUNoYXIpOwoKICAgICAgICAgCgoKCgoKICAgICAgICBU U0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShjb25zdCB1bnNpZ25lZCBjaGFyICZhQ2hhcik7CgogICAg ICAgICAKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3I9KGNvbnN0IHNob3J0ICZh U2hvcnQpOwoKICAgICAgICAgCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShj b25zdCB1bnNpZ25lZCBzaG9ydCAmYVNob3J0KTsKCiAgICAgICAgIAoKCgoKCiAgICAgICAgVFNG V0RhdGFJdGVtICZvcGVyYXRvcj0oY29uc3QgaW50ICZhSW50ZWdlcik7CgogICAgICAgICAKCgoK CgogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3I9KGNvbnN0IHVuc2lnbmVkIGludCAmYUlu dGVnZXIpOwoKICAgICAgICAgCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShj b25zdCBsb25nICZhTG9uZyk7CgogICAgICAgICAKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAm b3BlcmF0b3I9KGNvbnN0IHVuc2lnbmVkIGxvbmcgJmFMb25nKTsKCiAgICAgICAgIAoKCgoKCiAg ICAgICAgVFNGV0RhdGFJdGVtICZvcGVyYXRvcj0oY29uc3QgZmxvYXQgJmFGbG9hdCk7CgogICAg ICAgICAKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3I9KGNvbnN0IGRvdWJsZSAm YURvdWJsZSk7CgogICAgICAgICAKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3I9 KGNvbnN0IElTdHJpbmcgJmFTdHJpbmcpOwoKICAgICAgICAgCgoKCgoKICAgICAgICBUU0ZXRGF0 YUl0ZW0gJm9wZXJhdG9yPShjb25zdCBJRGF0ZSAmYURhdGUpOwoKICAgICAgICAgCgoKCgoKICAg ICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShjb25zdCBJVGltZSAmYVRpbWUpOwoKICAgICAg ICAgCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShjb25zdCBUU0ZXRGF0YUNv bnRhaW5lciAmYUNucik7CgogICAgICAgICAKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmb3Bl cmF0b3I9KGNvbnN0IFRTRldEYXRhQXJyYXkgJmFBcnJheSk7CgogICAgICAgICAKCgoKCgogICAg ICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3I9KGJvb2wgYUJvb2wpOwoKICAgICAgICAgCgoKCgoK ICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yPShjb25zdCBjaGFyICphU3RyaW5nKTsKCiAg ICAgICAgIAoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVtICZvcGVyYXRvcj0oY29uc3QgVFNGV0J5 dGVBcnJheSAmYUJ5dGVBcnJheSk7CgogICAgICAgICAKCgoKCiAgICAgICAgb3BlcmF0b3IgY2hh cigpICAgICAgICAgICBjb25zdCB7IHJldHVybih0aGlzLT5hc0NoYXIoKSk7ICAgICAgfQoKICAg ICAgICAgCgoKCgogICAgICAgIG9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSAgY29uc3QgeyByZXR1 cm4odGhpcy0+YXNVQ2hhcigpKTsgICAgIH0KCiAgICAgICAgIAoKCgoKICAgICAgICBvcGVyYXRv ciBzaG9ydCgpICAgICAgICAgIGNvbnN0IHsgcmV0dXJuKHRoaXMtPmFzU2hvcnQoKSk7ICAgICB9 CgogICAgICAgICAKCgoKCiAgICAgICAgb3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdCB7 IHJldHVybih0aGlzLT5hc1VTaG9ydCgpKTsgICAgfQoKICAgICAgICAgCgoKCgogICAgICAgIG9w ZXJhdG9yIGludCgpICAgICAgICAgICAgY29uc3QgeyByZXR1cm4odGhpcy0+YXNJbnQoKSk7ICAg ICAgIH0KCiAgICAgICAgIAoKCgoKICAgICAgICBvcGVyYXRvciB1bnNpZ25lZCBpbnQoKSAgIGNv bnN0IHsgcmV0dXJuKHRoaXMtPmFzVUludCgpKTsgICAgICB9CgogICAgICAgICAKCgoKCiAgICAg ICAgb3BlcmF0b3IgbG9uZygpICAgICAgICAgICBjb25zdCB7IHJldHVybih0aGlzLT5hc0xvbmco KSk7ICAgICAgfQoKICAgICAgICAgCgoKCgogICAgICAgIG9wZXJhdG9yIHVuc2lnbmVkIGxvbmco KSAgY29uc3QgeyByZXR1cm4odGhpcy0+YXNVTG9uZygpKTsgICAgIH0KCiAgICAgICAgIAoKCgoK ICAgICAgICBvcGVyYXRvciBmbG9hdCgpICAgICAgICAgIGNvbnN0IHsgcmV0dXJuKHRoaXMtPmFz RmxvYXQoKSk7ICAgICB9CgogICAgICAgICAKCgoKCiAgICAgICAgb3BlcmF0b3IgZG91YmxlKCkg ICAgICAgICBjb25zdCB7IHJldHVybih0aGlzLT5hc0RvdWJsZSgpKTsgICAgfQoKICAgICAgICAg CgoKCgogICAgICAgIG9wZXJhdG9yIElTdHJpbmcoKSAgICAgICAgY29uc3QgeyByZXR1cm4odGhp cy0+YXNTdHJpbmcoKSk7ICAgIH0KCiAgICAgICAgIAoKCgoKICAgICAgICBvcGVyYXRvciBJRGF0 ZSgpICAgICAgICAgIGNvbnN0IHsgcmV0dXJuKHRoaXMtPmFzRGF0ZSgpKTsgICAgICB9CgogICAg ICAgICAKCgoKCiAgICAgICAgb3BlcmF0b3IgSVRpbWUoKSAgICAgICAgICBjb25zdCB7IHJldHVy bih0aGlzLT5hc1RpbWUoKSk7ICAgICAgfQogICAgICAgIAogICAgICAgICAKCgoKCiAgICAgICAg b3BlcmF0b3IgVFNGV0J5dGVBcnJheSgpICBjb25zdCB7IHJldHVybih0aGlzLT5hc0J5dGVBcnJh eSgpKTsgfQogICAgICAgIAoKICAgICAgICAgCgoKCgoKCgoKCgoKCiAgICAgICAgY2hhciAgICAg ICAgICAgICAgIGFzQ2hhcih2b2lkKSAgICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoK CiAgICAgICAgdW5zaWduZWQgY2hhciAgICAgIGFzVUNoYXIodm9pZCkgICAgICBjb25zdDsKCiAg ICAgICAgIAoKCgoKCgoKCgoKCiAgICAgICAgc2hvcnQgICAgICAgICAgICAgIGFzU2hvcnQodm9p ZCkgICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAgICAgICAgdW5zaWduZWQgc2hv cnQgICAgIGFzVVNob3J0KHZvaWQpICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAg ICAgICAgaW50ICAgICAgICAgICAgICAgIGFzSW50KHZvaWQpICAgICAgICBjb25zdDsKCiAgICAg ICAgIAoKCgoKCgoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50ICAgICAgIGFzVUludCh2b2lkKSAg ICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAgICAgICAgbG9uZyAgICAgICAgICAg ICAgIGFzTG9uZyh2b2lkKSAgICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAgICAg ICAgdW5zaWduZWQgbG9uZyAgICAgIGFzVUxvbmcodm9pZCkgICAgICBjb25zdDsKCiAgICAgICAg IAoKCgoKCgoKCgoKCiAgICAgICAgZmxvYXQgICAgICAgICAgICAgIGFzRmxvYXQodm9pZCkgICAg ICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAgICAgICAgZG91YmxlICAgICAgICAgICAg IGFzRG91YmxlKHZvaWQpICAgICBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKICAgICAgICBJU3Ry aW5nICAgICAgICAgICAgYXNTdHJpbmcodm9pZCkgICAgIGNvbnN0OwoJCQoJCSAKCgoKCgoKCgoK ICAgICAgICBJU3RyaW5nICAgICAgICAgICAgYXNTdHJpbmcoY29uc3QgSVN0cmluZyAmYUZvcm1h dCkgICAgIGNvbnN0OwoKCiAgICAgICAgIAoKCgoKCgoKICAgICAgICBJRGF0ZSAgICAgICAgICAg ICAgYXNEYXRlKHZvaWQpICAgICAgIGNvbnN0OwoKICAgICAgICAgCgoKCgoKCgogICAgICAgIElU aW1lICAgICAgICAgICAgICBhc1RpbWUodm9pZCkgICAgICAgY29uc3Q7CgogICAgICAgICAKCgoK CgoKCiAgICAgICAgVFNGV0RhdGFDb250YWluZXIgICphc0NvbnRhaW5lcih2b2lkKSBjb25zdDsK CiAgICAgICAgIAoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUFycmF5ICAgICAgKmFzQXJyYXkodm9p ZCkgICAgIGNvbnN0OwoKICAgICAgICAgCgoKCgoKCgogICAgICAgIGJvb2wgICAgICAgICAgICAg ICAgYXNCb29sZWFuKHZvaWQpICAgICBjb25zdDsKICAgICAgICAKICAgICAgICAgCgoKCgoKCgog ICAgICAgIFRTRldCeXRlQXJyYXkgICAgICAgIGFzQnl0ZUFycmF5KHZvaWQpICAgY29uc3Q7CiAg ICAgICAgCgogICAgICAgICAKCgoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9y W10oY29uc3QgSVN0cmluZyAmYUtleSk7CgogICAgICAgICAKCgoKCgoKCiAgICAgICAgVFNGV0Rh dGFJdGVtICZvcGVyYXRvcltdKGNvbnN0IElTdHJpbmcgJmFLZXkpIGNvbnN0OwoKICAgICAgICAg CgoKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yW10oY29uc3QgY2hhciAgICAq YUtleSk7CgogICAgICAgICAKCgoKCgoKCiAgICAgICAgVFNGV0RhdGFJdGVtICZvcGVyYXRvcltd KGNvbnN0IGNoYXIgICAgKmFLZXkpIGNvbnN0OwoKICAgICAgICAgCgoKCgoKCgoKICAgICAgICBU U0ZXRGF0YUl0ZW0gJm9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBhSW5kZXgpOwoKICAgICAgICAg CgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGFJ bmRleCkgY29uc3Q7CgogICAgICAgICAKCgoKCiAgICAgICAgZW51bSBEYXRhVHlwZSBkYXRhVHlw ZSh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCgoKICAgICAgICBzdGF0aWMgSVN0cmluZyBkYXRh VHlwZUFzU3RyaW5nKGNvbnN0IGVudW0gVFNGV0RhdGFJdGVtOjpEYXRhVHlwZSAmYVR5cGUpOwoK ICAgICAgICAgCgoKCgogICAgICAgIElTdHJpbmcgZGF0YVR5cGVBc1N0cmluZyh2b2lkKSBjb25z dDsKCiAgICAgICAgIAoKCiAgICAgICAgYm9vbCBpc1B1YmxpYyh2b2lkKTsKCiAgICAgICAgIAoK CiAgICAgICAgYm9vbCBpc1ByaXZhdGUodm9pZCk7CgogICAgICAgICAKCgogICAgICAgIGJvb2wg aXNSZWFkT25seSh2b2lkKTsKCiAgICAgICAgIAoKCiAgICAgICAgYm9vbCBpc1dyaXRlYWJsZSh2 b2lkKTsKCiAgICAgICAgIAoKCgoKCgoKICAgICAgICBJQ3Vyc29yICpuZXdDdXJzb3Iodm9pZCkg Y29uc3Q7CgoKICAgICAgICAgCgoKCgoKCgogICAgICAgIFRTRldEYXRhSXRlbSAmZWxlbWVudEF0 KElDdXJzb3IgKmFDdXJzb3IpIGNvbnN0OwoKICAgICAgICAgCgoKCgoKCgogICAgICAgIGJvb2wg Y29udGFpbnNFbGVtZW50V2l0aEtleShjb25zdCBJU3RyaW5nICZhS2V5KSBjb25zdDsKCiAgICAg ICAgIAoKCgoKCgogICAgICAgIElTdHJpbmcgY29uc3QgJmtleSh2b2lkKSBjb25zdCB7CgogICAg ICAgICAgICByZXR1cm4odGhpcy0+dGhlTmFtZSk7CiAgICAgICAgfQoKICAgICAgICAgCgoKCgog ICAgICAgIElTdHJpbmcgbmFtZSh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCiAgICAgICAgdm9p ZCBzZXROYW1lKGNvbnN0IElTdHJpbmcgJmFOYW1lKTsKCiAgICAgICAgIAoKCgoKCgogICAgICAg IGJvb2wgZW5jb2RlKFhEUiAqYVhEUlN0cmVhbSk7CgogICAgICAgICAKCgoKCgoKICAgICAgICBi b29sIGRlY29kZShYRFIgKmFYRFJTdHJlYW0pOwoKICAgICAgICAgCgoKCgoKICAgICAgICBJU3Ry aW5nIGFzRGVidWdTdHJpbmcodm9pZCk7CgogICAgICAgICAKCgogICAgICAgIFRTRldEYXRhSXRl bSBzZWN1cmVDb3B5KHZvaWQpIGNvbnN0OwoJCQoJCWJvb2wgd3JpdGUob3N0cmVhbSAmYVN0cmVh bSwgaW50IGFJbmRlbnQgPSAwKSBjb25zdDsKIAoKICAgIHByaXZhdGU6CgogICAgICAgICAKCgoK CgoKICAgICAgICB2b2lkIGRlbGV0ZU1lbWJlcnModm9pZCk7CgogICAgICAgICAKCgogICAgICAg IHZvaWQgY2xvbmVGcm9tKGNvbnN0IFRTRldEYXRhSXRlbSAmYUl0ZW0pOwoKCiAgICAgICAgIAog ICAgICAgIGVudW0gQWNjZXNzTW9kZSAgICAgICAgICAgdGhlQWNjZXNzTW9kZTsKCiAgICAgICAg IAogICAgICAgIGVudW0gUmVhZFdyaXRlTW9kZSAgICAgICAgdGhlUmVhZFdyaXRlTW9kZTsKCgog ICAgICAgICAKICAgICAgICBJU3RyaW5nICAgICAgICAgICAgICAgICAgIHRoZU5hbWU7CiAgICAg ICAgZW51bSBEYXRhVHlwZSAgICAgICAgICAgICB0aGVEYXRhVHlwZTsKICAgICAgICB1bmlvbiB7 CiAgICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICB0aGVCb29sVmFsdWU7CiAgICAgICAg ICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAg ICAgc2lnbmVkIGNoYXIgICAgICAgICAgIHRoZUNoYXJWYWx1ZTsKICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAgICAgICAgIHRoZVVDaGFyVmFsdWU7CiAgICAgICAgICAgIHNob3J0ICAgICAgICAg ICAgICAgICB0aGVTaG9ydFZhbHVlOwogICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAg dGhlVVNob3J0VmFsdWU7CiAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICB0aGVJbnRW YWx1ZTsKICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgIHRoZVVJbnRWYWx1ZTsKICAg ICAgICAgICAgbG9uZyAgICAgICAgICAgICAgICAgIHRoZUxvbmdWYWx1ZTsKICAgICAgICAgICAg dW5zaWduZWQgbG9uZyAgICAgICAgIHRoZVVMb25nVmFsdWU7CiAgICAgICAgICAgIGZsb2F0ICAg ICAgICAgICAgICAgICB0aGVGbG9hdFZhbHVlOwogICAgICAgICAgICBkb3VibGUgICAgICAgICAg ICAgICAgdGhlRG91YmxlVmFsdWU7CiAgICAgICAgICAgIElTdHJpbmcgICAgICAgICAgICAgICAq dGhlU3RyaW5nVmFsdWU7CiAgICAgICAgICAgIElEYXRlICAgICAgICAgICAgICAgICAqdGhlRGF0 ZVZhbHVlOwogICAgICAgICAgICBJVGltZSAgICAgICAgICAgICAgICAgKnRoZVRpbWVWYWx1ZTsK ICAgICAgICAgICAgVFNGV0RhdGFDb250YWluZXIgICAgICp0aGVDb250YWluZXJWYWx1ZTsKICAg ICAgICAgICAgVFNGV0RhdGFBcnJheSAgICAgICAgICp0aGVBcnJheVZhbHVlOwogICAgICAgICAg ICBUU0ZXQnl0ZUFycmF5ICAgICAgICAgKnRoZUJ5dGVBcnJheVZhbHVlOyAgICAgCiAgICAgICAg fSB0aGVEYXRhQXJlYTsKICAgIH07CgogICAgIAogICAgaW5saW5lIElTdHJpbmcgY29uc3QgJmtl eShUU0ZXRGF0YUl0ZW0gY29uc3QgJmFFbGVtZW50KSB7CgogICAgICAgIHJldHVybihhRWxlbWVu dC5rZXkoKSk7CiAgICB9CgogICAgaW5saW5lIElTdHJpbmcgY29uc3QgJmtleShUU0ZXRGF0YUl0 ZW0gY29uc3QgKmFFbGVtZW50KSB7CgogICAgICAgIHJldHVybihhRWxlbWVudC0+a2V5KCkpOwog ICAgfQoKICAgICAKICAgICAKCgoKCgoKCiAgICBjbGFzcyBUU0ZXRGF0YUNvbnRhaW5lciA6IHB1 YmxpYyBUU0ZXTmV0QmFzZU9iamVjdCB7CiAgICBwdWJsaWM6CgogICAgICAgICAKCgogICAgICAg IFRTRldEYXRhQ29udGFpbmVyKCk7CgogICAgICAgICAKCgogICAgICAgIFRTRldEYXRhQ29udGFp bmVyKGNvbnN0IFRTRldEYXRhQ29udGFpbmVyICZhUmVmZXJlbmNlKTsKCiAgICAgICAgIAoKCiAg ICAgICAgdmlydHVhbCB+VFNGV0RhdGFDb250YWluZXIoKTsKCiAgICAgICAgIAoKCgoKCgoKCgoK CgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yW10oY29uc3QgSVN0cmluZyAmYUtl eSk7CiAgICAgICAgVFNGV0RhdGFJdGVtICZvcGVyYXRvcltdKGNvbnN0IElTdHJpbmcgJmFLZXkp IGNvbnN0OwogICAgICAgIFRTRldEYXRhSXRlbSAmb3BlcmF0b3JbXShjb25zdCBjaGFyICAgICph S2V5KTsKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yW10oY29uc3QgY2hhciAgICAqYUtl eSkgY29uc3Q7CgogICAgICAgICAKCgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZF bGVtZW50cyh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCgoKCgoKCgogICAgICAg IElDdXJzb3IgKm5ld0N1cnNvcih2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCgoKICAgICAgICBU U0ZXRGF0YUl0ZW0gJmVsZW1lbnRBdChJQ3Vyc29yICphQ3Vyc29yKSBjb25zdDsKCiAgICAgICAg IAoKCgoKCiAgICAgICAgdm9pZCByZW1vdmUoY29uc3QgSVN0cmluZyAmYUtleSk7CgogICAgICAg ICAKCgoKCgogICAgICAgIGJvb2wgaXNWYWxpZChjb25zdCBJU3RyaW5nICZhS2V5KSBjb25zdDsK CiAgICAgICAgIAoKCiAgICAgICAgYm9vbCBpc1ByaXZhdGUoY29uc3QgSVN0cmluZyAmYUtleSkg Y29uc3Q7CgogICAgICAgICAKCgogICAgICAgIGJvb2wgaXNQdWJsaWMoY29uc3QgSVN0cmluZyAm YUtleSkgY29uc3Q7CgogICAgICAgICAKCgoKCgoKICAgICAgICBib29sIGVuY29kZShYRFIgKmFY RFJTdHJlYW0pOwoKICAgICAgICAgCgoKCgoKCiAgICAgICAgYm9vbCBkZWNvZGUoWERSICphWERS U3RyZWFtKTsKCiAgICAgICAgIAoKCgoKCgogICAgICAgIElTdHJpbmcgYXNEZWJ1Z1N0cmluZyh2 b2lkKTsKCiAgICAgICAgIAoKCiAgICAgICAgVFNGV0RhdGFJdGVtIHNlY3VyZUNvcHkodm9pZCkg Y29uc3Q7CgkJCgkJYm9vbCB3cml0ZShvc3RyZWFtICZhU3RyZWFtLCBpbnQgYUluZGVudCA9IDAp IGNvbnN0OwogCgoJIAkgCgoKCgkJYm9vbCByZWFkRmlsZShjb25zdCBJU3RyaW5nICZhS2V5LCBj b25zdCBJU3RyaW5nICZhRmlsZW5hbWUpOwoKICAgIHByaXZhdGU6CgogICAgICAgICAKICAgICAg ICBJS2V5U2V0PFRTRldEYXRhSXRlbSAqLCBJU3RyaW5nPiAgICAgdGhlQ29udGFpbmVyOwogICAg fTsKCiAgICAgCiAgICBjbGFzcyBUU0ZXRGF0YUFycmF5SXRlbSA6IHB1YmxpYyBUU0ZXTmV0QmFz ZU9iamVjdCB7CiAgICBwdWJsaWM6CgogICAgICAgICAKICAgICAgICBUU0ZXRGF0YUFycmF5SXRl bSgpOwogICAgICAgIFRTRldEYXRhQXJyYXlJdGVtKHVuc2lnbmVkIGxvbmcgYUluZGV4LCBUU0ZX RGF0YUl0ZW0gKmFJdGVtKTsKCiAgICAgICAgIAogICAgICAgIH5UU0ZXRGF0YUFycmF5SXRlbSgp OwoKICAgICAgICAgCiAgICAgICAgVFNGV0RhdGFBcnJheUl0ZW0oY29uc3QgVFNGV0RhdGFBcnJh eUl0ZW0gJmFSZWZlcmVuY2UpOwoKICAgICAgICAgCiAgICAgICAgdW5zaWduZWQgbG9uZyBjb25z dCAma2V5KHZvaWQpIGNvbnN0IHsKCiAgICAgICAgICAgIHJldHVybih0aGlzLT50aGVJbmRleCk7 CiAgICAgICAgfQoKICAgICAgICAgCiAgICAgICAgVFNGV0RhdGFJdGVtICZpdGVtKHZvaWQpIGNv bnN0OwoKICAgICAgICAgCiAgICAgICAgVFNGV0RhdGFBcnJheUl0ZW0gJm9wZXJhdG9yPShjb25z dCBUU0ZXRGF0YUl0ZW0gJmFJdGVtKTsKICAgICAgICBUU0ZXRGF0YUFycmF5SXRlbSAmb3BlcmF0 b3I9KFRTRldEYXRhSXRlbSAqYUl0ZW0pOwogICAgICAgIFRTRldEYXRhQXJyYXlJdGVtICZvcGVy YXRvcj0oY29uc3QgVFNGV0RhdGFBcnJheUl0ZW0gJmFJdGVtKTsKCiAgICAgICAgYm9vbCBlbmNv ZGUoWERSICphWERSU3RyZWFtKTsKICAgICAgICBib29sIGRlY29kZShYRFIgKmFYRFJTdHJlYW0p OwoJCQoJCWJvb2wgd3JpdGUob3N0cmVhbSAmYVN0cmVhbSwgaW50IGFJbmRlbnQgPSAwKSBjb25z dDsKIAoKICAgIHByaXZhdGU6CgogICAgICAgICAKICAgICAgICB1bnNpZ25lZCBsb25nICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoZUluZGV4OwogICAgICAgIFRTRldEYXRhSXRlbSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnRoZUl0ZW07CiAgICB9OwoKICAgICAKICAgIGlubGlu ZSB1bnNpZ25lZCBsb25nIGNvbnN0ICZrZXkoVFNGV0RhdGFBcnJheUl0ZW0gY29uc3QgJmFFbGVt ZW50KSB7CgogICAgICAgIHJldHVybihhRWxlbWVudC5rZXkoKSk7CiAgICB9CgogICAgaW5saW5l IHVuc2lnbmVkIGxvbmcgY29uc3QgJmtleShUU0ZXRGF0YUFycmF5SXRlbSBjb25zdCAqYUVsZW1l bnQpIHsKCiAgICAgICAgcmV0dXJuKGFFbGVtZW50LT5rZXkoKSk7CiAgICB9CgoKICAgICAKICAg ICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgIGNsYXNzIFRTRldEYXRhQXJyYXkgOiBwdWJsaWMg VFNGV05ldEJhc2VPYmplY3QgewogICAgcHVibGljOgoKICAgICAgICAgCgoKICAgICAgICBUU0ZX RGF0YUFycmF5KCk7CgogICAgICAgICAKCgogICAgICAgIFRTRldEYXRhQXJyYXkoY29uc3QgVFNG V0RhdGFBcnJheSAmYVJlZmVyZW5jZSk7CgogICAgICAgICAKCgogICAgICAgIH5UU0ZXRGF0YUFy cmF5KCk7CgogICAgICAgICAKCgoKCgoKICAgICAgICBUU0ZXRGF0YUl0ZW0gJm9wZXJhdG9yW10o dW5zaWduZWQgbG9uZyBhSW5kZXgpOwoKICAgICAgICAgCgoKCgoKCgogICAgICAgIFRTRldEYXRh SXRlbSAmb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGFJbmRleCkgY29uc3Q7CgogICAgICAgICAK CgoKCgoKCgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZFbGVtZW50cyh2b2lkKSBj b25zdDsKCiAgICAgICAgIAoKCgoKCgoKCgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBudW1iZXJP ZlZhbGlkRWxlbWVudHModm9pZCkgY29uc3Q7CgogICAgICAgICAKCgoKCiAgICAgICAgdm9pZCBy ZW1vdmUodW5zaWduZWQgbG9uZyBhSW5kZXgpOwoJCQoJCSAKCgoKCiAgICAgICAgdm9pZCByZW1v dmVBbGwoKTsKCiAgICAgICAgIAoKCiAgICAgICAgYm9vbCBpc1ZhbGlkKHVuc2lnbmVkIGxvbmcg YUluZGV4KSBjb25zdDsKCiAgICAgICAgIAoKCgoKCgoKICAgICAgICBib29sIGVuY29kZShYRFIg KmFYRFJTdHJlYW0pOwoKICAgICAgICAgCgoKCgoKCgogICAgICAgIGJvb2wgZGVjb2RlKFhEUiAq YVhEUlN0cmVhbSk7CgogICAgICAgICAKICAgICAgICBJU3RyaW5nIGFzRGVidWdTdHJpbmcodm9p ZCk7CgogICAgICAgICAKCgogICAgICAgIFRTRldEYXRhSXRlbSBzZWN1cmVDb3B5KHZvaWQpIGNv bnN0OwoJCQoJCWJvb2wgd3JpdGUob3N0cmVhbSAmYVN0cmVhbSwgaW50IGFJbmRlbnQgPSAwKSBj b25zdDsKIAoKICAgIHByaXZhdGU6CgogICAgICAgICAKCgogICAgICAgIHZvaWQgcmVjYWxjTWF4 SW5kZXgodm9pZCk7CgogICAgICAgICAKICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlTWF4SW5kZXg7CiAgICAgICAgSUtleVNldDxUU0ZXRGF0 YUFycmF5SXRlbSAqLCB1bnNpZ25lZCBsb25nPiAgIHRoZUFycmF5OwogICAgfTsKCiAgICAgCiAg ICBjbGFzcyBUU0ZXQ2xpZW50UmVxdWVzdCA6IHB1YmxpYyBUU0ZXTmV0QmFzZU9iamVjdCB7CiAg ICBwdWJsaWM6CgogICAgICAgICAKICAgICAgICBUU0ZXQ2xpZW50UmVxdWVzdChjb25zdCBJU3Ry aW5nICZhTmFtZSwgVFNGV0RhdGFDb250YWluZXIgKmFDb250YWluZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYUNhbGxlckFkZHIgPSAiIik7CgogICAgICAgICAK ICAgICAgICB+VFNGV0NsaWVudFJlcXVlc3QoKTsKCiAgICAgICAgIAogICAgICAgIGJvb2wgZW5j b2RlKFhEUiAqYVhEUlN0cmVhbSk7CiAgICAgICAgYm9vbCBkZWNvZGUoWERSICphWERSU3RyZWFt KTsKCiAgICAgICAgIAogICAgICAgIGNvbnN0IElTdHJpbmcgJnNlcnZpY2VOYW1lKHZvaWQpIGNv bnN0OwoKICAgICAgICAgCiAgICAgICAgY29uc3QgSVN0cmluZyAmY2FsbGVyQWRkcih2b2lkKSBj b25zdDsKCiAgICAgICAgIAogICAgICAgIFRTRldEYXRhQ29udGFpbmVyKiBkYXRhQ29udGFpbmVy KHZvaWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZU1ham9yTnVtYmVyOwogICAgICAgIHVuc2lnbmVk IGxvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVNaW5vck51bWJlcjsKICAg ICAgICBJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlU2Vy dmljZU5hbWU7CiAgICAgICAgSVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZUNhbGxlckFkZHI7CiAgICAgICAgVFNGV0RhdGFDb250YWluZXIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICp0aGVEYXRhQ29udGFpbmVyOwogICAgfTsKCiAgICAgCiAgICBj bGFzcyBUU0ZXUHJvcGVydHlTZXQgOiBwdWJsaWMgVFNGV0RhdGFDb250YWluZXIgewogICAgcHVi bGljOgoKICAgICAgICAgCiAgICAgICAgVFNGV1Byb3BlcnR5U2V0KGNvbnN0IElTdHJpbmcgJmFS ZWdpc3RyeUZpbGUpOwoKICAgICAgICAgCiAgICAgICAgflRTRldQcm9wZXJ0eVNldCgpOwoKICAg ICAgICAgSVN0cmluZyBnZXRGaWxlbmFtZSgpOwoJCSAKCQkgYm9vbCB3cml0ZShvc3RyZWFtICZh U3RyZWFtLCBpbnQgYUluZGVudCA9IDApIGNvbnN0OwogCgogICAgcHJpdmF0ZToKCiAgICAgICAg IAogICAgICAgIHZvaWQgcmVhZEZpbGUodm9pZCk7CiAgICAgICAgdm9pZCB3cml0ZUZpbGUodm9p ZCk7CiAgICAgICAgYm9vbCBjaGVja0ZvckF0dHJpYnV0ZShJU3RyaW5nICZhTGluZSwgY29uc3Qg Y2hhciAqYUF0dHJpYk5hbWUpOwogICAgICAgIElTdHJpbmcgdHJ5VG9FeHBhbmQoY29uc3QgSVN0 cmluZyAmYVNvdXJjZSkgY29uc3Q7CgkJdm9pZCBwYXJzZUFycmF5KGNvbnN0IElTdHJpbmcgJmFT b3VyY2UsIFRTRldEYXRhQXJyYXkgJmFEYXRhQXJyYXkpOwoKCiAgICAgICAgIAogICAgICAgIElT dHJpbmcgICAgICAgICAgdGhlRmlsZU5hbWU7CiAgICB9OwoKICAgICAKICAgIGNsYXNzIFRTRldC YWRDb252ZXJ0aW9uRXhjZXB0aW9uIDogcHVibGljIElFeGNlcHRpb24gewogICAgcHVibGljOgoK ICAgICAgICAgCiAgICAgICAgVFNGV0JhZENvbnZlcnRpb25FeGNlcHRpb24oY29uc3QgZW51bSBU U0ZXRGF0YUl0ZW06OkRhdGFUeXBlICZhU291cmNlVHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBlbnVtIFRTRldEYXRhSXRlbTo6RGF0YVR5cGUgJmFEZXN0VHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nICZhSXRl bU5hbWUpOwoKICAgICAgICAgCiAgICAgICAgflRTRldCYWRDb252ZXJ0aW9uRXhjZXB0aW9uKCk7 CgogICAgICAgICAKICAgICAgICBjb25zdCBjaGFyICpuYW1lKHZvaWQpIGNvbnN0OwogICAgfTsK CiAgICAgCiAgICBjbGFzcyBUU0ZXUHJlY2lzaW9uTG9zdEV4Y2VwdGlvbiA6IHB1YmxpYyBJRXhj ZXB0aW9uIHsKICAgIHB1YmxpYzoKCiAgICAgICAgIAogICAgICAgIFRTRldQcmVjaXNpb25Mb3N0 RXhjZXB0aW9uKGNvbnN0IGVudW0gVFNGV0RhdGFJdGVtOjpEYXRhVHlwZSAmYVNvdXJjZVR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBUU0ZXRGF0YUl0 ZW06OkRhdGFUeXBlICZhRGVzdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgSVN0cmluZyAmYUl0ZW1OYW1lKTsKCiAgICAgICAgIAogICAgICAgIH5UU0ZXUHJl Y2lzaW9uTG9zdEV4Y2VwdGlvbigpOwoKICAgICAgICAgCiAgICAgICAgY29uc3QgY2hhciAqbmFt ZSh2b2lkKSBjb25zdDsKICAgIH07CgogICAgIAogICAgY2xhc3MgVFNGV1Byb3BlcnR5U2V0RXhj ZXB0aW9uIDogcHVibGljIElFeGNlcHRpb24gewogICAgcHVibGljOgoKICAgICAgICAgCiAgICAg ICAgVFNGV1Byb3BlcnR5U2V0RXhjZXB0aW9uKGNvbnN0IElTdHJpbmcgJmFFcnJvclRleHQpOwoK ICAgICAgICAgCiAgICAgICAgflRTRldQcm9wZXJ0eVNldEV4Y2VwdGlvbigpOwoKICAgICAgICAg CiAgICAgICAgY29uc3QgY2hhciAqbmFtZSh2b2lkKSBjb25zdDsKICAgIH07CgogICAgIAogICAg Y2xhc3MgVFNGV1ByaXZhdGVBY2Nlc3NFeGNlcHRpb24gOiBwdWJsaWMgSUV4Y2VwdGlvbiB7CiAg ICBwdWJsaWM6CgogICAgICAgICAKICAgICAgICBUU0ZXUHJpdmF0ZUFjY2Vzc0V4Y2VwdGlvbihj b25zdCBJU3RyaW5nICZhUHJvcGVydHlOYW1lKTsKCiAgICAgICAgIAogICAgICAgIH5UU0ZXUHJp dmF0ZUFjY2Vzc0V4Y2VwdGlvbigpOwoKICAgICAgICAgCiAgICAgICAgY29uc3QgY2hhciAqbmFt ZSh2b2lkKSBjb25zdDsKICAgIH07CgogICAgIAogICAgY2xhc3MgVFNGV1JlYWRPbmx5RXhjZXB0 aW9uIDogcHVibGljIElFeGNlcHRpb24gewogICAgcHVibGljOgoKICAgICAgICAgCiAgICAgICAg VFNGV1JlYWRPbmx5RXhjZXB0aW9uKGNvbnN0IElTdHJpbmcgJmFQcm9wZXJ0eU5hbWUpOwoKICAg ICAgICAgCiAgICAgICAgflRTRldSZWFkT25seUV4Y2VwdGlvbigpOwoKICAgICAgICAgCiAgICAg ICAgY29uc3QgY2hhciAqbmFtZSh2b2lkKSBjb25zdDsKICAgIH07CgoKCgogCiAKIAogCiAKIyAx NiAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0Vycm9yLmhwcCIgMgoKCmNsYXNzIFRT RldFcnJvcgp7CglwdWJsaWM6CgkJVFNGV0Vycm9yKCkge30KCQlUU0ZXRXJyb3IoCWludCBhRXJy b3JDb2RlLCAKCQkJCQljb25zdCBJU3RyaW5nICZhTWVzc2FnZSwgCgkJCQkJY29uc3QgSVN0cmlu ZyAmYUluZm9UZXh0KSAKCQkJOiBtRXJyb3JDb2RlKGFFcnJvckNvZGUpLCBtTWVzc2FnZShhTWVz c2FnZSksIG1JbmZvVGV4dChhSW5mb1RleHQpIHt9CgkJflRTRldFcnJvcigpIHt9CgoJCWludCBj b25zdCYJCWtleSgpIGNvbnN0IAl7IHJldHVybiBtRXJyb3JDb2RlOwl9CgkJCQkJCgkJaW50CQkJ CWdldENvZGUoKSAJCXsgcmV0dXJuIG1FcnJvckNvZGU7CX0KCQljb25zdCBJU3RyaW5nICYJZ2V0 TWVzc2FnZSgpCXsgcmV0dXJuIG1NZXNzYWdlOwkJfQoJCWNvbnN0IElTdHJpbmcgJglnZXRJbmZv VGV4dCgpCXsgcmV0dXJuIG1JbmZvVGV4dDsJCX0KCQkKCQlJU3RyaW5nIAkJYXNTdHJpbmcoKQkJ eyByZXR1cm4gSVN0cmluZyhtRXJyb3JDb2RlKSArICI6IiArIG1NZXNzYWdlOyB9CgoJcHJpdmF0 ZToKCQkKCQlpbnQJCW1FcnJvckNvZGU7CgkJSVN0cmluZwltTWVzc2FnZTsKCQlJU3RyaW5nCW1J bmZvVGV4dDsKfTsKCmNsYXNzIFRTRldFcnJvclNldCA6IHByb3RlY3RlZCBJS2V5U2V0PFRTRldF cnJvciwgaW50PiAKewoJcHVibGljOgoJCVRTRldFcnJvclNldCgpOwoJCX5UU0ZXRXJyb3JTZXQo KTsKCQkKCQl2b2lkIAkJCWFkZEVycm9yKGNvbnN0IFRTRldFcnJvciAmYUVycm9yKTsKCQl2b2lk CQkJc2V0RXJyb3IoaW50IGFFcnJvckNvZGUsIFRTRldEYXRhQ29udGFpbmVyICZhQ29udGFpbmVy KTsKCQkKCQlJU3RyaW5nCQkJYXNTdHJpbmcoaW50IGFFcnJvckNvZGUpOwoJCUlTdHJpbmcJCQlh c1N0cmluZygpOwp9OwoKCiMgMTMgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1 ZXVlLmNwcCIgMgoKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvUkJHQ29ib2xUcmFu c2NvZGVyLmhwcCIgMQogCiAKIAogCiAKCgogICAgCgogICAgIAogICAgCiAgICAKICAgIAogICAg CiAgICAKCQoKICAgICAKICAgIGNsYXNzIFJCR0NvYm9sVHJhbnNjb2RlciB7CiAgICBwdWJsaWM6 CgogICAgICAgICAKCgogICAgICAgIGVudW0gQ29ib2xOdW1iZXJUeXBlIHsKICAgICAgICAgICAg dW5wYWNrZWQgPSAwLAogICAgICAgICAgICBjb21wM05vRnJhYywKICAgICAgICAgICAgY29tcDNG cmFjMiwKICAgICAgICAgICAgbm9uZQogICAgICAgIH07CgogICAgICAgICAKCgogICAgICAgIHN0 YXRpYyBSQkdDb2JvbFRyYW5zY29kZXIgKmdldEluc3RhbmNlKHZvaWQpOwoKICAgICAgICAgCgoK ICAgICAgICB+UkJHQ29ib2xUcmFuc2NvZGVyKCk7CgogICAgICAgICAKCgogICAgICAgIElTdHJp bmcgY29udmVydFRvRUJDRElDKGNvbnN0IElTdHJpbmcgJmFTdHJpbmcpOwoKICAgICAgICAgCgoK ICAgICAgICBJU3RyaW5nIGNvbnZlcnRGcm9tRUJDRElDKGNvbnN0IElTdHJpbmcgJmFTdHJpbmcp OwoJCQoJCSAKCgogICAgICAgIHZvaWQgY29udmVydFRvRUJDRElDKGNoYXIgKmFCdWZmZXIsIHVu c2lnbmVkIGxvbmcgYUJ1ZmZlckxlbmd0aCk7CgogICAgICAgICAKCgogICAgICAgIHZvaWQgY29u dmVydEZyb21FQkNESUMoY2hhciAqYUJ1ZmZlciwgdW5zaWduZWQgbG9uZyBhQnVmZmVyTGVuZ3Ro KTsKCQkKICAgICAgICAgCgoKICAgICAgICBJU3RyaW5nIHRvQ29ib2xOdW1iZXIoY29uc3QgbG9u ZyAmYU51bWJlciwgY29uc3QgdW5zaWduZWQgbG9uZyBhRGlnaXRDb3VudGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnVtIENvYm9sTnVtYmVyVHlwZSAmYVR5cGUpOwoK ICAgICAgICAgCgoKICAgICAgICBJU3RyaW5nIHRvVW5wYWNrZWRDb2JvbE51bWJlcihjb25zdCBs b25nICZhTnVtYmVyLCBjb25zdCB1bnNpZ25lZCBsb25nIGFEaWdpdENvdW50ZXIpOwoKICAgICAg ICAgCgoKICAgICAgICBsb25nIGZyb21Db2JvbE51bWJlcihjb25zdCBJU3RyaW5nICZhQ29ib2xO dW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bSBDb2JvbE51bWJl clR5cGUgJmFUeXBlKTsKCiAgICAgICAgIAoKCiAgICAgICAgbG9uZyBmcm9tVW5wYWNrZWRDb2Jv bE51bWJlcihjb25zdCBJU3RyaW5nICZhQ29ib2xOdW1iZXIpOwoKICAgICAgICAgCgoKICAgICAg ICBsb25nIGZyb21QYWNrZWRDb2JvbE51bWJlcihjb25zdCBJU3RyaW5nICZhQ29ib2xOdW1iZXIs IGNvbnN0IGVudW0gQ29ib2xOdW1iZXJUeXBlICZhVHlwZSk7CgkJCgkJSURhdGUgZnJvbVBhY2tl ZENvYm9sTnVtYmVyKGNvbnN0IElTdHJpbmcgJmFDb2JvbE51bWJlcik7CgogICAgcHJpdmF0ZToK CiAgICAgICAgIAoKCiAgICAgICAgUkJHQ29ib2xUcmFuc2NvZGVyKCk7CgogICAgICAgICAKCgog ICAgICAgIHN0YXRpYyBSQkdDb2JvbFRyYW5zY29kZXIgICAgICAgICAgICp0aGVJbnN0YW5jZTsK ICAgIH07CiAgICAKICAgIGJvb2wgQ05WX1BhYzNUb0FzYyggY29uc3QgdW5zaWduZWQgbG9uZyB1 bExlblBhYywgY29uc3QgdW5zaWduZWQgY2hhciBhdWNEYXRhUGFjW10sCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgdWxEaWdpdHMsIGNvbnN0IHVuc2lnbmVkIGxv bmcgdWxMZW5Bc2MsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYXVjRGF0 YUFzY1tdKTsKICAgIAoKCgogCiAKIAogCiAKIyAxNSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRz ZXJ2aWNlL21xcXVldWUuY3BwIiAyCgojIDEgIi9ob21lL3hodTYwMzEvdHNmdy9JbmNsdWRlL1RT RldMb2dGYWNpbGl0eS5ocHAiIDEKIAogCiAKIAogCgogICAgCgogICAgIAogICAgCiAgICAKCiAg ICAgCiAgICAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2lhcHAuaHBwIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJl ZC5iaW4vaW5jbHVkZS9pbmdhcHAuaHBwIiAxCiMgMTAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGlu dXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaW5nYXBwLmhwcCIKCgoKCgogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKCiAKCiAKI3ByYWdtYSBpbmZv KG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQoj cHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKCgogCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhf X0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoK IAogCgogCmNsYXNzIElDdXJyZW50Tm9uR1VJQXBwbGljYXRpb247CmNsYXNzIElDdXJyZW50Tm9u R1VJQXBwbGljYXRpb25EYXRhOwpjbGFzcyBJU3RyaW5nOwpjbGFzcyBJVGV4dDsKIAoKIAoKY2xh c3MgICBJTm9uR1VJQXBwbGljYXRpb24KewpwdWJsaWM6CiAKICAgIHZpcnR1YWwgSVN0cmluZyBh c1N0cmluZygpIGNvbnN0OwogICAgdmlydHVhbCBJU3RyaW5nIGFzRGVidWdJbmZvKCkgY29uc3Q7 CgogCiAgICBzdGF0aWMgSVByb2Nlc3NJZCBjdXJyZW50UElEKCk7CiAgICB2aXJ0dWFsIElQcm9j ZXNzSWQgaWQoKSBjb25zdDsKICAgIHN0YXRpYyBJQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uJiBj dXJyZW50KCk7CgogCiAgICBlbnVtIEVQcm9jZXNzUHJpb3JpdHkKICAgIHsKICAgICAgICBiZWxv d05vcm1hbCwKICAgICAgICBub3JtYWwsCiAgICAgICAgYWJvdmVOb3JtYWwKICAgIH07CgogICAg dmlydHVhbCBJTm9uR1VJQXBwbGljYXRpb24mIHNldFByb2Nlc3NQcmlvcml0eShjb25zdCBFUHJv Y2Vzc1ByaW9yaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5ld1ByaW8pOwoKIAoKCgoKICAgIGVudW0gUHJpb3JpdHlDbGFzcwogICAgewogICAg ICAgIG5vQ2hhbmdlLAogICAgICAgIGlkbGVUaW1lLAogICAgICAgIHJlZ3VsYXIsCiAgICAgICAg dGltZUNyaXRpY2FsLAogICAgICAgIGZvcmVncm91bmRTZXJ2ZXIKICAgIH07CgojIDEzMiAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pbmdhcHAuaHBw IgoKCnByb3RlY3RlZDoKIAogICAgSU5vbkdVSUFwcGxpY2F0aW9uKGNvbnN0IElQcm9jZXNzSWQm IGlkKTsKICAgIHZpcnR1YWwgfklOb25HVUlBcHBsaWNhdGlvbigpOwoKIAogICAgdmlydHVhbCBJ Tm9uR1VJQXBwbGljYXRpb24mIHNldElkKGNvbnN0IElQcm9jZXNzSWQmIGlkKTsKCnByaXZhdGU6 CiAKICAgIHN0YXRpYyBJQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uKiBwQ3VycmVudDsKICAgIElQ cm9jZXNzSWQgcGlkOwp9OyAgCgoKY2xhc3MgICBJQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uIDog cHVibGljIElOb25HVUlBcHBsaWNhdGlvbgp7CiAgICB0eXBlZGVmIElOb25HVUlBcHBsaWNhdGlv biBJbmhlcml0ZWQ7CnB1YmxpYzoKIAogICAgdmlydHVhbCBpbnQgYXJnYygpIGNvbnN0OwogICAg dmlydHVhbCBJU3RyaW5nIGFyZ3YoaW50IGFyZ3VtZW50TnVtYmVyKSBjb25zdDsKICAgIHZpcnR1 YWwgSVRleHQgYXJndlcoaW50IGFyZ3VtZW50TnVtYmVyKSBjb25zdDsKICAgIHZpcnR1YWwgSUN1 cnJlbnROb25HVUlBcHBsaWNhdGlvbiAmc2V0QXJncyhpbnQgYXJnYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBhcmd2W10p OwogICAgdmlydHVhbCBJQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uICZzZXRBcmdzVyhpbnQgYXJn YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg aW9jOjp1bmljaGFyX3QqIGNvbnN0IGFyZ3ZbXSk7CgogCiAgICB2aXJ0dWFsIElDdXJyZW50Tm9u R1VJQXBwbGljYXRpb24mIGV4aXQoKTsKCiAKICAgIHZpcnR1YWwgSVN0cmluZyBhc0RlYnVnSW5m bygpIGNvbnN0OwoKcHJvdGVjdGVkOgogCiAgICBJQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uKCk7 CiAgICB2aXJ0dWFsIH5JQ3VycmVudE5vbkdVSUFwcGxpY2F0aW9uKCk7CgogCgoKCgpwcml2YXRl OgogCiAgICBmcmllbmQgY2xhc3MgSU5vbkdVSUFwcGxpY2F0aW9uOwogICAgaW50IGFyZ0NvdW50 OwogICAgSVRleHQqIGFyZ1ZhbHVlOwogICAgSUN1cnJlbnROb25HVUlBcHBsaWNhdGlvbiAmc2V0 QXJnc1VuaUNoYXIoaW50IGFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBVbmlDaGFyKiBjb25zdCBhcmd2W10pOwoKCgogICAgSUN1cnJlbnRO b25HVUlBcHBsaWNhdGlvbkRhdGEgKnBDdXJyZW50QXBwbGljYXRpb25EYXRhOwp9OwoKIAoKIAoK CgoKCgoKI3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgog CgogCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pbmdhcHAuaW5sIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIApp bmxpbmUKSUN1cnJlbnROb25HVUlBcHBsaWNhdGlvbiYKSUN1cnJlbnROb25HVUlBcHBsaWNhdGlv bjo6c2V0QXJnc1coaW50IGFyZ2MsIGNvbnN0IGlvYzo6dW5pY2hhcl90KiBjb25zdCBhcmd2W10p CnsKICAgIHJldHVybiBzZXRBcmdzVW5pQ2hhcihhcmdjLCAoY29uc3QgVW5pQ2hhciogY29uc3Qg Kilhcmd2KTsKfQogCgoKIyAyMTIgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaW5nYXBwLmhwcCIgMgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3By YWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAzMCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYXBwLmhwcCIgMgoK IyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2lo YW5kbGUuaHBwIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAK CiAKCiMgMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pc3RyZWFtLmhwcCIgMQojIDU2ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lzdHJlYW0uaHBwIgoKCgoKCiMgMzkgIi9ob21lL2Frbm9sbC9pb2Nz cmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWhhbmRsZS5ocHAiIDIKCgojIDEgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaTJkZ2hhbmQu aHBwIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiAKCiAKIAoKIAoj cHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2ZWwsIF9fSU9DX0hFQURFUl9SRVBP UlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgogCgpzdHJ1Y3QgX1dpZGdldFJlYzsK CiAKCiAKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKF9fSU9DX05BTUVNQU5HTElOR19TQ0hFTUUpCgoK CgoKI3ByYWdtYSBlbnVtKDQpCgoKCgoKCgogCgogCiAKCiAKCgoKCgoKCgoKCgpjbGFzcyBJWERD Owp0eXBlZGVmIF9XaWRnZXRSZWMqIElOYXRpdmVXaW5kb3dIYW5kbGU7CgogCgogCgpjbGFzcyBJ UG9pbnRlckhhbmRsZSB7CnB1YmxpYzoKIAoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFZhbHVlOwoK CgoKCgoKCiAKICBJUG9pbnRlckhhbmRsZSAoIFZhbHVlIHZhbHVlPTAgKTsKICBJUG9pbnRlckhh bmRsZSAoIGNvbnN0IElQb2ludGVySGFuZGxlJiBhSGFuZGxlICk7CiB+SVBvaW50ZXJIYW5kbGUg KCApOwoKSVBvaW50ZXJIYW5kbGUKICZvcGVyYXRvciA9ICAgICAoIGNvbnN0IElQb2ludGVySGFu ZGxlJiBhSGFuZGxlICk7CgoKIAoKSVN0cmluZwogIGFzU3RyaW5nICAgICggKSBjb25zdCwKICBh c0RlYnVnSW5mbyAoICkgY29uc3Q7Cgp1bnNpZ25lZCBsb25nCiAgYXNVbnNpZ25lZCAgKCApIGNv bnN0OwoKIAogIG9wZXJhdG9yIFZhbHVlICggKSBjb25zdDsKCnByb3RlY3RlZDoKIApWYWx1ZQog IGZoYW5kbGU7Cn07ICAKCgpjbGFzcyBJUHJlc1NwYWNlSGFuZGxlIHsKcHVibGljOgogCgp0eXBl ZGVmIElYREMqIFZhbHVlOwoKCgoKCgoKCiAKICBJUHJlc1NwYWNlSGFuZGxlICggVmFsdWUgdmFs dWU9MCwgSU5hdGl2ZVdpbmRvd0hhbmRsZSBod25kPTAgKTsKCiAgSVByZXNTcGFjZUhhbmRsZSAo Y29uc3QgSVByZXNTcGFjZUhhbmRsZSYgc3JjKTsKICBJUHJlc1NwYWNlSGFuZGxlJiBvcGVyYXRv cj0gKGNvbnN0IElQcmVzU3BhY2VIYW5kbGUmIHNyYyk7CiAgfklQcmVzU3BhY2VIYW5kbGUgKCk7 CgogCgpJU3RyaW5nCiAgYXNTdHJpbmcgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICggKSBj b25zdDsKCnVuc2lnbmVkIGxvbmcKICBhc1Vuc2lnbmVkICAoICkgY29uc3Q7CgogCiAgb3BlcmF0 b3IgVmFsdWUgKCApIGNvbnN0OwoKcHJpdmF0ZToKIAoKCgpWYWx1ZQogIGZoYW5kbGU7Cn07ICAK CmNsYXNzIElCaXRtYXBIYW5kbGUgewpwdWJsaWM6CiAKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBW YWx1ZTsKCgoKCgoKCgogCiAgSUJpdG1hcEhhbmRsZSAoIFZhbHVlIHZhbHVlPTAgKTsKICBJQml0 bWFwSGFuZGxlICggY29uc3QgSUJpdG1hcEhhbmRsZSYgYUhhbmRsZSApOwogfklCaXRtYXBIYW5k bGUgKCApOwoKSUJpdG1hcEhhbmRsZQogJm9wZXJhdG9yID0gICAgKCBjb25zdCBJQml0bWFwSGFu ZGxlJiBhSGFuZGxlICk7CgoKIAoKSVN0cmluZwogIGFzU3RyaW5nICAgICggKSBjb25zdCwKICBh c0RlYnVnSW5mbyAoICkgY29uc3Q7Cgp1bnNpZ25lZCBsb25nCiAgYXNVbnNpZ25lZCAgKCApIGNv bnN0OwoKIAogIG9wZXJhdG9yIFZhbHVlICggKSBjb25zdDsKCnByb3RlY3RlZDoKIApWYWx1ZQog IGZoYW5kbGU7Cn07ICAKCgpjbGFzcyBJUmVnaW9uSGFuZGxlIHsKcHVibGljOgogCgp0eXBlZGVm IHZvaWQqIFZhbHVlOwoKCgoKCgoKCiAKICBJUmVnaW9uSGFuZGxlICggVmFsdWUgdmFsdWU9MCAp OwoKIAoKSVN0cmluZwogIGFzU3RyaW5nICAgICggKSBjb25zdCwKICBhc0RlYnVnSW5mbyAoICkg Y29uc3Q7Cgp1bnNpZ25lZCBsb25nCiAgYXNVbnNpZ25lZCAgKCApIGNvbnN0OwoKIAogIG9wZXJh dG9yIFZhbHVlICggKSBjb25zdDsKCnByaXZhdGU6CiAKVmFsdWUKICBmaGFuZGxlOwp9OyAgCgog CgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkK CgoKCiAKCiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9p bmNsdWRlL2kyZGdoYW5kLmlubCIgMQoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAoKIAogCgoKaW5saW5lIHVuc2lnbmVkIGxvbmcgSVBvaW50ZXJIYW5k bGU6OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRoaXMt PmZoYW5kbGU7Cn0KCmlubGluZSBJUG9pbnRlckhhbmRsZTo6b3BlcmF0b3IgSVBvaW50ZXJIYW5k bGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5kbGU7Cn0KCgogCgoKaW5s aW5lIElQcmVzU3BhY2VIYW5kbGU6OklQcmVzU3BhY2VIYW5kbGUgKCBWYWx1ZSB2YWx1ZSwgSU5h dGl2ZVdpbmRvd0hhbmRsZSApCiAgOiBmaGFuZGxlKCB2YWx1ZSApCiAgewogIH0KCmlubGluZSB1 bnNpZ25lZCBsb25nIElQcmVzU3BhY2VIYW5kbGU6OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICBy ZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRoaXMtPmZoYW5kbGU7Cn0KCmlubGluZSBJUHJlc1NwYWNl SGFuZGxlOjpvcGVyYXRvciBJUHJlc1NwYWNlSGFuZGxlOjpWYWx1ZSAoICkgY29uc3QKewogIHJl dHVybiB0aGlzLT5maGFuZGxlOwp9CgoKIAoKCmlubGluZSB1bnNpZ25lZCBsb25nIElCaXRtYXBI YW5kbGU6OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRo aXMtPmZoYW5kbGU7Cn0KCmlubGluZSBJQml0bWFwSGFuZGxlOjpvcGVyYXRvciBJQml0bWFwSGFu ZGxlOjpWYWx1ZSAoICkgY29uc3QKewogIHJldHVybiB0aGlzLT5maGFuZGxlOwp9CgoKIAoKCmlu bGluZSBJUmVnaW9uSGFuZGxlOjpJUmVnaW9uSGFuZGxlICggVmFsdWUgdmFsdWUgKQogIDogZmhh bmRsZSggdmFsdWUgKQogIHsKICB9CgppbmxpbmUgdW5zaWduZWQgbG9uZyBJUmVnaW9uSGFuZGxl Ojphc1Vuc2lnbmVkICggKSBjb25zdAp7CiAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSB0aGlzLT5m aGFuZGxlOwp9CgppbmxpbmUgSVJlZ2lvbkhhbmRsZTo6b3BlcmF0b3IgSVJlZ2lvbkhhbmRsZTo6 VmFsdWUgKCApIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ZmhhbmRsZTsKfQoKIAogCgojIDI2NSAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pMmRnaGFu ZC5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3By YWdtYSBpbmZvKHJlc3RvcmUpCiAKCiAKCiMgNDEgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhf czM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWhhbmRsZS5ocHAiIDIKCgoKIyAxICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2l1aXBsLmhwcCIgMQogCgog CgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAgCgoKICAgIAogIAoKCgoKCgogCgogICAgCiAgICAgIAkK IyA5OSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9p dWlwbC5ocHAiCgogICAgCiMgMTM1ICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2l1aXBsLmhwcCIKCgoKCiMgNDQgIi9ob21lL2Frbm9sbC9pb2NzcmMv bGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWhhbmRsZS5ocHAiIDIKCiAKCiAKI3ByYWdt YSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xF VkVMKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKc3RydWN0IF9XaWRnZXRSZWM7CnN0cnVj dCBfWHRBcHBTdHJ1Y3Q7CnN0cnVjdCBfWEdDOwpzdHJ1Y3QgX1hEaXNwbGF5OwpzdHJ1Y3QgX1hy bUhhc2hCdWNrZXRSZWM7CnN0cnVjdCBfWHRBcHBTdHJ1Y3Q7CgogCgogCgojcHJhZ21hIG5hbWVt YW5nbGluZyhfX0lPQ19OQU1FTUFOR0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoK CgoKCgoKIAoKIAogCgogCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCnR5cGVkZWYgdm9pZCAqICAK ICBJV2luUHJvYyAoIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgdm9pZCAq ICk7CgoKCn0KCmNsYXNzIElXaW5kb3dIYW5kbGU7CmNsYXNzIElTdHJpbmdIYW5kbGU7CmNsYXNz IElQcm9maWxlSGFuZGxlOwpjbGFzcyBJTWVzc2FnZVF1ZXVlSGFuZGxlOwpjbGFzcyBJQWNjZWxU YmxIYW5kbGU7CmNsYXNzIElBbmNob3JCbG9ja0hhbmRsZTsKCgoKCmNsYXNzIElEaXNwbGF5SGFu ZGxlOwppbmxpbmUgc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVh bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJRGlzcGxheUhhbmRsZSYg YUhhbmRsZSk7CgoKCgoKCmlubGluZSBzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yPDwoc3RkOjpvc3Ry ZWFtJiBhU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElXaW5k b3dIYW5kbGUmIGFIYW5kbGUpOwppbmxpbmUgc3RkOjpvc3RyZWFtICZvcGVyYXRvcjw8KHN0ZDo6 b3N0cmVhbSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ U3RyaW5nSGFuZGxlJiBhSGFuZGxlKTsKaW5saW5lIHN0ZDo6b3N0cmVhbSAmb3BlcmF0b3I8PChz dGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgSVByb2ZpbGVIYW5kbGUmIGFIYW5kbGUpOwppbmxpbmUgc3RkOjpvc3RyZWFtICZvcGVyYXRv cjw8KHN0ZDo6b3N0cmVhbSYgYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJTWVzc2FnZVF1ZXVlSGFuZGxlJiBhSGFuZGxlKTsKaW5saW5lIHN0ZDo6b3N0cmVh bSAmb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgSUFjY2VsVGJsSGFuZGxlJiBhSGFuZGxlKTsKaW5saW5lIHN0ZDo6 b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgSUFuY2hvckJsb2NrSGFuZGxlJiBhSGFuZGxlKTsKIyAx NTMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaWhh bmRsZS5ocHAiCgoKIAoKIAoKY2xhc3MgSVdpbmRvd0hhbmRsZSB7CnB1YmxpYzoKIAp0eXBlZGVm IElOYXRpdmVXaW5kb3dIYW5kbGUgVmFsdWU7CgogCiAgSVdpbmRvd0hhbmRsZSAoIFZhbHVlIHZh bHVlPTAgKTsKCiAKYm9vbAogIGlzVmFsaWQgKCApIGNvbnN0OwoKIAplbnVtIEJyb2FkY2FzdFRv IHsKICBkZXNjZW5kYW50cywKICBmcmFtZXMsCiAgZnJhbWVEZXNjZW5kYW50cwogIH07CgpJRXZl bnRSZXN1bHQKICBzZW5kRXZlbnQgICggdW5zaWduZWQgbG9uZyAgICAgICAgICAgZXZlbnRJZCwK ICAgICAgICAgICAgICAgY29uc3QgSUV2ZW50UGFyYW1ldGVyMSYgcGFybTEgPSAwdWwsCiAgICAg ICAgICAgICAgIGNvbnN0IElFdmVudFBhcmFtZXRlcjImIHBhcm0yID0gMHVsICkgY29uc3Q7Cgp2 b2lkCiAgc2VuZEV2ZW50cyAoIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50SWQsCiAgICAg ICAgICAgICAgIGNvbnN0IElFdmVudFBhcmFtZXRlcjEmIHBhcm0xID0gMHVsLAogICAgICAgICAg ICAgICBjb25zdCBJRXZlbnRQYXJhbWV0ZXIyJiBwYXJtMiA9IDB1bCwKICAgICAgICAgICAgICAg QnJvYWRjYXN0VG8gICAgICAgICAgICAgdmFsdWUgPSBkZXNjZW5kYW50cyApIGNvbnN0OwoKdm9p ZAogIHBvc3RFdmVudCAgKCB1bnNpZ25lZCBsb25nICAgICAgICAgICBldmVudElkLAogICAgICAg ICAgICAgICBjb25zdCBJRXZlbnRQYXJhbWV0ZXIxJiBwYXJtMSA9IDB1bCwKICAgICAgICAgICAg ICAgY29uc3QgSUV2ZW50UGFyYW1ldGVyMiYgcGFybTIgPSAwdWwgKSBjb25zdCwKCiAgcG9zdEV2 ZW50cyAoIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50SWQsCiAgICAgICAgICAgICAgIGNv bnN0IElFdmVudFBhcmFtZXRlcjEmIHBhcm0xID0gMHVsLAogICAgICAgICAgICAgICBjb25zdCBJ RXZlbnRQYXJhbWV0ZXIyJiBwYXJtMiA9IDB1bCwKICAgICAgICAgICAgICAgQnJvYWRjYXN0VG8g ICAgICAgICAgICAgdmFsdWUgPSBkZXNjZW5kYW50cyApIGNvbnN0OwogCgpJU3RyaW5nCiAgYXNT dHJpbmcgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICggKSBjb25zdDsKCgpmcmllbmQgc3Rk Ojpvc3RyZWFtCiAmb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mICAgICAgIGFTdHJlYW0sCiAg ICAgICAgICAgICAgICBjb25zdCBJV2luZG93SGFuZGxlJiBhSGFuZGxlICk7CgoKCgoKCnVuc2ln bmVkIGxvbmcKICBhc1Vuc2lnbmVkICAoICkgY29uc3Q7CgogCiAgb3BlcmF0b3IgVmFsdWUgKCAp IGNvbnN0OwoKcHJpdmF0ZToKIApWYWx1ZQogIGZoYW5kbGU7Cn07ICAKCgpjbGFzcyBJU3lzdGVt UG9pbnRlckhhbmRsZSA6IHB1YmxpYyBJUG9pbnRlckhhbmRsZSB7CnR5cGVkZWYgSVBvaW50ZXJI YW5kbGUKICBJbmhlcml0ZWQ7CnB1YmxpYzoKIAplbnVtIEVQb2ludGVyVHlwZSB7CiAga0Fycm93 PTAsCiAga1RleHQ9MSwKICBrV2FpdD0yLAogIGtNb3ZlPTMsCiAga1NpemVVcExlZnQ9NCwKICBr U2l6ZVVwUmlnaHQ9NSwKICBrU2l6ZURvd25MZWZ0PTYsCiAga1NpemVEb3duUmlnaHQ9NywKICBr U2l6ZUxlZnQ9OCwKICBrU2l6ZVJpZ2h0PTksCiAga1NpemVVcD0xMCwKICBrU2l6ZURvd249MTEs CgoKCiAga0luZm9ybWF0aW9uPTEzLAogIGtRdWVzdGlvbj0xNCwKICBrRXJyb3I9MTUsCiAga1dh cm5pbmc9MTYsCiAga0lsbGVnYWxPcGVyYXRpb249MTcsCgoKCgoKCiAga0RyYWdGYWRlPTIyLAog IGtTaXplSG9yaXpvbnRhbD0yMywKICBrU2l6ZVZlcnRpY2FsPTI0CiAgfTsKCiAKICBJU3lzdGVt UG9pbnRlckhhbmRsZSAoIEVQb2ludGVyVHlwZSAgICBwb2ludGVySWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICBib29sICAgICAgICAgICAgbWFrZUNvcHkgPSBmYWxzZSApOwogfklTeXN0ZW1Q b2ludGVySGFuZGxlICggKTsKCgplbnVtIElkZW50aWZpZXIgewogIGFycm93PTAsCiAgdGV4dD0x LAogIHdhaXQ9MiwKICBtb3ZlPTMsCgoKCgogIHNpemVIb3Jpem9udGFsPTYsCiAgc2l6ZVZlcnRp Y2FsPTcsCgoKCiAgaW5mb3JtYXRpb249OSwKICBxdWVzdGlvbj0xMCwKICBlcnJvcj0xMSwKICB3 YXJuaW5nPTEyLAogIGlsbGVnYWxPcGVyYXRpb249MTMsCgoKCgoKCiAgZHJhZ0ZhZGU9MTgKICB9 OwoKICBJU3lzdGVtUG9pbnRlckhhbmRsZSAoIElkZW50aWZpZXIgICAgICBwb2ludGVySWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICBib29sICBtYWtlQ29weSA9IGZhbHNlICk7CgoKfTsgIAoK Y2xhc3MgSVN0cmluZ0hhbmRsZSB7CnB1YmxpYzoKIAoKdHlwZWRlZiB2b2lkKiBWYWx1ZTsKCgoK CgoKCgogCiAgSVN0cmluZ0hhbmRsZSAoIFZhbHVlIHZhbHVlPTAgKTsKCiAKCklTdHJpbmcKICBh c1N0cmluZyAgICAoICkgY29uc3QsCiAgYXNEZWJ1Z0luZm8gKCApIGNvbnN0OwoKCmZyaWVuZCBz dGQ6Om9zdHJlYW0KICZvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgICAgICAgYVN0cmVhbSwK ICAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmdIYW5kbGUmIGFIYW5kbGUgKTsKCgoKCgoKdW5z aWduZWQgbG9uZwogIGFzVW5zaWduZWQgICggKSBjb25zdDsKCiAKICBvcGVyYXRvciBWYWx1ZSAo ICkgY29uc3Q7Cgpwcml2YXRlOgogClZhbHVlCiAgZmhhbmRsZTsKfTsgIAoKCmNsYXNzIElTeXN0 ZW1CaXRtYXBIYW5kbGUgOiBwdWJsaWMgSUJpdG1hcEhhbmRsZSB7CnR5cGVkZWYgSUJpdG1hcEhh bmRsZQogIEluaGVyaXRlZDsKcHVibGljOgogCmVudW0gSWRlbnRpZmllciB7CiAgc3lzdGVtTWVu dT0wLAojIDM3MCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5j bHVkZS9paGFuZGxlLmhwcCIKCiAgbWVudUNoZWNrTWFyaz0xNCwKCgoKCgoKICBtaW5pbWl6ZUJ1 dHRvbj0xOSwKCgoKICBtYXhpbWl6ZUJ1dHRvbj0yMSwKCgoKICByZXN0b3JlQnV0dG9uPTIzLAoK CgoKCgogIGZpbGU9MjgKIyA0MDIgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWhhbmRsZS5ocHAiCgogIH07CgogCiAgSVN5c3RlbUJpdG1hcEhhbmRs ZSAoIElkZW50aWZpZXIgYml0bWFwSWQgKTsKIH5JU3lzdGVtQml0bWFwSGFuZGxlICggKTsKCn07 ICAKCmNsYXNzIElQcm9maWxlSGFuZGxlIHsKcHVibGljOgogCgp0eXBlZGVmIF9Ycm1IYXNoQnVj a2V0UmVjKiBWYWx1ZTsKCgoKCgoKCgogCiAgSVByb2ZpbGVIYW5kbGUgKCBWYWx1ZSB2YWx1ZT0w ICk7CgogCgpJU3RyaW5nCiAgYXNTdHJpbmcgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICgg KSBjb25zdDsKCgpmcmllbmQgc3RkOjpvc3RyZWFtCiAmb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJl YW0mICAgICAgIGFTdHJlYW0sCiAgICAgICAgICAgICAgICBjb25zdCBJUHJvZmlsZUhhbmRsZSYg YUhhbmRsZSApOwoKCgoKCgp1bnNpZ25lZCBsb25nCiAgYXNVbnNpZ25lZCAgKCApIGNvbnN0OwoK IAogIG9wZXJhdG9yIFZhbHVlICggKSBjb25zdDsKCnByaXZhdGU6CiAKVmFsdWUKICBmaGFuZGxl Owp9OyAgCgpjbGFzcyBJTWVzc2FnZVF1ZXVlSGFuZGxlIHsKcHVibGljOgogCgp0eXBlZGVmIHZv aWQqIFZhbHVlOwoKCgoKCgoKCiAKICBJTWVzc2FnZVF1ZXVlSGFuZGxlICggVmFsdWUgdmFsdWU9 MCApOwoKIAp2b2lkCiAgcG9zdEV2ZW50ICAoIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50 SWQsCiAgICAgICAgICAgICAgIGNvbnN0IElFdmVudFBhcmFtZXRlcjEmIHBhcm0xID0gMHVsLAog ICAgICAgICAgICAgICBjb25zdCBJRXZlbnRQYXJhbWV0ZXIyJiBwYXJtMiA9IDB1bCApIGNvbnN0 OwpzdGF0aWMgdm9pZAogIHBvc3RFdmVudCAgKCBjb25zdCBJTWVzc2FnZVF1ZXVlSGFuZGxlJiAg ICBoYW5kbGUsCiAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGV2ZW50SWQs CiAgICAgICAgICAgICAgIGNvbnN0IElFdmVudFBhcmFtZXRlcjEmIHBhcm0xID0gMHVsLAogICAg ICAgICAgICAgICBjb25zdCBJRXZlbnRQYXJhbWV0ZXIyJiBwYXJtMiA9IDB1bCApOwpzdGF0aWMg dm9pZAogIHBvc3RFdmVudHMgKCB1bnNpZ25lZCBsb25nICAgICAgICAgICBldmVudElkLAogICAg ICAgICAgICAgICBjb25zdCBJRXZlbnRQYXJhbWV0ZXIxJiBwYXJtMSA9IDB1bCwKICAgICAgICAg ICAgICAgY29uc3QgSUV2ZW50UGFyYW1ldGVyMiYgcGFybTIgPSAwdWwgKTsKCiAKCklTdHJpbmcK ICBhc1N0cmluZyAgICAoICkgY29uc3QsCiAgYXNEZWJ1Z0luZm8gKCApIGNvbnN0OwoKCmZyaWVu ZCBzdGQ6Om9zdHJlYW0KICZvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgICAgICAgYVN0cmVh bSwKICAgICAgICAgICAgICAgIGNvbnN0IElNZXNzYWdlUXVldWVIYW5kbGUmIGFIYW5kbGUgKTsK CgoKCgoKdW5zaWduZWQgbG9uZwogIGFzVW5zaWduZWQgICggKSBjb25zdDsKCiAKICBvcGVyYXRv ciBWYWx1ZSAoICkgY29uc3Q7Cgpwcml2YXRlOgogClZhbHVlCiAgZmhhbmRsZTsKfTsgIAoKY2xh c3MgSUFjY2VsVGJsSGFuZGxlIHsKcHVibGljOgogCgp0eXBlZGVmIHZvaWQqIFZhbHVlOwoKCgoK CgoKCiAKICBJQWNjZWxUYmxIYW5kbGUgKCBWYWx1ZSB2YWx1ZT0wICk7CgogCgpJU3RyaW5nCiAg YXNTdHJpbmcgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICggKSBjb25zdDsKCgpmcmllbmQg c3RkOjpvc3RyZWFtCiAmb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mICAgICAgIGFTdHJlYW0s CiAgICAgICAgICAgICAgICBjb25zdCBJQWNjZWxUYmxIYW5kbGUmIGFIYW5kbGUgKTsKCgoKCgoK dW5zaWduZWQgbG9uZwogIGFzVW5zaWduZWQgICggKSBjb25zdDsKCiAKICBvcGVyYXRvciBWYWx1 ZSAoICkgY29uc3Q7Cgpwcml2YXRlOgogClZhbHVlCiAgZmhhbmRsZTsKfTsgIAoKCgoKY2xhc3Mg SURpc3BsYXlIYW5kbGUgewpwdWJsaWM6CiAKdHlwZWRlZiBfWERpc3BsYXkqIFZhbHVlOwoKIAog IElEaXNwbGF5SGFuZGxlICggVmFsdWUgdmFsdWU9MCApOwoKIAoKSVN0cmluZwogIGFzU3RyaW5n ICAgICggKSBjb25zdCwKICBhc0RlYnVnSW5mbyAoICkgY29uc3Q7CgoKZnJpZW5kIHN0ZDo6b3N0 cmVhbQogJm9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiAgICAgICBhU3RyZWFtLAogICAgICAg ICAgICAgICAgY29uc3QgSURpc3BsYXlIYW5kbGUmIGFIYW5kbGUgKTsKCgoKCgoKdW5zaWduZWQg bG9uZwogIGFzVW5zaWduZWQgICggKSBjb25zdDsKCiAKICBvcGVyYXRvciBWYWx1ZSAoICkgY29u c3Q7Cgpwcml2YXRlOgogClZhbHVlCiAgZmhhbmRsZTsKfTsgIAoKCiMgNjM0ICIvaG9tZS9ha25v bGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2loYW5kbGUuaHBwIgoKCnR5 cGVkZWYgSVdpbmRvd0hhbmRsZSBJTWVudUhhbmRsZTsKCgpjbGFzcyBJQW5jaG9yQmxvY2tIYW5k bGUKewpwdWJsaWM6CiAgICAgCgogICAgdHlwZWRlZiBfWHRBcHBTdHJ1Y3QqICBWYWx1ZTsKCgoK CgoKCgoKCiAgICAgCiAgICBJQW5jaG9yQmxvY2tIYW5kbGUoVmFsdWUgdmFsdWUgPSAwKTsKCiAg ICAgCiAgICBJU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7CiAgICBJU3RyaW5nIGFzRGVidWdJbmZv KCkgY29uc3Q7CgoKICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0KICAgICZvcGVyYXRvcjw8KHN0ZDo6 b3N0cmVhbSYgYVN0cmVhbSwgY29uc3QgSUFuY2hvckJsb2NrSGFuZGxlJiBhSGFuZGxlKTsKCgoK CgogICAgdW5zaWduZWQgbG9uZyBhc1Vuc2lnbmVkKCkgY29uc3Q7CgogICAgIAogICAgb3BlcmF0 b3IgVmFsdWUoKSBjb25zdDsKCnByaXZhdGU6CiAgICAgCiAgICBWYWx1ZSBmaGFuZGxlOwp9OwoK CgoKdHlwZWRlZiBJQW5jaG9yQmxvY2tIYW5kbGUgSUNvbnRleHRIYW5kbGU7CgoKCgogCgogCgoK CgoKCgojcHJhZ21hIGVudW0ocG9wKQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAK CiAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2loYW5kbGUuaW5sIiAxCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCgogCgoKaW5saW5lIElXaW5kb3dIYW5kbGU6OklXaW5kb3dIYW5kbGUgKCBWYWx1 ZSB2YWx1ZSApCiAgOiBmaGFuZGxlKCB2YWx1ZSApCiAgewogIH0KCmlubGluZSB1bnNpZ25lZCBs b25nIElXaW5kb3dIYW5kbGU6OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICByZXR1cm4gKHVuc2ln bmVkIGxvbmcpIHRoaXMtPmZoYW5kbGU7Cn0KCiAKaW5saW5lIElXaW5kb3dIYW5kbGU6Om9wZXJh dG9yIElXaW5kb3dIYW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5k bGU7Cn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSAm YVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElXaW5kb3dIYW5kbGUm IGhhbmRsZSApCgoKCnsKICByZXR1cm4gYVN0cmVhbSA8PCBoYW5kbGUuYXNTdHJpbmcoKTsKfQoK CiAKCgppbmxpbmUgSVN0cmluZ0hhbmRsZTo6SVN0cmluZ0hhbmRsZSAoIFZhbHVlIHZhbHVlICkK ICA6IGZoYW5kbGUoIHZhbHVlICkKICB7CiAgfQoKaW5saW5lIHVuc2lnbmVkIGxvbmcgSVN0cmlu Z0hhbmRsZTo6YXNVbnNpZ25lZCAoICkgY29uc3QKewogIHJldHVybiAodW5zaWduZWQgbG9uZykg dGhpcy0+ZmhhbmRsZTsKfQoKaW5saW5lIElTdHJpbmdIYW5kbGU6Om9wZXJhdG9yIElTdHJpbmdI YW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5kbGU7Cn0KCgppbmxp bmUKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0gJmFTdHJlYW0sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJU3RyaW5nSGFuZGxlJiBoYW5kbGUgKQoK Cgp7CiAgcmV0dXJuIGFTdHJlYW0gPDwgaGFuZGxlLmFzU3RyaW5nKCk7Cn0KCgogCgoKaW5saW5l IElQcm9maWxlSGFuZGxlOjpJUHJvZmlsZUhhbmRsZSAoIFZhbHVlIHZhbHVlICkKICA6IGZoYW5k bGUoIHZhbHVlICkKICB7CiAgfQoKaW5saW5lIHVuc2lnbmVkIGxvbmcgSVByb2ZpbGVIYW5kbGU6 OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRoaXMtPmZo YW5kbGU7Cn0KCmlubGluZSBJUHJvZmlsZUhhbmRsZTo6b3BlcmF0b3IgSVByb2ZpbGVIYW5kbGU6 OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5kbGU7Cn0KCmlubGluZQoKc3Rk Ojpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSAmYVN0cmVhbSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IElQcm9maWxlSGFuZGxlJiBoYW5kbGUgKQoKCgp7CiAg cmV0dXJuIGFTdHJlYW0gPDwgaGFuZGxlLmFzU3RyaW5nKCk7Cn0KCiAKCgppbmxpbmUgSU1lc3Nh Z2VRdWV1ZUhhbmRsZTo6SU1lc3NhZ2VRdWV1ZUhhbmRsZSAoIFZhbHVlIHZhbHVlICkKICA6IGZo YW5kbGUoIHZhbHVlICkKICB7CiAgfQoKaW5saW5lIHVuc2lnbmVkIGxvbmcgSU1lc3NhZ2VRdWV1 ZUhhbmRsZTo6YXNVbnNpZ25lZCAoICkgY29uc3QKewogIHJldHVybiAodW5zaWduZWQgbG9uZykg dGhpcy0+ZmhhbmRsZTsKfQoKaW5saW5lIElNZXNzYWdlUXVldWVIYW5kbGU6Om9wZXJhdG9yIElN ZXNzYWdlUXVldWVIYW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5k bGU7Cn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSAm YVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElNZXNzYWdlUXVldWVI YW5kbGUmIGhhbmRsZSApCgoKCnsKICByZXR1cm4gYVN0cmVhbSA8PCBoYW5kbGUuYXNTdHJpbmco KTsKfQoKIAoKCmlubGluZSBJQWNjZWxUYmxIYW5kbGU6OklBY2NlbFRibEhhbmRsZSAoIFZhbHVl IHZhbHVlICkKICA6IGZoYW5kbGUoIHZhbHVlICkKICB7CiAgfQoKaW5saW5lIHVuc2lnbmVkIGxv bmcgSUFjY2VsVGJsSGFuZGxlOjphc1Vuc2lnbmVkICggKSBjb25zdAp7CiAgcmV0dXJuICh1bnNp Z25lZCBsb25nKSB0aGlzLT5maGFuZGxlOwp9CgppbmxpbmUgSUFjY2VsVGJsSGFuZGxlOjpvcGVy YXRvciBJQWNjZWxUYmxIYW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZo YW5kbGU7Cn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVh bSAmYVN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElBY2NlbFRibEhh bmRsZSYgaGFuZGxlICkKCgoKewogIHJldHVybiBhU3RyZWFtIDw8IGhhbmRsZS5hc1N0cmluZygp Owp9CgoKIAoKCmlubGluZSBJRGlzcGxheUhhbmRsZTo6SURpc3BsYXlIYW5kbGUgKCBWYWx1ZSB2 YWx1ZSApCiAgOiBmaGFuZGxlKHZhbHVlICkKICB7CiAgfQoKaW5saW5lIHVuc2lnbmVkIGxvbmcg SURpc3BsYXlIYW5kbGU6OmFzVW5zaWduZWQgKCApIGNvbnN0CnsKICByZXR1cm4gKHVuc2lnbmVk IGxvbmcpIHRoaXMtPmZoYW5kbGU7Cn0KCmlubGluZSBJRGlzcGxheUhhbmRsZTo6b3BlcmF0b3Ig SURpc3BsYXlIYW5kbGU6OlZhbHVlICggKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZoYW5kbGU7 Cn0KCmlubGluZQoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSAmYVN0 cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElEaXNwbGF5SGFuZGxlJiBo YW5kbGUgKQoKCgp7CiAgcmV0dXJuIGFTdHJlYW0gPDwgaGFuZGxlLmFzU3RyaW5nKCk7Cn0KCgoK CiMgMjQwICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRl L2loYW5kbGUuaW5sIgoKCiAKIAogCmlubGluZSBJQW5jaG9yQmxvY2tIYW5kbGU6OklBbmNob3JC bG9ja0hhbmRsZShWYWx1ZSB2YWx1ZSkgOgoKICAgIGZoYW5kbGUoIHZhbHVlICkKewp9Cgppbmxp bmUgdW5zaWduZWQgbG9uZyBJQW5jaG9yQmxvY2tIYW5kbGU6OmFzVW5zaWduZWQgKCApIGNvbnN0 CnsKICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgdGhpcy0+ZmhhbmRsZTsKfQoKaW5saW5lIElB bmNob3JCbG9ja0hhbmRsZTo6b3BlcmF0b3IgSUFuY2hvckJsb2NrSGFuZGxlOjpWYWx1ZSgpIGNv bnN0CnsKICAgIHJldHVybiB0aGlzLT5maGFuZGxlOwp9CgppbmxpbmUKCnN0ZDo6b3N0cmVhbSYg b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIGFTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJQW5jaG9yQmxvY2tIYW5kbGUmIGhhbmRsZSkKCgoKewogICAgcmV0dXJuIGFTdHJl YW0gPDwgaGFuZGxlLmFzU3RyaW5nKCk7Cn0KCiAKCiMgNzA5ICIvaG9tZS9ha25vbGwvaW9jc3Jj L2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNsdWRlL2loYW5kbGUuaHBwIiAyCgogCgogCiNwcmFn bWEgaW5mbyhub25lKQojcHJhZ21hIHJlcG9ydChwb3ApCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQog CgogCgojIDMxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJpbi9pbmNs dWRlL2lhcHAuaHBwIiAyCgoKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hh cmVkLmJpbi9pbmNsdWRlL2lyZXNsaWIuaHBwIiAxCgoKCiAKIAogCgoKCgoKCgoKCgoKCgoKCiAK IAogCiAKIAogCgogCgoKIAoKIAojcHJhZ21hIGluZm8obm9uZSkKI3ByYWdtYSByZXBvcnQobGV2 ZWwsIF9fSU9DX0hFQURFUl9SRVBPUlRfTEVWRUwpCiNwcmFnbWEgaW5mbyhyZXN0b3JlKQogCgoK IAoKI3ByYWdtYSBuYW1lbWFuZ2xpbmcoX19JT0NfTkFNRU1BTkdMSU5HX1NDSEVNRSkKCgoKCgoj cHJhZ21hIGVudW0oNCkKCgoKCgoKCiAKCiAKIAoKIApjbGFzcyBJU3RyaW5nOwpjbGFzcyBJRExM TW9kdWxlOwpjbGFzcyBJU2l6ZTsKY2xhc3MgSVdpbmRvdzsKY2xhc3MgSU1lbnU7CmNsYXNzIElS ZXNMaWJQcml2YXRlRGF0YTsKY2xhc3MgSUR5bkxpbmtMaWJQcml2YXRlRGF0YTsKY2xhc3MgSURM TE1vZHVsZTsKIAoKIAoKY2xhc3MgSVJlc291cmNlTGlicmFyeSAgewpwdWJsaWM6CiAKICBJUmVz b3VyY2VMaWJyYXJ5ICAgKCApOwogIElSZXNvdXJjZUxpYnJhcnkgICAoIGNvbnN0IElSZXNvdXJj ZUxpYnJhcnkmIHJlc0xpYnJhcnkgKTsKdmlydHVhbAogfklSZXNvdXJjZUxpYnJhcnkgICAoICk7 CgpJUmVzb3VyY2VMaWJyYXJ5CiAmb3BlcmF0b3I9ICAgICAgICAgICAoIGNvbnN0IElSZXNvdXJj ZUxpYnJhcnkmIHJlc0xpYnJhcnkgKTsKCiAKdmlydHVhbCBJU3RyaW5nCiAgZmlsZU5hbWUgICAg ICAgICAgICggKSBjb25zdDsKCnZpcnR1YWwgYm9vbAogIGlzT3BlbiAgICAgICAgICAgICAoICkg Y29uc3Q7Cgp2aXJ0dWFsIElNb2R1bGVIYW5kbGUKICBoYW5kbGUgICAgICAgICAgICAgKCApIGNv bnN0OwoKIAp2aXJ0dWFsIElTdHJpbmcKICBhc1N0cmluZyAgICAgICAgICAgKCApIGNvbnN0LAog IGFzRGVidWdJbmZvICAgICAgICAoICkgY29uc3Q7CgoKIAp2aXJ0dWFsIElTdHJpbmcKICBsb2Fk U3RyaW5nICAgICAgKCB1bnNpZ25lZCBsb25nIHN0cmluZ0lkICApIGNvbnN0LAogIGxvYWRNZXNz YWdlICAgICAoIHVuc2lnbmVkIGxvbmcgbWVzc2FnZUlkICkgY29uc3Q7CgojIDExOCAiL2hvbWUv YWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pcmVzbGliLmhwcCIK CgoKdmlydHVhbCB2b2lkCiAgbG9hZE1lbnUgICAgICAgICggdW5zaWduZWQgbG9uZyAgICAgICAg bWVudUlkLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IElXaW5kb3dIYW5kbGUmIG1lbnVIYW5k bGUsCiAgICAgICAgICAgICAgICAgICAgSU1lbnUqICAgICAgICAgICAgICAgcGFyZW50TWVudSAp IGNvbnN0OwoKCnZpcnR1YWwgSUFjY2VsVGJsSGFuZGxlCiAgbG9hZEFjY2VsVGFibGUgICggdW5z aWduZWQgbG9uZyBhY2NlbFRhYmxlSWQgKSBjb25zdDsKCnZpcnR1YWwgSVJlc291cmNlTGlicmFy eQogJmxvYWRIZWxwVGFibGUgICAoIElXaW5kb3cqICAgICAgaGVscEluc3RhbmNlLAogICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaGVscFRhYmxlSWQgKSBjb25zdDsKCnZpcnR1YWwg SVBvaW50ZXJIYW5kbGUKICBsb2FkSWNvbiAgICAgICAgKCB1bnNpZ25lZCBsb25nIGljb25JZCwK ICAgICAgICAgICAgICAgICAgICBib29sICAgICAgIGNhY2hlZCA9IHRydWUgKSBjb25zdCwKICBs b2FkUG9pbnRlciAgICAgKCB1bnNpZ25lZCBsb25nIGljb25JZCwKICAgICAgICAgICAgICAgICAg ICBib29sICAgICAgIGNhY2hlZCA9IHRydWUgKSBjb25zdDsKCnZpcnR1YWwgSUJpdG1hcEhhbmRs ZQogIGxvYWRCaXRtYXAgICAgICAoIHVuc2lnbmVkIGxvbmcgYml0bWFwSWQsCiAgICAgICAgICAg ICAgICAgICAgYm9vbCAgICAgICBjYWNoZWQgPSB0cnVlICkgY29uc3QsCiAgbG9hZEJpdG1hcCAg ICAgICggdW5zaWduZWQgbG9uZyBiaXRtYXBJZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBJ U2l6ZSYgIGJpdG1hcFNpemUsCiAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICBjYWNoZWQg PSB0cnVlICkgY29uc3Q7Cgp2aXJ0dWFsIElTdHJpbmcKICB0cnlUb0xvYWRTdHJpbmcgICAgICAo IHVuc2lnbmVkIGxvbmcgc3RyaW5nSWQgICkgY29uc3QsCiAgdHJ5VG9Mb2FkTWVzc2FnZSAgICAg KCB1bnNpZ25lZCBsb25nIG1lc3NhZ2VJZCApIGNvbnN0OwoKdmlydHVhbCBJUG9pbnRlckhhbmRs ZQogIHRyeVRvTG9hZEljb24gICAgICAgICggdW5zaWduZWQgbG9uZyBpY29uSWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICBib29sICAgICAgIGNhY2hlZCA9IHRydWUgKSBjb25zdCwKICB0cnlU b0xvYWRQb2ludGVyICAgICAoIHVuc2lnbmVkIGxvbmcgaWNvbklkLAogICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCAgICAgICBjYWNoZWQgPSB0cnVlICkgY29uc3Q7Cgp2aXJ0dWFsIElCaXRt YXBIYW5kbGUKICB0cnlUb0xvYWRCaXRtYXAgICAgICggdW5zaWduZWQgbG9uZyBiaXRtYXBJZCwK ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAgICAgICBjYWNoZWQgPSB0cnVlICkgY29uc3Qs CiAgdHJ5VG9Mb2FkQml0bWFwICAgICAoIHVuc2lnbmVkIGxvbmcgYml0bWFwSWQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IElTaXplJiAgYml0bWFwU2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCAgICAgICBjYWNoZWQgPSB0cnVlICkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CgoK dmlydHVhbCB2b2lkCiAqcmVzb3VyY2VBZGRyZXNzICggKSBjb25zdDsKCgpwcml2YXRlOgogCklT dHJpbmcKIGxvYWRUZXh0ICAgICAgICAoIGJvb2wgICAgICAgaXNTdHJpbmcsCiAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmluZ0lELAogICAgICAgICAgICAgICAgICAgYm9vbCAg ICAgICB0aHJvd0V4Y2VwdGlvbiA9IHRydWUgKSBjb25zdDsKCklSZXNMaWJQcml2YXRlRGF0YQog KmZFeHRlbmRlZERhdGE7CgpJTW9kdWxlSGFuZGxlCiAgZk1vZHVsZUhhbmRsZTsKCgpmcmllbmQg Y2xhc3MgSUFpeFJlc291cmNlSW1wOwoKCgogIAogIHB1YmxpYzoKICB2aXJ0dWFsIHZvaWQKICAg IGxvYWRBY2NlbFRhYmxlICAoIHVuc2lnbmVkIGxvbmcgICAgICAgIGFjY2VsVGFibGVJZCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IElXaW5kb3dIYW5kbGUmIG1lbnUgKSBjb25zdDsKICAK Cgp9OyAgIAoKCmNsYXNzIElEeW5hbWljTGlua0xpYnJhcnkgOiBwdWJsaWMgSVJlc291cmNlTGli cmFyeQp7CnR5cGVkZWYgSVJlc291cmNlTGlicmFyeQogIEluaGVyaXRlZDsKcHVibGljOgplbnVt IEVTZWFyY2hMb2NhdGlvbiB7IGtPU0RlZmF1bHRTZWFyY2gsIGtOTFNQYXRoU2VhcmNoIH07CiAK ICBJRHluYW1pY0xpbmtMaWJyYXJ5ICAgKCBjb25zdCBjaGFyKiAgICAgICAgICAgICAgICBmaWxl TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBFU2VhcmNoTG9jYXRpb24gICAgICAgICAg ICBzZWFyY2hMb2NhdGlvbiA9IGtPU0RlZmF1bHRTZWFyY2ggKTsKCgoKICBJRHluYW1pY0xpbmtM aWJyYXJ5ICAgKCBjb25zdCBJRHluYW1pY0xpbmtMaWJyYXJ5JiBkbGxMaWJyYXJ5ICk7Cgp2aXJ0 dWFsCiAgfklEeW5hbWljTGlua0xpYnJhcnkgICggKTsKCklEeW5hbWljTGlua0xpYnJhcnkKICZv cGVyYXRvcj0gICAgICAgICAgICAgKCBjb25zdCBJRHluYW1pY0xpbmtMaWJyYXJ5JiBkbGxMaWJy YXJ5ICk7CgogCnZpcnR1YWwgSUR5bmFtaWNMaW5rTGlicmFyeQogJm9wZW4gICAgICAgICAgICAg ICAgKCApLAogJmNsb3NlICAgICAgICAgICAgICAgKCApOwoKIAp2b2lkCiAqcHJvY0FkZHJlc3Mg ICAgICAgKCBjb25zdCBjaGFyKiAgIHByb2NlZHVyZU5hbWUgKSBjb25zdDsKCgoKCgoKCgoKCgoK IAp2aXJ0dWFsIGJvb2wKICBpc09wZW4gICAgICAgICAgICggKSBjb25zdDsKCnZpcnR1YWwgSVN0 cmluZwogIGZpbGVOYW1lICAgICAgICAgKCApIGNvbnN0OwoKdmlydHVhbCBJTW9kdWxlSGFuZGxl CiAgaGFuZGxlICAgICAgICAgICAoICkgY29uc3Q7CgogCnZpcnR1YWwgSVN0cmluZwogIGFzU3Ry aW5nICAgICAgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICAgICAgKCApIGNvbnN0OwoKCnBy b3RlY3RlZDoKCgp2aXJ0dWFsIHZvaWQKICpyZXNvdXJjZUFkZHJlc3MgKCApIGNvbnN0OwoKCnBy aXZhdGU6CiAKCklETExNb2R1bGUKICpmRExMTW9kdWxlOwoKSUR5bkxpbmtMaWJQcml2YXRlRGF0 YQogKmZQcml2YXRlRGF0YTsKfTsKCgpjbGFzcyBJUmVzb3VyY2VJZAp7CnB1YmxpYzoKIAogIElS ZXNvdXJjZUlkICAgICAgKCB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICByZXNvdXJjZUlkLAog ICAgICAgICAgICAgICAgICAgICBjb25zdCBJUmVzb3VyY2VMaWJyYXJ5JiAgICByZXNvdXJjZUxp YnJhcnkgKTsKCiAgSVJlc291cmNlSWQgICAgICAoIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAg IHJlc291cmNlSWQgKTsKCiAgSVJlc291cmNlSWQgICAgICAoIGNvbnN0IElSZXNvdXJjZUlkJiAg ICAgICAgIHJlc291cmNlSWQgKTsKCiAKdW5zaWduZWQgbG9uZwogIGlkICAgICAgICAgICAgICAg ICAgICAoICkgY29uc3Q7CgpvcGVyYXRvciB1bnNpZ25lZCBsb25nICAoICkgY29uc3Q7Cgpjb25z dCBJUmVzb3VyY2VMaWJyYXJ5CiAmcmVzb3VyY2VMaWJyYXJ5ICAgICAgICggKSBjb25zdDsKCiAK SVN0cmluZwogIGFzU3RyaW5nICAgICAgICAgKCApIGNvbnN0LAogIGFzRGVidWdJbmZvICAgICAg KCApIGNvbnN0OwoKcHJpdmF0ZToKIApJUmVzb3VyY2VJZAogICZvcGVyYXRvcj0gICAgKCBjb25z dCBJUmVzb3VyY2VJZCYgcmVzb3VyY2VJZCApOwoKIAp1bnNpZ25lZCBsb25nCiAgZlJlc0lkOwoK Y29uc3QgSVJlc291cmNlTGlicmFyeQogJmZSZXNMaWJyYXJ5OwoKfTsgIAoKIAoKIAoKCgoKCgoK I3ByYWdtYSBlbnVtKHBvcCkKCgojcHJhZ21hIG5hbWVtYW5nbGluZyhwb3ApCgoKCgogCgogCiMg MSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pcmVz bGliLmlubCIgMQoKCgogCiAKIAoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgogCiMgMSAiL2hv bWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pYXBwLmhwcCIg MQojIDIwOCAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVk ZS9pYXBwLmhwcCIKCiMgMjkgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQu YmluL2luY2x1ZGUvaXJlc2xpYi5pbmwiIDIKCiAKCmlubGluZSBJUmVzb3VyY2VJZDo6SVJlc291 cmNlSWQodW5zaWduZWQgbG9uZyByZXNvdXJjZUlkLCBjb25zdCBJUmVzb3VyY2VMaWJyYXJ5JiBy ZXNvdXJjZUxpYnJhcnkpCiAgICAgICAgICAgICAgICAgICAgIDogZlJlc0xpYnJhcnkocmVzb3Vy Y2VMaWJyYXJ5KSwgZlJlc0lkKHJlc291cmNlSWQpCnsgfQoKaW5saW5lIElSZXNvdXJjZUlkOjpJ UmVzb3VyY2VJZChjb25zdCBJUmVzb3VyY2VJZCYgcmVzb3VyY2VJZCkKICAgICAgICAgICAgICAg ICAgICAgOiBmUmVzTGlicmFyeShyZXNvdXJjZUlkLmZSZXNMaWJyYXJ5KSwgZlJlc0lkKHJlc291 cmNlSWQuZlJlc0lkKQp7IH0KCgppbmxpbmUgY29uc3QgSVJlc291cmNlTGlicmFyeSYgSVJlc291 cmNlSWQ6OnJlc291cmNlTGlicmFyeSgpIGNvbnN0CnsgcmV0dXJuIGZSZXNMaWJyYXJ5OyB9Cgpp bmxpbmUgSVJlc291cmNlSWQ6Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoICkgICBjb25zdAp7IHJl dHVybiB0aGlzLT5mUmVzSWQ7IH0KCmlubGluZSB1bnNpZ25lZCBsb25nIElSZXNvdXJjZUlkOjpp ZCggKSAgIGNvbnN0CnsgcmV0dXJuIHRoaXMtPmZSZXNJZDsgfQoKIAoKIyAzMzQgIi9ob21lL2Fr bm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXJlc2xpYi5ocHAiIDIK CiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFnbWEgcmVwb3J0KHBvcCkKI3ByYWdtYSBpbmZv KHJlc3RvcmUpCiAKCiAKCiMgMzMgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFy ZWQuYmluL2luY2x1ZGUvaWFwcC5ocHAiIDIKCiAKCiAKI3ByYWdtYSBpbmZvKG5vbmUpCiNwcmFn bWEgcmVwb3J0KGxldmVsLCBfX0lPQ19IRUFERVJfUkVQT1JUX0xFVkVMKQojcHJhZ21hIGluZm8o cmVzdG9yZSkKIAoKIAoKCgogCgogCgojcHJhZ21hIG5hbWVtYW5nbGluZyhfX0lPQ19OQU1FTUFO R0xJTkdfU0NIRU1FKQoKCgoKCiNwcmFnbWEgZW51bSg0KQoKCgoKCgoKIAoKIAogCgogCmNsYXNz IElDdXJyZW50QXBwbGljYXRpb247CmNsYXNzIElDdXJyZW50QXBwbGljYXRpb25EYXRhOwpjbGFz cyBJUmVzb3VyY2VMaWJyYXJ5OwpjbGFzcyBJQ29sb3JNYXA7CmNsYXNzIElTdHJpbmc7CnRlbXBs YXRlPGNsYXNzIFQ+IGNsYXNzIElTdGF0aWNPYmplY3RIZWxwZXI7CiAKCiAKCmNsYXNzIElBcHBs aWNhdGlvbiA6IHB1YmxpYyBJTm9uR1VJQXBwbGljYXRpb24gewp0eXBlZGVmIElOb25HVUlBcHBs aWNhdGlvbgogIEluaGVyaXRlZDsKcHVibGljOgogCnN0YXRpYyBJQ3VycmVudEFwcGxpY2F0aW9u CiAmY3VycmVudCAoICk7Cgpwcm90ZWN0ZWQ6CiAKICBJQXBwbGljYXRpb24gKCBjb25zdCBJUHJv Y2Vzc0lkJiBpZCApOwp2aXJ0dWFsCiB+SUFwcGxpY2F0aW9uICggKTsKCnByaXZhdGU6CiAKc3Rh dGljIElDdXJyZW50QXBwbGljYXRpb24KICpwQ3VycmVudDsKfTsgIAoKCmNsYXNzIElDdXJyZW50 QXBwbGljYXRpb24gOiBwdWJsaWMgSUFwcGxpY2F0aW9uIHsKdHlwZWRlZiBJQXBwbGljYXRpb24K ICBJbmhlcml0ZWQ7CnB1YmxpYzoKIAp2aXJ0dWFsIGludAogIGFyZ2MgICAgKCApIGNvbnN0OwoK dmlydHVhbCBJU3RyaW5nCiAgYXJndiAgICAoIGludCBhcmd1bWVudE51bWJlciApIGNvbnN0OwoK dmlydHVhbCBJQ3VycmVudEFwcGxpY2F0aW9uCiAmc2V0QXJncyAoIGludCAgICAgICAgICAgICAg IGFyZ2MsCiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGFyZ3ZbXSApOwoKIAp2aXJ0dWFs IElSZXNvdXJjZUxpYnJhcnkKICZ1c2VyUmVzb3VyY2VMaWJyYXJ5ICAgICggKSBjb25zdCwKICZy ZXNvdXJjZUxpYnJhcnkgICAgICAgICggKSBjb25zdDsKCnZpcnR1YWwgSUN1cnJlbnRBcHBsaWNh dGlvbgogJnNldFVzZXJSZXNvdXJjZUxpYnJhcnkgKCBjb25zdCBjaGFyKiAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzTGliTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgSUR5bmFt aWNMaW5rTGlicmFyeTo6RVNlYXJjaExvY2F0aW9uIHNlYXJjaExvY2F0aW9uID0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSUR5bmFtaWNMaW5rTGlicmFyeTo6a09TRGVmYXVs dFNlYXJjaCksCiAmc2V0UmVzb3VyY2VMaWJyYXJ5ICAgICAoIGNvbnN0IGNoYXIqIHJlc0xpYk5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIElEeW5hbWljTGlua0xpYnJhcnk6OkVTZWFy Y2hMb2NhdGlvbiBzZWFyY2hMb2NhdGlvbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElEeW5hbWljTGlua0xpYnJhcnk6OmtPU0RlZmF1bHRTZWFyY2gpOwoKCiAKdmlydHVh bCBJQ29sb3JNYXAKICZjb2xvck1hcCAgICAgICAgICAgICAgICggKSBjb25zdDsKCnZpcnR1YWwg SUN1cnJlbnRBcHBsaWNhdGlvbgogJmFkb3B0Q29sb3JNYXAgICAgICAgICAgKCBJQ29sb3JNYXAq IGNvbG9yTWFwICk7CgogCnZpcnR1YWwgSUN1cnJlbnRBcHBsaWNhdGlvbgogJnJ1biAgKCApLAog JmV4aXQgKCApOwoKcHJvdGVjdGVkOgogCiAgSUN1cnJlbnRBcHBsaWNhdGlvbiAoICk7CnZpcnR1 YWwKIH5JQ3VycmVudEFwcGxpY2F0aW9uICggKTsKCiAKCgoKCgpwcml2YXRlOgogCmZyaWVuZCBj bGFzcyBJQXBwbGljYXRpb247CmZyaWVuZCBjbGFzcyBJU3RhdGljT2JqZWN0SGVscGVyPCBJQ3Vy cmVudEFwcGxpY2F0aW9uID47CgpJUmVzb3VyY2VMaWJyYXJ5CiAqaWNsdWlMaWIsCiAqdXNlckxp YjsKYm9vbAogIGV4ZVJlc291cmNlOwppbnQKICBhcmdDb3VudDsKSVN0cmluZwogKmFyZ1ZhbHVl OwoKCgoKSUN1cnJlbnRBcHBsaWNhdGlvbkRhdGEKICpwQ3VycmVudEFwcGxpY2F0aW9uRGF0YTsK SUNvbG9yTWFwCiAqZkNvbG9yTWFwOwp9OyAgCgogCgogCgoKCgoKCgojcHJhZ21hIGVudW0ocG9w KQoKCiNwcmFnbWEgbmFtZW1hbmdsaW5nKHBvcCkKCgoKCiAKCiAKIAoKIAojcHJhZ21hIGluZm8o bm9uZSkKI3ByYWdtYSByZXBvcnQocG9wKQojcHJhZ21hIGluZm8ocmVzdG9yZSkKIAoKIAoKIyAx NCAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0xvZ0ZhY2lsaXR5LmhwcCIgMgoKICAg IAogICAgCiAgICAKIyAxICIvaG9tZS9ha25vbGwvaW9jc3JjL2xpbnV4X3MzOTAtc2hhcmVkLmJp bi9pbmNsdWRlL2l0aW1lLmhwcCIgMQojIDIwMSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pdGltZS5ocHAiCgoKCgoKCiMgMTcgIi9ob21lL3hodTYw MzEvdHNmdy9JbmNsdWRlL1RTRldMb2dGYWNpbGl0eS5ocHAiIDIKCiAgICAKICAgIAojIDEgIi9o b21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2luY2x1ZGUvaXN0cGFyc2Uu aHBwIiAxCiMgMTAgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmluL2lu Y2x1ZGUvaXN0cGFyc2UuaHBwIgoKCgojIDIyNSAiL2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9z MzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pc3RwYXJzZS5ocHAiCgoKCgoKIyAxOSAiL2hvbWUveGh1 NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0xvZ0ZhY2lsaXR5LmhwcCIgMgoKICAgIAoKICAgICAKICAg IAojIDEgIi9ob21lL3hodTYwMzEvdHNmdy9JbmNsdWRlL1RTRldMb2dEZXZpY2UuaHBwIiAxCiAK IAogCiAKIAoKCiAgICAKCiAgICAgCiAgICAKICAgIAoKICAgICAKICAgICAKCgogICAgY2xhc3Mg VFNGV0xvZ0RldmljZSB7CiAgICBwdWJsaWM6CgogICAgICAgICAKCgogICAgICAgIHZpcnR1YWwg flRTRldMb2dEZXZpY2UoKTsKCiAgICAgICAgIAoKCiAgICAgICAgdm9pZCB3cml0ZShjb25zdCBJ U3RyaW5nICZhTG9nU3RyaW5nKTsKCiAgICAgICAgIAoKCiAgICAgICAgSVN0cmluZyBjb25zdCAm ZGV2aWNlTmFtZSh2b2lkKSBjb25zdDsKCgogICAgcHJvdGVjdGVkOgoKICAgICAgICAgCgoKICAg ICAgICBUU0ZXTG9nRGV2aWNlKCk7CgogICAgICAgICAKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3 cml0ZUltcGxlbWVudGF0aW9uKGNvbnN0IElTdHJpbmcgJmFMb2dTdHJpbmcpID0gMDsKCiAgICAg ICAgIAoKCiAgICAgICAgdmlydHVhbCBJU3RyaW5nIGNvbnN0ICZkZXZpY2VOYW1lSW1wbGVtZW50 YXRpb24odm9pZCkgY29uc3QgPSAwOwoKICAgIHByaXZhdGU6CgogICAgICAgICAKICAgICAgICBJ UHJpdmF0ZVJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlRGV2aWNl TG9jazsKCiAgICB9OwoKICAgICAKICAgIGlubGluZSBJU3RyaW5nIGNvbnN0ICZrZXkoVFNGV0xv Z0RldmljZSBjb25zdCAmYUVsZW1lbnQpIHsKCiAgICAgICAgcmV0dXJuKGFFbGVtZW50LmRldmlj ZU5hbWUoKSk7CiAgICB9CgogICAgaW5saW5lIElTdHJpbmcgY29uc3QgJmtleShUU0ZXTG9nRGV2 aWNlIGNvbnN0ICphRWxlbWVudCkgewoKICAgICAgICByZXR1cm4oYUVsZW1lbnQtPmRldmljZU5h bWUoKSk7CiAgICB9CgoKCiAKIAogCiAKIAojIDIzICIvaG9tZS94aHU2MDMxL3RzZncvSW5jbHVk ZS9UU0ZXTG9nRmFjaWxpdHkuaHBwIiAyCgogICAgCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0lu Y2x1ZGUvVFNGV0xvZ0RldmljZVJlcG9zaXRvcnkuaHBwIiAxCiAKIAogCiAKIAoKCiAgICAKCiAg ICAgCiAgICAKICAgIAogICAgCgogICAgIAogICAgCgogICAgIAogICAgIAoKCiAgICBjbGFzcyBU U0ZXTG9nRGV2aWNlUmVwb3NpdG9yeSB7CiAgICBwdWJsaWM6CgogICAgICAgICAKCgogICAgICAg IHZpcnR1YWwgflRTRldMb2dEZXZpY2VSZXBvc2l0b3J5KCk7CgogICAgICAgICAKCgogICAgICAg IHN0YXRpYyBUU0ZXTG9nRGV2aWNlUmVwb3NpdG9yeSAqZ2V0SW5zdGFuY2Uodm9pZCk7CgogICAg ICAgICAKCgogICAgICAgIFRTRldMb2dEZXZpY2UgKmxvZ0RldmljZUZvcihjb25zdCBJU3RyaW5n ICZhRGV2aWNlKTsKCiAgICAgICAgIAoKCiAgICAgICAgdm9pZCByZWdpc3RlckxvZ0RldmljZShU U0ZXTG9nRGV2aWNlICphRGV2aWNlKTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICAgICAKCgogICAg ICAgIFRTRldMb2dEZXZpY2VSZXBvc2l0b3J5KCk7CgogICAgICAgICAKICAgICAgICBJUHJpdmF0 ZVJlc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlUmVwb3NpdG9yeVJl c291cmNlOwogICAgICAgIElLZXlTZXQ8VFNGV0xvZ0RldmljZSAqLCBJU3RyaW5nPiAgICAgICAg ICAgICAgICB0aGVSZXBvc2l0b3J5OwoKICAgIHByaXZhdGU6CgogICAgICAgICAKICAgICAgICBz dGF0aWMgVFNGV0xvZ0RldmljZVJlcG9zaXRvcnkgICAgICAgICAgICAgICAgICAgKnRoZUluc3Rh bmNlOwoKICAgIH07CgoKCgogCiAKIAogCiAKIyAyNCAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1 ZGUvVFNGV0xvZ0ZhY2lsaXR5LmhwcCIgMgoKCiAgICAgCiAgICBjbGFzcyBUU0ZXTG9nRmFjaWxp dHkgewogICAgcHVibGljOgoKICAgICAgICAgCgoKICAgICAgICBlbnVtIFNldmVyaXR5IHsKICAg ICAgICAgICAgaW5mb3JtYXRpb24gPSAwLAogICAgICAgICAgICB3YXJuaW5nLAogICAgICAgICAg ICBlcnJvciwKICAgICAgICAgICAgcGFuaWMKICAgICAgICB9OwoKICAgICAgICAgCgoKICAgICAg ICBlbnVtIExvZ0xldmVsIHsKICAgICAgICAgICAgZXJyb3JzT25seSA9IDAsCiAgICAgICAgICAg IGVycm9yc0FuZFdhcm5pbmdzLAogICAgICAgICAgICBhbGxNZXNzYWdlcwogICAgICAgIH07Cgog ICAgICAgICAKCgogICAgICAgIGVudW0gTG9nRm9ybWF0IHsKICAgICAgICAgICAgcG9vciA9IDAs CiAgICAgICAgICAgIHZlcmJvc2UKICAgICAgICB9OwoKCiAgICAgICAgIAoKCiAgICAgICAgflRT RldMb2dGYWNpbGl0eSgpOwoKICAgICAgICAgCgoKICAgICAgICBzdGF0aWMgVFNGV0xvZ0ZhY2ls aXR5ICogZ2V0SW5zdGFuY2Uodm9pZCk7CgogICAgICAgICAKCgogICAgICAgIHZvaWQgc2V0TG9n TGV2ZWwoY29uc3QgZW51bSBMb2dMZXZlbCAmYUxldmVsKTsKICAgICAgICAKICAgICAgICAgCgoK ICAgICAgICBjb25zdCBlbnVtIExvZ0xldmVsICZsb2dMZXZlbCh2b2lkKSBjb25zdDsKCiAgICAg ICAgIAoKCiAgICAgICAgdm9pZCBzZXRMb2dGb3JtYXQoY29uc3QgZW51bSBMb2dGb3JtYXQgJmFG b3JtYXQpOwogICAgICAgIAogICAgICAgICAKCgogICAgICAgIGNvbnN0IGVudW0gTG9nRm9ybWF0 ICZsb2dGb3JtYXQodm9pZCkgY29uc3Q7CgogICAgICAgICAKCgogICAgICAgIHZvaWQgd3JpdGVM b2coY29uc3QgSVN0cmluZyAgICAgICAmYUxvZ0VudHJ5LAogICAgICAgICAgICAgICAgICAgICAg Y29uc3QgSVN0cmluZyAgICAgICAmYUZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyAgICAgICBhTGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGVudW0gU2V2ZXJpdHkgJmFTZXZlcml0eSk7CgogICAgICAgICAKCgogICAgICAgIHZvaWQgd3Jp dGVMb2coY29uc3QgSVN0cmluZyAmYUZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBhTGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW0g U2V2ZXJpdHkgJmFTZXZlcml0eSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFG b3JtYXRTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAuLi4pOwoKICAgICAgICAgCgoKICAg ICAgICB2b2lkIHdyaXRlTG9nKElFeGNlcHRpb24gJmFFeGNlcHRpb24sIAogICAgICAgICAgICAg ICAgICAgICAgY29uc3QgSVN0cmluZyAmYUZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBhTGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVu dW0gU2V2ZXJpdHkgJmFTZXZlcml0eSk7CgoKICAgICAgICAgCgoKICAgICAgICB2b2lkIGR1bXBC dWZmZXIoY29uc3QgSVN0cmluZyAgICAgICAmYUxvZ0VudHJ5LAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkICAgICAgICAgICphQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nICAgICAgIGFCdWZmZXJMZW4sCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElTdHJpbmcgICAgICAgJmFGaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyAgICAgICBhTGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZW51bSBTZXZlcml0eSAmYVNldmVyaXR5KTsKICAgIHByaXZhdGU6CgogICAgICAgICAK CgoKCiAgICAgICAgVFNGV0xvZ0ZhY2lsaXR5KCk7CgogICAgICAgICAKCgogICAgICAgIGJvb2wg aGF2ZVRvTG9nKGNvbnN0IGVudW0gU2V2ZXJpdHkgJmFTZXZlcml0eSkgY29uc3Q7CgogICAgICAg ICAKCgogICAgICAgIElTdHJpbmcgY3JlYXRlTG9nSGVhZGVyKGNvbnN0IElTdHJpbmcgICAgICAg JmFGaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n ICAgICAgIGFMaW5lTnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGVudW0gU2V2ZXJpdHkgJmFTZXZlcml0eSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgIAoKCiAgICAgICAgSVN0cmluZyBsb2dMZXZlbEFzU3RyaW5nKGNvbnN0IGVu dW0gTG9nTGV2ZWwgJmFMZXZlbCkgY29uc3Q7CiAgICAgICAgCiAgICAgICAgIAoKCiAgICAgICAg SVN0cmluZyBsb2dGb3JtYXRBc1N0cmluZyhjb25zdCBlbnVtIExvZ0Zvcm1hdCAmYUZvcm1hdCkg Y29uc3Q7CgogICAgICAgICAKICAgICAgICBlbnVtIExvZ0xldmVsICAgICAgICAgICAgICAgICAg ICAgICB0aGVMb2dMZXZlbDsKICAgICAgICBlbnVtIExvZ0Zvcm1hdCAgICAgICAgICAgICAgICAg ICAgICB0aGVMb2dGb3JtYXQ7CgogICAgICAgICAKICAgICAgICBzdGF0aWMgVFNGV0xvZ0ZhY2ls aXR5ICAgICAgICAgICAgICAqdGhlSW5zdGFuY2U7CiAgICB9OwoKICAgICAKICAgIAoKCgoKICAg IAoKCgoKCgoKIAogCiAKIAogCiMgMTYgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9t cXF1ZXVlLmNwcCIgMgoKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21xcXVl dWUuaHBwIiAxCgoKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21xbWVzc2Fn ZS5ocHAiIDEKCgoKIyAxICIvdXNyL2luY2x1ZGUvY21xYy5oIiAxIDMKIAogICAKICAKICAKICAK ICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAKICAK ICAKICAKICAKCiAKICAgZXh0ZXJuICJDIiB7CiAKICAKICAKICAKCiAgCiAKCiAgCiAKCiAgCiAK IAoKICAKIAoKCgogIAogIAogIAoKICAKIAoKICAKIAoKICAKIAogCiAKCiAgCiAKIAogCgogIAog CgogIAogCiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKIAogCiAKIAogCgogIAogCgogIAogCiAK CiAgCiAKCiAgCiAKIAogCiAKCiAgCiAKIAoKICAKIAogCiAKIAoKICAKIAoKICAKIAoKICAKIAog CiAKIAogCiAKIAoKICAKIAogCiAKIAogCiAKIAoKICAKIAogCiAKIAoKICAKIAogCiAKIAoKICAK ICAKICAKCiAgCiAKCiAgCiAKCiAgCiAKIAogCgogIAogCiAKIAoKCiAgCiAgCiAgCgogIAogCgog IAogCgogIAogCiAKCiAgCiAKIAoKICAKICAKCgogIAogIAogIAoKICAKIAoKICAKIAoKICAKIAog CgoKICAKICAKICAKCiAgCiAKCiAgCiAKCiAgCiAKIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogIAogCgogIAogCiAKIAogCiAKCiAgCiAKIAogCiAK IAogCiAKCiAgCiAKIAogCgogIAogCiAKIAoKICAKIAogCgogIAogCgogIAogCgoKICAKIAoKCiAg CiAgCiAgCgogIAogCgogIAogCgogIAogCiAKCiAgCiAKCiAgCiAKCiAgCiAKCiAgCiAKCiAgCiAK CiAgCiAKCgogIAogCiAKIAoKICAKIAogCgogIAogCiAKCgogIAogIAogIAoKICAKIAoKICAKIAoK ICAKIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgog IAogCiAKIAoKICAKIAogCiAKIAogCiAKIAogCiAKIAoKICAKIAoKICAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAoKICAKIAoKICAKIAogCiAKIAoKICAKIAogCiAKCiAgCiAKIAog CgogIAogCiAKIAogCgogIAogCiAKIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAoKICAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CgogIAogCgogIAogCiAKIAoKICAKIAoKICAKIAoKCgogIAogCgogCgoKCiAgCiAKCgoKIAoKCgoK CgogIAogCgoKICAKIAoKCgoKICAKIAogCiAKIAogCiAKIAogCiAKCiAgCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKICAKIAoKICAKIAoK CgogIAogCiAKIAogCiAKIAogCgogIAogCiAKIAoKICAKIAoKCiAgCiAgCiAgCgogIAogCgogIAog CgogIAogCiAKCiAgCiAKCiAgCiAKCgogIAogIAogIAoKICAKIAoKICAKIAoKICAKIAogCiAKIAoK ICAKIAoKICAKIAogCiAKIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAgCiAK CgogIAogCgoKCgoKICAKIAogCgoKICAKICAKICAKCiAgCiAKCiAgCiAKCiAgCiAKIAogCgogIAog CgogIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAgCiAKIAogCiAKIAogCgogIAogIAog IAoKICAKIAoKICAKIAoKICAKIAogCgogIAogCiAKCiAgCiAKCiAgCiAKIAoKCgogIAogIAogIAoK ICAKIAoKICAKIAoKICAKIAogCgogIAogCiAKCiAgCiAKCiAgCiAKCgoKCiAgCiAgCiAgCgogIAog CgogIAogCgogIAogCiAKCgogIAogIAogIAoKICAKIAoKICAKIAoKICAKIAogCiAKCiAgCiAKIAog CgoKICAKICAKICAKCiAgCiAKCiAgCiAKCiAgCiAKIAoKICAKIAogCgogIAogCgoKICAKICAKICAK CiAgCiAKCiAgCiAKCiAgCiAKIAoKCiAgCiAgCiAgCgogIAogCiAKCiAgCiAKIAogCgoKICAKICAK ICAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKCiAgCiAKIAoKCiAgCiAgCiAgCgogIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAoKCiAgCiAgCiAgCgogIAogCiAKCgogIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCgogIAogCiAKIAogCgogIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCgoKICAKICAKICAKCiAgCiAK IAogCiAKIAoKICAKIAogCiAKIAoKICAKIAoKICAKIAogCiAKIAoKICAKIAogCgogIAogCiAKCiAg CiAKIAoKICAKIAogCgogIAogCiAKCiAgCiAKIAoKICAKIAogCiAKIAoKICAKIAogCgogIAogCiAK CiAgCiAKIAogCiAKCiAgCiAKIAoKICAKIAogCiAKCiAgCiAgCiAgCgogIAogCgoKICAKICAKICAK CiAgCiAgCgoKICAKICAKICAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogIAog CiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKCiAgCiAKIAogCiAgCiAKIAoKICAKIAogCiAKIAoK ICAKICAKCgogIAogIAogIAoKICAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBNUUJZVEU7CiB0eXBl ZGVmIE1RQllURSAqICBQTVFCWVRFOwogdHlwZWRlZiBNUUJZVEUgTVFCWVRFOFs4XTsKIHR5cGVk ZWYgTVFCWVRFOCAqICBQTVFCWVRFODsKIHR5cGVkZWYgTVFCWVRFIE1RQllURTE2WzE2XTsKIHR5 cGVkZWYgTVFCWVRFMTYgKiAgUE1RQllURTE2OwogdHlwZWRlZiBNUUJZVEUgTVFCWVRFMjRbMjRd OwogdHlwZWRlZiBNUUJZVEUyNCAqICBQTVFCWVRFMjQ7CiB0eXBlZGVmIE1RQllURSBNUUJZVEUz MlszMl07CiB0eXBlZGVmIE1RQllURTMyICogIFBNUUJZVEUzMjsKIHR5cGVkZWYgTVFCWVRFIE1R QllURTQwWzQwXTsKIHR5cGVkZWYgTVFCWVRFNDAgKiAgUE1RQllURTQwOwogdHlwZWRlZiBNUUJZ VEUgTVFCWVRFMTI4WzEyOF07CiB0eXBlZGVmIE1RQllURTEyOCAqICBQTVFCWVRFMTI4OwoKICAK IHR5cGVkZWYgY2hhciBNUUNIQVI7CiB0eXBlZGVmIE1RQ0hBUiAqICBQTVFDSEFSOwogdHlwZWRl ZiBNUUNIQVIgTVFDSEFSNFs0XTsKIHR5cGVkZWYgTVFDSEFSNCAqICBQTVFDSEFSNDsKIHR5cGVk ZWYgTVFDSEFSIE1RQ0hBUjhbOF07CiB0eXBlZGVmIE1RQ0hBUjggKiAgUE1RQ0hBUjg7CiB0eXBl ZGVmIE1RQ0hBUiBNUUNIQVIxMlsxMl07CiB0eXBlZGVmIE1RQ0hBUjEyICogIFBNUUNIQVIxMjsK IHR5cGVkZWYgTVFDSEFSIE1RQ0hBUjIwWzIwXTsKIHR5cGVkZWYgTVFDSEFSMjAgKiAgUE1RQ0hB UjIwOwogdHlwZWRlZiBNUUNIQVIgTVFDSEFSMjhbMjhdOwogdHlwZWRlZiBNUUNIQVIyOCAqICBQ TVFDSEFSMjg7CiB0eXBlZGVmIE1RQ0hBUiBNUUNIQVIzMlszMl07CiB0eXBlZGVmIE1RQ0hBUjMy ICogIFBNUUNIQVIzMjsKIHR5cGVkZWYgTVFDSEFSIE1RQ0hBUjQ4WzQ4XTsKIHR5cGVkZWYgTVFD SEFSNDggKiAgUE1RQ0hBUjQ4OwogdHlwZWRlZiBNUUNIQVIgTVFDSEFSNjRbNjRdOwogdHlwZWRl ZiBNUUNIQVI2NCAqICBQTVFDSEFSNjQ7CiB0eXBlZGVmIE1RQ0hBUiBNUUNIQVIxMjhbMTI4XTsK IHR5cGVkZWYgTVFDSEFSMTI4ICogIFBNUUNIQVIxMjg7CiB0eXBlZGVmIE1RQ0hBUiBNUUNIQVIy NTZbMjU2XTsKIHR5cGVkZWYgTVFDSEFSMjU2ICogIFBNUUNIQVIyNTY7CgogIAogdHlwZWRlZiBs b25nIE1RTE9ORzsKIHR5cGVkZWYgTVFMT05HICogIFBNUUxPTkc7CiB0eXBlZGVmIE1RTE9ORyBN UUhDT05OOwogdHlwZWRlZiBNUUhDT05OICogIFBNUUhDT05OOwogdHlwZWRlZiBNUUxPTkcgTVFI T0JKOwogdHlwZWRlZiBNUUhPQkogKiAgUE1RSE9CSjsKIHR5cGVkZWYgdm9pZCAqICBNUVBUUjsK IHR5cGVkZWYgTVFQVFIgKiAgUE1RUFRSOwogdHlwZWRlZiB2b2lkICogIFBNUVZPSUQ7CiB0eXBl ZGVmIFBNUVZPSUQgKiAgUFBNUVZPSUQ7CgoKICAKICAKICAKCiB0eXBlZGVmIHN0cnVjdCB0YWdN UUJPIHsKICAgTVFDSEFSNCAgU3RydWNJZDsgICAKICAgTVFMT05HICAgVmVyc2lvbjsgICAKICAg TVFMT05HICAgT3B0aW9uczsgICAKIH0gTVFCTzsKIHR5cGVkZWYgTVFCTyAqICBQTVFCTzsKCiAK CgoKCiAgCiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFDSUggewogICBNUUNIQVI0ICBTdHJ1 Y0lkOyAgICAgICAgICAgICAgCiAgIE1RTE9ORyAgIFZlcnNpb247ICAgICAgICAgICAgICAKICAg TVFMT05HICAgU3RydWNMZW5ndGg7ICAgICAgICAgIAogICBNUUxPTkcgICBFbmNvZGluZzsgICAg ICAgICAgICAgCiAgIE1RTE9ORyAgIENvZGVkQ2hhclNldElkOyAgICAgICAKICAgTVFDSEFSOCAg Rm9ybWF0OyAgICAgICAgICAgICAgIAoKICAgTVFMT05HICAgRmxhZ3M7ICAgICAgICAgICAgICAg IAogICBNUUxPTkcgICBSZXR1cm5Db2RlOyAgICAgICAgICAgCiAgIE1RTE9ORyAgIENvbXBDb2Rl OyAgICAgICAgICAgICAKCiAgIE1RTE9ORyAgIFJlYXNvbjsgICAgICAgICAgICAgICAKCiAgIE1R TE9ORyAgIFVPV0NvbnRyb2w7ICAgICAgICAgICAKICAgTVFMT05HICAgR2V0V2FpdEludGVydmFs OyAgICAgIAoKICAgTVFMT05HICAgTGlua1R5cGU7ICAgICAgICAgICAgIAogICBNUUxPTkcgICBP dXRwdXREYXRhTGVuZ3RoOyAgICAgCiAgIE1RTE9ORyAgIEZhY2lsaXR5S2VlcFRpbWU7ICAgICAK ICAgTVFMT05HICAgQURTRGVzY3JpcHRvcjsgICAgICAgIAogICBNUUxPTkcgICBDb252ZXJzYXRp b25hbFRhc2s7ICAgCgogICBNUUxPTkcgICBUYXNrRW5kU3RhdHVzOyAgICAgICAgCiAgIE1RQllU RTggIEZhY2lsaXR5OyAgICAgICAgICAgICAKICAgTVFDSEFSNCAgRnVuY3Rpb247ICAgICAgICAg ICAgIAoKICAgTVFDSEFSNCAgQWJlbmRDb2RlOyAgICAgICAgICAgIAogICBNUUNIQVI4ICBBdXRo ZW50aWNhdG9yOyAgICAgICAgCiAgIE1RQ0hBUjggIFJlc2VydmVkMTsgICAgICAgICAgICAKICAg TVFDSEFSOCAgUmVwbHlUb0Zvcm1hdDsgICAgICAgIAogICBNUUNIQVI0ICBSZW1vdGVTeXNJZDsg ICAgICAgICAgCiAgIE1RQ0hBUjQgIFJlbW90ZVRyYW5zSWQ7ICAgICAgICAKICAgTVFDSEFSNCAg VHJhbnNhY3Rpb25JZDsgICAgICAgIAogICBNUUNIQVI0ICBGYWNpbGl0eUxpa2U7ICAgICAgICAg CiAgIE1RQ0hBUjQgIEF0dGVudGlvbklkOyAgICAgICAgICAKICAgTVFDSEFSNCAgU3RhcnRDb2Rl OyAgICAgICAgICAgIAogICBNUUNIQVI0ICBDYW5jZWxDb2RlOyAgICAgICAgICAgCiAgIE1RQ0hB UjQgIE5leHRUcmFuc2FjdGlvbklkOyAgICAKICAgTVFDSEFSOCAgUmVzZXJ2ZWQyOyAgICAgICAg ICAgIAogICBNUUNIQVI4ICBSZXNlcnZlZDM7ICAgICAgICAgICAgCiAgIE1RTE9ORyAgIEN1cnNv clBvc2l0aW9uOyAgICAgICAKICAgTVFMT05HICAgRXJyb3JPZmZzZXQ7ICAgICAgICAgIAogICBN UUxPTkcgICBJbnB1dEl0ZW07ICAgICAgICAgICAgCiAgIE1RTE9ORyAgIFJlc2VydmVkNDsgICAg ICAgICAgICAKIH0gTVFDSUg7CiB0eXBlZGVmIE1RQ0lIICogIFBNUUNJSDsKCiAKIyAxNzgwICIv dXNyL2luY2x1ZGUvY21xYy5oIiAzCgoKICAKICAKICAKCiB0eXBlZGVmIHN0cnVjdCB0YWdNUUNO TyB7CiAgIE1RQ0hBUjQgIFN0cnVjSWQ7ICAgICAgICAgICAgCiAgIE1RTE9ORyAgIFZlcnNpb247 ICAgICAgICAgICAgCiAgIE1RTE9ORyAgIE9wdGlvbnM7ICAgICAgICAgICAgCgogICBNUUxPTkcg ICBDbGllbnRDb25uT2Zmc2V0OyAgIAoKICAgTVFQVFIgICAgQ2xpZW50Q29ublB0cjsgICAgICAK CiB9IE1RQ05POwogdHlwZWRlZiBNUUNOTyAqICBQTVFDTk87CgogCgoKCgoKCiAgCiAgCiAgCgog dHlwZWRlZiBzdHJ1Y3QgdGFnTVFESCB7CiAgIE1RQ0hBUjQgIFN0cnVjSWQ7ICAgICAgICAgICAK ICAgTVFMT05HICAgVmVyc2lvbjsgICAgICAgICAgIAogICBNUUxPTkcgICBTdHJ1Y0xlbmd0aDsg ICAgICAgCgogICBNUUxPTkcgICBFbmNvZGluZzsgICAgICAgICAgCgogICBNUUxPTkcgICBDb2Rl ZENoYXJTZXRJZDsgICAgCgogICBNUUNIQVI4ICBGb3JtYXQ7ICAgICAgICAgICAgCgogICBNUUxP TkcgICBGbGFnczsgICAgICAgICAgICAgCiAgIE1RTE9ORyAgIFB1dE1zZ1JlY0ZpZWxkczsgICAK CiAgIE1RTE9ORyAgIFJlY3NQcmVzZW50OyAgICAgICAKICAgTVFMT05HICAgT2JqZWN0UmVjT2Zm c2V0OyAgIAoKICAgTVFMT05HICAgUHV0TXNnUmVjT2Zmc2V0OyAgIAoKIH0gTVFESDsKIHR5cGVk ZWYgTVFESCAqICBQTVFESDsKCiAKIyAxODQyICIvdXNyL2luY2x1ZGUvY21xYy5oIiAzCgoKICAK ICAKICAKCiB0eXBlZGVmIHN0cnVjdCB0YWdNUURMSCB7CiAgIE1RQ0hBUjQgICBTdHJ1Y0lkOyAg ICAgICAgICAKICAgTVFMT05HICAgIFZlcnNpb247ICAgICAgICAgIAogICBNUUxPTkcgICAgUmVh c29uOyAgICAgICAgICAgCgogICBNUUNIQVI0OCAgRGVzdFFOYW1lOyAgICAgICAgCiAgIE1RQ0hB UjQ4ICBEZXN0UU1nck5hbWU7ICAgICAKCiAgIE1RTE9ORyAgICBFbmNvZGluZzsgICAgICAgICAK CiAgIE1RTE9ORyAgICBDb2RlZENoYXJTZXRJZDsgICAKCiAgIE1RQ0hBUjggICBGb3JtYXQ7ICAg ICAgICAgICAKCiAgIE1RTE9ORyAgICBQdXRBcHBsVHlwZTsgICAgICAKCgogICBNUUNIQVIyOCAg UHV0QXBwbE5hbWU7ICAgICAgCgoKICAgTVFDSEFSOCAgIFB1dERhdGU7ICAgICAgICAgIAoKCiAg IE1RQ0hBUjggICBQdXRUaW1lOyAgICAgICAgICAKCgogfSBNUURMSDsKIHR5cGVkZWYgTVFETEgg KiAgUE1RRExIOwoKIAojIDE4ODkgIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMKCgogIAogIAogIAoK IHR5cGVkZWYgc3RydWN0IHRhZ01RR01PIHsKICAgTVFDSEFSNCAgIFN0cnVjSWQ7ICAgICAgICAg IAogICBNUUxPTkcgICAgVmVyc2lvbjsgICAgICAgICAgCiAgIE1RTE9ORyAgICBPcHRpb25zOyAg ICAgICAgICAKCiAgIE1RTE9ORyAgICBXYWl0SW50ZXJ2YWw7ICAgICAKICAgTVFMT05HICAgIFNp Z25hbDE7ICAgICAgICAgIAogICBNUUxPTkcgICAgU2lnbmFsMjsgICAgICAgICAgCiAgIE1RQ0hB UjQ4ICBSZXNvbHZlZFFOYW1lOyAgICAKICAgTVFMT05HICAgIE1hdGNoT3B0aW9uczsgICAgIAoK ICAgTVFDSEFSICAgIEdyb3VwU3RhdHVzOyAgICAgIAoKICAgTVFDSEFSICAgIFNlZ21lbnRTdGF0 dXM7ICAgIAoKCiAgIE1RQ0hBUiAgICBTZWdtZW50YXRpb247ICAgICAKCgogICBNUUNIQVIgICAg UmVzZXJ2ZWQxOyAgICAgICAgCiAgIE1RQllURTE2ICBNc2dUb2tlbjsgICAgICAgICAKICAgTVFM T05HICAgIFJldHVybmVkTGVuZ3RoOyAgIAoKIH0gTVFHTU87CiB0eXBlZGVmIE1RR01PICogIFBN UUdNTzsKCiAKIyAxOTM1ICIvdXNyL2luY2x1ZGUvY21xYy5oIiAzCgoKICAKICAKICAKCiB0eXBl ZGVmIHN0cnVjdCB0YWdNUUlJSCB7CiAgIE1RQ0hBUjQgICBTdHJ1Y0lkOyAgICAgICAgICAKICAg TVFMT05HICAgIFZlcnNpb247ICAgICAgICAgIAogICBNUUxPTkcgICAgU3RydWNMZW5ndGg7ICAg ICAgCiAgIE1RTE9ORyAgICBFbmNvZGluZzsgICAgICAgICAKICAgTVFMT05HICAgIENvZGVkQ2hh clNldElkOyAgIAogICBNUUNIQVI4ICAgRm9ybWF0OyAgICAgICAgICAgCgogICBNUUxPTkcgICAg RmxhZ3M7ICAgICAgICAgICAgCiAgIE1RQ0hBUjggICBMVGVybU92ZXJyaWRlOyAgICAKICAgTVFD SEFSOCAgIE1GU01hcE5hbWU7ICAgICAgIAogICBNUUNIQVI4ICAgUmVwbHlUb0Zvcm1hdDsgICAg CiAgIE1RQ0hBUjggICBBdXRoZW50aWNhdG9yOyAgICAKICAgTVFCWVRFMTYgIFRyYW5JbnN0YW5j ZUlkOyAgIAogICBNUUNIQVIgICAgVHJhblN0YXRlOyAgICAgICAgCiAgIE1RQ0hBUiAgICBDb21t aXRNb2RlOyAgICAgICAKICAgTVFDSEFSICAgIFNlY3VyaXR5U2NvcGU7ICAgIAogICBNUUNIQVIg ICAgUmVzZXJ2ZWQ7ICAgICAgICAgCiB9IE1RSUlIOwogdHlwZWRlZiBNUUlJSCAqICBQTVFJSUg7 CgogCiMgMTk3OCAiL3Vzci9pbmNsdWRlL2NtcWMuaCIgMwoKCiAgCiAgCiAgCgogdHlwZWRlZiBz dHJ1Y3QgdGFnTVFNRCB7CiAgIE1RQ0hBUjQgICBTdHJ1Y0lkOyAgICAgICAgICAgIAogICBNUUxP TkcgICAgVmVyc2lvbjsgICAgICAgICAgICAKICAgTVFMT05HICAgIFJlcG9ydDsgICAgICAgICAg ICAgCiAgIE1RTE9ORyAgICBNc2dUeXBlOyAgICAgICAgICAgIAogICBNUUxPTkcgICAgRXhwaXJ5 OyAgICAgICAgICAgICAKICAgTVFMT05HICAgIEZlZWRiYWNrOyAgICAgICAgICAgCiAgIE1RTE9O RyAgICBFbmNvZGluZzsgICAgICAgICAgIAogICBNUUxPTkcgICAgQ29kZWRDaGFyU2V0SWQ7ICAg ICAKCiAgIE1RQ0hBUjggICBGb3JtYXQ7ICAgICAgICAgICAgIAogICBNUUxPTkcgICAgUHJpb3Jp dHk7ICAgICAgICAgICAKICAgTVFMT05HICAgIFBlcnNpc3RlbmNlOyAgICAgICAgCiAgIE1RQllU RTI0ICBNc2dJZDsgICAgICAgICAgICAgIAogICBNUUJZVEUyNCAgQ29ycmVsSWQ7ICAgICAgICAg ICAKICAgTVFMT05HICAgIEJhY2tvdXRDb3VudDsgICAgICAgCiAgIE1RQ0hBUjQ4ICBSZXBseVRv UTsgICAgICAgICAgIAogICBNUUNIQVI0OCAgUmVwbHlUb1FNZ3I7ICAgICAgICAKICAgTVFDSEFS MTIgIFVzZXJJZGVudGlmaWVyOyAgICAgCiAgIE1RQllURTMyICBBY2NvdW50aW5nVG9rZW47ICAg IAogICBNUUNIQVIzMiAgQXBwbElkZW50aXR5RGF0YTsgICAKCiAgIE1RTE9ORyAgICBQdXRBcHBs VHlwZTsgICAgICAgIAoKICAgTVFDSEFSMjggIFB1dEFwcGxOYW1lOyAgICAgICAgCgogICBNUUNI QVI4ICAgUHV0RGF0ZTsgICAgICAgICAgICAKICAgTVFDSEFSOCAgIFB1dFRpbWU7ICAgICAgICAg ICAgCiAgIE1RQ0hBUjQgICBBcHBsT3JpZ2luRGF0YTsgICAgIAoKICAgTVFCWVRFMjQgIEdyb3Vw SWQ7ICAgICAgICAgICAgCiAgIE1RTE9ORyAgICBNc2dTZXFOdW1iZXI7ICAgICAgIAoKICAgTVFM T05HICAgIE9mZnNldDsgICAgICAgICAgICAgCgogICBNUUxPTkcgICAgTXNnRmxhZ3M7ICAgICAg ICAgICAKICAgTVFMT05HICAgIE9yaWdpbmFsTGVuZ3RoOyAgICAgCiB9IE1RTUQ7CiB0eXBlZGVm IE1RTUQgKiAgUE1RTUQ7CgogCiMgMjA1MyAiL3Vzci9pbmNsdWRlL2NtcWMuaCIgMwoKCiAgCiAg CiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFNREUgewogICBNUUNIQVI0ICAgU3RydWNJZDsgICAg ICAgICAgCiAgIE1RTE9ORyAgICBWZXJzaW9uOyAgICAgICAgICAKICAgTVFMT05HICAgIFN0cnVj TGVuZ3RoOyAgICAgIAogICBNUUxPTkcgICAgRW5jb2Rpbmc7ICAgICAgICAgCgogICBNUUxPTkcg ICAgQ29kZWRDaGFyU2V0SWQ7ICAgCgogICBNUUNIQVI4ICAgRm9ybWF0OyAgICAgICAgICAgCgog ICBNUUxPTkcgICAgRmxhZ3M7ICAgICAgICAgICAgCiAgIE1RQllURTI0ICBHcm91cElkOyAgICAg ICAgICAKICAgTVFMT05HICAgIE1zZ1NlcU51bWJlcjsgICAgIAoKICAgTVFMT05HICAgIE9mZnNl dDsgICAgICAgICAgIAoKICAgTVFMT05HICAgIE1zZ0ZsYWdzOyAgICAgICAgIAogICBNUUxPTkcg ICAgT3JpZ2luYWxMZW5ndGg7ICAgCiB9IE1RTURFOwogdHlwZWRlZiBNUU1ERSAqICBQTVFNREU7 CgogCiMgMjA5MiAiL3Vzci9pbmNsdWRlL2NtcWMuaCIgMwoKCiAgCiAgCiAgCgogdHlwZWRlZiBz dHJ1Y3QgdGFnTVFNRDEgewogICBNUUNIQVI0ICAgU3RydWNJZDsgICAgICAgICAgICAKICAgTVFM T05HICAgIFZlcnNpb247ICAgICAgICAgICAgCiAgIE1RTE9ORyAgICBSZXBvcnQ7ICAgICAgICAg ICAgIAogICBNUUxPTkcgICAgTXNnVHlwZTsgICAgICAgICAgICAKICAgTVFMT05HICAgIEV4cGly eTsgICAgICAgICAgICAgCiAgIE1RTE9ORyAgICBGZWVkYmFjazsgICAgICAgICAgIAogICBNUUxP TkcgICAgRW5jb2Rpbmc7ICAgICAgICAgICAKICAgTVFMT05HICAgIENvZGVkQ2hhclNldElkOyAg ICAgCgogICBNUUNIQVI4ICAgRm9ybWF0OyAgICAgICAgICAgICAKICAgTVFMT05HICAgIFByaW9y aXR5OyAgICAgICAgICAgCiAgIE1RTE9ORyAgICBQZXJzaXN0ZW5jZTsgICAgICAgIAogICBNUUJZ VEUyNCAgTXNnSWQ7ICAgICAgICAgICAgICAKICAgTVFCWVRFMjQgIENvcnJlbElkOyAgICAgICAg ICAgCiAgIE1RTE9ORyAgICBCYWNrb3V0Q291bnQ7ICAgICAgIAogICBNUUNIQVI0OCAgUmVwbHlU b1E7ICAgICAgICAgICAKICAgTVFDSEFSNDggIFJlcGx5VG9RTWdyOyAgICAgICAgCiAgIE1RQ0hB UjEyICBVc2VySWRlbnRpZmllcjsgICAgIAogICBNUUJZVEUzMiAgQWNjb3VudGluZ1Rva2VuOyAg ICAKICAgTVFDSEFSMzIgIEFwcGxJZGVudGl0eURhdGE7ICAgCgogICBNUUxPTkcgICAgUHV0QXBw bFR5cGU7ICAgICAgICAKCiAgIE1RQ0hBUjI4ICBQdXRBcHBsTmFtZTsgICAgICAgIAoKICAgTVFD SEFSOCAgIFB1dERhdGU7ICAgICAgICAgICAgCiAgIE1RQ0hBUjggICBQdXRUaW1lOyAgICAgICAg ICAgIAogICBNUUNIQVI0ICAgQXBwbE9yaWdpbkRhdGE7ICAgICAKCiB9IE1RTUQxOwogdHlwZWRl ZiBNUU1EMSAqICBQTVFNRDE7CgogCiMgMjE1NSAiL3Vzci9pbmNsdWRlL2NtcWMuaCIgMwoKCiAg CiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFPRCB7CiAgIE1RQ0hBUjQgICBTdHJ1Y0lkOyAg ICAgICAgICAgICAgIAogICBNUUxPTkcgICAgVmVyc2lvbjsgICAgICAgICAgICAgICAKICAgTVFM T05HICAgIE9iamVjdFR5cGU7ICAgICAgICAgICAgCiAgIE1RQ0hBUjQ4ICBPYmplY3ROYW1lOyAg ICAgICAgICAgIAogICBNUUNIQVI0OCAgT2JqZWN0UU1nck5hbWU7ICAgICAgICAKICAgTVFDSEFS NDggIER5bmFtaWNRTmFtZTsgICAgICAgICAgCiAgIE1RQ0hBUjEyICBBbHRlcm5hdGVVc2VySWQ7 ICAgICAgIAogICBNUUxPTkcgICAgUmVjc1ByZXNlbnQ7ICAgICAgICAgICAKCiAgIE1RTE9ORyAg ICBLbm93bkRlc3RDb3VudDsgICAgICAgIAoKICAgTVFMT05HICAgIFVua25vd25EZXN0Q291bnQ7 ICAgICAgCgogICBNUUxPTkcgICAgSW52YWxpZERlc3RDb3VudDsgICAgICAKCiAgIE1RTE9ORyAg ICBPYmplY3RSZWNPZmZzZXQ7ICAgICAgIAoKICAgTVFMT05HICAgIFJlc3BvbnNlUmVjT2Zmc2V0 OyAgICAgCgogICBNUVBUUiAgICAgT2JqZWN0UmVjUHRyOyAgICAgICAgICAKICAgTVFQVFIgICAg IFJlc3BvbnNlUmVjUHRyOyAgICAgICAgCgogICBNUUJZVEU0MCAgQWx0ZXJuYXRlU2VjdXJpdHlJ ZDsgICAKICAgTVFDSEFSNDggIFJlc29sdmVkUU5hbWU7ICAgICAgICAgCiAgIE1RQ0hBUjQ4ICBS ZXNvbHZlZFFNZ3JOYW1lOyAgICAgIAogfSBNUU9EOwogdHlwZWRlZiBNUU9EICogIFBNUU9EOwoK IAojIDIyMDggIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMKCgogIAogIAogIAoKIHR5cGVkZWYgc3Ry dWN0IHRhZ01RT1IgewogICBNUUNIQVI0OCAgT2JqZWN0TmFtZTsgICAgICAgCiAgIE1RQ0hBUjQ4 ICBPYmplY3RRTWdyTmFtZTsgICAKIH0gTVFPUjsKIHR5cGVkZWYgTVFPUiAqICBQTVFPUjsKCiAK CgoKICAKICAKICAKCiB0eXBlZGVmIHN0cnVjdCB0YWdNUVBNTyB7CiAgIE1RQ0hBUjQgICBTdHJ1 Y0lkOyAgICAgICAgICAgICAKICAgTVFMT05HICAgIFZlcnNpb247ICAgICAgICAgICAgIAogICBN UUxPTkcgICAgT3B0aW9uczsgICAgICAgICAgICAgCgogICBNUUxPTkcgICAgVGltZW91dDsgICAg ICAgICAgICAgCiAgIE1RSE9CSiAgICBDb250ZXh0OyAgICAgICAgICAgICAKICAgTVFMT05HICAg IEtub3duRGVzdENvdW50OyAgICAgIAoKICAgTVFMT05HICAgIFVua25vd25EZXN0Q291bnQ7ICAg IAoKICAgTVFMT05HICAgIEludmFsaWREZXN0Q291bnQ7ICAgIAoKICAgTVFDSEFSNDggIFJlc29s dmVkUU5hbWU7ICAgICAgIAoKICAgTVFDSEFSNDggIFJlc29sdmVkUU1nck5hbWU7ICAgIAoKICAg TVFMT05HICAgIFJlY3NQcmVzZW50OyAgICAgICAgIAoKICAgTVFMT05HICAgIFB1dE1zZ1JlY0Zp ZWxkczsgICAgIAoKICAgTVFMT05HICAgIFB1dE1zZ1JlY09mZnNldDsgICAgIAoKICAgTVFMT05H ICAgIFJlc3BvbnNlUmVjT2Zmc2V0OyAgIAoKICAgTVFQVFIgICAgIFB1dE1zZ1JlY1B0cjsgICAg ICAgIAoKICAgTVFQVFIgICAgIFJlc3BvbnNlUmVjUHRyOyAgICAgIAogfSBNUVBNTzsKIHR5cGVk ZWYgTVFQTU8gKiAgUE1RUE1POwoKIAojIDIyNzUgIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMKCgog IAogIAogIAoKIHR5cGVkZWYgc3RydWN0IHRhZ01RUkZIIHsKICAgTVFDSEFSNCAgU3RydWNJZDsg ICAgICAgICAgCiAgIE1RTE9ORyAgIFZlcnNpb247ICAgICAgICAgIAogICBNUUxPTkcgICBTdHJ1 Y0xlbmd0aDsgICAgICAKCiAgIE1RTE9ORyAgIEVuY29kaW5nOyAgICAgICAgIAoKICAgTVFMT05H ICAgQ29kZWRDaGFyU2V0SWQ7ICAgCgogICBNUUNIQVI4ICBGb3JtYXQ7ICAgICAgICAgICAKCiAg IE1RTE9ORyAgIEZsYWdzOyAgICAgICAgICAgIAogfSBNUVJGSDsKIHR5cGVkZWYgTVFSRkggKiAg UE1RUkZIOwoKIAoKCgoKCgoKCiAgCiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFSRkgyIHsK ICAgTVFDSEFSNCAgU3RydWNJZDsgICAgICAgICAgCiAgIE1RTE9ORyAgIFZlcnNpb247ICAgICAg ICAgIAogICBNUUxPTkcgICBTdHJ1Y0xlbmd0aDsgICAgICAKCiAgIE1RTE9ORyAgIEVuY29kaW5n OyAgICAgICAgIAoKICAgTVFMT05HICAgQ29kZWRDaGFyU2V0SWQ7ICAgCgogICBNUUNIQVI4ICBG b3JtYXQ7ICAgICAgICAgICAKCiAgIE1RTE9ORyAgIEZsYWdzOyAgICAgICAgICAgIAogICBNUUxP TkcgICBOYW1lVmFsdWVDQ1NJRDsgICAKCiB9IE1RUkZIMjsKIHR5cGVkZWYgTVFSRkgyICogIFBN UVJGSDI7CgogCgoKCgoKCgoKCiAgCiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFSTUggewog ICBNUUNIQVI0ICAgU3RydWNJZDsgICAgICAgICAgICAgIAogICBNUUxPTkcgICAgVmVyc2lvbjsg ICAgICAgICAgICAgIAogICBNUUxPTkcgICAgU3RydWNMZW5ndGg7ICAgICAgICAgIAoKCiAgIE1R TE9ORyAgICBFbmNvZGluZzsgICAgICAgICAgICAgCiAgIE1RTE9ORyAgICBDb2RlZENoYXJTZXRJ ZDsgICAgICAgCgogICBNUUNIQVI4ICAgRm9ybWF0OyAgICAgICAgICAgICAgIAogICBNUUxPTkcg ICAgRmxhZ3M7ICAgICAgICAgICAgICAgIAogICBNUUNIQVI4ICAgT2JqZWN0VHlwZTsgICAgICAg ICAgIAogICBNUUJZVEUyNCAgT2JqZWN0SW5zdGFuY2VJZDsgICAgIAogICBNUUxPTkcgICAgU3Jj RW52TGVuZ3RoOyAgICAgICAgIAoKICAgTVFMT05HICAgIFNyY0Vudk9mZnNldDsgICAgICAgICAK CiAgIE1RTE9ORyAgICBTcmNOYW1lTGVuZ3RoOyAgICAgICAgCiAgIE1RTE9ORyAgICBTcmNOYW1l T2Zmc2V0OyAgICAgICAgCiAgIE1RTE9ORyAgICBEZXN0RW52TGVuZ3RoOyAgICAgICAgCgogICBN UUxPTkcgICAgRGVzdEVudk9mZnNldDsgICAgICAgIAoKICAgTVFMT05HICAgIERlc3ROYW1lTGVu Z3RoOyAgICAgICAKCiAgIE1RTE9ORyAgICBEZXN0TmFtZU9mZnNldDsgICAgICAgCgogICBNUUxP TkcgICAgRGF0YUxvZ2ljYWxMZW5ndGg7ICAgIAogICBNUUxPTkcgICAgRGF0YUxvZ2ljYWxPZmZz ZXQ7ICAgIAogICBNUUxPTkcgICAgRGF0YUxvZ2ljYWxPZmZzZXQyOyAgIAogfSBNUVJNSDsKIHR5 cGVkZWYgTVFSTUggKiAgUE1RUk1IOwoKIAojIDIzOTMgIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMK CgogIAogIAogIAoKIHR5cGVkZWYgc3RydWN0IHRhZ01RUlIgewogICBNUUxPTkcgIENvbXBDb2Rl OyAgIAogICBNUUxPTkcgIFJlYXNvbjsgICAgIAogfSBNUVJSOwogdHlwZWRlZiBNUVJSICogIFBN UVJSOwoKIAoKCgogIAogIAogIAoKIHR5cGVkZWYgc3RydWN0IHRhZ01RVE0gewogICBNUUNIQVI0 ICAgIFN0cnVjSWQ7ICAgICAgIAogICBNUUxPTkcgICAgIFZlcnNpb247ICAgICAgIAogICBNUUNI QVI0OCAgIFFOYW1lOyAgICAgICAgIAogICBNUUNIQVI0OCAgIFByb2Nlc3NOYW1lOyAgIAogICBN UUNIQVI2NCAgIFRyaWdnZXJEYXRhOyAgIAogICBNUUxPTkcgICAgIEFwcGxUeXBlOyAgICAgIAog ICBNUUNIQVIyNTYgIEFwcGxJZDsgICAgICAgIAogICBNUUNIQVIxMjggIEVudkRhdGE7ICAgICAg IAogICBNUUNIQVIxMjggIFVzZXJEYXRhOyAgICAgIAogfSBNUVRNOwogdHlwZWRlZiBNUVRNICog IFBNUVRNOwoKIAojIDI0MzUgIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMKCgoKICAKICAKICAKCiB0 eXBlZGVmIHN0cnVjdCB0YWdNUVRNQzIgewogICBNUUNIQVI0ICAgIFN0cnVjSWQ7ICAgICAgIAog ICBNUUNIQVI0ICAgIFZlcnNpb247ICAgICAgIAogICBNUUNIQVI0OCAgIFFOYW1lOyAgICAgICAg IAogICBNUUNIQVI0OCAgIFByb2Nlc3NOYW1lOyAgIAogICBNUUNIQVI2NCAgIFRyaWdnZXJEYXRh OyAgIAogICBNUUNIQVI0ICAgIEFwcGxUeXBlOyAgICAgIAogICBNUUNIQVIyNTYgIEFwcGxJZDsg ICAgICAgIAogICBNUUNIQVIxMjggIEVudkRhdGE7ICAgICAgIAogICBNUUNIQVIxMjggIFVzZXJE YXRhOyAgICAgIAogICBNUUNIQVI0OCAgIFFNZ3JOYW1lOyAgICAgIAogfSBNUVRNQzI7CiB0eXBl ZGVmIE1RVE1DMiAqICBQTVFUTUMyOwoKIAojIDI0NjYgIi91c3IvaW5jbHVkZS9jbXFjLmgiIDMK CgogIAogIAogIAoKIHR5cGVkZWYgc3RydWN0IHRhZ01RV0lIIHsKICAgTVFDSEFSNCAgIFN0cnVj SWQ7ICAgICAgICAgIAogICBNUUxPTkcgICAgVmVyc2lvbjsgICAgICAgICAgCiAgIE1RTE9ORyAg ICBTdHJ1Y0xlbmd0aDsgICAgICAKICAgTVFMT05HICAgIEVuY29kaW5nOyAgICAgICAgIAoKICAg TVFMT05HICAgIENvZGVkQ2hhclNldElkOyAgIAoKICAgTVFDSEFSOCAgIEZvcm1hdDsgICAgICAg ICAgIAoKICAgTVFMT05HICAgIEZsYWdzOyAgICAgICAgICAgIAogICBNUUNIQVIzMiAgU2Vydmlj ZU5hbWU7ICAgICAgCiAgIE1RQ0hBUjggICBTZXJ2aWNlU3RlcDsgICAgICAKICAgTVFCWVRFMTYg IE1zZ1Rva2VuOyAgICAgICAgIAogICBNUUNIQVIzMiAgUmVzZXJ2ZWQ7ICAgICAgICAgCiB9IE1R V0lIOwogdHlwZWRlZiBNUVdJSCAqICBQTVFXSUg7CgogCiMgMjUwNyAiL3Vzci9pbmNsdWRlL2Nt cWMuaCIgMwoKCiAgCiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFnTVFYUUggewogICBNUUNIQVI0 ICAgU3RydWNJZDsgICAgICAgICAgCiAgIE1RTE9ORyAgICBWZXJzaW9uOyAgICAgICAgICAKICAg TVFDSEFSNDggIFJlbW90ZVFOYW1lOyAgICAgIAogICBNUUNIQVI0OCAgUmVtb3RlUU1nck5hbWU7 ICAgCiAgIE1RTUQxICAgICBNc2dEZXNjOyAgICAgICAgICAKIH0gTVFYUUg7CiB0eXBlZGVmIE1R WFFIICogIFBNUVhRSDsKCiAKCgoKCgoKICAKICAKICAKCiB2b2lkICAgTVFCQUNLICgKICAgTVFI Q09OTiAgSGNvbm4sICAgICAgIAogICBQTVFMT05HICBwQ29tcENvZGUsICAgCiAgIFBNUUxPTkcg IHBSZWFzb24pOyAgICAKCgogIAogIAogIAoKIHZvaWQgICBNUUJFR0lOICgKICAgTVFIQ09OTiAg SGNvbm4sICAgICAgICAgICAKICAgUE1RVk9JRCAgcEJlZ2luT3B0aW9ucywgICAKCiAgIFBNUUxP TkcgIHBDb21wQ29kZSwgICAgICAgCiAgIFBNUUxPTkcgIHBSZWFzb24pOyAgICAgICAgCgoKICAK ICAKICAKCiB2b2lkICAgTVFDTE9TRSAoCiAgIE1RSENPTk4gIEhjb25uLCAgICAgICAKICAgUE1R SE9CSiAgcEhvYmosICAgICAgIAogICBNUUxPTkcgICBPcHRpb25zLCAgICAgCiAgIFBNUUxPTkcg IHBDb21wQ29kZSwgICAKICAgUE1RTE9ORyAgcFJlYXNvbik7ICAgIAoKCiAgCiAgCiAgCgogdm9p ZCAgIE1RQ01JVCAoCiAgIE1RSENPTk4gIEhjb25uLCAgICAgICAKICAgUE1RTE9ORyAgcENvbXBD b2RlLCAgIAogICBQTVFMT05HICBwUmVhc29uKTsgICAgCgoKICAKICAKICAKCiB2b2lkICAgTVFD T05OICgKICAgUE1RQ0hBUiAgIHBRTWdyTmFtZSwgICAKICAgUE1RSENPTk4gIHBIY29ubiwgICAg ICAKICAgUE1RTE9ORyAgIHBDb21wQ29kZSwgICAKICAgUE1RTE9ORyAgIHBSZWFzb24pOyAgICAK CgogIAogIAogIAoKIHZvaWQgICBNUUNPTk5YICgKICAgUE1RQ0hBUiAgIHBRTWdyTmFtZSwgICAg ICAKICAgUE1RQ05PICAgIHBDb25uZWN0T3B0cywgICAKCiAgIFBNUUhDT05OICBwSGNvbm4sICAg ICAgICAgCiAgIFBNUUxPTkcgICBwQ29tcENvZGUsICAgICAgCiAgIFBNUUxPTkcgICBwUmVhc29u KTsgICAgICAgCgoKICAKICAKICAKCiB2b2lkICAgTVFESVNDICgKICAgUE1RSENPTk4gIHBIY29u biwgICAgICAKICAgUE1RTE9ORyAgIHBDb21wQ29kZSwgICAKICAgUE1RTE9ORyAgIHBSZWFzb24p OyAgICAKCgogIAogIAogIAoKIHZvaWQgICBNUUdFVCAoCiAgIE1RSENPTk4gIEhjb25uLCAgICAg ICAgICAKICAgTVFIT0JKICAgSG9iaiwgICAgICAgICAgIAogICBQTVFWT0lEICBwTXNnRGVzYywg ICAgICAgCiAgIFBNUVZPSUQgIHBHZXRNc2dPcHRzLCAgICAKCiAgIE1RTE9ORyAgIEJ1ZmZlckxl bmd0aCwgICAKICAgUE1RVk9JRCAgcEJ1ZmZlciwgICAgICAgIAogICBQTVFMT05HICBwRGF0YUxl bmd0aCwgICAgCiAgIFBNUUxPTkcgIHBDb21wQ29kZSwgICAgICAKICAgUE1RTE9ORyAgcFJlYXNv bik7ICAgICAgIAoKCiAgCiAgCiAgCgogdm9pZCAgIE1RSU5RICgKICAgTVFIQ09OTiAgSGNvbm4s ICAgICAgICAgICAgCiAgIE1RSE9CSiAgIEhvYmosICAgICAgICAgICAgIAogICBNUUxPTkcgICBT ZWxlY3RvckNvdW50LCAgICAKICAgUE1RTE9ORyAgcFNlbGVjdG9ycywgICAgICAgCiAgIE1RTE9O RyAgIEludEF0dHJDb3VudCwgICAgIAogICBQTVFMT05HICBwSW50QXR0cnMsICAgICAgICAKICAg TVFMT05HICAgQ2hhckF0dHJMZW5ndGgsICAgCiAgIFBNUUNIQVIgIHBDaGFyQXR0cnMsICAgICAg IAogICBQTVFMT05HICBwQ29tcENvZGUsICAgICAgICAKICAgUE1RTE9ORyAgcFJlYXNvbik7ICAg ICAgICAgCgoKICAKICAKICAKCiB2b2lkICAgTVFPUEVOICgKICAgTVFIQ09OTiAgSGNvbm4sICAg ICAgIAogICBQTVFWT0lEICBwT2JqRGVzYywgICAgCiAgIE1RTE9ORyAgIE9wdGlvbnMsICAgICAK ICAgUE1RSE9CSiAgcEhvYmosICAgICAgIAogICBQTVFMT05HICBwQ29tcENvZGUsICAgCiAgIFBN UUxPTkcgIHBSZWFzb24pOyAgICAKCgogIAogIAogIAoKIHZvaWQgICBNUVBVVCAoCiAgIE1RSENP Tk4gIEhjb25uLCAgICAgICAgICAKICAgTVFIT0JKICAgSG9iaiwgICAgICAgICAgIAogICBQTVFW T0lEICBwTXNnRGVzYywgICAgICAgCiAgIFBNUVZPSUQgIHBQdXRNc2dPcHRzLCAgICAKCiAgIE1R TE9ORyAgIEJ1ZmZlckxlbmd0aCwgICAKICAgUE1RVk9JRCAgcEJ1ZmZlciwgICAgICAgIAogICBQ TVFMT05HICBwQ29tcENvZGUsICAgICAgCiAgIFBNUUxPTkcgIHBSZWFzb24pOyAgICAgICAKCgog IAogIAogIAoKIHZvaWQgICBNUVBVVDEgKAogICBNUUhDT05OICBIY29ubiwgICAgICAgICAgCiAg IFBNUVZPSUQgIHBPYmpEZXNjLCAgICAgICAKICAgUE1RVk9JRCAgcE1zZ0Rlc2MsICAgICAgIAog ICBQTVFWT0lEICBwUHV0TXNnT3B0cywgICAgCgogICBNUUxPTkcgICBCdWZmZXJMZW5ndGgsICAg CiAgIFBNUVZPSUQgIHBCdWZmZXIsICAgICAgICAKICAgUE1RTE9ORyAgcENvbXBDb2RlLCAgICAg IAogICBQTVFMT05HICBwUmVhc29uKTsgICAgICAgCgoKICAKICAKICAKCiB2b2lkICAgTVFTRVQg KAogICBNUUhDT05OICBIY29ubiwgICAgICAgICAgICAKICAgTVFIT0JKICAgSG9iaiwgICAgICAg ICAgICAgCiAgIE1RTE9ORyAgIFNlbGVjdG9yQ291bnQsICAgIAogICBQTVFMT05HICBwU2VsZWN0 b3JzLCAgICAgICAKICAgTVFMT05HICAgSW50QXR0ckNvdW50LCAgICAgCiAgIFBNUUxPTkcgIHBJ bnRBdHRycywgICAgICAgIAogICBNUUxPTkcgICBDaGFyQXR0ckxlbmd0aCwgICAKICAgUE1RQ0hB UiAgcENoYXJBdHRycywgICAgICAgCiAgIFBNUUxPTkcgIHBDb21wQ29kZSwgICAgICAgIAogICBQ TVFMT05HICBwUmVhc29uKTsgICAgICAgICAKCgogCiAgIH0KIAoKICAKICAKICAKCiAKIyA0ICIv aG9tZS94aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvbXFtZXNzYWdlLmhwcCIgMgoKIyAxICIvdXNy L2luY2x1ZGUvY21xY2ZjLmgiIDEgMwogCiAgIAogIAogIAogIAogIAogIAogIAogIAogIAogIAog IAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAogIAoKIAogICBl eHRlcm4gIkMiIHsKIAoKICAKICAKICAKCiAgCiAKCiAgCiAKIAoKICAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKCiAgCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogIAog IAogIAoKICAKIAoKCiAgCiAgCiAgCgogIAogCgoKICAKICAKICAKCiAgCiAKCgogIAogIAogIAoK ICAKIAoKCiAgCiAgCiAgCgogIAogCiAKIAogCiAKIAogCiAKCgogIAogIAogIAoKICAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKCgogIAogIAogIAoKICAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoK CiAgCiAgCiAgCgogIAogCgogIAogCgogIAogCiAKCiAgCiAKIAogCiAKIAogCiAKIAogCiAKCiAg CiAKIAoKICAKIAogCgogIAogCgogIAogCiAKCiAgCiAKIAoKICAKIAogCgogIAogCiAKCiAgCiAK IAoKICAKIAogCiAKIAoKICAKIAogCgogIAogCiAKCiAgCiAKIAogCgogIAogCiAKCiAgCiAKIAog CiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKCiAgCiAKIAoKCiAgCiAgCiAgCgogIAogCiAKCiAg CiAKIAogCiAKIAogCgogIAogCiAKIAogCiAKIAogCiAKIAogCgogIAogCiAKCgogIAogIAogIAoK IHR5cGVkZWYgc3RydWN0IHRhZ01RQ0ZIIHsKICAgTVFMT05HICBUeXBlOyAgICAgICAgICAgICAK ICAgTVFMT05HICBTdHJ1Y0xlbmd0aDsgICAgICAKICAgTVFMT05HICBWZXJzaW9uOyAgICAgICAg ICAKICAgTVFMT05HICBDb21tYW5kOyAgICAgICAgICAKICAgTVFMT05HICBNc2dTZXFOdW1iZXI7 ICAgICAKICAgTVFMT05HICBDb250cm9sOyAgICAgICAgICAKICAgTVFMT05HICBDb21wQ29kZTsg ICAgICAgICAKICAgTVFMT05HICBSZWFzb247ICAgICAgICAgICAKICAgTVFMT05HICBQYXJhbWV0 ZXJDb3VudDsgICAKIH0gTVFDRkg7CiB0eXBlZGVmIE1RQ0ZIICogIFBNUUNGSDsKCiAKIyA2NzAg Ii91c3IvaW5jbHVkZS9jbXFjZmMuaCIgMwoKCiAgCiAgCiAgCgogdHlwZWRlZiBzdHJ1Y3QgdGFn TVFDRklMIHsKICAgTVFMT05HICBUeXBlOyAgICAgICAgICAKICAgTVFMT05HICBTdHJ1Y0xlbmd0 aDsgICAKICAgTVFMT05HICBQYXJhbWV0ZXI7ICAgICAKICAgTVFMT05HICBDb3VudDsgICAgICAg ICAKICAgTVFMT05HICBWYWx1ZXNbMV07ICAgICAKIH0gTVFDRklMOwogdHlwZWRlZiBNUUNGSUwg KiAgUE1RQ0ZJTDsKCiAKCgoKCgoKICAKICAKICAKCiB0eXBlZGVmIHN0cnVjdCB0YWdNUUNGSU4g ewogICBNUUxPTkcgIFR5cGU7ICAgICAgICAgIAogICBNUUxPTkcgIFN0cnVjTGVuZ3RoOyAgIAog ICBNUUxPTkcgIFBhcmFtZXRlcjsgICAgIAogICBNUUxPTkcgIFZhbHVlOyAgICAgICAgIAogfSBN UUNGSU47CiB0eXBlZGVmIE1RQ0ZJTiAqICBQTVFDRklOOwoKIAoKCgoKCiAgCiAgCiAgCgogdHlw ZWRlZiBzdHJ1Y3QgdGFnTVFDRlNMIHsKICAgTVFMT05HICBUeXBlOyAgICAgICAgICAgICAKICAg TVFMT05HICBTdHJ1Y0xlbmd0aDsgICAgICAKICAgTVFMT05HICBQYXJhbWV0ZXI7ICAgICAgICAK ICAgTVFMT05HICBDb2RlZENoYXJTZXRJZDsgICAKICAgTVFMT05HICBDb3VudDsgICAgICAgICAg ICAKICAgTVFMT05HICBTdHJpbmdMZW5ndGg7ICAgICAKICAgTVFDSEFSICBTdHJpbmdzWzFdOyAg ICAgICAKIH0gTVFDRlNMOwogdHlwZWRlZiBNUUNGU0wgKiAgUE1RQ0ZTTDsKCiAKCgoKCgoKCgog IAogIAogIAoKIHR5cGVkZWYgc3RydWN0IHRhZ01RQ0ZTVCB7CiAgIE1RTE9ORyAgVHlwZTsgICAg ICAgICAgICAgCiAgIE1RTE9ORyAgU3RydWNMZW5ndGg7ICAgICAgCiAgIE1RTE9ORyAgUGFyYW1l dGVyOyAgICAgICAgCiAgIE1RTE9ORyAgQ29kZWRDaGFyU2V0SWQ7ICAgCiAgIE1RTE9ORyAgU3Ry aW5nTGVuZ3RoOyAgICAgCiAgIE1RQ0hBUiAgU3RyaW5nWzFdOyAgICAgICAgCiB9IE1RQ0ZTVDsK IHR5cGVkZWYgTVFDRlNUICogIFBNUUNGU1Q7CgogCgoKCgoKCgogCiAgIH0KIAoKICAKICAKICAK IAojIDUgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcW1lc3NhZ2UuaHBwIiAyCgoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCQoKY2xhc3MgTVFNZXNz YWdlSUQKewpwdWJsaWM6CgoJIAoJZW51bSBNc2dJRFR5cGUgeyBTZW5kLCBSZWNlaXZlIH07Cgog ICBNUU1lc3NhZ2VJRCgpOwogICBNUU1lc3NhZ2VJRChjb25zdCBJU3RyaW5nICYgICBhUlpCSywK ICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmICAgYVRvcGljLAogICAgICAgICAgICAgICBj b25zdCBJRGF0ZSAmICAgICBhRGF0ZSwKICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAg YVNlcXVlbmNlTnVtYmVyLAogICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICBhU2VyaWFs TnVtYmVyKTsKCQkJICAgCglNUU1lc3NhZ2VJRChjb25zdCBJU3RyaW5nICYgICAgICAgYVJaQkss CiAgICAgICAgICAgICAgIGNvbnN0IElTdHJpbmcgJiBhVG9waWMsCiAgICAgICAgICAgICAgIGNv bnN0IElEYXRlICYgIGFEYXRlLAogICAgICAgICAgICAgICBjb25zdCBJVGltZSAmYVRpbWUsCiAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgIGFTZXJpYWxOdW1iZXIpOwoJCQkgICAKICAgTVFN ZXNzYWdlSUQoY29uc3QgSVN0cmluZyAmYU1lc3NhZ2VJRFN0cmluZywgTXNnSURUeXBlIGFUeXBl KTsKCiAgIE1RTWVzc2FnZUlEKGNvbnN0IE1RTWVzc2FnZUlEICZvdGhlcik7CgogICB2aXJ0dWFs IH5NUU1lc3NhZ2VJRCgpOwoKICAgTVFNZXNzYWdlSUQgJiBvcGVyYXRvcj0oY29uc3QgTVFNZXNz YWdlSUQgJm90aGVyKTsKCglNc2dJRFR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBl OyB9CgkKICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CgogICB2b2lkIHNldFNlcmlhbE51bWJlcih1 bnNpZ25lZCBpbnQgYU51bWJlcik7CiAgIHZvaWQgbmV4dCgpOwogICB2b2lkIHByZXZpb3VzKCk7 CgogICBJU3RyaW5nICB0b1N0cmluZygpIGNvbnN0OwogICBJU3RyaW5nICB0b0ZpbGVuYW1lKCkg Y29uc3Q7CiAgIAogICBJU3RyaW5nCWdldFRvcGljKCkgY29uc3Q7Cgpwcml2YXRlOgoKCU1zZ0lE VHlwZQkJbVR5cGU7CgkKICAgSVN0cmluZyAgICAgICAgbVJaQks7CiAgIElTdHJpbmcgICAgICAg IG1TYWNoZ2ViaWV0OwogICBJRGF0ZSAgICAgICAgICBtRGF0ZTsKICAgSVRpbWUJCQltVGltZTsK ICAgdW5zaWduZWQgaW50ICAgbVNlcXVlbmNlTnVtYmVyOwogICB1bnNpZ25lZCBpbnQgICBtU2Vy aWFsTnVtYmVyOwp9OwoKY2xhc3MgTVFNZXNzYWdlCnsKCnB1YmxpYzoKICAgTVFNZXNzYWdlKCk7 CglNUU1lc3NhZ2UoY29uc3QgTVFNZXNzYWdlSUQgJmFNZXNzYWdlSUQpOwogICBNUU1lc3NhZ2Uo Y29uc3QgTVFNZXNzYWdlICZvdGhlcik7CgogICBNUU1lc3NhZ2UoICBjb25zdCBNUU1EICZkZXNj cmlwdG9yLAogICAgICAgICAgICAgICBjb25zdCBNUVBNTyAmcG9wdCwKICAgICAgICAgICAgICAg Y29uc3QgTVFHTU8gJmdvcHQsCiAgICAgICAgICAgICAgIGlvc3RyZWFtICogaW9zdHIsIHVuc2ln bmVkIGxvbmcgcG9zaXRpb24sIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKCiAgIE1RTWVzc2FnZSgg IGNvbnN0IE1RTUQgJmRlc2NyaXB0b3IsCiAgICAgICAgICAgICAgIGNvbnN0IE1RUE1PICZwb3B0 LAogICAgICAgICAgICAgICBjb25zdCBNUUdNTyAmZ29wdCwKICAgICAgICAgICAgICAgY2hhciAq YnVmZmVyLCB1bnNpZ25lZCBsb25nIHBvc2l0aW9uLCB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CgkK ICAgdmlydHVhbCAgICAgICAgfk1RTWVzc2FnZSgpOwoKICAgY29uc3QgTVFNZXNzYWdlICYgICAg b3BlcmF0b3I9KGNvbnN0IE1RTWVzc2FnZSAmb3RoZXIpOwoKICAgYm9vbCAgICAgICAgICAgaGFz QnVmZmVyKCk7CgoJdm9pZCAJCQlzZXRNZXNzYWdlVHlwZShNUU1lc3NhZ2VJRDo6TXNnSURUeXBl IGFNc2dUeXBlKTsKCU1RTWVzc2FnZUlEOjpNc2dJRFR5cGUgCQkJZ2V0TWVzc2FnZVR5cGUoKTsK ICAgdm9pZCAgICAgICAgICAgc2V0TWVzc2FnZUlEKGNvbnN0IE1RTWVzc2FnZUlEICZtaWQpOwog ICBJU3RyaW5nICAgICAgICBnZXRNZXNzYWdlSUQoKSBjb25zdDsKICAgY29uc3QgTVFNZXNzYWdl SUQgJiBnZXRNUU1lc3NhZ2VJRCgpOwoKICAgIAogICB2b2lkICAgICAgICAgICBzZXREZXNjcmlw dG9yKGNvbnN0IE1RTUQgJmRlc2MpOwogICBjb25zdCBNUU1EICYgICBnZXREZXNjcmlwdG9yKCkg Y29uc3Q7CgogICAgCiAgIHZvaWQgICAgICAgICAgIHNldFBVVE9wdGlvbnMoY29uc3QgTVFQTU8g Jm9wdGlvbnMpOwogICBjb25zdCBNUVBNTyAmICBnZXRQVVRPcHRpb25zKCkgY29uc3Q7CgogICAg CiAgIHZvaWQgICAgICAgICAgIHNldEdFVE9wdGlvbnMoY29uc3QgTVFHTU8gJm9wdGlvbnMpOwog ICBjb25zdCBNUUdNTyAmICBnZXRHRVRPcHRpb25zKCkgY29uc3Q7CgogICAgCiAgIGludCAgICAg ICAgICAgIHNldFN0cmVhbShpb3N0cmVhbSAqaW9zdHIsIHVuc2lnbmVkIGxvbmcgcG9zaXRpb24s IHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKICAgaW9zdHJlYW0gKiAgICAgZ2V0U3RyZWFtKCkgY29u c3Q7CgogICBjaGFyICogICAgICAgICBnZXRCdWZmZXIoKSBjb25zdDsKICAgYm9vbAkJCSAgIGNy ZWF0ZUJ1ZmZlcih1bnNpZ25lZCBsb25nIGFCdWZmZXJsZW5ndGgpOwkKCiAgIHVuc2lnbmVkIGxv bmcgIGdldFBvc2l0aW9uKCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxvbmcgIGdldExlbmd0aCgpIGNv bnN0OwoKcHJpdmF0ZToKCglNUU1lc3NhZ2VJRDo6TXNnSURUeXBlCQltTWVzc2FnZVR5cGU7CglN UU1lc3NhZ2VJRCAJCQkJbU1lc3NhZ2VJRDsKCQogICBNUU1EICAgICAgICAgICAJCQkJbURlc2Ny aXB0b3I7CgogICBNUUdNTyAgICAgICAgICAJCQkJbUdFVE9wdGlvbnM7CiAgIE1RUE1PICAgICAg ICAgIAkJCQltUFVUT3B0aW9uczsKCiAgIGNoYXIgKiAgICAgICAgIAkJCQltQnVmZmVyOwoKICAg aW9zdHJlYW0gKiAgICAgCQkJCW1JT1N0cmVhbTsKICAgdW5zaWduZWQgbG9uZyAgCQkJCW1Qb3Np dGlvbjsKICAgdW5zaWduZWQgbG9uZyAJCQkJbUxlbmd0aDsKICAgCiAgIGJvb2wgCQkJbU1lc3Nh Z2VJRFBhcnNlZDsKfTsKCgojIDQgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1 ZXVlLmhwcCIgMgoKCgoKY2xhc3MgTVFCYXNlOwpjbGFzcyBNUUNvbm5lY3Rpb247CmNsYXNzIE1R UXVldWU7CgpjbGFzcyBNUUJhc2UKewpwdWJsaWM6CiAgIE1RQmFzZSgpOwogICB2aXJ0dWFsIH5N UUJhc2UoKTsKCiAgIHZvaWQgICAgICAgICAgICAgIHNldEVycm9yKCBjb25zdCBJU3RyaW5nICZm dW5jdGlvbiwgdW5zaWduZWQgaW50IGNvbXBsZXRpb25jb2RlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhc29uY29kZSk7CgogICB2aXJ0dWFsIHZv aWQgICAgICBoYW5kbGVFcnJvcihjb25zdCBJU3RyaW5nICZhRnVuY3Rpb24sIHVuc2lnbmVkIGlu dCBjb21wbGV0aW9uY29kZSwgdW5zaWduZWQgaW50IHJlYXNvbmNvZGUpID0gMDsKCiAgIHZvaWQg ICAgICAgICAgICAgIGdldExhc3RFcnJvcihpbnQgJmFDb21wbGV0aW9uQ29kZSwgaW50ICZhUmVh c29uQ29kZSwgSVN0cmluZyAmYUVycm9yTWVzc2FnZSk7CiAgIGNvbnN0IElTdHJpbmcgJiAgIGdl dEVycm9yTWVzc2FnZSgpOwoKICAgYm9vbCAgICAgICAgICAgICAgdHJ5bG9jaygpOwogICBib29s ICAgICAgICAgICAgICBsb2NrKGxvbmcgdGltZW91dCA9IC0xICApOwogICBib29sICAgICAgICAg ICAgICB1bmxvY2soKTsKCiAgIGNvbnN0IElTdHJpbmcgJiAgIGdldE5hbWUoKSBjb25zdDsKCnBy b3RlY3RlZDoKICAgSVN0cmluZyAgICAgICAgICAgbU5hbWU7CiAgIE1RUlIgICAgICAgICAgICAg IG1SZXNwb25zZUNvZGU7ICAgICAKICAgSVN0cmluZyAgICAgICAgICAgbUVycm9yTWVzc2FnZTsg ICAgIAoKcHJpdmF0ZToKICAgSVByaXZhdGVSZXNvdXJjZSAgbVByaXZhdGVSZXNvdXJjZTsKICAg dW5zaWduZWQgaW50ICAgICAgbUxvY2tDb3VudDsKfTsKCmNsYXNzIE1RQ29ubmVjdGlvbiA6IHB1 YmxpYyBNUUJhc2UKewpwdWJsaWM6CgogICBNUUNvbm5lY3Rpb24oY29uc3QgSVN0cmluZyAmYUNv bm5lY3Rpb25NYW5hZ2VyKTsKICAgdmlydHVhbCB+TVFDb25uZWN0aW9uKCk7CgogICBNUUhDT05O IGdldEhhbmRsZSgpOwogICBJU3RyaW5nIGdldE1hbmFnZXJOYW1lKCk7CgogICAgCiAgIGludCAg IGNvbm5lY3QodW5zaWduZWQgaW50IHJldHJ5ICA9IDMpOwogICAgCiAgIGludCAgIGRpc2Nvbm5l Y3QoKTsKCiAgIGludCAgIGNvbW1pdCgpOwogICBpbnQgICByb2xsYmFjaygpOwoKICAgIAogICBi b29sICBpc0Nvbm5lY3RlZCgpOwoKICAgdm9pZCBhZGRRdWV1ZShNUVF1ZXVlICphUXVldWUpOwoK ICAgdmlydHVhbCB2b2lkIGhhbmRsZUVycm9yKGNvbnN0IElTdHJpbmcgJmFGdW5jdGlvbiwgdW5z aWduZWQgaW50IGNvbXBsZXRpb25jb2RlLCB1bnNpZ25lZCBpbnQgcmVhc29uY29kZSk7Cgpwcml2 YXRlOgogICBJU2VxdWVuY2U8TVFRdWV1ZSAqPiAgICBtUXVldWVzOyAgICAgICAgICAgICAgCiAg IE1RSENPTk4gICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSGFuZGxlOyAgICAKfTsKCmNsYXNz IE1RUXVldWUgOiBwdWJsaWMgTVFCYXNlCnsKcHVibGljOgoKICAgTVFRdWV1ZShNUUNvbm5lY3Rp b24gKmFDb25uZWN0aW9uLCBjb25zdCBJU3RyaW5nICZxdWV1ZU5hbWUsIHVuc2lnbmVkIGxvbmcg bWF4TWVzc2FnZVNpemUsCiAgICAgICAgICAgIE1RTE9ORyBvcGVuX29wdGlvbnMpOwogICB2aXJ0 dWFsIH5NUVF1ZXVlKCk7CgogICBib29sIGlzT3BlbigpOwoKICAgdm9pZCBzZXRDb25uZWN0aW9u KE1RQ29ubmVjdGlvbiAqYUNvbm5lY3Rpb24pOwogICBNUUNvbm5lY3Rpb24gKiBnZXRDb25uZWN0 aW9uKCk7CgogICAgCiAgIGludCBvcGVuKE1RTE9ORyBvcHRpb25zID0gMCk7CiAgICAKICAgaW50 IGNsb3NlKE1RTE9ORyBvcHRpb25zID0gMCk7CgogICAgCiAgIGludCBxdWVyeUludGVnZXJBdHRy aWJ1dGUoTVFMT05HIGF0dHJpYnV0ZSwgTVFMT05HICZyZXN1bHQpOwoKICAgaW50IGNvbnRhaW5z KE1RTWVzc2FnZUlEICZhTWVzc2FnZUlEKTsKCiAgICAKICAgaW50IGRvZXNFeGlzdChNUU1lc3Nh Z2VJRCAmYU1lc3NhZ2VJRCwgYm9vbCAmcmMpOwoKICAgIAogICBpbnQgcHV0KE1RTWVzc2FnZSAm bXNnKTsKCiAgICAKICAgIAogICBpbnQgcHV0KCBjb25zdCBNUU1EICBkZXNjcmlwdG9yLCAgICAg ICAgCiAgICAgICAgICAgIGNvbnN0IE1RUE1PIG9wdGlvbnMsICAgICAgICAgICAKICAgICAgICAg ICAgaW9zdHJlYW0gKiAgaW9zdHIsICAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBNUU1l c3NhZ2VJRCAmbWlkX3N0YXJ0LCAgCiAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgJm1zZ19jb3Vu dCk7ICAgICAKCiAgICAKICAgaW50IGdldChNUU1lc3NhZ2UgJm1zZywgdW5zaWduZWQgbG9uZyAq YUxlbmd0aCA9IDApOwogICAKICAgaW50IGdldCgJY29uc3QgSVN0cmluZyAmYU1lc3NhZ2VJRCwg CgkJCWNvbnN0IElTdHJpbmcgJmFDb3JyZWxhdGlvbklELAoJCQlsb25nIGFNZXNzYWdlQ291bnQs CgkJCW9zdHJlYW0gJmFTdHJlYW0pOwogICAKICAgYm9vbAliZWdpbigpOwogICBib29sIG5leHQo TVFNZXNzYWdlICZhTWVzc2FnZSwgdW5zaWduZWQgbG9uZyAqYUxlbmd0aCA9IDApOwogICBib29s IGVuZCgpOwkKCiAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihjb25zdCBJU3RyaW5nICZhRnVu Y3Rpb24sIHVuc2lnbmVkIGludCBjb21wbGV0aW9uY29kZSwgdW5zaWduZWQgaW50IHJlYXNvbmNv ZGUpOwoKcHJpdmF0ZToKCgllbnVtIHsgTm9uZSwgQnJvd3NlRmlyc3QsIEJyb3dzZU5leHQgfTsJ IAoKICAgTVFDb25uZWN0aW9uICptQ29ubmVjdGlvbjsgICAgICAgICAgCgogICBNUUhPQkogICBt UXVldWVIYW5kbGU7ICAgICAgICAgCiAgIE1RT0QgICAgIG1PYmplY3REZXNjcmlwdG9yOyAgICAK ICAgTVFMT05HICAgbU1heE1lc3NhZ2VTaXplOyAgICAgIAogICBNUUxPTkcgICBtT3Blbk9wdGlv bnM7CiAgIAogICBpbnQgCQltQnJvd3NlT3B0aW9uczsKfTsKCgojIDE4ICIvaG9tZS94aHU2MDMx L3RzZncvbXFmdHNlcnZpY2UvbXFxdWV1ZS5jcHAiIDIKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3 L21xZnRzZXJ2aWNlL1RTRldNUUZUU2VydmljZS5ocHAiIDEKIAogCiAKIAogCgoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAx IDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIv aW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAxMCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRz ZXJ2aWNlL1RTRldNUUZUU2VydmljZS5ocHAiIDIKCgogCgoKCiMgMSAiL2hvbWUvYWtub2xsL2lv Y3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFzZS5ocHAiIDEKIyAxMCAi L2hvbWUvYWtub2xsL2lvY3NyYy9saW51eF9zMzkwLXNoYXJlZC5iaW4vaW5jbHVkZS9pZXhjYmFz ZS5ocHAiCgoKIyA3MjYgIi9ob21lL2Frbm9sbC9pb2NzcmMvbGludXhfczM5MC1zaGFyZWQuYmlu L2luY2x1ZGUvaWV4Y2Jhc2UuaHBwIgoKCgoKCgojIDE2ICIvaG9tZS94aHU2MDMxL3RzZncvbXFm dHNlcnZpY2UvVFNGV01RRlRTZXJ2aWNlLmhwcCIgMgoKCiAKZXh0ZXJuICJDIiB7CiAgICAKIyAx ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK IAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1s aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xp Yi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgog CgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1 LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGli L3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAK CgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli L3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgoKCiAK CgoKCgogCgpzdHJ1Y3Qgb3NvY2thZGRyCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHNhX2Zh bWlseTsKICAgIHVuc2lnbmVkIGNoYXIgc2FfZGF0YVsxNF07CiAgfTsKCgogCgplbnVtCnsKICBT SFVUX1JEID0gMCwJCSAKCiAgU0hVVF9XUiwJCSAKCiAgU0hVVF9SRFdSCQkgCgp9OwoKIAoKCgoK CgoKCgojIDk0ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCgoKCiAKCgpleHRlcm4gaW50 IHNvY2tldCAgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9jb2wpICB0aHJv dyAoKSAgOwoKIAoKCgpleHRlcm4gaW50IHNvY2tldHBhaXIgIChpbnQgX19kb21haW4sIGludCBf X3R5cGUsIGludCBfX3Byb3RvY29sLAoJCQkgICAgaW50IF9fZmRzWzJdKSAgdGhyb3cgKCkgIDsK CiAKZXh0ZXJuIGludCBiaW5kICAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICog IF9fYWRkciwgc29ja2xlbl90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBnZXRz b2NrbmFtZSAgKGludCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKiAgX19hZGRyLAoJCQkgICAgIHNv Y2tsZW5fdCAqX19sZW4pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gaW50IF9fY29ubmVjdCAg KGludCBfX2ZkLAoJCQkgICBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqICBfX2FkZHIsIHNvY2ts ZW5fdCBfX2xlbikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgY29ubmVjdCAgKGludCBfX2ZkLAoJ CQkgX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiAgX19hZGRyLCBzb2NrbGVuX3QgX19sZW4pICB0 aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBnZXRwZWVybmFtZSAgKGludCBfX2ZkLCBzdHJ1Y3Qg c29ja2FkZHIgKiAgX19hZGRyLAoJCQkgICAgIHNvY2tsZW5fdCAqX19sZW4pICB0aHJvdyAoKSAg OwoKCiAKZXh0ZXJuIGludCBfX3NlbmQgIChpbnQgX19mZCwgX19jb25zdCB2b2lkICogIF9fYnVm LCBzaXplX3QgX19uLAoJCQlpbnQgX19mbGFncykgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2Vu ZCAgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24sCgkJICAgICAg aW50IF9fZmxhZ3MpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCByZWN2ICAoaW50IF9fZmQs IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKSAgdGhyb3cgKCkgIDsKCiAK CmV4dGVybiBpbnQgc2VuZHRvICAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqICBfX2J1Ziwgc2l6 ZV90IF9fbiwKCQkJaW50IF9fZmxhZ3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogIF9fYWRk ciwKCQkJc29ja2xlbl90IF9fYWRkcl9sZW4pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gaW50 IHJlY3Zmcm9tICAoaW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24sIGludCBfX2Zs YWdzLAoJCQkgIHN0cnVjdCBzb2NrYWRkciAqICBfX2FkZHIsIHNvY2tsZW5fdCAqX19hZGRyX2xl bikgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGludCBzZW5kbXNnICAoaW50IF9fZmQsIF9fY29u c3Qgc3RydWN0IG1zZ2hkciAqX19tZXNzYWdlLAoJCQkgaW50IF9fZmxhZ3MpICB0aHJvdyAoKSAg OwoKIAoKZXh0ZXJuIGludCByZWN2bXNnICAoaW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVz c2FnZSwgaW50IF9fZmxhZ3MpICB0aHJvdyAoKSAgOwoKCiAKCgpleHRlcm4gaW50IGdldHNvY2tv cHQgIChpbnQgX19mZCwgaW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCgkJCSAgICB2b2lkICog IF9fb3B0dmFsLCBzb2NrbGVuX3QgKl9fb3B0bGVuKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4g aW50IHNldHNvY2tvcHQgIChpbnQgX19mZCwgaW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCgkJ CSAgICBfX2NvbnN0IHZvaWQgKiAgX19vcHR2YWwsIHNvY2tsZW5fdCBfX29wdGxlbikgIHRocm93 ICgpICA7CgoKIAoKCmV4dGVybiBpbnQgbGlzdGVuICAoaW50IF9fZmQsIHVuc2lnbmVkIGludCBf X24pICB0aHJvdyAoKSAgOwoKIAoKCgoKZXh0ZXJuIGludCBhY2NlcHQgIChpbnQgX19mZCwgc3Ry dWN0IHNvY2thZGRyICogIF9fYWRkciwKCQkJc29ja2xlbl90ICpfX2FkZHJfbGVuKSAgdGhyb3cg KCkgIDsKCiAKCgoKCgpleHRlcm4gaW50IHNodXRkb3duICAoaW50IF9fZmQsIGludCBfX2hvdykg IHRocm93ICgpICA7CgoKIAoKCmV4dGVybiBpbnQgaXNmZHR5cGUgIChpbnQgX19mZCwgaW50IF9f ZmR0eXBlKSAgdGhyb3cgKCkgIDsKCn0gCgoKIyAzMSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIg MwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2Ut bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAi L3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNy L2xpYi9nY2MtbGliL3MzOTAtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2dj Yy1saWIvczM5MC1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoK CgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9zMzkwLXN1c2UtbGludXgvMi45 NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzMg Ii91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIApl eHRlcm4gaW50IGhfZXJybm87CgogCmV4dGVybiBpbnQgKl9faF9lcnJub19sb2NhdGlvbiAgKHZv aWQpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNjIgIi91c3Iv aW5jbHVkZS9uZXRkYi5oIiAzCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKIAoKZXh0ZXJuIHZvaWQg aGVycm9yICAoX19jb25zdCBjaGFyICpfX3N0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBfX2Nv bnN0IGNoYXIgKmhzdHJlcnJvciAgKGludCBfX2Vycl9udW0pICB0aHJvdyAoKSAgOwoKCgogCnN0 cnVjdCBob3N0ZW50CnsKICBjaGFyICpoX25hbWU7CQkJIAogIGNoYXIgKipoX2FsaWFzZXM7CQkg CiAgaW50IGhfYWRkcnR5cGU7CQkgCiAgaW50IGhfbGVuZ3RoOwkJCSAKICBjaGFyICoqaF9hZGRy X2xpc3Q7CQkgCgp9OwoKIAoKZXh0ZXJuIHZvaWQgc2V0aG9zdGVudCAgKGludCBfX3N0YXlfb3Bl bikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIGVuZGhvc3RlbnQgICh2b2lkKSAgdGhyb3cg KCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGVudCAgKHZvaWQpICB0aHJv dyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyICAoX19jb25z dCBjaGFyICpfX2FkZHIsIHNpemVfdCBfX2xlbiwKCQkJCQkgICBpbnQgX190eXBlKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lICAoX19jb25zdCBj aGFyICpfX25hbWUpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0 aG9zdGJ5bmFtZTIgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fYWYpICB0aHJvdyAoKSAg OwoKCiAKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdGVudF9yICAoc3RydWN0IGhvc3RlbnQgKl9fcmVz dHJpY3QgX19yZXN1bHRfYnVmLAoJCQkgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl X3QgX19idWZsZW4sCgkJCSAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3Vs dCwKCQkJICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApICB0aHJvdyAoKSAgOwoKZXh0 ZXJuIGludCBnZXRob3N0YnlhZGRyX3IgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19hZGRy LCBzaXplX3QgX19sZW4sCgkJCQkgaW50IF9fdHlwZSwKCQkJCSBzdHJ1Y3QgaG9zdGVudCAqX19y ZXN0cmljdCBfX3Jlc3VsdF9idWYsCgkJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90 IF9fYnVmbGVuLAoJCQkJIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKCQkJ CSBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGdl dGhvc3RieW5hbWVfciAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCgkJCQkgc3Ry dWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAoJCQkJIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKCQkJCSBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJp Y3QgX19yZXN1bHQsCgkJCQkgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApICB0aHJvdyAoKSAg OwoKZXh0ZXJuIGludCBnZXRob3N0YnluYW1lMl9yICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbmFtZSwgaW50IF9fYWYsCgkJCQkgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVz dWx0X2J1ZiwKCQkJCSAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAoJ CQkJICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCgkJCQkgIGludCAqX19y ZXN0cmljdCBfX2hfZXJybm9wKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QgbmV0 ZW50CnsKICBjaGFyICpuX25hbWU7CQkJIAogIGNoYXIgKipuX2FsaWFzZXM7CQkgCiAgaW50IG5f YWRkcnR5cGU7CQkgCiAgdW5zaWduZWQgbG9uZwlpbnQgbl9uZXQ7CSAKfTsKCiAKCmV4dGVybiB2 b2lkIHNldG5ldGVudCAgKGludCBfX3N0YXlfb3BlbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2 b2lkIGVuZG5ldGVudCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCBuZXRl bnQgKmdldG5ldGVudCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCBuZXRl bnQgKmdldG5ldGJ5YWRkciAgKHVuc2lnbmVkIGxvbmcgaW50IF9fbmV0LAoJCQkJCSBpbnQgX190 eXBlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5bmFtZSAg KF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgogCgoKCgpleHRlcm4gaW50IGdl dG5ldGVudF9yICAoc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCgkJCSAg ICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAoJCQkgICAgIHN0cnVj dCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAoJCQkgICAgIGludCAqX19yZXN0cmljdCBf X2hfZXJybm9wKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgZ2V0bmV0YnlhZGRyX3IgICh1bnNp Z25lZCBsb25nIGludCBfX25ldCwgaW50IF9fdHlwZSwKCQkJCXN0cnVjdCBuZXRlbnQgKl9fcmVz dHJpY3QgX19yZXN1bHRfYnVmLAoJCQkJY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuLAoJCQkJc3RydWN0IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCgkJCQlpbnQg Kl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGdldG5ldGJ5 bmFtZV9yICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKCQkJCXN0cnVjdCBuZXRl bnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAoJCQkJY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuLAoJCQkJc3RydWN0IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQs CgkJCQlpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgIHRocm93ICgpICA7CgoKCiAKc3RydWN0 IHNlcnZlbnQKewogIGNoYXIgKnNfbmFtZTsJCQkgCiAgY2hhciAqKnNfYWxpYXNlczsJCSAKICBp bnQgc19wb3J0OwkJCSAKICBjaGFyICpzX3Byb3RvOwkJIAp9OwoKIAoKZXh0ZXJuIHZvaWQgc2V0 c2VydmVudCAgKGludCBfX3N0YXlfb3BlbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIGVu ZHNlcnZlbnQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAq Z2V0c2VydmVudCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50 ICpnZXRzZXJ2YnluYW1lICAoX19jb25zdCBjaGFyICpfX25hbWUsCgkJCQkJICAgX19jb25zdCBj aGFyICpfX3Byb3RvKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0 c2VydmJ5cG9ydCAgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19wcm90bykgIHRocm93ICgp ICA7CgoKCiAKCmV4dGVybiBpbnQgZ2V0c2VydmVudF9yICAoc3RydWN0IHNlcnZlbnQgKl9fcmVz dHJpY3QgX19yZXN1bHRfYnVmLAoJCQkgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl X3QgX19idWZsZW4sCgkJCSAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3Vs dCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGdldHNlcnZieW5hbWVfciAgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25hbWUsCgkJCQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJv dG8sCgkJCQkgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAoJCQkJIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKCQkJCSBzdHJ1Y3Qgc2VydmVu dCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBnZXRzZXJ2 Ynlwb3J0X3IgIChpbnQgX19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90bywK CQkJCSBzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCgkJCQkgY2hhciAq X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAoJCQkJIHN0cnVjdCBzZXJ2ZW50ICoq X19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7CgoKCiAKc3RydWN0IHByb3RvZW50CnsK ICBjaGFyICpwX25hbWU7CQkJIAogIGNoYXIgKipwX2FsaWFzZXM7CQkgCiAgaW50IHBfcHJvdG87 CQkJIAp9OwoKIAoKZXh0ZXJuIHZvaWQgc2V0cHJvdG9lbnQgIChpbnQgX19zdGF5X29wZW4pICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBlbmRwcm90b2VudCAgKHZvaWQpICB0aHJvdyAoKSAg OwoKIAoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQgICh2b2lkKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUgIChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdl dHByb3RvYnludW1iZXIgIChpbnQgX19wcm90bykgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBp bnQgZ2V0cHJvdG9lbnRfciAgKHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9i dWYsCgkJCSAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCgkJ CSAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkg IDsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW5hbWVfciAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25hbWUsCgkJCQkgIHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYs CgkJCQkgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKCQkJCSAgc3Ry dWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7CgpleHRlcm4g aW50IGdldHByb3RvYnludW1iZXJfciAgKGludCBfX3Byb3RvLAoJCQkJICAgIHN0cnVjdCBwcm90 b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCgkJCQkgICAgY2hhciAqX19yZXN0cmljdCBf X2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAoJCQkJICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVzdHJp Y3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc2V0bmV0Z3JlbnQgIChf X2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXApICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBlbmRu ZXRncmVudCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBnZXRuZXRncmVudCAg KGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX191 c2VycCwKCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2RvbWFpbnApICB0aHJvdyAoKSAgOwoK IApleHRlcm4gaW50IGlubmV0Z3IgIChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXAsIF9fY29uc3Qg Y2hhciAqX19ob3N0LAoJCQkgX19jb25zdCBjaGFyICpfX3VzZXIsIF9fY29uc3QgY2hhciAqZG9t YWluKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgZ2V0bmV0Z3JlbnRfciAgKGNoYXIgKipf X3Jlc3RyaWN0IF9faG9zdHAsCgkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAoJ CQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wLAoJCQkgICAgICAgY2hhciAqX19y ZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsKCgoKCiAKCgoK CgpleHRlcm4gaW50IHJjbWQgIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBz aG9ydCBpbnQgX19ycG9ydCwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19sb2N1 c2VyLAoJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVzZXIsCgkJICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwKSAg dGhyb3cgKCkgIDsKCiAKCgoKCmV4dGVybiBpbnQgcmV4ZWMgIChjaGFyICoqX19yZXN0cmljdCBf X2Fob3N0LCBpbnQgX19ycG9ydCwKCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bmFtZSwKCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKCQkgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLAoJCSAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19mZDJwKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gaW50IHJ1c2Vyb2sgIChfX2NvbnN0IGNo YXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAoJCQkgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9f Y29uc3QgY2hhciAqX19sb2N1c2VyKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gaW50IHJyZXN2 cG9ydCAgKGludCAqX19hbHBvcnQpICB0aHJvdyAoKSAgOwoKCgogCgogCnN0cnVjdCBhZGRyaW5m bwp7CiAgaW50IGFpX2ZsYWdzOwkJCSAKICBpbnQgYWlfZmFtaWx5OwkJIAogIGludCBhaV9zb2Nr dHlwZTsJCSAKICBpbnQgYWlfcHJvdG9jb2w7CQkgCiAgaW50IGFpX2FkZHJsZW47CQkgCiAgc3Ry dWN0IHNvY2thZGRyICphaV9hZGRyOwkgCiAgY2hhciAqYWlfY2Fub25uYW1lOwkJIAogIHN0cnVj dCBhZGRyaW5mbyAqYWlfbmV4dDsJIAp9OwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgpleHRlcm4gaW50IGdldGFkZHJpbmZvICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt ZSwKCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2aWNlLAoJCQkgICAgIF9f Y29uc3Qgc3RydWN0IGFkZHJpbmZvICpfX3Jlc3RyaWN0IF9fcmVxLAoJCQkgICAgIHN0cnVjdCBh ZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBm cmVlYWRkcmluZm8gIChzdHJ1Y3QgYWRkcmluZm8gKl9fYWkpICB0aHJvdyAoKSAgOwoKIApleHRl cm4gY2hhciAqZ2FpX3N0cmVycm9yICAoaW50IF9fZWNvZGUpICB0aHJvdyAoKSAgOwoKIApleHRl cm4gaW50IGdldG5hbWVpbmZvICAoX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3Qg X19zYSwKCQkJICAgICBzb2NrbGVuX3QgX19zYWxlbiwKCQkJICAgICBjaGFyICpfX3Jlc3RyaWN0 IF9faG9zdCwgc2l6ZV90IF9faG9zdGxlbiwKCQkJICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fc2Vy diwgc2l6ZV90IF9fc2VydmxlbiwKCQkJICAgICBpbnQgX19mbGFncykgIHRocm93ICgpICA7CgoK Cn0gCgoKIyAyMCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZUU2Vydmlj ZS5ocHAiIDIKCiAgICAKCiAgICAKCgoKCn0KCiAKCgoKCgojIDEgIi9ob21lL3hodTYwMzEvdHNm dy9JbmNsdWRlL1RTRldTZXNzaW9uQ29udGV4dC5ocHAiIDEKIAogCiAKIAogCgoKICAgIAoKICAg ICAKICAgIGV4dGVybiAiQyIgewogICAgICAgIAogICAgfQoKICAgICAKICAgIAoKICAgICAKICAg ICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogICAgY2xhc3Mg VFNGV1Nlc3Npb25Db250ZXh0IHsKICAgIHB1YmxpYzoKCiAgICAgICAgIAoKCiAgICAgICAgVFNG V1Nlc3Npb25Db250ZXh0KFRTRldEYXRhSXRlbSAqYUNvbnRhaW5lcik7CgogICAgICAgICAKCgog ICAgICAgIH5UU0ZXU2Vzc2lvbkNvbnRleHQoKTsKCiAgICAgICAgIAoKCiAgICAgICAgSVN0cmlu ZyBjbGllbnRJUEFkZHIodm9pZCkgY29uc3Q7CgogICAgICAgICAKCgogICAgICAgIHVuc2lnbmVk IGxvbmcgY2xpZW50SVBBZGRyQXNVbnNpZ25lZCh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCiAg ICAgICAgY29uc3QgSVN0cmluZyBjdXJyZW50R2Vub1VzZXIodm9pZCkgY29uc3Q7CgogICAgICAg ICAKCgogICAgICAgIGNvbnN0IElTdHJpbmcgZmlyc3RHZW5vVXNlcih2b2lkKSBjb25zdDsKCiAg ICAgICAgIAoKCiAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBjdXJyZW50VXNlcklkKHZvaWQp IGNvbnN0OwoKICAgICAgICAgCgoKICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGZpcnN0VXNl cklkKHZvaWQpIGNvbnN0OwoKICAgICAgICAgCgoKICAgICAgICBjb25zdCBJU3RyaW5nIGN1cnJl bnRQYXNzd29yZCh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoKCiAgICAgICAgY29uc3QgSVN0cmlu ZyBmaXJzdFBhc3N3b3JkKHZvaWQpIGNvbnN0OwogICAgICAgIAogICAgICAgICAKCgogICAgICAg IGNvbnN0IElTdHJpbmcgY3VycmVudFZOYW1lKHZvaWQpIGNvbnN0OwoKICAgICAgICAgCgoKICAg ICAgICBjb25zdCBJU3RyaW5nIGN1cnJlbnRaTmFtZSh2b2lkKSBjb25zdDsKCiAgICAgICAgIAoK CiAgICAgICAgY29uc3QgSVN0cmluZyBjdXJyZW50VGVsZWZvbih2b2lkKSBjb25zdDsKCiAgICAg ICAgIAoKCiAgICAgICAgdm9pZCBsb2dvbihjb25zdCBJU3RyaW5nICZhR2Vub1VzZXIsIAogICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhQmVkTnIsICAKICAgICAgICAgICAgICAgICAg IGNvbnN0IElTdHJpbmcgJmFQYXNzd29yZCwgCiAgICAgICAgICAgICAgICAgICBjb25zdCBJU3Ry aW5nICZhVk5hbWUsIAogICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYVpOYW1lLAog ICAgICAgICAgICAgICAgICAgY29uc3QgSVN0cmluZyAmYVRlbE5yKTsKICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAKCgogICAgICAgIHZvaWQgbG9nb2ZmKHZvaWQpOwoKICAgICAgICAgCgoK ICAgICAgICBib29sIGlzTG9nZ2VkT24odm9pZCkgY29uc3Q7CgogICAgICAgICAKCgogICAgICAg IGNvbnN0IFRTRldEYXRhSXRlbSAmYXNEYXRhSXRlbSh2b2lkKTsKCiAgICBwcml2YXRlOgoKICAg ICAgICAgCgoKICAgICAgICBUU0ZXRGF0YUFycmF5ICpsb2dpbkFycmF5KHZvaWQpIGNvbnN0OwoK ICAgICAgICAgCiAgICAgICAgbXV0YWJsZSBUU0ZXRGF0YUl0ZW0gICAgICAgICAgICAgICAgICAg KnRoZURhdGFJdGVtOwogICAgfTsKCiAgICAgCiAgICBjbGFzcyBUU0ZXT2ZmbGluZUV4Y2VwdGlv biA6IHB1YmxpYyBJRXhjZXB0aW9uIHsKICAgIHB1YmxpYzoKCiAgICAgICAgIAoKCiAgICAgICAg VFNGV09mZmxpbmVFeGNlcHRpb24oKTsKCiAgICAgICAgIAoKCiAgICAgICAgflRTRldPZmZsaW5l RXhjZXB0aW9uKCk7CgogICAgICAgICAKCgogICAgICAgIGNvbnN0IGNoYXIgKm5hbWUodm9pZCkg Y29uc3Q7CiAgICB9OwoKCgogCiAKIAogCiAKIyAzNiAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRz ZXJ2aWNlL1RTRldNUUZUU2VydmljZS5ocHAiIDIKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0lu Y2x1ZGUvVFNGV1RocmVhZFBvb2wuaHBwIiAxCgoKCiAgCgogICAgIAoKCgoKCgpjbGFzcyBUU0ZX VGhyZWFkUG9vbDsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBUU0ZXU2VjdXJlQXNzaWdubWVu dAp7CnB1YmxpYzoKCVRTRldTZWN1cmVBc3NpZ25tZW50KFQgYVZhbHVlKQoJewoJCQogICAgICAJ CXB0aHJlYWRfbXV0ZXhfaW5pdCgmbU11dGV4LCAwKTsKCSAgICAJcHRocmVhZF9jb25kX2luaXQo Jm1Db25kaXRpb24sIDApOwogICAgCQoJCQoJCWFzc2lnbihhVmFsdWUpOwoJfQoJflRTRldTZWN1 cmVBc3NpZ25tZW50KCkKCXsKCQkKICAgICAgCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm1NdXRl eCk7CiAgICAgIAkJcHRocmVhZF9jb25kX2Rlc3Ryb3koJm1Db25kaXRpb24pOwogICAgCQoJfQoJ Cgl2b2lkIGFzc2lnbihUIGFWYWx1ZSkgeyBtVmFyaWFibGUgPSBhVmFsdWU7IH0KCQoJdm9pZCBh c3NpZ25BbmRTaWduYWwoVCBhVmFsdWUpCgl7CgkJCiAgICAJCXB0aHJlYWRfbXV0ZXhfbG9jaygg Jm1NdXRleCApOwogICAgCQoKICAgIAlhc3NpZ24oYVZhbHVlKTsKCgkJIAogICAgCQogICAgICAg IAlwdGhyZWFkX2NvbmRfc2lnbmFsKCZtQ29uZGl0aW9uKTsgCgkJCXB0aHJlYWRfbXV0ZXhfdW5s b2NrKCAmbU11dGV4ICk7CiAgICAJCgoKCX0KCQoJdm9pZCB3YWl0Rm9yVmFsdWUoKQoJewoJIAkK ICAgICAgICAJcHRocmVhZF9tdXRleF9sb2NrKCAmbU11dGV4ICk7CgkJCQoJCQkgCgkJCWlmICgh bVZhcmlhYmxlKQoJCQl7CiAgCSAgICAgICAgCXB0aHJlYWRfY29uZF93YWl0KCZtQ29uZGl0aW9u LCAmbU11dGV4KTsKCQkJfQogICAgICAgIAoKCgoKCgkJCQoKICAgICAgICAKICAgICAgICAgIAlw dGhyZWFkX211dGV4X3VubG9jayggJm1NdXRleCApOwogICAgICAgIAoJfQoJCgl2b2lkIHdhaXRV bnRpbE51bGwoKQoJewoJIAkKICAgICAgICAJcHRocmVhZF9tdXRleF9sb2NrKCAmbU11dGV4ICk7 CgkJCQoJCQkgCgkJCWlmIChtVmFyaWFibGUpCgkJCXsKICAJICAgICAgICAJcHRocmVhZF9jb25k X3dhaXQoJm1Db25kaXRpb24sICZtTXV0ZXgpOwoJCQl9CiAgICAgICAgCgoKCgoKCiAgICAgICAg CiAgICAgICAgICAJcHRocmVhZF9tdXRleF91bmxvY2soICZtTXV0ZXggKTsKICAgICAgICAKCX0K CQoJVCB2YWx1ZSgpIHsgcmV0dXJuIG1WYXJpYWJsZTsgfQoKcHJpdmF0ZToKCgkKICAgICAgICAg IHB0aHJlYWRfY29uZF90ICAJbUNvbmRpdGlvbjsKICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAJ bU11dGV4OwoJCgoKCQoJVAltVmFyaWFibGU7Cn07CgpjbGFzcyBUU0ZXU2VydmljZUNvbnRleHQK ewpwdWJsaWM6CgoJZW51bSBGdW5jdGlvbkNvZGUgeyBzZXJ2aWNlLCBjb21taXQsIHJvbGxiYWNr IH07CgkKCVRTRldTZXJ2aWNlQ29udGV4dCgpIHt9CgkKCVRTRldTZXJ2aWNlQ29udGV4dChGdW5j dGlvbkNvZGUgYUZ1bmN0aW9uLAoJCQlUU0ZXU2Vzc2lvbkNvbnRleHQgKmFTZXNzaW9uQ29udGV4 dCwKICAgICAgICAJVFNGV0RhdGFDb250YWluZXIgICphSW5wdXRDb250YWluZXIsCiAgICAgICAg CVRTRldEYXRhQ29udGFpbmVyICAqYU91dHB1dENvbnRhaW5lciwKCQkJVFNGV0RhdGFDb250YWlu ZXIgICphUGFyYW1ldGVyID0gMCk7CgkJCQkKCXZpcnR1YWwgflRTRldTZXJ2aWNlQ29udGV4dCgp OwoJCglGdW5jdGlvbkNvZGUJCQlnZXRGdW5jdGlvbkNvZGUoKTsKCXZvaWQJCQkJCXNldEZ1bmN0 aW9uQ29kZShGdW5jdGlvbkNvZGUgYUZ1bmN0aW9uQ29kZSk7Cglib29sIGlzVmFsaWQoKTsKCQoJ RnVuY3Rpb25Db2RlCQkJbUZ1bmN0aW9uQ29kZTsKCVRTRldTZXNzaW9uQ29udGV4dCAqCW1TZXNz aW9uQ29udGV4dDsKCVRTRldEYXRhQ29udGFpbmVyICoJCW1JbnB1dENvbnRhaW5lcjsKICAgIFRT RldEYXRhQ29udGFpbmVyICoJCW1PdXRwdXRDb250YWluZXI7CgkKCVRTRldEYXRhQ29udGFpbmVy IAkJbVBhcmFtZXRlcjsKfTsKCQpjbGFzcyBUU0ZXVGhyZWFkIDogcHVibGljIElOb25HVUlUaHJl YWQKewpwdWJsaWM6CglUU0ZXVGhyZWFkKGNvbnN0IElTdHJpbmcgJmFLZXkpOwoJdmlydHVhbCB+ VFNGV1RocmVhZCgpOwoJCgljb25zdCBJU3RyaW5nICYga2V5KCkgY29uc3Q7CgkKCXZpcnR1YWwg dm9pZCBzZXJ2aWNlKFRTRldTZXJ2aWNlQ29udGV4dCAmYVNlcnZpY2VDb250ZXh0KSAJPSAwOwoJ dmlydHVhbCB2b2lkIHJvbGxiYWNrKFRTRldTZXJ2aWNlQ29udGV4dCAmYVNlcnZpY2VDb250ZXh0 KSAJPSAwOwoJdmlydHVhbCB2b2lkIGNvbW1pdChUU0ZXU2VydmljZUNvbnRleHQgJmFTZXJ2aWNl Q29udGV4dCkgCT0gMDsKCQkKcHJpdmF0ZToKCWJvb2wgbG9jayhsb25nIGFUaW1lb3V0ID0gLTEp OwoJYm9vbCB1bmxvY2soKTsKCglib29sIGludm9rZShUU0ZXU2VydmljZUNvbnRleHQgJmFTZXJ2 aWNlQ29udGV4dCk7CgkKCWJvb2wgd2FpdEZvclN0YXJ0dXBPZlRocmVhZChsb25nIGFUaW1lb3V0 ID0gLTEpOwoJdm9pZCBydW4odm9pZCk7CgkKCWJvb2wgc2h1dGRvd24obG9uZyBhVGltZW91dCk7 CgkKCUlTdHJpbmcgCQkJCW1LZXk7CgkKCUlQcml2YXRlQ29uZGl0aW9uCQltU2h1dGRvd25FdmVu dDsKCUlQcml2YXRlQ29uZGl0aW9uCQltU3RhcnR1cEV2ZW50OwoJSVByaXZhdGVSZXNvdXJjZQkJ bVJlc291cmNlTG9jazsKCQoJVFNGV1NlY3VyZUFzc2lnbm1lbnQ8VFNGV1NlcnZpY2VDb250ZXh0 ICo+CW1TZWN1cmVDb250ZXh0OwoJCglib29sIAkJCQkJbVNodXRkb3duOwoJYm9vbAkJCQkJbUlz SWRsZTsKCQoJZnJpZW5kIGNsYXNzIFRTRldUaHJlYWRQb29sOwp9OwoKdHlwZWRlZiBUU0ZXVGhy ZWFkICogKCpDUkVBVEVfVEhSRUFEX0ZVTkNUSU9OKShjb25zdCBJU3RyaW5nICZhS2V5KTsKCmNs YXNzIFRTRldUaHJlYWRQb29sIDogcHJvdGVjdGVkIElLZXlTZXQ8VFNGV1RocmVhZCAqLCBJU3Ry aW5nPgp7CgpwdWJsaWM6CgkKCVRTRldUaHJlYWRQb29sKAl1bnNpZ25lZCBpbnQgYU1heFRocmVh ZENvdW50LCAKCQkJCQlsb25nIGFNYXhJZGxlVGltZSwKCQkJCQlDUkVBVEVfVEhSRUFEX0ZVTkNU SU9OIGFGdW5jdGlvbik7Cgl2aXJ0dWFsIH5UU0ZXVGhyZWFkUG9vbCgpOwoJCgl1bnNpZ25lZCBs b25nIAlhZGRSZWZlcmVuY2UoKSAJeyByZXR1cm4gKytzUmVmZXJlbmNlQ291bnQ7IH0KCXVuc2ln bmVkIGxvbmcgCXJlbGVhc2UoKSAJCXsgcmV0dXJuIC0tc1JlZmVyZW5jZUNvdW50OyB9CgkKCVRT RldUaHJlYWQgKglhZGQoY29uc3QgSVN0cmluZyAmYUtleSk7Cgl2b2lkIAkJcmVtb3ZlKGNvbnN0 IElTdHJpbmcgJmFLZXksIGxvbmcgYVRpbWVvdXQpOwoJYm9vbCAJCXJlbW92ZUFsbChsb25nIGFU aW1lb3V0KTsKCVRTRldUaHJlYWQgKiAJZmluZChjb25zdCBJU3RyaW5nICZhS2V5KTsKCWJvb2wg CQljb250YWluc1RocmVhZFdpdGhLZXkoY29uc3QgSVN0cmluZyAmYUtleSk7CgkKCWJvb2wgCQlz dGFydCgpOwoJYm9vbCAJCXN0b3AobG9uZyBhVGltZW91dCk7CgkKCXZpcnR1YWwgYm9vbAlsb2Nr VGhyZWFkKCBjb25zdCBJU3RyaW5nICZhVGhyZWFkS2V5LCBsb25nIGFUaW1lb3V0ICk7Cgl2aXJ0 dWFsIGJvb2wgCXVubG9ja1RocmVhZCggY29uc3QgSVN0cmluZyAmYVRocmVhZEtleSk7CgkKCXZp cnR1YWwgYm9vbCAJaW52b2tlKAljb25zdCBJU3RyaW5nICZhVGhyZWFkS2V5LCAKCQkJCVRTRldT ZXJ2aWNlQ29udGV4dCAmYVNlcnZpY2VDb250ZXh0KTsKcHJvdGVjdGVkOgoJYm9vbCAJCQlsb2Nr KGxvbmcgYVRpbWVvdXQgPSAtMSAgKTsKCWJvb2wgCQkJdW5sb2NrKCk7CgkKcHJpdmF0ZToKCglJ UHJpdmF0ZVJlc291cmNlIAltUmVzb3VyY2VMb2NrOwoJCgl1bnNpZ25lZCBpbnQgbU1heFRocmVh ZENvdW50OyAKCXVuc2lnbmVkIGludCBtTWF4SWRsZVRpbWU7CgkKCUNSRUFURV9USFJFQURfRlVO Q1RJT04JbUNyZWF0ZUZ1bmN0aW9uOwoJCglzdGF0aWMgdW5zaWduZWQgbG9uZyBzUmVmZXJlbmNl Q291bnQ7Cn07CgoKIyAzNyAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZU U2VydmljZS5ocHAiIDIKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV1NlcnZp Y2VDb25uZWN0LmhwcCIgMQoKCgoKIAoKCgogCiAKCgpjbGFzcyBUU0ZXQ2xpZW50RXhjZXB0aW9u IDogcHVibGljIElFeGNlcHRpb24gewpwdWJsaWM6CgogICAgIAoKCiAgICBUU0ZXQ2xpZW50RXhj ZXB0aW9uKGNvbnN0IElTdHJpbmcgJmFUZXh0KSA6IElFeGNlcHRpb24oYVRleHQpIHt9CgogICAg IAoKCiAgICB+VFNGV0NsaWVudEV4Y2VwdGlvbigpIHt9CgogICAgIAoKCiAgICBjb25zdCBjaGFy ICpuYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuKCJUU0ZXQ2xpZW50RXhjZXB0aW9uIik7IH0KfTsK CgogIApjbGFzcyBIb3N0Q29ubmVjdAp7CiAgcHVibGljOgogICAgSG9zdENvbm5lY3QoY29uc3Qg SVN0cmluZyAmYUhvc3QsCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICZhUGdt TnVtYmVyLAogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAmYVBnbVZlcnNpb24p OwogICAgSG9zdENvbm5lY3QoY29uc3QgdW5zaWduZWQgbG9uZyAmYUlQQWRkciwKICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgJmFQZ21OdW1iZXIsCiAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBsb25nICZhUGdtVmVyc2lvbik7CiAgICBIb3N0Q29ubmVjdCgpOwogICAg fkhvc3RDb25uZWN0KCk7CgogCiAgICBib29sIG9wZXJhdG9yID09ICggY29uc3QgSG9zdENvbm5l Y3QmIGFIb3N0Q29ubmVjdCApIGNvbnN0OwoKICAgIHVuc2lnbmVkIGxvbmcgZ2V0SVBBZGRyKCkK ICAgICAgeyByZXR1cm4odGhlSG9zdElQQWRkcik7IH0KCiAgICB1bnNpZ25lZCBsb25nIGdldFBn bU51bWJlcigpCiAgICAgIHsgcmV0dXJuKHRoZVBnbU51bWJlcik7IH0KCiAgICB1bnNpZ25lZCBs b25nIGdldFBnbVZlcnNpb24oKQogICAgICB7IHJldHVybih0aGVQZ21WZXJzaW9uKTsgfQoKICBw cml2YXRlOgogICAgdW5zaWduZWQgbG9uZyAgICAgdGhlUGdtTnVtYmVyOwogICAgdW5zaWduZWQg bG9uZyAgICAgdGhlUGdtVmVyc2lvbjsKICAgIHVuc2lnbmVkIGxvbmcgICAgIHRoZUhvc3RJUEFk ZHI7Cgp9OyAgCgogCmNsYXNzIFRTRldTZXJ2aWNlQ29ubmVjdCA6IHB1YmxpYyBIb3N0Q29ubmVj dAp7CiAgcHVibGljOgogIAlUU0ZXU2VydmljZUNvbm5lY3QoKSB7fQoKCVRTRldTZXJ2aWNlQ29u bmVjdCgJY29uc3QgSVN0cmluZyAmYVNlcnZpY2VuYW1lLCAKCQkJCQkJY29uc3QgSVN0cmluZyAm YUhvc3QsCgkJICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgJmFQZ21OdW1iZXIs CiAgICAgICAgCQkgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgJmFQZ21WZXJzaW9uKTsKCglU U0ZXU2VydmljZUNvbm5lY3QoCWNvbnN0IElTdHJpbmcgJmFTZXJ2aWNlbmFtZSwgCQkJCQkJCQoJ CQkJCQljb25zdCB1bnNpZ25lZCBsb25nICZhSVBBZGRyLAoJCSAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBsb25nICZhUGdtTnVtYmVyLAogICAgICAgIAkJICAgICAgICBjb25zdCB1bnNp Z25lZCBsb25nICZhUGdtVmVyc2lvbik7CgoJflRTRldTZXJ2aWNlQ29ubmVjdCgpOwoKCWNvbnN0 IElTdHJpbmcgJmdldFNlcnZpY2VuYW1lKCkgeyByZXR1cm4gbVNlcnZpY2VuYW1lOyB9CgoJYm9v bCBvcGVyYXRvciA9PSAoIGNvbnN0IFRTRldTZXJ2aWNlQ29ubmVjdCYgYU90aGVyICkgY29uc3Q7 CgogIHByaXZhdGU6CQoJSVN0cmluZwltU2VydmljZW5hbWU7Cn07CgojIDM4ICIvaG9tZS94aHU2 MDMxL3RzZncvbXFmdHNlcnZpY2UvVFNGV01RRlRTZXJ2aWNlLmhwcCIgMgoKCiMgMSAiL2hvbWUv eGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV1NlcnZpY2VJbXBsZW1lbnRhdGlvbi5ocHAiIDEKIAog CiAKIAogCgoKICAgIAoKICAgICAKCQogICAgCiAgICAKCQojIDEgIi9ob21lL3hodTYwMzEvdHNm dy9JbmNsdWRlL1RTRldDbGllbnQuaHBwIiAxCiAKIAogCiAKIAoKCiAgICAKCiAgICAgCiAgICAK ICAgIAoKICAgICAKICAgIGV4dGVybiAiQyIgewogICAgICAgIAogICAgICAgIAogICAgICAgIAoJ ICAgIAoKCgoKCgogICAgICAgICAgICAKIyAxICIvdXNyL2luY2x1ZGUvcnBjL3BtYXBfY2xudC5o IiAxIDMKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKZXh0 ZXJuICJDIiB7IAoKdHlwZWRlZiBib29sX3QgKCpyZXN1bHRwcm9jX3QpICAoY2FkZHJfdCByZXNw LAoJCQkJICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqcmFkZHIpICA7CgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCmV4dGVybiBib29sX3QgcG1hcF9zZXQgIChfX2NvbnN0IHVfbG9uZyBfX3Byb2dy YW0sIF9fY29uc3QgdV9sb25nIF9fdmVycywKCQkJICAgICBpbnQgX19wcm90b2NvbCwgdV9zaG9y dCBfX3BvcnQpICB0aHJvdyAoKSAgOwpleHRlcm4gYm9vbF90IHBtYXBfdW5zZXQgIChfX2NvbnN0 IHVfbG9uZyBfX3Byb2dyYW0sIF9fY29uc3QgdV9sb25nIF9fdmVycykgIHRocm93ICgpICA7CmV4 dGVybiBzdHJ1Y3QgcG1hcGxpc3QgKnBtYXBfZ2V0bWFwcyAgKHN0cnVjdCBzb2NrYWRkcl9pbiAq X19hZGRyZXNzKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGVudW0gY2xudF9zdGF0IHBtYXBfcm10Y2Fs bCAgKHN0cnVjdCBzb2NrYWRkcl9pbiAqX19hZGRyLAoJCQkJCSBfX2NvbnN0IHVfbG9uZyBfX3By b2csCgkJCQkJIF9fY29uc3QgdV9sb25nIF9fdmVycywKCQkJCQkgX19jb25zdCB1X2xvbmcgX19w cm9jLAoJCQkJCSB4ZHJwcm9jX3QgX194ZHJhcmdzLAoJCQkJCSBjYWRkcl90IF9fYXJnc3AsIHhk cnByb2NfdCBfX3hkcnJlcywKCQkJCQkgY2FkZHJfdCBfX3Jlc3AsIHN0cnVjdCB0aW1ldmFsIF9f dG91dCwKCQkJCQkgdV9sb25nICpfX3BvcnRfcHRyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGVudW0g Y2xudF9zdGF0IGNsbnRfYnJvYWRjYXN0ICAoX19jb25zdCB1X2xvbmcgX19wcm9nLAoJCQkJCSAg IF9fY29uc3QgdV9sb25nIF9fdmVycywKCQkJCQkgICBfX2NvbnN0IHVfbG9uZyBfX3Byb2MsCgkJ CQkJICAgeGRycHJvY190IF9feGFyZ3MsCgkJCQkJICAgY2FkZHJfdCBfX2FyZ3NwLAoJCQkJCSAg IHhkcnByb2NfdCBfX3hyZXN1bHRzLAoJCQkJCSAgIGNhZGRyX3QgX19yZXN1bHRzcCwKCQkJCQkg ICByZXN1bHRwcm9jX3QgX19lYWNocmVzdWx0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVfc2hvcnQg cG1hcF9nZXRwb3J0ICAoc3RydWN0IHNvY2thZGRyX2luICpfX2FkZHJlc3MsCgkJCQkgIF9fY29u c3QgdV9sb25nIF9fcHJvZ3JhbSwKCQkJCSAgX19jb25zdCB1X2xvbmcgX192ZXJzaW9uLAoJCQkJ ICB1X2ludCBfX3Byb3RvY29sKSAgdGhyb3cgKCkgIDsKCn0gCgoKIyAyNiAiL2hvbWUveGh1NjAz MS90c2Z3L0luY2x1ZGUvVFNGV0NsaWVudC5ocHAiIDIKCiAgICAgICAgICAgIAojIDEgIi91c3Iv aW5jbHVkZS9hcnBhL2luZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVy biAiQyIgeyAKCiAKCmV4dGVybiB1X2ludDMyX3QgaW5ldF9hZGRyICAoX19jb25zdCBjaGFyICpf X2NwKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgaW5ldF9hdG9uICAoX19jb25zdCBjaGFy ICpfX2NwLCBzdHJ1Y3QgaW5fYWRkciAqX19pbnApICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdV9p bnQzMl90IGluZXRfbG5hb2YgIChzdHJ1Y3QgaW5fYWRkciBfX2luKSAgdGhyb3cgKCkgIDsKCiAK CmV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X21ha2VhZGRyICAodV9pbnQzMl90IF9fbmV0LCB1 X2ludDMyX3QgX19ob3N0KSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBjaGFyICppbmV0X25ldGEg ICh1X2ludDMyX3QgX19uZXQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAg OwoKIApleHRlcm4gdV9pbnQzMl90IGluZXRfbmV0b2YgIChzdHJ1Y3QgaW5fYWRkciBfX2luKSAg dGhyb3cgKCkgIDsKCiAKCmV4dGVybiB1X2ludDMyX3QgaW5ldF9uZXR3b3JrICAoX19jb25zdCBj aGFyICpfX2NwKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAg KGludCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fY3AsIGludCBfX2JpdHMsCgkJCQkgY2hhciAqX19i dWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBpbmV0X25ldF9w dG9uICAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAqX19jcCwKCQkJICAgICAgIHZvaWQgKl9fYnVm LCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAg KHN0cnVjdCBpbl9hZGRyIF9faW4pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgaW5ldF9w dG9uICAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAqX19jcCwgdm9pZCAqX19idWYpICB0aHJvdyAo KSAgOwoKIAoKCmV4dGVybiBfX2NvbnN0IGNoYXIgKmluZXRfbnRvcCAgKGludCBfX2FmLCBfX2Nv bnN0IHZvaWQgKl9fY3AsCgkJCQkgICAgIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJv dyAoKSAgOwoKIAoKCmV4dGVybiB1bnNpZ25lZCBpbnQgaW5ldF9uc2FwX2FkZHIgIChfX2NvbnN0 IGNoYXIgKl9fY3AsCgkJCQkJIHVuc2lnbmVkIGNoYXIgKl9fYnVmLCBpbnQgX19sZW4pICB0aHJv dyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hICAoaW50IF9fbGVuLCBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKl9fY3AsCgkJCQkgIGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsK Cn0gCgoKIyAyNyAiL2hvbWUveGh1NjAzMS90c2Z3L0luY2x1ZGUvVFNGV0NsaWVudC5ocHAiIDIK CiAgICAgICAgICAgIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvdXRzbmFtZS5oIiAxIDMKIAoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3V0c25hbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKIyAzMCAi L3Vzci9pbmNsdWRlL3N5cy91dHNuYW1lLmgiIDIgMwoKCgoKCgogCnN0cnVjdCB1dHNuYW1lCiAg ewogICAgIAogICAgY2hhciBzeXNuYW1lWzY1IF07CgogICAgIAogICAgY2hhciBub2RlbmFtZVs2 NSAgXTsKCiAgICAgCiAgICBjaGFyIHJlbGVhc2VbNjUgXTsKICAgICAKICAgIGNoYXIgdmVyc2lv bls2NSBdOwoKICAgICAKICAgIGNoYXIgbWFjaGluZVs2NSBdOwoKCiAgICAgCgogICAgY2hhciBk b21haW5uYW1lWzY1ICBdOwoKCgoKICB9OwoKCgoKCgogCmV4dGVybiBpbnQgdW5hbWUgIChzdHJ1 Y3QgdXRzbmFtZSAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgp9IAoKCiMgMjggIi9ob21lL3hodTYw MzEvdHNmdy9JbmNsdWRlL1RTRldDbGllbnQuaHBwIiAyCgogICAgICAgIAoKCiAgICAgICAgCiAg ICB9CgogICAgIAogICAgCgkKCgogICAgIAogICAgIAoKCgoKICAgIGNsYXNzIFRTRldDbGllbnQg ewogICAgcHVibGljOgoKICAgICAgICBzdGF0aWMgVFNGV0NsaWVudCAqZ2V0SW5zdGFuY2VGb3Io SG9zdENvbm5lY3QgYUhvc3RDb25uZWN0KTsKICAgICAgICBzdGF0aWMgdm9pZCByZWxlYXNlKCk7 CgogICAgICAgICAKCgoKCiAgICAgICAgflRTRldDbGllbnQoKTsKCgogICAgICAgICAKCgoKCgoK CgoKCgoKCgoKCgoKCiAgICAgICAgYm9vbCBpbnZva2UoY29uc3QgSVN0cmluZyAmYVNlcnZpY2VO YW1lLCAgIFRTRldEYXRhQ29udGFpbmVyICphSW5wdXRDbnIsCiAgICAgICAgICAgICAgICAgICAg VFNGV0RhdGFDb250YWluZXIgKmFPdXRwdXRDbnIsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgbG9uZyAmYVRpbWVvdXQgPSAzMCk7CgoKICAgIHByaXZhdGU6CgogICAgICAgICAK CgogICAgICAgIFRTRldDbGllbnQoSG9zdENvbm5lY3QgYUhvc3RDb25uZWN0KTsKCiAgICAgICAg IAogICAgICAgIGJvb2wgY29ubmVjdCh2b2lkKTsKCiAgICAgICAgIAogICAgICAgIHZvaWQgZGlz Y29ubmVjdCh2b2lkKTsKCiAgICAgICAgIAogICAgICAgIGJvb2wgaXNDb25uZWN0ZWQodm9pZCk7 CgogICAgICAgICAKICAgICAgICBjb25zdCBJU3RyaW5nICYgY2xpZW50QWRkcih2b2lkKTsKCgog ICAgICAgICAKICAgICAgICBDTElFTlQgICAgICAgICAgICAgICAgICAgICAqdGhlVENQSGFuZGxl OwogICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRoZVNvY2tldDsKICAgICAgICAK ICAgICAgICBIb3N0Q29ubmVjdCAgICAgICAgICAgICAgICB0aGVIb3N0Q29ubmVjdDsKCiAgICAg ICAgIAogICAgICAgIHN0YXRpYyBJU3RyaW5nICAgICAgICAgICAgIHRoZUNsaWVudEFkZHI7CiAg ICAgICAgc3RhdGljIElQcml2YXRlUmVzb3VyY2UgICAgdGhlTXV0ZXg7CiAgICAgICAgCiAgICAg ICAgc3RhdGljIFRTRldDbGllbnQgKip0aGVDbGllbnRMaXN0OwogICAgICAgIHN0YXRpYyBpbnQg ICAgICAgICAgbkNsaWVudHM7CiAgICB9OwoKCgoKIAogCiAKIAogCiMgMTQgIi9ob21lL3hodTYw MzEvdHNmdy9JbmNsdWRlL1RTRldTZXJ2aWNlSW1wbGVtZW50YXRpb24uaHBwIiAyCgoKICAgICAK ICAgICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgIGNsYXNzIFRTRldTZXJ2aWNlSW1w bGVtZW50YXRpb24gewogICAgcHVibGljOgoKICAgICAgICAgCgoKICAgICAgICB2aXJ0dWFsIH5U U0ZXU2VydmljZUltcGxlbWVudGF0aW9uKCkgewoKICAgICAgICB9CgogICAgICAgICAKCgoKCgoK ICAgIAogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBuZWVkZWRTdGFja1NpemUodm9pZCkg PSAwOwoKICAgICAgICAgCgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNlcnZpY2UoVFNGV1Nl c3Npb25Db250ZXh0ICphU2Vzc2lvbkNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVFNGV0RhdGFDb250YWluZXIgICphSW5wdXRDb250YWluZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVFNGV0RhdGFDb250YWluZXIgICphT3V0cHV0Q29udGFpbmVyKSA9IDA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAKCgoKCgoKICAgICAgICB2aXJ0 dWFsIHZvaWQgY29tbWl0KGNvbnN0IFRTRldTZXNzaW9uQ29udGV4dCAqYVNlc3Npb25Db250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNGV0RhdGFDb250YWluZXIgICph SW5wdXRDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU0ZXRGF0 YUNvbnRhaW5lciAgKmFPdXRwdXRDb250YWluZXIpIHsKICAgICAgICB9CgogICAgICAgICAKCgoK CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soY29uc3QgVFNGV1Nlc3Npb25Db250ZXh0 ICphU2Vzc2lvbkNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNG V0RhdGFDb250YWluZXIgICphSW5wdXRDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgVFNGV0RhdGFDb250YWluZXIgICphT3V0cHV0Q29udGFpbmVyKSB7CiAgICAg ICAgfQogICAgCiAgICAgICAgIAoKCgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6 ZVNlcnZpY2VUaHJlYWQodm9pZCkgewogICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAg IAogICAgICAgICAKCgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFNlcnZpY2VUaHJl YWQodm9pZCkgewogICAgICAgIAogICAgICAgIH0KICAgICAgICAKICAgIHByb3RlY3RlZDoKCQog ICAgICAgICAKCgogICAgICAgIFRTRldTZXJ2aWNlSW1wbGVtZW50YXRpb24oVFNGV1Byb3BlcnR5 U2V0ICZhUHJvcGVydHlTZXQpCiAgICAgICAgICAgIDp0aGVQcm9wZXJ0eVNldChhUHJvcGVydHlT ZXQpIHsKCiAgICAgICAgfQoJCQoJCSAKCgoKCgoKCQl2b2lkIAkJCQlhZGRTZXJ2aWNlRGVwZW5k ZW5jeShjb25zdCBJU3RyaW5nICZhU2VydmljZW5hbWUpOwoKCQkgCgoKCgkJYm9vbCAJCQkJaGFz U2VydmljZURlcGVuZGVuY3lEZWZpbml0aW9uKGNvbnN0IElTdHJpbmcgJmFTZXJ2aWNlbmFtZSkg Y29uc3Q7CgkJCgkJIAoKCgoKCgoJCVRTRldTZXJ2aWNlQ29ubmVjdCAJZ2V0Q29ubmVjdEZvclNl cnZpY2UoY29uc3QgSVN0cmluZyAmYVNlcnZpY2VuYW1lKSBjb25zdDsKCQkKCQkKICAgICAgICAg CgkJSVNlcXVlbmNlPElTdHJpbmc+CQkJbVNlcnZpY2VEZXBlbmRlbmNpZXM7CiAgICAgICAgVFNG V1Byb3BlcnR5U2V0ICYJCQl0aGVQcm9wZXJ0eVNldDsKICAgIH07CgogICAgIAogICAgdHlwZWRl ZiBUU0ZXU2VydmljZUltcGxlbWVudGF0aW9uICooKlRTRldfQ1JFQVRFX1NFUlZJQ0VfSU1QTF9Q Uk9DKShjb25zdCBJU3RyaW5nICZhTmFtZSwgVFNGV1Byb3BlcnR5U2V0ICZhUHJvcGVydHlTZXQp OwogICAgdHlwZWRlZiB2b2lkICgqVFNGV19JTklUX1NFUlZJQ0VfTU9EVUxFX1BST0MpKFRTRldE YXRhSXRlbSAmYVNlY3Rpb24pOwogICAgdHlwZWRlZiB2b2lkICgqVFNGV19FTkRfU0VSVklDRV9N T0RVTEVfUFJPQykodm9pZCk7CgogICAgIAogICAgCiAgICAKICAgIAoKCgogCiAKIAogCiAKIyA0 MCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZUU2VydmljZS5ocHAiIDIK CgogCgojIDEgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS90c2Z3c2VxdWVuY2UuaHBw IiAxCgoKCmNsYXNzIFRTRldTZXF1ZW5jZQp7CnB1YmxpYzoKCVRTRldTZXF1ZW5jZSgpOwogICBU U0ZXU2VxdWVuY2UobG9uZyBhU3RhcnRWYWx1ZSwgbG9uZyBhTWF4aW1hbFZhbHVlLCAKICAgCQkJ CQkJdW5zaWduZWQgc2hvcnQgYVN0ZXBTaXplKTsKICAgflRTRldTZXF1ZW5jZSgpOwoKICAgYm9v bCAgICAgbmV4dElEKGxvbmcgJmFOdW1iZXIpOwogICB2b2lkICAgICByZXNldCgpOwoKcHJpdmF0 ZToKCiAgIGJvb2wgbG9jayhsb25nIHRpbWVvdXQgPSAtMSAgKTsKICAgYm9vbCB1bmxvY2soKTsK CiAgIElQcml2YXRlUmVzb3VyY2UgICAgICAgIG1Qcml2YXRlUmVzb3VyY2U7CgogICBsb25nICAg ICAgICAgICAgICAgICAgICBtU3RhcnRWYWx1ZTsKICAgbG9uZyAgICAgICAgICAgICAgICAgICAg bU1heGltYWxWYWx1ZTsKICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgbVN0ZXBTaXplOwoKICAg bG9uZyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZTsKfTsKCgojIDQ0ICIvaG9tZS94 aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvVFNGV01RRlRTZXJ2aWNlLmhwcCIgMgoKIyAxICIvaG9t ZS94aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvVFNGV01RRlRUaHJlYWQuaHBwIiAxCgoKCmNsYXNz IFRyaWdnZXJIZWFkZXI7CgpjbGFzcyBUU0ZXTVFGVFRocmVhZCA6IHB1YmxpYyBUU0ZXVGhyZWFk CnsKCnB1YmxpYzoKCiAgICBlbnVtIFJlcXVlc3RUeXBlIAoJeyAKCQlTZW5kU3luY2hyb24gPSAw LCAKCQlTZW5kQXN5bmNocm9uLCAKCQlSZWNlaXZlU3luY2hyb24sIAoJCVJlY2VpdmVBc3luY2hy b24sCgkJUXVlcnkgCgl9OwoKCVRTRldNUUZUVGhyZWFkKGNvbnN0IElTdHJpbmcgJmFLZXkpOwoJ dmlydHVhbCB+VFNGV01RRlRUaHJlYWQoKTsKCQoJdm9pZCAJCQlzZXRQcm9wZXJ0aWVzKFRTRldE YXRhSXRlbSAqYVByb3BlcnR5U2V0KTsKCQoJdmlydHVhbCB2b2lkIAlzZXJ2aWNlCShUU0ZXU2Vy dmljZUNvbnRleHQgJmFTZXJ2aWNlQ29udGV4dCk7Cgl2aXJ0dWFsIHZvaWQgCXJvbGxiYWNrKFRT RldTZXJ2aWNlQ29udGV4dCAmYVNlcnZpY2VDb250ZXh0KTsKCXZpcnR1YWwgdm9pZCAJY29tbWl0 CShUU0ZXU2VydmljZUNvbnRleHQgJmFTZXJ2aWNlQ29udGV4dCk7CgkKCXN0YXRpYyBUU0ZXVGhy ZWFkICogbmV3VGhyZWFkKGNvbnN0IElTdHJpbmcgJmFLZXkpOwoKcHJpdmF0ZToKCglib29sIAlj aGVja0Nvbm5lY3Rpb24oY29uc3QgSVN0cmluZyAmYVJaQkspOwoJYm9vbCAJY2hlY2tRdWV1ZXMo Y29uc3QgSVN0cmluZyAmYVJaQkspOwoJCglib29sIAlyZWNlaXZlRmlsZUZyb21NUVNlcmllcyhj b25zdCBJU3RyaW5nICZhTWVzc2FnZUlELCAKCQkJCWNvbnN0IElTdHJpbmcgJmFMb2NhbEZpbGVu YW1lLCBUU0ZXRGF0YUNvbnRhaW5lciAmYU91dHB1dENvbnRhaW5lcik7Cglib29sCXNlbmRGaWxl VG9VUkwoY29uc3QgSVN0cmluZyAmYUxvY2FsRmlsZW5hbWUsIFRTRldEYXRhQ29udGFpbmVyICZh SW5wdXRDb250YWluZXIsIFRTRldEYXRhQ29udGFpbmVyICZhT3V0cHV0Q29udGFpbmVyKTsKCQoJ dm9pZAlkb01RU2VyaWVzQ29ubmVjdChjb25zdCBJU3RyaW5nICZhUlpCSyk7Cglib29sIAlnZXRN UVNlcmllc0luZm9Gb3JSWkJLKGNvbnN0IElTdHJpbmcgJmFSWkJLKTsKCWludCAJZ2VuZXJhdGVN ZXNzYWdlSUQoCWNvbnN0IElTdHJpbmcgJmFSWkJLLAogICAgICAgICAgICAJCQkJCWNvbnN0IElT dHJpbmcgJmFUb3BpYywgCgkJCQkJCQkJTVFNZXNzYWdlSUQgJmFNZXNzYWdlSUQpOwoJTVFNZXNz YWdlIGNyZWF0ZVRyaWdnZXJNZXNzYWdlKFRTRldEYXRhQ29udGFpbmVyICphSW5wdXRDb250YWlu ZXIsIE1RTWVzc2FnZUlEICZhTWVzc2FnZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZ2dlckhlYWRlciAqYVRyaWdnZXJIZWFk ZXIpOwoJCQkJCQkJCQoJCQkJCQkJCQoJaW50IAlmdHBHZXQoVFNGV0RhdGFDb250YWluZXIgKmFJ bnB1dENvbnRhaW5lciwgSVN0cmluZyAmYURlc3RGaWxlbmFtZSk7CgkJCQkJCQkJCgl2b2lkIAlz ZW5kX3N5bmNocm9uCQkoVFNGV1NlcnZpY2VDb250ZXh0ICZhU2VydmljZUNvbnRleHQpOwoJdm9p ZCAJc2VuZF9hc3luY2hyb24JCShUU0ZXU2VydmljZUNvbnRleHQgJmFTZXJ2aWNlQ29udGV4dCk7 Cgl2b2lkIAlyZWNlaXZlX3N5bmNocm9uCShUU0ZXU2VydmljZUNvbnRleHQgJmFTZXJ2aWNlQ29u dGV4dCk7Cgl2b2lkIAlyZWNlaXZlX2FzeW5jaHJvbgkoVFNGV1NlcnZpY2VDb250ZXh0ICZhU2Vy dmljZUNvbnRleHQpOwoJdm9pZCAJcXVlcnkJCQkJKFRTRldTZXJ2aWNlQ29udGV4dCAmYVNlcnZp Y2VDb250ZXh0KTsKCQoJSVN0cmluZyBnZXRFcnJvck1lc3NhZ2UoaW50IGFSZXR1cm5Db2RlKTsK CglJU3RyaW5nIAkJbVF1ZXVlTWFuYWdlck5hbWU7CglJU3RyaW5nIAkJbVRyaWdnZXJRdWV1ZU5h bWU7CglJU3RyaW5nIAkJbURhdGFRdWV1ZU5hbWVTZW5kLCBtRGF0YVF1ZXVlTmFtZVJlY3Y7CgkK CU1RQ29ubmVjdGlvbiAqIAltQ29ubmVjdGlvbjsKCU1RUXVldWUgKgkJbURhdGFRdWV1ZVNlbmQ7 CglNUVF1ZXVlICoJCW1EYXRhUXVldWVSZWN2OwoJTVFRdWV1ZSAqCQltVHJpZ2dlclF1ZXVlOwoJ CglUU0ZXU2VxdWVuY2UJbVNlcXVlbmNlOwoJCglUU0ZXRGF0YUl0ZW0gKgltTVFGVFByb3BlcnRp ZXM7Cn07CgoKIyA0NSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZUU2Vy dmljZS5ocHAiIDIKCiMgMSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZU VGhyZWFkUG9vbC5ocHAiIDEKCgoKY2xhc3MgVFNGV01RRlRUaHJlYWRQb29sIDogcHVibGljIFRT RldUaHJlYWRQb29sCnsKCnB1YmxpYzoKCVRTRldNUUZUVGhyZWFkUG9vbCgJVFNGV0RhdGFJdGVt ICZhTVFGVFByb3BlcnR5U2V0LCAKCQkJCQkJdW5zaWduZWQgaW50IGFNYXhUaHJlYWRDb3VudCwK CQkJCQkJbG9uZyBhTWF4SWRsZVRpbWUsCgkJCQkJCUNSRUFURV9USFJFQURfRlVOQ1RJT04gYUZ1 bmN0aW9uIAoJCQkJCQkJCT0gVFNGV01RRlRUaHJlYWQ6Om5ld1RocmVhZCk7CgkJCQkJCQkJCgl2 aXJ0dWFsIH5UU0ZXTVFGVFRocmVhZFBvb2woKTsKCQoJVFNGV01RRlRUaHJlYWQgKglhZGQoY29u c3QgSVN0cmluZyAmYUtleSk7CgkKCXZpcnR1YWwgYm9vbCAJCWludm9rZSgJY29uc3QgSVN0cmlu ZyAmYVRocmVhZEtleSwgCgkJCQkJCQkJVFNGV1NlcnZpY2VDb250ZXh0ICZhU2VydmljZUNvbnRl eHQpOwoJCQkJCQkJCQoJVFNGV0RhdGFJdGVtCSZtTVFGVFByb3BlcnRpZXM7CQkJCQkJCQkKfTsK CgoKIyA0NiAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZUU2VydmljZS5o cHAiIDIKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFRyaWdnZXJIZWFkZXI7CgoK Y2xhc3MgVFNGV01RRlRTZXJ2aWNlIDogcHVibGljIFRTRldTZXJ2aWNlSW1wbGVtZW50YXRpb24g ewoKcHVibGljOgoKCWVudW0gUmVxdWVzdFR5cGUgCgl7IAoJCVNlbmRTeW5jaHJvbiAJCT0gMCwg CgkJU2VuZEFzeW5jaHJvbiAJCT0gMSwgCgkJUmVjZWl2ZVN5bmNocm9uIAk9IDIsIAoJCVJlY2Vp dmVBc3luY2hyb24JPSAzLAoJCVF1ZXJ5CQkJCT0gNAoJfTsKCQoJZW51bSBNZXNzYWdlVHlwZSB7 IFVua25vd24sIFRyaWdnZXJTZW5kLCBUcmlnZ2VyUmVjdiwgRGF0YSB9OwoKICAgIHN0YXRpYyBU U0ZXRGF0YUl0ZW0gdGhlTVFGVFByb3BlcnRpZXM7CgogICAgIAoKCgoKICAgIFRTRldNUUZUU2Vy dmljZShUU0ZXUHJvcGVydHlTZXQgJmFQcm9wZXJ0eVNldCk7CgogICAgIAoKCgoKICAgIHZpcnR1 YWwgflRTRldNUUZUU2VydmljZSgpOwoKICAgICAKCgoKCiAgICB1bnNpZ25lZCBsb25nIG5lZWRl ZFN0YWNrU2l6ZSh2b2lkKTsKCiAgICAgCgoKICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNlKFRTRldT ZXNzaW9uQ29udGV4dCAqYVNlc3Npb25Db250ZXh0LAogICAgICAgICAgICAgICAgIFRTRldEYXRh Q29udGFpbmVyICAqYUlucHV0Q29udGFpbmVyLAogICAgICAgICAgICAgICAgIFRTRldEYXRhQ29u dGFpbmVyICAqYU91dHB1dENvbnRhaW5lcik7CgogICAgdmlydHVhbCB2b2lkIGNvbW1pdChjb25z dCBUU0ZXU2Vzc2lvbkNvbnRleHQgKmFTZXNzaW9uQ29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFRTRldEYXRhQ29udGFpbmVyICAqYUlucHV0Q29udGFpbmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNGV0RhdGFDb250YWluZXIgICphT3V0cHV0 Q29udGFpbmVyKTsKCiAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soY29uc3QgVFNGV1Nlc3Npb25D b250ZXh0ICphU2Vzc2lvbkNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBUU0ZXRGF0YUNvbnRhaW5lciAgKmFJbnB1dENvbnRhaW5lciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFRTRldEYXRhQ29udGFpbmVyICAqYU91dHB1dENvbnRhaW5lcik7Cgog ICAgCiAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVNlcnZpY2VUaHJlYWQoKTsKCiAgICAgCiAg ICB2aXJ0dWFsIHZvaWQgY2xlYW51cFNlcnZpY2VUaHJlYWQoKTsKCiAgIHN0YXRpYyBib29sICBj aGVja1Byb3BlcnR5RW50cmllcyhUU0ZXRGF0YUl0ZW0gJmFQcm9wZXJ0eVNldCk7CgogICBzdGF0 aWMgaW50ICAgc3RhcnR1cCgpOwogICBzdGF0aWMgaW50ICAgc2h1dGRvd24oKTsKICAgCiAgIHN0 YXRpYyBjb25zdCBUU0ZXU2VydmljZUNvbm5lY3QgJiBnZXRETVNIb3N0Q29ubmVjdCgpOwogICAK ICAgSVN0cmluZyBnZXRFcnJvck1lc3NhZ2UoaW50IGFSZXR1cm5Db2RlKTsKICAgCiAgIHN0YXRp YyB2b2lkIGFkZFRyaWdnZXJIZWFkZXIoVFNGV0RhdGFJdGVtICZhSXRlbSAsIAoJCU1RTWVzc2Fn ZSAmYU1lc3NhZ2UsIE1lc3NhZ2VUeXBlIGFNZXNzYWdlVHlwZSk7CgoKcHJvdGVjdGVkOgoKcHJp dmF0ZToKCglUU0ZXU2VydmljZUNvbnRleHQJbVNlcnZpY2VDb250ZXh0OwoJCglpbnQJCQltTVFU aHJlYWRUaW1lb3V0OwoKICAgCWJvb2wgICAgICAgIGxvY2sobG9uZyB0aW1lb3V0ID0gLTEgICk7 CiAgIAlib29sICAgICAgICB1bmxvY2soKTsKCiAgIAlpbnQgCQljaGVja0lucHV0UGFyYW1ldGVy cyhUU0ZXRGF0YUNvbnRhaW5lciAmYUlucHV0Q29udGFpbmVyLCAKCQkJCQkJCQlSZXF1ZXN0VHlw ZSBhUmVxdWVzdFR5cGUpOwoJCQkJCQkJCQoJc3RhdGljIGJvb2wgY2hlY2tNUUZUU2VydmljZVBy b3BlcnR5RW50cmllcyhUU0ZXRGF0YUl0ZW0gJmFEYXRhSXRlbSk7CglzdGF0aWMgYm9vbCBjaGVj a0ZUUFByb3BlcnR5RW50cmllcyhUU0ZXRGF0YUl0ZW0gJmFEYXRhSXRlbSk7CglzdGF0aWMgYm9v bCBjaGVja01RU2VyaWVzUHJvcGVydHlFbnRyaWVzKFRTRldEYXRhSXRlbSAmYURhdGFJdGVtKTsK CXN0YXRpYyBib29sIGNoZWNrQ29tcHJlc3Npb25Qcm9wZXJ0eUVudHJpZXMoVFNGV0RhdGFJdGVt ICZhRGF0YUl0ZW0pOwoJc3RhdGljIGJvb2wgY2hlY2tDb21wcmVzc2lvbkRlZmluaXRpb24oVFNG V0RhdGFJdGVtICZhRGF0YUl0ZW0pOwogIAogIAlzdGF0aWMgVFNGV1NlcnZpY2VDb25uZWN0CXNE TVNDb25uZWN0OwogIAlzdGF0aWMgSVByaXZhdGVSZXNvdXJjZSAgICAgICAJc1ByaXZhdGVSZXNv dXJjZTsKICAgCiAgIAlzdGF0aWMgVFNGV01RRlRUaHJlYWRQb29sICoJCXNNUUZUVGhyZWFkUG9v bDsKCglzdGF0aWMgVFNGV0Vycm9yU2V0IHNFcnJvclNldFRTRldNUUZUU2VydmljZSAgOwp9OwoK CiMgMTkgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIgMgoKCiMg MSAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL1RTRldNUUZUUXVlcnlQYXJzZXIuaHBw IiAxCgoKCmNsYXNzIFRTRldNUUZURmlsdGVySXRlbQp7CglwdWJsaWM6CgkKCWVudW0gT3BlcmF0 b3IgeyBFcXVhbCwgTG93ZXJFcXVhbCwgTG93ZXIsIEdyZWF0ZXJFcXVhbCwgR3JlYXRlciB9OwoJ CglUU0ZXTVFGVEZpbHRlckl0ZW0oKSB7fQoJCgl+VFNGV01RRlRGaWx0ZXJJdGVtKCkge30KCQoJ SVN0cmluZyAmIAkJCWtleSgpIAkJCXsgcmV0dXJuIG1LZXk7IH0KCWNvbnN0IElTdHJpbmcgJiAJ a2V5KCkgY29uc3QJCXsgcmV0dXJuIG1LZXk7IH0KCUlTdHJpbmcgJiAJCQl2YWx1ZSgpIAkJeyBy ZXR1cm4gbVZhbHVlOyB9Cgljb25zdCBJU3RyaW5nICYgCXZhbHVlKCkgY29uc3QgCXsgcmV0dXJu IG1WYWx1ZTsgfQoJT3BlcmF0b3IgJgkJCW9wKCkJCQl7IHJldHVybiBtT3BlcmF0b3I7IH0KCU9w ZXJhdG9yCQkJb3AoKSBjb25zdCAJCXsgcmV0dXJuIG1PcGVyYXRvcjsgfQoJCnByaXZhdGU6CglJ U3RyaW5nCQltS2V5OwoJSVN0cmluZwkJbVZhbHVlOwoJT3BlcmF0b3IJbU9wZXJhdG9yOwp9OwoK Y2xhc3MgVFNGV01RRlRRdWVyeVBhcnNlcgp7CnB1YmxpYzoKCglUU0ZXTVFGVFF1ZXJ5UGFyc2Vy KGNvbnN0IElTdHJpbmcgYUZpbHRlcik7Cgl+VFNGV01RRlRRdWVyeVBhcnNlcigpOwoJCglib29s IGlzVmFsaWQoKTsKCQoJYm9vbCBoYXNOZXh0KCk7Cgl2b2lkIG5leHQoVFNGV01RRlRGaWx0ZXJJ dGVtICZhSXRlbSk7CgkKcHJpdmF0ZToJCglib29sCW1Jc1ZhbGlkOwoJSVN0cmluZyBtRmlsdGVy Owp9OwoKCiMgMjEgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIg MgoKCgpNUUJhc2U6Ok1RQmFzZSgpCnsKICAgIDsKICAgbUxvY2tDb3VudCA9IDA7CiAgICA7Cn0K Ck1RQmFzZTo6fk1RQmFzZSgpCnsKICAgIDsKCiAgIGlmIChtTG9ja0NvdW50KQogICB7CiBUU0ZX TG9nRmFjaWxpdHk6OmdldEluc3RhbmNlKCktPndyaXRlTG9nKCggIlVuYXVzZ2V3b2dlbmUgTG9j ay9VbmxvY2stQmlsYW56IGluIE1RQmFzZS4iICksICIvaG9tZS94aHU2MDMxL3RzZncvbXFmdHNl cnZpY2UvbXFxdWV1ZS5jcHAiLCAzNywgKCAgVFNGV0xvZ0ZhY2lsaXR5OjpwYW5pYyApKSA7CiAg IH0KCiAgICA7Cn0KCnZvaWQgTVFCYXNlOjpzZXRFcnJvciggY29uc3QgSVN0cmluZyAmZnVuY3Rp b24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb21wbGV0aW9uY29kZSwK ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYXNvbmNvZGUpCnsKCWlmIChj b21wbGV0aW9uY29kZSAhPSAwTCApCgl7CiAgICAgCW1SZXNwb25zZUNvZGUuQ29tcENvZGUgPSBj b21wbGV0aW9uY29kZTsKICAgIAltUmVzcG9uc2VDb2RlLlJlYXNvbiA9IHJlYXNvbmNvZGU7Cgog ICAgCW1FcnJvck1lc3NhZ2UgPSAiTVFTZXJpZXMtQVBJLUNhbGwgWyIgKyBmdW5jdGlvbiArICJd IG9uIHF1ZXVlIFsiICsgbU5hbWUgKyAiXSBmYWlsZWQgd2l0aCBjb21wbGV0aW9uLWNvZGUgWyIg ICAgICAgICAgICAgICArIElTdHJpbmcoY29tcGxldGlvbmNvZGUpICsgIl0gYW5kIHJlYXNvbi1j b2RlIFsiICsgSVN0cmluZyhyZWFzb25jb2RlKSArICJdLiI7CgoKIAkJVFNGV0xvZ0ZhY2lsaXR5 OjpnZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoIG1FcnJvck1lc3NhZ2UgKSwgIi9ob21lL3hodTYw MzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIsIDU2LCAoICAoY29tcGxldGlvbmNvZGUg PT0gMkwgKSA/IAoJCQlUU0ZXTG9nRmFjaWxpdHk6OmVycm9yIDogVFNGV0xvZ0ZhY2lsaXR5Ojpp bmZvcm1hdGlvbiApKSA7CiAgICAJIDsKCiAgICAJaGFuZGxlRXJyb3IoZnVuY3Rpb24sIGNvbXBs ZXRpb25jb2RlLCByZWFzb25jb2RlKTsKCX0KfQoKIAp2b2lkIE1RQmFzZTo6Z2V0TGFzdEVycm9y KGludCAmYUNvbXBsZXRpb25Db2RlLCBpbnQgJmFSZWFzb25Db2RlLCBJU3RyaW5nICZhRXJyb3JN ZXNzYWdlKQp7CiAgICA7CgogICBhQ29tcGxldGlvbkNvZGUgPSBtUmVzcG9uc2VDb2RlLkNvbXBD b2RlOwogICBhUmVhc29uQ29kZSA9IG1SZXNwb25zZUNvZGUuUmVhc29uOwogICBhRXJyb3JNZXNz YWdlID0gbUVycm9yTWVzc2FnZTsKCiAgICA7Cn0KCmNvbnN0IElTdHJpbmcgJiBNUUJhc2U6Omdl dEVycm9yTWVzc2FnZSgpCnsKICAgIDsKICAgIDsKICAgcmV0dXJuIG1FcnJvck1lc3NhZ2U7Cn0K CmNvbnN0IElTdHJpbmcgJiBNUUJhc2U6OmdldE5hbWUoKSBjb25zdAp7CiAgIDsKICAgIDsKICAg cmV0dXJuIG1OYW1lOwp9Cgpib29sIE1RQmFzZTo6dHJ5bG9jaygpCnsKICAgIDsKICAgYm9vbCBy ZXN1bHQgPSBmYWxzZTsKCiAgIHRyeQogICB7CiAgICAgIG1Qcml2YXRlUmVzb3VyY2UubG9jaygw KTsKICAgICAgbVByaXZhdGVSZXNvdXJjZS51bmxvY2soKTsKICAgICAgcmVzdWx0ID0gdHJ1ZTsK ICAgfQogICBjYXRjaChJT3V0T2ZTeXN0ZW1SZXNvdXJjZSAmZSkgICAgCiAgIHt9CiAgIGNhdGNo KElBY2Nlc3NFcnJvciAmZSkgICAgICAgICAgIAogICB7CiBUU0ZXTG9nRmFjaWxpdHk6OmdldElu c3RhbmNlKCktPndyaXRlTG9nKCggIkF1c25haG1lICIgKyBJU3RyaW5nKGUubmFtZSgpKSArICIg YXVmZ2V0cmV0ZW46ICIgKyBJU3RyaW5nKGUudGV4dCgpKSApLCAiL2hvbWUveGh1NjAzMS90c2Z3 L21xZnRzZXJ2aWNlL21xcXVldWUuY3BwIiwgMTA0LCAoICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9y ICkpIDsKICAgfQogICAgOwogICByZXR1cm4gcmVzdWx0Owp9Cgpib29sIE1RQmFzZTo6bG9jayhs b25nIHRpbWVvdXQgICkKewogICAgOwogICBib29sIHJlc3VsdCA9IGZhbHNlOwoKICAgdHJ5CiAg IHsKICAgICAgbVByaXZhdGVSZXNvdXJjZS5sb2NrKHRpbWVvdXQpOwogICAgICByZXN1bHQgPSB0 cnVlOwogICAgICBtTG9ja0NvdW50Kys7CiAgIH0KICAgY2F0Y2goSU91dE9mU3lzdGVtUmVzb3Vy Y2UgJmUpICAgIAogICB7fQogICBjYXRjaChJQWNjZXNzRXJyb3IgJmUpICAgICAgICAgICAKICAg ewogVFNGV0xvZ0ZhY2lsaXR5OjpnZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoICJBdXNuYWhtZSAi ICsgSVN0cmluZyhlLm5hbWUoKSkgKyAiIGF1ZmdldHJldGVuOiAiICsgSVN0cmluZyhlLnRleHQo KSkgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIsIDEyNSwg KCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJvciApKSA7CiAgIH0KCiAgICA7CgogICAgOwogICByZXR1 cm4gcmVzdWx0Owp9Cgpib29sIE1RQmFzZTo6dW5sb2NrKCkKewogICAgOwogICBib29sIHJlc3Vs dCA9IGZhbHNlOwoKICAgdHJ5CiAgIHsKICAgICAgbVByaXZhdGVSZXNvdXJjZS51bmxvY2soKTsK ICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgbUxvY2tDb3VudC0tOwogICB9CiAgIGNhdGNoKElP dXRPZlN5c3RlbVJlc291cmNlICZlKSAgICAKICAge30KICAgY2F0Y2goSUFjY2Vzc0Vycm9yICZl KSAgICAgICAgICAgCiAgIHsKIFRTRldMb2dGYWNpbGl0eTo6Z2V0SW5zdGFuY2UoKS0+d3JpdGVM b2coKCAiQXVzbmFobWUgIiArIElTdHJpbmcoZS5uYW1lKCkpICsgIiBhdWZnZXRyZXRlbjogIiAr IElTdHJpbmcoZS50ZXh0KCkpICksICIvaG9tZS94aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvbXFx dWV1ZS5jcHAiLCAxNDksICggIFRTRldMb2dGYWNpbGl0eTo6ZXJyb3IgKSkgOwogICB9CiAgICA7 CiAgICA7CiAgIHJldHVybiByZXN1bHQ7Cn0KCgoKTVFDb25uZWN0aW9uOjpNUUNvbm5lY3Rpb24o Y29uc3QgSVN0cmluZyAmYVF1ZXVlTWFuYWdlcikgOgogICBtQ29ubmVjdGlvbkhhbmRsZSgwKQp7 CiAgICA7CiAgIG1OYW1lID0gYVF1ZXVlTWFuYWdlcjsKICAgIDsKfQoKTVFDb25uZWN0aW9uOjp+ TVFDb25uZWN0aW9uKCkKewogICAgOwogICBpZiAoaXNDb25uZWN0ZWQoKSkKICAgICAgZGlzY29u bmVjdCgpOwoKICAgSUN1cnNvciAqYUN1cnNvciA9IG1RdWV1ZXMubmV3Q3Vyc29yKCk7CgogICBp ZiAoIWFDdXJzb3IpCiBUU0ZXTG9nRmFjaWxpdHk6OmdldEluc3RhbmNlKCktPndyaXRlTG9nKCgg IktlaW5lbiBDdXJzb3IgZXJoYWx0ZW4uIiApLCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2 aWNlL21xcXVldWUuY3BwIiwgMTc1LCAoICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9yICkpIDsKICAg ZWxzZQogICB7CiAgICAgICAKICAgICAgZm9yIChhQ3Vyc29yLT5zZXRUb0ZpcnN0KCk7IGFDdXJz b3ItPmlzVmFsaWQoKTsgYUN1cnNvci0+c2V0VG9OZXh0KCkpCiAgICAgIHsKICAgICAgICAgZGVs ZXRlIG1RdWV1ZXMuZWxlbWVudEF0KCphQ3Vyc29yKTsKICAgICAgfQogICAgICBkZWxldGUgYUN1 cnNvcjsKICAgfQoKICAgIDsKfQoKTVFIQ09OTiBNUUNvbm5lY3Rpb246OmdldEhhbmRsZSgpCnsK ICAgIDsKICAgIDsKICAgcmV0dXJuIG1Db25uZWN0aW9uSGFuZGxlOwp9CgpJU3RyaW5nIE1RQ29u bmVjdGlvbjo6Z2V0TWFuYWdlck5hbWUoKQp7CiAgICA7CiAgICA7CiAgIHJldHVybiBtTmFtZTsK fQoKIAppbnQgTVFDb25uZWN0aW9uOjpjb25uZWN0KHVuc2lnbmVkIGludCByZXRyeSAgKQp7CiAg ICA7CiAgIGxvbmcgcmVzdWx0ID0gMkwgOwoKICAgaWYgKG1Db25uZWN0aW9uSGFuZGxlICE9IDAp CiAgICAgIGRpc2Nvbm5lY3QoKTsKCiAgIGZvciAoaW50IGk9MDsgaSA8IHJldHJ5ICYmIHJlc3Vs dCAhPSAwTCA7IGkrKykKICAgewogICAgICAgCiAgICAgICA7CgoJY2hhciBuYW1lWzI1Nl07IG1l bXNldChuYW1lLCAwLCBzaXplb2YobmFtZSkpOwoJCiAgICAgIDo6TVFDT05OKG5hbWUsICAgICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAmbUNvbm5lY3Rpb25IYW5kbGUsICAgICAg ICAgCiAgICAgICAgICAgICAgICZtUmVzcG9uc2VDb2RlLkNvbXBDb2RlLCAgICAKICAgICAgICAg ICAgICAgJm1SZXNwb25zZUNvZGUuUmVhc29uKTsgICAgIAoJCQkgICAKCWNvdXQgPDwgIk1RQ09O TjogIiA8PCBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlIDw8ICIgLSAiIDw8CiAgICAgICAgICAgICAg IG1SZXNwb25zZUNvZGUuUmVhc29uIDw8IGVuZGw7CgoJCWNvdXQuZmx1c2goKTsKICAgICAgc2V0 RXJyb3IoIk1RQ09OTiIsCiAgICAgICAgICAgICAgIG1SZXNwb25zZUNvZGUuQ29tcENvZGUsCiAg ICAgICAgICAgICAgIG1SZXNwb25zZUNvZGUuUmVhc29uKTsKCiAgICAgIHJlc3VsdCA9IG1SZXNw b25zZUNvZGUuQ29tcENvZGU7CiAgIH0KCiAgIGlmIChyZXN1bHQgPT0gMEwgKQogICB7CiAgICAg IElDdXJzb3IgKmFDdXJzb3IgPSBtUXVldWVzLm5ld0N1cnNvcigpOwoKICAgICAgaWYgKCFhQ3Vy c29yKQogVFNGV0xvZ0ZhY2lsaXR5OjpnZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoICJLZWluZW4g Q3Vyc29yIGVyaGFsdGVuLiIgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1 ZXVlLmNwcCIsIDI0MCwgKCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJvciApKSA7CiAgICAgIGVsc2UK ICAgICAgeyAgIAogICAgICAgICByZXN1bHQgPSAwTCA7CiAgICAgICAgIGZvciAoYUN1cnNvci0+ c2V0VG9GaXJzdCgpOyBhQ3Vyc29yLT5pc1ZhbGlkKCkgJiYgcmVzdWx0ID09IDBMIDsKICAgICAg ICAgICAgICAgICAgYUN1cnNvci0+c2V0VG9OZXh0KCkpCiAgICAgICAgIHsKICAgICAgICAgICAg bVF1ZXVlcy5lbGVtZW50QXQoKmFDdXJzb3IpLT5jbG9zZSgpOwogICAgICAgICAgICByZXN1bHQg PSBtUXVldWVzLmVsZW1lbnRBdCgqYUN1cnNvciktPm9wZW4oKTsKICAgICAgICAgfQogICAgICAg ICBkZWxldGUgYUN1cnNvcjsKICAgICAgfQoKICAgICAgaWYgKHJlc3VsdCA9PSAwTCApCiAgICAg IHsKICAgICAgICAgSVN0cmluZyBhTWVzc2FnZSA9ICJNUVNlcmllcy1WZXJiaW5kdW5nIHp1IE1h bmFnZXIgWyIgKyBtTmFtZSArICJdIiArICIgZnVlciBTZXJ2aWNldGhyZWFkICIgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICBJU3RyaW5nKElOb25HVUlUaHJlYWQ6OmN1cnJlbnQoKS5pZCgp KSArICIgYXVmZ2ViYXV0LiI7CiBUU0ZXTG9nRmFjaWxpdHk6OmdldEluc3RhbmNlKCktPndyaXRl TG9nKCggYU1lc3NhZ2UgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVl LmNwcCIsIDI1NywgKCAgVFNGV0xvZ0ZhY2lsaXR5OjppbmZvcm1hdGlvbiApKSA7CiAgICAgICAg ICA7CiAgICAgIH0KICAgfQogICBlbHNlCiAgICAgIG1Db25uZWN0aW9uSGFuZGxlID0gMDsgICAg ICAKCgogICAgOwogICByZXR1cm4gcmVzdWx0Owp9CgogCmludCBNUUNvbm5lY3Rpb246OmRpc2Nv bm5lY3QoKQp7CiAgICA7CiAgIGludCByZXN1bHQgPSAyTCA7CgogICBJQ3Vyc29yICphQ3Vyc29y ID0gbVF1ZXVlcy5uZXdDdXJzb3IoKTsKCiAgIGlmICghYUN1cnNvcikKIFRTRldMb2dGYWNpbGl0 eTo6Z2V0SW5zdGFuY2UoKS0+d3JpdGVMb2coKCAiS2VpbmVuIEN1cnNvciBlcmhhbHRlbi4iICks ICIvaG9tZS94aHU2MDMxL3RzZncvbXFmdHNlcnZpY2UvbXFxdWV1ZS5jcHAiLCAyNzgsICggIFRT RldMb2dGYWNpbGl0eTo6ZXJyb3IgKSkgOwogICBlbHNlCiAgIHsKICAgICAgIAogICAgICBmb3Ig KGFDdXJzb3ItPnNldFRvRmlyc3QoKTsgYUN1cnNvci0+aXNWYWxpZCgpOyBhQ3Vyc29yLT5zZXRU b05leHQoKSkKICAgICAgewogICAgICAgICBtUXVldWVzLmVsZW1lbnRBdCgqYUN1cnNvciktPmNs b3NlKCk7CiAgICAgIH0KICAgICAgZGVsZXRlIGFDdXJzb3I7CiAgIH0KCiAgIDo6TVFESVNDKCAg ICZtQ29ubmVjdGlvbkhhbmRsZSwgICAgICAgICAKICAgICAgICAgICAgICAgJm1SZXNwb25zZUNv ZGUuQ29tcENvZGUsICAgIAogICAgICAgICAgICAgICAmbVJlc3BvbnNlQ29kZS5SZWFzb24pOyAg ICAgCgogICBtQ29ubmVjdGlvbkhhbmRsZSA9IDA7CgogICBzZXRFcnJvcigiTVFESVNDIiwKICAg ICAgICAgICAgbVJlc3BvbnNlQ29kZS5Db21wQ29kZSwKICAgICAgICAgICAgbVJlc3BvbnNlQ29k ZS5SZWFzb24pOwoKICAgcmVzdWx0ID0gbVJlc3BvbnNlQ29kZS5Db21wQ29kZTsKCiAgICA7CiAg IHJldHVybiByZXN1bHQ7Cn0KCnZvaWQgTVFDb25uZWN0aW9uOjphZGRRdWV1ZShNUVF1ZXVlICph UXVldWUpCnsKICAgIDsKICAgbG9jaygpOwoKICAgaWYgKCFhUXVldWUpCiBUU0ZXTG9nRmFjaWxp dHk6OmdldEluc3RhbmNlKCktPndyaXRlTG9nKCggIlVuZ3VlbHRpZ2VyIFBhcmFtZXRlciBpbiBG dW5rdGlvbnNhdWZydWYuIiApLCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21xcXVl dWUuY3BwIiwgMzExLCAoICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9yICkpIDsKICAgZWxzZQogICB7 CiAgICAgIG1RdWV1ZXMuYWRkKGFRdWV1ZSk7CiAgIH0KCiAgIHVubG9jaygpOwogICAgOwp9Cgoj IDM1NyAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21xcXVldWUuY3BwIgoKCmJvb2wg TVFDb25uZWN0aW9uOjppc0Nvbm5lY3RlZCgpCnsKICAgIDsKICAgIDsKICAgcmV0dXJuIChjb21t aXQoKSA9PSAwTCApOwp9Cgp2b2lkIE1RQ29ubmVjdGlvbjo6aGFuZGxlRXJyb3IoY29uc3QgSVN0 cmluZyAmYUZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgY29tcGxldGlvbmNvZGUsIHVuc2lnbmVkIGlu dCByZWFzb25jb2RlKQp7CiAgICA7CgogICBpZiAoIShhRnVuY3Rpb24gPT0gIk1RQ09OTiIgfHwg YUZ1bmN0aW9uID09ICJNUURJU0MiKSkKICAgewogICAgICBzd2l0Y2ggKHJlYXNvbmNvZGUpCiAg ICAgIHsKICAgICAgICAgY2FzZSAyMDE4TCA6CiAgICAgICAgIGNhc2UgMjAwOUwgOgogICAgICAg ICAgICBicmVhazsKICAgICAgfQogICB9CgogICAgOwp9CgpNUVF1ZXVlOjpNUVF1ZXVlKE1RQ29u bmVjdGlvbiAqYUNvbm5lY3Rpb24sIGNvbnN0IElTdHJpbmcgJnF1ZXVlTmFtZSwgdW5zaWduZWQg bG9uZyBtYXhNZXNzYWdlU2l6ZSwgTVFMT05HIG9wZW5fb3B0aW9ucykgOgogICBtQ29ubmVjdGlv bihhQ29ubmVjdGlvbiksIG1PcGVuT3B0aW9ucyhvcGVuX29wdGlvbnMpLG1NYXhNZXNzYWdlU2l6 ZShtYXhNZXNzYWdlU2l6ZSkKewogICAgOwoKICAgaWYgKG1Db25uZWN0aW9uKQogICB7CiAgICAg IG1Db25uZWN0aW9uLT5hZGRRdWV1ZSh0aGlzKTsKCiAgICAgIG1OYW1lID0gcXVldWVOYW1lOwog ICAgICBNUU9EIG1vZCA9IHt7J08nLCdEJywnICcsJyAnIH0sIDFMICwgMUwgLCB7IiJ9LCB7IiJ9 LCB7IkFNUS4qIn0sIHsiIn0sIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwsIF9fbnVsbCAsIF9fbnVs bCAsIHsnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdcMCcsJ1wwJywn XDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdc MCcsJ1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdc MCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJyB9LCB7IiJ9LCB7IiJ9IH07IG1P YmplY3REZXNjcmlwdG9yID0gbW9kOwogICAgICBzdHJjcHkobU9iamVjdERlc2NyaXB0b3IuT2Jq ZWN0TmFtZSwgbU5hbWUpOwoKICAgICAgTVFSUiBtcnIgPSB7MEwgLCAwTCAgfTsgbVJlc3BvbnNl Q29kZSA9IG1ycjsKICAgICAgbVF1ZXVlSGFuZGxlID0gMDsKICAgfQogICBtQnJvd3NlT3B0aW9u cyA9IE5vbmU7CiAgICA7Cn0KCk1RUXVldWU6On5NUVF1ZXVlKCkKewogICAgOwoKICAgaWYgKGlz T3BlbigpKQogICAgICBjbG9zZSgwKTsKCiAgICA7Cn0KCmJvb2wgTVFRdWV1ZTo6aXNPcGVuKCkK ewogICAgOwogICBib29sIHJlc3VsdCA9IChtUXVldWVIYW5kbGUgIT0gMCk7CiAgICA7CiAgIHJl dHVybiByZXN1bHQ7Cn0KCgogCmludCBNUVF1ZXVlOjpvcGVuKE1RTE9ORyBvcHRpb25zKQp7CiAg ICA7CiAgIGludCByZXN1bHQgPSAwTCA7CgogICBpZiAoIWlzT3BlbigpKQogICB7CiAgICAgIDo6 TVFPUEVOKCAgIG1Db25uZWN0aW9uLT5nZXRIYW5kbGUoKSwgICAgCiAgICAgICAgICAgICAgICAg ICZtT2JqZWN0RGVzY3JpcHRvciwgICAgICAgICAKICAgICAgICAgICAgICAgICAgb3B0aW9ucyA/ IG9wdGlvbnMgOiBtT3Blbk9wdGlvbnMsICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgJm1RdWV1ZUhhbmRsZSwgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAmbVJl c3BvbnNlQ29kZS5Db21wQ29kZSwgICAgCiAgICAgICAgICAgICAgICAgICZtUmVzcG9uc2VDb2Rl LlJlYXNvbik7ICAgICAKCiAKCgogICAgICBzZXRFcnJvcigiTVFPUEVOIiwKICAgICAgICAgICAg ICAgbVJlc3BvbnNlQ29kZS5Db21wQ29kZSwKICAgICAgICAgICAgICAgbVJlc3BvbnNlQ29kZS5S ZWFzb24pOwoKICAgICAgcmVzdWx0ID0gbVJlc3BvbnNlQ29kZS5Db21wQ29kZTsKCiAgICAgIGlm IChyZXN1bHQgIT0gMEwgKSBtUXVldWVIYW5kbGUgPSAwOyAgCgogICB9CiAgICA7CiAgIHJldHVy biByZXN1bHQ7Cn0KCiAKaW50IE1RUXVldWU6OmNsb3NlKE1RTE9ORyBvcHRpb25zKQp7CiAgICA7 CiAgIGludCByZXN1bHQgPSAwTCA7CgogICA6Ok1RQ0xPU0UoICBtQ29ubmVjdGlvbi0+Z2V0SGFu ZGxlKCksICAgIAogICAgICAgICAgICAgICAmbVF1ZXVlSGFuZGxlLCAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgIG9wdGlvbnMsCiAgICAgICAgICAgICAgICZtUmVzcG9uc2VDb2RlLkNvbXBD b2RlLCAgICAKICAgICAgICAgICAgICAgJm1SZXNwb25zZUNvZGUuUmVhc29uKTsgICAgIAoKICAg bVF1ZXVlSGFuZGxlID0gMDsKCiAgIHNldEVycm9yKCJNUUNMT1NFIiwKICAgICAgICAgICAgbVJl c3BvbnNlQ29kZS5Db21wQ29kZSwKICAgICAgICAgICAgbVJlc3BvbnNlQ29kZS5SZWFzb24pOwoK ICAgcmVzdWx0ID0gbVJlc3BvbnNlQ29kZS5Db21wQ29kZTsKCiAgICA7CiAgIHJldHVybiByZXN1 bHQ7Cn0KCiAKaW50IE1RUXVldWU6OnF1ZXJ5SW50ZWdlckF0dHJpYnV0ZShNUUxPTkcgYXR0cmli dXRlLCBNUUxPTkcgJnJlc3VsdCkKewogICAgOwogICBpbnQgcmMgPSAyTCA7CgogICA6Ok1RSU5R KCBtQ29ubmVjdGlvbi0+Z2V0SGFuZGxlKCksCiAgICAgICAgICAgIG1RdWV1ZUhhbmRsZSwKICAg ICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAmYXR0cmli dXRlLAogICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICZyZXN1bHQsCiAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgKGNoYXIqKTAsICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAmbVJlc3BvbnNl Q29kZS5Db21wQ29kZSwgICAgCiAgICAgICAgICAgICZtUmVzcG9uc2VDb2RlLlJlYXNvbik7ICAg ICAKCiAgIHNldEVycm9yKCJNUUlOUSIsCiAgICAgICAgICAgICAgIG1SZXNwb25zZUNvZGUuQ29t cENvZGUsCiAgICAgICAgICAgICAgIG1SZXNwb25zZUNvZGUuUmVhc29uKTsKCiAgIHJjID0gbVJl c3BvbnNlQ29kZS5Db21wQ29kZTsKCiAgICA7CiAgIHJldHVybiByYzsKfQoKIAppbnQgTVFRdWV1 ZTo6cHV0KCBjb25zdCBNUU1EICBkZXNjcmlwdG9yLCAgICAgICAgCiAgICAgICAgICAgICAgICAg IGNvbnN0IE1RUE1PIG9wdGlvbnMsICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgaW9zdHJl YW0gKiAgaW9zdHIsICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBjb25zdCBNUU1lc3Nh Z2VJRCAmbWlkX3N0YXJ0LCAgCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgJm1zZ19j b3VudCkgICAgICAKewogICAgOwogICBpbnQgcmVzdWx0ID0gMkwgOwoKICAgaWYgKCEoaW9zdHIg JiYgaW9zdHItPmdvb2QoKSAmJiBtTWF4TWVzc2FnZVNpemUgJiYgbWlkX3N0YXJ0LmlzVmFsaWQo KSkpCgkJIFRTRldMb2dGYWNpbGl0eTo6Z2V0SW5zdGFuY2UoKS0+d3JpdGVMb2coKCAiSW52YWxp ZCBwYXJhbWV0ZXIgcGFzc2VkLiIgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9t cXF1ZXVlLmNwcCIsIDUxNSwgKCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJvciApKSA7CgogICBlbHNl CiAgIHsKICAgICAgTVFNZXNzYWdlSUQgYU1lc3NhZ2VJRChtaWRfc3RhcnQpOwogICAgICBhTWVz c2FnZUlELnNldFNlcmlhbE51bWJlcigxKTsgICAgIAoKICAgICAgTVFNRCBtc2dfZGVzY3JpcHRv cjsgbWVtY3B5KCZtc2dfZGVzY3JpcHRvciwgJmRlc2NyaXB0b3IsIHNpemVvZihNUU1EKSk7CiAg ICAgIE1RUE1PIHB1dF9vcHRpb25zID0gb3B0aW9uczsKICAgICAgbXNnX2NvdW50PTA7CgogICAg ICBpb3N0ci0+c2Vla2coMCwgaW9zOjplbmQpOwogICAgICBpZiAoIWlvc3RyLT5nb29kKCkpCiAg ICAgIHsKICAgICAgICAgcmVzdWx0ID0gNTA0IDsKIAkJIFRTRldMb2dGYWNpbGl0eTo6Z2V0SW5z dGFuY2UoKS0+d3JpdGVMb2coKCAiaW9zOjpzZWVrZyBmYWlsZWQuIiApLCAiL2hvbWUveGh1NjAz MS90c2Z3L21xZnRzZXJ2aWNlL21xcXVldWUuY3BwIiwgNTMwLCAoICBUU0ZXTG9nRmFjaWxpdHk6 OmVycm9yICkpIDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKCQkgICAgdW5zaWduZWQgbG9u ZyBsZW5ndGggPSBpb3N0ci0+dGVsbGcoKTsKICAgICAgICAgCXVuc2lnbmVkIGxvbmcgdWxieXRl c1RvV3JpdGUgPSBsZW5ndGg7CgogICAgICAgICBkbwogICAgICAgICB7CiAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbXNnX3NpemUgPSAodWxieXRlc1RvV3JpdGUgPiBtTWF4TWVzc2FnZVNpemUp ID8KICAgICAgICAgICAgICAgICAgICAgICAgbU1heE1lc3NhZ2VTaXplIDogdWxieXRlc1RvV3Jp dGU7CgogICAgICAgICAgICBNUUdNTyBtZ28gPSB7eydHJywnTScsJ08nLCcgJyB9LCAxTCAsIDB4 MDAwMDAwMDBMICwgMEwsIDBMLCAwTCwgeyIifSwgKDB4MDAwMDAwMDFMICsgMHgwMDAwMDAwMkwg KSwgJyAnICwgJyAnICwgJyAnICwgJyAnLCB7J1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcs J1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcgfSwgKC0x TCkgIH07CiAgICAgICAgICAgIE1RTWVzc2FnZSBtc2cobXNnX2Rlc2NyaXB0b3IsIHB1dF9vcHRp b25zLCBtZ28sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3RyLCBsZW5ndGggLSB1bGJ5 dGVzVG9Xcml0ZSwgbXNnX3NpemUpOwogICAgICAgICAgICBtc2cuc2V0TWVzc2FnZUlEKGFNZXNz YWdlSUQpOwoKICAgICAgICAgICAgYU1lc3NhZ2VJRC5uZXh0KCk7ICAKCiAgICAgICAgICAgIHJl c3VsdCA9IHB1dCAobXNnKTsKCiAgICAgICAgICAgIHVsYnl0ZXNUb1dyaXRlIC09IG1zZ19zaXpl OwogICAgICAgICAgICBtc2dfY291bnQrKzsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAodWxi eXRlc1RvV3JpdGUgPiAwICYmIHJlc3VsdCA9PSAwTCAgJiYgYU1lc3NhZ2VJRC5pc1ZhbGlkKCkp OwogICAgICB9CiAgIH0KCiAgICA7CiAgIHJldHVybiByZXN1bHQ7Cn0KCgogCmludCBNUVF1ZXVl OjpwdXQoTVFNZXNzYWdlICZtc2cpCnsKICAgIDsKICAgaW50IHJlc3VsdCA9IDJMIDsKCiAgIGNo YXIgKmJ1ZmZlciA9IG1zZy5oYXNCdWZmZXIoKSA/IG1zZy5nZXRCdWZmZXIoKSA6IG5ldyBjaGFy W21zZy5nZXRMZW5ndGgoKV07CgogICBpZiAoIWJ1ZmZlcikKIAkJVFNGV0xvZ0ZhY2lsaXR5Ojpn ZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoICJPdXQgb2YgbWVtb3J5LiIgKSwgIi9ob21lL3hodTYw MzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIsIDU3MiwgKCAgVFNGV0xvZ0ZhY2lsaXR5 OjplcnJvciApKSA7CgogICAgCiAgIGVsc2UgaWYgKCEgKG1zZy5oYXNCdWZmZXIoKSB8fCAoIW1z Zy5oYXNCdWZmZXIoKSAmJgogICAgICAgICAgICAgICBtc2cuZ2V0U3RyZWFtKCktPnNlZWtnKG1z Zy5nZXRQb3NpdGlvbigpKS5nb29kKCkpKSApCiAJCVRTRldMb2dGYWNpbGl0eTo6Z2V0SW5zdGFu Y2UoKS0+d3JpdGVMb2coKCAic2Vla2cgYXVmIG1lc3NhZ2Ugc3RyZWFtIGZlaGxnZXNjaGxhZ2Vu LiIgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIsIDU3Nywg KCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJvciApKSA7CgogICAgCiAgIGVsc2UKICAgewogICAgICBp ZiAoIW1zZy5oYXNCdWZmZXIoKSkKICAgICAgewogICAgICAgICBtc2cuZ2V0U3RyZWFtKCktPnJl YWQoYnVmZmVyLCBtc2cuZ2V0TGVuZ3RoKCkpOwogICAgICB9CgogICAgICBpZiAoICEgKG1zZy5o YXNCdWZmZXIoKSB8fAogICAgICAgICAgICAoIW1zZy5oYXNCdWZmZXIoKSAmJiAobXNnLmdldFN0 cmVhbSgpLT5nb29kKCkgfHwgbXNnLmdldFN0cmVhbSgpLT5lb2YoKSkpKSApCiAgICAgIHsKIAkJ CVRTRldMb2dGYWNpbGl0eTo6Z2V0SW5zdGFuY2UoKS0+d3JpdGVMb2coKCAicmVhZCBhdWYgbWVz c2FnZSBzdHJlYW0gZmVobGdlc2NobGFnZW4uIiApLCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRz ZXJ2aWNlL21xcXVldWUuY3BwIiwgNTkwLCAoICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9yICkpIDsK ICAgICAgICAgICAgcmVzdWx0ID0gNTAyIDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAg ICAgICAgTVFNRCBtc2dfZGVzY3JpcHRvcjsKICAgICAgICAgbWVtY3B5KCZtc2dfZGVzY3JpcHRv ciwgJm1zZy5nZXREZXNjcmlwdG9yKCksIHNpemVvZihNUU1EKSk7CgoJCSBSQkdDb2JvbFRyYW5z Y29kZXI6OmdldEluc3RhbmNlKCktPgoJCSAJY29udmVydFRvRUJDRElDKChjaGFyKikmbXNnX2Rl c2NyaXB0b3IuTXNnSWRbMF0sIDI0TCApOwogICAgICAgICBSQkdDb2JvbFRyYW5zY29kZXI6Omdl dEluc3RhbmNlKCktPgoJCSAJY29udmVydFRvRUJDRElDKChjaGFyKikmbXNnX2Rlc2NyaXB0b3Iu Q29ycmVsSWRbMF0sIDI0TCApOwoKICAgICAgICAgTVFQTU8gcHV0X29wdGlvbnMgPSBtc2cuZ2V0 UFVUT3B0aW9ucygpOwoKICAgICAgICAgIDsKCgogICAgICAgICA6Ok1RUFVUKCBtQ29ubmVjdGlv bi0+Z2V0SGFuZGxlKCksICAgIAogICAgICAgICAgICAgICBtUXVldWVIYW5kbGUsICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICZtc2dfZGVzY3JpcHRvciwgICAgICAgICAgICAKICAgICAg ICAgICAgICAgJnB1dF9vcHRpb25zLCAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBtc2cu Z2V0TGVuZ3RoKCksCiAgICAgICAgICAgICAgIGJ1ZmZlciwKICAgICAgICAgICAgICAgJm1SZXNw b25zZUNvZGUuQ29tcENvZGUsICAgIAogICAgICAgICAgICAgICAmbVJlc3BvbnNlQ29kZS5SZWFz b24pOyAgICAgCgogICAgICAgICBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlID0gMEwgOwoKICAgICAg ICAgc2V0RXJyb3IoIk1RUFVUIiwKICAgICAgICAgICAgICAgICAgbVJlc3BvbnNlQ29kZS5Db21w Q29kZSwKICAgICAgICAgICAgICAgICAgbVJlc3BvbnNlQ29kZS5SZWFzb24pOwoKICAgICAgIAoK CgogICAgICAgICByZXN1bHQgPSBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlOwogICAgICB9CiAgIH0K ICAgaWYgKCFtc2cuaGFzQnVmZmVyKCkgJiYgYnVmZmVyKQogICAgICBkZWxldGUgYnVmZmVyOwoK ICAgIDsKICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IE1RUXVldWU6OmdldCgJY29uc3QgSVN0cmlu ZyAmYU1lc3NhZ2VJRCwgCgkJCQkJY29uc3QgSVN0cmluZyAmYUNvcnJlbGF0aW9uSUQsCgkJCQkJ bG9uZyBhTWVzc2FnZUNvdW50LAoJCQkJCW9zdHJlYW0gJmFTdHJlYW0pCnsKCSAoTVFRdWV1ZTo6 Z2V0KTsKCWludCByZXN1bHQgPSAyTCA7CgkKCWlmICghYVN0cmVhbS5nb29kKCkpCgkJVFNGV0xv Z0ZhY2lsaXR5OjpnZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoICJVbmd1ZWx0aWdlciBPdXRwdXQt U3RyZWFtIGluIEZ1bmt0aW9uc3BhcmFtZXRlci4iICksICIvaG9tZS94aHU2MDMxL3RzZncvbXFm dHNlcnZpY2UvbXFxdWV1ZS5jcHAiLCA2NDYsICggIFRTRldMb2dGYWNpbGl0eTo6ZXJyb3IgKSkg OwoJZWxzZSBpZiAoISAoYU1lc3NhZ2VJRC5zaXplKCkgPT0gMjRMICAmJiAKCQkJCWFDb3JyZWxh dGlvbklELnNpemUoKSA8PSAyNEwgKSkKCQlUU0ZXTG9nRmFjaWxpdHk6OmdldEluc3RhbmNlKCkt PndyaXRlTG9nKCggIlVuZ3VlbHRpZ2UgTGFlbmdlbiBmdWVyIE1RU2VyaWVzLU1lc3NhZ2VJRCBv ZGVyIE1RU2VyaWVzLUNvcnJlbGF0aW9uSUQuIiApLCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRz ZXJ2aWNlL21xcXVldWUuY3BwIiwgNjQ5LCAoICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9yICkpIDsK CWVsc2UJCQoJewoJCU1RTUQgYURlc2NyaXB0b3I7CgkJc3RyY3B5KChjaGFyICopYURlc2NyaXB0 b3IuTXNnSWQsIGFDb3JyZWxhdGlvbklEKTsKCQlSQkdDb2JvbFRyYW5zY29kZXI6OmdldEluc3Rh bmNlKCktPgoJCQljb252ZXJ0VG9FQkNESUMoKGNoYXIqKSZhRGVzY3JpcHRvci5Db3JyZWxJZFsw XSwgMjRMICk7CgoJCU1RTWVzc2FnZUlEIGFNUU1lc3NhZ2VJRChhTWVzc2FnZUlELCBNUU1lc3Nh Z2VJRDo6UmVjZWl2ZSk7CQkKCQkKCQlyZXN1bHQgPSAwTCA7CgkJZm9yIChpbnQgbklkeCA9IDA7 IG5JZHggPCBhTWVzc2FnZUNvdW50ICYmIHJlc3VsdCA9PSAwTCA7IG5JZHgrKykKCQl7CgkJCXN0 cm5jcHkoKGNoYXIgKilhRGVzY3JpcHRvci5Nc2dJZCwgYU1RTWVzc2FnZUlELnRvU3RyaW5nKCks IDI0TCApOwoJCSAgCVJCR0NvYm9sVHJhbnNjb2Rlcjo6Z2V0SW5zdGFuY2UoKS0+CgkJIAkgIGNv bnZlcnRUb0VCQ0RJQygoY2hhciopYURlc2NyaXB0b3IuTXNnSWQsIDI0TCApOwkKCQkJCgkJCQoJ CQlNUU1lc3NhZ2UgYU1lc3NhZ2U7IGFNZXNzYWdlLnNldERlc2NyaXB0b3IoYURlc2NyaXB0b3Ip OwoJCQkKCQkJcmVzdWx0ID0gZ2V0KGFNZXNzYWdlKTsJCSAKCQkJCgkJCWlmIChyZXN1bHQgPT0g MEwgKQoJCQl7CgkJCQlhU3RyZWFtLndyaXRlKGFNZXNzYWdlLmdldEJ1ZmZlcigpLCBhTWVzc2Fn ZS5nZXRMZW5ndGgoKSk7CgkJCQkKCQkJCWlmICghYVN0cmVhbS5nb29kKCkpCgkJCQl7CgkJCQkJ cmVzdWx0ID0gMkwgOwoJCQkJCVRTRldMb2dGYWNpbGl0eTo6Z2V0SW5zdGFuY2UoKS0+d3JpdGVM b2coKCAiTVFTZXJpZXMtTWVzc2FnZSBlbXBmYW5nZW4sIGFiZXIgZGFzICIgKyAKCQkJCQkJCUlT dHJpbmcoIlNjaHJlaWJlbiBpbiBlaW5lbiBPdXRwdXQtU3RyZWFtIHNjaGx1ZyBmZWhsLiAiKSAr CgkJCQkJCQkiRW1wZmFuZyB3aXJkIGFiZ2Vicm9jaGVuLiIgKSwgIi9ob21lL3hodTYwMzEvdHNm dy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIsIDY4MCwgKCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJv ciApKSA7CgkJCQl9CgkJCX0KCQkJCgkJCWFNUU1lc3NhZ2VJRC5uZXh0KCk7ICAKCQl9Cgl9CgoJ IChNUVF1ZXVlOjpnZXQpOwoJcmV0dXJuIHJlc3VsdDsKfQoKIAppbnQgTVFRdWV1ZTo6Z2V0KE1R TWVzc2FnZSAmbXNnLCB1bnNpZ25lZCBsb25nICphTGVuZ3RoICApCnsKICAgIDsKICAgaW50IHJl c3VsdCA9IDJMIDsKCglNUUxPTkcgYU1lc3NhZ2VTaXplOwoJTVFHTU8gYUdldE9wdGlvbjsKCW1l bWNweSgmYUdldE9wdGlvbiwgJm1zZy5nZXRHRVRPcHRpb25zKCksIHNpemVvZihNUUdNTykpOwoJ CglNUU1EIGFEZXNjcmlwdG9yOwkKCW1lbWNweSgmYURlc2NyaXB0b3IsICZtc2cuZ2V0RGVzY3Jp cHRvcigpLCBzaXplb2YoTVFNRCkpOwoKICAgaWYgKGFMZW5ndGgpCiAgIHsKCSAgIGFHZXRPcHRp b24uT3B0aW9ucyB8PSAweDAwMDAwMDQwTCA7CgkgICAKCSAgIGlmICghbXNnLmNyZWF0ZUJ1ZmZl cigqYUxlbmd0aCkpCgkgICB7CgkgICAJCW1SZXNwb25zZUNvZGUuQ29tcENvZGUgPSAyTCA7Cgkg ICB9CgkgICBlbHNlCgkgICB7CgkgICAJCWFNZXNzYWdlU2l6ZSA9IChNUUxPTkcpKmFMZW5ndGg7 CgkJCW1SZXNwb25zZUNvZGUuQ29tcENvZGUgPSAwTCA7CgkJfQogICB9CiAgIGVsc2UKICAgewog ICAJCSAKCQkKCQkJOjpNUUdFVCggbUNvbm5lY3Rpb24tPmdldEhhbmRsZSgpLCAgICAgIAogICAg ICAgICAgICAJCSBtUXVldWVIYW5kbGUsICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIAkJ ICZhRGVzY3JpcHRvciwgICAgICAgICAgICAgICAgICAKCSAgICAgICAgICAgIAkgJmFHZXRPcHRp b24sICAgICAgICAgICAgICAgICAgCiAgICAJICAgICAgICAJIDAsIDAsICZhTWVzc2FnZVNpemUs ICAgICAgICAgICAKICAgICAgICAJICAgIAkgJm1SZXNwb25zZUNvZGUuQ29tcENvZGUsICAgICAg IAogICAgICAgICAgICAJCSAmbVJlc3BvbnNlQ29kZS5SZWFzb24pOyAgICAgICAgCgkJCiAgICAJ c2V0RXJyb3IoIk1RR0VUIiwKICAgICAgICAgICAgCSBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlLAog ICAgICAgICAgICAJIG1SZXNwb25zZUNvZGUuUmVhc29uKTsKCQkJCgkJICAKCQkgIAoJCSAgCgkJ aWYgKG1SZXNwb25zZUNvZGUuQ29tcENvZGUgPT0gMEwgIHx8CgkJCW1SZXNwb25zZUNvZGUuQ29t cENvZGUgPT0gMUwgKQoJCXsKCQkJbXNnLmNyZWF0ZUJ1ZmZlcihhTWVzc2FnZVNpemUpOwoJCQkK CQkJIAoJCQkgCgkJCWlmIChtT3Blbk9wdGlvbnMgJiAweDAwMDAwMDA4TCApCgkJCXsKCQkJCSAK CQkJCSAKCQkJCWFHZXRPcHRpb24uT3B0aW9ucyAmPSAoIH4gKDB4MDAwMDAwMTBMICB8IDB4MDAw MDAwMjBMICkpOwoJCQkJIAoJCQkJYUdldE9wdGlvbi5PcHRpb25zIHw9IDB4MDAwMDAxMDBMIDsK CQkJfQoJCX0KCX0KCQoJaWYgKG1SZXNwb25zZUNvZGUuQ29tcENvZGUgPT0gMEwgIHx8CgkJbVJl c3BvbnNlQ29kZS5Db21wQ29kZSA9PSAxTCApCgl7CgkgCSAKICAgCQk6Ok1RR0VUKCBtQ29ubmVj dGlvbi0+Z2V0SGFuZGxlKCksICAgICAgCiAgICAgICAgICAgIAkgbVF1ZXVlSGFuZGxlLCAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAJICZhRGVzY3JpcHRvciwgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgCSAmYUdldE9wdGlvbiwgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgCSBtc2cuZ2V0TGVuZ3RoKCksIAoJCQkJIG1zZy5nZXRCdWZmZXIoKSwgJmFNZXNzYWdlU2l6 ZSwKICAgICAgICAgICAgCSAmbVJlc3BvbnNlQ29kZS5Db21wQ29kZSwgICAgICAgCiAgICAgICAg ICAgIAkgJm1SZXNwb25zZUNvZGUuUmVhc29uKTsgICAgICAgIAoKCQltc2cuc2V0RGVzY3JpcHRv cihhRGVzY3JpcHRvcik7CQoJCW1zZy5zZXRHRVRPcHRpb25zKGFHZXRPcHRpb24pOwoJCQogICAg CXNldEVycm9yKCJNUUdFVCIsCiAgICAgICAgICAgIAkgbVJlc3BvbnNlQ29kZS5Db21wQ29kZSwK CSAgICAgICAgCSBtUmVzcG9uc2VDb2RlLlJlYXNvbik7Cgl9CglyZXN1bHQgPSBtUmVzcG9uc2VD b2RlLkNvbXBDb2RlOwoJCgkKICAgIDsKICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IE1RUXVldWU6 OmNvbnRhaW5zKE1RTWVzc2FnZUlEICZhTWVzc2FnZUlEKQp7CgkgOwoJaW50IHJlc3VsdCA9IDJM IDsKCglpZiAoIWFNZXNzYWdlSUQuaXNWYWxpZCgpKQogCQkgVFNGV0xvZ0ZhY2lsaXR5OjpnZXRJ bnN0YW5jZSgpLT53cml0ZUxvZygoICJVbmd1ZWx0aWdlciBQYXJhbWV0ZXIgaW4gRnVua3Rpb25z YXVmcnVmLiIgKSwgIi9ob21lL3hodTYwMzEvdHNmdy9tcWZ0c2VydmljZS9tcXF1ZXVlLmNwcCIs IDc4OSwgKCAgVFNGV0xvZ0ZhY2lsaXR5OjplcnJvciApKSA7CgllbHNlCgl7CiAgICAJTVFHTU8g YUdldE9wdGlvbnMgPSB7IHsnRycsJ00nLCdPJywnICcgfSwgMUwgLCAweDAwMDAwMDAwTCAsIDBM LCAwTCwgMEwsIHsiIn0sICgweDAwMDAwMDAxTCArIDB4MDAwMDAwMDJMICksICcgJyAsICcgJyAs ICcgJyAsICcgJywgeydcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1ww JywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnIH0sICgtMUwpICAgfTsKICAgIAlN UU1EIGFEZXNjcmlwdG9yID0geyB7J00nLCdEJywnICcsJyAnIH0sIDFMICwgMHgwMDAwMDAwMEwg LCA4TCAsICgtMUwpICwgMEwgLCAweDAwMDAwMTExTCAsICgwTCkgLCB7JyAnLCcgJywnICcsJyAn LCcgJywnICcsJyAnLCcgJyB9LCAoLTFMKSAsIDJMICwgeydcMCcsJ1wwJywnXDAnLCdcMCcsJ1ww JywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAn LCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcgfSwgeydcMCcsJ1wwJywn XDAnLCdcMCcsJ1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywn XDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnIH0s IDBMLCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7J1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1ww JywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdcMCcsJ1ww JywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAn LCdcMCcsJ1wwJywnXDAnIH0sIHsiIn0sIDBMICwgeyIifSwgeyIifSwgeyIifSwgeyIifSwgeydc MCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1ww JywnXDAnLCdcMCcsJ1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAn LCdcMCcgfSwgMUwsIDBMLCAweDAwMDAwMDAwTCAsICgtMUwpICAgfTsKICAgIAlJU3RyaW5nIG1z Z2lkID0gYU1lc3NhZ2VJRC50b1N0cmluZygpOwogICAgCU1RTE9ORyBhTGVuZ3RoOwoKICAgIAlz dHJuY3B5KChjaGFyICopYURlc2NyaXB0b3IuTXNnSWQsIG1zZ2lkLCAyNEwgKTsKCQkgIFJCR0Nv Ym9sVHJhbnNjb2Rlcjo6Z2V0SW5zdGFuY2UoKS0+CgkJIAkgIGNvbnZlcnRUb0VCQ0RJQygoY2hh ciopYURlc2NyaXB0b3IuTXNnSWQsIDI0TCApOwoKICAgIAlhR2V0T3B0aW9ucy5PcHRpb25zID0g ICAweDAwMDAwMDQwTCAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCTB4MDAwMDAwMTBM IDsKCiAgICAJOjpNUUdFVCggbUNvbm5lY3Rpb24tPmdldEhhbmRsZSgpLCAgICAgIAogICAgICAg ICAgICAJIG1RdWV1ZUhhbmRsZSwgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgCSAmYURl c2NyaXB0b3IsICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIAkgJmFHZXRPcHRpb25zLCAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAJIDAsIDAsICZhTGVuZ3RoLCAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgCSAmbVJlc3BvbnNlQ29kZS5Db21wQ29kZSwgICAgICAgCiAgICAg ICAgICAgIAkgJm1SZXNwb25zZUNvZGUuUmVhc29uKTsgICAgICAgIAoKICAgIAlzZXRFcnJvcigi TVFHRVQiLAogICAgICAgICAgICAJIG1SZXNwb25zZUNvZGUuQ29tcENvZGUsCiAgICAgICAgICAg IAkgbVJlc3BvbnNlQ29kZS5SZWFzb24pOwoKICAgIAlyZXN1bHQgPSBtUmVzcG9uc2VDb2RlLkNv bXBDb2RlOwoJfQoJIDsKCXJldHVybiByZXN1bHQ7Cn0KCmludCBNUVF1ZXVlOjpkb2VzRXhpc3Qo TVFNZXNzYWdlSUQgJmFNZXNzYWdlSUQsIGJvb2wgJnJjKQp7CiAgICA7CiAgIGludCByZXN1bHQg PSBjb250YWlucyhhTWVzc2FnZUlEKTsKCiAgIHN3aXRjaCAocmVzdWx0KQogICB7CiAgICAgIGNh c2UgMEwgOiAgICAgICAgICAgIAogICAgICBjYXNlIDFMIDogICAgICAgCiAgICAgICAgIHJlc3Vs dCAgID0gMEwgOwogICAgICAgICByYyAgICAgICA9IHRydWU7CiAgICAgIGJyZWFrOwogICAgICBj YXNlIDJMIDogICAgICAgICAgCgogICAgICAgICAgCiAgICAgICAgIGlmIChtUmVzcG9uc2VDb2Rl LlJlYXNvbiA9PSAyMDMzTCApCiAgICAgICAgIHsKICAgICAgICAgICAgcmVzdWx0ID0gMEwgOyBy YyA9IGZhbHNlOwogICAgICAgICB9CgogICAgICBicmVhazsKICAgfQogICAgOwogICByZXR1cm4g cmVzdWx0Owp9Cgpib29sIE1RUXVldWU6OmJlZ2luKCkKewogICAJIDsKCWJvb2wgcmVzdWx0ID0g ZmFsc2U7CiAgIAogICAJaWYgKG1Ccm93c2VPcHRpb25zICE9IE5vbmUpCgkJVFNGV0xvZ0ZhY2ls aXR5OjpnZXRJbnN0YW5jZSgpLT53cml0ZUxvZygoICJVbmd1ZWx0aWdlIEF1ZnJ1ZnNlcXVlbnou IiApLCAiL2hvbWUveGh1NjAzMS90c2Z3L21xZnRzZXJ2aWNlL21xcXVldWUuY3BwIiwgODU0LCAo ICBUU0ZXTG9nRmFjaWxpdHk6OmVycm9yICkpIDsKCWVsc2UKCXsKCQltQnJvd3NlT3B0aW9ucyA9 IEJyb3dzZUZpcnN0OwoJCXJlc3VsdCA9IHRydWU7Cgl9CQoJCgkgOwoJcmV0dXJuIHJlc3VsdDsK fQoKYm9vbCBNUVF1ZXVlOjpuZXh0KE1RTWVzc2FnZSAmYU1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcg KmFMZW5ndGggICkKewogICAJIDsKCWJvb2wgcmVzdWx0ID0gZmFsc2U7CgkKCU1RR01PIGFHZXRP cHRpb25zID0geyB7J0cnLCdNJywnTycsJyAnIH0sIDFMICwgMHgwMDAwMDAwMEwgLCAwTCwgMEws IDBMLCB7IiJ9LCAoMHgwMDAwMDAwMUwgKyAweDAwMDAwMDAyTCApLCAnICcgLCAnICcgLCAnICcg LCAnICcsIHsnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdcMCcsJ1ww JywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJyB9LCAoLTFMKSAgIH07CglNUU1EIGFEZXNj cmlwdG9yID0geyB7J00nLCdEJywnICcsJyAnIH0sIDFMICwgMHgwMDAwMDAwMEwgLCA4TCAsICgt MUwpICwgMEwgLCAweDAwMDAwMTExTCAsICgwTCkgLCB7JyAnLCcgJywnICcsJyAnLCcgJywnICcs JyAnLCcgJyB9LCAoLTFMKSAsIDJMICwgeydcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdc MCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCAnXDAnLCdc MCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcgfSwgeydcMCcsJ1wwJywnXDAnLCdcMCcs J1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcs J1wwJywnXDAnLCdcMCcsICdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnIH0sIDBMLCB7IiJ9 LCB7IiJ9LCB7IiJ9LCB7J1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCAn XDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsICdcMCcsJ1wwJywnXDAnLCdc MCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1ww JywnXDAnIH0sIHsiIn0sIDBMICwgeyIifSwgeyIifSwgeyIifSwgeyIifSwgeydcMCcsJ1wwJywn XDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdc MCcsJ1wwJywnXDAnLCAnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcgfSwg MUwsIDBMLCAweDAwMDAwMDAwTCAsICgtMUwpICAgfTsKICAgCiAgIAlpZiAobUJyb3dzZU9wdGlv bnMgPT0gTm9uZSkKCQlUU0ZXTG9nRmFjaWxpdHk6OmdldEluc3RhbmNlKCktPndyaXRlTG9nKCgg IlVuZ3VlbHRpZ2UgQXVmcnVmc2VxdWVuei4iICksICIvaG9tZS94aHU2MDMxL3RzZncvbXFmdHNl cnZpY2UvbXFxdWV1ZS5jcHAiLCA4NzQsICggIFRTRldMb2dGYWNpbGl0eTo6ZXJyb3IgKSkgOwoJ ZWxzZSAKCXsJCgkJaWYgKG1Ccm93c2VPcHRpb25zID09IEJyb3dzZUZpcnN0KQoJCXsKCSAgICAJ YUdldE9wdGlvbnMuT3B0aW9ucyA9ICAgMHgwMDAwMDA0MEwgIHwKICAgIAkgICAgICAgICAgICAg ICAgICAgICAgICAJMHgwMDAwMDAxMEwgOwoJCX0KCQllbHNlCgkJCWFHZXRPcHRpb25zLk9wdGlv bnMgPSAgIDB4MDAwMDAwNDBMICB8CiAgICAJICAgICAgICAgICAgICAgICAgICAgICAgCTB4MDAw MDAwMjBMIDsKCQkKCQlhTWVzc2FnZS5zZXRHRVRPcHRpb25zKGFHZXRPcHRpb25zKTsJCgkJCgkJ cmVzdWx0ID0gKGdldChhTWVzc2FnZSwgYUxlbmd0aCkgPT0gMkwgKSA/IGZhbHNlIDogdHJ1ZTsK CX0KCQoJIDsKCXJldHVybiByZXN1bHQ7Cn0KCmJvb2wgTVFRdWV1ZTo6ZW5kKCkKewogICAJIDsK CWJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgIAogICAJbUJyb3dzZU9wdGlvbnMgPSBOb25lOwoJCgkg CgkgCglyZXN1bHQgPSAoCW1SZXNwb25zZUNvZGUuQ29tcENvZGUgPT0gMkwgICYmCiAgICAgICAJ CQltUmVzcG9uc2VDb2RlLlJlYXNvbiA9PSAyMDMzTCApOwoJCgkgOwoJcmV0dXJuIHJlc3VsdDsK fQoKIAppbnQgTVFDb25uZWN0aW9uOjpjb21taXQoKQp7CiAgICA7CiAgIGludCByZXN1bHQgPSAy TCA7CgogICA6Ok1RQ01JVChnZXRIYW5kbGUoKSwgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICZtUmVzcG9uc2VDb2RlLkNvbXBDb2RlLCAgICAKICAgICAgICAgICAgJm1SZXNwb25zZUNvZGUu UmVhc29uKTsgICAgIAoKICAgCgoKCiAgIHNldEVycm9yKCJNUUNNSVQiLAogICAgICAgICAgICAg ICBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlLAogICAgICAgICAgICAgICBtUmVzcG9uc2VDb2RlLlJl YXNvbik7CgogICByZXN1bHQgPSBtUmVzcG9uc2VDb2RlLkNvbXBDb2RlOwoKICAgIDsKICAgcmV0 dXJuIHJlc3VsdDsKfQoKIAppbnQgTVFDb25uZWN0aW9uOjpyb2xsYmFjaygpCnsKICAgIDsKICAg aW50IHJlc3VsdCA9IDJMIDsKCiAgIDo6TVFCQUNLKGdldEhhbmRsZSgpLCAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgJm1SZXNwb25zZUNvZGUuQ29tcENvZGUsICAgIAogICAgICAgICAgICAm bVJlc3BvbnNlQ29kZS5SZWFzb24pOyAgICAgCgogCgoKICAgc2V0RXJyb3IoIk1RQkFDSyIsCiAg ICAgICAgICAgICAgIG1SZXNwb25zZUNvZGUuQ29tcENvZGUsCiAgICAgICAgICAgICAgIG1SZXNw b25zZUNvZGUuUmVhc29uKTsKCiAgIHJlc3VsdCA9IG1SZXNwb25zZUNvZGUuQ29tcENvZGU7Cgog ICAgOwogICByZXR1cm4gcmVzdWx0Owp9Cgp2b2lkIE1RUXVldWU6OmhhbmRsZUVycm9yKGNvbnN0 IElTdHJpbmcgJmFGdW5jdGlvbiwgdW5zaWduZWQgaW50IGNvbXBsZXRpb25jb2RlLCB1bnNpZ25l ZCBpbnQgcmVhc29uY29kZSkKewogICAgOwoKICAgaWYgKGFGdW5jdGlvbiAhPSAiTVFDTE9TRSIg KQogICB7CiAgICAgIHN3aXRjaCAocmVhc29uY29kZSkKICAgICAgewogICAgICAgICBjYXNlIDIw MTlMIDoKICAgICAgICAgY2FzZSAyMDE4TCA6CiAgICAgICAgIGNhc2UgMjAwOUwgOgoKICAgICAg ICAgYnJlYWs7CiAgICAgIH0KICAgfQoKICAgIDsKfQoKdm9pZCBNUVF1ZXVlOjpzZXRDb25uZWN0 aW9uKE1RQ29ubmVjdGlvbiAqYUNvbm5lY3Rpb24pCnsKICAgIDsKCiAgIGxvY2soKTsKCiAgIGlm ICghYUNvbm5lY3Rpb24pCiAgIHsKICAgfQogICBlbHNlIGlmICghbUNvbm5lY3Rpb24pCiAgIHsK ICAgICAgbUNvbm5lY3Rpb24gPSBhQ29ubmVjdGlvbjsKICAgfQogICBpZiAoICBpc09wZW4oKSAm JgogICAgICAgICBtQ29ubmVjdGlvbi0+Z2V0SGFuZGxlKCkgIT0gYUNvbm5lY3Rpb24tPmdldEhh bmRsZSgpKQogICB7CiAgICAgIGNsb3NlKCk7CiAgICAgIG1Db25uZWN0aW9uID0gYUNvbm5lY3Rp b247CiAgICAgIG9wZW4oKTsKICAgfQoKICAgdW5sb2NrKCk7CgogICAgOwp9CgpNUUNvbm5lY3Rp b24gKiBNUVF1ZXVlOjpnZXRDb25uZWN0aW9uKCkKewogICAgOyA7CiAgIHJldHVybiBtQ29ubmVj dGlvbjsKfQoKCg==