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 1vdDYC-00FTEy-3D for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jan 2026 20:21: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 1vdDYA-00ATgi-2Q for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jan 2026 20:21:07 +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 1vdDYA-00ATga-13 for pgsql-hackers@lists.postgresql.org; Tue, 06 Jan 2026 20:21:07 +0000 Received: from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vdDY7-004xXo-06 for pgsql-hackers@postgresql.org; Tue, 06 Jan 2026 20:21:05 +0000 Received: by mail-ot1-x335.google.com with SMTP id 46e09a7af769-7c6da42fbd4so818289a34.1 for ; Tue, 06 Jan 2026 12:21:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767730860; x=1768335660; darn=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=MHHr90OWF9MWeerjNnEbp+5ULN/1zx88Wxdo36VLhFs=; b=Ilvb9SHHRrbLrlvXg3gQed/gPjeatU35FgSNgQBuRHNGkX6w930nifi1xGZ4T6bx/m jkfHo9bSA7oylY79PkP3ZA0E18VxXX5QNtmROFPXCAYYkw/h0Pkm4Jad3ieFDyNZ3uxM /tgOchP/RAPo05gt6Z5JLj/xxqwzO+dWwAkMu/PwyljDMMnXL8SBzu7Y+cKKrhM0QBbl +gEZJ28Xce4fzjHVLQaFpW4sTaUpSM6Mib3DOd4yrXmQKMZ/fLa+th0p+ztwRFih9A+F C2jJ3N+NrV7+bPHCJyjKGHptgFC0Ym9BGeMBG2zTrOSl6E74hqMTuk1GZjLML96AlaD4 15sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767730860; x=1768335660; 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=MHHr90OWF9MWeerjNnEbp+5ULN/1zx88Wxdo36VLhFs=; b=BsP7NMYlgZK8yhN9CtpXLuCrHom/7+Kw/242L6MTunj7n/4SYUVyrp82OU3RQW5OwK BvlYPhF56nEb6m8QCD9TXPnBzer6h6m1PbHEiDPLEUu4fL5wezUHwPM5dfBpM0g9GQ3e VJNPIMJdJ5eOIH69nFDt3+42KgcoEySZ42yXVt5yCDsGoZoeKSiSBO5vGDKHXwKeRgum 4kNZt8lnyAohI1znsmgDC4qmtzyfv7rzGnUGI2ikwpgy8TzEiTrHXRAabj1z2+yR5EVf 2f0+Q6IIiz+ZclJcCpin2jrI5gKGERqfQeg3ScR7HPpe/a/2viAQIbWT7H6JyMJxidce c29g== X-Forwarded-Encrypted: i=1; AJvYcCU4fY2YgguiEi0jxBEAi9gy/E9cE+ODE1DqAvELsT1YCjXoltm0SU1nGbv0Ehj93EwfEizjxSvf2VmPLzSb@postgresql.org X-Gm-Message-State: AOJu0YwQpjY5VkiRQyOa79H0/YrYivYZ/cpeTFa0d+fATyhNXU4+u1IJ KwHycSftXX1/Oz6uzkfplHlS8J7ZzUqmDrbD47KK6DLlLqP9z334aElBdIcUM9AtbLy5JcCXGG1 ek7aKgv+W2tEbmSaYEi3Mukwq446Ujk4= X-Gm-Gg: AY/fxX58S94rXFrMEcY89J+1VvVrei2zaRqaz2tWR3LpTC7g5SxTeMbaOiNeocEJ+rl DLXJVgYxytyKqTl0aINVy31hkl4LMrXk2dtqvQvyGQeW4o8AC6VZfQQZF+QVYybcjtqhJa8tS/I 6sAbKyl2NsFrbZrlUGX2fLTE7XKMXZi+mk9D07CExAf0TvM6US3MEcysnsNFSBiRf27qBiLb9MN W2QcjqJPoYyANxCx9s7wwdt+dI7xD/2kTUvfDvQ9g6JmRHhPQWFnUQv6EHpwsahrQLq+A== X-Google-Smtp-Source: AGHT+IFMoJ04ilFtCbKILdcWVztDWRGEu0yAuyN8qMsNilRm51S2n9brJYmqMTOJJDbptkHReckE5jtJcFPVjn3yD94= X-Received: by 2002:a05:6820:1613:b0:65e:d467:147c with SMTP id 006d021491bc7-65f5507e8c0mr29556eaf.71.1767730860312; Tue, 06 Jan 2026 12:21:00 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Tue, 6 Jan 2026 14:20:47 -0600 X-Gm-Features: AQt7F2pVg-bzXJAVifSI_JCJx6ZxjPA4UrT50RDFN5XGxaRQ1pLWSV2zp8qL5-Q Message-ID: Subject: Re: Refactor query normalization into core query jumbling To: Lukas Fittl Cc: Michael Paquier , zengman , pgsql-hackers , Julien Rouhaud Content-Type: multipart/mixed; boundary="000000000000fcedb40647bde9fe" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fcedb40647bde9fe Content-Type: text/plain; charset="UTF-8" > >> backwards compatible. Basically, we keep JumbleState a non-constant, > >> but provide core APIs for any operation, such as > >> generate_normalized_query, > >> that needs to modify the state. So, my approach was not about enforcing a > >> read-only JumbleState, but about providing the API to dissuade an author > >> from modifying a JumbleState. > > > Given the lack of public APIs to modify JumbleState today, I don't see how > > an extension would do > > modifications in a meaningful way, short of copying the code. I think we > > should be a bit bolder here in > > enforcing a convention, either clearly making it read-only or dropping the > > argument again. > > Based on the discussion so far I am leaning towards making JumbleState > read-only as described here [0]. I don't see how we can drop JumbleState > completely from hooks, since normalization needs to occur on-demand > by the extension. Here is v4. 0001 - addresses the comments made by Bertrand. 0002 - makes JumbleState a constant when passed to post_parse_analyze and updates all downstream code that consume the JumbleState. This means we now need to copy the locations from JState into a local/temporary array when generating the normalized string. -- Sami Imseih Amazon Web Services (AWS) --000000000000fcedb40647bde9fe Content-Type: application/octet-stream; name="v4-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Disposition: attachment; filename="v4-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk319ods1 RnJvbSAxMjU3NWMyZGI1Y2NmYzA3MGI0MDI0ZDY0NGU0YzcyZTMyNDk3NDg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVHVlLCA2IEphbiAyMDI2IDE5OjI5OjAxICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2NCAyLzJdIE1ha2UgSnVtYmxlU3RhdGUgY29uc3QgaW4gcG9zdF9wYXJzZV9hbmFseXpl IGhvb2sKCkNoYW5nZSB0aGUgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSBzaWduYXR1cmUg dG8gdGFrZSBhIGNvbnN0Ckp1bWJsZVN0YXRlIHBhcmFtZXRlciwgcHJldmVudGluZyBob29rcyBm cm9tIG1vZGlmeWluZyB0aGUganVtYmxlCnN0YXRlIGR1cmluZyBxdWVyeSBhbmFseXNpcy4gVGhp cyBpbXByb3ZlcyBBUEkgc2FmZXR5IGJ5IG1ha2luZyBpdApjbGVhciB0aGF0IGhvb2tzIHNob3Vs ZCBvbmx5IHJlYWQgZnJvbSB0aGUganVtYmxlIHN0YXRlLCBub3QgbW9kaWZ5Cml0LgoKVXBkYXRl IHBnX3N0YXRfc3RhdGVtZW50cyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIG5l dyBjb25zdApzaWduYXR1cmUuIFJlZmFjdG9yIFNldENvbnN0YW50TGVuZ3RocygpIHRvIHJldHVy biBhIG5ld2x5IGFsbG9jYXRlZApMb2NhdGlvbkxlbiBhcnJheSBpbnN0ZWFkIG9mIG1vZGlmeWlu ZyB0aGUgSnVtYmxlU3RhdGUsIGFuZCB1cGRhdGUKR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoKSB0 byB3b3JrIHdpdGggdGhlIGNvbnN0IEp1bWJsZVN0YXRlIGFuZAptYW5hZ2UgdGhlIHJldHVybmVk IGFycmF5IHByb3Blcmx5LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1Ulow dFpwNXFVMGlrWkVFcUpueHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5j b20KLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAg OCArKy0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgICAgICAgICAgfCAz OSArKysrKysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oICAg ICAgICAgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaCAgICAgICAg ICAgICAgICAgIHwgIDIgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTgg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0 YXRlbWVudHMuYwppbmRleCBiOTA4OTE4NTlkOS4uYjc5NmQ4MzljZWMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0zMzIsNyArMzMy LDcgQEAgc3RhdGljIHZvaWQgcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQpOwogc3RhdGljIHZvaWQg cGdzc19zaG1lbV9zdGFydHVwKHZvaWQpOwogc3RhdGljIHZvaWQgcGdzc19zaG1lbV9zaHV0ZG93 bihpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHBnc3NfcG9zdF9wYXJzZV9hbmFs eXplKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LAotCQkJCQkJCQkJSnVtYmxlU3Rh dGUgKmpzdGF0ZSk7CisJCQkJCQkJCQljb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRlKTsKIHN0YXRp YyBQbGFubmVkU3RtdCAqcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJCQkJCQkJIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJIGludCBjdXJzb3JPcHRpb25zLApAQCAtMzU2 LDcgKzM1Niw3IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGlu dDY0IHF1ZXJ5SWQsCiAJCQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKIAkJCQkJ ICAgY29uc3QgV2FsVXNhZ2UgKndhbHVzYWdlLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgSml0SW5z dHJ1bWVudGF0aW9uICpqaXR1c2FnZSwKLQkJCQkJICAgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKKwkJ CQkJICAgY29uc3QgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKIAkJCQkJICAgaW50IHBhcmFsbGVsX3dv cmtlcnNfdG9fbGF1bmNoLAogCQkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCwK IAkJCQkJICAgUGxhbm5lZFN0bXRPcmlnaW4gcGxhbk9yaWdpbik7CkBAIC04MzIsNyArODMyLDcg QEAgZXJyb3I6CiAgKiBQb3N0LXBhcnNlLWFuYWx5c2lzIGhvb2s6IG1hcmsgcXVlcnkgd2l0aCBh IHF1ZXJ5SWQKICAqLwogc3RhdGljIHZvaWQKLXBnc3NfcG9zdF9wYXJzZV9hbmFseXplKFBhcnNl U3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LCBKdW1ibGVTdGF0ZSAqanN0YXRlKQorcGdzc19w b3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksIGNvbnN0 IEp1bWJsZVN0YXRlICpqc3RhdGUpCiB7CiAJaWYgKHByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hv b2spCiAJCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2socHN0YXRlLCBxdWVyeSwganN0YXRl KTsKQEAgLTEyODksNyArMTI4OSw3IEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGlu dDY0IHF1ZXJ5SWQsCiAJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKIAkJICAgY29u c3QgV2FsVXNhZ2UgKndhbHVzYWdlLAogCQkgICBjb25zdCBzdHJ1Y3QgSml0SW5zdHJ1bWVudGF0 aW9uICpqaXR1c2FnZSwKLQkJICAgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKKwkJICAgY29uc3QgSnVt YmxlU3RhdGUgKmpzdGF0ZSwKIAkJICAgaW50IHBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoLAog CQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCwKIAkJICAgUGxhbm5lZFN0bXRPcmln aW4gcGxhbk9yaWdpbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxl ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwppbmRleCBkZDUz YzgyYjJhOC4uNGRmZTkwODc1NDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5 anVtYmxlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMK QEAgLTc4OSw4ICs3ODksMTAgQEAgQ29tcExvY2F0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIpCiB9CiAKIC8qCi0gKiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5kIGFuIGFycmF5 IG9mIGNvbnN0YW50LWxvY2F0aW9uIHJlY29yZHMsCi0gKiBmaWxsIGluIHRoZSB0ZXh0dWFsIGxl bmd0aHMgb2YgdGhvc2UgY29uc3RhbnRzIGluIEp1bWJsZVN0YXRlLgorICogR2l2ZW4gYSB2YWxp ZCBTUUwgc3RyaW5nIGFuZCBhbiBhcnJheSBvZiBjb25zdGFudC1sb2NhdGlvbiByZWNvcmRzLCBy ZXR1cm4KKyAqIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29uc3RhbnRzIGluIGEgbmV3 bHkgYWxsb2NhdGVkIExvY2F0aW9uTGVuCisgKiBhcnJheSwgb3IgTlVMTCBpZiB0aGVyZSBhcmUg bm8gY29uc3RhbnRzLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKKyAqIHRvIHBm cmVlIHRoZSByZXN1bHQsIGlmIG5lY2Vzc2FyeS4KICAqCiAgKiBUaGUgY29uc3RhbnRzIG1heSB1 c2UgYW55IGFsbG93ZWQgY29uc3RhbnQgc3ludGF4LCBzdWNoIGFzIGZsb2F0IGxpdGVyYWxzLAog ICogYml0LXN0cmluZ3MsIHNpbmdsZS1xdW90ZWQgc3RyaW5ncyBhbmQgZG9sbGFyLXF1b3RlZCBz dHJpbmdzLiAgVGhpcyBpcwpAQCAtODAzLDggKzgwNSw4IEBAIENvbXBMb2NhdGlvbihjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQogICogYSBuZWdhdGl2ZSBudW1lcmljIGNvbnN0YW50LiAg VGhpcyBwcmVjbHVkZXMgdGhlcmUgZXZlciBiZWluZyBhbm90aGVyCiAgKiByZWFzb24gZm9yIGEg Y29uc3RhbnQgdG8gc3RhcnQgd2l0aCBhICctJy4KICAqLwotc3RhdGljIHZvaWQKLVNldENvbnN0 YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKK3N0YXRp YyBMb2NhdGlvbkxlbiAqCitTZXRDb25zdGFudExlbmd0aHMoY29uc3QgSnVtYmxlU3RhdGUgKmpz dGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJICAgaW50IHF1ZXJ5X2xvYykKIHsKIAlMb2Nh dGlvbkxlbiAqbG9jczsKQEAgLTgxMywxNCArODE1LDIwIEBAIFNldENvbnN0YW50TGVuZ3RocyhK dW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAljb3JlX1lZU1RZUEUgeXls dmFsOwogCVlZTFRZUEUJCXl5bGxvYzsKIAorCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQg PT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBDb3B5IGNvbnN0YW50IGxvY2F0aW9ucyB0byBh dm9pZCBtb2RpZnlpbmcganN0YXRlICovCisJbG9jcyA9IHBhbGxvYyhqc3RhdGUtPmNsb2NhdGlv bnNfY291bnQgKiBzaXplb2YoTG9jYXRpb25MZW4pKTsKKwltZW1jcHkobG9jcywganN0YXRlLT5j bG9jYXRpb25zLCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQgKiBzaXplb2YoTG9jYXRpb25MZW4p KTsKKwogCS8qCiAJICogU29ydCB0aGUgcmVjb3JkcyBieSBsb2NhdGlvbiBzbyB0aGF0IHdlIGNh biBwcm9jZXNzIHRoZW0gaW4gb3JkZXIgd2hpbGUKIAkgKiBzY2FubmluZyB0aGUgcXVlcnkgdGV4 dC4KIAkgKi8KIAlpZiAoanN0YXRlLT5jbG9jYXRpb25zX2NvdW50ID4gMSkKLQkJcXNvcnQoanN0 YXRlLT5jbG9jYXRpb25zLCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQsCisJCXFzb3J0KGxvY3Ms IGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCwKIAkJCSAgc2l6ZW9mKExvY2F0aW9uTGVuKSwgQ29t cExvY2F0aW9uKTsKLQlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOwogCiAJLyogaW5pdGlhbGl6 ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCiAJeXlz Y2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LApAQCAtOTA4LDYgKzkxNiw4IEBAIFNldENvbnN0 YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAl9CiAK IAlzY2FubmVyX2ZpbmlzaCh5eXNjYW5uZXIpOworCisJcmV0dXJuIGxvY3M7CiB9CiAKIC8qCkBA IC05MjYsNyArOTM2LDcgQEAgU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUs IGNvbnN0IGNoYXIgKnF1ZXJ5LAogICogUmV0dXJucyBhIHBhbGxvYydkIHN0cmluZy4KICAqLwog Y2hhciAqCi1HZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25z dCBjaGFyICpxdWVyeSwKK0dlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KGNvbnN0IEp1bWJsZVN0YXRl ICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJaW50IHF1ZXJ5X2xvYywgaW50ICpx dWVyeV9sZW5fcCkKIHsKIAljaGFyCSAgICpub3JtX3F1ZXJ5OwpAQCAtOTM4LDEyICs5NDgsMTMg QEAgR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hh ciAqcXVlcnksCiAJCQkJbGFzdF9vZmYgPSAwLAkvKiBPZmZzZXQgZnJvbSBzdGFydCBmb3IgcHJl dmlvdXMgdG9rICovCiAJCQkJbGFzdF90b2tfbGVuID0gMDsJLyogTGVuZ3RoIChpbiBieXRlcykg b2YgdGhhdCB0b2sgKi8KIAlpbnQJCQludW1fY29uc3RhbnRzX3JlcGxhY2VkID0gMDsKKwlMb2Nh dGlvbkxlbiAqbG9jcyA9IE5VTEw7CiAKIAkvKgogCSAqIFNldCBjb25zdGFudHMnIGxlbmd0aHMg aW4gSnVtYmxlU3RhdGUsIGFzIG9ubHkgbG9jYXRpb25zIGFyZSBzZXQgZHVyaW5nCiAJICogRG9K dW1ibGUoKS4gTm90ZSB0aGlzIGFsc28gZW5zdXJlcyB0aGUgaXRlbXMgYXJlIHNvcnRlZCBieSBs b2NhdGlvbi4KIAkgKi8KLQlTZXRDb25zdGFudExlbmd0aHMoanN0YXRlLCBxdWVyeSwgcXVlcnlf bG9jKTsKKwlsb2NzID0gU2V0Q29uc3RhbnRMZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xv Yyk7CiAKIAkvKgogCSAqIEFsbG93IGZvciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRo ZSBjb25zdGFudHMgdGhleSByZXBsYWNlLgpAQCAtOTY5LDE1ICs5ODAsMTUgQEAgR2VuZXJhdGVO b3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJ CSAqIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIG5leHQgaXRlcmF0aW9uIChvciBhZnRlciB0aGUgbG9v cCBpcyBkb25lKSwKIAkJICogd2hpY2ggaXMgYSBiaXQgb2RkIGJ1dCBzZWVtcyB0byB3b3JrIG9r YXkgaW4gbW9zdCBjYXNlcy4KIAkJICovCi0JCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNbaV0uZXh0 ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhhc19zcXVhc2hlZF9saXN0cykKKwkJaWYgKGxvY3NbaV0u ZXh0ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhhc19zcXVhc2hlZF9saXN0cykKIAkJCWNvbnRpbnVl OwogCi0JCW9mZiA9IGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5sb2NhdGlvbjsKKwkJb2ZmID0gbG9j c1tpXS5sb2NhdGlvbjsKIAogCQkvKiBBZGp1c3QgdGhlIGNvbnN0YW50J3MgbG9jYXRpb24gKHNl ZSBTZXRDb25zdGFudExlbmd0aHMpICovCiAJCW9mZiAtPSBxdWVyeV9sb2M7CiAKLQkJdG9rX2xl biA9IGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5sZW5ndGg7CisJCXRva19sZW4gPSBsb2NzW2ldLmxl bmd0aDsKIAogCQlpZiAodG9rX2xlbiA8IDApCiAJCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55 IGR1cGxpY2F0ZXMgKi8KQEAgLTk5Niw3ICsxMDA3LDcgQEAgR2VuZXJhdGVOb3JtYWxpemVkUXVl cnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCSAqLwogCQluX3F1 ZXJfbG9jICs9IHNwcmludGYobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsICIkJWQlcyIsCiAJCQkJ CQkJICBudW1fY29uc3RhbnRzX3JlcGxhY2VkICsgMSArIGpzdGF0ZS0+aGlnaGVzdF9leHRlcm5f cGFyYW1faWQsCi0JCQkJCQkJICBqc3RhdGUtPmNsb2NhdGlvbnNbaV0uc3F1YXNoZWQgPyAiIC8q LCAuLi4gKi8iIDogIiIpOworCQkJCQkJCSAgbG9jc1tpXS5zcXVhc2hlZCA/ICIgLyosIC4uLiAq LyIgOiAiIik7CiAJCW51bV9jb25zdGFudHNfcmVwbGFjZWQrKzsKIAogCQkvKiBtb3ZlIGZvcndh cmQgKi8KQEAgLTEwMDUsNiArMTAxNiwxMCBAQCBHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShKdW1i bGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAkJbGFzdF90b2tfbGVuID0gdG9r X2xlbjsKIAl9CiAKKwkvKiBDbGVhbiB1cCB0ZW1wb3JhcnkgbG9jYXRpb24gYXJyYXkgYmVmb3Jl IGFueSBhc3NlcnRpb25zICovCisJaWYgKGxvY3MpCisJCXBmcmVlKGxvY3MpOworCiAJLyoKIAkg KiBXZSd2ZSBjb3BpZWQgdXAgdW50aWwgdGhlIGxhc3QgaWdub3JhYmxlIGNvbnN0YW50LiAgQ29w eSBvdmVyIHRoZQogCSAqIHJlbWFpbmluZyBieXRlcyBvZiB0aGUgb3JpZ2luYWwgcXVlcnkgc3Ry aW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5kZXggY2I4NzQxYjFkMDUuLmJjM2RjNGQ4NDZm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAgLTkxLDcgKzkxLDcgQEAgZXh0ZXJuIFBHRExM SU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lkOwogCiAKIGV4dGVybiBjb25zdCBjaGFyICpDbGVh blF1ZXJ5dGV4dChjb25zdCBjaGFyICpxdWVyeSwgaW50ICpsb2NhdGlvbiwgaW50ICpsZW4pOwot ZXh0ZXJuIGNoYXIgKkdlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUs IGNvbnN0IGNoYXIgKnF1ZXJ5LAorZXh0ZXJuIGNoYXIgKkdlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5 KGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJCQkJ IGludCBxdWVyeV9sb2MsIGludCAqcXVlcnlfbGVuX3ApOwogZXh0ZXJuIEp1bWJsZVN0YXRlICpK dW1ibGVRdWVyeShRdWVyeSAqcXVlcnkpOwogZXh0ZXJuIHZvaWQgRW5hYmxlUXVlcnlJZCh2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmggYi9zcmMvaW5jbHVk ZS9wYXJzZXIvYW5hbHl6ZS5oCmluZGV4IGYyOWVkMDNiNDc2Li5mODBkYTcyOTMzYyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJz ZXIvYW5hbHl6ZS5oCkBAIC0yMSw3ICsyMSw3IEBACiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGF0IGVuZCBvZiBwYXJzZSBhbmFseXNpcyAqLwogdHlwZWRlZiB2b2lkICgqcG9z dF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSkgKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJ CQkJICBRdWVyeSAqcXVlcnksCi0JCQkJCQkJCQkJCSAgSnVtYmxlU3RhdGUgKmpzdGF0ZSk7CisJ CQkJCQkJCQkJCSAgY29uc3QgSnVtYmxlU3RhdGUgKmpzdGF0ZSk7CiBleHRlcm4gUEdETExJTVBP UlQgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSBwb3N0X3BhcnNlX2FuYWx5emVfaG9vazsK IAogCi0tIAoyLjQzLjAKCg== --000000000000fcedb40647bde9fe Content-Type: application/octet-stream; name="v4-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Disposition: attachment; filename="v4-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk319odh0 RnJvbSA2Mzc0MWFlYzJjYTQ4OWQwNjZlZDRjZGM4ZjUwZWMzNmI3ODk0ZmZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVGh1LCAxOCBEZWMgMjAyNSAxODo1OTozMSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggdjQgMS8yXSBwZ19zdGF0X3N0YXRlbWVudHM6IE1vdmUgcXVlcnkgbm9ybWFsaXphdGlv biB0byBjb3JlCgpwZ19zdGF0X3N0YXRlbWVudHMgd2FzIG1vZGlmeWluZyBjb3JlIGdlbmVyYXRl ZCBKdW1ibGVTdGF0ZSBpbnN0YW5jZXMKYnkgY2FsbGluZyBmaWxsX2luX2NvbnN0YW50X2xlbmd0 aHMoKSB2aWEgZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeSgpCnRvIHBvcHVsYXRlIGNvbnN0YW50 IGxlbmd0aHMuIFRoaXMgY3JlYXRlcyBwcm9ibGVtcyBzaW5jZSBleHRlbnNpb25zCnNob3VsZCBu b3QgbW9kaWZ5IHNoYXJlZCBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IG1heSBiZSB1c2VkIGJ5 Cm90aGVyIGV4dGVuc2lvbnMsIGFuZCB0aGlzIGNvdWxkIGJlIGNvbnNpZGVyZWQgYSBsYXllcmlu ZyB2aW9sYXRpb24uCgpNb3ZlIHF1ZXJ5IG5vcm1hbGl6YXRpb24gZnVuY3Rpb25zIHRvIGNvcmUg YXMgYSBnbG9iYWwgZnVuY3Rpb24gdG8KZml4IHRoaXMuIEV4dGVuc2lvbnMgbm93IGNhbGwgR2Vu ZXJhdGVOb3JtYWxpemVkUXVlcnkoKSBpbnN0ZWFkIG9mCmRpcmVjdGx5IG1vZGlmeWluZyBKdW1i bGVTdGF0ZS4KClRoaXMgY2hhbmdlIGFsc28gYWRkcmVzc2VzIGNvZGUgZHVwbGljYXRpb24sIGFz IHNldmVyYWwgZXh0ZW5zaW9ucwpoYXZlIGJlZW4gY29weWluZyBnZW5lcmF0ZV9ub3JtYWxpemVk X3F1ZXJ5KCkgdG8gaW1wbGVtZW50IHRoZWlyIG93bgpub3JtYWxpemF0aW9uLiBUaGUgbmV3IGNv cmUgQVBJIHByb3ZpZGVzIGEgc2luZ2xlLCBjb25zaXN0ZW50CmltcGxlbWVudGF0aW9uIGZvciBh bGwgZXh0ZW5zaW9ucyB0byB1c2UuCgpGdW5jdGlvbnMgYXJlIHJlbmFtZWQgdG8gbWF0Y2ggY29y ZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbW1lbnRzCmFyZSB1cGRhdGVkIGZvciBjbGFyaXR5 LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1UlowdFpwNXFVMGlrWkVFcUpu eHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAyNzYgKy0tLS0tLS0tLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgICAgICAgICAgfCAy NDggKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCAgICAg ICAgICAgICAgIHwgICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKyksIDI2 NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jCmluZGV4IDM5MjA4ZjgwYjViLi5iOTA4OTE4NTlkOSAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTUwLDcgKzUw LDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKLSNpbmNsdWRlICJj b21tb24vaW50LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUg ImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC01OSw3ICs1OCw2IEBACiAjaW5j bHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5o IgogI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCi0jaW5jbHVkZSAicGFyc2VyL3NjYW5uZXIu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKQEAgLTM3NywxMSArMzc1LDYgQEAgc3RhdGljIGNoYXIgKnF0ZXh0 X2ZldGNoKFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLAogc3RhdGljIGJvb2wgbmVl ZF9nY19xdGV4dHModm9pZCk7CiBzdGF0aWMgdm9pZCBnY19xdGV4dHModm9pZCk7CiBzdGF0aWMg VGltZXN0YW1wVHogZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0IHF1ZXJ5 aWQsIGJvb2wgbWlubWF4X29ubHkpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX25vcm1hbGl6ZWRf cXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCi0JCQkJCQkJCQkg ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKTsKLXN0YXRpYyB2b2lkIGZpbGxfaW5f Y29uc3RhbnRfbGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwK LQkJCQkJCQkJCSBpbnQgcXVlcnlfbG9jKTsKLXN0YXRpYyBpbnQJY29tcF9sb2NhdGlvbihjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIAogCiAvKgpAQCAtMTM1OSw5ICsxMzUyLDE2IEBA IHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWlmIChqc3Rh dGUpCiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7Ci0JCQlub3JtX3F1ZXJ5ID0g Z2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAotCQkJCQkJCQkJCQkJICAg cXVlcnlfbG9jYXRpb24sCi0JCQkJCQkJCQkJCQkgICAmcXVlcnlfbGVuKTsKKworCQkJLyoKKwkJ CSAqIGdlbmVyYXRlIHRoZSBub3JtYWxpemVkIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlIG5vcm1hbGl6 ZWQKKwkJCSAqIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkgZGVwZW5kaW5nIG9uIGp1c3Qg d2hpY2gKKwkJCSAqICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgaGFz aHRhYmxlIGVudHJ5LiBXZQorCQkJICogYXNzdW1lIHRoaXMgaXMgT0suCisJCQkgKi8KKwkJCW5v cm1fcXVlcnkgPSBHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShqc3RhdGUsIHF1ZXJ5LAorCQkJCQkJ CQkJCQkJIHF1ZXJ5X2xvY2F0aW9uLAorCQkJCQkJCQkJCQkJICZxdWVyeV9sZW4pOwogCQkJTFdM b2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOwogCQl9CiAKQEAgLTI4MjMsMjU5ICsy ODIzLDMgQEAgcmVsZWFzZV9sb2NrOgogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotCi0vKgot ICogR2VuZXJhdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0cmluZyB0aGF0 IHdpbGwgYmUgdXNlZCB0bwotICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJpZXMuCi0gKgot ICogTm90ZSB0aGF0IHRoZSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkg ZGVwZW5kaW5nIG9uCi0gKiBqdXN0IHdoaWNoICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRv IGNyZWF0ZSB0aGUgaGFzaHRhYmxlIGVudHJ5LgotICogV2UgYXNzdW1lIHRoaXMgaXMgT0suCi0g KgotICogSWYgcXVlcnlfbG9jID4gMCwgdGhlbiAicXVlcnkiIGhhcyBiZWVuIGFkdmFuY2VkIGJ5 IHRoYXQgbXVjaCBjb21wYXJlZCB0bwotICogdGhlIG9yaWdpbmFsIHN0cmluZyBzdGFydCwgc28g d2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHByb3ZpZGVkIGxvY2F0aW9ucwotICogdG8gY29tcGVu c2F0ZS4gIChUaGlzIGxldHMgdXMgYXZvaWQgcmUtc2Nhbm5pbmcgc3RhdGVtZW50cyBiZWZvcmUg dGhlIG9uZQotICogb2YgaW50ZXJlc3QsIHNvIGl0J3Mgd29ydGggZG9pbmcuKQotICoKLSAqICpx dWVyeV9sZW5fcCBjb250YWlucyB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCwgYW5kIGlzIHVwZGF0 ZWQgd2l0aAotICogdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoIG9uIGV4aXQuICBUaGUgcmVzdWx0 aW5nIHN0cmluZyBtaWdodCBiZSBsb25nZXIKLSAqIG9yIHNob3J0ZXIgZGVwZW5kaW5nIG9uIHdo YXQgaGFwcGVucyB3aXRoIHJlcGxhY2VtZW50IG9mIGNvbnN0YW50cy4KLSAqCi0gKiBSZXR1cm5z IGEgcGFsbG9jJ2Qgc3RyaW5nLgotICovCi1zdGF0aWMgY2hhciAqCi1nZW5lcmF0ZV9ub3JtYWxp emVkX3F1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAotCQkJCQkJ ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKQotewotCWNoYXIJICAgKm5vcm1fcXVl cnk7Ci0JaW50CQkJcXVlcnlfbGVuID0gKnF1ZXJ5X2xlbl9wOwotCWludAkJCW5vcm1fcXVlcnlf YnVmbGVuLAkvKiBTcGFjZSBhbGxvd2VkIGZvciBub3JtX3F1ZXJ5ICovCi0JCQkJbGVuX3RvX3dy dCwJCS8qIExlbmd0aCAoaW4gYnl0ZXMpIHRvIHdyaXRlICovCi0JCQkJcXVlcl9sb2MgPSAwLAkv KiBTb3VyY2UgcXVlcnkgYnl0ZSBsb2NhdGlvbiAqLwotCQkJCW5fcXVlcl9sb2MgPSAwLCAvKiBO b3JtYWxpemVkIHF1ZXJ5IGJ5dGUgbG9jYXRpb24gKi8KLQkJCQlsYXN0X29mZiA9IDAsCS8qIE9m ZnNldCBmcm9tIHN0YXJ0IGZvciBwcmV2aW91cyB0b2sgKi8KLQkJCQlsYXN0X3Rva19sZW4gPSAw OwkvKiBMZW5ndGggKGluIGJ5dGVzKSBvZiB0aGF0IHRvayAqLwotCWludAkJCW51bV9jb25zdGFu dHNfcmVwbGFjZWQgPSAwOwotCi0JLyoKLQkgKiBHZXQgY29uc3RhbnRzJyBsZW5ndGhzIChjb3Jl IHN5c3RlbSBvbmx5IGdpdmVzIHVzIGxvY2F0aW9ucykuICBOb3RlCi0JICogdGhpcyBhbHNvIGVu c3VyZXMgdGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24uCi0JICovCi0JZmlsbF9pbl9j b25zdGFudF9sZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xvYyk7Ci0KLQkvKgotCSAqIEFs bG93IGZvciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRoZSBjb25zdGFudHMgdGhleSBy ZXBsYWNlLgotCSAqIENvbnN0YW50cyBtdXN0IHRha2UgYXQgbGVhc3Qgb25lIGJ5dGUgaW4gdGV4 dCBmb3JtLCB3aGlsZSBhICRuIHN5bWJvbAotCSAqIGNlcnRhaW5seSBpc24ndCBtb3JlIHRoYW4g MTEgYnl0ZXMsIGV2ZW4gaWYgbiByZWFjaGVzIElOVF9NQVguICBXZQotCSAqIGNvdWxkIHJlZmlu ZSB0aGF0IGxpbWl0IGJhc2VkIG9uIHRoZSBtYXggdmFsdWUgb2YgbiBmb3IgdGhlIGN1cnJlbnQK LQkgKiBxdWVyeSwgYnV0IGl0IGhhcmRseSBzZWVtcyB3b3J0aCBhbnkgZXh0cmEgZWZmb3J0IHRv IGRvIHNvLgotCSAqLwotCW5vcm1fcXVlcnlfYnVmbGVuID0gcXVlcnlfbGVuICsganN0YXRlLT5j bG9jYXRpb25zX2NvdW50ICogMTA7Ci0KLQkvKiBBbGxvY2F0ZSByZXN1bHQgYnVmZmVyICovCi0J bm9ybV9xdWVyeSA9IHBhbGxvYyhub3JtX3F1ZXJ5X2J1ZmxlbiArIDEpOwotCi0JZm9yIChpbnQg aSA9IDA7IGkgPCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQ7IGkrKykKLQl7Ci0JCWludAkJCW9m ZiwJCS8qIE9mZnNldCBmcm9tIHN0YXJ0IGZvciBjdXIgdG9rICovCi0JCQkJCXRva19sZW47CS8q IExlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoYXQgdG9rICovCi0KLQkJLyoKLQkJICogSWYgd2UgaGF2 ZSBhbiBleHRlcm5hbCBwYXJhbSBhdCB0aGlzIGxvY2F0aW9uLCBidXQgbm8gbGlzdHMgYXJlCi0J CSAqIGJlaW5nIHNxdWFzaGVkIGFjcm9zcyB0aGUgcXVlcnksIHRoZW4gd2Ugc2tpcCBoZXJlOyB0 aGlzIHdpbGwgbWFrZQotCQkgKiB1cyBwcmludCB0aGUgY2hhcmFjdGVycyBmb3VuZCBpbiB0aGUg b3JpZ2luYWwgcXVlcnkgdGhhdCByZXByZXNlbnQKLQkJICogdGhlIHBhcmFtZXRlciBpbiB0aGUg bmV4dCBpdGVyYXRpb24gKG9yIGFmdGVyIHRoZSBsb29wIGlzIGRvbmUpLAotCQkgKiB3aGljaCBp cyBhIGJpdCBvZGQgYnV0IHNlZW1zIHRvIHdvcmsgb2theSBpbiBtb3N0IGNhc2VzLgotCQkgKi8K LQkJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5leHRlcm5fcGFyYW0gJiYgIWpzdGF0ZS0+aGFz X3NxdWFzaGVkX2xpc3RzKQotCQkJY29udGludWU7Ci0KLQkJb2ZmID0ganN0YXRlLT5jbG9jYXRp b25zW2ldLmxvY2F0aW9uOwotCi0JCS8qIEFkanVzdCByZWNvcmRlZCBsb2NhdGlvbiBpZiB3ZSdy ZSBkZWFsaW5nIHdpdGggcGFydGlhbCBzdHJpbmcgKi8KLQkJb2ZmIC09IHF1ZXJ5X2xvYzsKLQot CQl0b2tfbGVuID0ganN0YXRlLT5jbG9jYXRpb25zW2ldLmxlbmd0aDsKLQotCQlpZiAodG9rX2xl biA8IDApCi0JCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55IGR1cGxpY2F0ZXMgKi8KLQotCQkv KiBDb3B5IG5leHQgY2h1bmsgKHdoYXQgcHJlY2VkZXMgdGhlIG5leHQgY29uc3RhbnQpICovCi0J CWxlbl90b193cnQgPSBvZmYgLSBsYXN0X29mZjsKLQkJbGVuX3RvX3dydCAtPSBsYXN0X3Rva19s ZW47Ci0JCUFzc2VydChsZW5fdG9fd3J0ID49IDApOwotCQltZW1jcHkobm9ybV9xdWVyeSArIG5f cXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQpOwotCQluX3F1ZXJfbG9jICs9 IGxlbl90b193cnQ7Ci0KLQkJLyoKLQkJICogQW5kIGluc2VydCBhIHBhcmFtIHN5bWJvbCBpbiBw bGFjZSBvZiB0aGUgY29uc3RhbnQgdG9rZW47IGFuZCwgaWYKLQkJICogd2UgaGF2ZSBhIHNxdWFz aGFibGUgbGlzdCwgaW5zZXJ0IGEgcGxhY2Vob2xkZXIgY29tbWVudCBzdGFydGluZwotCQkgKiBm cm9tIHRoZSBsaXN0J3Mgc2Vjb25kIHZhbHVlLgotCQkgKi8KLQkJbl9xdWVyX2xvYyArPSBzcHJp bnRmKG5vcm1fcXVlcnkgKyBuX3F1ZXJfbG9jLCAiJCVkJXMiLAotCQkJCQkJCSAgbnVtX2NvbnN0 YW50c19yZXBsYWNlZCArIDEgKyBqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkLAotCQkJ CQkJCSAganN0YXRlLT5jbG9jYXRpb25zW2ldLnNxdWFzaGVkID8gIiAvKiwgLi4uICovIiA6ICIi KTsKLQkJbnVtX2NvbnN0YW50c19yZXBsYWNlZCsrOwotCi0JCS8qIG1vdmUgZm9yd2FyZCAqLwot CQlxdWVyX2xvYyA9IG9mZiArIHRva19sZW47Ci0JCWxhc3Rfb2ZmID0gb2ZmOwotCQlsYXN0X3Rv a19sZW4gPSB0b2tfbGVuOwotCX0KLQotCS8qCi0JICogV2UndmUgY29waWVkIHVwIHVudGlsIHRo ZSBsYXN0IGlnbm9yYWJsZSBjb25zdGFudC4gIENvcHkgb3ZlciB0aGUKLQkgKiByZW1haW5pbmcg Ynl0ZXMgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IHN0cmluZy4KLQkgKi8KLQlsZW5fdG9fd3J0ID0g cXVlcnlfbGVuIC0gcXVlcl9sb2M7Ci0KLQlBc3NlcnQobGVuX3RvX3dydCA+PSAwKTsKLQltZW1j cHkobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQp OwotCW5fcXVlcl9sb2MgKz0gbGVuX3RvX3dydDsKLQotCUFzc2VydChuX3F1ZXJfbG9jIDw9IG5v cm1fcXVlcnlfYnVmbGVuKTsKLQlub3JtX3F1ZXJ5W25fcXVlcl9sb2NdID0gJ1wwJzsKLQotCSpx dWVyeV9sZW5fcCA9IG5fcXVlcl9sb2M7Ci0JcmV0dXJuIG5vcm1fcXVlcnk7Ci19Ci0KLS8qCi0g KiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIGNvbnN0YW50LWxvY2F0 aW9uIHJlY29yZHMsCi0gKiBmaWxsIGluIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29u c3RhbnRzLgotICoKLSAqIFRoZSBjb25zdGFudHMgbWF5IHVzZSBhbnkgYWxsb3dlZCBjb25zdGFu dCBzeW50YXgsIHN1Y2ggYXMgZmxvYXQgbGl0ZXJhbHMsCi0gKiBiaXQtc3RyaW5ncywgc2luZ2xl LXF1b3RlZCBzdHJpbmdzIGFuZCBkb2xsYXItcXVvdGVkIHN0cmluZ3MuICBUaGlzIGlzCi0gKiBh Y2NvbXBsaXNoZWQgYnkgdXNpbmcgdGhlIHB1YmxpYyBBUEkgZm9yIHRoZSBjb3JlIHNjYW5uZXIu Ci0gKgotICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhhdCB0aGUgc3RyaW5n IGlzIGEgdmFsaWQgU1FMIHN0YXRlbWVudAotICogd2l0aCBjb25zdGFudHMgYXQgdGhlIGluZGlj YXRlZCBsb2NhdGlvbnMuICBTaW5jZSBpbiBwcmFjdGljZSB0aGUgc3RyaW5nCi0gKiBoYXMgYWxy ZWFkeSBiZWVuIHBhcnNlZCwgYW5kIHRoZSBsb2NhdGlvbnMgdGhhdCB0aGUgY2FsbGVyIHByb3Zp ZGVzIHdpbGwKLSAqIGhhdmUgb3JpZ2luYXRlZCBmcm9tIHdpdGhpbiB0aGUgYXV0aG9yaXRhdGl2 ZSBwYXJzZXIsIHRoaXMgc2hvdWxkIG5vdCBiZQotICogYSBwcm9ibGVtLgotICoKLSAqIE11bHRp cGxlIGNvbnN0YW50cyBjYW4gaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbi4gIFdlIHJlc2V0IGxlbmd0 aHMgb2YgdGhvc2UKLSAqIHBhc3QgdGhlIGZpcnN0IHRvIC0xIHNvIHRoYXQgdGhleSBjYW4gbGF0 ZXIgYmUgaWdub3JlZC4KLSAqCi0gKiBJZiBxdWVyeV9sb2MgPiAwLCB0aGVuICJxdWVyeSIgaGFz IGJlZW4gYWR2YW5jZWQgYnkgdGhhdCBtdWNoIGNvbXBhcmVkIHRvCi0gKiB0aGUgb3JpZ2luYWwg c3RyaW5nIHN0YXJ0LCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgcHJvdmlkZWQgbG9jYXRp b25zCi0gKiB0byBjb21wZW5zYXRlLiAgKFRoaXMgbGV0cyB1cyBhdm9pZCByZS1zY2FubmluZyBz dGF0ZW1lbnRzIGJlZm9yZSB0aGUgb25lCi0gKiBvZiBpbnRlcmVzdCwgc28gaXQncyB3b3J0aCBk b2luZy4pCi0gKgotICogTi5CLiBUaGVyZSBpcyBhbiBhc3N1bXB0aW9uIHRoYXQgYSAnLScgY2hh cmFjdGVyIGF0IGEgQ29uc3QgbG9jYXRpb24gYmVnaW5zCi0gKiBhIG5lZ2F0aXZlIG51bWVyaWMg Y29uc3RhbnQuICBUaGlzIHByZWNsdWRlcyB0aGVyZSBldmVyIGJlaW5nIGFub3RoZXIKLSAqIHJl YXNvbiBmb3IgYSBjb25zdGFudCB0byBzdGFydCB3aXRoIGEgJy0nLgotICovCi1zdGF0aWMgdm9p ZAotZmlsbF9pbl9jb25zdGFudF9sZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNo YXIgKnF1ZXJ5LAotCQkJCQkJIGludCBxdWVyeV9sb2MpCi17Ci0JTG9jYXRpb25MZW4gKmxvY3M7 Ci0JY29yZV95eXNjYW5fdCB5eXNjYW5uZXI7Ci0JY29yZV95eV9leHRyYV90eXBlIHl5ZXh0cmE7 Ci0JY29yZV9ZWVNUWVBFIHl5bHZhbDsKLQlZWUxUWVBFCQl5eWxsb2M7Ci0KLQkvKgotCSAqIFNv cnQgdGhlIHJlY29yZHMgYnkgbG9jYXRpb24gc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyB0aGVtIGlu IG9yZGVyIHdoaWxlCi0JICogc2Nhbm5pbmcgdGhlIHF1ZXJ5IHRleHQuCi0JICovCi0JaWYgKGpz dGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA+IDEpCi0JCXFzb3J0KGpzdGF0ZS0+Y2xvY2F0aW9ucywg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50LAotCQkJICBzaXplb2YoTG9jYXRpb25MZW4pLCBjb21w X2xvY2F0aW9uKTsKLQlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOwotCi0JLyogaW5pdGlhbGl6 ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCi0JeXlz Y2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LAotCQkJCQkJCSAmeXlleHRyYSwKLQkJCQkJCQkg JlNjYW5LZXl3b3JkcywKLQkJCQkJCQkgU2NhbktleXdvcmRUb2tlbnMpOwotCi0JLyogd2UgZG9u J3Qgd2FudCB0byByZS1lbWl0IGFueSBlc2NhcGUgc3RyaW5nIHdhcm5pbmdzICovCi0JeXlleHRy YS5lc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBmYWxzZTsKLQotCS8qIFNlYXJjaCBmb3IgZWFjaCBj b25zdGFudCwgaW4gc2VxdWVuY2UgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IGpzdGF0ZS0+Y2xv Y2F0aW9uc19jb3VudDsgaSsrKQotCXsKLQkJaW50CQkJbG9jOwotCQlpbnQJCQl0b2s7Ci0KLQkJ LyogSWdub3JlIGNvbnN0YW50cyBhZnRlciB0aGUgZmlyc3Qgb25lIGluIHRoZSBzYW1lIGxvY2F0 aW9uICovCi0JCWlmIChpID4gMCAmJiBsb2NzW2ldLmxvY2F0aW9uID09IGxvY3NbaSAtIDFdLmxv Y2F0aW9uKQotCQl7Ci0JCQlsb2NzW2ldLmxlbmd0aCA9IC0xOwotCQkJY29udGludWU7Ci0JCX0K LQotCQlpZiAobG9jc1tpXS5zcXVhc2hlZCkKLQkJCWNvbnRpbnVlOwkJCS8qIHNxdWFzaGFibGUg bGlzdCwgaWdub3JlICovCi0KLQkJLyogQWRqdXN0IHJlY29yZGVkIGxvY2F0aW9uIGlmIHdlJ3Jl IGRlYWxpbmcgd2l0aCBwYXJ0aWFsIHN0cmluZyAqLwotCQlsb2MgPSBsb2NzW2ldLmxvY2F0aW9u IC0gcXVlcnlfbG9jOwotCQlBc3NlcnQobG9jID49IDApOwotCi0JCS8qCi0JCSAqIFdlIGhhdmUg YSB2YWxpZCBsb2NhdGlvbiBmb3IgYSBjb25zdGFudCB0aGF0J3Mgbm90IGEgZHVwZS4gTGV4Ci0J CSAqIHRva2VucyB1bnRpbCB3ZSBmaW5kIHRoZSBkZXNpcmVkIGNvbnN0YW50LgotCQkgKi8KLQkJ Zm9yICg7OykKLQkJewotCQkJdG9rID0gY29yZV95eWxleCgmeXlsdmFsLCAmeXlsbG9jLCB5eXNj YW5uZXIpOwotCi0JCQkvKiBXZSBzaG91bGQgbm90IGhpdCBlbmQtb2Ytc3RyaW5nLCBidXQgaWYg d2UgZG8sIGJlaGF2ZSBzYW5lbHkgKi8KLQkJCWlmICh0b2sgPT0gMCkKLQkJCQlicmVhazsJCQkv KiBvdXQgb2YgaW5uZXIgZm9yLWxvb3AgKi8KLQotCQkJLyoKLQkJCSAqIFdlIHNob3VsZCBmaW5k IHRoZSB0b2tlbiBwb3NpdGlvbiBleGFjdGx5LCBidXQgaWYgd2Ugc29tZWhvdwotCQkJICogcnVu IHBhc3QgaXQsIHdvcmsgd2l0aCB0aGF0LgotCQkJICovCi0JCQlpZiAoeXlsbG9jID49IGxvYykK LQkJCXsKLQkJCQlpZiAocXVlcnlbbG9jXSA9PSAnLScpCi0JCQkJewotCQkJCQkvKgotCQkJCQkg KiBJdCdzIGEgbmVnYXRpdmUgdmFsdWUgLSB0aGlzIGlzIHRoZSBvbmUgYW5kIG9ubHkgY2FzZQot CQkJCQkgKiB3aGVyZSB3ZSByZXBsYWNlIG1vcmUgdGhhbiBhIHNpbmdsZSB0b2tlbi4KLQkJCQkJ ICoKLQkJCQkJICogRG8gbm90IGNvbXBlbnNhdGUgZm9yIHRoZSBjb3JlIHN5c3RlbSdzIHNwZWNp YWwtY2FzZQotCQkJCQkgKiBhZGp1c3RtZW50IG9mIGxvY2F0aW9uIHRvIHRoYXQgb2YgdGhlIGxl YWRpbmcgJy0nCi0JCQkJCSAqIG9wZXJhdG9yIGluIHRoZSBldmVudCBvZiBhIG5lZ2F0aXZlIGNv bnN0YW50LiAgSXQgaXMKLQkJCQkJICogYWxzbyB1c2VmdWwgZm9yIG91ciBwdXJwb3NlcyB0byBz dGFydCBmcm9tIHRoZSBtaW51cwotCQkJCQkgKiBzeW1ib2wuICBJbiB0aGlzIHdheSwgcXVlcmll cyBsaWtlICJzZWxlY3QgKiBmcm9tIGZvbwotCQkJCQkgKiB3aGVyZSBiYXIgPSAxIiBhbmQgInNl bGVjdCAqIGZyb20gZm9vIHdoZXJlIGJhciA9IC0yIgotCQkJCQkgKiB3aWxsIGhhdmUgaWRlbnRp Y2FsIG5vcm1hbGl6ZWQgcXVlcnkgc3RyaW5ncy4KLQkJCQkJICovCi0JCQkJCXRvayA9IGNvcmVf eXlsZXgoJnl5bHZhbCwgJnl5bGxvYywgeXlzY2FubmVyKTsKLQkJCQkJaWYgKHRvayA9PSAwKQot CQkJCQkJYnJlYWs7CS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLwotCQkJCX0KLQotCQkJCS8q Ci0JCQkJICogV2Ugbm93IHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBmbGV4IGhhcyBwbGFj ZWQgYSB6ZXJvCi0JCQkJICogYnl0ZSBhZnRlciB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCB0b2tl biBpbiBzY2FuYnVmLgotCQkJCSAqLwotCQkJCWxvY3NbaV0ubGVuZ3RoID0gc3RybGVuKHl5ZXh0 cmEuc2NhbmJ1ZiArIGxvYyk7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIGZvci1sb29w ICovCi0JCQl9Ci0JCX0KLQotCQkvKiBJZiB3ZSBoaXQgZW5kLW9mLXN0cmluZywgZ2l2ZSB1cCwg bGVhdmluZyByZW1haW5pbmcgbGVuZ3RocyAtMSAqLwotCQlpZiAodG9rID09IDApCi0JCQlicmVh azsKLQl9Ci0KLQlzY2FubmVyX2ZpbmlzaCh5eXNjYW5uZXIpOwotfQotCi0vKgotICogY29tcF9s b2NhdGlvbjogY29tcGFyYXRvciBmb3IgcXNvcnRpbmcgTG9jYXRpb25MZW4gc3RydWN0cyBieSBs b2NhdGlvbgotICovCi1zdGF0aWMgaW50Ci1jb21wX2xvY2F0aW9uKGNvbnN0IHZvaWQgKmEsIGNv bnN0IHZvaWQgKmIpCi17Ci0JaW50CQkJbCA9ICgoY29uc3QgTG9jYXRpb25MZW4gKikgYSktPmxv Y2F0aW9uOwotCWludAkJCXIgPSAoKGNvbnN0IExvY2F0aW9uTGVuICopIGIpLT5sb2NhdGlvbjsK LQotCXJldHVybiBwZ19jbXBfczMyKGwsIHIpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVm dW5jcy5jCmluZGV4IGZmYzIzMGFmNDI3Li5kZDUzYzgyYjJhOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3F1 ZXJ5anVtYmxlZnVuY3MuYwpAQCAtNDAsMTAgKzQwLDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3Ry YW5zYW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjb21tb24v aGFzaGZuLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVt YmxlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAicGFyc2VyL3Nj YW5uZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvc2NhbnN1cC5oIgogCiAjZGVmaW5lIEpVTUJMRV9T SVpFCQkJCTEwMjQJLyogcXVlcnkgc2VyaWFsaXphdGlvbiBidWZmZXIgc2l6ZSAqLwpAQCAtNzcz LDMgKzc3NSwyNDkgQEAgX2p1bWJsZVJhbmdlVGJsRW50cnlfZXJlZihKdW1ibGVTdGF0ZSAqanN0 YXRlLAogCSAqLwogCUpVTUJMRV9TVFJJTkcoYWxpYXNuYW1lKTsKIH0KKworLyoKKyAqIENvbXBM b2NhdGlvbjogY29tcGFyYXRvciBmb3IgcXNvcnRpbmcgTG9jYXRpb25MZW4gc3RydWN0cyBieSBs b2NhdGlvbgorICovCitzdGF0aWMgaW50CitDb21wTG9jYXRpb24oY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYikKK3sKKwlpbnQJCQlsID0gKChjb25zdCBMb2NhdGlvbkxlbiAqKSBhKS0+bG9j YXRpb247CisJaW50CQkJciA9ICgoY29uc3QgTG9jYXRpb25MZW4gKikgYiktPmxvY2F0aW9uOwor CisJcmV0dXJuIHBnX2NtcF9zMzIobCwgcik7Cit9CisKKy8qCisgKiBHaXZlbiBhIHZhbGlkIFNR TCBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIGNvbnN0YW50LWxvY2F0aW9uIHJlY29yZHMsCisgKiBm aWxsIGluIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29uc3RhbnRzIGluIEp1bWJsZVN0 YXRlLgorICoKKyAqIFRoZSBjb25zdGFudHMgbWF5IHVzZSBhbnkgYWxsb3dlZCBjb25zdGFudCBz eW50YXgsIHN1Y2ggYXMgZmxvYXQgbGl0ZXJhbHMsCisgKiBiaXQtc3RyaW5ncywgc2luZ2xlLXF1 b3RlZCBzdHJpbmdzIGFuZCBkb2xsYXItcXVvdGVkIHN0cmluZ3MuICBUaGlzIGlzCisgKiBhY2Nv bXBsaXNoZWQgYnkgdXNpbmcgdGhlIHB1YmxpYyBBUEkgZm9yIHRoZSBjb3JlIHNjYW5uZXIuCisg KgorICogTXVsdGlwbGUgY29uc3RhbnRzIGNhbiBoYXZlIHRoZSBzYW1lIGxvY2F0aW9uLiAgV2Ug cmVzZXQgbGVuZ3RocyBvZiB0aG9zZQorICogcGFzdCB0aGUgZmlyc3QgdG8gLTEgc28gdGhhdCB0 aGV5IGNhbiBsYXRlciBiZSBpZ25vcmVkLgorICoKKyAqIE4uQi4gVGhlcmUgaXMgYW4gYXNzdW1w dGlvbiB0aGF0IGEgJy0nIGNoYXJhY3RlciBhdCBhIENvbnN0IGxvY2F0aW9uIGJlZ2lucworICog YSBuZWdhdGl2ZSBudW1lcmljIGNvbnN0YW50LiAgVGhpcyBwcmVjbHVkZXMgdGhlcmUgZXZlciBi ZWluZyBhbm90aGVyCisgKiByZWFzb24gZm9yIGEgY29uc3RhbnQgdG8gc3RhcnQgd2l0aCBhICct Jy4KKyAqLworc3RhdGljIHZvaWQKK1NldENvbnN0YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0 YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKKwkJCQkgICBpbnQgcXVlcnlfbG9jKQoreworCUxvY2F0 aW9uTGVuICpsb2NzOworCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyOworCWNvcmVfeXlfZXh0cmFf dHlwZSB5eWV4dHJhOworCWNvcmVfWVlTVFlQRSB5eWx2YWw7CisJWVlMVFlQRQkJeXlsbG9jOwor CisJLyoKKwkgKiBTb3J0IHRoZSByZWNvcmRzIGJ5IGxvY2F0aW9uIHNvIHRoYXQgd2UgY2FuIHBy b2Nlc3MgdGhlbSBpbiBvcmRlciB3aGlsZQorCSAqIHNjYW5uaW5nIHRoZSBxdWVyeSB0ZXh0Lgor CSAqLworCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQgPiAxKQorCQlxc29ydChqc3RhdGUt PmNsb2NhdGlvbnMsIGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCwKKwkJCSAgc2l6ZW9mKExvY2F0 aW9uTGVuKSwgQ29tcExvY2F0aW9uKTsKKwlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOworCisJ LyogaW5pdGlhbGl6ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNl cigpICovCisJeXlzY2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LAorCQkJCQkJCSAmeXlleHRy YSwKKwkJCQkJCQkgJlNjYW5LZXl3b3JkcywKKwkJCQkJCQkgU2NhbktleXdvcmRUb2tlbnMpOwor CisJLyogd2UgZG9uJ3Qgd2FudCB0byByZS1lbWl0IGFueSBlc2NhcGUgc3RyaW5nIHdhcm5pbmdz ICovCisJeXlleHRyYS5lc2NhcGVfc3RyaW5nX3dhcm5pbmcgPSBmYWxzZTsKKworCS8qIFNlYXJj aCBmb3IgZWFjaCBjb25zdGFudCwgaW4gc2VxdWVuY2UgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8 IGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudDsgaSsrKQorCXsKKwkJaW50CQkJbG9jOworCQlpbnQJ CQl0b2s7CisKKwkJLyogSWdub3JlIGNvbnN0YW50cyBhZnRlciB0aGUgZmlyc3Qgb25lIGluIHRo ZSBzYW1lIGxvY2F0aW9uICovCisJCWlmIChpID4gMCAmJiBsb2NzW2ldLmxvY2F0aW9uID09IGxv Y3NbaSAtIDFdLmxvY2F0aW9uKQorCQl7CisJCQlsb2NzW2ldLmxlbmd0aCA9IC0xOworCQkJY29u dGludWU7CisJCX0KKworCQlpZiAobG9jc1tpXS5zcXVhc2hlZCkKKwkJCWNvbnRpbnVlOwkJCS8q IHNxdWFzaGFibGUgbGlzdCwgaWdub3JlICovCisKKwkJLyoKKwkJICogQWRqdXN0IHRoZSBjb25z dGFudCdzIGxvY2F0aW9uIHVzaW5nIHRoZSBwcm92aWRlZCBzdGFydGluZyBsb2NhdGlvbgorCQkg KiBvZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQuIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIHNjYW5u aW5nIGEKKwkJICogbXVsdGktc3RhdGVtZW50IHN0cmluZyBmcm9tIHRoZSBiZWdpbm5pbmcuCisJ CSAqLworCQlsb2MgPSBsb2NzW2ldLmxvY2F0aW9uIC0gcXVlcnlfbG9jOworCQlBc3NlcnQobG9j ID49IDApOworCisJCS8qCisJCSAqIFdlIGhhdmUgYSB2YWxpZCBsb2NhdGlvbiBmb3IgYSBjb25z dGFudCB0aGF0J3Mgbm90IGEgZHVwZS4gTGV4CisJCSAqIHRva2VucyB1bnRpbCB3ZSBmaW5kIHRo ZSBkZXNpcmVkIGNvbnN0YW50LgorCQkgKi8KKwkJZm9yICg7OykKKwkJeworCQkJdG9rID0gY29y ZV95eWxleCgmeXlsdmFsLCAmeXlsbG9jLCB5eXNjYW5uZXIpOworCisJCQkvKiBXZSBzaG91bGQg bm90IGhpdCBlbmQtb2Ytc3RyaW5nLCBidXQgaWYgd2UgZG8sIGJlaGF2ZSBzYW5lbHkgKi8KKwkJ CWlmICh0b2sgPT0gMCkKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgZm9yLWxvb3AgKi8K KworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBmaW5kIHRoZSB0b2tlbiBwb3NpdGlvbiBleGFjdGx5 LCBidXQgaWYgd2Ugc29tZWhvdworCQkJICogcnVuIHBhc3QgaXQsIHdvcmsgd2l0aCB0aGF0Lgor CQkJICovCisJCQlpZiAoeXlsbG9jID49IGxvYykKKwkJCXsKKwkJCQlpZiAocXVlcnlbbG9jXSA9 PSAnLScpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBJdCdzIGEgbmVnYXRpdmUgdmFsdWUgLSB0 aGlzIGlzIHRoZSBvbmUgYW5kIG9ubHkgY2FzZQorCQkJCQkgKiB3aGVyZSB3ZSByZXBsYWNlIG1v cmUgdGhhbiBhIHNpbmdsZSB0b2tlbi4KKwkJCQkJICoKKwkJCQkJICogRG8gbm90IGNvbXBlbnNh dGUgZm9yIHRoZSBzcGVjaWFsLWNhc2UgYWRqdXN0bWVudCBvZgorCQkJCQkgKiBsb2NhdGlvbiB0 byB0aGF0IG9mIHRoZSBsZWFkaW5nICctJyBvcGVyYXRvciBpbiB0aGUKKwkJCQkJICogZXZlbnQg b2YgYSBuZWdhdGl2ZSBjb25zdGFudCAoc2VlIGRvTmVnYXRlKCkgaW4KKwkJCQkJICogZ3JhbS55 KS4gIEl0IGlzIGFsc28gdXNlZnVsIGZvciBvdXIgcHVycG9zZXMgdG8gc3RhcnQKKwkJCQkJICog ZnJvbSB0aGUgbWludXMgc3ltYm9sLiAgSW4gdGhpcyB3YXksIHF1ZXJpZXMgbGlrZQorCQkJCQkg KiAic2VsZWN0ICogZnJvbSBmb28gd2hlcmUgYmFyID0gMSIgYW5kICJzZWxlY3QgKiBmcm9tCisJ CQkJCSAqIGZvbyB3aGVyZSBiYXIgPSAtMiIgd2lsbCBoYXZlIGlkZW50aWNhbCBub3JtYWxpemVk CisJCQkJCSAqIHF1ZXJ5IHN0cmluZ3MuCisJCQkJCSAqLworCQkJCQl0b2sgPSBjb3JlX3l5bGV4 KCZ5eWx2YWwsICZ5eWxsb2MsIHl5c2Nhbm5lcik7CisJCQkJCWlmICh0b2sgPT0gMCkKKwkJCQkJ CWJyZWFrOwkvKiBvdXQgb2YgaW5uZXIgZm9yLWxvb3AgKi8KKwkJCQl9CisKKwkJCQkvKgorCQkJ CSAqIFdlIG5vdyByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgZmxleCBoYXMgcGxhY2VkIGEg emVybworCQkJCSAqIGJ5dGUgYWZ0ZXIgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gaW4g c2NhbmJ1Zi4KKwkJCQkgKi8KKwkJCQlsb2NzW2ldLmxlbmd0aCA9IHN0cmxlbih5eWV4dHJhLnNj YW5idWYgKyBsb2MpOworCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLwor CQkJfQorCQl9CisKKwkJLyogSWYgd2UgaGl0IGVuZC1vZi1zdHJpbmcsIGdpdmUgdXAsIGxlYXZp bmcgcmVtYWluaW5nIGxlbmd0aHMgLTEgKi8KKwkJaWYgKHRvayA9PSAwKQorCQkJYnJlYWs7CisJ fQorCisJc2Nhbm5lcl9maW5pc2goeXlzY2FubmVyKTsKK30KKworLyoKKyAqIENhbGxiYWNrIHRv IGdlbmVyYXRlIGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBxdWVyeSBzdHJpbmcgdGhhdCB3 aWxsIGJlIHVzZWQgdG8KKyAqIHJlcHJlc2VudCBhbGwgc2ltaWxhciBxdWVyaWVzLgorICoKKyAq IEl0IGlzIHRoZSBjYWxsZXIncyBqb2IgdG8gZW5zdXJlIHRoYXQgdGhlIHN0cmluZyBpcyBhIHZh bGlkIFNRTCBzdGF0ZW1lbnQKKyAqIHdpdGggdGhlIGNvcnJlY3QgY29uc3RhbnQgbG9jYXRpb25z IGluIGpzdGF0ZS0+Y2xvY2F0aW9ucy4gU2luY2UgaW4KKyAqIHByYWN0aWNlIHRoZSBzdHJpbmcg aGFzIGFscmVhZHkgYmVlbiBwYXJzZWQgdXNpbmcgdGhlIGF1dGhvcml0YXRpdmUgcGFyc2VyCisg KiBhbmQgdGhlIGxvY2F0aW9ucyBhcmUgc2V0IGJ5IGNvcmUgcXVlcnkganVtYmxpbmcsIHRoaXMg c2hvdWxkIG5vdCBiZSBhIHByb2JsZW0uCisgKgorICogKnF1ZXJ5X2xlbl9wIGNvbnRhaW5zIHRo ZSBpbnB1dCBzdHJpbmcgbGVuZ3RoLCBhbmQgaXMgdXBkYXRlZCB3aXRoCisgKiB0aGUgcmVzdWx0 IHN0cmluZyBsZW5ndGggb24gZXhpdC4gIFRoZSByZXN1bHRpbmcgc3RyaW5nIG1pZ2h0IGJlIGxv bmdlcgorICogb3Igc2hvcnRlciBkZXBlbmRpbmcgb24gd2hhdCBoYXBwZW5zIHdpdGggcmVwbGFj ZW1lbnQgb2YgY29uc3RhbnRzLgorICoKKyAqIFJldHVybnMgYSBwYWxsb2MnZCBzdHJpbmcuCisg Ki8KK2NoYXIgKgorR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwg Y29uc3QgY2hhciAqcXVlcnksCisJCQkJCQlpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9w KQoreworCWNoYXIJICAgKm5vcm1fcXVlcnk7CisJaW50CQkJcXVlcnlfbGVuID0gKnF1ZXJ5X2xl bl9wOworCWludAkJCW5vcm1fcXVlcnlfYnVmbGVuLAkvKiBTcGFjZSBhbGxvd2VkIGZvciBub3Jt X3F1ZXJ5ICovCisJCQkJbGVuX3RvX3dydCwJCS8qIExlbmd0aCAoaW4gYnl0ZXMpIHRvIHdyaXRl ICovCisJCQkJcXVlcl9sb2MgPSAwLAkvKiBTb3VyY2UgcXVlcnkgYnl0ZSBsb2NhdGlvbiAqLwor CQkJCW5fcXVlcl9sb2MgPSAwLCAvKiBOb3JtYWxpemVkIHF1ZXJ5IGJ5dGUgbG9jYXRpb24gKi8K KwkJCQlsYXN0X29mZiA9IDAsCS8qIE9mZnNldCBmcm9tIHN0YXJ0IGZvciBwcmV2aW91cyB0b2sg Ki8KKwkJCQlsYXN0X3Rva19sZW4gPSAwOwkvKiBMZW5ndGggKGluIGJ5dGVzKSBvZiB0aGF0IHRv ayAqLworCWludAkJCW51bV9jb25zdGFudHNfcmVwbGFjZWQgPSAwOworCisJLyoKKwkgKiBTZXQg Y29uc3RhbnRzJyBsZW5ndGhzIGluIEp1bWJsZVN0YXRlLCBhcyBvbmx5IGxvY2F0aW9ucyBhcmUg c2V0IGR1cmluZworCSAqIERvSnVtYmxlKCkuIE5vdGUgdGhpcyBhbHNvIGVuc3VyZXMgdGhlIGl0 ZW1zIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24uCisJICovCisJU2V0Q29uc3RhbnRMZW5ndGhzKGpz dGF0ZSwgcXVlcnksIHF1ZXJ5X2xvYyk7CisKKwkvKgorCSAqIEFsbG93IGZvciAkbiBzeW1ib2xz IHRvIGJlIGxvbmdlciB0aGFuIHRoZSBjb25zdGFudHMgdGhleSByZXBsYWNlLgorCSAqIENvbnN0 YW50cyBtdXN0IHRha2UgYXQgbGVhc3Qgb25lIGJ5dGUgaW4gdGV4dCBmb3JtLCB3aGlsZSBhICRu IHN5bWJvbAorCSAqIGNlcnRhaW5seSBpc24ndCBtb3JlIHRoYW4gMTEgYnl0ZXMsIGV2ZW4gaWYg biByZWFjaGVzIElOVF9NQVguICBXZQorCSAqIGNvdWxkIHJlZmluZSB0aGF0IGxpbWl0IGJhc2Vk IG9uIHRoZSBtYXggdmFsdWUgb2YgbiBmb3IgdGhlIGN1cnJlbnQKKwkgKiBxdWVyeSwgYnV0IGl0 IGhhcmRseSBzZWVtcyB3b3J0aCBhbnkgZXh0cmEgZWZmb3J0IHRvIGRvIHNvLgorCSAqLworCW5v cm1fcXVlcnlfYnVmbGVuID0gcXVlcnlfbGVuICsganN0YXRlLT5jbG9jYXRpb25zX2NvdW50ICog MTA7CisKKwkvKiBBbGxvY2F0ZSByZXN1bHQgYnVmZmVyICovCisJbm9ybV9xdWVyeSA9IHBhbGxv Yyhub3JtX3F1ZXJ5X2J1ZmxlbiArIDEpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBqc3RhdGUt PmNsb2NhdGlvbnNfY291bnQ7IGkrKykKKwl7CisJCWludAkJCW9mZiwJCS8qIE9mZnNldCBmcm9t IHN0YXJ0IGZvciBjdXIgdG9rICovCisJCQkJCXRva19sZW47CS8qIExlbmd0aCAoaW4gYnl0ZXMp IG9mIHRoYXQgdG9rICovCisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhbiBleHRlcm5hbCBwYXJh bSBhdCB0aGlzIGxvY2F0aW9uLCBidXQgbm8gbGlzdHMgYXJlCisJCSAqIGJlaW5nIHNxdWFzaGVk IGFjcm9zcyB0aGUgcXVlcnksIHRoZW4gd2Ugc2tpcCBoZXJlOyB0aGlzIHdpbGwgbWFrZQorCQkg KiB1cyBwcmludCB0aGUgY2hhcmFjdGVycyBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcXVlcnkgdGhh dCByZXByZXNlbnQKKwkJICogdGhlIHBhcmFtZXRlciBpbiB0aGUgbmV4dCBpdGVyYXRpb24gKG9y IGFmdGVyIHRoZSBsb29wIGlzIGRvbmUpLAorCQkgKiB3aGljaCBpcyBhIGJpdCBvZGQgYnV0IHNl ZW1zIHRvIHdvcmsgb2theSBpbiBtb3N0IGNhc2VzLgorCQkgKi8KKwkJaWYgKGpzdGF0ZS0+Y2xv Y2F0aW9uc1tpXS5leHRlcm5fcGFyYW0gJiYgIWpzdGF0ZS0+aGFzX3NxdWFzaGVkX2xpc3RzKQor CQkJY29udGludWU7CisKKwkJb2ZmID0ganN0YXRlLT5jbG9jYXRpb25zW2ldLmxvY2F0aW9uOwor CisJCS8qIEFkanVzdCB0aGUgY29uc3RhbnQncyBsb2NhdGlvbiAoc2VlIFNldENvbnN0YW50TGVu Z3RocykgKi8KKwkJb2ZmIC09IHF1ZXJ5X2xvYzsKKworCQl0b2tfbGVuID0ganN0YXRlLT5jbG9j YXRpb25zW2ldLmxlbmd0aDsKKworCQlpZiAodG9rX2xlbiA8IDApCisJCQljb250aW51ZTsJCQkv KiBpZ25vcmUgYW55IGR1cGxpY2F0ZXMgKi8KKworCQkvKiBDb3B5IG5leHQgY2h1bmsgKHdoYXQg cHJlY2VkZXMgdGhlIG5leHQgY29uc3RhbnQpICovCisJCWxlbl90b193cnQgPSBvZmYgLSBsYXN0 X29mZjsKKwkJbGVuX3RvX3dydCAtPSBsYXN0X3Rva19sZW47CisJCUFzc2VydChsZW5fdG9fd3J0 ID49IDApOworCQltZW1jcHkobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9s b2MsIGxlbl90b193cnQpOworCQluX3F1ZXJfbG9jICs9IGxlbl90b193cnQ7CisKKwkJLyoKKwkJ ICogQW5kIGluc2VydCBhIHBhcmFtIHN5bWJvbCBpbiBwbGFjZSBvZiB0aGUgY29uc3RhbnQgdG9r ZW47IGFuZCwgaWYKKwkJICogd2UgaGF2ZSBhIHNxdWFzaGFibGUgbGlzdCwgaW5zZXJ0IGEgcGxh Y2Vob2xkZXIgY29tbWVudCBzdGFydGluZworCQkgKiBmcm9tIHRoZSBsaXN0J3Mgc2Vjb25kIHZh bHVlLgorCQkgKi8KKwkJbl9xdWVyX2xvYyArPSBzcHJpbnRmKG5vcm1fcXVlcnkgKyBuX3F1ZXJf bG9jLCAiJCVkJXMiLAorCQkJCQkJCSAgbnVtX2NvbnN0YW50c19yZXBsYWNlZCArIDEgKyBqc3Rh dGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkLAorCQkJCQkJCSAganN0YXRlLT5jbG9jYXRpb25z W2ldLnNxdWFzaGVkID8gIiAvKiwgLi4uICovIiA6ICIiKTsKKwkJbnVtX2NvbnN0YW50c19yZXBs YWNlZCsrOworCisJCS8qIG1vdmUgZm9yd2FyZCAqLworCQlxdWVyX2xvYyA9IG9mZiArIHRva19s ZW47CisJCWxhc3Rfb2ZmID0gb2ZmOworCQlsYXN0X3Rva19sZW4gPSB0b2tfbGVuOworCX0KKwor CS8qCisJICogV2UndmUgY29waWVkIHVwIHVudGlsIHRoZSBsYXN0IGlnbm9yYWJsZSBjb25zdGFu dC4gIENvcHkgb3ZlciB0aGUKKwkgKiByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIG9yaWdpbmFsIHF1 ZXJ5IHN0cmluZy4KKwkgKi8KKwlsZW5fdG9fd3J0ID0gcXVlcnlfbGVuIC0gcXVlcl9sb2M7CisK KwlBc3NlcnQobGVuX3RvX3dydCA+PSAwKTsKKwltZW1jcHkobm9ybV9xdWVyeSArIG5fcXVlcl9s b2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQpOworCW5fcXVlcl9sb2MgKz0gbGVuX3Rv X3dydDsKKworCUFzc2VydChuX3F1ZXJfbG9jIDw9IG5vcm1fcXVlcnlfYnVmbGVuKTsKKwlub3Jt X3F1ZXJ5W25fcXVlcl9sb2NdID0gJ1wwJzsKKworCSpxdWVyeV9sZW5fcCA9IG5fcXVlcl9sb2M7 CisJcmV0dXJuIG5vcm1fcXVlcnk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9x dWVyeWp1bWJsZS5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaAppbmRleCBkY2Iz NmRjYjQ0Zi4uY2I4NzQxYjFkMDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3F1ZXJ5 anVtYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaApAQCAtOTEsNiAr OTEsOCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IGNvbXB1dGVfcXVlcnlfaWQ7CiAKIAogZXh0 ZXJuIGNvbnN0IGNoYXIgKkNsZWFuUXVlcnl0ZXh0KGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQgKmxv Y2F0aW9uLCBpbnQgKmxlbik7CitleHRlcm4gY2hhciAqR2VuZXJhdGVOb3JtYWxpemVkUXVlcnko SnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCisJCQkJCQkJCQkgaW50IHF1 ZXJ5X2xvYywgaW50ICpxdWVyeV9sZW5fcCk7CiBleHRlcm4gSnVtYmxlU3RhdGUgKkp1bWJsZVF1 ZXJ5KFF1ZXJ5ICpxdWVyeSk7CiBleHRlcm4gdm9pZCBFbmFibGVRdWVyeUlkKHZvaWQpOwogCi0t IAoyLjQzLjAKCg== --000000000000fcedb40647bde9fe--