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 1w6MWo-004Dvb-0p for pgsql-bugs@arkaria.postgresql.org; Sat, 28 Mar 2026 05:48:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6MWm-00Da6q-1E for pgsql-bugs@arkaria.postgresql.org; Sat, 28 Mar 2026 05:48:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w6MWm-00Da6h-0B for pgsql-bugs@lists.postgresql.org; Sat, 28 Mar 2026 05:48:08 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6MWj-00000001bnm-2dGQ for pgsql-bugs@lists.postgresql.org; Sat, 28 Mar 2026 05:48:08 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-66a33f61d80so4630200a12.0 for ; Fri, 27 Mar 2026 22:48:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774676885; cv=none; d=google.com; s=arc-20240605; b=XTMDGGCX5Mrt+pBgh+mR5NAugLPayPjYLVfPJYf0EJWoHEFblzJpxsjHprDwUVRLT+ XTOcHvB8tXe6HfArmc55P4jI1i9z1M/bfr2JGkdbTQYkmKbRi8K8hYOiUas1P+Tnemq0 WPToef4eMuElJG3DwMvX9nTrG1/QlR3OeMpnA7WDVbPckT8WWLfrkd3K5SQSx5Hl6Atb cMwDAfDJrkPdbgNVxIZtUsPz7+cO2gbxpUSIoAYXvVWm6rhI4BtPXm8hwI1kVa7/Cgo9 mzx5bcjJs/8F91wZwjpjrN2cSkK9mxMiLqsXEYnGFLzg7E3QVPcRbNFYD7+GltMnaqTG j7wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=TcQKU2cYNOLnEuqCnLXKb4sEaKdo0mEnXlPYMU2kS/8=; fh=JIva0U0s6nSrHGDHw4BkNZV660L+el7DnLKMuZE+tO4=; b=LnbvFQiwlaGTSOGm5GL54HudC+45qsTkZRO5zI91m1q46Ha7C3WpTXpqMjo0DADKD9 wn+gRv6WEXCtytL1In0ZX4yo6wj5QnNTm4+r6kn3e8dw/21PDhDuRvcpasBcAUGaVXgf 6HnkvZPhz3yFATbGWgEoASytIk05wdgysUhkLIwADHWCe89lPoUxG8d2V9y3adYMKmQh Pj3EhVfzd2hkq61EqXf2ujhNov8z6wI2dD3ebmhqQaxnanOMIA58OeN7dT0A+10EQY/N 5+zixAQiA2DDj4vx05F5Q7F86QV1T/HV9yODuKkA0tLwyOOQaCD4bDfqeRhTLy2ZEB6t GruQ==; 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=gmail.com; s=20251104; t=1774676885; x=1775281685; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=TcQKU2cYNOLnEuqCnLXKb4sEaKdo0mEnXlPYMU2kS/8=; b=egI/VI28wWHCYWL08juzIdzvzfhXgzNDb1hQJWS4rV6/2bAUn69B22Bkt45N2ekTgh LJiIYbUN3HR/wVKmTh41lN0YCVelsAy2dF89DtUzEpL0y+NJyAro+RNBUX/v5HgPGoKI lU0ct/88gYNIVs0w4MigBwA8l1dWsinjlHKJhVwhTALdjyG05FI+6FOrQ7HuEp2FnE33 UJw3pp1Fp74OjtKKXbN5adqfEh8i0W1zHKH7FEqqeLgUIqUTna7PcLtKNDkBM8L00Bl6 uRcrEUx5eYtF/CQ9hK5FrgfPTNThFPrWIyAelltB6YfHzq2PqUBftu2zql5jBqG5DAwF QLyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774676885; x=1775281685; h=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=TcQKU2cYNOLnEuqCnLXKb4sEaKdo0mEnXlPYMU2kS/8=; b=lkKD2kaLiJvTYuRnnPiREUxXt9UKn7R+H66f0Y447QCD6JQF9bf+LdZMEHeviCkMc8 ieGxfuDFUUQ2Q1S2+ipk3pI60ieNb4VN1vYQZi0MGpxZwkf/A4pfyx9ZdGXqfWYlsehi GCvPS6Ibh2SBIb3m+YAvSS1aaOLvPLqQEPRNNPLtUbxSBQhh4pIwDih703QML1d5Sxhi J0gjxfd4YBeaNzRJAY+uGUosot8cra17/FC40V4gJGgICLTarjp0XD30DF6CXwimpn2N csS1Tdco5HhIcM9chq3nBtLfYqJ74i6tVjaNSkWb13h5KMFjFDxAkhHNbcyBma+CxhvR /aAg== X-Forwarded-Encrypted: i=1; AJvYcCXcspSgZjPCpftCgUfQ74k2mZ1TwTVEmn4yUG49NifFEwvLPDR69RSn1p7+Br0BCZA6Dx2RkQegdwDc@lists.postgresql.org X-Gm-Message-State: AOJu0YyCfEMn1iw194Xgc+VFxhxS1fYuJUEzbIpT2ATUOMf6q9By1cny +fWBAHekSYAhtcS8gKujq3vFk2+ror/SZ9R7XIR2UCsTv6PsB6F+KP7tns6/4Y2v4UNOHVtWnPG m8HfJXtrqwqatIz2VRPCkUt+dvaWY+cO8HIFN6KY= X-Gm-Gg: ATEYQzzxHiL9KQCiv5+bgpCnD8h8cOnk6G+I+2Whflmy+PQtMrEkgkHBumx48uMRAbv H/hfJ4qQ0nZGUdhVbqmajHXTifwTiMZT9q+wing4Ee1y6oNlkol0I1OmyN1rm5IyCFPjNe6LCpe KfQ0+8iBMH0FjQztJd10K00wQ2oe/JxWLij858dRVyblKIiCoALZYC1MoYZDY8+OzHpfuQhr8dP BPLcLb4pRXuF1iY8WsZWNFUdcOdJ2ncBXSeI1OInLXht1Q8T5VGkRqrh4BDE4R5I69X/UQ3oGTC Vib0rGSNQRWbLqIJxSEntBpogwzCdzCje2+RhlCrSpF84tfw2MmRhTCVnySdaRAvfmVkQNREE46 GdF7K+bv9moaR9f5ZJPk= X-Received: by 2002:a05:6402:43c3:b0:663:4315:7271 with SMTP id 4fb4d7f45d1cf-66b28d68071mr3372441a12.23.1774676884546; Fri, 27 Mar 2026 22:48:04 -0700 (PDT) MIME-Version: 1.0 References: <19439-8f02018f9fc3a240@postgresql.org> In-Reply-To: From: Xuneng Zhou Date: Sat, 28 Mar 2026 13:47:51 +0800 X-Gm-Features: AQROBzDfKjYRlvgBJjm9TYgKERB-EITHJJWtP4xnxxNNrA9E-XsjfRWKJo7eAtA Message-ID: Subject: Re: BUG #19439: pg_stat_xact_user_tables stat not currect during the transaction To: klemen.kobau@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004b9754064e0f2967" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004b9754064e0f2967 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 27, 2026 at 10:15=E2=80=AFAM Xuneng Zhou = wrote: > > Hi klemen, > > Thanks for the report. > > On Fri, Mar 27, 2026 at 5:36=E2=80=AFAM PG Bug reporting form > wrote: > > > > The following bug has been logged on the website: > > > > Bug reference: 19439 > > Logged by: klemen kobau > > Email address: klemen.kobau@gmail.com > > PostgreSQL version: 18.0 > > Operating system: Linux (EndeavorOS) > > Description: > > > > I am running postgres:18.0 in a docker container, the configuration is = as > > follows: > > > > postgres: > > image: postgres:18.0 > > command: [ > > "postgres", > > "-N", "200", > > "-c", "max_prepared_transactions=3D100", > > "-c", "wal_level=3Dlogical", > > "-c", "max_wal_senders=3D10", > > "-c", "max_replication_slots=3D20", > > "-c", "wal_keep_size=3D10", > > "-c", "max_slot_wal_keep_size=3D1024" > > ] > > environment: > > POSTGRES_USER: postgres > > POSTGRES_PASSWORD: postgres > > POSTGRES_DB: postgres > > TZ: UTC > > PGTZ: UTC > > ports: > > - 5432:5432 > > volumes: > > - postgres_data:/var/lib/postgresql > > > > I use psql version 18.3. > > > > I run the following: > > > > psql -h localhost -p 5432 -U postgres -d postgres -c " > > -- Transaction 1: insert 1 row, check stats, commit > > BEGIN; > > CREATE TABLE IF NOT EXISTS temp.xact_test (id serial PRIMARY KEY, val t= ext); > > INSERT INTO temp.xact_test (val) VALUES ('a'); > > SELECT relname, n_tup_ins FROM pg_stat_xact_user_tables WHERE relname = =3D > > 'xact_test'; > > COMMIT; > > > > -- Transaction 2: insert 1 row, check stats > > BEGIN; > > INSERT INTO temp.xact_test (val) VALUES ('b'); > > SELECT relname, n_tup_ins FROM pg_stat_xact_user_tables WHERE relname = =3D > > 'xact_test'; > > ROLLBACK; > > > > -- Cleanup > > DROP TABLE temp.xact_test; > > " > > > > And the output is > > > > BEGIN > > CREATE TABLE > > INSERT 0 1 > > relname | n_tup_ins > > -----------+----------- > > xact_test | 1 > > (1 row) > > > > COMMIT > > BEGIN > > INSERT 0 1 > > relname | n_tup_ins > > -----------+----------- > > xact_test | 2 > > (1 row) > > > > ROLLBACK > > DROP TABLE > > I can also reproduce this behavior on HEAD. > > > This is not what I would expect from reading > > https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORIN= G-STATS-VIEWS, > > where it states > > > > > A transaction can also see its own statistics (not yet flushed out to= the > > shared memory statistics) in the views pg_stat_xact_all_tables, > > pg_stat_xact_sys_tables, pg_stat_xact_user_tables, and > > pg_stat_xact_user_functions. These numbers do not act as stated above; > > instead they update continuously throughout the transaction. > > > > based on this, I would expect that the numbers are updated each time an > > insert happens and that they are isolated per transaction. > > > > This snippet of the doc feels somewhat ambiguous. The current behavior > does not seem fully consistent with wording such as =E2=80=9Cthroughout t= he > transaction.=E2=80=9D It also seems more appropriate for these table view= s to > reflect stats within their own scopes, rather than cumulative values > spanning txn boundaries. > I=E2=80=99ve looked into this issue and 'd like to propose a patch to addre= ss it. Feedback is very welcome. --- Root cause Since the stats subsystem was rewritten (commit 5891c7a8), each backend keeps a hash of pending stats entries that persist across transaction boundaries. Entries that flush successfully are deleted from the backend-local pending list; entries not flushed remain pending with their accumulated counters. Flushing is driven by pgstat_report_stat(), called from the ReadyForQuery path, and subject to a rate limiter. The pg_stat_xact_* views read these pending entries directly via find_tabstat_entry() / find_funcstat_entry(). Both functions return the raw accumulated counters without per-transaction scoping. The bug is deterministic when multiple top-level transactions are processed within a single simple-query message, because there is no ReadyForQuery boundary between the transactions and therefore no opportunity to flush and remove the pending entry. --- Fix The patch introduces a per-entry "transaction baseline" =E2=80=94 a lazy snapshot of the counters taken the first time an entry is touched in each new top-level transaction. The accessor functions (find_tabstat_entry, find_funcstat_entry) then subtract the baseline from the current counters, yielding only the current transaction's delta. The baseline is keyed by MyProc->vxid.lxid. A static inline helper, pgstat_ensure_xact_baseline(), is called at every nontransactional counter-increment site (the 7 event-counter macros in pgstat.h and the 4 non-inline counter functions in pgstat_relation.c). After the first call per entry per transaction, the check reduces to a single integer comparison with a predictably not-taken branch. For function stats, a new PgStat_FunctionPending wrapper struct embeds PgStat_FunctionCounts at offset 0 with the baseline fields appended, so the flush callback requires only a trivial cast change. --- Testing The regression test is a TAP test under src/bin/psql/t/ that uses psql -c to send multi-statement strings as single simple-query messages. src/bin/psql/t look like the right existing harness for the primary regression because psql -c sends the whole multi-statement string as one simple-query message via simple_action_list dispatch. By contrast, ordinary pg_regress SQL files are executed by psql in file/stdin mode, which runs through MainLoop() and dispatches top-level statements one at a time via SendQuery(), creating ReadyForQuery boundaries that could mask the bug. The test covers three scenarios: table n_tup_ins and seq_scan counters, and function calls =E2=80=94 each verifying isolation across consecutive top-level transactions within a single message. -- Best, Xuneng --0000000000004b9754064e0f2967 Content-Type: application/octet-stream; name="v1-0001-Fix-pg_stat_xact_-views-leaking-stats-across-tran.patch" Content-Disposition: attachment; filename="v1-0001-Fix-pg_stat_xact_-views-leaking-stats-across-tran.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9wej4x0 RnJvbSBhODM5MWQ0MDI2NmVhZmY2YmUyNGEyZmViMzhlYjg0OWQ1NmMyYzRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog RnJpLCAyNyBNYXIgMjAyNiAyMDowNTo1NiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZpeCBw Z19zdGF0X3hhY3RfKiB2aWV3cyBsZWFraW5nIHN0YXRzIGFjcm9zcyB0cmFuc2FjdGlvbgogYm91 bmRhcmllcwoKVGhlIHBnX3N0YXRfeGFjdF91c2VyX3RhYmxlcyBhbmQgcGdfc3RhdF94YWN0X3Vz ZXJfZnVuY3Rpb25zIHZpZXdzIGFyZQpzdXBwb3NlZCB0byByZXBvcnQgYWN0aXZpdHkgZm9yIHRo ZSBjdXJyZW50IHRyYW5zYWN0aW9uIG9ubHkuICBIb3dldmVyLApiZWNhdXNlIGJhY2tlbmQtbG9j YWwgcGVuZGluZyBzdGF0cyBlbnRyaWVzIGFyZSBub3cga2VwdCBhbGl2ZSBhY3Jvc3MKdHJhbnNh Y3Rpb25zIGZvciBhc3luY2hyb25vdXMgZmx1c2hpbmcsIHRoZXNlIHZpZXdzIHJldHVybmVkIHRo ZSB0b3RhbAphY2N1bXVsYXRlZCBwZW5kaW5nIGNvdW50ZXJzIGluc3RlYWQgb2YganVzdCB0aGUg Y3VycmVudCB0cmFuc2FjdGlvbidzCmNvbnRyaWJ1dGlvbi4KCkZpeCBieSBpbnRyb2R1Y2luZyBh IHBlci1lbnRyeSAidHJhbnNhY3Rpb24gYmFzZWxpbmUiIHRoYXQgbGF6aWx5CnNuYXBzaG90cyB0 aGUgcGVuZGluZyBjb3VudGVycyB0aGUgZmlyc3QgdGltZSBlYWNoIGVudHJ5IGlzIHRvdWNoZWQg aW4gYQpuZXcgdG9wLWxldmVsIHRyYW5zYWN0aW9uLiAgVGhlIHhhY3Qtc2NvcGVkIGFjY2Vzc29y IGZ1bmN0aW9ucyB0aGVuCnN1YnRyYWN0IHRoZSBiYXNlbGluZSwgeWllbGRpbmcgb25seSB0aGUg Y3VycmVudCB0cmFuc2FjdGlvbidzIGRlbHRhLgoKVGhlIGJhc2VsaW5lIGlzIGtleWVkIGJ5IE15 UHJvYy0+dnhpZC5seGlkIGFuZCBlc3RhYmxpc2hlZCB2aWEgYSBzdGF0aWMKaW5saW5lIGhlbHBl ciwgcGdzdGF0X2Vuc3VyZV94YWN0X2Jhc2VsaW5lKCksIGNhbGxlZCBhdCBldmVyeQpub250cmFu c2FjdGlvbmFsIGNvdW50ZXItaW5jcmVtZW50IHNpdGUuICBBZnRlciB0aGUgZmlyc3QgY2FsbCBw ZXIgZW50cnkKcGVyIHRyYW5zYWN0aW9uLCB0aGUgY2hlY2sgcmVkdWNlcyB0byBhIHNpbmdsZSBp bnRlZ2VyIGNvbXBhcmlzb24uCgpGb3IgZnVuY3Rpb24gc3RhdHMsIGEgbmV3IFBnU3RhdF9GdW5j dGlvblBlbmRpbmcgd3JhcHBlciBzdHJ1Y3QgZW1iZWRzCnRoZSBleGlzdGluZyBQZ1N0YXRfRnVu Y3Rpb25Db3VudHMgYXQgb2Zmc2V0IDAsIHNvIHRoZSBmbHVzaCBjYWxsYmFjawpyZXF1aXJlcyBv bmx5IGEgdHJpdmlhbCBjYXN0IGNoYW5nZS4KCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvcGdzdGF0LmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3Bnc3RhdF9mdW5jdGlvbi5jIHwgIDQ3ICsrKysrLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9yZWxhdGlvbi5jIHwgIDM2ICsrKysrKwogc3JjL2Jpbi9wc3FsL21lc29uLmJ1 aWxkICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3Rh dF94YWN0LnBsICAgICAgICAgICAgfCAxMjEgKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1 ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTEgKysrKysrKysKIDYgZmls ZXMgY2hhbmdlZCwgMjQ5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3RhdF94YWN0LnBsCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS9wZ3N0YXQuYwppbmRleCBlYjhjY2JhYTYyOC4uNzMwZDQ3NGMyMTYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGNvbnN0 IFBnU3RhdF9LaW5kSW5mbyBwZ3N0YXRfa2luZF9idWlsdGluX2luZm9zW1BHU1RBVF9LSU5EX0JV SUxUSU5fU0laRV0KIAkJLnNoYXJlZF9zaXplID0gc2l6ZW9mKFBnU3RhdFNoYXJlZF9GdW5jdGlv biksCiAJCS5zaGFyZWRfZGF0YV9vZmYgPSBvZmZzZXRvZihQZ1N0YXRTaGFyZWRfRnVuY3Rpb24s IHN0YXRzKSwKIAkJLnNoYXJlZF9kYXRhX2xlbiA9IHNpemVvZigoKFBnU3RhdFNoYXJlZF9GdW5j dGlvbiAqKSAwKS0+c3RhdHMpLAotCQkucGVuZGluZ19zaXplID0gc2l6ZW9mKFBnU3RhdF9GdW5j dGlvbkNvdW50cyksCisJCS5wZW5kaW5nX3NpemUgPSBzaXplb2YoUGdTdGF0X0Z1bmN0aW9uUGVu ZGluZyksCiAKIAkJLmZsdXNoX3BlbmRpbmdfY2IgPSBwZ3N0YXRfZnVuY3Rpb25fZmx1c2hfY2Is CiAJCS5yZXNldF90aW1lc3RhbXBfY2IgPSBwZ3N0YXRfZnVuY3Rpb25fcmVzZXRfdGltZXN0YW1w X2NiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2Z1bmN0 aW9uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZnVuY3Rpb24uYwppbmRl eCBlNmI4NDI4M2M2Yy4uYThmMTM1NGQxZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9mdW5jdGlvbi5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAicG9zdGdy ZXMuaCIKIAogI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNp bmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5o IgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC03Myw4ICs3NCw5IEBAIHBnc3RhdF9p bml0X2Z1bmN0aW9uX3VzYWdlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJICAgUGdT dGF0X0Z1bmN0aW9uQ2FsbFVzYWdlICpmY3UpCiB7CiAJUGdTdGF0X0VudHJ5UmVmICplbnRyeV9y ZWY7Ci0JUGdTdGF0X0Z1bmN0aW9uQ291bnRzICpwZW5kaW5nOworCVBnU3RhdF9GdW5jdGlvblBl bmRpbmcgKmZwZW5kaW5nOwogCWJvb2wJCWNyZWF0ZWRfZW50cnk7CisJTG9jYWxUcmFuc2FjdGlv bklkIGN1cmx4aWQgPSBNeVByb2MtPnZ4aWQubHhpZDsKIAogCWlmIChwZ3N0YXRfdHJhY2tfZnVu Y3Rpb25zIDw9IGZjaW5mby0+ZmxpbmZvLT5mbl9zdGF0cykKIAl7CkBAIC0xMTksMTIgKzEyMSwx OSBAQCBwZ3N0YXRfaW5pdF9mdW5jdGlvbl91c2FnZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywK IAkJfQogCX0KIAotCXBlbmRpbmcgPSBlbnRyeV9yZWYtPnBlbmRpbmc7CisJZnBlbmRpbmcgPSAo UGdTdGF0X0Z1bmN0aW9uUGVuZGluZyAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CiAKLQlmY3UtPmZz ID0gcGVuZGluZzsKKwkvKiBFc3RhYmxpc2ggYmFzZWxpbmUgb24gZmlyc3QgY2FsbCBpbiB0aGlz IHRvcC1sZXZlbCB0cmFuc2FjdGlvbiAqLworCWlmIChmcGVuZGluZy0+YmFzZWxpbmVfbHhpZCAh PSBjdXJseGlkKQorCXsKKwkJZnBlbmRpbmctPnhhY3RfYmFzZWxpbmUgPSBmcGVuZGluZy0+Y291 bnRzOworCQlmcGVuZGluZy0+YmFzZWxpbmVfbHhpZCA9IGN1cmx4aWQ7CisJfQorCisJZmN1LT5m cyA9ICZmcGVuZGluZy0+Y291bnRzOwogCiAJLyogc2F2ZSBzdGF0cyBmb3IgdGhpcyBmdW5jdGlv biwgbGF0ZXIgdXNlZCB0byBjb21wZW5zYXRlIGZvciByZWN1cnNpb24gKi8KLQlmY3UtPnNhdmVf Zl90b3RhbF90aW1lID0gcGVuZGluZy0+dG90YWxfdGltZTsKKwlmY3UtPnNhdmVfZl90b3RhbF90 aW1lID0gZnBlbmRpbmctPmNvdW50cy50b3RhbF90aW1lOwogCiAJLyogc2F2ZSBjdXJyZW50IGJh Y2tlbmQtd2lkZSB0b3RhbCB0aW1lICovCiAJZmN1LT5zYXZlX3RvdGFsID0gdG90YWxfZnVuY190 aW1lOwpAQCAtMTkyLDEwICsyMDEsMTIgQEAgcGdzdGF0X2VuZF9mdW5jdGlvbl91c2FnZShQZ1N0 YXRfRnVuY3Rpb25DYWxsVXNhZ2UgKmZjdSwgYm9vbCBmaW5hbGl6ZSkKIGJvb2wKIHBnc3RhdF9m dW5jdGlvbl9mbHVzaF9jYihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQp CiB7CisJUGdTdGF0X0Z1bmN0aW9uUGVuZGluZyAqZnBlbmRpbmc7CiAJUGdTdGF0X0Z1bmN0aW9u Q291bnRzICpsb2NhbGVudDsKIAlQZ1N0YXRTaGFyZWRfRnVuY3Rpb24gKnNoZnVuY2VudDsKIAot CWxvY2FsZW50ID0gKFBnU3RhdF9GdW5jdGlvbkNvdW50cyAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7 CisJZnBlbmRpbmcgPSAoUGdTdGF0X0Z1bmN0aW9uUGVuZGluZyAqKSBlbnRyeV9yZWYtPnBlbmRp bmc7CisJbG9jYWxlbnQgPSAmZnBlbmRpbmctPmNvdW50czsKIAlzaGZ1bmNlbnQgPSAoUGdTdGF0 U2hhcmVkX0Z1bmN0aW9uICopIGVudHJ5X3JlZi0+c2hhcmVkX3N0YXRzOwogCiAJLyogbG9jYWxl bnQgYWx3YXlzIGhhcyBub24temVybyBjb250ZW50ICovCkBAIC0yMjksMTIgKzI0MCwzMiBAQCBQ Z1N0YXRfRnVuY3Rpb25Db3VudHMgKgogZmluZF9mdW5jc3RhdF9lbnRyeShPaWQgZnVuY19pZCkK IHsKIAlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZjsKKwlQZ1N0YXRfRnVuY3Rpb25QZW5kaW5n ICpmcGVuZGluZzsKKwlQZ1N0YXRfRnVuY3Rpb25Db3VudHMgKnJlc3VsdDsKIAogCWVudHJ5X3Jl ZiA9IHBnc3RhdF9mZXRjaF9wZW5kaW5nX2VudHJ5KFBHU1RBVF9LSU5EX0ZVTkNUSU9OLCBNeURh dGFiYXNlSWQsIGZ1bmNfaWQpOwogCi0JaWYgKGVudHJ5X3JlZikKLQkJcmV0dXJuIGVudHJ5X3Jl Zi0+cGVuZGluZzsKLQlyZXR1cm4gTlVMTDsKKwlpZiAoIWVudHJ5X3JlZikKKwkJcmV0dXJuIE5V TEw7CisKKwlmcGVuZGluZyA9IChQZ1N0YXRfRnVuY3Rpb25QZW5kaW5nICopIGVudHJ5X3JlZi0+ cGVuZGluZzsKKworCS8qIE5vdCBjYWxsZWQgaW4gdGhpcyB0cmFuc2FjdGlvbiDigJQgcHJlc2Vy dmUgTlVMTCBzZW1hbnRpY3MgKi8KKwlpZiAoZnBlbmRpbmctPmJhc2VsaW5lX2x4aWQgIT0gTXlQ cm9jLT52eGlkLmx4aWQpCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gcGFsbG9jKHNpemVv ZihQZ1N0YXRfRnVuY3Rpb25Db3VudHMpKTsKKwlyZXN1bHQtPm51bWNhbGxzID0gZnBlbmRpbmct PmNvdW50cy5udW1jYWxscworCQktIGZwZW5kaW5nLT54YWN0X2Jhc2VsaW5lLm51bWNhbGxzOwor CUlOU1RSX1RJTUVfU0VUX1pFUk8ocmVzdWx0LT50b3RhbF90aW1lKTsKKwlJTlNUUl9USU1FX0FD Q1VNX0RJRkYocmVzdWx0LT50b3RhbF90aW1lLAorCQkJCQkJICBmcGVuZGluZy0+Y291bnRzLnRv dGFsX3RpbWUsCisJCQkJCQkgIGZwZW5kaW5nLT54YWN0X2Jhc2VsaW5lLnRvdGFsX3RpbWUpOwor CUlOU1RSX1RJTUVfU0VUX1pFUk8ocmVzdWx0LT5zZWxmX3RpbWUpOworCUlOU1RSX1RJTUVfQUND VU1fRElGRihyZXN1bHQtPnNlbGZfdGltZSwKKwkJCQkJCSAgZnBlbmRpbmctPmNvdW50cy5zZWxm X3RpbWUsCisJCQkJCQkgIGZwZW5kaW5nLT54YWN0X2Jhc2VsaW5lLnNlbGZfdGltZSk7CisJcmV0 dXJuIHJlc3VsdDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0 X3JlbGF0aW9uLmMKaW5kZXggYmM4YzQzYjk2YWEuLmY4MTRlYTY5Nzk3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYwpAQCAtMjAsNiArMjAsNyBAQAog I2luY2x1ZGUgImFjY2Vzcy90d29waGFzZV9ybWdyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3Qu aCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2Mu aCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9p bnRlcm5hbC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtMzc2LDYgKzM3Nyw3IEBAIHBn c3RhdF9jb3VudF9oZWFwX2luc2VydChSZWxhdGlvbiByZWwsIFBnU3RhdF9Db3VudGVyIG4pCiAJ ewogCQlQZ1N0YXRfVGFibGVTdGF0dXMgKnBnc3RhdF9pbmZvID0gcmVsLT5wZ3N0YXRfaW5mbzsK IAorCQlwZ3N0YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUocGdzdGF0X2luZm8pOwogCQllbnN1cmVf dGFic3RhdF94YWN0X2xldmVsKHBnc3RhdF9pbmZvKTsKIAkJcGdzdGF0X2luZm8tPnRyYW5zLT50 dXBsZXNfaW5zZXJ0ZWQgKz0gbjsKIAl9CkBAIC0zOTMsNiArMzk1LDcgQEAgcGdzdGF0X2NvdW50 X2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbCwgYm9vbCBob3QsIGJvb2wgbmV3cGFnZSkKIAl7CiAJ CVBnU3RhdF9UYWJsZVN0YXR1cyAqcGdzdGF0X2luZm8gPSByZWwtPnBnc3RhdF9pbmZvOwogCisJ CXBnc3RhdF9lbnN1cmVfeGFjdF9iYXNlbGluZShwZ3N0YXRfaW5mbyk7CiAJCWVuc3VyZV90YWJz dGF0X3hhY3RfbGV2ZWwocGdzdGF0X2luZm8pOwogCQlwZ3N0YXRfaW5mby0+dHJhbnMtPnR1cGxl c191cGRhdGVkKys7CiAKQEAgLTQxNyw2ICs0MjAsNyBAQCBwZ3N0YXRfY291bnRfaGVhcF9kZWxl dGUoUmVsYXRpb24gcmVsKQogCXsKIAkJUGdTdGF0X1RhYmxlU3RhdHVzICpwZ3N0YXRfaW5mbyA9 IHJlbC0+cGdzdGF0X2luZm87CiAKKwkJcGdzdGF0X2Vuc3VyZV94YWN0X2Jhc2VsaW5lKHBnc3Rh dF9pbmZvKTsKIAkJZW5zdXJlX3RhYnN0YXRfeGFjdF9sZXZlbChwZ3N0YXRfaW5mbyk7CiAJCXBn c3RhdF9pbmZvLT50cmFucy0+dHVwbGVzX2RlbGV0ZWQrKzsKIAl9CkBAIC00MzIsNiArNDM2LDcg QEAgcGdzdGF0X2NvdW50X3RydW5jYXRlKFJlbGF0aW9uIHJlbCkKIAl7CiAJCVBnU3RhdF9UYWJs ZVN0YXR1cyAqcGdzdGF0X2luZm8gPSByZWwtPnBnc3RhdF9pbmZvOwogCisJCXBnc3RhdF9lbnN1 cmVfeGFjdF9iYXNlbGluZShwZ3N0YXRfaW5mbyk7CiAJCWVuc3VyZV90YWJzdGF0X3hhY3RfbGV2 ZWwocGdzdGF0X2luZm8pOwogCQlzYXZlX3RydW5jZHJvcF9jb3VudGVycyhwZ3N0YXRfaW5mby0+ dHJhbnMsIGZhbHNlKTsKIAkJcGdzdGF0X2luZm8tPnRyYW5zLT50dXBsZXNfaW5zZXJ0ZWQgPSAw OwpAQCAtNTIzLDYgKzUyOCwzMyBAQCBmaW5kX3RhYnN0YXRfZW50cnkoT2lkIHJlbF9pZCkKIAkg Ki8KIAl0YWJsZXN0YXR1cy0+dHJhbnMgPSBOVUxMOwogCisJLyoKKwkgKiBBZGp1c3QgY291bnRl cnMgdG8gc2hvdyBvbmx5IHRoZSBjdXJyZW50IHRvcC1sZXZlbCB0cmFuc2FjdGlvbidzCisJICog YWN0aXZpdHkuICBJZiB0aGUgYmFzZWxpbmUgd2FzIHNldCBpbiB0aGUgY3VycmVudCB0cmFuc2Fj dGlvbiwgc3VidHJhY3QKKwkgKiBpdCB0byByZW1vdmUgcHJpb3ItdHJhbnNhY3Rpb24gZGF0YS4g IE90aGVyd2lzZSwgdGhlIGVudHJ5IHdhcyBub3QKKwkgKiB0b3VjaGVkIGluIHRoZSBjdXJyZW50 IHRyYW5zYWN0aW9uLCBzbyBhbGwgY291bnRlcnMgYXJlIHplcm8uCisJICovCisJaWYgKHRhYmVu dHJ5LT5iYXNlbGluZV9seGlkID09IE15UHJvYy0+dnhpZC5seGlkKQorCXsKKwkJUGdTdGF0X1Rh YmxlQ291bnRzICpiYXNlID0gJnRhYmVudHJ5LT54YWN0X2Jhc2VsaW5lOworCisJCXRhYmxlc3Rh dHVzLT5jb3VudHMubnVtc2NhbnMgLT0gYmFzZS0+bnVtc2NhbnM7CisJCXRhYmxlc3RhdHVzLT5j b3VudHMudHVwbGVzX3JldHVybmVkIC09IGJhc2UtPnR1cGxlc19yZXR1cm5lZDsKKwkJdGFibGVz dGF0dXMtPmNvdW50cy50dXBsZXNfZmV0Y2hlZCAtPSBiYXNlLT50dXBsZXNfZmV0Y2hlZDsKKwkJ dGFibGVzdGF0dXMtPmNvdW50cy50dXBsZXNfaW5zZXJ0ZWQgLT0gYmFzZS0+dHVwbGVzX2luc2Vy dGVkOworCQl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc191cGRhdGVkIC09IGJhc2UtPnR1cGxl c191cGRhdGVkOworCQl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19kZWxldGVkIC09IGJhc2Ut PnR1cGxlc19kZWxldGVkOworCQl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19ob3RfdXBkYXRl ZCAtPSBiYXNlLT50dXBsZXNfaG90X3VwZGF0ZWQ7CisJCXRhYmxlc3RhdHVzLT5jb3VudHMudHVw bGVzX25ld3BhZ2VfdXBkYXRlZCAtPSBiYXNlLT50dXBsZXNfbmV3cGFnZV91cGRhdGVkOworCQl0 YWJsZXN0YXR1cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkIC09IGJhc2UtPmJsb2Nrc19mZXRjaGVk OworCQl0YWJsZXN0YXR1cy0+Y291bnRzLmJsb2Nrc19oaXQgLT0gYmFzZS0+YmxvY2tzX2hpdDsK Kwl9CisJZWxzZQorCXsKKwkJLyogRW50cnkgbm90IHRvdWNoZWQgaW4gdGhpcyB0cmFuc2FjdGlv bjsgYWxsIHhhY3QgY291bnRlcnMgYXJlIHplcm8gKi8KKwkJbWVtc2V0KCZ0YWJsZXN0YXR1cy0+ Y291bnRzLCAwLCBzaXplb2YoUGdTdGF0X1RhYmxlQ291bnRzKSk7CisJfQorCiAJLyoKIAkgKiBM aXZlIHN1YnRyYW5zYWN0aW9uIGNvdW50cyBhcmUgbm90IGluY2x1ZGVkIHlldC4gIFRoaXMgaXMg bm90IGEgaG90CiAJICogY29kZSBwYXRoIHNvIHJlY29uY2lsZSB0dXBsZXNfaW5zZXJ0ZWQsIHR1 cGxlc191cGRhdGVkIGFuZApAQCAtNzUyLDYgKzc4NCw4IEBAIHBnc3RhdF90d29waGFzZV9wb3N0 Y29tbWl0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZvLAogCS8qIEZpbmQgb3Ig Y3JlYXRlIGEgdGFic3RhdCBlbnRyeSBmb3IgdGhlIHJlbCAqLwogCXBnc3RhdF9pbmZvID0gcGdz dGF0X3ByZXBfcmVsYXRpb25fcGVuZGluZyhyZWMtPmlkLCByZWMtPnNoYXJlZCk7CiAKKwlwZ3N0 YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUocGdzdGF0X2luZm8pOworCiAJLyogU2FtZSBtYXRoIGFz IGluIEF0RU9YYWN0X1BnU3RhdCwgY29tbWl0IGNhc2UgKi8KIAlwZ3N0YXRfaW5mby0+Y291bnRz LnR1cGxlc19pbnNlcnRlZCArPSByZWMtPnR1cGxlc19pbnNlcnRlZDsKIAlwZ3N0YXRfaW5mby0+ Y291bnRzLnR1cGxlc191cGRhdGVkICs9IHJlYy0+dHVwbGVzX3VwZGF0ZWQ7CkBAIC03ODgsNiAr ODIyLDggQEAgcGdzdGF0X3R3b3BoYXNlX3Bvc3RhYm9ydChGdWxsVHJhbnNhY3Rpb25JZCBmeGlk LCB1aW50MTYgaW5mbywKIAkvKiBGaW5kIG9yIGNyZWF0ZSBhIHRhYnN0YXQgZW50cnkgZm9yIHRo ZSByZWwgKi8KIAlwZ3N0YXRfaW5mbyA9IHBnc3RhdF9wcmVwX3JlbGF0aW9uX3BlbmRpbmcocmVj LT5pZCwgcmVjLT5zaGFyZWQpOwogCisJcGdzdGF0X2Vuc3VyZV94YWN0X2Jhc2VsaW5lKHBnc3Rh dF9pbmZvKTsKKwogCS8qIFNhbWUgbWF0aCBhcyBpbiBBdEVPWGFjdF9QZ1N0YXQsIGFib3J0IGNh c2UgKi8KIAlpZiAocmVjLT50cnVuY2Ryb3BwZWQpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w c3FsL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wc3FsL21lc29uLmJ1aWxkCmluZGV4IDkyMmIyODQ1 MjY3Li4yNWZiYjgxN2YxZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iaW4vcHNxbC9tZXNvbi5idWlsZApAQCAtNzgsNiArNzgsNyBAQCB0ZXN0cyArPSB7 CiAgICAgICAndC8wMTBfdGFiX2NvbXBsZXRpb24ucGwnLAogICAgICAgJ3QvMDIwX2NhbmNlbC5w bCcsCiAgICAgICAndC8wMzBfcGFnZXIucGwnLAorICAgICAgJ3QvMDQwX3Bnc3RhdF94YWN0LnBs JywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3Rh dF94YWN0LnBsIGIvc3JjL2Jpbi9wc3FsL3QvMDQwX3Bnc3RhdF94YWN0LnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTNhNzQyNGM0YwotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcHNxbC90LzA0MF9wZ3N0YXRfeGFjdC5wbApAQCAtMCwwICsxLDEyMSBAQAor IyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKworIyBUZXN0IHRoYXQgcGdfc3RhdF94YWN0Xyogdmlld3MgcmVwb3J0IG9ubHkgY3Vy cmVudC10cmFuc2FjdGlvbiBhY3Rpdml0eSwKKyMgbm90IGFjY3VtdWxhdGVkIHBlbmRpbmcgc3Rh dHMgZnJvbSBwcmlvciB0cmFuc2FjdGlvbnMuCisjCisjIFRoaXMgdGVzdCB1c2VzICJwc3FsIC1j IiB0byBzZW5kIG11bHRpLXN0YXRlbWVudCBzdHJpbmdzIGFzIGEgc2luZ2xlCisjIHNpbXBsZS1x dWVyeSBwcm90b2NvbCBtZXNzYWdlLiAgVGhpcyBlbnN1cmVzIHRoZXJlIGlzIG5vIFJlYWR5Rm9y UXVlcnkKKyMgYm91bmRhcnkgKGFuZCB0aGVyZWZvcmUgbm8gcGdzdGF0X3JlcG9ydF9zdGF0KCkg b3Bwb3J0dW5pdHkpIGJldHdlZW4KKyMgY29uc2VjdXRpdmUgdG9wLWxldmVsIHRyYW5zYWN0aW9u cyB3aXRoaW4gdGhlIHNhbWUgbWVzc2FnZSwgd2hpY2ggaXMgdGhlCisjIGNvbmRpdGlvbiByZXF1 aXJlZCB0byBkZXRlcm1pbmlzdGljYWxseSByZXByb2R1Y2UgdGhlIGNyb3NzLXRyYW5zYWN0aW9u CisjIHN0YXRzIGxlYWthZ2UgYnVnLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAidHJhY2tfZnVuY3Rpb25zID0gJ2FsbCciKTsK KyRub2RlLT5zdGFydDsKKworbXkgJGRibmFtZSA9ICdwb3N0Z3Jlcyc7CisKKyMgQ3JlYXRlIHRl c3Qgb2JqZWN0cy4KKyRub2RlLT5zYWZlX3BzcWwoCisJJGRibmFtZSwgcXsKKyAgICBDUkVBVEUg VEFCTEUgdGVzdF94YWN0X3N0YXRzICh4IGludCk7CisgICAgQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf eGFjdF9zdGF0c19mdW5jKCkgUkVUVVJOUyB2b2lkCisgICAgICAgIExBTkdVQUdFIHBscGdzcWwg QVMgJCQgQkVHSU4gTlVMTDsgRU5EOyAkJDsKK30pOworCisjIExpa2UgcHNxbF9saWtlIGluIDAw MV9iYXNpYy5wbCwgYnV0IHNlbmRzIHRoZSBTUUwgdmlhICJwc3FsIC1jIiBzbworIyB0aGF0IGFs bCBzdGF0ZW1lbnRzIGdvIGFzIGEgc2luZ2xlIHNpbXBsZS1xdWVyeSBtZXNzYWdlLgorc3ViIHBz cWxfY19saWtlCit7CisJbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxk ZXI6OkxldmVsICsgMTsKKworCW15ICgkbm9kZSwgJHNxbCwgJGV4cGVjdGVkX3N0ZG91dCwgJHRl c3RfbmFtZSkgPSBAXzsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKTsKKwlteSBAY21kID0gKAor CQkkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoJ3BzcWwnKSwKKwkJJy0tbm8tcHNxbHJjJywgJy0t bm8tYWxpZ24nLCAnLS10dXBsZXMtb25seScsICctLXF1aWV0JywKKwkJJy1kJywgJG5vZGUtPmNv bm5zdHIoJGRibmFtZSksCisJCSctYycsICRzcWwpOworCW15ICRyZXN1bHQgPSBJUEM6OlJ1bjo6 cnVuIFxAY21kLCAnPicsIFwkc3Rkb3V0LCAnMj4nLCBcJHN0ZGVycjsKKworCWlzKCRyZXN1bHQs IDEsICIkdGVzdF9uYW1lOiBleGl0IGNvZGUgMCIpOworCWlzKCRzdGRlcnIsICcnLCAiJHRlc3Rf bmFtZTogbm8gc3RkZXJyIik7CisJbGlrZSgkc3Rkb3V0LCAkZXhwZWN0ZWRfc3Rkb3V0LCAiJHRl c3RfbmFtZTogbWF0Y2hlcyIpOworCisJcmV0dXJuOworfQorCisKKyMjCisjIyBUZXN0IDE6IFRh YmxlIG5fdHVwX2lucyBtdXN0IG5vdCBsZWFrIGFjcm9zcyB0b3AtbGV2ZWwgdHJhbnNhY3Rpb25z LgorIyMKKyMjIFR3byBjb25zZWN1dGl2ZSB0cmFuc2FjdGlvbnMgZWFjaCBpbnNlcnQgb25lIHJv dy4gIFdpdGhvdXQgdGhlIGZpeCwKKyMjIHBnX3N0YXRfeGFjdF91c2VyX3RhYmxlcyBpbiB0aGUg c2Vjb25kIHRyYW5zYWN0aW9uIHdvdWxkIHNob3cKKyMjIG5fdHVwX2lucyA9IDIgKGFjY3VtdWxh dGVkKSBpbnN0ZWFkIG9mIDEuCisjIworcHNxbF9jX2xpa2UoCisJJG5vZGUsCisJcXtCRUdJTjsK KyAgICBJTlNFUlQgSU5UTyB0ZXN0X3hhY3Rfc3RhdHMgVkFMVUVTICgxKTsKKyAgICBDT01NSVQ7 CisgICAgQkVHSU47CisgICAgSU5TRVJUIElOVE8gdGVzdF94YWN0X3N0YXRzIFZBTFVFUyAoMik7 CisgICAgU0VMRUNUIG5fdHVwX2lucyBGUk9NIHBnX3N0YXRfeGFjdF91c2VyX3RhYmxlcworICAg ICAgICBXSEVSRSByZWxuYW1lID0gJ3Rlc3RfeGFjdF9zdGF0cyc7CisgICAgQ09NTUlUO30sCisJ cXIvXjEkL20sCisJInRhYmxlIG5fdHVwX2lucyBzaG93cyBvbmx5IGN1cnJlbnQgdHJhbnNhY3Rp b24ncyBpbnNlcnRzIik7CisKKworIyMKKyMjIFRlc3QgMjogc2VxX3NjYW4gY291bnRlciBtdXN0 IG5vdCBsZWFrIGFjcm9zcyB0b3AtbGV2ZWwgdHJhbnNhY3Rpb25zLgorIyMKK3BzcWxfY19saWtl KAorCSRub2RlLAorCXF7QkVHSU47CisgICAgU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF94YWN0 X3N0YXRzOworICAgIENPTU1JVDsKKyAgICBCRUdJTjsKKyAgICBTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3hhY3Rfc3RhdHM7CisgICAgU0VMRUNUIHNlcV9zY2FuIEZST00gcGdfc3RhdF94YWN0 X3VzZXJfdGFibGVzCisgICAgICAgIFdIRVJFIHJlbG5hbWUgPSAndGVzdF94YWN0X3N0YXRzJzsK KyAgICBDT01NSVQ7fSwKKwlxci8xJC9tLAorCSJ0YWJsZSBzZXFfc2NhbiBzaG93cyBvbmx5IGN1 cnJlbnQgdHJhbnNhY3Rpb24ncyBzY2FucyIpOworCisKKyMjCisjIyBUZXN0IDM6IEZ1bmN0aW9u IGNhbGwgc3RhdHMgbXVzdCBub3QgbGVhayBhY3Jvc3MgdG9wLWxldmVsIHRyYW5zYWN0aW9ucy4K KyMjCitwc3FsX2NfbGlrZSgKKwkkbm9kZSwKKwlxe0JFR0lOOworICAgIFNFTEVDVCB0ZXN0X3hh Y3Rfc3RhdHNfZnVuYygpOworICAgIFNFTEVDVCB0ZXN0X3hhY3Rfc3RhdHNfZnVuYygpOworICAg IENPTU1JVDsKKyAgICBCRUdJTjsKKyAgICBTRUxFQ1QgdGVzdF94YWN0X3N0YXRzX2Z1bmMoKTsK KyAgICBTRUxFQ1QgY2FsbHMgRlJPTSBwZ19zdGF0X3hhY3RfdXNlcl9mdW5jdGlvbnMKKyAgICAg ICAgV0hFUkUgZnVuY25hbWUgPSAndGVzdF94YWN0X3N0YXRzX2Z1bmMnOworICAgIENPTU1JVDt9 LAorCXFyL14xJC9tLAorCSJmdW5jdGlvbiBjYWxscyBzaG93cyBvbmx5IGN1cnJlbnQgdHJhbnNh Y3Rpb24ncyBjYWxscyIpOworCisjIENsZWFudXAKKyRub2RlLT5zYWZlX3BzcWwoCisJJGRibmFt ZSwgcXsKKyAgICBEUk9QIFRBQkxFIHRlc3RfeGFjdF9zdGF0czsKKyAgICBEUk9QIEZVTkNUSU9O IHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7Cit9KTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3Rp bmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oIGIvc3JjL2luY2x1ZGUvcGdz dGF0LmgKaW5kZXggOGUzNTQ5YzM3NTIuLmUyNzc2ZTc2MzBjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApAQCAtMTYsNiArMTYsNyBA QAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcGdhcmNoLmgiCS8qIGZvciBNQVhfWEZOX0NIQVJTICov CiAjaW5jbHVkZSAicmVwbGljYXRpb24vY29uZmxpY3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xv Y2t0YWcuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ1dGlscy9iYWNr ZW5kX3Byb2dyZXNzLmgiIC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCS8qIElXWVUg cHJhZ21hOiBleHBvcnQgKi8KICNpbmNsdWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1cy5oIgkvKiBm b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwkvKiBJV1lVIHByYWdtYTogZXhwb3J0ICovCiAj aW5jbHVkZSAidXRpbHMvcGdzdGF0X2tpbmQuaCIKQEAgLTkwLDYgKzkxLDE3IEBAIHR5cGVkZWYg c3RydWN0IFBnU3RhdF9GdW5jdGlvbkNvdW50cwogCWluc3RyX3RpbWUJc2VsZl90aW1lOwogfSBQ Z1N0YXRfRnVuY3Rpb25Db3VudHM7CiAKKy8qCisgKiBCYWNrZW5kLWxvY2FsIHBlbmRpbmcgc3Rh dGUgZm9yIGZ1bmN0aW9uIHN0YXRzLCB3cmFwcGluZyB0aGUgYWNjdW11bGF0ZWQKKyAqIGNvdW50 cyB3aXRoIGEgcGVyLXRyYW5zYWN0aW9uIGJhc2VsaW5lIGZvciBwZ19zdGF0X3hhY3RfKiBpc29s YXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IFBnU3RhdF9GdW5jdGlvblBlbmRpbmcKK3sKKwlQ Z1N0YXRfRnVuY3Rpb25Db3VudHMgY291bnRzOwkvKiBhY2N1bXVsYXRlZCBjb3VudHMgKi8KKwlQ Z1N0YXRfRnVuY3Rpb25Db3VudHMgeGFjdF9iYXNlbGluZTsJLyogc25hcHNob3QgYXQgdG9wLWxl dmVsIHR4biBzdGFydCAqLworCUxvY2FsVHJhbnNhY3Rpb25JZCBiYXNlbGluZV9seGlkOwkvKiBs eGlkIHdoZW4gYmFzZWxpbmUgd2FzIHNldCAqLworfQkJCVBnU3RhdF9GdW5jdGlvblBlbmRpbmc7 CisKIC8qCiAgKiBXb3JraW5nIHN0YXRlIG5lZWRlZCB0byBhY2N1bXVsYXRlIHBlci1mdW5jdGlv bi1jYWxsIHRpbWluZyBzdGF0aXN0aWNzLgogICovCkBAIC0xODMsNiArMTk1LDggQEAgdHlwZWRl ZiBzdHJ1Y3QgUGdTdGF0X1RhYmxlU3RhdHVzCiAJYm9vbAkJc2hhcmVkOwkJCS8qIGlzIGl0IGEg c2hhcmVkIGNhdGFsb2c/ICovCiAJc3RydWN0IFBnU3RhdF9UYWJsZVhhY3RTdGF0dXMgKnRyYW5z OwkvKiBsb3dlc3Qgc3VieGFjdCdzIGNvdW50cyAqLwogCVBnU3RhdF9UYWJsZUNvdW50cyBjb3Vu dHM7CS8qIGV2ZW50IGNvdW50cyB0byBiZSBzZW50ICovCisJUGdTdGF0X1RhYmxlQ291bnRzIHhh Y3RfYmFzZWxpbmU7CS8qIHNuYXBzaG90IGF0IHRvcC1sZXZlbCB0eG4gc3RhcnQgKi8KKwlMb2Nh bFRyYW5zYWN0aW9uSWQgYmFzZWxpbmVfbHhpZDsJLyogbHhpZCB3aGVuIGJhc2VsaW5lIHdhcyBz ZXQgKi8KIAlSZWxhdGlvbglyZWxhdGlvbjsJCS8qIHJlbCB0aGF0IGlzIHVzaW5nIHRoaXMgZW50 cnkgKi8KIH0gUGdTdGF0X1RhYmxlU3RhdHVzOwogCkBAIC03MjEsMzkgKzczNSw3NiBAQCBleHRl cm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2FuYWx5emUoUmVsYXRpb24gcmVsLAogI2RlZmluZSBwZ3N0 YXRfY291bnRfaGVhcF9zY2FuKHJlbCkJCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwK IAkJaWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCisJCXsJCQkJ CQkJCQkJCQkJCQlcCisJCQlwZ3N0YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUoKHJlbCktPnBnc3Rh dF9pbmZvKTsJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLm51bXNjYW5zKys7CQkJ CQlcCisJCX0JCQkJCQkJCQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgcGdzdGF0X2Nv dW50X2hlYXBfZ2V0bmV4dChyZWwpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJ aWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCisJCXsJCQkJCQkJ CQkJCQkJCQlcCisJCQlwZ3N0YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUoKHJlbCktPnBnc3RhdF9p bmZvKTsJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLnR1cGxlc19yZXR1cm5lZCsr OwkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBwZ3N0YXRf Y291bnRfaGVhcF9mZXRjaChyZWwpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJ aWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCisJCXsJCQkJCQkJ CQkJCQkJCQlcCisJCQlwZ3N0YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUoKHJlbCktPnBnc3RhdF9p bmZvKTsJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLnR1cGxlc19mZXRjaGVkKys7 CQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9j b3VudF9pbmRleF9zY2FuKHJlbCkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAogCQlp ZiAocGdzdGF0X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJCQkJCVwKKwkJewkJCQkJCQkJ CQkJCQkJCVwKKwkJCXBnc3RhdF9lbnN1cmVfeGFjdF9iYXNlbGluZSgocmVsKS0+cGdzdGF0X2lu Zm8pOwkJXAogCQkJKHJlbCktPnBnc3RhdF9pbmZvLT5jb3VudHMubnVtc2NhbnMrKzsJCQkJCVwK KwkJfQkJCQkJCQkJCQkJCQkJCVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBwZ3N0YXRfY291bnRf aW5kZXhfdHVwbGVzKHJlbCwgbikJCQkJCQkJXAogCWRvIHsJCQkJCQkJCQkJCQkJCQlcCiAJCWlm IChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAorCQl7CQkJCQkJCQkJ CQkJCQkJXAorCQkJcGdzdGF0X2Vuc3VyZV94YWN0X2Jhc2VsaW5lKChyZWwpLT5wZ3N0YXRfaW5m byk7CQlcCiAJCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50cy50dXBsZXNfcmV0dXJuZWQgKz0g KG4pOwkJXAorCQl9CQkJCQkJCQkJCQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3Rh dF9jb3VudF9idWZmZXJfcmVhZChyZWwpCQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwK IAkJaWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCisJCXsJCQkJ CQkJCQkJCQkJCQlcCisJCQlwZ3N0YXRfZW5zdXJlX3hhY3RfYmFzZWxpbmUoKHJlbCktPnBnc3Rh dF9pbmZvKTsJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLmJsb2Nrc19mZXRjaGVk Kys7CQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3Rh dF9jb3VudF9idWZmZXJfaGl0KHJlbCkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAog CQlpZiAocGdzdGF0X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJCQkJCVwKKwkJewkJCQkJ CQkJCQkJCQkJCVwKKwkJCXBnc3RhdF9lbnN1cmVfeGFjdF9iYXNlbGluZSgocmVsKS0+cGdzdGF0 X2luZm8pOwkJXAogCQkJKHJlbCktPnBnc3RhdF9pbmZvLT5jb3VudHMuYmxvY2tzX2hpdCsrOwkJ CQlcCisJCX0JCQkJCQkJCQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorLyoKKyAqIEVuc3VyZSB0 aGUgeGFjdCBiYXNlbGluZSBpcyBjdXJyZW50IGZvciB0aGlzIHRvcC1sZXZlbCB0cmFuc2FjdGlv bi4KKyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgY291bnRlciBpbiBQZ1N0YXRfVGFibGVT dGF0dXMuY291bnRzIGlzIG1vZGlmaWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3Bnc3Rh dF9lbnN1cmVfeGFjdF9iYXNlbGluZShQZ1N0YXRfVGFibGVTdGF0dXMgKnBnc3RhdF9pbmZvKQor eworCUxvY2FsVHJhbnNhY3Rpb25JZCBjdXJseGlkID0gTXlQcm9jLT52eGlkLmx4aWQ7CisKKwlp ZiAodW5saWtlbHkocGdzdGF0X2luZm8tPmJhc2VsaW5lX2x4aWQgIT0gY3VybHhpZCkpCisJewor CQlwZ3N0YXRfaW5mby0+eGFjdF9iYXNlbGluZSA9IHBnc3RhdF9pbmZvLT5jb3VudHM7CisJCXBn c3RhdF9pbmZvLT5iYXNlbGluZV9seGlkID0gY3VybHhpZDsKKwl9Cit9CisKIGV4dGVybiB2b2lk IHBnc3RhdF9jb3VudF9oZWFwX2luc2VydChSZWxhdGlvbiByZWwsIFBnU3RhdF9Db3VudGVyIG4p OwogZXh0ZXJuIHZvaWQgcGdzdGF0X2NvdW50X2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbCwgYm9v bCBob3QsIGJvb2wgbmV3cGFnZSk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfY291bnRfaGVhcF9kZWxl dGUoUmVsYXRpb24gcmVsKTsKLS0gCjIuNTEuMAoK --0000000000004b9754064e0f2967--