From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web12.3380.1617776839149610478 for ; Tue, 06 Apr 2021 23:27:19 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=dMpujkq9; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=07314ed417=abner.chang@hpe.com) Received: from pps.filterd (m0134422.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 13768pES021133; Wed, 7 Apr 2021 06:26:52 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=ezvTh90fl5VoJQv3EJ32TE2PQQFCzrXVVNY+Qie7128=; b=dMpujkq9M4HjPuzad99Eougo2loaLm4//Oc8e2SdUvrD+knrJoGieQY09YSyU/8sH8Od jhg/HSszvbacm3T1wdao8AmD8NudZnLOCaS1F8XlhCpclqh/QqS7WSGRr+Pib8iz+cPw +C4Z2FLSmWkYArS1DaahOPHrnn6PMYCo/5pDR58hMYTh+H+8SlVtoaQDqhkVSOO+UxWa Z9i1wwkDPtI5oJrlxOrw27xZcYjzOzvaAgGeeovbB0XLqn6bX9XgI+a8rhZd/XYGR+TV ZVnS/PWHbGqAS5oMwbLd3CHrFLypUrX5aqah7xgn8zXlx7tA3V90KqE8ea9+Slyhr3Dm pw== Received: from g4t3425.houston.hpe.com (g4t3425.houston.hpe.com [15.241.140.78]) by mx0b-002e3701.pphosted.com with ESMTP id 37rw5gkyfd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 07 Apr 2021 06:26:51 +0000 Received: from G9W8454.americas.hpqcorp.net (g9w8454.houston.hp.com [16.216.161.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3425.houston.hpe.com (Postfix) with ESMTPS id 93E389D; Wed, 7 Apr 2021 06:26:50 +0000 (UTC) Received: from G9W8455.americas.hpqcorp.net (2002:10d8:a15e::10d8:a15e) by G9W8454.americas.hpqcorp.net (2002:10d8:a104::10d8:a104) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 7 Apr 2021 06:26:49 +0000 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (15.241.52.10) by G9W8455.americas.hpqcorp.net (16.216.161.94) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 7 Apr 2021 06:26:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m2CwQelLKFhba+VZ9ftcDA/JTyEvoeOt9SwfbFYvyy6I4Of9E+D+ySFRsToHPi6f8WPsgWkJ22CA+lY66mRJeBAs3cYkoSwKg4A29s6ysPt489AFEG9zkV3VRvcDz09FXYvBejCzVD/X+I36TybocBZ9T2XeM1thV/YZl53ZoeB1hhLBUIO8nRjzgJddqFXZXBhrci4Tz2xmwA5N980FuuUB7NjKYSIZuWtFg6+pRuj81W9gt+39UUngJ3IcANzQUhDGXYJf72sDkdM2CPBOTOlfFPvtc2hZ5evxe+60ICb6Gbrb+dHgjIoYyon131zt16gQwIx1lbpl4Ji+wKqPcw== 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=xXnDuSq6EbA0DDdULo9SnLcXB2jcJFbWHe86RD+4erg=; b=Mvv+JfgyDxy1SwpdMkIL4iwCrINjXkpf5SK/mRstbVCrF3lFYN5aSYyChhRDwERDURhE5iA8PQDEsBDosNn54v6e7PGzch8A5VrViyT2Am6H0o5f4vLxc8+imTtZyOyvyBNWZMwiZy1aqsFzwD2V3v1vtY1GbS5hu9MyHHHAGRn28JEjfvIUMsYE6ryegePjeyCSnQZ2yK7a/B28Q0YaiwZw5CjZe3tY7ERMuqtc4GEHNnXHfHNgoBzm9q6BRd5+bQwYTAEjvIfkmkwH6ws4QxxFHfSEprtDEGq0fJ7JmSl+gtIGUQrtFA9WUYnvmvRLDTNhtaIiB+UO+d0EFC2pSA== 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 CS1PR8401MB0472.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7509::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.29; Wed, 7 Apr 2021 06:26:44 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::28f5:3e45:17cf:9231]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::28f5:3e45:17cf:9231%10]) with mapi id 15.20.4020.016; Wed, 7 Apr 2021 06:26:44 +0000 From: "Abner Chang" To: "devel@edk2.groups.io" , "gaoliming@byosoft.com.cn" CC: "Wang, Nickle (HPS SW)" , 'Jiaxin Wu' , 'Siyuan Fu' , 'Fan Wang' , 'Jiewen Yao' Subject: Re: [edk2-devel] [PATCH] RedfishPkg/RedfishDiscoverDxe: EFI Redfish Discover Protocol Thread-Topic: [edk2-devel] [PATCH] RedfishPkg/RedfishDiscoverDxe: EFI Redfish Discover Protocol Thread-Index: AQHOcw3qwA7c7t57VWf9LgZIhCP2cKq59TXAgAASWlA= Date: Wed, 7 Apr 2021 06:26:44 +0000 Message-ID: References: <20210326045410.21800-1-abner.chang@hpe.com> <008a01d72b6d$b5828b20$2087a160$@byosoft.com.cn> In-Reply-To: <008a01d72b6d$b5828b20$2087a160$@byosoft.com.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e961467a-ce8d-44e9-49a0-08d8f98e1d35 x-ms-traffictypediagnostic: CS1PR8401MB0472: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:37; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iMlKEqBWM2Jz/Bhf/vzaS/trMSIfpOriDFZZVEnzt5wUSwiyPpjWcubDsy86yNJRBZgKxxfuvwD2VVq3LNHiu9+mdWK22aLHeiGT/0+gYXl5FqWC+R7bwnPo5CQELzazOt/2O6u/x3aKELUhFORolCgdtu3d8ZqdyFkIU6Xfd1tzvrQgL8bQnBl+cIgRUhtqM7eR3ZtqBQNIc5TL6BD5WmhUd8kWT3EHQ/YYq3hpd94FZUmn18SUiQW91eEq3Z92VEWHz2IpNdEUOpUgQtkWkG2J+PinjhsYXu6WvaFF8++T9sN1tNKZuaec50f6CaWK2Z7toj6NVi/vMnIpFIvOARIQFZ95ZGat3mZSHthgvpMaw3mb1EBxYBEd9oZxEGJeik/K+BvEtBXTfp820uXM7T0tp+qk3S+c8p/YRgXQdDMhNpWDwOY8bNfqccrtG00XnbXI1y0lu67rlKjy08a+Nm7mKg6S0E8MsitMDowz5IziJNjvMMEPiToBBRNqjCy1lMQyZre0FIXcCGpBDIaCM6YARBZGjmpdnmCYg8wlfbnSPQdIf2uUIQfyaeB5l9+tJzs/j8Blt4gGpsWrfqK30VTZcW4and45MijHN71+CAmGvjqbL1vidBT37mI1TsbO1QfCf/DmBV4yjSha6aHrVbzfP6ogW/jOrqQ5Y3MK551nsPmur9eEcV+KH0fd7aCkjXbnds+2yzKc6nNe9/Su6+GgZ32ZgarD8HNCVc0P2qrL/5N5XF7qOBU4YiYwh+wQ 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:(39850400004)(366004)(346002)(396003)(376002)(136003)(52536014)(4326008)(316002)(110136005)(71200400001)(9686003)(55016002)(30864003)(186003)(5660300002)(54906003)(38100700001)(26005)(33656002)(19627235002)(7696005)(478600001)(83380400001)(86362001)(8676002)(66446008)(64756008)(66556008)(8936002)(66946007)(53546011)(966005)(2906002)(76116006)(6506007)(66476007)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?gb2312?B?Z3NCZEtwbnN4bW9FK3ZrNjczY3A0eUFndFdQRVVpa3ozZmg2QnFTZEdVU2Zw?= =?gb2312?B?VjI0bjdzUlk3bG8zSm1ZVE1OY2JVcUZzelppbzcxc3pGYkt6ZGcyTEFpZEVr?= =?gb2312?B?dllSMHVOdmNzaTFib1NhZldGeXp6b3ozOWxINnNwNU9yWU1oQ1ZseSs5bVdT?= =?gb2312?B?dGFvTTlJRGUwVk1jL2NvcGJDVCtFWUZkY1RzaEh5akZNOG5Zd0lCVFc4Nkwv?= =?gb2312?B?djBiRkp4ZkNOKzA0RFJTSlg2SjcvWjFyWTVBL3lBRGxjbHZwN3gwb01QM3Vi?= =?gb2312?B?bzEwN09CbllEbDJzVjdyODY5SXVNU0JTQUZIZ1ZmSDV6Y2p2TEs5OUNXakxP?= =?gb2312?B?S3dwYldadTlFMkc3anZZZUtDbm9keVZFeU9waUFQbjhMQzIyNVhCZGdXL3Yr?= =?gb2312?B?UTBSNllGRFJCZ1ptelNCY0QyRnJKNHh6cC9PM1VILzdDQzdvQUZiMnlRbTRr?= =?gb2312?B?TVhrK3VKeDlybHRjQzVGNHVIa21wWTAvR25IZVFPRnZVaWlDdVZXaDJJcTgy?= =?gb2312?B?K3EvdmxsMjlPcW5WamEvc3lRdjFRTUFzR1hndmhOSi9iSE8rUTdCa0lhWjFV?= =?gb2312?B?aEc5KzBkdmJvVTl2STlPdlZuRzVhTUxGSm1WM1g5OUJEUHJUcUpMaXdoME9V?= =?gb2312?B?N0JXTVhmQU9YbXEzbkY4TGZKQ3gzR3pwazVOZW1CekdYOE43KzNnaFROUTZJ?= =?gb2312?B?ZTJPMmsvWmpmdGZsQXloUlI2UGdKRkUzSU1oMkl5TDFuUTZQWTZhcEttRjg3?= =?gb2312?B?eGlVb1k0QXVtdzNMZkZDcUxFSVg3WUVvTmppZ1VwNkVzZlRSREw1SXFoUWRT?= =?gb2312?B?aDgwU1dUMkd3b0JoMVdYREhCYTlvamMvakhmZEwzamdzMk9USDNSb21EYjVx?= =?gb2312?B?WnJWSFU2UmFONkdEVmhpZHdTRWpZUW1rT0RMaENQblByeWc0Qm43bkJJY1RG?= =?gb2312?B?L2lDczFWVGc2NS9CUzF5VjNUeVpNVGdqbFdtWTF2VWxJQmxleWY3aVZKOHhx?= =?gb2312?B?NG1RSm5sYjMwaXdIeDFKOGhMWGRCa09GSU1zNURBd0tHRVhaaHhRYjFjSUU3?= =?gb2312?B?ZHYyN2p5S2xwUDdjazhKZUhoUTNyZng4Uit5RWtwZGZWd3hCU1ozVFNpaUg5?= =?gb2312?B?TVhhbzJFOGtkL2lMYjAydjkrbExvVjdYSGpjQ0VhMFN5dmR2T2t4SHd6TmdB?= =?gb2312?B?dUJvKzdsc3NXZElBWU1PSHg1bXRlQk5KdGxNTUo2YllLb010MFFsSGFSSG8r?= =?gb2312?B?M1NhWUtmTi9uTHk1NkhJN1VPVkROM1BQTDgyRmpPR1NaVzVDZG8xeXVHZ3VF?= =?gb2312?B?eHZJYXdCUnVHSWJxR0Q5NmoweVFWMlM2R3JCZmJwVWo3cVNGRE9wMENJVWdL?= =?gb2312?B?ZWJGM0V3L3hsbWVYR0Uza09VSXNVQTMzK25lc25nRG9SV2Zhd3luejNFOFhj?= =?gb2312?B?ZC8relhvdWVMN1B4b2dGaWl0TjJyR3ljME84cjQ3ZE12R2ZXa3pseG9Qek9W?= =?gb2312?B?Ukw0aGlnWnh0SjU0eVU1ai9HZ3FBWm41cmw4dTRzYXM1blRBL1luaFg0aWJU?= =?gb2312?B?Q01UTWhjVjBhOXl0czRnb3Nldy8vdnRXY3AvRUpJTXJnK2Ixb1JxQnd6Ym9j?= =?gb2312?B?cUlES0U2bUhvaWVSd1RrU2UrU2JFYWdmUzdZZlhVaUQxKzQ3bUFGbk1BWEt4?= =?gb2312?B?aG5TRmE1eXJDUWl6bytDOVhnckcrVjdueFdOOXdBR2h2Y2x3MUJSQlB0NzBu?= =?gb2312?Q?sodme00wKa6texw0ZjXaxtki9Why0Ed/6Z22yw8?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: e961467a-ce8d-44e9-49a0-08d8f98e1d35 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Apr 2021 06:26:44.1709 (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: 1AYtE1V/mVD3ebmXg8BJsTTLQsQkDXBWvK0e1VK73BQfmYXXLrYMHqYMFaQomURtXRsB2D89S5nfCHj8C3QbzA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0472 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: ysnxxy9ywIAq_Ixz9gLZs0wxmqMrkeNJ X-Proofpoint-GUID: ysnxxy9ywIAq_Ixz9gLZs0wxmqMrkeNJ 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.369,18.0.761 definitions=2021-04-07_03:2021-04-06,2021-04-07 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 mlxscore=0 bulkscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 mlxlogscore=999 impostorscore=0 spamscore=0 malwarescore=0 adultscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104060000 definitions=main-2104070045 Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 DQpCWiB3YXMgY3JlYXRlZCBmb3IgdGhpcy4NCmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkwNg0KDQpJIHdpbGwgdXBkYXRlIHRoZSBjb21taXQgbWVzc2Fn ZSB3aXRoIHRoZSBmZWVkYmFjayBmcm9tIHJldmlld2VyIGlmIGFueS4NClRoYW5rcw0KDQo+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIFtt YWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBPZg0KPiBnYW9saW1pbmcNCj4g U2VudDogV2VkbmVzZGF5LCBBcHJpbCA3LCAyMDIxIDE6MjAgUE0NCj4gVG86IGRldmVsQGVkazIu Z3JvdXBzLmlvOyBDaGFuZywgQWJuZXIgKEhQUyBTVy9GVyBUZWNobm9sb2dpc3QpDQo+IDxhYm5l ci5jaGFuZ0BocGUuY29tPg0KPiBDYzogV2FuZywgTmlja2xlIChIUFMgU1cpIDxuaWNrbGUud2Fu Z0BocGUuY29tPjsgJ0ppYXhpbiBXdScNCj4gPGppYXhpbi53dUBpbnRlbC5jb20+OyAnU2l5dWFu IEZ1JyA8c2l5dWFuLmZ1QGludGVsLmNvbT47ICdGYW4gV2FuZycNCj4gPGZhbi53YW5nQGludGVs LmNvbT47ICdKaWV3ZW4gWWFvJyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6ILvY uLQ6IFtlZGsyLWRldmVsXSBbUEFUQ0hdIFJlZGZpc2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlOiBF RkkNCj4gUmVkZmlzaCBEaXNjb3ZlciBQcm90b2NvbA0KPiANCj4gQWJuZXI6DQo+ICAgVGhpcyBp cyBuZXcgZmVhdHVyZS4gQ2FuIHlvdSBzdWJtaXQgb25lIEJaIGZvciBpdD8NCj4gDQo+IFRoYW5r cw0KPiBMaW1pbmcNCj4gPiAtLS0tLdPKvP7Urbz+LS0tLS0NCj4gPiC3orz+yMs6IGRldmVsQGVk azIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gtPqx7SBBYm5lcg0KPiBDaGFuZw0K PiA+ILeiy83KsbzkOiAyMDIxxOoz1MIyNsjVIDEyOjU0DQo+ID4gytW8/sjLOiBkZXZlbEBlZGsy Lmdyb3Vwcy5pbw0KPiA+ILOty806IE5pY2tsZSBXYW5nIDxuaWNrbGUud2FuZ0BocGUuY29tPjsg SmlheGluIFd1DQo+ID4gPGppYXhpbi53dUBpbnRlbC5jb20+OyBTaXl1YW4gRnUgPHNpeXVhbi5m dUBpbnRlbC5jb20+OyBGYW4gV2FuZw0KPiA+IDxmYW4ud2FuZ0BpbnRlbC5jb20+OyBKaWV3ZW4g WWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiDW98ziOiBbZWRrMi1kZXZlbF0gW1BBVENI XSBSZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZTogRUZJIFJlZGZpc2gNCj4gPiBEaXNjb3Zl ciBQcm90b2NvbA0KPiA+DQo+ID4gRURLMiBFRkkgUmVkZmlzaCBEaXNjb3ZlciBQcm90b2NvbCBp bXBsZW1lbnRhdGlvbi4gUmVmZXIgdG8gVUVGSSBzcGVjIDIuOQ0KPiA+IHNlY3Rpb24gMzEuMS4N Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29t Pg0KPiA+IENjOiBOaWNrbGUgV2FuZyA8bmlja2xlLndhbmdAaHBlLmNvbT4NCj4gPiBDYzogSmlh eGluIFd1IDxqaWF4aW4ud3VAaW50ZWwuY29tPg0KPiA+IENjOiBTaXl1YW4gRnUgPHNpeXVhbi5m dUBpbnRlbC5jb20+DQo+ID4gQ2M6IEZhbiBXYW5nIDxmYW4ud2FuZ0BpbnRlbC5jb20+DQo+ID4g Q2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBSZWRm aXNoUGtnL1JlZGZpc2hDb21wb25lbnRzLmRzYy5pbmMgICAgICAgICAgfCAgICAzICstDQo+ID4g IFJlZGZpc2hQa2cvUmVkZmlzaC5mZGYuaW5jICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0N Cj4gPiAgLi4uL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNoRGlzY292ZXJEeGUuaW5mIHwgICA1 NSArDQo+ID4gIC4uLi9SZWRmaXNoRGlzY292ZXJJbnRlcm5hbC5oICAgICAgICAgICAgICAgICB8 ICAyMzQgKysNCj4gPiAgUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvQ29tcG9uZW50TmFt ZS5jIHwgIDIxOCArKw0KPiA+ICAuLi4vUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3Zl ckR4ZS5jICAgfCAxOTEwDQo+ID4gKysrKysrKysrKysrKysrKysNCj4gPiAgLi4uL1JlZGZpc2hT bWJpb3NIb3N0SW50ZXJmYWNlLmMgICAgICAgICAgICAgIHwgIDExOCArDQo+ID4gIDcgZmlsZXMg Y2hhbmdlZCwgMjUzOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQ0KPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvUmVkZmlzaERpc2Nv dmVyRHhlLmluZg0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBSZWRmaXNoUGtnL1JlZGZp c2hEaXNjb3ZlckR4ZS9SZWRmaXNoRGlzY292ZXJJbnRlcm5hbC5oDQo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9Db21wb25lbnROYW1lLmMNCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFJlZGZpc2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlL1Jl ZGZpc2hEaXNjb3ZlckR4ZS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IFJlZGZpc2hQ a2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hTbWJpb3NIb3N0SW50ZXJmYWNlLmMNCj4gPg0K PiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hDb21wb25lbnRzLmRzYy5pbmMNCj4g PiBiL1JlZGZpc2hQa2cvUmVkZmlzaENvbXBvbmVudHMuZHNjLmluYw0KPiA+IGluZGV4IDA4ZjFk M2JjMzIuLjZmM2IwNTVhYmEgMTAwNjQ0DQo+ID4gLS0tIGEvUmVkZmlzaFBrZy9SZWRmaXNoQ29t cG9uZW50cy5kc2MuaW5jDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoQ29tcG9uZW50cy5k c2MuaW5jDQo+ID4gQEAgLTYsNyArNiw3IEBADQo+ID4gICMgb2YgRURLSUkgUmVkZmlzaCBkcml2 ZXJzIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgZmxhZ3MgZGVzY3JpYmVkIGluDQo+ID4gICMg IlJlZGZpc2hEZWZpbmVzLmRzYy5pbmMiLg0KPiA+ICAjDQo+ID4gLSMgKEMpIENvcHlyaWdodCAy MDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ICsj IChDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVu dCBMUDxCUj4NCj4gPiAgIw0KPiA+ICAjICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+ID4gICMNCj4gPiBAQCAtMTcsNCArMTcsNSBAQA0KPiA+ICAgIFJl ZGZpc2hQa2cvUmVkZmlzaEhvc3RJbnRlcmZhY2VEeGUvUmVkZmlzaEhvc3RJbnRlcmZhY2VEeGUu aW5mDQo+ID4gICAgUmVkZmlzaFBrZy9SZWRmaXNoUmVzdEV4RHhlL1JlZGZpc2hSZXN0RXhEeGUu aW5mDQo+ID4gICAgUmVkZmlzaFBrZy9SZWRmaXNoQ3JlZGVudGlhbER4ZS9SZWRmaXNoQ3JlZGVu dGlhbER4ZS5pbmYNCj4gPiArICBSZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNo RGlzY292ZXJEeGUuaW5mDQo+ID4gICFlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtn L1JlZGZpc2guZmRmLmluYyBiL1JlZGZpc2hQa2cvUmVkZmlzaC5mZGYuaW5jDQo+ID4gaW5kZXgg YTY0ZmQxMTlhOS4uMjA1YzMxMDFjMCAxMDA2NDQNCj4gPiAtLS0gYS9SZWRmaXNoUGtnL1JlZGZp c2guZmRmLmluYw0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaC5mZGYuaW5jDQo+ID4gQEAg LTUsNyArNSw3IEBADQo+ID4gICMgYnkgdXNpbmcgIiFpbmNsdWRlIFJlZGZpc2hQa2cvUmVkZmlz TGlicy5mZGYuaW5jIiB0byBzcGVjaWZ5IHRoZSBtb2R1bGUNCj4gPiBpbnN0YW5jZXMNCj4gPiAg IyB0byBiZSBidWlsdCBpbiB0aGUgZmlybXdhcmUgdm9sdW1lLg0KPiA+ICAjDQo+ID4gLSMgKEMp IENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQ PEJSPg0KPiA+ICsjIChDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlz ZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiAgIw0KPiA+ICAjICAgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICMNCj4gPiBAQCAtMTUsNCArMTUsNSBA QA0KPiA+ICAgIElORiBSZWRmaXNoUGtnL1JlZGZpc2hIb3N0SW50ZXJmYWNlRHhlL1JlZGZpc2hI b3N0SW50ZXJmYWNlRHhlLmluZg0KPiA+ICAgIElORiBSZWRmaXNoUGtnL1JlZGZpc2hSZXN0RXhE eGUvUmVkZmlzaFJlc3RFeER4ZS5pbmYNCj4gPiAgICBJTkYgUmVkZmlzaFBrZy9SZWRmaXNoQ3Jl ZGVudGlhbER4ZS9SZWRmaXNoQ3JlZGVudGlhbER4ZS5pbmYNCj4gPiArICBJTkYgUmVkZmlzaFBr Zy9SZWRmaXNoRGlzY292ZXJEeGUvUmVkZmlzaERpc2NvdmVyRHhlLmluZg0KPiA+ICAhZW5kaWYN Cj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvUmVkZmlzaERp c2NvdmVyRHhlLmluZg0KPiA+IGIvUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvUmVkZmlz aERpc2NvdmVyRHhlLmluZg0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMC4uMzQ1YmFjZjQ0ZA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNo UGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9SZWRmaXNoRGlzY292ZXJEeGUuaW5mDQo+ID4gQEAgLTAs MCArMSw1NSBAQA0KPiA+ICsjIyBAZmlsZQ0KPiA+ICsjICBJbXBsZW1lbnRhdGlvbiBvZiBFRklf UkVERklTSF9ESVNDT1ZFUl9QUk9UT0NPTCBpbnRlcmZhY2VzLg0KPiA+ICsjDQo+ID4gKyMgIChD KSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBM UDxCUj4NCj4gPiArIw0KPiA+ICsjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+ICsjDQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10NCj4gPiAr ICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgID0gMHgwMDAxMDAxYg0KPiA+ICsgIEJBU0VfTkFN RSAgICAgICAgICAgICAgICAgPSBSZWRmaXNoRGlzY292ZXJEeGUNCj4gPiArICBGSUxFX0dVSUQg ICAgICAgICAgICAgICAgID0NCj4gPiAyOEE3NkZFNS00M0Q3LTQ4QTMtOTcxNC1DMUI3QkRENkRG QjYNCj4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgID0gVUVGSV9EUklWRVINCj4gPiAr ICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgID0gMS4wDQo+ID4gKyAgRU5UUllfUE9JTlQgICAg ICAgICAgICAgICA9IFJlZGZpc2hEaXNjb3ZlckVudHJ5UG9pbnQNCj4gPiArICBVTkxPQURfSU1B R0UgICAgICAgICAgICAgID0gUmVkZmlzaERpc2NvdmVyVW5sb2FkDQo+ID4gKw0KPiA+ICtbUGFj a2FnZXNdDQo+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiArICBNZGVNb2R1bGVQa2cvTWRl TW9kdWxlUGtnLmRlYw0KPiA+ICsgIE5ldHdvcmtQa2cvTmV0d29ya1BrZy5kZWMNCj4gPiArICBS ZWRmaXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBD b21wb25lbnROYW1lLmMNCj4gPiArICBSZWRmaXNoRGlzY292ZXJEeGUuYw0KPiA+ICsgIFJlZGZp c2hTbWJpb3NIb3N0SW50ZXJmYWNlLmMNCj4gPiArICBSZWRmaXNoRGlzY292ZXJJbnRlcm5hbC5o DQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgQmFzZUxpYg0KPiA+ICsgIEJh c2VNZW1vcnlMaWINCj4gPiArICBEZWJ1Z0xpYg0KPiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWIN Cj4gPiArICBQcmludExpYg0KPiA+ICsgIFJlc3RFeExpYg0KPiA+ICsgIFVlZmlMaWINCj4gPiAr ICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0K PiA+ICsNCj4gPiArW1Byb3RvY29sc10NCj4gPiArICBnRWZpUmVzdEV4U2VydmljZUJpbmRpbmdQ cm90b2NvbEd1aWQgICAgICAgICAgICAjIyBDb25zdW1pbmcNCj4gPiArICBnRWZpUmVzdEV4UHJv dG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDb25zdW1pbmcNCj4gPiArICBn RWZpVGNwNFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAjIyBDb25zdW1p bmcNCj4gPiArICBnRWZpVGNwNFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIyBDb25zdW1pbmcNCj4gPiArICBnRWZpVGNwNlNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAjIyBDb25zdW1pbmcNCj4gPiArICBnRWZpVGNwNlByb3RvY29sR3VpZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDb25zdW1pbmcNCj4gPiArICBnRWZpUmVkZmlz aERpc2NvdmVyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAjIyBQcm9kY3VpbmcNCj4gPiAr ICBnRWZpU21iaW9zUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDb25z dW1pbmcNCj4gPiArICBnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAg ICAgICAjIyBDb25zdW1pbmcNCj4gPiArDQo+ID4gK1tQY2RdDQo+ID4gKyAgZ0VmaVJlZGZpc2hQ a2dUb2tlblNwYWNlR3VpZC5QY2RSZWRmaXNoRGlzY292ZXJBY2Nlc3NNb2RlSW5CYW5kDQo+ICMj DQo+ID4gQ09OU1VNRVMNCj4gPiArDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlz aERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckludGVybmFsLmgNCj4gPiBiL1JlZGZpc2hQa2cv UmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckludGVybmFsLmgNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmNmNjlkOTIzMWENCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvUmVkZmlz aERpc2NvdmVySW50ZXJuYWwuaA0KPiA+IEBAIC0wLDAgKzEsMjM0IEBADQo+ID4gKy8qKiBAZmls ZQ0KPiA+ICsgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBFRkkgUmVkZmlzaCBEaXNjb3ZlciBQcm90 b2NvbCBpbnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsgIChDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0 IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICsNCj4gPiArI2lmbmRlZiBFRklfUkVERklTSF9ESVNDT1ZFUl9JTlRFUk5BTF9IXw0K PiA+ICsjZGVmaW5lIEVGSV9SRURGSVNIX0RJU0NPVkVSX0lOVEVSTkFMX0hfDQo+ID4gKw0KPiA+ ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0NvbXBv bmVudE5hbWUuaD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0NvbXBvbmVudE5hbWUyLmg+DQo+ ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9Ecml2ZXJCaW5kaW5nLmg+DQo+ID4gKyNpbmNsdWRlIDxQ cm90b2NvbC9SZWRmaXNoRGlzY292ZXIuaD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL1NtYmlv cy5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVGNwNC5oPg0KPiA+ICsjaW5jbHVkZSA8UHJv dG9jb2wvVGNwNi5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0K PiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvTmV0TGliLmg+DQo+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Jlc3RFeExpYi5o Pg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPEluZHVzdHJ5U3Rh bmRhcmQvUmVkZmlzaEhvc3RJbnRlcmZhY2UuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgUkVERklT SF9ESVNDT1ZFUl9WRVJTSU9OICAweDAwMDEwMDAwDQo+ID4gKyNkZWZpbmUgRUZJX1JFREZJU0hf RElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfVFBMIFRQTF9OT1RJRlkNCj4gPiArDQo+ID4gKy8v DQo+ID4gKy8vR1VJRCBkZWZpbml0aW9ucw0KPiA+ICsvLw0KPiA+ICsNCj4gPiArI2RlZmluZSBF RklfUkVERklTSF9ESVNDT1ZFUl9UQ1A0X0lOU1RBTkNFX0dVSUQgXA0KPiA+ICsgIHsgXA0KPiA+ ICsgICAgMHhmYmFiOTdhNCwgMHg0YzZhLCAweGY4ZTgsIHsgMHhmMiwgMHgyNSwgMHg0MiwgMHg4 YSwgMHg4MCwgMHgzZiwNCj4gMHhiNiwNCj4gPiAweGFhIH0gXA0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyNkZWZpbmUgRUZJX1JFREZJU0hfRElTQ09WRVJfVENQNl9JTlNUQU5DRV9HVUlEIFwNCj4g PiArICB7IFwNCj4gPiArICAgIDB4YmU1MTNiNmQsIDB4NDFjMSwgMHg5NkVkLCB7IDB4OGQsIDB4 YWYsIDB4M2UsIDB4ODksIDB4YzUsIDB4ZjUsDQo+IDB4MDIsDQo+ID4gMHgyNSB9IFwNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEVGSV9SRURGSVNIX0RJU0NPVkVSX1JFU1RfRVhfSU5T VEFOQ0VfR1VJRCBcDQo+ID4gKyAgeyBcDQo+ID4gKyAgICAweGM0NGE2MDc2LCAweGQ0MmEsIDB4 NGQ1NCwgeyAweDg1LCAweDZkLCAweDk4LCAweDhhLCAweDg1LCAweDhmLA0KPiAweGExLA0KPiA+ IDB4MTEgfSBcDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArZXh0ZXJuIEVGSV9DT01QT05FTlRfTkFN RV9QUk9UT0NPTA0KPiA+IGdSZWRmaXNoRGlzY292ZXJDb21wb25lbnROYW1lOw0KPiA+ICtleHRl cm4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTA0KPiA+IGdSZWRmaXNoRGlzY292ZXJDb21w b25lbnROYW1lMjsNCj4gPiArZXh0ZXJuIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiA+ICpn UmVkZmlzaERpc2NvdmVyQ29udHJvbGxlck5hbWVUYWJsZTsNCj4gPiArDQo+ID4gKy8vDQo+ID4g Ky8vIEVudW1lcmF0aW9uIG9mIG5ldHdvcmsgcHJvdG9jb2xzDQo+ID4gKy8vIHJlcXVpcmVkIGZv ciB0aGUgUmVkZmlzaCBzZXJ2aWNlIGRpc2NvdmVyeS4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBl bnVtIHsNCj4gPiArICBQcm90b2NvbFR5cGVUY3A0ID0gMCwgLy8vPCBOZXR3b3JrIHByb3RvY29s IFRDUHY0Lg0KPiA+ICsgIFByb3RvY29sVHlwZVRjcDYsICAgICAvLy88IE5ldHdvcmsgcHJvdG9j b2wgVENDdjYuDQo+ID4gKyAgUHJvdG9jb2xUeXBlUmVzdEV4LCAgIC8vLzwgUkVTVCBFWCBvdmVy IG5ldHdvcmsgcHJvdG9jb2wuDQo+ID4gKyAgTWF4UHJvdG9jb2xUeXBlDQo+ID4gK30gTkVUV09S S19JTlRFUkZBQ0VfUFJPVE9DT0xfVFlQRTsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIE5ldHdv cmsgcHJvdG9jb2wgaW5mb3JtYXRpb24gaW5zdGFsbGVkIG9uDQo+ID4gKy8vIHRoZSBuZXR3b3Jr IGludGVyZmFjZS4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIEVGSV9H VUlEIFByb3RvY29sR3VpZDsgICAgICAgICAgICAgICAgLy8vPCBOZXR3b3JrIHByb3RvY29sIEdV SUQuDQo+ID4gKyAgRUZJX0dVSUQgUHJvdG9jb2xTZXJ2aWNlR3VpZDsgICAgICAgICAvLy88IE5l dHdvcmsgcHJvdG9jb2wgc2VydmljZQ0KPiA+IEdVSUQuDQo+ID4gKyAgVUlOVDMyICAgUHJvdG9j b2xEaXNjb3ZlcklkOyAgICAgICAgICAvLy88IFRoZSBpZGVudGlmaWVyIGluc3RhbGxlZCBvbg0K PiA+IG5ldHdvcmsgcHJvdG9jb2wgaGFuZGxlLg0KPiA+ICsgIEVGSV9IQU5ETEUgUHJvdG9jb2xD b250cm9sbGVySGFuZGxlOyAgLy8vPCBUaGUgY29udHJvbGxlciBoYW5kbGUgb24NCj4gPiBuZXR3 b3JrIHByb3RvY29sLg0KPiA+ICsgIFZPSUQgKk5ldHdvcmtQcm90b2NvbEludGVyZmFjZTsgICAg ICAgLy8vPCBUaGUgcHJvdG9jb2wgaW50ZXJmYWNlIG9mDQo+ID4gbmV0d29yayBwcm90b2NvbC4N Cj4gPiArfSBSRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX1BST1RPQ09MOw0KPiA+ ICsNCj4gPiArLy8NCj4gPiArLy8gSW50ZXJuYWwgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4g bmV0d29yaw0KPiA+ICsvLyBpbnRlcmZhY2UgcHJvcGVydGllcy4NCj4gPiArLy8NCj4gPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIExJU1RfRU5UUlkgICAgICBFbnRyeTsgICAgICAgICAgICAg ICAgICAgICAgICAvLy88IExpbmsgbGlzdA0KPiA+IGVudHJ5Lg0KPiA+ICsgIEVGSV9IQU5ETEUg ICAgICBPcGVuRHJpdmVyQWdlbnRIYW5kbGU7ICAgICAgICAvLy88IFRoZSBhZ2VudCB0bw0KPiA+ IG9wZW4gbmV0d29yayBwcm90b2NvbC4NCj4gPiArICBFRklfSEFORExFICAgICAgT3BlbkRyaXZl ckNvbnRyb2xsZXJIYW5kbGU7ICAgLy8vPCBUaGUgY29udHJvbGxlcg0KPiA+IGhhbmRsZSB0byBv cGVuIG5ldHdvcmsgcHJvdG9jb2wuDQo+ID4gKyAgVUlOVE4gICAgICAgICAgIEh3QWRkcmVzc1Np emU7ICAgICAgICAgICAgICAgIC8vLzwgVGhlIHNpemUgb2YNCj4gPiBuZXR3b3JrIGludGVyZmFj ZSBoYXJkd2FyZSBhZGRyZXNzLg0KPiA+ICsgIEVGSV9NQUNfQUREUkVTUyBNYWNBZGRyZXNzOyAg ICAgICAgICAgICAgICAgICAvLy88IE1BQw0KPiA+IGFkZHJlc3Mgb2YgbmV0d29yayBpbnRlcmZh Y2UuDQo+ID4gKyAgQ0hBUjE2ICAgICAgICAgICpTdHJNYWNBZGRyOyAgICAgICAgICAgICAgICAg IC8vLzwgU3RyaW5nIHRvDQo+ID4gTUFDIGFkZHJlc3Mgb2YgbmV0d29yayBpbnRlcmZhY2UuDQo+ ID4gKyAgQk9PTEVBTiAgICAgICAgIEdvdFN1Ym5ldEluZm87ICAgICAgICAgICAgICAgIC8vLzwg SW5kaWNhdGVzIHN1Yg0KPiA+IG5ldCBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQuDQo+ID4gKyAg RUZJX0lQX0FERFJFU1MgIFN1Ym5ldEFkZHI7ICAgICAgICAgICAgICAgICAgIC8vLzwgU3VibmV0 IElELg0KPiA+ICsgIEVGSV9JUF9BRERSRVNTICBTdWJuZXRNYXNrOyAgICAgICAgICAgICAgICAg ICAvLy88IFN1Ym5ldCBtYXNrDQo+ID4gKElQdjQgb25seSkNCj4gPiArICBVSU5UOCAgICAgICAg ICAgU3VibmV0UHJlZml4TGVuZ3RoOyAgICAgICAgICAgLy8vPCBTdWJuZXQgcHJlZml4Lg0KPiA+ ICsgIFVJTlQxNiAgICAgICAgICBWbGFuSWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFZM QU4gSUQNCj4gPiArICBVSU5UMzIgICAgICAgICAgU3VibmV0QWRkckluZm9JUHY2TnVtYmVyOyAg ICAgLy8vPCBJUHY2IGFkZHJlc3MNCj4gPiBpbmZvIG51bWJlci4NCj4gPiArICBFRklfSVA2X0FE RFJFU1NfSU5GTyAqU3VibmV0QWRkckluZm9JUHY2OyAgICAgLy8vPCBJUHY2IGFkZHJlc3MNCj4g PiBpbmZvLg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTmV0d29yayBpbnRlcmZhY2UgcHJvdG9jb2wg YW5kIFJFU1QgRVggaW5mb3IuDQo+ID4gKyAgLy8NCj4gPiArICBVSU5UMzIgICAgICAgICAgTmV0 d29ya1Byb3RvY29sVHlwZTsgICAgICAgICAgLy8vPCBOZXR3b3JrDQo+ID4gcHJvdG9jb2wgdHlw ZS4gUmVmZXIgdG8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8vPA0KPiA+IE5FVFdPUktfSU5URVJGQUNFX1BST1RPQ09MX1RZUEUuDQo+ID4g KyAgUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9QUk9UT0NPTA0KPiA+IE5ldHdv cmtJbnRlcmZhY2VQcm90b2NvbEluZm87IC8vLzwgTmV0d29yayBpbnRlcmZhY2UgcHJvdG9jb2wN Cj4gaW5mb3JtYXRpb24uDQo+ID4gKyAgRUZJX0hBTkRMRSAgICAgIFJlc3RFeEhhbmRsZTsgICAg ICAgICAgICAgICAgIC8vLzwgUkVTVCBFWA0KPiA+IGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhp cyBuZXR3b3JrIGludGVyZmFjZS4NCj4gPiArfSBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JL X0lOVEVSRkFDRV9JTlRFUk5BTDsNCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEludGVybmFsIHN0 cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIFJFU1QgRVggcHJvcGVydGllcy4NCj4gPiArLy8NCj4g PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgICAgTElTVF9FTlRSWSAgICAgIEVudHJ5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8vPCBMaW5rIGxpc3QNCj4gPiBlbnRyeS4NCj4gPiArICAg IEVGSV9IQU5ETEUgICAgICBPcGVuRHJpdmVyQWdlbnRIYW5kbGU7ICAgICAgICAgIC8vLzwgVGhl DQo+ID4gYWdlbnQgdG8gb3BlbiBuZXR3b3JrIHByb3RvY29sLg0KPiA+ICsgICAgRUZJX0hBTkRM RSAgICAgIE9wZW5Ecml2ZXJDb250cm9sbGVySGFuZGxlOyAgICAgLy8vPCBUaGUNCj4gPiBjb250 cm9sbGVyIGhhbmRsZSB0byBvcGVuIG5ldHdvcmsgcHJvdG9jb2wuDQo+ID4gKyAgICBFRklfSEFO RExFICAgICAgUmVzdEV4Q2hpbGRIYW5kbGU7ICAgICAgICAgICAgICAvLy88IFRoZSBjaGlsZA0K PiA+IGhhbmRsZSBjcmVhdGVkIHRocm91Z2h0IFJFU1QgRVggU2VydmljZSBQcm90b2NvbC4NCj4g PiArICAgIEVGSV9IQU5ETEUgICAgICBSZXN0RXhDb250cm9sbGVySGFuZGxlOyAgICAgICAgIC8v LzwgVGhlDQo+ID4gY29udHJvbGxlciBoYW5kbGUgd2hpY2ggcHJvdmlkZSBSRVNUIEVYIHByb3Rv Y29sLg0KPiA+ICsgICAgRUZJX1JFU1RfRVhfUFJPVE9DT0wgKlJlc3RFeFByb3RvY29sSW50ZXJm YWNlOyAgLy8vPCBQb2ludGVyIHRvDQo+ID4gRUZJX1JFU1RfRVhfUFJPVE9DT0wuDQo+ID4gKyAg ICBVSU5UMzIgICAgICAgICAgUmVzdEV4SWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88IFRo ZQ0KPiA+IGlkZW50aWZpZXIgaW5zdGFsbGVkIG9uIFJFU1QgRVggY29udHJvbGxlciBoYW5kbGUu DQo+ID4gK30gRUZJX1JFREZJU0hfRElTQ09WRVJfUkVTVF9FWF9JTlNUQU5DRV9JTlRFUk5BTDsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gdG8gZ2V0IHN1Ym5ldCBpbmZv cm1hdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgICAgIEltYWdlSGFuZGxl ICBFRkkgaGFuZGxlIHdpdGggdGhpcyBpbWFnZS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgICAg ICAgSW5zdGFuY2UgIEluc3RhbmNlIG9mIE5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEByZXR2 YWwgRUZJX1NUQVRVUyAgICBHZXQgc3VibmV0IGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4NCj4g PiArICBAcmV0dmFsIE90aGVyd2lzZSAgICAgRmFpbCB0byBnZXQgc3VibmV0IGluZm9ybWF0aW9u Lg0KPiA+ICsqKi8NCj4gPiArdHlwZWRlZg0KPiA+ICtFRklfU1RBVFVTDQo+ID4gKyhFRklBUEkg KkVGSV9SRURGSVNIX0RJU0NPVkVSX0dFVF9TVUJORVRfSU5GTykoDQo+ID4gKyAgSU4gRUZJX0hB TkRMRSBJbWFnZUhhbmRsZSwNCj4gPiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JL X0lOVEVSRkFDRV9JTlRFUk5BTCAqSW5zdGFuY2UNCj4gPiArKTsNCj4gPiArDQo+ID4gKy8vDQo+ ID4gKy8vIFRoZSByZXF1aXJlIG5ldHdvcmsgcHJvdG9jb2wgbWF0cml4Lg0KPiA+ICsvLw0KPiA+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDMyICAgUHJvdG9jb2xUeXBlOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8vPA0KPiA+IE5ldHdvcmsgcHJvdG9jb2wgdHlwZSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88DQo+ID4gUmVmZXIgdG8gTkVUV09SS19JTlRFUkZBQ0VfUFJPVE9DT0xfVFlQRS4N Cj4gPiArICBDSEFSMTYgICAqUHJvdG9jb2xOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88DQo+ID4gUHJvdG9jb2wgbmFtZS4NCj4gPiArICBFRklfR1VJRCAqUmVxdWlyZWRQ cm90b2NvbEd1aWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLy88DQo+ID4gTmV0d29yayBwcm90 b2NvbCBpbnRlcmZhY2UgR1VJRC4NCj4gPiArICBFRklfR1VJRCAqUmVxdWlyZWRTZXJ2aWNlQmlu ZGluZ1Byb3RvY29sR3VpZDsgICAgICAgICAvLy88IE5ldHdvcmsNCj4gPiBwcm90b2NvbCBzZXJ2 aWNlIEdVSUQuDQo+ID4gKyAgRUZJX0dVSUQgKkRpc2NvdmVyZWRQcm90b2NvbEd1aWQ7ICAgICAg ICAgICAgICAgICAgICAgLy8vPA0KPiA+IFByb3RvY29sIGludGVyZmFjZSBHVUlEIHVzZSB0byBp bnN0YWxsIGlkZW50aWZpZXIuDQo+ID4gKyAgRUZJX1JFREZJU0hfRElTQ09WRVJfR0VUX1NVQk5F VF9JTkZPIEdldFN1Ym5ldEluZm87ICAgLy8vPA0KPiA+IEZ1bmN0aW9uIG9mIGdldHRpbmcgc3Vi bmV0IGluZm9ybWF0aW9uLg0KPiA+ICt9IFJFREZJU0hfRElTQ09WRVJfUkVRVUlSRURfUFJPVE9D T0w7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBMaW5rIGxpc3Qgb2YgUmVkZmlzaCBkaXNjb3Zl ciBpbnN0YW5jZS4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIExJU1Rf RU5UUlkgIE5leHRJbnN0YW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwNCj4g PiBOZXh0IGxpc3QuDQo+ID4gKyAgRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlNUQU5DRSAqSW5z dGFuY2U7ICAgICAgICAgICAgLy8vPA0KPiA+IFBvaW50ZXIgdG8gRUZJX1JFREZJU0hfRElTQ09W RVJFRF9JTlNUQU5DRS4NCj4gPiArfSBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0xJ U1Q7DQo+ID4gKw0KPiA+ICsvLw0KPiA+ICsvLyBJbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgUmVkZmlz aCBkaXNjb3ZlciBpbnN0YW5jZS4NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgIExJU1RfRU5UUlkgIEVudHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vLzwNCj4gPiBMaW5rIGxpc3QgZW50cnkuDQo+ID4gKyAgRUZJX0hBTkRMRSAgT3duZXI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPA0KPiA+IFRoZSBvd25lciBvd25z IHRoaXMgUmVkZmlzaCBzZXJ2aWNlIGRpc2NvdmVyeS4NCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy88DQo+ID4gSXQncyB0aGUg RUZJIGltYWdlIGhhbmRsZSBvZiBkcml2ZXIgdXNlcw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLzwNCj4gPiBFRkkgUmVkZmlz aCBEaXNjb3ZlciBQcm90b2NvbC4NCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUl9GTEFHIERp c2NvdmVyRmxhZ3M7ICAgICAgICAgICAgICAvLy88DQo+ID4gRUZJX1JFREZJU0hfRElTQ09WRVJf RkxBRw0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSRURfVE9LRU4gKkRpc2NvdmVyVG9rZW47 ICAgICAgICAgIC8vLzwNCj4gPiBUb2tlbiB1c2VkIHRvIHNpZ25hbCB3aGVuIFJlZGZpc2ggc2Vy dmljZSBpcyBkaXNjb3ZlcmVkLg0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktf SU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKk5ldHdvcmtJbnRlcmZhY2U7IC8vLzwNCj4gPiBFRklf UkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICsNCj4gPiAv Ly88IGluc3RhbmNlIHVzZWQgdG8gZGlzY292ZXIgUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gQmVsb3cgZm9yIEhvc3QgaW5zdGVyZmFjZSBkaXNjb3ZlcnkuDQo+ID4gKyAg Ly8NCj4gPiArICBCT09MRUFOICAgICAgICAgSG9zdEludGZWYWxpZGF0aW9uOyAgICAgICAgICAg ICAgICAgICAvLy88DQo+ID4gSW5kaWNhdGVzIHdoZXRoZXIgdG8gdmFsaWRhdGUgUmVkZmlzaCBI b3N0IGludGVyZmFjZS4NCj4gPiArICBFRklfSVBfQUREUkVTUyAgVGFyZ2V0SXBBZGRyZXNzOyAg ICAgICAgICAgICAgICAgICAgICAvLy88DQo+ID4gVGFyZ2V0IElQIGFkZHJlc3MgcmVwb3J0ZWQg aW4gUmVkZmlzaCBIb3N0IGludGVyZmFjZS4NCj4gPiArfSBFRklfUkVERklTSF9ESVNDT1ZFUkVE X0lOVEVSTkFMX0lOU1RBTkNFOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhlIGZ1bmN0aW9u IGFkZHMgYSBuZXcgZm91ZG4gUmVkZmlzaCBzZXJ2aWNlIHRvIGludGVybmFsIGxpc3QgYW5kDQo+ ID4gKyAgbm90aWZ5IGNsaW5ldC4NCj4gPiArDQo+ID4gKyAgSXQgc2ltcGx5IGZyZWVzIHRoZSBw YWNrZXQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEluc3RhbmNlDQo+ID4gRUZJX1JFREZJ U0hfRElTQ09WRVJFRF9JTlRFUk5BTF9JTlNUQU5DRS4NCj4gPiArICBAcGFyYW1baW5dICBSZWRm aXNoVmVyc2lvbiAgICAgICAgUmVkZmlzaCB2ZXJzaW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFJl ZGZpc2hMb2NhdGlvbiAgICAgICBSZWRmaXNoIGxvY2F0aW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0g IFV1aWQgICAgICAgICAgICAgICAgICBTZXJ2aWNlIFVVSUQgc3RyaW5nLg0KPiA+ICsgIEBwYXJh bVtpbl0gIE9zICAgICAgICAgICAgICAgICAgICBPUyBzdHJpbmcuDQo+ID4gKyAgQHBhcmFtW2lu XSAgT3NWZXIgICAgICAgICAgICAgICAgIE9TIHZlcnNpb24gc3RyaW5nLg0KPiA+ICsgIEBwYXJh bVtpbl0gIFByb2R1Y3QgICAgICAgICAgICAgICBQcm9kdWN0IHN0cmluZy4NCj4gPiArICBAcGFy YW1baW5dICBQcm9kdWN0VmVyICAgICAgICAgICAgUHJvZHVjdCB2ZXJpc29uIHN0cmluZy4NCj4g PiArICBAcGFyYW1baW5dICBVc2VIdHRwcyAgICAgICAgICAgICAgUmVkZmlzaCBzZXJ2aWNlIHJl cXVpcmVzIHNlY3VyZWQNCj4gPiBjb25uZWN0aW9uLg0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgICBSZWRmaXNoIHNlcnZpY2UgaXMgYWRkZWQgdG8gbGlzdA0KPiA+IHN1 Y2Nlc3NmdWxseS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0FkZEFu ZFNpZ25hbE5ld1JlZGZpc2hTZXJ2aWNlICgNCj4gPiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZF UkVEX0lOVEVSTkFMX0lOU1RBTkNFICpJbnN0YW5jZSwNCj4gPiArICBJTiBVSU5UTiAqUmVkZmlz aFZlcnNpb24gT1BUSU9OQUwsDQo+ID4gKyAgSU4gQ0hBUjggKlJlZGZpc2hMb2NhdGlvbiBPUFRJ T05BTCwNCj4gPiArICBJTiBDSEFSOCAqVXVpZCAgT1BUSU9OQUwsDQo+ID4gKyAgSU4gQ0hBUjgg Kk9zICBPUFRJT05BTCwNCj4gPiArICBJTiBDSEFSOCAqT3NWZXIgIE9QVElPTkFMLA0KPiA+ICsg IElOIENIQVI4ICpQcm9kdWN0ICBPUFRJT05BTCwNCj4gPiArICBJTiBDSEFSOCAqUHJvZHVjdFZl ciAgT1BUSU9OQUwsDQo+ID4gKyAgSU4gQk9PTEVBTiBVc2VIdHRwcw0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGUgZnVuY3Rpb24gZ2V0cyBpbmZvcm1hdGlvbiByZXBvcnRl ZCBpbiBSZWRmaXNoIEhvc3QgSW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArICBJdCBzaW1wbHkgZnJl ZXMgdGhlIHBhY2tldC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgU21iaW9zICAgICAgICAg ICBTTUJJT1MgcHJvdG9jb2wuDQo+ID4gKyAgQHBhcmFtW291dF0gRGV2aWNlRGVzY3JpcHRvciBQ b2ludGVyIHRvIFJFREZJU0hfSU5URVJGQUNFX0RBVEEuDQo+ID4gKyAgQHBhcmFtW291dF0gUHJv dG9jb2xEYXRhICAgICBQb2ludGVyIHRvDQo+ID4gUkVERklTSF9PVkVSX0lQX1BST1RPQ09MX0RB VEEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgR2V0IGhvc3QgaW50ZXJm YWNlIHN1Y2Nlc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXJ3aXNlICAgICAgRmFpbCB0byB0 ZXQgaG9zdCBpbnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICtSZWRmaXNoR2V0SG9zdEludGVyZmFjZVByb3RvY29sRGF0YSAoDQo+ID4gKyAgSU4gRUZJX1NN QklPU19QUk9UT0NPTCAgICAgICAgICAgICAgKlNtYmlvcywNCj4gPiArICBPVVQgUkVERklTSF9J TlRFUkZBQ0VfREFUQSAgICAgICAgICAqKkRldmljZURlc2NyaXB0b3IsDQo+ID4gKyAgT1VUIFJF REZJU0hfT1ZFUl9JUF9QUk9UT0NPTF9EQVRBICAgKipQcm90b2NvbERhdGENCj4gPiArICApOw0K PiA+ICsNCj4gPiArZXh0ZXJuIEVGSV9HVUlEIGdSZWRmaXNoRGlzY292ZXJUY3A0SW5zdGFuY2U7 DQo+ID4gK2V4dGVybiBFRklfR1VJRCBnUmVkZmlzaERpc2NvdmVyVGNwNkluc3RhbmNlOw0KPiA+ ICtleHRlcm4gRUZJX0dVSUQgZ1JlZGZpc2hEaXNjb3ZlclJlc3RFWEluc3RhbmNlOw0KPiA+ICsj ZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoRGlzY292ZXJEeGUvQ29t cG9uZW50TmFtZS5jDQo+ID4gYi9SZWRmaXNoUGtnL1JlZGZpc2hEaXNjb3ZlckR4ZS9Db21wb25l bnROYW1lLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAu LmFkYWQyNTA0YmMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRm aXNoRGlzY292ZXJEeGUvQ29tcG9uZW50TmFtZS5jDQo+ID4gQEAgLTAsMCArMSwyMTggQEANCj4g PiArLyoqIEBmaWxlDQo+ID4gKyAgSW1wbGVtZW50YXRpb24gb2YgRUZJX0NPTVBPTkVOVF9OQU1F X1BST1RPQ09MIGFuZA0KPiA+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgcHJvdG9jb2wu DQo+ID4gKyAgZm9yIEVGSSBSZWZpc2ggRGlzY292ZXIgUHJvdG9jb2wNCj4gPiArDQo+ID4gKyAg KEMpIENvcHlyaWdodCAyMDIxIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50 IExQPEJSPg0KPiA+ICsNCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiUmVkZmlz aERpc2NvdmVySW50ZXJuYWwuaCINCj4gPiArDQo+ID4gKy8vDQo+ID4gKy8vIEVGSSBDb21wb25l bnQgTmFtZSBGdW5jdGlvbnMNCj4gPiArLy8NCj4gPiArLyoqDQo+ID4gKyAgUmV0cmlldmVzIGEg VW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlci1yZWFkYWJsZSBuYW1lIG9mIHRoZSBFRkkN Cj4gPiBEcml2ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgQSBwb2lu dGVyIHRvIHRoZQ0KPiA+IEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g PiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgIEEgcG9pbnRlciB0byBhIHRocmVlLWNoYXJhY3Rl ciBJU08gNjM5LTINCj4gPiBsYW5ndWFnZSBpZGVudGlmaWVyLg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgVGhpcyBpcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQN Cj4gPiB0aGF0IHRoZSBjYWxsZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJl cXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gPiBsYW5ndWFnZXMgc3Bl Y2lmaWVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBpbiBTdXBwb3J0ZWRMYW5ndWFn ZXMuICBUaGUgbnVtYmVyIG9mDQo+ID4gbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgaXMgdXAgdG8gdGhlIGRyaXZlciB3cml0ZXIu DQo+ID4gKyAgQHBhcmFtW291dF0gRHJpdmVyTmFtZSBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUg c3RyaW5nIHRvIHJldHVybi4NCj4gPiBUaGlzIFVuaWNvZGUgc3RyaW5nDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzIGluDQo+ID4gdGhlIGxhbmd1YWdlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIERyaXZlcg0KPiA+IHNwZWNpZmll ZCBieSBUaGlzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gPiBMYW5ndWFnZSB3YXMgcmV0dXJuZWQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBEcml2ZXJOYW1lLg0KPiA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9l cyBub3QNCj4gPiBzdXBwb3J0IHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSZWRmaXNoRGlzY292ZXJDb21wb25lbnRO YW1lR2V0RHJpdmVyTmFtZSAoDQo+ID4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NP TCAgKlRoaXMsDQo+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1 YWdlLA0KPiA+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFt ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXRyaWV2ZXMgYSBVbmljb2Rl IHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlDQo+IGNvbnRyb2xs ZXINCj4gPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYW4gRUZJIERyaXZlci4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ ID4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtp bl0gIENvbnRyb2xsZXJIYW5kbGUgVGhlIGhhbmRsZSBvZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUg ZHJpdmVyDQo+ID4gc3BlY2lmaWVkIGJ5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUaGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gPiBzcGVjaWZpZXMgdGhlIGNv bnRyb2xsZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdob3NlIG5hbWUg aXMgdG8gYmUgcmV0dXJuZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGUgICAgICBU aGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvDQo+ID4gcmV0cmlldmUgdGhlIG5h bWUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mLiAgVGhpcyBpcyBhbiBv cHRpb25hbCBwYXJhbWV0ZXINCj4gPiB0aGF0IG1heSBiZSBOVUxMLiAgSXQNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNlIGRyaXZlcnMu ICBJdA0KPiA+IHdpbGwgYWxzbyBiZSBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgYSBidXMgZHJpdmVycyB0aGF0IHdpc2ggdG8gcmV0cmlldmUNCj4gPiB0aGUg bmFtZSBvZiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cyBjb250 cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUgTlVMTA0KPiA+IGZvciBhIGJ1cyBkcml2ZXINCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRo ZSBuYW1lIG9mIGENCj4gPiBjaGlsZCBjb250cm9sbGVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gIExh bmd1YWdlICAgICAgICAgQSBwb2ludGVyIHRvIGEgdGhyZWUgY2hhcmFjdGVyIElTTw0KPiA+IDYz OS0yIGxhbmd1YWdlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlm aWVyLiAgVGhpcyBpcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlDQo+ID4gY29udHJvbGxlciBuYW1lDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBjYWxsZXIgaXMgcmVx dWVzdGluZywgYW5kIGl0DQo+ID4gbXVzdCBtYXRjaCBvbmUNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9mIHRoZSBsYW5ndWFnZXMgc3BlY2lmaWVkIGluDQo+ID4gU3VwcG9y dGVkTGFuZ3VhZ2VzLiAgVGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhDQo+ID4gZHJpdmVyIGlzIHVwIHRvIHRo ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHdyaXRlci4NCj4g PiArICBAcGFyYW1bb3V0XSAgQ29udHJvbGxlck5hbWUgIEEgcG9pbnRlciB0byB0aGUgVW5pY29k ZSBzdHJpbmcgdG8NCj4gPiByZXR1cm4uICBUaGlzIFVuaWNvZGUNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0K PiA+IHNwZWNpZmllZCBieQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUgaW4NCj4gPiB0aGUgbGFuZ3VhZ2Ugc3BlY2lm aWVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBMYW5ndWFnZSwgZnJv bSB0aGUgcG9pbnQgb2Ygdmlldw0KPiA+IG9mIHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBUaGlzLg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZQ0KPiA+ IHVzZXItcmVhZGFibGUgbmFtZSBpbiB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yDQo+ID4gdGhlIGRyaXZl cg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlz IHdhcyByZXR1cm5lZCBpbg0KPiA+IERyaXZlck5hbWUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBOVUxMIGFuZCBpdCBpcyBu b3QgYQ0KPiA+IHZhbGlkIEVGSV9IQU5ETEUuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBDb250cm9sbGVyTmFtZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90DQo+ID4gY3Vy cmVudGx5IG1hbmFnaW5nDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl IGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ID4gQ29udHJvbGxlckhhbmRsZSBhbmQNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZS4NCj4gPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRv ZXMgbm90DQo+ID4gc3VwcG9ydCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUmVkZmlzaERpc2NvdmVyQ29tcG9uZW50 TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BS T1RPQ09MICAqVGhpcywNCj4gPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgQ2hpbGRIYW5kbGUNCj4gPiBPUFRJT05BTCwNCj4gPiArICBJTiAgQ0hBUjggICAgICAgICAg ICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiA+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKw0KPiA+ ICsvLy8NCj4gPiArLy8vIENvbXBvbmVudCBOYW1lIFByb3RvY29sIGluc3RhbmNlDQo+ID4gKy8v Lw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPiA+ICtFRklfQ09NUE9ORU5U X05BTUVfUFJPVE9DT0wNCj4gZ1JlZGZpc2hEaXNjb3ZlckNvbXBvbmVudE5hbWUNCj4gPiA9IHsN Cj4gPiArICBSZWRmaXNoRGlzY292ZXJDb21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gPiAr ICBSZWRmaXNoRGlzY292ZXJDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ID4gKyAg ImVuZyINCj4gPiArfTsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gQ29tcG9uZW50IE5hbWUg MiBQcm90b2NvbCBpbnN0YW5jZQ0KPiA+ICsvLy8NCj4gPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQNCj4gPiArRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTA0KPiA+IGdSZWRmaXNo RGlzY292ZXJDb21wb25lbnROYW1lMiA9IHsNCj4gPiArICAoRUZJX0NPTVBPTkVOVF9OQU1FMl9H RVRfRFJJVkVSX05BTUUpDQo+ID4gUmVkZmlzaERpc2NvdmVyQ29tcG9uZW50TmFtZUdldERyaXZl ck5hbWUsDQo+ID4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRST0xMRVJfTkFNRSkN Cj4gPiBSZWRmaXNoRGlzY292ZXJDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ID4g KyAgImVuIg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBUYWJsZSBvZiBkcml2 ZXIgbmFtZXMNCj4gPiArLy8vDQo+ID4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+ ID4gK0VGSV9VTklDT0RFX1NUUklOR19UQUJMRSBtUmVkZmlzaERpc2NvdmVyRHJpdmVyTmFtZVRh YmxlW10gPSB7DQo+ID4gKyAgeyAiZW5nO2VuIiwgKENIQVIxNiAqKUwiUmVkZmlzaCBEaXNjb3Zl ciBVRUZJIERyaXZlciIgfSwNCj4gPiArICB7IE5VTEwsIE5VTEwgfQ0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RB QkxFDQo+ID4gKmdSZWRmaXNoRGlzY292ZXJDb250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMg dGhlIHVzZXItcmVhZGFibGUgbmFtZSBvZiB0aGUgRUZJDQo+ID4gRHJpdmVyLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ID4gRUZJX0NP TVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIExhbmd1 YWdlICAgIEEgcG9pbnRlciB0byBhIHRocmVlLWNoYXJhY3RlciBJU08gNjM5LTINCj4gPiBsYW5n dWFnZSBpZGVudGlmaWVyLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMg dGhlIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0DQo+ID4gdGhhdCB0aGUgY2FsbGVy DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVxdWVzdGluZywgYW5kIGl0IG11 c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiA+IGxhbmd1YWdlcyBzcGVjaWZpZWQNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuICBUaGUgbnVtYmVyIG9m DQo+ID4gbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZHJpdmVyIGlzIHVwIHRvIHRoZSBkcml2ZXIgd3JpdGVyLg0KPiA+ICsgIEBwYXJhbVtv dXRdICBEcml2ZXJOYW1lIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJu Lg0KPiA+IFRoaXMgVW5pY29kZSBzdHJpbmcNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBpcyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluDQo+ID4gdGhl IGxhbmd1YWdlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExh bmd1YWdlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXINCj4gPiBzcGVjaWZpZWQgYnkgVGhpcw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lm aWVkIGJ5DQo+ID4gTGFuZ3VhZ2Ugd2FzIHJldHVybmVkDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW4gRHJpdmVyTmFtZS4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+ID4gc3Vw cG9ydCB0aGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtFRklBUEkNCj4gPiArUmVkZmlzaERpc2NvdmVyQ29tcG9uZW50TmFtZUdldERyaXZlck5h bWUgKA0KPiA+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiA+ ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gPiArICBP VVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICByZXR1cm4gTG9va3VwVW5pY29kZVN0cmluZzIgKA0KPiA+ICsgICAgICAg ICAgIExhbmd1YWdlLA0KPiA+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywN Cj4gPiArICAgICAgICAgICBtUmVkZmlzaERpc2NvdmVyRHJpdmVyTmFtZVRhYmxlLA0KPiA+ICsg ICAgICAgICAgIERyaXZlck5hbWUsDQo+ID4gKyAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0g JmdSZWRmaXNoRGlzY292ZXJDb21wb25lbnROYW1lKQ0KPiA+ICsgICAgICAgICAgICk7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRo YXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUNCj4gY29udHJvbGxlcg0KPiA+ICsg IHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhbiBFRkkgRHJpdmVyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gPiBFRklfQ09N UE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJv bGxlckhhbmRsZSBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4g PiBzcGVjaWZpZWQgYnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMg aXMgbWFuYWdpbmcuICBUaGlzIGhhbmRsZQ0KPiA+IHNwZWNpZmllcyB0aGUgY29udHJvbGxlcg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBpcyB0byBiZSBy ZXR1cm5lZC4NCj4gPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZSAgICAgIFRoZSBoYW5kbGUg b2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8NCj4gPiByZXRyaWV2ZSB0aGUgbmFtZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBh cmFtZXRlcg0KPiA+IHRoYXQgbWF5IGJlIE5VTEwuICBJdA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2lsbCBiZSBOVUxMIGZvciBkZXZpY2UgZHJpdmVycy4gIEl0DQo+ID4g d2lsbCBhbHNvIGJlIE5VTEwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv ciBhIGJ1cyBkcml2ZXJzIHRoYXQgd2lzaCB0byByZXRyaWV2ZQ0KPiA+IHRoZSBuYW1lIG9mIHRo ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzIGNvbnRyb2xsZXIuICBJ dCB3aWxsIG5vdCBiZSBOVUxMDQo+ID4gZm9yIGEgYnVzIGRyaXZlcg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2Yg YQ0KPiA+IGNoaWxkIGNvbnRyb2xsZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAg ICAgICBBIHBvaW50ZXIgdG8gYSB0aHJlZSBjaGFyYWN0ZXIgSVNPDQo+ID4gNjM5LTIgbGFuZ3Vh Z2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIuICBUaGlz IGlzIHRoZSBsYW5ndWFnZSBvZiB0aGUNCj4gPiBjb250cm9sbGVyIG5hbWUNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nLCBh bmQgaXQNCj4gPiBtdXN0IG1hdGNoIG9uZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2YgdGhlIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4NCj4gPiBTdXBwb3J0ZWRMYW5ndWFn ZXMuICBUaGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBs YW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGENCj4gPiBkcml2ZXIgaXMgdXAgdG8gdGhlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB3cml0ZXIuDQo+ID4gKyAgQHBhcmFt W291dF0gIENvbnRyb2xsZXJOYW1lICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRv DQo+ID4gcmV0dXJuLiAgVGhpcyBVbmljb2RlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXINCj4gPiBzcGVjaWZp ZWQgYnkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUgYW5kIENoaWxkSGFuZGxlIGluDQo+ID4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgTGFuZ3VhZ2UsIGZyb20gdGhlIHBvaW50 IG9mIHZpZXcNCj4gPiBvZiB0aGUgZHJpdmVyIHNwZWNpZmllZA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnkgVGhpcy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUNCj4gPiB1c2VyLXJlYWRh YmxlIG5hbWUgaW4gdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFu Z3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIGZvcg0KPiA+IHRoZSBkcml2ZXINCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJu ZWQgaW4NCj4gPiBEcml2ZXJOYW1lLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIENvbnRyb2xsZXJIYW5kbGUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90IGENCj4gPiB2 YWxpZCBFRklfSEFORExFLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExh bmd1YWdlIGlzIE5VTEwuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29u dHJvbGxlck5hbWUgaXMgTlVMTC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdA0KPiA+IGN1cnJlbnRseSBtYW5h Z2luZw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250cm9sbGVy IHNwZWNpZmllZCBieQ0KPiA+IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiA+ IHN1cHBvcnQgdGhlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3Vh Z2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hEaXNjb3ZlckNvbXBvbmVudE5hbWVHZXRDb250 cm9sbGVyTmFtZSAoDQo+ID4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRo aXMsDQo+ID4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ID4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgIENoaWxkSGFu ZGxlDQo+ID4gT1BUSU9OQUwsDQo+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAg ICAgICpMYW5ndWFnZSwNCj4gPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg KipDb250cm9sbGVyTmFtZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoRGlz Y292ZXJEeGUvUmVkZmlzaERpc2NvdmVyRHhlLmMNCj4gPiBiL1JlZGZpc2hQa2cvUmVkZmlzaERp c2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckR4ZS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi44MGQ3MGE0Njc5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hEaXNjb3ZlckR4ZS5j DQo+ID4gQEAgLTAsMCArMSwxOTEwIEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsNCj4gPiArICBU aGUgaW1wbGVtZW50YXRpb24gb2YgRUZJIFJlZGZpZGggRGlzY292ZXIgUHJvdG9jb2wuDQo+ID4g Kw0KPiA+ICsgIChDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBE ZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgIlJlZGZpc2hEaXNjb3ZlckludGVybmFsLmgiDQo+ID4gKw0KPiA+ICtMSVNUX0VOVFJZIG1S ZWRmaXNoRGlzY292ZXJMaXN0Ow0KPiA+ICtMSVNUX0VOVFJZIG1SZWRmaXNoSW5zdGFuY2VMaXN0 Ow0KPiA+ICtFRklfU01CSU9TX1BST1RPQ09MICptU21iaW9zID0gTlVMTDsNCj4gPiArDQo+ID4g K1VJTlROIG1OdW1OZXR3b3JrSW50ZXJmYWNlID0gMDsNCj4gPiArVUlOVE4gbU51bVJlc3RFeElu c3RhbmNlID0gMDsNCj4gPiArTElTVF9FTlRSWSBtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0lu dGVyZmFjZTsNCj4gPiArTElTVF9FTlRSWSBtRWZpUmVkZmlzaERpc2NvdmVyUmVzdEV4SW5zdGFu Y2U7DQo+ID4gKw0KPiA+ICtFRklfR1VJRCBtUmVkZmlzaERpc2NvdmVyVGNwNEluc3RhbmNlR3Vp ZCA9DQo+ID4gRUZJX1JFREZJU0hfRElTQ09WRVJfVENQNF9JTlNUQU5DRV9HVUlEOw0KPiA+ICtF RklfR1VJRCBtUmVkZmlzaERpc2NvdmVyVGNwNkluc3RhbmNlR3VpZCA9DQo+ID4gRUZJX1JFREZJ U0hfRElTQ09WRVJfVENQNl9JTlNUQU5DRV9HVUlEOw0KPiA+ICtFRklfR1VJRCBtUmVkZmlzaERp c2NvdmVyUmVzdEV4SW5zdGFuY2VHdWlkID0NCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUl9SRVNU X0VYX0lOU1RBTkNFX0dVSUQ7DQo+ID4gKw0KPiA+ICtFRklfSEFORExFIEVmaVJlZGZpc2hEaXNj b3ZlclByb3RvY29sSGFuZGxlID0gTlVMTDsNCj4gPiArDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiAr RUZJQVBJDQo+ID4gK1RjcDRHZXRTdWJuZXRJbmZvICgNCj4gPiArICBJTiBFRklfSEFORExFIElt YWdlSGFuZGxlLA0KPiA+ICsgIElOIEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJG QUNFX0lOVEVSTkFMICpJbnN0YW5jZQ0KPiA+ICspOw0KPiA+ICsNCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtFRklBUEkNCj4gPiArVGNwNkdldFN1Ym5ldEluZm8gKA0KPiA+ICsgIElOIEVGSV9IQU5E TEUgSW1hZ2VIYW5kbGUsDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19J TlRFUkZBQ0VfSU5URVJOQUwgKkluc3RhbmNlDQo+ID4gKyk7DQo+ID4gKw0KPiA+ICtzdGF0aWMg UkVERklTSF9ESVNDT1ZFUl9SRVFVSVJFRF9QUk9UT0NPTCBnUmVxdWlyZWRQcm90b2NvbFtdID0g ew0KPiA+ICsgIHsNCj4gPiArICAgIFByb3RvY29sVHlwZVRjcDQsDQo+ID4gKyAgICBMIlRDUDQg U2VydmljZSBCaW5kaW5nIFByb3RvY29sIiwNCj4gPiArICAgICZnRWZpVGNwNFByb3RvY29sR3Vp ZCwNCj4gPiArICAgICZnRWZpVGNwNFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsg ICAgJm1SZWRmaXNoRGlzY292ZXJUY3A0SW5zdGFuY2VHdWlkLA0KPiA+ICsgICAgVGNwNEdldFN1 Ym5ldEluZm8NCj4gPiArICB9LA0KPiA+ICsgIHsNCj4gPiArICAgIFByb3RvY29sVHlwZVRjcDYs DQo+ID4gKyAgICBMIlRDUDYgU2VydmljZSBCaW5kaW5nIFByb3RvY29sIiwNCj4gPiArICAgICZn RWZpVGNwNlByb3RvY29sR3VpZCwNCj4gPiArICAgICZnRWZpVGNwNlNlcnZpY2VCaW5kaW5nUHJv dG9jb2xHdWlkLA0KPiA+ICsgICAgJm1SZWRmaXNoRGlzY292ZXJUY3A2SW5zdGFuY2VHdWlkLA0K PiA+ICsgICAgVGNwNkdldFN1Ym5ldEluZm8NCj4gPiArICB9LA0KPiA+ICsgIHsNCj4gPiArICAg IFByb3RvY29sVHlwZVJlc3RFeCwNCj4gPiArICAgIEwiUkVTVCBFWCBTZXJ2aWNlIEJpbmRpbmcg UHJvdG9jb2wiLA0KPiA+ICsgICAgJmdFZmlSZXN0RXhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAm Z0VmaVJlc3RFeFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgJm1SZWRmaXNo RGlzY292ZXJSZXN0RXhJbnN0YW5jZUd1aWQsDQo+ID4gKyAgICBOVUxMDQo+ID4gKyAgfQ0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIFJFU1Qg RVggaW5zdGFuY2UgZm9yIHRoZSBmb3VuZCBSZXNmaXNoIHNlcnZpY2UuDQo+ID4gKyAgYnkga25v d24gb3duZXIgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIEluc3RhbmNlDQo+ ID4gRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5BTF9JTlNUQU5DRQ0KPiA+ICsgIEBwYXJh bVtpbl0gICAgVG9rZW4gICAgICAgICAgIENsaWVudCB0b2tlbi4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCBOVUxMICBJbnN0YW5jZSBub3QgZm91bmQuDQo+ID4gKyAgQHJldHZhbCBFRklfUkVERklT SF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0lOU1RBTkNFIFRoZSBpbnN0YW5jZQ0KPiA+IG93bmVkIGJ5 IHRoaXMgb3duZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtDcmVh dGVSZXN0RXhJbnN0YW5jZSAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRF Uk5BTF9JTlNUQU5DRSAqSW5zdGFuY2UsDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJF RF9UT0tFTiAqVG9rZW4NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1 czsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gUmVzdEV4TGliQ3JlYXRlQ2hpbGQgKA0KPiA+ICsg ICAgICAgICAgICBJbnN0YW5jZS0+T3duZXIsDQo+ID4gKyAgICAgICAgICAgIEZpeGVkUGNkR2V0 Qm9vbCAoUGNkUmVkZmlzaERpc2NvdmVyQWNjZXNzTW9kZUluQmFuZCk/DQo+ID4gRWZpUmVzdEV4 U2VydmljZUluQmFuZEFjY2VzczogRWZpUmVzdEV4U2VydmljZU91dE9mQmFuZEFjY2VzcywNCj4g PiArICAgICAgICAgICAgRWZpUmVzdEV4Q29uZmlnSHR0cCwNCj4gPiArICAgICAgICAgICAgRWZp UmVzdEV4U2VydmljZVJlZGZpc2gsDQo+ID4gKw0KPiA+ICZUb2tlbi0+RGlzY292ZXJMaXN0LlJl ZGZpc2hJbnN0YW5jZXMtDQo+ID5JbmZvcm1hdGlvbi5SZWRmaXNoUmVzdEV4SGFuZGxlDQo+ID4g KyAgICAgICAgICAgICk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZXRzIEVGSV9SRURGSVNIX0RJU0NPVkVSRURf SU5URVJOQUxfSU5TVEFOQ0UNCj4gPiArICBieSBrbm93biBvd25lciBoYW5kbGUuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gICAgSW1hZ2VIYW5kbGUgICAgICAgICAgICAgSW1hZ2UgaGFuZGxl IG93bnMNCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0lOU1RBTkNFLg0KPiA+ ICsgIEBwYXJhbVtpbl0gICAgVGFyZ2V0TmV0d29ya0ludGVyZmFjZSAgVGFyZ2V0IG5ldHdvcmsg aW50ZXJmYWNlIHVzZWQNCj4gPiBieSB0aGlzIEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJO QUxfSU5TVEFOQ0UuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBEaXNjb3ZlckZsYWdzDQo+ID4gRUZJ X1JFREZJU0hfRElTQ09WRVJfRkxBRw0KPiA+ICsNCj4gPiArICBAcmV0dmFsIE5VTEwgIEluc3Rh bmNlIG5vdCBmb3VuZC4NCj4gPiArICBAcmV0dmFsIEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5U RVJOQUxfSU5TVEFOQ0UgVGhlIGluc3RhbmNlDQo+ID4gb3duZWQgYnkgdGhpcyBvd25lci4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0lOU1RB TkNFICoNCj4gPiArR2V0SW5zdGFuY2VCeU93bmVyICgNCj4gPiArICBJTiBFRklfSEFORExFIElt YWdlSGFuZGxlLA0KPiA+ICsgIElOIEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJG QUNFX0lOVEVSTkFMDQo+ID4gKlRhcmdldE5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gKyAgSU4gRUZJ X1JFREZJU0hfRElTQ09WRVJfRkxBRyBEaXNjb3ZlckZsYWdzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5BTF9JTlNUQU5DRSAqVGhpc0luc3Rh bmNlOw0KPiA+ICsNCj4gPiArICBpZiAoSXNMaXN0RW1wdHkgKCZtUmVkZmlzaERpc2NvdmVyTGlz dCkpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArICBUaGlzSW5zdGFu Y2UgPQ0KPiA+ICsgICAgKEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxfSU5TVEFOQ0Ug KilHZXRGaXJzdE5vZGUNCj4gPiAoJm1SZWRmaXNoRGlzY292ZXJMaXN0KTsNCj4gPiArICB3aGls ZSAoVFJVRSkgew0KPiA+ICsgICAgaWYgKChUaGlzSW5zdGFuY2UtPk93bmVyID09IEltYWdlSGFu ZGxlKSAmJg0KPiA+ICsgICAgICAgICAoVGhpc0luc3RhbmNlLT5EaXNjb3ZlckZsYWdzID09IERp c2NvdmVyRmxhZ3MpICYmDQo+ID4gKyAgICAgICAgIChUaGlzSW5zdGFuY2UtPk5ldHdvcmtJbnRl cmZhY2UgPT0gVGFyZ2V0TmV0d29ya0ludGVyZmFjZSkpIHsNCj4gPiArICAgICAgcmV0dXJuIFRo aXNJbnN0YW5jZTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChJc05vZGVBdEVuZCAoJm1SZWRm aXNoRGlzY292ZXJMaXN0LCAmVGhpc0luc3RhbmNlLT5FbnRyeSkpIHsNCj4gPiArICAgICAgYnJl YWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBUaGlzSW5zdGFuY2UgPQ0KPiA+ICsgICAgICAoRUZJ X1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5BTF9JTlNUQU5DRSAqKUdldE5leHROb2RlDQo+ID4g KCZtUmVkZmlzaERpc2NvdmVyTGlzdCwgJlRoaXNJbnN0YW5jZS0+RW50cnkpOw0KPiA+ICsgIH07 DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRo aXMgZnVuY3Rpb24gZ2V0cyB0aGUgc3VibmV0IGluZm9ybWF0aW9uIG9mIHRoaXMgVENQNCBpbnN0 YW5jZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICAgICAgIEltYWdlSGFuZGxlICBF RkkgaGFuZGxlIHdpdGggdGhpcyBpbWFnZS4NCj4gPiArICBAcGFyYW1baW5dICAgICAgICAgICAg SW5zdGFuY2UgIEluc3RhbmNlIG9mIE5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgIEByZXR2YWwg RUZJX1NUQVRVUyAgICBHZXQgc3VibmV0IGluZm9ybWF0aW9uIHN1Y2Nlc3NmdWxseS4NCj4gPiAr ICBAcmV0dmFsIE90aGVyd2lzZSAgICAgRmFpbCB0byBnZXQgc3VibmV0IGluZm9ybWF0aW9uLg0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVGNwNEdldFN1Ym5l dEluZm8gKA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgSW1hZ2VIYW5kbGUsDQo+ID4gKyAgSU4gRUZJ X1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwgKkluc3RhbmNlDQo+ ID4gKykNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsgIEVGSV9UQ1A0 X1BST1RPQ09MICpUY3A0Ow0KPiA+ICsgIEVGSV9UQ1A0X0NPTkZJR19EQVRBIFRjcDRDZmdEYXRh Ow0KPiA+ICsgIEVGSV9UQ1A0X09QVElPTiBUY3A0T3B0aW9uOw0KPiA+ICsgIEVGSV9JUDRfTU9E RV9EQVRBIElwTW9kZWRhdGE7DQo+ID4gKyAgVUlOVDggU3VibmV0TWFza0luZGV4Ow0KPiA+ICsg IFVJTlQ4IEJpdE1hc2s7DQo+ID4gKyAgVUlOVDggUHJlZml4TGVuZ3RoOw0KPiA+ICsgIEJPT0xF QU4gR290UHJlZml4TGVuZ3RoOw0KPiA+ICsNCj4gPiArICBpZiAoSW5zdGFuY2UgPT0gTlVMTCkg ew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4g KyAgVGNwNCA9IChFRklfVENQNF9QUk9UT0NPTA0KPiA+ICopSW5zdGFuY2UtPk5ldHdvcmtJbnRl cmZhY2VQcm90b2NvbEluZm8uTmV0d29ya1Byb3RvY29sSW50ZXJmYWNlOw0KPiA+ICsNCj4gPiAr ICBaZXJvTWVtICgoVk9JRCAqKSZUY3A0Q2ZnRGF0YSwgc2l6ZW9mIChFRklfVENQNF9DT05GSUdf REFUQSkpOw0KPiA+ICsgIFplcm9NZW0gKChWT0lEICopJlRjcDRPcHRpb24sIHNpemVvZiAoRUZJ X1RDUDRfT1BUSU9OKSk7DQo+ID4gKyAgLy8gR2l2ZSBhIGxvY2FsIGhvc3QgSVAgYWRkcmVzcyBq dXN0IGZvciBnZXR0aW5nIHN1Ym5ldCBpbmZvcm1hdGlvbi4NCj4gPiArICBUY3A0Q2ZnRGF0YS5B Y2Nlc3NQb2ludC5Vc2VEZWZhdWx0QWRkcmVzcyA9IFRSVUU7DQo+ID4gKyAgVGNwNENmZ0RhdGEu QWNjZXNzUG9pbnQuUmVtb3RlQWRkcmVzcy5BZGRyIFswXSA9IDEyNzsNCj4gPiArICBUY3A0Q2Zn RGF0YS5BY2Nlc3NQb2ludC5SZW1vdGVBZGRyZXNzLkFkZHIgWzFdID0gMDsNCj4gPiArICBUY3A0 Q2ZnRGF0YS5BY2Nlc3NQb2ludC5SZW1vdGVBZGRyZXNzLkFkZHIgWzJdID0gMDsNCj4gPiArICBU Y3A0Q2ZnRGF0YS5BY2Nlc3NQb2ludC5SZW1vdGVBZGRyZXNzLkFkZHIgWzNdID0gMTsNCj4gPiAr ICBUY3A0Q2ZnRGF0YS5BY2Nlc3NQb2ludC5SZW1vdGVQb3J0ICA9IDgwOw0KPiA+ICsgIFRjcDRD ZmdEYXRhLkFjY2Vzc1BvaW50LkFjdGl2ZUZsYWcgID0gVFJVRTsNCj4gPiArDQo+ID4gKyAgVGNw NENmZ0RhdGEuQ29udHJvbE9wdGlvbiA9ICZUY3A0T3B0aW9uOw0KPiA+ICsgIFRjcDRPcHRpb24u UmVjZWl2ZUJ1ZmZlclNpemUgICAgICA9IDY1NTM1Ow0KPiA+ICsgIFRjcDRPcHRpb24uU2VuZEJ1 ZmZlclNpemUgICAgICAgICA9IDY1NTM1Ow0KPiA+ICsgIFRjcDRPcHRpb24uTWF4U3luQmFja0xv ZyAgICAgICAgICA9IDU7DQo+ID4gKyAgVGNwNE9wdGlvbi5Db25uZWN0aW9uVGltZW91dCAgICAg ID0gNjA7DQo+ID4gKyAgVGNwNE9wdGlvbi5EYXRhUmV0cmllcyAgICAgICAgICAgID0gMTI7DQo+ ID4gKyAgVGNwNE9wdGlvbi5GaW5UaW1lb3V0ICAgICAgICAgICAgID0gMjsNCj4gPiArICBUY3A0 T3B0aW9uLktlZXBBbGl2ZVByb2JlcyAgICAgICAgPSA2Ow0KPiA+ICsgIFRjcDRPcHRpb24uS2Vl cEFsaXZlVGltZSAgICAgICAgICA9IDcyMDA7DQo+ID4gKyAgVGNwNE9wdGlvbi5LZWVwQWxpdmVJ bnRlcnZhbCAgICAgID0gMzA7DQo+ID4gKyAgVGNwNE9wdGlvbi5FbmFibGVOYWdsZSAgICAgICAg ICAgID0gVFJVRTsNCj4gPiArICBTdGF0dXMgPSBUY3A0LT5Db25maWd1cmUgKFRjcDQsICZUY3A0 Q2ZnRGF0YSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVC VUcgKChERUJVR19FUlJPUiwgIiVhOiBDYW4ndCBnZXQgc3VibmV0IGluZm9ybWF0aW9uXG4iLA0K PiA+IF9fRlVOQ1RJT05fXykpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ ID4gKyAgU3RhdHVzID0gVGNwNC0+R2V0TW9kZURhdGEgKFRjcDQsIE5VTEwsIE5VTEwsICZJcE1v ZGVkYXRhLCBOVUxMLA0KPiA+IE5VTEwpOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQ2FuJ3QgZ2V0IElQIG1vZGUg ZGF0YSBpbmZvcm1hdGlvblxuIiwNCj4gPiBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICAgIHJldHVy biBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsgIElQNF9DT1BZX0FERFJFU1MgKCZJbnN0YW5jZS0+ U3VibmV0TWFzaywNCj4gPiAmSXBNb2RlZGF0YS5Db25maWdEYXRhLlN1Ym5ldE1hc2spOw0KPiA+ ICsgIEluc3RhbmNlLT5TdWJuZXRBZGRyLnY0LkFkZHIgWzBdID0NCj4gPiBJcE1vZGVkYXRhLkNv bmZpZ0RhdGEuU3RhdGlvbkFkZHJlc3MuQWRkciBbMF0gJg0KPiA+IEluc3RhbmNlLT5TdWJuZXRN YXNrLnY0LkFkZHIgWzBdOw0KPiA+ICsgIEluc3RhbmNlLT5TdWJuZXRBZGRyLnY0LkFkZHIgWzFd ID0NCj4gPiBJcE1vZGVkYXRhLkNvbmZpZ0RhdGEuU3RhdGlvbkFkZHJlc3MuQWRkciBbMV0gJg0K PiA+IEluc3RhbmNlLT5TdWJuZXRNYXNrLnY0LkFkZHIgWzFdOw0KPiA+ICsgIEluc3RhbmNlLT5T dWJuZXRBZGRyLnY0LkFkZHIgWzJdID0NCj4gPiBJcE1vZGVkYXRhLkNvbmZpZ0RhdGEuU3RhdGlv bkFkZHJlc3MuQWRkciBbMl0gJg0KPiA+IEluc3RhbmNlLT5TdWJuZXRNYXNrLnY0LkFkZHIgWzJd Ow0KPiA+ICsgIEluc3RhbmNlLT5TdWJuZXRBZGRyLnY0LkFkZHIgWzNdID0NCj4gPiBJcE1vZGVk YXRhLkNvbmZpZ0RhdGEuU3RhdGlvbkFkZHJlc3MuQWRkciBbM10gJg0KPiA+IEluc3RhbmNlLT5T dWJuZXRNYXNrLnY0LkFkZHIgWzNdOw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQ2FsY3VsYXRlIHRo ZSBzdWJuZXQgbWFzayBwcmVmaXguDQo+ID4gKyAgLy8NCj4gPiArICBHb3RQcmVmaXhMZW5ndGgg PSBGQUxTRTsNCj4gPiArICBQcmVmaXhMZW5ndGggPSAwOw0KPiA+ICsgIFN1Ym5ldE1hc2tJbmRl eCA9IDA7DQo+ID4gKyAgd2hpbGUgKEdvdFByZWZpeExlbmd0aCA9PSBGQUxTRSAmJiBTdWJuZXRN YXNrSW5kZXggPCA0KSB7DQo+ID4gKyAgICBCaXRNYXNrID0gMHg4MDsNCj4gPiArICAgIHdoaWxl IChCaXRNYXNrICE9IDApIHsNCj4gPiArICAgICAgaWYgKChJbnN0YW5jZS0+U3VibmV0TWFzay52 NC5BZGRyIFtTdWJuZXRNYXNrSW5kZXhdICYgQml0TWFzaykgIT0NCj4gPiAwKSB7DQo+ID4gKyAg ICAgICAgUHJlZml4TGVuZ3RoICsrOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg IEdvdFByZWZpeExlbmd0aCA9IFRSVUU7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg IH0NCj4gPiArICAgICAgQml0TWFzayA9IEJpdE1hc2sgPj4gMTsNCj4gPiArICAgIH07DQo+ID4g KyAgICBTdWJuZXRNYXNrSW5kZXggKys7DQo+ID4gKyAgfTsNCj4gPiArICBJbnN0YW5jZS0+U3Vi bmV0UHJlZml4TGVuZ3RoID0gUHJlZml4TGVuZ3RoOw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZXRzIHRo ZSBzdWJuZXQgaW5mb3JtYXRpb24gb2YgdGhpcyBUQ1A2IGluc3RhbmNlLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICAgICAgICAgICAgSW1hZ2VIYW5kbGUgIEVGSSBoYW5kbGUgd2l0aCB0aGlz IGltYWdlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgICBJbnN0YW5jZSAgSW5zdGFuY2Ug b2YgTmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKyAgQHJldHZhbCBFRklfU1RBVFVTICAgIEdldCBz dWJuZXQgaW5mb3JtYXRpb24gc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXJ3aXNl ICAgICBGYWlsIHRvIGdldCBzdWJuZXQgaW5mb3JtYXRpb24uDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtUY3A2R2V0U3VibmV0SW5mbyAoDQo+ID4gKyAgSU4g RUZJX0hBTkRMRSBJbWFnZUhhbmRsZSwNCj4gPiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZFUl9O RVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTCAqSW5zdGFuY2UNCj4gPiArKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgRUZJX1RDUDZfUFJPVE9DT0wgKlRjcDY7DQo+ ID4gKyAgRUZJX0lQNl9NT0RFX0RBVEEgSXBNb2RlZGF0YTsNCj4gPiArDQo+ID4gKyAgaWYgKElu c3RhbmNlID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ID4gKyAgfQ0KPiA+ICsgIFRjcDYgPSAoRUZJX1RDUDZfUFJPVE9DT0wNCj4gPiAqKUluc3Rh bmNlLT5OZXR3b3JrSW50ZXJmYWNlUHJvdG9jb2xJbmZvLk5ldHdvcmtQcm90b2NvbEludGVyZmFj ZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gVGNwNi0+R2V0TW9kZURhdGEgKFRjcDYsIE5VTEws IE5VTEwsICZJcE1vZGVkYXRhLCBOVUxMLA0KPiA+IE5VTEwpOw0KPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQ2FuJ3Qg Z2V0IElQIG1vZGUgZGF0YSBpbmZvcm1hdGlvblxuIikpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiArICB9DQo+ID4gKyAgaWYgKElwTW9kZWRhdGEuQWRkcmVzc0NvdW50ID09IDApIHsN Cj4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBObyBJUHY2IGFkZHJlc3MgY29uZmln dXJlZC5cbiIpKTsNCj4gPiArICB9DQo+ID4gKyAgaWYgKEluc3RhbmNlLT5TdWJuZXRBZGRySW5m b0lQdjYgIT0gTlVMTCkgew0KPiA+ICsgICAgRnJlZVBvb2wgKEluc3RhbmNlLT5TdWJuZXRBZGRy SW5mb0lQdjYpOw0KPiA+ICsgIH0NCj4gPiArICBJbnN0YW5jZS0+U3VibmV0QWRkckluZm9JUHY2 ID0gQWxsb2NhdGVaZXJvUG9vbA0KPiA+IChJcE1vZGVkYXRhLkFkZHJlc3NDb3VudCAqIHNpemVv ZiAoRUZJX0lQNl9BRERSRVNTX0lORk8pKTsNCj4gPiArICBpZiAoSW5zdGFuY2UtPlN1Ym5ldEFk ZHJJbmZvSVB2NiA9PSBOVUxMKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6 IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZmlyIElQdjYNCj4gPiBzdWJuZXQgYWRkcmVzcyBp bmZvcm1hdGlvblxuIikpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K PiA+ICsgIH0NCj4gPiArICBJbnN0YW5jZS0+U3VibmV0QWRkckluZm9JUHY2TnVtYmVyID0gSXBN b2RlZGF0YS5BZGRyZXNzQ291bnQ7DQo+ID4gKyAgQ29weU1lbSAoDQo+ID4gKyAgICAoVk9JRCAq KUluc3RhbmNlLT5TdWJuZXRBZGRySW5mb0lQdjYsDQo+ID4gKyAgICAoVk9JRCAqKSZJcE1vZGVk YXRhLkFkZHJlc3NMaXN0LA0KPiA+ICsgICAgSXBNb2RlZGF0YS5BZGRyZXNzQ291bnQgKiBzaXpl b2YgKEVGSV9JUDZfQUREUkVTU19JTkZPKQ0KPiA+ICsgICAgKTsNCj4gPiArICBGcmVlUG9vbCAo SXBNb2RlZGF0YS5BZGRyZXNzTGlzdCk7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzDQo+ID4g RUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiArICBp bnN0YW5jZSB3aXRoIHRoZSBnaXZlbg0KPiA+IEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktf SU5URVJGQUNFLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dIFRhcmdldE5ldHdvcmtJbnRlcmZh Y2UNCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRS4NCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgZm9yIGFsbA0KPiA+IEVGSV9S RURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFcy4NCj4gPiArDQo+ID4gKyAgQHJldHZh bCBOb24tTlVMTA0KPiA+IEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lO VEVSTkFMIGlzIHJldHVybmVkLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgIE5vbiBvZg0KPiA+ IEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMIGluc3RhbmNl IGlzDQo+ID4gcmV0dXJuZWQuDQo+ID4gKyoqLw0KPiA+ICtFRklfUkVERklTSF9ESVNDT1ZFUl9O RVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTCAqDQo+ID4gK0dldFRhcmdldE5ldHdvcmtJbnRlcmZh Y2VJbnRlcm5hbCAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRF UkZBQ0UNCj4gPiAqVGFyZ2V0TmV0d29ya0ludGVyZmFjZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4g KlRoaXNOZXR3b3JrSW50ZXJmYWNlOw0KPiA+ICsNCj4gPiArICBUaGlzTmV0d29ya0ludGVyZmFj ZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFM DQo+ICopR2V0Rmlyc3ROb2RlDQo+ID4gKCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVy ZmFjZSk7DQo+ID4gKyAgd2hpbGUgKFRSVUUpIHsNCj4gPiArICAgIGlmIChDb21wYXJlTWVtKChW T0lEICopJlRoaXNOZXR3b3JrSW50ZXJmYWNlLT5NYWNBZGRyZXNzLA0KPiA+ICZUYXJnZXROZXR3 b3JrSW50ZXJmYWNlLT5NYWNBZGRyZXNzLA0KPiA+IFRoaXNOZXR3b3JrSW50ZXJmYWNlLT5Id0Fk ZHJlc3NTaXplKSA9PSAwKSB7DQo+ID4gKyAgICAgIHJldHVybiBUaGlzTmV0d29ya0ludGVyZmFj ZTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChJc05vZGVBdEVuZCAoJm1FZmlSZWRmaXNoRGlz Y292ZXJOZXR3b3JrSW50ZXJmYWNlLA0KPiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZS0+RW50cnkp KSB7DQo+ID4gKyAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgVGhpc05l dHdvcmtJbnRlcmZhY2UgPQ0KPiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVS RkFDRV9JTlRFUk5BTA0KPiA+ICopR2V0TmV4dE5vZGUoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3 b3JrSW50ZXJmYWNlLA0KPiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZS0+RW50cnkpOw0KPiA+ICsg IH07DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFRoaXMgZnVuY3Rpb24gdmFsaWRhdGUgaWYgdGFyZ2V0IG5ldHdvcmsgaW50ZXJmYWNlIGlzIHJl YWR5IGZvcg0KPiBkaXNjb3ZlcmluZw0KPiA+ICsgIFJlZGZpc2ggc2VydmljZS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSBUYXJnZXROZXR3b3JrSW50ZXJmYWNlDQo+ID4gRUZJX1JFREZJU0hf RElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0UuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMIGZvciBhbGwNCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRX T1JLX0lOVEVSRkFDRXMuDQo+ID4gKyAgQHBhcmFtW2luXSBGbGFncyAgICAgICAgICAgICAgICAg ICBFRklfUkVERklTSF9ESVNDT1ZFUl9GTEFHDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgIFRhcmdldCBuZXR3b3JrIGludGVyZmFjZSBpcyByZWFkeSB0byB1c2UuDQo+ID4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgVGFyZ2V0IG5ldHdvcmsgaW50ZXJmYWNlIGlzIG5v dCByZWFkeSB0byB1c2UuDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1ZhbGlkYXRl VGFyZ2V0TmV0d29ya0ludGVyZmFjZSAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJf TkVUV09SS19JTlRFUkZBQ0UNCj4gPiAqVGFyZ2V0TmV0d29ya0ludGVyZmFjZSwNCj4gPiArICBJ TiBFRklfUkVERklTSF9ESVNDT1ZFUl9GTEFHIEZsYWdzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAq VGhpc05ldHdvcmtJbnRlcmZhY2U7DQo+ID4gKw0KPiA+ICsgIGlmIChJc0xpc3RFbXB0eSAoJm1F ZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlKSAmJg0KPiA+IFRhcmdldE5ldHdvcmtJ bnRlcmZhY2UgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4g PiArICB9DQo+ID4gKyAgaWYgKFRhcmdldE5ldHdvcmtJbnRlcmZhY2UgPT0gTlVMTCkgew0KPiA+ ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOyAvLyBSZXR1cm4gRUZJX1NVQ0NFU1MgaWYgbm8gbmV0 d29yayBpbnRlcmZhY2UgaXMNCj4gPiBzcGVjaWZpZWQuDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBUaGlzTmV0d29ya0ludGVyZmFjZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdP UktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKilHZXRGaXJzdE5vZGUoJm1FZmlSZWRmaXNoRGlz Y292ZXJOZXR3b3JrSW50ZXJmYWNlKTsNCj4gPiArICB3aGlsZSAoVFJVRSkgew0KPiA+ICsgICAg aWYgKENvbXBhcmVNZW0oKFZPSUQgKikmVGhpc05ldHdvcmtJbnRlcmZhY2UtPk1hY0FkZHJlc3Ms DQo+ID4gJlRhcmdldE5ldHdvcmtJbnRlcmZhY2UtPk1hY0FkZHJlc3MsDQo+ID4gVGhpc05ldHdv cmtJbnRlcmZhY2UtPkh3QWRkcmVzc1NpemUpID09IDApIHsNCj4gPiArICAgICAgYnJlYWs7DQo+ ID4gKyAgICB9DQo+ID4gKyAgICBpZiAoSXNOb2RlQXRFbmQgKCZtRWZpUmVkZmlzaERpc2NvdmVy TmV0d29ya0ludGVyZmFjZSwNCj4gPiAmVGhpc05ldHdvcmtJbnRlcmZhY2UtPkVudHJ5KSkgew0K PiA+ICsgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAg VGhpc05ldHdvcmtJbnRlcmZhY2UgPQ0KPiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JL X0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICopR2V0TmV4dE5vZGUoJm1FZmlSZWRmaXNoRGlzY292 ZXJOZXR3b3JrSW50ZXJmYWNlLA0KPiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZS0+RW50cnkpOw0K PiA+ICsgIH07DQo+ID4gKyAgaWYgKChGbGFncyAmIEVGSV9SRURGSVNIX0RJU0NPVkVSX1NTRFAp ICE9IDApIHsNCj4gPiArICAgIC8vIFZhbGlkYXRlIGlmIFVEUDQvNiBpcyBzdXBwb3J0ZWQgb24g dGhlIGdpdmVuIG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsgICAgLy8gU1NEUCBpcyBub3Qgc3Vw cG9ydGVkLg0KPiA+ICsNCj4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICB9DQo+ ID4gKyAgaWYNCj4gPiAoVGhpc05ldHdvcmtJbnRlcmZhY2UtDQo+ID5OZXR3b3JrSW50ZXJmYWNl UHJvdG9jb2xJbmZvLlByb3RvY29sQ29udHJvbGxlckhhbg0KPiA+IGRsZSA9PSBOVUxMKSB7DQo+ ID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOyAvLyBUaGUgcmVxdWlyZWQgcHJvdG9jb2wg b24gdGhpcyBuZXR3b3JrDQo+ID4gaW50ZXJmYWNlIGlzIG5vdCBmb3VuZC4NCj4gPiArICB9DQo+ ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMg ZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2UgaW5zdGFuY2UuDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgVUlOVE4gIE51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZSBp bnN0YW5jZXMuDQo+ID4gKyoqLw0KPiA+ICtVSU5UTg0KPiA+ICtOdW1iZXJPZk5ldHdvcmtJbnRl cmZhY2UgKFZPSUQpDQo+ID4gK3sNCj4gPiArICBVSU5UTiBOdW07DQo+ID4gKyAgRUZJX1JFREZJ U0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAqVGhpc05ldHdvcmtJ bnRlcmZhY2U7DQo+ID4gKw0KPiA+ICsgIGlmIChJc0xpc3RFbXB0eSAoJm1FZmlSZWRmaXNoRGlz Y292ZXJOZXR3b3JrSW50ZXJmYWNlKSkgew0KPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBOdW0gPSAxOw0KPiA+ICsgIFRoaXNOZXR3b3JrSW50ZXJmYWNlID0NCj4g PiAoRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gKilH ZXRGaXJzdE5vZGUNCj4gPiAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlKTsN Cj4gPiArICB3aGlsZSAoVFJVRSkgew0KPiA+ICsgICAgaWYgKElzTm9kZUF0RW5kICgmbUVmaVJl ZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNl LT5FbnRyeSkpIHsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBUaGlz TmV0d29ya0ludGVyZmFjZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5U RVJGQUNFX0lOVEVSTkFMDQo+ID4gKilHZXROZXh0Tm9kZSgmbUVmaVJlZGZpc2hEaXNjb3Zlck5l dHdvcmtJbnRlcmZhY2UsDQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNlLT5FbnRyeSk7DQo+ID4g KyAgICBOdW0gKys7DQo+ID4gKyAgfTsNCj4gPiArICByZXR1cm4gTnVtOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgIElQIHZlcnNpb24g c3VwcG9ydGVkIG9uIHRoaXMNCj4gPiArICBuZXR3b2VrIGludGVyZmFjZS4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgICBUaGlzTmV0d29ya0ludGVyZmFjZQ0KPiA+IEVGSV9SRURGSVNIX0RJ U0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg VFJVRSAgSXMgSVB2Niwgb3RoZXJ3aXNlIElQdjQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9P TEVBTg0KPiA+ICtDaGVja0lzSXBWZXJzaW9uNiAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElT Q09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAqVGhpc05ldHdvcmtJbnRlcmZh Y2UNCj4gPiArKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKFRoaXNOZXR3b3JrSW50ZXJmYWNlLT5OZXR3 b3JrUHJvdG9jb2xUeXBlID09IFByb3RvY29sVHlwZVRjcDYpIHsNCj4gPiArICAgIHJldHVybiBU UlVFOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZGlzY292ZXIgUmVkZmlzaCBzZXJ2aWNlIHRocm91 Z2ggU01CSU9TIGhvc3QgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIElu c3RhbmNlDQo+ID4gRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5BTF9JTlNUQU5DRQ0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICBSZWRmaXNoIHNlcnZpY2UgaXMg ZGlzY292ZXJlZCB0aHJvdWdoDQo+ID4gU01CSU9TIEhvc3QgaW50ZXJmYWNlLg0KPiA+ICsgIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgIEZhaWwgdG8gZGlzY292ZXIgUmVkZmlzaCBzZXJ2aWNl IHRocm91Z2h0DQo+ID4gU01CSU9TIGhvc3QgaW50ZXJmYWNlDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArRUZJX1NUQVRVUw0KPiA+ICtEaXNjb3ZlclJlZGZpc2hIb3N0SW50ZXJmYWNlIChJTg0KPiA+ IEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxfSU5TVEFOQ0UgKkluc3RhbmNlKQ0KPiA+ ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gKyAgUkVERklTSF9PVkVSX0lQX1BS T1RPQ09MX0RBVEEgKkRhdGE7DQo+ID4gKyAgUkVERklTSF9JTlRFUkZBQ0VfREFUQSAgKkRldmlj ZURlc2NyaXB0b3I7DQo+ID4gKyAgQ0hBUjggVXVpZFN0cltzaXplb2YiMDAwMDAwMDAtMDAwMC0w MDAwLTAwMDAtMDAwMDAwMDAwMDAwIiArIDFdOw0KPiA+ICsgIENIQVIxNiBJcHY2U3RyIFtzaXpl b2YiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIiArIDFdOw0KPiA+ICsg IENIQVI4IFJlZGZpc2hTZXJ2aWNlTG9jYXRlU3RyDQo+IFtzaXplb2YiZmZmZjpmZmZmOmZmZmY6 ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIiArIDFdOw0KPiA+ICsgIFVJTlROIFN0clNpemU7DQo+ ID4gKyAgVUlOVE4gTWFjQ29tcGFyZVN0c3R1czsNCj4gPiArICBCT09MRUFOIElzSHR0cHM7DQo+ ID4gKw0KPiA+ICsgIERhdGEgPSBOVUxMOw0KPiA+ICsgIERldmljZURlc2NyaXB0b3IgPSBOVUxM Ow0KPiA+ICsNCj4gPiArICBpZiAobVNtYmlvcyA9PSBOVUxMKSB7DQo+ID4gKyAgICBTdGF0dXMg PSBnQlMtPkxvY2F0ZVByb3RvY29sKCZnRWZpU21iaW9zUHJvdG9jb2xHdWlkLCBOVUxMLCAoVk9J RA0KPiA+ICoqKSZtU21iaW9zKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKyAg U3RhdHVzID0gUmVkZmlzaEdldEhvc3RJbnRlcmZhY2VQcm90b2NvbERhdGEgKG1TbWJpb3MsDQo+ ID4gJkRldmljZURlc2NyaXB0b3IsICZEYXRhKTsgLy8gU2VhcmNoIGZvciBTTUJJT1MgdHlwZSA0 MmgNCj4gPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSAmJiBEYXRhICE9IE5VTEwgJiYgRGV2 aWNlRGVzY3JpcHRvciAhPSBOVUxMKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gQ2hjZWNr IGlmIHdlIGNhbiByZWFjaCBvdXQgUmVkZmlzaCBzZXJ2aWNlIHVzaW5nIHRoaXMgbmV0d29yaw0K PiA+IGludGVyZmFjZS4NCj4gPiArICAgIC8vIENoZWNrIHdpdGggTUFDIGFkZHJlc3MgdXNpbmcg RGV2aWNlIERlc2Nyb3B0b3IgRGF0YSBEZXZpY2UgVHlwZQ0KPiA+IDA0IGFuZCBUeXBlIDA1Lg0K PiA+ICsgICAgLy8gVGhvc2UgdHdvIHR5cGVzIG9mIFJlZGZpc2ggaG9zdCBpbnRlcmZhY2UgZGV2 aWNlIGhhcyBNQUMNCj4gPiBpbmZvcm1hdGlvbi4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBpZiAo RGV2aWNlRGVzY3JpcHRvci0+RGV2aWNlVHlwZSA9PQ0KPiA+IFJFREZJU0hfSE9TVF9JTlRFUkZB Q0VfREVWSUNFX1RZUEVfUENJX1BDSUVfVjIpIHsNCj4gPiArICAgICAgTWFjQ29tcGFyZVN0c3R1 cyA9DQo+ID4gQ29tcGFyZU1lbSgmSW5zdGFuY2UtPk5ldHdvcmtJbnRlcmZhY2UtPk1hY0FkZHJl c3MsDQo+ID4gJkRldmljZURlc2NyaXB0b3ItPkRldmljZURlc2NyaXB0b3IuUGNpUGNpZURldmlj ZVYyLk1hY0FkZHJlc3MsIDYpOw0KPiA+ICsgICAgfSBlbHNlIGlmIChEZXZpY2VEZXNjcmlwdG9y LT5EZXZpY2VUeXBlID09DQo+ID4gUkVERklTSF9IT1NUX0lOVEVSRkFDRV9ERVZJQ0VfVFlQRV9V U0JfVjIpew0KPiA+ICsgICAgICBNYWNDb21wYXJlU3RzdHVzID0NCj4gPiBDb21wYXJlTWVtKCZJ bnN0YW5jZS0+TmV0d29ya0ludGVyZmFjZS0+TWFjQWRkcmVzcywNCj4gPiAmRGV2aWNlRGVzY3Jp cHRvci0+RGV2aWNlRGVzY3JpcHRvci5Vc2JEZXZpY2VWMi5NYWNBZGRyZXNzLCA2KTsNCj4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gKyAg ICB9DQo+ID4gKyAgICBpZiAoTWFjQ29tcGFyZVN0c3R1cyAhPSAwKSB7DQo+ID4gKyAgICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKERh dGEtPlJlZGZpc2hTZXJ2aWNlSXBBZGRyZXNzRm9ybWF0ID09IDEpIHsNCj4gPiArICAgICAgSVA0 X0NPUFlfQUREUkVTUyAoKFZPSUQgKikmSW5zdGFuY2UtPlRhcmdldElwQWRkcmVzcy52NCwgKFZP SUQNCj4gPiAqKURhdGEtPlJlZGZpc2hTZXJ2aWNlSXBBZGRyZXNzKTsNCj4gPiArICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgIElQNl9DT1BZX0FERFJFU1MgKChWT0lEICopJkluc3RhbmNlLT5UYXJn ZXRJcEFkZHJlc3MudjYsIChWT0lEDQo+ID4gKilEYXRhLT5SZWRmaXNoU2VydmljZUlwQWRkcmVz cyk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKEluc3RhbmNlLT5Ib3N0SW50ZlZh bGlkYXRpb24pIHsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiJWE6U2VuZCBVUG5Q IHVuaWNhc3QgU1NEUCB0byB2YWxpZGF0ZQ0KPiA+IHRoaXMgUmVkZmlzaCBIb3N0IEludGVyZmFj ZSBpcyBub3Qgc3VwcG9ydGVkLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gKyAgICAgIFN0YXR1 cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIC8vIEFkZCB0aGlzIGlzdGFuY2UgdG8gbGlzdCB3aXRob3V0IGRldGlhbCBpbmZv cm1hdGlvbiBvZiBSZWRmaXNoDQo+ID4gKyAgICAgIC8vIHNlcnZpY2UuDQo+ID4gKyAgICAgIC8v DQo+ID4gKyAgICAgIElzSHR0cHMgPSBGQUxTRTsNCj4gPiArICAgICAgaWYgKERhdGEtPlJlZGZp c2hTZXJ2aWNlSXBQb3J0ID09IDQ0Mykgew0KPiA+ICsgICAgICAgIElzSHR0cHMgPSBUUlVFOw0K PiA+ICsgICAgICB9DQo+ID4gKyAgICAgIFN0clNpemUgPSBzaXplb2YoVXVpZFN0cik7DQo+ID4g KyAgICAgIEFzY2lpU1ByaW50KFV1aWRTdHIsIFN0clNpemUsICIlZyIsICZEYXRhLT5TZXJ2aWNl VXVpZCk7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIEdlbmVyYXRlIFJlZGZpc2ggc2Vy dmljZSBsb2NhdGlvbiBzdHJpbmcuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIGlmIChEYXRh LT5SZWRmaXNoU2VydmljZUlwQWRkcmVzc0Zvcm1hdCA9PQ0KPiA+IFJFREZJU0hfSE9TVF9JTlRF UkZBQ0VfSE9TVF9JUF9BRERSRVNTX0ZPUk1BVF9JUDYpIHsNCj4gPiArICAgICAgICBOZXRMaWJJ cDZUb1N0cigoSVB2Nl9BRERSRVNTICopJkRhdGEtPlJlZGZpc2hTZXJ2aWNlSXBBZGRyZXNzLA0K PiA+IElwdjZTdHIsIHNpemVvZiAoSXB2NlN0cikpOw0KPiA+ICsgICAgICAgIGlmIChEYXRhLT5S ZWRmaXNoU2VydmljZUlwUG9ydCA9PSAwIHx8IElzSHR0cHMgPT0gVFJVRSkgew0KPiA+ICsgICAg ICAgICAgICBBc2NpaVNQcmludFVuaWNvZGVGb3JtYXQgKA0KPiA+ICsgICAgICAgICAgICAgIFJl ZGZpc2hTZXJ2aWNlTG9jYXRlU3RyLA0KPiA+ICsgICAgICAgICAgICAgIHNpemVvZiAoUmVkZmlz aFNlcnZpY2VMb2NhdGVTdHIpLA0KPiA+ICsgICAgICAgICAgICAgIEwiJXMiLA0KPiA+ICsgICAg ICAgICAgICAgIElwdjZTdHINCj4gPiArICAgICAgICAgICAgKTsNCj4gPiArICAgICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgICAgICBBc2NpaVNQcmludFVuaWNvZGVGb3JtYXQoDQo+ID4gKyAg ICAgICAgICAgICAgUmVkZmlzaFNlcnZpY2VMb2NhdGVTdHIsDQo+ID4gKyAgICAgICAgICAgICAg c2l6ZW9mIChSZWRmaXNoU2VydmljZUxvY2F0ZVN0ciksDQo+ID4gKyAgICAgICAgICAgICAgTCJb JXNdOiVkIiwNCj4gPiArICAgICAgICAgICAgICBJcHY2U3RyLA0KPiA+ICsgICAgICAgICAgICAg IERhdGEtPlJlZGZpc2hTZXJ2aWNlSXBQb3J0DQo+ID4gKyAgICAgICAgICAgICk7DQo+ID4gKyAg ICAgICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIGlmIChEYXRhLT5SZWRm aXNoU2VydmljZUlwUG9ydCA9PSAwIHx8IElzSHR0cHMgPT0gVFJVRSkgew0KPiA+ICsgICAgICAg ICAgQXNjaWlTUHJpbnQoDQo+ID4gKyAgICAgICAgICAgIFJlZGZpc2hTZXJ2aWNlTG9jYXRlU3Ry LA0KPiA+ICsgICAgICAgICAgICBzaXplb2YgKFJlZGZpc2hTZXJ2aWNlTG9jYXRlU3RyKSwNCj4g PiArICAgICAgICAgICAgIiVkLiVkLiVkLiVkIiwNCj4gPiArICAgICAgICAgICAgRGF0YS0+UmVk ZmlzaFNlcnZpY2VJcEFkZHJlc3MgWzBdLA0KPiA+ICsgICAgICAgICAgICBEYXRhLT5SZWRmaXNo U2VydmljZUlwQWRkcmVzcyBbMV0sDQo+ID4gKyAgICAgICAgICAgIERhdGEtPlJlZGZpc2hTZXJ2 aWNlSXBBZGRyZXNzIFsyXSwNCj4gPiArICAgICAgICAgICAgRGF0YS0+UmVkZmlzaFNlcnZpY2VJ cEFkZHJlc3MgWzNdDQo+ID4gKyAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgICAgIEFzY2lpU1ByaW50KA0KPiA+ICsgICAgICAgICAgICBSZWRmaXNoU2Vy dmljZUxvY2F0ZVN0ciwNCj4gPiArICAgICAgICAgICAgc2l6ZW9mIChSZWRmaXNoU2VydmljZUxv Y2F0ZVN0ciksDQo+ID4gKyAgICAgICAgICAgICIlZC4lZC4lZC4lZDolZCIsDQo+ID4gKyAgICAg ICAgICAgIERhdGEtPlJlZGZpc2hTZXJ2aWNlSXBBZGRyZXNzIFswXSwNCj4gPiArICAgICAgICAg ICAgRGF0YS0+UmVkZmlzaFNlcnZpY2VJcEFkZHJlc3MgWzFdLA0KPiA+ICsgICAgICAgICAgICBE YXRhLT5SZWRmaXNoU2VydmljZUlwQWRkcmVzcyBbMl0sDQo+ID4gKyAgICAgICAgICAgIERhdGEt PlJlZGZpc2hTZXJ2aWNlSXBBZGRyZXNzIFszXSwNCj4gPiArICAgICAgICAgICAgRGF0YS0+UmVk ZmlzaFNlcnZpY2VJcFBvcnQNCj4gPiArICAgICAgICAgICAgKTsNCj4gPiArICAgICAgICB9DQo+ ID4gKyAgICAgICB9DQo+ID4gKyAgICAgIFN0YXR1cyA9IEFkZEFuZFNpZ25hbE5ld1JlZGZpc2hT ZXJ2aWNlICgNCj4gPiArICAgICAgICAgICAgSW5zdGFuY2UsDQo+ID4gKyAgICAgICAgICAgIE5V TEwsDQo+ID4gKyAgICAgICAgICAgIFJlZGZpc2hTZXJ2aWNlTG9jYXRlU3RyLA0KPiA+ICsgICAg ICAgICAgICBVdWlkU3RyLA0KPiA+ICsgICAgICAgICAgICBOVUxMLA0KPiA+ICsgICAgICAgICAg ICBOVUxMLA0KPiA+ICsgICAgICAgICAgICBOVUxMLA0KPiA+ICsgICAgICAgICAgICBOVUxMLA0K PiA+ICsgICAgICAgICAgICBJc0h0dHBzDQo+ID4gKyAgICAgICAgICAgICk7DQo+ID4gKyAgICB9 DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFRoZSBmdW5jdGlvbiBhZGRzIGEgbmV3IGZvdW5kIFJlZGZpc2ggc2VydmljZSB0 byBpbnRlcm5hbCBsaXN0IGFuZA0KPiA+ICsgIG5vdGlmeSBjbGllbnQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEluc3RhbmNlDQo+ID4gRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5B TF9JTlNUQU5DRS4NCj4gPiArICBAcGFyYW1baW5dICBSZWRmaXNoVmVyc2lvbiAgICAgICAgUmVk ZmlzaCB2ZXJzaW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFJlZGZpc2hMb2NhdGlvbiAgICAgICBS ZWRmaXNoIGxvY2F0aW9uLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFV1aWQgICAgICAgICAgICAgICAg ICBTZXJ2aWNlIFVVSUQgc3RyaW5nLg0KPiA+ICsgIEBwYXJhbVtpbl0gIE9zICAgICAgICAgICAg ICAgICAgICBPUyBzdHJpbmcuDQo+ID4gKyAgQHBhcmFtW2luXSAgT3NWZXIgICAgICAgICAgICAg ICAgIE9TIHZlcnNpb24gc3RyaW5nLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFByb2R1Y3QgICAgICAg ICAgICAgICBQcm9kdWN0IHN0cmluZy4NCj4gPiArICBAcGFyYW1baW5dICBQcm9kdWN0VmVyICAg ICAgICAgICAgUHJvZHVjdCB2ZXJpc29uIHN0cmluZy4NCj4gPiArICBAcGFyYW1baW5dICBVc2VI dHRwcyAgICAgICAgICAgICAgUmVkZmlzaCBzZXJ2aWNlIHJlcXVpcmVzIHNlY3VyZWQNCj4gPiBj b25uZWN0aW9uLg0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBSZWRm aXNoIHNlcnZpY2UgaXMgYWRkZWQgdG8gbGlzdA0KPiA+IHN1Y2Nlc3NmdWxseS4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0FkZEFuZFNpZ25hbE5ld1JlZGZpc2hTZXJ2 aWNlICgNCj4gPiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0lOU1RBTkNF ICpJbnN0YW5jZSwNCj4gPiArICBJTiBVSU5UTiAqUmVkZmlzaFZlcnNpb24gT1BUSU9OQUwsDQo+ ID4gKyAgSU4gQ0hBUjggKlJlZGZpc2hMb2NhdGlvbiBPUFRJT05BTCwNCj4gPiArICBJTiBDSEFS OCAqVXVpZCAgT1BUSU9OQUwsDQo+ID4gKyAgSU4gQ0hBUjggKk9zICBPUFRJT05BTCwNCj4gPiAr ICBJTiBDSEFSOCAqT3NWZXIgIE9QVElPTkFMLA0KPiA+ICsgIElOIENIQVI4ICpQcm9kdWN0ICBP UFRJT05BTCwNCj4gPiArICBJTiBDSEFSOCAqUHJvZHVjdFZlciAgT1BUSU9OQUwsDQo+ID4gKyAg SU4gQk9PTEVBTiBVc2VIdHRwcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEJPT0xFQU4gTmV3 Rm91bmQ7DQo+ID4gKyAgQk9PTEVBTiBJbmZvUmVmcmVzaDsNCj4gPiArICBCT09MRUFOIFJlc3RF eE9wZW5lZDsNCj4gPiArICBCT09MRUFOIERlbGV0ZVJlc3RFeDsNCj4gPiArICBFRklfU1RBVFVT IFN0YXR1czsNCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0xJU1QgKkRp c2NvdmVyZWRMaXN0Ow0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5TVEFOQ0UgKkRp c2NvdmVyZWRJbnN0YW5jZTsNCj4gPiArICBDSEFSMTYgKkNoYXIxNlV1aWQ7DQo+ID4gKyAgRUZJ X1JFU1RfRVhfUFJPVE9DT0wgKlJlc3RFeDsNCj4gPiArICBFRklfUkVTVF9FWF9IVFRQX0NPTkZJ R19EQVRBICpSZXN0RXhIdHRwQ29uZmlnRGF0YTsNCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZF Ul9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICpOZXR3b3JrSW50ZXJmYWNlOw0KPiA+ ICsNCj4gPiArICBOZXdGb3VuZCA9IFRSVUU7DQo+ID4gKyAgSW5mb1JlZnJlc2ggPSBGQUxTRTsN Cj4gPiArICBDaGFyMTZVdWlkID0gTlVMTDsNCj4gPiArICBSZXN0RXhPcGVuZWQgPSBGQUxTRTsN Cj4gPiArICBEZWxldGVSZXN0RXggPSBGQUxTRTsNCj4gPiArDQo+ID4gKyAgREVCVUcgKChERUJV R19JTkZPLCIlYTpBZGQgdGhpcyBpbnN0YW5jZSB0byBSZWRmaXNoIGluc3RhbmNlIGxpc3QuXG4i LA0KPiA+IF9fRlVOQ1RJT05fXykpOw0KPiA+ICsNCj4gPiArICBpZiAoVXVpZCAhPSBOVUxMKSB7 DQo+ID4gKyAgICBDaGFyMTZVdWlkID0gKENIQVIxNiAqKUFsbG9jYXRlWmVyb1Bvb2woQXNjaWlT dHJTaXplKChjb25zdCBDSEFSOA0KPiA+ICopVXVpZCkgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ID4g KyAgICBBc2NpaVN0clRvVW5pY29kZVN0clMgKChjb25zdCBDSEFSOCAqKVV1aWQsIENoYXIxNlV1 aWQsDQo+ID4gQXNjaWlTdHJTaXplKChjb25zdCBDSEFSOCAqKVV1aWQpICogc2l6ZW9mKENIQVIx NikpOw0KPiA+ICsgIH0NCj4gPiArICBEaXNjb3ZlcmVkTGlzdCA9IE5VTEw7DQo+ID4gKyAgRGlz Y292ZXJlZEluc3RhbmNlID0gTlVMTDsNCj4gPiArICBSZXN0RXhIdHRwQ29uZmlnRGF0YSA9IE5V TEw7DQo+ID4gKw0KPiA+ICsgIE5ldHdvcmtJbnRlcmZhY2UgPSBJbnN0YW5jZS0+TmV0d29ya0lu dGVyZmFjZTsNCj4gPiArICBpZiAoIUlzTGlzdEVtcHR5ICgmbVJlZGZpc2hJbnN0YW5jZUxpc3Qp KSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gSXMgdGhpcyBhIGR1cGxpY2F0ZSByZWRmaXNo IHNlcnZpY2UuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgRGlzY292ZXJlZExpc3QgPSAoRUZJX1JF REZJU0hfRElTQ09WRVJFRF9JTlRFUk5BTF9MSVNUDQo+ID4gKilHZXRGaXJzdE5vZGUgKCZtUmVk ZmlzaEluc3RhbmNlTGlzdCk7DQo+ID4gKyAgICBOZXdGb3VuZCA9IEZBTFNFOw0KPiA+ICsgICAg ZG8gew0KPiA+ICsgICAgICBpZiAoQ2hhcjE2VXVpZCA9PSBOVUxMIHx8DQo+ID4gRGlzY292ZXJl ZExpc3QtPkluc3RhbmNlLT5JbmZvcm1hdGlvbi5VdWlkID09IE5VTEwpIHsNCj4gPiArICAgICAg ICAvLw0KPiA+ICsgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgUmVkZmlzaCBpbnN0YW5jZSBhbHJl YWR5IGZvdW5kIHVzaW5nIElQDQo+IGFkZHJyZXNzLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAg ICAgICAgaWYgKCFDaGVja0lzSXBWZXJzaW9uNihOZXR3b3JrSW50ZXJmYWNlKSkgew0KPiA+ICsg ICAgICAgICAgaWYgKENvbXBhcmVNZW0gKChWT0lEICopJkluc3RhbmNlLT5UYXJnZXRJcEFkZHJl c3MudjQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRA0KPiA+ICopJkRpc2NvdmVy ZWRMaXN0LT5JbnN0YW5jZS0+SW5mb3JtYXRpb24uUmVkZmlzaEhvc3RJcEFkZHJlc3MudjQsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9JUHY0X0FERFJFU1MpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICApID09IDApDQo+ID4gKyAgICAgICAgICB7DQo+ID4gKyAg ICAgICAgICAgIERpc2NvdmVyZWRJbnN0YW5jZSA9IERpc2NvdmVyZWRMaXN0LT5JbnN0YW5jZTsN Cj4gPiArICAgICAgICAgICAgaWYgKERpc2NvdmVyZWRMaXN0LT5JbnN0YW5jZS0+SW5mb3JtYXRp b24uVXVpZCA9PSBOVUxMICYmDQo+ID4gKyAgICAgICAgICAgICAgICBDaGFyMTZVdWlkICE9IE5V TEwpIHsNCj4gPiArICAgICAgICAgICAgICBJbmZvUmVmcmVzaCA9IFRSVUU7DQo+ID4gKyAgICAg ICAgICAgICAgRGlzY292ZXJlZEluc3RhbmNlID0gRGlzY292ZXJlZExpc3QtPkluc3RhbmNlOw0K PiA+ICsgICAgICAgICAgICAgIERFQlVHKChERUJVR19JTkZPLCIqKiogVGhpcyBSZWRmaXNoIFNl cnZpY2UNCj4gPiBpbmZvcm1hdGlvbiByZWZyZXNoICoqKlxuIikpOw0KPiA+ICsgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICBpZiAoQ29tcGFyZU1lbSAoKFZPSUQgKikmSW5z dGFuY2UtPlRhcmdldElwQWRkcmVzcy52NiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIChW T0lEDQo+ID4gKikmRGlzY292ZXJlZExpc3QtPkluc3RhbmNlLT5JbmZvcm1hdGlvbi5SZWRmaXNo SG9zdElwQWRkcmVzcy52NiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJ X0lQdjZfQUREUkVTUykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICkgPT0gMCkNCj4gPiAr ICAgICAgICAgIHsNCj4gPiArICAgICAgICAgICAgRGlzY292ZXJlZEluc3RhbmNlID0gRGlzY292 ZXJlZExpc3QtPkluc3RhbmNlOw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAg ICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg Ly8NCj4gPiArICAgICAgICAvLyBDaGVjayBpZiB0aGlzIFJlZGZpc2ggaW5zdGFuY2UgYWxyZWFk eSBmb3VuZCB1c2luZyBVVUlELg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgaWYgKFN0 ckNtcCgoY29uc3QgQ0hBUjE2ICopQ2hhcjE2VXVpZCwgKGNvbnN0IENIQVIxNg0KPiA+ICopRGlz Y292ZXJlZExpc3QtPkluc3RhbmNlLT5JbmZvcm1hdGlvbi5VdWlkKSA9PSAwKSB7DQo+ID4gKyAg ICAgICAgICBEaXNjb3ZlcmVkSW5zdGFuY2UgPSBEaXNjb3ZlcmVkTGlzdC0+SW5zdGFuY2U7DQo+ ID4gKyAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0NCj4gPiAr ICAgICAgaWYgKElzTm9kZUF0RW5kICgmbVJlZGZpc2hJbnN0YW5jZUxpc3QsDQo+ID4gJkRpc2Nv dmVyZWRMaXN0LT5OZXh0SW5zdGFuY2UpKSB7DQo+ID4gKyAgICAgICAgTmV3Rm91bmQgPSBUUlVF Ow0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIERpc2NvdmVy ZWRMaXN0ID0gKEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxfTElTVA0KPiA+ICopR2V0 TmV4dE5vZGUgKCZtUmVkZmlzaEluc3RhbmNlTGlzdCwgJkRpc2NvdmVyZWRMaXN0LT5OZXh0SW5z dGFuY2UpOw0KPiA+ICsgICAgfSB3aGlsZSAoVFJVRSk7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChO ZXdGb3VuZCB8fCBJbmZvUmVmcmVzaCkgew0KPiA+ICsgICAgaWYgKCFJbmZvUmVmcmVzaCkgew0K PiA+ICsgICAgICBEaXNjb3ZlcmVkTGlzdCA9IChFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOVEVS TkFMX0xJU1QNCj4gPiAqKUFsbG9jYXRlWmVyb1Bvb2woc2l6ZW9mKEVGSV9SRURGSVNIX0RJU0NP VkVSRURfSU5URVJOQUxfTElTVCkpOw0KPiA+ICsgICAgICBpZiAoRGlzY292ZXJlZExpc3QgPT0g TlVMTCkgew0KPiA+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgICBJbml0aWFsaXplTGlzdEhlYWQgKCZEaXNjb3ZlcmVkTGlzdC0+ TmV4dEluc3RhbmNlKTsNCj4gPiArICAgICAgRGlzY292ZXJlZEluc3RhbmNlID0gKEVGSV9SRURG SVNIX0RJU0NPVkVSRURfSU5TVEFOQ0UNCj4gPiAqKUFsbG9jYXRlWmVyb1Bvb2woc2l6ZW9mKEVG SV9SRURGSVNIX0RJU0NPVkVSRURfSU5TVEFOQ0UpKTsNCj4gPiArICAgICAgaWYgKERpc2NvdmVy ZWRJbnN0YW5jZSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgRnJlZVBvb2wgKChWT0lEICopRGlz Y292ZXJlZExpc3QpOw0KPiA+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCIq KiogUmVkZmlzaCBTZXJ2aWNlIEluZm9ybWF0aW9uICoqKlxuIikpOw0KPiA+ICsNCj4gPiArICAg IERpc2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uVXNlSHR0cHMgPSBVc2VIdHRwczsNCj4g PiArICAgIGlmIChSZWRmaXNoVmVyc2lvbiAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIERpc2NvdmVy ZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uUmVkZmlzaFZlcnNpb24gPSAqUmVkZmlzaFZlcnNpb247 DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywiUmVkZmlzaCBzZXJ2aWNlIHZlcnNpb246 ICVkLlxuIiwNCj4gPiBEaXNjb3ZlcmVkSW5zdGFuY2UtPkluZm9ybWF0aW9uLlJlZGZpc2hWZXJz aW9uKSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBpZiAoUmVkZmlzaExvY2F0aW9uICE9IE5VTEwp IHsNCj4gPiArICAgICAgRGlzY292ZXJlZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5Mb2NhdGlvbiA9 IChDSEFSMTYNCj4gPiAqKUFsbG9jYXRlUG9vbChBc2NpaVN0clNpemUoKGNvbnN0IENIQVI4ICop UmVkZmlzaExvY2F0aW9uKSAqDQo+ID4gc2l6ZW9mKENIQVIxNikpOw0KPiA+ICsgICAgICBBc2Np aVN0clRvVW5pY29kZVN0clMgKChjb25zdCBDSEFSOCAqKVJlZGZpc2hMb2NhdGlvbiwNCj4gPiBE aXNjb3ZlcmVkSW5zdGFuY2UtPkluZm9ybWF0aW9uLkxvY2F0aW9uLCBBc2NpaVN0clNpemUoKGNv bnN0IENIQVI4DQo+ID4gKilSZWRmaXNoTG9jYXRpb24pICogc2l6ZW9mKENIQVIxNikpOw0KPiA+ ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sIlJlZGZpc2ggc2VydmljZSBsb2NhdGlvbjogJXMu XG4iLA0KPiA+IERpc2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uTG9jYXRpb24pKTsNCj4g PiArICAgIH0NCj4gPiArICAgIGlmIChVdWlkICE9IE5VTEwpIHsNCj4gPiArICAgICAgRGlzY292 ZXJlZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5VdWlkID0gKENIQVIxNg0KPiA+ICopQWxsb2NhdGVQ b29sKEFzY2lpU3RyU2l6ZSgoY29uc3QgQ0hBUjggKilVdWlkKSAqIHNpemVvZihDSEFSMTYpKTsN Cj4gPiArICAgICAgQXNjaWlTdHJUb1VuaWNvZGVTdHJTICgoY29uc3QgQ0hBUjggKilVdWlkLA0K PiA+IERpc2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uVXVpZCwgQXNjaWlTdHJTaXplKChj b25zdCBDSEFSOCAqKVV1aWQpDQo+ICoNCj4gPiBzaXplb2YoQ0hBUjE2KSk7DQo+ID4gKyAgICAg IERFQlVHICgoREVCVUdfSU5GTywiU2VydmljZSBVVUlEOiAlcy5cbiIsDQo+ID4gRGlzY292ZXJl ZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5VdWlkKSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBpZiAo T3MgIT0gTlVMTCkgew0KPiA+ICsgICAgICBEaXNjb3ZlcmVkSW5zdGFuY2UtPkluZm9ybWF0aW9u Lk9zID0gKENIQVIxNg0KPiA+ICopQWxsb2NhdGVQb29sKEFzY2lpU3RyU2l6ZSgoY29uc3QgQ0hB UjggKilPcykgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ID4gKyAgICAgIEFzY2lpU3RyVG9Vbmljb2Rl U3RyUyAoKGNvbnN0IENIQVI4ICopT3MsDQo+ID4gRGlzY292ZXJlZEluc3RhbmNlLT5JbmZvcm1h dGlvbi5PcywgQXNjaWlTdHJTaXplKChjb25zdCBDSEFSOCAqKU9zKSAqDQo+ID4gc2l6ZW9mKENI QVIxNikpOw0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sIlJlZGZpc2ggc2VydmljZSBP UzogJXMsIFZlcnNpb246JXMuXG4iLA0KPiA+IERpc2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRp b24uT3MsDQo+ID4gRGlzY292ZXJlZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5Pc1ZlcnNpb24pKTsN Cj4gPiArICAgIH0NCj4gPiArICAgIGlmIChPc1ZlciAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIERp c2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uT3NWZXJzaW9uID0gKENIQVIxNg0KPiA+ICop QWxsb2NhdGVQb29sKEFzY2lpU3RyU2l6ZSgoY29uc3QgQ0hBUjggKilPc1ZlcikgKiBzaXplb2Yo Q0hBUjE2KSk7DQo+ID4gKyAgICAgIEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoKGNvbnN0IENIQVI4 ICopT3NWZXIsDQo+ID4gRGlzY292ZXJlZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5Pc1ZlcnNpb24s IEFzY2lpU3RyU2l6ZSgoY29uc3QgQ0hBUjgNCj4gPiAqKU9zVmVyKSAqIHNpemVvZihDSEFSMTYp KTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChQcm9kdWN0ICE9IE5VTEwgJiYgUHJvZHVjdFZl ciAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIERpc2NvdmVyZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24u UHJvZHVjdCA9IChDSEFSMTYNCj4gPiAqKUFsbG9jYXRlUG9vbChBc2NpaVN0clNpemUoKGNvbnN0 IENIQVI4ICopUHJvZHVjdCkgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ID4gKyAgICAgIEFzY2lpU3Ry VG9Vbmljb2RlU3RyUyAoKGNvbnN0IENIQVI4ICopUHJvZHVjdCwNCj4gPiBEaXNjb3ZlcmVkSW5z dGFuY2UtPkluZm9ybWF0aW9uLlByb2R1Y3QsIEFzY2lpU3RyU2l6ZSgoY29uc3QgQ0hBUjgNCj4g PiAqKVByb2R1Y3QpICogc2l6ZW9mKENIQVIxNikpOw0KPiA+ICsgICAgICBEaXNjb3ZlcmVkSW5z dGFuY2UtPkluZm9ybWF0aW9uLlByb2R1Y3RWZXIgPSAoQ0hBUjE2DQo+ID4gKilBbGxvY2F0ZVBv b2woQXNjaWlTdHJTaXplKChjb25zdCBDSEFSOCAqKVByb2R1Y3RWZXIpICogc2l6ZW9mKENIQVIx NikpOw0KPiA+ICsgICAgICBBc2NpaVN0clRvVW5pY29kZVN0clMgKChjb25zdCBDSEFSOCAqKVBy b2R1Y3RWZXIsDQo+ID4gRGlzY292ZXJlZEluc3RhbmNlLT5JbmZvcm1hdGlvbi5Qcm9kdWN0VmVy LCBBc2NpaVN0clNpemUoKGNvbnN0IENIQVI4DQo+ID4gKilQcm9kdWN0VmVyKSAqIHNpemVvZihD SEFSMTYpKTsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCJSZWRmaXNoIHNlcnZpY2Ug cHJvZHVjdDogJXMsIFZlcnNpb246JXMuXG4iLA0KPiA+IERpc2NvdmVyZWRJbnN0YW5jZS0+SW5m b3JtYXRpb24uUHJvZHVjdCwNCj4gPiBEaXNjb3ZlcmVkSW5zdGFuY2UtPkluZm9ybWF0aW9uLlBy b2R1Y3RWZXIpKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoUmVkZmlzaExvY2F0 aW9uID09IE5VTEwpIHsNCj4gPiArICAgICAgLy8gVGhpcyBpcyB0aGUgUmVkZmlzaCByZXBvcnRl ZCBmcm9tIFNNQklPUyA0MmgNCj4gPiArICAgICAgLy8gd2l0aG91dCB2YWxpZGF0aW9uLg0KPiA+ ICsNCj4gPiArICAgICAgSVA0X0NPUFlfQUREUkVTUygoVk9JRA0KPiA+ICopJkRpc2NvdmVyZWRJ bnN0YW5jZS0+SW5mb3JtYXRpb24uUmVkZmlzaEhvc3RJcEFkZHJlc3MudjQsIChWT0lEDQo+ID4g KikmSW5zdGFuY2UtPlRhcmdldElwQWRkcmVzcy52NCk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBp ZiAoIUluZm9SZWZyZXNoKSB7DQo+ID4gKyAgICAgIERpc2NvdmVyZWRMaXN0LT5JbnN0YW5jZSA9 IERpc2NvdmVyZWRJbnN0YW5jZTsNCj4gPiArICAgICAgSW5zZXJ0VGFpbExpc3QoJm1SZWRmaXNo SW5zdGFuY2VMaXN0LA0KPiA+ICZEaXNjb3ZlcmVkTGlzdC0+TmV4dEluc3RhbmNlKTsNCj4gPiAr ICAgIH0NCj4gPiArICAgIERpc2NvdmVyZWRJbnN0YW5jZS0+U3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIGlmIChEaXNjb3ZlcmVkTGlzdCAhPSBOVUxMKSB7 DQo+ID4gKyAgICAgIERFQlVHKChERUJVR19JTkZPLCIqKiogVGhpcyBSZWRmaXNoIFNlcnZpY2Ug d2FzIGFscmVhZHkgZm91bmQNCj4gPiAqKipcbiIpKTsNCj4gPiArICAgICAgaWYgKERpc2NvdmVy ZWRJbnN0YW5jZS0+SW5mb3JtYXRpb24uVXVpZCAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgREVC VUcoKERFQlVHX0lORk8sIlNlcnZpY2UgVVVJRDogJXMuXG4iLA0KPiA+IERpc2NvdmVyZWRJbnN0 YW5jZS0+SW5mb3JtYXRpb24uVXVpZCkpOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAg ICAgIERFQlVHKChERUJVR19JTkZPLCJTZXJ2aWNlIFVVSUQ6IHVua25vd24uXG4iKSk7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKyAgaWYgKENoYXIxNlV1aWQgIT0g TlVMTCkgew0KPiA+ICsgICAgRnJlZVBvb2woKFZPSUQgKilDaGFyMTZVdWlkKTsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICsgIGlmIChOZXdGb3Vu ZCB8fCBJbmZvUmVmcmVzaCkgew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIEJ1aWxkIHVwIEVG SV9SRURGSVNIX0RJU0NPVkVSRURfTElTVCBpbiB0b2tlbi4NCj4gPiArICAgIC8vDQo+ID4gKyAg ICBJbnN0YW5jZS0+RGlzY292ZXJUb2tlbi0+RGlzY292ZXJMaXN0Lk51bWJlck9mU2VydmljZUZv dW5kID0gMTsNCj4gPiArICAgIEluc3RhbmNlLT5EaXNjb3ZlclRva2VuLT5EaXNjb3Zlckxpc3Qu UmVkZmlzaEluc3RhbmNlcyA9DQo+ID4gRGlzY292ZXJlZEluc3RhbmNlOw0KPiA+ICsgICAgRGlz Y292ZXJlZEluc3RhbmNlLT5TdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArICAgIGlmICghSW5m b1JlZnJlc2gpIHsNCj4gPiArICAgICAgU3RhdHVzID0gQ3JlYXRlUmVzdEV4SW5zdGFuY2UgKElu c3RhbmNlLCBJbnN0YW5jZS0+RGlzY292ZXJUb2tlbik7DQo+ID4gLy8gQ3JlYXRlIFJFU1QgRVgg Y2hpbGQuDQo+ID4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6Q2FuJ3QgY3JlYXRlIFJFU1QgRVggY2hpbGQNCj4g PiBpbnN0YW5jZS5cbiIsX19GVU5DVElPTl9fKSk7DQo+ID4gKyAgICAgICAgZ290byBPTl9FWElU Ow0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgg Ly8gQ29uZmlndXJlIGxvY2FsIGhvc3QgaW5mb3JtYXRpb24uDQo+ID4gKw0KPiA+IEluc3RhbmNl LT5EaXNjb3ZlclRva2VuLT5EaXNjb3Zlckxpc3QuUmVkZmlzaEluc3RhbmNlcy0NCj4gPkluZm9y bWF0aW9uLlJlZGZpcw0KPiA+IGhSZXN0RXhIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICZnRWZpUmVzdEV4UHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmUmVzdEV4LA0KPiA+ICsNCj4gPiBJbnN0YW5jZS0+TmV0d29ya0ludGVyZmFjZS0+T3BlbkRy aXZlckFnZW50SGFuZGxlLA0KPiA+ICsNCj4gPiBJbnN0YW5jZS0+TmV0d29ya0ludGVyZmFjZS0+ T3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVGSV9P UEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgRGVsZXRlUmVzdEV4 ID0gVFJVRTsNCj4gPiArICAgICAgICBnb3RvIEVSUk9SX0VYSVQ7DQo+ID4gKyAgICAgIH0NCj4g PiArICAgICAgUmVzdEV4T3BlbmVkID0gVFJVRTsNCj4gPiArICAgICAgUmVzdEV4SHR0cENvbmZp Z0RhdGEgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPiAoRUZJX1JFU1RfRVhfSFRUUF9D T05GSUdfREFUQSkpOw0KPiA+ICsgICAgICBpZiAoUmVzdEV4SHR0cENvbmZpZ0RhdGEgPT0gTlVM TCkgew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsg ICAgICAgIERlbGV0ZVJlc3RFeCA9IFRSVUU7DQo+ID4gKyAgICAgICAgZ290byBFWElUX0ZSRUVf Q09ORklHX0RBVEE7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgUmVzdEV4SHR0cENvbmZpZ0Rh dGEtPlNlbmRSZWNlaXZlVGltZW91dCA9IDUwMDA7DQo+ID4gKyAgICAgIFJlc3RFeEh0dHBDb25m aWdEYXRhLT5IdHRwQ29uZmlnRGF0YS5IdHRwVmVyc2lvbiA9DQo+ID4gSHR0cFZlcnNpb24xMTsN Cj4gPiArICAgICAgUmVzdEV4SHR0cENvbmZpZ0RhdGEtPkh0dHBDb25maWdEYXRhLkxvY2FsQWRk cmVzc0lzSVB2NiA9DQo+ID4gQ2hlY2tJc0lwVmVyc2lvbjYoTmV0d29ya0ludGVyZmFjZSk7DQo+ ID4gKyAgICAgIGlmIChSZXN0RXhIdHRwQ29uZmlnRGF0YS0+SHR0cENvbmZpZ0RhdGEuTG9jYWxB ZGRyZXNzSXNJUHY2KSB7DQo+ID4gKyAgICAgICAgUmVzdEV4SHR0cENvbmZpZ0RhdGEtPkh0dHBD b25maWdEYXRhLkFjY2Vzc1BvaW50LklQdjZOb2RlID0NCj4gPiBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKEVGSV9IVFRQdjZfQUNDRVNTX1BPSU5UKSk7DQo+ID4gKyAgICAgICAgaWYgKFJlc3RF eEh0dHBDb25maWdEYXRhLT5IdHRwQ29uZmlnRGF0YS5BY2Nlc3NQb2ludC5JUHY2Tm9kZQ0KPiA+ ID09IE5VTEwpIHsNCj4gPiArICAgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiA+ICsgICAgICAgICAgZ290byBFWElUX0ZSRUVfQ09ORklHX0RBVEE7DQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIFJlc3RFeEh0dHBDb25maWdE YXRhLT5IdHRwQ29uZmlnRGF0YS5BY2Nlc3NQb2ludC5JUHY0Tm9kZSA9DQo+ID4gQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mIChFRklfSFRUUHY0X0FDQ0VTU19QT0lOVCkpOw0KPiA+ICsgICAgICAg IGlmIChSZXN0RXhIdHRwQ29uZmlnRGF0YS0+SHR0cENvbmZpZ0RhdGEuQWNjZXNzUG9pbnQuSVB2 NE5vZGUNCj4gPiA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPiArICAgICAgICAgIGdvdG8gRVhJVF9GUkVFX0NPTkZJR19EQVRBOw0K PiA+ICsgICAgICAgIH0NCj4gPiArDQo+ID4gUmVzdEV4SHR0cENvbmZpZ0RhdGEtPkh0dHBDb25m aWdEYXRhLkFjY2Vzc1BvaW50LklQdjROb2RlLQ0KPiA+VXNlRGVmYXVsdEENCj4gPiBkZHJlc3Mg PSBUUlVFOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIFN0YXR1cyA9IFJlc3RFeC0+Q29uZmln dXJlICgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBSZXN0RXgsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgKEVGSV9SRVNUX0VYX0NPTkZJR19EQVRBKShVSU5UOA0KPiA+ICopUmVz dEV4SHR0cENvbmZpZ0RhdGENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJV R19FUlJPUiwiJWE6UkVTVCBFWCBjb25maWd1cmVkLi5cbiIsDQo+ID4gX19GVU5DVElPTl9fKSk7 DQo+ID4gKyAgICAgICAgRGVsZXRlUmVzdEV4ID0gVFJVRTsNCj4gPiArICAgICAgICBnb3RvIEVY SVRfRlJFRV9BTEw7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8g U2lnbmFsIGNsaWVudCwgY2xvc2UgUkVTVCBFWCBiZWZvcmUgc2lnbmFsaW5nIGNsaWVudC4NCj4g PiArICAgICAgLy8NCj4gPiArICAgICAgaWYgKFJlc3RFeE9wZW5lZCkgew0KPiA+ICsgICAgICAg IGdCUy0+Q2xvc2VQcm90b2NvbCgNCj4gPiArDQo+ID4gSW5zdGFuY2UtPkRpc2NvdmVyVG9rZW4t PkRpc2NvdmVyTGlzdC5SZWRmaXNoSW5zdGFuY2VzLQ0KPiA+SW5mb3JtYXRpb24uUmVkZmlzDQo+ ID4gaFJlc3RFeEhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICZnRWZpUmVzdEV4UHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgICAgSW5zdGFuY2UtPk5ldHdvcmtJbnRlcmZhY2UtPk9wZW5E cml2ZXJBZ2VudEhhbmRsZSwNCj4gPiArICAgICAgICAgICAgIEluc3RhbmNlLT5OZXR3b3JrSW50 ZXJmYWNlLT5PcGVuRHJpdmVyQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgKTsNCj4g PiArICAgICAgICBSZXN0RXhPcGVuZWQgPSBGQUxTRTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAg fQ0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5TaWduYWxFdmVudChJbnN0YW5jZS0+RGlzY292ZXJU b2tlbi0+RXZlbnQpOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAr ICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiJWE6Tm8gZXZlbnQgdG8gc2lnbmFsIVxuIiwNCj4g PiBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICtFWElU X0ZSRUVfQUxMOjsNCj4gPiArICBpZiAoUmVzdEV4SHR0cENvbmZpZ0RhdGEgIT0gTlVMTCAmJg0K PiA+IFJlc3RFeEh0dHBDb25maWdEYXRhLT5IdHRwQ29uZmlnRGF0YS5BY2Nlc3NQb2ludC5JUHY0 Tm9kZSAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9vbA0KPiA+IChSZXN0RXhIdHRwQ29uZmln RGF0YS0+SHR0cENvbmZpZ0RhdGEuQWNjZXNzUG9pbnQuSVB2NE5vZGUpOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gK0VYSVRfRlJFRV9DT05GSUdfREFUQTo7DQo+ID4gKyAgaWYgKFJlc3RFeEh0dHBD b25maWdEYXRhICE9IE5VTEwpIHsNCj4gPiArICAgIEZyZWVQb29sKChWT0lEICopUmVzdEV4SHR0 cENvbmZpZ0RhdGEpOw0KPiA+ICsgIH0NCj4gPiArICBpZiAoUmVzdEV4T3BlbmVkKSB7DQo+ID4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2woDQo+ID4gKw0KPiA+IEluc3RhbmNlLT5EaXNjb3ZlclRv a2VuLT5EaXNjb3Zlckxpc3QuUmVkZmlzaEluc3RhbmNlcy0NCj4gPkluZm9ybWF0aW9uLlJlZGZp cw0KPiA+IGhSZXN0RXhIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgJmdFZmlSZXN0RXhQcm90b2Nv bEd1aWQsDQo+ID4gKyAgICAgICAgICAgSW5zdGFuY2UtPk5ldHdvcmtJbnRlcmZhY2UtPk9wZW5E cml2ZXJBZ2VudEhhbmRsZSwNCj4gPiArICAgICAgICAgICBJbnN0YW5jZS0+TmV0d29ya0ludGVy ZmFjZS0+T3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICApOw0KPiA+ICsg IH0NCj4gPiArRVJST1JfRVhJVDo7DQo+ID4gKyAgICBpZiAoRGVsZXRlUmVzdEV4ICYmIFJlc3RF eE9wZW5lZCkgew0KPiA+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2woDQo+ID4gKw0KPiA+IElu c3RhbmNlLT5EaXNjb3ZlclRva2VuLT5EaXNjb3Zlckxpc3QuUmVkZmlzaEluc3RhbmNlcy0NCj4g PkluZm9ybWF0aW9uLlJlZGZpcw0KPiA+IGhSZXN0RXhIYW5kbGUsDQo+ID4gKyAgICAgICAgICAg JmdFZmlSZXN0RXhQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgSW5zdGFuY2UtPk5ldHdv cmtJbnRlcmZhY2UtPk9wZW5Ecml2ZXJBZ2VudEhhbmRsZSwNCj4gPiArICAgICAgICAgICBJbnN0 YW5jZS0+TmV0d29ya0ludGVyZmFjZS0+T3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUNCj4gPiAr ICAgICAgICApOw0KPiA+ICsgICAgfQ0KPiA+ICtPTl9FWElUOjsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGdldHMg dGhlIHN1Ym5ldCBpbmZvcm1hdGlvbiBvZiB0aGlzIG5ldHdvcmsgaW50ZXJmYWNlDQo+ID4gaW5z dGFuY2UuDQo+ID4gKyAgY2FuIGRpc2NvdmVyIFJlZGZpc2ggc2VydmljZSBvbiBpdC4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgICBJbnN0YW5jZQ0KPiA+IEVGSV9SRURGSVNIX0RJU0NPVkVS X05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0g ICAgSW1hZ2VIYW5kbGUgIEVGSSBJbWFnZSBoYW5kbGUgcmVxdWVzdCB0aGUgbmV0d29yaw0KPiA+ IGludGVyZmFjZSBsaXN0Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtOZXR3b3JrSW50ZXJmYWNlR2V0U3Vi bmV0SW5mbyAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZB Q0VfSU5URVJOQUwNCj4gPiAqSW5zdGFuY2UsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSBJbWFnZUhh bmRsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ICsg IFVJTlQzMiBQcm90b2NvbFR5cGU7DQo+ID4gKyAgVUlOVDMyIElQdjZJbmZvSW5kZXg7DQo+ID4g KyAgRUZJX0lQNl9BRERSRVNTX0lORk8gKlRoaXNTdWJuZXRBZGRySW5mb0lQdjY7DQo+ID4gKyAg RUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAqTmV3 TmV0d29ya0ludGVyZmFjZTsNCj4gPiArDQo+ID4gKyAgaWYgKEluc3RhbmNlLT5Hb3RTdWJuZXRJ bmZvKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBQcm90b2NvbFR5cGUgPSBJbnN0YW5jZS0+TmV0d29ya1Byb3RvY29sVHlwZTsNCj4gPiAr ICBpZiAoZ1JlcXVpcmVkUHJvdG9jb2wgW1Byb3RvY29sVHlwZV0uR2V0U3VibmV0SW5mbyAhPSBO VUxMICYmDQo+ID4gSW5zdGFuY2UtPkdvdFN1Ym5ldEluZm8gPT0gRkFMU0UpIHsNCj4gPiArICAg IFN0YXR1cyA9IGdSZXF1aXJlZFByb3RvY29sIFtQcm90b2NvbFR5cGVdLkdldFN1Ym5ldEluZm8g KA0KPiA+ICsgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICsgICAgICAgIEluc3RhbmNlDQo+ID4g KyAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwiJWE6RmFpbGUgdG8gZ2V0IFN1Ym5ldCBpbmZvbWF0aW9u LlxuIiwNCj4gPiBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywiJWE6TUFDIGFk ZHJlc3M6ICVzXG4iLCBfX0ZVTkNUSU9OX18sDQo+ID4gSW5zdGFuY2UtPlN0ck1hY0FkZHIpKTsN Cj4gPiArICAgICAgaWYgKENoZWNrSXNJcFZlcnNpb242IChJbnN0YW5jZSkpIHsNCj4gPiArICAg ICAgICBpZiAoSW5zdGFuY2UtPlN1Ym5ldEFkZHJJbmZvSVB2Nk51bWJlciA9PSAwKSB7DQo+ID4g KyAgICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIlYTogVGhlcmUgaXMgbm8gU3VibmV0IGlu Zm9tYXRpb24gZm9yDQo+ID4gSVB2NiBuZXR3b3JrIGludGVyZmFjZS5cbiIsIF9fRlVOQ1RJT05f XykpOw0KPiA+ICsgICAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgICAgICAg fQ0KPiA+ICsgICAgICAgIFRoaXNTdWJuZXRBZGRySW5mb0lQdjYgPSBJbnN0YW5jZS0+U3VibmV0 QWRkckluZm9JUHY2OyAvLyBGaXJzdA0KPiA+IElQdjYgYWRkcmVzcyBpbmZvcm1hdGlvbi4NCj4g PiArICAgICAgICBJUDZfQ09QWV9BRERSRVNTICgmSW5zdGFuY2UtPlN1Ym5ldEFkZHIudjYsDQo+ ID4gJlRoaXNTdWJuZXRBZGRySW5mb0lQdjYtPkFkZHJlc3MpOw0KPiA+ICsgICAgICAgIEluc3Rh bmNlLT5TdWJuZXRQcmVmaXhMZW5ndGggPQ0KPiA+IFRoaXNTdWJuZXRBZGRySW5mb0lQdjYtPlBy ZWZpeExlbmd0aDsNCj4gPiArICAgICAgICBERUJVRygoREVCVUdfSU5GTywiICAgSVB2NiBTdWJu ZXQgSUQ6JWQsIFByZWZpeA0KPiA+IGxlbmd0aDogJWQuXG4iLA0KPiA+ICsgICAgICAgICAgICAg ICBUaGlzU3VibmV0QWRkckluZm9JUHY2LT5BZGRyZXNzLkFkZHIgWzddICsNCj4gPiAoVUlOVDE2 KVRoaXNTdWJuZXRBZGRySW5mb0lQdjYtPkFkZHJlc3MuQWRkciBbNl0gKiAyNTYsDQo+ID4gKyAg ICAgICAgICAgICAgIFRoaXNTdWJuZXRBZGRySW5mb0lQdjYtPlByZWZpeExlbmd0aCkNCj4gPiAr ICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgICAvLw0KPiA+ICsgICAgICAgIC8vIElmIHRo aXMgaXMgSVB2NiwgdGhlbiB3ZSBtYXkgaGF2ZSB0byBwcm9wYWdhdGUgbmV0d29yaw0KPiBpbnRl cmZhY2UNCj4gPiBmb3IgSVB2NiBuZXR3b3JrIHNjb3Blcw0KPiA+ICsgICAgICAgIC8vIGFjY29y ZGluZyB0byB0aGUgSXB2NiBhZGRyZXNzIGluZm9ybWF0aW9uLg0KPiA+ICsgICAgICAgIC8vDQo+ ID4gKyAgICAgICAgVGhpc1N1Ym5ldEFkZHJJbmZvSVB2NiArKzsNCj4gPiArICAgICAgICBmb3Ig KElQdjZJbmZvSW5kZXggPSAwOyBJUHY2SW5mb0luZGV4IDwNCj4gPiBJbnN0YW5jZS0+U3VibmV0 QWRkckluZm9JUHY2TnVtYmVyIC0gMTsgSVB2NkluZm9JbmRleCsrKSB7DQo+ID4gKyAgICAgICAg ICAvLw0KPiA+ICsgICAgICAgICAgLy8gQnVpbGQgdXAgYWRkdGlvbmFsDQo+ID4gRUZJX1JFREZJ U0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwgaW5zdGFuY2VzLg0KPiA+ICsg ICAgICAgICAgLy8NCj4gPiArICAgICAgICAgIE5ld05ldHdvcmtJbnRlcmZhY2UgPQ0KPiA+IChF RklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICopQWxs b2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktf SU5URVJGQUNFX0lOVEVSTkFMKSk7DQo+ID4gKyAgICAgICAgICBpZiAoTmV3TmV0d29ya0ludGVy ZmFjZSAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICAgIENvcHlNZW0gKChWT0lEICopTmV3TmV0 d29ya0ludGVyZmFjZSwgKFZPSUQgKilJbnN0YW5jZSwNCj4gPiBzaXplb2YgKEVGSV9SRURGSVNI X0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMKSk7IC8vDQo+ID4gQ2xvbmUgaW5m b3JtYXRpb24gb2YgZmlyc3QgaW5zdGFuY2UuDQo+ID4gKyAgICAgICAgICAgIElQNl9DT1BZX0FE RFJFU1MNCj4gPiAoJk5ld05ldHdvcmtJbnRlcmZhY2UtPlN1Ym5ldEFkZHIudjYsDQo+ID4gJlRo aXNTdWJuZXRBZGRySW5mb0lQdjYtPkFkZHJlc3MpOw0KPiA+ICsgICAgICAgICAgICBOZXdOZXR3 b3JrSW50ZXJmYWNlLT5TdWJuZXRQcmVmaXhMZW5ndGggPQ0KPiA+IFRoaXNTdWJuZXRBZGRySW5m b0lQdjYtPlByZWZpeExlbmd0aDsNCj4gPiArICAgICAgICAgICAgTmV3TmV0d29ya0ludGVyZmFj ZS0+R290U3VibmV0SW5mbyA9IFRSVUU7DQo+ID4gKyAgICAgICAgICAgIEluc2VydFRhaWxMaXN0 ICgmbUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gJk5ld05ldHdvcmtJ bnRlcmZhY2UtPkVudHJ5KTsNCj4gPiArICAgICAgICAgICAgVGhpc1N1Ym5ldEFkZHJJbmZvSVB2 NiArKzsNCj4gPiArICAgICAgICAgICAgbU51bU5ldHdvcmtJbnRlcmZhY2UgKys7DQo+ID4gKyAg ICAgICAgICAgIERFQlVHKChERUJVR19JTkZPLCIgICBJUHY2IFN1Ym5ldCBJRDolZCwgUHJlZml4 DQo+ID4gbGVuZ3RoOiAlZC5cbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBUaGlzU3VibmV0 QWRkckluZm9JUHY2LT5BZGRyZXNzLkFkZHIgWzddICsNCj4gPiAoVUlOVDE2KVRoaXNTdWJuZXRB ZGRySW5mb0lQdjYtPkFkZHJlc3MuQWRkciBbNl0gKiAyNTYsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICBUaGlzU3VibmV0QWRkckluZm9JUHY2LT5QcmVmaXhMZW5ndGgpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAg ICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5G TywiICAgSVB2NCBTdWJuZXQ6JWQuJWQuJWQuJWQgU3VibmV0DQo+ID4gbWFzazogJWQuJWQuJWQu JWQuXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5TdWJuZXRBZGRyLnY0 LkFkZHIgWzBdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5TdWJuZXRBZGRy LnY0LkFkZHIgWzFdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5TdWJuZXRB ZGRyLnY0LkFkZHIgWzJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5TdWJu ZXRBZGRyLnY0LkFkZHIgWzNdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlLT5T dWJuZXRNYXNrLnY0LkFkZHIgWzBdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3RhbmNl LT5TdWJuZXRNYXNrLnY0LkFkZHIgWzFdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEluc3Rh bmNlLT5TdWJuZXRNYXNrLnY0LkFkZHIgWzJdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIElu c3RhbmNlLT5TdWJuZXRNYXNrLnY0LkFkZHIgWzNdDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg KSk7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKyAgSW5zdGFuY2Ut PkdvdFN1Ym5ldEluZm8gPSBUUlVFOyAvLyBPbmx5IHRyeSB0byBnZXQgU3VibmV0IEluZm8gb25j ZS4NCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbmV0d29yayBpbnRlcmZhY2UgbGlzdCB3aGlj aCBSZWRmaXNoIGRpc2NvdmVyDQo+ID4gcHJvdG9jb2wNCj4gPiArICBjYW4gZGlzY292ZXIgUmVk ZmlzaCBzZXJ2aWNlIG9uIGl0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIFRoaXMNCj4g PiBFRklfUkVERklTSF9ESVNDT1ZFUl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1b aW5dICAgIEltYWdlSGFuZGxlICAgICAgICAgICBFRkkgSW1hZ2UgaGFuZGxlIHJlcXVlc3QgdGhl DQo+ID4gbmV0d29yayBpbnRlcmZhY2UgbGlzdCwNCj4gPiArICBAcGFyYW1bb3V0XSAgIE51bWJl ck9mTmV0d29ya0ludGZzICBOdW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzDQo+ID4gY2FuIGRv IFJlZGZpc2ggc2VydmljZSBkaXNjb3ZlcnkuDQo+ID4gKyAgQHBhcmFtW291dF0gICBOZXR3b3Jr SW50Zkluc3RhbmNlcyAgTmV0d29yayBpbnRlcmZhY2UgaW5zdGFuY2VzLg0KPiA+IEl0J3MgYW4g YXJyYXkgb2YgaW5zdGFuY2UuIFRoZSBudW1iZXIgb2YgZW50cmllcw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGFycmF5IGlzIGluZGljYXRlZCBieQ0KPiA+ IE51bWJlck9mTmV0d29ya0ludGZzLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENhbGxlciBoYXMgdG8gcmVsZWFzZSB0aGUNCj4gPiBtZW1vcnkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgYnkgUmVkZmlzaCBk aXNjb3Zlcg0KPiA+IHByb3RvY29sLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICBUaGUgaW5mb3JtYXRpb24gb2YgbmV0d29yayBpbnRlcmZhY2UgaXMNCj4gPiByZXR1 cm5lZCBpbiBOdW1iZXJPZk5ldHdvcmtJbnRmcyBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOZXR3b3JrSW50Zkluc3RhbmNlcy4NCj4gPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgICBGYWlsIHRvIHJldHVybiB0aGUgaW5mb3JtYXRpb24gb2YgbmV0d29yaw0KPiA+ IGludGVyZmFjZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQ SQ0KPiA+ICtSZWRmaXNoU2VydmljZUdldE5ldHdvcmtJbnRlcmZhY2UgKA0KPiA+ICsgIElOIEVG SV9SRURGSVNIX0RJU0NPVkVSX1BST1RPQ09MICAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiArICBPVVQgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICpOdW1iZXJPZk5ldHdvcmtJbnRmcywNCj4gPiArICBPVVQg RUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0UNCj4gPiAqKk5ldHdvcmtJbnRm SW5zdGFuY2VzDQo+ID4gKykNCj4gPiArew0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX05F VFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKlRoaXNOZXR3b3JrSW50ZXJmYWNlSW50bjsN Cj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRSAqVGhpc05ldHdv cmtJbnRlcmZhY2U7DQo+ID4gKw0KPiA+ICsgIGlmIChOZXR3b3JrSW50Zkluc3RhbmNlcyA9PSBO VUxMIHx8IE51bWJlck9mTmV0d29ya0ludGZzID09IE5VTEwgfHwNCj4gPiBJbWFnZUhhbmRsZSA9 PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgKk51bWJlck9mTmV0d29ya0ludGZzID0gMDsNCj4gPiArICAqTmV0 d29ya0ludGZJbnN0YW5jZXMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICBpZiAoSXNMaXN0RW1wdHkg KChjb25zdA0KPiA+IExJU1RfRU5UUlkqKSZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVy ZmFjZSkpIHsNCj4gPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgVGhpc05ldHdvcmtJbnRlcmZhY2UgPQ0KPiAoRUZJX1JFREZJU0hfRElTQ09WRVJf TkVUV09SS19JTlRFUkZBQ0UNCj4gPiAqKUFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiAoRUZJ X1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0UpDQo+ID4gKiBtTnVtTmV0d29ya0lu dGVyZmFjZSk7DQo+ID4gKyAgaWYgKFRoaXNOZXR3b3JrSW50ZXJmYWNlID09IE5VTEwpIHsNCj4g PiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ID4gKyAgKk5l dHdvcmtJbnRmSW5zdGFuY2VzID0gVGhpc05ldHdvcmtJbnRlcmZhY2U7DQo+ID4gKyAgVGhpc05l dHdvcmtJbnRlcmZhY2VJbnRuID0NCj4gPiAoRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19J TlRFUkZBQ0VfSU5URVJOQUwNCj4gKilHZXRGaXJzdE5vZGUNCj4gPiAoJm1FZmlSZWRmaXNoRGlz Y292ZXJOZXR3b3JrSW50ZXJmYWNlKTsNCj4gPiArICB3aGlsZSAoVFJVRSkgew0KPiA+ICsgICAg VGhpc05ldHdvcmtJbnRlcmZhY2UtPklzSXB2NiA9IEZBTFNFOw0KPiA+ICsgICAgaWYgKENoZWNr SXNJcFZlcnNpb242IChUaGlzTmV0d29ya0ludGVyZmFjZUludG4pKSB7DQo+ID4gKyAgICAgIFRo aXNOZXR3b3JrSW50ZXJmYWNlLT5Jc0lwdjYgPSBUUlVFOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAg Q29weU1lbSgoVk9JRCAqKSZUaGlzTmV0d29ya0ludGVyZmFjZS0+TWFjQWRkcmVzcywNCj4gPiAm VGhpc05ldHdvcmtJbnRlcmZhY2VJbnRuLT5NYWNBZGRyZXNzLA0KPiA+IFRoaXNOZXR3b3JrSW50 ZXJmYWNlSW50bi0+SHdBZGRyZXNzU2l6ZSk7DQo+ID4gKyAgICBOZXR3b3JrSW50ZXJmYWNlR2V0 U3VibmV0SW5mbyhUaGlzTmV0d29ya0ludGVyZmFjZUludG4sDQo+ID4gSW1hZ2VIYW5kbGUpOyAv LyBHZXQgc3VibmV0IGluZm8uDQo+ID4gKyAgICBpZiAoIVRoaXNOZXR3b3JrSW50ZXJmYWNlLT5J c0lwdjYpIHsNCj4gPiArICAgICAgSVA0X0NPUFlfQUREUkVTUygmVGhpc05ldHdvcmtJbnRlcmZh Y2UtPlN1Ym5ldElkLnY0LA0KPiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZUludG4tPlN1Ym5ldEFk ZHIudjQpOyAvLyBJUHY0IHN1Ym5ldCBpbmZvcm1hdGlvbi4NCj4gPiArICAgIH0gZWxzZSB7DQo+ ID4gKyAgICAgIElQNl9DT1BZX0FERFJFU1MgKCZUaGlzTmV0d29ya0ludGVyZmFjZS0+U3VibmV0 SWQudjYsDQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNlSW50bi0+U3VibmV0QWRkci52Nik7IC8v IElQdjYgc3VibmV0IGluZm9ybWF0aW9uDQo+IGluDQo+ID4gSVB2NiBhZGRyZXNzIGluZm9ybWF0 aW9uLg0KPiA+ICsgICAgfQ0KPiA+ICsgICAgVGhpc05ldHdvcmtJbnRlcmZhY2UtPlN1Ym5ldFBy ZWZpeExlbmd0aCA9DQo+ID4gVGhpc05ldHdvcmtJbnRlcmZhY2VJbnRuLT5TdWJuZXRQcmVmaXhM ZW5ndGg7DQo+ID4gKyAgICBUaGlzTmV0d29ya0ludGVyZmFjZS0+VmxhbklkID0gVGhpc05ldHdv cmtJbnRlcmZhY2VJbnRuLT5WbGFuSWQ7DQo+ID4gKyAgICAoKk51bWJlck9mTmV0d29ya0ludGZz KSArKzsNCj4gPiArICAgIGlmIChJc05vZGVBdEVuZCAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3 b3JrSW50ZXJmYWNlLA0KPiA+ICZUaGlzTmV0d29ya0ludGVyZmFjZUludG4tPkVudHJ5KSkgew0K PiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArICAgIFRoaXNOZXR3b3JrSW50ZXJm YWNlSW50biA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lO VEVSTkFMDQo+ID4gKilHZXROZXh0Tm9kZSgmbUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRl cmZhY2UsDQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNlSW50bi0+RW50cnkpOw0KPiA+ICsgICAg VGhpc05ldHdvcmtJbnRlcmZhY2UgKys7DQo+ID4gKyAgfTsNCj4gPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gK30NCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBhY3F1aXJlcyBS ZWRmaXNoIHNlcnZpY2VzIGJ5IGRpc2NvdmVyaW5nIHN0YXRpYyBSZWRmaXNoDQo+IHNldHRpbmcN Cj4gPiArICBhY2NvcmRpbmcgdG8gUmVkZmlzaCBIb3N0IEludGVyZmFjZSBvciB0aHJvdWdoIFNT RFAuIFJldHVybnMgYSBsaXN0IG9mDQo+IEVGSQ0KPiA+ICsgIGhhbmRsZXMgaW4gRUZJX1JFREZJ U0hfRElTQ09WRVJFRF9MSVNULiBFYWNoIG9mIEVGSSBoYW5kbGUgaGFzDQo+ID4gY29vcmVzcG9u ZGluZw0KPiA+ICsgIEVGSSBSRVNUIEVYIGluc3RhbmNlIGluc3RhbGxlZCBvbiBpdC4gRWFjaCBS RVNUIEVYIGlzbnRhbmNlIGlzIGEgY2hpbGQNCj4gPiBpbnN0YW5jZSB3aGljaA0KPiA+ICsgIGNy ZWF0ZWQgdGhyb3VnaCBFRkkgUkVTVCBFWCBzZXJpdmNlIHByb3Rvb2NsIGZvciBjb21tdW5pY2F0 aW5nIHdpdGgNCj4gPiBzcGVjaWZpYw0KPiA+ICsgIFJlZGZpc2ggc2VydmljZS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgICBUaGlzDQo+ID4gRUZJX1JFREZJU0hfRElTQ09WRVJfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBJbWFnZUhhbmRsZSAgICAgICAgICAg ICBFRkkgaW1hZ2Ugb3ducyB0aGVzZQ0KPiA+IFJlZGZpc2ggc2VydmljZSBpbnN0YW5jZXMuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICBUYXJnZXROZXR3b3JrSW50ZXJmYWNlICBUYXJnZXQgbmV0d29y ayBpbnRlcmZhY2UgdG8NCj4gPiBkbyB0aGUgZGlzY292ZXJ5Lg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBtZWFucyBkaXNjb3Zlcg0KPiA+IFJlZGZp c2ggc2VydmljZSBvbiBhbGwgbmV0d29yayBpbnRlcmZhY2VzIG9uIHBsYXRmb3JtLg0KPiA+ICsg IEBwYXJhbVtpbl0gICAgRmxhZ3MgICAgICAgICAgICAgICAgICAgUmVkZmlzaCBzZXJ2aWNlIGRp c2NvdmVyDQo+ID4gZmxhZ3MuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBUb2tlbg0KPiA+IEVGSV9S RURGSVNIX0RJU0NPVkVSRURfVE9LRU4gaW5zdGFuY2UuDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVtb3J5IG9mDQo+ID4gRUZJX1JFREZJU0hfRElT Q09WRVJFRF9MSVNUIGFuZCB0aGUgc3RyaW5ncyBpbg0KPiA+ICsNCj4gPiBFRklfUkVERklTSF9E SVNDT1ZFUkVEX0lORk9STUFUSU9OIGFyZSBhbGwgYWxsb2NhdGVkIGJ5IEFjcXVpcmUoKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG11c3QgYmUgZnJl ZWQgd2hlbg0KPiA+IGNhbGxlciBpbnZva2UgUmVsZWFzZSgpLg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFJFU1QgRVggaW5zdGFuY2Ugb2YgZGlzY292ZXJl ZA0KPiA+IFJlZGZpc2ggc2VydmljZXMgYXJlIHJldHVybmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSUyAgSW1hZ2VIYW5kbGUgPT0gTlVMTCwgRmxhZ3MgPT0gMCwNCj4g PiBUb2tlbiA9PSBOVUxMLCBUb2tlbi0+VGltZW91dCA+IDUsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvciBUb2tlbi0+RXZlbnQgPT0gTlVMTC4NCj4gPiArICBAcmV0 dmFsIE90aGVycyAgICAgICAgICAgICAgICAgIEZhaWwgYWNxdWlyZSBSZWRmaXNoIHNlcnZpY2Vz Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1Jl ZGZpc2hTZXJ2aWNlQWNxdWlyZVNlcnZpY2UgKA0KPiA+ICsgIElOIEVGSV9SRURGSVNIX0RJU0NP VkVSX1BST1RPQ09MICAgICAgICAgICpUaGlzLA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICsgIElOIEVGSV9SRURGSVNI X0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFDQo+ID4gKlRhcmdldE5ldHdvcmtJbnRlcmZhY2Us DQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfRkxBRyAgICAgICAgICAgICAgRmxhZ3Ms DQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJFRF9UT0tFTiAgICAgICAgICAgKlRva2Vu DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlRFUk5B TF9JTlNUQU5DRSAqSW5zdGFuY2U7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0dXMxOw0KPiA+ICsg IEVGSV9TVEFUVVMgU3RhdHVzMjsNCj4gPiArICBCT09MRUFOIE5ld0luc3RhbmNlOw0KPiA+ICsg IFVJTlROIE51bU5ldHdvcmtJbnRlcmZhY2VzOw0KPiA+ICsgIFVJTlROIE5ldHdvcmtJbnRlcmZh Y2VzSW5kZXg7DQo+ID4gKyAgRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0Vf SU5URVJOQUwNCj4gPiAqVGFyZ2V0TmV0d29ya0ludGVyZmFjZUludGVybmFsOw0KPiA+ICsNCj4g PiArICBERUJVRyAoKERFQlVHX0lORk8sIiVhOkVudHJ5LlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gVmFsaWRhdGUgcGFyYW1ldGVycy4NCj4gPiArICAv Lw0KPiA+ICsgIGlmIChJbWFnZUhhbmRsZSA9PSBOVUxMIHx8IFRva2VuID09IE5VTEwgfHwgKChG bGFncyAmDQo+ID4gfkVGSV9SRURGSVNIX0RJU0NPVkVSX1ZBTElEQVRJT04pID09IDApKSB7DQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIlYTpJbnZhbGlkIHBhcmFtZXRlcnMuXG4iLA0K PiA+IF9fRlVOQ1RJT05fXykpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gPiArICB9DQo+ID4gKyAgLy8NCj4gPiArICAvLyBWYWxpZGF0ZSB0YXJnZXQgbmV0d29y ayBpbnRlcmZhY2UuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoRUZJX0VSUk9SIChWYWxpZGF0ZVRh cmdldE5ldHdvcmtJbnRlcmZhY2UNCj4gKFRhcmdldE5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gRmxh Z3MpKSkgew0KPiA+ICsgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICsgIH0NCj4g PiArICBpZiAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZSAhPSBOVUxMKSB7DQo+ID4gKyAgICBUYXJn ZXROZXR3b3JrSW50ZXJmYWNlSW50ZXJuYWwgPSBHZXRUYXJnZXROZXR3b3JrSW50ZXJmYWNlSW50 ZXJuYWwNCj4gPiAoVGFyZ2V0TmV0d29ya0ludGVyZmFjZSk7DQo+ID4gKyAgICBOdW1OZXR3b3Jr SW50ZXJmYWNlcyA9IDE7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFRhcmdldE5ldHdvcmtJ bnRlcmZhY2VJbnRlcm5hbCA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5U RVJGQUNFX0lOVEVSTkFMDQo+ICopR2V0Rmlyc3ROb2RlDQo+ID4gKCZtRWZpUmVkZmlzaERpc2Nv dmVyTmV0d29ya0ludGVyZmFjZSk7DQo+ID4gKyAgICBOdW1OZXR3b3JrSW50ZXJmYWNlcyA9IE51 bWJlck9mTmV0d29ya0ludGVyZmFjZSAoKTsNCj4gPiArICAgIGlmIChOdW1OZXR3b3JrSW50ZXJm YWNlcyA9PSAwKSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIiVhOk5vIG5ldHdv cmsgaW50ZXJmYWNlIG9uIHBsYXRmb3JtLlxuIiwNCj4gPiBfX0ZVTkNUSU9OX18pKTsNCj4gPiAr ICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4g KyAgZm9yIChOZXR3b3JrSW50ZXJmYWNlc0luZGV4ID0gMDsgTmV0d29ya0ludGVyZmFjZXNJbmRl eCA8DQo+ID4gTnVtTmV0d29ya0ludGVyZmFjZXM7IE5ldHdvcmtJbnRlcmZhY2VzSW5kZXggKysp IHsNCj4gPiArICAgIFN0YXR1czEgPSBFRklfU1VDQ0VTUzsNCj4gPiArICAgIFN0YXR1czIgPSBF RklfU1VDQ0VTUzsNCj4gPiArICAgIE5ld0luc3RhbmNlID0gRkFMU0U7DQo+ID4gKyAgICBJbnN0 YW5jZSA9IEdldEluc3RhbmNlQnlPd25lciAoSW1hZ2VIYW5kbGUsDQo+ID4gVGFyZ2V0TmV0d29y a0ludGVyZmFjZUludGVybmFsLCBGbGFncyAmDQo+ID4gfkVGSV9SRURGSVNIX0RJU0NPVkVSX1ZB TElEQVRJT04pOyAvLyBDaGVjayBpZiB3ZSBjYW4gcmUtdXNlDQo+IHByZXZpb3VzDQo+ID4gaW5z dGFuY2UuDQo+ID4gKyAgICBpZiAoSW5zdGFuY2UgPT0gTlVMTCkgew0KPiA+ICsgICAgICBERUJV RyAoKERFQlVHX0lORk8sIiVhOkNyZWF0ZSBuZXcNCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUkVE X0lOVEVSTkFMX0lOU1RBTkNFLlxuIiwgX19GVU5DVElPTl9fKSk7DQo+ID4gKyAgICAgIEluc3Rh bmNlID0gKEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxfSU5TVEFOQ0UNCj4gPg0KPiAq KUFsbG9jYXRlWmVyb1Bvb2woc2l6ZW9mKEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxf SU5TVEFOQ0UpKQ0KPiA+IDsNCj4gPiArICAgICAgaWYgKEluc3RhbmNlID09IE5VTEwpIHsNCj4g PiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCIlYTpNZW1vcnkgYWxsb2NhdGlvbiBmYWls LlxuIiwNCj4gPiBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBJbml0 aWFsaXplTGlzdEhlYWQgKCZJbnN0YW5jZS0+RW50cnkpOw0KPiA+ICsgICAgICBJbnN0YW5jZS0+ T3duZXIgPSBJbWFnZUhhbmRsZTsNCj4gPiArICAgICAgSW5zdGFuY2UtPkRpc2NvdmVyRmxhZ3Mg PSBGbGFncyAmDQo+ID4gfkVGSV9SRURGSVNIX0RJU0NPVkVSX1ZBTElEQVRJT047DQo+ID4gKyAg ICAgIEluc3RhbmNlLT5OZXR3b3JrSW50ZXJmYWNlID0gVGFyZ2V0TmV0d29ya0ludGVyZmFjZUlu dGVybmFsOw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBHZXQgc3VibmV0IGluZm9ybWF0 aW9uIGluIGNhc2Ugc3VibmV0IGluZm9ybWF0aW9uIGlzIG5vdCBzZXQNCj4gPiBiZWNhdXNlDQo+ ID4gKyAgICAgIC8vIFJlZGZpc2hTZXJ2aWNlR2V0TmV0d29ya0ludGVyZmFjZXMgaGFzbid0IGJl ZW4gY2FsbGVkIHlldC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgTmV0d29ya0ludGVyZmFj ZUdldFN1Ym5ldEluZm8gKFRhcmdldE5ldHdvcmtJbnRlcmZhY2VJbnRlcm5hbCwNCj4gPiBJbWFn ZUhhbmRsZSk7DQo+ID4gKyAgICAgIE5ld0luc3RhbmNlID0gVFJVRTsNCj4gPiArICAgIH0NCj4g PiArICAgIGlmIChUYXJnZXROZXR3b3JrSW50ZXJmYWNlSW50ZXJuYWwtPlN0ck1hY0FkZHIgIT0g TlVMTCkgew0KPiA+ICsgICAgICBERUJVRygoREVCVUdfSU5GTywiJWE6QWNxdWlyZSBSZWRmaXNo IHNlcnZpY2Ugb24gbmV0d29yaw0KPiA+IGludGVyZmFjZSBNQUMgYWRkcmVzczolcy5cbiIsIF9f RlVOQ1RJT05fXywNCj4gPiBUYXJnZXROZXR3b3JrSW50ZXJmYWNlSW50ZXJuYWwtPlN0ck1hY0Fk ZHIpKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIERFQlVHKChERUJVR19JTkZPLCIl YTpXQVJOSU5HOiBObyBNQUMgYWRkcmVzcyBvbiB0aGlzDQo+ID4gbmV0d29yayBpbnRlcmZhY2Uu XG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBJbnN0YW5j ZS0+RGlzY292ZXJUb2tlbiA9IFRva2VuOyAvLyBBbHdheXMgdXNlIHRoZSBsYXRlc3QgVG9rZW4N Cj4gPiBwYXNzZWQgYnkgY2FsbGVyLg0KPiA+ICsgICAgaWYgKChGbGFncyAmIEVGSV9SRURGSVNI X0RJU0NPVkVSX0hPU1RfSU5URVJGQUNFKSAhPSAwKSB7DQo+ID4gKyAgICAgIERFQlVHICgoREVC VUdfSU5GTywiJWE6UmVkZmlzaCBIT1NUIGludGVyZmFjZSBkaXNjb3ZlcnkuXG4iLA0KPiA+IF9f RlVOQ1RJT05fXykpOw0KPiA+ICsgICAgICBJbnN0YW5jZS0+SG9zdEludGZWYWxpZGF0aW9uID0g RkFMU0U7DQo+ID4gKyAgICAgIGlmICgoRmxhZ3MgJiBFRklfUkVERklTSF9ESVNDT1ZFUl9WQUxJ REFUSU9OKSAhPSAwKSB7DQo+ID4gKyAgICAgICAgSW5zdGFuY2UtPkhvc3RJbnRmVmFsaWRhdGlv biA9IFRSVUU7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgU3RhdHVzMSA9IERpc2NvdmVyUmVk ZmlzaEhvc3RJbnRlcmZhY2UgKEluc3RhbmNlKTsgLy8gRGlzY292ZXINCj4gPiBSZWRmaXNoIHNl cnZpY2UgdGhyb3VnaCBSZWRmaXNoIEhvc3QgSW50ZXJmYWNlLg0KPiA+ICsgICAgfQ0KPiA+ICsg ICAgaWYgKChGbGFncyAmIEVGSV9SRURGSVNIX0RJU0NPVkVSX1NTRFApICE9IDApIHsNCj4gPiAr ICAgICAgREVCVUcgKChERUJVR19FUlJPUiwiJWE6UmVkZmlzaCBzZXJ2aWNlIGRpc2NvdmVyeSB0 aHJvdWdoIFNTRFANCj4gPiBpcyBub3Qgc3VwcG9ydGVkXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4g PiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1czEpICYmIEVGSV9FUlJPUiAoU3RhdHVzMikpIHsN Cj4gPiArICAgICAgICBGcmVlUG9vbCAoKFZPSUQgKilJbnN0YW5jZSk7DQo+ID4gKyAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwiJWE6U29tZXRoaW5nIHdyb25nIG9uIFJlZGZpc2ggc2Vydmlj ZQ0KPiA+IGRpc2NvdmVyeSBTdGF0dXMxPSV4LCBTdGF0dXMyPSV4LlxuIiwgX19GVU5DVElPTl9f LCBTdGF0dXMxLCBTdGF0dXMyKSk7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg aWYgKE5ld0luc3RhbmNlKSB7DQo+ID4gKyAgICAgICAgICBJbnNlcnRUYWlsTGlzdCgmbVJlZGZp c2hEaXNjb3Zlckxpc3QsICZJbnN0YW5jZS0+RW50cnkpOw0KPiA+ICsgICAgICAgIH0NCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgICAgaWYgKFRhcmdldE5ldHdvcmtJbnRlcmZhY2Ug PT0gTlVMTCkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBEaXNjb3ZlciBSZWRmaXNo IHNlcnZpY2VzIG9uIGFsbCBvZiBuZXR3b3JrIGludGVyZmFjZXMuDQo+ID4gKyAgICAgIC8vDQo+ ID4gKyAgICAgIFRhcmdldE5ldHdvcmtJbnRlcmZhY2VJbnRlcm5hbCA9DQo+ID4gKEVGSV9SRURG SVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKilHZXROZXh0Tm9k ZSgmbUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gJlRhcmdldE5ldHdv cmtJbnRlcmZhY2VJbnRlcm5hbC0+RW50cnkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRo aXMgZnVuY3Rpb24gYWJvcnRzIFJlZGZpc2ggc2VydmljZSBkaXNjb3Zlcnkgb24gdGhlIGdpdmVu IG5ldHdvcmsNCj4gPiBpbnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgVGhp cw0KPiA+IEVGSV9SRURGSVNIX0RJU0NPVkVSX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBw YXJhbVtpbl0gICAgVGFyZ2V0TmV0d29ya0ludGVyZmFjZSAgVGFyZ2V0IG5ldHdvcmsgaW50ZXJm YWNlIHRvDQo+ID4gZG8gdGhlIGRpc2NvdmVyeS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBSRVNUIEVYIGluc3RhbmNlIG9mIGRpc2NvdmVyZWQNCj4gPiBS ZWRmaXNoIHNlcnZpY2VzIGFyZSByZXR1cm5lZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAg ICAgICAgICAgICAgIEZhaWwgdG8gYWJvcnQgUmVkZmlzaCBzZXJ2aWNlDQo+ID4gZGlzY292ZXJ5 Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1Jl ZGZpc2hTZXJ2aWNlQWJvcnRBY3F1aXJlICgNCj4gPiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZF Ul9QUk9UT0NPTCAgICAgICpUaGlzLA0KPiA+ICsgIElOIEVGSV9SRURGSVNIX0RJU0NPVkVSX05F VFdPUktfSU5URVJGQUNFDQo+ID4gKlRhcmdldE5ldHdvcmtJbnRlcmZhY2UgT1BUSU9OQUwNCj4g PiArKQ0KPiA+ICt7DQo+ID4gKyAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFib3J0IFJl ZGZpc2ggc2VydmljZSBkaXNjb3ZlcnkgdGhyb3VnaA0KPiBTU0RQDQo+ID4gKyAgLy8gb24gdGhl IG5ldHdvcmsgaW50ZXJmYWNlLiBTU0RQIGlzIG9wdGlvbmFsbHkgc3VwcHJ0ZWQgYnkNCj4gPiBF RklfUkVERklTSF9ESVNDT1ZFUl9QUk9UT0NPTCwNCj4gPiArICAvLyB3ZSBkb250IGhhdmUgaW1w bGVtZW50YXRpb24gZm9yIFNTRFAgbm93Lg0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHJl bGVhc2VzIFJlZGZpc2ggc2VydmljZXMgZm91bmQgYnkNCj4gUmVkZmlzaFNlcnZpY2VBY3F1aXJl KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgVGhpcyAgICAgICAgIEVGSV9SRURGSVNI X0RJU0NPVkVSX1BST1RPQ09MDQo+ID4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBJ bnN0YW5jZUxpc3QgVGhlIFJlZGZpc2ggc2VydmljZSB0byByZWxlYXNlLg0KPiA+ICsNCj4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICBSRVNUIEVYIGluc3RhbmNlcyBvZiBkaXNjb3Zl cmVkIFJlZGZpc2gNCj4gPiBhcmUgcmVsZWFzZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAg ICAgICAgICAgRmFpbCB0byByZW1vdmUgdGhlIGVudHJ5DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUmVkZmlzaFNlcnZpY2VSZWxlYXNlU2Vydmlj ZSAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfUFJPVE9DT0wgICAqVGhpcywNCj4g PiArICBJTiBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0xJU1QgKkluc3RhbmNlTGlzdA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIFVJTlROIE51bVNlcnZpY2U7DQo+ID4gKyAgQk9PTEVBTiBBbnlG YWlsUmVsZWFzZTsNCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUkVEX0lOU1RBTkNFICpUaGlz UmVkZmlzaEluc3RhbmNlOw0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxf TElTVCAqRGlzY292ZXJlZFJlZGZpc2hJbnN0YW5jZTsNCj4gPiArDQo+ID4gKyAgaWYgKElzTGlz dEVtcHR5ICgmbVJlZGZpc2hJbnN0YW5jZUxpc3QpKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVH X0VSUk9SLCIlYTpObyBhbnkgZGlzY292ZXJlZCBSZWRmaXNoIHNlcnZpY2UuXG4iLA0KPiA+IF9f RlVOQ1RJT05fXykpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0K PiA+ICsgIEFueUZhaWxSZWxlYXNlID0gRkFMU0U7DQo+ID4gKyAgVGhpc1JlZGZpc2hJbnN0YW5j ZSA9IEluc3RhbmNlTGlzdC0+UmVkZmlzaEluc3RhbmNlczsNCj4gPiArICBmb3IgKE51bVNlcnZp Y2UgPSAwOyBOdW1TZXJ2aWNlIDwgSW5zdGFuY2VMaXN0LQ0KPiA+TnVtYmVyT2ZTZXJ2aWNlRm91 bmQ7DQo+ID4gTnVtU2VydmljZSArKykgew0KPiA+ICsgICAgRGlzY292ZXJlZFJlZGZpc2hJbnN0 YW5jZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSRURfSU5URVJOQUxfTElTVA0KPiA+ICop R2V0Rmlyc3ROb2RlKCZtUmVkZmlzaEluc3RhbmNlTGlzdCk7DQo+ID4gKyAgICBkbyB7DQo+ID4g KyAgICAgIGlmIChEaXNjb3ZlcmVkUmVkZmlzaEluc3RhbmNlLT5JbnN0YW5jZSA9PSBUaGlzUmVk ZmlzaEluc3RhbmNlKSB7DQo+ID4gKyAgICAgICAgUmVtb3ZlRW50cnlMaXN0ICgmRGlzY292ZXJl ZFJlZGZpc2hJbnN0YW5jZS0+TmV4dEluc3RhbmNlKTsNCj4gPiArICAgICAgICBpZiAoVGhpc1Jl ZGZpc2hJbnN0YW5jZS0+SW5mb3JtYXRpb24uTG9jYXRpb24gIT0gTlVMTCkgew0KPiA+ICsgICAg ICAgICAgRnJlZVBvb2wgKFRoaXNSZWRmaXNoSW5zdGFuY2UtPkluZm9ybWF0aW9uLkxvY2F0aW9u KTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKFRoaXNSZWRmaXNoSW5zdGFuY2Ut PkluZm9ybWF0aW9uLlV1aWQgIT0gTlVMTCkgew0KPiA+ICsgICAgICAgICAgRnJlZVBvb2wgKFRo aXNSZWRmaXNoSW5zdGFuY2UtPkluZm9ybWF0aW9uLlV1aWQpOw0KPiA+ICsgICAgICAgIH0NCj4g PiArICAgICAgICBpZiAoVGhpc1JlZGZpc2hJbnN0YW5jZS0+SW5mb3JtYXRpb24uT3MgIT0gTlVM TCkgew0KPiA+ICsgICAgICAgICAgRnJlZVBvb2wgKFRoaXNSZWRmaXNoSW5zdGFuY2UtPkluZm9y bWF0aW9uLk9zKTsNCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKFRoaXNSZWRmaXNo SW5zdGFuY2UtPkluZm9ybWF0aW9uLk9zVmVyc2lvbiAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAg ICBGcmVlUG9vbCAoVGhpc1JlZGZpc2hJbnN0YW5jZS0+SW5mb3JtYXRpb24uT3NWZXJzaW9uKTsN Cj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgICAgaWYgKFRoaXNSZWRmaXNoSW5zdGFuY2UtPklu Zm9ybWF0aW9uLlByb2R1Y3QgIT0gTlVMTCkgew0KPiA+ICsgICAgICAgICAgRnJlZVBvb2wgKFRo aXNSZWRmaXNoSW5zdGFuY2UtPkluZm9ybWF0aW9uLlByb2R1Y3QpOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgICBpZiAoVGhpc1JlZGZpc2hJbnN0YW5jZS0+SW5mb3JtYXRpb24uUHJvZHVj dFZlciAhPSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICBGcmVlUG9vbCAoVGhpc1JlZGZpc2hJbnN0 YW5jZS0+SW5mb3JtYXRpb24uUHJvZHVjdFZlcik7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAg ICAgIEZyZWVQb29sKChWT0lEICopVGhpc1JlZGZpc2hJbnN0YW5jZSk7DQo+ID4gKyAgICAgICAg Z290byBSZWxlYXNlTmV4dDsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgaWYgKElz Tm9kZUF0RW5kKCZtUmVkZmlzaEluc3RhbmNlTGlzdCwNCj4gPiAmRGlzY292ZXJlZFJlZGZpc2hJ bnN0YW5jZS0+TmV4dEluc3RhbmNlKSkgew0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAg ICB9DQo+ID4gKyAgICAgIERpc2NvdmVyZWRSZWRmaXNoSW5zdGFuY2UgPQ0KPiA+IChFRklfUkVE RklTSF9ESVNDT1ZFUkVEX0lOVEVSTkFMX0xJU1QNCj4gPiAqKUdldE5leHROb2RlKCZtUmVkZmlz aEluc3RhbmNlTGlzdCwNCj4gPiAmRGlzY292ZXJlZFJlZGZpc2hJbnN0YW5jZS0+TmV4dEluc3Rh bmNlKTsNCj4gPiArICAgIH0gd2hpbGUgKFRSVUUpOw0KPiA+ICsgICAgQW55RmFpbFJlbGVhc2Ug PSBUUlVFOw0KPiA+ICtSZWxlYXNlTmV4dDo7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gUmVs ZWFzZSBuZXh0IGRpc2NvdmVyZWQgUmVkZmlzaCBTZXJ2aWNlLg0KPiA+ICsgICAgLy8NCj4gPiAr ICAgIFRoaXNSZWRmaXNoSW5zdGFuY2UgPSAoRUZJX1JFREZJU0hfRElTQ09WRVJFRF9JTlNUQU5D RQ0KPiA+ICopKChVSU5UOCAqKVRoaXNSZWRmaXNoSW5zdGFuY2UgKyBzaXplb2YNCj4gPiAoRUZJ X1JFREZJU0hfRElTQ09WRVJFRF9JTlNUQU5DRSkpOw0KPiA+ICsgIH0NCj4gPiArICBpZiAoQW55 RmFpbFJlbGVhc2UpIHsNCj4gPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgIH0g ZWxzZSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgfQ0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtFRklfUkVERklTSF9ESVNDT1ZFUl9QUk9UT0NPTCBtUmVkZmlzaERpc2NvdmVy ID0gew0KPiA+ICsgIFJlZGZpc2hTZXJ2aWNlR2V0TmV0d29ya0ludGVyZmFjZSwNCj4gPiArICBS ZWRmaXNoU2VydmljZUFjcXVpcmVTZXJ2aWNlLA0KPiA+ICsgIFJlZGZpc2hTZXJ2aWNlQWJvcnRB Y3F1aXJlLA0KPiA+ICsgIFJlZGZpc2hTZXJ2aWNlUmVsZWFzZVNlcnZpY2UNCj4gPiArfTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY3JlYXRlIGFuDQo+ID4gRUZJX1JF REZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwgZm9yIHRoZQ0KPiA+ICsg IGdpdmVuIG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgQ29udHJvbGxlckhhbmRsZSAgICBNQUMgYWRkcmVzcyBvZiB0aGlzIG5ldHdvcmsNCj4gPiBp bnRlcmZhY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgTmV0d29ya1Byb3RvY29sVHlwZSBOZXR3b3Jr IHByb3RvY29sIHR5cGUuDQo+ID4gKyAgQHBhcmFtW291dF0gSXNOZXdJbnN0YW5jZSAgICAgICBC T09MRUFOIG1lYW5zIG5ldyBpbnN0YW5jZSBvcg0KPiA+IG5vdC4NCj4gPiArICBAcGFyYW1bb3V0 XSBOZXR3b3JrSW50ZXJmYWNlICAgIFBvaW50ZXIgdG8gdG8NCj4gPiBFRklfUkVERklTSF9ESVND T1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1RBVFVTDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0NyZWF0ZVJlZGZpc2hE aXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UgKA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgQ29udHJvbGxl ckhhbmRsZSwNCj4gPiArICBJTiBVSU5UMzIgTmV0d29ya1Byb3RvY29sVHlwZSwNCj4gPiArICBP VVQgQk9PTEVBTiAgKklzTmV3SW5zdGFuY2UsDQo+ID4gKyAgT1VUIEVGSV9SRURGSVNIX0RJU0NP VkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKipOZXR3b3JrSW50ZXJmYWNlDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX01BQ19BRERSRVNTIE1hY0FkZHJlc3M7DQo+ID4g KyAgVUlOVE4gSHdBZGRyZXNzU2l6ZTsNCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRX T1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICpUaGlzTmV0d29ya0ludGVyZmFjZTsNCj4gPiAr ICBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICpO ZXdOZXR3b3JrSW50ZXJmYWNlOw0KPiA+ICsNCj4gPiArICBOZXRMaWJHZXRNYWNBZGRyZXNzIChD b250cm9sbGVySGFuZGxlLCAmTWFjQWRkcmVzcywNCj4gPiAmSHdBZGRyZXNzU2l6ZSk7DQo+ID4g KyAgTmV3TmV0d29ya0ludGVyZmFjZSA9IE5VTEw7DQo+ID4gKyAgKklzTmV3SW5zdGFuY2UgPSBU UlVFOw0KPiA+ICsgIGlmICghSXNMaXN0RW1wdHkgKChjb25zdA0KPiA+IExJU1RfRU5UUlkqKSZt RWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSkpIHsNCj4gPiArICAgIC8vDQo+ID4g KyAgICAvLyBDaGVjayBpZiB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3QuDQo+ID4gKyAgICAv Lw0KPiA+ICsgICAgVGhpc05ldHdvcmtJbnRlcmZhY2UgPQ0KPiA+IChFRklfUkVERklTSF9ESVND T1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiAqKUdldEZpcnN0Tm9kZQ0KPiA+ICgm bUVmaVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UpOw0KPiA+ICsgICAgaWYgKFRoaXNO ZXR3b3JrSW50ZXJmYWNlICE9IE5VTEwpIHsNCj4gPiArICAgICAgd2hpbGUgKFRSVUUpIHsNCj4g PiArICAgICAgICBpZiAoKENvbXBhcmVNZW0gKChDT05TVCBWT0lEDQo+ID4gKikmVGhpc05ldHdv cmtJbnRlcmZhY2UtPk1hY0FkZHJlc3MuQWRkciwgKENPTlNUIFZPSUQNCj4gPiAqKSZNYWNBZGRy ZXNzLkFkZHIsIEh3QWRkcmVzc1NpemUpID09IDApICYmDQo+ID4gKyAgICAgICAgICAgICAoVGhp c05ldHdvcmtJbnRlcmZhY2UtPk5ldHdvcmtQcm90b2NvbFR5cGUgPT0NCj4gPiBOZXR3b3JrUHJv dG9jb2xUeXBlKSl7DQo+ID4gKyAgICAgICAgICBOZXdOZXR3b3JrSW50ZXJmYWNlID0gVGhpc05l dHdvcmtJbnRlcmZhY2U7DQo+ID4gKyAgICAgICAgICAqSXNOZXdJbnN0YW5jZSA9IEZBTFNFOw0K PiA+ICsgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIGlmIChJ c05vZGVBdEVuZCAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlLA0KPiA+ICZU aGlzTmV0d29ya0ludGVyZmFjZS0+RW50cnkpKSB7DQo+ID4gKyAgICAgICAgICBOZXdOZXR3b3Jr SW50ZXJmYWNlID0gTlVMTDsNCj4gPiArICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgICBUaGlzTmV0d29ya0ludGVyZmFjZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJ U0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKilHZXROZXh0Tm9kZSgmbUVm aVJlZGZpc2hEaXNjb3Zlck5ldHdvcmtJbnRlcmZhY2UsDQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJm YWNlLT5FbnRyeSk7DQo+ID4gKyAgICAgIH07DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsg IGlmIChOZXdOZXR3b3JrSW50ZXJmYWNlID09IE5VTEwpIHsNCj4gPiArICAgIC8vDQo+ID4gKyAg ICAvLyBDcmVhdGUgYSBuZXcgaW5zdGFuY2UuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgTmV3TmV0 d29ya0ludGVyZmFjZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJG QUNFX0lOVEVSTkFMDQo+ID4gKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YNCj4gPiAoRUZJX1JF REZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwpKTsNCj4gPiArICAgIGlm IChOZXdOZXR3b3JrSW50ZXJmYWNlID09IE5VTEwpIHsNCj4gPiArICAgICAgcmV0dXJuIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgTmV3TmV0d29ya0ludGVyZmFj ZS0+SHdBZGRyZXNzU2l6ZSA9IEh3QWRkcmVzc1NpemU7DQo+ID4gKyAgICBDb3B5TWVtICgmTmV3 TmV0d29ya0ludGVyZmFjZS0+TWFjQWRkcmVzcy5BZGRyLA0KPiA+ICZNYWNBZGRyZXNzLkFkZHIs IE5ld05ldHdvcmtJbnRlcmZhY2UtPkh3QWRkcmVzc1NpemUpOw0KPiA+ICsgICAgTmV0TGliR2V0 TWFjU3RyaW5nIChDb250cm9sbGVySGFuZGxlLCBOVUxMLA0KPiA+ICZOZXdOZXR3b3JrSW50ZXJm YWNlLT5TdHJNYWNBZGRyKTsNCj4gPiArICAgIE5ld05ldHdvcmtJbnRlcmZhY2UtPlZsYW5JZCA9 IE5ldExpYkdldFZsYW5JZCAoQ29udHJvbGxlckhhbmRsZSk7DQo+ID4gKyAgfQ0KPiA+ICsgICpO ZXR3b3JrSW50ZXJmYWNlID0gTmV3TmV0d29ya0ludGVyZmFjZTsNCj4gPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24g ZGVzdG9yeSBuZXR3b3JrIGludGVyZmFjZQ0KPiA+ICsNCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgVGhpc05ldHdvcmtJbnRlcmZhY2UNCj4gPiBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JL X0lOVEVSRkFDRV9JTlRFUk5BTCBpbnN0YW5jZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1RBVFVTDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0Rlc3Ryb3lSZWRmaXNoTmV0 d3Jva0ludGVyZmFjZSAoDQo+ID4gKyAgSU4gRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19J TlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAqVGhpc05ldHdvcmtJbnRlcmZhY2UNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0g Z0JTLT5Vbmluc3RhbGxQcm90b2NvbEludGVyZmFjZSgNCj4gPiArICAgICAgICAgICAgICAgICAg VGhpc05ldHdvcmtJbnRlcmZhY2UtPk9wZW5Ecml2ZXJDb250cm9sbGVySGFuZGxlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICBnUmVxdWlyZWRQcm90b2NvbA0KPiA+IFtUaGlzTmV0d29ya0ludGVy ZmFjZS0+TmV0d29ya1Byb3RvY29sVHlwZV0uRGlzY292ZXJlZFByb3RvY29sR3VpZCwNCj4gPiAr DQo+ID4gJlRoaXNOZXR3b3JrSW50ZXJmYWNlLQ0KPiA+TmV0d29ya0ludGVyZmFjZVByb3RvY29s SW5mby5Qcm90b2NvbERpc2NvdmVySWQNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiAr ICBSZW1vdmVFbnRyeUxpc3QgKCZUaGlzTmV0d29ya0ludGVyZmFjZS0+RW50cnkpOw0KPiA+ICsg IG1OdW1OZXR3b3JrSW50ZXJmYWNlIC0tOw0KPiA+ICsgIEZyZWVQb29sIChUaGlzTmV0d29ya0lu dGVyZmFjZSk7DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgVGVzdHMgdG8gc2VlIGlmIHRoZSByZXF1aXJlZCBwcm90b2NvbHMgYXJlIHByb3Zp ZGVkIG9uIHRoZSBnaXZlbg0KPiA+ICsgIGNvbnRyb2xsZXIgaGFuZGxlLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ID4g RUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0g IENvbnRyb2xsZXJIYW5kbGUgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gdGVz dC4NCj4gPiBUaGlzIGhhbmRsZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG11c3Qgc3VwcG9ydCBhIHByb3RvY29sDQo+ID4gaW50ZXJmYWNlIHRoYXQgc3VwcGxpZXMN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBJL08gYWJzdHJhY3Rp b24gdG8gdGhlIGRyaXZlci4NCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg ICBPbmUgb2YgcmVxdWlyZWQgcHJvdG9jb2wgaXMgZm91bmQuDQo+ID4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgICAgTm9uZSBvZiByZXF1aXJlZCBwcm90b2NvbCBpcw0KPiA+IGZv dW5kLg0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtUZXN0Rm9yUmVxdWlyZWRQcm90 b2NvbHMgKA0KPiA+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ ID4gKyAgSU4gRUZJX0hBTkRMRSBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgVUlOVDMyIElkOw0KPiA+ICsgIFVJTlROIEluZGV4Ow0KPiA+ICsgIEVGSV9TVEFUVVMg U3RhdHVzOw0KPiA+ICsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAoc2l6ZW9mIChn UmVxdWlyZWRQcm90b2NvbCkgLyBzaXplb2YNCj4gPiAoUkVERklTSF9ESVNDT1ZFUl9SRVFVSVJF RF9QUk9UT0NPTCkpOyBJbmRleCArKykgew0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJv dG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICBnUmVxdWlyZWRQcm90b2NvbA0KPiA+IFtJbmRleF0uUmVxdWlyZWRT ZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgTlVMTCwN Cj4gPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfVEVTVF9QUk9UT0NPTA0KPiA+ICsgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGdSZXF1aXJlZFByb3Rv Y29sDQo+ID4gW0luZGV4XS5EaXNjb3ZlcmVkUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopICZJZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9D T0xfR0VUX1BST1RPQ09MDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgREVCVUcoKERFQlVHX0VS Uk9SLCAiJWE6ICVzIGlzIGZvdW5kIG9uIHRoaXMgY29udHJvbGxlcg0KPiA+IGhhbmRsZS5cbiIs IF9fRlVOQ1RJT05fXywgZ1JlcXVpcmVkUHJvdG9jb2wgW0luZGV4XS5Qcm90b2NvbE5hbWUpKTsN Cj4gPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgIH0NCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQnVpbGQgdXAgbmV0d29yayBpbnRlcmZhY2UgYW5kIGNyZWF0 ZSBjb3JyZXNwb25kaW5nIHNlcnZpY2UgdGhyb3VnaCB0aGUNCj4gPiBnaXZlbg0KPiA+ICsgIGNv bnRyb2xsZXIgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ID4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09M IGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIFRoZSBo YW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gdGVzdC4NCj4gPiBUaGlzIGhhbmRsZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc3VwcG9ydCBhIHByb3RvY29s DQo+ID4gaW50ZXJmYWNlIHRoYXQgc3VwcGxpZXMNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhbiBJL08gYWJzdHJhY3Rpb24gdG8gdGhlIGRyaXZlci4NCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBPbmUgb2YgcmVxdWlyZWQgcHJvdG9jb2wg aXMgZm91bmQuDQo+ID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICAgTm9uZSBv ZiByZXF1aXJlZCBwcm90b2NvbCBpcw0KPiA+IGZvdW5kLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgICAgIEZhaWxlZCB0byBidWlsZCB1cCBuZXR3b3JrDQo+ID4gaW50ZXJm YWNlLg0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtCdWlsZHVwTmV0d29ya0ludGVy ZmFjZSAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4g PiArICBJTiBFRklfSEFORExFIENvbnRyb2xsZXJIYW5kbGUNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBVSU5UMzIgSWQ7DQo+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+ICsgIEVGSV9SRURGSVNI X0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4gKk5ldHdvcmtJbnRlcmZh Y2U7DQo+ID4gKyAgQk9PTEVBTiBJc05ldzsNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4g PiArICBWT0lEICpUZW1wSW50ZXJmYWNlOw0KPiA+ICsgIFZPSUQgKipJbnRlcmZhY2U7DQo+ID4g KyAgVUlOVDMyICpQcm90b2NvbERpc2NvdmVySWRQdHI7DQo+ID4gKyAgRUZJX0hBTkRMRSBPcGVu RHJpdmVyQWdlbnRIYW5kbGU7DQo+ID4gKyAgRUZJX0hBTkRMRSBPcGVuRHJpdmVyQ29udHJvbGxl ckhhbmRsZTsNCj4gPiArICBFRklfSEFORExFICpIYW5kbGVPZlByb3RvY29sSW50ZXJmYWNlUHRy Ow0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX1JFU1RfRVhfSU5TVEFOQ0VfSU5URVJOQUwN Cj4gPiAqUmVzdEV4SW5zdGFuY2U7DQo+ID4gKyAgRUZJX1RQTCBPbGRUcGw7DQo+ID4gKyAgQk9P TEVBTiBOZXdOZXR3b3JrSW50ZXJmYWNlSW5zdGFsbGVkOw0KPiA+ICsNCj4gPiArICBOZXdOZXR3 b3JrSW50ZXJmYWNlSW5zdGFsbGVkID0gRkFMU0U7DQo+ID4gKyAgSW5kZXggPSAwOw0KPiA+ICsg IGRvIHsNCj4gPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICggLy8gQWxyZWFkeSBp biBsaXN0Pw0KPiA+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgZ1JlcXVpcmVkUHJvdG9jb2wgW0luZGV4XS5EaXNjb3ZlcmVk UHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSWQsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICk7DQo+ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAg ICBJbmRleCArKzsNCj4gPiArICAgICAgaWYgKEluZGV4ID09IChzaXplb2YoZ1JlcXVpcmVkUHJv dG9jb2wpIC8NCj4gPiBzaXplb2YoUkVERklTSF9ESVNDT1ZFUl9SRVFVSVJFRF9QUk9UT0NPTCkp KSB7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgY29udGlu dWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgZ1JlcXVpcmVkUHJvdG9jb2wNCj4gPiBbSW5kZXhdLlJlcXVpcmVk U2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgJlRl bXBJbnRlcmZhY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gKyAgICAgIEluZGV4ICsrOw0KPiA+ICsgICAgICBpZiAoSW5kZXggPT0gKHNpemVv ZihnUmVxdWlyZWRQcm90b2NvbCkgLw0KPiA+IHNpemVvZihSRURGSVNIX0RJU0NPVkVSX1JFUVVJ UkVEX1BST1RPQ09MKSkpIHsNCj4gPiArICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChnUmVxdWlyZWRQcm90 b2NvbCBbSW5kZXhdLlByb3RvY29sVHlwZSAhPSBQcm90b2NvbFR5cGVSZXN0RXgpIHsNCj4gPiAr ICAgICAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTA0KPiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9O RVRXT1JLX0lOVEVSRkFDRV9UUEwpOw0KPiA+ICsgICAgICBTdGF0dXMgPSBDcmVhdGVSZWRmaXNo RGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlKENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gZ1JlcXVpcmVk UHJvdG9jb2wgW0luZGV4XS5Qcm90b2NvbFR5cGUsICZJc05ldywgJk5ldHdvcmtJbnRlcmZhY2Up Ow0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgZ0JT LT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiA+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgICAgTmV0d29ya0ludGVyZmFjZS0+TmV0d29ya1Byb3RvY29sVHlw ZSA9IGdSZXF1aXJlZFByb3RvY29sDQo+ID4gW0luZGV4XS5Qcm90b2NvbFR5cGU7DQo+ID4gKyAg ICAgIE5ldHdvcmtJbnRlcmZhY2UtPk9wZW5Ecml2ZXJBZ2VudEhhbmRsZSA9DQo+ID4gVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZTsNCj4gPiArICAgICAgTmV0d29ya0ludGVyZmFjZS0+T3BlbkRy aXZlckNvbnRyb2xsZXJIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiA+ICsgICAgICBOZXR3 b3JrSW50ZXJmYWNlLT5OZXR3b3JrSW50ZXJmYWNlUHJvdG9jb2xJbmZvLlByb3RvY29sR3VpZCA9 IFwNCj4gPiArICAgICAgICAqZ1JlcXVpcmVkUHJvdG9jb2wgW0luZGV4XS5SZXF1aXJlZFByb3Rv Y29sR3VpZDsNCj4gPiArDQo+ID4gTmV0d29ya0ludGVyZmFjZS0+TmV0d29ya0ludGVyZmFjZVBy b3RvY29sSW5mby5Qcm90b2NvbFNlcnZpY2VHdWlkID0gXA0KPiA+ICsgICAgICAgICpnUmVxdWly ZWRQcm90b2NvbCBbSW5kZXhdLlJlcXVpcmVkU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQ7DQo+ ID4gKyAgICAgIFByb3RvY29sRGlzY292ZXJJZFB0ciA9DQo+ID4gJk5ldHdvcmtJbnRlcmZhY2Ut Pk5ldHdvcmtJbnRlcmZhY2VQcm90b2NvbEluZm8uUHJvdG9jb2xEaXNjb3ZlcklkOw0KPiA+ICsg ICAgICBPcGVuRHJpdmVyQWdlbnRIYW5kbGUgPQ0KPiA+IE5ldHdvcmtJbnRlcmZhY2UtPk9wZW5E cml2ZXJBZ2VudEhhbmRsZTsNCj4gPiArICAgICAgT3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUg PQ0KPiA+IE5ldHdvcmtJbnRlcmZhY2UtPk9wZW5Ecml2ZXJDb250cm9sbGVySGFuZGxlOw0KPiA+ ICsgICAgICBIYW5kbGVPZlByb3RvY29sSW50ZXJmYWNlUHRyID0NCj4gPiAmTmV0d29ya0ludGVy ZmFjZS0NCj4gPk5ldHdvcmtJbnRlcmZhY2VQcm90b2NvbEluZm8uUHJvdG9jb2xDb250cm9sbGVy SGFuZGxlDQo+ID4gOw0KPiA+ICsgICAgICBJbnRlcmZhY2UgPQ0KPiA+ICZOZXR3b3JrSW50ZXJm YWNlLQ0KPiA+TmV0d29ya0ludGVyZmFjZVByb3RvY29sSW5mby5OZXR3b3JrUHJvdG9jb2xJbnRl cmZhYw0KPiA+IGU7DQo+ID4gKyAgICAgIE5ld05ldHdvcmtJbnRlcmZhY2VJbnN0YWxsZWQgPSBU UlVFOw0KPiA+ICsgICAgICBpZiAoSXNOZXcpIHsNCj4gPiArICAgICAgICBJbnNlcnRUYWlsTGlz dCAoJm1FZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlLA0KPiA+ICZOZXR3b3JrSW50 ZXJmYWNlLT5FbnRyeSk7DQo+ID4gKyAgICAgICAgbU51bU5ldHdvcmtJbnRlcmZhY2UgKys7DQo+ ID4gKyAgICAgIH0NCj4gPiArICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiA+ICsg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgLy8gUmVjb3JkIFJFU1RfRVggaW5zdGFuY2UuIFJFU1Rf RVggaXMgY3JlYXRlZCB3aGVuIGNsaW5ldCBhc2tzIGZvcg0KPiA+IFJlZGZpc2ggc2VydmljZSBk aXNjb3ZlcnkuDQo+ID4gKyAgICAgIC8vIFJlZGZpc2ggU2VydmljZSBEaXNjb3ZlciBwcm90b2Nv bCB3aWxsIG1hdGNoIFJFU1QgRVggdG8gdGhlDQo+ID4gY29ycmVzcG9uZGluZyBFRklfUkVERklT SF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5BTA0KPiA+ICsgICAgICAvLyB3aGVu IGRpc2NvdmVyeS4NCj4gPiArDQo+ID4gKyAgICAgIFJlc3RFeEluc3RhbmNlID0NCj4gPiAoRUZJ X1JFREZJU0hfRElTQ09WRVJfUkVTVF9FWF9JTlNUQU5DRV9JTlRFUk5BTA0KPiAqKUFsbG9jYXRl WmVyb1Bvb2wNCj4gPiAoc2l6ZW9mIChFRklfUkVERklTSF9ESVNDT1ZFUl9SRVNUX0VYX0lOU1RB TkNFX0lOVEVSTkFMKSk7DQo+ID4gKyAgICAgIGlmIChSZXN0RXhJbnN0YW5jZSA9PSBOVUxMKSB7 DQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgICB9 DQo+ID4gKyAgICAgIFJlc3RFeEluc3RhbmNlLT5PcGVuRHJpdmVyQWdlbnRIYW5kbGUgPQ0KPiA+ IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGU7DQo+ID4gKyAgICAgIFJlc3RFeEluc3RhbmNlLT5P cGVuRHJpdmVyQ29udHJvbGxlckhhbmRsZSA9IENvbnRyb2xsZXJIYW5kbGU7DQo+ID4gKyAgICAg IFJlc3RFeEluc3RhbmNlLT5SZXN0RXhDb250cm9sbGVySGFuZGxlID0gQ29udHJvbGxlckhhbmRs ZTsNCj4gPiArICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmUmVzdEV4SW5zdGFuY2UtPkVudHJ5 KTsNCj4gPiArICAgICAgSW5zZXJ0VGFpbExpc3QgKCZtRWZpUmVkZmlzaERpc2NvdmVyUmVzdEV4 SW5zdGFuY2UsDQo+ID4gJlJlc3RFeEluc3RhbmNlLT5FbnRyeSk7DQo+ID4gKyAgICAgIG1OdW1S ZXN0RXhJbnN0YW5jZSArKzsNCj4gPiArICAgICAgUHJvdG9jb2xEaXNjb3ZlcklkUHRyID0gJlJl c3RFeEluc3RhbmNlLT5SZXN0RXhJZDsNCj4gPiArICAgICAgT3BlbkRyaXZlckFnZW50SGFuZGxl ID0NCj4gPiBSZXN0RXhJbnN0YW5jZS0+T3BlbkRyaXZlckFnZW50SGFuZGxlOw0KPiA+ICsgICAg ICBPcGVuRHJpdmVyQ29udHJvbGxlckhhbmRsZSA9DQo+ID4gUmVzdEV4SW5zdGFuY2UtPk9wZW5E cml2ZXJDb250cm9sbGVySGFuZGxlOw0KPiA+ICsgICAgICBIYW5kbGVPZlByb3RvY29sSW50ZXJm YWNlUHRyID0NCj4gPiAmUmVzdEV4SW5zdGFuY2UtPlJlc3RFeENoaWxkSGFuZGxlOw0KPiA+ICsg ICAgICBJbnRlcmZhY2UgPSAoVk9JRCAqKikmUmVzdEV4SW5zdGFuY2UtPlJlc3RFeFByb3RvY29s SW50ZXJmYWNlOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJv dG9jb2xJbnRlcmZhY2UgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZDb250cm9sbGVySGFu ZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIGdSZXF1aXJlZFByb3RvY29sIFtJbmRleF0u RGlzY292ZXJlZFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICBFRklfTkFU SVZFX0lOVEVSRkFDRSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBQcm90b2NvbERpc2NvdmVy SWRQdHINCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBJbmRleCArKzsNCj4gPiArICAgICAgaWYgKEluZGV4 ID09IChzaXplb2YoZ1JlcXVpcmVkUHJvdG9jb2wpIC8NCj4gPiBzaXplb2YoUkVERklTSF9ESVND T1ZFUl9SRVFVSVJFRF9QUk9UT0NPTCkpKSB7DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgIH0NCj4gPiArICAgICAgY29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgLy8gQ3JlYXRlIHNlcnZpY2UgYmluZGluZyBjaGlsZCBhbmQgb3BlbiBpdCBCWV9EUklW RVIuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgU3RhdHVzID0gTmV0TGliQ3JlYXRlU2VydmljZUNo aWxkICgNCj4gPiArICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgICAgICAg ICAgICAgIFRoaXMtPkltYWdlSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgIGdSZXF1aXJlZFBy b3RvY29sDQo+ID4gW0luZGV4XS5SZXF1aXJlZFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0K PiA+ICsgICAgICAgICAgICAgIEhhbmRsZU9mUHJvdG9jb2xJbnRlcmZhY2VQdHINCj4gPiArICAg ICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAr ICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICpIYW5kbGVPZlByb3RvY29sSW50ZXJmYWNlUHRyLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgIGdSZXF1aXJlZFByb3RvY29sIFtJbmRleF0uUmVxdWlyZWRQcm90b2NvbEd1aWQsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg IE9wZW5Ecml2ZXJBZ2VudEhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBPcGVuRHJp dmVyQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9Q Uk9UT0NPTF9CWV9EUklWRVINCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAg ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgIGlmIChFZmlSZWRmaXNo RGlzY292ZXJQcm90b2NvbEhhbmRsZSA9PSBOVUxMICYmDQo+ID4gKyAgICAgICAgICAgIChnUmVx dWlyZWRQcm90b2NvbCBbSW5kZXhdLlByb3RvY29sVHlwZSA9PQ0KPiA+IFByb3RvY29sVHlwZVJl c3RFeCkgJiYNCj4gPiArICAgICAgICAgICAgIUlzTGlzdEVtcHR5ICgmbUVmaVJlZGZpc2hEaXNj b3Zlck5ldHdvcmtJbnRlcmZhY2UpDQo+ID4gKyAgICAgICAgICAgICkgew0KPiA+ICsgICAgICAg ICAgLy8gSW5zdGFsbCB0aGUgZmlzcnQgUmVkZmlzaCBEaXNjb3ZlciBQcm90b2NvbCB3aGVuIEVG SSBSRVNUIEVYDQo+ID4gcHJvdGNvbCBpcyBkaXNjb3ZlcmVkLg0KPiA+ICsgICAgICAgICAgLy8g VGhpcyBlbnN1cmVzIEVGSSBSRVNUIEVYIGlzIHJlYWR5IHdoaWxlDQo+ID4gRUZJX1JFREZJU0hf RElTQ09WRVJfUFJPVE9DT0wgY29uc3VtZXIgYWNxdWlyZXMNCj4gPiArICAgICAgICAgIC8vIFJl ZGZpc2ggc2VyaXZjZSBvdmVyIG5ldHdvcmsgaW50ZXJmYWNlLg0KPiA+ICsNCj4gPiArICAgICAg ICAgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAmRWZpUmVkZmlzaERpc2NvdmVyUHJvdG9jb2xIYW5kbGUsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlSZWRmaXNoRGlzY292ZXJQcm90b2Nv bEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZB Q0UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKikmbVJlZGZpc2hEaXNj b3Zlcg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgfSBl bHNlIGlmIChFZmlSZWRmaXNoRGlzY292ZXJQcm90b2NvbEhhbmRsZSAhPSBOVUxMICYmDQo+ID4g TmV3TmV0d29ya0ludGVyZmFjZUluc3RhbGxlZCkgew0KPiA+ICsgICAgICAgICAgIFN0YXR1cyA9 IGdCUy0+UmVpbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRWZpUmVkZmlzaERpc2NvdmVyUHJvdG9jb2xIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaVJlZGZpc2hEaXNjb3ZlclByb3RvY29sR3VpZCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWT0lEICopJm1SZWRmaXNoRGlzY292 ZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKSZtUmVkZmlzaERp c2NvdmVyDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICAg ICAgIE5ld05ldHdvcmtJbnRlcmZhY2VJbnN0YWxsZWQgPSBGQUxTRTsNCj4gPiArICAgICAgICB9 DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgIEluZGV4ICsrOw0KPiA+ICsgICAgICBpZiAoSW5kZXggPT0gKHNpemVv ZihnUmVxdWlyZWRQcm90b2NvbCkgLw0KPiA+IHNpemVvZihSRURGSVNIX0RJU0NPVkVSX1JFUVVJ UkVEX1BST1RPQ09MKSkpIHsNCj4gPiArICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ ICsgICAgICBjb250aW51ZTsNCj4gPiArICAgIH0NCj4gPiArICB9IHdoaWxlIChJbmRleCA8IChz aXplb2YoZ1JlcXVpcmVkUHJvdG9jb2wpIC8NCj4gPiBzaXplb2YoUkVERklTSF9ESVNDT1ZFUl9S RVFVSVJFRF9QUk9UT0NPTCkpKTsNCj4gPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ ICt9DQo+ID4gKy8qKg0KPiA+ICsgIENsb3NlIHRoZSBwcm90b2NvbCBvcGVuZWQgZm9yIFJlZGZp c2ggZGlzY292ZXJ5LiBUaGlzIGZ1bmN0aW9uIGFsc28NCj4gPiBkZXN0b3JpZXMNCj4gPiArICB0 aGUgbmV0d29yayBzZXJ2aWNlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpc0JpbmRp bmdQcm90b2NvbCAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiA+IEVGSV9EUklWRVJfQklORElOR19Q Uk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAg ICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjb250cm9sbGVyIHRvDQo+ID4gdGVzdC4gVGhpcyBoYW5k bGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHN1cHBv cnQgYSBwcm90b2NvbA0KPiA+IGludGVyZmFjZSB0aGF0IHN1cHBsaWVzDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gSS9PIGFic3RyYWN0aW9uIHRvIHRoZQ0K PiA+IGRyaXZlci4NCj4gPiArICBAcGFyYW1baW5dICBUaGlzUmVxdWlyZWRQcm90b2NvbCAgICBQ b2ludGVyIHRvIHRoZSBpbnN0YW5jZSBvZg0KPiA+IFJFREZJU0hfRElTQ09WRVJfUkVRVUlSRURf UFJPVE9DT0wuDQo+ID4gKyAgQHBhcmFtW2luXSAgRHJpdmVyQWdlbnRIYW5kbGUgICAgICBEcml2 ZXIgYWdlbnQgaGFuZGxlIHdoaWNoIHVzZWQNCj4gPiB0byBvcGVuIHByb3RvY29sIGVhcmxpZXIu DQo+ID4gKyAgQHBhcmFtW2luXSAgRHJpdmVyQ29udHJvbGxlckhhbmRsZSBEcml2ZXIgY29udHJv bGxlciBoYW5kbGUgd2hpY2ggdXNlZA0KPiA+IHRvIG9wZW4gcHJvdG9jb2wgZWFybGllci4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICBQcm9yb2NvbCBp cyBjbG9zZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAg ICAgICAgICAgUHJvcm9jb2wgaXMgY2xvc2VkDQo+ID4gdW5zdWNjZXNzZnVsbHkuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtDbG9zZVByb3RvY29sU2VydmljZSAoDQo+ ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpc0JpbmRpbmdQcm90b2Nv bCwNCj4gPiArICBJTiBFRklfSEFORExFICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOIFJF REZJU0hfRElTQ09WRVJfUkVRVUlSRURfUFJPVE9DT0wgKlRoaXNSZXF1aXJlZFByb3RvY29sLA0K PiA+ICsgIElOIEVGSV9IQU5ETEUgRHJpdmVyQWdlbnRIYW5kbGUsDQo+ID4gKyAgSU4gRUZJX0hB TkRMRSBEcml2ZXJDb250cm9sbGVySGFuZGxlDQo+ID4gKykNCj4gPiArew0KPiA+ICsgIEVGSV9T VEFUVVMgU3RhdHVzOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiA+ICsgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAg ICAgICAgICAgICAgIFRoaXNSZXF1aXJlZFByb3RvY29sLT5SZXF1aXJlZFByb3RvY29sR3VpZCwN Cj4gPiArICAgICAgICAgICAgICAgICAgIERyaXZlckFnZW50SGFuZGxlLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgRHJpdmVyQ29udHJvbGxlckhhbmRsZQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgKTsNCj4gPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgTmV0TGli RGVzdHJveVNlcnZpY2VDaGlsZCgNCj4gPiArICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiAr ICAgICAgVGhpc0JpbmRpbmdQcm90b2NvbC0+SW1hZ2VIYW5kbGUsDQo+ID4gKyAgICAgIFRoaXNS ZXF1aXJlZFByb3RvY29sLT5SZXF1aXJlZFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ ICsgICAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gKyAgICAgICk7DQo+ID4gKyAgfQ0KPiA+ICsg IHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArLyoqDQo+ID4gKyAgU3RvcCB0aGUgc2Vydmlj ZXMgb24gbmV0d29yayBpbnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXNC aW5kaW5nUHJvdG9jb2wgIEEgcG9pbnRlciB0byB0aGUNCj4gPiBFRklfRFJJVkVSX0JJTkRJTkdf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAg ICAgVGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbGxlciB0byB0ZXN0Lg0KPiA+IFRoaXMgaGFuZGxl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBzdXBwb3J0IGEg cHJvdG9jb2wNCj4gPiBpbnRlcmZhY2UgdGhhdCBzdXBwbGllcw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUgZHJpdmVyLg0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgIE9uZSBvZiByZXF1aXJlZCBw cm90b2NvbCBpcyBmb3VuZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAg ICBGYWlsZSB0byBzdG9wIHRoZSBzZXJ2aWNlcyBvbg0KPiA+IG5ldHdvcmsgaW50ZXJmYWNlLg0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtTdG9wU2VydmljZU9uTmV0d29ya0ludGVy ZmFjZSAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpc0JpbmRp bmdQcm90b2NvbCwNCj4gPiArICBJTiBFRklfSEFORExFIENvbnRyb2xsZXJIYW5kbGUNCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBVSU5UMzIgSW5kZXg7DQo+ID4gKyAgRUZJX1NUQVRVUyBTdGF0 dXM7DQo+ID4gKyAgVk9JRCAqSW50ZXJmYWNlOw0KPiA+ICsgIEVGSV9UUEwgT2xkVHBsOw0KPiA+ ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX05FVFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ID4g KlRoaXNOZXR3b3JrSW50ZXJmYWNlOw0KPiA+ICsgIEVGSV9SRURGSVNIX0RJU0NPVkVSX1JFU1Rf RVhfSU5TVEFOQ0VfSU5URVJOQUwNCj4gPiAqUmVzdEV4SW5zdGFuY2U7DQo+ID4gKw0KPiA+ICsg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IChzaXplb2YgKGdSZXF1aXJlZFByb3RvY29sKSAvIHNp emVvZg0KPiA+IChSRURGSVNIX0RJU0NPVkVSX1JFUVVJUkVEX1BST1RPQ09MKSk7IEluZGV4ICsr KSB7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gPiArICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgZ1Jl cXVpcmVkUHJvdG9jb2wgW0luZGV4XS5SZXF1aXJlZFByb3RvY29sR3VpZCwNCj4gPiArICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJkludGVyZmFjZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgaWYgKGdS ZXF1aXJlZFByb3RvY29sIFtJbmRleF0uUHJvdG9jb2xUeXBlICE9IFByb3RvY29sVHlwZVJlc3RF eCkgew0KPiA+ICsgICAgICAgIGlmIChJc0xpc3RFbXB0eSAoJm1FZmlSZWRmaXNoRGlzY292ZXJO ZXR3b3JrSW50ZXJmYWNlKSkgew0KPiA+ICsgICAgICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIE9sZFRwbCA9IGdCUy0+UmFpc2VUUEwNCj4g PiAoRUZJX1JFREZJU0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfVFBMKTsNCj4gPiArICAg ICAgICBUaGlzTmV0d29ya0ludGVyZmFjZSA9DQo+ID4gKEVGSV9SRURGSVNIX0RJU0NPVkVSX05F VFdPUktfSU5URVJGQUNFX0lOVEVSTkFMDQo+ICopR2V0Rmlyc3ROb2RlDQo+ID4gKCZtRWZpUmVk ZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSk7DQo+ID4gKyAgICAgICAgd2hpbGUgKFRSVUUp IHsNCj4gPiArICAgICAgICAgIGlmDQo+ID4gKFRoaXNOZXR3b3JrSW50ZXJmYWNlLQ0KPiA+TmV0 d29ya0ludGVyZmFjZVByb3RvY29sSW5mby5Qcm90b2NvbENvbnRyb2xsZXJIYW4NCj4gPiBkbGUg PT0gQ29udHJvbGxlckhhbmRsZSkgew0KPiA+ICsNCj4gPiArICAgICAgICAgICAgU3RhdHVzID0g Q2xvc2VQcm90b2NvbFNlcnZpY2UgKCAvLyBDbG9zZSBwcm90b2NvbCBhbmQgZGVzdHJveQ0KPiA+ IHNlcnZpY2UuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgVGhpc0JpbmRpbmdQcm90b2Nv bCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICZnUmVxdWlyZWRQcm90b2NvbCBbSW5kZXhdLA0KPiA+ICsN Cj4gPiBUaGlzTmV0d29ya0ludGVyZmFjZS0+T3BlbkRyaXZlckFnZW50SGFuZGxlLA0KPiA+ICsN Cj4gPiBUaGlzTmV0d29ya0ludGVyZmFjZS0+T3BlbkRyaXZlckNvbnRyb2xsZXJIYW5kbGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICAgICAgICBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgICAgICAgIFN0YXR1cyA9IERlc3Ryb3lSZWRm aXNoTmV0d3Jva0ludGVyZmFjZQ0KPiA+IChUaGlzTmV0d29ya0ludGVyZmFjZSk7DQo+ID4gKyAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0K PiA+ICsgICAgICAgICAgICAvLyBSZWluc3RhbGwgUmVkZmlzaCBEaXNjb3ZlciBwcm90b2NvbCB0 byBub3RpZnkgbmV0d29yaw0KPiA+ICsgICAgICAgICAgICAvLyBpbnRlcmZhY2UgY2hhbmdlLg0K PiA+ICsNCj4gPiArICAgICAgICAgICAgU3RhdHVzID0gZ0JTLT5SZWluc3RhbGxQcm90b2NvbElu dGVyZmFjZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlSZWRmaXNoRGlz Y292ZXJQcm90b2NvbEhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn RWZpUmVkZmlzaERpc2NvdmVyUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKFZPSUQgKikmbVJlZGZpc2hEaXNjb3ZlciwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChWT0lEICopJm1SZWRmaXNoRGlzY292ZXINCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiArICAgICAgICAgICAgICBERUJVRygoREVCVUdfRVJST1IsICIlYTogUmVpbnN0 YWxsDQo+ID4gZ0VmaVJlZGZpc2hEaXNjb3ZlclByb3RvY29sR3VpZCBmYWlsLiIsIF9fRlVOQ1RJ T05fXykpOw0KPiA+ICsgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBTdGF0 dXM7DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICBpZiAoSXNOb2RlQXRFbmQgKCZt RWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSwNCj4gPiAmVGhpc05ldHdvcmtJbnRl cmZhY2UtPkVudHJ5KSkgew0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAg IH0NCj4gPiArICAgICAgICAgIFRoaXNOZXR3b3JrSW50ZXJmYWNlID0NCj4gPiAoRUZJX1JFREZJ U0hfRElTQ09WRVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gPiAqKUdldE5leHROb2Rl KCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSwNCj4gPiAmVGhpc05ldHdvcmtJ bnRlcmZhY2UtPkVudHJ5KTsNCj4gPiArICAgICAgICB9Ow0KPiA+ICsgICAgICAgIGdCUy0+UmVz dG9yZVRQTCAoT2xkVHBsKTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBpZiAo SXNMaXN0RW1wdHkgKCZtRWZpUmVkZmlzaERpc2NvdmVyUmVzdEV4SW5zdGFuY2UpKSB7DQo+ID4g KyAgICAgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICAgICAgICB9DQo+ID4gKyAg ICAgICAgT2xkVHBsID0gZ0JTLT5SYWlzZVRQTA0KPiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9O RVRXT1JLX0lOVEVSRkFDRV9UUEwpOw0KPiA+ICsgICAgICAgIFJlc3RFeEluc3RhbmNlID0NCj4g PiAoRUZJX1JFREZJU0hfRElTQ09WRVJfUkVTVF9FWF9JTlNUQU5DRV9JTlRFUk5BTCAqKUdldEZp cnN0Tm9kZQ0KPiA+ICgmbUVmaVJlZGZpc2hEaXNjb3ZlclJlc3RFeEluc3RhbmNlKTsNCj4gPiAr ICAgICAgICB3aGlsZSAoVFJVRSkgew0KPiA+ICsgICAgICAgICAgaWYgKFJlc3RFeEluc3RhbmNl LT5SZXN0RXhDaGlsZEhhbmRsZSA9PSBDb250cm9sbGVySGFuZGxlKSB7DQo+ID4gKyAgICAgICAg ICAgIFN0YXR1cyA9IENsb3NlUHJvdG9jb2xTZXJ2aWNlICggLy8gQ2xvc2UgUkVTVF9FWCBwcm90 b2NvbC4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBUaGlzQmluZGluZ1Byb3RvY29sLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgJmdSZXF1aXJlZFByb3RvY29sIFtJbmRleF0sDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgUmVzdEV4SW5zdGFuY2UtPk9wZW5Ecml2ZXJBZ2VudEhhbmRsZSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBSZXN0RXhJbnN0YW5jZS0+T3BlbkRyaXZlckNv bnRyb2xsZXJIYW5kbGUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAg ICAgICAgICBSZW1vdmVFbnRyeUxpc3QgKCZSZXN0RXhJbnN0YW5jZS0+RW50cnkpOw0KPiA+ICsg ICAgICAgICAgICBGcmVlUG9vbCAoKFZPSUQgKilSZXN0RXhJbnN0YW5jZSk7DQo+ID4gKyAgICAg ICAgICAgIG1OdW1SZXN0RXhJbnN0YW5jZSAtLTsNCj4gPiArICAgICAgICAgICAgZ0JTLT5SZXN0 b3JlVFBMIChPbGRUcGwpOw0KPiA+ICsgICAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsg ICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgaWYgKElzTm9kZUF0RW5kICgmbUVmaVJlZGZpc2hE aXNjb3ZlclJlc3RFeEluc3RhbmNlLA0KPiA+ICZSZXN0RXhJbnN0YW5jZS0+RW50cnkpKSB7DQo+ ID4gKyAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg UmVzdEV4SW5zdGFuY2UgPQ0KPiA+IChFRklfUkVERklTSF9ESVNDT1ZFUl9SRVNUX0VYX0lOU1RB TkNFX0lOVEVSTkFMDQo+ID4gKilHZXROZXh0Tm9kZSgmbUVmaVJlZGZpc2hEaXNjb3ZlclJlc3RF eEluc3RhbmNlLA0KPiA+ICZSZXN0RXhJbnN0YW5jZS0+RW50cnkpOw0KPiA+ICsgICAgICAgIH07 DQo+ID4gKyAgICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPbGRUcGwpOw0KPiA+ICsgICAgICB9DQo+ ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICt9 DQo+ID4gKy8qKg0KPiA+ICsgIFRlc3RzIHRvIHNlZSBpZiB0aGlzIGRyaXZlciBzdXBwb3J0cyBh IGdpdmVuIGNvbnRyb2xsZXIuIElmIGEgY2hpbGQNCj4gZGV2aWNlIGlzDQo+ID4gcHJvdmlkZWQs DQo+ID4gKyAgaXQgZnVydGhlciB0ZXN0cyB0byBzZWUgaWYgdGhpcyBkcml2ZXIgc3VwcG9ydHMg Y3JlYXRpbmcgYSBoYW5kbGUgZm9yDQo+IHRoZQ0KPiA+IHNwZWNpZmllZCBjaGlsZCBkZXZpY2Uu DQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNlZSBpZiB0aGUgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzIHN1cHBvcnRzDQo+IHRoZQ0KPiA+IGRldmljZSBzcGVjaWZpZWQg YnkNCj4gPiArICBDb250cm9sbGVySGFuZGxlLiBEcml2ZXJzIHdpbGwgdHlwaWNhbGx5IHVzZSB0 aGUgZGV2aWNlIHBhdGggYXR0YWNoZWQNCj4gdG8NCj4gPiArICBDb250cm9sbGVySGFuZGxlIGFu ZC9vciB0aGUgc2VydmljZXMgZnJvbSB0aGUgYnVzIEkvTyBhYnN0cmFjdGlvbg0KPiA+IGF0dGFj aGVkIHRvDQo+ID4gKyAgQ29udHJvbGxlckhhbmRsZSB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZl ciBzdXBwb3J0cyBDb250cm9sbGVySGFuZGxlLg0KPiA+IFRoaXMgZnVuY3Rpb24NCj4gPiArICBt YXkgYmUgY2FsbGVkIG1hbnkgdGltZXMgZHVyaW5nIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uLiBJ biBvcmRlciB0bw0KPiByZWR1Y2UNCj4gPiBib290IHRpbWVzLCB0aGUgdGVzdHMNCj4gPiArICBw ZXJmb3JtZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHZlcnkgc21hbGwsIGFuZCB0YWtlIGFz IGxpdHRsZSB0aW1lDQo+IGFzDQo+ID4gcG9zc2libGUgdG8gZXhlY3V0ZS4gVGhpcw0KPiA+ICsg IGZ1bmN0aW9uIG11c3Qgbm90IGNoYW5nZSB0aGUgc3RhdGUgb2YgYW55IGhhcmR3YXJlIGRldmlj ZXMsIGFuZCB0aGlzDQo+ID4gZnVuY3Rpb24gbXVzdCBiZSBhd2FyZSB0aGF0IHRoZQ0KPiA+ICsg IGRldmljZSBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBtYXkgYWxyZWFkeSBiZSBtYW5h Z2VkIGJ5IHRoZQ0KPiA+IHNhbWUgZHJpdmVyIG9yIGENCj4gPiArICBkaWZmZXJlbnQgZHJpdmVy LiBUaGlzIGZ1bmN0aW9uIG11c3QgbWF0Y2ggaXRzIGNhbGxzIHRvIEFsbG9jYXRlUGFnZXMoKQ0K PiB3aXRoDQo+ID4gRnJlZVBhZ2VzKCksDQo+ID4gKyAgQWxsb2NhdGVQb29sKCkgd2l0aCBGcmVl UG9vbCgpLCBhbmQgT3BlblByb3RvY29sKCkgd2l0aA0KPiBDbG9zZVByb3RvY29sKCkuDQo+ID4g KyAgQmVjYXVzZSBDb250cm9sbGVySGFuZGxlIG1heSBoYXZlIGJlZW4gcHJldmlvdXNseSBzdGFy dGVkIGJ5IHRoZQ0KPiBzYW1lDQo+ID4gZHJpdmVyLCBpZiBhIHByb3RvY29sIGlzDQo+ID4gKyAg YWxyZWFkeSBpbiB0aGUgb3BlbmVkIHN0YXRlLCB0aGVuIGl0IG11c3Qgbm90IGJlIGNsb3NlZCB3 aXRoDQo+ID4gQ2xvc2VQcm90b2NvbCgpLiBUaGlzIGlzIHJlcXVpcmVkDQo+ID4gKyAgdG8gZ3Vh cmFudGVlIHRoZSBzdGF0ZSBvZiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBtb2RpZmllZCBieSB0 aGlzDQo+ID4gZnVuY3Rpb24uDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gPiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgVGhl IGhhbmRsZSBvZiB0aGUgY29udHJvbGxlciB0byB0ZXN0Lg0KPiA+IFRoaXMgaGFuZGxlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBzdXBwb3J0IGEgcHJvdG9j b2wNCj4gPiBpbnRlcmZhY2UgdGhhdCBzdXBwbGllcw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFuIEkvTyBhYnN0cmFjdGlvbiB0byB0aGUgZHJpdmVyLg0KPiA+ICsg IEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggIEEgcG9pbnRlciB0byB0aGUgcmVtYWlu aW5nIHBvcnRpb24NCj4gPiBvZiBhIGRldmljZSBwYXRoLiAgVGhpcw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBpcyBpZ25vcmVkIGJ5IGRldmljZQ0K PiA+IGRyaXZlcnMsIGFuZCBpcyBvcHRpb25hbCBmb3IgYnVzDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gRm9yIGJ1cyBkcml2ZXJzLCBpZiB0aGlzDQo+ ID4gcGFyYW1ldGVyIGlzIG5vdCBOVUxMLCB0aGVuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIGJ1cyBkcml2ZXIgbXVzdCBkZXRlcm1pbmUgaWYNCj4gPiB0aGUg YnVzIGNvbnRyb2xsZXIgc3BlY2lmaWVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgdGhlDQo+ID4gY2hpbGQgY29udHJvbGxl ciBzcGVjaWZpZWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBS ZW1haW5pbmdEZXZpY2VQYXRoIGFyZQ0KPiA+IGJvdGggc3VwcG9ydGVkIGJ5IHRoaXMNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMgZHJpdmVyLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICBUaGUgZGV2aWNlIHNwZWNpZmll ZCBieQ0KPiA+IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVtYWluaW5nRGV2aWNlUGF0aCBpcw0KPiA+IHN1cHBvcnRlZCBieSB0 aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzLg0KPiA+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlf U1RBUlRFRCAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5DQo+ID4gQ29udHJvbGxlckhhbmRs ZSBhbmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1haW5pbmdE ZXZpY2VQYXRoIGlzIGFscmVhZHkNCj4gPiBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXINCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4N Cj4gPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEICAgICAgICBUaGUgZGV2aWNlIHNwZWNp ZmllZCBieQ0KPiA+IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVtYWluaW5nRGV2aWNlUGF0aCBpcyBhbHJlYWR5DQo+ID4gYmVp bmcgbWFuYWdlZCBieSBhIGRpZmZlcmVudA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRyaXZlciBvciBhbiBhcHBsaWNhdGlvbiB0aGF0DQo+ID4gcmVxdWlyZXMgZXhj bHVzaXZlIGFjY2Vzcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD dXJyZW50bHkgbm90IGltcGxlbWVudGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgICAgIFRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5DQo+ID4gQ29udHJvbGxlckhhbmRsZSBh bmQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1haW5pbmdEZXZp Y2VQYXRoIGlzIG5vdA0KPiA+IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzLg0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUmVkZmlz aERpc2NvdmVyRHJpdmVyQmluZGluZ1N1cHBvcnRlZCAoDQo+ID4gKyAgSU4gRUZJX0RSSVZFUl9C SU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aCBPUFRJT05BTA0KPiA+ICsgICkNCj4gPiArew0K PiA+ICsgIHJldHVybiBUZXN0Rm9yUmVxdWlyZWRQcm90b2NvbHMgKFRoaXMsIENvbnRyb2xsZXJI YW5kbGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTdGFydHMgYSBkZXZpY2Ug Y29udHJvbGxlciBvciBhIGJ1cyBjb250cm9sbGVyLg0KPiA+ICsNCj4gPiArICBUaGUgU3RhcnQo KSBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbnZva2VkIGZyb20gdGhlIEVGSSBib290DQo+ IHNlcnZpY2UNCj4gPiBDb25uZWN0Q29udHJvbGxlcigpLg0KPiA+ICsgIEFzIGEgcmVzdWx0LCBt dWNoIG9mIHRoZSBlcnJvciBjaGVja2luZyBvbiB0aGUgcGFyYW1ldGVycyB0byBTdGFydCgpDQo+ IGhhcw0KPiA+IGJlZW4gbW92ZWQgaW50byB0aGlzDQo+ID4gKyAgY29tbW9uIGJvb3Qgc2Vydmlj ZS4gSXQgaXMgbGVnYWwgdG8gY2FsbCBTdGFydCgpIGZyb20gb3RoZXIgbG9jYXRpb25zLA0KPiA+ ICsgIGJ1dCB0aGUgZm9sbG93aW5nIGNhbGxpbmcgcmVzdHJpY3Rpb25zIG11c3QgYmUgZm9sbG93 ZWQsIG9yIHRoZSBzeXN0ZW0NCj4gPiBiZWhhdmlvciB3aWxsIG5vdCBiZSBkZXRlcm1pbmlzdGlj Lg0KPiA+ICsgIDEuIENvbnRyb2xsZXJIYW5kbGUgbXVzdCBiZSBhIHZhbGlkIEVGSV9IQU5ETEUu DQo+ID4gKyAgMi4gSWYgUmVtYWluaW5nRGV2aWNlUGF0aCBpcyBub3QgTlVMTCwgdGhlbiBpdCBt dXN0IGJlIGEgcG9pbnRlciB0byBhDQo+ID4gbmF0dXJhbGx5IGFsaWduZWQNCj4gPiArICAgICBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wuDQo+ID4gKyAgMy4gUHJpb3IgdG8gY2FsbGluZyBTdGFy dCgpLCB0aGUgU3VwcG9ydGVkKCkgZnVuY3Rpb24gZm9yIHRoZSBkcml2ZXINCj4gc3BlY2lmaWVk DQo+ID4gYnkgVGhpcyBtdXN0DQo+ID4gKyAgICAgaGF2ZSBiZWVuIGNhbGxlZCB3aXRoIHRoZSBz YW1lIGNhbGxpbmcgcGFyYW1ldGVycywgYW5kIFN1cHBvcnRlZCgpDQo+ID4gbXVzdCBoYXZlIHJl dHVybmVkIEVGSV9TVUNDRVNTLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ID4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RP Q09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIFRo ZSBoYW5kbGUgb2YgdGhlIGNvbnRyb2xsZXIgdG8gc3RhcnQuDQo+ID4gVGhpcyBoYW5kbGUNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHN1cHBvcnQgYSBwcm90 b2NvbA0KPiA+IGludGVyZmFjZSB0aGF0IHN1cHBsaWVzDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYW4gSS9PIGFic3RyYWN0aW9uIHRvIHRoZSBkcml2ZXIuDQo+ID4g KyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAgQSBwb2ludGVyIHRvIHRoZSByZW1h aW5pbmcgcG9ydGlvbg0KPiA+IG9mIGEgZGV2aWNlIHBhdGguICBUaGlzDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzIGlnbm9yZWQgYnkgZGV2aWNl DQo+ID4gZHJpdmVycywgYW5kIGlzIG9wdGlvbmFsIGZvciBidXMNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzLiBGb3IgYSBidXMgZHJpdmVyLCBpZiB0aGlz DQo+ID4gcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gaGFuZGxlcw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgdGhlIGNoaWxkcmVuIG9mIENvbnRyb2xsZXIN Cj4gPiBhcmUgY3JlYXRlZCBieSB0aGlzIGRyaXZlci4NCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3QgTlVMTA0KPiA+IGFuZCB0 aGUgZmlyc3QgRGV2aWNlIFBhdGggTm9kZSBpcw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5vdCB0aGUgRW5kIG9mIERldmljZSBQYXRoIE5vZGUsDQo+ID4gdGhlbiBv bmx5IHRoZSBoYW5kbGUgZm9yIHRoZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoaWxkIGRldmljZSBzcGVjaWZpZWQgYnkgdGhlIGZpcnN0DQo+ID4gRGV2aWNlIFBh dGggTm9kZSBvZg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFp bmluZ0RldmljZVBhdGggaXMgY3JlYXRlZA0KPiA+IGJ5IHRoaXMgZHJpdmVyLg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaXJzdCBEZXZpY2UgUGF0aCBO b2RlIG9mDQo+ID4gUmVtYWluaW5nRGV2aWNlUGF0aCBpcw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoZSBFbmQgb2YgRGV2aWNlIFBhdGggTm9kZSwgbm8NCj4gPiBj aGlsZCBoYW5kbGUgaXMgY3JlYXRlZCBieSB0aGlzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHJpdmVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgICBUaGUgZGV2aWNlIHdhcyBzdGFydGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgICAgIFRoZSBkZXZpY2UgY291bGQgbm90IGJlIHN0YXJ0ZWQNCj4g PiBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4NCj4gPiAr ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICBUaGUgcmVxdWVzdCBjb3VsZCBub3Qg YmUNCj4gPiBjb21wbGV0ZWQgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ID4gKyAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICAgVGhlIGRyaXZlciBmYWlsZGVkIHRvIHN0YXJ0 IHRoZQ0KPiA+IGRldmljZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtSZWRmaXNoRGlzY292ZXJEcml2ZXJCaW5kaW5nU3RhcnQgKA0KPiA+ICsg IElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGggT1BUSU9OQUwNCj4g PiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gQnVpbGR1cE5ldHdvcmtJbnRlcmZhY2UgKFRo aXMsIENvbnRyb2xsZXJIYW5kbGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBT dG9wcyBhIGRldmljZSBjb250cm9sbGVyIG9yIGEgYnVzIGNvbnRyb2xsZXIuDQo+ID4gKw0KPiA+ ICsgIFRoZSBTdG9wKCkgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW52b2tlZCBmcm9tIHRo ZSBFRkkgYm9vdCBzZXJ2aWNlDQo+ID4gRGlzY29ubmVjdENvbnRyb2xsZXIoKS4NCj4gPiArICBB cyBhIHJlc3VsdCwgbXVjaCBvZiB0aGUgZXJyb3IgY2hlY2tpbmcgb24gdGhlIHBhcmFtZXRlcnMg dG8gU3RvcCgpIGhhcw0KPiA+IGJlZW4gbW92ZWQNCj4gPiArICBpbnRvIHRoaXMgY29tbW9uIGJv b3Qgc2VydmljZS4gSXQgaXMgbGVnYWwgdG8gY2FsbCBTdG9wKCkgZnJvbSBvdGhlcg0KPiBsb2Nh dGlvbnMsDQo+ID4gKyAgYnV0IHRoZSBmb2xsb3dpbmcgY2FsbGluZyByZXN0cmljdGlvbnMgbXVz dCBiZSBmb2xsb3dlZCwgb3IgdGhlIHN5c3RlbQ0KPiA+IGJlaGF2aW9yIHdpbGwgbm90IGJlIGRl dGVybWluaXN0aWMuDQo+ID4gKyAgMS4gQ29udHJvbGxlckhhbmRsZSBtdXN0IGJlIGEgdmFsaWQg RUZJX0hBTkRMRSB0aGF0IHdhcyB1c2VkIG9uIGENCj4gPiBwcmV2aW91cyBjYWxsIHRvIHRoaXMN Cj4gPiArICAgICBzYW1lIGRyaXZlcidzIFN0YXJ0KCkgZnVuY3Rpb24uDQo+ID4gKyAgMi4gVGhl IGZpcnN0IE51bWJlck9mQ2hpbGRyZW4gaGFuZGxlcyBvZiBDaGlsZEhhbmRsZUJ1ZmZlciBtdXN0 IGFsbCBiZQ0KPiBhDQo+ID4gdmFsaWQNCj4gPiArICAgICBFRklfSEFORExFLiBJbiBhZGRpdGlv biwgYWxsIG9mIHRoZXNlIGhhbmRsZXMgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZA0KPiA+IGluIHRo aXMgZHJpdmVyJ3MNCj4gPiArICAgICBTdGFydCgpIGZ1bmN0aW9uLCBhbmQgdGhlIFN0YXJ0KCkg ZnVuY3Rpb24gbXVzdCBoYXZlIGNhbGxlZA0KPiA+IE9wZW5Qcm90b2NvbCgpIG9uDQo+ID4gKyAg ICAgQ29udHJvbGxlckhhbmRsZSB3aXRoIGFuIEF0dHJpYnV0ZSBvZg0KPiA+IEVGSV9PUEVOX1BS T1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gPiBFRklfRFJJVkVSX0JJTkRJTkdf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAg QSBoYW5kbGUgdG8gdGhlIGRldmljZSBiZWluZyBzdG9wcGVkLg0KPiA+IFRoZSBoYW5kbGUgbXVz dA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgYSBidXMgc3Bl Y2lmaWMgSS9PIHByb3RvY29sDQo+ID4gZm9yIHRoZSBkcml2ZXINCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0byB1c2UgdG8gc3RvcCB0aGUgZGV2aWNlLg0KPiA+ICsgIEBw YXJhbVtpbl0gIE51bWJlck9mQ2hpbGRyZW4gIFRoZSBudW1iZXIgb2YgY2hpbGQgZGV2aWNlIGhh bmRsZXMgaW4NCj4gPiBDaGlsZEhhbmRsZUJ1ZmZlci4NCj4gPiArICBAcGFyYW1baW5dICBDaGls ZEhhbmRsZUJ1ZmZlciBBbiBhcnJheSBvZiBjaGlsZCBoYW5kbGVzIHRvIGJlIGZyZWVkLg0KPiA+ IE1heSBiZSBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgTnVt YmVyT2ZDaGlsZHJlbiBpcyAwLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgZGV2aWNlIHdhcyBzdG9wcGVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIFRoZSBkZXZpY2UgY291bGQgbm90IGJlIHN0b3BwZWQgZHVlDQo+ID4gdG8g YSBkZXZpY2UgZXJyb3IuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtF RklBUEkNCj4gPiArUmVkZmlzaERpc2NvdmVyRHJpdmVyQmluZGluZ1N0b3AgKA0KPiA+ICsgIElO IEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ICsgIElOIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gPiArICBJTiBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlciBPUFRJT05BTA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBTdG9wU2VydmljZU9uTmV0d29ya0ludGVyZmFjZSAo VGhpcywgQ29udHJvbGxlckhhbmRsZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK0VGSV9EUklWRVJf QklORElOR19QUk9UT0NPTCBnUmVkZmlzaERpc2NvdmVyRHJpdmVyQmluZGluZyA9IHsNCj4gPiAr ICBSZWRmaXNoRGlzY292ZXJEcml2ZXJCaW5kaW5nU3VwcG9ydGVkLA0KPiA+ICsgIFJlZGZpc2hE aXNjb3ZlckRyaXZlckJpbmRpbmdTdGFydCwNCj4gPiArICBSZWRmaXNoRGlzY292ZXJEcml2ZXJC aW5kaW5nU3RvcCwNCj4gPiArICBSRURGSVNIX0RJU0NPVkVSX1ZFUlNJT04sDQo+ID4gKyAgTlVM TCwNCj4gPiArICBOVUxMDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGlz IHRoZSBkZWNsYXJhdGlvbiBvZiBhbiBFRkkgaW1hZ2UgZW50cnkgcG9pbnQuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbSAgSW1hZ2VIYW5kbGUgICAgICAgICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQg aGFuZGxlIGZvcg0KPiA+IHRoZSBVRUZJIGltYWdlLg0KPiA+ICsgIEBwYXJhbSAgU3lzdGVtVGFi bGUgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIG9wZXJhdGlvbiBjb21wbGV0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgIEFu IHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0VGSUFQSQ0KPiA+ICtSZWRmaXNoRGlzY292ZXJFbnRyeVBvaW50ICgNCj4gPiArICBJTiBF RklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxF ICAqU3lzdGVtVGFibGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1 czsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgSW5pdGlhbGl6 ZUxpc3RIZWFkICgmbVJlZGZpc2hEaXNjb3Zlckxpc3QpOw0KPiA+ICsgIEluaXRpYWxpemVMaXN0 SGVhZCAoJm1SZWRmaXNoSW5zdGFuY2VMaXN0KTsNCj4gPiArICBJbml0aWFsaXplTGlzdEhlYWQg KCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSk7DQo+ID4gKyAgSW5pdGlhbGl6 ZUxpc3RIZWFkICgmbUVmaVJlZGZpc2hEaXNjb3ZlclJlc3RFeEluc3RhbmNlKTsNCj4gPiArICAv Lw0KPiA+ICsgIC8vIEluc3RhbGwgYmluZGluZyBwcm90b29jbCB0byBvYnRhaW4gVURQIGFuZCBS RVNUIEVYIHByb3RvY29sLg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gRWZpTGliSW5zdGFs bERyaXZlckJpbmRpbmdDb21wb25lbnROYW1lMiAoDQo+ID4gKyAgICAgICAgICAgICBJbWFnZUhh bmRsZSwNCj4gPiArICAgICAgICAgICAgIFN5c3RlbVRhYmxlLA0KPiA+ICsgICAgICAgICAgICAg JmdSZWRmaXNoRGlzY292ZXJEcml2ZXJCaW5kaW5nLA0KPiA+ICsgICAgICAgICAgICAgSW1hZ2VI YW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAmZ1JlZGZpc2hEaXNjb3ZlckNvbXBvbmVudE5hbWUs DQo+ID4gKyAgICAgICAgICAgICAmZ1JlZGZpc2hEaXNjb3ZlckNvbXBvbmVudE5hbWUyDQo+ID4g KyAgICAgICAgICAgICApOw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgaXMgdGhlIHVubG9hZCBoYW5kbGUgZm9yIFJlZGZpc2ggZGlz Y292ZXIgbW9kdWxlLg0KPiA+ICsNCj4gPiArICBEaXNjb25uZWN0IHRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IEltYWdlSGFuZGxlIGZyb20gYWxsIHRoZSBkZXZpY2VzIGluDQo+IHRoZQ0KPiA+IGhh bmRsZSBkYXRhYmFzZS4NCj4gPiArICBVbmluc3RhbGwgYWxsIHRoZSBwcm90b2NvbHMgaW5zdGFs bGVkIGluIHRoZSBkcml2ZXIgZW50cnkgcG9pbnQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g SW1hZ2VIYW5kbGUgICAgICAgICAgIFRoZSBkcml2ZXJzJyBkcml2ZXIgaW1hZ2UuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgICAgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbWFnZSBpcyB1bmxv YWRlZC4NCj4gPiArICBAcmV0dmFsICAgIE90aGVycyAgICAgICAgICAgICAgICBGYWlsZWQgdG8g dW5sb2FkIHRoZSBpbWFnZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtSZWRmaXNoRGlzY292ZXJVbmxvYWQgKA0KPiA+ICsgIElOIEVGSV9IQU5E TEUgSW1hZ2VIYW5kbGUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTIFN0YXR1 czsNCj4gPiArICBFRklfUkVERklTSF9ESVNDT1ZFUl9ORVRXT1JLX0lOVEVSRkFDRV9JTlRFUk5B TA0KPiA+ICpUaGlzTmV0d29ya0ludGVyZmFjZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRUZJ X1NVQ0NFU1M7DQo+ID4gKyAgLy8gRGVzdHJveSBhbGwgbmV0d29yayBpbnRlcmZhY2VzIGZvdW5k IGJ5IEVGSSBSZWRmaXNoIERpc2NvdmVyIGRyaXZlcg0KPiBhbmQNCj4gPiArICAvLyBzdG9wIHNl cnZpY2VzIGNyZWF0ZWQgZm9yIFJlZGZpc2ggRGlzY292ZXIuDQo+ID4gKw0KPiA+ICsgIHdoaWxl ICghSXNMaXN0RW1wdHkgKCZtRWZpUmVkZmlzaERpc2NvdmVyTmV0d29ya0ludGVyZmFjZSkpIHsN Cj4gPiArICAgIFRoaXNOZXR3b3JrSW50ZXJmYWNlID0NCj4gPiAoRUZJX1JFREZJU0hfRElTQ09W RVJfTkVUV09SS19JTlRFUkZBQ0VfSU5URVJOQUwNCj4gKilHZXRGaXJzdE5vZGUNCj4gPiAoJm1F ZmlSZWRmaXNoRGlzY292ZXJOZXR3b3JrSW50ZXJmYWNlKTsNCj4gPiArICAgIFN0b3BTZXJ2aWNl T25OZXR3b3JrSW50ZXJmYWNlICgmZ1JlZGZpc2hEaXNjb3ZlckRyaXZlckJpbmRpbmcsDQo+ID4g VGhpc05ldHdvcmtJbnRlcmZhY2UtDQo+ID5OZXR3b3JrSW50ZXJmYWNlUHJvdG9jb2xJbmZvLlBy b3RvY29sQ29udHJvbGxlckhhbg0KPiA+IGRsZSk7DQo+ID4gKyAgfTsNCj4gPiArICAvLyBEaXNj b25uZWN0IEVGSSBSZWRmaXNoIGRpc2NvdmVyIGRyaXZlciBjb250cm9sbGVyIHRvIG5vdGlmeSB0 aGUNCj4gPiArICAvLyBjbGluZXQgd2hpY2ggdXNlcyAuRUZJIFJlZGZpc2ggZGlzY292ZXIgcHJv dG9jb2wuDQo+ID4gKw0KPiA+ICsgIGlmIChFZmlSZWRmaXNoRGlzY292ZXJQcm90b2NvbEhhbmRs ZSAhPSBOVUxMKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm90aWZ5IHVzZXIgRUZJX1JF REZJU0hfRElTQ09WRVJfUFJPVE9DT0wgaXMgdW5sb2FkZWQuDQo+ID4gKyAgICAvLw0KPiA+ICsg ICAgZ0JTLT5EaXNjb25uZWN0Q29udHJvbGxlciAoRWZpUmVkZmlzaERpc2NvdmVyUHJvdG9jb2xI YW5kbGUsIE5VTEwsDQo+ID4gTlVMTCk7DQo+ID4gKyAgICBTdGF0dXMgPSBnQlMtPlVuaW5zdGFs bFByb3RvY29sSW50ZXJmYWNlKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEVmaVJlZGZpc2hE aXNjb3ZlclByb3RvY29sSGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpUmVk ZmlzaERpc2NvdmVyUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIChWT0lE ICopJm1SZWRmaXNoRGlzY292ZXINCj4gPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsg IH0NCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZp c2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hTbWJpb3NIb3N0SW50ZXJmYWNlLmMNCj4g PiBiL1JlZGZpc2hQa2cvUmVkZmlzaERpc2NvdmVyRHhlL1JlZGZpc2hTbWJpb3NIb3N0SW50ZXJm YWNlLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmYz YWQzNmVjM2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNo RGlzY292ZXJEeGUvUmVkZmlzaFNtYmlvc0hvc3RJbnRlcmZhY2UuYw0KPiA+IEBAIC0wLDAgKzEs MTE4IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIFJlZGZpc2hTbWJpb3NIb3N0SW50ZXJmYWNl LmMNCj4gPiArDQo+ID4gKyAgRGlzY292ZXIgUmVkZmlzaCBTTUJJT1MgSG9zdCBJbnRlcmZhY2Uu DQo+ID4gKw0KPiA+ICsgIChDKSBDb3B5cmlnaHQgMjAyMSBIZXdsZXR0IFBhY2thcmQgRW50ZXJw cmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiArDQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgIlJlZGZpc2hEaXNjb3ZlckludGVybmFsLmgiDQo+ID4gKw0KPiA+ICtTTUJJT1Nf VEFCTEVfVFlQRTQyICAqbVR5cGU0MlJlY29yZDsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRo ZSBmdW5jdGlvbiBnZXRzIGluZm9ybWF0aW9uIHJlcG9ydGVkIGluIFJlZGZpc2ggSG9zdCBJbnRl cmZhY2UuDQo+ID4gKw0KPiA+ICsgIEl0IHNpbXBseSBmcmVlcyB0aGUgcGFja2V0Lg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBTbWJpb3MgICAgICAgICAgIFNNQklPUyBwcm90b2NvbC4NCj4g PiArICBAcGFyYW1bb3V0XSBEZXZpY2VEZXNjcmlwdG9yIFBvaW50ZXIgdG8gUkVERklTSF9JTlRF UkZBQ0VfREFUQS4NCj4gPiArICBAcGFyYW1bb3V0XSBQcm90b2NvbERhdGEgICAgIFBvaW50ZXIg dG8NCj4gPiBSRURGSVNIX09WRVJfSVBfUFJPVE9DT0xfREFUQS4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICBHZXQgaG9zdCBpbnRlcmZhY2Ugc3VjY2VzZnVsbHkuDQo+ID4g KyAgQHJldHZhbCBPdGhlcndpc2UgICAgICBGYWlsIHRvIHRldCBob3N0IGludGVyZmFjZS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1JlZGZpc2hHZXRIb3N0SW50ZXJm YWNlUHJvdG9jb2xEYXRhICgNCj4gPiArICBJTiBFRklfU01CSU9TX1BST1RPQ09MICAgICAgICAg ICAgICAqU21iaW9zLA0KPiA+ICsgIE9VVCBSRURGSVNIX0lOVEVSRkFDRV9EQVRBICAgICAgICAg ICoqRGV2aWNlRGVzY3JpcHRvciwNCj4gPiArICBPVVQgUkVERklTSF9PVkVSX0lQX1BST1RPQ09M X0RBVEEgICAqKlByb3RvY29sRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX1NNQklPU19IQU5E TEUgICAgICAgICAgICAgICAgIFNtYmlvc0hhbmRsZTsNCj4gPiArICBFRklfU01CSU9TX1RBQkxF X0hFQURFUiAgICAgICAgICAgKlJlY29yZDsNCj4gPiArICBVSU5UMTYgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT2Zmc2V0Ow0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqUmVjb3JkVG1wOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQcm90b2NvbExlbmd0aDsNCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU3BlY2lmaWNEYXRhTGVuOw0KPiA+ICsNCj4gPiArICBpZiAoKFNtYmlvcyA9PSBOVUxMKSB8 fCAoUHJvdG9jb2xEYXRhID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU21iaW9zSGFuZGxlID0gU01CSU9T X0hBTkRMRV9QSV9SRVNFUlZFRDsNCj4gPiArICBTdGF0dXMgPSBTbWJpb3MtPkdldE5leHQgKFNt YmlvcywgJlNtYmlvc0hhbmRsZSwgTlVMTCwgJlJlY29yZCwNCj4gPiBOVUxMKTsNCj4gPiArICB3 aGlsZSAoIUVGSV9FUlJPUiAoU3RhdHVzKSAmJiBTbWJpb3NIYW5kbGUgIT0NCj4gPiBTTUJJT1Nf SEFORExFX1BJX1JFU0VSVkVEKSB7DQo+ID4gKyAgICBpZiAoUmVjb3JkLT5UeXBlID09DQo+ID4g U01CSU9TX1RZUEVfTUFOQUdFTUVOVF9DT05UUk9MTEVSX0hPU1RfSU5URVJGQUNFKSB7DQo+ID4g KyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIENoZWNrIEludGVyZmFjZSBUeXBlLCBzaG91bGQgYmUg TmV0d29yayBIb3N0IEludGVyZmFjZSA9IDQwaA0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBt VHlwZTQyUmVjb3JkID0gKFNNQklPU19UQUJMRV9UWVBFNDIgKikgUmVjb3JkOw0KPiA+ICsgICAg ICBpZiAobVR5cGU0MlJlY29yZC0+SW50ZXJmYWNlVHlwZSA9PQ0KPiA+IE1DSG9zdEludGVyZmFj ZVR5cGVOZXR3b3JrSG9zdEludGVyZmFjZSkgew0KPiA+ICsgICAgICAgIEFTU0VSVCAoUmVjb3Jk LT5MZW5ndGggPj0gOSk7DQo+ID4gKyAgICAgICAgT2Zmc2V0ID0gNTsNCj4gPiArICAgICAgICBS ZWNvcmRUbXAgPSAoVUlOVDggKikgUmVjb3JkICsgT2Zmc2V0Ow0KPiA+ICsgICAgICAgIC8vDQo+ ID4gKyAgICAgICAgLy8gR2V0IGludGVyZmFjZSBzcGVjaWZpYyBkYXRhIGxlbmd0aC4NCj4gPiAr ICAgICAgICAvLw0KPiA+ICsgICAgICAgIFNwZWNpZmljRGF0YUxlbiA9ICpSZWNvcmRUbXA7DQo+ ID4gKyAgICAgICAgT2Zmc2V0ICs9IDE7DQo+ID4gKyAgICAgICAgUmVjb3JkVG1wID0gKFVJTlQ4 ICopIFJlY29yZCArIE9mZnNldDsNCj4gPiArDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAg ICAvLyBDaGVjayBEZXZpY2UgVHlwZSwgb25seSBQQ0kvUENJZSBOZXR3b3JrIEludGVyZmFjZSB2 MiBpcw0KPiA+IHN1cHBvcnRlZCBub3cuDQo+ID4gKyAgICAgICAgLy8NCj4gPiArICAgICAgICBp ZiAoKlJlY29yZFRtcCA9PQ0KPiA+IFJFREZJU0hfSE9TVF9JTlRFUkZBQ0VfREVWSUNFX1RZUEVf UENJX1BDSUVfVjIpIHsNCj4gPiArICAgICAgICAgIEFTU0VSVCAoU3BlY2lmaWNEYXRhTGVuID09 IHNpemVvZg0KPiA+IChQQ0lfT1JfUENJRV9JTlRFUkZBQ0VfREVWSUNFX0RFU0NSSVBUT1JfVjIp ICsgMSk7DQo+ID4gKyAgICAgICAgICAqRGV2aWNlRGVzY3JpcHRvciA9IChSRURGSVNIX0lOVEVS RkFDRV9EQVRBICopUmVjb3JkVG1wOw0KPiA+ICsgICAgICAgICAgT2Zmc2V0ID0gT2Zmc2V0ICsg U3BlY2lmaWNEYXRhTGVuOw0KPiA+ICsgICAgICAgICAgUmVjb3JkVG1wID0gKFVJTlQ4ICopIFJl Y29yZCArIE9mZnNldDsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAvLyBDaGVj ayBQcm90b2NvbCBjb3VudC4gaWYgPiAxLCBvbmx5IHVzZSB0aGUgZmlyc3QgcHJvdG9jb2wuDQo+ ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAgQVNTRVJUICgqUmVjb3JkVG1wID09IDEp Ow0KPiA+ICsgICAgICAgICAgT2Zmc2V0ICs9IDE7DQo+ID4gKyAgICAgICAgICBSZWNvcmRUbXAg PSAoVUlOVDggKikgUmVjb3JkICsgT2Zmc2V0Ow0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAg ICAgICAgIC8vIENoZWNrIHByb3RvY29sIGlkZW50aWZpZXIuDQo+ID4gKyAgICAgICAgICAvLw0K PiA+ICsgICAgICAgICAgaWYgKCpSZWNvcmRUbXAgPT0gTUNIb3N0SW50ZXJmYWNlUHJvdG9jb2xU eXBlUmVkZmlzaE92ZXJJUCkNCj4gPiB7DQo+ID4gKyAgICAgICAgICAgIE9mZnNldCArPSAxOw0K PiA+ICsgICAgICAgICAgICBSZWNvcmRUbXAgPSAoVUlOVDggKikgUmVjb3JkICsgT2Zmc2V0Ow0K PiA+ICsgICAgICAgICAgICBQcm90b2NvbExlbmd0aCA9ICpSZWNvcmRUbXA7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICBPZmZzZXQgKz0gMTsNCj4gPiArICAgICAgICAgICAgUmVjb3JkVG1wID0g KFVJTlQ4ICopIFJlY29yZCArIE9mZnNldDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgIC8vDQo+ ID4gKyAgICAgICAgICAgIC8vIFRoaXMgU01CSU9TIHJlY29yZCBpcyBpbnZhbGlkLCBpZiB0aGUg bGVuZ3RoIG9mIHByb3RvY29sDQo+ID4gc3BlY2lmaWMgZGF0YSBmb3INCj4gPiArICAgICAgICAg ICAgLy8gUmVkZmlzaCBPdmVyIElQIHByb3RvY29sIGlzIHdyb25nLg0KPiA+ICsgICAgICAgICAg ICAvLw0KPiA+ICsgICAgICAgICAgICBpZiAoKCooUmVjb3JkVG1wICsgOTApICsgc2l6ZW9mDQo+ ID4gKFJFREZJU0hfT1ZFUl9JUF9QUk9UT0NPTF9EQVRBKSAtIDEpICE9IFByb3RvY29sTGVuZ3Ro KSB7DQo+ID4gKyAgICAgICAgICAgICAgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT047DQo+ ID4gKyAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgIE9mZnNldCArPSBQcm90 b2NvbExlbmd0aDsNCj4gPiArICAgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgICAgLy8gVGhp cyBTTUJJT1MgcmVjb3JkIGlzIGludmFsaWQsIGlmIHRoZSBsZW5ndGggaXMgc21hbGxlcg0KPiB0 aGFuDQo+ID4gdGhlIG9mZnNldC4NCj4gPiArICAgICAgICAgICAgLy8NCj4gPiArICAgICAgICAg ICAgaWYgKE9mZnNldCA+IG1UeXBlNDJSZWNvcmQtPkhkci5MZW5ndGgpIHsNCj4gPiArICAgICAg ICAgICAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTjsNCj4gPiArICAgICAgICAgICAg fQ0KPiA+ICsgICAgICAgICAgICAqUHJvdG9jb2xEYXRhID0gKFJFREZJU0hfT1ZFUl9JUF9QUk9U T0NPTF9EQVRBDQo+ID4gKilSZWNvcmRUbXA7DQo+ID4gKyAgICAgICAgICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiArICAgICAgICAgIH0NCj4gPiArICAgICAgICB9DQo+ID4gKyAgICAgIH0N Cj4gPiArICAgIH0NCj4gPiArICAgIFN0YXR1cyA9IFNtYmlvcy0+R2V0TmV4dCAoU21iaW9zLCAm U21iaW9zSGFuZGxlLCBOVUxMLCAmUmVjb3JkLA0KPiA+IE5VTEwpOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgKlByb3RvY29sRGF0YSA9IE5VTEw7DQo+ID4gKyAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+ID4gK30NCj4gPiAtLQ0KPiA+IDIuMTcuMQ0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ID4N Cj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQoNCg==