Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vppTy-00GyM3-2q for pgpool-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 15:16:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vppTx-00FoqP-2z for pgpool-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 15:16:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vppTx-00FoqB-0T for pgpool-hackers@lists.postgresql.org; Tue, 10 Feb 2026 15:16:53 +0000 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vppTr-00000001Smd-3LuU for pgpool-hackers@lists.postgresql.org; Tue, 10 Feb 2026 15:16:51 +0000 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-7d18a9d2b1aso4660514a34.2 for ; Tue, 10 Feb 2026 07:16:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770736607; cv=none; d=google.com; s=arc-20240605; b=Gq2AnQHp/hSLuxLaD9PVPj8dp9owm4hcitRb47yeE73NYlwdNKsIIZm9DAsbrPmyLx 6Pil1p8wPvfp0h5DADpdAsH4KmTzrUyKYERNASQfFz4TZa1Yg4OYwM3kVuaIIcMWSUPa /t1AemVCqzb76cD3dr0Zmd7c6rt78wHhhCdqOOeqXjh6YhmC1LmnqKQkpywNLeab08nY AsXhWKGfIJAWav3eypDnfnkq6oyddDORZ1R8WKWaqOs/NUoUeH+ITUX+wHC6W5Aen7Oq 1sfvACuiFUODJ8X4RsUSJcrTyrWSAvost8nFaZqiAPyNz/n60t2nqeHs4XbuamSjAGDY SUEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=HDRUeNASVi3cNnUhs3Y4tUgropVtudgIUyIO/mjDU1o=; fh=m3oiE62fRN5J1XaE+5vpHZRIgCyFefxVI0mFw3d8yxA=; b=FD6S99y4HHA6CWsAmCa2HE3NRyzNVq0T8En6P5QSCFjiH1XiBQzKylowGpWgoPwNXB YeHOm2CM3sYNiRxq/3Af+NEQ0m1CFHZO5BlpuSKPU29uliaYE0eHtnd+QgaE903i93eF p1nEumhcaIS/jSyUFr7r1igU6ycxSH8fOCBsIthDK2T05BZafCtHcFwmVWR7JNB0Eth/ p3S5vJlL4fpMqtXb57xadX62Ja+JL5yE1DaTeVDD221dc8ybM9mL9iNJOTisnf6Vst5F HAC6BPy0ftIDvWCCN0XIM6t9tdo2bVoLzdi/mZM563eMtQ6fZMQkkA/sSvzSCV+GVYmE Dnnw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tailorbrands.com; s=google; t=1770736607; x=1771341407; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=HDRUeNASVi3cNnUhs3Y4tUgropVtudgIUyIO/mjDU1o=; b=Y8xnM8CBJC/l8QBtKv+sqznDO2miSF6qESXETkLKPcf06XDynFkW+T5DU9eTPWjDpj iUS5Hsauh0CjZtFu/tI+M7gj2vh/00+cCJQB9eFXCkE7jw0mKO7TZjCXYYUmwZh0aBKv XnKFrO5aK8XuyEb7Su1IBgdT9MHLRPMeYUka6dAE4eyGA4ZTvGwy4kF5hNIN/YrOPWPP f7YNAmJlZmoNYFDiMCPfIrnH/GQAzYFh1nzRVTTsEwf2ecvooD+pPecPwMz0rzguVZQB k1CKSDBXMdjNBMi70+4CXq3EPQMi5a09ecg+/DmM+Uv2qzBnFAGYrwqd3l/H+RRS7PKc iSbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770736607; x=1771341407; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=HDRUeNASVi3cNnUhs3Y4tUgropVtudgIUyIO/mjDU1o=; b=EZ2dc8H9r/eYcu4WeC+uw/EqgBZCX44byhXOSwogKgD9xi4vJkM+lSTbUlHeFnnWFC bfVSAIGBpf4msPV8Mk+mW4GUrnOVuB+XQa/w2O0Qm+QyPtWTVTeLB4uV+w4NmUvEuJ7T fbUZQ1g9KjTFBY14a/tbxJIPudxIxGS7IZj0qR+FQv1CO95J2bdFnp9sBV6iYj+2b2ZL 35BKJqI1EQ5fOUGlzBlmklZ7eEXKDQoEmzS2hQXFzinv5swi3Jp02vsi2rlDLIllwsHq VHQaZP5zjCVvm9d9Tvw67Lk0dgbrCciielCVNAHTbNrS2yQ5npajpBT8iUfXFfu/hU7T cQAw== X-Gm-Message-State: AOJu0YwlAcbg44+16s9cFjm6EkDDKiTn09szpdPgMILtgojLuNdUYl+e dbIEzTAxgCwBhtN8TdceJSsmAANDxDNDDD6DurSsGk6414KWpx6UClR0OUJXbV8dFVSCoj+qjmI b43aHvAO/dFrE2OdcUyxa5UPXjo8aUctDLGwYNgC7XA== X-Gm-Gg: AZuq6aLft9qtkE6MVa8zB+ya2eZIgEFhK9bXTdjgwm5j0L/hQjunftt2pcevEryufRL ZU6/w9rglwGRBSZFERcsVBAHF2ybkyIjxaHLSMJLZqH0EDouLXZE1EHExuPWKyTBlY/nga9gYY4 fi0df9w7NiUlCco9PmvjEeMRuVCBJ0e4FUZOjzKTDlWliqboSAUjsNmBYR/qGcnUk2S3XkiRk0F sYXC6IRF246fySUSuT29xlyxLiltO6Lzvv+ryNhfAv8ZqwCs8jlggwV1BSZbSZV5sMd7HnUpxa2 GhpizmUHOuS2Be3ms/wkfw3m6cc5CGoyPJIVE+i8PHXfrN2SCIdsPxGGNUc3jlf+PjskefxgMSw M+1EugylU9n85+pua00Nn38pmJ2WX0hz/s1J0iVSOTCL9AuvDfwZzDrBOx3J7tlyLnjyMBJhW X-Received: by 2002:a05:6830:67f7:b0:7cf:ce25:e38d with SMTP id 46e09a7af769-7d4644890f7mr9254686a34.24.1770736606512; Tue, 10 Feb 2026 07:16:46 -0800 (PST) MIME-Version: 1.0 References: <20260130.170950.551399957723794225.ishii@postgresql.org> <20260203.164353.362943818466117773.ishii@postgresql.org> <20260204.082343.1732190257543250666.ishii@postgresql.org> In-Reply-To: From: Nadav Shatz Date: Tue, 10 Feb 2026 17:16:33 +0200 X-Gm-Features: AZwV_Qi34wjx-JSGdEMma_SOrbrY3NvexIgfqbUE2uYZGLF6qJOx5womqjML60I Message-ID: Subject: Re: Proposal: Recent mutated table tracking in memory To: Tatsuo Ishii Cc: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006c9043064a79be1e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006c9043064a79be1e Content-Type: multipart/alternative; boundary="0000000000006c9041064a79be1c" --0000000000006c9041064a79be1c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Tatsuo, After reading more about disable_load_balance_on_write=3Ddml_adaptive i cam= e to the thought that this feature is actually an "extension" of that since it covers "global" and not just per transaction behavior. in any case i think it makes more sense that it sits under the disable_load_balance_on_write and not as a standalone for clarity. I'm attaching below an updated patch with these adjustments. Please let me know what you think. On Fri, Feb 6, 2026 at 1:29=E2=80=AFPM Nadav Shatz = wrote: > Hi Tatsuo, > > Thank you for all the great comments and questions! I took under > consideration all of them either adding support/tests or detailing the > limitations in the docs. > > Let me know what you think of the latest patch attached here > > On Wed, Feb 4, 2026 at 1:23=E2=80=AFAM Tatsuo Ishii wrote: > >> From: Tatsuo Ishii >> Subject: Re: Proposal: Recent mutated table tracking in memory >> Date: Tue, 03 Feb 2026 16:43:53 +0900 (JST) >> Message-ID: <20260203.164353.362943818466117773.ishii@postgresql.org> >> >> > Hi Nadav, >> > >> > Thank you for updating the patch! >> > >> >> Thank you for the comments! >> >> >> >> I agree with all of them. Let me know what you think of the changes >> and new >> >> naming. >> > >> > I still think "memory_map" is too generic. Anything put on memory for >> > data mapping could be called "memory map". I recommend to change the >> > name to more feature specific one: What about replacing "memory_map" >> > with "track_table_mutation"? It's a little bit longer name but it >> > clearly represents the feature. Any better ideas are welcome. >> > >> > - memory_map_enabled: Enable/disable the feature (default: off) >> > - memory_map_ttl_factor: TTL multiplier for replication delay (default= : >> 5.0) >> > - memory_map_cold_start_duration: Cold start period in ms (default: >> 2000) >> > - memory_map_table_buckets: Hash buckets for table map (default: 1024) >> > - memory_map_table_size: Max tracked tables (default: 2048) >> > - memory_map_query_buckets: Hash buckets for query cache (default: 204= 8) >> > - memory_map_query_cache_size: Max cached queries (default: 10000) >> > >> > Also I feel memory_map_query_cache_size is confusing because there's >> > already "query cache" feature in pgpool. Can we change it something >> > like "query_parse_cache_size"? >> > >> > Review comments: >> > >> > (1) Why the regression test is 45? Shouldn't it be 42? (the last >> > feature test is 041.external_replication_delay). >> > >> > (2) You enhance the patch to deal with leader watch changing. That's >> > good. However, I don't see a test case for it in test.sh. >> > >> > (3) It seems the patch does not support TRUNCATE, MERGE, PREPARE and >> > WITH + updating. If so, it should be noted in the docs as a limitation >> > of the feature. >> >> (4) It seems the patch does not consider transactions. If an UPDATE is >> performed in a transaction and the transaction gets rollbacked, load >> balance is disabled despite that fact that the table modification did >> not happen. >> >> Best regards, >> -- >> Tatsuo Ishii >> SRA OSS K.K. >> English: http://www.sraoss.co.jp/index_en/ >> Japanese:http://www.sraoss.co.jp >> > > > -- > Nadav Shatz > Tailor Brands | CTO > --=20 Nadav Shatz Tailor Brands | CTO --0000000000006c9041064a79be1c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Tatsuo,

After reading more about=C2= =A0disable_load_balance_on_write=3Ddml_adaptive i came to the thought that = this feature is actually an "extension" of that since it covers &= quot;global" and not just per transaction behavior. in any case i thin= k it makes more sense that it sits under the=C2=A0disable_load_balance_on_w= rite and not as a standalone for clarity.

I'm = attaching below an updated patch with these adjustments.

Please let=C2=A0me know what you think.

O= n Fri, Feb 6, 2026 at 1:29=E2=80=AFPM Nadav Shatz <nadav@tailorbrands.com> wrote:
Hi=C2=A0Tatsuo,=

Thank you for all the great comments and questions! I t= ook under consideration all of them either adding=C2=A0support/tests or det= ailing the limitations in the docs.

Let me know wh= at you=C2=A0think of the latest patch attached here

On Wed, Feb 4, 202= 6 at 1:23=E2=80=AFAM Tatsuo Ishii <ishii@postgresql.org> wrote:
From: Tatsuo Ishii <ishii@postgresql.org>=
Subject: Re: Proposal: Recent mutated table tracking in memory
Date: Tue, 03 Feb 2026 16:43:53 +0900 (JST)
Message-ID: <20260203.164353.362943818466117773.ishii@= postgresql.org>

> Hi Nadav,
>
> Thank you for updating the patch!
>
>> Thank you for the comments!
>>
>> I agree with all of them. Let me know what you think of the change= s and new
>> naming.
>
> I still think "memory_map" is too generic. Anything put on m= emory for
> data mapping could be called "memory map". I recommend to ch= ange the
> name to more feature specific one: What about replacing "memory_m= ap"
> with "track_table_mutation"? It's a little bit longer na= me but it
> clearly represents the feature. Any better ideas are welcome.
>
> - memory_map_enabled: Enable/disable the feature (default: off)
> - memory_map_ttl_factor: TTL multiplier for replication delay (default= : 5.0)
> - memory_map_cold_start_duration: Cold start period in ms (default: 20= 00)
> - memory_map_table_buckets: Hash buckets for table map (default: 1024)=
> - memory_map_table_size: Max tracked tables (default: 2048)
> - memory_map_query_buckets: Hash buckets for query cache (default: 204= 8)
> - memory_map_query_cache_size: Max cached queries (default: 10000)
>
> Also I feel memory_map_query_cache_size is confusing because there'= ;s
> already "query cache" feature in pgpool.=C2=A0 Can we change= it something
> like "query_parse_cache_size"?
>
> Review comments:
>
> (1) Why the regression test is 45? Shouldn't it be 42? (the last > feature test is 041.external_replication_delay).
>
> (2) You enhance the patch to deal with leader watch changing. That'= ;s
> good. However, I don't see a test case for it in test.sh.
>
> (3) It seems the patch does not support TRUNCATE, MERGE, PREPARE and > WITH + updating. If so, it should be noted in the docs as a limitation=
> of the feature.

(4) It seems the patch does not consider transactions. If an UPDATE is
performed in a transaction and the transaction gets rollbacked, load
balance is disabled despite that fact that the table modification did
not happen.

Best regards,
--
Tatsuo Ishii
SRA OSS K.K.
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO


--
Nadav Shatz
<= font color=3D"#000000">Tailor Brands=C2=A0| CTO
--0000000000006c9041064a79be1c-- --0000000000006c9043064a79be1e Content-Type: application/octet-stream; name="table_track.patch" Content-Disposition: attachment; filename="table_track.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlgopnq10 RnJvbSA0NjlhMzY2NjNiOGQ4NWQ4NDRjZDk0ZmQ5MmFmYTk1YTRkZDAxNjBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYWRhdiBTaGF0eiA8bmFkYXZAdGFpbG9yYnJhbmRzLmNvbT4K RGF0ZTogVHVlLCA2IEphbiAyMDI2IDEyOjQxOjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRmVh dHVyZTogYWRkIGluLW1lbW9yeSB0YWJsZSB0cmFja2luZyB0byBwcmV2ZW50IHN0YWxlIHJlYWRz CiBmcm9tIHJlcGxpY2FzCgpJbnRyb2R1Y2VzICdkbWxfYWRhcHRpdmVfZ2xvYmFsJyBhcyBhIG5l dyB2YWx1ZSBmb3IgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUuClRoaXMgbW9kZSBpcyBh IHN1cGVyc2V0IG9mIGRtbF9hZGFwdGl2ZTogaXQgcGVyZm9ybXMgcGVyLXRyYW5zYWN0aW9uIGxv Y2FsIHRyYWNraW5nCkFORCBjcm9zcy1zZXNzaW9uIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgb2Yg cmVjZW50bHkgd3JpdHRlbiB0YWJsZXMsIHJvdXRpbmcgcmVhZHMKdG8gcHJpbWFyeSB1bnRpbCBh IFRUTCAoYmFzZWQgb24gbWVhc3VyZWQgcmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuCgpTdWIt cGFyYW1ldGVycyAodHJhY2tfdGFibGVfbXV0YXRpb25fKikgY29udHJvbCBUVEwgZmFjdG9yLCBj b2xkIHN0YXJ0IGR1cmF0aW9uLApoYXNoIHRhYmxlIHNpemluZywgYW5kIHF1ZXJ5IHBhcnNlIGNh Y2hlIHNpemluZy4KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbCBi L2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCmluZGV4IGVlMTlmYWJlYmFiMjIxMGNkNGFi ZTU5YTcxMWEwMzZhYzBhYzg5NDMuLmM2OTgxNGRkMDVjYjY2ZmI1ZjRmNDc5NDRiZDY4ODY5MjM1 NGE3MDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCkBAIC0xMTA4LDYgKzExMDgsMTggQEAgYXBwX25h bWVfcmVkaXJlY3RfcHJlZmVyZW5jZV9saXN0ICZndDsgZGF0YWJhc2VfcmVkaXJlY3RfcHJlZmVy ZW5jZV9saXN0ICZndDsgdXMKIAkJRGVwZW5kZW50IGZ1bmN0aW9ucywgdHJpZ2dlcnMsIGFuZCB2 aWV3cyBvbiB0aGUgdGFibGVzIGNhbiBiZSBjb25maWd1cmVkCiAJCXVzaW5nIDx4cmVmIGxpbmtl bmQ9Imd1Yy1kbWwtYWRhcHRpdmUtb2JqZWN0LXJlbGF0aW9uc2hpcC1saXN0Ij4KICAgICAgPC9w YXJhPgorCisgICAgIDxwYXJhPgorCQlJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gPHZhcm5h bWU+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvdmFybmFtZT4sCisJCTxwcm9kdWN0bmFtZT5QZ3Bvb2wt SUk8Lz4gYmVoYXZlcyBsaWtlIDx2YXJuYW1lPmRtbF9hZGFwdGl2ZTwvdmFybmFtZT4KKwkJKHBl ci10cmFuc2FjdGlvbiB3cml0ZSB0cmFja2luZykgYW5kIGFkZGl0aW9uYWxseSB1c2VzIHNoYXJl ZCBtZW1vcnkgdG8gdHJhY2sKKwkJcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgYWNyb3NzIGFsbCBz ZXNzaW9ucyBjbHVzdGVyLXdpZGUuIFdoZW4gYSB0YWJsZSBpcworCQl3cml0dGVuIGluIGFueSBz ZXNzaW9uLCBzdWJzZXF1ZW50IHJlYWRzIG9mIHRoYXQgdGFibGUgZnJvbSBhbnkgc2Vzc2lvbiBh cmUKKwkJcm91dGVkIHRvIHByaW1hcnkgdW50aWwgYSBUVEwgKGJhc2VkIG9uIG1lYXN1cmVkIHJl cGxpY2F0aW9uIGRlbGF5KSBleHBpcmVzLgorCQlUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIGFm dGVyIHdyaXRlcyBldmVuIGFjcm9zcyBkaWZmZXJlbnQgY29ubmVjdGlvbnMuCisJCVNlZSA8eHJl ZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbiI+IGZvciB0aGUg c3ViLXBhcmFtZXRlcnMKKwkJdGhhdCBjb250cm9sIHRoZSBzaGFyZWQtbWVtb3J5IHRyYWNraW5n IGJlaGF2aW9yLgorICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVu dHJ5PgogCkBAIC0xMTkzLDQgKzEyMDUsMjU3IEBAIGRtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRp b25zaGlwX2xpc3QgPSAndGFibGVfMTp0YWJsZV8yJwogCiAgIDwvdmFyaWFibGVsaXN0PgogIDwv c2VjdDI+CisKKyA8c2VjdDIgaWQ9InJ1bnRpbWUtY29uZmlnLXRhYmxlLW11dGF0aW9uLW1hcCI+ CisgIDx0aXRsZT5UYWJsZSBNdXRhdGlvbiBNYXAgQ29uZmlndXJhdGlvbiAoTGFnbGVzcyBSZXBs aWNhIFJlYWRzKTwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGVzZSBwYXJhbWV0ZXJzIGNvbmZp Z3VyZSB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSwgd2hpY2ggaXMgYWN0aXZhdGVk IGJ5IHNldHRpbmcKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1kaXNhYmxlLWxvYWQtYmFsYW5jZS1v bi13cml0ZSI+IHRvIDxsaXRlcmFsPmRtbF9hZGFwdGl2ZV9nbG9iYWw8L2xpdGVyYWw+LgorICAg VGhlIGZlYXR1cmUgdHJhY2tzIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIHRvIHByZXZlbnQgc3Rh bGUgcmVhZHMgZnJvbSByZXBsaWNhIG5vZGVzIGR1cmluZworICAgcmVwbGljYXRpb24gbGFnLCBp bXBsZW1lbnRpbmcgdGhlICJsYWdsZXNzIiBhcmNoaXRlY3R1cmUgcGF0dGVybiBmb3IgZGlzdHJp YnV0ZWQgc3lzdGVtcworICAgd2l0aCByZWFkIHJlcGxpY2FzLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBXaGVuIGEgdGFibGUgaXMgbW9kaWZpZWQgKElOU0VSVC9VUERBVEUvREVMRVRFKSwg aXQgaXMgbWFya2VkIGFzICJzdGFsZSIgZm9yIGEgVFRMIHBlcmlvZAorICAgKDxsaXRlcmFsPnJl cGxpY2F0aW9uX2RlbGF5ICogdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvbGl0ZXJh bD4pLiBBbnkgU0VMRUNUIHF1ZXJpZXMgb24gc3RhbGUgdGFibGVzIGFyZSByb3V0ZWQKKyAgIHRv IHRoZSBwcmltYXJ5IG5vZGUgaW5zdGVhZCBvZiByZXBsaWNhcywgZW5zdXJpbmcgcmVhZC1hZnRl ci13cml0ZSBjb25zaXN0ZW5jeS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmZWF0 dXJlIHJlcXVpcmVzIDx4cmVmIGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlvbi1kZWxheS1zb3VyY2Ut Y21kIj4gdG8gYmUgY29uZmlndXJlZAorICAgZm9yIG1vbml0b3JpbmcgcmVwbGljYXRpb24gZGVs YXkgZnJvbSByZXBsaWNhcy4KKyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+Cisg ICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4gaW5jcmVh c2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdpdGggZGVmYXVsdCBzZXR0aW5ncywKKyAg ICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0ZWx5IDYuNCBNQiBvZiBzaGFyZWQgbWVt b3J5ICgwLjEgTUIgZm9yIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIGZvciBxdWVyeSBjYWNoZSku CisgICAgTWVtb3J5IHVzYWdlIHNjYWxlcyB3aXRoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoK KyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIFRhYmxlIHRyYWNraW5nOiA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl90 YWJsZV9zaXplICogNDAgYnl0ZXM8L2xpdGVyYWw+IChkZWZhdWx0OiAyMDQ4ICogNDAgPSB+ODAg S0IpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBRdWVyeSBjYWNoZTogPGxpdGVyYWw+dHJhY2tfdGFibGVfbXV0YXRpb25f cXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSAqIDY0MCBieXRlczwvbGl0ZXJhbD4gKGRlZmF1bHQ6IDEw MDAwICogNjQwID0gfjYuMyBNQikKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L2l0ZW1pemVkbGlzdD4KKyAgIDxwYXJhPgorICAgIEZvciBoaWdoLXRyYWZmaWMgc3lzdGVtcyB3 aXRoIGxhcmdlIGNhY2hlIHNpemVzIChlLmcuLCA8bGl0ZXJhbD50cmFja190YWJsZV9tdXRhdGlv bl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gMTAwMDAwPC9saXRlcmFsPiksCisgICAgbWVtb3J5 IHVzYWdlIGNhbiByZWFjaCA2NCBNQiBvciBtb3JlLiBDb25zaWRlciB5b3VyIHN5c3RlbSdzIGF2 YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHdoZW4gdXNpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2ds b2JhbDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dmFyaWFibGVs aXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tdHRs LWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yIj4KKyAg ICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC92YXJuYW1l PiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFt ZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTXVsdGlwbGll ciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVyYWw+VFRMID0gcmVwbGljYXRpb25fZGVs YXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPi4KKyAgICAgIEhp Z2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4gYnV0IG1heSByZWR1Y2UgcmVh ZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAg VmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD41LjA8L2xpdGVyYWw+ LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8 cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3VyYXRpb25zLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlk PSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tY29sZC1zdGFydC1kdXJhdGlvbiIgeHJlZmxhYmVs PSJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uIj4KKyAgICA8dGVybT48 dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9uPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEdXJhdGlv biBpbiBtaWxsaXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBh IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICAgICAgVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyB3 aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSB0cmFjayB0YWJs ZSBtdXRhdGlvbgorICAgICAgaXMgcG9wdWxhdGVkIHdpdGggcmVjZW50IHdyaXRlIGhpc3Rvcnku CisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHdhdGNoZG9nIGlzIGVuYWJs ZWQgYW5kIHRoZSBsb2NhbCBub2RlIGJlY29tZXMgdGhlIGxlYWRlciwgUGdwb29sLUlJIGFsc28g dHJpZ2dlcnMgYQorICAgICAgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yIHRoaXMgZHVyYXRpb24gdG8g YXZvaWQgc3RhbGUgcmVhZHMgYWZ0ZXIgbGVhZGVyc2hpcCBjaGFuZ2VzLgorICAgICA8L3BhcmE+ CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDAtNjAwMDAgbXMuIERlZmF1bHQgaXMg PGxpdGVyYWw+MjAwMDwvbGl0ZXJhbD4gKDIgc2Vjb25kcykuCisgICAgICBTZXQgdG8gMCB0byBk aXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUg Y2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bvb2wtSUk8Lz4gY29uZmln dXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJs ZS1idWNrZXRzIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMi PgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8 L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJl ciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxl LgorICAgICAgSGlnaGVyIHZhbHVlcyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGFuZCBpbXByb3Zl IGxvb2t1cCBwZXJmb3JtYW5jZS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZh bGlkIHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDI0PC9saXRlcmFsPi4K KyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIiB4cmVm bGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUiPgorICAgIDx0ZXJtPjx2YXJu YW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRl Z2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHRhYmxlcyB0aGF0 IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRoZSB0cmFjayB0YWJsZSBtdXRhdGlv bi4KKyAgICAgIFdoZW4gZnVsbCwgb2xkZXN0IGVudHJpZXMgYXJlIGV2aWN0ZWQgdXNpbmcgYSBz aW1wbGUgZXZpY3Rpb24gc3RyYXRlZ3kuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAg ICBWYWxpZCByYW5nZTogMTI4LTEzMTA3Mi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRl cmFsPi4KKyAgICAgIE1lbW9yeSB1c2FnZTogYXBwcm94aW1hdGVseSA0MCBieXRlcyBwZXIgZW50 cnkuCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0 LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVlcnktYnVja2V0 cyIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzIj4KKyAgICA8 dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1l PiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFy eT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzPC92YXJuYW1lPiBj b25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAg PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBOdW1iZXIgb2YgaGFz aCBidWNrZXRzIGZvciB0aGUgcXVlcnkgcGFyc2UgY2FjaGUuIFRoZSBjYWNoZSBzdG9yZXMgbm9y bWFsaXplZAorICAgICAgcXVlcnkgc3RyaW5ncyBtYXBwZWQgdG8gdGhlaXIgdGFibGUgZGVwZW5k ZW5jaWVzIHRvIGF2b2lkIHJlcGVhdGVkIHBhcnNpbmcuCisgICAgIDwvcGFyYT4KKyAgICAgPHBh cmE+CisgICAgICBWYWxpZCByYW5nZTogNjQtNjU1MzYuIERlZmF1bHQgaXMgPGxpdGVyYWw+MjA0 ODwvbGl0ZXJhbD4uCisgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2Vy dmVyIHN0YXJ0LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tcXVl cnktcGFyc2UtY2FjaGUtc2l6ZSIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVy eV9wYXJzZV9jYWNoZV9zaXplIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRh dGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlw ZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT50cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplPC92YXJuYW1lPiBjb25maWd1cmF0aW9u IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJlciBvZiBxdWVyeSBw YXJzZSByZXN1bHRzIHRvIGNhY2hlLiBVc2VzIExSVSBldmljdGlvbiB3aGVuIGZ1bGwuCisgICAg ICBMYXJnZXIgY2FjaGVzIHJlZHVjZSBwYXJzaW5nIG92ZXJoZWFkIGJ1dCBjb25zdW1lIG1vcmUg c2hhcmVkIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJh bmdlOiAxMDAtMTAwMDAwMC4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4xMDAwMDwvbGl0ZXJhbD4uCisg ICAgICBNZW1vcnkgdXNhZ2U6IGFwcHJveGltYXRlbHkgNjQwIGJ5dGVzIHBlciBlbnRyeSAofjYu MyBNQiBmb3IgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDAgZW50cmllcykuCisgICAgICBUaGlz IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0 PgorCisgIDxzZWN0MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tZXhh bXBsZSI+CisgICA8dGl0bGU+VHJhY2sgVGFibGUgTXV0YXRpb24gQ29uZmlndXJhdGlvbiBFeGFt cGxlPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRvIGVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlv biB3aXRoIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3Jpbmc6CisgICA8L3BhcmE+CisgICA8cHJv Z3JhbWxpc3Rpbmc+CisjIEVuYWJsZSBkbWxfYWRhcHRpdmVfZ2xvYmFsIG1vZGUgKGluY2x1ZGVz IHRyYWNrIHRhYmxlIG11dGF0aW9uKQorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IgPSA1 LjAKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisKKyMg Q29uZmlndXJlIGV4dGVybmFsIHJlcGxpY2F0aW9uIGRlbGF5IG1vbml0b3JpbmcKK3JlcGxpY2F0 aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAnL3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNo JworcmVwbGljYXRpb25fZGVsYXlfc291cmNlX3RpbWVvdXQgPSAxMAorCisjIEFkanVzdCBjYWNo ZSBzaXplcyBiYXNlZCBvbiB3b3JrbG9hZCAoaW5jcmVhc2VzIG1lbW9yeSB1c2FnZSkKK3RyYWNr X3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSA0MDk2ICAgICAgIyBUcmFjayB1cCB0byA0MDk2 IHRhYmxlcyAofjE2MCBLQikKK3RyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hl X3NpemUgPSA1MDAwMCAgIyBDYWNoZSA1MGsgcXVlcmllcyAofjMxIE1CKQorICAgPC9wcm9ncmFt bGlzdGluZz4KKyAgIDxwYXJhPgorICAgIFRvdGFsIHNoYXJlZCBtZW1vcnkgcmVxdWlyZWQgZm9y IGFib3ZlIGNvbmZpZ3VyYXRpb246IGFwcHJveGltYXRlbHkgMzEuMiBNQiAoMzEgTUIgcXVlcnkg Y2FjaGUgKyAwLjIgTUIgdGFibGUgbWFwICsgb3ZlcmhlYWQpLgorICAgIERlZmF1bHQgY29uZmln dXJhdGlvbiAoMTAwMDAgcXVlcnkgY2FjaGUgZW50cmllcywgMjA0OCB0YWJsZXMpIHJlcXVpcmVz IGFwcHJveGltYXRlbHkgNi40IE1CLgorICAgPC9wYXJhPgorICA8L3NlY3QzPgorCisgIDxzZWN0 MyBpZD0icnVudGltZS1jb25maWctdHJhY2stdGFibGUtbXV0YXRpb24tbGltaXRhdGlvbnMiPgor ICAgPHRpdGxlPkxpbWl0YXRpb25zPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIFRoZSB0cmFjayB0 YWJsZSBtdXRhdGlvbiBmZWF0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb246CisgICA8 L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPiBzdGF0ZW1lbnRzIGFyZSBub3QgdHJhY2tl ZC4gV2hlbiBhIHByZXBhcmVkIHN0YXRlbWVudAorICAgICAgY29udGFpbmluZyBkYXRhIG1vZGlm aWNhdGlvbiBpcyBleGVjdXRlZCwgdGhlIHRhYmxlIG11dGF0aW9uIGlzIG5vdCByZWNvcmRlZC4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDxw YXJhPgorICAgIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyBwcmVwYXJlZCBzdGF0ZW1lbnRzIGFu ZCByZXF1aXJlcyByZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5LAorICAgIGNvbnNpZGVyIHVz aW5nIGV4cGxpY2l0IHRyYW5zYWN0aW9uIHJvdXRpbmcgb3IgdGhlIDxsaXRlcmFsPi8qTk8gTE9B RCBCQUxBTkNFKi88L2xpdGVyYWw+CisgICAgY29tbWVudCBkaXJlY3RpdmUgZm9yIGFmZmVjdGVk IHF1ZXJpZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBUaGUgZm9sbG93aW5nIHN0YXRl bWVudCB0eXBlcyA8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4gdHJhY2tlZCBhbmQgd2lsbCBtYXJr IHRhYmxlcyBhcyBzdGFsZToKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPklOU0VSVDwvbGl0ZXJhbD4sIDxs aXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIDxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD4KKyAgICAg IHN0YXRlbWVudHMgKGluY2x1ZGluZyB0aG9zZSB3aXRoIDxsaXRlcmFsPlJFVFVSTklORzwvbGl0 ZXJhbD4gY2xhdXNlcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJhbD4gc3Rh dGVtZW50cyAoaW5jbHVkaW5nIG11bHRpcGxlIHRhYmxlcykuCisgICAgIDwvcGFyYT4KKyAgICA8 L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5N RVJHRTwvbGl0ZXJhbD4gc3RhdGVtZW50cyAoUG9zdGdyZVNRTCAxNSspLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxp dGVyYWw+V0lUSDwvbGl0ZXJhbD4gY2xhdXNlcyBjb250YWluaW5nIGRhdGEgbW9kaWZpY2F0aW9u cyAoQ29tbW9uIFRhYmxlIEV4cHJlc3Npb25zCisgICAgICB3aXRoIDxsaXRlcmFsPklOU0VSVDwv bGl0ZXJhbD4sIDxsaXRlcmFsPlVQREFURTwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPkRFTEVURTwv bGl0ZXJhbD4pLgorICAgICAgRm9yIGV4YW1wbGUsIDxsaXRlcmFsPldJVEggZGVsZXRlZCBBUyAo REVMRVRFIEZST00gdDEgUkVUVVJOSU5HICopIFNFTEVDVCAqIEZST00gZGVsZXRlZDwvbGl0ZXJh bD4KKyAgICAgIHdpbGwgcHJvcGVybHkgbWFyayB0YWJsZSA8bGl0ZXJhbD50MTwvbGl0ZXJhbD4g YXMgc3RhbGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxp c3Q+CisgICA8cGFyYT4KKyAgICA8ZW1waGFzaXM+VHJhbnNhY3Rpb24gUm9sbGJhY2sgQmVoYXZp b3I6PC9lbXBoYXNpcz4gVGFibGVzIGFyZSBtYXJrZWQgYXMgc3RhbGUgd2hlbiB0aGUKKyAgICA8 bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBvciA8 bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+IGNvbW1hbmQKKyAgICBjb21wbGV0ZXMsIHJlZ2FyZGxl c3Mgb2Ygd2hldGhlciB0aGUgZW5jbG9zaW5nIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvciBy b2xsZWQgYmFjay4KKyAgICBUaGlzIG1lYW5zIHRoYXQgaWYgYSB0cmFuc2FjdGlvbiBpcyByb2xs ZWQgYmFjaywgdGhlIHRhYmxlIHJlbWFpbnMgbWFya2VkIGFzIHN0YWxlIHVudGlsCisgICAgdGhl IFRUTCBleHBpcmVzLCBldmVuIHRob3VnaCBubyBhY3R1YWwgZGF0YSBtb2RpZmljYXRpb24gb2Nj dXJyZWQuIFRoaXMgaXMgYnkgZGVzaWduOgorICAgIHRoZSBmZWF0dXJlIGVycnMgb24gdGhlIHNp ZGUgb2YgY2F1dGlvbiBieSByb3V0aW5nIG1vcmUgcXVlcmllcyB0byB0aGUgcHJpbWFyeSByYXRo ZXIKKyAgICB0aGFuIHJpc2tpbmcgc3RhbGUgcmVhZHMuIFRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qg b2YgdGhpcyBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggaXMgbWluaW1hbAorICAgIGNvbXBhcmVkIHRv IHRoZSBzYWZldHkgYmVuZWZpdCBvZiBhdm9pZGluZyBzdGFsZSByZWFkcy4KKyAgIDwvcGFyYT4K KyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisKIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFr ZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3OGFiNTMwNTVlODI4YTM3YjY0Nzc4 MDE2NDBhZmYxN2ZmODRhNy4uMzk1ODhhZjU4ZGViYTA0NWRmZmMwMWFlOTMyMTE1YjhhOWRiZmNm MiAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKyBiL3NyYy9NYWtlZmlsZS5hbQpAQCAt MzUsNiArMzUsNyBAQCBwZ3Bvb2xfU09VUkNFUyA9IG1haW4vbWFpbi5jIFwKIAlyZXdyaXRlL3Bv b2xfdGltZXN0YW1wLmMgXAogCXJld3JpdGUvcG9vbF9sb2JqLmMgXAogCXV0aWxzL3Bvb2xfc2Vs ZWN0X3dhbGtlci5jIFwKKwl1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMgXAogCXV0 aWxzL3N0cmxjcHkuYyBcCiAJdXRpbHMvcHNwcmludGYuYyBcCiAJdXRpbHMvcG9vbF9wYXJhbXMu YyBcCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jIGIvc3Jj L2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYwppbmRleCA2OGFiYjdmNDFjYjk2ZDg1NmM4 MjRhMTQ4ODQyNzQ4YmZiN2E0ZDEyLi42MjNkODc1MTY3N2ZkNmYzOWQwZTEyZjBlM2U4OTkxNzE4 OTBmNmUwIDEwMDY0NAotLS0gYS9zcmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jCisr KyBiL3NyYy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKQEAgLTI5MCw2ICsyOTAsNyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVtX2VudHJ5IGRpc2FibGVfbG9hZF9iYWxh bmNlX29uX3dyaXRlX29wdGlvbnNbXSA9CiAJeyJ0cmFuc190cmFuc2FjdGlvbiIsIERMQk9XX1RS QU5TX1RSQU5TQUNUSU9OLCBmYWxzZX0sCiAJeyJhbHdheXMiLCBETEJPV19BTFdBWVMsIGZhbHNl fSwKIAl7ImRtbF9hZGFwdGl2ZSIsIERMQk9XX0RNTF9BREFQVElWRSwgZmFsc2V9LAorCXsiZG1s X2FkYXB0aXZlX2dsb2JhbCIsIERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwsIGZhbHNlfSwKIAl7 TlVMTCwgMCwgZmFsc2V9CiB9OwogCkBAIC0xNzU3LDYgKzE3NTgsMTcgQEAgc3RhdGljIHN0cnVj dCBjb25maWdfaW50X2FycmF5IENvbmZpZ3VyZU5hbWVzSW50QXJyYXlbXSA9CiAKIHN0YXRpYyBz dHJ1Y3QgY29uZmlnX2RvdWJsZSBDb25maWd1cmVOYW1lc0RvdWJsZVtdID0KIHsKKwl7CisJCXsi dHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciIsIENGR0NYVF9SRUxPQUQsIExPQURfQkFM QU5DRV9DT05GSUcsCisJCQkiVFRMIG11bHRpcGxpZXIgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9u IChUVEwgPSByZXBsaWNhdGlvbl9kZWxheSAqIGZhY3RvcikiLAorCQkJQ09ORklHX1ZBUl9UWVBF X0RPVUJMRSwgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0 YXRpb25fdHRsX2ZhY3RvciwKKwkJNS4wLAkJCQkJLyogYm9vdCB2YWx1ZTogNXggcmVwbGljYXRp b24gZGVsYXkgKi8KKwkJMS4wLCAxMDAuMCwJCQkJLyogbWluLCBtYXggKi8KKwkJTlVMTCwgTlVM TCwgTlVMTAorCX0sCisKIAkvKiBFbmQtb2YtbGlzdCBtYXJrZXIgKi8KIAlFTVBUWV9DT05GSUdf RE9VQkxFCiB9OwpAQCAtMjM1NSw2ICsyMzY3LDYxIEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2lu dCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJ CXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiIsIENGR0NYVF9SRUxP QUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRv IGZvcmNlIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBjaGlsZCBwcm9jZXNzIHN0YXJ0cy4iLAor CQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIEdVQ19VTklUX01TCisJCX0sCisJCSZnX3Bv b2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24sCisJCTIw MDAsCQkJCQkvKiAyIHNlY29uZHMgKi8KKwkJMCwgNjAwMDAsCQkJCS8qIDAgdG8gNjAgc2Vjb25k cyAqLworCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRh dGlvbl90YWJsZV9idWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJ CQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uIiwKKwkJ CUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJCTEwMjQsCisJCTY0LCA2NTUzNiwK KwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25f dGFibGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIk1heGlt dW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdHJhY2sgdGFibGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJ R19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3Rh YmxlX211dGF0aW9uX3RhYmxlX3NpemUsCisJCTIwNDgsCisJCTEyOCwgMTMxMDcyLAorCQlOVUxM LCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9i dWNrZXRzIiwgQ0ZHQ1hUX0lOSVQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9m IGhhc2ggYnVja2V0cyBmb3IgcXVlcnkgcGFyc2UgY2FjaGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQ RV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0 aW9uX3F1ZXJ5X2J1Y2tldHMsCisJCTIwNDgsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2Fj aGVfc2l6ZSIsIENGR0NYVF9JTklULCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIk1heGltdW0g bnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlcnkgcGFyc2UgY2FjaGUuIiwKKwkJCUNPTkZJR19WQVJf VFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211 dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUsCisJCTEwMDAwLAorCQkxMDAsIDEwMDAwMDAs CisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJ RU1QVFlfQ09ORklHX0lOVAogfTsKZGlmZiAtLWdpdCBhL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlf Y29udGV4dC5jIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMKaW5kZXggN2NmOTgx M2ViN2Q1ODY3OGJjODZhMGFhYTM4YmQzYzY0NDViNjY4Ny4uZDdhYzg5Y2E5YmQ1YzZhNWI1OGJi MzY0ZDE4ZGQ0OGU2NDVmZDUzMiAxMDA2NDQKLS0tIGEvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9j b250ZXh0LmMKKysrIGIvc3JjL2NvbnRleHQvcG9vbF9xdWVyeV9jb250ZXh0LmMKQEAgLTI5LDYg KzI5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9zdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAidXRpbHMv cG9vbF9zZWxlY3Rfd2Fsa2VyLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAjaW5jbHVkZSAiY29u dGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9xdWVy eV9jb250ZXh0LmgiCiAjaW5jbHVkZSAicGFyc2VyL25vZGVzLmgiCkBAIC0xODI4LDcgKzE4Mjks NyBAQCBpc19pbl9saXN0KGNoYXIgKm5hbWUsIExpc3QgKmxpc3QpCiBzdGF0aWMgYm9vbAogaXNf c2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4 dCkKIHsKLQlpZiAobm9kZSA9PSBOVUxMIHx8IHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFs YW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkUpCisJaWYgKG5vZGUgPT0gTlVMTCB8 fCAhRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChJc0Eobm9kZSwgUmFuZ2VWYXIp KQpAQCAtMTgzNiw3ICsxODM3LDcgQEAgaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xp c3QoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJUmFuZ2VWYXIgICAqcmd2ID0gKFJhbmdl VmFyICopIG5vZGU7CiAJCVBPT0xfU0VTU0lPTl9DT05URVhUICpzZXNzaW9uX2NvbnRleHQgPSBw b29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOwogCi0JCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Np b25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24pCisJCWlmIChETEJPV19JU19ETUxfQURBUFRJ VkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSAmJiBzZXNzaW9u X2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uKQogCQl7CiAJCQllcmVwb3J0KERFQlVHMSwKIAkJ CQkJKGVycm1zZygiaXNfc2VsZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3Q6IFwiJXNcIiwg Zm91bmQgcmVsYXRpb24gXCIlc1wiIiwgKGNoYXIgKikgY29udGV4dCwgcmd2LT5yZWxuYW1lKSkp OwpAQCAtMTg4MCw3ICsxODgxLDcgQEAgc3RhdGljIGNoYXIgKmdldF9hc3NvY2lhdGVkX29iamVj dF9mcm9tX2RtbF9hZGFwdGl2ZV9yZWxhdGlvbnMKIHZvaWQKIGNoZWNrX29iamVjdF9yZWxhdGlv bnNoaXBfbGlzdChjaGFyICpuYW1lLCBib29sIGlzX2Z1bmNfbmFtZSkKIHsKLQlpZiAocG9vbF9j b25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElW RSAmJiBwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2ZV9vYmplY3RfcmVsYXRpb25zaGlw X2xpc3QpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHBvb2xfY29uZmlnLT5wYXJzZWRfZG1sX2FkYXB0aXZl X29iamVjdF9yZWxhdGlvbnNoaXBfbGlzdCkKIAl7CiAJCVBPT0xfU0VTU0lPTl9DT05URVhUICpz ZXNzaW9uX2NvbnRleHQgPSBwb29sX2dldF9zZXNzaW9uX2NvbnRleHQoZmFsc2UpOwogCkBAIC0x OTQ0LDcgKzE5NDUsNyBAQCBhZGRfb2JqZWN0X2ludG9fdGVtcF93cml0ZV9saXN0KE5vZGUgKm5v ZGUsIHZvaWQgKmNvbnRleHQpCiBzdGF0aWMgdm9pZAogZG1sX2FkYXB0aXZlKE5vZGUgKm5vZGUs IGNoYXIgKnF1ZXJ5KQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChETEJPV19JU19ETUxfQURBUFRJ VkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCS8q IFNldC9VbnNldCB0cmFuc2FjdGlvbiBzdGF0dXMgZmxhZ3MgKi8KIAkJaWYgKElzQShub2RlLCBU cmFuc2FjdGlvblN0bXQpKQpAQCAtMjAxMCw2ICsyMDExLDE4IEBAIHdoZXJlX3RvX3NlbmRfbWFp bl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnks IE5vZGUKIAlpZiAoZGVzdCA9PSBQT09MX1BSSU1BUlkpCiAJewogCQlwb29sX3NldF9ub2RlX3Rv X2JlX3NlbnQocXVlcnlfY29udGV4dCwgUFJJTUFSWV9OT0RFX0lEKTsKKworCQkvKgorCQkgKiBS ZXNvbHZlIHRhYmxlIGFuZCBkYXRhYmFzZSBPSURzIG5vdyB0byBwb3B1bGF0ZSByZWxjYWNoZS4K KwkJICogVGhpcyBhdm9pZHMgcG90ZW50aWFsIGhhbmdzIGluIENvbW1hbmRDb21wbGV0ZSB3aGVy ZSB3ZSBzaG91bGRuJ3QKKwkJICogYmUgcnVubmluZyBuZXcgcXVlcmllcyBhZ2FpbnN0IHRoZSBi YWNrZW5kLgorCQkgKi8KKwkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9v bl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCQl7CisJCQlpbnQgKm9pZHM7 CisJCQlwb29sX2V4dHJhY3RfdGFibGVfb2lkcyhub2RlLCAmb2lkcyk7CisJCQlwb29sX3RyYWNr X3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQoKTsKKwkJfQogCX0KIAkvKiBTaG91bGQg YmUgc2VudCB0byBib3RoIHByaW1hcnkgYW5kIHN0YW5kYnk/ICovCiAJZWxzZSBpZiAoZGVzdCA9 PSBQT09MX0JPVEgpCkBAIC0yMTM5LDYgKzIxNTIsMTA3IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9y ZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5v ZGUKIAkJCQl7CiAJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQ UklNQVJZX05PREVfSUQpOwogCQkJCX0KKwkJCQkvKgorCQkJCSAqIENoZWNrIHRyYWNrIHRhYmxl IG11dGF0aW9uIGZvciByZWNlbnRseSB3cml0dGVuIHRhYmxlcy4KKwkJCQkgKiBJZiBpbiBjb2xk IHN0YXJ0IG9yIGFueSB0YWJsZSB3YXMgcmVjZW50bHkgd3JpdHRlbiwKKwkJCQkgKiByb3V0ZSB0 byBwcmltYXJ5IHRvIGF2b2lkIHN0YWxlIHJlYWRzLgorCQkJCSAqLworCQkJCWVsc2UgaWYgKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURB UFRJVkVfR0xPQkFMKQorCQkJCXsKKwkJCQkJYm9vbAkJZm9yY2VfcHJpbWFyeSA9IGZhbHNlOwor CisJCQkJCS8qIER1cmluZyBjb2xkIHN0YXJ0LCByb3V0ZSBldmVyeXRoaW5nIHRvIHByaW1hcnkg Ki8KKwkJCQkJaWYgKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5fY29sZF9zdGFydCgpKQor CQkJCQl7CisJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJKGVycm1zZygiY291bGQgbm90 IGxvYWQgYmFsYW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNvbGQgc3RhcnQi KSwKKwkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSBQUklNQVJZIGZvciBxdWVyeT0g XCIlc1wiIiwgcXVlcnkpKSk7CisJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJfQor CQkJCQllbHNlCisJCQkJCXsKKwkJCQkJLyogRXh0cmFjdCB0YWJsZSBvaWRzIGFuZCBjaGVjayBp ZiBhbnkgYXJlIHN0YWxlICovCisJCQkJCVNlbGVjdENvbnRleHQgY3R4OworCQkJCQlpbnQJCQlk Ym9pZDsKKwkJCQkJaW50CQkJbnVtX29pZHM7CisJCQkJCWludAkJCWk7CisKKwkJCQkJbWVtc2V0 KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKKwkJCQkJbnVtX29pZHMgPSBwb29sX2V4dHJhY3RfdGFi bGVfb2lkc19mcm9tX3NlbGVjdF9zdG10KG5vZGUsICZjdHgpOworCQkJCQlpZiAobnVtX29pZHMg PiAwKQorCQkJCQl7CisJCQkJCQlkYm9pZCA9IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0 X2RhdGFiYXNlX29pZCgpOworCisJCQkJCQlpZiAoZGJvaWQgPD0gMCkKKwkJCQkJCXsKKwkJCQkJ CQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFu Y2UgYmVjYXVzZSBkYXRhYmFzZSBvaWQgd2FzIHVuYXZhaWxhYmxlIiksCisJCQkJCQkJCQkgZXJy ZGV0YWlsKCJkZXN0aW5hdGlvbiA9IFBSSU1BUlkgZm9yIHF1ZXJ5PSBcIiVzXCIiLCBxdWVyeSkp KTsKKwkJCQkJCQlmb3JjZV9wcmltYXJ5ID0gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJ CQkJCXsKKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX29pZHM7IGkrKykKKwkJCQkJCQl7CisJ CQkJCQkJCWlmIChwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2lzX3N0YWxlKGN0eC50 YWJsZV9vaWRzW2ldLCBkYm9pZCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCWVyZXBvcnQoREVCVUcx LAorCQkJCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFi bGUgXCIlc1wiIHdhcyByZWNlbnRseSB3cml0dGVuIiwKKwkJCQkJCQkJCQkJCQljdHgudGFibGVf bmFtZXNbaV0pLAorCQkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlvbiA9IFBSSU1BUlkg Zm9yIHF1ZXJ5PSBcIiVzXCIiLCBxdWVyeSkpKTsKKwkJCQkJCQkJCWZvcmNlX3ByaW1hcnkgPSB0 cnVlOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJ CX0KKwkJCQl9CisKKwkJCQkJaWYgKGZvcmNlX3ByaW1hcnkpCisJCQkJCXsKKwkJCQkJCXBvb2xf c2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVfSUQpOworCQkJ CQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyogUHJvY2VlZCB3aXRoIGxvYWQgYmFsYW5j aW5nICovCisJCQkJCQlpZiAocG9vbF9jb25maWctPnN0YXRlbWVudF9sZXZlbF9sb2FkX2JhbGFu Y2UpCisJCQkJCQl7CisJCQkJCQkJc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9p ZCA9IHNlbGVjdF9sb2FkX2JhbGFuY2luZ19ub2RlKCk7CisJCQkJCQl9CisKKwkJCQkJCS8qCisJ CQkJCQkgKiBBcyBzdHJlYW1pbmcgcmVwbGljYXRpb24gZGVsYXkgaXMgdG9vIG11Y2gsIGlmCisJ CQkJCQkgKiBwcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSBpcyB0cnVlIHRoZW4gZWxlY3QgbmV3 IGxvYWQKKwkJCQkJCSAqIGJhbGFuY2Ugbm9kZSB3aGljaCBpcyBsb3dlc3QgZGVsYXllZCwgZmFs c2UgdGhlbiBzZW5kCisJCQkJCQkgKiB0byB0aGUgcHJpbWFyeS4KKwkJCQkJCSAqLworCQkJCQkJ aWYgKFNUUkVBTSAmJiBjaGVja19yZXBsaWNhdGlvbl9kZWxheShzZXNzaW9uX2NvbnRleHQtPmxv YWRfYmFsYW5jZV9ub2RlX2lkKSkKKwkJCQkJCXsKKwkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSBvZiB0b28gbXVj aCByZXBsaWNhdGlvbiBkZWxheSIpLAorCQkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24g PSAlZCBmb3IgcXVlcnk9IFwiJXNcIiIsIGRlc3QsIHF1ZXJ5KSkpOworCisJCQkJCQkJaWYgKHBv b2xfY29uZmlnLT5wcmVmZXJfbG93ZXJfZGVsYXlfc3RhbmRieSkKKwkJCQkJCQl7CisJCQkJCQkJ CWludAkJCW5ld19sb2FkX2JhbGFuY2luZ19ub2RlID0gc2VsZWN0X2xvYWRfYmFsYW5jaW5nX25v ZGUoKTsKKworCQkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0g bmV3X2xvYWRfYmFsYW5jaW5nX25vZGU7CisJCQkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlf Y29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPSBzZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFs YW5jZV9ub2RlX2lkOworCQkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29u dGV4dCwgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9p ZCk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCXBvb2xfc2V0X25v ZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0LCBQUklNQVJZX05PREVfSUQpOworCQkJCQkJCX0K KwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1 ZXJ5X2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2Fk X2JhbGFuY2Vfbm9kZV9pZDsKKwkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlf Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkgc2Vzc2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5s b2FkX2JhbGFuY2Vfbm9kZV9pZCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CiAJCQkJZWxzZQog CQkJCXsKIAkJCQkJaWYgKHBvb2xfY29uZmlnLT5zdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNl KQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYyBiL3NyYy9j b250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKaW5kZXggZGVkNDFjN2ZjNjRjZWJhMWQxZmFm ZDZmNGE5ZjEwYTc1MDg3MjM3NC4uYTk1OTY1NjFhN2UwMjY1ZTkyOGI5NTdhMjc2NmY0NmZiNGU5 ZWJhYSAxMDA2NDQKLS0tIGEvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYworKysg Yi9zcmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jCkBAIC01MzIsNyArNTMyLDcgQEAg ZHVtcF9zZW50X21lc3NhZ2UoY2hhciAqY2FsbGVyLCBQT09MX1NFTlRfTUVTU0FHRSAqbSkKIHN0 YXRpYyB2b2lkCiBkbWxfYWRhcHRpdmVfaW5pdCh2b2lkKQogewotCWlmIChwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlm IChETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlKSkKIAl7CiAJCXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24gPSBm YWxzZTsKIAkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3QgPSBO SUw7CkBAIC01NDIsNyArNTQyLDcgQEAgZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHN0YXRpYyB2 b2lkCiBkbWxfYWRhcHRpdmVfZGVzdHJveSh2b2lkKQogewotCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmIHNlc3Np b25fY29udGV4dCkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNh YmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkgJiYgc2Vzc2lvbl9jb250ZXh0KQogCXsKIAkJaWYg KHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9IE5JTCkKIAkJ CWxpc3RfZnJlZV9kZWVwKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9s aXN0KTsKQEAgLTczOCwxMCArNzM4LDEwIEBAIHZvaWQKIHBvb2xfc2V0X3dyaXRpbmdfdHJhbnNh Y3Rpb24odm9pZCkKIHsKIAkvKgotCSAqIElmIGRpc2FibGVfdHJhbnNhY3Rpb25fb25fd3JpdGUg aXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2ZScsIHRoZW4gbmV2ZXIKLQkgKiB0dXJuIG9uIHdyaXRp bmcgdHJhbnNhY3Rpb24gZmxhZy4KKwkgKiBJZiBkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSBpcyAnb2ZmJyBvciAnZG1sX2FkYXB0aXZlJyBvcgorCSAqICdkbWxfYWRhcHRpdmVfZ2xvYmFs JywgdGhlbiBuZXZlciB0dXJuIG9uIHdyaXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4KIAkgKi8KLQlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX09G RiAmJiBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1df RE1MX0FEQVBUSVZFKQorCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgIT0gRExCT1dfT0ZGICYmICFETEJPV19JU19ETUxfQURBUFRJVkUocG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKSkKIAl7CiAJCXBvb2xfZ2V0X3Nlc3Npb25f Y29udGV4dChmYWxzZSktPndyaXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOwogCQllcmVwb3J0KERF QlVHNSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvb2wuaCBiL3NyYy9pbmNsdWRlL3Bvb2wu aAppbmRleCBlYTZmODdlMTIwYWY4NjZiOGVkM2ExNTc5MGQ5ZDhhOGUwMDlmZTkxLi43MTY4YzFh ZWE4Nzc4NTZiNTk3OGRlMzMyYWQ2MzYzMjVlYjljMzBjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9wb29sLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9vbC5oCkBAIC00MjQsNyArNDI0LDcgQEAgdHlw ZWRlZiBlbnVtCiAjZGVmaW5lIE1pbih4LCB5KQkJKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKIAog Ci0jZGVmaW5lIE1BWF9OVU1fU0VNQVBIT1JFUwkJOAorI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9S RVMJCTEwCiAjZGVmaW5lIENPTk5fQ09VTlRFUl9TRU0JCTAKICNkZWZpbmUgUkVRVUVTVF9JTkZP X1NFTQkJMQogI2RlZmluZSBRVUVSWV9DQUNIRV9TVEFUU19TRU0JMgpAQCAtNDM0LDYgKzQzNCw4 IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBGT0xMT1dfUFJJTUFSWV9TRU0JCTYKICNkZWZpbmUg TUFJTl9FWElUX0hBTkRMRVJfU0VNCTcJLyogdXNlZCBpbiBleGl0X2hhbmRlciBpbiBwZ3Bvb2wg bWFpbgogCQkJCQkJCQkJICogcHJvY2VzcyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElP Tl9UQUJMRV9TRU0JOAorI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9RVUVSWV9TRU0JOQog I2RlZmluZSBNQVhfUkVRVUVTVF9RVUVVRV9TSVpFCTEwCiAKICNkZWZpbmUgTUFYX1NFQ19XQUlU X0ZPUl9DTFVTVEVSX1RSQU5TQUNUSU9OIDEwIC8qIHRpbWUgaW4gc2Vjb25kcyB0byBrZWVwCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oIGIvc3JjL2luY2x1ZGUvcG9vbF9j b25maWcuaAppbmRleCA3NDFkZTZjYzVmYzMzNjhmODEzZDZiNmVmYTY4ZWI3ZjhhNzk1MDZiLi44 Nzk4Yjg2ZWIzNjIwYWIzNmJlNzMzYmI2MGJiYjg0NjRiMDA2M2M4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wb29sX2NvbmZpZy5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKQEAg LTEwNSw5ICsxMDUsMTMgQEAgdHlwZWRlZiBlbnVtIERMQk9XX09QVElPTgogCURMQk9XX1RSQU5T QUNUSU9OLAogCURMQk9XX1RSQU5TX1RSQU5TQUNUSU9OLAogCURMQk9XX0FMV0FZUywKLQlETEJP V19ETUxfQURBUFRJVkUKKwlETEJPV19ETUxfQURBUFRJVkUsCisJRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTAogfSBETEJPV19PUFRJT047CiAKKyNkZWZpbmUgRExCT1dfSVNfRE1MX0FEQVBUSVZF KG9wdCkgXAorCSgob3B0KSA9PSBETEJPV19ETUxfQURBUFRJVkUgfHwgKG9wdCkgPT0gRExCT1df RE1MX0FEQVBUSVZFX0dMT0JBTCkKKwogdHlwZWRlZiBlbnVtIFJFTFFUQVJHRVRfT1BUSU9OCiB7 CiAJUkVMUVRBUkdFVF9QUklNQVJZID0gMSwKQEAgLTM2NSw2ICszNjksMTUgQEAgdHlwZWRlZiBz dHJ1Y3QKIAkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGNoZWNrICovCiAJY2hhcgkgICAqcmVwbGlj YXRpb25fZGVsYXlfc291cmNlX2NtZDsJLyogZXh0ZXJuYWwgY29tbWFuZCBmb3IgcmVwbGljYXRp b24gZGVsYXkgKi8KIAlpbnQJCQlyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dDsJLyog dGltZW91dCBmb3IgZXh0ZXJuYWwgY29tbWFuZCBpbiBzZWNvbmRzICovCisKKwkvKiBUcmFjayB0 YWJsZSBtdXRhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0cmFja2luZyByZWNlbnRseSB3cml0dGVu IHRhYmxlcyAqLworCWRvdWJsZQkJdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvcjsJCS8q IFRUTCBtdWx0aXBsaWVyIGZvciByZXBsaWNhdGlvbiBkZWxheSAqLworCWludAkJCXRyYWNrX3Rh YmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CS8qIENvbGQgc3RhcnQgZHVyYXRpb24g aW4gbXMgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOwkvKiBO dW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0YWJsZSBtYXAgKi8KKwlpbnQJCQl0cmFja190YWJs ZV9tdXRhdGlvbl90YWJsZV9zaXplOwkJLyogTWF4IGVudHJpZXMgaW4gdGFibGUgbWFwICovCisJ aW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsJLyogTnVtYmVyIG9mIGhh c2ggYnVja2V0cyBmb3IgcXVlcnkgY2FjaGUgKi8KKwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlv bl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplOwkvKiBNYXggZW50cmllcyBpbiBxdWVyeSBwYXJzZSBj YWNoZSAqLworCiAJY2hhcgkgICAqZmFpbG92ZXJfY29tbWFuZDsJLyogZXhlY3V0ZSBjb21tYW5k IHdoZW4gZmFpbG92ZXIgaGFwcGVucyAqLwogCWNoYXIJICAgKmZvbGxvd19wcmltYXJ5X2NvbW1h bmQ7IC8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGlzCiAJCQkJCQkJCQkJICogZW5k ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi41Y2Q1ZDRlZjQwOTY0NWZlNzdlM2JiMDIyMzllMTQwNDU2ZGUwNTU0Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlv bi5oCkBAIC0wLDAgKzEsMjM3IEBACisvKiAtKi1wZ3NxbC1jLSotICovCisvKgorICogcGdwb29s OiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBzZXJ2ZXIgZm9yIFBvc3Rn cmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElzaGlpCisgKgorICogQ29weXJpZ2h0IChjKSAy MDAzLTIwMjYJUGdQb29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIFBlcm1pc3Np b24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5k CisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlz IGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICogbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0 aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZQorICogYXV0aG9yIG5v dCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCisgKiBk aXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJp b3IKKyAqIHBlcm1pc3Npb24uIFRoZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFi b3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Uu ICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3 YXJyYW50eS4KKyAqCisgKiBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmg6IEluLW1lbW9yeSB0 cmFja2luZyBvZiByZWNlbnRseSB3cml0dGVuIHRhYmxlcworICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIGF2b2lkIHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYXMgZHVyaW5nIHJlcGxp Y2F0aW9uIGxhZworICovCisKKyNpZm5kZWYgUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9ICisj ZGVmaW5lIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05fSAorCisjaW5jbHVkZSAicG9vbC5oIgor I2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKy8qCisgKiBNYXhpbXVtIHRhYmxlIG5hbWUgbGVuZ3Ro IGluY2x1ZGluZyBzY2hlbWE6ICJzY2hlbWEiLiJ0YWJsZSIKKyAqIFVzaW5nIE5BTUVEQVRBTEVO ICogMiArIDQgZm9yIHF1b3RlcyBhbmQgZG90CisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVU QVRJT05fVEFCTEVfTkFNRV9MRU4JKE5BTUVEQVRBTEVOICogMiArIDQpCisKKy8qCisgKiBNYXhp bXVtIG51bWJlciBvZiB0YWJsZXMgd2UgdHJhY2sgcGVyIHF1ZXJ5CisgKi8KKyNkZWZpbmUgVFJB Q0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxFU19QRVJfUVVFUlkJOAorCisvKgorICogSW52YWxp ZCBpbmRleCBtYXJrZXIgZm9yIGxpbmtlZCBsaXN0cworICovCisjZGVmaW5lIFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgJKC0xKQorCisvKgorICogRGVmYXVsdCBUVEwgaW4gbWlj cm9zZWNvbmRzICgxMDBtcykgdXNlZCB3aGVuIHJlcGxpY2F0aW9uIGRlbGF5IGlzIHVua25vd24K KyAqLworI2RlZmluZSBUUkFDS19UQUJMRV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUwkoMTAwICog MTAwMCkKKworLyoKKyAqIEVudHJ5IGluIHRoZSB0YWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlIChr ZXllZCBieSB0YWJsZS9kYXRhYmFzZSBvaWRzKQorICovCit0eXBlZGVmIHN0cnVjdCBUcmFja1Rh YmxlTXV0YXRpb25FbnRyeQoreworCWludAkJCXRhYmxlX29pZDsJCQkJLyogVGFibGUgb2lkICov CisJaW50CQkJZGJvaWQ7CQkJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBs YXN0X3dyaXRlX3RpbWU7CQkvKiBXaGVuIHRoZSB0YWJsZSB3YXMgbGFzdCB3cml0dGVuICovCisJ dWludDMyCQloYXNoOwkJCQkJLyogUHJlLWNvbXB1dGVkIGhhc2ggdmFsdWUgKi8KKwlpbnQJCQlu ZXh0OwkJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24gY2hhaW4gKC0xIGlmIG5vbmUpICov CisJYm9vbAkJaW5fdXNlOwkJCQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1c2U/ICovCit9IFRyYWNr VGFibGVNdXRhdGlvbkVudHJ5OworCisvKgorICogSGVhZGVyIGZvciB0aGUgdGFibGUgbXV0YXRp b24gaGFzaCB0YWJsZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNr VGFibGVNdXRhdGlvbkhhc2hUYWJsZQoreworCWludAkJCW51bV9idWNrZXRzOwkJLyogTnVtYmVy IG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkJLyogTWF4aW11bSBlbnRy aWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8qIEN1cnJlbnQgbnVtYmVyIG9m IGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8qIEhlYWQgb2YgZnJlZSBlbnRy eSBsaXN0ICovCisJLyogRmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVkIG1l bW9yeToKKwkgKiBpbnQgYnVja2V0c1tudW1fYnVja2V0c107CisJICogVHJhY2tUYWJsZU11dGF0 aW9uRW50cnkgZW50cmllc1ttYXhfZW50cmllc107CisJICovCit9IFRyYWNrVGFibGVNdXRhdGlv bkhhc2hUYWJsZTsKKworLyoKKyAqIEVudHJ5IGluIHRoZSBxdWVyeSBwYXJzZSBjYWNoZQorICov Cit0eXBlZGVmIHN0cnVjdCBRdWVyeVBhcnNlRW50cnkKK3sKKwl1aW50NjQJCXF1ZXJ5X2hhc2g7 CQkJLyogSGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5ICovCisJYm9vbAkJaXNfd3JpdGU7CQkJLyog VHJ1ZSBpZiBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLworCWludAkJCW51bV90YWJsZXM7CQkJLyog TnVtYmVyIG9mIHRhYmxlcyBpbiBxdWVyeSAqLworCWNoYXIJCXRhYmxlX25hbWVzW1RSQUNLX1RB QkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZXVtUUkFDS19UQUJMRV9NVVRBVElPTl9U QUJMRV9OQU1FX0xFTl07CisJaW50CQkJbmV4dDsJCQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNp b24gY2hhaW4gKi8KKwlpbnQJCQlscnVfcHJldjsJCQkvKiBQcmV2aW91cyBpbiBMUlUgbGlzdCAq LworCWludAkJCWxydV9uZXh0OwkJCS8qIE5leHQgaW4gTFJVIGxpc3QgKi8KKwlib29sCQlpbl91 c2U7CQkJCS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBRdWVyeVBhcnNlRW50cnk7CisK Ky8qCisgKiBIZWFkZXIgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5 CisgKi8KK3R5cGVkZWYgc3RydWN0IFF1ZXJ5UGFyc2VDYWNoZQoreworCWludAkJCW51bV9idWNr ZXRzOwkJLyogTnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworCWludAkJCW1heF9lbnRyaWVzOwkJ LyogTWF4aW11bSBlbnRyaWVzIGFsbG93ZWQgKi8KKwlpbnQJCQludW1fZW50cmllczsJCS8qIEN1 cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsJCS8qIEhl YWQgb2YgZnJlZSBlbnRyeSBsaXN0ICovCisJaW50CQkJbHJ1X2hlYWQ7CQkJLyogTW9zdCByZWNl bnRseSB1c2VkICovCisJaW50CQkJbHJ1X3RhaWw7CQkJLyogTGVhc3QgcmVjZW50bHkgdXNlZCAq LworCS8qIEZsZXhpYmxlIGFycmF5IG1lbWJlcnMgZm9sbG93IGluIHNoYXJlZCBtZW1vcnk6CisJ ICogaW50IGJ1Y2tldHNbbnVtX2J1Y2tldHNdOworCSAqIFF1ZXJ5UGFyc2VFbnRyeSBlbnRyaWVz W21heF9lbnRyaWVzXTsKKwkgKi8KK30gUXVlcnlQYXJzZUNhY2hlOworCisvKgorICogR2xvYmFs IHN0YXRlIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlCisgKi8KK3R5cGVkZWYgc3Ry dWN0IFRyYWNrVGFibGVNdXRhdGlvblN0YXRlCit7CisJYm9vbAkJaW5pdGlhbGl6ZWQ7CQkJLyog SGFzIHNoYXJlZCBtZW1vcnkgYmVlbiBpbml0aWFsaXplZD8gKi8KKwl1aW50NjQJCWN1cnJlbnRf dHRsX3VzOwkJCS8qIEN1cnJlbnQgVFRMIGluIG1pY3Jvc2Vjb25kcyAqLworCXN0cnVjdCB0aW1l dmFsIHR0bF9sYXN0X3VwZGF0ZWQ7CS8qIFdoZW4gVFRMIHdhcyBsYXN0IHVwZGF0ZWQgKi8KKwlz dHJ1Y3QgdGltZXZhbCBsYXN0X2NsZWFudXBfdGltZTsJLyogV2hlbiBsYXN0IGV4cGlyZWQgY2xl YW51cCByYW4gKi8KKwlzdHJ1Y3QgdGltZXZhbCBnbG9iYWxfY29sZF9zdGFydF91bnRpbDsJLyog R2xvYmFsIGNvbGQgc3RhcnQgZW5kIHRpbWUgKi8KKwl2b2xhdGlsZSB1aW50MzIgc3RhdHNfcXVl cmllc19jaGVja2VkOwkvKiBOdW1iZXIgb2YgcXVlcmllcyBjaGVja2VkICovCisJdm9sYXRpbGUg dWludDMyIHN0YXRzX2ZvcmNlZF9wcmltYXJ5OwkJLyogUXVlcmllcyBmb3JjZWQgdG8gcHJpbWFy eSAqLworCXZvbGF0aWxlIHVpbnQzMiBzdGF0c19hbGxvd2VkX3JlcGxpY2E7CS8qIFF1ZXJpZXMg YWxsb3dlZCB0byByZXBsaWNhICovCit9IFRyYWNrVGFibGVNdXRhdGlvblN0YXRlOworCisvKgor ICogTWFpbiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIGFsbCBjb21wb25lbnRz CisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRhdGlvblNobWVtCit7CisJVHJhY2tU YWJsZU11dGF0aW9uU3RhdGUJc3RhdGU7CisJVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlCSp0 YWJsZV9tYXA7CisJUXVlcnlQYXJzZUNhY2hlCQkqcXVlcnlfY2FjaGU7Cit9IFRyYWNrVGFibGVN dXRhdGlvblNobWVtOworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgQVBJIGZ1bmN0 aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJl ZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgdHJhY2sgdGFibGUgbXV0YXRpb24uCisgKiBDYWxsZWQg ZnJvbSBwZ3Bvb2xfbWFpbi5jIGFmdGVyIHBvb2xfaW5pdF9wb29sX2luZm8oKS4KKyAqLworZXh0 ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KHZvaWQpOworCisvKgorICog SW5pdGlhbGl6ZSBwZXItY2hpbGQgcHJvY2VzcyBzdGF0ZSBmb3IgdHJhY2sgdGFibGUgbXV0YXRp b24uCisgKiBDYWxsZWQgZnJvbSBjaGlsZC5jIHdoZW4gYSBuZXcgY2hpbGQgcHJvY2VzcyBzdGFy dHMuCisgKiBTZXRzIHVwIGNvbGQgc3RhcnQgdHJhY2tpbmcuCisgKi8KK2V4dGVybiB2b2lkIHBv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fY2hpbGRfaW5pdCh2b2lkKTsKKworLyoKKyAqIENoZWNr IGlmIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGluIGNvbGQgc3RhcnQgcGVyaW9kLgorICogRHVyaW5n IGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVzIGFyZSByb3V0ZWQgdG8gcHJpbWFyeS4KKyAqIFJldHVy bnMgdHJ1ZSBpZiBpbiBjb2xkIHN0YXJ0LCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBi b29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25faW5fY29sZF9zdGFydCh2b2lkKTsKKworLyoK KyAqIFRyaWdnZXIgYSBnbG9iYWwgY29sZCBzdGFydCBwZXJpb2QgZm9yIGFsbCBwcm9jZXNzZXMu CisgKiBVc2VkIGFmdGVyIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2UgdG8gYXZvaWQgc3RhbGUgcmVh ZHMuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdHJpZ2dlcl9n bG9iYWxfY29sZF9zdGFydCh2b2lkKTsKKworLyoKKyAqIEdldCBvaWQgb2YgY3VycmVudCBkYXRh YmFzZS4KKyAqLworZXh0ZXJuIGludCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRh YmFzZV9vaWQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiBhIHRhYmxlIHdhcyByZWNlbnRseSB3 cml0dGVuIHRvIChpcyAic3RhbGUiKS4KKyAqIElmIHN0YWxlLCByZWFkcyBmcm9tIHRoaXMgdGFi bGUgc2hvdWxkIGdvIHRvIHByaW1hcnkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGFibGUgaXMgc3Rh bGUgKHJlY2VudGx5IHdyaXR0ZW4pLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2V4dGVybiBib29s IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfaXNfc3RhbGUoaW50IHRhYmxlX29pZCwg aW50IGRib2lkKTsKKworLyoKKyAqIE1hcmsgdGFibGVzIGFzIHJlY2VudGx5IHdyaXR0ZW4uCisg KiBDYWxsZWQgYWZ0ZXIgSU5TRVJUL1VQREFURS9ERUxFVEUgcXVlcmllcyBjb21wbGV0ZS4KKyAq IHRhYmxlX29pZHM6IGFycmF5IG9mIHRhYmxlIG9pZHMKKyAqIG51bV90YWJsZXM6IG51bWJlciBv ZiB0YWJsZXMgaW4gYXJyYXkKKyAqIGRib2lkOiBkYXRhYmFzZSBvaWQKKyAqLworZXh0ZXJuIHZv aWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlc193cml0dGVuKGNvbnN0IGlu dCAqdGFibGVfb2lkcywgaW50IG51bV90YWJsZXMsIGludCBkYm9pZCk7CisKKy8qCisgKiBDb252 ZW5pZW5jZSBmdW5jdGlvbiB0byBtYXJrIGEgc2luZ2xlIHRhYmxlIGFzIHdyaXR0ZW4uCisgKiB0 YWJsZV9vaWQ6IHRhYmxlIG9pZAorICogZGJvaWQ6IGRhdGFiYXNlIG9pZAorICovCitleHRlcm4g dm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbihpbnQgdGFi bGVfb2lkLCBpbnQgZGJvaWQpOworCisvKgorICogVXBkYXRlIHRoZSBUVEwgYmFzZWQgb24gY3Vy cmVudCByZXBsaWNhdGlvbiBkZWxheS4KKyAqIENhbGxlZCBmcm9tIHBvb2xfd29ya2VyX2NoaWxk LmMgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1cGRhdGVkLgorICogZGVsYXlfdXM6IHJlcGxp Y2F0aW9uIGRlbGF5IGluIG1pY3Jvc2Vjb25kcworICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNr X3RhYmxlX211dGF0aW9uX3VwZGF0ZV90dGwodWludDY0IGRlbGF5X3VzKTsKKworLyoKKyAqIExv b2sgdXAgY2FjaGVkIHBhcnNlIHJlc3VsdCBmb3IgYSBxdWVyeS4KKyAqIGhhc2g6IGhhc2ggb2Yg bm9ybWFsaXplZCBxdWVyeQorICogaXNfd3JpdGU6IG91dHB1dCAtIHRydWUgaWYgcXVlcnkgaXMg YSB3cml0ZQorICogdGFibGVfbmFtZXM6IG91dHB1dCAtIGFycmF5IHRvIGZpbGwgd2l0aCB0YWJs ZSBuYW1lcworICogbnVtX3RhYmxlczogb3V0cHV0IC0gbnVtYmVyIG9mIHRhYmxlcyBmb3VuZAor ICogUmV0dXJucyB0cnVlIGlmIGZvdW5kIGluIGNhY2hlLCBmYWxzZSBvdGhlcndpc2UuCisgKi8K K2V4dGVybiBib29sIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2NhY2hlZF9wYXJzZSh1 aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJCQkJCQkJCQkJCSBjaGFyIHRhYmxlX25hbWVz W11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkJCQkgaW50 ICpudW1fdGFibGVzKTsKKworLyoKKyAqIENhY2hlIGEgcGFyc2UgcmVzdWx0IGZvciBhIHF1ZXJ5 LgorICogaGFzaDogaGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5CisgKiBpc193cml0ZTogdHJ1ZSBp ZiBxdWVyeSBpcyBhIHdyaXRlCisgKiB0YWJsZV9uYW1lczogYXJyYXkgb2YgdGFibGUgbmFtZXMK KyAqIG51bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193cml0 ZSwKKwkJCQkJCQkJCQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJ T05fVEFCTEVfTkFNRV9MRU5dLAorCQkJCQkJCQkJCWludCBudW1fdGFibGVzKTsKKworLyoKKyAq IE5vcm1hbGl6ZSBhIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyBoYXNoLgorICogU3RyaXBzIGNvbW1l bnRzLCBub3JtYWxpemVzIHdoaXRlc3BhY2UgYW5kIGxpdGVyYWxzLgorICogcXVlcnk6IGlucHV0 IFNRTCBxdWVyeSBzdHJpbmcKKyAqIFJldHVybnM6IDY0LWJpdCBoYXNoIG9mIG5vcm1hbGl6ZWQg cXVlcnkKKyAqLworZXh0ZXJuIHVpbnQ2NCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX25vcm1h bGl6ZV9hbmRfaGFzaChjb25zdCBjaGFyICpxdWVyeSk7CisKKy8qCisgKiBDYWxjdWxhdGUgcmVx dWlyZWQgc2hhcmVkIG1lbW9yeSBzaXplIGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbi4KKyAqLwor ZXh0ZXJuIFNpemUgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9zaXplKHZvaWQpOwor CisjZW5kaWYgLyogUE9PTF9UUkFDS19UQUJMRV9NVVRBVElPTl9IICovCmRpZmYgLS1naXQgYS9z cmMvbWFpbi9wZ3Bvb2xfbWFpbi5jIGIvc3JjL21haW4vcGdwb29sX21haW4uYwppbmRleCBmYTA1 ZTE1ZTdhYzQzNWUwNzIyOTgwNjNmOTE4YzcwYWE0ZTU2ODBjLi5iODhiMDQ3OGNiMTUwZjg5YmQ5 YjZiOGFiMzhkYjBkNjkxMmZkZGQwIDEwMDY0NAotLS0gYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5j CisrKyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRl ICJhdXRoL3Bvb2xfcGFzc3dkLmgiCiAjaW5jbHVkZSAiYXV0aC9wb29sX2hiYS5oIgogI2luY2x1 ZGUgInF1ZXJ5X2NhY2hlL3Bvb2xfbWVtcWNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbi5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2ludGVybmFsX2Nv bW1hbmRzLmgiCiAjaW5jbHVkZSAid2F0Y2hkb2cvd2RfbGlmZWNoZWNrLmgiCiAjaW5jbHVkZSAi d2F0Y2hkb2cvd2F0Y2hkb2cuaCIKQEAgLTE0ODUsMTEgKzE0ODYsMTQgQEAgc2lndXNyMV9pbnRl cnJ1cHRfcHJvY2Vzc29yKHZvaWQpCiAKIAlpZiAodXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFn c1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hBTkdFRF0pCiAJeworCQlXRF9TVEFURVMJd2Rfc3RhdGU7 CisKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiUGdwb29sLUlJIHBhcmVudCBwcm9jZXNz IHJlY2VpdmVkIHdhdGNoZG9nIHN0YXRlIGNoYW5nZSBzaWduYWwgZnJvbSB3YXRjaGRvZyIpKSk7 CiAKIAkJdXNlcjFTaWduYWxTbG90LT5zaWduYWxGbGFnc1tTSUdfV0FUQ0hET0dfU1RBVEVfQ0hB TkdFRF0gPSBmYWxzZTsKLQkJaWYgKHdkX2ludGVybmFsX2dldF93YXRjaGRvZ19sb2NhbF9ub2Rl X3N0YXRlKCkgPT0gV0RfU1RBTkRCWSkKKwkJd2Rfc3RhdGUgPSB3ZF9pbnRlcm5hbF9nZXRfd2F0 Y2hkb2dfbG9jYWxfbm9kZV9zdGF0ZSgpOworCQlpZiAod2Rfc3RhdGUgPT0gV0RfU1RBTkRCWSkK IAkJewogCQkJZXJlcG9ydChMT0csCiAJCQkJCShlcnJtc2coIndlIGhhdmUgam9pbmVkIHRoZSB3 YXRjaGRvZyBjbHVzdGVyIGFzIFNUQU5EQlkgbm9kZSIpLApAQCAtMTUwMyw2ICsxNTA3LDEwIEBA IHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCQkJICovCiAJCQlwb29sX3JlbGVh c2VfZm9sbG93X3ByaW1hcnlfbG9jayh0cnVlKTsKIAkJfQorCQllbHNlIGlmICh3ZF9zdGF0ZSA9 PSBXRF9DT09SRElOQVRPUiAmJiBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJeworCQkJcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl90cmlnZ2VyX2dsb2JhbF9jb2xkX3N0YXJ0KCk7CisJCX0KIAl9CiAJaWYg KHVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX0ZBSUxPVkVSX0lOVEVSUlVQVF0pCiAJ ewpAQCAtMzA2OCw2ICszMDc2LDEyIEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9vYmplY3RzKGJv b2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJZWxvZyhERUJVRzEsICJ3YXRjaGRvZzogJXp1 IGJ5dGVzIHJlcXVlc3RlZCBmb3Igc2hhcmVkIG1lbW9yeSIsIE1BWEFMSUdOKHdkX2lwY19nZXRf c2hhcmVkX21lbV9zaXplKCkpKTsKIAl9CiAKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9h ZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlz aXplICs9IE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW1fc2l6ZSgpKTsK KwkJZWxvZyhERUJVRzEsICJ0cmFja190YWJsZV9tdXRhdGlvbjogJXp1IGJ5dGVzIHJlcXVlc3Rl ZCBmb3Igc2hhcmVkIG1lbW9yeSIsIE1BWEFMSUdOKHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW1fc2l6ZSgpKSk7CisJfQorCiAJaW5pdGlhbGl6ZV9zaGFyZWRfbWVtb3J5X21haW5fc2Vn bWVudChzaXplKTsKIAogCS8qIE1vdmUgdGhlIGJhY2tlbmQgZGVzY3JpcHRvcnMgdG8gc2hhcmVk IG1lbW9yeSAqLwpAQCAtMzE4NCw2ICszMTk4LDEyIEBAIGluaXRpYWxpemVfc2hhcmVkX21lbV9v YmplY3RzKGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykKIAkJd2RfaXBjX2luaXRpYWxpemVf ZGF0YSgpOwogCX0KIAorCS8qIEluaXRpYWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gZm9yIHRy YWNraW5nIHJlY2VudGx5IHdyaXR0ZW4gdGFibGVzICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNh YmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQor CXsKKwkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbml0KCk7CisJfQorCiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvcHJvdG9jb2wvQ29tbWFuZENvbXBsZXRlLmMgYi9zcmMvcHJvdG9jb2wv Q29tbWFuZENvbXBsZXRlLmMKaW5kZXggYTNiOGYwZWExOTRmZmVjYzc5ZTU4NTY2YmU4MDU2MmE0 NmViNzVhYi4uYWFlMDhhNzc4NmQ1ZWFmNzI3MWU3YjY4MGRjMDRlMWQwMWYwYTYyOSAxMDA2NDQK LS0tIGEvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jCisrKyBiL3NyYy9wcm90b2NvbC9D b21tYW5kQ29tcGxldGUuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxv Yy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9z dHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCisj aW5jbHVkZSAicXVlcnlfY2FjaGUvcG9vbF9tZW1xY2FjaGUuaCIKIAogc3RhdGljIGludAlleHRy YWN0X250dXBsZXMoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgUE9PTF9TVEFUVVMgaGFuZGxlX21p c21hdGNoX3R1cGxlcyhQT09MX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBQT09MX0NPTk5FQ1RJT05f UE9PTCAqYmFja2VuZCwgY2hhciAqcGFja2V0LCBpbnQgcGFja2V0bGVuLCBib29sIGNvbW1hbmRf Y29tcGxldGUpOwpAQCAtMzA0LDYgKzMwNiwyNyBAQCBoYW5kbGVfcXVlcnlfY29udGV4dChQT09M X0NPTk5FQ1RJT05fUE9PTCAqYmFja2VuZCkKIAogCW5vZGUgPSBzZXNzaW9uX2NvbnRleHQtPnF1 ZXJ5X2NvbnRleHQtPnBhcnNlX3RyZWU7CiAKKwkvKgorCSAqIFRyYWNrIHRhYmxlIHdyaXRlcyBm b3IgZG1sX2FkYXB0aXZlX2dsb2JhbCBmZWF0dXJlLgorCSAqIE1hcmsgdGFibGVzIGFzIHdyaXR0 ZW4gd2hlbiBJTlNFUlQvVVBEQVRFL0RFTEVURS9UUlVOQ0FURS9NRVJHRSBjb21wbGV0ZXMuCisJ ICogUmV1c2VzIHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKCkgd2hpY2ggaGFuZGxlcyBhbGwgc3Rh dGVtZW50IHR5cGVzCisJICogaW5jbHVkaW5nIFdJVEggY2xhdXNlIENURXMuCisJICovCisJaWYg KHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxf QURBUFRJVkVfR0xPQkFMICYmIG5vZGUgIT0gTlVMTCkKKwl7CisJCWludAkJICAgKm9pZHM7CisJ CWludAkJCW51bV9vaWRzOworCisJCW51bV9vaWRzID0gcG9vbF9leHRyYWN0X3RhYmxlX29pZHMo bm9kZSwgJm9pZHMpOworCQlpZiAobnVtX29pZHMgPiAwKQorCQl7CisJCQlpbnQJCQlkYm9pZCA9 IHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCisJCQlpZiAo ZGJvaWQgPiAwKQorCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3Jp dHRlbihvaWRzLCBudW1fb2lkcywgZGJvaWQpOworCQl9CisJfQorCiAJaWYgKElzQShub2RlLCBQ cmVwYXJlU3RtdCkpCiAJewogCQlpZiAoc2Vzc2lvbl9jb250ZXh0LT51bmNvbXBsZXRlZF9tZXNz YWdlKQpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29sL2NoaWxkLmMgYi9zcmMvcHJvdG9jb2wvY2hp bGQuYwppbmRleCBjMzRmMDU3MjgxYmU2MmZlYWYzOWRiMWJiNjA1MDYyZjU2ZGMzOThjLi5kNTNm NTcxNDIxOTY4YmQ3ODlkMGI1NWY5N2UwYTFlYjY4YTgxM2U1IDEwMDY0NAotLS0gYS9zcmMvcHJv dG9jb2wvY2hpbGQuYworKysgYi9zcmMvcHJvdG9jb2wvY2hpbGQuYwpAQCAtNTcsNiArNTcsNyBA QAogI2luY2x1ZGUgInV0aWxzL2Vsb2cuaCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIK ICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3RyYWNr X3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19jb250 ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAtMjEz LDYgKzIxNCwxMiBAQCBkb19jaGlsZChpbnQgKmZkcykKIAkvKiBJbml0aWFsaXplIHBlciBwcm9j ZXNzIGNvbnRleHQgKi8KIAlwb29sX2luaXRfcHJvY2Vzc19jb250ZXh0KCk7CiAKKwkvKiBJbml0 aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNoaWxkIHN0YXRlIGZvciBjb2xkIHN0YXJ0IHRy YWNraW5nICovCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl9jaGlsZF9pbml0KCk7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIHBv b2wgKi8KIAlpZiAocG9vbF9pbml0X2NwKCkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvY29s L3Bvb2xfcHJvdG9fbW9kdWxlcy5jIGIvc3JjL3Byb3RvY29sL3Bvb2xfcHJvdG9fbW9kdWxlcy5j CmluZGV4IDQ3YjVjOGY5OGE1YjRjOTJkNjc1ODQwZWVhODhmN2UwM2JiMThiNGMuLjc1ZmM3NTA4 NDgwZDc5YWFjYzI4MWRkNWU2MjRmOWUzNGE5OTg4MzMgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2Nv bC9wb29sX3Byb3RvX21vZHVsZXMuYworKysgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1 bGVzLmMKQEAgLTE0NjEsNyArMTQ2MSw3IEBAIFBhcnNlKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRl bmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQlwb29sX3doZXJlX3RvX3NlbmQo cXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+b3JpZ2luYWxfcXVlcnksCiAJCQkJCQkgICBx dWVyeV9jb250ZXh0LT5wYXJzZV90cmVlKTsKIAotCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzdHJsZW4obmFt ZSkgIT0gMCkKKwkJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRShwb29sX2NvbmZpZy0+ZGlzYWJs ZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmIHN0cmxlbihuYW1lKSAhPSAwKQogCQkJcG9vbF9z ZXRhbGxfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQpOwogCiAJCWlmIChSRVBMSUNBVElP TikKQEAgLTE4MDQsNyArMTgwNCw3IEBAIEJpbmQoUE9PTF9DT05ORUNUSU9OICpmcm9udGVuZCwg UE9PTF9DT05ORUNUSU9OX1BPT0wgKmJhY2tlbmQsCiAJCQlyZXR1cm4gUE9PTF9FTkQ7CiAJfQog Ci0JaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJP V19ETUxfQURBUFRJVkUgJiYKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkgJiYKIAkJVFNUQVRFKGJhY2tlbmQsIE1B SU5fUkVQTElDQSA/IFBSSU1BUllfTk9ERV9JRCA6IFJFQUxfTUFJTl9OT0RFX0lEKSA9PSAnVCcp CiAJewogCQlwb29sX3doZXJlX3RvX3NlbmQocXVlcnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+ b3JpZ2luYWxfcXVlcnksCmRpZmYgLS1naXQgYS9zcmMvcXVlcnlfY2FjaGUvcG9vbF9tZW1xY2Fj aGUuYyBiL3NyYy9xdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5jCmluZGV4IGYzOGY3MTE0Njk1 NzYzNDJjZTU5NDY5YjA4NWM5NzM2NTExNjAwNGMuLmRjYTkzMzM0ZTllNDdiYjc5NzgwNjRlZGVj ZTVjYTBlNDAwMjFjZTMgMTAwNjQ0Ci0tLSBhL3NyYy9xdWVyeV9jYWNoZS9wb29sX21lbXFjYWNo ZS5jCisrKyBiL3NyYy9xdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5jCkBAIC0xMzA1LDYgKzEz MDUsMTIgQEAgcG9vbF9leHRyYWN0X3RhYmxlX29pZHMoTm9kZSAqbm9kZSwgaW50ICoqb2lkc3Ap CiAJCX0KIAkJcmV0dXJuIG51bV9vaWRzOwogCX0KKwllbHNlIGlmIChJc0Eobm9kZSwgTWVyZ2VT dG10KSkKKwl7CisJCU1lcmdlU3RtdCAgKnN0bXQgPSAoTWVyZ2VTdG10ICopIG5vZGU7CisKKwkJ dGFibGUgPSBtYWtlX3RhYmxlX25hbWVfZnJvbV9yYW5nZXZhcihzdG10LT5yZWxhdGlvbik7CisJ fQogCWVsc2UgaWYgKElzQShub2RlLCBFeHBsYWluU3RtdCkpCiAJewogCQlMaXN0Q2VsbCAgICpj ZWxsOwpkaWZmIC0tZ2l0IGEvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtIGIv c3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3RyZWFtCmluZGV4IDQ1NGZkYjllNWQxZmQ2 NTQzN2I2YTY3ZjEyYWI2MjY1OGVhMDhmNDkuLmRlOTlhN2E5N2JhNGExYTAzY2IzZDU1ODlkNTVl YTYxY2I2ZTUxZmEgMTAwNjQ0Ci0tLSBhL3NyYy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0 cmVhbQorKysgYi9zcmMvc2FtcGxlL3BncG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KQEAgLTQ3OCw2 ICs0NzgsMTQgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBzdHJlYW1pbmdfcmVwbGljYXRp b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbW9kaWZpZWQgd2l0 aGluIHRoZSBjdXJyZW50IGV4cGxpY2l0IHRyYW5zYWN0aW9uIHdpbGwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm90IGJlIGxvYWQgYmFsYW5jZWQgdW50aWwgdGhl IGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkbWxfYWRhcHRpdmVf Z2xvYmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBTdXBlcnNl dCBvZiBkbWxfYWRhcHRpdmUuIEluIGFkZGl0aW9uIHRvIHBlci10cmFuc2FjdGlvbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICB0cmFja2luZywgdXNlcyBzaGFyZWQg bWVtb3J5IHRvIHRyYWNrIHJlY2VudGx5IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyAgICAgdGFibGVzIGFjcm9zcyBhbGwgc2Vzc2lvbnMuIFJlYWRzIGZyb20g cmVjZW50bHkgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAg ICB0YWJsZXMgYXJlIHJvdXRlZCB0byBwcmltYXJ5IHVudGlsIGEgVFRMIChiYXNlZCBvbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICByZXBsaWNhdGlvbiBkZWxheSkg ZXhwaXJlcy4gUmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAgICAgbWVtb3J5LiBTZWUgdHJhY2tfdGFibGVfbXV0YXRpb25fKiBw YXJhbWV0ZXJzIGJlbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWx3YXlzOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjICAgICBpZiBhIHdyaXRlIHF1ZXJ5IGlzIGlzc3VlZCwg cmVhZCBxdWVyaWVzIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAg ICAgbm90IGJlIGxvYWQgYmFsYW5jZWQgdW50aWwgdGhlIHNlc3Npb24gZW5kcy4KQEAgLTQ5OSw2 ICs1MDcsNDYgQEAgYmFja2VuZF9jbHVzdGVyaW5nX21vZGUgPSBzdHJlYW1pbmdfcmVwbGljYXRp b24KICNzdGF0ZW1lbnRfbGV2ZWxfbG9hZF9iYWxhbmNlID0gb2ZmCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgRW5hYmxlcyBzdGF0ZW1lbnQgbGV2ZWwgbG9hZCBiYWxhbmNp bmcKIAorIyAtIFRyYWNrIFRhYmxlIE11dGF0aW9uICh1c2VkIGJ5IGRtbF9hZGFwdGl2ZV9nbG9i YWwpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXQVJOSU5HOiBkbWxf YWRhcHRpdmVfZ2xvYmFsIGluY3JlYXNlcyBzaGFyZWQgbWVtb3J5IHVzYWdlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCBzZXR0aW5ncyByZXF1aXJlIH42LjQg TUIgc2hhcmVkIG1lbW9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICgw LjEgTUIgdGFibGUgdHJhY2tpbmcgKyA2LjMgTUIgcXVlcnkgY2FjaGUpCisKKyN0cmFja190YWJs ZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgVFRMIG11bHRpcGxpZXI6IFRUTCA9IHJlcGxpY2F0aW9uX2RlbGF5ICogZmFjdG9y CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGlnaGVyIHZhbHVlcyBwcm92 aWRlIG1vcmUgc2FmZXR5IG1hcmdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIFJhbmdlOiAxLjAtMTAwLjAgKGRlZmF1bHQ6IDUuMCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkKKworI3RyYWNrX3RhYmxl X211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHRvIHJvdXRlIGFsbCBx dWVyaWVzIHRvIHByaW1hcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBh ZnRlciBjaGlsZCBwcm9jZXNzIHN0YXJ0cyAoY29sZCBzdGFydCBwZXJpb2QpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDAtNjAwMDAgbXMgKGRlZmF1bHQ6IDIw MDAgbXMgPSAyIHNlY29uZHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg U2V0IHRvIDAgdG8gZGlzYWJsZSBjb2xkIHN0YXJ0IGJlaGF2aW9yCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxvYWQpCisKKyN0cmFja190 YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzID0gMTAyNAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRyYWNrIHRhYmxlIG11 dGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGlnaGVyIHZhbHVl cyByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0OiAxMDI0KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKworI3RyYWNrX3Rh YmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSAyMDQ4CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgTWF4aW11bSBudW1iZXIgb2YgdGFibGVzIHRvIHRyYWNrIHNpbXVsdGFuZW91 c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDEyOC0xMzEw NzIgKGRlZmF1bHQ6IDIwNDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg KGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlf YnVja2V0cyA9IDIwNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOdW1i ZXIgb2YgaGFzaCBidWNrZXRzIGZvciBxdWVyeSBwYXJzZSBjYWNoZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFJhbmdlOiA2NC02NTUzNiAoZGVmYXVsdDogMjA0OCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3Rh cnQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gMTAw MDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXhpbXVtIG51bWJlciBv ZiBxdWVyeSBwYXJzZSByZXN1bHRzIHRvIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgUmFuZ2U6IDEwMC0xMDAwMDAwIChkZWZhdWx0OiAxMDAwMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW1vcnkgdXNhZ2U6IH42NDAgYnl0ZXMgcGVy IGVudHJ5ICh+Ni4zIE1CIGRlZmF1bHQsIH42NCBNQiBmb3IgMTAwMDAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKKwogIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTVFJFQU1JTkcgUkVQTElDQVRJT04gTU9ERQogIy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9w b29sX3dvcmtlcl9jaGlsZC5jIGIvc3JjL3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtl cl9jaGlsZC5jCmluZGV4IDMxMWI2Mzg2NThlNjZlYmI1NjE2MmFkOWZhNDM5MjMxNWIyZGY2NGUu LjM0N2Y4OGE4ODY4ODMwOWIyOTgzMTFhMjgyZmUxYzFlZjJhYTBmNzMgMTAwNjQ0Ci0tLSBhL3Ny Yy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYworKysgYi9zcmMvc3Ry ZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKQEAgLTU4LDYgKzU4LDcgQEAK ICNpbmNsdWRlICJ1dGlscy9wb29sX2lwLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgi CiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJvY2Vzc19j b250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgpAQCAt Njk1LDYgKzY5Niw3IEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQp CiAJZG91YmxlCQlkZWxheV9tczsKIAl1aW50NjQJCWRlbGF5OwogCXVpbnQ2NAkJZGVsYXlfdGhy ZXNob2xkX2J5X3RpbWU7CisJdWludDY0CQltYXhfZGVsYXlfdXMgPSAwOwkvKiBUcmFjayBtYXhp bXVtIGRlbGF5IGZvciB0YWJsZSBtdXRhdGlvbiBtYXAgKi8KIAlpbnQJCQl0b2tlbl9jb3VudCA9 IDA7CiAJaW50CQkJcHJpbWFyeV9ub2RlX2lkOwogCWludAkJCXNhdmVfZXJybm87CkBAIC0xMDAz LDYgKzEwMDUsMTAgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkK IAkJCWJraW5mby0+c3RhbmRieV9kZWxheSA9IGRlbGF5OwogCQkJYmtpbmZvLT5zdGFuZGJ5X2Rl bGF5X2J5X3RpbWUgPSB0cnVlOwogCisJCQkvKiBUcmFjayBtYXhpbXVtIGRlbGF5IGZvciB0YWJs ZSBtdXRhdGlvbiBtYXAgVFRMIGNhbGN1bGF0aW9uICovCisJCQlpZiAoZGVsYXkgPiBtYXhfZGVs YXlfdXMpCisJCQkJbWF4X2RlbGF5X3VzID0gZGVsYXk7CisKIAkJCS8qCiAJCQkgKiBMb2cgZGVs YXkgaWYgbmVjZXNzYXJ5LiB0aHJlc2hvbGQgaXMgaW4gbWlsbGlzZWNvbmRzLCBjb252ZXJ0CiAJ CQkgKiB0byBtaWNyb3NlY29uZHMuCkBAIC0xMDIxLDYgKzEwMjcsMTAgQEAgY2hlY2tfcmVwbGlj YXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9pZCkKIAkJCXRva2VuID0gc3RydG9rX3IoTlVMTCwg IiBcdFxuIiwgJnNhdmVwdHIpOwogCQl9CiAKKwkJLyogVXBkYXRlIHRyYWNrIHRhYmxlIG11dGF0 aW9uIFRUTCBiYXNlZCBvbiBtYXhpbXVtIG9ic2VydmVkIGRlbGF5ICovCisJCWlmIChwb29sX2Nv bmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZF X0dMT0JBTCAmJiBtYXhfZGVsYXlfdXMgPiAwKQorCQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlv bl91cGRhdGVfdHRsKG1heF9kZWxheV91cyk7CisKIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRhdGlv bi90ZXN0LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0 YXRpb24vdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNWYyYzllMDYyNzE0MmQ3YzhmM2FiNDJmN2UwODU0 MWZiOWU5YTQxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8w NDIudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaApAQCAtMCwwICsxLDI5MiBAQAorIyEvdXNy L2Jpbi9lbnYgYmFzaAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBzY3JpcHQgZm9yIHRyYWNrIHRhYmxl IG11dGF0aW9uIGZlYXR1cmUgKGluLW1lbW9yeSB0YWJsZSB0cmFja2luZykuCisjIFRlc3RzIHJv dXRpbmcgb2YgcXVlcmllcyBiYXNlZCBvbiByZWNlbnRseSB3cml0dGVuIHRhYmxlcy4KKyMKK3Nv dXJjZSAkVEVTVExJQlMKK1RFU1RESVI9dGVzdGRpcgorUFNRTD0kUEdCSU4vcHNxbAorUFNRTE9Q VFM9Ii1hIC1xIC1YIgorUEdQT09MQklOPSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluCitleHBvcnQg UEdEQVRBQkFTRT10ZXN0CisKKyMgT25seSBydW4gaW4gc3RyZWFtaW5nIHJlcGxpY2F0aW9uIG1v ZGUgc2luY2UgdGhhdCdzIHRoZSB0YXJnZXQgdXNlIGNhc2UKK2ZvciBtb2RlIGluIHMKK2RvCisg ICAgcm0gLWZyICRURVNURElSCisgICAgbWtkaXIgJFRFU1RESVIKKyAgICBjZCAkVEVTVERJUgor CisgICAgIyBDcmVhdGUgdGVzdCBlbnZpcm9ubWVudCB3aXRoIDIgbm9kZXMKKyAgICBlY2hvIC1u ICJjcmVhdGluZyB0ZXN0IGVudmlyb25tZW50Li4uIgorICAgICRQR1BPT0xfU0VUVVAgLW0gJG1v ZGUgLW4gMiB8fCBleGl0IDEKKyAgICBlY2hvICJkb25lLiIKKworICAgIHNvdXJjZSAuL2Jhc2hy Yy5wb3J0cworCisgICAgIyBDb25maWd1cmUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2 aWEgZG1sX2FkYXB0aXZlX2dsb2JhbAorICAgIGVjaG8gImRpc2FibGVfbG9hZF9iYWxhbmNlX29u X3dyaXRlID0gJ2RtbF9hZGFwdGl2ZV9nbG9iYWwnIiA+PiBldGMvcGdwb29sLmNvbmYKKyAgICBl Y2hvICJ0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yID0gNS4wIiA+PiBldGMvcGdwb29s LmNvbmYKKyAgICBlY2hvICJ0cmFja190YWJsZV9tdXRhdGlvbl9jb2xkX3N0YXJ0X2R1cmF0aW9u ID0gMjAwMCIgPj4gZXRjL3BncG9vbC5jb25mCisKKyAgICAjIEVuYWJsZSBsb2FkIGJhbGFuY2lu ZyBleHBsaWNpdGx5CisgICAgZWNobyAibG9hZF9iYWxhbmNlX21vZGUgPSBvbiIgPj4gZXRjL3Bn cG9vbC5jb25mCisKKyAgICAjIENvbmZpZ3VyZSB3ZWlnaHRzIHNvIHdlIGNhbiBkaXN0aW5ndWlz aCByb3V0aW5nCisgICAgIyBCYWNrZW5kIDAgKHByaW1hcnkpIHdlaWdodD0wLCBCYWNrZW5kIDEg KHN0YW5kYnkpIHdlaWdodD0xCisgICAgIyBUaGlzIG1lYW5zIGxvYWQgYmFsYW5jZWQgcXVlcmll cyBnbyB0byBub2RlIDEgYnkgZGVmYXVsdAorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MCA9IDAi ID4+IGV0Yy9wZ3Bvb2wuY29uZgorICAgIGVjaG8gImJhY2tlbmRfd2VpZ2h0MSA9IDEiID4+IGV0 Yy9wZ3Bvb2wuY29uZgorCisgICAgIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgcm91dGlu ZyBkZWNpc2lvbnMKKyAgICBlY2hvICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIiA+PiBldGMv cGdwb29sLmNvbmYKKworICAgIC4vc3RhcnRhbGwKKworICAgIGV4cG9ydCBQR1BPUlQ9JFBHUE9P TF9QT1JUCisKKyAgICB3YWl0X2Zvcl9wZ3Bvb2xfc3RhcnR1cAorCisgICAgIyBDcmVhdGUgdGVz dCB0YWJsZXMKKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitDUkVBVEUgVEFCTEUgdDEoaSBJTlRFR0VS KTsKK0NSRUFURSBUQUJMRSB0MihpIElOVEVHRVIpOworQ1JFQVRFIFRBQkxFIHQzKGkgSU5URUdF Uik7CitFT0YKKworICAgIGVjaG8gIj09PSBUZXN0IDE6IENvbGQgU3RhcnQgUm91dGluZyA9PT0i CisgICAgIyBEdXJpbmcgY29sZCBzdGFydCwgYWxsIHF1ZXJpZXMgc2hvdWxkIGdvIHRvIHByaW1h cnkKKyAgICAjIFJlc3RhcnQgcGdwb29sIHRvIHRyaWdnZXIgY29sZCBzdGFydAorICAgIC4vc2h1 dGRvd25hbGwKKyAgICAuL3N0YXJ0YWxsCisgICAgd2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAKKwor ICAgICMgSW1tZWRpYXRlbHkgcXVlcnkgLSBzaG91bGQgZ28gdG8gcHJpbWFyeSBkdWUgdG8gY29s ZCBzdGFydAorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY29sZF9zdGFydF90ZXN0JyBhcyBt YXJrZXIsICogRlJPTSB0MTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQ2hlY2sgbG9nIGZv ciBjb2xkIHN0YXJ0IG1lc3NhZ2UgKHVzZSAtYSB0byBoYW5kbGUgYmluYXJ5IGxvZyBmaWxlcykK KyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ugb2YgdHJh Y2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAg ICAgZWNobyAiVGVzdCAxIFBBU1NFRDogQ29sZCBzdGFydCByb3V0aW5nIHdvcmtzIgorICAgIGVs c2UKKyAgICAgICAgZWNobyAiVGVzdCAxIEZBSUxFRDogQ29sZCBzdGFydCByb3V0aW5nIG5vdCBk ZXRlY3RlZCIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQor CisgICAgZWNobyAiPT09IFRlc3QgMjogV2FpdCBmb3IgY29sZCBzdGFydCB0byBlbmQgPT09Igor ICAgICMgV2FpdCBmb3IgY29sZCBzdGFydCBwZXJpb2QgdG8gZW5kICgyIHNlY29uZHMpCisgICAg c2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisg ICAgIyBOb3cgYSBjbGVhbiB0YWJsZSBxdWVyeSBzaG91bGQgbG9hZCBiYWxhbmNlIChnbyB0byBu b2RlIDEpCisgICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdhZnRlcl9jb2xkX3N0YXJ0JyBhcyBt YXJrZXIsICogRlJPTSB0MzsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgQWZ0ZXIgY29sZCBz dGFydCwgcXVlcmllcyB0byBjbGVhbiB0YWJsZXMgc2hvdWxkIGxvYWQgYmFsYW5jZQorICAgICMg Q2hlY2sgdGhhdCBpdCBkaWQgTk9UIGdldCBmb3JjZWQgdG8gcHJpbWFyeSBkdWUgdG8gdHJhY2sg dGFibGUgbXV0YXRpb24KKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNl IGJlY2F1c2Ugb2YgdHJhY2sgdGFibGUgbXV0YXRpb24gY29sZCBzdGFydCIgbG9nL3BncG9vbC5s b2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAyIEZBSUxFRDogU3RpbGwgaW4gY29sZCBzdGFy dCBhZnRlciB3YWl0aW5nIgorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQor ICAgIGZpCisgICAgZWNobyAiVGVzdCAyIFBBU1NFRDogQ29sZCBzdGFydCBlbmRlZCBjb3JyZWN0 bHkiCisKKyAgICBlY2hvICI9PT0gVGVzdCAzOiBXcml0ZS10aGVuLVJlYWQgUm91dGluZyA9PT0i CisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0 ZSB0byB0MSBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmdsZSBjb25uZWN0aW9uIHRvIGVuc3VyZSBz YW1lIHNlc3Npb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitJTlNFUlQgSU5UTyB0MSBWQUxVRVMg KDEpOworU0VMRUNUICd3cml0ZV9yZWFkX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQxOworRU9G CisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVw IDAuNQorCisgICAgIyBDaGVjayBsb2cgZm9yIHRhYmxlIHN0YWxlbmVzcyBtZXNzYWdlCisgICAg aWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMg cmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVz dCAzIFBBU1NFRDogV3JpdGUtdGhlbi1yZWFkIHJvdXRpbmcgd29ya3MiCisgICAgZWxzZQorICAg ICAgICBlY2hvICJUZXN0IDMgRkFJTEVEOiBUYWJsZSBzdGFsZW5lc3Mgbm90IGRldGVjdGVkIGFm dGVyIHdyaXRlIgorICAgICAgICAjIFNob3cgcmVsZXZhbnQgbG9nIGVudHJpZXMgZm9yIGRlYnVn Z2luZworICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9v bC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQor ICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA0OiBDbGVhbiBUYWJsZSBTdGlsbCBMb2FkIEJh bGFuY2VzID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisK KyAgICAjIFJlYWQgZnJvbSB0MiAobmV2ZXIgd3JpdHRlbiB0bykgLSBzaG91bGQgbG9hZCBiYWxh bmNlCisgICAgJFBTUUwgdGVzdCAtYyAiU0VMRUNUICdjbGVhbl90YWJsZV90ZXN0JyBhcyBtYXJr ZXIsICogRlJPTSB0MjsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgU2hvdWxkIE5PVCBzZWUg dHJhY2sgdGFibGUgbXV0YXRpb24gYmxvY2tpbmcgbWVzc2FnZSBmb3IgdDIKKyAgICBpZiBncmVw IC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKnQyLip3YXMgcmVj ZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA0 IEZBSUxFRDogQ2xlYW4gdGFibGUgaW5jb3JyZWN0bHkgbWFya2VkIGFzIHN0YWxlIgorICAgICAg ICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiVGVzdCA0 IFBBU1NFRDogQ2xlYW4gdGFibGVzIHN0aWxsIGxvYWQgYmFsYW5jZSIKKworICAgIGVjaG8gIj09 PSBUZXN0IDU6IFVQREFURSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0 aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBVcGRhdGUgdDIgYW5kIHRoZW4g cmVhZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK1VQREFU RSB0MiBTRVQgaSA9IDk5OSBXSEVSRSBpID0gMDsKK1NFTEVDVCAndXBkYXRlX3Rlc3QnIGFzIG1h cmtlciwgKiBGUk9NIHQyOworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cg aXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90 IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3Bn cG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCA1IFBBU1NFRDogVVBEQVRFIG1hcmtz IHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA1IEZBSUxFRDog VVBEQVRFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFs bAorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNjogREVMRVRF IE1hcmtzIFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxv Zy9wZ3Bvb2wubG9nCisKKyAgICAjIERlbGV0ZSBmcm9tIHQzIGFuZCB0aGVuIHJlYWQgLSB1c2Ug c2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitERUxFVEUgRlJPTSB0MyBX SEVSRSBpID0gMDsKK1NFTEVDVCAnZGVsZXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHQzOwor RU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNs ZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNh dXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3JpdHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAg ICAgICAgZWNobyAiVGVzdCA2IFBBU1NFRDogREVMRVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgor ICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA2IEZBSUxFRDogREVMRVRFIGRpZCBub3QgbWFy ayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEK KyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgNzogVFJVTkNBVEUgTWFya3MgVGFibGUgYXMg U3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKwor ICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFibGUgZm9yIFRSVU5DQVRFIHRlc3QKKyAgICAkUFNRTCB0 ZXN0IC1jICJDUkVBVEUgVEFCTEUgdF90cnVuY2F0ZShpIElOVEVHRVIpOyIgPiAvZGV2L251bGwg Mj4mMQorICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfdHJ1bmNhdGUgVkFMVUVTICgx KSwgKDIpLCAoMyk7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFueSBUVEwg dG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nIGFnYWluCisgICAg PiBsb2cvcGdwb29sLmxvZworCisgICAgIyBUcnVuY2F0ZSBhbmQgdGhlbiByZWFkIC0gdXNlIHNp bmdsZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorVFJVTkNBVEUgdF90cnVuY2F0 ZTsKK1NFTEVDVCAndHJ1bmNhdGVfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF90cnVuY2F0ZTsK K0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBz bGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVj YXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisg ICAgICAgIGVjaG8gIlRlc3QgNyBQQVNTRUQ6IFRSVU5DQVRFIG1hcmtzIHRhYmxlIGFzIHN0YWxl IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiVGVzdCA3IEZBSUxFRDogVFJVTkNBVEUgZGlkIG5v dCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9t dXRhdGlvbiIgbG9nL3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxs CisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvICI9PT0gVGVzdCA4OiBXSVRIIENs YXVzZSAoQ1RFIHdpdGggREVMRVRFKSBNYXJrcyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBD bGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBDcmVhdGUgYSBmcmVz aCB0YWJsZSBmb3IgV0lUSCB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRf Y3RlKGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgJFBTUUwgdGVzdCAtYyAiSU5T RVJUIElOVE8gdF9jdGUgVkFMVUVTICgxKSwgKDIpLCAoMyk7IiA+IC9kZXYvbnVsbCAyPiYxCisK KyAgICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBD bGVhciB0aGUgbG9nIGFnYWluCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAgIyBVc2UgV0lU SCBjbGF1c2Ugd2l0aCBERUxFVEUsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YWJsZQorICAgICRQU1FM IHRlc3QgPDxFT0YKK1dJVEggZGVsZXRlZCBBUyAoREVMRVRFIEZST00gdF9jdGUgV0hFUkUgaSA9 IDEgUkVUVVJOSU5HICopCitTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ7CitTRUxFQ1QgJ2N0ZV90ZXN0 JyBhcyBtYXJrZXIsICogRlJPTSB0X2N0ZTsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBl bnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEg ImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0 ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgOCBQQVNTRUQ6IFdJ VEggY2xhdXNlIChDVEUpIG1hcmtzIHRhYmxlIGFzIHN0YWxlIgorICAgIGVsc2UKKyAgICAgICAg ZWNobyAiVGVzdCA4IEZBSUxFRDogV0lUSCBjbGF1c2UgKENURSkgZGlkIG5vdCBtYXJrIHRhYmxl IGFzIHN0YWxlIgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9n L3BncG9vbC5sb2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4 aXQgMQorICAgIGZpCisKKyAgICAjIFRlc3QgOTogTUVSR0UgKFBvc3RncmVTUUwgMTUrIG9ubHkp CisgICAgUEdfTUFKT1JfVkVSU0lPTj0kKCRQU1FMIC10IC1jICJTRUxFQ1Qgc3Vic3RyaW5nKHZl cnNpb24oKSBmcm9tICdQb3N0Z3JlU1FMIChbMC05XSspJyk7IiB8IHRyIC1kICcgJykKKyAgICBp ZiBbICIkUEdfTUFKT1JfVkVSU0lPTiIgLWdlIDE1IF0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAg ICAgZWNobyAiPT09IFRlc3QgOTogTUVSR0UgTWFya3MgVGFibGUgYXMgU3RhbGUgKFBvc3RncmVT UUwgJFBHX01BSk9SX1ZFUlNJT04pID09PSIKKyAgICAgICAgIyBDbGVhciB0aGUgbG9nCisgICAg ICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICAgICAjIENyZWF0ZSB0YWJsZXMgZm9yIE1FUkdF IHRlc3QKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2VfdGFyZ2V0 KGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIHZhbCBURVhUKTsiID4gL2Rldi9udWxsIDI+JjEKKyAg ICAgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfbWVyZ2Vfc291cmNlKGlkIElOVEVH RVIsIHZhbCBURVhUKTsiID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgJFBTUUwgdGVzdCAtYyAi SU5TRVJUIElOVE8gdF9tZXJnZV90YXJnZXQgVkFMVUVTICgxLCAnb2xkJyk7IiA+IC9kZXYvbnVs bCAyPiYxCisgICAgICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJTlRPIHRfbWVyZ2Vfc291cmNl IFZBTFVFUyAoMSwgJ25ldycpLCAoMiwgJ2luc2VydCcpOyIgPiAvZGV2L251bGwgMj4mMQorCisg ICAgICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBleHBpcmUKKyAgICAgICAgc2xlZXAgMworCisg ICAgICAgICMgQ2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgICAgICA+IGxvZy9wZ3Bvb2wubG9nCisK KyAgICAgICAgIyBVc2UgTUVSR0UsIHRoZW4gcmVhZCBmcm9tIHRoZSB0YXJnZXQgdGFibGUKKyAg ICAgICAgJFBTUUwgdGVzdCA8PEVPRgorTUVSR0UgSU5UTyB0X21lcmdlX3RhcmdldCB0CitVU0lO RyB0X21lcmdlX3NvdXJjZSBzIE9OIHQuaWQgPSBzLmlkCitXSEVOIE1BVENIRUQgVEhFTiBVUERB VEUgU0VUIHZhbCA9IHMudmFsCitXSEVOIE5PVCBNQVRDSEVEIFRIRU4gSU5TRVJUIFZBTFVFUyAo cy5pZCwgcy52YWwpOworU0VMRUNUICdtZXJnZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0X21l cmdlX3RhcmdldDsKK0VPRgorCisgICAgICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBp cyBmbHVzaGVkCisgICAgICAgIHNsZWVwIDAuNQorCisgICAgICAgIGlmIGdyZXAgLWEgLXEgImNv dWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4i IGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgICAgICBlY2hvICJUZXN0IDkgUEFTU0VEOiBN RVJHRSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNo byAiVGVzdCA5IEZBSUxFRDogTUVSR0UgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxlIgorICAg ICAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9n IHwgdGFpbCAtMjAKKyAgICAgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgICAgIGV4aXQg MQorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiPT09IFRlc3QgOTogTUVSR0Ug c2tpcHBlZCAocmVxdWlyZXMgUG9zdGdyZVNRTCAxNSssIGhhdmUgJFBHX01BSk9SX1ZFUlNJT04p ID09PSIKKyAgICBmaQorCisgICAgZWNobyAiIgorICAgIGVjaG8gIj09PSBBbGwgVHJhY2sgVGFi bGUgTXV0YXRpb24gVGVzdHMgUEFTU0VEID09PSIKKworICAgIC4vc2h1dGRvd25hbGwKKworICAg IGNkIC4uCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvLmdpdGlnbm9yZSBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nLy5n aXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNiOTNkMjdhN2U3ZThhNWVmZTZlYWNmYjBmODhmNmYzYzhi Yzc2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRy YWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACits ZWFkZXIKK3N0YW5kYnkKKyoucGlkCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rl c3RzLzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZiBiL3NyYy90 ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL2xl YWRlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0NWNmZjk4NjBkMDM1N2ZiYjBlM2U5YTU2NDMxMjRkOTE2 YmQ5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50 cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy9sZWFkZXIuY29uZgpAQCAtMCwwICsxLDI1IEBA CisjIGxlYWRlciB3YXRjaGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxlX211dGF0aW9uIHdhdGNo ZG9nIHRlc3QKK3VzZV93YXRjaGRvZyA9IG9uCit3ZF9pbnRlcnZhbCA9IDEKK3dkX3ByaW9yaXR5 ID0gMgorCitob3N0bmFtZTAgPSAnbG9jYWxob3N0Jword2RfcG9ydDAgPSAyMTAwNAorcGdwb29s X3BvcnQwID0gMTEwMDAKK2hvc3RuYW1lMSA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MSA9IDIxMTA0 CitwZ3Bvb2xfcG9ydDEgPSAxMTEwMAorCitoZWFydGJlYXRfaG9zdG5hbWUwID0gJ2xvY2FsaG9z dCcKK2hlYXJ0YmVhdF9wb3J0MCA9IDIxMDA1CitoZWFydGJlYXRfaG9zdG5hbWUxID0gJ2xvY2Fs aG9zdCcKK2hlYXJ0YmVhdF9wb3J0MSA9IDIxMTA1CisKK2VuYWJsZV9jb25zZW5zdXNfd2l0aF9o YWxmX3ZvdGVzID0gb24KKworIyBFbmFibGUgdHJhY2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZSB2 aWEgZG1sX2FkYXB0aXZlX2dsb2JhbAorZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPSAn ZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVy YXRpb24gPSAyMDAwCisKKyMgRW5hYmxlIGRlYnVnIGxvZ2dpbmcgdG8gc2VlIGZlYXR1cmUgbWVz c2FnZXMKK2xvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3N0YW5kYnku Y29uZiBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9u X3dhdGNoZG9nL3N0YW5kYnkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTFjM2RmY2E0MjdjZjZiMjQ2NDUx ZDA2N2MzMGIwMjU1YjljNGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvc3RhbmRieS5jb25mCkBA IC0wLDAgKzEsMjcgQEAKKyMgc3RhbmRieSB3YXRjaGRvZyBjb25maWcgZm9yIHRyYWNrX3RhYmxl X211dGF0aW9uIHdhdGNoZG9nIHRlc3QKK3BvcnQgPSAxMTEwMAorcGNwX3BvcnQgPSAxMTEwNQor dXNlX3dhdGNoZG9nID0gb24KK3dkX2ludGVydmFsID0gMQord2RfcHJpb3JpdHkgPSAxCisKK2hv c3RuYW1lMCA9ICdsb2NhbGhvc3QnCit3ZF9wb3J0MCA9IDIxMDA0CitwZ3Bvb2xfcG9ydDAgPSAx MTAwMAoraG9zdG5hbWUxID0gJ2xvY2FsaG9zdCcKK3dkX3BvcnQxID0gMjExMDQKK3BncG9vbF9w b3J0MSA9IDExMTAwCisKK2hlYXJ0YmVhdF9ob3N0bmFtZTAgPSAnbG9jYWxob3N0JworaGVhcnRi ZWF0X3BvcnQwID0gMjEwMDUKK2hlYXJ0YmVhdF9ob3N0bmFtZTEgPSAnbG9jYWxob3N0JworaGVh cnRiZWF0X3BvcnQxID0gMjExMDUKKworZW5hYmxlX2NvbnNlbnN1c193aXRoX2hhbGZfdm90ZXMg PSBvbgorCisjIEVuYWJsZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlIHZpYSBkbWxfYWRh cHRpdmVfZ2xvYmFsCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRp dmVfZ2xvYmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIw MDAKKworIyBFbmFibGUgZGVidWcgbG9nZ2luZyB0byBzZWUgZmVhdHVyZSBtZXNzYWdlcworbG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzc2lvbi90 ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaCBiL3NyYy90ZXN0 L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Qu c2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uNzUyYTZlNmFhMzc3ZmUwYzU0MjQ0OTc1ZTYwNjY0ODEwMWM5OGNmOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3Rh YmxlX211dGF0aW9uX3dhdGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxNzkgQEAKKyMhL3Vzci9i aW4vZW52IGJhc2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBt dXRhdGlvbiBnbG9iYWwgY29sZCBzdGFydCBvbiB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlLgorIyBU ZXN0cyB0aGF0IHdoZW4gdGhlIHdhdGNoZG9nIGxlYWRlciBjaGFuZ2VzLCB0aGUgbmV3IGxlYWRl ciB0cmlnZ2VycworIyBhIGdsb2JhbCBjb2xkIHN0YXJ0IHRvIGZvcmNlIGFsbCBxdWVyaWVzIHRv IHByaW1hcnkuCisjCitzb3VyY2UgJFRFU1RMSUJTCitMRUFERVJfRElSPWxlYWRlcgorU1RBTkRC WV9ESVI9c3RhbmRieQorUFNRTD0kUEdCSU4vcHNxbAorc3VjY2Vzc19jb3VudD0wCisKK3JtIC1m ciAkTEVBREVSX0RJUgorcm0gLWZyICRTVEFOREJZX0RJUgorCitta2RpciAkTEVBREVSX0RJUgor bWtkaXIgJFNUQU5EQllfRElSCisKKyMgZGlyIGluIGxlYWRlciBkaXJlY3RvcnkKK2NkICRMRUFE RVJfRElSCisKKyMgY3JlYXRlIGxlYWRlciBlbnZpcm9ubWVudCB3aXRoIHN0cmVhbWluZyByZXBs aWNhdGlvbgorZWNobyAtbiAiY3JlYXRpbmcgbGVhZGVyIHBncG9vbC4uLiIKKyRQR1BPT0xfU0VU VVAgLW0gcyAtbiAyIC1wIDExMDAwIHx8IGV4aXQgMQorZWNobyAibGVhZGVyIHNldHVwIGRvbmUu IgorCisjIGNvcHkgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHN0YW5kYnkKK2NwIC1yIGV0YyAuLi8k U1RBTkRCWV9ESVIvCisKK3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworY2F0IC4uL2xlYWRlci5jb25m ID4+IGV0Yy9wZ3Bvb2wuY29uZgorZWNobyAwID4gZXRjL3BncG9vbF9ub2RlX2lkCisKKy4vc3Rh cnRhbGwKK3dhaXRfZm9yX3BncG9vbF9zdGFydHVwCisKKyMgYmFjayB0byB0ZXN0IHJvb3QgZGly CitjZCAuLgorCisjIGNyZWF0ZSBzdGFuZGJ5IGVudmlyb25tZW50Citta2RpciAkU1RBTkRCWV9E SVIvbG9nCitlY2hvIC1uICJjcmVhdGluZyBzdGFuZGJ5IHBncG9vbC4uLiIKK2NhdCBzdGFuZGJ5 LmNvbmYgPj4gJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZgorIyBzaW5jZSB3ZSBhcmUgdXNp bmcgdGhlIHNhbWUgcGdwb29sLUlJIGNvbmYgYXMgb2YgbGVhZGVyLCBjaGFuZ2UgdGhlIHBpZCBm aWxlIHBhdGgKK2VjaG8gInBpZF9maWxlX25hbWUgPSAnJFBXRC9wZ3Bvb2wyLnBpZCciID4+ICRT VEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYKK2VjaG8gMSA+ICRTVEFOREJZX0RJUi9ldGMvcGdw b29sX25vZGVfaWQKKyMgc3RhcnQgdGhlIHN0YW5kYnkgcGdwb29sLUlJIGJ5IGhhbmQKKyRQR1BP T0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtRCAtbiAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9v bC5jb25mIC1GICRTVEFOREJZX0RJUi9ldGMvcGNwLmNvbmYgLWEgJFNUQU5EQllfRElSL2V0Yy9w b29sX2hiYS5jb25mID4gJFNUQU5EQllfRElSL2xvZy9wZ3Bvb2wubG9nIDI+JjEgJgorCisjIFRl c3QgMTogQ2hlY2sgaWYgbGVhZGVyIHBncG9vbC1JSSBzdGFydGVkIGNvcnJlY3RseQorZWNobyAi PT09IFRlc3QgMTogV2FpdGluZyBmb3IgdGhlIHBncG9vbCBsZWFkZXIuLi4gPT09IgorZm9yIGkg aW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAiSSBhbSB0aGUgY2x1c3RlciBsZWFk ZXIgbm9kZS4gU3RhcnRpbmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAkTEVBREVSX0RJUi9sb2cvcGdw b29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNz X2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDEgUEFTU0VEOiBM ZWFkZXIgYnJvdWdodCB1cCBzdWNjZXNzZnVsbHkuIgorCQlicmVhaworCWZpCisJZWNobyAiW2No ZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0 IDEgXTsgdGhlbgorCWVjaG8gIlRlc3QgMSBGQUlMRUQ6IExlYWRlciBkaWQgbm90IHN0YXJ0Igor CSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9v bC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRv d25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCAyOiBDaGVjayBpZiBzdGFuZGJ5IGhhcyBzdWNj ZXNzZnVsbHkgam9pbmVkCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZvciB0aGUgc3RhbmRi eSB0byBqb2luIGNsdXN0ZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAK K2RvCisJZ3JlcCAic3VjY2Vzc2Z1bGx5IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciBhcyBz dGFuZGJ5IG5vZGUiICRTVEFOREJZX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYx CisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50 ICsgMSApKQorCQllY2hvICJUZXN0IDIgUEFTU0VEOiBTdGFuZGJ5IHN1Y2Nlc3NmdWxseSBjb25u ZWN0ZWQuIgorCQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAy Citkb25lCisKK2lmIFsgJHN1Y2Nlc3NfY291bnQgLWx0IDIgXTsgdGhlbgorCWVjaG8gIlRlc3Qg MiBGQUlMRUQ6IFN0YW5kYnkgZGlkIG5vdCBqb2luIGNsdXN0ZXIiCisJJFBHUE9PTF9JTlNUQUxM X0RJUi9iaW4vcGdwb29sIC1mICRTVEFOREJZX0RJUi9ldGMvcGdwb29sLmNvbmYgLW0gZiBzdG9w IDI+L2Rldi9udWxsCisJY2QgJExFQURFUl9ESVIgJiYgLi9zaHV0ZG93bmFsbAorCWV4aXQgMQor ZmkKKworIyBUZXN0IDM6IFZlcmlmeSB0cmFja190YWJsZV9tdXRhdGlvbiBpcyBlbmFibGVkIGFu ZCB3b3JraW5nIG9uIGxlYWRlcgorZWNobyAiPT09IFRlc3QgMzogVmVyaWZ5IHRyYWNrX3RhYmxl X211dGF0aW9uIGlzIGVuYWJsZWQgPT09IgoraWYgZ3JlcCAtYSAidHJhY2tfdGFibGVfbXV0YXRp b246IGluaXRpYWxpemVkIiAkTEVBREVSX0RJUi9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAy PiYxOyB0aGVuCisJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwllY2hv ICJUZXN0IDMgUEFTU0VEOiB0cmFja190YWJsZV9tdXRhdGlvbiBpbml0aWFsaXplZCBvbiBsZWFk ZXIiCitlbHNlCisJZWNobyAiVGVzdCAzIEZBSUxFRDogdHJhY2tfdGFibGVfbXV0YXRpb24gbm90 IGluaXRpYWxpemVkIG9uIGxlYWRlciIKKwkkUEdQT09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wg LWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29uZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKKwlj ZCAkTEVBREVSX0RJUiAmJiAuL3NodXRkb3duYWxsCisJZXhpdCAxCitmaQorCisjIFRlc3QgNDog U3RvcCBsZWFkZXIgcGdwb29sIGFuZCB0cmlnZ2VyIGZhaWxvdmVyCitlY2hvICI9PT0gVGVzdCA0 OiBUcmlnZ2VyaW5nIGxlYWRlciBmYWlsb3Zlci4uLiA9PT0iCiskUEdQT09MX0lOU1RBTExfRElS L2Jpbi9wZ3Bvb2wgLWYgJExFQURFUl9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcAorCitl Y2hvICJDaGVja2luZyBpZiB0aGUgU3RhbmRieSBwZ3Bvb2wtSUkgZGV0ZWN0ZWQgdGhlIGxlYWRl ciBzaHV0ZG93bi4uLiIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitkbworCWdyZXAg LWEgIiBpcyBzaHV0dGluZyBkb3duIiAkU1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2 L251bGwgMj4mMQorCWlmIFsgJD8gPSAwIF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3Vj Y2Vzc19jb3VudCArIDEgKSkKKwkJZWNobyAiVGVzdCA0IFBBU1NFRDogTGVhZGVyIHNodXRkb3du IGRldGVjdGVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xl ZXAgMgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hvICJU ZXN0IDQgRkFJTEVEOiBMZWFkZXIgc2h1dGRvd24gbm90IGRldGVjdGVkIgorCSRQR1BPT0xfSU5T VEFMTF9ESVIvYmluL3BncG9vbCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYg c3RvcCAyPi9kZXYvbnVsbAorCWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0 IDEKK2ZpCisKKyMgVGVzdCA1OiBWZXJpZnkgc3RhbmRieSBiZWNvbWVzIG5ldyBsZWFkZXIKK2Vj aG8gIj09PSBUZXN0IDU6IENoZWNraW5nIGlmIHN0YW5kYnkgdGFrZXMgb3ZlciBhcyBsZWFkZXIu Li4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBh bSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZS4gU3RhcnRpbmcgZXNjYWxhdGlvbiBwcm9jZXNzIiAk U1RBTkRCWV9ESVIvbG9nL3BncG9vbC5sb2cgPiAvZGV2L251bGwgMj4mMQorCWlmIFsgJD8gPSAw IF07IHRoZW4KKwkJc3VjY2Vzc19jb3VudD0kKCggc3VjY2Vzc19jb3VudCArIDEgKSkKKwkJZWNo byAiVGVzdCA1IFBBU1NFRDogU3RhbmRieSBiZWNhbWUgdGhlIG5ldyBsZWFkZXIuIgorCQlicmVh aworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisKK2lmIFsg JHN1Y2Nlc3NfY291bnQgLWx0IDUgXTsgdGhlbgorCWVjaG8gIlRlc3QgNSBGQUlMRUQ6IFN0YW5k YnkgZGlkIG5vdCBiZWNvbWUgbGVhZGVyIgorCSRQR1BPT0xfSU5TVEFMTF9ESVIvYmluL3BncG9v bCAtZiAkU1RBTkRCWV9ESVIvZXRjL3BncG9vbC5jb25mIC1tIGYgc3RvcCAyPi9kZXYvbnVsbAor CWNkICRMRUFERVJfRElSICYmIC4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCA2 OiBWZXJpZnkgZ2xvYmFsIGNvbGQgc3RhcnQgd2FzIHRyaWdnZXJlZCBvbiBuZXcgbGVhZGVyCitl Y2hvICI9PT0gVGVzdCA2OiBDaGVja2luZyBpZiBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dl cmVkLi4uID09PSIKKyMgVGhlIG5ldyBsZWFkZXIgc2hvdWxkIHRyaWdnZXIgZ2xvYmFsIGNvbGQg c3RhcnQgd2hlbiBpdCBiZWNvbWVzIGNvb3JkaW5hdG9yCisjIExvb2sgZm9yIHRoZSBsb2cgbWVz c2FnZSB0aGF0IGluZGljYXRlcyBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkCitmb3Ig aSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJsZV9tdXRh dGlvbjogZW50ZXJpbmcgZ2xvYmFsIGNvbGQgc3RhcnQiICRTVEFOREJZX0RJUi9sb2cvcGdwb29s LmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2Nv dW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9i YWwgY29sZCBzdGFydCB0cmlnZ2VyZWQgb24gbmV3IGxlYWRlci4iCisJCWJyZWFrCisJZmkKKwll Y2hvICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworIyBDbGVhbnVwCiskUEdQ T09MX0lOU1RBTExfRElSL2Jpbi9wZ3Bvb2wgLWYgJFNUQU5EQllfRElSL2V0Yy9wZ3Bvb2wuY29u ZiAtbSBmIHN0b3AgMj4vZGV2L251bGwKK2NkICRMRUFERVJfRElSCisuL3NodXRkb3duYWxsCisK K2VjaG8gIiIKK2VjaG8gIiRzdWNjZXNzX2NvdW50IG91dCBvZiA2IHN1Y2Nlc3NmdWwiCisKK2lm IHRlc3QgJHN1Y2Nlc3NfY291bnQgLWVxIDYKK3RoZW4KKwllY2hvICI9PT0gQWxsIFRyYWNrIFRh YmxlIE11dGF0aW9uIFdhdGNoZG9nIFRlc3RzIFBBU1NFRCA9PT0iCisJZXhpdCAwCitmaQorCitl eGl0IDEKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmMg Yi9zcmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3ZDRm MDM4MGQ0M2EyMzdmNTE4YzYwY2RkNzNhYmEyZmY1MWI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jCkBAIC0wLDAgKzEsMTE4OCBAQAor LyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAqIHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVu dCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZvciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRh dHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24g Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICog Y29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQg dGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2lu ZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0 d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUg YXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5 IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisg KiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90 cmFja190YWJsZV9tdXRhdGlvbi5jOiBJbi1tZW1vcnkgdHJhY2tpbmcgb2YgcmVjZW50bHkgd3Jp dHRlbiB0YWJsZXMKKyAqICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBzdGFsZSByZWFkcyBm cm9tIHJlcGxpY2FzIGR1cmluZyByZXBsaWNhdGlvbiBsYWcKKyAqCisgKiBCYXNlZCBvbiB0aGUg ImxhZ2xlc3MiIGFyY2hpdGVjdHVyZSBmcm9tIFRhaWxvciBCcmFuZHM6CisgKiBodHRwczovL21l ZGl1bS5jb20vdGFpbG9yLXRlY2gvdXNpbmctZGF0YWJhc2UtcmVhZC1yZXBsaWNhcy1pbi1kaXN0 cmlidXRlZC1zeXN0ZW1zLWQ4MGVhZjZiYmY4YQorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVu aXN0ZC5oPgorCisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmlnLmgiCisj aW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgorI2luY2x1ZGUgInV0aWxz L3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJ1dGlscy9lbG9nLmgiCisj aW5jbHVkZSAidXRpbHMvcG9vbF9pcGMuaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2MuaCIKKyNp bmNsdWRlICJ1dGlscy9wb29sX3JlbGNhY2hlLmgiCisKKyNkZWZpbmUgREFUQUJBU0VfVE9fT0lE X1FVRVJZICJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5wZ19kYXRhYmFzZSBXSEVSRSBkYXRu YW1lID0gJyVzJyIKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogUG9pbnRlciB0byBzaGFyZWQgbWVtb3J5IHN0 cnVjdHVyZSAqLworc3RhdGljIFRyYWNrVGFibGVNdXRhdGlvblNobWVtICp0cmFja190YWJsZV9t dXRhdGlvbl9zaG1lbSA9IE5VTEw7CisKKy8qIFBlci1wcm9jZXNzIGNvbGQgc3RhcnQgdHJhY2tp bmcgKG5vdCBpbiBzaGFyZWQgbWVtb3J5KSAqLworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByb2Nl c3Nfc3RhcnRfdGltZTsKK3N0YXRpYyBib29sIGNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQgPSBmYWxz ZTsKKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5n IGZsZXhpYmxlIGFycmF5cyBpbiBzaGFyZWQgbWVtb3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyogR2V0IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHRhYmxlIG1hcCAqLworI2Rl ZmluZSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApIFwKKwkoKGludCAqKSgoY2hhciAqKShtYXApICsg c2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkpKQorCisvKiBHZXQgcG9pbnRlciB0 byBlbnRyeSBhcnJheSBpbiB0YWJsZSBtYXAgKi8KKyNkZWZpbmUgVEFCTEVfTUFQX0VOVFJJRVMo bWFwKSBcCisJKChUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqKSgoY2hhciAqKShtYXApICsgc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSkgKyBcCisJCQkJCQkJKG1hcCktPm51bV9i dWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiBHZXQgcG9pbnRlciB0byBidWNrZXQgYXJyYXkg aW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUgUVVFUllfQ0FDSEVfQlVDS0VUUyhjYWNoZSkgXAor CSgoaW50ICopKChjaGFyICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpKSkKKwor LyogR2V0IHBvaW50ZXIgdG8gZW50cnkgYXJyYXkgaW4gcXVlcnkgY2FjaGUgKi8KKyNkZWZpbmUg UVVFUllfQ0FDSEVfRU5UUklFUyhjYWNoZSkgXAorCSgoUXVlcnlQYXJzZUVudHJ5ICopKChjaGFy ICopKGNhY2hlKSArIHNpemVvZihRdWVyeVBhcnNlQ2FjaGUpICsgXAorCQkJCQkJIChjYWNoZSkt Pm51bV9idWNrZXRzICogc2l6ZW9mKGludCkpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBT ZW1hcGhvcmUgbG9jayBoZWxwZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGlj IGlubGluZSB2b2lkCit0YWJsZV9tYXBfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xv Y2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9tYXBfdW5sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhvcmVfdW5sb2NrKFRS QUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX1NFTSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor cXVlcnlfY2FjaGVfbG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX2xvY2soVFJBQ0tfVEFC TEVfTVVUQVRJT05fUVVFUllfU0VNKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxdWVyeV9j YWNoZV91bmxvY2sodm9pZCkKK3sKKwlwb29sX3NlbWFwaG9yZV91bmxvY2soVFJBQ0tfVEFCTEVf TVVUQVRJT05fUVVFUllfU0VNKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogSGFzaCBm dW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogRk5WLTFhIGhhc2gg Zm9yIHRhYmxlL2RhdGFiYXNlIG9pZCBwYWlyCisgKi8KK3N0YXRpYyB1aW50MzIKK2ZudjFhX2hh c2hfdGFibGVfa2V5KGludCB0YWJsZV9vaWQsIGludCBkYm9pZCkKK3sKKwl1aW50MzIgaGFzaCA9 IDIxNjYxMzYyNjF1OyAgLyogRk5WIG9mZnNldCBiYXNpcyAqLworCXVpbnQzMiBkYXRhWzJdOwor CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdCBpOworCisJZGF0YVswXSA9ICh1 aW50MzIpIHRhYmxlX29pZDsKKwlkYXRhWzFdID0gKHVpbnQzMikgZGJvaWQ7CisJYnl0ZXMgPSAo Y29uc3QgdW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihk YXRhKTsgaSsrKQorCXsKKwkJaGFzaCBePSBieXRlc1tpXTsKKwkJaGFzaCAqPSAxNjc3NzYxOXU7 ICAvKiBGTlYgcHJpbWUgKi8KKwl9CisKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIEZOVi0x YSBoYXNoIGZvciA2NC1iaXQgdmFsdWUKKyAqLworc3RhdGljIHVpbnQ2NAorZm52MWFfaGFzaF82 NChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit7CisJdWludDY0IGhhc2ggPSAxNDY5NTk4 MTAzOTM0NjY1NjAzN1VMTDsgIC8qIEZOViBvZmZzZXQgYmFzaXMgZm9yIDY0LWJpdCAqLworCXNp emVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCXsKKwkJaGFzaCBePSAodWlu dDgpc3RyW2ldOworCQloYXNoICo9IDEwOTk1MTE2MjgyMTFVTEw7ICAvKiBGTlYgcHJpbWUgZm9y IDY0LWJpdCAqLworCX0KKworCXJldHVybiBoYXNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKiBUaW1lIHV0aWxpdGllcworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBH ZXQgZWxhcHNlZCB0aW1lIGluIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHR3byB0aW1ldmFscworICov CitzdGF0aWMgaW50NjQKK2VsYXBzZWRfdXMoc3RydWN0IHRpbWV2YWwgKnN0YXJ0LCBzdHJ1Y3Qg dGltZXZhbCAqZW5kKQoreworCXJldHVybiAoKGludDY0KShlbmQtPnR2X3NlYyAtIHN0YXJ0LT50 dl9zZWMpICogMTAwMDAwMCkgKworCQkgICAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMp OworfQorCisvKgorICogR2V0IGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgdm9pZAorZ2V0X2N1 cnJlbnRfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJZ2V0dGltZW9mZGF5KHR2LCBOVUxM KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YWJhc2Ugb2lkIGxvb2t1cAorICog LS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQKK3RyYWNrX3RhYmxlX211dGF0aW9u X2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwodm9pZCkKK3sKKwlpbnQJCQlvaWQgPSAwOworCXN0 YXRpYyBQT09MX1JFTENBQ0hFICpyZWxjYWNoZTsKKwlQT09MX0NPTk5FQ1RJT05fUE9PTCAqYmFj a2VuZDsKKwlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0OworCisJLyogU2Fm ZXR5IGNoZWNrOiBtdXN0IGhhdmUgc2htZW0gaW5pdGlhbGl6ZWQgKi8KKwlpZiAodHJhY2tfdGFi bGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCXNlc3Npb25fY29u dGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJaWYgKHNlc3Npb25fY29u dGV4dCA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJLyogRW5zdXJlIHdlIGhhdmUgYSB2YWxp ZCBxdWVyeSBjb250ZXh0ICovCisJaWYgKHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dCA9 PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJYmFja2VuZCA9IHNlc3Npb25fY29udGV4dC0+YmFj a2VuZDsKKwlpZiAoYmFja2VuZCA9PSBOVUxMIHx8IE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKSA9 PSBOVUxMIHx8IE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AgPT0gTlVMTCkKKwkJcmV0dXJu IG9pZDsKKworCS8qIEVuc3VyZSBkYXRhYmFzZSBuYW1lIGlzIHZhbGlkICovCisJaWYgKE1BSU5f Q09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlID09IE5VTEwpCisJCXJldHVybiBvaWQ7 CisKKwlpZiAoIXJlbGNhY2hlKQorCXsKKwkJcmVsY2FjaGUgPSBwb29sX2NyZWF0ZV9yZWxjYWNo ZShwb29sX2NvbmZpZy0+cmVsY2FjaGVfc2l6ZSwKKwkJCQkJCQkJCQlEQVRBQkFTRV9UT19PSURf UVVFUlksCisJCQkJCQkJCQkJaW50X3JlZ2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJaW50X3VucmVn aXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlmYWxzZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQor CQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246 IGVycm9yIGNyZWF0aW5nIHJlbGNhY2hlIHdoaWxlIGdldHRpbmcgZGF0YWJhc2UgT0lEIikpKTsK KwkJCXJldHVybiBvaWQ7CisJCX0KKwl9CisKKwlvaWQgPSAoaW50KSAoaW50cHRyX3QpIHBvb2xf c2VhcmNoX3JlbGNhY2hlKHJlbGNhY2hlLCBiYWNrZW5kLAorCQkJCQkJCQkJCQkJTUFJTl9DT05O RUNUSU9OKGJhY2tlbmQpLT5zcC0+ZGF0YWJhc2UpOworCXJldHVybiBvaWQ7Cit9CisKK2ludAor cG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQpCit7CisJcmV0 dXJuIHRyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwoKTsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSBvcGVy YXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgdGFi bGUgbXV0YXRpb24gaGFzaCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luaXQo VHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsIGludCBudW1fYnVja2V0cywgaW50IG1h eF9lbnRyaWVzKQoreworCWludCAqYnVja2V0czsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAq ZW50cmllczsKKwlpbnQgaTsKKworCW1hcC0+bnVtX2J1Y2tldHMgPSBudW1fYnVja2V0czsKKwlt YXAtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJbWFwLT5udW1fZW50cmllcyA9IDA7CisJ bWFwLT5mcmVlX2xpc3RfaGVhZCA9IDA7CisKKwlidWNrZXRzID0gVEFCTEVfTUFQX0JVQ0tFVFMo bWFwKTsKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCS8qIEluaXRpYWxp emUgYWxsIGJ1Y2tldHMgdG8gZW1wdHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7 IGkrKykKKwkJYnVja2V0c1tpXSA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisKKwkvKiBJbml0aWFsaXplIGZyZWUgbGlzdCAtIGNoYWluIGFsbCBlbnRyaWVzICovCisJZm9y IChpID0gMDsgaSA8IG1heF9lbnRyaWVzOyBpKyspCisJeworCQllbnRyaWVzW2ldLmluX3VzZSA9 IGZhbHNlOworCQllbnRyaWVzW2ldLm5leHQgPSAoaSA8IG1heF9lbnRyaWVzIC0gMSkgPyBpICsg MSA6IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJfQorCisJZXJlcG9ydChE RUJVRzEsCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgdGFi bGUgbWFwIHdpdGggJWQgYnVja2V0cywgJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0 cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRo ZSBmcmVlIGxpc3QKKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNr VGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5 ICplbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlpbnQgaWR4OworCisJaWYgKG1h cC0+ZnJlZV9saXN0X2hlYWQgPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkK KwkJcmV0dXJuIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisKKwlpZHggPSBt YXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9 IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJbWFwLT5udW1fZW50cmllcysr OworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIEZyZWUgYW4gZW50cnkgYmFjayB0byB0aGUg ZnJlZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfZnJlZV9lbnRyeShUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwgaW50IGlkeCkKK3sKKwlUcmFja1RhYmxlTXV0YXRp b25FbnRyeSAqZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisKKwllbnRyaWVzW2lk eF0uaW5fdXNlID0gZmFsc2U7CisJZW50cmllc1tpZHhdLm5leHQgPSBtYXAtPmZyZWVfbGlzdF9o ZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBpZHg7CisJbWFwLT5udW1fZW50cmllcy0tOwor fQorCisvKgorICogTG9vayB1cCBhIHRhYmxlIGluIHRoZSBoYXNoIHRhYmxlCisgKiBSZXR1cm5z IGVudHJ5IGluZGV4IG9yIFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVggaWYgbm90 IGZvdW5kCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZAorICovCitzdGF0aWMgaW50 Cit0YWJsZV9tYXBfbG9va3VwKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwLCBpbnQg dGFibGVfb2lkLCBpbnQgZGJvaWQsIHVpbnQzMiBoYXNoKQoreworCWludCAqYnVja2V0cyA9IFRB QkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMg PSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCWludCBidWNrZXQgPSBoYXNoICUgbWFwLT5udW1f YnVja2V0czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBU UkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4 XS5oYXNoID09IGhhc2ggJiYKKwkJCWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPT0gdGFibGVfb2lk ICYmCisJCQllbnRyaWVzW2lkeF0uZGJvaWQgPT0gZGJvaWQpCisJCXsKKwkJCXJldHVybiBpZHg7 CisJCX0KKwkJaWR4ID0gZW50cmllc1tpZHhdLm5leHQ7CisJfQorCisJcmV0dXJuIFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgdXBkYXRl IGEgdGFibGUgZW50cnkKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkCisgKi8KK3N0 YXRpYyB2b2lkCit0YWJsZV9tYXBfaW5zZXJ0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAq bWFwLCBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQsCisJCQkJIHVpbnQzMiBoYXNoLCBzdHJ1Y3Qg dGltZXZhbCAqd3JpdGVfdGltZSkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VU UyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICplbnRyaWVzID0gVEFCTEVfTUFQX0VO VFJJRVMobWFwKTsKKwlpbnQgYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50 IGlkeDsKKworCS8qIENoZWNrIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCisJaWR4ID0gdGFi bGVfbWFwX2xvb2t1cChtYXAsIHRhYmxlX29pZCwgZGJvaWQsIGhhc2gpOworCWlmIChpZHggIT0g VFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwl7CisJCS8qIFVwZGF0ZSBleGlz dGluZyBlbnRyeSAqLworCQllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3Rp bWU7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgZW50cnkgKi8KKwlpZHggPSB0 YWJsZV9tYXBfYWxsb2NfZW50cnkobWFwKTsKKwlpZiAoaWR4ID09IFRSQUNLX1RBQkxFX01VVEFU SU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlpbnQgYjsKKwkJLyogVGFibGUgaXMgZnVsbCAtIGV2 aWN0IGFuIGVudHJ5ICovCisJCS8qIEZvciBzaW1wbGljaXR5LCBqdXN0IHVzZSB0aGUgZmlyc3Qg ZW50cnkgaW4gZmlyc3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLworCQlmb3IgKGIgPSAwOyBiIDwgbWFw LT5udW1fYnVja2V0czsgYisrKQorCQl7CisJCQlpZiAoYnVja2V0c1tiXSAhPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCQkJeworCQkJCWludCB2aWN0aW0gPSBidWNrZXRz W2JdOworCQkJCWJ1Y2tldHNbYl0gPSBlbnRyaWVzW3ZpY3RpbV0ubmV4dDsKKwkJCQl0YWJsZV9t YXBfZnJlZV9lbnRyeShtYXAsIHZpY3RpbSk7CisJCQkJaWR4ID0gdGFibGVfbWFwX2FsbG9jX2Vu dHJ5KG1hcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaWR4ID09IFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJ CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0ZSBlbnRy eSBmb3IgdGFibGUgb2lkICVkIChkYm9pZCAlZCkiLAorCQkJCQkJCXRhYmxlX29pZCwgZGJvaWQp KSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIG5ldyBlbnRyeSAqLwor CWVudHJpZXNbaWR4XS50YWJsZV9vaWQgPSB0YWJsZV9vaWQ7CisJZW50cmllc1tpZHhdLmRib2lk ID0gZGJvaWQ7CisJZW50cmllc1tpZHhdLmhhc2ggPSBoYXNoOworCWVudHJpZXNbaWR4XS5sYXN0 X3dyaXRlX3RpbWUgPSAqd3JpdGVfdGltZTsKKworCS8qIEluc2VydCBhdCBoZWFkIG9mIGJ1Y2tl dCBjaGFpbiAqLworCWVudHJpZXNbaWR4XS5uZXh0ID0gYnVja2V0c1tidWNrZXRdOworCWJ1Y2tl dHNbYnVja2V0XSA9IGlkeDsKKworCWVyZXBvcnQoREVCVUcyLAorCQkJKGVycm1zZygidHJhY2tf dGFibGVfbXV0YXRpb246IG1hcmtlZCB0YWJsZSBvaWQgJWQgKGRib2lkICVkKSBhcyB3cml0dGVu IiwKKwkJCQkJdGFibGVfb2lkLCBkYm9pZCkpKTsKK30KKworLyoKKyAqIFJlbW92ZSBleHBpcmVk IGVudHJpZXMgZnJvbSB0aGUgdGFibGUgbWFwCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sg aGVsZAorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2NsZWFudXBfZXhwaXJlZChUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwgdWludDY0IHR0bF91cykKK3sKKwlpbnQgKmJ1Y2tl dHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICpl bnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJ aW50IHJlbW92ZWQgPSAwOworCWludCBiOworCisJZ2V0X2N1cnJlbnRfdGltZSgmbm93KTsKKwor CWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQgKnByZXZf cHRyID0gJmJ1Y2tldHNbYl07CisJCWludCBpZHggPSBidWNrZXRzW2JdOworCisJCXdoaWxlIChp ZHggIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJeworCQkJaW50NjQg ZWxhcHNlZCA9IGVsYXBzZWRfdXMoJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cp OworCisJCQlpZiAoZWxhcHNlZCA+IChpbnQ2NCl0dGxfdXMpCisJCQl7CisJCQkJLyogRW50cnkg aGFzIGV4cGlyZWQgLSByZW1vdmUgaXQgKi8KKwkJCQlpbnQgbmV4dCA9IGVudHJpZXNbaWR4XS5u ZXh0OworCQkJCSpwcmV2X3B0ciA9IG5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFw LCBpZHgpOworCQkJCWlkeCA9IG5leHQ7CisJCQkJcmVtb3ZlZCsrOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCXByZXZfcHRyID0gJmVudHJpZXNbaWR4XS5uZXh0OworCQkJCWlkeCA9IGVudHJp ZXNbaWR4XS5uZXh0OworCQkJfQorCQl9CisJfQorCisJaWYgKHJlbW92ZWQgPiAwKQorCXsKKwkJ ZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGNsZWFu ZWQgdXAgJWQgZXhwaXJlZCB0YWJsZSBlbnRyaWVzIiwgcmVtb3ZlZCkpKTsKKwl9Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqIFF1ZXJ5IHBhcnNlIGNhY2hlIG9wZXJhdGlvbnMKKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBxdWVyeSBwYXJzZSBjYWNo ZQorICovCitzdGF0aWMgdm9pZAorcXVlcnlfY2FjaGVfaW5pdChRdWVyeVBhcnNlQ2FjaGUgKmNh Y2hlLCBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQgKmJ1Y2tldHM7 CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCWludCBpOworCisJY2FjaGUtPm51bV9idWNr ZXRzID0gbnVtX2J1Y2tldHM7CisJY2FjaGUtPm1heF9lbnRyaWVzID0gbWF4X2VudHJpZXM7CisJ Y2FjaGUtPm51bV9lbnRyaWVzID0gMDsKKwljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSAwOworCWNh Y2hlLT5scnVfaGVhZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJY2Fj aGUtPmxydV90YWlsID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKworCWJ1 Y2tldHMgPSBRVUVSWV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsKKwllbnRyaWVzID0gUVVFUllfQ0FD SEVfRU5UUklFUyhjYWNoZSk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNrZXRzIHRvIGVtcHR5 ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1Y2tldHNbaV0gPSBU UkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyogSW5pdGlhbGl6ZSBmcmVl IGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJp ZXNbaV0uaW5fdXNlID0gZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJp ZXMgLSAxKSA/IGkgKyAxIDogVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJ ZW50cmllc1tpXS5scnVfcHJldiA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7 CisJCWVudHJpZXNbaV0ubHJ1X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYOworCX0KKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0 YXRpb246IGluaXRpYWxpemVkIHF1ZXJ5IGNhY2hlIHdpdGggJWQgYnVja2V0cywgJWQgbWF4IGVu dHJpZXMiLAorCQkJCQludW1fYnVja2V0cywgbWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBN b3ZlIGVudHJ5IHRvIGZyb250IG9mIExSVSBsaXN0IChtb3N0IHJlY2VudGx5IHVzZWQpCisgKi8K K3N0YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9scnVfdG91Y2goUXVlcnlQYXJzZUNhY2hlICpjYWNo ZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9F TlRSSUVTKGNhY2hlKTsKKworCS8qIEFscmVhZHkgYXQgaGVhZD8gKi8KKwlpZiAoY2FjaGUtPmxy dV9oZWFkID09IGlkeCkKKwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGZyb20gY3VycmVudCBwb3Np dGlvbiAqLworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X3ByZXYgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJ T05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X3ByZXZdLmxydV9u ZXh0ID0gZW50cmllc1tpZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25leHQg IT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRyaWVz W2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWlmIChj YWNoZS0+bHJ1X3RhaWwgPT0gaWR4KQorCQljYWNoZS0+bHJ1X3RhaWwgPSBlbnRyaWVzW2lkeF0u bHJ1X3ByZXY7CisKKwkvKiBJbnNlcnQgYXQgaGVhZCAqLworCWVudHJpZXNbaWR4XS5scnVfcHJl diA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxy dV9uZXh0ID0gY2FjaGUtPmxydV9oZWFkOworCWlmIChjYWNoZS0+bHJ1X2hlYWQgIT0gVFJBQ0tf VEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tjYWNoZS0+bHJ1X2hlYWRd LmxydV9wcmV2ID0gaWR4OworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKwlpZiAoY2FjaGUtPmxy dV90YWlsID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5s cnVfdGFpbCA9IGlkeDsKK30KKworLyoKKyAqIEFkZCBlbnRyeSB0byBMUlUgbGlzdCAoYXQgaGVh ZCkKKyAqLworc3RhdGljIHZvaWQKK3F1ZXJ5X2NhY2hlX2xydV9hZGQoUXVlcnlQYXJzZUNhY2hl ICpjYWNoZSwgaW50IGlkeCkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9D QUNIRV9FTlRSSUVTKGNhY2hlKTsKKworCWVudHJpZXNbaWR4XS5scnVfcHJldiA9IFRSQUNLX1RB QkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisJZW50cmllc1tpZHhdLmxydV9uZXh0ID0gY2Fj aGUtPmxydV9oZWFkOworCisJaWYgKGNhY2hlLT5scnVfaGVhZCAhPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYKQorCQllbnRyaWVzW2NhY2hlLT5scnVfaGVhZF0ubHJ1X3ByZXYg PSBpZHg7CisKKwljYWNoZS0+bHJ1X2hlYWQgPSBpZHg7CisKKwlpZiAoY2FjaGUtPmxydV90YWls ID09IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWNhY2hlLT5scnVfdGFp bCA9IGlkeDsKK30KKworLyoKKyAqIFJlbW92ZSBlbnRyeSBmcm9tIExSVSBsaXN0CisgKi8KK3N0 YXRpYyB2b2lkCitxdWVyeV9jYWNoZV9scnVfcmVtb3ZlKFF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGUs IGludCBpZHgpCit7CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUVVFUllfQ0FDSEVfRU5U UklFUyhjYWNoZSk7CisKKwlpZiAoZW50cmllc1tpZHhdLmxydV9wcmV2ICE9IFRSQUNLX1RBQkxF X01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJCWVudHJpZXNbZW50cmllc1tpZHhdLmxydV9wcmV2 XS5scnVfbmV4dCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKwllbHNlCisJCWNhY2hlLT5scnVf aGVhZCA9IGVudHJpZXNbaWR4XS5scnVfbmV4dDsKKworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25l eHQgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWCkKKwkJZW50cmllc1tlbnRy aWVzW2lkeF0ubHJ1X25leHRdLmxydV9wcmV2ID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCWVs c2UKKwkJY2FjaGUtPmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJZW50cmll c1tpZHhdLmxydV9wcmV2ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwll bnRyaWVzW2lkeF0ubHJ1X25leHQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworfQorCisvKgorICogQWxsb2NhdGUgZW50cnkgZnJvbSBmcmVlIGxpc3QsIGV2aWN0aW5nIExS VSBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGludAorcXVlcnlfY2FjaGVfYWxsb2NfZW50cnko UXVlcnlQYXJzZUNhY2hlICpjYWNoZSkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBR VUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNIRV9C VUNLRVRTKGNhY2hlKTsKKwlpbnQgaWR4OworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAh PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWR4ID0gY2FjaGUt PmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0u bmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJCWVudHJpZXNbaWR4XS5uZXh0 ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKKwkJY2FjaGUtPm51bV9lbnRy aWVzKys7CisJCXJldHVybiBpZHg7CisJfQorCisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZpY3Qg TFJVICovCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZB TElEX0lOREVYKQorCQlyZXR1cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsK KworCWlkeCA9IGNhY2hlLT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2ggYnVja2V0 ICovCisJaW50IGJ1Y2tldCA9IGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoICUgY2FjaGUtPm51bV9i dWNrZXRzOworCWludCAqcHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCWludCBjdXJyID0g YnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGN1cnIgIT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05f SU5WQUxJRF9JTkRFWCkKKwl7CisJCWlmIChjdXJyID09IGlkeCkKKwkJeworCQkJKnByZXZfcHRy ID0gZW50cmllc1tjdXJyXS5uZXh0OworCQkJYnJlYWs7CisJCX0KKwkJcHJldl9wdHIgPSAmZW50 cmllc1tjdXJyXS5uZXh0OworCQljdXJyID0gZW50cmllc1tjdXJyXS5uZXh0OworCX0KKworCS8q IFJlbW92ZSBmcm9tIExSVSBsaXN0ICovCisJcXVlcnlfY2FjaGVfbHJ1X3JlbW92ZShjYWNoZSwg aWR4KTsKKworCS8qIFJlaW5pdGlhbGl6ZSBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5pbl91c2Ug PSB0cnVlOworCWVudHJpZXNbaWR4XS5uZXh0ID0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJ RF9JTkRFWDsKKworCXJldHVybiBpZHg7Cit9CisKKy8qCisgKiBMb29rIHVwIGEgcXVlcnkgaW4g dGhlIGNhY2hlCisgKi8KK3N0YXRpYyBpbnQKK3F1ZXJ5X2NhY2hlX2xvb2t1cChRdWVyeVBhcnNl Q2FjaGUgKmNhY2hlLCB1aW50NjQgaGFzaCkKK3sKKwlpbnQgKmJ1Y2tldHMgPSBRVUVSWV9DQUNI RV9CVUNLRVRTKGNhY2hlKTsKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNI RV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQgYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0 czsKKwlpbnQgaWR4ID0gYnVja2V0c1tidWNrZXRdOworCisJd2hpbGUgKGlkeCAhPSBUUkFDS19U QUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJaWYgKGVudHJpZXNbaWR4XS5xdWVy eV9oYXNoID09IGhhc2gpCisJCQlyZXR1cm4gaWR4OworCQlpZHggPSBlbnRyaWVzW2lkeF0ubmV4 dDsKKwl9CisKKwlyZXR1cm4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5WQUxJRF9JTkRFWDsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUXVlcnkgbm9ybWFsaXphdGlvbgorICogLS0tLS0t LS0tLS0tLS0tLQorICovCisKKy8qCisgKiBTaW1wbGUgcXVlcnkgbm9ybWFsaXphdGlvbjoKKyAq IC0gU3RyaXAgY29tbWVudHMgKC0tIHN0eWxlIGFuZCBDLXN0eWxlIGJsb2NrIGNvbW1lbnRzKQor ICogLSBDb2xsYXBzZSB3aGl0ZXNwYWNlCisgKiAtIENvbnZlcnQgdG8gbG93ZXJjYXNlIChleGNl cHQgaW5zaWRlIHN0cmluZ3MpCisgKiAtIFJlcGxhY2UgbGl0ZXJhbCB2YWx1ZXMgd2l0aCBwbGFj ZWhvbGRlcnMKKyAqCisgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIC0gcGdwb29sMiBh bHJlYWR5IGRvZXMgdGhpcyBlbHNld2hlcmUsCisgKiBidXQgd2UgbmVlZCBhIHN0YW5kYWxvbmUg dmVyc2lvbiBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUuCisgKi8KK3N0YXRp YyBzaXplX3QKK25vcm1hbGl6ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeSwgY2hhciAqb3V0cHV0 LCBzaXplX3Qgb3V0cHV0X3NpemUpCit7CisJY29uc3QgY2hhciAqc3JjID0gcXVlcnk7CisJY2hh ciAqZHN0ID0gb3V0cHV0OworCWNoYXIgKmRzdF9lbmQgPSBvdXRwdXQgKyBvdXRwdXRfc2l6ZSAt IDE7CisJYm9vbCBpbl9zdHJpbmcgPSBmYWxzZTsKKwljaGFyIHN0cmluZ19jaGFyID0gMDsKKwli b29sIGxhc3Rfd2FzX3NwYWNlID0gdHJ1ZTsgIC8qIFN0YXJ0IHRydWUgdG8gc2tpcCBsZWFkaW5n IHNwYWNlICovCisKKwl3aGlsZSAoKnNyYyAmJiBkc3QgPCBkc3RfZW5kKQorCXsKKwkJLyogSGFu ZGxlIHN0cmluZyBsaXRlcmFscyAqLworCQlpZiAoaW5fc3RyaW5nKQorCQl7CisJCQlpZiAoKnNy YyA9PSBzdHJpbmdfY2hhcikKKwkJCXsKKwkJCQlpZiAoKihzcmMgKyAxKSA9PSBzdHJpbmdfY2hh cikKKwkJCQl7CisJCQkJCS8qIEVzY2FwZWQgcXVvdGUgKi8KKwkJCQkJc3JjICs9IDI7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKwkJCQlpbl9zdHJpbmcgPSBmYWxzZTsKKwkJCQkqZHN0KysgPSAn JCc7ICAvKiBSZXBsYWNlIHN0cmluZyBjb250ZW50IHdpdGggcGxhY2Vob2xkZXIgKi8KKwkJCX0K KwkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDaGVjayBmb3Igc3RyaW5nIHN0 YXJ0ICovCisJCWlmICgqc3JjID09ICdcJycgfHwgKnNyYyA9PSAnIicpCisJCXsKKwkJCWluX3N0 cmluZyA9IHRydWU7CisJCQlzdHJpbmdfY2hhciA9ICpzcmM7CisJCQlzcmMrKzsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogSGFuZGxlIHNpbmdsZS1saW5lIGNvbW1lbnRzICovCisJCWlmICgq c3JjID09ICctJyAmJiAqKHNyYyArIDEpID09ICctJykKKwkJeworCQkJd2hpbGUgKCpzcmMgJiYg KnNyYyAhPSAnXG4nKQorCQkJCXNyYysrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5k bGUgbXVsdGktbGluZSBjb21tZW50cyAqLworCQlpZiAoKnNyYyA9PSAnLycgJiYgKihzcmMgKyAx KSA9PSAnKicpCisJCXsKKwkJCXNyYyArPSAyOworCQkJd2hpbGUgKCpzcmMgJiYgISgqc3JjID09 ICcqJyAmJiAqKHNyYyArIDEpID09ICcvJykpCisJCQkJc3JjKys7CisJCQlpZiAoKnNyYykKKwkJ CQlzcmMgKz0gMjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIHdoaXRlc3BhY2Ug Ki8KKwkJaWYgKCpzcmMgPT0gJyAnIHx8ICpzcmMgPT0gJ1x0JyB8fCAqc3JjID09ICdcbicgfHwg KnNyYyA9PSAnXHInKQorCQl7CisJCQlpZiAoIWxhc3Rfd2FzX3NwYWNlKQorCQkJeworCQkJCSpk c3QrKyA9ICcgJzsKKwkJCQlsYXN0X3dhc19zcGFjZSA9IHRydWU7CisJCQl9CisJCQlzcmMrKzsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFuZGxlIG51bWJlcnMgLSByZXBsYWNlIHdpdGgg cGxhY2Vob2xkZXIgKi8KKwkJaWYgKCgqc3JjID49ICcwJyAmJiAqc3JjIDw9ICc5JykgfHwKKwkJ CSgqc3JjID09ICcuJyAmJiAqKHNyYyArIDEpID49ICcwJyAmJiAqKHNyYyArIDEpIDw9ICc5Jykp CisJCXsKKwkJCXdoaWxlICgqc3JjICYmICgoKnNyYyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8 ICpzcmMgPT0gJy4nKSkKKwkJCQlzcmMrKzsKKwkJCWlmICghbGFzdF93YXNfc3BhY2UgJiYgZHN0 ID4gb3V0cHV0ICYmICooZHN0IC0gMSkgIT0gJyQnKQorCQkJCSpkc3QrKyA9ICckJzsKKwkJCWxh c3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlZ3VsYXIg Y2hhcmFjdGVyIC0gY29udmVydCB0byBsb3dlcmNhc2UgKi8KKwkJaWYgKCpzcmMgPj0gJ0EnICYm ICpzcmMgPD0gJ1onKQorCQkJKmRzdCsrID0gKnNyYyArIDMyOworCQllbHNlCisJCQkqZHN0Kysg PSAqc3JjOworCisJCWxhc3Rfd2FzX3NwYWNlID0gZmFsc2U7CisJCXNyYysrOworCX0KKworCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworCWlmIChkc3QgPiBvdXRwdXQgJiYgKihkc3QgLSAx KSA9PSAnICcpCisJCWRzdC0tOworCisJKmRzdCA9ICdcMCc7CisJcmV0dXJuIGRzdCAtIG91dHB1 dDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUHVibGljIEFQSSBpbXBsZW1lbnRhdGlv bgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK1NpemUKK3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW1fc2l6ZSh2b2lkKQoreworCVNpemUgc2l6ZSA9IDA7CisJaW50IHRhYmxlX2J1 Y2tldHMgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsK KwlpbnQgdGFibGVfc2l6ZSA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90YWJs ZV9zaXplOworCWludCBxdWVyeV9idWNrZXRzID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211 dGF0aW9uX3F1ZXJ5X2J1Y2tldHM7CisJaW50IHF1ZXJ5X2NhY2hlX3NpemUgPSBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsKKworCS8qIE1h aW4gc3RydWN0dXJlICovCisJc2l6ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uU2htZW0p OworCisJLyogVGFibGUgbXV0YXRpb24gaGFzaCB0YWJsZSAqLworCXNpemUgKz0gc2l6ZW9mKFRy YWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSk7CisJc2l6ZSArPSB0YWJsZV9idWNrZXRzICogc2l6 ZW9mKGludCk7ICAvKiBidWNrZXRzIGFycmF5ICovCisJc2l6ZSArPSB0YWJsZV9zaXplICogc2l6 ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5KTsgIC8qIGVudHJpZXMgYXJyYXkgKi8KKworCS8q IFF1ZXJ5IHBhcnNlIGNhY2hlICovCisJc2l6ZSArPSBzaXplb2YoUXVlcnlQYXJzZUNhY2hlKTsK KwlzaXplICs9IHF1ZXJ5X2J1Y2tldHMgKiBzaXplb2YoaW50KTsgIC8qIGJ1Y2tldHMgYXJyYXkg Ki8KKwlzaXplICs9IHF1ZXJ5X2NhY2hlX3NpemUgKiBzaXplb2YoUXVlcnlQYXJzZUVudHJ5KTsg IC8qIGVudHJpZXMgYXJyYXkgKi8KKworCXJldHVybiBzaXplOworfQorCit2b2lkCitwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRFCisJ U2l6ZSBzaG1lbV9zaXplOworCWNoYXIgKnNobWVtX3B0cjsKKworCWlmIChwb29sX2NvbmZpZy0+ ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JB TCkKKwl7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0 aW9uOiBmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCXNobWVtX3NpemUg PSBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKTsKKworCS8qCisJICogQWxs b2NhdGUgZnJvbSB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisJICogTWVtb3J5IGlz IGFscmVhZHkgemVyb2VkIGJ5IGluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQo KS4KKwkgKi8KKwlzaG1lbV9wdHIgPSBwb29sX3NoYXJlZF9tZW1vcnlfc2VnbWVudF9nZXRfY2h1 bmsoc2htZW1fc2l6ZSk7CisJaWYgKHNobWVtX3B0ciA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogZmFpbGVkIHRvIGFsbG9j YXRlICV6dSBieXRlcyBvZiBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJCXNobWVtX3NpemUpKSk7CisJ CXJldHVybjsKKwl9CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB3aXRoaW4g c2hhcmVkIG1lbW9yeSAqLworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID0gKFRyYWNrVGFi bGVNdXRhdGlvblNobWVtICopc2htZW1fcHRyOworCXNobWVtX3B0ciArPSBzaXplb2YoVHJhY2tU YWJsZU11dGF0aW9uU2htZW0pOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxl X21hcCA9IChUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKilzaG1lbV9wdHI7CisJc2htZW1f cHRyICs9IHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpOworCXNobWVtX3B0ciAr PSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyAqIHNpemVv ZihpbnQpOworCXNobWVtX3B0ciArPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25f dGFibGVfc2l6ZSAqIHNpemVvZihUcmFja1RhYmxlTXV0YXRpb25FbnRyeSk7CisKKwl0cmFja190 YWJsZV9tdXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGUgPSAoUXVlcnlQYXJzZUNhY2hlICopc2ht ZW1fcHRyOworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJdGFibGVfbWFwX2luaXQo dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcCwKKwkJCQkgICBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cywKKwkJCQkgICBwb29sX2NvbmZp Zy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSk7CisKKwlxdWVyeV9jYWNoZV9pbml0 KHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSwKKwkJCQkJIHBvb2xfY29u ZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzLAorCQkJCQkgcG9vbF9jb25m aWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3NpemUpOworCisJLyog SW5pdGlhbGl6ZSBnbG9iYWwgc3RhdGUgKi8KKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+ c3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZS5jdXJyZW50X3R0bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VT OworCWdldF9jdXJyZW50X3RpbWUoJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS50 dGxfbGFzdF91cGRhdGVkKTsKKwlnZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlv bl9zaG1lbS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUpOworCXRyYWNrX3RhYmxlX211dGF0aW9u X3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgPSAwOworCXRyYWNr X3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91 c2VjID0gMDsKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfcXVlcmll c19jaGVja2VkID0gMDsKKwl0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNf Zm9yY2VkX3ByaW1hcnkgPSAwOworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5z dGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0 cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQgd2l0aCAlenUgYnl0ZXMgc2hhcmVkIG1l bW9yeSIsCisJCQkJCXNobWVtX3NpemUpKSk7CisjZW5kaWYKK30KKwordm9pZAorcG9vbF90cmFj a190YWJsZV9tdXRhdGlvbl9jaGlsZF9pbml0KHZvaWQpCit7CisJaWYgKHBvb2xfY29uZmlnLT5k aXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFM IHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWdl dF9jdXJyZW50X3RpbWUoJnByb2Nlc3Nfc3RhcnRfdGltZSk7CisJY29sZF9zdGFydF9pbml0aWFs aXplZCA9IHRydWU7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxl X211dGF0aW9uOiBjaGlsZCBpbml0aWFsaXplZCwgY29sZCBzdGFydCBwZXJpb2QgJWQgbXMiLAor CQkJCQlwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlv bikpKTsKK30KKworYm9vbAorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0 KHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludDY0IGVsYXBzZWRfbXM7CisKKwlp ZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RN TF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkK KwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl9jb2xkX3N0YXJ0X2R1cmF0aW9uIDw9IDApCisJCXJldHVybiBmYWxzZTsKKworCWdldF9jdXJy ZW50X3RpbWUoJm5vdyk7CisKKwkvKiBDaGVjayBmb3Igd2F0Y2hkb2ctdHJpZ2dlcmVkIGdsb2Jh bCBjb2xkIHN0YXJ0IGZpcnN0ICovCisJaWYgKHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgIT0gMCAmJgorCQllbGFwc2VkX3Vz KCZub3csICZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUuZ2xvYmFsX2NvbGRfc3Rh cnRfdW50aWwpID4gMCkKKwl7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIENoZWNrIHBlci1w cm9jZXNzIGNvbGQgc3RhcnQgKi8KKwlpZiAoIWNvbGRfc3RhcnRfaW5pdGlhbGl6ZWQpCisJCXJl dHVybiBmYWxzZTsKKworCWVsYXBzZWRfbXMgPSBlbGFwc2VkX3VzKCZwcm9jZXNzX3N0YXJ0X3Rp bWUsICZub3cpIC8gMTAwMDsKKworCWlmIChlbGFwc2VkX21zIDwgcG9vbF9jb25maWctPnRyYWNr X3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24pCisJeworCQllcmVwb3J0KERFQlVH MiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogaW4gY29sZCBzdGFydCAoJWxk LyVkIG1zKSIsCisJCQkJCQkobG9uZyllbGFwc2VkX21zLCBwb29sX2NvbmZpZy0+dHJhY2tfdGFi bGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbikpKTsKKwkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3Ry aWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJ aW50IGR1cmF0aW9uX21zOworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybjsKKworCWR1cmF0aW9uX21zID0gcG9vbF9j b25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb247CisJaWYgKGR1 cmF0aW9uX21zIDw9IDApCisJCXJldHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJ dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGls ID0gbm93OworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9z dGFydF91bnRpbC50dl9zZWMgKz0gZHVyYXRpb25fbXMgLyAxMDAwOworCXRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjICs9IChk dXJhdGlvbl9tcyAlIDEwMDApICogMTAwMDsKKwlpZiAodHJhY2tfdGFibGVfbXV0YXRpb25fc2ht ZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgPj0gMTAwMDAwMCkKKwl7 CisJCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9iYWxfY29sZF9zdGFydF91 bnRpbC50dl9zZWMgKz0KKwkJCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5nbG9i YWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjIC8gMTAwMDAwMDsKKwkJdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0tPnN0YXRlLmdsb2JhbF9jb2xkX3N0YXJ0X3VudGlsLnR2X3VzZWMgJT0KKwkJ CTEwMDAwMDA7CisJfQorCisJZXJlcG9ydChMT0csCisJCQkoZXJybXNnKCJ0cmFja190YWJsZV9t dXRhdGlvbjogZW50ZXJpbmcgZ2xvYmFsIGNvbGQgc3RhcnQgZm9yICVkIG1zIiwKKwkJCQkJZHVy YXRpb25fbXMpKSk7Cit9CisKK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVf aXNfc3RhbGUoaW50IHRhYmxlX29pZCwgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlv bkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwl1aW50NjQgdHRsX3VzOwor CXVpbnQzMiBoYXNoOworCWludCBpZHg7CisJYm9vbCBpc19zdGFsZSA9IGZhbHNlOworCisJaWYg KHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxf QURBUFRJVkVfR0xPQkFMIHx8IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKworCWlmICh0YWJsZV9vaWQgPD0gMCB8fCBkYm9pZCA8PSAwKQorCXsK KwkJaXNfc3RhbGUgPSB0cnVlOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwltYXAgPSB0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWhhc2ggPSBmbnYxYV9oYXNo X3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKworCXRhYmxlX21hcF9sb2NrKCk7CisKKwlp ZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfb2lkLCBkYm9pZCwgaGFzaCk7CisJaWYg KGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsKKwkJVHJhY2tU YWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCQln ZXRfY3VycmVudF90aW1lKCZub3cpOworCQl0dGxfdXMgPSB0cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbS0+c3RhdGUuY3VycmVudF90dGxfdXM7CisKKwkJaW50NjQgZWxhcHNlZCA9IGVsYXBzZWRf dXMoJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRlX3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChl bGFwc2VkIDwgKGludDY0KXR0bF91cyk7CisKKwkJZXJlcG9ydChERUJVRzIsCisJCQkJKGVycm1z ZygidHJhY2tfdGFibGVfbXV0YXRpb246IHRhYmxlIG9pZCAlZCAoZGJvaWQgJWQpIGVsYXBzZWQ9 JWxkIHVzLCB0dGw9JWx1IHVzLCBzdGFsZT0lZCIsCisJCQkJCQl0YWJsZV9vaWQsIGRib2lkLCAo bG9uZyllbGFwc2VkLCAodW5zaWduZWQgbG9uZyl0dGxfdXMsIGlzX3N0YWxlKSkpOworCX0KKwor CXRhYmxlX21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0 aWNzIC0gc2tpcCBpZiBzaG1lbSBub3QgYXZhaWxhYmxlICovCisJaWYgKHRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtICE9IE5VTEwpCisJeworCQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0YXRzX3F1ZXJpZXNfY2hlY2tlZCwgMSk7CisJ CWlmIChpc19zdGFsZSkKKwkJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZ0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+c3RhdGUuc3RhdHNfZm9yY2VkX3ByaW1hcnksIDEpOworCQllbHNlCisJCQlf X3N5bmNfZmV0Y2hfYW5kX2FkZCgmdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLnN0 YXRzX2FsbG93ZWRfcmVwbGljYSwgMSk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxlOworfQorCit2 b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oY29uc3Qg aW50ICp0YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgaTsK KworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgIT0gRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCB8fCB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29pZHMgPT0g TlVMTCB8fCBkYm9pZCA8PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRh dGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwl0YWJs ZV9tYXBfbG9jaygpOworCisJLyogUGVyaW9kaWNhbGx5IGNsZWFuIHVwIGV4cGlyZWQgZW50cmll cyAqLworCWlmIChtYXAtPm51bV9lbnRyaWVzID4gbWFwLT5tYXhfZW50cmllcyAqIDMgLyA0KQor CXsKKwkJLyogTGltaXQgY2xlYW51cCBmcmVxdWVuY3kgdG8gYXZvaWQgTyhOKSBzY2FuIG9uIGV2 ZXJ5IHdyaXRlICovCisJCS8qIDEwMG1zIGludGVydmFsICovCisJCWlmIChlbGFwc2VkX3VzKCZ0 cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+c3RhdGUubGFzdF9jbGVhbnVwX3RpbWUsICZub3cp ID4gMTAwMDAwKQorCQl7CisJCQl0YWJsZV9tYXBfY2xlYW51cF9leHBpcmVkKG1hcCwgdHJhY2tf dGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3VzKTsKKwkJCXRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZS5sYXN0X2NsZWFudXBfdGltZSA9IG5vdzsKKwkJfQor CX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fdGFibGVzOyBpKyspCisJeworCQl1aW50MzIgaGFz aDsKKwkJaW50IHRhYmxlX29pZCA9IHRhYmxlX29pZHNbaV07CisKKwkJaWYgKHRhYmxlX29pZCA+ IDApCisJCXsKKwkJCWhhc2ggPSBmbnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lk KTsKKwkJCXRhYmxlX21hcF9pbnNlcnQobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoLCAmbm93 KTsKKwkJfQorCX0KKworCXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIENvbnZlbmll bmNlIGZ1bmN0aW9uIHRvIG1hcmsgYSBzaW5nbGUgdGFibGUgYXMgd3JpdHRlbgorICovCit2b2lk Citwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVfd3JpdHRlbihpbnQgdGFibGVf b2lkLCBpbnQgZGJvaWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsK KwkJY29uc3QgaW50IHRhYmxlc1sxXSA9IHsgdGFibGVfb2lkIH07CisJCXBvb2xfdHJhY2tfdGFi bGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbih0YWJsZXMsIDEsIGRib2lkKTsKKwl9Cit9 CisKK3ZvaWQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bCh1aW50NjQgZGVs YXlfdXMpCit7CisJdWludDY0IG5ld190dGw7CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJh Y2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2FsY3Vs YXRlIG5ldyBUVEw6IGRlbGF5ICogZmFjdG9yLCB3aXRoIG1pbmltdW0gb2YgZGVmYXVsdCBUVEwg Ki8KKwluZXdfdHRsID0gKHVpbnQ2NCkoZGVsYXlfdXMgKiBwb29sX2NvbmZpZy0+dHJhY2tfdGFi bGVfbXV0YXRpb25fdHRsX2ZhY3Rvcik7CisJaWYgKG5ld190dGwgPCBUUkFDS19UQUJMRV9NVVRB VElPTl9ERUZBVUxUX1RUTF9VUykKKwkJbmV3X3R0bCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RF RkFVTFRfVFRMX1VTOworCisJLyogTWF4aW11bSBUVEwgb2YgMSBob3VyICovCisJaWYgKG5ld190 dGwgPiAzNjAwVUxMICogMTAwMDAwMFVMTCkKKwkJbmV3X3R0bCA9IDM2MDBVTEwgKiAxMDAwMDAw VUxMOworCisJdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnN0YXRlLmN1cnJlbnRfdHRsX3Vz ID0gbmV3X3R0bDsKKwlnZXRfY3VycmVudF90aW1lKCZ0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+c3RhdGUudHRsX2xhc3RfdXBkYXRlZCk7CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShlcnJt c2coInRyYWNrX3RhYmxlX211dGF0aW9uOiB1cGRhdGVkIFRUTCB0byAlbHUgdXMgKGRlbGF5PSVs dSB1cywgZmFjdG9yPSUuMWYpIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3R0bCwgKHVuc2ln bmVkIGxvbmcpZGVsYXlfdXMsCisJCQkJCXBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlv bl90dGxfZmFjdG9yKSkpOworfQorCitib29sCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dl dF9jYWNoZWRfcGFyc2UodWludDY0IGhhc2gsIGJvb2wgKmlzX3dyaXRlLAorCQkJCQkJCQkgY2hh ciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOXSwKKwkJ CQkJCQkJIGludCAqbnVtX3RhYmxlcykKK3sKKwlRdWVyeVBhcnNlQ2FjaGUgKmNhY2hlOworCWlu dCBpZHg7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxl X2xvYWRfYmFsYW5jZV9vbl93cml0ZSAhPSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMIHx8IHRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCWNh Y2hlID0gdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnF1ZXJ5X2NhY2hlOworCisJcXVlcnlf Y2FjaGVfbG9jaygpOworCisJaWR4ID0gcXVlcnlfY2FjaGVfbG9va3VwKGNhY2hlLCBoYXNoKTsK KwlpZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlR dWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBRVUVSWV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwkJ aW50IGk7CisKKwkJKmlzX3dyaXRlID0gZW50cmllc1tpZHhdLmlzX3dyaXRlOworCQkqbnVtX3Rh YmxlcyA9IGVudHJpZXNbaWR4XS5udW1fdGFibGVzOworCisJCWZvciAoaSA9IDA7IGkgPCBlbnRy aWVzW2lkeF0ubnVtX3RhYmxlcyAmJiBpIDwgVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RBQkxF U19QRVJfUVVFUlk7IGkrKykKKwkJeworCQkJc3RybGNweSh0YWJsZV9uYW1lc1tpXSwgZW50cmll c1tpZHhdLnRhYmxlX25hbWVzW2ldLCBUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xF Tik7CisJCX0KKworCQkvKiBNb3ZlIHRvIGZyb250IG9mIExSVSAqLworCQlxdWVyeV9jYWNoZV9s cnVfdG91Y2goY2FjaGUsIGlkeCk7CisJCWZvdW5kID0gdHJ1ZTsKKwl9CisKKwlxdWVyeV9jYWNo ZV91bmxvY2soKTsKKworCXJldHVybiBmb3VuZDsKK30KKwordm9pZAorcG9vbF90cmFja190YWJs ZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSh1aW50NjQgaGFzaCwgYm9vbCBpc193cml0ZSwKKwkJCQkJ CQljb25zdCBjaGFyIHRhYmxlX25hbWVzW11bVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfTkFN RV9MRU5dLAorCQkJCQkJCWludCBudW1fdGFibGVzKQoreworCVF1ZXJ5UGFyc2VDYWNoZSAqY2Fj aGU7CisJaW50ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllczsKKwlpbnQgaWR4 OworCWludCBidWNrZXQ7CisKKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNl X29uX3dyaXRlICE9IERMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgfHwgdHJhY2tfdGFibGVfbXV0 YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY2FjaGUgPSB0cmFja190YWJsZV9t dXRhdGlvbl9zaG1lbS0+cXVlcnlfY2FjaGU7CisKKwlxdWVyeV9jYWNoZV9sb2NrKCk7CisKKwkv KiBDaGVjayBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHF1ZXJ5X2NhY2hlX2xvb2t1cChj YWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lO REVYKQorCXsKKwkJcXVlcnlfY2FjaGVfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBB bGxvY2F0ZSBuZXcgZW50cnkgKG1heSBldmljdCBMUlUpICovCisJaWR4ID0gcXVlcnlfY2FjaGVf YWxsb2NfZW50cnkoY2FjaGUpOworCWlmIChpZHggPT0gVFJBQ0tfVEFCTEVfTVVUQVRJT05fSU5W QUxJRF9JTkRFWCkKKwl7CisJCXF1ZXJ5X2NhY2hlX3VubG9jaygpOworCQllcmVwb3J0KFdBUk5J TkcsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246IGZhaWxlZCB0byBhbGxvY2F0 ZSBxdWVyeSBjYWNoZSBlbnRyeSIpKSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyaWVzID0gUVVF UllfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJYnVja2V0cyA9IFFVRVJZX0NBQ0hFX0JVQ0tFVFMo Y2FjaGUpOworCisJLyogRmlsbCBpbiBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5xdWVyeV9oYXNo ID0gaGFzaDsKKwllbnRyaWVzW2lkeF0uaXNfd3JpdGUgPSBpc193cml0ZTsKKwllbnRyaWVzW2lk eF0ubnVtX3RhYmxlcyA9IChudW1fdGFibGVzID4gVFJBQ0tfVEFCTEVfTVVUQVRJT05fTUFYX1RB QkxFU19QRVJfUVVFUlkpID8KKwkJCQkJCQkgIFRSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJM RVNfUEVSX1FVRVJZIDogbnVtX3RhYmxlczsKKworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7 IGkgPCBlbnRyaWVzW2lkeF0ubnVtX3RhYmxlczsgaSsrKQorCQl7CisJCQlzdHJsY3B5KGVudHJp ZXNbaWR4XS50YWJsZV9uYW1lc1tpXSwgdGFibGVfbmFtZXNbaV0sIFRSQUNLX1RBQkxFX01VVEFU SU9OX1RBQkxFX05BTUVfTEVOKTsKKwkJfQorCX0KKworCS8qIEluc2VydCBpbnRvIGhhc2ggYnVj a2V0ICovCisJYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwllbnRyaWVzW2lk eF0ubmV4dCA9IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwkv KiBBZGQgdG8gTFJVIGxpc3QgKi8KKwlxdWVyeV9jYWNoZV9scnVfYWRkKGNhY2hlLCBpZHgpOwor CisJcXVlcnlfY2FjaGVfdW5sb2NrKCk7Cit9CisKK3VpbnQ2NAorcG9vbF90cmFja190YWJsZV9t dXRhdGlvbl9ub3JtYWxpemVfYW5kX2hhc2goY29uc3QgY2hhciAqcXVlcnkpCit7CisJY2hhciBu b3JtYWxpemVkWzgxOTJdOworCXNpemVfdCBsZW47CisKKwlpZiAocXVlcnkgPT0gTlVMTCB8fCBx dWVyeVswXSA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG5vcm1hbGl6ZV9xdWVyeShx dWVyeSwgbm9ybWFsaXplZCwgc2l6ZW9mKG5vcm1hbGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJ CXJldHVybiAwOworCisJcmV0dXJuIGZudjFhX2hhc2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30K LS0gCjIuNTIuMAoK --0000000000006c9043064a79be1e--