Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nOcia-0002Xe-2C for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Feb 2022 09:53:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nOciY-0008A8-Vk for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Feb 2022 09:53:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nOciY-00089x-9i for pgsql-hackers@lists.postgresql.org; Mon, 28 Feb 2022 09:53:22 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nOciV-0001E0-Sz for pgsql-hackers@lists.postgresql.org; Mon, 28 Feb 2022 09:53:21 +0000 Received: by mail-ej1-x629.google.com with SMTP id vz16so23675131ejb.0 for ; Mon, 28 Feb 2022 01:53:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zd/WtBKI09fsGwmvxnQ2wCue9o9RPsu26EoH8LzpeUc=; b=NQU84OsK9/pivF80Jr7cs5NjEaE8rczosIfZkR70UPKlYRI8ZE6j0FmPv4YuL34tWs azYauzr4prSfnVRqTknypWFnrf3Jcw6EWu4HVRP4jGmduJweQ0L8reqG+3xFOgspUK2N coCoyTTetse+9EA1T3ENmUg+IAkU8rNYeF6DMKHGAJ8lHnsenCvhJs0VEGy8PHvRbQiG /YguLbwHn0SgbZXQnTGANayicWvPv3jvgsknq0TYPQcDz2CqiGkBli8OrBrGZlc5I0tm GdcvyxmI9IZNQdhAgULekeiirKskuUFnBQmRV4abx0AzBAlwO3pME/lhNsTTFLu526fx rVnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zd/WtBKI09fsGwmvxnQ2wCue9o9RPsu26EoH8LzpeUc=; b=xJi9S53lCacdCi0tbHf3E50XdQkqo59EY3gIzSLTzUk61j16gzyg0EPfLJXM8//Qxb wKeJB5Jzu7A957Xr3n1hF8qZnCmY03elIMsyF7umw77TUeCxdE/Ay9OGuONbJOE2UcHm uejdxvEKmd939+Seomo22DY9ef8AFBJZxS5WMcEBJpM5csRpWkABrk7jDGXawOCb+Pyp 2RiWLt7doG0F8+v89BNNBxkLq+mSfjjPzEUeqpMEPJhTjRJxnyYKqzDqHfND7ck1kXvd di6Rlp3efkfWULoQcWATbS4hObOXc64uF6a/nSmc238ayWWeqbZoQdzhYq6BGa+efWEM C2jA== X-Gm-Message-State: AOAM532ucwpxx58qg5kQNKEVYbuvN5KS5IK8Nv29MLNT9vmGyQ3PDy78 7GWDM0N/JdpFY4pEwWx8Zlfje4mskY5qkRz+URhDsE0Id7pflw== X-Google-Smtp-Source: ABdhPJw12LWlRR7eTg/VEOEIOsdw0bs9L2YW8LejnuFnMqUGI3w4tLJ/bpeSHEPjOOpQLId5XWfewqjfFd2igQ86E0A= X-Received: by 2002:a17:906:b04:b0:6bd:bf71:ed08 with SMTP id u4-20020a1709060b0400b006bdbf71ed08mr14639235ejg.585.1646041998359; Mon, 28 Feb 2022 01:53:18 -0800 (PST) MIME-Version: 1.0 References: <65af8fb4-4c45-9cc3-c6ec-80f3ac488e07@oss.nttdata.com> <95066202-c7e6-e4be-05cc-bdceb45b68c7@oss.nttdata.com> <2d7c480a-63c8-a244-0f2a-361e5097764f@oss.nttdata.com> <3e57ebd7-b536-333e-c877-49a3ebb57079@oss.nttdata.com> <2a2519b5-0c1f-87c8-5461-a4d8be0728e0@oss.nttdata.com> <883589bb-077f-7d66-2406-5f67be0372a6@oss.nttdata.com> In-Reply-To: From: Etsuro Fujita Date: Mon, 28 Feb 2022 18:53:38 +0900 Message-ID: Subject: Re: postgres_fdw: commit remote (sub)transactions in parallel during pre-commit To: Fujii Masao Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000009923bd05d9110452" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009923bd05d9110452 Content-Type: text/plain; charset="UTF-8" On Thu, Feb 24, 2022 at 2:49 PM Etsuro Fujita wrote: > I think the 0003 patch needs rebase. > I'll update the patch. Here is an updated version. I added to the 0003 patch a macro for defining the milliseconds to wait, as proposed by David upthread. Best regards, Etsuro Fujita --0000000000009923bd05d9110452 Content-Type: application/octet-stream; name="v5-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Disposition: attachment; filename="v5-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l06itntq0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCA4YzY0ZDQyZGRhLi5mZGY0Y2I5MGJlIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgdW5z aWduZWQgaW50IHByZXBfc3RtdF9udW1iZXIgPSAwOwogLyogdHJhY2tzIHdoZXRoZXIgYW55IHdv cmsgaXMgbmVlZGVkIGluIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogc3RhdGljIGJvb2wgeGFjdF9n b3RfY29ubmVjdGlvbiA9IGZhbHNlOwogCisvKiBtYWNybyBmb3IgY29uc3RydWN0aW5nIGFib3J0 IGNvbW1hbmQgdG8gYmUgc2VudCAqLworI2RlZmluZSBDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChz cWwsIGVudHJ5LCB0b3BsZXZlbCkgXAorCWRvIHsgXAorCQlpZiAodG9wbGV2ZWwpIFwKKwkJCXNu cHJpbnRmKChzcWwpLCBzaXplb2Yoc3FsKSwgXAorCQkJCQkgIkFCT1JUIFRSQU5TQUNUSU9OIik7 IFwKKwkJZWxzZSBcCisJCQlzbnByaW50Zigoc3FsKSwgc2l6ZW9mKHNxbCksIFwKKwkJCQkJICJS T0xMQkFDSyBUTyBTQVZFUE9JTlQgcyVkOyBSRUxFQVNFIFNBVkVQT0lOVCBzJWQiLCBcCisJCQkJ CSAoZW50cnkpLT54YWN0X2RlcHRoLCAoZW50cnkpLT54YWN0X2RlcHRoKTsgXAorCX0gd2hpbGUo MCkKKwogLyoKICAqIFNRTCBmdW5jdGlvbnMKICAqLwpAQCAtMTEwLDggKzEyMiw3IEBAIHN0YXRp YyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnF1ZXJ5LAogCQkJCQkJCQkJIGJvb2wgaWdub3JlX2Vycm9ycyk7CiBzdGF0aWMgYm9vbCBwZ2Zk d19nZXRfY2xlYW51cF9yZXN1bHQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1lLAog CQkJCQkJCQkJIFBHcmVzdWx0ICoqcmVzdWx0LCBib29sICp0aW1lZF9vdXQpOwotc3RhdGljIHZv aWQgcGdmZHdfYWJvcnRfY2xlYW51cChDb25uQ2FjaGVFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIg KnNxbCwKLQkJCQkJCQkJYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgdm9pZCBwZ2Zkd19hYm9ydF9j bGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCk7CiBzdGF0aWMgdm9p ZCBwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKExpc3QgKnBlbmRpbmdfZW50cmllcyk7 CiBzdGF0aWMgdm9pZCBwZ2Zkd19maW5pc2hfcHJlX3N1YmNvbW1pdF9jbGVhbnVwKExpc3QgKnBl bmRpbmdfZW50cmllcywKIAkJCQkJCQkJCQkJICAgaW50IGN1cmxldmVsKTsKQEAgLTEwMTUsOCAr MTAyNiw4IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcp CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgWEFDVF9FVkVOVF9QQVJBTExFTF9BQk9SVDoKIAkJCQlj YXNlIFhBQ1RfRVZFTlRfQUJPUlQ6Ci0KLQkJCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwg IkFCT1JUIFRSQU5TQUNUSU9OIiwgdHJ1ZSk7CisJCQkJCS8qIFJvbGxiYWNrIGFsbCByZW1vdGUg dHJhbnNhY3Rpb25zIGR1cmluZyBhYm9ydCAqLworCQkJCQlwZ2Zkd19hYm9ydF9jbGVhbnVwKGVu dHJ5LCB0cnVlKTsKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTExMDksMTAgKzExMjAsNyBA QCBwZ2Zkd19zdWJ4YWN0X2NhbGxiYWNrKFN1YlhhY3RFdmVudCBldmVudCwgU3ViVHJhbnNhY3Rp b25JZCBteVN1YmlkLAogCQllbHNlCiAJCXsKIAkJCS8qIFJvbGxiYWNrIGFsbCByZW1vdGUgc3Vi dHJhbnNhY3Rpb25zIGR1cmluZyBhYm9ydCAqLwotCQkJc25wcmludGYoc3FsLCBzaXplb2Yoc3Fs KSwKLQkJCQkJICJST0xMQkFDSyBUTyBTQVZFUE9JTlQgcyVkOyBSRUxFQVNFIFNBVkVQT0lOVCBz JWQiLAotCQkJCQkgY3VybGV2ZWwsIGN1cmxldmVsKTsKLQkJCXBnZmR3X2Fib3J0X2NsZWFudXAo ZW50cnksIHNxbCwgZmFsc2UpOworCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgZmFsc2Up OwogCQl9CiAKIAkJLyogT0ssIHdlJ3JlIG91dHRhIHRoYXQgbGV2ZWwgb2Ygc3VidHJhbnNhY3Rp b24gKi8KQEAgLTE0NjUsMTAgKzE0NzMsNyBAQCBleGl0Ogk7CiB9CiAKIC8qCi0gKiBBYm9ydCBy ZW1vdGUgdHJhbnNhY3Rpb24uCi0gKgotICogVGhlIHN0YXRlbWVudCBzcGVjaWZpZWQgaW4gInNx bCIgaXMgc2VudCB0byB0aGUgcmVtb3RlIHNlcnZlciwKLSAqIGluIG9yZGVyIHRvIHJvbGxiYWNr IHRoZSByZW1vdGUgdHJhbnNhY3Rpb24uCisgKiBBYm9ydCByZW1vdGUgdHJhbnNhY3Rpb24gb3Ig c3VidHJhbnNhY3Rpb24uCiAgKgogICogInRvcGxldmVsIiBzaG91bGQgYmUgc2V0IHRvIHRydWUg aWYgdG9wbGV2ZWwgKG1haW4pIHRyYW5zYWN0aW9uIGlzCiAgKiByb2xsYmFja2VkLCBmYWxzZSBv dGhlcndpc2UuCkBAIC0xNDc2LDggKzE0ODEsMTAgQEAgZXhpdDoJOwogICogU2V0IGVudHJ5LT5j aGFuZ2luZ194YWN0X3N0YXRlIHRvIGZhbHNlIG9uIHN1Y2Nlc3MsIHRydWUgb24gZmFpbHVyZS4K ICAqLwogc3RhdGljIHZvaWQKLXBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVu dHJ5LCBjb25zdCBjaGFyICpzcWwsIGJvb2wgdG9wbGV2ZWwpCitwZ2Zkd19hYm9ydF9jbGVhbnVw KENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCkKIHsKKwljaGFyCQlzcWxbMTAw XTsKKwogCS8qCiAJICogRG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHRoZSBjb25uZWN0aW9uIGlmIHdl J3JlIGFscmVhZHkgaW4gZXJyb3IKIAkgKiByZWN1cnNpb24gdHJvdWJsZS4KQEAgLTE1MDksOCAr MTUxNiw5IEBAIHBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBjb25z dCBjaGFyICpzcWwsIGJvb2wgdG9wbGV2ZWwpCiAJCSFwZ2Zkd19jYW5jZWxfcXVlcnkoZW50cnkt PmNvbm4pKQogCQlyZXR1cm47CQkJCQkvKiBVbmFibGUgdG8gY2FuY2VsIHJ1bm5pbmcgcXVlcnkg Ki8KIAorCUNPTlNUUlVDVF9BQk9SVF9DT01NQU5EKHNxbCwgZW50cnksIHRvcGxldmVsKTsKIAlp ZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShlbnRyeS0+Y29ubiwgc3FsLCBmYWxzZSkpCi0J CXJldHVybjsJCQkJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUgdHJhbnNhY3Rpb24gKi8KKwkJ cmV0dXJuOwkJCQkJLyogVW5hYmxlIHRvIGFib3J0IHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9uICov CiAKIAlpZiAodG9wbGV2ZWwpCiAJewo= --0000000000009923bd05d9110452 Content-Type: application/octet-stream; name="v5-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Disposition: attachment; filename="v5-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l06iv1h21 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCBmZGY0Y2I5MGJlLi44OTgwMmNmNWQwIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC01OSw2ICs1OSw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbm5DYWNoZUVudHJ5CiAJYm9vbAkJaGF2ZV9lcnJvcjsJCS8qIGhhdmUgYW55IHN1Ynhh Y3RzIGFib3J0ZWQgaW4gdGhpcyB4YWN0PyAqLwogCWJvb2wJCWNoYW5naW5nX3hhY3Rfc3RhdGU7 CS8qIHhhY3Qgc3RhdGUgY2hhbmdlIGluIHByb2Nlc3MgKi8KIAlib29sCQlwYXJhbGxlbF9jb21t aXQ7CS8qIGRvIHdlIGNvbW1pdCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLworCWJvb2wJCXBh cmFsbGVsX2Fib3J0OwkvKiBkbyB3ZSBhYm9ydCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLwog CWJvb2wJCWludmFsaWRhdGVkOwkvKiB0cnVlIGlmIHJlY29ubmVjdCBpcyBwZW5kaW5nICovCiAJ Ym9vbAkJa2VlcF9jb25uZWN0aW9uczsJLyogc2V0dGluZyB2YWx1ZSBvZiBrZWVwX2Nvbm5lY3Rp b25zCiAJCQkJCQkJCQkgKiBzZXJ2ZXIgb3B0aW9uICovCkBAIC04MCw2ICs4MSw5IEBAIHN0YXRp YyB1bnNpZ25lZCBpbnQgcHJlcF9zdG10X251bWJlciA9IDA7CiAvKiB0cmFja3Mgd2hldGhlciBh bnkgd29yayBpcyBuZWVkZWQgaW4gY2FsbGJhY2sgZnVuY3Rpb25zICovCiBzdGF0aWMgYm9vbCB4 YWN0X2dvdF9jb25uZWN0aW9uID0gZmFsc2U7CiAKKy8qIE1pbGxpc2Vjb25kcyB0byB3YWl0IHRv IGNhbmNlbCBhIHF1ZXJ5IG9yIGV4ZWN1dGUgYSBjbGVhbnVwIHF1ZXJ5ICovCisjZGVmaW5lIENP Tk5FQ1RJT05fQ0xFQU5VUF9USU1FT1VUCTMwMDAwCisKIC8qIG1hY3JvIGZvciBjb25zdHJ1Y3Rp bmcgYWJvcnQgY29tbWFuZCB0byBiZSBzZW50ICovCiAjZGVmaW5lIENPTlNUUlVDVF9BQk9SVF9D T01NQU5EKHNxbCwgZW50cnksIHRvcGxldmVsKSBcCiAJZG8geyBcCkBAIC0xMTgsMTQgKzEyMiwy NiBAQCBzdGF0aWMgdm9pZCBwZ2Zkd19pbnZhbF9jYWxsYmFjayhEYXR1bSBhcmcsIGludCBjYWNo ZWlkLCB1aW50MzIgaGFzaHZhbHVlKTsKIHN0YXRpYyB2b2lkIHBnZmR3X3JlamVjdF9pbmNvbXBs ZXRlX3hhY3Rfc3RhdGVfY2hhbmdlKENvbm5DYWNoZUVudHJ5ICplbnRyeSk7CiBzdGF0aWMgdm9p ZCBwZ2Zkd19yZXNldF94YWN0X3N0YXRlKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3Bs ZXZlbCk7CiBzdGF0aWMgYm9vbCBwZ2Zkd19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25uKTsKK3N0 YXRpYyBib29sIHBnZmR3X2NhbmNlbF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNvbm4pOworc3RhdGlj IGJvb2wgcGdmZHdfY2FuY2VsX3F1ZXJ5X2VuZChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVu ZHRpbWUpOwogc3RhdGljIGJvb2wgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3JzKTsKK3N0 YXRpYyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnF1ZXJ5KTsKK3N0YXRpYyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9l bmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwKKwkJCQkJCQkJCQkgYm9vbCBpZ25v cmVfZXJyb3JzLAorCQkJCQkJCQkJCSBUaW1lc3RhbXBUeiBlbmR0aW1lKTsKIHN0YXRpYyBib29s IHBnZmR3X2dldF9jbGVhbnVwX3Jlc3VsdChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRp bWUsCiAJCQkJCQkJCQkgUEdyZXN1bHQgKipyZXN1bHQsIGJvb2wgKnRpbWVkX291dCk7CiBzdGF0 aWMgdm9pZCBwZ2Zkd19hYm9ydF9jbGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0 b3BsZXZlbCk7CitzdGF0aWMgYm9vbCBwZ2Zkd19hYm9ydF9jbGVhbnVwX2JlZ2luKENvbm5DYWNo ZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCwKKwkJCQkJCQkJCSAgTGlzdCAqKnBlbmRpbmdf ZW50cmllcywKKwkJCQkJCQkJCSAgTGlzdCAqKmNhbmNlbF9yZXF1ZXN0ZWQpOwogc3RhdGljIHZv aWQgcGdmZHdfZmluaXNoX3ByZV9jb21taXRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMp Owogc3RhdGljIHZvaWQgcGdmZHdfZmluaXNoX3ByZV9zdWJjb21taXRfY2xlYW51cChMaXN0ICpw ZW5kaW5nX2VudHJpZXMsCiAJCQkJCQkJCQkJCSAgIGludCBjdXJsZXZlbCk7CitzdGF0aWMgdm9p ZCBwZ2Zkd19maW5pc2hfYWJvcnRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMsCisJCQkJ CQkJCQkgICBMaXN0ICpjYW5jZWxfcmVxdWVzdGVkLAorCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZl bCk7CiBzdGF0aWMgYm9vbCBVc2VyTWFwcGluZ1Bhc3N3b3JkUmVxdWlyZWQoVXNlck1hcHBpbmcg KnVzZXIpOwogc3RhdGljIGJvb2wgZGlzY29ubmVjdF9jYWNoZWRfY29ubmVjdGlvbnMoT2lkIHNl cnZlcmlkKTsKIApAQCAtMzM2LDExICszNTIsMTIgQEAgbWFrZV9uZXdfY29ubmVjdGlvbihDb25u Q2FjaGVFbnRyeSAqZW50cnksIFVzZXJNYXBwaW5nICp1c2VyKQogCSAqCiAJICogQnkgZGVmYXVs dCwgYWxsIHRoZSBjb25uZWN0aW9ucyB0byBhbnkgZm9yZWlnbiBzZXJ2ZXJzIGFyZSBrZXB0IG9w ZW4uCiAJICoKLQkgKiBBbHNvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvbW1pdCAoc3ViKXRyYW5z YWN0aW9ucyBvcGVuZWQgb24gdGhlIHJlbW90ZQotCSAqIHNlcnZlciBpbiBwYXJhbGxlbCBhdCAo c3ViKXRyYW5zYWN0aW9uIGVuZC4KKwkgKiBBbHNvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvbW1p dC9hYm9ydCAoc3ViKXRyYW5zYWN0aW9ucyBvcGVuZWQgb24gdGhlCisJICogcmVtb3RlIHNlcnZl ciBpbiBwYXJhbGxlbCBhdCAoc3ViKXRyYW5zYWN0aW9uIGVuZC4KIAkgKi8KIAllbnRyeS0+a2Vl cF9jb25uZWN0aW9ucyA9IHRydWU7CiAJZW50cnktPnBhcmFsbGVsX2NvbW1pdCA9IGZhbHNlOwor CWVudHJ5LT5wYXJhbGxlbF9hYm9ydCA9IGZhbHNlOwogCWZvcmVhY2gobGMsIHNlcnZlci0+b3B0 aW9ucykKIAl7CiAJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CkBA IC0zNDksNiArMzY2LDggQEAgbWFrZV9uZXdfY29ubmVjdGlvbihDb25uQ2FjaGVFbnRyeSAqZW50 cnksIFVzZXJNYXBwaW5nICp1c2VyKQogCQkJZW50cnktPmtlZXBfY29ubmVjdGlvbnMgPSBkZWZH ZXRCb29sZWFuKGRlZik7CiAJCWVsc2UgaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJwYXJhbGxl bF9jb21taXQiKSA9PSAwKQogCQkJZW50cnktPnBhcmFsbGVsX2NvbW1pdCA9IGRlZkdldEJvb2xl YW4oZGVmKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgInBhcmFsbGVsX2Fib3J0 IikgPT0gMCkKKwkJCWVudHJ5LT5wYXJhbGxlbF9hYm9ydCA9IGRlZkdldEJvb2xlYW4oZGVmKTsK IAl9CiAKIAkvKiBOb3cgdHJ5IHRvIG1ha2UgdGhlIGNvbm5lY3Rpb24gKi8KQEAgLTkzNCw2ICs5 NTMsNyBAQCBwZ2Zkd194YWN0X2NhbGxiYWNrKFhhY3RFdmVudCBldmVudCwgdm9pZCAqYXJnKQog CUhBU0hfU0VRX1NUQVRVUyBzY2FuOwogCUNvbm5DYWNoZUVudHJ5ICplbnRyeTsKIAlMaXN0CSAg ICpwZW5kaW5nX2VudHJpZXMgPSBOSUw7CisJTGlzdAkgICAqY2FuY2VsX3JlcXVlc3RlZCA9IE5J TDsKIAogCS8qIFF1aWNrIGV4aXQgaWYgbm8gY29ubmVjdGlvbnMgd2VyZSB0b3VjaGVkIGluIHRo aXMgdHJhbnNhY3Rpb24uICovCiAJaWYgKCF4YWN0X2dvdF9jb25uZWN0aW9uKQpAQCAtMTAyNyw3 ICsxMDQ3LDE1IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICph cmcpCiAJCQkJY2FzZSBYQUNUX0VWRU5UX1BBUkFMTEVMX0FCT1JUOgogCQkJCWNhc2UgWEFDVF9F VkVOVF9BQk9SVDoKIAkJCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSB0cmFuc2FjdGlvbnMgZHVy aW5nIGFib3J0ICovCi0JCQkJCXBnZmR3X2Fib3J0X2NsZWFudXAoZW50cnksIHRydWUpOworCQkJ CQlpZiAoZW50cnktPnBhcmFsbGVsX2Fib3J0KQorCQkJCQl7CisJCQkJCQlpZiAocGdmZHdfYWJv cnRfY2xlYW51cF9iZWdpbihlbnRyeSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgICZwZW5kaW5nX2Vu dHJpZXMsCisJCQkJCQkJCQkJCQkJICAmY2FuY2VsX3JlcXVlc3RlZCkpCisJCQkJCQkJY29udGlu dWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwg dHJ1ZSk7CiAJCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xMDM3LDExICsxMDY1LDIxIEBAIHBn ZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpCiAJfQogCiAJLyog SWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nIGNvbm5lY3Rpb25zLCBmaW5pc2ggY2xlYW5pbmcgdGhl bSB1cCAqLwotCWlmIChwZW5kaW5nX2VudHJpZXMpCisJaWYgKHBlbmRpbmdfZW50cmllcyB8fCBj YW5jZWxfcmVxdWVzdGVkKQogCXsKLQkJQXNzZXJ0KGV2ZW50ID09IFhBQ1RfRVZFTlRfUEFSQUxM RUxfUFJFX0NPTU1JVCB8fAotCQkJICAgZXZlbnQgPT0gWEFDVF9FVkVOVF9QUkVfQ09NTUlUKTsK LQkJcGdmZHdfZmluaXNoX3ByZV9jb21taXRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMpOworCQlp ZiAoZXZlbnQgPT0gWEFDVF9FVkVOVF9QQVJBTExFTF9QUkVfQ09NTUlUIHx8CisJCQlldmVudCA9 PSBYQUNUX0VWRU5UX1BSRV9DT01NSVQpCisJCXsKKwkJCUFzc2VydChjYW5jZWxfcmVxdWVzdGVk ID09IE5JTCk7CisJCQlwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKHBlbmRpbmdfZW50 cmllcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoZXZlbnQgPT0gWEFDVF9FVkVOVF9Q QVJBTExFTF9BQk9SVCB8fAorCQkJCSAgIGV2ZW50ID09IFhBQ1RfRVZFTlRfQUJPUlQpOworCQkJ cGdmZHdfZmluaXNoX2Fib3J0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzLCBjYW5jZWxfcmVxdWVz dGVkLAorCQkJCQkJCQkJICAgdHJ1ZSk7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTA2Niw2ICsxMTA0 LDcgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRyYW5z YWN0aW9uSWQgbXlTdWJpZCwKIAlDb25uQ2FjaGVFbnRyeSAqZW50cnk7CiAJaW50CQkJY3VybGV2 ZWw7CiAJTGlzdAkgICAqcGVuZGluZ19lbnRyaWVzID0gTklMOworCUxpc3QJICAgKmNhbmNlbF9y ZXF1ZXN0ZWQgPSBOSUw7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGF0IHN1YnhhY3Qgc3RhcnQsIG5v ciBhZnRlciBjb21taXQuICovCiAJaWYgKCEoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9QUkVfQ09N TUlUX1NVQiB8fApAQCAtMTEyMCw3ICsxMTU5LDE1IEBAIHBnZmR3X3N1YnhhY3RfY2FsbGJhY2so U3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCiAJCWVsc2UKIAkJ ewogCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSBzdWJ0cmFuc2FjdGlvbnMgZHVyaW5nIGFib3J0 ICovCi0JCQlwZ2Zkd19hYm9ydF9jbGVhbnVwKGVudHJ5LCBmYWxzZSk7CisJCQlpZiAoZW50cnkt PnBhcmFsbGVsX2Fib3J0KQorCQkJeworCQkJCWlmIChwZ2Zkd19hYm9ydF9jbGVhbnVwX2JlZ2lu KGVudHJ5LCBmYWxzZSwKKwkJCQkJCQkJCQkJICAmcGVuZGluZ19lbnRyaWVzLAorCQkJCQkJCQkJ CQkgICZjYW5jZWxfcmVxdWVzdGVkKSkKKwkJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlCisJ CQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgZmFsc2UpOwogCQl9CiAKIAkJLyogT0ssIHdl J3JlIG91dHRhIHRoYXQgbGV2ZWwgb2Ygc3VidHJhbnNhY3Rpb24gKi8KQEAgLTExMjgsMTAgKzEx NzUsMTkgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRy YW5zYWN0aW9uSWQgbXlTdWJpZCwKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgYW55IHBlbmRpbmcg Y29ubmVjdGlvbnMsIGZpbmlzaCBjbGVhbmluZyB0aGVtIHVwICovCi0JaWYgKHBlbmRpbmdfZW50 cmllcykKKwlpZiAocGVuZGluZ19lbnRyaWVzIHx8IGNhbmNlbF9yZXF1ZXN0ZWQpCiAJewotCQlB c3NlcnQoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9QUkVfQ09NTUlUX1NVQik7Ci0JCXBnZmR3X2Zp bmlzaF9wcmVfc3ViY29tbWl0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzLCBjdXJsZXZlbCk7CisJ CWlmIChldmVudCA9PSBTVUJYQUNUX0VWRU5UX1BSRV9DT01NSVRfU1VCKQorCQl7CisJCQlBc3Nl cnQoY2FuY2VsX3JlcXVlc3RlZCA9PSBOSUwpOworCQkJcGdmZHdfZmluaXNoX3ByZV9zdWJjb21t aXRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMsIGN1cmxldmVsKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCUFzc2VydChldmVudCA9PSBTVUJYQUNUX0VWRU5UX0FCT1JUX1NVQik7CisJCQlwZ2Zkd19m aW5pc2hfYWJvcnRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMsIGNhbmNlbF9yZXF1ZXN0ZWQsCisJ CQkJCQkJCQkgICBmYWxzZSk7CisJCX0KIAl9CiB9CiAKQEAgLTEyNzUsMTcgKzEzMzEsMjUgQEAg cGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShDb25uQ2FjaGVFbnRyeSAqZW50cnksIGJvb2wgdG9wbGV2 ZWwpCiBzdGF0aWMgYm9vbAogcGdmZHdfY2FuY2VsX3F1ZXJ5KFBHY29ubiAqY29ubikKIHsKLQlQ R2NhbmNlbCAgICpjYW5jZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07Ci0JUEdyZXN1bHQgICAqcmVz dWx0ID0gTlVMTDsKIAlUaW1lc3RhbXBUeiBlbmR0aW1lOwotCWJvb2wJCXRpbWVkX291dDsKIAog CS8qCiAJICogSWYgaXQgdGFrZXMgdG9vIGxvbmcgdG8gY2FuY2VsIHRoZSBxdWVyeSBhbmQgZGlz Y2FyZCB0aGUgcmVzdWx0LCBhc3N1bWUKIAkgKiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLgogCSAq LwotCWVuZHRpbWUgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVz dGFtcCgpLCAzMDAwMCk7CisJZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhH ZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkJICBDT05ORUNUSU9OX0NMRUFOVVBfVElN RU9VVCk7CisKKwlpZiAoIXBnZmR3X2NhbmNlbF9xdWVyeV9iZWdpbihjb25uKSkKKwkJcmV0dXJu IGZhbHNlOworCXJldHVybiBwZ2Zkd19jYW5jZWxfcXVlcnlfZW5kKGNvbm4sIGVuZHRpbWUpOwor fQorCitzdGF0aWMgYm9vbAorcGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2luKFBHY29ubiAqY29ubikK K3sKKwlQR2NhbmNlbCAgICpjYW5jZWw7CisJY2hhcgkJZXJyYnVmWzI1Nl07CiAKIAkvKgogCSAq IElzc3VlIGNhbmNlbCByZXF1ZXN0LiAgVW5mb3J0dW5hdGVseSwgdGhlcmUncyBubyBnb29kIHdh eSB0byBsaW1pdCB0aGUKQEAgLTEzMDUsNiArMTM2OSwxNSBAQCBwZ2Zkd19jYW5jZWxfcXVlcnko UEdjb25uICpjb25uKQogCQlQUWZyZWVDYW5jZWwoY2FuY2VsKTsKIAl9CiAKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIGJvb2wKK3BnZmR3X2NhbmNlbF9xdWVyeV9lbmQoUEdjb25uICpjb25u LCBUaW1lc3RhbXBUeiBlbmR0aW1lKQoreworCVBHcmVzdWx0ICAgKnJlc3VsdCA9IE5VTEw7CisJ Ym9vbAkJdGltZWRfb3V0OworCiAJLyogR2V0IGFuZCBkaXNjYXJkIHRoZSByZXN1bHQgb2YgdGhl IHF1ZXJ5LiAqLwogCWlmIChwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQoY29ubiwgZW5kdGltZSwg JnJlc3VsdCwgJnRpbWVkX291dCkpCiAJewpAQCAtMTMzOSw5ICsxNDEyLDcgQEAgcGdmZHdfY2Fu Y2VsX3F1ZXJ5KFBHY29ubiAqY29ubikKIHN0YXRpYyBib29sCiBwZ2Zkd19leGVjX2NsZWFudXBf cXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwgYm9vbCBpZ25vcmVfZXJyb3Jz KQogewotCVBHcmVzdWx0ICAgKnJlc3VsdCA9IE5VTEw7CiAJVGltZXN0YW1wVHogZW5kdGltZTsK LQlib29sCQl0aW1lZF9vdXQ7CiAKIAkvKgogCSAqIElmIGl0IHRha2VzIHRvbyBsb25nIHRvIGV4 ZWN1dGUgYSBjbGVhbnVwIHF1ZXJ5LCBhc3N1bWUgdGhlIGNvbm5lY3Rpb24KQEAgLTEzNDksOCAr MTQyMCwxNyBAQCBwZ2Zkd19leGVjX2NsZWFudXBfcXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpxdWVyeSwgYm9vbCBpZ25vcmVfZXJyb3JzKQogCSAqIHBsYWNlIChlLmcuIHN0YXRlbWVu dCB0aW1lb3V0LCB1c2VyIGNhbmNlbCksIHNvIHRoZSB0aW1lb3V0IHNob3VsZG4ndAogCSAqIGJl IHRvbyBsb25nLgogCSAqLwotCWVuZHRpbWUgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMo R2V0Q3VycmVudFRpbWVzdGFtcCgpLCAzMDAwMCk7CisJZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1 c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkJICBDT05ORUNU SU9OX0NMRUFOVVBfVElNRU9VVCk7CiAKKwlpZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9i ZWdpbihjb25uLCBxdWVyeSkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gcGdmZHdfZXhlY19j bGVhbnVwX3F1ZXJ5X2VuZChjb25uLCBxdWVyeSwgaWdub3JlX2Vycm9ycywgZW5kdGltZSk7Cit9 CisKK3N0YXRpYyBib29sCitwZ2Zkd19leGVjX2NsZWFudXBfcXVlcnlfYmVnaW4oUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKIAkvKgogCSAqIFN1Ym1pdCBhIHF1ZXJ5LiAgU2lu Y2Ugd2UgZG9uJ3QgdXNlIG5vbi1ibG9ja2luZyBtb2RlLCB0aGlzIGFsc28gY2FuCiAJICogYmxv Y2suICBCdXQgaXRzIHJpc2sgaXMgcmVsYXRpdmVseSBzbWFsbCwgc28gd2UgaWdub3JlIHRoYXQg Zm9yIG5vdy4KQEAgLTEzNjEsNiArMTQ0MSwxNiBAQCBwZ2Zkd19leGVjX2NsZWFudXBfcXVlcnko UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwgYm9vbCBpZ25vcmVfZXJyb3JzKQogCQly ZXR1cm4gZmFsc2U7CiAJfQogCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitwZ2Zk d19leGVjX2NsZWFudXBfcXVlcnlfZW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnks CisJCQkJCQkJIGJvb2wgaWdub3JlX2Vycm9ycywgVGltZXN0YW1wVHogZW5kdGltZSkKK3sKKwlQ R3Jlc3VsdCAgICpyZXN1bHQgPSBOVUxMOworCWJvb2wJCXRpbWVkX291dDsKKwogCS8qIEdldCB0 aGUgcmVzdWx0IG9mIHRoZSBxdWVyeS4gKi8KIAlpZiAocGdmZHdfZ2V0X2NsZWFudXBfcmVzdWx0 KGNvbm4sIGVuZHRpbWUsICZyZXN1bHQsICZ0aW1lZF9vdXQpKQogCXsKQEAgLTE1NDUsNiArMTYz NSw1NiBAQCBwZ2Zkd19hYm9ydF9jbGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0 b3BsZXZlbCkKIAllbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSA9IGZhbHNlOwogfQogCitzdGF0 aWMgYm9vbAorcGdmZHdfYWJvcnRfY2xlYW51cF9iZWdpbihDb25uQ2FjaGVFbnRyeSAqZW50cnks IGJvb2wgdG9wbGV2ZWwsCisJCQkJCQkgIExpc3QgKipwZW5kaW5nX2VudHJpZXMsIExpc3QgKipj YW5jZWxfcmVxdWVzdGVkKQoreworCS8qCisJICogRG9uJ3QgdHJ5IHRvIGNsZWFuIHVwIHRoZSBj b25uZWN0aW9uIGlmIHdlJ3JlIGFscmVhZHkgaW4gZXJyb3IKKwkgKiByZWN1cnNpb24gdHJvdWJs ZS4KKwkgKi8KKwlpZiAoaW5fZXJyb3JfcmVjdXJzaW9uX3Ryb3VibGUoKSkKKwkJZW50cnktPmNo YW5naW5nX3hhY3Rfc3RhdGUgPSB0cnVlOworCisJLyoKKwkgKiBJZiBjb25uZWN0aW9uIGlzIGFs cmVhZHkgdW5zYWx2YWdlYWJsZSwgZG9uJ3QgdG91Y2ggaXQgZnVydGhlci4KKwkgKi8KKwlpZiAo ZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog TWFyayB0aGlzIGNvbm5lY3Rpb24gYXMgaW4gdGhlIHByb2Nlc3Mgb2YgY2hhbmdpbmcgdHJhbnNh Y3Rpb24gc3RhdGUuCisJICovCisJZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSB0cnVlOwor CisJLyogQXNzdW1lIHdlIG1pZ2h0IGhhdmUgbG9zdCB0cmFjayBvZiBwcmVwYXJlZCBzdGF0ZW1l bnRzICovCisJZW50cnktPmhhdmVfZXJyb3IgPSB0cnVlOworCisJLyoKKwkgKiBJZiBhIGNvbW1h bmQgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSByZW1vdGUgc2VydmVyIGJ5IHVzaW5nIGFuCisJ ICogYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBmdW5jdGlvbiwgdGhlIGNvbW1hbmQgbWlnaHQgbm90 IGhhdmUgeWV0CisJICogY29tcGxldGVkLiAgQ2hlY2sgdG8gc2VlIGlmIGEgY29tbWFuZCBpcyBz dGlsbCBiZWluZyBwcm9jZXNzZWQgYnkgdGhlCisJICogcmVtb3RlIHNlcnZlciwgYW5kIGlmIHNv LCByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiB0aGUgY29tbWFuZC4KKwkgKi8KKwlpZiAoUFF0cmFu c2FjdGlvblN0YXR1cyhlbnRyeS0+Y29ubikgPT0gUFFUUkFOU19BQ1RJVkUpCisJeworCQlpZiAo IXBnZmR3X2NhbmNlbF9xdWVyeV9iZWdpbihlbnRyeS0+Y29ubikpCisJCQlyZXR1cm4gZmFsc2U7 CQkvKiBVbmFibGUgdG8gY2FuY2VsIHJ1bm5pbmcgcXVlcnkgKi8KKwkJKmNhbmNlbF9yZXF1ZXN0 ZWQgPSBsYXBwZW5kKCpjYW5jZWxfcmVxdWVzdGVkLCBlbnRyeSk7CisJfQorCWVsc2UKKwl7CisJ CWNoYXIJCXNxbFsxMDBdOworCisJCUNPTlNUUlVDVF9BQk9SVF9DT01NQU5EKHNxbCwgZW50cnks IHRvcGxldmVsKTsKKwkJaWYgKCFwZ2Zkd19leGVjX2NsZWFudXBfcXVlcnlfYmVnaW4oZW50cnkt PmNvbm4sIHNxbCkpCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBVbmFibGUgdG8gYWJvcnQgcmVtb3Rl IHRyYW5zYWN0aW9uICovCisJCSpwZW5kaW5nX2VudHJpZXMgPSBsYXBwZW5kKCpwZW5kaW5nX2Vu dHJpZXMsIGVudHJ5KTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEZpbmlzaCBw cmUtY29tbWl0IGNsZWFudXAgb2YgY29ubmVjdGlvbnMgb24gZWFjaCBvZiB3aGljaCB3ZSd2ZSBz ZW50IGEKICAqIENPTU1JVCBjb21tYW5kIHRvIHRoZSByZW1vdGUgc2VydmVyLgpAQCAtMTY1MSw2 ICsxNzkxLDE2OCBAQCBwZ2Zkd19maW5pc2hfcHJlX3N1YmNvbW1pdF9jbGVhbnVwKExpc3QgKnBl bmRpbmdfZW50cmllcywgaW50IGN1cmxldmVsKQogCX0KIH0KIAorLyoKKyAqIEZpbmlzaCAoc3Vi KWFib3J0IGNsZWFudXAgb2YgY29ubmVjdGlvbnMgb24gZWFjaCBvZiB3aGljaCB3ZSd2ZSBzZW50 IGEKKyAqIChzdWIpYWJvcnQgY29tbWFuZCBvciBjYW5jZWwgcmVxdWVzdCB0byB0aGUgcmVtb3Rl IHNlcnZlci4KKyAqLworc3RhdGljIHZvaWQKK3BnZmR3X2ZpbmlzaF9hYm9ydF9jbGVhbnVwKExp c3QgKnBlbmRpbmdfZW50cmllcywgTGlzdCAqY2FuY2VsX3JlcXVlc3RlZCwKKwkJCQkJCSAgIGJv b2wgdG9wbGV2ZWwpCit7CisJTGlzdAkgICAqcGVuZGluZ19kZWFsbG9jcyA9IE5JTDsKKwlMaXN0 Q2VsbCAgICpsYzsKKworCS8qCisJICogSWYgY2FuY2VsIHJlcXVlc3RzIGhhdmUgYmVlbiBpc3N1 ZWQsIGdldCBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0cyBvZiB0aGUKKwkgKiBxdWVyaWVzIGZpcnN0 LgorCSAqLworCWlmIChjYW5jZWxfcmVxdWVzdGVkKQorCXsKKwkJZm9yZWFjaChsYywgY2FuY2Vs X3JlcXVlc3RlZCkKKwkJeworCQkJQ29ubkNhY2hlRW50cnkgKmVudHJ5ID0gKENvbm5DYWNoZUVu dHJ5ICopIGxmaXJzdChsYyk7CisJCQlUaW1lc3RhbXBUeiBlbmR0aW1lOworCQkJY2hhcgkJc3Fs WzEwMF07CisKKwkJCUFzc2VydChlbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSk7CisKKwkJCS8q CisJCQkgKiBTZXQgZW5kIHRpbWUuICBZb3UgbWlnaHQgdGhpbmsgd2Ugc2hvdWxkIGRvIHRoaXMg YmVmb3JlIGlzc3VpbmcKKwkJCSAqIGNhbmNlbCByZXF1ZXN0IGxpa2UgaW4gbm9ybWFsIG1vZGUs IGJ1dCB0aGF0IGlzIHByb2JsZW1hdGljLAorCQkJICogYmVjYXVzZSBpZiwgZm9yIGV4YW1wbGUs IGl0IHRvb2sgbG9uZ2VyIHRoYW4gMzAgc2Vjb25kcyB0bworCQkJICogcHJvY2VzcyB0aGUgZmly c3QgZmV3IGVudHJpZXMgaW4gdGhlIGNhbmNlbF9yZXF1ZXN0ZWQgbGlzdCwgaXQKKwkJCSAqIHdv dWxkIGNhdXNlIGEgdGltZW91dCBmb3IgZWFjaCBvZiB0aGUgcmVtYWluaW5nIGVudHJpZXMgaW4g dGhlCisJCQkgKiBsaXN0IHdoZW4gcHJvY2Vzc2luZyBpdCwgbGVhZGluZyB0byBzbGFtbWluZyB0 aGUgY29ubmVjdGlvbiBvZgorCQkJICogaXQgc2h1dC4KKwkJCSAqLworCQkJZW5kdGltZSA9IFRp bWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJ CQkJCQkgIENPTk5FQ1RJT05fQ0xFQU5VUF9USU1FT1VUKTsKKworCQkJaWYgKCFwZ2Zkd19jYW5j ZWxfcXVlcnlfZW5kKGVudHJ5LT5jb25uLCBlbmR0aW1lKSkKKwkJCXsKKwkJCQkvKiBVbmFibGUg dG8gY2FuY2VsIHJ1bm5pbmcgcXVlcnkgKi8KKwkJCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVu dHJ5LCB0b3BsZXZlbCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFNlbmQgYSAoc3Vi KWFib3J0IGNvbW1hbmQgaW4gcGFyYWxsZWwgaWYgbmVlZGVkICovCisJCQlDT05TVFJVQ1RfQUJP UlRfQ09NTUFORChzcWwsIGVudHJ5LCB0b3BsZXZlbCk7CisJCQlpZiAoIXBnZmR3X2V4ZWNfY2xl YW51cF9xdWVyeV9iZWdpbihlbnRyeS0+Y29ubiwgc3FsKSkKKwkJCXsKKwkJCQkvKiBVbmFibGUg dG8gYWJvcnQgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb24gKi8KKwkJCQlwZ2Zkd19yZXNldF94YWN0 X3N0YXRlKGVudHJ5LCB0b3BsZXZlbCk7CisJCQl9CisJCQllbHNlCisJCQkJcGVuZGluZ19lbnRy aWVzID0gbGFwcGVuZChwZW5kaW5nX2VudHJpZXMsIGVudHJ5KTsKKwkJfQorCX0KKworCS8qIE5v IGZ1cnRoZXIgd29yayBpZiBubyBwZW5kaW5nIGVudHJpZXMgKi8KKwlpZiAoIXBlbmRpbmdfZW50 cmllcykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgKHN1Yilh Ym9ydCBjb21tYW5kIGZvciBlYWNoIG9mIHRoZSBwZW5kaW5nCisJICogZW50cmllcworCSAqLwor CWZvcmVhY2gobGMsIHBlbmRpbmdfZW50cmllcykKKwl7CisJCUNvbm5DYWNoZUVudHJ5ICplbnRy eSA9IChDb25uQ2FjaGVFbnRyeSAqKSBsZmlyc3QobGMpOworCQlUaW1lc3RhbXBUeiBlbmR0aW1l OworCQljaGFyCQlzcWxbMTAwXTsKKworCQlBc3NlcnQoZW50cnktPmNoYW5naW5nX3hhY3Rfc3Rh dGUpOworCisJCS8qCisJCSAqIFNldCBlbmQgdGltZS4gIFdlIGRvIHRoaXMgbm93LCBub3QgYmVm b3JlIGlzc3VpbmcgdGhlIGNvbW1hbmQgbGlrZQorCQkgKiBpbiBub3JtYWwgbW9kZSwgZm9yIHRo ZSBzYW1lIHJlYXNvbiBhcyBmb3IgdGhlIGNhbmNlbF9yZXF1ZXN0ZWQKKwkJICogZW50cmllcy4K KwkJICovCisJCWVuZHRpbWUgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVu dFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQkgIENPTk5FQ1RJT05fQ0xFQU5VUF9USU1FT1VUKTsK KworCQlDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChzcWwsIGVudHJ5LCB0b3BsZXZlbCk7CisJCWlm ICghcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5X2VuZChlbnRyeS0+Y29ubiwgc3FsLCBmYWxzZSwg ZW5kdGltZSkpCisJCXsKKwkJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUgKHN1Yil0cmFuc2Fj dGlvbiAqLworCQkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAodG9wbGV2ZWwpCisJCXsKKwkJCS8qIERvIGEgREVBTExP Q0FURSBBTEwgaW4gcGFyYWxsZWwgaWYgbmVlZGVkICovCisJCQlpZiAoZW50cnktPmhhdmVfcHJl cF9zdG10ICYmIGVudHJ5LT5oYXZlX2Vycm9yKQorCQkJeworCQkJCWlmICghcGdmZHdfZXhlY19j bGVhbnVwX3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uLAorCQkJCQkJCQkJCQkJCSJERUFMTE9DQVRF IEFMTCIpKQorCQkJCXsKKwkJCQkJLyogVHJvdWJsZSBjbGVhcmluZyBwcmVwYXJlZCBzdGF0ZW1l bnRzICovCisJCQkJCXBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIHRvcGxldmVsKTsKKwkJ CQl9CisJCQkJZWxzZQorCQkJCQlwZW5kaW5nX2RlYWxsb2NzID0gbGFwcGVuZChwZW5kaW5nX2Rl YWxsb2NzLCBlbnRyeSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbnRyeS0+aGF2ZV9wcmVw X3N0bXQgPSBmYWxzZTsKKwkJCWVudHJ5LT5oYXZlX2Vycm9yID0gZmFsc2U7CisJCX0KKworCQkv KiBSZXNldCB0aGUgcGVyLWNvbm5lY3Rpb24gc3RhdGUgaWYgbmVlZGVkICovCisJCWlmIChlbnRy eS0+c3RhdGUucGVuZGluZ0FyZXEpCisJCQltZW1zZXQoJmVudHJ5LT5zdGF0ZSwgMCwgc2l6ZW9m KGVudHJ5LT5zdGF0ZSkpOworCisJCS8qIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIGVudHJ5OyB1bnNl dCB0aGUgY2hhbmdpbmdfeGFjdF9zdGF0ZSBmbGFnICovCisJCWVudHJ5LT5jaGFuZ2luZ194YWN0 X3N0YXRlID0gZmFsc2U7CisJCXBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIHRvcGxldmVs KTsKKwl9CisKKwkvKiBObyBmdXJ0aGVyIHdvcmsgaWYgbm8gcGVuZGluZyBlbnRyaWVzICovCisJ aWYgKCFwZW5kaW5nX2RlYWxsb2NzKQorCQlyZXR1cm47CisJQXNzZXJ0KHRvcGxldmVsKTsKKwor CS8qCisJICogR2V0IHRoZSByZXN1bHQgb2YgdGhlIERFQUxMT0NBVEUgY29tbWFuZCBmb3IgZWFj aCBvZiB0aGUgcGVuZGluZworCSAqIGVudHJpZXMKKwkgKi8KKwlmb3JlYWNoKGxjLCBwZW5kaW5n X2RlYWxsb2NzKQorCXsKKwkJQ29ubkNhY2hlRW50cnkgKmVudHJ5ID0gKENvbm5DYWNoZUVudHJ5 ICopIGxmaXJzdChsYyk7CisJCVRpbWVzdGFtcFR6IGVuZHRpbWU7CisKKwkJQXNzZXJ0KGVudHJ5 LT5jaGFuZ2luZ194YWN0X3N0YXRlKTsKKwkJQXNzZXJ0KGVudHJ5LT5oYXZlX3ByZXBfc3RtdCk7 CisJCUFzc2VydChlbnRyeS0+aGF2ZV9lcnJvcik7CisKKwkJLyoKKwkJICogU2V0IGVuZCB0aW1l LiAgV2UgZG8gdGhpcyBub3csIG5vdCBiZWZvcmUgaXNzdWluZyB0aGUgY29tbWFuZCBsaWtlCisJ CSAqIGluIG5vcm1hbCBtb2RlLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGZvciB0aGUgY2FuY2Vs X3JlcXVlc3RlZAorCQkgKiBlbnRyaWVzLgorCQkgKi8KKwkJZW5kdGltZSA9IFRpbWVzdGFtcFR6 UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkJCSAgQ09O TkVDVElPTl9DTEVBTlVQX1RJTUVPVVQpOworCisJCWlmICghcGdmZHdfZXhlY19jbGVhbnVwX3F1 ZXJ5X2VuZChlbnRyeS0+Y29ubiwgIkRFQUxMT0NBVEUgQUxMIiwKKwkJCQkJCQkJCQkgIHRydWUs IGVuZHRpbWUpKQorCQl7CisJCQkvKiBUcm91YmxlIGNsZWFyaW5nIHByZXBhcmVkIHN0YXRlbWVu dHMgKi8KKwkJCXBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIHRvcGxldmVsKTsKKwkJCWNv bnRpbnVlOworCQl9CisJCWVudHJ5LT5oYXZlX3ByZXBfc3RtdCA9IGZhbHNlOworCQllbnRyeS0+ aGF2ZV9lcnJvciA9IGZhbHNlOworCisJCS8qIFJlc2V0IHRoZSBwZXItY29ubmVjdGlvbiBzdGF0 ZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGVudHJ5LT5zdGF0ZS5wZW5kaW5nQXJlcSkKKwkJCW1lbXNl dCgmZW50cnktPnN0YXRlLCAwLCBzaXplb2YoZW50cnktPnN0YXRlKSk7CisKKwkJLyogV2UncmUg ZG9uZSB3aXRoIHRoaXMgZW50cnk7IHVuc2V0IHRoZSBjaGFuZ2luZ194YWN0X3N0YXRlIGZsYWcg Ki8KKwkJZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKKwkJcGdmZHdfcmVzZXRf eGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOworCX0KK30KKwogLyoKICAqIExpc3QgYWN0aXZl IGZvcmVpZ24gc2VydmVyIGNvbm5lY3Rpb25zLgogICoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGYyMTBmOTExODguLmVkNWJmOTIwOGYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApA QCAtOTUwOSw3ICs5NTA5LDcgQEAgRE8gJGQkCiAgICAgRU5EOwogJGQkOwogRVJST1I6ICBpbnZh bGlkIG9wdGlvbiAicGFzc3dvcmQiCi1ISU5UOiAgVmFsaWQgb3B0aW9ucyBpbiB0aGlzIGNvbnRl eHQgYXJlOiBzZXJ2aWNlLCBwYXNzZmlsZSwgY2hhbm5lbF9iaW5kaW5nLCBjb25uZWN0X3RpbWVv dXQsIGRibmFtZSwgaG9zdCwgaG9zdGFkZHIsIHBvcnQsIG9wdGlvbnMsIGFwcGxpY2F0aW9uX25h bWUsIGtlZXBhbGl2ZXMsIGtlZXBhbGl2ZXNfaWRsZSwga2VlcGFsaXZlc19pbnRlcnZhbCwga2Vl cGFsaXZlc19jb3VudCwgdGNwX3VzZXJfdGltZW91dCwgc3NsbW9kZSwgc3NsY29tcHJlc3Npb24s IHNzbGNlcnQsIHNzbGtleSwgc3Nscm9vdGNlcnQsIHNzbGNybCwgc3NsY3JsZGlyLCBzc2xzbmks IHJlcXVpcmVwZWVyLCBzc2xfbWluX3Byb3RvY29sX3ZlcnNpb24sIHNzbF9tYXhfcHJvdG9jb2xf dmVyc2lvbiwgZ3NzZW5jbW9kZSwga3Jic3J2bmFtZSwgZ3NzbGliLCB0YXJnZXRfc2Vzc2lvbl9h dHRycywgdXNlX3JlbW90ZV9lc3RpbWF0ZSwgZmR3X3N0YXJ0dXBfY29zdCwgZmR3X3R1cGxlX2Nv c3QsIGV4dGVuc2lvbnMsIHVwZGF0YWJsZSwgdHJ1bmNhdGFibGUsIGZldGNoX3NpemUsIGJhdGNo X3NpemUsIGFzeW5jX2NhcGFibGUsIHBhcmFsbGVsX2NvbW1pdCwga2VlcF9jb25uZWN0aW9ucwor SElOVDogIFZhbGlkIG9wdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZTogc2VydmljZSwgcGFzc2Zp bGUsIGNoYW5uZWxfYmluZGluZywgY29ubmVjdF90aW1lb3V0LCBkYm5hbWUsIGhvc3QsIGhvc3Rh ZGRyLCBwb3J0LCBvcHRpb25zLCBhcHBsaWNhdGlvbl9uYW1lLCBrZWVwYWxpdmVzLCBrZWVwYWxp dmVzX2lkbGUsIGtlZXBhbGl2ZXNfaW50ZXJ2YWwsIGtlZXBhbGl2ZXNfY291bnQsIHRjcF91c2Vy X3RpbWVvdXQsIHNzbG1vZGUsIHNzbGNvbXByZXNzaW9uLCBzc2xjZXJ0LCBzc2xrZXksIHNzbHJv b3RjZXJ0LCBzc2xjcmwsIHNzbGNybGRpciwgc3Nsc25pLCByZXF1aXJlcGVlciwgc3NsX21pbl9w cm90b2NvbF92ZXJzaW9uLCBzc2xfbWF4X3Byb3RvY29sX3ZlcnNpb24sIGdzc2VuY21vZGUsIGty YnNydm5hbWUsIGdzc2xpYiwgdGFyZ2V0X3Nlc3Npb25fYXR0cnMsIHVzZV9yZW1vdGVfZXN0aW1h dGUsIGZkd19zdGFydHVwX2Nvc3QsIGZkd190dXBsZV9jb3N0LCBleHRlbnNpb25zLCB1cGRhdGFi bGUsIHRydW5jYXRhYmxlLCBmZXRjaF9zaXplLCBiYXRjaF9zaXplLCBhc3luY19jYXBhYmxlLCBw YXJhbGxlbF9jb21taXQsIHBhcmFsbGVsX2Fib3J0LCBrZWVwX2Nvbm5lY3Rpb25zCiBDT05URVhU OiAgU1FMIHN0YXRlbWVudCAiQUxURVIgU0VSVkVSIGxvb3BiYWNrX25vcHcgT1BUSU9OUyAoQURE IHBhc3N3b3JkICdkdW1teXB3JykiCiBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9j ayBsaW5lIDMgYXQgRVhFQ1VURQogLS0gSWYgd2UgYWRkIGEgcGFzc3dvcmQgZm9yIG91ciB1c2Vy IG1hcHBpbmcgaW5zdGVhZCwgd2Ugc2hvdWxkIGdldCBhIGRpZmZlcmVudApAQCAtMTA5MzQsMTAg KzEwOTM0LDEyIEBAIFNFTEVDVCBwZ190ZXJtaW5hdGVfYmFja2VuZChwaWQsIDE4MDAwMCkgRlJP TSBwZ19zdGF0X2FjdGl2aXR5CiBSRVNFVCBwb3N0Z3Jlc19mZHcuYXBwbGljYXRpb25fbmFtZTsK IFJFU0VUIGRlYnVnX2Rpc2NhcmRfY2FjaGVzOwogLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdCBwYXJh bGxlbCBjb21taXQKKy0tIHRlc3QgcGFyYWxsZWwgY29tbWl0IGFuZCBwYXJhbGxlbCBhYm9ydAog LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKEFERCBwYXJhbGxl bF9jb21taXQgJ3RydWUnKTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChBREQgcGFy YWxsZWxfYWJvcnQgJ3RydWUnKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoQURE IHBhcmFsbGVsX2NvbW1pdCAndHJ1ZScpOworQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05T IChBREQgcGFyYWxsZWxfYWJvcnQgJ3RydWUnKTsKIENSRUFURSBUQUJMRSBwbG9jMSAoZjEgaW50 LCBmMiB0ZXh0KTsKIENSRUFURSBGT1JFSUdOIFRBQkxFIHByZW0xIChmMSBpbnQsIGYyIHRleHQp CiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdwbG9jMScpOwpAQCAtMTEw MDcsNSArMTEwMDksNTIgQEAgU0VMRUNUICogRlJPTSBwcmVtMjsKICAyMDQgfCBxdXhxdXgKICgz IHJvd3MpCiAKK0JFR0lOOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVTICgxMDUsICd0ZXN0MScp OworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDUsICd0ZXN0MicpOworQUJPUlQ7CitTRUxF Q1QgKiBGUk9NIHByZW0xOworIGYxICB8ICAgZjIgICAKKy0tLS0tKy0tLS0tLS0tCisgMTAxIHwg Zm9vCisgMTAyIHwgZm9vZm9vCisgMTA0IHwgYmF6YmF6CisoMyByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIHByZW0yOworIGYxICB8ICAgZjIgICAKKy0tLS0tKy0tLS0tLS0tCisgMjAxIHwgYmFyCisg MjAyIHwgYmFyYmFyCisgMjA0IHwgcXV4cXV4CisoMyByb3dzKQorCitCRUdJTjsKK1NBVkVQT0lO VCBzOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVTICgxMDUsICd0ZXN0MScpOworSU5TRVJUIElO VE8gcHJlbTIgVkFMVUVTICgyMDUsICd0ZXN0MicpOworUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHM7 CitSRUxFQVNFIFNBVkVQT0lOVCBzOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVTICgxMDUsICd0 ZXN0MScpOworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDUsICd0ZXN0MicpOworQUJPUlQ7 CitTRUxFQ1QgKiBGUk9NIHByZW0xOworIGYxICB8ICAgZjIgICAKKy0tLS0tKy0tLS0tLS0tCisg MTAxIHwgZm9vCisgMTAyIHwgZm9vZm9vCisgMTA0IHwgYmF6YmF6CisoMyByb3dzKQorCitTRUxF Q1QgKiBGUk9NIHByZW0yOworIGYxICB8ICAgZjIgICAKKy0tLS0tKy0tLS0tLS0tCisgMjAxIHwg YmFyCisgMjAyIHwgYmFyYmFyCisgMjA0IHwgcXV4cXV4CisoMyByb3dzKQorCiBBTFRFUiBTRVJW RVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9jb21taXQpOworQUxURVIgU0VSVkVS IGxvb3BiYWNrIE9QVElPTlMgKERST1AgcGFyYWxsZWxfYWJvcnQpOwogQUxURVIgU0VSVkVSIGxv b3BiYWNrMiBPUFRJT05TIChEUk9QIHBhcmFsbGVsX2NvbW1pdCk7CitBTFRFUiBTRVJWRVIgbG9v cGJhY2syIE9QVElPTlMgKERST1AgcGFyYWxsZWxfYWJvcnQpOwpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYwpp bmRleCA1NzI1OTFhNTU4Li41OWY4NjVmYWMzIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9vcHRpb24uYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYwpAQCAtMTIy LDYgKzEyMiw3IEBAIHBvc3RncmVzX2Zkd192YWxpZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CXN0cmNtcChkZWYtPmRlZm5hbWUsICJ0cnVuY2F0YWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChk ZWYtPmRlZm5hbWUsICJhc3luY19jYXBhYmxlIikgPT0gMCB8fAogCQkJc3RyY21wKGRlZi0+ZGVm bmFtZSwgInBhcmFsbGVsX2NvbW1pdCIpID09IDAgfHwKKwkJCXN0cmNtcChkZWYtPmRlZm5hbWUs ICJwYXJhbGxlbF9hYm9ydCIpID09IDAgfHwKIAkJCXN0cmNtcChkZWYtPmRlZm5hbWUsICJrZWVw X2Nvbm5lY3Rpb25zIikgPT0gMCkKIAkJewogCQkJLyogdGhlc2UgYWNjZXB0IG9ubHkgYm9vbGVh biB2YWx1ZXMgKi8KQEAgLTI1MSw2ICsyNTIsNyBAQCBJbml0UGdGZHdPcHRpb25zKHZvaWQpCiAJ CXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsi YXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZhbHNlfSwKIAkJeyJwYXJh bGxlbF9jb21taXQiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAorCQl7InBhcmFs bGVsX2Fib3J0IiwgRm9yZWlnblNlcnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKIAkJeyJrZWVwX2Nv bm5lY3Rpb25zIiwgRm9yZWlnblNlcnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKIAkJeyJwYXNzd29y ZF9yZXF1aXJlZCIsIFVzZXJNYXBwaW5nUmVsYXRpb25JZCwgZmFsc2V9LAogCmRpZmYgLS1naXQg YS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9z dGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDk1YjZiNzE5MmUuLmJkMjY3Mzlk OWEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zNTE3 LDEwICszNTE3LDEyIEBAIFJFU0VUIHBvc3RncmVzX2Zkdy5hcHBsaWNhdGlvbl9uYW1lOwogUkVT RVQgZGVidWdfZGlzY2FyZF9jYWNoZXM7CiAKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QgcGFyYWxs ZWwgY29tbWl0CistLSB0ZXN0IHBhcmFsbGVsIGNvbW1pdCBhbmQgcGFyYWxsZWwgYWJvcnQKIC0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KIEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChBREQgcGFyYWxsZWxf Y29tbWl0ICd0cnVlJyk7CitBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoQUREIHBhcmFs bGVsX2Fib3J0ICd0cnVlJyk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKEFERCBw YXJhbGxlbF9jb21taXQgJ3RydWUnKTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAo QUREIHBhcmFsbGVsX2Fib3J0ICd0cnVlJyk7CiAKIENSRUFURSBUQUJMRSBwbG9jMSAoZjEgaW50 LCBmMiB0ZXh0KTsKIENSRUFURSBGT1JFSUdOIFRBQkxFIHByZW0xIChmMSBpbnQsIGYyIHRleHQp CkBAIC0zNTU5LDUgKzM1NjEsMjYgQEAgQ09NTUlUOwogU0VMRUNUICogRlJPTSBwcmVtMTsKIFNF TEVDVCAqIEZST00gcHJlbTI7CiAKK0JFR0lOOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVTICgx MDUsICd0ZXN0MScpOworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDUsICd0ZXN0MicpOwor QUJPUlQ7CitTRUxFQ1QgKiBGUk9NIHByZW0xOworU0VMRUNUICogRlJPTSBwcmVtMjsKKworQkVH SU47CitTQVZFUE9JTlQgczsKK0lOU0VSVCBJTlRPIHByZW0xIFZBTFVFUyAoMTA1LCAndGVzdDEn KTsKK0lOU0VSVCBJTlRPIHByZW0yIFZBTFVFUyAoMjA1LCAndGVzdDInKTsKK1JPTExCQUNLIFRP IFNBVkVQT0lOVCBzOworUkVMRUFTRSBTQVZFUE9JTlQgczsKK0lOU0VSVCBJTlRPIHByZW0xIFZB TFVFUyAoMTA1LCAndGVzdDEnKTsKK0lOU0VSVCBJTlRPIHByZW0yIFZBTFVFUyAoMjA1LCAndGVz dDInKTsKK0FCT1JUOworU0VMRUNUICogRlJPTSBwcmVtMTsKK1NFTEVDVCAqIEZST00gcHJlbTI7 CisKIEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9QIHBhcmFsbGVsX2NvbW1pdCk7 CitBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9hYm9ydCk7CiBB TFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKERST1AgcGFyYWxsZWxfY29tbWl0KTsKK0FM VEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9hYm9ydCk7CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcG9z dGdyZXMtZmR3LnNnbWwKaW5kZXggOGViZjBkYzNhMC4uZTVjYTAwM2U5YiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wb3N0Z3Jl cy1mZHcuc2dtbApAQCAtNDYxLDEwICs0NjEsMTAgQEAgT1BUSU9OUyAoQUREIHBhc3N3b3JkX3Jl cXVpcmVkICdmYWxzZScpOwogCiAgICA8cGFyYT4KICAgICBXaGVuIG11bHRpcGxlIHJlbW90ZSAo c3ViKXRyYW5zYWN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gYSBsb2NhbAotICAgIChzdWIpdHJhbnNh Y3Rpb24sIGJ5IGRlZmF1bHQgPGZpbGVuYW1lPnBvc3RncmVzX2ZkdzwvZmlsZW5hbWU+IGNvbW1p dHMKLSAgICB0aG9zZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgb25lIGJ5IG9uZSB3aGVuIHRo ZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uCi0gICAgY29tbWl0cy4KLSAgICBQZXJmb3JtYW5jZSBj YW4gYmUgaW1wcm92ZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKyAgICAoc3ViKXRyYW5z YWN0aW9uLCBieSBkZWZhdWx0IDxmaWxlbmFtZT5wb3N0Z3Jlc19mZHc8L2ZpbGVuYW1lPiBjb21t aXRzIG9yCisgICAgYWJvcnRzIHRob3NlIHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9ucyBvbmUgYnkg b25lIHdoZW4gdGhlIGxvY2FsCisgICAgKHN1Yil0cmFuc2FjdGlvbiBjb21taXRzIG9yIGFib3J0 cy4KKyAgICBQZXJmb3JtYW5jZSBjYW4gYmUgaW1wcm92ZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9w dGlvbnM6CiAgICA8L3BhcmE+CiAKICAgIDx2YXJpYWJsZWxpc3Q+CkBAIC00NzksMjcgKzQ3OSw0 MCBAQCBPUFRJT05TIChBREQgcGFzc3dvcmRfcmVxdWlyZWQgJ2ZhbHNlJyk7CiAgICAgICAgVGhp cyBvcHRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBmb3JlaWduIHNlcnZlcnMsIG5vdCBw ZXItdGFibGUuCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+ LgogICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5Pgog CisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+cGFyYWxsZWxfYWJvcnQ8 L2xpdGVyYWw+ICg8dHlwZT5ib29sZWFuPC90eXBlPik8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4K ICAgICAgIDxwYXJhPgotICAgICAgIElmIG11bHRpcGxlIGZvcmVpZ24gc2VydmVycyB3aXRoIHRo aXMgb3B0aW9uIGVuYWJsZWQgYXJlIGludm9sdmVkIGluCi0gICAgICAgYSBsb2NhbCAoc3ViKXRy YW5zYWN0aW9uLCBtdWx0aXBsZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgb3BlbmVkIG9uCi0g ICAgICAgdGhvc2UgZm9yZWlnbiBzZXJ2ZXJzIGluIHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9u IGFyZSBjb21taXR0ZWQgaW4KLSAgICAgICBwYXJhbGxlbCBhY3Jvc3MgdGhvc2UgZm9yZWlnbiBz ZXJ2ZXJzIHdoZW4gdGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rpb24KLSAgICAgICBjb21taXRzLgot ICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICBGb3IgYSBmb3JlaWduIHNlcnZl ciB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIGlmIG1hbnkgcmVtb3RlCi0gICAgICAgKHN1Yil0 cmFuc2FjdGlvbnMgYXJlIG9wZW5lZCBvbiB0aGUgZm9yZWlnbiBzZXJ2ZXIgaW4gYSBsb2NhbAot ICAgICAgIChzdWIpdHJhbnNhY3Rpb24sIHRoaXMgb3B0aW9uIG1pZ2h0IGluY3JlYXNlIHRoZSBy ZW1vdGUgc2VydmVy4oCZcyBsb2FkCi0gICAgICAgd2hlbiB0aGUgbG9jYWwgKHN1Yil0cmFuc2Fj dGlvbiBjb21taXRzLCBzbyBiZSBjYXJlZnVsIHdoZW4gdXNpbmcgdGhpcwotICAgICAgIG9wdGlv bi4KKyAgICAgICBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIDxmaWxlbmFtZT5wb3N0Z3Jl c19mZHc8L2ZpbGVuYW1lPiBhYm9ydHMKKyAgICAgICByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMg b3BlbmVkIG9uIGEgZm9yZWlnbiBzZXJ2ZXIgaW4gYSBsb2NhbAorICAgICAgIChzdWIpdHJhbnNh Y3Rpb24gaW4gcGFyYWxsZWwgd2hlbiB0aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbiBhYm9ydHMu CisgICAgICAgVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBmb3JlaWduIHNl cnZlcnMsIG5vdCBwZXItdGFibGUuCisgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ZmFs c2U8L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFy bGlzdGVudHJ5PgogCiAgICA8L3ZhcmlhYmxlbGlzdD4KIAorICAgPHBhcmE+CisgICAgSWYgbXVs dGlwbGUgZm9yZWlnbiBzZXJ2ZXJzIHdpdGggdGhlc2Ugb3B0aW9ucyBlbmFibGVkIGFyZSBpbnZv bHZlZCBpbiBhCisgICAgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbiwgbXVsdGlwbGUgcmVtb3RlIChz dWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbiB0aG9zZQorICAgIGZvcmVpZ24gc2VydmVycyBpbiB0 aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbiBhcmUgY29tbWl0dGVkIG9yIGFib3J0ZWQgaW4KKyAg ICBwYXJhbGxlbCBhY3Jvc3MgdGhvc2UgZm9yZWlnbiBzZXJ2ZXJzIHdoZW4gdGhlIGxvY2FsIChz dWIpdHJhbnNhY3Rpb24KKyAgICBjb21taXRzIG9yIGFib3J0cy4KKyAgIDwvcGFyYT4KKworICAg PHBhcmE+CisgICAgRm9yIGEgZm9yZWlnbiBzZXJ2ZXIgd2l0aCB0aGVzZSBvcHRpb25zIGVuYWJs ZWQsIGlmIG1hbnkgcmVtb3RlCisgICAgKHN1Yil0cmFuc2FjdGlvbnMgYXJlIG9wZW5lZCBvbiB0 aGUgZm9yZWlnbiBzZXJ2ZXIgaW4gYSBsb2NhbAorICAgIChzdWIpdHJhbnNhY3Rpb24sIHRoZXNl IG9wdGlvbnMgbWlnaHQgaW5jcmVhc2UgdGhlIHJlbW90ZSBzZXJ2ZXLigJlzIGxvYWQKKyAgICB3 aGVuIHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uIGNvbW1pdHMgb3IgYWJvcnRzLCBzbyBiZSBj YXJlZnVsIHdoZW4KKyAgICB1c2luZyB0aGVzZSBvcHRpb25zLgorICAgPC9wYXJhPgorCiAgIDwv c2VjdDM+CiAKICAgPHNlY3QzPgo= --0000000000009923bd05d9110452--