From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.28.91.67 with SMTP id p64csp3833779wmb; Tue, 20 Mar 2018 06:28:17 -0700 (PDT) X-Google-Smtp-Source: AG47ELsdmb+pSdCFPSx8VUsShxMlGb8GAlZDKBwDZoQV8mo2OaSQ0rjosmnFNfZ/8510v8fbV87k X-Received: by 10.237.37.246 with SMTP id y51mr24764150qtc.182.1521552497596; Tue, 20 Mar 2018 06:28:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521552497; cv=none; d=google.com; s=arc-20160816; b=pbzAsQrdlRuNBZRH8gRlfVnElSuVIw6a7NGQ+Gsd+Nxg9psyB2ZwJDgpUYEadj4hkS YiClb1Pkex4ZKj9mj6u7YZGboAngubJqDNQFtJ7nyeFcJKzCQTuHjc9sSSib82Vrbcgn ZPRD31IhDstTKWfcCNomWM5liINTlmPOx/iIjZKeXQ92JNdd3SsjWcVM8Pp6/OCQ9y7C K/EM4mYKXyJ85+N5GJ7Y9qu5P1lKaMx9y0LKzBmPwxuGuWVLdSQCWKSCFvIqVgzzHfY4 DLCgoIzHGnOX8t63z60Rbw+9l4Cdp7VoRMf9eQnpTsuTz//ICezmdOTMn74GpdyMdJYd fUIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:in-reply-to:content-disposition :mime-version:references:message-id:to:from:date :arc-authentication-results; bh=HFDrg8qrnZSGy+68J0D7IXzUkGeQkNodAVZT53kVH9I=; b=F0UdHMiwFihVOAm1b5wKBunksOsnGJuAozPHYYh0TpcbIyuo2uRdIfImrYtd6ED0n3 eiPiZ9fhrvxLUQJ5NBqM5h6lSI0CKY0SOhMQcQTv39E/H8F4xxn6/FufTaN3+rZIhTzr dMlXsAhaaBVA54YZFUzxU5PwA+zYxa6waB6okzmiU1fmTt9TfyZYR3Ik68NyIDj72arw gn1kTzvHNCaJtzeQy3aTrisuHxhZ4q0pDvaHa3PLZw1sSL+nnpNcmMj0Bfk9nDSsYwQF tfogADi59gm4k3+8mc+V2TBUqrySzQ1wLVIycBlnUwUiMxO8HUr7flG6KrUDBCRxjOzT 2ltQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id z5si1905727qtz.53.2018.03.20.06.28.17 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 20 Mar 2018 06:28:17 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from localhost ([::1]:48531 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eyHJJ-0008Ax-0x for alex.bennee@linaro.org; Tue, 20 Mar 2018 09:28:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44847) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eyGdg-0005pP-8c for qemu-devel@nongnu.org; Tue, 20 Mar 2018 08:45:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eyGde-00030Z-KO for qemu-devel@nongnu.org; Tue, 20 Mar 2018 08:45:16 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:39682 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eyGdN-0002jH-Dt; Tue, 20 Mar 2018 08:44:57 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 427B84040853; Tue, 20 Mar 2018 12:44:56 +0000 (UTC) Received: from redhat.com (ovpn-121-0.rdu2.redhat.com [10.10.121.0]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7BABE94581; Tue, 20 Mar 2018 12:44:34 +0000 (UTC) Date: Tue, 20 Mar 2018 14:44:34 +0200 From: "Michael S. Tsirkin" To: Daniel =?iso-8859-1?Q?P=2E_Berrang=E9?= Message-ID: <20180320143945-mutt-send-email-mst@kernel.org> References: <1521510562-529051-1-git-send-email-mst@redhat.com> <8f06e1e3-4823-d8e8-43bd-c092c523849e@vivier.eu> <20180320094406.GD4530@redhat.com> <20180320141107-mutt-send-email-mst@kernel.org> <20180320121841.GN4530@redhat.com> <20180320142756-mutt-send-email-mst@kernel.org> <20180320123900.GO4530@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <20180320123900.GO4530@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 20 Mar 2018 12:44:56 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 20 Mar 2018 12:44:56 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'mst@redhat.com' RCPT:'' Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 X-Mailman-Approved-At: Tue, 20 Mar 2018 09:27:42 -0400 Subject: Re: [Qemu-devel] [PATCH] qemu: include generated files with <> and not "" X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Dmitry Fleytman , sheepdog@lists.wpkg.org, Ronnie Sahlberg , Li Zhijian , David Hildenbrand , Jeff Cody , Zhang Chen , Mark Cave-Ayland , qemu-devel@nongnu.org, "Richard W.M. Jones" , Keith Busch , Max Filippov , Gerd Hoffmann , "Edgar E. Iglesias" , Jiri Pirko , Subbaraya Sundeep , Michael Roth , Marcelo Tosatti , Josh Durgin , Stefano Stabellini , Alberto Garcia , zhanghailiang , Ben Warren , Marcel Apfelbaum , Yongbok Kim , Markus Armbruster , Stefan Berger , Christian Borntraeger , kvm@vger.kernel.org, =?iso-8859-1?Q?Herv=E9?= Poussineau , Shannon Zhao , Anthony Perard , Liu Yuan , David Gibson , Jason Wang , Artyom Tarasenko , Thomas Huth , Riku Voipio , Fam Zheng , Eduardo Habkost , Corey Minyard , Amit Shah , Pavel Dovgalyuk , Stefan Weil , Xie Changlong , Alistair Francis , Peter Lieven , "Dr. David Alan Gilbert" , Fabien Chouteau , Greg Kurz , =?iso-8859-1?Q?Marc-Andr=E9?= Lureau , Alex Williamson , qemu-arm@nongnu.org, Peter Chubb , Yuval Shaia , Stefan Hajnoczi , Paolo Bonzini , xen-devel@lists.xenproject.org, John Snow , Richard Henderson , Kevin Wolf , Alexander Graf , qemu-block@nongnu.org, Peter Crosthwaite , Hitoshi Mitake , Wen Congyang , qemu-s390x@nongnu.org, Cornelia Huck , Laurent Vivier , Juan Quintela , Max Reitz , Michael Walle , qemu-ppc@nongnu.org, Andreas =?iso-8859-1?Q?F=E4rber?= , Igor Mammedov , Hannes Reinecke , Aurelien Jarno , Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= Errors-To: qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org Sender: "Qemu-devel" X-TUID: LRKpOWWem7dw On Tue, Mar 20, 2018 at 12:39:00PM +0000, Daniel P. Berrang=E9 wrote: > On Tue, Mar 20, 2018 at 02:28:42PM +0200, Michael S. Tsirkin wrote: > > On Tue, Mar 20, 2018 at 12:18:41PM +0000, Daniel P. Berrang=E9 wrote: > > > On Tue, Mar 20, 2018 at 02:12:24PM +0200, Michael S. Tsirkin wrote: > > > > On Tue, Mar 20, 2018 at 09:44:06AM +0000, Daniel P. Berrang=E9 wr= ote: > > > > > On Tue, Mar 20, 2018 at 09:58:23AM +0100, Laurent Vivier wrote: > > > > > > Le 20/03/2018 =E0 02:54, Michael S. Tsirkin a =E9crit=A0: > > > > > > > QEMU coding style at the moment asks for all non-system > > > > > > > include files to be used with #include "foo.h". > > > > > > > However this rule actually does not make sense and > > > > > > > creates issues for when the included file is generated. > > > > > >=20 > > > > > > If you change that, we can have issue when a system include h= as the same > > > > > > name as our local include. With "", system header are t= aken first. > > > > >=20 > > > > > > > In C, include "file" means look in current directory, > > > > > > > then on include search path. Current directory here > > > > > > > means the source file directory. > > > > > > > By comparison include means look on include search p= ath. > > > > > >=20 > > > > > > Not exactly, there is the notion of "system header" too. > > > > > >=20 > > > > > > https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html > > > > > >=20 > > > > > > #include > > > > > > This variant is used for system header files. It searches for= a file > > > > > > named file in a standard list of system directories. You can = prepend > > > > > > directories to this list with the -I option (see Invocation). > > > > > >=20 > > > > > > #include "file" > > > > > > This variant is used for header files of your own program. It= searches > > > > > > for a file named file first in the directory containing the c= urrent > > > > > > file, then in the quote directories and then the same directo= ries used > > > > > > for . You can prepend directories to the list of quote = directories > > > > > > with the -iquote option. > > > > > >=20 > > > > > > > As generated files are not in the search directory (unless = the build > > > > > > > directory happens to match the source directory), it does n= ot make sense > > > > > > > to include them with "" - doing so is merely more work for = preprocessor > > > > > > > and a source or errors if a stale file happens to exist in = the source > > > > > > > directory. > > > > > >=20 > > > > > > I agree there is a problem with stale files. But linux, for i= nstance, > > > > > > asks for a "make mrproper" to avoid this. > > > > >=20 > > > > > We can follow what autoconf does, and add a check to configure = to see if > > > > > there are generated files left in the source dir, when configur= ing with > > > > > builddir !=3D srcdir, and exit with error, telling user to clea= n their > > > > > src dir first. > > > > >=20 > > > > > > > This changes include directives for all generated files, ac= ross the > > > > > > > tree. The idea is to avoid sending a huge amount of email. = But when > > > > > > > merging, the changes will be split with one commit per file= , e.g. for > > > > > > > ease of bisect in case of build failures, and to ease mergi= ng. > > > > > > >=20 > > > > > > > Note that should some generated files be missed by this tre= e-wide > > > > > > > refactoring, it isn't a big deal - this merely maintains th= e status quo, > > > > > > > and this can be addressed by a separate patch on top. > > > > > > >=20 > > > > > > > Signed-off-by: Michael S. Tsirkin > > > > > >=20 > > > > > > I think your idea conflicts with what Markus has started to d= o: > > > > >=20 > > > > > Yes, I don't think we should revert what Markus started. Both= ways of > > > > > referencing QEMU headers have downsides, but I think "..." has = fewer > > > > > downsides that "<....">. > > > >=20 > > > > Could you please explain what the advantage of "" is? > > > > It seems to be gone since we moved headers away from > > > > source. > > >=20 > > > We moved *some* headers into the include/ directory tree. > > >=20 > > > I still count 650+ headers which are alongside the .c files. > >=20 > > So for these, we should use "". None of these are generated files th= ough. >=20 > That leads to crazy inconsistent message for developers where 50% of QE= MU > header files must use <> and the other 50% of header files must use "". > Having a consistent message for developers is one of the key reasons wh= y > Markus submitted the patches to standardize on the use of "" for QEMU > header files, leaving <> for system headers & external dependancies. >=20 > Regards, > Daniel I guess it's in the eye of the beholder. The simple rule since days of K&R is that "" looks in the current directory of the source. Whoever learned C knows this. So use "" if your header is in the same directory as the source. This will guarantee that whoever violates the rule will get a patch that does not build. Having our own rules without any good technical reason that are not enforced by the build system just leads to small patches from new contributors getting up to v23. > --=20 > |: https://berrange.com -o- https://www.flickr.com/photos/dberr= ange :| > |: https://libvirt.org -o- https://fstop138.berrange= .com :| > |: https://entangle-photo.org -o- https://www.instagram.com/dberr= ange :| From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH] qemu: include generated files with <> and not "" Date: Tue, 20 Mar 2018 14:44:34 +0200 Message-ID: <20180320143945-mutt-send-email-mst@kernel.org> References: <1521510562-529051-1-git-send-email-mst@redhat.com> <8f06e1e3-4823-d8e8-43bd-c092c523849e@vivier.eu> <20180320094406.GD4530@redhat.com> <20180320141107-mutt-send-email-mst@kernel.org> <20180320121841.GN4530@redhat.com> <20180320142756-mutt-send-email-mst@kernel.org> <20180320123900.GO4530@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1eyGdO-0004y5-MJ for xen-devel@lists.xenproject.org; Tue, 20 Mar 2018 12:44:58 +0000 Content-Disposition: inline In-Reply-To: <20180320123900.GO4530@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Daniel =?iso-8859-1?Q?P=2E_Berrang=E9?= Cc: Peter Maydell , Dmitry Fleytman , sheepdog@lists.wpkg.org, Ronnie Sahlberg , Li Zhijian , David Hildenbrand , Jeff Cody , Zhang Chen , Mark Cave-Ayland , qemu-devel@nongnu.org, "Richard W.M. Jones" , Keith Busch , Max Filippov , Gerd Hoffmann , "Edgar E. Iglesias" , Jiri Pirko , Subbaraya Sundeep , Eric Blake , Michael Roth , Marcelo Tosatti , Josh Durgin , Stefano Stabellini , Alberto Garcia , zhanghailiang List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBNYXIgMjAsIDIwMTggYXQgMTI6Mzk6MDBQTSArMDAwMCwgRGFuaWVsIFAuIEJlcnJh bmfDqSB3cm90ZToKPiBPbiBUdWUsIE1hciAyMCwgMjAxOCBhdCAwMjoyODo0MlBNICswMjAwLCBN aWNoYWVsIFMuIFRzaXJraW4gd3JvdGU6Cj4gPiBPbiBUdWUsIE1hciAyMCwgMjAxOCBhdCAxMjox ODo0MVBNICswMDAwLCBEYW5pZWwgUC4gQmVycmFuZ8OpIHdyb3RlOgo+ID4gPiBPbiBUdWUsIE1h ciAyMCwgMjAxOCBhdCAwMjoxMjoyNFBNICswMjAwLCBNaWNoYWVsIFMuIFRzaXJraW4gd3JvdGU6 Cj4gPiA+ID4gT24gVHVlLCBNYXIgMjAsIDIwMTggYXQgMDk6NDQ6MDZBTSArMDAwMCwgRGFuaWVs IFAuIEJlcnJhbmfDqSB3cm90ZToKPiA+ID4gPiA+IE9uIFR1ZSwgTWFyIDIwLCAyMDE4IGF0IDA5 OjU4OjIzQU0gKzAxMDAsIExhdXJlbnQgVml2aWVyIHdyb3RlOgo+ID4gPiA+ID4gPiBMZSAyMC8w My8yMDE4IMOgIDAyOjU0LCBNaWNoYWVsIFMuIFRzaXJraW4gYSDDqWNyaXTCoDoKPiA+ID4gPiA+ ID4gPiBRRU1VIGNvZGluZyBzdHlsZSBhdCB0aGUgbW9tZW50IGFza3MgZm9yIGFsbCBub24tc3lz dGVtCj4gPiA+ID4gPiA+ID4gaW5jbHVkZSBmaWxlcyB0byBiZSB1c2VkIHdpdGggI2luY2x1ZGUg ImZvby5oIi4KPiA+ID4gPiA+ID4gPiBIb3dldmVyIHRoaXMgcnVsZSBhY3R1YWxseSBkb2VzIG5v dCBtYWtlIHNlbnNlIGFuZAo+ID4gPiA+ID4gPiA+IGNyZWF0ZXMgaXNzdWVzIGZvciB3aGVuIHRo ZSBpbmNsdWRlZCBmaWxlIGlzIGdlbmVyYXRlZC4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IElm IHlvdSBjaGFuZ2UgdGhhdCwgd2UgY2FuIGhhdmUgaXNzdWUgd2hlbiBhIHN5c3RlbSBpbmNsdWRl IGhhcyB0aGUgc2FtZQo+ID4gPiA+ID4gPiBuYW1lIGFzIG91ciBsb2NhbCBpbmNsdWRlLiBXaXRo ICI8RklMRT4iLCBzeXN0ZW0gaGVhZGVyIGFyZSB0YWtlbiBmaXJzdC4KPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+IEluIEMsIGluY2x1ZGUgImZpbGUiIG1lYW5zIGxvb2sgaW4gY3VycmVudCBkaXJl Y3RvcnksCj4gPiA+ID4gPiA+ID4gdGhlbiBvbiBpbmNsdWRlIHNlYXJjaCBwYXRoLiBDdXJyZW50 IGRpcmVjdG9yeSBoZXJlCj4gPiA+ID4gPiA+ID4gbWVhbnMgdGhlIHNvdXJjZSBmaWxlIGRpcmVj dG9yeS4KPiA+ID4gPiA+ID4gPiBCeSBjb21wYXJpc29uIGluY2x1ZGUgPGZpbGU+IG1lYW5zIGxv b2sgb24gaW5jbHVkZSBzZWFyY2ggcGF0aC4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IE5vdCBl eGFjdGx5LCB0aGVyZSBpcyB0aGUgbm90aW9uIG9mICJzeXN0ZW0gaGVhZGVyIiB0b28uCj4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvY3BwL0lu Y2x1ZGUtU3ludGF4Lmh0bWwKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ICNpbmNsdWRlIDxmaWxl Pgo+ID4gPiA+ID4gPiBUaGlzIHZhcmlhbnQgaXMgdXNlZCBmb3Igc3lzdGVtIGhlYWRlciBmaWxl cy4gSXQgc2VhcmNoZXMgZm9yIGEgZmlsZQo+ID4gPiA+ID4gPiBuYW1lZCBmaWxlIGluIGEgc3Rh bmRhcmQgbGlzdCBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMuIFlvdSBjYW4gcHJlcGVuZAo+ID4gPiA+ ID4gPiBkaXJlY3RvcmllcyB0byB0aGlzIGxpc3Qgd2l0aCB0aGUgLUkgb3B0aW9uIChzZWUgSW52 b2NhdGlvbikuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAjaW5jbHVkZSAiZmlsZSIKPiA+ID4g PiA+ID4gVGhpcyB2YXJpYW50IGlzIHVzZWQgZm9yIGhlYWRlciBmaWxlcyBvZiB5b3VyIG93biBw cm9ncmFtLiBJdCBzZWFyY2hlcwo+ID4gPiA+ID4gPiBmb3IgYSBmaWxlIG5hbWVkIGZpbGUgZmly c3QgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjdXJyZW50Cj4gPiA+ID4gPiA+IGZp bGUsIHRoZW4gaW4gdGhlIHF1b3RlIGRpcmVjdG9yaWVzIGFuZCB0aGVuIHRoZSBzYW1lIGRpcmVj dG9yaWVzIHVzZWQKPiA+ID4gPiA+ID4gZm9yIDxmaWxlPi4gWW91IGNhbiBwcmVwZW5kIGRpcmVj dG9yaWVzIHRvIHRoZSBsaXN0IG9mIHF1b3RlIGRpcmVjdG9yaWVzCj4gPiA+ID4gPiA+IHdpdGgg dGhlIC1pcXVvdGUgb3B0aW9uLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBBcyBnZW5lcmF0 ZWQgZmlsZXMgYXJlIG5vdCBpbiB0aGUgc2VhcmNoIGRpcmVjdG9yeSAodW5sZXNzIHRoZSBidWls ZAo+ID4gPiA+ID4gPiA+IGRpcmVjdG9yeSBoYXBwZW5zIHRvIG1hdGNoIHRoZSBzb3VyY2UgZGly ZWN0b3J5KSwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZQo+ID4gPiA+ID4gPiA+IHRvIGluY2x1ZGUg dGhlbSB3aXRoICIiIC0gZG9pbmcgc28gaXMgbWVyZWx5IG1vcmUgd29yayBmb3IgcHJlcHJvY2Vz c29yCj4gPiA+ID4gPiA+ID4gYW5kIGEgc291cmNlIG9yIGVycm9ycyBpZiBhIHN0YWxlIGZpbGUg aGFwcGVucyB0byBleGlzdCBpbiB0aGUgc291cmNlCj4gPiA+ID4gPiA+ID4gZGlyZWN0b3J5Lgo+ ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSSBhZ3JlZSB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBz dGFsZSBmaWxlcy4gQnV0IGxpbnV4LCBmb3IgaW5zdGFuY2UsCj4gPiA+ID4gPiA+IGFza3MgZm9y IGEgIm1ha2UgbXJwcm9wZXIiIHRvIGF2b2lkIHRoaXMuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFdl IGNhbiBmb2xsb3cgd2hhdCBhdXRvY29uZiBkb2VzLCBhbmQgYWRkIGEgY2hlY2sgdG8gY29uZmln dXJlIHRvIHNlZSBpZgo+ID4gPiA+ID4gdGhlcmUgYXJlIGdlbmVyYXRlZCBmaWxlcyBsZWZ0IGlu IHRoZSBzb3VyY2UgZGlyLCB3aGVuIGNvbmZpZ3VyaW5nIHdpdGgKPiA+ID4gPiA+IGJ1aWxkZGly ICE9IHNyY2RpciwgYW5kIGV4aXQgd2l0aCBlcnJvciwgdGVsbGluZyB1c2VyIHRvIGNsZWFuIHRo ZWlyCj4gPiA+ID4gPiBzcmMgZGlyIGZpcnN0Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhp cyBjaGFuZ2VzIGluY2x1ZGUgZGlyZWN0aXZlcyBmb3IgYWxsIGdlbmVyYXRlZCBmaWxlcywgYWNy b3NzIHRoZQo+ID4gPiA+ID4gPiA+IHRyZWUuIFRoZSBpZGVhIGlzIHRvIGF2b2lkIHNlbmRpbmcg YSBodWdlIGFtb3VudCBvZiBlbWFpbC4gIEJ1dCB3aGVuCj4gPiA+ID4gPiA+ID4gbWVyZ2luZywg dGhlIGNoYW5nZXMgd2lsbCBiZSBzcGxpdCB3aXRoIG9uZSBjb21taXQgcGVyIGZpbGUsIGUuZy4g Zm9yCj4gPiA+ID4gPiA+ID4gZWFzZSBvZiBiaXNlY3QgaW4gY2FzZSBvZiBidWlsZCBmYWlsdXJl cywgYW5kIHRvIGVhc2UgbWVyZ2luZy4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBOb3Rl IHRoYXQgc2hvdWxkIHNvbWUgZ2VuZXJhdGVkIGZpbGVzIGJlIG1pc3NlZCBieSB0aGlzIHRyZWUt d2lkZQo+ID4gPiA+ID4gPiA+IHJlZmFjdG9yaW5nLCBpdCBpc24ndCBhIGJpZyBkZWFsIC0gdGhp cyBtZXJlbHkgbWFpbnRhaW5zIHRoZSBzdGF0dXMgcXVvLAo+ID4gPiA+ID4gPiA+IGFuZCB0aGlz IGNhbiBiZSBhZGRyZXNzZWQgYnkgYSBzZXBhcmF0ZSBwYXRjaCBvbiB0b3AuCj4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBTLiBUc2lya2luIDxtc3RA cmVkaGF0LmNvbT4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IEkgdGhpbmsgeW91ciBpZGVhIGNv bmZsaWN0cyB3aXRoIHdoYXQgTWFya3VzIGhhcyBzdGFydGVkIHRvIGRvOgo+ID4gPiA+ID4gCj4g PiA+ID4gPiBZZXMsIEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIHJldmVydCB3aGF0IE1hcmt1cyBz dGFydGVkLiAgIEJvdGggd2F5cyBvZgo+ID4gPiA+ID4gcmVmZXJlbmNpbmcgUUVNVSBoZWFkZXJz IGhhdmUgZG93bnNpZGVzLCBidXQgSSB0aGluayAiLi4uIiBoYXMgZmV3ZXIKPiA+ID4gPiA+IGRv d25zaWRlcyB0aGF0ICI8Li4uLiI+Lgo+ID4gPiA+IAo+ID4gPiA+IENvdWxkIHlvdSBwbGVhc2Ug ZXhwbGFpbiB3aGF0IHRoZSBhZHZhbnRhZ2Ugb2YgIiIgaXM/Cj4gPiA+ID4gSXQgc2VlbXMgdG8g YmUgZ29uZSBzaW5jZSB3ZSBtb3ZlZCBoZWFkZXJzIGF3YXkgZnJvbQo+ID4gPiA+IHNvdXJjZS4K PiA+ID4gCj4gPiA+IFdlIG1vdmVkICpzb21lKiBoZWFkZXJzIGludG8gdGhlIGluY2x1ZGUvIGRp cmVjdG9yeSB0cmVlLgo+ID4gPiAKPiA+ID4gSSBzdGlsbCBjb3VudCA2NTArIGhlYWRlcnMgd2hp Y2ggYXJlIGFsb25nc2lkZSB0aGUgLmMgZmlsZXMuCj4gPiAKPiA+IFNvIGZvciB0aGVzZSwgd2Ug c2hvdWxkIHVzZSAiIi4gIE5vbmUgb2YgdGhlc2UgYXJlIGdlbmVyYXRlZCBmaWxlcyB0aG91Z2gu Cj4gCj4gVGhhdCBsZWFkcyB0byBjcmF6eSBpbmNvbnNpc3RlbnQgbWVzc2FnZSBmb3IgZGV2ZWxv cGVycyB3aGVyZSA1MCUgb2YgUUVNVQo+IGhlYWRlciBmaWxlcyBtdXN0IHVzZSA8PiBhbmQgdGhl IG90aGVyIDUwJSBvZiBoZWFkZXIgZmlsZXMgbXVzdCB1c2UgIiIuCj4gSGF2aW5nIGEgY29uc2lz dGVudCBtZXNzYWdlIGZvciBkZXZlbG9wZXJzIGlzIG9uZSBvZiB0aGUga2V5IHJlYXNvbnMgd2h5 Cj4gTWFya3VzIHN1Ym1pdHRlZCB0aGUgcGF0Y2hlcyB0byBzdGFuZGFyZGl6ZSBvbiB0aGUgdXNl IG9mICIiIGZvciBRRU1VCj4gaGVhZGVyIGZpbGVzLCBsZWF2aW5nIDw+IGZvciBzeXN0ZW0gaGVh ZGVycyAmIGV4dGVybmFsIGRlcGVuZGFuY2llcy4KPiAKPiBSZWdhcmRzLAo+IERhbmllbAoKSSBn dWVzcyBpdCdzIGluIHRoZSBleWUgb2YgdGhlIGJlaG9sZGVyLiBUaGUgc2ltcGxlIHJ1bGUgc2lu Y2UgZGF5cyBvZgpLJlIgaXMgdGhhdCAiIiBsb29rcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkg b2YgdGhlIHNvdXJjZS4KV2hvZXZlciBsZWFybmVkIEMga25vd3MgdGhpcy4KClNvIHVzZSAiIiBp ZiB5b3VyIGhlYWRlciBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHNvdXJjZS4KClRo aXMgd2lsbCBndWFyYW50ZWUgdGhhdCB3aG9ldmVyIHZpb2xhdGVzIHRoZSBydWxlIHdpbGwgZ2V0 IGEgcGF0Y2ggdGhhdApkb2VzIG5vdCBidWlsZC4gIEhhdmluZyBvdXIgb3duIHJ1bGVzIHdpdGhv dXQgYW55IGdvb2QgdGVjaG5pY2FsIHJlYXNvbgp0aGF0IGFyZSBub3QgZW5mb3JjZWQgYnkgdGhl IGJ1aWxkIHN5c3RlbSBqdXN0IGxlYWRzIHRvIHNtYWxsIHBhdGNoZXMKZnJvbSBuZXcgY29udHJp YnV0b3JzIGdldHRpbmcgdXAgdG8gdjIzLgoKCj4gLS0gCj4gfDogaHR0cHM6Ly9iZXJyYW5nZS5j b20gICAgICAtby0gICAgaHR0cHM6Ly93d3cuZmxpY2tyLmNvbS9waG90b3MvZGJlcnJhbmdlIDp8 Cj4gfDogaHR0cHM6Ly9saWJ2aXJ0Lm9yZyAgICAgICAgIC1vLSAgICAgICAgICAgIGh0dHBzOi8v ZnN0b3AxMzguYmVycmFuZ2UuY29tIDp8Cj4gfDogaHR0cHM6Ly9lbnRhbmdsZS1waG90by5vcmcg ICAgLW8tICAgIGh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZGJlcnJhbmdlIDp8CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs