From owner-freebsd-ports@FreeBSD.ORG Tue Jan 27 10:39:57 2015 Return-Path: Delivered-To: ports@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id F13EBDD3 for ; Tue, 27 Jan 2015 10:39:57 +0000 (UTC) Received: from mail.flytrace.com (mail.flytrace.com [83.167.132.34]) by mx1.freebsd.org (Postfix) with SMTP id 031EC1E1 for ; Tue, 27 Jan 2015 10:39:56 +0000 (UTC) Received: from [172.31.211.213] ([172.31.211.213]) by mail.flytrace.com ; Tue, 27 Jan 2015 11:09:22 +0100 Message-ID: <54C763D1.7020108@flytrace.com> Date: Tue, 27 Jan 2015 11:09:21 +0100 From: Peter User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.0 MIME-Version: 1.0 To: ports@FreeBSD.org Subject: xrdesktop ported to Gtk2 Content-Type: multipart/mixed; boundary="------------060103000108040102030702" X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jan 2015 10:39:58 -0000 This is a multi-part message in MIME format. --------------060103000108040102030702 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hello, I've ported xrdesktop to Gtk2 and fixed some small bugs. The software was tested during some months in everyday use, there is no problem. You can push it to ports tree with the same name or as xrdesktop2 (to save the old one). Best regards, Peter TKATCHENKO --------------060103000108040102030702 Content-Type: text/plain; charset=UTF-8; name="xrdesktop" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xrdesktop" IyEvdXNyL2Jpbi9wZXJsIC13CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHhyZGVz a3RvcCwgYSBndGstcGVybCBmcm9udGVuZCBmb3IgcmRlc2t0b3AgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIwojIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBLb3ZhY2gg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIFBvcnRl ZCB0byBHdGsyIGJ5IFBldGVyIFRLQVRDSEVOS08sIDIwMTQJCQkjCiMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgICAgICAjCiMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgICAgICAgICAjCiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgICAjCiMgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAg ICAgICAgICAgICAjCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAgICAjCiMgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAg ICAgICAgICAgICAjCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgICAjCiMgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAg ICAgICAgICAgICAjCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0 ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQSAgICAjCiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCgp1c2UgR3RrMiAtaW5pdDsKdXNlIEd0azI6OlNpbXBsZUxpc3Q7CnVz ZSBzdHJpY3Q7CgpteSAkZmFsc2UgPSAwOwpteSAkdHJ1ZSA9IDE7CgpteSAkd2luZG93Owpt eSAkYm94MTsKbXkgJHNjcm9sbGVkX3dpbmRvdzE7Cm15ICRidXR0b25ib3gxOwpteSAkYnV0 dG9uMTsKbXkgJGJ1dHRvbjI7Cm15ICRidXR0b24zOwpteSAkYnV0dG9uNDsKbXkgJGJ1dHRv bjU7Cm15ICRsaXN0MTsKbXkgJWlwX2hhc2g7Cm15ICV1bmFtZV9oYXNoOwpteSAlZ2VvbV9o YXNoOwpteSAlZnVsbHNjcmVlbl9oYXNoOwpteSAlYml0bWFwX3VwZF9oYXNoOwpteSAla21h cF9oYXNoOwpteSAlbGljZW5zZV9oYXNoOwpteSAlcGFzc3RocnVfaGFzaDsKbXkgJG1hY2hp bmVfbmFtZTsKbXkgJG1hY2hpbmVfaXA7Cm15ICRtYWNoaW5lX3VuYW1lOwpteSAkbWFjaGlu ZV9nZW9tOwpteSAkbWFjaGluZV9mczsKbXkgJG1hY2hpbmVfYml0bWFwX3VwZDsKbXkgJG1h Y2hpbmVfa21hcDsKbXkgJG1hY2hpbmVfbGljOwpteSAkbWFjaGluZV9wYXNzdGhydTsKbXkg JHJhd19kYXRhOwpteSAkZmllbGRfdHlwZTsKbXkgJGZpZWxkX2RhdGE7Cm15ICRtYWNoaW5h OwpteSBAbWFjaGluZXM7Cm15IEB0ZW1wOwpteSAkc2VsZWN0ZWRfbWFjaGluZTsKbXkgJHNl bGVjdGVkX21hY2hpbmVfaXA7Cm15ICRzZWxlY3RlZF91bmFtZTsKbXkgJHNlbGVjdGVkX2dl b207Cm15ICRzZWxlY3RlZF9mczsKbXkgJHNlbGVjdGVkX2JpdG1hcF91cGQ7Cm15ICRzZWxl Y3RlZF9rbWFwOwpteSAkc2VsZWN0ZWRfa21hcF9oZXg7Cm15ICRzZWxlY3RlZF9saWM7Cm15 ICRzZWxlY3RlZF9wYXNzdGhydTsKbXkgJGRpYWxvZzE7Cm15ICRkaWFsb2dfYnV0dG9uX29r OwpteSAkZGlhbG9nX2J1dHRvbl9jYW5jZWw7Cm15ICRuYW1lX2VudHJ5OwpteSAkaXBfZW50 cnk7Cm15ICR1bmFtZV9lbnRyeTsKbXkgJGRpYWxvZzI7Cm15ICRjb21ibzE7Cm15ICRjb21i bzI7Cm15ICRmc19jaGVja2JveDsKbXkgJGJtcF9jaGVja2JveDsKbXkgJGxpY19jaGVja2Jv eDsKbXkgJHBhc3N0aHJ1X2VudHJ5OwpteSAkcGFzc3RocnU7Cm15ICRpbmRleG1heD0wOwoK IyB0aGUgQklHQVNTIGxpc3Qgb2Yga2V5bWFwcy4gZmVhciBpdHMgYXdlc29tZSBnaXJ0aCBh bmQgc3R1ZmYuCiMjIDAyLzEwLzIwMDMgdXBkYXRlZCB0aGUgbGlzdCB0byB3b3JrIHdpdGgg cmRlc2t0b3AgMS4yIGFuZCB0aGUKIyMgbmV3IHdheSB0aGV5IGRvIGtleWJvYXJkIGxheW91 dHMuLi5mZWgKIyMgbGVmdCBhbGwgdGhlIGhleCBjb2RlcyBmb3Igd2hpY2ggaSBjb3VsZCBu b3QgZmluZCBtYXBwaW5ncyBhcyBjb21tZW50cwojIyBpbiB0aGUgaG9wZXMgdGhhdCBzb21l ZGF5IGl0IHdpbGwgZ2V0IGZpeGVkLgojIyBhbHNvIG5vdGUgdGhhdCBzb21lIG9mIHRoZXNl IGFyZSBhcHByb3hpbWF0aW9ucyBhbmQgbWF5IG9yIG1heQojIyBub3Qgd29yayBhdCBhbGwu Cm15ICVrbWFwX3RyYW5zX2hhc2ggPSAoCgkiQWxiYW5pYW4iID0+ICJlbi11cyIsCiMJIkFy YWJpYyAxMDEiID0+ICIweDAwMDAwNDAxIiwKIwkiQXJhYmljIDEwMiBBWkVSVFkiID0+ICIw eDAwMDIwNDAxIiwKIwkiQXJhYmljIDEwMiIgPT4gIjB4MDAwMTA0MDEiLAojCSJBcm1lbmlh biBFYXN0ZXJuIiA9PiAiMHgwMDAwMDQyYiIsCiMJIkFybWVuaWFuIFdlc3Rlcm4iID0+ICIw eDAwMDEwNDJiIiwKIwkiQXplcmkgQ3lyaWxsaWMiID0+ICIweDAwMDAwODJjIiwKIwkiQXpl cmkgTGF0aW4iID0+ICIweDAwMDAwNDJjIiwKIwkiQmVsYXJ1c2lhbiIgPT4gIjB4MDAwMDA0 MjMiLAojCSJCZWxnaWFuIENvbW1hIiA9PiAiMHgwMDAxMDgwYyIsCgkiQmVsZ2lhbiBEdXRj aCIgPT4gImJlIiwKCSJCZWxnaWFuIEZyZW5jaCIgPT4gImJlIiwKCSJCdWxnYXJpYW4gTGF0 aW4iID0+ICJiZyIsCiMJIkJ1bGdhcmlhbiIgPT4gIjB4MDAwMDA0MDIiLAoJIkNhbmFkaWFu IEZyZW5jaCBsZWdhY3kiID0+ICJjZiIsCgkiQ2FuYWRpYW4gRnJlbmNoIiA9PiAiZW4tdXMi LAojCSJDYW5hZGlhbiBNdWx0aWxpbmd1YWwgU3RhbmRhcmQiID0+ICIweDAwMDExMDA5IiwK IwkiQ2hpbmVzZSBNUy1QaW5ZaW45OCIgPT4gIjB4ZTAwZTA4MDQiLAojCSJDaGluZXNlIE5l aU1hIiA9PiAiMHhlMDA1MDgwNCIsCiMJIkNoaW5lc2UgUXVhblBpbiIgPT4gIjB4ZTAwMTA4 MDQiLAojCSJDaGluZXNlIFNodWFuZ1BpbiIgPT4gIjB4ZTAwMjA4MDQiLAoJIkNoaW5lc2Ug VVMgS2V5Ym9hcmQiID0+ICJjaCIsCiMJIkNoaW5lc2UgWmhlbmdNYSIgPT4gIjB4ZTAwMzA4 MDQiLAojCSJDaGluZXNlIEFscGhhbnVtZXJpYyIgPT4gIjB4ZTAxZjA0MDQiLAojCSJDaGlu ZXNlIEFycmF5IiA9PiAiMHhlMDA1MDQwNCIsCiMJIkNoaW5lc2UgQmlnNSBDb2RlIiA9PiAi MHhlMDA0MDQwNCIsCiMJIkNoaW5lc2UgQ2hhbmdKaWUiID0+ICIweGUwMDIwNDA0IiwKIwki Q2hpbmVzZSBEYVlpIiA9PiAiMHhlMDA2MDQwNCIsCiMJIkNoaW5lc2UgTmV3IENoYW5nSmll IiA9PiAiMHhlMDA5MDQwNCIsCiMJIkNoaW5lc2UgTmV3IFBob25lZXRpYyIgPT4gIjB4ZTAw ODA0MDQiLAojCSJDaGluZXNlIFBob25ldGljIiA9PiAiMHhlMDAxMDQwNCIsCiMJIkNoaW5l c2UgUXVpY2siID0+ICIweGUwMDMwNDA0IiwKCSJDaGluZXNlIFVTIEtleWJvYXJkIiA9PiAi Y2giLAojCSJDaGluZXNlIFVuaWNvZGUiID0+ICIweGUwMDcwNDA0IiwKIwkiQ3JvYXRpYW4i ID0+ICIweDAwMDAwNDFhIiwKIwkiQ3JvYXRpYW4gU3BlY2lmaWMiID0+ICIweDAwMDAwNDFh IiwKCSJDemVjaCBRV0VSVFkiID0+ICJjeiIsCiMJIkN6ZWNoIFByb2dyYW1tZXJTIiA9PiAi MHgwMDAyMDQwNSIsCgkiQ3plY2giID0+ICJjeiIsCgkiRGFuaXNoIiA9PiAiZGsiLAojCSJE ZXZhbmFnYXJpIElOU0NSSVBUIiA9PiAiMHgwMDAwMDQzOSIsCgkiRHV0Y2giID0+ICJubCIs CgkiRXN0b25pYW4iID0+ICJldCIsCiMJIkZhZXJvZXNlIiA9PiAiMHgwMDAwMDQzOCIsCiMJ IkZhcnNpIiA9PiAiMHgwMDAwMDQyOSIsCgkiRmlubmlzaCIgPT4gInN1IiwKCSJGcmVuY2gi ID0+ICJmciIsCiMJIkdhZWxpYyIgPT4gIjB4MDAwMTE4MDkiLAojCSJHZW9yZ2lhbiIgPT4g IjB4MDAwMDA0MzciLAojIGNoYW5nZWQgdGhlIEdlcm1hbiBrZXltYXAgc3RyaW5nIGZyb20g ImdyIiB0byAiZGUiIAojIGF0IHRoZSBiZWhlc3Qgb2YgVG9iaWFzIE1vaHJsdWRlci4gVGhh bmtzIQojIGhvcGVmdWxseSB0aGlzIGlzIHJpZ2h0IDopCgkiR2VybWFuIElCTSIgPT4gImRl IiwKCSJHZXJtYW4iID0+ICJkZSIsCiMJIkdyZWVrIDIyMCBMYXRpbiIgPT4gIjB4MDAwMzA0 MDgiLAoJIkdyZWVrIDIyMCIgPT4gImdrIiwKIwkiR3JlZWsgMzE5IExhdGluIiA9PiAiMHgw MDA0MDQwOCIsCgkiR3JlZWsgMzE5IiA9PiAiZ2siLAoJIkdyZWVrIExhdGluIiA9PiAiZ2si LAojCSJHcmVlayBQb2x5dG9uaWMiID0+ICIweDAwMDYwNDA4IiwKCSJHcmVlayIgPT4gImdr IiwKIwkiSGVicmV3IiA9PiAiMHgwMDAwMDQwZCIsCiMJIkhpbmRpIFRyYWRpdGlvbmFsIiA9 PiAiMHgwMDAxMDQzOSIsCgkiSHVuZ2FyaWFuIDEwMS1rZXkiID0+ICJodSIsCgkiSHVuZ2Fy aWFuIiA9PiAiaHUiLAoJIkljZWxhbmRpYyIgPT4gImlzIiwKCSJJcmlzaCIgPT4gImVuLXVz IiwKCSJJdGFsaWFuIDE0MiIgPT4gIml0IiwKCSJJdGFsaWFuIiA9PiAiaXQiLAojCSJKYXBh bmVzZSBJbnB1dCBTeXN0ZW0iID0+ICIweGUwMDEwNDExIiwKCSJKYXBhbmVzZSIgPT4gImpw IiwKIwkiSmFwYW5lc2UgMTA2IiA9PiAiMHgwMDAwMDQxMSIsCiMJIkphcGFuZXNlIHBjOTh4 MSIgPT4gIjB4MDAwMDA0MTEiLAojCSJLYXpha2giID0+ICIweDAwMDAwNDNmIiwKIwkiS29y ZWFuIEhhbmd1bCBNUy1JTUU5OCIgPT4gIjB4ZTAwMTA0MTIiLAoJIktvcmVhbiBIYW5ndWwi ID0+ICJrbyIsCgkiTGF0aW4gQW1lcmljYW4iID0+ICJsYSIsCgkiTGF0dmlhbiBRV0VSVFki ID0+ICJlbi11cyIsCiMJIkxhdHZpYW4iID0+ICIweDAwMDAwNDI2IiwKIwkiTGl0aHVhbmlh biBJQk0iID0+ICIweDAwMDAwNDI3IiwKIwkiTGl0aHVhbmlhbiIgPT4gIjB4MDAwMTA0Mjci LAojCSJNYWNlZG9uaWFuIEZZUk9NIiA9PiAiMHgwMDAwMDQyZiIsCiMJIk1hcmF0aGkiID0+ ICIweDAwMDAwNDRlIiwKCSJOb3J3ZWdpYW4iID0+ICJubyIsCgkiUG9saXNoIDIxNCIgPT4g InBsIiwKCSJQb2xpc2ggUHJvZ3JhbW1lcnMiID0+ICJwbCIsCgkiUG9ydHVndWVzZSBCcmF6 aWxpYW4gQUJOVCIgPT4gImJyIiwKIwkiUG9ydHVndWVzZSBCcmF6aWxpYW4gQUJOVDIiID0+ ICIweDAwMDEwNDE2IiwKCSJQb3J0dWd1ZXNlIiA9PiAicG8iLAoJIlJvbWFuaWFuIiA9PiAi cm8iLAoJIlJ1c3NpYW4gVHlwZXdyaXRlciIgPT4gInJ1IiwKCSJSdXNzaWFuIiA9PiAicnUi LAojCSJSdXNzaWFuIEtPMTgtUiIgPT4gIjB4MDAwMDA0MTkiLAoJIlNlcmJpYW4gQ3lyaWxs aWMiID0+ICJlbi11cyIsCiMJIlNlcmJpYW4gTGF0aW4iID0+ICIweDAwMDAwODFhIiwKCSJT bG92YWsgUVdFUlRZIiA9PiAic2wiLAoJIlNsb3ZhayIgPT4gInNsIiwKIwkiU2xvdmFrIFBy b2dyYW1tZXJzIiA9PiAiMHgwMDAwMDQxYiIsCgkiU2xvdmVuaWFuIiA9PiAieXUiLAojYWx0 ZXJlZCBzcGFuaXNoIGtleWJvYXJkIGNvdXJ0ZXN5IG9mIEpvbmF5IEdvbWV6CgkiU3Bhbmlz aCBWYXJpYXRpb24iID0+ICJlcyIsCiMJIlNwYW5pc2giID0+ICIweDAwMDAwNDBhIiwKCSJT d2VkaXNoIiA9PiAic3YiLAoJIlN3aXNzIEZyZW5jaCIgPT4gInNmIiwKIwkiU3dpc3MgR2Vy bWFuIiA9PiAiMHgwMDAwMDgwIiwKIwkiVGFtaWwiID0+ICIweDAwMDAwNDQ5IiwKIwkiVGF0 YXIiID0+ICIweDAwMDAwNDQ0IiwKIwkiVGhhaSBLZWRtYW5lZSBub24tc2hpZnRsb2NrIiA9 PiAiMHgwMDAyMDQxZSIsCiMJIlRoYWkgS2VkbWFuZWUiID0+ICIweDAwMDAwNDFlIiwKIwki VGhhaSBQYXR0YWNob3RlIG5vbi1zaGlmdGxvY2siID0+ICIweDAwMDMwNDFlIiwKIwkiVGhh aSBQYXR0YWNob3RlIiA9PiAiMHgwMDAxMDQxZSIsCgkiVHVya2lzaCBGIiA9PiAidHIiLAoJ IlR1cmtpc2ggUSIgPT4gInRyIiwKIwkiVVMgRW5nbGlzaCBUYWxiZSBmb3IgSUJNIEFyYWJp YyAyMzhfTCIgPT4gIjB4MDAwNTA0MDkiLAoJIlVTIiA9PiAiZW4tdXMiLAojCSJVUyBwaGFu dG9tIGtleSB2ZXIiID0+ICIweDAwMDAwNDA5IiwKIwkiVWtyYW5pYW4iID0+ICIweDAwMDAw NDIyIiwKCSJFbmdsaXNoIiA9PiAiZW4tZ2IiLAoJIlVTIER2b3JhayBsZWZ0IiA9PiAidXNs IiwKCSJVUyBEdm9yYWsgcmlnaHQiID0+ICJ1c3IiLAoJIlVTIER2b3JhayIgPT4gImR2IiwK CSJVUyBJbnRlcm5hdGlvbmFsIiA9PiAiZW4tdXMiLAojCSJVemJlayBDeXJpbGxpYyIgPT4g IjB4MDAwMDA4NDMiLAojCSJWaWV0bmFtZXNlIiA9PiAiMHgwMDAwMDQyYSIsCgkieXUiID0+ ICJ5dSIsCgkiY2YiID0+ICJjZiIsCgkidXM5IiA9PiAiZW4tdXMiLAopOwoKIyBjcmVhdGUg dGhlIHdpbmRvdwokd2luZG93ID0gR3RrMjo6V2luZG93LT5uZXc7CiR3aW5kb3ctPnNpZ25h bF9jb25uZWN0KCAiZGVsZXRlX2V2ZW50Iiwgc3ViIHsgR3RrMi0+bWFpbl9xdWl0IH0gKTsK JHdpbmRvdy0+c2V0X2RlZmF1bHRfc2l6ZSggOTQwLCA2MDAgKTsKJHdpbmRvdy0+c2V0X2Jv cmRlcl93aWR0aCggMiApOwokd2luZG93LT5zZXRfdGl0bGUoInhyZGVza3RvcCIpOwoKIyBt YWtlIG91ciBmaXJzdCBib3gKJGJveDEgPSBHdGsyOjpWQm94LT5uZXc7CiRib3gxLT5zZXRf c3BhY2luZyg4KTsKCgojIGNyZWF0ZSB0aGUgbGlzdCwgYXNzaWduIGEgc2lnbmFsIHRvIGhh bmRsZSBjaGFuZ2Ugb2Ygc2VsZWN0aW9uCiRsaXN0MSA9IEd0azI6OlNpbXBsZUxpc3QtPm5l dyAoIk5hbWUiLCAidGV4dCIsICJIb3N0bmFtZS9JUCIsICJ0ZXh0IiwgIlVzZXJuYW1lIiwg InRleHQiLCAiS2V5bWFwIiwgInRleHQiLCAiR2VvbWV0cnkiLCAidGV4dCIsICJGdWxsc2Ny ZWVuIiwgInRleHQiLCAiRm9yY2UgQml0bWFwIFVwZGF0ZXMiLCAidGV4dCIsICJEbyBOb3Qg UmVxdWVzdCBMaWNlbnNlIiwgInRleHQiLCAiQ01EIFZhcnMiLCAidGV4dCIgKTsKCiMgdGhp cyBpcyB0aGUgc2Nyb2xsZWQgd2luZG93IHRvIHB1dCB0aGUgTGlzdCB3aWRnZXQgaW5zaWRl CiRzY3JvbGxlZF93aW5kb3cxID0gR3RrMjo6U2Nyb2xsZWRXaW5kb3ctPm5ldzsKJHNjcm9s bGVkX3dpbmRvdzEtPnNldF9wb2xpY3koICJhdXRvbWF0aWMiLCAiYXV0b21hdGljIiApOwok c2Nyb2xsZWRfd2luZG93MS0+YWRkX3dpdGhfdmlld3BvcnQoICRsaXN0MSApOwokYm94MS0+ cGFja19zdGFydCggJHNjcm9sbGVkX3dpbmRvdzEsICR0cnVlLCAkdHJ1ZSwgMCApOwokd2lu ZG93LT5hZGQoICRib3gxICk7CgoKJGxpc3QxLT5zaWduYWxfY29ubmVjdCggJ2N1cnNvci1j aGFuZ2VkJywgXCZsaXN0X3NlbF9yb3cgKTsKJGxpc3QxLT5zaWduYWxfY29ubmVjdCggJ3Jv d19hY3RpdmF0ZWQnLCBcJnJkZXNxdWVfY29ubmVjdCApOwoKIyBzZWUgdGhlIHN1YiBhdCB0 aGUgZW5kIG9mIHRoZSBzY3JpcHQgZm9yIGluZm8KcG9wdWxhdGVfY2xpc3RfZnJvbV9jb25m aWcoKTsKCiMgTWFrZSBzb21lIGJ1dHRvbnMKJGJ1dHRvbmJveDEgPSBuZXcgR3RrMjo6SEJ1 dHRvbkJveCgpOwokYnV0dG9uMSA9IG5ldyBHdGsyOjpCdXR0b24oICJDb25uZWN0IiApOwok YnV0dG9uMiA9IG5ldyBHdGsyOjpCdXR0b24oICJBZGQiICk7CiRidXR0b24zID0gbmV3IEd0 azI6OkJ1dHRvbiggIkRlbGV0ZSIgKTsKJGJ1dHRvbjQgPSBuZXcgR3RrMjo6QnV0dG9uKCAi RWRpdCIgKTsKJGJ1dHRvbjUgPSBuZXcgR3RrMjo6QnV0dG9uKCAiUXVpdCIgKTsKCiMgdGVs bCB0aGVtIHdoYXQgdG8gZG8KJGJ1dHRvbjEtPnNpZ25hbF9jb25uZWN0KCAiY2xpY2tlZCIs IFwmcmRlc3F1ZV9jb25uZWN0ICk7CiRidXR0b24yLT5zaWduYWxfY29ubmVjdCggImNsaWNr ZWQiLCBcJnJkZXNxdWVfYWRkICk7CiRidXR0b24zLT5zaWduYWxfY29ubmVjdCggImNsaWNr ZWQiLCBcJnJkZXNxdWVfZGVsZXRlICk7CiRidXR0b240LT5zaWduYWxfY29ubmVjdCggImNs aWNrZWQiLCBcJnJkZXNxdWVfZWRpdCApOwokYnV0dG9uNS0+c2lnbmFsX2Nvbm5lY3QoICJj bGlja2VkIiwgc3ViIHsgR3RrMi0+bWFpbl9xdWl0IH0gKTsKCiMgcHV0IHN0dWZmIGluIHRo ZSB3aW5kb3cKJGJveDEtPnBhY2tfc3RhcnQoICRidXR0b25ib3gxLCAkZmFsc2UsICRmYWxz ZSwgMCApOwokYnV0dG9uYm94MS0+YWRkKCAkYnV0dG9uMSApOwokYnV0dG9uYm94MS0+YWRk KCAkYnV0dG9uMiApOwokYnV0dG9uYm94MS0+YWRkKCAkYnV0dG9uMyApOwokYnV0dG9uYm94 MS0+YWRkKCAkYnV0dG9uNCApOwokYnV0dG9uYm94MS0+YWRkKCAkYnV0dG9uNSApOwoKJHdp bmRvdy0+c2hvd19hbGwoKTsKCm1haW4gR3RrMjsKCmV4aXQoIDAgKTsKCiMgU3Vicm91dGlu ZXMKCiMgc2ltcGxlIHN1YiwgdG8gbGF1bmNoIHJkZXNrdG9wIHdpdGggdGhlIGNvbmZpZ3Vy ZWQgaW5mbwojIHdoZW4gdGhlIGNvbm5lY3QgYnV0dG9uIGlzIGNsaWNrZWQuIHJhdGhlciB0 aWR5IDopCiMgcmVtb3ZlIHRoZSBwcmludCBsaW5lIGJlZm9yZSB0aGUgc3lzdGVtIGNhbGwg aWYgeW91IGxpa2UgcXVpZXRuZXNzCnN1YiByZGVzcXVlX2Nvbm5lY3QKewogIG15ICRidWZm ZXI7CiAgCiAgaWYoICRzZWxlY3RlZF91bmFtZSApIHsgJGJ1ZmZlciA9ICRidWZmZXIgLiAi IC11ICRzZWxlY3RlZF91bmFtZSI7IH0KICBpZiggJHNlbGVjdGVkX2dlb20gKSB7ICRidWZm ZXIgPSAkYnVmZmVyIC4gIiAtZyAkc2VsZWN0ZWRfZ2VvbSI7IH0KICBpZiggJHNlbGVjdGVk X2ttYXBfaGV4ICkgeyAkYnVmZmVyID0gJGJ1ZmZlciAuICIgLWsgJHNlbGVjdGVkX2ttYXBf aGV4IjsgfQogIGlmKCAkc2VsZWN0ZWRfZnMgZXEgInRydWUiICkgeyAkYnVmZmVyID0gJGJ1 ZmZlciAuICIgLWYiOyB9CiAgaWYoICRzZWxlY3RlZF9iaXRtYXBfdXBkIGVxICJ0cnVlIiAp IHsgJGJ1ZmZlciA9ICRidWZmZXIgLiAiIC1iIjsgfQogIGlmKCAkc2VsZWN0ZWRfbGljIGVx ICJ0cnVlIiApIHsgJGJ1ZmZlciA9ICRidWZmZXIgLiAiIC1sIjsgfQogIGlmKCAkc2VsZWN0 ZWRfcGFzc3RocnUgKSB7ICRidWZmZXIgPSAkYnVmZmVyIC4gIiAkc2VsZWN0ZWRfcGFzc3Ro cnUiOyB9CiAgCiAgI21ha2UgdGhlIHRpdGxlIHdoYXRldmVyIHRoZSBzdHJpbmcgb2YgdGhl IHNlbGVjdGVkIG1hY2hpbmUgbmFtZSBpcwogICNpbnN0ZWFkIG9mIHRoZSBtYWNoaW5lJ3Mg aXAsIGNvdXJ0ZXN5IG9mIEpvbmF5IEdvbWV6LiB0aGFua3MhCiAgI21vdmVkIHVwIGhlcmUg YXQgdGhlIGJlaGVzdCBvZiBUb2JpYXMgTW9ocmx1ZGVyLiBUaGFua3MhCiAgaWYoICRzZWxl Y3RlZF9tYWNoaW5lICkgeyAkYnVmZmVyID0gJGJ1ZmZlciAuICIgLVQgXCIkc2VsZWN0ZWRf bWFjaGluZVwiIjsgfSAgIAogIAogIGlmKCAkc2VsZWN0ZWRfbWFjaGluZV9pcCApIHsgJGJ1 ZmZlciA9ICRidWZmZXIgLiAiICRzZWxlY3RlZF9tYWNoaW5lX2lwIjsgfQogIGVsc2UgeyBk aWUgIk5vIElQL0hvc3RuYW1lIHNlbGVjdGVkISBBYm9ydGluZy5cbiI7IH0KCiAgcHJpbnQg ImNvbW1hbmRsaW5lIGlzIFwicmRlc2t0b3AgJGJ1ZmZlclwiXG4iOwogIHN5c3RlbSgicmRl c2t0b3AgJGJ1ZmZlciBcJiIpOwogCn0KCiMgc3ViIHRvIGFkZCBhbiBlbnRyeSBpbnRvIHRo ZSBsaXN0IG9mIG1hY2hpbmVzIHRvIGNob29zZSBmcm9tCiMgYWxsIHRoaXMgc3ViIGFjdHVh bGx5IGRvZXMgaXMgc2V0IHVwIHRoZSBkaWFsb2cgYm94IHRvIAojIGNvbGxlY3QgdGhlIGlu Zm8sIHRoZSBkb19hZGRfc2VydmVyKCkgc3ViIGlzIHdoYXQKIyByZWFsbHkgZG9lcyBhbGwg dGhlIHVwZGF0aW5nIG9mIGluZm8KIyB5ZXMgaSBrbm93IHRoZSBsYXlvdXQgc3R1ZmYgaXMg ZWZmaW4gbmFzdHkKIyBkZWFsIHdpdGggaXQsIGknbSBuZXcgYXQgdGhpcyBnb29leSBzdHVm Zi4uLiA6UApzdWIgcmRlc3F1ZV9hZGQKewogJGRpYWxvZzEgPSBuZXcgR3RrMjo6RGlhbG9n KCk7CiAkZGlhbG9nMS0+c2V0X3RpdGxlKCJBZGQgU2VydmVyIik7CiAkZGlhbG9nX2J1dHRv bl9vayA9IG5ldyBHdGsyOjpCdXR0b24oICJPayIgKTsKICRkaWFsb2dfYnV0dG9uX2NhbmNl bCA9IG5ldyBHdGsyOjpCdXR0b24oICJDYW5jZWwiICk7CiAkZGlhbG9nX2J1dHRvbl9vay0+ c2lnbmFsX2Nvbm5lY3QoICJjbGlja2VkIiwgXCZkb19hZGRfc2VydmVyICk7CiAkZGlhbG9n X2J1dHRvbl9jYW5jZWwtPnNpZ25hbF9jb25uZWN0KCAiY2xpY2tlZCIsIHN1YiB7ICRkaWFs b2cxLT5kZXN0cm95KCk7IH0gKTsKCiAkbmFtZV9lbnRyeSA9IG5ldyBHdGsyOjpFbnRyeSgg KTsKICRpcF9lbnRyeSA9IG5ldyBHdGsyOjpFbnRyeSggKTsKICR1bmFtZV9lbnRyeSA9IG5l dyBHdGsyOjpFbnRyeSggKTsKICRwYXNzdGhydV9lbnRyeSA9IG5ldyBHdGsyOjpFbnRyeSgg KTsKCiBteSAkbGFiZWwxID0gbmV3IEd0azI6OkxhYmVsKCAiRW50ZXIgYSBuYW1lIGZvciB0 aGlzIHNlcnZlcjogIiApOwogbXkgJGxhYmVsMiA9IG5ldyBHdGsyOjpMYWJlbCggIkVudGVy IGFuIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUgdG8gY29ubmVjdCB0bzogIiApOwogbXkgJGxh YmVsMyA9IG5ldyBHdGsyOjpMYWJlbCggIlJlc29sdXRpb246ICIgKTsKIG15ICRsYWJlbDQg PSBuZXcgR3RrMjo6TGFiZWwoICJVc2VybmFtZTogIiApOwogbXkgJGxhYmVsNSA9IG5ldyBH dGsyOjpMYWJlbCggIktleWJvYXJkIE1hcHBpbmc6ICIgKTsKIG15ICRsYWJlbDYgPSBuZXcg R3RrMjo6TGFiZWwoICJBZGRpdGlvbmFsIFZhcmlhYmxlcyB0byBwYXNzOiAgICAgICAgICAg ICAgICAgICIgKTsKCiAkbGFiZWwxLT5zZXRfanVzdGlmeSggImxlZnQiICk7CiAkbGFiZWwy LT5zZXRfanVzdGlmeSggImxlZnQiICk7CiAkbGFiZWwzLT5zZXRfanVzdGlmeSggImxlZnQi ICk7CiAkbGFiZWw0LT5zZXRfanVzdGlmeSggImxlZnQiICk7CiAkbGFiZWw1LT5zZXRfanVz dGlmeSggImxlZnQiICk7CiAkbGFiZWw2LT5zZXRfanVzdGlmeSggImxlZnQiICk7CgogbXkg JHZib3gxID0gbmV3IEd0azI6OlZCb3goICRmYWxzZSwgMCApOyAKIG15ICR2Ym94MiA9IG5l dyBHdGsyOjpWQm94KCAkZmFsc2UsIDAgKTsKIG15ICR2Ym94MyA9IG5ldyBHdGsyOjpWQm94 KCAkZmFsc2UsIDAgKTsKIG15ICR2Ym94NCA9IG5ldyBHdGsyOjpWQm94KCAkZmFsc2UsIDAg KTsKIG15ICR2Ym94NSA9IG5ldyBHdGsyOjpWQm94KCAkZmFsc2UsIDAgKTsKIG15ICR2Ym94 NiA9IG5ldyBHdGsyOjpWQm94KCAkZmFsc2UsIDAgKTsKIG15ICR2Ym94NyA9IG5ldyBHdGsy OjpWQm94KCAkZmFsc2UsIDAgKTsKCiBteSAkaGJveDEgPSBuZXcgR3RrMjo6SEJveCggJGZh bHNlLCAwICk7CiBteSAkaGJveDIgPSBuZXcgR3RrMjo6SEJveCggJGZhbHNlLCAwICk7CiBt eSAkaGJveDMgPSBuZXcgR3RrMjo6SEJveCggJGZhbHNlLCAwICk7IAogbXkgJGhib3g0ID0g bmV3IEd0azI6OkhCb3goICRmYWxzZSwgMCApOwogbXkgJGhib3g1ID0gbmV3IEd0azI6OkhC b3goICRmYWxzZSwgMCApOwogbXkgJGhib3g2ID0gbmV3IEd0azI6OkhCb3goICRmYWxzZSwg MCApOwogbXkgJGhib3g3ID0gbmV3IEd0azI6OkhCb3goICRmYWxzZSwgMCApOwoKICRjb21i bzEgPSBuZXcgR3RrMjo6Q29tYm8oKTsKICRjb21ibzIgPSBuZXcgR3RrMjo6Q29tYm8oKTsK IG15IEBjb21ib19saXN0ID0gKCI2NDB4NDgwIiwgIjgwMHg2MDAiLCAiMTAyNHg3NjgiLCAi MTI4MHgxMDI0IiwgIjE2MDB4MTIwMCIpOwogbXkgQGNvbWJvX2xpc3QyID0gc29ydCBrZXlz ICVrbWFwX3RyYW5zX2hhc2g7CiAkY29tYm8xLT5zZXRfcG9wZG93bl9zdHJpbmdzKCBAY29t Ym9fbGlzdCApOwogJGNvbWJvMS0+c2V0X3VzZV9hcnJvd3NfYWx3YXlzKCAkdHJ1ZSApOwog JGNvbWJvMS0+c2V0X3ZhbHVlX2luX2xpc3QoICRmYWxzZSwgJHRydWUgKTsKICRjb21ibzIt PnNldF9wb3Bkb3duX3N0cmluZ3MoIEBjb21ib19saXN0MiApOwogJGNvbWJvMi0+c2V0X3Vz ZV9hcnJvd3NfYWx3YXlzKCAkdHJ1ZSApOwogJGNvbWJvMi0+c2V0X3ZhbHVlX2luX2xpc3Qo ICR0cnVlLCAkZmFsc2UgKTsKICMgJGNvbWJvMi0+ZW50cnktPnNldF90ZXh0KCAiVVMiICk7 CiAkZnNfY2hlY2tib3ggPSBuZXcgR3RrMjo6Q2hlY2tCdXR0b24oICJGdWxsc2NyZWVuIE9u IiApOwogJGJtcF9jaGVja2JveCA9IG5ldyBHdGsyOjpDaGVja0J1dHRvbiggIkZvcmNlIEJp dG1hcCBVcGRhdGUiICk7ICAKICRsaWNfY2hlY2tib3ggPSBuZXcgR3RrMjo6Q2hlY2tCdXR0 b24oICJEbyBOb3QgUmVxdWVzdCBMaWNlbnNlIiApOwoKICRkaWFsb2cxLT52Ym94LT5zZXRf aG9tb2dlbmVvdXMoICRmYWxzZSApOwoKICRkaWFsb2cxLT52Ym94LT5wYWNrX3N0YXJ0KCAk aGJveDEsICRmYWxzZSwgJGZhbHNlLCAwICk7CiAkaGJveDEtPnBhY2tfc3RhcnQoICR2Ym94 MSwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICR2Ym94MS0+cGFja19zdGFydCggJGxhYmVsMSwg JGZhbHNlLCAkZmFsc2UsIDAgKTsKICR2Ym94MS0+cGFja19zdGFydCggJG5hbWVfZW50cnks ICRmYWxzZSwgJGZhbHNlLCAwICk7CgogJGRpYWxvZzEtPnZib3gtPnBhY2tfc3RhcnQoICRo Ym94MiwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICRoYm94Mi0+cGFja19zdGFydCggJHZib3gy LCAkZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3gyLT5wYWNrX3N0YXJ0KCAkbGFiZWwyLCAk ZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3gyLT5wYWNrX3N0YXJ0KCAkaXBfZW50cnksICRm YWxzZSwgJGZhbHNlLCAwICk7CgogJGRpYWxvZzEtPnZib3gtPnBhY2tfc3RhcnQoICRoYm94 NCwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICRoYm94NC0+cGFja19zdGFydCggJHZib3g0LCAk ZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3g0LT5wYWNrX3N0YXJ0KCAkbGFiZWw0LCAkZmFs c2UsICRmYWxzZSwgMCApOwogJHZib3g0LT5wYWNrX3N0YXJ0KCAkdW5hbWVfZW50cnksICRm YWxzZSwgJGZhbHNlLCAwICk7CgogJGRpYWxvZzEtPnZib3gtPnBhY2tfc3RhcnQoICRoYm94 NywgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICRoYm94Ny0+cGFja19zdGFydCggJHZib3g3LCAk ZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3g3LT5wYWNrX3N0YXJ0KCAkbGFiZWw2LCAkZmFs c2UsICRmYWxzZSwgMCApOwogJHZib3g3LT5wYWNrX3N0YXJ0KCAkcGFzc3RocnVfZW50cnks ICRmYWxzZSwgJGZhbHNlLCAwICk7CgogJGRpYWxvZzEtPnZib3gtPnBhY2tfc3RhcnQoICRo Ym94MywgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICRoYm94My0+cGFja19zdGFydCggJHZib3gz LCAkZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3gzLT5wYWNrX3N0YXJ0KCAkbGFiZWwzLCAk ZmFsc2UsICRmYWxzZSwgMCApOwogJHZib3gzLT5wYWNrX3N0YXJ0KCAkY29tYm8xLCAkZmFs c2UsICRmYWxzZSwgMCApOwoKICRkaWFsb2cxLT52Ym94LT5wYWNrX3N0YXJ0KCAkaGJveDUs ICRmYWxzZSwgJGZhbHNlLCAwICk7CiAkaGJveDUtPnBhY2tfc3RhcnQoICR2Ym94NSwgJGZh bHNlLCAkZmFsc2UsIDAgKTsKICR2Ym94NS0+cGFja19zdGFydCggJGxhYmVsNSwgJGZhbHNl LCAkZmFsc2UsIDAgKTsKICR2Ym94NS0+cGFja19zdGFydCggJGNvbWJvMiwgJGZhbHNlLCAk ZmFsc2UsIDAgKTsKCiAkZGlhbG9nMS0+dmJveC0+cGFja19zdGFydCggJGhib3g2LCAkZmFs c2UsICRmYWxzZSwgMCApOwogJGhib3g2LT5wYWNrX3N0YXJ0KCAkdmJveDYsICRmYWxzZSwg JGZhbHNlLCAwICk7CiAkdmJveDYtPnBhY2tfc3RhcnQoICRmc19jaGVja2JveCwgJGZhbHNl LCAkZmFsc2UsIDAgKTsKICR2Ym94Ni0+cGFja19zdGFydCggJGJtcF9jaGVja2JveCwgJGZh bHNlLCAkZmFsc2UsIDAgKTsKICR2Ym94Ni0+cGFja19zdGFydCggJGxpY19jaGVja2JveCwg JGZhbHNlLCAkZmFsc2UsIDAgKTsKCiAkZGlhbG9nMS0+YWN0aW9uX2FyZWEtPnBhY2tfc3Rh cnQoICRkaWFsb2dfYnV0dG9uX29rLCAkdHJ1ZSwgJHRydWUsIDAgKTsKICRkaWFsb2cxLT5h Y3Rpb25fYXJlYS0+cGFja19zdGFydCggJGRpYWxvZ19idXR0b25fY2FuY2VsLCAkdHJ1ZSwg JHRydWUsIDAgKTsKCiAkbmFtZV9lbnRyeS0+c2V0X3RleHQoICRzZWxlY3RlZF9tYWNoaW5l ICk7CiAkaXBfZW50cnktPnNldF90ZXh0KCAkaXBfaGFzaHskc2VsZWN0ZWRfbWFjaGluZX0g KTsKICR1bmFtZV9lbnRyeS0+c2V0X3RleHQoICR1bmFtZV9oYXNoeyRzZWxlY3RlZF9tYWNo aW5lfSApOwogJHBhc3N0aHJ1X2VudHJ5LT5zZXRfdGV4dCggJHBhc3N0aHJ1X2hhc2h7JHNl bGVjdGVkX21hY2hpbmV9ICk7CiAkY29tYm8xLT5lbnRyeS0+c2V0X3RleHQoICRnZW9tX2hh c2h7JHNlbGVjdGVkX21hY2hpbmV9ICk7CiAkY29tYm8yLT5lbnRyeS0+c2V0X3RleHQoICRr bWFwX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9ICk7CiBpZiggJGZ1bGxzY3JlZW5faGFzaHsk c2VsZWN0ZWRfbWFjaGluZX0gZXEgInRydWUiKQogewogICAkZnNfY2hlY2tib3gtPnNldF9h Y3RpdmUoICR0cnVlICk7CiB9CiBlbHNlIHsgJGZzX2NoZWNrYm94LT5zZXRfYWN0aXZlKCAk ZmFsc2UgKTsgfQogaWYoICRiaXRtYXBfdXBkX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9IGVx ICJ0cnVlIiApCiB7CiAgICRibXBfY2hlY2tib3gtPnNldF9hY3RpdmUoICR0cnVlICk7CiB9 CiBlbHNlIHsgJGJtcF9jaGVja2JveC0+c2V0X2FjdGl2ZSggJGZhbHNlICk7IH0KIGlmKCAk bGljZW5zZV9oYXNoeyRzZWxlY3RlZF9tYWNoaW5lfSBlcSAidHJ1ZSIgKQogewogICAkbGlj X2NoZWNrYm94LT5zZXRfYWN0aXZlKCAkdHJ1ZSApOwogfQogZWxzZSB7ICRsaWNfY2hlY2ti b3gtPnNldF9hY3RpdmUoICRmYWxzZSApOyB9CiAKICRkaWFsb2cxLT5zaG93X2FsbCgpOwoK fQoKIyByZW1vdmUgYSBtYWNoaW5lIGVudHJ5IGZyb20gdGhlIGxpc3QKc3ViIHJkZXNxdWVf ZGVsZXRlCnsKICBteSAkbmFtZV9kZWxldGVkOwogIG15ICRpcF9kZWxldGVkOwogICRuYW1l X2RlbGV0ZWQgPSAkc2VsZWN0ZWRfbWFjaGluZTsKICAkaXBfZGVsZXRlZCA9ICRpcF9oYXNo eyRzZWxlY3RlZF9tYWNoaW5lfTsKICBkZWxldGUgJGlwX2hhc2h7JHNlbGVjdGVkX21hY2hp bmV9OwogIGRlbGV0ZSAkdW5hbWVfaGFzaHskc2VsZWN0ZWRfbWFjaGluZX07CiAgZGVsZXRl ICRnZW9tX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9OwogIGRlbGV0ZSAkZnVsbHNjcmVlbl9o YXNoeyRzZWxlY3RlZF9tYWNoaW5lfTsKICBkZWxldGUgJGJpdG1hcF91cGRfaGFzaHskc2Vs ZWN0ZWRfbWFjaGluZX07CiAgZGVsZXRlICRrbWFwX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9 OwogIGRlbGV0ZSAkbGljZW5zZV9oYXNoeyRzZWxlY3RlZF9tYWNoaW5lfTsKICBkZWxldGUg JHBhc3N0aHJ1X2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9OwogIHdyaXRlX291dF9jb25maWco KTsKICBwcmludCAiU2VydmVyIGRlbGV0ZWQ6IG5hbWUgPSAkbmFtZV9kZWxldGVkLCBpcC9o b3N0bmFtZSA9ICRpcF9kZWxldGVkXG4iOwogIHBvcHVsYXRlX2NsaXN0X2Zyb21fY29uZmln KCk7Cgp9CgojIGNoYW5nZSBhbiBleGlzdGluZyBlbnRyeSBpbiB0aGUgbGlzdAojIG11Y2gg bGlrZSB0aGUgcmRlc3F1ZV9hZGQoKSBzdWIsIGFsbCB0aGlzIGRvZXMKIyBzZXQgdXAgYSBk aWFsb2cgdG8gZGlzcGxheSB0aGUgaW5mbyBhbmQgY2hhbmdlIGl0CiMgYWxsIHRoZSByZWFs IGxlZ3dvcmsgaXMgZG9uZSBieSBkb19lZGl0X3NlcnZlcigpCiMgeWVzLCB0aGUgbGF5b3V0 IHN0dWZmIGlzIG5hc3R5LCBzZWUgY29tbWVudHMgZm9yIHJkZXNxdWVfYWRkKCkKc3ViIHJk ZXNxdWVfZWRpdAp7CgogICRkaWFsb2cyID0gbmV3IEd0azI6OkRpYWxvZygpOwogICRkaWFs b2dfYnV0dG9uX29rID0gbmV3IEd0azI6OkJ1dHRvbiggIk9rIiApOwogICRkaWFsb2dfYnV0 dG9uX2NhbmNlbCA9IG5ldyBHdGsyOjpCdXR0b24oICJDYW5jZWwiICk7CiAgJGRpYWxvZ19i dXR0b25fb2stPnNpZ25hbF9jb25uZWN0KCAiY2xpY2tlZCIsIFwmZG9fZWRpdF9zZXJ2ZXIg KTsKICAkZGlhbG9nX2J1dHRvbl9jYW5jZWwtPnNpZ25hbF9jb25uZWN0KCAiY2xpY2tlZCIs IHN1YiB7ICRkaWFsb2cyLT5kZXN0cm95KCk7IH0gKTsKICAKICAkbmFtZV9lbnRyeSA9IG5l dyBHdGsyOjpFbnRyeSggKTsKICAkaXBfZW50cnkgPSBuZXcgR3RrMjo6RW50cnkoICk7CiAg JHVuYW1lX2VudHJ5ID0gbmV3IEd0azI6OkVudHJ5KCApOwogICRwYXNzdGhydV9lbnRyeSA9 IG5ldyBHdGsyOjpFbnRyeSggKTsKCiAgbXkgJGxhYmVsMSA9IG5ldyBHdGsyOjpMYWJlbCgg IkVudGVyIGEgbmFtZSBmb3IgdGhpcyBzZXJ2ZXI6ICIgKTsKICBteSAkbGFiZWwyID0gbmV3 IEd0azI6OkxhYmVsKCAiRW50ZXIgYW4gSVAgYWRkcmVzcyBvciBob3N0bmFtZSB0byBjb25u ZWN0IHRvOiAiKTsKICBteSAkbGFiZWwzID0gbmV3IEd0azI6OkxhYmVsKCAiUmVzb2x1dGlv bjogIiApOwogIG15ICRsYWJlbDQgPSBuZXcgR3RrMjo6TGFiZWwoICJVc2VybmFtZTogIiAp OwogIG15ICRsYWJlbDUgPSBuZXcgR3RrMjo6TGFiZWwoICJLZXlib2FyZCBNYXBwaW5nOiAi ICk7CiAgbXkgJGxhYmVsNiA9IG5ldyBHdGsyOjpMYWJlbCggIkFkZGl0aW9uYWwgVmFyaWFi bGVzIHRvIHBhc3M6ICAgICAgICAgICAgICAgICAgIiApOwoKICAkbGFiZWwxLT5zZXRfanVz dGlmeSggImxlZnQiICk7CiAgJGxhYmVsMi0+c2V0X2p1c3RpZnkoICJsZWZ0IiApOwogICRs YWJlbDMtPnNldF9qdXN0aWZ5KCAibGVmdCIgKTsKICAkbGFiZWw0LT5zZXRfanVzdGlmeSgg ImxlZnQiICk7CiAgJGxhYmVsNS0+c2V0X2p1c3RpZnkoICJsZWZ0IiApOwogICRsYWJlbDYt PnNldF9qdXN0aWZ5KCAibGVmdCIgKTsKICAKCiAgbXkgJHZib3gxID0gbmV3IEd0azI6OlZC b3goICRmYWxzZSwgMCApOwogIG15ICR2Ym94MiA9IG5ldyBHdGsyOjpWQm94KCAkZmFsc2Us IDAgKTsKICBteSAkdmJveDMgPSBuZXcgR3RrMjo6VkJveCggJGZhbHNlLCAwICk7CiAgbXkg JHZib3g0ID0gbmV3IEd0azI6OlZCb3goICRmYWxzZSwgMCApOwogIG15ICR2Ym94NSA9IG5l dyBHdGsyOjpWQm94KCAkZmFsc2UsIDAgKTsKICBteSAkdmJveDYgPSBuZXcgR3RrMjo6VkJv eCggJGZhbHNlLCAwICk7CiAgbXkgJHZib3g3ID0gbmV3IEd0azI6OlZCb3goICRmYWxzZSwg MCApOwogIAogIG15ICRoYm94MSA9IG5ldyBHdGsyOjpIQm94KCAkZmFsc2UsIDAgKTsKICBt eSAkaGJveDIgPSBuZXcgR3RrMjo6SEJveCggJGZhbHNlLCAwICk7CiAgbXkgJGhib3gzID0g bmV3IEd0azI6OkhCb3goICRmYWxzZSwgMCApOwogIG15ICRoYm94NCA9IG5ldyBHdGsyOjpI Qm94KCAkZmFsc2UsIDAgKTsKICBteSAkaGJveDUgPSBuZXcgR3RrMjo6SEJveCggJGZhbHNl LCAwICk7CiAgbXkgJGhib3g2ID0gbmV3IEd0azI6OkhCb3goICRmYWxzZSwgMCApOwogIG15 ICRoYm94NyA9IG5ldyBHdGsyOjpIQm94KCAkZmFsc2UsIDAgKTsKICAKICAkY29tYm8xID0g bmV3IEd0azI6OkNvbWJvKCk7CiAgJGNvbWJvMiA9IG5ldyBHdGsyOjpDb21ibygpOwogIG15 IEBjb21ib19saXN0ID0gKCI2NDB4NDgwIiwgIjgwMHg2MDAiLCAiMTAyNHg3NjgiLCAiMTI4 MHgxMDI0IiwgIjE2MDB4MTIwMCIpOwogIG15IEBjb21ib19saXN0MiA9IHNvcnQga2V5cyAl a21hcF90cmFuc19oYXNoOwogICRjb21ibzEtPnNldF9wb3Bkb3duX3N0cmluZ3MoIEBjb21i b19saXN0ICk7CiAgJGNvbWJvMS0+c2V0X3VzZV9hcnJvd3NfYWx3YXlzKCAkdHJ1ZSApOwog ICRjb21ibzEtPnNldF92YWx1ZV9pbl9saXN0KCAkZmFsc2UsICR0cnVlICk7CiAgJGNvbWJv Mi0+c2V0X3BvcGRvd25fc3RyaW5ncyggQGNvbWJvX2xpc3QyICk7CiAgJGNvbWJvMi0+c2V0 X3VzZV9hcnJvd3NfYWx3YXlzKCAkdHJ1ZSApOwogICRjb21ibzItPnNldF92YWx1ZV9pbl9s aXN0KCAkdHJ1ZSwgJGZhbHNlICk7CgogICRmc19jaGVja2JveCA9IG5ldyBHdGsyOjpDaGVj a0J1dHRvbiggIkZ1bGxzY3JlZW4gT24iICk7CiAgJGJtcF9jaGVja2JveCA9IG5ldyBHdGsy OjpDaGVja0J1dHRvbiggIkZvcmNlIEJpdG1hcCBVcGRhdGUiICk7CiAgJGxpY19jaGVja2Jv eCA9IG5ldyBHdGsyOjpDaGVja0J1dHRvbiggIkRvIE5vdCBSZXF1ZXN0IExpY2Vuc2UiICk7 CgogICRkaWFsb2cyLT52Ym94LT5zZXRfaG9tb2dlbmVvdXMoICRmYWxzZSApOwoKICAkZGlh bG9nMi0+dmJveC0+cGFja19zdGFydCggJGhib3gxLCAkZmFsc2UsICRmYWxzZSwgMCApOwog ICRoYm94MS0+cGFja19zdGFydCggJHZib3gxLCAkZmFsc2UsICRmYWxzZSwgMCApOwogICR2 Ym94MS0+cGFja19zdGFydCggJGxhYmVsMSwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICAkdmJv eDEtPnBhY2tfc3RhcnQoICRuYW1lX2VudHJ5LCAkZmFsc2UsICRmYWxzZSwgMCApOwoKICAk ZGlhbG9nMi0+dmJveC0+cGFja19zdGFydCggJGhib3gyLCAkZmFsc2UsICRmYWxzZSwgMCAp OwogICRoYm94Mi0+cGFja19zdGFydCggJHZib3gyLCAkZmFsc2UsICRmYWxzZSwgMCApOwog ICR2Ym94Mi0+cGFja19zdGFydCggJGxhYmVsMiwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKICAk dmJveDItPnBhY2tfc3RhcnQoICRpcF9lbnRyeSwgJGZhbHNlLCAkZmFsc2UsIDAgKTsKCiAg JGRpYWxvZzItPnZib3gtPnBhY2tfc3RhcnQoICRoYm94NCwgJGZhbHNlLCAkZmFsc2UsIDAg KTsKICAkaGJveDQtPnBhY2tfc3RhcnQoICR2Ym94NCwgJGZhbHNlLCAkZmFsc2UsIDAgKTsK ICAkdmJveDQtPnBhY2tfc3RhcnQoICRsYWJlbDQsICRmYWxzZSwgJGZhbHNlLCAwICk7CiAg JHZib3g0LT5wYWNrX3N0YXJ0KCAkdW5hbWVfZW50cnksICRmYWxzZSwgJGZhbHNlLCAwICk7 CgogICRkaWFsb2cyLT52Ym94LT5wYWNrX3N0YXJ0KCAkaGJveDcsICRmYWxzZSwgJGZhbHNl LCAwICk7CiAgJGhib3g0LT5wYWNrX3N0YXJ0KCAkdmJveDcsICRmYWxzZSwgJGZhbHNlLCAw ICk7CiAgJHZib3g0LT5wYWNrX3N0YXJ0KCAkbGFiZWw2LCAkZmFsc2UsICRmYWxzZSwgMCAp OwogICR2Ym94NC0+cGFja19zdGFydCggJHBhc3N0aHJ1X2VudHJ5LCAkZmFsc2UsICRmYWxz ZSwgMCApOwoKICAkZGlhbG9nMi0+dmJveC0+cGFja19zdGFydCggJGhib3gzLCAkZmFsc2Us ICRmYWxzZSwgMCApOwogICRoYm94My0+cGFja19zdGFydCggJHZib3gzLCAkZmFsc2UsICRm YWxzZSwgMCApOwogICR2Ym94My0+cGFja19zdGFydCggJGxhYmVsMywgJGZhbHNlLCAkZmFs c2UsIDAgKTsKICAkdmJveDMtPnBhY2tfc3RhcnQoICRjb21ibzEsICRmYWxzZSwgJGZhbHNl LCAwICk7CgogICRkaWFsb2cyLT52Ym94LT5wYWNrX3N0YXJ0KCAkaGJveDYsICRmYWxzZSwg JGZhbHNlLCAwICk7CiAgJGhib3g2LT5wYWNrX3N0YXJ0KCAkdmJveDYsICRmYWxzZSwgJGZh bHNlLCAwICk7CiAgJHZib3g2LT5wYWNrX3N0YXJ0KCAkbGFiZWw1LCAkZmFsc2UsICRmYWxz ZSwgMCApOwogICR2Ym94Ni0+cGFja19zdGFydCggJGNvbWJvMiwgJGZhbHNlLCAkZmFsc2Us IDAgKTsKCiAgJGRpYWxvZzItPnZib3gtPnBhY2tfc3RhcnQoICRoYm94NSwgJGZhbHNlLCAk ZmFsc2UsIDAgKTsKICAkaGJveDUtPnBhY2tfc3RhcnQoICR2Ym94NSwgJGZhbHNlLCAkZmFs c2UsIDAgKTsKICAkdmJveDUtPnBhY2tfc3RhcnQoICRmc19jaGVja2JveCwgJGZhbHNlLCAk ZmFsc2UsIDAgKTsKICAkdmJveDUtPnBhY2tfc3RhcnQoICRibXBfY2hlY2tib3gsICRmYWxz ZSwgJGZhbHNlLCAwICk7CiAgJHZib3g1LT5wYWNrX3N0YXJ0KCAkbGljX2NoZWNrYm94LCAk ZmFsc2UsICRmYWxzZSwgMCApOwogIAogICRkaWFsb2cyLT5hY3Rpb25fYXJlYS0+cGFja19z dGFydCggJGRpYWxvZ19idXR0b25fb2ssICR0cnVlLCAkdHJ1ZSwgMCApOwogICRkaWFsb2cy LT5hY3Rpb25fYXJlYS0+cGFja19zdGFydCggJGRpYWxvZ19idXR0b25fY2FuY2VsLCAkdHJ1 ZSwgJHRydWUsIDAgKTsKCiAgJG5hbWVfZW50cnktPnNldF90ZXh0KCAkc2VsZWN0ZWRfbWFj aGluZSApOwogICRpcF9lbnRyeS0+c2V0X3RleHQoICRpcF9oYXNoeyRzZWxlY3RlZF9tYWNo aW5lfSApOwogICR1bmFtZV9lbnRyeS0+c2V0X3RleHQoICR1bmFtZV9oYXNoeyRzZWxlY3Rl ZF9tYWNoaW5lfSApOwogICRwYXNzdGhydV9lbnRyeS0+c2V0X3RleHQoICRwYXNzdGhydV9o YXNoeyRzZWxlY3RlZF9tYWNoaW5lfSApOwogICRjb21ibzEtPmVudHJ5LT5zZXRfdGV4dCgg JGdlb21faGFzaHskc2VsZWN0ZWRfbWFjaGluZX0gKTsKICAkY29tYm8yLT5lbnRyeS0+c2V0 X3RleHQoICRrbWFwX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9ICk7CiAgaWYoICRmdWxsc2Ny ZWVuX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9IGVxICJ0cnVlIikKICB7CiAgICAkZnNfY2hl Y2tib3gtPnNldF9hY3RpdmUoICR0cnVlICk7CiAgfQogIGVsc2UgeyAkZnNfY2hlY2tib3gt PnNldF9hY3RpdmUoICRmYWxzZSApOyB9CiAgaWYoICRiaXRtYXBfdXBkX2hhc2h7JHNlbGVj dGVkX21hY2hpbmV9IGVxICJ0cnVlIiApCiAgewogICAgJGJtcF9jaGVja2JveC0+c2V0X2Fj dGl2ZSggJHRydWUgKTsKICB9CiAgZWxzZSB7ICRibXBfY2hlY2tib3gtPnNldF9hY3RpdmUo ICRmYWxzZSApOyB9CiAgaWYoICRsaWNlbnNlX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9IGVx ICJ0cnVlIiApCiAgewogICAgJGxpY19jaGVja2JveC0+c2V0X2FjdGl2ZSggJHRydWUgKTsK ICB9CiAgZWxzZSB7ICRsaWNfY2hlY2tib3gtPnNldF9hY3RpdmUoICRmYWxzZSApOyB9Cgog ICRkaWFsb2cyLT5zZXRfdGl0bGUoIkVkaXQgU2VydmVyOiAkc2VsZWN0ZWRfbWFjaGluZSIp OwoKICAkZGlhbG9nMi0+c2hvd19hbGwoKTsKCn0KCiMgaGFuZGxlciBmb3Igd2hlbiBhIHJv dyBpcyBzZWxlY3RlZCwgZ3JhYnMgaW5mbyBmcm9tIHRoZSBzZWxlY3RlZCByb3cKIyBsb29r cyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgdXAgaW4gdGhlIGhhc2ggYW5kIAojIHN0dWZm cyB0aGVtIGludG8gdmFyaWFibGVzIHRvIGJlIHVzZWQgaW4gb3RoZXIgc3VicwpzdWIgbGlz dF9zZWxfcm93CnsKICBteSAkc2VsZWN0aW9uID0gKCRsaXN0MS0+Z2V0X3NlbGVjdGVkX2lu ZGljZXMpWzBdOwogIG15IEByb3cgPSBAeyhAeyRsaXN0MS0+e2RhdGF9fSlbJHNlbGVjdGlv bl19OwogCiAgbXkgJGZzX3RmOwogIG15ICRibXBfdGY7CiAgJHNlbGVjdGVkX21hY2hpbmUg PSAkcm93WzBdOwogICRzZWxlY3RlZF9tYWNoaW5lX2lwID0gJGlwX2hhc2h7JHNlbGVjdGVk X21hY2hpbmV9OwogICRzZWxlY3RlZF91bmFtZSA9ICR1bmFtZV9oYXNoeyRzZWxlY3RlZF9t YWNoaW5lfTsKICAkc2VsZWN0ZWRfZ2VvbSA9ICRnZW9tX2hhc2h7JHNlbGVjdGVkX21hY2hp bmV9OwogICRzZWxlY3RlZF9mcyA9ICRmdWxsc2NyZWVuX2hhc2h7JHNlbGVjdGVkX21hY2hp bmV9OwogICRzZWxlY3RlZF9iaXRtYXBfdXBkID0gJGJpdG1hcF91cGRfaGFzaHskc2VsZWN0 ZWRfbWFjaGluZX07CiAgJHNlbGVjdGVkX2xpYyA9ICRsaWNlbnNlX2hhc2h7JHNlbGVjdGVk X21hY2hpbmV9OwogICRzZWxlY3RlZF9rbWFwID0gJGttYXBfaGFzaHskc2VsZWN0ZWRfbWFj aGluZX07CiAgJHNlbGVjdGVkX2ttYXBfaGV4ID0gJGttYXBfdHJhbnNfaGFzaHskc2VsZWN0 ZWRfa21hcH07CiAgJHNlbGVjdGVkX3Bhc3N0aHJ1ID0gJHBhc3N0aHJ1X2hhc2h7JHNlbGVj dGVkX21hY2hpbmV9OwoKICBpZiggJHNlbGVjdGVkX2ZzIGVxICJ0cnVlIiApIHsgJGZzX3Rm ID0gIk9OIjsgfQogIGVsc2UgeyAkZnNfdGYgPSAiT0ZGIjsgfQogIGlmKCAkc2VsZWN0ZWRf Yml0bWFwX3VwZCBlcSAidHJ1ZSIgKSB7ICRibXBfdGYgPSAiRm9yY2luZyBCaXRtYXAgVXBk YXRlcyI7IH0KICBlbHNlIHsgJGJtcF90ZiA9ICJub3QgRm9yY2luZyBCaXRtYXAgVXBkYXRl cyI7IH0KICBwcmludCAiWW91IHNlbGVjdGVkIFwiJHNlbGVjdGVkX21hY2hpbmVcIiwgd2l0 aCB0aGUgSVAgXCIkc2VsZWN0ZWRfbWFjaGluZV9pcFwiLCBHZW9tZXRyeSBpcyBcIiRzZWxl Y3RlZF9nZW9tXCJcblVzZXJuYW1lIGlzIFwiJHNlbGVjdGVkX3VuYW1lXCIsIEZ1bGxzY3Jl ZW4gaXMgJGZzX3RmLCAkYm1wX3RmXG5LZXlib2FyZCBNYXBwaW5nIGlzIFwiJHNlbGVjdGVk X2ttYXBcIlxuXG4iOyAKfQoKCnN1YiBsaXN0X2V4ZWNfcm93IHsKICByZXR1cm4gMSB1bmxl c3MgJHNlbGVjdGVkX21hY2hpbmVfaXA7CiAgbXkgKCR3LCAkZXYpID0gQF87CiAgaWYgKCRl di0+e3R5cGV9IGVxICcyYnV0dG9uX3ByZXNzJyBhbmQgJGV2LT57YnV0dG9ufSA9PSAxKSB7 CiAgICAgICMgd2VsbCwgcHJvYmFibHkgd2Ugc2hvdWxkIGVtdWxhdGUgcHJvcGVyIHNpZ25h bCBtYXJzaGFsbGluZwogICAgICAjIGZvciAnY2xpY2snIG9uIHRoZSAnQ29ubmVjdCcgYnV0 dG9uLCBidXQgZm9yIHRoZSBtb21lbnQgaXQncwogICAgICAjIGVub3VnaCB0byBzaW1wbHkg Y2FsbCAncmRlc3F1ZV9jb25uZWN0JwogICAgICAjIGxpc3QgZG91YmxlLWNsaWNrIHBhdGNo IGJ5IEFsZXhleSBNb3Jvem92CiAgICAgICZyZGVzcXVlX2Nvbm5lY3Q7CiAgfQogIHJldHVy biAxOwp9CgojIGZhaXJseSBzaW1wbGUsIGp1c3Qgc3BpdHMgb3V0IGEgY29uZmlnIGZpbGUg YmFzZWQgb24gdGhlCiMgZGF0YSBjb250YWluZWQgaW4gdGhlIGhhc2hlcyAKc3ViIHdyaXRl X291dF9jb25maWcKewogIG15ICRtYWNoaW5hX3A7CiAgbXkgQG1hY2hpbmVzX3A7CiAgbXkg JGNvdW50ID0gMTsgCgogIHVubGluayggIiRFTlZ7SE9NRX0vLnhyZGVza3RvcF9jb25maWci ICk7CiAgIyBmaXhlZCBieSBLZW4gQ2FydXNvCiAgb3BlbiggQ09ORklHLCAiPiRFTlZ7SE9N RX0vLnhyZGVza3RvcF9jb25maWciICk7CiAgc2VsZWN0KCBDT05GSUcgKTsKCiAgcHJpbnQg IlwjIE5PIFVTRVIgU0VSVklDQUJMRSBQQVJUUy4gQVQgQUxMLlxuIjsKICBwcmludCAiI1xu XG4iOwoKICBAbWFjaGluZXNfcCA9IGtleXMgJWlwX2hhc2g7CiAgZm9yZWFjaCAkbWFjaGlu YV9wIChzb3J0IEBtYWNoaW5lc19wKQogIHsKICAgIHByaW50ICIjIEVudHJ5ICRjb3VudFxu IjsKICAgIHByaW50ICJOYW1lPSRtYWNoaW5hX3BcbiI7CiAgICBwcmludCAiSVA9JGlwX2hh c2h7JG1hY2hpbmFfcH1cbiI7CiAgICBwcmludCAiVW5hbWU9JHVuYW1lX2hhc2h7JG1hY2hp bmFfcH1cbiI7CiAgICBwcmludCAiR2VvbWV0cnk9JGdlb21faGFzaHskbWFjaGluYV9wfVxu IjsKICAgIHByaW50ICJGdWxsc2NyZWVuPSRmdWxsc2NyZWVuX2hhc2h7JG1hY2hpbmFfcH1c biI7CiAgICBwcmludCAiQml0bWFwX1VwZGF0ZXM9JGJpdG1hcF91cGRfaGFzaHskbWFjaGlu YV9wfVxuIjsKICAgIHByaW50ICJLZXltYXA9JGttYXBfaGFzaHskbWFjaGluYV9wfVxuIjsK ICAgIHByaW50ICJOb1JlcUxpYz0kbGljZW5zZV9oYXNoeyRtYWNoaW5hX3B9XG4iOwogICAg cHJpbnQgIlBhc3N0aHJ1PSRwYXNzdGhydV9oYXNoeyRtYWNoaW5hX3B9XG5cbiI7CiAgICAk Y291bnQrKzsKICB9CgogIHNlbGVjdCggU1RET1VUICk7CiAgY2xvc2UoIENPTkZJRyApOwog IAp9CgojIGRvZXMgdGhlIGFjdHVhbCBhZGRpbmcgb2YgdGhlIHNlcnZlciB0byB0aGUgaGFz aCBhbmQgY29uZmlnIGZpbGVzCiMgc2luY2UgdGhlIHJkZXNxdWVfYWRkKCkgc3ViIGp1c3Qg Y3JlYXRlcyB0aGUgZGlhbG9nLgojIHRoaXMgaXMgdGhlIG9uZSBsaW5rZWQgdG8gdGhlICJv ayIgYnV0dG9uIGluIHRoZSBhZGQgZGlhbG9nCnN1YiBkb19hZGRfc2VydmVyCnsKCiBteSAk bmFtZV9hZGRlZCA9ICRuYW1lX2VudHJ5LT5nZXRfdGV4dCgpOwogbXkgJGlwX2FkZGVkID0g JGlwX2VudHJ5LT5nZXRfdGV4dCgpOwogbXkgJHVuYW1lX2FkZGVkID0gJHVuYW1lX2VudHJ5 LT5nZXRfdGV4dCgpOwogbXkgJHJlc28gPSAkY29tYm8xLT5lbnRyeS0+Z2V0X3RleHQoKTsK IG15ICRrbWFwID0gJGNvbWJvMi0+ZW50cnktPmdldF90ZXh0KCk7CiBteSAkcHRocnUgPSAk cGFzc3RocnVfZW50cnktPmdldF90ZXh0KCk7CiBteSAkZnNfc3RhdGU7CiBteSAkYm1wX3N0 YXRlOwogbXkgJGxpY19zdGF0ZTsKCiBpZiggJGZzX2NoZWNrYm94LT5nZXRfYWN0aXZlICkg eyRmc19zdGF0ZSA9ICJ0cnVlIjt9CiBlbHNlIHskZnNfc3RhdGUgPSAiZmFsc2UiO30KIAog aWYoICRibXBfY2hlY2tib3gtPmdldF9hY3RpdmUgKSB7JGJtcF9zdGF0ZSA9ICJ0cnVlIjt9 CiBlbHNlIHskYm1wX3N0YXRlID0gImZhbHNlIjt9CgogaWYoICRsaWNfY2hlY2tib3gtPmdl dF9hY3RpdmUgKSB7JGxpY19zdGF0ZSA9ICJ0cnVlIjt9CiBlbHNlIHskbGljX3N0YXRlID0g ImZhbHNlIjt9CgogY2hvbXAgJG5hbWVfYWRkZWQ7CiBjaG9tcCAkaXBfYWRkZWQ7CiBjaG9t cCAkdW5hbWVfYWRkZWQ7CiBjaG9tcCAkcmVzbzsKIGNob21wICRmc19zdGF0ZTsKIGNob21w ICRibXBfc3RhdGU7CiBjaG9tcCAkbGljX3N0YXRlOwogY2hvbXAgJGttYXA7CiBjaG9tcCAk cHRocnU7CgogbXkgJGNoZWNrX2R1cGVfa2V5ID0gZXhpc3RzICRpcF9oYXNoeyRuYW1lX2Fk ZGVkfTsKIGlmKCAkbmFtZV9hZGRlZCBuZSAiIiAmJiAkaXBfYWRkZWQgbmUgIiIgJiYgJGNo ZWNrX2R1cGVfa2V5ICE9ICR0cnVlICkgCiB7CiAgICRpcF9oYXNoeyRuYW1lX2FkZGVkfSA9 ICRpcF9hZGRlZDsKICAgJHVuYW1lX2hhc2h7JG5hbWVfYWRkZWR9ID0gJHVuYW1lX2FkZGVk OwogICAkZ2VvbV9oYXNoeyRuYW1lX2FkZGVkfSA9ICRyZXNvOwogICAkZnVsbHNjcmVlbl9o YXNoeyRuYW1lX2FkZGVkfSA9ICRmc19zdGF0ZTsKICAgJGJpdG1hcF91cGRfaGFzaHskbmFt ZV9hZGRlZH0gPSAkYm1wX3N0YXRlOwogICAkbGljZW5zZV9oYXNoeyRuYW1lX2FkZGVkfSA9 ICRsaWNfc3RhdGU7CiAgICRrbWFwX2hhc2h7JG5hbWVfYWRkZWR9ID0gJGttYXA7CiAgICRw YXNzdGhydV9oYXNoeyRuYW1lX2FkZGVkfSA9ICRwdGhydTsKIyAgIHByaW50ICJBZGRpbmc6 ICRuYW1lX2FkZGVkLCAkcHRocnVcbiI7CiAgIHdyaXRlX291dF9jb25maWcoKTsKIyAgIHBy aW50ICJBZGRlZDogbmFtZT0kbmFtZV9hZGRlZCwgaXAvaG9zdG5hbWU9JGlwX2FkZGVkLCB1 c2VybmFtZT0kdW5hbWVfYWRkZWRcblJlc29sdXRpb249JHJlc28sIEZ1bGxzY3JlZW49JGZz X3N0YXRlLCBGb3JjZSBCaXRtYXAgVXBkYXRlcz0kYm1wX3N0YXRlXG5LZXlib2FyZCBNYXBw aW5nPSRrbWFwXG5cbiI7CiAgICRkaWFsb2cxLT5kZXN0cm95KCk7CiAgIHBvcHVsYXRlX2Ns aXN0X2Zyb21fY29uZmlnKCk7CiB9CiBlbHNlCiB7CiAgIG15ICRmaWVsZDE7CiAgIG15ICRk b2hfZGlhbG9nID0gbmV3IEd0azI6OkRpYWxvZygpOwogICAkZG9oX2RpYWxvZy0+dGl0bGUo IkVyLi4uLiIpOwogICBteSAkZG9oX29rID0gbmV3IEd0azI6OkJ1dHRvbiggIk9rIiApOwog ICAkZG9oX29rLT5zaWduYWxfY29ubmVjdCggImNsaWNrZWQiLCBzdWIgeyAkZG9oX2RpYWxv Zy0+ZGVzdHJveSgpOyB9ICk7CiAgIG15ICRkb2hfbGFiZWwgPSBuZXcgR3RrMjo6TGFiZWwo KTsKICAgaWYoICRuYW1lX2FkZGVkIGVxICIiICkgCiAgIHsgCiAgICAgJGZpZWxkMSA9ICJZ b3UgbGVmdCB0aGUgTmFtZSBmaWVsZCBibGFuay5cbkNvbmZpZyBOT1QgdXBkYXRlZCI7CiAg ICAgJGRvaF9sYWJlbC0+c2V0X3RleHQoICRmaWVsZDEgKTsKICAgfQogICBlbHNpZiggJGlw X2FkZGVkIGVxICIiICkgCiAgIHsgCiAgICAgJGZpZWxkMSA9ICJZb3UgbGVmdCB0aGUgSVAv SG9zdG5hbWUgZmllbGQgYmxhbmsuXG5Db25maWcgTk9UIHVwZGF0ZWQiOyAKICAgICAkZG9o X2xhYmVsLT5zZXRfdGV4dCggJGZpZWxkMSApOwogICB9IAogICBlbHNpZiggJGNoZWNrX2R1 cGVfa2V5ICkgCiAgIHsgCiAgICAgJGRvaF9sYWJlbC0+c2V0X3RleHQoICJBbiBlbnRyeSBu YW1lZCBcIiRuYW1lX2FkZGVkXCIgYWxyZWFkeSBleGlzdHMuXG5QbGVhc2UgY2hvb3NlIGFu b3RoZXIgbmFtZS4iICk7IAogICB9CiAgIGVsc2UgCiAgIHsgCiAgICAgJGZpZWxkMSA9ICIq KipDUklUSUNBTCBFUlJPUioqKiI7IAogICAgICRkb2hfbGFiZWwtPnNldF90ZXh0KCAkZmll bGQxICk7CiAgIH0KICAgCiAgICRkb2hfZGlhbG9nLT52Ym94LT5wYWNrX3N0YXJ0KCAkZG9o X2xhYmVsLCAkdHJ1ZSwgJHRydWUsIDAgKTsKICAgJGRvaF9kaWFsb2ctPmFjdGlvbl9hcmVh LT5wYWNrX3N0YXJ0KCAkZG9oX29rLCAkdHJ1ZSwgJHRydWUsIDAgKTsKICAgJGRvaF9kaWFs b2ctPnNob3dfYWxsKCk7CiB9CiAKfQoKIyBkb2VzIHRoZSBhY3R1YWwgZWRpdGluZyBvZiB0 aGUgc2VydmVyIGluIHRoZSBoYXNoIGFuZCBjb25maWcKIyBmaWxlcyBzaW5jZSB0aGUgcmRl c3F1ZV9lZGl0KCkgc3ViIGp1c3QgY3JlYXRlcyB0aGUgZGlhbG9nLgojIHRoaXMgaXMgdGhl IG9uZSBsaW5rZWQgdG8gdGhlICJvayBidXR0b24gaW4gdGhlIGRpYWxvZwpzdWIgZG9fZWRp dF9zZXJ2ZXIKewogIG15ICRuYW1lX2VkaXRlZCA9ICRuYW1lX2VudHJ5LT5nZXRfdGV4dCgp OwogIG15ICRpcF9lZGl0ZWQgPSAkaXBfZW50cnktPmdldF90ZXh0KCk7CiAgbXkgJHVuYW1l X2VkaXRlZCA9ICR1bmFtZV9lbnRyeS0+Z2V0X3RleHQoKTsKICBteSAkcHRocnUgPSAkcGFz c3RocnVfZW50cnktPmdldF90ZXh0KCk7CiAgbXkgJHJlc28gPSAkY29tYm8xLT5lbnRyeS0+ Z2V0X3RleHQoKTsKICBteSAka21hcCA9ICRjb21ibzItPmVudHJ5LT5nZXRfdGV4dCgpOwog IG15ICRmc19zdGF0ZTsKICBteSAkYm1wX3N0YXRlOwogIG15ICRsaWNfc3RhdGU7CgogIGlm KCAkZnNfY2hlY2tib3gtPmdldF9hY3RpdmUgKSB7JGZzX3N0YXRlID0gInRydWUiO30KICBl bHNlIHskZnNfc3RhdGUgPSAiZmFsc2UiO30KIAogIGlmKCAkYm1wX2NoZWNrYm94LT5nZXRf YWN0aXZlICkgeyRibXBfc3RhdGUgPSAidHJ1ZSI7fQogIGVsc2UgeyRibXBfc3RhdGUgPSAi ZmFsc2UiO30KCiAgaWYoICRsaWNfY2hlY2tib3gtPmdldF9hY3RpdmUgKSB7JGxpY19zdGF0 ZSA9ICJ0cnVlIjt9CiAgZWxzZSB7JGxpY19zdGF0ZSA9ICJmYWxzZSI7fQoKCiAgY2hvbXAg JG5hbWVfZWRpdGVkOwogIGNob21wICRpcF9lZGl0ZWQ7CiAgY2hvbXAgJHVuYW1lX2VkaXRl ZDsKICBjaG9tcCAkcmVzbzsKICBjaG9tcCAkZnNfc3RhdGU7CiAgY2hvbXAgJGJtcF9zdGF0 ZTsKICBjaG9tcCAkbGljX3N0YXRlOwogIGNob21wICRrbWFwOwogIGNob21wICRwdGhydTsK CiAgaWYoICRuYW1lX2VkaXRlZCBuZSAiIiAmJiAkaXBfZWRpdGVkIG5lICIiICkKICB7CiAK ICAgIG15ICRvbGRfbmFtZSA9ICRzZWxlY3RlZF9tYWNoaW5lOwogICAgbXkgJG9sZF9pcCA9 ICRpcF9oYXNoeyRzZWxlY3RlZF9tYWNoaW5lfTsKCiAgICBkZWxldGUgJGlwX2hhc2h7JHNl bGVjdGVkX21hY2hpbmV9OwogICAgJGlwX2hhc2h7JG5hbWVfZWRpdGVkfSA9ICRpcF9lZGl0 ZWQ7CiAgICBkZWxldGUgJHVuYW1lX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9OwogICAgJHVu YW1lX2hhc2h7JG5hbWVfZWRpdGVkfSA9ICR1bmFtZV9lZGl0ZWQ7ICAKICAgIGRlbGV0ZSAk Z2VvbV9oYXNoeyRzZWxlY3RlZF9tYWNoaW5lfTsKICAgICRnZW9tX2hhc2h7JG5hbWVfZWRp dGVkfSA9ICRyZXNvOwogICAgZGVsZXRlICRmdWxsc2NyZWVuX2hhc2h7JHNlbGVjdGVkX21h Y2hpbmV9OwogICAgJGZ1bGxzY3JlZW5faGFzaHskbmFtZV9lZGl0ZWR9ID0gJGZzX3N0YXRl OwogICAgZGVsZXRlICRiaXRtYXBfdXBkX2hhc2h7JHNlbGVjdGVkX21hY2hpbmV9OwogICAg JGJpdG1hcF91cGRfaGFzaHskbmFtZV9lZGl0ZWR9ID0gJGJtcF9zdGF0ZTsKICAgIGRlbGV0 ZSAkbGljZW5zZV9oYXNoeyRzZWxlY3RlZF9tYWNoaW5lfTsKICAgICRsaWNlbnNlX2hhc2h7 JG5hbWVfZWRpdGVkfSA9ICRsaWNfc3RhdGU7CiAgICBkZWxldGUgJGttYXBfaGFzaHskc2Vs ZWN0ZWRfbWFjaGluZX07CiAgICAka21hcF9oYXNoeyRuYW1lX2VkaXRlZH0gPSAka21hcDsK ICAgIGRlbGV0ZSAkcGFzc3RocnVfaGFzaHskc2VsZWN0ZWRfbWFjaGluZX07CiAgICAkcGFz c3RocnVfaGFzaHskbmFtZV9lZGl0ZWR9ID0gJHB0aHJ1OwogICAKICAgIHdyaXRlX291dF9j b25maWcoKTsKICAgIHByaW50ICJPbGQgZGF0YTogbmFtZSA9ICRvbGRfbmFtZSwgaXAvaG9z dG5hbWUgPSAkb2xkX2lwXG4iOwogICAgcHJpbnQgIk5ldyBkYXRhOiBuYW1lID0gJG5hbWVf ZWRpdGVkLCBpcC9ob3N0bmFtZSA9ICRpcF9lZGl0ZWRcbiI7IAogICAgJGRpYWxvZzItPmRl c3Ryb3koKTsKICAgIHBvcHVsYXRlX2NsaXN0X2Zyb21fY29uZmlnKCk7IAogIH0KICBlbHNl CiAgewogICAgbXkgJGZpZWxkMTsKICAgIG15ICRkb2hfZGlhbG9nID0gbmV3IEd0azI6OkRp YWxvZygpOwogICAgJGRvaF9kaWFsb2ctPnRpdGxlKCJFci4uLi4iKTsKICAgIG15ICRkb2hf b2sgPSBuZXcgR3RrMjo6QnV0dG9uKCAiT2siICk7CiAgICAkZG9oX29rLT5zaWduYWxfY29u bmVjdCggImNsaWNrZWQiLCBzdWIgeyAkZG9oX2RpYWxvZy0+ZGVzdHJveSgpOyB9ICk7CiAg ICBpZiggJG5hbWVfZWRpdGVkIGVxICIiICkgeyAkZmllbGQxID0gIk5hbWUiOyB9CiAgICBl bHNpZiggJGlwX2VkaXRlZCBlcSAiIiApIHsgJGZpZWxkMSA9ICJJUC9Ib3N0bmFtZSI7IH0K ICAgIGVsc2UgeyAkZmllbGQxID0gIioqKkNSSVRJQ0FMIEVSUk9SKioqIjsgfQogICAgbXkg JGRvaF9sYWJlbCA9IG5ldyBHdGsyOjpMYWJlbCggIllvdSBsZWZ0IHRoZSAkZmllbGQxIGZp ZWxkIGJsYW5rLlxuQ29uZmlnIE5PVCB1cGRhdGVkLiIgKTsKICAgIAogICAgJGRvaF9kaWFs b2ctPnZib3gtPnBhY2tfc3RhcnQoICRkb2hfbGFiZWwsICR0cnVlLCAkdHJ1ZSwgMCApOwog ICAgJGRvaF9kaWFsb2ctPmFjdGlvbl9hcmVhLT5wYWNrX3N0YXJ0KCAkZG9oX29rLCAkdHJ1 ZSwgJHRydWUsIDAgKTsKICAgICRkb2hfZGlhbG9nLT5zaG93X2FsbCgpOwogIH0KCn0KCiMg cmVhZHMgaW4gdGhlIGNvbmZpZyBmaWxlICh+Ly54cmRlc2t0b3BfY29uZmlnIGJ5IGRlZmF1 bHQpCiMgcGx1Z3MgYWxsIHRoZSBkYXRhIGludG8gYSBoYXNoICgkaXBfaGFzaCkgYW5kIAoj IHNldHMgdXAgdGhlICRsaXN0MSB3aWRnZXQgd2l0aCB0aGUgZGF0YSBpbiB0aGUgaGFzaApz dWIgcG9wdWxhdGVfY2xpc3RfZnJvbV9jb25maWcKewoKICB1bmxlc3MoIC1lICIkRU5We0hP TUV9Ly54cmRlc2t0b3BfY29uZmlnIikgeyB3cml0ZV9vdXRfY29uZmlnKCk7fQoKICBvcGVu KCBDT05GSUcsICIkRU5We0hPTUV9Ly54cmRlc2t0b3BfY29uZmlnIik7CiAgd2hpbGUoIDxD T05GSUc+ICkKICB7CgogICAgIyBpZ25vcmUgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzIAog ICAgbmV4dCBpZiAvXiMvOwogICAgbmV4dCBpZiAvXiQvOwogIAogICMgZ2V0IG1lIHNvbWUg ZGF0YQogICAgJHJhd19kYXRhID0gJF87CiAgICBjaG9tcCAkcmF3X2RhdGE7CiAgICAoICRm aWVsZF90eXBlLCAkZmllbGRfZGF0YSApID0gc3BsaXQgLz0vLCAkcmF3X2RhdGEsMjsKICAg IGNob21wICRmaWVsZF90eXBlOwogICAgY2hvbXAgJGZpZWxkX2RhdGE7CgogICAgIyBzdHVm ZiB0aGUgZmlyc3QgbGluZSAoaG9wZWZ1bGx5IE5hbWUpIGludG8gdmFycwogICAgaWYoICRm aWVsZF90eXBlIGVxICJOYW1lIiApIHskbWFjaGluZV9uYW1lID0gJGZpZWxkX2RhdGE7fQog ICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJJUCIgKSB7JG1hY2hpbmVfaXAgPSAkZmllbGRf ZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIlVuYW1lIiApIHskbWFjaGluZV91 bmFtZSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiR2VvbWV0 cnkiICkgeyAkbWFjaGluZV9nZW9tID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVs ZF90eXBlIGVxICJGdWxsc2NyZWVuIiApIHskbWFjaGluZV9mcyA9ICRmaWVsZF9kYXRhO30K ICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiQml0bWFwX1VwZGF0ZXMiICkgeyRtYWNoaW5l X2JpdG1hcF91cGQgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEg IktleW1hcCIgKSB7JG1hY2hpbmVfa21hcCA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAk ZmllbGRfdHlwZSBlcSAiTm9SZXFMaWMiICkgeyRtYWNoaW5lX2xpYyA9ICRmaWVsZF9kYXRh O30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiUGFzc3RocnUiICkgeyRtYWNoaW5lX3Bh c3N0aHJ1ID0gJGZpZWxkX2RhdGE7fQogICAgZWxzZSB7cHJpbnQgIkJhZCBEYXRhOiAkZmll bGRfdHlwZSA6ICRmaWVsZF9kYXRhXG4iO30KCiAgICAjIHN0dWZmIHRoZSBzZWNvbmQgbGlu ZSAoaG9wZWZ1bGx5IElQKSBpbnRvIHZhcnMgCiAgICAkcmF3X2RhdGEgPSA8Q09ORklHPjsK ICAgIGNob21wICRyYXdfZGF0YTsKICAgICggJGZpZWxkX3R5cGUsICRmaWVsZF9kYXRhICkg PSBzcGxpdCAvPS8sICRyYXdfZGF0YSwyOwogICAgY2hvbXAgJGZpZWxkX3R5cGU7CiAgICBj aG9tcCAkZmllbGRfZGF0YTsKICAgIGlmKCAkZmllbGRfdHlwZSBlcSAiTmFtZSIgKSB7JG1h Y2hpbmVfbmFtZSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAi SVAiICkgeyRtYWNoaW5lX2lwID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90 eXBlIGVxICJVbmFtZSIgKSB7JG1hY2hpbmVfdW5hbWUgPSAkZmllbGRfZGF0YTt9CiAgICBl bHNpZiggJGZpZWxkX3R5cGUgZXEgIkdlb21ldHJ5IiApIHsgJG1hY2hpbmVfZ2VvbSA9ICRm aWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiRnVsbHNjcmVlbiIgKSB7 JG1hY2hpbmVfZnMgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEg IkJpdG1hcF9VcGRhdGVzIiApIHskbWFjaGluZV9iaXRtYXBfdXBkID0gJGZpZWxkX2RhdGE7 fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJLZXltYXAiICkgeyRtYWNoaW5lX2ttYXAg PSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIk5vUmVxTGljIiAp IHskbWFjaGluZV9saWMgPSAkZmllbGRfZGF0YTt9IAogICAgZWxzaWYoICRmaWVsZF90eXBl IGVxICJQYXNzdGhydSIgKSB7JG1hY2hpbmVfcGFzc3RocnUgPSAkZmllbGRfZGF0YTt9CiAg ICBlbHNlIHtwcmludCAiQmFkIERhdGE6ICRmaWVsZF90eXBlIDogJGZpZWxkX2RhdGFcbiI7 fQoKICAgICMgc3R1ZmYgdGhlIHRoaXJkIGxpbmUgKGhvcGVmdWxseSBVbmFtZSkgaW50byB2 YXJzCiAgICAkcmF3X2RhdGEgPSA8Q09ORklHPjsKICAgIGNob21wICRyYXdfZGF0YTsKICAg ICggJGZpZWxkX3R5cGUsICRmaWVsZF9kYXRhICkgPSBzcGxpdCAvPS8sICRyYXdfZGF0YSwy OwogICAgY2hvbXAgJGZpZWxkX3R5cGU7CiAgICBjaG9tcCAkZmllbGRfZGF0YTsKICAgIGlm KCAkZmllbGRfdHlwZSBlcSAiTmFtZSIgKSB7JG1hY2hpbmVfbmFtZSA9ICRmaWVsZF9kYXRh O30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiSVAiICkgeyRtYWNoaW5lX2lwID0gJGZp ZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJVbmFtZSIgKSB7JG1hY2hp bmVfdW5hbWUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkdl b21ldHJ5IiApIHsgJG1hY2hpbmVfZ2VvbSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAk ZmllbGRfdHlwZSBlcSAiRnVsbHNjcmVlbiIgKSB7JG1hY2hpbmVfZnMgPSAkZmllbGRfZGF0 YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkJpdG1hcF9VcGRhdGVzIiApIHskbWFj aGluZV9iaXRtYXBfdXBkID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBl IGVxICJLZXltYXAiICkgeyRtYWNoaW5lX2ttYXAgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNp ZiggJGZpZWxkX3R5cGUgZXEgIk5vUmVxTGljIiApIHskbWFjaGluZV9saWMgPSAkZmllbGRf ZGF0YTt9IAogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJQYXNzdGhydSIgKSB7JG1hY2hp bmVfcGFzc3RocnUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNlIHtwcmludCAiQmFkIERhdGE6 ICRmaWVsZF90eXBlIDogJGZpZWxkX2RhdGFcbiI7fQoKICAgICMgc3R1ZmYgdGhlIGZvdXJ0 aCBsaW5lIChob3BlZnVsbHkgR2VvbWV0cnkpIGludG8gdmFycwogICAgJHJhd19kYXRhID0g PENPTkZJRz47CiAgICBjaG9tcCAkcmF3X2RhdGE7CiAgICAoICRmaWVsZF90eXBlLCAkZmll bGRfZGF0YSApID0gc3BsaXQgLz0vLCAkcmF3X2RhdGEsMjsKICAgIGNob21wICRmaWVsZF90 eXBlOwogICAgY2hvbXAgJGZpZWxkX2RhdGE7CiAgICBpZiggJGZpZWxkX3R5cGUgZXEgIk5h bWUiICkgeyRtYWNoaW5lX25hbWUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxk X3R5cGUgZXEgIklQIiApIHskbWFjaGluZV9pcCA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lm KCAkZmllbGRfdHlwZSBlcSAiVW5hbWUiICkgeyRtYWNoaW5lX3VuYW1lID0gJGZpZWxkX2Rh dGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJHZW9tZXRyeSIgKSB7ICRtYWNoaW5l X2dlb20gPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkZ1bGxz Y3JlZW4iICkgeyRtYWNoaW5lX2ZzID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVs ZF90eXBlIGVxICJCaXRtYXBfVXBkYXRlcyIgKSB7JG1hY2hpbmVfYml0bWFwX3VwZCA9ICRm aWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiS2V5bWFwIiApIHskbWFj aGluZV9rbWFwID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJO b1JlcUxpYyIgKSB7JG1hY2hpbmVfbGljID0gJGZpZWxkX2RhdGE7fSAKICAgIGVsc2lmKCAk ZmllbGRfdHlwZSBlcSAiUGFzc3RocnUiICkgeyRtYWNoaW5lX3Bhc3N0aHJ1ID0gJGZpZWxk X2RhdGE7fQogICAgZWxzZSB7cHJpbnQgIkJhZCBEYXRhOiAkZmllbGRfdHlwZSA6ICRmaWVs ZF9kYXRhXG4iO30KCiAgICAjIHN0dWZmIHRoZSBmaWZ0aCBsaW5lIChob3BlZnVsbHkgRnVs bHNjcmVlbikgaW50byB2YXJzCiAgICAkcmF3X2RhdGEgPSA8Q09ORklHPjsKICAgIGNob21w ICRyYXdfZGF0YTsKICAgICggJGZpZWxkX3R5cGUsICRmaWVsZF9kYXRhICkgPSBzcGxpdCAv PS8sICRyYXdfZGF0YSwyOwogICAgY2hvbXAgJGZpZWxkX3R5cGU7CiAgICBjaG9tcCAkZmll bGRfZGF0YTsKICAgIGlmKCAkZmllbGRfdHlwZSBlcSAiTmFtZSIgKSB7JG1hY2hpbmVfbmFt ZSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiSVAiICkgeyRt YWNoaW5lX2lwID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJV bmFtZSIgKSB7JG1hY2hpbmVfdW5hbWUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZp ZWxkX3R5cGUgZXEgIkdlb21ldHJ5IiApIHsgJG1hY2hpbmVfZ2VvbSA9ICRmaWVsZF9kYXRh O30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiRnVsbHNjcmVlbiIgKSB7JG1hY2hpbmVf ZnMgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkJpdG1hcF9V cGRhdGVzIiApIHskbWFjaGluZV9iaXRtYXBfdXBkID0gJGZpZWxkX2RhdGE7fQogICAgZWxz aWYoICRmaWVsZF90eXBlIGVxICJLZXltYXAiICkgeyRtYWNoaW5lX2ttYXAgPSAkZmllbGRf ZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIk5vUmVxTGljIiApIHskbWFjaGlu ZV9saWMgPSAkZmllbGRfZGF0YTt9IAogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJQYXNz dGhydSIgKSB7JG1hY2hpbmVfcGFzc3RocnUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNlIHtw cmludCAiQmFkIERhdGE6ICRmaWVsZF90eXBlIDogJGZpZWxkX2RhdGFcbiI7fQoKICAgICMg c3R1ZmYgdGhlIHNpeHRoIGxpbmUgKGhvcGVmdWxseSBCaXRtYXBfVXBkYXRlcykgaW50byB2 YXJzCiAgICAkcmF3X2RhdGEgPSA8Q09ORklHPjsKICAgIGNob21wICRyYXdfZGF0YTsKICAg ICggJGZpZWxkX3R5cGUsICRmaWVsZF9kYXRhICkgPSBzcGxpdCAvPS8sICRyYXdfZGF0YSwy OwogICAgY2hvbXAgJGZpZWxkX3R5cGU7CiAgICBjaG9tcCAkZmllbGRfZGF0YTsKICAgIGlm KCAkZmllbGRfdHlwZSBlcSAiTmFtZSIgKSB7JG1hY2hpbmVfbmFtZSA9ICRmaWVsZF9kYXRh O30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiSVAiICkgeyRtYWNoaW5lX2lwID0gJGZp ZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJVbmFtZSIgKSB7JG1hY2hp bmVfdW5hbWUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkdl b21ldHJ5IiApIHsgJG1hY2hpbmVfZ2VvbSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAk ZmllbGRfdHlwZSBlcSAiRnVsbHNjcmVlbiIgKSB7JG1hY2hpbmVfZnMgPSAkZmllbGRfZGF0 YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkJpdG1hcF9VcGRhdGVzIiApIHskbWFj aGluZV9iaXRtYXBfdXBkID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBl IGVxICJLZXltYXAiICkgeyRtYWNoaW5lX2ttYXAgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNp ZiggJGZpZWxkX3R5cGUgZXEgIk5vUmVxTGljIiApIHskbWFjaGluZV9saWMgPSAkZmllbGRf ZGF0YTt9IAogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJQYXNzdGhydSIgKSB7JG1hY2hp bmVfcGFzc3RocnUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNlIHtwcmludCAiQmFkIERhdGE6 ICRmaWVsZF90eXBlIDogJGZpZWxkX2RhdGFcbiI7fQoKICAgICMgc3R1ZmYgdGhlIHNldmVu dGggbGluZSAoaG9wZWZ1bGx5IEtleW1hcCkgaW50byB2YXJzCiAgICAkcmF3X2RhdGEgPSA8 Q09ORklHPjsKICAgIGNob21wICRyYXdfZGF0YTsKICAgICggJGZpZWxkX3R5cGUsICRmaWVs ZF9kYXRhICkgPSBzcGxpdCAvPS8sICRyYXdfZGF0YSwyOwogICAgY2hvbXAgJGZpZWxkX3R5 cGU7CiAgICBjaG9tcCAkZmllbGRfZGF0YTsKICAgIGlmKCAkZmllbGRfdHlwZSBlcSAiTmFt ZSIgKSB7JG1hY2hpbmVfbmFtZSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRf dHlwZSBlcSAiSVAiICkgeyRtYWNoaW5lX2lwID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYo ICRmaWVsZF90eXBlIGVxICJVbmFtZSIgKSB7JG1hY2hpbmVfdW5hbWUgPSAkZmllbGRfZGF0 YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkdlb21ldHJ5IiApIHsgJG1hY2hpbmVf Z2VvbSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiRnVsbHNj cmVlbiIgKSB7JG1hY2hpbmVfZnMgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxk X3R5cGUgZXEgIkJpdG1hcF9VcGRhdGVzIiApIHskbWFjaGluZV9iaXRtYXBfdXBkID0gJGZp ZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJLZXltYXAiICkgeyRtYWNo aW5lX2ttYXAgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIk5v UmVxTGljIiApIHskbWFjaGluZV9saWMgPSAkZmllbGRfZGF0YTt9IAogICAgZWxzaWYoICRm aWVsZF90eXBlIGVxICJQYXNzdGhydSIgKSB7JG1hY2hpbmVfcGFzc3RocnUgPSAkZmllbGRf ZGF0YTt9CiAgICBlbHNlIHtwcmludCAiQmFkIERhdGE6ICRmaWVsZF90eXBlIDogJGZpZWxk X2RhdGFcbiI7fQoKICAgICMgc3R1ZmYgdGhlIGVpZ2h0aCBsaW5lIChob3BlZnVsbHkgTm9S ZXFMaWMpIGludG8gdmFycwogICAgJHJhd19kYXRhID0gPENPTkZJRz47CiAgICBjaG9tcCAk cmF3X2RhdGE7CiAgICAoICRmaWVsZF90eXBlLCAkZmllbGRfZGF0YSApID0gc3BsaXQgLz0v LCAkcmF3X2RhdGEsMjsKICAgIGNob21wICRmaWVsZF90eXBlOwogICAgY2hvbXAgJGZpZWxk X2RhdGE7CiAgICBpZiggJGZpZWxkX3R5cGUgZXEgIk5hbWUiICkgeyRtYWNoaW5lX25hbWUg PSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIklQIiApIHskbWFj aGluZV9pcCA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlwZSBlcSAiVW5h bWUiICkgeyRtYWNoaW5lX3VuYW1lID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVs ZF90eXBlIGVxICJHZW9tZXRyeSIgKSB7ICRtYWNoaW5lX2dlb20gPSAkZmllbGRfZGF0YTt9 CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkZ1bGxzY3JlZW4iICkgeyRtYWNoaW5lX2Zz ID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJCaXRtYXBfVXBk YXRlcyIgKSB7JG1hY2hpbmVfYml0bWFwX3VwZCA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lm KCAkZmllbGRfdHlwZSBlcSAiS2V5bWFwIiApIHskbWFjaGluZV9rbWFwID0gJGZpZWxkX2Rh dGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJOb1JlcUxpYyIgKSB7JG1hY2hpbmVf bGljID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJQYXNzdGhy dSIgKSB7JG1hY2hpbmVfcGFzc3RocnUgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNlIHtwcmlu dCAiQmFkIERhdGE6ICRmaWVsZF90eXBlIDogJGZpZWxkX2RhdGFcbiI7fQoKICAgICMgc3R1 ZmYgdGhlIG5pbnRoIGxpbmUgKGhvcGVmdWxseSBQYXNzdGhydSkgaW50byB2YXJzCiAgICAk cmF3X2RhdGEgPSA8Q09ORklHPjsKICAgIGNob21wICRyYXdfZGF0YTsKICAgICggJGZpZWxk X3R5cGUsICRmaWVsZF9kYXRhICkgPSBzcGxpdCAvPS8sICRyYXdfZGF0YSwyOwogICAgY2hv bXAgJGZpZWxkX3R5cGU7CiAgICBjaG9tcCAkZmllbGRfZGF0YTsKICAgIGlmKCAkZmllbGRf dHlwZSBlcSAiTmFtZSIgKSB7JG1hY2hpbmVfbmFtZSA9ICRmaWVsZF9kYXRhO30KICAgIGVs c2lmKCAkZmllbGRfdHlwZSBlcSAiSVAiICkgeyRtYWNoaW5lX2lwID0gJGZpZWxkX2RhdGE7 fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJVbmFtZSIgKSB7JG1hY2hpbmVfdW5hbWUg PSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIkdlb21ldHJ5IiAp IHsgJG1hY2hpbmVfZ2VvbSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2lmKCAkZmllbGRfdHlw ZSBlcSAiRnVsbHNjcmVlbiIgKSB7JG1hY2hpbmVfZnMgPSAkZmllbGRfZGF0YTt9CiAgICBl bHNpZiggJGZpZWxkX3R5cGUgZXEgIkJpdG1hcF9VcGRhdGVzIiApIHskbWFjaGluZV9iaXRt YXBfdXBkID0gJGZpZWxkX2RhdGE7fQogICAgZWxzaWYoICRmaWVsZF90eXBlIGVxICJLZXlt YXAiICkgeyRtYWNoaW5lX2ttYXAgPSAkZmllbGRfZGF0YTt9CiAgICBlbHNpZiggJGZpZWxk X3R5cGUgZXEgIk5vUmVxTGljIiApIHskbWFjaGluZV9saWMgPSAkZmllbGRfZGF0YTt9CiAg ICBlbHNpZiggJGZpZWxkX3R5cGUgZXEgIlBhc3N0aHJ1IiApIHskbWFjaGluZV9wYXNzdGhy dSA9ICRmaWVsZF9kYXRhO30KICAgIGVsc2Uge3ByaW50ICJCYWQgRGF0YTogJGZpZWxkX3R5 cGUgOiAkZmllbGRfZGF0YVxuIjt9CgogICAgIyBmaW5hbGx5LCBzdHVmZiBpdCBhbGwgaW50 byB0aGUgaGFzaGVzCiAgICBjaG9tcCAkbWFjaGluZV9uYW1lOwogICAgY2hvbXAgJG1hY2hp bmVfaXA7CiAgICBjaG9tcCAkbWFjaGluZV91bmFtZTsKICAgIGNob21wICRtYWNoaW5lX2dl b207CiAgICBjaG9tcCAkbWFjaGluZV9mczsKICAgIGNob21wICRtYWNoaW5lX2JpdG1hcF91 cGQ7CiAgICBjaG9tcCAkbWFjaGluZV9rbWFwOwogICAgY2hvbXAgJG1hY2hpbmVfcGFzc3Ro cnU7CiAgICAkaXBfaGFzaHskbWFjaGluZV9uYW1lfSA9ICRtYWNoaW5lX2lwOwogICAgJHVu YW1lX2hhc2h7JG1hY2hpbmVfbmFtZX0gPSAkbWFjaGluZV91bmFtZTsKICAgICRnZW9tX2hh c2h7JG1hY2hpbmVfbmFtZX0gPSAkbWFjaGluZV9nZW9tOwogICAgJGZ1bGxzY3JlZW5faGFz aHskbWFjaGluZV9uYW1lfSA9ICRtYWNoaW5lX2ZzOwogICAgJGJpdG1hcF91cGRfaGFzaHsk bWFjaGluZV9uYW1lfSA9ICRtYWNoaW5lX2JpdG1hcF91cGQ7IAogICAgJGxpY2Vuc2VfaGFz aHskbWFjaGluZV9uYW1lfSA9ICRtYWNoaW5lX2xpYzsKICAgICRrbWFwX2hhc2h7JG1hY2hp bmVfbmFtZX0gPSAkbWFjaGluZV9rbWFwOyAKICAgICRwYXNzdGhydV9oYXNoeyRtYWNoaW5l X25hbWV9ID0gJG1hY2hpbmVfcGFzc3RocnU7CiAgfQoKICBjbG9zZSBDT05GSUc7CgogICMg YW5kIGxhc3QsIGJ1dCBub3QgbGVhc3QsIHN0dWZmIGl0IGFsbCBpbnRvIHRoZSBjbGlzdAog IGZvciAobXkgJG49JGluZGV4bWF4LTE7ICRuPj0wOyAkbi0tKQogIHsgCiAgc3BsaWNlIEB7 ICRsaXN0MS0+e2RhdGF9IH0sICRuLCAxOwogIH0gCiAgQG1hY2hpbmVzID0ga2V5cyAlaXBf aGFzaDsKICAkaW5kZXhtYXggPSAwOwogIGZvcmVhY2ggJG1hY2hpbmEgKHNvcnQgQG1hY2hp bmVzKQogIHsKICAgIHB1c2ggQHskbGlzdDEtPntkYXRhfX0sIFskbWFjaGluYSwgJGlwX2hh c2h7JG1hY2hpbmF9LCAkdW5hbWVfaGFzaHskbWFjaGluYX0sICRrbWFwX2hhc2h7JG1hY2hp bmF9LCAkZ2VvbV9oYXNoeyRtYWNoaW5hfSwgJGZ1bGxzY3JlZW5faGFzaHskbWFjaGluYX0s ICRiaXRtYXBfdXBkX2hhc2h7JG1hY2hpbmF9LCAkbGljZW5zZV9oYXNoeyRtYWNoaW5hfSwg JHBhc3N0aHJ1X2hhc2h7JG1hY2hpbmF9IF07CiAgICAkaW5kZXhtYXgrKzsKICB9CiAgCn0K --------------060103000108040102030702--