From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C4D11A057C; Thu, 26 Mar 2020 10:56:45 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 092DA1C028; Thu, 26 Mar 2020 10:56:45 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 5F030F12 for ; Thu, 26 Mar 2020 10:56:43 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02Q9pTod012462; Thu, 26 Mar 2020 02:56:41 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=jXR0r8gwwjo8aCK1BupVeXHzIt6gVZv31vz6aC1aV1U=; b=VGAuLPQKuKnq7hwzrBZIIZwQT8FYbamGywSb/bGgJv35KVAan+G1PEBzVjt/N1JJNZhc KmPhuVHY2ZvitRgi9oG24eyinTcB5YQ/dQQig76UOasbr7S/6O+oE/NI0GA8ujZ4pQ40 3xt68+vwPh0Raq/cXmERHRcsL3Rtc3LAAWNJ3iMvCfPUegiNRgmFJyA4kzNL5pQpFkgj 9c8UDg0kyhqkUt4HHxG2e8wwlFqMoQS63KrD2+/Rv7SWZdWLkinuWNuzVR0P7cxdsacj YjRdMjhaXJuF1MA/t1HxqZ1s5Wb07g5A0OMKbswS86JRppWDDk6sR21kYff4v8Wuk0jm WA== Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 300bpcu7b9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 26 Mar 2020 02:56:40 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 26 Mar 2020 02:56:38 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 26 Mar 2020 02:56:37 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.41) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 26 Mar 2020 02:56:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=asCW3Kvnh6t9niSNPm1XIgPuTPtQe874C78muDxaYXiadxApGWf3zZTuT+rxxk+8GqAWD+/b0bA8yF1YlksJKGPT2lV/vlhWYMrG5jfvrJoPOTo0/mXz9FJRi49VEj4y+u1pnioeejJ5DtQ9X4294jFkV8M84Wop7ZdX03lOyI1ZsZb9gI6WdM4MpcAWvX1Q4n2jVIzPw05cVHfTTMI+QWmvsswJ1Iw1uGtg316pSDSDNZpjdi99pzVroJ5P6gEzxrXBDAsLlw7gvjIE0+XpxRAwD/kT62DzrCMwjz4xfidczOa1EPxhHFyL7+da+SXNq8qtwK24cVBUlDdCa7es5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jXR0r8gwwjo8aCK1BupVeXHzIt6gVZv31vz6aC1aV1U=; b=CF1emHN8hV5gNWVzOgoS94V0ybmQ6gYz2JSEs7JUU8b5xJV8UfpHzw8JZ1MdC3UuJZ9BgtPMmOmpkSRJWL3UCyVrnbbKkMXL4MAokOMLDEZEp4h/xYUxMKTWxUaeC+UCg9hH+vqCAoOfOMRgrwdwp/kwM31dxqgFNQ3tIP7MrHvFLup7DyqCSeon9Baj/7howD0ETaQ2kt+ZSPDP/IXfdDfGs2YXVqksrWsEXnHbK2MOX/mix0Tyv9yP545YZ63rh1qBUxbHcq7alUXM1ISYBoXFnxCiIsNALbeinpkFRsk/BaKvFL6DIimKp2Iyt9b3ox7j8XrbQvon2j1PEhQvVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jXR0r8gwwjo8aCK1BupVeXHzIt6gVZv31vz6aC1aV1U=; b=OrLCDtXzzj/PYRY+jsVzs7BpSi92ST3fKrMBfCswJntO2qxT396eccGE7ng3WHkawqgutgX2PSEEn8SdkuADvNHI1eHFRjBEY8Tb6Yv2vcTX+bCcdAyhwFXrlbnpLBfvdIkA3K9xLCQl5Qyzyi5FjJs+2pID/mGn//GjfLozMFk= Received: from CY4PR1801MB1863.namprd18.prod.outlook.com (2603:10b6:910:7b::32) by CY4PR1801MB1832.namprd18.prod.outlook.com (2603:10b6:910:79::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.20; Thu, 26 Mar 2020 09:56:36 +0000 Received: from CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383]) by CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383%7]) with mapi id 15.20.2835.025; Thu, 26 Mar 2020 09:56:36 +0000 From: Pavan Nikhilesh Bhagavatula To: Ray Kinsella , Jerin Jacob Kollanukkaran , Nithin Kumar Dabilpuram CC: "dev@dpdk.org" , "thomas@monjalon.net" , "david.marchand@redhat.com" , "mattias.ronnblom@ericsson.com" , Kiran Kumar Kokkilagadda Thread-Topic: [EXT] Re: [dpdk-dev] [PATCH v1 20/26] node: ipv4 lookup for x86 Thread-Index: AQHV/W1QZK9hb7vUJEq1M59lDqobbqhP2A4AgAAbR1CAAB4TAIAABcvwgAEd0YCABjsZsIAAaMqAgALVNEA= Date: Thu, 26 Mar 2020 09:56:36 +0000 Message-ID: References: <20200318213551.3489504-1-jerinj@marvell.com> <20200318213551.3489504-21-jerinj@marvell.com> <02c4c25a-83ba-dac5-20e6-7b140cbcb4f1@ashroe.eu> <5a99e696-3853-5782-0a4c-0debcc74faa8@ashroe.eu> <20a3cb35-d57b-4799-f084-919f3f55da6f@ashroe.eu> <7a6842d9-43fd-1746-113f-887d6afb16e5@ashroe.eu> In-Reply-To: <7a6842d9-43fd-1746-113f-887d6afb16e5@ashroe.eu> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [34.98.205.117] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1cfe18fc-bae0-42ec-fde9-08d7d16bf8d8 x-ms-traffictypediagnostic: CY4PR1801MB1832: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0354B4BED2 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(376002)(136003)(396003)(366004)(346002)(478600001)(4326008)(186003)(71200400001)(81166006)(86362001)(30864003)(966005)(8676002)(81156014)(8936002)(52536014)(6636002)(5660300002)(33656002)(26005)(107886003)(9686003)(55016002)(66446008)(76116006)(64756008)(7696005)(53546011)(6506007)(66946007)(2906002)(316002)(66556008)(54906003)(110136005)(66476007)(10126625002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR1801MB1832; H:CY4PR1801MB1863.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4CWjqWJOCNBCsWyh2aOFH8lqAu4/bF+7pHdIbUp1QVbxzQa24sT6hylAtVhIVS9/A8iublR+XFryK1ry/jRP3lBYC+/kUw6Dk9ObfekYo0odVMuCHwAUqbDvrK3Bxxti4Pblg7qKh7EUtFFmcRfXOo2pwa3aCpmF52Gtz1jZo0yLz+oOexCa+3y9D2Vr+RzjJOwRXKVCTPlNdJvM/kx89RJOht1cBTuGb6wMYFvzyPFP3b473cQ3LDoZ2pChtb/Psp9hcMWayVV+JT9nyCAKiQJo3MZdwjvwznMfDDNOhMW6pz0YQ3jmJuEjEOspCnPfHaHVz9u83HWJpFLJLNz+fq9qnZqClL7JJLFhVDxYa30LcQ8STi2GhZqVOnLB3CwpvQ6gI32+fkO2wsK38oraIexeUbHeImXIjPcu1anrhQq8/9rMcDCdMRsIsCfN2tadKQbS59SxBgTFQTl3nBVbBsPwAFf6WmzqqqNOZVFTyV+mPbsNZEwJe90yEBj3l2VfVNPgoL/5Dl5/bYIDmMJGjapihZV2O4w531V86nOTC266+GxiZfokBBt9CpI4YVp1LgIkeBN/QsvBTcs/4OADXQ== x-ms-exchange-antispam-messagedata: h6u8AdXY9YwUwKW9iIp4xpdOWgG8dMp3wBuCQYhdZQKXDbPpryV8OJGXypJWhJN5xRKCstIM537PXK+mlT2CiQxQWJDa4sFwOHnU1U/Pcwchc7N83s5ALjNANp3GRlCHSaaA/G+ft8oDGG5zM4Jq1g== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 1cfe18fc-bae0-42ec-fde9-08d7d16bf8d8 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2020 09:56:36.1271 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: M2EPIdCWqmJ7OYslfRag1GE3eaKEwhBsnZGiMnyX4+Vo/4yjcasKjsu4mHaAS2zsuhI6kJapR/NyseFJb5Onco7rr1fhNJkgUzeQolbwfs0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1801MB1832 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-26_01:2020-03-24, 2020-03-26 signatures=0 Subject: Re: [dpdk-dev] [EXT] Re: [PATCH v1 20/26] node: ipv4 lookup for x86 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQo+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj5Gcm9tOiBSYXkgS2luc2VsbGEgPG1kckBh c2hyb2UuZXU+DQo+U2VudDogVHVlc2RheSwgTWFyY2ggMjQsIDIwMjAgODowOCBQTQ0KPlRvOiBQ YXZhbiBOaWtoaWxlc2ggQmhhZ2F2YXR1bGEgPHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNvbT47IEpl cmluDQo+SmFjb2IgS29sbGFudWtrYXJhbiA8amVyaW5qQG1hcnZlbGwuY29tPjsgTml0aGluIEt1 bWFyIERhYmlscHVyYW0NCj48bmRhYmlscHVyYW1AbWFydmVsbC5jb20+DQo+Q2M6IGRldkBkcGRr Lm9yZzsgdGhvbWFzQG1vbmphbG9uLm5ldDsNCj5kYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tOyBt YXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbTsgS2lyYW4NCj5LdW1hciBLb2traWxhZ2FkZGEg PGtpcmFua3VtYXJrQG1hcnZlbGwuY29tPg0KPlN1YmplY3Q6IFJlOiBbRVhUXSBSZTogW2RwZGst ZGV2XSBbUEFUQ0ggdjEgMjAvMjZdIG5vZGU6IGlwdjQgbG9va3VwDQo+Zm9yIHg4Ng0KPg0KPg0K Pg0KPk9uIDI0LzAzLzIwMjAgMDk6NDAsIFBhdmFuIE5pa2hpbGVzaCBCaGFnYXZhdHVsYSB3cm90 ZToNCj4+IEhpIFJheSwNCj4+DQo+PiBJIGhhdmUgdHJpZWQgdG8gYXZvaWQgaGFuZCB1bnJvbGxp bmcgbG9vcHMgYW5kIGZvdW5kIHRoZSBmb2xsb3dpbmcNCj5vYnNlcnZhdGlvbnMuDQo+Pg0KPj4g MS4gQWx0aG91Z2ggaXQgZGVjcmVhc2VzIExPQyBpdCBhbHNvIHRha2VzIGF3YXkgcmVhZGFiaWxp dHkgdG9vLg0KPj4gCUV4YW1wbGU6DQo+PiAJQXZvaWRpbmcgdW5yb2xsZWQgY29kZSBiZWxvdw0K PltTTklQXQ0KPj4gCVdoaWNoIGlzIGtpbmQgb2YgdW5yZWFkYWJsZS4NCj4NCj5JIGFtIGNvbmZ1 c2VkIC0gaXNuJ3QgaXQgZXhhY3RseSB0aGUgc2FtZSBjb2RlPw0KPllvdSBzdGlsbCBoYXZlbid0 IGNvbXBsZXRlbHkgdW5yb2xsZWQgdGhlIGxvb3AgZWl0aGVyPw0KPg0KPkkgZG9uJ3Qga25vdyBo b3cgb25lIGlzIHJlYWRhYmxlIGFuZCB0aGUgb3RoZXIgaXMgbm90Lg0KDQpJIGd1ZXNzIGl04oCZ cyBhIG1hdHRlciBvZiBwZXJzb25hbCBwcmVmZXJlbmNlLg0KDQo+DQo+Pg0KPj4gMi4gTm90IGFs bCBjb21waWxlcnMgYXJlIG1hZGUgZXF1YWwuIEkgZm91bmQgdGhhdCBtb3N0IG9mIHRoZQ0KPmNv bXBpbGVycyBkb27igJl0DQo+PiAgICAgIFVucm9sbCB0aGUgbG9vcCBhYm92ZSBldmVuIHdoZW4g Y29tcGlsZWQgd2l0aCBgLWZ1bnJvbGwtYWxsLWxvb3BzYC4NCj4+ICAgICAgSSBoYXZlIGNoZWNr ZWQgd2l0aCBmb2xsb3dpbmcgY29tcGlsZXJzOg0KPj4gCUdDQyA5LjIuMA0KPj4gCUNsYW5nIDku MC4xDQo+PiAJQWFyY2g2NCBHQ0MgNy4zLjANCj4+IAlBYXJjaDY0IEdDQyA5LjIuMA0KPg0KPkNv bXBpbGVycyBoYXZlIGJlZW4gdW5yb2xsaW5nIGZpeGVkIGxlbmd0aCBsb29wcyBmb3IgYXMgbG9u ZyB0aW1lIC0gdGhpcw0KPmlzbid0IG5ldyB0ZWNobm9sb2d5Lg0KPg0KDQpJbiB0aGVvcnksIEkg YWdyZWUgd2l0aCB5b3VyIHZpZXcsIGJ1dCBldmVuIHRoZSBsYXRlc3QgY29tcGlsZXIgaXMgbm90 IGRvaW5nIGEgZGVjZW50IA0Kam9iIG9uIHVucm9sbGluZyB0aGUgbG9vcC4gDQpXZSBjYW4gcmV2 aXNpdCB0aGlzIHNjaGVtZSwgaWYgYW5kIHdoZW4gY29tcGlsZXIgc21hcnQgZW5vdWdoIHRvIGRv IHRoaXMgYXMganVzdCB1bnJvbGxpbmcgDQp0aGUgbG9vcHMgaXMgbm90IGdvb2QgZW5vdWdoLiBJ dCBoYXMgdG8gZG8gaXQgYmV0dGVyIHRoYW4gaGFuZCB1bnJvbGxpbmcuDQpGb3IgZXhhbXBsZSBv biBhcm02NCBHQ0MgZG9lc27igJl0IG1lcmdlIGxvYWQvc3RvcmVzIHRvIGxvYWQvc3RvcmUgcGFp cnMgd2hlbiB1bnJvbGxpbmcuDQooYm90aCBsZHIvc3RyIGFuZCBsZHAvc3RwIGxhdGVuY3kgaXMg M2N5YyBhbmQgZWZmZWN0aXZlbHkgbGRwIGNvc3QgaXMgaGFsdmVkKS4NCg0KRXZlbiBvbiB4ODYg d2Ugc2VlIGV4dHJhIH4xMDAgY3ljbGVzIGFzIG1lbnRpb25lZCBpbiBbMV0uDQoNCj5JZiB0aGUg Y29tcGlsZXIgaXNuJ3QgdW5yb2xsaW5nIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIHRoYXQgbWFr ZXMgaXQNCj50aGluayBpdCBpcyBhIGJhZCBpZGVhLg0KPkhhbmQgdW5yb2xsaW5nIHRoZSBsb29w IGlzbid0IHRoZSBzb2x1dGlvbiwgdW5kZXJzdGFuZGluZyB3aGF0IHRoZQ0KPmNvbXBpbGVyIGlz IGRvaW5nIGlzIGEgYmV0dGVyIGlkZWEuDQo+DQo+SW4gZnJvbnQgb2YgeW91ciBmb3IgbG9vcCBp bnNlcnQsIHRvIGluZGljYXRlIHRvIHRoZSBjb21waWxlciB3aGF0IHlvdQ0KPndhbnQgdG8gZG8u DQo+I3ByYWdtYSB1bnJvbGwgQlVGX1BFUl9MT09QDQoNCkNhbiB5b3UgY2hlY2sgd2hpY2ggdmVy c2lvbnMgb2YgY29tcGlsZXIgd2hpY2ggdGhpcyBwcmFnbWEgd29ya3Mgb24/DQoNCk1vc3Qgb2Yg dGhlIGdjYyB2ZXJzaW9ucyB0aGF0IEkgaGF2ZSB0cmllZCBqdXN0IHNwaXQgb3V0IHRoZSBmb2xs b3dpbmcgd2FybmluZy4NCi4uL2xpYi9saWJydGVfbm9kZS9pcDRfcmV3cml0ZS5jOjU5OiB3YXJu aW5nOiBpZ25vcmluZyAjcHJhZ21hIHVucm9sbCBCVUZfUEVSX0xPT1AgWy1XdW5rbm93bi1wcmFn bWFzXQ0KICAgNTkgfCAgI3ByYWdtYSB1bnJvbGwgQlVGX1BFUl9MT09QDQoNCg0KPg0KPldpdGgg Y2xhbmcgeW91IGNhbiBhc2sgaXQgd2h5IGl0IGlzIG5vdCB1bnJvbGxpbmcgdGhlIGxvb3Agd2l0 aCB0aGUNCj5mb2xsb3dpbmcgc3dpdGNoZXMuDQo+KG91dHB1dCBpcyB2ZXJib3NlLCBidXQgdGhl IHJlYXNvbiBpcyBpbiB0aGVyZSkuDQo+DQo+LVJwYXNzPWxvb3AtdW5yb2xsIC1ScGFzcy1taXNz ZWQ9bG9vcC11bnJvbGwNCj4NCg0KLi4vbGliL2xpYnJ0ZV9ub2RlL2lwNF9yZXdyaXRlLmM6NTc6 MjogcmVtYXJrOiB1bnJvbGxlZCBsb29wIGJ5IGEgZmFjdG9yIG9mIDQgd2l0aCBydW4tdGltZSB0 cmlwIGNvdW50IFstUnBhc3M9bG9vcC11bnJvbGxdDQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBu Yl9vYmpzOyBpKyspIHsNCiAgICAgICAgXg0KDQo+Pg0KPj4gMy4gUGVyZm9ybWFuY2Ugd2lzZSBJ IHNlZSBhIGxvdCBvZiBkZWdyYWRhdGlvbiBvbiBvdXIgcGxhdGZvcm0gYXQgbGVhc3QNCj4xMyUu DQo+DQo+SXMgdGhlIGxvb3AgYmVpbmcgdW5yb2xsZWQ/DQo+DQoNClllcywgaW4gYSBzdWJvcHRp bWFsIHdheS4gaHR0cHM6Ly9wYXN0ZWJpbi5jb20vbmtYdnpNaVcNCg0Kd2UgZGVjaWRlIHRvIHN0 aWNrIHdpdGggaGFuZCB1bnJvbGxpbmcgYmFzZWQgb24gdGhlIHRlc3QgcmVzdWx0IGluc3RlYWQg b2YgZGVwZW5kaW5nIG9uIGNvbXBpbGVycyBtZXJjeSB0byBkbyBpdCBmb3IgdXNbMl0uDQppZiB5 b3UgdGhpbmssIGl0IGNhbiBiZSBpbXByb3ZlZCB0aGVuIHBsZWFzZSBzdWJtaXQgYSBwYXRjaC4N Cg0KWzJdaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9ODg3NjAN Cg0KPj4gICAgIE9uIElBIHdpdGggYSBCcm9hZHdlbGwoWGVvbiBFNS0yNjkwKSBhbmQgaTQwZSB0 aGUgcGVyZm9ybWFuY2UNCj5yZW1haW4gc2FtZSB3LnIudCBSeC9UeCBzaW5jZSB0aGUNCj4+ICAg ICBob3RzcG90IGlzIGluIHRoZSBUeCBwYXRoIG9mIHRoZSBkcml2ZXIgd2hpY2ggbGltaXRzIHRo ZSBwZXIgY29yZQ0KPmNhcGFiaWxpdHkuDQo+PiAgICAgQnV0IHRoZSBwZXJmb3JtYW5jZSBkaWZm ZXJlbmNlIGluIG51bWJlciBvZiBjeWNsZXMgcGVyIG5vZGUgY2FuDQo+YmUgc2VlbiBiZWxvdzoN Cj4+DQoNClsxXQ0KDQo+PiAJSGFuZCB1bnJvbGxpbmc6DQo+PiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstDQo+LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKw0KPj4g fE5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Y2FsbHMgICAgICAgICAgfG9ianMgICAg ICAgICAgIHxyZWFsbG9jX2NvdW50ICB8b2Jqcy9jYWxsDQo+fG9ianMvc2VjKDEwRTYpIHxjeWNs ZXMvY2FsbHwNCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0NCj4tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+PiB8aXA0X2xvb2t1cCAgICAgICAgICAgICAg ICAgICAgIHw3NzY1OTE4ICAgICAgICB8MjQ4NTA5MzQ0ICAgICAgfDEgICAgICAgICAgICAgIHwz Mi4wMDANCj58MjcuNzI1NDA4ICAgICAgfDc3OS4wMDAwICAgfA0KPj4gfGlwNF9yZXdyaXRlICAg ICAgICAgICAgICAgICAgICB8Nzc2NTkyNSAgICAgICAgfDI0ODUwOTU2OCAgICAgIHwxICAgICAg ICAgICAgICB8MzIuMDAwDQo+fDI3LjcyNTQwOCAgICAgIHw0MjUuMDAwMCAgIHwNCj4+IHxldGhk ZXZfdHgtMSAgICAgICAgICAgICAgICAgICAgfDc3NjU5MjcgICAgICAgIHwyMDQwNTYyMjMgICAg ICB8MSAgICAgICAgICAgICAgfDI2LjAwMA0KPnwyMi43NjI3MjAgICAgICB8NTk3LjAwMDAgICB8 DQo+PiB8cGt0X2Ryb3AgICAgICAgICAgICAgICAgICAgICAgIHwxMzg5MTcwICAgICAgICB8NDQ0 NTM0MDkgICAgICAgfDEgICAgICAgICAgICAgIHwzMi4wMDANCj58NC45NjI2ODggICAgICAgfDI5 OC4wMDAwICAgfA0KPj4gfGV0aGRldl9yeC0wLTAgICAgICAgICAgICAgICAgICB8NjM2MDQxMTEg ICAgICAgfDI0ODUwOTc5MiAgICAgIHwyICAgICAgICAgICAgICB8MzIuMDAwDQo+fDI3LjcyNTQw OCAgICAgIHw5ODIuMDAwMCAgIHwNCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0NCj4tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rDQo+Pg0KPj4gCVcvbyB1bnJv bGxpbmc6DQo+Pg0KPj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLQ0KPi0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsNCj4+IHxOb2RlICAgICAgICAgICAgICAgICAg ICAgICAgICAgfGNhbGxzICAgICAgICAgIHxvYmpzICAgICAgICAgICB8cmVhbGxvY19jb3VudCAg fG9ianMvY2FsbA0KPnxvYmpzL3NlYygxMEU2KSB8Y3ljbGVzL2NhbGx8DQo+PiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLSstDQo+LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKw0KPj4gfGlwNF9sb29rdXAgICAgICAgICAgICAgICAgICAgICB8MTg4NjQ2NDAgICAgICAg fDYwMzY2ODQ0OCAgICAgIHwxICAgICAgICAgICAgICB8MzIuMDAwDQo+fDI2LjA1MTMyOCAgICAg IHw4MjguMDAwMCAgIHwNCj4+IHxpcDRfcmV3cml0ZSAgICAgICAgICAgICAgICAgICAgfDE4ODY0 NjQ2ICAgICAgIHw2MDM2Njg2NDAgICAgICB8MSAgICAgICAgICAgICAgfDMyLjAwMA0KPnwyNi4w NTEzMjggICAgICB8NTM0LjAwMDAgICB8DQo+PiB8ZXRoZGV2X3R4LTEgICAgICAgICAgICAgICAg ICAgIHwxODg2NDY0OCAgICAgICB8NTI3ODc0MTc1ICAgICAgfDEgICAgICAgICAgICAgIHwyNy4w MDANCj58MjIuNzgwMjU2ICAgICAgfDYzMy4wMDAwICAgfA0KPj4gfHBrdF9kcm9wICAgICAgICAg ICAgICAgICAgICAgICB8MjM2ODU4MCAgICAgICAgfDc1Nzk0NTI5ICAgICAgIHwxICAgICAgICAg ICAgICB8MzIuMDAwDQo+fDMuMjcxMDcyICAgICAgIHwyODYuMDAwMCAgIHwNCj4+IHxldGhkZXZf cngtMC0wICAgICAgICAgICAgICAgICAgfDI4MjA1ODIyNiAgICAgIHw2MDM2Njg4NjQgICAgICB8 MiAgICAgICAgICAgICAgfDMyLjAwMA0KPnwyNi4wNTEzMjggICAgICB8OTk0LjAwMDAgICB8DQo+ PiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstDQo+LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKw0KPj4NCj4+IENvbnNpZGVyaW5nIHRoZSBhYm92ZSBmaW5kaW5ncyB3 ZSB3b3VsZCBsaWtlIHRvIGNvbnRpbnVlIHVucm9sbGluZw0KPnRoZSBsb29wcyBieSBoYW5kLg0K Pj4NCj4+IFJlZ2FyZHMsDQo+PiBQYXZhbi4NCj4+DQo+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4+PiBGcm9tOiBSYXkgS2luc2VsbGEgPG1kckBhc2hyb2UuZXU+DQo+Pj4gU2VudDog RnJpZGF5LCBNYXJjaCAyMCwgMjAyMCAyOjQ0IFBNDQo+Pj4gVG86IFBhdmFuIE5pa2hpbGVzaCBC aGFnYXZhdHVsYSA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPjsNCj5KZXJpbg0KPj4+IEphY29i IEtvbGxhbnVra2FyYW4gPGplcmluakBtYXJ2ZWxsLmNvbT47IE5pdGhpbiBLdW1hcg0KPkRhYmls cHVyYW0NCj4+PiA8bmRhYmlscHVyYW1AbWFydmVsbC5jb20+DQo+Pj4gQ2M6IGRldkBkcGRrLm9y ZzsgdGhvbWFzQG1vbmphbG9uLm5ldDsNCj4+PiBkYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tOyBt YXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbTsNCj5LaXJhbg0KPj4+IEt1bWFyIEtva2tpbGFn YWRkYSA8a2lyYW5rdW1hcmtAbWFydmVsbC5jb20+DQo+Pj4gU3ViamVjdDogUmU6IFtFWFRdIFJl OiBbZHBkay1kZXZdIFtQQVRDSCB2MSAyMC8yNl0gbm9kZTogaXB2NA0KPmxvb2t1cA0KPj4+IGZv ciB4ODYNCj4+Pg0KPj4+DQo+Pj4NCj4+PiBPbiAxOS8wMy8yMDIwIDE2OjEzLCBQYXZhbiBOaWto aWxlc2ggQmhhZ2F2YXR1bGEgd3JvdGU6DQo+Pj4+DQo+Pj4+DQo+Pj4+PiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPj4+Pj4gRnJvbTogUmF5IEtpbnNlbGxhIDxtZHJAYXNocm9lLmV1Pg0K Pj4+Pj4gU2VudDogVGh1cnNkYXksIE1hcmNoIDE5LCAyMDIwIDk6MjEgUE0NCj4+Pj4+IFRvOiBQ YXZhbiBOaWtoaWxlc2ggQmhhZ2F2YXR1bGEgPHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNvbT47DQo+ Pj4gSmVyaW4NCj4+Pj4+IEphY29iIEtvbGxhbnVra2FyYW4gPGplcmluakBtYXJ2ZWxsLmNvbT47 IE5pdGhpbiBLdW1hcg0KPj4+IERhYmlscHVyYW0NCj4+Pj4+IDxuZGFiaWxwdXJhbUBtYXJ2ZWxs LmNvbT4NCj4+Pj4+IENjOiBkZXZAZHBkay5vcmc7IHRob21hc0Btb25qYWxvbi5uZXQ7DQo+Pj4+ PiBkYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tOyBtYXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNv bTsNCj4+PiBLaXJhbg0KPj4+Pj4gS3VtYXIgS29ra2lsYWdhZGRhIDxraXJhbmt1bWFya0BtYXJ2 ZWxsLmNvbT4NCj4+Pj4+IFN1YmplY3Q6IFJlOiBbRVhUXSBSZTogW2RwZGstZGV2XSBbUEFUQ0gg djEgMjAvMjZdIG5vZGU6IGlwdjQNCj4+PiBsb29rdXANCj4+Pj4+IGZvciB4ODYNCj4+Pj4+DQo+ Pj4+Pg0KPj4+Pj4NCj4+Pj4+IE9uIDE5LzAzLzIwMjAgMTQ6MjIsIFBhdmFuIE5pa2hpbGVzaCBC aGFnYXZhdHVsYSB3cm90ZToNCj4+Pj4+Pj4gT24gMTgvMDMvMjAyMCAyMTozNSwgamVyaW5qQG1h cnZlbGwuY29tIHdyb3RlOg0KPj4+Pj4+Pj4gRnJvbTogUGF2YW4gTmlraGlsZXNoIDxwYmhhZ2F2 YXR1bGFAbWFydmVsbC5jb20+DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gQWRkIElQdjQgbG9va3VwIHBy b2Nlc3MgZnVuY3Rpb24gZm9yIGlwNF9sb29rdXANCj4+Pj4+Pj4+IHJ0ZV9ub2RlLiBUaGlzIG5v ZGUgcGVyZm9ybXMgTFBNIGxvb2t1cCB1c2luZyB4ODZfNjQNCj4+Pj4+Pj4+IHZlY3RvciBzdXBw b3J0ZWQgUlRFX0xQTSBBUEkgb24gZXZlcnkgcGFja2V0IHJlY2VpdmVkDQo+Pj4+Pj4+PiBhbmQg Zm9yd2FyZHMgaXQgdG8gYSBuZXh0IG5vZGUgdGhhdCBpcyBpZGVudGlmaWVkIGJ5DQo+Pj4+Pj4+ PiBsb29rdXAgcmVzdWx0Lg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFBhdmFu IE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPg0KPj4+Pj4+Pj4gU2lnbmVkLW9m Zi1ieTogTml0aGluIERhYmlscHVyYW0NCj48bmRhYmlscHVyYW1AbWFydmVsbC5jb20+DQo+Pj4+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBLaXJhbiBLdW1hciBLIDxraXJhbmt1bWFya0BtYXJ2ZWxsLmNv bT4NCj4+Pj4+Pj4+IC0tLQ0KPj4+Pj4+Pj4gIGxpYi9saWJydGVfbm9kZS9pcDRfbG9va3VwLmMg fCAyNDUNCj4+Pj4+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+Pj4+ Pj4+ICAxIGZpbGUgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKykNCj4+Pj4+Pj4+DQo+Pj4+Pj4+ PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ub2RlL2lwNF9sb29rdXAuYw0KPj4+Pj4+PiBiL2xp Yi9saWJydGVfbm9kZS9pcDRfbG9va3VwLmMNCj4+Pj4+Pj4+IGluZGV4IGQ3ZmNkMTE1OC4uYzAw M2U5YzkxIDEwMDY0NA0KPj4+Pj4+Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ub2RlL2lwNF9sb29rdXAu Yw0KPj4+Pj4+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ub2RlL2lwNF9sb29rdXAuYw0KPj4+Pj4+Pj4g QEAgLTI2NCw2ICsyNjQsMjUxIEBAIGlwNF9sb29rdXBfbm9kZV9wcm9jZXNzKHN0cnVjdA0KPj4+ Pj4gcnRlX2dyYXBoDQo+Pj4+Pj4+ICpncmFwaCwgc3RydWN0IHJ0ZV9ub2RlICpub2RlLA0KPj4+ Pj4+Pj4gIAlyZXR1cm4gbmJfb2JqczsNCj4+Pj4+Pj4+ICB9DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4g KyNlbGlmIGRlZmluZWQoUlRFX0FSQ0hfWDg2KQ0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKy8qIFg4 NiBTU0UgKi8NCj4+Pj4+Pj4+ICtzdGF0aWMgdWludDE2X3QNCj4+Pj4+Pj4+ICtpcDRfbG9va3Vw X25vZGVfcHJvY2VzcyhzdHJ1Y3QgcnRlX2dyYXBoICpncmFwaCwgc3RydWN0DQo+Pj4+PiBydGVf bm9kZQ0KPj4+Pj4+PiAqbm9kZSwNCj4+Pj4+Pj4+ICsJCQl2b2lkICoqb2JqcywgdWludDE2X3Qg bmJfb2JqcykNCj4+Pj4+Pj4+ICt7DQo+Pj4+Pj4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZjAs ICptYnVmMSwgKm1idWYyLCAqbWJ1ZjMsDQo+Pj4gKipwa3RzOw0KPj4+Pj4+Pj4gKwlydGVfZWRn ZV90IG5leHQwLCBuZXh0MSwgbmV4dDIsIG5leHQzLCBuZXh0X2luZGV4Ow0KPj4+Pj4+Pj4gKwlz dHJ1Y3QgcnRlX2lwdjRfaGRyICppcHY0X2hkcjsNCj4+Pj4+Pj4+ICsJc3RydWN0IHJ0ZV9ldGhl cl9oZHIgKmV0aF9oZHI7DQo+Pj4+Pj4+PiArCXVpbnQzMl90IGlwMCwgaXAxLCBpcDIsIGlwMzsN Cj4+Pj4+Pj4+ICsJdm9pZCAqKnRvX25leHQsICoqZnJvbTsNCj4+Pj4+Pj4+ICsJdWludDE2X3Qg bGFzdF9zcGVjID0gMDsNCj4+Pj4+Pj4+ICsJdWludDE2X3Qgbl9sZWZ0X2Zyb207DQo+Pj4+Pj4+ PiArCXN0cnVjdCBydGVfbHBtICpscG07DQo+Pj4+Pj4+PiArCXVpbnQxNl90IGhlbGQgPSAwOw0K Pj4+Pj4+Pj4gKwl1aW50MzJfdCBkcm9wX25oOw0KPj4+Pj4+Pj4gKwlydGVfeG1tX3QgZHN0Ow0K Pj4+Pj4+Pj4gKwlfX20xMjhpIGRpcDsgLyogU1NFIHJlZ2lzdGVyICovDQo+Pj4+Pj4+PiArCWlu dCByYywgaTsNCj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJLyogU3BlY3VsYXRpdmUgbmV4dCAqLw0K Pj4+Pj4+Pj4gKwluZXh0X2luZGV4ID0NCj4+PiBSVEVfTk9ERV9JUDRfTE9PS1VQX05FWFRfUkVX UklURTsNCj4+Pj4+Pj4+ICsJLyogRHJvcCBub2RlICovDQo+Pj4+Pj4+PiArCWRyb3BfbmggPQ0K Pj4+Pj4+PiAoKHVpbnQzMl90KVJURV9OT0RFX0lQNF9MT09LVVBfTkVYVF9QS1RfRFJPUCkgPDwg MTY7DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCS8qIEdldCBzb2NrZXQgc3BlY2lmaWMgTFBNIGZy b20gY3R4ICovDQo+Pj4+Pj4+PiArCWxwbSA9ICooKHN0cnVjdCBydGVfbHBtICoqKW5vZGUtPmN0 eCk7DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCXBrdHMgPSAoc3RydWN0IHJ0ZV9tYnVmICoqKW9i anM7DQo+Pj4+Pj4+PiArCWZyb20gPSBvYmpzOw0KPj4+Pj4+Pj4gKwluX2xlZnRfZnJvbSA9IG5i X29ianM7DQo+Pj4+Pj4+DQo+Pj4+Pj4+IEkgZG91YnQgdGhpcyBpbml0aWFsIHByZWZldGNoIG9m IHRoZSBmaXJzdCA0IHBhY2tldHMgaGFzIGFueQ0KPmJlbmVmaXQuDQo+Pj4+Pj4NCj4+Pj4+PiBB Y2sgd2lsbCByZW1vdmUgaW4gdjIgZm9yIHg4Ni4NCj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+Pj4g KwlpZiAobl9sZWZ0X2Zyb20gPj0gNCkgew0KPj4+Pj4+Pj4gKwkJZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgew0KPj4+Pj4+Pj4gKw0KPj4+IAlydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2Qo cGt0c1tpXSwNCj4+Pj4+Pj4+ICsJCQkJCQkgICAgICAgc3RydWN0DQo+Pj4gcnRlX2V0aGVyX2hk cg0KPj4+Pj4+PiAqKSArDQo+Pj4+Pj4+PiArCQkJCSAgICAgIDEpOw0KPj4+Pj4+Pj4gKwkJfQ0K Pj4+Pj4+Pj4gKwl9DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCS8qIEdldCBzdHJlYW0gZm9yIHRo ZSBzcGVjdWxhdGVkIG5leHQgbm9kZSAqLw0KPj4+Pj4+Pj4gKwl0b19uZXh0ID0gcnRlX25vZGVf bmV4dF9zdHJlYW1fZ2V0KGdyYXBoLCBub2RlLA0KPj4+Pj4+PiBuZXh0X2luZGV4LCBuYl9vYmpz KTsNCj4+Pj4+Pj4NCj4+Pj4+Pj4gU3VnZ2VzdCB5b3UgZG9uJ3QgcmV1c2UgdGhlIGhhbmQtdW5y b2xsaW5nIG9wdGltaXphdGlvbiBmcm9tDQo+Pj4gRkQuaW8NCj4+Pj4+Pj4gVlBQLg0KPj4+Pj4+ PiBJIGhhdmUgbmV2ZXIgZm91bmQgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXQgZnJvbSB0aGVtLCBh bmQNCj50aGV5DQo+Pj4+Pj4+IG1ha2UgdGhlIGNvZGUgdW5uZWNlc3NhcmlseSB2ZXJib3NlLg0K Pj4+Pj4+Pg0KPj4+Pj4+DQo+Pj4+Pj4gSG93IHdvdWxkIGJlIHRha2UgdGhlIGJlbmVmaXQgb2Yg cnRlX2xwbV9sb29rdXB4NCB3aXRob3V0DQo+Pj4+PiB1bnJvbGxpbmcgdGhlIGxvb3A/Lg0KPj4+ Pj4+IEFsc28sIGluIGZ1dHVyZSBpZiB3ZSBhcmUgdXNpbmcgcnRlX3JpYiBhbmQgZmliIHdpdGgg YSBDUFUNCj5zdXBwb3J0aW5nDQo+Pj4+PiB3aWRlciBTSU1EIHdlIG1pZ2h0DQo+Pj4+Pj4gbmVl ZCB0byB1bnJvbGwgdGhlbSBmdXJ0aGVyIChBVlgyNTYgQU5EIDUxMiBjdXJyZW50bHkNCj4+Pj4+ IHJ0ZV9scG1fbG9va3VwIHVzZXMgb25seSAxMjhiaXQNCj4+Pj4+PiBzaW5jZSBpdCBpcyBvbmx5 IHVzZXMgU1NFIGV4dGVuc2lvbikuDQo+Pj4+Pg0KPj4+Pj4gTGV0IHRoZSBjb21waWxlciBkbyBp dCBmb3IgeW91LCBidXQgdXNpbmcgYSBjb25zdGFudCB2ZWN0b3IgbGVuZ3RoLg0KPj4+Pj4gZm9y IChpbnQgaT0wOyBpIDwgNDsgKytpKSB7IC4uLiB9DQo+Pj4+Pg0KPj4+Pg0KPj4+PiBPaywgSSB0 aGluayBJIG1pc3VuZGVyc3Rvb2QgdGhlIHByZXZpb3VzIGNvbW1lbnQuDQo+Pj4+IEl0IHdhcyBv bmx5IGZvciB0aGUgcHJlZmV0Y2hlcyBpbiB0aGUgbG9vcCByaWdodD8NCj4+Pg0KPj4+DQo+Pj4g bm8sIGl0IHdhcyBmb3IgYWxsIHRoZSBuZWVkbGVzcyByZXBldGl0aW9uLg0KPj4+IGhhbmQtdW5y b2xsaW5nIGxvb3BzIHNlcnZlIG5vIHB1cnBvc2UgYnV0IHRvIGFkZCB2ZXJib3NpdHkuDQo+Pj4N Cj4+Pj4NCj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+Pj4gKwl3aGlsZSAobl9sZWZ0X2Zyb20gPj0g NCkgew0KPj4+Pj4+Pj4gKwkJLyogUHJlZmV0Y2ggbmV4dC1uZXh0IG1idWZzICovDQo+Pj4+Pj4+ PiArCQlpZiAobGlrZWx5KG5fbGVmdF9mcm9tID49IDExKSkgew0KPj4+Pj4+Pj4gKwkJCXJ0ZV9w cmVmZXRjaDAocGt0c1s4XSk7DQo+Pj4+Pj4+PiArCQkJcnRlX3ByZWZldGNoMChwa3RzWzldKTsN Cj4+Pj4+Pj4+ICsJCQlydGVfcHJlZmV0Y2gwKHBrdHNbMTBdKTsNCj4+Pj4+Pj4+ICsJCQlydGVf cHJlZmV0Y2gwKHBrdHNbMTFdKTsNCj4+Pj4+Pj4+ICsJCX0NCj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+ ICsJCS8qIFByZWZldGNoIG5leHQgbWJ1ZiBkYXRhICovDQo+Pj4+Pj4+PiArCQlpZiAobGlrZWx5 KG5fbGVmdF9mcm9tID49IDcpKSB7DQo+Pj4+Pj4+PiArDQo+Pj4gCXJ0ZV9wcmVmZXRjaDAocnRl X3BrdG1idWZfbXRvZChwa3RzWzRdLA0KPj4+Pj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QNCj4+ PiBydGVfZXRoZXJfaGRyDQo+Pj4+Pj4+ICopICsNCj4+Pj4+Pj4+ICsJCQkJICAgICAgMSk7DQo+ Pj4+Pj4+PiArDQo+Pj4gCXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1idWZfbXRvZChwa3RzWzVdLA0K Pj4+Pj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QNCj4+PiBydGVfZXRoZXJfaGRyDQo+Pj4+Pj4+ ICopICsNCj4+Pj4+Pj4+ICsJCQkJICAgICAgMSk7DQo+Pj4+Pj4+PiArDQo+Pj4gCXJ0ZV9wcmVm ZXRjaDAocnRlX3BrdG1idWZfbXRvZChwa3RzWzZdLA0KPj4+Pj4+Pj4gKwkJCQkJCSAgICAgICBz dHJ1Y3QNCj4+PiBydGVfZXRoZXJfaGRyDQo+Pj4+Pj4+ICopICsNCj4+Pj4+Pj4+ICsJCQkJICAg ICAgMSk7DQo+Pj4+Pj4+PiArDQo+Pj4gCXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1idWZfbXRvZChw a3RzWzddLA0KPj4+Pj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QNCj4+PiBydGVfZXRoZXJfaGRy DQo+Pj4+Pj4+ICopICsNCj4+Pj4+Pj4+ICsJCQkJICAgICAgMSk7DQo+Pj4+Pj4+PiArCQl9DQo+ Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCQltYnVmMCA9IHBrdHNbMF07DQo+Pj4+Pj4+PiArCQltYnVm MSA9IHBrdHNbMV07DQo+Pj4+Pj4+PiArCQltYnVmMiA9IHBrdHNbMl07DQo+Pj4+Pj4+PiArCQlt YnVmMyA9IHBrdHNbM107DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCQlwa3RzICs9IDQ7DQo+Pj4+ Pj4+PiArCQluX2xlZnRfZnJvbSAtPSA0Ow0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJLyogRXh0 cmFjdCBESVAgb2YgbWJ1ZjAgKi8NCj4+Pj4+Pj4+ICsJCWV0aF9oZHIgPSBydGVfcGt0bWJ1Zl9t dG9kKG1idWYwLCBzdHJ1Y3QNCj4+Pj4+Pj4gcnRlX2V0aGVyX2hkciAqKTsNCj4+Pj4+Pj4+ICsJ CWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoZXRoX2hkciArIDEpOw0KPj4+Pj4+ Pj4gKwkJaXAwID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+Pj4+Pj4gKwkJLyogRXh0cmFjdCBj a3N1bSwgdHRsIGFzIGlwdjQgaGRyIGlzIGluIGNhY2hlICovDQo+Pj4+Pj4+PiArCQlydGVfbm9k ZV9tYnVmX3ByaXYxKG1idWYwKS0+Y2tzdW0gPQ0KPj4+IGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gaGRy X2NoZWNrc3VtOw0KPj4+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMCktPnR0bCA9 IGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gdGltZV90b19saXZlOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4g KwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjEgKi8NCj4+Pj4+Pj4+ICsJCWV0aF9oZHIgPSBydGVf cGt0bWJ1Zl9tdG9kKG1idWYxLCBzdHJ1Y3QNCj4+Pj4+Pj4gcnRlX2V0aGVyX2hkciAqKTsNCj4+ Pj4+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoZXRoX2hkciArIDEp Ow0KPj4+Pj4+Pj4gKwkJaXAxID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+Pj4+Pj4gKwkJLyog RXh0cmFjdCBja3N1bSwgdHRsIGFzIGlwdjQgaGRyIGlzIGluIGNhY2hlICovDQo+Pj4+Pj4+PiAr CQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYxKS0+Y2tzdW0gPQ0KPj4+IGlwdjRfaGRyLQ0KPj4+ Pj4+Pj4gaGRyX2NoZWNrc3VtOw0KPj4+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVm MSktPnR0bCA9IGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gdGltZV90b19saXZlOw0KPj4+Pj4+Pj4gKw0K Pj4+Pj4+Pj4gKwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjIgKi8NCj4+Pj4+Pj4+ICsJCWV0aF9o ZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKG1idWYyLCBzdHJ1Y3QNCj4+Pj4+Pj4gcnRlX2V0aGVyX2hk ciAqKTsNCj4+Pj4+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoZXRo X2hkciArIDEpOw0KPj4+Pj4+Pj4gKwkJaXAyID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+Pj4+ Pj4gKwkJLyogRXh0cmFjdCBja3N1bSwgdHRsIGFzIGlwdjQgaGRyIGlzIGluIGNhY2hlICovDQo+ Pj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYyKS0+Y2tzdW0gPQ0KPj4+IGlwdjRf aGRyLQ0KPj4+Pj4+Pj4gaGRyX2NoZWNrc3VtOw0KPj4+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9w cml2MShtYnVmMiktPnR0bCA9IGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gdGltZV90b19saXZlOw0KPj4+ Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjMgKi8NCj4+Pj4+Pj4+ ICsJCWV0aF9oZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKG1idWYzLCBzdHJ1Y3QNCj4+Pj4+Pj4gcnRl X2V0aGVyX2hkciAqKTsNCj4+Pj4+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9o ZHIgKikoZXRoX2hkciArIDEpOw0KPj4+Pj4+Pj4gKwkJaXAzID0gaXB2NF9oZHItPmRzdF9hZGRy Ow0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJLyogUHJlcGFyZSBmb3IgbG9va3VwIHg0ICovDQo+ Pj4+Pj4+PiArCQlkaXAgPSBfbW1fc2V0X2VwaTMyKGlwMywgaXAyLCBpcDEsIGlwMCk7DQo+Pj4+ Pj4+PiArDQo+Pj4+Pj4+PiArCQkvKiBCeXRlIHN3YXAgNCBJUFY0IGFkZHJlc3Nlcy4gKi8NCj4+ Pj4+Pj4+ICsJCWNvbnN0IF9fbTEyOGkgYnN3YXBfbWFzayA9IF9tbV9zZXRfZXBpOCgNCj4+Pj4+ Pj4+ICsJCQkxMiwgMTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExLCA0LCA1LCA2LCA3LCAwLCAxLA0K Pj4+IDIsIDMpOw0KPj4+Pj4+Pj4gKwkJZGlwID0gX21tX3NodWZmbGVfZXBpOChkaXAsIGJzd2Fw X21hc2spOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJLyogRXh0cmFjdCBja3N1bSwgdHRsIGFz IGlwdjQgaGRyIGlzIGluIGNhY2hlICovDQo+Pj4+Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYx KG1idWYzKS0+Y2tzdW0gPQ0KPj4+IGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gaGRyX2NoZWNrc3VtOw0K Pj4+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMyktPnR0bCA9IGlwdjRfaGRyLQ0K Pj4+Pj4+Pj4gdGltZV90b19saXZlOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJLyogUGVyZm9y bSBMUE0gbG9va3VwIHRvIGdldCBOSCBhbmQgbmV4dA0KPj4+IG5vZGUgKi8NCj4+Pj4+Pj4+ICsJ CXJ0ZV9scG1fbG9va3VweDQobHBtLCBkaXAsIGRzdC51MzIsIGRyb3BfbmgpOw0KPj4+Pj4+Pj4g Kw0KPj4+Pj4+Pj4gKwkJLyogRXh0cmFjdCBuZXh0IG5vZGUgaWQgYW5kIE5IICovDQo+Pj4+Pj4+ PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYwKS0+bmggPSBkc3QudTMyWzBdDQo+Pj4gJg0K Pj4+Pj4+PiAweEZGRkY7DQo+Pj4+Pj4+PiArCQluZXh0MCA9IChkc3QudTMyWzBdID4+IDE2KTsN Cj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjEpLT5uaCA9 IGRzdC51MzJbMV0NCj4+PiAmDQo+Pj4+Pj4+IDB4RkZGRjsNCj4+Pj4+Pj4+ICsJCW5leHQxID0g KGRzdC51MzJbMV0gPj4gMTYpOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJcnRlX25vZGVfbWJ1 Zl9wcml2MShtYnVmMiktPm5oID0gZHN0LnUzMlsyXQ0KPj4+ICYNCj4+Pj4+Pj4gMHhGRkZGOw0K Pj4+Pj4+Pj4gKwkJbmV4dDIgPSAoZHN0LnUzMlsyXSA+PiAxNik7DQo+Pj4+Pj4+PiArDQo+Pj4+ Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYzKS0+bmggPSBkc3QudTMyWzNdDQo+Pj4g Jg0KPj4+Pj4+PiAweEZGRkY7DQo+Pj4+Pj4+PiArCQluZXh0MyA9IChkc3QudTMyWzNdID4+IDE2 KTsNCj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJCS8qIEVucXVldWUgZm91ciB0byBuZXh0IG5vZGUg Ki8NCj4+Pj4+Pj4+ICsJCXJ0ZV9lZGdlX3QgZml4X3NwZWMgPQ0KPj4+Pj4+Pj4gKwkJCShuZXh0 X2luZGV4IF4gbmV4dDApIHwgKG5leHRfaW5kZXggXg0KPj4+IG5leHQxKSB8DQo+Pj4+Pj4+PiAr CQkJKG5leHRfaW5kZXggXiBuZXh0MikgfCAobmV4dF9pbmRleCBeDQo+Pj4gbmV4dDMpOw0KPj4+ Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJaWYgKHVubGlrZWx5KGZpeF9zcGVjKSkgew0KPj4+Pj4+Pj4g KwkJCS8qIENvcHkgdGhpbmdzIHN1Y2Nlc3NmdWxseSBzcGVjdWxhdGVkDQo+Pj4gdGlsbCBub3cN Cj4+Pj4+Pj4gKi8NCj4+Pj4+Pj4+ICsJCQlydGVfbWVtY3B5KHRvX25leHQsIGZyb20sIGxhc3Rf c3BlYyAqDQo+Pj4+Pj4+IHNpemVvZihmcm9tWzBdKSk7DQo+Pj4+Pj4+PiArCQkJZnJvbSArPSBs YXN0X3NwZWM7DQo+Pj4+Pj4+PiArCQkJdG9fbmV4dCArPSBsYXN0X3NwZWM7DQo+Pj4+Pj4+PiAr CQkJaGVsZCArPSBsYXN0X3NwZWM7DQo+Pj4+Pj4+PiArCQkJbGFzdF9zcGVjID0gMDsNCj4+Pj4+ Pj4+ICsNCj4+Pj4+Pj4+ICsJCQkvKiBOZXh0MCAqLw0KPj4+Pj4+Pj4gKwkJCWlmIChuZXh0X2lu ZGV4ID09IG5leHQwKSB7DQo+Pj4+Pj4+PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzBdOw0KPj4+ Pj4+Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4+PiArCQkJCWhlbGQrKzsNCj4+Pj4+Pj4+ICsJ CQl9IGVsc2Ugew0KPj4+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLA0KPj4+ IG5vZGUsDQo+Pj4+Pj4+IG5leHQwLA0KPj4+Pj4+Pj4gKwkJCQkJCSAgICBmcm9tWzBdKTsNCj4+ Pj4+Pj4+ICsJCQl9DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCQkJLyogTmV4dDEgKi8NCj4+Pj4+ Pj4+ICsJCQlpZiAobmV4dF9pbmRleCA9PSBuZXh0MSkgew0KPj4+Pj4+Pj4gKwkJCQl0b19uZXh0 WzBdID0gZnJvbVsxXTsNCj4+Pj4+Pj4+ICsJCQkJdG9fbmV4dCsrOw0KPj4+Pj4+Pj4gKwkJCQlo ZWxkKys7DQo+Pj4+Pj4+PiArCQkJfSBlbHNlIHsNCj4+Pj4+Pj4+ICsJCQkJcnRlX25vZGVfZW5x dWV1ZV94MShncmFwaCwNCj4+PiBub2RlLA0KPj4+Pj4+PiBuZXh0MSwNCj4+Pj4+Pj4+ICsJCQkJ CQkgICAgZnJvbVsxXSk7DQo+Pj4+Pj4+PiArCQkJfQ0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJ CS8qIE5leHQyICovDQo+Pj4+Pj4+PiArCQkJaWYgKG5leHRfaW5kZXggPT0gbmV4dDIpIHsNCj4+ Pj4+Pj4+ICsJCQkJdG9fbmV4dFswXSA9IGZyb21bMl07DQo+Pj4+Pj4+PiArCQkJCXRvX25leHQr KzsNCj4+Pj4+Pj4+ICsJCQkJaGVsZCsrOw0KPj4+Pj4+Pj4gKwkJCX0gZWxzZSB7DQo+Pj4+Pj4+ PiArCQkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgsDQo+Pj4gbm9kZSwNCj4+Pj4+Pj4gbmV4 dDIsDQo+Pj4+Pj4+PiArCQkJCQkJICAgIGZyb21bMl0pOw0KPj4+Pj4+Pj4gKwkJCX0NCj4+Pj4+ Pj4+ICsNCj4+Pj4+Pj4+ICsJCQkvKiBOZXh0MyAqLw0KPj4+Pj4+Pj4gKwkJCWlmIChuZXh0X2lu ZGV4ID09IG5leHQzKSB7DQo+Pj4+Pj4+PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzNdOw0KPj4+ Pj4+Pj4gKwkJCQl0b19uZXh0Kys7DQo+Pj4+Pj4+PiArCQkJCWhlbGQrKzsNCj4+Pj4+Pj4+ICsJ CQl9IGVsc2Ugew0KPj4+Pj4+Pj4gKwkJCQlydGVfbm9kZV9lbnF1ZXVlX3gxKGdyYXBoLA0KPj4+ IG5vZGUsDQo+Pj4+Pj4+IG5leHQzLA0KPj4+Pj4+Pj4gKwkJCQkJCSAgICBmcm9tWzNdKTsNCj4+ Pj4+Pj4+ICsJCQl9DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCQkJZnJvbSArPSA0Ow0KPj4+Pj4+ Pj4gKw0KPj4+Pj4+Pj4gKwkJfSBlbHNlIHsNCj4+Pj4+Pj4+ICsJCQlsYXN0X3NwZWMgKz0gNDsN Cj4+Pj4+Pj4+ICsJCX0NCj4+Pj4+Pj4+ICsJfQ0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwl3aGls ZSAobl9sZWZ0X2Zyb20gPiAwKSB7DQo+Pj4+Pj4+PiArCQl1aW50MzJfdCBuZXh0X2hvcDsNCj4+ Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJCW1idWYwID0gcGt0c1swXTsNCj4+Pj4+Pj4+ICsNCj4+Pj4+ Pj4+ICsJCXBrdHMgKz0gMTsNCj4+Pj4+Pj4+ICsJCW5fbGVmdF9mcm9tIC09IDE7DQo+Pj4+Pj4+ PiArDQo+Pj4+Pj4+PiArCQkvKiBFeHRyYWN0IERJUCBvZiBtYnVmMCAqLw0KPj4+Pj4+Pj4gKwkJ ZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZjAsIHN0cnVjdA0KPj4+Pj4+PiBydGVfZXRo ZXJfaGRyICopOw0KPj4+Pj4+Pj4gKwkJaXB2NF9oZHIgPSAoc3RydWN0IHJ0ZV9pcHY0X2hkciAq KShldGhfaGRyICsgMSk7DQo+Pj4+Pj4+PiArCQkvKiBFeHRyYWN0IGNrc3VtLCB0dGwgYXMgaXB2 NCBoZHIgaXMgaW4gY2FjaGUgKi8NCj4+Pj4+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1 ZjApLT5ja3N1bSA9DQo+Pj4gaXB2NF9oZHItDQo+Pj4+Pj4+PiBoZHJfY2hlY2tzdW07DQo+Pj4+ Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYwKS0+dHRsID0gaXB2NF9oZHItDQo+Pj4+ Pj4+PiB0aW1lX3RvX2xpdmU7DQo+Pj4+Pj4+PiArDQo+Pj4+Pj4+PiArCQlyYyA9IHJ0ZV9scG1f bG9va3VwKGxwbSwNCj4+PiBydGVfYmVfdG9fY3B1XzMyKGlwdjRfaGRyLQ0KPj4+Pj4+Pj4gZHN0 X2FkZHIpLA0KPj4+Pj4+Pj4gKwkJCQkgICAgJm5leHRfaG9wKTsNCj4+Pj4+Pj4+ICsJCW5leHRf aG9wID0gKHJjID09IDApID8gbmV4dF9ob3AgOiBkcm9wX25oOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+ Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMCktPm5oID0gbmV4dF9ob3ANCj4+PiAmDQo+ Pj4+Pj4+IDB4RkZGRjsNCj4+Pj4+Pj4+ICsJCW5leHQwID0gKG5leHRfaG9wID4+IDE2KTsNCj4+ Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJCWlmICh1bmxpa2VseShuZXh0X2luZGV4IF4gbmV4dDApKSB7 DQo+Pj4+Pj4+PiArCQkJLyogQ29weSB0aGluZ3Mgc3VjY2Vzc2Z1bGx5IHNwZWN1bGF0ZWQNCj4+ PiB0aWxsIG5vdw0KPj4+Pj4+PiAqLw0KPj4+Pj4+Pj4gKwkJCXJ0ZV9tZW1jcHkodG9fbmV4dCwg ZnJvbSwgbGFzdF9zcGVjICoNCj4+Pj4+Pj4gc2l6ZW9mKGZyb21bMF0pKTsNCj4+Pj4+Pj4+ICsJ CQlmcm9tICs9IGxhc3Rfc3BlYzsNCj4+Pj4+Pj4+ICsJCQl0b19uZXh0ICs9IGxhc3Rfc3BlYzsN Cj4+Pj4+Pj4+ICsJCQloZWxkICs9IGxhc3Rfc3BlYzsNCj4+Pj4+Pj4+ICsJCQlsYXN0X3NwZWMg PSAwOw0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgs IG5vZGUsDQo+Pj4gbmV4dDAsDQo+Pj4+Pj4+IGZyb21bMF0pOw0KPj4+Pj4+Pj4gKwkJCWZyb20g Kz0gMTsNCj4+Pj4+Pj4+ICsJCX0gZWxzZSB7DQo+Pj4+Pj4+PiArCQkJbGFzdF9zcGVjICs9IDE7 DQo+Pj4+Pj4+PiArCQl9DQo+Pj4+Pj4+PiArCX0NCj4+Pj4+Pj4+ICsNCj4+Pj4+Pj4+ICsJLyog ISEhIEhvbWUgcnVuICEhISAqLw0KPj4+Pj4+Pj4gKwlpZiAobGlrZWx5KGxhc3Rfc3BlYyA9PSBu Yl9vYmpzKSkgew0KPj4+Pj4+Pj4gKwkJcnRlX25vZGVfbmV4dF9zdHJlYW1fbW92ZShncmFwaCwg bm9kZSwNCj4+Pj4+Pj4gbmV4dF9pbmRleCk7DQo+Pj4+Pj4+PiArCQlyZXR1cm4gbmJfb2JqczsN Cj4+Pj4+Pj4+ICsJfQ0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4gKwloZWxkICs9IGxhc3Rfc3BlYzsN Cj4+Pj4+Pj4+ICsJLyogQ29weSB0aGluZ3Mgc3VjY2Vzc2Z1bGx5IHNwZWN1bGF0ZWQgdGlsbCBu b3cgKi8NCj4+Pj4+Pj4+ICsJcnRlX21lbWNweSh0b19uZXh0LCBmcm9tLCBsYXN0X3NwZWMgKg0K Pj4+IHNpemVvZihmcm9tWzBdKSk7DQo+Pj4+Pj4+PiArCXJ0ZV9ub2RlX25leHRfc3RyZWFtX3B1 dChncmFwaCwgbm9kZSwgbmV4dF9pbmRleCwNCj4+PiBoZWxkKTsNCj4+Pj4+Pj4+ICsNCj4+Pj4+ Pj4+ICsJcmV0dXJuIG5iX29ianM7DQo+Pj4+Pj4+PiArfQ0KPj4+Pj4+Pj4gKw0KPj4+Pj4+Pj4g ICNlbHNlDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gIHN0YXRpYyB1aW50MTZfdA0KPj4+Pj4+Pj4NCg==