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.94.2) (envelope-from ) id 1uk6qp-00FpmC-BE for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Aug 2025 20:04:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uk6qn-00AYq2-TQ for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Aug 2025 20:04:33 +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.94.2) (envelope-from ) id 1uk6qn-00AYm0-6q for pgsql-hackers@lists.postgresql.org; Thu, 07 Aug 2025 20:04:33 +0000 Received: from mail-qv1-xf2a.google.com ([2607:f8b0:4864:20::f2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uk6qj-001H3L-0k for pgsql-hackers@lists.postgresql.org; Thu, 07 Aug 2025 20:04:31 +0000 Received: by mail-qv1-xf2a.google.com with SMTP id 6a1803df08f44-70744318bb3so12869766d6.3 for ; Thu, 07 Aug 2025 13:04:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1754597069; x=1755201869; 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=CsrQ/U4tla6XzKP1L/lfcqMdREgpoL0Nlk206pKYTSY=; b=fGGGZvZEFpk1J4ks/NQ0TWduBJQK7vf2SotC/Hd8tc9TllwuWY7OUT9jPmGE1OeW+V nhJnBy/v/KdntTkho2Pl77Qvrz6mAvSZ1R+Z0lnacqnxZ0gI1s8GA1GUY0eqBEWt5SRq OfHzG23Bcp28Dg96kQDU+t1AAcX7E7AoyM7WDM3PbzhqOVDrKVmxWcHb6qaYl9f0vz54 FLfK33KIvzzSRmND/qcc6paZaI7ubyBXzlyL7OGObVyk61unwjXR+Xd9LvKsNON03CEl Gj2rIg8hIWFBB4igBZESGA+wvFmqADaELE/qsq+KHU6zeqF/CCZibbN1eC0s+ZpAUoFL EUsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754597069; x=1755201869; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CsrQ/U4tla6XzKP1L/lfcqMdREgpoL0Nlk206pKYTSY=; b=pYt04RW1NXyQawgSSz2MjWWQ4LSEM9duuFkVmmjCGocLukmTAqomG9XQzTns64gPm8 KI1Xeo8pTsI5MqvDzXjrIwhvwZptXsO0oU7eGgB5pS189CZTdoU38irA7aRDy0oNMu8e BemrLcIEckgSAVI7+lmmYVXyNXOuy59yDXd5WqMh+udYBYaIlJKR6HNbtKcAYEqxPUA/ Z9yqt+Xp8zQskzx5X2OsSaJxOp9GiV6mPFr+wkzOg/4uc0SSgQCwtqws86XiEMqigpPM PN7G4iGms5Vin227TtIlYhWVDEO3iUckQNCo1aR1mPJuAen/LZlrowEG95AyLgnCEQ3Z iY2Q== X-Gm-Message-State: AOJu0YzNfN82vxdvzb4gXpblnm0SFFVMA1BKGHl0JTwxL4wK5mMGpG2Z tl8feORyoHOhT8lqFXcobxoIKG+1rjORUFZSrrpxke0CUIfuHlAN+dFzn3rjoXkGKXi3uOqbt6A eMVOdwr5pROeygu2dBvcHpuNg9oZTblJNco8OOT/V X-Gm-Gg: ASbGncuMP+j3jEjtuN7qEokq+GLqD615+1i1zeJPjMnjywjg/WCIgynLohrUG7vvfWd 9hq8IOGSKPpZqO9igaPcrPTMPBOrQe6dSKqcopbPiDrkK6eggr5BRbunTAU5U+8yd6Mi9QPdopA ghmAfBns4/pYa5bLFKW+pfIrdD7fL7wWsApTWifWztcjI3WAn9JFYijkAYc0ud7WDa2UYYJi0he mudZrw= X-Google-Smtp-Source: AGHT+IF26xTWfVtuvQOIVEH/XlB9ILftnPSjg3/G8V/1iiGf70diGtdGJn33pYrObDKoZ0sVu5LKrFmX9SwRJZJKizU= X-Received: by 2002:ad4:574b:0:b0:702:d6e2:5bbe with SMTP id 6a1803df08f44-7099a1d0f29mr6178856d6.4.1754597068711; Thu, 07 Aug 2025 13:04:28 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jacob Champion Date: Thu, 7 Aug 2025 13:04:17 -0700 X-Gm-Features: Ac12FXx2Lr3FkqNhxzTtzBCwIfADd_pdPIohb0m3aGPpLul5cduo4smNCWDcJI8 Message-ID: Subject: Re: [PATCH] OAuth: fix performance bug with stuck multiplexer events To: Thomas Munro , =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= Cc: PostgreSQL Hackers , Daniel Gustafsson , Peter Eisentraut Content-Type: multipart/mixed; boundary="00000000000001fde1063bcbf7a2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000001fde1063bcbf7a2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Aug 7, 2025 at 11:11=E2=80=AFAM Jacob Champion wrote: > Thank you so much for the reviews! Here is v4, with the feedback from both of you. 0001-0004 are planned for backport; 0005 is slated for master only. Thanks again for the reviews! --Jacob --00000000000001fde1063bcbf7a2 Content-Type: text/plain; charset="UTF-8"; name="since-v3.diff.txt" Content-Disposition: attachment; filename="since-v3.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tpbv50 MTogIGM1Y2RjY2ZlMzc0ICEgMTogIGE1MTU0MzVkM2I0IG9hdXRoOiBSZW1vdmUgc3RhbGUgZXZl bnRzIGZyb20gdGhlIGtxdWV1ZSBtdWx0aXBsZXhlcgogICAgQEAgQ29tbWl0IG1lc3NhZ2UKICAg ICAgICAgYWZ0ZXIgZHJpdmVfcmVxdWVzdCgpLCBiZWZvcmUgd2UgcmV0dXJuIGNvbnRyb2wgdG8g dGhlIGNsaWVudCB0byB3YWl0LgogICAgIAogICAgICAgICBTdWdnZXN0ZWQtYnk6IFRob21hcyBN dW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KICAgICsgICAgQ28tYXV0aG9yZWQtYnk6IFRo b21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KICAgICsgICAgUmV2aWV3ZWQtYnk6 IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KICAgICsgICAgQmFja3BhdGNo LXRocm91Z2g6IDE4CiAgICArICAgIERpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FP WW1pK25EWnhKSGFXajlfalJTeWY4dU1Ub0NBREFtT2ZKRWdnc0tXLWtZN2FVd0hBQG1haWwuZ21h aWwuY29tCiAgICAgCiAgICAgICMjIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1 cmwuYyAjIwogICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYzog cmVnaXN0ZXJfc29ja2V0KENVUkwgKmN1cmwsIGN1cmxfc29ja2V0X3Qgc29ja2V0LCBpbnQgd2hh dCwgdm9pZCAqY3R4LAogICAgICAjZW5kaWYKICAgICAgfQogICAgICAKICAgIC0rLyotLS0tLS0t CiAgICArKy8qCiAgICAgKyAqIElmIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8gb24gYW55IG9mIHRo ZSBkZXNjcmlwdG9ycyBpbiB0aGUgbXVsdGlwbGV4ZXIsIHRoZW4KICAgICArICogdGhpcyBmdW5j dGlvbiBtdXN0IGVuc3VyZSB0aGF0IHRoZSBtdWx0aXBsZXhlciBpcyBub3QgcmVhZGFibGUuCiAg ICAgKyAqCiAgICAtKyAqIEFzIGEgbW90aXZhdGluZyBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9s bG93aW5nIHNlcXVlbmNlIG9mIGV2ZW50czoKICAgIC0rICogMS4gbGliY3VybCB0cmllcyB0byB3 cml0ZSBkYXRhIHRvIHRoZSBzZW5kIGJ1ZmZlciwgYnV0IGl0IGZpbGxzIHVwLgogICAgLSsgKiAy LiBsaWJjdXJsIHJlZ2lzdGVycyBDVVJMX1BPTExfT1VUIG9uIHRoZSBzb2NrZXQgYW5kIHJldHVy bnMgY29udHJvbCB0byB0aGUKICAgIC0rICogICAgY2xpZW50IHRvIHdhaXQuCiAgICAtKyAqIDMu IFRoZSBrZXJuZWwgcGFydGlhbGx5IGRyYWlucyB0aGUgc2VuZCBidWZmZXIuIFRoZSBzb2NrZXQg YmVjb21lcyB3cml0YWJsZSwKICAgIC0rICogICAgYW5kIHRoZSBjbGllbnQgd2FrZXMgdXAgYW5k IGNhbGxzIGJhY2sgaW50byB0aGUgZmxvdy4KICAgIC0rICogNC4gbGliY3VybCBjb250aW51ZXMg d3JpdGluZyBkYXRhIHRvIHRoZSBzZW5kIGJ1ZmZlciwgYnV0IGl0IGZpbGxzIHVwIGFnYWluLgog ICAgLSsgKiAgICBUaGUgc29ja2V0IGlzIG5vIGxvbmdlciB3cml0YWJsZS4KICAgIC0rICoKICAg IC0rICogQXQgdGhpcyBwb2ludCwgYW4gZXBvbGwtYmFzZWQgbXV4IG5vIGxvbmdlciBzaWduYWxz IHJlYWRpbmVzcywgc28gbm90aGluZwogICAgLSsgKiBmdXJ0aGVyIG5lZWRzIHRvIGJlIGRvbmUu IEJ1dCBhIGtxdWV1ZS1iYXNlZCBtdXggd2lsbCBjb250aW51ZSB0byBzaWduYWwKICAgIC0rICog InJlYWR5IiB1bnRpbCBlaXRoZXIgdGhlIEVWRklMVF9XUklURSByZWdpc3RyYXRpb24gaXMgZHJv cHBlZCBmb3IgdGhlIHNvY2tldCwKICAgIC0rICogb3IgdGhlIG9sZCBzb2NrZXQtd3JpdGFibGUg ZXZlbnQgaXMgcmVhZCBmcm9tIHRoZSBxdWV1ZS4gU2luY2UgQ3VybCBpc24ndAogICAgLSsgKiBn dWFyYW50ZWVkIHRvIGRvIHRoZSBmb3JtZXIsIHdlIG11c3QgZG8gdGhlIGxhdHRlciBoZXJlLgog ICAgKysgKiBVbmxpa2UgZXBvbGwgZGVzY3JpcHRvcnMsIGtxdWV1ZSBkZXNjcmlwdG9ycyBvbmx5 IHRyYW5zaXRpb24gZnJvbSByZWFkYWJsZSB0bwogICAgKysgKiB1bnJlYWRhYmxlIHdoZW4ga2V2 ZW50KCkgaXMgY2FsbGVkIGFuZCBmaW5kcyBub3RoaW5nLCBhZnRlciByZW1vdmluZwogICAgKysg KiBsZXZlbC10cmlnZ2VyZWQgY29uZGl0aW9ucyB0aGF0IGhhdmUgZ29uZSBhd2F5LiBXZSB0aGVy ZWZvcmUgbmVlZCBhIGR1bW15CiAgICArKyAqIGtldmVudCgpIGNhbGwgYWZ0ZXIgb3BlcmF0aW9u cyBtaWdodCBoYXZlIGJlZW4gcGVyZm9ybWVkIG9uIHRoZSBtb25pdG9yZWQKICAgICsrICogc29j a2V0cyBvciB0aW1lcl9mZC4gQW55IGV2ZW50IHJldHVybmVkIGlzIGlnbm9yZWQgaGVyZSwgYnV0 IGl0IGFsc28gcmVtYWlucwogICAgKysgKiBxdWV1ZWQgKGJlaW5nIGxldmVsLXRyaWdnZXJlZCkg YW5kIGxlYXZlcyB0aGUgZGVzY3JpcHRvciByZWFkYWJsZS4gVGhpcyBpcyBhCiAgICArKyAqIG5v LW9wIGZvciBlcG9sbCBkZXNjcmlwdG9ycy4KICAgICArICovCiAgICAgK3N0YXRpYyBib29sCiAg ICAgK2NvbWJfbXVsdGlwbGV4ZXIoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKICAgIEBAIHNyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYzogcGdfZmVfcnVuX29hdXRoX2Zsb3df aW1wbChQR2Nvbm4gKmNvbm4pCiAgICAgKwkJCQkJICogTWFrZSBzdXJlIHRoYXQgc3RhbGUgZXZl bnRzIGRvbid0IGNhdXNlIHVzIHRvIGNvbWUgYmFjawogICAgICsJCQkJCSAqIGVhcmx5LiAoQ3Vy cmVudGx5LCB0aGlzIGNhbiBvY2N1ciBvbmx5IHdpdGgga3F1ZXVlLikgSWYKICAgICArCQkJCQkg KiB0aGlzIGlzIGZvcmdvdHRlbiwgdGhlIG11bHRpcGxleGVyIGNhbiBnZXQgc3R1Y2sgaW4gYQog ICAgLSsJCQkJCSAqIHNpZ25hbGxlZCBzdGF0ZSBhbmQgd2UnbGwgYnVybiBDUFUgY3ljbGVzIHBv aW50bGVzc2x5LgogICAgKysJCQkJCSAqIHNpZ25hbGVkIHN0YXRlIGFuZCB3ZSdsbCBidXJuIENQ VSBjeWNsZXMgcG9pbnRsZXNzbHkuCiAgICAgKwkJCQkJICovCiAgICAgKwkJCQkJaWYgKCFjb21i X211bHRpcGxleGVyKGFjdHgpKQogICAgICsJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKMjogIDc3 MjVlMGMxNzNiICEgMjogIGEzNGJlMTlmMTdmIG9hdXRoOiBFbnN1cmUgdW51c2VkIHNvY2tldCBy ZWdpc3RyYXRpb25zIGFyZSByZW1vdmVkCiAgICBAQCBDb21taXQgbWVzc2FnZQogICAgICAgICBu dW1iZXIgb2YgZXZlbnRzIGFkZGVkLCB0aGUgbnVtYmVyIG9mIGV2ZW50cyBwdWxsZWQgb2ZmIHRo ZSBxdWV1ZSwgYW5kCiAgICAgICAgIHRoZSBsZW5ndGhzIG9mIHRoZSBrZXZlbnQgYXJyYXlzLgog ICAgIAogICAgKyAgICBSZXZpZXdlZC1ieTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21h aWwuY29tPgogICAgKyAgICBCYWNrcGF0Y2gtdGhyb3VnaDogMTgKICAgICsgICAgRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWkrbkRaeEpIYVdqOV9qUlN5Zjh1TVRvQ0FEQW1P ZkpFZ2dzS1cta1k3YVV3SEFAbWFpbC5nbWFpbC5jb20KICAgICsKICAgICAgIyMgc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jICMjCiAgICAgQEAgc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtY3VybC5jOiByZWdpc3Rlcl9zb2NrZXQoQ1VSTCAqY3VybCwgY3Vy bF9zb2NrZXRfdCBzb2NrZXQsIGludCB3aGF0LCB2b2lkICpjdHgsCiAgICAgIAozOiAgNmNjZjdh NWQxNTYgISAzOiAgNzQwODc3OGQ1Nzkgb2F1dGg6IFJlbW92ZSBleHBpcmVkIHRpbWVycyBmcm9t IHRoZSBtdWx0aXBsZXhlcgogICAgQEAgQ29tbWl0IG1lc3NhZ2UKICAgICAgICAgdGhlIHRpbWVy IHdhcyBrbm93biB0byBiZSBzZXQsIGJ1dCBib3RoIGltcGxlbWVudGF0aW9ucyBub3cgdXNlIHRo ZQogICAgICAgICBrcXVldWUgbG9naWMuCiAgICAgCiAgICArICAgIFJldmlld2VkLWJ5OiBUaG9t YXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CiAgICArICAgIEJhY2twYXRjaC10aHJv dWdoOiAxOAogICAgKyAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaStu RFp4SkhhV2o5X2pSU3lmOHVNVG9DQURBbU9mSkVnZ3NLVy1rWTdhVXdIQUBtYWlsLmdtYWlsLmNv bQogICAgKwogICAgICAjIyBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMg IyMKICAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IHNldF90 aW1lcihzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4LCBsb25nIHRpbWVvdXQpCiAgICAgIAo0OiAgMmJl OTkzYjhmMDcgISA0OiAgODI0MTI1NWU4NGMgb2F1dGg6IFRyYWNrIHRvdGFsIGNhbGwgY291bnQg ZHVyaW5nIGEgY2xpZW50IGZsb3cKICAgIEBAIENvbW1pdCBtZXNzYWdlCiAgICAgICAgIGZ1dHVy ZSB3b3JrIHRvIGFkZCBUTFMgc3VwcG9ydCB0byB0aGUgb2F1dGhfdmFsaWRhdG9yIHRlc3Qgc2Vy dmVyIHNob3VsZAogICAgICAgICBzdHJlbmd0aGVuIGl0IGFzIHdlbGwuCiAgICAgCiAgICArICAg IEJhY2twYXRjaC10aHJvdWdoOiAxOAogICAgKyAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBT1ltaStuRFp4SkhhV2o5X2pSU3lmOHVNVG9DQURBbU9mSkVnZ3NLVy1rWTdhVXdI QUBtYWlsLmdtYWlsLmNvbQogICAgKwogICAgICAjIyBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9vYXV0aC1jdXJsLmMgIyMKICAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0 aC1jdXJsLmM6IHN0cnVjdCBhc3luY19jdHgKICAgICAgCWJvb2wJCXVzZXJfcHJvbXB0ZWQ7CS8q IGhhdmUgd2UgYWxyZWFkeSBzZW50IHRoZSBhdXRoeiBwcm9tcHQ/ICovCjU6ICA1MDI1N2JmMzJl YiAhIDU6ICAzMzcxMjQwNjRmMyBvYXV0aDogQWRkIHVuaXQgdGVzdHMgZm9yIG11bHRpcGxleGVy IGhhbmRsaW5nCiAgICBAQCBDb21taXQgbWVzc2FnZQogICAgICAgICBzdWl0ZSBmb3IgdGhlIHNv Y2tldCBhbmQgdGltZXIgaGFuZGxpbmcgY29kZS4gVGhpcyBpcyBhbGwgYmFzZWQgb24gVEFQCiAg ICAgICAgIGFuZCBkcml2ZW4gYnkgb3VyIGV4aXN0aW5nIFRlc3Q6Ok1vcmUgaW5mcmFzdHJ1Y3R1 cmUuCiAgICAgCiAgICArICAgIFJldmlld2VkLWJ5OiBEYWdmaW5uIElsbWFyaSBNYW5uc8Ola2Vy IDxpbG1hcmlAaWxtYXJpLm9yZz4KICAgICsgICAgRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQU9ZbWkrbkRaeEpIYVdqOV9qUlN5Zjh1TVRvQ0FEQW1PZkpFZ2dzS1cta1k3YVV3SEFA bWFpbC5nbWFpbC5jb20KICAgICsKICAgICAgIyMgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv TWFrZWZpbGUgIyMKICAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZTog dW5pbnN0YWxsOgogICAgICAJcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJChzdGxpYiknCiAg ICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbCAobmV3KQogICAg ICtteSAkZXJyID0gJGJ1aWxkZXItPmZhaWx1cmVfb3V0cHV0OwogICAgICsKICAgICArSVBDOjpS dW46OnJ1biBbJ29hdXRoX3Rlc3RzJ10sCiAgICAtKyAgJz4nLCBJUEM6OlJ1bjo6bmV3X2NodW5r ZXIsIHN1YiB7IHByaW50IHskb3V0fSAkX1swXSB9LAogICAgLSsgICcyPicsIElQQzo6UnVuOjpu ZXdfY2h1bmtlciwgc3ViIHsgcHJpbnQgeyRlcnJ9ICRfWzBdIH0KICAgICsrICAnPicsIElQQzo6 UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgJG91dC0+cHJpbnQoJF9bMF0pIH0sCiAgICArKyAgJzI+ JywgSVBDOjpSdW46Om5ld19jaHVua2VyLCBzdWIgeyAkZXJyLT5wcmludCgkX1swXSkgfQogICAg ICsgIG9yIGRpZSAib2F1dGhfdGVzdHMgcmV0dXJuZWQgJD8iOwogICAgIAogICAgICAjIyBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYyAobmV3KSAjIwo= --00000000000001fde1063bcbf7a2 Content-Type: application/octet-stream; name="v4-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Disposition: attachment; filename="v4-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tpeue1 RnJvbSBhNTE1NDM1ZDNiNGUwMmQyMDU2M2E3NWUzZGZhNDE3N2QzMzNjYTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxMCBKdW4gMjAyNSAxNjozODo1OSAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMS81XSBvYXV0aDogUmVtb3ZlIHN0YWxlIGV2ZW50cyBmcm9tIHRoZSBrcXVl dWUgbXVsdGlwbGV4ZXIKCklmIGEgc29ja2V0IGlzIGFkZGVkIHRvIHRoZSBrcXVldWUsIGJlY29t ZXMgcmVhZGFibGUvd3JpdGFibGUsIGFuZApzdWJzZXF1ZW50bHkgYmVjb21lcyBub24tcmVhZGFi bGUvd3JpdGFibGUgYWdhaW4sIHRoZSBrcXVldWUgaXRzZWxmIHdpbGwKcmVtYWluIHJlYWRhYmxl IHVudGlsIGVpdGhlciB0aGUgc29ja2V0IHJlZ2lzdHJhdGlvbiBpcyByZW1vdmVkLCBvciB0aGUK c3RhbGUgZXZlbnQgaXMgY2xlYXJlZCB2aWEgYSBjYWxsIHRvIGtldmVudCgpLgoKSW4gbWFueSBz aW1wbGUgY2FzZXMsIEN1cmwgaXRzZWxmIHdpbGwgcmVtb3ZlIHRoZSBzb2NrZXQgcmVnaXN0cmF0 aW9uCnF1aWNrbHksIGJ1dCBpbiByZWFsLXdvcmxkIHVzYWdlLCB0aGlzIGlzIG5vdCBndWFyYW50 ZWVkIHRvIGhhcHBlbi4gVGhlCmtxdWV1ZSBjYW4gdGhlbiByZW1haW4gc3R1Y2sgaW4gYSBwZXJt YW5lbnRseSByZWFkYWJsZSBzdGF0ZSB1bnRpbCB0aGUKcmVxdWVzdCBlbmRzLCB3aGljaCByZXN1 bHRzIGluIHBvaW50bGVzcyB3YWtldXBzIGZvciB0aGUgY2xpZW50IGFuZAp3YXN0ZWQgQ1BVIHRp bWUuCgpJbXBsZW1lbnQgY29tYl9tdWx0aXBsZXhlcigpIHRvIGNhbGwga2V2ZW50KCkgYW5kIHVu c3RpY2sgYW55IHN0YWxlCmV2ZW50cyB0aGF0IHdvdWxkIGNhdXNlIHVubmVjZXNzYXJ5IGNhbGxi YWNrcy4gVGhpcyBpcyBjYWxsZWQgcmlnaHQKYWZ0ZXIgZHJpdmVfcmVxdWVzdCgpLCBiZWZvcmUg d2UgcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNsaWVudCB0byB3YWl0LgoKU3VnZ2VzdGVkLWJ5OiBU aG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBUaG9t YXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkJhY2twYXRjaC10aHJvdWdoOiAxOApEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaStuRFp4SkhhV2o5X2pSU3lmOHVNVG9DQURB bU9mSkVnZ3NLVy1rWTdhVXdIQUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuYyB8IDY3ICsrKysrKysrKysrKysrKysrKysrKystLS0KIDEg ZmlsZSBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwppbmRleCBkYmE5YTY4NGZhOC4uNDMzMTM1Y2I4 NmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwor KysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKQEAgLTEzNzYsNiAr MTM3Niw1MyBAQCByZWdpc3Rlcl9zb2NrZXQoQ1VSTCAqY3VybCwgY3VybF9zb2NrZXRfdCBzb2Nr ZXQsIGludCB3aGF0LCB2b2lkICpjdHgsCiAjZW5kaWYKIH0KIAorLyoKKyAqIElmIHRoZXJlIGlz IG5vIHdvcmsgdG8gZG8gb24gYW55IG9mIHRoZSBkZXNjcmlwdG9ycyBpbiB0aGUgbXVsdGlwbGV4 ZXIsIHRoZW4KKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGUgbXVsdGlwbGV4 ZXIgaXMgbm90IHJlYWRhYmxlLgorICoKKyAqIFVubGlrZSBlcG9sbCBkZXNjcmlwdG9ycywga3F1 ZXVlIGRlc2NyaXB0b3JzIG9ubHkgdHJhbnNpdGlvbiBmcm9tIHJlYWRhYmxlIHRvCisgKiB1bnJl YWRhYmxlIHdoZW4ga2V2ZW50KCkgaXMgY2FsbGVkIGFuZCBmaW5kcyBub3RoaW5nLCBhZnRlciBy ZW1vdmluZworICogbGV2ZWwtdHJpZ2dlcmVkIGNvbmRpdGlvbnMgdGhhdCBoYXZlIGdvbmUgYXdh eS4gV2UgdGhlcmVmb3JlIG5lZWQgYSBkdW1teQorICoga2V2ZW50KCkgY2FsbCBhZnRlciBvcGVy YXRpb25zIG1pZ2h0IGhhdmUgYmVlbiBwZXJmb3JtZWQgb24gdGhlIG1vbml0b3JlZAorICogc29j a2V0cyBvciB0aW1lcl9mZC4gQW55IGV2ZW50IHJldHVybmVkIGlzIGlnbm9yZWQgaGVyZSwgYnV0 IGl0IGFsc28gcmVtYWlucworICogcXVldWVkIChiZWluZyBsZXZlbC10cmlnZ2VyZWQpIGFuZCBs ZWF2ZXMgdGhlIGRlc2NyaXB0b3IgcmVhZGFibGUuIFRoaXMgaXMgYQorICogbm8tb3AgZm9yIGVw b2xsIGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgYm9vbAorY29tYl9tdWx0aXBsZXhlcihzdHJ1 Y3QgYXN5bmNfY3R4ICphY3R4KQoreworI2lmIGRlZmluZWQoSEFWRV9TWVNfRVBPTExfSCkKKwkv KiBUaGUgZXBvbGwgaW1wbGVtZW50YXRpb24gZG9lc24ndCBob2xkIG9udG8gc3RhbGUgZXZlbnRz LiAqLworCXJldHVybiB0cnVlOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FVkVOVF9IKQorCXN0 cnVjdCB0aW1lc3BlYyB0aW1lb3V0ID0gezB9OworCXN0cnVjdCBrZXZlbnQgZXY7CisKKwkvKgor CSAqIFRyeSB0byByZWFkIGEgc2luZ2xlIHBlbmRpbmcgZXZlbnQuIFdlIGNhbiBhY3R1YWxseSBp Z25vcmUgdGhlIHJlc3VsdDoKKwkgKiBlaXRoZXIgd2UgZm91bmQgYW4gZXZlbnQgdG8gcHJvY2Vz cywgaW4gd2hpY2ggY2FzZSB0aGUgbXVsdGlwbGV4ZXIgaXMKKwkgKiBjb3JyZWN0bHkgcmVhZGFi bGUgZm9yIHRoYXQgZXZlbnQgYXQgbWluaW11bSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIGlmCisJ ICogdGhlcmUgYXJlIGFueSBzdGFsZSBldmVudHM7IG9yIHdlIGRpZG4ndCBmaW5kIGFueSwgaW4g d2hpY2ggY2FzZSB0aGUKKwkgKiBrZXJuZWwgd2lsbCBoYXZlIGRpc2NhcmRlZCBhbnkgc3RhbGUg ZXZlbnRzIGFzIGl0IHRyYXZlbGVkIHRvIHRoZSBlbmQKKwkgKiBvZiB0aGUgcXVldWUuCisJICoK KwkgKiBOb3RlIHRoYXQgdGhpcyBkZXBlbmRzIG9uIG91ciByZWdpc3RyYXRpb25zIGJlaW5nIGxl dmVsLXRyaWdnZXJlZCAtLQorCSAqIGV2ZW4gdGhlIHRpbWVyLCBzbyB3ZSB1c2UgYSBjaGFpbmVk IGtxdWV1ZSBmb3IgdGhhdCBpbnN0ZWFkIG9mIGFuCisJICogRVZGSUxUX1RJTUVSIG9uIHRoZSB0 b3AtbGV2ZWwgbXV4LiBJZiB3ZSB1c2VkIGVkZ2UtdHJpZ2dlcmVkIGV2ZW50cywKKwkgKiB0aGlz IGNhbGwgd291bGQgaW1wcm9wZXJseSBkaXNjYXJkIHRoZW0uCisJICovCisJaWYgKGtldmVudChh Y3R4LT5tdXgsIE5VTEwsIDAsICZldiwgMSwgJnRpbWVvdXQpIDwgMCkKKwl7CisJCWFjdHhfZXJy b3IoYWN0eCwgImNvdWxkIG5vdCBjb21iIGtxdWV1ZTogJW0iKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiB0cnVlOworI2Vsc2UKKyNlcnJvciBjb21iX211bHRpcGxleGVyIGlzIG5v dCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtCisjZW5kaWYKK30KKwogLyoKICAqIEVuYWJs ZXMgb3IgZGlzYWJsZXMgdGhlIHRpbWVyIGluIHRoZSBtdWx0aXBsZXhlciBzZXQuIFRoZSB0aW1l b3V0IHZhbHVlIGlzCiAgKiBpbiBtaWxsaXNlY29uZHMgKG5lZ2F0aXZlIHZhbHVlcyBkaXNhYmxl IHRoZSB0aW1lcikuCkBAIC0yNzU1LDEzICsyODAyLDIxIEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93 X2ltcGwoUEdjb25uICpjb25uKQogCiAJCQkJCWlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElOR19G QUlMRUQpCiAJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCQkJZWxzZSBpZiAoc3RhdHVzICE9 IFBHUkVTX1BPTExJTkdfT0spCi0JCQkJCXsKLQkJCQkJCS8qIG5vdCBkb25lIHlldCAqLwotCQkJ CQkJcmV0dXJuIHN0YXR1czsKLQkJCQkJfQorCQkJCQllbHNlIGlmIChzdGF0dXMgPT0gUEdSRVNf UE9MTElOR19PSykKKwkJCQkJCWJyZWFrOwkvKiBkb25lISAqLwogCi0JCQkJCWJyZWFrOworCQkJ CQkvKgorCQkJCQkgKiBUaGlzIHJlcXVlc3QgaXMgc3RpbGwgcnVubmluZy4KKwkJCQkJICoKKwkJ CQkJICogTWFrZSBzdXJlIHRoYXQgc3RhbGUgZXZlbnRzIGRvbid0IGNhdXNlIHVzIHRvIGNvbWUg YmFjaworCQkJCQkgKiBlYXJseS4gKEN1cnJlbnRseSwgdGhpcyBjYW4gb2NjdXIgb25seSB3aXRo IGtxdWV1ZS4pIElmCisJCQkJCSAqIHRoaXMgaXMgZm9yZ290dGVuLCB0aGUgbXVsdGlwbGV4ZXIg Y2FuIGdldCBzdHVjayBpbiBhCisJCQkJCSAqIHNpZ25hbGVkIHN0YXRlIGFuZCB3ZSdsbCBidXJu IENQVSBjeWNsZXMgcG9pbnRsZXNzbHkuCisJCQkJCSAqLworCQkJCQlpZiAoIWNvbWJfbXVsdGlw bGV4ZXIoYWN0eCkpCisJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKKworCQkJCQlyZXR1cm4gc3Rh dHVzOwogCQkJCX0KIAogCQkJY2FzZSBPQVVUSF9TVEVQX1dBSVRfSU5URVJWQUw6Ci0tIAoyLjM0 LjEKCg== --00000000000001fde1063bcbf7a2 Content-Type: application/octet-stream; name="v4-0002-oauth-Ensure-unused-socket-registrations-are-remo.patch" Content-Disposition: attachment; filename="v4-0002-oauth-Ensure-unused-socket-registrations-are-remo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tpnxw2 RnJvbSBhMzRiZTE5ZjE3ZmNmN2ExNWQ2NGZjMjQxYzczZWFkOTkzYmE4OWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA2IEF1ZyAyMDI1IDE1OjE4OjA4IC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2NCAyLzVdIG9hdXRoOiBFbnN1cmUgdW51c2VkIHNvY2tldCByZWdpc3RyYXRpb25z IGFyZSByZW1vdmVkCgpJZiBDdXJsIG5lZWRzIHRvIHN3aXRjaCB0aGUgZGlyZWN0aW9uIG9mIGEg c29ja2V0J3MgcmVnaXN0cmF0aW9uIChlLmcuCmZyb20gQ1VSTF9QT0xMX0lOIHRvIENVUkxfUE9M TF9PVVQpLCBpdCBleHBlY3RzIHRoZSBvbGQgcmVnaXN0cmF0aW9uIHRvCmJlIGRpc2NhcmRlZC4g Rm9yIGVwb2xsLCB0aGlzIGhhcHBlbmVkIHZpYSBFUE9MTF9DVExfTU9ELCBidXQgZm9yCmtxdWV1 ZSwgdGhlIG9sZCByZWdpc3RyYXRpb24gd291bGQgcmVtYWluIGlmIGl0IHdhcyBub3QgZXhwbGlj aXRseQpyZW1vdmVkIGJ5IEN1cmwuCgpFeHBsaWNpdGx5IHJlbW92ZSB0aGUgb3Bwb3NpdGUtZGly ZWN0aW9uIGV2ZW50IGR1cmluZyByZWdpc3RyYXRpb25zLiAoSWYKdGhhdCBldmVudCBkb2Vzbid0 IGV4aXN0LCB3ZSdsbCBqdXN0IGdldCBhbiBFTk9FTlQsIHdoaWNoIHdpbGwgYmUKaWdub3JlZCBi eSB0aGUgc2FtZSBjb2RlIHRoYXQgaGFuZGxlcyBDVVJMX1BPTExfUkVNT1ZFLikgQSBmZXcKYXNz ZXJ0aW9ucyBhcmUgYWxzbyBhZGRlZCB0byBzdHJlbmd0aGVuIHRoZSByZWxhdGlvbnNoaXAgYmV0 d2VlbiB0aGUKbnVtYmVyIG9mIGV2ZW50cyBhZGRlZCwgdGhlIG51bWJlciBvZiBldmVudHMgcHVs bGVkIG9mZiB0aGUgcXVldWUsIGFuZAp0aGUgbGVuZ3RocyBvZiB0aGUga2V2ZW50IGFycmF5cy4K ClJldmlld2VkLWJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkJhY2tw YXRjaC10aHJvdWdoOiAxOApEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaStu RFp4SkhhV2o5X2pSU3lmOHVNVG9DQURBbU9mSkVnZ3NLVy1rWTdhVXdIQUBtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyB8IDIyICsrKysr KysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA4IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRo LWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwppbmRleCA0 MzMxMzVjYjg2ZC4uOTdjMzMyOTlhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0 aC1jdXJsLmMKQEAgLTEyOTEsMjIgKzEyOTEsMzEgQEAgcmVnaXN0ZXJfc29ja2V0KENVUkwgKmN1 cmwsIGN1cmxfc29ja2V0X3Qgc29ja2V0LCBpbnQgd2hhdCwgdm9pZCAqY3R4LAogCiAJcmV0dXJu IDA7CiAjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VWRU5UX0gpCi0Jc3RydWN0IGtldmVudCBldlsy XSA9IHswfTsKKwlzdHJ1Y3Qga2V2ZW50IGV2WzJdOwogCXN0cnVjdCBrZXZlbnQgZXZfb3V0WzJd OwogCXN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0ID0gezB9OwogCWludAkJCW5ldiA9IDA7CiAJaW50 CQkJcmVzOwogCisJLyoKKwkgKiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIHRoZSBldmVudHMgaXMg Y3VycmVudGx5IHJlZ2lzdGVyZWQsIHBlcmhhcHMKKwkgKiBib3RoLCBzbyB3ZSBhbHdheXMgdHJ5 IHRvIHJlbW92ZSB1bm5lZWRlZCBldmVudHMuIFRoaXMgbWVhbnMgd2UgbmVlZCB0bworCSAqIHRv bGVyYXRlIEVOT0VOVCBiZWxvdy4KKwkgKi8KIAlzd2l0Y2ggKHdoYXQpCiAJewogCQljYXNlIENV UkxfUE9MTF9JTjoKIAkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfUkVBRCwgRVZf QUREIHwgRVZfUkVDRUlQVCwgMCwgMCwgMCk7CiAJCQluZXYrKzsKKwkJCUVWX1NFVCgmZXZbbmV2 XSwgc29ja2V0LCBFVkZJTFRfV1JJVEUsIEVWX0RFTEVURSB8IEVWX1JFQ0VJUFQsIDAsIDAsIDAp OworCQkJbmV2Kys7CiAJCQlicmVhazsKIAogCQljYXNlIENVUkxfUE9MTF9PVVQ6CiAJCQlFVl9T RVQoJmV2W25ldl0sIHNvY2tldCwgRVZGSUxUX1dSSVRFLCBFVl9BREQgfCBFVl9SRUNFSVBULCAw LCAwLCAwKTsKIAkJCW5ldisrOworCQkJRVZfU0VUKCZldltuZXZdLCBzb2NrZXQsIEVWRklMVF9S RUFELCBFVl9ERUxFVEUgfCBFVl9SRUNFSVBULCAwLCAwLCAwKTsKKwkJCW5ldisrOwogCQkJYnJl YWs7CiAKIAkJY2FzZSBDVVJMX1BPTExfSU5PVVQ6CkBAIC0xMzE3LDEyICsxMzI2LDYgQEAgcmVn aXN0ZXJfc29ja2V0KENVUkwgKmN1cmwsIGN1cmxfc29ja2V0X3Qgc29ja2V0LCBpbnQgd2hhdCwg dm9pZCAqY3R4LAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDVVJMX1BPTExfUkVNT1ZFOgotCi0JCQkv KgotCQkJICogV2UgZG9uJ3Qga25vdyB3aGljaCBvZiB0aGVzZSBpcyBjdXJyZW50bHkgcmVnaXN0 ZXJlZCwgcGVyaGFwcwotCQkJICogYm90aCwgc28gd2UgdHJ5IHRvIHJlbW92ZSBib3RoLiAgVGhp cyBtZWFucyB3ZSBuZWVkIHRvIHRvbGVyYXRlCi0JCQkgKiBFTk9FTlQgYmVsb3cuCi0JCQkgKi8K IAkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfUkVBRCwgRVZfREVMRVRFIHwgRVZf UkVDRUlQVCwgMCwgMCwgMCk7CiAJCQluZXYrKzsKIAkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0 LCBFVkZJTFRfV1JJVEUsIEVWX0RFTEVURSB8IEVWX1JFQ0VJUFQsIDAsIDAsIDApOwpAQCAtMTMz NCw3ICsxMzM3LDEwIEBAIHJlZ2lzdGVyX3NvY2tldChDVVJMICpjdXJsLCBjdXJsX3NvY2tldF90 IHNvY2tldCwgaW50IHdoYXQsIHZvaWQgKmN0eCwKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlyZXMg PSBrZXZlbnQoYWN0eC0+bXV4LCBldiwgbmV2LCBldl9vdXQsIGxlbmd0aG9mKGV2X291dCksICZ0 aW1lb3V0KTsKKwlBc3NlcnQobmV2IDw9IGxlbmd0aG9mKGV2KSk7CisJQXNzZXJ0KG5ldiA8PSBs ZW5ndGhvZihldl9vdXQpKTsKKworCXJlcyA9IGtldmVudChhY3R4LT5tdXgsIGV2LCBuZXYsIGV2 X291dCwgbmV2LCAmdGltZW91dCk7CiAJaWYgKHJlcyA8IDApCiAJewogCQlhY3R4X2Vycm9yKGFj dHgsICJjb3VsZCBub3QgbW9kaWZ5IGtxdWV1ZTogJW0iKTsKLS0gCjIuMzQuMQoK --00000000000001fde1063bcbf7a2 Content-Type: application/octet-stream; name="v4-0003-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Disposition: attachment; filename="v4-0003-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tpqp43 RnJvbSA3NDA4Nzc4ZDU3OTk1ZWJhMWM0ZDgyYWNmOTY0OTdmNWNkNDhmODJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDEzOjE2OjQ4IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NCAzLzVdIG9hdXRoOiBSZW1vdmUgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUgbXVs dGlwbGV4ZXIKCkluIGEgY2FzZSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBjb21taXQsIGFuIGV4 cGlyZWQgdGltZXIgY2FuIHJlbWFpbgpwZXJtYW5lbnRseSByZWFkYWJsZSBpZiBDdXJsIGRvZXMg bm90IHJlbW92ZSB0aGUgdGltZW91dCBpdHNlbGYuIFNpbmNlCnRoYXQgcmVtb3ZhbCBpc24ndCBn dWFyYW50ZWVkIHRvIGhhcHBlbiBpbiByZWFsLXdvcmxkIHNpdHVhdGlvbnMsCmltcGxlbWVudCBk cmFpbl90aW1lcl9ldmVudHMoKSB0byByZXNldCB0aGUgdGltZXIgYmVmb3JlIGNhbGxpbmcgaW50 bwpkcml2ZV9yZXF1ZXN0KCkuCgpNb3ZpbmcgdG8gZHJhaW5fdGltZXJfZXZlbnRzKCkgaGFwcGVu cyB0byBmaXggYSBsb2dpYyBidWcgaW4gdGhlCnByZXZpb3VzIGNhbGxlciBvZiB0aW1lcl9leHBp cmVkKCksIHdoaWNoIHRyZWF0ZWQgYW4gZXJyb3IgY29uZGl0aW9uIGFzCmlmIHRoZSB0aW1lciB3 ZXJlIGV4cGlyZWQgaW5zdGVhZCBvZiBiYWlsaW5nIG91dC4KClRoZSBwcmV2aW91cyBpbXBsZW1l bnRhdGlvbiBvZiB0aW1lcl9leHBpcmVkKCkgZ2F2ZSBkaWZmZXJpbmcgcmVzdWx0cwpmb3IgZXBv bGwgYW5kIGtxdWV1ZSBpZiB0aGUgdGltZXIgd2FzIHJlc2V0LiAoRm9yIGVwb2xsLCBhIHJlc2V0 IHRpbWVyCndhcyBjb25zaWRlcmVkIHRvIGJlIGV4cGlyZWQsIGFuZCBmb3Iga3F1ZXVlIGl0IHdh cyBub3QuKSBUaGlzIGRpZG4ndApwcmV2aW91c2x5IGNhdXNlIHByb2JsZW1zLCBzaW5jZSB0aW1l cl9leHBpcmVkKCkgd2FzIG9ubHkgY2FsbGVkIHdoaWxlCnRoZSB0aW1lciB3YXMga25vd24gdG8g YmUgc2V0LCBidXQgYm90aCBpbXBsZW1lbnRhdGlvbnMgbm93IHVzZSB0aGUKa3F1ZXVlIGxvZ2lj LgoKUmV2aWV3ZWQtYnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KQmFj a3BhdGNoLXRocm91Z2g6IDE4CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FPWW1p K25EWnhKSGFXajlfalJTeWY4dU1Ub0NBREFtT2ZKRWdnc0tXLWtZN2FVd0hBQG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIHwgMTA4ICsr KysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyks IDQwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwpp bmRleCA5N2MzMzI5OWE3OS4uYWE1ZDJiZmQ5NmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2Vz L2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9vYXV0aC1jdXJsLmMKQEAgLTE1MzYsNDAgKzE1MzYsMjAgQEAgc2V0X3RpbWVyKHN0cnVjdCBh c3luY19jdHggKmFjdHgsIGxvbmcgdGltZW91dCkKIAogLyoKICAqIFJldHVybnMgMSBpZiB0aGUg dGltZW91dCBpbiB0aGUgbXVsdGlwbGV4ZXIgc2V0IGhhcyBleHBpcmVkIHNpbmNlIHRoZSBsYXN0 Ci0gKiBjYWxsIHRvIHNldF90aW1lcigpLCAwIGlmIHRoZSB0aW1lciBpcyBzdGlsbCBydW5uaW5n LCBvciAtMSAod2l0aCBhbgotICogYWN0eF9lcnJvcigpIHJlcG9ydCkgaWYgdGhlIHRpbWVyIGNh bm5vdCBiZSBxdWVyaWVkLgorICogY2FsbCB0byBzZXRfdGltZXIoKSwgMCBpZiB0aGUgdGltZXIg aXMgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3IgZGlzYXJtZWQsIG9yCisgKiAtMSAod2l0aCBhbiBh Y3R4X2Vycm9yKCkgcmVwb3J0KSBpZiB0aGUgdGltZXIgY2Fubm90IGJlIHF1ZXJpZWQuCiAgKi8K IHN0YXRpYyBpbnQKIHRpbWVyX2V4cGlyZWQoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKIHsKLSNp ZiBkZWZpbmVkKEhBVkVfU1lTX0VQT0xMX0gpCi0Jc3RydWN0IGl0aW1lcnNwZWMgc3BlYyA9IHsw fTsKLQotCWlmICh0aW1lcmZkX2dldHRpbWUoYWN0eC0+dGltZXJmZCwgJnNwZWMpIDwgMCkKLQl7 Ci0JCWFjdHhfZXJyb3IoYWN0eCwgImdldHRpbmcgdGltZXJmZCB2YWx1ZTogJW0iKTsKLQkJcmV0 dXJuIC0xOwotCX0KLQotCS8qCi0JICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHdlJ3Jl IHVzaW5nIHNpbmdsZS1zaG90IHRpbWVycy4gSWYgeW91Ci0JICogY2hhbmdlIHRvIHVzaW5nIGlu dGVydmFscywgeW91J2xsIG5lZWQgdG8gcmVpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbgotCSAqIHRv bywgcG9zc2libHkgd2l0aCB0aGUgcmVhZCgpIG9yIHNlbGVjdCgpIGludGVyZmFjZXMgZm9yIHRp bWVyZmQuCi0JICovCi0JQXNzZXJ0KHNwZWMuaXRfaW50ZXJ2YWwudHZfc2VjID09IDAKLQkJICAg JiYgc3BlYy5pdF9pbnRlcnZhbC50dl9uc2VjID09IDApOwotCi0JLyogSWYgdGhlIHJlbWFpbmlu ZyB0aW1lIHRvIGV4cGlyYXRpb24gaXMgemVybywgd2UncmUgZG9uZS4gKi8KLQlyZXR1cm4gKHNw ZWMuaXRfdmFsdWUudHZfc2VjID09IDAKLQkJCSYmIHNwZWMuaXRfdmFsdWUudHZfbnNlYyA9PSAw KTsKLSNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRVZFTlRfSCkKKyNpZiBkZWZpbmVkKEhBVkVfU1lT X0VQT0xMX0gpIHx8IGRlZmluZWQoSEFWRV9TWVNfRVZFTlRfSCkKIAlpbnQJCQlyZXM7CiAKLQkv KiBJcyB0aGUgdGltZXIgcXVldWUgcmVhZHk/ICovCisJLyogSXMgdGhlIHRpbWVyIHJlYWR5PyAq LwogCXJlcyA9IFBRc29ja2V0UG9sbChhY3R4LT50aW1lcmZkLCAxIC8qIGZvclJlYWQgKi8gLCAw LCAwKTsKIAlpZiAocmVzIDwgMCkKIAl7Ci0JCWFjdHhfZXJyb3IoYWN0eCwgImNoZWNraW5nIGtx dWV1ZSBmb3IgdGltZW91dDogJW0iKTsKKwkJYWN0eF9lcnJvcihhY3R4LCAiY2hlY2tpbmcgdGlt ZXIgZXhwaXJhdGlvbjogJW0iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTYwMSw2ICsxNTgx LDM2IEBAIHJlZ2lzdGVyX3RpbWVyKENVUkxNICpjdXJsbSwgbG9uZyB0aW1lb3V0LCB2b2lkICpj dHgpCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBSZW1vdmVzIGFueSBleHBpcmVkLXRpbWVyIGV2 ZW50IGZyb20gdGhlIG11bHRpcGxleGVyLiBJZiB3YXNfZXhwaXJlZCBpcyBub3QKKyAqIE5VTEws IGl0IHdpbGwgY29udGFpbiB3aGV0aGVyIG9yIG5vdCB0aGUgdGltZXIgd2FzIGV4cGlyZWQgYXQg dGltZSBvZiBjYWxsLgorICovCitzdGF0aWMgYm9vbAorZHJhaW5fdGltZXJfZXZlbnRzKHN0cnVj dCBhc3luY19jdHggKmFjdHgsIGJvb2wgKndhc19leHBpcmVkKQoreworCWludAkJCXJlczsKKwor CXJlcyA9IHRpbWVyX2V4cGlyZWQoYWN0eCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiBmYWxz ZTsKKworCWlmIChyZXMgPiAwKQorCXsKKwkJLyoKKwkJICogVGltZXIgaXMgZXhwaXJlZC4gV2Ug Y291bGQgZHJhaW4gdGhlIGV2ZW50IG1hbnVhbGx5IGZyb20gdGhlCisJCSAqIHRpbWVyZmQsIGJ1 dCBpdCdzIGVhc2llciB0byBzaW1wbHkgZGlzYWJsZSBpdDsgdGhhdCBrZWVwcyB0aGUKKwkJICog cGxhdGZvcm0tc3BlY2lmaWMgY29kZSBpbiBzZXRfdGltZXIoKS4KKwkJICovCisJCWlmICghc2V0 X3RpbWVyKGFjdHgsIC0xKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAod2FzX2V4cGly ZWQpCisJCSp3YXNfZXhwaXJlZCA9IChyZXMgPiAwKTsKKworCXJldHVybiB0cnVlOworfQorCiAv KgogICogUHJpbnRzIEN1cmwgcmVxdWVzdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gc3RkZXJy LgogICoKQEAgLTI4MDQsNiArMjgxNCwyMiBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKFBH Y29ubiAqY29ubikKIAkJCQl7CiAJCQkJCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgc3RhdHVz OwogCisJCQkJCS8qCisJCQkJCSAqIENsZWFyIGFueSBleHBpcmVkIHRpbWVvdXQgYmVmb3JlIGNh bGxpbmcgYmFjayBpbnRvCisJCQkJCSAqIEN1cmwuIEN1cmwgaXMgbm90IGd1YXJhbnRlZWQgdG8g ZG8gdGhpcyBmb3IgdXMsIGJlY2F1c2UKKwkJCQkJICogaXRzIEFQSSBleHBlY3RzIHVzIHRvIHVz ZSBzaW5nbGUtc2hvdCAoaS5lLgorCQkJCQkgKiBlZGdlLXRyaWdnZXJlZCkgdGltZW91dHMsIGFu ZCBvdXJzIGFyZSBsZXZlbC10cmlnZ2VyZWQKKwkJCQkJICogdmlhIHRoZSBtdXguCisJCQkJCSAq CisJCQkJCSAqIFRoaXMgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCB0aGUgY29tYl9tdWx0aXBsZXhl cigpIGNhbGwKKwkJCQkJICogYmVsb3c6IHdlIG1pZ2h0IGFjY2lkZW50YWxseSBjbGVhciBhIHNo b3J0IHRpbWVvdXQgdGhhdAorCQkJCQkgKiB3YXMgYm90aCBzZXQgYW5kIGV4cGlyZWQgZHVyaW5n IHRoZSBjYWxsIHRvCisJCQkJCSAqIGRyaXZlX3JlcXVlc3QoKS4KKwkJCQkJICovCisJCQkJCWlm ICghZHJhaW5fdGltZXJfZXZlbnRzKGFjdHgsIE5VTEwpKQorCQkJCQkJZ290byBlcnJvcl9yZXR1 cm47CisKKwkJCQkJLyogTW92ZSB0aGUgcmVxdWVzdCBmb3J3YXJkLiAqLwogCQkJCQlzdGF0dXMg PSBkcml2ZV9yZXF1ZXN0KGFjdHgpOwogCiAJCQkJCWlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElO R19GQUlMRUQpCkBAIC0yODI2LDI0ICsyODUyLDI2IEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93X2lt cGwoUEdjb25uICpjb25uKQogCQkJCX0KIAogCQkJY2FzZSBPQVVUSF9TVEVQX1dBSVRfSU5URVJW QUw6Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSBjbGllbnQgYXBwbGljYXRpb24gaXMgc3VwcG9zZWQg dG8gd2FpdCB1bnRpbCBvdXIgdGltZXIKLQkJCQkgKiBleHBpcmVzIGJlZm9yZSBjYWxsaW5nIFBR Y29ubmVjdFBvbGwoKSBhZ2FpbiwgYnV0IHRoYXQKLQkJCQkgKiBtaWdodCBub3QgaGFwcGVuLiBU byBhdm9pZCBzZW5kaW5nIGEgdG9rZW4gcmVxdWVzdCBlYXJseSwKLQkJCQkgKiBjaGVjayB0aGUg dGltZXIgYmVmb3JlIGNvbnRpbnVpbmcuCi0JCQkJICovCi0JCQkJaWYgKCF0aW1lcl9leHBpcmVk KGFjdHgpKQogCQkJCXsKLQkJCQkJc2V0X2Nvbm5fYWx0c29jayhjb25uLCBhY3R4LT50aW1lcmZk KTsKLQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKLQkJCQl9CisJCQkJCWJvb2wJ CWV4cGlyZWQ7CiAKLQkJCQkvKiBEaXNhYmxlIHRoZSBleHBpcmVkIHRpbWVyLiAqLwotCQkJCWlm ICghc2V0X3RpbWVyKGFjdHgsIC0xKSkKLQkJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQkJCS8q CisJCQkJCSAqIFRoZSBjbGllbnQgYXBwbGljYXRpb24gaXMgc3VwcG9zZWQgdG8gd2FpdCB1bnRp bCBvdXIKKwkJCQkJICogdGltZXIgZXhwaXJlcyBiZWZvcmUgY2FsbGluZyBQUWNvbm5lY3RQb2xs KCkgYWdhaW4sIGJ1dAorCQkJCQkgKiB0aGF0IG1pZ2h0IG5vdCBoYXBwZW4uIFRvIGF2b2lkIHNl bmRpbmcgYSB0b2tlbiByZXF1ZXN0CisJCQkJCSAqIGVhcmx5LCBjaGVjayB0aGUgdGltZXIgYmVm b3JlIGNvbnRpbnVpbmcuCisJCQkJCSAqLworCQkJCQlpZiAoIWRyYWluX3RpbWVyX2V2ZW50cyhh Y3R4LCAmZXhwaXJlZCkpCisJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAotCQkJCWJyZWFrOwor CQkJCQlpZiAoIWV4cGlyZWQpCisJCQkJCXsKKwkJCQkJCXNldF9jb25uX2FsdHNvY2soY29ubiwg YWN0eC0+dGltZXJmZCk7CisJCQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOworCQkJ CQl9CisKKwkJCQkJYnJlYWs7CisJCQkJfQogCQl9CiAKIAkJLyoKLS0gCjIuMzQuMQoK --00000000000001fde1063bcbf7a2 Content-Type: application/octet-stream; name="v4-0004-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Disposition: attachment; filename="v4-0004-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tptfb4 RnJvbSA4MjQxMjU1ZTg0YzIwMDAwNDQ2YzhmYjI3ODY5OTliOWEwYzFkZDVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCA2IEp1biAyMDI1IDE1OjIyOjQxIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2NCA0LzVdIG9hdXRoOiBUcmFjayB0b3RhbCBjYWxsIGNvdW50IGR1cmluZyBhIGNs aWVudCBmbG93CgpUcmFja2luZyBkb3duIHRoZSBidWdzIHRoYXQgbGVkIHRvIHRoZSBhZGRpdGlv biBvZiBjb21iX211bHRpcGxleGVyKCkKYW5kIGRyYWluX3RpbWVyX2V2ZW50cygpIHdhcyBkaWZm aWN1bHQsIGJlY2F1c2UgYW4gaW5lZmZpY2llbnQgZmxvdyBpcwpub3QgdmlzaWJseSBkaWZmZXJl bnQgZnJvbSBvbmUgdGhhdCBpcyB3b3JraW5nIHByb3Blcmx5LiBUbyBoZWxwCm1haW50YWluZXJz IG5vdGljZSB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZywgdHJhY2sgdGhlIG51bWJlciBv ZgpjYWxscyBpbnRvIHRoZSBmbG93IGFzIHBhcnQgb2YgZGVidWcgbW9kZSwgYW5kIHByaW50IHRo ZSB0b3RhbCB3aGVuIHRoZQpmbG93IGZpbmlzaGVzLgoKQSBuZXcgdGVzdCBtYWtlcyBzdXJlIHRo ZSB0b3RhbCBjb3VudCBpcyBsZXNzIHRoYW4gMTAwLiAoV2UgZXhwZWN0CnNvbWV0aGluZyBvbiB0 aGUgb3JkZXIgb2YgMTAuKSBUaGlzIGlzbid0IGZvb2xwcm9vZiwgYnV0IGl0IGlzIGFibGUgdG8K Y2F0Y2ggc2V2ZXJhbCByZWdyZXNzaW9ucyBpbiB0aGUgbG9naWMgb2YgdGhlIHByaW9yIHR3byBj b21taXRzLCBhbmQKZnV0dXJlIHdvcmsgdG8gYWRkIFRMUyBzdXBwb3J0IHRvIHRoZSBvYXV0aF92 YWxpZGF0b3IgdGVzdCBzZXJ2ZXIgc2hvdWxkCnN0cmVuZ3RoZW4gaXQgYXMgd2VsbC4KCkJhY2tw YXRjaC10aHJvdWdoOiAxOApEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaStu RFp4SkhhV2o5X2pSU3lmOHVNVG9DQURBbU9mSkVnZ3NLVy1rWTdhVXdIQUBtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyAgICAgICB8IDIy ICsrKysrKysrKysrKysKIC4uLi9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIu cGwgICB8IDMxICsrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1 cmwuYwppbmRleCBhYTVkMmJmZDk2Yy4uYWE1MGIwMGQwNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9vYXV0aC1jdXJsLmMKQEAgLTI3OCw2ICsyNzgsNyBAQCBzdHJ1Y3QgYXN5bmNfY3R4 CiAJYm9vbAkJdXNlcl9wcm9tcHRlZDsJLyogaGF2ZSB3ZSBhbHJlYWR5IHNlbnQgdGhlIGF1dGh6 IHByb21wdD8gKi8KIAlib29sCQl1c2VkX2Jhc2ljX2F1dGg7CS8qIGRpZCB3ZSBzZW5kIGEgY2xp ZW50IHNlY3JldD8gKi8KIAlib29sCQlkZWJ1Z2dpbmc7CQkvKiBjYW4gd2UgZ2l2ZSB1bnNhZmUg ZGV2ZWxvcGVyIGFzc2lzdGFuY2U/ICovCisJaW50CQkJZGJnX251bV9jYWxsczsJLyogKGRlYnVn IG1vZGUpIGhvdyBtYW55IHRpbWVzIHdlcmUgd2UgY2FsbGVkPyAqLwogfTsKIAogLyoKQEAgLTMw MjEsNiArMzAyMiw4IEBAIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKIHBnX2ZlX3J1bl9vYXV0 aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHJlc3Vs dDsKKwlmZV9vYXV0aF9zdGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7CisJc3Ry dWN0IGFzeW5jX2N0eCAqYWN0eDsKICNpZm5kZWYgV0lOMzIKIAlzaWdzZXRfdAlvc2lnc2V0Owog CWJvb2wJCXNpZ3BpcGVfcGVuZGluZzsKQEAgLTMwNDksNiArMzA1MiwyNSBAQCBwZ19mZV9ydW5f b2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAKIAlyZXN1bHQgPSBwZ19mZV9ydW5fb2F1dGhfZmxv d19pbXBsKGNvbm4pOwogCisJLyoKKwkgKiBUbyBhc3Npc3Qgd2l0aCBmaW5kaW5nIGJ1Z3MgaW4g Y29tYl9tdWx0aXBsZXhlcigpIGFuZAorCSAqIGRyYWluX3RpbWVyX2V2ZW50cygpLCB3aGVuIHdl J3JlIGluIGRlYnVnIG1vZGUsIHRyYWNrIHRoZSB0b3RhbCBudW1iZXIKKwkgKiBvZiBjYWxscyB0 byB0aGlzIGZ1bmN0aW9uIGFuZCBwcmludCB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIGZsb3cuCisJ ICoKKwkgKiBCZSBjYXJlZnVsIHRoYXQgc3RhdGUtPmFzeW5jX2N0eCBjb3VsZCBiZSBOVUxMIGlm IGVhcmx5IGluaXRpYWxpemF0aW9uCisJICogZmFpbHMgZHVyaW5nIHRoZSBmaXJzdCBjYWxsLgor CSAqLworCWFjdHggPSBzdGF0ZS0+YXN5bmNfY3R4OworCUFzc2VydChhY3R4IHx8IHJlc3VsdCA9 PSBQR1JFU19QT0xMSU5HX0ZBSUxFRCk7CisKKwlpZiAoYWN0eCAmJiBhY3R4LT5kZWJ1Z2dpbmcp CisJeworCQlhY3R4LT5kYmdfbnVtX2NhbGxzKys7CisJCWlmIChyZXN1bHQgPT0gUEdSRVNfUE9M TElOR19PSyB8fCByZXN1bHQgPT0gUEdSRVNfUE9MTElOR19GQUlMRUQpCisJCQlmcHJpbnRmKHN0 ZGVyciwgIltsaWJwcV0gdG90YWwgbnVtYmVyIG9mIHBvbGxzOiAlZFxuIiwKKwkJCQkJYWN0eC0+ ZGJnX251bV9jYWxscyk7CisJfQorCiAjaWZuZGVmIFdJTjMyCiAJaWYgKG1hc2tlZCkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIu cGwgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwKaW5k ZXggNDE2NzJlYmQ1YzYuLmMwZGFmYjhiZTc2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsCkBAIC00MTgsNiArNDE4LDM1IEBAICRub2Rl LT5jb25uZWN0X2ZhaWxzKAogCSAgcXIvZmFpbGVkIHRvIG9idGFpbiBhY2Nlc3MgdG9rZW46IG11 dHVhbCBUTFMgcmVxdWlyZWQgZm9yIGNsaWVudCBcKGludmFsaWRfY2xpZW50XCkvCiApOwogCisj IENvdW50IHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIGludGVybmFsIGZsb3cgd2hlbiBtdWx0 aXBsZSByZXRyaWVzIGFyZQorIyB0cmlnZ2VyZWQuIFRoZSBleGFjdCBudW1iZXIgZGVwZW5kcyBv biBtYW55IHRoaW5ncyAtLSB0aGUgVENQIHN0YWNrLCB0aGUKKyMgdmVyc2lvbiBvZiBDdXJsIGlu IHVzZSwgcmFuZG9tIGNoYW5jZSAtLSBidXQgYSByaWRpY3Vsb3VzbHkgaGlnaCBudW1iZXIKKyMg c3VnZ2VzdHMgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggb3VyIGFiaWxpdHkgdG8gY2xlYXIgbXVs dGlwbGV4ZXIgZXZlbnRzIGFmdGVyCisjIHRoZXkncmUgbm8gbG9uZ2VyIGFwcGxpY2FibGUuCitt eSAoJHJldCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgKKwkncG9zdGdyZXMnLAor CSJTRUxFQ1QgJ2Nvbm5lY3RlZCBmb3IgY2FsbCBjb3VudCciLAorCWV4dHJhX3BhcmFtcyA9PiBb Jy13J10sCisJY29ubnN0ciA9PiBjb25uc3RyKHN0YWdlID0+ICd0b2tlbicsIHJldHJpZXMgPT4g MiksCisJb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworaXMoJHJldCwgMCwgImNhbGwgY291bnQgY29u bmVjdGlvbiBzdWNjZWVkcyIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyQFZpc2l0IGh0dHBzOi8v ZXhhbXBsZVwuY29tLyBhbmQgZW50ZXIgdGhlIGNvZGU6IHBvc3RncmVzdXNlckAsCisJImNhbGwg Y291bnQ6IHN0ZGVyciBtYXRjaGVzIik7CisKK215ICRjb3VudF9wYXR0ZXJuID0gcXIvXFtsaWJw cVxdIHRvdGFsIG51bWJlciBvZiBwb2xsczogKFxkKykvOworaWYgKGxpa2UoJHN0ZGVyciwgJGNv dW50X3BhdHRlcm4sICJjYWxsIGNvdW50OiBjb3VudCBpcyBwcmludGVkIikpCit7CisJIyBGb3Ig cmVmZXJlbmNlLCBhIHR5cGljYWwgZmxvdyB3aXRoIHR3byByZXRyaWVzIG1pZ2h0IHRha2UgYmV0 d2VlbiA1LTE1CisJIyBjYWxscyB0byB0aGUgY2xpZW50IGltcGxlbWVudGF0aW9uLiBBbmQgd2hp bGUgdGhpcyB3aWxsIHByb2JhYmx5IGNvbnRpbnVlCisJIyB0byBjaGFuZ2UgYWNyb3NzIE9TZXMg YW5kIEN1cmwgdXBkYXRlcywgd2UncmUgbGlrZWx5IGluIHRyb3VibGUgaWYgd2Ugc2VlCisJIyBo dW5kcmVkcyBvciB0aG91c2FuZHMgb2YgY2FsbHMuCisJJHN0ZGVyciA9fiAkY291bnRfcGF0dGVy bjsKKwljbXBfb2soJDEsICc8JywgMTAwLCAiY2FsbCBjb3VudCBpcyByZWFzb25hYmx5IHNtYWxs Iik7Cit9CisKICMgU3RyZXNzIHRlc3Q6IG1ha2Ugc3VyZSBvdXIgYnVpbHRpbiBmbG93IG9wZXJh dGVzIGNvcnJlY3RseSBldmVuIGlmIHRoZSBjbGllbnQKICMgYXBwbGljYXRpb24gaXNuJ3QgcmVz cGVjdGluZyBQR1JFU19QT0xMSU5HX1JFQURJTkcvV1JJVElORyBzaWduYWxzIHJldHVybmVkCiAj IGZyb20gUFFjb25uZWN0UG9sbCgpLgpAQCAtNDI4LDcgKzQ1Nyw3IEBAIG15IEBjbWQgPSAoCiAJ Y29ubnN0cihzdGFnZSA9PiAnYWxsJywgcmV0cmllcyA9PiAxLCBpbnRlcnZhbCA9PiAxKSk7CiAK IG5vdGUgInJ1bm5pbmcgJyIgLiBqb2luKCInICciLCBAY21kKSAuICInIjsKLW15ICgkc3Rkb3V0 LCAkc3RkZXJyKSA9IHJ1bl9jb21tYW5kKFxAY21kKTsKKygkc3Rkb3V0LCAkc3RkZXJyKSA9IHJ1 bl9jb21tYW5kKFxAY21kKTsKIAogbGlrZSgkc3Rkb3V0LCBxci9jb25uZWN0aW9uIHN1Y2NlZWRl ZC8sICJzdHJlc3MtYXN5bmM6IHN0ZG91dCBtYXRjaGVzIik7CiB1bmxpa2UoCi0tIAoyLjM0LjEK Cg== --00000000000001fde1063bcbf7a2 Content-Type: application/octet-stream; name="v4-0005-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Disposition: attachment; filename="v4-0005-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me1tpwfh5 RnJvbSAzMzcxMjQwNjRmMzdlY2NmYjVkMmY5YmEyN2VkYmY3MGU5NDVhZWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDE1OjA0OjM0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NCA1LzVdIG9hdXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFu ZGxpbmcKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0 PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRvIGJldHRlciByZWNvcmQg dGhlIGludGVybmFsIGJlaGF2aW9ycyBvZiBvYXV0aC1jdXJsLmMsIGFkZCBhIHVuaXQgdGVzdApz dWl0ZSBmb3IgdGhlIHNvY2tldCBhbmQgdGltZXIgaGFuZGxpbmcgY29kZS4gVGhpcyBpcyBhbGwg YmFzZWQgb24gVEFQCmFuZCBkcml2ZW4gYnkgb3VyIGV4aXN0aW5nIFRlc3Q6Ok1vcmUgaW5mcmFz dHJ1Y3R1cmUuCgpSZXZpZXdlZC1ieTogRGFnZmlubiBJbG1hcmkgTWFubnPDpWtlciA8aWxtYXJp QGlsbWFyaS5vcmc+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FPWW1pK25EWnhK SGFXajlfalJTeWY4dU1Ub0NBREFtT2ZKRWdnc0tXLWtZN2FVd0hBQG1haWwuZ21haWwuY29tCi0t LQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKwog c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgICAgICAgfCAgMzUgKysKIHNy Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3QvMDAxX29hdXRoLnBsICAgIHwgIDI0ICsKIHNyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jIHwgNTI3ICsrKysrKysrKysr KysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNjAwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5j CgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZQppbmRleCA2ODJmMTc0MTNiMy4uZTczNTcz Njk0YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCisr KyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCkBAIC03OSw1ICs3OSwxOSBA QCB1bmluc3RhbGw6CiAJcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJChzdGxpYiknCiAJcm0g LWYgJyQoREVTVERJUikkKGxpYmRpcikvJChzaGxpYiknCiAKKy5QSE9OWTogYWxsLXRlc3RzCith bGwtdGVzdHM6IG9hdXRoX3Rlc3RzJChYKQorCitvYXV0aF90ZXN0cyQoWCk6IHRlc3Qtb2F1dGgt Y3VybC5vIG9hdXRoLXV0aWxzLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBxCisJJChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAk KFNITElCX0xJTkspIC1vICRACisKK2NoZWNrOiBhbGwtdGVzdHMKKwkkKHByb3ZlX2NoZWNrKQor CitpbnN0YWxsY2hlY2s6IGFsbC10ZXN0cworCSQocHJvdmVfaW5zdGFsbGNoZWNrKQorCiBjbGVh biBkaXN0Y2xlYW46IGNsZWFuLWxpYgogCXJtIC1mICQoT0JKUykgJChPQkpTX1NUQVRJQykgJChP QkpTX1NITElCKQorCXJtIC1mIHRlc3Qtb2F1dGgtY3VybC5vIG9hdXRoX3Rlc3RzJChYKQorCXJt IC1yZiB0bXBfY2hlY2sKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21l c29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXgg ZGYwNjRjNTlhNDAuLjUwNWUxNjcxYjg2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNv bi5idWlsZApAQCAtNDcsMyArNDcsMzggQEAgbGlicHFfb2F1dGhfc28gPSBzaGFyZWRfbW9kdWxl KGxpYnBxX29hdXRoX25hbWUsCiAgIGxpbmtfYXJnczogZXhwb3J0X2ZtdC5mb3JtYXQoZXhwb3J0 X2ZpbGUuZnVsbF9wYXRoKCkpLAogICBrd2FyZ3M6IGRlZmF1bHRfbGliX2FyZ3MsCiApCisKK2xp YnBxX29hdXRoX3Rlc3RfZGVwcyA9IFtdCisKK29hdXRoX3Rlc3Rfc291cmNlcyA9IGZpbGVzKCd0 ZXN0LW9hdXRoLWN1cmwuYycpICsgbGlicHFfb2F1dGhfc29fc291cmNlcworCitpZiBob3N0X3N5 c3RlbSA9PSAnd2luZG93cycKKyAgb2F1dGhfdGVzdF9zb3VyY2VzICs9IHJjX2Jpbl9nZW4ucHJv Y2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAnb2F1dGhfdGVz dHMnLAorICAgICctLUZJTEVERVNDJywgJ09BdXRoIHVuaXQgdGVzdCBwcm9ncmFtJyxdKQorZW5k aWYKKworbGlicHFfb2F1dGhfdGVzdF9kZXBzICs9IGV4ZWN1dGFibGUoJ29hdXRoX3Rlc3RzJywK KyAgb2F1dGhfdGVzdF9zb3VyY2VzLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9zaGxpYl9j b2RlLCBsaWJwcSwgbGlicHFfb2F1dGhfZGVwc10sCisgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJn cyArIHsKKyAgICAnY19hcmdzJzogZGVmYXVsdF9iaW5fYXJncy5nZXQoJ2NfYXJncycsIFtdKSAr IGxpYnBxX29hdXRoX3NvX2NfYXJncywKKyAgICAnY19wY2gnOiBwY2hfcG9zdGdyZXNfZmVfaCwK KyAgICAnaW5jbHVkZV9kaXJlY3Rvcmllcyc6IFtsaWJwcV9pbmMsIHBvc3RncmVzX2luY10sCisg ICAgJ2luc3RhbGwnOiBmYWxzZSwKKyAgfQorKQorCit0ZXN0cHJlcF90YXJnZXRzICs9IGxpYnBx X29hdXRoX3Rlc3RfZGVwcworCit0ZXN0cyArPSB7CisgICduYW1lJzogJ2xpYnBxLW9hdXRoJywK KyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAx X29hdXRoLnBsJywKKyAgICBdLAorICAgICdkZXBzJzogbGlicHFfb2F1dGhfdGVzdF9kZXBzLAor ICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdC8wMDFfb2F1 dGgucGwgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWFmNmM4NjA3NjgKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApAQCAtMCww ICsxLDI0IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIERlZmVy IGVudGlyZWx5IHRvIHRoZSBvYXV0aF90ZXN0cyBleGVjdXRhYmxlLiBzdGRvdXQvZXJyIGlzIHJv dXRlZCB0aHJvdWdoCisjIFRlc3Q6Ok1vcmUgc28gdGhhdCBvdXIgbG9nZ2luZyBpbmZyYXN0cnVj dHVyZSBjYW4gaGFuZGxlIGl0IGNvcnJlY3RseS4gVXNpbmcKKyMgSVBDOjpSdW46Om5ld19jaHVu a2VyIHNlZW1zIHRvIGhlbHAgaW50ZXJsZWF2ZSB0aGUgdHdvIHN0cmVhbXMgYSBsaXR0bGUgYmV0 dGVyCisjIHRoYW4gd2l0aG91dC4KKyMKKyMgVE9ETzogcHJvdmUgY2FuIGFsc28gZGVhbCB3aXRo IG5hdGl2ZSBleGVjdXRhYmxlcyBpdHNlbGYsIHdoaWNoIHdlIGNvdWxkCisjIHByb2JhYmx5IG1h a2UgdXNlIG9mIHZpYSBQUk9WRV9URVNUUyBvbiB0aGUgTWFrZWZpbGUgc2lkZS4gQnV0IHRoZSBN ZXNvbiBzZXR1cAorIyBjYWxscyBQZXJsIGRpcmVjdGx5LCB3aGljaCB3b3VsZCByZXF1aXJlIG1v cmUgY29kZSB0byB3b3JrIGFyb3VuZC4uLiBhbmQKKyMgdGhlcmUncyBzdGlsbCB0aGUgbWF0dGVy IG9mIGxvZ2dpbmcuCitteSAkYnVpbGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CitteSAkb3V0 ID0gJGJ1aWxkZXItPm91dHB1dDsKK215ICRlcnIgPSAkYnVpbGRlci0+ZmFpbHVyZV9vdXRwdXQ7 CisKK0lQQzo6UnVuOjpydW4gWydvYXV0aF90ZXN0cyddLAorICAnPicsIElQQzo6UnVuOjpuZXdf Y2h1bmtlciwgc3ViIHsgJG91dC0+cHJpbnQoJF9bMF0pIH0sCisgICcyPicsIElQQzo6UnVuOjpu ZXdfY2h1bmtlciwgc3ViIHsgJGVyci0+cHJpbnQoJF9bMF0pIH0KKyAgb3IgZGllICJvYXV0aF90 ZXN0cyByZXR1cm5lZCAkPyI7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC90ZXN0LW9hdXRoLWN1cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1 dGgtY3VybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MjYzYWZm MmY0YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qt b2F1dGgtY3VybC5jCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogdGVzdC1vYXV0aC1jdXJsLmMK KyAqCisgKiBBIHVuaXQgdGVzdCBkcml2ZXIgZm9yIGxpYnBxLW9hdXRoLiBUaGlzICNpbmNsdWRl cyBvYXV0aC1jdXJsLmMsIHdoaWNoIGxldHMKKyAqIHRoZSB0ZXN0cyByZWZlcmVuY2Ugc3RhdGlj IGZ1bmN0aW9ucyBhbmQgb3RoZXIgaW50ZXJuYWxzLgorICoKKyAqIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcgaXMgcmVxdWlyZWQsIHRvIG1ha2UgaXQgZWFzeSBmb3IgdGVzdHMgdG8gd3JhcAorICogbXVz dC1zdWNjZWVkIGNvZGUgYXMgcGFydCBvZiB0ZXN0IHNldHVwLgorICoKKyAqIENvcHlyaWdodCAo YykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqLworCisjaW5j bHVkZSAib2F1dGgtY3VybC5jIgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIFRBUCBIZWxwZXJzCisgKi8KKworc3RhdGljIGludAlu dW1fdGVzdHMgPSAwOworCisvKgorICogUmVwb3J0cyBvay9ub3Qgb2sgdG8gdGhlIFRBUCBzdHJl YW0gb24gc3Rkb3V0LgorICovCisjZGVmaW5lIG9rKE9LLCBURVNUKSBcCisJb2tfaW1wbChPSywg VEVTVCwgI09LLCBfX0ZJTEVfXywgX19MSU5FX18pCisKK3N0YXRpYyBib29sCitva19pbXBsKGJv b2wgb2ssIGNvbnN0IGNoYXIgKnRlc3QsIGNvbnN0IGNoYXIgKnRlc3RzdHIsIGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lKQoreworCXByaW50ZigiJXNvayAlZCAtICVzXG4iLCBvayA/ICIiIDog Im5vdCAiLCArK251bV90ZXN0cywgdGVzdCk7CisKKwlpZiAoIW9rKQorCXsKKwkJcHJpbnRmKCIj IGF0ICVzOiVkOlxuIiwgZmlsZSwgbGluZSk7CisJCXByaW50ZigiIyAgIGV4cHJlc3Npb24gaXMg ZmFsc2U6ICVzXG4iLCB0ZXN0c3RyKTsKKwl9CisKKwlyZXR1cm4gb2s7Cit9CisKKy8qCisgKiBM aWtlIG9rKHRoaXMgPT0gdGhhdCksIGJ1dCB3aXRoIG1vcmUgZGlhZ25vc3RpY3Mgb24gZmFpbHVy ZS4KKyAqCisgKiBPbmx5IHdvcmtzIG9uIGludHMsIGJ1dCBsdWNraWx5IHRoYXQncyBhbGwgd2Ug bmVlZCBoZXJlLiBOb3RlIHRoYXQgdGhlIG11Y2gKKyAqIHNpbXBsZXItbG9va2luZyBtYWNybyBp bXBsZW1lbnRhdGlvbgorICoKKyAqICAgICBpc19kaWFnKG9rKFRISVMgPT0gVEhBVCwgVEVTVCks IFRISVMsICNUSElTLCBUSEFULCAjVEhBVCkKKyAqCisgKiBzdWZmZXJzIGZyb20gbXVsdGlwbGUg ZXZhbHVhdGlvbiBvZiB0aGUgbWFjcm8gYXJndW1lbnRzLi4uCisgKi8KKyNkZWZpbmUgaXMoVEhJ UywgVEhBVCwgVEVTVCkgXAorCWRvIHsgXAorCQlpbnQgdGhpc18gPSAoVEhJUyksIFwKKwkJCXRo YXRfID0gKFRIQVQpOyBcCisJCWlzX2RpYWcoIFwKKwkJCW9rX2ltcGwodGhpc18gPT0gdGhhdF8s IFRFU1QsICNUSElTICIgPT0gIiAjVEhBVCwgX19GSUxFX18sIF9fTElORV9fKSwgXAorCQkJdGhp c18sICNUSElTLCB0aGF0XywgI1RIQVQgXAorCQkpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGlj IGJvb2wKK2lzX2RpYWcoYm9vbCBvaywgaW50IHRoaXMsIGNvbnN0IGNoYXIgKnRoaXNzdHIsIGlu dCB0aGF0LCBjb25zdCBjaGFyICp0aGF0c3RyKQoreworCWlmICghb2spCisJCXByaW50ZigiIyAg ICVzID0gJWQ7ICVzID0gJWRcbiIsIHRoaXNzdHIsIHRoaXMsIHRoYXRzdHIsIHRoYXQpOworCisJ cmV0dXJuIG9rOworfQorCisvKgorICogVXRpbGl0aWVzCisgKi8KKworLyoKKyAqIENyZWF0ZXMg YSBwYXJ0aWFsbHktaW5pdGlhbGl6ZWQgYXN5bmNfY3R4IGZvciB0aGUgcHVycG9zZXMgb2YgdGVz dGluZy4gRnJlZQorICogd2l0aCBmcmVlX3Rlc3RfYWN0eCgpLgorICovCitzdGF0aWMgc3RydWN0 IGFzeW5jX2N0eCAqCitpbml0X3Rlc3RfYWN0eCh2b2lkKQoreworCXN0cnVjdCBhc3luY19jdHgg KmFjdHg7CisKKwlhY3R4ID0gY2FsbG9jKDEsIHNpemVvZigqYWN0eCkpOworCUFzc2VydChhY3R4 KTsKKworCWFjdHgtPm11eCA9IFBHSU5WQUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9IC0x OworCWFjdHgtPmRlYnVnZ2luZyA9IHRydWU7CisKKwlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVy cmJ1Zik7CisKKwlBc3NlcnQoc2V0dXBfbXVsdGlwbGV4ZXIoYWN0eCkpOworCisJcmV0dXJuIGFj dHg7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX3Rlc3RfYWN0eChzdHJ1Y3QgYXN5bmNfY3R4ICph Y3R4KQoreworCXRlcm1QUUV4cEJ1ZmZlcigmYWN0eC0+ZXJyYnVmKTsKKworCWlmIChhY3R4LT5t dXggIT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJY2xvc2UoYWN0eC0+bXV4KTsKKwlpZiAoYWN0eC0+ dGltZXJmZCA+PSAwKQorCQljbG9zZShhY3R4LT50aW1lcmZkKTsKKworCWZyZWUoYWN0eCk7Cit9 CisKK3N0YXRpYyBjaGFyIGR1bW15X2J1Zls0ICogMTAyNF07CS8qIGZvciBmaWxsX3BpcGUvZHJh aW5fcGlwZSAqLworCisvKgorICogV3JpdGVzIHRvIHRoZSB3cml0ZSBzaWRlIG9mIGEgcGlwZSB1 bnRpbCBpdCB3b24ndCB0YWtlIGFueSBtb3JlIGRhdGEuIFJldHVybnMKKyAqIHRoZSBhbW91bnQg d3JpdHRlbi4KKyAqLworc3RhdGljIHNzaXplX3QKK2ZpbGxfcGlwZShpbnQgZmQpCit7CisJaW50 CQkJbW9kZTsKKwlzc2l6ZV90CQl3cml0dGVuID0gMDsKKworCS8qIERvbid0IGJsb2NrLiAqLwor CUFzc2VydCgobW9kZSA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgIT0gLTEpOworCUFzc2VydChmY250 bChmZCwgRl9TRVRGTCwgbW9kZSB8IE9fTk9OQkxPQ0spID09IDApOworCisJd2hpbGUgKHRydWUp CisJeworCQlzc2l6ZV90CQl3OworCisJCXcgPSB3cml0ZShmZCwgZHVtbXlfYnVmLCBzaXplb2Yo ZHVtbXlfYnVmKSk7CisJCWlmICh3IDwgMCkKKwkJeworCQkJaWYgKGVycm5vICE9IEVBR0FJTiAm JiBlcnJubyAhPSBFV09VTERCTE9DSykKKwkJCXsKKwkJCQlwZXJyb3IoIndyaXRlIHRvIHBpcGUi KTsKKwkJCQl3cml0dGVuID0gLTE7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCXdyaXR0ZW4g Kz0gdzsKKwl9CisKKwkvKiBSZXNldCB0aGUgZGVzY3JpcHRvciBmbGFncy4gKi8KKwlBc3NlcnQo ZmNudGwoZmQsIEZfU0VURkQsIG1vZGUpID09IDApOworCisJcmV0dXJuIHdyaXR0ZW47Cit9CisK Ky8qCisgKiBEcmFpbnMgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgZGF0YSBmcm9tIHRoZSByZWFk IHNpZGUgb2YgYSBwaXBlLgorICovCitzdGF0aWMgYm9vbAorZHJhaW5fcGlwZShpbnQgZmQsIHNz aXplX3QgbikKK3sKKwlBc3NlcnQobiA+IDApOworCisJd2hpbGUgKG4pCisJeworCQlzaXplX3QJ CXRvX3JlYWQgPSAobiA8PSBzaXplb2YoZHVtbXlfYnVmKSkgPyBuIDogc2l6ZW9mKGR1bW15X2J1 Zik7CisJCXNzaXplX3QJCWRyYWluZWQ7CisKKwkJZHJhaW5lZCA9IHJlYWQoZmQsIGR1bW15X2J1 ZiwgdG9fcmVhZCk7CisJCWlmIChkcmFpbmVkIDwgMCkKKwkJeworCQkJcGVycm9yKCJyZWFkIGZy b20gcGlwZSIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJbiAtPSBkcmFpbmVkOworCX0K KworCXJldHVybiB0cnVlOworfQorCisvKgorICogVGVzdHMgd2hldGhlciB0aGUgbXVsdGlwbGV4 ZXIgaXMgbWFya2VkIHJlYWR5IGJ5IHRoZSBkZWFkbGluZS4gVGhpcyBpcyBhCisgKiBtYWNybyBz byB0aGF0IGZpbGUvbGluZSBpbmZvcm1hdGlvbiBtYWtlcyBzZW5zZSBkdXJpbmcgZmFpbHVyZXMu CisgKgorICogTkI6IG91ciBjdXJyZW50IG11bHRpcGxleGVyIGltcGxlbWVudGF0aW9ucyAoZXBv bGwva3F1ZXVlKSBhcmUgKnJlYWRhYmxlKgorICogd2hlbiB0aGUgdW5kZXJseWluZyBsaWJjdXJs IHNvY2tldHMgYXJlICp3cml0YWJsZSouIFRoaXMgYmVoYXZpb3IgaXMgcGlubmVkCisgKiBoZXJl IHRvIHJlY29yZCB0aGF0IGV4cGVjdGF0aW9uOyBQR1JFU19QT0xMSU5HX1JFQURJTkcgaXMgaGFy ZGNvZGVkCisgKiB0aHJvdWdob3V0IHRoZSBmbG93IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5n ZWQgaWYgYSBuZXcgbXVsdGlwbGV4ZXIgZG9lcworICogc29tZXRoaW5nIGRpZmZlcmVudC4KKyAq LworI2RlZmluZSBtdXhfaXNfcmVhZHkoTVVYLCBERUFETElORSwgVEVTVCkgXAorCWRvIHsgXAor CQlpbnQgcmVzXyA9IFBRc29ja2V0UG9sbChNVVgsIDEsIDAsIERFQURMSU5FKTsgXAorCQlBc3Nl cnQocmVzXyAhPSAtMSk7IFwKKwkJb2socmVzXyA+IDAsICJtdWx0aXBsZXhlciBpcyByZWFkeSAi IFRFU1QpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFRoZSBvcHBvc2l0ZSBvZiBtdXhfaXNf cmVhZHkoKS4KKyAqLworI2RlZmluZSBtdXhfaXNfbm90X3JlYWR5KE1VWCwgVEVTVCkgXAorCWRv IHsgXAorCQlpbnQgcmVzXyA9IFBRc29ja2V0UG9sbChNVVgsIDEsIDAsIDApOyBcCisJCUFzc2Vy dChyZXNfICE9IC0xKTsgXAorCQlpcyhyZXNfLCAwLCAibXVsdGlwbGV4ZXIgaXMgbm90IHJlYWR5 ICIgVEVTVCk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogVGVzdCBTdWl0ZXMKKyAqLworCisv KiBQZXItc3VpdGUgdGltZW91dC4gU2V0IHZpYSB0aGUgUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQg ZW52dmFyLiAqLworc3RhdGljIHBnX3VzZWNfdGltZV90IHRpbWVvdXRfdXMgPSAxODAgKiAxMDAw ICogMTAwMDsKKworc3RhdGljIHZvaWQKK3Rlc3Rfc2V0X3RpbWVyKHZvaWQpCit7CisJc3RydWN0 IGFzeW5jX2N0eCAqYWN0eCA9IGluaXRfdGVzdF9hY3R4KCk7CisJY29uc3QgcGdfdXNlY190aW1l X3QgZGVhZGxpbmUgPSBQUWdldEN1cnJlbnRUaW1lVVNlYygpICsgdGltZW91dF91czsKKworCXBy aW50ZigiIyB0ZXN0X3NldF90aW1lclxuIik7CisKKwkvKiBBIHplcm8tZHVyYXRpb24gdGltZXIg c2hvdWxkIHJlc3VsdCBpbiBhIG5lYXItaW1tZWRpYXRlIHJlYWR5IHNpZ25hbC4gKi8KKwlBc3Nl cnQoc2V0X3RpbWVyKGFjdHgsIDApKTsKKwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGlu ZSwgIndoZW4gdGltZXIgZXhwaXJlcyIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEsICJ0 aW1lcl9leHBpcmVkKCkgcmV0dXJucyAxIHdoZW4gdGltZXIgZXhwaXJlcyIpOworCisJLyogUmVz ZXR0aW5nIHRoZSB0aW1lciBmYXIgaW4gdGhlIGZ1dHVyZSBzaG91bGQgdW5zZXQgdGhlIHJlYWR5 IHNpZ25hbC4gKi8KKwlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIElOVF9NQVgpKTsKKwltdXhfaXNf bm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gdGltZXIgaXMgcmVzZXQgdG8gdGhlIGZ1dHVyZSIp OworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDAsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAw IHdpdGggdW5leHBpcmVkIHRpbWVyIik7CisKKwkvKiBTZXR0aW5nIGFub3RoZXIgemVyby1kdXJh dGlvbiB0aW1lciBzaG91bGQgb3ZlcnJpZGUgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwlBc3NlcnQo c2V0X3RpbWVyKGFjdHgsIDApKTsKKwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwg IndoZW4gdGltZXIgaXMgcmUtZXhwaXJlZCIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEs ICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAxIHdoZW4gdGltZXIgaXMgcmUtZXhwaXJlZCIpOwor CisJLyogQW5kIGRpc2FibGluZyB0aGF0IHRpbWVyIHNob3VsZCBvbmNlIGFnYWluIHVuc2V0IHRo ZSByZWFkeSBzaWduYWwuICovCisJQXNzZXJ0KHNldF90aW1lcihhY3R4LCAtMSkpOworCW11eF9p c19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0aW1lciBpcyB1bnNldCIpOworCWlzKHRpbWVy X2V4cGlyZWQoYWN0eCksIDAsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIHdoZW4gdGltZXIg aXMgdW5zZXQiKTsKKworCXsKKwkJYm9vbAkJZXhwaXJlZDsKKworCQkvKiBNYWtlIHN1cmUgZHJh aW5fdGltZXJfZXZlbnRzKCkgZnVuY3Rpb25zIGNvcnJlY3RseSBhcyB3ZWxsLiAqLworCQlBc3Nl cnQoc2V0X3RpbWVyKGFjdHgsIDApKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxp bmUsICJ3aGVuIHRpbWVyIGlzIHJlLWV4cGlyZWQgKGRyYWluX3RpbWVyX2V2ZW50cykiKTsKKwor CQlBc3NlcnQoZHJhaW5fdGltZXJfZXZlbnRzKGFjdHgsICZleHBpcmVkKSk7CisJCW11eF9pc19u b3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0aW1lciBpcyBkcmFpbmVkIGFmdGVyIGV4cGlyaW5n Iik7CisJCWlzKGV4cGlyZWQsIDEsICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIGV4cGly YXRpb24iKTsKKwkJaXModGltZXJfZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyX2V4cGlyZWQoKSBy ZXR1cm5zIDAgYWZ0ZXIgdGltZXIgaXMgZHJhaW5lZCIpOworCisJCS8qIEEgc2Vjb25kIGRyYWlu IHNob3VsZCBkbyBub3RoaW5nLiAqLworCQlBc3NlcnQoZHJhaW5fdGltZXJfZXZlbnRzKGFjdHgs ICZleHBpcmVkKSk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0aW1lciBp cyBkcmFpbmVkIGEgc2Vjb25kIHRpbWUiKTsKKwkJaXMoZXhwaXJlZCwgMCwgImRyYWluX3RpbWVy X2V2ZW50cygpIHJlcG9ydHMgbm8gZXhwaXJhdGlvbiIpOworCQlpcyh0aW1lcl9leHBpcmVkKGFj dHgpLCAwLCAidGltZXJfZXhwaXJlZCgpIHN0aWxsIHJldHVybnMgMCIpOworCX0KKworCWZyZWVf dGVzdF9hY3R4KGFjdHgpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9yZWdpc3Rlcl9zb2NrZXQo dm9pZCkKK3sKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4ID0gaW5pdF90ZXN0X2FjdHgoKTsKKwlp bnQJCQlwaXBlZmRbMl07CisJaW50CQkJcmZkLAorCQkJCXdmZDsKKwlib29sCQliaWRpcmVjdGlv bmFsOworCisJLyogQ3JlYXRlIGEgbG9jYWwgcGlwZSBmb3IgY29tbXVuaWNhdGlvbi4gKi8KKwlB c3NlcnQocGlwZShwaXBlZmQpID09IDApOworCXJmZCA9IHBpcGVmZFswXTsKKwl3ZmQgPSBwaXBl ZmRbMV07CisKKwkvKgorCSAqIFNvbWUgcGxhdGZvcm1zIChGcmVlQlNEKSBpbXBsZW1lbnQgYmlk aXJlY3Rpb25hbCBwaXBlcywgYWZmZWN0aW5nIHRoZQorCSAqIGJlaGF2aW9yIG9mIHNvbWUgb2Yg dGhlc2UgdGVzdHMuIFN0b3JlIHRoYXQga25vd2xlZGdlIGZvciBsYXRlci4KKwkgKi8KKwliaWRp cmVjdGlvbmFsID0gUFFzb2NrZXRQb2xsKHJmZCAvKiByZWFkICovICwgMCwgMSAvKiB3cml0ZSAq LyAsIDApID4gMDsKKworCS8qCisJICogVGhpcyBzdWl0ZSBydW5zIHR3aWNlIC0tIG9uY2UgdXNp bmcgQ1VSTF9QT0xMX0lOL0NVUkxfUE9MTF9PVVQgZm9yCisJICogcmVhZC93cml0ZSBvcGVyYXRp b25zLCByZXNwZWN0aXZlbHksIGFuZCBvbmNlIHVzaW5nIENVUkxfUE9MTF9JTk9VVCBmb3IKKwkg KiBib3RoIHNpZGVzLgorCSAqLworCWZvciAoaW50IGlub3V0ID0gMDsgaW5vdXQgPCAyOyBpbm91 dCsrKQorCXsKKwkJY29uc3QgaW50CWluX2V2ZW50ID0gaW5vdXQgPyBDVVJMX1BPTExfSU5PVVQg OiBDVVJMX1BPTExfSU47CisJCWNvbnN0IGludAlvdXRfZXZlbnQgPSBpbm91dCA/IENVUkxfUE9M TF9JTk9VVCA6IENVUkxfUE9MTF9PVVQ7CisJCWNvbnN0IHBnX3VzZWNfdGltZV90IGRlYWRsaW5l ID0gUFFnZXRDdXJyZW50VGltZVVTZWMoKSArIHRpbWVvdXRfdXM7CisJCXNpemVfdAkJYmlkaV9w aXBlX3NpemUgPSAwOyAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCisKKwkJcHJpbnRm KCIjIHRlc3RfcmVnaXN0ZXJfc29ja2V0ICVzXG4iLCBpbm91dCA/ICIoSU5PVVQpIiA6ICIiKTsK KworCQkvKgorCQkgKiBBdCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QsIHRoZSByZWFkIHNpZGUgc2hv dWxkIGJlIGJsb2NrZWQgYW5kIHRoZQorCQkgKiB3cml0ZSBzaWRlIHNob3VsZCBiZSBvcGVuLiAo VGhlcmUncyBhIG1pc3Rha2UgYXQgdGhlIGVuZCBvZiB0aGlzCisJCSAqIGxvb3Agb3RoZXJ3aXNl LikKKwkJICovCisJCUFzc2VydChQUXNvY2tldFBvbGwocmZkLCAxLCAwLCAwKSA9PSAwKTsKKwkJ QXNzZXJ0KFBRc29ja2V0UG9sbCh3ZmQsIDAsIDEsIDApID4gMCk7CisKKwkJLyoKKwkJICogRm9y IGJpZGlyZWN0aW9uYWwgc3lzdGVtcywgZW11bGF0ZSB1bmlkaXJlY3Rpb25hbCBiZWhhdmlvciBo ZXJlIGJ5CisJCSAqIGZpbGxpbmcgdXAgdGhlICJyZWFkIHNpZGUiIG9mIHRoZSBwaXBlLgorCQkg Ki8KKwkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmls bF9waXBlKHJmZCkpID4gMCk7CisKKwkJLyogTGlzdGVuIG9uIHRoZSByZWFkIHNpZGUuIFRoZSBt dWx0aXBsZXhlciBzaG91bGRuJ3QgYmUgcmVhZHkgeWV0LiAqLworCQlBc3NlcnQocmVnaXN0ZXJf c29ja2V0KE5VTEwsIHJmZCwgaW5fZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNf bm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gZmQgaXMgbm90IHJlYWRhYmxlIik7CisKKwkJLyog V3JpdGluZyB0byB0aGUgcGlwZSBzaG91bGQgcmVzdWx0IGluIGEgcmVhZC1yZWFkeSBtdWx0aXBs ZXhlci4gKi8KKwkJQXNzZXJ0KHdyaXRlKHdmZCwgIngiLCAxKSA9PSAxKTsKKwkJbXV4X2lzX3Jl YWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIGZkIGlzIHJlYWRhYmxlIik7CisKKwkJLyoK KwkJICogVXBkYXRlIHRoZSByZWdpc3RyYXRpb24gdG8gd2FpdCBvbiB3cml0ZSBldmVudHMgaW5z dGVhZC4gVGhlCisJCSAqIG11bHRpcGxleGVyIHNob3VsZCBiZSB1bnNldC4KKwkJICovCisJCUFz c2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BPTExfT1VULCBhY3R4LCBOVUxM KSA9PSAwKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIHdhaXRpbmcgZm9y IHdyaXRlcyBvbiByZWFkYWJsZSBmZCIpOworCisJCS8qIFJlLXJlZ2lzdGVyIGZvciByZWFkIGV2 ZW50cy4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGluX2V2ZW50LCBh Y3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3 aGVuIHdhaXRpbmcgZm9yIHJlYWRzIGFnYWluIik7CisKKwkJLyogU3RvcCBsaXN0ZW5pbmcuIFRo ZSBtdWx0aXBsZXhlciBzaG91bGQgYmUgdW5zZXQuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2Nr ZXQoTlVMTCwgcmZkLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4 X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIHJlYWRhYmxlIGZkIGlzIHJlbW92ZWQiKTsK KworCQkvKiBMaXN0ZW4gYWdhaW4uICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwg cmZkLCBpbl9ldmVudCwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19yZWFkeShhY3R4LT5t dXgsIGRlYWRsaW5lLCAid2hlbiByZWFkYWJsZSBmZCBpcyByZS1hZGRlZCIpOworCisJCS8qCisJ CSAqIERyYWluaW5nIHRoZSBwaXBlIHNob3VsZCB1bnNldCB0aGUgbXVsdGlwbGV4ZXIgYWdhaW4s IG9uY2UgdGhlIG9sZAorCQkgKiBldmVudCBpcyBjbGVhcmVkLgorCQkgKi8KKwkJQXNzZXJ0KGRy YWluX3BpcGUocmZkLCAxKSk7CisJCUFzc2VydChjb21iX211bHRpcGxleGVyKGFjdHgpKTsKKwkJ bXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIGZkIGlzIGRyYWluZWQiKTsKKworCQkv KiBVbmRvIGFueSB1bmlkaXJlY3Rpb25hbCBlbXVsYXRpb24uICovCisJCWlmIChiaWRpcmVjdGlv bmFsKQorCQkJQXNzZXJ0KGRyYWluX3BpcGUod2ZkLCBiaWRpX3BpcGVfc2l6ZSkpOworCisJCS8q IExpc3RlbiBvbiB0aGUgd3JpdGUgc2lkZS4gQW4gZW1wdHkgYnVmZmVyIHNob3VsZCBiZSB3cml0 YWJsZS4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIENVUkxfUE9MTF9S RU1PVkUsIGFjdHgsIE5VTEwpID09IDApOworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEws IHdmZCwgb3V0X2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgt Pm11eCwgZGVhZGxpbmUsICJ3aGVuIGZkIGlzIHdyaXRhYmxlIik7CisKKwkJLyogQXMgYWJvdmUs IHdhaXQgb24gcmVhZCBldmVudHMgaW5zdGVhZC4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tl dChOVUxMLCB3ZmQsIENVUkxfUE9MTF9JTiwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19u b3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB3YWl0aW5nIGZvciByZWFkcyBvbiB3cml0YWJsZSBm ZCIpOworCisJCS8qIFJlLXJlZ2lzdGVyIGZvciB3cml0ZSBldmVudHMuICovCisJCUFzc2VydChy ZWdpc3Rlcl9zb2NrZXQoTlVMTCwgd2ZkLCBvdXRfZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOwor CQltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gd2FpdGluZyBmb3Igd3Jp dGVzIGFnYWluIik7CisKKwkJeworCQkJc3NpemVfdAkJd3JpdHRlbjsKKworCQkJLyoKKwkJCSAq IEZpbGwgdGhlIHBpcGUuIE9uY2UgdGhlIG9sZCB3cml0YWJsZSBldmVudCBpcyBjbGVhcmVkLCB0 aGUgbXV4CisJCQkgKiBzaG91bGQgbm90IGJlIHJlYWR5LgorCQkJICovCisJCQlBc3NlcnQoKHdy aXR0ZW4gPSBmaWxsX3BpcGUod2ZkKSkgPiAwKTsKKwkJCXByaW50ZigiIyBwaXBlIGJ1ZmZlciBp cyBmdWxsIGF0ICV6ZCBieXRlc1xuIiwgd3JpdHRlbik7CisKKwkJCUFzc2VydChjb21iX211bHRp cGxleGVyKGFjdHgpKTsKKwkJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiBmZCBi dWZmZXIgaXMgZnVsbCIpOworCisJCQkvKiBEcmFpbiB0aGUgcGlwZSBhZ2Fpbi4gKi8KKwkJCUFz c2VydChkcmFpbl9waXBlKHJmZCwgd3JpdHRlbikpOworCQkJbXV4X2lzX3JlYWR5KGFjdHgtPm11 eCwgZGVhZGxpbmUsICJ3aGVuIGZkIGJ1ZmZlciBpcyBkcmFpbmVkIik7CisJCX0KKworCQkvKiBT dG9wIGxpc3RlbmluZy4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIENV UkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFj dHgtPm11eCwgIndoZW4gZmQgaXMgcmVtb3ZlZCIpOworCisJCS8qIE1ha2Ugc3VyZSBhbiBleHBp cmVkIHRpbWVyIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggZXZlbnQgZHJhaW5pbmcuICovCisJCXsK KwkJCWJvb2wJCWV4cGlyZWQ7CisKKwkJCS8qIE1ha2UgdGhlIHJmZCBhcHBlYXIgdW5pZGlyZWN0 aW9uYWwgaWYgbmVjZXNzYXJ5LiAqLworCQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQkJQXNzZXJ0 KChiaWRpX3BpcGVfc2l6ZSA9IGZpbGxfcGlwZShyZmQpKSA+IDApOworCisJCQkvKiBTZXQgdGhl IHRpbWVyIGFuZCB3YWl0IGZvciBpdCB0byBleHBpcmUuICovCisJCQlBc3NlcnQoc2V0X3RpbWVy KGFjdHgsIDApKTsKKwkJCUFzc2VydChQUXNvY2tldFBvbGwoYWN0eC0+dGltZXJmZCwgMSwgMCwg ZGVhZGxpbmUpID4gMCk7CisJCQlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAxLCAidGltZXIgaXMg ZXhwaXJlZCIpOworCisJCQkvKiBSZWdpc3RlciBmb3IgcmVhZCBldmVudHMgYW5kIG1ha2UgdGhl IGZkIHJlYWRhYmxlLiAqLworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGlu X2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJCUFzc2VydCh3cml0ZSh3ZmQsICJ4IiwgMSkg PT0gMSk7CisJCQltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gZmQgaXMg cmVhZGFibGUgYW5kIHRpbWVyIGV4cGlyZWQiKTsKKworCQkJLyoKKwkJCSAqIERyYWluaW5nIHRo ZSBwaXBlIHNob3VsZCB1bnNldCB0aGUgbXVsdGlwbGV4ZXIgYWdhaW4sIG9uY2UgdGhlCisJCQkg KiBvbGQgZXZlbnQgaXMgZHJhaW5lZCBhbmQgdGhlIHRpbWVyIGlzIHJlc2V0LgorCQkJICoKKwkJ CSAqIE9yZGVyIG1hdHRlcnMsIHNpbmNlIGNvbWJfbXVsdGlwbGV4ZXIoKSBkb2Vzbid0IGhhdmUg dG8gcmVtb3ZlCisJCQkgKiBzdGFsZSBldmVudHMgd2hlbiBhY3RpdmUgZXZlbnRzIGV4aXN0LiBG b2xsb3cgdGhlIGNhbGwgc2VxdWVuY2UKKwkJCSAqIHVzZWQgaW4gdGhlIGNvZGU6IGRyYWluIHRo ZSB0aW1lciBleHBpcmF0aW9uLCBkcmFpbiB0aGUgcGlwZSwKKwkJCSAqIHRoZW4gY2xlYXIgdGhl IHN0YWxlIGV2ZW50cy4KKwkJCSAqLworCQkJQXNzZXJ0KGRyYWluX3RpbWVyX2V2ZW50cyhhY3R4 LCAmZXhwaXJlZCkpOworCQkJQXNzZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CisJCQlBc3NlcnQo Y29tYl9tdWx0aXBsZXhlcihhY3R4KSk7CisKKwkJCWlzKGV4cGlyZWQsIDEsICJkcmFpbl90aW1l cl9ldmVudHMoKSByZXBvcnRzIGV4cGlyYXRpb24iKTsKKwkJCWlzKHRpbWVyX2V4cGlyZWQoYWN0 eCksIDAsICJ0aW1lciBpcyBubyBsb25nZXIgZXhwaXJlZCIpOworCQkJbXV4X2lzX25vdF9yZWFk eShhY3R4LT5tdXgsICJ3aGVuIGZkIGlzIGRyYWluZWQgYW5kIHRpbWVyIHJlc2V0Iik7CisKKwkJ CS8qIFN0b3AgbGlzdGVuaW5nLiAqLworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCBy ZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5VTEwpID09IDApOworCisJCQkvKiBVbmRvIGFu eSB1bmlkaXJlY3Rpb25hbCBlbXVsYXRpb24uICovCisJCQlpZiAoYmlkaXJlY3Rpb25hbCkKKwkJ CQlBc3NlcnQoZHJhaW5fcGlwZSh3ZmQsIGJpZGlfcGlwZV9zaXplKSk7CisJCX0KKworCQkvKiBF bnN1cmUgY29tYl9tdWx0aXBsZXhlcigpIGNhbiBoYW5kbGUgbXVsdGlwbGUgc3RhbGUgZXZlbnRz LiAqLworCQl7CisJCQlpbnQJCQlyZmQyLAorCQkJCQkJd2ZkMjsKKworCQkJLyogQ3JlYXRlIGEg c2Vjb25kIGxvY2FsIHBpcGUuICovCisJCQlBc3NlcnQocGlwZShwaXBlZmQpID09IDApOworCQkJ cmZkMiA9IHBpcGVmZFswXTsKKwkJCXdmZDIgPSBwaXBlZmRbMV07CisKKwkJCS8qIE1ha2UgYm90 aCByZmRzIGFwcGVhciB1bmlkaXJlY3Rpb25hbCBpZiBuZWNlc3NhcnkuICovCisJCQlpZiAoYmlk aXJlY3Rpb25hbCkKKwkJCXsKKwkJCQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBl KHJmZCkpID4gMCk7CisJCQkJQXNzZXJ0KGZpbGxfcGlwZShyZmQyKSA9PSBiaWRpX3BpcGVfc2l6 ZSk7CisJCQl9CisKKwkJCS8qIFJlZ2lzdGVyIGZvciByZWFkIGV2ZW50cyBvbiBib3RoIGZkcywg YW5kIG1ha2UgdGhlbSByZWFkYWJsZS4gKi8KKwkJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVM TCwgcmZkLCBpbl9ldmVudCwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCQlBc3NlcnQocmVnaXN0ZXJf c29ja2V0KE5VTEwsIHJmZDIsIGluX2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKworCQkJQXNz ZXJ0KHdyaXRlKHdmZCwgIngiLCAxKSA9PSAxKTsKKwkJCUFzc2VydCh3cml0ZSh3ZmQyLCAieCIs IDEpID09IDEpOworCisJCQltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4g dHdvIGZkcyBhcmUgcmVhZGFibGUiKTsKKworCQkJLyoKKwkJCSAqIERyYWluIGJvdGggZmRzLiBj b21iX211bHRpcGxleGVyKCkgc2hvdWxkIHRoZW4gZW5zdXJlIHRoYXQgdGhlCisJCQkgKiBtdXgg aXMgbm8gbG9uZ2VyIHJlYWRhYmxlLgorCQkJICovCisJCQlBc3NlcnQoZHJhaW5fcGlwZShyZmQs IDEpKTsKKwkJCUFzc2VydChkcmFpbl9waXBlKHJmZDIsIDEpKTsKKwkJCUFzc2VydChjb21iX211 bHRpcGxleGVyKGFjdHgpKTsKKwkJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0 d28gZmRzIGFyZSBkcmFpbmVkIik7CisKKwkJCS8qIFN0b3AgbGlzdGVuaW5nLiAqLworCQkJQXNz ZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5V TEwpID09IDApOworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQyLCBDVVJMX1BP TExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKKworCQkJLyogVW5kbyBhbnkgdW5pZGlyZWN0 aW9uYWwgZW11bGF0aW9uLiAqLworCQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQl7CisJCQkJQXNz ZXJ0KGRyYWluX3BpcGUod2ZkLCBiaWRpX3BpcGVfc2l6ZSkpOworCQkJCUFzc2VydChkcmFpbl9w aXBlKHdmZDIsIGJpZGlfcGlwZV9zaXplKSk7CisJCQl9CisKKwkJCWNsb3NlKHJmZDIpOworCQkJ Y2xvc2Uod2ZkMik7CisJCX0KKwl9CisKKwljbG9zZShyZmQpOworCWNsb3NlKHdmZCk7CisJZnJl ZV90ZXN0X2FjdHgoYWN0eCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQoreworCWNvbnN0IGNoYXIgKnRpbWVvdXQ7CisKKwkvKiBHcmFiIHRoZSBkZWZhdWx0IHRpbWVv dXQuICovCisJdGltZW91dCA9IGdldGVudigiUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQiKTsKKwlp ZiAodGltZW91dCkKKwl7CisJCWludAkJCXRpbWVvdXRfcyA9IGF0b2kodGltZW91dCk7CisKKwkJ aWYgKHRpbWVvdXRfcyA+IDApCisJCQl0aW1lb3V0X3VzID0gdGltZW91dF9zICogMTAwMCAqIDEw MDA7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgbGluZSBidWZmZXJpbmcgZm9yIG91ciBvdXRwdXQs IHRvIGxldCBzdGRlcnIgaW50ZXJsZWF2ZSBpbiB0aGUKKwkgKiBsb2cgZmlsZXMuCisJICovCisJ c2V0dmJ1ZihzdGRvdXQsIE5VTEwsIFBHX0lPTEJGLCAwKTsKKworCXRlc3Rfc2V0X3RpbWVyKCk7 CisJdGVzdF9yZWdpc3Rlcl9zb2NrZXQoKTsKKworCXByaW50ZigiMS4uJWRcbiIsIG51bV90ZXN0 cyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCQkJCQkJCS8qICFVU0VfQVNTRVJUX0NIRUNLSU5H ICovCisKKy8qCisgKiBTa2lwIHRoZSB0ZXN0IHN1aXRlIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhc3Nl cnRpb25zLgorICovCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmlu dGYoIjEuLjAgIyBza2lwOiBjYXNzZXJ0IGlzIG5vdCBlbmFibGVkXG4iKTsKKworCXJldHVybiAw OworfQorCisjZW5kaWYJCQkJCQkJLyogVVNFX0FTU0VSVF9DSEVDS0lORyAqLwotLSAKMi4zNC4x Cgo= --00000000000001fde1063bcbf7a2--