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 1ugUqB-003yCz-D5 for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Jul 2025 20:53:00 +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 1ugUqA-00AqXm-92 for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Jul 2025 20:52:58 +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 1ugUq9-00AqXN-Hg for pgsql-hackers@lists.postgresql.org; Mon, 28 Jul 2025 20:52:58 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ugUq6-001GOi-30 for pgsql-hackers@lists.postgresql.org; Mon, 28 Jul 2025 20:52:56 +0000 Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-4ae721c2f10so45781841cf.3 for ; Mon, 28 Jul 2025 13:52:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1753735974; x=1754340774; 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=ApBfLPXMDqANGbwKjLUP4AxwkyrgRdngruPAiCVRuxQ=; b=LB0O7aiZVGWhd54RMcYzgctKCZYW4IUTexfOD1LrQuobKgH7bX5s/3P8xJ5WGTJmdN SrAZQNHGWdgKBitF5Al9fbLbfp6QDQbwJilLSianOYKJCZASMLi2oOE7BrrM74Ea/ynA 48lhaDamGoNHccnpgrv2z42N4nd4KEomsRhiCnnDP5JX7kc+kaX75W8DUjsYkCRYjyKs +qQgm/NjYi53dJomxcNn65+9wWpgtKemUSwlg32mdqfuvVQJSifaGKTm2eiU6lm9ZxzC mTeovodsqSQmC+oHaE8cKZWP26lEct8UlawIw5jPHEe1Ewvd6tmuxiwHYY4EoeZkLgTW Inmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753735974; x=1754340774; 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=ApBfLPXMDqANGbwKjLUP4AxwkyrgRdngruPAiCVRuxQ=; b=jdM9O6XGwDCaIQwDBTses2iBNvoRnYBqdrgUH+N4kbc4SG1nkWLUTJ2SRXeJFFWS5Z NIoEVwuBX9sIVP1SJl2GfMM8pWwSEjmdqF34zvVK8N/qHKQAWbZsxJh45/bOdXQWBvVW Rdp30H4ZYd37txwQx2Sur4uBH8CV64pNGINYN7HzPf/U34tz5Am5LCqdrQr1tmBAK+bA 7BmDog4+Hfq1iMrmQo++yOx/duO99xhLSMVOl8da2QWNV0iKeoqRT1FDHyZQWTljas8g s+apEjAWc/29NuKJV67s6kJGxLcH/XZXo0u+gboxbdjxIvv9HKSS2I4Rmp8kk1zeKK2A i+BA== X-Gm-Message-State: AOJu0Yz1lahcaW8P40zJBlEd743E4+tCrr0zbpC0nSOeyDcmwg8c+o8y mEKHdpseGPUB1FN8jydVyVyl2Teunjo5GcYvM/1y+0dtudHcLJUQLzXyiYWFxU+Svg6TdClsIHs I+dK5u5yOxkNBKbtMA1G+oOKJ7TFKAUFDzaMHtKoFLUmfqQVbp3E= X-Gm-Gg: ASbGncufqKLT/sOLI6rMeI//70WwB94P0JJsjLi2n4LphkCtztlVs28BlNNCpgAA4u0 erbBwHl5/96j4EHCgy+cj1HBD69XvmiLyu25pvnLlvtgGnccWEwtnV1V7WHAawBf+RnPvpj+1lo nsuOqTDqsOLTmgASrOUV9JW+o5crXWSp8neBXYiC0qv8hBIFXSn7Kn5uKq/OWI+eioyv3yMQlyb u4mK3U= X-Google-Smtp-Source: AGHT+IGfkaEX0Hhwu6ruGY1pJv8AvbW/3+MHWah4t8CDKnSYOdLFuFaz/2jZ8Gu1Ckg3GuWXKJk3V6Kl1okUpHbEajQ= X-Received: by 2002:a05:6214:2688:b0:6fa:8c15:75c1 with SMTP id 6a1803df08f44-7072051a1f7mr179637066d6.2.1753735973548; Mon, 28 Jul 2025 13:52:53 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jacob Champion Date: Mon, 28 Jul 2025 13:52:42 -0700 X-Gm-Features: Ac12FXwI2GJI-U_ua6fTk02hKdazWaqO0b5CzBYfHJWTqapQhI81Dqjym8jpnd4 Message-ID: Subject: Re: [PATCH] OAuth: fix performance bug with stuck multiplexer events To: PostgreSQL Hackers Cc: Daniel Gustafsson , Thomas Munro , Peter Eisentraut Content-Type: multipart/mixed; boundary="000000000000bbfad4063b037938" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bbfad4063b037938 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi all, On Thu, Jun 26, 2025 at 4:33=E2=80=AFPM Jacob Champion wrote: > My plan, if this code seems reasonable, is to backport 0001-0003, but > keep the larger 0004 on HEAD only until it has proven to be stable. > It's a big new suite and I want to make sure it's not flapping on some > buildfarm animal. Eventually I'll backport that too. Any thoughts on the approach? Too big/too scary/too BSD-specific? A small bit of self-review: a comment I wrote in the tests suggested that the choice of readable/writable events was up to the multiplexer implementation, but it *must* choose readable, due to the hardcoded use of PGRES_POLLING_READING throughout the current code. Updated in v2. Thanks, --Jacob --000000000000bbfad4063b037938 Content-Type: text/plain; charset="US-ASCII"; name="since-v1.diff.txt" Content-Disposition: attachment; filename="since-v1.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdnkvy6c0 MTogIGRkYjc4NzViYjU4ID0gMTogIDM3OWMxMmI1ZDI2IG9hdXRoOiBSZW1vdmUgc3RhbGUgZXZl bnRzIGZyb20gdGhlIGtxdWV1ZSBtdWx0aXBsZXhlcgoyOiAgYTg3MWNlNDk4ZWEgPSAyOiAgZjMw MzE3ZDcyNjUgb2F1dGg6IFJlbW92ZSBleHBpcmVkIHRpbWVycyBmcm9tIHRoZSBtdWx0aXBsZXhl cgozOiAgNTAzM2I2ZDUxYzEgPSAzOiAgZDI0M2QyODk2NGQgb2F1dGg6IFRyYWNrIHRvdGFsIGNh bGwgY291bnQgZHVyaW5nIGEgY2xpZW50IGZsb3cKNDogIGY0YTY0MGY3OTk1ICEgNDogIGNhNmZk MjM3NjUzIG9hdXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFuZGxpbmcKICAg IEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jIChuZXcpCiAg ICAgKyAqCiAgICAgKyAqIE5COiBvdXIgY3VycmVudCBtdWx0aXBsZXhlciBpbXBsZW1lbnRhdGlv bnMgKGVwb2xsL2txdWV1ZSkgYXJlICpyZWFkYWJsZSoKICAgICArICogd2hlbiB0aGUgdW5kZXJs eWluZyBsaWJjdXJsIHNvY2tldHMgYXJlICp3cml0YWJsZSouIFRoaXMgYmVoYXZpb3IgaXMgcGlu bmVkCiAgICAtKyAqIGhlcmUgdG8gcmVjb3JkIHRoYXQgZXhwZWN0YXRpb24sIGJ1dCBpdCdzIG5v dCBhIHJlcXVpcmVkIHBhcnQgb2YgdGhlIEFQSS4gSWYKICAgIC0rICogeW91J3ZlIGFkZGVkIGEg bmV3IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lc24ndCBoYXZlIHRoYXQgYmVoYXZpb3IsIGZlZWwg ZnJlZQogICAgLSsgKiB0byBtb2RpZnkgdGhpcyB0ZXN0LgogICAgKysgKiBoZXJlIHRvIHJlY29y ZCB0aGF0IGV4cGVjdGF0aW9uOyBQR1JFU19QT0xMSU5HX1JFQURJTkcgaXMgaGFyZGNvZGVkCiAg ICArKyAqIHRocm91Z2hvdXQgdGhlIGZsb3cgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2hhbmdlZCBp ZiBhIG5ldyBtdWx0aXBsZXhlciBkb2VzCiAgICArKyAqIHNvbWV0aGluZyBkaWZmZXJlbnQuCiAg ICAgKyAqLwogICAgICsjZGVmaW5lIG11eF9pc19yZWFkeShNVVgsIERFQURMSU5FLCBURVNUKSBc CiAgICAgKwlkbyB7IFwK --000000000000bbfad4063b037938 Content-Type: application/octet-stream; name="v2-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Disposition: attachment; filename="v2-0001-oauth-Remove-stale-events-from-the-kqueue-multipl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdnkw08a1 RnJvbSAzNzljMTJiNWQyNmM5M2VhZjEwNGJlZDEyOGY1OGE3YTk5YjFlMGI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxMCBKdW4gMjAyNSAxNjozODo1OSAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjIgMS80XSBvYXV0aDogUmVtb3ZlIHN0YWxlIGV2ZW50cyBmcm9tIHRoZSBrcXVl dWUgbXVsdGlwbGV4ZXIKCklmIGEgc29ja2V0IGlzIGFkZGVkIHRvIHRoZSBrcXVldWUsIGJlY29t ZXMgcmVhZGFibGUvd3JpdGFibGUsIGFuZApzdWJzZXF1ZW50bHkgYmVjb21lcyBub24tcmVhZGFi bGUvd3JpdGFibGUgYWdhaW4sIHRoZSBrcXVldWUgaXRzZWxmIHdpbGwKcmVtYWluIHJlYWRhYmxl IHVudGlsIGVpdGhlciB0aGUgc29ja2V0IHJlZ2lzdHJhdGlvbiBpcyByZW1vdmVkLCBvciB0aGUK c3RhbGUgZXZlbnQgaXMgY2xlYXJlZCB2aWEgYSBjYWxsIHRvIGtldmVudCgpLgoKSW4gbWFueSBz aW1wbGUgY2FzZXMsIEN1cmwgaXRzZWxmIHdpbGwgcmVtb3ZlIHRoZSBzb2NrZXQgcmVnaXN0cmF0 aW9uCnF1aWNrbHksIGJ1dCBpbiByZWFsLXdvcmxkIHVzYWdlLCB0aGlzIGlzIG5vdCBndWFyYW50 ZWVkIHRvIGhhcHBlbi4gVGhlCmtxdWV1ZSBjYW4gdGhlbiByZW1haW4gc3R1Y2sgaW4gYSBwZXJt YW5lbnRseSByZWFkYWJsZSBzdGF0ZSB1bnRpbCB0aGUKcmVxdWVzdCBlbmRzLCB3aGljaCByZXN1 bHRzIGluIHBvaW50bGVzcyB3YWtldXBzIGZvciB0aGUgY2xpZW50IGFuZAp3YXN0ZWQgQ1BVIHRp bWUuCgpJbXBsZW1lbnQgZHJhaW5fc29ja2V0X2V2ZW50cygpIHRvIGNhbGwga2V2ZW50KCkgYW5k IHVuc3RpY2sgYW55IHN0YWxlCmV2ZW50cy4gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgZHJp dmVfcmVxdWVzdCgpLCBiZWZvcmUgd2UgcmV0dXJuCmNvbnRyb2wgdG8gdGhlIGNsaWVudCB0byB3 YWl0LiBUbyBtYWtlIHN1cmUgd2UndmUgdGFrZW4gYSBsb29rIGF0IHRoZQplbnRpcmUgcXVldWUs IHJlZ2lzdGVyX3NvY2tldCgpIG5vdyB0cmFja3MgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZwpy ZWdpc3RyYXRpb25zLgoKU3VnZ2VzdGVkLWJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0Bn bWFpbC5jb20+Ci0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIHwg MjE4ICsrKysrKysrKysrKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2NiBpbnNlcnRp b25zKCspLCA1MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9vYXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1j dXJsLmMKaW5kZXggZGJhOWE2ODRmYTguLjg0MzAzNTZjZmI1IDEwMDY0NAotLS0gYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvb2F1dGgtY3VybC5jCkBAIC0yNzgsNiArMjc4LDEwIEBAIHN0cnVjdCBhc3luY19j dHgKIAlib29sCQl1c2VyX3Byb21wdGVkOwkvKiBoYXZlIHdlIGFscmVhZHkgc2VudCB0aGUgYXV0 aHogcHJvbXB0PyAqLwogCWJvb2wJCXVzZWRfYmFzaWNfYXV0aDsJLyogZGlkIHdlIHNlbmQgYSBj bGllbnQgc2VjcmV0PyAqLwogCWJvb2wJCWRlYnVnZ2luZzsJCS8qIGNhbiB3ZSBnaXZlIHVuc2Fm ZSBkZXZlbG9wZXIgYXNzaXN0YW5jZT8gKi8KKworI2lmIGRlZmluZWQoSEFWRV9TWVNfRVZFTlRf SCkKKwlpbnQJCQluZXZlbnRzOwkJLyogaG93IG1hbnkgZXZlbnRzIGFyZSB3ZSB3YWl0aW5nIG9u PyAqLworI2VuZGlmCiB9OwogCiAvKgpAQCAtMTI5MSw0MSArMTI5NSw5NSBAQCByZWdpc3Rlcl9z b2NrZXQoQ1VSTCAqY3VybCwgY3VybF9zb2NrZXRfdCBzb2NrZXQsIGludCB3aGF0LCB2b2lkICpj dHgsCiAKIAlyZXR1cm4gMDsKICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRVZFTlRfSCkKLQlzdHJ1 Y3Qga2V2ZW50IGV2WzJdID0gezB9OworCXN0cnVjdCBrZXZlbnQgZXZbMl07CiAJc3RydWN0IGtl dmVudCBldl9vdXRbMl07CiAJc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQgPSB7MH07Ci0JaW50CQkJ bmV2ID0gMDsKKwlpbnQJCQluZXY7CiAJaW50CQkJcmVzOwogCisJLyoKKwkgKiBGaXJzdCwgYW55 IGV4aXN0aW5nIHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgc29ja2V0IG5lZWQgdG8gYmUgcmVtb3Zl ZCwKKwkgKiBib3RoIHRvIHRyYWNrIHRoZSBvdXRzdGFuZGluZyBudW1iZXIgb2YgZXZlbnRzLCBh bmQgdG8gZW5zdXJlIHRoYXQKKwkgKiB3ZSdyZSBub3Qgd29rZW4gdXAgZm9yIHRoaW5ncyB0aGF0 IEN1cmwgbm8gbG9uZ2VyIGNhcmVzIGFib3V0LgorCSAqCisJICogRU5PRU5UIGlzIG9rYXksIGJ1 dCB3ZSBoYXZlIHRvIHRyYWNrIGhvdyBtYW55IHdlIGdldCwgc28gdXNlCisJICogRVZfUkVDRUlQ VC4KKwkgKi8KKwluZXYgPSAwOworCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfUkVB RCwgRVZfREVMRVRFIHwgRVZfUkVDRUlQVCwgMCwgMCwgMCk7CisJbmV2Kys7CisJRVZfU0VUKCZl dltuZXZdLCBzb2NrZXQsIEVWRklMVF9XUklURSwgRVZfREVMRVRFIHwgRVZfUkVDRUlQVCwgMCwg MCwgMCk7CisJbmV2Kys7CisKKwlBc3NlcnQobmV2IDw9IGxlbmd0aG9mKGV2KSk7CisJQXNzZXJ0 KG5ldiA8PSBsZW5ndGhvZihldl9vdXQpKTsKKworCXJlcyA9IGtldmVudChhY3R4LT5tdXgsIGV2 LCBuZXYsIGV2X291dCwgbmV2LCAmdGltZW91dCk7CisJaWYgKHJlcyA8IDApCisJeworCQlhY3R4 X2Vycm9yKGFjdHgsICJjb3VsZCBub3QgZGVsZXRlIGZyb20ga3F1ZXVlOiAlbSIpOworCQlyZXR1 cm4gLTE7CisJfQorCisJLyoKKwkgKiBXZSBjYW4ndCB1c2UgdGhlIHNpbXBsZSBlcnJubyB2ZXJz aW9uIG9mIGtldmVudCwgYmVjYXVzZSB3ZSBuZWVkIHRvCisJICogc2tpcCBvdmVyIEVOT0VOVCB3 aGlsZSBzdGlsbCBhbGxvd2luZyBhIHNlY29uZCBjaGFuZ2UgdG8gYmUgcHJvY2Vzc2VkLgorCSAq IFNvIHdlIG5lZWQgYSBsb25nZXItZm9ybSBlcnJvciBjaGVja2luZyBsb29wLgorCSAqLworCWZv ciAoaW50IGkgPSAwOyBpIDwgcmVzOyArK2kpCisJeworCQkvKgorCQkgKiBFVl9SRUNFSVBUIHNo b3VsZCBndWFyYW50ZWUgb25lIEVWX0VSUk9SIHJlc3VsdCBmb3IgZXZlcnkgY2hhbmdlLAorCQkg KiB3aGV0aGVyIHN1Y2Nlc3NmdWwgb3Igbm90LiBGYWlsZWQgZW50cmllcyBjb250YWluIGEgbm9u LXplcm8gZXJybm8KKwkJICogaW4gdGhlIGRhdGEgZmllbGQuCisJCSAqLworCQlBc3NlcnQoZXZf b3V0W2ldLmZsYWdzICYgRVZfRVJST1IpOworCisJCWVycm5vID0gZXZfb3V0W2ldLmRhdGE7CisJ CWlmICghZXJybm8pCisJCXsKKwkJCS8qIFN1Y2Nlc3NmdWxseSByZW1vdmVkOyB1cGRhdGUgdGhl IGV2ZW50IGNvdW50LiAqLworCQkJQXNzZXJ0KGFjdHgtPm5ldmVudHMgPiAwKTsKKwkJCWFjdHgt Pm5ldmVudHMtLTsKKwkJfQorCQllbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpCisJCXsKKwkJCWFj dHhfZXJyb3IoYWN0eCwgImNvdWxkIG5vdCBkZWxldGUgZnJvbSBrcXVldWU6ICVtIik7CisJCQly ZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBJZiB3ZSdyZSBvbmx5IHJlbW92aW5nIHJlZ2lzdHJh dGlvbnMsIHdlJ3JlIGRvbmUuICovCisJaWYgKHdoYXQgPT0gQ1VSTF9QT0xMX1JFTU9WRSkKKwkJ cmV0dXJuIDA7CisKKwkvKgorCSAqIE5vdyBhZGQgdGhlIG5ldyBmaWx0ZXJzLiBUaGlzIGlzIG1v cmUgc3RyYWlnaHRmb3dhcmQgdGhhbiBkZWxldGlvbi4KKwkgKgorCSAqIENvbWJpbmluZyB0aGlz IGtldmVudCgpIGNhbGwgd2l0aCB0aGUgb25lIGFib3ZlIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJl CisJICogdGhlb3JldGljYWxseSBwb3NzaWJsZSwgYnV0IGJld2FyZSB0aGF0IG5vdCBhbGwgQlNE cyBrZWVwIHRoZSBvcmlnaW5hbAorCSAqIGV2ZW50IGZsYWdzIHdoZW4gdXNpbmcgRVZfUkVDRUlQ VCwgc28gaXQncyB0cmlja3kgdG8gZmlndXJlIG91dCB3aGljaAorCSAqIG9wZXJhdGlvbnMgc3Vj Y2VlZGVkLiBGb3Igbm93IHdlIGtlZXAgdGhlIGRlbGV0aW9ucyBhbmQgdGhlIGFkZGl0aW9ucwor CSAqIHNlcGFyYXRlLgorCSAqLworCW5ldiA9IDA7CisKIAlzd2l0Y2ggKHdoYXQpCiAJewogCQlj YXNlIENVUkxfUE9MTF9JTjoKLQkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfUkVB RCwgRVZfQUREIHwgRVZfUkVDRUlQVCwgMCwgMCwgMCk7CisJCQlFVl9TRVQoJmV2W25ldl0sIHNv Y2tldCwgRVZGSUxUX1JFQUQsIEVWX0FERCwgMCwgMCwgMCk7CiAJCQluZXYrKzsKIAkJCWJyZWFr OwogCiAJCWNhc2UgQ1VSTF9QT0xMX09VVDoKLQkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBF VkZJTFRfV1JJVEUsIEVWX0FERCB8IEVWX1JFQ0VJUFQsIDAsIDAsIDApOworCQkJRVZfU0VUKCZl dltuZXZdLCBzb2NrZXQsIEVWRklMVF9XUklURSwgRVZfQURELCAwLCAwLCAwKTsKIAkJCW5ldisr OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBDVVJMX1BPTExfSU5PVVQ6Ci0JCQlFVl9TRVQoJmV2W25l dl0sIHNvY2tldCwgRVZGSUxUX1JFQUQsIEVWX0FERCB8IEVWX1JFQ0VJUFQsIDAsIDAsIDApOwot CQkJbmV2Kys7Ci0JCQlFVl9TRVQoJmV2W25ldl0sIHNvY2tldCwgRVZGSUxUX1dSSVRFLCBFVl9B REQgfCBFVl9SRUNFSVBULCAwLCAwLCAwKTsKLQkJCW5ldisrOwotCQkJYnJlYWs7Ci0KLQkJY2Fz ZSBDVVJMX1BPTExfUkVNT1ZFOgotCi0JCQkvKgotCQkJICogV2UgZG9uJ3Qga25vdyB3aGljaCBv ZiB0aGVzZSBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCwgcGVyaGFwcwotCQkJICogYm90aCwgc28g d2UgdHJ5IHRvIHJlbW92ZSBib3RoLiAgVGhpcyBtZWFucyB3ZSBuZWVkIHRvIHRvbGVyYXRlCi0J CQkgKiBFTk9FTlQgYmVsb3cuCi0JCQkgKi8KLQkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBF VkZJTFRfUkVBRCwgRVZfREVMRVRFIHwgRVZfUkVDRUlQVCwgMCwgMCwgMCk7CisJCQlFVl9TRVQo JmV2W25ldl0sIHNvY2tldCwgRVZGSUxUX1JFQUQsIEVWX0FERCwgMCwgMCwgMCk7CiAJCQluZXYr KzsKLQkJCUVWX1NFVCgmZXZbbmV2XSwgc29ja2V0LCBFVkZJTFRfV1JJVEUsIEVWX0RFTEVURSB8 IEVWX1JFQ0VJUFQsIDAsIDAsIDApOworCQkJRVZfU0VUKCZldltuZXZdLCBzb2NrZXQsIEVWRklM VF9XUklURSwgRVZfQURELCAwLCAwLCAwKTsKIAkJCW5ldisrOwogCQkJYnJlYWs7CiAKQEAgLTEz MzQsNDUgKzEzOTIsOTEgQEAgcmVnaXN0ZXJfc29ja2V0KENVUkwgKmN1cmwsIGN1cmxfc29ja2V0 X3Qgc29ja2V0LCBpbnQgd2hhdCwgdm9pZCAqY3R4LAogCQkJcmV0dXJuIC0xOwogCX0KIAotCXJl cyA9IGtldmVudChhY3R4LT5tdXgsIGV2LCBuZXYsIGV2X291dCwgbGVuZ3Rob2YoZXZfb3V0KSwg JnRpbWVvdXQpOworCUFzc2VydChuZXYgPD0gbGVuZ3Rob2YoZXYpKTsKKworCXJlcyA9IGtldmVu dChhY3R4LT5tdXgsIGV2LCBuZXYsIE5VTEwsIDAsIE5VTEwpOwogCWlmIChyZXMgPCAwKQogCXsK IAkJYWN0eF9lcnJvcihhY3R4LCAiY291bGQgbm90IG1vZGlmeSBrcXVldWU6ICVtIik7CiAJCXJl dHVybiAtMTsKIAl9CiAKKwkvKiBVcGRhdGUgdGhlIGV2ZW50IGNvdW50LCBhbmQgd2UncmUgZG9u ZS4gKi8KKwlhY3R4LT5uZXZlbnRzICs9IG5ldjsKKworCXJldHVybiAwOworI2Vsc2UKKyNlcnJv ciByZWdpc3Rlcl9zb2NrZXQgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNl bmRpZgorfQorCisvKi0tLS0tLS0KKyAqIERyYWlucyBhbnkgc3RhbGUgbGV2ZWwtdHJpZ2dlcmVk IGV2ZW50cyBvdXQgb2YgdGhlIG11bHRpcGxleGVyLiBUaGlzIGlzCisgKiBuZWNlc3Nhcnkgb25s eSBpZiB0aGUgbXV4IGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIGl0LgorICoKKyAqIEFzIGFuIGV4 YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgZXZlbnRzOgorICogMS4g bGliY3VybCB0cmllcyB0byB3cml0ZSBkYXRhIHRvIHRoZSBzZW5kIGJ1ZmZlciwgYnV0IGl0IGZp bGxzIHVwLgorICogMi4gbGliY3VybCByZWdpc3RlcnMgQ1VSTF9QT0xMX09VVCBvbiB0aGUgc29j a2V0IGFuZCByZXR1cm5zIGNvbnRyb2wgdG8gdGhlCisgKiAgICBjbGllbnQgdG8gd2FpdC4KKyAq IDMuIFRoZSBrZXJuZWwgcGFydGlhbGx5IGRyYWlucyB0aGUgc2VuZCBidWZmZXIuIFRoZSBzb2Nr ZXQgYmVjb21lcyB3cml0YWJsZSwKKyAqICAgIGFuZCB0aGUgY2xpZW50IHdha2VzIHVwIGFuZCBj YWxscyBiYWNrIGludG8gdGhlIGZsb3cuCisgKiA0LiBsaWJjdXJsIGNvbnRpbnVlcyB3cml0aW5n IGRhdGEgdG8gdGhlIHNlbmQgYnVmZmVyLCBidXQgaXQgZmlsbHMgdXAgYWdhaW4uCisgKiAgICBU aGUgc29ja2V0IGlzIG5vIGxvbmdlciB3cml0YWJsZS4KKyAqCisgKiBBdCB0aGlzIHBvaW50LCBh biBlcG9sbC1iYXNlZCBtdXggbm8gbG9uZ2VyIHNpZ25hbHMgcmVhZGluZXNzLCBzbyBub3RoaW5n CisgKiBmdXJ0aGVyIG5lZWRzIHRvIGJlIGRvbmUuIEJ1dCBhIGtxdWV1ZS1iYXNlZCBtdXggd2ls bCBjb250aW51ZSB0byBzaWduYWwKKyAqICJyZWFkeSIgdW50aWwgZWl0aGVyIHRoZSBFVkZJTFRf V1JJVEUgcmVnaXN0cmF0aW9uIGlzIGRyb3BwZWQgZm9yIHRoZSBzb2NrZXQsCisgKiBvciB0aGUg b2xkIHNvY2tldC13cml0YWJsZSBldmVudCBpcyByZWFkIGZyb20gdGhlIHF1ZXVlLiBTaW5jZSBD dXJsIGlzbid0CisgKiBndWFyYW50ZWVkIHRvIGRvIHRoZSBmb3JtZXIsIHdlIG11c3QgZG8gdGhl IGxhdHRlciBoZXJlLgorICovCitzdGF0aWMgYm9vbAorZHJhaW5fc29ja2V0X2V2ZW50cyhzdHJ1 Y3QgYXN5bmNfY3R4ICphY3R4KQoreworI2lmIGRlZmluZWQoSEFWRV9TWVNfRVBPTExfSCkKKwkv KiBUaGUgZXBvbGwgaW1wbGVtZW50YXRpb24gZG9lc24ndCBuZWVkIHRvIGRyYWluIHBlbmRpbmcg ZXZlbnRzLiAqLworCXJldHVybiB0cnVlOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FVkVOVF9I KQorCXN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0ID0gezB9OworCXN0cnVjdCBrZXZlbnQgKmRyYWlu OworCWludAkJCWRyYWluX2xlbjsKKwogCS8qCi0JICogV2UgY2FuJ3QgdXNlIHRoZSBzaW1wbGUg ZXJybm8gdmVyc2lvbiBvZiBrZXZlbnQsIGJlY2F1c2Ugd2UgbmVlZCB0bwotCSAqIHNraXAgb3Zl ciBFTk9FTlQgd2hpbGUgc3RpbGwgYWxsb3dpbmcgYSBzZWNvbmQgY2hhbmdlIHRvIGJlIHByb2Nl c3NlZC4KLQkgKiBTbyB3ZSBuZWVkIGEgbG9uZ2VyLWZvcm0gZXJyb3IgY2hlY2tpbmcgbG9vcC4K KwkgKiBEcmFpbiB0aGUgZXZlbnRzIGluIG9uZSBjYWxsLCByYXRoZXIgdGhhbiBsb29waW5nLiAo V2UgY291bGQgbWF5YmUgY2FsbAorCSAqIGtldmVudCgpIGRyYWluX2xlbiB0aW1lcywgaW5zdGVh ZCBvZiBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGUgbWF4aW11bQorCSAqIG51bWJlciBvZiBldmVu dHMsIGJ1dCB0aGF0IHJlbGllcyBvbiB0aGUgZXZlbnRzIGJlaW5nIGluIEZJRk8gb3JkZXIgdG8K KwkgKiBhdm9pZCBzdGFydmF0aW9uLiBUaGUga3F1ZXVlIG1hbiBwYWdlcyBkb24ndCBzZWVtIHRv IG1ha2UgYW55CisJICogZ3VhcmFudGVlcyBhYm91dCB0aGF0LikKKwkgKgorCSAqIHJlZ2lzdGVy X3NvY2tldCgpIGtlZXBzIGFjdHgtPm5ldmVudHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YK KwkgKiBvdXRzdGFuZGluZyBldmVudCBmaWx0ZXJzLiBXZSBkb24ndCB0cmFjayB0aGUgcmVnaXN0 cmF0aW9uIG9mIHRoZQorCSAqIHRpbWVyOyB3ZSBqdXN0IGFzc3VtZSBvbmUgY291bGQgYmUgcmVn aXN0ZXJlZCBoZXJlLgogCSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzOyArK2kpCisJZHJh aW5fbGVuID0gYWN0eC0+bmV2ZW50cyArIDE7CisKKwlkcmFpbiA9IG1hbGxvYyhzaXplb2YoKmRy YWluKSAqIGRyYWluX2xlbik7CisJaWYgKCFkcmFpbikKIAl7Ci0JCS8qCi0JCSAqIEVWX1JFQ0VJ UFQgc2hvdWxkIGd1YXJhbnRlZSBvbmUgRVZfRVJST1IgcmVzdWx0IGZvciBldmVyeSBjaGFuZ2Us Ci0JCSAqIHdoZXRoZXIgc3VjY2Vzc2Z1bCBvciBub3QuIEZhaWxlZCBlbnRyaWVzIGNvbnRhaW4g YSBub24temVybyBlcnJubwotCQkgKiBpbiB0aGUgZGF0YSBmaWVsZC4KLQkJICovCi0JCUFzc2Vy dChldl9vdXRbaV0uZmxhZ3MgJiBFVl9FUlJPUik7CisJCWFjdHhfZXJyb3IoYWN0eCwgIm91dCBv ZiBtZW1vcnkiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotCQllcnJubyA9IGV2X291dFtpXS5k YXRhOwotCQlpZiAoZXJybm8gJiYgZXJybm8gIT0gRU5PRU5UKQotCQl7Ci0JCQlzd2l0Y2ggKHdo YXQpCi0JCQl7Ci0JCQkJY2FzZSBDVVJMX1BPTExfUkVNT1ZFOgotCQkJCQlhY3R4X2Vycm9yKGFj dHgsICJjb3VsZCBub3QgZGVsZXRlIGZyb20ga3F1ZXVlOiAlbSIpOwotCQkJCQlicmVhazsKLQkJ CQlkZWZhdWx0OgotCQkJCQlhY3R4X2Vycm9yKGFjdHgsICJjb3VsZCBub3QgYWRkIHRvIGtxdWV1 ZTogJW0iKTsKLQkJCX0KLQkJCXJldHVybiAtMTsKLQkJfQorCS8qCisJICogRGlzY2FyZCBhbGwg cGVuZGluZyBldmVudHMuIFNpbmNlIG91ciByZWdpc3RyYXRpb25zIGFyZSBsZXZlbC10cmlnZ2Vy ZWQKKwkgKiAoZXZlbiB0aGUgdGltZXIsIHNpbmNlIHdlIHVzZSBhIGNoYWluZWQga3F1ZXVlIGZv ciB0aGF0IGluc3RlYWQgb2YgYW4KKwkgKiBFVkZJTFRfVElNRVIgb24gdGhlIHRvcC1sZXZlbCBt dXghKSwgYW55IGV2ZW50cyB0aGF0IHdlIHN0aWxsIG5lZWQgd2lsbAorCSAqIHJlbWFpbiBzaWdu YWxsZWQsIGFuZCB0aGUgc3RhbGUgb25lcyB3aWxsIGJlIHN3ZXB0IGF3YXkuCisJICovCisJaWYg KGtldmVudChhY3R4LT5tdXgsIE5VTEwsIDAsIGRyYWluLCBkcmFpbl9sZW4sICZ0aW1lb3V0KSA8 IDApCisJeworCQlhY3R4X2Vycm9yKGFjdHgsICJjb3VsZCBub3QgZHJhaW4ga3F1ZXVlOiAlbSIp OworCQlmcmVlKGRyYWluKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVybiAwOworCWZy ZWUoZHJhaW4pOworCXJldHVybiB0cnVlOwogI2Vsc2UKLSNlcnJvciByZWdpc3Rlcl9zb2NrZXQg aXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0KKyNlcnJvciBkcmFpbl9zb2NrZXRf ZXZlbnRzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtCiAjZW5kaWYKIH0KIApA QCAtMTQ0MSw3ICsxNTQ1LDggQEAgc2V0X3RpbWVyKHN0cnVjdCBhc3luY19jdHggKmFjdHgsIGxv bmcgdGltZW91dCkKIAkgKiBtYWNPUy4pCiAJICoKIAkgKiBJZiB0aGVyZSB3YXMgbm8gcHJldmlv dXMgdGltZXIgc2V0LCB0aGUga2V2ZW50IGNhbGxzIHdpbGwgcmVzdWx0IGluCi0JICogRU5PRU5U LCB3aGljaCBpcyBmaW5lLgorCSAqIEVOT0VOVCwgd2hpY2ggaXMgZmluZS4gKFdlIGRvbid0IHRy YWNrIGFjdHgtPm5ldmVudHMgZm9yIHRoaXMgY2FzZTsKKwkgKiBpbnN0ZWFkLCBkcmFpbl9zb2Nr ZXRfZXZlbnRzKCkganVzdCBhc3N1bWVzIGEgdGltZXIgY291bGQgYmUgc2V0LikKIAkgKi8KIAlF Vl9TRVQoJmV2LCAxLCBFVkZJTFRfVElNRVIsIEVWX0RFTEVURSwgMCwgMCwgMCk7CiAJaWYgKGtl dmVudChhY3R4LT50aW1lcmZkLCAmZXYsIDEsIE5VTEwsIDAsIE5VTEwpIDwgMCAmJiBlcnJubyAh PSBFTk9FTlQpCkBAIC0yNzU1LDEzICsyODYwLDIyIEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93X2lt cGwoUEdjb25uICpjb25uKQogCiAJCQkJCWlmIChzdGF0dXMgPT0gUEdSRVNfUE9MTElOR19GQUlM RUQpCiAJCQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCQkJZWxzZSBpZiAoc3RhdHVzICE9IFBH UkVTX1BPTExJTkdfT0spCi0JCQkJCXsKLQkJCQkJCS8qIG5vdCBkb25lIHlldCAqLwotCQkJCQkJ cmV0dXJuIHN0YXR1czsKLQkJCQkJfQorCQkJCQllbHNlIGlmIChzdGF0dXMgPT0gUEdSRVNfUE9M TElOR19PSykKKwkJCQkJCWJyZWFrOwkvKiBkb25lISAqLworCisJCQkJCS8qCisJCQkJCSAqIFRo aXMgcmVxdWVzdCBpcyBzdGlsbCBydW5uaW5nLgorCQkJCQkgKgorCQkJCQkgKiBEcmFpbiBhbnkg c3RhbGUgc29ja2V0IGV2ZW50cyBmcm9tIHRoZSBtdXggYmVmb3JlIHdlCisJCQkJCSAqIGFzayB0 aGUgY2xpZW50IHRvIHBvbGwuIChDdXJyZW50bHksIHRoaXMgY2FuIG9jY3VyIG9ubHkKKwkJCQkJ ICogd2l0aCBrcXVldWUuKSBJZiB0aGlzIGlzIGZvcmdvdHRlbiwgdGhlIG11bHRpcGxleGVyIGNh bgorCQkJCQkgKiBnZXQgc3R1Y2sgaW4gYSBzaWduYWxsZWQgc3RhdGUgYW5kIHdlJ2xsIGJ1cm4g Q1BVCisJCQkJCSAqIGN5Y2xlcyBwb2ludGxlc3NseS4KKwkJCQkJICovCisJCQkJCWlmICghZHJh aW5fc29ja2V0X2V2ZW50cyhhY3R4KSkKKwkJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCi0JCQkJ CWJyZWFrOworCQkJCQlyZXR1cm4gc3RhdHVzOwogCQkJCX0KIAogCQkJY2FzZSBPQVVUSF9TVEVQ X1dBSVRfSU5URVJWQUw6Ci0tIAoyLjM0LjEKCg== --000000000000bbfad4063b037938 Content-Type: application/octet-stream; name="v2-0002-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Disposition: attachment; filename="v2-0002-oauth-Remove-expired-timers-from-the-multiplexer.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdnkw20p2 RnJvbSBmMzAzMTdkNzI2NWJmNDYzYjBjMGY2YzNiOTIwOTdlMDIxNzYxYzk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDEzOjE2OjQ4IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MiAyLzRdIG9hdXRoOiBSZW1vdmUgZXhwaXJlZCB0aW1lcnMgZnJvbSB0aGUgbXVs dGlwbGV4ZXIKCkluIGEgY2FzZSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBjb21taXQsIGFuIGV4 cGlyZWQgdGltZXIgY2FuIHJlbWFpbgpwZXJtYW5lbnRseSByZWFkYWJsZSBpZiBDdXJsIGRvZXMg bm90IHJlbW92ZSB0aGUgdGltZW91dCBpdHNlbGYuIFNpbmNlCnRoYXQgcmVtb3ZhbCBpc24ndCBn dWFyYW50ZWVkIHRvIGhhcHBlbiBpbiByZWFsLXdvcmxkIHNpdHVhdGlvbnMsCmltcGxlbWVudCBk cmFpbl90aW1lcl9ldmVudHMoKSB0byByZXNldCB0aGUgdGltZXIgYmVmb3JlIGNhbGxpbmcgaW50 bwpkcml2ZV9yZXF1ZXN0KCkuCgpNb3ZpbmcgdG8gZHJhaW5fdGltZXJfZXZlbnRzKCkgaGFwcGVu cyB0byBmaXggYSBsb2dpYyBidWcgaW4gdGhlCnByZXZpb3VzIGNhbGxlciBvZiB0aW1lcl9leHBp cmVkKCksIHdoaWNoIHRyZWF0ZWQgYW4gZXJyb3IgY29uZGl0aW9uIGFzCmlmIHRoZSB0aW1lciB3 ZXJlIGV4cGlyZWQgaW5zdGVhZCBvZiBiYWlsaW5nIG91dC4KClRoZSBwcmV2aW91cyBpbXBsZW1l bnRhdGlvbiBvZiB0aW1lcl9leHBpcmVkKCkgZ2F2ZSBkaWZmZXJpbmcgcmVzdWx0cwpmb3IgZXBv bGwgYW5kIGtxdWV1ZSBpZiB0aGUgdGltZXIgd2FzIHJlc2V0LiAoRm9yIGVwb2xsLCBhIHJlc2V0 IHRpbWVyCndhcyBjb25zaWRlcmVkIHRvIGJlIGV4cGlyZWQsIGFuZCBmb3Iga3F1ZXVlIGl0IHdh cyBub3QuKSBUaGlzIGRpZG4ndApwcmV2aW91c2x5IGNhdXNlIHByb2JsZW1zLCBzaW5jZSB0aW1l cl9leHBpcmVkKCkgd2FzIG9ubHkgY2FsbGVkIHdoaWxlCnRoZSB0aW1lciB3YXMga25vd24gdG8g YmUgc2V0LCBidXQgYm90aCBpbXBsZW1lbnRhdGlvbnMgbm93IHVzZSB0aGUKa3F1ZXVlIGxvZ2lj LgotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYyB8IDEwOCArKysr KysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCA0 MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9v YXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKaW5k ZXggODQzMDM1NmNmYjUuLjc4YmEzMzk5NDk1IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgv b2F1dGgtY3VybC5jCkBAIC0xNTg4LDQwICsxNTg4LDIwIEBAIHNldF90aW1lcihzdHJ1Y3QgYXN5 bmNfY3R4ICphY3R4LCBsb25nIHRpbWVvdXQpCiAKIC8qCiAgKiBSZXR1cm5zIDEgaWYgdGhlIHRp bWVvdXQgaW4gdGhlIG11bHRpcGxleGVyIHNldCBoYXMgZXhwaXJlZCBzaW5jZSB0aGUgbGFzdAot ICogY2FsbCB0byBzZXRfdGltZXIoKSwgMCBpZiB0aGUgdGltZXIgaXMgc3RpbGwgcnVubmluZywg b3IgLTEgKHdpdGggYW4KLSAqIGFjdHhfZXJyb3IoKSByZXBvcnQpIGlmIHRoZSB0aW1lciBjYW5u b3QgYmUgcXVlcmllZC4KKyAqIGNhbGwgdG8gc2V0X3RpbWVyKCksIDAgaWYgdGhlIHRpbWVyIGlz IGVpdGhlciBzdGlsbCBydW5uaW5nIG9yIGRpc2FybWVkLCBvcgorICogLTEgKHdpdGggYW4gYWN0 eF9lcnJvcigpIHJlcG9ydCkgaWYgdGhlIHRpbWVyIGNhbm5vdCBiZSBxdWVyaWVkLgogICovCiBz dGF0aWMgaW50CiB0aW1lcl9leHBpcmVkKHN0cnVjdCBhc3luY19jdHggKmFjdHgpCiB7Ci0jaWYg ZGVmaW5lZChIQVZFX1NZU19FUE9MTF9IKQotCXN0cnVjdCBpdGltZXJzcGVjIHNwZWMgPSB7MH07 Ci0KLQlpZiAodGltZXJmZF9nZXR0aW1lKGFjdHgtPnRpbWVyZmQsICZzcGVjKSA8IDApCi0Jewot CQlhY3R4X2Vycm9yKGFjdHgsICJnZXR0aW5nIHRpbWVyZmQgdmFsdWU6ICVtIik7Ci0JCXJldHVy biAtMTsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB3ZSdyZSB1 c2luZyBzaW5nbGUtc2hvdCB0aW1lcnMuIElmIHlvdQotCSAqIGNoYW5nZSB0byB1c2luZyBpbnRl cnZhbHMsIHlvdSdsbCBuZWVkIHRvIHJlaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24KLQkgKiB0b28s IHBvc3NpYmx5IHdpdGggdGhlIHJlYWQoKSBvciBzZWxlY3QoKSBpbnRlcmZhY2VzIGZvciB0aW1l cmZkLgotCSAqLwotCUFzc2VydChzcGVjLml0X2ludGVydmFsLnR2X3NlYyA9PSAwCi0JCSAgICYm IHNwZWMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9PSAwKTsKLQotCS8qIElmIHRoZSByZW1haW5pbmcg dGltZSB0byBleHBpcmF0aW9uIGlzIHplcm8sIHdlJ3JlIGRvbmUuICovCi0JcmV0dXJuIChzcGVj Lml0X3ZhbHVlLnR2X3NlYyA9PSAwCi0JCQkmJiBzcGVjLml0X3ZhbHVlLnR2X25zZWMgPT0gMCk7 Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VWRU5UX0gpCisjaWYgZGVmaW5lZChIQVZFX1NZU19F UE9MTF9IKSB8fCBkZWZpbmVkKEhBVkVfU1lTX0VWRU5UX0gpCiAJaW50CQkJcmVzOwogCi0JLyog SXMgdGhlIHRpbWVyIHF1ZXVlIHJlYWR5PyAqLworCS8qIElzIHRoZSB0aW1lciByZWFkeT8gKi8K IAlyZXMgPSBQUXNvY2tldFBvbGwoYWN0eC0+dGltZXJmZCwgMSAvKiBmb3JSZWFkICovICwgMCwg MCk7CiAJaWYgKHJlcyA8IDApCiAJewotCQlhY3R4X2Vycm9yKGFjdHgsICJjaGVja2luZyBrcXVl dWUgZm9yIHRpbWVvdXQ6ICVtIik7CisJCWFjdHhfZXJyb3IoYWN0eCwgImNoZWNraW5nIHRpbWVy IGV4cGlyYXRpb246ICVtIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE2NTMsNiArMTYzMywz NiBAQCByZWdpc3Rlcl90aW1lcihDVVJMTSAqY3VybG0sIGxvbmcgdGltZW91dCwgdm9pZCAqY3R4 KQogCXJldHVybiAwOwogfQogCisvKgorICogUmVtb3ZlcyBhbnkgZXhwaXJlZC10aW1lciBldmVu dCBmcm9tIHRoZSBtdWx0aXBsZXhlci4gSWYgd2FzX2V4cGlyZWQgaXMgbm90CisgKiBOVUxMLCBp dCB3aWxsIGNvbnRhaW4gd2hldGhlciBvciBub3QgdGhlIHRpbWVyIHdhcyBleHBpcmVkIGF0IHRp bWUgb2YgY2FsbC4KKyAqLworc3RhdGljIGJvb2wKK2RyYWluX3RpbWVyX2V2ZW50cyhzdHJ1Y3Qg YXN5bmNfY3R4ICphY3R4LCBib29sICp3YXNfZXhwaXJlZCkKK3sKKwlpbnQJCQlyZXM7CisKKwly ZXMgPSB0aW1lcl9leHBpcmVkKGFjdHgpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAocmVzID4gMCkKKwl7CisJCS8qCisJCSAqIFRpbWVyIGlzIGV4cGlyZWQuIFdlIGNv dWxkIGRyYWluIHRoZSBldmVudCBtYW51YWxseSBmcm9tIHRoZQorCQkgKiB0aW1lcmZkLCBidXQg aXQncyBlYXNpZXIgdG8gc2ltcGx5IGRpc2FibGUgaXQ7IHRoYXQga2VlcHMgdGhlCisJCSAqIHBs YXRmb3JtLXNwZWNpZmljIGNvZGUgaW4gc2V0X3RpbWVyKCkuCisJCSAqLworCQlpZiAoIXNldF90 aW1lcihhY3R4LCAtMSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHdhc19leHBpcmVk KQorCQkqd2FzX2V4cGlyZWQgPSAocmVzID4gMCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoK ICAqIFByaW50cyBDdXJsIHJlcXVlc3QgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIHN0ZGVyci4K ICAqCkBAIC0yODU2LDYgKzI4NjYsMjIgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nv bm4gKmNvbm4pCiAJCQkJewogCQkJCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHN0YXR1czsK IAorCQkJCQkvKgorCQkJCQkgKiBDbGVhciBhbnkgZXhwaXJlZCB0aW1lb3V0IGJlZm9yZSBjYWxs aW5nIGJhY2sgaW50bworCQkJCQkgKiBDdXJsLiBDdXJsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGRv IHRoaXMgZm9yIHVzLCBiZWNhdXNlCisJCQkJCSAqIGl0cyBBUEkgZXhwZWN0cyB1cyB0byB1c2Ug c2luZ2xlLXNob3QgKGkuZS4KKwkJCQkJICogZWRnZS10cmlnZ2VyZWQpIHRpbWVvdXRzLCBhbmQg b3VycyBhcmUgbGV2ZWwtdHJpZ2dlcmVkCisJCQkJCSAqIHZpYSB0aGUgbXV4LgorCQkJCQkgKgor CQkJCQkgKiBUaGlzIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggdGhlIGRyYWluX3NvY2tldF9ldmVu dHMoKQorCQkJCQkgKiBjYWxsIGJlbG93OiB3ZSBtaWdodCBhY2NpZGVudGFsbHkgY2xlYXIgYSBz aG9ydCB0aW1lb3V0CisJCQkJCSAqIHRoYXQgd2FzIGJvdGggc2V0IGFuZCBleHBpcmVkIGR1cmlu ZyB0aGUgY2FsbCB0bworCQkJCQkgKiBkcml2ZV9yZXF1ZXN0KCkuCisJCQkJCSAqLworCQkJCQlp ZiAoIWRyYWluX3RpbWVyX2V2ZW50cyhhY3R4LCBOVUxMKSkKKwkJCQkJCWdvdG8gZXJyb3JfcmV0 dXJuOworCisJCQkJCS8qIE1vdmUgdGhlIHJlcXVlc3QgZm9yd2FyZC4gKi8KIAkJCQkJc3RhdHVz ID0gZHJpdmVfcmVxdWVzdChhY3R4KTsKIAogCQkJCQlpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJ TkdfRkFJTEVEKQpAQCAtMjg3OSwyNCArMjkwNSwyNiBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvd19p bXBsKFBHY29ubiAqY29ubikKIAkJCQl9CiAKIAkJCWNhc2UgT0FVVEhfU1RFUF9XQUlUX0lOVEVS VkFMOgotCi0JCQkJLyoKLQkJCQkgKiBUaGUgY2xpZW50IGFwcGxpY2F0aW9uIGlzIHN1cHBvc2Vk IHRvIHdhaXQgdW50aWwgb3VyIHRpbWVyCi0JCQkJICogZXhwaXJlcyBiZWZvcmUgY2FsbGluZyBQ UWNvbm5lY3RQb2xsKCkgYWdhaW4sIGJ1dCB0aGF0Ci0JCQkJICogbWlnaHQgbm90IGhhcHBlbi4g VG8gYXZvaWQgc2VuZGluZyBhIHRva2VuIHJlcXVlc3QgZWFybHksCi0JCQkJICogY2hlY2sgdGhl IHRpbWVyIGJlZm9yZSBjb250aW51aW5nLgotCQkJCSAqLwotCQkJCWlmICghdGltZXJfZXhwaXJl ZChhY3R4KSkKIAkJCQl7Ci0JCQkJCXNldF9jb25uX2FsdHNvY2soY29ubiwgYWN0eC0+dGltZXJm ZCk7Ci0JCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJTkc7Ci0JCQkJfQorCQkJCQlib29s CQlleHBpcmVkOwogCi0JCQkJLyogRGlzYWJsZSB0aGUgZXhwaXJlZCB0aW1lci4gKi8KLQkJCQlp ZiAoIXNldF90aW1lcihhY3R4LCAtMSkpCi0JCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCQkv KgorCQkJCQkgKiBUaGUgY2xpZW50IGFwcGxpY2F0aW9uIGlzIHN1cHBvc2VkIHRvIHdhaXQgdW50 aWwgb3VyCisJCQkJCSAqIHRpbWVyIGV4cGlyZXMgYmVmb3JlIGNhbGxpbmcgUFFjb25uZWN0UG9s bCgpIGFnYWluLCBidXQKKwkJCQkJICogdGhhdCBtaWdodCBub3QgaGFwcGVuLiBUbyBhdm9pZCBz ZW5kaW5nIGEgdG9rZW4gcmVxdWVzdAorCQkJCQkgKiBlYXJseSwgY2hlY2sgdGhlIHRpbWVyIGJl Zm9yZSBjb250aW51aW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFkcmFpbl90aW1lcl9ldmVudHMo YWN0eCwgJmV4cGlyZWQpKQorCQkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAKLQkJCQlicmVhazsK KwkJCQkJaWYgKCFleHBpcmVkKQorCQkJCQl7CisJCQkJCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4s IGFjdHgtPnRpbWVyZmQpOworCQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKKwkJ CQkJfQorCisJCQkJCWJyZWFrOworCQkJCX0KIAkJfQogCiAJCS8qCi0tIAoyLjM0LjEKCg== --000000000000bbfad4063b037938 Content-Type: application/octet-stream; name="v2-0003-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Disposition: attachment; filename="v2-0003-oauth-Track-total-call-count-during-a-client-flow.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdnkw4ao3 RnJvbSBkMjQzZDI4OTY0ZGQ3YWZiMjhhYmZhZjQ3MGRjNzYxMmU3MjM1Y2I5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCA2IEp1biAyMDI1IDE1OjIyOjQxIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MiAzLzRdIG9hdXRoOiBUcmFjayB0b3RhbCBjYWxsIGNvdW50IGR1cmluZyBhIGNs aWVudCBmbG93CgpUcmFja2luZyBkb3duIHRoZSBidWdzIHRoYXQgbGVkIHRvIHRoZSBhZGRpdGlv biBvZiBkcmFpbl9zb2NrZXRfZXZlbnRzKCkKYW5kIGRyYWluX3RpbWVyX2V2ZW50cygpIHdhcyBk aWZmaWN1bHQsIGJlY2F1c2UgYW4gaW5lZmZpY2llbnQgZmxvdyBpcwpub3QgdmlzaWJseSBkaWZm ZXJlbnQgZnJvbSBvbmUgdGhhdCBpcyB3b3JraW5nIHByb3Blcmx5LiBUbyBoZWxwCm1haW50YWlu ZXJzIG5vdGljZSB3aGVuIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZywgdHJhY2sgdGhlIG51bWJl ciBvZgpjYWxscyBpbnRvIHRoZSBmbG93IGFzIHBhcnQgb2YgZGVidWcgbW9kZSwgYW5kIHByaW50 IHRoZSB0b3RhbCB3aGVuIHRoZQpmbG93IGZpbmlzaGVzLgoKQSBuZXcgdGVzdCBtYWtlcyBzdXJl IHRoZSB0b3RhbCBjb3VudCBpcyBsZXNzIHRoYW4gMTAwLiAoV2UgZXhwZWN0CnNvbWV0aGluZyBv biB0aGUgb3JkZXIgb2YgMTAuKSBUaGlzIGlzbid0IGZvb2xwcm9vZiwgYnV0IGl0IGlzIGFibGUg dG8KY2F0Y2ggc2V2ZXJhbCByZWdyZXNzaW9ucyBpbiB0aGUgbG9naWMgb2YgdGhlIHByaW9yIHR3 byBjb21taXRzLCBhbmQKZnV0dXJlIHdvcmsgdG8gYWRkIFRMUyBzdXBwb3J0IHRvIHRoZSBvYXV0 aF92YWxpZGF0b3IgdGVzdCBzZXJ2ZXIgc2hvdWxkCnN0cmVuZ3RoZW4gaXQgYXMgd2VsbC4KLS0t CiBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMgICAgICAgfCAyMiArKysr KysrKysrKysrCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDFfc2VydmVyLnBsICAg fCAzMSArKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9vYXV0aC1jdXJsLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMK aW5kZXggNzhiYTMzOTk0OTUuLjY4MzAzMTA2YTVkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1 dGgvb2F1dGgtY3VybC5jCkBAIC0yNzgsNiArMjc4LDcgQEAgc3RydWN0IGFzeW5jX2N0eAogCWJv b2wJCXVzZXJfcHJvbXB0ZWQ7CS8qIGhhdmUgd2UgYWxyZWFkeSBzZW50IHRoZSBhdXRoeiBwcm9t cHQ/ICovCiAJYm9vbAkJdXNlZF9iYXNpY19hdXRoOwkvKiBkaWQgd2Ugc2VuZCBhIGNsaWVudCBz ZWNyZXQ/ICovCiAJYm9vbAkJZGVidWdnaW5nOwkJLyogY2FuIHdlIGdpdmUgdW5zYWZlIGRldmVs b3BlciBhc3Npc3RhbmNlPyAqLworCWludAkJCWRiZ19udW1fY2FsbHM7CS8qIChkZWJ1ZyBtb2Rl KSBob3cgbWFueSB0aW1lcyB3ZXJlIHdlIGNhbGxlZD8gKi8KIAogI2lmIGRlZmluZWQoSEFWRV9T WVNfRVZFTlRfSCkKIAlpbnQJCQluZXZlbnRzOwkJLyogaG93IG1hbnkgZXZlbnRzIGFyZSB3ZSB3 YWl0aW5nIG9uPyAqLwpAQCAtMzA3NCw2ICszMDc1LDggQEAgUG9zdGdyZXNQb2xsaW5nU3RhdHVz VHlwZQogcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewogCVBvc3RncmVzUG9s bGluZ1N0YXR1c1R5cGUgcmVzdWx0OworCWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IGNvbm5fc2Fz bF9zdGF0ZShjb25uKTsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4OwogI2lmbmRlZiBXSU4zMgog CXNpZ3NldF90CW9zaWdzZXQ7CiAJYm9vbAkJc2lncGlwZV9wZW5kaW5nOwpAQCAtMzEwMiw2ICsz MTA1LDI1IEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAogCXJlc3VsdCA9 IHBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoY29ubik7CiAKKwkvKgorCSAqIFRvIGFzc2lzdCB3 aXRoIGZpbmRpbmcgYnVncyBpbiBkcmFpbl9zb2NrZXRfZXZlbnRzKCkgYW5kCisJICogZHJhaW5f dGltZXJfZXZlbnRzKCksIHdoZW4gd2UncmUgaW4gZGVidWcgbW9kZSwgdHJhY2sgdGhlIHRvdGFs IG51bWJlcgorCSAqIG9mIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHByaW50IHRoYXQgYXQg dGhlIGVuZCBvZiB0aGUgZmxvdy4KKwkgKgorCSAqIEJlIGNhcmVmdWwgdGhhdCBzdGF0ZS0+YXN5 bmNfY3R4IGNvdWxkIGJlIE5VTEwgaWYgZWFybHkgaW5pdGlhbGl6YXRpb24KKwkgKiBmYWlscyBk dXJpbmcgdGhlIGZpcnN0IGNhbGwuCisJICovCisJYWN0eCA9IHN0YXRlLT5hc3luY19jdHg7CisJ QXNzZXJ0KGFjdHggfHwgcmVzdWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKTsKKworCWlmIChh Y3R4ICYmIGFjdHgtPmRlYnVnZ2luZykKKwl7CisJCWFjdHgtPmRiZ19udW1fY2FsbHMrKzsKKwkJ aWYgKHJlc3VsdCA9PSBQR1JFU19QT0xMSU5HX09LIHx8IHJlc3VsdCA9PSBQR1JFU19QT0xMSU5H X0ZBSUxFRCkKKwkJCWZwcmludGYoc3RkZXJyLCAiW2xpYnBxXSB0b3RhbCBudW1iZXIgb2YgcG9s bHM6ICVkXG4iLAorCQkJCQlhY3R4LT5kYmdfbnVtX2NhbGxzKTsKKwl9CisKICNpZm5kZWYgV0lO MzIKIAlpZiAobWFza2VkKQogCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhf dmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbCBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRh dG9yL3QvMDAxX3NlcnZlci5wbAppbmRleCA0MTY3MmViZDVjNi4uYzBkYWZiOGJlNzYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAxX3NlcnZlci5wbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90LzAwMV9zZXJ2ZXIucGwKQEAg LTQxOCw2ICs0MTgsMzUgQEAgJG5vZGUtPmNvbm5lY3RfZmFpbHMoCiAJICBxci9mYWlsZWQgdG8g b2J0YWluIGFjY2VzcyB0b2tlbjogbXV0dWFsIFRMUyByZXF1aXJlZCBmb3IgY2xpZW50IFwoaW52 YWxpZF9jbGllbnRcKS8KICk7CiAKKyMgQ291bnQgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUg aW50ZXJuYWwgZmxvdyB3aGVuIG11bHRpcGxlIHJldHJpZXMgYXJlCisjIHRyaWdnZXJlZC4gVGhl IGV4YWN0IG51bWJlciBkZXBlbmRzIG9uIG1hbnkgdGhpbmdzIC0tIHRoZSBUQ1Agc3RhY2ssIHRo ZQorIyB2ZXJzaW9uIG9mIEN1cmwgaW4gdXNlLCByYW5kb20gY2hhbmNlIC0tIGJ1dCBhIHJpZGlj dWxvdXNseSBoaWdoIG51bWJlcgorIyBzdWdnZXN0cyBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBv dXIgYWJpbGl0eSB0byBjbGVhciBtdWx0aXBsZXhlciBldmVudHMgYWZ0ZXIKKyMgdGhleSdyZSBu byBsb25nZXIgYXBwbGljYWJsZS4KK215ICgkcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2Rl LT5wc3FsKAorCSdwb3N0Z3JlcycsCisJIlNFTEVDVCAnY29ubmVjdGVkIGZvciBjYWxsIGNvdW50 JyIsCisJZXh0cmFfcGFyYW1zID0+IFsnLXcnXSwKKwljb25uc3RyID0+IGNvbm5zdHIoc3RhZ2Ug PT4gJ3Rva2VuJywgcmV0cmllcyA9PiAyKSwKKwlvbl9lcnJvcl9zdG9wID0+IDApOworCitpcygk cmV0LCAwLCAiY2FsbCBjb3VudCBjb25uZWN0aW9uIHN1Y2NlZWRzIik7CitsaWtlKAorCSRzdGRl cnIsCisJcXJAVmlzaXQgaHR0cHM6Ly9leGFtcGxlXC5jb20vIGFuZCBlbnRlciB0aGUgY29kZTog cG9zdGdyZXN1c2VyQCwKKwkiY2FsbCBjb3VudDogc3RkZXJyIG1hdGNoZXMiKTsKKworbXkgJGNv dW50X3BhdHRlcm4gPSBxci9cW2xpYnBxXF0gdG90YWwgbnVtYmVyIG9mIHBvbGxzOiAoXGQrKS87 CitpZiAobGlrZSgkc3RkZXJyLCAkY291bnRfcGF0dGVybiwgImNhbGwgY291bnQ6IGNvdW50IGlz IHByaW50ZWQiKSkKK3sKKwkjIEZvciByZWZlcmVuY2UsIGEgdHlwaWNhbCBmbG93IHdpdGggdHdv IHJldHJpZXMgbWlnaHQgdGFrZSBiZXR3ZWVuIDUtMTUKKwkjIGNhbGxzIHRvIHRoZSBjbGllbnQg aW1wbGVtZW50YXRpb24uIEFuZCB3aGlsZSB0aGlzIHdpbGwgcHJvYmFibHkgY29udGludWUKKwkj IHRvIGNoYW5nZSBhY3Jvc3MgT1NlcyBhbmQgQ3VybCB1cGRhdGVzLCB3ZSdyZSBsaWtlbHkgaW4g dHJvdWJsZSBpZiB3ZSBzZWUKKwkjIGh1bmRyZWRzIG9yIHRob3VzYW5kcyBvZiBjYWxscy4KKwkk c3RkZXJyID1+ICRjb3VudF9wYXR0ZXJuOworCWNtcF9vaygkMSwgJzwnLCAxMDAsICJjYWxsIGNv dW50IGlzIHJlYXNvbmFibHkgc21hbGwiKTsKK30KKwogIyBTdHJlc3MgdGVzdDogbWFrZSBzdXJl IG91ciBidWlsdGluIGZsb3cgb3BlcmF0ZXMgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIGNsaWVudAog IyBhcHBsaWNhdGlvbiBpc24ndCByZXNwZWN0aW5nIFBHUkVTX1BPTExJTkdfUkVBRElORy9XUklU SU5HIHNpZ25hbHMgcmV0dXJuZWQKICMgZnJvbSBQUWNvbm5lY3RQb2xsKCkuCkBAIC00MjgsNyAr NDU3LDcgQEAgbXkgQGNtZCA9ICgKIAljb25uc3RyKHN0YWdlID0+ICdhbGwnLCByZXRyaWVzID0+ IDEsIGludGVydmFsID0+IDEpKTsKIAogbm90ZSAicnVubmluZyAnIiAuIGpvaW4oIicgJyIsIEBj bWQpIC4gIiciOwotbXkgKCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEBjbWQpOwor KCRzdGRvdXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEBjbWQpOwogCiBsaWtlKCRzdGRvdXQs IHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywgInN0cmVzcy1hc3luYzogc3Rkb3V0IG1hdGNoZXMi KTsKIHVubGlrZSgKLS0gCjIuMzQuMQoK --000000000000bbfad4063b037938 Content-Type: application/octet-stream; name="v2-0004-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Disposition: attachment; filename="v2-0004-oauth-Add-unit-tests-for-multiplexer-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdnkw64d4 RnJvbSBjYTZmZDIzNzY1M2Q4ZGU5MDM4YjhmODFhMmMwOGM4ODJhN2U1ZjUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCA1IE1hciAyMDI1IDE1OjA0OjM0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2MiA0LzRdIG9hdXRoOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbXVsdGlwbGV4ZXIgaGFu ZGxpbmcKClRvIGJldHRlciByZWNvcmQgdGhlIGludGVybmFsIGJlaGF2aW9ycyBvZiBvYXV0aC1j dXJsLmMsIGFkZCBhIHVuaXQgdGVzdApzdWl0ZSBmb3IgdGhlIHNvY2tldCBhbmQgdGltZXIgaGFu ZGxpbmcgY29kZS4gVGhpcyBpcyBhbGwgYmFzZWQgb24gVEFQCmFuZCBkcml2ZW4gYnkgb3VyIGV4 aXN0aW5nIFRlc3Q6Ok1vcmUgaW5mcmFzdHJ1Y3R1cmUuCi0tLQogc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKwogc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvbWVzb24uYnVpbGQgICAgICAgfCAgMzUgKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL3QvMDAxX29hdXRoLnBsICAgIHwgIDI0ICsKIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L3Rlc3Qtb2F1dGgtY3VybC5jIHwgNDc0ICsrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hh bmdlZCwgNTQ3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0 aC9NYWtlZmlsZQppbmRleCAyNzBmYzBjZjJkOS4uOWRhOGU0YjcxNDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL01ha2VmaWxlCkBAIC03OSw1ICs3OSwxOSBAQCB1bmluc3RhbGw6CiAJcm0gLWYg JyQoREVTVERJUikkKGxpYmRpcikvJChzdGxpYiknCiAJcm0gLWYgJyQoREVTVERJUikkKGxpYmRp cikvJChzaGxpYiknCiAKKy5QSE9OWTogYWxsLXRlc3RzCithbGwtdGVzdHM6IG9hdXRoX3Rlc3Rz JChYKQorCitvYXV0aF90ZXN0cyQoWCk6IHRlc3Qtb2F1dGgtY3VybC5vIG9hdXRoLXV0aWxzLm8g JChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBxCisJJChDQykgJChD RkxBR1MpICReICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKFNITElCX0xJTkspIC1vICRACisK K2NoZWNrOiBhbGwtdGVzdHMKKwkkKHByb3ZlX2NoZWNrKQorCitpbnN0YWxsY2hlY2s6IGFsbC10 ZXN0cworCSQocHJvdmVfaW5zdGFsbGNoZWNrKQorCiBjbGVhbiBkaXN0Y2xlYW46IGNsZWFuLWxp YgogCXJtIC1mICQoT0JKUykgJChPQkpTX1NUQVRJQykgJChPQkpTX1NITElCKQorCXJtIC1mIHRl c3Qtb2F1dGgtY3VybC5vIG9hdXRoX3Rlc3RzJChYKQorCXJtIC1yZiB0bXBfY2hlY2sKZGlmZiAt LWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggZGYwNjRjNTlhNDAuLjUwNWUxNjcx Yjg2IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZAor KysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtNDcsMyArNDcs MzggQEAgbGlicHFfb2F1dGhfc28gPSBzaGFyZWRfbW9kdWxlKGxpYnBxX29hdXRoX25hbWUsCiAg IGxpbmtfYXJnczogZXhwb3J0X2ZtdC5mb3JtYXQoZXhwb3J0X2ZpbGUuZnVsbF9wYXRoKCkpLAog ICBrd2FyZ3M6IGRlZmF1bHRfbGliX2FyZ3MsCiApCisKK2xpYnBxX29hdXRoX3Rlc3RfZGVwcyA9 IFtdCisKK29hdXRoX3Rlc3Rfc291cmNlcyA9IGZpbGVzKCd0ZXN0LW9hdXRoLWN1cmwuYycpICsg bGlicHFfb2F1dGhfc29fc291cmNlcworCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAg b2F1dGhfdGVzdF9zb3VyY2VzICs9IHJjX2Jpbl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAnb2F1dGhfdGVzdHMnLAorICAgICctLUZJTEVERVND JywgJ09BdXRoIHVuaXQgdGVzdCBwcm9ncmFtJyxdKQorZW5kaWYKKworbGlicHFfb2F1dGhfdGVz dF9kZXBzICs9IGV4ZWN1dGFibGUoJ29hdXRoX3Rlc3RzJywKKyAgb2F1dGhfdGVzdF9zb3VyY2Vz LAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9zaGxpYl9jb2RlLCBsaWJwcSwgbGlicHFfb2F1 dGhfZGVwc10sCisgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJncyArIHsKKyAgICAnY19hcmdzJzog ZGVmYXVsdF9iaW5fYXJncy5nZXQoJ2NfYXJncycsIFtdKSArIGxpYnBxX29hdXRoX3NvX2NfYXJn cywKKyAgICAnY19wY2gnOiBwY2hfcG9zdGdyZXNfZmVfaCwKKyAgICAnaW5jbHVkZV9kaXJlY3Rv cmllcyc6IFtsaWJwcV9pbmMsIHBvc3RncmVzX2luY10sCisgICAgJ2luc3RhbGwnOiBmYWxzZSwK KyAgfQorKQorCit0ZXN0cHJlcF90YXJnZXRzICs9IGxpYnBxX29hdXRoX3Rlc3RfZGVwcworCit0 ZXN0cyArPSB7CisgICduYW1lJzogJ2xpYnBxLW9hdXRoJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0 YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX29hdXRoLnBsJywKKyAgICBdLAor ICAgICdkZXBzJzogbGlicHFfb2F1dGhfdGVzdF9kZXBzLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvdC8wMDFfb2F1dGgucGwgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZTc2OTg1NmMyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC90LzAwMV9vYXV0aC5wbApAQCAtMCwwICsxLDI0IEBACisjIENvcHlyaWdo dCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKK3VzZSBzdHJp Y3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIERlZmVyIGVudGlyZWx5IHRvIHRoZSBvYXV0 aF90ZXN0cyBleGVjdXRhYmxlLiBzdGRvdXQvZXJyIGlzIHJvdXRlZCB0aHJvdWdoCisjIFRlc3Q6 Ok1vcmUgc28gdGhhdCBvdXIgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZSBjYW4gaGFuZGxlIGl0IGNv cnJlY3RseS4gVXNpbmcKKyMgSVBDOjpSdW46Om5ld19jaHVua2VyIHNlZW1zIHRvIGhlbHAgaW50 ZXJsZWF2ZSB0aGUgdHdvIHN0cmVhbXMgYSBsaXR0bGUgYmV0dGVyCisjIHRoYW4gd2l0aG91dC4K KyMKKyMgVE9ETzogcHJvdmUgY2FuIGFsc28gZGVhbCB3aXRoIG5hdGl2ZSBleGVjdXRhYmxlcyBp dHNlbGYsIHdoaWNoIHdlIGNvdWxkCisjIHByb2JhYmx5IG1ha2UgdXNlIG9mIHZpYSBQUk9WRV9U RVNUUyBvbiB0aGUgTWFrZWZpbGUgc2lkZS4gQnV0IHRoZSBNZXNvbiBzZXR1cAorIyBjYWxscyBQ ZXJsIGRpcmVjdGx5LCB3aGljaCB3b3VsZCByZXF1aXJlIG1vcmUgY29kZSB0byB3b3JrIGFyb3Vu ZC4uLiBhbmQKKyMgdGhlcmUncyBzdGlsbCB0aGUgbWF0dGVyIG9mIGxvZ2dpbmcuCitteSAkYnVp bGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CitteSAkb3V0ID0gJGJ1aWxkZXItPm91dHB1dDsK K215ICRlcnIgPSAkYnVpbGRlci0+ZmFpbHVyZV9vdXRwdXQ7CisKK0lQQzo6UnVuOjpydW4gWydv YXV0aF90ZXN0cyddLAorICAnPicsIElQQzo6UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgcHJpbnQg eyRvdXR9ICRfWzBdIH0sCisgICcyPicsIElQQzo6UnVuOjpuZXdfY2h1bmtlciwgc3ViIHsgcHJp bnQgeyRlcnJ9ICRfWzBdIH0KKyAgb3IgZGllICJvYXV0aF90ZXN0cyByZXR1cm5lZCAkPyI7CmRp ZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC90ZXN0LW9hdXRoLWN1cmwuYyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYTAzYjBmYzU1MgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL3Rlc3Qtb2F1dGgtY3VybC5jCkBAIC0wLDAg KzEsNDc0IEBACisvKgorICogdGVzdC1vYXV0aC1jdXJsLmMKKyAqCisgKiBBIHVuaXQgdGVzdCBk cml2ZXIgZm9yIGxpYnBxLW9hdXRoLiBUaGlzICNpbmNsdWRlcyBvYXV0aC1jdXJsLmMsIHdoaWNo IGxldHMKKyAqIHRoZSB0ZXN0cyByZWZlcmVuY2Ugc3RhdGljIGZ1bmN0aW9ucyBhbmQgb3RoZXIg aW50ZXJuYWxzLgorICoKKyAqIFVTRV9BU1NFUlRfQ0hFQ0tJTkcgaXMgcmVxdWlyZWQsIHRvIG1h a2UgaXQgZWFzeSBmb3IgdGVzdHMgdG8gd3JhcAorICogbXVzdC1zdWNjZWVkIGNvZGUgYXMgcGFy dCBvZiB0ZXN0IHNldHVwLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqLworCisjaW5jbHVkZSAib2F1dGgtY3VybC5jIgor CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoK KyAqIFRBUCBIZWxwZXJzCisgKi8KKworc3RhdGljIGludAludW1fdGVzdHMgPSAwOworCisvKgor ICogUmVwb3J0cyBvay9ub3Qgb2sgdG8gdGhlIFRBUCBzdHJlYW0gb24gc3Rkb3V0LgorICovCisj ZGVmaW5lIG9rKE9LLCBURVNUKSBcCisJb2tfaW1wbChPSywgVEVTVCwgI09LLCBfX0ZJTEVfXywg X19MSU5FX18pCisKK3N0YXRpYyBib29sCitva19pbXBsKGJvb2wgb2ssIGNvbnN0IGNoYXIgKnRl c3QsIGNvbnN0IGNoYXIgKnRlc3RzdHIsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQorewor CXByaW50ZigiJXNvayAlZCAtICVzXG4iLCBvayA/ICIiIDogIm5vdCAiLCArK251bV90ZXN0cywg dGVzdCk7CisKKwlpZiAoIW9rKQorCXsKKwkJcHJpbnRmKCIjIGF0ICVzOiVkOlxuIiwgZmlsZSwg bGluZSk7CisJCXByaW50ZigiIyAgIGV4cHJlc3Npb24gaXMgZmFsc2U6ICVzXG4iLCB0ZXN0c3Ry KTsKKwl9CisKKwlyZXR1cm4gb2s7Cit9CisKKy8qCisgKiBMaWtlIG9rKHRoaXMgPT0gdGhhdCks IGJ1dCB3aXRoIG1vcmUgZGlhZ25vc3RpY3Mgb24gZmFpbHVyZS4KKyAqCisgKiBPbmx5IHdvcmtz IG9uIGludHMsIGJ1dCBsdWNraWx5IHRoYXQncyBhbGwgd2UgbmVlZCBoZXJlLiBOb3RlIHRoYXQg dGhlIG11Y2gKKyAqIHNpbXBsZXItbG9va2luZyBtYWNybyBpbXBsZW1lbnRhdGlvbgorICoKKyAq ICAgICBpc19kaWFnKG9rKFRISVMgPT0gVEhBVCwgVEVTVCksIFRISVMsICNUSElTLCBUSEFULCAj VEhBVCkKKyAqCisgKiBzdWZmZXJzIGZyb20gbXVsdGlwbGUgZXZhbHVhdGlvbiBvZiB0aGUgbWFj cm8gYXJndW1lbnRzLi4uCisgKi8KKyNkZWZpbmUgaXMoVEhJUywgVEhBVCwgVEVTVCkgXAorCWRv IHsgXAorCQlpbnQgdGhpc18gPSAoVEhJUyksIFwKKwkJCXRoYXRfID0gKFRIQVQpOyBcCisJCWlz X2RpYWcoIFwKKwkJCW9rX2ltcGwodGhpc18gPT0gdGhhdF8sIFRFU1QsICNUSElTICIgPT0gIiAj VEhBVCwgX19GSUxFX18sIF9fTElORV9fKSwgXAorCQkJdGhpc18sICNUSElTLCB0aGF0XywgI1RI QVQgXAorCQkpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGJvb2wKK2lzX2RpYWcoYm9vbCBv aywgaW50IHRoaXMsIGNvbnN0IGNoYXIgKnRoaXNzdHIsIGludCB0aGF0LCBjb25zdCBjaGFyICp0 aGF0c3RyKQoreworCWlmICghb2spCisJCXByaW50ZigiIyAgICVzID0gJWQ7ICVzID0gJWRcbiIs IHRoaXNzdHIsIHRoaXMsIHRoYXRzdHIsIHRoYXQpOworCisJcmV0dXJuIG9rOworfQorCisvKgor ICogVXRpbGl0aWVzCisgKi8KKworLyoKKyAqIENyZWF0ZXMgYSBwYXJ0aWFsbHktaW5pdGlhbGl6 ZWQgYXN5bmNfY3R4IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZy4gRnJlZQorICogd2l0aCBm cmVlX3Rlc3RfYWN0eCgpLgorICovCitzdGF0aWMgc3RydWN0IGFzeW5jX2N0eCAqCitpbml0X3Rl c3RfYWN0eCh2b2lkKQoreworCXN0cnVjdCBhc3luY19jdHggKmFjdHg7CisKKwlhY3R4ID0gY2Fs bG9jKDEsIHNpemVvZigqYWN0eCkpOworCUFzc2VydChhY3R4KTsKKworCWFjdHgtPm11eCA9IFBH SU5WQUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9IC0xOworCWFjdHgtPmRlYnVnZ2luZyA9 IHRydWU7CisKKwlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVycmJ1Zik7CisKKwlBc3NlcnQoc2V0 dXBfbXVsdGlwbGV4ZXIoYWN0eCkpOworCisJcmV0dXJuIGFjdHg7Cit9CisKK3N0YXRpYyB2b2lk CitmcmVlX3Rlc3RfYWN0eChzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQoreworCXRlcm1QUUV4cEJ1 ZmZlcigmYWN0eC0+ZXJyYnVmKTsKKworCWlmIChhY3R4LT5tdXggIT0gUEdJTlZBTElEX1NPQ0tF VCkKKwkJY2xvc2UoYWN0eC0+bXV4KTsKKwlpZiAoYWN0eC0+dGltZXJmZCA+PSAwKQorCQljbG9z ZShhY3R4LT50aW1lcmZkKTsKKworCWZyZWUoYWN0eCk7Cit9CisKK3N0YXRpYyBjaGFyIGR1bW15 X2J1Zls0ICogMTAyNF07CS8qIGZvciBmaWxsX3BpcGUvZHJhaW5fcGlwZSAqLworCisvKgorICog V3JpdGVzIHRvIHRoZSB3cml0ZSBzaWRlIG9mIGEgcGlwZSB1bnRpbCBpdCB3b24ndCB0YWtlIGFu eSBtb3JlIGRhdGEuIFJldHVybnMKKyAqIHRoZSBhbW91bnQgd3JpdHRlbi4KKyAqLworc3RhdGlj IHNzaXplX3QKK2ZpbGxfcGlwZShpbnQgZmQpCit7CisJaW50CQkJbW9kZTsKKwlzc2l6ZV90CQl3 cml0dGVuID0gMDsKKworCS8qIERvbid0IGJsb2NrLiAqLworCUFzc2VydCgobW9kZSA9IGZjbnRs KGZkLCBGX0dFVEZMKSkgIT0gLTEpOworCUFzc2VydChmY250bChmZCwgRl9TRVRGTCwgbW9kZSB8 IE9fTk9OQkxPQ0spID09IDApOworCisJd2hpbGUgKHRydWUpCisJeworCQlzc2l6ZV90CQl3Owor CisJCXcgPSB3cml0ZShmZCwgZHVtbXlfYnVmLCBzaXplb2YoZHVtbXlfYnVmKSk7CisJCWlmICh3 IDwgMCkKKwkJeworCQkJaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFV09VTERCTE9D SykKKwkJCXsKKwkJCQlwZXJyb3IoIndyaXRlIHRvIHBpcGUiKTsKKwkJCQl3cml0dGVuID0gLTE7 CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCXdyaXR0ZW4gKz0gdzsKKwl9CisKKwkvKiBSZXNl dCB0aGUgZGVzY3JpcHRvciBmbGFncy4gKi8KKwlBc3NlcnQoZmNudGwoZmQsIEZfU0VURkQsIG1v ZGUpID09IDApOworCisJcmV0dXJuIHdyaXR0ZW47Cit9CisKKy8qCisgKiBEcmFpbnMgdGhlIHJl cXVlc3RlZCBhbW91bnQgb2YgZGF0YSBmcm9tIHRoZSByZWFkIHNpZGUgb2YgYSBwaXBlLgorICov CitzdGF0aWMgYm9vbAorZHJhaW5fcGlwZShpbnQgZmQsIHNzaXplX3QgbikKK3sKKwlBc3NlcnQo biA+IDApOworCisJd2hpbGUgKG4pCisJeworCQlzaXplX3QJCXRvX3JlYWQgPSAobiA8PSBzaXpl b2YoZHVtbXlfYnVmKSkgPyBuIDogc2l6ZW9mKGR1bW15X2J1Zik7CisJCXNzaXplX3QJCWRyYWlu ZWQ7CisKKwkJZHJhaW5lZCA9IHJlYWQoZmQsIGR1bW15X2J1ZiwgdG9fcmVhZCk7CisJCWlmIChk cmFpbmVkIDwgMCkKKwkJeworCQkJcGVycm9yKCJyZWFkIGZyb20gcGlwZSIpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisKKwkJbiAtPSBkcmFpbmVkOworCX0KKworCXJldHVybiB0cnVlOworfQor CisvKgorICogVGVzdHMgd2hldGhlciB0aGUgbXVsdGlwbGV4ZXIgaXMgbWFya2VkIHJlYWR5IGJ5 IHRoZSBkZWFkbGluZS4gVGhpcyBpcyBhCisgKiBtYWNybyBzbyB0aGF0IGZpbGUvbGluZSBpbmZv cm1hdGlvbiBtYWtlcyBzZW5zZSBkdXJpbmcgZmFpbHVyZXMuCisgKgorICogTkI6IG91ciBjdXJy ZW50IG11bHRpcGxleGVyIGltcGxlbWVudGF0aW9ucyAoZXBvbGwva3F1ZXVlKSBhcmUgKnJlYWRh YmxlKgorICogd2hlbiB0aGUgdW5kZXJseWluZyBsaWJjdXJsIHNvY2tldHMgYXJlICp3cml0YWJs ZSouIFRoaXMgYmVoYXZpb3IgaXMgcGlubmVkCisgKiBoZXJlIHRvIHJlY29yZCB0aGF0IGV4cGVj dGF0aW9uOyBQR1JFU19QT0xMSU5HX1JFQURJTkcgaXMgaGFyZGNvZGVkCisgKiB0aHJvdWdob3V0 IHRoZSBmbG93IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgYSBuZXcgbXVsdGlwbGV4 ZXIgZG9lcworICogc29tZXRoaW5nIGRpZmZlcmVudC4KKyAqLworI2RlZmluZSBtdXhfaXNfcmVh ZHkoTVVYLCBERUFETElORSwgVEVTVCkgXAorCWRvIHsgXAorCQlpbnQgcmVzXyA9IFBRc29ja2V0 UG9sbChNVVgsIDEsIDAsIERFQURMSU5FKTsgXAorCQlBc3NlcnQocmVzXyAhPSAtMSk7IFwKKwkJ b2socmVzXyA+IDAsICJtdWx0aXBsZXhlciBpcyByZWFkeSAiIFRFU1QpOyBcCisJfSB3aGlsZSAo MCkKKworLyoKKyAqIFRoZSBvcHBvc2l0ZSBvZiBtdXhfaXNfcmVhZHkoKS4KKyAqLworI2RlZmlu ZSBtdXhfaXNfbm90X3JlYWR5KE1VWCwgVEVTVCkgXAorCWRvIHsgXAorCQlpbnQgcmVzXyA9IFBR c29ja2V0UG9sbChNVVgsIDEsIDAsIDApOyBcCisJCUFzc2VydChyZXNfICE9IC0xKTsgXAorCQlp cyhyZXNfLCAwLCAibXVsdGlwbGV4ZXIgaXMgbm90IHJlYWR5ICIgVEVTVCk7IFwKKwl9IHdoaWxl ICgwKQorCisvKgorICogVGVzdCBTdWl0ZXMKKyAqLworCisvKiBQZXItc3VpdGUgdGltZW91dC4g U2V0IHZpYSB0aGUgUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQgZW52dmFyLiAqLworc3RhdGljIHBn X3VzZWNfdGltZV90IHRpbWVvdXRfdXMgPSAxODAgKiAxMDAwICogMTAwMDsKKworc3RhdGljIHZv aWQKK3Rlc3Rfc2V0X3RpbWVyKHZvaWQpCit7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0eCA9IGlu aXRfdGVzdF9hY3R4KCk7CisJY29uc3QgcGdfdXNlY190aW1lX3QgZGVhZGxpbmUgPSBQUWdldEN1 cnJlbnRUaW1lVVNlYygpICsgdGltZW91dF91czsKKworCXByaW50ZigiIyB0ZXN0X3NldF90aW1l clxuIik7CisKKwkvKiBBIHplcm8tZHVyYXRpb24gdGltZXIgc2hvdWxkIHJlc3VsdCBpbiBhIG5l YXItaW1tZWRpYXRlIHJlYWR5IHNpZ25hbC4gKi8KKwlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDAp KTsKKwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gdGltZXIgZXhwaXJl cyIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJu cyAxIHdoZW4gdGltZXIgZXhwaXJlcyIpOworCisJLyogUmVzZXR0aW5nIHRoZSB0aW1lciBmYXIg aW4gdGhlIGZ1dHVyZSBzaG91bGQgdW5zZXQgdGhlIHJlYWR5IHNpZ25hbC4gKi8KKwlBc3NlcnQo c2V0X3RpbWVyKGFjdHgsIElOVF9NQVgpKTsKKwltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwg IndoZW4gdGltZXIgaXMgcmVzZXQgdG8gdGhlIGZ1dHVyZSIpOworCWlzKHRpbWVyX2V4cGlyZWQo YWN0eCksIDAsICJ0aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIHdpdGggdW5leHBpcmVkIHRpbWVy Iik7CisKKwkvKiBTZXR0aW5nIGFub3RoZXIgemVyby1kdXJhdGlvbiB0aW1lciBzaG91bGQgb3Zl cnJpZGUgdGhlIHByZXZpb3VzIG9uZS4gKi8KKwlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDApKTsK KwltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gdGltZXIgaXMgcmUtZXhw aXJlZCIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDEsICJ0aW1lcl9leHBpcmVkKCkgcmV0 dXJucyAxIHdoZW4gdGltZXIgaXMgcmUtZXhwaXJlZCIpOworCisJLyogQW5kIGRpc2FibGluZyB0 aGF0IHRpbWVyIHNob3VsZCBvbmNlIGFnYWluIHVuc2V0IHRoZSByZWFkeSBzaWduYWwuICovCisJ QXNzZXJ0KHNldF90aW1lcihhY3R4LCAtMSkpOworCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4 LCAid2hlbiB0aW1lciBpcyB1bnNldCIpOworCWlzKHRpbWVyX2V4cGlyZWQoYWN0eCksIDAsICJ0 aW1lcl9leHBpcmVkKCkgcmV0dXJucyAwIHdoZW4gdGltZXIgaXMgdW5zZXQiKTsKKworCXsKKwkJ Ym9vbAkJZXhwaXJlZDsKKworCQkvKiBNYWtlIHN1cmUgZHJhaW5fdGltZXJfZXZlbnRzKCkgZnVu Y3Rpb25zIGNvcnJlY3RseSBhcyB3ZWxsLiAqLworCQlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDAp KTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHRpbWVyIGlzIHJl LWV4cGlyZWQgKGRyYWluX3RpbWVyX2V2ZW50cykiKTsKKworCQlBc3NlcnQoZHJhaW5fdGltZXJf ZXZlbnRzKGFjdHgsICZleHBpcmVkKSk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAi d2hlbiB0aW1lciBpcyBkcmFpbmVkIGFmdGVyIGV4cGlyaW5nIik7CisJCWlzKGV4cGlyZWQsIDEs ICJkcmFpbl90aW1lcl9ldmVudHMoKSByZXBvcnRzIGV4cGlyYXRpb24iKTsKKwkJaXModGltZXJf ZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyX2V4cGlyZWQoKSByZXR1cm5zIDAgYWZ0ZXIgdGltZXIg aXMgZHJhaW5lZCIpOworCisJCS8qIEEgc2Vjb25kIGRyYWluIHNob3VsZCBkbyBub3RoaW5nLiAq LworCQlBc3NlcnQoZHJhaW5fdGltZXJfZXZlbnRzKGFjdHgsICZleHBpcmVkKSk7CisJCW11eF9p c19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiB0aW1lciBpcyBkcmFpbmVkIGEgc2Vjb25kIHRp bWUiKTsKKwkJaXMoZXhwaXJlZCwgMCwgImRyYWluX3RpbWVyX2V2ZW50cygpIHJlcG9ydHMgbm8g ZXhwaXJhdGlvbiIpOworCQlpcyh0aW1lcl9leHBpcmVkKGFjdHgpLCAwLCAidGltZXJfZXhwaXJl ZCgpIHN0aWxsIHJldHVybnMgMCIpOworCX0KKworCWZyZWVfdGVzdF9hY3R4KGFjdHgpOworfQor CitzdGF0aWMgdm9pZAordGVzdF9yZWdpc3Rlcl9zb2NrZXQodm9pZCkKK3sKKwlzdHJ1Y3QgYXN5 bmNfY3R4ICphY3R4ID0gaW5pdF90ZXN0X2FjdHgoKTsKKwlpbnQJCQlwaXBlZmRbMl07CisJaW50 CQkJcmZkLAorCQkJCXdmZDsKKwlib29sCQliaWRpcmVjdGlvbmFsOworCisJLyogQ3JlYXRlIGEg bG9jYWwgcGlwZSBmb3IgY29tbXVuaWNhdGlvbi4gKi8KKwlBc3NlcnQocGlwZShwaXBlZmQpID09 IDApOworCXJmZCA9IHBpcGVmZFswXTsKKwl3ZmQgPSBwaXBlZmRbMV07CisKKwkvKgorCSAqIFNv bWUgcGxhdGZvcm1zIChGcmVlQlNEKSBpbXBsZW1lbnQgYmlkaXJlY3Rpb25hbCBwaXBlcywgYWZm ZWN0aW5nIHRoZQorCSAqIGJlaGF2aW9yIG9mIHNvbWUgb2YgdGhlc2UgdGVzdHMuIFN0b3JlIHRo YXQga25vd2xlZGdlIGZvciBsYXRlci4KKwkgKi8KKwliaWRpcmVjdGlvbmFsID0gUFFzb2NrZXRQ b2xsKHJmZCAvKiByZWFkICovICwgMCwgMSAvKiB3cml0ZSAqLyAsIDApID4gMDsKKworCS8qCisJ ICogVGhpcyBzdWl0ZSBydW5zIHR3aWNlIC0tIG9uY2UgdXNpbmcgQ1VSTF9QT0xMX0lOL0NVUkxf UE9MTF9PVVQgZm9yCisJICogcmVhZC93cml0ZSBvcGVyYXRpb25zLCByZXNwZWN0aXZlbHksIGFu ZCBvbmNlIHVzaW5nIENVUkxfUE9MTF9JTk9VVCBmb3IKKwkgKiBib3RoIHNpZGVzLgorCSAqLwor CWZvciAoaW50IGlub3V0ID0gMDsgaW5vdXQgPCAyOyBpbm91dCsrKQorCXsKKwkJY29uc3QgaW50 CWluX2V2ZW50ID0gaW5vdXQgPyBDVVJMX1BPTExfSU5PVVQgOiBDVVJMX1BPTExfSU47CisJCWNv bnN0IGludAlvdXRfZXZlbnQgPSBpbm91dCA/IENVUkxfUE9MTF9JTk9VVCA6IENVUkxfUE9MTF9P VVQ7CisJCWNvbnN0IHBnX3VzZWNfdGltZV90IGRlYWRsaW5lID0gUFFnZXRDdXJyZW50VGltZVVT ZWMoKSArIHRpbWVvdXRfdXM7CisJCXNpemVfdAkJYmlkaV9waXBlX3NpemUgPSAwOyAvKiBzaWxl bmNlIGNvbXBpbGVyIHdhcm5pbmdzICovCisKKwkJcHJpbnRmKCIjIHRlc3RfcmVnaXN0ZXJfc29j a2V0ICVzXG4iLCBpbm91dCA/ICIoSU5PVVQpIiA6ICIiKTsKKworCQkvKgorCQkgKiBBdCB0aGUg c3RhcnQgb2YgdGhlIHRlc3QsIHRoZSByZWFkIHNpZGUgc2hvdWxkIGJlIGJsb2NrZWQgYW5kIHRo ZQorCQkgKiB3cml0ZSBzaWRlIHNob3VsZCBiZSBvcGVuLiAoVGhlcmUncyBhIG1pc3Rha2UgYXQg dGhlIGVuZCBvZiB0aGlzCisJCSAqIGxvb3Agb3RoZXJ3aXNlLikKKwkJICovCisJCUFzc2VydChQ UXNvY2tldFBvbGwocmZkLCAxLCAwLCAwKSA9PSAwKTsKKwkJQXNzZXJ0KFBRc29ja2V0UG9sbCh3 ZmQsIDAsIDEsIDApID4gMCk7CisKKwkJLyoKKwkJICogRm9yIGJpZGlyZWN0aW9uYWwgc3lzdGVt cywgZW11bGF0ZSB1bmlkaXJlY3Rpb25hbCBiZWhhdmlvciBoZXJlIGJ5CisJCSAqIGZpbGxpbmcg dXAgdGhlICJyZWFkIHNpZGUiIG9mIHRoZSBwaXBlLgorCQkgKi8KKwkJaWYgKGJpZGlyZWN0aW9u YWwpCisJCQlBc3NlcnQoKGJpZGlfcGlwZV9zaXplID0gZmlsbF9waXBlKHJmZCkpID4gMCk7CisK KwkJLyogTGlzdGVuIG9uIHRoZSByZWFkIHNpZGUuIFRoZSBtdWx0aXBsZXhlciBzaG91bGRuJ3Qg YmUgcmVhZHkgeWV0LiAqLworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHJmZCwgaW5f ZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwg IndoZW4gZmQgaXMgbm90IHJlYWRhYmxlIik7CisKKwkJLyogV3JpdGluZyB0byB0aGUgcGlwZSBz aG91bGQgcmVzdWx0IGluIGEgcmVhZC1yZWFkeSBtdWx0aXBsZXhlci4gKi8KKwkJQXNzZXJ0KHdy aXRlKHdmZCwgIngiLCAxKSA9PSAxKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxp bmUsICJ3aGVuIGZkIGlzIHJlYWRhYmxlIik7CisKKwkJLyoKKwkJICogVXBkYXRlIHRoZSByZWdp c3RyYXRpb24gdG8gd2FpdCBvbiB3cml0ZSBldmVudHMgaW5zdGVhZC4gVGhlCisJCSAqIG11bHRp cGxleGVyIHNob3VsZCBiZSB1bnNldC4KKwkJICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQo TlVMTCwgcmZkLCBDVVJMX1BPTExfT1VULCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX25v dF9yZWFkeShhY3R4LT5tdXgsICJ3aGVuIHdhaXRpbmcgZm9yIHdyaXRlcyBvbiByZWFkYWJsZSBm ZCIpOworCisJCS8qIFJlLXJlZ2lzdGVyIGZvciByZWFkIGV2ZW50cy4gKi8KKwkJQXNzZXJ0KHJl Z2lzdGVyX3NvY2tldChOVUxMLCByZmQsIGluX2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJ bXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3aGVuIHdhaXRpbmcgZm9yIHJlYWRz IGFnYWluIik7CisKKwkJLyogU3RvcCBsaXN0ZW5pbmcuIFRoZSBtdWx0aXBsZXhlciBzaG91bGQg YmUgdW5zZXQuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBDVVJMX1BP TExfUkVNT1ZFLCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX25vdF9yZWFkeShhY3R4LT5t dXgsICJ3aGVuIHJlYWRhYmxlIGZkIGlzIHJlbW92ZWQiKTsKKworCQkvKiBMaXN0ZW4gYWdhaW4u ICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVMTCwgcmZkLCBpbl9ldmVudCwgYWN0eCwg TlVMTCkgPT0gMCk7CisJCW11eF9pc19yZWFkeShhY3R4LT5tdXgsIGRlYWRsaW5lLCAid2hlbiBy ZWFkYWJsZSBmZCBpcyByZS1hZGRlZCIpOworCisJCS8qCisJCSAqIERyYWluaW5nIHRoZSBwaXBl IHNob3VsZCB1bnNldCB0aGUgbXVsdGlwbGV4ZXIgYWdhaW4sIG9uY2UgdGhlIG9sZAorCQkgKiBl dmVudCBpcyBkcmFpbmVkLgorCQkgKi8KKwkJQXNzZXJ0KGRyYWluX3BpcGUocmZkLCAxKSk7CisJ CUFzc2VydChkcmFpbl9zb2NrZXRfZXZlbnRzKGFjdHgpKTsKKwkJbXV4X2lzX25vdF9yZWFkeShh Y3R4LT5tdXgsICJ3aGVuIGZkIGlzIGRyYWluZWQiKTsKKworCQkvKiBVbmRvIGFueSB1bmlkaXJl Y3Rpb25hbCBlbXVsYXRpb24uICovCisJCWlmIChiaWRpcmVjdGlvbmFsKQorCQkJQXNzZXJ0KGRy YWluX3BpcGUod2ZkLCBiaWRpX3BpcGVfc2l6ZSkpOworCisJCS8qIExpc3RlbiBvbiB0aGUgd3Jp dGUgc2lkZS4gQW4gZW1wdHkgYnVmZmVyIHNob3VsZCBiZSB3cml0YWJsZS4gKi8KKwkJQXNzZXJ0 KHJlZ2lzdGVyX3NvY2tldChOVUxMLCByZmQsIENVUkxfUE9MTF9SRU1PVkUsIGFjdHgsIE5VTEwp ID09IDApOworCQlBc3NlcnQocmVnaXN0ZXJfc29ja2V0KE5VTEwsIHdmZCwgb3V0X2V2ZW50LCBh Y3R4LCBOVUxMKSA9PSAwKTsKKwkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3 aGVuIGZkIGlzIHdyaXRhYmxlIik7CisKKwkJLyogQXMgYWJvdmUsIHdhaXQgb24gcmVhZCBldmVu dHMgaW5zdGVhZC4gKi8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIENVUkxf UE9MTF9JTiwgYWN0eCwgTlVMTCkgPT0gMCk7CisJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4 LCAid2hlbiB3YWl0aW5nIGZvciByZWFkcyBvbiB3cml0YWJsZSBmZCIpOworCisJCS8qIFJlLXJl Z2lzdGVyIGZvciB3cml0ZSBldmVudHMuICovCisJCUFzc2VydChyZWdpc3Rlcl9zb2NrZXQoTlVM TCwgd2ZkLCBvdXRfZXZlbnQsIGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfcmVhZHkoYWN0 eC0+bXV4LCBkZWFkbGluZSwgIndoZW4gd2FpdGluZyBmb3Igd3JpdGVzIGFnYWluIik7CisKKwkJ eworCQkJc3NpemVfdAkJd3JpdHRlbjsKKworCQkJLyoKKwkJCSAqIEZpbGwgdGhlIHBpcGUuIE9u Y2UgdGhlIG9sZCB3cml0YWJsZSBldmVudCBpcyBkcmFpbmVkLCB0aGUgbXV4CisJCQkgKiBzaG91 bGQgbm90IGJlIHJlYWR5LgorCQkJICovCisJCQlBc3NlcnQoKHdyaXR0ZW4gPSBmaWxsX3BpcGUo d2ZkKSkgPiAwKTsKKwkJCXByaW50ZigiIyBwaXBlIGJ1ZmZlciBpcyBmdWxsIGF0ICV6ZCBieXRl c1xuIiwgd3JpdHRlbik7CisKKwkJCUFzc2VydChkcmFpbl9zb2NrZXRfZXZlbnRzKGFjdHgpKTsK KwkJCW11eF9pc19ub3RfcmVhZHkoYWN0eC0+bXV4LCAid2hlbiBmZCBidWZmZXIgaXMgZnVsbCIp OworCisJCQkvKiBEcmFpbiB0aGUgcGlwZSBhZ2Fpbi4gKi8KKwkJCUFzc2VydChkcmFpbl9waXBl KHJmZCwgd3JpdHRlbikpOworCQkJbXV4X2lzX3JlYWR5KGFjdHgtPm11eCwgZGVhZGxpbmUsICJ3 aGVuIGZkIGJ1ZmZlciBpcyBkcmFpbmVkIik7CisJCX0KKworCQkvKiBTdG9wIGxpc3RlbmluZy4g Ki8KKwkJQXNzZXJ0KHJlZ2lzdGVyX3NvY2tldChOVUxMLCB3ZmQsIENVUkxfUE9MTF9SRU1PVkUs IGFjdHgsIE5VTEwpID09IDApOworCQltdXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4g ZmQgaXMgcmVtb3ZlZCIpOworCisJCS8qIE1ha2Ugc3VyZSBhbiBleHBpcmVkIHRpbWVyIGRvZXNu J3QgaW50ZXJmZXJlIHdpdGggZXZlbnQgZHJhaW5pbmcuICovCisJCXsKKwkJCS8qIE1ha2UgdGhl IHJmZCBhcHBlYXIgdW5pZGlyZWN0aW9uYWwgaWYgbmVjZXNzYXJ5LiAqLworCQkJaWYgKGJpZGly ZWN0aW9uYWwpCisJCQkJQXNzZXJ0KChiaWRpX3BpcGVfc2l6ZSA9IGZpbGxfcGlwZShyZmQpKSA+ IDApOworCisJCQkvKiBTZXQgdGhlIHRpbWVyIGFuZCB3YWl0IGZvciBpdCB0byBleHBpcmUuICov CisJCQlBc3NlcnQoc2V0X3RpbWVyKGFjdHgsIDApKTsKKwkJCUFzc2VydChQUXNvY2tldFBvbGwo YWN0eC0+dGltZXJmZCwgMSwgMCwgZGVhZGxpbmUpID4gMCk7CisJCQlpcyh0aW1lcl9leHBpcmVk KGFjdHgpLCAxLCAidGltZXIgaXMgZXhwaXJlZCIpOworCisJCQkvKiBSZWdpc3RlciBmb3IgcmVh ZCBldmVudHMgYW5kIG1ha2UgdGhlIGZkIHJlYWRhYmxlLiAqLworCQkJQXNzZXJ0KHJlZ2lzdGVy X3NvY2tldChOVUxMLCByZmQsIGluX2V2ZW50LCBhY3R4LCBOVUxMKSA9PSAwKTsKKwkJCUFzc2Vy dCh3cml0ZSh3ZmQsICJ4IiwgMSkgPT0gMSk7CisJCQltdXhfaXNfcmVhZHkoYWN0eC0+bXV4LCBk ZWFkbGluZSwgIndoZW4gZmQgaXMgcmVhZGFibGUgYW5kIHRpbWVyIGV4cGlyZWQiKTsKKworCQkJ LyoKKwkJCSAqIERyYWluaW5nIHRoZSBwaXBlIHNob3VsZCB1bnNldCB0aGUgbXVsdGlwbGV4ZXIg YWdhaW4sIG9uY2UgdGhlCisJCQkgKiBvbGQgZXZlbnQgaXMgZHJhaW5lZCBhbmQgdGhlIHRpbWVy IGlzIHJlc2V0LgorCQkJICoKKwkJCSAqIE9yZGVyIG1hdHRlcnMgdG8gYXZvaWQgZmFsc2UgbmVn YXRpdmVzLiBGaXJzdCBkcmFpbiB0aGUgc29ja2V0LAorCQkJICogdGhlbiB1bnNldCB0aGUgdGlt ZXIuIFdlJ3JlIHRyeWluZyB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUKKwkJCSAqIHBlbmRp bmcgdGltZXIgZXhwaXJhdGlvbiBldmVudCB0YWtlcyB0aGUgcGxhY2Ugb2Ygb25lIG9mIHRoZQor CQkJICogc29ja2V0IGV2ZW50cyB3ZSdyZSBhdHRlbXB0aW5nIHRvIGRyYWluLgorCQkJICovCisJ CQlBc3NlcnQoZHJhaW5fcGlwZShyZmQsIDEpKTsKKwkJCUFzc2VydChkcmFpbl9zb2NrZXRfZXZl bnRzKGFjdHgpKTsKKwkJCUFzc2VydChzZXRfdGltZXIoYWN0eCwgLTEpKTsKKworCQkJaXModGlt ZXJfZXhwaXJlZChhY3R4KSwgMCwgInRpbWVyIGlzIG5vIGxvbmdlciBleHBpcmVkIik7CisJCQlt dXhfaXNfbm90X3JlYWR5KGFjdHgtPm11eCwgIndoZW4gZmQgaXMgZHJhaW5lZCBhbmQgdGltZXIg cmVzZXQiKTsKKworCQkJLyogU3RvcCBsaXN0ZW5pbmcuICovCisJCQlBc3NlcnQocmVnaXN0ZXJf c29ja2V0KE5VTEwsIHJmZCwgQ1VSTF9QT0xMX1JFTU9WRSwgYWN0eCwgTlVMTCkgPT0gMCk7CisK KwkJCS8qIFVuZG8gYW55IHVuaWRpcmVjdGlvbmFsIGVtdWxhdGlvbi4gKi8KKwkJCWlmIChiaWRp cmVjdGlvbmFsKQorCQkJCUFzc2VydChkcmFpbl9waXBlKHdmZCwgYmlkaV9waXBlX3NpemUpKTsK KwkJfQorCX0KKworCWNsb3NlKHJmZCk7CisJY2xvc2Uod2ZkKTsKKwlmcmVlX3Rlc3RfYWN0eChh Y3R4KTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3Qg Y2hhciAqdGltZW91dDsKKworCS8qIEdyYWIgdGhlIGRlZmF1bHQgdGltZW91dC4gKi8KKwl0aW1l b3V0ID0gZ2V0ZW52KCJQR19URVNUX1RJTUVPVVRfREVGQVVMVCIpOworCWlmICh0aW1lb3V0KQor CXsKKwkJaW50CQkJdGltZW91dF9zID0gYXRvaSh0aW1lb3V0KTsKKworCQlpZiAodGltZW91dF9z ID4gMCkKKwkJCXRpbWVvdXRfdXMgPSB0aW1lb3V0X3MgKiAxMDAwICogMTAwMDsKKwl9CisKKwkv KgorCSAqIFNldCB1cCBsaW5lIGJ1ZmZlcmluZyBmb3Igb3VyIG91dHB1dCwgdG8gbGV0IHN0ZGVy ciBpbnRlcmxlYXZlIGluIHRoZQorCSAqIGxvZyBmaWxlcy4KKwkgKi8KKwlzZXR2YnVmKHN0ZG91 dCwgTlVMTCwgUEdfSU9MQkYsIDApOworCisJdGVzdF9zZXRfdGltZXIoKTsKKwl0ZXN0X3JlZ2lz dGVyX3NvY2tldCgpOworCisJcHJpbnRmKCIxLi4lZFxuIiwgbnVtX3Rlc3RzKTsKKwlyZXR1cm4g MDsKK30KKworI2Vsc2UJCQkJCQkJLyogIVVTRV9BU1NFUlRfQ0hFQ0tJTkcgKi8KKworLyoKKyAq IFNraXAgdGhlIHRlc3Qgc3VpdGUgd2hlbiB3ZSBkb24ndCBoYXZlIGFzc2VydGlvbnMuCisgKi8K K2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByaW50ZigiMS4uMCAjIHNr aXA6IGNhc3NlcnQgaXMgbm90IGVuYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRp ZgkJCQkJCQkvKiBVU0VfQVNTRVJUX0NIRUNLSU5HICovCi0tIAoyLjM0LjEKCg== --000000000000bbfad4063b037938--