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 1w9lN7-001iwY-06 for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 14:56:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9lN5-009WQj-1b for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 14:56:11 +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 1w9lN5-009WQZ-0I for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 14:56:11 +0000 Received: from mail-dl1-x1231.google.com ([2607:f8b0:4864:20::1231]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9lN2-00000000uoN-1OJq for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 14:56:11 +0000 Received: by mail-dl1-x1231.google.com with SMTP id a92af1059eb24-128bae6a35aso174928c88.1 for ; Mon, 06 Apr 2026 07:56:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775487366; cv=none; d=google.com; s=arc-20240605; b=IIq4YB0P0iyaR3mn/WmvHr7cmhOtnGkgDWeuL2JDelOdyyl8BLQjANNT7VYuZotZcR SCqeWxid7Vdrp5k5U2JSti/4An/HaVKtKgxVCVj6U4PDl6TI4bynVACOMoIW5W9eVe2q lr6qGkH3ZOoVFcr9EgNMNQNVMc/mezGFAg0q8PTvBMSd1PGlkjWWse9eLe1xBZsTEumy T+2+vw/IWczFU1h7s/GH6rGXL9ypWwDB0KsXS0ZX6bDsW/914SgD5B/6dAqbGWmq2vGd z3NQaeCf0/T7wIrgWdGdKTQLphcEA5jkIEPZT0Mv4GRjKCI3JyaZ+Yw/mHHbPLI8935p eTIg== 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=HBdXl84GBEHUTjwlCES4jqqUE/HVCASNWa2tNfTxZo8=; fh=vUyP1UVtPtub3uyVJ3+QqiQaz3kuzwQGWAIAjEQbabE=; b=N3xZWtwtfquwaaH+pnN07Y/FJu3bVG1ML9wYGKyQCIYhuaU5PkRKUfIWRXEEF5T1cG pqA4xHlJAiwWzHLCAelJB1AEQW9Y7N7Jia1HExwcxRDgmyo6dsa8srCbMAfS0X2yG3Te VuPTvh4x26LmMFgUsHlqW+vgb3Fe8xbv0yE7XShlawltv2ulwbVjc6OHmMO9MYC0nAb4 lhnJOM9u3VP3ECDrfu7NRga1HfsSmOO4V+dOrAotQ507QpdjrxrdrAXqCQRx0KgOn8Ut kvrGZ37iyOoHjJowOkCm/O9JrreX+Kc6WAnsTtV2p+t+WnMB1CAMcUKIl84bdqEQ6YZm BFVA==; 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=1775487366; x=1776092166; 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=HBdXl84GBEHUTjwlCES4jqqUE/HVCASNWa2tNfTxZo8=; b=paBSMfsOxoZiNvCN4n5PEm5PTPW8CV99LGK7e5dcH6FPEwedn0MDGp0W9jMox87N9a lU66jBwow8XUBvdheLE+JTR3r30eFE123AXEEOFohJDiEU/eKm4aKIWgEgdGuS+aCcOH EO/PvuRRFwqWFR/EcZeB+ubICmcMvw4qKK1m5j46GQdGf2wp6ZYBRmcKn1TVQ1jpUYr/ nPoyceZ7rnD6+gJI2y4erdtp3iHT9Zc6A49Kr1+m70M/IpOgNr5gc05Ub16QL2HP9FfG OiY1rFQwwfmnB1fRL4DBU4UF9xIcaFVulviVhsmDQzcnH+/FInEuPMYIyLF3huiOztO4 j3XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775487366; x=1776092166; 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=HBdXl84GBEHUTjwlCES4jqqUE/HVCASNWa2tNfTxZo8=; b=VhQQBRwUOBgN0P9ZPOvMNZlnkC8DdbZMYlw4yIblOveJn37OOmtwi3K50sH5cgFHbm QoxLN/K6x/1A++4xRw72rOeDUik7fJy1KQVoITotM+yZMxpQswaVX4x2T4J8u2BzQMjW DWd7eQJdaGsh5azAGhtxkrphRcnCxnzgtxHVTABD5r8bcCjGY+cgGeBvF1Q0AivGIuMm q+hcluFO9Sg9ugVwRJsq5Ar5zclJOqhpFP/v8uqTg7JUt+5ZbKG1tURWjF3o+Oxzck1n 1Iu9jD8+W2Wyl21btNouYlcbnDFG63ufEARcFVMcfoSg2rOkWYG4yuptzMD1ZtaBdRcv 6rxQ== X-Gm-Message-State: AOJu0YyVBXS1eIzaIfH0zWiC4b1HLdr4XgbB9Yq7xUp8jOVgHMdhmLo/ qD8MYUhHXU4bpnLCBB9XmdYUHZeLWcfpwo68NIpFhaDKngrOji/2+YgwSe4zkY9rV3jzOETCHYy ewH59memp3xwcBGnGNiqPV4lBP6VcJ9A= X-Gm-Gg: AeBDies2SlAuLHaTm7a75yxWx5ok7VWZrxJoinAN2s4nMEdS73rQTFV+mkyYLc8yMFB 8rmI9XZ8G0aFwS++H/EWU60aAMeXQFOvlBPS9ZU7hgMq1br29b/5SKmYFnCx0WnJjInUnjEvv5a AR97ZaUngkQKkNwecPeeM6okm9M21zXzqcG/tMAN//nbpFICWEItwaKIeHkieTOZ44HJo5x/abV 3bF9VQfgmdM5KMWV09cDnVTGImflxA6JqzwF8zLi1CVoK/VsEyTmIIssUt6MvzOYPm96qFI25L5 TfuQtMe19Bm8YNJnQ+DQUV9fEOSzsUKCECoOANP7DdEfwo//nT5eORdA9dq2xqwaHstGkMyYzG4 sjnbvQ1O5vKx24aJ6kuvoaQ== X-Received: by 2002:a05:7300:4347:b0:2c0:c961:4b98 with SMTP id 5a478bee46e88-2cbfc85e0eemr2716162eec.7.1775487366291; Mon, 06 Apr 2026 07:56:06 -0700 (PDT) MIME-Version: 1.0 References: <20260328095204.5tsq5bldugeumrtf@erthalion> In-Reply-To: <20260328095204.5tsq5bldugeumrtf@erthalion> From: Thomas Munro Date: Tue, 7 Apr 2026 03:02:52 +1200 X-Gm-Features: AQROBzDtg-9UJtOSoD9IkNSjvGfjac0hqaiVgHUuK8k2LLPBwTwkqbDZdvU3BKE Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000c6123b064ecbdd4a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c6123b064ecbdd4a Content-Type: text/plain; charset="UTF-8" Here's an updated patch. It's mostly just rebased over the recent firehose, but with lots of comments and a few names (hopefully) improved. There is one code change to highlight though: maybe_start_io_workers() knows when it's not allowed to create new workers, an interesting case being FatalError before we have started the new world. The previous coding of DetermineSleepTime() didn't know about that, so it could return 0 (don't sleep), and then the postmaster could busy-wait for restart progress. Maybe there were other cases like that, but in general DetermineSleepTime() and maybe_start_io_workers() really need to be 100% in agreement. So I have moved that knowledge into a new function maybe_start_io_workers_scheduled_at(). Both DetermineSleepTime() and maybe_start_io_workers() call that so there is a single source of truth. I think I got confused about that because it's not that obvious why the existing code doesn't test FatalError. I thought of a slightly bigger refactoring that might deconfuse DetermineSleepTime() a bit more. Probably material for the next cycle, but basically the idea is to stop using a bunch of different conditions and different units of time and convert the whole thing to a simple find-the-lowest-time function. I kept that separate. I'll post a new version of the patch that was v3-0002 separately. --000000000000c6123b064ecbdd4a Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-Refactor-the-postmaster-s-periodic-job-scheduling.patch" Content-Disposition: attachment; filename="v4-0002-Refactor-the-postmaster-s-periodic-job-scheduling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnbgjsw1 RnJvbSBjY2M1YjZmYzljZjdkMzAzNTliMDE1Yzk1M2MwNGY0ODFjNjY2NTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgNiBBcHIgMjAyNiAyMDo1NDo1MyArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjQg Mi8yXSBSZWZhY3RvciB0aGUgcG9zdG1hc3RlcidzIHBlcmlvZGljIGpvYiBzY2hlZHVsaW5nLgoK RGV0ZXJtaW5lU2xlZXBUaW1lKCkgY29uc2lkZXJzIHRoZSBmb2xsb3dpbmcgcmVhc29ucyBmb3Ig U2VydmVyTG9vcCgpIHRvCndha2UgdXA6CgogKiBiZ3dvcmtlciByZXN0YXJ0IGRlbGF5IHJlYWNo ZWQKICogSS9PIHdvcmtlciBsYXVuY2ggaW50ZXJ2YWwgcmVhY2hlZAogKiBTSUdLSUxMIHRpbWVv dXQgcmVhY2hlZCBkdXJpbmcgaW1tZWRpYXRlIHNodXRkb3duL2NyYXNoIHJlc3RhcnQKICogcGVy aW9kaWNhbGx5IGNoZWNraW5nIHRoZSBsb2NrIGZpbGUKICogcGVyaW9kaWNhbGx5IHRvdWNoaW5n IHNvY2tldCBmaWxlcwoKVG8gbWFrZSBpdCBlYXNpZXIgdG8gZm9sbG93OgoKICogbW92ZSB0aGUg bmV4dC1iZ3dvcmtlci13YWtldXAgbG9naWMgb3V0IHRvIGl0cyBvd24gZnVuY3Rpb24KICogc3Rh bmRhcmRpemUgdGhlIHVuaXQgb2YgdGltZWtlZXBpbmcKICogY29udmVydCBEZXRlcm1pbmVTbGVl cFRpbWUoKSB0byBqdXN0OiB3aGljaCBpcyBzb29uZXN0PwoKQXMgYSBzaWRlLWVmZmVjdCwgU0lH S0lMTCwgbG9ja2ZpbGUgYW5kIHNvY2tldCBmaWxlcyBkdXRpZXMgYXJlIG5vdwpwZXJmb3JtZWQg d2l0aCBtb3JlIGFjY3VyYXRlIHRpbWluZy4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyB8IDI0NyArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgMTI1IGluc2VydGlvbnMoKyksIDEyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jCmluZGV4IGM0MjU2NDUwMGM2Li4yYTY4ODdlYjZjMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTM2MSwxMyArMzYxLDI0IEBAIHN0YXRpYyBQTVN0 YXRlIHBtU3RhdGUgPSBQTV9JTklUOwogICovCiBzdGF0aWMgYm9vbCBjb25uc0FsbG93ZWQgPSB0 cnVlOwogCi0vKiBTdGFydCB0aW1lIG9mIFNJR0tJTEwgdGltZW91dCBkdXJpbmcgaW1tZWRpYXRl IHNodXRkb3duIG9yIGNoaWxkIGNyYXNoICovCi0vKiBaZXJvIG1lYW5zIHRpbWVvdXQgaXMgbm90 IHJ1bm5pbmcgKi8KLXN0YXRpYyB0aW1lX3QgQWJvcnRTdGFydFRpbWUgPSAwOworLyogU3BlY2lh bCB2YWx1ZXMgZm9yIHNjaGVkdWxpbmcgUG9zdG1hc3RlciBkdXRpZXMgYXQgY2VydGFpbiB0aW1l cy4gKi8KKyNkZWZpbmUgUE1fU0NIRURVTEVfTkVWRVIJCQkJVElNRVNUQU1QX0lORklOSVRZCisj ZGVmaW5lIFBNX1NDSEVEVUxFX0lNTUVESUFURUxZCQkJVElNRVNUQU1QX01JTlVTX0lORklOSVRZ CisKKy8qIFRpbWUgb2YgU0lHS0lMTCBkdXJpbmcgaW1tZWRpYXRlIHNodXRkb3duIG9yIGNoaWxk IGNyYXNoICovCitzdGF0aWMgVGltZXN0YW1wVHogc2lna2lsbF9jaGlsZHJlbl9zY2hlZHVsZWRf YXQgPSBQTV9TQ0hFRFVMRV9ORVZFUjsKIAogLyogTGVuZ3RoIG9mIHNhaWQgdGltZW91dCAqLwog I2RlZmluZSBTSUdLSUxMX0NISUxEUkVOX0FGVEVSX1NFQ1MJCTUKIAorLyogVGltZSBvZiBuZXh0 IGxvY2tmaWxlIGNoZWNrIGFuZCBzb2NrZXQgdG91Y2guICovCitzdGF0aWMgVGltZXN0YW1wVHog bG9ja2ZpbGVfY2hlY2tfc2NoZWR1bGVkX2F0Oworc3RhdGljIFRpbWVzdGFtcFR6IHNvY2tldF90 b3VjaF9zY2hlZHVsZWRfYXQ7CisKKy8qIExlbmd0aCBvZiBzYWlkIHRpbWVvdXRzICovCisjZGVm aW5lIExPQ0tGSUxFX0NIRUNLX1NFQ1MJCQkJNjAKKyNkZWZpbmUgU09DS0VUX1RPVUNIX1NFQ1MJ CQkJKDU4ICogU0VDU19QRVJfTUlOVVRFKQorCiBzdGF0aWMgYm9vbCBSZWFjaGVkTm9ybWFsUnVu bmluZyA9IGZhbHNlOwkvKiBUIGlmIHdlJ3ZlIHJlYWNoZWQgUE1fUlVOICovCiAKIGJvb2wJCUNs aWVudEF1dGhJblByb2dyZXNzID0gZmFsc2U7CS8qIFQgZHVyaW5nIG5ldy1jbGllbnQKQEAgLTQw OSw4ICs0MjAsOCBAQCBzdGF0aWMgRE5TU2VydmljZVJlZiBib25qb3VyX3NkcmVmID0gTlVMTDsK ICNlbmRpZgogCiAvKiBTdGF0ZSBmb3IgSU8gd29ya2VyIG1hbmFnZW1lbnQuICovCi1zdGF0aWMg VGltZXN0YW1wVHogaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWUgPSAwOwotc3RhdGljIFRpbWVz dGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfbGFzdF90aW1lID0gMDsKK3N0YXRpYyBUaW1lc3RhbXBU eiBpb193b3JrZXJfbGF1bmNoX25leHRfdGltZTsKK3N0YXRpYyBUaW1lc3RhbXBUeiBpb193b3Jr ZXJfbGF1bmNoX2xhc3RfdGltZTsKIHN0YXRpYyBpbnQJaW9fd29ya2VyX2NvdW50ID0gMDsKIHN0 YXRpYyBQTUNoaWxkICppb193b3JrZXJfY2hpbGRyZW5bTUFYX0lPX1dPUktFUlNdOwogCkBAIC00 NDgsNiArNDU5LDcgQEAgc3RhdGljIHZvaWQgVGVybWluYXRlQ2hpbGRyZW4oaW50IHNpZ25hbCk7 CiBzdGF0aWMgaW50CUNvdW50Q2hpbGRyZW4oQmFja2VuZFR5cGVNYXNrIHRhcmdldE1hc2spOwog c3RhdGljIHZvaWQgTGF1bmNoTWlzc2luZ0JhY2tncm91bmRQcm9jZXNzZXModm9pZCk7CiBzdGF0 aWMgdm9pZCBtYXliZV9zdGFydF9iZ3dvcmtlcnModm9pZCk7CitzdGF0aWMgVGltZXN0YW1wVHog bWF5YmVfc3RhcnRfYmd3b3JrZXJzX3NjaGVkdWxlZF9hdCh2b2lkKTsKIHN0YXRpYyBib29sIG1h eWJlX3JlYXBfaW9fd29ya2VyKGludCBwaWQpOwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfaW9f d29ya2Vycyh2b2lkKTsKIHN0YXRpYyBUaW1lc3RhbXBUeiBtYXliZV9zdGFydF9pb193b3JrZXJz X3NjaGVkdWxlZF9hdCh2b2lkKTsKQEAgLTE1NDYsOTggKzE1NTgsMzMgQEAgY2hlY2tDb250cm9s RmlsZSh2b2lkKQogCUZyZWVGaWxlKGZwKTsKIH0KIAorc3RhdGljIHZvaWQKK2NvbXB1dGVfbmV4 dF93YWtldXAoVGltZXN0YW1wVHogKm5leHRfd2FrZXVwLCBUaW1lc3RhbXBUeiB3YWtldXApCit7 CisJaWYgKCpuZXh0X3dha2V1cCA+IHdha2V1cCkKKwkJKm5leHRfd2FrZXVwID0gd2FrZXVwOwor fQorCiAvKgogICogRGV0ZXJtaW5lIGhvdyBsb25nIHNob3VsZCB3ZSBsZXQgU2VydmVyTG9vcCBz bGVlcCwgaW4gbWlsbGlzZWNvbmRzLgotICoKLSAqIEluIG5vcm1hbCBjb25kaXRpb25zIHdlIHdh aXQgYXQgbW9zdCBvbmUgbWludXRlLCB0byBlbnN1cmUgdGhhdCB0aGUgb3RoZXIKLSAqIGJhY2tn cm91bmQgdGFza3MgaGFuZGxlZCBieSBTZXJ2ZXJMb29wIGdldCBkb25lIGV2ZW4gd2hlbiBubyBy ZXF1ZXN0cyBhcmUKLSAqIGFycml2aW5nLiAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIGJhY2tncm91 bmQgd29ya2VycyB3YWl0aW5nIHRvIGJlIHN0YXJ0ZWQsCi0gKiB3ZSBkb24ndCBhY3R1YWxseSBz bGVlcCBzbyB0aGF0IHRoZXkgYXJlIHF1aWNrbHkgc2VydmljZWQuICBPdGhlciBleGNlcHRpb24K LSAqIGNhc2VzIGFyZSBhcyBzaG93biBpbiB0aGUgY29kZS4KKyAqIFJldHVybnMgdGhlIHRpbWUg dG8gd2FpdCBmb3IgdGhlIG5leHQgb2YgU2VydmVyTG9vcCgpJ3Mgc2NoZWR1bGVkIGR1dGllcy4K KyAqIFRoZSBsb25nZXN0IHBvc3NpYmxlIHdhaXQgaXMgb25lIG1pbnV0ZSAoTE9DS0ZJTEVfQ0hF Q0tfU0VDUyksIGJ1dCBpdCBjb3VsZAorICogYmUgYXMgbG93IGFzIHplcm8gaWYgb25lIHRoZSBq b2JzIGJlbG93IGlzIGR1ZS9vdmVyZHVlIG5vdy4KICAqLwogc3RhdGljIGludAogRGV0ZXJtaW5l U2xlZXBUaW1lKHZvaWQpCiB7Ci0JVGltZXN0YW1wVHogbmV4dF93YWtldXA7Ci0KLQkvKgotCSAq IElmIGFuIEltbWVkaWF0ZVNodXRkb3duIG9yIGEgY3Jhc2ggcmVzdGFydCBoYXMgc2V0IGEgU0lH S0lMTCB0aW1lb3V0LAotCSAqIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UgYW5kIHdhaXQgZm9yIHRo YXQuCi0JICovCi0JaWYgKFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duIHx8IEZhdGFsRXJy b3IpCi0JewotCQlpZiAoQWJvcnRTdGFydFRpbWUgIT0gMCkKLQkJewotCQkJdGltZV90CQljdXJ0 aW1lID0gdGltZShOVUxMKTsKLQkJCWludAkJCXNlY29uZHM7Ci0KLQkJCS8qCi0JCQkgKiB0aW1l IGxlZnQgdG8gYWJvcnQ7IGNsYW1wIHRvIDAgaWYgaXQgYWxyZWFkeSBleHBpcmVkLCBvciBpZgot CQkJICogdGltZSBnb2VzIGJhY2t3YXJkcwotCQkJICovCi0JCQlpZiAoY3VydGltZSA8IEFib3J0 U3RhcnRUaW1lIHx8Ci0JCQkJY3VydGltZSAtIEFib3J0U3RhcnRUaW1lID49IFNJR0tJTExfQ0hJ TERSRU5fQUZURVJfU0VDUykKLQkJCQlzZWNvbmRzID0gMDsKLQkJCWVsc2UKLQkJCQlzZWNvbmRz ID0gU0lHS0lMTF9DSElMRFJFTl9BRlRFUl9TRUNTIC0KLQkJCQkJKGN1cnRpbWUgLSBBYm9ydFN0 YXJ0VGltZSk7Ci0KLQkJCXJldHVybiBzZWNvbmRzICogMTAwMDsKLQkJfQotCX0KLQotCS8qIFRp bWUgb2YgbmV4dCBtYXliZV9zdGFydF9pb193b3JrZXJzKCkgY2FsbCwgb3IgMCBmb3Igbm9uZS4g Ki8KLQluZXh0X3dha2V1cCA9IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KCk7 Ci0KLQkvKiBJZ25vcmUgYmd3b3JrZXJzIGR1cmluZyBzaHV0ZG93bi4gKi8KLQlpZiAoU3RhcnRX b3JrZXJOZWVkZWQgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKLQkJcmV0dXJuIDA7Ci0KLQlp ZiAoSGF2ZUNyYXNoZWRXb3JrZXIgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKLQl7Ci0JCWRs aXN0X211dGFibGVfaXRlciBpdGVyOwotCi0JCS8qCi0JCSAqIFdoZW4gdGhlcmUgYXJlIGNyYXNo ZWQgYmd3b3JrZXJzLCB3ZSBzbGVlcCBqdXN0IGxvbmcgZW5vdWdoIHRoYXQKLQkJICogdGhleSBh cmUgcmVzdGFydGVkIHdoZW4gdGhleSByZXF1ZXN0IHRvIGJlLiAgU2NhbiB0aGUgbGlzdCB0bwot CQkgKiBkZXRlcm1pbmUgdGhlIG1pbmltdW0gb2YgYWxsIHdha2V1cCB0aW1lcyBhY2NvcmRpbmcg dG8gbW9zdCByZWNlbnQKLQkJICogY3Jhc2ggdGltZSBhbmQgcmVxdWVzdGVkIHJlc3RhcnQgaW50 ZXJ2YWwuCi0JCSAqLwotCQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCAmQmFja2dyb3VuZFdv cmtlckxpc3QpCi0JCXsKLQkJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7Ci0JCQlUaW1lc3RhbXBU eiB0aGlzX3dha2V1cDsKLQotCQkJcncgPSBkbGlzdF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29y a2VyLCByd19sbm9kZSwgaXRlci5jdXIpOwotCi0JCQlpZiAocnctPnJ3X2NyYXNoZWRfYXQgPT0g MCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHJ3LT5yd193b3JrZXIuYmd3X3Jlc3RhcnRfdGlt ZSA9PSBCR1dfTkVWRVJfUkVTVEFSVAotCQkJCXx8IHJ3LT5yd190ZXJtaW5hdGUpCi0JCQl7Ci0J CQkJRm9yZ2V0QmFja2dyb3VuZFdvcmtlcihydyk7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJVGlt ZXN0YW1wVHogbmV4dF93YWtldXAgPSBQTV9TQ0hFRFVMRV9ORVZFUjsKIAotCQkJdGhpc193YWtl dXAgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMocnctPnJ3X2NyYXNoZWRfYXQsCi0JCQkJ CQkJCQkJCQkJICAxMDAwTCAqIHJ3LT5yd193b3JrZXIuYmd3X3Jlc3RhcnRfdGltZSk7Ci0JCQlp ZiAobmV4dF93YWtldXAgPT0gMCB8fCB0aGlzX3dha2V1cCA8IG5leHRfd2FrZXVwKQotCQkJCW5l eHRfd2FrZXVwID0gdGhpc193YWtldXA7Ci0JCX0KLQl9CisJLyogRmluZCB0aGUgdGltZSBvZiB0 aGUgbmV4dCBzY2hlZHVsZWQgU2VydmVyTG9vcCgpIGR1dHkuICovCisJY29tcHV0ZV9uZXh0X3dh a2V1cCgmbmV4dF93YWtldXAsIHNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0KTsKKwljb21w dXRlX25leHRfd2FrZXVwKCZuZXh0X3dha2V1cCwgbG9ja2ZpbGVfY2hlY2tfc2NoZWR1bGVkX2F0 KTsKKwljb21wdXRlX25leHRfd2FrZXVwKCZuZXh0X3dha2V1cCwgc29ja2V0X3RvdWNoX3NjaGVk dWxlZF9hdCk7CisJY29tcHV0ZV9uZXh0X3dha2V1cCgmbmV4dF93YWtldXAsIG1heWJlX3N0YXJ0 X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KCkpOworCWNvbXB1dGVfbmV4dF93YWtldXAoJm5leHRf d2FrZXVwLCBtYXliZV9zdGFydF9iZ3dvcmtlcnNfc2NoZWR1bGVkX2F0KCkpOwogCi0JaWYgKG5l eHRfd2FrZXVwICE9IDApCi0JewotCQlpbnQJCQltczsKLQotCQkvKiByZXN1bHQgb2YgVGltZXN0 YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyBpcyBpbiBbMCwgSU5UX01BWF0gKi8KLQkJbXMgPSAo aW50KSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAo KSwKLQkJCQkJCQkJCQkJCSAgIG5leHRfd2FrZXVwKTsKLQkJcmV0dXJuIE1pbig2MCAqIDEwMDAs IG1zKTsKLQl9Ci0KLQlyZXR1cm4gNjAgKiAxMDAwOworCS8qIHJlc3VsdCBvZiBUaW1lc3RhbXBE aWZmZXJlbmNlTWlsbGlzZWNvbmRzIGlzIGluIFswLCBJTlRfTUFYXSAqLworCXJldHVybiBUaW1l c3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwgbmV4dF93 YWtldXApOwogfQogCiAvKgpAQCAtMTY3NSwxNyArMTYyMiwxNyBAQCBDb25maWd1cmVQb3N0bWFz dGVyV2FpdFNldChib29sIGFjY2VwdF9jb25uZWN0aW9ucykKIHN0YXRpYyBpbnQKIFNlcnZlckxv b3Aodm9pZCkKIHsKLQl0aW1lX3QJCWxhc3RfbG9ja2ZpbGVfcmVjaGVja190aW1lLAotCQkJCWxh c3RfdG91Y2hfdGltZTsKIAlXYWl0RXZlbnQJZXZlbnRzW01BWExJU1RFTl07CiAJaW50CQkJbmV2 ZW50czsKIAogCUNvbmZpZ3VyZVBvc3RtYXN0ZXJXYWl0U2V0KHRydWUpOwotCWxhc3RfbG9ja2Zp bGVfcmVjaGVja190aW1lID0gbGFzdF90b3VjaF90aW1lID0gdGltZShOVUxMKTsKKworCWxvY2tm aWxlX2NoZWNrX3NjaGVkdWxlZF9hdCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwlzb2NrZXRf dG91Y2hfc2NoZWR1bGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCiAJZm9yICg7OykK IAl7Ci0JCXRpbWVfdAkJbm93OworCQlUaW1lc3RhbXBUeiBub3c7CiAKIAkJbmV2ZW50cyA9IFdh aXRFdmVudFNldFdhaXQocG1fd2FpdF9zZXQsCiAJCQkJCQkJCSAgIERldGVybWluZVNsZWVwVGlt ZSgpLApAQCAtMTc2MCwxMiArMTcwNyw5IEBAIFNlcnZlckxvb3Aodm9pZCkKIAkJLyoKIAkJICog TGFzdGx5LCBjaGVjayB0byBzZWUgaWYgaXQncyB0aW1lIHRvIGRvIHNvbWUgdGhpbmdzIHRoYXQg d2UgZG9uJ3QKIAkJICogd2FudCB0byBkbyBldmVyeSBzaW5nbGUgdGltZSB0aHJvdWdoIHRoZSBs b29wLCBiZWNhdXNlIHRoZXkncmUgYQotCQkgKiBiaXQgZXhwZW5zaXZlLiAgTm90ZSB0aGF0IHRo ZXJlJ3MgdXAgdG8gYSBtaW51dGUgb2Ygc2xvcCBpbiB3aGVuCi0JCSAqIHRoZXNlIHRhc2tzIHdp bGwgYmUgcGVyZm9ybWVkLCBzaW5jZSBEZXRlcm1pbmVTbGVlcFRpbWUoKSB3aWxsIGxldAotCQkg KiB1cyBzbGVlcCBhdCBtb3N0IHRoYXQgbG9uZzsgZXhjZXB0IGZvciBTSUdLSUxMIHRpbWVvdXQg d2hpY2ggaGFzCi0JCSAqIHNwZWNpYWwtY2FzZSBsb2dpYyB0aGVyZS4KKwkJICogYml0IGV4cGVu c2l2ZS4KIAkJICovCi0JCW5vdyA9IHRpbWUoTlVMTCk7CisJCW5vdyA9IEdldEN1cnJlbnRUaW1l c3RhbXAoKTsKIAogCQkvKgogCQkgKiBJZiB3ZSBhbHJlYWR5IHNlbnQgU0lHUVVJVCB0byBjaGls ZHJlbiBhbmQgdGhleSBhcmUgc2xvdyB0byBzaHV0CkBAIC0xNzc2LDEwICsxNzIwLDEwIEBAIFNl cnZlckxvb3Aodm9pZCkKIAkJICoKIAkJICogTm90ZSB3ZSBhbHNvIGRvIHRoaXMgZHVyaW5nIHJl Y292ZXJ5IGZyb20gYSBwcm9jZXNzIGNyYXNoLgogCQkgKi8KLQkJaWYgKChTaHV0ZG93biA+PSBJ bW1lZGlhdGVTaHV0ZG93biB8fCBGYXRhbEVycm9yKSAmJgotCQkJQWJvcnRTdGFydFRpbWUgIT0g MCAmJgotCQkJKG5vdyAtIEFib3J0U3RhcnRUaW1lKSA+PSBTSUdLSUxMX0NISUxEUkVOX0FGVEVS X1NFQ1MpCisJCWlmIChub3cgPj0gc2lna2lsbF9jaGlsZHJlbl9zY2hlZHVsZWRfYXQpCiAJCXsK KwkJCUFzc2VydChTaHV0ZG93biA+PSBJbW1lZGlhdGVTaHV0ZG93biB8fCBGYXRhbEVycm9yKTsK KwogCQkJLyogV2Ugd2VyZSBnZW50bGUgd2l0aCB0aGVtIGJlZm9yZS4gTm90IGFueW1vcmUgKi8K IAkJCWVyZXBvcnQoTE9HLAogCQkJLyogdHJhbnNsYXRvcjogJXMgaXMgU0lHS0lMTCBvciBTSUdB QlJUICovCkBAIC0xNzg3LDcgKzE3MzEsNyBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCQkJCQkJc2Vu ZF9hYm9ydF9mb3Jfa2lsbCA/ICJTSUdBQlJUIiA6ICJTSUdLSUxMIikpKTsKIAkJCVRlcm1pbmF0 ZUNoaWxkcmVuKHNlbmRfYWJvcnRfZm9yX2tpbGwgPyBTSUdBQlJUIDogU0lHS0lMTCk7CiAJCQkv KiByZXNldCBmbGFnIHNvIHdlIGRvbid0IFNJR0tJTEwgYWdhaW4gKi8KLQkJCUFib3J0U3RhcnRU aW1lID0gMDsKKwkJCXNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0ID0gUE1fU0NIRURVTEVf TkVWRVI7CiAJCX0KIAogCQkvKgpAQCAtMTgwMCw3ICsxNzQ0LDcgQEAgU2VydmVyTG9vcCh2b2lk KQogCQkgKiBzdGFydGluZyBhIG5ldyBwb3N0bWFzdGVyLiAgRGF0YSBjb3JydXB0aW9uIGlzIGxp a2VseSB0byBlbnN1ZSBmcm9tCiAJCSAqIHRoYXQgYW55d2F5LCBidXQgd2UgY2FuIG1pbmltaXpl IHRoZSBkYW1hZ2UgYnkgYWJvcnRpbmcgQVNBUC4KIAkJICovCi0JCWlmIChub3cgLSBsYXN0X2xv Y2tmaWxlX3JlY2hlY2tfdGltZSA+PSAxICogU0VDU19QRVJfTUlOVVRFKQorCQlpZiAobm93ID49 IGxvY2tmaWxlX2NoZWNrX3NjaGVkdWxlZF9hdCkKIAkJewogCQkJaWYgKCFSZWNoZWNrRGF0YURp ckxvY2tGaWxlKCkpCiAJCQl7CkBAIC0xODA4LDcgKzE3NTIsOSBAQCBTZXJ2ZXJMb29wKHZvaWQp CiAJCQkJCQkoZXJybXNnKCJwZXJmb3JtaW5nIGltbWVkaWF0ZSBzaHV0ZG93biBiZWNhdXNlIGRh dGEgZGlyZWN0b3J5IGxvY2sgZmlsZSBpcyBpbnZhbGlkIikpKTsKIAkJCQlraWxsKE15UHJvY1Bp ZCwgU0lHUVVJVCk7CiAJCQl9Ci0JCQlsYXN0X2xvY2tmaWxlX3JlY2hlY2tfdGltZSA9IG5vdzsK KwkJCWxvY2tmaWxlX2NoZWNrX3NjaGVkdWxlZF9hdCA9CisJCQkJVGltZXN0YW1wVHpQbHVzU2Vj b25kcyhsb2NrZmlsZV9jaGVja19zY2hlZHVsZWRfYXQsCisJCQkJCQkJCQkgICBMT0NLRklMRV9D SEVDS19TRUNTKTsKIAkJfQogCiAJCS8qCkBAIC0xODE2LDExICsxNzYyLDEzIEBAIFNlcnZlckxv b3Aodm9pZCkKIAkJICogdGhleSBhcmUgbm90IHJlbW92ZWQgYnkgb3ZlcnplYWxvdXMgL3RtcC1j bGVhbmluZyB0YXNrcy4gIFdlIGFzc3VtZQogCQkgKiBubyBvbmUgcnVucyBjbGVhbmVycyB3aXRo IGN1dG9mZiB0aW1lcyBvZiBsZXNzIHRoYW4gYW4gaG91ciAuLi4KIAkJICovCi0JCWlmIChub3cg LSBsYXN0X3RvdWNoX3RpbWUgPj0gNTggKiBTRUNTX1BFUl9NSU5VVEUpCisJCWlmIChub3cgPj0g c29ja2V0X3RvdWNoX3NjaGVkdWxlZF9hdCkKIAkJewogCQkJVG91Y2hTb2NrZXRGaWxlcygpOwog CQkJVG91Y2hTb2NrZXRMb2NrRmlsZXMoKTsKLQkJCWxhc3RfdG91Y2hfdGltZSA9IG5vdzsKKwkJ CXNvY2tldF90b3VjaF9zY2hlZHVsZWRfYXQgPQorCQkJCVRpbWVzdGFtcFR6UGx1c1NlY29uZHMo c29ja2V0X3RvdWNoX3NjaGVkdWxlZF9hdCwKKwkJCQkJCQkJCSAgIFNPQ0tFVF9UT1VDSF9TRUNT KTsKIAkJfQogCX0KIH0KQEAgLTIyMzEsNyArMjE3OSw5IEBAIHByb2Nlc3NfcG1fc2h1dGRvd25f cmVxdWVzdCh2b2lkKQogCQkJVXBkYXRlUE1TdGF0ZShQTV9XQUlUX0JBQ0tFTkRTKTsKIAogCQkJ Lyogc2V0IHN0b3B3YXRjaCBmb3IgdGhlbSB0byBkaWUgKi8KLQkJCUFib3J0U3RhcnRUaW1lID0g dGltZShOVUxMKTsKKwkJCXNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0ID0KKwkJCQlUaW1l c3RhbXBUelBsdXNTZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJCSAgIFNJ R0tJTExfQ0hJTERSRU5fQUZURVJfU0VDUyk7CiAKIAkJCS8qCiAJCQkgKiBOb3cgd2FpdCBmb3Ig YmFja2VuZHMgdG8gZXhpdC4gIElmIHRoZXJlIGFyZSBub25lLApAQCAtMjM1NCw3ICsyMzA0LDcg QEAgcHJvY2Vzc19wbV9jaGlsZF9leGl0KHZvaWQpCiAJCQkgKi8KIAkJCVN0YXJ0dXBTdGF0dXMg PSBTVEFSVFVQX05PVF9SVU5OSU5HOwogCQkJRmF0YWxFcnJvciA9IGZhbHNlOwotCQkJQWJvcnRT dGFydFRpbWUgPSAwOworCQkJc2lna2lsbF9jaGlsZHJlbl9zY2hlZHVsZWRfYXQgPSBQTV9TQ0hF RFVMRV9ORVZFUjsKIAkJCVJlYWNoZWROb3JtYWxSdW5uaW5nID0gdHJ1ZTsKIAkJCVVwZGF0ZVBN U3RhdGUoUE1fUlVOKTsKIAkJCWNvbm5zQWxsb3dlZCA9IHRydWU7CkBAIC0yODE1LDggKzI3NjUs MTAgQEAgSGFuZGxlRmF0YWxFcnJvcihRdWl0U2lnbmFsUmVhc29uIHJlYXNvbiwgYm9vbCBjb25z aWRlcl9zaWdhYnJ0KQogCSAqIC4uIGFuZCBpZiB0aGlzIGRvZXNuJ3QgaGFwcGVuIHF1aWNrbHkg ZW5vdWdoLCBub3cgdGhlIGNsb2NrIGlzIHRpY2tpbmcKIAkgKiBmb3IgdXMgdG8ga2lsbCB0aGVt IHdpdGhvdXQgbWVyY3kuCiAJICovCi0JaWYgKEFib3J0U3RhcnRUaW1lID09IDApCi0JCUFib3J0 U3RhcnRUaW1lID0gdGltZShOVUxMKTsKKwlpZiAoc2lna2lsbF9jaGlsZHJlbl9zY2hlZHVsZWRf YXQgPT0gUE1fU0NIRURVTEVfTkVWRVIpCisJCXNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0 ID0KKwkJCVRpbWVzdGFtcFR6UGx1c1NlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJ CQkJCQkgICBTSUdLSUxMX0NISUxEUkVOX0FGVEVSX1NFQ1MpOwogfQogCiAvKgpAQCAtMzI4Miw3 ICszMjM0LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQogCQlBc3NlcnQoU3RhcnR1 cFBNQ2hpbGQgIT0gTlVMTCk7CiAJCVN0YXJ0dXBTdGF0dXMgPSBTVEFSVFVQX1JVTk5JTkc7CiAJ CS8qIGNyYXNoIHJlY292ZXJ5IHN0YXJ0ZWQsIHJlc2V0IFNJR0tJTEwgZmxhZyAqLwotCQlBYm9y dFN0YXJ0VGltZSA9IDA7CisJCXNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0ID0gUE1fU0NI RURVTEVfTkVWRVI7CiAKIAkJLyogc3RhcnQgYWNjZXB0aW5nIHNlcnZlciBzb2NrZXQgY29ubmVj dGlvbiBldmVudHMgYWdhaW4gKi8KIAkJQ29uZmlndXJlUG9zdG1hc3RlcldhaXRTZXQodHJ1ZSk7 CkBAIC0zNzU5LDcgKzM3MTEsNyBAQCBwcm9jZXNzX3BtX3Btc2lnbmFsKHZvaWQpCiAJewogCQkv KiBXQUwgcmVkbyBoYXMgc3RhcnRlZC4gV2UncmUgb3V0IG9mIHJlaW5pdGlhbGl6YXRpb24uICov CiAJCUZhdGFsRXJyb3IgPSBmYWxzZTsKLQkJQWJvcnRTdGFydFRpbWUgPSAwOworCQlzaWdraWxs X2NoaWxkcmVuX3NjaGVkdWxlZF9hdCA9IFBNX1NDSEVEVUxFX05FVkVSOwogCQlyZWFjaGVkQ29u c2lzdGVuY3kgPSBmYWxzZTsKIAogCQkvKgpAQCAtNDI3OCw2ICs0MjMwLDU2IEBAIGJnd29ya2Vy X3Nob3VsZF9zdGFydF9ub3coQmdXb3JrZXJTdGFydFRpbWUgc3RhcnRfdGltZSkKIAlyZXR1cm4g ZmFsc2U7CiB9CiAKK3N0YXRpYyBUaW1lc3RhbXBUegorbWF5YmVfc3RhcnRfYmd3b3JrZXJzX3Nj aGVkdWxlZF9hdCh2b2lkKQoreworCVRpbWVzdGFtcFR6IG5leHRfd2FrZXVwOworCisJLyogQmFj a2dyb3VuZCB3b3JrZXJzIGFyZSBpZ25vcmVkIGR1cmluZyBzaHV0ZG93bi4gKi8KKwlpZiAoU2h1 dGRvd24gIT0gTm9TaHV0ZG93bikKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVSOworCisJLyog RG8gd2UgbmVlZCBhIHdvcmtlciByaWdodCBub3c/ICovCisJaWYgKFN0YXJ0V29ya2VyTmVlZGVk KQorCQlyZXR1cm4gUE1fU0NIRURVTEVfSU1NRURJQVRFTFk7CisKKwluZXh0X3dha2V1cCA9IFBN X1NDSEVEVUxFX05FVkVSOworCWlmIChIYXZlQ3Jhc2hlZFdvcmtlcikKKwl7CisJCWRsaXN0X211 dGFibGVfaXRlciBpdGVyOworCisJCS8qCisJCSAqIFdoZW4gdGhlcmUgYXJlIGNyYXNoZWQgYmd3 b3JrZXJzLCB3ZSBzbGVlcCBqdXN0IGxvbmcgZW5vdWdoIHRoYXQKKwkJICogdGhleSBhcmUgcmVz dGFydGVkIHdoZW4gdGhleSByZXF1ZXN0IHRvIGJlLiAgU2NhbiB0aGUgbGlzdCB0bworCQkgKiBk ZXRlcm1pbmUgdGhlIG1pbmltdW0gb2YgYWxsIHdha2V1cCB0aW1lcyBhY2NvcmRpbmcgdG8gbW9z dCByZWNlbnQKKwkJICogY3Jhc2ggdGltZSBhbmQgcmVxdWVzdGVkIHJlc3RhcnQgaW50ZXJ2YWwu CisJCSAqLworCQlkbGlzdF9mb3JlYWNoX21vZGlmeShpdGVyLCAmQmFja2dyb3VuZFdvcmtlckxp c3QpCisJCXsKKwkJCVJlZ2lzdGVyZWRCZ1dvcmtlciAqcnc7CisJCQlUaW1lc3RhbXBUeiB0aGlz X3dha2V1cDsKKworCQkJcncgPSBkbGlzdF9jb250YWluZXIoUmVnaXN0ZXJlZEJnV29ya2VyLCBy d19sbm9kZSwgaXRlci5jdXIpOworCisJCQlpZiAocnctPnJ3X2NyYXNoZWRfYXQgPT0gMCkKKwkJ CQljb250aW51ZTsKKworCQkJaWYgKHJ3LT5yd193b3JrZXIuYmd3X3Jlc3RhcnRfdGltZSA9PSBC R1dfTkVWRVJfUkVTVEFSVAorCQkJCXx8IHJ3LT5yd190ZXJtaW5hdGUpCisJCQl7CisJCQkJRm9y Z2V0QmFja2dyb3VuZFdvcmtlcihydyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXRoaXNf d2FrZXVwID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKHJ3LT5yd19jcmFzaGVkX2F0LAor CQkJCQkJCQkJCQkJCSAgMTAwMEwgKiBydy0+cndfd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUpOwor CQkJY29tcHV0ZV9uZXh0X3dha2V1cCgmbmV4dF93YWtldXAsIHRoaXNfd2FrZXVwKTsKKwkJfQor CX0KKworCXJldHVybiBuZXh0X3dha2V1cDsKK30KKwogLyoKICAqIElmIHRoZSB0aW1lIGlzIHJp Z2h0LCBzdGFydCBiYWNrZ3JvdW5kIHdvcmtlcihzKS4KICAqCkBAIC00NDIzLDggKzQ0MjUsOCBA QCBtYXliZV9yZWFwX2lvX3dvcmtlcihpbnQgcGlkKQogCiAvKgogICogUmV0dXJucyB0aGUgbmV4 dCB0aW1lIGF0IHdoaWNoIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSB3b3VsZCBzdGFydCBvbmUg b3IKLSAqIG1vcmUgSS9PIHdvcmtlcnMuICBBbnkgdGltZSBpbiB0aGUgcGFzdCBtZWFucyBBU0FQ LCBhbmQgMCBtZWFucyBubyB3b3JrZXIKLSAqIGlzIGN1cnJlbnRseSBzY2hlZHVsZWQuCisgKiBt b3JlIEkvTyB3b3JrZXJzLCBvciBvbmUgb2YgdGhlIHNwZWNpYWwgdmFsdWVzIFBNX1NDSEVEVUxF X0lNTUVESUFURUxZIGFuZAorICogUE1fU0NIRURVTEVfTkVWRVIuCiAgKgogICogVGhpcyBpcyBj YWxsZWQgYnkgRGV0ZXJtaW5lU2xlZXBUaW1lKCkgYW5kIGFsc28gbWF5YmVfc3RhcnRfaW9fd29y a2VycygpCiAgKiBpdHNlbGYsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYWdyZWUuCkBAIC00NDMz LDI1ICs0NDM1LDI1IEBAIHN0YXRpYyBUaW1lc3RhbXBUegogbWF5YmVfc3RhcnRfaW9fd29ya2Vy c19zY2hlZHVsZWRfYXQodm9pZCkKIHsKIAlpZiAoIXBnYWlvX3dvcmtlcnNfZW5hYmxlZCgpKQot CQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVSOwogCiAJLyoKIAkgKiBJZiB3 ZSdyZSBpbiBmaW5hbCBzaHV0dGluZyBkb3duIHN0YXRlLCB0aGVuIHdlJ3JlIGp1c3Qgd2FpdGlu ZyBmb3IgYWxsCiAJICogcHJvY2Vzc2VzIHRvIGV4aXQuCiAJICovCiAJaWYgKHBtU3RhdGUgPj0g UE1fV0FJVF9JT19XT1JLRVJTKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05F VkVSOwogCiAJLyogRG9uJ3Qgc3RhcnQgbmV3IHdvcmtlcnMgZHVyaW5nIGFuIGltbWVkaWF0ZSBz aHV0ZG93biBlaXRoZXIuICovCiAJaWYgKFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duKQot CQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVSOwogCiAJLyoKIAkgKiBEb24n dCBzdGFydCBuZXcgd29ya2VycyBpZiB3ZSdyZSBpbiB0aGUgc2h1dGRvd24gcGhhc2Ugb2YgYSBj cmFzaAogCSAqIHJlc3RhcnQuIEJ1dCB3ZSAqZG8qIG5lZWQgdG8gc3RhcnQgaWYgd2UncmUgYWxy ZWFkeSBzdGFydGluZyB1cCBhZ2Fpbi4KIAkgKi8KIAlpZiAoRmF0YWxFcnJvciAmJiBwbVN0YXRl ID49IFBNX1NUT1BfQkFDS0VORFMpCi0JCXJldHVybiAwOworCQlyZXR1cm4gUE1fU0NIRURVTEVf TkVWRVI7CiAKIAkvKgogCSAqIERvbid0IHN0YXJ0IGEgd29ya2VyIGlmIHdlJ3JlIGF0IG9yIGFi b3ZlIHRoZSBtYXhpbXVtLiAgKEV4Y2VzcyB3b3JrZXJzCkBAIC00NDU5LDE1ICs0NDYxLDE1IEBA IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KHZvaWQpCiAJICogdW50aWwgdGhl eSBhcmUgcmVhcGVkLikKIAkgKi8KIAlpZiAoaW9fd29ya2VyX2NvdW50ID49IGlvX21heF93b3Jr ZXJzKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVSOwogCiAJLyogSWYg d2UncmUgdW5kZXIgdGhlIG1pbmltdW0sIHN0YXJ0IGEgd29ya2VyIGFzIHNvb24gYXMgcG9zc2li bGUuICovCiAJaWYgKGlvX3dvcmtlcl9jb3VudCA8IGlvX21pbl93b3JrZXJzKQotCQlyZXR1cm4g VElNRVNUQU1QX01JTlVTX0lORklOSVRZOwkvKiBzdGFydCB3b3JrZXIgQVNBUCAqLworCQlyZXR1 cm4gUE1fU0NIRURVTEVfSU1NRURJQVRFTFk7CiAKIAkvKiBPbmx5IHByb2NlZWQgaWYgYSAiZ3Jv dyIgcmVxdWVzdCBpcyBwZW5kaW5nIGZyb20gZXhpc3Rpbmcgd29ya2Vycy4gKi8KIAlpZiAoIXBn YWlvX3dvcmtlcl90ZXN0X2dyb3coKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBQTV9TQ0hFRFVM RV9ORVZFUjsKIAogCS8qCiAJICogbWF5YmVfc3RhcnRfaW9fd29ya2VycygpIHNob3VsZCBzdGFy dCBhIG5ldyBJL08gd29ya2VyIGFmdGVyIHRoaXMgdGltZSwKQEAgLTQ0ODcsNyArNDQ4OSw4IEBA IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnModm9pZCkKIHsKIAlUaW1lc3RhbXBUeiBzY2hlZHVsZWRf YXQ7CiAKLQl3aGlsZSAoKHNjaGVkdWxlZF9hdCA9IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnNfc2No ZWR1bGVkX2F0KCkpICE9IDApCisJd2hpbGUgKChzY2hlZHVsZWRfYXQgPSBtYXliZV9zdGFydF9p b193b3JrZXJzX3NjaGVkdWxlZF9hdCgpKSAhPQorCQkgICBQTV9TQ0hFRFVMRV9ORVZFUikKIAl7 CiAJCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAkJUE1DaGlsZCAg ICAqY2hpbGQ7Ci0tIAoyLjQ3LjMKCg== --000000000000c6123b064ecbdd4a Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v4-0001-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnbgh2n0 RnJvbSA2YzVkMTZhMTVhZGQ2MmM2OGJiN2Y5YzdiNmExZTNiZGUxZjQwNmQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHY0 IDEvMl0gYWlvOiBBZGp1c3QgSS9PIHdvcmtlciBwb29sIHNpemUgYXV0b21hdGljYWxseS4KClRo ZSBzaXplIG9mIHRoZSBJL08gd29ya2VyIHBvb2wgdXNlZCB0byBpbXBsZW1lbnQgaW9fbWV0aG9k PXdvcmtlciB3YXMKcHJldmlvdXNseSBjb250cm9sbGVkIGJ5IHRoZSBpb193b3JrZXJzIHNldHRp bmcsIGRlZmF1bHRpbmcgdG8gMy4gIEl0CndhcyBoYXJkIHRvIGtub3cgaG93IHRvIHR1bmUgaXQg ZWZmZWN0aXZlbHkuICBJdCBpcyBub3cgcmVwbGFjZWQgd2l0aDoKCiAgaW9fbWluX3dvcmtlcnM9 MQogIGlvX21heF93b3JrZXJzPTggKHVwIHRvIDMyKQogIGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ9 NjBzCiAgaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbD0xMDBtcwoKVGhlIHBvb2wgaXMgYXV0b21h dGljYWxseSBzaXplZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgcmFuZ2UgYWNjb3JkaW5nIHRvCnJl Y2VudCB2YXJpYXRpb24gaW4gZGVtYW5kLiAgSXQgZ3Jvd3Mgd2hlbiBleGlzdGluZyB3b3JrZXJz IGRldGVjdCBhCmJhY2tsb2csIGFuZCBzaHJpbmtzIHdoZW4gdGhlIGhpZ2hlc3QgbnVtYmVyZWQg d29ya2VyIGlzIGlkbGUgZm9yIHRvbwpsb25nLiAgV29yayB3YXMgYWxyZWFkeSBjb25jZW50cmF0 ZWQgaW50byBsb3ctbnVtYmVyZWQgd29ya2VycyBpbgphbnRpY2lwYXRpb24gb2YgdGhpcyBsb2dp Yy4KClRoZSBsb2dpYyBmb3Igd2FraW5nIGV4dHJhIHdvcmtlcnMgbm93IGFsc28gdHJpZXMgdG8g bWVhc3VyZSBhbmQgcmVkdWNlCnRoZSBudW1iZXIgb2Ygc3B1cmlvdXMgd2FrZXVwcywgdGhvdWdo IHRoZXkgYXJlIG5vdCBlbnRpcmVseSBlbGltaW5hdGVkLgoKUmV2aWV3ZWQtYnk6IERtaXRyeSBE b2xnb3YgPDllcnRoYWxpb242QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQSUyQmhVS0clMkJtNHhWMExNb0gyYyUzRG9SQWRFWHVDbmglMkJ0R0JUV2E3dUZlRk1H Z1RMQXclMkJRJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgfCAgNjkgKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyAgICAgICAgICAgfCAxNjEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9tZXRob2Rfd29ya2VyLmMgICAgICAgfCA1MDUgKysrKysrKysrKysrKysrLS0tCiAuLi4vdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDM0ICstCiBzcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDYgKy0KIHNyYy9pbmNsdWRl L3N0b3JhZ2UvaW9fd29ya2VyLmggICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2luY2x1ZGUv c3RvcmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwgfCAgMTUgKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA2 NTkgaW5zZXJ0aW9ucygrKSwgMTQ1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBiNDQyMzFh MzYyZC4uOTRlZWM4NWJkOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTI4NzAsMTYgKzI4NzAsNzUgQEAgaW5j bHVkZV9kaXIgJ2NvbmYuZCcKICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50 cnk+CiAKLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXJzIiB4cmVmbGFiZWw9 ImlvX3dvcmtlcnMiPgotICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcnM8L3Zhcm5hbWU+ ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1t aW4td29ya2VycyIgeHJlZmxhYmVsPSJpb19taW5fd29ya2VycyI+CisgICAgICAgPHRlcm0+PHZh cm5hbWU+aW9fbWluX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAg ICAgICA8aW5kZXh0ZXJtPgotICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJzPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgPHByaW1h cnk+PHZhcm5hbWU+aW9fbWluX3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgogICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgIDwvdGVybT4KICAgICAg ICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgotICAgICAgICAgU2VsZWN0cyB0aGUgbnVtYmVy IG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKLSAgICAgICAg IDMuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIFNldHMg dGhlIG1pbmltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLiBUaGUgZGVmYXVsdCBp cworICAgICAgICAgMS4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZQorICAg ICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhl IHNlcnZlciBjb21tYW5kCisgICAgICAgICBsaW5lLgorICAgICAgICA8L3BhcmE+CisgICAgICAg IDxwYXJhPgorICAgICAgICAgT25seSBoYXMgYW4gZWZmZWN0IGlmIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1pby1tZXRob2QiLz4gaXMgc2V0IHRvCisgICAgICAgICA8bGl0ZXJhbD53b3JrZXI8L2xpdGVy YWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlz dGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWlvLW1heC13b3JrZXJzIiB4cmVm bGFiZWw9ImlvX21heF93b3JrZXJzIj4KKyAgICAgICA8dGVybT48dmFybmFtZT5pb19tYXhfd29y a2VyczwvdmFybmFtZT4gKDx0eXBlPmludDwvdHlwZT4pCisgICAgICAgPGluZGV4dGVybT4KKyAg ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwv dGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0 aGUgbWF4aW11bSBudW1iZXIgb2YgSS9PIHdvcmtlciBwcm9jZXNzZXMuIFRoZSBkZWZhdWx0IGlz CisgICAgICAgICA4LiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAg ICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUg c2VydmVyIGNvbW1hbmQKKyAgICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3Vj LWlvLW1ldGhvZCIvPiBpcyBzZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJh bD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0 ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWlkbGUtdGltZW91 dCIgeHJlZmxhYmVsPSJpb193b3JrZXJfaWRsZV90aW1lb3V0Ij4KKyAgICAgICA8dGVybT48dmFy bmFtZT5pb193b3JrZXJfaWRsZV90aW1lb3V0PC92YXJuYW1lPiAoPHR5cGU+aW50PC90eXBlPikK KyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJf aWRsZV90aW1lb3V0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZW50aXJl bHkgaWRsZSBJL08gd29ya2VyIHByb2Nlc3NlcyBleGl0LCByZWR1Y2luZyB0aGUKKyAgICAgICAg IHNpemUgb2YgcG9vbCB0byBtYXRjaCBkZW1hbmQuICBUaGUgZGVmYXVsdCBpcyAxIG1pbnV0ZS4g IFRoaXMKKyAgICAgICAgIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAg ICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2Vy dmVyIGNvbW1hbmQKKyAgICAgICAgIGxpbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBh cmE+CisgICAgICAgICBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWlv LW1ldGhvZCIvPiBpcyBzZXQgdG8KKyAgICAgICAgIDxsaXRlcmFsPndvcmtlcjwvbGl0ZXJhbD4u CisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50 cnk+CisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtaW8td29ya2VyLWxhdW5jaC1pbnRlcnZh bCIgeHJlZmxhYmVsPSJpb193b3JrZXJfbGF1bmNoX2ludGVydmFsIj4KKyAgICAgICA8dGVybT48 dmFybmFtZT5pb193b3JrZXJfbGF1bmNoX2ludGVydmFsPC92YXJuYW1lPiAoPHR5cGU+aW50PC90 eXBlPikKKyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193 b3JrZXJfbGF1bmNoX2ludGVydmFsPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxp c3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gdGltZSBi ZWZvcmUgYW5vdGhlciBJL08gd29ya2VyIGNhbiBiZSBsYXVuY2hlZC4gIFRoaXMgYXZvaWRzCisg ICAgICAgICBjcmVhdGluZyB0b28gbWFueSBmb3IgYW4gdW5zdXN0YWluZWQgYnVyc3Qgb2YgYWN0 aXZpdHkuICBUaGUgZGVmYXVsdCBpcyAxMDBtcy4KKyAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNh biBvbmx5IGJlIHNldCBpbiB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8 L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAogICAgICAgICAgbGluZS4K ICAgICAgICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0 bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA2ZjEz ZThmNDBhMC4uYzQyNTY0NTAwYzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBA IC00MDksNiArNDA5LDggQEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9IE5V TEw7CiAjZW5kaWYKIAogLyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLworc3Rh dGljIFRpbWVzdGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0gMDsKK3N0YXRpYyBU aW1lc3RhbXBUeiBpb193b3JrZXJfbGF1bmNoX2xhc3RfdGltZSA9IDA7CiBzdGF0aWMgaW50CWlv X3dvcmtlcl9jb3VudCA9IDA7CiBzdGF0aWMgUE1DaGlsZCAqaW9fd29ya2VyX2NoaWxkcmVuW01B WF9JT19XT1JLRVJTXTsKIApAQCAtNDQ3LDcgKzQ0OSw4IEBAIHN0YXRpYyBpbnQJQ291bnRDaGls ZHJlbihCYWNrZW5kVHlwZU1hc2sgdGFyZ2V0TWFzayk7CiBzdGF0aWMgdm9pZCBMYXVuY2hNaXNz aW5nQmFja2dyb3VuZFByb2Nlc3Nlcyh2b2lkKTsKIHN0YXRpYyB2b2lkIG1heWJlX3N0YXJ0X2Jn d29ya2Vycyh2b2lkKTsKIHN0YXRpYyBib29sIG1heWJlX3JlYXBfaW9fd29ya2VyKGludCBwaWQp Owotc3RhdGljIHZvaWQgbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCk7CitzdGF0aWMgdm9p ZCBtYXliZV9zdGFydF9pb193b3JrZXJzKHZvaWQpOworc3RhdGljIFRpbWVzdGFtcFR6IG1heWJl X3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KHZvaWQpOwogc3RhdGljIGJvb2wgQ3JlYXRl T3B0c0ZpbGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZnVsbHByb2duYW1lKTsKIHN0 YXRpYyBQTUNoaWxkICpTdGFydENoaWxkUHJvY2VzcyhCYWNrZW5kVHlwZSB0eXBlKTsKIHN0YXRp YyB2b2lkIFN0YXJ0U3lzTG9nZ2VyKHZvaWQpOwpAQCAtMTM5MSw3ICsxMzk0LDcgQEAgUG9zdG1h c3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlVcGRhdGVQTVN0YXRlKFBNX1NUQVJU VVApOwogCiAJLyogTWFrZSBzdXJlIHdlIGNhbiBwZXJmb3JtIEkvTyB3aGlsZSBzdGFydGluZyB1 cC4gKi8KLQltYXliZV9hZGp1c3RfaW9fd29ya2VycygpOworCW1heWJlX3N0YXJ0X2lvX3dvcmtl cnMoKTsKIAogCS8qIFN0YXJ0IGJnd3JpdGVyIGFuZCBjaGVja3BvaW50ZXIgc28gdGhleSBjYW4g aGVscCB3aXRoIHJlY292ZXJ5ICovCiAJaWYgKENoZWNrcG9pbnRlclBNQ2hpbGQgPT0gTlVMTCkK QEAgLTE1NTUsMTQgKzE1NTgsMTMgQEAgY2hlY2tDb250cm9sRmlsZSh2b2lkKQogc3RhdGljIGlu dAogRGV0ZXJtaW5lU2xlZXBUaW1lKHZvaWQpCiB7Ci0JVGltZXN0YW1wVHogbmV4dF93YWtldXAg PSAwOworCVRpbWVzdGFtcFR6IG5leHRfd2FrZXVwOwogCiAJLyoKLQkgKiBOb3JtYWwgY2FzZTog ZWl0aGVyIHRoZXJlIGFyZSBubyBiYWNrZ3JvdW5kIHdvcmtlcnMgYXQgYWxsLCBvciB3ZSdyZSBp bgotCSAqIGEgc2h1dGRvd24gc2VxdWVuY2UgKGR1cmluZyB3aGljaCB3ZSBpZ25vcmUgYmd3b3Jr ZXJzIGFsdG9nZXRoZXIpLgorCSAqIElmIGFuIEltbWVkaWF0ZVNodXRkb3duIG9yIGEgY3Jhc2gg cmVzdGFydCBoYXMgc2V0IGEgU0lHS0lMTCB0aW1lb3V0LAorCSAqIGlnbm9yZSBldmVyeXRoaW5n IGVsc2UgYW5kIHdhaXQgZm9yIHRoYXQuCiAJICovCi0JaWYgKFNodXRkb3duID4gTm9TaHV0ZG93 biB8fAotCQkoIVN0YXJ0V29ya2VyTmVlZGVkICYmICFIYXZlQ3Jhc2hlZFdvcmtlcikpCisJaWYg KFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duIHx8IEZhdGFsRXJyb3IpCiAJewogCQlpZiAo QWJvcnRTdGFydFRpbWUgIT0gMCkKIAkJewpAQCAtMTU4MiwxNCArMTU4NCwxNiBAQCBEZXRlcm1p bmVTbGVlcFRpbWUodm9pZCkKIAogCQkJcmV0dXJuIHNlY29uZHMgKiAxMDAwOwogCQl9Ci0JCWVs c2UKLQkJCXJldHVybiA2MCAqIDEwMDA7CiAJfQogCi0JaWYgKFN0YXJ0V29ya2VyTmVlZGVkKQor CS8qIFRpbWUgb2YgbmV4dCBtYXliZV9zdGFydF9pb193b3JrZXJzKCkgY2FsbCwgb3IgMCBmb3Ig bm9uZS4gKi8KKwluZXh0X3dha2V1cCA9IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVk X2F0KCk7CisKKwkvKiBJZ25vcmUgYmd3b3JrZXJzIGR1cmluZyBzaHV0ZG93bi4gKi8KKwlpZiAo U3RhcnRXb3JrZXJOZWVkZWQgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAkJcmV0dXJuIDA7 CiAKLQlpZiAoSGF2ZUNyYXNoZWRXb3JrZXIpCisJaWYgKEhhdmVDcmFzaGVkV29ya2VyICYmIFNo dXRkb3duID09IE5vU2h1dGRvd24pCiAJewogCQlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRlcjsKIApA QCAtMjU0Miw3ICsyNTQ2LDE3IEBAIHByb2Nlc3NfcG1fY2hpbGRfZXhpdCh2b2lkKQogCQkJaWYg KCFFWElUX1NUQVRVU18wKGV4aXRzdGF0dXMpICYmICFFWElUX1NUQVRVU18xKGV4aXRzdGF0dXMp KQogCQkJCUhhbmRsZUNoaWxkQ3Jhc2gocGlkLCBleGl0c3RhdHVzLCBfKCJpbyB3b3JrZXIiKSk7 CiAKLQkJCW1heWJlX2FkanVzdF9pb193b3JrZXJzKCk7CisJCQkvKgorCQkJICogQSB3b3JrZXIg dGhhdCBleGl0ZWQgd2l0aCBhbiBlcnJvciBtaWdodCBoYXZlIGJyb3VnaHQgdGhlIHBvb2wKKwkJ CSAqIHNpemUgYmVsb3cgaW9fbWluX3dvcmtlcnMsIG9yIGFsbG93ZWQgdGhlIHF1ZXVlIHRvIGdy b3cgdG8gdGhlCisJCQkgKiBwb2ludCB3aGVyZSBhbm90aGVyIHdvcmtlciBjYWxsZWQgZm9yIGdy b3d0aC4KKwkJCSAqCisJCQkgKiBJbiB0aGUgY29tbW9uIGNhc2UgdGhhdCBhIHdvcmtlciB0aW1l ZCBvdXQgZHVlIHRvIGlkbGVuZXNzLCBubworCQkJICogcmVwbGFjZW1lbnQgbmVlZHMgdG8gYmUg c3RhcnRlZC4gIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSB3aWxsCisJCQkgKiBmaWd1cmUgdGhh dCBvdXQuCisJCQkgKi8KKwkJCW1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKTsKKwogCQkJY29udGlu dWU7CiAJCX0KIApAQCAtMzI2Miw3ICszMjc2LDcgQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2 b2lkKQogCQlVcGRhdGVQTVN0YXRlKFBNX1NUQVJUVVApOwogCiAJCS8qIE1ha2Ugc3VyZSB3ZSBj YW4gcGVyZm9ybSBJL08gd2hpbGUgc3RhcnRpbmcgdXAuICovCi0JCW1heWJlX2FkanVzdF9pb193 b3JrZXJzKCk7CisJCW1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKTsKIAogCQlTdGFydHVwUE1DaGls ZCA9IFN0YXJ0Q2hpbGRQcm9jZXNzKEJfU1RBUlRVUCk7CiAJCUFzc2VydChTdGFydHVwUE1DaGls ZCAhPSBOVUxMKTsKQEAgLTMzMzYsNyArMzM1MCw3IEBAIExhdW5jaE1pc3NpbmdCYWNrZ3JvdW5k UHJvY2Vzc2VzKHZvaWQpCiAJICogQSBjb25maWcgZmlsZSBjaGFuZ2Ugd2lsbCBhbHdheXMgbGVh ZCB0byB0aGlzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCwgc28KIAkgKiB3ZSBhbHdheXMgd2lsbCBw cm9jZXNzIHRoZSBjb25maWcgY2hhbmdlIGluIGEgdGltZWx5IG1hbm5lci4KIAkgKi8KLQltYXli ZV9hZGp1c3RfaW9fd29ya2VycygpOworCW1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKTsKIAogCS8q CiAJICogVGhlIGNoZWNrcG9pbnRlciBhbmQgdGhlIGJhY2tncm91bmQgd3JpdGVyIGFyZSBhY3Rp dmUgZnJvbSB0aGUgc3RhcnQsCkBAIC0zNzk3LDYgKzM4MTEsMTUgQEAgcHJvY2Vzc19wbV9wbXNp Z25hbCh2b2lkKQogCQlTdGFydFdvcmtlck5lZWRlZCA9IHRydWU7CiAJfQogCisJLyogUHJvY2Vz cyBJTyB3b3JrZXIgc3RhcnQgcmVxdWVzdHMuICovCisJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25h bChQTVNJR05BTF9JT19XT1JLRVJfR1JPVykpCisJeworCQkvKgorCQkgKiBObyBsb2NhbCBmbGFn LCBhcyB0aGUgc3RhdGUgaXMgZXhwb3NlZCB0aHJvdWdoIHBnYWlvX3dvcmtlcl8qKCkKKwkJICog ZnVuY3Rpb25zLiAgVGhpcyBzaWduYWwgaXMgcmVjZWl2ZWQgb24gcG90ZW50aWFsbHkgYWN0aW9u YWJsZSBsZXZlbAorCQkgKiBjaGFuZ2VzLCBzbyB0aGF0IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMo KSB3aWxsIHJ1bi4KKwkJICovCisJfQogCS8qIFByb2Nlc3MgYmFja2dyb3VuZCB3b3JrZXIgc3Rh dGUgY2hhbmdlcy4gKi8KIAlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0JBQ0tH Uk9VTkRfV09SS0VSX0NIQU5HRSkpCiAJewpAQCAtNDM5OSw0NCArNDQyMiwxMDYgQEAgbWF5YmVf cmVhcF9pb193b3JrZXIoaW50IHBpZCkKIH0KIAogLyoKLSAqIFN0YXJ0IG9yIHN0b3AgSU8gd29y a2VycywgdG8gY2xvc2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcnVubmluZwotICog d29ya2VycyBhbmQgdGhlIG51bWJlciBvZiBjb25maWd1cmVkIHdvcmtlcnMuICBVc2VkIHRvIHJl c3BvbmQgdG8gY2hhbmdlIG9mCi0gKiB0aGUgaW9fd29ya2VycyBHVUMgKGJ5IGluY3JlYXNpbmcg YW5kIGRlY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3b3JrZXJzKSwgYXMKLSAqIHdlbGwgYXMgd29y a2VycyB0ZXJtaW5hdGluZyBpbiByZXNwb25zZSB0byBlcnJvcnMgKGJ5IHN0YXJ0aW5nCi0gKiAi cmVwbGFjZW1lbnQiIHdvcmtlcnMpLgorICogUmV0dXJucyB0aGUgbmV4dCB0aW1lIGF0IHdoaWNo IG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKSB3b3VsZCBzdGFydCBvbmUgb3IKKyAqIG1vcmUgSS9P IHdvcmtlcnMuICBBbnkgdGltZSBpbiB0aGUgcGFzdCBtZWFucyBBU0FQLCBhbmQgMCBtZWFucyBu byB3b3JrZXIKKyAqIGlzIGN1cnJlbnRseSBzY2hlZHVsZWQuCisgKgorICogVGhpcyBpcyBjYWxs ZWQgYnkgRGV0ZXJtaW5lU2xlZXBUaW1lKCkgYW5kIGFsc28gbWF5YmVfc3RhcnRfaW9fd29ya2Vy cygpCisgKiBpdHNlbGYsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYWdyZWUuCiAgKi8KLXN0YXRp YyB2b2lkCi1tYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQorc3RhdGljIFRpbWVzdGFtcFR6 CittYXliZV9zdGFydF9pb193b3JrZXJzX3NjaGVkdWxlZF9hdCh2b2lkKQogewogCWlmICghcGdh aW9fd29ya2Vyc19lbmFibGVkKCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAq IElmIHdlJ3JlIGluIGZpbmFsIHNodXR0aW5nIGRvd24gc3RhdGUsIHRoZW4gd2UncmUganVzdCB3 YWl0aW5nIGZvciBhbGwKIAkgKiBwcm9jZXNzZXMgdG8gZXhpdC4KIAkgKi8KIAlpZiAocG1TdGF0 ZSA+PSBQTV9XQUlUX0lPX1dPUktFUlMpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAkvKiBE b24ndCBzdGFydCBuZXcgd29ya2VycyBkdXJpbmcgYW4gaW1tZWRpYXRlIHNodXRkb3duIGVpdGhl ci4gKi8KIAlpZiAoU2h1dGRvd24gPj0gSW1tZWRpYXRlU2h1dGRvd24pCi0JCXJldHVybjsKKwkJ cmV0dXJuIDA7CiAKIAkvKgogCSAqIERvbid0IHN0YXJ0IG5ldyB3b3JrZXJzIGlmIHdlJ3JlIGlu IHRoZSBzaHV0ZG93biBwaGFzZSBvZiBhIGNyYXNoCiAJICogcmVzdGFydC4gQnV0IHdlICpkbyog bmVlZCB0byBzdGFydCBpZiB3ZSdyZSBhbHJlYWR5IHN0YXJ0aW5nIHVwIGFnYWluLgogCSAqLwog CWlmIChGYXRhbEVycm9yICYmIHBtU3RhdGUgPj0gUE1fU1RPUF9CQUNLRU5EUykKLQkJcmV0dXJu OworCQlyZXR1cm4gMDsKKworCS8qCisJICogRG9uJ3Qgc3RhcnQgYSB3b3JrZXIgaWYgd2UncmUg YXQgb3IgYWJvdmUgdGhlIG1heGltdW0uICAoRXhjZXNzIHdvcmtlcnMKKwkgKiBleGl0IHdoZW4g dGhlIEdVQyBpcyBsb3dlcmVkLCBidXQgdGhlIGNvdW50IGNhbiBiZSB0ZW1wb3JhcmlseSB0b28g aGlnaAorCSAqIHVudGlsIHRoZXkgYXJlIHJlYXBlZC4pCisJICovCisJaWYgKGlvX3dvcmtlcl9j b3VudCA+PSBpb19tYXhfd29ya2VycykKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB3ZSdyZSB1bmRl ciB0aGUgbWluaW11bSwgc3RhcnQgYSB3b3JrZXIgYXMgc29vbiBhcyBwb3NzaWJsZS4gKi8KKwlp ZiAoaW9fd29ya2VyX2NvdW50IDwgaW9fbWluX3dvcmtlcnMpCisJCXJldHVybiBUSU1FU1RBTVBf TUlOVVNfSU5GSU5JVFk7CS8qIHN0YXJ0IHdvcmtlciBBU0FQICovCisKKwkvKiBPbmx5IHByb2Nl ZWQgaWYgYSAiZ3JvdyIgcmVxdWVzdCBpcyBwZW5kaW5nIGZyb20gZXhpc3Rpbmcgd29ya2Vycy4g Ki8KKwlpZiAoIXBnYWlvX3dvcmtlcl90ZXN0X2dyb3coKSkKKwkJcmV0dXJuIDA7CiAKLQlBc3Nl cnQocG1TdGF0ZSA8IFBNX1dBSVRfSU9fV09SS0VSUyk7CisJLyoKKwkgKiBtYXliZV9zdGFydF9p b193b3JrZXJzKCkgc2hvdWxkIHN0YXJ0IGEgbmV3IEkvTyB3b3JrZXIgYWZ0ZXIgdGhpcyB0aW1l LAorCSAqIG9yIGFzIHNvb24gYXMgcG9zc2libGUgaWYgaXMgYWxyZWFkeSBpbiB0aGUgcGFzdC4K KwkgKi8KKwlyZXR1cm4gaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWU7Cit9CisKKy8qCisgKiBT dGFydCBJL08gd29ya2VycyBpZiByZXF1aXJlZC4gIFVzZWQgYXQgc3RhcnR1cCwgdG8gcmVzcG9u ZCB0byBjaGFuZ2Ugb2YKKyAqIHRoZSBpb19taW5fd29ya2VycyBHVUMsIHdoZW4gYXNrZWQgdG8g c3RhcnQgYSBuZXcgb25lIGR1ZSB0byBzdWJtaXNzaW9uCisgKiBxdWV1ZSBiYWNrbG9nLCBhbmQg YWZ0ZXIgd29ya2VycyB0ZXJtaW5hdGUgaW4gcmVzcG9uc2UgdG8gZXJyb3JzIChieQorICogc3Rh cnRpbmcgInJlcGxhY2VtZW50IiB3b3JrZXJzKS4KKyAqLworc3RhdGljIHZvaWQKK21heWJlX3N0 YXJ0X2lvX3dvcmtlcnModm9pZCkKK3sKKwlUaW1lc3RhbXBUeiBzY2hlZHVsZWRfYXQ7CiAKLQkv KiBOb3QgZW5vdWdoIHJ1bm5pbmc/ICovCi0Jd2hpbGUgKGlvX3dvcmtlcl9jb3VudCA8IGlvX3dv cmtlcnMpCisJd2hpbGUgKChzY2hlZHVsZWRfYXQgPSBtYXliZV9zdGFydF9pb193b3JrZXJzX3Nj aGVkdWxlZF9hdCgpKSAhPSAwKQogCXsKKwkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOwogCQlQTUNoaWxkICAgICpjaGlsZDsKIAkJaW50CQkJaTsKIAorCQlBc3NlcnQo cG1TdGF0ZSA8IFBNX1dBSVRfSU9fV09SS0VSUyk7CisKKwkJLyogU3RpbGwgd2FpdGluZyBmb3Ig dGhlIHNjaGVkdWxlZCB0aW1lPyAqLworCQlpZiAoc2NoZWR1bGVkX2F0ID4gbm93KQorCQkJYnJl YWs7CisKKwkJLyogQ2xlYXIgdGhlIGdyb3cgcmVxdWVzdCBmbGFnIGlmIGl0IGlzIHNldC4gKi8K KwkJcGdhaW9fd29ya2VyX2NsZWFyX2dyb3coKTsKKworCQkvKgorCQkgKiBDb21wdXRlIG5leHQg bGF1bmNoIHRpbWUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB0aGF0CisJCSAq IHRpbWUgc3BlbnQgb24gdGhlIHBvc3RtYXN0ZXIncyBvdGhlciBkdXRpZXMgZG9uJ3QgcmVzdWx0 IGluIGFuCisJCSAqIGluYWNjdXJhdGUgbGF1bmNoIGludGVydmFsLgorCQkgKi8KKwkJaW9fd29y a2VyX2xhdW5jaF9uZXh0X3RpbWUgPQorCQkJVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKGlv X3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lLAorCQkJCQkJCQkJCWlvX3dvcmtlcl9sYXVuY2hfaW50 ZXJ2YWwpOworCisJCS8qCisJCSAqIElmIHRoYXQncyBhbHJlYWR5IGluIHRoZSBwYXN0LCB0aGUg aW50ZXJ2YWwgaXMgZWl0aGVyIGltcG9zc2libHkKKwkJICogc2hvcnQgb3Igd2UgcmVjZWl2ZWQg bm8gcmVxdWVzdHMgZm9yIG5ldyB3b3JrZXJzIGZvciBhIHBlcmlvZC4KKwkJICogQ29tcHV0ZSBh IG5ldyBmdXR1cmUgdGltZSByZWxhdGl2ZSB0byB0aGUgbGFzdCBsYXVuY2ggdGltZSBpbnN0ZWFk LgorCQkgKi8KKwkJaWYgKGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lIDw9IG5vdykKKwkJCWlv X3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0KKwkJCQlUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29u ZHMoaW9fd29ya2VyX2xhdW5jaF9sYXN0X3RpbWUsCisJCQkJCQkJCQkJCWlvX3dvcmtlcl9sYXVu Y2hfaW50ZXJ2YWwpOworCQlpb193b3JrZXJfbGF1bmNoX2xhc3RfdGltZSA9IG5vdzsKKwogCQkv KiBmaW5kIHVudXNlZCBlbnRyeSBpbiBpb193b3JrZXJfY2hpbGRyZW4gYXJyYXkgKi8KIAkJZm9y IChpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJTOyArK2kpCiAJCXsKQEAgLTQ0NTQsMjAgKzQ1Mzks MTQgQEAgbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCkKIAkJCSsraW9fd29ya2VyX2NvdW50 OwogCQl9CiAJCWVsc2UKLQkJCWJyZWFrOwkJCQkvKiB0cnkgYWdhaW4gbmV4dCB0aW1lICovCi0J fQotCi0JLyogVG9vIG1hbnkgcnVubmluZz8gKi8KLQlpZiAoaW9fd29ya2VyX2NvdW50ID4gaW9f d29ya2VycykKLQl7Ci0JCS8qIGFzayB0aGUgSU8gd29ya2VyIGluIHRoZSBoaWdoZXN0IHNsb3Qg dG8gZXhpdCAqLwotCQlmb3IgKGludCBpID0gTUFYX0lPX1dPUktFUlMgLSAxOyBpID49IDA7IC0t aSkKIAkJewotCQkJaWYgKGlvX3dvcmtlcl9jaGlsZHJlbltpXSAhPSBOVUxMKQotCQkJewotCQkJ CWtpbGwoaW9fd29ya2VyX2NoaWxkcmVuW2ldLT5waWQsIFNJR1VTUjIpOwotCQkJCWJyZWFrOwot CQkJfQorCQkJLyoKKwkJCSAqIEZvcmsgZmFpbHVyZTogd2UnbGwgdHJ5IGFnYWluIGFmdGVyIHRo ZSBsYXVuY2ggaW50ZXJ2YWwKKwkJCSAqIGV4cGlyZXMsIG9yIGJlIGNhbGxlZCBhZ2FpbiB3aXRo b3V0IGRlbGF5IGlmIHdlIGRvbid0IHlldCBoYXZlCisJCQkgKiBpb19taW5fd29ya2Vycy4gIERv bid0IGxvb3AgaGVyZSB0aG91Z2gsIHRoZSBwb3N0bWFzdGVyIGhhcworCQkJICogb3RoZXIgZHV0 aWVzLgorCQkJICovCisJCQlicmVhazsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L21ldGhvZF93b3JrZXIuYwppbmRleCBlYjY4NmNlZGUxYS4uODYzYzdkYzAxMDQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKQEAgLTExLDkgKzExLDggQEAKICAqIGlu ZnJhc3RydWN0dXJlIGZvciByZW9wZW5pbmcgdGhlIGZpbGUsIGFuZCBtdXN0IHByb2Nlc3NlZCBz eW5jaHJvbm91c2x5IGJ5CiAgKiB0aGUgY2xpZW50IGNvZGUgd2hlbiBzdWJtaXR0ZWQuCiAgKgot ICogU28gdGhhdCB0aGUgc3VibWl0dGVyIGNhbiBtYWtlIGp1c3Qgb25lIHN5c3RlbSBjYWxsIHdo ZW4gc3VibWl0dGluZyBhIGJhdGNoCi0gKiBvZiBJT3MsIHdha2V1cHMgImZhbiBvdXQiOyBlYWNo IHdva2VuIElPIHdvcmtlciBjYW4gd2FrZSB0d28gbW9yZS4gWFhYIFRoaXMKLSAqIGNvdWxkIGJl IGltcHJvdmVkIGJ5IHVzaW5nIGZ1dGV4ZXMgaW5zdGVhZCBvZiBsYXRjaGVzIHRvIHdha2UgTiB3 YWl0ZXJzLgorICogVGhlIHBvb2wgdHJpZXMgdG8gc3RhYmlsaXplIGF0IGEgc2l6ZSB0aGF0IGNh biBoYW5kbGUgcmVjZW50bHkgc2VlbgorICogdmFyaWF0aW9uIGluIGRlbWFuZCwgd2l0aGluIHRo ZSBjb25maWd1cmVkIGxpbWl0cy4KICAqCiAgKiBUaGlzIG1ldGhvZCBvZiBBSU8gaXMgYXZhaWxh YmxlIGluIGFsbCBidWlsZHMgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLCBhbmQKICAqIGlzIHRo ZSBkZWZhdWx0LgpAQCAtMjksNiArMjgsOCBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAor I2luY2x1ZGUgPGxpbWl0cy5oPgorCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCkBAIC00MCw2 ICs0MSw4IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKICNpbmNsdWRlICJzdG9y YWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdl L2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgpAQCAtNDgsMTAgKzUxLDExIEBACiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVz LmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCisvKiBTYXR1cmF0aW9uIGZvciBj b3VudGVycyB1c2VkIHRvIGVzdGltYXRlIHdha2V1cDp3b3JrIHJhdGlvLiAqLworI2RlZmluZSBQ R0FJT19XT1JLRVJfU1RBVFNfTUFYIDQKIAotLyogSG93IG1hbnkgd29ya2VycyBzaG91bGQgZWFj aCB3b3JrZXIgd2FrZSB1cCBpZiBuZWVkZWQ/ICovCi0jZGVmaW5lIElPX1dPUktFUl9XQUtFVVBf RkFOT1VUIDIKLQorLyogRGVidWdnaW5nIHN1cHBvcnQ6IHNob3cgY3VycmVudCBJTyBhbmQgd2Fr ZXVwczppb3Mgc3RhdGlzdGljcyBpbiBwcy4gKi8KKy8qICNkZWZpbmUgUEdBSU9fV09SS0VSX1NI T1dfUFNfSU5GTyAqLwogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1 ZQogewpAQCAtNjMsMTMgKzY3LDM0IEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlCiAKIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU2xvdAogewotCUxhdGNoCSAg ICpsYXRjaDsKLQlib29sCQlpbl91c2U7CisJUHJvY051bWJlcglwcm9jX251bWJlcjsKIH0gUGdB aW9Xb3JrZXJTbG90OwogCisvKgorICogU2V0cyBvZiB3b3JrZXIgSURzIGFyZSBoZWxkIGluIGEg c2ltcGxlIGJpdG1hcCwgYWNjZXNzZWQgdGhyb3VnaCBmdW5jdGlvbnMKKyAqIHRoYXQgcHJvdmlk ZSBhIG1vcmUgcmVhZGFibGUgYWJzdHJhY3Rpb24uICBJZiB3ZSB3YW50ZWQgdG8gc3VwcG9ydCBt b3JlCisgKiB3b3JrZXJzIHRoYW4gdGhhdCwgdGhlIGNvbnRlbnRpb24gb24gdGhlIHNpbmdsZSBx dWV1ZSB3b3VsZCBzdXJlbHkgZ2V0IHRvbworICogaGlnaCwgc28gd2UgbWlnaHQgd2FudCB0byBj b25zaWRlciBtdWx0aXBsZSBwb29scyBpbnN0ZWFkIG9mIHdpZGVuaW5nIHRoaXMuCisgKi8KK3R5 cGVkZWYgdWludDY0IFBnQWlvV29ya2VyU2V0OworCisjZGVmaW5lIFBHQUlPX1dPUktFUl9TRVRf QklUUyAoc2l6ZW9mKFBnQWlvV29ya2VyU2V0KSAqIENIQVJfQklUKQorCitzdGF0aWNfYXNzZXJ0 KFBHQUlPX1dPUktFUl9TRVRfQklUUyA+PSBNQVhfSU9fV09SS0VSUywgInRvbyBzbWFsbCIpOwor CiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlckNvbnRyb2wKIHsKLQl1aW50NjQJCWlkbGVfd29y a2VyX21hc2s7CisJLyogU2VlbiBieSBwb3N0bWFzdGVyICovCisJdm9sYXRpbGUgYm9vbCBncm93 OworCisJLyogUHJvdGVjdGVkIGJ5IEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2suICovCisJ UGdBaW9Xb3JrZXJTZXQgaWRsZV93b3JrZXJfc2V0OworCisJLyogUHJvdGVjdGVkIGJ5IEFpb1dv cmtlckNvbnRyb2xMb2NrLiAqLworCVBnQWlvV29ya2VyU2V0IHdvcmtlcl9zZXQ7CisJaW50CQkJ bndvcmtlcnM7CisKKwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyQ29udHJvbExvY2suICovCiAJ UGdBaW9Xb3JrZXJTbG90IHdvcmtlcnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gUGdBaW9X b3JrZXJDb250cm9sOwogCkBAIC05MSwxNSArMTE2LDEwMyBAQCBjb25zdCBJb01ldGhvZE9wcyBw Z2Fpb193b3JrZXJfb3BzID0gewogCiAKIC8qIEdVQ3MgKi8KLWludAkJCWlvX3dvcmtlcnMgPSAz OworaW50CQkJaW9fbWluX3dvcmtlcnMgPSAxOworaW50CQkJaW9fbWF4X3dvcmtlcnMgPSA4Owor aW50CQkJaW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwMDAwOworaW50CQkJaW9fd29ya2VyX2xh dW5jaF9pbnRlcnZhbCA9IDEwMDsKIAogCiBzdGF0aWMgaW50CWlvX3dvcmtlcl9xdWV1ZV9zaXpl ID0gNjQ7Ci1zdGF0aWMgaW50CU15SW9Xb3JrZXJJZDsKK3N0YXRpYyBpbnQJTXlJb1dvcmtlcklk ID0gLTE7CiBzdGF0aWMgUGdBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJt aXNzaW9uX3F1ZXVlOwogc3RhdGljIFBnQWlvV29ya2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRy b2w7CiAKIAorc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9zZXRfaW5pdGlhbGl6ZShQZ0Fpb1dv cmtlclNldCAqc2V0KQoreworCSpzZXQgPSAwOworfQorCitzdGF0aWMgYm9vbAorcGdhaW9fd29y a2VyX3NldF9pc19lbXB0eShQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCXJldHVybiAqc2V0ID09 IDA7Cit9CisKK3N0YXRpYyBQZ0Fpb1dvcmtlclNldAorcGdhaW9fd29ya2VyX3NldF9zaW5nbGV0 b24oaW50IHdvcmtlcikKK3sKKwlyZXR1cm4gVUlOVDY0X0MoMSkgPDwgd29ya2VyOworfQorCitz dGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3NldF9maWxsKFBnQWlvV29ya2VyU2V0ICpzZXQpCit7 CisJKnNldCA9IFVJTlQ2NF9NQVggPj4gKFBHQUlPX1dPUktFUl9TRVRfQklUUyAtIE1BWF9JT19X T1JLRVJTKTsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9zZXRfc3VidHJhY3QoUGdB aW9Xb3JrZXJTZXQgKnNldDEsIGNvbnN0IFBnQWlvV29ya2VyU2V0ICpzZXQyKQoreworCSpzZXQx ICY9IH4qc2V0MjsKK30KKworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl9zZXRfaW5zZXJ0KFBn QWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJKnNldCB8PSBwZ2Fpb193b3JrZXJf c2V0X3NpbmdsZXRvbih3b3JrZXIpOworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3Nl dF9yZW1vdmUoUGdBaW9Xb3JrZXJTZXQgKnNldCwgaW50IHdvcmtlcikKK3sKKwkqc2V0ICY9IH5w Z2Fpb193b3JrZXJfc2V0X3NpbmdsZXRvbih3b3JrZXIpOworfQorCitzdGF0aWMgdm9pZAorcGdh aW9fd29ya2VyX3NldF9yZW1vdmVfbGVzc190aGFuKFBnQWlvV29ya2VyU2V0ICpzZXQsIGludCB3 b3JrZXIpCit7CisJKnNldCAmPSB+KHBnYWlvX3dvcmtlcl9zZXRfc2luZ2xldG9uKHdvcmtlcikg LSAxKTsKK30KKworc3RhdGljIGludAorcGdhaW9fd29ya2VyX3NldF9nZXRfaGlnaGVzdChQZ0Fp b1dvcmtlclNldCAqc2V0KQoreworCUFzc2VydCghcGdhaW9fd29ya2VyX3NldF9pc19lbXB0eShz ZXQpKTsKKwlyZXR1cm4gcGdfbGVmdG1vc3Rfb25lX3BvczY0KCpzZXQpOworfQorCitzdGF0aWMg aW50CitwZ2Fpb193b3JrZXJfc2V0X2dldF9sb3dlc3QoUGdBaW9Xb3JrZXJTZXQgKnNldCkKK3sK KwlBc3NlcnQoIXBnYWlvX3dvcmtlcl9zZXRfaXNfZW1wdHkoc2V0KSk7CisJcmV0dXJuIHBnX3Jp Z2h0bW9zdF9vbmVfcG9zNjQoKnNldCk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcl9z ZXRfcG9wX2xvd2VzdChQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCWludAkJCXdvcmtlciA9IHBn YWlvX3dvcmtlcl9zZXRfZ2V0X2xvd2VzdChzZXQpOworCisJcGdhaW9fd29ya2VyX3NldF9yZW1v dmUoc2V0LCB3b3JrZXIpOworCXJldHVybiB3b3JrZXI7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2VyX3NldF9jb250YWlucyhQZ0Fpb1dv cmtlclNldCAqc2V0LCBpbnQgd29ya2VyKQoreworCXJldHVybiAoKnNldCAmIHBnYWlvX3dvcmtl cl9zZXRfc2luZ2xldG9uKHdvcmtlcikpICE9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dv cmtlcl9zZXRfY291bnQoUGdBaW9Xb3JrZXJTZXQgKnNldCkKK3sKKwlyZXR1cm4gcGdfcG9wY291 bnQ2NCgqc2V0KTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX3NobWVt X3JlcXVlc3Qodm9pZCAqYXJnKQogewpAQCAtMTMzLDM3ICsyNDYsMTA3IEBAIHBnYWlvX3dvcmtl cl9zaG1lbV9pbml0KHZvaWQgKmFyZykKIAlpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+c2l6 ZSA9IHF1ZXVlX3NpemU7CiAJaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWUtPmhlYWQgPSAwOwog CWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT50YWlsID0gMDsKKwlpb193b3JrZXJfY29udHJv bC0+Z3JvdyA9IGZhbHNlOworCXBnYWlvX3dvcmtlcl9zZXRfaW5pdGlhbGl6ZSgmaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcl9zZXQpOworCXBnYWlvX3dvcmtlcl9zZXRfaW5pdGlhbGl6ZSgmaW9f d29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX3NldCk7CiAKLQlpb193b3JrZXJfY29udHJvbC0+ aWRsZV93b3JrZXJfbWFzayA9IDA7CiAJZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfSU9fV09SS0VS UzsgKytpKQorCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5wcm9jX251bWJlciA9IElO VkFMSURfUFJPQ19OVU1CRVI7Cit9CisKK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfZ3Jvdyhi b29sIGdyb3cpCit7CisJLyoKKwkgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHNpdGVzIHRoYXQgZG9u J3QgaG9sZCBBaW9Xb3JrZXJDb250cm9sTG9jaywgYnV0CisJICogdGhlc2UgdmFsdWVzIGNoYW5n ZSBpbmZyZXF1ZW50bHkgYW5kIGFuIHVwLXRvLWRhdGUgdmFsdWUgaXMgbm90CisJICogcmVxdWly ZWQgZm9yIHRoaXMgaGV1cmlzdGljIHB1cnBvc2UuCisJICovCisJaWYgKCFncm93KQorCXsKKwkJ LyogQXZvaWQgZGlydHlpbmcgbWVtb3J5IGlmIG5vdCBhbHJlYWR5IHNldC4gKi8KKwkJaWYgKGlv X3dvcmtlcl9jb250cm9sLT5ncm93KQorCQkJaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cgPSBmYWxz ZTsKKwl9CisJZWxzZQogCXsKLQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2gg PSBOVUxMOwotCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsK KwkJLyogRG8gbm90aGluZyBpZiByZXF1ZXN0IGFscmVhZHkgcGVuZGluZy4gKi8KKwkJaWYgKCFp b193b3JrZXJfY29udHJvbC0+Z3JvdykKKwkJeworCQkJaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cg PSB0cnVlOworCQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfSU9fV09SS0VSX0dST1cp OworCQl9CiAJfQogfQogCisvKgorICogQ2FsbGVkIGJ5IHRoZSBwb3N0bWFzdGVyIHRvIGNoZWNr IGlmIGEgbmV3IHdvcmtlciBpcyBuZWVkZWQuCisgKi8KK2Jvb2wKK3BnYWlvX3dvcmtlcl90ZXN0 X2dyb3codm9pZCkKK3sKKwlyZXR1cm4gaW9fd29ya2VyX2NvbnRyb2wgJiYgaW9fd29ya2VyX2Nv bnRyb2wtPmdyb3c7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgdG8gY2xl YXIgdGhlIGdyb3cgZmxhZy4KKyAqLwordm9pZAorcGdhaW9fd29ya2VyX2NsZWFyX2dyb3codm9p ZCkKK3sKKwlpZiAoaW9fd29ya2VyX2NvbnRyb2wpCisJCWlvX3dvcmtlcl9jb250cm9sLT5ncm93 ID0gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQKLXBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSh2b2lk KQorcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKGludCBtaW5pbXVtX3dvcmtlcikKIHsKKwlQZ0Fp b1dvcmtlclNldCB3b3JrZXJfc2V0OwogCWludAkJCXdvcmtlcjsKIAotCWlmIChpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJfbWFzayA9PSAwKQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUlu TW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKworCXdv cmtlcl9zZXQgPSBpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfc2V0OworCXBnYWlvX3dv cmtlcl9zZXRfcmVtb3ZlX2xlc3NfdGhhbigmd29ya2VyX3NldCwgbWluaW11bV93b3JrZXIpOwor CWlmIChwZ2Fpb193b3JrZXJfc2V0X2lzX2VtcHR5KCZ3b3JrZXJfc2V0KSkKIAkJcmV0dXJuIC0x OwogCi0JLyogRmluZCB0aGUgbG93ZXN0IGJpdCBwb3NpdGlvbiwgYW5kIGNsZWFyIGl0LiAqLwot CXdvcmtlciA9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVf d29ya2VyX21hc2spOwotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrICY9IH4o VUlOVDY0X0MoMSkgPDwgd29ya2VyKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtl cnNbd29ya2VyXS5pbl91c2UpOworCS8qIEZpbmQgdGhlIGxvd2VzdCBudW1iZXJlZCBpZGxlIHdv cmtlciBhbmQgbWFyayBpdCBub3QgaWRsZS4gKi8KKwl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfc2V0 X2dldF9sb3dlc3QoJndvcmtlcl9zZXQpOworCXBnYWlvX3dvcmtlcl9zZXRfcmVtb3ZlKCZpb193 b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfc2V0LCB3b3JrZXIpOwogCiAJcmV0dXJuIHdvcmtl cjsKIH0KIAorLyoKKyAqIFRyeSB0byB3YWtlIGEgd29ya2VyIGJ5IHNldHRpbmcgaXRzIGxhdGNo LCB0byB0ZWxsIGl0IHRoZXJlIGFyZSBJT3MgdG8KKyAqIHByb2Nlc3MgaW4gdGhlIHN1Ym1pc3Np b24gcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfd2FrZShpbnQgd29ya2Vy KQoreworCVByb2NOdW1iZXIJcHJvY19udW1iZXI7CisKKwkvKgorCSAqIElmIHRoZSBzZWxlY3Rl ZCB3b3JrZXIgaXMgY29uY3VycmVudGx5IGV4aXRpbmcsIHRoZW4gcGdhaW9fd29ya2VyX2RpZSgp CisJICogaGFkIG5vdCB5ZXQgcmVtb3ZlZCBpdCBhcyBvZiB3aGVuIHdlIHNhdyBpdCBpbiBpZGxl X3dvcmtlcl9zZXQuICBUaGF0J3MKKwkgKiBPSywgYmVjYXVzZSBpdCB3aWxsIHdha2UgYWxsIHJl bWFpbmluZyB3b3JrZXJzIHRvIGNsb3NlIHdha2V1cC12cy1leGl0CisJICogcmFjZXM6ICpzb21l b25lKiB3aWxsIHNlZSB0aGUgcXVldWVkIElPLiAgSWYgdGhlcmUgYXJlIG5vIHdvcmtlcnMKKwkg KiBydW5uaW5nLCB0aGUgcG9zdG1hc3RlciB3aWxsIHN0YXJ0IGEgbmV3IG9uZS4KKwkgKi8KKwlw cm9jX251bWJlciA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY19udW1i ZXI7CisJaWYgKHByb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCisJCVNldExhdGNo KCZHZXRQR1Byb2NCeU51bWJlcihwcm9jX251bWJlciktPnByb2NMYXRjaCk7Cit9CisKIHN0YXRp YyBib29sCiBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9pbnNlcnQoUGdBaW9IYW5kbGUg KmlvaCkKIHsKIAlQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CiAJdWludDMyCQlu ZXdfaGVhZDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNz aW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwogCXF1ZXVlID0gaW9fd29ya2VyX3N1Ym1p c3Npb25fcXVldWU7CiAJbmV3X2hlYWQgPSAocXVldWUtPmhlYWQgKyAxKSAmIChxdWV1ZS0+c2l6 ZSAtIDEpOwogCWlmIChuZXdfaGVhZCA9PSBxdWV1ZS0+dGFpbCkKQEAgLTE4NSw2ICszNjgsOCBA QCBwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9jb25zdW1lKHZvaWQpCiAJUGdBaW9Xb3Jr ZXJTdWJtaXNzaW9uUXVldWUgKnF1ZXVlOwogCWludAkJCXJlc3VsdDsKIAorCUFzc2VydChMV0xv Y2tIZWxkQnlNZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJ VkUpKTsKKwogCXF1ZXVlID0gaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWU7CiAJaWYgKHF1ZXVl LT50YWlsID09IHF1ZXVlLT5oZWFkKQogCQlyZXR1cm4gLTE7CQkJCS8qIGVtcHR5ICovCkBAIC0y MDEsNiArMzg2LDggQEAgcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfZGVwdGgodm9pZCkK IAl1aW50MzIJCWhlYWQ7CiAJdWludDMyCQl0YWlsOwogCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1l SW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCiAJ aGVhZCA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT5oZWFkOwogCXRhaWwgPSBpb193b3Jr ZXJfc3VibWlzc2lvbl9xdWV1ZS0+dGFpbDsKIApAQCAtMjI2LDggKzQxMyw3IEBAIHBnYWlvX3dv cmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9p b3MpCiB7CiAJUGdBaW9IYW5kbGUgKipzeW5jaHJvbm91c19pb3MgPSBOVUxMOwogCWludAkJCW5z eW5jID0gMDsKLQlMYXRjaAkgICAqd2FrZXVwID0gTlVMTDsKLQlpbnQJCQl3b3JrZXI7CisJaW50 CQkJd29ya2VyID0gLTE7CiAKIAlBc3NlcnQobnVtX3N0YWdlZF9pb3MgPD0gUEdBSU9fU1VCTUlU X0JBVENIX1NJWkUpOwogCkBAIC0yNTIsMTkgKzQzOCwxNSBAQCBwZ2Fpb193b3JrZXJfc3VibWl0 KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCQkJCWJy ZWFrOwogCQkJfQogCi0JCQlpZiAod2FrZXVwID09IE5VTEwpCi0JCQl7Ci0JCQkJLyogQ2hvb3Nl IGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LiAqLwotCQkJ CXdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpOwotCQkJCWlmICh3b3JrZXIgPj0g MCkKLQkJCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5sYXRj aDsKLQotCQkJCXBnYWlvX2RlYnVnX2lvKERFQlVHNCwgc3RhZ2VkX2lvc1tpXSwKLQkJCQkJCQkg ICAiY2hvb3Npbmcgd29ya2VyICVkIiwKLQkJCQkJCQkgICB3b3JrZXIpOwotCQkJfQorCQkJLyog Q2hvb3NlIG9uZSB3b3JrZXIgdG8gd2FrZSBmb3IgdGhpcyBiYXRjaC4gKi8KKwkJCWlmICh3b3Jr ZXIgPT0gLTEpCisJCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKDApOwogCQl9 CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisKKwkJLyog V2FrZSB1cCBjaG9zZW4gd29ya2VyLiAgSXQgd2lsbCB3YWtlIHBlZXJzIGlmIG5lY2Vzc2FyeS4g Ki8KKwkJaWYgKHdvcmtlciAhPSAtMSkKKwkJCXBnYWlvX3dvcmtlcl93YWtlKHdvcmtlcik7CiAJ fQogCWVsc2UKIAl7CkBAIC0yNzMsOSArNDU1LDYgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50 MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAkJbnN5bmMgPSBu dW1fc3RhZ2VkX2lvczsKIAl9CiAKLQlpZiAod2FrZXVwKQotCQlTZXRMYXRjaCh3YWtldXApOwot CiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25vdXNseS4gKi8KIAlpZiAobnN5bmMg PiAwKQogCXsKQEAgLTI5NSwxNCArNDc0LDI3IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2 IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiBzdGF0aWMgdm9pZAog cGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogewotCUxXTG9ja0FjcXVpcmUo QWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlBc3NlcnQoaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2UpOwotCUFzc2VydChp b193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID09IE15TGF0Y2gp OworCVBnQWlvV29ya2VyU2V0IG5vdGlmeV9zZXQ7CiAKLQlpb193b3JrZXJfY29udHJvbC0+aWRs ZV93b3JrZXJfbWFzayAmPSB+KFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7Ci0JaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2UgPSBmYWxzZTsKLQlpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID0gTlVMTDsKKwlMV0xv Y2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJ cGdhaW9fd29ya2VyX3NldF9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9z ZXQsIE15SW9Xb3JrZXJJZCk7CiAJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVl dWVMb2NrKTsKKworCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyQ29udHJvbExvY2ssIExXX0VYQ0xV U0lWRSk7CisJQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0u cHJvY19udW1iZXIgPT0gTXlQcm9jTnVtYmVyKTsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vy c1tNeUlvV29ya2VySWRdLnByb2NfbnVtYmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwlBc3Nl cnQocGdhaW9fd29ya2VyX3NldF9jb250YWlucygmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9z ZXQsIE15SW9Xb3JrZXJJZCkpOworCXBnYWlvX3dvcmtlcl9zZXRfcmVtb3ZlKCZpb193b3JrZXJf Y29udHJvbC0+d29ya2VyX3NldCwgTXlJb1dvcmtlcklkKTsKKwlub3RpZnlfc2V0ID0gaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcl9zZXQ7CisJQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT5ud29y a2VycyA+IDApOworCWlvX3dvcmtlcl9jb250cm9sLT5ud29ya2Vycy0tOworCUFzc2VydChwZ2Fp b193b3JrZXJfc2V0X2NvdW50KCZpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCkgPT0KKwkJ ICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtl ckNvbnRyb2xMb2NrKTsKKworCS8qIE5vdGlmeSBvdGhlciB3b3JrZXJzIG9uIHBvb2wgY2hhbmdl LiAqLworCXdoaWxlICghcGdhaW9fd29ya2VyX3NldF9pc19lbXB0eSgmbm90aWZ5X3NldCkpCisJ CXBnYWlvX3dvcmtlcl93YWtlKHBnYWlvX3dvcmtlcl9zZXRfcG9wX2xvd2VzdCgmbm90aWZ5X3Nl dCkpOwogfQogCiAvKgpAQCAtMzEyLDMzICs1MDQsMzQgQEAgcGdhaW9fd29ya2VyX2RpZShpbnQg Y29kZSwgRGF0dW0gYXJnKQogc3RhdGljIHZvaWQKIHBnYWlvX3dvcmtlcl9yZWdpc3Rlcih2b2lk KQogeworCVBnQWlvV29ya2VyU2V0IGZyZWVfd29ya2VyX3NldDsKKwlQZ0Fpb1dvcmtlclNldCBv bGRfd29ya2VyX3NldDsKKwogCU15SW9Xb3JrZXJJZCA9IC0xOwogCi0JLyoKLQkgKiBYWFg6IFRo aXMgY291bGQgZG8gd2l0aCBtb3JlIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiBCdXQgaXQncyBhbHNv IG5vdAotCSAqIHZlcnkgY29tbW9uIGZvciB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdG8gY2hhbmdl IGF0IHRoZSBtb21lbnQuLi4KLQkgKi8KLQlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Np b25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJDb250 cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ2Fpb193b3JrZXJfc2V0X2ZpbGwoJmZyZWVfd29y a2VyX3NldCk7CisJcGdhaW9fd29ya2VyX3NldF9zdWJ0cmFjdCgmZnJlZV93b3JrZXJfc2V0LCAm aW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQpOworCWlmICghcGdhaW9fd29ya2VyX3NldF9p c19lbXB0eSgmZnJlZV93b3JrZXJfc2V0KSkKKwkJTXlJb1dvcmtlcklkID0gcGdhaW9fd29ya2Vy X3NldF9nZXRfbG93ZXN0KCZmcmVlX3dvcmtlcl9zZXQpOworCWlmIChNeUlvV29ya2VySWQgPT0g LTEpCisJCWVsb2coRVJST1IsICJjb3VsZG4ndCBmaW5kIGEgZnJlZSB3b3JrZXIgSUQiKTsKIAot CWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKLQl7Ci0JCWlmICghaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0uaW5fdXNlKQotCQl7Ci0JCQlBc3NlcnQoaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0Y2ggPT0gTlVMTCk7Ci0JCQlpb193b3JrZXJfY29u dHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0cnVlOwotCQkJTXlJb1dvcmtlcklkID0gaTsKLQkJ CWJyZWFrOwotCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vy c1tpXS5sYXRjaCAhPSBOVUxMKTsKLQl9CisJQXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3Jr ZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIgPT0KKwkJICAgSU5WQUxJRF9QUk9DX05VTUJF Uik7CisJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJl ciA9IE15UHJvY051bWJlcjsKIAotCWlmIChNeUlvV29ya2VySWQgPT0gLTEpCi0JCWVsb2coRVJS T1IsICJjb3VsZG4ndCBmaW5kIGEgZnJlZSB3b3JrZXIgc2xvdCIpOworCW9sZF93b3JrZXJfc2V0 ID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQ7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJf c2V0X2NvbnRhaW5zKCZvbGRfd29ya2VyX3NldCwgTXlJb1dvcmtlcklkKSk7CisJcGdhaW9fd29y a2VyX3NldF9pbnNlcnQoJmlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJfc2V0LCBNeUlvV29ya2Vy SWQpOworCWlvX3dvcmtlcl9jb250cm9sLT5ud29ya2VycysrOworCUFzc2VydChwZ2Fpb193b3Jr ZXJfc2V0X2NvdW50KCZpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCkgPT0KKwkJICAgaW9f d29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRy b2xMb2NrKTsKIAotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrIHw9IChVSU5U NjRfQygxKSA8PCBNeUlvV29ya2VySWQpOwotCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015 SW9Xb3JrZXJJZF0ubGF0Y2ggPSBNeUxhdGNoOwotCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3Vi bWlzc2lvblF1ZXVlTG9jayk7CisJLyogTm90aWZ5IG90aGVyIHdvcmtlcnMgb24gcG9vbCBjaGFu Z2UuICovCisJd2hpbGUgKCFwZ2Fpb193b3JrZXJfc2V0X2lzX2VtcHR5KCZvbGRfd29ya2VyX3Nl dCkpCisJCXBnYWlvX3dvcmtlcl93YWtlKHBnYWlvX3dvcmtlcl9zZXRfcG9wX2xvd2VzdCgmb2xk X3dvcmtlcl9zZXQpKTsKIAogCW9uX3NobWVtX2V4aXQocGdhaW9fd29ya2VyX2RpZSwgMCk7CiB9 CkBAIC0zNjQsMTQgKzU1Nyw0OCBAQCBwZ2Fpb193b3JrZXJfZXJyb3JfY2FsbGJhY2sodm9pZCAq YXJnKQogCWVycmNvbnRleHQoIkkvTyB3b3JrZXIgZXhlY3V0aW5nIEkvTyBvbiBiZWhhbGYgb2Yg cHJvY2VzcyAlZCIsIG93bmVyX3BpZCk7CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGlzIGJhY2tl bmQgaXMgYWxsb3dlZCB0byB0aW1lIG91dCwgYW5kIHRodXMgc2hvdWxkIHVzZSBhCisgKiBub24t aW5maW5pdGUgc2xlZXAgdGltZS4gIE9ubHkgdGhlIGhpZ2hlc3QtbnVtYmVyZWQgd29ya2VyIGlz IGFsbG93ZWQgdG8KKyAqIHRpbWUgb3V0LCBhbmQgb25seSBpZiB0aGUgcG9vbCBpcyBhYm92ZSBp b19taW5fd29ya2Vycy4gIFNlcmlhbGl6aW5nCisgKiB0aW1lb3V0cyBrZWVwcyBJRHMgaW4gYSBy YW5nZSAwLi5OIHdpdGhvdXQgZ2FwcywgYW5kIGF2b2lkcyB1bmRlcnNob290aW5nCisgKiBpb19t aW5fd29ya2Vycy4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIG9ubHkgaW5zdGFudGFuZW91c2x5IHRy dWUgYW5kIG1heSBiZSB0ZW1wb3JhcmlseSBpbmNvbnNpc3RlbnQKKyAqIGluIGRpZmZlcmVudCB3 b3JrZXJzIGFyb3VuZCB0cmFuc2l0aW9ucywgYnV0IGFsbCB3b3JrZXJzIGFyZSB3b2tlbiB1cCBv bgorICogcG9vbCBzaXplIG9yIEdVQyBjaGFuZ2VzIG1ha2luZyB0aGUgcmVzdWx0IGV2ZW50dWFs bHkgY29uc2lzdGVudC4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX3dvcmtlcl9jYW5fdGltZW91 dCh2b2lkKQoreworCVBnQWlvV29ya2VyU2V0IHdvcmtlcl9zZXQ7CisKKwkvKiBTZXJpYWxpemUg YWdhaW5zdCBwb29sIHNpemUgY2hhbmdlcy4gKi8KKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNv bnRyb2xMb2NrLCBMV19TSEFSRUQpOworCXdvcmtlcl9zZXQgPSBpb193b3JrZXJfY29udHJvbC0+ d29ya2VyX3NldDsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCWlm IChNeUlvV29ya2VySWQgIT0gcGdhaW9fd29ya2VyX3NldF9nZXRfaGlnaGVzdCgmd29ya2VyX3Nl dCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChNeUlvV29ya2VySWQgPCBpb19taW5fd29ya2Vy cykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKIHZvaWQKIElvV29ya2Vy TWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog ewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKKwlUaW1lc3RhbXBUeiBpZGxlX3RpbWVv dXRfYWJzID0gMDsKKwlpbnQJCQl0aW1lb3V0X2d1Y191c2VkID0gMDsKIAlQZ0Fpb0hhbmRsZSAq dm9sYXRpbGUgZXJyb3JfaW9oID0gTlVMTDsKIAlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxs YmFjayA9IHswfTsKIAl2b2xhdGlsZSBpbnQgZXJyb3JfZXJybm8gPSAwOwogCWNoYXIJCWNtZFsx MjhdOworCWludAkJCWlvcyA9IDA7CisJaW50CQkJd2FrZXVwcyA9IDA7CiAKIAlBdXhpbGlhcnlQ cm9jZXNzTWFpbkNvbW1vbigpOwogCkBAIC00MzksMTAgKzY2Niw5IEBAIElvV29ya2VyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXdoaWxl ICghU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKIAl7CiAJCXVpbnQzMgkJaW9faW5kZXg7Ci0JCUxh dGNoCSAgICpsYXRjaGVzW0lPX1dPUktFUl9XQUtFVVBfRkFOT1VUXTsKLQkJaW50CQkJbmxhdGNo ZXMgPSAwOwotCQlpbnQJCQlud2FrZXVwcyA9IDA7Ci0JCWludAkJCXdvcmtlcjsKKwkJaW50CQkJ d29ya2VyID0gLTE7CisJCWludAkJCXF1ZXVlX2RlcHRoID0gMDsKKwkJYm9vbAkJZ3JvdyA9IGZh bHNlOwogCiAJCS8qCiAJCSAqIFRyeSB0byBnZXQgYSBqb2IgdG8gZG8uCkBAIC00NTMsMzggKzY3 OSw2NCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAkJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVM b2NrLCBMV19FWENMVVNJVkUpOwogCQlpZiAoKGlvX2luZGV4ID0gcGdhaW9fd29ya2VyX3N1Ym1p c3Npb25fcXVldWVfY29uc3VtZSgpKSA9PSAtMSkKIAkJewotCQkJLyoKLQkJCSAqIE5vdGhpbmcg dG8gZG8uICBNYXJrIHNlbGYgaWRsZS4KLQkJCSAqCi0JCQkgKiBYWFg6IEludmVudCBzb21lIGtp bmQgb2YgYmFjayBwcmVzc3VyZSB0byByZWR1Y2UgdXNlbGVzcwotCQkJICogd2FrZXVwcz8KLQkJ CSAqLwotCQkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgfD0gKFVJTlQ2NF9D KDEpIDw8IE15SW9Xb3JrZXJJZCk7CisJCQkvKiBOb3RoaW5nIHRvIGRvLiAgTWFyayBzZWxmIGlk bGUuICovCisJCQlwZ2Fpb193b3JrZXJfc2V0X2luc2VydCgmaW9fd29ya2VyX2NvbnRyb2wtPmlk bGVfd29ya2VyX3NldCwKKwkJCQkJCQkJCU15SW9Xb3JrZXJJZCk7CiAJCX0KIAkJZWxzZQogCQl7 CiAJCQkvKiBHb3Qgb25lLiAgQ2xlYXIgaWRsZSBmbGFnLiAqLwotCQkJaW9fd29ya2VyX2NvbnRy b2wtPmlkbGVfd29ya2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOwor CQkJcGdhaW9fd29ya2VyX3NldF9yZW1vdmUoJmlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtl cl9zZXQsCisJCQkJCQkJCQlNeUlvV29ya2VySWQpOwogCi0JCQkvKiBTZWUgaWYgd2UgY2FuIHdh a2UgdXAgc29tZSBwZWVycy4gKi8KLQkJCW53YWtldXBzID0gTWluKHBnYWlvX3dvcmtlcl9zdWJt aXNzaW9uX3F1ZXVlX2RlcHRoKCksCi0JCQkJCQkgICBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCk7 Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG53YWtldXBzOyArK2kpCisJCQkvKgorCQkJICogU2Vl IGlmIHdlIHNob3VsZCB3YWtlIHVwIGEgaGlnaGVyIG51bWJlcmVkIHBlZXIuICBPbmx5IGRvIHRo YXQKKwkJCSAqIGlmIHRoaXMgd29ya2VyIGlzIG5vdCByZWNlaXZpbmcgc3B1cmlvdXMgd2FrZXVw cyBpdHNlbGYuCisJCQkgKgorCQkJICogVGhpcyBoZXVyaXN0aWMgdHJpZXMgdG8gZGlzY292ZXIg dGhlIHVzZWZ1bCB3YWtldXAgcHJvcGFnYXRpb24KKwkJCSAqIGNoYWluIGxlbmd0aCB3aGVuIElP cyBhcmUgdmVyeSBmYXN0IGFuZCB3b3JrZXJzIHdha2UgdXAgdG8gZmluZAorCQkJICogdGhhdCBh bGwgSU9zIGhhdmUgYWxyZWFkeSBiZWVuIHRha2VuLgorCQkJICoKKwkJCSAqIElmIHdlIGNob3Nl IG5vdCB0byB3YWtlIGEgd29ya2VyIHdoZW4gd2UgaWRlYWxseSBzaG91bGQgaGF2ZSwKKwkJCSAq IHRoZSByYXRpbyB3aWxsIHNvb24gYmUgY29ycmVjdGVkLgorCQkJICovCisJCQlpZiAod2FrZXVw cyA8PSBpb3MpCiAJCQl7Ci0JCQkJaWYgKCh3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lk bGUoKSkgPCAwKQotCQkJCQlicmVhazsKLQkJCQlsYXRjaGVzW25sYXRjaGVzKytdID0gaW9fd29y a2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5sYXRjaDsKKwkJCQlxdWV1ZV9kZXB0aCA9IHBn YWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKCk7CisJCQkJaWYgKHF1ZXVlX2RlcHRo ID4gMCkKKwkJCQl7CisJCQkJCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZShNeUlv V29ya2VySWQgKyAxKTsKKworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGVyZSB3ZXJlIG5vIGlkbGUg aGlnaGVyIG51bWJlcmVkIHBlZXJzIGFuZCB0aGVyZQorCQkJCQkgKiBhcmUgbW9yZSB0aGFuIGVu b3VnaCBJT3MgcXVldWVkIGZvciBtZSBhbmQgYWxsIGxvd2VyCisJCQkJCSAqIG51bWJlcmVkIHBl ZXJzLCB0aGVuIHRyeSB0byBzdGFydCBhIG5ldyB3b3JrZXIuCisJCQkJCSAqLworCQkJCQlpZiAo d29ya2VyID09IC0xICYmIHF1ZXVlX2RlcHRoID4gTXlJb1dvcmtlcklkKQorCQkJCQkJZ3JvdyA9 IHRydWU7CisJCQkJfQogCQkJfQogCQl9CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlz c2lvblF1ZXVlTG9jayk7CiAKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBubGF0Y2hlczsgKytpKQot CQkJU2V0TGF0Y2gobGF0Y2hlc1tpXSk7CisJCS8qIFByb3BhZ2F0ZSB3YWtldXBzLiAqLworCQlp ZiAod29ya2VyICE9IC0xKQorCQkJcGdhaW9fd29ya2VyX3dha2Uod29ya2VyKTsKKwkJZWxzZSBp ZiAoZ3JvdykKKwkJCXBnYWlvX3dvcmtlcl9ncm93KHRydWUpOwogCiAJCWlmIChpb19pbmRleCAh PSAtMSkKIAkJewogCQkJUGdBaW9IYW5kbGUgKmlvaCA9IE5VTEw7CiAKKwkJCS8qIENhbmNlbCB0 aW1lb3V0IGFuZCB1cGRhdGUgd2FrZXVwOndvcmsgcmF0aW8uICovCisJCQlpZGxlX3RpbWVvdXRf YWJzID0gMDsKKwkJCWlmICgrK2lvcyA9PSBQR0FJT19XT1JLRVJfU1RBVFNfTUFYKQorCQkJewor CQkJCXdha2V1cHMgLz0gMjsKKwkJCQlpb3MgLz0gMjsKKwkJCX0KKwogCQkJaW9oID0gJnBnYWlv X2N0bC0+aW9faGFuZGxlc1tpb19pbmRleF07CiAJCQllcnJvcl9pb2ggPSBpb2g7CiAJCQllcnJj YWxsYmFjay5hcmcgPSBpb2g7CkBAIC01MzcsNiArNzg5LDE0IEBAIElvV29ya2VyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJfQogI2Vu ZGlmCiAKKyNpZmRlZiBQR0FJT19XT1JLRVJfU0hPV19QU19JTkZPCisJCQlzcHJpbnRmKGNtZCwg IiVkOiBbJXNdICVzIiwKKwkJCQkJTXlJb1dvcmtlcklkLAorCQkJCQlwZ2Fpb19pb19nZXRfb3Bf bmFtZShpb2gpLAorCQkJCQlwZ2Fpb19pb19nZXRfdGFyZ2V0X2Rlc2NyaXB0aW9uKGlvaCkpOwor CQkJc2V0X3BzX2Rpc3BsYXkoY21kKTsKKyNlbmRpZgorCiAJCQkvKgogCQkJICogV2UgZG9uJ3Qg ZXhwZWN0IHRoaXMgdG8gZXZlciBmYWlsIHdpdGggRVJST1Igb3IgRkFUQUwsIG5vIG5lZWQKIAkJ CSAqIHRvIGtlZXAgZXJyb3JfaW9oIHNldCB0byB0aGUgSU8uCkBAIC01NTAsOCArODEwLDc1IEBA IElvV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2Rh dGFfbGVuKQogCQl9CiAJCWVsc2UKIAkJewotCQkJV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENI X1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIC0xLAotCQkJCQkgIFdBSVRfRVZFTlRfSU9fV09S S0VSX01BSU4pOworCQkJaW50CQkJdGltZW91dF9tczsKKworCQkJLyogQ2FuY2VsIG5ldyB3b3Jr ZXIgcmVxdWVzdCBpZiBwZW5kaW5nLiAqLworCQkJcGdhaW9fd29ya2VyX2dyb3coZmFsc2UpOwor CisJCQkvKiBDb21wdXRlIHRoZSByZW1haW5pbmcgYWxsb3dlZCBpZGxlIHRpbWUuICovCisJCQlp ZiAoaW9fd29ya2VyX2lkbGVfdGltZW91dCA9PSAtMSkKKwkJCXsKKwkJCQkvKiBOZXZlciB0aW1l IG91dC4gKi8KKwkJCQl0aW1lb3V0X21zID0gLTE7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ VGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJCQkJLyogSWYgdGhl IEdVQyBjaGFuZ2VzLCByZXNldCB0aW1lci4gKi8KKwkJCQlpZiAoaWRsZV90aW1lb3V0X2FicyAh PSAwICYmCisJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgIT0gdGltZW91dF9ndWNfdXNlZCkK KwkJCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisKKwkJCQkvKiBPbiBmaXJzdCBzbGVlcCwgY29t cHV0ZSBhYnNvbHV0ZSB0aW1lb3V0LiAqLworCQkJCWlmIChpZGxlX3RpbWVvdXRfYWJzID09IDAp CisJCQkJeworCQkJCQlpZGxlX3RpbWVvdXRfYWJzID0KKwkJCQkJCVRpbWVzdGFtcFR6UGx1c01p bGxpc2Vjb25kcyhub3csCisJCQkJCQkJCQkJCQkJaW9fd29ya2VyX2lkbGVfdGltZW91dCk7CisJ CQkJCXRpbWVvdXRfZ3VjX3VzZWQgPSBpb193b3JrZXJfaWRsZV90aW1lb3V0OworCQkJCX0KKwor CQkJCS8qCisJCQkJICogQWxsIHdvcmtlcnMgbWFpbnRhaW4gdGhlIGFic29sdXRlIHRpbWVvdXQg dmFsdWUsIGJ1dCBvbmx5CisJCQkJICogdGhlIGhpZ2hlc3Qgd29ya2VyIGNhbiBhY3R1YWxseSB0 aW1lIG91dCBhbmQgb25seSBpZgorCQkJCSAqIGlvX21pbl93b3JrZXJzIGlzIHNhdGlzZmllZC4g IEFsbCBvdGhlcnMgd2FpdCBvbmx5IGZvcgorCQkJCSAqIGV4cGxpY2l0IHdha2V1cHMgY2F1c2Vk IGJ5IHF1ZXVlIGluc2VydGlvbiwgd2FrZXVwCisJCQkJICogcHJvcGFnYXRpb24sIGNoYW5nZSBv ZiBwb29sIHNpemUgKHBvc3NpYmx5IHByb21vdGluZyBvbmUgdG8KKwkJCQkgKiBuZXcgaGlnaGVz dCkgb3IgR1VDIHJlbG9hZC4KKwkJCQkgKi8KKwkJCQlpZiAocGdhaW9fd29ya2VyX2Nhbl90aW1l b3V0KCkpCisJCQkJCXRpbWVvdXRfbXMgPQorCQkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxp c2Vjb25kcyhub3csCisJCQkJCQkJCQkJCQkJCWlkbGVfdGltZW91dF9hYnMpOworCQkJCWVsc2UK KwkJCQkJdGltZW91dF9tcyA9IC0xOworCQkJfQorCisjaWZkZWYgUEdBSU9fV09SS0VSX1NIT1df UFNfSU5GTworCQkJc3ByaW50ZihjbWQsICIlZDogaWRsZSwgd2FrZXVwczppb3MgPSAlZDolZCIs CisJCQkJCU15SW9Xb3JrZXJJZCwgd2FrZXVwcywgaW9zKTsKKwkJCXNldF9wc19kaXNwbGF5KGNt ZCk7CisjZW5kaWYKKworCQkJaWYgKFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBX TF9FWElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwKKwkJCQkJCSAgdGltZW91dF9tcywKKwkJ CQkJCSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTikgPT0gV0xfVElNRU9VVCkKKwkJCXsKKwkJ CQkvKiBXTF9USU1FT1VUICovCisJCQkJaWYgKHBnYWlvX3dvcmtlcl9jYW5fdGltZW91dCgpKQor CQkJCQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49IGlkbGVfdGltZW91dF9hYnMpCisJCQkJ CQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBXTF9MQVRDSF9TRVQgKi8KKwkJ CQlpZiAoKyt3YWtldXBzID09IFBHQUlPX1dPUktFUl9TVEFUU19NQVgpCisJCQkJeworCQkJCQl3 YWtldXBzIC89IDI7CisJCQkJCWlvcyAvPSAyOworCQkJCX0KKwkJCX0KIAkJCVJlc2V0TGF0Y2go TXlMYXRjaCk7CiAJCX0KIApAQCAtNTYxLDYgKzg4OCwxMCBAQCBJb1dvcmtlck1haW4oY29uc3Qg dm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJewogCQkJQ29u ZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hV UCk7CisKKwkJCS8qIElmIGlvX21heF93b3JrZXJzIGhhcyBiZWVuIGRlY3JlYXNlZCwgZXhpdCBo aWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15SW9Xb3JrZXJJZCA+PSBpb19tYXhfd29ya2VycykK KwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCAwYTZkMTZmODE1NC4uNGY5ZTg4ZjE0MDIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0Cisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0z NjgsNiArMzY4LDcgQEAgQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCSJXYWl0aW5nIHRvIGFjY2Vz cyBBSU8gd29ya2VyIHN1Ym1pc3Npb24gcXVldWUuIgogV2FpdExTTgkiV2FpdGluZyB0byByZWFk IG9yIHVwZGF0ZSBzaGFyZWQgV2FpdC1mb3ItTFNOIHN0YXRlLiIKIExvZ2ljYWxEZWNvZGluZ0Nv bnRyb2wJIldhaXRpbmcgdG8gcmVhZCBvciB1cGRhdGUgbG9naWNhbCBkZWNvZGluZyBzdGF0dXMg aW5mb3JtYXRpb24uIgogRGF0YUNoZWNrc3Vtc1dvcmtlcgkiV2FpdGluZyBmb3IgZGF0YSBjaGVj a3N1bXMgd29ya2VyLiIKK0Fpb1dvcmtlckNvbnRyb2wJIldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3 b3JrZXIgaW5mb3JtYXRpb24uIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERP IE5PVCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdAppbmRleCA3YThhNWQwNzY0Yy4uNGIyNzg1NmVhNDQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xMzgyLDYgKzEzODIsMTQgQEAKICAgY2hl Y2tfaG9vayA9PiAnY2hlY2tfaW9fbWF4X2NvbmN1cnJlbmN5JywKIH0sCiAKK3sgbmFtZSA9PiAn aW9fbWF4X3dvcmtlcnMnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywg Z3JvdXAgPT4gJ1JFU09VUkNFU19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01heGltdW0gbnVtYmVy IG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzLCBmb3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJp YWJsZSA9PiAnaW9fbWF4X3dvcmtlcnMnLAorICBib290X3ZhbCA9PiAnOCcsCisgIG1pbiA9PiAn MScsCisgIG1heCA9PiAnTUFYX0lPX1dPUktFUlMnLAorfSwKKwogeyBuYW1lID0+ICdpb19tZXRo b2QnLCB0eXBlID0+ICdlbnVtJywgY29udGV4dCA9PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9 PiAnUkVTT1VSQ0VTX0lPJywKICAgc2hvcnRfZGVzYyA9PiAnU2VsZWN0cyB0aGUgbWV0aG9kIGZv ciBleGVjdXRpbmcgYXN5bmNocm9ub3VzIEkvTy4nLAogICB2YXJpYWJsZSA9PiAnaW9fbWV0aG9k JywKQEAgLTEzOTAsMTQgKzEzOTgsMzIgQEAKICAgYXNzaWduX2hvb2sgPT4gJ2Fzc2lnbl9pb19t ZXRob2QnLAogfSwKIAoteyBuYW1lID0+ICdpb193b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29u dGV4dCA9PiAnUEdDX1NJR0hVUCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAotICBzaG9ydF9k ZXNjID0+ICdOdW1iZXIgb2YgSU8gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3Jr ZXIuJywKLSAgdmFyaWFibGUgPT4gJ2lvX3dvcmtlcnMnLAotICBib290X3ZhbCA9PiAnMycsCit7 IG5hbWUgPT4gJ2lvX21pbl93b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdD X1NJR0hVUCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAorICBzaG9ydF9kZXNjID0+ICdNaW5p bXVtIG51bWJlciBvZiBJL08gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIu JywKKyAgdmFyaWFibGUgPT4gJ2lvX21pbl93b3JrZXJzJywKKyAgYm9vdF92YWwgPT4gJzEnLAog ICBtaW4gPT4gJzEnLAogICBtYXggPT4gJ01BWF9JT19XT1JLRVJTJywKIH0sCiAKK3sgbmFtZSA9 PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BH Q19TSUdIVVAnLCBncm91cCA9PiAnUkVTT1VSQ0VTX0lPJywKKyAgc2hvcnRfZGVzYyA9PiAnTWF4 aW11bSB0aW1lIGJlZm9yZSBpZGxlIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRpbWUgb3V0LCBmb3Ig aW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91 dCcsCisgIGZsYWdzID0+ICdHVUNfVU5JVF9NUycsCisgIGJvb3RfdmFsID0+ICc2MDAwMCcsCisg IG1pbiA9PiAnMCcsCisgIG1heCA9PiAnSU5UX01BWCcsCit9LAorCit7IG5hbWUgPT4gJ2lvX3dv cmtlcl9sYXVuY2hfaW50ZXJ2YWwnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lH SFVQJywgZ3JvdXAgPT4gJ1JFU09VUkNFU19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01pbmltdW0g dGltZSBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3IEkvTyB3b3JrZXIgcHJvY2VzcywgZm9yIGlvX21l dGhvZD13b3JrZXIuJywKKyAgdmFyaWFibGUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwn LAorICBmbGFncyA9PiAnR1VDX1VOSVRfTVMnLAorICBib290X3ZhbCA9PiAnMTAwJywKKyAgbWlu ID0+ICcwJywKKyAgbWF4ID0+ICdJTlRfTUFYJywKK30sCisKICMgTm90IGZvciBnZW5lcmFsIHVz ZSAtLS0gdXNlZCBieSBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIGFuZCBTRVQKICMgUk9MRQog eyBuYW1lID0+ICdpc19zdXBlcnVzZXInLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdD X0lOVEVSTkFMJywgZ3JvdXAgPT4gJ1VOR1JPVVBFRCcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggMTBhMjgxZGZkNGIuLjRkNjMyMTAyOWIz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1w bGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBA IC0yMTgsNyArMjE4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBjYW4gZXhlY3V0ZSBzaW11bHRhbmVvdXNseQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgLTEgc2V0cyBiYXNlZCBvbiBzaGFyZWRfYnVmZmVycwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0 YXJ0KQotI2lvX3dvcmtlcnMgPSAzICAgICAgICAgICAgICAgICAgICAgICAgICMgMS0zMjsKKwor I2lvX21pbl93b3JrZXJzID0gMSAgICAgICAgICAgICAgICAgICAgICMgMS0zMiAoY2hhbmdlIHJl cXVpcmVzIHBnX3JlbG9hZF9jb25mKCkpCisjaW9fbWF4X3dvcmtlcnMgPSA4ICAgICAgICAgICAg ICAgICAgICAgIyAxLTMyCisjaW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwcworI2lvX3dvcmtl cl9sYXVuY2hfaW50ZXJ2YWwgPSAxMDBtcwogCiAjIC0gV29ya2VyIFByb2Nlc3NlcyAtCiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29ya2VyLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2lvX3dvcmtlci5oCmluZGV4IGY3ZDU5OThhMTM4Li43OGY0OWQ2Y2NmMCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2lvX3dvcmtlci5oCkBAIC0xNyw2ICsxNywxNCBAQAogCiBwZ19ub3JldHVybiBleHRl cm4gdm9pZCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbik7CiAKLWV4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fd29ya2VyczsKKy8q IFB1YmxpYyBHVUNzLiAqLworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpb19taW5fd29ya2VyczsK K2V4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fbWF4X3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBP UlQgaW50IGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlv X3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw7CisKKy8qIEludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUg cG9zdG1hc3Rlci4gKi8KK2V4dGVybiBib29sIHBnYWlvX3dvcmtlcl90ZXN0X2dyb3codm9pZCk7 CitleHRlcm4gdm9pZCBwZ2Fpb193b3JrZXJfY2xlYXJfZ3Jvdyh2b2lkKTsKIAogI2VuZGlmCQkJ CQkJCS8qIElPX1dPUktFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3 bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IGFmODU1 M2JjYjZjLi5kN2ViNjQ4YmQyNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTg4LDYg Kzg4LDcgQEAgUEdfTFdMT0NLKDUzLCBBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUpCiBQR19MV0xP Q0soNTQsIFdhaXRMU04pCiBQR19MV0xPQ0soNTUsIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wpCiBQ R19MV0xPQ0soNTYsIERhdGFDaGVja3N1bXNXb3JrZXIpCitQR19MV0xPQ0soNTcsIEFpb1dvcmtl ckNvbnRyb2wpCiAKIC8qCiAgKiBUaGVyZSBhbHNvIGV4aXN0IHNldmVyYWwgYnVpbHQtaW4gTFdM b2NrIHRyYW5jaGVzLiAgQXMgd2l0aCB0aGUgcHJlZGVmaW5lZApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5o CmluZGV4IDAwMWU2ZWVhNjFjLi5iY2NlNDAxMTc5MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wbXNpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaApA QCAtMzgsNiArMzgsNyBAQCB0eXBlZGVmIGVudW0KIAlQTVNJR05BTF9ST1RBVEVfTE9HRklMRSwJ Lyogc2VuZCBTSUdVU1IxIHRvIHN5c2xvZ2dlciB0byByb3RhdGUgbG9nZmlsZSAqLwogCVBNU0lH TkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIsCS8qIHN0YXJ0IGFuIGF1dG92YWN1dW0gbGF1bmNo ZXIgKi8KIAlQTVNJR05BTF9TVEFSVF9BVVRPVkFDX1dPUktFUiwJLyogc3RhcnQgYW4gYXV0b3Zh Y3V1bSB3b3JrZXIgKi8KKwlQTVNJR05BTF9JT19XT1JLRVJfR1JPVywJLyogSS9PIHdvcmtlciBw b29sIHdhbnRzIHRvIGdyb3cgKi8KIAlQTVNJR05BTF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0Us CS8qIGJhY2tncm91bmQgd29ya2VyIHN0YXRlIGNoYW5nZSAqLwogCVBNU0lHTkFMX1NUQVJUX1dB TFJFQ0VJVkVSLCAvKiBzdGFydCBhIHdhbHJlY2VpdmVyICovCiAJUE1TSUdOQUxfQURWQU5DRV9T VEFURV9NQUNISU5FLCAvKiBhZHZhbmNlIHBvc3RtYXN0ZXIncyBzdGF0ZSBtYWNoaW5lICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwKaW5kZXggMzRi YzEzMmVhMDguLmI5Nzc1ODExZDRkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL3QvMDAyX2lvX3dvcmtlcnMucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90 LzAwMl9pb193b3JrZXJzLnBsCkBAIC0xNCw2ICsxNCw5IEBAICRub2RlLT5pbml0KCk7CiAkbm9k ZS0+YXBwZW5kX2NvbmYoCiAJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAogaW9fbWV0aG9kPXdvcmtl cgoraW9fd29ya2VyX2lkbGVfdGltZW91dD0wbXMKK2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw9 MG1zCitpb19tYXhfd29ya2Vycz0zMgogKSk7CiAKICRub2RlLT5zdGFydCgpOwpAQCAtMzEsNyAr MzQsNyBAQCBzdWIgdGVzdF9udW1iZXJfb2ZfaW9fd29ya2Vyc19keW5hbWljCiB7CiAJbXkgJG5v ZGUgPSBzaGlmdDsKIAotCW15ICRwcmV2X3dvcmtlcl9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NIT1cgaW9fd29ya2VycycpOworCW15ICRwcmV2X3dvcmtlcl9jb3VudCA9 ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fbWluX3dvcmtlcnMnKTsKIAog CSMgVmVyaWZ5IHRoYXQgd29ya2VyIGNvdW50IGNhbid0IGJlIHNldCB0byAwCiAJY2hhbmdlX251 bWJlcl9vZl9pb193b3JrZXJzKCRub2RlLCAwLCAkcHJldl93b3JrZXJfY291bnQsIDEpOwpAQCAt NjIsMjQgKzY1LDI0IEBAIHN1YiBjaGFuZ2VfbnVtYmVyX29mX2lvX3dvcmtlcnMKIAlteSAoJHJl c3VsdCwgJHN0ZG91dCwgJHN0ZGVycik7CiAKIAkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikg PQotCSAgJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFNZU1RFTSBTRVQgaW9fd29ya2Vy cyA9ICR3b3JrZXJfY291bnQiKTsKKwkgICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBT WVNURU0gU0VUIGlvX21pbl93b3JrZXJzID0gJHdvcmtlcl9jb3VudCIpOwogCSRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19yZWxvYWRfY29uZigpJyk7CiAKIAlpZiAoJGV4 cGVjdF9mYWlsdXJlKQogCXsKIAkJbGlrZSgKIAkJCSRzdGRlcnIsCi0JCQlxci8kd29ya2VyX2Nv dW50IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIGZvciBwYXJhbWV0ZXIgImlvX3dvcmtlcnMi LywKLQkJCSJ1cGRhdGluZyBudW1iZXIgb2YgaW9fd29ya2VycyB0byAkd29ya2VyX2NvdW50IGZh aWxlZCwgYXMgZXhwZWN0ZWQiCisJCQlxci8kd29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhlIHZh bGlkIHJhbmdlIGZvciBwYXJhbWV0ZXIgImlvX21pbl93b3JrZXJzIi8sCisJCQkidXBkYXRpbmcg aW9fbWluX3dvcmtlcnMgdG8gJHdvcmtlcl9jb3VudCBmYWlsZWQsIGFzIGV4cGVjdGVkIgogCQkp OwogCiAJCXJldHVybiAkcHJldl93b3JrZXJfY291bnQ7CiAJfQogCWVsc2UKIAl7Ci0JCWlzKCAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX3dvcmtlcnMnKSwKKwkJaXMoICRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fbWluX3dvcmtlcnMnKSwKIAkJCSR3 b3JrZXJfY291bnQsCi0JCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX3dvcmtlcnMgZnJvbSAkcHJl dl93b3JrZXJfY291bnQgdG8gJHdvcmtlcl9jb3VudCIKKwkJCSJ1cGRhdGluZyBudW1iZXIgb2Yg aW9fbWluX3dvcmtlcnMgZnJvbSAkcHJldl93b3JrZXJfY291bnQgdG8gJHdvcmtlcl9jb3VudCIK IAkJKTsKIAogCQljaGVja19pb193b3JrZXJfY291bnQoJG5vZGUsICR3b3JrZXJfY291bnQpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlOTQzMGUwN2IzNi4uYTA5NTU0MjBkMzUgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMjY1LDYgKzIyNjUsNyBAQCBQZ0Fpb1VyaW5n Q2FwcwogUGdBaW9VcmluZ0NvbnRleHQKIFBnQWlvV2FpdFJlZgogUGdBaW9Xb3JrZXJDb250cm9s CitQZ0Fpb1dvcmtlclNldAogUGdBaW9Xb3JrZXJTbG90CiBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25R dWV1ZQogUGdBcmNoRGF0YQotLSAKMi40Ny4zCgo= --000000000000c6123b064ecbdd4a--