From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Bottomley Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 Date: Thu, 10 Jul 2014 22:12:46 +0000 Message-ID: <1405030365.2851.2.camel@jarvis.lan> References: <1404866789-26910-1-git-send-email-kys@microsoft.com> <1404866812-26950-1-git-send-email-kys@microsoft.com> <1404866812-26950-4-git-send-email-kys@microsoft.com> <20140709084300.GD6012@infradead.org> <1404935792.2184.5.camel@dabdike.int.hansenpartnership.com> <2f3ae589e6f149acbe4c5dd79f905971@BY2PR03MB299.namprd03.prod.outlook.com> <1404944843.2184.8.camel@dabdike.int.hansenpartnership.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Language: en-US Content-ID: <07553DE5B9811A41B231046AE692FFFB@sw.swsoft.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: driverdev-devel-bounces@linuxdriverproject.org To: "kys@microsoft.com" Cc: "linux-scsi@vger.kernel.org" , "jasowang@redhat.com" , "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" , "ohering@suse.com" , "hch@infradead.org" , "mkp@mkp.net" , "apw@canonical.com" , "devel@linuxdriverproject.org" List-Id: linux-scsi@vger.kernel.org On Thu, 2014-07-10 at 21:02 +0000, KY Srinivasan wrote: > > > -----Original Message----- > > From: James Bottomley [mailto:jbottomley@parallels.com] > > Sent: Wednesday, July 9, 2014 3:27 PM > > To: KY Srinivasan > > Cc: linux-kernel@vger.kernel.org; mkp@mkp.net; hch@infradead.org; > > devel@linuxdriverproject.org; apw@canonical.com; stable@vger.kernel.org; > > linux-scsi@vger.kernel.org; ohering@suse.com; jasowang@redhat.com > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 > > > > On Wed, 2014-07-09 at 21:14 +0000, KY Srinivasan wrote: > > > > > > > -----Original Message----- > > > > From: James Bottomley [mailto:jbottomley@parallels.com] > > > > Sent: Wednesday, July 9, 2014 12:57 PM > > > > To: KY Srinivasan > > > > Cc: linux-kernel@vger.kernel.org; hch@infradead.org; > > > > devel@linuxdriverproject.org; apw@canonical.com; > > > > stable@vger.kernel.org; linux-scsi@vger.kernel.org; > > > > ohering@suse.com; jasowang@redhat.com > > > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter > > > > WRITE_SAME_16 > > > > > > > > On Wed, 2014-07-09 at 19:52 +0000, KY Srinivasan wrote: > > > > > > > > > > > -----Original Message----- > > > > > > From: Christoph Hellwig [mailto:hch@infradead.org] > > > > > > Sent: Wednesday, July 9, 2014 1:43 AM > > > > > > To: KY Srinivasan > > > > > > Cc: linux-kernel@vger.kernel.org; devel@linuxdriverproject.org; > > > > > > ohering@suse.com; jbottomley@parallels.com; > > jasowang@redhat.com; > > > > > > apw@canonical.com; linux-scsi@vger.kernel.org; > > > > > > stable@vger.kernel.org > > > > > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter > > > > > > WRITE_SAME_16 > > > > > > > > > > > > On Tue, Jul 08, 2014 at 05:46:48PM -0700, K. Y. Srinivasan wrote: > > > > > > > Host does not handle WRITE_SAME_16; filter this command out. > > > > > > > This patch is required to handle large devices (greater than 2 TB > > disks). > > > > > > > > > > > > Storvsc already sets the no_write_same flag, where is the > > > > > > command coming from? > > > > > > > > > > In spite of this flag, I see WRITE_SAME_16 being issued when I > > > > > format a device bigger than 2 TB; I tried both xfs and ext4. > > > > > Windows hosts currently do not handle unsupported commands > > > > > correctly - The information returned is not sufficient to effect recovery > > in the Linux guest. > > > > While this may be addressed in future hosts, this patch fixes the problem. > > > > > > > > What Christoph means is that this looks like a bug somewhere in SCSI > > itself. > > > > That means we need to find it and kill it, not add workarounds to > > > > every driver that sets no_write_same ... > > > > > > James, > > > > > > I will try to isolate this issue in the SCSI stack. If it is ok with > > > you guys, I would still want to filter WRITE_SAME_16 (as we currently > > > do WRITE_SAME) in our driver since this would address the problem for a > > large number of customers on our platform. > > > > If we fix it at source, why would there be any need to filter? That's the > > reason the no_write_same flag was introduced. If we can find and fix the > > bug, it can go back into the stable trees as a bug fix, hence nothing should > > ever emit write_same(10 or 16) and additional driver code is redundant (and > > counter productive, since if this ever breaks again you're our best canary). > > > > This looks like it might be the problem but Martin should confirm (I think the > > problem comes to us from the RC16 code which unconditionally sets WS16). > > > > James > > James, > > This patch works for me; are you planning on committing this patch. OK, if we go with this we can add your tested by. It's not going in until Martin takes a look because there may be a better way of doing this. James From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753657AbaGJWM5 (ORCPT ); Thu, 10 Jul 2014 18:12:57 -0400 Received: from mx2.parallels.com ([199.115.105.18]:46907 "EHLO mx2.parallels.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753295AbaGJWMx (ORCPT ); Thu, 10 Jul 2014 18:12:53 -0400 From: James Bottomley To: "kys@microsoft.com" CC: "linux-kernel@vger.kernel.org" , "mkp@mkp.net" , "apw@canonical.com" , "devel@linuxdriverproject.org" , "hch@infradead.org" , "stable@vger.kernel.org" , "linux-scsi@vger.kernel.org" , "ohering@suse.com" , "jasowang@redhat.com" Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 Thread-Topic: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 Thread-Index: AQHPmwbc2vh72TcerE+9u7O+On3hT5uXbYYAgACybACAAH8bAP//jcAwgACcZoCAAQTgMIAAiV6A Date: Thu, 10 Jul 2014 22:12:46 +0000 Message-ID: <1405030365.2851.2.camel@jarvis.lan> References: <1404866789-26910-1-git-send-email-kys@microsoft.com> <1404866812-26950-1-git-send-email-kys@microsoft.com> <1404866812-26950-4-git-send-email-kys@microsoft.com> <20140709084300.GD6012@infradead.org> <1404935792.2184.5.camel@dabdike.int.hansenpartnership.com> <2f3ae589e6f149acbe4c5dd79f905971@BY2PR03MB299.namprd03.prod.outlook.com> <1404944843.2184.8.camel@dabdike.int.hansenpartnership.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [50.46.103.107] Content-Type: text/plain; charset="utf-8" Content-ID: <07553DE5B9811A41B231046AE692FFFB@sw.swsoft.com> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id s6AMD7kG013667 On Thu, 2014-07-10 at 21:02 +0000, KY Srinivasan wrote: > > > -----Original Message----- > > From: James Bottomley [mailto:jbottomley@parallels.com] > > Sent: Wednesday, July 9, 2014 3:27 PM > > To: KY Srinivasan > > Cc: linux-kernel@vger.kernel.org; mkp@mkp.net; hch@infradead.org; > > devel@linuxdriverproject.org; apw@canonical.com; stable@vger.kernel.org; > > linux-scsi@vger.kernel.org; ohering@suse.com; jasowang@redhat.com > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 > > > > On Wed, 2014-07-09 at 21:14 +0000, KY Srinivasan wrote: > > > > > > > -----Original Message----- > > > > From: James Bottomley [mailto:jbottomley@parallels.com] > > > > Sent: Wednesday, July 9, 2014 12:57 PM > > > > To: KY Srinivasan > > > > Cc: linux-kernel@vger.kernel.org; hch@infradead.org; > > > > devel@linuxdriverproject.org; apw@canonical.com; > > > > stable@vger.kernel.org; linux-scsi@vger.kernel.org; > > > > ohering@suse.com; jasowang@redhat.com > > > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter > > > > WRITE_SAME_16 > > > > > > > > On Wed, 2014-07-09 at 19:52 +0000, KY Srinivasan wrote: > > > > > > > > > > > -----Original Message----- > > > > > > From: Christoph Hellwig [mailto:hch@infradead.org] > > > > > > Sent: Wednesday, July 9, 2014 1:43 AM > > > > > > To: KY Srinivasan > > > > > > Cc: linux-kernel@vger.kernel.org; devel@linuxdriverproject.org; > > > > > > ohering@suse.com; jbottomley@parallels.com; > > jasowang@redhat.com; > > > > > > apw@canonical.com; linux-scsi@vger.kernel.org; > > > > > > stable@vger.kernel.org > > > > > > Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter > > > > > > WRITE_SAME_16 > > > > > > > > > > > > On Tue, Jul 08, 2014 at 05:46:48PM -0700, K. Y. Srinivasan wrote: > > > > > > > Host does not handle WRITE_SAME_16; filter this command out. > > > > > > > This patch is required to handle large devices (greater than 2 TB > > disks). > > > > > > > > > > > > Storvsc already sets the no_write_same flag, where is the > > > > > > command coming from? > > > > > > > > > > In spite of this flag, I see WRITE_SAME_16 being issued when I > > > > > format a device bigger than 2 TB; I tried both xfs and ext4. > > > > > Windows hosts currently do not handle unsupported commands > > > > > correctly - The information returned is not sufficient to effect recovery > > in the Linux guest. > > > > While this may be addressed in future hosts, this patch fixes the problem. > > > > > > > > What Christoph means is that this looks like a bug somewhere in SCSI > > itself. > > > > That means we need to find it and kill it, not add workarounds to > > > > every driver that sets no_write_same ... > > > > > > James, > > > > > > I will try to isolate this issue in the SCSI stack. If it is ok with > > > you guys, I would still want to filter WRITE_SAME_16 (as we currently > > > do WRITE_SAME) in our driver since this would address the problem for a > > large number of customers on our platform. > > > > If we fix it at source, why would there be any need to filter? That's the > > reason the no_write_same flag was introduced. If we can find and fix the > > bug, it can go back into the stable trees as a bug fix, hence nothing should > > ever emit write_same(10 or 16) and additional driver code is redundant (and > > counter productive, since if this ever breaks again you're our best canary). > > > > This looks like it might be the problem but Martin should confirm (I think the > > problem comes to us from the RC16 code which unconditionally sets WS16). > > > > James > > James, > > This patch works for me; are you planning on committing this patch. OK, if we go with this we can add your tested by. It's not going in until Martin takes a look because there may be a better way of doing this. James {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: James Bottomley To: "kys@microsoft.com" CC: "linux-kernel@vger.kernel.org" , "mkp@mkp.net" , "apw@canonical.com" , "devel@linuxdriverproject.org" , "hch@infradead.org" , "stable@vger.kernel.org" , "linux-scsi@vger.kernel.org" , "ohering@suse.com" , "jasowang@redhat.com" Subject: Re: [PATCH 4/8] Drivers: scsi: storvsc: Filter WRITE_SAME_16 Date: Thu, 10 Jul 2014 22:12:46 +0000 Message-ID: <1405030365.2851.2.camel@jarvis.lan> References: <1404866789-26910-1-git-send-email-kys@microsoft.com> <1404866812-26950-1-git-send-email-kys@microsoft.com> <1404866812-26950-4-git-send-email-kys@microsoft.com> <20140709084300.GD6012@infradead.org> <1404935792.2184.5.camel@dabdike.int.hansenpartnership.com> <2f3ae589e6f149acbe4c5dd79f905971@BY2PR03MB299.namprd03.prod.outlook.com> <1404944843.2184.8.camel@dabdike.int.hansenpartnership.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <07553DE5B9811A41B231046AE692FFFB@sw.swsoft.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: T24gVGh1LCAyMDE0LTA3LTEwIGF0IDIxOjAyICswMDAwLCBLWSBTcmluaXZhc2FuIHdyb3RlOg0K PiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IEphbWVzIEJvdHRv bWxleSBbbWFpbHRvOmpib3R0b21sZXlAcGFyYWxsZWxzLmNvbV0NCj4gPiBTZW50OiBXZWRuZXNk YXksIEp1bHkgOSwgMjAxNCAzOjI3IFBNDQo+ID4gVG86IEtZIFNyaW5pdmFzYW4NCj4gPiBDYzog bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbWtwQG1rcC5uZXQ7IGhjaEBpbmZyYWRlYWQu b3JnOw0KPiA+IGRldmVsQGxpbnV4ZHJpdmVycHJvamVjdC5vcmc7IGFwd0BjYW5vbmljYWwuY29t OyBzdGFibGVAdmdlci5rZXJuZWwub3JnOw0KPiA+IGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3Jn OyBvaGVyaW5nQHN1c2UuY29tOyBqYXNvd2FuZ0ByZWRoYXQuY29tDQo+ID4gU3ViamVjdDogUmU6 IFtQQVRDSCA0LzhdIERyaXZlcnM6IHNjc2k6IHN0b3J2c2M6IEZpbHRlciBXUklURV9TQU1FXzE2 DQo+ID4gDQo+ID4gT24gV2VkLCAyMDE0LTA3LTA5IGF0IDIxOjE0ICswMDAwLCBLWSBTcmluaXZh c2FuIHdyb3RlOg0KPiA+ID4NCj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g PiA+ID4gRnJvbTogSmFtZXMgQm90dG9tbGV5IFttYWlsdG86amJvdHRvbWxleUBwYXJhbGxlbHMu Y29tXQ0KPiA+ID4gPiBTZW50OiBXZWRuZXNkYXksIEp1bHkgOSwgMjAxNCAxMjo1NyBQTQ0KPiA+ ID4gPiBUbzogS1kgU3Jpbml2YXNhbg0KPiA+ID4gPiBDYzogbGludXgta2VybmVsQHZnZXIua2Vy bmVsLm9yZzsgaGNoQGluZnJhZGVhZC5vcmc7DQo+ID4gPiA+IGRldmVsQGxpbnV4ZHJpdmVycHJv amVjdC5vcmc7IGFwd0BjYW5vbmljYWwuY29tOw0KPiA+ID4gPiBzdGFibGVAdmdlci5rZXJuZWwu b3JnOyBsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZzsNCj4gPiA+ID4gb2hlcmluZ0BzdXNlLmNv bTsgamFzb3dhbmdAcmVkaGF0LmNvbQ0KPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIDQvOF0g RHJpdmVyczogc2NzaTogc3RvcnZzYzogRmlsdGVyDQo+ID4gPiA+IFdSSVRFX1NBTUVfMTYNCj4g PiA+ID4NCj4gPiA+ID4gT24gV2VkLCAyMDE0LTA3LTA5IGF0IDE5OjUyICswMDAwLCBLWSBTcmlu aXZhc2FuIHdyb3RlOg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiA+ID4gPiA+ID4gRnJvbTogQ2hyaXN0b3BoIEhlbGx3aWcgW21haWx0bzpoY2hA aW5mcmFkZWFkLm9yZ10NCj4gPiA+ID4gPiA+IFNlbnQ6IFdlZG5lc2RheSwgSnVseSA5LCAyMDE0 IDE6NDMgQU0NCj4gPiA+ID4gPiA+IFRvOiBLWSBTcmluaXZhc2FuDQo+ID4gPiA+ID4gPiBDYzog bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9y ZzsNCj4gPiA+ID4gPiA+IG9oZXJpbmdAc3VzZS5jb207IGpib3R0b21sZXlAcGFyYWxsZWxzLmNv bTsNCj4gPiBqYXNvd2FuZ0ByZWRoYXQuY29tOw0KPiA+ID4gPiA+ID4gYXB3QGNhbm9uaWNhbC5j b207IGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnOw0KPiA+ID4gPiA+ID4gc3RhYmxlQHZnZXIu a2VybmVsLm9yZw0KPiA+ID4gPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCA0LzhdIERyaXZlcnM6 IHNjc2k6IHN0b3J2c2M6IEZpbHRlcg0KPiA+ID4gPiA+ID4gV1JJVEVfU0FNRV8xNg0KPiA+ID4g PiA+ID4NCj4gPiA+ID4gPiA+IE9uIFR1ZSwgSnVsIDA4LCAyMDE0IGF0IDA1OjQ2OjQ4UE0gLTA3 MDAsIEsuIFkuIFNyaW5pdmFzYW4gd3JvdGU6DQo+ID4gPiA+ID4gPiA+IEhvc3QgZG9lcyBub3Qg aGFuZGxlIFdSSVRFX1NBTUVfMTY7IGZpbHRlciB0aGlzIGNvbW1hbmQgb3V0Lg0KPiA+ID4gPiA+ ID4gPiBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSBsYXJnZSBkZXZpY2VzIChncmVh dGVyIHRoYW4gMiBUQg0KPiA+IGRpc2tzKS4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBTdG9y dnNjIGFscmVhZHkgc2V0cyB0aGUgbm9fd3JpdGVfc2FtZSBmbGFnLCB3aGVyZSBpcyB0aGUNCj4g PiA+ID4gPiA+IGNvbW1hbmQgY29taW5nIGZyb20/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJbiBz cGl0ZSBvZiB0aGlzIGZsYWcsICBJIHNlZSBXUklURV9TQU1FXzE2IGJlaW5nIGlzc3VlZCB3aGVu IEkNCj4gPiA+ID4gPiBmb3JtYXQgYSBkZXZpY2UgYmlnZ2VyIHRoYW4gMiBUQjsgSSB0cmllZCBi b3RoIHhmcyBhbmQgZXh0NC4NCj4gPiA+ID4gPiBXaW5kb3dzIGhvc3RzIGN1cnJlbnRseSBkbyBu b3QgaGFuZGxlIHVuc3VwcG9ydGVkIGNvbW1hbmRzDQo+ID4gPiA+ID4gY29ycmVjdGx5IC0gVGhl IGluZm9ybWF0aW9uIHJldHVybmVkIGlzIG5vdCBzdWZmaWNpZW50IHRvIGVmZmVjdCByZWNvdmVy eQ0KPiA+IGluIHRoZSBMaW51eCBndWVzdC4NCj4gPiA+ID4gV2hpbGUgdGhpcyBtYXkgYmUgYWRk cmVzc2VkIGluIGZ1dHVyZSBob3N0cywgdGhpcyBwYXRjaCBmaXhlcyB0aGUgcHJvYmxlbS4NCj4g PiA+ID4NCj4gPiA+ID4gV2hhdCBDaHJpc3RvcGggbWVhbnMgaXMgdGhhdCB0aGlzIGxvb2tzIGxp a2UgYSBidWcgc29tZXdoZXJlIGluIFNDU0kNCj4gPiBpdHNlbGYuDQo+ID4gPiA+IFRoYXQgbWVh bnMgd2UgbmVlZCB0byBmaW5kIGl0IGFuZCBraWxsIGl0LCBub3QgYWRkIHdvcmthcm91bmRzIHRv DQo+ID4gPiA+IGV2ZXJ5IGRyaXZlciB0aGF0IHNldHMgbm9fd3JpdGVfc2FtZSAuLi4NCj4gPiA+ DQo+ID4gPiBKYW1lcywNCj4gPiA+DQo+ID4gPiBJIHdpbGwgdHJ5IHRvIGlzb2xhdGUgdGhpcyBp c3N1ZSBpbiB0aGUgU0NTSSBzdGFjay4gSWYgaXQgaXMgb2sgd2l0aA0KPiA+ID4geW91IGd1eXMs IEkgd291bGQgc3RpbGwgd2FudCB0byBmaWx0ZXIgV1JJVEVfU0FNRV8xNiAoYXMgd2UgY3VycmVu dGx5DQo+ID4gPiBkbyBXUklURV9TQU1FKSBpbiBvdXIgZHJpdmVyIHNpbmNlIHRoaXMgd291bGQg YWRkcmVzcyB0aGUgcHJvYmxlbSBmb3IgYQ0KPiA+IGxhcmdlIG51bWJlciBvZiBjdXN0b21lcnMg b24gb3VyIHBsYXRmb3JtLg0KPiA+IA0KPiA+IElmIHdlIGZpeCBpdCBhdCBzb3VyY2UsIHdoeSB3 b3VsZCB0aGVyZSBiZSBhbnkgbmVlZCB0byBmaWx0ZXI/ICBUaGF0J3MgdGhlDQo+ID4gcmVhc29u IHRoZSBub193cml0ZV9zYW1lIGZsYWcgd2FzIGludHJvZHVjZWQuICBJZiB3ZSBjYW4gZmluZCBh bmQgZml4IHRoZQ0KPiA+IGJ1ZywgaXQgY2FuIGdvIGJhY2sgaW50byB0aGUgc3RhYmxlIHRyZWVz IGFzIGEgYnVnIGZpeCwgaGVuY2Ugbm90aGluZyBzaG91bGQNCj4gPiBldmVyIGVtaXQgd3JpdGVf c2FtZSgxMCBvciAxNikgYW5kIGFkZGl0aW9uYWwgZHJpdmVyIGNvZGUgaXMgcmVkdW5kYW50IChh bmQNCj4gPiBjb3VudGVyIHByb2R1Y3RpdmUsIHNpbmNlIGlmIHRoaXMgZXZlciBicmVha3MgYWdh aW4geW91J3JlIG91ciBiZXN0IGNhbmFyeSkuDQo+ID4gDQo+ID4gVGhpcyBsb29rcyBsaWtlIGl0 IG1pZ2h0IGJlIHRoZSBwcm9ibGVtIGJ1dCBNYXJ0aW4gc2hvdWxkIGNvbmZpcm0gKEkgdGhpbmsg dGhlDQo+ID4gcHJvYmxlbSBjb21lcyB0byB1cyBmcm9tIHRoZSBSQzE2IGNvZGUgd2hpY2ggdW5j b25kaXRpb25hbGx5IHNldHMgV1MxNikuDQo+ID4gDQo+ID4gSmFtZXMNCj4gDQo+IEphbWVzLA0K PiANCj4gVGhpcyBwYXRjaCB3b3JrcyBmb3IgbWU7IGFyZSB5b3UgcGxhbm5pbmcgb24gY29tbWl0 dGluZyB0aGlzIHBhdGNoLg0KDQpPSywgaWYgd2UgZ28gd2l0aCB0aGlzIHdlIGNhbiBhZGQgeW91 ciB0ZXN0ZWQgYnkuDQoNCkl0J3Mgbm90IGdvaW5nIGluIHVudGlsIE1hcnRpbiB0YWtlcyBhIGxv b2sgYmVjYXVzZSB0aGVyZSBtYXkgYmUgYQ0KYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzLg0KDQpK YW1lcw0KDQo=