From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 76B0E38582B9 for ; Mon, 1 Aug 2022 15:33:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 76B0E38582B9 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 271E8wpV016984; Mon, 1 Aug 2022 15:33:04 GMT Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hmv8s40dx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 01 Aug 2022 15:33:04 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 271FAEkP003039; Mon, 1 Aug 2022 15:33:03 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2170.outbound.protection.outlook.com [104.47.57.170]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3hmu31d784-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 01 Aug 2022 15:33:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IKY/UV+mA5hFGQulqlJ8QZkSnWRTrGJ2pnPvrJtsr406/niB5Mgd7qnza5Y0ovukCg48jvtmzHoX/3x1lR/sAVQ+7OWxwrRVzTq/1Yxga7NZBP9XrjUakpxkK/BSwRQzCeBZcTzQ3FXi/atjQVdYRoH8F7xbfdwvCjLa89H8nnk4jJwcoOeMqmmbTZBjA0x0uWyVqjVx185cevox+nb3QBWTMxXz3FXWJe3yRIzdPcnZE64JM9zAkuyhnFDP3ocuiX0hdV92RK6HrujYuOM6sfq3uVpUfzXC5vCrWD8Db1Mt9wVIeznAu2hKbTyrC1TFuOi4zycxY6PeM7Pk4vDtQg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NBjMj0YEObhr++ld7zfEFnthH8RaRkiYVs91g4nIyDo=; b=EbAHAnLT02Fb6THXsh15pqx5VOzlWwuRy2wTnry6vGNy1gJRCpaxaycS8TnT3zfZP2s+UoFPPerZS0aWwOhYLQHl7vlk71mWTn4l4GFfh3fG3k4OQH3SSgx4kr3Zs9RLC/SZjdbf6SYK8vRYROtzoIujuO/GuEamKmg3+v5Qu+qNIb0q11btjaB2sy1U7srgrqJw9wygx8zJ41AWd+knx0v7og8TtgZlCxfWWwAhWv2NXVTgAZ5TmAwdTGzd7cFg87IXfwA9+/wBK8JF3qJNC/MPY2OOlBPTMljtSNhA8tfVkyRF6/W5TbJyn4MUqngBB40lfX7k8Dgs0nZ9+ZvvWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by DM5PR1001MB2329.namprd10.prod.outlook.com (2603:10b6:4:2c::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5482.10; Mon, 1 Aug 2022 15:32:58 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::84af:9275:f1d7:de1]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::84af:9275:f1d7:de1%5]) with mapi id 15.20.5482.016; Mon, 1 Aug 2022 15:32:57 +0000 From: Qing Zhao To: Richard Biener CC: gcc-patches Paul A Clarke via , jakub Jelinek , martin Sebor , kees Cook , "joseph@codesourcery.com" Subject: Re: [GCC13][Patch][V2][1/2]Add a new option -fstrict-flex-array[=n] and attribute strict_flex_array(n) and use it in PR101836 Thread-Topic: [GCC13][Patch][V2][1/2]Add a new option -fstrict-flex-array[=n] and attribute strict_flex_array(n) and use it in PR101836 Thread-Index: AQHYm3kzWKnaJcRdM06lFScE7QxsLa2Tb+OAgAJjrgCAA+i8AIAAhLIA Date: Mon, 1 Aug 2022 15:32:57 +0000 Message-ID: <567D133A-E24A-4107-A843-95D2ED07ACF2@oracle.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8807cd49-b14c-49ca-59af-08da73d31c60 x-ms-traffictypediagnostic: DM5PR1001MB2329:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jBPpga1gPe+zTGpBkqtP9G5QxCiYnip0Mq1976eZWsz2AD4qlNP1VVNGCDdHjoO4NQsqnshmrQ9OjQUEejkRQdAaJHEx5pgPFmPzN7IEYrWqr8LiEegOo+QRnkBlMWo8kZN8JsMbg7CUSysbekGONWtXjTprCJyeWbNXGCjwPWzsqCj3kDKbXxdU5JWrxm0N2NriTemVpiOQJCMmMN2cE+/S59WqK57ok6DlRZFcj59qwrmHQINtiOvy7+poQ3mysbhswdCpwdPWEIyJjYlJWPSCfi9g6osV6qE/h3irHOs5Zqxp/47E4WGCg51RdrUrB2/HsGxmWjIkG6AJM42XgnRHwJq3fMjWFQw1KnVdY1cBgPxBRVOKPNlcocMUQcU4u6aEzS/kEvxuOHGJU9EuC+DelbZQFQZU/K1jYfu5fg/1UPG2TTb7Cbys4mgCa5AuVXSntFhCjvBPEoxRcKDWvI2r40QSugDjOmM74GbiS8xWQlgh4mIPImgPim3PzzMyavqmbDwsA5Qi+LNZZ6pgiIqN8JNup4N+CZUqaFxP+4ZUufcX2X6/6P77q2Qy0LZ4AVN/Cxj6YIjFHtflRwyry0ZG9pdxC/MX9YJjnjwZ361rfatg9pQxGbyq7/gDRb/TCJF3yUx1gKBdQUMhxeRkfwQM2FtrLxq4FRg/9yFSgYmGtqf5JVmUVfLt+ECNL36x0WA9fGQ5TYC6V6Tn1YjyhmysXnIBDVviyp4eH0FQARAKZIKWQA6XkCyp7SuQEHBV0SJsIcofWLvcoObsoTUa3R6oNZNiJ9GM27hSyGvw06MJneFkZMNkpQLLOInRSAYaBS//1jl3UKI2BLTA1EWPLBdaW8yRhEULq7NBjg3fHZfGxSh5ED36TAKLihmx2+xm/DDJFTI03T2FMPI3/VQ8lA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(366004)(396003)(376002)(136003)(346002)(39860400002)(2906002)(38100700002)(122000001)(66946007)(76116006)(66556008)(8676002)(4326008)(91956017)(30864003)(66476007)(66446008)(64756008)(8936002)(5660300002)(44832011)(6486002)(478600001)(966005)(2616005)(186003)(71200400001)(6506007)(41300700001)(53546011)(6512007)(6916009)(38070700005)(54906003)(316002)(83380400001)(86362001)(36756003)(84970400001)(33656002)(45980500001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Y0l5SjYrdXNEY1dFUkJudkwyVkRDVmpGNEJZSWQrNGQ0TjZKdWhsYmhycFkv?= =?utf-8?B?cHBBWFBsb0ZMdXcrbVNTMjlZMzJJdnBOQUUyK3YzcFlJSWZoaUp5YWpMbUF0?= =?utf-8?B?c0tIR0lsNUYzY0FReTlmUmJteW9JdW9DYlVZaHo0dnphcXZnUEZwVGNRMEJL?= =?utf-8?B?c21FbUVBTkEyWTZGS2pBejU4WVNnTXNKQWVYbW1VWWlqN3QrR2RvVzAyZ1hx?= =?utf-8?B?U3J0QmQ4TkM3Mi9GZEliN3lkUUhyNHc3eXVpM0Q0eXQrZURueTQ4M1NPVmFN?= =?utf-8?B?TmZxemJ3dmx6aFQ4TVJGWGNNNGl6Q2t6VnJLa0pFVzBZRStXWE5RU09YWFQv?= =?utf-8?B?OWI5RU5Ddms1MU5GbkZneHJJWGlCRnRGWGxFZUsrYVg3SHpRUXlHNm5XWVpo?= =?utf-8?B?YWZYeitRQ1BlRmhSeExzQjBPVlBZRkhRUVFiWnNrVGxQbjVHWmtIZmdnSTZh?= =?utf-8?B?ZTF0QjlkQit4Mzl3cklSUjBzWHhQSGRlRWJuMlZqWitKTktrYm9pZnZ2bXlP?= =?utf-8?B?SGoydXB4TnJHalBCaTZBSjBSLy82VWpRUmF5bS85OUZLVmJqTjVzcmN4c2dU?= =?utf-8?B?QWczUUNPTjRiZUI4dlZNaVM5NTQ0VFNPQ3ZSdEZJR0xZSjRSSE5zYnB0Z0s5?= =?utf-8?B?WmZDMzg2eHQ1UDUxbVVvV3hreVg5ZCtkb3NSMkhxM09Vb1dyTUU0ZWs0anE4?= =?utf-8?B?akVHS2RHN1JUNXg2RGZRQnJJTm9sTFEvbmU1Z1VXNHpGN0E2SFVTMVNQRDdm?= =?utf-8?B?NkZUakxXMGwrMklqSFplR1R6OStrL0xONnZ4Z2NUYmZPWnZKYkx2UHkrWUpa?= =?utf-8?B?UEsvTWx6MEdUWmczNThsRjg0bDVZVGNyd091N3Zsd2o5VVB3Y2phd1Z5anBx?= =?utf-8?B?bkx4ZCsvR0FYMnhZTXFIUHJrRjAyZ0UwVE1oZEJWUEJwY2RKVFFwQ29GUVZj?= =?utf-8?B?cXN4MHQ4R002aWNGNElYRm5haUo5ZjQ1MVRzZmt0WDZRM05VeURiN2pvNFZs?= =?utf-8?B?REhTQzF2dHgzbXM3QUFsYVd4YWRvckF0ZjVqYTA3WTRIZ3JoSUJqWWFibDNI?= =?utf-8?B?enpmQUcrWHhMY2hiQ3Z6MTcyUEZ6WktQVmhmclY0SDFMaGc4SHlBNjMzWVdI?= =?utf-8?B?Lzd5T2wvK21wQ3dxZS9DUWFBNWhjK1JBYndEdVlERFFMd1ZSZGlqL3dCbTQr?= =?utf-8?B?MFJQeVgycXYvdmlwUnlOL1VYUXVBbUt4SlM2WDBTZ05vd1MrZ3N2OUdkYVdw?= =?utf-8?B?cnZ0dGRTMjNhRmlONjlkUWlHdC9CT25Cb3JXeXA1NTd3cVRXV2VtSUpPZ3hL?= =?utf-8?B?TEpRbVFpdkhBMWFIOUVDV1N0LytCLytKOWhjYUloQXFUbzN4U24wUnlxS3hB?= =?utf-8?B?T2NQVG1xQWJtS3R1N0dlZHQzR2gwL3g0ZFFpbUhnWGVUZU5PU01aYktjcXVH?= =?utf-8?B?ZlYxL0U5NEVhbXl2OWsyY1d1Q2RIdkgxVEpnU2x3QTVGSDRNQlpzUHdBNVo1?= =?utf-8?B?YW9YWkE3NEZCcE1KT3ZtRFZRQ2Z2MFlISXdlamt0S2pVT2RCdzI2eXRKZ3Iz?= =?utf-8?B?U1VlN0pZODZDQ3N3bTRRV2xJb1ZnUWFndzM2aGdlemhUSXVLMUphVXFoNFdE?= =?utf-8?B?U2hyK3J1dUtqYWRNUUJxazZJd0d6c2JwM1lKbS93Z2VHTlpEYnh6bXNEV3F5?= =?utf-8?B?T2hGbW5ON1FrbU4rZ0M0SDZZNjZCYzkzb1dEWVlxbEtWTTlPNHFkSE0zcVFX?= =?utf-8?B?dDBLSDMwd21jZHlXdnkwSmlFV3l4TTNNb09xaXpzNVZZREExaVgyR012Q2o3?= =?utf-8?B?dGoyL3FwRkhJTjZyYmhTZFQyalpabVdqK040T2NvOUo5UFNLN0Q1aWg4ZXdo?= =?utf-8?B?aUZ1R2Zac2I1YmRFZjkrRHhYcW9jRFhST0hkTDh0LzVYNm5ScUJ6dTAweE1r?= =?utf-8?B?ZkFLdWZZVmhxMjd0amM1U0ZrZjlkRzEvTnJqMS82VEtrVFdtYjJaTStVTmd3?= =?utf-8?B?OCtuKzJkTEdUek51TkJGNVNZVG5HVklaa3FHZk1yNzVudEJ5b1o0Sm5ZOTcw?= =?utf-8?B?aERHTEJiM0ZMMmY2a2FWQlozdmdvNWZkNWpuVGRDQ2xJd24wSVdIODREeFp1?= =?utf-8?B?WEkvcjc4bllSUS9hb1JtMFFZc2pTRjZRajR5eUlKMmY3QXFpQUhnT1Y4T2RM?= =?utf-8?Q?V5tCbu9en48XEB0P5WpzYBE=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <111A68AFAB9AD541917C3F537E3D8E81@namprd10.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8807cd49-b14c-49ca-59af-08da73d31c60 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Aug 2022 15:32:57.7404 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eE1q0by/V7JdBtfr8u3YBUMpwcYYasWu8SyCoJR/H22FnIWo1OYDwdIXT5rU8ep9bPgRVjgBYV5LyGbnj0XuhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1001MB2329 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-01_07,2022-08-01_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 phishscore=0 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2208010079 X-Proofpoint-GUID: HHpqJXGyU2YyNTnSEzZbNyYaZqgWwYZg X-Proofpoint-ORIG-GUID: HHpqJXGyU2YyNTnSEzZbNyYaZqgWwYZg X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Aug 2022 15:33:14 -0000 DQoNCj4gT24gQXVnIDEsIDIwMjIsIGF0IDM6MzggQU0sIFJpY2hhcmQgQmllbmVyIDxyZ3VlbnRo ZXJAc3VzZS5kZT4gd3JvdGU6DQo+IA0KPiBPbiBGcmksIDI5IEp1bCAyMDIyLCBRaW5nIFpoYW8g d3JvdGU6DQo+IA0KPj4gSGksIFJpY2hhcmQsDQo+PiANCj4+IFRoYW5rcyBhIGxvdCBmb3IgeW91 ciBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMuIChBbmQgc29ycnkgZm9yIG15IGxhdGUgcmVwbHkp Lg0KPj4gDQo+Pj4gT24gSnVsIDI4LCAyMDIyLCBhdCAzOjI2IEFNLCBSaWNoYXJkIEJpZW5lciA8 cmd1ZW50aGVyQHN1c2UuZGU+IHdyb3RlOg0KPj4+IA0KPj4+IE9uIFR1ZSwgMTkgSnVsIDIwMjIs IFFpbmcgWmhhbyB3cm90ZToNCj4+PiANCj4+Pj4gRnJvbSAzODU0MDA0ODAyYjhlMmYxMzJlYmYy MThmYzM1YTYzMmY1ZTgwYzZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KPj4+PiBGcm9tOiBR aW5nIFpoYW8gPHFpbmcuemhhb0BvcmFjbGUuY29tPg0KPj4+PiBEYXRlOiBNb24sIDE4IEp1bCAy MDIyIDE3OjA0OjEyICswMDAwDQo+Pj4+IFN1YmplY3Q6IFtQQVRDSCAxLzJdIEFkZCBhIG5ldyBv cHRpb24gLWZzdHJpY3QtZmxleC1hcnJheVs9bl0gYW5kIG5ldw0KPj4+PiBhdHRyaWJ1dGUgc3Ry aWN0X2ZsZXhfYXJyYXkNCj4+Pj4gDQo+Pj4+IEFkZCB0aGUgZm9sbG93aW5nIG5ldyBvcHRpb24g LWZzdHJpY3QtZmxleC1hcnJheVs9bl0gYW5kIGEgY29ycmVzcG9uZGluZw0KPj4+PiBhdHRyaWJ1 dGUgc3RyaWN0X2ZsZXhfYXJyYXkgdG8gR0NDOg0KPj4+PiANCj4+Pj4gJy1mc3RyaWN0LWZsZXgt YXJyYXknDQo+Pj4+ICAgVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0dXJlIGFz IGEgZmxleGlibGUgYXJyYXkgbWVtYmVyDQo+Pj4+ICAgaW4gYSBzdHJpY3RlciB3YXkuICBUaGUg cG9zaXRpdmUgZm9ybSBpcyBlcXVpdmFsZW50IHRvDQo+Pj4+ICAgJy1mc3RyaWN0LWZsZXgtYXJy YXk9MycsIHdoaWNoIGlzIHRoZSBzdHJpY3Rlc3QuICBBIHRyYWlsaW5nIGFycmF5DQo+Pj4+ICAg aXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBvbmx5IHdoZW4gaXQgaXMgZGVj bGFyZWQgYXMgYQ0KPj4+PiAgIGZsZXhpYmxlIGFycmF5IG1lbWJlciBwZXIgQzk5IHN0YW5kYXJk IG9ud2FyZHMuICBUaGUgbmVnYXRpdmUgZm9ybQ0KPj4+PiAgIGlzIGVxdWl2YWxlbnQgdG8gJy1m c3RyaWN0LWZsZXgtYXJyYXk9MCcsIHdoaWNoIGlzIHRoZSBsZWFzdA0KPj4+PiAgIHN0cmljdC4g IEFsbCB0cmFpbGluZyBhcnJheXMgb2Ygc3RydWN0dXJlcyBhcmUgdHJlYXRlZCBhcyBmbGV4aWJs ZQ0KPj4+PiAgIGFycmF5IG1lbWJlcnMuDQo+Pj4+IA0KPj4+PiAnLWZzdHJpY3QtZmxleC1hcnJh eT1MRVZFTCcNCj4+Pj4gICBUcmVhdCB0aGUgdHJhaWxpbmcgYXJyYXkgb2YgYSBzdHJ1Y3R1cmUg YXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXINCj4+Pj4gICBpbiBhIHN0cmljdGVyIHdheS4gIFRo ZSB2YWx1ZSBvZiBMRVZFTCBjb250cm9scyB0aGUgbGV2ZWwgb2YNCj4+Pj4gICBzdHJpY3RuZXNz Lg0KPj4+PiANCj4+Pj4gICBUaGUgcG9zc2libGUgdmFsdWVzIG9mIExFVkVMIGFyZSB0aGUgc2Ft ZSBhcyBmb3IgdGhlDQo+Pj4+ICAgJ3N0cmljdF9mbGV4X2FycmF5JyBhdHRyaWJ1dGUgKCpub3Rl IFZhcmlhYmxlIEF0dHJpYnV0ZXM6OikuDQo+Pj4+IA0KPj4+PiAgIFlvdSBjYW4gY29udHJvbCB0 aGlzIGJlaGF2aW9yIGZvciBhIHNwZWNpZmljIHRyYWlsaW5nIGFycmF5IGZpZWxkDQo+Pj4+ICAg b2YgYSBzdHJ1Y3R1cmUgYnkgdXNpbmcgdGhlIHZhcmlhYmxlIGF0dHJpYnV0ZSAnc3RyaWN0X2Zs ZXhfYXJyYXknDQo+Pj4+ICAgYXR0cmlidXRlICgqbm90ZSBWYXJpYWJsZSBBdHRyaWJ1dGVzOjop Lg0KPj4+PiANCj4+Pj4gJ3N0cmljdF9mbGV4X2FycmF5IChMRVZFTCknDQo+Pj4+ICAgVGhlICdz dHJpY3RfZmxleF9hcnJheScgYXR0cmlidXRlIHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUNCj4+ Pj4gICB0cmFpbGluZyBhcnJheSBmaWVsZCBvZiBhIHN0cnVjdHVyZS4gIEl0IHNwZWNpZmllcyB0 aGUgbGV2ZWwgb2YNCj4+Pj4gICBzdHJpY3RuZXNzIG9mIHRyZWF0aW5nIHRoZSB0cmFpbGluZyBh cnJheSBmaWVsZCBvZiBhIHN0cnVjdHVyZSBhcyBhDQo+Pj4+ICAgZmxleGlibGUgYXJyYXkgbWVt YmVyLiAgTEVWRUwgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlbiAwIHRvIDMuDQo+Pj4+IA0KPj4+ PiAgIExFVkVMPTAgaXMgdGhlIGxlYXN0IHN0cmljdCBsZXZlbCwgYWxsIHRyYWlsaW5nIGFycmF5 cyBvZg0KPj4+PiAgIHN0cnVjdHVyZXMgYXJlIHRyZWF0ZWQgYXMgZmxleGlibGUgYXJyYXkgbWVt YmVycy4gIExFVkVMPTMgaXMgdGhlDQo+Pj4+ICAgc3RyaWN0ZXN0IGxldmVsLCBvbmx5IHdoZW4g dGhlIHRyYWlsaW5nIGFycmF5IGlzIGRlY2xhcmVkIGFzIGENCj4+Pj4gICBmbGV4aWJsZSBhcnJh eSBtZW1iZXIgcGVyIEM5OSBzdGFuZGFyZCBvbndhcmRzIChbXSksIGl0IGlzIHRyZWF0ZWQNCj4+ Pj4gICBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlci4NCj4+Pj4gDQo+Pj4+ICAgVGhlcmUgYXJl IHR3byBtb3JlIGxldmVscyBpbiBiZXR3ZWVuIDAgYW5kIDMsIHdoaWNoIGFyZSBwcm92aWRlZCB0 bw0KPj4+PiAgIHN1cHBvcnQgb2xkZXIgY29kZXMgdGhhdCB1c2UgR0NDIHplcm8tbGVuZ3RoIGFy cmF5IGV4dGVuc2lvbiAoWzBdKQ0KPj4+PiAgIG9yIG9uZS1zaXplIGFycmF5IGFzIGZsZXhpYmxl IGFycmF5IG1lbWJlciAoWzFdKTogV2hlbiBMRVZFTCBpcyAxLA0KPj4+PiAgIHRoZSB0cmFpbGlu ZyBhcnJheSBpcyB0cmVhdGVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHdoZW4gaXQgaXMN Cj4+Pj4gICBkZWNsYXJlZCBhcyBlaXRoZXIgW10sIFswXSwgb3IgWzFdOyBXaGVuIExFVkVMIGlz IDIsIHRoZSB0cmFpbGluZw0KPj4+PiAgIGFycmF5IGlzIHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBh cnJheSBtZW1iZXIgd2hlbiBpdCBpcyBkZWNsYXJlZCBhcw0KPj4+PiAgIGVpdGhlciBbXSwgb3Ig WzBdLg0KPj4+PiANCj4+Pj4gICBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB3aXRoIG9yIHdp dGhvdXQgJy1mc3RyaWN0LWZsZXgtYXJyYXknLg0KPj4+PiAgIFdoZW4gYm90aCB0aGUgYXR0cmli dXRlIGFuZCB0aGUgb3B0aW9uIHByZXNlbnQgYXQgdGhlIHNhbWUgdGltZSwNCj4+Pj4gICB0aGUg bGV2ZWwgb2YgdGhlIHN0cmljdG5lc3MgZm9yIHRoZSBzcGVjaWZpYyB0cmFpbGluZyBhcnJheSBm aWVsZA0KPj4+PiAgIGlzIGRldGVybWluZWQgYnkgdGhlIGF0dHJpYnV0ZS4NCj4+Pj4gDQo+Pj4+ IGdjYy9jLWZhbWlseS9DaGFuZ2VMb2c6DQo+Pj4+IA0KPj4+PiAJKiBjLWF0dHJpYnMuY2MgKGhh bmRsZV9zdHJpY3RfZmxleF9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uDQo+Pj4+IAko Y19jb21tb25fYXR0cmlidXRlX3RhYmxlKTogTmV3IGl0ZW0gZm9yIHN0cmljdF9mbGV4X2FycmF5 Lg0KPj4+PiAJKiBjLm9wdCAoZnN0cmljdC1mbGV4LWFycmF5KTogTmV3IG9wdGlvbi4NCj4+Pj4g CShmc3RyaWN0LWZsZXgtYXJyYXk9KTogTmV3IG9wdGlvbi4NCj4+Pj4gDQo+Pj4+IGdjYy9jL0No YW5nZUxvZzoNCj4+Pj4gDQo+Pj4+IAkqIGMtZGVjbC5jYyAoYWRkX2ZsZXhpYmxlX2FycmF5X2Vs dHNfdG9fc2l6ZSk6IENhbGwgbmV3IHV0aWxpdHkNCj4+Pj4gCXJvdXRpbmUgZmxleGlibGVfYXJy YXlfbWVtYmVyX3AuDQo+Pj4+IAkoaXNfZmxleGlibGVfYXJyYXlfbWVtYmVyX3ApOiBOZXcgZnVu Y3Rpb24uDQo+Pj4+IAkoZmluaXNoX3N0cnVjdCk6IFNldCB0aGUgbmV3IERFQ0xfTk9UX0ZMRVhB UlJBWSBmbGFnLg0KPj4+PiANCj4+Pj4gZ2NjL0NoYW5nZUxvZzoNCj4+Pj4gDQo+Pj4+IAkqIGRv Yy9leHRlbmQudGV4aTogRG9jdW1lbnQgc3RyaWN0X2ZsZXhfYXJyYXkgYXR0cmlidXRlLg0KPj4+ PiAJKiBkb2MvaW52b2tlLnRleGk6IERvY3VtZW50IC1mc3RyaWN0LWZsZXgtYXJyYXlbPW5dIG9w dGlvbi4NCj4+Pj4gCSogdHJlZS1jb3JlLmggKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uKTogTmV3 IGJpdCBmaWVsZA0KPj4+PiAJZGVjbF9ub3RfZmxleGFycmF5Lg0KPj4+PiAJKiB0cmVlLmNjIChj b21wb25lbnRfcmVmX3NpemUpOiBSZW9yZyBieSB1c2luZyBuZXcgdXRpbGl0eSBmdW5jdGlvbnMu DQo+Pj4+IAkoZmxleGlibGVfYXJyYXlfbWVtYmVyX3ApOiBOZXcgZnVuY3Rpb24uDQo+Pj4+IAko emVyb19sZW5ndGhfYXJyYXlfcCk6IExpa2V3aXNlLg0KPj4+PiAJKG9uZV9lbGVtZW50X2FycmF5 X3ApOiBMaWtld2lzZS4NCj4+Pj4gCShmbGV4aWJsZV9hcnJheV90eXBlX3ApOiBMaWtld2lzZS4N Cj4+Pj4gCSogdHJlZS5oIChERUNMX05PVF9GTEVYQVJSQVkpOiBOZXcgZmxhZy4NCj4+Pj4gCSh6 ZXJvX2xlbmd0aF9hcnJheV9wKTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZS4NCj4+Pj4gCShvbmVf ZWxlbWVudF9hcnJheV9wKTogTGlrZXdpc2UuDQo+Pj4+IAkoZmxleGlibGVfYXJyYXlfbWVtYmVy X3ApOiBMaWtld2lzZS4NCj4+Pj4gDQo+Pj4+IGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOg0KPj4+ PiANCj4+Pj4gCSogZ2NjLmRnL3N0cmljdC1mbGV4LWFycmF5LTEuYzogTmV3IHRlc3QuDQo+Pj4+ IC0tLQ0KPj4+PiBnY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmNjICAgICAgICAgICAgICAgICAgfCAg NDcgKysrKysrKysNCj4+Pj4gZ2NjL2MtZmFtaWx5L2Mub3B0ICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA3ICsrDQo+Pj4+IGdjYy9jL2MtZGVjbC5jYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICA5MSArKysrKysrKysrKysrLS0NCj4+Pj4gZ2NjL2RvYy9leHRlbmQudGV4aSAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDI1ICsrKysNCj4+Pj4gZ2NjL2RvYy9pbnZva2UudGV4aSAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICsrKystDQo+Pj4+IGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL3N0cmljdC1mbGV4LWFycmF5LTEuYyB8ICAzMSArKysrKw0KPj4+PiBnY2MvdHJlZS1jb3Jl LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0NCj4+Pj4gZ2NjL3RyZWUuY2Mg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMwICsrKysrKysrKysrKysrLS0tLS0t LQ0KPj4+PiBnY2MvdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTYg KystDQo+Pj4+IDkgZmlsZXMgY2hhbmdlZCwgMzIyIGluc2VydGlvbnMoKyksIDU3IGRlbGV0aW9u cygtKQ0KPj4+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RyaWN0 LWZsZXgtYXJyYXktMS5jDQo+Pj4+IA0KPj4+PiBkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mt YXR0cmlicy5jYyBiL2djYy9jLWZhbWlseS9jLWF0dHJpYnMuY2MNCj4+Pj4gaW5kZXggYzhkOTY3 MjNmNGMuLjEwZDE2NTMyZjBkIDEwMDY0NA0KPj4+PiAtLS0gYS9nY2MvYy1mYW1pbHkvYy1hdHRy aWJzLmNjDQo+Pj4+ICsrKyBiL2djYy9jLWZhbWlseS9jLWF0dHJpYnMuY2MNCj4+Pj4gQEAgLTEw MSw2ICsxMDEsOCBAQCBzdGF0aWMgdHJlZSBoYW5kbGVfc3BlY2lhbF92YXJfc2VjX2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7DQo+Pj4+IHN0YXRpYyB0cmVlIGhh bmRsZV9hbGlnbmVkX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7 DQo+Pj4+IHN0YXRpYyB0cmVlIGhhbmRsZV93YXJuX2lmX25vdF9hbGlnbmVkX2F0dHJpYnV0ZSAo dHJlZSAqLCB0cmVlLCB0cmVlLA0KPj4+PiAJCQkJCQkgIGludCwgYm9vbCAqKTsNCj4+Pj4gK3N0 YXRpYyB0cmVlIGhhbmRsZV9zdHJpY3RfZmxleF9hcnJheV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJl ZSwgdHJlZSwNCj4+Pj4gKwkJCQkJCWludCwgYm9vbCAqKTsNCj4+Pj4gc3RhdGljIHRyZWUgaGFu ZGxlX3dlYWtfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKSA7DQo+ Pj4+IHN0YXRpYyB0cmVlIGhhbmRsZV9ub3BsdF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJl ZSwgaW50LCBib29sICopIDsNCj4+Pj4gc3RhdGljIHRyZWUgaGFuZGxlX2FsaWFzX2lmdW5jX2F0 dHJpYnV0ZSAoYm9vbCwgdHJlZSAqLCB0cmVlLCB0cmVlLCBib29sICopOw0KPj4+PiBAQCAtMzY3 LDYgKzM2OSw4IEBAIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHRyaWJ1 dGVfdGFibGVbXSA9DQo+Pj4+IAkgICAgICAgICAgICAgICAgICAgICAgYXR0cl9hbGlnbmVkX2V4 Y2x1c2lvbnMgfSwNCj4+Pj4geyAid2Fybl9pZl9ub3RfYWxpZ25lZCIsICAgIDAsIDEsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLA0KPj4+PiAJCQkgICAgICBoYW5kbGVfd2Fybl9pZl9ub3Rf YWxpZ25lZF9hdHRyaWJ1dGUsIE5VTEwgfSwNCj4+Pj4gKyAgeyAic3RyaWN0X2ZsZXhfYXJyYXki LCAgICAgIDEsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLA0KPj4+PiArCQkJICAgICAg aGFuZGxlX3N0cmljdF9mbGV4X2FycmF5X2F0dHJpYnV0ZSwgTlVMTCB9LA0KPj4+PiB7ICJ3ZWFr IiwgICAgICAgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsDQo+ Pj4+IAkJCSAgICAgIGhhbmRsZV93ZWFrX2F0dHJpYnV0ZSwgTlVMTCB9LA0KPj4+PiB7ICJub3Bs dCIsICAgICAgICAgICAgICAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLA0K Pj4+PiBAQCAtMjQ5OCw2ICsyNTAyLDQ5IEBAIGhhbmRsZV93YXJuX2lmX25vdF9hbGlnbmVkX2F0 dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLA0KPj4+PiAJCQkJCSAgbm9fYWRkX2F0dHJz LCB0cnVlKTsNCj4+Pj4gfQ0KPj4+PiANCj4+Pj4gKy8qIEhhbmRsZSBhICJzdHJpY3RfZmxleF9h cnJheSIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4NCj4+Pj4gKyAgIHN0cnVjdCBhdHRyaWJ1 dGVfc3BlYy5oYW5kbGVyLiAgKi8NCj4+Pj4gKw0KPj4+PiArc3RhdGljIHRyZWUNCj4+Pj4gK2hh bmRsZV9zdHJpY3RfZmxleF9hcnJheV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwN Cj4+Pj4gKwkJCQkgICAgdHJlZSBhcmdzLCBpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLA0KPj4+PiAr CQkJCSAgICBib29sICpub19hZGRfYXR0cnMpDQo+Pj4+ICt7DQo+Pj4+ICsgIHRyZWUgZGVjbCA9 ICpub2RlOw0KPj4+PiArICB0cmVlIGFyZ3ZhbCA9IFRSRUVfVkFMVUUgKGFyZ3MpOw0KPj4+PiAr DQo+Pj4+ICsgIC8qIFRoaXMgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0byBmaWVsZCBkZWNscyBv ZiBhIHN0cnVjdHVyZS4gICovDQo+Pj4+ICsgIGlmIChUUkVFX0NPREUgKGRlY2wpICE9IEZJRUxE X0RFQ0wpDQo+Pj4+ICsgICAgew0KPj4+PiArICAgICAgZXJyb3JfYXQgKERFQ0xfU09VUkNFX0xP Q0FUSU9OIChkZWNsKSwNCj4+Pj4gKwkJIiVxRSBhdHRyaWJ1dGUgbWF5IG5vdCBiZSBzcGVjaWZp ZWQgZm9yICVxK0QiLCBuYW1lLCBkZWNsKTsNCj4+Pj4gKyAgICAgICpub19hZGRfYXR0cnMgPSB0 cnVlOw0KPj4+PiArICAgIH0NCj4+Pj4gKyAgLyogVGhpcyBhdHRyaWJ1dGUgb25seSBhcHBsaWVz IHRvIGZpZWxkIHdpdGggYXJyYXkgdHlwZS4gICovDQo+Pj4+ICsgIGVsc2UgaWYgKFRSRUVfQ09E RSAoVFJFRV9UWVBFIChkZWNsKSkgIT0gQVJSQVlfVFlQRSkNCj4+Pj4gKyAgICB7DQo+Pj4+ICsg ICAgICBlcnJvcl9hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLA0KPj4+PiArCQkiJXFF IGF0dHJpYnV0ZSBtYXkgbm90IGJlIHNwZWNpZmllZCBmb3IgYSBub24gYXJyYXkgZmllbGQiLA0K Pj4+PiArCQluYW1lKTsNCj4+Pj4gKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOw0KPj4+PiAr ICAgIH0NCj4+Pj4gKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChhcmd2YWwpICE9IElOVEVHRVJfQ1NU KQ0KPj4+PiArICAgIHsNCj4+Pj4gKyAgICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAoZGVjbCksDQo+Pj4+ICsJCSIlcUUgYXR0cmlidXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ2Vy IiwgbmFtZSk7DQo+Pj4+ICsgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsNCj4+Pj4gKyAgICB9 DQo+Pj4+ICsgIGVsc2UgaWYgKCF0cmVlX2ZpdHNfdWh3aV9wIChhcmd2YWwpIHx8IHRyZWVfdG9f dWh3aSAoYXJndmFsKSA+IDMpDQo+Pj4+ICsgICAgew0KPj4+PiArICAgICAgZXJyb3JfYXQgKERF Q0xfU09VUkNFX0xPQ0FUSU9OIChkZWNsKSwNCj4+Pj4gKwkJIiVxRSBhdHRyaWJ1dGUgYXJndW1l bnQgJXFFIGlzIG5vdCBhbiBpbnRlZ2VyIGNvbnN0YW50Ig0KPj4+PiArCQkiIGJldHdlZW4gMCBh bmQgMyIsIG5hbWUsIGFyZ3ZhbCk7DQo+Pj4+ICsgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsN Cj4+Pj4gKyAgICB9DQo+Pj4+ICsNCj4+Pj4gKyAgcmV0dXJuIE5VTExfVFJFRTsNCj4+Pj4gK30N Cj4+Pj4gKw0KPj4+PiAvKiBIYW5kbGUgYSAid2VhayIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMg aW4NCj4+Pj4gIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8NCj4+Pj4gDQo+Pj4+ IGRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQNCj4+ Pj4gaW5kZXggNDRlMWE2MGNlMjQuLjg2NGNkOGRmMWQzIDEwMDY0NA0KPj4+PiAtLS0gYS9nY2Mv Yy1mYW1pbHkvYy5vcHQNCj4+Pj4gKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0DQo+Pj4+IEBAIC0y MDYwLDYgKzIwNjAsMTMgQEAgZnNpemVkLWRlYWxsb2NhdGlvbg0KPj4+PiBDKysgT2JqQysrIFZh cihmbGFnX3NpemVkX2RlYWxsb2NhdGlvbikgSW5pdCgtMSkNCj4+Pj4gRW5hYmxlIEMrKzE0IHNp emVkIGRlYWxsb2NhdGlvbiBzdXBwb3J0Lg0KPj4+PiANCj4+Pj4gK2ZzdHJpY3QtZmxleC1hcnJh eQ0KPj4+PiArQyBDKysgQ29tbW9uIEFsaWFzKGZzdHJpY3QtZmxleC1hcnJheT0sMywwKQ0KPj4+ PiArDQo+Pj4+ICtmc3RyaWN0LWZsZXgtYXJyYXk9DQo+Pj4+ICtDIEMrKyBDb21tb24gSm9pbmVk IFJlamVjdE5lZ2F0aXZlIFVJbnRlZ2VyIFZhcihmbGFnX3N0cmljdF9mbGV4X2FycmF5KSBJbml0 KDApIEludGVnZXJSYW5nZSgwLDMpDQo+Pj4+ICstZnN0cmljdC1mbGV4LWFycmF5PTxsZXZlbD4g ICAgVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0dXJlIGFzIGEgZmxleGlibGUg YXJyYXkgaW4gYSBzdHJpY3RlciB3YXkuICBUaGUgZGVmYXVsdCBpcyB0cmVhdGluZyBhbGwgdHJh aWxpbmcgYXJyYXlzIG9mIHN0cnVjdHVyZXMgYXMgZmxleGlibGUgYXJyYXlzLg0KPj4+PiArDQo+ Pj4+IGZzcXVhbmdsZQ0KPj4+PiBDKysgT2JqQysrIFdhcm5SZW1vdmVkDQo+Pj4+IA0KPj4+PiBk aWZmIC0tZ2l0IGEvZ2NjL2MvYy1kZWNsLmNjIGIvZ2NjL2MvYy1kZWNsLmNjDQo+Pj4+IGluZGV4 IGFlODk5MGMxMzhmLi4xNGRlZmFlOTU4NCAxMDA2NDQNCj4+Pj4gLS0tIGEvZ2NjL2MvYy1kZWNs LmNjDQo+Pj4+ICsrKyBiL2djYy9jL2MtZGVjbC5jYw0KPj4+PiBAQCAtNTAxMywxMCArNTAxMyw3 IEBAIGFkZF9mbGV4aWJsZV9hcnJheV9lbHRzX3RvX3NpemUgKHRyZWUgZGVjbCwgdHJlZSBpbml0 KQ0KPj4+PiANCj4+Pj4gZWx0ID0gQ09OU1RSVUNUT1JfRUxUUyAoaW5pdCktPmxhc3QgKCkudmFs dWU7DQo+Pj4+IHR5cGUgPSBUUkVFX1RZUEUgKGVsdCk7DQo+Pj4+IC0gIGlmIChUUkVFX0NPREUg KHR5cGUpID09IEFSUkFZX1RZUEUNCj4+Pj4gLSAgICAgICYmIFRZUEVfU0laRSAodHlwZSkgPT0g TlVMTF9UUkVFDQo+Pj4+IC0gICAgICAmJiBUWVBFX0RPTUFJTiAodHlwZSkgIT0gTlVMTF9UUkVF DQo+Pj4+IC0gICAgICAmJiBUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKSA9PSBO VUxMX1RSRUUpDQo+Pj4+ICsgIGlmIChmbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAodHlwZSkpDQo+ Pj4+ICAgew0KPj4+PiAgICAgY29tcGxldGVfYXJyYXlfdHlwZSAoJnR5cGUsIGVsdCwgZmFsc2Up Ow0KPj4+PiAgICAgREVDTF9TSVpFIChkZWNsKQ0KPj4+PiBAQCAtODcyMCw2ICs4NzE3LDgwIEBA IGZpbmlzaF9pbmNvbXBsZXRlX3ZhcnMgKHRyZWUgaW5jb21wbGV0ZV92YXJzLCBib29sIHRvcGxl dmVsKQ0KPj4+PiAgIH0NCj4+Pj4gfQ0KPj4+PiANCj4+Pj4gKy8qIERldGVybWluZSB3aGV0aGVy IHRoZSBGSUVMRF9ERUNMIFggaXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgYWNjb3JkaW5nIHRv DQo+Pj4+ICsgICB0aGUgZm9sbG93aW5nIGluZm86DQo+Pj4+ICsgIEEuIHdoZXRoZXIgdGhlIEZJ RUxEX0RFQ0wgWCBpcyB0aGUgbGFzdCBmaWVsZCBvZiB0aGUgREVDTF9DT05URVhUOw0KPj4+PiAr ICBCLiB3aGV0aGVyIHRoZSBGSUVMRF9ERUNMIGlzIGFuIGFycmF5IHRoYXQgaXMgZGVjbGFyZWQg YXMgIltdIiwgIlswXSIsDQo+Pj4+ICsgICAgIG9yICJbMV0iOw0KPj4+PiArICBDLiBmbGFnX3N0 cmljdF9mbGV4X2FycmF5Ow0KPj4+PiArICBELiB0aGUgYXR0cmlidXRlIHN0cmljdF9mbGV4X2Fy cmF5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGZpZWxkDQo+Pj4+ICsgICAgIGlmIHByZXNlbnRp bmcuDQo+Pj4+ICsgIFJldHVybiBUUlVFIHdoZW4gaXQncyBhIGZsZXhpYmxlIGFycmF5IG1lbWJl ciwgRkFMU0Ugb3RoZXJ3aXNlLiAgKi8NCj4+Pj4gKw0KPj4+PiArc3RhdGljIGJvb2wNCj4+Pj4g K2lzX2ZsZXhpYmxlX2FycmF5X21lbWJlcl9wIChib29sIGlzX2xhc3RfZmllbGQsDQo+Pj4+ICsJ CQkgICAgdHJlZSB4KQ0KPj4+PiArew0KPj4+PiArICAvKiBpZiBub3QgdGhlIGxhc3QgZmllbGQs IHJldHVybiBmYWxzZS4gICovDQo+Pj4+ICsgIGlmICghaXNfbGFzdF9maWVsZCkNCj4+Pj4gKyAg ICByZXR1cm4gZmFsc2U7DQo+Pj4+ICsNCj4+Pj4gKyAgLyogaWYgbm90IGFuIGFycmF5IGZpZWxk LCByZXR1cm4gZmFsc2UuICAqLw0KPj4+PiArICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHgp KSAhPSBBUlJBWV9UWVBFKQ0KPj4+PiArICAgIHJldHVybiBmYWxzZTsNCj4+Pj4gKw0KPj4+PiAr ICBib29sIGlzX3plcm9fbGVuZ3RoX2FycmF5ID0gemVyb19sZW5ndGhfYXJyYXlfcCAoVFJFRV9U WVBFICh4KSk7DQo+Pj4+ICsgIGJvb2wgaXNfb25lX2VsZW1lbnRfYXJyYXkgPSBvbmVfZWxlbWVu dF9hcnJheV9wIChUUkVFX1RZUEUgKHgpKTsNCj4+Pj4gKyAgYm9vbCBpc19mbGV4aWJsZV9hcnJh eSA9IGZsZXhpYmxlX2FycmF5X21lbWJlcl9wIChUUkVFX1RZUEUgKHgpKTsNCj4+Pj4gKw0KPj4+ PiArICB1bnNpZ25lZCBpbnQgc3RyaWN0X2ZsZXhfYXJyYXlfbGV2ZWwgPSBmbGFnX3N0cmljdF9m bGV4X2FycmF5Ow0KPj4+PiArDQo+Pj4+ICsgIHRyZWUgYXR0cl9zdHJpY3RfZmxleF9hcnJheSA9 IGxvb2t1cF9hdHRyaWJ1dGUgKCJzdHJpY3RfZmxleF9hcnJheSIsDQo+Pj4+ICsJCQkJCQkgIERF Q0xfQVRUUklCVVRFUyAoeCkpOw0KPj4+PiArICAvKiBpZiB0aGVyZSBpcyBhIHN0cmljdF9mbGV4 X2FycmF5IGF0dHJpYnV0ZSBhdHRhY2hlZCB0byB0aGUgZmllbGQsDQo+Pj4+ICsgICAgIG92ZXJy aWRlIHRoZSBmbGFnX3N0cmljdF9mbGV4X2FycmF5LiAgKi8NCj4+Pj4gKyAgaWYgKGF0dHJfc3Ry aWN0X2ZsZXhfYXJyYXkpDQo+Pj4+ICsgICAgew0KPj4+PiArICAgICAgLyogZ2V0IHRoZSB2YWx1 ZSBvZiB0aGUgbGV2ZWwgZmlyc3QgZnJvbSB0aGUgYXR0cmlidXRlLiAgKi8NCj4+Pj4gKyAgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYXR0cl9zdHJpY3RfZmxleF9hcnJheV9sZXZlbCA9IDA7 DQo+Pj4+ICsgICAgICBnY2NfYXNzZXJ0IChUUkVFX1ZBTFVFIChhdHRyX3N0cmljdF9mbGV4X2Fy cmF5KSAhPSBOVUxMX1RSRUUpOw0KPj4+PiArICAgICAgYXR0cl9zdHJpY3RfZmxleF9hcnJheSA9 IFRSRUVfVkFMVUUgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpOw0KPj4+PiArICAgICAgZ2NjX2Fz c2VydCAoVFJFRV9WQUxVRSAoYXR0cl9zdHJpY3RfZmxleF9hcnJheSkgIT0gTlVMTF9UUkVFKTsN Cj4+Pj4gKyAgICAgIGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkgPSBUUkVFX1ZBTFVFIChhdHRyX3N0 cmljdF9mbGV4X2FycmF5KTsNCj4+Pj4gKyAgICAgIGdjY19hc3NlcnQgKHRyZWVfZml0c191aHdp X3AgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpKTsNCj4+Pj4gKyAgICAgIGF0dHJfc3RyaWN0X2Zs ZXhfYXJyYXlfbGV2ZWwgPSB0cmVlX3RvX3Vod2kgKGF0dHJfc3RyaWN0X2ZsZXhfYXJyYXkpOw0K Pj4+PiArDQo+Pj4+ICsgICAgICAvKiB0aGUgYXR0cmlidXRlIGhhcyBoaWdoZXIgcHJpb3JpdHkg dGhhbiBmbGFnX3N0cnVjdF9mbGV4X2FycmF5LiAgKi8NCj4+Pj4gKyAgICAgIHN0cmljdF9mbGV4 X2FycmF5X2xldmVsID0gYXR0cl9zdHJpY3RfZmxleF9hcnJheV9sZXZlbDsNCj4+Pj4gKyAgICB9 DQo+Pj4+ICsNCj4+Pj4gKyAgc3dpdGNoIChzdHJpY3RfZmxleF9hcnJheV9sZXZlbCkNCj4+Pj4g KyAgICB7DQo+Pj4+ICsgICAgICBjYXNlIDA6DQo+Pj4+ICsJLyogZGVmYXVsdCwgYWxsIHRyYWls aW5nIGFycmF5cyBhcmUgZmxleGlhYmxlIGFycmF5IG1lbWJlcnMuICAqLw0KPj4+PiArCXJldHVy biB0cnVlOw0KPj4+PiArICAgICAgY2FzZSAxOg0KPj4+PiArCS8qIExldmVsIDE6IGFsbCAiWzFd IiwgIlswXSIsIGFuZCAiW10iIGFyZSBmbGV4aWFibGUgYXJyYXkgbWVtYmVycy4gICovDQo+Pj4+ ICsJaWYgKGlzX29uZV9lbGVtZW50X2FycmF5KQ0KPj4+PiArCSAgcmV0dXJuIHRydWU7DQo+Pj4+ ICsJLyogRkFMTFRIUk9VR0guICAqLw0KPj4+PiArICAgICAgY2FzZSAyOg0KPj4+PiArCS8qIExl dmVsIDI6IGFsbCAiWzBdIiwgYW5kICJbXSIgYXJlIGZsZXhpYWJsZSBhcnJheSBtZW1iZXJzLiAg Ki8NCj4+Pj4gKwlpZiAoaXNfemVyb19sZW5ndGhfYXJyYXkpDQo+Pj4+ICsJICByZXR1cm4gdHJ1 ZTsNCj4+Pj4gKwkvKiBGQUxMVEhST1VHSC4gICovDQo+Pj4+ICsgICAgICBjYXNlIDM6DQo+Pj4+ ICsJLyogTGV2ZWwgMzogT25seSAiW10iIGFyZSBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLiAgKi8N Cj4+Pj4gKwlpZiAoaXNfZmxleGlibGVfYXJyYXkpDQo+Pj4+ICsJICByZXR1cm4gdHJ1ZTsNCj4+ Pj4gKwlicmVhazsNCj4+Pj4gKyAgICAgIGRlZmF1bHQ6DQo+Pj4+ICsJZ2NjX3VucmVhY2hhYmxl ICgpOw0KPj4+PiArICAgIH0NCj4+Pj4gKyAgcmV0dXJuIGZhbHNlOw0KPj4+PiArfQ0KPj4+PiAr DQo+Pj4+ICsNCj4+Pj4gLyogRmlsbCBpbiB0aGUgZmllbGRzIG9mIGEgUkVDT1JEX1RZUEUgb3Ig VU5JT05fVFlQRSBub2RlLCBULg0KPj4+PiAgTE9DIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgUkVD T1JEX1RZUEUgb3IgVU5JT05fVFlQRSdzIGRlZmluaXRpb24uDQo+Pj4+ICBGSUVMRExJU1QgaXMg YSBjaGFpbiBvZiBGSUVMRF9ERUNMIG5vZGVzIGZvciB0aGUgZmllbGRzLg0KPj4+PiBAQCAtODc4 MSw2ICs4ODUyLDggQEAgZmluaXNoX3N0cnVjdCAobG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJl ZSBmaWVsZGxpc3QsIHRyZWUgYXR0cmlidXRlcywNCj4+Pj4gYm9vbCBzYXdfbmFtZWRfZmllbGQg PSBmYWxzZTsNCj4+Pj4gZm9yICh4ID0gZmllbGRsaXN0OyB4OyB4ID0gREVDTF9DSEFJTiAoeCkp DQo+Pj4+ICAgew0KPj4+PiArICAgICAgYm9vbCBpc19sYXN0X2ZpZWxkID0gKERFQ0xfQ0hBSU4g KHgpID09IE5VTExfVFJFRSk7DQo+Pj4+ICsNCj4+Pj4gICAgIGlmIChUUkVFX1RZUEUgKHgpID09 IGVycm9yX21hcmtfbm9kZSkNCj4+Pj4gCWNvbnRpbnVlOw0KPj4+PiANCj4+Pj4gQEAgLTg4MTks MTAgKzg4OTIsNyBAQCBmaW5pc2hfc3RydWN0IChsb2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVl IGZpZWxkbGlzdCwgdHJlZSBhdHRyaWJ1dGVzLA0KPj4+PiAJREVDTF9QQUNLRUQgKHgpID0gMTsN Cj4+Pj4gDQo+Pj4+ICAgICAvKiBEZXRlY3QgZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIGFuIGlu dmFsaWQgY29udGV4dC4gICovDQo+Pj4+IC0gICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUg KHgpKSA9PSBBUlJBWV9UWVBFDQo+Pj4+IC0JICAmJiBUWVBFX1NJWkUgKFRSRUVfVFlQRSAoeCkp ID09IE5VTExfVFJFRQ0KPj4+PiAtCSAgJiYgVFlQRV9ET01BSU4gKFRSRUVfVFlQRSAoeCkpICE9 IE5VTExfVFJFRQ0KPj4+PiAtCSAgJiYgVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOIChUUkVF X1RZUEUgKHgpKSkgPT0gTlVMTF9UUkVFKQ0KPj4+PiArICAgICAgaWYgKGZsZXhpYmxlX2FycmF5 X21lbWJlcl9wIChUUkVFX1RZUEUgKHgpKSkNCj4+Pj4gCXsNCj4+Pj4gCSAgaWYgKFRSRUVfQ09E RSAodCkgPT0gVU5JT05fVFlQRSkNCj4+Pj4gCSAgICB7DQo+Pj4+IEBAIC04ODMwLDcgKzg5MDAs NyBAQCBmaW5pc2hfc3RydWN0IChsb2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVlIGZpZWxkbGlz dCwgdHJlZSBhdHRyaWJ1dGVzLA0KPj4+PiAJCQkiZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIHVu aW9uIik7DQo+Pj4+IAkgICAgICBUUkVFX1RZUEUgKHgpID0gZXJyb3JfbWFya19ub2RlOw0KPj4+ PiAJICAgIH0NCj4+Pj4gLQkgIGVsc2UgaWYgKERFQ0xfQ0hBSU4gKHgpICE9IE5VTExfVFJFRSkN Cj4+Pj4gKwkgIGVsc2UgaWYgKCFpc19sYXN0X2ZpZWxkKQ0KPj4+PiAJICAgIHsNCj4+Pj4gCSAg ICAgIGVycm9yX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoeCksDQo+Pj4+IAkJCSJmbGV4aWJs ZSBhcnJheSBtZW1iZXIgbm90IGF0IGVuZCBvZiBzdHJ1Y3QiKTsNCj4+Pj4gQEAgLTg4NTAsNiAr ODkyMCw5IEBAIGZpbmlzaF9zdHJ1Y3QgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQsIHRyZWUgZmll bGRsaXN0LCB0cmVlIGF0dHJpYnV0ZXMsDQo+Pj4+IAlwZWR3YXJuIChERUNMX1NPVVJDRV9MT0NB VElPTiAoeCksIE9QVF9XcGVkYW50aWMsDQo+Pj4+IAkJICJpbnZhbGlkIHVzZSBvZiBzdHJ1Y3R1 cmUgd2l0aCBmbGV4aWJsZSBhcnJheSBtZW1iZXIiKTsNCj4+Pj4gDQo+Pj4+ICsgICAgICAvKiBT ZXQgREVDTF9OT1RfRkxFWEFSUkFZIGZsYWcgZm9yIEZJRUxEX0RFQ0wgeC4gICovDQo+Pj4+ICsg ICAgICBERUNMX05PVF9GTEVYQVJSQVkgKHgpID0gIWlzX2ZsZXhpYmxlX2FycmF5X21lbWJlcl9w IChpc19sYXN0X2ZpZWxkLCB4KTsNCj4+Pj4gKw0KPj4+PiAgICAgaWYgKERFQ0xfTkFNRSAoeCkN Cj4+Pj4gCSAgfHwgUkVDT1JEX09SX1VOSU9OX1RZUEVfUCAoVFJFRV9UWVBFICh4KSkpDQo+Pj4+ IAlzYXdfbmFtZWRfZmllbGQgPSB0cnVlOw0KPj4+PiBkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9leHRl bmQudGV4aSBiL2djYy9kb2MvZXh0ZW5kLnRleGkNCj4+Pj4gaW5kZXggZGZiZTMzYWM2NTIuLjc0 NTE0MTBhMDExIDEwMDY0NA0KPj4+PiAtLS0gYS9nY2MvZG9jL2V4dGVuZC50ZXhpDQo+Pj4+ICsr KyBiL2djYy9kb2MvZXh0ZW5kLnRleGkNCj4+Pj4gQEAgLTc0MzYsNiArNzQzNiwzMSBAQCBUaGlz IHdhcm5pbmcgY2FuIGJlIGRpc2FibGVkIGJ5IEBvcHRpb257LVduby1pZi1ub3QtYWxpZ25lZH0u DQo+Pj4+IFRoZSBAY29kZXt3YXJuX2lmX25vdF9hbGlnbmVkfSBhdHRyaWJ1dGUgY2FuIGFsc28g YmUgdXNlZCBmb3IgdHlwZXMNCj4+Pj4gKEBweHJlZntDb21tb24gVHlwZSBBdHRyaWJ1dGVzfS4p DQo+Pj4+IA0KPj4+PiArQGNpbmRleCBAY29kZXtzdHJpY3RfZmxleF9hcnJheX0gdmFyaWFibGUg YXR0cmlidXRlDQo+Pj4+ICtAaXRlbSBzdHJpY3RfZmxleF9hcnJheSAoQHZhcntsZXZlbH0pDQo+ Pj4+ICtUaGUgQGNvZGV7c3RyaWN0X2ZsZXhfYXJyYXl9IGF0dHJpYnV0ZSBzaG91bGQgYmUgYXR0 YWNoZWQgdG8gdGhlIHRyYWlsaW5nDQo+Pj4+ICthcnJheSBmaWVsZCBvZiBhIHN0cnVjdHVyZS4g IEl0IHNwZWNpZmllcyB0aGUgbGV2ZWwgb2Ygc3RyaWN0bmVzcyBvZg0KPj4+PiArdHJlYXRpbmcg dGhlIHRyYWlsaW5nIGFycmF5IGZpZWxkIG9mIGEgc3RydWN0dXJlIGFzIGEgZmxleGlibGUgYXJy YXkNCj4+Pj4gK21lbWJlci4gQHZhcntsZXZlbH0gbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlbiAw IHRvIDMuDQo+Pj4+ICsNCj4+Pj4gK0B2YXJ7bGV2ZWx9PTAgaXMgdGhlIGxlYXN0IHN0cmljdCBs ZXZlbCwgYWxsIHRyYWlsaW5nIGFycmF5cyBvZiBzdHJ1Y3R1cmVzDQo+Pj4+ICthcmUgdHJlYXRl ZCBhcyBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLiBAdmFye2xldmVsfT0zIGlzIHRoZSBzdHJpY3Rl c3QgbGV2ZWwsDQo+Pj4+ICtvbmx5IHdoZW4gdGhlIHRyYWlsaW5nIGFycmF5IGlzIGRlY2xhcmVk IGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHBlciBDOTkNCj4+Pj4gK3N0YW5kYXJkIG9ud2Fy ZHMgKFtdKSwgaXQgaXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlci4NCj4+PiAN Cj4+PiBIb3cgaXMgbGV2ZWwgMyAodGh1cyAtZnN0cmljdC1mbGV4LWFycmF5KSBpbnRlcnByZXRl ZCB3aGVuIHlvdSBzcGVjaWZ5IA0KPj4+IC1zdGQ9Yzg5PyAgSG93IGZvciAtc3RkPWdudTg5Pw0K Pj4gDQo+PiAxLiB3aGF04oCZcyB0aGUgbWFqb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIC1zdGQ9Yzg5 IGFuZCAtc3RkPWdudTg5IG9uIGZsZXhpYmxlIGFycmF5PyAoQ2hlY2tlZCBvbmxpbmUsIGNhbm5v dCBmaW5kIGEgY29uY3JldGUgYW5zd2VyIG9uIHRoaXMpLg0KPj4gCSoqIG15IHVuZGVyc3RhbmRp bmcgaXM6ICAgLXN0ZD1jODkgd2lsbCBub3Qgc3VwcG9ydCBhbnkgZmxleGlibGUgYXJyYXkgKG5l aXRoZXIgW10sIFswXSwgWzFdKSwgYnV0IC1zdGQ9Z251ODkgd2lsbCBzdXBwb3J0IFswXSBhbmQg WzFdLCBidXQgbm90IFtdLg0KPj4gICAgICAgICBJcyB0aGlzIGNvcnJlY3Q/DQo+IA0KPiBZZXMu DQo+IA0KPj4gSWYgbXkgYW5zd2VyIHRvIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBjb3JyZWN0LCB0 aGVuOg0KPj4gDQo+PiAyLiBXaGVuIC1mc3RyaWN0LWZsZXgtYXJyYXk9biBhbmQgLXN0ZD1jODkg cHJlc2VudCBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaCBvbmUgaGFzIHRoZSBoaWdoZXIgcHJpb3Jp dHk/IA0KPj4gICAgIAkqKiBJIHRoaW5rIHRoYXQgLXN0ZD1jODkgc2hvdWxkIGJlIGhvbm9yZWQg b3ZlciAtZnN0cmljdC1mbGV4LWFycmF5LCB0aGVyZWZvcmUgd2Ugc2hvdWxkIGRpc2FibGUgLWZz dHJpY3QtZmxleC1hcnJheT1uIHdoZW4gbiA+IDAgIGFuZCBpc3N1ZSB3YXJuaW5ncyB0byB0aGUg dXNlci4NCj4+IA0KPj4gDQo+PiAzLiBob3cgYWJvdXQgLWZzdHJpY3QtZmxleC1hcnJheT1uIGFu ZCAtc3RkPWdudTg5IHByZXNlbnQgYXQgdGhlIHNhbWUgdGltZT8gDQo+PiAgICAgCSoqIFdoZW4g LXN0ZD1nbnU4OSBwcmVzZW50LCBbXSBpcyBub3Qgc3VwcG9ydGVkLiBTbywgd2UgbmVlZCB0byBp c3N1ZSBhbiB3YXJuaW5nIHRvIGRpc2FibGUgLWZzdHJpY3QtZmxleC1hcnJheT0zOyBidXQgbGV2 ZWwgMSBhbmQgbGV2ZWwgMiBpcyBPa2F5Lg0KPj4gDQo+PiBXZSBhbHNvIG5lZWQgdG8gZG9jdW1l bnQgdGhlIGFib3ZlLg0KPj4gDQo+PiBMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgbW9yZSBj b21tZW50IGFuZCBzdWdnZXN0aW9ucyBoZXJlLg0KPiANCj4gSW4gbXkgb3BpbmlvbiAtZnN0cmlj dC1mbGV4LWFycmF5IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBDOTkgYW5kIGFib3ZlLiAgDQo+IFRo ZSBleHRyYSBzdWItbGV2ZWxzIGFsbG93aW5nIFswXSBvciBbMV0gYXJlIG9mIHF1ZXN0aW9uYWJs ZSBiZW5lZml0Lg0KVGhlIG11bHRpcGxlLWxldmVscyBjb250cm9sIGZvciAtZnN0cmljdC1mbGV4 LWFycmF5cyB3YXMgYW4gYWdyZWVtZW50IG9uIHRoZSBkaXNjdXNzaW9uIG9mIFBSMTAxODM2Og0K aHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTAxODM2DQoNClBs ZWFzZSBzZWUgY29tbWVudCMxNyB0aWxsICMyNSBmb3IgdGhlIGRldGFpbHMuDQoNCkEgc3VtbWFy eSBvZiB0aGUgZGlzY3Vzc2lvbiBpczogIChQbGVhc2UgY29tbWVudCBvbiB0aGUgZm9sbG93aW5n IHBhcmFncmFwaCBpZiB5b3Ugc2VlIGFueSBpc3N1ZSB3aXRoIGl0KQ0KDQo9PT09PQ0KRmxleGli bGUgQXJyYXkgTWVtYmVyIChGQU0pIGlzIGEgZmVhdHVyZSBpbnRyb2R1Y2VkIGluIHRoZSBDOTkg c3RhbmRhcmQgb2YgdGhlIEMgbGFuZ3VhZ2UgaW4gTWF5IDIwMDAuICBJdCdzIHVzZWQgYXMgdGhl IGxhc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZSB3aGljaCBpcyByZWFsbHkgYSBoZWFkZXIgZm9y IGEgdmFyaWFibGUtbGVuZ3RoIG9iamVjdC4NClRoaXMgZmVhdHVyZSB3YXMgb2ZmaWNpYWxseSBz dGFuZGFyZGl6ZWQgaW4gQzk5LiBIb3dldmVyLCBjb21waWxlcnMgKEdDQywgTWljb3Jzb2Z0IGNv bXBpbGVyLCBldGMuKSBzdXBwb3J0ZWQgdGhpcyBmZWF0dXJlIHdlbGwgYmVmb3JlIEM5OSwgd2l0 aCB0aGUgZm9sbG93aW5nIHZhcmlhbnRzOg0KICBBLiB0cmFpbGluZyB6ZXJvLWxlbmd0aCBhcnJh eSBvZiBhIHN0cnVjdHVyZSB3YXMgdHJlYXRlZCBhcyBGQU0uICANCiAgICAgQmVmb3JlIEM5OSwg YSB2YWxpZCBHQ0MgZXh0ZW5zaW9uLCB6ZXJvLWxlbmd0aCBhcnJheSB3YXMgdXNlZCB0byBzdXBw b3J0IGZsZXhpYmxlIGFycmF5IG1lbWJlci4gIFNlZSBtb3JlIGRldGFpbHMgYXQ6ICBodHRwczov L2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL1plcm8tTGVuZ3RoLmh0bWwuDQogIEIuIHRyYWls aW5nIG9uZS1lbGVtZW50IGFycmF5IG9mIGEgc3RydWN0dXJlIHdhcyB0cmVhdGVkIGFzIEZBTS4N CiAgICAgSW4gdGhlIGFic2VuY2Ugb2YgdGhlIHplcm8tbGVuZ3RoIGFycmF5IGV4dGVuc2lvbiwg aW4gSVNPIEM5MCwgb25lLWVsZW1lbnQgYXJyYXlzIGF0IHRoZSBlbmQgb2Ygc3RydWN0dXJlcyB3 ZXJlIHVzZWQgdG8gcmVwcmVzZW50IEZBTXMgYXMgYSBjb252ZXJ0aW9uLg0KICBDLiBhbnkgdHJh aWxpbmcgYXJyYXkgb2YgYSBzdHJ1Y3R1cmUgd2FzIHRyZWF0ZWQgYXMgRkFNLg0KICAgICBFdmVu IGVhcmxpZXIgdGltZSwgaW4gdGhlIGFic2VuY2Ugb2YgYm90aCB6ZXJvLWxlbmd0aCBhcnJheSBH Q0MgZXh0ZW5zaW9uIGFuZCBvbmUtZWxlbWVudCBhcnJheSBjb252ZW50aW9uLCBhbGwgdHJhaWxp bmcgYXJyYXlzIG9mIHN0cnVjdHVyZXMgY291bGQgYmUgdXNlZCBhcyBhIEZBTS4gICAgIA0KQXMg YSByZXN1bHQsIG9sZGVyIGNvZGVzIChiZWZvcmUgQzk5KSBtaWdodCBpbmNsdWRlIGFueSBvZiB0 aGUgYWJvdmUgdmFyaWFudHMgKEEsIEIsIGFuZCBDKSB0byByZXByZXNlbnQgRkFNcy4gDQpBbm90 aGVyIGNvbXBsaWNhdGlvbiBpcyBDKyssIHN0YW5kYXJkIEMrKyBkb2Vzbid0IGFsbG93IGVpdGhl ciBDOTkgZmxleGlibGUgYXJyYXkgbWVtYmVycyBvciB6ZXJvLWxlbmd0aCBhcnJheS4gQSBDKysg cHJvZ3JhbW1lciBoYXMgdG8gdXNlIHRoZSBHQ0MgemVyby1sZW5ndGggYXJyYXkgZXh0ZW5zaW9u IG9yIG9uZS1lbGVtZW50IGFycmF5IGNvbnZlbnRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIEZBTS4N Cj09PT09DQoNCkFzIG1lbnRpb25lZCBieSBKYWt1YiBpbiBjb21tZW50ICMyNTogDQoNCiJkaWZm ZXJlbnRpYXRpbmcgYmV0d2VlbiBvbmx5IGFsbG93aW5nIFtdIGFzIGZsZXgsIG9yIFtdIGFuZCBb MF0sDQpvciBbXSwgWzBdIGFuZCBbMV0sIG9yIGFueSB0cmFpbGluZyBhcnJheSBpcyB1c2VmdWwu Ig0KDQo+IA0KPiBJIHRoaW5rIHRoYXQgd2l0aCAtZnN0cmljdC1mbGV4LWFycmF5IHdlJ3JlIG1p c3NpbmcgYSAtV3N0cmljdC1mbGV4LWFycmF5DQo+IHRoYXQgd291bGQgZGlhZ25vc2UgYWNjZXNz ZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRyZWF0ZWQgYXMgZmxleCBhcnJheQ0KPiBhY2Nlc3MgYnV0 IHdvdWxkIGJlIHdpdGhvdXQgLWZzdHJpY3QtZmxleC1hcnJheT8gIFRoZSBnb2FsIG9mDQo+IC1m c3RyaWN0LWZsZXgtYXJyYXkgKyAtV3N0cmljdC1mbGV4LWFycmF5IGlzIHRvIG1ha2UgY29kZSBz dGFuZGFyZA0KPiBjb25mb3JtYW50LCBubz8gIE5vdCB0byBlbmFibGUgZXh0cmEgb3B0aW1pemF0 aW9uIGZvciBbMV0gYXJyYXlzIHdoZW4NCj4gd2Uga25vdyBbMF0gaXMgdXNlZCBhcyBmbGV4YXJy YXk/DQoNClllcywgSSBhZ3JlZSwgYW5kIHRoaXMgd2lsbCBtYWtlIHRoZSBmZWF0dXJlIG1vcmUg Y29tcGxldGUgYW5kIG1vcmUNCiB1c2VmdWwgdG8gaGVscCB1c2VycyB0byBnZXQgcmlkIG9mIHRo ZSBub24tc3RhbmRhcmQtY29tZm9ybWluZyBzdHlsZXMuIA0KDQpQbGVhc2Ugc2VlIGNvbW1lbnRz ICMyMywgIzM1DQoNCmh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lk PTEwMTgzNiNjMjMNCmh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lk PTEwMTgzNiNjMzUNCg0KQSBzdW1tYXJ5IGlzOg0KDQo9PT09DQpJIHRoaW5rIHRoYXQgLVdzdHJp Y3QtZmxleC1hcnJheXMgd2lsbCBuZWVkIHRvIGJlIGNvb3BlcmF0ZWQgd2l0aCAtZnN0cmljdC1m bGV4LWFycmF5cz1OLCBpLmUsIG9ubHkgd2hlbiAtZnN0cmljdC1mbGV4LWFycmF5cz1OIGlzIHBy ZXNlbnRpbmcsIC1Xc3RyaWN0LWZsZXgtYXJyYXlzIHdpbGwgYmUgdmFsaWQgYW5kIHJlcG9ydCB0 aGUgd2FybmluZ3Mgd2hlbiBzZWUgYSBbMF0sIG9yIFsxXSwgb3IgYW55IHRyYWlsaW5nIGFycmF5 IGJhc2VkIG9uIE46DQoNCndoZW4gLWZzdHJpY3QtZmxleC1hcnJheXMNCj0wLCAtV3N0cmljdC1m bGV4LWFycmF5cyB3aWxsIE5PVCBpc3N1ZSBhbnkgd2FybmluZ3M7DQo9MSwgLVdzdHJpY3QtZmxl eC1hcnJheXMgd2lsbCBpc3N1ZSB3YXJuaW5ncyB3aGVuIGFuIGFycmF5IHJlZidzIGluZGV4IGlz IGxhcmdlciB0aGFuIHRoZSB1cHBlciBib3VuZHMgb2YgYSB0cmFpbGluZyBhcnJheSB0aGF0IGlz IGEgcmVndWxhciB0cmFpbGluZyBhcnJheTsNCj0yLCAtV3N0cmljdC1mbGV4LWFycmF5cyB3aWxs IGlzc3VlIHdhcm5pbmdzIHdoZW4gYW4gYXJyYXkgcmVmJ3MgaW5kZXggaXMgbGFyZ2VyIHRoYW4g dGhlIHVwcGVyIGJvdW5kcyBvZiBhIHRyYWlsaW5nIGFycmF5IHRoYXQgaXMgYSByZWd1bGFyIHRy YWlsaW5nIGFycmF5IG9yIFsxXTsNCj0zLCAtV3N0cmljdC1mbGV4LWFycmF5cyB3aWxsIGlzc3Vl IHdhcm5pbmdzIHdoZW4gYW4gYXJyYXkgcmVmJ3MgaW5kZXggaXMgbGFyZ2VyIHRoYW4gdGhlIHVw cGVyIGJvdW5kcyBvZiBhIHRyYWlsaW5nIGFycmF5IHRoYXQgaXMgYSByZWd1bGFyIHRyYWlsaW5n IGFycmF5IG9yIFsxXSwgb3IgWzBdLg0KDQpsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgY29t bWVudCBhbmQgc3VnZ2VzdGlvbiBvbiB0aGlzLg0KDQo9PT09DQoNCg0KPiANCj4+PiANCj4+Pj4g Kw0KPj4+PiArVGhlcmUgYXJlIHR3byBtb3JlIGxldmVscyBpbiBiZXR3ZWVuIDAgYW5kIDMsIHdo aWNoIGFyZSBwcm92aWRlZCB0byBzdXBwb3J0DQo+Pj4+ICtvbGRlciBjb2RlcyB0aGF0IHVzZSBH Q0MgemVyby1sZW5ndGggYXJyYXkgZXh0ZW5zaW9uIChbMF0pIG9yIG9uZS1zaXplIGFycmF5DQo+ Pj4+ICthcyBmbGV4aWJsZSBhcnJheSBtZW1iZXIgKFsxXSk6DQo+Pj4+ICtXaGVuIEB2YXJ7bGV2 ZWx9IGlzIDEsIHRoZSB0cmFpbGluZyBhcnJheSBpcyB0cmVhdGVkIGFzIGEgZmxleGlibGUgYXJy YXkgbWVtYmVyDQo+Pj4+ICt3aGVuIGl0IGlzIGRlY2xhcmVkIGFzIGVpdGhlciAiW10iLCAiWzBd Iiwgb3IgIlsxXSI7DQo+Pj4+ICtXaGVuIEB2YXJ7bGV2ZWx9IGlzIDIsIHRoZSB0cmFpbGluZyBh cnJheSBpcyB0cmVhdGVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyDQo+Pj4+ICt3aGVuIGl0 IGlzIGRlY2xhcmVkIGFzIGVpdGhlciAiW10iLCBvciAiWzBdIi4NCj4+PiANCj4+PiBHaXZlbiB0 aGUgYWJvdmUgZG9lcyBhZGRpbmcgbGV2ZWwgMiBtYWtlIHNlbnNlIGdpdmVuIHRoYXQgWzBdIGlz IGEgR05VDQo+Pj4gZXh0ZW5zaW9uPw0KPj4gSSB0aGluayBLZWVzIGFscmVhZHkgYW5zd2VyZWQg dGhpcyBxdWVzdGlvbi4NCj4+PiANCj4+Pj4gK1RoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHdp dGggb3Igd2l0aG91dCBAb3B0aW9uey1mc3RyaWN0LWZsZXgtYXJyYXl9LiBXaGVuDQo+Pj4+ICti b3RoIHRoZSBhdHRyaWJ1dGUgYW5kIHRoZSBvcHRpb24gcHJlc2VudCBhdCB0aGUgc2FtZSB0aW1l LCB0aGUgbGV2ZWwgb2YgdGhlDQo+Pj4+ICtzdHJpY3RuZXNzIGZvciB0aGUgc3BlY2lmaWMgdHJh aWxpbmcgYXJyYXkgZmllbGQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXR0cmlidXRlLg0KPj4+PiAr DQo+Pj4+ICsNCj4+Pj4gQGl0ZW0gYWxsb2Nfc2l6ZSAoQHZhcntwb3NpdGlvbn0pDQo+Pj4+IEBp dGVteCBhbGxvY19zaXplIChAdmFye3Bvc2l0aW9uLTF9LCBAdmFye3Bvc2l0aW9uLTJ9KQ0KPj4+ PiBAY2luZGV4IEBjb2Rle2FsbG9jX3NpemV9IHZhcmlhYmxlIGF0dHJpYnV0ZQ0KPj4+PiBkaWZm IC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkNCj4+Pj4g aW5kZXggOTRmZTU3YWE0ZTIuLjliZWZlNjAxODE3IDEwMDY0NA0KPj4+PiAtLS0gYS9nY2MvZG9j L2ludm9rZS50ZXhpDQo+Pj4+ICsrKyBiL2djYy9kb2MvaW52b2tlLnRleGkNCj4+Pj4gQEAgLTIw Nyw3ICsyMDcsOCBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLg0KPj4+PiAtZm9wZW5tcCAg LWZvcGVubXAtc2ltZCBAZ29sDQo+Pj4+IC1mcGVybWl0dGVkLWZsdC1ldmFsLW1ldGhvZHM9QHZh cntzdGFuZGFyZH0gQGdvbA0KPj4+PiAtZnBsYW45LWV4dGVuc2lvbnMgIC1mc2lnbmVkLWJpdGZp ZWxkcyAgLWZ1bnNpZ25lZC1iaXRmaWVsZHMgQGdvbA0KPj4+PiAtLWZzaWduZWQtY2hhciAgLWZ1 bnNpZ25lZC1jaGFyICAtZnNzby1zdHJ1Y3Q9QHZhcntlbmRpYW5uZXNzfX0NCj4+Pj4gKy1mc2ln bmVkLWNoYXIgIC1mdW5zaWduZWQtY2hhciAtZnN0cmljdC1mbGV4LWFycmF5Wz1AdmFye259XSBA Z29sDQo+Pj4+ICstZnNzby1zdHJ1Y3Q9QHZhcntlbmRpYW5uZXNzfX0NCj4+Pj4gDQo+Pj4+IEBp dGVtIEMrKyBMYW5ndWFnZSBPcHRpb25zDQo+Pj4+IEB4cmVme0MrKyBEaWFsZWN0IE9wdGlvbnMs LE9wdGlvbnMgQ29udHJvbGxpbmcgQysrIERpYWxlY3R9Lg0KPj4+PiBAQCAtMjgyNSw2ICsyODI2 LDMwIEBAIFRoZSB0eXBlIEBjb2Rle2NoYXJ9IGlzIGFsd2F5cyBhIGRpc3RpbmN0IHR5cGUgZnJv bSBlYWNoIG9mDQo+Pj4+IEBjb2Rle3NpZ25lZCBjaGFyfSBvciBAY29kZXt1bnNpZ25lZCBjaGFy fSwgZXZlbiB0aG91Z2ggaXRzIGJlaGF2aW9yDQo+Pj4+IGlzIGFsd2F5cyBqdXN0IGxpa2Ugb25l IG9mIHRob3NlIHR3by4NCj4+Pj4gDQo+Pj4+ICtAaXRlbSAtZnN0cmljdC1mbGV4LWFycmF5DQo+ Pj4+ICtAb3BpbmRleCBmc3RyaWN0LWZsZXgtYXJyYXkNCj4+Pj4gK0BvcGluZGV4IGZuby1zdHJp Y3QtZmxleC1hcnJheQ0KPj4+PiArVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5IG9mIGEgc3RydWN0 dXJlIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIGENCj4+Pj4gK3N0cmljdGVyIHdheS4N Cj4+Pj4gK1RoZSBwb3NpdGl2ZSBmb3JtIGlzIGVxdWl2YWxlbnQgdG8gQG9wdGlvbnstZnN0cmlj dC1mbGV4LWFycmF5PTN9LCB3aGljaCBpcyB0aGUNCj4+Pj4gK3N0cmljdGVzdC4gIEEgdHJhaWxp bmcgYXJyYXkgaXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBvbmx5IHdoZW4g aXQNCj4+Pj4gK2lzIGRlY2xhcmVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHBlciBDOTkg c3RhbmRhcmQgb253YXJkcy4NCj4+Pj4gK1RoZSBuZWdhdGl2ZSBmb3JtIGlzIGVxdWl2YWxlbnQg dG8gQG9wdGlvbnstZnN0cmljdC1mbGV4LWFycmF5PTB9LCB3aGljaCBpcyB0aGUNCj4+Pj4gK2xl YXN0IHN0cmljdC4gIEFsbCB0cmFpbGluZyBhcnJheXMgb2Ygc3RydWN0dXJlcyBhcmUgdHJlYXRl ZCBhcyBmbGV4aWJsZSBhcnJheQ0KPj4+PiArbWVtYmVycy4NCj4+Pj4gKw0KPj4+PiArQGl0ZW0g LWZzdHJpY3QtZmxleC1hcnJheT1AdmFye2xldmVsfQ0KPj4+PiArQG9waW5kZXggZnN0cmljdC1m bGV4LWFycmF5PUB2YXJ7bGV2ZWx9DQo+Pj4+ICtUcmVhdCB0aGUgdHJhaWxpbmcgYXJyYXkgb2Yg YSBzdHJ1Y3R1cmUgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgaW4gYQ0KPj4+PiArc3RyaWN0 ZXIgd2F5LiAgVGhlIHZhbHVlIG9mIEB2YXJ7bGV2ZWx9IGNvbnRyb2xzIHRoZSBsZXZlbCBvZiBz dHJpY3RuZXNzLg0KPj4+PiArDQo+Pj4+ICtUaGUgcG9zc2libGUgdmFsdWVzIG9mIEB2YXJ7bGV2 ZWx9IGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlDQo+Pj4+ICtAY29kZXtzdHJpY3RfZmxleF9hcnJh eX0gYXR0cmlidXRlIChAcHhyZWZ7VmFyaWFibGUgQXR0cmlidXRlc30pLg0KPj4+PiArDQo+Pj4+ ICtZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3IgYSBzcGVjaWZpYyB0cmFpbGluZyBh cnJheSBmaWVsZCBvZiBhDQo+Pj4+ICtzdHJ1Y3R1cmUgYnkgdXNpbmcgdGhlIHZhcmlhYmxlIGF0 dHJpYnV0ZSBAY29kZXtzdHJpY3RfZmxleF9hcnJheX0gYXR0cmlidXRlDQo+Pj4+ICsoQHB4cmVm e1ZhcmlhYmxlIEF0dHJpYnV0ZXN9KS4NCj4+Pj4gKw0KPj4+PiBAaXRlbSAtZnNzby1zdHJ1Y3Q9 QHZhcntlbmRpYW5uZXNzfQ0KPj4+PiBAb3BpbmRleCBmc3NvLXN0cnVjdA0KPj4+PiBTZXQgdGhl IGRlZmF1bHQgc2NhbGFyIHN0b3JhZ2Ugb3JkZXIgb2Ygc3RydWN0dXJlcyBhbmQgdW5pb25zIHRv IHRoZQ0KPj4+PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RyaWN0LWZsZXgt YXJyYXktMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvc3RyaWN0LWZsZXgtYXJyYXktMS5jDQo+ Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+Pj4+IGluZGV4IDAwMDAwMDAwMDAwLi5lYzg4NmM5 OWIyNQ0KPj4+PiAtLS0gL2Rldi9udWxsDQo+Pj4+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3N0cmljdC1mbGV4LWFycmF5LTEuYw0KPj4+PiBAQCAtMCwwICsxLDMxIEBADQo+Pj4+ICsvKiB0 ZXN0aW5nIHRoZSBjb3JyZWN0IHVzYWdlIG9mIGF0dHJpYnV0ZSBzdHJpY3RfZmxleF9hcnJheS4g ICovICAgDQo+Pj4+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPj4+PiArLyogeyBkZy1vcHRp b25zICItTzIiIH0gKi8NCj4+Pj4gKw0KPj4+PiArDQo+Pj4+ICtpbnQgeCBfX2F0dHJpYnV0ZV9f ICgoc3RyaWN0X2ZsZXhfYXJyYXkgKDEpKSk7IC8qIHsgZGctZXJyb3IgIidzdHJpY3RfZmxleF9h cnJheScgYXR0cmlidXRlIG1heSBub3QgYmUgc3BlY2lmaWVkIGZvciAneCciIH0gKi8NCj4+Pj4g Kw0KPj4+PiArc3RydWN0IHRyYWlsaW5nIHsNCj4+Pj4gKyAgICBpbnQgYTsNCj4+Pj4gKyAgICBp bnQgYyBfX2F0dHJpYnV0ZSAoKHN0cmljdF9mbGV4X2FycmF5KSk7IC8qIHsgZGctZXJyb3IgIndy b25nIG51bWJlciBvZiBhcmd1bWVudHMgc3BlY2lmaWVkIGZvciAnc3RyaWN0X2ZsZXhfYXJyYXkn IGF0dHJpYnV0ZSIgfSAqLw0KPj4+PiArfTsNCj4+Pj4gKw0KPj4+PiArc3RydWN0IHRyYWlsaW5n XzEgew0KPj4+PiArICAgIGludCBhOw0KPj4+PiArICAgIGludCBiOw0KPj4+PiArICAgIGludCBj IF9fYXR0cmlidXRlICgoc3RyaWN0X2ZsZXhfYXJyYXkgKDIpKSk7IC8qIHsgZGctZXJyb3IgIidz dHJpY3RfZmxleF9hcnJheScgYXR0cmlidXRlIG1heSBub3QgYmUgc3BlY2lmaWVkIGZvciBhIG5v biBhcnJheSBmaWVsZCIgfSAqLw0KPj4+PiArfTsNCj4+Pj4gKw0KPj4+PiArZXh0ZXJuIGludCBk Ow0KPj4+PiArDQo+Pj4+ICtzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMiB7DQo+Pj4+ICsgICAgaW50 IGE7DQo+Pj4+ICsgICAgaW50IGI7DQo+Pj4+ICsgICAgaW50IGNbMV0gX19hdHRyaWJ1dGUgKChz dHJpY3RfZmxleF9hcnJheSAoZCkpKTsgLyogeyBkZy1lcnJvciAiJ3N0cmljdF9mbGV4X2FycmF5 JyBhdHRyaWJ1dGUgYXJndW1lbnQgbm90IGFuIGludGVnZXIiIH0gKi8NCj4+Pj4gK307DQo+Pj4+ ICsNCj4+Pj4gK3N0cnVjdCB0cmFpbGluZ19hcnJheV8zIHsNCj4+Pj4gKyAgICBpbnQgYTsNCj4+ Pj4gKyAgICBpbnQgYjsNCj4+Pj4gKyAgICBpbnQgY1swXSBfX2F0dHJpYnV0ZSAoKHN0cmljdF9m bGV4X2FycmF5ICg1KSkpOyAvKiB7IGRnLWVycm9yICInc3RyaWN0X2ZsZXhfYXJyYXknIGF0dHJp YnV0ZSBhcmd1bWVudCAnNScgaXMgbm90IGFuIGludGVnZXIgY29uc3RhbnQgYmV0d2VlbiAwIGFu ZCAzIiB9ICovDQo+Pj4+ICt9Ow0KPj4+PiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY29yZS5oIGIv Z2NjL3RyZWUtY29yZS5oDQo+Pj4+IGluZGV4IGVhOWYyODFmMWNjLi40NThjNmU2Y2VlYSAxMDA2 NDQNCj4+Pj4gLS0tIGEvZ2NjL3RyZWUtY29yZS5oDQo+Pj4+ICsrKyBiL2djYy90cmVlLWNvcmUu aA0KPj4+PiBAQCAtMTgxMyw3ICsxODEzLDEwIEBAIHN0cnVjdCBHVFkoKCkpIHRyZWVfZGVjbF9j b21tb24gew0KPj4+PiAgICBUWVBFX1dBUk5fSUZfTk9UX0FMSUdOLiAgKi8NCj4+Pj4gdW5zaWdu ZWQgaW50IHdhcm5faWZfbm90X2FsaWduIDogNjsNCj4+Pj4gDQo+Pj4+IC0gIC8qIDE0IGJpdHMg dW51c2VkLiAgKi8NCj4+Pj4gKyAgLyogSW4gRklFTERfREVDTCwgdGhpcyBpcyBERUNMX05PVF9G TEVYQVJSQVkuICAqLw0KPj4+PiArICB1bnNpZ25lZCBpbnQgZGVjbF9ub3RfZmxleGFycmF5IDog MTsNCj4+Pj4gKw0KPj4+PiArICAvKiAxMyBiaXRzIHVudXNlZC4gICovDQo+Pj4gDQo+Pj4gSSd2 ZSBub3Qgc2VlbiBpdCBzbyB5b3UgYXJlIHByb2JhYmx5IG1pc3NpbmcgaXQgLSB0aGUgYml0IGhh cyB0byBiZQ0KPj4+IHN0cmVhbWVkIGluIHRyZWUtc3RyZWFtZXIte2luLG91dH0uY2MgdG8gYmUg dXNhYmxlIGZyb20gTFRPLg0KPj4gDQo+PiBZb3UgbWVhbiBhZGQgaXQgdG8gdGhlIHJvdXRpbmUg 4oCcdW5wYWNrX3RzX2RlY2xfY29tbW9uX3ZhbHVlX2ZpZWxkc+KAnSBvZiB0cmVlLXN0cmVhbWVy LWluLmNjDQo+PiBBbmQg4oCccGFja190c19kZWNsX2NvbW1vbl92YWx1ZV9maWVsZHPigJ0gb2Yg dHJlZS1zdHJlYW1lci1vdXQuY2M/DQo+IA0KPiBZZXMuDQo+IA0KPj4gDQo+Pj4gQysrIG1vZHVs ZSBzdHJlYW1pbmcgYWxzbyBuZWVkcyB0byBoYW5kbGUgaXQuDQo+PiANCj4+IFdoaWNoIGZpbGUg aXMgZm9yIHRoaXMgQysrIG1vZHVsZSBzdHJlYW1pbmc/DQo+IA0KPiBOb3Qgc3VyZSwgbWF5YmUg Y3AvbW9kdWxlLmNjDQoNCkp1c3QgY2hlY2tlZCB0aGlzIGZpbGUsIGxvb2tzIGxpa2UgaXTigJlz IOKAnEV4cGVyaW1lbnRhbOKAnToNCi8qIEMrKyBtb2R1bGVzLiAgRXhwZXJpbWVudGFsIQ0KDQpJ cyBpdCB1c2VkIHJpZ2h0IG5vdz8gVG8gd2hvbSBJIGNhbiBjb25zdWx0IHdpdGggdG8gZ2V0IG1v cmUgZGV0YWlsIG9uIEMrKz8NCg0KPiANCj4+PiANCj4+Pj4gDQo+Pj4+IC8qIFVJRCBmb3IgcG9p bnRzLXRvIHNldHMsIHN0YWJsZSBvdmVyIGNvcHlpbmcgZnJvbSBpbmxpbmluZy4gICovDQo+Pj4+ IHVuc2lnbmVkIGludCBwdF91aWQ7DQo+Pj4+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS5jYyBiL2dj Yy90cmVlLmNjDQo+Pj4+IGluZGV4IDg0MDAwZGQ4YjY5Li4wMmUyNzQ2OTlmYiAxMDA2NDQNCj4+ Pj4gLS0tIGEvZ2NjL3RyZWUuY2MNCj4+Pj4gKysrIGIvZ2NjL3RyZWUuY2MNCj4+Pj4gQEAgLTEy ODYyLDcgKzEyODYyLDcgQEAgZ2V0X2luaXRpYWxpemVyX2ZvciAodHJlZSBpbml0LCB0cmVlIGRl Y2wpDQo+Pj4+IC8qIERldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIG1lbWJlciByZWZlcmVuY2Vk IGJ5IHRoZSBDT01QT05FTlRfUkVGDQo+Pj4+ICBSRUYsIHVzaW5nIGl0cyBpbml0aWFsaXplciBl eHByZXNzaW9uIGlmIG5lY2Vzc2FyeSBpbiBvcmRlciB0bw0KPj4+PiAgZGV0ZXJtaW5lIHRoZSBz aXplIG9mIGFuIGluaXRpYWxpemVkIGZsZXhpYmxlIGFycmF5IG1lbWJlci4NCj4+Pj4gLSAgIElm IG5vbi1udWxsLCBzZXQgKkFSSyB3aGVuIFJFRiByZWZlcnMgdG8gYW4gaW50ZXJpb3IgemVyby1s ZW5ndGgNCj4+Pj4gKyAgIElmIG5vbi1udWxsLCBzZXQgKlNBTSB3aGVuIFJFRiByZWZlcnMgdG8g YW4gaW50ZXJpb3IgemVyby1sZW5ndGgNCj4+Pj4gIGFycmF5IG9yIGEgdHJhaWxpbmcgb25lLWVs ZW1lbnQgYXJyYXkuDQo+Pj4+ICBSZXR1cm5zIHRoZSBzaXplIGFzIHNpemV0eXBlICh3aGljaCBt aWdodCBiZSB6ZXJvIGZvciBhbiBvYmplY3QNCj4+Pj4gIHdpdGggYW4gdW5pbml0aWFsaXplZCBm bGV4aWJsZSBhcnJheSBtZW1iZXIpIG9yIG51bGwgaWYgdGhlIHNpemUNCj4+Pj4gQEAgLTEyODc4 LDE2ICsxMjg3OCwzMiBAQCBjb21wb25lbnRfcmVmX3NpemUgKHRyZWUgcmVmLCBzcGVjaWFsX2Fy cmF5X21lbWJlciAqc2FtIC8qID0gTlVMTCAqLykNCj4+Pj4gICBzYW0gPSAmc2FtYnVmOw0KPj4+ PiAqc2FtID0gc3BlY2lhbF9hcnJheV9tZW1iZXI6Om5vbmU7DQo+Pj4+IA0KPj4+PiArICAvKiBX aGV0aGVyIHRoaXMgcmVmIGlzIGFuIGFycmF5IGF0IHRoZSBlbmQgb2YgYSBzdHJ1Y3R1cmUuICAq Lw0KPj4+PiArICBib29sIHRyYWlsaW5nID0gYXJyYXlfYXRfc3RydWN0X2VuZF9wIChyZWYpOw0K Pj4+PiArDQo+Pj4gDQo+Pj4gYWN0dWFsbHkgYXJyYXlfYXRfc3RydWN0X2VuZF9wIHJldHVybnMg d2hldGhlciByZWYgcG9zc2libHkgcmVmZXJzIHRvDQo+Pj4gYSB0cmFpbGluZyBhcnJheS4gIElu IHBhcnRpY3VsYXIgaXQgbWF5IHJldHVybiBmYWxzZSBmb3IgYXJyYXlzIGF0DQo+Pj4gc3RydWN0 IGVuZCB3aXRoIGEga25vd24gbGVuZ3RoIGFzIGluIGEuYltpXSBmb3IgdGhlIHJlZmVyZW5jZSB0 byBnbG9iYWwgDQo+Pj4gJ2EnOg0KPj4+IA0KPj4+IHN0cnVjdCB7IGludCBiWzFdOyB9IGE7DQo+ PiANCj4+IFllcywgSSBub3RpY2VkIHRoaXMgYmVoYXZpb3IgZHVyaW5nIG15IHJlY2VudCBkZWJ1 Z2dpbmcgb2YgdGhpcyByb3V0aW5lLiBJIHRob3VnaHQgaXTigJlzIGEgYnVnIGFuZCBwbGFubmVk IHRvIGZpbGUgYW5vdGhlciBidWcgYWdhaW5zdCBpdC4NCj4+IExvb2tzIGxpa2UgdGhhdCB0aGlz IGlzIGFuIGV4cGVjdGVkIGJlaGF2aW9yLg0KPj4gDQo+PiBUaGVuIEkgcmVhbGx5IGZlZWwgdGhl IG5hbWUgYW5kIHRoZSBjb21tZW50cyBvZiB0aGUgcm91dGluZSBpcyB2ZXJ5IGNvbmZ1c2luZ+KA pg0KPj4gU2hhbGwgd2UgY2hhbmdlIHRoZSBuYW1lIG9mIHRoaXMgcm91dGluZSB0byBhIG1vcmUg ZGVzY3JpcHRpdmUgb25lPyBGb3IgZXhhbXBsZSwg4oCcZmxleGlibGVfYXJyYXlfbWVtYmVyX3Di gJ0/IA0KPiANCj4gTm90ZSB0aGUgcm91dGluZSBpcyBhYm91dCBjbGFzc2lmeWluZyBhIGNvbmNy ZXRlIHJlZmVyZW5jZSwgc28gYSBiZXR0ZXINCj4gbmFtZSBjb3VsZCBiZSBmbGV4X2FycmF5X3Jl Zl9wICgpLiAgVGhlIG5hbWUgY2hhbmdlIHNob3VsZCBiZSBkb25lDQo+IHNlcGFyYXRlbHkgKGlm IGF0IGFsbCkuDQoNCk9rYXkuIA0KDQo+IA0KPj4+IA0KPj4+IHNvIGluIHRoZSBlbmQgaXQgc2hv dWxkIGJlIGFycmF5X2F0X3N0cnVjdF9lbmRfcCBhbHNvIGhvbm9yaW5nDQo+Pj4gREVDTF9OT1Rf RkxFWEFSUkFZLg0KPj4gDQo+PiBUaGVuIGl04oCZcyBtYWtlIG1vcmUgc2Vuc2UgdG8gY2hlY2sg REVDTF9OT1RfRkxFWEFSUkFZIGluc2lkZSB0aGlzIHV0aWxpdHkgcm91dGluZT8NCj4gDQo+IFll cy4NCj4gDQo+Pj4gDQo+Pj4+IC8qIFRoZSBvYmplY3QvYXJndW1lbnQgcmVmZXJlbmNlZCBieSB0 aGUgQ09NUE9ORU5UX1JFRiBhbmQgaXRzIHR5cGUuICAqLw0KPj4+PiB0cmVlIGFyZyA9IFRSRUVf T1BFUkFORCAocmVmLCAwKTsNCj4+Pj4gdHJlZSBhcmd0eXBlID0gVFJFRV9UWVBFIChhcmcpOw0K Pj4+PiAtICAvKiBUaGUgcmVmZXJlbmNlZCBtZW1iZXIuICAqLw0KPj4+PiAtICB0cmVlIG1lbWJl ciA9IFRSRUVfT1BFUkFORCAocmVmLCAxKTsNCj4+Pj4gDQo+Pj4+ICsgIC8qIFRoZSByZWZlcmVu Y2VkIGZpZWxkIG1lbWJlci4gICovDQo+Pj4+ICsgIHRyZWUgbWVtYmVyID0gVFJFRV9PUEVSQU5E IChyZWYsIDEpOw0KPj4+PiArICB0cmVlIG1lbXR5cGUgPSBUUkVFX1RZUEUgKG1lbWJlcik7DQo+ Pj4+IHRyZWUgbWVtc2l6ZSA9IERFQ0xfU0laRV9VTklUIChtZW1iZXIpOw0KPj4+PiArDQo+Pj4+ ICsgIGJvb2wgaXNfemVyb19sZW5ndGhfYXJyYXlfcmVmID0gemVyb19sZW5ndGhfYXJyYXlfcCAo bWVtdHlwZSk7DQo+Pj4+ICsgIGJvb2wgaXNfY29uc3RhbnRfbGVuZ3RoX2FycmF5X3JlZiA9IGZh bHNlOw0KPj4+PiArICBib29sIGlzX29uZV9lbGVtZW50X2FycmF5X3JlZg0KPj4+PiArCT0gb25l X2VsZW1lbnRfYXJyYXlfcCAobWVtdHlwZSwgJmlzX2NvbnN0YW50X2xlbmd0aF9hcnJheV9yZWYp Ow0KPj4+PiArDQo+Pj4+ICsgIC8qIERldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgc3BlY2lhbCBh cnJheSBtZW1iZXIuICAqLw0KPj4+PiArICBpZiAoaXNfemVyb19sZW5ndGhfYXJyYXlfcmVmKQ0K Pj4+PiArICAgICpzYW0gPSB0cmFpbGluZyA/IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8w DQo+Pj4+ICsJICAgOiBzcGVjaWFsX2FycmF5X21lbWJlcjo6aW50XzA7DQo+Pj4+ICsgIGVsc2Ug aWYgKGlzX29uZV9lbGVtZW50X2FycmF5X3JlZiAmJiB0cmFpbGluZykNCj4+Pj4gKyAgICAqc2Ft ID0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzE7DQo+Pj4+ICsNCj4+Pj4gaWYgKG1lbXNp emUpDQo+Pj4+ICAgew0KPj4+PiAtICAgICAgdHJlZSBtZW10eXBlID0gVFJFRV9UWVBFIChtZW1i ZXIpOw0KPj4+PiAgICAgaWYgKFRSRUVfQ09ERSAobWVtdHlwZSkgIT0gQVJSQVlfVFlQRSkNCj4+ Pj4gCS8qIERFQ0xfU0laRSBtYXkgYmUgbGVzcyB0aGFuIFRZUEVfU0laRSBpbiBDKysgd2hlbiBy ZWZlcnJpbmcNCj4+Pj4gCSAgIHRvIHRoZSB0eXBlIG9mIGEgY2xhc3Mgd2l0aCBhIHZpcnR1YWwg YmFzZSB3aGljaCBkb2Vzbid0DQo+Pj4+IEBAIC0xMjg5Nyw1MCArMTI5MTMsMzAgQEAgY29tcG9u ZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5V TEwgKi8pDQo+Pj4+IAlyZXR1cm4gKHRyZWVfaW50X2NzdF9lcXVhbCAobWVtc2l6ZSwgVFlQRV9T SVpFX1VOSVQgKG1lbXR5cGUpKQ0KPj4+PiAJCT8gbWVtc2l6ZSA6IE5VTExfVFJFRSk7DQo+Pj4+ IA0KPj4+PiAtICAgICAgYm9vbCB0cmFpbGluZyA9IGFycmF5X2F0X3N0cnVjdF9lbmRfcCAocmVm KTsNCj4+Pj4gLSAgICAgIGJvb2wgemVyb19sZW5ndGggPSBpbnRlZ2VyX3plcm9wIChtZW1zaXpl KTsNCj4+Pj4gLSAgICAgIGlmICghdHJhaWxpbmcgJiYgIXplcm9fbGVuZ3RoKQ0KPj4+PiArICAg ICAgaWYgKCF0cmFpbGluZyAmJiAhaXNfemVyb19sZW5ndGhfYXJyYXlfcmVmKQ0KPj4+PiAJLyog TUVNQkVSIGlzIGVpdGhlciBhbiBpbnRlcmlvciBhcnJheSBvciBpcyBhbiBhcnJheSB3aXRoDQo+ Pj4+IAkgICBtb3JlIHRoYW4gb25lIGVsZW1lbnQuICAqLw0KPj4+PiAJcmV0dXJuIG1lbXNpemU7 DQo+Pj4+IA0KPj4+PiAtICAgICAgaWYgKHplcm9fbGVuZ3RoKQ0KPj4+PiAtCXsNCj4+Pj4gLQkg IGlmICh0cmFpbGluZykNCj4+Pj4gLQkgICAgKnNhbSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0 cmFpbF8wOw0KPj4+PiAtCSAgZWxzZQ0KPj4+PiAtCSAgICB7DQo+Pj4+IC0JICAgICAgKnNhbSA9 IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRfMDsNCj4+Pj4gLQkgICAgICBtZW1zaXplID0gTlVM TF9UUkVFOw0KPj4+PiAtCSAgICB9DQo+Pj4+IC0JfQ0KPj4+PiArICAgICAgaWYgKCpzYW0gIT0g c3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzENCj4+Pj4gKwkgICYmIGlzX2NvbnN0YW50X2xl bmd0aF9hcnJheV9yZWYpDQo+Pj4+ICsJLyogTUVNQkVSIGlzIGEgY29uc3RhbnQgbGVuZ3RoIGFy cmF5IHdoaWNoIGlzIG5vdCBhIG9uZS1lbGVtZW50DQo+Pj4+ICsJICAgdHJhaWxpbmcgYXJyYXku ICAqLw0KPj4+PiArCXJldHVybiBtZW1zaXplOw0KPj4+PiANCj4+Pj4gLSAgICAgIGlmICghemVy b19sZW5ndGgpDQo+Pj4+IC0JaWYgKHRyZWUgZG9tID0gVFlQRV9ET01BSU4gKG1lbXR5cGUpKQ0K Pj4+PiAtCSAgaWYgKHRyZWUgbWluID0gVFlQRV9NSU5fVkFMVUUgKGRvbSkpDQo+Pj4+IC0JICAg IGlmICh0cmVlIG1heCA9IFRZUEVfTUFYX1ZBTFVFIChkb20pKQ0KPj4+PiAtCSAgICAgIGlmIChU UkVFX0NPREUgKG1pbikgPT0gSU5URUdFUl9DU1QNCj4+Pj4gLQkJICAmJiBUUkVFX0NPREUgKG1h eCkgPT0gSU5URUdFUl9DU1QpDQo+Pj4+IC0JCXsNCj4+Pj4gLQkJICBvZmZzZXRfaW50IG1pbmlk eCA9IHdpOjp0b19vZmZzZXQgKG1pbik7DQo+Pj4+IC0JCSAgb2Zmc2V0X2ludCBtYXhpZHggPSB3 aTo6dG9fb2Zmc2V0IChtYXgpOw0KPj4+PiAtCQkgIG9mZnNldF9pbnQgbmVsdHNtMSA9IG1heGlk eCAtIG1pbmlkeDsNCj4+Pj4gLQkJICBpZiAobmVsdHNtMSA+IDApDQo+Pj4+IC0JCSAgICAvKiBN RU1CRVIgaXMgYW4gYXJyYXkgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQuICAqLw0KPj4+PiAt CQkgICAgcmV0dXJuIG1lbXNpemU7DQo+Pj4+IC0NCj4+Pj4gLQkJICBpZiAobmVsdHNtMSA9PSAw KQ0KPj4+PiAtCQkgICAgKnNhbSA9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjp0cmFpbF8xOw0KPj4+ PiAtCQl9DQo+Pj4+ICsgICAgICBpZiAoKnNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6aW50 XzApDQo+Pj4+ICsJbWVtc2l6ZSA9IE5VTExfVFJFRTsNCj4+Pj4gDQo+Pj4+IC0gICAgICAvKiBG b3IgYSByZWZlcmVuY2UgdG8gYSB6ZXJvLSBvciBvbmUtZWxlbWVudCBhcnJheSBtZW1iZXIgb2Yg YSB1bmlvbg0KPj4+PiAtCSB1c2UgdGhlIHNpemUgb2YgdGhlIHVuaW9uIGluc3RlYWQgb2YgdGhl IHNpemUgb2YgdGhlIG1lbWJlci4gICovDQo+Pj4+ICsgICAgICAvKiBGb3IgYSByZWZlcmVuY2Ug dG8gYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGFuIGludGVyaW9yIHplcm8gbGVuZ3RoDQo+Pj4+ ICsJIGFycmF5LCBvciBhbiBhcnJheSB3aXRoIHZhcmlhYmxlIGxlbmd0aCBvZiBhIHVuaW9uLCB1 c2UgdGhlIHNpemUgb2YNCj4+Pj4gKwkgdGhlIHVuaW9uIGluc3RlYWQgb2YgdGhlIHNpemUgb2Yg dGhlIG1lbWJlci4gICovDQo+Pj4+ICAgICBpZiAoVFJFRV9DT0RFIChhcmd0eXBlKSA9PSBVTklP Tl9UWVBFKQ0KPj4+PiAJbWVtc2l6ZSA9IFRZUEVfU0laRV9VTklUIChhcmd0eXBlKTsNCj4+Pj4g ICB9DQo+Pj4+IA0KPj4+PiAtICAvKiBNRU1CRVIgaXMgZWl0aGVyIGEgYm9uYSBmaWRlIGZsZXhp YmxlIGFycmF5IG1lbWJlciwgb3IgYSB6ZXJvLWxlbmd0aA0KPj4+PiAtICAgICBhcnJheSBtZW1i ZXIsIG9yIGFuIGFycmF5IG9mIGxlbmd0aCBvbmUgdHJlYXRlZCBhcyBzdWNoLiAgKi8NCj4+Pj4g KyAgLyogTUVNQkVSIG5vdyBpcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYW4gaW50ZXJpb3Ig emVybyBsZW5ndGggYXJyYXksIG9yDQo+Pj4+ICsgICAgIGFuIGFycmF5IHdpdGggdmFyaWFibGUg bGVuZ3RoLiAgV2UgbmVlZCB0byBkZWNpZGUgaXRzIHNpemUgZnJvbSBpdHMNCj4+Pj4gKyAgICAg aW5pdGlhbGl6ZXIuICAqLw0KPj4+PiANCj4+Pj4gLyogSWYgdGhlIHJlZmVyZW5jZSBpcyB0byBh IGRlY2xhcmVkIG9iamVjdCBhbmQgdGhlIG1lbWJlciBhIHRydWUNCj4+Pj4gICAgZmxleGlibGUg YXJyYXksIHRyeSB0byBkZXRlcm1pbmUgaXRzIHNpemUgZnJvbSBpdHMgaW5pdGlhbGl6ZXIuICAq Lw0KPj4+PiBAQCAtMTQzNTEsNiArMTQzNDcsNTkgQEAgZGVmYXVsdF9pc19lbXB0eV9yZWNvcmQg KGNvbnN0X3RyZWUgdHlwZSkNCj4+Pj4gcmV0dXJuIGlzX2VtcHR5X3R5cGUgKFRZUEVfTUFJTl9W QVJJQU5UICh0eXBlKSk7DQo+Pj4+IH0NCj4+Pj4gDQo+Pj4+ICsvKiBEZXRlcm1pbmUgd2hldGhl ciBUWVBFIGlzIGEgSVNPIGZsZXhpYmxlIGFycmF5IG1lbWViZXIgdHlwZSAiW10iLiAgKi8NCj4+ PiANCj4+PiBJU08gQzk5DQo+PiANCj4+IE9rYXksIHdpbGwgYWRkIHRoaXMuDQo+Pj4gDQo+Pj4+ ICtib29sDQo+Pj4+ICtmbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAoY29uc3RfdHJlZSB0eXBlKQ0K Pj4+IA0KPj4+IHNpbmNlIHlvdSBwYXNzIGluIGEgdHlwZSBhIGJldHRlciBuYW1lIHdvdWxkIGJl DQo+Pj4gZmxleGlibGVfYXJyYXlfdHlwZV9wPw0KPj4gT2theSwgaG93IGFib3V0IOKAnGZsZXhp YmxlX2FycmF5X21lbWJlcl90eXBlX3DigJ0/IChTaW5jZSDigJxmbGV4aWJsZSBhcnJheSBtZW1i ZXLigJ0gaXMgYSBjb21wbGV0ZSBjb25jZXB0KS4NCj4gDQo+IHdvcmtzIGZvciBtZQ0KPiANCj4+ PiANCj4+Pj4gK3sNCj4+Pj4gKyAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gQVJSQVlfVFlQRQ0K Pj4+PiArICAgICAgJiYgVFlQRV9TSVpFICh0eXBlKSA9PSBOVUxMX1RSRUUNCj4+Pj4gKyAgICAg ICYmIFRZUEVfRE9NQUlOICh0eXBlKSAhPSBOVUxMX1RSRUUNCj4+PiANCj4+PiB3aHkgcmVxdWly ZSBhIHNwZWNpZmllZCBUWVBFX0RPTUFJTj8NCj4+IA0KPj4gVGhlcmUgYXJlIG11bHRpcGxlIHBs YWNlcyBpbiB0aGUgY3VycmVudCBHQ0MgdXNlZCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOg0KPj4g DQo+PiAtICAgICAgaWYgKFRSRUVfQ09ERSAodHlwZSkpID09IEFSUkFZX1RZUEUNCj4+IC0gICAg ICAgICAmJiBUWVBFX1NJWkUgKHR5cGUpID09IE5VTExfVFJFRQ0KPj4gLSAgICAgICAgICYmIFRZ UEVfRE9NQUlOICh0eXBlKSAhPSBOVUxMX1RSRUUNCj4+IC0gICAgICAgICAmJiBUWVBFX01BWF9W QUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKSA9PSBOVUxMX1RSRUUpDQo+PiANCj4+IFRvIGNoZWNr IHdoZXRoZXIgdGhlIHR5cGUgaXMgYSBmbGV4aWJsZV9hcnJheV9tZW1iZXIgdHlwZS4gIA0KPj4g KEZvciBleGFtcGxlLCB0aGUgcm91dGluZSDigJxhZGRfZmxleGlibGVfYXJyYXlfZWx0c190b19z aXpl4oCdIGluIGMvYy1kZWNsLmNjDQo+PiAJCQl0aGUgcm91dGluZSDigJxmaW5pc2hfc3RydWN0 4oCdIGluIGMvYy1kZWNsLmNjDQo+PiAJCQl0aGUgcm91dGluZSDigJxmbGV4aWJsZV9hcnJheV90 eXBlX3DigJ0gaW4gdHJlZS5jYykNCj4+IA0KPj4gVGhhdOKAmXMgdGhlIHJlYXNvbiBJIGNvbWUg dXAgd2l0aCB0aGlzIGNvbW1vbiByb3V0aW5lIHRvIHJlcGxhY2UgYWxsIHRoZXNlIHNlcXVlbmNl cy4NCj4+IA0KPj4gDQo+Pj4+ICsgICAgICAmJiBUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4g KHR5cGUpKSA9PSBOVUxMX1RSRUUpDQo+Pj4gDQo+Pj4gYW5kIHdoeSBhIE5VTEwgVFlQRV9NQVhf VkFMVUU/ICBJc24ndCBhbiB1bmtub3duIFRZUEVfU0laRSBlbm91Z2g/DQo+PiANCj4+IERvZXMg dGhlIGN1cnJlbnQgRkUgZ2VuZXJhdGUgc3VjaCBJUiBmb3IgYSBbXT8gIEFuIGFycmF5IHR5cGUs IHdpdGhvdXQgVFlQRV9TSVpFLCB3aXRoIGEgVFlQRV9ET01BSU4sIGJ1dCB0aGUgTUFYX1ZBTFVF IG9mIHRoZSBUWVBFX0RPTUFJTiBpcyBOVUxMPw0KPj4gDQo+Pj4gDQo+Pj4gVGhhdCBzYWlkLCBJ J20gbm90IHN1cmUgcHJvdmlkaW5nIHRoaXMgYWJzdHJhY3Rpb24gaXMgYSBnb29kIGlkZWENCj4+ PiBnaXZlbiB0aGUgdXNlIEkgc2VlIGlzIGluIGZyb250ZW5kIGNvZGUuDQo+PiANCj4+IFRoaXMg b25lIGlzIGFsc28gdXNlZCBpbiBtaWRkbGUtZW5kLCBmb3IgZXhhbXBsZSDigJxmbGV4aWJsZV9h cnJheV90eXBlX3DigJ0gaW4gdHJlZS5jYy4NCj4gDQo+IFRoYXQgd2FzIG9yaWdpbmFsbHkgaW4g Yy1kZWNsLmMsIHNlZW1zIHNvbWUgdGFyZ2V0IHdhbnRlZCB0byB1c2UgaXQuICBUaGUNCj4gaXNz dWUgd2l0aCB0aGlzIGlzIHRoYXQgaXQgdGVzdHMgdGhlIEMgZnJvbnRlbmQgd2F5IG9mIGRlY2xh cmluZyBhIGZsZXgNCj4gYXJyYXkgKGFuZCBpdCBpcyB1c2VkIGJ5IHRoZSBmcm9udGVuZCksIGJ1 dCB0aGVyZSBhcmUgbWFueSBvdGhlciBwb3NzaWJsZQ0KPiByZXByZXNlbnRhdGlvbnMgdGhlIG1p ZGRsZS1lbmQgc2hvdWxkIGNsYXNzaWZ5IGFzIGZsZXggYXJyYXkuDQo+IA0KPiBUaGUgT2JqZWN0 aXZlIEMgZnJvbnRlbmQgYWxzbyBoYXMgYSBmdW5jdGlvbiBuYW1lZCB0aGlzIHdheSBhbmQgaXQg c2VlbXMNCj4gdG8gYmUgYSAxOjEgY29weSA6Lw0KPiANCj4gVGhlIG5pb3MyIHVzZSBvZiB0aGUg ZnVuY3Rpb24gZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gbWUgLSBleHRlcm5hbHMNCj4gc2hv dWxkIG5vdCBlbmQgdXAgaW4gX2FueV8gc2VjdGlvbiE/DQoNCldoYXTigJlzIHlvdSBtZWFuIGJ5 IOKAnG5pb3My4oCdID8gIE5vdCBxdWl0ZSB1bmRlcnN0YW5kIHRoaXMgc2VudGVuY2UuIC06KSBj b3VsZCB5b3UgZXhwbGFpbiBhIGxpdHRsZSBiaXQ/DQoNCj4gDQo+IFNvIEknZCByYXRoZXIgbW92 ZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gd2hlcmUgaXQgY2FtZSBmcm9tLCBpZGVhbGx5DQo+IHRv IGMtZmFtaWx5LywgcmVtb3ZpbmcgdGhlIGNvcHkgaW4gb2JqZWN0aXZlIEMgLi4uDQoNCk9rYXks IEkgd2lsbCB0cnkgIHRoaXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gDQo+Pj4gDQo+Pj4+ICsg ICAgcmV0dXJuIHRydWU7DQo+Pj4+ICsNCj4+Pj4gKyAgcmV0dXJuIGZhbHNlOw0KPj4+PiArfQ0K Pj4+PiArDQo+Pj4+ICsvKiBEZXRlcm1pbmUgd2hldGhlciBUWVBFIGlzIGEgemVyby1sZW5ndGgg YXJyYXkgdHlwZSAiWzBdIi4gICovDQo+Pj4+ICtib29sDQo+Pj4+ICt6ZXJvX2xlbmd0aF9hcnJh eV9wIChjb25zdF90cmVlIHR5cGUpDQo+Pj4+ICt7DQo+Pj4+ICsgIGlmIChUUkVFX0NPREUgKHR5 cGUpID09IEFSUkFZX1RZUEUpDQo+Pj4+ICsgICAgaWYgKHRyZWUgdHlwZV9zaXplID0gVFlQRV9T SVpFX1VOSVQgKHR5cGUpKQ0KPj4+PiArICAgICAgaWYgKChpbnRlZ2VyX3plcm9wICh0eXBlX3Np emUpKQ0KPj4+PiArCSAgICYmIFRZUEVfRE9NQUlOICh0eXBlKSAhPSBOVUxMX1RSRUUNCj4+Pj4g KwkgICAmJiBUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKSA9PSBOVUxMX1RSRUUp DQo+Pj4gDQo+Pj4gdGhhdCBhZ2FpbiBzZWVtcyB2ZXJ5IEMoPykgZnJvbnRlbmQgc3BlY2lmaWMs IHBsZWFzZSBkcm9wIGl0Lg0KPj4gQ3VycmVudGx5LCB0aGUgbWlkZGxlLWVuZCB1dGlsaXR5IHJv dXRpbmUg4oCcY29tcG9uZW50X3JlZl9zaXpl4oCdIG5lZWQgdG8gY2hlY2sgemVyb19sZW5ndGhf YXJyYXksIG9uZV9lbGVtZW50X2FycmF5LCBldGMsIA0KPj4gU28sIHRoaXMgaXMgbm90IG9ubHkg YSBGRSBzcGVjaWZpYyByb3V0aW5lLg0KPiANCj4gU2lnaCwgaXQncyBub3RoZXIgc3RyYW5nZSBm dW5jdGlvbiB0aGF0IHdhcyBpbnRyb2R1Y2VkIGp1c3QgZm9yIA0KPiBkaWFnbm9zdGljcyAoc28g aXQncyBub3QgImNvcnJlY3QiKSwgaXQgc2hvdWxkbid0IGhhdmUgZW5kZWQgdXAgaW4NCj4gdHJl ZS5jYyBJTUhPLg0KDQpUaGUgY29kZXMgaW4gR0NDIHRvIGhhbmRsZSBmbGV4aWJsZSBhcnJheSBh cmUgcmVhbGx5IG1lc3N5LCBJIGhvcGUgdGhhdCB3ZSBjYW4gbWFrZSBpdCBjbGVhbiBhbmQgY29u c2lzdGVudCB0aHJvdWdoIHRoaXMgd29yay4gDQpPZiBjb3Vyc2UgZ3JhZHVhbGx54oCmDQoNCj4g DQo+PiBBbmQgSSB0aGluayB0aGF0IGZvciBtYWtpbmcgdGhlIC1mc3RyaWN0LWZsZXgtYXJyYXkg d29yayBjbGVhciwgd2UgbWlnaHQgd2FudCB0byBlbXBoYXNpemUgIGFuZCBkaXN0aW5ndWlzaCB0 aGUgY29uY2VwdHMgb2YgDQo+PiANCj4+IFtdICAgICAgICAgIGZsZXhpYmxlX2FycmF5X21lbWJl cl90eXBlX3ANCj4+IFswXSAgICAgICAgemVyb19sZW5ndGhfYXJyYXlfdHlwZV9wDQo+PiBbMV0g ICAgICAgIG9uZV9lbGVtZW50X2FycmF5X3R5cGVfcA0KPj4gDQo+PiBBY3Jvc3MgR0NDLg0KPiAN Cj4gV2h5Pw0KDQpCZWNhdXNlIHRoZSB3aG9sZSBjb25mdXNpb24gb2YgZmxleGlibGUgYXJyYXkg aGFuZGxpbmdzIGluIG91ciBjb21waWxlciBzdGFydGVkIGZyb20gdGhlIGNvbmZ1c2lvbiBvZiB0 aGVzZSBjb25jZXB0cy4NCkR1cmluZyBteSBzdHVkeSBvZiB0aGlzIHdob2xlIHByb2JsZW0sIEkg Zm91bmQgdGhhdCB0aGVzZSBjb25jZXB0cyB3ZXJlIHJlYWxseSBjb25mdXNpb24sIGFuZCBhZnRl ciBJIHdhcyBmaW5hbGx5IGNsZWFyIG9uDQpUaGVzZSBjb25jZXB0cywgSSBzdGFydGVkIHRvIGtu b3cgaG93IHRvIHJlc29sdmUgdGhlIHdob2xlIGlzc3VlLiANCg0KSW4gb3VyIEdDQyBkb2MsIGh0 dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvWmVyby1MZW5ndGguaHRtbA0KDQpXZSBh bHJlYWR5IGhhdmUgc3VjaCBjb25jZXB0cywgYnV0IG5vdCB2ZXJ5IGNsZWFyLiAgDQpJIHRoaW5r IG1ha2luZyB0aGVzZSBjb25jZXB0cyBjbGVhciBpcyB2ZXJ5IGltcG9ydGFudCB0byByZXNvbHZl IHN1Y2ggbWVzc3kgc2l0dWF0aW9uIGluIEdDQy4NCg0KPiAgVGhlIG9ubHkgaW1wb3J0YW50IHRo aW5nIHRvIHRoZSBtaWRkbGUtZW5kIGlzIHdoZXRoZXIgdGhlDQo+IHNpemUgb2YgdGhlIGFycmF5 IGlzIGtub3duIChha2EgYXJyYXlfYXRfc3RydWN0X2VuZF9wKS4gIFRoaXMNCj4gcm91dGluZSBj bGFzc2lmaWVzIGl0IHdpdGgNCg0KQnV0IHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlz IGtub3duIGRlcGVuZHMgb24gd2hldGhlciB0aGUgYXJyYXkgaXMgYQ0KDQpbMF0sDQpbMV0sDQpb XQ0KDQorICAtZnN0cmljdC1mbGV4LWFycmF5cz1uDQoNCg0KPiANCj4gIC8qIFRoZSBhcnJheSBu b3cgaXMgYXQgc3RydWN0IGVuZC4gIFRyZWF0IGZsZXhpYmxlIGFycmF5cyBhcw0KPiAgICAgYWx3 YXlzIHN1YmplY3QgdG8gZXh0ZW5kLCBldmVuIGludG8ganVzdCBwYWRkaW5nIGNvbnN0cmFpbmVk IGJ5DQo+ICAgICBhbiB1bmRlcmx5aW5nIGRlY2wuICAqLw0KPiAgaWYgKCEgVFlQRV9TSVpFIChh dHlwZSkNCj4gICAgICB8fCAhIFRZUEVfRE9NQUlOIChhdHlwZSkNCj4gICAgICB8fCAhIFRZUEVf TUFYX1ZBTFVFIChUWVBFX0RPTUFJTiAoYXR5cGUpKSkNCj4gICAgcmV0dXJuIHRydWU7DQoNClRo aXMgc2VxdWVuY2UgaXMgb25seSBmb3IgaWRlbnRpZnlpbmcgW10uIFJpZ2h0Pw0KDQpUaGUgWzBd IGFuZCBbMV0gaXMgbm90IGhhbmRsZWQgYnkgdGhlIGFib3ZlLg0KDQo+IA0KPiBhbnkgZmxleGli bGVfYXJyYXlfbWVtYmVyX3R5cGVfcCB0aGF0IGNvdmVycyBhIGRpZmZlcmVudCBzdWJzZXQgb2YN Cj4gZmxleC1hcnJheSB0eXBlcyB3b3VsZCBiZSBodWdlbHkgY29uZnVzaW5nLg0KDQpEb27igJl0 IHF1aXRlIHVuZGVyc3RhbmQgdGhpcyBzZW50ZW5jZS4uLg0KPiANCj4+IA0KPj4+IA0KPj4+PiAr CXJldHVybiB0cnVlOw0KPj4+PiArICByZXR1cm4gZmFsc2U7DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+ Pj4gKy8qIERldGVybWluZSB3aGV0aGVyIFRZUEUgaXMgYSBvbmUtZWxlbWVudCBhcnJheSB0eXBl ICJbMV0iLg0KPj4+PiArICAgU2V0IElTX0NPTlNUQU5UX0xFTkdUSCB0byB0cnVlIGlmIHRoZSBs ZW5ndGggaXMgY29uc3RhbnQsDQo+Pj4+ICsgICBvdGhlcndpc2UsIElTX0NPTlNUQU5UX0xFTkdU SCBpcyBzZXQgdG8gZmFsc2UuICAqLw0KPj4+PiArYm9vbA0KPj4+PiArb25lX2VsZW1lbnRfYXJy YXlfcCAoY29uc3RfdHJlZSB0eXBlLCBib29sICppc19jb25zdGFudF9sZW5ndGggLyogPSBOVUxM ICovKQ0KPj4+PiArew0KPj4+PiArICBpZiAoaXNfY29uc3RhbnRfbGVuZ3RoKQ0KPj4+PiArICAg ICppc19jb25zdGFudF9sZW5ndGggPSBmYWxzZTsNCj4+Pj4gKw0KPj4+PiArICBpZiAoVFJFRV9D T0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFKQ0KPj4+PiArICAgIGlmICh0cmVlIGRvbSA9IFRZUEVf RE9NQUlOICh0eXBlKSkNCj4+Pj4gKyAgICAgIGlmICh0cmVlIG1pbiA9IFRZUEVfTUlOX1ZBTFVF IChkb20pKQ0KPj4+PiArCWlmICh0cmVlIG1heCA9IFRZUEVfTUFYX1ZBTFVFIChkb20pKQ0KPj4+ PiArCSAgaWYgKFRSRUVfQ09ERSAobWluKSA9PSBJTlRFR0VSX0NTVA0KPj4+PiArCSAgICAgICYm IFRSRUVfQ09ERSAobWF4KSA9PSBJTlRFR0VSX0NTVCkNCj4+Pj4gKwkgICAgew0KPj4+PiArCSAg ICAgIG9mZnNldF9pbnQgbWluaWR4ID0gd2k6OnRvX29mZnNldCAobWluKTsNCj4+Pj4gKwkgICAg ICBvZmZzZXRfaW50IG1heGlkeCA9IHdpOjp0b19vZmZzZXQgKG1heCk7DQo+Pj4+ICsJICAgICAg b2Zmc2V0X2ludCBuZWx0c20xID0gbWF4aWR4IC0gbWluaWR4Ow0KPj4+PiArCSAgICAgIGlmIChp c19jb25zdGFudF9sZW5ndGgpDQo+Pj4+ICsJCSppc19jb25zdGFudF9sZW5ndGggPSB0cnVlOw0K Pj4+PiArCSAgICAgIGlmIChuZWx0c20xID09IDApDQo+Pj4+ICsJCXJldHVybiB0cnVlOw0KPj4+ PiArCSAgICB9DQo+Pj4gDQo+Pj4gSSdkIHNheSBsaWtld2lzZS4gIE1heWJlIG1vdmUgdGhlbSB0 byBjLWZhbWlseS9jLWNvbW1vbi57Y2MsaH0gaW5zdGVhZA0KPj4+IGluIGEgbW9yZSBzcGVjaWFs aXplZCB3YXkgZm9yIHRoZSBzaW5nbGUgdXNlIHlvdSBoYXZlPw0KPj4gDQo+PiBJdOKAmXMgbm90 IHNpbmdsZSB1c2UsIGl04oCZcyBhbHNvIHVzZWQgaW4g4oCcY29tcG9uZW50X3JlZl9zaXpl4oCd IHJvdXRpbmUuIA0KPiANCj4gRG9uJ3QgY29weSBmcm9tIGEgcm91dGluZSB0aGF0J3Mgbm90IGRl c2lnbmVkIHRvIGJlICJjb3JyZWN04oCdLg0KDQpPa2F54oCmLg0KDQoNCj4gIEluDQo+IGZhY3Qg dGhlIG1pZGRsZS1lbmQgYWxyZWFkeSBoYXMgYXJyYXlfdHlwZV9uZWx0cywgc28gb25lX2VsZW1l bnRfYXJyYXlfcA0KPiBjYW4gYmUgd3JpdHRlbiBhcyBpbnRlZ2VyX3plcm9wIChhcnJheV90eXBl X25lbHRzICh0eXBlKSkuICBJdCBhbHNvDQo+IGhhcyB0aGUgY29tbWVudA0KPiANCj4gIC8qIFRZ UEVfTUFYX1ZBTFVFIG1heSBub3QgYmUgc2V0IGlmIHRoZSBhcnJheSBoYXMgdW5rbm93biBsZW5n dGguICAqLw0KPiAgaWYgKCFtYXgpDQo+ICAgIHsNCj4gICAgICAvKiB6ZXJvIHNpemVkIGFycmF5 cyBhcmUgcmVwcmVzZW50ZWQgZnJvbSBDIEZFIGFzIGNvbXBsZXRlIHR5cGVzIA0KPiB3aXRoDQo+ ICAgICAgICAgTlVMTCBUWVBFX01BWF9WQUxVRSBhbmQgemVybyBUWVBFX1NJWkUsIHdoaWxlIEMr KyBGRSByZXByZXNlbnRzDQo+ICAgICAgICAgdGhlbSBhcyBtaW4gMCwgbWF4IC0xLiAgKi8NCj4g ICAgICBpZiAoQ09NUExFVEVfVFlQRV9QICh0eXBlKQ0KPiAgICAgICAgICAmJiBpbnRlZ2VyX3pl cm9wIChUWVBFX1NJWkUgKHR5cGUpKQ0KPiAgICAgICAgICAmJiBpbnRlZ2VyX3plcm9wIChtaW4p KQ0KPiAgICAgICAgcmV0dXJuIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobWluKSwgLTEpOw0K DQpUaGFua3MgZm9yIHRoZSBpbmZvLCBJIHdpbGwgY2hlY2sgb24gdGhlIGFib3ZlLCBhbmQgcmV3 cml0ZSDigJxvbmVfZWxlbWVudF9hcnJheV9w4oCdIHdpdGgg4oCcYXJyYXlfdHlwZV9uZWx0c+KA nS4NCg0KUWluZw0KPiANCj4gUmljaGFyZC4NCj4gDQo+PiBUaGFua3MgYSBsb3QgZm9yIHlvdXIg Y29tbWVudHMuDQo+PiANCj4+IFFpbmcNCj4+PiANCj4+Pj4gKyAgcmV0dXJuIGZhbHNlOw0KPj4+ PiArfQ0KPj4+PiArDQo+Pj4+IC8qIERldGVybWluZSB3aGV0aGVyIFRZUEUgaXMgYSBzdHJ1Y3R1 cmUgd2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwNCj4+Pj4gIG9yIGEgdW5pb24gY29udGFp bmluZyBzdWNoIGEgc3RydWN0dXJlIChwb3NzaWJseSByZWN1cnNpdmVseSkuICAqLw0KPj4+PiAN Cj4+Pj4gQEAgLTE0MzY3LDEwICsxNDQxNiw3IEBAIGZsZXhpYmxlX2FycmF5X3R5cGVfcCAoY29u c3RfdHJlZSB0eXBlKQ0KPj4+PiAJICBsYXN0ID0geDsNCj4+Pj4gICAgIGlmIChsYXN0ID09IE5V TExfVFJFRSkNCj4+Pj4gCXJldHVybiBmYWxzZTsNCj4+Pj4gLSAgICAgIGlmIChUUkVFX0NPREUg KFRSRUVfVFlQRSAobGFzdCkpID09IEFSUkFZX1RZUEUNCj4+Pj4gLQkgICYmIFRZUEVfU0laRSAo VFJFRV9UWVBFIChsYXN0KSkgPT0gTlVMTF9UUkVFDQo+Pj4+IC0JICAmJiBUWVBFX0RPTUFJTiAo VFJFRV9UWVBFIChsYXN0KSkgIT0gTlVMTF9UUkVFDQo+Pj4+IC0JICAmJiBUWVBFX01BWF9WQUxV RSAoVFlQRV9ET01BSU4gKFRSRUVfVFlQRSAobGFzdCkpKSA9PSBOVUxMX1RSRUUpDQo+Pj4+ICsg ICAgICBpZiAoZmxleGlibGVfYXJyYXlfbWVtYmVyX3AgKFRSRUVfVFlQRSAobGFzdCkpKQ0KPj4+ PiAJcmV0dXJuIHRydWU7DQo+Pj4+ICAgICByZXR1cm4gZmFsc2U7DQo+Pj4+ICAgY2FzZSBVTklP Tl9UWVBFOg0KPj4+PiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuaCBiL2djYy90cmVlLmgNCj4+Pj4g aW5kZXggZTY1NjRhYWNjYjcuLjMxMDdkZTViNDk5IDEwMDY0NA0KPj4+PiAtLS0gYS9nY2MvdHJl ZS5oDQo+Pj4+ICsrKyBiL2djYy90cmVlLmgNCj4+Pj4gQEAgLTI5OTMsNiArMjk5MywxMSBAQCBl eHRlcm4gdm9pZCBkZWNsX3ZhbHVlX2V4cHJfaW5zZXJ0ICh0cmVlLCB0cmVlKTsNCj4+Pj4gI2Rl ZmluZSBERUNMX1BBRERJTkdfUChOT0RFKSBcDQo+Pj4+IChGSUVMRF9ERUNMX0NIRUNLIChOT0RF KS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzMpDQo+Pj4+IA0KPj4+PiArLyogVXNlZCBpbiBhIEZJ RUxEX0RFQ0wgdG8gaW5kaWNhdGUgd2hldGhlciB0aGlzIGZpZWxkIGlzIG5vdCBhIGZsZXhpYmxl DQo+Pj4+ICsgICBhcnJheSBtZW1iZXIuICAqLw0KPj4+PiArI2RlZmluZSBERUNMX05PVF9GTEVY QVJSQVkoTk9ERSkgXA0KPj4+PiArICAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29t bW9uLmRlY2xfbm90X2ZsZXhhcnJheSkNCj4+Pj4gKw0KPj4+PiAvKiBBIG51bWVyaWMgdW5pcXVl IGlkZW50aWZpZXIgZm9yIGEgTEFCRUxfREVDTC4gIFRoZSBVSUQgYWxsb2NhdGlvbiBpcw0KPj4+ PiAgZGVuc2UsIHVuaXF1ZSB3aXRoaW4gYW55IG9uZSBmdW5jdGlvbiwgYW5kIG1heSBiZSB1c2Vk IHRvIGluZGV4IGFycmF5cy4NCj4+Pj4gIElmIHRoZSB2YWx1ZSBpcyAtMSwgdGhlbiBubyBVSUQg aGFzIGJlZW4gYXNzaWduZWQuICAqLw0KPj4+PiBAQCAtNTUzMSwxMCArNTUzNiwxMCBAQCBleHRl cm4gdHJlZSBjb21wb25lbnRfcmVmX2ZpZWxkX29mZnNldCAodHJlZSk7DQo+Pj4+ICByZXR1cm5z IG51bGwuICAqLw0KPj4+PiBlbnVtIHN0cnVjdCBzcGVjaWFsX2FycmF5X21lbWJlcg0KPj4+PiB7 DQo+Pj4+IC0gICBub25lLCAgICAgIC8qIE5vdCBhIHNwZWNpYWwgYXJyYXkgbWVtYmVyLiAgKi8N Cj4+Pj4gLSAgIGludF8wLCAgICAgLyogSW50ZXJpb3IgYXJyYXkgbWVtYmVyIHdpdGggc2l6ZSB6 ZXJvLiAgKi8NCj4+Pj4gLSAgIHRyYWlsXzAsICAgLyogVHJhaWxpbmcgYXJyYXkgbWVtYmVyIHdp dGggc2l6ZSB6ZXJvLiAgKi8NCj4+Pj4gLSAgIHRyYWlsXzEgICAgLyogVHJhaWxpbmcgYXJyYXkg bWVtYmVyIHdpdGggb25lIGVsZW1lbnQuICAqLw0KPj4+PiArICAgIG5vbmUsCS8qIE5vdCBhIHNw ZWNpYWwgYXJyYXkgbWVtYmVyLiAgKi8NCj4+Pj4gKyAgICBpbnRfMCwJLyogSW50ZXJpb3IgYXJy YXkgbWVtYmVyIHdpdGggc2l6ZSB6ZXJvLiAgKi8NCj4+Pj4gKyAgICB0cmFpbF8wLAkvKiBUcmFp bGluZyBhcnJheSBtZW1iZXIgd2l0aCBzaXplIHplcm8uICAqLw0KPj4+PiArICAgIHRyYWlsXzEJ LyogVHJhaWxpbmcgYXJyYXkgbWVtYmVyIHdpdGggb25lIGVsZW1lbnQuICAqLw0KPj4+PiB9Ow0K Pj4+PiANCj4+Pj4gLyogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIgcmVmZXJlbmNlZCBi eSB0aGUgQ09NUE9ORU5UX1JFRiwgdXNpbmcNCj4+Pj4gQEAgLTY0ODksNiArNjQ5NCw5IEBAIGV4 dGVybiB2b2lkIGd0X3BjaF9ueCAodHJlZSAmLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICop Ow0KPj4+PiBleHRlcm4gYm9vbCBub25udWxsX2FyZ19wIChjb25zdF90cmVlKTsNCj4+Pj4gZXh0 ZXJuIGJvb2wgaXNfZW1wdHlfdHlwZSAoY29uc3RfdHJlZSk7DQo+Pj4+IGV4dGVybiBib29sIGRl ZmF1bHRfaXNfZW1wdHlfcmVjb3JkIChjb25zdF90cmVlKTsNCj4+Pj4gK2V4dGVybiBib29sIHpl cm9fbGVuZ3RoX2FycmF5X3AgKGNvbnN0X3RyZWUpOw0KPj4+PiArZXh0ZXJuIGJvb2wgb25lX2Vs ZW1lbnRfYXJyYXlfcCAoY29uc3RfdHJlZSwgYm9vbCAqID0gTlVMTCk7DQo+Pj4+ICtleHRlcm4g Ym9vbCBmbGV4aWJsZV9hcnJheV9tZW1iZXJfcCAoY29uc3RfdHJlZSk7DQo+Pj4+IGV4dGVybiBi b29sIGZsZXhpYmxlX2FycmF5X3R5cGVfcCAoY29uc3RfdHJlZSk7DQo+Pj4+IGV4dGVybiBIT1NU X1dJREVfSU5UIGFyZ19pbnRfc2l6ZV9pbl9ieXRlcyAoY29uc3RfdHJlZSk7DQo+Pj4+IGV4dGVy biB0cmVlIGFyZ19zaXplX2luX2J5dGVzIChjb25zdF90cmVlKTsNCj4+Pj4gDQo+Pj4gDQo+Pj4g LS0gDQo+Pj4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPg0KPj4+IFNVU0UgU29m dHdhcmUgU29sdXRpb25zIEdlcm1hbnkgR21iSCwgRnJhbmtlbnN0cmFzc2UgMTQ2LCA5MDQ2MSBO dWVybmJlcmcsDQo+Pj4gR2VybWFueTsgR0Y6IEl2byBUb3RldiwgQW5kcmV3IE15ZXJzLCBBbmRy ZXcgTWNEb25hbGQsIEJvdWRpZW4gTW9lcm1hbjsNCj4+PiBIUkIgMzY4MDkgKEFHIE51ZXJuYmVy ZykNCj4+IA0KPj4gDQo+IA0KPiAtLSANCj4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNl LmRlPg0KPiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgsIEZyYW5rZW5zdHJh c3NlIDE0NiwgOTA0NjEgTnVlcm5iZXJnLA0KPiBHZXJtYW55OyBHRjogSXZvIFRvdGV2LCBBbmRy ZXcgTXllcnMsIEFuZHJldyBNY0RvbmFsZCwgQm91ZGllbiBNb2VybWFuOw0KPiBIUkIgMzY4MDkg KEFHIE51ZXJuYmVyZykNCg0K