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 1ulxDu-007mEZ-OK for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Aug 2025 22:12:03 +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 1ulxDt-00A7AX-7L for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Aug 2025 22:12:01 +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 1ulxDs-00A7AJ-Ko for pgsql-hackers@lists.postgresql.org; Tue, 12 Aug 2025 22:12:01 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ulxDp-000Fuz-0q for pgsql-hackers@lists.postgresql.org; Tue, 12 Aug 2025 22:11:59 +0000 Received: by mail-qv1-xf34.google.com with SMTP id 6a1803df08f44-7075ccb168bso48980636d6.0 for ; Tue, 12 Aug 2025 15:11:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1755036716; x=1755641516; 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=T8OE4DCnRwpYcFUP5bSs1WB7DrC9U1KJOw/R2vlPOfg=; b=KzMIJLL/gWiQkzsFN8avye/6LQQTZ3ixk3QgAuDoRPGccJNB6186FFyrt+XA6EsSKE e6LsqAzvnSPbBBCnYOcHXoe1d9SdO3/n0tazFchsjO5eTP5q11HngFhdQW8P7591kk4w La1Yts8Y7zYEK7DTxpjRiuDituh6y/ZnqL5dMhhhiqr0HU5q8bHDNqF/cWeAf7A6CmOc WWiKEgsGL738bSxL6VYBfbjC+mfN3wncX4EKUQFN0xCz5d3H2tzRF5pkU5Ra1KyO9JWW IYGxi5fnbY1sOBdRKl0spBBvA2u6F6SPIEaKZrm7LfO9pZHNxUihaCr1vSYEkb8HYjrE bRGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755036716; x=1755641516; 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=T8OE4DCnRwpYcFUP5bSs1WB7DrC9U1KJOw/R2vlPOfg=; b=HXcxJKh+C7rsl/WccfIWhZbcTK729dt2NLNxs8Qsnc43U1l2DIuo9YEXASyykgUfAr 5DLTd6enkTpfmTp0pFofDybikK1RORpVRxPg85hHL/yh9Z6apFcAZvotL+XSSUitI2cJ Nd9BrkR+Vc2c3jS8Y+l8RT8YX2ZW5/8UJdonU7Eod8iLBRBAqauMWEzxpTPStw2CFcK1 cxcT11DL6RRulsNUEScwr51zo562bf2sCG1C2np3xXR8YWZTctNL686yeM3MeY2frdbP /mKJg8nVtH8aPRnSVYDjlbbjv0G1eXCpgVlN8HL1pGuBrXWTe2resgRQm+lBlx9JXrXo 1HDw== X-Forwarded-Encrypted: i=1; AJvYcCWsjjnPf7OFq/1Ak7sjDlpVk9oLiViymWEyEGJNF9ji3ULQTEKf1fvYs71mExeF5QnDwC7inovZweiMUBNh@lists.postgresql.org X-Gm-Message-State: AOJu0Yy/Gq+hmiOMsadXMJkoomXZHxUSSldwXARxJdOpvRFFD4BWaSbG hETwqOjB1XvCgduiMTCM/ngNpVYEAzirdJSd1ceOp63J53mbyJCwthH51Roim6FD+dy+5ViprNY xCJrzior6RXCs31PX0LNOE2UWOe6vfj8dvngmHIsN X-Gm-Gg: ASbGncs5iro4HIobBfZeImRHu43abLSf2hrN4Ov8pb1zmoJST1VcSVyAUIsOjSV/z0S T5qAWF5/dEBwBHtqUowPwTnJ5gqTchpIHVsCPgrjVIgWhAO0llGiHWBJCZOH7Ny+U0Y4EomwqOa aaM74O96sqYJ60Z0FL5PuH8Y+DraN1rsHX2qeJlSP26h5JyJbFBu++izn3iTVXpNqKUJPspSK/C dieEvsPWacUQ1h3yA== X-Google-Smtp-Source: AGHT+IFxWCyPsODlk4JgaBeY28L94MT1JOzd/9V0wAr+lPOZonlU/dhDlxHlJyAxzCc2wEt9QV6e0p6jilaIoM8X9Xk= X-Received: by 2002:ad4:4ee4:0:b0:709:995d:d4a8 with SMTP id 6a1803df08f44-709e89fbe74mr11547686d6.45.1755036716130; Tue, 12 Aug 2025 15:11:56 -0700 (PDT) MIME-Version: 1.0 References: <87ldnvgkdq.fsf@wibble.ilmari.org> <87fre1h90x.fsf@wibble.ilmari.org> <87cy95h5uh.fsf@wibble.ilmari.org> In-Reply-To: From: Jacob Champion Date: Tue, 12 Aug 2025 15:11:44 -0700 X-Gm-Features: Ac12FXzSQlacZfcFyf7flF1uhxlhsMURE-B8wcY628uMOWI7ZokuUVTVN0mWldk Message-ID: Subject: Re: [PATCH] OAuth: fix performance bug with stuck multiplexer events To: =?UTF-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= Cc: Thomas Munro , PostgreSQL Hackers , Daniel Gustafsson , Peter Eisentraut , Tom Lane Content-Type: multipart/mixed; boundary="0000000000000918fb063c325407" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000918fb063c325407 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Aug 8, 2025 at 2:31=E2=80=AFPM Jacob Champion wrote: > Well, thank you for the explanation. I'll make that change. Done in v5. v5-0001 is planned for backport to 18 once the freeze lifts. It ensures that -lm is part of the link line for libpq-oauth, since the module uses floor(). I probably wouldn't have ever noticed, except that the new test executable, which uses the same link flags, complained on Clang [1]. (In that thread, I incorrectly said the problem was with "Meson animals". The Meson side is fine, and both alligator and bushmaster use Autoconf, so I'm not sure how I ended up with that idea.) v5-0002 should fix the more general buildfarm failure that caused the revert. The farm finds the new t/ subdirectory and starts running Make on src/interfaces/libpq-oauth directly, bypassing the skip logic in src/interfaces/Makefile. So I've wrapped the "standard" top-level targets that build and install things in a conditional. The targets that clean things up have been left alone, at Tom's suggestion in [1]. Thanks, --Jacob [1] https://postgr.es/m/CAOYmi%2Bm%3DxY0P_uAzAP_884uF-GhQ3wrineGwc9AEnb6fYx= VqVQ%40mail.gmail.com --0000000000000918fb063c325407 Content-Type: text/plain; charset="UTF-8"; name="since-v4.diff.txt" Content-Disposition: attachment; filename="since-v4.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me93j3md0 MTogIGE1MTU0MzVkM2I0IDwgLTogIC0tLS0tLS0tLS0tIG9hdXRoOiBSZW1vdmUgc3RhbGUgZXZl bnRzIGZyb20gdGhlIGtxdWV1ZSBtdWx0aXBsZXhlcgoyOiAgYTM0YmUxOWYxN2YgPCAtOiAgLS0t LS0tLS0tLS0gb2F1dGg6IEVuc3VyZSB1bnVzZWQgc29ja2V0IHJlZ2lzdHJhdGlvbnMgYXJlIHJl bW92ZWQKMzogIDc0MDg3NzhkNTc5IDwgLTogIC0tLS0tLS0tLS0tIG9hdXRoOiBSZW1vdmUgZXhw aXJlZCB0aW1lcnMgZnJvbSB0aGUgbXVsdGlwbGV4ZXIKNDogIDgyNDEyNTVlODRjIDwgLTogIC0t LS0tLS0tLS0tIG9hdXRoOiBUcmFjayB0b3RhbCBjYWxsIGNvdW50IGR1cmluZyBhIGNsaWVudCBm bG93Ci06ICAtLS0tLS0tLS0tLSA+IDE6ICBjOTk2MjI2OGVmMCBvYXV0aDogQWx3YXlzIGxpbmsg d2l0aCAtbG0gZm9yIGZsb29yKCkKNTogIDMzNzEyNDA2NGYzICEgMjogIDJlMzZiMzI5Yzc2IG9h dXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFuZGxpbmcKICAgIEBAIENvbW1p dCBtZXNzYWdlCiAgICAgICAgIHN1aXRlIGZvciB0aGUgc29ja2V0IGFuZCB0aW1lciBoYW5kbGlu ZyBjb2RlLiBUaGlzIGlzIGFsbCBiYXNlZCBvbiBUQVAKICAgICAgICAgYW5kIGRyaXZlbiBieSBv dXIgZXhpc3RpbmcgVGVzdDo6TW9yZSBpbmZyYXN0cnVjdHVyZS4KICAgICAKICAgICsgICAgVGhp cyBjb21taXQgaXMgYSByZXBsYXkgb2YgMTQ0M2I2YzBlLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgZHVl IHRvCiAgICArICAgIGJ1aWxkZmFybSBmYWlsdXJlcy4gQ29tcGFyZWQgd2l0aCB0aGF0LCB0aGlz IHZlcnNpb24gcHJvdGVjdHMgdGhlIGJ1aWxkCiAgICArICAgIHRhcmdldHMgaW4gdGhlIE1ha2Vm aWxlIHdpdGggYSB3aXRoX2xpYmN1cmwgY29uZGl0aW9uYWwsIGFuZCBpdCB0d2Vha3MKICAgICsg ICAgdGhlIGNvZGUgc3R5bGUgaW4gMDAxX29hdXRoLnBsLgogICAgKwogICAgICAgICBSZXZpZXdl ZC1ieTogRGFnZmlubiBJbG1hcmkgTWFubnPDpWtlciA8aWxtYXJpQGlsbWFyaS5vcmc+CiAgICAg ICAgIERpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FPWW1pK25EWnhKSGFXajlfalJT eWY4dU1Ub0NBREFtT2ZKRWdnc0tXLWtZN2FVd0hBQG1haWwuZ21haWwuY29tCiAgICAgCiAgICAg ICMjIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlICMjCiAgICAtQEAgc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGU6IHVuaW5zdGFsbDoKICAgIC0gCXJtIC1mICck KERFU1RESVIpJChsaWJkaXIpLyQoc3RsaWIpJwogICAgLSAJcm0gLWYgJyQoREVTVERJUikkKGxp YmRpcikvJChzaGxpYiknCiAgICArQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZp bGU6IFNITElCX0VYUE9SVFMgPSBleHBvcnRzLnR4dAogICAgKyAjIERpc2FibGUgLWJ1bmRsZV9s b2FkZXIgb24gbWFjT1MuCiAgICArIEJFX0RMTExJQlMgPQogICAgKyAKICAgICstIyBCeSBkZWZh dWx0LCBhIGxpYnJhcnkgd2l0aG91dCBhbiBTT05BTUUgZG9lc24ndCBnZXQgYSBzdGF0aWMgbGli cmFyeSwgc28gd2UKICAgICstIyBhZGQgaXQgdG8gdGhlIGJ1aWxkIGV4cGxpY2l0bHkuCiAgICAr LWFsbDogYWxsLWxpYiBhbGwtc3RhdGljLWxpYgogICAgKy0KICAgICsgIyBTaGFyZWQgbGlicmFy eSBzdHVmZgogICAgKyBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL01ha2VmaWxlLnNobGliCiAg ICArIAogICAgK0BAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlOiBpbmNsdWRl ICQodG9wX3NyY2Rpcikvc3JjL01ha2VmaWxlLnNobGliCiAgICArICVfc2hsaWIubzogJS5jICUu bwogICAgKyAJJChDQykgJChDRkxBR1MpICQoQ0ZMQUdTX1NMKSAkKENQUEZMQUdTKSAkKENQUEZM QUdTX1NITElCKSAtYyAkPCAtbyAkQAogICAgICAKICAgICArLlBIT05ZOiBhbGwtdGVzdHMKICAg ICArYWxsLXRlc3RzOiBvYXV0aF90ZXN0cyQoWCkKICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL01ha2VmaWxlOiB1bmluc3RhbGw6CiAgICAgK29hdXRoX3Rlc3RzJChYKTogdGVzdC1v YXV0aC1jdXJsLm8gb2F1dGgtdXRpbHMubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicGdwb3J0 IHN1Ym1ha2UtbGlicHEKICAgICArCSQoQ0MpICQoQ0ZMQUdTKSAkXiAkKExERkxBR1MpICQoTERG TEFHU19FWCkgJChTSExJQl9MSU5LKSAtbyAkQAogICAgICsKICAgICsrIwogICAgKysjIFRvcC1M ZXZlbCBUYXJnZXRzCiAgICArKyMKICAgICsrIyBUaGUgZXhpc3RlbmNlIG9mIGEgdC8gZm9sZGVy IGluZHVjZXMgdGhlIGJ1aWxkZmFybSB0byBydW4gTWFrZSBkaXJlY3RseSBvbgogICAgKysjIHRo aXMgc3ViZGlyZWN0b3J5LCBieXBhc3NpbmcgdGhlIHJlY3Vyc2lvbiBza2lwIGluIHNyYy9pbnRl cmZhY2VzL01ha2VmaWxlLgogICAgKysjIFdyYXAgdGhlIHN0YW5kYXJkIGJ1aWxkIHRhcmdldHMg aW4gYSB3aXRoX2xpYmN1cmwgY29uZGl0aW9uYWwgdG8gYXZvaWQKICAgICsrIyBidWlsZGluZyBP QXV0aCBjb2RlIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmVuJ3QgcmVxdWVzdGVkIGl0LiAoVGhlICJj bGVhbiItc3R5bGUKICAgICsrIyB0YXJnZXRzIHJlbWFpbiBhdmFpbGFibGUuKQogICAgKysjCiAg ICArKwogICAgKytpZmVxICgkKHdpdGhfbGliY3VybCksIHllcykKICAgICsrCiAgICArKyMgQnkg ZGVmYXVsdCwgYSBsaWJyYXJ5IHdpdGhvdXQgYW4gU09OQU1FIGRvZXNuJ3QgZ2V0IGEgc3RhdGlj IGxpYnJhcnksIHNvIHdlCiAgICArKyMgYWRkIGl0IHRvIHRoZSBidWlsZCBleHBsaWNpdGx5Lgog ICAgKythbGw6IGFsbC1saWIgYWxsLXN0YXRpYy1saWIKICAgICsrCiAgICArICMgSWdub3JlIHRo ZSBzdGFuZGFyZCBydWxlcyBmb3IgU09OQU1FLWxlc3MgaW5zdGFsbGF0aW9uOyB3ZSB3YW50IGJv dGggdGhlCiAgICArICMgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIHRvIGdvIGludG8gbGli ZGlyLgogICAgKyBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMgJChzdGxpYikgJChzaGxpYikKICAg ICtAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZTogaW5zdGFsbDogYWxsIGlu c3RhbGxkaXJzICQoc3RsaWIpICQoc2hsaWIpCiAgICArIGluc3RhbGxkaXJzOgogICAgKyAJJChN S0RJUl9QKSAnJChERVNURElSKSQobGliZGlyKScKICAgICsgCiAgICAgK2NoZWNrOiBhbGwtdGVz dHMKICAgICArCSQocHJvdmVfY2hlY2spCiAgICAgKwogICAgICtpbnN0YWxsY2hlY2s6IGFsbC10 ZXN0cwogICAgICsJJChwcm92ZV9pbnN0YWxsY2hlY2spCiAgICAgKwogICAgKytlbmRpZiAjIHdp dGhfbGliY3VybAogICAgKysKICAgICsgdW5pbnN0YWxsOgogICAgKyAJcm0gLWYgJyQoREVTVERJ UikkKGxpYmRpcikvJChzdGxpYiknCiAgICArIAlybSAtZiAnJChERVNURElSKSQobGliZGlyKS8k KHNobGliKScKICAgICsgCiAgICAgIGNsZWFuIGRpc3RjbGVhbjogY2xlYW4tbGliCiAgICAgIAly bSAtZiAkKE9CSlMpICQoT0JKU19TVEFUSUMpICQoT0JKU19TSExJQikKICAgICArCXJtIC1mIHRl c3Qtb2F1dGgtY3VybC5vIG9hdXRoX3Rlc3RzJChYKQogICAgQEAgc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvdC8wMDFfb2F1dGgucGwgKG5ldykKICAgICArbXkgJGVyciA9ICRidWlsZGVyLT5m YWlsdXJlX291dHB1dDsKICAgICArCiAgICAgK0lQQzo6UnVuOjpydW4gWydvYXV0aF90ZXN0cydd LAogICAgLSsgICc+JywgSVBDOjpSdW46Om5ld19jaHVua2VyLCBzdWIgeyAkb3V0LT5wcmludCgk X1swXSkgfSwKICAgIC0rICAnMj4nLCBJUEM6OlJ1bjo6bmV3X2NodW5rZXIsIHN1YiB7ICRlcnIt PnByaW50KCRfWzBdKSB9CiAgICArKyAgJz4nID0+IChJUEM6OlJ1bjo6bmV3X2NodW5rZXIsIHN1 YiB7ICRvdXQtPnByaW50KCRfWzBdKSB9KSwKICAgICsrICAnMj4nID0+IChJUEM6OlJ1bjo6bmV3 X2NodW5rZXIsIHN1YiB7ICRlcnItPnByaW50KCRfWzBdKSB9KQogICAgICsgIG9yIGRpZSAib2F1 dGhfdGVzdHMgcmV0dXJuZWQgJD8iOwogICAgIAogICAgICAjIyBzcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYyAobmV3KSAjIwo= --0000000000000918fb063c325407 Content-Type: application/octet-stream; name="v5-0001-oauth-Always-link-with-lm-for-floor.patch" Content-Disposition: attachment; filename="v5-0001-oauth-Always-link-with-lm-for-floor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me93j7711 RnJvbSBjOTk2MjI2OGVmMDQ0OGJmYzExNzM5OTBhMjY1MTM4YWY3ODZiZWJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxMSBBdWcgMjAyNSAxMzo1Njo1MSAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjUgMS8yXSBvYXV0aDogQWx3YXlzIGxpbmsgd2l0aCAtbG0gZm9yIGZsb29yKCkK CmxpYnBxLW9hdXRoIHVzZXMgZmxvb3IoKSBidXQgZGlkIG5vdCBsaW5rIGFnYWluc3QgbGlibS4g U2luY2UgbGlicHEKaXRzZWxmIHVzZXMgLWxtLCBub3RoaW5nIGluIHRoZSBidWlsZGZhcm0gaGFz IGhhZCBwcm9ibGVtcyB3aXRoCmxpYnBxLW9hdXRoIHlldCwgYW5kIGl0IHNlZW1zIGRpZmZpY3Vs dCB0byBoaXQgYSBmYWlsdXJlIGluIHByYWN0aWNlLgoKQnV0IGNvbW1pdCAxNDQzYjZjMGUgYXR0 ZW1wdGVkIHRvIGFkZCBhbiBleGVjdXRhYmxlIGJhc2VkIG9uCmxpYnBxLW9hdXRoLCB3aGljaCBy YW4gaW50byBsaW5rLXRpbWUgZmFpbHVyZXMgd2l0aCBDbGFuZyBkdWUgdG8gdGhpcwpvbWlzc2lv bi4gSXQgc2VlbXMgcHJ1ZGVudCB0byBmaXggdGhpcyBmb3IgYm90aCB0aGUgbW9kdWxlIGFuZCB0 aGUKZXhlY3V0YWJsZSBzaW11bHRhbmVvdXNseSBzbyB0aGF0IG5vIG9uZSB0cmlwcyBvdmVyIGl0 IGluIHRoZSBmdXR1cmUuCgpUaGlzIGlzIGEgTWFrZWZpbGUtb25seSBjaGFuZ2UuIFRoZSBNZXNv biBzaWRlIGFscmVhZHkgcHVsbHMgaW4gbGlibSwKdGhyb3VnaCB0aGUgb3NfZGVwcyBkZXBlbmRl bmN5LgoKQmFja3BhdGNoLXRocm91Z2g6IDE4Ci0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1 dGgvTWFrZWZpbGUgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmls ZSBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmluZGV4IDY4MmYxNzQxM2Iz Li44ODE5ZmE4NjUwZSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFr ZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKQEAgLTQ3LDcg KzQ3LDcgQEAgJChzdGxpYik6IG92ZXJyaWRlIE9CSlMgKz0gJChPQkpTX1NUQVRJQykKICQoc3Rs aWIpOiAkKE9CSlNfU1RBVElDKQogCiBTSExJQl9MSU5LX0lOVEVSTkFMID0gJChsaWJwcV9wZ3Bv cnRfc2hsaWIpCi1TSExJQl9MSU5LID0gJChMSUJDVVJMX0xERkxBR1MpICQoTElCQ1VSTF9MRExJ QlMpICQoZmlsdGVyIC1saW50bCwgJChMSUJTKSkKK1NITElCX0xJTksgPSAkKExJQkNVUkxfTERG TEFHUykgJChMSUJDVVJMX0xETElCUykgJChmaWx0ZXIgLWxpbnRsIC1sbSwgJChMSUJTKSkKIFNI TElCX1BSRVJFUVMgPSBzdWJtYWtlLWxpYnBxCiBTSExJQl9FWFBPUlRTID0gZXhwb3J0cy50eHQK IAotLSAKMi4zNC4xCgo= --0000000000000918fb063c325407 Content-Type: application/octet-stream; name="v5-0002-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Disposition: attachment; filename="v5-0002-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me93jaal2 RnJvbSAyZTM2YjMyOWM3NmRmOTZkNmYwMzg1YjI4NTllN2JjYTFiYjFhMzc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxMiBBdWcgMjAyNSAxNDo0NzozNCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjUgMi8yXSBvYXV0aDogQWRkIHVuaXQgdGVzdHMgZm9yIG11bHRpcGxleGVyIGhh bmRsaW5nCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNl dD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUbyBiZXR0ZXIgcmVjb3Jk IHRoZSBpbnRlcm5hbCBiZWhhdmlvcnMgb2Ygb2F1dGgtY3VybC5jLCBhZGQgYSB1bml0IHRlc3QK c3VpdGUgZm9yIHRoZSBzb2NrZXQgYW5kIHRpbWVyIGhhbmRsaW5nIGNvZGUuIFRoaXMgaXMgYWxs IGJhc2VkIG9uIFRBUAphbmQgZHJpdmVuIGJ5IG91ciBleGlzdGluZyBUZXN0OjpNb3JlIGluZnJh c3RydWN0dXJlLgoKVGhpcyBjb21taXQgaXMgYSByZXBsYXkgb2YgMTQ0M2I2YzBlLCB3aGljaCB3 YXMgcmV2ZXJ0ZWQgZHVlIHRvCmJ1aWxkZmFybSBmYWlsdXJlcy4gQ29tcGFyZWQgd2l0aCB0aGF0 LCB0aGlzIHZlcnNpb24gcHJvdGVjdHMgdGhlIGJ1aWxkCnRhcmdldHMgaW4gdGhlIE1ha2VmaWxl IHdpdGggYSB3aXRoX2xpYmN1cmwgY29uZGl0aW9uYWwsIGFuZCBpdCB0d2Vha3MKdGhlIGNvZGUg c3R5bGUgaW4gMDAxX29hdXRoLnBsLgoKUmV2aWV3ZWQtYnk6IERhZ2Zpbm4gSWxtYXJpIE1hbm5z w6VrZXIgPGlsbWFyaUBpbG1hcmkub3JnPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBT1ltaStuRFp4SkhhV2o5X2pSU3lmOHVNVG9DQURBbU9mSkVnZ3NLVy1rWTdhVXdIQUBtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlICAgICAg ICAgIHwgIDM2ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZCAgICAg ICB8ICAzNSArKwogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdC8wMDFfb2F1dGgucGwgICAg fCAgMjQgKwogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdGVzdC1vYXV0aC1jdXJsLmMgfCA1 MjcgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA2MTggaW5zZXJ0aW9ucygr KSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC90LzAwMV9vYXV0aC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2Vz L2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtl ZmlsZQppbmRleCA4ODE5ZmE4NjUwZS4uYzhjMzg5NDdhY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL01ha2VmaWxlCkBAIC01NCwxMCArNTQsNiBAQCBTSExJQl9FWFBPUlRTID0gZXhwb3J0cy50 eHQKICMgRGlzYWJsZSAtYnVuZGxlX2xvYWRlciBvbiBtYWNPUy4KIEJFX0RMTExJQlMgPQogCi0j IEJ5IGRlZmF1bHQsIGEgbGlicmFyeSB3aXRob3V0IGFuIFNPTkFNRSBkb2Vzbid0IGdldCBhIHN0 YXRpYyBsaWJyYXJ5LCBzbyB3ZQotIyBhZGQgaXQgdG8gdGhlIGJ1aWxkIGV4cGxpY2l0bHkuCi1h bGw6IGFsbC1saWIgYWxsLXN0YXRpYy1saWIKLQogIyBTaGFyZWQgbGlicmFyeSBzdHVmZgogaW5j bHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9NYWtlZmlsZS5zaGxpYgogCkBAIC02Niw2ICs2MiwyOCBA QCBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL01ha2VmaWxlLnNobGliCiAlX3NobGliLm86ICUu YyAlLm8KIAkkKENDKSAkKENGTEFHUykgJChDRkxBR1NfU0wpICQoQ1BQRkxBR1MpICQoQ1BQRkxB R1NfU0hMSUIpIC1jICQ8IC1vICRACiAKKy5QSE9OWTogYWxsLXRlc3RzCithbGwtdGVzdHM6IG9h dXRoX3Rlc3RzJChYKQorCitvYXV0aF90ZXN0cyQoWCk6IHRlc3Qtb2F1dGgtY3VybC5vIG9hdXRo LXV0aWxzLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBxCisJ JChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKFNITElCX0xJTksp IC1vICRACisKKyMKKyMgVG9wLUxldmVsIFRhcmdldHMKKyMKKyMgVGhlIGV4aXN0ZW5jZSBvZiBh IHQvIGZvbGRlciBpbmR1Y2VzIHRoZSBidWlsZGZhcm0gdG8gcnVuIE1ha2UgZGlyZWN0bHkgb24K KyMgdGhpcyBzdWJkaXJlY3RvcnksIGJ5cGFzc2luZyB0aGUgcmVjdXJzaW9uIHNraXAgaW4gc3Jj L2ludGVyZmFjZXMvTWFrZWZpbGUuCisjIFdyYXAgdGhlIHN0YW5kYXJkIGJ1aWxkIHRhcmdldHMg aW4gYSB3aXRoX2xpYmN1cmwgY29uZGl0aW9uYWwgdG8gYXZvaWQKKyMgYnVpbGRpbmcgT0F1dGgg Y29kZSBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlbid0IHJlcXVlc3RlZCBpdC4gKFRoZSAiY2xlYW4i LXN0eWxlCisjIHRhcmdldHMgcmVtYWluIGF2YWlsYWJsZS4pCisjCisKK2lmZXEgKCQod2l0aF9s aWJjdXJsKSwgeWVzKQorCisjIEJ5IGRlZmF1bHQsIGEgbGlicmFyeSB3aXRob3V0IGFuIFNPTkFN RSBkb2Vzbid0IGdldCBhIHN0YXRpYyBsaWJyYXJ5LCBzbyB3ZQorIyBhZGQgaXQgdG8gdGhlIGJ1 aWxkIGV4cGxpY2l0bHkuCithbGw6IGFsbC1saWIgYWxsLXN0YXRpYy1saWIKKwogIyBJZ25vcmUg dGhlIHN0YW5kYXJkIHJ1bGVzIGZvciBTT05BTUUtbGVzcyBpbnN0YWxsYXRpb247IHdlIHdhbnQg Ym90aCB0aGUKICMgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIHRvIGdvIGludG8gbGliZGly LgogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzICQoc3RsaWIpICQoc2hsaWIpCkBAIC03NSw5ICs5 MywxOSBAQCBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMgJChzdGxpYikgJChzaGxpYikKIGluc3Rh bGxkaXJzOgogCSQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknCiAKK2NoZWNrOiBhbGwt dGVzdHMKKwkkKHByb3ZlX2NoZWNrKQorCitpbnN0YWxsY2hlY2s6IGFsbC10ZXN0cworCSQocHJv dmVfaW5zdGFsbGNoZWNrKQorCitlbmRpZiAjIHdpdGhfbGliY3VybAorCiB1bmluc3RhbGw6CiAJ cm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJChzdGxpYiknCiAJcm0gLWYgJyQoREVTVERJUikk KGxpYmRpcikvJChzaGxpYiknCiAKIGNsZWFuIGRpc3RjbGVhbjogY2xlYW4tbGliCiAJcm0gLWYg JChPQkpTKSAkKE9CSlNfU1RBVElDKSAkKE9CSlNfU0hMSUIpCisJcm0gLWYgdGVzdC1vYXV0aC1j dXJsLm8gb2F1dGhfdGVzdHMkKFgpCisJcm0gLXJmIHRtcF9jaGVjawpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9tZXNvbi5idWlsZAppbmRleCBkZjA2NGM1OWE0MC4uNTA1ZTE2NzFiODYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkCisrKyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkCkBAIC00NywzICs0NywzOCBAQCBsaWJw cV9vYXV0aF9zbyA9IHNoYXJlZF9tb2R1bGUobGlicHFfb2F1dGhfbmFtZSwKICAgbGlua19hcmdz OiBleHBvcnRfZm10LmZvcm1hdChleHBvcnRfZmlsZS5mdWxsX3BhdGgoKSksCiAgIGt3YXJnczog ZGVmYXVsdF9saWJfYXJncywKICkKKworbGlicHFfb2F1dGhfdGVzdF9kZXBzID0gW10KKworb2F1 dGhfdGVzdF9zb3VyY2VzID0gZmlsZXMoJ3Rlc3Qtb2F1dGgtY3VybC5jJykgKyBsaWJwcV9vYXV0 aF9zb19zb3VyY2VzCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBvYXV0aF90ZXN0 X3NvdXJjZXMgKz0gcmNfYmluX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBb CisgICAgJy0tTkFNRScsICdvYXV0aF90ZXN0cycsCisgICAgJy0tRklMRURFU0MnLCAnT0F1dGgg dW5pdCB0ZXN0IHByb2dyYW0nLF0pCitlbmRpZgorCitsaWJwcV9vYXV0aF90ZXN0X2RlcHMgKz0g ZXhlY3V0YWJsZSgnb2F1dGhfdGVzdHMnLAorICBvYXV0aF90ZXN0X3NvdXJjZXMsCisgIGRlcGVu ZGVuY2llczogW2Zyb250ZW5kX3NobGliX2NvZGUsIGxpYnBxLCBsaWJwcV9vYXV0aF9kZXBzXSwK KyAga3dhcmdzOiBkZWZhdWx0X2Jpbl9hcmdzICsgeworICAgICdjX2FyZ3MnOiBkZWZhdWx0X2Jp bl9hcmdzLmdldCgnY19hcmdzJywgW10pICsgbGlicHFfb2F1dGhfc29fY19hcmdzLAorICAgICdj X3BjaCc6IHBjaF9wb3N0Z3Jlc19mZV9oLAorICAgICdpbmNsdWRlX2RpcmVjdG9yaWVzJzogW2xp YnBxX2luYywgcG9zdGdyZXNfaW5jXSwKKyAgICAnaW5zdGFsbCc6IGZhbHNlLAorICB9CispCisK K3Rlc3RwcmVwX3RhcmdldHMgKz0gbGlicHFfb2F1dGhfdGVzdF9kZXBzCisKK3Rlc3RzICs9IHsK KyAgJ25hbWUnOiAnbGlicHEtb2F1dGgnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9k aXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfb2F1dGgucGwnLAorICAgIF0sCisgICAgJ2RlcHMn OiBsaWJwcV9vYXV0aF90ZXN0X2RlcHMsCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL3QvMDAxX29hdXRoLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li42Yzk3MjA1NmJiZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL3QvMDAxX29hdXRoLnBsCkBAIC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAordXNlIHN0cmljdDsKK3VzZSB3 YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwor dXNlIFRlc3Q6Ok1vcmU7CisKKyMgRGVmZXIgZW50aXJlbHkgdG8gdGhlIG9hdXRoX3Rlc3RzIGV4 ZWN1dGFibGUuIHN0ZG91dC9lcnIgaXMgcm91dGVkIHRocm91Z2gKKyMgVGVzdDo6TW9yZSBzbyB0 aGF0IG91ciBsb2dnaW5nIGluZnJhc3RydWN0dXJlIGNhbiBoYW5kbGUgaXQgY29ycmVjdGx5LiBV c2luZworIyBJUEM6OlJ1bjo6bmV3X2NodW5rZXIgc2VlbXMgdG8gaGVscCBpbnRlcmxlYXZlIHRo ZSB0d28gc3RyZWFtcyBhIGxpdHRsZSBiZXR0ZXIKKyMgdGhhbiB3aXRob3V0LgorIworIyBUT0RP OiBwcm92ZSBjYW4gYWxzbyBkZWFsIHdpdGggbmF0aXZlIGV4ZWN1dGFibGVzIGl0c2VsZiwgd2hp Y2ggd2UgY291bGQKKyMgcHJvYmFibHkgbWFrZSB1c2Ugb2YgdmlhIFBST1ZFX1RFU1RTIG9uIHRo ZSBNYWtlZmlsZSBzaWRlLiBCdXQgdGhlIE1lc29uIHNldHVwCisjIGNhbGxzIFBlcmwgZGlyZWN0 bHksIHdoaWNoIHdvdWxkIHJlcXVpcmUgbW9yZSBjb2RlIHRvIHdvcmsgYXJvdW5kLi4uIGFuZAor IyB0aGVyZSdzIHN0aWxsIHRoZSBtYXR0ZXIgb2YgbG9nZ2luZy4KK215ICRidWlsZGVyID0gVGVz dDo6TW9yZS0+YnVpbGRlcjsKK215ICRvdXQgPSAkYnVpbGRlci0+b3V0cHV0OworbXkgJGVyciA9 ICRidWlsZGVyLT5mYWlsdXJlX291dHB1dDsKKworSVBDOjpSdW46OnJ1biBbJ29hdXRoX3Rlc3Rz J10sCisgICc+JyA9PiAoSVBDOjpSdW46Om5ld19jaHVua2VyLCBzdWIgeyAkb3V0LT5wcmludCgk X1swXSkgfSksCisgICcyPicgPT4gKElQQzo6UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgJGVyci0+ cHJpbnQoJF9bMF0pIH0pCisgIG9yIGRpZSAib2F1dGhfdGVzdHMgcmV0dXJuZWQgJD8iOwpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdGVzdC1vYXV0aC1jdXJsLmMgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODI2M2FmZjJmNGEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYwpAQCAtMCwwICsx LDUyNyBAQAorLyoKKyAqIHRlc3Qtb2F1dGgtY3VybC5jCisgKgorICogQSB1bml0IHRlc3QgZHJp dmVyIGZvciBsaWJwcS1vYXV0aC4gVGhpcyAjaW5jbHVkZXMgb2F1dGgtY3VybC5jLCB3aGljaCBs ZXRzCisgKiB0aGUgdGVzdHMgcmVmZXJlbmNlIHN0YXRpYyBmdW5jdGlvbnMgYW5kIG90aGVyIGlu dGVybmFscy4KKyAqCisgKiBVU0VfQVNTRVJUX0NIRUNLSU5HIGlzIHJlcXVpcmVkLCB0byBtYWtl IGl0IGVhc3kgZm9yIHRlc3RzIHRvIHdyYXAKKyAqIG11c3Qtc3VjY2VlZCBjb2RlIGFzIHBhcnQg b2YgdGVzdCBzZXR1cC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKi8KKworI2luY2x1ZGUgIm9hdXRoLWN1cmwuYyIKKwor I2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisg KiBUQVAgSGVscGVycworICovCisKK3N0YXRpYyBpbnQJbnVtX3Rlc3RzID0gMDsKKworLyoKKyAq IFJlcG9ydHMgb2svbm90IG9rIHRvIHRoZSBUQVAgc3RyZWFtIG9uIHN0ZG91dC4KKyAqLworI2Rl ZmluZSBvayhPSywgVEVTVCkgXAorCW9rX2ltcGwoT0ssIFRFU1QsICNPSywgX19GSUxFX18sIF9f TElORV9fKQorCitzdGF0aWMgYm9vbAorb2tfaW1wbChib29sIG9rLCBjb25zdCBjaGFyICp0ZXN0 LCBjb25zdCBjaGFyICp0ZXN0c3RyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlw cmludGYoIiVzb2sgJWQgLSAlc1xuIiwgb2sgPyAiIiA6ICJub3QgIiwgKytudW1fdGVzdHMsIHRl c3QpOworCisJaWYgKCFvaykKKwl7CisJCXByaW50ZigiIyBhdCAlczolZDpcbiIsIGZpbGUsIGxp bmUpOworCQlwcmludGYoIiMgICBleHByZXNzaW9uIGlzIGZhbHNlOiAlc1xuIiwgdGVzdHN0cik7 CisJfQorCisJcmV0dXJuIG9rOworfQorCisvKgorICogTGlrZSBvayh0aGlzID09IHRoYXQpLCBi dXQgd2l0aCBtb3JlIGRpYWdub3N0aWNzIG9uIGZhaWx1cmUuCisgKgorICogT25seSB3b3JrcyBv biBpbnRzLCBidXQgbHVja2lseSB0aGF0J3MgYWxsIHdlIG5lZWQgaGVyZS4gTm90ZSB0aGF0IHRo ZSBtdWNoCisgKiBzaW1wbGVyLWxvb2tpbmcgbWFjcm8gaW1wbGVtZW50YXRpb24KKyAqCisgKiAg ICAgaXNfZGlhZyhvayhUSElTID09IFRIQVQsIFRFU1QpLCBUSElTLCAjVEhJUywgVEhBVCwgI1RI QVQpCisgKgorICogc3VmZmVycyBmcm9tIG11bHRpcGxlIGV2YWx1YXRpb24gb2YgdGhlIG1hY3Jv IGFyZ3VtZW50cy4uLgorICovCisjZGVmaW5lIGlzKFRISVMsIFRIQVQsIFRFU1QpIFwKKwlkbyB7 IFwKKwkJaW50IHRoaXNfID0gKFRISVMpLCBcCisJCQl0aGF0XyA9IChUSEFUKTsgXAorCQlpc19k aWFnKCBcCisJCQlva19pbXBsKHRoaXNfID09IHRoYXRfLCBURVNULCAjVEhJUyAiID09ICIgI1RI QVQsIF9fRklMRV9fLCBfX0xJTkVfXyksIFwKKwkJCXRoaXNfLCAjVEhJUywgdGhhdF8sICNUSEFU IFwKKwkJKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBib29sCitpc19kaWFnKGJvb2wgb2ss IGludCB0aGlzLCBjb25zdCBjaGFyICp0aGlzc3RyLCBpbnQgdGhhdCwgY29uc3QgY2hhciAqdGhh dHN0cikKK3sKKwlpZiAoIW9rKQorCQlwcmludGYoIiMgICAlcyA9ICVkOyAlcyA9ICVkXG4iLCB0 aGlzc3RyLCB0aGlzLCB0aGF0c3RyLCB0aGF0KTsKKworCXJldHVybiBvazsKK30KKworLyoKKyAq IFV0aWxpdGllcworICovCisKKy8qCisgKiBDcmVhdGVzIGEgcGFydGlhbGx5LWluaXRpYWxpemVk IGFzeW5jX2N0eCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcuIEZyZWUKKyAqIHdpdGggZnJl ZV90ZXN0X2FjdHgoKS4KKyAqLworc3RhdGljIHN0cnVjdCBhc3luY19jdHggKgoraW5pdF90ZXN0 X2FjdHgodm9pZCkKK3sKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4OworCisJYWN0eCA9IGNhbGxv YygxLCBzaXplb2YoKmFjdHgpKTsKKwlBc3NlcnQoYWN0eCk7CisKKwlhY3R4LT5tdXggPSBQR0lO VkFMSURfU09DS0VUOworCWFjdHgtPnRpbWVyZmQgPSAtMTsKKwlhY3R4LT5kZWJ1Z2dpbmcgPSB0 cnVlOworCisJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT5lcnJidWYpOworCisJQXNzZXJ0KHNldHVw X211bHRpcGxleGVyKGFjdHgpKTsKKworCXJldHVybiBhY3R4OworfQorCitzdGF0aWMgdm9pZAor ZnJlZV90ZXN0X2FjdHgoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKK3sKKwl0ZXJtUFFFeHBCdWZm ZXIoJmFjdHgtPmVycmJ1Zik7CisKKwlpZiAoYWN0eC0+bXV4ICE9IFBHSU5WQUxJRF9TT0NLRVQp CisJCWNsb3NlKGFjdHgtPm11eCk7CisJaWYgKGFjdHgtPnRpbWVyZmQgPj0gMCkKKwkJY2xvc2Uo YWN0eC0+dGltZXJmZCk7CisKKwlmcmVlKGFjdHgpOworfQorCitzdGF0aWMgY2hhciBkdW1teV9i dWZbNCAqIDEwMjRdOwkvKiBmb3IgZmlsbF9waXBlL2RyYWluX3BpcGUgKi8KKworLyoKKyAqIFdy aXRlcyB0byB0aGUgd3JpdGUgc2lkZSBvZiBhIHBpcGUgdW50aWwgaXQgd29uJ3QgdGFrZSBhbnkg bW9yZSBkYXRhLiBSZXR1cm5zCisgKiB0aGUgYW1vdW50IHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBz c2l6ZV90CitmaWxsX3BpcGUoaW50IGZkKQoreworCWludAkJCW1vZGU7CisJc3NpemVfdAkJd3Jp dHRlbiA9IDA7CisKKwkvKiBEb24ndCBibG9jay4gKi8KKwlBc3NlcnQoKG1vZGUgPSBmY250bChm ZCwgRl9HRVRGTCkpICE9IC0xKTsKKwlBc3NlcnQoZmNudGwoZmQsIEZfU0VURkwsIG1vZGUgfCBP X05PTkJMT0NLKSA9PSAwKTsKKworCXdoaWxlICh0cnVlKQorCXsKKwkJc3NpemVfdAkJdzsKKwor CQl3ID0gd3JpdGUoZmQsIGR1bW15X2J1Ziwgc2l6ZW9mKGR1bW15X2J1ZikpOworCQlpZiAodyA8 IDApCisJCXsKKwkJCWlmIChlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRVdPVUxEQkxPQ0sp CisJCQl7CisJCQkJcGVycm9yKCJ3cml0ZSB0byBwaXBlIik7CisJCQkJd3JpdHRlbiA9IC0xOwor CQkJfQorCQkJYnJlYWs7CisJCX0KKworCQl3cml0dGVuICs9IHc7CisJfQorCisJLyogUmVzZXQg dGhlIGRlc2NyaXB0b3IgZmxhZ3MuICovCisJQXNzZXJ0KGZjbnRsKGZkLCBGX1NFVEZELCBtb2Rl KSA9PSAwKTsKKworCXJldHVybiB3cml0dGVuOworfQorCisvKgorICogRHJhaW5zIHRoZSByZXF1 ZXN0ZWQgYW1vdW50IG9mIGRhdGEgZnJvbSB0aGUgcmVhZCBzaWRlIG9mIGEgcGlwZS4KKyAqLwor c3RhdGljIGJvb2wKK2RyYWluX3BpcGUoaW50IGZkLCBzc2l6ZV90IG4pCit7CisJQXNzZXJ0KG4g PiAwKTsKKworCXdoaWxlIChuKQorCXsKKwkJc2l6ZV90CQl0b19yZWFkID0gKG4gPD0gc2l6ZW9m KGR1bW15X2J1ZikpID8gbiA6IHNpemVvZihkdW1teV9idWYpOworCQlzc2l6ZV90CQlkcmFpbmVk OworCisJCWRyYWluZWQgPSByZWFkKGZkLCBkdW1teV9idWYsIHRvX3JlYWQpOworCQlpZiAoZHJh aW5lZCA8IDApCisJCXsKKwkJCXBlcnJvcigicmVhZCBmcm9tIHBpcGUiKTsKKwkJCXJldHVybiBm YWxzZTsKKwkJfQorCisJCW4gLT0gZHJhaW5lZDsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIFRlc3RzIHdoZXRoZXIgdGhlIG11bHRpcGxleGVyIGlzIG1hcmtlZCByZWFkeSBieSB0 aGUgZGVhZGxpbmUuIFRoaXMgaXMgYQorICogbWFjcm8gc28gdGhhdCBmaWxlL2xpbmUgaW5mb3Jt YXRpb24gbWFrZXMgc2Vuc2UgZHVyaW5nIGZhaWx1cmVzLgorICoKKyAqIE5COiBvdXIgY3VycmVu dCBtdWx0aXBsZXhlciBpbXBsZW1lbnRhdGlvbnMgKGVwb2xsL2txdWV1ZSkgYXJlICpyZWFkYWJs ZSoKKyAqIHdoZW4gdGhlIHVuZGVybHlpbmcgbGliY3VybCBzb2NrZXRzIGFyZSAqd3JpdGFibGUq LiBUaGlzIGJlaGF2aW9yIGlzIHBpbm5lZAorICogaGVyZSB0byByZWNvcmQgdGhhdCBleHBlY3Rh dGlvbjsgUEdSRVNfUE9MTElOR19SRUFESU5HIGlzIGhhcmRjb2RlZAorICogdGhyb3VnaG91dCB0 aGUgZmxvdyBhbmQgd291bGQgbmVlZCB0byBiZSBjaGFuZ2VkIGlmIGEgbmV3IG11bHRpcGxleGVy IGRvZXMKKyAqIHNvbWV0aGluZyBkaWZmZXJlbnQuCisgKi8KKyNkZWZpbmUgbXV4X2lzX3JlYWR5 KE1VWCwgREVBRExJTkUsIFRFU1QpIFwKKwlkbyB7IFwKKwkJaW50IHJlc18gPSBQUXNvY2tldFBv bGwoTVVYLCAxLCAwLCBERUFETElORSk7IFwKKwkJQXNzZXJ0KHJlc18gIT0gLTEpOyBcCisJCW9r KHJlc18gPiAwLCAibXVsdGlwbGV4ZXIgaXMgcmVhZHkgIiBURVNUKTsgXAorCX0gd2hpbGUgKDAp CisKKy8qCisgKiBUaGUgb3Bwb3NpdGUgb2YgbXV4X2lzX3JlYWR5KCkuCisgKi8KKyNkZWZpbmUg bXV4X2lzX25vdF9yZWFkeShNVVgsIFRFU1QpIFwKKwlkbyB7IFwKKwkJaW50IHJlc18gPSBQUXNv Y2tldFBvbGwoTVVYLCAxLCAwLCAwKTsgXAorCQlBc3NlcnQocmVzXyAhPSAtMSk7IFwKKwkJaXMo cmVzXywgMCwgIm11bHRpcGxleGVyIGlzIG5vdCByZWFkeSAiIFRFU1QpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqIFRlc3QgU3VpdGVzCisgKi8KKworLyogUGVyLXN1aXRlIHRpbWVvdXQuIFNl dCB2aWEgdGhlIFBHX1RFU1RfVElNRU9VVF9ERUZBVUxUIGVudnZhci4gKi8KK3N0YXRpYyBwZ191 c2VjX3RpbWVfdCB0aW1lb3V0X3VzID0gMTgwICogMTAwMCAqIDEwMDA7CisKK3N0YXRpYyB2b2lk Cit0ZXN0X3NldF90aW1lcih2b2lkKQoreworCXN0cnVjdCBhc3luY19jdHggKmFjdHggPSBpbml0 X3Rlc3RfYWN0eCgpOworCWNvbnN0IHBnX3VzZWNfdGltZV90IGRlYWRsaW5lID0gUFFnZXRDdXJy ZW50VGltZVVTZWMoKSArIHRpbWVvdXRfdXM7CisKKwlwcmludGYoIiMgdGVzdF9zZXRfdGltZXJc biIpOworCisJLyogQSB6ZXJvLWR1cmF0aW9uIHRpbWVyIHNob3VsZCByZXN1bHQgaW4gYSBuZWFy LWltbWVkaWF0ZSByZWFkeSBzaWduYWwuICovCisJQXNzZXJ0KHNldF90aW1lcihhY3R4LCAwKSk7 CisJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHRpbWVyIGV4cGlyZXMi KTsKKwlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAxLCAidGltZXJfZXhwaXJlZCgpIHJldHVybnMg MSB3aGVuIHRpbWVyIGV4cGlyZXMiKTsKKworCS8qIFJlc2V0dGluZyB0aGUgdGltZXIgZmFyIGlu IHRoZSBmdXR1cmUgc2hvdWxkIHVuc2V0IHRoZSByZWFkeSBzaWduYWwuICovCisJQXNzZXJ0KHNl dF90aW1lcihhY3R4LCBJTlRfTUFYKSk7CisJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3 aGVuIHRpbWVyIGlzIHJlc2V0IHRvIHRoZSBmdXR1cmUiKTsKKwlpcyh0aW1lcl9leHBpcmVkKGFj dHgpLCAwLCAidGltZXJfZXhwaXJlZCgpIHJldHVybnMgMCB3aXRoIHVuZXhwaXJlZCB0aW1lciIp OworCisJLyogU2V0dGluZyBhbm90aGVyIHplcm8tZHVyYXRpb24gdGltZXIgc2hvdWxkIG92ZXJy aWRlIHRoZSBwcmV2aW91cyBvbmUuICovCisJQXNzZXJ0KHNldF90aW1lcihhY3R4LCAwKSk7CisJ bXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHRpbWVyIGlzIHJlLWV4cGly ZWQiKTsKKwlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAxLCAidGltZXJfZXhwaXJlZCgpIHJldHVy bnMgMSB3aGVuIHRpbWVyIGlzIHJlLWV4cGlyZWQiKTsKKworCS8qIEFuZCBkaXNhYmxpbmcgdGhh dCB0aW1lciBzaG91bGQgb25jZSBhZ2FpbiB1bnNldCB0aGUgcmVhZHkgc2lnbmFsLiAqLworCUFz c2VydChzZXRfdGltZXIoYWN0eCwgLTEpKTsKKwltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwg IndoZW4gdGltZXIgaXMgdW5zZXQiKTsKKwlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAwLCAidGlt ZXJfZXhwaXJlZCgpIHJldHVybnMgMCB3aGVuIHRpbWVyIGlzIHVuc2V0Iik7CisKKwl7CisJCWJv b2wJCWV4cGlyZWQ7CisKKwkJLyogTWFrZSBzdXJlIGRyYWluX3RpbWVyX2V2ZW50cygpIGZ1bmN0 aW9ucyBjb3JyZWN0bHkgYXMgd2VsbC4gKi8KKwkJQXNzZXJ0KHNldF90aW1lcihhY3R4LCAwKSk7 CisJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiB0aW1lciBpcyByZS1l eHBpcmVkIChkcmFpbl90aW1lcl9ldmVudHMpIik7CisKKwkJQXNzZXJ0KGRyYWluX3RpbWVyX2V2 ZW50cyhhY3R4LCAmZXhwaXJlZCkpOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndo ZW4gdGltZXIgaXMgZHJhaW5lZCBhZnRlciBleHBpcmluZyIpOworCQlpcyhleHBpcmVkLCAxLCAi ZHJhaW5fdGltZXJfZXZlbnRzKCkgcmVwb3J0cyBleHBpcmF0aW9uIik7CisJCWlzKHRpbWVyX2V4 cGlyZWQoYWN0eCksIDAsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIGFmdGVyIHRpbWVyIGlz IGRyYWluZWQiKTsKKworCQkvKiBBIHNlY29uZCBkcmFpbiBzaG91bGQgZG8gbm90aGluZy4gKi8K KwkJQXNzZXJ0KGRyYWluX3RpbWVyX2V2ZW50cyhhY3R4LCAmZXhwaXJlZCkpOworCQltdXhfaXNf bm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gdGltZXIgaXMgZHJhaW5lZCBhIHNlY29uZCB0aW1l Iik7CisJCWlzKGV4cGlyZWQsIDAsICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIG5vIGV4 cGlyYXRpb24iKTsKKwkJaXModGltZXJfZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyX2V4cGlyZWQo KSBzdGlsbCByZXR1cm5zIDAiKTsKKwl9CisKKwlmcmVlX3Rlc3RfYWN0eChhY3R4KTsKK30KKwor c3RhdGljIHZvaWQKK3Rlc3RfcmVnaXN0ZXJfc29ja2V0KHZvaWQpCit7CisJc3RydWN0IGFzeW5j X2N0eCAqYWN0eCA9IGluaXRfdGVzdF9hY3R4KCk7CisJaW50CQkJcGlwZWZkWzJdOworCWludAkJ CXJmZCwKKwkJCQl3ZmQ7CisJYm9vbAkJYmlkaXJlY3Rpb25hbDsKKworCS8qIENyZWF0ZSBhIGxv Y2FsIHBpcGUgZm9yIGNvbW11bmljYXRpb24uICovCisJQXNzZXJ0KHBpcGUocGlwZWZkKSA9PSAw KTsKKwlyZmQgPSBwaXBlZmRbMF07CisJd2ZkID0gcGlwZWZkWzFdOworCisJLyoKKwkgKiBTb21l IHBsYXRmb3JtcyAoRnJlZUJTRCkgaW1wbGVtZW50IGJpZGlyZWN0aW9uYWwgcGlwZXMsIGFmZmVj dGluZyB0aGUKKwkgKiBiZWhhdmlvciBvZiBzb21lIG9mIHRoZXNlIHRlc3RzLiBTdG9yZSB0aGF0 IGtub3dsZWRnZSBmb3IgbGF0ZXIuCisJICovCisJYmlkaXJlY3Rpb25hbCA9IFBRc29ja2V0UG9s bChyZmQgLyogcmVhZCAqLyAsIDAsIDEgLyogd3JpdGUgKi8gLCAwKSA+IDA7CisKKwkvKgorCSAq IFRoaXMgc3VpdGUgcnVucyB0d2ljZSAtLSBvbmNlIHVzaW5nIENVUkxfUE9MTF9JTi9DVVJMX1BP TExfT1VUIGZvcgorCSAqIHJlYWQvd3JpdGUgb3BlcmF0aW9ucywgcmVzcGVjdGl2ZWx5LCBhbmQg b25jZSB1c2luZyBDVVJMX1BPTExfSU5PVVQgZm9yCisJICogYm90aCBzaWRlcy4KKwkgKi8KKwlm b3IgKGludCBpbm91dCA9IDA7IGlub3V0IDwgMjsgaW5vdXQrKykKKwl7CisJCWNvbnN0IGludAlp bl9ldmVudCA9IGlub3V0ID8gQ1VSTF9QT0xMX0lOT1VUIDogQ1VSTF9QT0xMX0lOOworCQljb25z dCBpbnQJb3V0X2V2ZW50ID0gaW5vdXQgPyBDVVJMX1BPTExfSU5PVVQgOiBDVVJMX1BPTExfT1VU OworCQljb25zdCBwZ191c2VjX3RpbWVfdCBkZWFkbGluZSA9IFBRZ2V0Q3VycmVudFRpbWVVU2Vj KCkgKyB0aW1lb3V0X3VzOworCQlzaXplX3QJCWJpZGlfcGlwZV9zaXplID0gMDsgLyogc2lsZW5j ZSBjb21waWxlciB3YXJuaW5ncyAqLworCisJCXByaW50ZigiIyB0ZXN0X3JlZ2lzdGVyX3NvY2tl dCAlc1xuIiwgaW5vdXQgPyAiKElOT1VUKSIgOiAiIik7CisKKwkJLyoKKwkJICogQXQgdGhlIHN0 YXJ0IG9mIHRoZSB0ZXN0LCB0aGUgcmVhZCBzaWRlIHNob3VsZCBiZSBibG9ja2VkIGFuZCB0aGUK KwkJICogd3JpdGUgc2lkZSBzaG91bGQgYmUgb3Blbi4gKFRoZXJlJ3MgYSBtaXN0YWtlIGF0IHRo ZSBlbmQgb2YgdGhpcworCQkgKiBsb29wIG90aGVyd2lzZS4pCisJCSAqLworCQlBc3NlcnQoUFFz b2NrZXRQb2xsKHJmZCwgMSwgMCwgMCkgPT0gMCk7CisJCUFzc2VydChQUXNvY2tldFBvbGwod2Zk LCAwLCAxLCAwKSA+IDApOworCisJCS8qCisJCSAqIEZvciBiaWRpcmVjdGlvbmFsIHN5c3RlbXMs IGVtdWxhdGUgdW5pZGlyZWN0aW9uYWwgYmVoYXZpb3IgaGVyZSBieQorCQkgKiBmaWxsaW5nIHVw IHRoZSAicmVhZCBzaWRlIiBvZiB0aGUgcGlwZS4KKwkJICovCisJCWlmIChiaWRpcmVjdGlvbmFs KQorCQkJQXNzZXJ0KChiaWRpX3BpcGVfc2l6ZSA9IGZpbGxfcGlwZShyZmQpKSA+IDApOworCisJ CS8qIExpc3RlbiBvbiB0aGUgcmVhZCBzaWRlLiBUaGUgbXVsdGlwbGV4ZXIgc2hvdWxkbid0IGJl IHJlYWR5IHlldC4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGluX2V2 ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3 aGVuIGZkIGlzIG5vdCByZWFkYWJsZSIpOworCisJCS8qIFdyaXRpbmcgdG8gdGhlIHBpcGUgc2hv dWxkIHJlc3VsdCBpbiBhIHJlYWQtcmVhZHkgbXVsdGlwbGV4ZXIuICovCisJCUFzc2VydCh3cml0 ZSh3ZmQsICJ4IiwgMSkgPT0gMSk7CisJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5l LCAid2hlbiBmZCBpcyByZWFkYWJsZSIpOworCisJCS8qCisJCSAqIFVwZGF0ZSB0aGUgcmVnaXN0 cmF0aW9uIHRvIHdhaXQgb24gd3JpdGUgZXZlbnRzIGluc3RlYWQuIFRoZQorCQkgKiBtdWx0aXBs ZXhlciBzaG91bGQgYmUgdW5zZXQuCisJCSAqLworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5V TEwsIHJmZCwgQ1VSTF9QT0xMX09VVCwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19ub3Rf cmVhZHkoYWN0eC0+bXV4LCAid2hlbiB3YWl0aW5nIGZvciB3cml0ZXMgb24gcmVhZGFibGUgZmQi KTsKKworCQkvKiBSZS1yZWdpc3RlciBmb3IgcmVhZCBldmVudHMuICovCisJCUFzc2VydChyZWdp c3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBpbl9ldmVudCwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11 eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiB3YWl0aW5nIGZvciByZWFkcyBh Z2FpbiIpOworCisJCS8qIFN0b3AgbGlzdGVuaW5nLiBUaGUgbXVsdGlwbGV4ZXIgc2hvdWxkIGJl IHVuc2V0LiAqLworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgQ1VSTF9QT0xM X1JFTU9WRSwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4 LCAid2hlbiByZWFkYWJsZSBmZCBpcyByZW1vdmVkIik7CisKKwkJLyogTGlzdGVuIGFnYWluLiAq LworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgaW5fZXZlbnQsIGFjdHgsIE5V TEwpID09IDApOworCQltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gcmVh ZGFibGUgZmQgaXMgcmUtYWRkZWQiKTsKKworCQkvKgorCQkgKiBEcmFpbmluZyB0aGUgcGlwZSBz aG91bGQgdW5zZXQgdGhlIG11bHRpcGxleGVyIGFnYWluLCBvbmNlIHRoZSBvbGQKKwkJICogZXZl bnQgaXMgY2xlYXJlZC4KKwkJICovCisJCUFzc2VydChkcmFpbl9waXBlKHJmZCwgMSkpOworCQlB c3NlcnQoY29tYl9tdWx0aXBsZXhlcihhY3R4KSk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+ bXV4LCAid2hlbiBmZCBpcyBkcmFpbmVkIik7CisKKwkJLyogVW5kbyBhbnkgdW5pZGlyZWN0aW9u YWwgZW11bGF0aW9uLiAqLworCQlpZiAoYmlkaXJlY3Rpb25hbCkKKwkJCUFzc2VydChkcmFpbl9w aXBlKHdmZCwgYmlkaV9waXBlX3NpemUpKTsKKworCQkvKiBMaXN0ZW4gb24gdGhlIHdyaXRlIHNp ZGUuIEFuIGVtcHR5IGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUuICovCisJCUFzc2VydChyZWdp c3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAw KTsKKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIG91dF9ldmVudCwgYWN0eCwg TlVMTCkgPT0gMCk7CisJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiBm ZCBpcyB3cml0YWJsZSIpOworCisJCS8qIEFzIGFib3ZlLCB3YWl0IG9uIHJlYWQgZXZlbnRzIGlu c3RlYWQuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgd2ZkLCBDVVJMX1BPTExf SU4sIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndo ZW4gd2FpdGluZyBmb3IgcmVhZHMgb24gd3JpdGFibGUgZmQiKTsKKworCQkvKiBSZS1yZWdpc3Rl ciBmb3Igd3JpdGUgZXZlbnRzLiAqLworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHdm ZCwgb3V0X2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11 eCwgZGVhZGxpbmUsICJ3aGVuIHdhaXRpbmcgZm9yIHdyaXRlcyBhZ2FpbiIpOworCisJCXsKKwkJ CXNzaXplX3QJCXdyaXR0ZW47CisKKwkJCS8qCisJCQkgKiBGaWxsIHRoZSBwaXBlLiBPbmNlIHRo ZSBvbGQgd3JpdGFibGUgZXZlbnQgaXMgY2xlYXJlZCwgdGhlIG11eAorCQkJICogc2hvdWxkIG5v dCBiZSByZWFkeS4KKwkJCSAqLworCQkJQXNzZXJ0KCh3cml0dGVuID0gZmlsbF9waXBlKHdmZCkp ID4gMCk7CisJCQlwcmludGYoIiMgcGlwZSBidWZmZXIgaXMgZnVsbCBhdCAlemQgYnl0ZXNcbiIs IHdyaXR0ZW4pOworCisJCQlBc3NlcnQoY29tYl9tdWx0aXBsZXhlcihhY3R4KSk7CisJCQltdXhf aXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gZmQgYnVmZmVyIGlzIGZ1bGwiKTsKKworCQkJ LyogRHJhaW4gdGhlIHBpcGUgYWdhaW4uICovCisJCQlBc3NlcnQoZHJhaW5fcGlwZShyZmQsIHdy aXR0ZW4pKTsKKwkJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiBmZCBi dWZmZXIgaXMgZHJhaW5lZCIpOworCQl9CisKKwkJLyogU3RvcCBsaXN0ZW5pbmcuICovCisJCUFz c2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgd2ZkLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBO VUxMKSA9PSAwKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIGZkIGlzIHJl bW92ZWQiKTsKKworCQkvKiBNYWtlIHN1cmUgYW4gZXhwaXJlZCB0aW1lciBkb2Vzbid0IGludGVy ZmVyZSB3aXRoIGV2ZW50IGRyYWluaW5nLiAqLworCQl7CisJCQlib29sCQlleHBpcmVkOworCisJ CQkvKiBNYWtlIHRoZSByZmQgYXBwZWFyIHVuaWRpcmVjdGlvbmFsIGlmIG5lY2Vzc2FyeS4gKi8K KwkJCWlmIChiaWRpcmVjdGlvbmFsKQorCQkJCUFzc2VydCgoYmlkaV9waXBlX3NpemUgPSBmaWxs X3BpcGUocmZkKSkgPiAwKTsKKworCQkJLyogU2V0IHRoZSB0aW1lciBhbmQgd2FpdCBmb3IgaXQg dG8gZXhwaXJlLiAqLworCQkJQXNzZXJ0KHNldF90aW1lcihhY3R4LCAwKSk7CisJCQlBc3NlcnQo UFFzb2NrZXRQb2xsKGFjdHgtPnRpbWVyZmQsIDEsIDAsIGRlYWRsaW5lKSA+IDApOworCQkJaXMo dGltZXJfZXhwaXJlZChhY3R4KSwgMSwgInRpbWVyIGlzIGV4cGlyZWQiKTsKKworCQkJLyogUmVn aXN0ZXIgZm9yIHJlYWQgZXZlbnRzIGFuZCBtYWtlIHRoZSBmZCByZWFkYWJsZS4gKi8KKwkJCUFz c2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBpbl9ldmVudCwgYWN0eCwgTlVMTCkgPT0g MCk7CisJCQlBc3NlcnQod3JpdGUod2ZkLCAieCIsIDEpID09IDEpOworCQkJbXV4X2lzX3JlYWR5 KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIGZkIGlzIHJlYWRhYmxlIGFuZCB0aW1lciBleHBp cmVkIik7CisKKwkJCS8qCisJCQkgKiBEcmFpbmluZyB0aGUgcGlwZSBzaG91bGQgdW5zZXQgdGhl IG11bHRpcGxleGVyIGFnYWluLCBvbmNlIHRoZQorCQkJICogb2xkIGV2ZW50IGlzIGRyYWluZWQg YW5kIHRoZSB0aW1lciBpcyByZXNldC4KKwkJCSAqCisJCQkgKiBPcmRlciBtYXR0ZXJzLCBzaW5j ZSBjb21iX211bHRpcGxleGVyKCkgZG9lc24ndCBoYXZlIHRvIHJlbW92ZQorCQkJICogc3RhbGUg ZXZlbnRzIHdoZW4gYWN0aXZlIGV2ZW50cyBleGlzdC4gRm9sbG93IHRoZSBjYWxsIHNlcXVlbmNl CisJCQkgKiB1c2VkIGluIHRoZSBjb2RlOiBkcmFpbiB0aGUgdGltZXIgZXhwaXJhdGlvbiwgZHJh aW4gdGhlIHBpcGUsCisJCQkgKiB0aGVuIGNsZWFyIHRoZSBzdGFsZSBldmVudHMuCisJCQkgKi8K KwkJCUFzc2VydChkcmFpbl90aW1lcl9ldmVudHMoYWN0eCwgJmV4cGlyZWQpKTsKKwkJCUFzc2Vy dChkcmFpbl9waXBlKHJmZCwgMSkpOworCQkJQXNzZXJ0KGNvbWJfbXVsdGlwbGV4ZXIoYWN0eCkp OworCisJCQlpcyhleHBpcmVkLCAxLCAiZHJhaW5fdGltZXJfZXZlbnRzKCkgcmVwb3J0cyBleHBp cmF0aW9uIik7CisJCQlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAwLCAidGltZXIgaXMgbm8gbG9u Z2VyIGV4cGlyZWQiKTsKKwkJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiBmZCBp cyBkcmFpbmVkIGFuZCB0aW1lciByZXNldCIpOworCisJCQkvKiBTdG9wIGxpc3RlbmluZy4gKi8K KwkJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BPTExfUkVNT1ZFLCBh Y3R4LCBOVUxMKSA9PSAwKTsKKworCQkJLyogVW5kbyBhbnkgdW5pZGlyZWN0aW9uYWwgZW11bGF0 aW9uLiAqLworCQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQkJQXNzZXJ0KGRyYWluX3BpcGUod2Zk LCBiaWRpX3BpcGVfc2l6ZSkpOworCQl9CisKKwkJLyogRW5zdXJlIGNvbWJfbXVsdGlwbGV4ZXIo KSBjYW4gaGFuZGxlIG11bHRpcGxlIHN0YWxlIGV2ZW50cy4gKi8KKwkJeworCQkJaW50CQkJcmZk MiwKKwkJCQkJCXdmZDI7CisKKwkJCS8qIENyZWF0ZSBhIHNlY29uZCBsb2NhbCBwaXBlLiAqLwor CQkJQXNzZXJ0KHBpcGUocGlwZWZkKSA9PSAwKTsKKwkJCXJmZDIgPSBwaXBlZmRbMF07CisJCQl3 ZmQyID0gcGlwZWZkWzFdOworCisJCQkvKiBNYWtlIGJvdGggcmZkcyBhcHBlYXIgdW5pZGlyZWN0 aW9uYWwgaWYgbmVjZXNzYXJ5LiAqLworCQkJaWYgKGJpZGlyZWN0aW9uYWwpCisJCQl7CisJCQkJ QXNzZXJ0KChiaWRpX3BpcGVfc2l6ZSA9IGZpbGxfcGlwZShyZmQpKSA+IDApOworCQkJCUFzc2Vy dChmaWxsX3BpcGUocmZkMikgPT0gYmlkaV9waXBlX3NpemUpOworCQkJfQorCisJCQkvKiBSZWdp c3RlciBmb3IgcmVhZCBldmVudHMgb24gYm90aCBmZHMsIGFuZCBtYWtlIHRoZW0gcmVhZGFibGUu ICovCisJCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgaW5fZXZlbnQsIGFjdHgs IE5VTEwpID09IDApOworCQkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQyLCBpbl9l dmVudCwgYWN0eCwgTlVMTCkgPT0gMCk7CisKKwkJCUFzc2VydCh3cml0ZSh3ZmQsICJ4IiwgMSkg PT0gMSk7CisJCQlBc3NlcnQod3JpdGUod2ZkMiwgIngiLCAxKSA9PSAxKTsKKworCQkJbXV4X2lz X3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHR3byBmZHMgYXJlIHJlYWRhYmxlIik7 CisKKwkJCS8qCisJCQkgKiBEcmFpbiBib3RoIGZkcy4gY29tYl9tdWx0aXBsZXhlcigpIHNob3Vs ZCB0aGVuIGVuc3VyZSB0aGF0IHRoZQorCQkJICogbXV4IGlzIG5vIGxvbmdlciByZWFkYWJsZS4K KwkJCSAqLworCQkJQXNzZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CisJCQlBc3NlcnQoZHJhaW5f cGlwZShyZmQyLCAxKSk7CisJCQlBc3NlcnQoY29tYl9tdWx0aXBsZXhlcihhY3R4KSk7CisJCQlt dXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gdHdvIGZkcyBhcmUgZHJhaW5lZCIpOwor CisJCQkvKiBTdG9wIGxpc3RlbmluZy4gKi8KKwkJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVM TCwgcmZkLCBDVVJMX1BPTExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJCUFzc2VydChy ZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkMiwgQ1VSTF9QT0xMX1JFTU9WRSwgYWN0eCwgTlVMTCkg PT0gMCk7CisKKwkJCS8qIFVuZG8gYW55IHVuaWRpcmVjdGlvbmFsIGVtdWxhdGlvbi4gKi8KKwkJ CWlmIChiaWRpcmVjdGlvbmFsKQorCQkJeworCQkJCUFzc2VydChkcmFpbl9waXBlKHdmZCwgYmlk aV9waXBlX3NpemUpKTsKKwkJCQlBc3NlcnQoZHJhaW5fcGlwZSh3ZmQyLCBiaWRpX3BpcGVfc2l6 ZSkpOworCQkJfQorCisJCQljbG9zZShyZmQyKTsKKwkJCWNsb3NlKHdmZDIpOworCQl9CisJfQor CisJY2xvc2UocmZkKTsKKwljbG9zZSh3ZmQpOworCWZyZWVfdGVzdF9hY3R4KGFjdHgpOworfQor CitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp0aW1l b3V0OworCisJLyogR3JhYiB0aGUgZGVmYXVsdCB0aW1lb3V0LiAqLworCXRpbWVvdXQgPSBnZXRl bnYoIlBHX1RFU1RfVElNRU9VVF9ERUZBVUxUIik7CisJaWYgKHRpbWVvdXQpCisJeworCQlpbnQJ CQl0aW1lb3V0X3MgPSBhdG9pKHRpbWVvdXQpOworCisJCWlmICh0aW1lb3V0X3MgPiAwKQorCQkJ dGltZW91dF91cyA9IHRpbWVvdXRfcyAqIDEwMDAgKiAxMDAwOworCX0KKworCS8qCisJICogU2V0 IHVwIGxpbmUgYnVmZmVyaW5nIGZvciBvdXIgb3V0cHV0LCB0byBsZXQgc3RkZXJyIGludGVybGVh dmUgaW4gdGhlCisJICogbG9nIGZpbGVzLgorCSAqLworCXNldHZidWYoc3Rkb3V0LCBOVUxMLCBQ R19JT0xCRiwgMCk7CisKKwl0ZXN0X3NldF90aW1lcigpOworCXRlc3RfcmVnaXN0ZXJfc29ja2V0 KCk7CisKKwlwcmludGYoIjEuLiVkXG4iLCBudW1fdGVzdHMpOworCXJldHVybiAwOworfQorCisj ZWxzZQkJCQkJCQkvKiAhVVNFX0FTU0VSVF9DSEVDS0lORyAqLworCisvKgorICogU2tpcCB0aGUg dGVzdCBzdWl0ZSB3aGVuIHdlIGRvbid0IGhhdmUgYXNzZXJ0aW9ucy4KKyAqLworaW50CittYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCIxLi4wICMgc2tpcDogY2Fzc2Vy dCBpcyBub3QgZW5hYmxlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCQkJCQkJCS8q IFVTRV9BU1NFUlRfQ0hFQ0tJTkcgKi8KLS0gCjIuMzQuMQoK --0000000000000918fb063c325407--