Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756555Ab3CNJgX (ORCPT ); Thu, 14 Mar 2013 05:36:23 -0400 Received: from mail-pb0-f43.google.com ([209.85.160.43]:38985 "EHLO mail-pb0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755622Ab3CNJgV (ORCPT ); Thu, 14 Mar 2013 05:36:21 -0400 MIME-Version: 1.0 Reply-To: mtk.manpages@gmail.com From: "Michael Kerrisk (man-pages)" Date: Thu, 14 Mar 2013 10:35:59 +0100 Message-ID: Subject: [PATCH] open(2): document O_PATH To: Al Viro Cc: lkml , Mike Frysinger , "Theodore Ts'o" , Peter Schiffer , "Aneesh Kumar K.V" , linux-man , benjamin@python.org Content-Type: multipart/mixed; boundary=047d7b86f7c850936504d7df41df Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 42756 Lines: 672 --047d7b86f7c850936504d7df41df Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello Al et al, Documenting O_PATH fell by the wayside last year (http://thread.gmane.org/gmane.linux.man/2790) as I got distracted with other tasks. A recent prod or two have reminded me restart this. I have the following patch queued to document O_PATH. Could you please review. I've provided the O_PATH doc both as formatted text, for ease of reviewing, and as a patch and entire file (attached). Thanks, Michael O_PATH (since Linux 2.6.39) Obtain a file descriptor that can be used for two pur=E2=80= =90 poses: to indicate a location in the file-system tree and to perform operations that act purely at the file descriptor level. The file itself is not opened, and other file operations (e.g., read(2), write(2), fch=E2=80= =90 mod(2), fchown(2), fgetxattr(2)) fail with the error EBADF. The following operations can be performed on the result=E2=80= =90 ing file descriptor: * close(2); fchdir(2) (since Linux 3.5); fstat(2) (since Linux 3.6). * Duplicating the file descriptor (dup(2), fcntl(2) F_DUPFD, etc.). * Getting and setting file descriptor flags (fcntl(2) F_GETFD and F_SETFD). * Passing the file descriptor as the dirfd argument of openat(2) and the other "*at()" system calls. * Passing the file descriptor to another process via a UNIX domain socket (see SCM_RIGHTS in unix(7)). When O_PATH is specified in flags, flag bits other than O_DIRECTORY and O_NOFOLLOW are ignored. If the O_NOFOLLOW flag is also specified, then the call returns a file descriptor referring to the symbolic link. This file descriptor can be used as the dirfd argument in calls to fchownat(2), fstatat(2), linkat(2), and readlinkat(2) with an empty pathname to have the calls operate on the symbolic link. diff --git a/man2/open.2 b/man2/open.2 index e518c1f..c27be8f 100644 --- a/man2/open.2 +++ b/man2/open.2 @@ -424,6 +423,9 @@ If \fIpathname\fP is a symbolic link, then the open fai= ls. This is a FreeBSD extension, which was added to Linux in version 2.1.126. Symbolic links in earlier components of the pathname will still be followed. +See also +.BR O_NOPATH +below. .\" The headers from glibc 2.0.100 and later include a .\" definition of this flag; \fIkernels before 2.1.126 will ignore it if .\" used\fP. @@ -441,6 +443,89 @@ For a discussion of the effect of in conjunction with mandatory file locks and with file leases, see .BR fcntl (2). .TP +.BR O_PATH " (since Linux 2.6.39)" +.\" commit 1abf0c718f15a56a0a435588d1b104c7a37dc9bd +.\" commit 326be7b484843988afe57566b627fb7a70beac56 +.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d +.\" +.\" http://thread.gmane.org/gmane.linux.man/2790/focus=3D3496 +.\" Subject: Re: [PATCH] open(2): document O_PATH +.\" Newsgroups: gmane.linux.man, gmane.linux.kernel +.\" +Obtain a file descriptor that can be used for two purposes: +to indicate a location in the file-system tree and +to perform operations that act purely at the file descriptor level. +The file itself is not opened, and other file operations (e.g., +.BR read (2), +.BR write (2), +.BR fchmod (2), +.BR fchown (2), +.BR fgetxattr (2)) +fail with the error +.BR EBADF . + +The following operations +.I can +be performed on the resulting file descriptor: +.RS +.IP * 3 +.BR close (2); +.BR fchdir (2) +(since Linux 3.5); +.\" commit 332a2e1244bd08b9e3ecd378028513396a004a24 +.BR fstat (2) +(since Linux 3.6). +.\" fstat(): commit 55815f70147dcfa3ead5738fd56d3574e2e3c1c2 +.IP * +Duplicating the file descriptor +.RB ( dup (2), +.BR fcntl (2) +.BR F_DUPFD , +etc.). +.IP * +Getting and setting file descriptor flags +.RB ( fcntl (2) +.BR F_GETFD +and +.BR F_SETFD ). +.IP * +Passing the file descriptor as the +.IR dirfd +argument of +.BR openat (2) +and the other "*at()" system calls. +.IP * +Passing the file descriptor to another process via a UNIX domain socket +(see +.BR SCM_RIGHTS +in +.BR unix (7)). +.RE +.IP +When +.B O_PATH +is specified in +.IR flags , +flag bits other than +.BR O_DIRECTORY +and +.BR O_NOFOLLOW +are ignored. + +If the +.BR O_NOFOLLOW +flag is also specified, +then the call returns a file descriptor referring to the symbolic link. +This file descriptor can be used as the +.I dirfd +argument in calls to +.BR fchownat (2), +.BR fstatat (2), +.BR linkat (2), +and +.BR readlinkat (2) +with an empty pathname to have the calls operate on the symbolic link. +.TP .B O_SYNC The file is opened for synchronous I/O. Any @@ -631,8 +716,9 @@ SVr4, 4.3BSD, POSIX.1-2001. The .BR O_DIRECTORY , .BR O_NOATIME , +.BR O_NOFOLLOW , and -.B O_NOFOLLOW +.BR O_PATH flags are Linux-specific, and one may need to define .B _GNU_SOURCE (before including --047d7b86f7c850936504d7df41df Content-Type: application/octet-stream; name="open.2" Content-Disposition: attachment; filename="open.2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he9pyv0l0 LlwiIFRoaXMgbWFucGFnZSBpcyBDb3B5cmlnaHQgKEMpIDE5OTIgRHJldyBFY2toYXJkdDsKLlwi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTMgTWljaGFlbCBIYWFyZHQsIElhbiBK YWNrc29uLgouXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwOCBHcmVnIEJhbmtz Ci5cIgouXCIgJSUlTElDRU5TRV9TVEFSVChWRVJCQVRJTSkKLlwiIFBlcm1pc3Npb24gaXMgZ3Jh bnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCi5cIiBt YW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgYXJlCi5cIiBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KLlwiCi5cIiBQZXJtaXNzaW9u IGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0 aGlzCi5cIiBtYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIHZlcmJhdGltIGNvcHlpbmcs IHByb3ZpZGVkIHRoYXQgdGhlCi5cIiBlbnRpcmUgcmVzdWx0aW5nIGRlcml2ZWQgd29yayBpcyBk aXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYQouXCIgcGVybWlzc2lvbiBub3RpY2UgaWRl bnRpY2FsIHRvIHRoaXMgb25lLgouXCIKLlwiIFNpbmNlIHRoZSBMaW51eCBrZXJuZWwgYW5kIGxp YnJhcmllcyBhcmUgY29uc3RhbnRseSBjaGFuZ2luZywgdGhpcwouXCIgbWFudWFsIHBhZ2UgbWF5 IGJlIGluY29ycmVjdCBvciBvdXQtb2YtZGF0ZS4gIFRoZSBhdXRob3IocykgYXNzdW1lIG5vCi5c IiByZXNwb25zaWJpbGl0eSBmb3IgZXJyb3JzIG9yIG9taXNzaW9ucywgb3IgZm9yIGRhbWFnZXMg cmVzdWx0aW5nIGZyb20KLlwiIHRoZSB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBo ZXJlaW4uICBUaGUgYXV0aG9yKHMpIG1heSBub3QKLlwiIGhhdmUgdGFrZW4gdGhlIHNhbWUgbGV2 ZWwgb2YgY2FyZSBpbiB0aGUgcHJvZHVjdGlvbiBvZiB0aGlzIG1hbnVhbCwKLlwiIHdoaWNoIGlz IGxpY2Vuc2VkIGZyZWUgb2YgY2hhcmdlLCBhcyB0aGV5IG1pZ2h0IHdoZW4gd29ya2luZwouXCIg cHJvZmVzc2lvbmFsbHkuCi5cIgouXCIgRm9ybWF0dGVkIG9yIHByb2Nlc3NlZCB2ZXJzaW9ucyBv ZiB0aGlzIG1hbnVhbCwgaWYgdW5hY2NvbXBhbmllZCBieQouXCIgdGhlIHNvdXJjZSwgbXVzdCBh Y2tub3dsZWRnZSB0aGUgY29weXJpZ2h0IGFuZCBhdXRob3JzIG9mIHRoaXMgd29yay4KLlwiICUl JUxJQ0VOU0VfRU5ECi5cIgouXCIgTW9kaWZpZWQgMTk5My0wNy0yMSBieSBSaWsgRmFpdGggPGZh aXRoQGNzLnVuYy5lZHU+Ci5cIiBNb2RpZmllZCAxOTk0LTA4LTIxIGJ5IE1pY2hhZWwgSGFhcmR0 Ci5cIiBNb2RpZmllZCAxOTk2LTA0LTEzIGJ5IEFuZHJpZXMgQnJvdXdlciA8YWViQGN3aS5ubD4K LlwiIE1vZGlmaWVkIDE5OTYtMDUtMTMgYnkgVGhvbWFzIEtvZW5pZwouXCIgTW9kaWZpZWQgMTk5 Ni0xMi0yMCBieSBNaWNoYWVsIEhhYXJkdAouXCIgTW9kaWZpZWQgMTk5OS0wMi0xOSBieSBBbmRy aWVzIEJyb3V3ZXIgPGFlYkBjd2kubmw+Ci5cIiBNb2RpZmllZCAxOTk4LTExLTI4IGJ5IEpvc2Vw aCBTLiBNeWVycyA8anNtMjhAaGVybWVzLmNhbS5hYy51az4KLlwiIE1vZGlmaWVkIDE5OTktMDYt MDMgYnkgTWljaGFlbCBIYWFyZHQKLlwiIE1vZGlmaWVkIDIwMDItMDUtMDcgYnkgTWljaGFlbCBL ZXJyaXNrIDxtdGsubWFucGFnZXNAZ21haWwuY29tPgouXCIgTW9kaWZpZWQgMjAwNC0wNi0yMyBi eSBNaWNoYWVsIEtlcnJpc2sgPG10ay5tYW5wYWdlc0BnbWFpbC5jb20+Ci5cIiAyMDA0LTEyLTA4 LCBtdGssIHJlb3JkZXJlZCBmbGFncyBsaXN0IGFscGhhYmV0aWNhbGx5Ci5cIiAyMDA0LTEyLTA4 LCBNYXJ0aW4gUG9vbCA8bWJwQHNvdXJjZWZyb2cubmV0PiAoJiBtdGspLCBhZGRlZCBPX05PQVRJ TUUKLlwiIDIwMDctMDktMTgsIG10aywgQWRkZWQgZGVzY3JpcHRpb24gb2YgT19DTE9FWEVDICsg b3RoZXIgbWlub3IgZWRpdHMKLlwiIDIwMDgtMDEtMDMsIG10aywgd2l0aCBpbnB1dCBmcm9tIFRy b25kIE15a2xlYnVzdAouXCIgICAgIDx0cm9uZC5teWtsZWJ1c3RAZnlzLnVpby5ubz4gYW5kIFRp bW8gU2lyYWluZW4gPHRzc0Bpa2kuZmk+Ci5cIiAgICAgUmV3cml0ZSBkZXNjcmlwdGlvbiBvZiBP X0VYQ0wuCi5cIiAyMDA4LTAxLTExLCBHcmVnIEJhbmtzIDxnbmJAbWVsYm91cm5lLnNnaS5jb20+ OiBhZGQgbW9yZSBkZXRhaWwKLlwiICAgICBvbiBPX0RJUkVDVC4KLlwiIDIwMDgtMDItMjYsIE1p Y2hhZWwgSGFhcmR0OiBSZW9yZ2FuaXplZCB0ZXh0IGZvciBPX0NSRUFUIGFuZCBtb2RlCi5cIgou XCIgRklYTUUgLiBBcHIgMDg6IFRoZSBuZXh0IFBPU0lYIHJldmlzaW9uIGhhcyBPX0VYRUMsIE9f U0VBUkNILCBhbmQKLlwiIE9fVFRZSU5JVC4gIEV2ZW50dWFsbHkgdGhlc2UgbWF5IG5lZWQgdG8g YmUgZG9jdW1lbnRlZC4gIC0tbXRrCi5cIiBGSVhNRSBMaW51eCAyLjYuMzMgaGFzIE9fRFNZTkMs IGFuZCBhIGhpZGRlbiBfX09fU1lOQy4KLlwiCi5USCBPUEVOIDIgMjAxMy0wMi0xOCAiTGludXgi ICJMaW51eCBQcm9ncmFtbWVyJ3MgTWFudWFsIgouU0ggTkFNRQpvcGVuLCBjcmVhdCBcLSBvcGVu IGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIG9yIGRldmljZQouU0ggU1lOT1BTSVMKLm5mCi5C ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLkIgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci5CICNpbmNs dWRlIDxmY250bC5oPgouc3AKLkJJICJpbnQgb3Blbihjb25zdCBjaGFyICoiIHBhdGhuYW1lICIs IGludCAiIGZsYWdzICk7Ci5CSSAiaW50IG9wZW4oY29uc3QgY2hhciAqIiBwYXRobmFtZSAiLCBp bnQgIiBmbGFncyAiLCBtb2RlX3QgIiBtb2RlICk7CgouQkkgImludCBjcmVhdChjb25zdCBjaGFy ICoiIHBhdGhuYW1lICIsIG1vZGVfdCAiIG1vZGUgKTsKLmZpCi5TSCBERVNDUklQVElPTgpHaXZl biBhCi5JIHBhdGhuYW1lCmZvciBhIGZpbGUsCi5CUiBvcGVuICgpCnJldHVybnMgYSBmaWxlIGRl c2NyaXB0b3IsIGEgc21hbGwsIG5vbm5lZ2F0aXZlIGludGVnZXIKZm9yIHVzZSBpbiBzdWJzZXF1 ZW50IHN5c3RlbSBjYWxscwouUkIgKCByZWFkICIoMiksICIgd3JpdGUgIigyKSwgIiBsc2VlayAi KDIpLCAiIGZjbnRsICIoMiksIGV0Yy4pLiIKVGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBi eSBhIHN1Y2Nlc3NmdWwgY2FsbCB3aWxsIGJlCnRoZSBsb3dlc3QtbnVtYmVyZWQgZmlsZSBkZXNj cmlwdG9yIG5vdCBjdXJyZW50bHkgb3BlbiBmb3IgdGhlIHByb2Nlc3MuCi5QUApCeSBkZWZhdWx0 LCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBzZXQgdG8gcmVtYWluIG9wZW4gYWNyb3NzIGFu Ci5CUiBleGVjdmUgKDIpCihpLmUuLCB0aGUKLkIgRkRfQ0xPRVhFQwpmaWxlIGRlc2NyaXB0b3Ig ZmxhZyBkZXNjcmliZWQgaW4KLkJSIGZjbnRsICgyKQppcyBpbml0aWFsbHkgZGlzYWJsZWQ7IHRo ZQouQiBPX0NMT0VYRUMKZmxhZywgZGVzY3JpYmVkIGJlbG93LCBjYW4gYmUgdXNlZCB0byBjaGFu Z2UgdGhpcyBkZWZhdWx0KS4KVGhlIGZpbGUgb2Zmc2V0IGlzIHNldCB0byB0aGUgYmVnaW5uaW5n IG9mIHRoZSBmaWxlIChzZWUKLkJSIGxzZWVrICgyKSkuCi5QUApBIGNhbGwgdG8KLkJSIG9wZW4g KCkKY3JlYXRlcyBhIG5ldwouSVIgIm9wZW4gZmlsZSBkZXNjcmlwdGlvbiIgLAphbiBlbnRyeSBp biB0aGUgc3lzdGVtLXdpZGUgdGFibGUgb2Ygb3BlbiBmaWxlcy4KVGhpcyBlbnRyeSByZWNvcmRz IHRoZSBmaWxlIG9mZnNldCBhbmQgdGhlIGZpbGUgc3RhdHVzIGZsYWdzCihtb2RpZmlhYmxlIHZp YSB0aGUKLkJSIGZjbnRsICgyKQouQiBGX1NFVEZMCm9wZXJhdGlvbikuCkEgZmlsZSBkZXNjcmlw dG9yIGlzIGEgcmVmZXJlbmNlIHRvIG9uZSBvZiB0aGVzZSBlbnRyaWVzOwp0aGlzIHJlZmVyZW5j ZSBpcyB1bmFmZmVjdGVkIGlmCi5JIHBhdGhuYW1lCmlzIHN1YnNlcXVlbnRseSByZW1vdmVkIG9y IG1vZGlmaWVkIHRvIHJlZmVyIHRvIGEgZGlmZmVyZW50IGZpbGUuClRoZSBuZXcgb3BlbiBmaWxl IGRlc2NyaXB0aW9uIGlzIGluaXRpYWxseSBub3Qgc2hhcmVkCndpdGggYW55IG90aGVyIHByb2Nl c3MsCmJ1dCBzaGFyaW5nIG1heSBhcmlzZSB2aWEKLkJSIGZvcmsgKDIpLgouUFAKVGhlIGFyZ3Vt ZW50Ci5JIGZsYWdzCm11c3QgaW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZwouSVIgImFjY2Vz cyBtb2RlcyIgOgouQlIgT19SRE9OTFkgIiwgIiBPX1dST05MWSAiLCBvciAiIE9fUkRXUiAuClRo ZXNlIHJlcXVlc3Qgb3BlbmluZyB0aGUgZmlsZSByZWFkLW9ubHksIHdyaXRlLW9ubHksIG9yIHJl YWQvd3JpdGUsCnJlc3BlY3RpdmVseS4KCkluIGFkZGl0aW9uLCB6ZXJvIG9yIG1vcmUgZmlsZSBj cmVhdGlvbiBmbGFncyBhbmQgZmlsZSBzdGF0dXMgZmxhZ3MKY2FuIGJlCi5SSSBiaXR3aXNlLSBv ciAnZAppbgouSVIgZmxhZ3MgLgpUaGUKLkkgZmlsZSBjcmVhdGlvbiBmbGFncwphcmUKLkJSIE9f Q0xPRVhFQyAsCi5CUiBPX0NSRUFUICwKLkJSIE9fRElSRUNUT1JZICwKLkJSIE9fRVhDTCAsCi5C UiBPX05PQ1RUWSAsCi5CUiBPX05PRk9MTE9XICwKLkJSIE9fVFJVTkMgLAphbmQKLkJSIE9fVFRZ X0lOSVQgLgpUaGUKLkkgZmlsZSBzdGF0dXMgZmxhZ3MKYXJlIGFsbCBvZiB0aGUgcmVtYWluaW5n IGZsYWdzIGxpc3RlZCBiZWxvdy4KLlwiIFNVU3Y0IGRpdmlkZXMgdGhlIGZsYWdzIGludG86Ci5c IiAqIEFjY2VzcyBtb2RlCi5cIiAqIEZpbGUgY3JlYXRpb24KLlwiICogRmlsZSBzdGF0dXMKLlwi ICogT3RoZXIgKE9fQ0xPRVhFQywgT19ESVJFQ1RPUlksIE9fTk9GT0xMT1cpCi5cIiB0aG91Z2gg aXQncyBub3QgY2xlYXIgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJvdGhlciIgYW5kCi5c IiAiRmlsZSBjcmVhdGlvbiIgZmxhZ3MgaXMuICBJIHJhaXNlZCBhbiBBYXJkdmFyayB0byBzZWUg aWYgdGhpcwouXCIgY2FuIGJlIGNsYXJpZmllZCBpbiBTVVN2NDsgMTAgT2N0IDIwMDguCi5cIiBo dHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnN0YW5kYXJkcy5wb3NpeC5hdXN0aW4u Z2VuZXJhbC82NC9mb2N1cz02NwouXCIgVEMxIChiYWxsb3RlZCBpbiAyMDEzKSwgcmVzb2x2ZWQg dGhpcywgc28gdGhhdCB0aG9zZSB0aHJlZSBjb25zdGFudHMKLlwiIGFyZSBhbHNvIGNhdGVnb3Jp emVkIiBhcyBmaWxlIHN0YXR1cyBmbGFncy4KLlwiClRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRo ZXNlIHR3byBncm91cHMgb2YgZmxhZ3MgaXMgdGhhdAp0aGUgZmlsZSBzdGF0dXMgZmxhZ3MgY2Fu IGJlIHJldHJpZXZlZCBhbmQgKGluIHNvbWUgY2FzZXMpCm1vZGlmaWVkIHVzaW5nCi5CUiBmY250 bCAoMikuClRoZSBmdWxsIGxpc3Qgb2YgZmlsZSBjcmVhdGlvbiBmbGFncyBhbmQgZmlsZSBzdGF0 dXMgZmxhZ3MgaXMgYXMgZm9sbG93czoKLlRQCi5CIE9fQVBQRU5EClRoZSBmaWxlIGlzIG9wZW5l ZCBpbiBhcHBlbmQgbW9kZS4KQmVmb3JlIGVhY2gKLkJSIHdyaXRlICgyKSwKdGhlIGZpbGUgb2Zm c2V0IGlzIHBvc2l0aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKYXMgaWYgd2l0aAouQlIg bHNlZWsgKDIpLgouQiBPX0FQUEVORAptYXkgbGVhZCB0byBjb3JydXB0ZWQgZmlsZXMgb24gTkZT IGZpbGUgc3lzdGVtcyBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3MKYXBwZW5kcyBkYXRhIHRvIGEg ZmlsZSBhdCBvbmNlLgouXCIgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlCi5cIiBodHRwOi8vYnVn cy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NDUzOTQ2Ci5cIiBodHRwOi8v bmZzLnNvdXJjZWZvcmdlLm5ldC8KVGhpcyBpcyBiZWNhdXNlIE5GUyBkb2VzIG5vdCBzdXBwb3J0 CmFwcGVuZGluZyB0byBhIGZpbGUsIHNvIHRoZSBjbGllbnQga2VybmVsIGhhcyB0byBzaW11bGF0 ZSBpdCwgd2hpY2gKY2FuJ3QgYmUgZG9uZSB3aXRob3V0IGEgcmFjZSBjb25kaXRpb24uCi5UUAou QiBPX0FTWU5DCkVuYWJsZSBzaWduYWwtZHJpdmVuIEkvTzoKZ2VuZXJhdGUgYSBzaWduYWwKLlJC ICggU0lHSU8KYnkgZGVmYXVsdCwgYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQgdmlhCi5CUiBmY250 bCAoMikpCndoZW4gaW5wdXQgb3Igb3V0cHV0IGJlY29tZXMgcG9zc2libGUgb24gdGhpcyBmaWxl IGRlc2NyaXB0b3IuClRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGVybWluYWxz LCBwc2V1ZG90ZXJtaW5hbHMsCnNvY2tldHMsIGFuZCAoc2luY2UgTGludXggMi42KSBwaXBlcyBh bmQgRklGT3MuClNlZQouQlIgZmNudGwgKDIpCmZvciBmdXJ0aGVyIGRldGFpbHMuCi5UUAouQlIg T19DTE9FWEVDICIgKFNpbmNlIExpbnV4IDIuNi4yMykiCkVuYWJsZSB0aGUgY2xvc2Utb24tZXhl YyBmbGFnIGZvciB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvci4KU3BlY2lmeWluZyB0aGlzIGZsYWcg cGVybWl0cyBhIHByb2dyYW0gdG8gYXZvaWQgYWRkaXRpb25hbAouQlIgZmNudGwgKDIpCi5CIEZf U0VURkQKb3BlcmF0aW9ucyB0byBzZXQgdGhlCi5CIEZEX0NMT0VYRUMKZmxhZy4KQWRkaXRpb25h bGx5LAp1c2Ugb2YgdGhpcyBmbGFnIGlzIGVzc2VudGlhbCBpbiBzb21lIG11bHRpdGhyZWFkZWQg cHJvZ3JhbXMKc2luY2UgdXNpbmcgYSBzZXBhcmF0ZQouQlIgZmNudGwgKDIpCi5CIEZfU0VURkQK b3BlcmF0aW9uIHRvIHNldCB0aGUKLkIgRkRfQ0xPRVhFQwpmbGFnIGRvZXMgbm90IHN1ZmZpY2Ug dG8gYXZvaWQgcmFjZSBjb25kaXRpb25zCndoZXJlIG9uZSB0aHJlYWQgb3BlbnMgYSBmaWxlIGRl c2NyaXB0b3IgYXQgdGhlIHNhbWUKdGltZSBhcyBhbm90aGVyIHRocmVhZCBkb2VzIGEKLkJSIGZv cmsgKDIpCnBsdXMKLkJSIGV4ZWN2ZSAoMikuCi5cIiBUaGlzIGZsYWcgZml4ZXMgb25seSBvbmUg Zm9ybSBvZiB0aGUgcmFjZSBjb25kaXRpb247Ci5cIiBUaGUgcmFjZSBjYW4gYWxzbyBvY2N1ciB3 aXRoLCBmb3IgZXhhbXBsZSwgZGVzY3JpcHRvcnMKLlwiIHJldHVybmVkIGJ5IGFjY2VwdCgpLCBw aXBlKCksIGV0Yy4KLlRQCi5CIE9fQ1JFQVQKSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgaXQg d2lsbCBiZSBjcmVhdGVkLgpUaGUgb3duZXIgKHVzZXIgSUQpIG9mIHRoZSBmaWxlIGlzIHNldCB0 byB0aGUgZWZmZWN0aXZlIHVzZXIgSUQKb2YgdGhlIHByb2Nlc3MuClRoZSBncm91cCBvd25lcnNo aXAgKGdyb3VwIElEKSBpcyBzZXQgZWl0aGVyIHRvCnRoZSBlZmZlY3RpdmUgZ3JvdXAgSUQgb2Yg dGhlIHByb2Nlc3Mgb3IgdG8gdGhlIGdyb3VwIElEIG9mIHRoZQpwYXJlbnQgZGlyZWN0b3J5IChk ZXBlbmRpbmcgb24gZmlsZSBzeXN0ZW0gdHlwZSBhbmQgbW91bnQgb3B0aW9ucywKYW5kIHRoZSBt b2RlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5LCBzZWUgdGhlIG1vdW50IG9wdGlvbnMKLkkgYnNk Z3JvdXBzCmFuZAouSSBzeXN2Z3JvdXBzCmRlc2NyaWJlZCBpbgouQlIgbW91bnQgKDgpKS4KLlwi IEFzIGF0IDIuNi4yNSwgYnNkZ3JvdXBzIGlzIHN1cHBvcnRlZCBieSBleHQyLCBleHQzLCBleHQ0 LCBhbmQKLlwiIFhGUyAoc2luY2UgMi42LjE0KS4KLlJTCi5QUAouSSBtb2RlCnNwZWNpZmllcyB0 aGUgcGVybWlzc2lvbnMgdG8gdXNlIGluIGNhc2UgYSBuZXcgZmlsZSBpcyBjcmVhdGVkLgpUaGlz IGFyZ3VtZW50IG11c3QgYmUgc3VwcGxpZWQgd2hlbgouQiBPX0NSRUFUCmlzIHNwZWNpZmllZCBp bgouSVIgZmxhZ3MgOwppZgouQiBPX0NSRUFUCmlzIG5vdCBzcGVjaWZpZWQsIHRoZW4KLkkgbW9k ZQppcyBpZ25vcmVkLgpUaGUgZWZmZWN0aXZlIHBlcm1pc3Npb25zIGFyZSBtb2RpZmllZCBieQp0 aGUgcHJvY2VzcydzCi5JIHVtYXNrCmluIHRoZSB1c3VhbCB3YXk6IFRoZSBwZXJtaXNzaW9ucyBv ZiB0aGUgY3JlYXRlZCBmaWxlIGFyZQouSVIgIihtb2RlXCAmXCB+dW1hc2spIiAuCk5vdGUgdGhh dCB0aGlzIG1vZGUgb25seSBhcHBsaWVzIHRvIGZ1dHVyZSBhY2Nlc3NlcyBvZiB0aGUKbmV3bHkg Y3JlYXRlZCBmaWxlOyB0aGUKLkJSIG9wZW4gKCkKY2FsbCB0aGF0IGNyZWF0ZXMgYSByZWFkLW9u bHkgZmlsZSBtYXkgd2VsbCByZXR1cm4gYSByZWFkL3dyaXRlCmZpbGUgZGVzY3JpcHRvci4KLlBQ ClRoZSBmb2xsb3dpbmcgc3ltYm9saWMgY29uc3RhbnRzIGFyZSBwcm92aWRlZCBmb3IKLklSIG1v ZGUgOgouVFAgOQouQiBTX0lSV1hVCjAwNzAwIHVzZXIgKGZpbGUgb3duZXIpIGhhcyByZWFkLCB3 cml0ZSBhbmQgZXhlY3V0ZSBwZXJtaXNzaW9uCi5UUAouQiBTX0lSVVNSCjAwNDAwIHVzZXIgaGFz IHJlYWQgcGVybWlzc2lvbgouVFAKLkIgU19JV1VTUgowMDIwMCB1c2VyIGhhcyB3cml0ZSBwZXJt aXNzaW9uCi5UUAouQiBTX0lYVVNSCjAwMTAwIHVzZXIgaGFzIGV4ZWN1dGUgcGVybWlzc2lvbgou VFAKLkIgU19JUldYRwowMDA3MCBncm91cCBoYXMgcmVhZCwgd3JpdGUgYW5kIGV4ZWN1dGUgcGVy bWlzc2lvbgouVFAKLkIgU19JUkdSUAowMDA0MCBncm91cCBoYXMgcmVhZCBwZXJtaXNzaW9uCi5U UAouQiBTX0lXR1JQCjAwMDIwIGdyb3VwIGhhcyB3cml0ZSBwZXJtaXNzaW9uCi5UUAouQiBTX0lY R1JQCjAwMDEwIGdyb3VwIGhhcyBleGVjdXRlIHBlcm1pc3Npb24KLlRQCi5CIFNfSVJXWE8KMDAw MDcgb3RoZXJzIGhhdmUgcmVhZCwgd3JpdGUgYW5kIGV4ZWN1dGUgcGVybWlzc2lvbgouVFAKLkIg U19JUk9USAowMDAwNCBvdGhlcnMgaGF2ZSByZWFkIHBlcm1pc3Npb24KLlRQCi5CIFNfSVdPVEgK MDAwMDIgb3RoZXJzIGhhdmUgd3JpdGUgcGVybWlzc2lvbgouVFAKLkIgU19JWE9USAowMDAwMSBv dGhlcnMgaGF2ZSBleGVjdXRlIHBlcm1pc3Npb24KLlJFCi5UUAouQlIgT19ESVJFQ1QgIiAoU2lu Y2UgTGludXggMi40LjEwKSIKVHJ5IHRvIG1pbmltaXplIGNhY2hlIGVmZmVjdHMgb2YgdGhlIEkv TyB0byBhbmQgZnJvbSB0aGlzIGZpbGUuCkluIGdlbmVyYWwgdGhpcyB3aWxsIGRlZ3JhZGUgcGVy Zm9ybWFuY2UsIGJ1dCBpdCBpcyB1c2VmdWwgaW4Kc3BlY2lhbCBzaXR1YXRpb25zLCBzdWNoIGFz IHdoZW4gYXBwbGljYXRpb25zIGRvIHRoZWlyIG93biBjYWNoaW5nLgpGaWxlIEkvTyBpcyBkb25l IGRpcmVjdGx5IHRvL2Zyb20gdXNlci1zcGFjZSBidWZmZXJzLgpUaGUKLkIgT19ESVJFQ1QKZmxh ZyBvbiBpdHMgb3duIG1ha2VzIGFuIGVmZm9ydCB0byB0cmFuc2ZlciBkYXRhIHN5bmNocm9ub3Vz bHksCmJ1dCBkb2VzIG5vdCBnaXZlIHRoZSBndWFyYW50ZWVzIG9mIHRoZQouQiBPX1NZTkMKZmxh ZyB0aGF0IGRhdGEgYW5kIG5lY2Vzc2FyeSBtZXRhZGF0YSBhcmUgdHJhbnNmZXJyZWQuClRvIGd1 YXJhbnRlZSBzeW5jaHJvbm91cyBJL08sCi5CIE9fU1lOQwptdXN0IGJlIHVzZWQgaW4gYWRkaXRp b24gdG8KLkJSIE9fRElSRUNUIC4KU2VlIE5PVEVTIGJlbG93IGZvciBmdXJ0aGVyIGRpc2N1c3Np b24uCi5zcApBIHNlbWFudGljYWxseSBzaW1pbGFyIChidXQgZGVwcmVjYXRlZCkgaW50ZXJmYWNl IGZvciBibG9jayBkZXZpY2VzCmlzIGRlc2NyaWJlZCBpbgouQlIgcmF3ICg4KS4KLlRQCi5CIE9f RElSRUNUT1JZCklmIFxmSXBhdGhuYW1lXGZQIGlzIG5vdCBhIGRpcmVjdG9yeSwgY2F1c2UgdGhl IG9wZW4gdG8gZmFpbC4KLlwiIEJ1dCBzZWUgdGhlIGZvbGxvd2luZyBhbmQgaXRzIHJlcGxpZXM6 Ci5cIiBodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz90PTExMjc0ODcwMjgwMDAwMSZyPTEm dz0yCi5cIiBbUEFUQ0hdIG9wZW46IE9fRElSRUNUT1JZIGFuZCBPX0NSRUFUIHRvZ2V0aGVyIHNo b3VsZCBmYWlsCi5cIiBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY2F1c2VzIE9fRElSRUNUT1JZIHRv IGJlIGlnbm9yZWQuClRoaXMgZmxhZyBpcyBMaW51eC1zcGVjaWZpYywgYW5kIHdhcyBhZGRlZCBp biBrZXJuZWwgdmVyc2lvbiAyLjEuMTI2LCB0bwphdm9pZCBkZW5pYWwtb2Ytc2VydmljZSBwcm9i bGVtcyBpZgouQlIgb3BlbmRpciAoMykKaXMgY2FsbGVkIG9uIGEKRklGTyBvciB0YXBlIGRldmlj ZSwgYnV0IHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZQppbXBsZW1lbnRhdGlvbiBv ZgouQlIgb3BlbmRpciAoMykuCi5UUAouQiBPX0VYQ0wKRW5zdXJlIHRoYXQgdGhpcyBjYWxsIGNy ZWF0ZXMgdGhlIGZpbGU6CmlmIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQgaW4gY29uanVuY3Rpb24g d2l0aAouQlIgT19DUkVBVCAsCmFuZAouSSBwYXRobmFtZQphbHJlYWR5IGV4aXN0cywgdGhlbgou QlIgb3BlbiAoKQp3aWxsIGZhaWwuCgpXaGVuIHRoZXNlIHR3byBmbGFncyBhcmUgc3BlY2lmaWVk LCBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IGZvbGxvd2VkOgouXCIgUE9TSVguMS0yMDAxIGV4cGxp Y2l0bHkgcmVxdWlyZXMgdGhpcyBiZWhhdmlvci4KaWYKLkkgcGF0aG5hbWUKaXMgYSBzeW1ib2xp YyBsaW5rLCB0aGVuCi5CUiBvcGVuICgpCmZhaWxzIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIHN5 bWJvbGljIGxpbmsgcG9pbnRzIHRvLgoKSW4gZ2VuZXJhbCwgdGhlIGJlaGF2aW9yIG9mCi5CIE9f RVhDTAppcyB1bmRlZmluZWQgaWYgaXQgaXMgdXNlZCB3aXRob3V0Ci5CUiBPX0NSRUFUIC4KVGhl cmUgaXMgb25lIGV4Y2VwdGlvbjogb24gTGludXggMi42IGFuZCBsYXRlciwKLkIgT19FWENMCmNh biBiZSB1c2VkIHdpdGhvdXQKLkIgT19DUkVBVAppZgouSSBwYXRobmFtZQpyZWZlcnMgdG8gYSBi bG9jayBkZXZpY2UuCklmIHRoZSBibG9jayBkZXZpY2UgaXMgaW4gdXNlIGJ5IHRoZSBzeXN0ZW0g KGUuZy4sIG1vdW50ZWQpLAouQlIgb3BlbiAoKQpmYWlscyB3aXRoIHRoZSBlcnJvcgouQlIgRUJV U1kgLgoKT24gTkZTLAouQiBPX0VYQ0wKaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB1c2luZyBORlN2 MyBvciBsYXRlciBvbiBrZXJuZWwgMi42IG9yIGxhdGVyLgpJbiBORlMgZW52aXJvbm1lbnRzIHdo ZXJlCi5CIE9fRVhDTApzdXBwb3J0IGlzIG5vdCBwcm92aWRlZCwgcHJvZ3JhbXMgdGhhdCByZWx5 IG9uIGl0CmZvciBwZXJmb3JtaW5nIGxvY2tpbmcgdGFza3Mgd2lsbCBjb250YWluIGEgcmFjZSBj b25kaXRpb24uClBvcnRhYmxlIHByb2dyYW1zIHRoYXQgd2FudCB0byBwZXJmb3JtIGF0b21pYyBm aWxlIGxvY2tpbmcgdXNpbmcgYSBsb2NrZmlsZSwKYW5kIG5lZWQgdG8gYXZvaWQgcmVsaWFuY2Ug b24gTkZTIHN1cHBvcnQgZm9yCi5CUiBPX0VYQ0wgLApjYW4gY3JlYXRlIGEgdW5pcXVlIGZpbGUg b24KdGhlIHNhbWUgZmlsZSBzeXN0ZW0gKGUuZy4sIGluY29ycG9yYXRpbmcgaG9zdG5hbWUgYW5k IFBJRCksIGFuZCB1c2UKLkJSIGxpbmsgKDIpCnRvIG1ha2UgYSBsaW5rIHRvIHRoZSBsb2NrZmls ZS4KSWYKLkJSIGxpbmsgKDIpCnJldHVybnMgMCwgdGhlIGxvY2sgaXMgc3VjY2Vzc2Z1bC4KT3Ro ZXJ3aXNlLCB1c2UKLkJSIHN0YXQgKDIpCm9uIHRoZSB1bmlxdWUgZmlsZSB0byBjaGVjayBpZiBp dHMgbGluayBjb3VudCBoYXMgaW5jcmVhc2VkIHRvIDIsCmluIHdoaWNoIGNhc2UgdGhlIGxvY2sg aXMgYWxzbyBzdWNjZXNzZnVsLgouVFAKLkIgT19MQVJHRUZJTEUKKExGUykKQWxsb3cgZmlsZXMg d2hvc2Ugc2l6ZXMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIGFuCi5JIG9mZl90CihidXQgY2Fu IGJlIHJlcHJlc2VudGVkIGluIGFuCi5JUiBvZmY2NF90ICkKdG8gYmUgb3BlbmVkLgpUaGUKLkIg X0xBUkdFRklMRTY0X1NPVVJDRQptYWNybyBtdXN0IGJlIGRlZmluZWQKKGJlZm9yZSBpbmNsdWRp bmcKLkkgYW55CmhlYWRlciBmaWxlcykKaW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgZGVmaW5pdGlv bi4KU2V0dGluZyB0aGUKLkIgX0ZJTEVfT0ZGU0VUX0JJVFMKZmVhdHVyZSB0ZXN0IG1hY3JvIHRv IDY0IChyYXRoZXIgdGhhbiB1c2luZwouQlIgT19MQVJHRUZJTEUgKQppcyB0aGUgcHJlZmVycmVk Cm1ldGhvZCBvZiBhY2Nlc3NpbmcgbGFyZ2UgZmlsZXMgb24gMzItYml0IHN5c3RlbXMgKHNlZQou QlIgZmVhdHVyZV90ZXN0X21hY3JvcyAoNykpLgouVFAKLkJSIE9fTk9BVElNRSAiIChTaW5jZSBM aW51eCAyLjYuOCkiCkRvIG5vdCB1cGRhdGUgdGhlIGZpbGUgbGFzdCBhY2Nlc3MgdGltZQouUkkg KCBzdF9hdGltZQppbiB0aGUgaW5vZGUpCndoZW4gdGhlIGZpbGUgaXMKLkJSIHJlYWQgKDIpLgpU aGlzIGZsYWcgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBpbmRleGluZyBvciBiYWNrdXAgcHJvZ3Jh bXMsCndoZXJlIGl0cyB1c2UgY2FuIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBhbW91bnQgb2Yg ZGlzayBhY3Rpdml0eS4KVGhpcyBmbGFnIG1heSBub3QgYmUgZWZmZWN0aXZlIG9uIGFsbCBmaWxl IHN5c3RlbXMuCk9uZSBleGFtcGxlIGlzIE5GUywgd2hlcmUgdGhlIHNlcnZlciBtYWludGFpbnMg dGhlIGFjY2VzcyB0aW1lLgouXCIgVGhlIE9fTk9BVElNRSBmbGFnIGFsc28gYWZmZWN0cyB0aGUg dHJlYXRtZW50IG9mIHN0X2F0aW1lCi5cIiBieSBtbWFwKCkgYW5kIHJlYWRkaXIoMiksIE1USywg RGVjIDA0LgouVFAKLkIgT19OT0NUVFkKSWYKLkkgcGF0aG5hbWUKcmVmZXJzIHRvIGEgdGVybWlu YWwgZGV2aWNlXChlbXNlZQouQlIgdHR5ICg0KVwoZW1pdAp3aWxsIG5vdCBiZWNvbWUgdGhlIHBy b2Nlc3MncyBjb250cm9sbGluZyB0ZXJtaW5hbCBldmVuIGlmIHRoZQpwcm9jZXNzIGRvZXMgbm90 IGhhdmUgb25lLgouVFAKLkIgT19OT0ZPTExPVwpJZiBcZklwYXRobmFtZVxmUCBpcyBhIHN5bWJv bGljIGxpbmssIHRoZW4gdGhlIG9wZW4gZmFpbHMuClRoaXMgaXMgYSBGcmVlQlNEIGV4dGVuc2lv biwgd2hpY2ggd2FzIGFkZGVkIHRvIExpbnV4IGluIHZlcnNpb24gMi4xLjEyNi4KU3ltYm9saWMg bGlua3MgaW4gZWFybGllciBjb21wb25lbnRzIG9mIHRoZSBwYXRobmFtZSB3aWxsIHN0aWxsIGJl CmZvbGxvd2VkLgpTZWUgYWxzbwouQlIgT19OT1BBVEgKYmVsb3cuCi5cIiBUaGUgaGVhZGVycyBm cm9tIGdsaWJjIDIuMC4xMDAgYW5kIGxhdGVyIGluY2x1ZGUgYQouXCIgZGVmaW5pdGlvbiBvZiB0 aGlzIGZsYWc7IFxmSWtlcm5lbHMgYmVmb3JlIDIuMS4xMjYgd2lsbCBpZ25vcmUgaXQgaWYKLlwi IHVzZWRcZlAuCi5UUAouQlIgT19OT05CTE9DSyAiIG9yICIgT19OREVMQVkKV2hlbiBwb3NzaWJs ZSwgdGhlIGZpbGUgaXMgb3BlbmVkIGluIG5vbmJsb2NraW5nIG1vZGUuCk5laXRoZXIgdGhlCi5C UiBvcGVuICgpCm5vciBhbnkgc3Vic2VxdWVudCBvcGVyYXRpb25zIG9uIHRoZSBmaWxlIGRlc2Ny aXB0b3Igd2hpY2ggaXMKcmV0dXJuZWQgd2lsbCBjYXVzZSB0aGUgY2FsbGluZyBwcm9jZXNzIHRv IHdhaXQuCkZvciB0aGUgaGFuZGxpbmcgb2YgRklGT3MgKG5hbWVkIHBpcGVzKSwgc2VlIGFsc28K LkJSIGZpZm8gKDcpLgpGb3IgYSBkaXNjdXNzaW9uIG9mIHRoZSBlZmZlY3Qgb2YKLkIgT19OT05C TE9DSwppbiBjb25qdW5jdGlvbiB3aXRoIG1hbmRhdG9yeSBmaWxlIGxvY2tzIGFuZCB3aXRoIGZp bGUgbGVhc2VzLCBzZWUKLkJSIGZjbnRsICgyKS4KLlRQCi5CUiBPX1BBVEggIiAoc2luY2UgTGlu dXggMi42LjM5KSIKLlwiIGNvbW1pdCAxYWJmMGM3MThmMTVhNTZhMGE0MzU1ODhkMWIxMDRjN2Ez N2RjOWJkCi5cIiBjb21taXQgMzI2YmU3YjQ4NDg0Mzk4OGFmZTU3NTY2YjYyN2ZiN2E3MGJlYWM1 NgouXCIgY29tbWl0IDY1Y2ZjNjcyMjM2MTU3MGJmZTI1NTY5OGQ5Y2Q0ZGNjYWY0NzU3MGQKLlwi Ci5cIiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5tYW4vMjc5MC9mb2N1cz0z NDk2Ci5cIglTdWJqZWN0OiBSZTogW1BBVENIXSBvcGVuKDIpOiBkb2N1bWVudCBPX1BBVEgKLlwi CU5ld3Nncm91cHM6IGdtYW5lLmxpbnV4Lm1hbiwgZ21hbmUubGludXgua2VybmVsCi5cIgpPYnRh aW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgp0 byBpbmRpY2F0ZSBhIGxvY2F0aW9uIGluIHRoZSBmaWxlLXN5c3RlbSB0cmVlIGFuZAp0byBwZXJm b3JtIG9wZXJhdGlvbnMgdGhhdCBhY3QgcHVyZWx5IGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgbGV2 ZWwuClRoZSBmaWxlIGl0c2VsZiBpcyBub3Qgb3BlbmVkLCBhbmQgb3RoZXIgZmlsZSBvcGVyYXRp b25zIChlLmcuLAouQlIgcmVhZCAoMiksCi5CUiB3cml0ZSAoMiksCi5CUiBmY2htb2QgKDIpLAou QlIgZmNob3duICgyKSwKLkJSIGZnZXR4YXR0ciAoMikpCmZhaWwgd2l0aCB0aGUgZXJyb3IKLkJS IEVCQURGIC4KClRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucwouSSBjYW4KYmUgcGVyZm9ybWVkIG9u IHRoZSByZXN1bHRpbmcgZmlsZSBkZXNjcmlwdG9yOgouUlMKLklQICogMwouQlIgY2xvc2UgKDIp OwouQlIgZmNoZGlyICgyKQooc2luY2UgTGludXggMy41KTsKLlwiIGNvbW1pdCAzMzJhMmUxMjQ0 YmQwOGI5ZTNlY2QzNzgwMjg1MTMzOTZhMDA0YTI0Ci5CUiBmc3RhdCAoMikKKHNpbmNlIExpbnV4 IDMuNikuCi5cIiBmc3RhdCgpOiBjb21taXQgNTU4MTVmNzAxNDdkY2ZhM2VhZDU3MzhmZDU2ZDM1 NzRlMmUzYzFjMgouSVAgKgpEdXBsaWNhdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yCi5SQiAoIGR1 cCAoMiksCi5CUiBmY250bCAoMikKLkJSIEZfRFVQRkQgLApldGMuKS4KLklQICoKR2V0dGluZyBh bmQgc2V0dGluZyBmaWxlIGRlc2NyaXB0b3IgZmxhZ3MKLlJCICggZmNudGwgKDIpCi5CUiBGX0dF VEZECmFuZAouQlIgRl9TRVRGRCApLgouSVAgKgpQYXNzaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3Ig YXMgdGhlCi5JUiBkaXJmZAphcmd1bWVudCBvZgouQlIgb3BlbmF0ICgyKQphbmQgdGhlIG90aGVy ICIqYXQoKSIgc3lzdGVtIGNhbGxzLgouSVAgKgpQYXNzaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3Ig dG8gYW5vdGhlciBwcm9jZXNzIHZpYSBhIFVOSVggZG9tYWluIHNvY2tldAooc2VlCi5CUiBTQ01f UklHSFRTCmluCi5CUiB1bml4ICg3KSkuCi5SRQouSVAKV2hlbgouQiBPX1BBVEgKaXMgc3BlY2lm aWVkIGluCi5JUiBmbGFncyAsCmZsYWcgYml0cyBvdGhlciB0aGFuCi5CUiBPX0RJUkVDVE9SWQph bmQKLkJSIE9fTk9GT0xMT1cKYXJlIGlnbm9yZWQuCgpJZiB0aGUKLkJSIE9fTk9GT0xMT1cKZmxh ZyBpcyBhbHNvIHNwZWNpZmllZCwKdGhlbiB0aGUgY2FsbCByZXR1cm5zIGEgZmlsZSBkZXNjcmlw dG9yIHJlZmVycmluZyB0byB0aGUgc3ltYm9saWMgbGluay4KVGhpcyBmaWxlIGRlc2NyaXB0b3Ig Y2FuIGJlIHVzZWQgYXMgdGhlCi5JIGRpcmZkCmFyZ3VtZW50IGluIGNhbGxzIHRvCi5CUiBmY2hv d25hdCAoMiksCi5CUiBmc3RhdGF0ICgyKSwKLkJSIGxpbmthdCAoMiksCmFuZAouQlIgcmVhZGxp bmthdCAoMikKd2l0aCBhbiBlbXB0eSBwYXRobmFtZSB0byBoYXZlIHRoZSBjYWxscyBvcGVyYXRl IG9uIHRoZSBzeW1ib2xpYyBsaW5rLgouVFAKLkIgT19TWU5DClRoZSBmaWxlIGlzIG9wZW5lZCBm b3Igc3luY2hyb25vdXMgSS9PLgpBbnkKLkJSIHdyaXRlICgyKXMKb24gdGhlIHJlc3VsdGluZyBm aWxlIGRlc2NyaXB0b3Igd2lsbCBibG9jayB0aGUgY2FsbGluZyBwcm9jZXNzIHVudGlsCnRoZSBk YXRhIGhhcyBiZWVuIHBoeXNpY2FsbHkgd3JpdHRlbiB0byB0aGUgdW5kZXJseWluZyBoYXJkd2Fy ZS4KLklSICJCdXQgc2VlIE5PVEVTIGJlbG93IiAuCi5UUAouQiBPX1RSVU5DCklmIHRoZSBmaWxl IGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgZmlsZSBhbmQgdGhlIG9wZW4gbW9kZSBh bGxvd3MKd3JpdGluZyAoaS5lLiwgaXMKLkIgT19SRFdSCm9yCi5CUiBPX1dST05MWSApCml0IHdp bGwgYmUgdHJ1bmNhdGVkIHRvIGxlbmd0aCAwLgpJZiB0aGUgZmlsZSBpcyBhIEZJRk8gb3IgdGVy bWluYWwgZGV2aWNlIGZpbGUsIHRoZQouQiBPX1RSVU5DCmZsYWcgaXMgaWdub3JlZC4KT3RoZXJ3 aXNlIHRoZSBlZmZlY3Qgb2YKLkIgT19UUlVOQwppcyB1bnNwZWNpZmllZC4KLlBQClNvbWUgb2Yg dGhlc2Ugb3B0aW9uYWwgZmxhZ3MgY2FuIGJlIGFsdGVyZWQgdXNpbmcKLkJSIGZjbnRsICgyKQph ZnRlciB0aGUgZmlsZSBoYXMgYmVlbiBvcGVuZWQuCgouQlIgY3JlYXQgKCkKaXMgZXF1aXZhbGVu dCB0bwouQlIgb3BlbiAoKQp3aXRoCi5JIGZsYWdzCmVxdWFsIHRvCi5CUiBPX0NSRUFUfE9fV1JP TkxZfE9fVFJVTkMgLgouU0ggUkVUVVJOIFZBTFVFCi5CUiBvcGVuICgpCmFuZAouQlIgY3JlYXQg KCkKcmV0dXJuIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yLCBvciBcLTEgaWYgYW4gZXJyb3Igb2Nj dXJyZWQKKGluIHdoaWNoIGNhc2UsCi5JIGVycm5vCmlzIHNldCBhcHByb3ByaWF0ZWx5KS4KLlNI IEVSUk9SUwouVFAKLkIgRUFDQ0VTClRoZSByZXF1ZXN0ZWQgYWNjZXNzIHRvIHRoZSBmaWxlIGlz IG5vdCBhbGxvd2VkLCBvciBzZWFyY2ggcGVybWlzc2lvbgppcyBkZW5pZWQgZm9yIG9uZSBvZiB0 aGUgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggcHJlZml4IG9mCi5JUiBwYXRobmFtZSAsCm9yIHRo ZSBmaWxlIGRpZCBub3QgZXhpc3QgeWV0IGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlIHBhcmVudCBk aXJlY3RvcnkKaXMgbm90IGFsbG93ZWQuCihTZWUgYWxzbwouQlIgcGF0aF9yZXNvbHV0aW9uICg3 KS4pCi5UUAouQiBFRFFVT1QKV2hlcmUKLkIgT19DUkVBVAppcyBzcGVjaWZpZWQsIHRoZSBmaWxl IGRvZXMgbm90IGV4aXN0LCBhbmQgdGhlIHVzZXIncyBxdW90YSBvZiBkaXNrCmJsb2NrcyBvciBp bm9kZXMgb24gdGhlIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGV4aGF1c3RlZC4KLlRQCi5CIEVFWElT VAouSSBwYXRobmFtZQphbHJlYWR5IGV4aXN0cyBhbmQKLkJSIE9fQ1JFQVQgIiBhbmQgIiBPX0VY Q0wKd2VyZSB1c2VkLgouVFAKLkIgRUZBVUxUCi5JIHBhdGhuYW1lCnBvaW50cyBvdXRzaWRlIHlv dXIgYWNjZXNzaWJsZSBhZGRyZXNzIHNwYWNlLgouVFAKLkIgRUZCSUcKU2VlCi5CUiBFT1ZFUkZM T1cgLgouVFAKLkIgRUlOVFIKV2hpbGUgYmxvY2tlZCB3YWl0aW5nIHRvIGNvbXBsZXRlIGFuIG9w ZW4gb2YgYSBzbG93IGRldmljZQooZS5nLiwgYSBGSUZPOyBzZWUKLkJSIGZpZm8gKDcpKSwKdGhl IGNhbGwgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGhhbmRsZXI7IHNlZQouQlIgc2lnbmFs ICg3KS4KLlRQCi5CIEVJU0RJUgouSSBwYXRobmFtZQpyZWZlcnMgdG8gYSBkaXJlY3RvcnkgYW5k IHRoZSBhY2Nlc3MgcmVxdWVzdGVkIGludm9sdmVkIHdyaXRpbmcKKHRoYXQgaXMsCi5CIE9fV1JP TkxZCm9yCi5CIE9fUkRXUgppcyBzZXQpLgouVFAKLkIgRUxPT1AKVG9vIG1hbnkgc3ltYm9saWMg bGlua3Mgd2VyZSBlbmNvdW50ZXJlZCBpbiByZXNvbHZpbmcKLklSIHBhdGhuYW1lICwKb3IgXGZC T19OT0ZPTExPV1xmUCB3YXMgc3BlY2lmaWVkIGJ1dAouSSBwYXRobmFtZQp3YXMgYSBzeW1ib2xp YyBsaW5rLgouVFAKLkIgRU1GSUxFClRoZSBwcm9jZXNzIGFscmVhZHkgaGFzIHRoZSBtYXhpbXVt IG51bWJlciBvZiBmaWxlcyBvcGVuLgouVFAKLkIgRU5BTUVUT09MT05HCi5JIHBhdGhuYW1lCndh cyB0b28gbG9uZy4KLlRQCi5CIEVORklMRQpUaGUgc3lzdGVtIGxpbWl0IG9uIHRoZSB0b3RhbCBu dW1iZXIgb2Ygb3BlbiBmaWxlcyBoYXMgYmVlbiByZWFjaGVkLgouVFAKLkIgRU5PREVWCi5JIHBh dGhuYW1lCnJlZmVycyB0byBhIGRldmljZSBzcGVjaWFsIGZpbGUgYW5kIG5vIGNvcnJlc3BvbmRp bmcgZGV2aWNlIGV4aXN0cy4KKFRoaXMgaXMgYSBMaW51eCBrZXJuZWwgYnVnOyBpbiB0aGlzIHNp dHVhdGlvbgouQiBFTlhJTwptdXN0IGJlIHJldHVybmVkLikKLlRQCi5CIEVOT0VOVAouQiBPX0NS RUFUCmlzIG5vdCBzZXQgYW5kIHRoZSBuYW1lZCBmaWxlIGRvZXMgbm90IGV4aXN0LgpPciwgYSBk aXJlY3RvcnkgY29tcG9uZW50IGluCi5JIHBhdGhuYW1lCmRvZXMgbm90IGV4aXN0IG9yIGlzIGEg ZGFuZ2xpbmcgc3ltYm9saWMgbGluay4KLlRQCi5CIEVOT01FTQpJbnN1ZmZpY2llbnQga2VybmVs IG1lbW9yeSB3YXMgYXZhaWxhYmxlLgouVFAKLkIgRU5PU1BDCi5JIHBhdGhuYW1lCndhcyB0byBi ZSBjcmVhdGVkIGJ1dCB0aGUgZGV2aWNlIGNvbnRhaW5pbmcKLkkgcGF0aG5hbWUKaGFzIG5vIHJv b20gZm9yIHRoZSBuZXcgZmlsZS4KLlRQCi5CIEVOT1RESVIKQSBjb21wb25lbnQgdXNlZCBhcyBh IGRpcmVjdG9yeSBpbgouSSBwYXRobmFtZQppcyBub3QsIGluIGZhY3QsIGEgZGlyZWN0b3J5LCBv ciBcZkJPX0RJUkVDVE9SWVxmUCB3YXMgc3BlY2lmaWVkIGFuZAouSSBwYXRobmFtZQp3YXMgbm90 IGEgZGlyZWN0b3J5LgouVFAKLkIgRU5YSU8KLkJSIE9fTk9OQkxPQ0sgIiB8ICIgT19XUk9OTFkK aXMgc2V0LCB0aGUgbmFtZWQgZmlsZSBpcyBhIEZJRk8gYW5kCm5vIHByb2Nlc3MgaGFzIHRoZSBm aWxlIG9wZW4gZm9yIHJlYWRpbmcuCk9yLCB0aGUgZmlsZSBpcyBhIGRldmljZSBzcGVjaWFsIGZp bGUgYW5kIG5vIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGV4aXN0cy4KLlRQCi5CIEVPVkVSRkxPVwou SSBwYXRobmFtZQpyZWZlcnMgdG8gYSByZWd1bGFyIGZpbGUgdGhhdCBpcyB0b28gbGFyZ2UgdG8g YmUgb3BlbmVkLgpUaGUgdXN1YWwgc2NlbmFyaW8gaGVyZSBpcyB0aGF0IGFuIGFwcGxpY2F0aW9u IGNvbXBpbGVkCm9uIGEgMzItYml0IHBsYXRmb3JtIHdpdGhvdXQKLkkgLURfRklMRV9PRkZTRVRf QklUUz02NAp0cmllZCB0byBvcGVuIGEgZmlsZSB3aG9zZSBzaXplIGV4Y2VlZHMKLkkgKDI8PDMx KS0xCmJpdHM7CnNlZSBhbHNvCi5CIE9fTEFSR0VGSUxFCmFib3ZlLgpUaGlzIGlzIHRoZSBlcnJv ciBzcGVjaWZpZWQgYnkgUE9TSVguMS0yMDAxOwppbiBrZXJuZWxzIGJlZm9yZSAyLjYuMjQsIExp bnV4IGdhdmUgdGhlIGVycm9yCi5CIEVGQklHCmZvciB0aGlzIGNhc2UuCi5cIiBTZWUgaHR0cDov L2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTMKLlwiICJPcGVuIG9mIGEg bGFyZ2UgZmlsZSBvbiAzMi1iaXQgZmFpbHMgd2l0aCBFRkJJRywgc2hvdWxkIGJlIEVPVkVSRkxP VyIKLlwiIFJlcG9ydGVkIDIwMDYtMTAtMDMKLlRQCi5CIEVQRVJNClRoZQouQiBPX05PQVRJTUUK ZmxhZyB3YXMgc3BlY2lmaWVkLCBidXQgdGhlIGVmZmVjdGl2ZSB1c2VyIElEIG9mIHRoZSBjYWxs ZXIKLlwiIFN0cmljdGx5IHNwZWFraW5nLCBpdCdzIHRoZSBmaWxlIHN5c3RlbSBVSUQuLi4gKE1U SykKZGlkIG5vdCBtYXRjaCB0aGUgb3duZXIgb2YgdGhlIGZpbGUgYW5kIHRoZSBjYWxsZXIgd2Fz IG5vdCBwcml2aWxlZ2VkCi5SQiAoIENBUF9GT1dORVIgKS4KLlRQCi5CIEVST0ZTCi5JIHBhdGhu YW1lCnJlZmVycyB0byBhIGZpbGUgb24gYSByZWFkLW9ubHkgZmlsZSBzeXN0ZW0gYW5kIHdyaXRl IGFjY2VzcyB3YXMKcmVxdWVzdGVkLgouVFAKLkIgRVRYVEJTWQouSSBwYXRobmFtZQpyZWZlcnMg dG8gYW4gZXhlY3V0YWJsZSBpbWFnZSB3aGljaCBpcyBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQg YW5kCndyaXRlIGFjY2VzcyB3YXMgcmVxdWVzdGVkLgouVFAKLkIgRVdPVUxEQkxPQ0sKVGhlCi5C IE9fTk9OQkxPQ0sKZmxhZyB3YXMgc3BlY2lmaWVkLCBhbmQgYW4gaW5jb21wYXRpYmxlIGxlYXNl IHdhcyBoZWxkIG9uIHRoZSBmaWxlCihzZWUKLkJSIGZjbnRsICgyKSkuCi5TSCBDT05GT1JNSU5H IFRPClNWcjQsIDQuM0JTRCwgUE9TSVguMS0yMDAxLgpUaGUKLkJSIE9fRElSRUNUT1JZICwKLkJS IE9fTk9BVElNRSAsCi5CUiBPX05PRk9MTE9XICwKYW5kCi5CUiBPX1BBVEgKZmxhZ3MgYXJlIExp bnV4LXNwZWNpZmljLCBhbmQgb25lIG1heSBuZWVkIHRvIGRlZmluZQouQiBfR05VX1NPVVJDRQoo YmVmb3JlIGluY2x1ZGluZwouSSBhbnkKaGVhZGVyIGZpbGVzKQp0byBvYnRhaW4gdGhlaXIgZGVm aW5pdGlvbnMuCgpUaGUKLkJSIE9fQ0xPRVhFQwpmbGFnIGlzIG5vdCBzcGVjaWZpZWQgaW4gUE9T SVguMS0yMDAxLApidXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLjEtMjAwOC4KCi5CIE9fRElSRUNU CmlzIG5vdCBzcGVjaWZpZWQgaW4gUE9TSVg7IG9uZSBoYXMgdG8gZGVmaW5lCi5CIF9HTlVfU09V UkNFCihiZWZvcmUgaW5jbHVkaW5nCi5JIGFueQpoZWFkZXIgZmlsZXMpCnRvIGdldCBpdHMgZGVm aW5pdGlvbi4KLlNIIE5PVEVTClVuZGVyIExpbnV4LCB0aGUKLkIgT19OT05CTE9DSwpmbGFnIGlu ZGljYXRlcyB0aGF0IG9uZSB3YW50cyB0byBvcGVuCmJ1dCBkb2VzIG5vdCBuZWNlc3NhcmlseSBo YXZlIHRoZSBpbnRlbnRpb24gdG8gcmVhZCBvciB3cml0ZS4KVGhpcyBpcyB0eXBpY2FsbHkgdXNl ZCB0byBvcGVuIGRldmljZXMgaW4gb3JkZXIgdG8gZ2V0IGEgZmlsZSBkZXNjcmlwdG9yCmZvciB1 c2Ugd2l0aAouQlIgaW9jdGwgKDIpLgoKVW5saWtlIHRoZSBvdGhlciB2YWx1ZXMgdGhhdCBjYW4g YmUgc3BlY2lmaWVkIGluCi5JUiBmbGFncyAsCnRoZQouSSAiYWNjZXNzIG1vZGUiCnZhbHVlcwou QlIgT19SRE9OTFkgIiwgIiBPX1dST05MWSAiLCBhbmQgIiBPX1JEV1IgLApkbyBub3Qgc3BlY2lm eSBpbmRpdmlkdWFsIGJpdHMuClJhdGhlciwgdGhleSBkZWZpbmUgdGhlIGxvdyBvcmRlciB0d28g Yml0cyBvZgouSVIgZmxhZ3MgLAphbmQgYXJlIGRlZmluZWQgcmVzcGVjdGl2ZWx5IGFzIDAsIDEs IGFuZCAyLgpJbiBvdGhlciB3b3JkcywgdGhlIGNvbWJpbmF0aW9uCi5CICJPX1JET05MWSB8IE9f V1JPTkxZIgppcyBhIGxvZ2ljYWwgZXJyb3IsIGFuZCBjZXJ0YWlubHkgZG9lcyBub3QgaGF2ZSB0 aGUgc2FtZSBtZWFuaW5nIGFzCi5CUiBPX1JEV1IgLgpMaW51eCByZXNlcnZlcyB0aGUgc3BlY2lh bCwgbm9uc3RhbmRhcmQgYWNjZXNzIG1vZGUgMyAoYmluYXJ5IDExKSBpbgouSSBmbGFncwp0byBt ZWFuOgpjaGVjayBmb3IgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbiBvbiB0aGUgZmlsZSBhbmQg cmV0dXJuIGEgZGVzY3JpcHRvcgp0aGF0IGNhbid0IGJlIHVzZWQgZm9yIHJlYWRpbmcgb3Igd3Jp dGluZy4KVGhpcyBub25zdGFuZGFyZCBhY2Nlc3MgbW9kZSBpcyB1c2VkIGJ5IHNvbWUgTGludXgg ZHJpdmVycyB0byByZXR1cm4gYQpkZXNjcmlwdG9yIHRoYXQgaXMgb25seSB0byBiZSB1c2VkIGZv ciBkZXZpY2Utc3BlY2lmaWMKLkJSIGlvY3RsICgyKQpvcGVyYXRpb25zLgouXCIgU2VlIGZvciBl eGFtcGxlIHV0aWwtbGludXgncyBkaXNrLXV0aWxzL3NldGZkcHJtLmMKLlwiIEZvciBzb21lIGJh Y2tncm91bmQgb24gYWNjZXNzIG1vZGUgMywgc2VlCi5cIiBodHRwOi8vdGhyZWFkLmdtYW5lLm9y Zy9nbWFuZS5saW51eC5rZXJuZWwvNjUzMTIzCi5cIiAiW1JGQ10gY29ycmVjdCBmbGFncyB0byBm X21vZGUgY29udmVyc2lvbiBpbiBfX2RlbnRyeV9vcGVuIgouXCIgTEtNTCwgMTIgTWFyIDIwMDgK LkxQClRoZSAodW5kZWZpbmVkKSBlZmZlY3Qgb2YKLkIgT19SRE9OTFkgfCBPX1RSVU5DCnZhcmll cyBhbW9uZyBpbXBsZW1lbnRhdGlvbnMuCk9uIG1hbnkgc3lzdGVtcyB0aGUgZmlsZSBpcyBhY3R1 YWxseSB0cnVuY2F0ZWQuCi5cIiBMaW51eCAyLjAsIDIuNTogdHJ1bmNhdGUKLlwiIFNvbGFyaXMg NS43LCA1Ljg6IHRydW5jYXRlCi5cIiBJcml4IDYuNTogdHJ1bmNhdGUKLlwiIFRydTY0IDUuMUI6 IHRydW5jYXRlCi5cIiBIUC1VWCAxMS4yMjogdHJ1bmNhdGUKLlwiIEZyZWVCU0QgNC43OiB0cnVu Y2F0ZQouUFAKVGhlcmUgYXJlIG1hbnkgaW5mZWxpY2l0aWVzIGluIHRoZSBwcm90b2NvbCB1bmRl cmx5aW5nIE5GUywgYWZmZWN0aW5nCmFtb25nc3Qgb3RoZXJzCi5CUiBPX1NZTkMgIiBhbmQgIiBP X05ERUxBWSAuCgpQT1NJWCBwcm92aWRlcyBmb3IgdGhyZWUgZGlmZmVyZW50IHZhcmlhbnRzIG9m IHN5bmNocm9uaXplZCBJL08sCmNvcnJlc3BvbmRpbmcgdG8gdGhlIGZsYWdzCi5CUiBPX1NZTkMg LAouQlIgT19EU1lOQyAsCmFuZAouQlIgT19SU1lOQyAuCkN1cnJlbnRseSAoMi42LjMxKSwgTGlu dXggb25seSBpbXBsZW1lbnRzCi5CUiBPX1NZTkMgLApidXQgZ2xpYmMgbWFwcwouQiBPX0RTWU5D CmFuZAouQiBPX1JTWU5DCnRvIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZSBhcwouQlIgT19TWU5D IC4KTW9zdCBMaW51eCBmaWxlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaW1wbGVtZW50IHRoZSBQ T1NJWAouQiBPX1NZTkMKc2VtYW50aWNzLCB3aGljaCByZXF1aXJlIGFsbCBtZXRhZGF0YSB1cGRh dGVzIG9mIGEgd3JpdGUKdG8gYmUgb24gZGlzayBvbiByZXR1cm5pbmcgdG8gdXNlciBzcGFjZSwg YnV0IG9ubHkgdGhlCi5CIE9fRFNZTkMKc2VtYW50aWNzLCB3aGljaCByZXF1aXJlIG9ubHkgYWN0 dWFsIGZpbGUgZGF0YSBhbmQgbWV0YWRhdGEgbmVjZXNzYXJ5CnRvIHJldHJpZXZlIGl0IHRvIGJl IG9uIGRpc2sgYnkgdGhlIHRpbWUgdGhlIHN5c3RlbSBjYWxsIHJldHVybnMuCgpOb3RlIHRoYXQK LkJSIG9wZW4gKCkKY2FuIG9wZW4gZGV2aWNlIHNwZWNpYWwgZmlsZXMsIGJ1dAouQlIgY3JlYXQg KCkKY2Fubm90IGNyZWF0ZSB0aGVtOyB1c2UKLkJSIG1rbm9kICgyKQppbnN0ZWFkLgouTFAKT24g TkZTIGZpbGUgc3lzdGVtcyB3aXRoIFVJRCBtYXBwaW5nIGVuYWJsZWQsCi5CUiBvcGVuICgpCm1h eQpyZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgYnV0LCBmb3IgZXhhbXBsZSwKLkJSIHJlYWQgKDIp CnJlcXVlc3RzIGFyZSBkZW5pZWQKd2l0aCBcZkJFQUNDRVNcZlAuClRoaXMgaXMgYmVjYXVzZSB0 aGUgY2xpZW50IHBlcmZvcm1zCi5CUiBvcGVuICgpCmJ5IGNoZWNraW5nIHRoZQpwZXJtaXNzaW9u cywgYnV0IFVJRCBtYXBwaW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgc2VydmVyIHVwb24KcmVhZCBh bmQgd3JpdGUgcmVxdWVzdHMuCgpJZiB0aGUgZmlsZSBpcyBuZXdseSBjcmVhdGVkLCBpdHMKLklS IHN0X2F0aW1lICwKLklSIHN0X2N0aW1lICwKLkkgc3RfbXRpbWUKZmllbGRzCihyZXNwZWN0aXZl bHksIHRpbWUgb2YgbGFzdCBhY2Nlc3MsIHRpbWUgb2YgbGFzdCBzdGF0dXMgY2hhbmdlLCBhbmQK dGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbjsgc2VlCi5CUiBzdGF0ICgyKSkKYXJlIHNldAp0byB0 aGUgY3VycmVudCB0aW1lLCBhbmQgc28gYXJlIHRoZQouSSBzdF9jdGltZQphbmQKLkkgc3RfbXRp bWUKZmllbGRzIG9mIHRoZQpwYXJlbnQgZGlyZWN0b3J5LgpPdGhlcndpc2UsIGlmIHRoZSBmaWxl IGlzIG1vZGlmaWVkIGJlY2F1c2Ugb2YgdGhlCi5CIE9fVFJVTkMKZmxhZywgaXRzIHN0X2N0aW1l IGFuZCBzdF9tdGltZSBmaWVsZHMgYXJlIHNldCB0byB0aGUgY3VycmVudCB0aW1lLgouU1MgT19E SVJFQ1QKLkxQClRoZQouQiBPX0RJUkVDVApmbGFnIG1heSBpbXBvc2UgYWxpZ25tZW50IHJlc3Ry aWN0aW9ucyBvbiB0aGUgbGVuZ3RoIGFuZCBhZGRyZXNzCm9mIHVzZXItc3BhY2UgYnVmZmVycyBh bmQgdGhlIGZpbGUgb2Zmc2V0IG9mIEkvT3MuCkluIExpbnV4IGFsaWdubWVudApyZXN0cmljdGlv bnMgdmFyeSBieSBmaWxlIHN5c3RlbSBhbmQga2VybmVsIHZlcnNpb24gYW5kIG1pZ2h0IGJlCmFi c2VudCBlbnRpcmVseS4KSG93ZXZlciB0aGVyZSBpcyBjdXJyZW50bHkgbm8gZmlsZSBzeXN0ZW1c LWluZGVwZW5kZW50CmludGVyZmFjZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gZGlzY292ZXIgdGhl c2UgcmVzdHJpY3Rpb25zIGZvciBhIGdpdmVuCmZpbGUgb3IgZmlsZSBzeXN0ZW0uClNvbWUgZmls ZSBzeXN0ZW1zIHByb3ZpZGUgdGhlaXIgb3duIGludGVyZmFjZXMKZm9yIGRvaW5nIHNvLCBmb3Ig ZXhhbXBsZSB0aGUKLkIgWEZTX0lPQ19ESU9JTkZPCm9wZXJhdGlvbiBpbgouQlIgeGZzY3RsICgz KS4KLkxQClVuZGVyIExpbnV4IDIuNCwgdHJhbnNmZXIgc2l6ZXMsIGFuZCB0aGUgYWxpZ25tZW50 IG9mIHRoZSB1c2VyIGJ1ZmZlcgphbmQgdGhlIGZpbGUgb2Zmc2V0IG11c3QgYWxsIGJlIG11bHRp cGxlcyBvZiB0aGUgbG9naWNhbCBibG9jayBzaXplCm9mIHRoZSBmaWxlIHN5c3RlbS4KVW5kZXIg TGludXggMi42LCBhbGlnbm1lbnQgdG8gNTEyLWJ5dGUgYm91bmRhcmllcyBzdWZmaWNlcy4KLkxQ Ci5CIE9fRElSRUNUCkkvT3Mgc2hvdWxkIG5ldmVyIGJlIHJ1biBjb25jdXJyZW50bHkgd2l0aCB0 aGUKLkJSIGZvcmsgKDIpCnN5c3RlbSBjYWxsLAppZiB0aGUgbWVtb3J5IGJ1ZmZlciBpcyBhIHBy aXZhdGUgbWFwcGluZwooaS5lLiwgYW55IG1hcHBpbmcgY3JlYXRlZCB3aXRoIHRoZQouQlIgbW1h cCAoMikKLkJSIE1BUF9QUklWQVRFCmZsYWc7CnRoaXMgaW5jbHVkZXMgbWVtb3J5IGFsbG9jYXRl ZCBvbiB0aGUgaGVhcCBhbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVmZmVycykuCkFueSBzdWNo IEkvT3MsIHdoZXRoZXIgc3VibWl0dGVkIHZpYSBhbiBhc3luY2hyb25vdXMgSS9PIGludGVyZmFj ZSBvciBmcm9tCmFub3RoZXIgdGhyZWFkIGluIHRoZSBwcm9jZXNzLApzaG91bGQgYmUgY29tcGxl dGVkIGJlZm9yZQouQlIgZm9yayAoMikKaXMgY2FsbGVkLgpGYWlsdXJlIHRvIGRvIHNvIGNhbiBy ZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uIGFuZCB1bmRlZmluZWQgYmVoYXZpb3IgaW4KcGFyZW50 IGFuZCBjaGlsZCBwcm9jZXNzZXMuClRoaXMgcmVzdHJpY3Rpb24gZG9lcyBub3QgYXBwbHkgd2hl biB0aGUgbWVtb3J5IGJ1ZmZlciBmb3IgdGhlCi5CIE9fRElSRUNUCkkvT3Mgd2FzIGNyZWF0ZWQg dXNpbmcKLkJSIHNobWF0ICgyKQpvcgouQlIgbW1hcCAoMikKd2l0aCB0aGUKLkIgTUFQX1NIQVJF RApmbGFnLgpOb3IgZG9lcyB0aGlzIHJlc3RyaWN0aW9uIGFwcGx5IHdoZW4gdGhlIG1lbW9yeSBi dWZmZXIgaGFzIGJlZW4gYWR2aXNlZCBhcwouQiBNQURWX0RPTlRGT1JLCndpdGgKLkJSIG1hZHZp c2UgKDIpLAplbnN1cmluZyB0aGF0IGl0IHdpbGwgbm90IGJlIGF2YWlsYWJsZQp0byB0aGUgY2hp bGQgYWZ0ZXIKLkJSIGZvcmsgKDIpLgouTFAKVGhlCi5CIE9fRElSRUNUCmZsYWcgd2FzIGludHJv ZHVjZWQgaW4gU0dJIElSSVgsIHdoZXJlIGl0IGhhcyBhbGlnbm1lbnQKcmVzdHJpY3Rpb25zIHNp bWlsYXIgdG8gdGhvc2Ugb2YgTGludXggMi40LgpJUklYIGhhcyBhbHNvIGEKLkJSIGZjbnRsICgy KQpjYWxsIHRvIHF1ZXJ5IGFwcHJvcHJpYXRlIGFsaWdubWVudHMsIGFuZCBzaXplcy4KRnJlZUJT RCA0LnggaW50cm9kdWNlZAphIGZsYWcgb2YgdGhlIHNhbWUgbmFtZSwgYnV0IHdpdGhvdXQgYWxp Z25tZW50IHJlc3RyaWN0aW9ucy4KLkxQCi5CIE9fRElSRUNUCnN1cHBvcnQgd2FzIGFkZGVkIHVu ZGVyIExpbnV4IGluIGtlcm5lbCB2ZXJzaW9uIDIuNC4xMC4KT2xkZXIgTGludXgga2VybmVscyBz aW1wbHkgaWdub3JlIHRoaXMgZmxhZy4KU29tZSBmaWxlIHN5c3RlbXMgbWF5IG5vdCBpbXBsZW1l bnQgdGhlIGZsYWcgYW5kCi5CUiBvcGVuICgpCndpbGwgZmFpbCB3aXRoCi5CIEVJTlZBTAppZiBp dCBpcyB1c2VkLgouTFAKQXBwbGljYXRpb25zIHNob3VsZCBhdm9pZCBtaXhpbmcKLkIgT19ESVJF Q1QKYW5kIG5vcm1hbCBJL08gdG8gdGhlIHNhbWUgZmlsZSwKYW5kIGVzcGVjaWFsbHkgdG8gb3Zl cmxhcHBpbmcgYnl0ZSByZWdpb25zIGluIHRoZSBzYW1lIGZpbGUuCkV2ZW4gd2hlbiB0aGUgZmls ZSBzeXN0ZW0gY29ycmVjdGx5IGhhbmRsZXMgdGhlIGNvaGVyZW5jeSBpc3N1ZXMgaW4KdGhpcyBz aXR1YXRpb24sIG92ZXJhbGwgSS9PIHRocm91Z2hwdXQgaXMgbGlrZWx5IHRvIGJlIHNsb3dlciB0 aGFuCnVzaW5nIGVpdGhlciBtb2RlIGFsb25lLgpMaWtld2lzZSwgYXBwbGljYXRpb25zIHNob3Vs ZCBhdm9pZCBtaXhpbmcKLkJSIG1tYXAgKDIpCm9mIGZpbGVzIHdpdGggZGlyZWN0IEkvTyB0byB0 aGUgc2FtZSBmaWxlcy4KLkxQClRoZSBiZWhhdmlvdXIgb2YKLkIgT19ESVJFQ1QKd2l0aCBORlMg d2lsbCBkaWZmZXIgZnJvbSBsb2NhbCBmaWxlIHN5c3RlbXMuCk9sZGVyIGtlcm5lbHMsIG9yCmtl cm5lbHMgY29uZmlndXJlZCBpbiBjZXJ0YWluIHdheXMsIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNv bWJpbmF0aW9uLgpUaGUgTkZTIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgcGFzc2luZyB0aGUg ZmxhZyB0byB0aGUgc2VydmVyLCBzbwouQiBPX0RJUkVDVApJL08gd2lsbCBvbmx5IGJ5cGFzcyB0 aGUgcGFnZSBjYWNoZSBvbiB0aGUgY2xpZW50OyB0aGUgc2VydmVyIG1heQpzdGlsbCBjYWNoZSB0 aGUgSS9PLgpUaGUgY2xpZW50IGFza3MgdGhlIHNlcnZlciB0byBtYWtlIHRoZSBJL08Kc3luY2hy b25vdXMgdG8gcHJlc2VydmUgdGhlIHN5bmNocm9ub3VzIHNlbWFudGljcyBvZgouQlIgT19ESVJF Q1QgLgpTb21lIHNlcnZlcnMgd2lsbCBwZXJmb3JtIHBvb3JseSB1bmRlciB0aGVzZSBjaXJjdW1z dGFuY2VzLCBlc3BlY2lhbGx5CmlmIHRoZSBJL08gc2l6ZSBpcyBzbWFsbC4KU29tZSBzZXJ2ZXJz IG1heSBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8KbGllIHRvIGNsaWVudHMgYWJvdXQgdGhlIEkvTyBo YXZpbmcgcmVhY2hlZCBzdGFibGUgc3RvcmFnZTsgdGhpcwp3aWxsIGF2b2lkIHRoZSBwZXJmb3Jt YW5jZSBwZW5hbHR5IGF0IHNvbWUgcmlzayB0byBkYXRhIGludGVncml0eQppbiB0aGUgZXZlbnQg b2Ygc2VydmVyIHBvd2VyIGZhaWx1cmUuClRoZSBMaW51eCBORlMgY2xpZW50IHBsYWNlcyBubyBh bGlnbm1lbnQgcmVzdHJpY3Rpb25zIG9uCi5CIE9fRElSRUNUCkkvTy4KLlBQCkluIHN1bW1hcnks Ci5CIE9fRElSRUNUCmlzIGEgcG90ZW50aWFsbHkgcG93ZXJmdWwgdG9vbCB0aGF0IHNob3VsZCBi ZSB1c2VkIHdpdGggY2F1dGlvbi4KSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhcHBsaWNhdGlvbnMg dHJlYXQgdXNlIG9mCi5CIE9fRElSRUNUCmFzIGEgcGVyZm9ybWFuY2Ugb3B0aW9uIHdoaWNoIGlz IGRpc2FibGVkIGJ5IGRlZmF1bHQuCi5QUAouUlMKIlRoZSB0aGluZyB0aGF0IGhhcyBhbHdheXMg ZGlzdHVyYmVkIG1lIGFib3V0IE9fRElSRUNUIGlzIHRoYXQgdGhlIHdob2xlCmludGVyZmFjZSBp cyBqdXN0IHN0dXBpZCwgYW5kIHdhcyBwcm9iYWJseSBkZXNpZ25lZCBieSBhIGRlcmFuZ2VkIG1v bmtleQpvbiBzb21lIHNlcmlvdXMgbWluZC1jb250cm9sbGluZyBzdWJzdGFuY2VzLiJcKGVtTGlu dXMKLlJFCi5TSCBCVUdTCkN1cnJlbnRseSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBz aWduYWwtZHJpdmVuCkkvTyBieSBzcGVjaWZ5aW5nCi5CIE9fQVNZTkMKd2hlbiBjYWxsaW5nCi5C UiBvcGVuICgpOwp1c2UKLkJSIGZjbnRsICgyKQp0byBlbmFibGUgdGhpcyBmbGFnLgouXCIgRklY TUUgLiBDaGVjayBidWd6aWxsYSByZXBvcnQgb24gb3BlbihPX0FTWU5DKQouXCIgU2VlIGh0dHA6 Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD01OTkzCi5TSCBTRUUgQUxTTwou QlIgY2htb2QgKDIpLAouQlIgY2hvd24gKDIpLAouQlIgY2xvc2UgKDIpLAouQlIgZHVwICgyKSwK LkJSIGZjbnRsICgyKSwKLkJSIGxpbmsgKDIpLAouQlIgbHNlZWsgKDIpLAouQlIgbWtub2QgKDIp LAouQlIgbW1hcCAoMiksCi5CUiBtb3VudCAoMiksCi5CUiBvcGVuYXQgKDIpLAouQlIgcmVhZCAo MiksCi5CUiBzb2NrZXQgKDIpLAouQlIgc3RhdCAoMiksCi5CUiB1bWFzayAoMiksCi5CUiB1bmxp bmsgKDIpLAouQlIgd3JpdGUgKDIpLAouQlIgZm9wZW4gKDMpLAouQlIgZmlmbyAoNyksCi5CUiBw YXRoX3Jlc29sdXRpb24gKDcpLAouQlIgc3ltbGluayAoNykK --047d7b86f7c850936504d7df41df-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/