Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u9GEk-00HQ42-UT for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Apr 2025 04:36:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u9GEg-00BreT-TG for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Apr 2025 04:36:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u9GEg-00BreK-7N for pgsql-hackers@lists.postgresql.org; Mon, 28 Apr 2025 04:36:55 +0000 Received: from mail-ua1-x935.google.com ([2607:f8b0:4864:20::935]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u9GEd-002JX6-1S for pgsql-hackers@lists.postgresql.org; Mon, 28 Apr 2025 04:36:54 +0000 Received: by mail-ua1-x935.google.com with SMTP id a1e0cc1a2514c-86d5e3ddb66so1729503241.2 for ; Sun, 27 Apr 2025 21:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745815010; x=1746419810; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=SPq9DHdufWWD7gkNZW9j29XhsAe2OuqJjNIN/U13Zdg=; b=Ver2df2Ham85x+7mBN7cv+gLmACGzSgXpQ8WVpvSKgx6nn5uknGcUS19xGmXsiFlzK kTajc/RaUMYkiRUPRjyEFNm1/Qq6HShBStBu2rhm++6JEWuo4N1txzjASWJ+4hjL3VuS PXXVQABpk/KyZvX6T46rZIgiaRMp0JgQ47O05INSNyq/LkwA6uioBD1zPLb63DnE3YVm o+ucubCfCV9cjffAEfJROFSGcM43nYBcwZrYM4ppbytUxsxH8JiuydZ3RPd16ej/5VpT 9sER9Kubsv+XTxwwVOvjq0NHVQkhjKpUf+110mGm4YTneCImuTsqKFrvATYa3qWH4r6D N76g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745815010; x=1746419810; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SPq9DHdufWWD7gkNZW9j29XhsAe2OuqJjNIN/U13Zdg=; b=bq3YIz4G2ZBkvYiYJv0UXQxfp9viAX23UnLXhVrfdEcdBdQjoSXAdpE+MRZnJkamwv +RL24WRY2M7NEv4EAKWl9EYcHosdsYxl2n0DkilC6NnjUkc1Sj9t18kDEdtOJlhckeWF wpjBTM02IryJ9B+X5lCMhRX+Lrnu5kE6h2VP1DlXoftlg6cghOd2aXHrIocvdbw0sjZ8 da1yo1dNJCXasR7yn+a22DqF5Y5xn6AB1qLpXcX9lNpgQovmcURPPkpSR+XspzGkyDg5 VL13XgxTTYAI9j3MssNb07OuePD/UvuSCimDxx83DzLofwYR2pnzuDOWwICeI1hIG6I0 eGyg== X-Gm-Message-State: AOJu0YwPMd/1HfBEqsDjYTXxk05u+e2Zdsp8flPo6ZELWsm5vcN6Gvp7 abfwergCBEHTTJJ6VLId3LlliMSxqu79Ij30+wxhKCLRPOn9QK6DDeY0NZUqCgQ0l2qKjLqn3WP lwckQdYUw0Scx9lqMn6rr3gkK4+YKkjh59UVtBN/v X-Gm-Gg: ASbGncsT8d3DHenJaP6KwZS5v6fAl83kjN1xtykdIipULmy3po5fBzznyv2Xi5oAoJY tDvu3Fwc8sLbK9AH4dk0V8UyQG0t9U9YpSugH+2s+4V8G6E0L+y/3DqyMzujleZmrTdn2LfFFAt uD2ApT1ATWWFBAmuXzEOxgsVcAQZX2h3iG2RzApA5rHcrJhQUrzg== X-Google-Smtp-Source: AGHT+IF/W1jdJmsqZT5nvuC9Ok+xm3vc7aWwywHJfWgmIr1mZprUWBoy/8nycNMFfTf2uQp9BiqQotP2CkUUzKuBCBY= X-Received: by 2002:a05:6102:15aa:b0:4c3:6393:843f with SMTP id ada2fe7eead31-4d5432e896fmr6371971137.5.1745815010190; Sun, 27 Apr 2025 21:36:50 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Mon, 28 Apr 2025 12:36:14 +0800 X-Gm-Features: ATxdqUHpnDwpM98eKHikRzlLySZKRnKHSGJQ4qiSRc5kkMSv0qI7TFmcfMX1bq8 Message-ID: Subject: Re: using index to speedup add not null constraints to a table To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000086c2ec0633cf3bcc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000086c2ec0633cf3bcc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 18, 2025 at 4:07=E2=80=AFPM jian he wrote: > > I don't have any good ideas to do the regress tests. > I use > ereport(NOTICE, > errmsg("all not-null constraints on relation > \"%s\" are validated by index scan", > RelationGetRelationName(oldrel))); > to do the tests. > for tests, just found out i can imitate src/test/modules/test_misc/t/001_constraint_validation.pl, So I created a file: src/test/modules/test_misc/t/008_indexscan_validate_notnull.pl for TAP tests. --00000000000086c2ec0633cf3bcc Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Disposition: attachment; filename="v5-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ma0l4j430 RnJvbSA4MDcyZWY5NTc4ZWFmZTZmYWNmMjk5OTZkMDhlMTI5ZDYwYTg0MTllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjggQXByIDIwMjUgMTI6Mjc6MTMgKzA4MDAKU3ViamVjdDogW1BBVENIIHY1 IDEvMV0gdXNpbmcgaW5kZXhzY2FuIHRvIHNwZWVkdXAgYWRkIG5vdCBudWxsIGNvbnN0cmFpbnRz CgpUaGlzIHBhdGNoIHRyaWVzIHRvIHVzZSBpbmRleF9iZWdpbnNjYW4oKSAvIGluZGV4X2dldG5l eHQoKSAvIGluZGV4X2VuZHNjYW4oKQptZW50aW9uZWQgaW4gWzFdIHRvIHNwZWVkdXAgYWRkaW5n IG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIHRoZSBleGlzdGluZyB0YWJsZS4KCnRoZSBtYWluIGxv Z2ljIGhhcHBlbiBpbiBwaGFzZTMgQVRSZXdyaXRlVGFibGUKMS4gY29sbGVjdCBhbGwgbm90LW51 bGwgY29uc3RyYWludHMuCjIuIGRvZXMgZWFjaCBub3QtbnVsbCBjb25zdHJhaW50IGhhdmUgYSBj b3JyZXNwb25kaW5nIGluZGV4IHRvIHZlcnRpZnkgaXQsIGlmCiAgIG5vdCB0aGVuIGRvIHRoZSBu b3JtYWwgcHJvY2Vzc2luZy4KMy4gaWYgdGFibGUgc2NhbiwgdGFibGUgcmV3cml0ZSwgdGFibGUg d2FzIG5vdCBpbiBBY2Nlc3NFeGNsdXNpdmVMb2NrLgogICBub3QtbnVsbCBjb25zdHJhaW50IHdh cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4KICAgdGhlbiB3ZSBjYW4gbm90IHVzZSBpbmRl eGNhbiB0byBmYXN0IGNoZWNrIG5vdC1udWxsIGNvbnN0cmFpbnQuCjMuIElmIGEgdGFibGUgc2Nh biBvciByZXdyaXRlIG9jY3VycyBhbmQgdGhlIHRhYmxlIGlzIG5vdCBoZWxkIHdpdGggYW4KICAg QWNjZXNzRXhjbHVzaXZlTG9jaywgYW5kIHRoZSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIG9uIGEg dmlydHVhbCBnZW5lcmF0ZWQKICAgY29sdW1uLCB0aGVuIHdlIGNhbiBub3QgdXNlIGluZGV4c2Nh biB0byBmYXN0IHZhbGlkYXRlIG5vdC1udWxsIGNvbnN0cmFpbnRzLgoKY29uY3VycmVuY3kgY29u Y2VybjoKQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIHdpbGwgdGFrZSBhbiBBQ0NFU1MgRVhDTFVT SVZFIGxvY2ssIHNvIHRoZXJlIGlzIGxlc3MKdmFyaWFudCBvZiByYWNpbmcgaXNzdWUgY2FuIG9j Y3VyPyAgdG8gcHJvdmUgYWNjdXJhdGUsIEkgd3JvdGUgc29tZSBpc29sYXRpb24KdGVzdHMuIHNl ZVsyXQoKcGVyZm9ybWFuY2U6CmRlbW86CmNhc2Ugd2hlbjogJTIwIHBlcmNlbnQgdmFsdWVzIGFy ZSBOVUxMIGFuZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIGhlYXAgYnV0IHRoZXkKc3RpbGwgb24g dGhlIGluZGV4LgoKZHJvcCB0YWJsZSBpZiBleGlzdHMgdDsKY3JlYXRlIHVubG9nZ2VkIHRhYmxl IHQoYSBpbnQsIGIgaW50KSB3aXRoIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIHZhY3V1bV9p bmRleF9jbGVhbnVwPW9mZik7Cmluc2VydCBpbnRvIHQgc2VsZWN0IGNhc2Ugd2hlbiBnICUgNSA9 IDAgdGhlbiBudWxsIGVsc2UgZyBlbmQsIGcrMQpmcm9tIGdlbmVyYXRlX3NlcmllcygxLDFfMDAw XzAwMCkgZzsKY3JlYXRlIGluZGV4IHRfaWR4X2Egb24gdChhKTsKZGVsZXRlIGZyb20gdCB3aGVy ZSBhIGlzIG51bGw7CgphbHRlciB0YWJsZSB0IGFsdGVyIGNvbHVtbiBhIGRyb3Agbm90IG51bGw7 CmFsdGVyIHRhYmxlIHQgYWRkIGNvbnN0cmFpbnQgdDEgbm90IG51bGwgYTsKCnRoZSBhYm92ZSB0 d28gc3RhdGVtZW50IHJ1bm5pbmcgc2VydmFsIHRpbWVzOgpwYXRjaCBUaW1lOjogMS4wODQgIG1z Cm1hc3RlciBUaW1lOiAxMi4wNDUgbXMKCnJlZmVyZW5jZXM6ClsxXSBodHRwczovL3Bvc3Rnci5l cy9tL0NBJTJCVGdtb2E1Tkt6OGlHV185djd3eiUzRC0lMkJ6UUZ1JTNERTRTWm9hVGFVMXpuTGFF WFJZcC1RJTQwbWFpbC5nbWFpbC5jb20KWzJdIGh0dHBzOi8vcG9zdGdyLmVzL20vOTAwMDU2RDEt MzJERi00OTI3LTgyNTEtM0UwQzBEQzQwN0ZEJTQwYW5hcmF6ZWwuZGUKZGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUNKdWZ4RmlXPTRrMWlzPUYxSj1yLUN4MVJ1QnlYUVBVcldCMzMx VTQ3clNuR3oraHdAbWFpbC5nbWFpbC5jb20KY29tbWl0ZmVzdCBlbnRyeTogaHR0cHM6Ly9jb21t aXRmZXN0LnBvc3RncmVzcWwub3JnL3BhdGNoLzU0NDQKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAxMTMgKysrKysrKysrLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwgMTk1ICsrKysrKysrKysrKysrKysr Kwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAgICAgIHwgICAyICsK IC4uLi9leHBlY3RlZC9pbmRleHNjYW4tY2hlY2stbm90bnVsbC5vdXQgICAgICB8IDEwMiArKysr KysrKysKIHNyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAgICB8ICAg MSArCiAuLi4vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYyAgICAgICAgfCAgNDUg KysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICAx ICsKIC4uLi90LzAwOF9pbmRleHNjYW5fdmFsaWRhdGVfbm90bnVsbC5wbCAgICAgICB8IDEzOCAr KysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDU5MSBpbnNlcnRpb25zKCspLCA2IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9p bmRleHNjYW4tY2hlY2stbm90bnVsbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9p c29sYXRpb24vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDA4X2luZGV4c2Nhbl92YWxpZGF0 ZV9ub3RudWxsLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAyNzA1Y2YxMTMzMC4u YTc4NGRiZmJlYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yMDksMTYgKzIwOSwx OSBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlcmVkVGFibGVJbmZvCiAJTGlzdAkgICAqY2hhbmdlZFN0 YXRpc3RpY3NEZWZzOwkvKiBzdHJpbmcgZGVmaW5pdGlvbnMgb2Ygc2FtZSAqLwogfSBBbHRlcmVk VGFibGVJbmZvOwogCi0vKiBTdHJ1Y3QgZGVzY3JpYmluZyBvbmUgbmV3IGNvbnN0cmFpbnQgdG8g Y2hlY2sgaW4gUGhhc2UgMyBzY2FuICovCi0vKiBOb3RlOiBuZXcgbm90LW51bGwgY29uc3RyYWlu dHMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlICovCisvKgorICogU3RydWN0IGRlc2NyaWJpbmcgb25l IG5ldyBjb25zdHJhaW50IHRvIGNoZWNrIGluIFBoYXNlIDMgc2Nhbi4gTm90ZTogbmV3CisgKiBu b3QtbnVsbCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBoZXJlIHRvby4KKyovCiB0eXBlZGVmIHN0 cnVjdCBOZXdDb25zdHJhaW50CiB7CiAJY2hhcgkgICAqbmFtZTsJCQkvKiBDb25zdHJhaW50IG5h bWUsIG9yIE5VTEwgaWYgbm9uZSAqLwotCUNvbnN0clR5cGUJY29udHlwZTsJCS8qIENIRUNLIG9y IEZPUkVJR04gKi8KKwlDb25zdHJUeXBlCWNvbnR5cGU7CQkvKiBDSEVDSyBvciBGT1JFSUdOIG9y IE5PVC1OVUxMICovCiAJT2lkCQkJcmVmcmVsaWQ7CQkvKiBQSyByZWwsIGlmIEZPUkVJR04gKi8K IAlPaWQJCQlyZWZpbmRpZDsJCS8qIE9JRCBvZiBQSydzIGluZGV4LCBpZiBGT1JFSUdOICovCiAJ Ym9vbAkJY29ud2l0aHBlcmlvZDsJLyogV2hldGhlciB0aGUgbmV3IEZPUkVJR04gS0VZIHVzZXMg UEVSSU9EICovCiAJT2lkCQkJY29uaWQ7CQkJLyogT0lEIG9mIHBnX2NvbnN0cmFpbnQgZW50cnks IGlmIEZPUkVJR04gKi8KKwlpbnQJCQlhdHRudW07CQkJLyogTk9ULU5VTEwgY29uc3RyYWludCBh dHRyaWJ1dGUgbnVtYmVyICovCiAJTm9kZQkgICAqcXVhbDsJCQkvKiBDaGVjayBleHByIG9yIENP TlNUUl9GT1JFSUdOIENvbnN0cmFpbnQgKi8KIAlFeHByU3RhdGUgICpxdWFsc3RhdGU7CQkvKiBF eGVjdXRpb24gc3RhdGUgZm9yIENIRUNLIGV4cHIgKi8KIH0gTmV3Q29uc3RyYWludDsKQEAgLTYx ODIsNiArNjE4NSw5IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lk IE9JRE5ld0hlYXApCiAJCQkJbmVlZHNjYW4gPSB0cnVlOwogCQkJCWNvbi0+cXVhbHN0YXRlID0g RXhlY1ByZXBhcmVFeHByKChFeHByICopIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9leHBy KGNvbi0+cXVhbCwgb2xkcmVsLCAxKSwgZXN0YXRlKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgQ09O U1RSX05PVE5VTEw6CisJCQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CiAJ CQljYXNlIENPTlNUUl9GT1JFSUdOOgogCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwogCQkJ CWJyZWFrOwpAQCAtNjIzNSwxMCArNjI0MSw3MCBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFi bGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCQkJCQkJCQkJCQkJCQl3aG9sZWF0dC0+YXR0 bnVtKTsKIAkJCX0KIAkJfQotCQlpZiAobm90bnVsbF9hdHRycyB8fCBub3RudWxsX3ZpcnR1YWxf YXR0cnMpCi0JCQluZWVkc2NhbiA9IHRydWU7CiAJfQogCisJLyoKKwkgKiBUaGUgY29uZGl0aW9u cyBmb3IgdXNpbmcgaW5kZXhzY2FuIG1lY2hhbmlzbSBmYXN0IHZhbGlkYXRlIG5vdC1udWxsCisJ ICogY29uc3RyYWludHMgYXJlIHF1aXRlIHN0cmljdC4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBtdXN0IGJlCisJICogbWV0LgorCSAqIDEuIFdlIG11c3QgaGF2ZSB0aGUgbmVlZHMg dG8gdmFsaWRhdGUgbm90LW51bGwgY29uc3RyYWludHMKKwkgKiAgICAoQWx0ZXJlZFRhYmxlSW5m by0+dmVyaWZ5X25ld19ub3RudWxsIGlzIHRydWUpLgorCSAqIDIuIElmIGEgdGFibGUgc2NhbiBv ciB0YWJsZSByZXdyaXRlIGlzIGV4cGVjdGVkIGxhdGVyLCB1c2luZyBpbmRleHNjYW4gaXMKKwkg KiAgICBqdXN0IHdhc3RlcyBjeWNsZXMuCisJICogMy4gaW5kZXhlcyBjYW5ub3QgYmUgY3JlYXRl ZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCBzbyBmYXN0CisJICogICAgY2hlY2tpbmcg bm90LW51bGwgY29uc3RyYWludHMgaXMgbm90IGFwcGxpY2FibGUgdG8gdGhlbS4KKwkgKiA0LiBv cHRpbWl6YXRpb24gaXMgYWxzbyBsaW1pdGVkIHRvIHJlZ3VsYXIgcmVsYXRpb25zLgorCSAqIDUu IFRvIGF2b2lkIGNvbmN1cnJlbmN5IGlzc3VlLCB3ZSBvbmx5IGRvIGl0IHdoZW4gdGFibGUgd2Fz IGxvY2tlZCBpbgorCSAqICAgIEFjY2Vzc0V4Y2x1c2l2ZUxvY2suCisJKi8KKwlpZiAoIW5lZWRz Y2FuICYmCisJCW5ld3JlbCA9PSBOVUxMICYmCisJCSF0YWItPnJld3JpdGUgJiYKKwkJdGFiLT52 ZXJpZnlfbmV3X25vdG51bGwgJiYKKwkJbm90bnVsbF92aXJ0dWFsX2F0dHJzID09IE5JTCAmJgor CQlvbGRyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCUNoZWNr UmVsYXRpb25Mb2NrZWRCeU1lKG9sZHJlbCwgQWNjZXNzRXhjbHVzaXZlTG9jaywgZmFsc2UpKQor CXsKKwkJTGlzdAkgICAqbm90bnVsbF9hdHRudW1zID0gTklMOworCisJCWZvcmVhY2gobCwgdGFi LT5jb25zdHJhaW50cykKKwkJeworCQkJTmV3Q29uc3RyYWludCAqY29uID0gbGZpcnN0KGwpOwor CisJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cihuZXdUdXBEZXNjLCBj b24tPmF0dG51bSAtIDEpOworCisJCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxM KQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQoYXR0ci0+YXR0bm90bnVsbCk7CisJCQlBc3Nl cnQoY29uLT5hdHRudW0gPiAwKTsKKwkJCUFzc2VydChhdHRyLT5hdHRudW0gPT0gY29uLT5hdHRu dW0pOworCisJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURf VklSVFVBTCkKKwkJCXsKKwkJCQluZWVkc2NhbiA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCW5vdG51bGxfYXR0bnVtcyA9IGxhcHBlbmRfaW50KG5vdG51bGxfYXR0bnVtcywgYXR0ci0+ YXR0bnVtKTsKKwkJfQorCisJCS8qIG5vdG51bGxfYXR0bnVtcyBpcyBhbGwgbm90LW51bGwgYXR0 cmlidXRlcyB3ZSB2YWxpZGF0ZSBsYXRlciAqLworCQlpZiAobm90bnVsbF9hdHRudW1zICE9IE5J TCkKKwkJeworCQkJQXNzZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKG9sZHJlbCwgQWNjZXNz RXhjbHVzaXZlTG9jaywgZmFsc2UpKTsKKworCQkJaWYgKCFpbmRleF9jaGVja19ub3RudWxsKG9s ZHJlbCwgbm90bnVsbF9hdHRudW1zKSkKKwkJCQluZWVkc2NhbiA9IHRydWU7CisJCQllbHNlCisJ CQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQllcnJtc2dfaW50ZXJuYWwoImFsbCBub3QtbnVsbCBj b25zdHJhaW50cyBvbiByZWxhdGlvbiBcIiVzXCIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2Fu IiwKKwkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShvbGRyZWwpKSk7CisJCX0KKwl9 CisJZWxzZSBpZiAobm90bnVsbF9hdHRycyB8fCBub3RudWxsX3ZpcnR1YWxfYXR0cnMpCisJCW5l ZWRzY2FuID0gdHJ1ZTsKKwogCWlmIChuZXdyZWwgfHwgbmVlZHNjYW4pCiAJewogCQlFeHByQ29u dGV4dCAqZWNvbnRleHQ7CkBAIC03OTEwLDYgKzc5NzYsNyBAQCBBVEV4ZWNTZXROb3ROdWxsKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFtZSwgY2hhciAqY29sTmFtZSwK IAlDb29rZWRDb25zdHJhaW50ICpjY29uOwogCUxpc3QJICAgKmNvb2tlZDsKIAlib29sCQlpc19u b19pbmhlcml0ID0gZmFsc2U7CisJQWx0ZXJlZFRhYmxlSW5mbyAqdGFiID0gTlVMTDsKIAogCS8q IEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBkZWVwIGluaGVyaXRh bmNlIHRyZWUuICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKQEAgLTgwMzQsMTAgKzgxMDEsMzEg QEAgQVRFeGVjU2V0Tm90TnVsbChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIgKmNv bk5hbWUsIGNoYXIgKmNvbE5hbWUsCiAJY29uc3RyYWludC0+aXNfbm9faW5oZXJpdCA9IGlzX25v X2luaGVyaXQ7CiAJY29uc3RyYWludC0+Y29ubmFtZSA9IGNvbk5hbWU7CiAKKwl0YWIgPSBBVEdl dFF1ZXVlRW50cnkod3F1ZXVlLCByZWwpOworCiAJLyogYW5kIGRvIGl0ICovCiAJY29va2VkID0g QWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwgbGlzdF9tYWtlMShjb25zdHJhaW50 KSwKIAkJCQkJCQkJCSAgIGZhbHNlLCAhcmVjdXJzaW5nLCBmYWxzZSwgTlVMTCk7CiAJY2NvbiA9 IGxpbml0aWFsKGNvb2tlZCk7CisKKwlBc3NlcnQoY2Nvbi0+Y29udHlwZSA9PSBDT05TVFJfTk9U TlVMTCk7CisKKwkvKgorCSAqIHdlIG1heSB1c2UgaW5kZXhzY2FuIHRvIGZhc3QgdmFsaWRhdGUg bm90LW51bGwgY29uc3RyYWludCBpbiBQaGFzZTMuICBBZGQKKwkgKiB0aGUgdG8tYmUtdmFsaWRh dGVkIG5vdC1udWxsIGNvbnN0cmFpbnQgdG8gUGhhc2UgMydzIHF1ZXVlLgorCSovCisJaWYgKCFj Y29uLT5za2lwX3ZhbGlkYXRpb24pCisJeworCQlOZXdDb25zdHJhaW50ICpuZXdjb247CisJCW5l d2NvbiA9IChOZXdDb25zdHJhaW50ICopIHBhbGxvYzAoc2l6ZW9mKE5ld0NvbnN0cmFpbnQpKTsK KworCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOworCQluZXdjb24tPmNvbnR5cGUgPSBjY29u LT5jb250eXBlOworCQluZXdjb24tPmF0dG51bSA9IGNjb24tPmF0dG51bTsKKworCQl0YWItPmNv bnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOworCX0KKwogCU9i amVjdEFkZHJlc3NTZXQoYWRkcmVzcywgQ29uc3RyYWludFJlbGF0aW9uSWQsIGNjb24tPmNvbm9p ZCk7CiAKIAlJbnZva2VPYmplY3RQb3N0QWx0ZXJIb29rKFJlbGF0aW9uUmVsYXRpb25JZCwKQEAg LTk5MTgsMTMgKzEwMDA2LDE1IEBAIEFUQWRkQ2hlY2tOTkNvbnN0cmFpbnQoTGlzdCAqKndxdWV1 ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJewogCQlDb29rZWRDb25z dHJhaW50ICpjY29uID0gKENvb2tlZENvbnN0cmFpbnQgKikgbGZpcnN0KGxjb24pOwogCi0JCWlm ICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uICYmIGNjb24tPmNvbnR5cGUgIT0gQ09OU1RSX05PVE5V TEwpCisJCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uKQogCQl7CiAJCQlOZXdDb25zdHJhaW50 ICpuZXdjb247CiAKIAkJCW5ld2NvbiA9IChOZXdDb25zdHJhaW50ICopIHBhbGxvYzAoc2l6ZW9m KE5ld0NvbnN0cmFpbnQpKTsKIAkJCW5ld2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CiAJCQluZXdj b24tPmNvbnR5cGUgPSBjY29uLT5jb250eXBlOworCQkJaWYgKGNjb24tPmNvbnR5cGUgPT0gQ09O U1RSX05PVE5VTEwpCisJCQkJbmV3Y29uLT5hdHRudW0gPSBjY29uLT5hdHRudW07CiAJCQluZXdj b24tPnF1YWwgPSBjY29uLT5leHByOwogCiAJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0 YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOwpAQCAtMTMxNzksNiArMTMyNjksNyBAQCBRdWV1ZU5O Q29uc3RyYWludFZhbGlkYXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gY29ucmVsLCBSZWxh dGlvbiByZWwsCiAJTGlzdAkgICAqY2hpbGRyZW4gPSBOSUw7CiAJQXR0ck51bWJlcglhdHRudW07 CiAJY2hhcgkgICAqY29sbmFtZTsKKwlOZXdDb25zdHJhaW50ICpuZXdjb247CiAKIAljb24gPSAo Rm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29udHVwbGUpOwogCUFzc2VydChjb24tPmNv bnR5cGUgPT0gQ09OU1RSQUlOVF9OT1ROVUxMKTsKQEAgLTEzMjQyLDcgKzEzMzMzLDE3IEBAIFF1 ZXVlTk5Db25zdHJhaW50VmFsaWRhdGlvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBjb25yZWws IFJlbGF0aW9uIHJlbCwKIAkvKiBTZXQgYXR0bm90bnVsbCBhcHByb3ByaWF0ZWx5IHdpdGhvdXQg cXVldWVpbmcgYW5vdGhlciB2YWxpZGF0aW9uICovCiAJc2V0X2F0dG5vdG51bGwoTlVMTCwgcmVs LCBhdHRudW0sIHRydWUsIGZhbHNlKTsKIAorCS8qIFF1ZXVlIHZhbGlkYXRpb24gZm9yIHBoYXNl IDMgKi8KKwluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25z dHJhaW50KSk7CisJbmV3Y29uLT5uYW1lID0gY29sbmFtZTsKKwluZXdjb24tPmNvbnR5cGUgPSBD T05TVFJfTk9UTlVMTDsKKwluZXdjb24tPmF0dG51bSA9IGF0dG51bTsKKworCS8qIEZpbmQgb3Ig Y3JlYXRlIHdvcmsgcXVldWUgZW50cnkgZm9yIHRoaXMgdGFibGUgKi8KIAl0YWIgPSBBVEdldFF1 ZXVlRW50cnkod3F1ZXVlLCByZWwpOworCisJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQodGFi LT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwogCXRhYi0+dmVyaWZ5X25ld19ub3RudWxsID0gdHJ1 ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGJkZjg2MmIyNDA2 Li42NDhjNjk2NzI1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4 aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOCwx MiArMTA4LDE1IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vz cy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9n L2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJz dG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1ZGUgInV0 aWxzL211bHRpcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKICNp bmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCkBAIC0xNDUsNiArMTQ4LDcgQEAgc3RhdGljIGJvb2wg aW5kZXhfZXhwcmVzc2lvbl9jaGFuZ2VkX3dhbGtlcihOb2RlICpub2RlLAogCQkJCQkJCQkJCQlC aXRtYXBzZXQgKmFsbFVwZGF0ZWRDb2xzKTsKIHN0YXRpYyB2b2lkIEV4ZWNXaXRob3V0T3Zlcmxh cHNOb3RFbXB0eShSZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwK IAkJCQkJCQkJCQljaGFyIHR5cHR5cGUsIE9pZCBhdHR0eXBpZCk7CitzdGF0aWMgYm9vbCBpbmRl eF9jaGVja19ub3RudWxsX2ludGVybmFsKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphdHRudW1z LCBMaXN0ICppZHhzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNPcGVuSW5kaWNlcwpAQCAtMTE3 MiwzICsxMTc2LDE5NCBAQCBFeGVjV2l0aG91dE92ZXJsYXBzTm90RW1wdHkoUmVsYXRpb24gcmVs LCBOYW1lRGF0YSBhdHRuYW1lLCBEYXR1bSBhdHR2YWwsIGNoYXIgdAogCQkJCSBlcnJtc2coImVt cHR5IFdJVEhPVVQgT1ZFUkxBUFMgdmFsdWUgZm91bmQgaW4gY29sdW1uIFwiJXNcIiBpbiByZWxh dGlvbiBcIiVzXCIiLAogCQkJCQkJTmFtZVN0cihhdHRuYW1lKSwgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSkpKTsKIH0KKworLyoKKyAqIG5vdG51bGxfYXR0bnVtczogQXR0cmlidXRlIG51 bWJlcnMgZm9yIGFsbCBuZXdseSBhZGRlZCBOT1QgTlVMTCBjb25zdHJhaW50cy4KKyAqCisgKiBG aXJzdCBjaGVjayBpZiByZWxhdGlvbiBoYXZlIHN1aXRhYmxlIGluZGV4IGZvciBlYWNoIG5vdCBu dWxsIGF0dHJpYnV0ZS4gSWYKKyAqIGl0IGRvZXMsIHRoZW4gdXNpbmcgaW5kZXhzY2FuIG1lY2hh bmlzbSB0byB2ZXJpZnkgdGhhdCAqYWxsKiBhdHRyaWJ1dGVzIG9uCisgKiBub3RudWxsX2F0dG51 bXMgYXJlIGluZGVlZCBOT1QgTlVMTC4KKyAqLworYm9vbAoraW5kZXhfY2hlY2tfbm90bnVsbChS ZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqbm90bnVsbF9hdHRudW1zKQoreworCVJlbGF0aW9uCXBn X2luZGV4OworCVJlbGF0aW9uCWluZGV4X3JlbDsKKwlTeXNTY2FuRGVzYyBpbmRzY2FuOworCVNj YW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJ Rm9ybV9wZ19hdHRyaWJ1dGUgYXR0cjsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJTGlzdAkg ICAqYXR0bnVtcyA9IE5JTDsKKworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9u KTsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5k cmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX2lu ZGV4X2luZHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlP YmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKSk7CisKKwlwZ19pbmRl eCA9IHRhYmxlX29wZW4oSW5kZXhSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWluZHNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfaW5kZXgsIEluZGV4SW5kcmVsaWRJbmRleElkLCB0 cnVlLAorCQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQoaHR1cCA9IHN5c3RhYmxlX2dldG5leHQoaW5kc2NhbikpKQorCXsKKwkJRm9ybV9wZ19pbmRl eCBpbmRleCA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJLyoKKwkJICog d2UgY2FuIG9ubHkgdXNlIG5vbi1kZWZlcnJlZCwgdmFsaWQsIGFuZCBhbGl2ZSBidHJlZSBpbmRl eCB0bworCQkgKiB2YWxpZGF0ZSBub3QtbnVsbCBjb25zdHJhaW50cworCQkgKi8KKwkJaWYgKCFp bmRleC0+aW5kaW1tZWRpYXRlIHx8ICFpbmRleC0+aW5kaXN2YWxpZCB8fCAhaW5kZXgtPmluZGlz bGl2ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNhbiBub3QgdXNlIGV4cHJlc3Npb24gaW5kZXgg b3IgcGFydGlhbCBpbmRleCB0b28gKi8KKwkJaWYgKCFoZWFwX2F0dGlzbnVsbChodHVwLCBBbnVt X3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSB8fAorCQkJIWhlYXBfYXR0aXNudWxsKGh0dXAsIEFu dW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGludCBp ID0gMDsgaSA8IGluZGV4LT5pbmRua2V5YXR0czsgaSsrKQorCQl7CisJCQlhdHRyID0gVHVwbGVE ZXNjQXR0cih0dXBkZXNjLCAoaW5kZXgtPmluZGtleS52YWx1ZXNbaV0gLSAxKSk7CisKKwkJCWlm IChsaXN0X21lbWJlcl9pbnQobm90bnVsbF9hdHRudW1zLCBhdHRyLT5hdHRudW0pKQorCQkJewor CQkJCWluZGV4X3JlbCA9IGluZGV4X29wZW4oaW5kZXgtPmluZGV4cmVsaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkJCQlpZiAoaW5kZXhfcmVsLT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FNX09J RCAmJgorCQkJCQkhbGlzdF9tZW1iZXJfaW50KGF0dG51bXMsIGF0dHItPmF0dG51bSkpCisJCQkJ eworCQkJCQlhdHRudW1zID0gbGFwcGVuZF9pbnQoYXR0bnVtcywgYXR0ci0+YXR0bnVtKTsKKwkJ CQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBpbmRleC0+aW5kZXhyZWxpZCk7CisJCQkJ fQorCQkJCWluZGV4X2Nsb3NlKGluZGV4X3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJ fQorCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGluZHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX2luZGV4 LCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGF0dG51bXMgPT0gTklMKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKgorCSAqIGV2ZXJ5IG5vdC1udWxsIGNvbnN0cmFpbnRzIHJlcXVpcmUgYW4gaW5k ZXggZm9yIGZhc3QgdmFsaWRhdGF0aW9uLgorCSovCisJZm9yZWFjaF9pbnQoYXR0bm8sIG5vdG51 bGxfYXR0bnVtcykKKwl7CisJCWlmKCFsaXN0X21lbWJlcl9pbnQoYXR0bnVtcywgYXR0bm8pKQor CQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBpbmRleF9jaGVja19ub3RudWxsX2ludGVy bmFsKHJlbGF0aW9uLCBhdHRudW1zLCByZXN1bHQpOworfQorCisvKgorICogVXNlIGluZGV4c2Nh biBtZWNoYW5pc20gdG8gZmFzdCBjaGVjayBlYWNoIGF0dHJpYnV0ZSBpbiAiYXR0bnVtcyIgYXJl CisgKiBub3QtbnVsbCBvciBub3QuCisgKi8KK3N0YXRpYyBib29sCitpbmRleF9jaGVja19ub3Ru dWxsX2ludGVybmFsKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphdHRudW1zLCBMaXN0ICppZHhz KQoreworCUVTdGF0ZQkgICAqZXN0YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwlUdXBs ZVRhYmxlU2xvdCAqZXhpc3Rpbmdfc2xvdDsKKwlib29sIAkJYWxsX25vdF9udWxsID0gdHJ1ZTsK KwlMaXN0Q2VsbCAgICpsYywKKwkJCQkqbGMyOworCisJLyoKKwkgKiBOZWVkIGFuIEVTdGF0ZSBm b3Igc2xvdCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgorCSovCisJZXN0YXRlID0gQ3JlYXRl RXhlY3V0b3JTdGF0ZSgpOworCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3Rh dGUpOworCisJZm9yYm90aChsYywgYXR0bnVtcywgbGMyLCBpZHhzKQorCXsKKwkJU25hcHNob3RE YXRhIERpcnR5U25hcHNob3Q7CisJCUluZGV4U2NhbkRlc2MgaW5kZXhfc2NhbjsKKwkJU2Nhbktl eURhdGEJCXNjYW5rZXlzW0lOREVYX01BWF9LRVlTXTsKKwkJSW5kZXhJbmZvICAJKmluZGV4SW5m bzsKKwkJQXR0ck51bWJlcglza19hdHRubyA9IC0xOworCQlSZWxhdGlvbiAJaW5kZXg7CisJCWlu dAkJCWluZG5rZXlhdHRzOworCisJCUF0dHJOdW1iZXIJYXR0bm8gPSBsZmlyc3RfaW50KGxjKTsK KwkJT2lkCQlpbmRleG9pZCA9IGxmaXJzdF9vaWQobGMyKTsKKworCQlleGlzdGluZ19zbG90ID0g dGFibGVfc2xvdF9jcmVhdGUocmVsYXRpb24sIE5VTEwpOworCisJCS8qIEFycmFuZ2UgZm9yIGVj b250ZXh0J3Mgc2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLworCQllY29u dGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBleGlzdGluZ19zbG90OworCisJCWluZGV4ID0gaW5kZXhf b3BlbihpbmRleG9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlpbmRleEluZm8gPSBCdWlsZElu ZGV4SW5mbyhpbmRleCk7CisJCWluZG5rZXlhdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9m S2V5QXR0cmlidXRlcyhpbmRleCk7CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSB0dXBsZXMgdGhh dCBhcmUgaW4gdGhlIGluZGV4IGZvciBhbnkgdmlvbGF0aW9ucywgaW5jbHVkaW5nCisJCSAqIHR1 cGxlcyB0aGF0IGFyZW4ndCB2aXNpYmxlIHlldC4KKwkJKi8KKwkJSW5pdERpcnR5U25hcHNob3Qo RGlydHlTbmFwc2hvdCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRua2V5YXR0czsgaSsr KQorCQl7CisJCQlpZiAoaW5kZXhJbmZvLT5paV9JbmRleEF0dHJOdW1iZXJzW2ldID09IGF0dG5v KQorCQkJeworCQkJCXNrX2F0dG5vID0gaSsxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJ aWYgKHNrX2F0dG5vID09IC0xKQorCQkJZWxvZyhFUlJPUiwgImluZGV4ICV1IHNob3VsZCBlZmZl Y3Qgb24gY29sdW1uIG51bWJlciAlZCIsIGluZGV4b2lkLCBhdHRubyk7CisKKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBpbmRua2V5YXR0czsgaSsrKQorCQl7CisJCQkvKiBzZXQgdXAgYW4gSVMgTlVM TCBzY2FuIGtleSBzbyB0aGF0IHdlIGlnbm9yZSBub3QgbnVsbHMgKi8KKwkJCVNjYW5LZXlFbnRy eUluaXRpYWxpemUoJnNjYW5rZXlzW2ldLAorCQkJCQkJCQkJU0tfSVNOVUxMIHwgU0tfU0VBUkNI TlVMTCwKKwkJCQkJCQkJCXNrX2F0dG5vLAkJLyogaW5kZXggY29sIHRvIHNjYW4gKi8KKwkJCQkJ CQkJCUludmFsaWRTdHJhdGVneSwvKiBubyBzdHJhdGVneSAqLworCQkJCQkJCQkJSW52YWxpZE9p ZCwJCS8qIG5vIHN0cmF0ZWd5IHN1YnR5cGUgKi8KKwkJCQkJCQkJCUludmFsaWRPaWQsCQkvKiBu byBjb2xsYXRpb24gKi8KKwkJCQkJCQkJCUludmFsaWRPaWQsCQkvKiBubyByZWcgcHJvYyBmb3Ig dGhpcyAqLworCQkJCQkJCQkJKERhdHVtKSAwKTsJCS8qIGNvbnN0YW50ICovCisJCX0KKworCQlp bmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbGF0aW9uLCBpbmRleCwgJkRpcnR5U25hcHNo b3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwKTsKKwkJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNj YW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CisKKwkJd2hpbGUgKGluZGV4X2dldG5leHRf c2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJ CXsKKwkJCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCQkJYm9vbAkJbnVsbHNbSU5E RVhfTUFYX0tFWVNdOworCisJCQkvKgorCQkJICogRXh0cmFjdCB0aGUgaW5kZXggY29sdW1uIHZh bHVlcyBhbmQgaXNudWxsIGZsYWdzIGZyb20gdGhlCisJCQkgKiBleGlzdGluZyB0dXBsZS4KKwkJ CSovCisJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIGV4aXN0aW5nX3Nsb3QsIGVzdGF0ZSwg dmFsdWVzLCBudWxscyk7CisKKwkJCWlmIChudWxsc1tza19hdHRubyAtIDFdKQorCQkJeworCQkJ CWFsbF9ub3RfbnVsbCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaW5kZXhf ZW5kc2NhbihpbmRleF9zY2FuKTsKKwkJaW5kZXhfY2xvc2UoaW5kZXgsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisJCWlm ICghYWxsX25vdF9udWxsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCUZyZWVFeGVjdXRvclN0 YXRlKGVzdGF0ZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmlu ZGV4IGFlOTk0MDdkYjg5Li5mNDI0MDdlZDc1ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBA IC03NzgsNiArNzc4LDggQEAgZXh0ZXJuIHZvaWQgY2hlY2tfZXhjbHVzaW9uX2NvbnN0cmFpbnQo UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiAJCQkJCQkJCQkgICBjb25zdCBEYXR1bSAq dmFsdWVzLCBjb25zdCBib29sICppc251bGwsCiAJCQkJCQkJCQkgICBFU3RhdGUgKmVzdGF0ZSwg Ym9vbCBuZXdJbmRleCk7CiAKK2V4dGVybiBib29sIGluZGV4X2NoZWNrX25vdG51bGwoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKm5vdG51bGxfYXR0bnVtcyk7CisKIC8qCiAgKiBwcm90b3R5cGVz IGZyb20gZnVuY3Rpb25zIGluIGV4ZWNSZXBsaWNhdGlvbi5jCiAgKi8KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRleHNjYW4tY2hlY2stbm90bnVsbC5vdXQgYi9z cmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzNiOWYxNGM4OQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRleHNjYW4tY2hlY2st bm90bnVsbC5vdXQKQEAgLTAsMCArMSwxMDIgQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNl c3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMSBiMyBtMSBoaiBjMSBjMyBzbgorc3Rl cCBiMTogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgYjM6IEJF R0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIG0xOiBERUxFVEUgRlJP TSB0Oworc3RlcCBoajogQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVM TCBhOyA8d2FpdGluZyAuLi4+CitzdGVwIGMxOiBDT01NSVQ7CitzMjogTk9USUNFOiAgYWxsIG5v dC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0IiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4 IHNjYW4KK3N0ZXAgaGo6IDwuLi4gY29tcGxldGVkPgorc3RlcCBjMzogQ09NTUlUOworc3RlcCBz bjogU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpyZWdjbGFzcywgY29udHlwZSwgY29udmFsaWRh dGVkCisgICAgICAgICAgIEZST00gcGdfY29uc3RyYWludCBXSEVSRSBjb25uYW1lID0gJ3QxX25u JzsKKworY29ubmFtZXxjb25yZWxpZHxjb250eXBlfGNvbnZhbGlkYXRlZAorLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQordDFfbm4gIHx0ICAgICAgIHxuICAgICAgfHQgICAg ICAgICAgIAorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMiBiMyBtMSBoaiBj MSBjMyBzbgorc3RlcCBiMjogQkVHSU47CitzdGVwIGIzOiBCRUdJTiBJU09MQVRJT04gTEVWRUwg UkVQRUFUQUJMRSBSRUFEOworc3RlcCBtMTogREVMRVRFIEZST00gdDsKK3N0ZXAgaGo6IEFMVEVS IFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsgPHdhaXRpbmcgLi4uPgor c3RlcCBjMTogQ09NTUlUOworczI6IE5PVElDRTogIGFsbCBub3QtbnVsbCBjb25zdHJhaW50cyBv biByZWxhdGlvbiAidCIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuCitzdGVwIGhqOiA8Li4u IGNvbXBsZXRlZD4KK3N0ZXAgYzM6IENPTU1JVDsKK3N0ZXAgc246IFNFTEVDVCBjb25uYW1lLCBj b25yZWxpZDo6cmVnY2xhc3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAgICBGUk9N IHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisKK2Nvbm5hbWV8Y29ucmVs aWR8Y29udHlwZXxjb252YWxpZGF0ZWQKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0t LS0tLS0KK3QxX25uICB8dCAgICAgICB8biAgICAgIHx0ICAgICAgICAgICAKKygxIHJvdykKKwor CitzdGFydGluZyBwZXJtdXRhdGlvbjogYjEgYjQgbTEgaGogYzEgYzMgc24KK3N0ZXAgYjE6IEJF R0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIGI0OiBCRUdJTjsKK3N0 ZXAgbTE6IERFTEVURSBGUk9NIHQ7CitzdGVwIGhqOiBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJB SU5UIHQxX25uIE5PVCBOVUxMIGE7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgYzE6IENPTU1JVDsKK3My OiBOT1RJQ0U6ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gInQiIGFyZSB2 YWxpZGF0ZWQgYnkgaW5kZXggc2Nhbgorc3RlcCBoajogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIGMz OiBDT01NSVQ7CitzdGVwIHNuOiBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBj b250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJF IGNvbm5hbWUgPSAndDFfbm4nOworCitjb25uYW1lfGNvbnJlbGlkfGNvbnR5cGV8Y29udmFsaWRh dGVkCistLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCit0MV9ubiAgfHQgICAg ICAgfG4gICAgICB8dCAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRp b246IGIxIGIzIGhqIHIxIGMyCitzdGVwIGIxOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFU QUJMRSBSRUFEOworc3RlcCBiMzogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVB RDsKK3N0ZXAgaGo6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwg YTsKK0VSUk9SOiAgY29sdW1uICJhIiBvZiByZWxhdGlvbiAidCIgY29udGFpbnMgbnVsbCB2YWx1 ZXMKK3N0ZXAgcjE6IFJPTExCQUNLOworc3RlcCBjMjogUk9MTEJBQ0s7CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBiMSBiNCBkMSBtMSBjMiBzMSBzbiByMQorc3RlcCBiMTogQkVHSU4gSVNPTEFU SU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgYjQ6IEJFR0lOOworc3RlcCBkMTogRFJP UCBJTkRFWCB0X2FiX2lkeDsKK3N0ZXAgbTE6IERFTEVURSBGUk9NIHQ7IDx3YWl0aW5nIC4uLj4K K3N0ZXAgYzI6IFJPTExCQUNLOworc3RlcCBtMTogPC4uLiBjb21wbGV0ZWQ+CitzMTogTk9USUNF OiAgYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0IiBhcmUgdmFsaWRhdGVk IGJ5IGluZGV4IHNjYW4KK3N0ZXAgczE6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFf bm4gTk9UIE5VTEwgYTsKK3N0ZXAgc246IFNFTEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cmVnY2xh c3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnQg V0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisKK2Nvbm5hbWV8Y29ucmVsaWR8Y29udHlwZXxjb252 YWxpZGF0ZWQKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0KK3QxX25uICB8 dCAgICAgICB8biAgICAgIHx0ICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCByMTogUk9MTEJB Q0s7CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMiBiMyBtMSBkMSBzMCBzMSBjMSBjMyBzbgor c3RlcCBiMjogQkVHSU47CitzdGVwIGIzOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJM RSBSRUFEOworc3RlcCBtMTogREVMRVRFIEZST00gdDsKK3N0ZXAgZDE6IERST1AgSU5ERVggdF9h Yl9pZHg7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgczA6IHNhdmVwb2ludCBzMDsKK3MxOiBOT1RJQ0U6 ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gInQiIGFyZSB2YWxpZGF0ZWQg YnkgaW5kZXggc2Nhbgorc3RlcCBzMTogQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9u biBOT1QgTlVMTCBhOworc3RlcCBjMTogQ09NTUlUOworc3RlcCBkMTogPC4uLiBjb21wbGV0ZWQ+ CitzdGVwIGMzOiBDT01NSVQ7CitzdGVwIHNuOiBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJl Z2NsYXNzLCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgRlJPTSBwZ19jb25zdHJh aW50IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworCitjb25uYW1lfGNvbnJlbGlkfGNvbnR5cGV8 Y29udmFsaWRhdGVkCistLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCit0MV9u biAgfHQgICAgICAgfG4gICAgICB8dCAgICAgICAgICAgCisoMSByb3cpCisKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgYi9zcmMvdGVzdC9pc29sYXRp b24vaXNvbGF0aW9uX3NjaGVkdWxlCmluZGV4IGUzYzY2OWEyOWM3Li4xYjllOGY5MzJhYyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQorKysgYi9zcmMv dGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBAIC01Niw2ICs1Niw3IEBAIHRlc3Q6 IG1lcmdlLWRlbGV0ZQogdGVzdDogbWVyZ2UtdXBkYXRlCiB0ZXN0OiBtZXJnZS1tYXRjaC1yZWNo ZWNrCiB0ZXN0OiBtZXJnZS1qb2luCit0ZXN0OiBpbmRleHNjYW4tY2hlY2stbm90bnVsbAogdGVz dDogZGVsZXRlLWFib3J0LXNhdmVwdAogdGVzdDogZGVsZXRlLWFib3J0LXNhdmVwdC0yCiB0ZXN0 OiBhYm9ydGVkLWtleXJldm9rZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNz L2luZGV4c2Nhbi1jaGVjay1ub3RudWxsLnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3Mv aW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZDBjYTkyOGYzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29s YXRpb24vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYwpAQCAtMCwwICsxLDQ1IEBA CisKKyMKKyMgdXNpbmcgaW5kZXhzY2FuIHRvIGNoZWNrIGEgY29sdW1uIG5vdC1udWxsIGNvbnN0 cmFpbnQKKyMgaXMgc2F0aXNmaWVkIG9yIG5vdC4KKyMKKworc2V0dXAKK3sKKyAgQ1JFQVRFIFRB QkxFIHQgKGEgaW50LCBiIGludCk7CisgIENSRUFURSBJTkRFWCB0X2FiX2lkeCBvbiB0KGEsYik7 CisgIElOU0VSVCBJTlRPIHQgdmFsdWVzIChudWxsLCAxKTsKKyAgSU5TRVJUIElOVE8gdCBTRUxF Q1QgeCwgeCoxMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMpIGcoeCk7Cit9CisKK3RlYXJkb3du Cit7CisgIERST1AgVEFCTEUgdDsKK30KKworc2Vzc2lvbiBzMQorc3RlcCBiMSAgeyBCRUdJTiBJ U09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIGIyICB7IEJFR0lOOyB9Citz dGVwIG0xICB7IERFTEVURSBGUk9NIHQ7fQorc3RlcCBzMCAgeyBzYXZlcG9pbnQgczA7fQorc3Rl cCBzMSAgeyBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHQxX25uIE5PVCBOVUxMIGE7fQor c3RlcCBzbiAgeyBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250eXBlLCBj b252YWxpZGF0ZWQKKyAgICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUg PSAndDFfbm4nOworICAgICAgICAgfQorc3RlcCByMSAgeyBST0xMQkFDSzsgfQorc3RlcCBjMSAg eyBDT01NSVQ7IH0KKworc2Vzc2lvbiBzMgorc3RlcCBiMyAgeyBCRUdJTiBJU09MQVRJT04gTEVW RUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIGI0ICB7IEJFR0lOOyB9CitzdGVwIGhqICB7IEFM VEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwgYTt9CitzdGVwIGQxICB7 IERST1AgSU5ERVggdF9hYl9pZHg7fQorc3RlcCBjMiAgeyBST0xMQkFDSzsgfQorc3RlcCBjMyAg eyBDT01NSVQ7IH0KKworcGVybXV0YXRpb24gYjEgYjMgbTEgaGogYzEgYzMgc24KK3Blcm11dGF0 aW9uIGIyIGIzIG0xIGhqIGMxIGMzIHNuCitwZXJtdXRhdGlvbiBiMSBiNCBtMSBoaiBjMSBjMyBz bgorcGVybXV0YXRpb24gYjEgYjMgaGogcjEgYzIKK3Blcm11dGF0aW9uIGIxIGI0IGQxIG0xIGMy IHMxIHNuIHIxCitwZXJtdXRhdGlvbiBiMiBiMyBtMSBkMSBzMCBzMSBjMSBjMyBzbgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCA5YzUwZGU3ZWZiMC4uNDlmYTE2ZmI1 MGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBAIC0xNiw2ICsxNiw3 IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNV90aW1lb3V0cy5wbCcsCiAgICAgICAndC8wMDZf c2lnbmFsX2F1dG92YWN1dW0ucGwnLAogICAgICAgJ3QvMDA3X2NhdGNhY2hlX2ludmFsLnBsJywK KyAgICAgICd0LzAwOF9pbmRleHNjYW5fdmFsaWRhdGVfbm90bnVsbC5wbCcsCiAgICAgXSwKICAg fSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDA4X2luZGV4 c2Nhbl92YWxpZGF0ZV9ub3RudWxsLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8w MDhfaW5kZXhzY2FuX3ZhbGlkYXRlX25vdG51bGwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjM3Nzg3ODU4ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvdC8wMDhfaW5kZXhzY2FuX3ZhbGlkYXRlX25vdG51bGwucGwKQEAg LTAsMCArMSwxMzggQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisKKyMgVmVyaWZ5IHRoYXQgaW5kZXhzY2FuIG1lY2hhbmlzbSBj YW4gc3BlZWR1cCBBTFRFUiBUQUJMRSBBREQgTk9UIE5VTEwKKworCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0 aWFsaXplIGEgdGVzdCBjbHVzdGVyCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygncHJpbWFyeScpOworJG5vZGUtPmluaXQoKTsKKyMgVHVybiBtZXNzYWdlIGxldmVs IHVwIHRvIERFQlVHMSBzbyB0aGF0IHdlIGdldCB0aGUgbWVzc2FnZXMgd2Ugd2FudCB0byBzZWUK KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2NsaWVudF9taW5fbWVzc2Fn ZXMgPSBERUJVRzEnKTsKKyRub2RlLT5zdGFydDsKKworIyBSdW4gYSBTUUwgY29tbWFuZCBhbmQg cmV0dXJuIHBzcWwncyBzdGRlcnIgKGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlcykKK3N1YiBydW5f c3FsX2NvbW1hbmQKK3sKKwlteSAkc3FsID0gc2hpZnQ7CisJbXkgJHN0ZGVycjsKKworCSRub2Rl LT5wc3FsKAorCQkncG9zdGdyZXMnLAorCQkkc3FsLAorCQlzdGRlcnIgPT4gXCRzdGRlcnIsCisJ CW9uX2Vycm9yX2RpZSA9PiAxLAorCQlvbl9lcnJvcl9zdG9wID0+IDEpOworCXJldHVybiAkc3Rk ZXJyOworfQorCisjIENoZWNrIHdoZXRoZXIgcmVzdWx0IG9mIHJ1bl9zcWxfY29tbWFuZCBzaG93 cyB0aGF0IHdlIGRpZCBhIHZlcmlmeSBwYXNzCitzdWIgaXNfdGFibGVfdmVyaWZpZWQKK3sKKwlt eSAkb3V0cHV0ID0gc2hpZnQ7CisJcmV0dXJuIGluZGV4KCRvdXRwdXQsICdERUJVRzogIHZlcmlm eWluZyB0YWJsZScpICE9IC0xOworfQorCisjIENoZWNrIHdoZXRoZXIgcmVzdWx0IG9mIHJ1bl9z cWxfY29tbWFuZCBzaG93cyB0aGF0IHdlIGRpZCBhIHZlcmlmeSBwYXNzCitzdWIgaXNfaW5kZXhz Y2FuX3Zlcml0aWZ5X25vdG51bGwKK3sKKwlteSAkb3V0cHV0ID0gc2hpZnQ7CisJcmV0dXJuIGlu ZGV4KCRvdXRwdXQsICdERUJVRzogIGFsbCBub3QtbnVsbCBjb25zdHJhaW50cyBvbiByZWxhdGlv bicpICE9IC0xOworfQorCitteSAkb3V0cHV0OworCitub3RlICJ0ZXN0IGFsdGVyIHRhYmxlIHNl dCBub3QgbnVsbCB1c2luZyBpbmRleHNjYW4gd2l0aCBwYXJ0aXRpb25lZCB0YWJsZSI7CisKK3J1 bl9zcWxfY29tbWFuZCgKKyAgICAnQ1JFQVRFIFRBQkxFIHRwIChhIGludCwgYiBpbnQgKSBQQVJU SVRJT04gQlkgcmFuZ2UoYSk7CisgICAgIENSRUFURSBUQUJMRSB0cHAxIHBhcnRpdGlvbiBvZiB0 cCBmb3IgdmFsdWVzIGZyb20gKCAxICkgdG8gKDEwKTsKKyAgICAgQ1JFQVRFIFRBQkxFIHRwcDIg cGFydGl0aW9uIG9mIHRwIGZvciB2YWx1ZXMgZnJvbSAoIDEwICkgdG8gKDIxKTsKKyAgICAgSU5T RVJUIElOVE8gdHAgc2VsZWN0IGcsIGcgKyAxMCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDE5KSBn OworICAgICBDUkVBVEUgSU5ERVggT04gdHAoYik7ICcpOworCiskb3V0cHV0ID0gcnVuX3NxbF9j b21tYW5kKCdBTFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGw7Jyk7Citv ayhpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwKKwknY29sdW1uIGIgd2ls bCB1c2UgaW5kZXhzY2FuIHRvIHZlcnRpZnkgbm90LW51bGwgc3RhdHVzLCBubyBuZWVkIHNjYW4g dGFibGUnKTsKK29rKCAkb3V0cHV0ID1+CisJICBtL2FsbCBub3QtbnVsbCBjb25zdHJhaW50cyBv biByZWxhdGlvbiAidHBwMSIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuLywKKwknYWxsIG5l d2x5IGFkZGVkIGNvbnN0cmFpbnRzIHByb3ZlZCBieSBpbmRleHNjYW4nKTsKKworcnVuX3NxbF9j b21tYW5kKAorCSdBTFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBkcm9wIG5vdCBudWxsOycp OworCisjIG5vcm1hbCBydW4gd2lsbCB2ZXJpZnkgdGFibGUgZGF0YQorJG91dHB1dCA9IHJ1bl9z cWxfY29tbWFuZCgnQUxURVIgVEFCTEUgdHBwMSBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGw7 Jyk7Citvayhpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwgJ3VzZSBpbmRl eHNjYW4gdG8gdmFsaWRhdGUgY29sdW1uIGIgbm90LW51bGwgd2lsbCBub3Qgc2NhbiB0YWJsZScp Oworb2soIWlzX3RhYmxlX3ZlcmlmaWVkKCRvdXRwdXQpLCAnd2lsbCBub3Qgc2NhbiB0YWJsZScp Oworb2soICRvdXRwdXQgPX4KKwkgIG0vYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0 aW9uICJ0cHAxIiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNjYW4vLAorCSdhbGwgbmV3bHkgYWRk ZWQgY29uc3RyYWludHMgcHJvdmVkIGJ5IGluZGV4c2NhbicpOworCisKKyRvdXRwdXQgPSBydW5f c3FsX2NvbW1hbmQoJ0FMVEVSIFRBQkxFIHRwcDIgYWx0ZXIgY29sdW1uIGIgc2V0IG5vdCBudWxs OycpOworb2soaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwoJG91dHB1dCksICd1c2UgaW5k ZXhzY2FuIHRvIHZhbGlkYXRlIGNvbHVtbiBiIG5vdC1udWxsLCB3aWxsIG5vdCBzY2FuIHRhYmxl Jyk7CitvayghaXNfdGFibGVfdmVyaWZpZWQoJG91dHB1dCksICd3aWxsIG5vdCBzY2FuIHRhYmxl Jyk7CitvayggJG91dHB1dCA9fgorCSAgbS9hbGwgbm90LW51bGwgY29uc3RyYWludHMgb24gcmVs YXRpb24gInRwcDIiIGFyZSB2YWxpZGF0ZWQgYnkgaW5kZXggc2Nhbi8sCisJJ2FsbCBuZXdseSBh ZGRlZCBjb25zdHJhaW50cyBwcm92ZWQgYnkgaW5kZXhzY2FuJyk7CisKK3J1bl9zcWxfY29tbWFu ZCgKKwknQUxURVIgVEFCTEUgdHAgYWx0ZXIgY29sdW1uIGIgZHJvcCBub3QgbnVsbDsnKTsKKwor IyB3ZSBoYXZlIGNoZWNrIG9ubHkgZm9yIHRlc3RfYSBjb2x1bW4sIHNvIHdlIG5lZWQgdmVyaWZ5 IHRhYmxlIGZvciB0ZXN0X2IKKyRvdXRwdXQgPSBydW5fc3FsX2NvbW1hbmQoCisJJ0FMVEVSIFRB QkxFIHRwIGFsdGVyIGNvbHVtbiBiIHNldCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGIgU0VUIGRh dGEgdHlwZSBiaWdpbnQ7JworKTsKK29rKCFpc190YWJsZV92ZXJpZmllZCgkb3V0cHV0KSwgJ3Rh YmxlIHdhcyByZXdyaXRlJyk7CitvayghaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwoJG91 dHB1dCksICd0YWJsZSB3YXMgcmV3cml0ZSwgY2FuIG5vdCB1c2UgaW5kZXhzY2FuIHRvIHZlcnRp Znkgbm90IG51bGwgY29uc3RyYWludHMnKTsKKworCisjIHRlc3Qgd2l0aCBub24tcGFydGl0aW9u ZWQgdGFibGUgYW5kIG90aGVyIHR5cGUgaW5kZXguCitub3RlICJ0ZXN0IGFsdGVyIHRhYmxlIHNl dCBub3QgbnVsbCB1c2luZyBpbmRleHNjYW4gd2l0aCBub24tcGFydGl0aW9uZWQgdGFibGUiOwor CitydW5fc3FsX2NvbW1hbmQoCisgICAgJ0NSRUFURSBUQUJMRSB0MShmMSBJTlQsIGYyIGludCwg ZjMgaW50LGY0IGludCwgZjUgaW50KTsKKyAgICAgSU5TRVJUIElOVE8gdDEgc2VsZWN0IGcsIGcr MSwgZysyLCBnKzMsIGcrNCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGc7CisgICAgIENS RUFURSBJTkRFWCB0MV9mMV9mMl9pZHggT04gdDEoZjEsZjIpOworICAgICBDUkVBVEUgVU5JUVVF IElOREVYIHQxX2YzaWR4IE9OIHQxKGYzKTsKKyAgICAgQ1JFQVRFIElOREVYIHQxX2YzZjRpZHgg T04gdDEoZjMpIGluY2x1ZGUoZjQpOworICAgICBDUkVBVEUgSU5ERVggaGFzaF9mNV9pZHggT04g dDEgVVNJTkcgaGFzaCAoZjUgaW50NF9vcHMpOyAnKTsKKworJG91dHB1dCA9IHJ1bl9zcWxfY29t bWFuZCgKKwknQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbCwgYWx0 ZXIgZjEgdHlwZSBiaWdpbnQ7JworKTsKK29rKCFpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVs bCgkb3V0cHV0KSwgJ3RhYmxlIHdhcyByZXdyaXRlLCBjYW4gbm90IHVzZSBpbmRleHNjYW4gdG8g dmFsaWRhdGUgbm90IG51bGwgY29uc3RyYWludHMnKTsKKworcnVuX3NxbF9jb21tYW5kKCdBTFRF UiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbDsnKTsKK3J1bl9zcWxfY29t bWFuZCgnQUxURVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQgbm4gbm90IG51bGwgZjEsIGFsdGVy IGYxIHR5cGUgYmlnaW50OycpOworCisjIGNhbiB1c2UgaW5kZXhzY2FuIG1lY2hhbmlzbSB0byBm YXN0IGFkZCBtdWx0aXBsZSBub3QtbnVsbCBjb25zdHJhaW50cworJG91dHB1dCA9IHJ1bl9zcWxf Y29tbWFuZCgKKwknQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYyIHNldCBub3QgbnVsbCwg YWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbDsnCispOworb2soICRvdXRwdXQgPX4KKwkgIG0v YWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0MSIgYXJlIHZhbGlkYXRlZCBi eSBpbmRleCBzY2FuLywKKwknYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSB2YWxpZGF0ZWQg YnkgaW5kZXhzY2FuJyk7CisKKyMgdXNpbmcgaW5kZXhzY2FuIG1lY2hhbmlzbSB0byBmYXN0IGFk ZCBhIG5vdC1udWxsIGNhbiBvbmx5IGFwcGx5IHRvIGtleSBjb2x1bW5zLCBub3QgaW5jbHVkZSBj b2x1bW4KKyRvdXRwdXQgPSBydW5fc3FsX2NvbW1hbmQoCisJJ0FMVEVSIFRBQkxFIHQxIGFkZCBj b25zdHJhaW50IG5uZjQgbm90IG51bGwgZjQ7JworKTsKK29rKCFpc19pbmRleHNjYW5fdmVyaXRp Znlfbm90bnVsbCgkb3V0cHV0KSwgJ2NhbiBub3QgdXNlIGluZGV4c2NhbiB0byB2YWxpbGRhdGUg bm90LW51bGwgY29uc3RyYWludCcpOworCisjIGlmIGluZGV4IGlzIG5vdCBidHJlZSBpbmRleCB0 aGVuIGNhbm5vdCB1c2UgaW5kZXhzY2FuIG1lY2hhbmlzbSB0byBmYXN0IGFkZCBub3QtbnVsbCBj b25zdHJhaW50Ciskb3V0cHV0ID0gcnVuX3NxbF9jb21tYW5kKAorCSdBTFRFUiBUQUJMRSB0MSBh ZGQgY29uc3RyYWludCBubl9mNSBub3QgbnVsbCBmNTsnCispOworb2soIWlzX2luZGV4c2Nhbl92 ZXJpdGlmeV9ub3RudWxsKCRvdXRwdXQpLCAnY2FuIG5vdCB1c2UgaW5kZXhzY2FuIHRvIHZhbGlk YXRlIG5vdC1udWxsIGNvbnN0cmFpbnQnKTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9u ZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --00000000000086c2ec0633cf3bcc--