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 1p8EKU-0001bc-1C for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Dec 2022 05:41:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p8EKS-0005am-Fo for pgsql-hackers@arkaria.postgresql.org; Thu, 22 Dec 2022 05:41:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p8EKR-0005YO-Q4 for pgsql-hackers@lists.postgresql.org; Thu, 22 Dec 2022 05:41:16 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p8EKG-00006Y-2F for pgsql-hackers@postgresql.org; Thu, 22 Dec 2022 05:41:15 +0000 Received: by mail-pj1-x1031.google.com with SMTP id z8-20020a17090abd8800b00219ed30ce47so4653712pjr.3 for ; Wed, 21 Dec 2022 21:41:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:from:to:cc:subject:date:message-id:reply-to; bh=16VXFVlDOZNTDUAnQkMApBs8hK89WHc01+IltgagQjA=; b=ZZoqkcHcGO1akzvJG3RWjSb0Bq80y0yEZ7EG/A5XoNyr9AskeFGQbejtfzdWGS8fSU bq4p9LttPxVBhFVG2nQZAWNz5Neotr2chATlIXZXKMKPDnP10bvAzgfgGwyIL8ceLlxp JFl+uVC/Qnc76+yqalNJBUlZDJ1/wjvwUzuFRT5Dm1k/j8diz/GWChGCOqgqg0JMK+Dz RYnjxzpHK0U8743ioRqEDB1g8QU+r3EXz/gkwKjS+oUwAwAtvpxtamTnSUj/4X4na3pQ O//y0U0Q5eyEM6krobChrTDYFbyskaGXsxmxb3AVsfm+MXfld6/5gX1LuGg5LFELmQQj iyEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:to:from:subject :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=16VXFVlDOZNTDUAnQkMApBs8hK89WHc01+IltgagQjA=; b=is37myn+7mp8/r8d1AKmjCv/SbfU2uHq23nfKgCOzGXtoruDDp4IZCJXPra/1v8S8w c7czXaDJYIb0oIL8czenOYmliEhWU8nfmyQUVCS0UnqcyTZDGR2zvhesX0Rick8yRONR h3RNlx9NerAg4WEKABCAUKLcTN/uqJNeewTbJR+Sol991cv7XStNUEPYJWdjG+aDiLD+ RqPUUyuAhqwsU3Hj4uUghaxYPGP6X/4k0oly5i3sfqXMsQal+s/Jb3I4JnoEtlwLO54y JSyECv7iK0AgjiKNEPm7Dn9q1Bnk0/2UWmeYorSIy6jr1hSRM7Nu7Cop1OeXA0s5kWqS zy/g== X-Gm-Message-State: AFqh2koBfuq6QrSbpFo8THtFbrRVtk5a1XP/RL6x/uvuC6smMeRFZbv8 EOt+mUsdhhF9PggLFB8cGNiP2ebADmMhKLal X-Google-Smtp-Source: AMrXdXs4u10XXX8OBAHoAJckQNR+7qQSDx2soLCseCykcCN7cBbW3UpM096r6fZTjOjmf/FqpZTGHQ== X-Received: by 2002:a05:6a20:6903:b0:ad:b91d:9873 with SMTP id q3-20020a056a20690300b000adb91d9873mr7057995pzj.33.1671687660314; Wed, 21 Dec 2022 21:41:00 -0800 (PST) Received: from jeff-laptop.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id w7-20020a63f507000000b0044046aec036sm10865096pgh.81.2022.12.21.21.40.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Dec 2022 21:40:59 -0800 (PST) Message-ID: Subject: Re: Rework of collation code, extensibility From: Jeff Davis To: pgsql-hackers@postgresql.org Date: Wed, 21 Dec 2022 21:40:57 -0800 In-Reply-To: References: Content-Type: multipart/mixed; boundary="=-o0L0KMVWxKiRsRMoifVA" User-Agent: Evolution 3.44.4-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-o0L0KMVWxKiRsRMoifVA Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 2022-12-17 at 19:14 -0800, Jeff Davis wrote: > Attached is a new patch series. I think there are enough changes that > this has become more of a "rework" of the collation code rather than > just a refactoring. This is a continuation of some prior work[1][2] > in > a new thread given its new scope. Here's version 5. There are a number of fixes, and better tests, and it's passing in CI. The libc hook support is still experimental, but what's working is passing in CI, even on windows. The challenges with libc hook support are: * It obviously doesn't replace all of libc, so the separation is not as clean and there are a number of callers throughout the code that don't necessarily care about specific collations.=20 * libc relies on setlocale() / uselocale(), which is global state and not as easy to track. * More platform issues (obviously) and harder to test. --=20 Jeff Davis PostgreSQL Contributor Team - AWS --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename*0=v5-0007-Add-test-module-for-libc-collation-provider-hook.patc; filename*1=h Content-Type: text/x-patch; name="v5-0007-Add-test-module-for-libc-collation-provider-hook.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5Y2MzN2E3M2Y3MDk0YTg3MTY2MjgzNTA3NGE3NzRhY2MxMjA1ZDFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDIxIERlYyAyMDIyIDE5OjUyOjIzIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NSA3LzddIEFk ZCB0ZXN0IG1vZHVsZSBmb3IgbGliYyBjb2xsYXRpb24gcHJvdmlkZXIgaG9vay4KCi0tLQogLi4u L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlIHwgIDEwICstCiAuLi4v dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL21lc29uLmJ1aWxkICAgICAgfCAgMTAgKwogLi4uL3Rl c3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwMl9saWJjLnBsICAgIHwgMTU3ICsrKysrCiAuLi4v dC8wMDNfbGliY19taXhlZF9jb2xsYXRpb24ucGwgICAgICAgICAgICAgfCAgNjYgKysrCiAuLi4v dC8wMDRfbGliY192ZXJzaW9uLnBsICAgICAgICAgICAgICAgICAgICAgfCAgNjYgKysrCiAuLi4v dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmMgICAgICAgICAgICAgICAgfCAgIDggKy0KIC4uLi90 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaCAgICAgICAgICAgICAgICB8ICAgNCArCiAuLi4vdGVz dF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfbGliY19ob29rLmMgfCA1NTUgKysrKysrKysrKysr KysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDg3NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGli X2hvb2tzL3QvMDAyX2xpYmMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwM19saWJjX21peGVkX2NvbGxhdGlvbi5wbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzL3QvMDA0X2xpYmNfdmVyc2lvbi5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfbGliY19ob29rLmMKCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlCmluZGV4 IDA1OTQ4ZTU1NWEuLmE4MDBjOWVhNzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogTU9EVUxFX2Jp ZyA9IHRlc3RfY29sbGF0aW9uX2xpYl9ob29rcwogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCi0J dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLm8gdGVzdF9pY3VfaG9vay5vCisJdGVzdF9jb2xsYXRp b25fbGliX2hvb2tzLm8gdGVzdF9pY3VfaG9vay5vIHRlc3RfbGliY19ob29rLm8KIFBHRklMRURF U0MgPSAidGVzdF9jb2xsYXRpb25fbGliX2hvb2tzIC0gdGVzdCBjb2xsYXRpb24gcHJvdmlkZXIg bGlicmFyeSBob29rcyIKIAogRVhURU5TSU9OID0gdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzCkBA IC0yMiwzICsyMiwxMSBAQCBpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWds b2JhbC5tawogZW5kaWYKIAogZXhwb3J0IHdpdGhfaWN1CisKKyMgVE9ETyBzZXQgZW52aXJvbm1l bnQgdmFyaWFibGVzOgorIyAgZGV0ZXJtaW5lIGlmIGJ1aWx0IHdpdGggZ2xpYmMKKyMgIGRldGVy bWluZSBpZiBMQ19WRVJTSU9OX01BU0sgaXMgZGVmaW5lZAorCitpZmVxICgkKFBPUlROQU1FKSwg d2luMzIpCisJZXhwb3J0IHdpbjMyID0geWVzCitlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZAppbmRleCA1NmIzMmI2 Y2QxLi5hNTg4NzUxY2MxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29s bGF0aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZApAQCAtMiw2ICsyLDcgQEAKIAogdGVzdF9jb2xs YXRpb25fbGliX2hvb2tzX3NvdXJjZXMgPSBmaWxlcygKICAgJ3Rlc3RfY29sbGF0aW9uX2xpYl9o b29rcy5jJywKKyAgJ3Rlc3RfbGliY19ob29rLmMnLAogICAndGVzdF9pY3VfaG9vay5jJywKICkK IApAQCAtMjIsNiArMjMsOSBAQCBpbnN0YWxsX2RhdGEoCiAgIGt3YXJnczogY29udHJpYl9kYXRh X2FyZ3MsCiApCiAKK2hhdmVfbGNfdmVyc2lvbl9tYXNrID0gY2MuaGFzX2hlYWRlcl9zeW1ib2wo J2xvY2FsZS5oJywgJ0xDX1ZFUlNJT05fTUFTSycpCitnbGliYyA9IGNjLmhhc19oZWFkZXJfc3lt Ym9sKCdmZWF0dXJlcy5oJywgJ19fR0xJQkNfXycpCisKIHRlc3RzICs9IHsKICAgJ25hbWUnOiAn dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzJywKICAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2Vf ZGlyKCksCkBAIC0yOSw5ICszMywxNSBAQCB0ZXN0cyArPSB7CiAgICd0YXAnOiB7CiAgICAgJ3Rl c3RzJzogWwogICAgICAgJ3QvMDAxX2ljdS5wbCcsCisgICAgICAndC8wMDJfbGliYy5wbCcsCisg ICAgICAndC8wMDNfbGliY19taXhlZF9jb2xsYXRpb24ucGwnLAorICAgICAgJ3QvMDA0X2xpYmNf dmVyc2lvbi5wbCcsCiAgICAgXSwKICAgICAnZW52JzogewogICAgICAgJ3dpdGhfaWN1JzogaWN1 LmZvdW5kKCkgPyAneWVzJyA6ICdubycsCisgICAgICAnd2luMzInOiAoaG9zdF9zeXN0ZW0gPT0g J3dpbmRvd3MnKSA/ICd5ZXMnIDogJ25vJywKKyAgICAgICdnbGliYyc6IGdsaWJjID8gJ3llcycg OiAnbm8nLAorICAgICAgJ2hhdmVfbGNfdmVyc2lvbl9tYXNrJzogaGF2ZV9sY192ZXJzaW9uX21h c2sgPyAneWVzJyA6ICdubycsCiAgICAgfSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3QvMDAyX2xpYmMucGwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwMl9saWJjLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU0M2EwOTE2ZDMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwMl9saWJj LnBsCkBAIC0wLDAgKzEsMTU3IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz OworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnbWFpbicpOworCiskbm9kZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29u ZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICd0 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MnCit9KTsKKyRub2RlLT5zdGFydDsKKworIyBzZXR1cAor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxW0NSRUFURSBDT0xMQVRJT04gdGVzdF9h c2MgKFBST1ZJREVSPWxpYmMsIExPQ0FMRT0nQVNDJyldKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwlxcVtDUkVBVEUgQ09MTEFUSU9OIHRlc3RfZGVzYyAoUFJPVklERVI9bGliYywg TE9DQUxFPSdERVNDJyldKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVtDUkVB VEUgVEFCTEUgc3RyaW5ncyh0IHRleHQpXSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJcXFbSU5TRVJUIElOVE8gc3RyaW5ncyBWQUxVRVMgKCdhQmNEJyksICgnZkdoSScpLCAoJ3dY eVonKV0pOworCitteSAkc29ydF9hc2NfZXhwZWN0ZWQgPSAiYUJjRAorZkdoSQord1h5WiI7CisK K215ICRzb3J0X2Rlc2NfZXhwZWN0ZWQgPSAid1h5WgorZkdoSQorYUJjRCI7CisKKyMgdGVzdCBj b21wYXJpc29uCisKK215ICRjb21wYXJpc29uX2FzYyA9CisgICRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkgIHFxW1NFTEVDVCAnYUJjRCcgQ09MTEFURSB0ZXN0X2FzYyA8ICd3WHlaJyBD T0xMQVRFIHRlc3RfYXNjXSk7CitpcygkY29tcGFyaXNvbl9hc2MsICd0JywKKwknY29ycmVjdCBj b21wYXJpc29uJworKTsKKworIyB0ZXN0IGRlc2MgY29tcGFyaXNvbgorCitteSAkY29tcGFyaXNv bl9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUICdh QmNEJyBDT0xMQVRFIHRlc3RfZGVzYyA8ICd3WHlaJyBDT0xMQVRFIHRlc3RfZGVzY10pOworaXMo JGNvbXBhcmlzb25fZGVzYywgJ2YnLAorCSdjb3JyZWN0IGRlc2MgY29tcGFyaXNvbicKKyk7CisK KyMgdGVzdCBhc2Mgc29ydCB3aXRoIHRydXN0X3N0cnhmcm0gPSBmYWxzZQorCitteSAkc29ydF9h c2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRVQgdHJ1c3Rfc3Ry eGZybSA9IGZhbHNlOworICAgICAgICAgU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZIHQg Q09MTEFURSB0ZXN0X2FzY10pOworaXMoJHNvcnRfYXNjLCAkc29ydF9hc2NfZXhwZWN0ZWQsCisJ J2NvcnJlY3QgYXNjZW5kaW5nIHNvcnQgKHRydXN0X3N0cnhmcm0gPSBmYWxzZSknCispOworCisj IHRlc3QgZGVzYyBzb3J0IHdpdGggdHJ1c3Rfc3RyeGZybSA9IGZhbHNlCisKK215ICRzb3J0X2Rl c2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRVQgdHJ1c3Rfc3Ry eGZybSA9IGZhbHNlOworICAgICAgICAgU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZIHQg Q09MTEFURSB0ZXN0X2Rlc2NdKTsKK2lzKCRzb3J0X2Rlc2MsICRzb3J0X2Rlc2NfZXhwZWN0ZWQs CisJJ2NvcnJlY3QgZGVzY2VuZGluZyBzb3J0ICh0cnVzdF9zdHJ4ZnJtID0gZmFsc2UpJworKTsK KworIyB0ZXN0IGFzYyBzb3J0IHdpdGggdHJ1c3Rfc3RyeGZybSA9IHRydWUKKworbXkgJHN0cnhm cm1fYXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VUIHRydXN0 X3N0cnhmcm0gPSB0cnVlOworICAgICAgICAgU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZ IHQgQ09MTEFURSB0ZXN0X2FzY10pOworaXMoJHN0cnhmcm1fYXNjLCAkc29ydF9hc2NfZXhwZWN0 ZWQsCisJJ2NvcnJlY3QgYXNjZW5kaW5nIHNvcnQgKHRydXN0X3N0cnhmcm0gPSB0cnVlKScKKyk7 CisKKyMgdGVzdCBkZXNjIHNvcnQgd2l0aCB0cnVzdF9zdHJ4ZnJtID0gdHJ1ZQorCitteSAkc3Ry eGZybV9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VUIHRy dXN0X3N0cnhmcm0gPSB0cnVlOworICAgICAgICAgU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVS IEJZIHQgQ09MTEFURSB0ZXN0X2Rlc2NdKTsKK2lzKCRzdHJ4ZnJtX2Rlc2MsICRzb3J0X2Rlc2Nf ZXhwZWN0ZWQsCisJJ2NvcnJlY3QgZGVzY2VuZGluZyBzb3J0ICh0cnVzdF9zdHJ4ZnJtID0gdHJ1 ZSknCispOworCisjIHRlc3QgbG93ZXIvdXBwZXIKKworbXkgJHRjYXNlID0KKyAgJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVonIGNv bGxhdGUgdGVzdF9hc2MpLAorICAgICAgICAgICAgICAgIHVwcGVyKCdhQmNEZmdIaXdYeVonIGNv bGxhdGUgdGVzdF9hc2MpXSk7CitpcygkdGNhc2UsICdhYmNkZmdoaXd4eXp8QUJDREZHSElXWFla JywKKwknY29ycmVjdCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZScKKyk7CisKKyMgdGVzdCBkZXNj IGxvd2VyL3VwcGVyCisKK215ICR0Y2FzZV9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9k ZXNjKSwKKyAgICAgICAgICAgICAgICB1cHBlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3Rf ZGVzYyldKTsKK2lzKCR0Y2FzZV9kZXNjLCAnQUJDREZHSElXWFlafGFiY2RmZ2hpd3h5eicsCisJ J2NvcnJlY3QgZGVzYyBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZScKKyk7CisKK2lmICgkRU5We3dp bjMyfSBuZSAneWVzJykgeworICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIHFx W0NSRUFURSBDT0xMQVRJT04gdGVzdF9taXhlZF9hc2NfZGVzYworICAgICAgICAgKFBST1ZJREVS PWxpYmMsIExDX0NPTExBVEU9J0FTQycsIExDX0NUWVBFPSdERVNDJyldKTsKKyAgJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorICAgICBxcVtDUkVBVEUgQ09MTEFUSU9OIHRlc3RfbWl4ZWRf ZGVzY19hc2MKKyAgICAgICAgIChQUk9WSURFUj1saWJjLCBMQ19DT0xMQVRFPSdERVNDJywgTENf Q1RZUEU9J0FTQycpXSk7CisKKyAgbXkgJG1jb21wYXJpc29uX2FzYyA9CisgICAgJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUICdhQmNEJyBDT0xMQVRFIHRlc3RfbWl4 ZWRfYXNjX2Rlc2MgPAorICAgICAgICAgICAgICAgICd3WHlaJyBDT0xMQVRFIHRlc3RfbWl4ZWRf YXNjX2Rlc2NdKTsKKyAgaXMoJG1jb21wYXJpc29uX2FzYywgJ3QnLAorCSdjb3JyZWN0IG1peGVk IGFzYy9kZXNjIGNvbXBhcmlzb24nCisgICk7CisKKyAgbXkgJG1jb21wYXJpc29uX2Rlc2MgPQor ICAgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkgIHFxW1NFTEVDVCAnYUJjRCcgQ09M TEFURSB0ZXN0X21peGVkX2Rlc2NfYXNjIDwKKyAgICAgICAgICAgICAgICAnd1h5WicgQ09MTEFU RSB0ZXN0X21peGVkX2Rlc2NfYXNjXSk7CisgIGlzKCRtY29tcGFyaXNvbl9kZXNjLCAnZicsCisJ J2NvcnJlY3QgbWl4ZWQgZGVzYy9hc2MgY29tcGFyaXNvbicKKyAgKTsKKworICBteSAkbWNhc2Vf YXNjID0KKyAgICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICAgIHFxW1NFTEVDVCBs b3dlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfbWl4ZWRfYXNjX2Rlc2MpLAorICAgICAg ICAgICAgICAgICAgdXBwZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X21peGVkX2FzY19k ZXNjKV0pOworICBpcygkbWNhc2VfYXNjLCAnQUJDREZHSElXWFlafGFiY2RmZ2hpd3h5eicsCisg ICAgJ2NvcnJlY3QgY2FzZSBtaXhlZCBhc2MvZGVzYycKKyAgKTsKKworICBteSAkbWNhc2VfZGVz YyA9CisgICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgICBxcVtTRUxFQ1QgbG93 ZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X21peGVkX2Rlc2NfYXNjKSwKKyAgICAgICAg ICAgICAgICAgIHVwcGVyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9taXhlZF9kZXNjX2Fz YyldKTsKKyAgaXMoJG1jYXNlX2Rlc2MsICdhYmNkZmdoaXd4eXp8QUJDREZHSElXWFlaJywKKyAg ICAnY29ycmVjdCBjYXNlIG1peGVkIGRlc2MvYXNjJworICApOworfQorCiskbm9kZS0+c3RvcDsK K2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxh dGlvbl9saWJfaG9va3MvdC8wMDNfbGliY19taXhlZF9jb2xsYXRpb24ucGwgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwM19saWJjX21peGVkX2NvbGxhdGlv bi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yZWYxOGY3OTdjCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9v a3MvdC8wMDNfbGliY19taXhlZF9jb2xsYXRpb24ucGwKQEAgLTAsMCArMSw2NiBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjEtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KworIyBUZXN0IG1peGVkIGNvbGxhdGlvbnMgd2l0aCBkaWZmZXJpbmcgbGNfY29sbGF0ZS9sY19j dHlwZQorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OworCitpZiAoJEVOVnt3aW4zMn0gZXEgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnd2lu ZG93cyBkb2VzIG5vdCBzdXBwb3J0IG1peGVkIGxpYmMgY29sbGF0aW9ucyc7Cit9CisKK215ICRu b2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5p bml0OworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworc2hhcmVk X3ByZWxvYWRfbGlicmFyaWVzID0gJ3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcycKK30pOworJG5v ZGUtPnN0YXJ0OworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICBxcVtDUkVBVEUg Q09MTEFUSU9OIHRlc3RfbWl4ZWRfYXNjX2Rlc2MKKyAgICAgICAgIChQUk9WSURFUj1saWJjLCBM Q19DT0xMQVRFPSdBU0MnLCBMQ19DVFlQRT0nREVTQycpXSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisgICBxcVtDUkVBVEUgQ09MTEFUSU9OIHRlc3RfbWl4ZWRfZGVzY19hc2MKKyAg ICAgICAgIChQUk9WSURFUj1saWJjLCBMQ19DT0xMQVRFPSdERVNDJywgTENfQ1RZUEU9J0FTQycp XSk7CisKK215ICRtY29tcGFyaXNvbl9hc2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisgICAgcXFbU0VMRUNUICdhQmNEJyBDT0xMQVRFIHRlc3RfbWl4ZWRfYXNjX2Rlc2MgPAor ICAgICAgICAgJ3dYeVonIENPTExBVEUgdGVzdF9taXhlZF9hc2NfZGVzY10pOworaXMoJG1jb21w YXJpc29uX2FzYywgJ3QnLAorICAnY29ycmVjdCBtaXhlZCBhc2MvZGVzYyBjb21wYXJpc29uJwor KTsKKworbXkgJG1jb21wYXJpc29uX2Rlc2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisgICAgcXFbU0VMRUNUICdhQmNEJyBDT0xMQVRFIHRlc3RfbWl4ZWRfZGVzY19hc2MgPAor ICAgICAgICAgICAgICAnd1h5WicgQ09MTEFURSB0ZXN0X21peGVkX2Rlc2NfYXNjXSk7Citpcygk bWNvbXBhcmlzb25fZGVzYywgJ2YnLAorJ2NvcnJlY3QgbWl4ZWQgZGVzYy9hc2MgY29tcGFyaXNv bicKKyk7CisKK215ICRtY2FzZV9hc2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisgICAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9taXhlZF9h c2NfZGVzYyksCisgICAgICAgICAgICAgIHVwcGVyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVz dF9taXhlZF9hc2NfZGVzYyldKTsKK2lzKCRtY2FzZV9hc2MsICdBQkNERkdISVdYWVp8YWJjZGZn aGl3eHl6JywKKyAgJ2NvcnJlY3QgY2FzZSBtaXhlZCBhc2MvZGVzYycKKyk7CisKK215ICRtY2Fz ZV9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorICAgIHFxW1NFTEVDVCBs b3dlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfbWl4ZWRfZGVzY19hc2MpLAorICAgICAg ICAgICAgICB1cHBlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfbWl4ZWRfZGVzY19hc2Mp XSk7CitpcygkbWNhc2VfZGVzYywgJ2FiY2RmZ2hpd3h5enxBQkNERkdISVdYWVonLAorICAnY29y cmVjdCBjYXNlIG1peGVkIGRlc2MvYXNjJworKTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3Rp bmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzL3QvMDA0X2xpYmNfdmVyc2lvbi5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRp b25fbGliX2hvb2tzL3QvMDA0X2xpYmNfdmVyc2lvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4yMDFmYTk4ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdC8wMDRfbGliY192ZXJzaW9uLnBsCkBA IC0wLDAgKzEsNjYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBjb2xsYXRpb24gdmVyc2lvbnMgKHBsYXRm b3JtLXNwZWNpZmljKQorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOworCitteSAkdmVyc2lvbl9hc2NfZXhwZWN0ZWQ7CitteSAkdmVyc2lvbl9kZXNj X2V4cGVjdGVkOworCitpZiAoJEVOVntnbGliY30gZXEgJ3llcycpIHsKKwkkdmVyc2lvbl9hc2Nf ZXhwZWN0ZWQgPSAnMy4xNDE1OSc7CisJJHZlcnNpb25fZGVzY19leHBlY3RlZCA9ICczLjE0MTU5 JzsKK30gZWxzaWYgKCRFTlZ7aGF2ZV9sY192ZXJzaW9uX21hc2t9IGVxICd5ZXMnKSB7CisJJHZl cnNpb25fYXNjX2V4cGVjdGVkID0gJzMuMTQnOworCSR2ZXJzaW9uX2Rlc2NfZXhwZWN0ZWQgPSAn Ni4yOCc7Cit9IGVsc2lmICgkRU5We3dpbjMyfSBlcSAneWVzJykgeworCSR2ZXJzaW9uX2FzY19l eHBlY3RlZCA9ICczLjE0LDMuMTQnOworCSR2ZXJzaW9uX2Rlc2NfZXhwZWN0ZWQgPSAnNi4yOCw2 LjI4JzsKK30gZWxzZSB7CisJcGxhbiBza2lwX2FsbCA9PiAncGxhdGZvcm0gZG9lcyBub3Qgc3Vw cG9ydCBsaWJjIGNvbGxhdGlvbiB2ZXJzaW9ucyc7Cit9CisKK215ICRub2RlID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5pbml0OworJG5vZGUtPmFw cGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzID0gJ3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcycKK30pOworJG5vZGUtPnN0YXJ0OworCisj IHNldHVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXFbQ1JFQVRFIENPTExBVElP TiB0ZXN0X2FzYyAoUFJPVklERVI9bGliYywgTE9DQUxFPSdBU0MnKV0pOworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCXFxW0NSRUFURSBDT0xMQVRJT04gdGVzdF9kZXNjIChQUk9WSURF Uj1saWJjLCBMT0NBTEU9J0RFU0MnKV0pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxW0NSRUFURSBUQUJMRSBzdHJpbmdzKHQgdGV4dCldKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwlxcVtJTlNFUlQgSU5UTyBzdHJpbmdzIFZBTFVFUyAoJ2FCY0QnKSwgKCdmR2hJ JyksICgnd1h5WicpXSk7CisKKyMgY2hlY2sgdmVyc2lvbnMKKworbXkgJHBnX3ZlcnNpb24gPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxW1NFTEVDVCB2ZXJzaW9uKCldKTsKKworbXkg JHZlcnNpb25fYXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VM RUNUIGNvbGx2ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdIRVJFIGNvbGxuYW1lPSd0ZXN0X2Fz YyddKTsKK2lzKCR2ZXJzaW9uX2FzYywgJHZlcnNpb25fYXNjX2V4cGVjdGVkLAorCSJjb2xsYXRp b24gdGVzdF9hc2MgaGFzIGNvcnJlY3QgdmVyc2lvbiAkdmVyc2lvbl9hc2NfZXhwZWN0ZWQiCisp OworCitteSAkdmVyc2lvbl9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSAgcXFbU0VMRUNUIGNvbGx2ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdIRVJFIGNvbGxuYW1l PSd0ZXN0X2Rlc2MnXSk7CitpcygkdmVyc2lvbl9kZXNjLCAkdmVyc2lvbl9kZXNjX2V4cGVjdGVk LAorCSJjb2xsYXRpb24gdGVzdF9kZXNjIGhhcyBjb3JyZWN0IHZlcnNpb24gJHZlcnNpb25fZGVz Y19leHBlY3RlZCIKKyk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxh dGlvbl9saWJfaG9va3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jCmluZGV4IDU5OWVjNjEyMzkuLjU2NTA4NDBi NGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz L3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j b2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jCkBAIC05LDcgKzks NyBAQAogICogSURFTlRJRklDQVRJT04KICAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuYwogICoKLSAqIFRlc3QgaW1w bGVtZW50YXRpb24gb2YgaWN1LWxpa2UgY29sbGF0aW9uIHByb3ZpZGVyLgorICogVGVzdCBpbXBs ZW1lbnRhdGlvbnMgb2YgbGliYy1saWtlIGFuZCBpY3UtbGlrZSBjb2xsYXRpb24gcHJvdmlkZXJz LgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5j bHVkZSAidGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmgiCiAKK3N0YXRpYyBnZXRfbGliY19saWJy YXJ5X2hvb2tfdHlwZSBwcmV2X2dldF9saWJjX2xpYnJhcnlfaG9vayA9IE5VTEw7CiAjaWZkZWYg VVNFX0lDVQogc3RhdGljIGdldF9pY3VfbGlicmFyeV9ob29rX3R5cGUgcHJldl9nZXRfaWN1X2xp YnJhcnlfaG9vayA9IE5VTEw7CiAjZW5kaWYKQEAgLTM2LDggKzM3LDEzIEBAIF9QR19pbml0KHZv aWQpCiAJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykK IAkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygidGVzdF9jb2xsYXRpb25fbGliX2hvb2tzIG11c3Qg YmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKSkpOwogCisJcHJldl9nZXRf bGliY19saWJyYXJ5X2hvb2sgPSBnZXRfbGliY19saWJyYXJ5X2hvb2s7CisJZ2V0X2xpYmNfbGli cmFyeV9ob29rID0gdGVzdF9nZXRfbGliY19saWJyYXJ5OworCiAjaWZkZWYgVVNFX0lDVQogCXBy ZXZfZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBnZXRfaWN1X2xpYnJhcnlfaG9vazsKIAlnZXRfaWN1 X2xpYnJhcnlfaG9vayA9IHRlc3RfZ2V0X2ljdV9saWJyYXJ5OwogI2VuZGlmCisKKwlpbml0X2xp YmNfaG9vaygpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlv bl9saWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmggYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaAppbmRl eCBlNmVlNDU3YWIzLi45NGVhOTQzYjk3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MuaApAQCAtMjAsNiArMjAsMTAgQEAKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUu aCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCIKIAorZXh0ZXJuIHZvaWQg aW5pdF9saWJjX2hvb2sodm9pZCk7CitleHRlcm4gcGdfbGliY19saWJyYXJ5ICp0ZXN0X2dldF9s aWJjX2xpYnJhcnkoY29uc3QgY2hhciAqY29sbGF0ZSwKKwkJCQkJCQkJCQkJICBjb25zdCBjaGFy ICpjdHlwZSwKKwkJCQkJCQkJCQkJICBjb25zdCBjaGFyICp2ZXJzaW9uKTsKICNpZmRlZiBVU0Vf SUNVCiBleHRlcm4gcGdfaWN1X2xpYnJhcnkgKnRlc3RfZ2V0X2ljdV9saWJyYXJ5KGNvbnN0IGNo YXIgKmxvY2FsZSwKIAkJCQkJCQkJCQkJY29uc3QgY2hhciAqdmVyc2lvbik7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2xpYmNfaG9v ay5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9saWJj X2hvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hOGViNWQ4ZGQy Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJf aG9va3MvdGVzdF9saWJjX2hvb2suYwpAQCAtMCwwICsxLDU1NSBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHRlc3RfbGliY19ob29rLmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGNvbGxh dGlvbiBwcm92aWRlciBsaWJjIGhvb2suCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MvdGVzdF9saWJjX2hvb2suYworICoKKyAqIEltcGxlbWVudHMgYSBj dXN0b20gbGliYy1saWtlIGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGZvciB0ZXN0aW5nIHRo ZQorICogaG9va3MuIEl0IGFjY2VwdHMgYW55IGNvbGxhdGlvbiBuYW1lIHJlcXVlc3RlZC4gQWxs IGJlaGF2ZSBleGFjdGx5IGxpa2UgdGhlCisgKiAiQyIgbG9jYWxlLCBleGNlcHQgZm9yIHRoZSBs b2NhbGUgbmFtZWQgIkRFU0MiLCB3aGljaCByZXZlcnNlcyB0aGUgc29ydAorICogb3JkZXIgYW5k IHJldmVyc2VzIHVwcGVyY2FzZS9sb3dlcmNhc2UgYmVoYXZpb3IuCisgKgorICogVGhlIHZlcnNp b24gaXMgYWx3YXlzIHJlcG9ydGVkIGFzIDMuMTQxNTksIHNvIGxvYWRpbmcgaXQgd2lsbCBjYXVz ZSBhCisgKiB2ZXJzaW9uIG1pc21hdGNoIHdhcm5pbmcuCisgKgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpbmNsdWRlICJ0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaCIKKworI2lmZGVm IF9fR0xJQkNfXworI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KKyNlbmRpZgorCisjaWZk ZWYgV0lOMzIKKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjZW5kaWYKKworI2RlZmluZSBMT0NBTEVf TkFNRV9MRU4gNjQKKwordHlwZWRlZiBzdHJ1Y3QgdGVzdF9sb2NhbGVfdAoreworCWJvb2wgcmV2 ZXJzZV9zb3J0OworCWJvb2wgcmV2ZXJzZV9jYXNlOworCWNoYXIgbGNfY29sbGF0ZVtMT0NBTEVf TkFNRV9MRU5dOworCWNoYXIgbGNfY3R5cGVbTE9DQUxFX05BTUVfTEVOXTsKK30gdGVzdF9sb2Nh bGVfdDsKKworc3RhdGljIHBnX2xpYmNfbGlicmFyeSAqdGVzdF9saWJjX2xpYnJhcnkgPSBOVUxM Oworc3RhdGljIHRlc3RfbG9jYWxlX3QgY3VycmVudF9zZXRsb2NhbGUgPSB7CisJLmxjX2NvbGxh dGUgPSAiQyIsCisJLmxjX2N0eXBlID0gIkMiLAorCS5yZXZlcnNlX3NvcnQgPSBmYWxzZSwKKwku cmV2ZXJzZV9jYXNlID0gZmFsc2UKK307CisKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZuZGVm IFdJTjMyCitzdGF0aWMgdGVzdF9sb2NhbGVfdCAqY3VycmVudF91c2Vsb2NhbGUgPSAmY3VycmVu dF9zZXRsb2NhbGU7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MT0NBTEVfVAorc3Rh dGljIGxvY2FsZV90IGNfbG9jYWxlX3QgPSBOVUxMOworI2VuZGlmCisKK3ZvaWQKK2luaXRfbGli Y19ob29rKCkKK3sKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZuZGVmIFdJTjMyCisJY19sb2Nh bGVfdCA9IG5ld2xvY2FsZShMQ19BTExfTUFTSywgIkMiLCBOVUxMKTsKKyNlbHNlCisJY19sb2Nh bGVfdCA9IF9jcmVhdGVfbG9jYWxlKExDX0FMTCwgIkMiKTsKKyNlbmRpZgorI2VuZGlmCit9CisK KyNpZmRlZiBIQVZFX0xPQ0FMRV9UCitzdGF0aWMgdGVzdF9sb2NhbGVfdCAqCitjdXJyZW50X2xv Y2FsZSh2b2lkKQoreworI2lmbmRlZiBXSU4zMgorCXJldHVybiBjdXJyZW50X3VzZWxvY2FsZTsK KyNlbHNlCisJcmV0dXJuICZjdXJyZW50X3NldGxvY2FsZTsKKyNlbmRpZgorfQorI2VuZGlmCisK K3N0YXRpYyBib29sCitsb2NhbGVfaXNfcmV2ZXJzZShjb25zdCBjaGFyICpsb2NhbGUpCit7CisJ aWYgKHN0cmNtcChsb2NhbGUsICJERVNDIikgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQor CQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3Rlc3RfbGliY192ZXJz aW9uKHZvaWQpCit7CisJcmV0dXJuICIzLjE0MTU5IjsKK30KKworI2lmZGVmIFdJTjMyCitib29s Cit0ZXN0X0dldE5MU1ZlcnNpb25FeChOTFNfRlVOQ1RJT04gZnVuY3Rpb24sIExQQ1dTVFIgbHBM b2NhbGVOYW1lLAorCQkJCQkgTFBOTFNWRVJTSU9OSU5GT0VYIGxwVmVyc2lvbkluZm9ybWF0aW9u KQoreworCUFzc2VydChmdW5jdGlvbiA9PSBDT01QQVJFX1NUUklORyk7CisJaWYgKHdjc2NtcChs cExvY2FsZU5hbWUsIEwiREVTQyIpID09IDApCisJeworCQlscFZlcnNpb25JbmZvcm1hdGlvbi0+ ZHdOTFNWZXJzaW9uID0gKDYgPDwgOCkgfCAyODsKKwkJbHBWZXJzaW9uSW5mb3JtYXRpb24tPmR3 RGVmaW5lZFZlcnNpb24gPSAoNiA8PCA4KSB8IDI4OworCX0KKwllbHNlCisJeworCQlscFZlcnNp b25JbmZvcm1hdGlvbi0+ZHdOTFNWZXJzaW9uID0gKDMgPDwgOCkgfCAxNDsKKwkJbHBWZXJzaW9u SW5mb3JtYXRpb24tPmR3RGVmaW5lZFZlcnNpb24gPSAoMyA8PCA4KSB8IDE0OworCX0KKworCXJl dHVybiB0cnVlOworfQorI2VuZGlmCisKK3N0YXRpYyBjaGFyICoKK3Rlc3Rfc2V0bG9jYWxlKGlu dCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKQoreworCUFzc2VydCAoY2F0ZWdvcnkgPT0g TENfQ09MTEFURSB8fCBjYXRlZ29yeSA9PSBMQ19DVFlQRSB8fAorCQkJY2F0ZWdvcnkgPT0gTENf QUxMKTsKKworCWlmIChjYXRlZ29yeSA9PSBMQ19BTEwpCisJeworCQlpZiAobG9jYWxlKQorCQl7 CisJCQljdXJyZW50X3NldGxvY2FsZS5yZXZlcnNlX3NvcnQgPSBsb2NhbGVfaXNfcmV2ZXJzZShs b2NhbGUpOworCQkJY3VycmVudF9zZXRsb2NhbGUucmV2ZXJzZV9jYXNlID0gbG9jYWxlX2lzX3Jl dmVyc2UobG9jYWxlKTsKKwkJCXN0cm5jcHkoY3VycmVudF9zZXRsb2NhbGUubGNfY29sbGF0ZSwg bG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCQkJc3RybmNweShjdXJyZW50X3NldGxvY2FsZS5s Y19jdHlwZSwgbG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCQl9CisJCXJldHVybiBjdXJyZW50 X3NldGxvY2FsZS5sY19jb2xsYXRlOworCX0KKwllbHNlIGlmIChjYXRlZ29yeSA9PSBMQ19DT0xM QVRFKQorCXsKKwkJaWYgKGxvY2FsZSkKKwkJeworCQkJY3VycmVudF9zZXRsb2NhbGUucmV2ZXJz ZV9zb3J0ID0gbG9jYWxlX2lzX3JldmVyc2UobG9jYWxlKTsKKwkJCXN0cm5jcHkoY3VycmVudF9z ZXRsb2NhbGUubGNfY29sbGF0ZSwgbG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCQl9CisKKwkJ cmV0dXJuIGN1cnJlbnRfc2V0bG9jYWxlLmxjX2NvbGxhdGU7CisJfQorCWVsc2UgaWYgKGNhdGVn b3J5ID09IExDX0NUWVBFKQorCXsKKwkJaWYgKGxvY2FsZSkKKwkJeworCQkJY3VycmVudF9zZXRs b2NhbGUucmV2ZXJzZV9jYXNlID0gbG9jYWxlX2lzX3JldmVyc2UobG9jYWxlKTsKKwkJCXN0cm5j cHkoY3VycmVudF9zZXRsb2NhbGUubGNfY3R5cGUsIGxvY2FsZSwgTE9DQUxFX05BTUVfTEVOKTsK KwkJfQorCisJCXJldHVybiBjdXJyZW50X3NldGxvY2FsZS5sY19jdHlwZTsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKworI2lmbmRlZiBXSU4zMgorCitz dGF0aWMgbG9jYWxlX3QKK3Rlc3RfbmV3bG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAq bG9jYWxlLCBsb2NhbGVfdCBiYXNlbG9jYWxlX3QpCit7CisJdGVzdF9sb2NhbGVfdCAqbmV3bG9j OworCisJQXNzZXJ0KGJhc2Vsb2NhbGVfdCAhPSBMQ19HTE9CQUxfTE9DQUxFKTsKKwlBc3NlcnQo KHRlc3RfbG9jYWxlX3QgKikgYmFzZWxvY2FsZV90ICE9ICZjdXJyZW50X3NldGxvY2FsZSk7CisK KwlpZiAoYmFzZWxvY2FsZV90ID09IE5VTEwpCisJeworCQluZXdsb2MgPSBNZW1vcnlDb250ZXh0 QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCXNpemVvZih0ZXN0X2xvY2FsZV90KSk7 CisJCXN0cm5jcHkobmV3bG9jLT5sY19jb2xsYXRlLCAiQyIsIExPQ0FMRV9OQU1FX0xFTik7CisJ CXN0cm5jcHkobmV3bG9jLT5sY19jdHlwZSwgIkMiLCBMT0NBTEVfTkFNRV9MRU4pOworCQluZXds b2MtPnJldmVyc2Vfc29ydCA9IGZhbHNlOworCQluZXdsb2MtPnJldmVyc2VfY2FzZSA9IGZhbHNl OworCX0KKwllbHNlCisJCW5ld2xvYyA9ICh0ZXN0X2xvY2FsZV90ICopIGJhc2Vsb2NhbGVfdDsK KworCWlmICgoY2F0ZWdvcnkgJiBMQ19DT0xMQVRFX01BU0spICE9IDApCisJeworCQluZXdsb2Mt PnJldmVyc2Vfc29ydCA9IGxvY2FsZV9pc19yZXZlcnNlKGxvY2FsZSk7CisJCXN0cm5jcHkobmV3 bG9jLT5sY19jb2xsYXRlLCBsb2NhbGUsIExPQ0FMRV9OQU1FX0xFTik7CisJfQorCWlmICgoY2F0 ZWdvcnkgJiBMQ19DVFlQRV9NQVNLKSAhPSAwKQorCXsKKwkJbmV3bG9jLT5yZXZlcnNlX2Nhc2Ug PSBsb2NhbGVfaXNfcmV2ZXJzZShsb2NhbGUpOworCQlzdHJuY3B5KG5ld2xvYy0+bGNfY3R5cGUs IGxvY2FsZSwgTE9DQUxFX05BTUVfTEVOKTsKKwl9CisKKwlyZXR1cm4gKGxvY2FsZV90KSBuZXds b2M7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2ZyZWVsb2NhbGUobG9jYWxlX3QgbG9jKQorewor CUFzc2VydChsb2MgIT0gTENfR0xPQkFMX0xPQ0FMRSk7CisJQXNzZXJ0KCh0ZXN0X2xvY2FsZV90 ICopbG9jICE9ICZjdXJyZW50X3NldGxvY2FsZSk7CisJcGZyZWUobG9jKTsKK30KKworc3RhdGlj IGxvY2FsZV90Cit0ZXN0X3VzZWxvY2FsZShsb2NhbGVfdCBsb2MpCit7CisJdGVzdF9sb2NhbGVf dCAqcmVzdWx0ID0gY3VycmVudF91c2Vsb2NhbGU7CisKKwlpZiAobG9jICE9IE5VTEwpCisJewor CQlpZiAobG9jID09IExDX0dMT0JBTF9MT0NBTEUpCisJCQljdXJyZW50X3VzZWxvY2FsZSA9ICZj dXJyZW50X3NldGxvY2FsZTsKKwkJZWxzZQorCQkJY3VycmVudF91c2Vsb2NhbGUgPSAodGVzdF9s b2NhbGVfdCAqKSBsb2M7CisJfQorCisJaWYgKHJlc3VsdCA9PSAmY3VycmVudF9zZXRsb2NhbGUp CisJCXJldHVybiBMQ19HTE9CQUxfTE9DQUxFOworCWVsc2UKKwkJcmV0dXJuIChsb2NhbGVfdCkg cmVzdWx0OworfQorCisjaWZkZWYgTENfVkVSU0lPTl9NQVNLCitzdGF0aWMgY29uc3QgY2hhciAq Cit0ZXN0X3F1ZXJ5bG9jYWxlKGludCBtYXNrLCBsb2NhbGVfdCBsb2NhbGUpCit7CisJdGVzdF9s b2NhbGVfdCAqdGVzdGxvY2FsZSA9ICh0ZXN0X2xvY2FsZV90ICopbG9jYWxlOworCUFzc2VydCgo bWFzayAmIExDX1ZFUlNJT05fTUFTSykgIT0gMCk7CisJaWYgKHRlc3Rsb2NhbGUtPnJldmVyc2Vf c29ydCkKKwkJcmV0dXJuICI2LjI4IjsKKwllbHNlCisJCXJldHVybiAiMy4xNCI7Cit9CisjZW5k aWYJCQkvKiBMQ19WRVJTSU9OX01BU0sgKi8KKworI2Vsc2UJCQkvKiBXSU4zMiAqLworc3RhdGlj IGxvY2FsZV90CitfdGVzdF9jcmVhdGVfbG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAq bG9jYWxlKQoreworCXRlc3RfbG9jYWxlX3QgKm5ld2xvYzsKKworCW5ld2xvYyA9IE1lbW9yeUNv bnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQlzaXplb2YodGVzdF9sb2NhbGVf dCkpOworCXN0cm5jcHkobmV3bG9jLT5sY19jb2xsYXRlLCAiQyIsIExPQ0FMRV9OQU1FX0xFTik7 CisJc3RybmNweShuZXdsb2MtPmxjX2N0eXBlLCAiQyIsIExPQ0FMRV9OQU1FX0xFTik7CisJbmV3 bG9jLT5yZXZlcnNlX3NvcnQgPSBmYWxzZTsKKwluZXdsb2MtPnJldmVyc2VfY2FzZSA9IGZhbHNl OworCisJaWYgKGNhdGVnb3J5ID09IExDX0FMTCB8fCBjYXRlZ29yeSA9PSBMQ19DT0xMQVRFKQor CXsKKwkJaWYgKGxvY2FsZV9pc19yZXZlcnNlKGxvY2FsZSkpCisJCQluZXdsb2MtPnJldmVyc2Vf c29ydCA9IHRydWU7CisJCWVsc2UKKwkJCW5ld2xvYy0+cmV2ZXJzZV9zb3J0ID0gZmFsc2U7CisJ CXN0cm5jcHkobmV3bG9jLT5sY19jb2xsYXRlLCBsb2NhbGUsIExPQ0FMRV9OQU1FX0xFTik7CisJ fQorCWlmIChjYXRlZ29yeSA9PSBMQ19BTEwgfHwgY2F0ZWdvcnkgPT0gTENfQ1RZUEUpCisJewor CQlpZiAobG9jYWxlX2lzX3JldmVyc2UobG9jYWxlKSkKKwkJCW5ld2xvYy0+cmV2ZXJzZV9jYXNl ID0gdHJ1ZTsKKwkJZWxzZQorCQkJbmV3bG9jLT5yZXZlcnNlX2Nhc2UgPSBmYWxzZTsKKwkJc3Ry bmNweShuZXdsb2MtPmxjX2N0eXBlLCBsb2NhbGUsIExPQ0FMRV9OQU1FX0xFTik7CisJfQorCisJ cmV0dXJuIChsb2NhbGVfdCkgbmV3bG9jOworfQorI2VuZGlmCQkJLyogV0lOMzIgKi8KKworI2Vu ZGlmCQkJLyogSEFWRV9MT0NBTEVfVCAqLworCitzdGF0aWMgc2l6ZV90Cit0ZXN0X3djc3RvbWJz KGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pCit7CisJcmV0dXJuIHdj c3RvbWJzKGRlc3QsIHNyYywgbik7Cit9CisKK3N0YXRpYyBzaXplX3QKK3Rlc3RfbWJzdG93Y3Mo d2NoYXJfdCAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlyZXR1cm4gbWJz dG93Y3MoZGVzdCwgc3JjLCBuKTsKK30KKworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKyNpZmRlZiBI QVZFX1dDU1RPTUJTX0wKK3N0YXRpYyBzaXplX3QKK3Rlc3Rfd2NzdG9tYnNfbChjaGFyICpkZXN0 LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuLCBsb2NhbGVfdCBsb2MpCit7CisJcmV0dXJu IHdjc3RvbWJzKGRlc3QsIHNyYywgbik7Cit9CisjZW5kaWYKKyNpZmRlZiBIQVZFX01CU1RPV0NT X0wKK3N0YXRpYyBzaXplX3QKK3Rlc3RfbWJzdG93Y3NfbCh3Y2hhcl90ICpkZXN0LCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBuLCBsb2NhbGVfdCBsb2MpCit7CisJcmV0dXJuIG1ic3Rvd2NzKGRl c3QsIHNyYywgbik7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50Cit0ZXN0X3N0cmNv bGxfaW50ZXJuYWwoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBib29sIHJldmVyc2Up Cit7CisJaW50IHJldCA9IHN0cmNtcChzMSwgczIpOworCXJldHVybiByZXZlcnNlID8gLXJldCA6 IHJldDsKK30KKworc3RhdGljIGludAordGVzdF9zdHJjb2xsKGNvbnN0IGNoYXIgKnMxLCBjb25z dCBjaGFyICpzMikKK3sKKwlib29sIHJldmVyc2UgPSBjdXJyZW50X2xvY2FsZSgpLT5yZXZlcnNl X3NvcnQ7CisJcmV0dXJuIHRlc3Rfc3RyY29sbF9pbnRlcm5hbChzMSwgczIsIHJldmVyc2UpOwor fQorCitzdGF0aWMgaW50Cit0ZXN0X3djc2NvbGxfaW50ZXJuYWwoY29uc3Qgd2NoYXJfdCAqd3Mx LCBjb25zdCB3Y2hhcl90ICp3czIsIGJvb2wgcmV2ZXJzZSkKK3sKKwlpbnQgcmV0ID0gd2NzY21w KHdzMSwgd3MyKTsKKwlyZXR1cm4gcmV2ZXJzZSA/IC1yZXQgOiByZXQ7Cit9CitzdGF0aWMgaW50 Cit0ZXN0X3djc2NvbGwoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCit7 CisJYm9vbCByZXZlcnNlID0gY3VycmVudF9sb2NhbGUoKS0+cmV2ZXJzZV9zb3J0OworCXJldHVy biB0ZXN0X3djc2NvbGxfaW50ZXJuYWwod3MxLCB3czIsIHJldmVyc2UpOworfQorCitzdGF0aWMg c2l6ZV90Cit0ZXN0X3N0cnhmcm1faW50ZXJuYWwoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBz aXplX3QgbiwgYm9vbCByZXZlcnNlKQoreworCXNpemVfdAkJCSByZXN1bHRfc2l6ZSA9IHN0cmxl bihzMikgKyAxOworCisJaWYgKG4gPiByZXN1bHRfc2l6ZSkKKwl7CisJCXN0cm5jcHkoczEsIHMy LCBuKTsKKwkJczFbcmVzdWx0X3NpemVdID0gJ1wwJzsKKworCQlpZiAocmV2ZXJzZSkKKwkJewor CQkJdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopczE7CisJCQlmb3IgKGlu dCBpID0gMDsgaSA8IHJlc3VsdF9zaXplOyBpKyspCisJCQkJZGVzdFtpXSBePSAodW5zaWduZWQg Y2hhcikgMHhGRjsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHRfc2l6ZTsKK30KKworc3RhdGlj IHNpemVfdAordGVzdF9zdHJ4ZnJtKGNoYXIgKnMxLCBjb25zdCBjaGFyICogczIsIHNpemVfdCBu KQoreworCWJvb2wgcmV2ZXJzZSA9IGN1cnJlbnRfbG9jYWxlKCktPnJldmVyc2Vfc29ydDsKKwly ZXR1cm4gdGVzdF9zdHJ4ZnJtX2ludGVybmFsKHMxLCBzMiwgbiwgcmV2ZXJzZSk7Cit9CisKKyNp ZmRlZiBIQVZFX0xPQ0FMRV9UCitzdGF0aWMgaW50Cit0ZXN0X3N0cmNvbGxfbChjb25zdCBjaGFy ICpzMSwgY29uc3QgY2hhciAqczIsIGxvY2FsZV90IGxvYykKK3sKKwl0ZXN0X2xvY2FsZV90ICp0 ZXN0bG9jYWxlID0gKHRlc3RfbG9jYWxlX3QgKilsb2M7CisJYm9vbCByZXZlcnNlID0gdGVzdGxv Y2FsZS0+cmV2ZXJzZV9zb3J0OworCXJldHVybiB0ZXN0X3N0cmNvbGxfaW50ZXJuYWwoczEsIHMy LCByZXZlcnNlKTsKK30KKworc3RhdGljIGludAordGVzdF93Y3Njb2xsX2woY29uc3Qgd2NoYXJf dCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIGxvY2FsZV90IGxvY2FsZSkKK3sKKwl0ZXN0X2xv Y2FsZV90ICp0ZXN0bG9jYWxlID0gKHRlc3RfbG9jYWxlX3QgKikgbG9jYWxlOworCWJvb2wgcmV2 ZXJzZSA9IHRlc3Rsb2NhbGUtPnJldmVyc2Vfc29ydDsKKwlyZXR1cm4gdGVzdF93Y3Njb2xsX2lu dGVybmFsKHdzMSwgd3MyLCByZXZlcnNlKTsKK30KKworc3RhdGljIHNpemVfdAordGVzdF9zdHJ4 ZnJtX2woY2hhciAqczEsIGNvbnN0IGNoYXIgKiBzMiwgc2l6ZV90IG4sIGxvY2FsZV90IGxvYykK K3sKKwl0ZXN0X2xvY2FsZV90ICp0ZXN0bG9jYWxlID0gKHRlc3RfbG9jYWxlX3QgKikgbG9jOwor CWJvb2wgcmV2ZXJzZSA9IHRlc3Rsb2NhbGUtPnJldmVyc2Vfc29ydDsKKwlyZXR1cm4gdGVzdF9z dHJ4ZnJtX2ludGVybmFsKHMxLCBzMiwgbiwgcmV2ZXJzZSk7Cit9CisjZW5kaWYJCQkgLyogSEFW RV9MT0NBTEVfVCAqLworCitzdGF0aWMgaW50Cit0ZXN0X2Nhc2VfaW50ZXJuYWwoaW50IGMsIGJv b2wgdG91cHBlcikKK3sKKwlpZiAodG91cHBlciAmJiAoJ2EnIDw9IGMgJiYgYyA8PSAneicpKQor CQlyZXR1cm4gYyAtICgnYScgLSAnQScpOworCWVsc2UgaWYgKCF0b3VwcGVyICYmICgnQScgPD0g YyAmJiBjIDw9ICdaJykpCisJCXJldHVybiBjICsgKCdhJyAtICdBJyk7CisJZWxzZQorCQlyZXR1 cm4gYzsKK30KKworc3RhdGljIGludAordGVzdF90b2xvd2VyKGludCBjKQoreworCWJvb2wgcmV2 ZXJzZSA9IGN1cnJlbnRfbG9jYWxlKCktPnJldmVyc2VfY2FzZTsKKwlyZXR1cm4gdGVzdF9jYXNl X2ludGVybmFsKGMsIHJldmVyc2UgPyB0cnVlIDogZmFsc2UpOworfQorCitzdGF0aWMgaW50Cit0 ZXN0X3RvdXBwZXIoaW50IGMpCit7CisJYm9vbCByZXZlcnNlID0gY3VycmVudF9sb2NhbGUoKS0+ cmV2ZXJzZV9jYXNlOworCXJldHVybiB0ZXN0X2Nhc2VfaW50ZXJuYWwoYywgcmV2ZXJzZSA/IGZh bHNlIDogdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaXN3YWxudW1faW50ZXJuYWwod2lu dF90IHdjKQoreworCWlmICgoJ0EnIDw9IHdjICYmIHdjIDw9ICdaJykgfHwKKwkJKCdhJyA8PSB3 YyAmJiB3YyA8PSAneicpIHx8CisJCSgnMCcgPD0gd2MgJiYgd2MgPD0gJzknKSkKKwkJcmV0dXJu IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfaXN3YWxudW0od2ludF90IHdj KQoreworCXJldHVybiB0ZXN0X2lzd2FsbnVtX2ludGVybmFsKHdjKTsKK30KKworc3RhdGljIHdp bnRfdAordGVzdF93Y2FzZV9pbnRlcm5hbCh3aW50X3Qgd2MsIGJvb2wgdG91cHBlcikKK3sKKwlp ZiAodG91cHBlciAmJiAoJ2EnIDw9IHdjICYmIHdjIDw9ICd6JykpCisJCXJldHVybiB3YyAtICgn YScgLSAnQScpOworCWVsc2UgaWYgKCF0b3VwcGVyICYmICgnQScgPD0gd2MgJiYgd2MgPD0gJ1on KSkKKwkJcmV0dXJuIHdjICsgKCdhJyAtICdBJyk7CisJZWxzZQorCQlyZXR1cm4gd2M7Cit9CisK K3N0YXRpYyB3aW50X3QKK3Rlc3RfdG93bG93ZXIod2ludF90IHdjKQoreworCWJvb2wgcmV2ZXJz ZSA9IGN1cnJlbnRfbG9jYWxlKCktPnJldmVyc2VfY2FzZTsKKwlyZXR1cm4gdGVzdF93Y2FzZV9p bnRlcm5hbCh3YywgcmV2ZXJzZSA/IHRydWUgOiBmYWxzZSk7Cit9CisKK3N0YXRpYyB3aW50X3QK K3Rlc3RfdG93dXBwZXIod2ludF90IHdjKQoreworCWJvb2wgcmV2ZXJzZSA9IGN1cnJlbnRfbG9j YWxlKCktPnJldmVyc2VfY2FzZTsKKwlyZXR1cm4gdGVzdF93Y2FzZV9pbnRlcm5hbCh3YywgcmV2 ZXJzZSA/IGZhbHNlIDogdHJ1ZSk7Cit9CisKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCitzdGF0aWMg aW50Cit0ZXN0X3RvbG93ZXJfbChpbnQgYywgbG9jYWxlX3QgbG9jYWxlKQoreworCXRlc3RfbG9j YWxlX3QgKnRlc3Rsb2NhbGUgPSAodGVzdF9sb2NhbGVfdCAqKSBsb2NhbGU7CisJYm9vbCByZXZl cnNlID0gdGVzdGxvY2FsZS0+cmV2ZXJzZV9jYXNlOworCXJldHVybiB0ZXN0X2Nhc2VfaW50ZXJu YWwoYywgcmV2ZXJzZSA/IHRydWUgOiBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3RfdG91 cHBlcl9sKGludCBjLCBsb2NhbGVfdCBsb2NhbGUpCit7CisJdGVzdF9sb2NhbGVfdCAqdGVzdGxv Y2FsZSA9ICh0ZXN0X2xvY2FsZV90ICopIGxvY2FsZTsKKwlib29sIHJldmVyc2UgPSB0ZXN0bG9j YWxlLT5yZXZlcnNlX2Nhc2U7CisJcmV0dXJuIHRlc3RfY2FzZV9pbnRlcm5hbChjLCByZXZlcnNl ID8gZmFsc2UgOiB0cnVlKTsKK30KKworc3RhdGljIGludAordGVzdF9pc3dhbG51bV9sKHdpbnRf dCB3YywgbG9jYWxlX3QgbG9jYWxlKQoreworCXJldHVybiB0ZXN0X2lzd2FsbnVtX2ludGVybmFs KHdjKTsKK30KKworc3RhdGljIHdpbnRfdAordGVzdF90b3dsb3dlcl9sKHdpbnRfdCB3YywgbG9j YWxlX3QgbG9jYWxlKQoreworCXRlc3RfbG9jYWxlX3QgKnRlc3Rsb2NhbGUgPSAodGVzdF9sb2Nh bGVfdCAqKSBsb2NhbGU7CisJYm9vbCByZXZlcnNlID0gdGVzdGxvY2FsZS0+cmV2ZXJzZV9jYXNl OworCXJldHVybiB0ZXN0X3djYXNlX2ludGVybmFsKHdjLCByZXZlcnNlID8gdHJ1ZSA6IGZhbHNl KTsKK30KKworc3RhdGljIHdpbnRfdAordGVzdF90b3d1cHBlcl9sKHdpbnRfdCB3YywgbG9jYWxl X3QgbG9jYWxlKQoreworCXRlc3RfbG9jYWxlX3QgKnRlc3Rsb2NhbGUgPSAodGVzdF9sb2NhbGVf dCAqKSBsb2NhbGU7CisJYm9vbCByZXZlcnNlID0gdGVzdGxvY2FsZS0+cmV2ZXJzZV9jYXNlOwor CXJldHVybiB0ZXN0X3djYXNlX2ludGVybmFsKHdjLCByZXZlcnNlID8gZmFsc2UgOiB0cnVlKTsK K30KKyNlbmRpZgkJCSAvKiBIQVZFX0xPQ0FMRV9UICovCisKK3BnX2xpYmNfbGlicmFyeSAqCit0 ZXN0X2dldF9saWJjX2xpYnJhcnkoY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5 cGUsCisJCQkJCSAgY29uc3QgY2hhciAqdmVyc2lvbikKK3sKKwlwZ19saWJjX2xpYnJhcnkgKmxp YiA9IE5VTEw7CisKKwlpZiAodGVzdF9saWJjX2xpYnJhcnkgIT0gTlVMTCkKKwkJcmV0dXJuIHRl c3RfbGliY19saWJyYXJ5OworCisJZXJlcG9ydChMT0csIChlcnJtc2coImxvYWRpbmcgY3VzdG9t IGxpYmMgcHJvdmlkZXIgZm9yIHRlc3RfY29sbGF0aW9uX2xpYl9ob29rcyIpKSk7CisKKwlsaWIg PSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihwZ19saWJj X2xpYnJhcnkpKTsKKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKKwlsaWItPmxpYmNfdmVyc2lvbiA9 IHRlc3RfbGliY192ZXJzaW9uOworI2VsaWYgZGVmaW5lZChXSU4zMikKKwlsaWItPkdldE5MU1Zl cnNpb25FeCA9IHRlc3RfR2V0TkxTVmVyc2lvbkV4OworI2VuZGlmCisJbGliLT5jX3NldGxvY2Fs ZSA9IHRlc3Rfc2V0bG9jYWxlOworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKyNpZm5kZWYgV0lOMzIK KwlsaWItPmNfbmV3bG9jYWxlID0gdGVzdF9uZXdsb2NhbGU7CisJbGliLT5jX2ZyZWVsb2NhbGUg PSB0ZXN0X2ZyZWVsb2NhbGU7CisJbGliLT5jX3VzZWxvY2FsZSA9IHRlc3RfdXNlbG9jYWxlOwor I2lmZGVmIExDX1ZFUlNJT05fTUFTSworCWxpYi0+Y19xdWVyeWxvY2FsZSA9IHRlc3RfcXVlcnls b2NhbGU7CisjZW5kaWYKKyNlbHNlCisJbGliLT5fY3JlYXRlX2xvY2FsZSA9IF90ZXN0X2NyZWF0 ZV9sb2NhbGU7CisjZW5kaWYKKyNlbmRpZgorCWxpYi0+Y193Y3N0b21icyA9IHRlc3Rfd2NzdG9t YnM7CisJbGliLT5jX21ic3Rvd2NzID0gdGVzdF9tYnN0b3djczsKKyNpZmRlZiBIQVZFX0xPQ0FM RV9UCisjaWZkZWYgSEFWRV9XQ1NUT01CU19MCisJbGliLT5jX3djc3RvbWJzX2wgPSB0ZXN0X3dj c3RvbWJzX2w7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01CU1RPV0NTX0wKKwlsaWItPmNfbWJzdG93 Y3NfbCA9IHRlc3RfbWJzdG93Y3NfbDsKKyNlbmRpZgorI2VuZGlmCisJbGliLT5jX3N0cmNvbGwg PSB0ZXN0X3N0cmNvbGw7CisJbGliLT5jX3djc2NvbGwgPSB0ZXN0X3djc2NvbGw7CisJbGliLT5j X3N0cnhmcm0gPSB0ZXN0X3N0cnhmcm07CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCWxpYi0+Y19z dHJjb2xsX2wgPSB0ZXN0X3N0cmNvbGxfbDsKKwlsaWItPmNfd2NzY29sbF9sID0gdGVzdF93Y3Nj b2xsX2w7CisJbGliLT5jX3N0cnhmcm1fbCA9IHRlc3Rfc3RyeGZybV9sOworI2VuZGlmCisJbGli LT5jX3RvbG93ZXIgPSB0ZXN0X3RvbG93ZXI7CisJbGliLT5jX3RvdXBwZXIgPSB0ZXN0X3RvdXBw ZXI7CisJbGliLT5jX2lzd2FsbnVtID0gdGVzdF9pc3dhbG51bTsKKwlsaWItPmNfdG93bG93ZXIg PSB0ZXN0X3Rvd2xvd2VyOworCWxpYi0+Y190b3d1cHBlciA9IHRlc3RfdG93dXBwZXI7CisjaWZk ZWYgSEFWRV9MT0NBTEVfVAorCWxpYi0+Y190b2xvd2VyX2wgPSB0ZXN0X3RvbG93ZXJfbDsKKwls aWItPmNfdG91cHBlcl9sID0gdGVzdF90b3VwcGVyX2w7CisJbGliLT5jX2lzd2FsbnVtX2wgPSB0 ZXN0X2lzd2FsbnVtX2w7CisJbGliLT5jX3Rvd2xvd2VyX2wgPSB0ZXN0X3Rvd2xvd2VyX2w7CisJ bGliLT5jX3Rvd3VwcGVyX2wgPSB0ZXN0X3Rvd3VwcGVyX2w7CisjZW5kaWYKKworCXRlc3RfbGli Y19saWJyYXJ5ID0gbGliOworCXJldHVybiBsaWI7Cit9Ci0tIAoyLjM0LjEKCg== --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename*0=v5-0006-Support-multiple-libc-collation-provider-librarie.pat; filename*1=ch Content-Type: text/x-patch; name="v5-0006-Support-multiple-libc-collation-provider-librarie.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4M2E0ZjRkMWE0YTg4NTA3NTQ4OGY0MDBjYzJiNzI0OTQ5NWM1NjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDE0IERlYyAyMDIyIDE1OjEyOjM1IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NSA2LzddIFN1 cHBvcnQgbXVsdGlwbGUgbGliYyBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFyaWVzLgoKSW50cm9k dWNlIHN0cnVjdHVyZSBwZ19saWJjX2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRvIGVh Y2gKcmVxdWlyZWQgbGliYyBtZXRob2QgcmVsYXRlZCB0byBsb2NhbGVfdCwgZW5jb2RpbmcsIGNv bGxhdGlvbiwgb3IKY3R5cGUuIFN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19sb2NhbGVfdC4gRWFj aCBjYWxsIHRvIG9uZSBvZiB0aGVzZQpsaWJjIGZ1bmN0aW9ucyBpbnN0ZWFkIGdvZXMgdGhyb3Vn aCB0aGlzIHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQg YnkgYSBub24tYnVpbHRpbiBsaWJjIGxpYnJhcnkuCgpPZmZlciBhIGhvb2sgdG8gYWxsb3cgYW4g ZXh0ZW5zaW9uIHRvIGNvbnRyb2wgd2hpY2ggbGliYyBsaWJyYXJ5CmlzIGxvYWRlZC4KCkFkZHMg YSB0ZXN0IG1vZHVsZSB0byB0ZXN0IHRoZSBob29rIGZ1bmN0aW9uYWxpdHkuCgpUT0RPOiBsb29z ZSBlbmRzIGluIHJlZ2V4IGNvZGUgYW5kIHBvc3NpYmx5IG90aGVyIHBsYWNlcyB3aGVyZSBsaWJj CmZ1bmN0aW9ucyBhcmUgY2FsbGVkIGRpcmVjdGx5LgoKQXV0aG9yOiBKZWZmIERhdmlzCi0tLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAgNTAgKysrKystLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgfCAxOTkgKysrKysrKysrKysrKysr KysrKy0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmggfCAgODUg KysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjc0IGluc2VydGlvbnMoKyksIDYwIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDdmMzE4ZmUyYzcuLmU5 MDIwZmVmMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNjksNyArNjksNiBA QAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPGxpbWl0 cy5oPgotI2luY2x1ZGUgPHdjdHlwZS5oPgogCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUgPHVu aWNvZGUvdXN0cmluZy5oPgpAQCAtMTcyOSwxMCArMTcyOCwxNiBAQCBzdHJfdG9sb3dlcihjb25z dCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsKICNpZmRlZiBI QVZFX0xPQ0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2No YXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGli Yy5sdCk7CisJCQkJCXsKKwkJCQkJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElC KG15bG9jYWxlKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gbGliYy0+Y190b3dsb3dl cl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJ fQogCQkJCQllbHNlCiAjZW5kaWYKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93 ZXIod29ya3NwYWNlW2N1cnJfY2hhcl0pOworCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkg KmxpYmMgPSBnZXRfZGVmYXVsdF9saWJjX2xpYnJhcnkoKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJy X2NoYXJdID0gbGliYy0+Y190b3dsb3dlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CisJCQkJCX0K IAkJCQl9CiAKIAkJCQkvKgpAQCAtMTc2Miw3ICsxNzY3LDExIEBAIHN0cl90b2xvd2VyKGNvbnN0 IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJewogI2lmZGVmIEhB VkVfTE9DQUxFX1QKIAkJCQkJaWYgKG15bG9jYWxlKQotCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVu c2lnbmVkIGNoYXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJeworCQkJCQkJ cGdfbGliY19saWJyYXJ5ICpsaWJjID0gUEdfTElCQ19MSUIobXlsb2NhbGUpOworCQkJCQkJKnAg PSBsaWJjLT5jX3RvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgKnAsCisJCQkJCQkJCQkJCSAgIG15 bG9jYWxlLT5pbmZvLmxpYmMubHQpOworCQkJCQl9CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJ KnAgPSBwZ190b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSAqcCk7CkBAIC0xODUyLDEwICsxODYxLDE2 IEBAIHN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xs aWQpCiAJCQkJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCQkJaWYgKG15bG9jYWxlKQotCQkJ CQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJd LCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJeworCQkJCQkJcGdfbGliY19saWJyYXJ5 ICpsaWJjID0gUEdfTElCQ19MSUIobXlsb2NhbGUpOworCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hh cl0gPSBsaWJjLT5jX3Rvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5p bmZvLmxpYmMubHQpOworCQkJCQl9CiAJCQkJCWVsc2UKICNlbmRpZgotCQkJCQkJd29ya3NwYWNl W2N1cnJfY2hhcl0gPSB0b3d1cHBlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CisJCQkJCXsKKwkJ CQkJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IGdldF9kZWZhdWx0X2xpYmNfbGlicmFyeSgpOwor CQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSBsaWJjLT5jX3Rvd3VwcGVyKHdvcmtzcGFjZVtj dXJyX2NoYXJdKTsKKwkJCQkJfQogCQkJCX0KIAogCQkJCS8qCkBAIC0xODg1LDcgKzE5MDAsMTEg QEAgc3RyX3RvdXBwZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lkIGNvbGxp ZCkKIAkJCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2NhbGUpCi0JCQkJ CQkqcCA9IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmxpYmMu bHQpOworCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkgKmxpYmMgPSBQR19MSUJDX0xJQiht eWxvY2FsZSk7CisJCQkJCQkqcCA9IGxpYmMtPmNfdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAq cCwKKwkJCQkJCQkJCQkJICAgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJCQkJCX0KIAkJCQkJ ZWxzZQogI2VuZGlmCiAJCQkJCQkqcCA9IHBnX3RvdXBwZXIoKHVuc2lnbmVkIGNoYXIpICpwKTsK QEAgLTE5NzcsMTkgKzE5OTYsMjEgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6 ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQkJCWlmICht eWxvY2FsZSkKIAkJCQkJeworCQkJCQkJcGdfbGliY19saWJyYXJ5ICpsaWJjID0gUEdfTElCQ19M SUIobXlsb2NhbGUpOwogCQkJCQkJaWYgKHdhc2FsbnVtKQotCQkJCQkJCXdvcmtzcGFjZVtjdXJy X2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8u bGliYy5sdCk7CisJCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSBsaWJjLT5jX3Rvd2xvd2Vy X2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQkJ ZWxzZQotCQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXJfbCh3b3Jrc3BhY2Vb Y3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJCQkJCQkJd29ya3NwYWNlW2N1 cnJfY2hhcl0gPSBsaWJjLT5jX3Rvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9j YWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQkJd2FzYWxudW0gPSBpc3dhbG51bV9sKHdvcmtzcGFj ZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJfQogCQkJCQllbHNl CiAjZW5kaWYKIAkJCQkJeworCQkJCQkJcGdfbGliY19saWJyYXJ5ICpsaWJjID0gZ2V0X2RlZmF1 bHRfbGliY19saWJyYXJ5KCk7CiAJCQkJCQlpZiAod2FzYWxudW0pCi0JCQkJCQkJd29ya3NwYWNl W2N1cnJfY2hhcl0gPSB0b3dsb3dlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CisJCQkJCQkJd29y a3NwYWNlW2N1cnJfY2hhcl0gPSBsaWJjLT5jX3Rvd2xvd2VyKHdvcmtzcGFjZVtjdXJyX2NoYXJd KTsKIAkJCQkJCWVsc2UKLQkJCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyKHdv cmtzcGFjZVtjdXJyX2NoYXJdKTsKKwkJCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IGxpYmMt PmNfdG93dXBwZXIod29ya3NwYWNlW2N1cnJfY2hhcl0pOwogCQkJCQkJd2FzYWxudW0gPSBpc3dh bG51bSh3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CiAJCQkJCX0KIAkJCQl9CkBAIC0yMDIyLDEwICsy MDQzLDEzIEBAIHN0cl9pbml0Y2FwKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9p ZCBjb2xsaWQpCiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2NhbGUpCiAJCQkJ CXsKKwkJCQkJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKG15bG9jYWxlKTsK IAkJCQkJCWlmICh3YXNhbG51bSkKLQkJCQkJCQkqcCA9IHRvbG93ZXJfbCgodW5zaWduZWQgY2hh cikgKnAsIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOworCQkJCQkJCSpwID0gbGliYy0+Y190b2xv d2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLAorCQkJCQkJCQkJCQkJICAgbXlsb2NhbGUtPmluZm8u bGliYy5sdCk7CiAJCQkJCQllbHNlCi0JCQkJCQkJKnAgPSB0b3VwcGVyX2woKHVuc2lnbmVkIGNo YXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJCQkqcCA9IGxpYmMtPmNfdG91 cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwKKwkJCQkJCQkJCQkJCSAgIG15bG9jYWxlLT5pbmZv LmxpYmMubHQpOwogCQkJCQkJd2FzYWxudW0gPSBpc2FsbnVtX2woKHVuc2lnbmVkIGNoYXIpICpw LCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJfQogCQkJCQllbHNlCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlLmMKaW5kZXggZjY1Y2QyMmZiZC4uZjMwYzQ2Mzg4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGUuYwpAQCAtMTE1LDE5ICsxMTUsMTkgQEAgY2hhcgkgICAqbG9jYWxpemVk X2Z1bGxfbW9udGhzWzEyICsgMV07CiAvKgogICogVGhlIHByZWNpc2UgdmVyc2lvbiBvZiBhIGNv bGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGlzIGltcG9ydGFudCwgYmVjYXVzZQogICogc3VidGxl IGNoYW5nZXMgaW4gY29sbGF0aW9uIGJldHdlZW4gbGlicmFyeSB2ZXJzaW9ucyBjYW4gY29ycnVw dAotICogaW5kZXhlcy4gVGhpcyBob29rIGFsbG93cyBjb250cm9sIG92ZXIgaG93IGNvbGxhdGlv biBwcm92aWRlciBsaWJyYXJpZXMgYXJlCi0gKiBsb2FkZWQuCisgKiBpbmRleGVzLiBUaGVzZSBo b29rcyBhbGxvd3MgY29udHJvbCBvdmVyIGhvdyBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFyaWVz CisgKiBhcmUgbG9hZGVkLgogICoKICAqIElmIHRoZSBob29rIGlzIG5vdCBzZXQsIG9yIGlmIGl0 IHJldHVybnMgTlVMTCwgUG9zdGdyZXMgY29uc3RydWN0cyB0aGUKLSAqIHBnX2ljdV9saWJyYXJ5 IHN0cnVjdHVyZSBmcm9tIHRoZSBzeW1ib2xzIFBvc3RncmVzIGlzIGxpbmtlZCB3aXRoIGF0IGJ1 aWxkCi0gKiB0aW1lLgorICogcGdfbGliY19saWJyYXJ5IG9yIHBnX2ljdV9saWJyYXJ5IHN0cnVj dHVyZXMgZnJvbSB0aGUgc3ltYm9scyBQb3N0Z3JlcyBpcworICogbGlua2VkIHdpdGggYXQgYnVp bGQgdGltZS4KICAqCi0gKiBJZiB0aGUgaG9vayBpcyBzZXQsIGl0IGNhbiBpbnN0ZWFkIGNvbnN0 cnVjdCB0aGUgcGdfaWN1X2xpYnJhcnkgc3RydWN0dXJlCi0gKiB1c2luZyBjdXN0b20gbG9naWMu IE9yZGluYXJpbHksIHRoaXMgY3VzdG9tIGxvZ2ljIHdvdWxkIGludm9sdmUgZmluZGluZyBhCi0g KiBzcGVjaWZpYyBrbm93biB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFy eSwgYW5kIGR5bmFtaWNhbGx5Ci0gKiBsb2FkaW5nIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSWYg dGhlIGNvbGxhdGlvbiB2ZXJzaW9uIG9idGFpbmVkIGZyb20gdGhlCi0gKiBsaWJyYXJ5IGRvZXMg bm90IG1hdGNoIHRoZSBjb2xsYXRpb24gdmVyc2lvbiByZWNvcmRlZCBpbiB0aGUgY2F0YWxvZywK LSAqIFBvc3RncmVzIHdpbGwgaXNzdWUgYSBXQVJOSU5HLgorICogSWYgdGhlIGhvb2sgaXMgc2V0 LCBpdCBjYW4gaW5zdGVhZCBjb25zdHJ1Y3QgdGhlIHBnX2xpYmNfbGlicmFyeSBvcgorICogcGdf aWN1X2xpYnJhcnkgc3RydWN0dXJlcyB1c2luZyBjdXN0b20gbG9naWMuIE9yZGluYXJpbHksIHRo aXMgY3VzdG9tIGxvZ2ljCisgKiB3b3VsZCBpbnZvbHZlIGZpbmRpbmcgYSBzcGVjaWZpYyBrbm93 biB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIKKyAqIGxpYnJhcnksIGFuZCBkeW5h bWljYWxseSBsb2FkaW5nIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gSWYgdGhlIGNvbGxhdGlvbgor ICogdmVyc2lvbiBvYnRhaW5lZCBmcm9tIHRoZSBsaWJyYXJ5IGRvZXMgbm90IG1hdGNoIHRoZSBj b2xsYXRpb24gdmVyc2lvbgorICogcmVjb3JkZWQgaW4gdGhlIGNhdGFsb2csIFBvc3RncmVzIHdp bGwgaXNzdWUgYSBXQVJOSU5HLgogICoKICAqIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgbXVzdCBi ZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5kIHRoZQogICogYXNzb2NpYXRlZCBz eW1ib2xzIG11c3QgcmVtYWluIHZhbGlkIHBlcm1hbmVudGx5LiBJdCdzIGV4cGVjdGVkIHRoYXQg dGhlCkBAIC0xMzksMTAgKzEzOSwxMiBAQCBjaGFyCSAgICpsb2NhbGl6ZWRfZnVsbF9tb250aHNb MTIgKyAxXTsKICAqIGNvbnNpZGVyIHdoYXQgb3RoZXIgaW5mb3JtYXRpb24gY2FuIGJlIHByb3Zp ZGVkIHRvIGFsbG93IGZvciBncmVhdGVyCiAgKiBjb250cm9sIG92ZXIgd2hpY2ggbGlicmFyeSBp cyBsb2FkZWQuCiAgKi8KK2dldF9saWJjX2xpYnJhcnlfaG9va190eXBlIGdldF9saWJjX2xpYnJh cnlfaG9vayA9IE5VTEw7CiAjaWZkZWYgVVNFX0lDVQogZ2V0X2ljdV9saWJyYXJ5X2hvb2tfdHlw ZSBnZXRfaWN1X2xpYnJhcnlfaG9vayA9IE5VTEw7CiAjZW5kaWYKIAorc3RhdGljIHBnX2xpYmNf bGlicmFyeSAqYnVpbHRpbl9saWJjX2xpYnJhcnkgPSBOVUxMOwogI2lmZGVmIFVTRV9JQ1UKIHN0 YXRpYyBwZ19pY3VfbGlicmFyeSAqYnVpbHRpbl9pY3VfbGlicmFyeSA9IE5VTEw7CiAjZW5kaWYK QEAgLTE3Myw2ICsxNzUsNyBAQCBzdGF0aWMgY2hhciAqSXNvTG9jYWxlTmFtZShjb25zdCBjaGFy ICopOwogICogRGF0YWJhc2UgZGVmYXVsdCBsb2NhbGUuCiAgKi8KIHN0YXRpYyBwZ19sb2NhbGVf dCBkZWZhdWx0X2xvY2FsZSA9IE5VTEw7CitzdGF0aWMgcGdfbGliY19saWJyYXJ5ICpkZWZhdWx0 X2xpYmMgPSBOVUxMOwogI2lmZGVmIFVTRV9JQ1UKIHN0YXRpYyBwZ19pY3VfbGlicmFyeSAqZGVm YXVsdF9pY3UgPSBOVUxMOwogI2VuZGlmCkBAIC0xMzkyLDcgKzEzOTUsNyBAQCBsY19jb2xsYXRl X2lzX2MoT2lkIGNvbGxhdGlvbikKIAogCQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gKGJv b2wpIHJlc3VsdDsKLQkJbG9jYWxlcHRyID0gc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpOwor CQlsb2NhbGVwdHIgPSBkZWZhdWx0X2xpYmMtPmNfc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwp OwogCQlpZiAoIWxvY2FsZXB0cikKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIExDX0NPTExBVEUg c2V0dGluZyIpOwogCkBAIC0xNDQ1LDcgKzE0NDgsNyBAQCBsY19jdHlwZV9pc19jKE9pZCBjb2xs YXRpb24pCiAKIAkJaWYgKHJlc3VsdCA+PSAwKQogCQkJcmV0dXJuIChib29sKSByZXN1bHQ7Ci0J CWxvY2FsZXB0ciA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7CisJCWxvY2FsZXB0ciA9IGRl ZmF1bHRfbGliYy0+Y19zZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOwogCQlpZiAoIWxvY2FsZXB0 cikKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIExDX0NUWVBFIHNldHRpbmciKTsKIApAQCAtMTUw Myw2ICsxNTA2LDgyIEBAIHJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb25zdCBjaGFyICpsb2Nh bGVuYW1lKQogfQogI2VuZGlmCQkJCQkJCS8qIEhBVkVfTE9DQUxFX1QgKi8KIAorc3RhdGljIHBn X2xpYmNfbGlicmFyeSAqCitnZXRfYnVpbHRpbl9saWJjX2xpYnJhcnkoKQoreworCXBnX2xpYmNf bGlicmFyeSAqbGliID0gTlVMTDsKKworCWlmIChidWlsdGluX2xpYmNfbGlicmFyeSAhPSBOVUxM KQorCQlyZXR1cm4gYnVpbHRpbl9saWJjX2xpYnJhcnk7CisKKwlsaWIgPSBNZW1vcnlDb250ZXh0 QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihwZ19saWJjX2xpYnJhcnkpKTsKKyNp ZiBkZWZpbmVkKF9fR0xJQkNfXykKKwlsaWItPmxpYmNfdmVyc2lvbiA9IGdudV9nZXRfbGliY192 ZXJzaW9uOworI2VsaWYgZGVmaW5lZChXSU4zMikKKwlsaWItPkdldE5MU1ZlcnNpb25FeCA9IEdl dE5MU1ZlcnNpb25FeDsKKyNlbmRpZgorCWxpYi0+Y19zZXRsb2NhbGUgPSBzZXRsb2NhbGU7Cisj aWZkZWYgSEFWRV9MT0NBTEVfVAorI2lmbmRlZiBXSU4zMgorCWxpYi0+Y19uZXdsb2NhbGUgPSBu ZXdsb2NhbGU7CisJbGliLT5jX2ZyZWVsb2NhbGUgPSBmcmVlbG9jYWxlOworCWxpYi0+Y191c2Vs b2NhbGUgPSB1c2Vsb2NhbGU7CisjaWZkZWYgTENfVkVSU0lPTl9NQVNLCisJbGliLT5jX3F1ZXJ5 bG9jYWxlID0gcXVlcnlsb2NhbGU7CisjZW5kaWYJCS8qIExDX1ZFUlNJT05fTUFTSyAqLworI2Vs c2UKKwlsaWItPl9jcmVhdGVfbG9jYWxlID0gX2NyZWF0ZV9sb2NhbGU7CisjZW5kaWYJCS8qIFdJ TjMyICovCisjZW5kaWYJCS8qIEhBVkVfTE9DQUxFX1QgKi8KKwlsaWItPmNfd2NzdG9tYnMgPSB3 Y3N0b21iczsKKwlsaWItPmNfbWJzdG93Y3MgPSBtYnN0b3djczsKKyNpZmRlZiBIQVZFX0xPQ0FM RV9UCisjaWZkZWYgSEFWRV9XQ1NUT01CU19MCisJbGliLT5jX3djc3RvbWJzX2wgPSB3Y3N0b21i c19sOworI2VuZGlmCisjaWZkZWYgSEFWRV9NQlNUT1dDU19MCisJbGliLT5jX21ic3Rvd2NzX2wg PSBtYnN0b3djc19sOworI2VuZGlmCisjZW5kaWYKKwlsaWItPmNfc3RyY29sbCA9IHN0cmNvbGw7 CisJbGliLT5jX3djc2NvbGwgPSB3Y3Njb2xsOworCWxpYi0+Y19zdHJ4ZnJtID0gc3RyeGZybTsK KyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisJbGliLT5jX3N0cmNvbGxfbCA9IHN0cmNvbGxfbDsKKwls aWItPmNfd2NzY29sbF9sID0gd2NzY29sbF9sOworCWxpYi0+Y19zdHJ4ZnJtX2wgPSBzdHJ4ZnJt X2w7CisjZW5kaWYKKwlsaWItPmNfdG9sb3dlciA9IHRvbG93ZXI7CisJbGliLT5jX3RvdXBwZXIg PSB0b3VwcGVyOworCWxpYi0+Y19pc3dhbG51bSA9IGlzd2FsbnVtOworCWxpYi0+Y190b3dsb3dl ciA9IHRvd2xvd2VyOworCWxpYi0+Y190b3d1cHBlciA9IHRvd3VwcGVyOworI2lmZGVmIEhBVkVf TE9DQUxFX1QKKwlsaWItPmNfdG9sb3dlcl9sID0gdG9sb3dlcl9sOworCWxpYi0+Y190b3VwcGVy X2wgPSB0b3VwcGVyX2w7CisJbGliLT5jX2lzd2FsbnVtX2wgPSBpc3dhbG51bV9sOworCWxpYi0+ Y190b3dsb3dlcl9sID0gdG93bG93ZXJfbDsKKwlsaWItPmNfdG93dXBwZXJfbCA9IHRvd3VwcGVy X2w7CisjZW5kaWYKKworCWJ1aWx0aW5fbGliY19saWJyYXJ5ID0gbGliOworCXJldHVybiBsaWI7 Cit9CisKK3N0YXRpYyBwZ19saWJjX2xpYnJhcnkgKgorZ2V0X2xpYmNfbGlicmFyeShjb25zdCBj aGFyICpjb2xsYXRlLCBjb25zdCBjaGFyICpjdHlwZSwgY29uc3QgY2hhciAqdmVyc2lvbikKK3sK KwlwZ19saWJjX2xpYnJhcnkgKmxpYiA9IE5VTEw7CisKKwlpZiAoZ2V0X2xpYmNfbGlicmFyeV9o b29rICE9IE5VTEwpCisJCWxpYiA9IGdldF9saWJjX2xpYnJhcnlfaG9vayhjb2xsYXRlLCBjdHlw ZSwgdmVyc2lvbik7CisKKwlpZighbGliKQorCQlsaWIgPSBnZXRfYnVpbHRpbl9saWJjX2xpYnJh cnkoKTsKKworCXJldHVybiBsaWI7Cit9CisKICNpZmRlZiBVU0VfSUNVCiBzdGF0aWMgcGdfaWN1 X2xpYnJhcnkgKgogZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKQpAQCAtMTYxNCw2ICsxNjkzLDcg QEAgcGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgZGV0ZXJtaW5pc3RpYywgY29uc3Qg Y2hhciAqY29sbGF0ZSwKIAlpZiAocHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCiAJewog I2lmZGVmIEhBVkVfTE9DQUxFX1QKKwkJcGdfbGliY19saWJyYXJ5ICpsaWJjID0gZ2V0X2xpYmNf bGlicmFyeShjb2xsYXRlLCBjdHlwZSwgdmVyc2lvbik7CiAJCWxvY2FsZV90ICAgICAgICBsb2M7 CiAKIAkJLyogbmV3bG9jYWxlJ3MgcmVzdWx0IG1heSBiZSBsZWFrZWQgaWYgd2UgZW5jb3VudGVy IGFuIGVycm9yICovCkBAIC0xNjIzLDEwICsxNzAzLDEwIEBAIHBnX25ld2xvY2FsZShjaGFyIHBy b3ZpZGVyLCBib29sIGRldGVybWluaXN0aWMsIGNvbnN0IGNoYXIgKmNvbGxhdGUsCiAJCQkvKiBO b3JtYWwgY2FzZSB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lICovCiAJCQllcnJubyA9IDA7CiAjaWZu ZGVmIFdJTjMyCi0JCQlsb2MgPSBuZXdsb2NhbGUoTENfQ09MTEFURV9NQVNLIHwgTENfQ1RZUEVf TUFTSywgY29sbGF0ZSwKKwkJCWxvYyA9IGxpYmMtPmNfbmV3bG9jYWxlKExDX0NPTExBVEVfTUFT SyB8IExDX0NUWVBFX01BU0ssIGNvbGxhdGUsCiAJCQkJCQkJTlVMTCk7CiAjZWxzZQotCQkJbG9j ID0gX2NyZWF0ZV9sb2NhbGUoTENfQUxMLCBjb2xsYXRlKTsKKwkJCWxvYyA9IGxpYmMtPl9jcmVh dGVfbG9jYWxlKExDX0FMTCwgY29sbGF0ZSk7CiAjZW5kaWYKIAkJCWlmICghbG9jKQogCQkJCXJl cG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKQEAgLTE2MzgsMTEgKzE3MTgsMTEgQEAg cGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgZGV0ZXJtaW5pc3RpYywgY29uc3QgY2hh ciAqY29sbGF0ZSwKIAkJCWxvY2FsZV90CWxvYzE7CiAKIAkJCWVycm5vID0gMDsKLQkJCWxvYzEg PSBuZXdsb2NhbGUoTENfQ09MTEFURV9NQVNLLCBjb2xsYXRlLCBOVUxMKTsKKwkJCWxvYzEgPSBs aWJjLT5jX25ld2xvY2FsZShMQ19DT0xMQVRFX01BU0ssIGNvbGxhdGUsIE5VTEwpOwogCQkJaWYg KCFsb2MxKQogCQkJCXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKIAkJCWVycm5v ID0gMDsKLQkJCWxvYyA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBjdHlwZSwgbG9jMSk7CisJ CQlsb2MgPSBsaWJjLT5jX25ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBjdHlwZSwgbG9jMSk7CiAJ CQlpZiAoIWxvYykKIAkJCQlyZXBvcnRfbmV3bG9jYWxlX2ZhaWx1cmUoY3R5cGUpOwogI2Vsc2UK QEAgLTE2NTksNiArMTczOSw3IEBAIHBnX25ld2xvY2FsZShjaGFyIHByb3ZpZGVyLCBib29sIGRl dGVybWluaXN0aWMsIGNvbnN0IGNoYXIgKmNvbGxhdGUsCiAJCX0KIAogCQlyZXN1bHQtPmluZm8u bGliYy5sdCA9IGxvYzsKKwkJcmVzdWx0LT5pbmZvLmxpYmMubGliID0gbGliYzsKICNlbHNlCQkJ CQkJCS8qIG5vdCBIQVZFX0xPQ0FMRV9UICovCiAJCS8qIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBz dXBwb3J0IGxvY2FsZV90ICovCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xNzEwLDYgKzE3OTEsMTIg QEAgcGdfbG9jYWxlX2RldGVybWluaXN0aWMocGdfbG9jYWxlX3QgbG9jYWxlKQogCQlyZXR1cm4g bG9jYWxlLT5kZXRlcm1pbmlzdGljOwogfQogCitwZ19saWJjX2xpYnJhcnkgKgorZ2V0X2RlZmF1 bHRfbGliY19saWJyYXJ5KCkKK3sKKwlyZXR1cm4gZGVmYXVsdF9saWJjOworfQorCiAjaWZkZWYg VVNFX0lDVQogcGdfaWN1X2xpYnJhcnkgKgogZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkoKQpAQCAt MTcyNSw2ICsxODEyLDE5IEBAIHZvaWQKIGluaXRfZGVmYXVsdF9sb2NhbGUoY2hhciBwcm92aWRl ciwgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5cGUsCiAJCQkJCWNvbnN0IGNo YXIgKmljdWxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbikKIHsKKwlkZWZhdWx0X2xpYmMgPSBn ZXRfbGliY19saWJyYXJ5KGNvbGxhdGUsIGN0eXBlLCB2ZXJzaW9uKTsKKworCS8qCisJICogSWYg aXQncyB0aGUgYnVpbHRpbiBsaWJjLCBwZ19wZXJtX3NldGxvY2FsZSgpIHdpbGwgaGFuZGxlCisJ ICogc2V0bG9jYWxlKCkuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSBkb25lIGhlcmUgc28gdGhhdCB0 aGUgY29sbGF0ZSBhbmQKKwkgKiBjdHlwZSB0YWtlIGVmZmVjdC4KKwkgKi8KKwlpZiAoZGVmYXVs dF9saWJjICE9IGJ1aWx0aW5fbGliY19saWJyYXJ5KQorCXsKKwkJZGVmYXVsdF9saWJjLT5jX3Nl dGxvY2FsZShMQ19DT0xMQVRFLCBjb2xsYXRlKTsKKwkJZGVmYXVsdF9saWJjLT5jX3NldGxvY2Fs ZShMQ19DVFlQRSwgY3R5cGUpOworCX0KKwogI2lmZGVmIFVTRV9JQ1UKIAlkZWZhdWx0X2ljdSA9 IGdldF9pY3VfbGlicmFyeShpY3Vsb2NhbGUsIHZlcnNpb24pOwogI2VuZGlmCkBAIC0xOTEzLDE5 ICsyMDEzLDIzIEBAIGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlk ZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQogCQkJcGdfc3RybmNhc2VjbXAoIkMuIiwgY29s bGNvbGxhdGUsIDIpICE9IDAgJiYKIAkJCXBnX3N0cmNhc2VjbXAoIlBPU0lYIiwgY29sbGNvbGxh dGUpICE9IDApCiAJeworCQlwZ19saWJjX2xpYnJhcnkgKmxpYmMgPSBnZXRfbGliY19saWJyYXJ5 KGNvbGxjb2xsYXRlLCBOVUxMLCBOVUxMKTsKKwogI2lmIGRlZmluZWQoX19HTElCQ19fKQogCQkv KiBVc2UgdGhlIGdsaWJjIHZlcnNpb24gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIGJl dHRlci4gKi8KLQkJY29sbHZlcnNpb24gPSBwc3RyZHVwKGdudV9nZXRfbGliY192ZXJzaW9uKCkp OworCQlpZiAobGliYy0+bGliY192ZXJzaW9uICE9IE5VTEwpCisJCQljb2xsdmVyc2lvbiA9IHBz dHJkdXAobGliYy0+bGliY192ZXJzaW9uKCkpOwogI2VsaWYgZGVmaW5lZChMQ19WRVJTSU9OX01B U0spCiAJCWxvY2FsZV90CWxvYzsKIAogCQkvKiBMb29rIHVwIEZyZWVCU0QgY29sbGF0aW9uIHZl cnNpb24uICovCi0JCWxvYyA9IG5ld2xvY2FsZShMQ19DT0xMQVRFLCBjb2xsY29sbGF0ZSwgTlVM TCk7CisJCWxvYyA9IGxpYmMtPmNfbmV3bG9jYWxlKExDX0NPTExBVEUsIGNvbGxjb2xsYXRlLCBO VUxMKTsKIAkJaWYgKGxvYykKIAkJewotCQkJY29sbHZlcnNpb24gPQotCQkJCXBzdHJkdXAocXVl cnlsb2NhbGUoTENfQ09MTEFURV9NQVNLIHwgTENfVkVSU0lPTl9NQVNLLCBsb2MpKTsKLQkJCWZy ZWVsb2NhbGUobG9jKTsKKwkJCWNvbnN0IGNoYXIgKnF1ZXJ5ID0gbGliYy0+Y19xdWVyeWxvY2Fs ZSgKKwkJCQlMQ19DT0xMQVRFX01BU0sgfCBMQ19WRVJTSU9OX01BU0ssIGxvYyk7CisJCQljb2xs dmVyc2lvbiA9IHBzdHJkdXAocXVlcnkpOworCQkJbGliYy0+Y19mcmVlbG9jYWxlKGxvYyk7CiAJ CX0KIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKQEAgLTE5NDEsNyArMjA0NSw3IEBAIGdldF9j b2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNv bGxjb2xsYXRlKQogCiAJCU11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLCAwLCBjb2xsY29sbGF0 ZSwgLTEsIHdpZGVfY29sbGNvbGxhdGUsCiAJCQkJCQkJTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7 Ci0JCWlmICghR2V0TkxTVmVyc2lvbkV4KENPTVBBUkVfU1RSSU5HLCB3aWRlX2NvbGxjb2xsYXRl LCAmdmVyc2lvbikpCisJCWlmICghbGliYy0+R2V0TkxTVmVyc2lvbkV4KENPTVBBUkVfU1RSSU5H LCB3aWRlX2NvbGxjb2xsYXRlLCAmdmVyc2lvbikpCiAJCXsKIAkJCS8qCiAJCQkgKiBHZXROTFNW ZXJzaW9uRXgoKSB3YW50cyBhIGxhbmd1YWdlIHRhZyBzdWNoIGFzICJlbi1VUyIsIG5vdCBhCkBA IC0yMDMxLDEwICsyMTM1LDE0IEBAIHBnX3N0cm5jb2xsX2xpYmNfd2luMzJfdXRmOChjb25zdCBj aGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwKIAllcnJubyA9IDA7CiAj aWZkZWYgSEFWRV9MT0NBTEVfVAogCWlmIChsb2NhbGUpCi0JCXJlc3VsdCA9IHdjc2NvbGxfbCgo TFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbG9jYWxlLT5pbmZvLmxpYmMubHQpOworCXsKKwkJ cGdfbGliY19saWJyYXJ5ICpsaWJjID0gUEdfTElCQ19MSUIobG9jYWxlKTsKKwkJcmVzdWx0ID0g bGliYy0+Y193Y3Njb2xsX2woKExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnAsIGxvY2FsZS0+aW5m by5saWJjLmx0KTsKKwl9CiAJZWxzZQogI2VuZGlmCi0JCXJlc3VsdCA9IHdjc2NvbGwoKExQV1NU UikgYTFwLCAoTFBXU1RSKSBhMnApOworCQlyZXN1bHQgPSBkZWZhdWx0X2xpYmMtPmNfd2NzY29s bCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCk7CisKIAlpZiAocmVzdWx0ID09IDIxNDc0ODM2 NDcpCS8qIF9OTFNDTVBFUlJPUjsgbWlzc2luZyBmcm9tIG1pbmd3CiAJCQkJCQkJCSAqIGhlYWRl cnMgKi8KIAkJZXJlcG9ydChFUlJPUiwKQEAgLTIwNjAsNyArMjE2OCw2IEBAIHN0YXRpYyBpbnQK IHBnX3N0cmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19s b2NhbGVfdCBsb2NhbGUpCiB7CiAJaW50IHJlc3VsdDsKLQogCUFzc2VydCghbG9jYWxlIHx8IGxv Y2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpOwogI2lmZGVmIFdJTjMyCiAJaWYg KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQpAQCAtMjA3NCwxNCArMjE4MSwxNiBA QCBwZ19zdHJjb2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdf bG9jYWxlX3QgbG9jYWxlKQogCWlmIChsb2NhbGUpCiAJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QK LQkJcmVzdWx0ID0gc3RyY29sbF9sKGFyZzEsIGFyZzIsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsK KwkJcGdfbGliY19saWJyYXJ5ICpsaWJjID0gUEdfTElCQ19MSUIobG9jYWxlKTsKKworCQlyZXN1 bHQgPSBsaWJjLT5jX3N0cmNvbGxfbChhcmcxLCBhcmcyLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7 CiAjZWxzZQogCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCiAJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CiAjZW5kaWYKIAl9CiAJ ZWxzZQotCQlyZXN1bHQgPSBzdHJjb2xsKGFyZzEsIGFyZzIpOworCQlyZXN1bHQgPSBkZWZhdWx0 X2xpYmMtPmNfc3RyY29sbChhcmcxLCBhcmcyKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0y MzI3LDE3ICsyNDM2LDE1IEBAIHBnX3N0cnhmcm1fbGliYyhjaGFyICpkZXN0LCBjb25zdCBjaGFy ICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKIHsKIAlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKIAotI2lmZGVmIFRSVVNUX1NUWEZSTQogI2lm ZGVmIEhBVkVfTE9DQUxFX1QKIAlpZiAobG9jYWxlKQotCQlyZXR1cm4gc3RyeGZybV9sKGRlc3Qs IHNyYywgZGVzdHNpemUsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwl7CisJCXBnX2xpYmNfbGli cmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKGxvY2FsZSk7CisJCXJldHVybiBsaWJjLT5jX3N0cnhm cm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJfQogCWVs c2UKICNlbmRpZgotCQlyZXR1cm4gc3RyeGZybShkZXN0LCBzcmMsIGRlc3RzaXplKTsKLSNlbHNl Ci0JLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xs cHJvdmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7Ci0jZW5kaWYKKwkJcmV0dXJuIGRlZmF1 bHRfbGliYy0+Y19zdHJ4ZnJtKGRlc3QsIHNyYywgZGVzdHNpemUpOwogfQogCiBzdGF0aWMgc2l6 ZV90CkBAIC0zMDEwLDIxICszMTE3LDIzIEBAIHdjaGFyMmNoYXIoY2hhciAqdG8sIGNvbnN0IHdj aGFyX3QgKmZyb20sIHNpemVfdCB0b2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKQogCWlmIChsb2Nh bGUgPT0gKHBnX2xvY2FsZV90KSAwKQogCXsKIAkJLyogVXNlIHdjc3RvbWJzIGRpcmVjdGx5IGZv ciB0aGUgZGVmYXVsdCBsb2NhbGUgKi8KLQkJcmVzdWx0ID0gd2NzdG9tYnModG8sIGZyb20sIHRv bGVuKTsKKwkJcmVzdWx0ID0gZGVmYXVsdF9saWJjLT5jX3djc3RvbWJzKHRvLCBmcm9tLCB0b2xl bik7CiAJfQogCWVsc2UKIAl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlwZ19saWJjX2xpYnJh cnkgKmxpYmMgPSBQR19MSUJDX0xJQihsb2NhbGUpOworCiAjaWZkZWYgSEFWRV9XQ1NUT01CU19M CiAJCS8qIFVzZSB3Y3N0b21ic19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJcmVzdWx0 ID0gd2NzdG9tYnNfbCh0bywgZnJvbSwgdG9sZW4sIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJ cmVzdWx0ID0gbGliYy0+Y193Y3N0b21ic19sKHRvLCBmcm9tLCB0b2xlbiwgbG9jYWxlLT5pbmZv LmxpYmMubHQpOwogI2Vsc2UJCQkJCQkJLyogIUhBVkVfV0NTVE9NQlNfTCAqLwogCQkvKiBXZSBo YXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAqLwot CQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9IHVzZWxvY2FsZShsb2NhbGUtPmluZm8ubGliYy5sdCk7 CisJCWxvY2FsZV90CXNhdmVfbG9jYWxlID0gbGliYy0+Y191c2Vsb2NhbGUobG9jYWxlLT5pbmZv LmxpYmMubHQpOwogCi0JCXJlc3VsdCA9IHdjc3RvbWJzKHRvLCBmcm9tLCB0b2xlbik7CisJCXJl c3VsdCA9IGxpYmMtPmNfd2NzdG9tYnModG8sIGZyb20sIHRvbGVuKTsKIAotCQl1c2Vsb2NhbGUo c2F2ZV9sb2NhbGUpOworCQlsaWJjLT5jX3VzZWxvY2FsZShzYXZlX2xvY2FsZSk7CiAjZW5kaWYJ CQkJCQkJLyogSEFWRV9XQ1NUT01CU19MICovCiAjZWxzZQkJCQkJCQkvKiAhSEFWRV9MT0NBTEVf VCAqLwogCQkvKiBDYW4ndCBoYXZlIGxvY2FsZSAhPSAwIHdpdGhvdXQgSEFWRV9MT0NBTEVfVCAq LwpAQCAtMzA4NywyMSArMzE5NiwyMyBAQCBjaGFyMndjaGFyKHdjaGFyX3QgKnRvLCBzaXplX3Qg dG9sZW4sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBmcm9tbGVuLAogCQlpZiAobG9jYWxlID09 IChwZ19sb2NhbGVfdCkgMCkKIAkJewogCQkJLyogVXNlIG1ic3Rvd2NzIGRpcmVjdGx5IGZvciB0 aGUgZGVmYXVsdCBsb2NhbGUgKi8KLQkJCXJlc3VsdCA9IG1ic3Rvd2NzKHRvLCBzdHIsIHRvbGVu KTsKKwkJCXJlc3VsdCA9IGRlZmF1bHRfbGliYy0+Y19tYnN0b3djcyh0bywgc3RyLCB0b2xlbik7 CiAJCX0KIAkJZWxzZQogCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQkJcGdfbGliY19saWJy YXJ5ICpsaWJjID0gUEdfTElCQ19MSUIobG9jYWxlKTsKKwogI2lmZGVmIEhBVkVfTUJTVE9XQ1Nf TAogCQkJLyogVXNlIG1ic3Rvd2NzX2wgZm9yIG5vbmRlZmF1bHQgbG9jYWxlcyAqLwotCQkJcmVz dWx0ID0gbWJzdG93Y3NfbCh0bywgc3RyLCB0b2xlbiwgbG9jYWxlLT5pbmZvLmxpYmMubHQpOwor CQkJcmVzdWx0ID0gbGliYy0+Y19tYnN0b3djc19sKHRvLCBzdHIsIHRvbGVuLCBsb2NhbGUtPmlu Zm8ubGliYy5sdCk7CiAjZWxzZQkJCQkJCQkvKiAhSEFWRV9NQlNUT1dDU19MICovCiAJCQkvKiBX ZSBoYXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAq LwotCQkJbG9jYWxlX3QJc2F2ZV9sb2NhbGUgPSB1c2Vsb2NhbGUobG9jYWxlLT5pbmZvLmxpYmMu bHQpOworCQkJbG9jYWxlX3QJc2F2ZV9sb2NhbGUgPSBsaWJjLT5jX3VzZWxvY2FsZShsb2NhbGUt PmluZm8ubGliYy5sdCk7CiAKLQkJCXJlc3VsdCA9IG1ic3Rvd2NzKHRvLCBzdHIsIHRvbGVuKTsK KwkJCXJlc3VsdCA9IGxpYmMtPmNfbWJzdG93Y3ModG8sIHN0ciwgdG9sZW4pOwogCi0JCQl1c2Vs b2NhbGUoc2F2ZV9sb2NhbGUpOworCQkJbGliYy0+Y191c2Vsb2NhbGUoc2F2ZV9sb2NhbGUpOwog I2VuZGlmCQkJCQkJCS8qIEhBVkVfTUJTVE9XQ1NfTCAqLwogI2Vsc2UJCQkJCQkJLyogIUhBVkVf TE9DQUxFX1QgKi8KIAkJCS8qIENhbid0IGhhdmUgbG9jYWxlICE9IDAgd2l0aG91dCBIQVZFX0xP Q0FMRV9UICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJu YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCmluZGV4IGFmYjZj MjRkNjQuLjY2YTBlOTJhNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2Fs ZV9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5o CkBAIC0xMyw2ICsxMyw5IEBACiAjaWZuZGVmIF9QR19MT0NBTEVfSU5URVJOQUxfCiAjZGVmaW5l IF9QR19MT0NBTEVfSU5URVJOQUxfCiAKKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdj dHlwZS5oPgorCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgogI2lu Y2x1ZGUgPHVuaWNvZGUvdWNudi5oPgpAQCAtMzIsNiArMzUsNzUgQEAKICNlbmRpZgogI2VuZGlm CiAKK3R5cGVkZWYgc3RydWN0IHBnX2xpYmNfbGlicmFyeQoreworCS8qIHZlcnNpb24gKi8KKyNp ZiBkZWZpbmVkKF9fR0xJQkNfXykKKwljb25zdCBjaGFyICooKmxpYmNfdmVyc2lvbikgKHZvaWQp OworI2VsaWYgZGVmaW5lZChXSU4zMikKKwlCT09MICgqR2V0TkxTVmVyc2lvbkV4KSAoTkxTX0ZV TkNUSU9OIGZ1bmN0aW9uLCBMUENXU1RSIGxwTG9jYWxlTmFtZSwKKwkJCQkJCQkgTFBOTFNWRVJT SU9OSU5GT0VYIGxwVmVyc2lvbkluZm9ybWF0aW9uKTsKKyNlbmRpZgorCisJLyogbG9jYWxlICov CisJY2hhciAqKCpjX3NldGxvY2FsZSkgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxl KTsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZuZGVmIFdJTjMyCisJbG9jYWxlX3QgKCpjX25l d2xvY2FsZSkgKGludCBjYXRlZ29yeV9tYXNrLCBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkg ICBsb2NhbGVfdCBiYXNlKTsKKwl2b2lkICgqY19mcmVlbG9jYWxlKSAobG9jYWxlX3QgbG9jb2Jq KTsKKwlsb2NhbGVfdCAoKmNfdXNlbG9jYWxlKSAobG9jYWxlX3QgbmV3bG9jKTsKKyNpZmRlZiBM Q19WRVJTSU9OX01BU0sKKwljb25zdCBjaGFyICooKmNfcXVlcnlsb2NhbGUpIChpbnQgbWFzaywg bG9jYWxlX3QgbG9jYWxlKTsKKyNlbmRpZgorI2Vsc2UKKwlsb2NhbGVfdCAoKl9jcmVhdGVfbG9j YWxlKSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOworI2VuZGlmCisjZW5kaWYK KworCS8qIGVuY29kaW5nICovCisJc2l6ZV90ICgqY193Y3N0b21icykgKGNoYXIgKmRlc3QsIGNv bnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pOworCXNpemVfdCAoKmNfbWJzdG93Y3MpICh3Y2hh cl90ICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKTsKKyNpZmRlZiBIQVZFX0xPQ0FM RV9UCisjaWZkZWYgSEFWRV9XQ1NUT01CU19MCisJc2l6ZV90ICgqY193Y3N0b21ic19sKSAoY2hh ciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbiwKKwkJCQkJCSAgbG9jYWxlX3Qg bG9jKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUJTVE9XQ1NfTAorCXNpemVfdCAoKmNfbWJzdG93 Y3NfbCkgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4sCisJCQkJCQkg IGxvY2FsZV90IGxvYyk7CisjZW5kaWYKKyNlbmRpZgorCisJLyogY29sbGF0aW9uICovCisJaW50 ICgqY19zdHJjb2xsKSAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKKwlpbnQgKCpj X3djc2NvbGwpIChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMik7CisJc2l6 ZV90ICgqY19zdHJ4ZnJtKSAoY2hhciAqczEsIGNvbnN0IGNoYXIgKiBzMiwgc2l6ZV90IG4pOwor I2lmZGVmIEhBVkVfTE9DQUxFX1QKKwlpbnQgKCpjX3N0cmNvbGxfbCkgKGNvbnN0IGNoYXIgKnMx LCBjb25zdCBjaGFyICpzMiwgbG9jYWxlX3QgbG9jYWxlKTsKKwlpbnQgKCpjX3djc2NvbGxfbCkg KGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLAorCQkJCQkgIGxvY2FsZV90 IGxvY2FsZSk7CisJc2l6ZV90ICgqY19zdHJ4ZnJtX2wpIChjaGFyICpzMSwgY29uc3QgY2hhciAq IHMyLCBzaXplX3QgbiwKKwkJCQkJCSBsb2NhbGVfdCBsb2NhbGUpOworI2VuZGlmCisKKwkvKiBj dHlwZSAqLworCWludCAoKmNfdG9sb3dlcikgKGludCBjKTsKKwlpbnQgKCpjX3RvdXBwZXIpIChp bnQgYyk7CisJaW50ICgqY19pc3dhbG51bSkgKHdpbnRfdCB3Yyk7CisJd2ludF90ICgqY190b3ds b3dlcikgKHdpbnRfdCB3Yyk7CisJd2ludF90ICgqY190b3d1cHBlcikgKHdpbnRfdCB3Yyk7Cisj aWZkZWYgSEFWRV9MT0NBTEVfVAorCWludCAoKmNfdG9sb3dlcl9sKSAoaW50IGMsIGxvY2FsZV90 IGxvY2FsZSk7CisJaW50ICgqY190b3VwcGVyX2wpIChpbnQgYywgbG9jYWxlX3QgbG9jYWxlKTsK KwlpbnQgKCpjX2lzd2FsbnVtX2wpICh3aW50X3Qgd2MsIGxvY2FsZV90IGxvY2FsZSk7CisJd2lu dF90ICgqY190b3dsb3dlcl9sKSAod2ludF90IHdjLCBsb2NhbGVfdCBsb2NhbGUpOworCXdpbnRf dCAoKmNfdG93dXBwZXJfbCkgKHdpbnRfdCB3YywgbG9jYWxlX3QgbG9jYWxlKTsKKyNlbmRpZgor fSBwZ19saWJjX2xpYnJhcnk7CisKKyNkZWZpbmUgUEdfTElCQ19MSUIoeCkgKCh4KS0+aW5mby5s aWJjLmxpYikKKwogI2lmZGVmIFVTRV9JQ1UKIC8qCiAgKiBBbiBJQ1UgbGlicmFyeSB2ZXJzaW9u IHRoYXQgd2UncmUgZWl0aGVyIGxpbmtlZCBhZ2FpbnN0IG9yIGhhdmUgbG9hZGVkIGF0CkBAIC0x NDYsMTIgKzIxOCwxMyBAQCBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAogCWNoYXIJICAgKmN0eXBl OwogCXVuaW9uCiAJewotI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJc3RydWN0CiAJCXsKKyNpZmRl ZiBIQVZFX0xPQ0FMRV9UCiAJCQlsb2NhbGVfdAlsdDsKLQkJfQkJCWxpYmM7CiAjZW5kaWYKKwkJ CXBnX2xpYmNfbGlicmFyeSAqbGliOworCQl9CQkJbGliYzsKICNpZmRlZiBVU0VfSUNVCiAJCXN0 cnVjdAogCQl7CkBAIC0xNTksMTAgKzIzMiwxNiBAQCBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAog CQkJcGdfaWN1X2xpYnJhcnkJKmxpYjsKIAkJfQkJCWljdTsKICNlbmRpZgotCQlpbnQJCQlkdW1t eTsJCS8qIGluIGNhc2Ugd2UgaGF2ZSBuZWl0aGVyIExPQ0FMRV9UIG5vciBJQ1UgKi8KIAl9CQkJ aW5mbzsKIH07CiAKK3R5cGVkZWYgcGdfbGliY19saWJyYXJ5ICooKmdldF9saWJjX2xpYnJhcnlf aG9va190eXBlKSgKKwljb25zdCBjaGFyICpjb2xsYXRlLCBjb25zdCBjaGFyICpjdHlwZSwgY29u c3QgY2hhciAqdmVyc2lvbik7CisKK2V4dGVybiBQR0RMTElNUE9SVCBnZXRfbGliY19saWJyYXJ5 X2hvb2tfdHlwZSBnZXRfbGliY19saWJyYXJ5X2hvb2s7CisKK2V4dGVybiBwZ19saWJjX2xpYnJh cnkgKmdldF9kZWZhdWx0X2xpYmNfbGlicmFyeSh2b2lkKTsKKwogI2lmZGVmIFVTRV9JQ1UKIAog dHlwZWRlZiBwZ19pY3VfbGlicmFyeSAqKCpnZXRfaWN1X2xpYnJhcnlfaG9va190eXBlKSgKLS0g CjIuMzQuMQoK --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename="v5-0005-Add-test-module-for-icu-collation-provider-hook.patch" Content-Type: text/x-patch; name="v5-0005-Add-test-module-for-icu-collation-provider-hook.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5MGRhYjg2MDE0ZDYxMGNjNzc0MDg3NGVkOGZhYWVlMzc1ODJlZDRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDIxIERlYyAyMDIyIDE5OjUwOjEwIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NSA1LzddIEFk ZCB0ZXN0IG1vZHVsZSBmb3IgaWN1IGNvbGxhdGlvbiBwcm92aWRlciBob29rLgoKLS0tCiBzcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rl c3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1 bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy9NYWtlZmlsZSB8ICAyNCArKwogLi4uL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZCAgICAgIHwgIDM3ICsrKwogLi4uL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy90LzAwMV9pY3UucGwgICAgIHwgMTUzICsrKysrKysrKysrKwog Li4uL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jICAgICAgICAgICAgICAgIHwgIDQzICsrKysK IC4uLi90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuY29udHJvbCAgICAgICAgICB8ICAgNCArCiAu Li4vdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmggICAgICAgICAgICAgICAgfCAgMjggKysrCiAu Li4vdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfaWN1X2hvb2suYyAgfCAyMjggKysrKysr KysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDUxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9u X2xpYl9ob29rcy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3QvMDAxX2ljdS5wbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmNvbnRyb2wKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29r cy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfaWN1X2hvb2suYwoKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2Vm aWxlCmluZGV4IGM2MjljYmUzODMuLjI2MWJmNWU3MjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTUsNiAr MTUsNyBAQCBTVUJESVJTID0gXAogCQkgIHNuYXBzaG90X3Rvb19vbGQgXAogCQkgIHNwZ2lzdF9u YW1lX29wcyBcCiAJCSAgdGVzdF9ibG9vbWZpbHRlciBcCisJCSAgdGVzdF9jb2xsYXRpb25fbGli X2hvb2tzIFwKIAkJICB0ZXN0X2NvcHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdy cyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCBlZWZjMGIy MDYzLi4xNTMwZWU0OTcwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTExLDYgKzExLDcgQEAgc3Vi ZGlyKCdzbmFwc2hvdF90b29fb2xkJykKIHN1YmRpcignc3BnaXN0X25hbWVfb3BzJykKIHN1YmRp cignc3NsX3Bhc3NwaHJhc2VfY2FsbGJhY2snKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVyJykK K3N1YmRpcigndGVzdF9jb2xsYXRpb25fbGliX2hvb2tzJykKIHN1YmRpcigndGVzdF9jb3B5X2Nh bGxiYWNrcycpCiBzdWJkaXIoJ3Rlc3RfY3VzdG9tX3JtZ3JzJykKIHN1YmRpcigndGVzdF9kZGxf ZGVwYXJzZScpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1OTQ4 ZTU1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9u X2xpYl9ob29rcy9NYWtlZmlsZQpAQCAtMCwwICsxLDI0IEBACisjIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSB0ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy5vIHRlc3RfaWN1X2hvb2subworUEdGSUxFREVTQyA9ICJ0ZXN0X2NvbGxh dGlvbl9saWJfaG9va3MgLSB0ZXN0IGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGhvb2tzIgor CitFWFRFTlNJT04gPSB0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MKKworVEFQX1RFU1RTID0gMQor CitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwg JChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MKK3RvcF9idWlsZGRpciA9IC4u Ly4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitp bmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKwor ZXhwb3J0IHdpdGhfaWN1CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRp b25fbGliX2hvb2tzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjU2YjMyYjZjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY29sbGF0aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDM3IEBACisjIEZJ WE1FOiBwcmV2ZW50IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcg dGVzdCA6LworCit0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Nfc291cmNlcyA9IGZpbGVzKAorICAn dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmMnLAorICAndGVzdF9pY3VfaG9vay5jJywKKykKKwor aWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfY29sbGF0aW9uX2xpYl9ob29rc19z b3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWwor ICAgICctLU5BTUUnLCAndGVzdF9jb2xsYXRpb25fbGliX2hvb2tzJywKKyAgICAnLS1GSUxFREVT QycsICd0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MgLSB0ZXN0IGNvbGxhdGlvbiBwcm92aWRlciBs aWJyYXJ5IGhvb2tzJyxdKQorZW5kaWYKKwordGVzdF9jb2xsYXRpb25fbGliX2hvb2tzID0gc2hh cmVkX21vZHVsZSgndGVzdF9jb2xsYXRpb25fbGliX2hvb2tzJywKKyAgdGVzdF9jb2xsYXRpb25f bGliX2hvb2tzX3NvdXJjZXMsCisgIGt3YXJnczogcGdfbW9kX2FyZ3MsCispCit0ZXN0cHJlcF90 YXJnZXRzICs9IHRlc3RfY29sbGF0aW9uX2xpYl9ob29rcworCitpbnN0YWxsX2RhdGEoCisgICd0 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRh X2FyZ3MsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9jb2xsYXRpb25fbGliX2hv b2tzJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDAxX2ljdS5wbCcsCisgICAgXSwKKyAgICAnZW52JzogeworICAgICAgJ3dpdGhfaWN1Jzog aWN1LmZvdW5kKCkgPyAneWVzJyA6ICdubycsCisgICAgfSwKKyAgfSwKK30KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3QvMDAxX2ljdS5wbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3QvMDAxX2ljdS5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lNmY1MzcyNDQ1Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdC8w MDFfaWN1LnBsCkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDIyLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitpZiAoJEVOVnt3aXRoX2ljdX0gbmUg J3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSUNVIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBi dWlsZCc7Cit9CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdt YWluJyk7CisKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3Fs LmNvbmYnLCBxeworc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcycKK30pOworJG5vZGUtPnN0YXJ0OworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJcXtDUkVBVEUgREFUQUJBU0UgZGJpY3UgTE9DQUxFX1BST1ZJREVSIGljdSBMT0NBTEUg J0MnIElDVV9MT0NBTEUgJ0RFU0MnIEVOQ09ESU5HICdVVEY4JyBURU1QTEFURSB0ZW1wbGF0ZTB9 CispOworCisjIHNldHVwCiskbm9kZS0+c2FmZV9wc3FsKCdkYmljdScsCisJcXFbQ1JFQVRFIENP TExBVElPTiB0ZXN0X2FzYyAoUFJPVklERVI9aWN1LCBMT0NBTEU9J0FTQycpXSk7Ciskbm9kZS0+ c2FmZV9wc3FsKCdkYmljdScsCisJcXFbQ1JFQVRFIENPTExBVElPTiB0ZXN0X2Rlc2MgKFBST1ZJ REVSPWljdSwgTE9DQUxFPSdERVNDJyldKTsKKworJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLCBx cVtDUkVBVEUgVEFCTEUgc3RyaW5ncyh0IHRleHQpXSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdkYmlj dScsCisJcXFbSU5TRVJUIElOVE8gc3RyaW5ncyBWQUxVRVMgKCdhQmNEJyksICgnZkdoSScpLCAo J3dYeVonKV0pOworCisjIGNoZWNrIHZlcnNpb25zCisKK215ICR2ZXJzaW9uX2RiID0KKyAgJG5v ZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUIGRhdGNvbGx2ZXJzaW9uIEZST00g cGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZT0nZGJpY3UnXSk7CitpcygkdmVyc2lvbl9kYiwgJzIu NzInLAorCSdkYXRhYmFzZSAiZGJpY3UiIGhhcyBjb3JyZWN0IHZlcnNpb24gMi43MicKKyk7CisK K215ICR2ZXJzaW9uX2FzYyA9CisgICRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1JywKKwkgIHFxW1NF TEVDVCBjb2xsdmVyc2lvbiBGUk9NIHBnX2NvbGxhdGlvbiBXSEVSRSBjb2xsbmFtZT0ndGVzdF9h c2MnXSk7CitpcygkdmVyc2lvbl9hc2MsICcyLjcyJywKKwknY29sbGF0aW9uICJ0ZXN0X2FzYyIg aGFzIGNvcnJlY3QgdmVyc2lvbiAyLjcyJworKTsKKworbXkgJHZlcnNpb25fZGVzYyA9CisgICRu b2RlLT5zYWZlX3BzcWwoJ2RiaWN1JywKKwkgIHFxW1NFTEVDVCBjb2xsdmVyc2lvbiBGUk9NIHBn X2NvbGxhdGlvbiBXSEVSRSBjb2xsbmFtZT0ndGVzdF9kZXNjJ10pOworaXMoJHZlcnNpb25fZGVz YywgJzIuNzInLAorCSdjb2xsYXRpb24gInRlc3RfZGVzYyIgaGFzIGNvcnJlY3QgdmVyc2lvbiAy LjcyJworKTsKKworbXkgJHJlc19zb3J0X2V4cGVjdGVkID0gImFCY0QKK2ZHaEkKK3dYeVoiOwor CitteSAkcmVzX3JldmVyc2Vzb3J0X2V4cGVjdGVkID0gIndYeVoKK2ZHaEkKK2FCY0QiOworCisj IHRlc3QgY29tcGFyaXNvbgorCitteSAkY29tcGFyaXNvbiA9CisgICRub2RlLT5zYWZlX3BzcWwo J2RiaWN1JywKKwkgIHFxW1NFTEVDVCAnYUJjRCcgQ09MTEFURSB0ZXN0X2FzYyA8ICd3WHlaJyBD T0xMQVRFIHRlc3RfYXNjXSk7CitpcygkY29tcGFyaXNvbiwgJ3QnLAorCSdjb3JyZWN0IGNvbXBh cmlzb24nCispOworCisjIHRlc3QgcmV2ZXJzZSBjb21wYXJpc29uIChkYXRhYmFzZSkKKworbXkg JGRiY29tcGFyaXNvbl9yZXZlcnNlID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLCBxcVtT RUxFQ1QgJ2FCY0QnIDwgJ3dYeVonXSk7CitpcygkZGJjb21wYXJpc29uX3JldmVyc2UsICdmJywK KwknY29ycmVjdCByZXZlcnNlIGNvbXBhcmlzb24gKGRhdGFiYXNlKScKKyk7CisKKyMgdGVzdCBy ZXZlcnNlIGNvbXBhcmlzb24KKworbXkgJGNvbXBhcmlzb25fcmV2ZXJzZSA9CisgICRub2RlLT5z YWZlX3BzcWwoJ2RiaWN1JywKKwkgIHFxW1NFTEVDVCAnYUJjRCcgQ09MTEFURSB0ZXN0X2Rlc2Mg PCAnd1h5WicgQ09MTEFURSB0ZXN0X2Rlc2NdKTsKK2lzKCRjb21wYXJpc29uX3JldmVyc2UsICdm JywKKwknY29ycmVjdCByZXZlcnNlIGNvbXBhcmlzb24nCispOworCisjIHRlc3QgYXNjIHNvcnQK KworbXkgJHJlc19zb3J0ID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VM RUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZIHQgQ09MTEFURSB0ZXN0X2FzY10pOworaXMoJHJl c19zb3J0LCAkcmVzX3NvcnRfZXhwZWN0ZWQsCisJJ2NvcnJlY3QgYXNjZW5kaW5nIHNvcnQnCisp OworCisjIHRlc3QgZGVzYyBzb3J0CisKK215ICRyZXNfZGJfcmV2ZXJzZXNvcnQgPQorICAkbm9k ZS0+c2FmZV9wc3FsKCdkYmljdScsCisJICBxcVtTRUxFQ1QgdCBGUk9NIHN0cmluZ3MgT1JERVIg QlkgdF0pOworaXMoJHJlc19kYl9yZXZlcnNlc29ydCwgJHJlc19yZXZlcnNlc29ydF9leHBlY3Rl ZCwKKwknY29ycmVjdCBkZXNjZW5kaW5nIHNvcnQgKGRhdGFiYXNlKScKKyk7CisKKyMgdGVzdCBk ZXNjIHNvcnQKKworbXkgJHJlc19yZXZlcnNlc29ydCA9CisgICRub2RlLT5zYWZlX3BzcWwoJ2Ri aWN1JywKKwkgIHFxW1NFTEVDVCB0IEZST00gc3RyaW5ncyBPUkRFUiBCWSB0IENPTExBVEUgdGVz dF9kZXNjXSk7CitpcygkcmVzX3JldmVyc2Vzb3J0LCAkcmVzX3JldmVyc2Vzb3J0X2V4cGVjdGVk LAorCSdjb3JyZWN0IGRlc2NlbmRpbmcgc29ydCcKKyk7CisKKyMgdGVzdCBsb3dlci91cHBlcgor CitteSAkdGNhc2UgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdkYmljdScsCisJICBxcVtTRUxFQ1Qg bG93ZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X2FzYyksCisgICAgICAgICAgICAgICAg dXBwZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X2FzYyldKTsKK2lzKCR0Y2FzZSwgJ2Fi Y2RmZ2hpd3h5enxBQkNERkdISVdYWVonLAorCSdjb3JyZWN0IGxvd2VyY2FzZSBhbmQgdXBwZXJj YXNlJworKTsKKworIyB0ZXN0IHJldmVyc2UgbG93ZXIvdXBwZXIgKGRhdGFiYXNlKQorCitteSAk dGNhc2VfZGJfcmV2ZXJzZSA9CisgICRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1JywKKwkgIHFxW1NF TEVDVCBsb3dlcignYUJjRGZnSGl3WHlaJyksCisgICAgICAgICAgICAgICAgdXBwZXIoJ2FCY0Rm Z0hpd1h5WicpXSk7CitpcygkdGNhc2VfZGJfcmV2ZXJzZSwgJ0FCQ0RGR0hJV1hZWnxhYmNkZmdo aXd4eXonLAorCSdjb3JyZWN0IHJldmVyc2UgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgKGRhdGFi YXNlKScKKyk7CisKKyMgdGVzdCByZXZlcnNlIGxvd2VyL3VwcGVyCisKK215ICR0Y2FzZV9yZXZl cnNlID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdh QmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9kZXNjKSwKKyAgICAgICAgICAgICAgICB1cHBlcign YUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfZGVzYyldKTsKK2lzKCR0Y2FzZV9yZXZlcnNlLCAn QUJDREZHSElXWFlafGFiY2RmZ2hpd3h5eicsCisJJ2NvcnJlY3QgcmV2ZXJzZSBsb3dlcmNhc2Ug YW5kIHVwcGVyY2FzZScKKyk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGli X2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjU5OWVjNjEyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Mu YwpAQCAtMCwwICsxLDQzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9jb2xs YXRpb25fbGliX2hvb2tzLmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGNvbGxhdGlvbiBwcm92aWRl ciBsaWJyYXJ5IGhvb2tzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmMKKyAqCisgKiBUZXN0IGltcGxlbWVu dGF0aW9uIG9mIGljdS1saWtlIGNvbGxhdGlvbiBwcm92aWRlci4KKyAqCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdyLmgi CisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisKKyNpbmNsdWRlICJ0ZXN0X2NvbGxhdGlvbl9saWJf aG9va3MuaCIKKworI2lmZGVmIFVTRV9JQ1UKK3N0YXRpYyBnZXRfaWN1X2xpYnJhcnlfaG9va190 eXBlIHByZXZfZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBOVUxMOworI2VuZGlmCisKK1BHX01PRFVM RV9NQUdJQzsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9w cm9ncmVzcykKKwkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygidGVzdF9jb2xsYXRpb25fbGliX2hv b2tzIG11c3QgYmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKSkpOworCisj aWZkZWYgVVNFX0lDVQorCXByZXZfZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBnZXRfaWN1X2xpYnJh cnlfaG9vazsKKwlnZXRfaWN1X2xpYnJhcnlfaG9vayA9IHRlc3RfZ2V0X2ljdV9saWJyYXJ5Owor I2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuY29udHJvbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jb250 cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmEwYjhlMDMxYTQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29r cy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2NvbW1l bnQgPSAnVGVzdCBjb2RlIGZvciBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFyeSBob29rcycKK2Rl ZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MnCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j b2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5oIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTZlZTQ1N2FiMwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz L3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiB0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaAorICoJCURlZmluaXRp b25zIGZvciBjb2xsYXRpb24gbGlicmFyeSBob29rcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJCXNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz L3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5oCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpZm5kZWYgVEVTVF9DT0xMQVRJT05fTElCX0hPT0tTX0gKKyNkZWZpbmUgVEVTVF9DT0xM QVRJT05fTElCX0hPT0tTX0gKKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgorI2luY2x1ZGUg InV0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oIgorCisjaWZkZWYgVVNFX0lDVQorZXh0ZXJuIHBn X2ljdV9saWJyYXJ5ICp0ZXN0X2dldF9pY3VfbGlicmFyeShjb25zdCBjaGFyICpsb2NhbGUsCisJ CQkJCQkJCQkJCWNvbnN0IGNoYXIgKnZlcnNpb24pOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9pY3Vf aG9vay5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9p Y3VfaG9vay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFlMjU3Y2Mw M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcy90ZXN0X2ljdV9ob29rLmMKQEAgLTAsMCArMSwyMjggQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiB0ZXN0X2ljdV9ob29rLmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGNvbGxh dGlvbiBwcm92aWRlciBpY3UgaG9vay4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29s bGF0aW9uX2xpYl9ob29rcy90ZXN0X2ljdV9ob29rLmMKKyAqCisgKiBJbXBsZW1lbnRzIGEgY3Vz dG9tIGljdS1saWtlIGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGZvciB0ZXN0aW5nIHRoZQor ICogaG9va3MuIEl0IGFjY2VwdHMgYW55IGNvbGxhdGlvbiBuYW1lIHJlcXVlc3RlZC4gQWxsIGJl aGF2ZSBleGFjdGx5IGxpa2UgdGhlCisgKiAiZW5fVVMiIGxvY2FsZSwgZXhjZXB0IGZvciB0aGUg bG9jYWxlIG5hbWVkICJERVNDIiwgd2hpY2ggcmV2ZXJzZXMgdGhlIHNvcnQKKyAqIG9yZGVyIGFu ZCByZXZlcnNlcyB1cHBlcmNhc2UvbG93ZXJjYXNlIGJlaGF2aW9yLgorICoKKyAqIFRoZSB2ZXJz aW9uIGlzIGFsd2F5cyByZXBvcnRlZCBhcyAyLjcyLCBzbyBsb2FkaW5nIGl0IHdpbGwgY2F1c2Ug YSB2ZXJzaW9uCisgKiBtaXNtYXRjaCB3YXJuaW5nLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAidGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmgiCisKKyNpZmRlZiBV U0VfSUNVCisKKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vs b2NkYXRhLmg+CisjaW5jbHVkZSA8dW5pY29kZS91c3RyaW5nLmg+CisKKyNkZWZpbmUgVEVTVF9M T0NBTEUgImVuX1VTIgorCit0eXBlZGVmIHN0cnVjdCBUZXN0VUNvbGxhdG9yIHsKKwlVQ29sbGF0 b3IJKnVjb2w7CisJYm9vbAkJIHJldmVyc2U7Cit9IFRlc3RVQ29sbGF0b3I7CisKK3N0YXRpYyBw Z19pY3VfbGlicmFyeSAqdGVzdF9pY3VfbGlicmFyeSA9IE5VTEw7CitzdGF0aWMgY29uc3QgVVZl cnNpb25JbmZvIHRlc3RfaWN1X3ZlcnNpb24gPSB7IDIsIDcyIH07CisKK3N0YXRpYyBib29sCits b2NhbGVfaXNfcmV2ZXJzZShjb25zdCBjaGFyICpsb2NhbGUpCit7CisJaWYgKHN0cmNtcChsb2Nh bGUsICJERVNDIikgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBVQ29sbGF0b3IgKgordGVzdF9vcGVuQ29sbGF0b3IoY29uc3QgY2hhciAq bG9jLCBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9IE1l bW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoVGVzdFVDb2xsYXRvcikp OworCVVDb2xsYXRvciAqdWNvbCA9IHVjb2xfb3BlbihURVNUX0xPQ0FMRSwgc3RhdHVzKTsKKwl0 ZXN0Y29sLT51Y29sID0gdWNvbDsKKwl0ZXN0Y29sLT5yZXZlcnNlID0gbG9jYWxlX2lzX3JldmVy c2UobG9jKTsKKwlyZXR1cm4gKFVDb2xsYXRvciAqKXRlc3Rjb2w7Cit9CisKK3N0YXRpYyB2b2lk Cit0ZXN0X2Nsb3NlQ29sbGF0b3IoVUNvbGxhdG9yICpjb2xsKQoreworCVRlc3RVQ29sbGF0b3Ig KnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBjb2xsOworCXVjb2xfY2xvc2UodGVzdGNvbC0+ dWNvbCk7CisJcGZyZWUodGVzdGNvbCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NldEF0dHJp YnV0ZShVQ29sbGF0b3IgKmNvbGwsIFVDb2xBdHRyaWJ1dGUgYXR0ciwKKwkJCQkgIFVDb2xBdHRy aWJ1dGVWYWx1ZSB2YWx1ZSwgVUVycm9yQ29kZSAqc3RhdHVzKQoreworCVRlc3RVQ29sbGF0b3Ig KnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBjb2xsOworCXVjb2xfc2V0QXR0cmlidXRlKHRl c3Rjb2wtPnVjb2wsIGF0dHIsIHZhbHVlLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZAordGVz dF9nZXRDb2xsYXRvclZlcnNpb24oY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVVmVyc2lvbkluZm8g aW5mbykKK3sKKwltZW1jcHkoaW5mbywgdGVzdF9pY3VfdmVyc2lvbiwgc2l6ZW9mKFVWZXJzaW9u SW5mbykpOworfQorCitzdGF0aWMgVUNvbGxhdGlvblJlc3VsdAordGVzdF9zdHJjb2xsKGNvbnN0 IFVDb2xsYXRvciAqY29sbCwgY29uc3QgVUNoYXIgKnNvdXJjZSwgaW50MzJfdCBzb3VyY2VMZW5n dGgsCisJCQkgY29uc3QgVUNoYXIgKnRhcmdldCwgaW50MzJfdCB0YXJnZXRMZW5ndGgpCit7CisJ VGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9IChUZXN0VUNvbGxhdG9yICopIGNvbGw7CisJVUNvbGxh dGlvblJlc3VsdCByZXQgPSB1Y29sX3N0cmNvbGwodGVzdGNvbC0+dWNvbCwgc291cmNlLCBzb3Vy Y2VMZW5ndGgsCisJCQkJCQkJCQkJdGFyZ2V0LCB0YXJnZXRMZW5ndGgpOworCWlmICh0ZXN0Y29s LT5yZXZlcnNlKQorCQlyZXR1cm4gLXJldDsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBVQ29sbGF0aW9uUmVzdWx0Cit0ZXN0X3N0cmNvbGxVVEY4KGNvbnN0IFVDb2xsYXRvciAq Y29sbCwgY29uc3QgY2hhciAqc291cmNlLAorCQkJCSBpbnQzMl90IHNvdXJjZUxlbmd0aCwgY29u c3QgY2hhciAqdGFyZ2V0LAorCQkJCSBpbnQzMl90IHRhcmdldExlbmd0aCwgVUVycm9yQ29kZSAq c3RhdHVzKQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBj b2xsOworCVVDb2xsYXRpb25SZXN1bHQgcmV0ID0gdWNvbF9zdHJjb2xsVVRGOCh0ZXN0Y29sLT51 Y29sLCBzb3VyY2UsCisJCQkJCQkJCQkJCXNvdXJjZUxlbmd0aCwgdGFyZ2V0LAorCQkJCQkJCQkJ CQl0YXJnZXRMZW5ndGgsIHN0YXR1cyk7CisJaWYgKHRlc3Rjb2wtPnJldmVyc2UpCisJCXJldHVy biAtcmV0OworCWVsc2UKKwkJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QKK3Rlc3Rf Z2V0U29ydEtleShjb25zdCBVQ29sbGF0b3IgKmNvbGwsIGNvbnN0IFVDaGFyICpzb3VyY2UsCisJ CQkJaW50MzJfdCBzb3VyY2VMZW5ndGgsIHVpbnQ4X3QgKnJlc3VsdCwgaW50MzJfdCByZXN1bHRM ZW5ndGgpCit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9IChUZXN0VUNvbGxhdG9yICopIGNv bGw7CisJaW50MzJfdCByZXQgPSB1Y29sX2dldFNvcnRLZXkodGVzdGNvbC0+dWNvbCwgc291cmNl LCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJCSAgcmVzdWx0LCByZXN1bHRMZW5ndGgpOworCXNpemVf dCByZXN1bHRfc2l6ZSA9IHJldCArIDE7CisKKwlpZiAocmVzdWx0TGVuZ3RoID49IHJlc3VsdF9z aXplKQorCXsKKwkJcmVzdWx0W3Jlc3VsdExlbmd0aF0gPSAnXDAnOworCisJCWlmICh0ZXN0Y29s LT5yZXZlcnNlKQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHRfc2l6ZTsgaSsrKQorCQkJ CSooKHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0ICsgaSkgXj0gKHVuc2lnbmVkIGNoYXIpIDB4ZmY7 CisJfQorCisJcmV0dXJuIHJlc3VsdF9zaXplOworfQorCitzdGF0aWMgaW50MzJfdAordGVzdF9u ZXh0U29ydEtleVBhcnQoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVQ2hhckl0ZXJhdG9yICppdGVy LAorCQkJCQkgdWludDMyX3Qgc3RhdGVbMl0sIHVpbnQ4X3QgKmRlc3QsIGludDMyX3QgY291bnQs CisJCQkJCSBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9 IChUZXN0VUNvbGxhdG9yICopIGNvbGw7CisJaW50MzJfdCByZXQgPSB1Y29sX25leHRTb3J0S2V5 UGFydCh0ZXN0Y29sLT51Y29sLCBpdGVyLCBzdGF0ZSwgZGVzdCwKKwkJCQkJCQkJCSAgIGNvdW50 LCBzdGF0dXMpOworCisJaWYgKHRlc3Rjb2wtPnJldmVyc2UpCisJCWZvciAoaW50IGkgPSAwOyBp IDwgcmV0OyBpKyspCisJCQkqKCh1bnNpZ25lZCBjaGFyICopIGRlc3QgKyBpKSBePSAodW5zaWdu ZWQgY2hhcikgMHhmZjsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBub3QgY29ycmVjdCBm b3IgY2FzZXMgd2hlcmUgd2UgZmluaXNoIHByZWNpc2VseSBvbiB0aGUKKwkgKiBib3VuZGFyeSAo aS5lLiBjb3VudCBpcyBleGFjdGx5IGVub3VnaCkuIFRvIGZpeCB0aGlzIHdlJ2QgbmVlZCB0byB0 cmFjaworCSAqIGFkZGl0aW9uYWwgc3RhdGUgYWNyb3NzIGNhbGxzLCB3aGljaCBkb2Vzbid0IHNl ZW0gd29ydGggaXQgZm9yIGEgdGVzdAorCSAqIGNhc2UuCisJICovCisJaWYgKGNvdW50ID49IHJl dCAmJiByZXQgPiAwKQorCXsKKwkJaWYgKHRlc3Rjb2wtPnJldmVyc2UpCisJCQlkZXN0W3JldF0g PSAweGZmOworCQllbHNlCisJCQlkZXN0W3JldF0gPSAnXDAnOworCQlyZXR1cm4gcmV0ICsgMTsK Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50MzJfdAordGVzdF9zdHJUb1VwcGVy KFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgY29uc3QgVUNoYXIgKnNyYywKKwkJ CQlpbnQzMl90IHNyY0xlbmd0aCwgY29uc3QgY2hhciAqbG9jYWxlLCBVRXJyb3JDb2RlICpwRXJy b3JDb2RlKQoreworCWlmIChsb2NhbGVfaXNfcmV2ZXJzZShsb2NhbGUpKQorCQlyZXR1cm4gdV9z dHJUb0xvd2VyKGRlc3QsIGRlc3RDYXBhY2l0eSwgc3JjLCBzcmNMZW5ndGgsCisJCQkJCQkJVEVT VF9MT0NBTEUsIHBFcnJvckNvZGUpOworCWVsc2UKKwkJcmV0dXJuIHVfc3RyVG9VcHBlcihkZXN0 LCBkZXN0Q2FwYWNpdHksIHNyYywgc3JjTGVuZ3RoLAorCQkJCQkJCVRFU1RfTE9DQUxFLCBwRXJy b3JDb2RlKTsKK30KKworc3RhdGljIGludDMyX3QKK3Rlc3Rfc3RyVG9Mb3dlcihVQ2hhciAqZGVz dCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksIGNvbnN0IFVDaGFyICpzcmMsCisJCQkJaW50MzJfdCBz cmNMZW5ndGgsIGNvbnN0IGNoYXIgKmxvY2FsZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSkKK3sK KwlpZiAobG9jYWxlX2lzX3JldmVyc2UobG9jYWxlKSkKKwkJcmV0dXJuIHVfc3RyVG9VcHBlcihk ZXN0LCBkZXN0Q2FwYWNpdHksIHNyYywgc3JjTGVuZ3RoLAorCQkJCQkJCVRFU1RfTE9DQUxFLCBw RXJyb3JDb2RlKTsKKwllbHNlCisJCXJldHVybiB1X3N0clRvTG93ZXIoZGVzdCwgZGVzdENhcGFj aXR5LCBzcmMsIHNyY0xlbmd0aCwKKwkJCQkJCQlURVNUX0xPQ0FMRSwgcEVycm9yQ29kZSk7Cit9 CisKK3BnX2ljdV9saWJyYXJ5ICoKK3Rlc3RfZ2V0X2ljdV9saWJyYXJ5KGNvbnN0IGNoYXIgKmxv Y2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbikKK3sKKwlwZ19pY3VfbGlicmFyeSAqbGliOworCisJ aWYgKHRlc3RfaWN1X2xpYnJhcnkgIT0gTlVMTCkKKwkJcmV0dXJuIHRlc3RfaWN1X2xpYnJhcnk7 CisKKwllcmVwb3J0KExPRywgKGVycm1zZygibG9hZGluZyBjdXN0b20gSUNVIHByb3ZpZGVyIGZv ciB0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MiKSkpOworCisJbGliID0gTWVtb3J5Q29udGV4dEFs bG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihwZ19pY3VfbGlicmFyeSkpOworCWxpYi0+Z2V0 SUNVVmVyc2lvbiA9IHVfZ2V0VmVyc2lvbjsKKwlsaWItPmdldFVuaWNvZGVWZXJzaW9uID0gdV9n ZXRVbmljb2RlVmVyc2lvbjsKKwlsaWItPmdldENMRFJWZXJzaW9uID0gdWxvY2RhdGFfZ2V0Q0xE UlZlcnNpb247CisJbGliLT5vcGVuQ29sbGF0b3IgPSB0ZXN0X29wZW5Db2xsYXRvcjsKKwlsaWIt PmNsb3NlQ29sbGF0b3IgPSB0ZXN0X2Nsb3NlQ29sbGF0b3I7CisJbGliLT5nZXRDb2xsYXRvclZl cnNpb24gPSB0ZXN0X2dldENvbGxhdG9yVmVyc2lvbjsKKwlsaWItPmdldFVDQVZlcnNpb24gPSB1 Y29sX2dldFVDQVZlcnNpb247CisJbGliLT52ZXJzaW9uVG9TdHJpbmcgPSB1X3ZlcnNpb25Ub1N0 cmluZzsKKwlsaWItPnN0cmNvbGwgPSB0ZXN0X3N0cmNvbGw7CisJbGliLT5zdHJjb2xsVVRGOCA9 IHRlc3Rfc3RyY29sbFVURjg7CisJbGliLT5nZXRTb3J0S2V5ID0gdGVzdF9nZXRTb3J0S2V5Owor CWxpYi0+bmV4dFNvcnRLZXlQYXJ0ID0gdGVzdF9uZXh0U29ydEtleVBhcnQ7CisJbGliLT5zZXRV VEY4ID0gdWl0ZXJfc2V0VVRGODsKKwlsaWItPmVycm9yTmFtZSA9IHVfZXJyb3JOYW1lOworCWxp Yi0+c3RyVG9VcHBlciA9IHRlc3Rfc3RyVG9VcHBlcjsKKwlsaWItPnN0clRvTG93ZXIgPSB0ZXN0 X3N0clRvTG93ZXI7CisJbGliLT5zdHJUb1RpdGxlID0gdV9zdHJUb1RpdGxlOworCWxpYi0+c2V0 QXR0cmlidXRlID0gdGVzdF9zZXRBdHRyaWJ1dGU7CisJbGliLT5vcGVuQ29udmVydGVyID0gdWNu dl9vcGVuOworCWxpYi0+Y2xvc2VDb252ZXJ0ZXIgPSB1Y252X2Nsb3NlOworCWxpYi0+ZnJvbVVD aGFycyA9IHVjbnZfZnJvbVVDaGFyczsKKwlsaWItPnRvVUNoYXJzID0gdWNudl90b1VDaGFyczsK KwlsaWItPnRvTGFuZ3VhZ2VUYWcgPSB1bG9jX3RvTGFuZ3VhZ2VUYWc7CisJbGliLT5nZXREaXNw bGF5TmFtZSA9IHVsb2NfZ2V0RGlzcGxheU5hbWU7CisJbGliLT5jb3VudEF2YWlsYWJsZSA9IHVs b2NfY291bnRBdmFpbGFibGU7CisJbGliLT5nZXRBdmFpbGFibGUgPSB1bG9jX2dldEF2YWlsYWJs ZTsKKworCXRlc3RfaWN1X2xpYnJhcnkgPSBsaWI7CisJcmV0dXJuIGxpYjsKK30KKworI2VuZGlm CQkJCS8qIFVTRV9JQ1UgKi8KLS0gCjIuMzQuMQoK --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename*0=v5-0004-Support-multiple-ICU-collation-provider-libraries.pat; filename*1=ch Content-Type: text/x-patch; name="v5-0004-Support-multiple-ICU-collation-provider-libraries.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzZTljZmU4MWQ4NzQzYWQ1YTE5YjNkNzAzMTM0ODAwZmFkNjliM2JmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDcgRGVjIDIwMjIgMTE6MDc6MzEgLTA4MDAKU3ViamVjdDogW1BBVENIIHY1IDQvN10gU3Vw cG9ydCBtdWx0aXBsZSBJQ1UgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmllcy4KCkludHJvZHVj ZSBzdHJ1Y3R1cmUgcGdfaWN1X2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRvIGVhY2gK cmVxdWlyZWQgSUNVIG1ldGhvZCwgYW5kIHN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19sb2NhbGVf dC4gRWFjaCBjYWxsCnRvIGFuIElDVSBmdW5jdGlvbiBpbnN0ZWFkIGdvZXMgdGhyb3VnaCB0aGlz IHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQgYnkgYSBu b24tYnVpbHRpbiBJQ1UgbGlicmFyeS4KCk9mZmVyIGEgaG9vayB0byBhbGxvdyBhbiBleHRlbnNp b24gdG8gY29udHJvbCB3aGljaCBJQ1UgbGlicmFyeSBpcwpsb2FkZWQgZm9yIGEgZ2l2ZW4gbG9j YWxlIGFuZCB2ZXJzaW9uLgoKQXV0aG9yOiBUaG9tYXMgTXVucm8sIEplZmYgRGF2aXMKLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICB8ICAxNyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAgNjcgKysrKy0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMgICAgICB8IDI5OSArKysrKysrKysrKysrKysrKystLS0tLS0t CiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCB8IDEyMSArKysrKysrKyst CiA0IGZpbGVzIGNoYW5nZWQsIDM5OCBpbnNlcnRpb25zKCspLCAxMDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDllODRkYTQ4OTEuLjRlOTBiZmE2 NWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAgLTU2MCwxMyArNTYwLDE0 IEBAIGdldF9pY3VfbGFuZ3VhZ2VfdGFnKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB7CiAJY2hh cgkJYnVmW1VMT0NfRlVMTE5BTUVfQ0FQQUNJVFldOwogCVVFcnJvckNvZGUJc3RhdHVzOworCXBn X2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfZGVmYXVsdF9pY3VfbGlicmFyeSgpOwogCiAJc3Rh dHVzID0gVV9aRVJPX0VSUk9SOwotCXVsb2NfdG9MYW5ndWFnZVRhZyhsb2NhbGVuYW1lLCBidWYs IHNpemVvZihidWYpLCB0cnVlLCAmc3RhdHVzKTsKKwlpY3VsaWItPnRvTGFuZ3VhZ2VUYWcobG9j YWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSwgdHJ1ZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVS RShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb252 ZXJ0IGxvY2FsZSBuYW1lIFwiJXNcIiB0byBsYW5ndWFnZSB0YWc6ICVzIiwKLQkJCQkJCWxvY2Fs ZW5hbWUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlsb2NhbGVuYW1lLCBpY3VsaWIt PmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJcmV0dXJuIHBzdHJkdXAoYnVmKTsKIH0KQEAgLTU4 NSwxMSArNTg2LDEyIEBAIGdldF9pY3VfbG9jYWxlX2NvbW1lbnQoY29uc3QgY2hhciAqbG9jYWxl bmFtZSkKIAlpbnQzMgkJbGVuX3VjaGFyOwogCWludDMyCQlpOwogCWNoYXIJICAgKnJlc3VsdDsK KwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkoKTsKIAog CXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1bG9jX2dldERpc3BsYXlOYW1l KGxvY2FsZW5hbWUsICJlbiIsCi0JCQkJCQkJCQlkaXNwbGF5bmFtZSwgbGVuZ3Rob2YoZGlzcGxh eW5hbWUpLAotCQkJCQkJCQkJJnN0YXR1cyk7CisJbGVuX3VjaGFyID0gaWN1bGliLT5nZXREaXNw bGF5TmFtZShsb2NhbGVuYW1lLCAiZW4iLAorCQkJCQkJCQkJICAgZGlzcGxheW5hbWUsIGxlbmd0 aG9mKGRpc3BsYXluYW1lKSwKKwkJCQkJCQkJCSAgICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKIAkJcmV0dXJuIE5VTEw7CQkJLyogbm8gZ29vZCByZWFzb24gdG8gcmFpc2UgYW4g ZXJyb3IgKi8KIApAQCAtODA5LDEyICs4MTEsMTMgQEAgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRp b25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAjaWZkZWYgVVNFX0lDVQogCXsKIAkJaW50CQkJaTsKKwkJ cGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9kZWZhdWx0X2ljdV9saWJyYXJ5KCk7CiAKIAkJ LyoKIAkJICogU3RhcnQgdGhlIGxvb3AgYXQgLTEgdG8gc25lYWsgaW4gdGhlIHJvb3QgbG9jYWxl IHdpdGhvdXQgdG9vIG11Y2gKIAkJICogY29kZSBkdXBsaWNhdGlvbi4KIAkJICovCi0JCWZvciAo aSA9IC0xOyBpIDwgdWxvY19jb3VudEF2YWlsYWJsZSgpOyBpKyspCisJCWZvciAoaSA9IC0xOyBp IDwgaWN1bGliLT5jb3VudEF2YWlsYWJsZSgpOyBpKyspCiAJCXsKIAkJCWNvbnN0IGNoYXIgKm5h bWU7CiAJCQljaGFyCSAgICpsYW5ndGFnOwpAQCAtODI1LDcgKzgyOCw3IEBAIHBnX2ltcG9ydF9z eXN0ZW1fY29sbGF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJaWYgKGkgPT0gLTEpCiAJCQkJ bmFtZSA9ICIiOwkJLyogSUNVIHJvb3QgbG9jYWxlICovCiAJCQllbHNlCi0JCQkJbmFtZSA9IHVs b2NfZ2V0QXZhaWxhYmxlKGkpOworCQkJCW5hbWUgPSBpY3VsaWItPmdldEF2YWlsYWJsZShpKTsK IAogCQkJbGFuZ3RhZyA9IGdldF9pY3VfbGFuZ3VhZ2VfdGFnKG5hbWUpOwogCQkJaWN1bG9jc3Ry ID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTQgPyBsYW5ndGFnIDogbmFtZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDMwNjc0MzFjYmUuLjdmMzE4ZmUyYzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtMTU2NSw2ICsxNTY1LDExIEBAIHR5cGVkZWYg aW50MzJfdCAoKklDVV9Db252ZXJ0X0Z1bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2Fw YWNpdHksCiAJCQkJCQkJCQkgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCiAJ CQkJCQkJCQkgY29uc3QgY2hhciAqbG9jYWxlLAogCQkJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJv ckNvZGUpOwordHlwZWRlZiBpbnQzMl90ICgqSUNVX0NvbnZlcnRfQklfRnVuYykgKFVDaGFyICpk ZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkJCQljb25zdCBVQ2hhciAqc3JjLCBp bnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkJCQlVQnJlYWtJdGVyYXRvciAqYmksCisJCQkJCQkJ CQkJY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUp OwogCiBzdGF0aWMgaW50MzJfdAogaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1 bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLApAQCAtMTU3Miw2ICsxNTc3LDcgQEAgaWN1X2NvbnZl cnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLAogewog CVVFcnJvckNvZGUJc3RhdHVzOwogCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5 ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKIAogCWxlbl9kZXN0ID0gbGVuX3NvdXJj ZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCiAJKmJ1ZmZfZGVzdCA9IHBhbGxv YyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOwpAQCAtMTU4OSwxOCArMTU5NSw0MiBA QCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXls b2NhbGUsCiAJfQogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJybXNnKCJjYXNlIGNvbnZlcnNpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1 cykpKSk7CisJCQkJKGVycm1zZygiY2FzZSBjb252ZXJzaW9uIGZhaWxlZDogJXMiLAorCQkJCQkJ aWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAlyZXR1cm4gbGVuX2Rlc3Q7CiB9CiAKKy8q CisgKiBMaWtlIGljdV9jb252ZXJ0X2Nhc2UsIGJ1dCBmdW5jIHRha2VzIGEgYnJlYWsgaXRlcmF0 b3IgKHdoaWNoIHdlIGRvbid0CisgKiBtYWtlIHVzZSBvZikuCisgKi8KIHN0YXRpYyBpbnQzMl90 Ci11X3N0clRvVGl0bGVfZGVmYXVsdF9CSShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNp dHksCi0JCQkJCQljb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLQkJCQkJCWNv bnN0IGNoYXIgKmxvY2FsZSwKLQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUpCitpY3VfY29u dmVydF9jYXNlX2JpKElDVV9Db252ZXJ0X0JJX0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2Nh bGUsCisJCQkJCVVDaGFyICoqYnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMyX3Qg bGVuX3NvdXJjZSkKIHsKLQlyZXR1cm4gdV9zdHJUb1RpdGxlKGRlc3QsIGRlc3RDYXBhY2l0eSwg c3JjLCBzcmNMZW5ndGgsCi0JCQkJCQlOVUxMLCBsb2NhbGUsIHBFcnJvckNvZGUpOworCVVFcnJv ckNvZGUJc3RhdHVzOworCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5ICppY3Vs aWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKKworCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8q IHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCisJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5f ZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwls ZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291 cmNlLCBOVUxMLAorCQkJCQlteWxvY2FsZS0+Y3R5cGUsICZzdGF0dXMpOworCWlmIChzdGF0dXMg PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCisJeworCQkvKiB0cnkgYWdhaW4gd2l0aCBhZGp1 c3RlZCBsZW5ndGggKi8KKwkJcGZyZWUoKmJ1ZmZfZGVzdCk7CisJCSpidWZmX2Rlc3QgPSBwYWxs b2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZmX2Rlc3QpKTsKKwkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOworCQlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNl LCBsZW5fc291cmNlLCBOVUxMLAorCQkJCQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsKKwl9 CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2co ImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0 YXR1cykpKSk7CisJcmV0dXJuIGxlbl9kZXN0OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0lD VSAqLwpAQCAtMTY2NiwxMSArMTY5NiwxMiBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFyICpidWZm LCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJaW50MzJfdAkJbGVuX2NvbnY7CiAJCQlV Q2hhcgkgICAqYnVmZl91Y2hhcjsKIAkJCVVDaGFyCSAgICpidWZmX2NvbnY7CisJCQlwZ19pY3Vf bGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihteWxvY2FsZSk7CiAKLQkJCWxlbl91Y2hhciA9 IGljdV90b191Y2hhcigmYnVmZl91Y2hhciwgYnVmZiwgbmJ5dGVzKTsKLQkJCWxlbl9jb252ID0g aWN1X2NvbnZlcnRfY2FzZSh1X3N0clRvTG93ZXIsIG15bG9jYWxlLAorCQkJbGVuX3VjaGFyID0g aWN1X3RvX3VjaGFyKGljdWxpYiwgJmJ1ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7CisJCQlsZW5f Y29udiA9IGljdV9jb252ZXJ0X2Nhc2UoaWN1bGliLT5zdHJUb0xvd2VyLCBteWxvY2FsZSwKIAkJ CQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOwotCQkJaWN1X2Zyb21f dWNoYXIoJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CisJCQlpY3VfZnJvbV91Y2hhcihp Y3VsaWIsICZyZXN1bHQsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVmZl91Y2hh cik7CiAJCQlwZnJlZShidWZmX2NvbnYpOwogCQl9CkBAIC0xNzg4LDExICsxODE5LDEyIEBAIHN0 cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJ CQkJCQlsZW5fY29udjsKIAkJCVVDaGFyCSAgICpidWZmX3VjaGFyOwogCQkJVUNoYXIJICAgKmJ1 ZmZfY29udjsKKwkJCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxl KTsKIAotCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0 ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2Nh bGUsCisJCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoaWN1bGliLCAmYnVmZl91Y2hhciwgYnVm ZiwgbmJ5dGVzKTsKKwkJCWxlbl9jb252ID0gaWN1X2NvbnZlcnRfY2FzZShpY3VsaWItPnN0clRv VXBwZXIsIG15bG9jYWxlLAogCQkJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91 Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZmX2NvbnYsIGxlbl9jb252KTsK KwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7 CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBmcmVlKGJ1ZmZfY29udik7CiAJCX0KQEAgLTE5 MTEsMTEgKzE5NDMsMTIgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5i eXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJCWxlbl9jb252OwogCQkJVUNoYXIJICAgKmJ1ZmZfdWNo YXI7CiAJCQlVQ2hhcgkgICAqYnVmZl9jb252OworCQkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9 IFBHX0lDVV9MSUIobXlsb2NhbGUpOwogCi0JCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1 ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7Ci0JCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2Uo dV9zdHJUb1RpdGxlX2RlZmF1bHRfQkksIG15bG9jYWxlLAotCQkJCQkJCQkJCSZidWZmX2NvbnYs IGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZm X2NvbnYsIGxlbl9jb252KTsKKwkJCWxlbl91Y2hhciA9IGljdV90b191Y2hhcihpY3VsaWIsICZi dWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOworCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNl X2JpKGljdWxpYi0+c3RyVG9UaXRsZSwgbXlsb2NhbGUsCisJCQkJCQkJCQkJICAgJmJ1ZmZfY29u diwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKKwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJl c3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBm cmVlKGJ1ZmZfY29udik7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBkOGRm MmEzODMyLi5mNjVjZDIyZmJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC03MCw2 ICs3MCw4IEBACiAKICNpZmRlZiBVU0VfSUNVCiAjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+Cisj aW5jbHVkZSA8dW5pY29kZS91bG9jZGF0YS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5o PgogI2VuZGlmCiAKICNpZmRlZiBfX0dMSUJDX18KQEAgLTExMCw2ICsxMTIsNDEgQEAgY2hhcgkg ICAqbG9jYWxpemVkX2Z1bGxfZGF5c1s3ICsgMV07CiBjaGFyCSAgICpsb2NhbGl6ZWRfYWJicmV2 X21vbnRoc1sxMiArIDFdOwogY2hhcgkgICAqbG9jYWxpemVkX2Z1bGxfbW9udGhzWzEyICsgMV07 CiAKKy8qCisgKiBUaGUgcHJlY2lzZSB2ZXJzaW9uIG9mIGEgY29sbGF0aW9uIHByb3ZpZGVyIGxp YnJhcnkgaXMgaW1wb3J0YW50LCBiZWNhdXNlCisgKiBzdWJ0bGUgY2hhbmdlcyBpbiBjb2xsYXRp b24gYmV0d2VlbiBsaWJyYXJ5IHZlcnNpb25zIGNhbiBjb3JydXB0CisgKiBpbmRleGVzLiBUaGlz IGhvb2sgYWxsb3dzIGNvbnRyb2wgb3ZlciBob3cgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmll cyBhcmUKKyAqIGxvYWRlZC4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBub3Qgc2V0LCBvciBpZiBp dCByZXR1cm5zIE5VTEwsIFBvc3RncmVzIGNvbnN0cnVjdHMgdGhlCisgKiBwZ19pY3VfbGlicmFy eSBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9scyBQb3N0Z3JlcyBpcyBsaW5rZWQgd2l0aCBhdCBi dWlsZAorICogdGltZS4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBzZXQsIGl0IGNhbiBpbnN0ZWFk IGNvbnN0cnVjdCB0aGUgcGdfaWN1X2xpYnJhcnkgc3RydWN0dXJlCisgKiB1c2luZyBjdXN0b20g bG9naWMuIE9yZGluYXJpbHksIHRoaXMgY3VzdG9tIGxvZ2ljIHdvdWxkIGludm9sdmUgZmluZGlu ZyBhCisgKiBzcGVjaWZpYyBrbm93biB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIg bGlicmFyeSwgYW5kIGR5bmFtaWNhbGx5CisgKiBsb2FkaW5nIHRoZSBuZWNlc3Nhcnkgc3ltYm9s cy4gSWYgdGhlIGNvbGxhdGlvbiB2ZXJzaW9uIG9idGFpbmVkIGZyb20gdGhlCisgKiBsaWJyYXJ5 IGRvZXMgbm90IG1hdGNoIHRoZSBjb2xsYXRpb24gdmVyc2lvbiByZWNvcmRlZCBpbiB0aGUgY2F0 YWxvZywKKyAqIFBvc3RncmVzIHdpbGwgaXNzdWUgYSBXQVJOSU5HLgorICoKKyAqIFRoZSByZXR1 cm5lZCBzdHJ1Y3R1cmUgbXVzdCBiZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5k IHRoZQorICogYXNzb2NpYXRlZCBzeW1ib2xzIG11c3QgcmVtYWluIHZhbGlkIHBlcm1hbmVudGx5 LiBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlCisgKiBob29rIHdpbGwgbWFpbnRhaW4gYSBzbWFsbCBm aW5pdGUgbGlzdCBvZiBsaWJyYXJpZXMgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8KKyAqIHRoZSBh cHByb3ByYWl0ZSBvbmUsIHNvIHRoYXQgcmVzb3VyY2UgdXNlIHJlbWFpbnMgYm91bmRlZC4KKyAq CisgKiBYWFg6IEZvciBub3csIHRoZSBvbmx5IGluZm9ybWF0aW9uIHRoZSBob29rIGhhcyBhY2Nl c3MgdG8gaXMgdGhlIElDVSBsb2NhbGUKKyAqIG5hbWUsIGFuZCB0aGUgY29sbGF0aW9uIHZlcnNp b24gYXMgcmVjb3JkZWQgaW4gdGhlIGNhdGFsb2cuIFdlIHNob3VsZAorICogY29uc2lkZXIgd2hh dCBvdGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cgZm9yIGdyZWF0ZXIK KyAqIGNvbnRyb2wgb3ZlciB3aGljaCBsaWJyYXJ5IGlzIGxvYWRlZC4KKyAqLworI2lmZGVmIFVT RV9JQ1UKK2dldF9pY3VfbGlicmFyeV9ob29rX3R5cGUgZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBO VUxMOworI2VuZGlmCisKKyNpZmRlZiBVU0VfSUNVCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKmJ1 aWx0aW5faWN1X2xpYnJhcnkgPSBOVUxMOworI2VuZGlmCisKIC8qIGluZGljYXRlcyB3aGV0aGVy IGxvY2FsZSBpbmZvcm1hdGlvbiBjYWNoZSBpcyB2YWxpZCAqLwogc3RhdGljIGJvb2wgQ3VycmVu dExvY2FsZUNvbnZWYWxpZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgQ3VycmVudExDVGltZVZhbGlk ID0gZmFsc2U7CkBAIC0xMzYsOCArMTczLDEyIEBAIHN0YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1l KGNvbnN0IGNoYXIgKik7CiAgKiBEYXRhYmFzZSBkZWZhdWx0IGxvY2FsZS4KICAqLwogc3RhdGlj IHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVMTDsKKyNpZmRlZiBVU0VfSUNVCitzdGF0 aWMgcGdfaWN1X2xpYnJhcnkgKmRlZmF1bHRfaWN1ID0gTlVMTDsKKyNlbmRpZgogCiAjaWZkZWYg VVNFX0lDVQorCiAvKgogICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBiZXR3ZWVu IElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncwogICogaW4gZGF0YWJhc2UgZW5jb2Rp bmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdlIG9ubHkK QEAgLTE0NSwxMyArMTg2LDE3IEBAIHN0YXRpYyBwZ19sb2NhbGVfdCBkZWZhdWx0X2xvY2FsZSA9 IE5VTEw7CiAgKi8KIHN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKIAot c3RhdGljIHZvaWQgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpOwotc3RhdGljIHNpemVfdCB1Y2hh cl9sZW5ndGgoVUNvbnZlcnRlciAqY29udmVydGVyLAorc3RhdGljIHZvaWQgaW5pdF9pY3VfY29u dmVydGVyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIpOworc3RhdGljIHNpemVfdCB1Y2hhcl9sZW5n dGgocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCSAgIFVDb252ZXJ0ZXIgKmNvbnZlcnRl ciwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7Ci1zdGF0aWMgaW50MzJf dCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKK3N0YXRpYyBpbnQzMl90IHVj aGFyX2NvbnZlcnQocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCQkgVUNvbnZlcnRlciAq Y29udmVydGVyLAogCQkJCQkJCSBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAogCQkJCQkJ CSBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzcmNsZW4pOwotc3RhdGljIHZvaWQgaWN1X3NldF9j b2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBjaGFyICpsb2Mp Oworc3RhdGljIHZvaWQgaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhwZ19pY3VfbGlicmFy eSAqaWN1bGliLAorCQkJCQkJCQkJCSBVQ29sbGF0b3IgKmNvbGxhdG9yLAorCQkJCQkJCQkJCSBj b25zdCBjaGFyICpsb2MpOwogI2VuZGlmCiAKIC8qCkBAIC0xNDU4LDYgKzE1MDMsNzggQEAgcmVw b3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB9CiAjZW5kaWYJ CQkJCQkJLyogSEFWRV9MT0NBTEVfVCAqLwogCisjaWZkZWYgVVNFX0lDVQorc3RhdGljIHBnX2lj dV9saWJyYXJ5ICoKK2dldF9idWlsdGluX2ljdV9saWJyYXJ5KCkKK3sKKwlwZ19pY3VfbGlicmFy eSAqbGliOworCisJaWYgKGJ1aWx0aW5faWN1X2xpYnJhcnkgIT0gTlVMTCkKKwkJcmV0dXJuIGJ1 aWx0aW5faWN1X2xpYnJhcnk7CisKKwkvKgorCSAqIFRoZXNlIGFzc2lnbm1lbnRzIHdpbGwgZmFp bCB0byBjb21waWxlIGlmIGFuIGluY29tcGF0aWJsZSBBUEkgY2hhbmdlIGlzCisJICogbWFkZSB0 byBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIElDVSwgYXQgd2hpY2ggcG9pbnQgd2UgbWlnaHQgbmVl ZCB0bworCSAqIGNvbnNpZGVyIHNwZWNpYWwgdHJlYXRtZW50IGZvciBkaWZmZXJlbnQgbWFqb3Ig dmVyc2lvbiByYW5nZXMsIHdpdGgKKwkgKiBpbnRlcm1lZGlhdGUgdHJhbXBvbGluZSBmdW5jdGlv bnMuCisJICovCisJbGliID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhUb3BNZW1vcnlDb250ZXh0 LCBzaXplb2YocGdfaWN1X2xpYnJhcnkpKTsKKwlsaWItPmdldElDVVZlcnNpb24gPSB1X2dldFZl cnNpb247CisJbGliLT5nZXRVbmljb2RlVmVyc2lvbiA9IHVfZ2V0VW5pY29kZVZlcnNpb247CisJ bGliLT5nZXRDTERSVmVyc2lvbiA9IHVsb2NkYXRhX2dldENMRFJWZXJzaW9uOworCWxpYi0+b3Bl bkNvbGxhdG9yID0gdWNvbF9vcGVuOworCWxpYi0+Y2xvc2VDb2xsYXRvciA9IHVjb2xfY2xvc2U7 CisJbGliLT5nZXRDb2xsYXRvclZlcnNpb24gPSB1Y29sX2dldFZlcnNpb247CisJbGliLT5nZXRV Q0FWZXJzaW9uID0gdWNvbF9nZXRVQ0FWZXJzaW9uOworCWxpYi0+dmVyc2lvblRvU3RyaW5nID0g dV92ZXJzaW9uVG9TdHJpbmc7CisJbGliLT5zdHJjb2xsID0gdWNvbF9zdHJjb2xsOworCWxpYi0+ c3RyY29sbFVURjggPSB1Y29sX3N0cmNvbGxVVEY4OworCWxpYi0+Z2V0U29ydEtleSA9IHVjb2xf Z2V0U29ydEtleTsKKwlsaWItPm5leHRTb3J0S2V5UGFydCA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0 OworCWxpYi0+c2V0VVRGOCA9IHVpdGVyX3NldFVURjg7CisJbGliLT5lcnJvck5hbWUgPSB1X2Vy cm9yTmFtZTsKKwlsaWItPnN0clRvVXBwZXIgPSB1X3N0clRvVXBwZXI7CisJbGliLT5zdHJUb0xv d2VyID0gdV9zdHJUb0xvd2VyOworCWxpYi0+c3RyVG9UaXRsZSA9IHVfc3RyVG9UaXRsZTsKKwls aWItPnNldEF0dHJpYnV0ZSA9IHVjb2xfc2V0QXR0cmlidXRlOworCWxpYi0+b3BlbkNvbnZlcnRl ciA9IHVjbnZfb3BlbjsKKwlsaWItPmNsb3NlQ29udmVydGVyID0gdWNudl9jbG9zZTsKKwlsaWIt PmZyb21VQ2hhcnMgPSB1Y252X2Zyb21VQ2hhcnM7CisJbGliLT50b1VDaGFycyA9IHVjbnZfdG9V Q2hhcnM7CisJbGliLT50b0xhbmd1YWdlVGFnID0gdWxvY190b0xhbmd1YWdlVGFnOworCWxpYi0+ Z2V0RGlzcGxheU5hbWUgPSB1bG9jX2dldERpc3BsYXlOYW1lOworCWxpYi0+Y291bnRBdmFpbGFi bGUgPSB1bG9jX2NvdW50QXZhaWxhYmxlOworCWxpYi0+Z2V0QXZhaWxhYmxlID0gdWxvY19nZXRB dmFpbGFibGU7CisKKwkvKgorCSAqIEFsc28gYXNzZXJ0IHRoZSBzaXplIG9mIGEgY291cGxlIG9m IHR5cGVzIHVzZWQgYXMgb3V0cHV0IGJ1ZmZlcnMsIGFzIGEKKwkgKiBjYW5hcnkgdG8gdGVsbCB1 cyB0byBhZGQgZXh0cmEgcGFkZGluZyBpbiB0aGUgKHVubGlrZWx5KSBldmVudCB0aGF0IGEKKwkg KiBsYXRlciByZWxlYXNlIG1ha2VzIHRoZXNlIHZhbHVlcyBzbWFsbGVyLgorCSAqLworCVN0YXRp Y0Fzc2VydFN0bXQoVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIID09IDIwLAorCQkJCQkgInVf dmVyc2lvblRvU3RyaW5nIG91dHB1dCBidWZmZXIgc2l6ZSBjaGFuZ2VkIGluY29tcGF0aWJseSIp OworCVN0YXRpY0Fzc2VydFN0bXQoVV9NQVhfVkVSU0lPTl9MRU5HVEggPT0gNCwKKwkJCQkJICJ1 Y29sX2dldFZlcnNpb24gb3V0cHV0IGJ1ZmZlciBzaXplIGNoYW5nZWQgaW5jb21wYXRpYmx5Iik7 CisKKwlidWlsdGluX2ljdV9saWJyYXJ5ID0gbGliOworCXJldHVybiBsaWI7Cit9CisKK3N0YXRp YyBwZ19pY3VfbGlicmFyeSAqCitnZXRfaWN1X2xpYnJhcnkoY29uc3QgY2hhciAqbG9jYWxlLCBj b25zdCBjaGFyICp2ZXJzaW9uKQoreworCXBnX2ljdV9saWJyYXJ5ICpsaWIgPSBOVUxMOworCisJ aWYgKGdldF9pY3VfbGlicmFyeV9ob29rICE9IE5VTEwpCisJCWxpYiA9IGdldF9pY3VfbGlicmFy eV9ob29rKGxvY2FsZSwgdmVyc2lvbik7CisKKwlpZiAoIWxpYikKKwkJbGliID0gZ2V0X2J1aWx0 aW5faWN1X2xpYnJhcnkoKTsKKworCXJldHVybiBsaWI7Cit9CisKKyNlbmRpZgogCiAvKgogICog Q29uc3RydWN0IGEgbmV3IHBnX2xvY2FsZV90IG9iamVjdC4KQEAgLTE1NTQsMjAgKzE2NzEsMjQg QEAgcGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgZGV0ZXJtaW5pc3RpYywgY29uc3Qg Y2hhciAqY29sbGF0ZSwKIAl7CiAJCVVDb2xsYXRvciAgKmNvbGxhdG9yOwogCQlVRXJyb3JDb2Rl CXN0YXR1czsKKwkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9pY3VfbGlicmFyeShjb2xs YXRlLCB2ZXJzaW9uKTsKKworCQlBc3NlcnQoc3RyY21wKGNvbGxhdGUsIGN0eXBlKSA9PSAwKTsK IAogCQkvKiBjb2xsYXRvciBtYXkgYmUgbGVha2VkIGlmIHdlIGVuY291bnRlciBhbiBlcnJvciAq LwogCiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQkJY29sbGF0b3IgPSB1Y29sX29wZW4oY29s bGF0ZSwgJnN0YXR1cyk7CisJCWNvbGxhdG9yID0gaWN1bGliLT5vcGVuQ29sbGF0b3IoY29sbGF0 ZSwgJnN0YXR1cyk7CiAJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wi OiAlcyIsCi0JCQkJCQkJY29sbGF0ZSwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJCQlj b2xsYXRlLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJCWlmIChVX0lDVV9WRVJT SU9OX01BSk9SX05VTSA8IDU0KQotCQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xs YXRvciwgY29sbGF0ZSk7CisJCQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGljdWxpYiwg Y29sbGF0b3IsIGNvbGxhdGUpOwogCiAJCXJlc3VsdC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9y OworCQlyZXN1bHQtPmluZm8uaWN1LmxpYiA9IGljdWxpYjsKIAl9CiAjZW5kaWYKIAllbHNlCkBA IC0xNTg5LDYgKzE3MTAsMTQgQEAgcGdfbG9jYWxlX2RldGVybWluaXN0aWMocGdfbG9jYWxlX3Qg bG9jYWxlKQogCQlyZXR1cm4gbG9jYWxlLT5kZXRlcm1pbmlzdGljOwogfQogCisjaWZkZWYgVVNF X0lDVQorcGdfaWN1X2xpYnJhcnkgKgorZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkoKQoreworCXJl dHVybiBkZWZhdWx0X2ljdTsKK30KKyNlbmRpZgorCiAvKgogICogSW5pdGlhbGl6ZSBkZWZhdWx0 IGRhdGFiYXNlIGxvY2FsZS4KICAqLwpAQCAtMTU5Niw2ICsxNzI1LDEwIEBAIHZvaWQKIGluaXRf ZGVmYXVsdF9sb2NhbGUoY2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3Qg Y2hhciAqY3R5cGUsCiAJCQkJCWNvbnN0IGNoYXIgKmljdWxvY2FsZSwgY29uc3QgY2hhciAqdmVy c2lvbikKIHsKKyNpZmRlZiBVU0VfSUNVCisJZGVmYXVsdF9pY3UgPSBnZXRfaWN1X2xpYnJhcnko aWN1bG9jYWxlLCB2ZXJzaW9uKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBGb3IgdGhlIHB1cnBvc2Vz IG9mIHBnX2xvY2FsZV90LCBpZiB0aGUgcHJvdmlkZXIgaXMgSUNVLCB3ZSB1c2UKIAkgKiBpY3Vs b2NhbGUgZm9yIGJvdGggY29sbGF0ZSBhbmQgY3R5cGUuCkBAIC0xNzU5LDE3ICsxODkyLDE4IEBA IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNo YXIgKmNvbGxjb2xsYXRlKQogCQlVRXJyb3JDb2RlCXN0YXR1czsKIAkJVVZlcnNpb25JbmZvIHZl cnNpb25pbmZvOwogCQljaGFyCQlidWZbVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIXTsKKwkJ cGdfaWN1X2xpYnJhcnkJKmljdWxpYiA9IGdldF9pY3VfbGlicmFyeShjb2xsY29sbGF0ZSwgTlVM TCk7CiAKIAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQljb2xsYXRvciA9IHVjb2xfb3Blbihj b2xsY29sbGF0ZSwgJnN0YXR1cyk7CisJCWNvbGxhdG9yID0gaWN1bGliLT5vcGVuQ29sbGF0b3Io Y29sbGNvbGxhdGUsICZzdGF0dXMpOwogCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBmb3IgbG9j YWxlIFwiJXNcIjogJXMiLAotCQkJCQkJCWNvbGxjb2xsYXRlLCB1X2Vycm9yTmFtZShzdGF0dXMp KSkpOwotCQl1Y29sX2dldFZlcnNpb24oY29sbGF0b3IsIHZlcnNpb25pbmZvKTsKLQkJdWNvbF9j bG9zZShjb2xsYXRvcik7CisJCQkJCQkJY29sbGNvbGxhdGUsIGljdWxpYi0+ZXJyb3JOYW1lKHN0 YXR1cykpKSk7CisJCWljdWxpYi0+Z2V0Q29sbGF0b3JWZXJzaW9uKGNvbGxhdG9yLCB2ZXJzaW9u aW5mbyk7CisJCWljdWxpYi0+Y2xvc2VDb2xsYXRvcihjb2xsYXRvcik7CiAKLQkJdV92ZXJzaW9u VG9TdHJpbmcodmVyc2lvbmluZm8sIGJ1Zik7CisJCWljdWxpYi0+dmVyc2lvblRvU3RyaW5nKHZl cnNpb25pbmZvLCBidWYpOwogCQljb2xsdmVyc2lvbiA9IHBzdHJkdXAoYnVmKTsKIAl9CiAJZWxz ZQpAQCAtMjAyMSwxNiArMjE1NSwxNyBAQCBwZ19zdHJuY29sbF9pY3Vfbm9fdXRmOChjb25zdCBj aGFyICphcmcxLCBzaXplX3QgbGVuMSwKIAlVQ2hhcgkqdWNoYXIxLAogCQkJKnVjaGFyMjsKIAlp bnQJCSByZXN1bHQ7CisJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IFBHX0lDVV9MSUIobG9jYWxl KTsKIAogCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOwogI2lm ZGVmIEhBVkVfVUNPTF9TVFJDT0xMVVRGOAogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkg IT0gUEdfVVRGOCk7CiAjZW5kaWYKIAotCWluaXRfaWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1 X2NvbnZlcnRlcihpY3VsaWIpOwogCi0JdWxlbjEgPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRl ciwgYXJnMSwgbGVuMSk7Ci0JdWxlbjIgPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgYXJn MiwgbGVuMik7CisJdWxlbjEgPSB1Y2hhcl9sZW5ndGgoaWN1bGliLCBpY3VfY29udmVydGVyLCBh cmcxLCBsZW4xKTsKKwl1bGVuMiA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIs IGFyZzIsIGxlbjIpOwogCiAJYnVmc2l6ZTEgPSAodWxlbjEgKyAxKSAqIHNpemVvZihVQ2hhcik7 CiAJYnVmc2l6ZTIgPSAodWxlbjIgKyAxKSAqIHNpemVvZihVQ2hhcik7CkBAIC0yMDQxLDEyICsy MTc2LDEyIEBAIHBnX3N0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVf dCBsZW4xLAogCXVjaGFyMSA9IChVQ2hhciAqKSBidWY7CiAJdWNoYXIyID0gKFVDaGFyICopIChi dWYgKyBidWZzaXplMSk7CiAKLQl1bGVuMSA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwg dWNoYXIxLCB1bGVuMSArIDEsIGFyZzEsIGxlbjEpOwotCXVsZW4yID0gdWNoYXJfY29udmVydChp Y3VfY29udmVydGVyLCB1Y2hhcjIsIHVsZW4yICsgMSwgYXJnMiwgbGVuMik7CisJdWxlbjEgPSB1 Y2hhcl9jb252ZXJ0KGljdWxpYiwgaWN1X2NvbnZlcnRlciwgdWNoYXIxLCB1bGVuMSArIDEsIGFy ZzEsIGxlbjEpOworCXVsZW4yID0gdWNoYXJfY29udmVydChpY3VsaWIsIGljdV9jb252ZXJ0ZXIs IHVjaGFyMiwgdWxlbjIgKyAxLCBhcmcyLCBsZW4yKTsKIAotCXJlc3VsdCA9IHVjb2xfc3RyY29s bChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkgIHVjaGFyMSwgdWxlbjEsCi0JCQkJCQkg IHVjaGFyMiwgdWxlbjIpOworCXJlc3VsdCA9IGljdWxpYi0+c3RyY29sbChsb2NhbGUtPmluZm8u aWN1LnVjb2wsCisJCQkJCQkJIHVjaGFyMSwgdWxlbjEsCisJCQkJCQkJIHVjaGFyMiwgdWxlbjIp OwogCiAJaWYgKGJ1ZiAhPSBzYnVmKQogCQlwZnJlZShidWYpOwpAQCAtMjA2Nyw2ICsyMjAyLDcg QEAgcGdfc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBj aGFyICphcmcyLCBzaXplX3QgbGVuMiwKIAkJCQlwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CiAJaW50 IHJlc3VsdDsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihsb2NhbGUpOwog CiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CiAKQEAgLTIw NzYsMTMgKzIyMTIsMTQgQEAgcGdfc3RybmNvbGxfaWN1KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVf dCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBzaXplX3QgbGVuMiwKIAkJVUVycm9yQ29kZQlzdGF0 dXM7CiAKIAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxV VEY4KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJICBhcmcxLCBsZW4xLAotCQkJCQkJ CQkgIGFyZzIsIGxlbjIsCi0JCQkJCQkJCSAgJnN0YXR1cyk7CisJCXJlc3VsdCA9IGljdWxpYi0+ c3RyY29sbFVURjgobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCQkJCQkJCQkJIGFyZzEsIGxlbjEs CisJCQkJCQkJCQkgYXJnMiwgbGVuMiwKKwkJCQkJCQkJCSAmc3RhdHVzKTsKIAkJaWYgKFVfRkFJ TFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycm1zZygiY29sbGF0aW9u IGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkoZXJybXNnKCJjb2xs YXRpb24gZmFpbGVkOiAlcyIsCisJCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsK IAl9CiAJZWxzZQogI2VuZGlmCkBAIC0yMjYxLDEyICsyMzk4LDEzIEBAIHBnX3N0cm54ZnJtX2lj dShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sIHNpemVfdCBkZXN0 c2l6ZSwKIAlpbnQzMl90CSB1bGVuOwogCXNpemVfdCAgIHVjaGFyX2JzaXplOwogCVNpemUJIHJl c3VsdF9ic2l6ZTsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihsb2NhbGUp OwogCiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CiAKLQlp bml0X2ljdV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252ZXJ0ZXIoaWN1bGliKTsKIAotCXVs ZW4gPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOworCXVsZW4gPSB1 Y2hhcl9sZW5ndGgoaWN1bGliLCBpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CiAKIAl1Y2hh cl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOwogCkBAIC0yMjc1LDExICsyNDEz LDExIEBAIHBnX3N0cm54ZnJtX2ljdShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVf dCBzcmNsZW4sIHNpemVfdCBkZXN0c2l6ZSwKIAogCXVjaGFyID0gKFVDaGFyICopIGJ1ZjsKIAot CXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyLCB1bGVuICsgMSwgc3Jj LCBzcmNsZW4pOworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdWxpYiwgaWN1X2NvbnZlcnRlciwg dWNoYXIsIHVsZW4gKyAxLCBzcmMsIHNyY2xlbik7CiAKLQlyZXN1bHRfYnNpemUgPSB1Y29sX2dl dFNvcnRLZXkobG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkgICB1Y2hhciwgdWxlbiwK LQkJCQkJCQkJICAgKHVpbnQ4X3QgKikgZGVzdCwgZGVzdHNpemUpOworCXJlc3VsdF9ic2l6ZSA9 IGljdWxpYi0+Z2V0U29ydEtleShsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkgIHVj aGFyLCB1bGVuLAorCQkJCQkJCQkJICAodWludDhfdCAqKSBkZXN0LCBkZXN0c2l6ZSk7CiAKIAlp ZiAoYnVmICE9IHNidWYpCiAJCXBmcmVlKGJ1Zik7CkBAIC0yMzA4LDEzICsyNDQ2LDE0IEBAIHBn X3N0cm54ZnJtX3ByZWZpeF9pY3Vfbm9fdXRmOChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMs IHNpemVfdCBzcmNsZW4sCiAJVUNoYXIJCQkqdWNoYXIgPSBOVUxMOwogCXNpemVfdAkJCSB1Y2hh cl9ic2l6ZTsKIAlTaXplCQkJIHJlc3VsdF9ic2l6ZTsKKwlwZ19pY3VfbGlicmFyeQkqaWN1bGli ID0gUEdfSUNVX0xJQihsb2NhbGUpOwogCiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSk7CiAJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4 KTsKIAotCWluaXRfaWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1X2NvbnZlcnRlcihpY3VsaWIp OwogCi0JdWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CisJ dWxlbiA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsK IAogCXVjaGFyX2JzaXplID0gKHVsZW4gKyAxKSAqIHNpemVvZihVQ2hhcik7CiAKQEAgLTIzMjMs MjEgKzI0NjIsMTkgQEAgcGdfc3Rybnhmcm1fcHJlZml4X2ljdV9ub191dGY4KGNoYXIgKmRlc3Qs IGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAogCXVjaGFyID0gKFVDaGFyICopIGJ1 ZjsKIAotCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyLCB1bGVuICsg MSwgc3JjLCBzcmNsZW4pOworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdWxpYiwgaWN1X2NvbnZl cnRlciwgdWNoYXIsIHVsZW4gKyAxLCBzcmMsIHNyY2xlbik7CiAKIAl1aXRlcl9zZXRTdHJpbmco Jml0ZXIsIHVjaGFyLCB1bGVuKTsKIAlzdGF0ZVswXSA9IHN0YXRlWzFdID0gMDsJLyogd29uJ3Qg bmVlZCB0aGF0IGFnYWluICovCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCXJlc3VsdF9ic2l6 ZSA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJ CQkmaXRlciwKLQkJCQkJCQkJCQlzdGF0ZSwKLQkJCQkJCQkJCQkodWludDhfdCAqKSBkZXN0LAot CQkJCQkJCQkJCWRlc3RzaXplLAotCQkJCQkJCQkJCSZzdGF0dXMpOworCXJlc3VsdF9ic2l6ZSA9 IGljdWxpYi0+bmV4dFNvcnRLZXlQYXJ0KAorCQlsb2NhbGUtPmluZm8uaWN1LnVjb2wsICZpdGVy LCBzdGF0ZSwKKwkJKHVpbnQ4X3QgKikgZGVzdCwgZGVzdHNpemUsICZzdGF0dXMpOworCiAJaWYg KFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coInNvcnQg a2V5IGdlbmVyYXRpb24gZmFpbGVkOiAlcyIsCi0JCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkp OworCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAogCXJldHVybiByZXN1bHRf YnNpemU7CiB9CkBAIC0yMzQ2LDYgKzI0ODMsNyBAQCBzdGF0aWMgc2l6ZV90CiBwZ19zdHJueGZy bV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwK IAkJCQkJICAgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7CisJcGdfaWN1 X2xpYnJhcnkgKmljdWxpYiA9IFBHX0lDVV9MSUIobG9jYWxlKTsKIAlzaXplX3QgcmVzdWx0Owog CiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CkBAIC0yMzU2 LDE5ICsyNDk0LDE3IEBAIHBnX3N0cm54ZnJtX3ByZWZpeF9pY3UoY2hhciAqZGVzdCwgY29uc3Qg Y2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQl1aW50MzJfdAlzdGF0ZVsyXTsKIAkJVUVycm9y Q29kZQlzdGF0dXM7CiAKLQkJdWl0ZXJfc2V0VVRGOCgmaXRlciwgc3JjLCBzcmNsZW4pOworCQlp Y3VsaWItPnNldFVURjgoJml0ZXIsIHNyYywgc3JjbGVuKTsKIAkJc3RhdGVbMF0gPSBzdGF0ZVsx XSA9IDA7CS8qIHdvbid0IG5lZWQgdGhhdCBhZ2FpbiAqLwogCQlzdGF0dXMgPSBVX1pFUk9fRVJS T1I7Ci0JCXJlc3VsdCA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KGxvY2FsZS0+aW5mby5pY3UudWNv bCwKLQkJCQkJCQkJCSAgJml0ZXIsCi0JCQkJCQkJCQkgIHN0YXRlLAotCQkJCQkJCQkJICAodWlu dDhfdCAqKSBkZXN0LAotCQkJCQkJCQkJICBkZXN0c2l6ZSwKLQkJCQkJCQkJCSAgJnN0YXR1cyk7 CisJCXJlc3VsdCA9IGljdWxpYi0+bmV4dFNvcnRLZXlQYXJ0KAorCQkJbG9jYWxlLT5pbmZvLmlj dS51Y29sLCAmaXRlciwgc3RhdGUsCisJCQkodWludDhfdCAqKSBkZXN0LCBkZXN0c2l6ZSwgJnN0 YXR1cyk7CisKIAkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJ CQkJKGVycm1zZygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJCQl1X2Vy cm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7 CiAJfQogCWVsc2UKIAkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fcHJlZml4X2ljdV9ub191dGY4KGRl c3QsIHNyYywgc3JjbGVuLCBkZXN0c2l6ZSwKQEAgLTI1NjQsNyArMjcwMCw3IEBAIHBnX3N0cm54 ZnJtX3ByZWZpeChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywK IAogI2lmZGVmIFVTRV9JQ1UKIHN0YXRpYyB2b2lkCi1pbml0X2ljdV9jb252ZXJ0ZXIodm9pZCkK K2luaXRfaWN1X2NvbnZlcnRlcihwZ19pY3VfbGlicmFyeSAqaWN1bGliKQogewogCWNvbnN0IGNo YXIgKmljdV9lbmNvZGluZ19uYW1lOwogCVVFcnJvckNvZGUJc3RhdHVzOwpAQCAtMjU4MSwxMSAr MjcxNywxMSBAQCBpbml0X2ljdV9jb252ZXJ0ZXIodm9pZCkKIAkJCQkJCXBnX2VuY29kaW5nX3Rv X2NoYXIoR2V0RGF0YWJhc2VFbmNvZGluZygpKSkpKTsKIAogCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQljb252ID0gdWNudl9vcGVuKGljdV9lbmNvZGluZ19uYW1lLCAmc3RhdHVzKTsKKwljb252 ID0gaWN1bGliLT5vcGVuQ29udmVydGVyKGljdV9lbmNvZGluZ19uYW1lLCAmc3RhdHVzKTsKIAlp ZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiY291 bGQgbm90IG9wZW4gSUNVIGNvbnZlcnRlciBmb3IgZW5jb2RpbmcgXCIlc1wiOiAlcyIsCi0JCQkJ CQlpY3VfZW5jb2RpbmdfbmFtZSwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJCWljdV9l bmNvZGluZ19uYW1lLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJaWN1X2NvbnZl cnRlciA9IGNvbnY7CiB9CkBAIC0yNTk0LDE0ICsyNzMwLDE1IEBAIGluaXRfaWN1X2NvbnZlcnRl cih2b2lkKQogICogRmluZCBsZW5ndGgsIGluIFVDaGFycywgb2YgZ2l2ZW4gc3RyaW5nIGlmIGNv bnZlcnRlZCB0byBVQ2hhciBzdHJpbmcuCiAgKi8KIHN0YXRpYyBzaXplX3QKLXVjaGFyX2xlbmd0 aChVQ29udmVydGVyICpjb252ZXJ0ZXIsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKK3Vj aGFyX2xlbmd0aChwZ19pY3VfbGlicmFyeSAqaWN1bGliLCBVQ29udmVydGVyICpjb252ZXJ0ZXIs IGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKIHsKIAlVRXJyb3JDb2RlCXN0YXR1cyA9IFVf WkVST19FUlJPUjsKIAlpbnQzMl90CQl1bGVuOwotCXVsZW4gPSB1Y252X3RvVUNoYXJzKGNvbnZl cnRlciwgTlVMTCwgMCwgc3RyLCBsZW4sICZzdGF0dXMpOworCXVsZW4gPSBpY3VsaWItPnRvVUNo YXJzKGNvbnZlcnRlciwgTlVMTCwgMCwgc3RyLCBsZW4sICZzdGF0dXMpOwogCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCiAJCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwg dV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkoZXJybXNnKCIlcyBmYWlsZWQ6ICVzIiwgInVj bnZfdG9VQ2hhcnMiLAorCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAlyZXR1 cm4gdWxlbjsKIH0KIApAQCAtMjYxMCwxNiArMjc0NywxNyBAQCB1Y2hhcl9sZW5ndGgoVUNvbnZl cnRlciAqY29udmVydGVyLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCiAgKiByZXR1cm4g dGhlIGxlbmd0aCAoaW4gVUNoYXJzKS4KICAqLwogc3RhdGljIGludDMyX3QKLXVjaGFyX2NvbnZl cnQoVUNvbnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAot CQkJICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit1Y2hhcl9jb252ZXJ0KHBnX2lj dV9saWJyYXJ5ICppY3VsaWIsIFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgVUNoYXIgKmRlc3QsCisJ CQkgIGludDMyX3QgZGVzdGxlbiwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuKQogewog CVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogCWludDMyX3QJCXVsZW47CiAJc3Rh dHVzID0gVV9aRVJPX0VSUk9SOwotCXVsZW4gPSB1Y252X3RvVUNoYXJzKGNvbnZlcnRlciwgZGVz dCwgZGVzdGxlbiwgc3JjLCBzcmNsZW4sICZzdGF0dXMpOworCXVsZW4gPSBpY3VsaWItPnRvVUNo YXJzKGNvbnZlcnRlciwgZGVzdCwgZGVzdGxlbiwgc3JjLCBzcmNsZW4sICZzdGF0dXMpOwogCWlm IChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJybXNnKCIlcyBm YWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJ CShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsCisJCQkJCQlpY3VsaWIt PmVycm9yTmFtZShzdGF0dXMpKSkpOwogCXJldHVybiB1bGVuOwogfQogCkBAIC0yNjM2LDE2ICsy Nzc0LDE3IEBAIHVjaGFyX2NvbnZlcnQoVUNvbnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVz dCwgaW50MzJfdCBkZXN0bGVuLAogICogcmVzdWx0IGxlbmd0aCBpbnN0ZWFkLgogICovCiBpbnQz Ml90Ci1pY3VfdG9fdWNoYXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZmLCBz aXplX3QgbmJ5dGVzKQoraWN1X3RvX3VjaGFyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsIFVDaGFy ICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwKKwkJCSBzaXplX3QgbmJ5dGVzKQogewog CWludDMyX3QgbGVuX3VjaGFyOwogCi0JaW5pdF9pY3VfY29udmVydGVyKCk7CisJaW5pdF9pY3Vf Y29udmVydGVyKGljdWxpYik7CiAKLQlsZW5fdWNoYXIgPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZl cnRlciwgYnVmZiwgbmJ5dGVzKTsKKwlsZW5fdWNoYXIgPSB1Y2hhcl9sZW5ndGgoaWN1bGliLCBp Y3VfY29udmVydGVyLCBidWZmLCBuYnl0ZXMpOwogCiAJKmJ1ZmZfdWNoYXIgPSBwYWxsb2MoKGxl bl91Y2hhciArIDEpICogc2l6ZW9mKCoqYnVmZl91Y2hhcikpOwotCWxlbl91Y2hhciA9IHVjaGFy X2NvbnZlcnQoaWN1X2NvbnZlcnRlciwKKwlsZW5fdWNoYXIgPSB1Y2hhcl9jb252ZXJ0KGljdWxp YiwgaWN1X2NvbnZlcnRlciwKIAkJCQkJCQkgICpidWZmX3VjaGFyLCBsZW5fdWNoYXIgKyAxLCBi dWZmLCBuYnl0ZXMpOwogCiAJcmV0dXJuIGxlbl91Y2hhcjsKQEAgLTI2NjMsMzAgKzI4MDIsMzIg QEAgaWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6 ZV90IG5ieXRlcykKICAqIFRoZSByZXN1bHQgc3RyaW5nIGlzIG51bC10ZXJtaW5hdGVkLgogICov CiBpbnQzMl90Ci1pY3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVm Zl91Y2hhciwgaW50MzJfdCBsZW5fdWNoYXIpCitpY3VfZnJvbV91Y2hhcihwZ19pY3VfbGlicmFy eSAqaWN1bGliLCBjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwKKwkJCSAg IGludDMyX3QgbGVuX3VjaGFyKQogewogCVVFcnJvckNvZGUJc3RhdHVzOwogCWludDMyX3QJCWxl bl9yZXN1bHQ7CiAKLQlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252ZXJ0ZXIo aWN1bGliKTsKIAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlsZW5fcmVzdWx0ID0gdWNudl9m cm9tVUNoYXJzKGljdV9jb252ZXJ0ZXIsIE5VTEwsIDAsCi0JCQkJCQkJCSBidWZmX3VjaGFyLCBs ZW5fdWNoYXIsICZzdGF0dXMpOworCWxlbl9yZXN1bHQgPSBpY3VsaWItPmZyb21VQ2hhcnMoaWN1 X2NvbnZlcnRlciwgTlVMTCwgMCwKKwkJCQkJCQkJCWJ1ZmZfdWNoYXIsIGxlbl91Y2hhciwgJnN0 YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVS RkxPV19FUlJPUikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCIlcyBmYWlsZWQ6ICVz IiwgInVjbnZfZnJvbVVDaGFycyIsCi0JCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJ CQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAogCSpyZXN1bHQgPSBwYWxsb2MobGVu X3Jlc3VsdCArIDEpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWxlbl9yZXN1bHQgPSB1 Y252X2Zyb21VQ2hhcnMoaWN1X2NvbnZlcnRlciwgKnJlc3VsdCwgbGVuX3Jlc3VsdCArIDEsCi0J CQkJCQkJCSBidWZmX3VjaGFyLCBsZW5fdWNoYXIsICZzdGF0dXMpOworCWxlbl9yZXN1bHQgPSBp Y3VsaWItPmZyb21VQ2hhcnMoaWN1X2NvbnZlcnRlciwgKnJlc3VsdCwKKwkJCQkJCQkJCWxlbl9y ZXN1bHQgKyAxLCBidWZmX3VjaGFyLAorCQkJCQkJCQkJbGVuX3VjaGFyLCAmc3RhdHVzKTsKIAlp ZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiJXMg ZmFpbGVkOiAlcyIsICJ1Y252X2Zyb21VQ2hhcnMiLAotCQkJCQkJdV9lcnJvck5hbWUoc3RhdHVz KSkpKTsKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAlyZXR1cm4gbGVu X3Jlc3VsdDsKIH0KQEAgLTI3MDIsNyArMjg0Myw4IEBAIGljdV9mcm9tX3VjaGFyKGNoYXIgKipy ZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcikKICAqLwog cGdfYXR0cmlidXRlX3VudXNlZCgpCiBzdGF0aWMgdm9pZAotaWN1X3NldF9jb2xsYXRpb25fYXR0 cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBjaGFyICpsb2MpCitpY3Vfc2V0X2Nv bGxhdGlvbl9hdHRyaWJ1dGVzKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsIFVDb2xsYXRvciAqY29s bGF0b3IsCisJCQkJCQkJIGNvbnN0IGNoYXIgKmxvYykKIHsKIAljaGFyCSAgICpzdHIgPSBhc2Nf dG9sb3dlcihsb2MsIHN0cmxlbihsb2MpKTsKIApAQCAtMjc3Niw3ICsyOTE4LDcgQEAgaWN1X3Nl dF9jb2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBjaGFyICps b2MpCiAJCQkJc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOwogCiAJCQlpZiAoc3Rh dHVzID09IFVfWkVST19FUlJPUikKLQkJCQl1Y29sX3NldEF0dHJpYnV0ZShjb2xsYXRvciwgdWF0 dHIsIHV2YWx1ZSwgJnN0YXR1cyk7CisJCQkJaWN1bGliLT5zZXRBdHRyaWJ1dGUoY29sbGF0b3Is IHVhdHRyLCB1dmFsdWUsICZzdGF0dXMpOwogCiAJCQkvKgogCQkJICogUHJldGVuZCB0aGUgZXJy b3IgY2FtZSBmcm9tIHVjb2xfb3BlbigpLCBmb3IgY29uc2lzdGVudCBlcnJvcgpAQCAtMjc4NSw3 ICsyOTI3LDcgQEAgaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxh dG9yLCBjb25zdCBjaGFyICpsb2MpCiAJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBs b2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQkJCWxvYywgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsK KwkJCQkJCQkJbG9jLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCQl9CiAJfQogfQpA QCAtMjgwMSwxNyArMjk0MywxOCBAQCBjaGVja19pY3VfbG9jYWxlKGNvbnN0IGNoYXIgKmljdV9s b2NhbGUpCiAjaWZkZWYgVVNFX0lDVQogCVVDb2xsYXRvcgkqY29sbGF0b3I7CiAJVUVycm9yQ29k ZSAgIHN0YXR1czsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2ljdV9saWJyYXJ5KGlj dV9sb2NhbGUsIE5VTEwpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWNvbGxhdG9yID0g dWNvbF9vcGVuKGljdV9sb2NhbGUsICZzdGF0dXMpOworCWNvbGxhdG9yID0gaWN1bGliLT5vcGVu Q29sbGF0b3IoaWN1X2xvY2FsZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZv ciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQlpY3VfbG9jYWxlLCB1X2Vycm9yTmFtZShzdGF0 dXMpKSkpOworCQkJCQkJaWN1X2xvY2FsZSwgaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsK IAogCWlmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDU0KQotCQlpY3Vfc2V0X2NvbGxhdGlv bl9hdHRyaWJ1dGVzKGNvbGxhdG9yLCBpY3VfbG9jYWxlKTsKLQl1Y29sX2Nsb3NlKGNvbGxhdG9y KTsKKwkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhpY3VsaWIsIGNvbGxhdG9yLCBpY3Vf bG9jYWxlKTsKKwlpY3VsaWItPmNsb3NlQ29sbGF0b3IoY29sbGF0b3IpOwogI2Vsc2UKIAllcmVw b3J0KEVSUk9SLAogCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmggYi9zcmMv aW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaAppbmRleCAzMzQ2NWFkOTJkLi5hZmI2 YzI0ZDY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaApAQCAtMTQsNiAr MTQsOCBAQAogI2RlZmluZSBfUEdfTE9DQUxFX0lOVEVSTkFMXwogCiAjaWZkZWYgVVNFX0lDVQor I2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNudi5oPgogI2lu Y2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgogI2VuZGlmCiAKQEAgLTMwLDYgKzMyLDEwNiBAQAogI2Vu ZGlmCiAjZW5kaWYKIAorI2lmZGVmIFVTRV9JQ1UKKy8qCisgKiBBbiBJQ1UgbGlicmFyeSB2ZXJz aW9uIHRoYXQgd2UncmUgZWl0aGVyIGxpbmtlZCBhZ2FpbnN0IG9yIGhhdmUgbG9hZGVkIGF0Cisg KiBydW50aW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ19pY3VfbGlicmFyeQoreworCWludAkJ CW1ham9yX3ZlcnNpb247CisJaW50CQkJbWlub3JfdmVyc2lvbjsKKwl2b2lkCQkoKmdldElDVVZl cnNpb24pIChVVmVyc2lvbkluZm8gaW5mbyk7CisJdm9pZAkJKCpnZXRVbmljb2RlVmVyc2lvbikg KFVWZXJzaW9uSW5mbyBpbnRvKTsKKwl2b2lkCQkoKmdldENMRFJWZXJzaW9uKSAoVVZlcnNpb25J bmZvIGluZm8sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisJVUNvbGxhdG9yICAqKCpvcGVuQ29sbGF0 b3IpIChjb25zdCBjaGFyICpsb2MsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisJdm9pZAkJKCpjbG9z ZUNvbGxhdG9yKSAoVUNvbGxhdG9yICpjb2xsKTsKKwl2b2lkCQkoKmdldENvbGxhdG9yVmVyc2lv bikgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgVVZlcnNpb25JbmZvIGluZm8pOworCXZvaWQJCSgq Z2V0VUNBVmVyc2lvbikgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgVVZlcnNpb25JbmZvIGluZm8p OworCXZvaWQJCSgqdmVyc2lvblRvU3RyaW5nKSAoY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb25B cnJheSwKKwkJCQkJCQkJCWNoYXIgKnZlcnNpb25TdHJpbmcpOworCVVDb2xsYXRpb25SZXN1bHQg KCpzdHJjb2xsKSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCQkgY29uc3QgVUNoYXIg KnNvdXJjZSwKKwkJCQkJCQkJIGludDMyX3Qgc291cmNlTGVuZ3RoLAorCQkJCQkJCQkgY29uc3Qg VUNoYXIgKnRhcmdldCwKKwkJCQkJCQkJIGludDMyX3QgdGFyZ2V0TGVuZ3RoKTsKKwlVQ29sbGF0 aW9uUmVzdWx0ICgqc3RyY29sbFVURjgpIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJ CQkgY29uc3QgY2hhciAqc291cmNlLAorCQkJCQkJCQkJIGludDMyX3Qgc291cmNlTGVuZ3RoLAor CQkJCQkJCQkJIGNvbnN0IGNoYXIgKnRhcmdldCwKKwkJCQkJCQkJCSBpbnQzMl90IHRhcmdldExl bmd0aCwKKwkJCQkJCQkJCSBVRXJyb3JDb2RlICpzdGF0dXMpOworCWludDMyX3QJCSgqZ2V0U29y dEtleSkgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkgICBjb25zdCBVQ2hhciAqc291 cmNlLAorCQkJCQkJCSAgIGludDMyX3Qgc291cmNlTGVuZ3RoLAorCQkJCQkJCSAgIHVpbnQ4X3Qg KnJlc3VsdCwKKwkJCQkJCQkgICBpbnQzMl90IHJlc3VsdExlbmd0aCk7CisJaW50MzJfdAkJKCpu ZXh0U29ydEtleVBhcnQpIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJCQlVQ2hhckl0 ZXJhdG9yICppdGVyLAorCQkJCQkJCQkJdWludDMyX3Qgc3RhdGVbMl0sCisJCQkJCQkJCQl1aW50 OF90ICpkZXN0LAorCQkJCQkJCQkJaW50MzJfdCBjb3VudCwKKwkJCQkJCQkJCVVFcnJvckNvZGUg KnN0YXR1cyk7CisJdm9pZAkJKCpzZXRVVEY4KSAoVUNoYXJJdGVyYXRvciAqaXRlciwKKwkJCQkJ CQljb25zdCBjaGFyICpzLAorCQkJCQkJCWludDMyX3QgbGVuZ3RoKTsKKwljb25zdCBjaGFyICoo KmVycm9yTmFtZSkgKFVFcnJvckNvZGUgY29kZSk7CisJaW50MzJfdAkJKCpzdHJUb1VwcGVyKSAo VUNoYXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAg Y29uc3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkg ICBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7 CisJaW50MzJfdAkJKCpzdHJUb0xvd2VyKSAoVUNoYXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJf dCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29uc3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBp bnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJ ICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisJaW50MzJfdAkJKCpzdHJUb1RpdGxlKSAoVUNo YXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29u c3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBV QnJlYWtJdGVyYXRvciAqdGl0bGVJdGVyLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmxvY2FsZSwK KwkJCQkJCQkgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwl2b2lkCQkoKnNldEF0dHJpYnV0 ZSkgKFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkJIFVDb2xBdHRyaWJ1dGUgYXR0ciwKKwkJCQkJ CQkJIFVDb2xBdHRyaWJ1dGVWYWx1ZSB2YWx1ZSwKKwkJCQkJCQkJIFVFcnJvckNvZGUgKnN0YXR1 cyk7CisJVUNvbnZlcnRlciAqKCpvcGVuQ29udmVydGVyKSAoY29uc3QgY2hhciAqY29udmVydGVy TmFtZSwKKwkJCQkJCQkJICBVRXJyb3JDb2RlICogIAllcnIpOworCXZvaWQJCSgqY2xvc2VDb252 ZXJ0ZXIpIChVQ29udmVydGVyICpjb252ZXJ0ZXIpOworCWludDMyX3QJCSgqZnJvbVVDaGFycykg KFVDb252ZXJ0ZXIgKmNudiwKKwkJCQkJCQkgICBjaGFyICpkZXN0LAorCQkJCQkJCSAgIGludDMy X3QgZGVzdENhcGFjaXR5LAorCQkJCQkJCSAgIGNvbnN0IFVDaGFyICpzcmMsCisJCQkJCQkJICAg aW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisJ aW50MzJfdAkJKCp0b1VDaGFycykgKFVDb252ZXJ0ZXIgKmNudiwKKwkJCQkJCQkgVUNoYXIgKmRl c3QsCisJCQkJCQkJIGludDMyX3QgZGVzdENhcGFjaXR5LAorCQkJCQkJCSBjb25zdCBjaGFyICpz cmMsCisJCQkJCQkJIGludDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSBVRXJyb3JDb2RlICpwRXJy b3JDb2RlKTsKKwlpbnQzMl90CQkoKnRvTGFuZ3VhZ2VUYWcpIChjb25zdCBjaGFyICpsb2NhbGVJ RCwKKwkJCQkJCQkJICBjaGFyICpsYW5ndGFnLAorCQkJCQkJCQkgIGludDMyX3QgbGFuZ3RhZ0Nh cGFjaXR5LAorCQkJCQkJCQkgIFVCb29sIHN0cmljdCwKKwkJCQkJCQkJICBVRXJyb3JDb2RlICpl cnIpOworCWludDMyX3QJCSgqZ2V0RGlzcGxheU5hbWUpIChjb25zdCBjaGFyICpsb2NhbGVJRCwK KwkJCQkJCQkJICAgY29uc3QgY2hhciAqaW5Mb2NhbGVJRCwKKwkJCQkJCQkJICAgVUNoYXIgKnJl c3VsdCwKKwkJCQkJCQkJICAgaW50MzJfdCBtYXhSZXN1bHRTaXplLAorCQkJCQkJCQkgICBVRXJy b3JDb2RlICplcnIpOworCWludDMyX3QJCSgqY291bnRBdmFpbGFibGUpICh2b2lkKTsKKwljb25z dCBjaGFyICooKmdldEF2YWlsYWJsZSkgKGludDMyX3Qgbik7Cit9IHBnX2ljdV9saWJyYXJ5Owor CisjZGVmaW5lIFBHX0lDVV9MSUIoeCkgKCh4KS0+aW5mby5pY3UubGliKQorCisjZW5kaWYKKwog LyoKICAqIFdlIGRlZmluZSBvdXIgb3duIHdyYXBwZXIgYXJvdW5kIGxvY2FsZV90IHNvIHdlIGNh biBrZWVwIHRoZSBzYW1lCiAgKiBmdW5jdGlvbiBzaWduYXR1cmVzIGZvciBhbGwgYnVpbGRzLCB3 aGlsZSBub3QgaGF2aW5nIHRvIGNyZWF0ZSBhCkBAIC01Myw3ICsxNTUsOCBAQCBzdHJ1Y3QgcGdf bG9jYWxlX3N0cnVjdAogI2lmZGVmIFVTRV9JQ1UKIAkJc3RydWN0CiAJCXsKLQkJCVVDb2xsYXRv cgkqdWNvbDsKKwkJCVVDb2xsYXRvcgkJKnVjb2w7CisJCQlwZ19pY3VfbGlicmFyeQkqbGliOwog CQl9CQkJaWN1OwogI2VuZGlmCiAJCWludAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5l aXRoZXIgTE9DQUxFX1Qgbm9yIElDVSAqLwpAQCAtNjEsOCArMTY0LDE4IEBAIHN0cnVjdCBwZ19s b2NhbGVfc3RydWN0CiB9OwogCiAjaWZkZWYgVVNFX0lDVQotZXh0ZXJuIGludDMyX3QgaWN1X3Rv X3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRl cyk7Ci1leHRlcm4gaW50MzJfdCBpY3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBV Q2hhciAqYnVmZl91Y2hhciwgaW50MzJfdCBsZW5fdWNoYXIpOwotI2VuZGlmCisKK3R5cGVkZWYg cGdfaWN1X2xpYnJhcnkgKigqZ2V0X2ljdV9saWJyYXJ5X2hvb2tfdHlwZSkoCisJY29uc3QgY2hh ciAqbG9jYWxlLCBjb25zdCBjaGFyICp2ZXJzaW9uKTsKKworZXh0ZXJuIFBHRExMSU1QT1JUIGdl dF9pY3VfbGlicmFyeV9ob29rX3R5cGUgZ2V0X2ljdV9saWJyYXJ5X2hvb2s7CisKK2V4dGVybiBw Z19pY3VfbGlicmFyeSAqZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkodm9pZCk7CitleHRlcm4gaW50 MzJfdCBpY3VfdG9fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmxpYiwgVUNoYXIgKipidWZmX3VjaGFy LAorCQkJCQkJCWNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIGludDMy X3QgaWN1X2Zyb21fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmxpYiwgY2hhciAqKnJlc3VsdCwKKwkJ CQkJCQkgIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcik7CisKKyNl bmRpZgkJCQkJCQkvKiBVU0VfSUNVICovCiAKICNlbmRpZgkJCQkJCQkvKiBfUEdfTE9DQUxFX0lO VEVSTkFMXyAqLwotLSAKMi4zNC4xCgo= --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename="v5-0003-Refactor-pg_locale_t-routines.patch" Content-Type: text/x-patch; name="v5-0003-Refactor-pg_locale_t-routines.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4MzI0NmE3MzVhMWJlMDhhZjQxNzZmZGE5NGI0MGM3MmE1NWJiZjYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDUgRGVjIDIwMjIgMTA6NDM6NTIgLTA4MDAKU3ViamVjdDogW1BBVENIIHY1IDMvN10gUmVm YWN0b3IgcGdfbG9jYWxlX3Qgcm91dGluZXMuCgogICogYWRkIHBnX2xvY2FsZV9pbnRlcm5hbC5o IHRvIGhpZGUgcGdfbG9jYWxlX3N0cnVjdAogICogbW92ZSBpbmZvLmx0IGludG8gaW5mby5saWJj Lmx0IHRvIG1hdGNoIGljdQogICogaW50cm9kdWNlIGluaXRfZGVmYXVsdF9sb2NhbGUoKQogICog aW50cm9kdWNlIHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKCkgYWNjZXNzb3IKICAqIG1ha2UgZGVm YXVsdF9sb2NhbGUgYSBzdGF0aWMgZ2xvYmFsIGluIHBnX2xvY2FsZS5jCiAgKiByZWZhY3RvciBw Z19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oKQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hmdW5jLmMgICAgIHwgIDgyICsrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYyAg ICAgfCAgNDUgKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAg MjUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMgICAgICAgICAgIHwgICAzICstCiBz cmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMgICB8ICAgMyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgfCAzNDIgKysrKysrKysrKysrKysrLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYyAgICAgICAgfCAgNjIgKystLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAgICAgIHwgICA4ICstCiBzcmMvYmFj a2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgICAgICB8ICAyOSArKy0KIHNyYy9pbmNsdWRlL3V0 aWxzL3BnX2xvY2FsZS5oICAgICAgICAgIHwgIDU1ICstLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bn X2xvY2FsZV9pbnRlcm5hbC5oIHwgIDY4ICsrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA0MDAgaW5z ZXJ0aW9ucygrKSwgMzIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaGZ1bmMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5j LmMKaW5kZXggYjgxMzZlNDk2Zi4uNmQ5ZjAxNGM1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaGZ1bmMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo ZnVuYy5jCkBAIC0yODEsMzYgKzI4MSwyOCBAQCBoYXNodGV4dChQR19GVU5DVElPTl9BUkdTKQog CWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxl X2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15bG9jYWxlIHx8IG15bG9jYWxlLT5k ZXRlcm1pbmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJ ewogCQlyZXN1bHQgPSBoYXNoX2FueSgodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShrZXkp LAogCQkJCQkJICBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKIAl9CiAJZWxzZQogCXsKLSNpZmRl ZiBVU0VfSUNVCi0JCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK LQkJewotCQkJU2l6ZQkJYnNpemUsIHJzaXplOwotCQkJY2hhcgkgICAqYnVmOwotCQkJY29uc3Qg Y2hhciAqa2V5ZGF0YSA9IFZBUkRBVEFfQU5ZKGtleSk7Ci0JCQlzaXplX3QJCWtleWxlbiA9IFZB UlNJWkVfQU5ZX0VYSERSKGtleSk7Ci0KLQkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwg a2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCi0J CQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2Nh bGUpOwotCQkJaWYgKHJzaXplICE9IGJzaXplKQotCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZy bSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7Ci0KLQkJCXJlc3VsdCA9IGhhc2hfYW55 KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOwotCi0JCQlwZnJlZShidWYpOwotCQl9Ci0JCWVsc2UK LSNlbmRpZgotCQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBteWxvY2FsZS0+cHJvdmlkZXIpOworCQlTaXplCQli c2l6ZSwgcnNpemU7CisJCWNoYXIJICAgKmJ1ZjsKKwkJY29uc3QgY2hhciAqa2V5ZGF0YSA9IFZB UkRBVEFfQU5ZKGtleSk7CisJCXNpemVfdAkJa2V5bGVuID0gVkFSU0laRV9BTllfRVhIRFIoa2V5 KTsKKworCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXls b2NhbGUpOworCQlidWYgPSBwYWxsb2MoYnNpemUpOworCisJCXJzaXplID0gcGdfc3Rybnhmcm0o YnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCWlmIChyc2l6ZSAhPSBi c2l6ZSkKKwkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQg cmVzdWx0Iik7CisKKwkJcmVzdWx0ID0gaGFzaF9hbnkoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSk7 CisKKwkJcGZyZWUoYnVmKTsKIAl9CiAKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBmb3IgdG9h c3RlZCBpbnB1dHMgKi8KQEAgLTMzNiw3ICszMjgsNyBAQCBoYXNodGV4dGV4dGVuZGVkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkKIAkJbXlsb2NhbGUg PSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmICghbXlsb2NhbGUg fHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKHBnX2xvY2FsZV9kZXRlcm1pbmlzdGlj KG15bG9jYWxlKSkKIAl7CiAJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1bnNpZ25lZCBj aGFyICopIFZBUkRBVEFfQU5ZKGtleSksCiAJCQkJCQkJCSAgIFZBUlNJWkVfQU5ZX0VYSERSKGtl eSksCkBAIC0zNDQsMzAgKzMzNiwyMiBAQCBoYXNodGV4dGV4dGVuZGVkKFBHX0ZVTkNUSU9OX0FS R1MpCiAJfQogCWVsc2UKIAl7Ci0jaWZkZWYgVVNFX0lDVQotCQlpZiAobXlsb2NhbGUtPnByb3Zp ZGVyID09IENPTExQUk9WSURFUl9JQ1UpCi0JCXsKLQkJCVNpemUJCWJzaXplLCByc2l6ZTsKLQkJ CWNoYXIJICAgKmJ1ZjsKLQkJCWNvbnN0IGNoYXIgKmtleWRhdGEgPSBWQVJEQVRBX0FOWShrZXkp OwotCQkJc2l6ZV90CQlrZXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpOwotCi0JCQlic2l6 ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJ YnVmID0gcGFsbG9jKGJzaXplKTsKLQotCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXpl LCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKLQkJ CQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIp OwotCi0JCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodWludDhfdCAqKSBidWYsIGJzaXpl LAotCQkJCQkJCQkJICAgUEdfR0VUQVJHX0lOVDY0KDEpKTsKLQotCQkJcGZyZWUoYnVmKTsKLQkJ fQotCQllbHNlCi0jZW5kaWYKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgbXlsb2NhbGUtPnByb3ZpZGVyKTsK KwkJU2l6ZQkJYnNpemUsIHJzaXplOworCQljaGFyCSAgICpidWY7CisJCWNvbnN0IGNoYXIgKmtl eWRhdGEgPSBWQVJEQVRBX0FOWShrZXkpOworCQlzaXplX3QJCWtleWxlbiA9IFZBUlNJWkVfQU5Z X0VYSERSKGtleSk7CisKKwkJYnNpemUgPSBwZ19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBr ZXlsZW4sIG15bG9jYWxlKTsKKwkJYnVmID0gcGFsbG9jKGJzaXplKTsKKworCQlyc2l6ZSA9IHBn X3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOworCQlpZiAo cnNpemUgIT0gYnNpemUpCisJCQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1 bmV4cGVjdGVkIHJlc3VsdCIpOworCisJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1aW50 OF90ICopIGJ1ZiwgYnNpemUsCisJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CisKKwkJ cGZyZWUoYnVmKTsKIAl9CiAKIAlQR19GUkVFX0lGX0NPUFkoa2V5LCAwKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA4MWU1NGUwY2U2Li45ZTg0ZGE0ODkxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jIGIvc3JjL2Jh Y2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwppbmRleCAwMmQ0NjJhNjU5Li5hYzA1ZWZiNTU4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9jYWxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxl LmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmgiCiAKIC8qCiAgKiBUbyBw cm92aWRlIGFzIG11Y2ggZnVuY3Rpb25hbGl0eSBhcyBwb3NzaWJsZSBvbiBhIHZhcmlldHkgb2Yg cGxhdGZvcm1zLApAQCAtMzA2LDEzICszMDcsMTMgQEAgcGdfd2NfaXNkaWdpdChwZ193Y2hhciBj KQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAog CQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0J CQkJcmV0dXJuIGlzd2RpZ2l0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0 KTsKKwkJCQlyZXR1cm4gaXN3ZGlnaXRfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmlu Zm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JFR0VY X0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAoYyA8PSAo cGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2RpZ2l0X2woKHVuc2lnbmVkIGNoYXIpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc2RpZ2l0X2woKHVuc2lnbmVkIGNo YXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJCWJyZWFr OwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC0zNDIsMTMgKzM0MywxMyBAQCBwZ193 Y19pc2FscGhhKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVfTDoKICNp ZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAo cGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3YWxwaGFfbCgod2ludF90KSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dhbHBoYV9sKCh3aW50X3QpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFMTCBUSFJV ICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVf VAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzYWxwaGFf bCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJCQkJCWlz YWxwaGFfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQp KTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAgLTM3 OCwxMyArMzc5LDEzIEBAIHBnX3djX2lzYWxudW0ocGdfd2NoYXIgYykKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yod2No YXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dhbG51 bV9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIGlz d2FsbnVtX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vu ZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9N QVggJiYKLQkJCQkJaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubHQpKTsKKwkJCQkJaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfSUNVOgpAQCAtNDIzLDEzICs0MjQsMTMgQEAgcGdfd2NfaXN1cHBlcihwZ193Y2hh ciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVf VAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYp Ci0JCQkJcmV0dXJuIGlzd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv Lmx0KTsKKwkJCQlyZXR1cm4gaXN3dXBwZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JF R0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAoYyA8 PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3VwcGVyX2woKHVuc2lnbmVkIGNoYXIp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc3VwcGVyX2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJCWJy ZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC00NTksMTMgKzQ2MCwxMyBAQCBw Z193Y19pc2xvd2VyKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8 PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3bG93ZXJfbCgod2ludF90KSBjLCBw Z19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dsb3dlcl9sKCh3aW50X3Qp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFMTCBU SFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzbG93 ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJCQkJ CWlzbG93ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMu bHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAg LTQ5NSwxMyArNDk2LDEzIEBAIHBnX3djX2lzZ3JhcGgocGdfd2NoYXIgYykKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yo d2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dn cmFwaF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJu IGlzd2dyYXBoX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwog I2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hB Ul9NQVggJiYKLQkJCQkJaXNncmFwaF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubHQpKTsKKwkJCQkJaXNncmFwaF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdl eF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfSUNVOgpAQCAtNTMxLDEzICs1MzIsMTMgQEAgcGdfd2NfaXNwcmludChwZ193 Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZG RkYpCi0JCQkJcmV0dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5p bmZvLmx0KTsKKwkJCQlyZXR1cm4gaXN3cHJpbnRfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBH X1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAo YyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3ByaW50X2woKHVuc2lnbmVkIGNo YXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc3ByaW50X2woKHVuc2ln bmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJ CWJyZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC01NjcsMTMgKzU2OCwxMyBA QCBwZ193Y19pc3B1bmN0KHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwg YyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3cHVuY3RfbCgod2ludF90KSBj LCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dwdW5jdF9sKCh3aW50 X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFM TCBUSFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlz cHVuY3RfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJ CQkJCWlzcHVuY3RfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxp YmMubHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToK QEAgLTYwMywxMyArNjA0LDEzIEBAIHBnX3djX2lzc3BhY2UocGdfd2NoYXIgYykKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXpl b2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBp c3dzcGFjZV9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0 dXJuIGlzd3NwYWNlX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQp OwogI2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZ VEVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBV Q0hBUl9NQVggJiYKLQkJCQkJaXNzcGFjZV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubHQpKTsKKwkJCQkJaXNzcGFjZV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfSUNVOgpAQCAtNjQ3LDEzICs2NDgsMTMgQEAgcGdfd2NfdG91cHBlcihw Z193Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCQkJcmV0dXJuIHRvd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxl LT5pbmZvLmx0KTsKKwkJCQlyZXR1cm4gdG93dXBwZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNl IFBHX1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChj IDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQotCQkJCXJldHVybiB0b3VwcGVyX2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIHRvdXBwZXJf bCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vu ZGlmCiAJCQlyZXR1cm4gYzsKIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfSUNVOgpAQCAtNjkxLDEz ICs2OTIsMTMgQEAgcGdfd2NfdG9sb3dlcihwZ193Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xP Q0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90 KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJuIHRvd2xvd2VyX2wo KHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKKwkJCQlyZXR1cm4gdG93bG93 ZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYK IAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lm ZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQotCQkJ CXJldHVybiB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5m by5sdCk7CisJCQkJcmV0dXJuIHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhf bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2VuZGlmCiAJCQlyZXR1cm4gYzsKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfSUNVOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dHRpbmcuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKaW5kZXggNjU3NDZj NDhkMi4uMzA2NzQzMWNiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dHRpbmcuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCkBAIC04OCw2 ICs4OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9u dW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCisjaW5jbHVkZSAidXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgiCiAKIAogLyogLS0tLS0tLS0tLQpAQCAtMTU3Niw3ICsxNTc3 LDcgQEAgaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90 IG15bG9jYWxlLAogCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZm X2Rlc3QpKTsKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJbGVuX2Rlc3QgPSBmdW5jKCpidWZm X2Rlc3QsIGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJbXlsb2NhbGUt PmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJCQkJCW15bG9jYWxlLT5jdHlwZSwgJnN0YXR1 cyk7CiAJaWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKIAl7CiAJCS8qIHRy eSBhZ2FpbiB3aXRoIGFkanVzdGVkIGxlbmd0aCAqLwpAQCAtMTU4NCw3ICsxNTg1LDcgQEAgaWN1 X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxl LAogCQkqYnVmZl9kZXN0ID0gcGFsbG9jKGxlbl9kZXN0ICogc2l6ZW9mKCoqYnVmZl9kZXN0KSk7 CiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAkJbGVuX2Rlc3QgPSBmdW5jKCpidWZmX2Rlc3Qs IGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJCW15bG9jYWxlLT5pbmZv LmljdS5sb2NhbGUsICZzdGF0dXMpOworCQkJCQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsK IAl9CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTY5Nyw3 ICsxNjk4LDcgQEAgc3RyX3RvbG93ZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywg T2lkIGNvbGxpZCkKIAkJCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2Nh bGUpCi0JCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNlW2N1 cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJd ID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5s dCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3ds b3dlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CkBAIC0xNzMwLDcgKzE3MzEsNyBAQCBzdHJfdG9s b3dlcihjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCSpwID0gdG9s b3dlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOworCQkJCQkJKnAg PSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsK IAkJCQkJZWxzZQogI2VuZGlmCiAJCQkJCQkqcCA9IHBnX3RvbG93ZXIoKHVuc2lnbmVkIGNoYXIp ICpwKTsKQEAgLTE4MTksNyArMTgyMCw3IEBAIHN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYs IHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QK IAkJCQkJaWYgKG15bG9jYWxlKQotCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBl cl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQl3b3Jr c3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9j YWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQllbHNlCiAjZW5kaWYKIAkJCQkJCXdvcmtzcGFjZVtj dXJyX2NoYXJdID0gdG93dXBwZXIod29ya3NwYWNlW2N1cnJfY2hhcl0pOwpAQCAtMTg1Miw3ICsx ODUzLDcgQEAgc3RyX3RvdXBwZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lk IGNvbGxpZCkKIAkJCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2NhbGUp Ci0JCQkJCQkqcCA9IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZv Lmx0KTsKKwkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUt PmluZm8ubGliYy5sdCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJKnAgPSBwZ190b3VwcGVy KCh1bnNpZ25lZCBjaGFyKSAqcCk7CkBAIC0xOTQ0LDEwICsxOTQ1LDEwIEBAIHN0cl9pbml0Y2Fw KGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJCWlmICht eWxvY2FsZSkKIAkJCQkJewogCQkJCQkJaWYgKHdhc2FsbnVtKQotCQkJCQkJCXdvcmtzcGFjZVtj dXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmlu Zm8ubHQpOworCQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3Bh Y2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAJCQkJCQllbHNlCi0JCQkJ CQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJd LCBteWxvY2FsZS0+aW5mby5sdCk7Ci0JCQkJCQl3YXNhbG51bSA9IGlzd2FsbnVtX2wod29ya3Nw YWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKKwkJCQkJCQl3b3Jrc3BhY2VbY3Vy cl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZv LmxpYmMubHQpOworCQkJCQkJd2FzYWxudW0gPSBpc3dhbG51bV9sKHdvcmtzcGFjZVtjdXJyX2No YXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJfQogCQkJCQllbHNlCiAjZW5kaWYK QEAgLTE5ODksMTAgKzE5OTAsMTAgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6 ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJaWYgKG15bG9jYWxlKQogCQkJCQl7CiAJCQkJ CQlpZiAod2FzYWxudW0pCi0JCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpw LCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNo YXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJCWVsc2UKLQkJCQkJCQkqcCA9 IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmx0KTsKLQkJCQkJ CXdhc2FsbnVtID0gaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8u bHQpOworCQkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUt PmluZm8ubGliYy5sdCk7CisJCQkJCQl3YXNhbG51bSA9IGlzYWxudW1fbCgodW5zaWduZWQgY2hh cikgKnAsIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQl9CiAJCQkJCWVsc2UKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9saWtlLmMKaW5kZXggOGU2NzFiOWZhYi4uOTg3MTRhMDQ5MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbGlrZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNp bmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCIKIAogCiAjZGVmaW5lIExJS0VfVFJV RQkJCQkJCTEKQEAgLTk2LDcgKzk3LDcgQEAgU0JfbG93ZXJfY2hhcih1bnNpZ25lZCBjaGFyIGMs IHBnX2xvY2FsZV90IGxvY2FsZSwgYm9vbCBsb2NhbGVfaXNfYykKIAkJcmV0dXJuIHBnX2FzY2lp X3RvbG93ZXIoYyk7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCWVsc2UgaWYgKGxvY2FsZSkKLQkJ cmV0dXJuIHRvbG93ZXJfbChjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gdG9sb3dlcl9s KGMsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCWVsc2UKIAkJcmV0dXJuIHBnX3Rv bG93ZXIoYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKaW5kZXggMmQzYWFhYWY2 Yi4uMjhkMjNhYzNhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3Vw cG9ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwpAQCAtNTIs NiArNTIsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCisjaW5jbHVkZSAidXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKQEAgLTE1MTEsNyArMTUxMiw3IEBAIHBhdHRlcm5fY2hh cl9pc2FscGhhKGNoYXIgYywgYm9vbCBpc19tdWx0aWJ5dGUsCiAJCQkoYyA+PSAnQScgJiYgYyA8 PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAog CWVsc2UgaWYgKGxvY2FsZSAmJiBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJD KQotCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBsb2NhbGUtPmluZm8ubHQp OworCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBsb2NhbGUtPmluZm8ubGli Yy5sdCk7CiAjZW5kaWYKIAllbHNlCiAJCXJldHVybiBpc2FscGhhKCh1bnNpZ25lZCBjaGFyKSBj KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA2NjMyODYxNjNlLi5kOGRmMmEzODMy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJu YWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAjaWZkZWYgVVNFX0lDVQpAQCAt MTMxLDYgKzEzMiwxMSBAQCBzdGF0aWMgSFRBQiAqY29sbGF0aW9uX2NhY2hlID0gTlVMTDsKIHN0 YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1lKGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKIAorLyoKKyAq IERhdGFiYXNlIGRlZmF1bHQgbG9jYWxlLgorICovCitzdGF0aWMgcGdfbG9jYWxlX3QgZGVmYXVs dF9sb2NhbGUgPSBOVUxMOworCiAjaWZkZWYgVVNFX0lDVQogLyoKICAqIENvbnZlcnRlciBvYmpl Y3QgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBJQ1UncyBVQ2hhciBzdHJpbmdzIGFuZCBDIHN0cmlu Z3MKQEAgLTEzMzYsNyArMTM0Miw3IEBAIGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKQog CQlzdGF0aWMgaW50CXJlc3VsdCA9IC0xOwogCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKLQkJaWYg KGRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCWlmIChkZWZh dWx0X2xvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJCXJldHVybiBmYWxz ZTsKIAogCQlpZiAocmVzdWx0ID49IDApCkBAIC0xMzg5LDcgKzEzOTUsNyBAQCBsY19jdHlwZV9p c19jKE9pZCBjb2xsYXRpb24pCiAJCXN0YXRpYyBpbnQJcmVzdWx0ID0gLTE7CiAJCWNoYXIJICAg KmxvY2FsZXB0cjsKIAotCQlpZiAoZGVmYXVsdF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSkKKwkJaWYgKGRlZmF1bHRfbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCWlmIChyZXN1bHQgPj0gMCkKQEAgLTE0MjAsMzgg KzE0MjYsNiBAQCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRpb24pCiAJcmV0dXJuIChsb29rdXBf Y29sbGF0aW9uX2NhY2hlKGNvbGxhdGlvbiwgdHJ1ZSkpLT5jdHlwZV9pc19jOwogfQogCi1zdHJ1 Y3QgcGdfbG9jYWxlX3N0cnVjdCBkZWZhdWx0X2xvY2FsZTsKLQotdm9pZAotbWFrZV9pY3VfY29s bGF0b3IoY29uc3QgY2hhciAqaWN1bG9jc3RyLAotCQkJCSAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1 Y3QgKnJlc3VsdHApCi17Ci0jaWZkZWYgVVNFX0lDVQotCVVDb2xsYXRvciAgKmNvbGxhdG9yOwot CVVFcnJvckNvZGUJc3RhdHVzOwotCi0Jc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWNvbGxhdG9y ID0gdWNvbF9vcGVuKGljdWxvY3N0ciwgJnN0YXR1cyk7Ci0JaWYgKFVfRkFJTFVSRShzdGF0dXMp KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9y IGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQlpY3Vsb2NzdHIsIHVfZXJyb3JOYW1lKHN0 YXR1cykpKSk7Ci0KLQlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NCkKLQkJaWN1X3Nl dF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgaWN1bG9jc3RyKTsKLQotCS8qIFdlIHdp bGwgbGVhayB0aGlzIHN0cmluZyBpZiB0aGUgY2FsbGVyIGVycm9ycyBsYXRlciA6LSggKi8KLQly ZXN1bHRwLT5pbmZvLmljdS5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNv bnRleHQsIGljdWxvY3N0cik7Ci0JcmVzdWx0cC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9yOwot I2Vsc2UJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLQkvKiBjb3VsZCBnZXQgaGVyZSBpZiBhIGNv bGxhdGlvbiB3YXMgY3JlYXRlZCBieSBhIGJ1aWxkIHdpdGggSUNVICovCi0JZXJlcG9ydChFUlJP UiwKLQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCSBlcnJt c2coIklDVSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSkpOwotI2VuZGlmCQkJCQkJ CS8qIG5vdCBVU0VfSUNVICovCi19Ci0KLQogLyogc2ltcGxlIHN1YnJvdXRpbmUgZm9yIHJlcG9y dGluZyBlcnJvcnMgZnJvbSBuZXdsb2NhbGUoKSAqLwogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIHN0 YXRpYyB2b2lkCkBAIC0xNDg1LDYgKzE0NTksMTYzIEBAIHJlcG9ydF9uZXdsb2NhbGVfZmFpbHVy ZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQogI2VuZGlmCQkJCQkJCS8qIEhBVkVfTE9DQUxFX1Qg Ki8KIAogCisvKgorICogQ29uc3RydWN0IGEgbmV3IHBnX2xvY2FsZV90IG9iamVjdC4KKyAqCisg KiBQYXNzaW5nIE5VTEwgZm9yIHRoZSB2ZXJzaW9uIGlzIGFsbG93ZWQ7IGFuZCBldmVuIGlmIGl0 IGlzIHNwZWNpZmllZCwgdGhlCisgKiByZXN1bHQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBleGFj dGx5IG1hdGNoaW5nIHZlcnNpb24uIE90aGVyIHBhcmFtZXRlcnMKKyAqIGFyZSByZXF1aXJlZC4K KyAqCisgKiBPcmRpbmFyaWx5LCBjb2xsYXRlIGFuZCBjdHlwZSBzaG91bGQgYmUgdGhlIHNhbWUu IElmIHRoZSBwcm92aWRlciBpcyBJQ1UsCisgKiB0aGlzIGlzIGEgcmVxdWlyZW1lbnQsIGFuZCB0 aGUgJ2NvbGxhdGUnIGFuZCAnY3R5cGUnIGFyZ3VtZW50cyBzaG91bGQgYm90aAorICogY29tZSBm cm9tIGNvbGxpY3Vsb2NhbGUgKG9yIGRhdGljdWxvY2FsZSkuIElmIHRoZSBwcm92aWRlciBpcyBs aWJjLCB0aGUKKyAqIGFyZ3VtZW50cyBzaG91bGQgY29tZSBmcm9tIGNvbGxjb2xsYXRlIGFuZCBj b2xsY3R5cGUgKG9yIGRhdGNvbGxhdGUgYW5kCisgKiBkYXRjdHlwZSksIHJlc3BlY3RpdmVseS4K KyAqCisgKiBTdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5k IHRoZSBsaWJjIGxvY2FsZV90IG9yCisgKiBVQ29sbGF0b3IgaXMgbm90IGFsbG9jYXRlZCBpbiBh bnkgbWVtb3J5IGNvbnRleHQsIHNvIHRoZSByZXN1bHQgaXMKKyAqIGVmZmVjdGl2ZWx5IHBlcm1h bmVudC4KKyAqLworc3RhdGljIHBnX2xvY2FsZV90CitwZ19uZXdsb2NhbGUoY2hhciBwcm92aWRl ciwgYm9vbCBkZXRlcm1pbmlzdGljLCBjb25zdCBjaGFyICpjb2xsYXRlLAorCQkJIGNvbnN0IGNo YXIgKmN0eXBlLCBjb25zdCBjaGFyICp2ZXJzaW9uKQoreworCXBnX2xvY2FsZV90IHJlc3VsdCA9 IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQlzaXplb2Yo c3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKKworCS8qCisJICogSWYgQ09MTFBST1ZJREVSX0RF RkFVTFQsIGNhbGxlciBzaG91bGQgdXNlIGRlZmF1bHRfbG9jYWxlIG9yIE5VTEwKKwkgKiBpbnN0 ZWFkLgorCSAqLworCUFzc2VydChwcm92aWRlciAhPSBDT0xMUFJPVklERVJfREVGQVVMVCk7CisK KwlyZXN1bHQtPnByb3ZpZGVyID0gcHJvdmlkZXI7CisJcmVzdWx0LT5kZXRlcm1pbmlzdGljID0g ZGV0ZXJtaW5pc3RpYzsKKwlyZXN1bHQtPmNvbGxhdGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRv cE1lbW9yeUNvbnRleHQsIGNvbGxhdGUpOworCXJlc3VsdC0+Y3R5cGUgPSBNZW1vcnlDb250ZXh0 U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQsIGN0eXBlKTsKKworCWlmIChwcm92aWRlciA9PSBDT0xM UFJPVklERVJfTElCQykKKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlsb2NhbGVfdCAgICAg ICAgbG9jOworCisJCS8qIG5ld2xvY2FsZSdzIHJlc3VsdCBtYXkgYmUgbGVha2VkIGlmIHdlIGVu Y291bnRlciBhbiBlcnJvciAqLworCisJCWlmIChzdHJjbXAoY29sbGF0ZSwgY3R5cGUpID09IDAp CisJCXsKKwkJCS8qIE5vcm1hbCBjYXNlIHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgKi8KKwkJCWVy cm5vID0gMDsKKyNpZm5kZWYgV0lOMzIKKwkJCWxvYyA9IG5ld2xvY2FsZShMQ19DT0xMQVRFX01B U0sgfCBMQ19DVFlQRV9NQVNLLCBjb2xsYXRlLAorCQkJCQkJCU5VTEwpOworI2Vsc2UKKwkJCWxv YyA9IF9jcmVhdGVfbG9jYWxlKExDX0FMTCwgY29sbGF0ZSk7CisjZW5kaWYKKwkJCWlmICghbG9j KQorCQkJCXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKKwkJfQorCQllbHNlCisJ CXsKKyNpZm5kZWYgV0lOMzIKKwkJCS8qIFdlIG5lZWQgdHdvIG5ld2xvY2FsZSgpIHN0ZXBzICov CisJCQlsb2NhbGVfdAlsb2MxOworCisJCQllcnJubyA9IDA7CisJCQlsb2MxID0gbmV3bG9jYWxl KExDX0NPTExBVEVfTUFTSywgY29sbGF0ZSwgTlVMTCk7CisJCQlpZiAoIWxvYzEpCisJCQkJcmVw b3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbGxhdGUpOworCQkJZXJybm8gPSAwOworCQkJbG9jID0g bmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIGN0eXBlLCBsb2MxKTsKKwkJCWlmICghbG9jKQorCQkJ CXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjdHlwZSk7CisjZWxzZQorCisJCQkvKgorCQkJICog WFhYIFRoZSBfY3JlYXRlX2xvY2FsZSgpIEFQSSBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0CisJ CQkgKiB0aGlzLiBDb3VsZCBwZXJoYXBzIGJlIHdvcmtlZCBhcm91bmQgYnkgY2hhbmdpbmcKKwkJ CSAqIHBnX2xvY2FsZV90IHRvIGNvbnRhaW4gdHdvIHNlcGFyYXRlIGZpZWxkcy4KKwkJCSAqLwor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCQkgZXJybXNnKCJjb2xsYXRpb25zIHdpdGggZGlmZmVyZW50IGNvbGxhdGUg YW5kIGN0eXBlIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikpKTsK KyNlbmRpZgorCQl9CisKKwkJcmVzdWx0LT5pbmZvLmxpYmMubHQgPSBsb2M7CisjZWxzZQkJCQkJ CQkvKiBub3QgSEFWRV9MT0NBTEVfVCAqLworCQkvKiBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3Vw cG9ydCBsb2NhbGVfdCAqLworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjb2xsYXRpb24gcHJvdmlkZXIg TElCQyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKSkpOworI2VuZGlmCQkJCQkJ CS8qIG5vdCBIQVZFX0xPQ0FMRV9UICovCisJfQorI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChw cm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKwkJVUNvbGxhdG9yICAqY29sbGF0b3I7 CisJCVVFcnJvckNvZGUJc3RhdHVzOworCisJCS8qIGNvbGxhdG9yIG1heSBiZSBsZWFrZWQgaWYg d2UgZW5jb3VudGVyIGFuIGVycm9yICovCisKKwkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCQlj b2xsYXRvciA9IHVjb2xfb3Blbihjb2xsYXRlLCAmc3RhdHVzKTsKKwkJaWYgKFVfRkFJTFVSRShz dGF0dXMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4g Y29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKKwkJCQkJCQljb2xsYXRlLCB1X2Vycm9y TmFtZShzdGF0dXMpKSkpOworCisJCWlmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDU0KQor CQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgY29sbGF0ZSk7CisKKwkJ cmVzdWx0LT5pbmZvLmljdS51Y29sID0gY29sbGF0b3I7CisJfQorI2VuZGlmCisJZWxzZQorCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJv dmlkZXI6ICVjIiwgcHJvdmlkZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEFj Y2Vzc29yIHNvIHRoYXQgY2FsbGVycyBkb24ndCBuZWVkIHRvIGluY2x1ZGUgcGdfbG9jYWxlX2lu dGVybmFsLmguCisgKi8KK2Jvb2wKK3BnX2xvY2FsZV9kZXRlcm1pbmlzdGljKHBnX2xvY2FsZV90 IGxvY2FsZSkKK3sKKwlpZiAobG9jYWxlID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCWVsc2UK KwkJcmV0dXJuIGxvY2FsZS0+ZGV0ZXJtaW5pc3RpYzsKK30KKworLyoKKyAqIEluaXRpYWxpemUg ZGVmYXVsdCBkYXRhYmFzZSBsb2NhbGUuCisgKi8KK3ZvaWQKK2luaXRfZGVmYXVsdF9sb2NhbGUo Y2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5cGUsCisJ CQkJCWNvbnN0IGNoYXIgKmljdWxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbikKK3sKKwkvKgor CSAqIEZvciB0aGUgcHVycG9zZXMgb2YgcGdfbG9jYWxlX3QsIGlmIHRoZSBwcm92aWRlciBpcyBJ Q1UsIHdlIHVzZQorCSAqIGljdWxvY2FsZSBmb3IgYm90aCBjb2xsYXRlIGFuZCBjdHlwZS4KKwkg Ki8KKwlpZiAocHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCWNvbGxhdGUgPSBp Y3Vsb2NhbGU7CisJCWN0eXBlID0gaWN1bG9jYWxlOworCX0KKwllbHNlCisJCUFzc2VydChpY3Vs b2NhbGUgPT0gTlVMTCk7CisKKwkvKgorCSAqIERlZmF1bHQgbG9jYWxlIGlzIGN1cnJlbnRseSBh bHdheXMgZGV0ZXJtaW5pc3RpYy4gIE5vbmRldGVybWluaXN0aWMKKwkgKiBsb2NhbGVzIGN1cnJl bnRseSBkb24ndCBzdXBwb3J0IHBhdHRlcm4gbWF0Y2hpbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGEK KwkgKiBsb3Qgb2YgdGhpbmdzIGlmIGFwcGxpZWQgZ2xvYmFsbHkuCisJICovCisJZGVmYXVsdF9s b2NhbGUgPSBwZ19uZXdsb2NhbGUocHJvdmlkZXIsIHRydWUsIGNvbGxhdGUsIGN0eXBlLCB2ZXJz aW9uKTsKK30KKwogLyoKICAqIENyZWF0ZSBhIGxvY2FsZV90IGZyb20gYSBjb2xsYXRpb24gT0lE LiAgUmVzdWx0cyBhcmUgY2FjaGVkIGZvciB0aGUKICAqIGxpZmV0aW1lIG9mIHRoZSBiYWNrZW5k LiAgVGh1cywgZG8gbm90IGZyZWUgdGhlIHJlc3VsdCB3aXRoIGZyZWVsb2NhbGUoKS4KQEAgLTE1 MDksOCArMTY0MCw4IEBAIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKQog CiAJaWYgKGNvbGxpZCA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQpCiAJewotCQlpZiAoZGVmYXVs dF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQkJCXJldHVybiAmZGVmYXVs dF9sb2NhbGU7CisJCWlmIChkZWZhdWx0X2xvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0lDVSkKKwkJCXJldHVybiBkZWZhdWx0X2xvY2FsZTsKIAkJZWxzZQogCQkJcmV0dXJuIChwZ19s b2NhbGVfdCkgMDsKIAl9CkBAIC0xNTIyLDEwNyArMTY1Myw2NCBAQCBwZ19uZXdsb2NhbGVfZnJv bV9jb2xsYXRpb24oT2lkIGNvbGxpZCkKIAkJLyogV2UgaGF2ZW4ndCBjb21wdXRlZCB0aGlzIHll dCBpbiB0aGlzIHNlc3Npb24sIHNvIGRvIGl0ICovCiAJCUhlYXBUdXBsZQl0cDsKIAkJRm9ybV9w Z19jb2xsYXRpb24gY29sbGZvcm07Ci0JCXN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IHJlc3VsdDsK LQkJcGdfbG9jYWxlX3QgcmVzdWx0cDsKKwkJcGdfbG9jYWxlX3QgbG9jYWxlOwogCQlEYXR1bQkJ ZGF0dW07CiAJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqY29sbGF0ZTsKKwkJY2hhcgkgICAq Y3R5cGU7CisJCWNoYXIJICAgKmNvbGx2ZXJzaW9uc3RyOwogCiAJCXRwID0gU2VhcmNoU3lzQ2Fj aGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CiAJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKIAkJY29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdF VFNUUlVDVCh0cCk7CiAKLQkJLyogV2UnbGwgZmlsbCBpbiB0aGUgcmVzdWx0IHN0cnVjdCBsb2Nh bGx5IGJlZm9yZSBhbGxvY2F0aW5nIG1lbW9yeSAqLwotCQltZW1zZXQoJnJlc3VsdCwgMCwgc2l6 ZW9mKHJlc3VsdCkpOwotCQlyZXN1bHQucHJvdmlkZXIgPSBjb2xsZm9ybS0+Y29sbHByb3ZpZGVy OwotCQlyZXN1bHQuZGV0ZXJtaW5pc3RpYyA9IGNvbGxmb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGlj OworCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRp b25fY29sbHZlcnNpb24sCisJCQkJCQkJCSZpc251bGwpOworCQlpZiAoIWlzbnVsbCkKKwkJCWNv bGx2ZXJzaW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWVsc2UKKwkJCWNv bGx2ZXJzaW9uc3RyID0gTlVMTDsKIAogCQlpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9PSBD T0xMUFJPVklERVJfTElCQykKIAkJewotI2lmZGVmIEhBVkVfTE9DQUxFX1QKLQkJCWNvbnN0IGNo YXIgKmNvbGxjb2xsYXRlOwotCQkJY29uc3QgY2hhciAqY29sbGN0eXBlIHBnX2F0dHJpYnV0ZV91 bnVzZWQoKTsKLQkJCWxvY2FsZV90CWxvYzsKLQotCQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo Q09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwkJ CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9j b2xsY29sbGF0ZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwotCQkJ Y29sbGNvbGxhdGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZp c251bGwpOworCQkJY29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQkJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxj dHlwZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwotCQkJY29sbGN0 eXBlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7Ci0KLQkJCWlmIChzdHJjbXAoY29sbGNv bGxhdGUsIGNvbGxjdHlwZSkgPT0gMCkKLQkJCXsKLQkJCQkvKiBOb3JtYWwgY2FzZSB3aGVyZSB0 aGV5J3JlIHRoZSBzYW1lICovCi0JCQkJZXJybm8gPSAwOwotI2lmbmRlZiBXSU4zMgotCQkJCWxv YyA9IG5ld2xvY2FsZShMQ19DT0xMQVRFX01BU0sgfCBMQ19DVFlQRV9NQVNLLCBjb2xsY29sbGF0 ZSwKLQkJCQkJCQkJTlVMTCk7Ci0jZWxzZQotCQkJCWxvYyA9IF9jcmVhdGVfbG9jYWxlKExDX0FM TCwgY29sbGNvbGxhdGUpOwotI2VuZGlmCi0JCQkJaWYgKCFsb2MpCi0JCQkJCXJlcG9ydF9uZXds b2NhbGVfZmFpbHVyZShjb2xsY29sbGF0ZSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0jaWZuZGVm IFdJTjMyCi0JCQkJLyogV2UgbmVlZCB0d28gbmV3bG9jYWxlKCkgc3RlcHMgKi8KLQkJCQlsb2Nh bGVfdAlsb2MxOwotCi0JCQkJZXJybm8gPSAwOwotCQkJCWxvYzEgPSBuZXdsb2NhbGUoTENfQ09M TEFURV9NQVNLLCBjb2xsY29sbGF0ZSwgTlVMTCk7Ci0JCQkJaWYgKCFsb2MxKQotCQkJCQlyZXBv cnRfbmV3bG9jYWxlX2ZhaWx1cmUoY29sbGNvbGxhdGUpOwotCQkJCWVycm5vID0gMDsKLQkJCQls b2MgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgY29sbGN0eXBlLCBsb2MxKTsKLQkJCQlpZiAo IWxvYykKLQkJCQkJcmVwb3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbGxjdHlwZSk7Ci0jZWxzZQot Ci0JCQkJLyoKLQkJCQkgKiBYWFggVGhlIF9jcmVhdGVfbG9jYWxlKCkgQVBJIGRvZXNuJ3QgYXBw ZWFyIHRvIHN1cHBvcnQKLQkJCQkgKiB0aGlzLiBDb3VsZCBwZXJoYXBzIGJlIHdvcmtlZCBhcm91 bmQgYnkgY2hhbmdpbmcKLQkJCQkgKiBwZ19sb2NhbGVfdCB0byBjb250YWluIHR3byBzZXBhcmF0 ZSBmaWVsZHMuCi0JCQkJICovCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJCSBlcnJtc2coImNvbGxhdGlvbnMg d2l0aCBkaWZmZXJlbnQgY29sbGF0ZSBhbmQgY3R5cGUgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVk IG9uIHRoaXMgcGxhdGZvcm0iKSkpOwotI2VuZGlmCi0JCQl9Ci0KLQkJCXJlc3VsdC5pbmZvLmx0 ID0gbG9jOwotI2Vsc2UJCQkJCQkJLyogbm90IEhBVkVfTE9DQUxFX1QgKi8KLQkJCS8qIHBsYXRm b3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGxvY2FsZV90ICovCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJt c2coImNvbGxhdGlvbiBwcm92aWRlciBMSUJDIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0 Zm9ybSIpKSk7Ci0jZW5kaWYJCQkJCQkJLyogbm90IEhBVkVfTE9DQUxFX1QgKi8KKwkJCWN0eXBl ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CiAJCX0KKyNpZmRlZiBVU0VfSUNVCiAJCWVs c2UgaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJewot CQkJY29uc3QgY2hhciAqaWN1bG9jc3RyOwotCi0JCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihD T0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJ CQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25f Y29sbGljdWxvY2FsZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwot CQkJaWN1bG9jc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7Ci0JCQltYWtlX2ljdV9j b2xsYXRvcihpY3Vsb2NzdHIsICZyZXN1bHQpOworCQkJY29sbGF0ZSA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOworCisJCQkvKiBmb3IgSUNVLCBjb2xsYXRlIGFuZCBjdHlwZSBhcmUgYm90 aCBzZXQgZnJvbSBpY3Vsb2NhbGUgKi8KKwkJCWN0eXBlID0gY29sbGF0ZTsKIAkJfQorI2VuZGlm CisJCWVsc2UKKwkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCWVsb2coRVJST1IsICJ1bnN1 cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgY29sbGZvcm0tPmNvbGxwcm92aWRlcik7CiAKLQkJ ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2Nv bGx2ZXJzaW9uLAotCQkJCQkJCQkmaXNudWxsKTsKLQkJaWYgKCFpc251bGwpCisJCWxvY2FsZSA9 IHBnX25ld2xvY2FsZShjb2xsZm9ybS0+Y29sbHByb3ZpZGVyLAorCQkJCQkJCSAgY29sbGZvcm0t PmNvbGxpc2RldGVybWluaXN0aWMsCisJCQkJCQkJICBjb2xsYXRlLCBjdHlwZSwgY29sbHZlcnNp b25zdHIpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwkJaWYgKGNvbGx2ZXJzaW9uc3Ry ICE9IE5VTEwpCiAJCXsKIAkJCWNoYXIJICAgKmFjdHVhbF92ZXJzaW9uc3RyOwotCQkJY2hhcgkg ICAqY29sbHZlcnNpb25zdHI7CiAKLQkJCWNvbGx2ZXJzaW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSk7Ci0KLQkJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBj b2xsZm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBBbnVtX3BnX2NvbGxh dGlvbl9jb2xsaWN1bG9jYWxlIDogQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251 bGwpOwotCQkJQXNzZXJ0KCFpc251bGwpOworCQkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29s bGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIsIGNvbGxhdGUpOwog Ci0JCQlhY3R1YWxfdmVyc2lvbnN0ciA9IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY29s bGZvcm0tPmNvbGxwcm92aWRlciwKLQkJCQkJCQkJCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKSk7CiAJCQlpZiAoIWFjdHVhbF92ZXJzaW9uc3RyKQogCQkJewogCQkJCS8qCkBAIC0x NjQ5LDEzICsxNzM3LDcgQEAgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQp CiAJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKGNvbGxmb3JtLT5jb2xsbmFtZSkpKSkpOwogCQl9CiAK LQkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKLQotCQkvKiBXZSdsbCBrZWVwIHRoZSBwZ19sb2NhbGVf dCBzdHJ1Y3R1cmVzIGluIFRvcE1lbW9yeUNvbnRleHQgKi8KLQkJcmVzdWx0cCA9IE1lbW9yeUNv bnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoKnJlc3VsdHApKTsKLQkJKnJlc3Vs dHAgPSByZXN1bHQ7Ci0KLQkJY2FjaGVfZW50cnktPmxvY2FsZSA9IHJlc3VsdHA7CisJCWNhY2hl X2VudHJ5LT5sb2NhbGUgPSBsb2NhbGU7CiAJfQogCiAJcmV0dXJuIGNhY2hlX2VudHJ5LT5sb2Nh bGU7CkBAIC0xODE1LDcgKzE4OTcsNyBAQCBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoY29u c3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsCiAJZXJybm8gPSAw OwogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAlpZiAobG9jYWxlKQotCQlyZXN1bHQgPSB3Y3Njb2xs X2woKExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnAsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJlc3Vs dCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbG9jYWxlLT5pbmZvLmxp YmMubHQpOwogCWVsc2UKICNlbmRpZgogCQlyZXN1bHQgPSB3Y3Njb2xsKChMUFdTVFIpIGExcCwg KExQV1NUUikgYTJwKTsKQEAgLTE4NTgsNyArMTk0MCw3IEBAIHBnX3N0cmNvbGxfbGliYyhjb25z dCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAJaWYg KGxvY2FsZSkKIAl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAotCQlyZXN1bHQgPSBzdHJjb2xsX2wo YXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmx0KTsKKwkJcmVzdWx0ID0gc3RyY29sbF9sKGFyZzEs IGFyZzIsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbHNlCiAJCS8qIHNob3VsZG4ndCBoYXBw ZW4gKi8KIAkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2Nh bGUtPnByb3ZpZGVyKTsKQEAgLTIxMTEsNyArMjE5Myw3IEBAIHBnX3N0cnhmcm1fbGliYyhjaGFy ICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKICNpZmRlZiBUUlVTVF9T VFhGUk0KICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJaWYgKGxvY2FsZSkKLQkJcmV0dXJuIHN0cnhm cm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gc3Ry eGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAllbHNl CiAjZW5kaWYKIAkJcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3JjLCBkZXN0c2l6ZSk7CkBAIC0yNzE3 LDggKzI3OTksOCBAQCB2b2lkCiBjaGVja19pY3VfbG9jYWxlKGNvbnN0IGNoYXIgKmljdV9sb2Nh bGUpCiB7CiAjaWZkZWYgVVNFX0lDVQotCVVDb2xsYXRvciAgKmNvbGxhdG9yOwotCVVFcnJvckNv ZGUJc3RhdHVzOworCVVDb2xsYXRvcgkqY29sbGF0b3I7CisJVUVycm9yQ29kZSAgIHN0YXR1czsK IAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAljb2xsYXRvciA9IHVjb2xfb3BlbihpY3VfbG9j YWxlLCAmc3RhdHVzKTsKQEAgLTI3OTIsMTAgKzI4NzQsMTAgQEAgd2NoYXIyY2hhcihjaGFyICp0 bywgY29uc3Qgd2NoYXJfdCAqZnJvbSwgc2l6ZV90IHRvbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUp CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogI2lmZGVmIEhBVkVfV0NTVE9NQlNfTAogCQkvKiBVc2Ug d2NzdG9tYnNfbCBmb3Igbm9uZGVmYXVsdCBsb2NhbGVzICovCi0JCXJlc3VsdCA9IHdjc3RvbWJz X2wodG8sIGZyb20sIHRvbGVuLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXN1bHQgPSB3Y3N0b21i c19sKHRvLCBmcm9tLCB0b2xlbiwgbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vsc2UJCQkJCQkJ LyogIUhBVkVfV0NTVE9NQlNfTCAqLwogCQkvKiBXZSBoYXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0 aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAqLwotCQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9 IHVzZWxvY2FsZShsb2NhbGUtPmluZm8ubHQpOworCQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9IHVz ZWxvY2FsZShsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAKIAkJcmVzdWx0ID0gd2NzdG9tYnModG8s IGZyb20sIHRvbGVuKTsKIApAQCAtMjg2OSwxMCArMjk1MSwxMCBAQCBjaGFyMndjaGFyKHdjaGFy X3QgKnRvLCBzaXplX3QgdG9sZW4sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBmcm9tbGVuLAog I2lmZGVmIEhBVkVfTE9DQUxFX1QKICNpZmRlZiBIQVZFX01CU1RPV0NTX0wKIAkJCS8qIFVzZSBt YnN0b3djc19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJCXJlc3VsdCA9IG1ic3Rvd2Nz X2wodG8sIHN0ciwgdG9sZW4sIGxvY2FsZS0+aW5mby5sdCk7CisJCQlyZXN1bHQgPSBtYnN0b3dj c19sKHRvLCBzdHIsIHRvbGVuLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZWxzZQkJCQkJCQkv KiAhSEFWRV9NQlNUT1dDU19MICovCiAJCQkvKiBXZSBoYXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0 aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAqLwotCQkJbG9jYWxlX3QJc2F2ZV9sb2NhbGUg PSB1c2Vsb2NhbGUobG9jYWxlLT5pbmZvLmx0KTsKKwkJCWxvY2FsZV90CXNhdmVfbG9jYWxlID0g dXNlbG9jYWxlKGxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAogCQkJcmVzdWx0ID0gbWJzdG93Y3Mo dG8sIHN0ciwgdG9sZW4pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFy Y2hhci5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwppbmRleCAxOTYzZDRkYzRl Li45NzgyZDAyMTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMKQEAgLTc2Miw3ICs3NjIsNyBA QCBicGNoYXJlcShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAkJbXlsb2NhbGUgPSBwZ19uZXds b2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmIChsb2NhbGVfaXNfYyB8fCAhbXls b2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKGxvY2FsZV9pc19jIHx8IHBn X2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7CiAJCS8qCiAJCSAqIFNpbmNlIHdl IG9ubHkgY2FyZSBhYm91dCBlcXVhbGl0eSBvciBub3QtZXF1YWxpdHksIHdlIGNhbiBhdm9pZCBh bGwKQEAgLTgwNyw3ICs4MDcsNyBAQCBicGNoYXJuZShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UK IAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlm IChsb2NhbGVfaXNfYyB8fCAhbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJ aWYgKGxvY2FsZV9pc19jIHx8IHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7 CiAJCS8qCiAJCSAqIFNpbmNlIHdlIG9ubHkgY2FyZSBhYm91dCBlcXVhbGl0eSBvciBub3QtZXF1 YWxpdHksIHdlIGNhbiBhdm9pZCBhbGwKQEAgLTEwMTUsMzMgKzEwMTUsMjUgQEAgaGFzaGJwY2hh cihQR19GVU5DVElPTl9BUkdTKQogCWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15 bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15 bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJt aW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQlyZXN1bHQgPSBoYXNoX2FueSgodW5zaWduZWQgY2hh ciAqKSBrZXlkYXRhLCBrZXlsZW4pOwogCX0KIAllbHNlCiAJewotI2lmZGVmIFVTRV9JQ1UKLQkJ aWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQl7Ci0JCQlTaXpl CQlic2l6ZSwgcnNpemU7Ci0JCQljaGFyCSAgICpidWY7CisJCVNpemUJCWJzaXplLCByc2l6ZTsK KwkJY2hhcgkgICAqYnVmOwogCi0JCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRh dGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJYnVmID0gcGFsbG9jKGJzaXplKTsKKwkJYnNpemUg PSBwZ19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKKwkJYnVm ID0gcGFsbG9jKGJzaXplKTsKIAotCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXplLCBr ZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKLQkJCQll bG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOwor CQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2Nh bGUpOworCQlpZiAocnNpemUgIT0gYnNpemUpCisJCQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0o KSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOwogCi0JCQlyZXN1bHQgPSBoYXNoX2FueSgo dWludDhfdCAqKSBidWYsIGJzaXplKTsKKwkJcmVzdWx0ID0gaGFzaF9hbnkoKHVpbnQ4X3QgKikg YnVmLCBic2l6ZSk7CiAKLQkJCXBmcmVlKGJ1Zik7Ci0JCX0KLQkJZWxzZQotI2VuZGlmCi0JCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHBy b3ZpZGVyOiAlYyIsIG15bG9jYWxlLT5wcm92aWRlcik7CisJCXBmcmVlKGJ1Zik7CiAJfQogCiAJ LyogQXZvaWQgbGVha2luZyBtZW1vcnkgZm9yIHRvYXN0ZWQgaW5wdXRzICovCkBAIC0xMDcyLDM1 ICsxMDY0LDI3IEBAIGhhc2hicGNoYXJleHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogCWlmICgh bGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21f Y29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1p bmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQly ZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodW5zaWduZWQgY2hhciAqKSBrZXlkYXRhLCBrZXls ZW4sCiAJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAJfQogCWVsc2UKIAl7Ci0jaWZk ZWYgVVNFX0lDVQotCQlpZiAobXlsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1Up Ci0JCXsKLQkJCVNpemUJCWJzaXplLCByc2l6ZTsKLQkJCWNoYXIJICAgKmJ1ZjsKKwkJU2l6ZQkJ YnNpemUsIHJzaXplOworCQljaGFyCSAgICpidWY7CiAKLQkJCWJzaXplID0gcGdfc3Rybnhmcm0o TlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlidWYgPSBwYWxsb2MoYnNp emUpOworCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXls b2NhbGUpOworCQlidWYgPSBwYWxsb2MoYnNpemUpOwogCi0JCQlyc2l6ZSA9IHBnX3N0cm54ZnJt KGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJaWYgKHJzaXplICE9 IGJzaXplKQotCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0 ZWQgcmVzdWx0Iik7CisJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwg a2V5bGVuLCBteWxvY2FsZSk7CisJCWlmIChyc2l6ZSAhPSBic2l6ZSkKKwkJCWVsb2coRVJST1Is ICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CiAKLQkJCXJlc3Vs dCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1aW50OF90ICopIGJ1ZiwgYnNpemUsCi0JCQkJCQkJCQkg ICBQR19HRVRBUkdfSU5UNjQoMSkpOworCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodWlu dDhfdCAqKSBidWYsIGJzaXplLAorCQkJCQkJCQkgICBQR19HRVRBUkdfSU5UNjQoMSkpOwogCi0J CQlwZnJlZShidWYpOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQkJLyogc2hvdWxkbid0IGhhcHBl biAqLwotCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBteWxv Y2FsZS0+cHJvdmlkZXIpOworCQlwZnJlZShidWYpOwogCX0KIAogCVBHX0ZSRUVfSUZfQ09QWShr ZXksIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5kZXggOGRhNTQ1ODQxZi4uMDQwODk5NTc5 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB0ZXh0X3Bv c2l0aW9uX3NldHVwKHRleHQgKnQxLCB0ZXh0ICp0MiwgT2lkIGNvbGxpZCwgVGV4dFBvc2l0aW9u U3RhdGUgKnN0YXRlKQogCWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxl ID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAobXlsb2NhbGUg JiYgIW15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmICghcGdfbG9jYWxlX2RldGVybWluaXN0 aWMobXlsb2NhbGUpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJub25kZXRlcm1pbmlzdGljIGNvbGxh dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHN1YnN0cmluZyBzZWFyY2hlcyIpKSk7CkBAIC0x NjAzLDcgKzE2MDMsNyBAQCB0ZXh0ZXEoUEdfRlVOQ1RJT05fQVJHUykKIAllbHNlCiAJCW15bG9j YWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAobG9jYWxl X2lzX2MgfHwgIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmIChsb2Nh bGVfaXNfYyB8fCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQlEYXR1 bQkJYXJnMSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAkJRGF0dW0JCWFyZzIgPSBQR19HRVRBUkdf REFUVU0oMSk7CkBAIC0xNjYyLDcgKzE2NjIsNyBAQCB0ZXh0bmUoUEdfRlVOQ1RJT05fQVJHUykK IAllbHNlCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7 CiAKLQlpZiAobG9jYWxlX2lzX2MgfHwgIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlz dGljKQorCWlmIChsb2NhbGVfaXNfYyB8fCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2Fs ZSkpCiAJewogCQlEYXR1bQkJYXJnMSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAkJRGF0dW0JCWFy ZzIgPSBQR19HRVRBUkdfREFUVU0oMSk7CkBAIC0xNzc2LDcgKzE3NzYsNyBAQCB0ZXh0X3N0YXJ0 c193aXRoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkK IAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlm IChteWxvY2FsZSAmJiAhbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKCFwZ19sb2NhbGVf ZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIm5vbmRldGVybWlu aXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3Igc3Vic3RyaW5nIHNlYXJjaGVz IikpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCBhOTkwYzgzM2M1Li5lYWQ3OTIy YzRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCkBAIC0zMTcsNiArMzE3LDcgQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29sIG92 ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAljaGFyCSAgICpjb2xsYXRlOwogCWNoYXIJICAgKmN0eXBl OwogCWNoYXIJICAgKmljdWxvY2FsZTsKKwljaGFyCSAgICpjb2xsdmVyc2lvbnN0cjsKIAogCS8q IEZldGNoIG91ciBwZ19kYXRhYmFzZSByb3cgbm9ybWFsbHksIHZpYSBzeXNjYWNoZSAqLwogCXR1 cCA9IFNlYXJjaFN5c0NhY2hlMShEQVRBQkFTRU9JRCwgT2JqZWN0SWRHZXREYXR1bShNeURhdGFi YXNlSWQpKTsKQEAgLTQyNCwzNSArNDI1LDMzIEBAIENoZWNrTXlEYXRhYmFzZShjb25zdCBjaGFy ICpuYW1lLCBib29sIGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxvd19jb25uZWN0CiAJ CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXAsIEFudW1fcGdfZGF0YWJh c2VfZGF0aWN1bG9jYWxlLCAmaXNudWxsKTsKIAkJQXNzZXJ0KCFpc251bGwpOwogCQlpY3Vsb2Nh bGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJbWFrZV9pY3VfY29sbGF0b3IoaWN1 bG9jYWxlLCAmZGVmYXVsdF9sb2NhbGUpOwogCX0KIAllbHNlCiAJCWljdWxvY2FsZSA9IE5VTEw7 CiAKLQlkZWZhdWx0X2xvY2FsZS5wcm92aWRlciA9IGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXI7CisJ ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFz ZV9kYXRjb2xsdmVyc2lvbiwKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwkJY29s bHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwllbHNlCisJCWNvbGx2 ZXJzaW9uc3RyID0gTlVMTDsKIAotCS8qCi0JICogRGVmYXVsdCBsb2NhbGUgaXMgY3VycmVudGx5 IGFsd2F5cyBkZXRlcm1pbmlzdGljLiAgTm9uZGV0ZXJtaW5pc3RpYwotCSAqIGxvY2FsZXMgY3Vy cmVudGx5IGRvbid0IHN1cHBvcnQgcGF0dGVybiBtYXRjaGluZywgd2hpY2ggd291bGQgYnJlYWsg YQotCSAqIGxvdCBvZiB0aGluZ3MgaWYgYXBwbGllZCBnbG9iYWxseS4KLQkgKi8KLQlkZWZhdWx0 X2xvY2FsZS5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKKwlpbml0X2RlZmF1bHRfbG9jYWxlKGRiZm9y bS0+ZGF0bG9jcHJvdmlkZXIsIGNvbGxhdGUsIGN0eXBlLCBpY3Vsb2NhbGUsCisJCQkJCQljb2xs dmVyc2lvbnN0cik7CiAKIAkvKgogCSAqIENoZWNrIGNvbGxhdGlvbiB2ZXJzaW9uLiAgU2VlIHNp bWlsYXIgY29kZSBpbgogCSAqIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbigpLiAgTm90ZSB0 aGF0IGhlcmUgd2Ugd2FybiBpbnN0ZWFkIG9mIGVycm9yCiAJICogaW4gYW55IGNhc2UsIHNvIHRo YXQgd2UgZG9uJ3QgcHJldmVudCBjb25uZWN0aW5nLgogCSAqLwotCWRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKERBVEFCQVNFT0lELCB0dXAsIEFudW1fcGdfZGF0YWJhc2VfZGF0Y29sbHZlcnNpb24s Ci0JCQkJCQkJJmlzbnVsbCk7Ci0JaWYgKCFpc251bGwpCisJaWYgKGNvbGx2ZXJzaW9uc3RyICE9 IE5VTEwpCiAJewogCQljaGFyCSAgICphY3R1YWxfdmVyc2lvbnN0cjsKLQkJY2hhcgkgICAqY29s bHZlcnNpb25zdHI7CiAKLQkJY29sbHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRh dHVtKTsKKwkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9u KAorCQkJZGJmb3JtLT5kYXRsb2Nwcm92aWRlciwKKwkJCWRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSA/IGljdWxvY2FsZSA6IGNvbGxhdGUpOwogCi0JCWFjdHVhbF92 ZXJzaW9uc3RyID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihkYmZvcm0tPmRhdGxvY3By b3ZpZGVyLCBkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBpY3Vs b2NhbGUgOiBjb2xsYXRlKTsKIAkJaWYgKCFhY3R1YWxfdmVyc2lvbnN0cikKIAkJCS8qIHNob3Vs ZCBub3QgaGFwcGVuICovCiAJCQllbG9nKFdBUk5JTkcsCkBAIC00NzAsNiArNDY5LDggQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29sIG92 ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAkJCQkJCQkgIm9yIGJ1aWxkIFBvc3RncmVTUUwgd2l0aCB0 aGUgcmlnaHQgbGlicmFyeSB2ZXJzaW9uLiIsCiAJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobmFt ZSkpKSk7CiAJfQorCWVsc2UKKwkJY29sbHZlcnNpb25zdHIgPSBOVUxMOwogCiAJLyogTWFrZSB0 aGUgbG9jYWxlIHNldHRpbmdzIHZpc2libGUgYXMgR1VDIHZhcmlhYmxlcywgdG9vICovCiAJU2V0 Q29uZmlnT3B0aW9uKCJsY19jb2xsYXRlIiwgY29sbGF0ZSwgUEdDX0lOVEVSTkFMLCBQR0NfU19E WU5BTUlDX0RFRkFVTFQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxl LmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCAyYmQ5NmFiN2UxLi43OWNm YWNiMzAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTUsMjIgKzE1LDYgQEAKICNpZiBkZWZp bmVkKExPQ0FMRV9UX0lOX1hMT0NBTEUpIHx8IGRlZmluZWQoV0NTVE9NQlNfTF9JTl9YTE9DQUxF KQogI2luY2x1ZGUgPHhsb2NhbGUuaD4KICNlbmRpZgotI2lmZGVmIFVTRV9JQ1UKLSNpbmNsdWRl IDx1bmljb2RlL3Vjb2wuaD4KLSNlbmRpZgotCi0jaWZkZWYgVVNFX0lDVQotLyoKLSAqIHVjb2xf c3RyY29sbFVURjgoKSB3YXMgaW50cm9kdWNlZCBpbiBJQ1UgNTAsIGJ1dCBpdCBpcyBidWdneSBi ZWZvcmUgSUNVIDUzLgotICogKHNlZQotICogPGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC9mMTQzOGVjNi0yMmFhLTQwMjktOWEzYi0yNmY3OWQzMzBlNzIlNDBtYW5p dG91LW1haWwub3JnPikKLSAqLwotI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID49IDUzCi0j ZGVmaW5lIEhBVkVfVUNPTF9TVFJDT0xMVVRGOCAxCi0jZWxzZQotI3VuZGVmIEhBVkVfVUNPTF9T VFJDT0xMVVRGOAotI2VuZGlmCi0jZW5kaWYKIAogLyogdXNlIGZvciBsaWJjIGxvY2FsZSBuYW1l cyAqLwogI2RlZmluZSBMT0NBTEVfTkFNRV9CVUZMRU4gMTI4CkBAIC02NSwzOSArNDksMTIgQEAg ZXh0ZXJuIHN0cnVjdCBsY29udiAqUEdMQ19sb2NhbGVjb252KHZvaWQpOwogZXh0ZXJuIHZvaWQg Y2FjaGVfbG9jYWxlX3RpbWUodm9pZCk7CiAKIAotLyoKLSAqIFdlIGRlZmluZSBvdXIgb3duIHdy YXBwZXIgYXJvdW5kIGxvY2FsZV90IHNvIHdlIGNhbiBrZWVwIHRoZSBzYW1lCi0gKiBmdW5jdGlv biBzaWduYXR1cmVzIGZvciBhbGwgYnVpbGRzLCB3aGlsZSBub3QgaGF2aW5nIHRvIGNyZWF0ZSBh Ci0gKiBmYWtlIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHR5cGUgbG9jYWxlX3QgaW4gdGhlIGds b2JhbCBuYW1lc3BhY2UuCi0gKiBwZ19sb2NhbGVfdCBpcyBvY2Nhc2lvbmFsbHkgY2hlY2tlZCBm b3IgdHJ1dGgsIHNvIG1ha2UgaXQgYSBwb2ludGVyLgotICovCi1zdHJ1Y3QgcGdfbG9jYWxlX3N0 cnVjdAotewotCWNoYXIJCXByb3ZpZGVyOwotCWJvb2wJCWRldGVybWluaXN0aWM7Ci0JdW5pb24K LQl7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQlsb2NhbGVfdAlsdDsKLSNlbmRpZgotI2lmZGVm IFVTRV9JQ1UKLQkJc3RydWN0Ci0JCXsKLQkJCWNvbnN0IGNoYXIgKmxvY2FsZTsKLQkJCVVDb2xs YXRvciAgKnVjb2w7Ci0JCX0JCQlpY3U7Ci0jZW5kaWYKLQkJaW50CQkJZHVtbXk7CQkvKiBpbiBj YXNlIHdlIGhhdmUgbmVpdGhlciBMT0NBTEVfVCBub3IgSUNVICovCi0JfQkJCWluZm87Ci19Owot CiB0eXBlZGVmIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0ICpwZ19sb2NhbGVfdDsKIAotZXh0ZXJu IFBHRExMSU1QT1JUIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IGRlZmF1bHRfbG9jYWxlOwotCi1l eHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIsCi0JCQkJ CQkJICBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcmVzdWx0cCk7Ci0KK2V4dGVybiB2b2lkIGlu aXRfZGVmYXVsdF9sb2NhbGUoY2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwKKwkJ CQkJCQkJY29uc3QgY2hhciAqY3R5cGUsIGNvbnN0IGNoYXIgKmljdWxvY2FsZSwKKwkJCQkJCQkJ Y29uc3QgY2hhciAqdmVyc2lvbik7CitleHRlcm4gYm9vbCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3Rp YyhwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIHBnX2xvY2FsZV90IHBnX25ld2xvY2FsZV9m cm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKTsKIAogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25f YWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRl KTsKQEAgLTExNSwxMCArNzIsNiBAQCBleHRlcm4gc2l6ZV90IHBnX3N0cnhmcm1fcHJlZml4KGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAogZXh0ZXJuIHNpemVf dCBwZ19zdHJueGZybV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsCiAJCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwog Ci0jaWZkZWYgVVNFX0lDVQotZXh0ZXJuIGludDMyX3QgaWN1X3RvX3VjaGFyKFVDaGFyICoqYnVm Zl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Ci1leHRlcm4gaW50MzJf dCBpY3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwg aW50MzJfdCBsZW5fdWNoYXIpOwotI2VuZGlmCiBleHRlcm4gdm9pZCBjaGVja19pY3VfbG9jYWxl KGNvbnN0IGNoYXIgKmljdV9sb2NhbGUpOwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBm cm9tL3RvIGxpYmMncyB3Y2hhcl90LCAqbm90KiBwZ193Y2hhcl90ICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L3BnX2xvY2FsZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjMzNDY1YWQ5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19s b2NhbGVfaW50ZXJuYWwuaApAQCAtMCwwICsxLDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogUG9zdGdyZVNRTCBsb2NhbGUgdXRpbGl0aWVzCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAyMiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworCisjaWZuZGVmIF9QR19MT0NBTEVfSU5URVJOQUxfCisjZGVmaW5lIF9QR19MT0NBTEVf SU5URVJOQUxfCisKKyNpZmRlZiBVU0VfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+Cisj ZW5kaWYKKworI2lmZGVmIFVTRV9JQ1UKKy8qCisgKiB1Y29sX3N0cmNvbGxVVEY4KCkgd2FzIGlu dHJvZHVjZWQgaW4gSUNVIDUwLCBidXQgaXQgaXMgYnVnZ3kgYmVmb3JlIElDVSA1My4KKyAqIChz ZWUKKyAqIDxodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvZjE0Mzhl YzYtMjJhYS00MDI5LTlhM2ItMjZmNzlkMzMwZTcyJTQwbWFuaXRvdS1tYWlsLm9yZz4pCisgKi8K KyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1MworI2RlZmluZSBIQVZFX1VDT0xfU1RS Q09MTFVURjggMQorI2Vsc2UKKyN1bmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKKyNlbmRpZgor I2VuZGlmCisKKy8qCisgKiBXZSBkZWZpbmUgb3VyIG93biB3cmFwcGVyIGFyb3VuZCBsb2NhbGVf dCBzbyB3ZSBjYW4ga2VlcCB0aGUgc2FtZQorICogZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYWxs IGJ1aWxkcywgd2hpbGUgbm90IGhhdmluZyB0byBjcmVhdGUgYQorICogZmFrZSB2ZXJzaW9uIG9m IHRoZSBzdGFuZGFyZCB0eXBlIGxvY2FsZV90IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgorICog cGdfbG9jYWxlX3QgaXMgb2NjYXNpb25hbGx5IGNoZWNrZWQgZm9yIHRydXRoLCBzbyBtYWtlIGl0 IGEgcG9pbnRlci4KKyAqLworc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKK3sKKwljaGFyCQlwcm92 aWRlcjsKKwlib29sCQlkZXRlcm1pbmlzdGljOworCWNoYXIJICAgKmNvbGxhdGU7CisJY2hhcgkg ICAqY3R5cGU7CisJdW5pb24KKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlzdHJ1Y3QKKwkJ eworCQkJbG9jYWxlX3QJbHQ7CisJCX0JCQlsaWJjOworI2VuZGlmCisjaWZkZWYgVVNFX0lDVQor CQlzdHJ1Y3QKKwkJeworCQkJVUNvbGxhdG9yCSp1Y29sOworCQl9CQkJaWN1OworI2VuZGlmCisJ CWludAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5laXRoZXIgTE9DQUxFX1Qgbm9yIElD VSAqLworCX0JCQlpbmZvOworfTsKKworI2lmZGVmIFVTRV9JQ1UKK2V4dGVybiBpbnQzMl90IGlj dV90b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBu Ynl0ZXMpOworZXh0ZXJuIGludDMyX3QgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29u c3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKTsKKyNlbmRpZgorCisjZW5k aWYJCQkJCQkJLyogX1BHX0xPQ0FMRV9JTlRFUk5BTF8gKi8KLS0gCjIuMzQuMQoK --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename="v5-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch" Content-Type: text/x-patch; name="v5-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiMTdhMTI1NzBjMzZjY2QwNDBlZjZkYzgzZjMwYjBhMDIzNGRiYThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDE6MzggLTA4MDAKU3ViamVjdDogW1BBVENIIHY1IDIvN10gQWRk IHBnX3N0cnhmcm0oKSBhbmQgcGdfc3RyeGZybV9wcmVmaXgoKS4KCkNhbGxlcnMgd2l0aCBhIE5V TC10ZXJtaW5hdGVkIHN0cmluZyBzaG91bGQgY2FsbCB0aGUgZm9ybWVyOyBjYWxsZXJzCndpdGgg YSBzdHJpbmcgYW5kIGxlbmd0aCBzaG91bGQgY2FsbCB0aGUgbGF0dGVyLgoKQWxzbyByZW1vdmUg dGhlIFRSVVNUX1NUUlhGUk0gZGVmaW5lLCBhbmQgcmVwbGFjZSB3aXRoIGEgZGV2ZWxvcGVyIEdV Qwpmb3IgZWFzaWVyIHRlc3RpbmcuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1 bmMuYyAgfCAgNDUgKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgfCAz ODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Zh cmNoYXIuYyAgICAgfCAgNDEgKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAg ICB8IDE0MiArKystLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg fCAgMTEgKwogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICAgfCAgMTEgKwogNiBm aWxlcyBjaGFuZ2VkLCA0ODEgaW5zZXJ0aW9ucygrKSwgMTUwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoZnVuYy5jCmluZGV4IGY4OTBmNzllZTEuLmI4MTM2ZTQ5NmYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYwpAQCAtMjkxLDIxICsyOTEsMTkgQEAgaGFzaHRleHQo UEdfRlVOQ1RJT05fQVJHUykKICNpZmRlZiBVU0VfSUNVCiAJCWlmIChteWxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJewotCQkJaW50MzJfdAkJdWxlbiA9IC0xOwotCQkJ VUNoYXIJICAgKnVjaGFyID0gTlVMTDsKLQkJCVNpemUJCWJzaXplOwotCQkJdWludDhfdCAgICAq YnVmOworCQkJU2l6ZQkJYnNpemUsIHJzaXplOworCQkJY2hhcgkgICAqYnVmOworCQkJY29uc3Qg Y2hhciAqa2V5ZGF0YSA9IFZBUkRBVEFfQU5ZKGtleSk7CisJCQlzaXplX3QJCWtleWxlbiA9IFZB UlNJWkVfQU5ZX0VYSERSKGtleSk7CiAKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBW QVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKLQotCQkJYnNpemUgPSB1 Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQl1Y2hhciwg dWxlbiwgTlVMTCwgMCk7CisJCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEs IGtleWxlbiwgbXlsb2NhbGUpOwogCQkJYnVmID0gcGFsbG9jKGJzaXplKTsKLQkJCXVjb2xfZ2V0 U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQl1Y2hhciwgdWxlbiwgYnVm LCBic2l6ZSk7Ci0JCQlwZnJlZSh1Y2hhcik7CiAKLQkJCXJlc3VsdCA9IGhhc2hfYW55KGJ1Ziwg YnNpemUpOworCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXplLCBrZXlkYXRhLCBrZXls ZW4sIG15bG9jYWxlKTsKKwkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKKwkJCQllbG9nKEVSUk9SLCAi cGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOworCisJCQlyZXN1bHQg PSBoYXNoX2FueSgodWludDhfdCAqKSBidWYsIGJzaXplKTsKIAogCQkJcGZyZWUoYnVmKTsKIAkJ fQpAQCAtMzQ5LDIxICszNDcsMjAgQEAgaGFzaHRleHRleHRlbmRlZChQR19GVU5DVElPTl9BUkdT KQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlVQ2hhcgkgICAqdWNoYXIg PSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpidWY7CisJCQlTaXplCQli c2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CisJCQljb25zdCBjaGFyICprZXlkYXRhID0g VkFSREFUQV9BTlkoa2V5KTsKKwkJCXNpemVfdAkJa2V5bGVuID0gVkFSU0laRV9BTllfRVhIRFIo a2V5KTsKIAotCQkJdWxlbiA9IGljdV90b191Y2hhcigmdWNoYXIsIFZBUkRBVEFfQU5ZKGtleSks IFZBUlNJWkVfQU5ZX0VYSERSKGtleSkpOwotCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtleSht eWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAwKTsK KwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2Fs ZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxl LT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKLQkJCXBm cmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoYnVmLCBic2l6ZSwg UEdfR0VUQVJHX0lOVDY0KDEpKTsKKwkJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwg a2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNpemUgIT0gYnNpemUpCisJCQkJ ZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQiKTsK KworCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSwK KwkJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAKIAkJCXBmcmVlKGJ1Zik7CiAJCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA2Y2Q2MjllY2I0Li42NjMyODYxNjNlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC05NCw2ICs5NCw5IEBAIGNoYXIJICAgKmxv Y2FsZV9tb25ldGFyeTsKIGNoYXIJICAgKmxvY2FsZV9udW1lcmljOwogY2hhcgkgICAqbG9jYWxl X3RpbWU7CiAKKy8qIEdVQyB0byBlbmFibGUgdXNlIG9mIHN0cnhmcm0oKSBmb3IgYWJicmV2aWF0 ZWQga2V5cyAqLworYm9vbCB0cnVzdF9zdHJ4ZnJtID0gZmFsc2U7CisKIC8qCiAgKiBsY190aW1l IGxvY2FsaXphdGlvbiBjYWNoZS4KICAqCkBAIC0yMDk5LDYgKzIxMDIsMzg0IEBAIHBnX3N0cm5j b2xsKGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBzaXpl X3QgbGVuMiwKIH0KIAogCitzdGF0aWMgc2l6ZV90CitwZ19zdHJ4ZnJtX2xpYmMoY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCisJCQkJcGdfbG9jYWxlX3QgbG9j YWxlKQoreworCUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0xJQkMpOworCisjaWZkZWYgVFJVU1RfU1RYRlJNCisjaWZkZWYgSEFWRV9MT0NBTEVfVAor CWlmIChsb2NhbGUpCisJCXJldHVybiBzdHJ4ZnJtX2woZGVzdCwgc3JjLCBkZXN0c2l6ZSwgbG9j YWxlLT5pbmZvLmx0KTsKKwllbHNlCisjZW5kaWYKKwkJcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3Jj LCBkZXN0c2l6ZSk7CisjZWxzZQorCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwllbG9nKEVSUk9S LCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworI2Vu ZGlmCit9CisKK3N0YXRpYyBzaXplX3QKK3BnX3N0cm54ZnJtX2xpYmMoY2hhciAqZGVzdCwgY29u c3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUsCisJCQkJIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1Zgkg PSBzYnVmOworCXNpemVfdAkgYnVmc2l6ZSA9IHNyY2xlbiArIDE7CisJc2l6ZV90CSByZXN1bHQ7 CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9M SUJDKTsKKworCWlmIChidWZzaXplID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKGJ1ZnNp emUpOworCisJLyogbnVsLXRlcm1pbmF0ZSBhcmd1bWVudHMgKi8KKwltZW1jcHkoYnVmLCBzcmMs IHNyY2xlbik7CisJYnVmW3NyY2xlbl0gPSAnXDAnOworCisJcmVzdWx0ID0gcGdfc3RyeGZybV9s aWJjKGRlc3QsIGJ1ZiwgZGVzdHNpemUsIGxvY2FsZSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJ CXBmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6ZV90CitwZ19z dHJ4ZnJtX3ByZWZpeF9saWJjKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRl c3RzaXplLAorCQkJCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJQXNzZXJ0KCFsb2NhbGUg fHwgbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7CisJLyogdW5zdXBwb3J0 ZWQ7IHNob3VsZG4ndCBoYXBwZW4gKi8KKwllbG9nKEVSUk9SLCAiY29sbHByb3ZpZGVyICclYycg ZG9lcyBub3Qgc3VwcG9ydCBwZ19zdHJ4ZnJtX3ByZWZpeCgpIiwKKwkJIGxvY2FsZS0+cHJvdmlk ZXIpOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9wcmVmaXhfbGliYyhjaGFyICpk ZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCisJCQkJCQlzaXplX3QgZGVzdHNp emUsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKKwkvKiB1bnN1cHBvcnRlZDsgc2hvdWxkbid0 IGhhcHBlbiAqLworCWVsb2coRVJST1IsICJjb2xscHJvdmlkZXIgJyVjJyBkb2VzIG5vdCBzdXBw b3J0IHBnX3N0cm54ZnJtX3ByZWZpeCgpIiwKKwkJIGxvY2FsZS0+cHJvdmlkZXIpOworfQorCisj aWZkZWYgVVNFX0lDVQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9pY3UoY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUsCisJCQkJ cGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWNoYXIJIHNidWZbVEVYVEJVRkxFTl07CisJY2hhcgkq YnVmCT0gc2J1ZjsKKwlVQ2hhcgkqdWNoYXI7CisJaW50MzJfdAkgdWxlbjsKKwlzaXplX3QgICB1 Y2hhcl9ic2l6ZTsKKwlTaXplCSByZXN1bHRfYnNpemU7CisKKwlBc3NlcnQobG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworCWluaXRfaWN1X2NvbnZlcnRlcigpOworCisJ dWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CisKKwl1Y2hh cl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOworCisJaWYgKHVjaGFyX2JzaXpl ID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKHVjaGFyX2JzaXplKTsKKworCXVjaGFyID0g KFVDaGFyICopIGJ1ZjsKKworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVj aGFyLCB1bGVuICsgMSwgc3JjLCBzcmNsZW4pOworCisJcmVzdWx0X2JzaXplID0gdWNvbF9nZXRT b3J0S2V5KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJICAgdWNoYXIsIHVsZW4sCisJ CQkJCQkJCSAgICh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplKTsKKworCWlmIChidWYgIT0gc2J1 ZikKKwkJcGZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHRfYnNpemU7Cit9CisKK3N0YXRpYyBz aXplX3QKK3BnX3N0cnhmcm1faWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90 IGRlc3RzaXplLAorCQkJICAgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCUFzc2VydChsb2NhbGUt PnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOworCXJldHVybiBwZ19zdHJueGZybV9pY3Uo ZGVzdCwgc3JjLCAtMSwgZGVzdHNpemUsIGxvY2FsZSk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3Bn X3N0cm54ZnJtX3ByZWZpeF9pY3Vfbm9fdXRmOChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMs IHNpemVfdCBzcmNsZW4sCisJCQkJCQkJICAgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBs b2NhbGUpCit7CisJY2hhcgkJCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJCQkqYnVmICAgPSBz YnVmOworCVVDaGFySXRlcmF0b3IJIGl0ZXI7CisJdWludDMyX3QJCSBzdGF0ZVsyXTsKKwlVRXJy b3JDb2RlCQkgc3RhdHVzOworCWludDMyX3QJCQkgdWxlbiAgPSAtMTsKKwlVQ2hhcgkJCSp1Y2hh ciA9IE5VTEw7CisJc2l6ZV90CQkJIHVjaGFyX2JzaXplOworCVNpemUJCQkgcmVzdWx0X2JzaXpl OworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJQXNz ZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKKworCWluaXRfaWN1X2NvbnZl cnRlcigpOworCisJdWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xl bik7CisKKwl1Y2hhcl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOworCisJaWYg KHVjaGFyX2JzaXplID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKHVjaGFyX2JzaXplKTsK KworCXVjaGFyID0gKFVDaGFyICopIGJ1ZjsKKworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9j b252ZXJ0ZXIsIHVjaGFyLCB1bGVuICsgMSwgc3JjLCBzcmNsZW4pOworCisJdWl0ZXJfc2V0U3Ry aW5nKCZpdGVyLCB1Y2hhciwgdWxlbik7CisJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdv bid0IG5lZWQgdGhhdCBhZ2FpbiAqLworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwlyZXN1bHRf YnNpemUgPSB1Y29sX25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJ CQkJCQkJJml0ZXIsCisJCQkJCQkJCQkJc3RhdGUsCisJCQkJCQkJCQkJKHVpbnQ4X3QgKikgZGVz dCwKKwkJCQkJCQkJCQlkZXN0c2l6ZSwKKwkJCQkJCQkJCQkmc3RhdHVzKTsKKwlpZiAoVV9GQUlM VVJFKHN0YXR1cykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygic29ydCBrZXkgZ2Vu ZXJhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisKKwly ZXR1cm4gcmVzdWx0X2JzaXplOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9wcmVm aXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKKwkJCQkJ ICAgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJc2l6ZV90IHJlc3Vs dDsKKworCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOworCisJ aWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQorCXsKKwkJVUNoYXJJdGVyYXRv ciBpdGVyOworCQl1aW50MzJfdAlzdGF0ZVsyXTsKKwkJVUVycm9yQ29kZQlzdGF0dXM7CisKKwkJ dWl0ZXJfc2V0VVRGOCgmaXRlciwgc3JjLCBzcmNsZW4pOworCQlzdGF0ZVswXSA9IHN0YXRlWzFd ID0gMDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWluICovCisJCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKKwkJcmVzdWx0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29s LAorCQkJCQkJCQkJICAmaXRlciwKKwkJCQkJCQkJCSAgc3RhdGUsCisJCQkJCQkJCQkgICh1aW50 OF90ICopIGRlc3QsCisJCQkJCQkJCQkgIGRlc3RzaXplLAorCQkJCQkJCQkJICAmc3RhdHVzKTsK KwkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1z Zygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCQl1X2Vycm9yTmFtZShz dGF0dXMpKSkpOworCX0KKwllbHNlCisJCXJlc3VsdCA9IHBnX3N0cm54ZnJtX3ByZWZpeF9pY3Vf bm9fdXRmOChkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsCisJCQkJCQkJCQkJCQlsb2NhbGUp OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNpemVfdAorcGdfc3RyeGZybV9wcmVm aXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAorCQkJ CQkgIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfSUNVKTsKKwlyZXR1cm4gcGdfc3Rybnhmcm1fcHJlZml4X2ljdShkZXN0LCBz cmMsIC0xLCBkZXN0c2l6ZSwgbG9jYWxlKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBSZXR1cm4g dHJ1ZSBpZiB0aGUgY29sbGF0aW9uIHByb3ZpZGVyIHN1cHBvcnRzIHBnX3N0cnhmcm0oKSBhbmQK KyAqIHBnX3N0cm54ZnJtKCk7IG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5 LCBpdCBzZWVtcyB0aGF0IHN0cnhmcm0oKSBmb3Igbm9uLUMgY29sbGF0aW9ucyBpcyBicm9rZW4g b24KKyAqIG1hbnkgY29tbW9uIHBsYXRmb3JtczsgdGVzdGluZyBvZiBtdWx0aXBsZSB2ZXJzaW9u cyBvZiBnbGliYyByZXZlYWxzIHRoYXQsCisgKiBmb3IgbWFueSBsb2NhbGVzLCBzdHJjb2xsKCkg YW5kIHN0cnhmcm0oKSBkbyBub3QgcmV0dXJuIGNvbnNpc3RlbnQKKyAqIHJlc3VsdHMuIFdoaWxl IG5vIG90aGVyIGxpYmMgb3RoZXIgdGhhbiBDeWd3aW4gaGFzIHNvIGZhciBiZWVuIHNob3duIHRv CisgKiBoYXZlIGEgcHJvYmxlbSwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlIGNvdXJzZSBvZiBh Y3Rpb24gZm9yIHJpZ2h0IG5vdyBhbmQKKyAqIGRpc2FibGUgdGhpcyBjYXRlZ29yaWNhbGx5LiAg KFVzZXJzIHdobyBhcmUgY2VydGFpbiB0aGlzIGlzbid0IGEgcHJvYmxlbSBvbgorICogdGhlaXIg c3lzdGVtIGNhbiBzZXQgdGhlIGRldmVsb3BlciBHVUMgInRydXN0X3N0cnhmcm0iLikKKyAqCisg KiBObyBzaW1pbGFyIHByb2JsZW0gaXMga25vd24gZm9yIHRoZSBJQ1UgcHJvdmlkZXIuCisgKi8K K2Jvb2wKK3BnX3N0cnhmcm1fZW5hYmxlZChwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaWYgKCFs b2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmV0dXJu IHRydXN0X3N0cnhmcm07CisJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8K KwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnBy b3ZpZGVyKTsKK30KKworLyoKKyAqIHBnX3N0cnhmcm0KKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMn IHRvIGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nIHN0b3JlZCBpbiAnZGVzdCcgc3VjaCB0aGF0Cisg KiBvcmRpbmFyeSBzdHJjbXAoKSBvbiB0cmFuc2Zvcm1lZCBzdHJpbmdzIGlzIGVxdWl2YWxlbnQg dG8gcGdfc3RyY29sbCgpIG9uCisgKiB1bnRyYW5zZm9ybWVkIHN0cmluZ3MuCisgKgorICogVGhl IHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNp emUgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgcmV0dXJucyB0aGUgbnVtYmVy IG9mIGJ5dGVzCisgKiBjb3BpZWQgdG8gJ2Rlc3QnOyBvdGhlcndpc2UsIHJldHVybnMgdGhlIG51 bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdCBhbmQgbGVhdmVzIHRo ZSBjb250ZW50cyBvZiAnZGVzdCcgdW5kZWZpbmVkLiBJZiBkZXN0c2l6ZSBpcyB6ZXJvLAorICog J2Rlc3QnIG1heSBiZSBOVUxMLgorICovCitzaXplX3QKK3BnX3N0cnhmcm0oY2hhciAqZGVzdCwg Y29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sK KwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9saWJjKGRlc3QsIHNyYywg ZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9pY3UoZGVz dCwgc3JjLCBkZXN0c2l6ZSwgbG9jYWxlKTsKKyNlbmRpZgorCWVsc2UKKwkJLyogc2hvdWxkbid0 IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIs IGxvY2FsZS0+cHJvdmlkZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHBnX3N0 cm54ZnJtCisgKgorICogVHJhbnNmb3JtcyAnc3JjJyB0byBhIG51bC10ZXJtaW5hdGVkIHN0cmlu ZyBzdG9yZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdAorICogb3JkaW5hcnkgc3RyY21wKCkgb24gdHJh bnNmb3JtZWQgc3RyaW5ncyBpcyBlcXVpdmFsZW50IHRvIHBnX3N0cmNvbGwoKSBvbgorICogdW50 cmFuc2Zvcm1lZCBzdHJpbmdzLgorICoKKyAqIElmIGRlc3RzaXplIGlzIGxhcmdlIGVub3VnaCB0 byBob2xkIHRoZSByZXN1bHQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcworICogY29waWVk IHRvICdkZXN0Jzsgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVk IHRvIGhvbGQgdGhlCisgKiByZXN1bHQgYW5kIGxlYXZlcyB0aGUgY29udGVudHMgb2YgJ2Rlc3Qn IHVuZGVmaW5lZC4gSWYgZGVzdHNpemUgaXMgemVybywKKyAqICdkZXN0JyBtYXkgYmUgTlVMTC4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5hdGUgdGhlIGFyZ3Vt ZW50IGZvciBsaWJjIGZ1bmN0aW9uczsKKyAqIHNvIGlmIHRoZSBjYWxsZXIgYWxyZWFkeSBoYXMg YSBudWwtdGVybWluYXRlZCBzdHJpbmcsIGl0IHNob3VsZCBjYWxsCisgKiBwZ19zdHJ4ZnJtKCkg aW5zdGVhZC4KKyAqLworc2l6ZV90CitwZ19zdHJueGZybShjaGFyICpkZXN0LCBzaXplX3QgZGVz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKKwkJCXBnX2xvY2FsZV90IGxv Y2FsZSkKK3sKKwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fbGliYyhk ZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVs c2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0g cGdfc3Rybnhmcm1faWN1KGRlc3QsIHNyYywgc3JjbGVuLCBkZXN0c2l6ZSwgbG9jYWxlKTsKKyNl bmRpZgorCWVsc2UKKwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBjb2xsYXRpb24gcHJvdmlk ZXIgc3VwcG9ydHMgcGdfc3RyeGZybV9wcmVmaXgoKSBhbmQKKyAqIHBnX3N0cm54ZnJtX3ByZWZp eCgpOyBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wKK3BnX3N0cnhmcm1fcHJlZml4X2VuYWJs ZWQocGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJCXJldHVybiBmYWxzZTsKKwllbHNlIGlmIChsb2Nh bGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJldHVybiB0cnVlOworCWVsc2UK KwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29s bHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworfQorCisvKgorICogcGdfc3RyeGZy bV9wcmVmaXgKKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBzZXF1ZW5jZSBzdG9y ZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkgb24gdGhlIGJ5dGUg c2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAqIHVudHJhbnNmb3Jt ZWQgc3RyaW5ncy4gVGhlIHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogVGhl IHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNp emUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0LCBzdG9yZXMg anVzdCB0aGUKKyAqIHByZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRl cyBhY3R1YWxseSBjb3BpZWQgdG8gJ2Rlc3QnLgorICovCitzaXplX3QKK3BnX3N0cnhmcm1fcHJl Zml4KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAorCQkJCSAg cGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlpZiAoIWxvY2FsZSB8 fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCQlyZXN1bHQgPSBwZ19z dHJ4ZnJtX3ByZWZpeF9saWJjKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYg VVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK KwkJcmVzdWx0ID0gcGdfc3RyeGZybV9wcmVmaXhfaWN1KGRlc3QsIHNyYywgZGVzdHNpemUsIGxv Y2FsZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhF UlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJueGZybV9wcmVmaXgKKyAqCisg KiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBzZXF1ZW5jZSBzdG9yZWQgaW4gJ2Rlc3QnIHN1 Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkgb24gdGhlIGJ5dGUgc2VxdWVuY2UgaXMgZXF1 aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAqIHVudHJhbnNmb3JtZWQgc3RyaW5ncy4gVGhl IHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogVGhlIHByb3ZpZGVkICdzcmMn IG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNpemUgaXMgbm90IGxhcmdl IGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0LCBzdG9yZXMganVzdCB0aGUKKyAqIHBy ZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3Bp ZWQgdG8gJ2Rlc3QnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IG5lZWQgdG8gbnVsLXRlcm1p bmF0ZSB0aGUgYXJndW1lbnQgZm9yIGxpYmMgZnVuY3Rpb25zOworICogc28gaWYgdGhlIGNhbGxl ciBhbHJlYWR5IGhhcyBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgaXQgc2hvdWxkIGNhbGwKKyAq IHBnX3N0cnhmcm1fcHJlZml4KCkgaW5zdGVhZC4KKyAqLworc2l6ZV90CitwZ19zdHJueGZybV9w cmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJ ICAgc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7 CisKKwlpZiAoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJD KQorCQlyZXN1bHQgPSBwZ19zdHJueGZybV9wcmVmaXhfbGliYyhkZXN0LCBzcmMsIHNyY2xlbiwg ZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fcHJlZml4 X2ljdShkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjZW5kaWYKKwllbHNl CisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNv bGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKICNpZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29udmVydGVyKHZvaWQp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwppbmRleCAwMWEyZGI2YjIzLi4xOTYzZDRkYzRlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJjaGFyLmMKQEAgLTEwMjQsMjEgKzEwMjQsMTcgQEAgaGFzaGJwY2hhcihQ R19GVU5DVElPTl9BUkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlV Q2hhcgkgICAqdWNoYXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpi dWY7CisJCQlTaXplCQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CiAKLQkJCXVsZW4g PSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0JCQlic2l6ZSA9IHVj b2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1 bGVuLCBOVUxMLCAwKTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwg a2V5bGVuLCBteWxvY2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRT b3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYs IGJzaXplKTsKLQkJCXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnkoYnVmLCBi c2l6ZSk7CisJCQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxl biwgbXlsb2NhbGUpOworCQkJaWYgKHJzaXplICE9IGJzaXplKQorCQkJCWVsb2coRVJST1IsICJw Z19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CisKKwkJCXJlc3VsdCA9 IGhhc2hfYW55KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOwogCiAJCQlwZnJlZShidWYpOwogCQl9 CkBAIC0xMDg2LDIxICsxMDgyLDE4IEBAIGhhc2hicGNoYXJleHRlbmRlZChQR19GVU5DVElPTl9B UkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlVQ2hhcgkgICAqdWNo YXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpidWY7CisJCQlTaXpl CQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CiAKLQkJCXVsZW4gPSBpY3VfdG9fdWNo YXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtl eShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAw KTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxv Y2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9j YWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKLQkJ CXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoYnVmLCBic2l6 ZSwgUEdfR0VUQVJHX0lOVDY0KDEpKTsKKwkJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6 ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNpemUgIT0gYnNpemUpCisJ CQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQi KTsKKworCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6 ZSwKKwkJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAKIAkJCXBmcmVlKGJ1Zik7CiAJ CX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4IDUyZGQwYmJiYTguLjhkYTU0NTg0MWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtMTg4OSwyMCArMTg4OSw2IEBAIHZhcnN0cl9zb3J0 c3VwcG9ydChTb3J0U3VwcG9ydCBzc3VwLCBPaWQgdHlwaWQsIE9pZCBjb2xsaWQpCiAJCSAqLwog CQlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCQkvKgot CQkgKiBUaGVyZSBpcyBhIGZ1cnRoZXIgZXhjZXB0aW9uIG9uIFdpbmRvd3MuICBXaGVuIHRoZSBk YXRhYmFzZQotCQkgKiBlbmNvZGluZyBpcyBVVEYtOCBhbmQgd2UgYXJlIG5vdCB1c2luZyB0aGUg QyBjb2xsYXRpb24sIGNvbXBsZXgKLQkJICogaGFja3MgYXJlIHJlcXVpcmVkLiAgV2UgZG9uJ3Qg Y3VycmVudGx5IGhhdmUgYSBjb21wYXJhdG9yIHRoYXQKLQkJICogaGFuZGxlcyB0aGF0IGNhc2Us IHNvIHdlIGZhbGwgYmFjayBvbiB0aGUgc2xvdyBtZXRob2Qgb2YgaGF2aW5nIHRoZQotCQkgKiBz b3J0IGNvZGUgaW52b2tlIGJ0dGV4dGNtcCgpIChpbiB0aGUgY2FzZSBvZiB0ZXh0KSB2aWEgdGhl IGZtZ3IKLQkJICogdHJhbXBvbGluZS4gIElDVSBsb2NhbGVzIHdvcmsganVzdCB0aGUgc2FtZSBv biBXaW5kb3dzLCBob3dldmVyLgotCQkgKi8KLSNpZmRlZiBXSU4zMgotCQlpZiAoR2V0RGF0YWJh c2VFbmNvZGluZygpID09IFBHX1VURjggJiYKLQkJCSEobG9jYWxlICYmIGxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkpCi0JCQlyZXR1cm47Ci0jZW5kaWYKLQogCQkvKgogCQkg KiBXZSB1c2UgdmFybGVuYWZhc3RjbXBfbG9jYWxlIGV4Y2VwdCBmb3IgdHlwZSBOQU1FLgogCQkg Ki8KQEAgLTE5MTgsMTMgKzE5MDQsNyBAQCB2YXJzdHJfc29ydHN1cHBvcnQoU29ydFN1cHBvcnQg c3N1cCwgT2lkIHR5cGlkLCBPaWQgY29sbGlkKQogCiAJLyoKIAkgKiBVbmZvcnR1bmF0ZWx5LCBp dCBzZWVtcyB0aGF0IGFiYnJldmlhdGlvbiBmb3Igbm9uLUMgY29sbGF0aW9ucyBpcwotCSAqIGJy b2tlbiBvbiBtYW55IGNvbW1vbiBwbGF0Zm9ybXM7IHRlc3Rpbmcgb2YgbXVsdGlwbGUgdmVyc2lv bnMgb2YgZ2xpYmMKLQkgKiByZXZlYWxzIHRoYXQsIGZvciBtYW55IGxvY2FsZXMsIHN0cmNvbGwo KSBhbmQgc3RyeGZybSgpIGRvIG5vdCByZXR1cm4KLQkgKiBjb25zaXN0ZW50IHJlc3VsdHMsIHdo aWNoIGlzIGZhdGFsIHRvIHRoaXMgb3B0aW1pemF0aW9uLiAgV2hpbGUgbm8KLQkgKiBvdGhlciBs aWJjIG90aGVyIHRoYW4gQ3lnd2luIGhhcyBzbyBmYXIgYmVlbiBzaG93biB0byBoYXZlIGEgcHJv YmxlbSwKLQkgKiB3ZSB0YWtlIHRoZSBjb25zZXJ2YXRpdmUgY291cnNlIG9mIGFjdGlvbiBmb3Ig cmlnaHQgbm93IGFuZCBkaXNhYmxlCi0JICogdGhpcyBjYXRlZ29yaWNhbGx5LiAgKFVzZXJzIHdo byBhcmUgY2VydGFpbiB0aGlzIGlzbid0IGEgcHJvYmxlbSBvbgotCSAqIHRoZWlyIHN5c3RlbSBj YW4gZGVmaW5lIFRSVVNUX1NUUlhGUk0uKQorCSAqIGJyb2tlbiBvbiBtYW55IGNvbW1vbiBwbGF0 Zm9ybXM7IHNlZSBwZ19zdHJ4ZnJtX2VuYWJsZWQoKS4KIAkgKgogCSAqIEV2ZW4gYXBhcnQgZnJv bSB0aGUgcmlzayBvZiBicm9rZW4gbG9jYWxlcywgaXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlCiAJ ICogYXJlIHBsYXRmb3JtcyB3aGVyZSB0aGUgdXNlIG9mIGFiYnJldmlhdGVkIGtleXMgc2hvdWxk IGJlIGRpc2FibGVkIGF0CkBAIC0xOTM3LDEwICsxOTE3LDggQEAgdmFyc3RyX3NvcnRzdXBwb3J0 KFNvcnRTdXBwb3J0IHNzdXAsIE9pZCB0eXBpZCwgT2lkIGNvbGxpZCkKIAkgKiBjYXRlZ29yaWNh bGx5LCB3ZSBtYXkgc3RpbGwgd2FudCBvciBuZWVkIHRvIGRpc2FibGUgaXQgZm9yIHBhcnRpY3Vs YXIKIAkgKiBwbGF0Zm9ybXMuCiAJICovCi0jaWZuZGVmIFRSVVNUX1NUUlhGUk0KLQlpZiAoIWNv bGxhdGVfYyAmJiAhKGxvY2FsZSAmJiBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9J Q1UpKQorCWlmICghY29sbGF0ZV9jICYmICFwZ19zdHJ4ZnJtX2VuYWJsZWQobG9jYWxlKSkKIAkJ YWJicmV2aWF0ZSA9IGZhbHNlOwotI2VuZGlmCiAKIAkvKgogCSAqIElmIHdlJ3JlIHVzaW5nIGFi YnJldmlhdGVkIGtleXMsIG9yIGlmIHdlJ3JlIHVzaW5nIGEgbG9jYWxlLWF3YXJlCkBAIC0yMjI5 LDYgKzIyMDcsNyBAQCB2YXJzdHJmYXN0Y21wX2xvY2FsZShjaGFyICphMXAsIGludCBsZW4xLCBj aGFyICphMnAsIGludCBsZW4yLCBTb3J0U3VwcG9ydCBzc3VwKQogc3RhdGljIERhdHVtCiB2YXJz dHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiB7CisJ Y29uc3Qgc2l6ZV90IG1heF9wcmVmaXhfYnl0ZXMgPSBzaXplb2YoRGF0dW0pOwogCVZhclN0cmlu Z1NvcnRTdXBwb3J0ICpzc3MgPSAoVmFyU3RyaW5nU29ydFN1cHBvcnQgKikgc3N1cC0+c3N1cF9l eHRyYTsKIAlWYXJTdHJpbmcgICphdXRob3JpdGF0aXZlID0gRGF0dW1HZXRWYXJTdHJpbmdQUChv cmlnaW5hbCk7CiAJY2hhcgkgICAqYXV0aG9yaXRhdGl2ZV9kYXRhID0gVkFSREFUQV9BTlkoYXV0 aG9yaXRhdGl2ZSk7CkBAIC0yMjQxLDcgKzIyMjAsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQo RGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAKIAlwcmVzID0gKGNoYXIgKikgJnJl czsKIAkvKiBtZW1zZXQoKSwgc28gYW55IG5vbi1vdmVyd3JpdHRlbiBieXRlcyBhcmUgTlVMICov Ci0JbWVtc2V0KHByZXMsIDAsIHNpemVvZihEYXR1bSkpOworCW1lbXNldChwcmVzLCAwLCBtYXhf cHJlZml4X2J5dGVzKTsKIAlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihhdXRob3JpdGF0aXZlKTsK IAogCS8qIEdldCBudW1iZXIgb2YgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5nIHNwYWNlcyAqLwpA QCAtMjI3NiwxNCArMjI1NSwxMCBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2lu YWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJICogdGhpbmc6IGV4cGxpY2l0bHkgY29uc2lkZXIgc3Ry aW5nIGxlbmd0aC4KIAkgKi8KIAlpZiAoc3NzLT5jb2xsYXRlX2MpCi0JCW1lbWNweShwcmVzLCBh dXRob3JpdGF0aXZlX2RhdGEsIE1pbihsZW4sIHNpemVvZihEYXR1bSkpKTsKKwkJbWVtY3B5KHBy ZXMsIGF1dGhvcml0YXRpdmVfZGF0YSwgTWluKGxlbiwgbWF4X3ByZWZpeF9ieXRlcykpOwogCWVs c2UKIAl7CiAJCVNpemUJCWJzaXplOwotI2lmZGVmIFVTRV9JQ1UKLQkJaW50MzJfdAkJdWxlbiA9 IC0xOwotCQlVQ2hhcgkgICAqdWNoYXIgPSBOVUxMOwotI2VuZGlmCiAKIAkJLyoKIAkJICogV2Un cmUgbm90IHVzaW5nIHRoZSBDIGNvbGxhdGlvbiwgc28gZmFsbCBiYWNrIG9uIHN0cnhmcm0gb3Ig SUNVCkBAIC0yMzAxLDcgKzIyNzYsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3Jp Z2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCWlmIChzc3MtPmxhc3RfbGVuMSA9PSBsZW4gJiYg c3NzLT5jYWNoZV9ibG9iICYmCiAJCQltZW1jbXAoc3NzLT5idWYxLCBhdXRob3JpdGF0aXZlX2Rh dGEsIGxlbikgPT0gMCkKIAkJewotCQkJbWVtY3B5KHByZXMsIHNzcy0+YnVmMiwgTWluKHNpemVv ZihEYXR1bSksIHNzcy0+bGFzdF9sZW4yKSk7CisJCQltZW1jcHkocHJlcywgc3NzLT5idWYyLCBN aW4obWF4X3ByZWZpeF9ieXRlcywgc3NzLT5sYXN0X2xlbjIpKTsKIAkJCS8qIE5vIGNoYW5nZSBh ZmZlY3RpbmcgY2FyZGluYWxpdHksIHNvIG5vIGhhc2hpbmcgcmVxdWlyZWQgKi8KIAkJCWdvdG8g ZG9uZTsKIAkJfQpAQCAtMjMwOSw4MSArMjI4NCw0OSBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQo RGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCW1lbWNweShzc3MtPmJ1ZjEsIGF1 dGhvcml0YXRpdmVfZGF0YSwgbGVuKTsKIAogCQkvKgotCQkgKiBKdXN0IGxpa2Ugc3RyY29sbCgp LCBzdHJ4ZnJtKCkgZXhwZWN0cyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gTm90Ci0JCSAqIG5l Y2Vzc2FyeSBmb3IgSUNVLCBidXQgZG9lc24ndCBodXJ0LgorCQkgKiBwZ19zdHJ4ZnJtKCkgYW5k IHBnX3N0cnhmcm1fcHJlZml4IGV4cGVjdCBOVUwtdGVybWluYXRlZAorCQkgKiBzdHJpbmdzLgog CQkgKi8KIAkJc3NzLT5idWYxW2xlbl0gPSAnXDAnOwogCQlzc3MtPmxhc3RfbGVuMSA9IGxlbjsK IAotI2lmZGVmIFVTRV9JQ1UKLQkJLyogV2hlbiB1c2luZyBJQ1UgYW5kIG5vdCBVVEY4LCBjb252 ZXJ0IHN0cmluZyB0byBVQ2hhci4gKi8KLQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVICYmCi0JCQlHZXREYXRhYmFzZUVuY29kaW5n KCkgIT0gUEdfVVRGOCkKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBzc3MtPmJ1ZjEs IGxlbik7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBMb29wOiBDYWxsIHN0cnhmcm0oKSBvciB1Y29s X2dldFNvcnRLZXkoKSwgcG9zc2libHkgZW5sYXJnZSBidWZmZXIsCi0JCSAqIGFuZCB0cnkgYWdh aW4uICBCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRoZSByZXN1bHQgYnVmZmVyCi0JCSAq IGNvbnRlbnQgdW5kZWZpbmVkIGlmIHRoZSByZXN1bHQgZGlkIG5vdCBmaXQsIHNvIHdlIG5lZWQg dG8gcmV0cnkKLQkJICogdW50aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRob3VnaCB3ZSBvbmx5 IG5lZWQgdGhlIGZpcnN0IGZldyBieXRlcwotCQkgKiBpbiB0aGUgZW5kLiAgV2hlbiB1c2luZyB1 Y29sX25leHRTb3J0S2V5UGFydCgpLCBob3dldmVyLCB3ZSBvbmx5Ci0JCSAqIGFzayBmb3IgYXMg bWFueSBieXRlcyBhcyB3ZSBhY3R1YWxseSBuZWVkLgotCQkgKi8KLQkJZm9yICg7OykKKwkJaWYg KHBnX3N0cnhmcm1fcHJlZml4X2VuYWJsZWQoc3NzLT5sb2NhbGUpKQogCQl7Ci0jaWZkZWYgVVNF X0lDVQotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xM UFJPVklERVJfSUNVKQorCQkJaWYgKHNzcy0+YnVmbGVuMiA8IG1heF9wcmVmaXhfYnl0ZXMpCiAJ CQl7Ci0JCQkJLyoKLQkJCQkgKiBXaGVuIHVzaW5nIFVURjgsIHVzZSB0aGUgaXRlcmF0aW9uIGlu dGVyZmFjZSBzbyB3ZSBvbmx5Ci0JCQkJICogbmVlZCB0byBwcm9kdWNlIGFzIG1hbnkgYnl0ZXMg YXMgd2UgYWN0dWFsbHkgbmVlZC4KLQkJCQkgKi8KLQkJCQlpZiAoR2V0RGF0YWJhc2VFbmNvZGlu ZygpID09IFBHX1VURjgpCi0JCQkJewotCQkJCQlVQ2hhckl0ZXJhdG9yIGl0ZXI7Ci0JCQkJCXVp bnQzMl90CXN0YXRlWzJdOwotCQkJCQlVRXJyb3JDb2RlCXN0YXR1czsKLQotCQkJCQl1aXRlcl9z ZXRVVEY4KCZpdGVyLCBzc3MtPmJ1ZjEsIGxlbik7Ci0JCQkJCXN0YXRlWzBdID0gc3RhdGVbMV0g PSAwOwkvKiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KLQkJCQkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOwotCQkJCQlic2l6ZSA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KHNzcy0+bG9jYWxlLT5pbmZv LmljdS51Y29sLAotCQkJCQkJCQkJCQkJICZpdGVyLAotCQkJCQkJCQkJCQkJIHN0YXRlLAotCQkJ CQkJCQkJCQkJICh1aW50OF90ICopIHNzcy0+YnVmMiwKLQkJCQkJCQkJCQkJCSBNaW4oc2l6ZW9m KERhdHVtKSwgc3NzLT5idWZsZW4yKSwKLQkJCQkJCQkJCQkJCSAmc3RhdHVzKTsKLQkJCQkJaWYg KFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkJKGVycm1z Zygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJCQkJCQl1X2Vycm9yTmFt ZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCWJzaXplID0gdWNvbF9nZXRTb3J0 S2V5KHNzcy0+bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCQl1Y2hhciwgdWxlbiwK LQkJCQkJCQkJCQkJKHVpbnQ4X3QgKikgc3NzLT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJCXNz cy0+YnVmbGVuMiA9IE1heChtYXhfcHJlZml4X2J5dGVzLAorCQkJCQkJCQkgICBNaW4oc3NzLT5i dWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0gcmVwYWxsb2Moc3Nz LT5idWYyLCBzc3MtPmJ1ZmxlbjIpOwogCQkJfQotCQkJZWxzZQotI2VuZGlmCi0jaWZkZWYgSEFW RV9MT0NBTEVfVAotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfTElCQykKLQkJCQlic2l6ZSA9IHN0cnhmcm1fbChzc3MtPmJ1ZjIsIHNz cy0+YnVmMSwKLQkJCQkJCQkJICBzc3MtPmJ1ZmxlbjIsIHNzcy0+bG9jYWxlLT5pbmZvLmx0KTsK LQkJCWVsc2UKLSNlbmRpZgotCQkJCWJzaXplID0gc3RyeGZybShzc3MtPmJ1ZjIsIHNzcy0+YnVm MSwgc3NzLT5idWZsZW4yKTsKLQotCQkJc3NzLT5sYXN0X2xlbjIgPSBic2l6ZTsKLQkJCWlmIChi c2l6ZSA8IHNzcy0+YnVmbGVuMikKLQkJCQlicmVhazsKIAorCQkJYnNpemUgPSBwZ19zdHJ4ZnJt X3ByZWZpeChzc3MtPmJ1ZjIsIHNzcy0+YnVmMSwKKwkJCQkJCQkJCSAgbWF4X3ByZWZpeF9ieXRl cywgc3NzLT5sb2NhbGUpOworCQl9CisJCWVsc2UKKwkJewogCQkJLyoKLQkJCSAqIEdyb3cgYnVm ZmVyIGFuZCByZXRyeS4KKwkJCSAqIExvb3A6IENhbGwgcGdfc3RyeGZybSgpLCBwb3NzaWJseSBl bmxhcmdlIGJ1ZmZlciwgYW5kIHRyeQorCQkJICogYWdhaW4uICBUaGUgcGdfc3RyeGZybSgpIGZ1 bmN0aW9uIGxlYXZlcyB0aGUgcmVzdWx0IGJ1ZmZlcgorCQkJICogY29udGVudCB1bmRlZmluZWQg aWYgdGhlIHJlc3VsdCBkaWQgbm90IGZpdCwgc28gd2UgbmVlZCB0bworCQkJICogcmV0cnkgdW50 aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRob3VnaCB3ZSBvbmx5IG5lZWQgdGhlIGZpcnN0CisJ CQkgKiBmZXcgYnl0ZXMgaW4gdGhlIGVuZC4KIAkJCSAqLwotCQkJc3NzLT5idWZsZW4yID0gTWF4 KGJzaXplICsgMSwKLQkJCQkJCQkgICBNaW4oc3NzLT5idWZsZW4yICogMiwgTWF4QWxsb2NTaXpl KSk7Ci0JCQlzc3MtPmJ1ZjIgPSByZXBhbGxvYyhzc3MtPmJ1ZjIsIHNzcy0+YnVmbGVuMik7CisJ CQlmb3IgKDs7KQorCQkJeworCQkJCWJzaXplID0gcGdfc3RyeGZybShzc3MtPmJ1ZjIsIHNzcy0+ YnVmMSwgc3NzLT5idWZsZW4yLAorCQkJCQkJCQkgICBzc3MtPmxvY2FsZSk7CisKKwkJCQlzc3Mt Pmxhc3RfbGVuMiA9IGJzaXplOworCQkJCWlmIChic2l6ZSA8IHNzcy0+YnVmbGVuMikKKwkJCQkJ YnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIEdyb3cgYnVmZmVyIGFuZCByZXRyeS4KKwkJCQkgKi8K KwkJCQlzc3MtPmJ1ZmxlbjIgPSBNYXgoYnNpemUgKyAxLAorCQkJCQkJCQkgICBNaW4oc3NzLT5i dWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0gcmVwYWxsb2Moc3Nz LT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTIzOTUsMTIgKzIz MzgsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0 IHNzdXApCiAJCSAqIChBY3R1YWxseSwgZXZlbiBpZiB0aGVyZSB3ZXJlIE5VTCBieXRlcyBpbiB0 aGUgYmxvYiBpdCB3b3VsZCBiZQogCQkgKiBva2F5LiAgU2VlIHJlbWFya3Mgb24gYnl0ZWEgY2Fz ZSBhYm92ZS4pCiAJCSAqLwotCQltZW1jcHkocHJlcywgc3NzLT5idWYyLCBNaW4oc2l6ZW9mKERh dHVtKSwgYnNpemUpKTsKLQotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKHVjaGFyKQotCQkJcGZyZWUo dWNoYXIpOwotI2VuZGlmCisJCW1lbWNweShwcmVzLCBzc3MtPmJ1ZjIsIE1pbihtYXhfcHJlZml4 X2J5dGVzLCBic2l6ZSkpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CmluZGV4IDQzNmFmZTFkMjEuLjAzZGZlOWI3ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCkBAIC0xOTQ4LDYgKzE5NDgsMTcgQEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3Vy ZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsidHJ1c3Rf c3RyeGZybSIsIFBHQ19VU0VSU0VULCBERVZFTE9QRVJfT1BUSU9OUywKKwkJCWdldHRleHRfbm9v cCgiQWxsb3cgdXNlIG9mIHN0cnhmcm0oKSBmb3IgYWJicmV2aWF0ZWQga2V5cyBvcHRpbWl6YXRp b24gZm9yIGxpYmMgcHJvdmlkZXIuIiksCisJCQlOVUxMLAorCQkJR1VDX05PVF9JTl9TQU1QTEUK KwkJfSwKKwkJJnRydXN0X3N0cnhmcm0sCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJ fSwKKwogCXsKIAkJeyJkYXRhX3N5bmNfcmV0cnkiLCBQR0NfUE9TVE1BU1RFUiwgRVJST1JfSEFO RExJTkdfT1BUSU9OUywKIAkJCWdldHRleHRfbm9vcCgiV2hldGhlciB0byBjb250aW51ZSBydW5u aW5nIGFmdGVyIGEgZmFpbHVyZSB0byBzeW5jIGRhdGEgZmlsZXMuIiksCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2Fs ZS5oCmluZGV4IGJmNzBhZTA4Y2EuLjJiZDk2YWI3ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBA IC00MCw2ICs0MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpsb2NhbGVfbWVzc2FnZXM7 CiBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqbG9jYWxlX21vbmV0YXJ5OwogZXh0ZXJuIFBHRExM SU1QT1JUIGNoYXIgKmxvY2FsZV9udW1lcmljOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKmxv Y2FsZV90aW1lOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgdHJ1c3Rfc3RyeGZybTsKIAogLyog bGNfdGltZSBsb2NhbGl6YXRpb24gY2FjaGUgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICps b2NhbGl6ZWRfYWJicmV2X2RheXNbXTsKQEAgLTEwMyw2ICsxMDQsMTYgQEAgZXh0ZXJuIGNoYXIg KmdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNo YXIgKmNvbGxjb2wKIGV4dGVybiBpbnQgcGdfc3RyY29sbChjb25zdCBjaGFyICphcmcxLCBjb25z dCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIGludCBwZ19zdHJuY29s bChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwKIAkJCQkJICAgY29uc3QgY2hhciAqYXJn Miwgc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gYm9vbCBwZ19zdHJ4 ZnJtX2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3QgcGdfc3RyeGZy bShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJCSBw Z19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIHNpemVfdCBwZ19zdHJueGZybShjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCSAgc2l6ZV90IHNyY2xl biwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBib29sIHBnX3N0cnhmcm1fcHJlZml4X2Vu YWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3QgcGdfc3RyeGZybV9wcmVm aXgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJ CXBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gc2l6ZV90IHBnX3N0cm54ZnJtX3ByZWZpeChj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCQkJIHNp emVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAKICNpZmRlZiBVU0VfSUNVCiBleHRl cm4gaW50MzJfdCBpY3VfdG9fdWNoYXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpi dWZmLCBzaXplX3QgbmJ5dGVzKTsKLS0gCjIuMzQuMQoK --=-o0L0KMVWxKiRsRMoifVA Content-Disposition: attachment; filename="v5-0001-Add-pg_strcoll-and-pg_strncoll.patch" Content-Type: text/x-patch; name="v5-0001-Add-pg_strcoll-and-pg_strncoll.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5Zjc4NGNiNjdhNjUyZWUwNGI0M2QyYTBjZmM3MDhhOWJjZDk4YTExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDU6MTUgLTA4MDAKU3ViamVjdDogW1BBVENIIHY1IDEvN10gQWRk IHBnX3N0cmNvbGwoKSBhbmQgcGdfc3RybmNvbGwoKS4KCkNhbGxlcnMgd2l0aCBOVUwtdGVybWlu YXRlZCBzdHJpbmdzIHNob3VsZCBjYWxsIHRoZSBmb3JtZXI7IGNhbGxlcnMKd2l0aCBzdHJpbmdz IGFuZCB0aGVpciBsZW5ndGggc2hvdWxkIGNhbGwgdGhlIGxhdHRlci4KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgfCA0MjAgKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgfCAyMzAgKy0tLS0tLS0tLS0t LS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgIHwgICAzICsKIDMgZmlsZXMg Y2hhbmdlZCwgNDA2IGluc2VydGlvbnMoKyksIDI0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlLmMKaW5kZXggMmI0MmQ5Y2NkOC4uNmNkNjI5ZWNiNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGUuYwpAQCAtNzksNiArNzksMTIgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+ CiAjZW5kaWYKIAorLyoKKyAqIFRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0aGF0IG1vc3Qg c3RyaW5ncyB3aWxsIGZpdCwgYnV0IHNtYWxsIGVub3VnaAorICogdGhhdCB3ZSBmZWVsIGNvbWZv cnRhYmxlIHB1dHRpbmcgaXQgb24gdGhlIHN0YWNrCisgKi8KKyNkZWZpbmUJCVRFWFRCVUZMRU4J CQkxMDI0CisKICNkZWZpbmUJCU1BWF9MMTBOX0RBVEEJCTgwCiAKIApAQCAtMTIzLDYgKzEyOSwx OSBAQCBzdGF0aWMgY2hhciAqSXNvTG9jYWxlTmFtZShjb25zdCBjaGFyICopOwogI2VuZGlmCiAK ICNpZmRlZiBVU0VfSUNVCisvKgorICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBi ZXR3ZWVuIElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncworICogaW4gZGF0YWJhc2Ug ZW5jb2RpbmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdl IG9ubHkKKyAqIG5lZWQgb25lIG9mIHRoZXNlIHBlciBzZXNzaW9uLgorICovCitzdGF0aWMgVUNv bnZlcnRlciAqaWN1X2NvbnZlcnRlciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGluaXRfaWN1X2Nv bnZlcnRlcih2b2lkKTsKK3N0YXRpYyBzaXplX3QgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNv bnZlcnRlciwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CitzdGF0aWMg aW50MzJfdCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKKwkJCQkJCQkgVUNo YXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqc3RyLCBzaXpl X3Qgc3JjbGVuKTsKIHN0YXRpYyB2b2lkIGljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoVUNv bGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hhciAqbG9jKTsKICNlbmRpZgogCkBAIC0xNzMxLDE1 ICsxNzUwLDM1NiBAQCBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIgY29sbHByb3Zp ZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSkKIAlyZXR1cm4gY29sbHZlcnNpb247CiB9CiAK Ky8qCisgKiBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgKKyAqCisgKiBXaW4zMiBkb2VzIG5v dCBoYXZlIFVURi04LiBDb252ZXJ0IFVURjggYXJndW1lbnRzIHRvIHdpZGUgY2hhcmFjdGVycyBh bmQKKyAqIGludm9rZSB3Y3Njb2xsKCkgb3Igd2NzY29sbF9sKCkuCisgKi8KKyNpZmRlZiBXSU4z Mgorc3RhdGljIGludAorcGdfc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFy ZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLAorCQkJCQkJCXNpemVfdCBsZW4yLCBw Z19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkJc2J1ZltURVhUQlVGTEVOXTsKKwljaGFyCSAg ICpidWYgPSBzYnVmOworCWNoYXIJICAgKmExcCwKKwkJCSAgICphMnA7CisJaW50CQkJYTFsZW4g PSBsZW4xICogMiArIDI7CisJaW50CQkJYTJsZW4gPSBsZW4yICogMiArIDI7CisJaW50CQkJcjsK KwlpbnQJCQlyZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBH X1VURjgpOworI2lmbmRlZiBXSU4zMgorCUFzc2VydChmYWxzZSk7CisjZW5kaWYKKworCWlmIChh MWxlbiArIGEybGVuID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKGExbGVuICsgYTJsZW4p OworCisJYTFwID0gYnVmOworCWEycCA9IGJ1ZiArIGExbGVuOworCisJLyogQVBJIGRvZXMgbm90 IHdvcmsgZm9yIHplcm8tbGVuZ3RoIGlucHV0ICovCisJaWYgKGxlbjEgPT0gMCkKKwkJciA9IDA7 CisJZWxzZQorCXsKKwkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgYXJnMSwg bGVuMSwKKwkJCQkJCQkJKExQV1NUUikgYTFwLCBhMWxlbiAvIDIpOworCQlpZiAoIXIpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8g VVRGLTE2OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJfQor CSgoTFBXU1RSKSBhMXApW3JdID0gMDsKKworCWlmIChsZW4yID09IDApCisJCXIgPSAwOworCWVs c2UKKwl7CisJCXIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIGFyZzIsIGxlbjIs CisJCQkJCQkJCShMUFdTVFIpIGEycCwgYTJsZW4gLyAyKTsKKwkJaWYgKCFyKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVURi0x NjogZXJyb3IgY29kZSAlbHUiLAorCQkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCX0KKwkoKExQ V1NUUikgYTJwKVtyXSA9IDA7CisKKwllcnJubyA9IDA7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAor CWlmIChsb2NhbGUpCisJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIp IGEycCwgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNlCisjZW5kaWYKKwkJcmVzdWx0ID0gd2NzY29s bCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCk7CisJaWYgKHJlc3VsdCA9PSAyMTQ3NDgzNjQ3 KQkvKiBfTkxTQ01QRVJST1I7IG1pc3NpbmcgZnJvbSBtaW5ndworCQkJCQkJCQkgKiBoZWFkZXJz ICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGNvbXBhcmUgVW5p Y29kZSBzdHJpbmdzOiAlbSIpKSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisg KiBwZ19zdHJjb2xsX2xpYmMKKyAqCisgKiBDYWxsIHN0cmNvbGwoKSwgc3RyY29sbF9sKCksIHdj c2NvbGwoKSwgb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9yCisgKiB0aGUgZ2l2ZW4g bG9jYWxlLCBwbGF0Zm9ybSwgYW5kIGRhdGFiYXNlIGVuY29kaW5nLiBJZiB0aGUgbG9jYWxlIGlz IE5VTEwsCisgKiB1c2UgdGhlIGRhdGFiYXNlIGNvbGxhdGlvbi4KKyAqCisgKiBBcmd1bWVudHMg bXVzdCBiZSBlbmNvZGVkIGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBhbmQgbnVsLXRlcm1pbmF0 ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBj b25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaW50IHJlc3VsdDsKKwor CUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMp OworI2lmZGVmIFdJTjMyCisJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQor CXsKKwkJc2l6ZV90IGxlbjEgPSBzdHJsZW4oYXJnMSk7CisJCXNpemVfdCBsZW4yID0gc3RybGVu KGFyZzIpOworCQlyZXN1bHQgPSBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoYXJnMSwgbGVu MSwgYXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisJZWxzZQorI2VuZGlmCQkJCQkJCS8qIFdJTjMy ICovCisJaWYgKGxvY2FsZSkKKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlyZXN1bHQgPSBz dHJjb2xsX2woYXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmx0KTsKKyNlbHNlCisJCS8qIHNob3Vs ZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjog JWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKyNlbmRpZgorCX0KKwllbHNlCisJCXJlc3VsdCA9IHN0 cmNvbGwoYXJnMSwgYXJnMik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcGdfc3Ry bmNvbGxfbGliYworICoKKyAqIE51bGwtdGVybWluYXRlIHRoZSBhcmd1bWVudHMgYW5kIGNhbGwg cGdfc3RyY29sbF9saWJjKCkuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2xpYmMoY29u c3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4y LAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkgc2J1ZltURVhUQlVGTEVOXTsK KwljaGFyCSpidWYJICA9IHNidWY7CisJc2l6ZV90CSBidWZzaXplMSA9IGxlbjEgKyAxOworCXNp emVfdAkgYnVmc2l6ZTIgPSBsZW4yICsgMTsKKwljaGFyCSphcmcxbjsKKwljaGFyCSphcmcybjsK KwlpbnQJCSByZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKworI2lmZGVmIFdJTjMyCisJLyogY2hlY2sgZm9yIHRoaXMg Y2FzZSBiZWZvcmUgZG9pbmcgdGhlIHdvcmsgZm9yIG51bC10ZXJtaW5hdGlvbiAqLworCWlmIChH ZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwkJcmV0dXJuIHBnX3N0cm5jb2xsX2xp YmNfd2luMzJfdXRmOChhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCQkJ CQkJCS8qIFdJTjMyICovCisKKwlpZiAoYnVmc2l6ZTEgKyBidWZzaXplMiA+IFRFWFRCVUZMRU4p CisJCWJ1ZiA9IHBhbGxvYyhidWZzaXplMSArIGJ1ZnNpemUyKTsKKworCWFyZzFuID0gYnVmOwor CWFyZzJuID0gYnVmICsgYnVmc2l6ZTE7CisKKwkvKiBudWwtdGVybWluYXRlIGFyZ3VtZW50cyAq LworCW1lbWNweShhcmcxbiwgYXJnMSwgbGVuMSk7CisJYXJnMW5bbGVuMV0gPSAnXDAnOworCW1l bWNweShhcmcybiwgYXJnMiwgbGVuMik7CisJYXJnMm5bbGVuMl0gPSAnXDAnOworCisJcmVzdWx0 ID0gcGdfc3RyY29sbF9saWJjKGFyZzFuLCBhcmcybiwgbG9jYWxlKTsKKworCWlmIChidWYgIT0g c2J1ZikKKwkJcGZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHQ7Cit9CiAKICNpZmRlZiBVU0Vf SUNVCisKIC8qCi0gKiBDb252ZXJ0ZXIgb2JqZWN0IGZvciBjb252ZXJ0aW5nIGJldHdlZW4gSUNV J3MgVUNoYXIgc3RyaW5ncyBhbmQgQyBzdHJpbmdzCi0gKiBpbiBkYXRhYmFzZSBlbmNvZGluZy4g IFNpbmNlIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBkb2Vzbid0IGNoYW5nZSwgd2Ugb25seQotICog bmVlZCBvbmUgb2YgdGhlc2UgcGVyIHNlc3Npb24uCisgKiBwZ19zdHJuY29sbF9pY3Vfbm9fdXRm OAorICoKKyAqIENvbnZlcnQgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBkYXRhYmFzZSBlbmNvZGlu ZyB0byBVQ2hhciBzdHJpbmdzLCB0aGVuCisgKiBjYWxsIHVjb2xfc3RyY29sbCgpLgorICoKKyAq IFdoZW4gdGhlIGRhdGFiYXNlIGVuY29kaW5nIGlzIFVURi04LCBhbmQgSUNVIHN1cHBvcnRzIHVj b2xfc3RyY29sbFVURjgoKSwKKyAqIGNhbGxlciBzaG91bGQgY2FsbCB0aGF0IGluc3RlYWQuCiAg Ki8KLXN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKK3N0YXRpYyBpbnQK K3BnX3N0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLAor CQkJCQkJY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSkK K3sKKwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1ZiA9IHNidWY7CisJaW50MzJf dAkgdWxlbjE7CisJaW50MzJfdAkgdWxlbjI7CisJc2l6ZV90ICAgYnVmc2l6ZTE7CisJc2l6ZV90 ICAgYnVmc2l6ZTI7CisJVUNoYXIJKnVjaGFyMSwKKwkJCSp1Y2hhcjI7CisJaW50CQkgcmVzdWx0 OworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisjaWZk ZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAh PSBQR19VVEY4KTsKKyNlbmRpZgorCisJaW5pdF9pY3VfY29udmVydGVyKCk7CisKKwl1bGVuMSA9 IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcxLCBsZW4xKTsKKwl1bGVuMiA9IHVjaGFy X2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcyLCBsZW4yKTsKKworCWJ1ZnNpemUxID0gKHVsZW4x ICsgMSkgKiBzaXplb2YoVUNoYXIpOworCWJ1ZnNpemUyID0gKHVsZW4yICsgMSkgKiBzaXplb2Yo VUNoYXIpOworCisJaWYgKGJ1ZnNpemUxICsgYnVmc2l6ZTIgPiBURVhUQlVGTEVOKQorCQlidWYg PSBwYWxsb2MoYnVmc2l6ZTEgKyBidWZzaXplMik7CisKKwl1Y2hhcjEgPSAoVUNoYXIgKikgYnVm OworCXVjaGFyMiA9IChVQ2hhciAqKSAoYnVmICsgYnVmc2l6ZTEpOwogCisJdWxlbjEgPSB1Y2hh cl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwgdWxlbjEgKyAxLCBhcmcxLCBsZW4xKTsK Kwl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIyLCB1bGVuMiArIDEs IGFyZzIsIGxlbjIpOworCisJcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3Uu dWNvbCwKKwkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKKwkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisK KwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogcGdfc3RybmNvbGxfaWN1CisgKgorICogQ2FsbCB1Y29sX3N0cmNvbGxVVEY4KCkg b3IgdWNvbF9zdHJjb2xsKCkgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbgorICogZGF0YWJh c2UgZW5jb2RpbmcuCisgKgorICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0 YWJhc2UgZW5jb2RpbmcuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2ljdShjb25zdCBj aGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJ CQkJcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWludCByZXN1bHQ7CisKKwlBc3NlcnQobG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAorCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwl7CisJCVVF cnJvckNvZGUJc3RhdHVzOworCisJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJcmVzdWx0ID0g dWNvbF9zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCSAgYXJnMSwg bGVuMSwKKwkJCQkJCQkJICBhcmcyLCBsZW4yLAorCQkJCQkJCQkgICZzdGF0dXMpOworCQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb2xs YXRpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJfQorCWVsc2UKKyNl bmRpZgorCXsKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfaWN1X25vX3V0ZjgoYXJnMSwgbGVuMSwg YXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog cGdfc3RyY29sbF9pY3UKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHN0cmluZyBsZW5ndGhzIGFuZCBj YWxsIHBnX3N0cm5jb2xsX2ljdSgpLgorICovCitzdGF0aWMgaW50CitwZ19zdHJjb2xsX2ljdShj b25zdCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJcmV0dXJu IHBnX3N0cm5jb2xsX2ljdShhcmcxLCAtMSwgYXJnMiwgLTEsIGxvY2FsZSk7Cit9CisKKyNlbmRp ZgkJCQkJCQkvKiBVU0VfSUNVICovCisKKy8qCisgKiBwZ19zdHJjb2xsCisgKgorICogQ2FsbCB1 Y29sX3N0cmNvbGxVVEY4KCksIHVjb2xfc3RyY29sbCgpLCBzdHJjb2xsKCksIHN0cmNvbGxfbCgp LCB3Y3Njb2xsKCksCisgKiBvciB3Y3Njb2xsX2woKSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGdp dmVuIGxvY2FsZSwgcGxhdGZvcm0sIGFuZCBkYXRhYmFzZQorICogZW5jb2RpbmcuIElmIHRoZSBs b2NhbGUgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBkYXRhYmFzZSBjb2xsYXRpb24uCisgKgor ICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgYW5k IG51bC10ZXJtaW5hdGVkLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3Rp YywgYnJlYWsgdGllcyB3aXRoIHN0cmNtcCgpLgorICovCitpbnQKK3BnX3N0cmNvbGwoY29uc3Qg Y2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlu dAkJCXJlc3VsdDsKKworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0xJQkMpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfbGliYyhhcmcxLCBhcmcyLCBsb2Nh bGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQ Uk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfaWN1KGFyZzEsIGFyZzIsIGxvY2Fs ZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJP UiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKwor CS8qIEJyZWFrIHRpZSBpZiBuZWNlc3NhcnkuICovCisJaWYgKHJlc3VsdCA9PSAwICYmICghbG9j YWxlIHx8IGxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykpCisJCXJlc3VsdCA9IHN0cmNtcChhcmcxLCBh cmcyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJuY29sbAorICoKKyAq IENhbGwgdWNvbF9zdHJjb2xsVVRGOCgpLCB1Y29sX3N0cmNvbGwoKSwgc3RyY29sbCgpLCBzdHJj b2xsX2woKSwgd2NzY29sbCgpLAorICogb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9y IHRoZSBnaXZlbiBsb2NhbGUsIHBsYXRmb3JtLCBhbmQgZGF0YWJhc2UKKyAqIGVuY29kaW5nLiBJ ZiB0aGUgbG9jYWxlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgZGF0YWJhc2UgY29sbGF0aW9u LgorICoKKyAqIEFyZ3VtZW50cyBtdXN0IGJlIGVuY29kZWQgaW4gdGhlIGRhdGFiYXNlIGVuY29k aW5nLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3RpYywgYnJlYWsgdGll cyB3aXRoIG1lbWNtcCgpLCBhbmQgdGhlbiB3aXRoCisgKiB0aGUgc3RyaW5nIGxlbmd0aC4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5hdGUgdGhlIGFyZ3VtZW50 cyBmb3IgbGliYyBmdW5jdGlvbnM7CisgKiBzbyBpZiB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIG51 bC10ZXJtaW5hdGVkIHN0cmluZ3MsIGl0IHNob3VsZCBjYWxsCisgKiBwZ19zdHJjb2xsKCkgaW5z dGVhZC4KKyAqLworaW50CitwZ19zdHJuY29sbChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVu MSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJCQlwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJaW50CQkgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfbGliYyhhcmcxLCBs ZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2Nh bGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cm5jb2xs X2ljdShhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCisJZWxzZQorCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJv dmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CisKKwkvKiBCcmVhayB0aWUgaWYgbmVjZXNz YXJ5LiAqLworCWlmIChyZXN1bHQgPT0gMCAmJiAoIWxvY2FsZSB8fCBsb2NhbGUtPmRldGVybWlu aXN0aWMpKQorCXsKKwkJcmVzdWx0ID0gbWVtY21wKGFyZzEsIGFyZzIsIE1pbihsZW4xLCBsZW4y KSk7CisJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQorCQkJcmVzdWx0ID0g KGxlbjEgPCBsZW4yKSA/IC0xIDogMTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKyNp ZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiB7CkBA IC0xNzY3LDYgKzIxMjcsMzkgQEAgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiAJaWN1X2NvbnZl cnRlciA9IGNvbnY7CiB9CiAKKy8qCisgKiBGaW5kIGxlbmd0aCwgaW4gVUNoYXJzLCBvZiBnaXZl biBzdHJpbmcgaWYgY29udmVydGVkIHRvIFVDaGFyIHN0cmluZy4KKyAqLworc3RhdGljIHNpemVf dAordWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBz aXplX3QgbGVuKQoreworCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCWludDMy X3QJCXVsZW47CisJdWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBOVUxMLCAwLCBzdHIs IGxlbiwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JV RkZFUl9PVkVSRkxPV19FUlJPUikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCIlcyBm YWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCXJl dHVybiB1bGVuOworfQorCisvKgorICogQ29udmVydCB0aGUgZ2l2ZW4gc291cmNlIHN0cmluZyBp bnRvIGEgVUNoYXIgc3RyaW5nLCBzdG9yZWQgaW4gZGVzdCwgYW5kCisgKiByZXR1cm4gdGhlIGxl bmd0aCAoaW4gVUNoYXJzKS4KKyAqLworc3RhdGljIGludDMyX3QKK3VjaGFyX2NvbnZlcnQoVUNv bnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAorCQkJICBj b25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJVUVycm9yQ29kZQlzdGF0dXMgPSBV X1pFUk9fRVJST1I7CisJaW50MzJfdAkJdWxlbjsKKwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJ dWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBzcmMsIHNyY2xl biwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVfZXJyb3JOYW1l KHN0YXR1cykpKSk7CisJcmV0dXJuIHVsZW47Cit9CisKIC8qCiAgKiBDb252ZXJ0IGEgc3RyaW5n IGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBpbnRvIGEgc3RyaW5nIG9mIFVDaGFycy4KICAqCkBA IC0xNzgyLDI2ICsyMTc1LDE1IEBAIGluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQogaW50MzJfdAog aWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90 IG5ieXRlcykKIHsKLQlVRXJyb3JDb2RlCXN0YXR1czsKLQlpbnQzMl90CQlsZW5fdWNoYXI7CisJ aW50MzJfdCBsZW5fdWNoYXI7CiAKIAlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKIAotCXN0YXR1cyA9 IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIs IE5VTEwsIDAsCi0JCQkJCQkJICBidWZmLCBuYnl0ZXMsICZzdGF0dXMpOwotCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwg dV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5fdWNoYXIgPSB1Y2hhcl9sZW5ndGgoaWN1X2Nv bnZlcnRlciwgYnVmZiwgbmJ5dGVzKTsKIAogCSpidWZmX3VjaGFyID0gcGFsbG9jKChsZW5fdWNo YXIgKyAxKSAqIHNpemVvZigqKmJ1ZmZfdWNoYXIpKTsKLQotCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIsICpidWZmX3VjaGFy LCBsZW5fdWNoYXIgKyAxLAotCQkJCQkJCSAgYnVmZiwgbmJ5dGVzLCAmc3RhdHVzKTsKLQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFp bGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5f dWNoYXIgPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsCisJCQkJCQkJICAqYnVmZl91Y2hh ciwgbGVuX3VjaGFyICsgMSwgYnVmZiwgbmJ5dGVzKTsKIAogCXJldHVybiBsZW5fdWNoYXI7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCAxYzUyZGVlYzU1Li41MmRkMGJiYmE4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTE1MzcsMTAgKzE1MzcsNiBAQCB2YXJzdHJfY21wKGNv bnN0IGNoYXIgKmFyZzEsIGludCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBpbnQgbGVuMiwgT2lk IGNvbGxpZCkKIAl9CiAJZWxzZQogCXsKLQkJY2hhcgkJYTFidWZbVEVYVEJVRkxFTl07Ci0JCWNo YXIJCWEyYnVmW1RFWFRCVUZMRU5dOwotCQljaGFyCSAgICphMXAsCi0JCQkJICAgKmEycDsKIAkJ cGdfbG9jYWxlX3QgbXlsb2NhbGU7CiAKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9j b2xsYXRpb24oY29sbGlkKTsKQEAgLTE1NTcsMTcxICsxNTUzLDcgQEAgdmFyc3RyX2NtcChjb25z dCBjaGFyICphcmcxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgaW50IGxlbjIsIE9pZCBj b2xsaWQpCiAJCWlmIChsZW4xID09IGxlbjIgJiYgbWVtY21wKGFyZzEsIGFyZzIsIGxlbjEpID09 IDApCiAJCQlyZXR1cm4gMDsKIAotI2lmZGVmIFdJTjMyCi0JCS8qIFdpbjMyIGRvZXMgbm90IGhh dmUgVVRGLTgsIHNvIHdlIG5lZWQgdG8gbWFwIHRvIFVURi0xNiAqLwotCQlpZiAoR2V0RGF0YWJh c2VFbmNvZGluZygpID09IFBHX1VURjgKLQkJCSYmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKSkKLQkJewotCQkJaW50CQkJYTFsZW47Ci0JCQlp bnQJCQlhMmxlbjsKLQkJCWludAkJCXI7Ci0KLQkJCWlmIChsZW4xID49IFRFWFRCVUZMRU4gLyAy KQotCQkJewotCQkJCWExbGVuID0gbGVuMSAqIDIgKyAyOwotCQkJCWExcCA9IHBhbGxvYyhhMWxl bik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJYTFsZW4gPSBURVhUQlVGTEVOOwotCQkJCWEx cCA9IGExYnVmOwotCQkJfQotCQkJaWYgKGxlbjIgPj0gVEVYVEJVRkxFTiAvIDIpCi0JCQl7Ci0J CQkJYTJsZW4gPSBsZW4yICogMiArIDI7Ci0JCQkJYTJwID0gcGFsbG9jKGEybGVuKTsKLQkJCX0K LQkJCWVsc2UKLQkJCXsKLQkJCQlhMmxlbiA9IFRFWFRCVUZMRU47Ci0JCQkJYTJwID0gYTJidWY7 Ci0JCQl9Ci0KLQkJCS8qIHN0dXBpZCBNaWNyb3Nsb3RoIEFQSSBkb2VzIG5vdCB3b3JrIGZvciB6 ZXJvLWxlbmd0aCBpbnB1dCAqLwotCQkJaWYgKGxlbjEgPT0gMCkKLQkJCQlyID0gMDsKLQkJCWVs c2UKLQkJCXsKLQkJCQlyID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBhcmcxLCBs ZW4xLAotCQkJCQkJCQkJCShMUFdTVFIpIGExcCwgYTFsZW4gLyAyKTsKLQkJCQlpZiAoIXIpCi0J CQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3Ry aW5nIHRvIFVURi0xNjogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJR2V0TGFzdEVycm9yKCkp KSk7Ci0JCQl9Ci0JCQkoKExQV1NUUikgYTFwKVtyXSA9IDA7Ci0KLQkJCWlmIChsZW4yID09IDAp Ci0JCQkJciA9IDA7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIo Q1BfVVRGOCwgMCwgYXJnMiwgbGVuMiwKLQkJCQkJCQkJCQkoTFBXU1RSKSBhMnAsIGEybGVuIC8g Mik7Ci0JCQkJaWYgKCFyKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJtc2coImNv dWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBVVEYtMTY6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJCUdldExhc3RFcnJvcigpKSkpOwotCQkJfQotCQkJKChMUFdTVFIpIGEycClbcl0gPSAwOwot Ci0JCQllcnJubyA9IDA7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQkJaWYgKG15bG9jYWxlKQot CQkJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbXlsb2Nh bGUtPmluZm8ubHQpOwotCQkJZWxzZQotI2VuZGlmCi0JCQkJcmVzdWx0ID0gd2NzY29sbCgoTFBX U1RSKSBhMXAsIChMUFdTVFIpIGEycCk7Ci0JCQlpZiAocmVzdWx0ID09IDIxNDc0ODM2NDcpCS8q IF9OTFNDTVBFUlJPUjsgbWlzc2luZyBmcm9tIG1pbmd3Ci0JCQkJCQkJCQkJICogaGVhZGVycyAq LwotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29tcGFyZSBV bmljb2RlIHN0cmluZ3M6ICVtIikpKTsKLQotCQkJLyogQnJlYWsgdGllIGlmIG5lY2Vzc2FyeS4g Ki8KLQkJCWlmIChyZXN1bHQgPT0gMCAmJgotCQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRl dGVybWluaXN0aWMpKQotCQkJewotCQkJCXJlc3VsdCA9IG1lbWNtcChhcmcxLCBhcmcyLCBNaW4o bGVuMSwgbGVuMikpOwotCQkJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQot CQkJCQlyZXN1bHQgPSAobGVuMSA8IGxlbjIpID8gLTEgOiAxOwotCQkJfQotCi0JCQlpZiAoYTFw ICE9IGExYnVmKQotCQkJCXBmcmVlKGExcCk7Ci0JCQlpZiAoYTJwICE9IGEyYnVmKQotCQkJCXBm cmVlKGEycCk7Ci0KLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLSNlbmRpZgkJCQkJCQkvKiBXSU4z MiAqLwotCi0JCWlmIChsZW4xID49IFRFWFRCVUZMRU4pCi0JCQlhMXAgPSAoY2hhciAqKSBwYWxs b2MobGVuMSArIDEpOwotCQllbHNlCi0JCQlhMXAgPSBhMWJ1ZjsKLQkJaWYgKGxlbjIgPj0gVEVY VEJVRkxFTikKLQkJCWEycCA9IChjaGFyICopIHBhbGxvYyhsZW4yICsgMSk7Ci0JCWVsc2UKLQkJ CWEycCA9IGEyYnVmOwotCi0JCW1lbWNweShhMXAsIGFyZzEsIGxlbjEpOwotCQlhMXBbbGVuMV0g PSAnXDAnOwotCQltZW1jcHkoYTJwLCBhcmcyLCBsZW4yKTsKLQkJYTJwW2xlbjJdID0gJ1wwJzsK LQotCQlpZiAobXlsb2NhbGUpCi0JCXsKLQkJCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKLQkJCXsKLSNpZmRlZiBVU0VfSUNVCi0jaWZkZWYgSEFWRV9VQ09MX1NU UkNPTExVVEY4Ci0JCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJ CXsKLQkJCQkJVUVycm9yQ29kZQlzdGF0dXM7Ci0KLQkJCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9S OwotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxVVEY4KG15bG9jYWxlLT5pbmZvLmljdS51Y29s LAotCQkJCQkJCQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCQkJCSAgYXJnMiwgbGVuMiwKLQkJ CQkJCQkJCQkJICAmc3RhdHVzKTsKLQkJCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1 X2Vycm9yTmFtZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0jZW5kaWYKLQkJCQl7Ci0J CQkJCWludDMyX3QJCXVsZW4xLAotCQkJCQkJCQl1bGVuMjsKLQkJCQkJVUNoYXIJICAgKnVjaGFy MSwKLQkJCQkJCQkgICAqdWNoYXIyOwotCi0JCQkJCXVsZW4xID0gaWN1X3RvX3VjaGFyKCZ1Y2hh cjEsIGFyZzEsIGxlbjEpOwotCQkJCQl1bGVuMiA9IGljdV90b191Y2hhcigmdWNoYXIyLCBhcmcy LCBsZW4yKTsKLQotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGwobXlsb2NhbGUtPmluZm8uaWN1 LnVjb2wsCi0JCQkJCQkJCQkJICB1Y2hhcjEsIHVsZW4xLAotCQkJCQkJCQkJCSAgdWNoYXIyLCB1 bGVuMik7Ci0KLQkJCQkJcGZyZWUodWNoYXIxKTsKLQkJCQkJcGZyZWUodWNoYXIyKTsKLQkJCQl9 Ci0jZWxzZQkJCQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQkJCS8qIHNob3VsZG4ndCBoYXBwZW4g Ki8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIG15bG9j YWxlLT5wcm92aWRlcik7Ci0jZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLSNpZmRlZiBIQVZFX0xPQ0FMRV9UCi0JCQkJcmVzdWx0ID0gc3RyY29sbF9s KGExcCwgYTJwLCBteWxvY2FsZS0+aW5mby5sdCk7Ci0jZWxzZQotCQkJCS8qIHNob3VsZG4ndCBo YXBwZW4gKi8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIs IG15bG9jYWxlLT5wcm92aWRlcik7Ci0jZW5kaWYKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlyZXN1 bHQgPSBzdHJjb2xsKGExcCwgYTJwKTsKLQotCQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAq LwotCQlpZiAocmVzdWx0ID09IDAgJiYKLQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVy bWluaXN0aWMpKQotCQkJcmVzdWx0ID0gc3RyY21wKGExcCwgYTJwKTsKLQotCQlpZiAoYTFwICE9 IGExYnVmKQotCQkJcGZyZWUoYTFwKTsKLQkJaWYgKGEycCAhPSBhMmJ1ZikKLQkJCXBmcmVlKGEy cCk7CisJCXJlc3VsdCA9IHBnX3N0cm5jb2xsKGFyZzEsIGxlbjEsIGFyZzIsIGxlbjIsIG15bG9j YWxlKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjM3OSw2NSArMjIxMSw3IEBAIHZhcnN0 cmZhc3RjbXBfbG9jYWxlKGNoYXIgKmExcCwgaW50IGxlbjEsIGNoYXIgKmEycCwgaW50IGxlbjIs IFNvcnRTdXBwb3J0IHNzdXApCiAJCXJldHVybiBzc3MtPmxhc3RfcmV0dXJuZWQ7CiAJfQogCi0J aWYgKHNzcy0+bG9jYWxlKQotCXsKLQkJaWYgKHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xM UFJPVklERVJfSUNVKQotCQl7Ci0jaWZkZWYgVVNFX0lDVQotI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAotCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJewot CQkJCVVFcnJvckNvZGUJc3RhdHVzOwotCi0JCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQkJ CXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0J CQkJCQkJCQkJICBhMXAsIGxlbjEsCi0JCQkJCQkJCQkJICBhMnAsIGxlbjIsCi0JCQkJCQkJCQkJ ICAmc3RhdHVzKTsKLQkJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShz dGF0dXMpKSkpOwotCQkJfQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJaW50MzJfdAkJdWxl bjEsCi0JCQkJCQkJdWxlbjI7Ci0JCQkJVUNoYXIJICAgKnVjaGFyMSwKLQkJCQkJCSAgICp1Y2hh cjI7Ci0KLQkJCQl1bGVuMSA9IGljdV90b191Y2hhcigmdWNoYXIxLCBhMXAsIGxlbjEpOwotCQkJ CXVsZW4yID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjIsIGEycCwgbGVuMik7Ci0KLQkJCQlyZXN1bHQg PSB1Y29sX3N0cmNvbGwoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkgIHVj aGFyMSwgdWxlbjEsCi0JCQkJCQkJCQkgIHVjaGFyMiwgdWxlbjIpOwotCi0JCQkJcGZyZWUodWNo YXIxKTsKLQkJCQlwZnJlZSh1Y2hhcjIpOwotCQkJfQotI2Vsc2UJCQkJCQkJLyogbm90IFVTRV9J Q1UgKi8KLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnByb3ZpZGVyKTsKLSNlbmRpZgkJ CQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQl9Ci0JCWVsc2UKLQkJewotI2lmZGVmIEhBVkVfTE9D QUxFX1QKLQkJCXJlc3VsdCA9IHN0cmNvbGxfbChzc3MtPmJ1ZjEsIHNzcy0+YnVmMiwgc3NzLT5s b2NhbGUtPmluZm8ubHQpOwotI2Vsc2UKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnBy b3ZpZGVyKTsKLSNlbmRpZgotCQl9Ci0JfQotCWVsc2UKLQkJcmVzdWx0ID0gc3RyY29sbChzc3Mt PmJ1ZjEsIHNzcy0+YnVmMik7Ci0KLQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAqLwotCWlm IChyZXN1bHQgPT0gMCAmJgotCQkoIXNzcy0+bG9jYWxlIHx8IHNzcy0+bG9jYWxlLT5kZXRlcm1p bmlzdGljKSkKLQkJcmVzdWx0ID0gc3RyY21wKHNzcy0+YnVmMSwgc3NzLT5idWYyKTsKKwlyZXN1 bHQgPSBwZ19zdHJjb2xsKHNzcy0+YnVmMSwgc3NzLT5idWYyLCBzc3MtPmxvY2FsZSk7CiAKIAkv KiBDYWNoZSByZXN1bHQsIHBlcmhhcHMgc2F2aW5nIGFuIGV4cGVuc2l2ZSBzdHJjb2xsKCkgY2Fs bCBuZXh0IHRpbWUgKi8KIAlzc3MtPmNhY2hlX2Jsb2IgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxl LmgKaW5kZXggYTg3NTk0MjEyMy4uYmY3MGFlMDhjYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAg LTEwMCw2ICsxMDAsOSBAQCBleHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFy ICppY3Vsb2NzdHIsCiBleHRlcm4gcGdfbG9jYWxlX3QgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0 aW9uKE9pZCBjb2xsaWQpOwogCiBleHRlcm4gY2hhciAqZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVy c2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpOworZXh0ZXJu IGludCBwZ19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBnX2xv Y2FsZV90IGxvY2FsZSk7CitleHRlcm4gaW50IHBnX3N0cm5jb2xsKGNvbnN0IGNoYXIgKmFyZzEs IHNpemVfdCBsZW4xLAorCQkJCQkgICBjb25zdCBjaGFyICphcmcyLCBzaXplX3QgbGVuMiwgcGdf bG9jYWxlX3QgbG9jYWxlKTsKIAogI2lmZGVmIFVTRV9JQ1UKIGV4dGVybiBpbnQzMl90IGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpOwotLSAKMi4zNC4xCgo= --=-o0L0KMVWxKiRsRMoifVA--