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 1wAGpQ-002DvE-30 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 00:31:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAGpP-003UgY-14 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 00:31:31 +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 1wAGpO-003Ug4-30 for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 00:31:31 +0000 Received: from mail-dy1-x1331.google.com ([2607:f8b0:4864:20::1331]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAGpM-00000001D4I-1GL4 for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 00:31:31 +0000 Received: by mail-dy1-x1331.google.com with SMTP id 5a478bee46e88-2b8095668ebso539620eec.2 for ; Tue, 07 Apr 2026 17:31:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775608286; cv=none; d=google.com; s=arc-20240605; b=aUq8GdUR8E5nbosNyeOMJUboJ2VzcLj1F50HFNcGrewJjcrjGtgIKXQrV2hBlGssLv eadRIZmXgBuAg2GhK5QjN5g6oOkDUxMN65ghkMB8d510IDJ7h8EbUUAxPo47nceICsyH jAe7SwhbStdQ4Z/hXZEzW5qJHE5b5lb5ODpFVtf7w6Tis4zfG5piiATazGlsbyZcas/J 9UaZ6k/qqjr9GuRTQoC7hZLkdLYWvJrkViKVoclE83HB3C1OsXZhxMkhAYLHOnWbq1E9 mfjfZyVNf1vRAgtxMkFoNuj0CNq79GztwCPXR3mJEsxdAttxjFhSsqwUGrIzBQ/eTVbM LuwQ== 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=L6EofOa1rD3hsUDWvJsUkTuSMPDoa0ner42XruUwdz4=; fh=1FO0l4qkztY7w/kSi7CBWnhifj7MWqdPzjkLS+e2DpM=; b=gsdkvDx4cFnQs/5bEmi1/3NcJ252EE10n59ydmKe6LTfRHUor8k51vRcCzVH/lnmIl 2mPRRvjnlDCHDcZ0IiR7XP5VHDzMjnIPLoRwG0DnyGlqs/gW//78QpaST6tEWoBoAIjy vrmoDhthH6GU/9OYGzgky38LQVw9W8ecndu8BbUb9iGr1gb1GGbtrmHmuYyBURj883l/ sPAov9S9EOt4FVjZW0GdUFDwJV1rf6GeQzc2N12yitALZuh65bfFGJXJHWZwzEpG2LHX FHvaAuvxjfd1Vk9+u2Hi8pTxolmVI8fi2JpiZ5QBqJiherGKmiV+ZHZi8bIF10VxvTc6 XxsQ==; 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=1775608286; x=1776213086; 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=L6EofOa1rD3hsUDWvJsUkTuSMPDoa0ner42XruUwdz4=; b=ZJgCA3xf8GRrPjmkImEs8WUiylqTqS9jvc6l4S2AR7uxRBol6hXGar8+ryRAzLHCjS jJ/99gB74pWdyF7z2ZUXWq3fwdhBAnk8DZck5hN7v7Qw3pC0Z7VNkE+BHbpzhJ80c/0F zqkz3QnEMZP8qgU+mdX/lNShByO3fCjejWOBJaXX/fOF37wNX1g1+jt8zHjJV1y3awQW OovSZvVpWAwIn5DU24nmivBccF/m3hV54rPx9uK6TVsNGkaMw39J6jq7y7DTZBrnR7y2 bALXoAOQwQh9HjYvpRbuv/Xhu+B7V2sCRCAc2QMn2PWDSnxau9Q3Heh7zEGI6gnO2aao kcIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775608286; x=1776213086; 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=L6EofOa1rD3hsUDWvJsUkTuSMPDoa0ner42XruUwdz4=; b=OGBYiY012gtmATDNEycC0SLPckYFvQw0cyxefBs9fMRJ5NReZTKNZTDe72Bph0l/6b DjDrhFRNUVSvWVYRzCY6HzqrMfmyZGici/e5T6V7eG/VyjP7ztWYt84jTAXvXr+IPjwO m7LbdeU0FFBbysSLSO7D5Q6MH5C4Re0HhJU2WtrT4Wc234S4kiu+LxAQwmAGLP9QfX8P jFzIwsHJpO/JuV6jlrYc6booVt2r09OfWVhDSIfXFzxRlvEuE/oRAAP75AOLUBwLjfBo ZQRQqCt8QtfVfameUlDC7fPYaltgoM7BepseYScGmS2h+Edry9ZLMdo1jzpChF5zIj3p 1L+Q== X-Forwarded-Encrypted: i=1; AJvYcCU+rB62IwUXCvdMusZPy28by4bU8rTOkdfwU7ky2SVBoEhbNvPbOlU438LuxZbwvlgiZbLi9NDR6bp03Fyo@lists.postgresql.org X-Gm-Message-State: AOJu0YzocylxkbgglJFtnT2jiEeKEG+2OkmK6DzsITHmRKG2/LUL6Wh6 Chjh5evLUTtCdufQ6X21Pnr+v4T4kVgZXT1MsEcMt4RuuWXDsfvQK47CT4QdosfCG5f284PSdm3 vLiAQBk06N7yXlo0/RbOrI7yaziaQ/40= X-Gm-Gg: AeBDievVbrr0niHu9AKFL1RAlLttGLSqzdh8vimC6F3aGj4ZRUSQeNmK0KKjj/NoHKD U4JJxCmpOtz18ATb6TJ1/Wcic3ARR5XpFVIhBD5q4KIr6Y6B7spICDJTTNNRv1tPfzMUMsnZ3b+ nJvOYs13QkLWcfDj2jpzdXeGXhEaEMzP+vzxVR3gmd2v95NUG70s5Mk5YEQgAk1fkktNfSNpYNS 441FCG2bW3N+R2Wx9laIQa41vOxZl3j5PX0AS3EOcuhycJEFeYANPEcV9+1314lTtjRhT91xzJt d1ehe5Eh6eezv3Rg2WBqKqVlqQNXGPH6Vyjzhbvf49b2VRJc6qv8PUBfqwYXfqNk X-Received: by 2002:a05:7301:129a:b0:2c6:2bac:8af with SMTP id 5a478bee46e88-2cbfc958fbdmr3721661eec.6.1775608285724; Tue, 07 Apr 2026 17:31:25 -0700 (PDT) MIME-Version: 1.0 References: <20260328095204.5tsq5bldugeumrtf@erthalion> In-Reply-To: From: Thomas Munro Date: Wed, 8 Apr 2026 12:30:46 +1200 X-Gm-Features: AQROBzAQ-HKIrHHx7aFW07lwRZyuX2vpk0Oqcm_rTCTvZkG-H9lDFxK9tZfBVh8 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="000000000000221435064ee80511" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000221435064ee80511 Content-Type: text/plain; charset="UTF-8" I changed pgaio_worker_request_grow() not to bother the postmaster unless nworkers < io_max_workers. I move that code you wanted outside the loop and did: /* Choose one worker to wake for this batch. */ if (nsync < num_staged_ios) worker = pgaio_worker_choose_idle(-1); I took your suggestion for the names hist_wakeups and hist_ios. For the location of the following line, I preferred not to separate the pre-existing tests of StartWorkerNeeded and HaveCrashedWorker, since they belong together as bgworker concerns. next_wakeup = maybe_start_io_workers_scheduled_at(); I think I've run out of reasons not to commit this, unless your pondering of the grow-trigger heuristics revealed a problem? --000000000000221435064ee80511 Content-Type: text/x-patch; charset="US-ASCII"; name="v6-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v6-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpbab9e0 RnJvbSAwOTY3NmQ2MTE1YzgyYmIxMWJmYzM1YTQxZDM3MDg4OTg3MGNkODA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHY2 XSBhaW86IEFkanVzdCBJL08gd29ya2VyIHBvb2wgc2l6ZSBhdXRvbWF0aWNhbGx5LgoKVGhlIHNp emUgb2YgdGhlIEkvTyB3b3JrZXIgcG9vbCB1c2VkIHRvIGltcGxlbWVudCBpb19tZXRob2Q9d29y a2VyIHdhcwpwcmV2aW91c2x5IGNvbnRyb2xsZWQgYnkgdGhlIGlvX3dvcmtlcnMgc2V0dGluZywg ZGVmYXVsdGluZyB0byAzLiAgSXQKd2FzIGhhcmQgdG8ga25vdyBob3cgdG8gdHVuZSBpdCBlZmZl Y3RpdmVseS4gIEl0IGlzIG5vdyByZXBsYWNlZCB3aXRoOgoKICBpb19taW5fd29ya2Vycz0yCiAg aW9fbWF4X3dvcmtlcnM9OCAodXAgdG8gMzIpCiAgaW9fd29ya2VyX2lkbGVfdGltZW91dD02MHMK ICBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsPTEwMG1zCgpUaGUgcG9vbCBpcyBhdXRvbWF0aWNh bGx5IHNpemVkIHdpdGhpbiB0aGUgY29uZmlndXJlZCByYW5nZSBhY2NvcmRpbmcgdG8KcmVjZW50 IHZhcmlhdGlvbiBpbiBkZW1hbmQuICBJdCBncm93cyB3aGVuIGV4aXN0aW5nIHdvcmtlcnMgZGV0 ZWN0IGEKYmFja2xvZywgYW5kIHNocmlua3Mgd2hlbiB0aGUgaGlnaGVzdCBudW1iZXJlZCB3b3Jr ZXIgaXMgaWRsZSBmb3IgdG9vCmxvbmcuICBXb3JrIHdhcyBhbHJlYWR5IGNvbmNlbnRyYXRlZCBp bnRvIGxvdy1udW1iZXJlZCB3b3JrZXJzIGluCmFudGljaXBhdGlvbiBvZiB0aGlzIGxvZ2ljLgoK VGhlIGxvZ2ljIGZvciB3YWtpbmcgZXh0cmEgd29ya2VycyBub3cgYWxzbyB0cmllcyB0byBtZWFz dXJlIGFuZCByZWR1Y2UKdGhlIG51bWJlciBvZiBzcHVyaW91cyB3YWtldXBzLCB0aG91Z2ggdGhl eSBhcmUgbm90IGVudGlyZWx5IGVsaW1pbmF0ZWQuCgpSZXZpZXdlZC1ieTogRG1pdHJ5IERvbGdv diA8OWVydGhhbGlvbjZAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5k cmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVL RyUyQm00eFYwTE1vSDJjJTNEb1JBZEVYdUNuaCUyQnRHQlRXYTd1RmVGTUdnVExBdyUyQlElNDBt YWlsLmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICA2OSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAg ICAgICAgIHwgMTY2ICsrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2Vy LmMgICAgICAgfCA2MDEgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDM0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29y a2VyLmggICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAy X2lvX3dvcmtlcnMucGwgfCAgMTUgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA3NTkgaW5zZXJ0aW9ucygr 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 YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBhZTgyOTc0NzAwNC4uZjdkNTNi MDJlYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisr 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 TF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0UpKQogCXsKQEAgLTQ0MDIsNDQgKzQ0MjcsMTA0IEBA 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 eSBwcm9jZWVkIGlmIGEgImdyb3ciIHJlcXVlc3QgaXMgcGVuZGluZyBmcm9tIGV4aXN0aW5nIHdv cmtlcnMuICovCisJaWYgKCFwZ2Fpb193b3JrZXJfcG1fdGVzdF9ncm93KCkpCisJCXJldHVybiAw OwogCi0JQXNzZXJ0KHBtU3RhdGUgPCBQTV9XQUlUX0lPX1dPUktFUlMpOworCS8qCisJICogbWF5 YmVfc3RhcnRfaW9fd29ya2VycygpIHNob3VsZCBzdGFydCBhIG5ldyBJL08gd29ya2VyIGFmdGVy IHRoaXMgdGltZSwKKwkgKiBvciBhcyBzb29uIGFzIHBvc3NpYmxlIGlmIGlzIGFscmVhZHkgaW4g dGhlIHBhc3QuCisJICovCisJcmV0dXJuIGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lOworfQor CisvKgorICogU3RhcnQgSS9PIHdvcmtlcnMgaWYgcmVxdWlyZWQuICBVc2VkIGF0IHN0YXJ0dXAs IHRvIHJlc3BvbmQgdG8gY2hhbmdlIG9mCisgKiB0aGUgaW9fbWluX3dvcmtlcnMgR1VDLCB3aGVu IGFza2VkIHRvIHN0YXJ0IGEgbmV3IG9uZSBkdWUgdG8gc3VibWlzc2lvbgorICogcXVldWUgYmFj a2xvZywgYW5kIGFmdGVyIHdvcmtlcnMgdGVybWluYXRlIGluIHJlc3BvbnNlIHRvIGVycm9ycyAo YnkKKyAqIHN0YXJ0aW5nICJyZXBsYWNlbWVudCIgd29ya2VycykuCisgKi8KK3N0YXRpYyB2b2lk CittYXliZV9zdGFydF9pb193b3JrZXJzKHZvaWQpCit7CisJVGltZXN0YW1wVHogc2NoZWR1bGVk X2F0OwogCi0JLyogTm90IGVub3VnaCBydW5uaW5nPyAqLwotCXdoaWxlIChpb193b3JrZXJfY291 bnQgPCBpb193b3JrZXJzKQorCXdoaWxlICgoc2NoZWR1bGVkX2F0ID0gbWF5YmVfc3RhcnRfaW9f d29ya2Vyc19zY2hlZHVsZWRfYXQoKSkgIT0gMCkKIAl7CisJCVRpbWVzdGFtcFR6IG5vdyA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKIAkJUE1DaGlsZCAgICAqY2hpbGQ7CiAJCWludAkJCWk7CiAK KwkJQXNzZXJ0KHBtU3RhdGUgPCBQTV9XQUlUX0lPX1dPUktFUlMpOworCisJCS8qIFN0aWxsIHdh aXRpbmcgZm9yIHRoZSBzY2hlZHVsZWQgdGltZT8gKi8KKwkJaWYgKHNjaGVkdWxlZF9hdCA+IG5v dykKKwkJCWJyZWFrOworCisJCS8qIENsZWFyIHRoZSBncm93IHJlcXVlc3QgZmxhZyBpZiBpdCBp cyBzZXQuICovCisJCXBnYWlvX3dvcmtlcl9wbV9jbGVhcl9ncm93KCk7CisKKwkJLyoKKwkJICog Q29tcHV0ZSBuZXh0IGxhdW5jaCB0aW1lIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZSwg c28gdGhhdAorCQkgKiB0aW1lIHNwZW50IG9uIHRoZSBwb3N0bWFzdGVyJ3Mgb3RoZXIgZHV0aWVz IGRvbid0IHJlc3VsdCBpbiBhbgorCQkgKiBpbmFjY3VyYXRlIGxhdW5jaCBpbnRlcnZhbC4KKwkJ ICovCisJCWlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0KKwkJCVRpbWVzdGFtcFR6UGx1c01p bGxpc2Vjb25kcyhpb193b3JrZXJfbGF1bmNoX25leHRfdGltZSwKKwkJCQkJCQkJCQlpb193b3Jr ZXJfbGF1bmNoX2ludGVydmFsKTsKKworCQkvKgorCQkgKiBJZiB0aGF0J3MgYWxyZWFkeSBpbiB0 aGUgcGFzdCwgdGhlIGludGVydmFsIGlzIGVpdGhlciBpbXBvc3NpYmx5CisJCSAqIHNob3J0IG9y IHdlIHJlY2VpdmVkIG5vIHJlcXVlc3RzIGZvciBuZXcgd29ya2VycyBmb3IgYSBwZXJpb2QuCisJ CSAqIENvbXB1dGUgYSBuZXcgZnV0dXJlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIGxhc3QgbGF1bmNo IHRpbWUgaW5zdGVhZC4KKwkJICovCisJCWlmIChpb193b3JrZXJfbGF1bmNoX25leHRfdGltZSA8 PSBub3cpCisJCQlpb193b3JrZXJfbGF1bmNoX25leHRfdGltZSA9CisJCQkJVGltZXN0YW1wVHpQ bHVzTWlsbGlzZWNvbmRzKG5vdywgaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCk7CisKIAkJLyog ZmluZCB1bnVzZWQgZW50cnkgaW4gaW9fd29ya2VyX2NoaWxkcmVuIGFycmF5ICovCiAJCWZvciAo aSA9IDA7IGkgPCBNQVhfSU9fV09SS0VSUzsgKytpKQogCQl7CkBAIC00NDU3LDIyICs0NTQyLDIx IEBAIG1heWJlX2FkanVzdF9pb193b3JrZXJzKHZvaWQpCiAJCQkrK2lvX3dvcmtlcl9jb3VudDsK IAkJfQogCQllbHNlCi0JCQlicmVhazsJCQkJLyogdHJ5IGFnYWluIG5leHQgdGltZSAqLwotCX0K LQotCS8qIFRvbyBtYW55IHJ1bm5pbmc/ICovCi0JaWYgKGlvX3dvcmtlcl9jb3VudCA+IGlvX3dv cmtlcnMpCi0JewotCQkvKiBhc2sgdGhlIElPIHdvcmtlciBpbiB0aGUgaGlnaGVzdCBzbG90IHRv IGV4aXQgKi8KLQkJZm9yIChpbnQgaSA9IE1BWF9JT19XT1JLRVJTIC0gMTsgaSA+PSAwOyAtLWkp CiAJCXsKLQkJCWlmIChpb193b3JrZXJfY2hpbGRyZW5baV0gIT0gTlVMTCkKLQkJCXsKLQkJCQlr aWxsKGlvX3dvcmtlcl9jaGlsZHJlbltpXS0+cGlkLCBTSUdVU1IyKTsKLQkJCQlicmVhazsKLQkJ CX0KKwkJCS8qCisJCQkgKiBGb3JrIGZhaWx1cmU6IHdlJ2xsIHRyeSBhZ2FpbiBhZnRlciB0aGUg bGF1bmNoIGludGVydmFsCisJCQkgKiBleHBpcmVzLCBvciBiZSBjYWxsZWQgYWdhaW4gd2l0aG91 dCBkZWxheSBpZiB3ZSBkb24ndCB5ZXQgaGF2ZQorCQkJICogaW9fbWluX3dvcmtlcnMuICBEb24n dCBsb29wIGhlcmUgdGhvdWdoLCB0aGUgcG9zdG1hc3RlciBoYXMKKwkJCSAqIG90aGVyIGR1dGll cy4KKwkJCSAqLworCQkJYnJlYWs7CiAJCX0KIAl9CisKKwkvKgorCSAqIFdvcmtlcnMgZGVjaWRl IHdoZW4gdG8gc2h1dCBkb3duIGJ5IHRoZW1zZWx2ZXMsIGFjY29yZGluZyB0byB0aGUKKwkgKiBp b19tYXhfd29ya2VycyBhbmQgaW9fd29ya2VyX2lkbGVfdGltZW91dCBHVUNzLgorCSAqLwogfQog CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwppbmRleCBlYjY4NmNlZGUx YS4uMmJhODIzYWJhOTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhv ZF93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMK QEAgLTExLDkgKzExLDggQEAKICAqIGluZnJhc3RydWN0dXJlIGZvciByZW9wZW5pbmcgdGhlIGZp bGUsIGFuZCBtdXN0IHByb2Nlc3NlZCBzeW5jaHJvbm91c2x5IGJ5CiAgKiB0aGUgY2xpZW50IGNv ZGUgd2hlbiBzdWJtaXR0ZWQuCiAgKgotICogU28gdGhhdCB0aGUgc3VibWl0dGVyIGNhbiBtYWtl IGp1c3Qgb25lIHN5c3RlbSBjYWxsIHdoZW4gc3VibWl0dGluZyBhIGJhdGNoCi0gKiBvZiBJT3Ms IHdha2V1cHMgImZhbiBvdXQiOyBlYWNoIHdva2VuIElPIHdvcmtlciBjYW4gd2FrZSB0d28gbW9y ZS4gWFhYIFRoaXMKLSAqIGNvdWxkIGJlIGltcHJvdmVkIGJ5IHVzaW5nIGZ1dGV4ZXMgaW5zdGVh ZCBvZiBsYXRjaGVzIHRvIHdha2UgTiB3YWl0ZXJzLgorICogVGhlIHBvb2wgb2Ygd29ya2VycyB0 cmllcyB0byBzdGFiaWxpemUgYXQgYSBzaXplIHRoYXQgY2FuIGhhbmRsZSByZWNlbnRseQorICog c2VlbiB2YXJpYXRpb24gaW4gZGVtYW5kLCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgbGltaXRzLgog ICoKICAqIFRoaXMgbWV0aG9kIG9mIEFJTyBpcyBhdmFpbGFibGUgaW4gYWxsIGJ1aWxkcyBvbiBh bGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZAogICogaXMgdGhlIGRlZmF1bHQuCkBAIC0yOSw2ICsy OCw4IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSA8bGltaXRzLmg+CisK ICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKQEAgLTQwLDYgKzQxLDggQEAKICNpbmNsdWRlICJz dG9yYWdlL2lvX3dvcmtlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCkBAIC00OCwxMCAr NTEsMjIgQEAKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy93 YWl0X2V2ZW50LmgiCiAKKy8qCisgKiBTYXR1cmF0aW9uIGZvciBjb3VudGVycyB1c2VkIHRvIGVz dGltYXRlIHdha2V1cDpJTyByYXRpby4KKyAqCisgKiBXZSBtYWludGFpbiBoaXN0X3dha2V1cHMg Zm9yIHdha2V1cHMgcmVjZWl2ZWQgYW5kIGhpc3RfaW9zIGZvciBJT3MKKyAqIHByb2Nlc3NlZCBi eSBlYWNoIHdvcmtlci4gIFdoZW4gZWl0aGVyIGNvdW50ZXIgcmVhY2hlcyB0aGlzIHNhdHVyYXRp b24KKyAqIHZhbHVlLCB3ZSBkaXZpZGUgYm90aCBieSB0d28uICBUaGUgcmVzdWx0IGlzIGFuIGV4 cG9uZW50aWFsbHkgZGVjYXlpbmcKKyAqIHJhdGlvIG9mIHdha2V1cHMgdG8gSU9zLCB3aXRoIGEg dmVyeSBzaG9ydCBtZW1vcnkuCisgKgorICogSWYgYSB3b3JrZXIgaXMgaXRzZWxmIGV4cGVyaWVu Y2luZyB1c2VsZXNzIHdha2V1cHMsIGl0IGFzc3VtZXMgdGhhdAorICogaGlnaGVyLW51bWJlcmVk IHdvcmtlcnMgd291bGQgZXhwZXJpZW5jZSBldmVuIG1vcmUsIHNvIGl0IHNob3VsZCBlbmQgdGhl CisgKiBjaGFpbi4KKyAqLworI2RlZmluZSBQR0FJT19XT1JLRVJfV0FLRVVQX1JBVElPX1NBVFVS QVRFIDQKIAotLyogSG93IG1hbnkgd29ya2VycyBzaG91bGQgZWFjaCB3b3JrZXIgd2FrZSB1cCBp ZiBuZWVkZWQ/ICovCi0jZGVmaW5lIElPX1dPUktFUl9XQUtFVVBfRkFOT1VUIDIKLQorLyogRGVi dWdnaW5nIHN1cHBvcnQ6IHNob3cgY3VycmVudCBJTyBhbmQgd2FrZXVwczppb3Mgc3RhdGlzdGlj cyBpbiBwcy4gKi8KKy8qICNkZWZpbmUgUEdBSU9fV09SS0VSX1NIT1dfUFNfSU5GTyAqLwogCiB0 eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQogewpAQCAtNjMsMTMgKzc4 LDM0IEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCiAKIHR5cGVk ZWYgc3RydWN0IFBnQWlvV29ya2VyU2xvdAogewotCUxhdGNoCSAgICpsYXRjaDsKLQlib29sCQlp bl91c2U7CisJUHJvY051bWJlcglwcm9jX251bWJlcjsKIH0gUGdBaW9Xb3JrZXJTbG90OwogCisv KgorICogU2V0cyBvZiB3b3JrZXIgSURzIGFyZSBoZWxkIGluIGEgc2ltcGxlIGJpdG1hcCwgYWNj ZXNzZWQgdGhyb3VnaCBmdW5jdGlvbnMKKyAqIHRoYXQgcHJvdmlkZSBhIG1vcmUgcmVhZGFibGUg YWJzdHJhY3Rpb24uICBJZiB3ZSB3YW50ZWQgdG8gc3VwcG9ydCBtb3JlCisgKiB3b3JrZXJzIHRo YW4gdGhhdCwgdGhlIGNvbnRlbnRpb24gb24gdGhlIHNpbmdsZSBxdWV1ZSB3b3VsZCBzdXJlbHkg Z2V0IHRvbworICogaGlnaCwgc28gd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtdWx0aXBsZSBw b29scyBpbnN0ZWFkIG9mIHdpZGVuaW5nIHRoaXMuCisgKi8KK3R5cGVkZWYgdWludDY0IFBnQWlv V29ya2VyU2V0OworCisjZGVmaW5lIFBHQUlPX1dPUktFUlNFVF9CSVRTIChzaXplb2YoUGdBaW9X b3JrZXJTZXQpICogQ0hBUl9CSVQpCisKK3N0YXRpY19hc3NlcnQoUEdBSU9fV09SS0VSU0VUX0JJ VFMgPj0gTUFYX0lPX1dPUktFUlMsICJ0b28gc21hbGwiKTsKKwogdHlwZWRlZiBzdHJ1Y3QgUGdB aW9Xb3JrZXJDb250cm9sCiB7Ci0JdWludDY0CQlpZGxlX3dvcmtlcl9tYXNrOworCS8qIFNlZW4g YnkgcG9zdG1hc3RlciAqLworCWJvb2wJCWdyb3c7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlTG9jay4gKi8KKwlQZ0Fpb1dvcmtlclNldCBpZGxlX3dvcmtlcnNl dDsKKworCS8qIFByb3RlY3RlZCBieSBBaW9Xb3JrZXJDb250cm9sTG9jay4gKi8KKwlQZ0Fpb1dv cmtlclNldCB3b3JrZXJzZXQ7CisJaW50CQkJbndvcmtlcnM7CisKKwkvKiBQcm90ZWN0ZWQgYnkg QWlvV29ya2VyQ29udHJvbExvY2suICovCiAJUGdBaW9Xb3JrZXJTbG90IHdvcmtlcnNbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gUGdBaW9Xb3JrZXJDb250cm9sOwogCkBAIC05MSwxNSArMTI3 LDEwOCBAQCBjb25zdCBJb01ldGhvZE9wcyBwZ2Fpb193b3JrZXJfb3BzID0gewogCiAKIC8qIEdV Q3MgKi8KLWludAkJCWlvX3dvcmtlcnMgPSAzOworaW50CQkJaW9fbWluX3dvcmtlcnMgPSAyOwor aW50CQkJaW9fbWF4X3dvcmtlcnMgPSA4OworaW50CQkJaW9fd29ya2VyX2lkbGVfdGltZW91dCA9 IDYwMDAwOworaW50CQkJaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCA9IDEwMDsKIAogCiBzdGF0 aWMgaW50CWlvX3dvcmtlcl9xdWV1ZV9zaXplID0gNjQ7Ci1zdGF0aWMgaW50CU15SW9Xb3JrZXJJ ZDsKK3N0YXRpYyBpbnQJTXlJb1dvcmtlcklkID0gLTE7CiBzdGF0aWMgUGdBaW9Xb3JrZXJTdWJt aXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlvV29y a2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKIAorc3RhdGljIHZvaWQKK3BnYWlvX3dv cmtlcnNldF9pbml0aWFsaXplKFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNldCA9IDA7Cit9 CisKK3N0YXRpYyBib29sCitwZ2Fpb193b3JrZXJzZXRfaXNfZW1wdHkoUGdBaW9Xb3JrZXJTZXQg KnNldCkKK3sKKwlyZXR1cm4gKnNldCA9PSAwOworfQorCitzdGF0aWMgUGdBaW9Xb3JrZXJTZXQK K3BnYWlvX3dvcmtlcnNldF9zaW5nbGV0b24oaW50IHdvcmtlcikKK3sKKwlBc3NlcnQod29ya2Vy ID49IDAgJiYgd29ya2VyIDwgTUFYX0lPX1dPUktFUlMpOworCXJldHVybiBVSU5UNjRfQygxKSA8 PCB3b3JrZXI7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJzZXRfYWxsKFBnQWlvV29y a2VyU2V0ICpzZXQpCit7CisJKnNldCA9IFVJTlQ2NF9NQVggPj4gKFBHQUlPX1dPUktFUlNFVF9C SVRTIC0gTUFYX0lPX1dPUktFUlMpOworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2Vyc2V0 X3N1YnRyYWN0KFBnQWlvV29ya2VyU2V0ICpzZXQxLCBjb25zdCBQZ0Fpb1dvcmtlclNldCAqc2V0 MikKK3sKKwkqc2V0MSAmPSB+KnNldDI7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJz ZXRfaW5zZXJ0KFBnQWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJQXNzZXJ0KHdv cmtlciA+PSAwICYmIHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0IHw9IHBnYWlvX3dv cmtlcnNldF9zaW5nbGV0b24od29ya2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtl cnNldF9yZW1vdmUoUGdBaW9Xb3JrZXJTZXQgKnNldCwgaW50IHdvcmtlcikKK3sKKwlBc3NlcnQo d29ya2VyID49IDAgJiYgd29ya2VyIDwgTUFYX0lPX1dPUktFUlMpOworCSpzZXQgJj0gfnBnYWlv X3dvcmtlcnNldF9zaW5nbGV0b24od29ya2VyKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dv cmtlcnNldF9yZW1vdmVfbHRlKFBnQWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJ QXNzZXJ0KHdvcmtlciA+PSAwICYmIHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwkqc2V0ICY9 ICh+KFBnQWlvV29ya2VyU2V0KSAwKSA8PCAod29ya2VyICsgMSk7Cit9CisKK3N0YXRpYyBpbnQK K3BnYWlvX3dvcmtlcnNldF9nZXRfaGlnaGVzdChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCUFz c2VydCghcGdhaW9fd29ya2Vyc2V0X2lzX2VtcHR5KHNldCkpOworCXJldHVybiBwZ19sZWZ0bW9z dF9vbmVfcG9zNjQoKnNldCk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9nZXRf bG93ZXN0KFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJzZXRf aXNfZW1wdHkoc2V0KSk7CisJcmV0dXJuIHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9 CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9wb3BfbG93ZXN0KFBnQWlvV29ya2VyU2V0 ICpzZXQpCit7CisJaW50CQkJd29ya2VyID0gcGdhaW9fd29ya2Vyc2V0X2dldF9sb3dlc3Qoc2V0 KTsKKworCXBnYWlvX3dvcmtlcnNldF9yZW1vdmUoc2V0LCB3b3JrZXIpOworCXJldHVybiB3b3Jr ZXI7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorcGdhaW9f d29ya2Vyc2V0X2NvbnRhaW5zKFBnQWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJ QXNzZXJ0KHdvcmtlciA+PSAwICYmIHdvcmtlciA8IE1BWF9JT19XT1JLRVJTKTsKKwlyZXR1cm4g KCpzZXQgJiBwZ2Fpb193b3JrZXJzZXRfc2luZ2xldG9uKHdvcmtlcikpICE9IDA7Cit9CisKK3N0 YXRpYyBpbnQKK3BnYWlvX3dvcmtlcnNldF9jb3VudChQZ0Fpb1dvcmtlclNldCAqc2V0KQorewor CXJldHVybiBwZ19wb3Bjb3VudDY0KCpzZXQpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBw Z2Fpb193b3JrZXJfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpCiB7CkBAIC0xMzMsMzcgKzI2Miwx MzEgQEAgcGdhaW9fd29ya2VyX3NobWVtX2luaXQodm9pZCAqYXJnKQogCWlvX3dvcmtlcl9zdWJt aXNzaW9uX3F1ZXVlLT5zaXplID0gcXVldWVfc2l6ZTsKIAlpb193b3JrZXJfc3VibWlzc2lvbl9x dWV1ZS0+aGVhZCA9IDA7CiAJaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPnRhaWwgPSAwOwor CWlvX3dvcmtlcl9jb250cm9sLT5ncm93ID0gZmFsc2U7CisJcGdhaW9fd29ya2Vyc2V0X2luaXRp YWxpemUoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNldF9p bml0aWFsaXplKCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJzZXQpOwogCi0JaW9fd29y a2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgPSAwOwogCWZvciAoaW50IGkgPSAwOyBpIDwg TUFYX0lPX1dPUktFUlM7ICsraSkKKwkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ucHJv Y19udW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworfQorCisvKgorICogVGVsbCBwb3N0bWFz dGVyIHRoYXQgd2UgdGhpbmsgYSBuZXcgd29ya2VyIGlzIG5lZWRlZC4KKyAqLworc3RhdGljIHZv aWQKK3BnYWlvX3dvcmtlcl9yZXF1ZXN0X2dyb3codm9pZCkKK3sKKwlpZiAoIWlvX3dvcmtlcl9j b250cm9sLT5ncm93KQogCXsKLQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2gg PSBOVUxMOwotCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsK KwkJLyoKKwkJICogU3VwcHJlc3MgdXNlbGVzcyBzaWduYWxpbmcgaWYgd2UgYWxyZWFkeSBrbm93 IHRoYXQgd2UncmUgYXQgdGhlCisJCSAqIG1heGltdW0uICBUaGlzIHVzZXMgYW4gdW5sb2NrZWQg cmVhZCBvZiBud29ya2VycywgYnV0IHRoYXQncyBPSyBmb3IKKwkJICogdGhpcyBoZXVyaXN0aWMg cHVycG9zZS4KKwkJICovCisJCWlmIChpb193b3JrZXJfY29udHJvbC0+bndvcmtlcnMgPCBpb19t YXhfd29ya2VycykKKwkJeworCQkJaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cgPSB0cnVlOworCQkJ cGdfbWVtb3J5X2JhcnJpZXIoKTsKKwkJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0lP X1dPUktFUl9HUk9XKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENhbmNlbCBhbnkgcmVxdWVzdCBm b3IgYSBuZXcgd29ya2VyLCBhZnRlciBvYnNlcnZpbmcgYW4gZW1wdHkgcXVldWUuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfY2FuY2VsX2dyb3codm9pZCkKK3sKKwlpZiAoaW9fd29y a2VyX2NvbnRyb2wtPmdyb3cpCisJeworCQlpb193b3JrZXJfY29udHJvbC0+Z3JvdyA9IGZhbHNl OworCQlwZ19tZW1vcnlfYmFycmllcigpOwogCX0KIH0KIAorLyoKKyAqIENhbGxlZCBieSB0aGUg cG9zdG1hc3RlciB0byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaXMgcmVxdWVzdGVkLgorICovCiti b29sCitwZ2Fpb193b3JrZXJfcG1fdGVzdF9ncm93KHZvaWQpCit7CisJcGdfbWVtb3J5X2JhcnJp ZXIoKTsKKwlyZXR1cm4gaW9fd29ya2VyX2NvbnRyb2wgJiYgaW9fd29ya2VyX2NvbnRyb2wtPmdy b3c7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgdG8gY2xlYXIgdGhlIHJl cXVlc3QgZm9yIGEgbmV3IHdvcmtlci4KKyAqLwordm9pZAorcGdhaW9fd29ya2VyX3BtX2NsZWFy X2dyb3codm9pZCkKK3sKKwlpZiAoaW9fd29ya2VyX2NvbnRyb2wpCisJCWlvX3dvcmtlcl9jb250 cm9sLT5ncm93ID0gZmFsc2U7CisJcGdfbWVtb3J5X2JhcnJpZXIoKTsKK30KKwogc3RhdGljIGlu dAotcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKHZvaWQpCitwZ2Fpb193b3JrZXJfY2hvb3NlX2lk bGUoaW50IG9ubHlfd29ya2Vyc19hYm92ZSkKIHsKKwlQZ0Fpb1dvcmtlclNldCB3b3JrZXJzZXQ7 CiAJaW50CQkJd29ya2VyOwogCi0JaWYgKGlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9t YXNrID09IDApCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Np b25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCisJd29ya2Vyc2V0ID0gaW9fd29ya2VyX2Nv bnRyb2wtPmlkbGVfd29ya2Vyc2V0OworCWlmIChvbmx5X3dvcmtlcnNfYWJvdmUgPj0gMCkKKwkJ cGdhaW9fd29ya2Vyc2V0X3JlbW92ZV9sdGUoJndvcmtlcnNldCwgb25seV93b3JrZXJzX2Fib3Zl KTsKKwlpZiAocGdhaW9fd29ya2Vyc2V0X2lzX2VtcHR5KCZ3b3JrZXJzZXQpKQogCQlyZXR1cm4g LTE7CiAKLQkvKiBGaW5kIHRoZSBsb3dlc3QgYml0IHBvc2l0aW9uLCBhbmQgY2xlYXIgaXQuICov Ci0Jd29ya2VyID0gcGdfcmlnaHRtb3N0X29uZV9wb3M2NChpb193b3JrZXJfY29udHJvbC0+aWRs ZV93b3JrZXJfbWFzayk7Ci0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0g fihVSU5UNjRfQygxKSA8PCB3b3JrZXIpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc1t3b3JrZXJdLmluX3VzZSk7CisJLyogRmluZCB0aGUgbG93ZXN0IG51bWJlcmVkIGlkbGUg d29ya2VyIGFuZCBtYXJrIGl0IG5vdCBpZGxlLiAqLworCXdvcmtlciA9IHBnYWlvX3dvcmtlcnNl dF9nZXRfbG93ZXN0KCZ3b3JrZXJzZXQpOworCXBnYWlvX3dvcmtlcnNldF9yZW1vdmUoJmlvX3dv cmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcnNldCwgd29ya2VyKTsKIAogCXJldHVybiB3b3JrZXI7 CiB9CiAKKy8qCisgKiBUcnkgdG8gd2FrZSBhIHdvcmtlciBieSBzZXR0aW5nIGl0cyBsYXRjaCwg dG8gdGVsbCBpdCB0aGVyZSBhcmUgSU9zIHRvCisgKiBwcm9jZXNzIGluIHRoZSBzdWJtaXNzaW9u IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3dha2UoaW50IHdvcmtlcikK K3sKKwlQcm9jTnVtYmVyCXByb2NfbnVtYmVyOworCisJLyoKKwkgKiBJZiB0aGUgc2VsZWN0ZWQg d29ya2VyIGlzIGNvbmN1cnJlbnRseSBleGl0aW5nLCB0aGVuIHBnYWlvX3dvcmtlcl9kaWUoKQor CSAqIGhhZCBub3QgeWV0IHJlbW92ZWQgaXQgYXMgb2Ygd2hlbiB3ZSBzYXcgaXQgaW4gaWRsZV93 b3JrZXJzZXQuICBUaGF0J3MKKwkgKiBPSywgYmVjYXVzZSBpdCB3aWxsIHdha2UgYWxsIHJlbWFp bmluZyB3b3JrZXJzIHRvIGNsb3NlIHdha2V1cC12cy1leGl0CisJICogcmFjZXM6ICpzb21lb25l KiB3aWxsIHNlZSB0aGUgcXVldWVkIElPLiAgSWYgdGhlcmUgYXJlIG5vIHdvcmtlcnMKKwkgKiBy dW5uaW5nLCB0aGUgcG9zdG1hc3RlciB3aWxsIHN0YXJ0IGEgbmV3IG9uZS4KKwkgKi8KKwlwcm9j X251bWJlciA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY19udW1iZXI7 CisJaWYgKHByb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCisJCVNldExhdGNoKCZH ZXRQR1Byb2NCeU51bWJlcihwcm9jX251bWJlciktPnByb2NMYXRjaCk7Cit9CisKKy8qCisgKiBU cnkgdG8gd2FrZSBhIHNldCBvZiB3b3JrZXJzLiAgVXNlZCBvbiBwb29sIGNoYW5nZSwgdG8gY2xv c2UgcmFjZXMKKyAqIGRlc2NyaWJlZCBpbiB0aGUgY2FsbGVycy4KKyAqLworc3RhdGljIHZvaWQK K3BnYWlvX3dvcmtlcnNldF93YWtlKFBnQWlvV29ya2VyU2V0IHdvcmtlcnNldCkKK3sKKwl3aGls ZSAoIXBnYWlvX3dvcmtlcnNldF9pc19lbXB0eSgmd29ya2Vyc2V0KSkKKwkJcGdhaW9fd29ya2Vy X3dha2UocGdhaW9fd29ya2Vyc2V0X3BvcF9sb3dlc3QoJndvcmtlcnNldCkpOworfQorCiBzdGF0 aWMgYm9vbAogcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfaW5zZXJ0KFBnQWlvSGFuZGxl ICppb2gpCiB7CiAJUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUgKnF1ZXVlOwogCXVpbnQzMgkJ bmV3X2hlYWQ7CiAKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKSk7CisKIAlxdWV1ZSA9IGlvX3dvcmtlcl9zdWJt aXNzaW9uX3F1ZXVlOwogCW5ld19oZWFkID0gKHF1ZXVlLT5oZWFkICsgMSkgJiAocXVldWUtPnNp emUgLSAxKTsKIAlpZiAobmV3X2hlYWQgPT0gcXVldWUtPnRhaWwpCkBAIC0xODUsNiArNDA4LDgg QEAgcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfY29uc3VtZSh2b2lkKQogCVBnQWlvV29y a2VyU3VibWlzc2lvblF1ZXVlICpxdWV1ZTsKIAlpbnQJCQlyZXN1bHQ7CiAKKwlBc3NlcnQoTFdM b2NrSGVsZEJ5TWVJbk1vZGUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVT SVZFKSk7CisKIAlxdWV1ZSA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogCWlmIChxdWV1 ZS0+dGFpbCA9PSBxdWV1ZS0+aGVhZCkKIAkJcmV0dXJuIC0xOwkJCQkvKiBlbXB0eSAqLwpAQCAt MjAxLDYgKzQyNiw4IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKHZvaWQp CiAJdWludDMyCQloZWFkOwogCXVpbnQzMgkJdGFpbDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlN ZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwog CWhlYWQgPSBpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+aGVhZDsKIAl0YWlsID0gaW9fd29y a2VyX3N1Ym1pc3Npb25fcXVldWUtPnRhaWw7CiAKQEAgLTIyNiw4ICs0NTMsNyBAQCBwZ2Fpb193 b3JrZXJfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRf aW9zKQogewogCVBnQWlvSGFuZGxlICoqc3luY2hyb25vdXNfaW9zID0gTlVMTDsKIAlpbnQJCQlu c3luYyA9IDA7Ci0JTGF0Y2gJICAgKndha2V1cCA9IE5VTEw7Ci0JaW50CQkJd29ya2VyOworCWlu dAkJCXdvcmtlciA9IC0xOwogCiAJQXNzZXJ0KG51bV9zdGFnZWRfaW9zIDw9IFBHQUlPX1NVQk1J VF9CQVRDSF9TSVpFKTsKIApAQCAtMjUxLDIwICs0NzcsMTUgQEAgcGdhaW9fd29ya2VyX3N1Ym1p dCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAogCQkJ CWJyZWFrOwogCQkJfQotCi0JCQlpZiAod2FrZXVwID09IE5VTEwpCi0JCQl7Ci0JCQkJLyogQ2hv b3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LiAqLwot CQkJCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpOwotCQkJCWlmICh3b3JrZXIg Pj0gMCkKLQkJCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5s YXRjaDsKLQotCQkJCXBnYWlvX2RlYnVnX2lvKERFQlVHNCwgc3RhZ2VkX2lvc1tpXSwKLQkJCQkJ CQkgICAiY2hvb3Npbmcgd29ya2VyICVkIiwKLQkJCQkJCQkgICB3b3JrZXIpOwotCQkJfQogCQl9 CisJCS8qIENob29zZSBvbmUgd29ya2VyIHRvIHdha2UgZm9yIHRoaXMgYmF0Y2guICovCisJCWlm IChuc3luYyA8IG51bV9zdGFnZWRfaW9zKQorCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29z ZV9pZGxlKC0xKTsKIAkJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2Nr KTsKKworCQkvKiBXYWtlIHVwIGNob3NlbiB3b3JrZXIuICBJdCB3aWxsIHdha2UgcGVlcnMgaWYg bmVjZXNzYXJ5LiAqLworCQlpZiAobnN5bmMgPT0gMCkKKwkJCXBnYWlvX3dvcmtlcl93YWtlKHdv cmtlcik7CiAJfQogCWVsc2UKIAl7CkBAIC0yNzMsOSArNDk0LDYgQEAgcGdhaW9fd29ya2VyX3N1 Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAkJ bnN5bmMgPSBudW1fc3RhZ2VkX2lvczsKIAl9CiAKLQlpZiAod2FrZXVwKQotCQlTZXRMYXRjaCh3 YWtldXApOwotCiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25vdXNseS4gKi8KIAlp ZiAobnN5bmMgPiAwKQogCXsKQEAgLTI5NSwxNCArNTEzLDMwIEBAIHBnYWlvX3dvcmtlcl9zdWJt aXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiBzdGF0 aWMgdm9pZAogcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogewotCUxXTG9j a0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlB c3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2UpOwot CUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID09 IE15TGF0Y2gpOworCVBnQWlvV29ya2VyU2V0IG5vdGlmeV9zZXQ7CiAKLQlpb193b3JrZXJfY29u dHJvbC0+aWRsZV93b3JrZXJfbWFzayAmPSB+KFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7 Ci0JaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2UgPSBmYWxz ZTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID0gTlVM TDsKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xV U0lWRSk7CisJcGdhaW9fd29ya2Vyc2V0X3JlbW92ZSgmaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVf d29ya2Vyc2V0LCBNeUlvV29ya2VySWQpOwogCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlTG9jayk7CisKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBM V19FWENMVVNJVkUpOworCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29y a2VySWRdLnByb2NfbnVtYmVyID09IE15UHJvY051bWJlcik7CisJaW9fd29ya2VyX2NvbnRyb2wt PndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7 CisJQXNzZXJ0KHBnYWlvX3dvcmtlcnNldF9jb250YWlucygmaW9fd29ya2VyX2NvbnRyb2wtPndv cmtlcnNldCwgTXlJb1dvcmtlcklkKSk7CisJcGdhaW9fd29ya2Vyc2V0X3JlbW92ZSgmaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcnNldCwgTXlJb1dvcmtlcklkKTsKKwlub3RpZnlfc2V0ID0gaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNldDsKKwlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPm53 b3JrZXJzID4gMCk7CisJaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzLS07CisJQXNzZXJ0KHBn YWlvX3dvcmtlcnNldF9jb3VudCgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldCkgPT0KKwkJ ICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtl ckNvbnRyb2xMb2NrKTsKKworCS8qCisJICogTm90aWZ5IG90aGVyIHdvcmtlcnMgb24gcG9vbCBj aGFuZ2UuICBUaGlzIGFsbG93cyB0aGUgbmV3IGhpZ2hlc3QKKwkgKiB3b3JrZXIgdG8ga25vdyB0 aGF0IGl0IGlzIG5vdyB0aGUgb25lIHRoYXQgY2FuIHRpbWUgb3V0LCBhbmQgY2xvc2VzIGEKKwkg KiB3YWtldXAtbG9zcyByYWNlIGRlc2NyaWJlZCBpbiBwZ2Fpb193b3JrZXJfd2FrZSgpLgorCSAq LworCXBnYWlvX3dvcmtlcnNldF93YWtlKG5vdGlmeV9zZXQpOwogfQogCiAvKgpAQCAtMzEyLDMz ICs1NDYsMzggQEAgcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogc3RhdGlj IHZvaWQKIHBnYWlvX3dvcmtlcl9yZWdpc3Rlcih2b2lkKQogeworCVBnQWlvV29ya2VyU2V0IGZy ZWVfd29ya2Vyc2V0OworCVBnQWlvV29ya2VyU2V0IG9sZF93b3JrZXJzZXQ7CisKIAlNeUlvV29y a2VySWQgPSAtMTsKIAotCS8qCi0JICogWFhYOiBUaGlzIGNvdWxkIGRvIHdpdGggbW9yZSBmaW5l LWdyYWluZWQgbG9ja2luZy4gQnV0IGl0J3MgYWxzbyBub3QKLQkgKiB2ZXJ5IGNvbW1vbiBmb3Ig dGhlIG51bWJlciBvZiB3b3JrZXJzIHRvIGNoYW5nZSBhdCB0aGUgbW9tZW50Li4uCi0JICovCi0J TFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUp OworCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CisJ LyogRmluZCBsb3dlc3QgdW51c2VkIHdvcmtlciBJRC4gKi8KKwlwZ2Fpb193b3JrZXJzZXRfYWxs KCZmcmVlX3dvcmtlcnNldCk7CisJcGdhaW9fd29ya2Vyc2V0X3N1YnRyYWN0KCZmcmVlX3dvcmtl cnNldCwgJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQpOworCWlmICghcGdhaW9fd29ya2Vy c2V0X2lzX2VtcHR5KCZmcmVlX3dvcmtlcnNldCkpCisJCU15SW9Xb3JrZXJJZCA9IHBnYWlvX3dv cmtlcnNldF9nZXRfbG93ZXN0KCZmcmVlX3dvcmtlcnNldCk7CisJaWYgKE15SW9Xb3JrZXJJZCA9 PSAtMSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdvcmtlciBJRCIpOwog Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU9fV09SS0VSUzsgKytpKQotCXsKLQkJaWYgKCFp b193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UpCi0JCXsKLQkJCUFzc2VydChpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCA9PSBOVUxMKTsKLQkJCWlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW2ldLmluX3VzZSA9IHRydWU7Ci0JCQlNeUlvV29ya2VySWQgPSBpOwot CQkJYnJlYWs7Ci0JCX0KLQkJZWxzZQotCQkJQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3Jr ZXJzW2ldLmxhdGNoICE9IE5VTEwpOwotCX0KKwlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndv cmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9PQorCQkgICBJTlZBTElEX1BST0NfTlVN QkVSKTsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2NfbnVt YmVyID0gTXlQcm9jTnVtYmVyOwogCi0JaWYgKE15SW9Xb3JrZXJJZCA9PSAtMSkKLQkJZWxvZyhF UlJPUiwgImNvdWxkbid0IGZpbmQgYSBmcmVlIHdvcmtlciBzbG90Iik7CisJb2xkX3dvcmtlcnNl dCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQ7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJz ZXRfY29udGFpbnMoJm9sZF93b3JrZXJzZXQsIE15SW9Xb3JrZXJJZCkpOworCXBnYWlvX3dvcmtl cnNldF9pbnNlcnQoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzZXQsIE15SW9Xb3JrZXJJZCk7 CisJaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKys7CisJQXNzZXJ0KGlvX3dvcmtlcl9jb250 cm9sLT5ud29ya2VycyA8PSBNQVhfSU9fV09SS0VSUyk7CisJQXNzZXJ0KHBnYWlvX3dvcmtlcnNl dF9jb3VudCgmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldCkgPT0KKwkJICAgaW9fd29ya2Vy X2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2Nr KTsKIAotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrIHw9IChVSU5UNjRfQygx KSA8PCBNeUlvV29ya2VySWQpOwotCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3Jr ZXJJZF0ubGF0Y2ggPSBNeUxhdGNoOwotCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lv blF1ZXVlTG9jayk7CisJLyoKKwkgKiBOb3RpZnkgb3RoZXIgd29ya2VycyBvbiBwb29sIGNoYW5n ZS4gIElmIHdlIHdlcmUgdGhlIGhpZ2hlc3Qgd29ya2VyLAorCSAqIHRoaXMgYWxsb3dzIHRoZSBu ZXcgaGlnaGVzdCB3b3JrZXIgdG8ga25vdyB0aGF0IGl0IGNhbiB0aW1lIG91dC4KKwkgKi8KKwlw Z2Fpb193b3JrZXJzZXRfd2FrZShvbGRfd29ya2Vyc2V0KTsKIAogCW9uX3NobWVtX2V4aXQocGdh aW9fd29ya2VyX2RpZSwgMCk7CiB9CkBAIC0zNjQsMTQgKzYwMyw0OCBAQCBwZ2Fpb193b3JrZXJf ZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCWVycmNvbnRleHQoIkkvTyB3b3JrZXIgZXhlY3V0 aW5nIEkvTyBvbiBiZWhhbGYgb2YgcHJvY2VzcyAlZCIsIG93bmVyX3BpZCk7CiB9CiAKKy8qCisg KiBDaGVjayBpZiB0aGlzIGJhY2tlbmQgaXMgYWxsb3dlZCB0byB0aW1lIG91dCwgYW5kIHRodXMg c2hvdWxkIHVzZSBhCisgKiBub24taW5maW5pdGUgc2xlZXAgdGltZS4gIE9ubHkgdGhlIGhpZ2hl c3QtbnVtYmVyZWQgd29ya2VyIGlzIGFsbG93ZWQgdG8KKyAqIHRpbWUgb3V0LCBhbmQgb25seSBp ZiB0aGUgcG9vbCBpcyBhYm92ZSBpb19taW5fd29ya2Vycy4gIFNlcmlhbGl6aW5nCisgKiB0aW1l b3V0cyBrZWVwcyBJRHMgaW4gYSByYW5nZSAwLi5OIHdpdGhvdXQgZ2FwcywgYW5kIGF2b2lkcyB1 bmRlcnNob290aW5nCisgKiBpb19taW5fd29ya2Vycy4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIG9u bHkgaW5zdGFudGFuZW91c2x5IHRydWUgYW5kIG1heSBiZSB0ZW1wb3JhcmlseSBpbmNvbnNpc3Rl bnQKKyAqIGluIGRpZmZlcmVudCB3b3JrZXJzIGFyb3VuZCB0cmFuc2l0aW9ucywgYnV0IGFsbCB3 b3JrZXJzIGFyZSB3b2tlbiB1cCBvbgorICogcG9vbCBzaXplIG9yIEdVQyBjaGFuZ2VzIG1ha2lu ZyB0aGUgcmVzdWx0IGV2ZW50dWFsbHkgY29uc2lzdGVudC4KKyAqLworc3RhdGljIGJvb2wKK3Bn YWlvX3dvcmtlcl9jYW5fdGltZW91dCh2b2lkKQoreworCVBnQWlvV29ya2VyU2V0IHdvcmtlcnNl dDsKKworCS8qIFNlcmlhbGl6ZSBhZ2FpbnN0IHBvb2wgc2l6ZSBjaGFuZ2VzLiAqLworCUxXTG9j a0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExvY2ssIExXX1NIQVJFRCk7CisJd29ya2Vyc2V0ID0g aW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNldDsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNv bnRyb2xMb2NrKTsKKworCWlmIChNeUlvV29ya2VySWQgIT0gcGdhaW9fd29ya2Vyc2V0X2dldF9o aWdoZXN0KCZ3b3JrZXJzZXQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoTXlJb1dvcmtlcklk IDwgaW9fbWluX3dvcmtlcnMpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQor CiB2b2lkCiBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9idWY7CisJVGltZXN0 YW1wVHogaWRsZV90aW1lb3V0X2FicyA9IDA7CisJaW50CQkJdGltZW91dF9ndWNfdXNlZCA9IDA7 CiAJUGdBaW9IYW5kbGUgKnZvbGF0aWxlIGVycm9yX2lvaCA9IE5VTEw7CiAJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2sgPSB7MH07CiAJdm9sYXRpbGUgaW50IGVycm9yX2Vycm5vID0g MDsKIAljaGFyCQljbWRbMTI4XTsKKwlpbnQJCQloaXN0X2lvcyA9IDA7CisJaW50CQkJaGlzdF93 YWtldXBzID0gMDsKIAogCUF1eGlsaWFyeVByb2Nlc3NNYWluQ29tbW9uKCk7CiAKQEAgLTQzOSwx MCArNzEyLDkgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJd2hpbGUgKCFTaHV0ZG93blJlcXVlc3RQZW5kaW5nKQogCXsK IAkJdWludDMyCQlpb19pbmRleDsKLQkJTGF0Y2gJICAgKmxhdGNoZXNbSU9fV09SS0VSX1dBS0VV UF9GQU5PVVRdOwotCQlpbnQJCQlubGF0Y2hlcyA9IDA7Ci0JCWludAkJCW53YWtldXBzID0gMDsK LQkJaW50CQkJd29ya2VyOworCQlpbnQJCQl3b3JrZXIgPSAtMTsKKwkJaW50CQkJcXVldWVfZGVw dGggPSAwOworCQlib29sCQltYXliZV9ncm93ID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHJ5IHRv IGdldCBhIGpvYiB0byBkby4KQEAgLTQ1MywzOCArNzI1LDEwNiBAQCBJb1dvcmtlck1haW4oY29u c3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJTFdMb2Nr QWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwogCQlp ZiAoKGlvX2luZGV4ID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfY29uc3VtZSgpKSA9 PSAtMSkKIAkJewotCQkJLyoKLQkJCSAqIE5vdGhpbmcgdG8gZG8uICBNYXJrIHNlbGYgaWRsZS4K LQkJCSAqCi0JCQkgKiBYWFg6IEludmVudCBzb21lIGtpbmQgb2YgYmFjayBwcmVzc3VyZSB0byBy ZWR1Y2UgdXNlbGVzcwotCQkJICogd2FrZXVwcz8KLQkJCSAqLwotCQkJaW9fd29ya2VyX2NvbnRy b2wtPmlkbGVfd29ya2VyX21hc2sgfD0gKFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7CisJ CQkvKiBOb3RoaW5nIHRvIGRvLiAgTWFyayBzZWxmIGlkbGUuICovCisJCQlwZ2Fpb193b3JrZXJz ZXRfaW5zZXJ0KCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJzZXQsCisJCQkJCQkJCSAg IE15SW9Xb3JrZXJJZCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiBHb3Qgb25lLiAgQ2xlYXIg aWRsZSBmbGFnLiAqLwotCQkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgJj0g fihVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOworCQkJcGdhaW9fd29ya2Vyc2V0X3JlbW92 ZSgmaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2Vyc2V0LAorCQkJCQkJCQkgICBNeUlvV29y a2VySWQpOwogCi0JCQkvKiBTZWUgaWYgd2UgY2FuIHdha2UgdXAgc29tZSBwZWVycy4gKi8KLQkJ CW53YWtldXBzID0gTWluKHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKCksCi0J CQkJCQkgICBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8 IG53YWtldXBzOyArK2kpCisJCQkvKgorCQkJICogU2VlIGlmIHdlIHNob3VsZCB3YWtlIHVwIGEg aGlnaGVyIG51bWJlcmVkIHBlZXIuICBPbmx5IGRvIHRoYXQKKwkJCSAqIGlmIHRoaXMgd29ya2Vy IGlzIG5vdCByZWNlaXZpbmcgc3B1cmlvdXMgd2FrZXVwcyBpdHNlbGYuICBUaGUKKwkJCSAqIGlu dGVudGlvbiBpcyBjcmVhdGUgYSBmcm9udGllciBiZXlvbmQgd2hpY2ggaWRsZSB3b3JrZXJzIHN0 YXkKKwkJCSAqIGFzbGVlcC4KKwkJCSAqCisJCQkgKiBUaGlzIGhldXJpc3RpYyB0cmllcyB0byBk aXNjb3ZlciB0aGUgdXNlZnVsIHdha2V1cCBwcm9wYWdhdGlvbgorCQkJICogY2hhaW4gbGVuZ3Ro IHdoZW4gSU9zIGFyZSB2ZXJ5IGZhc3QgYW5kIHdvcmtlcnMgd2FrZSB1cCB0byBmaW5kCisJCQkg KiB0aGF0IGFsbCBJT3MgaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4uCisJCQkgKgorCQkJICogSWYg d2UgY2hvc2Ugbm90IHRvIHdha2UgYSB3b3JrZXIgd2hlbiB3ZSBpZGVhbGx5IHNob3VsZCBoYXZl LAorCQkJICogdGhlbiBpb3Mgd2lsbCBzb29uIGV4Y2VlZCB3YWtldXBzLgorCQkJICovCisJCQlp ZiAoaGlzdF93YWtldXBzIDw9IGhpc3RfaW9zKQogCQkJewotCQkJCWlmICgod29ya2VyID0gcGdh aW9fd29ya2VyX2Nob29zZV9pZGxlKCkpIDwgMCkKLQkJCQkJYnJlYWs7Ci0JCQkJbGF0Y2hlc1tu bGF0Y2hlcysrXSA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7CisJ CQkJcXVldWVfZGVwdGggPSBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9kZXB0aCgpOwor CQkJCWlmIChxdWV1ZV9kZXB0aCA+IDApCisJCQkJeworCQkJCQkvKiBDaG9vc2UgYSB3b3JrZXIg aGlnaGVyIHRoYW4gbWUgdG8gd2FrZS4gKi8KKwkJCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2No b29zZV9pZGxlKE15SW9Xb3JrZXJJZCk7CisJCQkJCWlmICh3b3JrZXIgPT0gLTEpCisJCQkJCQlt YXliZV9ncm93ID0gdHJ1ZTsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJTFdMb2NrUmVsZWFzZShBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKIAotCQlmb3IgKGludCBpID0gMDsgaSA8IG5sYXRj aGVzOyArK2kpCi0JCQlTZXRMYXRjaChsYXRjaGVzW2ldKTsKKwkJLyogUHJvcGFnYXRlIHdha2V1 cHMuICovCisJCWlmICh3b3JrZXIgIT0gLTEpCisJCXsKKwkJCXBnYWlvX3dvcmtlcl93YWtlKHdv cmtlcik7CisJCX0KKwkJZWxzZSBpZiAobWF5YmVfZ3JvdykKKwkJeworCQkJLyoKKwkJCSAqIFdl IGtub3cgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBtb3JlIGl0ZW0gaW4gdGhlIHF1ZXVlLCBhbmQg d2UKKwkJCSAqIGZhaWxlZCB0byBmaW5kIGEgaGlnaGVyLW51bWJlcmVkIGlkbGUgd29ya2VyIHRv IHdha2UuICBOb3cgd2UKKwkJCSAqIGRlY2lkZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIHN0YXJ0IG9u ZSBtb3JlIHdvcmtlci4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdpdGggYSBzaW1wbGUgaGV1 cmlzdGljOiBpcyB0aGUgcXVldWUgZGVwdGggZ3JlYXRlcgorCQkJICogdGhhbiB0aGUgY3VycmVu dCBudW1iZXIgb2Ygd29ya2Vycz8KKwkJCSAqCisJCQkgKiBDb25zaWRlciB0aGUgZm9sbG93aW5n IHNpdHVhdGlvbnM6CisJCQkgKgorCQkJICogMS4gVGhlIHF1ZXVlIGRlcHRoIGlzIGNvbnN0YW50 bHkgaW5jcmVhc2luZywgYmVjYXVzZSBJT3MgYXJlCisJCQkgKiBhcnJpdmluZyBmYXN0ZXIgdGhh biB0aGV5IGNhbiBwb3NzaWJseSBiZSBzZXJ2aWNlZC4gIEl0IGRvZXNuJ3QKKwkJCSAqIG1hdHRl ciBtdWNoIHdoaWNoIHRocmVzaG9sZCB3ZSBjaG9vc2UsIGFzIHdlIHdpbGwgc3VyZWx5IGhpdAor CQkJICogaXQuICBDcm9zc2luZyB0aGUgY3VycmVudCB3b3JrZXIgY291bnQgaXMgYSB1c2VmdWwg c2lnbmFsCisJCQkgKiBiZWNhdXNlIGl0J3MgY2xlYXJseSB0b28gZGVlcCB0byBhdm9pZCBxdWV1 aW5nIGxhdGVuY3kgYWxyZWFkeSwKKwkJCSAqIGJ1dCBzdGlsbCBsZWF2ZXMgYSBzbWFsbCB3aW5k b3cgb2Ygb3Bwb3J0dW5pdHkgdG8gaW1wcm92ZSB0aGUKKwkJCSAqIHNpdHVhdGlvbiBiZWZvcmUg dGhlIHF1ZXVlIG92ZWZsb3dzLgorCQkJICoKKwkJCSAqIDIuIFRoZSB3b3JrZXIgcG9vbCBpcyBr ZWVwaW5nIHVwLCBubyBsYXRlbmN5IGlzIGJlaW5nCisJCQkgKiBpbnRyb2R1Y2VkIGFuZCBhbiBl eHRyYSB3b3JrZXIgd291bGQgYmUgYSB3YXN0ZSBvZiByZXNvdXJjZXMuCisJCQkgKiBRdWV1ZSBk ZXB0aCBkaXN0cmlidXRpb25zIHRlbmQgdG8gYmUgaGVhdmlseSBza2V3ZWQsIHdpdGggbG9uZwor CQkJICogdGFpbHMgb2YgbG93IHByb2JhYmlsaXR5IHNwaWtlcyAoZHVlIHRvIHN1Ym1pc3Npb24g Y2x1c3RlcmluZywKKwkJCSAqIHNjaGVkdWxpbmcsIGppdHRlciwgc3RhbGxzLCBub2lzeSBuZWln aGJvcnMsIGV0YykuICBXZSB3YW50IGEKKwkJCSAqIG51bWJlciB0aGF0IGlzIHZlcnkgdW5saWtl bHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGFuIG91dGxpZXIsIGFuZAorCQkJICogd2UgYmV0IHRoYXQg YW4gZXhwb25lbnRpYWwgb3Igc2ltaWxhciBkaXN0cmlidXRpb24gd2hvc2UKKwkJCSAqIG91dGxp ZXJzIG5ldmVyIHJlYWNoIHRoaXMgdGhyZXNob2xkIG11c3QgYmUgYWxtb3N0IGVudGlyZWx5CisJ CQkgKiBjb25jZW50cmF0ZWQgYXQgdGhlIGxvdyBlbmQuICBJZiB3ZSBkbyBzZWUgYSBzcGlrZSBh cyBiaWcgYXMKKwkJCSAqIHRoZSB3b3JrZXIgY291bnQsIHdlIHRha2UgaXQgYXMgYSBzaWduYWwg dGhhdCB0aGUgZGlzdHJpYnV0aW9uCisJCQkgKiBpcyBzdXJlbHkgdG9vIHdpZGUuCisJCQkgKgor CQkJICogT24gaXRzIG93biwgdGhpcyBpcyBhbiBleHRyZW1lbHkgY3J1ZGUgc2lnbmFsLiAgV2hl biBjb21iaW5lZAorCQkJICogd2l0aCB0aGUgd2FrZXVwIHByb3BhZ2F0aW9uIHRlc3QgdGhhdCBw cmVjZWRlcyBpdCBhbmQgdGhlCisJCQkgKiBpb193b3JrZXJfbGF1bmNoX2RlbGF5LCB3ZSBjYW4g dHJ5IGVhY2ggcG9vbCBzaXplIHVudGlsIHdlIGZpbmQKKwkJCSAqIG9uZSB0aGF0IGRvZXNuJ3Qg dHJpZ2dlciBmdXJ0aGVyIGdyb3d0aC4KKwkJCSAqCisJCQkgKiBYWFggSWRlYXMgZnJvbSBxdWV1 ZWluZyB0aGVvcnkgb3IgY29udHJvbCB0aGVvcnkgY291bGQgc3VyZWx5CisJCQkgKiBkbyBhIG11 Y2ggYmV0dGVyIGpvYiBvZiB0aGlzLgorCQkJICovCisKKwkJCS8qIFJlYWQgbndvcmtlcnMgd2l0 aG91dCBsb2NrIGZvciB0aGlzIGhldXJpc3RpYyBwdXJwb3NlLiAqLworCQkJaWYgKHF1ZXVlX2Rl cHRoID4gaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKQorCQkJCXBnYWlvX3dvcmtlcl9yZXF1 ZXN0X2dyb3coKTsKKwkJfQogCiAJCWlmIChpb19pbmRleCAhPSAtMSkKIAkJewogCQkJUGdBaW9I YW5kbGUgKmlvaCA9IE5VTEw7CiAKKwkJCS8qIENhbmNlbCB0aW1lb3V0IGFuZCB1cGRhdGUgd2Fr ZXVwOndvcmsgcmF0aW8uICovCisJCQlpZGxlX3RpbWVvdXRfYWJzID0gMDsKKwkJCWlmICgrK2hp c3RfaW9zID09IFBHQUlPX1dPUktFUl9XQUtFVVBfUkFUSU9fU0FUVVJBVEUpCisJCQl7CisJCQkJ aGlzdF93YWtldXBzIC89IDI7CisJCQkJaGlzdF9pb3MgLz0gMjsKKwkJCX0KKwogCQkJaW9oID0g JnBnYWlvX2N0bC0+aW9faGFuZGxlc1tpb19pbmRleF07CiAJCQllcnJvcl9pb2ggPSBpb2g7CiAJ CQllcnJjYWxsYmFjay5hcmcgPSBpb2g7CkBAIC01MzcsNiArODc3LDE5IEBAIElvV29ya2VyTWFp bihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJ fQogI2VuZGlmCiAKKyNpZmRlZiBQR0FJT19XT1JLRVJfU0hPV19QU19JTkZPCisJCQl7CisJCQkJ Y2hhcgkgICAqZGVzY3JpcHRpb24gPSBwZ2Fpb19pb19nZXRfdGFyZ2V0X2Rlc2NyaXB0aW9uKGlv aCk7CisKKwkJCQlzcHJpbnRmKGNtZCwgIiVkOiBbJXNdICVzIiwKKwkJCQkJCU15SW9Xb3JrZXJJ ZCwKKwkJCQkJCXBnYWlvX2lvX2dldF9vcF9uYW1lKGlvaCksCisJCQkJCQlwZ2Fpb19pb19nZXRf dGFyZ2V0X2Rlc2NyaXB0aW9uKGlvaCkpOworCQkJCXBmcmVlKGRlc2NyaXB0aW9uKTsKKwkJCQlz ZXRfcHNfZGlzcGxheShjbWQpOworCQkJfQorI2VuZGlmCisKIAkJCS8qCiAJCQkgKiBXZSBkb24n dCBleHBlY3QgdGhpcyB0byBldmVyIGZhaWwgd2l0aCBFUlJPUiBvciBGQVRBTCwgbm8gbmVlZAog CQkJICogdG8ga2VlcCBlcnJvcl9pb2ggc2V0IHRvIHRoZSBJTy4KQEAgLTU1MCw4ICs5MDMsNzYg QEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pCiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFU Q0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgLTEsCi0JCQkJCSAgV0FJVF9FVkVOVF9JT19X T1JLRVJfTUFJTik7CisJCQlpbnQJCQl0aW1lb3V0X21zOworCisJCQkvKiBDYW5jZWwgbmV3IHdv cmtlciByZXF1ZXN0IGlmIHBlbmRpbmcuICovCisJCQlwZ2Fpb193b3JrZXJfY2FuY2VsX2dyb3co KTsKKworCQkJLyogQ29tcHV0ZSB0aGUgcmVtYWluaW5nIGFsbG93ZWQgaWRsZSB0aW1lLiAqLwor CQkJaWYgKGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgPT0gLTEpCisJCQl7CisJCQkJLyogTmV2ZXIg dGltZSBvdXQuICovCisJCQkJdGltZW91dF9tcyA9IC0xOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCQkJCS8qIElm IHRoZSBHVUMgY2hhbmdlcywgcmVzZXQgdGltZXIuICovCisJCQkJaWYgKGlkbGVfdGltZW91dF9h YnMgIT0gMCAmJgorCQkJCQlpb193b3JrZXJfaWRsZV90aW1lb3V0ICE9IHRpbWVvdXRfZ3VjX3Vz ZWQpCisJCQkJCWlkbGVfdGltZW91dF9hYnMgPSAwOworCisJCQkJLyogT25seSB0aGUgaGlnaGVz dC1udW1iZXJlZCB3b3JrZXIgY2FuIHRpbWUgb3V0LiAqLworCQkJCWlmIChwZ2Fpb193b3JrZXJf Y2FuX3RpbWVvdXQoKSkKKwkJCQl7CisJCQkJCWlmIChpZGxlX3RpbWVvdXRfYWJzID09IDApCisJ CQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJIGhhdmUganVzdCBiZWVuIHByb21vdGVkIHRvIHRo ZSB0aW1lb3V0IHdvcmtlciwgb3IKKwkJCQkJCSAqIHRoZSBHVUMgY2hhbmdlZC4gIENvbXB1dGUg bmV3IGFic29sdXRlIHRpbWUgZnJvbQorCQkJCQkJICogbm93LgorCQkJCQkJICovCisJCQkJCQlp ZGxlX3RpbWVvdXRfYWJzID0KKwkJCQkJCQlUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMobm93 LAorCQkJCQkJCQkJCQkJCQlpb193b3JrZXJfaWRsZV90aW1lb3V0KTsKKwkJCQkJCXRpbWVvdXRf Z3VjX3VzZWQgPSBpb193b3JrZXJfaWRsZV90aW1lb3V0OworCQkJCQl9CisJCQkJCXRpbWVvdXRf bXMgPQorCQkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhub3csIGlkbGVfdGlt ZW91dF9hYnMpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBObyB0aW1lb3V0IGZv ciBtZS4gKi8KKwkJCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisJCQkJCXRpbWVvdXRfbXMgPSAt MTsKKwkJCQl9CisJCQl9CisKKyNpZmRlZiBQR0FJT19XT1JLRVJfU0hPV19QU19JTkZPCisJCQlz cHJpbnRmKGNtZCwgIiVkOiBpZGxlLCB3YWtldXBzOmlvcyA9ICVkOiVkIiwKKwkJCQkJTXlJb1dv cmtlcklkLCBoaXN0X3dha2V1cHMsIGhpc3RfaW9zKTsKKwkJCXNldF9wc19kaXNwbGF5KGNtZCk7 CisjZW5kaWYKKworCQkJaWYgKFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9F WElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwKKwkJCQkJCSAgdGltZW91dF9tcywKKwkJCQkJ CSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTikgPT0gV0xfVElNRU9VVCkKKwkJCXsKKwkJCQkv KiBXTF9USU1FT1VUICovCisJCQkJaWYgKHBnYWlvX3dvcmtlcl9jYW5fdGltZW91dCgpKQorCQkJ CQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49IGlkbGVfdGltZW91dF9hYnMpCisJCQkJCQli cmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBXTF9MQVRDSF9TRVQgKi8KKwkJCQlp ZiAoKytoaXN0X3dha2V1cHMgPT0gUEdBSU9fV09SS0VSX1dBS0VVUF9SQVRJT19TQVRVUkFURSkK KwkJCQl7CisJCQkJCWhpc3Rfd2FrZXVwcyAvPSAyOworCQkJCQloaXN0X2lvcyAvPSAyOworCQkJ CX0KKwkJCX0KIAkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CiAJCX0KIApAQCAtNTYxLDYgKzk4Miwx MCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1 cF9kYXRhX2xlbikKIAkJewogCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJv Y2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlvX21heF93b3JrZXJzIGhh cyBiZWVuIGRlY3JlYXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15SW9Xb3Jr ZXJJZCA+PSBpb19tYXhfd29ya2VycykKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA3YmRhNTI5 ODU1OC4uNTYwNjU5Zjk1NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjksNiArMzY5LDcgQEAgQWlvV29ya2VyU3VibWlzc2lv blF1ZXVlCSJXYWl0aW5nIHRvIGFjY2VzcyBBSU8gd29ya2VyIHN1Ym1pc3Npb24gcXVldWUuIgog V2FpdExTTgkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBzaGFyZWQgV2FpdC1mb3ItTFNOIHN0 YXRlLiIKIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wJIldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUg bG9naWNhbCBkZWNvZGluZyBzdGF0dXMgaW5mb3JtYXRpb24uIgogRGF0YUNoZWNrc3Vtc1dvcmtl cgkiV2FpdGluZyBmb3IgZGF0YSBjaGVja3N1bXMgd29ya2VyLiIKK0Fpb1dvcmtlckNvbnRyb2wJ IldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3b3JrZXIgaW5mb3JtYXRpb24uIgogCiAjCiAjIEVORCBP RiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCA4NmMxZWJhNWRhYi4uODNhZjU5 NGQ0YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMu ZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0x MzkwLDYgKzEzOTAsMTQgQEAKICAgY2hlY2tfaG9vayA9PiAnY2hlY2tfaW9fbWF4X2NvbmN1cnJl bmN5JywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fbWF4X3dvcmtlcnMnLCB0eXBlID0+ICdpbnQnLCBj b250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19JTycsCisgIHNob3J0 X2Rlc2MgPT4gJ01heGltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLCBmb3IgaW9f bWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAnaW9fbWF4X3dvcmtlcnMnLAorICBib290 X3ZhbCA9PiAnOCcsCisgIG1pbiA9PiAnMScsCisgIG1heCA9PiAnTUFYX0lPX1dPUktFUlMnLAor fSwKKwogeyBuYW1lID0+ICdpb19tZXRob2QnLCB0eXBlID0+ICdlbnVtJywgY29udGV4dCA9PiAn UEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnUkVTT1VSQ0VTX0lPJywKICAgc2hvcnRfZGVzYyA9 PiAnU2VsZWN0cyB0aGUgbWV0aG9kIGZvciBleGVjdXRpbmcgYXN5bmNocm9ub3VzIEkvTy4nLAog ICB2YXJpYWJsZSA9PiAnaW9fbWV0aG9kJywKQEAgLTEzOTgsMTQgKzE0MDYsMzIgQEAKICAgYXNz aWduX2hvb2sgPT4gJ2Fzc2lnbl9pb19tZXRob2QnLAogfSwKIAoteyBuYW1lID0+ICdpb193b3Jr ZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ICdS RVNPVVJDRVNfSU8nLAotICBzaG9ydF9kZXNjID0+ICdOdW1iZXIgb2YgSU8gd29ya2VyIHByb2Nl c3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKLSAgdmFyaWFibGUgPT4gJ2lvX3dvcmtlcnMn LAotICBib290X3ZhbCA9PiAnMycsCit7IG5hbWUgPT4gJ2lvX21pbl93b3JrZXJzJywgdHlwZSA9 PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8n LAorICBzaG9ydF9kZXNjID0+ICdNaW5pbXVtIG51bWJlciBvZiBJL08gd29ya2VyIHByb2Nlc3Nl cywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUgPT4gJ2lvX21pbl93b3JrZXJz JywKKyAgYm9vdF92YWwgPT4gJzInLAogICBtaW4gPT4gJzEnLAogICBtYXggPT4gJ01BWF9JT19X T1JLRVJTJywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsIHR5cGUg PT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAnLCBncm91cCA9PiAnUkVTT1VSQ0VTX0lP JywKKyAgc2hvcnRfZGVzYyA9PiAnTWF4aW11bSB0aW1lIGJlZm9yZSBpZGxlIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRpbWUgb3V0LCBmb3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9 PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsCisgIGZsYWdzID0+ICdHVUNfVU5JVF9NUycsCisg IGJvb3RfdmFsID0+ICc2MDAwMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnSU5UX01BWCcs Cit9LAorCit7IG5hbWUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLCB0eXBlID0+ICdp bnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19JTycsCisg IHNob3J0X2Rlc2MgPT4gJ01pbmltdW0gdGltZSBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3IEkvTyB3 b3JrZXIgcHJvY2VzcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUgPT4gJ2lv X3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLAorICBmbGFncyA9PiAnR1VDX1VOSVRfTVMnLAorICBi b290X3ZhbCA9PiAnMTAwJywKKyAgbWluID0+ICcwJywKKyAgbWF4ID0+ICdJTlRfTUFYJywKK30s CisKICMgTm90IGZvciBnZW5lcmFsIHVzZSAtLS0gdXNlZCBieSBTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OIGFuZCBTRVQKICMgUk9MRQogeyBuYW1lID0+ICdpc19zdXBlcnVzZXInLCB0eXBlID0+ ICdib29sJywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFMJywgZ3JvdXAgPT4gJ1VOR1JPVVBFRCcs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1w bGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXgg NGYyYmJmMDUyOTUuLjVlMWU0OWYwYWU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yMjIsNyArMjIyLDExIEBACiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gZXhlY3V0ZSBzaW11bHRhbmVvdXNseQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTEgc2V0cyBiYXNlZCBv biBzaGFyZWRfYnVmZmVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI2lvX3dvcmtlcnMgPSAzICAgICAgICAgICAg ICAgICAgICAgICAgICMgMS0zMjsKKworI2lvX21pbl93b3JrZXJzID0gMiAgICAgICAgICAgICAg ICAgICAgICMgMS0zMiAoY2hhbmdlIHJlcXVpcmVzIHBnX3JlbG9hZF9jb25mKCkpCisjaW9fbWF4 X3dvcmtlcnMgPSA4ICAgICAgICAgICAgICAgICAgICAgIyAxLTMyCisjaW9fd29ya2VyX2lkbGVf dGltZW91dCA9IDYwcworI2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwgPSAxMDBtcwogCiAjIC0g V29ya2VyIFByb2Nlc3NlcyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaW9f d29ya2VyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCmluZGV4IGY3ZDU5OThh MTM4Li5jZmZmZmQ2MmZkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3Jr ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCkBAIC0xNyw2ICsxNywx NCBAQAogCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiAKLWV4dGVybiBQR0RMTElN UE9SVCBpbnQgaW9fd29ya2VyczsKKy8qIFB1YmxpYyBHVUNzLiAqLworZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBpb19taW5fd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fbWF4X3dv cmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ7Citl eHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw7CisKKy8qIElu dGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgcG9zdG1hc3Rlci4gKi8KK2V4dGVybiBib29sIHBnYWlv X3dvcmtlcl9wbV90ZXN0X2dyb3codm9pZCk7CitleHRlcm4gdm9pZCBwZ2Fpb193b3JrZXJfcG1f Y2xlYXJfZ3Jvdyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIElPX1dPUktFUl9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IGFmODU1M2JjYjZjLi5kN2ViNjQ4YmQyNyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTg4LDYgKzg4LDcgQEAgUEdfTFdMT0NLKDUzLCBBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWUpCiBQR19MV0xPQ0soNTQsIFdhaXRMU04pCiBQR19MV0xPQ0so NTUsIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wpCiBQR19MV0xPQ0soNTYsIERhdGFDaGVja3N1bXNX b3JrZXIpCitQR19MV0xPQ0soNTcsIEFpb1dvcmtlckNvbnRyb2wpCiAKIC8qCiAgKiBUaGVyZSBh bHNvIGV4aXN0IHNldmVyYWwgYnVpbHQtaW4gTFdMb2NrIHRyYW5jaGVzLiAgQXMgd2l0aCB0aGUg cHJlZGVmaW5lZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCmluZGV4IDAwMWU2ZWVhNjFjLi5iY2NlNDAx MTc5MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaApAQCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIGVu dW0KIAlQTVNJR05BTF9ST1RBVEVfTE9HRklMRSwJLyogc2VuZCBTSUdVU1IxIHRvIHN5c2xvZ2dl ciB0byByb3RhdGUgbG9nZmlsZSAqLwogCVBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIs CS8qIHN0YXJ0IGFuIGF1dG92YWN1dW0gbGF1bmNoZXIgKi8KIAlQTVNJR05BTF9TVEFSVF9BVVRP VkFDX1dPUktFUiwJLyogc3RhcnQgYW4gYXV0b3ZhY3V1bSB3b3JrZXIgKi8KKwlQTVNJR05BTF9J T19XT1JLRVJfR1JPVywJLyogSS9PIHdvcmtlciBwb29sIHdhbnRzIHRvIGdyb3cgKi8KIAlQTVNJ R05BTF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0UsCS8qIGJhY2tncm91bmQgd29ya2VyIHN0YXRl IGNoYW5nZSAqLwogCVBNU0lHTkFMX1NUQVJUX1dBTFJFQ0VJVkVSLCAvKiBzdGFydCBhIHdhbHJl Y2VpdmVyICovCiAJUE1TSUdOQUxfQURWQU5DRV9TVEFURV9NQUNISU5FLCAvKiBhZHZhbmNlIHBv c3RtYXN0ZXIncyBzdGF0ZSBtYWNoaW5lICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3QvMDAyX2lvX3dvcmtlcnMucGwKaW5kZXggMzRiYzEzMmVhMDguLmI5Nzc1ODExZDRkIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsCkBAIC0xNCw2 ICsxNCw5IEBAICRub2RlLT5pbml0KCk7CiAkbm9kZS0+YXBwZW5kX2NvbmYoCiAJJ3Bvc3RncmVz cWwuY29uZicsIHFxKAogaW9fbWV0aG9kPXdvcmtlcgoraW9fd29ya2VyX2lkbGVfdGltZW91dD0w bXMKK2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw9MG1zCitpb19tYXhfd29ya2Vycz0zMgogKSk7 CiAKICRub2RlLT5zdGFydCgpOwpAQCAtMzEsNyArMzQsNyBAQCBzdWIgdGVzdF9udW1iZXJfb2Zf aW9fd29ya2Vyc19keW5hbWljCiB7CiAJbXkgJG5vZGUgPSBzaGlmdDsKIAotCW15ICRwcmV2X3dv cmtlcl9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fd29ya2Vy cycpOworCW15ICRwcmV2X3dvcmtlcl9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ1NIT1cgaW9fbWluX3dvcmtlcnMnKTsKIAogCSMgVmVyaWZ5IHRoYXQgd29ya2VyIGNvdW50 IGNhbid0IGJlIHNldCB0byAwCiAJY2hhbmdlX251bWJlcl9vZl9pb193b3JrZXJzKCRub2RlLCAw LCAkcHJldl93b3JrZXJfY291bnQsIDEpOwpAQCAtNjIsMjQgKzY1LDI0IEBAIHN1YiBjaGFuZ2Vf bnVtYmVyX29mX2lvX3dvcmtlcnMKIAlteSAoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycik7CiAK IAkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPQotCSAgJG5vZGUtPnBzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFNZU1RFTSBTRVQgaW9fd29ya2VycyA9ICR3b3JrZXJfY291bnQiKTsKKwkgICRu b2RlLT5wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTWVNURU0gU0VUIGlvX21pbl93b3JrZXJzID0g JHdvcmtlcl9jb3VudCIpOwogCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBw Z19yZWxvYWRfY29uZigpJyk7CiAKIAlpZiAoJGV4cGVjdF9mYWlsdXJlKQogCXsKIAkJbGlrZSgK IAkJCSRzdGRlcnIsCi0JCQlxci8kd29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJh bmdlIGZvciBwYXJhbWV0ZXIgImlvX3dvcmtlcnMiLywKLQkJCSJ1cGRhdGluZyBudW1iZXIgb2Yg aW9fd29ya2VycyB0byAkd29ya2VyX2NvdW50IGZhaWxlZCwgYXMgZXhwZWN0ZWQiCisJCQlxci8k d29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIGZvciBwYXJhbWV0ZXIgImlv X21pbl93b3JrZXJzIi8sCisJCQkidXBkYXRpbmcgaW9fbWluX3dvcmtlcnMgdG8gJHdvcmtlcl9j b3VudCBmYWlsZWQsIGFzIGV4cGVjdGVkIgogCQkpOwogCiAJCXJldHVybiAkcHJldl93b3JrZXJf Y291bnQ7CiAJfQogCWVsc2UKIAl7Ci0JCWlzKCAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdTSE9XIGlvX3dvcmtlcnMnKSwKKwkJaXMoICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg J1NIT1cgaW9fbWluX3dvcmtlcnMnKSwKIAkJCSR3b3JrZXJfY291bnQsCi0JCQkidXBkYXRpbmcg bnVtYmVyIG9mIGlvX3dvcmtlcnMgZnJvbSAkcHJldl93b3JrZXJfY291bnQgdG8gJHdvcmtlcl9j b3VudCIKKwkJCSJ1cGRhdGluZyBudW1iZXIgb2YgaW9fbWluX3dvcmtlcnMgZnJvbSAkcHJldl93 b3JrZXJfY291bnQgdG8gJHdvcmtlcl9jb3VudCIKIAkJKTsKIAogCQljaGVja19pb193b3JrZXJf Y291bnQoJG5vZGUsICR3b3JrZXJfY291bnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCAyZGZlMWIzODgyNi4uM2RlYTUxNjkxMmMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC0yMjcxLDYgKzIyNzEsNyBAQCBQZ0Fpb1VyaW5nQ2FwcwogUGdBaW9VcmluZ0NvbnRleHQKIFBn QWlvV2FpdFJlZgogUGdBaW9Xb3JrZXJDb250cm9sCitQZ0Fpb1dvcmtlclNldAogUGdBaW9Xb3Jr ZXJTbG90CiBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQogUGdBcmNoRGF0YQotLSAKMi41My4w Cgo= --000000000000221435064ee80511--