From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web08.5057.1606966487702982226 for ; Wed, 02 Dec 2020 19:34:48 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=RVnVRp+u; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=0606acebf5=abner.chang@hpe.com) Received: from pps.filterd (m0134425.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0B339PCI024068; Thu, 3 Dec 2020 03:25:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=zGl/rA8BgIUJC3kynMIbU9XJMZMSCpIFkdHCnpMFRh0=; b=RVnVRp+u6qYcnRfMC3FmR71it4saL/xQH6tnVwF+baxe/WmIYdHiO7/li0day5cci1fa PVgMXpkmH79JhrqlXC5ymQ2PS/SyYkz2t75QPQnHcSTfdtjTqakToa98ONpLQsEKmGMW ciS6OsFbXVDDZB0vA73HrKwzBakhu2LtqvCr4h00fVPaH/7E1/KMaAtb6LujavzFwtBI CD7cFHDitFbIxsQq68A5/fTHIr1qqDQXHEsKJ8wNw68/o+Jrxyl5diOz53sDpj39TnZF iK/n4ur9foQtx2UnyvKQFWd3aY8czV1Zv6NXdtZSZi/PaaI7o7tLolJR8L3Q12D26MQA /A== Received: from g4t3426.houston.hpe.com (g4t3426.houston.hpe.com [15.241.140.75]) by mx0b-002e3701.pphosted.com with ESMTP id 355r47paag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 03 Dec 2020 03:25:49 +0000 Received: from G2W6311.americas.hpqcorp.net (g2w6311.austin.hp.com [16.197.64.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3426.houston.hpe.com (Postfix) with ESMTPS id 9FACD63; Thu, 3 Dec 2020 03:25:47 +0000 (UTC) Received: from G4W9330.americas.hpqcorp.net (16.208.32.116) by G2W6311.americas.hpqcorp.net (16.197.64.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 3 Dec 2020 03:25:20 +0000 Received: from G4W10204.americas.hpqcorp.net (2002:10cf:5210::10cf:5210) by G4W9330.americas.hpqcorp.net (2002:10d0:2074::10d0:2074) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 3 Dec 2020 03:25:19 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (15.241.52.11) by G4W10204.americas.hpqcorp.net (16.207.82.16) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 3 Dec 2020 03:25:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hrctQ2zmzvkJ+zswO09bDxs6kN3EWZyDj0JlrCPaZBJHiirLd7uShknHKVoJ5E1bTZvXZyGIwZA0Alm138oY+qIWwyTAsQv3X/f3WBCLpjyTBJSWvB8t6d4KVyaIPcrLVHbIi2PR/riFSj6NfwgqYu+JJVqt6eokbRorLeHwwflqEMnYKXQJAEPKX0Jw7kRyUgMaxZku4i/ijgXAOFAzDswtCGpRCFfu2IiT2vjz4WgnBW0O/eoZDJYYEiyLHULS8yNDQHcFZJcPSJWOMYTyEKwSAFyWm4rNMnYGnHtMQF600zGyi3fjUzbP6q1Rq3BrWRz/C7vuZ4R/hvnsPYC2Hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J+saovV4VOjUnVkMrJV/0yZGGuT1EpyAOFC7I++jaJ8=; b=nvvbSeZbJkjrwVgl9dezYs+wWwz0GmtqH+5A80dCnBFDQNxD5A6MHa5i0Ike3gzEpX6Y5HCkPYHHdv44aLe2Z1C1YQ+06uw08B2pWwP4tWm/GP7ShVxxor/YBKqsMTjIIjz7OQNFcYWVbgjRyoBUYXRBMadP3RH8J19IpKbL9VBJLNdCr8VF08/CzKgrnK7Z6lHOD+wv8Jf6Nspv0jJvLDeNEQY9RIXYzwwkJ6wIarBAzU0C2N7uUiwCgWoSpb2nKIUBFmWt0H+UrRX6eTzCY2YRs8NS7ax8yiQ3cT+mY00felCkFMBMv4Xn9y6Je50kjXXVACogauy0fTwoxDokLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0406.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.25; Thu, 3 Dec 2020 03:25:13 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e%10]) with mapi id 15.20.3611.025; Thu, 3 Dec 2020 03:25:13 +0000 From: "Abner Chang" To: gaoliming , "devel@edk2.groups.io" CC: 'Andrew Fish' , 'Laszlo Ersek' , 'Leif Lindholm' , 'Michael D Kinney' , "Wang, Nickle (HPS SW)" , "O'Hanley, Peter (EXL)" Subject: Re: [edk2-devel] [PATCH v3 2/4] RedfishPkg/library: EDK2 port of jansson library Thread-Topic: [edk2-devel] [PATCH v3 2/4] RedfishPkg/library: EDK2 port of jansson library Thread-Index: AQHWyJJS9TzWHwZaBkmZCsErOpfkganks5HQ Date: Thu, 3 Dec 2020 03:25:13 +0000 Message-ID: References: <20201202071557.4688-1-abner.chang@hpe.com> <20201202071557.4688-3-abner.chang@hpe.com> <002201d6c892$52dcc9b0$f8965d10$@byosoft.com.cn> In-Reply-To: <002201d6c892$52dcc9b0$f8965d10$@byosoft.com.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: byosoft.com.cn; dkim=none (message not signed) header.d=none;byosoft.com.cn; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 7f7c9965-c837-4a9c-efd3-08d8973b0c14 x-ms-traffictypediagnostic: CS1PR8401MB0406: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BP+999vDwfL5nZX+H05rR5vOKNucaHsk4ZBWTOmMoMNzNvnWo4nNkxNA52ho1F/XamS7X8EjxNEghfrg4lr6qPk0mWEEhPbaw7iS3CS04pTf+8ZxA5Omi0k54tzaVlV6SwDWHQd+ZTz4GV5SLI1oAX3odqsvaZWD3GRHrbDNdoAr50Wua7U8wUGkUQnWRYCYspGLeOqqgu5lyxaVljid9847b4zlABUXz8UWBRPrL1yX4iNSFCP1SsZ3WvNjevuSbIOSOnCI58iqLLnh44ty6C3jzKh+5aAX+VwUgXxIERb9mj1YoNRTKTQZjBwkxZMRjRcyOPfe8KtL6AVWxN3S4uzECnyumWl4SF8HZ/MGuLr7o99KJQXrtITf8j6H7MPYm/zZr3a14AtOfu8t4nsMC/Iq4a94ky4OUFU5aTiJexuWt6TtXVprR2vRxEMGKkxEk0gZ0Z0uVT4k9sdwftxrgp39t21p41AjTovH67i5/pZqV5OX5qS5owYJyXUgXxKn+g5yH9LTI6wXEJ5M3F0Z0g== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(136003)(396003)(366004)(376002)(346002)(39860400002)(186003)(86362001)(7696005)(26005)(30864003)(83380400001)(33656002)(5660300002)(19627235002)(53546011)(316002)(66556008)(66446008)(64756008)(9686003)(6506007)(54906003)(76116006)(66476007)(55016002)(66946007)(45080400002)(71200400001)(4326008)(2906002)(52536014)(478600001)(8676002)(110136005)(8936002)(966005)(461764006)(21314003)(2004002)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?gb2312?B?Wm9rdXVYYWdqY05RQmZRc1p4K1J3RjZob0grZGJidmdFc3RKaHYyWE5tSnQy?= =?gb2312?B?MHdHbkNLSXozSmlxTzdLMVRXbUo4bnF4MDU4ekhrQjRBNFNHdlJzeWx3S2Zt?= =?gb2312?B?dE5mMWFTTFlrOUp4cUhkcjg2N2hFU0RrdnlMSUVPUHRNRmJXaWt1T0NkUU13?= =?gb2312?B?b2YyNGFQaFFSUEZqeFI3c0xJc0hLNzBkQnVRUFg2SGJwTDBrY2p0TlkxWVBa?= =?gb2312?B?ekk0UE4wWEZnc1dSeFRTQ0kzMFNyeFZHVW9WVTFJb2RLTEkxZVdiZEdmRkpj?= =?gb2312?B?YVJ5d2hseGNYM01Ed0E0bWNGbGxabGVWN3RkTml5by9acjJRcklhaThkMVV4?= =?gb2312?B?K1hFODh0cHVNa0Y3cjNESS9ZNWxuNmR1Q3BQcllNVmRMYTdxNnN4WmYxZ0tj?= =?gb2312?B?STFCYnk3cU9NMEpZVURITmwwT3Q0ckJOcXhSWmUrSW9ydkhxbzFDV0lyeWFK?= =?gb2312?B?eTYrVjhqZTh2dXdZamV1Um1xYUFDamViWW9VMU9GV3kzczJRNmpDRFZ2dHd5?= =?gb2312?B?NWdjRXFUSDVrblBpVU5aSnJGYVpkL0hOdEt0ZjA4eCtuRmY5OXI4cGZOSVN3?= =?gb2312?B?U2M4b3NKbVVMNUV5TFpBbHp4T0ozdE14UEtsNjZNVWxaVUZuU0h5Y3hDSkdr?= =?gb2312?B?YXphaUEvQ3Rvc3RVUU0xVk9mN1JFUndpQkpYTGF4QzBacmdhTUowOFBaN1lK?= =?gb2312?B?d0Q4Y0Vka2w5UzhaNXcwb2J3Y0xhQXJQRDRoUjVkdUpuaUdWemVRVENCSVBV?= =?gb2312?B?Z1B0NDN6NHhoR1RJVmgxT2hXamRMWVBaOVpCNzRUZkRFN2dYbTJjcjgzczly?= =?gb2312?B?cnJmajFEeEp4TmtIb0EwQlRWaEtramxXcjN6OTdycWtNN253MFlSY0RsM0p5?= =?gb2312?B?czRoSld5MGFkbmxuL0p5OGgwWmVadnBSVEFiVmQ5WHh6UDFYaWxZZmtOVk1F?= =?gb2312?B?TDBqV0lRYnlDWWhvVDhVallNTHZMRW84ajZiOFdXNnc5dllqQWt3cFJKR0Ny?= =?gb2312?B?cUwyNmVzY2J4VlRzVGkrSVltSHRsVzU4UGZmNDBnTEIxR3NNbGZlUzRSWk9P?= =?gb2312?B?dU9Ec2ptaVNnWWVDUVI1N1FleGtSQWhqVmlvVlFpMTR1ZVgycHhIeUVXVmFz?= =?gb2312?B?TmF3VnBmZWZrY2lLYWRjWGJVZ1h2MVVXWkt3Q1VhUHdSZ0g5SnZaNENMTlZK?= =?gb2312?B?a1EvZDBmRkFDRWNBT0ptT3RlNFRwWGFDNE91MmxaUVVIVDRSTUkzcWFyWmJD?= =?gb2312?B?ZVVXWm1yZkl1QVFRcS91SWZtUjBZWndjRkV6Qzl5UlRzUzVidjJ1VGlZM3h0?= =?gb2312?Q?tV3nMb//Sgf6Y=3D?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 7f7c9965-c837-4a9c-efd3-08d8973b0c14 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Dec 2020 03:25:13.2839 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +ry3UZ/XtMV/INbdnwqrO2e7qvhxt2hdb1Aimz7jeByjJKjXNKOcocB8XNfA0YLXF6UbGNwF5OAXiVHaDzF7Eg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0406 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-12-03_01:2020-11-30,2020-12-03 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 adultscore=0 spamscore=0 phishscore=0 mlxscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 suspectscore=0 impostorscore=0 clxscore=1015 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012030018 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZ2FvbGltaW5nIFttYWls dG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuXQ0KPiBTZW50OiBXZWRuZXNkYXksIERlY2VtYmVy IDIsIDIwMjAgNjowMyBQTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IENoYW5nLCBBYm5l ciAoSFBTIFNXL0ZXIFRlY2hub2xvZ2lzdCkNCj4gPGFibmVyLmNoYW5nQGhwZS5jb20+DQo+IENj OiAnQW5kcmV3IEZpc2gnIDxhZmlzaEBhcHBsZS5jb20+OyAnTGFzemxvIEVyc2VrJyA8bGVyc2Vr QHJlZGhhdC5jb20+Ow0KPiAnTGVpZiBMaW5kaG9sbScgPGxlaWZAbnV2aWFpbmMuY29tPjsgJ01p Y2hhZWwgRCBLaW5uZXknDQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFdhbmcsIE5p Y2tsZSAoSFBTIFNXKQ0KPiA8bmlja2xlLndhbmdAaHBlLmNvbT47IE8nSGFubGV5LCBQZXRlciAo RVhMKSA8cGV0ZXIub2hhbmxleUBocGUuY29tPg0KPiBTdWJqZWN0OiC72Li0OiBbZWRrMi1kZXZl bF0gW1BBVENIIHYzIDIvNF0gUmVkZmlzaFBrZy9saWJyYXJ5OiBFREsyIHBvcnQgb2YNCj4gamFu c3NvbiBsaWJyYXJ5DQo+IA0KPiBBYm5lcjoNCj4gICBUaGVyZSBhcmUgdHdvIHNvdXJjZSBmaWxl cyBsb2FkLmMgYW5kIGphbnNzb25fY29uZmlnLmggd2l0aCBNSVQgbGljZW5zZS4gSQ0KPiBzZWUg eW91IGhhdmUgcHJvdmlkZWQgdGhlIGZpeCBmb3IgbG9hZC5jIGluIGphbnNzb24gcHJvamVjdC4g Q2FuIHdlIHdhaXQgZm9yDQo+IHRoZSBmaXggdG8gYmUgbWVyZ2VkIGluIGphbnNzb24gcHJvamVj dD8gRm9yIGphbnNzb25fY29uZmlnLmgsIGl0IGRlZmluZXMNCj4gc29tZSBjb25maWd1cmF0aW9u LiBZb3UgY2FuIHByb3ZpZGUgeW91ciB2ZXJzaW9uLiBJZiBzbywgdGhlcmUgaXMgbm8gc291cmNl DQo+IGZpbGUgd2l0aCBNSVQgbGljZW5zZS4NCg0KWWVzLCBJIHRoaW5rIGl0IHNob3VsZCBiZSBm aW5lIHRvIGNyZWF0ZSBvdXIgb3duIGphbnNzb25fY29uZmlnLmggd2l0aCBlZGsyIGhlYWRlciBv bmx5Lg0KRm9yIHRoZSBsb2FkLmMsIEkgZG9uoa90IHByZWZlciB0byB3YWl0IHVudGlsIHRoZSBw YXRjaCBpcyBtZXJnZWQgdG8gamFuc3NvbiBtYWluc3RyZWFtLiBUaGF0IHdvdWxkIHRha2UgdGlt ZSB0byB3YWl0IGZvciBqYW5zc29uIHByb2plY3QgcGVvcGxlLCB0aGVyZSBhcmUgbm90IG1hbnkg YWN0aXZpdGllcyB0aG91Z2guIEFsc28gd2Ugd2lsbCBoYXZlIHRvIHdhaXQgZm9yIHRoZSBuZXh0 IHJlbGVhc2Ugb2YgamFuc3Nvbi4gVGhhdCB3aWxsIGRlZmluaXRlbHkgYmxvY2sgdGhlIGZvbGxv dyB1cCBlZGsyIGNvZGUgY29udHJpYnV0aW9ucyh3ZSBzdGlsbCBoYXZlIG1hbnkgdG8gZ28pLiBJ IHdvdWxkIGxpa2UgdG8ga2VlcCBsb2FkLmMgYXMgYW4gb3ZlcnJpZGUgZmlsZSBpbiBKc29uTGli IGRpcmVjdG9yeSwgcmVtb3ZlIGl0IG9uY2UgdGhlIG5ldyByZWxlYXNlIG9mICBqYW5zc29uIGlu Y2x1ZGVzIHRoYXQgcGF0Y2guDQoNClllcywgSSB3b3VsZCBsaWtlIHRvIG1vdmUgSmFuc3Nvbkpz b25MaWJNYXBwaW5nIHRvIGp1c3QgdW5kZXIgUmVkZmlzaFBrZy9JbmNsdWRlLiBJIHRoaW5rIEkg Y2FuIHJlbW92ZSB0aGUgYWRkaXRpb25hbCBleGNlcHRpb24gaW4gUmVkZmlzaFBrZyBZQU1MIGZp bGUgZm9yIHRoaXMgaGVhZGVyIGZpbGUgYXMgd2VsbC4NCk90aGVyIGNvbW1lbnRzIHdpbGwgYmUg YWRkcmVzc2VkIGluIHRoZSBuZXh0IHZlcnNpb24gb2YgcGF0Y2ggc2V0Lg0KDQpUaGFua3MNCkFi bmVyDQogDQo+IA0KPiAgIEJlc2lkZXMsIEkgZ2l2ZSBvdGhlciBjb21tZW50cyBhcyBiZWxvdy4g UGxlYXNlIGNoZWNrLg0KPiANCj4gVGhhbmtzDQo+IExpbWluZw0KPiA+IC0tLS0t08q8/tStvP4t LS0tLQ0KPiA+ILeivP7IyzogYm91bmNlKzI3OTUyKzY4MTYzKzQ5MDU5NTMrODc2MTA0NUBncm91 cHMuaW8NCj4gPiA8Ym91bmNlKzI3OTUyKzY4MTYzKzQ5MDU5NTMrODc2MTA0NUBncm91cHMuaW8+ ILT6se0gQWJuZXIgQ2hhbmcNCj4gPiC3osvNyrG85DogMjAyMMTqMTLUwjLI1SAxNToxNg0KPiA+ IMrVvP7IyzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiCzrcvNOiBBbmRyZXcgRmlzaCA8YWZp c2hAYXBwbGUuY29tPjsgTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47DQo+ID4gTGVp ZiBMaW5kaG9sbSA8bGVpZkBudXZpYWluYy5jb20+OyBNaWNoYWVsIEQgS2lubmV5DQo+ID4gPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTmlja2xlIFdhbmcgPG5pY2tsZS53YW5nQGhwZS5j b20+Ow0KPiBQZXRlcg0KPiA+IE8nSGFubGV5IDxwZXRlci5vaGFubGV5QGhwZS5jb20+DQo+ID4g 1vfM4jogW2VkazItZGV2ZWxdIFtQQVRDSCB2MyAyLzRdIFJlZGZpc2hQa2cvbGlicmFyeTogRURL MiBwb3J0IG9mIGphbnNzb24NCj4gPiBsaWJyYXJ5DQo+ID4NCj4gPiBlZGsyIEpzb25MaWIgd2hp Y2ggaXMgdGhlIGVkazIgcG9ydCBvZiBvcGVuIHNvdXJjZQ0KPiA+IGphbnNzb24gbGlicmFyeS4N Cj4gPiAoaHR0cHM6Ly9naXRodWIuY29tL2FraGVyb24vamFuc3NvbikNCj4gPg0KPiA+IFNpZ25l ZC1vZmYtYnk6IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+DQo+ID4gQ2M6 IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+DQo+ID4gQ2M6IExhc3psbyBFcnNlayA8bGVy c2VrQHJlZGhhdC5jb20+DQo+ID4gQ2M6IExlaWYgTGluZGhvbG0gPGxlaWZAbnV2aWFpbmMuY29t Pg0KPiA+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N Cj4gPiBDYzogTmlja2xlIFdhbmcgPG5pY2tsZS53YW5nQGhwZS5jb20+DQo+ID4gQ2M6IFBldGVy IE8nSGFubGV5IDxwZXRlci5vaGFubGV5QGhwZS5jb20+DQo+ID4gLS0tDQo+ID4gIC4uLi9JbmNs dWRlL0xpYnJhcnkvSmFuc3Nvbkpzb25MaWJNYXBwaW5nLmggICB8ICAgNjMgKw0KPiA+ICBSZWRm aXNoUGtnL0luY2x1ZGUvTGlicmFyeS9Kc29uTGliLmggICAgICAgICAgfCAgNzY3ICsrKysrKysr KysrKw0KPiA+ICAuLi4vTGlicmFyeS9Kc29uTGliL0phbnNzb25DcnRMaWJTdXBwb3J0LmMgICAg fCAgNzA1ICsrKysrKysrKysrDQo+ID4gIC4uLi9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExp YlN1cHBvcnQuaCAgICB8ICAxOTYgKysrDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGli L0pzb25MaWIuYyAgICAgICAgICB8ICA5NjAgKysrKysrKysrKysrKysNCj4gPiAgUmVkZmlzaFBr Zy9MaWJyYXJ5L0pzb25MaWIvSnNvbkxpYi5pbmYgICAgICAgIHwgIDEwMyArKw0KPiA+ICBSZWRm aXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9Kc29uVXRpbGl0aWVzLmMgICAgfCAgNDE3ICsrKysrKysN Cj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSnNvblV0aWxpdGllcy5oICAgIHwgICA2 OSArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL1JlYWRtZS50eHQgICAgICAgICB8 ICAgNDAgKw0KPiA+ICBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9hc3NlcnQuaCAgICAgICAg ICAgfCAgIDE2ICsNCj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvZXJybm8uaCAgICAg ICAgICAgIHwgICAxNiArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL2phbnNzb25f Y29uZmlnLmggICB8ICAgNjAgKw0KPiA+ICAuLi4vTGlicmFyeS9Kc29uTGliL2phbnNzb25fcHJp dmF0ZV9jb25maWcuaCAgfCAgIDE5ICsNCj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIv bGltaXRzLmggICAgICAgICAgIHwgICAxNiArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29u TGliL2xvYWQuYyAgICAgICAgICAgICB8IDExMTENCj4gPiArKysrKysrKysrKysrKysrKw0KPiA+ ICBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9tYXRoLmggICAgICAgICAgICAgfCAgIDE2ICsN Cj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3RkYXJnLmggICAgICAgICAgIHwgICAx NSArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0ZGRlZi5oICAgICAgICAgICB8 ICAgMTYgKw0KPiA+ICBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zdGRpby5oICAgICAgICAg ICAgfCAgIDE1ICsNCj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3RkbGliLmggICAg ICAgICAgIHwgICAxNiArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0cmluZy5o ICAgICAgICAgICB8ICAgMTYgKw0KPiA+ICBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zeXMv dGltZS5oICAgICAgICAgfCAgIDE1ICsNCj4gPiAgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIv c3lzL3R5cGVzLmggICAgICAgIHwgICAxNSArDQo+ID4gIFJlZGZpc2hQa2cvTGlicmFyeS9Kc29u TGliL3RpbWUuaCAgICAgICAgICAgICB8ICAgMTUgKw0KPiA+ICBSZWRmaXNoUGtnL1JlZGZpc2hQ a2cuY2kueWFtbCAgICAgICAgICAgICAgICAgfCAgIDMzICstDQo+ID4gIDI1IGZpbGVzIGNoYW5n ZWQsIDQ3MjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgUmVkZmlzaFBrZy9JbmNsdWRlL0xpYnJhcnkvSmFuc3Nvbkpzb25MaWJNYXBwaW5nLmgN Cj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvSW5jbHVkZS9MaWJyYXJ5L0pzb25M aWIuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIv SmFuc3NvbkNydExpYlN1cHBvcnQuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUmVkZmlzaFBr Zy9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExpYlN1cHBvcnQuaA0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSnNvbkxpYi5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9Kc29uTGliLmluZg0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSnNvblV0aWxp dGllcy5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxp Yi9Kc29uVXRpbGl0aWVzLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvTGli cmFyeS9Kc29uTGliL1JlYWRtZS50eHQNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQ a2cvTGlicmFyeS9Kc29uTGliL2Fzc2VydC5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRm aXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9lcnJuby5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBS ZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9qYW5zc29uX2NvbmZpZy5oDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9qYW5zc29uX3ByaXZhdGVfY29u ZmlnLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGli L2xpbWl0cy5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL0xpYnJhcnkvSnNv bkxpYi9sb2FkLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvTGlicmFyeS9K c29uTGliL21hdGguaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUmVkZmlzaFBrZy9MaWJyYXJ5 L0pzb25MaWIvc3RkYXJnLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvTGli cmFyeS9Kc29uTGliL3N0ZGRlZi5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtn L0xpYnJhcnkvSnNvbkxpYi9zdGRpby5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNo UGtnL0xpYnJhcnkvSnNvbkxpYi9zdGRsaWIuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUmVk ZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3RyaW5nLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N5cy90aW1lLmgNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IFJlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N5cy90eXBlcy5oDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi90aW1lLmgNCj4gPg0KPiA+ IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL0luY2x1ZGUvTGlicmFyeS9KYW5zc29uSnNvbkxpYk1h cHBpbmcuaA0KPiA+IGIvUmVkZmlzaFBrZy9JbmNsdWRlL0xpYnJhcnkvSmFuc3Nvbkpzb25MaWJN YXBwaW5nLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAu LjgwNDUyZDY2NjMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9JbmNs dWRlL0xpYnJhcnkvSmFuc3Nvbkpzb25MaWJNYXBwaW5nLmgNCj4gPiBAQCAtMCwwICsxLDYzIEBA DQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIFRoaXMgaXMgdGhlIHdyYXBwZXIgdG8gbWFwIGZ1bmNp dG9ucyBhbmQgZGVmaW5pdGlvbnMgdXNlZCBpbg0KPiA+ICsgIG5hdGl2ZSBqYW5uc29uIGFwcGxp Y2F0aW9ucyB0byBlZGsyIEpzb25MaWIuIFRoaXMgYXZvaWRzIHRoZQ0KPiA+ICsgIG1vZGlmaWNh dGlvbnMgb24gbmF0aXZlIGphbm5zb24gYXBwbGljYXRpb25zIHRvIGJlIGJ1aWx0IHVuZGVyDQo+ ID4gKyAgZWRrMiBlbnZpcm9ubWVudC4NCj4gPiArDQo+ID4gKyAoQykgQ29weXJpZ2h0IDIwMjAg SGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gKw0KPiA+ ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAr DQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBMSUJSRURGSVNIX0pTT05fU1VQUE9SVF9I Xw0KPiA+ICsjZGVmaW5lIExJQlJFREZJU0hfSlNPTl9TVVBQT1JUX0hfDQo+ID4gKw0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9Kc29uTGliLmg+DQo+ID4gKw0KPiA+ICt0eXBlZGVmIEVES0lJX0pT T05fVkFMVUUgICBqc29uX3Q7DQo+ID4gK3R5cGVkZWYgRURLSUlfSlNPTl9JTlRfVCAgIGpzb25f aW50X3Q7DQo+ID4gK3R5cGVkZWYgRURLSUlfSlNPTl9UWVBFICAgIGpzb25fdHlwZTsNCj4gPiAr DQo+IFtMaW1pbmddIERvZXMgbmF0aXZlIGphbm5zb24gYXBwbGljYXRpb25zIGNvbnN1bWUgRURL SUkgc3R5bGUgbWFjcm8/DQo+IEkgc3VnZ2VzdCB0byByZW5hbWUgdGhpcyBmaWxlIGFzIEphbnNz b25Kc29uTWFwcGluZy5oLCBhbmQgbW92ZSBpdCB0bw0KPiBSZWRmaXNoUGtnL0luY2x1ZGUvIGRp cmVjdG9yeS4NCj4gSXQgaXMgdGhlIG5vcm1hbCBoZWFkZXIgZmlsZSwgbm90IGxpYnJhcnkgaGVh ZGVyIGZpbGUuDQo+IA0KPiA+ICsvLy8NCj4gPiArLy8vIEpTT04gdHlwZSBtYXBwaW5nDQo+ID4g Ky8vLw0KPiA+ICsjZGVmaW5lIEpTT05fT0JKRUNUICAgIEVka2lpSnNvblR5cGVPYmplY3QNCj4g PiArI2RlZmluZSBKU09OX0FSUkFZICAgICBFZGtpaUpzb25UeXBlQXJyYXkNCj4gPiArI2RlZmlu ZSBKU09OX1NUUklORyAgICBFZGtpaUpzb25UeXBlU3RyaW5nDQo+ID4gKyNkZWZpbmUgSlNPTl9J TlRFR0VSICAgRWRraWlKc29uVHlwZUludGVnZXINCj4gPiArI2RlZmluZSBKU09OX1JFQUwgICAg ICBFZGtpaUpzb25UeXBlUmVhbA0KPiA+ICsjZGVmaW5lIEpTT05fVFJVRSAgICAgIEVka2lpSnNv blR5cGVUcnVlDQo+ID4gKyNkZWZpbmUgSlNPTl9GQUxTRSAgICAgRWRraWlKc29uVHlwZUZhbHNl DQo+ID4gKyNkZWZpbmUgSlNPTl9OVUxMICAgICAgRWRraWlKc29uVHlwZU51bGwNCj4gPiArDQo+ ID4gKyNkZWZpbmUgSlNPTl9JTkRFTlQobikgRURLSUlfSlNPTl9JTkRFTlQobikNCj4gPiArDQo+ ID4gKy8vLw0KPiA+ICsvLy8gSlNPTiBmdW5jdGlvbiBtYXBwaW5nDQo+ID4gKy8vLw0KPiA+ICsj ZGVmaW5lIGpzb25fb2JqZWN0X2dldChKc29uT2JqLGtleSkNCj4gPiBKc29uT2JqZWN0R2V0VmFs dWUoSnNvbk9iaixrZXkpDQo+ID4gKyNkZWZpbmUganNvbl9pc19vYmplY3QoSnNvblZhbHVlKQ0K PiA+IEpzb25WYWx1ZUlzT2JqZWN0KEpzb25WYWx1ZSkNCj4gPiArI2RlZmluZSBqc29uX2lzX2Fy cmF5KEpzb25WYWx1ZSkNCj4gPiBKc29uVmFsdWVJc0FycmF5KEpzb25WYWx1ZSkNCj4gPiArI2Rl ZmluZSBqc29uX2lzX3N0cmluZyhKc29uVmFsdWUpDQo+ID4gSnNvblZhbHVlSXNTdHJpbmcoSnNv blZhbHVlKQ0KPiA+ICsjZGVmaW5lIGpzb25faW50ZWdlcihKc29uVmFsdWUpDQo+ID4gSnNvblZh bHVlSW5pdE51bWJlcihKc29uVmFsdWUpDQo+ID4gKyNkZWZpbmUganNvbl9vYmplY3Rfc2V0KEpz b25PYmosS2V5LEpzb25WYWx1ZSkNCj4gPiBKc29uT2JqZWN0U2V0VmFsdWUoSnNvbk9iaixLZXks SnNvblZhbHVlKQ0KPiA+ICsjZGVmaW5lIGpzb25fb2JqZWN0KCkNCj4gPiBKc29uVmFsdWVJbml0 T2JqZWN0KCkNCj4gPiArI2RlZmluZSBqc29uX29iamVjdF9zaXplKEpzb25PYmplY3QpDQo+ID4g SnNvbk9iamVjdFNpemUoSnNvbk9iamVjdCkNCj4gPiArI2RlZmluZSBqc29uX2FycmF5X2dldChK c29uQXJyYXksSW5kZXgpDQo+ID4gSnNvbkFycmF5R2V0VmFsdWUoSnNvbkFycmF5LEluZGV4KQ0K PiA+ICsjZGVmaW5lIGpzb25fYXJyYXlfYXBwZW5kKEpzb25BcnJheSxKc29uVmFsdWUpDQo+ID4g SnNvbkFycmF5QXBwZW5kVmFsdWUoSnNvbkFycmF5LEpzb25WYWx1ZSkNCj4gPiArI2RlZmluZSBq c29uX2R1bXBzKEpzb25WYWx1ZSxGbGFncykNCj4gPiBKc29uRHVtcFN0cmluZyhKc29uVmFsdWUs RmxhZ3MpDQo+ID4gKyNkZWZpbmUganNvbl9zdHJpbmdfdmFsdWUoSnNvblZhbHVlKQ0KPiA+IEpz b25WYWx1ZUdldFN0cmluZyhKc29uVmFsdWUpDQo+ID4gKyNkZWZpbmUganNvbl9hcnJheV9zaXpl KEpzb25BcnJheSkNCj4gPiBKc29uQXJyYXlDb3VudChKc29uQXJyYXkpDQo+ID4gKyNkZWZpbmUg anNvbl9hcnJheSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKc29uVmFsdWVJbml0QXJy YXkoKQ0KPiA+ICsjZGVmaW5lIGpzb25fbG9hZGIoQnVmZmVyLEJ1ZmZlckxlbixGbGFncyxFcnJv cikNCj4gPiBKc29uTG9hZEJ1ZmZlcihCdWZmZXIsQnVmZmVyTGVuLEZsYWdzLEVycm9yKQ0KPiA+ ICsjZGVmaW5lIGpzb25fZGVjcmVmKEpzb25WYWx1ZSkNCj4gPiBKc29uRGVjcmVhc2VSZWZlcmVu Y2UoSnNvblZhbHVlKQ0KPiA+ICsjZGVmaW5lIGpzb25faW5jcmVmKEpzb25WYWx1ZSkNCj4gPiBK c29uSW5jcmVhc2VSZWZlcmVuY2UoSnNvblZhbHVlKQ0KPiA+ICsjZGVmaW5lIGpzb25fc3RyaW5n KEFzY2lpU3RyaW5nKQ0KPiA+IEpzb25WYWx1ZUluaXRBc2NpaVN0cmluZyhBc2NpaVN0cmluZykN Cj4gPiArI2RlZmluZSBqc29uX29iamVjdF9pdGVyKEpzb25WYWx1ZSkNCj4gPiBKc29uT2JqZWN0 SXRlcmF0b3IoSnNvblZhbHVlKQ0KPiA+ICsjZGVmaW5lIGpzb25fb2JqZWN0X2l0ZXJfdmFsdWUo SXRlcmF0b3IpDQo+ID4gSnNvbk9iamVjdEl0ZXJhdG9yVmFsdWUoSXRlcmF0b3IpDQo+ID4gKyNk ZWZpbmUganNvbl9vYmplY3RfaXRlcl9uZXh0KEpzb25WYWx1ZSxJdGVyYXRvcikNCj4gPiBKc29u T2JqZWN0SXRlcmF0b3JOZXh0KEpzb25WYWx1ZSxJdGVyYXRvcikNCj4gPiArI2RlZmluZSBqc29u X2ludGVnZXJfdmFsdWUoSnNvblZhbHVlKQ0KPiA+IEpzb25WYWx1ZUdldE51bWJlcihKc29uVmFs dWUpDQo+ID4gKyNkZWZpbmUganNvbl9nZXRfdHlwZShKc29uVmFsdWUpDQo+ID4gSnNvbkdldFR5 cGUoSnNvblZhbHVlKQ0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZp c2hQa2cvSW5jbHVkZS9MaWJyYXJ5L0pzb25MaWIuaA0KPiA+IGIvUmVkZmlzaFBrZy9JbmNsdWRl L0xpYnJhcnkvSnNvbkxpYi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwLi5hZGFkY2JmMzNmDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZp c2hQa2cvSW5jbHVkZS9MaWJyYXJ5L0pzb25MaWIuaA0KPiA+IEBAIC0wLDAgKzEsNzY3IEBADQo+ ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEFQSXMgZm9yIEpTT04gb3BlcmF0aW9ucy4NCj4gPiArDQo+ ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ID4gKyAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVu dGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsj aWZuZGVmIEpTT05fTElCX0hfDQo+ID4gKyNkZWZpbmUgSlNPTl9MSUJfSF8NCj4gPiArDQo+ID4g KyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVt b3J5TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4gPiArDQo+IA0KPiBbTGltaW5nXSBEb24ndCBuZWVkIHRvIGluY2x1ZGUgdGhvc2UgaGVhZGVy IGZpbGUgaW4gdGhlIGxpYnJhcnkgaGVhZGVyIGZpbGUuDQo+IA0KPiANCj4gVGhhbmtzDQo+IExp bWluZw0KPiA+ICt0eXBlZGVmICAgIFZPSUQqICAgIEVES0lJX0pTT05fVkFMVUU7DQo+ID4gK3R5 cGVkZWYgICAgVk9JRCogICAgRURLSUlfSlNPTl9BUlJBWTsNCj4gPiArdHlwZWRlZiAgICBWT0lE KiAgICBFREtJSV9KU09OX09CSkVDVDsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gTWFwIHRv IGpzb25faW50X3QgaW4gamFuc3Nvbi5oDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIGxvbmcgbG9u ZyAgIEVES0lJX0pTT05fSU5UX1Q7ICAvLw0KPiA+ICNKU09OX0lOVEVHRVJfSVNfTE9OR19MT05H IGlzIHNldCB0byAxDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIGluIGphbnNzb25fQ29uZmlnLmgNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gIE1hcCB0 byB0aGUgZGVmaW5pdGlvbnMgaW4gamFuc3Nvbi5oDQo+ID4gKy8vLw0KPiA+ICsjZGVmaW5lIEVE S0lJX0pTT05fTUFYX0lOREVOVCAgICAgICAgMHgxZg0KPiA+ICsjZGVmaW5lIEVES0lJX0pTT05f SU5ERU5UKG4pICAgICAgICAgKChuKSZFREtJSV9KU09OX01BWF9JTkRFTlQpDQo+ID4gKyNkZWZp bmUgRURLSUlfSlNPTl9DT01QQUNUICAgICAgICAgICAweDIwDQo+ID4gKyNkZWZpbmUgRURLSUlf SlNPTl9FTlNVUkVfQVNDSUkgICAgICAweDQwDQo+ID4gKyNkZWZpbmUgRURLSUlfSlNPTl9TT1JU X0tFWVMgICAgICAgICAweDgwDQo+ID4gKyNkZWZpbmUgRURLSUlfSlNPTl9QUkVTRVJWRV9PUkRF UiAgICAweDEwMA0KPiA+ICsjZGVmaW5lIEVES0lJX0pTT05fRU5DT0RFX0FOWSAgICAgICAgMHgy MDANCj4gPiArI2RlZmluZSBFREtJSV9KU09OX0VTQ0FQRV9TTEFTSCAgICAgIDB4NDAwDQo+ID4g KyNkZWZpbmUgRURLSUlfSlNPTl9SRUFMX1BSRUNJU0lPTihuKSAoKChuKSYweDFGKSA8PCAxMSkN Cj4gPiArI2RlZmluZSBFREtJSV9KU09OX0VNQkVEICAgICAgICAgICAgIDB4MTAwMDANCj4gPiAr DQo+ID4gKyNkZWZpbmUgRURLSUlfSlNPTl9BUlJBWV9GT1JFQUNIKEFycmF5LCBJbmRleCwgVmFs dWUpIFwNCj4gPiArICBmb3IoSW5kZXggPSAwOyBcDQo+ID4gKyAgICBJbmRleCA8IEpzb25BcnJh eUNvdW50KEFycmF5KSAmJiAoVmFsdWUgPSBKc29uQXJyYXlHZXRWYWx1ZShBcnJheSwNCj4gPiBJ bmRleCkpOyBcDQo+ID4gKyAgICBJbmRleCsrKQ0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyAg TWFwIHRvIHRoZSBqc29uX2Vycm9yX3QgaW4gamFuc3Nvbi5oDQo+ID4gKy8vLw0KPiA+ICsjZGVm aW5lIEVES0lJX0pTT05fRVJST1JfVEVYVF9MRU5HVEggICAxNjANCj4gPiArI2RlZmluZSBFREtJ SV9KU09OX0VSUk9SX1NPVVJDRV9MRU5HVEggODANCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgICAgSU5UTiAgICBMaW5lOw0KPiA+ICsgICAgSU5UTiAgICBDb2x1bW47DQo+ID4gKyAgICBJ TlROICAgIFBvc2l0aW9uOw0KPiA+ICsgICAgQ0hBUjggICBTb3VyY2UgW0VES0lJX0pTT05fRVJS T1JfU09VUkNFX0xFTkdUSF07DQo+ID4gKyAgICBDSEFSOCAgIFRleHQgW0VES0lJX0pTT05fRVJS T1JfVEVYVF9MRU5HVEhdOw0KPiA+ICt9IEVES0lJX0pTT05fRVJST1I7DQo+ID4gKw0KPiA+ICsv Ly8NCj4gPiArLy8vICBNYXAgdG8gdGhlIGpzb25fdHlwZSBpbiBqYW5zc29uLmgNCj4gPiArLy8v DQo+ID4gK3R5cGVkZWYgZW51bSB7DQo+ID4gKyAgICBFZGtpaUpzb25UeXBlT2JqZWN0LA0KPiA+ ICsgICAgRWRraWlKc29uVHlwZUFycmF5LA0KPiA+ICsgICAgRWRraWlKc29uVHlwZVN0cmluZywN Cj4gPiArICAgIEVka2lpSnNvblR5cGVJbnRlZ2VyLA0KPiA+ICsgICAgRWRraWlKc29uVHlwZVJl YWwsDQo+ID4gKyAgICBFZGtpaUpzb25UeXBlVHJ1ZSwNCj4gPiArICAgIEVka2lpSnNvblR5cGVG YWxzZSwNCj4gPiArICAgIEVka2lpSnNvblR5cGVOdWxsDQo+ID4gK30gRURLSUlfSlNPTl9UWVBF Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVy dCBhIE5VTEwgdGVybWluYXRlZCBVVEY4IGVuY29kZWQgc3RyaW5nDQo+IHRvDQo+ID4gYSBKU09O DQo+ID4gKyAgdmFsdWUuIE9ubHkgb2JqZWN0IGFuZCBhcnJheSByZXByZXNlbnRlZCBzdHJpbmdz IGNhbiBiZSBjb252ZXJ0ZWQNCj4gPiBzdWNjZXNzZnVsbHksDQo+ID4gKyAgc2luY2UgdGhleSBh cmUgdGhlIG9ubHkgdmFsaWQgcm9vdCB2YWx1ZXMgb2YgYSBKU09OIHRleHQgZm9yIFVFRkkNCj4g dXNhZ2UuDQo+ID4gKw0KPiA+ICsgIFJlYWwgbnVtYmVyIGFuZCBudW1iZXIgd2l0aCBleHBvbmVu dCBwYXJ0IGFyZSBub3Qgc3VwcG9ydHRlZCBieSBVRUZJLg0KPiA+ICsNCj4gPiArICBDYWxsZXIg bmVlZHMgdG8gY2xlYW51cCB0aGUgcm9vdCB2YWx1ZSBieSBjYWxsaW5nIEpzb25WYWx1ZUZyZWUo KS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIFRleHQgICAgICAgICAgICAgVGhlIE5VTEwg dGVybWluYXRlZCBVVEY4IGVuY29kZWQNCj4gPiBzdHJpbmcgdG8gY29udmVydA0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICAgQXJyYXkgSlNPTiB2YWx1ZSBvciBvYmplY3QgSlNPTiB2YWx1ZSwg b3IgTlVMTCB3aGVuIGFueQ0KPiA+IGVycm9yIG9jY3Vycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtUZXh0VG9Kc29uICgNCj4gPiAr ICBJTiAgICBDSEFSOCogICAgVGV4dA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBKU09OIHJvb3QgdmFsdWUgdG8g YSBVVEY4IGVuY29kZWQNCj4gPiBzdHJpbmcgd2hpY2gNCj4gPiArICBpcyB0ZXJtaW5hdGVkIGJ5 IE5VTEwsIG9yIHJldHVybiBOVUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArICBPbmx5IGFycmF5 IEpTT04gdmFsdWUgb3Igb2JqZWN0IEpTT04gdmFsdWUgaXMgdmFsaWQgZm9yIGNvbnZlcnRpbmcs IGFuZA0KPiA+IGNhbGxlciBpcw0KPiA+ICsgIHJlc3BvbnNpYmxlIGZvciBmcmVlIGNvbnZlcnRl ZCBzdHJpbmcuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgICAg VGhlIEpTT04gdmFsdWUgdG8gYmUgY29udmVydGVkDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAg ICBUaGUgSlNPTiB2YWx1ZSBjb252ZXJ0ZWQgVVRGOCBzdHJpbmcgb3IgTlVMTC4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtDSEFSOCoNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25Ub1RleHQgKA0KPiA+ ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEgSlNPTiB2 YWx1ZSB3aGljaCBjb250YWlucyBhIG5ldw0KPiBKU09ODQo+ID4gYXJyYXksDQo+ID4gKyAgb3Ig TlVMTCBvbiBlcnJvci4gSW5pdGlhbGx5LCB0aGUgYXJyYXkgaXMgZW1wdHkuDQo+ID4gKw0KPiA+ ICsgIFRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byAxLCBh bmQgY2FsbGVyIG5lZWRzIHRvDQo+ID4gY2xlYW51cCB0aGUNCj4gPiArICB2YWx1ZSBieSBjYWxs aW5nIEpzb25WYWx1ZUZyZWUoKS4NCj4gPiArDQo+ID4gKyAgTW9yZSBkZXRhaWxzIGZvciByZWZl cmVuY2UgY291bnQgc3RyYXRlZ3kgY2FuIHJlZmVyIHRvIHRoZSBBUEkNCj4gZGVzY3JpcHRpb24N Cj4gPiBmb3IgSnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgVGhl IGNyZWF0ZWQgSlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBhIEpTT04gYXJyYXkgb3INCj4gPiBO VUxMLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4gPiArRUZJQVBJ DQo+ID4gK0pzb25WYWx1ZUluaXRBcnJheSAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEg SlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBhIG5ldw0KPiBKU09ODQo+ID4gb2JqZWN0LA0KPiA+ ICsgIG9yIE5VTEwgb24gZXJyb3IuIEluaXRpYWxseSwgdGhlIG9iamVjdCBpcyBlbXB0eS4NCj4g PiArDQo+ID4gKyAgVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIHZhbHVlIHdpbGwgYmUgc2V0 IHRvIDEsIGFuZCBjYWxsZXIgbmVlZHMgdG8NCj4gPiBjbGVhbnVwIHRoZQ0KPiA+ICsgIHZhbHVl IGJ5IGNhbGxpbmcgSnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBNb3JlIGRldGFpbHMg Zm9yIHJlZmVyZW5jZSBjb3VudCBzdHJhdGVneSBjYW4gcmVmZXIgdG8gdGhlIEFQSQ0KPiBkZXNj cmlwdGlvbg0KPiA+IGZvciBKc29uVmFsdWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg ICAgICBUaGUgY3JlYXRlZCBKU09OIHZhbHVlIHdoaWNoIGNvbnRhaW5zIGEgSlNPTiBvYmplY3Qg b3INCj4gPiBOVUxMLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4g PiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUluaXRPYmplY3QgKA0KPiA+ICsgIFZPSUQNCj4gPiAr ICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5p dGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IHN0 cmluZywNCj4gPiArICBvciBOVUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArICBUaGUgaW5wdXQg c3RyaW5nIG11c3QgYmUgTlVMTCB0ZXJtaW5hdGVkIEFzY2lpIGZvcm1hdCwgbm9uLUFzY2lpDQo+ ID4gY2hhcmFjdGVycyB3aWxsDQo+ID4gKyAgYmUgcHJvY2Vzc2VkIGFzIGFuIGVycm9yLiBVbmlj b2RlIGNoYXJhY3RlcnMgY2FuIGFsc28gYmUgcmVwcmVzZW50ZWQgYnkNCj4gPiBBc2NpaSBzdHJp bmcNCj4gPiArICBhcyB0aGUgZm9ybWF0OiBcdSArIDQgaGV4YWRlY2ltYWwgZGlnaXRzLCBsaWtl IFx1M0U1QSwgb3IgXHUwMDNGLg0KPiA+ICsNCj4gPiArICBUaGUgcmVmZXJlbmNlIGNvdW50IG9m IHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gMSwgYW5kIGNhbGxlciBuZWVkcyB0bw0KPiA+IGNs ZWFudXAgdGhlDQo+ID4gKyAgdmFsdWUgYnkgY2FsbGluZyBKc29uVmFsdWVGcmVlKCkuDQo+ID4g Kw0KPiA+ICsgIE1vcmUgZGV0YWlscyBmb3IgcmVmZXJlbmNlIGNvdW50IHN0cmF0ZWd5IGNhbiBy ZWZlciB0byB0aGUgQVBJDQo+IGRlc2NyaXB0aW9uDQo+ID4gZm9yIEpzb25WYWx1ZUZyZWUoKS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIFN0cmluZyAgICAgIFRoZSBBc2NpaSBzdHJpbmcg dG8gaW5pdGlhbGl6ZSB0byBKU09OIHZhbHVlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBU aGUgY3JlYXRlZCBKU09OIHZhbHVlIHdoaWNoIGNvbnRhaW5zIGEgSlNPTiBzdHJpbmcgb3INCj4g PiBOVUxMLiBTZWxlY3QgYQ0KPiA+ICsgICAgICAgICAgICAgICBHZXR0ZXIgQVBJIGZvciBhIHNw ZWNpZmljIGVuY29kaW5nIGZvcm1hdC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9KU09O X1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJbml0QXNjaWlTdHJpbmcgKA0KPiA+ ICsgIElOICAgIENPTlNUIENIQVI4ICAgICpTdHJpbmcNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFs dWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IHN0cmluZywNCj4gPiArICBvciBO VUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArICBUaGUgaW5wdXQgbXVzdCBiZSBhIE5VTEwgdGVy bWluYXRlZCBVQ1MyIGZvcm1hdCBVbmljb2RlIHN0cmluZy4NCj4gPiArDQo+ID4gKyAgVGhlIHJl ZmVyZW5jZSBjb3VudCBvZiB0aGlzIHZhbHVlIHdpbGwgYmUgc2V0IHRvIDEsIGFuZCBjYWxsZXIg bmVlZHMgdG8NCj4gPiBjbGVhbnVwIHRoZQ0KPiA+ICsgIHZhbHVlIGJ5IGNhbGxpbmcgSnNvblZh bHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBNb3JlIGRldGFpbHMgZm9yIHJlZmVyZW5jZSBjb3Vu dCBzdHJhdGVneSBjYW4gcmVmZXIgdG8gdGhlIEFQSQ0KPiBkZXNjcmlwdGlvbg0KPiA+IGZvciBK c29uVmFsdWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBTdHJpbmcgICAgICBU aGUgVW5pY29kZSBzdHJpbmcgdG8gaW5pdGlhbGl6ZSB0byBKU09OIHZhbHVlDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgICAgICBUaGUgY3JlYXRlZCBKU09OIHZhbHVlIHdoaWNoIGNvbnRhaW5zIGEg SlNPTiBzdHJpbmcgb3INCj4gPiBOVUxMLiBTZWxlY3QgYQ0KPiA+ICsgICAgICAgICAgICAgICBH ZXR0ZXIgQVBJIGZvciBhIHNwZWNpZmljIGVuY29kaW5nIGZvcm1hdC4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJbml0 VW5pY29kZVN0cmluZyAoDQo+ID4gKyAgSU4gICAgQ0hBUjE2ICAgICpTdHJpbmcNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlh bGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IGludGVn ZXIsDQo+ID4gKyAgb3IgTlVMTCBvbiBlcnJvci4NCj4gPiArDQo+ID4gKyAgVGhlIHJlZmVyZW5j ZSBjb3VudCBvZiB0aGlzIHZhbHVlIHdpbGwgYmUgc2V0IHRvIDEsIGFuZCBjYWxsZXIgbmVlZHMg dG8NCj4gPiBjbGVhbnVwIHRoZQ0KPiA+ICsgIHZhbHVlIGJ5IGNhbGxpbmcgSnNvblZhbHVlRnJl ZSgpLg0KPiA+ICsNCj4gPiArICBNb3JlIGRldGFpbHMgZm9yIHJlZmVyZW5jZSBjb3VudCBzdHJh dGVneSBjYW4gcmVmZXIgdG8gdGhlIEFQSQ0KPiBkZXNjcmlwdGlvbg0KPiA+IGZvciBKc29uVmFs dWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBWYWx1ZSAgICAgICBUaGUgaW50 ZWdlciB0byBpbml0aWFsaXplIHRvIEpTT04gdmFsdWUNCj4gPiArDQo+ID4gKyAgQHJldHZhbCAg ICAgIFRoZSBjcmVhdGVkIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBKU09OIG51bWJlciBv cg0KPiA+IE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSW5pdE51bWJlciAoDQo+ID4gKyAgSU4gICAgSU5UNjQg ICAgVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9u IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBuZXcN Cj4gSlNPTg0KPiA+IGJvb2xlYW4sDQo+ID4gKyAgb3IgTlVMTCBvbiBlcnJvci4NCj4gPiArDQo+ ID4gKyAgQm9vbGVhbiBKU09OIHZhbHVlIGlzIGtlcHQgYXMgc3RhdGljIHZhbHVlLCBhbmQgbm8g bmVlZCB0byBkbyBhbnkNCj4gY2xlYW51cA0KPiA+IHdvcmsuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gICBWYWx1ZSAgICAgICBUaGUgYm9vbGVhbiB2YWx1ZSB0byBpbml0aWFsaXplLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsICAgICAgVGhlIGNyZWF0ZWQgSlNPTiB2YWx1ZSB3aGljaCBjb250 YWlucyBhIEpTT04gYm9vbGVhbiBvcg0KPiA+IE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSW5pdEJvb2xlYW4g KA0KPiA+ICsgIElOICAgIEJPT0xFQU4gICAgVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFs dWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IE5VTEwsDQo+ID4gKyAgb3IgTlVM TCBvbiBlcnJvci4NCj4gPiArDQo+ID4gKyAgTlVMTCBKU09OIHZhbHVlIGlzIGtlcHQgYXMgc3Rh dGljIHZhbHVlLCBhbmQgbm8gbmVlZCB0byBkbyBhbnkgY2xlYW51cA0KPiA+IHdvcmsuDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgICAgICBUaGUgY3JlYXRlZCBOVUxMIEpTT04gdmFsdWUuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNv blZhbHVlSW5pdE51bGwgKA0KPiA+ICsgIFZPSUQNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBj b3VudCBvZiBhIEpTT04gdmFsdWUgYnkNCj4gPiBvbmUsIGFuZCBvbmNlDQo+ID4gKyAgdGhpcyBy ZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVybywgdGhlIHZhbHVlIGlzIGRlc3Ryb3llZCBhbmQg aXQgY2FuDQo+IG5vDQo+ID4gbG9uZ2VyIGJlIHVzZWQuDQo+ID4gKyAgSWYgdGhpcyBkZXN0cm95 ZWQgdmFsdWUgaXMgb2JqZWN0IHR5cGUgb3IgYXJyYXkgdHlwZSwgcmVmZXJlbmNlIGNvdW50cw0K PiBmb3IgYWxsDQo+ID4gY29udGFpbmluZw0KPiA+ICsgIEpTT04gdmFsdWVzIHdpbGwgYmUgZGVj cmVhc2VkIGJ5IDEuIEJvb2xlYW4gSlNPTiB2YWx1ZSBhbmQgTlVMTCBKU09ODQo+ID4gdmFsdWUg d29uJ3QgYmUgZGVzdHJveWVkDQo+ID4gKyAgc2luY2UgdGhleSBhcmUgc3RhdGljIHZhbHVlcyBr ZXB0IGluIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgUmVmZXJlbmNlIENvdW50IFN0cmF0ZWd5OiBC YXNlSnNvbkxpYiB1c2VzIHRoaXMgc3RyYXRlZ3kgdG8gdHJhY2sNCj4gd2hldGhlcg0KPiA+IGEg dmFsdWUgaXMgc3RpbGwNCj4gPiArICBpbiB1c2Ugb3Igbm90LiBXaGVuIGEgdmFsdWUgaXMgY3Jl YXRlZCwgaXQncyByZWZlcmVuY2UgY291bnQgaXMgc2V0IHRvDQo+IDEuIElmIGENCj4gPiByZWZl cmVuY2UgdG8gYQ0KPiA+ICsgIHZhbHVlIGlzIGtlcHQgZm9yIHVzZSwgaXRzIHJlZmVyZW5jZSBj b3VudCBpcyBpbmNyZW1lbnRlZCwgYW5kIHdoZW4gdGhlDQo+ID4gdmFsdWUgaXMgbm8gbG9uZ2Vy DQo+ID4gKyAgbmVlZGVkLCB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkLiBXaGVu IHRoZSByZWZlcmVuY2UNCj4gY291bnQNCj4gPiBkcm9wcyB0byB6ZXJvLCB0aGVyZSBhcmUNCj4g PiArICBubyByZWZlcmVuY2VzIGxlZnQsIGFuZCB0aGUgdmFsdWUgY2FuIGJlIGRlc3Ryb3llZC4N Cj4gPiArDQo+ID4gKyAgVGhlIGdpdmVuIEpTT04gdmFsdWUgbWF5YmUgTlVMTCBhbmQgbm90IGNh dXNpbmcgYW55IHByb2JsZW0uIEp1c3QNCj4gPiBvdXRwdXQgdGhlIGRlYnVnIG1lc3NhZ2UNCj4g PiArICB0byBpbmZvcm0gY2FsbGVyIHRoZSBOVUxMIHZhbHVlIGlzIHBhc3NlZCBpbi4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgdG8g YmUgZnJlZWQuDQo+ID4ganNvbl9kZWNyZWYgbWF5IHJldHVybiB3aXRob3V0IGFueQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgaWYgSnNvbiBpcyBOVUxMLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUZy ZWUgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBm cmVzaCBjb3B5IG9mIGEgSlNPTiB2YWx1ZSwgYW5kIGFsbA0KPiBjaGlsZA0KPiA+IHZhbHVlcyBh cmUgZGVlcA0KPiA+ICsgIGNvcGllZCBpbiBhIHJlY3Vyc2l2ZSBmYXNoaW9uLiBJdCBzaG91bGQg YmUgY2FsbGVkIHdoZW4gdGhpcyBKU09OIHZhbHVlDQo+ID4gbWlnaHQgYmUgbW9kaWZpZWQNCj4g PiArICBpbiBsYXRlciB1c2UsIGJ1dCB0aGUgb3JpZ2luYWwgc3RpbGwgd2FudHMgdG8gYmUgdXNl ZCBpbiBzb21ld2hlcmUNCj4gZWxzZS4NCj4gPiArDQo+ID4gKyAgUmVmZXJlbmNlIGNvdW50cyBv ZiB0aGUgcmV0dXJuZWQgcm9vdCBKU09OIHZhbHVlIGFuZCBhbGwgY2hpbGQgdmFsdWVzDQo+IHdp bGwNCj4gPiBiZSBzZXQgdG8gMSwgYW5kDQo+ID4gKyAgY2FsbGVyIG5lZWRzIHRvIGNsZWFudXAg dGhlIHJvb3QgdmFsdWUgYnkgY2FsbGluZyBKc29uVmFsdWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsg ICogTm90ZTogU2luY2UgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGNvcHkgZnJvbSBib3R0b20g dG8gdXAsIHRvbyBtYW55DQo+ID4gY2FsbHMgbWF5IGNhdXNlIHNvbWUNCj4gPiArICBwZXJmb3Jt YW5jZSBpc3N1ZXMsIHVzZXIgc2hvdWxkIGF2b2lkIHVubmVjZXNzYXJ5IGNhbGxzIHRvIHRoaXMN Cj4gZnVuY3Rpb24NCj4gPiB1bmxlc3MgaXQgaXMgcmVhbGx5DQo+ID4gKyAgbmVlZGVkLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAgICBUaGUgSlNPTiB2YWx1ZSB0 byBiZSBjbG9uZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIGNsb25l ZCBKU09OIHZhbHVlLCBvciBOVUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VE S0lJX0pTT05fVkFMVUUNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUNsb25lICgNCj4gPiAr ICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRl ZCBKU09OIHZhbHVlIGNvbnRhaW5zIGENCj4gSlNPTg0KPiA+IGFycmF5Lg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRSVUUgICAgICAgICAgICAgVGhlIEpTT04gdmFs dWUgY29udGFpbnMgYSBKU09ODQo+ID4gYXJyYXkuDQo+ID4gKyAgQHJldHZhbCAgICAgIEZBTFNF ICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgZG9lc24ndCBjb250YWluIGENCj4gPiBKU09OIGFy cmF5Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0pz b25WYWx1ZUlzQXJyYXkgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0 byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIEpTT04gdmFsdWUgY29udGFpbnMgYQ0KPiBKU09ODQo+ ID4gb2JqZWN0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAgICBU aGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRSVUUg ICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgY29udGFpbnMgYSBKU09ODQo+ID4gb2JqZWN0Lg0K PiA+ICsgIEByZXR2YWwgICAgICBGQUxTRSAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGRvZXNu J3QgY29udGFpbiBhDQo+ID4gSlNPTiBvYmplY3QuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9P TEVBTg0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSXNPYmplY3QgKA0KPiA+ICsgIElOICAg IEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIEpTT04g VmFsdWUgY29udGFpbnMgYQ0KPiBzdHJpbmcsDQo+ID4gQXNjaWkgb3INCj4gPiArICBVbmljb2Rl IGZvcm1hdCBpcyBub3QgZGlmZmVyZW50aWF0ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g ICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsICAgICAgVFJVRSAgICAgICAgICAgICBUaGUgSlNPTiB2YWx1ZSBjb250YWlucyBh IEpTT04NCj4gPiBzdHJpbmcuDQo+ID4gKyAgQHJldHZhbCAgICAgIEZBTFNFICAgICAgICAgICAg VGhlIEpTT04gdmFsdWUgZG9lc24ndCBjb250YWluIGENCj4gPiBKU09OIHN0cmluZy4NCj4gPiAr DQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJc1N0 cmluZyAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAgICBKc29uDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiBp ZiB0aGUgcHJvdmlkZWQgSlNPTiB2YWx1ZSBjb250YWlucyBhDQo+IEpTT04NCj4gPiBudW1iZXIu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRl ZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgVFJVRSAgICAgICAgICAg ICBUaGUgSlNPTiB2YWx1ZSBpcyBjb250YWlucyBKU09ODQo+ID4gbnVtYmVyLg0KPiA+ICsgIEBy ZXR2YWwgICAgICBGQUxTRSAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGRvZXNuJ3QgY29udGFp biBhDQo+ID4gSlNPTiBudW1iZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSXNOdW1iZXIgKA0KPiA+ICsgIElOICAgIEVES0lJX0pT T05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUg ZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIEpTT04gdmFsdWUgY29u dGFpbnMgYQ0KPiBKU09ODQo+ID4gYm9vbGVhbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg IEpzb24gICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgICAgICBUUlVFICAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGNvbnRhaW5zIGEg SlNPTg0KPiA+IGJvb2xlYW4uDQo+ID4gKyAgQHJldHZhbCAgICAgIEZBTFNFICAgICAgICAgICAg VGhlIEpTT04gdmFsdWUgZG9lc24ndCBjb250YWluIGENCj4gPiBKU09OIGJvb2xlYW4uDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSXNC b29sZWFuICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJu IGlmIHRoZSBwcm92aWRlZCBKU09OIHZhbHVlIGNvbnRhaW5zIGENCj4gSlNPTg0KPiA+IE5VTEwu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRl ZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgVFJVRSAgICAgICAgICAg ICBUaGUgSlNPTiB2YWx1ZSBjb250YWlucyBhIEpTT04NCj4gPiBOVUxMLg0KPiA+ICsgIEByZXR2 YWwgICAgICBGQUxTRSAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBh DQo+ID4gSlNPTiBOVUxMLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJ QVBJDQo+ID4gK0pzb25WYWx1ZUlzTnVsbCAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxV RSAgICBKc29uDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlv biBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBhc3NvY2lhdGVkIGFycmF5IGluIGFuIGFycmF5IHR5 cGUNCj4gSlNPTg0KPiA+IHZhbHVlLg0KPiA+ICsNCj4gPiArICBBbnkgY2hhbmdlcyB0byB0aGUg cmV0dXJuZWQgYXJyYXkgd2lsbCBpbXBhY3QgdGhlIG9yaWdpbmFsIEpTT04gdmFsdWUuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09O IHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBhc3NvY2lhdGVk IGFycmF5IGluIEpTT04gdmFsdWUgb3IgTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJ SV9KU09OX0FSUkFZDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVHZXRBcnJheSAoDQo+ID4g KyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAgICBKc29uDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBhc3NvY2lh dGVkIG9iamVjdCBpbiBhbiBvYmplY3QNCj4gdHlwZQ0KPiA+IEpTT04gdmFsdWUuDQo+ID4gKw0K PiA+ICsgIEFueSBjaGFuZ2VzIHRvIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBpbXBhY3QgdGhl IG9yaWdpbmFsIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAg ICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs ICAgICAgUmV0dXJuIHRoZSBhc3NvY2lhdGVkIG9iamVjdCBpbiBKU09OIHZhbHVlIG9yIE5VTEwu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9PQkpFQ1QNCj4gPiArRUZJQVBJDQo+ ID4gK0pzb25WYWx1ZUdldE9iamVjdCAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAg ICBKc29uDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBp cyB1c2VkIHRvIHJldHJpZXZlIHRoZSBhc3NvY2lhdGVkIEFzY2lpIHN0cmluZyBpbiBhDQo+IHN0 cmluZyB0eXBlDQo+ID4gSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQW55IGNoYW5nZXMgdG8g dGhlIHJldHVybmVkIHN0cmluZyB3aWxsIGltcGFjdCB0aGUgb3JpZ2luYWwgSlNPTiB2YWx1ZS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgVGhlIHByb3ZpZGVk IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIGFzc29j aWF0ZWQgQXNjaWkgc3RyaW5nIGluIEpTT04gdmFsdWUgb3IgTlVMTC4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtDSEFSOCoNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUdldEFzY2lpU3RyaW5n ICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApOw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhl IGFzc29jaWF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gYQ0KPiBzdHJpbmcNCj4gPiB0eXBlIEpTT04g dmFsdWUuDQo+ID4gKw0KPiA+ICsgIENhbGxlciBjYW4gZG8gYW55IGNoYW5nZXMgdG8gdGhlIHJl dHVybmVkIHN0cmluZyB3aXRob3V0IGFueSBpbXBhY3QgdG8NCj4gPiB0aGUgb3JpZ2luYWwgSlNP Tg0KPiA+ICsgIHZhbHVlLCBhbmQgY2FsbGVyIG5lZWRzIHRvIGZyZWUgdGhlIHJldHVybmVkIHN0 cmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgVGhlIHBy b3ZpZGVkIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhl IGFzc29jaWF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gSlNPTiB2YWx1ZSBvcg0KPiA+IE5VTEwuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArQ0hBUjE2Kg0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVl R2V0VW5pY29kZVN0cmluZyAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAgICBKc29u DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2Vk IHRvIHJldHJpZXZlIHRoZSBhc3NvY2lhdGVkIGludGVnZXIgaW4gYSBudW1iZXINCj4gdHlwZQ0K PiA+IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIFRoZSBpbnB1dCBKU09OIHZhbHVlIHNob3Vs ZCBub3QgYmUgTlVMTCBvciBjb250YWluIG5vIEpTT04gbnVtYmVyLA0KPiA+IG90aGVyd2lzZSBp dCB3aWxsDQo+ID4gKyAgQVNTRVJUKCkgYW5kIHJldHVybiAwLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICAgSnNvbiAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0aGUgYXNzb2NpYXRlZCBudW1iZXIgaW4gSlNP TiB2YWx1ZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtJTlQ2NA0KPiA+ICtFRklBUEkNCj4gPiAr SnNvblZhbHVlR2V0TnVtYmVyICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpz b24NCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gcmV0cmlldmUgdGhlIGFzc29jaWF0ZWQgYm9vbGVhbiBpbiBhIGJvb2xlYW4NCj4gdHlw ZQ0KPiA+IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIFRoZSBpbnB1dCBKU09OIHZhbHVlIHNo b3VsZCBub3QgYmUgTlVMTCBvciBjb250YWluIG5vIEpTT04gYm9vbGVhbiwNCj4gPiBvdGhlcndp c2UgaXQgd2lsbA0KPiA+ICsgIEFTU0VSVCgpIGFuZCByZXR1cm4gRkFMU0UuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIHZhbHVl Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBhc3NvY2lhdGVkIHZhbHVl IG9mIEpTT04gYm9vbGVhbi4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VG SUFQSQ0KPiA+ICtKc29uVmFsdWVHZXRCb29sZWFuICgNCj4gPiArICBJTiAgICBFREtJSV9KU09O X1ZBTFVFICAgIEpzb24NCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGFzc29jaWF0ZWQgc3RyaW5nIGluIGEgc3Ry aW5nIHR5cGUNCj4gSlNPTg0KPiA+IHZhbHVlLg0KPiA+ICsNCj4gPiArICBBbnkgY2hhbmdlcyB0 byB0aGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgaW1wYWN0IHRoZSBvcmlnaW5hbCBKU09OIHZhbHVl Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAgICBUaGUgcHJvdmlk ZWQgSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0aGUgYXNz b2NpYXRlZCBBc2NpaSBzdHJpbmcgaW4gSlNPTiB2YWx1ZSBvciBOVUxMLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0NPTlNUIENIQVI4Kg0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlR2V0U3Ry aW5nICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBu dW1iZXIgb2YgZWxlbWVudHMgaW4gYSBKU09OIG9iamVjdCwgb3INCj4gMA0KPiA+IGlmIGl0IGlz IE5VTEwgb3INCj4gPiArICBub3QgYSBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgIEpzb25PYmplY3QgICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIG9iamVjdC4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGluIHRoaXMgSlNPTiBvYmplY3Qgb3IgMC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UTg0K PiA+ICtFRklBUEkNCj4gPiArSnNvbk9iamVjdFNpemUgKA0KPiA+ICsgIElOICAgIEVES0lJX0pT T05fT0JKRUNUICAgIEpzb25PYmplY3QNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW51bWVyYXRlIGFsbCBrZXlzIGluIGEgSlNPTiBv YmplY3QuDQo+ID4gKw0KPiA+ICsgIENhbGxlciBzaG91bGQgYmUgcmVzcG9uc2libGUgdG8gZnJl ZSB0aGUgcmV0dXJuZWQga2V5IGFycmF5IHJlZmZlcmVuY2UuDQo+IEJ1dA0KPiA+IGNvbnRhaW5l ZCBrZXlzDQo+ID4gKyAgYXJlIHJlYWQgb25seSBhbmQgbXVzdCBub3QgYmUgbW9kaWZpZWQgb3Ig ZnJlZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uT2JqICAgICAgICAgICAgICAg IFRoZSBwcm92aWRlZCBKU09OIG9iamVjdCBmb3INCj4gPiBlbnVtZXJhdGlvbi4NCj4gPiArICBA cGFyYW1bb3V0XSAgS2V5Q291bnQgICAgICAgICAgICAgICBUaGUgY291bnQgb2Yga2V5cyBpbiB0 aGlzDQo+ID4gSlNPTiBvYmplY3QuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4g YW4gYXJyYXkgb2YgdGhlIGVudW1lcmF0ZWQga2V5cyBpbiB0aGlzIEpTT04NCj4gPiBvYmplY3Qg b3IgTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtDSEFSOCoqDQo+ID4gK0pzb25PYmplY3RH ZXRLZXlzICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX09CSkVDVCAgICBKc29uT2JqLA0KPiA+ ICsgIE9VVCAgIFVJTlROICAgICAgICAgICAgICAgICpLZXlDb3VudA0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgYSBKU09OIHZh bHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IGtleQ0KPiA+IGZyb20gYSBKU09OIG9iamVj dC4NCj4gPiArDQo+ID4gKyAgSXQgb25seSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoaXMgdmFs dWUgYW5kIGFueSBjaGFuZ2VzIG9uIHRoaXMgdmFsdWUNCj4gd2lsbA0KPiA+IGltcGFjdCB0aGUN Cj4gPiArICBvcmlnaW5hbCBKU09OIG9iamVjdC4gSWYgdGhhdCBpcyBub3QgZXhwZWN0ZWQsIHBs ZWFzZSBjYWxsDQo+IEpzb25WYWx1ZUNsb25lKCkNCj4gPiB0byBjbG9uZSBpdCB0bw0KPiA+ICsg IHVzZS4NCj4gPiArDQo+ID4gKyAgSW5wdXQga2V5IG11c3QgYmUgYSB2YWxpZCBOVUxMIHRlcm1p bmF0ZWQgVVRGOCBlbmNvZGVkIHN0cmluZy4gTlVMTA0KPiA+IHdpbGwgYmUgcmV0dXJuZWQgd2hl bg0KPiA+ICsgIEtleS1WYWx1ZSBpcyBub3QgZm91bmQgaW4gdGhpcyBKU09OIG9iamVjdC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb25PYmogICAgICAgICAgIFRoZSBwcm92aWRlZCBK U09OIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICAgS2V5ICAgICAgICAgICAgICAgVGhlIGtl eSBvZiB0aGUgSlNPTiB2YWx1ZSB0byBiZQ0KPiA+IHJldHJpZXZlZC4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCAgICAgIFJldHVybiB0aGUgY29ycmVzcG9uZGluZyBKU09OIHZhbHVlIHRvIGtleSwg b3IgTlVMTCBvbg0KPiA+IGVycm9yLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05f VkFMVUUNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25PYmplY3RHZXRWYWx1ZSAoDQo+ID4gKyAgSU4g ICAgQ09OU1QgRURLSUlfSlNPTl9PQkpFQ1QgICAgSnNvbk9iaiwNCj4gPiArICBJTiAgICBDT05T VCBDSEFSOCAgICAgICAgICAgICAgICAqS2V5DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBhIEpTT04gdmFsdWUgY29ycmVzcG9u ZGluZyB0byB0aGUgaW5wdXQga2V5DQo+ID4gZnJvbSBhIEpTT04gb2JqZWN0LA0KPiA+ICsgIGFu ZCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoaXMgdmFsdWUgd2lsbCBiZSBpbmNyZWFzZWQgYnkg MS4NCj4gPiArDQo+ID4gKyAgSW5wdXQga2V5IG11c3QgYmUgYSB2YWxpZCBOVUxMIHRlcm1pbmF0 ZWQgVVRGOCBlbmNvZGVkIHN0cmluZy4gSWYgdGhlcmUNCj4gPiBhbHJlYWR5IGlzIGEgdmFsdWUg Zm9yDQo+ID4gKyAgdGhpcyBrZXksIHRoaXMga2V5IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIG5l dyBKU09OIHZhbHVlLiBUaGUgb2xkIEpTT04NCj4gPiB2YWx1ZSB3aWxsIGJlIHJlbW92ZWQNCj4g PiArICBmcm9tIHRoaXMgb2JqZWN0IGFuZCB0aHVzIGl0cycgcmVmZXJlbmNlIGNvdW50IHdpbGwg YmUgZGVjcmVhc2VkIGJ5IDEuDQo+ID4gKw0KPiA+ICsgIE1vcmUgZGV0YWlscyBmb3IgcmVmZXJl bmNlIGNvdW50IHN0cmF0ZWd5IGNhbiByZWZlciB0byB0aGUgQVBJDQo+IGRlc2NyaXB0aW9uDQo+ ID4gZm9yIEpzb25WYWx1ZUZyZWUoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb25P YmogICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gb2JqZWN0Lg0KPiA+ICsgIEBwYXJh bVtpbl0gICBLZXkgICAgICAgICAgICAgICAgICAgIFRoZSBrZXkgb2YgdGhlIEpTT04gdmFsdWUg dG8NCj4gPiBiZSBzZXQuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgICAg ICAgVGhlIEpTT04gdmFsdWUgdG8gc2V0IHRvIHRoaXMNCj4gPiBKU09OIG9iamVjdCBtYXBwZWQg Ynkga2V5Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgRUZJX0FCT1JURUQgICAgICAgICAg ICBTb21lIGVycm9yIG9jY3VyIGFuZA0KPiA+IG9wZXJhdGlvbiBhYm9ydGVkLg0KPiA+ICsgIEBy ZXR2YWwgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGhhcyBiZWVu IHNldA0KPiA+IHRvIHRoaXMgSlNPTiBvYmplY3QuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJ X1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArSnNvbk9iamVjdFNldFZhbHVlICgNCj4gPiArICBJ TiAgICBFREtJSV9KU09OX09CSkVDVCAgICBKc29uT2JqLA0KPiA+ICsgIElOICAgIENPTlNUIENI QVI4ICAgICAgICAgICpLZXksDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAgICAgSnNv bg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNl ZCB0byBnZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIEpTT04gYXJyYXksIG9yDQo+IDAg aWYNCj4gPiBpdCBpcyBOVUxMIG9yDQo+ID4gKyAgbm90IGEgSlNPTiBhcnJheS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgIEpzb25BcnJheSAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpT T04gYXJyYXkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIG51bWJlciBv ZiBlbGVtZW50cyBpbiB0aGlzIEpTT04gYXJyYXkgb3IgMC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtVSU5UTg0KPiA+ICtFRklBUEkNCj4gPiArSnNvbkFycmF5Q291bnQgKA0KPiA+ICsgIElOICAg IEVES0lJX0pTT05fQVJSQVkgICAgSnNvbkFycmF5DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiB0aGUgSlNPTiB2YWx1ZSBp biB0aGUgYXJyYXkgYXQgcG9zaXRpb24NCj4gaW5kZXguDQo+ID4gVGhlIHZhbGlkIHJhbmdlDQo+ ID4gKyAgZm9yIHRoaXMgaW5kZXggaXMgZnJvbSAwIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgSnNv bkFycmF5Q291bnQoKSBtaW51cw0KPiAxLg0KPiA+ICsNCj4gPiArICBJdCBvbmx5IHJldHVybnMg YSByZWZlcmVuY2UgdG8gdGhpcyB2YWx1ZSBhbmQgYW55IGNoYW5nZXMgb24gdGhpcyB2YWx1ZQ0K PiB3aWxsDQo+ID4gaW1wYWN0IHRoZQ0KPiA+ICsgIG9yaWdpbmFsIEpTT04gb2JqZWN0LiBJZiB0 aGF0IGlzIG5vdCBleHBlY3RlZCwgcGxlYXNlIGNhbGwNCj4gSnNvblZhbHVlQ2xvbmUoKQ0KPiA+ IHRvIGNsb25lIGl0IHRvDQo+ID4gKyAgdXNlLg0KPiA+ICsNCj4gPiArICBJZiB0aGlzIGFycmF5 IGlzIE5VTEwgb3Igbm90IGEgSlNPTiBhcnJheSwgb3IgaWYgaW5kZXggaXMgb3V0IG9mIHJhbmdl LA0KPiBOVUxMDQo+ID4gd2lsbCBiZSByZXR1cm5lZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgIEpzb25BcnJheSAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIEFycmF5Lg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBKU09OIHZhbHVlIGxvY2F0ZWQgaW4gdGhlIElu ZGV4IHBvc2l0aW9uIG9yDQo+ID4gTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9K U09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uQXJyYXlHZXRWYWx1ZSAoDQo+ID4gKyAg SU4gICAgRURLSUlfSlNPTl9BUlJBWSAgICBKc29uQXJyYXksDQo+ID4gKyAgSU4gICAgVUlOVE4g ICAgICAgICAgICAgICBJbmRleA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBhcHBlbmQgYSBKU09OIHZhbHVlIHRvIHRoZSBlbmQgb2Yg dGhlIEpTT04NCj4gYXJyYXksDQo+ID4gYW5kIGdyb3cgdGhlIHNpemUgb2YNCj4gPiArICBhcnJh eSBieSAxLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoaXMgdmFsdWUgd2lsbCBiZSBpbmNyZWFz ZWQgYnkgMS4NCj4gPiArDQo+ID4gKyAgTW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291bnQg c3RyYXRlZ3kgY2FuIHJlZmVyIHRvIHRoZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3IgSnNv blZhbHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbkFycmF5ICAgICAg ICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpz b24gICAgICAgICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgdG8gYXBwZW5kLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICAgRUZJX0FCT1JURUQgICAgICAgICAgICBTb21lIGVycm9yIG9jY3Vy IGFuZA0KPiA+IG9wZXJhdGlvbiBhYm9ydGVkLg0KPiA+ICsgIEByZXR2YWwgICAgICBFRklfU1VD Q0VTUyAgICAgICAgICAgIEpTT04gdmFsdWUgaGFzIGJlZW4NCj4gPiBhcHBlbmRlZCB0byB0aGUg ZW5kIG9mIHRoZSBKU09OIGFycmF5Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK0pzb25BcnJheUFwcGVuZFZhbHVlICgNCj4gPiArICBJTiAgICBF REtJSV9KU09OX0FSUkFZICAgIEpzb25BcnJheSwNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZB TFVFICAgIEpzb24NCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIGEgSlNPTiB2YWx1ZSBhdCBwb3NpdGlvbiBpbmRleCwgc2hp ZnRpbmcNCj4gdGhlDQo+ID4gZWxlbWVudHMgYWZ0ZXIgaW5kZXgNCj4gPiArICBvbmUgcG9zaXRp b24gdG93YXJkcyB0aGUgc3RhcnQgb2YgdGhlIGFycmF5LiBUaGUgcmVmZXJlbmNlIGNvdW50IG9m DQo+IHRoaXMNCj4gPiB2YWx1ZSB3aWxsIGJlIGRlY3JlYXNlZA0KPiA+ICsgIGJ5IDEuDQo+ID4g Kw0KPiA+ICsgIE1vcmUgZGV0YWlscyBmb3IgcmVmZXJlbmNlIGNvdW50IHN0cmF0ZWd5IGNhbiBy ZWZlciB0byB0aGUgQVBJDQo+IGRlc2NyaXB0aW9uDQo+ID4gZm9yIEpzb25WYWx1ZUZyZWUoKS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb25BcnJheSAgICAgICAgICAgICAgVGhlIHBy b3ZpZGVkIEpTT04gYXJyYXkuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEluZGV4ICAgICAgICAgICAg ICAgICAgVGhlIEluZGV4IHBvc2l0aW9uIGJlZm9yZQ0KPiA+IHJlbW92ZW1lbnQuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgICAgICBFRklfQUJPUlRFRCAgICAgICAgICAgIFNvbWUgZXJyb3Igb2Nj dXIgYW5kDQo+ID4gb3BlcmF0aW9uIGFib3J0ZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgIEVGSV9T VUNDRVNTICAgICAgICAgICAgVGhlIEpTT04gYXJyYXkgaGFzIGJlZW4NCj4gPiByZW1vdmVkIGF0 IHBvc2l0aW9uIGluZGV4Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr RUZJQVBJDQo+ID4gK0pzb25BcnJheVJlbW92ZVZhbHVlICgNCj4gPiArICBJTiAgICBFREtJSV9K U09OX0FSUkFZICAgIEpzb25BcnJheSwNCj4gPiArICBJTiAgICBVSU5UTiAgICAgICAgICAgICAg IEluZGV4DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIER1bXAgSlNPTiB0byBh IGJ1ZmZlcg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvblZhbHVlICAgICAgIFRoZSBw cm92aWRlZCBKU09OIGFycmF5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICBJbmRleCAgICAgICAgICAg VGhlIEluZGV4IHBvc2l0aW9uIGJlZm9yZQ0KPiA+IHJlbW92ZW1lbnQuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgICAgICBOVUxMICAgICAgICAgICAgRHVtcCBmYWlsIGlmIE5VTEwgcmV0dXJuZWQs IG90aGVyd2lzZQ0KPiA+IHRoZSBidWZmZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRhaW4gSlNPTiBwYXlsYW9kIGluIEFTQ0lJIHN0cmluZy4NCj4gPiArKiovDQo+ ID4gK0NIQVI4ICoNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25EdW1wU3RyaW5nICgNCj4gPiArICBJ TiAgICBFREtJSV9KU09OX0FSUkFZICAgIEpzb25WYWx1ZSwNCj4gPiArICBJTiAgICBVSU5UTiAg ICAgICAgICAgICAgIEZsYWdzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIExv YWQgSlNPTiBmcm9tIGEgYnVmZmVyDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBCdWZmZXIg ICAgICAgIEJ1ZmZmZXIgdG8gdGhlIEpTT04gcGF5bG9hZA0KPiA+ICsgIEBwYXJhbVtpbl0gICBC dWZmZXJMZW4gICAgIExlbmd0aCBvZiB0aGUgYnVmZmVyDQo+ID4gKyAgQHBhcmFtW2luXSAgIEZs YWdzICAgICAgICAgRmxhZyBvZiBsb2FkaW5nIEpTT04gYnVmZmVyDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgICAgICBFREtJSV9KU09OX1ZBTFVFICBOVUxMIG1lYW5zIGZhaWwgdG8gbG9hZCBKU09O DQo+ID4gcGF5bG9hZC4NCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4gPiArRUZJ QVBJDQo+ID4gK0pzb25Mb2FkQnVmZmVyICgNCj4gPiArICBJTiAgICBDT05TVCBDSEFSOCAgICAg ICAqQnVmZmVyLA0KPiA+ICsgIElOICAgIFVJTlROICAgICAgICAgICAgIEJ1ZmZlckxlbiwNCj4g PiArICBJTiAgICBVSU5UTiAgICAgICAgICAgICBGbGFncywNCj4gPiArICBJTiAgICBFREtJSV9K U09OX0VSUk9SICAqRXJyb3INCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRGVj cmVhc2UgcmVmZXJlbmNlDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uVmFsdWUgICAg ICBKU09OIHZhbHVlDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29u RGVjcmVhc2VSZWZlcmVuY2UgKA0KPiA+ICsgIElOIEVES0lJX0pTT05fVkFMVUUgSnNvblZhbHVl DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEluY3JlYXNlIHJlZmVyZW5jZQ0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvblZhbHVlICAgICAgSlNPTiB2YWx1ZQ0KPiA+ ICsgIEByZXR2YWwgICAgICBFREtJSV9KU09OX1ZBTFVFIG9mIGl0c2VsZg0KPiA+ICsqKi8NCj4g PiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvbkluY3JlYXNlUmVmZXJl bmNlICgNCj4gPiArICBJTiBFREtJSV9KU09OX1ZBTFVFIEpzb25WYWx1ZQ0KPiA+ICsgICk7DQo+ ID4gKy8qKg0KPiA+ICsgIFJldHVybnMgYW4gb3BhcXVlIGl0ZXJhdG9yIHdoaWNoIGNhbiBiZSB1 c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbGwNCj4ga2V5LXZhbHVlDQo+ID4gcGFpcnMNCj4gPiArICBp biBvYmplY3QsIG9yIE5VTEwgaWYgb2JqZWN0IGlzIGVtcHR5DQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gICBKc29uVmFsdWUgICAgICBKU09OIHZhbHVlDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoN Cj4gPiArRUZJQVBJDQo+ID4gK0pzb25PYmplY3RJdGVyYXRvciAoDQo+ID4gKyAgSU4gRURLSUlf SlNPTl9WQUxVRSBKc29uVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg RXh0cmFjdCB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBmcm9tIGl0ZXJhdG9yLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICAgSXRlcmF0b3IgICBJdGVyYXRvciBwb2ludGVyDQo+ID4gKyoqLw0KPiA+ ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uT2JqZWN0SXRlcmF0b3JW YWx1ZSAoDQo+ID4gKyAgSU4gVk9JRCAqSXRlcmF0b3INCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgUmV0dXJucyBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbmV4dCBrZXkt dmFsdWUgcGFpciBpbiBvYmplY3QgYWZ0ZXINCj4gaXRlciwNCj4gPiArICBvciBOVUxMIGlmIHRo ZSB3aG9sZSBvYmplY3QgaGFzIGJlZW4gaXRlcmF0ZWQgdGhyb3VnaC4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgIEpzb25WYWx1ZSAgSlNPTiB2YWx1ZQ0KPiA+ICsgIEBwYXJhbVtpbl0gICBJ dGVyYXRvciAgIEl0ZXJhdG9yIHBvaW50ZXINCj4gPiArICBAcmV0dmFsICAgICAgSXRlcmF0b3Ig cG9pbnRlcg0KPiA+ICsqKi8NCj4gPiArVk9JRCAqDQo+ID4gK0pzb25PYmplY3RJdGVyYXRvck5l eHQgKA0KPiA+ICsgIElOIEVES0lJX0pTT05fVkFMVUUgSnNvblZhbHVlLA0KPiA+ICsgIElOIFZP SUQgICAgICAgICAgICAgKkl0ZXJhdG9yDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFJldHVybnMgdGhlIGpzb24gdHlwZSBvZiB0aGlzIGpzb24gdmFsdWUNCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgIEpzb25WYWx1ZSAgSlNPTiB2YWx1ZQ0KPiA+ICsgIEByZXR2YWwgICAg ICBKU09OIHR5cGUgcmV0dXJuZWQNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVFlQRQ0KPiA+ ICtFRklBUEkNCj4gPiArSnNvbkdldFR5cGUoDQo+ID4gKyAgSU4gRURLSUlfSlNPTl9WQUxVRSBK c29uVmFsdWUNCj4gPiArICApOw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlz aFBrZy9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExpYlN1cHBvcnQuYw0KPiA+IGIvUmVkZmlz aFBrZy9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExpYlN1cHBvcnQuYw0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uOTA3NjM0YTA1Yg0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9KYW5zc29uQ3J0 TGliU3VwcG9ydC5jDQo+ID4gQEAgLTAsMCArMSw3MDUgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4g KyAgQ1JUIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBKYW5zc29uIHN5c3RlbSBjYWxsLg0KPiA+ICsN Cj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0IFBhY2thcmQg RW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8SmFuc3NvbkNydExpYlN1cHBvcnQuaD4NCj4gPiArI2luY2x1ZGUg PExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiArDQo+ID4gK2ludCAgZXJybm8gPSAw Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBjaGFy YWN0ZXIgaXMgYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rlcg0KPiA+ICsgIEByZXR1cm4gIFJldHVy bnMgMSBpZiBjIGlzIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIsIG90aGVyd2lzZSByZXR1cm5z DQo+ID4gMC4NCj4gPiArKiovDQo+ID4gK2ludCBpc2FsbnVtIChpbnQgYykNCj4gPiArew0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gPGFsbnVtPiA6Oj0gWzAtOV0gfCBbYS16XSB8IFtBLVpdDQo+ID4g KyAgLy8NCj4gPiArICByZXR1cm4gKCgoJzAnIDw9IChjKSkgJiYgKChjKSA8PSAnOScpKSB8fA0K PiA+ICsgICAgICAgICAgKCgnYScgPD0gKGMpKSAmJiAoKGMpIDw9ICd6JykpIHx8DQo+ID4gKyAg ICAgICAgICAoKCdBJyA8PSAoYykpICYmICgoYykgPD0gJ1onKSkpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBEZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlciBpcyBh IGRpZ2l0YWwgY2hhcmFjdGVyDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gIFJldHVybnMgMSBpZiBj IGlzIGFuIGRpZ2l0YWwgY2hhcmFjdGVyLCBvdGhlcndpc2UgcmV0dXJucyAwLg0KPiA+ICsqKi8N Cj4gPiAraW50IGlzZGNoYXIgKGludCBjKQ0KPiA+ICt7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBb MC05XSB8IFtlICstLl0NCj4gPiArICAvLw0KPiA+ICsgIHJldHVybiAoKCgnMCcgPD0gKGMpKSAm JiAoKGMpIDw9ICc5JykpIHx8DQo+ID4gKyAgICAgICAgICAoYyA9PSAnZScpIHx8IChjID09ICdF JykgfHwNCj4gPiArICAgICAgICAgIChjID09ICcrJykgfHwgKGMgPT0gJy0nKSB8fA0KPiA+ICsg ICAgICAgICAgKGMgPT0gJy4nKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIERl dGVybWluZSBpZiBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyIGlzIGEgc3BhY2UgY2hhcmFjdGVyDQo+ ID4gKw0KPiA+ICsgIEByZXR1cm4gIFJldHVybnMgMSBpZiBjIGlzIGEgc3BhY2UgY2hhcmFjdGVy DQo+ID4gKyoqLw0KPiA+ICtpbnQgaXNzcGFjZSAoaW50IGMpDQo+ID4gK3sNCj4gPiArICAvLw0K PiA+ICsgIC8vIDxzcGFjZT4gOjo9IFsgXQ0KPiA+ICsgIC8vDQo+ID4gKyAgcmV0dXJuICgoYykg PT0gJyAnKSB8fCAoKGMpID09ICdcdCcpIHx8ICgoYykgPT0gJ1xyJykgfHwgKChjKSA9PSAnXG4n KQ0KPiB8fCAoKGMpID09ICdcdicpDQo+ID4gfHwgKChjKSA9PSAnXGYnKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxsb2NhdGVzIG1lbW9yeSBibG9ja3MNCj4gPiArKi8NCj4g PiArdm9pZCAqbWFsbG9jIChzaXplX3Qgc2l6ZSkNCj4gPiArew0KPiA+ICsgIHJldHVybiBBbGxv Y2F0ZVBvb2wgKChVSU5UTikgc2l6ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IERlLWFsbG9jYXRlcyBvciBmcmVlcyBhIG1lbW9yeSBibG9jaw0KPiA+ICsqLw0KPiA+ICt2b2lk IGZyZWUgKHZvaWQgKnB0cikNCj4gPiArew0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSW4gU3RhbmRh cmQgQywgZnJlZSgpIGhhbmRsZXMgYSBudWxsIHBvaW50ZXIgYXJndW1lbnQgdHJhbnNwYXJlbnRs eS4NCj4gVGhpcw0KPiA+ICsgIC8vIGlzIG5vdCB0cnVlIG9mIEZyZWVQb29sKCkgYmVsb3csIHNv IHByb3RlY3QgaXQuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAocHRyICE9IE5VTEwpIHsNCj4gPiAr ICAgIEZyZWVQb29sIChwdHIpOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgTmV0QlNEIENvbXBhdGliaWxpdHkgRnVuY3Rpb24gc3RyZHVwIGNyZWF0ZXMgYSBkdXBs aWNhdGUgY29weSBvZiBhDQo+IHN0cmluZy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiAgUmV0dXJu cyB0aGUgcG9pbnRlciB0byBkdXBsaWNhdGVkIHN0cmluZy4NCj4gPiArKiovDQo+ID4gK2NoYXIg KiBzdHJkdXAoY29uc3QgY2hhciAqc3RyKQ0KPiA+ICt7DQo+ID4gKyAgc2l6ZV90IGxlbjsNCj4g PiArICBjaGFyICpjb3B5Ow0KPiA+ICsNCj4gPiArICBsZW4gPSBzdHJsZW4oc3RyKSArIDE7DQo+ ID4gKyAgaWYgKChjb3B5ID0gbWFsbG9jKGxlbikpID09IE5VTEwpDQo+ID4gKyAgICByZXR1cm4g KE5VTEwpOw0KPiA+ICsgIG1lbWNweShjb3B5LCBzdHIsIGxlbik7DQo+ID4gKyAgcmV0dXJuIChj b3B5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqIFRoZSB0b3VwcGVyIGZ1bmN0aW9uIGNvbnZl cnRzIGEgbG93ZXJjYXNlIGxldHRlciB0byBhIGNvcnJlc3BvbmRpbmcNCj4gPiArICAgIHVwcGVy Y2FzZSBsZXR0ZXIuDQo+ID4gKw0KPiA+ICsgICAgQHBhcmFtW2luXSAgICBjICAgVGhlIGNoYXJh Y3RlciB0byBiZSBjb252ZXJ0ZWQuDQo+ID4gKw0KPiA+ICsgICAgQHJldHVybiAgIElmIHRoZSBh cmd1bWVudCBpcyBhIGNoYXJhY3RlciBmb3Igd2hpY2ggaXNsb3dlciBpcyB0cnVlDQo+IGFuZA0K PiA+ICsgICAgICAgICAgICAgIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBjb3JyZXNwb25kaW5nIGNo YXJhY3RlcnMsIGFzDQo+ID4gc3BlY2lmaWVkIGJ5DQo+ID4gKyAgICAgICAgICAgICAgdGhlIGN1 cnJlbnQgbG9jYWxlLCBmb3Igd2hpY2ggaXN1cHBlciBpcyB0cnVlLCB0aGUgdG91cHBlcg0KPiA+ ICsgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgb25lIG9mIHRoZSBjb3JyZXNwb25kaW5n IGNoYXJhY3RlcnMNCj4gPiAoYWx3YXlzIHRoZQ0KPiA+ICsgICAgICAgICAgICAgIHNhbWUgb25l IGZvciBhbnkgZ2l2ZW4gbG9jYWxlKTsgb3RoZXJ3aXNlLCB0aGUgYXJndW1lbnQgaXMNCj4gPiAr ICAgICAgICAgICAgICByZXR1cm5lZCB1bmNoYW5nZWQuDQo+ID4gKyoqLw0KPiA+ICtpbnQNCj4g PiArdG91cHBlcigNCj4gPiArICBJTiAgaW50IGMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBp ZiAoIChjID49ICdhJykgJiYgKGMgPD0gJ3onKSApIHsNCj4gPiArICAgIGMgPSBjIC0gKCdhJyAt ICdBJyk7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBEaWdpdCB0byBhIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuICBSZXR1 cm5zIHRoZSB2YWx1ZSBvZiBkaWdpdC4NCj4gPiArKiovDQo+ID4gK2ludA0KPiA+ICtEaWdpdDJW YWwoIGludCBjKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKCgoYyA+PSAnYScpICYmIChjIDw9ICd6Jykp IHx8ICgoYyA+PSAnQScpICYmIChjIDw9ICdaJykpKSB7ICAvKiBJZg0KPiBjIGlzIG9uZSBvZg0K PiA+IFtBLVphLXpdLi4uICovDQo+ID4gKyAgICBjID0gdG91cHBlcihjKSAtIDc7ICAgLy8gQWRq dXN0IHNvICdBJyBpcyAoJzknICsgMSkNCj4gPiArICB9DQo+ID4gKyAgcmV0dXJuIGMgLSAnMCc7 ICAgLy8gVmFsdWUgcmV0dXJuZWQgaXMgYmV0d2VlbiAwIGFuZCAzNSwgaW5jbHVzaXZlLg0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqIFRoZSBzdHJ0b2xsIGZ1bmN0aW9uIGNvbnZlcnRz IHRoZSBpbml0aWFsIHBvcnRpb24gb2YgdGhlIHN0cmluZw0KPiBwb2ludGVkIHRvDQo+ID4gKyAg ICBieSBucHRyIHRvIGxvbmcgbG9uZyBpbnQgcmVwcmVzZW50YXRpb24uDQo+ID4gKw0KPiA+ICsg ICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBmb3Igc3RydG9sIGZvciBtb3JlIGluZm9ybWF0aW9uLg0K PiA+ICsNCj4gPiArICBAcmV0dXJuICAgVGhlIHN0cnRvbGwgZnVuY3Rpb24gcmV0dXJucyB0aGUg Y29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmDQo+IG5vDQo+ID4gKyAgICAgICAgICAgIGNvbnZl cnNpb24gY291bGQgYmUgcGVyZm9ybWVkLCB6ZXJvIGlzIHJldHVybmVkLiBJZiB0aGUNCj4gY29y cmVjdA0KPiA+ICsgICAgICAgICAgICB2YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiByZXBy ZXNlbnRhYmxlIHZhbHVlcywNCj4gPiBMTE9OR19NSU4gb3INCj4gPiArICAgICAgICAgICAgTExP TkdfTUFYIGlzIHJldHVybmVkIChhY2NvcmRpbmcgdG8gdGhlIHNpZ24gb2YgdGhlIHZhbHVlLCBp Zg0KPiA+IGFueSksDQo+ID4gKyAgICAgICAgICAgIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hY3Jv IEVSQU5HRSBpcyBzdG9yZWQgaW4gZXJybm8uDQo+ID4gKyoqLw0KPiA+ICtsb25nIGxvbmcNCj4g PiArc3RydG9sbChjb25zdCBjaGFyICogbnB0ciwgY2hhciAqKiBlbmRwdHIsIGludCBiYXNlKQ0K PiA+ICt7DQo+ID4gKyAgY29uc3QgY2hhciAqcEVuZDsNCj4gPiArICBsb25nIGxvbmcgICBSZXN1 bHQgPSAwOw0KPiA+ICsgIGxvbmcgbG9uZyAgIFByZXZpb3VzOw0KPiA+ICsgIGludCAgICAgICAg IHRlbXA7DQo+ID4gKyAgQk9PTEVBTiAgICAgTmVnYXRpdmUgPSBGQUxTRTsNCj4gPiArDQo+ID4g KyAgcEVuZCA9IG5wdHI7DQo+ID4gKw0KPiA+ICsgIGlmKChiYXNlIDwgMCkgfHwgKGJhc2UgPT0g MSkgfHwgKGJhc2UgPiAzNikpIHsNCj4gPiArICAgIGlmKGVuZHB0ciAhPSBOVUxMKSB7DQo+ID4g KyAgICAqZW5kcHRyID0gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArICAgIHJldHVybiAwOw0KPiA+ ICsgIH0NCj4gPiArICAvLyBTa2lwIGxlYWRpbmcgc3BhY2VzLg0KPiA+ICsgIHdoaWxlKGlzc3Bh Y2UoKm5wdHIpKSAgICsrbnB0cjsNCj4gPiArDQo+ID4gKyAgLy8gUHJvY2VzcyBTdWJqZWN0IHNl cXVlbmNlOiBvcHRpb25hbCBzaWduIGZvbGxvd2VkIGJ5IGRpZ2l0cy4NCj4gPiArICBpZigqbnB0 ciA9PSAnKycpIHsNCj4gPiArICAgIE5lZ2F0aXZlID0gRkFMU0U7DQo+ID4gKyAgICArK25wdHI7 DQo+ID4gKyAgfQ0KPiA+ICsgIGVsc2UgaWYoKm5wdHIgPT0gJy0nKSB7DQo+ID4gKyAgICBOZWdh dGl2ZSA9IFRSVUU7DQo+ID4gKyAgICArK25wdHI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBp ZigqbnB0ciA9PSAnMCcpIHsgIC8qIE1pZ2h0IGJlIE9jdGFsIG9yIEhleCAqLw0KPiA+ICsgICAg aWYodG91cHBlcihucHRyWzFdKSA9PSAnWCcpIHsgICAvKiBMb29rcyBsaWtlIEhleCAqLw0KPiA+ ICsgICAgICBpZigoYmFzZSA9PSAwKSB8fCAoYmFzZSA9PSAxNikpIHsNCj4gPiArICAgICAgICBu cHRyICs9IDI7ICAvKiBTa2lwIHRoZSAiMFgiICAgICAgKi8NCj4gPiArICAgICAgICBiYXNlID0g MTY7ICAvKiBJbiBjYXNlIGJhc2Ugd2FzIDAgKi8NCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0K PiA+ICsgICAgZWxzZSB7ICAgIC8qIExvb2tzIGxpa2UgT2N0YWwgKi8NCj4gPiArICAgICAgaWYo KGJhc2UgPT0gMCkgfHwgKGJhc2UgPT0gOCkpIHsNCj4gPiArICAgICAgICArK25wdHI7ICAgICAv KiBTa2lwIHRoZSBsZWFkaW5nICIwIiAqLw0KPiA+ICsgICAgICAgIGJhc2UgPSA4OyAgIC8qIElu IGNhc2UgYmFzZSB3YXMgMCAgICovDQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9 DQo+ID4gKyAgaWYoYmFzZSA9PSAwKSB7ICAgLyogSWYgc3RpbGwgemVybyB0aGVuIG11c3QgYmUg ZGVjaW1hbCAqLw0KPiA+ICsgICAgYmFzZSA9IDEwOw0KPiA+ICsgIH0NCj4gPiArICBpZigqbnB0 ciAgPT0gJzAnKSB7DQo+ID4gKyAgICBmb3IoIDsgKm5wdHIgPT0gJzAnOyArK25wdHIpOyAgLyog U2tpcCBhbnkgcmVtYWluaW5nIGxlYWRpbmcgemVyb3MgKi8NCj4gPiArICAgIHBFbmQgPSBucHRy Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgd2hpbGUoIGlzYWxudW0oKm5wdHIpICYmICgodGVt cCA9IERpZ2l0MlZhbCgqbnB0cikpIDwgYmFzZSkpIHsNCj4gPiArICAgIFByZXZpb3VzID0gUmVz dWx0Ow0KPiA+ICsgICAgUmVzdWx0ID0gTXVsdFM2NHg2NCAoUmVzdWx0LCBiYXNlKSArIChsb25n IGxvbmcgaW50KXRlbXA7DQo+ID4gKyAgICBpZiggUmVzdWx0IDw9IFByZXZpb3VzKSB7ICAgLy8g RGV0ZWN0IE92ZXJmbG93DQo+ID4gKyAgICAgIGlmKE5lZ2F0aXZlKSB7DQo+ID4gKyAgICAgICAg UmVzdWx0ID0gTExPTkdfTUlOOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIGVsc2Ugew0KPiA+ ICsgICAgICAgIFJlc3VsdCA9IExMT05HX01BWDsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBO ZWdhdGl2ZSA9IEZBTFNFOw0KPiA+ICsgICAgICBlcnJubyA9IEVSQU5HRTsNCj4gPiArICAgICAg YnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBwRW5kID0gKytucHRyOw0KPiA+ICsgIH0NCj4g PiArICBpZihOZWdhdGl2ZSkgew0KPiA+ICsgICAgUmVzdWx0ID0gLVJlc3VsdDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIC8vIFNhdmUgcG9pbnRlciB0byBmaW5hbCBzZXF1ZW5jZQ0KPiA+ICsg IGlmKGVuZHB0ciAhPSBOVUxMKSB7DQo+ID4gKyAgICAqZW5kcHRyID0gKGNoYXIgKilwRW5kOw0K PiA+ICsgIH0NCj4gPiArICByZXR1cm4gUmVzdWx0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiog VGhlIHN0cnRvbCwgc3RydG9sbCwgc3RydG91bCwgYW5kIHN0cnRvdWxsIGZ1bmN0aW9ucyBjb252 ZXJ0IHRoZQ0KPiBpbml0aWFsDQo+ID4gKyAgICBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgcG9pbnRl ZCB0byBieSBucHRyIHRvIGxvbmcgaW50LCBsb25nIGxvbmcgaW50LA0KPiA+ICsgICAgdW5zaWdu ZWQgbG9uZyBpbnQsIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHJlcHJlc2VudGF0aW9uLA0K PiA+IHJlc3BlY3RpdmVseS4NCj4gPiArICAgIEZpcnN0LCB0aGV5IGRlY29tcG9zZSB0aGUgaW5w dXQgc3RyaW5nIGludG8gdGhyZWUgcGFydHM6IGFuIGluaXRpYWwsDQo+ID4gKyAgICBwb3NzaWJs eSBlbXB0eSwgc2VxdWVuY2Ugb2Ygd2hpdGUtc3BhY2UgY2hhcmFjdGVycyAoYXMgc3BlY2lmaWVk IGJ5DQo+ID4gdGhlDQo+ID4gKyAgICBpc3NwYWNlIGZ1bmN0aW9uKSwgYSBzdWJqZWN0IHNlcXVl bmNlIHJlc2VtYmxpbmcgYW4gaW50ZWdlcg0KPiA+IHJlcHJlc2VudGVkIGluDQo+ID4gKyAgICBz b21lIHJhZGl4IGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIGJhc2UsIGFuZCBhIGZpbmFsIHN0 cmluZyBvZiBvbmUNCj4gb3INCj4gPiArICAgIG1vcmUgdW5yZWNvZ25pemVkIGNoYXJhY3RlcnMs IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbA0KPiBjaGFyYWN0ZXINCj4gPiBvZg0KPiA+ ICsgICAgdGhlIGlucHV0IHN0cmluZy4gVGhlbiwgdGhleSBhdHRlbXB0IHRvIGNvbnZlcnQgdGhl IHN1YmplY3Qgc2VxdWVuY2UNCj4gdG8NCj4gPiBhbg0KPiA+ICsgICAgaW50ZWdlciwgYW5kIHJl dHVybiB0aGUgcmVzdWx0Lg0KPiA+ICsNCj4gPiArICAgIElmIHRoZSB2YWx1ZSBvZiBiYXNlIGlz IHplcm8sIHRoZSBleHBlY3RlZCBmb3JtIG9mIHRoZSBzdWJqZWN0DQo+IHNlcXVlbmNlDQo+ID4g aXMNCj4gPiArICAgIHRoYXQgb2YgYW4gaW50ZWdlciBjb25zdGFudCwgb3B0aW9uYWxseSBwcmVj ZWRlZA0KPiA+ICsgICAgYnkgYSBwbHVzIG9yIG1pbnVzIHNpZ24sIGJ1dCBub3QgaW5jbHVkaW5n IGFuIGludGVnZXIgc3VmZml4LiBJZiB0aGUNCj4gdmFsdWUNCj4gPiArICAgIG9mIGJhc2UgaXMg YmV0d2VlbiAyIGFuZCAzNiAoaW5jbHVzaXZlKSwgdGhlIGV4cGVjdGVkIGZvcm0gb2YgdGhlDQo+ ID4gc3ViamVjdA0KPiA+ICsgICAgc2VxdWVuY2UgaXMgYSBzZXF1ZW5jZSBvZiBsZXR0ZXJzIGFu ZCBkaWdpdHMgcmVwcmVzZW50aW5nIGFuIGludGVnZXINCj4gPiB3aXRoDQo+ID4gKyAgICB0aGUg cmFkaXggc3BlY2lmaWVkIGJ5IGJhc2UsIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkgYSBwbHVzIG9y IG1pbnVzDQo+IHNpZ24sDQo+ID4gKyAgICBidXQgbm90IGluY2x1ZGluZyBhbiBpbnRlZ2VyIHN1 ZmZpeC4gVGhlIGxldHRlcnMgZnJvbSBhIChvciBBKQ0KPiB0aHJvdWdoIHoNCj4gPiArICAgIChv ciBaKSBhcmUgYXNjcmliZWQgdGhlIHZhbHVlcyAxMCB0aHJvdWdoIDM1OyBvbmx5IGxldHRlcnMg YW5kIGRpZ2l0cw0KPiA+IHdob3NlDQo+ID4gKyAgICBhc2NyaWJlZCB2YWx1ZXMgYXJlIGxlc3Mg dGhhbiB0aGF0IG9mIGJhc2UgYXJlIHBlcm1pdHRlZC4gSWYgdGhlDQo+IHZhbHVlIG9mDQo+ID4g KyAgICBiYXNlIGlzIDE2LCB0aGUgY2hhcmFjdGVycyAweCBvciAwWCBtYXkgb3B0aW9uYWxseSBw cmVjZWRlIHRoZQ0KPiA+IHNlcXVlbmNlIG9mDQo+ID4gKyAgICBsZXR0ZXJzIGFuZCBkaWdpdHMs IGZvbGxvd2luZyB0aGUgc2lnbiBpZiBwcmVzZW50Lg0KPiA+ICsNCj4gPiArICAgIFRoZSBzdWJq ZWN0IHNlcXVlbmNlIGlzIGRlZmluZWQgYXMgdGhlIGxvbmdlc3QgaW5pdGlhbCBzdWJzZXF1ZW5j ZSBvZg0KPiA+IHRoZQ0KPiA+ICsgICAgaW5wdXQgc3RyaW5nLCBzdGFydGluZyB3aXRoIHRoZSBm aXJzdCBub24td2hpdGUtc3BhY2UgY2hhcmFjdGVyLCB0aGF0DQo+IGlzIG9mDQo+ID4gKyAgICB0 aGUgZXhwZWN0ZWQgZm9ybS4gVGhlIHN1YmplY3Qgc2VxdWVuY2UgY29udGFpbnMgbm8gY2hhcmFj dGVycyBpZiB0aGUNCj4gPiBpbnB1dA0KPiA+ICsgICAgc3RyaW5nIGlzIGVtcHR5IG9yIGNvbnNp c3RzIGVudGlyZWx5IG9mIHdoaXRlIHNwYWNlLCBvciBpZiB0aGUgZmlyc3QNCj4gPiArICAgIG5v bi13aGl0ZS1zcGFjZSBjaGFyYWN0ZXIgaXMgb3RoZXIgdGhhbiBhIHNpZ24gb3IgYSBwZXJtaXNz aWJsZQ0KPiBsZXR0ZXINCj4gPiBvciBkaWdpdC4NCj4gPiArDQo+ID4gKyAgICBJZiB0aGUgc3Vi amVjdCBzZXF1ZW5jZSBoYXMgdGhlIGV4cGVjdGVkIGZvcm0gYW5kIHRoZSB2YWx1ZSBvZiBiYXNl DQo+IGlzDQo+ID4gKyAgICB6ZXJvLCB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBzdGFydGlu ZyB3aXRoIHRoZSBmaXJzdCBkaWdpdCBpcw0KPiA+ICsgICAgaW50ZXJwcmV0ZWQgYXMgYW4gaW50 ZWdlciBjb25zdGFudC4gSWYgdGhlIHN1YmplY3Qgc2VxdWVuY2UgaGFzIHRoZQ0KPiA+ICsgICAg ZXhwZWN0ZWQgZm9ybSBhbmQgdGhlIHZhbHVlIG9mIGJhc2UgaXMgYmV0d2VlbiAyIGFuZCAzNiwg aXQgaXMgdXNlZA0KPiBhcw0KPiA+IHRoZQ0KPiA+ICsgICAgYmFzZSBmb3IgY29udmVyc2lvbiwg YXNjcmliaW5nIHRvIGVhY2ggbGV0dGVyIGl0cyB2YWx1ZSBhcyBnaXZlbg0KPiBhYm92ZS4gSWYN Cj4gPiArICAgIHRoZSBzdWJqZWN0IHNlcXVlbmNlIGJlZ2lucyB3aXRoIGEgbWludXMgc2lnbiwg dGhlIHZhbHVlIHJlc3VsdGluZw0KPiBmcm9tDQo+ID4gdGhlDQo+ID4gKyAgICBjb252ZXJzaW9u IGlzIG5lZ2F0ZWQgKGluIHRoZSByZXR1cm4gdHlwZSkuIEEgcG9pbnRlciB0byB0aGUgZmluYWwN Cj4gc3RyaW5nDQo+ID4gKyAgICBpcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5 IGVuZHB0ciwgcHJvdmlkZWQgdGhhdCBlbmRwdHIgaXMNCj4gPiArICAgIG5vdCBhIG51bGwgcG9p bnRlci4NCj4gPiArDQo+ID4gKyAgICBJbiBvdGhlciB0aGFuIHRoZSAiQyIgbG9jYWxlLCBhZGRp dGlvbmFsIGxvY2FsZS1zcGVjaWZpYyBzdWJqZWN0DQo+IHNlcXVlbmNlDQo+ID4gKyAgICBmb3Jt cyBtYXkgYmUgYWNjZXB0ZWQuDQo+ID4gKw0KPiA+ICsgICAgSWYgdGhlIHN1YmplY3Qgc2VxdWVu Y2UgaXMgZW1wdHkgb3IgZG9lcyBub3QgaGF2ZSB0aGUgZXhwZWN0ZWQgZm9ybSwNCj4gPiBubw0K PiA+ICsgICAgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQ7IHRoZSB2YWx1ZSBvZiBucHRyIGlzIHN0 b3JlZCBpbiB0aGUgb2JqZWN0DQo+ID4gcG9pbnRlZA0KPiA+ICsgICAgdG8gYnkgZW5kcHRyLCBw cm92aWRlZCB0aGF0IGVuZHB0ciBpcyBub3QgYSBudWxsIHBvaW50ZXIuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gICBUaGUgc3RydG9sLCBzdHJ0b2xsLCBzdHJ0b3VsLCBhbmQgc3RydG91bGwgZnVu Y3Rpb25zIHJldHVybg0KPiB0aGUNCj4gPiArICAgICAgICAgICAgY29udmVydGVkIHZhbHVlLCBp ZiBhbnkuIElmIG5vIGNvbnZlcnNpb24gY291bGQgYmUgcGVyZm9ybWVkLA0KPiA+IHplcm8NCj4g PiArICAgICAgICAgICAgaXMgcmV0dXJuZWQuIElmIHRoZSBjb3JyZWN0IHZhbHVlIGlzIG91dHNp ZGUgdGhlIHJhbmdlIG9mDQo+ID4gKyAgICAgICAgICAgIHJlcHJlc2VudGFibGUgdmFsdWVzLCBM T05HX01JTiwgTE9OR19NQVgsIExMT05HX01JTiwNCj4gPiBMTE9OR19NQVgsDQo+ID4gKyAgICAg ICAgICAgIFVMT05HX01BWCwgb3IgVUxMT05HX01BWCBpcyByZXR1cm5lZCAoYWNjb3JkaW5nIHRv IHRoZQ0KPiA+IHJldHVybiB0eXBlDQo+ID4gKyAgICAgICAgICAgIGFuZCBzaWduIG9mIHRoZSB2 YWx1ZSwgaWYgYW55KSwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgbWFjcm8NCj4gPiBFUkFOR0UNCj4g PiArICAgICAgICAgICAgaXMgc3RvcmVkIGluIGVycm5vLg0KPiA+ICsqKi8NCj4gPiArbG9uZw0K PiA+ICtzdHJ0b2woY29uc3QgY2hhciAqIG5wdHIsIGNoYXIgKiogZW5kcHRyLCBpbnQgYmFzZSkN Cj4gPiArew0KPiA+ICsgIGNvbnN0IGNoYXIgKnBFbmQ7DQo+ID4gKyAgbG9uZyAgICAgICAgUmVz dWx0ID0gMDsNCj4gPiArICBsb25nICAgICAgICBQcmV2aW91czsNCj4gPiArICBpbnQgICAgICAg ICB0ZW1wOw0KPiA+ICsgIEJPT0xFQU4gICAgIE5lZ2F0aXZlID0gRkFMU0U7DQo+ID4gKw0KPiA+ ICsgIHBFbmQgPSBucHRyOw0KPiA+ICsNCj4gPiArICBpZigoYmFzZSA8IDApIHx8IChiYXNlID09 IDEpIHx8IChiYXNlID4gMzYpKSB7DQo+ID4gKyAgICBpZihlbmRwdHIgIT0gTlVMTCkgew0KPiA+ ICsgICAgKmVuZHB0ciA9IE5VTEw7DQo+ID4gKyAgICB9DQo+ID4gKyAgICByZXR1cm4gMDsNCj4g PiArICB9DQo+ID4gKyAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcy4NCj4gPiArICB3aGlsZShpc3Nw YWNlKCpucHRyKSkgICArK25wdHI7DQo+ID4gKw0KPiA+ICsgIC8vIFByb2Nlc3MgU3ViamVjdCBz ZXF1ZW5jZTogb3B0aW9uYWwgc2lnbiBmb2xsb3dlZCBieSBkaWdpdHMuDQo+ID4gKyAgaWYoKm5w dHIgPT0gJysnKSB7DQo+ID4gKyAgICBOZWdhdGl2ZSA9IEZBTFNFOw0KPiA+ICsgICAgKytucHRy Ow0KPiA+ICsgIH0NCj4gPiArICBlbHNlIGlmKCpucHRyID09ICctJykgew0KPiA+ICsgICAgTmVn YXRpdmUgPSBUUlVFOw0KPiA+ICsgICAgKytucHRyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg aWYoKm5wdHIgPT0gJzAnKSB7ICAvKiBNaWdodCBiZSBPY3RhbCBvciBIZXggKi8NCj4gPiArICAg IGlmKHRvdXBwZXIobnB0clsxXSkgPT0gJ1gnKSB7ICAgLyogTG9va3MgbGlrZSBIZXggKi8NCj4g PiArICAgICAgaWYoKGJhc2UgPT0gMCkgfHwgKGJhc2UgPT0gMTYpKSB7DQo+ID4gKyAgICAgICAg bnB0ciArPSAyOyAgLyogU2tpcCB0aGUgIjBYIiAgICAgICovDQo+ID4gKyAgICAgICAgYmFzZSA9 IDE2OyAgLyogSW4gY2FzZSBiYXNlIHdhcyAwICovDQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0N Cj4gPiArICAgIGVsc2UgeyAgICAvKiBMb29rcyBsaWtlIE9jdGFsICovDQo+ID4gKyAgICAgIGlm KChiYXNlID09IDApIHx8IChiYXNlID09IDgpKSB7DQo+ID4gKyAgICAgICAgKytucHRyOyAgICAg LyogU2tpcCB0aGUgbGVhZGluZyAiMCIgKi8NCj4gPiArICAgICAgICBiYXNlID0gODsgICAvKiBJ biBjYXNlIGJhc2Ugd2FzIDAgICAqLw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKyAg fQ0KPiA+ICsgIGlmKGJhc2UgPT0gMCkgeyAgIC8qIElmIHN0aWxsIHplcm8gdGhlbiBtdXN0IGJl IGRlY2ltYWwgKi8NCj4gPiArICAgIGJhc2UgPSAxMDsNCj4gPiArICB9DQo+ID4gKyAgaWYoKm5w dHIgID09ICcwJykgew0KPiA+ICsgICAgZm9yKCA7ICpucHRyID09ICcwJzsgKytucHRyKTsgIC8q IFNraXAgYW55IHJlbWFpbmluZyBsZWFkaW5nIHplcm9zICovDQo+ID4gKyAgICBwRW5kID0gbnB0 cjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHdoaWxlKCBpc2FsbnVtKCpucHRyKSAmJiAoKHRl bXAgPSBEaWdpdDJWYWwoKm5wdHIpKSA8IGJhc2UpKSB7DQo+ID4gKyAgICBQcmV2aW91cyA9IFJl c3VsdDsNCj4gPiArICAgIFJlc3VsdCA9IChSZXN1bHQgKiBiYXNlKSArIChsb25nIGludCl0ZW1w Ow0KPiA+ICsgICAgaWYoIFJlc3VsdCA8PSBQcmV2aW91cykgeyAgIC8vIERldGVjdCBPdmVyZmxv dw0KPiA+ICsgICAgICBpZihOZWdhdGl2ZSkgew0KPiA+ICsgICAgICAgIFJlc3VsdCA9IExPTkdf TUlOOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIGVsc2Ugew0KPiA+ICsgICAgICAgIFJlc3Vs dCA9IExPTkdfTUFYOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIE5lZ2F0aXZlID0gRkFMU0U7 DQo+ID4gKyAgICAgIGVycm5vID0gRVJBTkdFOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAg IH0NCj4gPiArICAgIHBFbmQgPSArK25wdHI7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmKE5lZ2F0aXZl KSB7DQo+ID4gKyAgICBSZXN1bHQgPSAtUmVzdWx0Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg Ly8gU2F2ZSBwb2ludGVyIHRvIGZpbmFsIHNlcXVlbmNlDQo+ID4gKyAgaWYoZW5kcHRyICE9IE5V TEwpIHsNCj4gPiArICAgICplbmRwdHIgPSAoY2hhciAqKXBFbmQ7DQo+ID4gKyAgfQ0KPiA+ICsg IHJldHVybiBSZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKiBUaGUgc3RydG91bGwgZnVu Y3Rpb24gY29udmVydHMgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgc3RyaW5nDQo+IHBvaW50 ZWQgdG8NCj4gPiArICAgIGJ5IG5wdHIgdG8gdW5zaWduZWQgbG9uZyBsb25nIGludCByZXByZXNl bnRhdGlvbi4NCj4gPiArDQo+ID4gKyAgICBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBzdHJ0b2wg Zm9yIG1vcmUgaW5mb3JtYXRpb24uDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gICBUaGUgc3RydG91 bGwgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmDQo+IG5v DQo+ID4gKyAgICAgICAgICAgIGNvbnZlcnNpb24gY291bGQgYmUgcGVyZm9ybWVkLCB6ZXJvIGlz IHJldHVybmVkLiBJZiB0aGUNCj4gY29ycmVjdA0KPiA+ICsgICAgICAgICAgICB2YWx1ZSBpcyBv dXRzaWRlIHRoZSByYW5nZSBvZiByZXByZXNlbnRhYmxlIHZhbHVlcywNCj4gPiBVTExPTkdfTUFY IGlzDQo+ID4gKyAgICAgICAgICAgIHJldHVybmVkIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hY3Jv IEVSQU5HRSBpcyBzdG9yZWQgaW4NCj4gPiBlcnJuby4NCj4gPiArKiovDQo+ID4gK3Vuc2lnbmVk IGxvbmcgbG9uZw0KPiA+ICtzdHJ0b3VsbChjb25zdCBjaGFyICogbnB0ciwgY2hhciAqKiBlbmRw dHIsIGludCBiYXNlKQ0KPiA+ICt7DQo+ID4gKyAgY29uc3QgY2hhciAgICAgICAgICAgKnBFbmQ7 DQo+ID4gKyAgdW5zaWduZWQgbG9uZyBsb25nICAgIFJlc3VsdCA9IDA7DQo+ID4gKyAgdW5zaWdu ZWQgbG9uZyBsb25nICAgIFByZXZpb3VzOw0KPiA+ICsgIGludCAgICAgICAgICAgICAgICAgICB0 ZW1wOw0KPiA+ICsNCj4gPiArICBwRW5kID0gbnB0cjsNCj4gPiArDQo+ID4gKyAgaWYoKGJhc2Ug PCAwKSB8fCAoYmFzZSA9PSAxKSB8fCAoYmFzZSA+IDM2KSkgew0KPiA+ICsgICAgaWYoZW5kcHRy ICE9IE5VTEwpIHsNCj4gPiArICAgICplbmRwdHIgPSBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsg ICAgcmV0dXJuIDA7DQo+ID4gKyAgfQ0KPiA+ICsgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMuDQo+ ID4gKyAgd2hpbGUoaXNzcGFjZSgqbnB0cikpICAgKytucHRyOw0KPiA+ICsNCj4gPiArICAvLyBQ cm9jZXNzIFN1YmplY3Qgc2VxdWVuY2U6IG9wdGlvbmFsICsgc2lnbiBmb2xsb3dlZCBieSBkaWdp dHMuDQo+ID4gKyAgaWYoKm5wdHIgPT0gJysnKSB7DQo+ID4gKyAgICArK25wdHI7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZigqbnB0ciA9PSAnMCcpIHsgIC8qIE1pZ2h0IGJlIE9jdGFsIG9y IEhleCAqLw0KPiA+ICsgICAgaWYodG91cHBlcihucHRyWzFdKSA9PSAnWCcpIHsgICAvKiBMb29r cyBsaWtlIEhleCAqLw0KPiA+ICsgICAgICBpZigoYmFzZSA9PSAwKSB8fCAoYmFzZSA9PSAxNikp IHsNCj4gPiArICAgICAgICBucHRyICs9IDI7ICAvKiBTa2lwIHRoZSAiMFgiICAgICAgKi8NCj4g PiArICAgICAgICBiYXNlID0gMTY7ICAvKiBJbiBjYXNlIGJhc2Ugd2FzIDAgKi8NCj4gPiArICAg ICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgICAgZWxzZSB7ICAgIC8qIExvb2tzIGxpa2UgT2N0YWwg Ki8NCj4gPiArICAgICAgaWYoKGJhc2UgPT0gMCkgfHwgKGJhc2UgPT0gOCkpIHsNCj4gPiArICAg ICAgICArK25wdHI7ICAgICAvKiBTa2lwIHRoZSBsZWFkaW5nICIwIiAqLw0KPiA+ICsgICAgICAg IGJhc2UgPSA4OyAgIC8qIEluIGNhc2UgYmFzZSB3YXMgMCAgICovDQo+ID4gKyAgICAgIH0NCj4g PiArICAgIH0NCj4gPiArICB9DQo+ID4gKyAgaWYoYmFzZSA9PSAwKSB7ICAgLyogSWYgc3RpbGwg emVybyB0aGVuIG11c3QgYmUgZGVjaW1hbCAqLw0KPiA+ICsgICAgYmFzZSA9IDEwOw0KPiA+ICsg IH0NCj4gPiArICBpZigqbnB0ciAgPT0gJzAnKSB7DQo+ID4gKyAgICBmb3IoIDsgKm5wdHIgPT0g JzAnOyArK25wdHIpOyAgLyogU2tpcCBhbnkgcmVtYWluaW5nIGxlYWRpbmcgemVyb3MgKi8NCj4g PiArICAgIHBFbmQgPSBucHRyOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgd2hpbGUoIGlzYWxu dW0oKm5wdHIpICYmICgodGVtcCA9IERpZ2l0MlZhbCgqbnB0cikpIDwgYmFzZSkpIHsNCj4gPiAr ICAgIFByZXZpb3VzID0gUmVzdWx0Ow0KPiA+ICsgICAgUmVzdWx0ID0gRGl2VTY0eDMyIChSZXN1 bHQsIGJhc2UpICsgKHVuc2lnbmVkIGxvbmcgbG9uZyl0ZW1wOw0KPiA+ICsgICAgaWYoIFJlc3Vs dCA8IFByZXZpb3VzKSAgeyAgIC8vIElmIHdlIG92ZXJmbG93ZWQNCj4gPiArICAgICAgUmVzdWx0 ID0gVUxMT05HX01BWDsNCj4gPiArICAgICAgZXJybm8gPSBFUkFOR0U7DQo+ID4gKyAgICAgIGJy ZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgcEVuZCA9ICsrbnB0cjsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIC8vIFNhdmUgcG9pbnRlciB0byBmaW5hbCBzZXF1ZW5jZQ0KPiA+ICsgIGlmKGVu ZHB0ciAhPSBOVUxMKSB7DQo+ID4gKyAgICAqZW5kcHRyID0gKGNoYXIgKilwRW5kOw0KPiA+ICsg IH0NCj4gPiArICByZXR1cm4gUmVzdWx0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBlZGsyIEphbnNzb24gcG9ydCBkb2VzIG5vdCBzdXBwb3J0IGRvdWJsZXMsIHNpbXBseSByZXR1 cm4gMC4NCj4gPiArDQo+ID4gKyAgVGhlc2UgY29udmVyc2lvbiBmdW5jdGlvbnMgY29udmVydCB0 aGUgaW5pdGlhbCBwb3J0aW9uIG9mIHRoZSBzdHJpbmcNCj4gPiArICBwb2ludGVkIHRvIGJ5IG5w dHIgdG8gZG91YmxlLCBmbG9hdCwgYW5kIGxvbmcgZG91YmxlIHJlcHJlc2VudGF0aW9uLA0KPiA+ ICsgIHJlc3BlY3RpdmVseS4NCj4gPiArDQo+ID4gKyAgVGhlIHN0cnRvZCgpLCBzdHJ0b2YoKSwg YW5kIHN0cnRvbGQoKSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb252ZXJ0ZWQNCj4gPiArICB2YWx1 ZSwgaWYgYW55Lg0KPiA+ICsNCj4gPiArICBJZiBlbmRwdHIgaXMgbm90IE5VTEwsIGEgcG9pbnRl ciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYXN0DQo+IGNoYXJhYy0NCj4gPiArICB0ZXIg dXNlZCBpbiB0aGUgY29udmVyc2lvbiBpcyBzdG9yZWQgaW4gdGhlIGxvY2F0aW9uIHJlZmVyZW5j ZWQgYnkNCj4gPiArICBlbmRwdHIuDQo+ID4gKw0KPiA+ICsgIElmIG5vIGNvbnZlcnNpb24gaXMg cGVyZm9ybWVkLCB6ZXJvIGlzIHJldHVybmVkIGFuZCB0aGUgdmFsdWUgb2YgbnB0cg0KPiBpcw0K PiA+ICsgIHN0b3JlZCBpbiB0aGUgbG9jYXRpb24gcmVmZXJlbmNlZCBieSBlbmRwdHIuDQo+ID4g Kw0KPiA+ICsgIElmIHRoZSBjb3JyZWN0IHZhbHVlIHdvdWxkIGNhdXNlIG92ZXJmbG93LCBwbHVz IG9yIG1pbnVzIEhVR0VfVkFMLA0KPiA+ICsgIEhVR0VfVkFMRiwgb3IgSFVHRV9WQUxMIGlzIHJl dHVybmVkIChhY2NvcmRpbmcgdG8gdGhlIHNpZ24gYW5kIHR5cGUNCj4gb2YNCj4gPiArICB0aGUg cmV0dXJuIHZhbHVlKSwgYW5kIEVSQU5HRSBpcyBzdG9yZWQgaW4gZXJybm8uICBJZiB0aGUgY29y cmVjdCB2YWx1ZQ0KPiA+ICsgIHdvdWxkIGNhdXNlIHVuZGVyZmxvdywgemVybyBpcyByZXR1cm5l ZCBhbmQgRVJBTkdFIGlzIHN0b3JlZCBpbiBlcnJuby4NCj4gPiArDQo+ID4gKyAgQHJldHVybiAg UmV0dXJuIDAuDQo+ID4gKyoqLw0KPiA+ICtkb3VibGUNCj4gPiArc3RydG9kIChjb25zdCBjaGFy ICogX19yZXN0cmljdCBucHRyLCBjaGFyICoqIF9fcmVzdHJpY3QgZW5kcHRyKSB7DQo+ID4gKyAg ICBpZihlbmRwdHIpDQo+ID4gKyAgICAgICplbmRwdHIgPSAoY2hhciAqKShucHRyICsgc3RybGVu KG5wdHIpKTsNCj4gPiArDQo+ID4gKyAgICByZXR1cm4gKGRvdWJsZSkwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBBbGxvY2F0ZSBhbmQgemVyby1pbml0aWFsaXplIGFycmF5Lg0K PiA+ICsqKi8NCj4gPiArdm9pZCAqDQo+ID4gK2NhbGxvYyhzaXplX3QgTnVtLCBzaXplX3QgU2l6 ZSkNCj4gPiArew0KPiA+ICsgIHZvaWQgICAgICAgKlJldFZhbDsNCj4gPiArICBzaXplX3QgICAg ICBOdW1TaXplOw0KPiA+ICsNCj4gPiArICBOdW1TaXplID0gTnVtICogU2l6ZTsNCj4gPiArICBS ZXRWYWwgID0gTlVMTDsNCj4gPiArICBpZiAoTnVtU2l6ZSAhPSAwKSB7DQo+ID4gKyAgUmV0VmFs ID0gbWFsbG9jKE51bVNpemUpOw0KPiA+ICsgIGlmKCBSZXRWYWwgIT0gTlVMTCkgew0KPiA+ICsg ICAgKFZPSUQpWmVyb01lbSggUmV0VmFsLCBOdW1TaXplKTsNCj4gPiArICB9DQo+ID4gKyAgfQ0K PiA+ICsgIERFQlVHKChERUJVR19QT09MLCAiMHglcCA9IGNhbGxvYyglZCwgJWQpXG4iLCBSZXRW YWwsIE51bSwgU2l6ZSkpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gUmV0VmFsOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyAgVGhlIGFycmF5cyBnaXZlIHRoZSBjdW11bGF0aXZlIG51 bWJlciBvZiBkYXlzIHVwIHRvIHRoZSBmaXJzdCBvZiB0aGUNCj4gPiArLy8gIG1vbnRoIG51bWJl ciB1c2VkIGFzIHRoZSBpbmRleCAoMSAtPiAxMikgZm9yIHJlZ3VsYXIgYW5kIGxlYXAgeWVhcnMu DQo+ID4gKy8vICBUaGUgdmFsdWUgYXQgaW5kZXggMTMgaXMgZm9yIHRoZSB3aG9sZSB5ZWFyLg0K PiA+ICsvLw0KPiA+ICtVSU5UTiBDdW11bGF0aXZlRGF5c1syXVsxNF0gPSB7DQo+ID4gKyAgew0K PiA+ICsgICAgMCwNCj4gPiArICAgIDAsDQo+ID4gKyAgICAzMSwNCj4gPiArICAgIDMxICsgMjgs DQo+ID4gKyAgICAzMSArIDI4ICsgMzEsDQo+ID4gKyAgICAzMSArIDI4ICsgMzEgKyAzMCwNCj4g PiArICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEsDQo+ID4gKyAgICAzMSArIDI4ICsgMzEgKyAz MCArIDMxICsgMzAsDQo+ID4gKyAgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSwN Cj4gPiArICAgIDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEsDQo+ID4gKyAg ICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAsDQo+ID4gKyAgICAz MSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAzMSwNCj4gPiArICAg IDMxICsgMjggKyAzMSArIDMwICsgMzEgKyAzMCArIDMxICsgMzEgKyAzMCArIDMxICsgMzAsDQo+ ID4gKyAgICAzMSArIDI4ICsgMzEgKyAzMCArIDMxICsgMzAgKyAzMSArIDMxICsgMzAgKyAzMSAr IDMwICsgMzENCj4gPiArICB9LA0KPiA+ICsgIHsNCj4gPiArICAgIDAsDQo+ID4gKyAgICAwLA0K PiA+ICsgICAgMzEsDQo+ID4gKyAgICAzMSArIDI5LA0KPiA+ICsgICAgMzEgKyAyOSArIDMxLA0K PiA+ICsgICAgMzEgKyAyOSArIDMxICsgMzAsDQo+ID4gKyAgICAzMSArIDI5ICsgMzEgKyAzMCAr IDMxLA0KPiA+ICsgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMwLA0KPiA+ICsgICAgMzEg KyAyOSArIDMxICsgMzAgKyAzMSArIDMwICsgMzEsDQo+ID4gKyAgICAzMSArIDI5ICsgMzEgKyAz MCArIDMxICsgMzAgKyAzMSArIDMxLA0KPiA+ICsgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSAr IDMwICsgMzEgKyAzMSArIDMwLA0KPiA+ICsgICAgMzEgKyAyOSArIDMxICsgMzAgKyAzMSArIDMw ICsgMzEgKyAzMSArIDMwICsgMzEsDQo+ID4gKyAgICAzMSArIDI5ICsgMzEgKyAzMCArIDMxICsg MzAgKyAzMSArIDMxICsgMzAgKyAzMSArIDMwLA0KPiA+ICsgICAgMzEgKyAyOSArIDMxICsgMzAg KyAzMSArIDMwICsgMzEgKyAzMSArIDMwICsgMzEgKyAzMCArIDMxDQo+ID4gKyAgfQ0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArI2RlZmluZSBJc0xlYXAoeSkgICAoKCh5KSAlIDQpID09IDAgJiYgKCgo eSkgJSAxMDApICE9IDAgfHwgKCh5KSAlIDQwMCkNCj4gPT0gMCkpDQo+ID4gKyNkZWZpbmUgU0VD U1BFUk1JTiAgKDYwKQ0KPiA+ICsjZGVmaW5lIFNFQ1NQRVJIT1VSICg2MCAqIDYwKQ0KPiA+ICsj ZGVmaW5lIFNFQ1NQRVJEQVkgICgyNCAqIFNFQ1NQRVJIT1VSKQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgR2V0IHRoZSBzeXN0ZW0gdGltZSBhcyBzZWNvbmRzIGVsYXBzZWQgc2luY2UgbWlkbmln aHQsIEphbnVhcnkgMSwgMTk3MC4NCj4gPiArKiovDQo+ID4gK3RpbWVfdCB0aW1lICh0aW1lX3Qg KnRpbWVyKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1RJTUUgIFRpbWU7DQo+ID4gKyAgdGltZV90ICAg IENhbFRpbWU7DQo+ID4gKyAgVUlOVE4gICAgIFllYXI7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgaW5mb3JtYXRpb24NCj4gPiArICAv Lw0KPiA+ICsgIGdSVC0+R2V0VGltZSAoJlRpbWUsIE5VTEwpOw0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIFllYXJzIEhhbmRsaW5nDQo+ID4gKyAgLy8gVVRpbWUgc2hvdWxkIG5vdyBiZSBz ZXQgdG8gMDA6MDA6MDAgb24gSmFuIDEgb2YgdGhlIGN1cnJlbnQgeWVhci4NCj4gPiArICAvLw0K PiA+ICsgIGZvciAoWWVhciA9IDE5NzAsIENhbFRpbWUgPSAwOyBZZWFyICE9IFRpbWUuWWVhcjsg WWVhcisrKSB7DQo+ID4gKyAgICBDYWxUaW1lID0gQ2FsVGltZSArICh0aW1lX3QpKEN1bXVsYXRp dmVEYXlzW0lzTGVhcChZZWFyKV1bMTNdICoNCj4gPiBTRUNTUEVSREFZKTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQWRkIGluIG51bWJlciBvZiBzZWNvbmRzIGZvciBj dXJyZW50IE1vbnRoLCBEYXksIEhvdXIsIE1pbnV0ZSwNCj4gPiBTZWNvbmRzLCBhbmQgVGltZVpv bmUgYWRqdXN0bWVudA0KPiA+ICsgIC8vDQo+ID4gKyAgQ2FsVGltZSA9IENhbFRpbWUgKw0KPiA+ ICsgICAgICAgICAgICAodGltZV90KSgoVGltZS5UaW1lWm9uZSAhPSBFRklfVU5TUEVDSUZJRURf VElNRVpPTkUpID8NCj4gPiAoVGltZS5UaW1lWm9uZSAqIDYwKSA6IDApICsNCj4gPiArICAgICAg ICAgICAgKHRpbWVfdCkoQ3VtdWxhdGl2ZURheXNbSXNMZWFwKFRpbWUuWWVhcildW1RpbWUuTW9u dGhdICoNCj4gPiBTRUNTUEVSREFZKSArDQo+ID4gKyAgICAgICAgICAgICh0aW1lX3QpKCgoVGlt ZS5EYXkgPiAwKSA/IFRpbWUuRGF5IC0gMSA6IDApICogU0VDU1BFUkRBWSkgKw0KPiA+ICsgICAg ICAgICAgICAodGltZV90KShUaW1lLkhvdXIgKiBTRUNTUEVSSE9VUikgKw0KPiA+ICsgICAgICAg ICAgICAodGltZV90KShUaW1lLk1pbnV0ZSAqIDYwKSArDQo+ID4gKyAgICAgICAgICAgICh0aW1l X3QpVGltZS5TZWNvbmQ7DQo+ID4gKw0KPiA+ICsgIGlmICh0aW1lciAhPSBOVUxMKSB7DQo+ID4g KyAgICAqdGltZXIgPSBDYWxUaW1lOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIENh bFRpbWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3R5cGVkZWYNCj4gPiAraW50DQo+ID4gKygqU09S VF9DT01QQVJFKSgNCj4gPiArICBJTiAgVk9JRCAgKkJ1ZmZlcjEsDQo+ID4gKyAgSU4gIFZPSUQg ICpCdWZmZXIyDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIER1cGxpY2F0ZWQg ZnJvbSBFREtJSSBCYXNlU29ydExpYiBmb3IgcXNvcnQoKSB3cmFwcGVyDQo+ID4gKyAgQHBhcmFt W2luLCBvdXRdIEJ1ZmZlclRvU29ydCAgIG9uIGNhbGwgYSBCdWZmZXIgb2YgKHBvc3NpYmx5IHNv cnRlZCkNCj4gPiBlbGVtZW50cw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvbiByZXR1cm4gYSBidWZmZXIgb2Ygc29ydGVkDQo+ID4gZWxlbWVudHMNCj4gPiArICBAcGFy YW1baW5dIENvdW50ICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUN Cj4gPiBidWZmZXIgdG8gc29ydA0KPiA+ICsgIEBwYXJhbVtpbl0gRWxlbWVudFNpemUgICAgICAg ICBTaXplIG9mIGFuIGVsZW1lbnQgaW4gYnl0ZXMNCj4gPiArICBAcGFyYW1baW5dIENvbXBhcmVG dW5jdGlvbiAgICAgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcGVyZm9ybSB0aGUNCj4gPiBjb21w YXJpc29uDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFueSAyIGVs ZW1lbnRzDQo+ID4gKyAgQHBhcmFtW2luXSBCdWZmZXIgICAgICAgICAgICAgIEJ1ZmZlciBvZiBz aXplIEVsZW1lbnRTaXplIGZvciB1c2UgaW4NCj4gPiBzd2FwcGluZw0KPiA+ICsqKi8NCj4gPiAr U1RBVElDDQo+ID4gK1ZPSUQNCj4gPiArUXVpY2tTb3J0V29ya2VyICgNCj4gPiArICBJTiBPVVQg ICAgVk9JRCAgICAgICAgICAqQnVmZmVyVG9Tb3J0LA0KPiA+ICsgIElOIENPTlNUICBVSU5UTiAg ICAgICAgIENvdW50LA0KPiA+ICsgIElOIENPTlNUICBVSU5UTiAgICAgICAgIEVsZW1lbnRTaXpl LA0KPiA+ICsgIElOICAgICAgICBTT1JUX0NPTVBBUkUgIENvbXBhcmVGdW5jdGlvbiwNCj4gPiAr ICBJTiAgICAgICAgVk9JRCAgICAgICAgICAqQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgVk9JRCAgICAgICAgKlBpdm90Ow0KPiA+ICsgIFVJTlROICAgICAgIExvb3BDb3VudDsNCj4g PiArICBVSU5UTiAgICAgICBOZXh0U3dhcExvY2F0aW9uOw0KPiA+ICsNCj4gPiArICBBU1NFUlQo QnVmZmVyVG9Tb3J0ICAgICE9IE5VTEwpOw0KPiA+ICsgIEFTU0VSVChDb21wYXJlRnVuY3Rpb24g IT0gTlVMTCk7DQo+ID4gKyAgQVNTRVJUKEJ1ZmZlciAgICAgICAgICAhPSBOVUxMKTsNCj4gPiAr DQo+ID4gKyAgaWYgKENvdW50IDwgMiB8fCBFbGVtZW50U2l6ZSAgPCAxKSB7DQo+ID4gKyAgICBy ZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBOZXh0U3dhcExvY2F0aW9uID0gMDsNCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBQaWNrIGEgcGl2b3QgKHdlIGNob29zZSBsYXN0IGVs ZW1lbnQpDQo+ID4gKyAgLy8NCj4gPiArICBQaXZvdCA9ICgoVUlOVDggKilCdWZmZXJUb1NvcnQg KyAoKENvdW50IC0gMSkgKiBFbGVtZW50U2l6ZSkpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsg IC8vIE5vdyBnZXQgdGhlIHBpdm90IHN1Y2ggdGhhdCBhbGwgb24gImxlZnQiIGFyZSBiZWxvdyBp dA0KPiA+ICsgIC8vIGFuZCBldmVyeXRoaW5nICJyaWdodCIgYXJlIGFib3ZlIGl0DQo+ID4gKyAg Ly8NCj4gPiArICBmb3IgKExvb3BDb3VudCA9IDA7IExvb3BDb3VudCA8IENvdW50IC0gMTsgIExv b3BDb3VudCsrKQ0KPiA+ICsgIHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJZiB0aGUgZWxl bWVudCBpcyBsZXNzIHRoYW4gdGhlIHBpdm90DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKENv bXBhcmVGdW5jdGlvbiAoKFZPSUQgKikoKFVJTlQ4ICopQnVmZmVyVG9Tb3J0ICsgKChMb29wQ291 bnQpICoNCj4gPiBFbGVtZW50U2l6ZSkpLCBQaXZvdCkgPD0gMCkgew0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICAvLyBTd2FwDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIENvcHlNZW0gKEJ1 ZmZlciwgKFVJTlQ4ICopQnVmZmVyVG9Tb3J0ICsgKE5leHRTd2FwTG9jYXRpb24gKg0KPiA+IEVs ZW1lbnRTaXplKSwgRWxlbWVudFNpemUpOw0KPiA+ICsgICAgICBDb3B5TWVtICgoVUlOVDggKilC dWZmZXJUb1NvcnQgKyAoTmV4dFN3YXBMb2NhdGlvbiAqDQo+ID4gRWxlbWVudFNpemUpLCAoVUlO VDggKilCdWZmZXJUb1NvcnQgKyAoKExvb3BDb3VudCkgKiBFbGVtZW50U2l6ZSksDQo+ID4gRWxl bWVudFNpemUpOw0KPiA+ICsgICAgICBDb3B5TWVtICgoVUlOVDggKilCdWZmZXJUb1NvcnQgKyAo KExvb3BDb3VudCkgKiBFbGVtZW50U2l6ZSksDQo+ID4gQnVmZmVyLCBFbGVtZW50U2l6ZSk7DQo+ ID4gKw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBJbmNyZW1lbnQgTmV4dFN3YXBMb2Nh dGlvbg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBOZXh0U3dhcExvY2F0aW9uKys7DQo+ID4g KyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU3dhcCBwaXZvdCB0byBpdCdz IGZpbmFsIHBvc2l0aW9uIChOZXh0U3dhcExvY2FpdG9uKQ0KPiA+ICsgIC8vDQo+ID4gKyAgQ29w eU1lbSAoQnVmZmVyLCBQaXZvdCwgRWxlbWVudFNpemUpOw0KPiA+ICsgIENvcHlNZW0gKFBpdm90 LCAoVUlOVDggKilCdWZmZXJUb1NvcnQgKyAoTmV4dFN3YXBMb2NhdGlvbiAqDQo+ID4gRWxlbWVu dFNpemUpLCBFbGVtZW50U2l6ZSk7DQo+ID4gKyAgQ29weU1lbSAoKFVJTlQ4ICopQnVmZmVyVG9T b3J0ICsgKE5leHRTd2FwTG9jYXRpb24gKiBFbGVtZW50U2l6ZSksDQo+ID4gQnVmZmVyLCBFbGVt ZW50U2l6ZSk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTm93IHJlY3Vyc2Ugb24gMiBw YXJpdGlhbCBsaXN0cy4gIE5laXRoZXIgb2YgdGhlc2Ugd2lsbCBoYXZlIHRoZQ0KPiAncGl2b3Qn DQo+ID4gZWxlbWVudC4NCj4gPiArICAvLyBJRSBsaXN0IGlzIHNvcnRlZCBsZWZ0IGhhbGYsIHBp dm90IGVsZW1lbnQsIHNvcnRlZCByaWdodCBoYWxmLi4uDQo+ID4gKyAgLy8NCj4gPiArICBRdWlj a1NvcnRXb3JrZXIgKA0KPiA+ICsgICAgQnVmZmVyVG9Tb3J0LA0KPiA+ICsgICAgTmV4dFN3YXBM b2NhdGlvbiwNCj4gPiArICAgIEVsZW1lbnRTaXplLA0KPiA+ICsgICAgQ29tcGFyZUZ1bmN0aW9u LA0KPiA+ICsgICAgQnVmZmVyDQo+ID4gKyAgICApOw0KPiA+ICsNCj4gPiArICBRdWlja1NvcnRX b3JrZXIgKA0KPiA+ICsgICAgKFVJTlQ4ICopQnVmZmVyVG9Tb3J0ICsgKE5leHRTd2FwTG9jYXRp b24gKyAxKSAqIEVsZW1lbnRTaXplLA0KPiA+ICsgICAgQ291bnQgLSBOZXh0U3dhcExvY2F0aW9u IC0gMSwNCj4gPiArICAgIEVsZW1lbnRTaXplLA0KPiA+ICsgICAgQ29tcGFyZUZ1bmN0aW9uLA0K PiA+ICsgICAgQnVmZmVyDQo+ID4gKyAgICApOw0KPiA+ICsNCj4gPiArICByZXR1cm47DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFBlcmZvcm1zIGEgcXVpY2sgc29ydA0KPiA+ICsq Ki8NCj4gPiArdm9pZCBxc29ydCAodm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHdpZHRo LCBpbnQgKCpjb21wYXJlKShjb25zdA0KPiB2b2lkICosDQo+ID4gY29uc3Qgdm9pZCAqKSkNCj4g PiArew0KPiA+ICsgIFZPSUQgICpCdWZmZXI7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoYmFzZSAg ICAhPSBOVUxMKTsNCj4gPiArICBBU1NFUlQgKGNvbXBhcmUgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gVXNlIENSVC1zdHlsZSBtYWxsb2MgdG8gY292ZXIgQlMgYW5kIFJU IG1lbW9yeSBhbGxvY2F0aW9uLg0KPiA+ICsgIC8vDQo+ID4gKyAgQnVmZmVyID0gbWFsbG9jICh3 aWR0aCk7DQo+ID4gKyAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gUmUtdXNlIFBlcmZvcm1RdWlja1NvcnQoKSBmdW5jdGlvbiBJbXBsZW1lbnRh dGlvbiBpbiBFREtJSQ0KPiA+IEJhc2VTb3J0TGliLg0KPiA+ICsgIC8vDQo+ID4gKyAgUXVpY2tT b3J0V29ya2VyIChiYXNlLCAoVUlOVE4pbnVtLCAoVUlOVE4pd2lkdGgsDQo+ID4gKFNPUlRfQ09N UEFSRSljb21wYXJlLCBCdWZmZXIpOw0KPiA+ICsNCj4gPiArICBmcmVlIChCdWZmZXIpOw0KPiA+ ICsgIHJldHVybjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IGNoYXJhY3Rl ciBmcm9tIHN0cmVhbSwgd2UgZG9uJ3Qgc3VwcG9ydCBmaWxlIG9wZXJhc3Rpb24gb24gZWRrMg0K PiBKU09ODQo+ID4gbGlicmFyeS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBSZXR1cm5zIHRoZSBj aGFyYWN0ZXIgY3VycmVudGx5IHBvaW50ZWQgYnkgdGhlIGludGVybmFsIGZpbGUNCj4gPiBwb3Np dGlvbiBpbmRpY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBzdHJlYW0NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtpbnQgZmdldGMoRklMRSAqIF9GaWxlKXsNCj4gPiArICAgcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExp YlN1cHBvcnQuaA0KPiA+IGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSmFuc3NvbkNydExp YlN1cHBvcnQuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MC4uNDBhOThlNDg1Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNoUGtnL0xp YnJhcnkvSnNvbkxpYi9KYW5zc29uQ3J0TGliU3VwcG9ydC5oDQo+ID4gQEAgLTAsMCArMSwxOTYg QEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgQ1JUIHdyYXBwZXIgaGVhZCBmdW5jdGlvbnMgZm9y IGphbnNzb24gc3lzdGVtIGNhbGwuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0IChjKSAyMDE5LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyAoQykgQ29w eXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+ DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBKQU5TU09OX0NSVF9M SUJfU1VQUE9SVF9IXw0KPiA+ICsjZGVmaW5lIEpBTlNTT05fQ1JUX0xJQl9TVVBQT1JUX0hfDQo+ ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIu aD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gPiArDQo+ID4gKyNkZWZp bmUgTUFYX1NUUklOR19TSVpFICAweDEwMDAwMDAwDQo+ID4gKw0KPiA+ICsvLyBNaW5pbXVtIHZh bHVlIGZvciBhbiBvYmplY3Qgb2YgdHlwZSBsb25nIGxvbmcgaW50Lg0KPiA+ICsjZGVmaW5lIExM T05HX01JTiAgICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMUxMKSAgLy8gLSgyXjYzIC0gMSkN Cj4gPiArDQo+ID4gKy8vIE1heGltdW0gdmFsdWUgZm9yIGFuIG9iamVjdCBvZiB0eXBlIGxvbmcg bG9uZyBpbnQuDQo+ID4gKyNkZWZpbmUgTExPTkdfTUFYICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xM IC8vIDJeNjMgLSAxDQo+ID4gKw0KPiA+ICsvLyBXZSBkb250IHN1cHBvcnQgZG91YmxlIG9uIGVk azINCj4gPiArI2RlZmluZSBIVUdFX1ZBTCAgICAwDQo+ID4gKw0KPiA+ICsjaWYgZGVmaW5lZChN REVfQ1BVX1g2NCkgfHwgZGVmaW5lZChNREVfQ1BVX0FBUkNINjQpIHx8DQo+ID4gZGVmaW5lZChN REVfQ1BVX0lBNjQpIHx8IGRlZmluZWQoTURFX0NQVV9SSVNDVjY0KQ0KPiA+ICsvLw0KPiA+ICsv LyBXaXRoIEdDQyB3ZSB3b3VsZCBub3JtYWxseSB1c2UgU0lYVFlfRk9VUl9CSVRfTE9ORywgYnV0 IE1TVkMNCj4gPiBuZWVkcw0KPiA+ICsvLyBTSVhUWV9GT1VSX0JJVCwgYmVjYXVzZSAnbG9uZycg aXMgMzItYml0IGFuZCBvbmx5ICdsb25nIGxvbmcnIGlzDQo+ID4gKy8vIDY0LWJpdC4gU2luY2Ug dXNpbmcgJ2xvbmcgbG9uZycgd29ya3MgZmluZSBvbiBHQ0MgdG9vLCBqdXN0IGRvIHRoYXQuDQo+ ID4gKy8vDQo+ID4gKyNkZWZpbmUgU0lYVFlfRk9VUl9CSVQNCj4gPiArI2VsaWYgZGVmaW5lZChN REVfQ1BVX0lBMzIpIHx8IGRlZmluZWQoTURFX0NQVV9BUk0pIHx8DQo+ID4gZGVmaW5lZChNREVf Q1BVX0VCQykNCj4gPiArI2RlZmluZSBUSElSVFlfVFdPX0JJVA0KPiA+ICsjZW5kaWYNCj4gPiAr DQo+ID4gKy8vDQo+ID4gKy8vIE1hcCBhbGwgdmFfeHh4eCBlbGVtZW50cyB0byBWQV94eHggZGVm aW5lZCBpbg0KPiBNZGVQa2cvSW5jbHVkZS9CYXNlLmgNCj4gPiArLy8NCj4gPiArI2lmICFkZWZp bmVkKF9fQ0NfQVJNKSAvLyBpZiB2YV9saXN0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQNCj4gPiAr I2RlZmluZSB2YV9saXN0ICAgVkFfTElTVA0KPiA+ICsjZGVmaW5lIHZhX2FyZyAgICBWQV9BUkcN Cj4gPiArI2RlZmluZSB2YV9zdGFydCAgVkFfU1RBUlQNCj4gPiArI2RlZmluZSB2YV9lbmQgICAg VkFfRU5EDQo+ID4gKyNlbHNlIC8vIF9fQ0NfQVJNDQo+ID4gKyNkZWZpbmUgdmFfc3RhcnQoTWFy a2VyLCBQYXJhbWV0ZXIpICAgX192YV9zdGFydChNYXJrZXIsIFBhcmFtZXRlcikNCj4gPiArI2Rl ZmluZSB2YV9hcmcoTWFya2VyLCBUWVBFKSAgICAgICAgICBfX3ZhX2FyZyhNYXJrZXIsIFRZUEUp DQo+ID4gKyNkZWZpbmUgdmFfZW5kKE1hcmtlcikgICAgICAgICAgICAgICAgKCh2b2lkKTApDQo+ ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gRGVmaW5pdGlvbnMgZm9yIGdsb2Jh bCBjb25zdGFudHMgdXNlZCBieSBDUlQgbGlicmFyeSByb3V0aW5lcw0KPiA+ICsvLw0KPiA+ICsj ZGVmaW5lIEVJTlZBTCAgICAgICAyMiAgICAgICAgICAgICAgIC8qIEludmFsaWQgYXJndW1lbnQg Ki8NCj4gPiArI2RlZmluZSBJTlRfTUFYICAgICAgMHg3RkZGRkZGRiAgICAgICAvKiBNYXhpbXVt IChzaWduZWQpIGludCB2YWx1ZQ0KPiA+ICovDQo+ID4gKyNkZWZpbmUgTE9OR19NQVggICAgIDBY N0ZGRkZGRkZMICAgICAgLyogbWF4IHZhbHVlIGZvciBhIGxvbmcgKi8NCj4gPiArI2RlZmluZSBM T05HX01JTiAgICAgKC1MT05HX01BWC0xKSAgICAvKiBtaW4gdmFsdWUgZm9yIGEgbG9uZyAqLw0K PiA+ICsjZGVmaW5lIFVMT05HX01BWCAgICAweEZGRkZGRkZGICAgICAgIC8qIE1heGltdW0gdW5z aWduZWQgbG9uZw0KPiA+IHZhbHVlICovDQo+ID4gKyNkZWZpbmUgQ0hBUl9CSVQgICAgIDggICAg ICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICovDQo+ID4gKw0KPiA+ICsv LyBNYXhpbXVtIHZhbHVlIGZvciBhbiBvYmplY3Qgb2YgdHlwZSB1bnNpZ25lZCBsb25nIGxvbmcg aW50Lg0KPiA+ICsjZGVmaW5lIFVMTE9OR19NQVggIDB4RkZGRkZGRkZGRkZGRkZGRlVMTCAvLyAy XjY0IC0gMQ0KPiA+ICsvLyBNYXhpbXVtIHZhbHVlIGZvciBhbiBvYmplY3Qgb2YgdHlwZSB1bnNp Z25lZCBjaGFyLg0KPiA+ICsjZGVmaW5lIFVDSEFSX01BWCAgIDI1NSAgLy8gMl44IC0gMQ0KPiA+ ICsNCj4gPiArLy8NCj4gPiArLy8gQmFzaWMgdHlwZXMgbWFwcGluZw0KPiA+ICsvLw0KPiA+ICt0 eXBlZGVmIFVJTlROICAgICAgICAgIHNpemVfdDsNCj4gPiArdHlwZWRlZiBJTlROICAgICAgICAg ICBzc2l6ZV90Ow0KPiA+ICt0eXBlZGVmIElOVDMyICAgICAgICAgIHRpbWVfdDsNCj4gPiArdHlw ZWRlZiBVSU5UOCAgICAgICAgICBfX3VpbnQ4X3Q7DQo+ID4gK3R5cGVkZWYgVUlOVDggICAgICAg ICAgc2FfZmFtaWx5X3Q7DQo+ID4gK3R5cGVkZWYgVUlOVDMyICAgICAgICAgdWlkX3Q7DQo+ID4g K3R5cGVkZWYgVUlOVDMyICAgICAgICAgZ2lkX3Q7DQo+ID4gK3R5cGVkZWYgSU5UMzIgICAgICAg ICAgaW50MzJfdDsNCj4gPiArdHlwZWRlZiBVSU5UMzIgICAgICAgICB1aW50MzJfdDsNCj4gPiAr dHlwZWRlZiBVSU5UMTYgICAgICAgICB1aW50MTZfdDsNCj4gPiArdHlwZWRlZiBVSU5UOCAgICAg ICAgICB1aW50OF90Ow0KPiA+ICt0eXBlZGVmIGVudW0ge2ZhbHNlLCB0cnVlfSBib29sOw0KPiA+ ICsNCj4gPiArLy8NCj4gPiArLy8gRmlsZSBvcGVyYXRpb25zIGFyZSBub3QgcmVxdWlyZWQgZm9y IEVGSSBidWlsZGluZywNCj4gPiArLy8gc28gRklMRSBpcyBtYXBwZWQgdG8gVk9JRCAqIHRvIHBh c3MgYnVpbGQNCj4gPiArLy8NCj4gPiArdHlwZWRlZiBWT0lEICAqRklMRTsNCj4gPiArDQo+ID4g Ky8vDQo+ID4gKy8vIEdsb2JhbCB2YXJpYWJsZXMNCj4gPiArLy8NCj4gPiArZXh0ZXJuIGludCAg ZXJybm87DQo+ID4gK2V4dGVybiBGSUxFICpzdGRlcnI7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsv LyBGdW5jdGlvbiBwcm90b3R5cGVzIG9mIENSVCBMaWJyYXJ5IHJvdXRpbmVzDQo+ID4gKy8vDQo+ ID4gK3ZvaWQgICAgICAgICAgICptYWxsb2MgICAgIChzaXplX3QpOw0KPiA+ICt2b2lkICAgICAg ICAgICAqcmVhbGxvYyAgICAodm9pZCAqLCBzaXplX3QpOw0KPiA+ICt2b2lkICAgICAgICAgICAq Y2FsbG9jICAgICAoc2l6ZV90IE51bSwgc2l6ZV90IFNpemUpOw0KPiA+ICt2b2lkICAgICAgICAg ICBmcmVlICAgICAgICAodm9pZCAqKTsNCj4gPiArdm9pZCAgICAgICAgICAgKm1lbXNldCAgICAg KHZvaWQgKiwgaW50LCBzaXplX3QpOw0KPiA+ICtpbnQgICAgICAgICAgICBtZW1jbXAgICAgICAo Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQo+ID4gK2ludCAgICAgICAgICAg IGlzZGlnaXQgICAgIChpbnQpOw0KPiA+ICtpbnQgICAgICAgICAgICBpc3NwYWNlICAgICAoaW50 KTsNCj4gPiAraW50ICAgICAgICAgICAgdG9sb3dlciAgICAgKGludCk7DQo+ID4gK2ludCAgICAg ICAgICAgIGlzdXBwZXIgICAgIChpbnQpOw0KPiA+ICtpbnQgICAgICAgICAgICBpc3hkaWdpdCAg ICAoaW50KTsNCj4gPiAraW50ICAgICAgICAgICAgaXNhbG51bSAgICAgKGludCk7DQo+ID4gK3Zv aWQgICAgICAgICAgICptZW1jcHkgICAgICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsN Cj4gPiArdm9pZCAgICAgICAgICAgKm1lbXNldCAgICAgKHZvaWQgKiwgaW50LCBzaXplX3QpOw0K PiA+ICt2b2lkICAgICAgICAgICAqbWVtY2hyICAgICAoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVf dCk7DQo+ID4gK2ludCAgICAgICAgICAgIG1lbWNtcCAgICAgIChjb25zdCB2b2lkICosIGNvbnN0 IHZvaWQgKiwgc2l6ZV90KTsNCj4gPiArdm9pZCAgICAgICAgICAgKm1lbW1vdmUgICAgKHZvaWQg KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KPiA+ICtpbnQgICAgICAgICAgICBzdHJjbXAgICAg ICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KPiA+ICtpbnQgICAgICAgICAgICBzdHJu Y21wICAgICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQo+ID4gK2NoYXIg ICAgICAgICAgICpzdHJjcHkgICAgIChjaGFyICosIGNvbnN0IGNoYXIgKik7DQo+ID4gK3NpemVf dCAgICAgICAgIHN0cmxlbiAgICAgIChjb25zdCBjaGFyICopOw0KPiA+ICtjaGFyICAgICAgICAg ICAqc3RyY2F0ICAgICAoY2hhciAqLCBjb25zdCBjaGFyICopOw0KPiA+ICtjaGFyICAgICAgICAg ICAqc3RyY2hyICAgICAoY29uc3QgY2hhciAqLCBpbnQpOw0KPiA+ICtpbnQgICAgICAgICAgICBz dHJjYXNlY21wICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KPiA+ICtpbnQgICAgICAg ICAgICBzdHJuY2FzZWNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQo+ ID4gK2NoYXIgICAgICAgICAgICpzdHJuY3B5ICAgIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hh ciAqLCBzaXplX3QpOw0KPiA+ICtpbnQgICAgICAgICAgICBzdHJuY21wICAgICAoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQo+ID4gK2NoYXIgICAgICAgICAgICpzdHJyY2hy ICAgIChjb25zdCBjaGFyICosIGludCk7DQo+ID4gK3Vuc2lnbmVkIGxvbmcgIHN0cnRvdWwgICAg IChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7DQo+ID4gK2NoYXIgKiAgICAgICAgIHN0cnN0 ciAgICAgIChjb25zdCBjaGFyICpzMSAsIGNvbnN0IGNoYXIgKnMyKTsNCj4gPiArbG9uZyAgICAg ICAgICAgc3RydG9sICAgICAgKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCj4gPiArY2hh ciAgICAgICAgICAgKnN0cmVycm9yICAgKGludCk7DQo+ID4gK3NpemVfdCAgICAgICAgIHN0cnNw biAgICAgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQo+ID4gK2NoYXIgKiAgICAgICAg IHN0cmR1cCAgICAgIChjb25zdCBjaGFyICpzdHIpOw0KPiA+ICtjaGFyICogICAgICAgICBzdHJw YnJrICAgICAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsNCj4gPiArdW5zaWduZWQg bG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNoYXIgKiBucHRyLCBjaGFyICoqIGVuZHB0ciwgaW50 IGJhc2UpOw0KPiA+ICtsb25nIGxvbmcgICAgICBzdHJ0b2xsICAgICAoY29uc3QgY2hhciAqIG5w dHIsIGNoYXIgKiogZW5kcHRyLCBpbnQgYmFzZSk7DQo+ID4gK2xvbmcgICAgICAgICAgIHN0cnRv bCAgICAgIChjb25zdCBjaGFyICogbnB0ciwgY2hhciAqKiBlbmRwdHIsIGludCBiYXNlKTsNCj4g PiArZG91YmxlICAgICAgICAgc3RydG9kICAgICAgKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IG5w dHIsIGNoYXIgKioNCj4gPiBfX3Jlc3RyaWN0IGVuZHB0cik7DQo+ID4gK3NpemVfdCAgICAgICAg IHN0cmNzcG4gICAgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQo+ID4gK2ludCAgICAg ICAgICAgIHByaW50ZiAgICAgIChjb25zdCBjaGFyICosIC4uLik7DQo+ID4gK2ludCAgICAgICAg ICAgIHNzY2FuZiAgICAgIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCj4gPiAr RklMRSAgICAgICAgICAgKmZvcGVuICAgICAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsN Cj4gPiArc2l6ZV90ICAgICAgICAgZnJlYWQgICAgICAgKHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs IEZJTEUgKik7DQo+ID4gK3NpemVfdCAgICAgICAgIGZ3cml0ZSAgICAgIChjb25zdCB2b2lkICos IHNpemVfdCwgc2l6ZV90LCBGSUxFICopOw0KPiA+ICtpbnQgICAgICAgICAgICBmY2xvc2UgICAg ICAoRklMRSAqKTsNCj4gPiAraW50ICAgICAgICAgICAgZnByaW50ZiAgICAgKEZJTEUgKiwgY29u c3QgY2hhciAqLCAuLi4pOw0KPiA+ICtpbnQgICAgICAgICAgICBmZ2V0YyAgICAgICAoRklMRSAq IF9GaWxlKTsNCj4gPiArdWlkX3QgICAgICAgICAgZ2V0dWlkICAgICAgKHZvaWQpOw0KPiA+ICt1 aWRfdCAgICAgICAgICBnZXRldWlkICAgICAodm9pZCk7DQo+ID4gK2dpZF90ICAgICAgICAgIGdl dGdpZCAgICAgICh2b2lkKTsNCj4gPiArZ2lkX3QgICAgICAgICAgZ2V0ZWdpZCAgICAgKHZvaWQp Ow0KPiA+ICt2b2lkICAgICAgICAgICBxc29ydCAgICAgICAodm9pZCAqLCBzaXplX3QsIHNpemVf dCwgaW50ICgqKShjb25zdCB2b2lkICosDQo+ID4gY29uc3Qgdm9pZCAqKSk7DQo+ID4gK2NoYXIg ICAgICAgICAgICpnZXRlbnYgICAgIChjb25zdCBjaGFyICopOw0KPiA+ICsjaWYgZGVmaW5lZChf X0dOVUNfXykgJiYgKF9fR05VQ19fID49IDIpDQo+ID4gK3ZvaWQgICAgICAgICAgIGFib3J0ICAg ICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsNCj4gPiArI2Vsc2UNCj4g PiArdm9pZCAgICAgICAgICAgYWJvcnQgICAgICAgKHZvaWQpOw0KPiA+ICsjZW5kaWYNCj4gPiAr aW50ICAgICAgICAgICAgdG91cHBlciAgICAgKGludCk7DQo+ID4gK2ludCAgICAgICAgICAgIERp Z2l0MlZhbCAgIChpbnQpOw0KPiA+ICt0aW1lX3QgICAgICAgICB0aW1lICAgICAgICAodGltZV90 ICopOw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gTWFjcm9zIHRoYXQgZGlyZWN0bHkgbWFwIGZ1 bmN0aW9ucyB0byBCYXNlTGliLCBCYXNlTWVtb3J5TGliLCBhbmQNCj4gPiBEZWJ1Z0xpYiBmdW5j dGlvbnMNCj4gPiArLy8NCj4gPiArI2RlZmluZSBzdHJjbXAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXNjaWlTdHJDbXANCj4gPiArI2RlZmluZSBtZW1jcHkoZGVzdCxzb3VyY2UsY291bnQp DQo+ID4gQ29weU1lbShkZXN0LHNvdXJjZSwoVUlOVE4pKGNvdW50KSkNCj4gPiArI2RlZmluZSBt ZW1zZXQoZGVzdCxjaCxjb3VudCkNCj4gPiBTZXRNZW0oZGVzdCwoVUlOVE4pKGNvdW50KSwoVUlO VDgpKGNoKSkNCj4gPiArI2RlZmluZSBtZW1jaHIoYnVmLGNoLGNvdW50KQ0KPiA+IFNjYW5NZW04 KGJ1ZiwoVUlOVE4pKGNvdW50KSwoVUlOVDgpY2gpDQo+ID4gKyNkZWZpbmUgbWVtY21wKGJ1ZjEs YnVmMixjb3VudCkNCj4gPiAoaW50KShDb21wYXJlTWVtKGJ1ZjEsYnVmMiwoVUlOVE4pKGNvdW50 KSkpDQo+ID4gKyNkZWZpbmUgbWVtbW92ZShkZXN0LHNvdXJjZSxjb3VudCkNCj4gPiBDb3B5TWVt KGRlc3Qsc291cmNlLChVSU5UTikoY291bnQpKQ0KPiA+ICsjZGVmaW5lIHN0cmxlbihzdHIpDQo+ ID4gKHNpemVfdCkoQXNjaWlTdHJuTGVuUyhzdHIsTUFYX1NUUklOR19TSVpFKSkNCj4gPiArI2Rl ZmluZSBzdHJjcHkoc3RyRGVzdCxzdHJTb3VyY2UpDQo+ID4gQXNjaWlTdHJDcHlTKHN0ckRlc3Qs KHN0cmxlbihzdHJTb3VyY2UpKzEpLHN0clNvdXJjZSkNCj4gPiArI2RlZmluZSBzdHJuY3B5KHN0 ckRlc3Qsc3RyU291cmNlLGNvdW50KQ0KPiA+IEFzY2lpU3RybkNweVMoc3RyRGVzdCwoVUlOVE4p Y291bnQsc3RyU291cmNlLChVSU5UTiljb3VudCkNCj4gPiArI2RlZmluZSBzdHJuY3B5cyhzdHJE ZXN0LCBEZXN0TGVuLCBzdHJTb3VyY2UsY291bnQpDQo+ID4gQXNjaWlTdHJuQ3B5UyhzdHJEZXN0 LERlc3RMZW4sc3RyU291cmNlLChVSU5UTiljb3VudCkNCj4gPiArI2RlZmluZSBzdHJjYXQoc3Ry RGVzdCxzdHJTb3VyY2UpDQo+ID4gQXNjaWlTdHJDYXRTKHN0ckRlc3QsKHN0cmxlbihzdHJTb3Vy Y2UpK3N0cmxlbihzdHJEZXN0KSsxKSxzdHJTb3VyY2UpDQo+ID4gKyNkZWZpbmUgc3RyY2hyKHN0 cixjaCkgICAgICAgICAgICAgICAgICAgIFNjYW5NZW04KChWT0lEDQo+ID4gKikoc3RyKSxBc2Np aVN0clNpemUoc3RyKSwoVUlOVDgpY2gpDQo+ID4gKyNkZWZpbmUgc3RybmNtcChzdHJpbmcxLHN0 cmluZzIsY291bnQpDQo+ID4gKGludCkoQXNjaWlTdHJuQ21wKHN0cmluZzEsc3RyaW5nMiwoVUlO VE4pKGNvdW50KSkpDQo+ID4gKyNkZWZpbmUgc3RyY2FzZWNtcChzdHIxLHN0cjIpICAgICAgICAg ICAgIChpbnQpQXNjaWlTdHJpQ21wKHN0cjEsc3RyMikNCj4gPiArI2RlZmluZSBzdHJzdHIoczEs czIpICAgICAgICAgICAgICAgICAgICAgQXNjaWlTdHJTdHIoczEsczIpDQo+ID4gKyNkZWZpbmUg c3ByaW50ZihidWYsLi4uKQ0KPiA+IEFzY2lpU1ByaW50KGJ1ZixNQVhfU1RSSU5HX1NJWkUsX19W QV9BUkdTX18pDQo+ID4gKyNkZWZpbmUgc25wcmludGYoYnVmLGxlbiwuLi4pDQo+IEFzY2lpU1By aW50KGJ1ZixsZW4sX19WQV9BUkdTX18pDQo+ID4gKyNkZWZpbmUgdnNucHJpbnRmKGJ1ZixsZW4s Zm9ybWF0LG1hcmtlcikNCj4gPiBBc2NpaVZTUHJpbnQoKGJ1ZiksKGxlbiksKGZvcm1hdCksKG1h cmtlcikpDQo+ID4gKyNkZWZpbmUgYXNzZXJ0KGV4cHJlc3Npb24pDQo+ID4gKyNkZWZpbmUgYXRv aShucHRyKSAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpU3RyRGVjaW1hbFRvVWludG4obnB0 cikNCj4gPiArI2RlZmluZSBmYWJzKHgpICgoKHgpPDAuMCk/KC14KTooeCkpDQo+ID4gKyNkZWZp bmUgb2Zmc2V0b2YodHlwZSxtZW1iZXIpICAgICAgICAgICAgIE9GRlNFVF9PRih0eXBlLG1lbWJl cikNCj4gPiArDQo+ID4gKyNkZWZpbmUgRU9GICgtMSkNCj4gPiArDQo+ID4gK2V4dGVybiBpbnQg IGVycm5vOw0KPiA+ICsNCj4gPiArI2RlZmluZSBFUkFOR0UgICAzNCAgICAgICAgICAgICAgICAv KiAzNCAgIFJlc3VsdCB0b28gbGFyZ2UgKi8NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYg LS1naXQgYS9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9Kc29uTGliLmMNCj4gPiBiL1JlZGZp c2hQa2cvTGlicmFyeS9Kc29uTGliL0pzb25MaWIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uM2ZhODM0YWRkMw0KPiA+IC0tLSAvZGV2L251bGwNCj4g PiArKysgYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9Kc29uTGliLmMNCj4gPiBAQCAtMCww ICsxLDk2MCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBBUElzIGZvciBKU09OIG9wZXJhdGlv bnMuDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAxOCAtIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAy MCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ ID4gKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0pzb25MaWIuaD4NCj4gPiArI2lu Y2x1ZGUgIkpzb25VdGlsaXRpZXMuaCINCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5j dGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgYSBOVUxMIHRlcm1pbmF0ZWQgVVRGOCBlbmNvZGVkIHN0 cmluZw0KPiB0bw0KPiA+IGEgSlNPTg0KPiA+ICsgIHZhbHVlLiBPbmx5IG9iamVjdCBhbmQgYXJy YXkgcmVwcmVzZW50ZWQgc3RyaW5ncyBjYW4gYmUgY29udmVydGVkDQo+ID4gc3VjY2Vzc2Z1bGx5 LA0KPiA+ICsgIHNpbmNlIHRoZXkgYXJlIHRoZSBvbmx5IHZhbGlkIHJvb3QgdmFsdWVzIG9mIGEg SlNPTiB0ZXh0IGZvciBVRUZJDQo+IHVzYWdlLg0KPiA+ICsNCj4gPiArICBSZWFsIG51bWJlciBh bmQgbnVtYmVyIHdpdGggZXhwb25lbnQgcGFydCBhcmUgbm90IHN1cHBvcnR0ZWQgYnkgVUVGSS4N Cj4gPiArDQo+ID4gKyAgQ2FsbGVyIG5lZWRzIHRvIGNsZWFudXAgdGhlIHJvb3QgdmFsdWUgYnkg Y2FsbGluZyBKc29uVmFsdWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBUZXh0 ICAgICAgICAgICAgIFRoZSBOVUxMIHRlcm1pbmF0ZWQgVVRGOCBlbmNvZGVkDQo+ID4gc3RyaW5n IHRvIGNvbnZlcnQNCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIEFycmF5IEpTT04gdmFsdWUg b3Igb2JqZWN0IEpTT04gdmFsdWUsIG9yIE5VTEwgd2hlbiBhbnkNCj4gPiBlcnJvciBvY2N1cnMu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4g PiArVGV4dFRvSnNvbiAoDQo+ID4gKyAgSU4gICAgQ0hBUjgqICAgIFRleHQNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBqc29uX2Vycm9yX3QgICAgSnNvbkVycm9yOw0KPiA+ICsNCj4gPiArICBy ZXR1cm4gKEVES0lJX0pTT05fVkFMVUUpIGpzb25fbG9hZHMgKFRleHQsIDAsICZKc29uRXJyb3Ip Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0 byBjb252ZXJ0IHRoZSBKU09OIHJvb3QgdmFsdWUgdG8gYSBVVEY4IGVuY29kZWQNCj4gPiBzdHJp bmcgd2hpY2gNCj4gPiArICBpcyB0ZXJtaW5hdGVkIGJ5IE5VTEwsIG9yIHJldHVybiBOVUxMIG9u IGVycm9yLg0KPiA+ICsNCj4gPiArICBPbmx5IGFycmF5IEpTT04gdmFsdWUgb3Igb2JqZWN0IEpT T04gdmFsdWUgaXMgdmFsaWQgZm9yIGNvbnZlcnRpbmcsIGFuZA0KPiA+IGNhbGxlciBpcw0KPiA+ ICsgIHJlc3BvbnNpYmxlIGZvciBmcmVlIGNvbnZlcnRlZCBzdHJpbmcuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgdG8gYmUgY29u dmVydGVkDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBUaGUgSlNPTiB2YWx1ZSBjb252ZXJ0 ZWQgVVRGOCBzdHJpbmcgb3IgTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtDSEFSOCoNCj4g PiArRUZJQVBJDQo+ID4gK0pzb25Ub1RleHQgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFM VUUgICAgSnNvbg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmICghSnNvblZhbHVlSXNBcnJh eSAoSnNvbikgJiYgIUpzb25WYWx1ZUlzT2JqZWN0IChKc29uKSkgew0KPiA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4ganNvbl9kdW1wcyAoKGpzb25f dCAqKSBKc29uLCAwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBu ZXcNCj4gSlNPTg0KPiA+IGFycmF5LA0KPiA+ICsgIG9yIE5VTEwgb24gZXJyb3IuIEluaXRpYWxs eSwgdGhlIGFycmF5IGlzIGVtcHR5Lg0KPiA+ICsNCj4gPiArICBUaGUgcmVmZXJlbmNlIGNvdW50 IG9mIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gMSwgYW5kIGNhbGxlciBuZWVkcyB0bw0KPiA+ IGNsZWFudXAgdGhlDQo+ID4gKyAgdmFsdWUgYnkgY2FsbGluZyBKc29uVmFsdWVGcmVlKCkuDQo+ ID4gKw0KPiA+ICsgIE1vcmUgZGV0YWlscyBmb3IgcmVmZXJlbmNlIGNvdW50IHN0cmF0ZWd5IGNh biByZWZlciB0byB0aGUgQVBJDQo+IGRlc2NyaXB0aW9uDQo+ID4gZm9yIEpzb25WYWx1ZUZyZWUo KS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRoZSBjcmVhdGVkIEpTT04gdmFsdWUgd2hp Y2ggY29udGFpbnMgYSBKU09OIGFycmF5IG9yDQo+ID4gTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJbml0QXJy YXkgKA0KPiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEVES0lJ X0pTT05fVkFMVUUpIGpzb25fYXJyYXkoKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2gg Y29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IG9iamVjdCwNCj4gPiArICBvciBOVUxMIG9uIGVy cm9yLiBJbml0aWFsbHksIHRoZSBvYmplY3QgaXMgZW1wdHkuDQo+ID4gKw0KPiA+ICsgIFRoZSBy ZWZlcmVuY2UgY291bnQgb2YgdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byAxLCBhbmQgY2FsbGVy IG5lZWRzIHRvDQo+ID4gY2xlYW51cCB0aGUNCj4gPiArICB2YWx1ZSBieSBjYWxsaW5nIEpzb25W YWx1ZUZyZWUoKS4NCj4gPiArDQo+ID4gKyAgTW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291 bnQgc3RyYXRlZ3kgY2FuIHJlZmVyIHRvIHRoZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3Ig SnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgVGhlIGNyZWF0ZWQg SlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBhIEpTT04gb2JqZWN0IG9yDQo+ID4gTlVMTC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0KPiA+ICtK c29uVmFsdWVJbml0T2JqZWN0ICgNCj4gPiArICBWT0lEDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgcmV0dXJuIChFREtJSV9KU09OX1ZBTFVFKSBqc29uX29iamVjdCgpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEg SlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBhIG5ldw0KPiBKU09ODQo+ID4gc3RyaW5nLA0KPiA+ ICsgIG9yIE5VTEwgb24gZXJyb3IuDQo+ID4gKw0KPiA+ICsgIFRoZSBpbnB1dCBzdHJpbmcgbXVz dCBiZSBOVUxMIHRlcm1pbmF0ZWQgQXNjaWkgZm9ybWF0LCBub24tQXNjaWkNCj4gPiBjaGFyYWN0 ZXJzIHdpbGwNCj4gPiArICBiZSBwcm9jZXNzZWQgYXMgYW4gZXJyb3IuIFVuaWNvZGUgY2hhcmFj dGVycyBjYW4gYWxzbyBiZSByZXByZXNlbnRlZCBieQ0KPiA+IEFzY2lpIHN0cmluZw0KPiA+ICsg IGFzIHRoZSBmb3JtYXQ6IFx1ICsgNCBoZXhhZGVjaW1hbCBkaWdpdHMsIGxpa2UgXHUzRTVBLCBv ciBcdTAwM0YuDQo+ID4gKw0KPiA+ICsgIFRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhpcyB2YWx1 ZSB3aWxsIGJlIHNldCB0byAxLCBhbmQgY2FsbGVyIG5lZWRzIHRvDQo+ID4gY2xlYW51cCB0aGUN Cj4gPiArICB2YWx1ZSBieSBjYWxsaW5nIEpzb25WYWx1ZUZyZWUoKS4NCj4gPiArDQo+ID4gKyAg TW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291bnQgc3RyYXRlZ3kgY2FuIHJlZmVyIHRvIHRo ZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3IgSnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICAgU3RyaW5nICAgICAgVGhlIEFzY2lpIHN0cmluZyB0byBpbml0aWFs aXplIHRvIEpTT04gdmFsdWUNCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRoZSBjcmVhdGVk IEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBKU09OIHN0cmluZyBvcg0KPiA+IE5VTEwuIFNl bGVjdCBhDQo+ID4gKyAgICAgICAgICAgICAgIEdldHRlciBBUEkgZm9yIGEgc3BlY2lmaWMgZW5j b2RpbmcgZm9ybWF0Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4g PiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUluaXRBc2NpaVN0cmluZyAoDQo+ID4gKyAgSU4gICAg Q09OU1QgQ0hBUjggICAgKlN0cmluZw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROICAg IEluZGV4Ow0KPiA+ICsNCj4gPiArICBpZiAoU3RyaW5nID09IE5VTEwpIHsNCj4gPiArICAgIHJl dHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSW5kZXggPSAwOw0KPiA+ICsgIHdo aWxlICgqKFN0cmluZyArIEluZGV4KSAhPSAnXDAnKSB7DQo+ID4gKyAgICBpZiAoKCgqKFN0cmlu ZyArIEluZGV4KSkgJiAweDgwKSAhPSAweDAwKSB7DQo+ID4gKyAgICAgIHJldHVybiBOVUxMOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIEluZGV4ICsrOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgcmV0dXJuIChFREtJSV9KU09OX1ZBTFVFKSBqc29uX3N0cmluZyAoU3RyaW5nKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5p dGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNPTg0KPiA+IHN0 cmluZywNCj4gPiArICBvciBOVUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArICBUaGUgaW5wdXQg bXVzdCBiZSBhIE5VTEwgdGVybWluYXRlZCBVQ1MyIGZvcm1hdCBVbmljb2RlIHN0cmluZy4NCj4g PiArDQo+ID4gKyAgVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIHZhbHVlIHdpbGwgYmUgc2V0 IHRvIDEsIGFuZCBjYWxsZXIgbmVlZHMgdG8NCj4gPiBjbGVhbnVwIHRoZQ0KPiA+ICsgIHZhbHVl IGJ5IGNhbGxpbmcgSnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBNb3JlIGRldGFpbHMg Zm9yIHJlZmVyZW5jZSBjb3VudCBzdHJhdGVneSBjYW4gcmVmZXIgdG8gdGhlIEFQSQ0KPiBkZXNj cmlwdGlvbg0KPiA+IGZvciBKc29uVmFsdWVGcmVlKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gICBTdHJpbmcgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgdG8gaW5pdGlhbGl6ZSB0byBKU09O IHZhbHVlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBUaGUgY3JlYXRlZCBKU09OIHZhbHVl IHdoaWNoIGNvbnRhaW5zIGEgSlNPTiBzdHJpbmcgb3INCj4gPiBOVUxMLiBTZWxlY3QgYQ0KPiA+ ICsgICAgICAgICAgICAgICBHZXR0ZXIgQVBJIGZvciBhIHNwZWNpZmljIGVuY29kaW5nIGZvcm1h dC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0K PiA+ICtKc29uVmFsdWVJbml0VW5pY29kZVN0cmluZyAoDQo+ID4gKyAgSU4gICAgQ0hBUjE2ICAg ICpTdHJpbmcNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgIFN0YXR1czsN Cj4gPiArICBDSEFSOCAgICAgICAgICpVdGY4U3RyOw0KPiA+ICsNCj4gPiArICBpZiAoU3RyaW5n ID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgVXRmOFN0ciA9IE5VTEw7DQo+ID4gKyAgU3RhdHVzICA9IFVDUzJTdHJUb1VURjggKFN0cmlu ZywgJlV0ZjhTdHIpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg IHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIChFREtJSV9KU09O X1ZBTFVFKSBqc29uX3N0cmluZyAoVXRmOFN0cik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgYSBKU09OIHZhbHVlIHdo aWNoIGNvbnRhaW5zIGEgbmV3DQo+IEpTT04NCj4gPiBpbnRlZ2VyLA0KPiA+ICsgIG9yIE5VTEwg b24gZXJyb3IuDQo+ID4gKw0KPiA+ICsgIFRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhpcyB2YWx1 ZSB3aWxsIGJlIHNldCB0byAxLCBhbmQgY2FsbGVyIG5lZWRzIHRvDQo+ID4gY2xlYW51cCB0aGUN Cj4gPiArICB2YWx1ZSBieSBjYWxsaW5nIEpzb25WYWx1ZUZyZWUoKS4NCj4gPiArDQo+ID4gKyAg TW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291bnQgc3RyYXRlZ3kgY2FuIHJlZmVyIHRvIHRo ZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3IgSnNvblZhbHVlRnJlZSgpLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICAgVmFsdWUgICAgICAgVGhlIGludGVnZXIgdG8gaW5pdGlhbGl6ZSB0 byBKU09OIHZhbHVlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBUaGUgY3JlYXRlZCBKU09O IHZhbHVlIHdoaWNoIGNvbnRhaW5zIGEgSlNPTiBudW1iZXIgb3INCj4gPiBOVUxMLg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25W YWx1ZUluaXROdW1iZXIgKA0KPiA+ICsgIElOICAgIElOVDY0ICAgIFZhbHVlDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgcmV0dXJuIChFREtJSV9KU09OX1ZBTFVFKSBqc29uX2ludGVnZXIgKFZh bHVlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgd2hpY2ggY29udGFpbnMgYSBuZXcNCj4gSlNP Tg0KPiA+IGJvb2xlYW4sDQo+ID4gKyAgb3IgTlVMTCBvbiBlcnJvci4NCj4gPiArDQo+ID4gKyAg Qm9vbGVhbiBKU09OIHZhbHVlIGlzIGtlcHQgYXMgc3RhdGljIHZhbHVlLCBhbmQgbm8gbmVlZCB0 byBkbyBhbnkNCj4gY2xlYW51cA0KPiA+IHdvcmsuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g ICBWYWx1ZSAgICAgICBUaGUgYm9vbGVhbiB2YWx1ZSB0byBpbml0aWFsaXplLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICAgVGhlIGNyZWF0ZWQgSlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBh IEpTT04gYm9vbGVhbiBvcg0KPiA+IE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRURLSUlf SlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlSW5pdEJvb2xlYW4gKA0KPiA+ ICsgIElOICAgIEJPT0xFQU4gICAgVmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1 cm4gKEVES0lJX0pTT05fVkFMVUUpIGpzb25fYm9vbGVhbiAoVmFsdWUpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIGEg SlNPTiB2YWx1ZSB3aGljaCBjb250YWlucyBhIG5ldw0KPiBKU09ODQo+ID4gTlVMTCwNCj4gPiAr ICBvciBOVUxMIG9uIGVycm9yLg0KPiA+ICsNCj4gPiArICBOVUxMIEpTT04gdmFsdWUgaXMga2Vw dCBhcyBzdGF0aWMgdmFsdWUsIGFuZCBubyBuZWVkIHRvIGRvIGFueSBjbGVhbnVwDQo+ID4gd29y ay4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRoZSBjcmVhdGVkIE5VTEwgSlNPTiB2YWx1 ZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ID4gK0VGSUFQSQ0K PiA+ICtKc29uVmFsdWVJbml0TnVsbCAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIHJldHVybiAoRURLSUlfSlNPTl9WQUxVRSkganNvbl9udWxsKCk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlY3JlYXNlIHRo ZSByZWZlcmVuY2UgY291bnQgb2YgYSBKU09OIHZhbHVlIGJ5DQo+ID4gb25lLCBhbmQgb25jZQ0K PiA+ICsgIHRoaXMgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sIHRoZSB2YWx1ZSBpcyBk ZXN0cm95ZWQgYW5kIGl0IGNhbg0KPiBubw0KPiA+IGxvbmdlciBiZSB1c2VkLg0KPiA+ICsgIElm IHRoaXMgZGVzdHJveWVkIHZhbHVlIGlzIG9iamVjdCB0eXBlIG9yIGFycmF5IHR5cGUsIHJlZmVy ZW5jZSBjb3VudHMNCj4gZm9yIGFsbA0KPiA+IGNvbnRhaW5pbmcNCj4gPiArICBKU09OIHZhbHVl cyB3aWxsIGJlIGRlY3JlYXNlZCBieSAxLiBCb29sZWFuIEpTT04gdmFsdWUgYW5kIE5VTEwgSlNP Tg0KPiA+IHZhbHVlIHdvbid0IGJlIGRlc3Ryb3llZA0KPiA+ICsgIHNpbmNlIHRoZXkgYXJlIHN0 YXRpYyB2YWx1ZXMga2VwdCBpbiBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIFJlZmVyZW5jZSBDb3Vu dCBTdHJhdGVneTogQmFzZUpzb25MaWIgdXNlcyB0aGlzIHN0cmF0ZWd5IHRvIHRyYWNrDQo+IHdo ZXRoZXINCj4gPiBhIHZhbHVlIGlzIHN0aWxsDQo+ID4gKyAgaW4gdXNlIG9yIG5vdC4gV2hlbiBh IHZhbHVlIGlzIGNyZWF0ZWQsIGl0J3MgcmVmZXJlbmNlIGNvdW50IGlzIHNldCB0bw0KPiAxLiBJ ZiBhDQo+ID4gcmVmZXJlbmNlIHRvIGENCj4gPiArICB2YWx1ZSBpcyBrZXB0IGZvciB1c2UsIGl0 cyByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQsIGFuZCB3aGVuIHRoZQ0KPiA+IHZhbHVl IGlzIG5vIGxvbmdlcg0KPiA+ICsgIG5lZWRlZCwgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNy ZW1lbnRlZC4gV2hlbiB0aGUgcmVmZXJlbmNlDQo+IGNvdW50DQo+ID4gZHJvcHMgdG8gemVybywg dGhlcmUgYXJlDQo+ID4gKyAgbm8gcmVmZXJlbmNlcyBsZWZ0LCBhbmQgdGhlIHZhbHVlIGNhbiBi ZSBkZXN0cm95ZWQuDQo+ID4gKw0KPiA+ICsgIFRoZSBnaXZlbiBKU09OIHZhbHVlIG1heWJlIE5V TEwgYW5kIG5vdCBjYXVzaW5nIGFueSBwcm9ibGVtLiBKdXN0DQo+ID4gb3V0cHV0IHRoZSBkZWJ1 ZyBtZXNzYWdlDQo+ID4gKyAgdG8gaW5mb3JtIGNhbGxlciB0aGUgTlVMTCB2YWx1ZSBpcyBwYXNz ZWQgaW4uDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBK U09OIHZhbHVlIHRvIGJlIGZyZWVkLg0KPiA+IGpzb25fZGVjcmVmIG1heSByZXR1cm4gd2l0aG91 dCBhbnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIGlmIEpz b24gaXMgTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ ICtKc29uVmFsdWVGcmVlICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24N Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBqc29uX2RlY3JlZigoanNvbl90ICopSnNvbik7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNy ZWF0ZSBhIGZyZXNoIGNvcHkgb2YgYSBKU09OIHZhbHVlLCBhbmQgYWxsDQo+IGNoaWxkDQo+ID4g dmFsdWVzIGFyZSBkZWVwDQo+ID4gKyAgY29waWVkIGluIGEgcmVjdXJzaXZlIGZhc2hpb24uIEl0 IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGlzIEpTT04gdmFsdWUNCj4gPiBtaWdodCBiZSBtb2Rp ZmllZA0KPiA+ICsgIGluIGxhdGVyIHVzZSwgYnV0IHRoZSBvcmlnaW5hbCBzdGlsbCB3YW50cyB0 byBiZSB1c2VkIGluIHNvbWV3aGVyZQ0KPiBlbHNlLg0KPiA+ICsNCj4gPiArICBSZWZlcmVuY2Ug Y291bnRzIG9mIHRoZSByZXR1cm5lZCByb290IEpTT04gdmFsdWUgYW5kIGFsbCBjaGlsZCB2YWx1 ZXMNCj4gd2lsbA0KPiA+IGJlIHNldCB0byAxLCBhbmQNCj4gPiArICBjYWxsZXIgbmVlZHMgdG8g Y2xlYW51cCB0aGUgcm9vdCB2YWx1ZSBieSBjYWxsaW5nIEpzb25WYWx1ZUZyZWUoKS4NCj4gPiAr DQo+ID4gKyAgKiBOb3RlOiBTaW5jZSB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgY29weSBmcm9t IGJvdHRvbSB0byB1cCwgdG9vIG1hbnkNCj4gPiBjYWxscyBtYXkgY2F1c2Ugc29tZQ0KPiA+ICsg IHBlcmZvcm1hbmNlIGlzc3VlcywgdXNlciBzaG91bGQgYXZvaWQgdW5uZWNlc3NhcnkgY2FsbHMg dG8gdGhpcw0KPiBmdW5jdGlvbg0KPiA+IHVubGVzcyBpdCBpcyByZWFsbHkNCj4gPiArICBuZWVk ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBKU09O IHZhbHVlIHRvIGJlIGNsb25lZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0 aGUgY2xvbmVkIEpTT04gdmFsdWUsIG9yIE5VTEwgb24gZXJyb3IuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvblZhbHVlQ2xvbmUg KA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIHJldHVybiAoRURLSUlfSlNPTl9WQUxVRSkganNvbl9kZWVwX2NvcHkgKChqc29u X3QgKikgSnNvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlv biBpcyB1c2VkIHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgSlNPTiB2YWx1ZSBjb250YWlucyBh DQo+IEpTT04NCj4gPiBhcnJheS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAg ICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg ICAgICBUUlVFICAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGNvbnRhaW5zIGEgSlNPTg0KPiA+ IGFycmF5Lg0KPiA+ICsgIEByZXR2YWwgICAgICBGQUxTRSAgICAgICAgICAgIFRoZSBKU09OIHZh bHVlIGRvZXNuJ3QgY29udGFpbiBhDQo+ID4gSlNPTiBhcnJheS4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJc0FycmF5ICgNCj4gPiAr ICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICByZXR1cm4ganNvbl9pc19hcnJheSAoKGpzb25fdCAqKSBKc29uKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJuIGlmIHRoZSBw cm92aWRlZCBKU09OIHZhbHVlIGNvbnRhaW5zIGENCj4gSlNPTg0KPiA+IG9iamVjdC4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04g dmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBUUlVFICAgICAgICAgICAgIFRoZSBK U09OIHZhbHVlIGNvbnRhaW5zIGEgSlNPTg0KPiA+IG9iamVjdC4NCj4gPiArICBAcmV0dmFsICAg ICAgRkFMU0UgICAgICAgICAgICBUaGUgSlNPTiB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQ0KPiA+ IEpTT04gb2JqZWN0Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJ DQo+ID4gK0pzb25WYWx1ZUlzT2JqZWN0ICgNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVF ICAgIEpzb24NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4ganNvbl9pc19vYmplY3Qg KChqc29uX3QgKikgSnNvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBm dW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgSlNPTiBWYWx1ZSBjb250 YWlucyBhDQo+IHN0cmluZywNCj4gPiBBc2NpaSBvcg0KPiA+ICsgIFVuaWNvZGUgZm9ybWF0IGlz IG5vdCBkaWZmZXJlbnRpYXRlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAg ICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg ICAgICBUUlVFICAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGNvbnRhaW5zIGEgSlNPTg0KPiA+ IHN0cmluZy4NCj4gPiArICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAgICAgICBUaGUgSlNPTiB2 YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQ0KPiA+IEpTT04gc3RyaW5nLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUlzU3RyaW5nICgNCj4g PiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApDQo+ID4gK3sNCj4g PiArICByZXR1cm4ganNvbl9pc19zdHJpbmcgKChqc29uX3QgKikgSnNvbik7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiBpZiB0 aGUgcHJvdmlkZWQgSlNPTiB2YWx1ZSBjb250YWlucyBhDQo+IEpTT04NCj4gPiBudW1iZXIuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBK U09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgVFJVRSAgICAgICAgICAgICBU aGUgSlNPTiB2YWx1ZSBpcyBjb250YWlucyBKU09ODQo+ID4gbnVtYmVyLg0KPiA+ICsgIEByZXR2 YWwgICAgICBGQUxTRSAgICAgICAgICAgIFRoZSBKU09OIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBh DQo+ID4gSlNPTiBudW1iZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtF RklBUEkNCj4gPiArSnNvblZhbHVlSXNOdW1iZXIgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05f VkFMVUUgICAgSnNvbg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBqc29uX2lzX2lu dGVnZXIgKChqc29uX3QgKikgSnNvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgSlNPTiB2YWx1 ZSBjb250YWlucyBhDQo+IEpTT04NCj4gPiBib29sZWFuLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICAgSnNvbiAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCAgICAgIFRSVUUgICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgY29udGFp bnMgYSBKU09ODQo+ID4gYm9vbGVhbi4NCj4gPiArICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAg ICAgICBUaGUgSlNPTiB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQ0KPiA+IEpTT04gYm9vbGVhbi4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFs dWVJc0Jvb2xlYW4gKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBqc29uX2lzX2Jvb2xlYW4gKChqc29uX3QgKikg SnNvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1 c2VkIHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgSlNPTiB2YWx1ZSBjb250YWlucyBhDQo+IEpT T04NCj4gPiBOVUxMLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAg ICBUaGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFRS VUUgICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgY29udGFpbnMgYSBKU09ODQo+ID4gTlVMTC4N Cj4gPiArICBAcmV0dmFsICAgICAgRkFMU0UgICAgICAgICAgICBUaGUgSlNPTiB2YWx1ZSBkb2Vz bid0IGNvbnRhaW4gYQ0KPiA+IEpTT04gTlVMTC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVJc051bGwgKA0KPiA+ICsgIElOICAgIEVE S0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBq c29uX2lzX251bGwgKChqc29uX3QgKikgSnNvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBhc3NvY2lhdGVkIGFy cmF5IGluIGFuIGFycmF5IHR5cGUNCj4gSlNPTg0KPiA+IHZhbHVlLg0KPiA+ICsNCj4gPiArICBB bnkgY2hhbmdlcyB0byB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBpbXBhY3QgdGhlIG9yaWdpbmFs IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAg IFRoZSBwcm92aWRlZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0 dXJuIHRoZSBhc3NvY2lhdGVkIGFycmF5IGluIEpTT04gdmFsdWUgb3IgTlVMTC4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtFREtJSV9KU09OX0FSUkFZDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFs dWVHZXRBcnJheSAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNPTl9WQUxVRSAgICBKc29uDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKEpzb24gPT0gTlVMTCB8fCAhSnNvblZhbHVlSXNBcnJh eSAoSnNvbikpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgcmV0dXJuIChFREtJSV9KU09OX0FSUkFZKSBKc29uOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXNzb2NpYXRl ZCBvYmplY3QgaW4gYW4gb2JqZWN0DQo+IHR5cGUNCj4gPiBKU09OIHZhbHVlLg0KPiA+ICsNCj4g PiArICBBbnkgY2hhbmdlcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgaW1wYWN0IHRoZSBv cmlnaW5hbCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAg ICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAg ICAgIFJldHVybiB0aGUgYXNzb2NpYXRlZCBvYmplY3QgaW4gSlNPTiB2YWx1ZSBvciBOVUxMLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fT0JKRUNUDQo+ID4gK0VGSUFQSQ0KPiA+ ICtKc29uVmFsdWVHZXRPYmplY3QgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAg SnNvbg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmIChKc29uID09IE5VTEwgfHwgIUpzb25W YWx1ZUlzT2JqZWN0IChKc29uKSkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICByZXR1cm4gKEVES0lJX0pTT05fT0JKRUNUKSBKc29uOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0 aGUgYXNzb2NpYXRlZCBBc2NpaSBzdHJpbmcgaW4gYQ0KPiBzdHJpbmcgdHlwZQ0KPiA+IEpTT04g dmFsdWUuDQo+ID4gKw0KPiA+ICsgIEFueSBjaGFuZ2VzIHRvIHRoZSByZXR1cm5lZCBzdHJpbmcg d2lsbCBpbXBhY3QgdGhlIG9yaWdpbmFsIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIHZhbHVlLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBhc3NvY2lhdGVkIEFzY2lpIHN0cmluZyBp biBKU09OIHZhbHVlIG9yIE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQ0hBUjgqDQo+ID4g K0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVHZXRBc2NpaVN0cmluZyAoDQo+ID4gKyAgSU4gICAgRURL SUlfSlNPTl9WQUxVRSAgICBKc29uDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQ0hBUjggICAg ICAgICAgKkFzY2lpU3RyOw0KPiA+ICsgIFVJTlROICAgICAgICAgIEluZGV4Ow0KPiA+ICsNCj4g PiArICBBc2NpaVN0ciA9IChDSEFSOCAqKSAgKChqc29uX3QgKikgSnNvbik7DQo+ID4gKyAgaWYg KEFzY2lpU3RyID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgSW5kZXggPSAwOw0KPiA+ICsgIHdoaWxlICgqKEFzY2lpU3RyICsgSW5kZXgp ICE9ICdcMCcpIHsNCj4gPiArICAgIGlmICgoKCooQXNjaWlTdHIgKyBJbmRleCkpICYgMHg4MCkg IT0gMHgwMCkgew0KPiA+ICsgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBJbmRleCArKzsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBBc2NpaVN0 cjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQg dG8gcmV0cmlldmUgdGhlIGFzc29jaWF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gYQ0KPiBzdHJpbmcN Cj4gPiB0eXBlIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIENhbGxlciBjYW4gZG8gYW55IGNo YW5nZXMgdG8gdGhlIHJldHVybmVkIHN0cmluZyB3aXRob3V0IGFueSBpbXBhY3QgdG8NCj4gPiB0 aGUgb3JpZ2luYWwgSlNPTg0KPiA+ICsgIHZhbHVlLCBhbmQgY2FsbGVyIG5lZWRzIHRvIGZyZWUg dGhlIHJldHVybmVkIHN0cmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAg ICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg ICAgICBSZXR1cm4gdGhlIGFzc29jaWF0ZWQgVW5pY29kZSBzdHJpbmcgaW4gSlNPTiB2YWx1ZSBv cg0KPiA+IE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQ0hBUjE2Kg0KPiA+ICtFRklBUEkN Cj4gPiArSnNvblZhbHVlR2V0VW5pY29kZVN0cmluZyAoDQo+ID4gKyAgSU4gICAgRURLSUlfSlNP Tl9WQUxVRSAgICBKc29uDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAg U3RhdHVzOw0KPiA+ICsgIENPTlNUIENIQVI4ICAgICpVdGY4U3RyOw0KPiA+ICsgIENIQVIxNiAg ICAgICAgICpVY3MyU3RyOw0KPiA+ICsNCj4gPiArICBVdGY4U3RyID0ganNvbl9zdHJpbmdfdmFs dWUgKChqc29uX3QgKikgSnNvbik7DQo+ID4gKyAgaWYgKFV0ZjhTdHIgPT0gTlVMTCkgew0KPiA+ ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBVVEY4 U3RyVG9VQ1MyICgoQ0hBUjgqKVV0ZjhTdHIsICZVY3MyU3RyKTsNCj4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIHJldHVybiBVY3MyU3RyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXNzb2NpYXRlZCBpbnRlZ2VyIGlu IGEgbnVtYmVyDQo+IHR5cGUNCj4gPiBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBUaGUgaW5w dXQgSlNPTiB2YWx1ZSBzaG91bGQgbm90IGJlIE5VTEwgb3IgY29udGFpbiBubyBKU09OIG51bWJl ciwNCj4gPiBvdGhlcndpc2UgaXQgd2lsbA0KPiA+ICsgIEFTU0VSVCgpIGFuZCByZXR1cm4gMC4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAgICAgICAgICAgVGhlIHByb3ZpZGVk IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIGFzc29j aWF0ZWQgbnVtYmVyIGluIEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArSU5UNjQN Cj4gPiArRUZJQVBJDQo+ID4gK0pzb25WYWx1ZUdldE51bWJlciAoDQo+ID4gKyAgSU4gICAgRURL SUlfSlNPTl9WQUxVRSAgICBKc29uDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChK c29uICE9IE5VTEwgJiYgSnNvblZhbHVlSXNOdW1iZXIgKEpzb24pKTsNCj4gPiArICBpZiAoSnNv biA9PSBOVUxMIHx8ICFKc29uVmFsdWVJc051bWJlciAoSnNvbikpIHsNCj4gPiArICAgIHJldHVy biAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIGpzb25faW50ZWdlcl92YWx1ZSAo KGpzb25fdCAqKSBKc29uKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGFzc29jaWF0ZWQgYm9vbGVhbiBpbiBhIGJv b2xlYW4NCj4gdHlwZQ0KPiA+IEpTT04gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIFRoZSBpbnB1dCBK U09OIHZhbHVlIHNob3VsZCBub3QgYmUgTlVMTCBvciBjb250YWluIG5vIEpTT04gYm9vbGVhbiwN Cj4gPiBvdGhlcndpc2UgaXQgd2lsbA0KPiA+ICsgIEFTU0VSVCgpIGFuZCByZXR1cm4gRkFMU0Uu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uICAgICAgICAgICAgIFRoZSBwcm92aWRl ZCBKU09OIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBhc3Nv Y2lhdGVkIHZhbHVlIG9mIEpTT04gYm9vbGVhbi4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVHZXRCb29sZWFuICgNCj4gPiArICBJTiAg ICBFREtJSV9KU09OX1ZBTFVFICAgIEpzb24NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKEpzb24gIT0gTlVMTCAmJiBKc29uVmFsdWVJc0Jvb2xlYW4gKEpzb24pKTsNCj4gPiArICBp ZiAoSnNvbiA9PSBOVUxMIHx8ICFKc29uVmFsdWVJc0Jvb2xlYW4gKEpzb24pKSB7DQo+ID4gKyAg ICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4ganNvbl9pc190 cnVlICgoanNvbl90ICopIEpzb24pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBU aGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXNzb2NpYXRlZCBzdHJpbmcgaW4g YSBzdHJpbmcgdHlwZQ0KPiBKU09ODQo+ID4gdmFsdWUuDQo+ID4gKw0KPiA+ICsgIEFueSBjaGFu Z2VzIHRvIHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBpbXBhY3QgdGhlIG9yaWdpbmFsIEpTT04g dmFsdWUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uIFRoZSBwcm92aWRlZCBKU09O IHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBhc3NvY2lhdGVk IEFzY2lpIHN0cmluZyBpbiBKU09OIHZhbHVlIG9yIE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArQ09OU1QgQ0hBUjgqDQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uVmFsdWVHZXRTdHJpbmcgKA0K PiA+ICsgIElOICAgIEVES0lJX0pTT05fVkFMVUUgICAgSnNvbg0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIHJldHVybiBqc29uX3N0cmluZ192YWx1ZSAoKGNvbnN0IGpzb25fdCAqKUpzb24pOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBn ZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIEpTT04gb2JqZWN0LCBvcg0KPiAwDQo+ID4g aWYgaXQgaXMgTlVMTCBvcg0KPiA+ICsgIG5vdCBhIEpTT04gb2JqZWN0Lg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICAgSnNvbk9iamVjdCAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04g b2JqZWN0Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2Yg ZWxlbWVudHMgaW4gdGhpcyBKU09OIG9iamVjdCBvciAwLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K1VJTlRODQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uT2JqZWN0U2l6ZSAoDQo+ID4gKyAgSU4gICAg RURLSUlfSlNPTl9PQkpFQ1QgICAgSnNvbk9iamVjdA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IHJldHVybiBqc29uX29iamVjdF9zaXplICgoanNvbl90ICopIEpzb25PYmplY3QpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBlbnVtZXJh dGUgYWxsIGtleXMgaW4gYSBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4gKyAgQ2FsbGVyIHNob3Vs ZCBiZSByZXNwb25zaWJsZSB0byBmcmVlIHRoZSByZXR1cm5lZCBrZXkgYXJyYXkgcmVmZmVyZW5j ZS4NCj4gQnV0DQo+ID4gY29udGFpbmVkIGtleXMNCj4gPiArICBhcmUgcmVhZCBvbmx5IGFuZCBt dXN0IG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg IEpzb25PYmogICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04gb2JqZWN0IGZvcg0KPiA+ IGVudW1lcmF0aW9uLg0KPiA+ICsgIEBwYXJhbVtvdXRdICBLZXlDb3VudCAgICAgICAgICAgICAg IFRoZSBjb3VudCBvZiBrZXlzIGluIHRoaXMNCj4gPiBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCAgICAgIFJldHVybiBhbiBhcnJheSBvZiB0aGUgZW51bWVyYXRlZCBrZXlzIGlu IHRoaXMgSlNPTg0KPiA+IG9iamVjdCBvciBOVUxMLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0NI QVI4KioNCj4gPiArSnNvbk9iamVjdEdldEtleXMgKA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05f T0JKRUNUICAgIEpzb25PYmosDQo+ID4gKyAgT1VUICAgVUlOVE4gICAgICAgICAgICAgICAgKktl eUNvdW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKw0KPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgSW5kZXg7DQo+ID4gKyAgQ09OU1QgQ0hBUjggICAgICAgICAqKktleUFycmF5Ow0KPiA+ICsg IENPTlNUIENIQVI4ICAgICAgICAgKktleTsNCj4gPiArICBFREtJSV9KU09OX1ZBTFVFICAgIFZh bHVlOw0KPiA+ICsNCj4gPiArICBpZiAoSnNvbk9iaiA9PSBOVUxMIHx8IEtleUNvdW50ID09IE5V TEwpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgSW5k ZXggPSAwOw0KPiA+ICsgIGpzb25fb2JqZWN0X2ZvcmVhY2goSnNvbk9iaiwgS2V5LCBWYWx1ZSkg ew0KPiA+ICsgICAgSW5kZXggKys7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChJbmRleCA9PSAwKSB7 DQo+ID4gKyAgICAqS2V5Q291bnQgPSAwOw0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAqS2V5Q291bnQgPSBJbmRleDsNCj4gPiArICBLZXlBcnJheSA9IChD T05TVCBDSEFSOCAqKikgQWxsb2NhdGVaZXJvUG9vbCAoKktleUNvdW50ICogc2l6ZW9mDQo+ID4g KENIQVI4ICopKTsNCj4gPiArICBpZiAoS2V5QXJyYXkgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0 dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBLZXkgICA9IE5VTEw7DQo+ID4gKyAg VmFsdWUgPSBOVUxMOw0KPiA+ICsgIEluZGV4ID0gMDsNCj4gPiArICBqc29uX29iamVjdF9mb3Jl YWNoKChqc29uX3QgKikgSnNvbk9iaiwgS2V5LCBWYWx1ZSkgew0KPiA+ICsgICAgS2V5QXJyYXlb SW5kZXhdID0gS2V5Ow0KPiA+ICsgICAgSW5kZXggKys7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICByZXR1cm4gKENIQVI4ICoqKUtleUFycmF5Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgYSBKU09OIHZhbHVlIGNvcnJlc3BvbmRp bmcgdG8gdGhlIGlucHV0IGtleQ0KPiA+IGZyb20gYSBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4g KyAgSXQgb25seSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoaXMgdmFsdWUgYW5kIGFueSBjaGFu Z2VzIG9uIHRoaXMgdmFsdWUNCj4gd2lsbA0KPiA+IGltcGFjdCB0aGUNCj4gPiArICBvcmlnaW5h bCBKU09OIG9iamVjdC4gSWYgdGhhdCBpcyBub3QgZXhwZWN0ZWQsIHBsZWFzZSBjYWxsDQo+IEpz b25WYWx1ZUNsb25lKCkNCj4gPiB0byBjbG9uZSBpdCB0bw0KPiA+ICsgIHVzZS4NCj4gPiArDQo+ ID4gKyAgSW5wdXQga2V5IG11c3QgYmUgYSB2YWxpZCBOVUxMIHRlcm1pbmF0ZWQgVVRGOCBlbmNv ZGVkIHN0cmluZy4gTlVMTA0KPiA+IHdpbGwgYmUgcmV0dXJuZWQgd2hlbg0KPiA+ICsgIEtleS1W YWx1ZSBpcyBub3QgZm91bmQgaW4gdGhpcyBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgIEpzb25PYmogICAgICAgICAgIFRoZSBwcm92aWRlZCBKU09OIG9iamVjdC4NCj4g PiArICBAcGFyYW1baW5dICAgS2V5ICAgICAgICAgICAgICAgVGhlIGtleSBvZiB0aGUgSlNPTiB2 YWx1ZSB0byBiZQ0KPiA+IHJldHJpZXZlZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFJl dHVybiB0aGUgY29ycmVzcG9uZGluZyBKU09OIHZhbHVlIHRvIGtleSwgb3IgTlVMTCBvbg0KPiA+ IGVycm9yLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4gPiArRUZJ QVBJDQo+ID4gK0pzb25PYmplY3RHZXRWYWx1ZSAoDQo+ID4gKyAgSU4gICAgQ09OU1QgRURLSUlf SlNPTl9PQkpFQ1QgICAgSnNvbk9iaiwNCj4gPiArICBJTiAgICBDT05TVCBDSEFSOCAgICAgICAg ICAgICAgICAqS2V5DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIChFREtJSV9KU09O X1ZBTFVFKSBqc29uX29iamVjdF9nZXQgKChjb25zdCBqc29uX3QgKilKc29uT2JqLA0KPiA+IChj b25zdCBjaGFyICopS2V5KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gc2V0IGEgSlNPTiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBp bnB1dCBrZXkNCj4gPiBmcm9tIGEgSlNPTiBvYmplY3QsDQo+ID4gKyAgYW5kIHRoZSByZWZlcmVu Y2UgY291bnQgb2YgdGhpcyB2YWx1ZSB3aWxsIGJlIGluY3JlYXNlZCBieSAxLg0KPiA+ICsNCj4g PiArICBJbnB1dCBrZXkgbXVzdCBiZSBhIHZhbGlkIE5VTEwgdGVybWluYXRlZCBVVEY4IGVuY29k ZWQgc3RyaW5nLiBJZiB0aGVyZQ0KPiA+IGFscmVhZHkgaXMgYSB2YWx1ZSBmb3INCj4gPiArICB0 aGlzIGtleSwgdGhpcyBrZXkgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgbmV3IEpTT04gdmFsdWUu IFRoZSBvbGQgSlNPTg0KPiA+IHZhbHVlIHdpbGwgYmUgcmVtb3ZlZA0KPiA+ICsgIGZyb20gdGhp cyBvYmplY3QgYW5kIHRodXMgaXRzJyByZWZlcmVuY2UgY291bnQgd2lsbCBiZSBkZWNyZWFzZWQg YnkgMS4NCj4gPiArDQo+ID4gKyAgTW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291bnQgc3Ry YXRlZ3kgY2FuIHJlZmVyIHRvIHRoZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3IgSnNvblZh bHVlRnJlZSgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbk9iaiAgICAgICAgICAg ICAgICBUaGUgcHJvdmlkZWQgSlNPTiBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEtleSAg ICAgICAgICAgICAgICAgICAgVGhlIGtleSBvZiB0aGUgSlNPTiB2YWx1ZSB0bw0KPiA+IGJlIHNl dC4NCj4gPiArICBAcGFyYW1baW5dICAgSnNvbiAgICAgICAgICAgICAgICAgICBUaGUgSlNPTiB2 YWx1ZSB0byBzZXQgdG8gdGhpcw0KPiA+IEpTT04gb2JqZWN0IG1hcHBlZCBieSBrZXkuDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgICAgICBFRklfQUJPUlRFRCAgICAgICAgICAgIFNvbWUgZXJyb3Ig b2NjdXIgYW5kDQo+ID4gb3BlcmF0aW9uIGFib3J0ZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgaGFzIGJlZW4gc2V0DQo+ID4gdG8g dGhpcyBKU09OIG9iamVjdC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtKc29uT2JqZWN0U2V0VmFsdWUgKA0KPiA+ICsgIElOICAgIEVES0lJX0pT T05fT0JKRUNUICAgIEpzb25PYmosDQo+ID4gKyAgSU4gICAgQ09OU1QgQ0hBUjggICAgICAgICAg KktleSwNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAgICBKc29uDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgaWYgKGpzb25fb2JqZWN0X3NldCAoKGpzb25fdCAqKSBKc29uT2JqLCBL ZXksIChqc29uX3QgKikgSnNvbikgIT0gMCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVE Ow0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0 byBnZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIEpTT04gYXJyYXksIG9yDQo+IDAgaWYN Cj4gPiBpdCBpcyBOVUxMIG9yDQo+ID4gKyAgbm90IGEgSlNPTiBhcnJheS4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgIEpzb25BcnJheSAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIEpTT04g YXJyYXkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBl bGVtZW50cyBpbiB0aGlzIEpTT04gYXJyYXkgb3IgMC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtV SU5UTg0KPiA+ICtFRklBUEkNCj4gPiArSnNvbkFycmF5Q291bnQgKA0KPiA+ICsgIElOICAgIEVE S0lJX0pTT05fQVJSQVkgICAgSnNvbkFycmF5DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0 dXJuIGpzb25fYXJyYXlfc2l6ZSAoKGpzb25fdCAqKSBKc29uQXJyYXkpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4gdGhlIEpT T04gdmFsdWUgaW4gdGhlIGFycmF5IGF0IHBvc2l0aW9uDQo+IGluZGV4Lg0KPiA+IFRoZSB2YWxp ZCByYW5nZQ0KPiA+ICsgIGZvciB0aGlzIGluZGV4IGlzIGZyb20gMCB0byB0aGUgcmV0dXJuIHZh bHVlIG9mIEpzb25BcnJheUNvdW50KCkgbWludXMNCj4gMS4NCj4gPiArDQo+ID4gKyAgSXQgb25s eSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoaXMgdmFsdWUgYW5kIGFueSBjaGFuZ2VzIG9uIHRo aXMgdmFsdWUNCj4gd2lsbA0KPiA+IGltcGFjdCB0aGUNCj4gPiArICBvcmlnaW5hbCBKU09OIG9i amVjdC4gSWYgdGhhdCBpcyBub3QgZXhwZWN0ZWQsIHBsZWFzZSBjYWxsDQo+IEpzb25WYWx1ZUNs b25lKCkNCj4gPiB0byBjbG9uZSBpdCB0bw0KPiA+ICsgIHVzZS4NCj4gPiArDQo+ID4gKyAgSWYg dGhpcyBhcnJheSBpcyBOVUxMIG9yIG5vdCBhIEpTT04gYXJyYXksIG9yIGlmIGluZGV4IGlzIG91 dCBvZiByYW5nZSwNCj4gTlVMTA0KPiA+IHdpbGwgYmUgcmV0dXJuZWQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICBKc29uQXJyYXkgICAgICAgICBUaGUgcHJvdmlkZWQgSlNPTiBBcnJheS4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgIFJldHVybiB0aGUgSlNPTiB2YWx1ZSBsb2NhdGVk IGluIHRoZSBJbmRleCBwb3NpdGlvbiBvcg0KPiA+IE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvbkFycmF5R2V0VmFsdWUg KA0KPiA+ICsgIElOICAgIEVES0lJX0pTT05fQVJSQVkgICAgSnNvbkFycmF5LA0KPiA+ICsgIElO ICAgIFVJTlROICAgICAgICAgICAgICAgSW5kZXgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBy ZXR1cm4gKEVES0lJX0pTT05fVkFMVUUpIGpzb25fYXJyYXlfZ2V0ICgoanNvbl90ICopIEpzb25B cnJheSwNCj4gSW5kZXgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVu Y3Rpb24gaXMgdXNlZCB0byBhcHBlbmQgYSBKU09OIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIEpT T04NCj4gYXJyYXksDQo+ID4gYW5kIGdyb3cgdGhlIHNpemUgb2YNCj4gPiArICBhcnJheSBieSAx LiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoaXMgdmFsdWUgd2lsbCBiZSBpbmNyZWFzZWQgYnkg MS4NCj4gPiArDQo+ID4gKyAgTW9yZSBkZXRhaWxzIGZvciByZWZlcmVuY2UgY291bnQgc3RyYXRl Z3kgY2FuIHJlZmVyIHRvIHRoZSBBUEkNCj4gZGVzY3JpcHRpb24NCj4gPiBmb3IgSnNvblZhbHVl RnJlZSgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvbkFycmF5ICAgICAgICAgICAg ICBUaGUgcHJvdmlkZWQgSlNPTiBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb24gICAg ICAgICAgICAgICAgICAgVGhlIEpTT04gdmFsdWUgdG8gYXBwZW5kLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsICAgICAgRUZJX0FCT1JURUQgICAgICAgICAgICBTb21lIGVycm9yIG9jY3VyIGFuZA0K PiA+IG9wZXJhdGlvbiBhYm9ydGVkLg0KPiA+ICsgIEByZXR2YWwgICAgICBFRklfU1VDQ0VTUyAg ICAgICAgICAgIEpTT04gdmFsdWUgaGFzIGJlZW4NCj4gPiBhcHBlbmRlZCB0byB0aGUgZW5kIG9m IHRoZSBKU09OIGFycmF5Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr RUZJQVBJDQo+ID4gK0pzb25BcnJheUFwcGVuZFZhbHVlICgNCj4gPiArICBJTiAgICBFREtJSV9K U09OX0FSUkFZICAgIEpzb25BcnJheSwNCj4gPiArICBJTiAgICBFREtJSV9KU09OX1ZBTFVFICAg IEpzb24NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAoanNvbl9hcnJheV9hcHBlbmQgKChq c29uX3QgKikgSnNvbkFycmF5LCAoanNvbl90ICopIEpzb24pICE9IDApIHsNCj4gPiArICAgIHJl dHVybiBFRklfQUJPUlRFRDsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIGEgSlNPTiB2YWx1ZSBhdCBwb3NpdGlvbiBpbmRleCwg c2hpZnRpbmcNCj4gdGhlDQo+ID4gZWxlbWVudHMgYWZ0ZXIgaW5kZXgNCj4gPiArICBvbmUgcG9z aXRpb24gdG93YXJkcyB0aGUgc3RhcnQgb2YgdGhlIGFycmF5LiBUaGUgcmVmZXJlbmNlIGNvdW50 IG9mDQo+IHRoaXMNCj4gPiB2YWx1ZSB3aWxsIGJlIGRlY3JlYXNlZA0KPiA+ICsgIGJ5IDEuDQo+ ID4gKw0KPiA+ICsgIE1vcmUgZGV0YWlscyBmb3IgcmVmZXJlbmNlIGNvdW50IHN0cmF0ZWd5IGNh biByZWZlciB0byB0aGUgQVBJDQo+IGRlc2NyaXB0aW9uDQo+ID4gZm9yIEpzb25WYWx1ZUZyZWUo KS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEpzb25BcnJheSAgICAgICAgICAgICAgVGhl IHByb3ZpZGVkIEpTT04gYXJyYXkuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEluZGV4ICAgICAgICAg ICAgICAgICAgVGhlIEluZGV4IHBvc2l0aW9uIGJlZm9yZQ0KPiA+IHJlbW92ZW1lbnQuDQo+ID4g Kw0KPiA+ICsgIEByZXR2YWwgICAgICBFRklfQUJPUlRFRCAgICAgICAgICAgIFNvbWUgZXJyb3Ig b2NjdXIgYW5kDQo+ID4gb3BlcmF0aW9uIGFib3J0ZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIEpTT04gYXJyYXkgaGFzIGJlZW4NCj4gPiByZW1vdmVk IGF0IHBvc2l0aW9uIGluZGV4Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK0pzb25BcnJheVJlbW92ZVZhbHVlICgNCj4gPiArICBJTiAgICBFREtJ SV9KU09OX0FSUkFZICAgIEpzb25BcnJheSwNCj4gPiArICBJTiAgICBVSU5UTiAgICAgICAgICAg ICAgIEluZGV4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKGpzb25fYXJyYXlfcmVtb3Zl ICgoanNvbl90ICopIEpzb25BcnJheSwgSW5kZXgpICE9IDApIHsNCj4gPiArICAgIHJldHVybiBF RklfQUJPUlRFRDsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRHVtcCBKU09OIHRv IGEgYnVmZmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvblZhbHVlICAgICAgIFRo ZSBwcm92aWRlZCBKU09OIGFycmF5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICBGbGFncyAgICAgICAg ICAgVGhlIEluZGV4IHBvc2l0aW9uIGJlZm9yZQ0KPiA+IHJlbW92ZW1lbnQuDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgICAgICBOVUxMICAgICAgICAgICAgRHVtcCBmYWlsIGlmIE5VTEwgcmV0dXJu ZWQsIG90aGVyd2lzZQ0KPiA+IHRoZSBidWZmZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRhaW4gSlNPTiBwYXlsYW9kIGluIEFTQ0lJIHN0cmluZy4NCj4gPiArKiov DQo+ID4gK0NIQVI4ICoNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25EdW1wU3RyaW5nICgNCj4gPiAr ICBJTiAgICBFREtJSV9KU09OX0FSUkFZICAgIEpzb25WYWx1ZSwNCj4gPiArICBJTiAgICBVSU5U TiAgICAgICAgICAgICAgIEZsYWdzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgICBpZiAoSnNv blZhbHVlID09IE5VTEwpIHsNCj4gPiArICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICB9DQo+ ID4gKyAgICByZXR1cm4ganNvbl9kdW1wcygoanNvbl90ICopSnNvblZhbHVlLCBGbGFncyk7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIExvYWQgSlNPTiBmcm9tIGEgYnVmZmVyLg0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgQnVmZmVyICAgICAgICBCdWZmZmVyIHRvIHRoZSBK U09OIHBheWxvYWQNCj4gPiArICBAcGFyYW1baW5dICAgQnVmZmVyTGVuICAgICBMZW5ndGggb2Yg dGhlIGJ1ZmZlcg0KPiA+ICsgIEBwYXJhbVtpbl0gICBGbGFncyAgICAgICAgIEZsYWcgb2YgbG9h ZGluZyBKU09OIGJ1ZmZlcg0KPiA+ICsgIEBwYXJhbVtpbl0gICBFcnJvciAgICAgICAgIFBvaW50 ZXIgdG8gZXJyb3Igc3RydWN0dXJlDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBFREtJSV9K U09OX1ZBTFVFICBOVUxMIG1lYW5zIGZhaWwgdG8gbG9hZCBKU09ODQo+ID4gcGF5bG9hZC4NCj4g PiArKiovDQo+ID4gK0VES0lJX0pTT05fVkFMVUUNCj4gPiArRUZJQVBJDQo+ID4gK0pzb25Mb2Fk QnVmZmVyICgNCj4gPiArICBJTiAgICBDT05TVCBDSEFSOCAgICAgICAqQnVmZmVyLA0KPiA+ICsg IElOICAgIFVJTlROICAgICAgICAgICAgIEJ1ZmZlckxlbiwNCj4gPiArICBJTiAgICBVSU5UTiAg ICAgICAgICAgICBGbGFncywNCj4gPiArICBJTiAgICBFREtJSV9KU09OX0VSUk9SICAqRXJyb3IN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4ganNvbl9sb2FkYihCdWZmZXIsIEJ1ZmZl ckxlbiwgRmxhZ3MsIChqc29uX2Vycm9yX3QgKilFcnJvcik7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIERlY3JlYXNlIHJlZmVyZW5jZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgIEpzb25WYWx1ZSAgICAgIEpTT04gdmFsdWUNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiAr RUZJQVBJDQo+ID4gK0pzb25EZWNyZWFzZVJlZmVyZW5jZSAoDQo+ID4gKyAgSU4gRURLSUlfSlNP Tl9WQUxVRSBKc29uVmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBqc29uX2RlY3JlZiAo SnNvblZhbHVlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5jcmVhc2UgcmVm ZXJlbmNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSnNvblZhbHVlICAgICAgSlNPTiB2 YWx1ZQ0KPiA+ICsgIEByZXR2YWwgICAgICBFREtJSV9KU09OX1ZBTFVFIG9mIGl0c2VsZg0KPiA+ ICsqKi8NCj4gPiArRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICtFRklBUEkNCj4gPiArSnNvbkluY3Jl YXNlUmVmZXJlbmNlICgNCj4gPiArICBJTiBFREtJSV9KU09OX1ZBTFVFIEpzb25WYWx1ZQ0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBqc29uX2luY3JlZiAoSnNvblZhbHVlKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJucyBhbiBvcGFxdWUgaXRlcmF0b3Ig d2hpY2ggY2FuIGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGFsbA0KPiBrZXktdmFsdWUNCj4gPiBw YWlycw0KPiA+ICsgIGluIG9iamVjdCwgb3IgTlVMTCBpZiBvYmplY3QgaXMgZW1wdHkuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gICBKc29uVmFsdWUgICAgICBKU09OIHZhbHVlDQo+ID4gKyAg QHJldHZhbCAgICAgIEl0ZXJhdG9yIHBvaW50ZXINCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ ICtFRklBUEkNCj4gPiArSnNvbk9iamVjdEl0ZXJhdG9yICgNCj4gPiArICBJTiBFREtJSV9KU09O X1ZBTFVFIEpzb25WYWx1ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBqc29uX29i amVjdF9pdGVyIChKc29uVmFsdWUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBF eHRyYWN0IHRoZSBhc3NvY2lhdGVkIHZhbHVlIGZyb20gaXRlcmF0b3IuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICBJdGVyYXRvciAgIEl0ZXJhdG9yIHBvaW50ZXINCj4gPiArICBAcmV0dmFs ICAgICAgRURLSUlfSlNPTl9WQUxVRQ0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9WQUxVRQ0K PiA+ICtFRklBUEkNCj4gPiArSnNvbk9iamVjdEl0ZXJhdG9yVmFsdWUgKA0KPiA+ICsgIElOIFZP SUQgKkl0ZXJhdG9yDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIGpzb25fb2JqZWN0 X2l0ZXJfdmFsdWUoSXRlcmF0b3IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBS ZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBuZXh0IGtleS12YWx1ZSBwYWlyIGlu IG9iamVjdCBhZnRlcg0KPiBpdGVyLA0KPiA+ICsgIG9yIE5VTEwgaWYgdGhlIHdob2xlIG9iamVj dCBoYXMgYmVlbiBpdGVyYXRlZCB0aHJvdWdoLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAg SnNvblZhbHVlICBKU09OIHZhbHVlDQo+ID4gKyAgQHBhcmFtW2luXSAgIEl0ZXJhdG9yICAgSXRl cmF0b3IgcG9pbnRlcg0KPiA+ICsgIEByZXR2YWwgICAgICBJdGVyYXRvciBwb2ludGVyDQo+ID4g KyoqLw0KPiA+ICtWT0lEICoNCj4gPiArSnNvbk9iamVjdEl0ZXJhdG9yTmV4dCAoDQo+ID4gKyAg SU4gRURLSUlfSlNPTl9WQUxVRSBKc29uVmFsdWUsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgICAg ICAqSXRlcmF0b3INCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4ganNvbl9vYmplY3Rf aXRlcl9uZXh0KEpzb25WYWx1ZSwgSXRlcmF0b3IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBSZXR1cm5zIHRoZSBqc29uIHR5cGUgb2YgdGhpcyBqc29uIHZhbHVlLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICAgSnNvblZhbHVlICBKU09OIHZhbHVlDQo+ID4gKyAgQHJldHZh bCAgICAgIEpTT04gdHlwZSByZXR1cm5lZA0KPiA+ICsqKi8NCj4gPiArRURLSUlfSlNPTl9UWVBF DQo+ID4gK0VGSUFQSQ0KPiA+ICtKc29uR2V0VHlwZSAoDQo+ID4gKyAgSU4gRURLSUlfSlNPTl9W QUxVRSBKc29uVmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKChqc29uX3Qg KilKc29uVmFsdWUpLT50eXBlOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cv TGlicmFyeS9Kc29uTGliL0pzb25MaWIuaW5mDQo+ID4gYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNv bkxpYi9Kc29uTGliLmluZg0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMC4uMTZkZjJhZTE4Mw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNo UGtnL0xpYnJhcnkvSnNvbkxpYi9Kc29uTGliLmluZg0KPiA+IEBAIC0wLDAgKzEsMTAzIEBADQo+ ID4gKyMjIEBmaWxlDQo+ID4gKyMgVGhpcnR5IHBhcnR5IEphbnNzb24gbGlicmFyeSBmb3IgSlNP TiBvcGVyYXRpb25zLg0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyMgKEMpIENvcHlyaWdo dCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ ICsjDQo+ID4gKyMgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gPiArIw0KPiA+ICsjIw0KPiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZF UlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxYg0KPiA+ICsgIEJBU0VfTkFNRSAg ICAgICAgICAgICAgICAgICAgICA9IEpzb25MaWINCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAg ICAgICAgICAgICAgPQ0KPiA+IEY1RTM2ODE1LTMwNUEtNEM1QS05RDc1LTRGMjE0OUU0NTI1NQ0K PiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQo+ID4g KyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gKyAgTElCUkFSWV9D TEFTUyAgICAgICAgICAgICAgICAgID0gSnNvbkxpYiB8IERYRV9EUklWRVINCj4gPiBEWEVfUlVO VElNRV9EUklWRVIgVUVGSV9BUFBMSUNBVElPTiBVRUZJX0RSSVZFUg0KPiA+ICsNCj4gPiArIw0K PiA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IEFSTSBBQVJD SDY0DQo+ID4gUklTQ1Y2NA0KPiA+ICsjDQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICAj DQo+ID4gKyAgIyBCZWxvdyBhcmUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXJkDQo+ID4gKyAgIyBw YXJ0eSBqYW5zc29uIGxpYnJhcnkuDQo+ID4gKyAgIw0KPiA+ICsgIGphbnNzb24vc3JjL2R1bXAu Yw0KPiA+ICsgIGphbnNzb24vc3JjL2Vycm9yLmMNCj4gPiArICBqYW5zc29uL3NyYy9oYXNodGFi bGUuYw0KPiA+ICsgIGphbnNzb24vc3JjL2hhc2h0YWJsZV9zZWVkLmMNCj4gPiArICBqYW5zc29u L3NyYy9tZW1vcnkuYw0KPiA+ICsgIGphbnNzb24vc3JjL3BhY2tfdW5wYWNrLmMNCj4gPiArICBq YW5zc29uL3NyYy9zdHJidWZmZXIuYw0KPiA+ICsgIGphbnNzb24vc3JjL3N0cmNvbnYuYw0KPiA+ ICsgIGphbnNzb24vc3JjL3V0Zi5jDQo+ID4gKyAgamFuc3Nvbi9zcmMvdmFsdWUuYw0KPiA+ICsg IGphbnNzb24vc3JjL3ZlcnNpb24uYw0KPiA+ICsgICMNCj4gPiArICAjIEJlbG93IGFyZSB0aGUg c291cmNlIG9mIGVkazIgSnNvbkxpYi4NCj4gPiArICAjDQo+ID4gKyAgSnNvbkxpYi5jDQo+ID4g KyAgSnNvblV0aWxpdGllcy5jDQo+ID4gKyAgSnNvblV0aWxpdGllcy5oDQo+ID4gKyAgSmFuc3Nv bkNydExpYlN1cHBvcnQuYw0KPiA+ICsgIEphbnNzb25DcnRMaWJTdXBwb3J0LmgNCj4gPiArICBq YW5zc29uX2NvbmZpZy5oDQo+ID4gKyAgamFuc3Nvbl9wcml2YXRlX2NvbmZpZy5oDQo+ID4gKyAg c3lzL3RpbWUuaA0KPiA+ICsgIHN5cy90eXBlcy5oDQo+ID4gKyAgYXNzZXJ0LmgNCj4gPiArICBl cnJuby5oDQo+ID4gKyAgbGltaXRzLmgNCj4gPiArICBtYXRoLmgNCj4gPiArICBzdGRhcmcuaA0K PiA+ICsgIHN0ZGRlZi5oDQo+ID4gKyAgc3RkaW8uaA0KPiA+ICsgIHN0ZGxpYi5oDQo+ID4gKyAg c3RyaW5nLmgNCj4gPiArICB0aW1lLmgNCj4gPiArICAjDQo+ID4gKyAgIyBCZWxvdyBpcyB0aGUg c291cmNlIGNvZGUgb3ZlcnJpZGUgdG8gZml4IHRoZSBidWlsZCBpc3N1ZS4NCj4gPiArICAjIEFk ZCBjb2RlIGluIGxvYWQuYyB0byBjb25kaXRpb25hbGx5IHVzZSBzdGRpbiBhY2NvcmRpbmcNCj4g PiArICAjIHRvIEhBVkVfVU5JU1REX0ggbWFjcm8uIFRoZSBQUiBpcyBzdWJtaXR0ZWQgdG8gamFu c3Nvbg0KPiA+ICsgICMgb3BlbiBzb3VyY2UgY29tbXVuaXR5Lg0KPiA+ICsgICMgaHR0cHM6Ly9n aXRodWIuY29tL2FraGVyb24vamFuc3Nvbi9wdWxsLzU1OA0KPiA+ICsgICMNCj4gPiArICBsb2Fk LmMNCj4gPiArDQo+ID4gK1tQYWNrYWdlc10NCj4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gKyAgUmVkZmlzaFBrZy9SZWRm aXNoUGtnLmRlYw0KPiA+ICsNCj4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICsgIFVlZmlMaWIN Cj4gPiArICBCYXNlTGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIE1lbW9yeUFsbG9j YXRpb25MaWINCj4gPiArICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4gPiArICBEZWJ1 Z0xpYg0KPiA+ICsgIFByaW50TGliDQo+ID4gKw0KPiA+ICtbQnVpbGRPcHRpb25zXQ0KPiA+ICsg ICMNCj4gPiArICAjIERpc2FibGVzIHRoZSBmb2xsb3dpbmcgVmlzdWFsIFN0dWRpbyBjb21waWxl ciB3YXJuaW5ncw0KPiA+ICsgICMgc28gd2UgZG8gbm90IGJyZWFrIHRoZSBidWlsZCB3aXRoIC9X WCBvcHRpb246DQo+ID4gKyAgIyAgIEM0MDkwOiAnZnVuY3Rpb24nIDogZGlmZmVyZW50ICdjb25z dCcgcXVhbGlmaWVycw0KPiA+ICsgICMgICBDNDI0NDogY29udmVyc2lvbiBmcm9tIHR5cGUxIHRv IHR5cGUyLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGENCj4gPiArICAjICAgQzQ3MDI6IHVucmVhY2hh YmxlIGNvZGUNCj4gPiArICAjICAgQzQ3MDY6IGFzc2lnbm1lbnQgd2l0aGluIGNvbmRpdGlvbmFs IGV4cHJlc3Npb24NCj4gPiArICAjICAgQzQ0NTY6IGRlY2xhcmF0aW9uIGhpZGVzIHByZXZpb3Vz IGxvY2FsIGRlY2xhcmF0aW9uDQo+ID4gKyAgIyAgIEM0MzM0OiAzMi1iaXQgc2hpZnQgaW1wbGlj aXRseSBjb252ZXJ0ZWQgdG8gNjQtYml0DQo+ID4gKyAgIyAgIEM0MjA0OiBub25zdGFuZGFyZCBl eHRlbnNpb24gdXNlZDogbm9uLWNvbnN0YW50IGFnZ3JlZ2F0ZQ0KPiA+IGluaXRpYWxpemVyDQo+ ID4gKyAgIyAgIEM0MjY3OiAndmFyJyA6IGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAndHlw ZScsIHBvc3NpYmxlIGxvc3Mgb2YNCj4gZGF0YQ0KPiA+ICsgICMNCj4gPiArICAjIERlZmluZSBt YWNybyBIQVZFX0NPTkZJR19IIHRvIGluY2x1ZGUgamFuc3Nvbl9wcml2YXRlX2NvbmZpZy5oIHRv DQo+ID4gYnVpbGQuDQo+ID4gKyAgIyBVbmRlZmluZWQgX1dJTjMyLCBXSU42NCwgX01TQ19WRVIg bWFjcm9zDQo+ID4gKyAgIyBPbiBHQ0MsIG5vIGVycm9yIG9uIHRoZSB1bnVzZWQtZnVuY3Rpb24g YW5kIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlLg0KPiA+ICsgICMNCj4gPiArICBNU0ZUOipfKl8q X0NDX0ZMQUdTID0gL3dkNDIwNCAvd2Q0MjY3IC93ZDQ3MDIgL3dkNDcwNiAvd2Q0MjQ0DQo+ID4g L3dkNDA5MCAvd2Q0NDU2IC93ZDQzMzQgL0RIQVZFX0NPTkZJR19IPTEgL1VfV0lOMzIgL1VXSU42 NA0KPiA+IC9VX01TQ19WRVINCj4gPiArICBHQ0M6Kl8qXypfQ0NfRkxBR1MgPSAtV25vLXVudXNl ZC1mdW5jdGlvbg0KPiA+IC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUNCj4gPiArDQo+ID4g ZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL0pzb25VdGlsaXRpZXMuYw0K PiA+IGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvSnNvblV0aWxpdGllcy5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5mODRhMTMzMjE5DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL0pzb25V dGlsaXRpZXMuYw0KPiA+IEBAIC0wLDAgKzEsNDE3IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsg IFV0aWxpdHkgZnVuY3Rpb25zIGZvciBKU09OIG9wZXJhdGlvbnMuDQo+ID4gKw0KPiA+ICsgIENv cHlyaWdodCAoYykgMjAxOCAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0IFBhY2thcmQgRW50 ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSAiSnNvblV0aWxpdGllcy5oIg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg U2luY2UgZWFjaCBVQ1MyIGNoYXJhY3RlciBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgMS0zIFVURjgg ZW5jb2RlZA0KPiA+IGNoYXJhY3RlcnMsDQo+ID4gKyAgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRv IHJldHJpZXZlIHRoZSBVVEY4IGVuY29kaW5nIHNpemUgZm9yIGEgVUNTMg0KPiA+IGNoYXJhY3Rl ci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIFV0ZjhCdWZmZXIgICAgICAgVGhlIGJ1ZmZl ciBmb3IgVVRGOCBlbmNvZGVkIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgICBSZXR1 cm4gdGhlIHNpemUgb2YgVVRGOCBlbmNvZGluZyBzdHJpbmcgb3IgMCBpZiBpdCBpcyBub3QNCj4g Zm9yDQo+ID4gKyAgICAgICAgICAgICAgIFVDUzIgZm9ybWF0Lg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK1VJTlQ4DQo+ID4gK0dldFVURjhTaXplRm9yVUNTMiAoDQo+ID4gKyAgSU4gICAgQ0hBUjgg ICAgICAqVXRmOEJ1ZmZlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENIQVI4ICAgIFRlbXBD aGFyOw0KPiA+ICsgIFVJTlQ4ICAgIFV0ZjhTaXplOw0KPiA+ICsNCj4gPiArICBBU1NFUlQgKFV0 ZjhCdWZmZXIgIT0gTlVMTCk7DQo+ID4gKw0KPiA+ICsgIFRlbXBDaGFyID0gKlV0ZjhCdWZmZXI7 DQo+ID4gKyAgaWYgKChUZW1wQ2hhciAmIDB4RjApID09IDB4RjApIHsNCj4gPiArDQo+ID4gKyAg ICAvLw0KPiA+ICsgICAgLy8gVGhpcyBmb3JtYXQgaXMgbm90IGZvciBVQ1MyLg0KPiA+ICsgICAg Ly8NCj4gPiArICAgIHJldHVybiAwOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgVXRmOFNpemUg PSAxOw0KPiA+ICsgIGlmICgoVGVtcENoYXIgJiAweDgwKSA9PSAweDgwKSB7DQo+ID4gKyAgICBp ZiAoKFRlbXBDaGFyICYgMHhDMCkgPT0gMHhDMCkgew0KPiA+ICsNCj4gPiArICAgICAgVXRmOFNp emUgKys7DQo+ID4gKyAgICAgIGlmICgoVGVtcENoYXIgJiAweEUwKSA9PSAweEUwKSB7DQo+ID4g Kw0KPiA+ICsgICAgICAgIFV0ZjhTaXplICsrOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gVXRmOFNpemU7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFNpbmNlIGVhY2ggVUNTMiBjaGFyYWN0ZXIgY2FuIGJlIHJlcHJlc2Vu dGVkIGJ5IHRoZSBmb3JtYXQ6IFx1WFhYWCwNCj4gdGhpcw0KPiA+IGZ1bmN0aW9uDQo+ID4gKyAg aXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgVUNTMiBjaGFyYWN0ZXIgZnJvbSBhIFVuaWNvZGUgZm9y bWF0Lg0KPiA+ICsgIENhbGwgTVVTVCBtYWtlIHN1cmUgdGhlcmUgYXJlIGF0IGxlYXN0IDYgQnl0 ZXMgaW4gdGhlIGlucHV0IFVURjgNCj4gYnVmZmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICAgIFV0ZjhCdWZmZXIgICAgICAgICAgICAgVGhlIGJ1ZmZlciBmb3IgVVRGOCBlbmNvZGVkDQo+ ID4gZGF0YS4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFVjczJDaGFyICAgICAgICAgICAgICAgVGhl IGNvbnZlcnRlZCBVQ1MyDQo+ID4gY2hhcmFjdGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAg ICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgTm9uLUFzY2lpIGNoYXJhY3RlcnMgZm91bmQNCj4g PiBpbiB0aGUgaGV4YWRlY2ltYWwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlnaXRzIHN0cmluZywgYW5kIGNhbid0IGJlDQo+ID4gY29udmVydGVkIHRvIGEg VUNTMg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0 ZXIuDQo+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVQ1My IGNoYXJhY3RlciBoYXMNCj4gPiBiZWVuIHJldHJpZXZlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0dldFVDUzJDaGFyQnlGb3JtYXQgKA0KPiA+ICsgIElOICAgIENI QVI4ICAgICAgKlV0ZjhCdWZmZXIsDQo+ID4gKyAgT1VUICAgQ0hBUjE2ICAgICAqVWNzMkNoYXIN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UOCAgICAgTnVtMTsNCj4gPiArICBVSU5UOCAg ICAgTnVtMjsNCj4gPiArICBVSU5UOCAgICAgSW5kZXg7DQo+ID4gKyAgQ0hBUjggICAgIFVjczJD aGFyRm9ybWF0W0pTT05fVU5JQ09ERV9GT1JNQVRfQ0hBUl9TSVpFXTsNCj4gPiAvLy8gdHdvIEhl eGFkZWNpbWFsIGRpZ2l0cyBBc2NpaSBzdHJpbmcsIGxpa2UgIjNGIg0KPiA+ICsNCj4gPiArICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCA0OyBJbmRleCArKykgew0KPiA+ICsgICAgaWYgKCgqKFV0 ZjhCdWZmZXIgKyAyICsgSW5kZXgpICYgMHg4MCkgIT0gMHgwMCkgew0KPiA+ICsgICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgWmVyb01lbSAoVWNzMkNoYXJGb3JtYXQsIEpTT05fVU5JQ09ERV9GT1JNQVRfQ0hBUl9T SVpFKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBHZXQgdGhlIEZpcnN0IE51bWJlciwg T2Zmc2V0IGlzIDINCj4gPiArICAvLw0KPiA+ICsgIENvcHlNZW0gKFVjczJDaGFyRm9ybWF0LCBV dGY4QnVmZmVyICsgMiwNCj4gPiBKU09OX1VOSUNPREVfRk9STUFUX0NIQVJfTEVOKTsNCj4gPiAr ICBOdW0xID0gKFVJTlQ4KSBBc2NpaVN0ckhleFRvVWludG4gKFVjczJDaGFyRm9ybWF0KTsNCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBHZXQgdGhlIFNlY29uZCBOdW1iZXIsIE9mZnNldCBp cyA0DQo+ID4gKyAgLy8NCj4gPiArICBDb3B5TWVtIChVY3MyQ2hhckZvcm1hdCwgVXRmOEJ1ZmZl ciArIDQsDQo+ID4gSlNPTl9VTklDT0RFX0ZPUk1BVF9DSEFSX0xFTik7DQo+ID4gKyAgTnVtMiA9 IChVSU5UOCkgQXNjaWlTdHJIZXhUb1VpbnRuIChVY3MyQ2hhckZvcm1hdCk7DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gVWNzMkNoYXIgaXMgTGl0dGxlLUVuZGlhbg0KPiA+ICsgIC8vDQo+ ID4gKyAgKigoQ0hBUjggKikgVWNzMkNoYXIpICAgICAgICA9IE51bTI7DQo+ID4gKyAgKigoKENI QVI4ICopIFVjczJDaGFyKSArIDEpID0gTnVtMTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDb252ZXJ0IGEgVUNTMiBj aGFyYWN0ZXIgdG8gVVRGOCBlbmNvZGluZyBzdHJpbmcuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gICAgVWNzMkNoYXIgICAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgVUNTMg0KPiA+IGNoYXJh Y3Rlci4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFV0ZjhCdWZmZXIgICAgICAgICAgICAgVGhlIGNv bnZlcnRlZCBVVEY4IGVuY29kZWQNCj4gPiBkYXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAg ICAgUmV0dXJuIHRoZSBzaXplIG9mIFVURjggZW5jb2RpbmcgZGF0YSBmb3IgdGhpcyBVQ1MyDQo+ ID4gY2hhcmFjdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ4DQo+ID4gK1VDUzJDaGFy VG9VVEY4ICgNCj4gPiArICBJTiAgQ0hBUjE2ICAgICBVY3MyQ2hhciwNCj4gPiArICBPVVQgQ0hB UjggICAgICAqVXRmOEJ1ZmZlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQxNiAgICBV Y3MyTnVtYmVyOw0KPiA+ICsNCj4gPiArICBBU1NFUlQgKFV0ZjhCdWZmZXIgIT0gTlVMTCk7DQo+ ID4gKw0KPiA+ICsgIFVjczJOdW1iZXIgPSAoVUlOVDE2KSBVY3MyQ2hhcjsNCj4gPiArICBpZiAo VWNzMk51bWJlciA8PSAweDAwN0YpIHsNCj4gPiArDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8g VVRGOCBmb3JtYXQ6IDB4eHh4eHh4DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgKlV0ZjhCdWZmZXIg PSBVY3MyQ2hhciAmIDB4N0Y7DQo+ID4gKyAgICByZXR1cm4gMTsNCj4gPiArDQo+ID4gKyAgfSBl bHNlIGlmIChVY3MyTnVtYmVyID49IDB4MDA4MCAmJiBVY3MyTnVtYmVyIDw9IDB4MDdGRikgew0K PiA+ICsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBVVEY4IGZvcm1hdDogMTEweHh4eHggMTB4 eHh4eHgNCj4gPiArICAgIC8vDQo+ID4gKyAgICAqKFV0ZjhCdWZmZXIgKyAxKSA9IChVY3MyQ2hh ciAmIDB4M0YpIHwgMHg4MDsNCj4gPiArICAgICpVdGY4QnVmZmVyICAgICAgID0gKChVY3MyQ2hh ciA+PiA2KSAmIDB4MUYpIHwgMHhDMDsNCj4gPiArICAgIHJldHVybiAyOw0KPiA+ICsNCj4gPiAr ICB9IGVsc2UgeyAgLy8vIFVjczJOdW1iZXIgPj0gMHgwODAwICYmIFVjczJOdW1iZXIgPD0gMHhG RkZGDQo+ID4gKw0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFVURjggZm9ybWF0OiAxMTEweHh4 eCAxMHh4eHh4eCAxMHh4eHh4eA0KPiA+ICsgICAgLy8NCj4gPiArICAgICooVXRmOEJ1ZmZlciAr IDIpID0gKFVjczJDaGFyICYgMHgzRikgfCAweDgwOw0KPiA+ICsgICAgKihVdGY4QnVmZmVyICsg MSkgPSAoKFVjczJDaGFyID4+IDYpICYgMHgzRikgfCAweDgwOw0KPiA+ICsgICAgKlV0ZjhCdWZm ZXIgICAgICAgPSAoKFVjczJDaGFyID4+IDEyKSAmIDB4MEYpIHwgMHhFMDsNCj4gPiArICAgIHJl dHVybiAzOw0KPiA+ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ29udmVy dCBhIFVURjggZW5jb2RlZCBkYXRhIHRvIGEgVUNTMiBjaGFyYWN0ZXIuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICAgVXRmOEJ1ZmZlciAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgVVRGOCBl bmNvZGVkDQo+ID4gZGF0YS4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFVjczJDaGFyICAgICAgICAg ICAgICAgVGhlIGNvbnZlcnRlZCBVQ1MyDQo+ID4gY2hhcmFjdGVyLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVURjggZW5jb2RlZCBzdHJp bmcgaXMNCj4gPiBub3QgdmFsaWQgb3INCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm90IGZvciBVQ1MyIGNoYXJhY3Rlci4NCj4gPiArICBAcmV0dmFsICAgICAg IEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNvbnZlcnRlZCBVQ1MyDQo+ID4gY2hhcmFjdGVy Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArVVRGOFRvVUNTMkNoYXIg KA0KPiA+ICsgIElOICAgQ0hBUjggICAgICAqVXRmOEJ1ZmZlciwNCj4gPiArICBPVVQgIENIQVIx NiAgICAgKlVjczJDaGFyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDggICAgVXRmOFNp emU7DQo+ID4gKyAgQ0hBUjggICAgKlVjczJCdWZmZXI7DQo+ID4gKyAgQ0hBUjggICAgVGVtcENo YXIxOw0KPiA+ICsgIENIQVI4ICAgIFRlbXBDaGFyMjsNCj4gPiArICBDSEFSOCAgICBUZW1wQ2hh cjM7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoVXRmOEJ1ZmZlciAhPSBOVUxMICYmIFVjczJDaGFy ICE9IE5VTEwpOw0KPiA+ICsgIFplcm9NZW0gKFVjczJDaGFyLCBzaXplb2YgKENIQVIxNikpOw0K PiA+ICsgIFVjczJCdWZmZXIgPSAoQ0hBUjggKikgVWNzMkNoYXI7DQo+ID4gKw0KPiA+ICsgIFV0 ZjhTaXplID0gR2V0VVRGOFNpemVGb3JVQ1MyIChVdGY4QnVmZmVyKTsNCj4gPiArICBzd2l0Y2gg KFV0ZjhTaXplKSB7DQo+ID4gKw0KPiA+ICsgICAgY2FzZSAxOg0KPiA+ICsNCj4gPiArICAgICAg Ly8NCj4gPiArICAgICAgLy8gVVRGOCBmb3JtYXQ6IDB4eHh4eHh4DQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIFRlbXBDaGFyMSA9ICpVdGY4QnVmZmVyOw0KPiA+ICsgICAgICBpZiAoKFRlbXBD aGFyMSAmIDB4ODApICE9IDB4MDApIHsNCj4gPiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAqVWNzMkJ1ZmZlciAg ICAgICA9IFRlbXBDaGFyMTsNCj4gPiArICAgICAgKihVY3MyQnVmZmVyICsgMSkgPSAwOw0KPiA+ ICsgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICBjYXNlIDI6DQo+ID4gKw0KPiA+ICsgICAg ICAvLw0KPiA+ICsgICAgICAvLyBVVEY4IGZvcm1hdDogMTEweHh4eHggMTB4eHh4eHgNCj4gPiAr ICAgICAgLy8NCj4gPiArICAgICAgVGVtcENoYXIxID0gKlV0ZjhCdWZmZXI7DQo+ID4gKyAgICAg IGlmICgoVGVtcENoYXIxICYgMHhFMCkgIT0gMHhDMCkgew0KPiA+ICsgICAgICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIFRl bXBDaGFyMiA9ICooVXRmOEJ1ZmZlciArIDEpOw0KPiA+ICsgICAgICBpZiAoKFRlbXBDaGFyMiAm IDB4QzApICE9IDB4ODApIHsNCj4gPiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAqVWNzMkJ1ZmZlciAgICAgICA9 IChUZW1wQ2hhcjEgPDwgNikgKyAoVGVtcENoYXIyICYgMHgzRik7DQo+ID4gKyAgICAgICooVWNz MkJ1ZmZlciArIDEpID0gKFRlbXBDaGFyMSA+PiAyKSAmIDB4MDc7DQo+ID4gKyAgICAgIGJyZWFr Ow0KPiA+ICsNCj4gPiArICAgIGNhc2UgMzoNCj4gPiArDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIC8vIFVURjggZm9ybWF0OiAxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4eA0KPiA+ICsgICAg ICAvLw0KPiA+ICsgICAgICBUZW1wQ2hhcjEgPSAqVXRmOEJ1ZmZlcjsNCj4gPiArICAgICAgaWYg KChUZW1wQ2hhcjEgJiAweEYwKSAhPSAweEUwKSB7DQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgVGVtcENo YXIyID0gKihVdGY4QnVmZmVyICsgMSk7DQo+ID4gKyAgICAgIGlmICgoVGVtcENoYXIyICYgMHhD MCkgIT0gMHg4MCkgew0KPiA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIFRlbXBDaGFyMyA9ICooVXRmOEJ1ZmZl ciArIDIpOw0KPiA+ICsgICAgICBpZiAoKFRlbXBDaGFyMyAmIDB4QzApICE9IDB4ODApIHsNCj4g PiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgICAqVWNzMkJ1ZmZlciAgICAgICA9IChUZW1wQ2hhcjIgPDwgNikgKyAo VGVtcENoYXIzICYgMHgzRik7DQo+ID4gKyAgICAgICooVWNzMkJ1ZmZlciArIDEpID0gKFRlbXBD aGFyMSA8PCA0KSArICgoVGVtcENoYXIyID4+IDIpICYgMHgwRik7DQo+ID4gKw0KPiA+ICsgICAg ICBicmVhazsNCj4gPiArDQo+ID4gKyAgICBkZWZhdWx0Og0KPiA+ICsNCj4gPiArICAgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ29udmVydCBh IFVDUzIgc3RyaW5nIHRvIGEgVVRGOCBlbmNvZGVkIHN0cmluZy4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgICBVY3MyU3RyICAgICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBVQ1MyIHN0cmlu Zy4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFV0ZjhTdHJBZGRyICAgICAgICAgICAgVGhlIGNvbnZl cnRlZCBVVEY4IHN0cmluZw0KPiA+IGFkZHJlc3MuIENhbGxlcg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXNwb25zaWJsZSBmb3IgRnJlZSB0aGlzDQo+ ID4gc3RyaW5nLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycw0KPiA+IGFyZSBpbnZhbGlkLg0KPiA+ICsgIEBy ZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBTeXN0ZW0gcnVucyBvdXQgb2YNCj4g PiByZXNvdXJjZXMuDQo+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAg IFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGhhcw0KPiA+IGJlZW4gY29udmVydGVkLg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArVUNTMlN0clRvVVRGOCAoDQo+ID4gKyAg SU4gIENIQVIxNiAgICAgKlVjczJTdHIsDQo+ID4gKyAgT1VUIENIQVI4ICAgICAgKipVdGY4U3Ry QWRkcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROICAgIFVjczJTdHJJbmRleDsNCj4g PiArICBVSU5UTiAgICBVY3MyU3RyTGVuZ3RoOw0KPiA+ICsgIENIQVI4ICAgICpVdGY4U3RyOw0K PiA+ICsgIFVJTlROICAgIFV0ZjhTdHJMZW5ndGg7DQo+ID4gKyAgVUlOVE4gICAgVXRmOFN0cklu ZGV4Ow0KPiA+ICsgIENIQVI4ICAgIFV0ZjhCdWZmZXJbVVRGOF9CVUZGRVJfRk9SX1VDUzJfTUFY X1NJWkVdOw0KPiA+ICsgIFVJTlQ4ICAgIFV0ZjhCdWZmZXJTaXplOw0KPiA+ICsNCj4gPiArICBp ZiAoVWNzMlN0ciA9PSBOVUxMIHx8IFV0ZjhTdHJBZGRyID09IE5VTEwpIHsNCj4gPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBVY3My U3RyTGVuZ3RoID0gU3RyTGVuIChVY3MyU3RyKTsNCj4gPiArICBVdGY4U3RyTGVuZ3RoID0gMDsN Cj4gPiArDQo+ID4gKyAgZm9yIChVY3MyU3RySW5kZXggPSAwOyBVY3MyU3RySW5kZXggPCBVY3My U3RyTGVuZ3RoOyBVY3MyU3RySW5kZXggKyspIHsNCj4gPiArDQo+ID4gKyAgICBaZXJvTWVtIChV dGY4QnVmZmVyLCBzaXplb2YgKFV0ZjhCdWZmZXIpKTsNCj4gPiArICAgIFV0ZjhCdWZmZXJTaXpl ID0gVUNTMkNoYXJUb1VURjggKFVjczJTdHJbVWNzMlN0ckluZGV4XSwgVXRmOEJ1ZmZlcik7DQo+ ID4gKyAgICBVdGY4U3RyTGVuZ3RoICs9IFV0ZjhCdWZmZXJTaXplOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgVXRmOFN0ciA9IEFsbG9jYXRlWmVyb1Bvb2wgKFV0ZjhTdHJMZW5ndGggKyAxKTsN Cj4gPiArICBpZiAoVXRmOFN0ciA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBVdGY4U3RySW5kZXggPSAwOw0K PiA+ICsgIGZvciAoVWNzMlN0ckluZGV4ID0gMDsgVWNzMlN0ckluZGV4IDwgVWNzMlN0ckxlbmd0 aDsgVWNzMlN0ckluZGV4ICsrKSB7DQo+ID4gKw0KPiA+ICsgICAgWmVyb01lbSAoVXRmOEJ1ZmZl ciwgc2l6ZW9mIChVdGY4QnVmZmVyKSk7DQo+ID4gKyAgICBVdGY4QnVmZmVyU2l6ZSA9IFVDUzJD aGFyVG9VVEY4IChVY3MyU3RyW1VjczJTdHJJbmRleF0sIFV0ZjhCdWZmZXIpOw0KPiA+ICsNCj4g PiArICAgIENvcHlNZW0gKFV0ZjhTdHIgKyBVdGY4U3RySW5kZXgsIFV0ZjhCdWZmZXIsIFV0ZjhC dWZmZXJTaXplKTsNCj4gPiArICAgIFV0ZjhTdHJJbmRleCArPSBVdGY4QnVmZmVyU2l6ZTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIFV0ZjhTdHJbVXRmOFN0ckluZGV4XSA9ICdcMCc7DQo+ID4g KyAgKlV0ZjhTdHJBZGRyID0gVXRmOFN0cjsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDb252ZXJ0IGEgVVRGOCBlbmNv ZGVkIHN0cmluZyB0byBhIFVDUzIgc3RyaW5nLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAg IFV0ZjhTdHIgICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZA0KPiA+IHN0 cmluZy4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFVjczJTdHJBZGRyICAgICAgICAgICAgVGhlIGNv bnZlcnRlZCBVQ1MyIHN0cmluZw0KPiA+IGFkZHJlc3MuIENhbGxlcg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXNwb25zaWJsZSBmb3IgRnJlZSB0aGlz DQo+ID4gc3RyaW5nLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgVGhlIFVURjggZW5jb2RlZCBzdHJpbmcgaXMNCj4gPiBub3QgdmFsaWQgdG8NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCB0byBVQ1My IHN0cmluZy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25l IG9yIG1vcmUgcGFyYW1ldGVycw0KPiA+IGFyZSBpbnZhbGlkLg0KPiA+ICsgIEByZXR2YWwgICAg ICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBTeXN0ZW0gcnVucyBvdXQgb2YNCj4gPiByZXNvdXJj ZXMuDQo+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVQ1My IHN0cmluZyBoYXMgYmVlbg0KPiA+IGNvbnZlcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK1VURjhTdHJUb1VDUzIgKA0KPiA+ICsgIElOICBDSEFSOCAgICAgICpV dGY4U3RyLA0KPiA+ICsgIE9VVCBDSEFSMTYgICAgICoqVWNzMlN0ckFkZHINCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAgICAg IFV0ZjhTdHJJbmRleDsNCj4gPiArICBVSU5UTiAgICAgICAgIFV0ZjhTdHJMZW5ndGg7DQo+ID4g KyAgVUlOVE4gICAgICAgICBVY3MyU3RySW5kZXg7DQo+ID4gKyAgVUlOVDggICAgICAgICBVdGY4 QnVmZmVyU2l6ZTsNCj4gPiArICBDSEFSMTYgICAgICAgICpVY3MyU3RyVGVtcDsNCj4gPiArDQo+ ID4gKyAgaWYgKFV0ZjhTdHIgPT0gTlVMTCB8fCBVY3MyU3RyQWRkciA9PSBOVUxMKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgLy8NCj4gPiArICAvLyBJdCBpcyBub3QgYW4gQXNjaWkgc3RyaW5nLCBjYWxjdWxhdGUgc3Ry aW5nIGxlbmd0aC4NCj4gPiArICAvLw0KPiA+ICsgIFV0ZjhTdHJMZW5ndGggPSAwOw0KPiA+ICsg IHdoaWxlICgqKFV0ZjhTdHIgKyBVdGY4U3RyTGVuZ3RoKSAhPSAnXDAnKSB7DQo+ID4gKyAgICBV dGY4U3RyTGVuZ3RoICsrOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBV Q1MyIHN0cmluZyBzaGFsbCBub3QgYmUgbG9uZ2VyIHRoYW4gdGhlIFVURjggc3RyaW5nLg0KPiA+ ICsgIC8vDQo+ID4gKyAgVWNzMlN0clRlbXAgPSBBbGxvY2F0ZVplcm9Qb29sICgoVXRmOFN0ckxl bmd0aCArIDEpICogc2l6ZW9mIChDSEFSMTYpKTsNCj4gPiArICBpZiAoVWNzMlN0clRlbXAgPT0g TlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgVXRmOFN0ckluZGV4ID0gMDsNCj4gPiArICBVY3MyU3RySW5kZXggPSAw Ow0KPiA+ICsgIHdoaWxlIChVdGY4U3RyW1V0ZjhTdHJJbmRleF0gIT0gJ1wwJykgew0KPiA+ICsN Cj4gPiArICAgIGlmIChDb21wYXJlTWVtIChVdGY4U3RyICsgVXRmOFN0ckluZGV4LCAiXFx1Iiwg MikgPT0gMCAmJg0KPiA+ICsgICAgICBVdGY4U3RyTGVuZ3RoIC0gVXRmOFN0ckluZGV4ID49IEpT T05fVU5JQ09ERV9GT1JNQVRfTEVOKSB7DQo+ID4gKw0KPiA+ICsgICAgICBTdGF0dXMgPSBHZXRV Q1MyQ2hhckJ5Rm9ybWF0IChVdGY4U3RyICsgVXRmOFN0ckluZGV4LA0KPiA+IFVjczJTdHJUZW1w ICsgVWNzMlN0ckluZGV4KTsNCj4gPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiArDQo+ID4gKyAgICAgICAgVXRmOFN0ckluZGV4ICs9IEpTT05fVU5JQ09ERV9GT1JNQVRf TEVOOw0KPiA+ICsgICAgICAgIFVjczJTdHJJbmRleCArKzsNCj4gPiArICAgICAgfSBlbHNlIHsN Cj4gPiArDQo+ID4gKyAgICAgICAgU3RyQ3B5UyAoVWNzMlN0clRlbXAgKyBVY3MyU3RySW5kZXgs IDMsIEwiXFx1Iik7DQo+ID4gKw0KPiA+ICsgICAgICAgIFVjczJTdHJJbmRleCArPSAyOw0KPiA+ ICsgICAgICAgIFV0ZjhTdHJJbmRleCArPSAyOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9IGVs c2Ugew0KPiA+ICsNCj4gPiArICAgICAgVXRmOEJ1ZmZlclNpemUgPSBHZXRVVEY4U2l6ZUZvclVD UzIgKFV0ZjhTdHIgKyBVdGY4U3RySW5kZXgpOw0KPiA+ICsgICAgICBpZiAoVXRmOEJ1ZmZlclNp emUgPT0gMCB8fCBVdGY4U3RyTGVuZ3RoIC0gVXRmOFN0ckluZGV4IDwNCj4gPiBVdGY4QnVmZmVy U2l6ZSkgew0KPiA+ICsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoVWNzMlN0clRlbXApOw0KPiA+ ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgIFN0YXR1cyA9IFVURjhUb1VDUzJDaGFyIChVdGY4U3RyICsgVXRmOFN0 ckluZGV4LCBVY3MyU3RyVGVtcCArDQo+ID4gVWNzMlN0ckluZGV4KTsNCj4gPiArICAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoVWNz MlN0clRlbXApOw0KPiA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIFVjczJTdHJJbmRleCArKzsNCj4gPiArICAg ICAgVXRmOFN0ckluZGV4ICs9IFV0ZjhCdWZmZXJTaXplOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgKlVjczJTdHJBZGRyID0gQWxsb2NhdGVaZXJvUG9vbCAoKFVjczJTdHJJ bmRleCArIDEpICogc2l6ZW9mIChDSEFSMTYpKTsNCj4gPiArICBpZiAoKlVjczJTdHJBZGRyID09 IE5VTEwpIHsNCj4gPiArDQo+ID4gKyAgICBGcmVlUG9vbCAoVWNzMlN0clRlbXApOw0KPiA+ICsg ICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg U3RyQ3B5UyAoKlVjczJTdHJBZGRyLCBVY3MyU3RySW5kZXggKyAxLCBVY3MyU3RyVGVtcCk7DQo+ ID4gKyAgKigqVWNzMlN0ckFkZHIgKyBVY3MyU3RySW5kZXgpID0gTCdcMCc7DQo+ID4gKyAgRnJl ZVBvb2wgKFVjczJTdHJUZW1wKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiA+ICt9DQo+ID4gKw0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxp Yi9Kc29uVXRpbGl0aWVzLmgNCj4gPiBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL0pzb25V dGlsaXRpZXMuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MC4uMWFhYTRkMzFlMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNoUGtnL0xp YnJhcnkvSnNvbkxpYi9Kc29uVXRpbGl0aWVzLmgNCj4gPiBAQCAtMCwwICsxLDY5IEBADQo+ID4g Ky8qKiBAZmlsZQ0KPiA+ICsgIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBKU09OIG9wZXJhdGlvbnMu DQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQg UGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgSlNPTl9VVElMSVRJRVNfSF8NCj4gPiArI2RlZmluZSBK U09OX1VUSUxJVElFU19IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gPiArI2lu Y2x1ZGUgPFVlZmkuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+ID4gKyNp bmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gPiArI2luY2x1ZGUgImph bnNzb24uaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgSlNPTl9VTklDT0RFX0ZPUk1BVF9MRU4gICAg NiAgICAgICAvLy8gIEwiXHUwMDAwIg0KPiA+ICsjZGVmaW5lIEpTT05fVU5JQ09ERV9GT1JNQVRf U0laRSAgIDcNCj4gPiArDQo+ID4gKyNkZWZpbmUgSlNPTl9VTklDT0RFX0ZPUk1BVF9DSEFSX0xF TiAgICAyDQo+ID4gKyNkZWZpbmUgSlNPTl9VTklDT0RFX0ZPUk1BVF9DSEFSX1NJWkUgICAzDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFVURjhfQlVGRkVSX0ZPUl9VQ1MyX01BWF9TSVpFICAgMw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQ29udmVydCBhIFVDUzIgc3RyaW5nIHRvIGEgVVRGOCBlbmNv ZGVkIHN0cmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICBVY3MyU3RyICAgICAgICAg ICAgICAgIFRoZSBwcm92aWRlZCBVQ1MyIHN0cmluZy4NCj4gPiArICBAcGFyYW1bb3V0XSAgIFV0 ZjhTdHJBZGRyICAgICAgICAgICAgVGhlIGNvbnZlcnRlZCBVVEY4IHN0cmluZw0KPiA+IGFkZHJl c3MuIENhbGxlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp cyByZXNwb25zaWJsZSBmb3IgRnJlZSB0aGlzDQo+ID4gc3RyaW5nLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVy cw0KPiA+IGFyZSBpbnZhbGlkLg0KPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNP VVJDRVMgICBTeXN0ZW0gcnVucyBvdXQgb2YNCj4gPiByZXNvdXJjZXMuDQo+ID4gKyAgQHJldHZh bCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGhh cw0KPiA+IGJlZW4gY29udmVydGVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArVUNTMlN0clRvVVRGOCAoDQo+ID4gKyAgSU4gIENIQVIxNiAgICAgKlVjczJTdHIsDQo+ ID4gKyAgT1VUIENIQVI4ICAgICAgKipVdGY4U3RyQWRkcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBDb252ZXJ0IGEgVVRGOCBlbmNvZGVkIHN0cmluZyB0byBhIFVDUzIgc3Ry aW5nLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIFV0ZjhTdHIgICAgICAgICAgICAgICAg VGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZA0KPiA+IHN0cmluZy4NCj4gPiArICBAcGFyYW1bb3V0 XSAgIFVjczJTdHJBZGRyICAgICAgICAgICAgVGhlIGNvbnZlcnRlZCBVQ1MyIHN0cmluZw0KPiA+ IGFkZHJlc3MuIENhbGxlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpcyByZXNwb25zaWJsZSBmb3IgRnJlZSB0aGlzDQo+ID4gc3RyaW5nLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVURjggZW5jb2Rl ZCBzdHJpbmcgaXMNCj4gPiBub3QgdmFsaWQgdG8NCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29udmVydCB0byBVQ1MyIHN0cmluZy4NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25lIG9yIG1vcmUgcGFyYW1ldGVycw0KPiA+ IGFyZSBpbnZhbGlkLg0KPiA+ICsgIEByZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICBTeXN0ZW0gcnVucyBvdXQgb2YNCj4gPiByZXNvdXJjZXMuDQo+ID4gKyAgQHJldHZhbCAgICAg ICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVQ1MyIHN0cmluZyBoYXMgYmVlbg0KPiA+IGNv bnZlcnRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1VURjhTdHJU b1VDUzIgKA0KPiA+ICsgIElOICBDSEFSOCAgICAgICpVdGY4U3RyLA0KPiA+ICsgIE9VVCBDSEFS MTYgICAgICoqVWNzMlN0ckFkZHINCj4gPiArICApOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4g ZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL1JlYWRtZS50eHQNCj4gPiBi L1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL1JlYWRtZS50eHQNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmNjMTQ5MTk2YjkNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvUmVhZG1lLnR4dA0KPiA+ IEBAIC0wLDAgKzEsNDAgQEANCj4gPg0KPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID09PT0NCj4gPiA9PT09PT09PT09PT09PT09 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50cm9kdWN0aW9uDQo+ID4NCj4g Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiA9PT09DQo+ID4gPT09PT09PT09PT09PT09PQ0KPiA+ICsgIEphbnNzb24gaXMgYSBDIGxp YnJhcnkgZm9yIGVuY29kaW5nLCBkZWNvZGluZyBhbmQgbWFuaXB1bGF0aW5nIEpTT04NCj4gZGF0 YS4NCj4gPiArSXRzIG1haW4gZmVhdHVyZXMgYW5kIGRlc2lnbiBwcmluY2lwbGVzIGFyZToNCj4g PiArDQo+ID4gKyAgLSBTaW1wbGUgYW5kIGludHVpdGl2ZSBBUEkgYW5kIGRhdGEgbW9kZWwNCj4g PiArICAtIENvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbg0KPiA+ICsgIC0gTm8gZGVwZW5kZW5j aWVzIG9uIG90aGVyIGxpYnJhcmllcw0KPiA+ICsgIC0gRnVsbCBVbmljb2RlIHN1cHBvcnQgKFVU Ri04KQ0KPiA+ICsgIC0gRXh0ZW5zaXZlIHRlc3Qgc3VpdGUNCj4gPiArDQo+ID4gKyAgSmFuc3Nv biBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UocmVmZXIgdG8gUmVhZE1lLnJzdCB1 bmRlcg0KPiA+IGVkazIpLg0KPiA+ICtJdCBpcyB1c2VkIGluIHByb2R1Y3Rpb24gYW5kIGl0cyBB UEkgaXMgc3RhYmxlLiBJdCB3b3JrcyBvbiBudW1lcm91cw0KPiA+ICtwbGF0Zm9ybXMsIGluY2x1 ZGluZyBudW1lcm91cyBVbml4IGxpa2Ugc3lzdGVtcyBhbmQgV2luZG93cy4gSXQncw0KPiBzdWl0 YWJsZQ0KPiA+ICtmb3IgdXNlIG9uIGFueSBzeXN0ZW0sIGluY2x1ZGluZyBkZXNrdG9wLCBzZXJ2 ZXIsIGFuZCBzbWFsbCBlbWJlZGRlZA0KPiA+IHN5c3RlbXMuDQo+ID4gKw0KPiA+ICsgIEluIFVF RkkvRURLSUkgZW52aXJvbm1lbnQsIFJlZGZpc2ggcHJvamVjdCBjb25zdW1lcyBqYW5zc29uIHRv IGFjaGlldmUNCj4gPiBKU09ODQo+ID4gK29wZXJhdGlvbnMuDQo+ID4gKw0KPiA+ICsqIEphbnNz b24gdmVyc2lvbiBvbiBlZGsyOiAyLjEzLjENCj4gPiArDQo+ID4gKyogRURLSUkgamFuc3NvbiBs aWJyYXJ5IHdyYXBwZXI6DQo+ID4gKyAgIC0gSnNvbkxpYi5oOg0KPiA+ICsgICAgIFRoaXMgaXMg dGhlIGRlbmlmaXRpb25zIG9mIEVES0lJIEpTT04gQVBJcyB3aGljaCBhcmUgbWFwcGVkIHRvDQo+ ID4gKyAgICAgamFubnNvbiBmdW5jaXRvbnMgYWNjb3JkaW5nbHkuDQo+ID4gKw0KPiA+ICsgICAt IEphbnNzb25Kc29uTGliTWFwcGluZy5oOg0KPiA+ICsgICAgIFRoaXMgaXMgdGhlIHdyYXBwZXIg dG8gbWFwIGZ1bmNpdG9ucyBhbmQgZGVmaW5pdGlvbnMgdXNlZCBpbg0KPiA+ICsgICAgIG5hdGl2 ZSBqYW5uc29uIGFwcGxpY2F0aW9ucyB0byBlZGsyIEpzb25MaWIuIFRoaXMgYXZvaWRzIHRoZQ0K PiA+ICsgICAgIG1vZGlmaWNhdGlvbnMgb24gbmF0aXZlIGphbm5zb24gYXBwbGljYXRpb25zIHRv IGJlIGJ1aWx0IHVuZGVyDQo+ID4gKyAgICAgZWRrMiBlbnZpcm9ubWVudC4NCj4gPiArDQo+ID4g KypLbm93biBpc3N1ZToNCj4gPiArICAgQnVpbGQgZmFpbCB3aXRoIGphbnNzb24vc3JjL2xvYWQu YywgYWRkIGNvZGUgaW4gbG9hZC5jIHRvDQo+IGNvbmRpdGlvbmFsbHkNCj4gPiArICAgdXNlIHN0 ZGluIGFjY29yZGluZyB0byBIQVZFX1VOSVNURF9IIG1hY3JvLiBUaGUgUFIgaXMgc3VibWl0dGVk IHRvDQo+ID4gKyAgIGphbnNzb24gb3BlbiBzb3VyY2UgY29tbXVuaXR5Lg0KPiA+ICsgICBodHRw czovL2dpdGh1Yi5jb20vYWtoZXJvbi9qYW5zc29uL3B1bGwvNTU4DQo+ID4gKw0KPiA+ICsNCj4g PiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvYXNzZXJ0LmgNCj4gPiBi L1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL2Fzc2VydC5oDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi44ZjllYjc0OGU0DQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL2Fzc2VydC5oDQo+ID4gQEAg LTAsMCArMSwxNiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBJbmNsdWRlIGZpbGUgdG8gc3Vw cG9ydCBidWlsZGluZyB0aGUgdGhpcmQtcGFydHkgamFuc3NvbiBsaWJyYXJ5Lg0KPiA+ICsNCj4g PiArIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiA+ICsgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRl cnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ ID4gKyNpZm5kZWYgSkFOU1NPTl9DUlRfQVNTRVJUX0hfDQo+ID4gKyNkZWZpbmUgSkFOU1NPTl9D UlRfQVNTRVJUX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SmFuc3NvbkNydExpYlN1cHBvcnQu aD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL0xpYnJh cnkvSnNvbkxpYi9lcnJuby5oDQo+ID4gYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9lcnJu by5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5iMTE5 MWIyMjVhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9K c29uTGliL2Vycm5vLmgNCj4gPiBAQCAtMCwwICsxLDE2IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ ICsgIEluY2x1ZGUgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0aGlyZC1wYXJ0eSBqYW5z c29uIGxpYnJhcnkuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyAoQykgQ29weXJpZ2h0IDIw MjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gKw0K PiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBKQU5TU09OX0NSVF9FUlJOT19IXw0K PiA+ICsjZGVmaW5lIEpBTlNTT05fQ1JUX0VSUk5PX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8 SmFuc3NvbkNydExpYlN1cHBvcnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1n aXQgYS9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9qYW5zc29uX2NvbmZpZy5oDQo+ID4gYi9S ZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9qYW5zc29uX2NvbmZpZy5oDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi42YjE1NDI4OWRmDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL2phbnNzb25fY29u ZmlnLmgNCj4gPiBAQCAtMCwwICsxLDYwIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTAtMjAxNiBQZXRyaSBMZWh0aW5lbiA8cGV0cmlAZGlnaXAub3JnPg0KPiA+ ICsgKg0KPiA+ICsgKiBKYW5zc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN SVQgbGljZW5zZS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZmlsZSBzcGVjaWZpZXMgYSBwYXJ0IG9mIHRoZSBzaXRlLXNwZWNpZmljIGNv bmZpZ3VyYXRpb24gZm9yDQo+ID4gKyAqIEphbnNzb24sIG5hbWVseSB0aG9zZSB0aGluZ3MgdGhh dCBhZmZlY3QgdGhlIHB1YmxpYyBBUEkgaW4NCj4gPiArICogamFuc3Nvbi5oLg0KPiA+ICsgKg0K PiA+ICsgKiBUaGUgY29uZmlndXJlIHNjcmlwdCBjb3BpZXMgdGhpcyBmaWxlIHRvIGphbnNzb25f Y29uZmlnLmggYW5kDQo+ID4gKyAqIHJlcGxhY2VzIEB2YXJAIHN1YnN0aXR1dGlvbnMgYnkgdmFs dWVzIHRoYXQgZml0IHlvdXIgc3lzdGVtLiBJZiB5b3UNCj4gPiArICogY2Fubm90IHJ1biB0aGUg Y29uZmlndXJlIHNjcmlwdCwgeW91IGNhbiBkbyB0aGUgdmFsdWUgc3Vic3RpdHV0aW9uDQo+ID4g KyAqIGJ5IGhhbmQuDQo+ID4gKw0KPiA+ICsgamFuc3NvbiBvcGVuIHNvdXJjZSBsaWNlbnNlLA0K PiA+ICsgaHR0cHM6Ly9naXRodWIuY29tL2FraGVyb24vamFuc3Nvbi9ibG9iL21hc3Rlci9MSUNF TlNFDQo+ID4gKw0KPiA+ICsgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRl cnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKyAqKi8NCj4gPiArDQo+ID4gKyNp Zm5kZWYgSkFOU1NPTl9DT05GSUdfSF8NCj4gPiArI2RlZmluZSBKQU5TU09OX0NPTkZJR19IXw0K PiA+ICsNCj4gPiArLyogSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB0aGUgaW5saW5lIGtleXdv cmQgaW4gQywgSlNPTl9JTkxJTkUgaXMNCj4gPiArICAgZGVmaW5lZCB0byBgaW5saW5lJywgb3Ro ZXJ3aXNlIGVtcHR5LiBJbiBDKyssIHRoZSBpbmxpbmUgaXMgYWx3YXlzDQo+ID4gKyAgIHN1cHBv cnRlZC4gKi8NCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gKyNkZWZpbmUgSlNPTl9JTkxJ TkUgaW5saW5lDQo+ID4gKyNlbHNlDQo+ID4gKyNkZWZpbmUgSlNPTl9JTkxJTkUNCj4gPiArI2Vu ZGlmDQo+ID4gKw0KPiA+ICsvKiBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBgbG9uZyBs b25nYCB0eXBlIGFuZCB0aGUgc3RydG9sbCgpDQo+ID4gKyAgIGxpYnJhcnkgZnVuY3Rpb24sIEpT T05fSU5URUdFUl9JU19MT05HX0xPTkcgaXMgZGVmaW5lZCB0byAxLA0KPiA+ICsgICBvdGhlcndp c2UgdG8gMC4gKi8NCj4gPiArI2RlZmluZSBKU09OX0lOVEVHRVJfSVNfTE9OR19MT05HIDENCj4g PiArDQo+ID4gKy8qIElmIGxvY2FsZS5oIGFuZCBsb2NhbGVjb252KCkgYXJlIGF2YWlsYWJsZSwg ZGVmaW5lIHRvIDEsDQo+ID4gKyAgIG90aGVyd2lzZSB0byAwLiAqLw0KPiA+ICsjZGVmaW5lIEpT T05fSEFWRV9MT0NBTEVDT05WIDANCj4gPiArDQo+ID4gKy8qIElmIF9fYXRvbWljIGJ1aWx0aW5z IGFyZSBhdmFpbGFibGUgdGhleSB3aWxsIGJlIHVzZWQgdG8gbWFuYWdlDQo+ID4gKyAgIHJlZmVy ZW5jZSBjb3VudHMgb2YganNvbl90LiAqLw0KPiA+ICsjZGVmaW5lIEpTT05fSEFWRV9BVE9NSUNf QlVJTFRJTlMgMA0KPiA+ICsNCj4gPiArLyogSWYgX19hdG9taWMgYnVpbHRpbnMgYXJlIG5vdCBh dmFpbGFibGUgd2UgdHJ5IHVzaW5nIF9fc3luYyBidWlsdGlucw0KPiA+ICsgICB0byBtYW5hZ2Ug cmVmZXJlbmNlIGNvdW50cyBvZiBqc29uX3QuICovDQo+ID4gKyNkZWZpbmUgSlNPTl9IQVZFX1NZ TkNfQlVJTFRJTlMgMA0KPiA+ICsNCj4gPiArLyogTWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9y IHBhcnNpbmcgSlNPTiBpbnB1dC4NCj4gPiArICAgVGhpcyBsaW1pdHMgdGhlIGRlcHRoIG9mIGUu Zy4gYXJyYXktd2l0aGluLWFycmF5IGNvbnN0cnVjdGlvbnMuICovDQo+ID4gKyNkZWZpbmUgSlNP Tl9QQVJTRVJfTUFYX0RFUFRIIDIwNDgNCj4gPiArDQo+ID4gKyNkZWZpbmUgU1VQUE9SVF9KQU5T U09OX0pTT05fUkVBTCAxDQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvUmVk ZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvamFuc3Nvbl9wcml2YXRlX2NvbmZpZy5oDQo+ID4gYi9S ZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9qYW5zc29uX3ByaXZhdGVfY29uZmlnLmgNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjI2OGY5MWVmOGENCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvamFu c3Nvbl9wcml2YXRlX2NvbmZpZy5oDQo+ID4gQEAgLTAsMCArMSwxOSBAQA0KPiA+ICsvKiogQGZp bGUNCj4gPiArICBKYW5zc29uIHByaXZhdGUgY29uZmlndXJhdGlvbnMgZm9yIFVFRkkgc3VwcG9y dC4NCj4gPiArDQo+ID4gKyBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0 IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiAr KiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fUFJJVkFURV9DT05GSUdfSF8NCj4gPiAr I2RlZmluZSBKQU5TU09OX1BSSVZBVEVfQ09ORklHX0hfDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEhB VkVfU1lTX1RJTUVfSCAxDQo+ID4gKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxDQo+ID4gKw0K PiA+ICsjZGVmaW5lIElOSVRJQUxfSEFTSFRBQkxFX09SREVSIDMNCj4gPiArDQo+ID4gKyNlbmRp Zg0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9saW1pdHMuaA0K PiA+IGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvbGltaXRzLmgNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjFhNTQ0YWRlY2UNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvbGltaXRzLmgNCj4g PiBAQCAtMCwwICsxLDE2IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEluY2x1ZGUgZmlsZSB0 byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0aGlyZC1wYXJ0eSBqYW5zc29uIGxpYnJhcnkuDQo+ID4g Kw0KPiA+ICsgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gKyAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJk IEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICsNCj4gPiArI2lmbmRlZiBKQU5TU09OX0NSVF9MSU1JVFNfSF8NCj4gPiArI2RlZmluZSBKQU5T U09OX0NSVF9MSU1JVFNfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxKYW5zc29uQ3J0TGliU3Vw cG9ydC5oPg0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cv TGlicmFyeS9Kc29uTGliL2xvYWQuYw0KPiA+IGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIv bG9hZC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi45 MjA2M2U2M2NiDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFy eS9Kc29uTGliL2xvYWQuYw0KPiA+IEBAIC0wLDAgKzEsMTExMSBAQA0KPiA+ICsvKg0KPiA+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNiBQZXRyaSBMZWh0aW5lbiA8cGV0cmlAZGlnaXAub3Jn Pg0KPiA+ICsgKg0KPiA+ICsgKiBKYW5zc29uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBNSVQgbGljZW5zZS4gU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuDQo+ID4gKw0KPiA+ICsg KEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50 IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfR05VX1NPVVJDRQ0K PiA+ICsjZGVmaW5lIF9HTlVfU09VUkNFDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgImphbnNzb25fcHJpdmF0ZS5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGFzc2VydC5oPg0K PiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbWl0cy5oPg0KPiA+ICsj aW5jbHVkZSA8c3RkaW8uaD4NCj4gPiArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiA+ICsjaW5jbHVk ZSA8c3RyaW5nLmg+DQo+ID4gKyNpZmRlZiBIQVZFX1VOSVNURF9IDQo+ID4gKyNpbmNsdWRlIDx1 bmlzdGQuaD4NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiamFuc3Nvbi5oIg0K PiA+ICsjaW5jbHVkZSAic3RyYnVmZmVyLmgiDQo+ID4gKyNpbmNsdWRlICJ1dGYuaCINCj4gPiAr DQo+ID4gKyNkZWZpbmUgU1RSRUFNX1NUQVRFX09LICAgIDANCj4gPiArI2RlZmluZSBTVFJFQU1f U1RBVEVfRU9GICAgLTENCj4gPiArI2RlZmluZSBTVFJFQU1fU1RBVEVfRVJST1IgLTINCj4gPiAr DQo+ID4gKyNkZWZpbmUgVE9LRU5fSU5WQUxJRCAtMQ0KPiA+ICsjZGVmaW5lIFRPS0VOX0VPRiAg ICAgMA0KPiA+ICsjZGVmaW5lIFRPS0VOX1NUUklORyAgMjU2DQo+ID4gKyNkZWZpbmUgVE9LRU5f SU5URUdFUiAyNTcNCj4gPiArI2RlZmluZSBUT0tFTl9SRUFMICAgIDI1OA0KPiA+ICsjZGVmaW5l IFRPS0VOX1RSVUUgICAgMjU5DQo+ID4gKyNkZWZpbmUgVE9LRU5fRkFMU0UgICAyNjANCj4gPiAr I2RlZmluZSBUT0tFTl9OVUxMICAgIDI2MQ0KPiA+ICsNCj4gPiArLyogTG9jYWxlIGluZGVwZW5k ZW50IHZlcnNpb25zIG9mIGlzeHh4KCkgZnVuY3Rpb25zICovDQo+ID4gKyNkZWZpbmUgbF9pc3Vw cGVyKGMpICgnQScgPD0gKGMpICYmIChjKSA8PSAnWicpDQo+ID4gKyNkZWZpbmUgbF9pc2xvd2Vy KGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpDQo+ID4gKyNkZWZpbmUgbF9pc2FscGhhKGMp IChsX2lzdXBwZXIoYykgfHwgbF9pc2xvd2VyKGMpKQ0KPiA+ICsjZGVmaW5lIGxfaXNkaWdpdChj KSAoJzAnIDw9IChjKSAmJiAoYykgPD0gJzknKQ0KPiA+ICsjZGVmaW5lIGxfaXN4ZGlnaXQoYykN Cj4gPiBcDQo+ID4gKyAgICAobF9pc2RpZ2l0KGMpIHx8ICgnQScgPD0gKGMpICYmIChjKSA8PSAn RicpIHx8ICgnYScgPD0gKGMpICYmIChjKSA8PQ0KPiAnZicpKQ0KPiA+ICsNCj4gPiArLyogUmVh ZCBvbmUgYnl0ZSBmcm9tIHN0cmVhbSwgY29udmVydCB0byB1bnNpZ25lZCBjaGFyLCB0aGVuIGlu dCwgYW5kDQo+ID4gKyAgIHJldHVybi4gcmV0dXJuIEVPRiBvbiBlbmQgb2YgZmlsZS4gVGhpcyBj b3JyZXNwb25kcyB0byB0aGUNCj4gPiArICAgYmVoYXZpb3VyIG9mIGZnZXRjKCkuICovDQo+ID4g K3R5cGVkZWYgaW50ICgqZ2V0X2Z1bmMpKHZvaWQgKmRhdGEpOw0KPiA+ICsNCj4gPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiA+ICsgICAgZ2V0X2Z1bmMgZ2V0Ow0KPiA+ICsgICAgdm9pZCAqZGF0YTsN Cj4gPiArICAgIGNoYXIgYnVmZmVyWzVdOw0KPiA+ICsgICAgc2l6ZV90IGJ1ZmZlcl9wb3M7DQo+ ID4gKyAgICBpbnQgc3RhdGU7DQo+ID4gKyAgICBpbnQgbGluZTsNCj4gPiArICAgIGludCBjb2x1 bW4sIGxhc3RfY29sdW1uOw0KPiA+ICsgICAgc2l6ZV90IHBvc2l0aW9uOw0KPiA+ICt9IHN0cmVh bV90Ow0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgICAgc3RyZWFtX3Qgc3Ry ZWFtOw0KPiA+ICsgICAgc3RyYnVmZmVyX3Qgc2F2ZWRfdGV4dDsNCj4gPiArICAgIHNpemVfdCBm bGFnczsNCj4gPiArICAgIHNpemVfdCBkZXB0aDsNCj4gPiArICAgIGludCB0b2tlbjsNCj4gPiAr ICAgIHVuaW9uIHsNCj4gPiArICAgICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICBjaGFy ICp2YWw7DQo+ID4gKyAgICAgICAgICAgIHNpemVfdCBsZW47DQo+ID4gKyAgICAgICAgfSBzdHJp bmc7DQo+ID4gKyAgICAgICAganNvbl9pbnRfdCBpbnRlZ2VyOw0KPiA+ICsgICAgICAgIGRvdWJs ZSByZWFsOw0KPiA+ICsgICAgfSB2YWx1ZTsNCj4gPiArfSBsZXhfdDsNCj4gPiArDQo+ID4gKyNk ZWZpbmUgc3RyZWFtX3RvX2xleChzdHJlYW0pIGNvbnRhaW5lcl9vZihzdHJlYW0sIGxleF90LCBz dHJlYW0pDQo+ID4gKw0KPiA+ICsvKioqIGVycm9yIHJlcG9ydGluZyAqKiovDQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBlcnJvcl9zZXQoanNvbl9lcnJvcl90ICplcnJvciwgY29uc3QgbGV4X3Qg KmxleCwgZW51bQ0KPiA+IGpzb25fZXJyb3JfY29kZSBjb2RlLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqbXNnLCAuLi4pIHsNCj4gPiArICAgIHZhX2xpc3QgYXA7DQo+ ID4gKyAgICBjaGFyIG1zZ190ZXh0W0pTT05fRVJST1JfVEVYVF9MRU5HVEhdOw0KPiA+ICsgICAg Y2hhciBtc2dfd2l0aF9jb250ZXh0W0pTT05fRVJST1JfVEVYVF9MRU5HVEhdOw0KPiA+ICsNCj4g PiArICAgIGludCBsaW5lID0gLTEsIGNvbCA9IC0xOw0KPiA+ICsgICAgc2l6ZV90IHBvcyA9IDA7 DQo+ID4gKyAgICBjb25zdCBjaGFyICpyZXN1bHQgPSBtc2dfdGV4dDsNCj4gPiArDQo+ID4gKyAg ICBpZiAoIWVycm9yKQ0KPiA+ICsgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICB2YV9z dGFydChhcCwgbXNnKTsNCj4gPiArICAgIHZzbnByaW50Zihtc2dfdGV4dCwgSlNPTl9FUlJPUl9U RVhUX0xFTkdUSCwgbXNnLCBhcCk7DQo+ID4gKyAgICBtc2dfdGV4dFtKU09OX0VSUk9SX1RFWFRf TEVOR1RIIC0gMV0gPSAnXDAnOw0KPiA+ICsgICAgdmFfZW5kKGFwKTsNCj4gPiArDQo+ID4gKyAg ICBpZiAobGV4KSB7DQo+ID4gKyAgICAgICAgY29uc3QgY2hhciAqc2F2ZWRfdGV4dCA9IHN0cmJ1 ZmZlcl92YWx1ZSgmbGV4LT5zYXZlZF90ZXh0KTsNCj4gPiArDQo+ID4gKyAgICAgICAgbGluZSA9 IGxleC0+c3RyZWFtLmxpbmU7DQo+ID4gKyAgICAgICAgY29sID0gbGV4LT5zdHJlYW0uY29sdW1u Ow0KPiA+ICsgICAgICAgIHBvcyA9IGxleC0+c3RyZWFtLnBvc2l0aW9uOw0KPiA+ICsNCj4gPiAr ICAgICAgICBpZiAoc2F2ZWRfdGV4dCAmJiBzYXZlZF90ZXh0WzBdKSB7DQo+ID4gKyAgICAgICAg ICAgIGlmIChsZXgtPnNhdmVkX3RleHQubGVuZ3RoIDw9IDIwKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICBzbnByaW50Zihtc2dfd2l0aF9jb250ZXh0LA0KPiA+IEpTT05fRVJST1JfVEVYVF9MRU5H VEgsICIlcyBuZWFyICclcyciLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3Rl eHQsIHNhdmVkX3RleHQpOw0KPiA+ICsgICAgICAgICAgICAgICAgbXNnX3dpdGhfY29udGV4dFtK U09OX0VSUk9SX1RFWFRfTEVOR1RIIC0gMV0gPQ0KPiA+ICdcMCc7DQo+ID4gKyAgICAgICAgICAg ICAgICByZXN1bHQgPSBtc2dfd2l0aF9jb250ZXh0Ow0KPiA+ICsgICAgICAgICAgICB9DQo+ID4g KyAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgaWYgKGNvZGUgPT0ganNvbl9lcnJv cl9pbnZhbGlkX3N5bnRheCkgew0KPiA+ICsgICAgICAgICAgICAgICAgLyogTW9yZSBzcGVjaWZp YyBlcnJvciBjb2RlIGZvciBwcmVtYXR1cmUgZW5kIG9mIGZpbGUuICovDQo+ID4gKyAgICAgICAg ICAgICAgICBjb2RlID0ganNvbl9lcnJvcl9wcmVtYXR1cmVfZW5kX29mX2lucHV0Ow0KPiA+ICsg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIGlmIChsZXgtPnN0cmVhbS5zdGF0ZSA9PSBT VFJFQU1fU1RBVEVfRVJST1IpIHsNCj4gPiArICAgICAgICAgICAgICAgIC8qIE5vIGNvbnRleHQg Zm9yIFVURi04IGRlY29kaW5nIGVycm9ycyAqLw0KPiA+ICsgICAgICAgICAgICAgICAgcmVzdWx0 ID0gbXNnX3RleHQ7DQo+ID4gKyAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAg ICAgICBzbnByaW50Zihtc2dfd2l0aF9jb250ZXh0LA0KPiA+IEpTT05fRVJST1JfVEVYVF9MRU5H VEgsICIlcyBuZWFyIGVuZCBvZiBmaWxlIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg IG1zZ190ZXh0KTsNCj4gPiArICAgICAgICAgICAgICAgIG1zZ193aXRoX2NvbnRleHRbSlNPTl9F UlJPUl9URVhUX0xFTkdUSCAtIDFdID0NCj4gPiAnXDAnOw0KPiA+ICsgICAgICAgICAgICAgICAg cmVzdWx0ID0gbXNnX3dpdGhfY29udGV4dDsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAg ICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBqc29ucF9lcnJvcl9zZXQoZXJyb3Is IGxpbmUsIGNvbCwgcG9zLCBjb2RlLCAiJXMiLCByZXN1bHQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioqIGxleGljYWwgYW5hbHl6ZXIgKioqLw0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3Ry ZWFtX2luaXQoc3RyZWFtX3QgKnN0cmVhbSwgZ2V0X2Z1bmMgZ2V0LCB2b2lkICpkYXRhKSB7DQo+ ID4gKyAgICBzdHJlYW0tPmdldCA9IGdldDsNCj4gPiArICAgIHN0cmVhbS0+ZGF0YSA9IGRhdGE7 DQo+ID4gKyAgICBzdHJlYW0tPmJ1ZmZlclswXSA9ICdcMCc7DQo+ID4gKyAgICBzdHJlYW0tPmJ1 ZmZlcl9wb3MgPSAwOw0KPiA+ICsNCj4gPiArICAgIHN0cmVhbS0+c3RhdGUgPSBTVFJFQU1fU1RB VEVfT0s7DQo+ID4gKyAgICBzdHJlYW0tPmxpbmUgPSAxOw0KPiA+ICsgICAgc3RyZWFtLT5jb2x1 bW4gPSAwOw0KPiA+ICsgICAgc3RyZWFtLT5wb3NpdGlvbiA9IDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgc3RyZWFtX2dldChzdHJlYW1fdCAqc3RyZWFtLCBqc29uX2Vycm9yX3Qg KmVycm9yKSB7DQo+ID4gKyAgICBpbnQgYzsNCj4gPiArDQo+ID4gKyAgICBpZiAoc3RyZWFtLT5z dGF0ZSAhPSBTVFJFQU1fU1RBVEVfT0spDQo+ID4gKyAgICAgICAgcmV0dXJuIHN0cmVhbS0+c3Rh dGU7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFzdHJlYW0tPmJ1ZmZlcltzdHJlYW0tPmJ1ZmZlcl9w b3NdKSB7DQo+ID4gKyAgICAgICAgYyA9IHN0cmVhbS0+Z2V0KHN0cmVhbS0+ZGF0YSk7DQo+ID4g KyAgICAgICAgaWYgKGMgPT0gRU9GKSB7DQo+ID4gKyAgICAgICAgICAgIHN0cmVhbS0+c3RhdGUg PSBTVFJFQU1fU1RBVEVfRU9GOw0KPiA+ICsgICAgICAgICAgICByZXR1cm4gU1RSRUFNX1NUQVRF X0VPRjsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIHN0cmVhbS0+YnVmZmVy WzBdID0gYzsNCj4gPiArICAgICAgICBzdHJlYW0tPmJ1ZmZlcl9wb3MgPSAwOw0KPiA+ICsNCj4g PiArICAgICAgICBpZiAoMHg4MCA8PSBjICYmIGMgPD0gMHhGRikgew0KPiA+ICsgICAgICAgICAg ICAvKiBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlICovDQo+ID4gKyAgICAgICAgICAgIHNpemVf dCBpLCBjb3VudDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgIGNvdW50ID0gdXRmOF9jaGVja19m aXJzdChjKTsNCj4gPiArICAgICAgICAgICAgaWYgKCFjb3VudCkNCj4gPiArICAgICAgICAgICAg ICAgIGdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgYXNzZXJ0KGNvdW50ID49IDIp Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspDQo+ ID4gKyAgICAgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlcltpXSA9IHN0cmVhbS0+Z2V0KHN0cmVh bS0+ZGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBpZiAoIXV0ZjhfY2hlY2tfZnVsbChz dHJlYW0tPmJ1ZmZlciwgY291bnQsIE5VTEwpKQ0KPiA+ICsgICAgICAgICAgICAgICAgZ290byBv dXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlcltjb3VudF0gPSAnXDAn Ow0KPiA+ICsgICAgICAgIH0gZWxzZQ0KPiA+ICsgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlclsx XSA9ICdcMCc7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgYyA9IHN0cmVhbS0+YnVmZmVy W3N0cmVhbS0+YnVmZmVyX3BvcysrXTsNCj4gPiArDQo+ID4gKyAgICBzdHJlYW0tPnBvc2l0aW9u Kys7DQo+ID4gKyAgICBpZiAoYyA9PSAnXG4nKSB7DQo+ID4gKyAgICAgICAgc3RyZWFtLT5saW5l Kys7DQo+ID4gKyAgICAgICAgc3RyZWFtLT5sYXN0X2NvbHVtbiA9IHN0cmVhbS0+Y29sdW1uOw0K PiA+ICsgICAgICAgIHN0cmVhbS0+Y29sdW1uID0gMDsNCj4gPiArICAgIH0gZWxzZSBpZiAodXRm OF9jaGVja19maXJzdChjKSkgew0KPiA+ICsgICAgICAgIC8qIHRyYWNrIHRoZSBVbmljb2RlIGNo YXJhY3RlciBjb2x1bW4sIHNvIGluY3JlbWVudCBvbmx5IGlmDQo+ID4gKyAgICAgICAgICAgdGhp cyBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgVVRGLTggc2VxdWVuY2UgKi8NCj4gPiArICAg ICAgICBzdHJlYW0tPmNvbHVtbisrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVy biBjOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgc3RyZWFtLT5zdGF0ZSA9IFNUUkVBTV9T VEFURV9FUlJPUjsNCj4gPiArICAgIGVycm9yX3NldChlcnJvciwgc3RyZWFtX3RvX2xleChzdHJl YW0pLCBqc29uX2Vycm9yX2ludmFsaWRfdXRmOCwNCj4gPiArICAgICAgICAgICAgICAidW5hYmxl IHRvIGRlY29kZSBieXRlIDB4JXgiLCBjKTsNCj4gPiArICAgIHJldHVybiBTVFJFQU1fU1RBVEVf RVJST1I7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHN0cmVhbV91bmdldChzdHJl YW1fdCAqc3RyZWFtLCBpbnQgYykgew0KPiA+ICsgICAgaWYgKGMgPT0gU1RSRUFNX1NUQVRFX0VP RiB8fCBjID09IFNUUkVBTV9TVEFURV9FUlJPUikNCj4gPiArICAgICAgICByZXR1cm47DQo+ID4g Kw0KPiA+ICsgICAgc3RyZWFtLT5wb3NpdGlvbi0tOw0KPiA+ICsgICAgaWYgKGMgPT0gJ1xuJykg ew0KPiA+ICsgICAgICAgIHN0cmVhbS0+bGluZS0tOw0KPiA+ICsgICAgICAgIHN0cmVhbS0+Y29s dW1uID0gc3RyZWFtLT5sYXN0X2NvbHVtbjsNCj4gPiArICAgIH0gZWxzZSBpZiAodXRmOF9jaGVj a19maXJzdChjKSkNCj4gPiArICAgICAgICBzdHJlYW0tPmNvbHVtbi0tOw0KPiA+ICsNCj4gPiAr ICAgIGFzc2VydChzdHJlYW0tPmJ1ZmZlcl9wb3MgPiAwKTsNCj4gPiArICAgIHN0cmVhbS0+YnVm ZmVyX3Bvcy0tOw0KPiA+ICsgICAgYXNzZXJ0KHN0cmVhbS0+YnVmZmVyW3N0cmVhbS0+YnVmZmVy X3Bvc10gPT0gYyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbGV4X2dldChsZXhf dCAqbGV4LCBqc29uX2Vycm9yX3QgKmVycm9yKSB7DQo+ID4gKyAgICByZXR1cm4gc3RyZWFtX2dl dCgmbGV4LT5zdHJlYW0sIGVycm9yKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg bGV4X3NhdmUobGV4X3QgKmxleCwgaW50IGMpDQo+ID4geyBzdHJidWZmZXJfYXBwZW5kX2J5dGUo JmxleC0+c2F2ZWRfdGV4dCwgYyk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbGV4X2dldF9z YXZlKGxleF90ICpsZXgsIGpzb25fZXJyb3JfdCAqZXJyb3IpIHsNCj4gPiArICAgIGludCBjID0g c3RyZWFtX2dldCgmbGV4LT5zdHJlYW0sIGVycm9yKTsNCj4gPiArICAgIGlmIChjICE9IFNUUkVB TV9TVEFURV9FT0YgJiYgYyAhPSBTVFJFQU1fU1RBVEVfRVJST1IpDQo+ID4gKyAgICAgICAgbGV4 X3NhdmUobGV4LCBjKTsNCj4gPiArICAgIHJldHVybiBjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBsZXhfdW5nZXQobGV4X3QgKmxleCwgaW50IGMpIHsgc3RyZWFtX3VuZ2V0KCZs ZXgtPnN0cmVhbSwgYyk7DQo+IH0NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGxleF91bmdldF91 bnNhdmUobGV4X3QgKmxleCwgaW50IGMpIHsNCj4gPiArICAgIGlmIChjICE9IFNUUkVBTV9TVEFU RV9FT0YgJiYgYyAhPSBTVFJFQU1fU1RBVEVfRVJST1IpIHsNCj4gPiArLyogU2luY2Ugd2UgdHJl YXQgd2FybmluZ3MgYXMgZXJyb3JzLCB3aGVuIGFzc2VydGlvbnMgYXJlIHR1cm5lZA0KPiA+ICsg KiBvZmYgdGhlICJkIiB2YXJpYWJsZSB3b3VsZCBiZSBzZXQgYnV0IG5ldmVyIHVzZWQuIFdoaWNo IGlzDQo+ID4gKyAqIHRyZWF0ZWQgYXMgYW4gZXJyb3IgYnkgR0NDLg0KPiA+ICsgKi8NCj4gPiAr I2lmbmRlZiBOREVCVUcNCj4gPiArICAgICAgICBjaGFyIGQ7DQo+ID4gKyNlbmRpZg0KPiA+ICsg ICAgICAgIHN0cmVhbV91bmdldCgmbGV4LT5zdHJlYW0sIGMpOw0KPiA+ICsjaWZuZGVmIE5ERUJV Rw0KPiA+ICsgICAgICAgIGQgPQ0KPiA+ICsjZW5kaWYNCj4gPiArICAgICAgICAgICAgc3RyYnVm ZmVyX3BvcCgmbGV4LT5zYXZlZF90ZXh0KTsNCj4gPiArICAgICAgICBhc3NlcnQoYyA9PSBkKTsN Cj4gPiArICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbGV4X3NhdmVfY2Fj aGVkKGxleF90ICpsZXgpIHsNCj4gPiArICAgIHdoaWxlIChsZXgtPnN0cmVhbS5idWZmZXJbbGV4 LT5zdHJlYW0uYnVmZmVyX3Bvc10gIT0gJ1wwJykgew0KPiA+ICsgICAgICAgIGxleF9zYXZlKGxl eCwgbGV4LT5zdHJlYW0uYnVmZmVyW2xleC0+c3RyZWFtLmJ1ZmZlcl9wb3NdKTsNCj4gPiArICAg ICAgICBsZXgtPnN0cmVhbS5idWZmZXJfcG9zKys7DQo+ID4gKyAgICAgICAgbGV4LT5zdHJlYW0u cG9zaXRpb24rKzsNCj4gPiArICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg bGV4X2ZyZWVfc3RyaW5nKGxleF90ICpsZXgpIHsNCj4gPiArICAgIGpzb25wX2ZyZWUobGV4LT52 YWx1ZS5zdHJpbmcudmFsKTsNCj4gPiArICAgIGxleC0+dmFsdWUuc3RyaW5nLnZhbCA9IE5VTEw7 DQo+ID4gKyAgICBsZXgtPnZhbHVlLnN0cmluZy5sZW4gPSAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKiBhc3N1bWVzIHRoYXQgc3RyIHBvaW50cyB0byAndScgcGx1cyBhdCBsZWFzdCA0IHZhbGlk IGhleCBkaWdpdHMgKi8NCj4gPiArc3RhdGljIGludDMyX3QgZGVjb2RlX3VuaWNvZGVfZXNjYXBl KGNvbnN0IGNoYXIgKnN0cikgew0KPiA+ICsgICAgaW50IGk7DQo+ID4gKyAgICBpbnQzMl90IHZh bHVlID0gMDsNCj4gPiArDQo+ID4gKyAgICBhc3NlcnQoc3RyWzBdID09ICd1Jyk7DQo+ID4gKw0K PiA+ICsgICAgZm9yIChpID0gMTsgaSA8PSA0OyBpKyspIHsNCj4gPiArICAgICAgICBjaGFyIGMg PSBzdHJbaV07DQo+ID4gKyAgICAgICAgdmFsdWUgPDw9IDQ7DQo+ID4gKyAgICAgICAgaWYgKGxf aXNkaWdpdChjKSkNCj4gPiArICAgICAgICAgICAgdmFsdWUgKz0gYyAtICcwJzsNCj4gPiArICAg ICAgICBlbHNlIGlmIChsX2lzbG93ZXIoYykpDQo+ID4gKyAgICAgICAgICAgIHZhbHVlICs9IGMg LSAnYScgKyAxMDsNCj4gPiArICAgICAgICBlbHNlIGlmIChsX2lzdXBwZXIoYykpDQo+ID4gKyAg ICAgICAgICAgIHZhbHVlICs9IGMgLSAnQScgKyAxMDsNCj4gPiArICAgICAgICBlbHNlDQo+ID4g KyAgICAgICAgICAgIHJldHVybiAtMTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXR1 cm4gdmFsdWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGxleF9zY2FuX3N0cmlu ZyhsZXhfdCAqbGV4LCBqc29uX2Vycm9yX3QgKmVycm9yKSB7DQo+ID4gKyAgICBpbnQgYzsNCj4g PiArICAgIGNvbnN0IGNoYXIgKnA7DQo+ID4gKyAgICBjaGFyICp0Ow0KPiA+ICsgICAgaW50IGk7 DQo+ID4gKw0KPiA+ICsgICAgbGV4LT52YWx1ZS5zdHJpbmcudmFsID0gTlVMTDsNCj4gPiArICAg IGxleC0+dG9rZW4gPSBUT0tFTl9JTlZBTElEOw0KPiA+ICsNCj4gPiArICAgIGMgPSBsZXhfZ2V0 X3NhdmUobGV4LCBlcnJvcik7DQo+ID4gKw0KPiA+ICsgICAgd2hpbGUgKGMgIT0gJyInKSB7DQo+ ID4gKyAgICAgICAgaWYgKGMgPT0gU1RSRUFNX1NUQVRFX0VSUk9SKQ0KPiA+ICsgICAgICAgICAg ICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgICAgZWxzZSBpZiAoYyA9PSBTVFJFQU1fU1RB VEVfRU9GKSB7DQo+ID4gKyAgICAgICAgICAgIGVycm9yX3NldChlcnJvciwgbGV4LCBqc29uX2Vy cm9yX3ByZW1hdHVyZV9lbmRfb2ZfaW5wdXQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAi cHJlbWF0dXJlIGVuZCBvZiBpbnB1dCIpOw0KPiA+ICsgICAgICAgICAgICBnb3RvIG91dDsNCj4g PiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGVsc2UgaWYgKDAgPD0gYyAmJiBjIDw9 IDB4MUYpIHsNCj4gPiArICAgICAgICAgICAgLyogY29udHJvbCBjaGFyYWN0ZXIgKi8NCj4gPiAr ICAgICAgICAgICAgbGV4X3VuZ2V0X3Vuc2F2ZShsZXgsIGMpOw0KPiA+ICsgICAgICAgICAgICBp ZiAoYyA9PSAnXG4nKQ0KPiA+ICsgICAgICAgICAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgs IGpzb25fZXJyb3JfaW52YWxpZF9zeW50YXgsDQo+ID4gInVuZXhwZWN0ZWQgbmV3bGluZSIpOw0K PiA+ICsgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICBlcnJvcl9zZXQoZXJy b3IsIGxleCwganNvbl9lcnJvcl9pbnZhbGlkX3N5bnRheCwgImNvbnRyb2wNCj4gPiBjaGFyYWN0 ZXIgMHgleCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgYyk7DQo+ID4gKyAgICAg ICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgZWxz ZSBpZiAoYyA9PSAnXFwnKSB7DQo+ID4gKyAgICAgICAgICAgIGMgPSBsZXhfZ2V0X3NhdmUobGV4 LCBlcnJvcik7DQo+ID4gKyAgICAgICAgICAgIGlmIChjID09ICd1Jykgew0KPiA+ICsgICAgICAg ICAgICAgICAgYyA9IGxleF9nZXRfc2F2ZShsZXgsIGVycm9yKTsNCj4gPiArICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICBp ZiAoIWxfaXN4ZGlnaXQoYykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf c2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3JfaW52YWxpZF9zeW50YXgsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBlc2NhcGUiKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgfQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgIGMgPSBsZXhfZ2V0X3NhdmUobGV4LCBlcnJvcik7DQo+ ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn IicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJ2InIHx8IGMNCj4gPT0gJ2YnIHx8 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYyA9PSAnbicgfHwgYyA9PSAncicgfHwgYyA9 PSAndCcpDQo+ID4gKyAgICAgICAgICAgICAgICBjID0gbGV4X2dldF9zYXZlKGxleCwgZXJyb3Ip Ow0KPiA+ICsgICAgICAgICAgICBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgIGVycm9yX3Nl dChlcnJvciwgbGV4LCBqc29uX2Vycm9yX2ludmFsaWRfc3ludGF4LCAiaW52YWxpZA0KPiA+IGVz Y2FwZSIpOw0KPiA+ICsgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAg IH0NCj4gPiArICAgICAgICB9IGVsc2UNCj4gPiArICAgICAgICAgICAgYyA9IGxleF9nZXRfc2F2 ZShsZXgsIGVycm9yKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICAvKiB0aGUgYWN0dWFs IHZhbHVlIGlzIGF0IG1vc3Qgb2YgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzb3VyY2UNCj4gPiAr ICAgICAgIHN0cmluZywgYmVjYXVzZToNCj4gPiArICAgICAgICAgLSBzaG9ydGN1dCBlc2NhcGVz IChlLmcuICJcdCIpIChsZW5ndGggMikgYXJlIGNvbnZlcnRlZCB0byAxDQo+IGJ5dGUNCj4gPiAr ICAgICAgICAgLSBhIHNpbmdsZSBcdVhYWFggZXNjYXBlIChsZW5ndGggNikgaXMgY29udmVydGVk IHRvIGF0IG1vc3QgMw0KPiBieXRlcw0KPiA+ICsgICAgICAgICAtIHR3byBcdVhYWFggZXNjYXBl cyAobGVuZ3RoIDEyKSBmb3JtaW5nIGFuIFVURi0xNiBzdXJyb2dhdGUNCj4gPiBwYWlyDQo+ID4g KyAgICAgICAgICAgYXJlIGNvbnZlcnRlZCB0byA0IGJ5dGVzDQo+ID4gKyAgICAqLw0KPiA+ICsg ICAgdCA9IGpzb25wX21hbGxvYyhsZXgtPnNhdmVkX3RleHQubGVuZ3RoICsgMSk7DQo+ID4gKyAg ICBpZiAoIXQpIHsNCj4gPiArICAgICAgICAvKiB0aGlzIGlzIG5vdCB2ZXJ5IG5pY2UsIHNpbmNl IFRPS0VOX0lOVkFMSUQgaXMgcmV0dXJuZWQgKi8NCj4gPiArICAgICAgICBnb3RvIG91dDsNCj4g PiArICAgIH0NCj4gPiArICAgIGxleC0+dmFsdWUuc3RyaW5nLnZhbCA9IHQ7DQo+ID4gKw0KPiA+ ICsgICAgLyogKyAxIHRvIHNraXAgdGhlICIgKi8NCj4gPiArICAgIHAgPSBzdHJidWZmZXJfdmFs dWUoJmxleC0+c2F2ZWRfdGV4dCkgKyAxOw0KPiA+ICsNCj4gPiArICAgIHdoaWxlICgqcCAhPSAn IicpIHsNCj4gPiArICAgICAgICBpZiAoKnAgPT0gJ1xcJykgew0KPiA+ICsgICAgICAgICAgICBw Kys7DQo+ID4gKyAgICAgICAgICAgIGlmICgqcCA9PSAndScpIHsNCj4gPiArICAgICAgICAgICAg ICAgIHNpemVfdCBsZW5ndGg7DQo+ID4gKyAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjb2RlX3VuaWNvZGVfZXNjYXBl KHApOw0KPiA+ICsgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgIGVycm9yX3NldChlcnJvciwgbGV4LCBqc29uX2Vycm9yX2ludmFsaWRfc3lu dGF4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBVbmljb2Rl IGVzY2FwZSAnJS42cyciLCBwIC0gMSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290byBv dXQ7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICBwICs9IDU7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSB2YWx1ZSAmJiB2YWx1 ZSA8PSAweERCRkYpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAvKiBzdXJyb2dhdGUgcGFp ciAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnICYmICoocCArIDEp ID09ICd1Jykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlMiA9 DQo+ID4gZGVjb2RlX3VuaWNvZGVfZXNjYXBlKCsrcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh2YWx1ZTIgPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlcnJvcl9zZXQoZXJyb3IsIGxleCwNCj4gPiBqc29uX2Vycm9yX2ludmFsaWRfc3ludGF4LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIFVuaWNv ZGUgZXNjYXBlDQo+ID4gJyUuNnMnIiwgcCAtIDEpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA1Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKDB4REMwMCA8PSB2YWx1ZTIgJiYgdmFsdWUyIDw9IDB4REZGRikgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsaWQgc2Vjb25kIHN1cnJvZ2F0 ZSAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodmFsdWUgLSAweEQ4MDApIDw8IDEwKSArICh2 YWx1ZTIgLQ0KPiA+IDB4REMwMCkgKyAweDEwMDAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxp ZCBzZWNvbmQgc3Vycm9nYXRlICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl cnJvcl9zZXQoZXJyb3IsIGxleCwNCj4gPiBqc29uX2Vycm9yX2ludmFsaWRfc3ludGF4LA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIFVuaWNvZGUN Cj4gPiAnXFx1JTA0WFxcdSUwNFgnIiwgdmFsdWUsIHZhbHVlMik7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg fQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG5vIHNlY29uZCBzdXJyb2dhdGUgKi8NCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3JfaW52YWxpZF9zeW50YXgs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBVbmljb2Rl ICdcXHUlMDRYJyIsDQo+ID4gdmFsdWUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBn b3RvIG91dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKDB4REMwMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAweERGRkYpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICBlcnJvcl9zZXQoZXJyb3IsIGxleCwganNvbl9lcnJvcl9pbnZh bGlkX3N5bnRheCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQg VW5pY29kZSAnXFx1JTA0WCciLCB2YWx1ZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290 byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICAgaWYgKHV0ZjhfZW5jb2RlKHZhbHVlLCB0LCAmbGVuZ3RoKSkNCj4gPiArICAgICAgICAgICAg ICAgICAgICBhc3NlcnQoMCk7DQo+ID4gKyAgICAgICAgICAgICAgICB0ICs9IGxlbmd0aDsNCj4g PiArICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgIHN3aXRjaCAoKnAp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICBjYXNlICciJzoNCj4gPiArICAgICAgICAgICAg ICAgICAgICBjYXNlICdcXCc6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICp0ID0gKnA7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqdCA9ICdcYic7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqdCA9ICdcZic7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqdCA9ICdcbic7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqdCA9ICdccic7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqdCA9ICdcdCc7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgwKTsNCj4gPiArICAgICAgICAgICAgICAg IH0NCj4gPiArICAgICAgICAgICAgICAgIHQrKzsNCj4gPiArICAgICAgICAgICAgICAgIHArKzsN Cj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0gZWxzZQ0KPiA+ICsgICAgICAgICAg ICAqKHQrKykgPSAqKHArKyk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICAqdCA9ICdcMCc7DQo+ID4g KyAgICBsZXgtPnZhbHVlLnN0cmluZy5sZW4gPSB0IC0gbGV4LT52YWx1ZS5zdHJpbmcudmFsOw0K PiA+ICsgICAgbGV4LT50b2tlbiA9IFRPS0VOX1NUUklORzsNCj4gPiArICAgIHJldHVybjsNCj4g PiArDQo+ID4gK291dDoNCj4gPiArICAgIGxleF9mcmVlX3N0cmluZyhsZXgpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fVVNJTkdfQ01BS0UgLyogZGlzYWJsZWQgaWYgdXNp bmcgY21ha2UgKi8NCj4gPiArI2lmIEpTT05fSU5URUdFUl9JU19MT05HX0xPTkcNCj4gPiArI2lm ZGVmIF9NU0NfVkVSIC8qIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvICovDQo+ID4gKyNkZWZpbmUg anNvbl9zdHJ0b2ludCBfc3RydG9pNjQNCj4gPiArI2Vsc2UNCj4gPiArI2RlZmluZSBqc29uX3N0 cnRvaW50IHN0cnRvbGwNCj4gPiArI2VuZGlmDQo+ID4gKyNlbHNlDQo+ID4gKyNkZWZpbmUganNv bl9zdHJ0b2ludCBzdHJ0b2wNCj4gPiArI2VuZGlmDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBsZXhfc2Nhbl9udW1iZXIobGV4X3QgKmxleCwgaW50IGMsIGpzb25fZXJyb3Jf dCAqZXJyb3IpIHsNCj4gPiArICAgIGNvbnN0IGNoYXIgKnNhdmVkX3RleHQ7DQo+ID4gKyAgICBj aGFyICplbmQ7DQo+ID4gKyAgICBkb3VibGUgZG91YmxldmFsOw0KPiA+ICsNCj4gPiArICAgIGxl eC0+dG9rZW4gPSBUT0tFTl9JTlZBTElEOw0KPiA+ICsNCj4gPiArICAgIGlmIChjID09ICctJykN Cj4gPiArICAgICAgICBjID0gbGV4X2dldF9zYXZlKGxleCwgZXJyb3IpOw0KPiA+ICsNCj4gPiAr ICAgIGlmIChjID09ICcwJykgew0KPiA+ICsgICAgICAgIGMgPSBsZXhfZ2V0X3NhdmUobGV4LCBl cnJvcik7DQo+ID4gKyAgICAgICAgaWYgKGxfaXNkaWdpdChjKSkgew0KPiA+ICsgICAgICAgICAg ICBsZXhfdW5nZXRfdW5zYXZlKGxleCwgYyk7DQo+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0K PiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0gZWxzZSBpZiAobF9pc2RpZ2l0KGMpKSB7DQo+ID4g KyAgICAgICAgZG8NCj4gPiArICAgICAgICAgICAgYyA9IGxleF9nZXRfc2F2ZShsZXgsIGVycm9y KTsNCj4gPiArICAgICAgICB3aGlsZSAobF9pc2RpZ2l0KGMpKTsNCj4gPiArICAgIH0gZWxzZSB7 DQo+ID4gKyAgICAgICAgbGV4X3VuZ2V0X3Vuc2F2ZShsZXgsIGMpOw0KPiA+ICsgICAgICAgIGdv dG8gb3V0Ow0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmICghKGxleC0+ZmxhZ3MgJiBK U09OX0RFQ09ERV9JTlRfQVNfUkVBTCkgJiYgYyAhPSAnLicgJiYgYyAhPSAnRScNCj4gPiAmJiBj ICE9ICdlJykgew0KPiA+ICsgICAgICAgIGpzb25faW50X3QgaW50dmFsOw0KPiA+ICsNCj4gPiAr ICAgICAgICBsZXhfdW5nZXRfdW5zYXZlKGxleCwgYyk7DQo+ID4gKw0KPiA+ICsgICAgICAgIHNh dmVkX3RleHQgPSBzdHJidWZmZXJfdmFsdWUoJmxleC0+c2F2ZWRfdGV4dCk7DQo+ID4gKw0KPiA+ ICsgICAgICAgIGVycm5vID0gMDsNCj4gPiArICAgICAgICBpbnR2YWwgPSBqc29uX3N0cnRvaW50 KHNhdmVkX3RleHQsICZlbmQsIDEwKTsNCj4gPiArICAgICAgICBpZiAoZXJybm8gPT0gRVJBTkdF KSB7DQo+ID4gKyAgICAgICAgICAgIGlmIChpbnR2YWwgPCAwKQ0KPiA+ICsgICAgICAgICAgICAg ICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3JfbnVtZXJpY19vdmVyZmxvdywNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIGJpZyBuZWdhdGl2ZSBpbnRlZ2VyIik7 DQo+ID4gKyAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAgIGVycm9yX3NldChl cnJvciwgbGV4LCBqc29uX2Vycm9yX251bWVyaWNfb3ZlcmZsb3csICJ0b28NCj4gPiBiaWcgaW50 ZWdlciIpOw0KPiA+ICsgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgIGFzc2VydChlbmQgPT0gc2F2ZWRfdGV4dCArIGxleC0+c2F2ZWRfdGV4 dC5sZW5ndGgpOw0KPiA+ICsNCj4gPiArICAgICAgICBsZXgtPnRva2VuID0gVE9LRU5fSU5URUdF UjsNCj4gPiArICAgICAgICBsZXgtPnZhbHVlLmludGVnZXIgPSBpbnR2YWw7DQo+ID4gKyAgICAg ICAgcmV0dXJuIDA7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKGMgPT0gJy4nKSB7 DQo+ID4gKyAgICAgICAgYyA9IGxleF9nZXQobGV4LCBlcnJvcik7DQo+ID4gKyAgICAgICAgaWYg KCFsX2lzZGlnaXQoYykpIHsNCj4gPiArICAgICAgICAgICAgbGV4X3VuZ2V0KGxleCwgYyk7DQo+ ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgICBs ZXhfc2F2ZShsZXgsIGMpOw0KPiA+ICsNCj4gPiArICAgICAgICBkbw0KPiA+ICsgICAgICAgICAg ICBjID0gbGV4X2dldF9zYXZlKGxleCwgZXJyb3IpOw0KPiA+ICsgICAgICAgIHdoaWxlIChsX2lz ZGlnaXQoYykpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChjID09ICdFJyB8fCBj ID09ICdlJykgew0KPiA+ICsgICAgICAgIGMgPSBsZXhfZ2V0X3NhdmUobGV4LCBlcnJvcik7DQo+ ID4gKyAgICAgICAgaWYgKGMgPT0gJysnIHx8IGMgPT0gJy0nKQ0KPiA+ICsgICAgICAgICAgICBj ID0gbGV4X2dldF9zYXZlKGxleCwgZXJyb3IpOw0KPiA+ICsNCj4gPiArICAgICAgICBpZiAoIWxf aXNkaWdpdChjKSkgew0KPiA+ICsgICAgICAgICAgICBsZXhfdW5nZXRfdW5zYXZlKGxleCwgYyk7 DQo+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgICAgZG8NCj4gPiArICAgICAgICAgICAgYyA9IGxleF9nZXRfc2F2ZShsZXgsIGVycm9y KTsNCj4gPiArICAgICAgICB3aGlsZSAobF9pc2RpZ2l0KGMpKTsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBsZXhfdW5nZXRfdW5zYXZlKGxleCwgYyk7DQo+ID4gKw0KPiA+ICsgICAgaWYg KGpzb25wX3N0cnRvZCgmbGV4LT5zYXZlZF90ZXh0LCAmZG91YmxldmFsKSkgew0KPiA+ICsgICAg ICAgIGVycm9yX3NldChlcnJvciwgbGV4LCBqc29uX2Vycm9yX251bWVyaWNfb3ZlcmZsb3csICJy ZWFsIG51bWJlcg0KPiA+IG92ZXJmbG93Iik7DQo+ID4gKyAgICAgICAgZ290byBvdXQ7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgICAgbGV4LT50b2tlbiA9IFRPS0VOX1JFQUw7DQo+ID4gKyAg ICBsZXgtPnZhbHVlLnJlYWwgPSBkb3VibGV2YWw7DQo+ID4gKyAgICByZXR1cm4gMDsNCj4gPiAr DQo+ID4gK291dDoNCj4gPiArICAgIHJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBsZXhfc2NhbihsZXhfdCAqbGV4LCBqc29uX2Vycm9yX3QgKmVycm9yKSB7DQo+ID4g KyAgICBpbnQgYzsNCj4gPiArDQo+ID4gKyAgICBzdHJidWZmZXJfY2xlYXIoJmxleC0+c2F2ZWRf dGV4dCk7DQo+ID4gKw0KPiA+ICsgICAgaWYgKGxleC0+dG9rZW4gPT0gVE9LRU5fU1RSSU5HKQ0K PiA+ICsgICAgICAgIGxleF9mcmVlX3N0cmluZyhsZXgpOw0KPiA+ICsNCj4gPiArICAgIGRvDQo+ ID4gKyAgICAgICAgYyA9IGxleF9nZXQobGV4LCBlcnJvcik7DQo+ID4gKyAgICB3aGlsZSAoYyA9 PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicpOw0KPiA+ICsNCj4g PiArICAgIGlmIChjID09IFNUUkVBTV9TVEFURV9FT0YpIHsNCj4gPiArICAgICAgICBsZXgtPnRv a2VuID0gVE9LRU5fRU9GOw0KPiA+ICsgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIGlmIChjID09IFNUUkVBTV9TVEFURV9FUlJPUikgew0KPiA+ICsgICAgICAg IGxleC0+dG9rZW4gPSBUT0tFTl9JTlZBTElEOw0KPiA+ICsgICAgICAgIGdvdG8gb3V0Ow0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGxleF9zYXZlKGxleCwgYyk7DQo+ID4gKw0KPiA+ICsg ICAgaWYgKGMgPT0gJ3snIHx8IGMgPT0gJ30nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMg PT0gJzonIHx8IGMgPT0NCj4gJywnKQ0KPiA+ICsgICAgICAgIGxleC0+dG9rZW4gPSBjOw0KPiA+ ICsNCj4gPiArICAgIGVsc2UgaWYgKGMgPT0gJyInKQ0KPiA+ICsgICAgICAgIGxleF9zY2FuX3N0 cmluZyhsZXgsIGVycm9yKTsNCj4gPiArDQo+ID4gKyAgICBlbHNlIGlmIChsX2lzZGlnaXQoYykg fHwgYyA9PSAnLScpIHsNCj4gPiArICAgICAgICBpZiAobGV4X3NjYW5fbnVtYmVyKGxleCwgYywg ZXJyb3IpKQ0KPiA+ICsgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgIH0NCj4gPiArDQo+ ID4gKyAgICBlbHNlIGlmIChsX2lzYWxwaGEoYykpIHsNCj4gPiArICAgICAgICAvKiBlYXQgdXAg dGhlIHdob2xlIGlkZW50aWZpZXIgZm9yIGNsZWFyZXIgZXJyb3IgbWVzc2FnZXMgKi8NCj4gPiAr ICAgICAgICBjb25zdCBjaGFyICpzYXZlZF90ZXh0Ow0KPiA+ICsNCj4gPiArICAgICAgICBkbw0K PiA+ICsgICAgICAgICAgICBjID0gbGV4X2dldF9zYXZlKGxleCwgZXJyb3IpOw0KPiA+ICsgICAg ICAgIHdoaWxlIChsX2lzYWxwaGEoYykpOw0KPiA+ICsgICAgICAgIGxleF91bmdldF91bnNhdmUo bGV4LCBjKTsNCj4gPiArDQo+ID4gKyAgICAgICAgc2F2ZWRfdGV4dCA9IHN0cmJ1ZmZlcl92YWx1 ZSgmbGV4LT5zYXZlZF90ZXh0KTsNCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKHN0cmNtcChzYXZl ZF90ZXh0LCAidHJ1ZSIpID09IDApDQo+ID4gKyAgICAgICAgICAgIGxleC0+dG9rZW4gPSBUT0tF Tl9UUlVFOw0KPiA+ICsgICAgICAgIGVsc2UgaWYgKHN0cmNtcChzYXZlZF90ZXh0LCAiZmFsc2Ui KSA9PSAwKQ0KPiA+ICsgICAgICAgICAgICBsZXgtPnRva2VuID0gVE9LRU5fRkFMU0U7DQo+ID4g KyAgICAgICAgZWxzZSBpZiAoc3RyY21wKHNhdmVkX3RleHQsICJudWxsIikgPT0gMCkNCj4gPiAr ICAgICAgICAgICAgbGV4LT50b2tlbiA9IFRPS0VOX05VTEw7DQo+ID4gKyAgICAgICAgZWxzZQ0K PiA+ICsgICAgICAgICAgICBsZXgtPnRva2VuID0gVE9LRU5fSU5WQUxJRDsNCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgICBlbHNlIHsNCj4gPiArICAgICAgICAvKiBzYXZlIHRoZSByZXN0IG9m IHRoZSBpbnB1dCBVVEYtOCBzZXF1ZW5jZSB0byBnZXQgYW4gZXJyb3INCj4gPiArICAgICAgICAg ICBtZXNzYWdlIG9mIHZhbGlkIFVURi04ICovDQo+ID4gKyAgICAgICAgbGV4X3NhdmVfY2FjaGVk KGxleCk7DQo+ID4gKyAgICAgICAgbGV4LT50b2tlbiA9IFRPS0VOX0lOVkFMSUQ7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICByZXR1cm4gbGV4LT50b2tlbjsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGNoYXIgKmxleF9zdGVhbF9zdHJpbmcobGV4X3QgKmxleCwg c2l6ZV90ICpvdXRfbGVuKSB7DQo+ID4gKyAgICBjaGFyICpyZXN1bHQgPSBOVUxMOw0KPiA+ICsg ICAgaWYgKGxleC0+dG9rZW4gPT0gVE9LRU5fU1RSSU5HKSB7DQo+ID4gKyAgICAgICAgcmVzdWx0 ID0gbGV4LT52YWx1ZS5zdHJpbmcudmFsOw0KPiA+ICsgICAgICAgICpvdXRfbGVuID0gbGV4LT52 YWx1ZS5zdHJpbmcubGVuOw0KPiA+ICsgICAgICAgIGxleC0+dmFsdWUuc3RyaW5nLnZhbCA9IE5V TEw7DQo+ID4gKyAgICAgICAgbGV4LT52YWx1ZS5zdHJpbmcubGVuID0gMDsNCj4gPiArICAgIH0N Cj4gPiArICAgIHJldHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bGV4X2luaXQobGV4X3QgKmxleCwgZ2V0X2Z1bmMgZ2V0LCBzaXplX3QgZmxhZ3MsIHZvaWQgKmRh dGEpIHsNCj4gPiArICAgIHN0cmVhbV9pbml0KCZsZXgtPnN0cmVhbSwgZ2V0LCBkYXRhKTsNCj4g PiArICAgIGlmIChzdHJidWZmZXJfaW5pdCgmbGV4LT5zYXZlZF90ZXh0KSkNCj4gPiArICAgICAg ICByZXR1cm4gLTE7DQo+ID4gKw0KPiA+ICsgICAgbGV4LT5mbGFncyA9IGZsYWdzOw0KPiA+ICsg ICAgbGV4LT50b2tlbiA9IFRPS0VOX0lOVkFMSUQ7DQo+ID4gKyAgICByZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbGV4X2Nsb3NlKGxleF90ICpsZXgpIHsNCj4gPiAr ICAgIGlmIChsZXgtPnRva2VuID09IFRPS0VOX1NUUklORykNCj4gPiArICAgICAgICBsZXhfZnJl ZV9zdHJpbmcobGV4KTsNCj4gPiArICAgIHN0cmJ1ZmZlcl9jbG9zZSgmbGV4LT5zYXZlZF90ZXh0 KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqKiBwYXJzZXIgKioqLw0KPiA+ICsNCj4gPiArc3Rh dGljIGpzb25fdCAqcGFyc2VfdmFsdWUobGV4X3QgKmxleCwgc2l6ZV90IGZsYWdzLCBqc29uX2Vy cm9yX3QNCj4gKmVycm9yKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBqc29uX3QgKnBhcnNlX29iamVj dChsZXhfdCAqbGV4LCBzaXplX3QgZmxhZ3MsIGpzb25fZXJyb3JfdA0KPiAqZXJyb3IpIHsNCj4g PiArICAgIGpzb25fdCAqb2JqZWN0ID0ganNvbl9vYmplY3QoKTsNCj4gPiArICAgIGlmICghb2Jq ZWN0KQ0KPiA+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICAgIGxleF9zY2Fu KGxleCwgZXJyb3IpOw0KPiA+ICsgICAgaWYgKGxleC0+dG9rZW4gPT0gJ30nKQ0KPiA+ICsgICAg ICAgIHJldHVybiBvYmplY3Q7DQo+ID4gKw0KPiA+ICsgICAgd2hpbGUgKDEpIHsNCj4gPiArICAg ICAgICBjaGFyICprZXk7DQo+ID4gKyAgICAgICAgc2l6ZV90IGxlbjsNCj4gPiArICAgICAgICBq c29uX3QgKnZhbHVlOw0KPiA+ICsNCj4gPiArICAgICAgICBpZiAobGV4LT50b2tlbiAhPSBUT0tF Tl9TVFJJTkcpIHsNCj4gPiArICAgICAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25f ZXJyb3JfaW52YWxpZF9zeW50YXgsICJzdHJpbmcgb3INCj4gJ30nDQo+ID4gZXhwZWN0ZWQiKTsN Cj4gPiArICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgIGtleSA9IGxleF9zdGVhbF9zdHJpbmcobGV4LCAmbGVuKTsNCj4gPiArICAgICAg ICBpZiAoIWtleSkNCj4gPiArICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICAgICAg aWYgKG1lbWNocihrZXksICdcMCcsIGxlbikpIHsNCj4gPiArICAgICAgICAgICAganNvbnBfZnJl ZShrZXkpOw0KPiA+ICsgICAgICAgICAgICBlcnJvcl9zZXQoZXJyb3IsIGxleCwganNvbl9lcnJv cl9udWxsX2J5dGVfaW5fa2V5LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIk5VTCBieXRl IGluIG9iamVjdCBrZXkgbm90IHN1cHBvcnRlZCIpOw0KPiA+ICsgICAgICAgICAgICBnb3RvIGVy cm9yOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKGZsYWdzICYgSlNP Tl9SRUpFQ1RfRFVQTElDQVRFUykgew0KPiA+ICsgICAgICAgICAgICBpZiAoanNvbl9vYmplY3Rf Z2V0KG9iamVjdCwga2V5KSkgew0KPiA+ICsgICAgICAgICAgICAgICAganNvbnBfZnJlZShrZXkp Ow0KPiA+ICsgICAgICAgICAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3Jf ZHVwbGljYXRlX2tleSwNCj4gImR1cGxpY2F0ZQ0KPiA+IG9iamVjdCBrZXkiKTsNCj4gPiArICAg ICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ID4gKyAgICAgICAgICAgIH0NCj4gPiArICAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGxleF9zY2FuKGxleCwgZXJyb3IpOw0KPiA+ICsgICAg ICAgIGlmIChsZXgtPnRva2VuICE9ICc6Jykgew0KPiA+ICsgICAgICAgICAgICBqc29ucF9mcmVl KGtleSk7DQo+ID4gKyAgICAgICAgICAgIGVycm9yX3NldChlcnJvciwgbGV4LCBqc29uX2Vycm9y X2ludmFsaWRfc3ludGF4LCAiJzonDQo+ID4gZXhwZWN0ZWQiKTsNCj4gPiArICAgICAgICAgICAg Z290byBlcnJvcjsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGxleF9zY2Fu KGxleCwgZXJyb3IpOw0KPiA+ICsgICAgICAgIHZhbHVlID0gcGFyc2VfdmFsdWUobGV4LCBmbGFn cywgZXJyb3IpOw0KPiA+ICsgICAgICAgIGlmICghdmFsdWUpIHsNCj4gPiArICAgICAgICAgICAg anNvbnBfZnJlZShrZXkpOw0KPiA+ICsgICAgICAgICAgICBnb3RvIGVycm9yOw0KPiA+ICsgICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgaWYgKGpzb25fb2JqZWN0X3NldF9uZXdfbm9jaGVj ayhvYmplY3QsIGtleSwgdmFsdWUpKSB7DQo+ID4gKyAgICAgICAgICAgIGpzb25wX2ZyZWUoa2V5 KTsNCj4gPiArICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gPiArICAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgIGpzb25wX2ZyZWUoa2V5KTsNCj4gPiArDQo+ID4gKyAgICAgICAgbGV4X3Nj YW4obGV4LCBlcnJvcik7DQo+ID4gKyAgICAgICAgaWYgKGxleC0+dG9rZW4gIT0gJywnKQ0KPiA+ ICsgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAgICAgbGV4X3NjYW4obGV4LCBl cnJvcik7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKGxleC0+dG9rZW4gIT0gJ30n KSB7DQo+ID4gKyAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3JfaW52YWxp ZF9zeW50YXgsICInfScgZXhwZWN0ZWQiKTsNCj4gPiArICAgICAgICBnb3RvIGVycm9yOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybiBvYmplY3Q7DQo+ID4gKw0KPiA+ICtlcnJv cjoNCj4gPiArICAgIGpzb25fZGVjcmVmKG9iamVjdCk7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGpzb25fdCAqcGFyc2VfYXJyYXkobGV4X3QgKmxl eCwgc2l6ZV90IGZsYWdzLCBqc29uX2Vycm9yX3QgKmVycm9yKQ0KPiB7DQo+ID4gKyAgICBqc29u X3QgKmFycmF5ID0ganNvbl9hcnJheSgpOw0KPiA+ICsgICAgaWYgKCFhcnJheSkNCj4gPiArICAg ICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgICBsZXhfc2NhbihsZXgsIGVycm9yKTsN Cj4gPiArICAgIGlmIChsZXgtPnRva2VuID09ICddJykNCj4gPiArICAgICAgICByZXR1cm4gYXJy YXk7DQo+ID4gKw0KPiA+ICsgICAgd2hpbGUgKGxleC0+dG9rZW4pIHsNCj4gPiArICAgICAgICBq c29uX3QgKmVsZW0gPSBwYXJzZV92YWx1ZShsZXgsIGZsYWdzLCBlcnJvcik7DQo+ID4gKyAgICAg ICAgaWYgKCFlbGVtKQ0KPiA+ICsgICAgICAgICAgICBnb3RvIGVycm9yOw0KPiA+ICsNCj4gPiAr ICAgICAgICBpZiAoanNvbl9hcnJheV9hcHBlbmRfbmV3KGFycmF5LCBlbGVtKSkgew0KPiA+ICsg ICAgICAgICAgICBnb3RvIGVycm9yOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgbGV4X3NjYW4obGV4LCBlcnJvcik7DQo+ID4gKyAgICAgICAgaWYgKGxleC0+dG9rZW4gIT0g JywnKQ0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAgICAgbGV4X3Nj YW4obGV4LCBlcnJvcik7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKGxleC0+dG9r ZW4gIT0gJ10nKSB7DQo+ID4gKyAgICAgICAgZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJy b3JfaW52YWxpZF9zeW50YXgsICInXScgZXhwZWN0ZWQiKTsNCj4gPiArICAgICAgICBnb3RvIGVy cm9yOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIHJldHVybiBhcnJheTsNCj4gPiArDQo+ ID4gK2Vycm9yOg0KPiA+ICsgICAganNvbl9kZWNyZWYoYXJyYXkpOw0KPiA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBqc29uX3QgKnBhcnNlX3ZhbHVlKGxl eF90ICpsZXgsIHNpemVfdCBmbGFncywganNvbl9lcnJvcl90ICplcnJvcikNCj4gew0KPiA+ICsg ICAganNvbl90ICpqc29uOw0KPiA+ICsNCj4gPiArICAgIGxleC0+ZGVwdGgrKzsNCj4gPiArICAg IGlmIChsZXgtPmRlcHRoID4gSlNPTl9QQVJTRVJfTUFYX0RFUFRIKSB7DQo+ID4gKyAgICAgICAg ZXJyb3Jfc2V0KGVycm9yLCBsZXgsIGpzb25fZXJyb3Jfc3RhY2tfb3ZlcmZsb3csICJtYXhpbXVt IHBhcnNpbmcNCj4gPiBkZXB0aCByZWFjaGVkIik7DQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgc3dpdGNoIChsZXgtPnRva2VuKSB7DQo+ID4g KyAgICAgICAgY2FzZSBUT0tFTl9TVFJJTkc6IHsNCj4gPiArICAgICAgICAgICAgY29uc3QgY2hh ciAqdmFsdWUgPSBsZXgtPnZhbHVlLnN0cmluZy52YWw7DQo+ID4gKyAgICAgICAgICAgIHNpemVf dCBsZW4gPSBsZXgtPnZhbHVlLnN0cmluZy5sZW47DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICBp ZiAoIShmbGFncyAmIEpTT05fQUxMT1dfTlVMKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgaWYg KG1lbWNocih2YWx1ZSwgJ1wwJywgbGVuKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGVy cm9yX3NldChlcnJvciwgbGV4LCBqc29uX2Vycm9yX251bGxfY2hhcmFjdGVyLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx1MDAwMCBpcyBub3QgYWxsb3dlZCB3aXRob3V0 DQo+ID4gSlNPTl9BTExPV19OVUwiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4g TlVMTDsNCj4gPiArICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgICAgICAganNvbiA9IGpzb25wX3N0cmluZ25fbm9jaGVja19vd24odmFsdWUs IGxlbik7DQo+ID4gKyAgICAgICAgICAgIGxleC0+dmFsdWUuc3RyaW5nLnZhbCA9IE5VTEw7DQo+ ID4gKyAgICAgICAgICAgIGxleC0+dmFsdWUuc3RyaW5nLmxlbiA9IDA7DQo+ID4gKyAgICAgICAg ICAgIGJyZWFrOw0KPiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgY2FzZSBUT0tF Tl9JTlRFR0VSOiB7DQo+ID4gKyAgICAgICAgICAgIGpzb24gPSBqc29uX2ludGVnZXIobGV4LT52 YWx1ZS5pbnRlZ2VyKTsNCj4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgICBjYXNlIFRPS0VOX1JFQUw6IHsNCj4gPiArICAgICAgICAgICAg anNvbiA9IGpzb25fcmVhbChsZXgtPnZhbHVlLnJlYWwpOw0KPiA+ICsgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIGNhc2UgVE9LRU5fVFJVRToN Cj4gPiArICAgICAgICAgICAganNvbiA9IGpzb25fdHJ1ZSgpOw0KPiA+ICsgICAgICAgICAgICBi cmVhazsNCj4gPiArDQo+ID4gKyAgICAgICAgY2FzZSBUT0tFTl9GQUxTRToNCj4gPiArICAgICAg ICAgICAganNvbiA9IGpzb25fZmFsc2UoKTsNCj4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4g Kw0KPiA+ICsgICAgICAgIGNhc2UgVE9LRU5fTlVMTDoNCj4gPiArICAgICAgICAgICAganNvbiA9 IGpzb25fbnVsbCgpOw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAg ICAgY2FzZSAneyc6DQo+ID4gKyAgICAgICAgICAgIGpzb24gPSBwYXJzZV9vYmplY3QobGV4LCBm bGFncywgZXJyb3IpOw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAg ICAgY2FzZSAnWyc6DQo+ID4gKyAgICAgICAgICAgIGpzb24gPSBwYXJzZV9hcnJheShsZXgsIGZs YWdzLCBlcnJvcik7DQo+ID4gKyAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAg ICBjYXNlIFRPS0VOX0lOVkFMSUQ6DQo+ID4gKyAgICAgICAgICAgIGVycm9yX3NldChlcnJvciwg bGV4LCBqc29uX2Vycm9yX2ludmFsaWRfc3ludGF4LCAiaW52YWxpZA0KPiA+IHRva2VuIik7DQo+ ID4gKyAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICAgICAgICBkZWZhdWx0 Og0KPiA+ICsgICAgICAgICAgICBlcnJvcl9zZXQoZXJyb3IsIGxleCwganNvbl9lcnJvcl9pbnZh bGlkX3N5bnRheCwgInVuZXhwZWN0ZWQNCj4gPiB0b2tlbiIpOw0KPiA+ICsgICAgICAgICAgICBy ZXR1cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoIWpzb24pDQo+ID4g KyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgbGV4LT5kZXB0aC0tOw0KPiA+ ICsgICAgcmV0dXJuIGpzb247DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBqc29uX3QgKnBh cnNlX2pzb24obGV4X3QgKmxleCwgc2l6ZV90IGZsYWdzLCBqc29uX2Vycm9yX3QgKmVycm9yKQ0K PiB7DQo+ID4gKyAgICBqc29uX3QgKnJlc3VsdDsNCj4gPiArDQo+ID4gKyAgICBsZXgtPmRlcHRo ID0gMDsNCj4gPiArDQo+ID4gKyAgICBsZXhfc2NhbihsZXgsIGVycm9yKTsNCj4gPiArICAgIGlm ICghKGZsYWdzICYgSlNPTl9ERUNPREVfQU5ZKSkgew0KPiA+ICsgICAgICAgIGlmIChsZXgtPnRv a2VuICE9ICdbJyAmJiBsZXgtPnRva2VuICE9ICd7Jykgew0KPiA+ICsgICAgICAgICAgICBlcnJv cl9zZXQoZXJyb3IsIGxleCwganNvbl9lcnJvcl9pbnZhbGlkX3N5bnRheCwgIidbJyBvciAneycN Cj4gPiBleHBlY3RlZCIpOw0KPiA+ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAg ICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmVzdWx0ID0gcGFyc2VfdmFsdWUo bGV4LCBmbGFncywgZXJyb3IpOw0KPiA+ICsgICAgaWYgKCFyZXN1bHQpDQo+ID4gKyAgICAgICAg cmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgaWYgKCEoZmxhZ3MgJiBKU09OX0RJU0FCTEVf RU9GX0NIRUNLKSkgew0KPiA+ICsgICAgICAgIGxleF9zY2FuKGxleCwgZXJyb3IpOw0KPiA+ICsg ICAgICAgIGlmIChsZXgtPnRva2VuICE9IFRPS0VOX0VPRikgew0KPiA+ICsgICAgICAgICAgICBl cnJvcl9zZXQoZXJyb3IsIGxleCwganNvbl9lcnJvcl9lbmRfb2ZfaW5wdXRfZXhwZWN0ZWQsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIGZpbGUgZXhwZWN0ZWQiKTsNCj4gPiAr ICAgICAgICAgICAganNvbl9kZWNyZWYocmVzdWx0KTsNCj4gPiArICAgICAgICAgICAgcmV0dXJu IE5VTEw7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmIChl cnJvcikgew0KPiA+ICsgICAgICAgIC8qIFNhdmUgdGhlIHBvc2l0aW9uIGV2ZW4gdGhvdWdoIHRo ZXJlIHdhcyBubyBlcnJvciAqLw0KPiA+ICsgICAgICAgIGVycm9yLT5wb3NpdGlvbiA9IChpbnQp bGV4LT5zdHJlYW0ucG9zaXRpb247DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgcmV0dXJu IHJlc3VsdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgICAg Y29uc3QgY2hhciAqZGF0YTsNCj4gPiArICAgIHNpemVfdCBwb3M7DQo+ID4gK30gc3RyaW5nX2Rh dGFfdDsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3RyaW5nX2dldCh2b2lkICpkYXRhKSB7DQo+ ID4gKyAgICBjaGFyIGM7DQo+ID4gKyAgICBzdHJpbmdfZGF0YV90ICpzdHJlYW0gPSAoc3RyaW5n X2RhdGFfdCAqKWRhdGE7DQo+ID4gKyAgICBjID0gc3RyZWFtLT5kYXRhW3N0cmVhbS0+cG9zXTsN Cj4gPiArICAgIGlmIChjID09ICdcMCcpDQo+ID4gKyAgICAgICAgcmV0dXJuIEVPRjsNCj4gPiAr ICAgIGVsc2Ugew0KPiA+ICsgICAgICAgIHN0cmVhbS0+cG9zKys7DQo+ID4gKyAgICAgICAgcmV0 dXJuICh1bnNpZ25lZCBjaGFyKWM7DQo+ID4gKyAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK2pz b25fdCAqanNvbl9sb2Fkcyhjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBmbGFncywganNvbl9l cnJvcl90ICplcnJvcikNCj4gew0KPiA+ICsgICAgbGV4X3QgbGV4Ow0KPiA+ICsgICAganNvbl90 ICpyZXN1bHQ7DQo+ID4gKyAgICBzdHJpbmdfZGF0YV90IHN0cmVhbV9kYXRhOw0KPiA+ICsNCj4g PiArICAgIGpzb25wX2Vycm9yX2luaXQoZXJyb3IsICI8c3RyaW5nPiIpOw0KPiA+ICsNCj4gPiAr ICAgIGlmIChzdHJpbmcgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgIGVycm9yX3NldChlcnJvciwg TlVMTCwganNvbl9lcnJvcl9pbnZhbGlkX2FyZ3VtZW50LCAid3JvbmcNCj4gPiBhcmd1bWVudHMi KTsNCj4gPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAg ICBzdHJlYW1fZGF0YS5kYXRhID0gc3RyaW5nOw0KPiA+ICsgICAgc3RyZWFtX2RhdGEucG9zID0g MDsNCj4gPiArDQo+ID4gKyAgICBpZiAobGV4X2luaXQoJmxleCwgc3RyaW5nX2dldCwgZmxhZ3Ms ICh2b2lkICopJnN0cmVhbV9kYXRhKSkNCj4gPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAr DQo+ID4gKyAgICByZXN1bHQgPSBwYXJzZV9qc29uKCZsZXgsIGZsYWdzLCBlcnJvcik7DQo+ID4g Kw0KPiA+ICsgICAgbGV4X2Nsb3NlKCZsZXgpOw0KPiA+ICsgICAgcmV0dXJuIHJlc3VsdDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgICAgY29uc3QgY2hhciAq ZGF0YTsNCj4gPiArICAgIHNpemVfdCBsZW47DQo+ID4gKyAgICBzaXplX3QgcG9zOw0KPiA+ICt9 IGJ1ZmZlcl9kYXRhX3Q7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGJ1ZmZlcl9nZXQodm9pZCAq ZGF0YSkgew0KPiA+ICsgICAgY2hhciBjOw0KPiA+ICsgICAgYnVmZmVyX2RhdGFfdCAqc3RyZWFt ID0gZGF0YTsNCj4gPiArICAgIGlmIChzdHJlYW0tPnBvcyA+PSBzdHJlYW0tPmxlbikNCj4gPiAr ICAgICAgICByZXR1cm4gRU9GOw0KPiA+ICsNCj4gPiArICAgIGMgPSBzdHJlYW0tPmRhdGFbc3Ry ZWFtLT5wb3NdOw0KPiA+ICsgICAgc3RyZWFtLT5wb3MrKzsNCj4gPiArICAgIHJldHVybiAodW5z aWduZWQgY2hhciljOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtqc29uX3QgKmpzb25fbG9hZGIoY29u c3QgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLCBzaXplX3QgZmxhZ3MsDQo+IGpzb25fZXJy b3JfdA0KPiA+ICplcnJvcikgew0KPiA+ICsgICAgbGV4X3QgbGV4Ow0KPiA+ICsgICAganNvbl90 ICpyZXN1bHQ7DQo+ID4gKyAgICBidWZmZXJfZGF0YV90IHN0cmVhbV9kYXRhOw0KPiA+ICsNCj4g PiArICAgIGpzb25wX2Vycm9yX2luaXQoZXJyb3IsICI8YnVmZmVyPiIpOw0KPiA+ICsNCj4gPiAr ICAgIGlmIChidWZmZXIgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgIGVycm9yX3NldChlcnJvciwg TlVMTCwganNvbl9lcnJvcl9pbnZhbGlkX2FyZ3VtZW50LCAid3JvbmcNCj4gPiBhcmd1bWVudHMi KTsNCj4gPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAg ICBzdHJlYW1fZGF0YS5kYXRhID0gYnVmZmVyOw0KPiA+ICsgICAgc3RyZWFtX2RhdGEucG9zID0g MDsNCj4gPiArICAgIHN0cmVhbV9kYXRhLmxlbiA9IGJ1ZmxlbjsNCj4gPiArDQo+ID4gKyAgICBp ZiAobGV4X2luaXQoJmxleCwgYnVmZmVyX2dldCwgZmxhZ3MsICh2b2lkICopJnN0cmVhbV9kYXRh KSkNCj4gPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgICByZXN1bHQgPSBw YXJzZV9qc29uKCZsZXgsIGZsYWdzLCBlcnJvcik7DQo+ID4gKw0KPiA+ICsgICAgbGV4X2Nsb3Nl KCZsZXgpOw0KPiA+ICsgICAgcmV0dXJuIHJlc3VsdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAranNv bl90ICpqc29uX2xvYWRmKEZJTEUgKmlucHV0LCBzaXplX3QgZmxhZ3MsIGpzb25fZXJyb3JfdCAq ZXJyb3IpIHsNCj4gPiArICAgIGxleF90IGxleDsNCj4gPiArICAgIGNvbnN0IGNoYXIgKnNvdXJj ZTsNCj4gPiArICAgIGpzb25fdCAqcmVzdWx0Ow0KPiA+ICsjaWZkZWYgSEFWRV9VTklTVERfSA0K PiA+ICsgICAgaWYgKGlucHV0ID09IHN0ZGluKQ0KPiA+ICsgICAgICAgIHNvdXJjZSA9ICI8c3Rk aW4+IjsNCj4gPiArICAgIGVsc2UNCj4gPiArI2VuZGlmDQo+ID4gKyAgICAgICAgc291cmNlID0g IjxzdHJlYW0+IjsNCj4gPiArDQo+ID4gKyAgICBqc29ucF9lcnJvcl9pbml0KGVycm9yLCBzb3Vy Y2UpOw0KPiA+ICsNCj4gPiArICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAg ZXJyb3Jfc2V0KGVycm9yLCBOVUxMLCBqc29uX2Vycm9yX2ludmFsaWRfYXJndW1lbnQsICJ3cm9u Zw0KPiA+IGFyZ3VtZW50cyIpOw0KPiA+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIGlmIChsZXhfaW5pdCgmbGV4LCAoZ2V0X2Z1bmMpZmdldGMsIGZs YWdzLCBpbnB1dCkpDQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAg cmVzdWx0ID0gcGFyc2VfanNvbigmbGV4LCBmbGFncywgZXJyb3IpOw0KPiA+ICsNCj4gPiArICAg IGxleF9jbG9zZSgmbGV4KTsNCj4gPiArICAgIHJldHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgZmRfZ2V0X2Z1bmMoaW50ICpmZCkgew0KPiA+ICsjaWZkZWYgSEFW RV9VTklTVERfSA0KPiA+ICsgICAgdWludDhfdCBjOw0KPiA+ICsgICAgaWYgKHJlYWQoKmZkLCAm YywgMSkgPT0gMSkNCj4gPiArICAgICAgICByZXR1cm4gYzsNCj4gPiArI2VuZGlmDQo+ID4gKyAg ICByZXR1cm4gRU9GOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtqc29uX3QgKmpzb25fbG9hZGZkKGlu dCBpbnB1dCwgc2l6ZV90IGZsYWdzLCBqc29uX2Vycm9yX3QgKmVycm9yKSB7DQo+ID4gKyAgICBs ZXhfdCBsZXg7DQo+ID4gKyAgICBjb25zdCBjaGFyICpzb3VyY2U7DQo+ID4gKyAgICBqc29uX3Qg KnJlc3VsdDsNCj4gPiArDQo+ID4gKyNpZmRlZiBIQVZFX1VOSVNURF9IDQo+ID4gKyAgICBpZiAo aW5wdXQgPT0gU1RESU5fRklMRU5PKQ0KPiA+ICsgICAgICAgIHNvdXJjZSA9ICI8c3RkaW4+IjsN Cj4gPiArICAgIGVsc2UNCj4gPiArI2VuZGlmDQo+ID4gKyAgICAgICAgc291cmNlID0gIjxzdHJl YW0+IjsNCj4gPiArDQo+ID4gKyAgICBqc29ucF9lcnJvcl9pbml0KGVycm9yLCBzb3VyY2UpOw0K PiA+ICsNCj4gPiArICAgIGlmIChpbnB1dCA8IDApIHsNCj4gPiArICAgICAgICBlcnJvcl9zZXQo ZXJyb3IsIE5VTEwsIGpzb25fZXJyb3JfaW52YWxpZF9hcmd1bWVudCwgIndyb25nDQo+ID4gYXJn dW1lbnRzIik7DQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICB9DQo+ID4gKw0K PiA+ICsgICAgaWYgKGxleF9pbml0KCZsZXgsIChnZXRfZnVuYylmZF9nZXRfZnVuYywgZmxhZ3Ms ICZpbnB1dCkpDQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgcmVz dWx0ID0gcGFyc2VfanNvbigmbGV4LCBmbGFncywgZXJyb3IpOw0KPiA+ICsNCj4gPiArICAgIGxl eF9jbG9zZSgmbGV4KTsNCj4gPiArICAgIHJldHVybiByZXN1bHQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gK2pzb25fdCAqanNvbl9sb2FkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGZsYWdz LCBqc29uX2Vycm9yX3QNCj4gKmVycm9yKSB7DQo+ID4gKyAgICBqc29uX3QgKnJlc3VsdDsNCj4g PiArICAgIEZJTEUgKmZwOw0KPiA+ICsNCj4gPiArICAgIGpzb25wX2Vycm9yX2luaXQoZXJyb3Is IHBhdGgpOw0KPiA+ICsNCj4gPiArICAgIGlmIChwYXRoID09IE5VTEwpIHsNCj4gPiArICAgICAg ICBlcnJvcl9zZXQoZXJyb3IsIE5VTEwsIGpzb25fZXJyb3JfaW52YWxpZF9hcmd1bWVudCwgIndy b25nDQo+ID4gYXJndW1lbnRzIik7DQo+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgICAgZnAgPSBmb3BlbihwYXRoLCAicmIiKTsNCj4gPiArICAgIGlm ICghZnApIHsNCj4gPiArICAgICAgICBlcnJvcl9zZXQoZXJyb3IsIE5VTEwsIGpzb25fZXJyb3Jf Y2Fubm90X29wZW5fZmlsZSwgInVuYWJsZSB0bw0KPiA+IG9wZW4gJXM6ICVzIiwgcGF0aCwNCj4g PiArICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsNCj4gPiArICAgICAgICByZXR1 cm4gTlVMTDsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICByZXN1bHQgPSBqc29uX2xvYWRm KGZwLCBmbGFncywgZXJyb3IpOw0KPiA+ICsNCj4gPiArICAgIGZjbG9zZShmcCk7DQo+ID4gKyAg ICByZXR1cm4gcmVzdWx0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1BWF9CVUZfTEVO IDEwMjQNCj4gPiArDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICAgIGNoYXIgZGF0YVtN QVhfQlVGX0xFTl07DQo+ID4gKyAgICBzaXplX3QgbGVuOw0KPiA+ICsgICAgc2l6ZV90IHBvczsN Cj4gPiArICAgIGpzb25fbG9hZF9jYWxsYmFja190IGNhbGxiYWNrOw0KPiA+ICsgICAgdm9pZCAq YXJnOw0KPiA+ICt9IGNhbGxiYWNrX2RhdGFfdDsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY2Fs bGJhY2tfZ2V0KHZvaWQgKmRhdGEpIHsNCj4gPiArICAgIGNoYXIgYzsNCj4gPiArICAgIGNhbGxi YWNrX2RhdGFfdCAqc3RyZWFtID0gZGF0YTsNCj4gPiArDQo+ID4gKyAgICBpZiAoc3RyZWFtLT5w b3MgPj0gc3RyZWFtLT5sZW4pIHsNCj4gPiArICAgICAgICBzdHJlYW0tPnBvcyA9IDA7DQo+ID4g KyAgICAgICAgc3RyZWFtLT5sZW4gPSBzdHJlYW0tPmNhbGxiYWNrKHN0cmVhbS0+ZGF0YSwgTUFY X0JVRl9MRU4sDQo+ID4gc3RyZWFtLT5hcmcpOw0KPiA+ICsgICAgICAgIGlmIChzdHJlYW0tPmxl biA9PSAwIHx8IHN0cmVhbS0+bGVuID09IChzaXplX3QpLTEpDQo+ID4gKyAgICAgICAgICAgIHJl dHVybiBFT0Y7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgYyA9IHN0cmVhbS0+ZGF0YVtz dHJlYW0tPnBvc107DQo+ID4gKyAgICBzdHJlYW0tPnBvcysrOw0KPiA+ICsgICAgcmV0dXJuICh1 bnNpZ25lZCBjaGFyKWM7DQo+ID4gK30NCj4gPiArDQo+ID4gK2pzb25fdCAqanNvbl9sb2FkX2Nh bGxiYWNrKGpzb25fbG9hZF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICphcmcsDQo+IHNpemVf dA0KPiA+IGZsYWdzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uX2Vycm9y X3QgKmVycm9yKSB7DQo+ID4gKyAgICBsZXhfdCBsZXg7DQo+ID4gKyAgICBqc29uX3QgKnJlc3Vs dDsNCj4gPiArDQo+ID4gKyAgICBjYWxsYmFja19kYXRhX3Qgc3RyZWFtX2RhdGE7DQo+ID4gKw0K PiA+ICsgICAgbWVtc2V0KCZzdHJlYW1fZGF0YSwgMCwgc2l6ZW9mKHN0cmVhbV9kYXRhKSk7DQo+ ID4gKyAgICBzdHJlYW1fZGF0YS5jYWxsYmFjayA9IGNhbGxiYWNrOw0KPiA+ICsgICAgc3RyZWFt X2RhdGEuYXJnID0gYXJnOw0KPiA+ICsNCj4gPiArICAgIGpzb25wX2Vycm9yX2luaXQoZXJyb3Is ICI8Y2FsbGJhY2s+Iik7DQo+ID4gKw0KPiA+ICsgICAgaWYgKGNhbGxiYWNrID09IE5VTEwpIHsN Cj4gPiArICAgICAgICBlcnJvcl9zZXQoZXJyb3IsIE5VTEwsIGpzb25fZXJyb3JfaW52YWxpZF9h cmd1bWVudCwgIndyb25nDQo+ID4gYXJndW1lbnRzIik7DQo+ID4gKyAgICAgICAgcmV0dXJuIE5V TEw7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKGxleF9pbml0KCZsZXgsIChnZXRf ZnVuYyljYWxsYmFja19nZXQsIGZsYWdzLCAmc3RyZWFtX2RhdGEpKQ0KPiA+ICsgICAgICAgIHJl dHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICAgIHJlc3VsdCA9IHBhcnNlX2pzb24oJmxleCwgZmxh Z3MsIGVycm9yKTsNCj4gPiArDQo+ID4gKyAgICBsZXhfY2xvc2UoJmxleCk7DQo+ID4gKyAgICBy ZXR1cm4gcmVzdWx0Ow0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvTGlicmFy eS9Kc29uTGliL21hdGguaA0KPiA+IGIvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvbWF0aC5o DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi45YTQ3OGMw ZjhhDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29u TGliL21hdGguaA0KPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAg SW5jbHVkZSBmaWxlIHRvIHN1cHBvcnQgYnVpbGRpbmcgdGhlIHRoaXJkLXBhcnR5IGphbnNzb24g bGlicmFyeS4NCj4gPiArDQo+ID4gKyBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAyMCBI ZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4g KyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsN Cj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fQ1JUX01BVEhfSF8NCj4gPiAr I2RlZmluZSBKQU5TU09OX0NSVF9NQVRIX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SmFuc3Nv bkNydExpYlN1cHBvcnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9S ZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zdGRhcmcuaA0KPiA+IGIvUmVkZmlzaFBrZy9MaWJy YXJ5L0pzb25MaWIvc3RkYXJnLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAwMDAuLjg2OGZjZDVjY2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUmVk ZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3RkYXJnLmgNCj4gPiBAQCAtMCwwICsxLDE1IEBADQo+ ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEluY2x1ZGUgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIHRo ZSB0aGlyZC1wYXJ0eSBqYW5zc29uIGxpYnJhcnkuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0IChj KSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4g KyAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1l bnQgTFA8QlI+DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fQ1JU X1NUREFSR19IXw0KPiA+ICsjZGVmaW5lIEpBTlNTT05fQ1JUX1NUREFSR19IXw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgPEphbnNzb25DcnRMaWJTdXBwb3J0Lmg+DQo+ID4gKw0KPiA+ICsjZW5kaWYN Cj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3RkZGVmLmgNCj4g PiBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0ZGRlZi5oDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi44MjUwZjI4MGIzDQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0ZGRlZi5oDQo+ID4g QEAgLTAsMCArMSwxNiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBJbmNsdWRlIGZpbGUgdG8g c3VwcG9ydCBidWlsZGluZyB0aGUgdGhpcmQtcGFydHkgamFuc3NvbiBsaWJyYXJ5Lg0KPiA+ICsN Cj4gPiArIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiA+ICsgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBF bnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr DQo+ID4gKyNpZm5kZWYgSkFOU1NPTl9DUlRfU1REREVGX0hfDQo+ID4gKyNkZWZpbmUgSkFOU1NP Tl9DUlRfU1REREVGX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SmFuc3NvbkNydExpYlN1cHBv cnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL0xp YnJhcnkvSnNvbkxpYi9zdGRpby5oDQo+ID4gYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9z dGRpby5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi41 YWExNWI5NjlmDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFy eS9Kc29uTGliL3N0ZGlvLmgNCj4gPiBAQCAtMCwwICsxLDE1IEBADQo+ID4gKy8qKiBAZmlsZQ0K PiA+ICsgIEluY2x1ZGUgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0aGlyZC1wYXJ0eSBq YW5zc29uIGxpYnJhcnkuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyAoQykgQ29weXJpZ2h0 IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4g Kw0KPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fQ1JUX1NURElPX0hfDQo+ID4g KyNkZWZpbmUgSkFOU1NPTl9DUlRfU1RESU9fSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxKYW5z c29uQ3J0TGliU3VwcG9ydC5oPg0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBh L1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0ZGxpYi5oDQo+ID4gYi9SZWRmaXNoUGtnL0xp YnJhcnkvSnNvbkxpYi9zdGRsaWIuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMC4uZGZiZmQ4NTY1NQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9S ZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zdGRsaWIuaA0KPiA+IEBAIC0wLDAgKzEsMTYgQEAN Cj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgSW5jbHVkZSBmaWxlIHRvIHN1cHBvcnQgYnVpbGRpbmcg dGhlIHRoaXJkLXBhcnR5IGphbnNzb24gbGlicmFyeS4NCj4gPiArDQo+ID4gKyBDb3B5cmlnaHQg KGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g PiArIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9w bWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEpB TlNTT05fQ1JUX1NURExJQl9IXw0KPiA+ICsjZGVmaW5lIEpBTlNTT05fQ1JUX1NURExJQl9IXw0K PiA+ICsNCj4gPiArI2luY2x1ZGUgPEphbnNzb25DcnRMaWJTdXBwb3J0Lmg+DQo+ID4gKw0KPiA+ ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9MaWJyYXJ5L0pzb25MaWIvc3Ry aW5nLmgNCj4gPiBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0cmluZy5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi42OTFkZTU4M2EzDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N0cmlu Zy5oDQo+ID4gQEAgLTAsMCArMSwxNiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBJbmNsdWRl IGZpbGUgdG8gc3VwcG9ydCBidWlsZGluZyB0aGUgdGhpcmQtcGFydHkgamFuc3NvbiBsaWJyYXJ5 Lg0KPiA+ICsNCj4gPiArIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQg UGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsNCj4gPiArICAgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgSkFOU1NPTl9DUlRfU1RSSU5HX0hfDQo+ID4gKyNkZWZp bmUgSkFOU1NPTl9DUlRfU1RSSU5HX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SmFuc3NvbkNy dExpYlN1cHBvcnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9SZWRm aXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zeXMvdGltZS5oDQo+ID4gYi9SZWRmaXNoUGtnL0xpYnJh cnkvSnNvbkxpYi9zeXMvdGltZS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRl eCAwMDAwMDAwMDAwLi41MDM5YzE5OTFjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1Jl ZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N5cy90aW1lLmgNCj4gPiBAQCAtMCwwICsxLDE1IEBA DQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEluY2x1ZGUgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5n IHRoZSB0aGlyZC1wYXJ0eSBqYW5zc29uIGxpYnJhcnkuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0 IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ID4gKyAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxv cG1lbnQgTFA8QlI+DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsjaWZuZGVmIEpBTlNTT05f Q1JUX1NZU19USU1FX0hfDQo+ID4gKyNkZWZpbmUgSkFOU1NPTl9DUlRfU1lTX1RJTUVfSF8NCj4g PiArDQo+ID4gKyNpbmNsdWRlIDxKYW5zc29uQ3J0TGliU3VwcG9ydC5oPg0KPiA+ICsNCj4gPiAr I2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvTGlicmFyeS9Kc29uTGliL3N5cy90 eXBlcy5oDQo+ID4gYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9zeXMvdHlwZXMuaA0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZjJlMjNjZjgyZg0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi9z eXMvdHlwZXMuaA0KPiA+IEBAIC0wLDAgKzEsMTUgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAg SW5jbHVkZSBmaWxlIHRvIHN1cHBvcnQgYnVpbGRpbmcgdGhlIHRoaXJkLXBhcnR5IGphbnNzb24g bGlicmFyeS4NCj4gPiArDQo+ID4gKyBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIChDKSBDb3B5cmlnaHQgMjAyMCBI ZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4g KyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsN Cj4gPiArKiovDQo+ID4gKyNpZm5kZWYgSkFOU1NPTl9DUlRfU1lTX1RZUEVTX0hfDQo+ID4gKyNk ZWZpbmUgSkFOU1NPTl9DUlRfU1lTX1RZUEVTX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8SmFu c3NvbkNydExpYlN1cHBvcnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQg YS9SZWRmaXNoUGtnL0xpYnJhcnkvSnNvbkxpYi90aW1lLmgNCj4gPiBiL1JlZGZpc2hQa2cvTGli cmFyeS9Kc29uTGliL3RpbWUuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMC4uZGQwNTI3OWIyNA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRm aXNoUGtnL0xpYnJhcnkvSnNvbkxpYi90aW1lLmgNCj4gPiBAQCAtMCwwICsxLDE1IEBADQo+ID4g Ky8qKiBAZmlsZQ0KPiA+ICsgIEluY2x1ZGUgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0 aGlyZC1wYXJ0eSBqYW5zc29uIGxpYnJhcnkuDQo+ID4gKw0KPiA+ICsgQ29weXJpZ2h0IChjKSAy MDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gKyAo QykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQg TFA8QlI+DQo+ID4gKw0KPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsjaWZuZGVmIEpBTlNTT05fQ1JUX1RJ TUVfSF8NCj4gPiArI2RlZmluZSBKQU5TU09OX0NSVF9USU1FX0hfDQo+ID4gKw0KPiA+ICsjaW5j bHVkZSA8SmFuc3NvbkNydExpYlN1cHBvcnQuaD4NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRp ZmYgLS1naXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuY2kueWFtbCBiL1JlZGZpc2hQa2cvUmVk ZmlzaFBrZy5jaS55YW1sDQo+ID4gaW5kZXggMjBjMjk3YWQyMi4uNzhjMjgxNGQwNCAxMDA2NDQN Cj4gPiAtLS0gYS9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuY2kueWFtbA0KPiA+ICsrKyBiL1JlZGZp c2hQa2cvUmVkZmlzaFBrZy5jaS55YW1sDQo+ID4gQEAgLTE3LDYgKzE3LDMwIEBADQo+ID4gICAg ICAgICAgXSwNCj4gPiAgICAgICAgICAjIyBCb3RoIGZpbGUgcGF0aCBhbmQgZGlyZWN0b3J5IHBh dGggYXJlIGFjY2VwdGVkLg0KPiA+ICAgICAgICAgICJJZ25vcmVGaWxlcyI6IFsNCj4gPiArICAg ICAgICAgICAgIyMgQmVsb3cgYXJlIGZpbGVzIGluY29ycG9yYXRlZCB3aXRoIG9wZW4gc291cmNl IHdoaWNoIGFyZQ0KPiA+ICsgICAgICAgICAgICAjIyBub3QgZWRrMiBjb2Rpbmcgc3RhbmRhcmQg Y29tcGxpYW50Lg0KPiA+ICsgICAgICAgICAgICAjIw0KPiA+ICsgICAgICAgICAgICAjIyBGb3Ig amFuc3NvbiBsaWJyYXJ5IG9wZW4gc291cmNlDQo+ID4gKyAgICAgICAgICAgICMjIGxvYWQuYyBp cyBvdmVycmlkZWQgZnJvbSBvcGVuIHNvdXJjZS4NCj4gPiArICAgICAgICAgICAgIkxpYnJhcnkv SnNvbkxpYi9sb2FkLmMiLA0KPiA+ICsgICAgICAgICAgICAjIyBFREtJSSBKc29uTGliIEFQSSB0 byBqYW5zc29uIEFQSSBtYXBwaW5nIGRlZmluaXRpb25zLg0KPiA+ICsgICAgICAgICAgICAiSW5j bHVkZS9MaWJyYXJ5L0phbnNzb25Kc29uTGliTWFwcGluZy5oIiwNCj4gPiArICAgICAgICAgICAg IyMgQyBydW50aW1lIGxpYnJhcnkgZm9yIEVES0lJIEpzb25MaWIuDQo+ID4gKyAgICAgICAgICAg ICJMaWJyYXJ5L0pzb25MaWIvc3lzIiwNCj4gPiArICAgICAgICAgICAgIkxpYnJhcnkvSnNvbkxp Yi9KYW5zc29uQ3J0TGliU3VwcG9ydC5jIiwNCj4gPiArICAgICAgICAgICAgIkxpYnJhcnkvSnNv bkxpYi9KYW5zc29uQ3J0TGliU3VwcG9ydC5oIiwNCj4gPiArICAgICAgICAgICAgIkxpYnJhcnkv SnNvbkxpYi9hc3NlcnQuaCIsDQo+ID4gKyAgICAgICAgICAgICJMaWJyYXJ5L0pzb25MaWIvZXJy bm8uaCIsDQo+ID4gKyAgICAgICAgICAgICJMaWJyYXJ5L0pzb25MaWIvamFuc3Nvbl9jb25maWcu aCIsDQo+ID4gKyAgICAgICAgICAgICJMaWJyYXJ5L0pzb25MaWIvamFuc3Nvbl9wcml2YXRlX2Nv bmZpZy5oIiwNCj4gPiArICAgICAgICAgICAgIkxpYnJhcnkvSnNvbkxpYi9saW1pdHMuaCIsDQo+ ID4gKyAgICAgICAgICAgICJMaWJyYXJ5L0pzb25MaWIvbWF0aC5oIiwNCj4gPiArICAgICAgICAg ICAgIkxpYnJhcnkvSnNvbkxpYi9zdGRhcmcuaCIsDQo+ID4gKyAgICAgICAgICAgICJMaWJyYXJ5 L0pzb25MaWIvc3RkZGVmLmgiLA0KPiA+ICsgICAgICAgICAgICAiTGlicmFyeS9Kc29uTGliL3N0 ZGlvLmgiLA0KPiA+ICsgICAgICAgICAgICAiTGlicmFyeS9Kc29uTGliL3N0ZGxpYi5oIiwNCj4g PiArICAgICAgICAgICAgIkxpYnJhcnkvSnNvbkxpYi9zdHJpbmcuaCIsDQo+ID4gKyAgICAgICAg ICAgICJMaWJyYXJ5L0pzb25MaWIvdGltZS5oIg0KPiA+ICAgICAgICAgIF0NCj4gPiAgICAgIH0s DQo+ID4gICAgICAiQ29tcGlsZXJQbHVnaW4iOiB7DQo+ID4gQEAgLTUwLDcgKzc0LDE0IEBADQo+ ID4gICAgICAgICAgIklnbm9yZUZvbGRlcnNBbmRGaWxlcyI6IFtdDQo+ID4gICAgICB9LA0KPiA+ ICAgICAgIkxpYnJhcnlDbGFzc0NoZWNrIjogew0KPiA+IC0gICAgICAgICJJZ25vcmVIZWFkZXJG aWxlIjogW10NCj4gPiArICAgICAgICAiSWdub3JlSGVhZGVyRmlsZSI6IFsNCj4gPiArICAgICAg ICAgICAgIyMgQmVsb3cgaGVhZGVyIGZpbGUgY2FuIGJlIHVzZWQgYnkgb3BlbiBzb3VyY2UNCj4g PiArICAgICAgICAgICAgIyMgcHJvamVjdCB3aGljaCB1c2VzIGphbnNzb24gbGlicmFyeS4gVXNl IHRoaXMNCj4gPiArICAgICAgICAgICAgIyMgaGVhZGVyIGZpbGUgdG8gbWFwIGphbnNzb24gbmF0 aXZlIEFQSXMgdG8NCj4gPiArICAgICAgICAgICAgIyMgZWRrMiBKc29uTGliIEFQSXMuVGhpcyBo ZWFkZXIgZmlsZSBkb2Vzbid0DQo+ID4gKyAgICAgICAgICAgICMjIGhhdmUgdGhlIGNvcnJlc3Bv bmRpbmcgbGlicmFyeSBjbGFzcy4NCj4gPiArICAgICAgICAgICAgIkluY2x1ZGUvTGlicmFyeS9K YW5zc29uSnNvbkxpYk1hcHBpbmcuaCINCj4gPiArICAgICAgICBdDQo+ID4gICAgICB9LA0KPiA+ DQo+ID4gICAgICAjIyBvcHRpb25zIGRlZmluZWQgY2kvUGx1Z2luL1NwZWxsQ2hlY2sNCj4gPiAt LQ0KPiA+IDIuMTcuMQ0KPiA+DQo+ID4NCj4gPg0KPiA+IA0KPiA+DQo+IA0KPiANCg0K