Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAIMk-002FE2-0p for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 02:10:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAIMi-003vEd-2h for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 02:10:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAIMi-003vEV-1N for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 02:10:00 +0000 Received: from mail-dy1-x1336.google.com ([2607:f8b0:4864:20::1336]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAIMf-00000001Dmp-2nog for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 02:10:00 +0000 Received: by mail-dy1-x1336.google.com with SMTP id 5a478bee46e88-2cbc50e6a36so413606eec.3 for ; Tue, 07 Apr 2026 19:09:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775614196; cv=none; d=google.com; s=arc-20240605; b=HCViwdonUF0W2i/gaq1ZhN0Y7ZBoKwjVud/pHni3aC2ltDf7hKlL+R/ZqF3vjcMhqp RJsftOAR8sM97gLcWD984KU+UDYbZ2uPfOYqpKwFbdiWbhat064Dd4zifjbPZhgVhFQj nLeSMqzobiwust2LtfeObFm96LJV2gfY3o/zbd41FuD2bHtkyldcZRQbQBERQjIRrc41 hEovBbr5O0IHFYNRloVuA27uxNOthLXhm+zeEGC/N2Enileq8p8KR8neNtYpDYw1ndgL 4+TW1EzHFkE1/uYwjpRiN9P8jr6iaUS+DvVD73fXWWb1AtcDTEeXYASXOqQX46MDqrtw OpxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=pYcrcdR7aRZNdQeisop+t9dY9PyxWLAwRoHAfDwtJLM=; fh=JQzQjMlVRqNRupuMbbcXYc4K9MN9YOA0zD7qA62xPQE=; b=QBHzpM1WhojunXUy0tv23LlT2PY1Yxro79ZplOcnnZ4G1rYS2VvjoaztqWB7kidk3I 0TkIC+9J0LrBN+dws2jZvr0wFkrU3O1Mf5NDu0CHspTnDGih1CE2ddHHVIQt0UIZmEj+ 5v2TOHHIa9QimCHUHbk16qVaoruduk57Q1tCkdhr2nUekVyQBJS3Vq4tRsdw0zHiimoy 4CZ2wNt18abjjk1pVCFl8SuEHOTDwvm1AnfcIoCceXMeubsoJqXjViDanAXUh4NXZEUq 8kBsuTruqeAnxnAl24DEEXS0MQkpLkYcxk2gjyiKa2fQDUxbT18G13ksl0WB3SlJifL/ ckjg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775614196; x=1776218996; 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=pYcrcdR7aRZNdQeisop+t9dY9PyxWLAwRoHAfDwtJLM=; b=Z7IGkjWbMZ7BYngsimuIevugQ2ucRhxovaDq8aUsFVV9d/EWIoACJiYQ7Kbf2CHgAD pTs8v6SX5NkmT06sGvxKUQNXAcf4x1Fq8JrwkMe5t5SZn+5PrtneWrVnRSYldOhcZVc9 LBtQ1NOlEjDn1vMHQi1wMI1TgCAZ+nvyb2NKZCgq/ON9Vo/Z8t+rDBIqELpwEat0OSTF JNVrapXcLBQcbcsFfTamEUtedk58Bb8FPOBUlui9yqi34p3UnZ+37Df4borfCIv1bDK8 5+DT+/enwHCAKpusRUBsi/sloYw6VJOGF6zQ2ScDMekAqrVPJU445n2cxmGoveWA3xH3 mnOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775614196; x=1776218996; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=pYcrcdR7aRZNdQeisop+t9dY9PyxWLAwRoHAfDwtJLM=; b=jXNpy+AR3sKJ4SEhnXB3U0Tj2MewitvsHoBNBPAvY/Dwy+9Q5t9viTSVVuDRRipG/8 aBXguxcgCgRQ3FrBl/x5hk7zDBlZoRwb+9jDj0RiKOWg2RAClfj6PrunJSRl0/by0E/A /KGCNqTh7EP5cjtfMBWx7cEIj9+hBNqFFm5ZDSjnQZ8uO9lieeGqVcrYJWYmMblWafRx sDwQa+tLCj9+TB+XXP9vWLvZaMdGN3hBMvHc4xXkZzq7mXHoHpZgSGoDBPZxFX1Wp2i+ V1M+NiJ++Cg0lJGXXTr2OGibc+TynMQ63/DnIU7GcdvCA1xdj2j9onnmkNwCAARnlp7V zk8w== X-Forwarded-Encrypted: i=1; AJvYcCUZMRZ9gB+rg2ab2b/40LupPkAmeyT374Q7VxzJUQmyiuvH+acI3z2GTsNVC97ztgbT2RvUQkfiIRCAnB8u@lists.postgresql.org X-Gm-Message-State: AOJu0Yz8cL0gfJT2YvjuLP0LFUP9FqRSy8joKDeMqKKlqY9BGmr6PJPI pjs1pvVfhCJxVRub3+Kv8ua6g4poGET4MGN9OFlIgI1SolzSaIt8RtDmbqvLfzcgntl3xdEwnW7 HSpOVsvOAd/7xL2ZBcvDx9A9TJNl+EcU= X-Gm-Gg: AeBDieuXiwanQbNgyOy3N5kPx2XK+KoSCXC2zFFdEAAtRJjvhKkHSFjq4uw8i590KdY Eo9wSYC2YcJFM9lUdVdFzVtgUZ/qYDCvnlKxRU/CLyC3/CqQmtXVb3Ppuu7UYH0rW3g9eE+K9Wq 5pcz/hogWutg7R1YKHC5qw6guXwVcC2fU+ZocH50DDjauFrUbhsHh86rhgaScgKb6GtBi/tUZOV 9LgefhayjZRx0Ml0Opq8u3aktUAz93OStZASXkf8CAiQkczmQk0vzqgaXW2tKo3HIocDRmiK7GO B48S3jRUsk078mG/rN0Aqwpqqai9jR0VbqthmVcU48ulXdbv1MGDD2LsNBQdqxm26VzQpEuaO7M = X-Received: by 2002:a05:7301:d1b:b0:2bd:db75:c28b with SMTP id 5a478bee46e88-2cbfcd54f9bmr4677837eec.7.1775614195654; Tue, 07 Apr 2026 19:09:55 -0700 (PDT) MIME-Version: 1.0 References: <20260328095204.5tsq5bldugeumrtf@erthalion> <4vhrgxmx5w4cjr7vgegur3hbkuojt2iz23v4dqfypsgvl5bszi@xrxefkkcxdja> In-Reply-To: <4vhrgxmx5w4cjr7vgegur3hbkuojt2iz23v4dqfypsgvl5bszi@xrxefkkcxdja> From: Thomas Munro Date: Wed, 8 Apr 2026 14:09:16 +1200 X-Gm-Features: AQROBzDdS02FvpEI3Tm4En5NsX6A8QOlubim8DqJoKWKIE4KbOf_3Mj5cGsx4MU Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Andres Freund Cc: Dmitry Dolgov <9erthalion6@gmail.com>, PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000646f87064ee9655c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000646f87064ee9655c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 8, 2026 at 12:30=E2=80=AFPM Andres Freund = wrote: > On 2026-04-08 11:18:51 +1200, Thomas Munro wrote: > > > /* Choose one worker to wake for this batch. */ > > > if (worker =3D=3D -1) > > > worker =3D pgaio_worker_choose_idle(-1); > > > > Well I didn't want to wake a worker if we'd failed to enqueue > > anything. > > I think it's worth waking up workers if there are idle ones and the queue= is > full? True, but I prefer to test nsync because there is another reason to break: commit 29a0fb215779d10fae0cbeb8ce57805f244bad9b Author: Tomas Vondra Date: Wed Mar 11 12:11:04 2026 +0100 Conditional locking in pgaio_worker_submit_internal I haven't finished digesting that commit, and will follow up shortly on that topic once this patch is in. > I suspect the primary reasonis that pgaio_worker_request_grow() is trigge= red > even when io_worker_control->nworkers is >=3D io_max_workers. Yeah. V6 already addressed that directly. > I suspect there's also pingpong between submission not finding any worker= s > idle, requesting growth, and workers being idle for a short period, then = the > same thing starting again. > > Seems like there should be two fields. One saying "notify postmaster agai= n" > and one "postmaster start a worker". The former would only be cleared by > postmaster after the timeout. Good idea. V7 has two tweaks: * separate grow and grow_signal_sent flags, as you suggested * it also applies the io_worker_launch_delay to cancelled grow requests This seems to work pretty well for avoiding useless postmaster wakeups. You get a few due to cancelled grow requests, but not more frequently than than io_worker_launch_delay allows, while the pool is vacillating during workload changes. It soon makes its mind up and stabilises on a good size. To be clear, there is no change in overall effect, only a reduction in useless wakeups. I retested the value of request cancellation. If you comment that call out, we do tend to overshoot, so I think it's worth having. But you were quite right to complain about the postmaster wakeup rate it produced. > > Our goal is simple: process every IO immediately. We have immediate > > feedback that is simple: there's an IO in the queue and there is no > > idle worker. The only action we can take is simple: add one more > > worker. So we don't need to suffer through the maths required to > > figure out the ideal k for our M/G/k queue system (I think that's what > > we have?) or any of the inputs that would require*. The problem is > > that on its own, the test triggered far too easily because a worker > > that is not marked idle might in fact be just about to pick up that IO > > Is that case really concerning? As long as you have some rate limiting ab= out > the start rate, starting another worker when there are no idle workers se= ems > harmless? Afaict it's fairly self limiting. I retested without the depth test and I continue to think we need it. Without it, the pool overshoots by quite a lot. You should be able to set io_max_workers=3D32 without fear of creating a ton of useless worker processes no matter what your workload. > > on the one the one hand, and because there might be rare > > spikes/clustering on the other, so I cooled it off a bit by > > additionally testing if the queue appears to be growing or spiking > > beyond some threshold. I think it's OK to let the queue grow a bit > > before we are triggered anyway, so the precise value used doesn't seem > > too critical. Someone might be able to come up with a more defensible > > value, but in the end I just wanted a value that isn't triggered by > > the outliers I see in real systems that are keeping up. We could tune > > it lower and overshoot more, but this setting seems to work pretty > > well. It doesn't seem likely that a real system could achieve a > > steady state that is introducing latency but isn't increasing over > > time, and pool size adjustments are bound to lag anyway. > > Yea, I don't think the precise logic matters that much as long as we ramp= up > reasonably fast without being crazy and ramp up a bit faster. Cool. --000000000000646f87064ee9655c Content-Type: text/x-patch; charset="US-ASCII"; name="v7-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v7-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpeqzhj0 RnJvbSBmNGJhNDA1NDhmNzJhMGE2ZmZiMDA2OTE0ZDgyMGE1Mzc0ZmNjN2ZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHY3 XSBhaW86IEFkanVzdCBJL08gd29ya2VyIHBvb2wgc2l6ZSBhdXRvbWF0aWNhbGx5LgoKVGhlIHNp emUgb2YgdGhlIEkvTyB3b3JrZXIgcG9vbCB1c2VkIHRvIGltcGxlbWVudCBpb19tZXRob2Q9d29y a2VyIHdhcwpwcmV2aW91c2x5IGNvbnRyb2xsZWQgYnkgdGhlIGlvX3dvcmtlcnMgc2V0dGluZywg ZGVmYXVsdGluZyB0byAzLiAgSXQKd2FzIGhhcmQgdG8ga25vdyBob3cgdG8gdHVuZSBpdCBlZmZl Y3RpdmVseS4gIEl0IGlzIG5vdyByZXBsYWNlZCB3aXRoOgoKICBpb19taW5fd29ya2Vycz0yCiAg aW9fbWF4X3dvcmtlcnM9OCAodXAgdG8gMzIpCiAgaW9fd29ya2VyX2lkbGVfdGltZW91dD02MHMK ICBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsPTEwMG1zCgpUaGUgcG9vbCBpcyBhdXRvbWF0aWNh bGx5IHNpemVkIHdpdGhpbiB0aGUgY29uZmlndXJlZCByYW5nZSBhY2NvcmRpbmcgdG8KcmVjZW50 IHZhcmlhdGlvbiBpbiBkZW1hbmQuICBJdCBncm93cyB3aGVuIGV4aXN0aW5nIHdvcmtlcnMgZGV0 ZWN0IGEKYmFja2xvZywgYW5kIHNocmlua3Mgd2hlbiB0aGUgaGlnaGVzdCBudW1iZXJlZCB3b3Jr ZXIgaXMgaWRsZSBmb3IgdG9vCmxvbmcuICBXb3JrIHdhcyBhbHJlYWR5IGNvbmNlbnRyYXRlZCBp bnRvIGxvdy1udW1iZXJlZCB3b3JrZXJzIGluCmFudGljaXBhdGlvbiBvZiB0aGlzIGxvZ2ljLgoK VGhlIGxvZ2ljIGZvciB3YWtpbmcgZXh0cmEgd29ya2VycyBub3cgYWxzbyB0cmllcyB0byBtZWFz dXJlIGFuZCByZWR1Y2UKdGhlIG51bWJlciBvZiBzcHVyaW91cyB3YWtldXBzLCB0aG91Z2ggdGhl eSBhcmUgbm90IGVudGlyZWx5IGVsaW1pbmF0ZWQuCgpSZXZpZXdlZC1ieTogRG1pdHJ5IERvbGdv diA8OWVydGhhbGlvbjZAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5k cmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVL RyUyQm00eFYwTE1vSDJjJTNEb1JBZEVYdUNuaCUyQnRHQlRXYTd1RmVGTUdnVExBdyUyQlElNDBt YWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICA2OSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAg ICAgICAgIHwgMTc3ICsrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2Vy LmMgICAgICAgfCA2MzEgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDM0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29y a2VyLmggICAgICAgICAgICAgICB8ICAxMSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAy X2lvX3dvcmtlcnMucGwgfCAgMTUgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA4MDEgaW5zZXJ0aW9ucygr KSwgMTQ2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dt bCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAyYzQxMDZlZTlhYi4uMWM4YjhlN2Yz ZTIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTI5NDIsMTYgKzI5NDIsNzUgQEAgaW5jbHVkZV9kaXIgJ2NvbmYu ZCcKICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX3dvcmtlcnMiPgot ICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1taW4td29ya2VycyIgeHJl ZmxhYmVsPSJpb19taW5fd29ya2VycyI+CisgICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWluX3dv cmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAgICA8aW5kZXh0ZXJt PgotICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJzPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9f bWluX3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgog ICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgIDxwYXJhPgotICAgICAgICAgU2VsZWN0cyB0aGUgbnVtYmVyIG9mIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKLSAgICAgICAgIDMuIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gbnVt YmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLiBUaGUgZGVmYXVsdCBpcworICAgICAgICAgMi4g VGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZQorICAgICAgICAgPGZpbGVuYW1l PnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5k CisgICAgICAgICBsaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAg ICAgT25seSBoYXMgYW4gZWZmZWN0IGlmIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pby1tZXRob2QiLz4g aXMgc2V0IHRvCisgICAgICAgICA8bGl0ZXJhbD53b3JrZXI8L2xpdGVyYWw+LgorICAgICAgICA8 L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWlvLW1heC13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX21heF93 b3JrZXJzIj4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb19tYXhfd29ya2VyczwvdmFybmFtZT4g KDx0eXBlPmludDwvdHlwZT4pCisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy PC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0aGUgbWF4aW11bSBudW1i ZXIgb2YgSS9PIHdvcmtlciBwcm9jZXNzZXMuIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICA4LiBU aGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgICA8ZmlsZW5hbWU+ cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyIGNvbW1hbmQK KyAgICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWlvLW1ldGhvZCIvPiBp cyBzZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJhbD4uCisgICAgICAgIDwv cGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWlkbGUtdGltZW91dCIgeHJlZmxhYmVsPSJp b193b3JrZXJfaWRsZV90aW1lb3V0Ij4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb193b3JrZXJf aWRsZV90aW1lb3V0PC92YXJuYW1lPiAoPHR5cGU+aW50PC90eXBlPikKKyAgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJfaWRsZV90aW1lb3V0PC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4 dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4K KyAgICAgICAgIFNldHMgdGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZW50aXJlbHkgaWRsZSBJL08gd29y a2VyIHByb2Nlc3NlcyBleGl0LCByZWR1Y2luZyB0aGUKKyAgICAgICAgIHNpemUgb2YgcG9vbCB0 byBtYXRjaCBkZW1hbmQuICBUaGUgZGVmYXVsdCBpcyAxIG1pbnV0ZS4gIFRoaXMKKyAgICAgICAg IHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgICA8ZmlsZW5hbWU+cG9z dGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyIGNvbW1hbmQKKyAg ICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBP bmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWlvLW1ldGhvZCIvPiBpcyBz ZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFy YT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFy bGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWxhdW5jaC1pbnRlcnZhbCIgeHJlZmxhYmVsPSJp b193b3JrZXJfbGF1bmNoX2ludGVydmFsIj4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb193b3Jr ZXJfbGF1bmNoX2ludGVydmFsPC92YXJuYW1lPiAoPHR5cGU+aW50PC90eXBlPikKKyAgICAgICA8 aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJfbGF1bmNoX2lu dGVydmFsPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gdGltZSBiZWZvcmUgYW5vdGhlciBJ L08gd29ya2VyIGNhbiBiZSBsYXVuY2hlZC4gIFRoaXMgYXZvaWRzCisgICAgICAgICBjcmVhdGlu ZyB0b28gbWFueSBmb3IgYW4gdW5zdXN0YWluZWQgYnVyc3Qgb2YgYWN0aXZpdHkuICBUaGUgZGVm YXVsdCBpcyAxMDBtcy4KKyAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBp biB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxl IG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAogICAgICAgICAgbGluZS4KICAgICAgICAgPC9wYXJh PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBhZTgyOTc0NzAwNC4uNzg1MWJm MTYwMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MDksNiArNDA5LDcg QEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9IE5VTEw7CiAjZW5kaWYKIAog LyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLworc3RhdGljIFRpbWVzdGFtcFR6 IGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0gMDsKIHN0YXRpYyBpbnQJaW9fd29ya2VyX2Nv dW50ID0gMDsKIHN0YXRpYyBQTUNoaWxkICppb193b3JrZXJfY2hpbGRyZW5bTUFYX0lPX1dPUktF UlNdOwogCkBAIC00NDcsNyArNDQ4LDggQEAgc3RhdGljIGludAlDb3VudENoaWxkcmVuKEJhY2tl bmRUeXBlTWFzayB0YXJnZXRNYXNrKTsKIHN0YXRpYyB2b2lkIExhdW5jaE1pc3NpbmdCYWNrZ3Jv dW5kUHJvY2Vzc2VzKHZvaWQpOwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZv aWQpOwogc3RhdGljIGJvb2wgbWF5YmVfcmVhcF9pb193b3JrZXIoaW50IHBpZCk7Ci1zdGF0aWMg dm9pZCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKTsKK3N0YXRpYyB2b2lkIG1heWJlX3N0 YXJ0X2lvX3dvcmtlcnModm9pZCk7CitzdGF0aWMgVGltZXN0YW1wVHogbWF5YmVfc3RhcnRfaW9f d29ya2Vyc19zY2hlZHVsZWRfYXQodm9pZCk7CiBzdGF0aWMgYm9vbCBDcmVhdGVPcHRzRmlsZShp bnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICpmdWxscHJvZ25hbWUpOwogc3RhdGljIFBNQ2hp bGQgKlN0YXJ0Q2hpbGRQcm9jZXNzKEJhY2tlbmRUeXBlIHR5cGUpOwogc3RhdGljIHZvaWQgU3Rh cnRTeXNMb2dnZXIodm9pZCk7CkBAIC0xMzkxLDcgKzEzOTMsNyBAQCBQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCVVwZGF0ZVBNU3RhdGUoUE1fU1RBUlRVUCk7CiAKIAkv KiBNYWtlIHN1cmUgd2UgY2FuIHBlcmZvcm0gSS9PIHdoaWxlIHN0YXJ0aW5nIHVwLiAqLwotCW1h eWJlX2FkanVzdF9pb193b3JrZXJzKCk7CisJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwogCiAJ LyogU3RhcnQgYmd3cml0ZXIgYW5kIGNoZWNrcG9pbnRlciBzbyB0aGV5IGNhbiBoZWxwIHdpdGgg cmVjb3ZlcnkgKi8KIAlpZiAoQ2hlY2twb2ludGVyUE1DaGlsZCA9PSBOVUxMKQpAQCAtMTU1NSwx NCArMTU1NywxNSBAQCBjaGVja0NvbnRyb2xGaWxlKHZvaWQpCiBzdGF0aWMgaW50CiBEZXRlcm1p bmVTbGVlcFRpbWUodm9pZCkKIHsKLQlUaW1lc3RhbXBUeiBuZXh0X3dha2V1cCA9IDA7CisJVGlt ZXN0YW1wVHogbmV4dF93YWtldXA7CiAKIAkvKgotCSAqIE5vcm1hbCBjYXNlOiBlaXRoZXIgdGhl cmUgYXJlIG5vIGJhY2tncm91bmQgd29ya2VycyBhdCBhbGwsIG9yIHdlJ3JlIGluCi0JICogYSBz aHV0ZG93biBzZXF1ZW5jZSAoZHVyaW5nIHdoaWNoIHdlIGlnbm9yZSBiZ3dvcmtlcnMgYWx0b2dl dGhlcikuCisJICogSWYgaW4gSW1tZWRpYXRlU2h1dGRvd24gd2l0aCBhIFNJR0tJTEwgdGltZW91 dCwgaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQorCSAqIGFuZCB3YWl0IGZvciB0aGF0LgorCSAqCisJ ICogWFhYIFNob3VsZG4ndCB0aGlzIGFsc28gdGVzdCBGYXRhbEVycm9yPwogCSAqLwotCWlmIChT aHV0ZG93biA+IE5vU2h1dGRvd24gfHwKLQkJKCFTdGFydFdvcmtlck5lZWRlZCAmJiAhSGF2ZUNy YXNoZWRXb3JrZXIpKQorCWlmIChTaHV0ZG93biA+PSBJbW1lZGlhdGVTaHV0ZG93bikKIAl7CiAJ CWlmIChBYm9ydFN0YXJ0VGltZSAhPSAwKQogCQl7CkBAIC0xNTgyLDE0ICsxNTg1LDE2IEBAIERl dGVybWluZVNsZWVwVGltZSh2b2lkKQogCiAJCQlyZXR1cm4gc2Vjb25kcyAqIDEwMDA7CiAJCX0K LQkJZWxzZQotCQkJcmV0dXJuIDYwICogMTAwMDsKIAl9CiAKLQlpZiAoU3RhcnRXb3JrZXJOZWVk ZWQpCisJLyogVGltZSBvZiBuZXh0IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSBjYWxsLCBvciAw IGZvciBub25lLiAqLworCW5leHRfd2FrZXVwID0gbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hl ZHVsZWRfYXQoKTsKKworCS8qIElnbm9yZSBiZ3dvcmtlcnMgZHVyaW5nIHNodXRkb3duLiAqLwor CWlmIChTdGFydFdvcmtlck5lZWRlZCAmJiBTaHV0ZG93biA9PSBOb1NodXRkb3duKQogCQlyZXR1 cm4gMDsKIAotCWlmIChIYXZlQ3Jhc2hlZFdvcmtlcikKKwlpZiAoSGF2ZUNyYXNoZWRXb3JrZXIg JiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAl7CiAJCWRsaXN0X211dGFibGVfaXRlciBpdGVy OwogCkBAIC0yNTQ1LDcgKzI1NTAsMTcgQEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJ CQlpZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykgJiYgIUVYSVRfU1RBVFVTXzEoZXhpdHN0 YXR1cykpCiAJCQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQsIGV4aXRzdGF0dXMsIF8oImlvIHdvcmtl ciIpKTsKIAotCQkJbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnMoKTsKKwkJCS8qCisJCQkgKiBBIHdv cmtlciB0aGF0IGV4aXRlZCB3aXRoIGFuIGVycm9yIG1pZ2h0IGhhdmUgYnJvdWdodCB0aGUgcG9v bAorCQkJICogc2l6ZSBiZWxvdyBpb19taW5fd29ya2Vycywgb3IgYWxsb3dlZCB0aGUgcXVldWUg dG8gZ3JvdyB0byB0aGUKKwkJCSAqIHBvaW50IHdoZXJlIGFub3RoZXIgd29ya2VyIGNhbGxlZCBm b3IgZ3Jvd3RoLgorCQkJICoKKwkJCSAqIEluIHRoZSBjb21tb24gY2FzZSB0aGF0IGEgd29ya2Vy IHRpbWVkIG91dCBkdWUgdG8gaWRsZW5lc3MsIG5vCisJCQkgKiByZXBsYWNlbWVudCBuZWVkcyB0 byBiZSBzdGFydGVkLiAgbWF5YmVfc3RhcnRfaW9fd29ya2VycygpIHdpbGwKKwkJCSAqIGZpZ3Vy ZSB0aGF0IG91dC4KKwkJCSAqLworCQkJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOworCiAJCQlj b250aW51ZTsKIAkJfQogCkBAIC0zMjY1LDcgKzMyODAsNyBAQCBQb3N0bWFzdGVyU3RhdGVNYWNo aW5lKHZvaWQpCiAJCVVwZGF0ZVBNU3RhdGUoUE1fU1RBUlRVUCk7CiAKIAkJLyogTWFrZSBzdXJl IHdlIGNhbiBwZXJmb3JtIEkvTyB3aGlsZSBzdGFydGluZyB1cC4gKi8KLQkJbWF5YmVfYWRqdXN0 X2lvX3dvcmtlcnMoKTsKKwkJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwogCiAJCVN0YXJ0dXBQ TUNoaWxkID0gU3RhcnRDaGlsZFByb2Nlc3MoQl9TVEFSVFVQKTsKIAkJQXNzZXJ0KFN0YXJ0dXBQ TUNoaWxkICE9IE5VTEwpOwpAQCAtMzMzOSw3ICszMzU0LDcgQEAgTGF1bmNoTWlzc2luZ0JhY2tn cm91bmRQcm9jZXNzZXModm9pZCkKIAkgKiBBIGNvbmZpZyBmaWxlIGNoYW5nZSB3aWxsIGFsd2F5 cyBsZWFkIHRvIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLCBzbwogCSAqIHdlIGFsd2F5cyB3 aWxsIHByb2Nlc3MgdGhlIGNvbmZpZyBjaGFuZ2UgaW4gYSB0aW1lbHkgbWFubmVyLgogCSAqLwot CW1heWJlX2FkanVzdF9pb193b3JrZXJzKCk7CisJbWF5YmVfc3RhcnRfaW9fd29ya2VycygpOwog CiAJLyoKIAkgKiBUaGUgY2hlY2twb2ludGVyIGFuZCB0aGUgYmFja2dyb3VuZCB3cml0ZXIgYXJl IGFjdGl2ZSBmcm9tIHRoZSBzdGFydCwKQEAgLTM4MDAsNiArMzgxNSwxNiBAQCBwcm9jZXNzX3Bt X3Btc2lnbmFsKHZvaWQpCiAJCVN0YXJ0V29ya2VyTmVlZGVkID0gdHJ1ZTsKIAl9CiAKKwkvKiBQ cm9jZXNzIElPIHdvcmtlciBzdGFydCByZXF1ZXN0cy4gKi8KKwlpZiAoQ2hlY2tQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9HUk9XKSkKKwl7CisJCS8qCisJCSAqIE5vIGxvY2Fs IGZsYWcsIGFzIHRoZSBzdGF0ZSBpcyBleHBvc2VkIHRocm91Z2ggcGdhaW9fd29ya2VyXyooKQor CQkgKiBmdW5jdGlvbnMuICBUaGlzIHNpZ25hbCBpcyByZWNlaXZlZCBvbiBwb3RlbnRpYWxseSBh Y3Rpb25hYmxlIGxldmVsCisJCSAqIGNoYW5nZXMsIHNvIHRoYXQgbWF5YmVfc3RhcnRfaW9fd29y a2VycygpIHdpbGwgcnVuLgorCQkgKi8KKwl9CisKIAkvKiBQcm9jZXNzIGJhY2tncm91bmQgd29y a2VyIHN0YXRlIGNoYW5nZXMuICovCiAJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05B TF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0UpKQogCXsKQEAgLTQ0MDIsNDQgKzQ0MjcsMTE1IEBA IG1heWJlX3JlYXBfaW9fd29ya2VyKGludCBwaWQpCiB9CiAKIC8qCi0gKiBTdGFydCBvciBzdG9w IElPIHdvcmtlcnMsIHRvIGNsb3NlIHRoZSBnYXAgYmV0d2VlbiB0aGUgbnVtYmVyIG9mIHJ1bm5p bmcKLSAqIHdvcmtlcnMgYW5kIHRoZSBudW1iZXIgb2YgY29uZmlndXJlZCB3b3JrZXJzLiAgVXNl ZCB0byByZXNwb25kIHRvIGNoYW5nZSBvZgotICogdGhlIGlvX3dvcmtlcnMgR1VDIChieSBpbmNy ZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygd29ya2VycyksIGFzCi0gKiB3ZWxs IGFzIHdvcmtlcnMgdGVybWluYXRpbmcgaW4gcmVzcG9uc2UgdG8gZXJyb3JzIChieSBzdGFydGlu ZwotICogInJlcGxhY2VtZW50IiB3b3JrZXJzKS4KKyAqIFJldHVybnMgdGhlIG5leHQgdGltZSBh dCB3aGljaCBtYXliZV9zdGFydF9pb193b3JrZXJzKCkgd291bGQgc3RhcnQgb25lIG9yCisgKiBt b3JlIEkvTyB3b3JrZXJzLiAgQW55IHRpbWUgaW4gdGhlIHBhc3QgbWVhbnMgQVNBUCwgYW5kIDAg bWVhbnMgbm8gd29ya2VyCisgKiBpcyBjdXJyZW50bHkgc2NoZWR1bGVkLgorICoKKyAqIFRoaXMg aXMgY2FsbGVkIGJ5IERldGVybWluZVNsZWVwVGltZSgpIGFuZCBhbHNvIG1heWJlX3N0YXJ0X2lv X3dvcmtlcnMoKQorICogaXRzZWxmLCB0byBtYWtlIHN1cmUgdGhhdCB0aGV5IGFncmVlLgogICov Ci1zdGF0aWMgdm9pZAotbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCkKK3N0YXRpYyBUaW1l c3RhbXBUegorbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hlZHVsZWRfYXQodm9pZCkKIHsKIAlp ZiAoIXBnYWlvX3dvcmtlcnNfZW5hYmxlZCgpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJ LyoKIAkgKiBJZiB3ZSdyZSBpbiBmaW5hbCBzaHV0dGluZyBkb3duIHN0YXRlLCB0aGVuIHdlJ3Jl IGp1c3Qgd2FpdGluZyBmb3IgYWxsCiAJICogcHJvY2Vzc2VzIHRvIGV4aXQuCiAJICovCiAJaWYg KHBtU3RhdGUgPj0gUE1fV0FJVF9JT19XT1JLRVJTKQotCQlyZXR1cm47CisJCXJldHVybiAwOwog CiAJLyogRG9uJ3Qgc3RhcnQgbmV3IHdvcmtlcnMgZHVyaW5nIGFuIGltbWVkaWF0ZSBzaHV0ZG93 biBlaXRoZXIuICovCiAJaWYgKFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duKQotCQlyZXR1 cm47CisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBEb24ndCBzdGFydCBuZXcgd29ya2VycyBpZiB3 ZSdyZSBpbiB0aGUgc2h1dGRvd24gcGhhc2Ugb2YgYSBjcmFzaAogCSAqIHJlc3RhcnQuIEJ1dCB3 ZSAqZG8qIG5lZWQgdG8gc3RhcnQgaWYgd2UncmUgYWxyZWFkeSBzdGFydGluZyB1cCBhZ2Fpbi4K IAkgKi8KIAlpZiAoRmF0YWxFcnJvciAmJiBwbVN0YXRlID49IFBNX1NUT1BfQkFDS0VORFMpCi0J CXJldHVybjsKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgd29ya2VyIGlm IHdlJ3JlIGF0IG9yIGFib3ZlIHRoZSBtYXhpbXVtLiAgKEV4Y2VzcyB3b3JrZXJzCisJICogZXhp dCB3aGVuIHRoZSBHVUMgaXMgbG93ZXJlZCwgYnV0IHRoZSBjb3VudCBjYW4gYmUgdGVtcG9yYXJp bHkgdG9vIGhpZ2gKKwkgKiB1bnRpbCB0aGV5IGFyZSByZWFwZWQuKQorCSAqLworCWlmIChpb193 b3JrZXJfY291bnQgPj0gaW9fbWF4X3dvcmtlcnMpCisJCXJldHVybiAwOworCisJLyogSWYgd2Un cmUgdW5kZXIgdGhlIG1pbmltdW0sIHN0YXJ0IGEgd29ya2VyIGFzIHNvb24gYXMgcG9zc2libGUu ICovCisJaWYgKGlvX3dvcmtlcl9jb3VudCA8IGlvX21pbl93b3JrZXJzKQorCQlyZXR1cm4gVElN RVNUQU1QX01JTlVTX0lORklOSVRZOwkvKiBzdGFydCB3b3JrZXIgQVNBUCAqLworCisJLyogT25s eSBwcm9jZWVkIGlmIGEgImdyb3ciIHNpZ25hbCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIGEgd29y a2VyLiAqLworCWlmICghcGdhaW9fd29ya2VyX3BtX3Rlc3RfZ3Jvd19zaWduYWxfc2VudCgpKQor CQlyZXR1cm4gMDsKIAotCUFzc2VydChwbVN0YXRlIDwgUE1fV0FJVF9JT19XT1JLRVJTKTsKKwkv KgorCSAqIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSBzaG91bGQgc3RhcnQgYSBuZXcgSS9PIHdv cmtlciBhZnRlciB0aGlzIHRpbWUsCisJICogb3IgYXMgc29vbiBhcyBwb3NzaWJsZSBpZiBpcyBh bHJlYWR5IGluIHRoZSBwYXN0LgorCSAqLworCXJldHVybiBpb193b3JrZXJfbGF1bmNoX25leHRf dGltZTsKK30KIAotCS8qIE5vdCBlbm91Z2ggcnVubmluZz8gKi8KLQl3aGlsZSAoaW9fd29ya2Vy X2NvdW50IDwgaW9fd29ya2VycykKKy8qCisgKiBTdGFydCBJL08gd29ya2VycyBpZiByZXF1aXJl ZC4gIFVzZWQgYXQgc3RhcnR1cCwgdG8gcmVzcG9uZCB0byBjaGFuZ2Ugb2YKKyAqIHRoZSBpb19t aW5fd29ya2VycyBHVUMsIHdoZW4gYXNrZWQgdG8gc3RhcnQgYSBuZXcgb25lIGR1ZSB0byBzdWJt aXNzaW9uCisgKiBxdWV1ZSBiYWNrbG9nLCBhbmQgYWZ0ZXIgd29ya2VycyB0ZXJtaW5hdGUgaW4g cmVzcG9uc2UgdG8gZXJyb3JzIChieQorICogc3RhcnRpbmcgInJlcGxhY2VtZW50IiB3b3JrZXJz KS4KKyAqLworc3RhdGljIHZvaWQKK21heWJlX3N0YXJ0X2lvX3dvcmtlcnModm9pZCkKK3sKKwlU aW1lc3RhbXBUeiBzY2hlZHVsZWRfYXQ7CisKKwl3aGlsZSAoKHNjaGVkdWxlZF9hdCA9IG1heWJl X3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KCkpICE9IDApCiAJeworCQlUaW1lc3RhbXBU eiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAJCVBNQ2hpbGQgICAgKmNoaWxkOwogCQlp bnQJCQlpOwogCisJCUFzc2VydChwbVN0YXRlIDwgUE1fV0FJVF9JT19XT1JLRVJTKTsKKworCQkv KiBTdGlsbCB3YWl0aW5nIGZvciB0aGUgc2NoZWR1bGVkIHRpbWU/ICovCisJCWlmIChzY2hlZHVs ZWRfYXQgPiBub3cpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDb21wdXRlIG5leHQgbGF1bmNo IHRpbWUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGF0CisJCSAqIHRpbWUg c3BlbnQgb24gdGhlIHBvc3RtYXN0ZXIncyBvdGhlciBkdXRpZXMgZG9uJ3QgcmVzdWx0IGluIGFu CisJCSAqIGluYWNjdXJhdGUgbGF1bmNoIGludGVydmFsLgorCQkgKi8KKwkJaW9fd29ya2VyX2xh dW5jaF9uZXh0X3RpbWUgPQorCQkJVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKGlvX3dvcmtl cl9sYXVuY2hfbmV4dF90aW1lLAorCQkJCQkJCQkJCWlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwp OworCisJCS8qCisJCSAqIENoZWNrIGlmIGEgZ3JvdyBzaWduYWwgaGFzIGJlZW4gc2VudCwgYnV0 IHRoZSBncm93IHJlcXVlc3QgaGFzIGJlZW4KKwkJICogY2FuY2VsZWQgc2luY2UgdGhlbiBiZWNh dXNlIHRoZSB3b3JrZXJzIHJhbiBvdXQgb2Ygd29yay4gIFdlJ3ZlCisJCSAqIHN0aWxsIGFkdmFu Y2VkIHRoZSBuZXh0IGxhdW5jaCB0aW1lLCBzbyB3ZSB3b24ndCBjb25zaWRlciBhbnkgbW9yZQor CQkgKiBncm93IHNpZ25hbHMgdW50aWwgdGhlbi4gIFRoYXQgcHJldmVudHMgd29ya2VycyBmcm9t IHNpZ25hbGluZyBtb3JlCisJCSAqIHRoYW4gb25jZSBpbiB0aGF0IHRpbWUgcGVyaW9kLCBiZWNh dXNlIHdlIHdvbid0IGNsZWFyCisJCSAqIGdyb3dfc2lnbmFsX3NlbnQgdW50aWwgdGhlbi4KKwkJ ICovCisJCWlmIChpb193b3JrZXJfY291bnQgPj0gaW9fbWluX3dvcmtlcnMgJiYgIXBnYWlvX3dv cmtlcl9wbV90ZXN0X2dyb3coKSkKKwkJeworCQkJcGdhaW9fd29ya2VyX3BtX2NsZWFyX2dyb3df c2lnbmFsX3NlbnQoKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhhdCdzIGFs cmVhZHkgaW4gdGhlIHBhc3QsIHRoZSBpbnRlcnZhbCBpcyBlaXRoZXIgaW1wb3NzaWJseQorCQkg KiBzaG9ydCBvciB3ZSByZWNlaXZlZCBubyByZXF1ZXN0cyBmb3IgbmV3IHdvcmtlcnMgZm9yIGEg cGVyaW9kLgorCQkgKiBDb21wdXRlIGEgbmV3IGZ1dHVyZSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBs YXN0IGxhdW5jaCB0aW1lIGluc3RlYWQuCisJCSAqLworCQlpZiAoaW9fd29ya2VyX2xhdW5jaF9u ZXh0X3RpbWUgPD0gbm93KQorCQkJaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWUgPQorCQkJCVRp bWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhub3csIGlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwp OworCiAJCS8qIGZpbmQgdW51c2VkIGVudHJ5IGluIGlvX3dvcmtlcl9jaGlsZHJlbiBhcnJheSAq LwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKIAkJewpAQCAtNDQ1Nywy MiArNDU1MywyMSBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQogCQkJKytpb193b3Jr ZXJfY291bnQ7CiAJCX0KIAkJZWxzZQotCQkJYnJlYWs7CQkJCS8qIHRyeSBhZ2FpbiBuZXh0IHRp bWUgKi8KLQl9Ci0KLQkvKiBUb28gbWFueSBydW5uaW5nPyAqLwotCWlmIChpb193b3JrZXJfY291 bnQgPiBpb193b3JrZXJzKQotCXsKLQkJLyogYXNrIHRoZSBJTyB3b3JrZXIgaW4gdGhlIGhpZ2hl c3Qgc2xvdCB0byBleGl0ICovCi0JCWZvciAoaW50IGkgPSBNQVhfSU9fV09SS0VSUyAtIDE7IGkg Pj0gMDsgLS1pKQogCQl7Ci0JCQlpZiAoaW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5VTEwpCi0J CQl7Ci0JCQkJa2lsbChpb193b3JrZXJfY2hpbGRyZW5baV0tPnBpZCwgU0lHVVNSMik7Ci0JCQkJ YnJlYWs7Ci0JCQl9CisJCQkvKgorCQkJICogRm9yayBmYWlsdXJlOiB3ZSdsbCB0cnkgYWdhaW4g YWZ0ZXIgdGhlIGxhdW5jaCBpbnRlcnZhbAorCQkJICogZXhwaXJlcywgb3IgYmUgY2FsbGVkIGFn YWluIHdpdGhvdXQgZGVsYXkgaWYgd2UgZG9uJ3QgeWV0IGhhdmUKKwkJCSAqIGlvX21pbl93b3Jr ZXJzLiAgRG9uJ3QgbG9vcCBoZXJlIHRob3VnaCwgdGhlIHBvc3RtYXN0ZXIgaGFzCisJCQkgKiBv dGhlciBkdXRpZXMuCisJCQkgKi8KKwkJCWJyZWFrOwogCQl9CiAJfQorCisJLyoKKwkgKiBXb3Jr ZXJzIGRlY2lkZSB3aGVuIHRvIHNodXQgZG93biBieSB0aGVtc2VsdmVzLCBhY2NvcmRpbmcgdG8g dGhlCisJICogaW9fbWF4X3dvcmtlcnMgYW5kIGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgR1VDcy4K KwkgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rf d29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKaW5kZXgg ZWI2ODZjZWRlMWEuLjEwYWU4YTJmYjUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9tZXRob2Rfd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9k X3dvcmtlci5jCkBAIC0xMSw5ICsxMSw4IEBACiAgKiBpbmZyYXN0cnVjdHVyZSBmb3IgcmVvcGVu aW5nIHRoZSBmaWxlLCBhbmQgbXVzdCBwcm9jZXNzZWQgc3luY2hyb25vdXNseSBieQogICogdGhl IGNsaWVudCBjb2RlIHdoZW4gc3VibWl0dGVkLgogICoKLSAqIFNvIHRoYXQgdGhlIHN1Ym1pdHRl ciBjYW4gbWFrZSBqdXN0IG9uZSBzeXN0ZW0gY2FsbCB3aGVuIHN1Ym1pdHRpbmcgYSBiYXRjaAot ICogb2YgSU9zLCB3YWtldXBzICJmYW4gb3V0IjsgZWFjaCB3b2tlbiBJTyB3b3JrZXIgY2FuIHdh a2UgdHdvIG1vcmUuIFhYWCBUaGlzCi0gKiBjb3VsZCBiZSBpbXByb3ZlZCBieSB1c2luZyBmdXRl eGVzIGluc3RlYWQgb2YgbGF0Y2hlcyB0byB3YWtlIE4gd2FpdGVycy4KKyAqIFRoZSBwb29sIG9m IHdvcmtlcnMgdHJpZXMgdG8gc3RhYmlsaXplIGF0IGEgc2l6ZSB0aGF0IGNhbiBoYW5kbGUgcmVj ZW50bHkKKyAqIHNlZW4gdmFyaWF0aW9uIGluIGRlbWFuZCwgd2l0aGluIHRoZSBjb25maWd1cmVk IGxpbWl0cy4KICAqCiAgKiBUaGlzIG1ldGhvZCBvZiBBSU8gaXMgYXZhaWxhYmxlIGluIGFsbCBi dWlsZHMgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQKICAqIGlzIHRoZSBkZWZhdWx0LgpA QCAtMjksNiArMjgsOCBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgPGxp bWl0cy5oPgorCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCkBAIC00MCw2ICs0MSw4IEBACiAj aW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgor I2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgpA QCAtNDgsMTAgKzUxLDIyIEBACiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVk ZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCisvKgorICogU2F0dXJhdGlvbiBmb3IgY291bnRlcnMg dXNlZCB0byBlc3RpbWF0ZSB3YWtldXA6SU8gcmF0aW8uCisgKgorICogV2UgbWFpbnRhaW4gaGlz dF93YWtldXBzIGZvciB3YWtldXBzIHJlY2VpdmVkIGFuZCBoaXN0X2lvcyBmb3IgSU9zCisgKiBw cm9jZXNzZWQgYnkgZWFjaCB3b3JrZXIuICBXaGVuIGVpdGhlciBjb3VudGVyIHJlYWNoZXMgdGhp cyBzYXR1cmF0aW9uCisgKiB2YWx1ZSwgd2UgZGl2aWRlIGJvdGggYnkgdHdvLiAgVGhlIHJlc3Vs dCBpcyBhbiBleHBvbmVudGlhbGx5IGRlY2F5aW5nCisgKiByYXRpbyBvZiB3YWtldXBzIHRvIElP cywgd2l0aCBhIHZlcnkgc2hvcnQgbWVtb3J5LgorICoKKyAqIElmIGEgd29ya2VyIGlzIGl0c2Vs ZiBleHBlcmllbmNpbmcgdXNlbGVzcyB3YWtldXBzLCBpdCBhc3N1bWVzIHRoYXQKKyAqIGhpZ2hl ci1udW1iZXJlZCB3b3JrZXJzIHdvdWxkIGV4cGVyaWVuY2UgZXZlbiBtb3JlLCBzbyBpdCBzaG91 bGQgZW5kIHRoZQorICogY2hhaW4uCisgKi8KKyNkZWZpbmUgUEdBSU9fV09SS0VSX1dBS0VVUF9S QVRJT19TQVRVUkFURSA0CiAKLS8qIEhvdyBtYW55IHdvcmtlcnMgc2hvdWxkIGVhY2ggd29ya2Vy IHdha2UgdXAgaWYgbmVlZGVkPyAqLwotI2RlZmluZSBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCAy Ci0KKy8qIERlYnVnZ2luZyBzdXBwb3J0OiBzaG93IGN1cnJlbnQgSU8gYW5kIHdha2V1cHM6aW9z IHN0YXRpc3RpY3MgaW4gcHMuICovCisvKiAjZGVmaW5lIFBHQUlPX1dPUktFUl9TSE9XX1BTX0lO Rk8gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKIHsKQEAg LTYzLDEzICs3OCwzNSBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1 ZQogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclNsb3QKIHsKLQlMYXRjaAkgICAqbGF0Y2g7 Ci0JYm9vbAkJaW5fdXNlOworCVByb2NOdW1iZXIJcHJvY19udW1iZXI7CiB9IFBnQWlvV29ya2Vy U2xvdDsKIAorLyoKKyAqIFNldHMgb2Ygd29ya2VyIElEcyBhcmUgaGVsZCBpbiBhIHNpbXBsZSBi aXRtYXAsIGFjY2Vzc2VkIHRocm91Z2ggZnVuY3Rpb25zCisgKiB0aGF0IHByb3ZpZGUgYSBtb3Jl IHJlYWRhYmxlIGFic3RyYWN0aW9uLiAgSWYgd2Ugd2FudGVkIHRvIHN1cHBvcnQgbW9yZQorICog d29ya2VycyB0aGFuIHRoYXQsIHRoZSBjb250ZW50aW9uIG9uIHRoZSBzaW5nbGUgcXVldWUgd291 bGQgc3VyZWx5IGdldCB0b28KKyAqIGhpZ2gsIHNvIHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIg bXVsdGlwbGUgcG9vbHMgaW5zdGVhZCBvZiB3aWRlbmluZyB0aGlzLgorICovCit0eXBlZGVmIHVp bnQ2NCBQZ0Fpb1dvcmtlclNldDsKKworI2RlZmluZSBQR0FJT19XT1JLRVJTRVRfQklUUyAoc2l6 ZW9mKFBnQWlvV29ya2VyU2V0KSAqIENIQVJfQklUKQorCitzdGF0aWNfYXNzZXJ0KFBHQUlPX1dP UktFUlNFVF9CSVRTID49IE1BWF9JT19XT1JLRVJTLCAidG9vIHNtYWxsIik7CisKIHR5cGVkZWYg c3RydWN0IFBnQWlvV29ya2VyQ29udHJvbAogewotCXVpbnQ2NAkJaWRsZV93b3JrZXJfbWFzazsK KwkvKiBTZWVuIGJ5IHBvc3RtYXN0ZXIgKi8KKwlib29sCQlncm93OworCWJvb2wJCWdyb3dfc2ln bmFsX3NlbnQ7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9j ay4gKi8KKwlQZ0Fpb1dvcmtlclNldCBpZGxlX3dvcmtlcnNldDsKKworCS8qIFByb3RlY3RlZCBi eSBBaW9Xb3JrZXJDb250cm9sTG9jay4gKi8KKwlQZ0Fpb1dvcmtlclNldCB3b3JrZXJzZXQ7CisJ aW50CQkJbndvcmtlcnM7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyQ29udHJvbExvY2su ICovCiAJUGdBaW9Xb3JrZXJTbG90IHdvcmtlcnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0g UGdBaW9Xb3JrZXJDb250cm9sOwogCkBAIC05MSwxNSArMTI4LDEwOCBAQCBjb25zdCBJb01ldGhv ZE9wcyBwZ2Fpb193b3JrZXJfb3BzID0gewogCiAKIC8qIEdVQ3MgKi8KLWludAkJCWlvX3dvcmtl cnMgPSAzOworaW50CQkJaW9fbWluX3dvcmtlcnMgPSAyOworaW50CQkJaW9fbWF4X3dvcmtlcnMg PSA4OworaW50CQkJaW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwMDAwOworaW50CQkJaW9fd29y a2VyX2xhdW5jaF9pbnRlcnZhbCA9IDEwMDsKIAogCiBzdGF0aWMgaW50CWlvX3dvcmtlcl9xdWV1 ZV9zaXplID0gNjQ7Ci1zdGF0aWMgaW50CU15SW9Xb3JrZXJJZDsKK3N0YXRpYyBpbnQJTXlJb1dv cmtlcklkID0gLTE7CiBzdGF0aWMgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUgKmlvX3dvcmtl cl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlvV29ya2VyQ29udHJvbCAqaW9fd29ya2Vy X2NvbnRyb2w7CiAKIAorc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9pbml0aWFsaXplKFBn QWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNldCA9IDA7Cit9CisKK3N0YXRpYyBib29sCitwZ2Fp b193b3JrZXJzZXRfaXNfZW1wdHkoUGdBaW9Xb3JrZXJTZXQgKnNldCkKK3sKKwlyZXR1cm4gKnNl dCA9PSAwOworfQorCitzdGF0aWMgUGdBaW9Xb3JrZXJTZXQKK3BnYWlvX3dvcmtlcnNldF9zaW5n bGV0b24oaW50IHdvcmtlcikKK3sKKwlBc3NlcnQod29ya2VyID49IDAgJiYgd29ya2VyIDwgTUFY X0lPX1dPUktFUlMpOworCXJldHVybiBVSU5UNjRfQygxKSA8PCB3b3JrZXI7Cit9CisKK3N0YXRp YyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfYWxsKFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNl dCA9IFVJTlQ2NF9NQVggPj4gKFBHQUlPX1dPUktFUlNFVF9CSVRTIC0gTUFYX0lPX1dPUktFUlMp OworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2Vyc2V0X3N1YnRyYWN0KFBnQWlvV29ya2Vy U2V0ICpzZXQxLCBjb25zdCBQZ0Fpb1dvcmtlclNldCAqc2V0MikKK3sKKwkqc2V0MSAmPSB+KnNl dDI7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfaW5zZXJ0KFBnQWlvV29ya2Vy U2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYmIHdvcmtlciA8 IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0IHw9IHBnYWlvX3dvcmtlcnNldF9zaW5nbGV0b24od29y a2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9yZW1vdmUoUGdBaW9Xb3Jr ZXJTZXQgKnNldCwgaW50IHdvcmtlcikKK3sKKwlBc3NlcnQod29ya2VyID49IDAgJiYgd29ya2Vy IDwgTUFYX0lPX1dPUktFUlMpOworCSpzZXQgJj0gfnBnYWlvX3dvcmtlcnNldF9zaW5nbGV0b24o d29ya2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcnNldF9yZW1vdmVfbHRlKFBn QWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYm IHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0ICY9ICh+KFBnQWlvV29ya2VyU2V0KSAw KSA8PCAod29ya2VyICsgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9nZXRf aGlnaGVzdChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCUFzc2VydCghcGdhaW9fd29ya2Vyc2V0 X2lzX2VtcHR5KHNldCkpOworCXJldHVybiBwZ19sZWZ0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9 CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9nZXRfbG93ZXN0KFBnQWlvV29ya2VyU2V0 ICpzZXQpCit7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJzZXRfaXNfZW1wdHkoc2V0KSk7CisJcmV0 dXJuIHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlv X3dvcmtlcnNldF9wb3BfbG93ZXN0KFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJaW50CQkJd29y a2VyID0gcGdhaW9fd29ya2Vyc2V0X2dldF9sb3dlc3Qoc2V0KTsKKworCXBnYWlvX3dvcmtlcnNl dF9yZW1vdmUoc2V0LCB3b3JrZXIpOworCXJldHVybiB3b3JrZXI7Cit9CisKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2Vyc2V0X2NvbnRhaW5zKFBn QWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdvcmtlciA+PSAwICYm IHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwlyZXR1cm4gKCpzZXQgJiBwZ2Fpb193b3JrZXJz ZXRfc2luZ2xldG9uKHdvcmtlcikpICE9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtl cnNldF9jb3VudChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCXJldHVybiBwZ19wb3Bjb3VudDY0 KCpzZXQpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBwZ2Fpb193b3JrZXJfc2htZW1fcmVx dWVzdCh2b2lkICphcmcpCiB7CkBAIC0xMzMsMzcgKzI2MywxNTkgQEAgcGdhaW9fd29ya2VyX3No bWVtX2luaXQodm9pZCAqYXJnKQogCWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT5zaXplID0g cXVldWVfc2l6ZTsKIAlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+aGVhZCA9IDA7CiAJaW9f d29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPnRhaWwgPSAwOworCWlvX3dvcmtlcl9jb250cm9sLT5n cm93ID0gZmFsc2U7CisJcGdhaW9fd29ya2Vyc2V0X2luaXRpYWxpemUoJmlvX3dvcmtlcl9jb250 cm9sLT53b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNldF9pbml0aWFsaXplKCZpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJzZXQpOwogCi0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29y a2VyX21hc2sgPSAwOwogCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkK KwkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ucHJvY19udW1iZXIgPSBJTlZBTElEX1BS T0NfTlVNQkVSOworfQorCisvKgorICogVGVsbCBwb3N0bWFzdGVyIHRoYXQgd2UgdGhpbmsgYSBu ZXcgd29ya2VyIGlzIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9yZXF1 ZXN0X2dyb3codm9pZCkKK3sKKwkvKgorCSAqIFN1cHByZXNzIHVzZWxlc3Mgc2lnbmFsaW5nIGlm IHdlIGFscmVhZHkga25vdyB0aGF0IHdlJ3JlIGF0IHRoZQorCSAqIG1heGltdW0uICBUaGlzIHVz ZXMgYW4gdW5sb2NrZWQgcmVhZCBvZiBud29ya2VycywgYnV0IHRoYXQncyBPSyBmb3IKKwkgKiB0 aGlzIGhldXJpc3RpYyBwdXJwb3NlLgorCSAqLworCWlmIChpb193b3JrZXJfY29udHJvbC0+bndv cmtlcnMgPCBpb19tYXhfd29ya2VycykKIAl7Ci0JCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJz W2ldLmxhdGNoID0gTlVMTDsKLQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNl ID0gZmFsc2U7CisJCWlmICghaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cpCisJCXsKKwkJCWlvX3dv cmtlcl9jb250cm9sLT5ncm93ID0gdHJ1ZTsKKwkJCXBnX21lbW9yeV9iYXJyaWVyKCk7CisKKwkJ CS8qCisJCQkgKiBJZiB0aGUgcG9zdG1hc3RlciBoYXMgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLCBk b24ndCBkbyBpdCBhZ2FpbgorCQkJICogdW50aWwgdGhlIHBvc3RtYXN0ZXIgY2xlYXJzIHRoaXMg ZmxhZy4gIFRoZXJlIGlzIG5vIHBvaW50IGluCisJCQkgKiByZXBlYXRlZCBzaWduYWxzIGlmIGdy b3cgaXMgYmVpbmcgc2V0IGFuZCBjbGVhcmVkIHJlcGVhdGVkbHkKKwkJCSAqIHdoaWxlIHRoZSBw b3N0bWFzdGVyIGlzIHdhaXRpbmcgZm9yIGlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwKKwkJCSAq ICh3aGljaCBpdCBhcHBsaWVzIGV2ZW4gdG8gY2FuY2VsZWQgcmVxdWVzdHMpLgorCQkJICovCisJ CQlpZiAoIWlvX3dvcmtlcl9jb250cm9sLT5ncm93X3NpZ25hbF9zZW50KQorCQkJeworCQkJCWlv X3dvcmtlcl9jb250cm9sLT5ncm93X3NpZ25hbF9zZW50ID0gdHJ1ZTsKKwkJCQlwZ19tZW1vcnlf YmFycmllcigpOworCQkJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9H Uk9XKTsKKwkJCX0KKwkJfQogCX0KIH0KIAorLyoKKyAqIENhbmNlbCBhbnkgcmVxdWVzdCBmb3Ig YSBuZXcgd29ya2VyLCBhZnRlciBvYnNlcnZpbmcgYW4gZW1wdHkgcXVldWUuCisgKi8KK3N0YXRp YyB2b2lkCitwZ2Fpb193b3JrZXJfY2FuY2VsX2dyb3codm9pZCkKK3sKKwlpZiAoaW9fd29ya2Vy X2NvbnRyb2wtPmdyb3cpCisJeworCQlpb193b3JrZXJfY29udHJvbC0+Z3JvdyA9IGZhbHNlOwor CQlwZ19tZW1vcnlfYmFycmllcigpOworCX0KK30KKworLyoKKyAqIENhbGxlZCBieSB0aGUgcG9z dG1hc3RlciB0byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaGFzIGJlZW4gcmVxdWVzdGVkIChidXQK KyAqIHBvc3NpYmx5IGNhbmNlbGVkIHNpbmNlKS4KKyAqLworYm9vbAorcGdhaW9fd29ya2VyX3Bt X3Rlc3RfZ3Jvd19zaWduYWxfc2VudCh2b2lkKQoreworCXBnX21lbW9yeV9iYXJyaWVyKCk7CisJ cmV0dXJuIGlvX3dvcmtlcl9jb250cm9sICYmIGlvX3dvcmtlcl9jb250cm9sLT5ncm93X3NpZ25h bF9zZW50OworfQorCisvKgorICogQ2FsbGVkIGJ5IHRoZSBwb3N0bWFzdGVyIHRvIGNoZWNrIGlm IGEgbmV3IHdvcmtlciBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kCisgKiBub3QgY2FuY2VsZWQgc2lu Y2UuCisgKi8KK2Jvb2wKK3BnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3codm9pZCkKK3sKKwlwZ19t ZW1vcnlfYmFycmllcigpOworCXJldHVybiBpb193b3JrZXJfY29udHJvbCAmJiBpb193b3JrZXJf Y29udHJvbC0+Z3JvdzsKK30KKworLyoKKyAqIENhbGxlZCBieSB0aGUgcG9zdG1hc3RlciB0byBj bGVhciB0aGUgcmVxdWVzdCBmb3IgYSBuZXcgd29ya2VyLgorICovCit2b2lkCitwZ2Fpb193b3Jr ZXJfcG1fY2xlYXJfZ3Jvd19zaWduYWxfc2VudCh2b2lkKQoreworCWlmIChpb193b3JrZXJfY29u dHJvbCkKKwl7CisJCWlvX3dvcmtlcl9jb250cm9sLT5ncm93ID0gZmFsc2U7CisJCWlvX3dvcmtl cl9jb250cm9sLT5ncm93X3NpZ25hbF9zZW50ID0gZmFsc2U7CisJfQorCXBnX21lbW9yeV9iYXJy aWVyKCk7Cit9CisKIHN0YXRpYyBpbnQKLXBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSh2b2lkKQor cGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKGludCBvbmx5X3dvcmtlcnNfYWJvdmUpCiB7CisJUGdB aW9Xb3JrZXJTZXQgd29ya2Vyc2V0OwogCWludAkJCXdvcmtlcjsKIAotCWlmIChpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJfbWFzayA9PSAwKQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUlu TW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKworCXdv cmtlcnNldCA9IGlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcnNldDsKKwlpZiAob25seV93 b3JrZXJzX2Fib3ZlID49IDApCisJCXBnYWlvX3dvcmtlcnNldF9yZW1vdmVfbHRlKCZ3b3JrZXJz ZXQsIG9ubHlfd29ya2Vyc19hYm92ZSk7CisJaWYgKHBnYWlvX3dvcmtlcnNldF9pc19lbXB0eSgm d29ya2Vyc2V0KSkKIAkJcmV0dXJuIC0xOwogCi0JLyogRmluZCB0aGUgbG93ZXN0IGJpdCBwb3Np dGlvbiwgYW5kIGNsZWFyIGl0LiAqLwotCXdvcmtlciA9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQo aW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2spOwotCWlvX3dvcmtlcl9jb250cm9s LT5pZGxlX3dvcmtlcl9tYXNrICY9IH4oVUlOVDY0X0MoMSkgPDwgd29ya2VyKTsKLQlBc3NlcnQo aW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5pbl91c2UpOworCS8qIEZpbmQgdGhl IGxvd2VzdCBudW1iZXJlZCBpZGxlIHdvcmtlciBhbmQgbWFyayBpdCBub3QgaWRsZS4gKi8KKwl3 b3JrZXIgPSBwZ2Fpb193b3JrZXJzZXRfZ2V0X2xvd2VzdCgmd29ya2Vyc2V0KTsKKwlwZ2Fpb193 b3JrZXJzZXRfcmVtb3ZlKCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJzZXQsIHdvcmtl cik7CiAKIAlyZXR1cm4gd29ya2VyOwogfQogCisvKgorICogVHJ5IHRvIHdha2UgYSB3b3JrZXIg Ynkgc2V0dGluZyBpdHMgbGF0Y2gsIHRvIHRlbGwgaXQgdGhlcmUgYXJlIElPcyB0bworICogcHJv Y2VzcyBpbiB0aGUgc3VibWlzc2lvbiBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK3BnYWlvX3dv cmtlcl93YWtlKGludCB3b3JrZXIpCit7CisJUHJvY051bWJlcglwcm9jX251bWJlcjsKKworCS8q CisJICogSWYgdGhlIHNlbGVjdGVkIHdvcmtlciBpcyBjb25jdXJyZW50bHkgZXhpdGluZywgdGhl biBwZ2Fpb193b3JrZXJfZGllKCkKKwkgKiBoYWQgbm90IHlldCByZW1vdmVkIGl0IGFzIG9mIHdo ZW4gd2Ugc2F3IGl0IGluIGlkbGVfd29ya2Vyc2V0LiAgVGhhdCdzCisJICogT0ssIGJlY2F1c2Ug aXQgd2lsbCB3YWtlIGFsbCByZW1haW5pbmcgd29ya2VycyB0byBjbG9zZSB3YWtldXAtdnMtZXhp dAorCSAqIHJhY2VzOiAqc29tZW9uZSogd2lsbCBzZWUgdGhlIHF1ZXVlZCBJTy4gIElmIHRoZXJl IGFyZSBubyB3b3JrZXJzCisJICogcnVubmluZywgdGhlIHBvc3RtYXN0ZXIgd2lsbCBzdGFydCBh IG5ldyBvbmUuCisJICovCisJcHJvY19udW1iZXIgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vy c1t3b3JrZXJdLnByb2NfbnVtYmVyOworCWlmIChwcm9jX251bWJlciAhPSBJTlZBTElEX1BST0Nf TlVNQkVSKQorCQlTZXRMYXRjaCgmR2V0UEdQcm9jQnlOdW1iZXIocHJvY19udW1iZXIpLT5wcm9j TGF0Y2gpOworfQorCisvKgorICogVHJ5IHRvIHdha2UgYSBzZXQgb2Ygd29ya2Vycy4gIFVzZWQg b24gcG9vbCBjaGFuZ2UsIHRvIGNsb3NlIHJhY2VzCisgKiBkZXNjcmliZWQgaW4gdGhlIGNhbGxl cnMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfd2FrZShQZ0Fpb1dvcmtlclNl dCB3b3JrZXJzZXQpCit7CisJd2hpbGUgKCFwZ2Fpb193b3JrZXJzZXRfaXNfZW1wdHkoJndvcmtl cnNldCkpCisJCXBnYWlvX3dvcmtlcl93YWtlKHBnYWlvX3dvcmtlcnNldF9wb3BfbG93ZXN0KCZ3 b3JrZXJzZXQpKTsKK30KKwogc3RhdGljIGJvb2wKIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1 ZXVlX2luc2VydChQZ0Fpb0hhbmRsZSAqaW9oKQogewogCVBnQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlICpxdWV1ZTsKIAl1aW50MzIJCW5ld19oZWFkOwogCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1l SW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCiAJ cXVldWUgPSBpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZTsKIAluZXdfaGVhZCA9IChxdWV1ZS0+ aGVhZCArIDEpICYgKHF1ZXVlLT5zaXplIC0gMSk7CiAJaWYgKG5ld19oZWFkID09IHF1ZXVlLT50 YWlsKQpAQCAtMTg1LDYgKzQzNyw4IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2Nv bnN1bWUodm9pZCkKIAlQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CiAJaW50CQkJ cmVzdWx0OwogCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Np b25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCiAJcXVldWUgPSBpb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZTsKIAlpZiAocXVldWUtPnRhaWwgPT0gcXVldWUtPmhlYWQpCiAJCXJldHVybiAt MTsJCQkJLyogZW1wdHkgKi8KQEAgLTIwMSw2ICs0NTUsOCBAQCBwZ2Fpb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZV9kZXB0aCh2b2lkKQogCXVpbnQzMgkJaGVhZDsKIAl1aW50MzIJCXRhaWw7CiAK KwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9j aywgTFdfRVhDTFVTSVZFKSk7CisKIAloZWFkID0gaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUt PmhlYWQ7CiAJdGFpbCA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT50YWlsOwogCkBAIC0y MjYsOCArNDgyLDcgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3Ms IFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIHsKIAlQZ0Fpb0hhbmRsZSAqKnN5bmNocm9ub3Vz X2lvcyA9IE5VTEw7CiAJaW50CQkJbnN5bmMgPSAwOwotCUxhdGNoCSAgICp3YWtldXAgPSBOVUxM OwotCWludAkJCXdvcmtlcjsKKwlpbnQJCQl3b3JrZXIgPSAtMTsKIAogCUFzc2VydChudW1fc3Rh Z2VkX2lvcyA8PSBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CiAKQEAgLTI1MSwyMCArNTA2LDE1 IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRs ZSAqKnN0YWdlZF9pb3MpCiAKIAkJCQlicmVhazsKIAkJCX0KLQotCQkJaWYgKHdha2V1cCA9PSBO VUxMKQotCQkJewotCQkJCS8qIENob29zZSBhbiBpZGxlIHdvcmtlciB0byB3YWtlIHVwIGlmIHdl IGhhdmVuJ3QgYWxyZWFkeS4gKi8KLQkJCQl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lk bGUoKTsKLQkJCQlpZiAod29ya2VyID49IDApCi0JCQkJCXdha2V1cCA9IGlvX3dvcmtlcl9jb250 cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7Ci0KLQkJCQlwZ2Fpb19kZWJ1Z19pbyhERUJVRzQs IHN0YWdlZF9pb3NbaV0sCi0JCQkJCQkJICAgImNob29zaW5nIHdvcmtlciAlZCIsCi0JCQkJCQkJ ICAgd29ya2VyKTsKLQkJCX0KIAkJfQorCQkvKiBDaG9vc2Ugb25lIHdvcmtlciB0byB3YWtlIGZv ciB0aGlzIGJhdGNoLiAqLworCQlpZiAobnN5bmMgPCBudW1fc3RhZ2VkX2lvcykKKwkJCXdvcmtl ciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgtMSk7CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisKKwkJLyogV2FrZSB1cCBjaG9zZW4gd29ya2VyLiAg SXQgd2lsbCB3YWtlIHBlZXJzIGlmIG5lY2Vzc2FyeS4gKi8KKwkJaWYgKG5zeW5jID09IDApCisJ CQlwZ2Fpb193b3JrZXJfd2FrZSh3b3JrZXIpOwogCX0KIAllbHNlCiAJewpAQCAtMjczLDkgKzUy Myw2IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hh bmRsZSAqKnN0YWdlZF9pb3MpCiAJCW5zeW5jID0gbnVtX3N0YWdlZF9pb3M7CiAJfQogCi0JaWYg KHdha2V1cCkKLQkJU2V0TGF0Y2god2FrZXVwKTsKLQogCS8qIFJ1biB3aGF0ZXZlciBpcyBsZWZ0 IHN5bmNocm9ub3VzbHkuICovCiAJaWYgKG5zeW5jID4gMCkKIAl7CkBAIC0yOTUsMTQgKzU0Miwz MCBAQCBwZ2Fpb193b3JrZXJfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5k bGUgKipzdGFnZWRfaW9zKQogc3RhdGljIHZvaWQKIHBnYWlvX3dvcmtlcl9kaWUoaW50IGNvZGUs IERhdHVtIGFyZykKIHsKLQlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0JQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015 SW9Xb3JrZXJJZF0uaW5fdXNlKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNb TXlJb1dvcmtlcklkXS5sYXRjaCA9PSBNeUxhdGNoKTsKKwlQZ0Fpb1dvcmtlclNldCBub3RpZnlf c2V0OwogCi0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0gfihVSU5UNjRf QygxKSA8PCBNeUlvV29ya2VySWQpOwotCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9X b3JrZXJJZF0uaW5fdXNlID0gZmFsc2U7Ci0JaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJ b1dvcmtlcklkXS5sYXRjaCA9IE5VTEw7CisJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNz aW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCXBnYWlvX3dvcmtlcnNldF9yZW1vdmUoJmlv X3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcnNldCwgTXlJb1dvcmtlcklkKTsKIAlMV0xvY2tS ZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOworCisJTFdMb2NrQWNxdWlyZShB aW9Xb3JrZXJDb250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlBc3NlcnQoaW9fd29ya2VyX2Nv bnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9PSBNeVByb2NOdW1iZXIp OworCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIg PSBJTlZBTElEX1BST0NfTlVNQkVSOworCUFzc2VydChwZ2Fpb193b3JrZXJzZXRfY29udGFpbnMo JmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQsIE15SW9Xb3JrZXJJZCkpOworCXBnYWlvX3dv cmtlcnNldF9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQsIE15SW9Xb3JrZXJJ ZCk7CisJbm90aWZ5X3NldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQ7CisJQXNzZXJ0 KGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2VycyA+IDApOworCWlvX3dvcmtlcl9jb250cm9sLT5u d29ya2Vycy0tOworCUFzc2VydChwZ2Fpb193b3JrZXJzZXRfY291bnQoJmlvX3dvcmtlcl9jb250 cm9sLT53b3JrZXJzZXQpID09CisJCSAgIGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2Vycyk7CisJ TFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJDb250cm9sTG9jayk7CisKKwkvKgorCSAqIE5vdGlmeSBv dGhlciB3b3JrZXJzIG9uIHBvb2wgY2hhbmdlLiAgVGhpcyBhbGxvd3MgdGhlIG5ldyBoaWdoZXN0 CisJICogd29ya2VyIHRvIGtub3cgdGhhdCBpdCBpcyBub3cgdGhlIG9uZSB0aGF0IGNhbiB0aW1l IG91dCwgYW5kIGNsb3NlcyBhCisJICogd2FrZXVwLWxvc3MgcmFjZSBkZXNjcmliZWQgaW4gcGdh aW9fd29ya2VyX3dha2UoKS4KKwkgKi8KKwlwZ2Fpb193b3JrZXJzZXRfd2FrZShub3RpZnlfc2V0 KTsKIH0KIAogLyoKQEAgLTMxMiwzMyArNTc1LDM4IEBAIHBnYWlvX3dvcmtlcl9kaWUoaW50IGNv ZGUsIERhdHVtIGFyZykKIHN0YXRpYyB2b2lkCiBwZ2Fpb193b3JrZXJfcmVnaXN0ZXIodm9pZCkK IHsKKwlQZ0Fpb1dvcmtlclNldCBmcmVlX3dvcmtlcnNldDsKKwlQZ0Fpb1dvcmtlclNldCBvbGRf d29ya2Vyc2V0OworCiAJTXlJb1dvcmtlcklkID0gLTE7CiAKLQkvKgotCSAqIFhYWDogVGhpcyBj b3VsZCBkbyB3aXRoIG1vcmUgZmluZS1ncmFpbmVkIGxvY2tpbmcuIEJ1dCBpdCdzIGFsc28gbm90 Ci0JICogdmVyeSBjb21tb24gZm9yIHRoZSBudW1iZXIgb2Ygd29ya2VycyB0byBjaGFuZ2UgYXQg dGhlIG1vbWVudC4uLgotCSAqLwotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xM b2NrLCBMV19FWENMVVNJVkUpOworCS8qIEZpbmQgbG93ZXN0IHVudXNlZCB3b3JrZXIgSUQuICov CisJcGdhaW9fd29ya2Vyc2V0X2FsbCgmZnJlZV93b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNl dF9zdWJ0cmFjdCgmZnJlZV93b3JrZXJzZXQsICZpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc2V0 KTsKKwlpZiAoIXBnYWlvX3dvcmtlcnNldF9pc19lbXB0eSgmZnJlZV93b3JrZXJzZXQpKQorCQlN eUlvV29ya2VySWQgPSBwZ2Fpb193b3JrZXJzZXRfZ2V0X2xvd2VzdCgmZnJlZV93b3JrZXJzZXQp OworCWlmIChNeUlvV29ya2VySWQgPT0gLTEpCisJCWVsb2coRVJST1IsICJjb3VsZG4ndCBmaW5k IGEgZnJlZSB3b3JrZXIgSUQiKTsKIAotCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktF UlM7ICsraSkKLQl7Ci0JCWlmICghaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNl KQotCQl7Ci0JCQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPT0g TlVMTCk7Ci0JCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0cnVlOwot CQkJTXlJb1dvcmtlcklkID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChp b193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCAhPSBOVUxMKTsKLQl9CisJQXNzZXJ0 KGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIgPT0K KwkJICAgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNb TXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9IE15UHJvY051bWJlcjsKIAotCWlmIChNeUlvV29y a2VySWQgPT0gLTEpCi0JCWVsb2coRVJST1IsICJjb3VsZG4ndCBmaW5kIGEgZnJlZSB3b3JrZXIg c2xvdCIpOworCW9sZF93b3JrZXJzZXQgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc2V0Owor CUFzc2VydCghcGdhaW9fd29ya2Vyc2V0X2NvbnRhaW5zKCZvbGRfd29ya2Vyc2V0LCBNeUlvV29y a2VySWQpKTsKKwlwZ2Fpb193b3JrZXJzZXRfaW5zZXJ0KCZpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc2V0LCBNeUlvV29ya2VySWQpOworCWlvX3dvcmtlcl9jb250cm9sLT5ud29ya2VycysrOwor CUFzc2VydChpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMgPD0gTUFYX0lPX1dPUktFUlMpOwor CUFzc2VydChwZ2Fpb193b3JrZXJzZXRfY291bnQoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJz ZXQpID09CisJCSAgIGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2Vycyk7CisJTFdMb2NrUmVsZWFz ZShBaW9Xb3JrZXJDb250cm9sTG9jayk7CiAKLQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3Jr ZXJfbWFzayB8PSAoVUlOVDY0X0MoMSkgPDwgTXlJb1dvcmtlcklkKTsKLQlpb193b3JrZXJfY29u dHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID0gTXlMYXRjaDsKLQlMV0xvY2tSZWxl YXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOworCS8qCisJICogTm90aWZ5IG90aGVy IHdvcmtlcnMgb24gcG9vbCBjaGFuZ2UuICBJZiB3ZSB3ZXJlIHRoZSBoaWdoZXN0IHdvcmtlciwK KwkgKiB0aGlzIGFsbG93cyB0aGUgbmV3IGhpZ2hlc3Qgd29ya2VyIHRvIGtub3cgdGhhdCBpdCBj YW4gdGltZSBvdXQuCisJICovCisJcGdhaW9fd29ya2Vyc2V0X3dha2Uob2xkX3dvcmtlcnNldCk7 CiAKIAlvbl9zaG1lbV9leGl0KHBnYWlvX3dvcmtlcl9kaWUsIDApOwogfQpAQCAtMzY0LDE0ICs2 MzIsNDggQEAgcGdhaW9fd29ya2VyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIAllcnJjb250 ZXh0KCJJL08gd29ya2VyIGV4ZWN1dGluZyBJL08gb24gYmVoYWxmIG9mIHByb2Nlc3MgJWQiLCBv d25lcl9waWQpOwogfQogCisvKgorICogQ2hlY2sgaWYgdGhpcyBiYWNrZW5kIGlzIGFsbG93ZWQg dG8gdGltZSBvdXQsIGFuZCB0aHVzIHNob3VsZCB1c2UgYQorICogbm9uLWluZmluaXRlIHNsZWVw IHRpbWUuICBPbmx5IHRoZSBoaWdoZXN0LW51bWJlcmVkIHdvcmtlciBpcyBhbGxvd2VkIHRvCisg KiB0aW1lIG91dCwgYW5kIG9ubHkgaWYgdGhlIHBvb2wgaXMgYWJvdmUgaW9fbWluX3dvcmtlcnMu ICBTZXJpYWxpemluZworICogdGltZW91dHMga2VlcHMgSURzIGluIGEgcmFuZ2UgMC4uTiB3aXRo b3V0IGdhcHMsIGFuZCBhdm9pZHMgdW5kZXJzaG9vdGluZworICogaW9fbWluX3dvcmtlcnMuCisg KgorICogVGhlIHJlc3VsdCBpcyBvbmx5IGluc3RhbnRhbmVvdXNseSB0cnVlIGFuZCBtYXkgYmUg dGVtcG9yYXJpbHkgaW5jb25zaXN0ZW50CisgKiBpbiBkaWZmZXJlbnQgd29ya2VycyBhcm91bmQg dHJhbnNpdGlvbnMsIGJ1dCBhbGwgd29ya2VycyBhcmUgd29rZW4gdXAgb24KKyAqIHBvb2wgc2l6 ZSBvciBHVUMgY2hhbmdlcyBtYWtpbmcgdGhlIHJlc3VsdCBldmVudHVhbGx5IGNvbnNpc3RlbnQu CisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb193b3JrZXJfY2FuX3RpbWVvdXQodm9pZCkKK3sKKwlQ Z0Fpb1dvcmtlclNldCB3b3JrZXJzZXQ7CisKKwkvKiBTZXJpYWxpemUgYWdhaW5zdCBwb29sIHNp emUgY2hhbmdlcy4gKi8KKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBMV19T SEFSRUQpOworCXdvcmtlcnNldCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQ7CisJTFdM b2NrUmVsZWFzZShBaW9Xb3JrZXJDb250cm9sTG9jayk7CisKKwlpZiAoTXlJb1dvcmtlcklkICE9 IHBnYWlvX3dvcmtlcnNldF9nZXRfaGlnaGVzdCgmd29ya2Vyc2V0KSkKKwkJcmV0dXJuIGZhbHNl OworCisJaWYgKE15SW9Xb3JrZXJJZCA8IGlvX21pbl93b3JrZXJzKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogdm9pZAogSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2Nh bF9zaWdqbXBfYnVmOworCVRpbWVzdGFtcFR6IGlkbGVfdGltZW91dF9hYnMgPSAwOworCWludAkJ CXRpbWVvdXRfZ3VjX3VzZWQgPSAwOwogCVBnQWlvSGFuZGxlICp2b2xhdGlsZSBlcnJvcl9pb2gg PSBOVUxMOwogCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrID0gezB9OwogCXZvbGF0 aWxlIGludCBlcnJvcl9lcnJubyA9IDA7CiAJY2hhcgkJY21kWzEyOF07CisJaW50CQkJaGlzdF9p b3MgPSAwOworCWludAkJCWhpc3Rfd2FrZXVwcyA9IDA7CiAKIAlBdXhpbGlhcnlQcm9jZXNzTWFp bkNvbW1vbigpOwogCkBAIC00MzksMTAgKzc0MSw5IEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lk ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXdoaWxlICghU2h1dGRv d25SZXF1ZXN0UGVuZGluZykKIAl7CiAJCXVpbnQzMgkJaW9faW5kZXg7Ci0JCUxhdGNoCSAgICps YXRjaGVzW0lPX1dPUktFUl9XQUtFVVBfRkFOT1VUXTsKLQkJaW50CQkJbmxhdGNoZXMgPSAwOwot CQlpbnQJCQlud2FrZXVwcyA9IDA7Ci0JCWludAkJCXdvcmtlcjsKKwkJaW50CQkJd29ya2VyID0g LTE7CisJCWludAkJCXF1ZXVlX2RlcHRoID0gMDsKKwkJYm9vbAkJbWF5YmVfZ3JvdyA9IGZhbHNl OwogCiAJCS8qCiAJCSAqIFRyeSB0byBnZXQgYSBqb2IgdG8gZG8uCkBAIC00NTMsMzggKzc1NCwx MDcgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0 dXBfZGF0YV9sZW4pCiAJCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9j aywgTFdfRVhDTFVTSVZFKTsKIAkJaWYgKChpb19pbmRleCA9IHBnYWlvX3dvcmtlcl9zdWJtaXNz aW9uX3F1ZXVlX2NvbnN1bWUoKSkgPT0gLTEpCiAJCXsKLQkJCS8qCi0JCQkgKiBOb3RoaW5nIHRv IGRvLiAgTWFyayBzZWxmIGlkbGUuCi0JCQkgKgotCQkJICogWFhYOiBJbnZlbnQgc29tZSBraW5k IG9mIGJhY2sgcHJlc3N1cmUgdG8gcmVkdWNlIHVzZWxlc3MKLQkJCSAqIHdha2V1cHM/Ci0JCQkg Ki8KLQkJCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrIHw9IChVSU5UNjRfQygx KSA8PCBNeUlvV29ya2VySWQpOworCQkJLyogTm90aGluZyB0byBkby4gIE1hcmsgc2VsZiBpZGxl LiAqLworCQkJcGdhaW9fd29ya2Vyc2V0X2luc2VydCgmaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVf d29ya2Vyc2V0LAorCQkJCQkJCQkgICBNeUlvV29ya2VySWQpOwogCQl9CiAJCWVsc2UKIAkJewog CQkJLyogR290IG9uZS4gIENsZWFyIGlkbGUgZmxhZy4gKi8KLQkJCWlvX3dvcmtlcl9jb250cm9s LT5pZGxlX3dvcmtlcl9tYXNrICY9IH4oVUlOVDY0X0MoMSkgPDwgTXlJb1dvcmtlcklkKTsKKwkJ CXBnYWlvX3dvcmtlcnNldF9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcnNl dCwKKwkJCQkJCQkJICAgTXlJb1dvcmtlcklkKTsKIAotCQkJLyogU2VlIGlmIHdlIGNhbiB3YWtl IHVwIHNvbWUgcGVlcnMuICovCi0JCQlud2FrZXVwcyA9IE1pbihwZ2Fpb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZV9kZXB0aCgpLAotCQkJCQkJICAgSU9fV09SS0VSX1dBS0VVUF9GQU5PVVQpOwot CQkJZm9yIChpbnQgaSA9IDA7IGkgPCBud2FrZXVwczsgKytpKQorCQkJLyoKKwkJCSAqIFNlZSBp ZiB3ZSBzaG91bGQgd2FrZSB1cCBhIGhpZ2hlciBudW1iZXJlZCBwZWVyLiAgT25seSBkbyB0aGF0 CisJCQkgKiBpZiB0aGlzIHdvcmtlciBpcyBub3QgcmVjZWl2aW5nIHNwdXJpb3VzIHdha2V1cHMg aXRzZWxmLiAgVGhlCisJCQkgKiBpbnRlbnRpb24gaXMgY3JlYXRlIGEgZnJvbnRpZXIgYmV5b25k IHdoaWNoIGlkbGUgd29ya2VycyBzdGF5CisJCQkgKiBhc2xlZXAuCisJCQkgKgorCQkJICogVGhp cyBoZXVyaXN0aWMgdHJpZXMgdG8gZGlzY292ZXIgdGhlIHVzZWZ1bCB3YWtldXAgcHJvcGFnYXRp b24KKwkJCSAqIGNoYWluIGxlbmd0aCB3aGVuIElPcyBhcmUgdmVyeSBmYXN0IGFuZCB3b3JrZXJz IHdha2UgdXAgdG8gZmluZAorCQkJICogdGhhdCBhbGwgSU9zIGhhdmUgYWxyZWFkeSBiZWVuIHRh a2VuLgorCQkJICoKKwkJCSAqIElmIHdlIGNob3NlIG5vdCB0byB3YWtlIGEgd29ya2VyIHdoZW4g d2UgaWRlYWxseSBzaG91bGQgaGF2ZSwKKwkJCSAqIHRoZW4gaW9zIHdpbGwgc29vbiBleGNlZWQg d2FrZXVwcy4KKwkJCSAqLworCQkJaWYgKGhpc3Rfd2FrZXVwcyA8PSBoaXN0X2lvcykKIAkJCXsK LQkJCQlpZiAoKHdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpKSA8IDApCi0JCQkJ CWJyZWFrOwotCQkJCWxhdGNoZXNbbmxhdGNoZXMrK10gPSBpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc1t3b3JrZXJdLmxhdGNoOworCQkJCXF1ZXVlX2RlcHRoID0gcGdhaW9fd29ya2VyX3N1Ym1p c3Npb25fcXVldWVfZGVwdGgoKTsKKwkJCQlpZiAocXVldWVfZGVwdGggPiAwKQorCQkJCXsKKwkJ CQkJLyogQ2hvb3NlIGEgd29ya2VyIGhpZ2hlciB0aGFuIG1lIHRvIHdha2UuICovCisJCQkJCXdv cmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZShNeUlvV29ya2VySWQpOworCQkJCQlpZiAo d29ya2VyID09IC0xKQorCQkJCQkJbWF5YmVfZ3JvdyA9IHRydWU7CisJCQkJfQogCQkJfQogCQl9 CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiAKLQkJZm9y IChpbnQgaSA9IDA7IGkgPCBubGF0Y2hlczsgKytpKQotCQkJU2V0TGF0Y2gobGF0Y2hlc1tpXSk7 CisJCS8qIFByb3BhZ2F0ZSB3YWtldXBzLiAqLworCQlpZiAod29ya2VyICE9IC0xKQorCQl7CisJ CQlwZ2Fpb193b3JrZXJfd2FrZSh3b3JrZXIpOworCQl9CisJCWVsc2UgaWYgKG1heWJlX2dyb3cp CisJCXsKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgbW9yZSBp dGVtIGluIHRoZSBxdWV1ZSwgYW5kIHdlCisJCQkgKiBmYWlsZWQgdG8gZmluZCBhIGhpZ2hlci1u dW1iZXJlZCBpZGxlIHdvcmtlciB0byB3YWtlLiAgTm93IHdlCisJCQkgKiBkZWNpZGUgaWYgd2Ug c2hvdWxkIHRyeSB0byBzdGFydCBvbmUgbW9yZSB3b3JrZXIuCisJCQkgKgorCQkJICogV2UgZG8g dGhpcyB3aXRoIGEgc2ltcGxlIGhldXJpc3RpYzogaXMgdGhlIHF1ZXVlIGRlcHRoIGdyZWF0ZXIK KwkJCSAqIHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHdvcmtlcnM/CisJCQkgKgorCQkJICog Q29uc2lkZXIgdGhlIGZvbGxvd2luZyBzaXR1YXRpb25zOgorCQkJICoKKwkJCSAqIDEuIFRoZSBx dWV1ZSBkZXB0aCBpcyBjb25zdGFudGx5IGluY3JlYXNpbmcsIGJlY2F1c2UgSU9zIGFyZQorCQkJ ICogYXJyaXZpbmcgZmFzdGVyIHRoYW4gdGhleSBjYW4gcG9zc2libHkgYmUgc2VydmljZWQuICBJ dCBkb2Vzbid0CisJCQkgKiBtYXR0ZXIgbXVjaCB3aGljaCB0aHJlc2hvbGQgd2UgY2hvb3NlLCBh cyB3ZSB3aWxsIHN1cmVseSBoaXQKKwkJCSAqIGl0LiAgQ3Jvc3NpbmcgdGhlIGN1cnJlbnQgd29y a2VyIGNvdW50IGlzIGEgdXNlZnVsIHNpZ25hbAorCQkJICogYmVjYXVzZSBpdCdzIGNsZWFybHkg dG9vIGRlZXAgdG8gYXZvaWQgcXVldWluZyBsYXRlbmN5IGFscmVhZHksCisJCQkgKiBidXQgc3Rp bGwgbGVhdmVzIGEgc21hbGwgd2luZG93IG9mIG9wcG9ydHVuaXR5IHRvIGltcHJvdmUgdGhlCisJ CQkgKiBzaXR1YXRpb24gYmVmb3JlIHRoZSBxdWV1ZSBvdmVmbG93cy4KKwkJCSAqCisJCQkgKiAy LiBUaGUgd29ya2VyIHBvb2wgaXMga2VlcGluZyB1cCwgbm8gbGF0ZW5jeSBpcyBiZWluZworCQkJ ICogaW50cm9kdWNlZCBhbmQgYW4gZXh0cmEgd29ya2VyIHdvdWxkIGJlIGEgd2FzdGUgb2YgcmVz b3VyY2VzLgorCQkJICogUXVldWUgZGVwdGggZGlzdHJpYnV0aW9ucyB0ZW5kIHRvIGJlIGhlYXZp bHkgc2tld2VkLCB3aXRoIGxvbmcKKwkJCSAqIHRhaWxzIG9mIGxvdyBwcm9iYWJpbGl0eSBzcGlr ZXMgKGR1ZSB0byBzdWJtaXNzaW9uIGNsdXN0ZXJpbmcsCisJCQkgKiBzY2hlZHVsaW5nLCBqaXR0 ZXIsIHN0YWxscywgbm9pc3kgbmVpZ2hib3JzLCBldGMpLiAgV2Ugd2FudCBhCisJCQkgKiBudW1i ZXIgdGhhdCBpcyB2ZXJ5IHVubGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBieSBhbiBvdXRsaWVyLCBh bmQKKwkJCSAqIHdlIGJldCB0aGF0IGFuIGV4cG9uZW50aWFsIG9yIHNpbWlsYXIgZGlzdHJpYnV0 aW9uIHdob3NlCisJCQkgKiBvdXRsaWVycyBuZXZlciByZWFjaCB0aGlzIHRocmVzaG9sZCBtdXN0 IGJlIGFsbW9zdCBlbnRpcmVseQorCQkJICogY29uY2VudHJhdGVkIGF0IHRoZSBsb3cgZW5kLiAg SWYgd2UgZG8gc2VlIGEgc3Bpa2UgYXMgYmlnIGFzCisJCQkgKiB0aGUgd29ya2VyIGNvdW50LCB3 ZSB0YWtlIGl0IGFzIGEgc2lnbmFsIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbgorCQkJICogaXMgc3Vy ZWx5IHRvbyB3aWRlLgorCQkJICoKKwkJCSAqIE9uIGl0cyBvd24sIHRoaXMgaXMgYW4gZXh0cmVt ZWx5IGNydWRlIHNpZ25hbC4gIFdoZW4gY29tYmluZWQKKwkJCSAqIHdpdGggdGhlIHdha2V1cCBw cm9wYWdhdGlvbiB0ZXN0IHRoYXQgcHJlY2VkZXMgaXQgKGJ1dCBvbiBpdHMKKwkJCSAqIG93biB0 ZW5kcyB0byBvdmVyc2hvb3QpIGFuZCB0aGUgaW9fd29ya2VyX2xhdW5jaF9kZWxheSwgd2UKKwkJ CSAqIGdyYWR1YWxseSB0cnkgZWFjaCBwb29sIHNpemUgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBk b2Vzbid0CisJCQkgKiB0cmlnZ2VyIGZ1cnRoZXIgZ3Jvd3RoLgorCQkJICoKKwkJCSAqIFhYWCBJ ZGVhcyBmcm9tIHF1ZXVlaW5nIHRoZW9yeSBvciBjb250cm9sIHRoZW9yeSBjb3VsZCBzdXJlbHkK KwkJCSAqIGRvIGEgbXVjaCBiZXR0ZXIgam9iIG9mIHRoaXMuCisJCQkgKi8KKworCQkJLyogUmVh ZCBud29ya2VycyB3aXRob3V0IGxvY2sgZm9yIHRoaXMgaGV1cmlzdGljIHB1cnBvc2UuICovCisJ CQlpZiAocXVldWVfZGVwdGggPiBpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMpCisJCQkJcGdh aW9fd29ya2VyX3JlcXVlc3RfZ3JvdygpOworCQl9CiAKIAkJaWYgKGlvX2luZGV4ICE9IC0xKQog CQl7CiAJCQlQZ0Fpb0hhbmRsZSAqaW9oID0gTlVMTDsKIAorCQkJLyogQ2FuY2VsIHRpbWVvdXQg YW5kIHVwZGF0ZSB3YWtldXA6d29yayByYXRpby4gKi8KKwkJCWlkbGVfdGltZW91dF9hYnMgPSAw OworCQkJaWYgKCsraGlzdF9pb3MgPT0gUEdBSU9fV09SS0VSX1dBS0VVUF9SQVRJT19TQVRVUkFU RSkKKwkJCXsKKwkJCQloaXN0X3dha2V1cHMgLz0gMjsKKwkJCQloaXN0X2lvcyAvPSAyOworCQkJ fQorCiAJCQlpb2ggPSAmcGdhaW9fY3RsLT5pb19oYW5kbGVzW2lvX2luZGV4XTsKIAkJCWVycm9y X2lvaCA9IGlvaDsKIAkJCWVycmNhbGxiYWNrLmFyZyA9IGlvaDsKQEAgLTUzNyw2ICs5MDcsMTkg QEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pCiAJCQl9CiAjZW5kaWYKIAorI2lmZGVmIFBHQUlPX1dPUktFUl9TSE9XX1BTX0lO Rk8KKwkJCXsKKwkJCQljaGFyCSAgICpkZXNjcmlwdGlvbiA9IHBnYWlvX2lvX2dldF90YXJnZXRf ZGVzY3JpcHRpb24oaW9oKTsKKworCQkJCXNwcmludGYoY21kLCAiJWQ6IFslc10gJXMiLAorCQkJ CQkJTXlJb1dvcmtlcklkLAorCQkJCQkJcGdhaW9faW9fZ2V0X29wX25hbWUoaW9oKSwKKwkJCQkJ CXBnYWlvX2lvX2dldF90YXJnZXRfZGVzY3JpcHRpb24oaW9oKSk7CisJCQkJcGZyZWUoZGVzY3Jp cHRpb24pOworCQkJCXNldF9wc19kaXNwbGF5KGNtZCk7CisJCQl9CisjZW5kaWYKKwogCQkJLyoK IAkJCSAqIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvIGV2ZXIgZmFpbCB3aXRoIEVSUk9SIG9yIEZB VEFMLCBubyBuZWVkCiAJCQkgKiB0byBrZWVwIGVycm9yX2lvaCBzZXQgdG8gdGhlIElPLgpAQCAt NTUwLDggKzkzMyw3NiBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJfQogCQllbHNlCiAJCXsKLQkJCVdhaXRMYXRjaChN eUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAtMSwKLQkJCQkJICBX QUlUX0VWRU5UX0lPX1dPUktFUl9NQUlOKTsKKwkJCWludAkJCXRpbWVvdXRfbXM7CisKKwkJCS8q IENhbmNlbCBuZXcgd29ya2VyIHJlcXVlc3QgaWYgcGVuZGluZy4gKi8KKwkJCXBnYWlvX3dvcmtl cl9jYW5jZWxfZ3JvdygpOworCisJCQkvKiBDb21wdXRlIHRoZSByZW1haW5pbmcgYWxsb3dlZCBp ZGxlIHRpbWUuICovCisJCQlpZiAoaW9fd29ya2VyX2lkbGVfdGltZW91dCA9PSAtMSkKKwkJCXsK KwkJCQkvKiBOZXZlciB0aW1lIG91dC4gKi8KKwkJCQl0aW1lb3V0X21zID0gLTE7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OworCisJCQkJLyogSWYgdGhlIEdVQyBjaGFuZ2VzLCByZXNldCB0aW1lci4gKi8KKwkJCQlpZiAo aWRsZV90aW1lb3V0X2FicyAhPSAwICYmCisJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgIT0g dGltZW91dF9ndWNfdXNlZCkKKwkJCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisKKwkJCQkvKiBP bmx5IHRoZSBoaWdoZXN0LW51bWJlcmVkIHdvcmtlciBjYW4gdGltZSBvdXQuICovCisJCQkJaWYg KHBnYWlvX3dvcmtlcl9jYW5fdGltZW91dCgpKQorCQkJCXsKKwkJCQkJaWYgKGlkbGVfdGltZW91 dF9hYnMgPT0gMCkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEkgaGF2ZSBqdXN0IGJlZW4g cHJvbW90ZWQgdG8gdGhlIHRpbWVvdXQgd29ya2VyLCBvcgorCQkJCQkJICogdGhlIEdVQyBjaGFu Z2VkLiAgQ29tcHV0ZSBuZXcgYWJzb2x1dGUgdGltZSBmcm9tCisJCQkJCQkgKiBub3cuCisJCQkJ CQkgKi8KKwkJCQkJCWlkbGVfdGltZW91dF9hYnMgPQorCQkJCQkJCVRpbWVzdGFtcFR6UGx1c01p bGxpc2Vjb25kcyhub3csCisJCQkJCQkJCQkJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQpOwor CQkJCQkJdGltZW91dF9ndWNfdXNlZCA9IGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ7CisJCQkJCX0K KwkJCQkJdGltZW91dF9tcyA9CisJCQkJCQlUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRz KG5vdywgaWRsZV90aW1lb3V0X2Ficyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8q IE5vIHRpbWVvdXQgZm9yIG1lLiAqLworCQkJCQlpZGxlX3RpbWVvdXRfYWJzID0gMDsKKwkJCQkJ dGltZW91dF9tcyA9IC0xOworCQkJCX0KKwkJCX0KKworI2lmZGVmIFBHQUlPX1dPUktFUl9TSE9X X1BTX0lORk8KKwkJCXNwcmludGYoY21kLCAiJWQ6IGlkbGUsIHdha2V1cHM6aW9zID0gJWQ6JWQi LAorCQkJCQlNeUlvV29ya2VySWQsIGhpc3Rfd2FrZXVwcywgaGlzdF9pb3MpOworCQkJc2V0X3Bz X2Rpc3BsYXkoY21kKTsKKyNlbmRpZgorCisJCQlpZiAoV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xB VENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9USU1FT1VULAorCQkJCQkJICB0aW1l b3V0X21zLAorCQkJCQkJICBXQUlUX0VWRU5UX0lPX1dPUktFUl9NQUlOKSA9PSBXTF9USU1FT1VU KQorCQkJeworCQkJCS8qIFdMX1RJTUVPVVQgKi8KKwkJCQlpZiAocGdhaW9fd29ya2VyX2Nhbl90 aW1lb3V0KCkpCisJCQkJCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gaWRsZV90aW1lb3V0 X2FicykKKwkJCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIFdMX0xBVENI X1NFVCAqLworCQkJCWlmICgrK2hpc3Rfd2FrZXVwcyA9PSBQR0FJT19XT1JLRVJfV0FLRVVQX1JB VElPX1NBVFVSQVRFKQorCQkJCXsKKwkJCQkJaGlzdF93YWtldXBzIC89IDI7CisJCQkJCWhpc3Rf aW9zIC89IDI7CisJCQkJfQorCQkJfQogCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKIAkJfQogCkBA IC01NjEsNiArMTAxMiwxMCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJewogCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9 IGZhbHNlOwogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlv X21heF93b3JrZXJzIGhhcyBiZWVuIGRlY3JlYXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLwor CQkJaWYgKE15SW9Xb3JrZXJJZCA+PSBpb19tYXhfd29ya2VycykKKwkJCQlicmVhazsKIAkJfQog CX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dAppbmRleCA3YmRhNTI5ODU1OC4uNTYwNjU5Zjk1NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjksNiArMzY5LDcgQEAgQWlv V29ya2VyU3VibWlzc2lvblF1ZXVlCSJXYWl0aW5nIHRvIGFjY2VzcyBBSU8gd29ya2VyIHN1Ym1p c3Npb24gcXVldWUuIgogV2FpdExTTgkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBzaGFyZWQg V2FpdC1mb3ItTFNOIHN0YXRlLiIKIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wJIldhaXRpbmcgdG8g cmVhZCBvciB1cGRhdGUgbG9naWNhbCBkZWNvZGluZyBzdGF0dXMgaW5mb3JtYXRpb24uIgogRGF0 YUNoZWNrc3Vtc1dvcmtlcgkiV2FpdGluZyBmb3IgZGF0YSBjaGVja3N1bXMgd29ya2VyLiIKK0Fp b1dvcmtlckNvbnRyb2wJIldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3b3JrZXIgaW5mb3JtYXRpb24u IgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBDSEFOR0UgVEhJUyBM SU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5k YXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCA4NmMx ZWJhNWRhYi4uODNhZjU5NGQ0YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CkBAIC0xMzkwLDYgKzEzOTAsMTQgQEAKICAgY2hlY2tfaG9vayA9PiAnY2hlY2tf aW9fbWF4X2NvbmN1cnJlbmN5JywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fbWF4X3dvcmtlcnMnLCB0 eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNF U19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01heGltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJv Y2Vzc2VzLCBmb3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAnaW9fbWF4X3dv cmtlcnMnLAorICBib290X3ZhbCA9PiAnOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAnTUFY X0lPX1dPUktFUlMnLAorfSwKKwogeyBuYW1lID0+ICdpb19tZXRob2QnLCB0eXBlID0+ICdlbnVt JywgY29udGV4dCA9PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnUkVTT1VSQ0VTX0lPJywK ICAgc2hvcnRfZGVzYyA9PiAnU2VsZWN0cyB0aGUgbWV0aG9kIGZvciBleGVjdXRpbmcgYXN5bmNo cm9ub3VzIEkvTy4nLAogICB2YXJpYWJsZSA9PiAnaW9fbWV0aG9kJywKQEAgLTEzOTgsMTQgKzE0 MDYsMzIgQEAKICAgYXNzaWduX2hvb2sgPT4gJ2Fzc2lnbl9pb19tZXRob2QnLAogfSwKIAoteyBu YW1lID0+ICdpb193b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hV UCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAotICBzaG9ydF9kZXNjID0+ICdOdW1iZXIgb2Yg SU8gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKLSAgdmFyaWFibGUg PT4gJ2lvX3dvcmtlcnMnLAotICBib290X3ZhbCA9PiAnMycsCit7IG5hbWUgPT4gJ2lvX21pbl93 b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ ICdSRVNPVVJDRVNfSU8nLAorICBzaG9ydF9kZXNjID0+ICdNaW5pbXVtIG51bWJlciBvZiBJL08g d29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUgPT4g J2lvX21pbl93b3JrZXJzJywKKyAgYm9vdF92YWwgPT4gJzInLAogICBtaW4gPT4gJzEnLAogICBt YXggPT4gJ01BWF9JT19XT1JLRVJTJywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fd29ya2VyX2lkbGVf dGltZW91dCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9 PiAnUkVTT1VSQ0VTX0lPJywKKyAgc2hvcnRfZGVzYyA9PiAnTWF4aW11bSB0aW1lIGJlZm9yZSBp ZGxlIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRpbWUgb3V0LCBmb3IgaW9fbWV0aG9kPXdvcmtlci4n LAorICB2YXJpYWJsZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsCisgIGZsYWdzID0+ICdH VUNfVU5JVF9NUycsCisgIGJvb3RfdmFsID0+ICc2MDAwMCcsCisgIG1pbiA9PiAnMCcsCisgIG1h eCA9PiAnSU5UX01BWCcsCit9LAorCit7IG5hbWUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2 YWwnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JF U09VUkNFU19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01pbmltdW0gdGltZSBiZWZvcmUgbGF1bmNo aW5nIGEgbmV3IEkvTyB3b3JrZXIgcHJvY2VzcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAg dmFyaWFibGUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLAorICBmbGFncyA9PiAnR1VD X1VOSVRfTVMnLAorICBib290X3ZhbCA9PiAnMTAwJywKKyAgbWluID0+ICcwJywKKyAgbWF4ID0+ ICdJTlRfTUFYJywKK30sCisKICMgTm90IGZvciBnZW5lcmFsIHVzZSAtLS0gdXNlZCBieSBTRVQg U0VTU0lPTiBBVVRIT1JJWkFUSU9OIGFuZCBTRVQKICMgUk9MRQogeyBuYW1lID0+ICdpc19zdXBl cnVzZXInLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFMJywgZ3JvdXAg PT4gJ1VOR1JPVVBFRCcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUKaW5kZXggNGYyYmJmMDUyOTUuLjVlMWU0OWYwYWU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yMjIsNyArMjIyLDExIEBA CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gZXhlY3V0ZSBz aW11bHRhbmVvdXNseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg LTEgc2V0cyBiYXNlZCBvbiBzaGFyZWRfYnVmZmVycwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI2lvX3dvcmtlcnMg PSAzICAgICAgICAgICAgICAgICAgICAgICAgICMgMS0zMjsKKworI2lvX21pbl93b3JrZXJzID0g MiAgICAgICAgICAgICAgICAgICAgICMgMS0zMiAoY2hhbmdlIHJlcXVpcmVzIHBnX3JlbG9hZF9j b25mKCkpCisjaW9fbWF4X3dvcmtlcnMgPSA4ICAgICAgICAgICAgICAgICAgICAgIyAxLTMyCisj aW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwcworI2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwg PSAxMDBtcwogCiAjIC0gV29ya2VyIFByb2Nlc3NlcyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvaW9fd29ya2VyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5o CmluZGV4IGY3ZDU5OThhMTM4Li5jODUyYzlmMzc0MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9pb193b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5o CkBAIC0xNyw2ICsxNywxNSBAQAogCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBJb1dvcmtlck1h aW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiAK LWV4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fd29ya2VyczsKKy8qIFB1YmxpYyBHVUNzLiAqLwor ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpb19taW5fd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9S VCBpbnQgaW9fbWF4X3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9p ZGxlX3RpbWVvdXQ7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9sYXVuY2hfaW50 ZXJ2YWw7CisKKy8qIEludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgcG9zdG1hc3Rlci4gKi8KK2V4 dGVybiBib29sIHBnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3dfc2lnbmFsX3NlbnQodm9pZCk7Citl eHRlcm4gdm9pZCBwZ2Fpb193b3JrZXJfcG1fY2xlYXJfZ3Jvd19zaWduYWxfc2VudCh2b2lkKTsK K2V4dGVybiBib29sIHBnYWlvX3dvcmtlcl9wbV90ZXN0X2dyb3codm9pZCk7CiAKICNlbmRpZgkJ CQkJCQkvKiBJT19XT1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9s d2xvY2tsaXN0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCBhZjg1 NTNiY2I2Yy4uZDdlYjY0OGJkMjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHds b2NrbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC04OCw2 ICs4OCw3IEBAIFBHX0xXTE9DSyg1MywgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlKQogUEdfTFdM T0NLKDU0LCBXYWl0TFNOKQogUEdfTFdMT0NLKDU1LCBMb2dpY2FsRGVjb2RpbmdDb250cm9sKQog UEdfTFdMT0NLKDU2LCBEYXRhQ2hlY2tzdW1zV29ya2VyKQorUEdfTFdMT0NLKDU3LCBBaW9Xb3Jr ZXJDb250cm9sKQogCiAvKgogICogVGhlcmUgYWxzbyBleGlzdCBzZXZlcmFsIGJ1aWx0LWluIExX TG9jayB0cmFuY2hlcy4gIEFzIHdpdGggdGhlIHByZWRlZmluZWQKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aAppbmRleCAwMDFlNmVlYTYxYy4uYmNjZTQwMTE3OTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcG1zaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgK QEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBlbnVtCiAJUE1TSUdOQUxfUk9UQVRFX0xPR0ZJTEUs CS8qIHNlbmQgU0lHVVNSMSB0byBzeXNsb2dnZXIgdG8gcm90YXRlIGxvZ2ZpbGUgKi8KIAlQTVNJ R05BTF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSLAkvKiBzdGFydCBhbiBhdXRvdmFjdXVtIGxhdW5j aGVyICovCiAJUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19XT1JLRVIsCS8qIHN0YXJ0IGFuIGF1dG92 YWN1dW0gd29ya2VyICovCisJUE1TSUdOQUxfSU9fV09SS0VSX0dST1csCS8qIEkvTyB3b3JrZXIg cG9vbCB3YW50cyB0byBncm93ICovCiAJUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdF LAkvKiBiYWNrZ3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2UgKi8KIAlQTVNJR05BTF9TVEFSVF9X QUxSRUNFSVZFUiwgLyogc3RhcnQgYSB3YWxyZWNlaXZlciAqLwogCVBNU0lHTkFMX0FEVkFOQ0Vf U1RBVEVfTUFDSElORSwgLyogYWR2YW5jZSBwb3N0bWFzdGVyJ3Mgc3RhdGUgbWFjaGluZSAqLwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsCmluZGV4IDM0 YmMxMzJlYTA4Li5iOTc3NTgxMWQ0ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby90LzAwMl9pb193b3JrZXJzLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8v dC8wMDJfaW9fd29ya2Vycy5wbApAQCAtMTQsNiArMTQsOSBAQCAkbm9kZS0+aW5pdCgpOwogJG5v ZGUtPmFwcGVuZF9jb25mKAogCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKIGlvX21ldGhvZD13b3Jr ZXIKK2lvX3dvcmtlcl9pZGxlX3RpbWVvdXQ9MG1zCitpb193b3JrZXJfbGF1bmNoX2ludGVydmFs PTBtcworaW9fbWF4X3dvcmtlcnM9MzIKICkpOwogCiAkbm9kZS0+c3RhcnQoKTsKQEAgLTMxLDcg KzM0LDcgQEAgc3ViIHRlc3RfbnVtYmVyX29mX2lvX3dvcmtlcnNfZHluYW1pYwogewogCW15ICRu b2RlID0gc2hpZnQ7CiAKLQlteSAkcHJldl93b3JrZXJfY291bnQgPSAkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICdTSE9XIGlvX3dvcmtlcnMnKTsKKwlteSAkcHJldl93b3JrZXJfY291bnQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyk7CiAK IAkjIFZlcmlmeSB0aGF0IHdvcmtlciBjb3VudCBjYW4ndCBiZSBzZXQgdG8gMAogCWNoYW5nZV9u dW1iZXJfb2ZfaW9fd29ya2Vycygkbm9kZSwgMCwgJHByZXZfd29ya2VyX2NvdW50LCAxKTsKQEAg LTYyLDI0ICs2NSwyNCBAQCBzdWIgY2hhbmdlX251bWJlcl9vZl9pb193b3JrZXJzCiAJbXkgKCRy ZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpOwogCiAJKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIp ID0KLQkgICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTWVNURU0gU0VUIGlvX3dvcmtl cnMgPSAkd29ya2VyX2NvdW50Iik7CisJICAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiQUxURVIg U1lTVEVNIFNFVCBpb19taW5fd29ya2VycyA9ICR3b3JrZXJfY291bnQiKTsKIAkkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKScpOwogCiAJaWYgKCRl eHBlY3RfZmFpbHVyZSkKIAl7CiAJCWxpa2UoCiAJCQkkc3RkZXJyLAotCQkJcXIvJHdvcmtlcl9j b3VudCBpcyBvdXRzaWRlIHRoZSB2YWxpZCByYW5nZSBmb3IgcGFyYW1ldGVyICJpb193b3JrZXJz Ii8sCi0JCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX3dvcmtlcnMgdG8gJHdvcmtlcl9jb3VudCBm YWlsZWQsIGFzIGV4cGVjdGVkIgorCQkJcXIvJHdvcmtlcl9jb3VudCBpcyBvdXRzaWRlIHRoZSB2 YWxpZCByYW5nZSBmb3IgcGFyYW1ldGVyICJpb19taW5fd29ya2VycyIvLAorCQkJInVwZGF0aW5n IGlvX21pbl93b3JrZXJzIHRvICR3b3JrZXJfY291bnQgZmFpbGVkLCBhcyBleHBlY3RlZCIKIAkJ KTsKIAogCQlyZXR1cm4gJHByZXZfd29ya2VyX2NvdW50OwogCX0KIAllbHNlCiAJewotCQlpcygg JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBpb193b3JrZXJzJyksCisJCWlzKCAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyksCiAJCQkk d29ya2VyX2NvdW50LAotCQkJInVwZGF0aW5nIG51bWJlciBvZiBpb193b3JrZXJzIGZyb20gJHBy ZXZfd29ya2VyX2NvdW50IHRvICR3b3JrZXJfY291bnQiCisJCQkidXBkYXRpbmcgbnVtYmVyIG9m IGlvX21pbl93b3JrZXJzIGZyb20gJHByZXZfd29ya2VyX2NvdW50IHRvICR3b3JrZXJfY291bnQi CiAJCSk7CiAKIAkJY2hlY2tfaW9fd29ya2VyX2NvdW50KCRub2RlLCAkd29ya2VyX2NvdW50KTsK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMmRmZTFiMzg4MjYuLjNkZWE1MTY5MTJjIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjI3MSw2ICsyMjcxLDcgQEAgUGdBaW9Vcmlu Z0NhcHMKIFBnQWlvVXJpbmdDb250ZXh0CiBQZ0Fpb1dhaXRSZWYKIFBnQWlvV29ya2VyQ29udHJv bAorUGdBaW9Xb3JrZXJTZXQKIFBnQWlvV29ya2VyU2xvdAogUGdBaW9Xb3JrZXJTdWJtaXNzaW9u UXVldWUKIFBnQXJjaERhdGEKLS0gCjIuNTMuMAoK --000000000000646f87064ee9655c--