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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4E460C433F5 for ; Mon, 7 Feb 2022 15:22:42 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1607610FA92; Mon, 7 Feb 2022 15:22:41 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0430C10FA16; Mon, 7 Feb 2022 15:22:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644247360; x=1675783360; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:mime-version: content-transfer-encoding; bh=ojj9MSt3VfX8o9TOgVNNUtg3elxbdoDOlqbbylO92q4=; b=nMgSLvoN1C6tPaTiR0YnpheTwrmtpTP+/uEg4sO8LVB29LUJlxTn+GIl bIVota0Ruv3izLPpaZEJeTwxbQJbmOAJDs/HScsJy97WUPEWPdCnTcsBi CPYefHt3ncGHmvK6TCpD6SZkq8OSDfO2oSljTnt5ffZZ4TX9nxaIhH++O bvXSSOGWXjKkTI/0ampHoLX6+fatfcIW2iNLkzATFD37iutdnGiv1+7bJ cc8yWMktOztoKllggjvuoLCL46URtpCoHMfR2AKb9VfiVSoGTBHWkS0Bj xHtsBMGL8Nf5bzNuxEUYobTSI4vjnUqRip89BvpzQVdvql8oRAEBXUSIY g==; X-IronPort-AV: E=McAfee;i="6200,9189,10250"; a="335138319" X-IronPort-AV: E=Sophos;i="5.88,350,1635231600"; d="scan'208";a="335138319" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2022 07:22:39 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,350,1635231600"; d="scan'208";a="525167672" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga007.jf.intel.com with ESMTP; 07 Feb 2022 07:22:39 -0800 Received: from orsmsx606.amr.corp.intel.com (10.22.229.19) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 7 Feb 2022 07:22:38 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Mon, 7 Feb 2022 07:22:38 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.100) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Mon, 7 Feb 2022 07:22:38 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JWWHvOgvEiHB4PYSJiDmECopbXASQfZbSOLonDQSpgcWDNwqj9ZXdnNK+YNhJ5oTOaqk/JFzw00R6gjy2VlLSGkavCFPqx/UGbmOdDVsHDOX40toy5xFv/hfVzylwre/sJ0IJIWYoIVEmCEoReUN9eymn757CVcoGk5T9VfHvX/3Q6luAwSgev0y5xaa9j0+b9MFY2IyE4N1dS1kzUmOlCltewcsiloPJIuJr6k6b73zbxUL1m05lRs6/RMpcFNXfTyntaAeqFWu0V+jiapnNOkLygmbxtdDpUwjyNnPlEYvMpQFcN3bwxnGKwLtG6JXjYQN4nzflE1ZK6r/YZIxEQ== 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=p6GSoVx6IxHYZ8LH8cza8DBVpZEcfNbZ3LK4uQSZiDM=; b=VNhQ8gbocFYGkmYVay6000Sbkba4/qC1Uj++cXpgFK4lHDu5DVQgppDjJp+LOAv6Rs2iHxfrzl8U4bPg6HYXVAICnwGdYxHs7NYRDOfGCGilnywRw5p56iI1iA58NZONEWCCdq0H0Bgmq/wQdZAn0cE70pz3fy4r2bU5Ke8FkJh9YX0WOsAiaiKcUkUGXSCC1Z0qVW7nHyTzRK6PjiLwZKg8jBn8Pl/ctO51tJd2hYIalr6gEifpvMRQ0cRjTCD8DxdQR8+dFF7elzu8oF2lxrnUaIM6XMvGuos1Cbtg5EneZFC03gOdSLssov4PNcQB15y0bdqL8JrqEiWLc1GcGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DM6PR11MB3114.namprd11.prod.outlook.com (2603:10b6:5:6d::11) by BN6PR11MB1729.namprd11.prod.outlook.com (2603:10b6:404:101::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4951.14; Mon, 7 Feb 2022 15:22:34 +0000 Received: from DM6PR11MB3114.namprd11.prod.outlook.com ([fe80::69a8:645d:f48f:1462]) by DM6PR11MB3114.namprd11.prod.outlook.com ([fe80::69a8:645d:f48f:1462%5]) with mapi id 15.20.4951.019; Mon, 7 Feb 2022 15:22:33 +0000 From: "Hellstrom, Thomas" To: "C, Ramalingam" Thread-Topic: [RFC 2/2] drm/i915/migrate: Evict and restore the ccs data Thread-Index: AQHYHAZfvzg9OJQ9CEeJj3B3TeTAFqyILX4AgAAFWQCAAAIogA== Date: Mon, 7 Feb 2022 15:22:33 +0000 Message-ID: <261dbdf7a49d1d66748da2be81a3b495475b1118.camel@intel.com> References: <20220207093743.14467-1-ramalingam.c@intel.com> <20220207093743.14467-3-ramalingam.c@intel.com> <99824fde33f84f92679a39eb605d948e12e4ae6b.camel@intel.com> <20220207151448.GB15175@intel.com> In-Reply-To: <20220207151448.GB15175@intel.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.40.4 (3.40.4-2.fc34) authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e334efc9-6fde-4211-80e7-08d9ea4daa42 x-ms-traffictypediagnostic: BN6PR11MB1729:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PUxim1HOYZY8mhW5hFUaQNNG8rcGscgKXRkNVkiQwFragX2vEgMFpOQUaCp3TzN9doGI8ydrky6fMYC4qxNsw4zI0tU1dxAq9T6ruIJd4GFLhJI04GlIthEPcf2h1WeLNCp14kWZ5qHuvux+NOtTMJYx/9ZDLXkVRg0THSR8adRSKEIHcfDAAzDlPJwVPPP/ArUIkezYmQbeaFj3UeWaOJauk9jRr6eh2tdmjHepCL8hUAt8ZOCaKC6Hk6S2H0cwEwaI3WBa9cC9m9jOLr/cI0uUsGX02ZCuTqYhei2D4ogBkTUUnzVYdlgzA5TQelBqK2Hav3AFLbUtnQon+gzTZcTRP7EdQYiqkQjNPmti6ub5Y3kShk7FzDPZJhl0aiAhKGS/sYq6u0FISLEcFIkM3dCEEuNP5zO8Y0EfzjadA4voNsmgx/RL8JLtCO6DIrb75KnLhXuFrxJkDlpJ1cEg8bz3w/TTUqbJY88IgGlHsOjCpHGo2kxHEMzu2U94Ki/ZbGO+9cXF+LBoNuQ6tQP3nDpQgpr7GXdp3ZPhKadVDGbOJNZ1HYA5JK3cKcR/yF5mNKD2n8jCT/TF2+oJHf3Rg0hXcpuqcuv3mYGAHyLzFBoPNEXI2Nu7JiMOHtsOQAtYndWHWk6YGpM3wB2VcjLAvvHNKv/KJ1tkJ5L5e0YoybCgkTInmcW35K/BF7klPajWKt8KOA//CDs+MUx2P/qgvQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB3114.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(71200400001)(6506007)(53546011)(26005)(2616005)(6512007)(186003)(6636002)(30864003)(316002)(66556008)(38070700005)(66476007)(8936002)(5660300002)(64756008)(66446008)(8676002)(4326008)(6862004)(508600001)(76116006)(66946007)(91956017)(37006003)(54906003)(6486002)(36756003)(38100700002)(122000001)(2906002)(86362001)(82960400001)(83380400001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZWVPcTJEYm1CS3F2a2hseWxTY1E4RmhxZDFzNlhkM3k4U0hCaWlBQnBsa3Va?= =?utf-8?B?ejhQRGNLRStwYkEzNVVYcFFGSXJpMUhiZThkdTZmdHlPY3ZMbHdzalgrc3Bm?= =?utf-8?B?bE16SEJwcVNTcmNIMTdHMmtpOWlxTnowV3hkeUhYcjlCUE9NWG5ZaWNPeGpE?= =?utf-8?B?Ukx1Tmk4YnMzb1lTa3NOQ3JwYTVvVVp3YTdLTWphaVZLOXJGOXZPRFNRUmVI?= =?utf-8?B?c2VXbmZWTGQrTloyRU1Bb3cxV2gyY21NdURqTGFhbXU0R2lhWHNvMG50QndQ?= =?utf-8?B?VVptR0FmY1FRajA0MG1JelpJKytiOTZSNkVkYit4Qm52VERieFFvbkhkTm92?= =?utf-8?B?OThqNkxhNjg5THZ3Z0EyMW5mdDRvcjh4Y3Z0emw5WHgyRXZ4eStUZEFNemVj?= =?utf-8?B?WkczdjV1WGZXcTA2QTVtNjZ6RHdUYTQ2ZXpIeDZJWUg1em8xNHpET2RRYk1W?= =?utf-8?B?em84ai9uMWV0NHF0U1AxOERLQXhWRVB0VE4yWHNrYlpZV0I3N1crN25XLzFo?= =?utf-8?B?SG1Pdk5HbGNMMUgwN0poWXZDaXFyV1lOaCtHVXNaRTJxRmRHSzBsL1d1NlNs?= =?utf-8?B?em5LT2oyZjZ0dmdNL010YWR2cFlubGNMaFVNVkM3M3A1ekdpMC9zdkk2NXZY?= =?utf-8?B?YnlsNzkreXp0cldJN3phK20vcWJFZGxDb1BVR3d4ckpNa1pqYmd3Z2lUT1BK?= =?utf-8?B?RTdOTm9DUVVoTnZxVzVXSG94MW52dmNDekptak5WQnB3Yys4Q0ptNHA2YWRB?= =?utf-8?B?Yi9wbm45akgzZHRQTXh6YTJ2WnV0R01qOEdaSEMwdDN5Zmt5Q2xTQXFqZHVD?= =?utf-8?B?b1Z3dWNockNiTXJJdCtlYWdhejNzN3J0RFZWTGl2c05ibFZxa0R5Mk91NFNY?= =?utf-8?B?d3NqSHJaLy9KM1NHOCtzRmw0cStGUDRzaGxpcHdTTno2amEvajBCU1AvQzdF?= =?utf-8?B?WC82aFZRWkxEWFhGUktGRGRuMC9IN0dYWEY2Z0VCQ0pXbzlnMllMQWpCRFJh?= =?utf-8?B?Y2szcWYxeForTEdZa1RBLzF1TC9EZ2g3NG9xYkFPRVJrMDBwVGExa20zckFB?= =?utf-8?B?RFIzck9FRW0xQ1BCb3lIcWQxTlF2SmQzQ3RsZC9XYk8vdFZVSEE1TVlrWnBX?= =?utf-8?B?QlFpNmZTM3FldklDcnN2T0ZBK0svWW1jRjhFM3VLYkNGN2RMdHVGRnF4Lzhr?= =?utf-8?B?WGpXdmIvaG8xSE5tVTNNVk9PTThOcjFKa2xmNTdzampjaWpuWkFqMy9xOTVU?= =?utf-8?B?YzRtM2NJb2VCNmpDVUkxU2pxNjhLTEFZN01PaDRwYzdwd3hkay9sZTVidVZK?= =?utf-8?B?Y1ZGRG9vU1RaS0RYSGgydm15dGRlN2xLWW0vNjZNeXRjcUl3NXB2R3NKSG5U?= =?utf-8?B?eUZvMmNScmFJM3Z5Tk45RDhxeEdhaUhldmJFSE5XNG5mMEtLSDlyRXVhRWhK?= =?utf-8?B?WlE0SDZRNXpPZXRuYnltOU1TbXlrd2sxUnAzOWdFaHI3TE1Ncy91cFlDaHRW?= =?utf-8?B?bXV0ZHZaS0h0SW1VQldTU3V4S1ZFaCtPN3JBUVM2U05SbUdkOUdPNGlwY2oz?= =?utf-8?B?VmY5blk3T1ZHTERheU8yYTVQbWJDTkhyMHB2V1lSVEpEYWNzK0hZd0JtN2pF?= =?utf-8?B?Y2VxbVNueEJpOG9BamliVWZINHpKZHNjUCtiT01jS2hRL2t6bXVRbFFwTEhR?= =?utf-8?B?UUY0WFRkSkpFUC85WWQycVNoTXFYcXRTeDNDSnVnZVFTbnIrZXQ2NE5JTGZo?= =?utf-8?B?THJoT0FWUVVQQWV5SldBS01VQktjM2pJWEozS0pFVWdwNTBVR3BWMHJldmlJ?= =?utf-8?B?T3oxTXhaTlRkRlNMb3I4TTdvSlZSSW1HMEhPdDg3R0JacVZ2Z1JoejJwUTlx?= =?utf-8?B?aVNkUVBYWUlxY2c0d3lXRVEwNkwwYmhGQXk3Vi96cXlUK3ArQnVSRERCcUVw?= =?utf-8?B?SS9iTFVFejlaUElmYk92ZTZUQnJ3UDg4NjNBZ1B2cjMyOStVam9VNjk4ckE3?= =?utf-8?B?NHJ6d1ZMMWhuVTErbGVUN0FVeXcreGo3T3FrQU5raVNDM240WXpYVUx4N0Zt?= =?utf-8?B?dTN0bzFBcXU2dVFva3NBb1FML251TTMvUVZ5THpYdUc3dFRIWDZoL2Nmb1M0?= =?utf-8?B?b0RyUnduNVJMNlF6N2YzeCsrMUlVVnByZGhhVnBVTEJwQ3kxTUc3dUZDd3Av?= =?utf-8?B?b0lIQ3pidHhWbk5YSmtnRjB6Q0tBamg2WHdPamlCZDM5MGFQSEY5TzJidW11?= =?utf-8?Q?7PFbCscOwq37HAKY0Sr/+ZyNUaJ8rdgagZthfsvb7k=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <7D037FBA6322F243A44C1372B32692A5@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB3114.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e334efc9-6fde-4211-80e7-08d9ea4daa42 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Feb 2022 15:22:33.8564 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: hfH2f9lD+mm8uUy1BKbwHPfbUwRPWqlEGMj58DMFHgw/1B3xGBI6Bc1b8nKN//27qX0lpGl+AWmYi6dE017Zxw8e1wIjUoNTlWg7uy+BrKQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB1729 X-OriginatorOrg: intel.com Content-Transfer-Encoding: base64 Subject: Re: [Intel-gfx] [RFC 2/2] drm/i915/migrate: Evict and restore the ccs data X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "intel-gfx@lists.freedesktop.org" , "christian.koenig@amd.com" , "dri-devel@lists.freedesktop.org" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gTW9uLCAyMDIyLTAyLTA3IGF0IDIwOjQ0ICswNTMwLCBSYW1hbGluZ2FtIEMgd3JvdGU6Cj4g T24gMjAyMi0wMi0wNyBhdCAyMDoyNTo0MiArMDUzMCwgSGVsbHN0cm9tLCBUaG9tYXMgd3JvdGU6 Cj4gPiBIaSwgUmFtLAo+ID4gCj4gPiBBIGNvdXBsZSBvZiBxdWljayBxdWVzdGlvbnMgYmVmb3Jl IHN0YXJ0aW5nIGEgbW9yZSBkZXRhaWxlZCByZXZpZXc6Cj4gPiAKPiA+IDEpIERvZXMgdGhpcyBh bHNvIHN1cHBvcnQgbWlncmF0aW5nIG9mIGNvbXByZXNzZWQgZGF0YSBMTUVNLT5MTUVNPwo+ID4g V2hhdC1hYm91dCBpbnRlci10aWxlPwo+IEhvbmVzdGx5IHRoaXMgc2VyaWVzIG1haW5seSBmYWN1 c2VkIG9uIGV2aWN0aW9uIG9mIGxtZW0gaW50byBzbWVtIGFuZAo+IHJlc3RvcmF0aW9uIG9mIHNh bWUuCj4gCj4gVG8gY292ZXIgbWlncmF0aW9uLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGlzIGRpZmZl cmVudGx5IGZyb20gZXZpY3Rpb24uCj4gQmVjYXN1ZSB3aGVuIHdlIG1pZ3JhdGUgdGhlIGNvbXBy ZXNzZWQgY29udGVudCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8KPiB1c2UKPiB0aGF0IGZyb20gdGhh dCBuZXcgcGxhY2VtZW50LiBjYW4ndCBrZWVwIHRoZSBjY3MgZGF0YSBzZXBhcmF0ZWx5Lgo+IAo+ IE1pZ3JhdGlvbiBvZiBsbWVtLT5zbWVtIG5lZWRzIGRlY29tcHJlc3Npb24gaW5jb3Jwb3J0YXRl ZC4KPiBNaWdyYXRpb24gb2YgbG1lbV9tLT5sbWVtX24gbmVlZHMgdG8gbWFpbnRhaW4gdGhlCj4g Y29tcHJlc3NlZC9kZWNvbXByZXNzZWQgc3RhdGUgYXMgaXQgaXMuCj4gCj4gU28gd2UgbmVlZCB0 byBwYXNzIHRoZSBpbmZvcm1hdGlvbiB1cHRvIGVtaXRfY29weSB0byBkaWZmZXJlbnRpYXRlCj4g ZXZpY3Rpb24gYW5kIG1pZ3JhdGlvbgo+IAo+IElmIHlvdSBkb250IGhhdmUgb2JqZWN0aW9uIEkg d291bGQgbGlrZSB0byB0YWtlIHRoZSBtaWdyYXRpb24gb25jZSB3ZQo+IGhhdmUgdGhlIGV2aWN0 aW9uIG9mIGxtZW0gaW4gcGxhY2UuCgpTdXJlIE5QLiBJIHdhcyB0aGlua2luZyB0aGF0IGluIHRo ZSBmaW5hbCBzb2x1dGlvbiB3ZSBtaWdodCBhbHNvIG5lZWQKdG8gdGhpbmsgYWJvdXQgdGhlIHBv c3NpYmlsaXR5IHRoYXQgd2UgbWlnaHQgZXZpY3QgdG8gYW5vdGhlciBsbWVtCnJlZ2lvbiwgYWx0 aG91Z2ggSSBmaWd1cmUgdGhhdCB3b24ndCBiZSBlbmFibGVkIHVudGlsIHdlIHN1cHBvcnQgbXVs dGktCnRpbGUuCgo+IAo+ID4gCj4gPiAyKSBEbyB3ZSBuZWVkIHRvIGJsb2NrIGZhdWx0aW5nIG9m IGNvbXByZXNzZWQgZGF0YSBpbiB0aGUgZmF1bHQKPiA+IGhhbmRsZXIKPiA+IGFzIGEgZm9sbG93 LXVwIHBhdGNoPwo+IAo+IEluIGNhc2Ugb2YgZXZpY3RlZCBjb21wcmVzc2VkIGRhdGEgd2UgZG9u dCBuZWVkIHRvIHRyZWF0IGl0Cj4gZGlmZmVyZW50bHkKPiBmcm9tIHRoZSBldmljdGVkIG5vcm1h bCBkYXRhLiBTbyBJIGRvbnQgdGhpbmsgdGhpcyBuZWVkcyBhIHNwZWNpYWwKPiB0cmVhdG1lbnQu IFNvcnJ5IGlmIGkgZG9udCB1bmRlcnN0YW5kIHlvdXIgcXVlc3Rpb24uCgpNeSBxdWVzdGlvbiB3 YXNuJ3QgZGlyZWN0bHkgcmVsYXRlZCB0byBldmljdGlvbiBhY3R1YWxseSwgYnV0IGRvZXMKdXNl ci1zcGFjZSBuZWVkIHRvIGhhdmUgbW1hcCBhY2Nlc3MgdG8gY29tcHJlc3NlZCBkYXRhPyBJZiBu b3QsIGJsb2NrCml0PwoKVGhhbmtzLApUaG9tYXMKCgoKPiAKPiBSYW0KPiA+IAo+ID4gL1Rob21h cwo+ID4gCj4gPiAKPiA+IE9uIE1vbiwgMjAyMi0wMi0wNyBhdCAxNTowNyArMDUzMCwgUmFtYWxp bmdhbSBDIHdyb3RlOgo+ID4gPiBXaGVuIHdlIGFyZSBzd2FwcGluZyBvdXQgdGhlIGxvY2FsIG1l bW9yeSBvYmogb24gZmxhdC1jY3MgY2FwYWJsZQo+ID4gPiBwbGF0Zm9ybSwKPiA+ID4gd2UgbmVl ZCB0byBjYXB0dXJlIHRoZSBjY3MgZGF0YSB0b28gYWxvbmcgd2l0aCBtYWluIG1lb3J5IGFuZCB3 ZQo+ID4gPiBuZWVkCj4gPiA+IHRvCj4gPiA+IHJlc3RvcmUgaXQgd2hlbiB3ZSBhcmUgc3dhcHBp bmcgaW4gdGhlIGNvbnRlbnQuCj4gPiA+IAo+ID4gPiBFeHRyYWN0aW5nIGFuZCByZXN0b3Jpbmcg dGhlIENDUyBkYXRhIGlzIGRvbmUgdGhyb3VnaCBhIHNwZWNpYWwKPiA+ID4gY21kCj4gPiA+IGNh bGxlZAo+ID4gPiBYWV9DVFJMX1NVUkZfQ09QWV9CTFQKPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYt Ynk6IFJhbWFsaW5nYW0gQyA8cmFtYWxpbmdhbS5jQGludGVsLmNvbT4KPiA+ID4gLS0tCj4gPiA+ IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5jIHwgMjgzICsrKysrKysr KysrKystLS0tLQo+ID4gPiAtLS0tCj4gPiA+IC0tCj4gPiA+IMKgMSBmaWxlIGNoYW5nZWQsIDE1 NSBpbnNlcnRpb25zKCspLCAxMjggZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5jCj4gPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbWlncmF0ZS5jCj4gPiA+IGluZGV4IDViZGFiMGIzYzcz NS4uZTYwYWU2ZmYxODQ3IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9taWdyYXRlLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfbWlncmF0ZS5jCj4gPiA+IEBAIC00NDksMTQgKzQ0OSwxNDYgQEAgc3RhdGljIGJvb2wgd2Ff MTIwOTY0NDYxMV9hcHBsaWVzKGludCB2ZXIsCj4gPiA+IHUzMgo+ID4gPiBzaXplKQo+ID4gPiDC oMKgwqDCoMKgwqDCoCByZXR1cm4gaGVpZ2h0ICUgNCA9PSAzICYmIGhlaWdodCA8PSA4Owo+ID4g PiDCoH0KPiA+ID4gCj4gPiA+ICsvKioKPiA+ID4gKyAqIERPQzogRmxhdC1DQ1MgLSBNZW1vcnkg Y29tcHJlc3Npb24gZm9yIExvY2FsIG1lbW9yeQo+ID4gPiArICoKPiA+ID4gKyAqIE9uIFhlLUhQ IGFuZCBsYXRlciBkZXZpY2VzLCB3ZSB1c2UgZGVkaWNhdGVkIGNvbXByZXNzaW9uCj4gPiA+IGNv bnRyb2wKPiA+ID4gc3RhdGUgKENDUykKPiA+ID4gKyAqIHN0b3JlZCBpbiBsb2NhbCBtZW1vcnkg Zm9yIGVhY2ggc3VyZmFjZSwgdG8gc3VwcG9ydCB0aGUgM0QKPiA+ID4gYW5kCj4gPiA+IG1lZGlh Cj4gPiA+ICsgKiBjb21wcmVzc2lvbiBmb3JtYXRzLgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSBt ZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSBDQ1Mgb2YgdGhlIGVudGlyZSBsb2NhbCBtZW1vcnkgaXMK PiA+ID4gMS8yNTYgb2YgdGhlCj4gPiA+ICsgKiBsb2NhbCBtZW1vcnkgc2l6ZS4gU28gYmVmb3Jl IHRoZSBrZXJuZWwgYm9vdCwgdGhlIHJlcXVpcmVkCj4gPiA+IG1lbW9yeQo+ID4gPiBpcyByZXNl cnZlZAo+ID4gPiArICogZm9yIHRoZSBDQ1MgZGF0YSBhbmQgYSBzZWN1cmUgcmVnaXN0ZXIgd2ls bCBiZSBwcm9ncmFtbWVkCj4gPiA+IHdpdGgKPiA+ID4gdGhlIENDUyBiYXNlCj4gPiA+ICsgKiBh ZGRyZXNzLgo+ID4gPiArICoKPiA+ID4gKyAqIEZsYXQgQ0NTIGRhdGEgbmVlZHMgdG8gYmUgY2xl YXJlZCB3aGVuIGEgbG1lbSBvYmplY3QgaXMKPiA+ID4gYWxsb2NhdGVkLgo+ID4gPiArICogQW5k IENDUyBkYXRhIGNhbiBiZSBjb3BpZWQgaW4gYW5kIG91dCBvZiBDQ1MgcmVnaW9uIHRocm91Z2gK PiA+ID4gKyAqIFhZX0NUUkxfU1VSRl9DT1BZX0JMVC4gQ1BVIGNhbid0IGFjY2VzcyB0aGUgQ0NT IGRhdGEKPiA+ID4gZGlyZWN0bHkuCj4gPiA+ICsgKgo+ID4gPiArICogV2hlbiB3ZSBleGF1c3Qg dGhlIGxtZW0sIGlmIHRoZSBvYmplY3QncyBwbGFjZW1lbnRzIHN1cHBvcnQKPiA+ID4gc21lbSwK PiA+ID4gdGhlbiB3ZSBjYW4KPiA+ID4gKyAqIGRpcmVjdGx5IGRlY29tcHJlc3MgdGhlIGNvbXBy ZXNzZWQgbG1lbSBvYmplY3QgaW50byBzbWVtIGFuZAo+ID4gPiBzdGFydCB1c2luZyBpdAo+ID4g PiArICogZnJvbSBzbWVtIGl0c2VsZi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBCdXQgd2hlbiB3ZSBu ZWVkIHRvIHN3YXBvdXQgdGhlIGNvbXByZXNzZWQgbG1lbSBvYmplY3QgaW50byBhCj4gPiA+IHNt ZW0gcmVnaW9uCj4gPiA+ICsgKiB0aG91Z2ggb2JqZWN0cycgcGxhY2VtZW50IGRvZXNuJ3Qgc3Vw cG9ydCBzbWVtLCB0aGVuIHdlIGNvcHkKPiA+ID4gdGhlCj4gPiA+IGxtZW0gY29udGVudAo+ID4g PiArICogYXMgaXQgaXMgaW50byBzbWVtIHJlZ2lvbiBhbG9uZyB3aXRoIGNjcyBkYXRhICh1c2lu Zwo+ID4gPiBYWV9DVFJMX1NVUkZfQ09QWV9CTFQpLgo+ID4gPiArICogV2hlbiB0aGUgb2JqZWN0 IGlzIHJlZmVycmVkLCBsbWVtIGNvbnRlbnQgd2lsbCBiZSBzd2FwZWQgaW4KPiA+ID4gYWxvbmcK PiA+ID4gd2l0aAo+ID4gPiArICogcmVzdG9yYXRpb24gb2YgdGhlIENDUyBkYXRhICh1c2luZyBY WV9DVFJMX1NVUkZfQ09QWV9CTFQpIGF0Cj4gPiA+IGNvcnJlc3BvbmRpbmcKPiA+ID4gKyAqIGxv Y2F0aW9uLgo+ID4gPiArICoKPiA+ID4gKyAqCj4gPiA+ICsgKiBGbGF0LUNDUyBNb2RpZmllcnMg Zm9yIGRpZmZlcmVudCBjb21wcmVzc2lvbiBmb3JtYXRzCj4gPiA+ICsgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ICsgKgo+ID4gPiAr ICogSTkxNV9GT1JNQVRfTU9EX0ZfVElMRURfREcyX1JDX0NDUyAtIHVzZWQgdG8gaW5kaWNhdGUg dGhlCj4gPiA+IGJ1ZmZlcnMKPiA+ID4gb2YgRmxhdCBDQ1MKPiA+ID4gKyAqIHJlbmRlciBjb21w cmVzc2lvbiBmb3JtYXRzLiBUaG91Z2ggdGhlIGdlbmVyYWwgbGF5b3V0IGlzIHNhbWUKPiA+ID4g YXMKPiA+ID4gKyAqIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JDX0NDUywgbmV3IGhh c2hpbmcvY29tcHJlc3Npb24KPiA+ID4gYWxnb3JpdGhtIGlzCj4gPiA+ICsgKiB1c2VkLiBSZW5k ZXIgY29tcHJlc3Npb24gdXNlcyAxMjggYnl0ZSBjb21wcmVzc2lvbiBibG9ja3MKPiA+ID4gKyAq Cj4gPiA+ICsgKiBJOTE1X0ZPUk1BVF9NT0RfRl9USUxFRF9ERzJfTUNfQ0NTIC11c2VkIHRvIGlu ZGljYXRlIHRoZQo+ID4gPiBidWZmZXJzCj4gPiA+IG9mIEZsYXQgQ0NTCj4gPiA+ICsgKiBtZWRp YSBjb21wcmVzc2lvbiBmb3JtYXRzLiBUaG91Z2ggdGhlIGdlbmVyYWwgbGF5b3V0IGlzIHNhbWUK PiA+ID4gYXMKPiA+ID4gKyAqIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX01DX0NDUywg bmV3IGhhc2hpbmcvY29tcHJlc3Npb24KPiA+ID4gYWxnb3JpdGhtIGlzCj4gPiA+ICsgKiB1c2Vk LiBNZWRpYSBjb21wcmVzc2lvbiB1c2VzIDI1NiBieXRlIGNvbXByZXNzaW9uIGJsb2Nrcy4KPiA+ ID4gKyAqCj4gPiA+ICsgKiBJOTE1X0ZPUk1BVF9NT0RfRl9USUxFRF9ERzJfUkNfQ0NTX0NDIC0g dXNlZCB0byBpbmRpY2F0ZSB0aGUKPiA+ID4gYnVmZmVycyBvZiBGbGF0Cj4gPiA+ICsgKiBDQ1Mg Y2xlYXIgY29sb3IgcmVuZGVyIGNvbXByZXNzaW9uIGZvcm1hdHMuIFVuaWZpZWQKPiA+ID4gY29t cHJlc3Npb24KPiA+ID4gZm9ybWF0IGZvcgo+ID4gPiArICogY2xlYXIgY29sb3IgcmVuZGVyIGNv bXByZXNzaW9uLiBUaGUgZ2VucmFsIGxheW91dCBpcyBhIHRpbGVkCj4gPiA+IGxheW91dCB1c2lu Zwo+ID4gPiArICogNEtiIHRpbGVzIGkuZSBUaWxlNCBsYXlvdXQuCj4gPiA+ICsgKi8KPiA+ID4g Kwo+ID4gPiArc3RhdGljIGlubGluZSB1MzIgKmk5MTVfZmx1c2hfZHcodTMyICpjbWQsIHU2NCBk c3QsIHUzMiBmbGFncykKPiA+ID4gK3sKPiA+ID4gK8KgwqDCoMKgwqDCoCAvKiBNYXNrIHRoZSAz IExTQiB0byB1c2UgdGhlIFBQR1RUIGFkZHJlc3Mgc3BhY2UgKi8KPiA+ID4gK8KgwqDCoMKgwqDC oCAqY21kKysgPSBNSV9GTFVTSF9EVyB8IGZsYWdzOwo+ID4gPiArwqDCoMKgwqDCoMKgICpjbWQr KyA9IGxvd2VyXzMyX2JpdHMoZHN0KTsKPiA+ID4gK8KgwqDCoMKgwqDCoCAqY21kKysgPSB1cHBl cl8zMl9iaXRzKGRzdCk7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gY21kOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdTMyIGNhbGNfY3RybF9zdXJmX2luc3RyX3Np emUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gKmk5MTUsCj4gPiA+IGludCBzaXplKQo+ ID4gPiArewo+ID4gPiArwqDCoMKgwqDCoMKgIHUzMiBudW1fY21kcywgbnVtX2Jsa3MsIHRvdGFs X3NpemU7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoCBpZiAoIUdFVF9DQ1NfU0laRShpOTE1 LCBzaXplKSkKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4g PiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoCAvKgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBYWV9D VFJMX1NVUkZfQ09QWV9CTFQgdHJhbnNmZXJzIENDUyBpbiAyNTYgYnl0ZQo+ID4gPiArwqDCoMKg wqDCoMKgwqAgKiBibG9ja3MuIG9uZSBYWV9DVFJMX1NVUkZfQ09QWV9CTFQgY29tbWFuZCBjYW4K PiA+ID4gK8KgwqDCoMKgwqDCoMKgICogdHJuYXNmZXIgdXB0byAxMDI0IGJsb2Nrcy4KPiA+ID4g K8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqAgbnVtX2Jsa3MgPSBHRVRfQ0NT X1NJWkUoaTkxNSwgc2l6ZSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqAgbnVtX2NtZHMgPSAobnVtX2Js a3MgKyAoTlVNX0NDU19CTEtTX1BFUl9YRkVSIC0gMSkpID4+Cj4gPiA+IDEwOwo+ID4gPiArwqDC oMKgwqDCoMKgIHRvdGFsX3NpemUgPSAoWFlfQ1RSTF9TVVJGX0lOU1RSX1NJWkUpICogbnVtX2Nt ZHM7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDCoCAvKgo+ID4gPiArwqDCoMKgwqDCoMKgwqAg KiBXZSBuZWVkIHRvIGFkZCBhIGZsdXNoIGJlZm9yZSBhbmQgYWZ0ZXIKPiA+ID4gK8KgwqDCoMKg wqDCoMKgICogWFlfQ1RSTF9TVVJGX0NPUFlfQkxUCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ ID4gPiArwqDCoMKgwqDCoMKgIHRvdGFsX3NpemUgKz0gMiAqIE1JX0ZMVVNIX0RXX1NJWkU7Cj4g PiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIHRvdGFsX3NpemU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyB1MzIgKl9pOTE1X2N0cmxfc3VyZl9jb3B5X2JsdCh1MzIgKmNtZCwgdTY0IHNy Y19hZGRyLCB1NjQKPiA+ID4gZHN0X2FkZHIsCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IHNyY19t ZW1fYWNjZXNzLCB1OAo+ID4gPiBkc3RfbWVtX2FjY2VzcywKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aW50IHNyY19tb2NzLCBpbnQgZHN0X21vY3MsCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiBudW1f Y2NzX2Jsb2NrcykKPiA+ID4gK3sKPiA+ID4gK8KgwqDCoMKgwqDCoCBpbnQgaSA9IG51bV9jY3Nf YmxvY2tzOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqAgLyoKPiA+ID4gK8KgwqDCoMKgwqDC oMKgICogVGhlIFhZX0NUUkxfU1VSRl9DT1BZX0JMVCBpbnN0cnVjdGlvbiBpcyB1c2VkIHRvIGNv cHkKPiA+ID4gdGhlCj4gPiA+IENDUwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBkYXRhIGluIGFu ZCBvdXQgb2YgdGhlIENDUyByZWdpb24uCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqCj4gPiA+ICvC oMKgwqDCoMKgwqDCoCAqIFdlIGNhbiBjb3B5IGF0IG1vc3QgMTAyNCBibG9ja3Mgb2YgMjU2IGJ5 dGVzIHVzaW5nIG9uZQo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBYWV9DVFJMX1NVUkZfQ09QWV9C TFQgaW5zdHJ1Y3Rpb24uCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqCj4gPiA+ICvCoMKgwqDCoMKg wqDCoCAqIEluIGNhc2Ugd2UgbmVlZCB0byBjb3B5IG1vcmUgdGhhbiAxMDI0IGJsb2Nrcywgd2Ug bmVlZAo+ID4gPiB0bwo+ID4gPiBhZGQKPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogYW5vdGhlciBp bnN0cnVjdGlvbiB0byB0aGUgc2FtZSBiYXRjaCBidWZmZXIuCj4gPiA+ICvCoMKgwqDCoMKgwqDC oCAqCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIDEwMjQgYmxvY2tzIG9mIDI1NiBieXRlcyBvZiBD Q1MgcmVwcmVzZW50IGEgdG90YWwKPiA+ID4gMjU2S0Igb2YKPiA+ID4gQ0NTLgo+ID4gPiArwqDC oMKgwqDCoMKgwqAgKgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiAyNTYgS0Igb2YgQ0NTIHJlcHJl c2VudHMgMjU2ICogMjU2IEtCID0gNjQgTUIgb2YgTE1FTS4KPiA+ID4gK8KgwqDCoMKgwqDCoMKg ICovCj4gPiA+ICvCoMKgwqDCoMKgwqAgZG8gewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKgo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogV2UgdXNl IGxvZ2ljYWwgQU5EIHdpdGggMTAyMyBzaW5jZSB0aGUgc2l6ZQo+ID4gPiBmaWVsZAo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdGFrZXMgdmFsdWVzIHdoaWNoIGlzIGlu IHRoZSByYW5nZSBvZiAwIC0gMTAyMwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICovCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjbWQrKyA9ICgoWFlf Q1RSTF9TVVJGX0NPUFlfQkxUKSB8Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKHNyY19tZW1fYWNjZXNzIDw8Cj4gPiA+IFNSQ19BQ0NFU1Nf VFlQRV9TSElGVCkgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChkc3RfbWVtX2FjY2VzcyA8PAo+ID4gPiBEU1RfQUNDRVNTX1RZUEVfU0hJ RlQpIHwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoKChpIC0gMSkgJiAxMDIzKSA8PCBDQ1NfU0laRV9TSElGVCkpOwo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY21kKysgPSBsb3dlcl8zMl9iaXRzKHNyY19hZGRyKTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNtZCsrID0gKCh1cHBlcl8zMl9i aXRzKHNyY19hZGRyKSAmIDB4RkZGRikgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzcmNfbW9jcyA8PCBYWV9DVFJMX1NVUkZfTU9DU19T SElGVCkpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY21kKysgPSBsb3dl cl8zMl9iaXRzKGRzdF9hZGRyKTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KmNtZCsrID0gKCh1cHBlcl8zMl9iaXRzKGRzdF9hZGRyKSAmIDB4RkZGRikgfAo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkc3RfbW9jcyA8 PCBYWV9DVFJMX1NVUkZfTU9DU19TSElGVCkpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzcmNfYWRkciArPSBTWl82NE07Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRzdF9hZGRyICs9IFNaXzY0TTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaSAtPSBOVU1fQ0NTX0JMS1NfUEVSX1hGRVI7Cj4gPiA+ICvCoMKgwqDCoMKgwqAgfSB3 aGlsZSAoaSA+IDApOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGNtZDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiDCoHN0YXRpYyBpbnQgZW1pdF9jb3B5KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTMyIGRzdF9vZmZzZXQsIHUzMiBzcmNfb2Zmc2V0LCBpbnQgc2l6ZSkKPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgZHN0X2lzX2xtZW0sIHUzMiBkc3Rf b2Zmc2V0LAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9v bCBzcmNfaXNfbG1lbSwgdTMyIHNyY19vZmZzZXQsIGludCBzaXplKQo+ID4gPiDCoHsKPiA+ID4g K8KgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJxLT5lbmdpbmUt Pmk5MTU7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIGNvbnN0IGludCB2ZXIgPSBHUkFQSElDU19WRVIo cnEtPmVuZ2luZS0+aTkxNSk7Cj4gPiA+IMKgwqDCoMKgwqDCoMKgIHUzMiBpbnN0YW5jZSA9IHJx LT5lbmdpbmUtPmluc3RhbmNlOwo+ID4gPiArwqDCoMKgwqDCoMKgIHUzMiBudW1fY2NzX2Jsa3Ms IGNjc19yaW5nX3NpemU7Cj4gPiA+ICvCoMKgwqDCoMKgwqAgdTggc3JjX2FjY2VzcywgZHN0X2Fj Y2VzczsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgdTMyICpjczsKPiA+ID4gCj4gPiA+IC3CoMKgwqDC oMKgwqAgY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCB2ZXIgPj0gOCA/IDEwIDogNik7Cj4gPiA+ ICvCoMKgwqDCoMKgwqAgY2NzX3Jpbmdfc2l6ZSA9ICgoc3JjX2lzX2xtZW0gfHwgZHN0X2lzX2xt ZW0pICYmCj4gPiA+IEhBU19GTEFUX0NDUyhpOTE1KSkgPwo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYWxjX2N0cmxfc3VyZl9pbnN0cl9zaXpl KGk5MTUsIHNpemUpIDoKPiA+ID4gMDsKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgIGNzID0g aW50ZWxfcmluZ19iZWdpbihycSwgdmVyID49IDggPyAxMCArIGNjc19yaW5nX3NpemUgOgo+ID4g PiA2KTsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihjcykpCj4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4gPiA+IAo+ID4gPiBA QCAtNDkyLDYgKzYyNCwyNSBAQCBzdGF0aWMgaW50IGVtaXRfY29weShzdHJ1Y3QgaTkxNV9yZXF1 ZXN0Cj4gPiA+ICpycSwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysr ID0gc3JjX29mZnNldDsKPiA+ID4gwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiAKPiA+ID4gK8KgwqDC oMKgwqDCoCBpZiAoY2NzX3Jpbmdfc2l6ZSkgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiBUT0RPOiBNaWdyYXRpb24gbmVlZHMgdG8gYmUgaGFuZGxlZCB3aXRoCj4gPiA+ IHJlc29sdmUKPiA+ID4gb2YgY29tcHJlc3NlZCBkYXRhICovCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG51bV9jY3NfYmxrcyA9IChHRVRfQ0NTX1NJWkUoaTkxNSwgc2l6ZSkg Kwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIE5VTV9DQ1NfQllURVNfUEVSX0JMT0NLIC0gMSkgPj4KPiA+ID4gODsKPiA+ ID4gKwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmNfYWNjZXNzID0gIXNy Y19pc19sbWVtICYmIGRzdF9pc19sbWVtOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkc3RfYWNjZXNzID0gIXNyY19hY2Nlc3M7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNyY19hY2Nlc3MpIC8qIFN3YXBpbiBvZiBjb21wcmVzc2Vk IGRhdGEgKi8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNyY19vZmZzZXQgKz0gc2l6ZTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZWxzZQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZHN0X29mZnNldCArPSBzaXplOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNzID0gX2k5MTVfY3RybF9zdXJmX2NvcHlfYmx0KGNzLCBzcmNfb2Zmc2V0LAo+ ID4gPiBkc3Rfb2Zmc2V0LAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz cmNfYWNjZXNzLAo+ID4gPiBkc3RfYWNjZXNzLAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAxLCAxLAo+ID4gPiBudW1fY2NzX2Jsa3MpOwo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjcyA9IGk5MTVfZmx1c2hfZHcoY3MsIGRzdF9vZmZzZXQsIE1JX0ZM VVNIX0xMQyB8Cj4gPiA+IE1JX0ZMVVNIX0NDUyk7Cj4gPiA+ICvCoMKgwqDCoMKgwqAgfQo+ID4g PiArCj4gPiA+IMKgwqDCoMKgwqDCoMKgIGludGVsX3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ID4g PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ID4gwqB9Cj4gPiA+IEBAIC01NzgsNyArNzI5 LDggQEAgaW50ZWxfY29udGV4dF9taWdyYXRlX2NvcHkoc3RydWN0Cj4gPiA+IGludGVsX2NvbnRl eHQKPiA+ID4gKmNlLAo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGVy cikKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIG91dF9ycTsKPiA+ID4gCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVy ciA9IGVtaXRfY29weShycSwgZHN0X29mZnNldCwgc3JjX29mZnNldCwgbGVuKTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gZW1pdF9jb3B5KHJxLCBkc3RfaXNfbG1l bSwgZHN0X29mZnNldCwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmNfaXNfbG1lbSwgc3JjX29mZnNldCwgbGVuKTsK PiA+ID4gCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBBcmJpdHJhdGlv biBpcyByZS1lbmFibGVkIGJldHdlZW4gcmVxdWVzdHMuICovCj4gPiA+IMKgb3V0X3JxOgo+ID4g PiBAQCAtNTk2LDEzMSArNzQ4LDYgQEAgaW50ZWxfY29udGV4dF9taWdyYXRlX2NvcHkoc3RydWN0 Cj4gPiA+IGludGVsX2NvbnRleHQKPiA+ID4gKmNlLAo+ID4gPiDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gZXJyOwo+ID4gPiDCoH0KPiA+ID4gCj4gPiA+IC0vKioKPiA+ID4gLSAqIERPQzogRmxhdC1D Q1MgLSBNZW1vcnkgY29tcHJlc3Npb24gZm9yIExvY2FsIG1lbW9yeQo+ID4gPiAtICoKPiA+ID4g LSAqIE9uIFhlLUhQIGFuZCBsYXRlciBkZXZpY2VzLCB3ZSB1c2UgZGVkaWNhdGVkIGNvbXByZXNz aW9uCj4gPiA+IGNvbnRyb2wKPiA+ID4gc3RhdGUgKENDUykKPiA+ID4gLSAqIHN0b3JlZCBpbiBs b2NhbCBtZW1vcnkgZm9yIGVhY2ggc3VyZmFjZSwgdG8gc3VwcG9ydCB0aGUgM0QKPiA+ID4gYW5k Cj4gPiA+IG1lZGlhCj4gPiA+IC0gKiBjb21wcmVzc2lvbiBmb3JtYXRzLgo+ID4gPiAtICoKPiA+ ID4gLSAqIFRoZSBtZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSBDQ1Mgb2YgdGhlIGVudGlyZSBsb2Nh bCBtZW1vcnkgaXMKPiA+ID4gMS8yNTYgb2YgdGhlCj4gPiA+IC0gKiBsb2NhbCBtZW1vcnkgc2l6 ZS4gU28gYmVmb3JlIHRoZSBrZXJuZWwgYm9vdCwgdGhlIHJlcXVpcmVkCj4gPiA+IG1lbW9yeQo+ ID4gPiBpcyByZXNlcnZlZAo+ID4gPiAtICogZm9yIHRoZSBDQ1MgZGF0YSBhbmQgYSBzZWN1cmUg cmVnaXN0ZXIgd2lsbCBiZSBwcm9ncmFtbWVkCj4gPiA+IHdpdGgKPiA+ID4gdGhlIENDUyBiYXNl Cj4gPiA+IC0gKiBhZGRyZXNzLgo+ID4gPiAtICoKPiA+ID4gLSAqIEZsYXQgQ0NTIGRhdGEgbmVl ZHMgdG8gYmUgY2xlYXJlZCB3aGVuIGEgbG1lbSBvYmplY3QgaXMKPiA+ID4gYWxsb2NhdGVkLgo+ ID4gPiAtICogQW5kIENDUyBkYXRhIGNhbiBiZSBjb3BpZWQgaW4gYW5kIG91dCBvZiBDQ1MgcmVn aW9uIHRocm91Z2gKPiA+ID4gLSAqIFhZX0NUUkxfU1VSRl9DT1BZX0JMVC4gQ1BVIGNhbid0IGFj Y2VzcyB0aGUgQ0NTIGRhdGEKPiA+ID4gZGlyZWN0bHkuCj4gPiA+IC0gKgo+ID4gPiAtICogV2hl biB3ZSBleGF1c3QgdGhlIGxtZW0sIGlmIHRoZSBvYmplY3QncyBwbGFjZW1lbnRzIHN1cHBvcnQK PiA+ID4gc21lbSwKPiA+ID4gdGhlbiB3ZSBjYW4KPiA+ID4gLSAqIGRpcmVjdGx5IGRlY29tcHJl c3MgdGhlIGNvbXByZXNzZWQgbG1lbSBvYmplY3QgaW50byBzbWVtIGFuZAo+ID4gPiBzdGFydCB1 c2luZyBpdAo+ID4gPiAtICogZnJvbSBzbWVtIGl0c2VsZi4KPiA+ID4gLSAqCj4gPiA+IC0gKiBC dXQgd2hlbiB3ZSBuZWVkIHRvIHN3YXBvdXQgdGhlIGNvbXByZXNzZWQgbG1lbSBvYmplY3QgaW50 byBhCj4gPiA+IHNtZW0gcmVnaW9uCj4gPiA+IC0gKiB0aG91Z2ggb2JqZWN0cycgcGxhY2VtZW50 IGRvZXNuJ3Qgc3VwcG9ydCBzbWVtLCB0aGVuIHdlIGNvcHkKPiA+ID4gdGhlCj4gPiA+IGxtZW0g Y29udGVudAo+ID4gPiAtICogYXMgaXQgaXMgaW50byBzbWVtIHJlZ2lvbiBhbG9uZyB3aXRoIGNj cyBkYXRhICh1c2luZwo+ID4gPiBYWV9DVFJMX1NVUkZfQ09QWV9CTFQpLgo+ID4gPiAtICogV2hl biB0aGUgb2JqZWN0IGlzIHJlZmVycmVkLCBsbWVtIGNvbnRlbnQgd2lsbCBiZSBzd2FwZWQgaW4K PiA+ID4gYWxvbmcKPiA+ID4gd2l0aAo+ID4gPiAtICogcmVzdG9yYXRpb24gb2YgdGhlIENDUyBk YXRhICh1c2luZyBYWV9DVFJMX1NVUkZfQ09QWV9CTFQpIGF0Cj4gPiA+IGNvcnJlc3BvbmRpbmcK PiA+ID4gLSAqIGxvY2F0aW9uLgo+ID4gPiAtICoKPiA+ID4gLSAqCj4gPiA+IC0gKiBGbGF0LUND UyBNb2RpZmllcnMgZm9yIGRpZmZlcmVudCBjb21wcmVzc2lvbiBmb3JtYXRzCj4gPiA+IC0gKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ IC0gKgo+ID4gPiAtICogSTkxNV9GT1JNQVRfTU9EX0ZfVElMRURfREcyX1JDX0NDUyAtIHVzZWQg dG8gaW5kaWNhdGUgdGhlCj4gPiA+IGJ1ZmZlcnMKPiA+ID4gb2YgRmxhdCBDQ1MKPiA+ID4gLSAq IHJlbmRlciBjb21wcmVzc2lvbiBmb3JtYXRzLiBUaG91Z2ggdGhlIGdlbmVyYWwgbGF5b3V0IGlz IHNhbWUKPiA+ID4gYXMKPiA+ID4gLSAqIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dFTjEyX1JD X0NDUywgbmV3IGhhc2hpbmcvY29tcHJlc3Npb24KPiA+ID4gYWxnb3JpdGhtIGlzCj4gPiA+IC0g KiB1c2VkLiBSZW5kZXIgY29tcHJlc3Npb24gdXNlcyAxMjggYnl0ZSBjb21wcmVzc2lvbiBibG9j a3MKPiA+ID4gLSAqCj4gPiA+IC0gKiBJOTE1X0ZPUk1BVF9NT0RfRl9USUxFRF9ERzJfTUNfQ0NT IC11c2VkIHRvIGluZGljYXRlIHRoZQo+ID4gPiBidWZmZXJzCj4gPiA+IG9mIEZsYXQgQ0NTCj4g PiA+IC0gKiBtZWRpYSBjb21wcmVzc2lvbiBmb3JtYXRzLiBUaG91Z2ggdGhlIGdlbmVyYWwgbGF5 b3V0IGlzIHNhbWUKPiA+ID4gYXMKPiA+ID4gLSAqIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUywgbmV3IGhhc2hpbmcvY29tcHJlc3Npb24KPiA+ID4gYWxnb3JpdGhtIGlzCj4g PiA+IC0gKiB1c2VkLiBNZWRpYSBjb21wcmVzc2lvbiB1c2VzIDI1NiBieXRlIGNvbXByZXNzaW9u IGJsb2Nrcy4KPiA+ID4gLSAqCj4gPiA+IC0gKiBJOTE1X0ZPUk1BVF9NT0RfRl9USUxFRF9ERzJf UkNfQ0NTX0NDIC0gdXNlZCB0byBpbmRpY2F0ZSB0aGUKPiA+ID4gYnVmZmVycyBvZiBGbGF0Cj4g PiA+IC0gKiBDQ1MgY2xlYXIgY29sb3IgcmVuZGVyIGNvbXByZXNzaW9uIGZvcm1hdHMuIFVuaWZp ZWQKPiA+ID4gY29tcHJlc3Npb24KPiA+ID4gZm9ybWF0IGZvcgo+ID4gPiAtICogY2xlYXIgY29s b3IgcmVuZGVyIGNvbXByZXNzaW9uLiBUaGUgZ2VucmFsIGxheW91dCBpcyBhIHRpbGVkCj4gPiA+ IGxheW91dCB1c2luZwo+ID4gPiAtICogNEtiIHRpbGVzIGkuZSBUaWxlNCBsYXlvdXQuCj4gPiA+ IC0gKi8KPiA+ID4gLQo+ID4gPiAtc3RhdGljIGlubGluZSB1MzIgKmk5MTVfZmx1c2hfZHcodTMy ICpjbWQsIHU2NCBkc3QsIHUzMiBmbGFncykKPiA+ID4gLXsKPiA+ID4gLcKgwqDCoMKgwqDCoCAv KiBNYXNrIHRoZSAzIExTQiB0byB1c2UgdGhlIFBQR1RUIGFkZHJlc3Mgc3BhY2UgKi8KPiA+ID4g LcKgwqDCoMKgwqDCoCAqY21kKysgPSBNSV9GTFVTSF9EVyB8IGZsYWdzOwo+ID4gPiAtwqDCoMKg wqDCoMKgICpjbWQrKyA9IGxvd2VyXzMyX2JpdHMoZHN0KTsKPiA+ID4gLcKgwqDCoMKgwqDCoCAq Y21kKysgPSB1cHBlcl8zMl9iaXRzKGRzdCk7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoMKgwqDCoCBy ZXR1cm4gY21kOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC1zdGF0aWMgdTMyIGNhbGNfY3RybF9z dXJmX2luc3RyX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUKPiA+ID4gKmk5MTUsCj4gPiA+ IGludCBzaXplKQo+ID4gPiAtewo+ID4gPiAtwqDCoMKgwqDCoMKgIHUzMiBudW1fY21kcywgbnVt X2Jsa3MsIHRvdGFsX3NpemU7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoMKgwqDCoCBpZiAoIUdFVF9D Q1NfU0laRShpOTE1LCBzaXplKSkKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIDA7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoMKgwqDCoCAvKgo+ID4gPiAtwqDCoMKgwqDC oMKgwqAgKiBYWV9DVFJMX1NVUkZfQ09QWV9CTFQgdHJhbnNmZXJzIENDUyBpbiAyNTYgYnl0ZQo+ ID4gPiAtwqDCoMKgwqDCoMKgwqAgKiBibG9ja3MuIG9uZSBYWV9DVFJMX1NVUkZfQ09QWV9CTFQg Y29tbWFuZCBjYW4KPiA+ID4gLcKgwqDCoMKgwqDCoMKgICogdHJuYXNmZXIgdXB0byAxMDI0IGJs b2Nrcy4KPiA+ID4gLcKgwqDCoMKgwqDCoMKgICovCj4gPiA+IC3CoMKgwqDCoMKgwqAgbnVtX2Js a3MgPSBHRVRfQ0NTX1NJWkUoaTkxNSwgc2l6ZSk7Cj4gPiA+IC3CoMKgwqDCoMKgwqAgbnVtX2Nt ZHMgPSAobnVtX2Jsa3MgKyAoTlVNX0NDU19CTEtTX1BFUl9YRkVSIC0gMSkpID4+Cj4gPiA+IDEw Owo+ID4gPiAtwqDCoMKgwqDCoMKgIHRvdGFsX3NpemUgPSAoWFlfQ1RSTF9TVVJGX0lOU1RSX1NJ WkUpICogbnVtX2NtZHM7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoMKgwqDCoCAvKgo+ID4gPiAtwqDC oMKgwqDCoMKgwqAgKiBXZSBuZWVkIHRvIGFkZCBhIGZsdXNoIGJlZm9yZSBhbmQgYWZ0ZXIKPiA+ ID4gLcKgwqDCoMKgwqDCoMKgICogWFlfQ1RSTF9TVVJGX0NPUFlfQkxUCj4gPiA+IC3CoMKgwqDC oMKgwqDCoCAqLwo+ID4gPiAtwqDCoMKgwqDCoMKgIHRvdGFsX3NpemUgKz0gMiAqIE1JX0ZMVVNI X0RXX1NJWkU7Cj4gPiA+IC3CoMKgwqDCoMKgwqAgcmV0dXJuIHRvdGFsX3NpemU7Cj4gPiA+IC19 Cj4gPiA+IC0KPiA+ID4gLXN0YXRpYyB1MzIgKl9pOTE1X2N0cmxfc3VyZl9jb3B5X2JsdCh1MzIg KmNtZCwgdTY0IHNyY19hZGRyLCB1NjQKPiA+ID4gZHN0X2FkZHIsCj4gPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHU4IHNyY19tZW1fYWNjZXNzLCB1OAo+ID4gPiBkc3RfbWVtX2FjY2VzcywKPiA+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50IHNyY19tb2NzLCBpbnQgZHN0X21vY3MsCj4gPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHUxNiBudW1fY2NzX2Jsb2NrcykKPiA+ID4gLXsKPiA+ID4gLcKgwqDCoMKgwqDCoCBpbnQg aSA9IG51bV9jY3NfYmxvY2tzOwo+ID4gPiAtCj4gPiA+IC3CoMKgwqDCoMKgwqAgLyoKPiA+ID4g LcKgwqDCoMKgwqDCoMKgICogVGhlIFhZX0NUUkxfU1VSRl9DT1BZX0JMVCBpbnN0cnVjdGlvbiBp cyB1c2VkIHRvIGNvcHkKPiA+ID4gdGhlCj4gPiA+IENDUwo+ID4gPiAtwqDCoMKgwqDCoMKgwqAg KiBkYXRhIGluIGFuZCBvdXQgb2YgdGhlIENDUyByZWdpb24uCj4gPiA+IC3CoMKgwqDCoMKgwqDC oCAqCj4gPiA+IC3CoMKgwqDCoMKgwqDCoCAqIFdlIGNhbiBjb3B5IGF0IG1vc3QgMTAyNCBibG9j a3Mgb2YgMjU2IGJ5dGVzIHVzaW5nIG9uZQo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgKiBYWV9DVFJM X1NVUkZfQ09QWV9CTFQgaW5zdHJ1Y3Rpb24uCj4gPiA+IC3CoMKgwqDCoMKgwqDCoCAqCj4gPiA+ IC3CoMKgwqDCoMKgwqDCoCAqIEluIGNhc2Ugd2UgbmVlZCB0byBjb3B5IG1vcmUgdGhhbiAxMDI0 IGJsb2Nrcywgd2UgbmVlZAo+ID4gPiB0bwo+ID4gPiBhZGQKPiA+ID4gLcKgwqDCoMKgwqDCoMKg ICogYW5vdGhlciBpbnN0cnVjdGlvbiB0byB0aGUgc2FtZSBiYXRjaCBidWZmZXIuCj4gPiA+IC3C oMKgwqDCoMKgwqDCoCAqCj4gPiA+IC3CoMKgwqDCoMKgwqDCoCAqIDEwMjQgYmxvY2tzIG9mIDI1 NiBieXRlcyBvZiBDQ1MgcmVwcmVzZW50IGEgdG90YWwKPiA+ID4gMjU2S0Igb2YKPiA+ID4gQ0NT Lgo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgKgo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgKiAyNTYgS0Ig b2YgQ0NTIHJlcHJlc2VudHMgMjU2ICogMjU2IEtCID0gNjQgTUIgb2YgTE1FTS4KPiA+ID4gLcKg wqDCoMKgwqDCoMKgICovCj4gPiA+IC3CoMKgwqDCoMKgwqAgZG8gewo+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogV2UgdXNlIGxvZ2ljYWwgQU5EIHdpdGggMTAyMyBzaW5jZSB0aGUgc2l6ZQo+ID4gPiBm aWVsZAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdGFrZXMgdmFsdWVz IHdoaWNoIGlzIGluIHRoZSByYW5nZSBvZiAwIC0gMTAyMwo+ID4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICovCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpj bWQrKyA9ICgoWFlfQ1RSTF9TVVJGX0NPUFlfQkxUKSB8Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHNyY19tZW1fYWNjZXNzIDw8Cj4gPiA+ IFNSQ19BQ0NFU1NfVFlQRV9TSElGVCkgfAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkc3RfbWVtX2FjY2VzcyA8PAo+ID4gPiBEU1RfQUND RVNTX1RZUEVfU0hJRlQpIHwKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoKChpIC0gMSkgJiAxMDIzKSA8PCBDQ1NfU0laRV9TSElGVCkpOwo+ ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY21kKysgPSBsb3dlcl8zMl9iaXRz KHNyY19hZGRyKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNtZCsrID0g KCh1cHBlcl8zMl9iaXRzKHNyY19hZGRyKSAmIDB4RkZGRikgfAo+ID4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzcmNfbW9jcyA8PCBYWV9DVFJM X1NVUkZfTU9DU19TSElGVCkpOwo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq Y21kKysgPSBsb3dlcl8zMl9iaXRzKGRzdF9hZGRyKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKmNtZCsrID0gKCh1cHBlcl8zMl9iaXRzKGRzdF9hZGRyKSAmIDB4RkZGRikg fAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChkc3RfbW9jcyA8PCBYWV9DVFJMX1NVUkZfTU9DU19TSElGVCkpOwo+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzcmNfYWRkciArPSBTWl82NE07Cj4gPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRzdF9hZGRyICs9IFNaXzY0TTsKPiA+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaSAtPSBOVU1fQ0NTX0JMS1NfUEVSX1hGRVI7Cj4gPiA+IC3CoMKg wqDCoMKgwqAgfSB3aGlsZSAoaSA+IDApOwo+ID4gPiAtCj4gPiA+IC3CoMKgwqDCoMKgwqAgcmV0 dXJuIGNtZDsKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiDCoHN0YXRpYyBpbnQgZW1pdF9jbGVhcihz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHU2NCBvZmZzZXQsCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgc2l6ZSwKPiA+IAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbnRlbCBT d2VkZW4gQUIKUmVnaXN0ZXJlZCBPZmZpY2U6IElzYWZqb3Jkc2dhdGFuIDMwQiwgMTY0IDQwIEtp c3RhLCBTdG9ja2hvbG0sIFN3ZWRlbgpSZWdpc3RyYXRpb24gTnVtYmVyOiA1NTYxODktNjAyNwoK VGhpcyBlLW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBtYXkgY29udGFpbiBjb25maWRlbnRpYWwg bWF0ZXJpYWwgZm9yCnRoZSBzb2xlIHVzZSBvZiB0aGUgaW50ZW5kZWQgcmVjaXBpZW50KHMpLiBB bnkgcmV2aWV3IG9yIGRpc3RyaWJ1dGlvbgpieSBvdGhlcnMgaXMgc3RyaWN0bHkgcHJvaGliaXRl ZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkCnJlY2lwaWVudCwgcGxlYXNlIGNvbnRhY3Qg dGhlIHNlbmRlciBhbmQgZGVsZXRlIGFsbCBjb3BpZXMuCg==