From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26EC9C433EF for ; Thu, 3 Feb 2022 02:38:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 95C7B6B0395; Wed, 2 Feb 2022 21:38:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 90A9B6B0396; Wed, 2 Feb 2022 21:38:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6E7FE6B0397; Wed, 2 Feb 2022 21:38:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0156.hostedemail.com [216.40.44.156]) by kanga.kvack.org (Postfix) with ESMTP id 55F996B0395 for ; Wed, 2 Feb 2022 21:38:53 -0500 (EST) Received: from smtpin04.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id B285391E51 for ; Thu, 3 Feb 2022 02:38:52 +0000 (UTC) X-FDA: 79099910904.04.A942A7C Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf10.hostedemail.com (Postfix) with ESMTP id AE32AC0005 for ; Thu, 3 Feb 2022 02:38:51 +0000 (UTC) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 2131J7gw024816; Thu, 3 Feb 2022 02:38:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2021-07-09; bh=fBTCE86ZpboUMFfjBIT7xB9bBuH7PIwvm+ahfjWmbdc=; b=Cbt/MVK7Rw2aiZIJOMv9v43RPvPUhdb5nsZvfoWXoB80IqumsUXm6V8P3wanKaXnsK7K X9aUS88CJngpjV9waVAgi+7F0OvDlbTRJKrndPJqdYPxI2zZ8IWVIMknA1X+xNj+bksm Ga9bBlV/CiMmhHUYeJ5RlFRQWFblFnU0dUPTIQiE6uucIsas12XddGREFqaQNtgT7sGJ L5wk3IJufHs5OmT5aehQJuJvLUwP/rTGqsZCps5vJgT3zrBjbpIf/5iHoi03zCeNsSus SrzsoOn0sE5u0Y7Y9Vw5UNHw7jt4+x/Pb11TUOOTBP0oDBVBk2hqHQeQQhibcM7jd4PO GA== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3dxjau02c6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 03 Feb 2022 02:38:46 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 2132Jmho044564; Thu, 3 Feb 2022 02:38:45 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2173.outbound.protection.outlook.com [104.47.59.173]) by aserp3030.oracle.com with ESMTP id 3dvumjjts0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 03 Feb 2022 02:38:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YH4HJW8AazsXQX36fcI2DXYNNs8RUSvwFYKRWMj3EF0qwPX50ZDJuPec89vaFwdwaROqOigBMeY7CK++m/EYbiaJRKBp6eb+hCuWnki7A/dNDDUucnqqvv0dhxXlO2nFEhCmkxI33S5dbg61V4KTR0IbTO8yznaANoJCDww4pjJiRXn2d4nWHb+/bledinq6OcNAZ6Nrf3vW5IweWMuyPp2JKcu5pPckgxKKpOiruL95a1z2riG9266IkIqXURSlW/+msNNVzl9cUa8559T11PNIziasJMipsR2o/EAs1aXar6WjiBc9yxLGfgirLhFzj4D/p2uqTcnsb2v8QAqLPA== 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=fBTCE86ZpboUMFfjBIT7xB9bBuH7PIwvm+ahfjWmbdc=; b=NGCJx/sd9zlbVK8BHlphFfhM3fiF1wEObvKrO2au7gT8ru/L5TnxwYLiBm5kwjhpyG2iqehvBXutNGcP8r/JsJWCNhSIPVadtFDPAU/odwG84A2/duj8TyRcGIB4OmnnFFYf5oLtI4qEIz0b/VXVP3IMcs64HCFW/J00yHWVj3OHB6ZvHbIzCLliwZ6NT+2LK9UumIarfq8PGx6qbycdQ6kGHR0Wsf8eP4eGAVfzuO+W7S30fAm/FNfCQPjPMJUVFBNhPEL+3ljhio9cSMgg6lXRsg7LpWuS22oNwz13FwSgJ+0AkJnuXtA2/dzY6+WLa8nkBg8skesXGc4dQokeqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fBTCE86ZpboUMFfjBIT7xB9bBuH7PIwvm+ahfjWmbdc=; b=BF7oSBkxVqxResnE7Qccm31E1RNUk/bC5xBrbdaUtuEVZ/qqAIbga6mGXszCCdCWhqF2X5qGfNzo86HnCektLV8iCUO2PFAonIHVaZjJOKhHSmdZEvKb5lQhb4DjfbqjgQCOg1l6899p5fz/vtqnSaGzPymFh0stmOd+7GHMviQ= Received: from SN6PR10MB3022.namprd10.prod.outlook.com (2603:10b6:805:d8::25) by SN4PR10MB5621.namprd10.prod.outlook.com (2603:10b6:806:20f::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.12; Thu, 3 Feb 2022 02:38:43 +0000 Received: from SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::3857:3a25:3444:fdd3]) by SN6PR10MB3022.namprd10.prod.outlook.com ([fe80::3857:3a25:3444:fdd3%5]) with mapi id 15.20.4930.022; Thu, 3 Feb 2022 02:38:43 +0000 From: Liam Howlett To: Mike Rapoport CC: "maple-tree@lists.infradead.org" , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , Andrew Morton Subject: Re: [PATCH v5 07/70] Maple Tree: Add new data structure Thread-Topic: [PATCH v5 07/70] Maple Tree: Add new data structure Thread-Index: AQHYF95x/Sfcc+vEiUSQ90JwlBJbIqyAf/mAgACekwA= Date: Thu, 3 Feb 2022 02:38:42 +0000 Message-ID: <20220203023836.bfu2mviijlkc2pgz@revolver> References: <20220202024137.2516438-1-Liam.Howlett@oracle.com> <20220202024137.2516438-8-Liam.Howlett@oracle.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0e388154-365b-4613-5388-08d9e6be4b4c x-ms-traffictypediagnostic: SN4PR10MB5621:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bbxCFzjxeDjF8BOLdomHGdSI6LVuXBTSOonAs3v4okBJ+BtZ5t9lfFCkKdcGo3YLv31yNeIiAQUQpUYnZQj9CnNrXEcwng5J1ZwAzzrzayRrhi/2K+fbNOCRAIbpgomyQ573y1RFtzjEOxQMIW58mJj4k5TINMssy698bB4WJ9pDKkxAs4RDcW9SeQs7Gz+s/AbN38SI90Yp6tHFLunSJZKmF7ghJTJAwnzuyHDByNXxiDpilZHEqGXuV9/Bz6C2mkg0C51WcPQW3MEHB1ZSG6fFWcZg9NrAQb3xowMYmy+VsAtY2q6B8aTbyoGAi4d1HQo3ZDh2eDmbqvi8a1Bkp11NvfWjAVwRjXEonegQk+0z2VtLJhnbo6oOEa9tB5BTiUavWX6l4NLfWUKn7s2JEdV2zDZ+LnA40v9RmJVUztlLYSel48SdnZCwl7NQo3JZzs842QgQTCWTJ0HGNRITEsb3qcY0lzIVyd11toI0YHjCvGcZ5OPV27JAy9aHfH2eynW5t2eaTwZl7R8oKW5eI91uE1OWT3eWSzoPHfH62EnTovH+HvIBl0agUXdTyMX5YfHiQRc5hNKrcTjGZni0dL8avmIKOOw1x6Vteo3z3g/XfuD1fqDC1Ojlg/i+9j5R4FHBoayKQeghERRJ649lXDoM+ZESt/ujIyVxaCbMTOlbRbsMS23t0fWSZuVAj34Qj0jgtiSnJJTHmRqIxSYwX+merHGH0YeX337ymx35Ll3yXpmg/n7ruoGOAEbzbHc1ZscwsJ5oF6ixK+MTx5cJ4XlMC1Uo9nMK6X1pgNknDz8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR10MB3022.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(7916004)(366004)(1076003)(6506007)(6512007)(122000001)(38100700002)(508600001)(966005)(71200400001)(9686003)(6486002)(66446008)(316002)(64756008)(54906003)(83380400001)(30864003)(5660300002)(91956017)(76116006)(66556008)(33716001)(66476007)(6916009)(66946007)(4326008)(8936002)(38070700005)(186003)(26005)(44832011)(8676002)(2906002)(86362001)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TTliNFlNS2lzMHJxS1RiSW9IS3JRMlRwcXhRSGt5SXduM1M5SGRZN0NPWjc0?= =?utf-8?B?cnVhMlpxVXJ0SGgwMFZhYkIzbXBEb0RpNUFxVnR0Nlh2dUcyRm1WN2Q1ZkJJ?= =?utf-8?B?SDV6L3Z4VGdQRWdveEhsc1JyMWh0T1FBczloQjUzYU9wbGtUVlUvS1BZbFo1?= =?utf-8?B?eS9OZGNhM256UGtKcnB6NUR3ZHpTVC9FeGtXKzU5Um1tYWNKeGJyZjFnZlBB?= =?utf-8?B?TlFNR29JV0ErYlhBNks5QkJKR2tOa3ZMdHF5OHdsS1dPM0tHa2lTM1FTVXhw?= =?utf-8?B?N1laK1BSYjQwZHUva1R6ZWI4TG9CUmt6S2h1cjJlTXZsTU85N1FrWkV2S0Vr?= =?utf-8?B?YkZYN0lkbVQ5bVhZUDFjUzRnZnMxaVNydU0yVGVtQXE3aHpPelZWakVVbFRR?= =?utf-8?B?N3AwTHNKMkhCWU40ZUMvbE9DQXExck5wQTFEQ2s4YmNsTTViOEJJekprY29a?= =?utf-8?B?MXZlMVRvNy9yR0JHRlFpdWRoZXk1NjNweDRzSDJwRjdlZGM5b0M0WnMxZXRE?= =?utf-8?B?K3lCUU5MdUZESFhHb2R1R2NLdXNRdWk5SkpKdjNNQ0JySjRoNFVraGlOV0hG?= =?utf-8?B?WElVVE90a0hueW9XZVpXeWRWTUZrZGM5V2RWZ2dDRWZkdHdvTG0rVGtCOFFa?= =?utf-8?B?eEU0WHZRalVDS2VYNCtkMFh3dkNXajFPMHg0QVVGR21xeGJDdVJTUUo5VjdP?= =?utf-8?B?Y3hCOVljMFBPSFdjcTF2YjR4RlU1eXFXSExCcTJFY3EwUlRLaVBqQzdJN00v?= =?utf-8?B?TVNKYy8rRk02SVJKWUJRY1krV0Q2b2VIcFZ5WHhHNEFYNGZxd2lJSkxIV3Ux?= =?utf-8?B?RDhJdEJRd3laNDlCSHBNRExsSi9SK1RzdGMyb0xWRFVtb09YWEFDNzQvSkxN?= =?utf-8?B?RGVTOGUxSkQrOHBvUjZBQW1adGp0SGhFQ0FpR3k0RlhYVGE3OHpmRk1mbGFF?= =?utf-8?B?b2JUb25ZWFZkV0tJR1JXTVd5WUUwS2xLbHNjdmU0YzZJeHlhcGl6bGRoSXpw?= =?utf-8?B?MjhoZDZxYnlmd0t2ZGtkZ1hqcjdWUXFWSCtCWTZWN2NYSkVMVDRLcW1sWUtr?= =?utf-8?B?SU54UTFwK0hYQWo5RlkxKzlkYU0zVGdMZ3FVUUl6bWxXMlhldGM4L0tGVXRs?= =?utf-8?B?U1Y4bXhFeWNvb3h5UWUrU1JZZUxMOUtDYS92NlNWRitLL3hvL2t5VmVsM21S?= =?utf-8?B?L3JGbE9uYUp6TVJxelRBYkE5WFdZOE9abVFGM2cxb0VRNVRFTzNZaGxlSjBO?= =?utf-8?B?VFZjQnRJOVNESzNSUlB2ZDRkQXJmd0VJTXVZYzNPeDNJT2Vvd3phQXVwRm5P?= =?utf-8?B?RlRsNm01Rkt3R0J5RDN2Q1ErbzJPVGxPV3JkU3lQZEtuNUs0MFlkUFgxaEhW?= =?utf-8?B?Q0N0aVNvU21PKzJ6cThEN0hTUzRXMk9OWXJUVGFTaEtXZEJWMmgwUUJBTWtJ?= =?utf-8?B?aXZ5N3RqMXFQdFhRTTBqeVFnWmJxdEZrVUhPYzNFeHp5YTNhVWY4VFRqWGNo?= =?utf-8?B?UGRLMGV2UzBBMzUxYytabnZpTHNtaTFSc0JoTDBLYk5ES24ydXlmZ2EycHgr?= =?utf-8?B?Q1JaTzVOaS96bGdUOHB1S29paGxzMkRXY09vdERyTXExMFJnOXJSVjVyWHhE?= =?utf-8?B?Z3lnUys2aEVZSWwwN3hGUkxJclhHaU54RmNseWwrUkRpemo0cjJiODkxbkJC?= =?utf-8?B?Zm9CSXp3VnhISUEwNDFsekMrZ21CcEc5aUFlOS9QUkdpdERUU1hwd1FWQWhF?= =?utf-8?B?K1VGVlIxcExsc3Y5VjFwS0VXakJxeE9ndjJLOStEOHFHSjhaMlNRR1hTa1Iz?= =?utf-8?B?V3RtaGFxYTJIMXAxblV4bjFjTUluZmFScGxmQlcwTEZFMmhvUWljSmRLQTRL?= =?utf-8?B?RCtUWit5R2F4bEVlbjJqSEh6amVPUHdaZHBaUmpQME40ek1ac2hVNnc3ZDdF?= =?utf-8?B?M2lHdWRSOTV6cVRsSzhQb0tDemJBb2w4YUhCQzcwd0hSVjcyc21iZ2orQUEv?= =?utf-8?B?eTBTZmNZcVVjUGc5a2lCR0pVYjkvOVFjQ21jUmJzdC9QMWpQazJ2RjlTMTN5?= =?utf-8?B?ZjVMRlF2MlQ5aGx2enMxUFJ2NXR6VGFNeVJVNEZEOHNkSFhVRlBnSFlYNCtS?= =?utf-8?B?cE1VWms3Qi9iOGE4cDY5WnVqVG55VEF2eU01d0pHMFEweFhBWnpQT3kwbzVu?= =?utf-8?Q?7YixPRZ7qZfngrlwPiWWs7M=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <0D888987F0BFC240A851F14B353BA3CE@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: SN6PR10MB3022.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e388154-365b-4613-5388-08d9e6be4b4c X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Feb 2022 02:38:43.0010 (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: oSi7LBfzdxUrlodaZuKYbzT4QaoedPL8c7nnIaduHs/b+tp0ktbBAIKWySNIDomehqqRSzoBElk1jFqt8f+27A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR10MB5621 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10246 signatures=673430 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 phishscore=0 mlxscore=0 adultscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2201110000 definitions=main-2202030011 X-Proofpoint-GUID: 4ZVihoGj_40DwSukHQ4JsTa4rGur_97w X-Proofpoint-ORIG-GUID: 4ZVihoGj_40DwSukHQ4JsTa4rGur_97w X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AE32AC0005 X-Stat-Signature: c3npuyu7exsuspke71h7i3ohk8xj313x Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2021-07-09 header.b="Cbt/MVK7"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=BF7oSBkx; dmarc=pass (policy=none) header.from=oracle.com; spf=none (imf10.hostedemail.com: domain of liam.howlett@oracle.com has no SPF policy when checking 205.220.165.32) smtp.mailfrom=liam.howlett@oracle.com X-Rspam-User: nil X-HE-Tag: 1643855931-546710 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: KiBNaWtlIFJhcG9wb3J0IDxycHB0QGtlcm5lbC5vcmc+IFsyMjAyMDIgMTI6MTFdOg0KPiBIaSBM aWFtLA0KPiANCj4gT24gV2VkLCBGZWIgMDIsIDIwMjIgYXQgMDI6NDE6NTZBTSArMDAwMCwgTGlh bSBIb3dsZXR0IHdyb3RlOg0KPiA+IEZyb206ICJMaWFtIFIuIEhvd2xldHQiIDxMaWFtLkhvd2xl dHRAT3JhY2xlLmNvbT4NCj4gPiANCj4gPiBUaGUgbWFwbGUgdHJlZSBpcyBhbiBSQ1Utc2FmZSBy YW5nZSBiYXNlZCBCLXRyZWUgZGVzaWduZWQgdG8gdXNlIG1vZGVybg0KPiA+IHByb2Nlc3NvciBj YWNoZSBlZmZpY2llbnRseS4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwbGFjZXMgaW4gdGhlIGtl cm5lbA0KPiA+IHRoYXQgYSBub24tb3ZlcmxhcHBpbmcgcmFuZ2UtYmFzZWQgdHJlZSB3b3VsZCBi ZSBiZW5lZmljaWFsLCBlc3BlY2lhbGx5DQo+ID4gb25lIHdpdGggYSBzaW1wbGUgaW50ZXJmYWNl LiAgVGhlIGZpcnN0IHVzZXIgdGhhdCBpcyBjb3ZlcmVkIGluIHRoaXMNCj4gPiBwYXRjaCBzZXQg aXMgdGhlIHZtX2FyZWFfc3RydWN0LCB3aGVyZSB0aHJlZSBkYXRhIHN0cnVjdHVyZXMgYXJlDQo+ ID4gcmVwbGFjZWQgYnkgdGhlIG1hcGxlIHRyZWU6IHRoZSBhdWdtZW50ZWQgcmJ0cmVlLCB0aGUg dm1hIGNhY2hlLCBhbmQgdGhlDQo+ID4gbGlua2VkIGxpc3Qgb2YgVk1BcyBpbiB0aGUgbW1fc3Ry dWN0LiAgVGhlIGxvbmcgdGVybSBnb2FsIGlzIHRvIHJlZHVjZQ0KPiA+IG9yIHJlbW92ZSB0aGUg bW1hcF9zZW0gY29udGVudGlvbi4NCj4gPiANCj4gPiBUaGUgdHJlZSBoYXMgYSBicmFuY2hpbmcg ZmFjdG9yIG9mIDEwIGZvciBub24tbGVhZiBub2RlcyBhbmQgMTYgZm9yIGxlYWYNCj4gPiBub2Rl cy4gIFdpdGggdGhlIGluY3JlYXNlZCBicmFuY2hpbmcgZmFjdG9yLCBpdCBpcyBzaWduaWZpY2Fu dGx5IHNob3J0ZXIgdGhhbg0KPiA+IHRoZSByYnRyZWUgc28gaXQgaGFzIGZld2VyIGNhY2hlIG1p c3Nlcy4gIFRoZSByZW1vdmFsIG9mIHRoZSBsaW5rZWQgbGlzdA0KPiA+IGJldHdlZW4gc3Vic2Vx dWVudCBlbnRyaWVzIGFsc28gcmVkdWNlcyB0aGUgY2FjaGUgbWlzc2VzIGFuZCB0aGUgbmVlZCB0 byBwdWxsDQo+ID4gaW4gdGhlIHByZXZpb3VzIGFuZCBuZXh0IFZNQSBkdXJpbmcgbWFueSB0cmVl IGFsdGVyYXRpb25zLg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgV2lsY294IChP cmFjbGUpIDx3aWxseUBpbmZyYWRlYWQub3JnPg0KPiA+IFNpZ25lZC1vZmYtYnk6IExpYW0gUi4g SG93bGV0dCA8TGlhbS5Ib3dsZXR0QG9yYWNsZS5jb20+DQo+ID4gLS0tDQo+ID4gIERvY3VtZW50 YXRpb24vY29yZS1hcGkvaW5kZXgucnN0ICAgICAgICAgICAgICB8ICAgIDEgKw0KPiA+ICBEb2N1 bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0ICAgICAgICAgfCAgMTk2ICsNCj4gPiAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArDQo+ ID4gIGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oICAgICAgICAgICAgICAgICAgICB8ICA2NzMg KysNCj4gPiAgaW5jbHVkZS90cmFjZS9ldmVudHMvbWFwbGVfdHJlZS5oICAgICAgICAgICAgIHwg IDEyMyArDQo+ID4gIGxpYi9LY29uZmlnLmRlYnVnICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDkgKw0KPiA+ICBsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAzICstDQo+ID4gIGxpYi9tYXBsZV90cmVlLmMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDY5NDMgKysrKysrKysrKysrKysrKysNCj4gPiAgdG9vbHMvdGVzdGluZy9y YWRpeC10cmVlLy5naXRpZ25vcmUgICAgICAgICAgIHwgICAgMiArDQo+ID4gIHRvb2xzL3Rlc3Rp bmcvcmFkaXgtdHJlZS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMTMgKy0NCj4gPiAgdG9vbHMv dGVzdGluZy9yYWRpeC10cmVlL2dlbmVyYXRlZC9hdXRvY29uZi5oIHwgICAgMSArDQo+ID4gIHRv b2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9saW51eC9tYXBsZV90cmVlLmggICB8ICAgIDcgKw0KPiA+ ICB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyAgICAgICAgICAgICAgfCAgIDU5ICsN Cj4gPiAgLi4uL3JhZGl4LXRyZWUvdHJhY2UvZXZlbnRzL21hcGxlX3RyZWUuaCAgICAgIHwgICAg MyArDQo+ID4gIDE0IGZpbGVzIGNoYW5nZWQsIDgwNDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vY29yZS1hcGkvbWFw bGVfdHJlZS5yc3QNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbWFwbGVf dHJlZS5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9tYXBs ZV90cmVlLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9tYXBsZV90cmVlLmMNCj4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9saW51eC9tYXBsZV90 cmVlLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9t YXBsZS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUv dHJhY2UvZXZlbnRzL21hcGxlX3RyZWUuaA0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVu dGF0aW9uL2NvcmUtYXBpL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvaW5kZXgu cnN0DQo+ID4gaW5kZXggNWRlMmM3YTRiMWIzLi5jNjY5ZTBhYmNmZDYgMTAwNjQ0DQo+ID4gLS0t IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9pbmRleC5yc3QNCj4gPiArKysgYi9Eb2N1bWVudGF0 aW9uL2NvcmUtYXBpL2luZGV4LnJzdA0KPiA+IEBAIC0zNCw2ICszNCw3IEBAIExpYnJhcnkgZnVu Y3Rpb25hbGl0eSB0aGF0IGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLg0KPiA+ICAgICBr cmVmDQo+ID4gICAgIGFzc29jX2FycmF5DQo+ID4gICAgIHhhcnJheQ0KPiA+ICsgICBtYXBsZV90 cmVlDQo+ID4gICAgIGlkcg0KPiA+ICAgICBjaXJjdWxhci1idWZmZXJzDQo+ID4gICAgIHJidHJl ZQ0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0 IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdA0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNmM1NDIzMGQ5ODUNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJz dA0KPiA+IEBAIC0wLDAgKzEsMTk2IEBADQo+ID4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKw0KPiA+ICsNCj4gPiArDQo+ID4gKz09PT09PT09PT0NCj4gPiArTWFwbGUgVHJl ZQ0KPiA+ICs9PT09PT09PT09DQo+ID4gKw0KPiA+ICs6QXV0aG9yOiBMaWFtIFIuIEhvd2xldHQN Cj4gPiArDQo+ID4gK092ZXJ2aWV3DQo+ID4gKz09PT09PT09DQo+ID4gKw0KPiA+ICtUaGUgTWFw bGUgVHJlZSBpcyBhIEItVHJlZSBkYXRhIHR5cGUgd2hpY2ggaXMgb3B0aW1pemVkIGZvciBzdG9y aW5nDQo+ID4gK25vbi1vdmVybGFwcGluZyByYW5nZXMsIGluY2x1ZGluZyByYW5nZXMgb2Ygc2l6 ZSAxLiAgVGhlIHRyZWUgd2FzIGRlc2lnbmVkIHRvDQo+ID4gK2JlIHNpbXBsZSB0byB1c2UgYW5k IGRvZXMgbm90IHJlcXVpcmUgYSB1c2VyIHdyaXR0ZW4gc2VhcmNoIG1ldGhvZC4gIEl0DQo+ID4g K3N1cHBvcnRzIGl0ZXJhdGluZyBvdmVyIGEgcmFuZ2Ugb2YgZW50cmllcyBhbmQgZ29pbmcgdG8g dGhlIHByZXZpb3VzIG9yIG5leHQgaW4NCj4gDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSBeDQoN ClRoYW5rcw0KDQo+IA0KPiA+ICthIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBj YW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZSBtb2RlIG9mDQo+ID4gK29wZXJhdGlvbiB3 aGljaCBhbGxvd3MgcmVhZGluZyBhbmQgd3JpdGluZyBjb25jdXJyZW50bHkuICBXcml0ZXJzIG11 c3QNCj4gPiArc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQg c3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXQNCj4gPiArdGhlIGxvY2sgdG8gYW4gZXh0ZXJu YWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLg0KPiA+ICsNCj4gPiArVGhlIE1hcGxlIFRyZWUg bWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVz ZQ0KPiA+ICttb2Rlcm4gcHJvY2Vzc29yIGNhY2hlIGVmZmljaWVudGx5LiAgVGhlIG1vc3QgaW1w b3J0YW50IHVzZXIgb2YgdGhlIE1hcGxlIFRyZWUNCj4gPiAraXMgdGhlIHZpcnR1YWwgbWVtb3J5 IGFyZWEuDQo+IA0KPiBGb3IgbWUgaXQgc291bmRzIGxpa2UgVk1BICppcyogdGhlIG1hcGxlIHRy ZWUgdXNlci4gTWF5YmUNCj4gDQo+ICAgVGhlIG1vc3QgaW1wb3J0YW50IHVzYWdlIG9mIHRoZSBN YXBsZSBUcmVlIGlzIHRyYWNraW5nIG9mIHRoZSB2aXJ0dWFsDQo+ICAgbWVtb3J5IGFyZWFzLg0K PiANCg0KVGhhbmtzLCBJIGNhbiBzZWUgdGhhdCBub3cuICBJJ20gbm90IGEgZmFuIG9mIGVpdGhl ciBvZiB0aGUgd2F5cyB0aGlzIGlzDQp3cml0dGVuIGJ1dCB5b3VycyBpcyBtb3JlIGNsZWFyLg0K DQo+ID4gKw0KPiA+ICtUaGUgTWFwbGUgVHJlZSBjYW4gc3RvcmUgYmV0d2VlbiAwIGFuZCBgYFVM T05HX01BWGBgLiAgVGhlIE1hcGxlIFRyZWUgcmVzZXJ2ZXMNCj4gDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgXiB2YWx1ZXMNCg0KVGhhbmtzDQoNCj4gDQo+ID4gK3ZhbHVlcyB3aXRoIHRo ZSBib3R0b20gdHdvIGJpdHMgc2V0IHRvICcxMCcgd2hpY2ggYXJlIGJlbG93IDQwOTYgKGllIDIs IDYsIDEwDQo+ID4gKy4uIDQwOTQpIGZvciBpbnRlcm5hbCB1c2UuICBJZiB0aGUgZW50cmllcyBt YXkgdXNlIHJlc2VydmVkIGVudHJpZXMgdGhlbiB0aGUNCj4gPiArdXNlcnMgY2FuIGNvbnZlcnQg dGhlIGVudHJpZXMgdXNpbmcgeGFfbWtfdmFsdWUoKSBhbmQgY29udmVydCB0aGVtIGJhY2sgYnkN Cj4gDQo+IE1heWJlDQo+IA0KPiAgIElmIGFuIGVudHJ5IG5lZWRzIHRvIHVzZSBhIHJlc2VydmVk IHZhbHVlIHRoZW4gdGhlIHVzZXIgY2FuIGNvbnZlcnQgdGhlDQo+ICAgdmFsdWUgdXNpbmcgLi4u DQoNCkknbGwgbWFrZSBhIGNoYW5nZSBoZXJlIHRvIHNlZSBpZiBpIGNhbiBjbGFyaWZ5Lg0KDQo+ IA0KPiA+ICtjYWxsaW5nIHhhX3RvX3ZhbHVlKCkuICBUaGUgcmVzZXJ2ZWQgdmFsdWVzIGNhbiBi ZSB1c2VkIGJ5IHRoZSBhZHZhbmNlZCBBUEksDQo+ID4gK2J1dCBhcmUgYmxvY2tlZCBieSB0aGUg bm9ybWFsIEFQSS4NCj4gDQo+IEknZCBhZGQgYSBzZW50ZW5jZSBhYm91dCBleGlzdGVuY2Ugb2Yg Im5vcm1hbCIgYW5kICJhZHZhbmNlZCIgQVBJIHRvIHRoZQ0KPiBmaXJzdCB0d28gcGFyYWdyYXBo cy4NCg0KSSBhZ3JlZSwgdGhhdCB3b3VsZCBiZSBnb29kLiAgSSdsbCBhbHNvIGNyZWF0ZSA6cmVm OiB0byB0aGVtIGFuZCBzdWNoIGFzDQp5b3Ugc3VnZ2VzdCBsYXRlci4NCg0KPiANCj4gPiArDQo+ ID4gK1RoZSBNYXBsZSBUcmVlIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBzZWFy Y2hpbmcgZm9yIGEgZ2FwIG9mIGEgZ2l2ZW4NCj4gPiArc2l6ZSAob3IgbGFyZ2VyKS4gIFRoZSB0 cmVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYXMgYW4gYWxsb2NhdGlvbiB0cmVlIHRvDQo+ID4gK3N1 cHBvcnQgdGhpcyBmZWF0dXJlLg0KPiANCj4gSSBhZnJhaWQgaXQncyBub3QgY2xlYXIgYXQgdGhp cyBwb2ludCB3aGF0ICJhbiBhbGxvY2F0aW9uIHRyZWUiIG1lYW5zLiBJDQo+IHRoaW5rIHRoZSBm aXJzdCBzZW50ZW5jZSBhbG9uZSB3b3VsZCBiZSBlbm91Z2ggZm9yIHRoZSBvdmVydmlldyBzZWN0 aW9uLg0KDQpPa2F5LCBJIHdpbGwgZHJvcCB0aGUgbGFzdCBwYXJ0Lg0KDQo+IA0KPiA+ICsNCj4g PiArUHJlLWFsbG9jYXRpbmcgb2Ygbm9kZXMgaXMgYWxzbyBzdXBwb3J0ZWQgdXNpbmcgdGhlIGFk dmFuY2VkIEFQSS4gIFRoaXMgaXMNCj4gPiArdXNlZnVsIGZvciB1c2VycyB3aG8gbXVzdCBndWFy YW50ZWUgYSBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlbg0KPiA+ICtj b2RlIHNlZ21lbnQgd2hlbiBhbGxvY2F0aW5nIGNhbm5vdCBiZSBkb25lLiAgQWxsb2NhdGlvbnMg b2Ygbm9kZXMgYXJlDQo+ID4gK3JlbGF0aXZlbHkgc21hbGwgYXQgMjU2IGJ5dGVzLg0KPiANCj4g SSBkb3VidCB0aGUgc2l6ZSBoZXJlIHdpbGwgZ2V0IHRpbWVseSB1cGRhdGVzIHdoZW4gdGhlIG5v ZGUgc2l6ZSB3aWxsDQo+IGNoYW5nZSBpbiB0aGUgY29kZSwgbWF5YmUgdXNlICJhcm91bmQiIG9y ICJyb3VnaGx5IiB0byBiZSBmdXR1cmUgcHJvb2Y/IDopDQoNCkdvb2QgcGxhbi4NCg0KPiANCj4g PiArDQo+ID4gK05vcm1hbCBBUEkNCj4gPiArPT09PT09PT09PQ0KPiA+ICsNCj4gPiArU3RhcnQg YnkgaW5pdGlhbGlzaW5nIGEgbWFwbGUgdHJlZSwgZWl0aGVyIHdpdGggREVGSU5FX01UUkVFKCkg Zm9yIHN0YXRpY2FsbHkNCj4gPiArYWxsb2NhdGVkIG1hcGxlIHRyZWVzIG9yIG10X2luaXQoKSBm b3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG9uZXMuICBBDQo+ID4gK2ZyZXNobHktaW5pdGlhbGlz ZWQgbWFwbGUgdHJlZSBjb250YWlucyBhIGBgTlVMTGBgIHBvaW50ZXIgZm9yIHRoZSByYW5nZSAw IC0NCj4gPiArYGBVTE9OR19NQVhgYC4gIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIHR5cGVzIG9m IG1hcGxlIHRyZWVzIHN1cHBvcnRlZDogdGhlDQo+ID4gK2FsbG9jYXRpb24gdHJlZSBhbmQgdGhl IHJlZ3VsYXIgdHJlZS4gIFRoZSByZWd1bGFyIHRyZWUgaGFzIGEgaGlnaGVyIGJyYW5jaGluZw0K PiA+ICtmYWN0b3IgZm9yIGludGVybmFsIG5vZGVzLiAgVGhlIGFsbG9jYXRpb24gdHJlZSBoYXMg YSBsb3dlciBicmFuY2hpbmcgZmFjdG9yDQo+ID4gK2J1dCBhbGxvd3MgdGhlIHVzZXIgdG8gc2Vh cmNoIGZvciBhIGdhcCBvZiBhIGdpdmVuIHNpemUgb3IgbGFyZ2VyIGZyb20gZWl0aGVyIDANCj4g PiArdXB3YXJkcyBvciBgYFVMT05HX01BWGBgIGRvd24uICBBbiBhbGxvY2F0aW9uIHRyZWUgY2Fu IGJlIHVzZWQgYnkgcGFzc2luZyBpbg0KPiA+ICt0aGUgYGBNQVBMRV9BTExPQ19SQU5HRWBgIGZs YWcgd2hlbiBpbml0aWFsaXNpbmcgdGhlIHRyZWUuDQo+ID4gKw0KPiA+ICtZb3UgY2FuIHRoZW4g c2V0IGVudHJpZXMgdXNpbmcgbXRyZWVfc3RvcmUoKSBvciBtdHJlZV9zdG9yZV9yYW5nZSgpLg0K PiA+ICttdHJlZV9zdG9yZSB3aWxsIG92ZXJ3cml0ZSBhbnkgZW50cnkgd2l0aCB0aGUgbmV3IGVu dHJ5IGFuZCByZXR1cm4gdGhlIHByZXZpb3VzDQo+IA0KPiAgICAgICAgICAgICAgXiBEaWQgeW91 IGludGVudGlvbmFsbHkgZHJvcCBicmFja2V0cyBoZXJlPw0KDQpJIGRpZCBub3QuICBJIHdpbGwg Zml4IHRoYXQuDQoNCj4gDQo+ID4gK2VudHJ5IHN0b3JlZCBhdCB0aGF0IGluZGV4LiAgbXRyZWVf c3RvcmVfcmFuZ2Ugd29ya3MgaW4gdGhlIHNhbWUgd2F5IGJ1dCBvbmx5DQo+ID4gK3JldHVybnMg dGhlIGZpcnN0IGVudHJ5IHRoYXQgaXMgb3ZlcndyaXR0ZW4uICBtdHJlZV9sb2FkKCkgaXMgdXNl ZCB0byByZXRyaWV2ZQ0KPiANCj4ga2VybmVsLWRvYyBvZiB0aGVzZSBmdW5jdGlvbnMgc2F5cyB0 aGF0IHRoZXkgcmV0dXJuIDAgb3IgZXJybm8uIFdoYXQgZGlkIEkNCj4gbWlzcz8NCg0KSSB3aWxs IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBtYXRjaCB0aGUgcmV0dXJuIHR5cGVzIG9mIHRo ZQ0KZnVuY3Rpb24va2VybmVsLWRvYy4NCg0KPiANCj4gPiArdGhlIGVudHJ5IHN0b3JlZCBhdCBh IGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbg0KPiA+ ICtlbnRpcmUgcmFuZ2UgYnkgb25seSBrbm93aW5nIG9uZSB2YWx1ZSB3aXRoaW4gdGhhdCByYW5n ZSwgb3IgbXRyZWVfc3RvcmUoKSBjYWxsDQo+ID4gK3dpdGggYW4gZW50cnkgb2YgTlVMTCBtYXkg YmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZS4NCj4gPiArDQo+ID4gK0lmIHlvdSB3 YW50IHRvIG9ubHkgc3RvcmUgYSBuZXcgZW50cnkgdG8gYSByYW5nZSAob3IgaW5kZXgpIGlmIHRo YXQgcmFuZ2UgaXMNCj4gPiArY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9p bnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaA0KPiA+ICtyZXR1cm4gLUVFWElT VCBpZiB0aGUgcmFuZ2UgaXMgbm90IGVtcHR5Lg0KPiA+ICsNCj4gPiArWW91IGNhbiBzZWFyY2gg Zm9yIGFuIGVudHJ5IGZyb20gYW4gaW5kZXggdXB3YXJkcyBieSB1c2luZyBtdF9maW5kKCkuDQo+ ID4gKw0KPiA+ICtZb3UgY2FuIHdhbGsgZWFjaCBlbnRyeSB3aXRoaW4gYSByYW5nZSBieSBjYWxs aW5nIG10X2Zvcl9lYWNoKCkuICBZb3UgbXVzdA0KPiA+ICtwcm92aWRlIGEgdGVtcG9yYXJ5IHZh cmlhYmxlIHRvIHN0b3JlIGEgY3Vyc29yLiAgSWYgeW91IHdhbnQgdG8gd2FsayBlYWNoDQo+ID4g K2VsZW1lbnQgb2YgdGhlIHRyZWUgdGhlbiAwIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2Vk IGFzIHRoZSByYW5nZS4gIElmIHRoZQ0KPiANCj4gV2h5IDAgYW5kIFVMT05HX01BWCBoYXZlIGRp ZmZlcmVudCBtYXJrdXA/DQoNCkkgd2lsbCBjaGFuZ2UgMCB0byBgYDBgYCB3aGVyZSBuZWNlc3Nh cnksIHRoYW5rcy4NCg0KPiANCj4gPiArY2FsbGVyIGlzIGdvaW5nIHRvIGhvbGQgdGhlIGxvY2sg Zm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgd2FsayB0aGVuIGl0IGlzIHdvcnRoDQo+IA0KPiBEbyB5 b3UgcmVmZXIgdG8gdGhlIG1hcGxlIHRyZWUgaW50ZXJuYWwgbG9jayBvciBhbnkgbG9jayBoZXJl Pw0KPiANCj4gPiArbG9va2luZyBhdCB0aGUgbWFzX2Zvcl9lYWNoKCkgQVBJIGluIHRoZSBBZHZh bmNlZCBBUEkgc2VjdGlvbi4NCj4gDQo+IE1heWJlIG1ha2UgIkFkdmFuY2VkIEFQSSIgYSBoeXBl cmxpbmsuDQo+IA0KPiA+ICsNCj4gPiArU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBlbnN1 cmUgdGhlIG5leHQgY2FsbCB0byBzdG9yZSB0byBhIG1hcGxlIHRyZWUgZG9lcw0KPiA+ICtub3Qg YWxsb2NhdGUgbWVtb3J5LCBwbGVhc2Ugc2VlIHRoZSBhZHZhbmNlZCBBUEkgZm9yIHRoaXMgdXNl IGNhc2UuDQo+ID4gKw0KPiA+ICtGaW5hbGx5LCB5b3UgY2FuIHJlbW92ZSBhbGwgZW50cmllcyBm cm9tIGEgbWFwbGUgdHJlZSBieSBjYWxsaW5nDQo+ID4gK210cmVlX2Rlc3Ryb3koKS4gIElmIHRo ZSBtYXBsZSB0cmVlIGVudHJpZXMgYXJlIHBvaW50ZXJzLCB5b3UgbWF5IHdpc2ggdG8gZnJlZQ0K PiA+ICt0aGUgZW50cmllcyBmaXJzdC4NCj4gPiArDQo+ID4gK0FsbG9jYXRpbmcgTm9kZXMNCj4g PiArLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsNCj4gPiArV2hlbiB1c2luZyB0aGUgbm9ybWFsIEFQ SSwgdGhlIGFsbG9jYXRpb25zIGFyZSBoYW5kbGVkIGJ5IHRoZSBpbnRlcm5hbA0KPiA+ICt0cmVl IGNvZGUuDQo+IA0KPiBTaW5jZSB0aGlzIGlzIGEgcGFydCBvZiAiTm9ybWFsIEFQSSIgZGVzY3Jp cHRpb24gdGhlICJXaGVuIHVzaW5nIG5vcm1hbA0KPiBBUEkiIHNlZW1zIHJlZHVuZGFudC4NCg0K SSB3YXMgdHJ5aW5nIHRvIGF2b2lkIHBlb3BsZSB3aG8gbmVlZCBzcGVjaWFsIGFsbG9jYXRpb25z IGZyb20NCmRpc3JlZ2FyZGluZyB0aGUgdHJlZSB3aGVuIHRoZXkgc2VlIHRoYXQgd2l0aCBhIHF1 aWNrIHNjYW4uICBJIHdpbGwgYWRkDQphIGxpbmsgdG8gdGhlIGFkdmFuY2VkIGFwaSBhbGxvY2F0 aW5nIG9mIG5vZGVzIGluc3RlYWQuDQoNCj4gDQo+ID4gKw0KPiA+ICtMb2NraW5nDQo+ID4gKy0t LS0tLS0NCj4gPiArDQo+ID4gK1doZW4gdXNpbmcgdGhlIE5vcm1hbCBBUEksIHlvdSBkbyBub3Qg aGF2ZSB0byB3b3JyeSBhYm91dCBsb2NraW5nLg0KPiANCj4gRGl0dG8NCg0KV2Ugc3VwcG9ydCB1 c2luZyBhbiBleHRlcm5hbCBsb2NrIGFuZCBzbyBwZW9wbGUgd2hvIHNlZSBpdCdzIGhhbmRsZWQN CmludGVybmFsbHkgaW4gdGhlIG5vcm1hbCBBUEkgbWF5IGp1c3Qgc3RvcCByZWFkaW5nIGFuZCBn byBsb29rIGZvcg0KYW5vdGhlciBkYXRhIHN0cnVjdHVyZS4gIEkgd2lsbCBhZGQgYW4gYWR2YW5j ZWQgbG9ja2luZyBzZWN0aW9uIGFuZCBsaW5rDQppdCBoZXJlIGluc3RlYWQuDQoNCj4gDQo+ID4g K1RoZSBNYXBsZSBUcmVlIHVzZXMgUkNVIGFuZCBhbiBpbnRlcm5hbCBzcGlubG9jayB0byBzeW5j aHJvbmlzZSBhY2Nlc3M6DQo+ID4gKw0KPiA+ICtUYWtlcyBSQ1UgcmVhZCBsb2NrOg0KPiA+ICsg KiBtdHJlZV9sb2FkKCkNCj4gPiArICogbXRfZmluZCgpDQo+ID4gKyAqIG10X2Zvcl9lYWNoKCkN Cj4gPiArICogbXRfbmV4dCgpDQo+ID4gKyAqIG10X3ByZXYoKQ0KPiA+ICsNCj4gPiArVGFrZXMg bWFfbG9jayBpbnRlcm5hbGx5Og0KPiA+ICsgKiBtdHJlZV9zdG9yZSgpDQo+ID4gKyAqIG10cmVl X3N0b3JlX3JhbmdlKCkNCj4gPiArICogbXRyZWVfaW5zZXJ0KCkNCj4gPiArICogbXRyZWVfaW5z ZXJ0X3JhbmdlKCkNCj4gPiArICogbXRyZWVfZXJhc2UoKQ0KPiA+ICsgKiBtdHJlZV9kZXN0cm95 KCkNCj4gPiArICogbXRfc2V0X2luX3JjdSgpDQo+ID4gKyAqIG10X2NsZWFyX2luX3JjdSgpDQo+ ID4gKw0KPiA+ICtJZiB5b3Ugd2FudCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbG9jayB0byBw cm90ZWN0IHRoZSBkYXRhIHN0cnVjdHVyZXMNCj4gDQo+IEkgYmVsaWV2ZSB0aGlzIGlzIGFib3V0 IHRoZSBpbnRlcm5hbCBsb2NrLCBpdCB3b3VsZCBiZSBuaWNlIHRvIHNwZWxsIHRoaXMNCj4gb3V0 Lg0KDQpUaGFua3MuDQoNCj4gDQo+ID4gK3RoYXQgeW91IGFyZSBzdG9yaW5nIGluIHRoZSBNYXBs ZSBUcmVlLCB5b3UgY2FuIGNhbGwgbXRyZWVfbG9jaygpIGJlZm9yZQ0KPiA+ICtjYWxsaW5nIG10 cmVlX2xvYWQoKSwgdGhlbiB0YWtlIGEgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBvYmplY3QgeW91 IGhhdmUNCj4gPiArZm91bmQgYmVmb3JlIGNhbGxpbmcgbXRyZWVfdW5sb2NrKCkuICBUaGlzIHdp bGwgcHJldmVudCBzdG9yZXMgZnJvbQ0KPiA+ICtyZW1vdmluZyB0aGUgb2JqZWN0IGZyb20gdGhl IHRyZWUgYmV0d2VlbiBsb29raW5nIHVwIHRoZSBvYmplY3QgYW5kDQo+ID4gK2luY3JlbWVudGlu ZyB0aGUgcmVmY291bnQuICBZb3UgY2FuIGFsc28gdXNlIFJDVSB0byBhdm9pZCBkZXJlZmVyZW5j aW5nDQo+ID4gK2ZyZWVkIG1lbW9yeSwgYnV0IGFuIGV4cGxhbmF0aW9uIG9mIHRoYXQgaXMgYmV5 b25kIHRoZSBzY29wZSBvZiB0aGlzDQo+ID4gK2RvY3VtZW50Lg0KPiA+ICsNCj4gPiArQWR2YW5j ZWQgQVBJDQo+ID4gKz09PT09PT09PT09PQ0KPiA+ICsNCj4gPiArVGhlIGFkdmFuY2VkIEFQSSBv ZmZlcnMgbW9yZSBmbGV4aWJpbGl0eSBhbmQgYmV0dGVyIHBlcmZvcm1hbmNlIGF0IHRoZQ0KPiA+ ICtjb3N0IG9mIGFuIGludGVyZmFjZSB3aGljaCBjYW4gYmUgaGFyZGVyIHRvIHVzZSBhbmQgaGFz IGZld2VyIHNhZmVndWFyZHMuDQo+ID4gK1lvdSBtdXN0IHRha2UgY2FyZSBvZiB5b3VyIG93biBs b2NraW5nIHdoaWxlIHVzaW5nIHRoZSBhZHZhbmNlZCBBUEkuDQo+ID4gK1lvdSBjYW4gdXNlIHRo ZSBtYV9sb2NrLCBSQ1Ugb3IgYW4gZXh0ZXJuYWwgbG9jayBmb3IgcHJvdGVjdGlvbi4NCj4gPiAr WW91IGNhbiBtaXggYWR2YW5jZWQgYW5kIG5vcm1hbCBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIGFy cmF5LCBhcyBsb25nDQo+ID4gK2FzIHRoZSBsb2NraW5nIGlzIGNvbXBhdGlibGUuICBUaGUgbm9y bWFsIEFQSSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcw0KPiA+ICtvZiB0aGUgYWR2YW5jZWQgQVBJ Lg0KPiA+ICsNCj4gPiArVGhlIGFkdmFuY2VkIEFQSSBpcyBiYXNlZCBhcm91bmQgdGhlIG1hX3N0 YXRlLCB0aGlzIGlzIHdoZXJlIHRoZSAnbWFzJw0KPiA+ICtwcmVmaXggb3JpZ2luYXRlcy4gIFRo ZSBtYV9zdGF0ZSBzdHJ1Y3Qga2VlcHMgdHJhY2sgb2YgdHJlZSBvcGVyYXRpb25zIHRvIG1ha2UN Cj4gPiArbGlmZSBlYXNpZXIgZm9yIGJvdGggaW50ZXJuYWwgYW5kIGV4dGVybmFsIHRyZWUgdXNl cnMuDQo+ID4gKw0KPiA+ICtJbml0aWFsaXNpbmcgdGhlIG1hcGxlIHRyZWUgaXMgdGhlIHNhbWUg YXMgaW4gdGhlIG5vcm1hbCBBUEkuICBQbGVhc2Ugc2VlDQo+ID4gK2Fib3ZlLg0KPiA+ICsNCj4g PiArVGhlIG1hcGxlIHN0YXRlIGtlZXBzIHRyYWNrIG9mIHRoZSByYW5nZSBzdGFydCBhbmQgZW5k IGluIG1hcy0+aW5kZXggYW5kDQo+ID4gK21hcy0+bGFzdCwgcmVzcGVjdGl2ZWx5Lg0KPiA+ICsN Cj4gPiArbWFzX3dhbGsoKSB3aWxsIHdhbGsgdGhlIHRyZWUgdG8gdGhlIGxvY2F0aW9uIG9mIGlu ZGV4IGFuZCBzZXQgdGhlIGluZGV4DQo+ID4gK2FuZCBsYXN0IGFjY29yZGluZyB0byB0aGUgcmFu Z2UgZm9yIHRoZSBlbnRyeS4NCj4gDQo+ICAgICAgICAgICAgXiBmaWVsZHM/IG9yIG1heWJlIGV2 ZW4gbWFzLT5pbmRleCBhbmQgbWFzLT5sYXN0Pw0KDQpZZXMsIEkgd2lsbCB1c2UgbWFzLT5pbmRl eC9tYXMtPmxhc3QgaGVyZS4NCg0KPiA+ICsNCj4gPiArWW91IGNhbiBzZXQgZW50cmllcyB1c2lu ZyBtYXNfc3RvcmUoKS4gIG1hc19zdG9yZSgpIHdpbGwgb3ZlcndyaXRlIGFueSBlbnRyeQ0KPiA+ ICt3aXRoIHRoZSBuZXcgZW50cnkgYW5kIHJldHVybiB0aGUgZmlyc3QgZXhpc3RpbmcgZW50cnkg dGhhdCBpcyBvdmVyd3JpdHRlbi4NCj4gPiArVGhlIHJhbmdlIGlzIHBhc3NlZCBpbiBhcyBtZW1i ZXJzIG9mIHRoZSBtYXBsZSBzdGF0ZTogaW5kZXggYW5kIGxhc3QuDQo+ID4gKw0KPiA+ICtZb3Ug Y2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBp bmRleCBhbmQNCj4gPiArbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFu Z2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2UNCj4gPiArdGhlIGZpcnN0IHJhbmdlIHRoYXQg aXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleA0KPiA+ICth bmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5 IHRoYXQgZXhpc3RlZA0KPiA+ICthdCB0aGF0IGxvY2F0aW9uLg0KPiA+ICsNCj4gPiArWW91IGNh biB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCku ICBJZiB5b3Ugd2FudCB0bw0KPiA+ICt3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVu IDAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXMgdGhlDQo+ID4gK3JhbmdlLiAgSWYg dGhlIGxvY2sgbmVlZHMgdG8gYmUgcGVyaW9kaWNhbGx5IGRyb3BwZWQsIHNlZSB0aGUgbG9ja2lu ZyBzZWN0aW9uDQo+ID4gK21hc19wYXVzZSgpLg0KPiA+ICsNCj4gPiArVXNpbmcgYSBtYXBsZSBz dGF0ZSBhbGxvd3MgbWFzX25leHQoKSBhbmQgbWFzX3ByZXYoKSB0byBmdW5jdGlvbiBhcyBpZiB0 aGUNCj4gPiArdHJlZSB3YXMgYSBsaW5rZWQgbGlzdC4gIFdpdGggc3VjaCBhIGhpZ2ggYnJhbmNo aW5nIGZhY3RvciB0aGUgYW1vcnRpemVkDQo+ID4gK3BlcmZvcm1hbmNlIHBlbmFsdHkgaXMgb3V0 d2VpZ2hlZCBieSBjYWNoZSBvcHRpbWl6YXRpb24uICBtYXNfbmV4dCgpIHdpbGwNCj4gPiArcmV0 dXJuIHRoZSBuZXh0IGVudHJ5IHdoaWNoIG9jY3VycyBhZnRlciB0aGUgZW50cnkgYXQgaW5kZXgu ICBtYXNfcHJldigpDQo+ID4gK3dpbGwgcmV0dXJuIHRoZSBwcmV2aW91cyBlbnRyeSB3aGljaCBv Y2N1cnMgYmVmb3JlIHRoZSBlbnRyeSBhdCBpbmRleC4NCj4gPiArDQo+ID4gK21hc19maW5kKCkg d2lsbCBmaW5kIHRoZSBmaXJzdCBlbnRyeSB3aGljaCBleGlzdHMgYXQgb3IgYWJvdmUgaW5kZXgg b24NCj4gPiArdGhlIGZpcnN0IGNhbGwsIGFuZCB0aGUgbmV4dCBlbnRyeSBmcm9tIGV2ZXJ5IHN1 YnNlcXVlbnQgY2FsbHMuDQo+ID4gKw0KPiA+ICttYXNfZmluZF9yZXYoKSB3aWxsIGZpbmQgdGhl IGZpc3QgZW50cnkgd2hpY2ggZXhpc3RzIGF0IG9yIGJlbG93IHRoZSBsYXN0IG9uDQo+ID4gK3Ro ZSBmaXJzdCBjYWxsLCBhbmQgdGhlIHByZXZpb3VzIGVudHJ5IGZyb20gZXZlcnkgc3Vic2VxdWVu dCBjYWxscy4NCj4gPiArDQo+ID4gK0lmIHRoZSB1c2VyIG5lZWRzIHRvIHlpZWxkIHRoZSBsb2Nr IGR1cmluZyBhbiBvcGVyYXRpb24sIHRoZW4gdGhlIG1hcGxlIHN0YXRlDQo+ID4gK211c3QgYmUg cGF1c2VkIHVzaW5nIG1hc19wYXVzZSgpLg0KPiA+ICsNCj4gPiArVGhlcmUgYXJlIGEgZmV3IGV4 dHJhIGludGVyZmFjZXMgcHJvdmlkZWQgd2hlbiB1c2luZyBhbiBhbGxvY2F0aW9uIHRyZWUuDQo+ ID4gK0lmIHlvdSB3aXNoIHRvIHNlYXJjaCBmb3IgYSBnYXAgd2l0aGluIGEgcmFuZ2UsIHRoZW4g bWFzX2VtcHR5X2FyZWEoKQ0KPiA+ICtvciBtYXNfZW1wdHlfYXJlYV9yZXYoKSBjYW4gYmUgdXNl ZC4gIG1hc19lbXB0eV9hcmVhIHNlYXJjaGVzIGZvciBhDQo+IA0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIGJyYWNrZXRzPw0KPiANCg0K VGhhbmtzDQoNCj4gPiArZ2FwIHN0YXJ0aW5nIGF0IHRoZSBsb3dlc3QgaW5kZXggZ2l2ZW4gdXAg dG8gdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlLg0KPiA+ICttYXNfZW1wdHlfYXJlYV9yZXYgc2Vh cmNoZXMgZm9yIGEgZ2FwIHN0YXJ0aW5nIGF0IHRoZSBoaWdoZXN0IGluZGV4DQo+IA0KPiAgICAg ICAgICAgICAgICAgICAgIF4gYW5kIGhlcmU/DQoNClRoYW5rcw0KDQo+IA0KPiA+ICtnaXZlbiBh bmQgY29udGludWVzIGRvd253YXJkIHRvIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UuDQo+ ID4gKw0KPiA+ICtBbGxvY2F0aW5nIE5vZGVzDQo+ID4gKy0tLS0tLS0tLS0tLS0tLS0NCj4gPiAr DQo+ID4gK0FsbG9jYXRpb25zIGFyZSB1c3VhbGx5IGhhbmRsZWQgaW50ZXJuYWxseSB0byB0aGUg dHJlZSwgaG93ZXZlciBpZiBhbGxvY2F0aW9ucw0KPiA+ICtuZWVkIHRvIG9jY3VyIGJlZm9yZSBh IHdyaXRlIG9jY3VycyB0aGVuIGNhbGxpbmcgbWFzX2VudHJ5X2NvdW50KCkgd2lsbA0KPiA+ICth bGxvY2F0ZSB0aGUgd29yc3QtY2FzZSBudW1iZXIgb2YgbmVlZGVkIG5vZGVzIHRvIGluc2VydCB0 aGUgcHJvdmlkZWQgbnVtYmVyIG9mDQo+ID4gK3Jhbmdlcy4gIFRoaXMgYWxzbyBjYXVzZXMgdGhl IHRyZWUgdG8gZW50ZXIgbWFzcyBpbnNlcnRpb24gbW9kZS4gIE9uY2UNCj4gPiAraW5zZXJ0aW9u cyBhcmUgY29tcGxldGUgY2FsbGluZyBtYXNfZGVzdHJveSgpIG9uIHRoZSBtYXBsZSBzdGF0ZSB3 aWxsIGZyZWUgdGhlDQo+ID4gK3VudXNlZCBhbGxvY2F0aW9ucy4NCj4gPiArDQo+ID4gK0Z1bmN0 aW9ucyBhbmQgc3RydWN0dXJlcw0KPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiAr DQo+ID4gKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaA0KPiA+ICsu LiBrZXJuZWwtZG9jOjogbGliL21hcGxlX3RyZWUuYw0KPiA+ICsNCj4gPiBkaWZmIC0tZ2l0IGEv TUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPiA+IGluZGV4IGY0MTA4ODQxOGFhZS4uYTM1NDc4 YTNkZWUzIDEwMDY0NA0KPiA+IC0tLSBhL01BSU5UQUlORVJTDQo+ID4gKysrIGIvTUFJTlRBSU5F UlMNCj4gPiBAQCAtMTE0MTUsNiArMTE0MTUsMTggQEAgTDoJbGludXgtbWFuQHZnZXIua2VybmVs Lm9yZw0KPiA+ICBTOglNYWludGFpbmVkDQo+ID4gIFc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9k b2MvbWFuLXBhZ2VzDQo+ID4gIA0KPiA+ICtNQVBMRSBUUkVFDQo+ID4gK006CUxpYW0gUi4gSG93 bGV0dCA8TGlhbS5Ib3dsZXR0QG9yYWNsZS5jb20+DQo+ID4gK0w6CWxpbnV4LW1tQGt2YWNrLm9y Zw0KPiA+ICtTOglTdXBwb3J0ZWQNCj4gPiArRjoJRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBs ZV90cmVlLnJzdA0KPiA+ICtGOglpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaA0KPiA+ICtGOglp bmNsdWRlL3RyYWNlL2V2ZW50cy9tYXBsZV90cmVlLmgNCj4gPiArRjoJbGliL21hcGxlX3RyZWUu Yw0KPiA+ICtGOglsaWIvdGVzdF9tYXBsZV90cmVlLmMNCj4gPiArRjoJdG9vbHMvdGVzdGluZy9f YWRpeC10cmVlL2xpbnV4L21hcGxlX3RyZWUuaA0KPiA+ICtGOgl0b29scy90ZXN0aW5nL3JhZGl4 LXRyZWUvbWFwbGUuYw0KPiA+ICsNCj4gPiAgTUFSRFVLIChDUkVBVE9SIENJNDApIERFVklDRSBU UkVFIFNVUFBPUlQNCj4gPiAgTToJUmFodWwgQmVkYXJrYXIgPHJhaHVsYmVkYXJrYXI4OUBnbWFp bC5jb20+DQo+ID4gIEw6CWxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnDQo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVl LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTRk ZGVhYThmM2U3DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbWFw bGVfdHJlZS5oDQo+ID4gQEAgLTAsMCArMSw2NzMgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArICovDQo+ID4gKyNpZm5kZWYgX0xJTlVYX01BUExFX1RSRUVfSA0K PiA+ICsjZGVmaW5lIF9MSU5VWF9NQVBMRV9UUkVFX0gNCj4gPiArLyoNCj4gPiArICogTWFwbGUg VHJlZSAtIEFuIFJDVS1zYWZlIGFkYXB0aXZlIHRyZWUgZm9yIHN0b3JpbmcgcmFuZ2VzDQo+ID4g KyAqIENvcHlyaWdodCAoYykgMjAxOCBPcmFjbGUNCj4gDQo+IDIwMTggLSAyMDIyPw0KDQpXYWl0 LCB3aGF0IGhhcHBlbmVkIGluIDIwMTktMjAyMj8gIERpZCBJIG1pc3MgYW55dGhpbmc/DQoNCj4g DQo+ID4gKyAqIEF1dGhvcnM6ICAgICBMaWFtIFIuIEhvd2xldHQgPExpYW0uSG93bGV0dEBPcmFj bGUuY29tPg0KPiA+ICsgKiAgICAgICAgICAgICAgTWF0dGhldyBXaWxjb3ggPHdpbGx5QGluZnJh ZGVhZC5vcmc+DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+DQo+ID4gKy8qICNkZWZpbmUgQ09ORklHX01BUExFX1JDVV9ESVNBQkxFRCAq Lw0KPiA+ICsvKiAjZGVmaW5lIENPTkZJR19ERUJVR19NQVBMRV9UUkVFX1ZFUkJPU0UgKi8NCj4g PiArDQo+ID4gKy8qDQo+ID4gKyAqIEFsbG9jYXRlZCBub2RlcyBhcmUgbXV0YWJsZSB1bnRpbCB0 aGV5IGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLA0KPiA+ICsgKiBhdCB3aGljaCB0 aW1lIHRoZXkgY2Fubm90IGNoYW5nZSB0aGVpciB0eXBlIHVudGlsIHRoZXkgaGF2ZSBiZWVuIHJl bW92ZWQNCj4gPiArICogZnJvbSB0aGUgdHJlZSBhbmQgYW4gUkNVIGdyYWNlIHBlcmlvZCBoYXMg cGFzc2VkLg0KPiA+ICsgKg0KPiA+ICsgKiBSZW1vdmVkIG5vZGVzIGhhdmUgdGhlaXIgLT5wYXJl bnQgc2V0IHRvIHBvaW50IHRvIHRoZW1zZWx2ZXMuICBSQ1UgcmVhZGVycw0KPiA+ICsgKiBjaGVj ayAtPnBhcmVudCBiZWZvcmUgcmVseWluZyBvbiB0aGUgdmFsdWUgdGhhdCB0aGV5IGxvYWRlZCBm cm9tIHRoZQ0KPiA+ICsgKiBzbG90cyBhcnJheS4gIFRoaXMgbGV0cyB1cyByZXVzZSB0aGUgc2xv dHMgYXJyYXkgZm9yIHRoZSBSQ1UgaGVhZC4NCj4gPiArICoNCj4gPiArICogTm9kZXMgaW4gdGhl IHRyZWUgcG9pbnQgdG8gdGhlaXIgcGFyZW50IHVubGVzcyBiaXQgMCBpcyBzZXQuDQo+IA0KPiBU aGVyZSBhcmUgYSBsb3RzIG9mIGNvbW1lbnRzIGRlc2NyaWJpbmcgdGhlIG1hcGxlIHRyZWUgaW50 ZXJuYWxzIGhlcmUgYW5kDQo+IGJlbG93LiBEaWQgeWFvdSBjb25zaWRlciBhZGRpbmcgYSBzZWN0 aW9uICJJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIiBvcg0KPiBzb21ldGhpbmcgbGlrZSB0aGF0IHRv IHRoZSBtYXBsZV90cmVlLnJzdCBhbmQgbGlua2luZyB0aGVzZSBjb21tZW50cyB0aGVyZQ0KPiB3 aXRoIERPQzogYW5kIHNvbWUgZ2x1ZSB0ZXh0Pw0KDQpJIGRpZC4gIEkgYWN0dWFsbHkgaGFkIGl0 IGluIHRoZXJlIGJ1dCBtb3ZlZCBpdCBpbnRvIHRoZSBjb2RlIGluIGFuDQplZmZvcnQgdG8gYXZv aWQgdGhlIGRvY3VtZW50YXRpb24gZnJvbSBiZWluZyBhIGRldmVsb3BlciBkb2MuICBJJ2QgbGlr ZQ0KaXQgdG8gYmUgYSB1c2VyIGRvY3VtZW50LiAgSSBhbHNvIGRpZCBub3Qgd2FudCB0aGUgaW1w bGVtZW50YXRpb24NCmRldGFpbHMgdG8gYmUgdG9vIGZhciBhd2F5IGZyb20gdGhlIGNvZGUgdG8g YXZvaWQgaXQgYmVpbmcgbWlzc2VkIHdoZW4NCnRoZSBjb2RlIGNoYW5nZXMuDQoNCj4gDQo+ID4g KyAqLw0KPiA+ICsjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpIHx8IGRlZmluZWQoQlVJTERfVkRT TzMyXzY0KQ0KPiA+ICsvKiA2NGJpdCBzaXplcyAqLw0KPiA+ICsjZGVmaW5lIE1BUExFX05PREVf U0xPVFMJMzEJLyogMjU2IGJ5dGVzIGluY2x1ZGluZyAtPnBhcmVudCAqLw0KPiA+ICsjZGVmaW5l IE1BUExFX1JBTkdFNjRfU0xPVFMJMTYJLyogMjU2IGJ5dGVzICovDQo+ID4gKyNkZWZpbmUgTUFQ TEVfQVJBTkdFNjRfU0xPVFMJMTAJLyogMjQwIGJ5dGVzICovDQo+ID4gKyNkZWZpbmUgTUFQTEVf QVJBTkdFNjRfTUVUQV9NQVgJMTUJLyogT3V0IG9mIHJhbmdlIGZvciBtZXRhZGF0YSAqLw0KPiA+ ICsjZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTCShNQVBMRV9OT0RFX1NMT1RTIC0gMSkNCj4gPiAr I2Vsc2UNCj4gPiArLyogMzJiaXQgc2l6ZXMgKi8NCj4gPiArI2RlZmluZSBNQVBMRV9OT0RFX1NM T1RTCTYzCS8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLT5wYXJlbnQgKi8NCj4gPiArI2RlZmluZSBN QVBMRV9SQU5HRTY0X1NMT1RTCTMyCS8qIDI1NiBieXRlcyAqLw0KPiA+ICsjZGVmaW5lIE1BUExF X0FSQU5HRTY0X1NMT1RTCTIxCS8qIDI0MCBieXRlcyAqLw0KPiA+ICsjZGVmaW5lIE1BUExFX0FS QU5HRTY0X01FVEFfTUFYCTIyCS8qIE91dCBvZiByYW5nZSBmb3IgbWV0YWRhdGEgKi8NCj4gPiAr I2RlZmluZSBNQVBMRV9BTExPQ19TTE9UUwkoTUFQTEVfTk9ERV9TTE9UUyAtIDIpDQo+ID4gKyNl bmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQp ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1BUExFX05PREVfTUFTSwkJMjU1VUwNCj4gDQo+IC4u Lg0KPiANCj4gPiArLyoqDQo+ID4gKyAqIERPQzogTWFwbGUgdHJlZSBmbGFncw0KPiANCj4gSSBk b24ndCBzZWUgdGhpcyByZWZlcmVuY2VkIGluIHRoZSBEb2N1bWVudGF0aW9uLyBjaGFuZ2VzDQoN Ckl0IGlzIHJlZmVyZW5jZWQgaW5jb3JyZWN0bHksIHRoYW5rcy4NCg0KPiANCj4gPiArICoNCj4g PiArICogKiBNVF9GTEFHU19BTExPQ19SQU5HRQktIFRyYWNrIGdhcHMgaW4gdGhpcyB0cmVlDQo+ ID4gKyAqICogTVRfRkxBR1NfVVNFX1JDVQkJLSBPcGVyYXRlIGluIFJDVSBtb2RlDQo+ID4gKyAq ICogTVRfRkxBR1NfSEVJR0hUX09GRlNFVAktIFRoZSBwb3NpdGlvbiBvZiB0aGUgdHJlZSBoZWln aHQgaW4gdGhlIGZsYWdzDQo+ID4gKyAqICogTVRfRkxBR1NfSEVJR0hUX01BU0sJLSBUaGUgbWFz ayBmb3IgdGhlIG1hcGxlIHRyZWUgaGVpZ2h0IHZhbHVlDQo+ID4gKyAqICogTVRfRkxBR1NfTE9D S19NQVNLCQktIEhvdyB0aGUgbXRfbG9jayBpcyB1c2VkDQo+ID4gKyAqICogTVRfRkxBR1NfTE9D S19JUlEJCS0gQWNxdWlyZWQgaXJxLXNhZmUNCj4gPiArICogKiBNVF9GTEFHU19MT0NLX0JICQkt IEFjcXVpcmVkIGJoLXNhZmUNCj4gPiArICogKiBNVF9GTEFHU19MT0NLX0VYVEVSTgktIG10X2xv Y2sgaXMgbm90IHVzZWQNCj4gPiArICoNCj4gPiArICogTUFQTEVfSEVJR0hUX01BWAlUaGUgbGFy Z2VzdCBoZWlnaHQgdGhhdCBjYW4gYmUgc3RvcmVkDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIE1U X0ZMQUdTX0FMTE9DX1JBTkdFCTB4MDENCj4gPiArI2RlZmluZSBNVF9GTEFHU19VU0VfUkNVCTB4 MDINCj4gPiArI2RlZmluZQlNVF9GTEFHU19IRUlHSFRfT0ZGU0VUCTB4MDINCj4gPiArI2RlZmlu ZQlNVF9GTEFHU19IRUlHSFRfTUFTSwkweDdDDQo+IA0KPiBJcyBleHRyYSBhbGlnbm1lbnQgaGVy ZSBpbnRlbnRpb25hbD8NCg0KTm8sIEkgd2lsbCBmaXggaXQuDQoNCj4gDQo+ID4gKyNkZWZpbmUg TVRfRkxBR1NfTE9DS19NQVNLCTB4MzAwDQo+ID4gKyNkZWZpbmUgTVRfRkxBR1NfTE9DS19JUlEJ MHgxMDANCj4gPiArI2RlZmluZSBNVF9GTEFHU19MT0NLX0JICTB4MjAwDQo+ID4gKyNkZWZpbmUg TVRfRkxBR1NfTE9DS19FWFRFUk4JMHgzMDANCj4gDQo+IC4uLg0KPiANCj4gPiArLyoNCj4gPiAr ICogTW9yZSBjb21wbGljYXRlZCBzdG9yZXMgY2FuIGNhdXNlIHR3byBub2RlcyB0byBiZWNvbWUg b25lIG9yIHRyZWUgYW5kDQo+IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIHRocmVlPw0KDQpZZXMsIHBlcmhhcHMg SSB0eXBlZCBteSBhY2NlbnQgaGVyZSA6KQ0KDQo+IA0KPiA+ICsgKiBwb3RlbnRpYWxseSBhbHRl ciB0aGUgaGVpZ2h0IG9mIHRoZSB0cmVlLiAgRWl0aGVyIGhhbGYgb2YgdGhlIHRyZWUgbWF5IG5l ZWQNCj4gPiArICogdG8gYmUgcmViYWxhbmNlZCBhZ2FpbnN0IHRoZSBvdGhlci4gIFRoZSBtYV90 b3BpYXJ5IHN0cnVjdCBpcyB1c2VkIHRvIHRyYWNrDQo+ID4gKyAqIHdoaWNoIG5vZGVzIGhhdmUg YmVlbiAnY3V0JyBmcm9tIHRoZSB0cmVlIHNvIHRoYXQgdGhlIGNoYW5nZSBjYW4gYmUgZG9uZQ0K PiA+ICsgKiBzYWZlbHkgYXQgYSBsYXRlciBkYXRlLiAgVGhpcyBpcyBkb25lIHRvIHN1cHBvcnQg UkNVLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IG1hX3RvcGlhcnkgew0KPiA+ICsJc3RydWN0IG1h cGxlX2Vub2RlICpoZWFkOw0KPiA+ICsJc3RydWN0IG1hcGxlX2Vub2RlICp0YWlsOw0KPiA+ICsJ c3RydWN0IG1hcGxlX3RyZWUgKm10cmVlOw0KPiA+ICt9Ow0KPiANCj4gLi4uDQo+IA0KPiA+ICsv KiBBZHZhbmNlZCBBUEkgKi8NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFRoZSBtYXBsZSBzdGF0 ZSBpcyBkZWZpbmVkIGluIHRoZSBzdHJ1Y3QgbWFfc3RhdGUgYW5kIGlzIHVzZWQgdG8ga2VlcCB0 cmFjaw0KPiA+ICsgKiBvZiBpbmZvcm1hdGlvbiBkdXJpbmcgb3BlcmF0aW9ucywgYW5kIGV2ZW4g YmV0d2VlbiBvcGVyYXRpb25zIHdoZW4gdXNpbmcgdGhlDQo+ID4gKyAqIGFkdmFuY2VkIEFQSS4N Cj4gPiArICoNCj4gPiArICogSWYgc3RhdGUtPm5vZGUgaGFzIGJpdCAwIHNldCB0aGVuIGl0IHJl ZmVyZW5jZXMgYSB0cmVlIGxvY2F0aW9uIHdoaWNoIGlzIG5vdA0KPiA+ICsgKiBhIG5vZGUgKGVn IHRoZSByb290KS4gIElmIGJpdCAxIGlzIHNldCwgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgYXJlIGEg bmVnYXRpdmUNCj4gPiArICogZXJybm8uICBCaXQgMiAodGhlICd1bmFsbG9jYXRlZCBzbG90cycg Yml0KSBpcyBjbGVhci4gIEJpdHMgMy02IGluZGljYXRlIHRoZQ0KPiA+ICsgKiBub2RlIHR5cGUu DQo+ID4gKyAqDQo+ID4gKyAqIHN0YXRlLT5hbGxvYyBlaXRoZXIgaGFzIGEgcmVxdWVzdCBudW1i ZXIgb2Ygbm9kZXMgb3IgYW4gYWxsb2NhdGVkIG5vZGUuICBJZg0KPiA+ICsgKiBzdGF0LT5hbGxv YyBoYXMgYSByZXF1ZXN0ZWQgbnVtYmVyIG9mIG5vZGVzLCB0aGUgZmlyc3QgYml0IHdpbGwgYmUg c2V0ICgweDEpDQo+ID4gKyAqIGFuZCB0aGUgcmVtYWluaW5nIGJpdHMgYXJlIHRoZSB2YWx1ZS4g IElmIHN0YXRlLT5hbGxvYyBpcyBhIG5vZGUsIHRoZW4gdGhlDQo+ID4gKyAqIG5vZGUgd2lsbCBi ZSBvZiB0eXBlIG1hcGxlX2FsbG9jLiAgbWFwbGVfYWxsb2MgaGFzIE1BUExFX05PREVfU0xPVFMg LSAxIGZvcg0KPiA+ICsgKiBzdG9yaW5nIG1vcmUgYWxsb2NhdGVkIG5vZGVzLCBhIHRvdGFsLCBh bmQgdGhlIG5vZGVfY291bnQgaW4gdGhpcyBub2RlLg0KPiA+ICsgKiB0b3RhbCBpcyB0aGUgbnVt YmVyIG9mIG5vZGVzIGFsbG9jYXRlZC4gIG5vZGVfY291bnQgaXMgdGhlIG51bWJlciBvZg0KPiAN Cj4gTWF5YmUgbWVyZ2UgInRvdGFsIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWxsb2NhdGVkIiB3 aXRoICJhIHRvdGFsIjoNCj4gDQo+IC4uLiBhbGxvY2F0ZWQgbm9kZXMsIHRvdGFsIG51bWJlciBv ZiBub2RlcyBhbGxvY2F0ZWQsIGFuZCB0aGUgbm9kZV9jb3VudC4uLg0KDQpUaGF0IHdvdWxkIHBy b2JhYmx5IHJlYWQgYmV0dGVyLiAgVGhhbmtzLg0KDQo+IA0KPiA+ICsgKiBhbGxvY2F0ZWQgbm9k ZXMgaW4gdGhpcyBub2RlLiAgVGhlIHNjYWxpbmcgYmV5b25kIE1BUExFX05PREVfU0xPVFMgLSAx IGlzDQo+ID4gKyAqIGhhbmRsZWQgYnkgc3RvcmluZyBmdXJ0aGVyIG5vZGVzIGludG8gc3RhdGUt PmFsbG9jLT5zbG90WzBdJ3Mgbm9kZS4gIE5vZGVzDQo+ID4gKyAqIGFyZSB0YWtlbiBmcm9tIHN0 YXRlLT5hbGxvYyBieSByZW1vdmluZyBhIG5vZGUgZnJvbSB0aGUgc3RhdGUtPmFsbG9jIG5vZGUN Cj4gPiArICogdW50aWwgc3RhdGUtPmFsbG9jLT5ub2RlX2NvdW50IGlzIDEsIHdoZW4gc3RhdGUt PmFsbG9jIGlzIHJldHVybmVkIGFuZCB0aGUNCj4gPiArICogc3RhdGUtPmFsbG9jLT5zbG90WzBd IGlzIHByb21vdGVkIHRvIHN0YXRlLT5hbGxvYy4gIE5vZGVzIGFyZSBwdXNoZWQgb250bw0KPiA+ ICsgKiBzdGF0ZS0+YWxsb2MgYnkgcHV0dGluZyB0aGUgY3VycmVudCBzdGF0ZS0+YWxsb2MgaW50 byB0aGUgcHVzaGVkIG5vZGUncw0KPiA+ICsgKiBzbG90WzBdLg0KPiA+ICsgKg0KPiA+ICsgKiBU aGUgc3RhdGUgYWxzbyBjb250YWlucyB0aGUgaW1wbGllZCBtaW4vbWF4IG9mIHRoZSBzdGF0ZS0+ bm9kZSwgdGhlIGRlcHRoIG9mDQo+ID4gKyAqIHRoaXMgc2VhcmNoLCBhbmQgdGhlIG9mZnNldC4g VGhlIGltcGxpZWQgbWluL21heCBhcmUgZWl0aGVyIGZyb20gdGhlIHBhcmVudA0KPiA+ICsgKiBu b2RlIG9yIGFyZSAwLW9vIGZvciB0aGUgcm9vdCBub2RlLiAgVGhlIGRlcHRoIGlzIGluY3JlbWVu dGVkIG9yIGRlY3JlbWVudGVkDQo+ID4gKyAqIGV2ZXJ5IHRpbWUgYSBub2RlIGlzIHdhbGtlZCBk b3duIG9yIHVwLiAgVGhlIG9mZnNldCBpcyB0aGUgc2xvdC9waXZvdCBvZg0KPiA+ICsgKiBpbnRl cmVzdCBpbiB0aGUgbm9kZSAtIGVpdGhlciBmb3IgcmVhZGluZyBvciB3cml0aW5nLg0KPiA+ICsg Kg0KPiA+ICsgKiBXaGVuIHJldHVybmluZyBhIHZhbHVlIHRoZSBtYXBsZSBzdGF0ZSBpbmRleCBh bmQgbGFzdCByZXNwZWN0aXZlbHkgY29udGFpbg0KPiA+ICsgKiB0aGUgc3RhcnQgYW5kIGVuZCBv ZiB0aGUgcmFuZ2UgZm9yIHRoZSBlbnRyeS4gIFJhbmdlcyBhcmUgaW5jbHVzaXZlIGluIHRoZQ0K PiA+ICsgKiBNYXBsZSBUcmVlLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IG1hX3N0YXRlIHsNCj4g PiArCXN0cnVjdCBtYXBsZV90cmVlICp0cmVlOwkvKiBUaGUgdHJlZSB3ZSdyZSBvcGVyYXRpbmcg aW4gKi8NCj4gPiArCXVuc2lnbmVkIGxvbmcgaW5kZXg7CQkvKiBUaGUgaW5kZXggd2UncmUgb3Bl cmF0aW5nIG9uIC0gcmFuZ2Ugc3RhcnQgKi8NCj4gPiArCXVuc2lnbmVkIGxvbmcgbGFzdDsJCS8q IFRoZSBsYXN0IGluZGV4IHdlJ3JlIG9wZXJhdGluZyBvbiAtIHJhbmdlIGVuZCAqLw0KPiA+ICsJ c3RydWN0IG1hcGxlX2Vub2RlICpub2RlOwkvKiBUaGUgbm9kZSBjb250YWluaW5nIHRoaXMgZW50 cnkgKi8NCj4gPiArCXVuc2lnbmVkIGxvbmcgbWluOwkJLyogVGhlIG1pbmltdW0gaW5kZXggb2Yg dGhpcyBub2RlIC0gaW1wbGllZCBwaXZvdCBtaW4gKi8NCj4gPiArCXVuc2lnbmVkIGxvbmcgbWF4 OwkJLyogVGhlIG1heGltdW0gaW5kZXggb2YgdGhpcyBub2RlIC0gaW1wbGllZCBwaXZvdCBtYXgg Ki8NCj4gPiArCXN0cnVjdCBtYXBsZV9hbGxvYyAqYWxsb2M7CS8qIEFsbG9jYXRlZCBub2RlcyBm b3IgdGhpcyBvcGVyYXRpb24gKi8NCj4gPiArCXVuc2lnbmVkIGNoYXIgZGVwdGg7CQkvKiBkZXB0 aCBvZiB0cmVlIGRlc2NlbnQgZHVyaW5nIHdyaXRlICovDQo+ID4gKwl1bnNpZ25lZCBjaGFyIG9m ZnNldDsNCj4gPiArCXVuc2lnbmVkIGNoYXIgbWFzX2ZsYWdzOw0KPiA+ICt9Ow0KPiANCj4gLi4u DQo+IA0KPiA+ICsvKioNCj4gPiArICogbXRfZm9yX2VhY2ggLSBTZWFyY2hlcyBmb3IgYW4gZW50 cnkgc3RhcnRpbmcgYXQgaW5kZXggdW50aWwgbWF4Lg0KPiANCj4gSXNuJ3QgaXQgYW4gaXRlcmF0 b3I/DQoNClllcywgdGhhbmtzLiAgTm90IHN1cmUgaG93IHRoYXQgaGFwcGVuZWQuDQoNCj4gDQo+ ID4gKyAqIEB0cmVlOiBUaGUgTWFwbGUgVHJlZQ0KPiA+ICsgKiBAZW50cnk6IFRoZSBjdXJyZW50 IGVudHJ5DQo+ID4gKyAqIEBpbmRleDogVGhlIGluZGV4IHRvIHVwZGF0ZSB0byB0cmFjayB0aGUg bG9jYXRpb24gaW4gdGhlIHRyZWUNCj4gPiArICogQG1heDogVGhlIG1heGltdW0gbGltaXQgZm9y IEBpbmRleA0KPiA+ICsgKg0KPiA+ICsgKiBOb3RlOiBXaWxsIG5vdCByZXR1cm4gdGhlIHplcm8g ZW50cnkuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIG10X2Zvcl9lYWNoKHRyZWUsIGVudHJ5LCBp bmRleCwgbWF4KSBcDQo+ID4gKwlmb3IgKGVudHJ5ID0gbXRfZmluZCh0cmVlLCAmaW5kZXgsIG1h eCk7IFwNCj4gPiArCQllbnRyeTsgZW50cnkgPSBtdF9maW5kX2FmdGVyKHRyZWUsICZpbmRleCwg bWF4KSkNCj4gPiArDQo+ID4gKw0KPiANCj4gLi4uDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9saWIv bWFwbGVfdHJlZS5jIGIvbGliL21hcGxlX3RyZWUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42YTU3NzQ1MzE5YmENCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvbGliL21hcGxlX3RyZWUuYw0KPiA+IEBAIC0wLDAgKzEsNjk0MyBAQA0KPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gPiArLyoNCj4gPiArICog TWFwbGUgVHJlZSBpbXBsZW1lbnRhdGlvbg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggT3Jh Y2xlIENvcnBvcmF0aW9uDQo+ID4gKyAqIEF1dGhvcnM6IExpYW0gUi4gSG93bGV0dCA8TGlhbS5I b3dsZXR0QG9yYWNsZS5jb20+DQo+ID4gKyAqCSAgICBNYXR0aGV3IFdpbGNveCA8d2lsbHlAaW5m cmFkZWFkLm9yZz4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBJbnRlcmVzdGlu ZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBNYXBsZSBUcmVlDQo+IA0KPiBET0M6PyAN Cg0KU3VyZS4NCg0KPiANCj4gPiArICoNCj4gPiArICogRWFjaCBub2RlIHR5cGUgaGFzIGEgbnVt YmVyIG9mIHNsb3RzIGZvciBlbnRyaWVzIGFuZCBhIG51bWJlciBvZiBzbG90cyBmb3INCj4gPiAr ICogcGl2b3RzLiAgSW4gdGhlIGNhc2Ugb2YgZGVuc2Ugbm9kZXMsIHRoZSBwaXZvdHMgYXJlIGlt cGxpZWQgYnkgdGhlIHBvc2l0aW9uDQo+ID4gKyAqIGFuZCBhcmUgc2ltcGx5IHRoZSBzbG90IGlu ZGV4ICsgdGhlIG1pbmltdW0gb2YgdGhlIG5vZGUuDQo+ID4gKyAqDQo+ID4gKyAqIEluIHJlZ3Vs YXIgQi1UcmVlIHRlcm1zLCBwaXZvdHMgYXJlIGNhbGxlZCBrZXlzLiAgVGhlIHRlcm0gcGl2b3Qg aXMgdXNlZCB0bw0KPiA+ICsgKiBpbmRpY2F0ZSB0aGF0IHRoZSB0cmVlIGlzIHNwZWNpZnlpbmcg cmFuZ2VzLCAgUGl2b3RzIG1heSBhcHBlYXIgaW4gdGhlDQo+ID4gKyAqIHN1YnRyZWUgd2l0aCBh biBlbnRyeSBhdHRhY2hlZCB0byB0aGUgdmFsdWUgd2hlcmUgYXMga2V5cyBhcmUgdW5pcXVlIHRv IGENCj4gPiArICogc3BlY2lmaWMgcG9zaXRpb24gb2YgYSBCLXRyZWUuICBQaXZvdCB2YWx1ZXMg YXJlIGluY2x1c2l2ZSBvZiB0aGUgc2xvdCB3aXRoDQo+ID4gKyAqIHRoZSBzYW1lIGluZGV4Lg0K PiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGVzIHRoZSBs YXlvdXQgb2YgYSByYW5nZTY0IG5vZGVzIHNsb3RzIGFuZCBwaXZvdHMuDQo+ID4gKyAqDQo+ID4g KyAqDQo+ID4gKyAqICBTbG90cyAtPiB8IDAgfCAxIHwgMiB8IC4uLiB8IDEyIHwgMTMgfCAxNCB8 IDE1IHwNCj4gPiArICogICAgICAgICAgIOKUrCAgIOKUrCAgIOKUrCAgIOKUrCAgICAg4pSsICAg IOKUrCAgICDilKwgICAg4pSsICAgIOKUrA0KPiA+ICsgKiAgICAgICAgICAg4pSCICAg4pSCICAg 4pSCICAg4pSCICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSAIEltcGxpZWQg bWF4aW11bQ0KPiA+ICsgKiAgICAgICAgICAg4pSCICAg4pSCICAg4pSCICAg4pSCICAgICDilIIg ICAg4pSCICAgIOKUgiAgICDilJTilIAgUGl2b3QgMTQNCj4gPiArICogICAgICAgICAgIOKUgiAg IOKUgiAgIOKUgiAgIOKUgiAgICAg4pSCICAgIOKUgiAgICDilJTilIAgUGl2b3QgMTMNCj4gPiAr ICogICAgICAgICAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUgiAgICAg4pSCICAgIOKUlOKUgCBQaXZv dCAxMg0KPiA+ICsgKiAgICAgICAgICAg4pSCICAg4pSCICAg4pSCICAg4pSCICAgICDilJTilIAg UGl2b3QgMTENCj4gPiArICogICAgICAgICAgIOKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgCBQaXZv dCAyDQo+ID4gKyAqICAgICAgICAgICDilIIgICDilIIgICDilJTilIAgUGl2b3QgMQ0KPiA+ICsg KiAgICAgICAgICAg4pSCICAg4pSU4pSAIFBpdm90IDANCj4gPiArICogICAgICAgICAgIOKUlOKU gCAgSW1wbGllZCBtaW5pbXVtDQo+ID4gKyAqDQo+ID4gKyAqIFNsb3QgY29udGVudHM6DQo+ID4g KyAqICBJbnRlcm5hbCAobm9uLWxlYWYpIG5vZGVzIGNvbnRhaW4gcG9pbnRlcnMgdG8gb3RoZXIg bm9kZXMuDQo+ID4gKyAqICBMZWFmIG5vZGVzIGNvbnRhaW4gZW50cmllcy4NCj4gPiArICoNCj4g PiArICogVGhlIGxvY2F0aW9uIG9mIGludGVyZXN0IGlzIG9mdGVuIHJlZmVycmVkIHRvIGFzIGFu IG9mZnNldC4gIEFsbCBvZmZzZXRzIGhhdmUNCj4gPiArICogYSBzbG90LCBidXQgdGhlIGxhc3Qg b2Zmc2V0IGhhcyBhbiBpbXBsaWVkIHBpdm90IGZyb20gdGhlIG5vZGUgYWJvdmUgKG9yDQo+ID4g KyAqIFVJTlRfTUFYIGZvciB0aGUgcm9vdCBub2RlLg0KPiA+ICsgKg0KPiA+ICsgKiBSYW5nZXMg Y29tcGxpY2F0ZSBjZXJ0YWluIHdyaXRlIGFjdGl2aXRpZXMuICBXaGVuIG1vZGlmeWluZyBhbnkg b2YNCj4gPiArICogdGhlIEItdHJlZSB2YXJpYW50cywgaXQgaXMga25vd24gdGhhdCBvbmUgZW50 cnkgd2lsbCBlaXRoZXIgYmUgYWRkZWQgb3INCj4gPiArICogZGVsZXRlZC4gIFdoZW4gbW9kaWZ5 aW5nIHRoZSBNYXBsZSBUcmVlLCBvbmUgc3RvcmUgb3BlcmF0aW9uIG1heSBvdmVyd3JpdGUNCj4g PiArICogdGhlIGVudGlyZSBkYXRhIHNldCwgb3Igb25lIGhhbGYgb2YgdGhlIHRyZWUsIG9yIHRo ZSBtaWRkbGUgaGFsZiBvZiB0aGUgdHJlZS4NCj4gPiArICoNCj4gPiArICovDQo+IA0KPiAuLi4N Cj4gDQo+ID4gKy8qIEludGVyZmFjZSAqLw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIG1hc19z dG9yZSgpIC0gU3RvcmUgYW4gQGVudHJ5Lg0KPiA+ICsgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUu DQo+ID4gKyAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHN0b3JlLg0KPiA+ICsgKg0KPiA+ICsgKiBU aGUgQG1hcy0+aW5kZXggYW5kIEBtYXMtPmxhc3QgaXMgdXNlZCB0byBzZXQgdGhlIHJhbmdlIGZv ciB0aGUgQGVudHJ5Lg0KPiA+ICsgKiBOb3RlOiBUaGUgQG1hcyBzaG91bGQgaGF2ZSBwcmUtYWxs b2NhdGVkIGVudHJpZXMgdG8gZW5zdXJlIHRoZXJlIGlzIG1lbW9yeSB0bw0KPiA+ICsgKiBzdG9y ZSB0aGUgZW50cnkuICBQbGVhc2Ugc2VlIG1hc19leHBlY3RlZF9lbnRyaWVzKCkvbWFzX2Rlc3Ry b3koKSBmb3IgbW9yZSBkZXRhaWxzLg0KPiANCj4gUmV0dXJuOiA/DQoNCkkgd2lsbCBhZGQgaXQu DQoNCj4gDQo+ID4gKyAqLw0KPiA+ICt2b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICpt YXMsIHZvaWQgKmVudHJ5KQ0KPiA+ICt7DQo+ID4gKwlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywg ZW50cnkpOw0KPiA+ICsNCj4gPiArCXRyYWNlX21hX3dyaXRlKF9fZnVuY19fLCBtYXMsIDAsIGVu dHJ5KTsNCj4gPiArI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFDQo+ID4gKwlpZiAobWFz LT5pbmRleCA+IG1hcy0+bGFzdCkNCj4gPiArCQlwcmludGsoIkVycm9yICVsdSA+ICVsdSAlcFxu IiwgbWFzLT5pbmRleCwgbWFzLT5sYXN0LCBlbnRyeSk7DQo+ID4gKwlNVF9CVUdfT04obWFzLT50 cmVlLCBtYXMtPmluZGV4ID4gbWFzLT5sYXN0KTsNCj4gPiArCWlmIChtYXMtPmluZGV4ID4gbWFz LT5sYXN0KSB7DQo+ID4gKwkJbWFzX3NldF9lcnIobWFzLCAtRUlOVkFMKTsNCj4gPiArCQlyZXR1 cm4gTlVMTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArLyoNCj4g PiArICogU3RvcmluZyBpcyB0aGUgc2FtZSBvcGVyYXRpb24gYXMgaW5zZXJ0IHdpdGggdGhlIGFk ZGVkIGNhdmVhdCB0aGF0IGl0IGNhbg0KPiA+ICsgKiBvdmVyd3JpdGUgZW50cmllcy4gIEFsdGhv dWdoIHRoaXMgc2VlbXMgc2ltcGxlIGVub3VnaCwgb25lIG1heSB3YW50IHRvDQo+ID4gKyAqIGV4 YW1pbmUgd2hhdCBoYXBwZW5zIGlmIGEgc2luZ2xlIHN0b3JlIG9wZXJhdGlvbiB3YXMgdG8gb3Zl cndyaXRlIG11bHRpcGxlDQo+ID4gKyAqIGVudHJpZXMgd2l0aGluIGEgc2VsZi1iYWxhbmNpbmcg Qi1UcmVlLg0KPiA+ICsgKi8NCj4gPiArCW1hc193cl9zdG9yZV9zZXR1cCgmd3JfbWFzKTsNCj4g PiArCW1hc193cl9zdG9yZV9lbnRyeSgmd3JfbWFzKTsNCj4gPiArCXJldHVybiB3cl9tYXMuY29u dGVudDsNCj4gPiArfQ0KPiANCj4gLi4uDQo+IA0KPiA+ICsvKioNCj4gPiArICogbXRfbmV4dCgp IC0gZ2V0IHRoZSBuZXh0IHZhbHVlIGluIHRoZSBtYXBsZSB0cmVlDQo+ID4gKyAqIEBtdDogVGhl IG1hcGxlIHRyZWUNCj4gPiArICogQGluZGV4OiBUaGUgc3RhcnQgaW5kZXgNCj4gPiArICogQG1h eDogVGhlIG1heGltdW0gaW5kZXggdG8gY2hlY2sNCj4gPiArICoNCj4gPiArICogUmV0dXJuczog VGhlIGVudHJ5IGF0IEBpbmRleCBvciBoaWdoZXIsIG9yICVOVUxMIGlmIG5vdGhpbmcgaXMgZm91 bmQuDQo+IA0KPiBQbGVhc2Ugcy9SZXR1cm5zL1JldHVybi8NCg0KSSd2ZSBmaXhlZCB0aGlzIGJl Zm9yZSB0b28uICBUaGFua3MgZm9yIGNhdGNoaW5nIGl0Lg0KDQo+IA0KPiA+ICsgKi8NCj4gPiAr dm9pZCAqbXRfbmV4dChzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgs IHVuc2lnbmVkIGxvbmcgbWF4KQ0KPiA+ICt7DQo+ID4gKwl2b2lkICplbnRyeSA9IE5VTEw7DQo+ ID4gKwlNQV9TVEFURShtYXMsIG10LCBpbmRleCwgaW5kZXgpOw0KPiA+ICsNCj4gPiArCXJjdV9y ZWFkX2xvY2soKTsNCj4gPiArCWVudHJ5ID0gbWFzX25leHQoJm1hcywgbWF4KTsNCj4gPiArCXJj dV9yZWFkX3VubG9jaygpOw0KPiA+ICsJcmV0dXJuIGVudHJ5Ow0KPiA+ICt9DQo+ID4gK0VYUE9S VF9TWU1CT0xfR1BMKG10X25leHQpOw0KPiANCj4gLi4uDQo+IA0KPiA+ICsvKg0KPiANCj4ga2Vy bmVsLWRvYz8NCg0KVGhhbmtzDQoNCj4gDQo+ID4gKyAqIG1hc19maW5kOiBJZiBtYXMtPm5vZGUg PT0gTUFTX1NUQVJULCBmaW5kIHRoZSBmaXJzdA0KPiA+ICsgKiBub24tTlVMTCBlbnRyeSA+PSBt YXMtPmluZGV4Lg0KPiA+ICsgKiBPdGhlcndpc2UsIGZpbmQgdGhlIGZpcnN0IG5vbi1OVUxMIGVu dHJ5ID4gbWFzLT5pbmRleA0KPiANCj4gYWx0aG91Z2ggdGhpcyBtaWdodCByZW5kZXIgbm90IG5p Y2VseSBpbiBodG1sLi4uDQoNCkkgd2lsbCBzcGVsbCBpdCBvdXQgYW5kIGNoZWNrIHRoZSBnZW5l cmF0ZWQgaHRtbC4NCg0KPiANCj4gPiArICogQG1hczogVGhlIG1hcGxlIHN0YXRlDQo+ID4gKyAq IEBtYXg6IFRoZSBtYXhpbXVtIHZhbHVlIHRvIGNoZWNrLg0KPiA+ICsgKg0KPiA+ICsgKiBNdXN0 IGhvbGQgcmN1X3JlYWRfbG9jayBvciB0aGUgd3JpdGUgbG9jay4NCj4gPiArICogSWYgYW4gZW50 cnkgZXhpc3RzLCBsYXN0IGFuZCBpbmRleCBhcmUgdXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gPiAr ICogTWF5IHNldCBAbWFzLT5ub2RlIHRvIE1BU19OT05FLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1 cm46IFRoZSBlbnRyeSBvciAlTlVMTC4NCj4gPiArICovDQo+ID4gK3ZvaWQgKm1hc19maW5kKHN0 cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCkNCj4gPiArew0KPiA+ICsJaWYg KHVubGlrZWx5KG1hc19pc19wYXVzZWQobWFzKSkpIHsNCj4gPiArCQlpZiAodW5saWtlbHkobWFz LT5sYXN0ID09IFVMT05HX01BWCkpIHsNCj4gPiArCQkJbWFzLT5ub2RlID0gTUFTX05PTkU7DQo+ ID4gKwkJCXJldHVybiBOVUxMOw0KPiA+ICsJCX0NCj4gPiArCQltYXMtPm5vZGUgPSBNQVNfU1RB UlQ7DQo+ID4gKwkJbWFzLT5pbmRleCA9ICsrbWFzLT5sYXN0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmICh1bmxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHsNCj4gPiArCQkvKiBGaXJzdCBy dW4gb3IgY29udGludWUgKi8NCj4gPiArCQl2b2lkICplbnRyeTsNCj4gPiArDQo+ID4gKwkJaWYg KG1hcy0+aW5kZXggPiBtYXgpDQo+ID4gKwkJCXJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArCQll bnRyeSA9IG1hc193YWxrKG1hcyk7DQo+ID4gKwkJaWYgKGVudHJ5KQ0KPiA+ICsJCQlyZXR1cm4g ZW50cnk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCFtYXNfc2VhcmNoYWJs ZShtYXMpKSkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKwkvKiBSZXRyaWVzIG9u IGRlYWQgbm9kZXMgaGFuZGxlZCBieSBtYXNfbmV4dF9lbnRyeSAqLw0KPiA+ICsJcmV0dXJuIG1h c19uZXh0X2VudHJ5KG1hcywgbWF4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IG1hc19maW5kOiBJZiBtYXMtPm5vZGUgPT0gTUFTX1NUQVJULCBmaW5kIHRoZSBmaXJzdA0KPiAN Cj4gbWFzX2ZpbmRfcmV2DQoNClRoYW5rcy4NCg0KPiANCj4gPiArICogbm9uLU5VTEwgZW50cnkg PD0gbWFzLT5sYXN0Lg0KPiA+ICsgKiBPdGhlcndpc2UsIGZpbmQgdGhlIGZpcnN0IG5vbi1OVUxM IGVudHJ5IDwgbWFzLT5pbmRleA0KPiANCj4gU28gZG9lcyB0aGlzIGxvb2sgT2sgaW4gaHRtbD8g Oy0pDQoNCkknbGwgY2hlY2sgYW5kIGZpeCB0aGlzLg0KDQo+IA0KPiA+ICsgKiBAbWFzOiBUaGUg bWFwbGUgc3RhdGUNCj4gPiArICogQG1pbjogVGhlIG1pbmltdW0gdmFsdWUgdG8gY2hlY2suDQo+ ID4gKyAqDQo+ID4gKyAqIE11c3QgaG9sZCByY3VfcmVhZF9sb2NrIG9yIHRoZSB3cml0ZSBsb2Nr Lg0KPiA+ICsgKiBJZiBhbiBlbnRyeSBleGlzdHMsIGxhc3QgYW5kIGluZGV4IGFyZSB1cGRhdGVk IGFjY29yZGluZ2x5Lg0KPiA+ICsgKiBNYXkgc2V0IEBtYXMtPm5vZGUgdG8gTUFTX05PTkUuDQo+ ID4gKyAqDQo+ID4gKyAqIFJldHVybjogVGhlIGVudHJ5IG9yICVOVUxMLg0KPiA+ICsgKi92b2lk ICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKQ0K PiA+ICt7DQo+ID4gKwlpZiAodW5saWtlbHkobWFzX2lzX3BhdXNlZChtYXMpKSkgew0KPiA+ICsJ CWlmICh1bmxpa2VseShtYXMtPmxhc3QgPT0gVUxPTkdfTUFYKSkgew0KPiA+ICsJCQltYXMtPm5v ZGUgPSBNQVNfTk9ORTsNCj4gPiArCQkJcmV0dXJuIE5VTEw7DQo+ID4gKwkJfQ0KPiA+ICsJCW1h cy0+bm9kZSA9IE1BU19TVEFSVDsNCj4gPiArCQltYXMtPmxhc3QgPSAtLW1hcy0+aW5kZXg7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KG1hc19pc19zdGFydChtYXMpKSkgew0K PiA+ICsJCS8qIEZpcnN0IHJ1biBvciBjb250aW51ZSAqLw0KPiA+ICsJCXZvaWQgKmVudHJ5Ow0K PiA+ICsNCj4gPiArCQlpZiAobWFzLT5pbmRleCA8IG1pbikNCj4gPiArCQkJcmV0dXJuIE5VTEw7 DQo+ID4gKw0KPiA+ICsJCWVudHJ5ID0gbWFzX3dhbGsobWFzKTsNCj4gPiArCQlpZiAoZW50cnkp DQo+ID4gKwkJCXJldHVybiBlbnRyeTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAodW5saWtl bHkoIW1hc19zZWFyY2hhYmxlKG1hcykpKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsNCj4g PiArCS8qIFJldHJpZXMgb24gZGVhZCBub2RlcyBoYW5kbGVkIGJ5IG1hc19uZXh0X2VudHJ5ICov DQo+ID4gKwlyZXR1cm4gbWFzX3ByZXZfZW50cnkobWFzLCBtaW4pOw0KPiA+ICt9DQo+ID4gK0VY UE9SVF9TWU1CT0xfR1BMKG1hc19maW5kKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBtYXNf ZXJhc2UoKSAtIEZpbmQgdGhlIHJhbmdlIGluIHdoaWNoIGluZGV4IHJlc2lkZXMgYW5kIGVyYXNl IHRoZSBlbnRpcmUNCj4gPiArICogcmFuZ2UuDQo+ID4gKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0 ZQ0KPiA+ICsgKg0KPiA+ICsgKiBNdXN0IGhvbGQgdGhlIHdyaXRlIGxvY2suDQo+ID4gKyAqIFNl YXJjaGVzIGZvciBAbWFzLT5pbmRleCwgc2V0cyBAbWFzLT5pbmRleCBhbmQgQG1hcy0+bGFzdCB0 byB0aGUgcmFuZ2UgYW5kDQo+ID4gKyAqIGVyYXNlcyB0aGF0IHJhbmdlLg0KPiA+ICsgKg0KPiA+ ICsgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQsIEBtYXMtPmluZGV4IGFuZCBA bWFzLT5sYXN0IGFyZSB1cGRhdGVkLg0KPiANCj4gdGhlIGVudHJ5IHRoYXQgd2FzIGVyYXNlZCBv ciAlTlVMTD8NCg0KVGhhbmtzLCB5ZXMuDQoNCj4gDQo+ID4gKyAqLw0KPiA+ICt2b2lkICptYXNf ZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpDQo+ID4gK3sNCj4gPiArCXZvaWQgKmVudHJ5Ow0K PiA+ICsJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpOw0KPiA+ICsNCj4gPiArCWlmICht YXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkNCj4gPiArCQltYXMtPm5vZGUg PSBNQVNfU1RBUlQ7DQo+ID4gKw0KPiA+ICsJLyogUmV0cnkgdW5uZWNlc3Nhcnkgd2hlbiBob2xk aW5nIHRoZSB3cml0ZSBsb2NrLiAqLw0KPiA+ICsJZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMp Ow0KPiA+ICsJaWYgKCFlbnRyeSkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gK3dy aXRlX3JldHJ5Og0KPiA+ICsJLyogTXVzdCByZXNldCB0byBlbnN1cmUgc3Bhbm5pbmcgd3JpdGVz IG9mIGxhc3Qgc2xvdCBhcmUgZGV0ZWN0ZWQgKi8NCj4gPiArCW1hc19yZXNldChtYXMpOw0KPiA+ ICsJbWFzX3dyX3N0b3JlX3NldHVwKCZ3cl9tYXMpOw0KPiA+ICsJbWFzX3dyX3N0b3JlX2VudHJ5 KCZ3cl9tYXMpOw0KPiA+ICsJaWYgKG1hc19ub21lbShtYXMsIEdGUF9LRVJORUwpKQ0KPiA+ICsJ CWdvdG8gd3JpdGVfcmV0cnk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVudHJ5Ow0KPiA+ICt9DQo+ ID4gK0VYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7DQo+ID4gKw0KPiA+ICsvKg0KPiANCj4g a2VybmVsLWRvYz8NCg0KVGhlcmUgYXJlIG5vIGV4dGVybmFsIHVzZXJzIHNvIEkgd2Fzbid0IGdv aW5nIHRvLCBidXQgaXQgd29uJ3QgaHVydC4gIEkNCm1lYW4sIGl0IGNvdWxkIGJlIHVzZWQgYXMg YSB3aWRnZXQgdG8gYWxsb2NhdGUgbm9kZXMgaWYgc29tZW9uZSBpcw0KYnJhdmUuDQoNCj4gDQo+ ID4gKyAqIG1hc19ub21lbSgpIC0gKiBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2Nh dGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb24NCj4gDQo+ICAgICAgICAgICAgICAgICAgICBeIG5v dCBuZWVkZWQuDQo+ID4gKyAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMs IHRoZW4gZnJlZSB0aGVtLg0KPiANCj4gICAgICAgICAgICAgICAgICBeIHBlcmlvZD8NCj4gDQo+ ID4gKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZQ0KPiA+ICsgKiBAZ2ZwOiBUaGUgR0ZQX0ZBTEdT IHRvIHVzZSBmb3IgYWxsb2NhdGlvbnMNCj4gDQo+IFJldHVybjo/DQoNClRoYW5rcywgaXQgdG90 YWxseSBkb2VzIHRvbyA6KQ0KDQo+IA0KPiA+ICsgKi8NCj4gPiArYm9vbCBtYXNfbm9tZW0oc3Ry dWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcCkNCj4gPiArCV9fbXVzdF9ob2xkKG1hcy0+dHJl ZS0+bG9jaykNCj4gPiArew0KPiA+ICsJaWYgKGxpa2VseShtYXMtPm5vZGUgIT0gTUFfRVJST1Io LUVOT01FTSkpKSB7DQo+ID4gKwkJbWFzX2Rlc3Ryb3kobWFzKTsNCj4gPiArCQlyZXR1cm4gZmFs c2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdm cCkgJiYgIW10X2V4dGVybmFsX2xvY2sobWFzLT50cmVlKSkgew0KPiA+ICsJCW10cmVlX3VubG9j ayhtYXMtPnRyZWUpOw0KPiA+ICsJCW1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7DQo+ID4gKwkJ bXRyZWVfbG9jayhtYXMtPnRyZWUpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQltYXNfYWxsb2Nf bm9kZXMobWFzLCBnZnApOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghbWFzX2FsbG9jYXRl ZChtYXMpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwltYXMtPm5vZGUgPSBN QVNfU1RBUlQ7DQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBf X2luaXQgbWFwbGVfdHJlZV9pbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArCW1hcGxlX25vZGVfY2Fj aGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibWFwbGVfbm9kZSIsDQo+ID4gKwkJCXNpemVvZihzdHJ1 Y3QgbWFwbGVfbm9kZSksIHNpemVvZihzdHJ1Y3QgbWFwbGVfbm9kZSksDQo+ID4gKwkJCVNMQUJf UEFOSUMsIE5VTEwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogbXRyZWVfbG9h ZCgpIC0gTG9hZCBhIHZhbHVlIHN0b3JlZCBpbiBhIG1hcGxlIHRyZWUNCj4gPiArICogQG10OiBU aGUgbWFwbGUgdHJlZQ0KPiA+ICsgKiBAaW5kZXg6IFRoZSBpbmRleCB0byBsb2FkDQo+ID4gKyAq DQo+ID4gKyAqIFJldHVybjogdGhlIGVudHJ5IG9mICVOVUxMDQo+IA0KPiAgICAgICAgICAgICAg ICAgICAgICAgIF4gb3I/DQoNClRoYW5rcy4NCg0KPiA+ICsgKi8NCj4gPiArdm9pZCAqbXRyZWVf bG9hZChzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpDQo+ID4gK3sN Cj4gPiArCU1BX1NUQVRFKG1hcywgbXQsIGluZGV4LCBpbmRleCk7DQo+ID4gKwl2b2lkICplbnRy eTsNCj4gPiArDQo+ID4gKwl0cmFjZV9tYV9yZWFkKF9fZnVuY19fLCAmbWFzKTsNCj4gPiArCXJj dV9yZWFkX2xvY2soKTsNCj4gPiArcmV0cnk6DQo+ID4gKwllbnRyeSA9IG1hc19zdGFydCgmbWFz KTsNCj4gPiArCWlmICh1bmxpa2VseShtYXNfaXNfbm9uZSgmbWFzKSkpDQo+ID4gKwkJZ290byB1 bmxvY2s7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KG1hc19pc19wdHIoJm1hcykpKSB7DQo+ ID4gKwkJaWYgKGluZGV4KQ0KPiA+ICsJCQllbnRyeSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJCWdv dG8gdW5sb2NrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVudHJ5ID0gbXRyZWVfbG9va3VwX3dh bGsoJm1hcyk7DQo+ID4gKwlpZiAoIWVudHJ5ICYmIHVubGlrZWx5KG1hc19pc19zdGFydCgmbWFz KSkpDQo+ID4gKwkJZ290byByZXRyeTsNCj4gPiArdW5sb2NrOg0KPiA+ICsJcmN1X3JlYWRfdW5s b2NrKCk7DQo+ID4gKwlpZiAoeGFfaXNfemVybyhlbnRyeSkpDQo+ID4gKwkJcmV0dXJuIE5VTEw7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVudHJ5Ow0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0wo bXRyZWVfbG9hZCk7DQo+IA0KPiAtLSANCj4gU2luY2VyZWx5IHlvdXJzLA0KPiBNaWtlLg==