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 1uRizK-00FSjS-9f for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 02:57:22 +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 1uRiyI-00Euuq-UB for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 02:56:19 +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 1uRiyI-00Euug-9I for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 02:56:19 +0000 Received: from mail-vs1-xe2f.google.com ([2607:f8b0:4864:20::e2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uRiyH-002d7O-0K for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 02:56:18 +0000 Received: by mail-vs1-xe2f.google.com with SMTP id ada2fe7eead31-4e8110ac0f5so799024137.0 for ; Tue, 17 Jun 2025 19:56:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750215376; x=1750820176; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=o1yc7oQWHYaQa94kh0qKstqMigM9k+zcvKwDZ2utqOo=; b=kZV5vys7CzQ7e1xW/AvKF9EWciLioqjoPLJ0vY+IjdBFKSDw1zN9X1g+K87tVrGXUW hgRFgSBSfIxC2G2D5JdW1bYYBuz7TKF33RG/oQ0Bkdmqy5+v02Q4YzNT13fpbErkrZJk 8R4Hw0/aLprrVS31+gKwGku5oGoUN7llytEESlWLn0UTKQ1X3XSNBuNo4y9WfnhOf2bQ rULDHR6HwP4b7fv/9xgKBCIXr9r129Zyye2B+WTcb0hZnIxm9caHpesqtLO8GUY+q7wo O5HJeLcolptFy7T6N/F/MWlv38nNIH3TgcBXGsb57pFlPGucpnO1P/CW7BQimMjebnL3 K3Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750215376; x=1750820176; h=cc: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=o1yc7oQWHYaQa94kh0qKstqMigM9k+zcvKwDZ2utqOo=; b=gmNCXEFRC3xHRmdUPEmrNfNNXwPZ4yBBqByAjVkEby2DdiuYc6hHNcs2uU4CRM7bHd NW5EEohnEWBS9AP0RXjfNrKR04cSzehlHQSBp92/Ya+ffrI8GgOcwMNdbgN79qPLUTdp iSL9T7HyoXtIq3meg5oVA7XK7c7KA7EY+8k+rx6J/k3XuZy3tzqJsF3c3WyEY86bw/OQ PACyjptdCO+Rmy1y6r1ZUKuVl2+MV3+mzV1C5Ujuq2gaLSbyqksFd6MieCTP0XHk0xSH 7R8KOxt5FVbsJSjFOo8Gj5vBUER/iCRgGo/8J+ITj8NLseVlXM+x8TU0Fynz4n5N/tkt luYg== X-Gm-Message-State: AOJu0YwTTiBdZPpiQCz2ozQmoOL9/CDAi3QMGtZZrCE5PFAeNNPFptLm eongLUz7Cnu5bvkOtBLaJYcSCSz6eBrczuN0rFrOPt6R9T6JV3tq3VLlABNHSNDV/M1Ewym4rLF Tyf+E8W3xQeiBwwibv78lFDep90Fvq+aldizfmn450Q== X-Gm-Gg: ASbGncsrNSEu2s+b85JvY0RNw9c1GOzxemOnORniyu6kK9woW3H9Owan0r5Zrt9Wzc6 /Z1BEbXdyhSswJCfUGV7zaGfbyk4MFJuDYwsXds0urbMbvpLGH9L1YciDKtwZjvL9B+bCmI1C4a tMUHzdRZGtr84py6ZbIXYufXsVfcYjqQS/wiBPSCy0lBEpg4j47lxWwC+29T4d1BvLlAjwRXrzj Ig= X-Google-Smtp-Source: AGHT+IF5Qgu/ZOBf+Shp83jcCorMCKD5SCxvgfEJHaRwXea2lYgMG5Q2TcBYUSncFw5nJYYdEqJsBkDB5QW12IREF6A= X-Received: by 2002:a05:6102:8015:b0:4e2:a235:2483 with SMTP id ada2fe7eead31-4e7f621d421mr12536865137.19.1750215375776; Tue, 17 Jun 2025 19:56:15 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> <9c1b75f1-5c40-4a86-9a61-a4b3f1d7ec60@postgrespro.ru> <7e1c67b8-ceba-4a04-964a-853eedeb02cc@postgrespro.ru> <0b3907b4-83b9-4873-9feb-2b60b29cda33@postgrespro.ru> <4f19550b-eb41-4649-8bf5-566dc020a720@postgrespro.ru> In-Reply-To: <4f19550b-eb41-4649-8bf5-566dc020a720@postgrespro.ru> From: jian he Date: Wed, 18 Jun 2025 10:55:38 +0800 X-Gm-Features: Ac12FXzsNTx2UnOWRufoLqWvbDZNooCrs5UOTc3diGBcBoZbnTFqfsV-SCJnr_4 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000c1228f0637cfc572" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c1228f0637cfc572 Content-Type: text/plain; charset="UTF-8" hi. The following are changes I made based on v47. mainly comments refactoring, variable/argument renaming. please see the attached patch. + + /* Create the relation. */ + newRelId = heap_create_with_catalog(newPartName->relname, + namespaceId, + modelRel->rd_rel->reltablespace, +.... + allowSystemTableMods, + false, + InvalidOid, + NULL); heap_create_with_catalog parameter is_internal should be set to true. + /* + * Construct a map from the LIKE relation's attnos to the child rel's. + * This re-checks type match etc, although it shouldn't be possible to + * have a failure since both tables are locked. + */ + attmap = build_attrmap_by_name(RelationGetDescr(newRel), + tupleDesc, + false); this comment in createTableConstraints is confusing, especially the word "LIKE". I didn' change it though. +/* + * moveMergedTablesRows: scan partitions to be merged (mergingPartitions) + * of the partitioned table (rel) and move rows into the new partition + * (newPartRel). We also reevaulate check constraints against these rows. + */ +static void +moveMergedTablesRows(List **wqueue, Relation rel, + List *mergingPartitions, Relation newPartRel) the argument (Relation rel) never used in moveMergedTablesRows we can remove it, or rename it as "parent_rel". I didn' change it though. moveMergedTablesRows was never used in SPLIT PARTITION, so maybe we can rename it to ATMergePartitionMoveTablesRows or ATMergePartitionMoveRows or ATMergePartitionRows what do you think? check_two_partitions_bounds_range we can name it to range_partition_bounds_check I don't have a huge opinion though. createTableConstraints(List **wqueue, AlteredTableInfo *tab, Relation modelRel, Relation newRel) rename argument (Relation modelRel) to parent_rel, I think it will improve readability, since "parent_rel" can tell you it's a partitioned table. ATExecMergePartitions some comments position adjusted. minor change src/test/regress/sql/partition_merge.sql -SELECT * FROM sales_list; -SELECT * FROM sales_nord; -SELECT * FROM sales_all; +SELECT tableoid::regclass, * FROM sales_list ORDER BY tableoid, salesperson_id; we need an error case for ERROR: cannot drop table \"%s\" because other objects depend on it so I added a test for it. as you can see below, the error HINT message is not great in this context. CREATE VIEW jan2022v as SELECT * FROM sales_jan2022; ALTER TABLE sales_range MERGE PARTITIONS (sales_jan2022, sales_feb2022) INTO sales_dec_jan_feb2022; ERROR: cannot drop table sales_jan2022 because other objects depend on it DETAIL: view jan2022v depends on table sales_jan2022 HINT: Use DROP ... CASCADE to drop the dependent objects too. DROP VIEW jan2022v; --000000000000c1228f0637cfc572 Content-Type: application/octet-stream; name="v47-0001-rename-function-argument-and-minor-refactor.no-cfbot" Content-Disposition: attachment; filename="v47-0001-rename-function-argument-and-minor-refactor.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc1czklp0 RnJvbSAxYjI1NDEwZTc1YTIwMjljM2FlYzdmNDU1YmNiNDhlNmNkYWMyNDFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTggSnVuIDIwMjUgMTA6NDA6MzkgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyAxLzFdIHJlbmFtZSBmdW5jdGlvbiBhcmd1bWVudCBhbmQgbWlub3IgcmVmYWN0b3IKCiogcmVu YW1lICJyZWwiIG9yICJtb2RlbFJlbCIgdG8gInBhcmVudF9yZWwiIHRvIGltcHJvdmUgY29kZSBy ZWFkYWJpbGl0eQoqIGNvbW1lbnRzIHJlZmFjdG9yaW5nCiogbWlub3IgdGVzdHMgY2hhbmdlcy4K LS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCA5OCAr KysrKysrKystLS0tLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9t ZXJnZS5vdXQgfCA2NCArKysrKy0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlv bl9tZXJnZS5zcWwgICAgICB8ICA4ICstCiAzIGZpbGVzIGNoYW5nZWQsIDc1IGluc2VydGlvbnMo KyksIDk1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYjcyNGUy ZDcxNTAuLmQ3ZDBlMzQ5YjE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjIxNTgs MTcgKzIyMTU4LDE2IEBAIGV2YWx1YXRlR2VuZXJhdGVkRXhwcmVzc2lvbnNBbmRDaGVja0NvbnN0 cmFpbnRzKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIH0KIAogLyoKLSAqIGdldEF0dHJpYnV0ZXNM aXN0OiByZXR1cm4gbGlzdCBvZiBjb2x1bW5zIChDb2x1bW5EZWYpIGxpa2UgbW9kZWwgdGFibGUK LSAqIChtb2RlbFJlbCkKKyAqIGdldEF0dHJpYnV0ZXNMaXN0OiBidWlsZCBhIGxpc3Qgb2YgY29s dW1ucyAoQ29sdW1uRGVmKSBiYXNlZCBvbiBwYXJlbnRfcmVsCiAgKi8KIHN0YXRpYyBMaXN0ICoK LWdldEF0dHJpYnV0ZXNMaXN0KFJlbGF0aW9uIG1vZGVsUmVsKQorZ2V0QXR0cmlidXRlc0xpc3Qo UmVsYXRpb24gcGFyZW50X3JlbCkKIHsKIAlBdHRyTnVtYmVyCXBhcmVudF9hdHRubzsKIAlUdXBs ZURlc2MJbW9kZWxEZXNjOwogCUxpc3QJICAgKmNvbExpc3QgPSBOSUw7CiAKLQltb2RlbERlc2Mg PSBSZWxhdGlvbkdldERlc2NyKG1vZGVsUmVsKTsKKwltb2RlbERlc2MgPSBSZWxhdGlvbkdldERl c2NyKHBhcmVudF9yZWwpOwogCiAJZm9yIChwYXJlbnRfYXR0bm8gPSAxOyBwYXJlbnRfYXR0bm8g PD0gbW9kZWxEZXNjLT5uYXR0czsKIAkJIHBhcmVudF9hdHRubysrKQpAQCAtMjIyMTQsMTMgKzIy MjEzLDE0IEBAIGdldEF0dHJpYnV0ZXNMaXN0KFJlbGF0aW9uIG1vZGVsUmVsKQogCiAKIC8qCi0g KiBjcmVhdGVUYWJsZUNvbnN0cmFpbnRzOiBjcmVhdGUgY29uc3RyYWludHMsIGRlZmF1bHQgdmFs dWVzIGFuZCBnZW5lcmF0ZWQKLSAqIHZhbHVlcyAocHJvdG90eXBlIGlzIGZ1bmN0aW9uIGV4cGFu ZFRhYmxlTGlrZUNsYXVzZSkuCi0gKiB0YWIgaXMgcGVuZGluZy13b3JrIHF1ZXVlIGZvciBuZXdS ZWwsIHdlIG1heSBuZWVkIGl0IGluIG1vdmVNZXJnZWRUYWJsZXNSb3dzLgorICogY3JlYXRlVGFi bGVDb25zdHJhaW50czoKKyAqIGNyZWF0ZSBjaGVjayBjb25zdHJhaW50cywgZGVmYXVsdCB2YWx1 ZXMgYW5kIGdlbmVyYXRlZCB2YWx1ZXMgZm9yIG5ld1JlbAorICogYmFzZWQgb24gcGFyZW50X3Jl bC4gIHRhYiBpcyBwZW5kaW5nLXdvcmsgcXVldWUgZm9yIG5ld1JlbCwgd2UgbWF5IG5lZWQgaXQg aW4KKyAqIG1vdmVNZXJnZWRUYWJsZXNSb3dzLgogICovCiBzdGF0aWMgdm9pZAogY3JlYXRlVGFi bGVDb25zdHJhaW50cyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCi0JCQkJ CSAgIFJlbGF0aW9uIG1vZGVsUmVsLCBSZWxhdGlvbiBuZXdSZWwpCisJCQkJCSAgIFJlbGF0aW9u IHBhcmVudF9yZWwsIFJlbGF0aW9uIG5ld1JlbCkKIHsKIAlUdXBsZURlc2MJdHVwbGVEZXNjOwog CVR1cGxlQ29uc3RyICpjb25zdHI7CkBAIC0yMjIzMCw3ICsyMjIzMCw3IEBAIGNyZWF0ZVRhYmxl Q29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCUxpc3QJ ICAgKkNvbnN0cmFpbnRzID0gTklMOwogCUxpc3QJICAgKmNvb2tlZENvbnN0cmFpbnRzID0gTklM OwogCi0JdHVwbGVEZXNjID0gUmVsYXRpb25HZXREZXNjcihtb2RlbFJlbCk7CisJdHVwbGVEZXNj ID0gUmVsYXRpb25HZXREZXNjcihwYXJlbnRfcmVsKTsKIAljb25zdHIgPSB0dXBsZURlc2MtPmNv bnN0cjsKIAogCWlmICghY29uc3RyKQpAQCAtMjIyNjUsMTMgKzIyMjY1LDEzIEBAIGNyZWF0ZVRh YmxlQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQkJ TmV3Q29sdW1uVmFsdWUgKm5ld3ZhbDsKIAogCQkJaWYgKGF0dHJpYnV0ZS0+YXR0Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKLQkJCQl0aGlzX2RlZmF1bHQgPSBidWls ZF9nZW5lcmF0aW9uX2V4cHJlc3Npb24obW9kZWxSZWwsIGF0dHJpYnV0ZS0+YXR0bnVtKTsKKwkJ CQl0aGlzX2RlZmF1bHQgPSBidWlsZF9nZW5lcmF0aW9uX2V4cHJlc3Npb24ocGFyZW50X3JlbCwg YXR0cmlidXRlLT5hdHRudW0pOwogCQkJZWxzZQogCQkJewogCQkJCXRoaXNfZGVmYXVsdCA9IFR1 cGxlRGVzY0dldERlZmF1bHQodHVwbGVEZXNjLCBhdHRyaWJ1dGUtPmF0dG51bSk7CiAJCQkJaWYg KHRoaXNfZGVmYXVsdCA9PSBOVUxMKQogCQkJCQllbG9nKEVSUk9SLCAiZGVmYXVsdCBleHByZXNz aW9uIG5vdCBmb3VuZCBmb3IgYXR0cmlidXRlICVkIG9mIHJlbGF0aW9uIFwiJXNcIiIsCi0JCQkJ CQkgYXR0cmlidXRlLT5hdHRudW0sIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG1vZGVsUmVsKSk7 CisJCQkJCQkgYXR0cmlidXRlLT5hdHRudW0sIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVu dF9yZWwpKTsKIAkJCX0KIAogCQkJbnVtID0gYXR0bWFwLT5hdHRudW1zW3BhcmVudF9hdHRubyAt IDFdOwpAQCAtMjIyODgsMTQgKzIyMjg4LDE0IEBAIGNyZWF0ZVRhYmxlQ29uc3RyYWludHMoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQkJCQkJZXJybXNnKCJjYW5ub3Qg Y29udmVydCB3aG9sZS1yb3cgdGFibGUgcmVmZXJlbmNlIiksCiAJCQkJCQllcnJkZXRhaWwoIkdl bmVyYXRpb24gZXhwcmVzc2lvbiBmb3IgY29sdW1uIFwiJXNcIiBjb250YWlucyBhIHdob2xlLXJv dyByZWZlcmVuY2UgdG8gdGFibGUgXCIlc1wiLiIsCiAJCQkJCQkJCSBOYW1lU3RyKGF0dHJpYnV0 ZS0+YXR0bmFtZSksCi0JCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShtb2RlbFJlbCkp KTsKKwkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVudF9yZWwpKSk7CiAKIAkJ CS8qIEFkZCBhIHByZS1jb29rZWQgZGVmYXVsdCBleHByZXNzaW9uLiAqLwogCQkJU3RvcmVBdHRy RGVmYXVsdChuZXdSZWwsIG51bSwgZGVmLCB0cnVlKTsKIAogCQkJLyoKLQkJCSAqIFN0b3JlZCBn ZW5lcmF0ZWQgY29sdW1uIGV4cHJlc3Npb25zIGluIG1vZGVsUmVsIG1pZ2h0IHJlZmVyZW5jZQot CQkJICogdGFibGVvaWQuICBuZXdSZWwsIG1vZGVsUmVsIHRhYmxlb2lkIGNsZWFyIGlzIG5vdCB0 aGUgc2FtZS4gSWYKKwkJCSAqIFN0b3JlZCBnZW5lcmF0ZWQgY29sdW1uIGV4cHJlc3Npb25zIGlu IHBhcmVudF9yZWwgbWlnaHQgcmVmZXJlbmNlCisJCQkgKiB0YWJsZW9pZC4gIG5ld1JlbCwgcGFy ZW50X3JlbCB0YWJsZW9pZCBjbGVhciBpcyBub3QgdGhlIHNhbWUuIElmCiAJCQkgKiBzbywgdGhl c2Ugc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zIHJlcXVpcmUgcmVjb21wdXRhdGlvbiBmb3IKIAkJ CSAqIG5ld1JlbCB3aXRoaW4gbW92ZU1lcmdlZFRhYmxlc1Jvd3MuCiAJCQkqLwpAQCAtMjIzNDUs NyArMjIzNDUsNyBAQCBjcmVhdGVUYWJsZUNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwKIAkJCQkJZXJybXNnKCJjYW5ub3QgY29udmVydCB3aG9sZS1yb3cg dGFibGUgcmVmZXJlbmNlIiksCiAJCQkJCWVycmRldGFpbCgiQ29uc3RyYWludCBcIiVzXCIgY29u dGFpbnMgYSB3aG9sZS1yb3cgcmVmZXJlbmNlIHRvIHRhYmxlIFwiJXNcIi4iLAogCQkJCQkJCSAg IGNjbmFtZSwKLQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShtb2RlbFJlbCkpKTsK KwkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJlbnRfcmVsKSkpOwogCiAJCWNv bnN0ciA9IG1ha2VOb2RlKENvbnN0cmFpbnQpOwogCQljb25zdHItPmNvbnR5cGUgPSBDT05TVFJf Q0hFQ0s7CkBAIC0yMjM3MCw3ICsyMjM3MCw3IEBAIGNyZWF0ZVRhYmxlQ29uc3RyYWludHMoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCUNvbW1hbmRDb3VudGVySW5jcmVt ZW50KCk7CiAKIAkvKgotCSAqIG1vZGVsUmVsIGNoZWNrIGNvbnN0cmFpbnQgZXhwcmVzc3Npb24g bWF5IHJlZmVyZW5jZSB0YWJsZW9pZCwgc28gbGF0ZXIgaW4KKwkgKiBwYXJlbnRfcmVsIGNoZWNr IGNvbnN0cmFpbnQgZXhwcmVzc3Npb24gbWF5IHJlZmVyZW5jZSB0YWJsZW9pZCwgc28gbGF0ZXIg aW4KIAkgKiBtb3ZlTWVyZ2VkVGFibGVzUm93cywgd2UgbmVlZCBldnVsYXRlIHRoZSBjaGVjayBj b25zdHJhaW50IGFnYWluIGZvciB0aGUKIAkgKiBuZXdSZWwuIFdlIGNhbiBjaGVjayB3ZWF0aGVy IGNoZWNrIGNvbnN0cmFpbnQgY29udGFpbiB0YWJsZW9pZCByZWZlcmVuY2UKIAkgKiBvciBub3Qg dmlhIHB1bGxfdmFyYXR0bm9zLgpAQCAtMjIzODYsOCArMjIzODYsNyBAQCBjcmVhdGVUYWJsZUNv bnN0cmFpbnRzKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkJCXB1bGxf dmFyYXR0bm9zKHF1YWwsIDEsICZhdHRudW1zKTsKIAogCQkJLyoKLQkJCSAqIEFkZCBjaGVjayBv bmx5IGlmIGl0IGNvbnRhaW5zIHRhYmxlb2lkCi0JCQkgKiAoVGFibGVPaWRBdHRyaWJ1dGVOdW1i ZXIpLgorCQkJICogQWRkIGNoZWNrIG9ubHkgaWYgaXQgY29udGFpbnMgdGFibGVvaWQgKFRhYmxl T2lkQXR0cmlidXRlTnVtYmVyKS4KIAkJCSAqLwogCQkJaWYgKGJtc19pc19tZW1iZXIoVGFibGVP aWRBdHRyaWJ1dGVOdW1iZXIgLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAog CQkJCQkJCSAgYXR0bnVtcykpCkBAIC0yMjQxNiw3ICsyMjQxNSw3IEBAIGNyZWF0ZVRhYmxlQ29u c3RyYWludHMoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQkgKiBUaGUg ImluY2x1ZGVfbm9pbmgiIGFyZ3VtZW50IGlzIGZhbHNlIGJlY2F1c2UgYSBwYXJ0aXRpb25lZCB0 YWJsZQogCQkgKiBjYW5ub3QgaGF2ZSBOTyBJTkhFUklUIGNvbnN0cmFpbnQuCiAJCSAqLwotCQlu bmNvbnN0cmFpbnRzID0gUmVsYXRpb25HZXROb3ROdWxsQ29uc3RyYWludHMoUmVsYXRpb25HZXRS ZWxpZChtb2RlbFJlbCksCisJCW5uY29uc3RyYWludHMgPSBSZWxhdGlvbkdldE5vdE51bGxDb25z dHJhaW50cyhSZWxhdGlvbkdldFJlbGlkKHBhcmVudF9yZWwpLAogCQkJCQkJCQkJCQkJCSAgZmFs c2UsIGZhbHNlKTsKIAogCQlBc3NlcnQobGlzdF9sZW5ndGgobm5jb25zdHJhaW50cykgPiAwKTsK QEAgLTIyNDMxLDIwICsyMjQzMCwxOCBAQCBjcmVhdGVUYWJsZUNvbnN0cmFpbnRzKExpc3QgKip3 cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAogCiAvKgotICogY3JlYXRlUGFydGl0aW9u VGFibGU6IGNyZWF0ZSB0YWJsZSBmb3IgYSBuZXcgcGFydGl0aW9uIHdpdGggZ2l2ZW4gbmFtZQot ICogKG5ld1BhcnROYW1lKSBsaWtlIHRhYmxlIChtb2RlbFJlbCwgcGFydGl0aW9uZWQgdGFibGUp LiBvd25lcklkIGlzCi0gKiBkZXRlcm1pbmVkIGJ5IHRoZSBwYXJ0aXRpb24gb24gd2hpY2ggdGhl IG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQsIHNvIGl0Ci0gKiBpcyBwYXNzZWQgc2VwYXJhdGVseS4K KyAqIGNyZWF0ZVBhcnRpdGlvblRhYmxlOgogICoKLSAqIEFsc28sIHRoaXMgZnVuY3Rpb24gc2V0 cyB0aGUgbmV3IHBhcnRpdGlvbiBhY2Nlc3MgbWV0aG9kIHNhbWUgYXMgcGFyZW50Ci0gKiB0YWJs ZSBhY2Nlc3MgbWV0aG9kcyAoc2ltaWxhcmx5IHRvIENSRUFURSBUQUJMRSAuLi4gUEFSVElUSU9O IE9GKS4gIEl0Ci0gKiBjaGVja3MgdGhhdCBwYXJlbnQgYW5kIGNoaWxkIHRhYmxlcyBoYXZlIGNv bXBhdGlibGUgcGVyc2lzdGVuY2UuCisgKiBDcmVhdGUgYSBuZXcgcGFydGl0aW9uIChuZXdQYXJ0 TmFtZSkgZm9yIHBhcnRpdGlvbmVkIHRhYmxlIChwYXJlbnRfcmVsKS4KKyAqIG93bmVySWQgaXMg ZGV0ZXJtaW5lZCBieSB0aGUgcGFydGl0aW9uIG9uIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgcGVy Zm9ybWVkLAorICogc28gaXQgaXMgcGFzc2VkIHNlcGFyYXRlbHkuICBUaGUgbmV3IHBhcnRpdGlv biB3aWxsIGluaGVyaXQgdGhlIGFjY2VzcyBtZXRob2QKKyAqIGFuZCBwZXJzaXN0ZW5jZSB0eXBl IGZyb20gdGhlIHBhcmVudCB0YWJsZS4KICAqCi0gKiBGdW5jdGlvbiByZXR1cm5zIHRoZSBjcmVh dGVkIHJlbGF0aW9uIChsb2NrZWQgaW4gQWNjZXNzRXhjbHVzaXZlTG9jayBtb2RlKS4KKyAqIHJl dHVybnMgdGhlIGNyZWF0ZWQgcmVsYXRpb24gKGxvY2tlZCBpbiBBY2Nlc3NFeGNsdXNpdmVMb2Nr IG1vZGUpLgogICovCiBzdGF0aWMgUmVsYXRpb24KIGNyZWF0ZVBhcnRpdGlvblRhYmxlKExpc3Qg Kip3cXVldWUsIFJhbmdlVmFyICpuZXdQYXJ0TmFtZSwKLQkJCQkJIFJlbGF0aW9uIG1vZGVsUmVs LCBPaWQgb3duZXJJZCkKKwkJCQkJIFJlbGF0aW9uIHBhcmVudF9yZWwsIE9pZCBvd25lcklkKQog ewogCVJlbGF0aW9uCW5ld1JlbDsKIAlPaWQJCQluZXdSZWxJZDsKQEAgLTIyNDU2LDE5ICsyMjQ1 MywxOSBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShMaXN0ICoqd3F1ZXVlLCBSYW5nZVZhciAqbmV3 UGFydE5hbWUsCiAJQWx0ZXJlZFRhYmxlSW5mbyAqbmV3X3BhcnRyZWxfdGFiOwogCiAJLyogSWYg ZXhpc3RpbmcgcmVsIGlzIHRlbXAsIGl0IG11c3QgYmVsb25nIHRvIHRoaXMgc2Vzc2lvbiAqLwot CWlmIChSRUxBVElPTl9JU19PVEhFUl9URU1QKG1vZGVsUmVsKSkKKwlpZiAoUkVMQVRJT05fSVNf T1RIRVJfVEVNUChwYXJlbnRfcmVsKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQllcnJjb2RlKEVS UkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJCWVycm1zZygiY2Fubm90IGNyZWF0ZSBhcyBw YXJ0aXRpb24gb2YgdGVtcG9yYXJ5IHJlbGF0aW9uIG9mIGFub3RoZXIgc2Vzc2lvbiIpKTsKIAog CS8qIExvb2sgdXAgaW5oZXJpdGFuY2UgYW5jZXN0b3JzIGFuZCBnZW5lcmF0ZSByZWxhdGlvbiBz Y2hlbWEuICovCi0JY29sTGlzdCA9IGdldEF0dHJpYnV0ZXNMaXN0KG1vZGVsUmVsKTsKKwljb2xM aXN0ID0gZ2V0QXR0cmlidXRlc0xpc3QocGFyZW50X3JlbCk7CiAKIAkvKiBDcmVhdGUgYSB0dXBs ZSBkZXNjcmlwdG9yIGZyb20gdGhlIHJlbGF0aW9uIHNjaGVtYS4gKi8KIAlkZXNjcmlwdG9yID0g QnVpbGREZXNjRm9yUmVsYXRpb24oY29sTGlzdCk7CiAKIAkvKiBMb29rIHVwIHRoZSBhY2Nlc3Mg bWV0aG9kIGZvciBuZXcgcmVsYXRpb24uICovCi0JcmVsYW1JZCA9IChtb2RlbFJlbC0+cmRfcmVs LT5yZWxhbSAhPSBJbnZhbGlkT2lkKSA/IG1vZGVsUmVsLT5yZF9yZWwtPnJlbGFtIDogSEVBUF9U QUJMRV9BTV9PSUQ7CisJcmVsYW1JZCA9IChwYXJlbnRfcmVsLT5yZF9yZWwtPnJlbGFtICE9IElu dmFsaWRPaWQpID8gcGFyZW50X3JlbC0+cmRfcmVsLT5yZWxhbSA6IEhFQVBfVEFCTEVfQU1fT0lE OwogCiAJLyogTG9vayB1cCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHdlIGFyZSBzdXBwb3NlZCB0 byBjcmVhdGUgdGhlIHJlbGF0aW9uLiAqLwogCW5hbWVzcGFjZUlkID0KQEAgLTIyNDgxLDcgKzIy NDc4LDcgQEAgY3JlYXRlUGFydGl0aW9uVGFibGUoTGlzdCAqKndxdWV1ZSwgUmFuZ2VWYXIgKm5l d1BhcnROYW1lLAogCS8qIENyZWF0ZSB0aGUgcmVsYXRpb24uICovCiAJbmV3UmVsSWQgPSBoZWFw X2NyZWF0ZV93aXRoX2NhdGFsb2cobmV3UGFydE5hbWUtPnJlbG5hbWUsCiAJCQkJCQkJCQkJbmFt ZXNwYWNlSWQsCi0JCQkJCQkJCQkJbW9kZWxSZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSwKKwkJ CQkJCQkJCQlwYXJlbnRfcmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UsCiAJCQkJCQkJCQkJSW52 YWxpZE9pZCwKIAkJCQkJCQkJCQlJbnZhbGlkT2lkLAogCQkJCQkJCQkJCUludmFsaWRPaWQsCkBA IC0yMjQ5Nyw3ICsyMjQ5NCw3IEBAIGNyZWF0ZVBhcnRpdGlvblRhYmxlKExpc3QgKip3cXVldWUs IFJhbmdlVmFyICpuZXdQYXJ0TmFtZSwKIAkJCQkJCQkJCQkoRGF0dW0pIDAsCiAJCQkJCQkJCQkJ dHJ1ZSwKIAkJCQkJCQkJCQlhbGxvd1N5c3RlbVRhYmxlTW9kcywKLQkJCQkJCQkJCQlmYWxzZSwK KwkJCQkJCQkJCQl0cnVlLAogCQkJCQkJCQkJCUludmFsaWRPaWQsCiAJCQkJCQkJCQkJTlVMTCk7 CiAKQEAgLTIyNTIyLDIzICsyMjUxOSwyMyBAQCBjcmVhdGVQYXJ0aXRpb25UYWJsZShMaXN0ICoq d3F1ZXVlLCBSYW5nZVZhciAqbmV3UGFydE5hbWUsCiAJICogYWZmZWN0ZWQgYnkgdGhlIHNlYXJj aF9wYXRoLiAgSWYgdGhlIHBhcmVudCBpcyBwZXJtYW5lbnQsIHNvIG11c3QgYmUKIAkgKiBhbGwg b2YgaXRzIHBhcnRpdGlvbnMuCiAJICovCi0JaWYgKG1vZGVsUmVsLT5yZF9yZWwtPnJlbHBlcnNp c3RlbmNlICE9IFJFTFBFUlNJU1RFTkNFX1RFTVAgJiYKKwlpZiAocGFyZW50X3JlbC0+cmRfcmVs LT5yZWxwZXJzaXN0ZW5jZSAhPSBSRUxQRVJTSVNURU5DRV9URU1QICYmCiAJCW5ld1JlbC0+cmRf cmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCWVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJZXJybXNn KCJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IHJlbGF0aW9uIGFzIHBhcnRpdGlvbiBvZiBwZXJt YW5lbnQgcmVsYXRpb24gXCIlc1wiIiwKLQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo bW9kZWxSZWwpKSk7CisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVudF9yZWwp KSk7CiAKIAkvKiBQZXJtYW5lbnQgcmVscyBjYW5ub3QgYmUgcGFydGl0aW9ucyBiZWxvbmdpbmcg dG8gdGVtcG9yYXJ5IHBhcmVudCAqLwogCWlmIChuZXdSZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVu Y2UgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCAmJgotCQltb2RlbFJlbC0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlwYXJlbnRfcmVsLT5yZF9yZWwtPnJl bHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKIAkJCQllcnJtc2coImNhbm5v dCBjcmVhdGUgYSBwZXJtYW5lbnQgcmVsYXRpb24gYXMgcGFydGl0aW9uIG9mIHRlbXBvcmFyeSBy ZWxhdGlvbiBcIiVzXCIiLAotCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShtb2RlbFJl bCkpKTsKKwkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocGFyZW50X3JlbCkpKTsKIAog CS8qIENyZWF0ZSBjb25zdHJhaW50cywgZGVmYXVsdCB2YWx1ZXMgYW5kIGdlbmVyYXRlZCB2YWx1 ZXMgKi8KLQljcmVhdGVUYWJsZUNvbnN0cmFpbnRzKHdxdWV1ZSwgbmV3X3BhcnRyZWxfdGFiLCBt b2RlbFJlbCwgbmV3UmVsKTsKKwljcmVhdGVUYWJsZUNvbnN0cmFpbnRzKHdxdWV1ZSwgbmV3X3Bh cnRyZWxfdGFiLCBwYXJlbnRfcmVsLCBuZXdSZWwpOwogCiAJLyoKIAkgKiBOZWVkIHRvIGNhbGwg Q29tbWFuZENvdW50ZXJJbmNyZW1lbnQsIHNvIGZyZXNoIHJlbGNhY2hlIGVudHJ5IGhhdmUgbmV3 bHkKQEAgLTIyODMxLDkgKzIyODI4LDE5IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0ICoq d3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAlkZWZhdWx0UGFy dE9pZCA9CiAJCWdldF9kZWZhdWx0X29pZF9mcm9tX3BhcnRkZXNjKFJlbGF0aW9uR2V0UGFydGl0 aW9uRGVzYyhyZWwsIHRydWUpKTsKIAorCS8qIERldGFjaCBhbGwgbWVyZ2VkIHBhcnRpdGlvbnMg Ki8KKwlmb3JlYWNoX29pZChtZXJnaW5nUGFydGl0aW9uT2lkLCBtZXJnaW5nUGFydGl0aW9ucykK Kwl7CisJCVJlbGF0aW9uCWNoaWxkX3JlbDsKKworCQljaGlsZF9yZWwgPSB0YWJsZV9vcGVuKG1l cmdpbmdQYXJ0aXRpb25PaWQsIE5vTG9jayk7CisKKwkJZGV0YWNoUGFydGl0aW9uVGFibGUocmVs LCBjaGlsZF9yZWwsIGRlZmF1bHRQYXJ0T2lkKTsKKworCQl0YWJsZV9jbG9zZShjaGlsZF9yZWws IE5vTG9jayk7CisJfQorCiAJLyoKLQkgKiBEZXRhY2ggYWxsIG1lcmdlZCBwYXJ0aXRpb25zLgot CSAqCiAJICogUGVyZm9ybSBhIHByZWxpbWluYXJ5IGNoZWNrIHRvIGRldGVybWluZSB3aGV0aGVy IGl0J3Mgc2FmZSB0byBkcm9wIGFsbAogCSAqIG1lcmdpbmcgcGFydGl0aW9ucyBiZWZvcmUgd2Ug YWN0dWFsbHkgZG8gc28gbGF0ZXIuIEFmdGVyIG1lcmdpbmcgcm93cwogCSAqIGludG8gdGhlIG5l dyBwYXJ0aXRpb25zIHZpYSBtb3ZlTWVyZ2VkVGFibGVzUm93cywgYWxsIG9sZCBwYXJ0aXRpb25z IG5lZWQKQEAgLTIyODQxLDE3ICsyMjg0OCw2IEBAIEFURXhlY01lcmdlUGFydGl0aW9ucyhMaXN0 ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkgKiBtZXJn ZSBwcm9jZXNzIChtb3ZlTWVyZ2VkVGFibGVzUm93cykgY2FuIGJlIHRpbWUtY29uc3VtaW5nLCBw ZXJmb3JtaW5nIGFuCiAJICogZWFybHkgY2hlY2sgb24gdGhlIGRyb3AgZWxpZ2liaWxpdHkgb2Yg b2xkIHBhcnRpdGlvbnMgaXMgcHJlZmVyYWJsZS4KIAkgKi8KLQlmb3JlYWNoX29pZChtZXJnaW5n UGFydGl0aW9uT2lkLCBtZXJnaW5nUGFydGl0aW9ucykKLQl7Ci0JCVJlbGF0aW9uCWNoaWxkX3Jl bDsKLQotCQljaGlsZF9yZWwgPSB0YWJsZV9vcGVuKG1lcmdpbmdQYXJ0aXRpb25PaWQsIE5vTG9j ayk7Ci0KLQkJZGV0YWNoUGFydGl0aW9uVGFibGUocmVsLCBjaGlsZF9yZWwsIGRlZmF1bHRQYXJ0 T2lkKTsKLQotCQl0YWJsZV9jbG9zZShjaGlsZF9yZWwsIE5vTG9jayk7Ci0JfQotCiAJZm9yZWFj aF9vaWQobWVyZ2luZ1BhcnRpdGlvbk9pZCwgbWVyZ2luZ1BhcnRpdGlvbnMpCiAJewogCQlPYmpl Y3RBZGRyZXNzIG9iamVjdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGFydGl0aW9uX21lcmdlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X21lcmdlLm91dAppbmRleCBmNWU2ZWM2MTg0YS4uNTMxZjIwMjFhYWQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX21lcmdlLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQKQEAgLTQ4LDYgKzQ4LDEyIEBA IExJTkUgMTogLi4uZSBNRVJHRSBQQVJUSVRJT05TIChzYWxlc19mZWIyMDIyLCBzYWxlc19tYXIy MDIyLCBwYXJ0aXRpb25zLi4uCiAtLUVSUk9SLCBzYWxlc19hcHJfMiBhbHJlYWR5IGV4aXN0cwog QUxURVIgVEFCTEUgc2FsZXNfcmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfZmViMjAyMiwg c2FsZXNfbWFyMjAyMiwgc2FsZXNfamFuMjAyMikgSU5UTyBzYWxlc19hcHJfMjsKIEVSUk9SOiAg cmVsYXRpb24gInNhbGVzX2Fwcl8yIiBhbHJlYWR5IGV4aXN0cworQ1JFQVRFIFZJRVcgamFuMjAy MnYgYXMgU0VMRUNUICogRlJPTSBzYWxlc19qYW4yMDIyOworQUxURVIgVEFCTEUgc2FsZXNfcmFu Z2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfamFuMjAyMiwgc2FsZXNfZmViMjAyMikgSU5UTyBz YWxlc19kZWNfamFuX2ZlYjIwMjI7CitFUlJPUjogIGNhbm5vdCBkcm9wIHRhYmxlIHNhbGVzX2ph bjIwMjIgYmVjYXVzZSBvdGhlciBvYmplY3RzIGRlcGVuZCBvbiBpdAorREVUQUlMOiAgdmlldyBq YW4yMDIydiBkZXBlbmRzIG9uIHRhYmxlIHNhbGVzX2phbjIwMjIKK0hJTlQ6ICBVc2UgRFJPUCAu Li4gQ0FTQ0FERSB0byBkcm9wIHRoZSBkZXBlbmRlbnQgb2JqZWN0cyB0b28uCitEUk9QIFZJRVcg amFuMjAyMnY7CiAtLSBOTyBFUlJPUjogdGVzdCBmb3IgY3VzdG9tIHBhcnRpdGlvbnMgb3JkZXIs IHNvdXJjZSBwYXJ0aXRpb25zIG5vdCBpbiB0aGUgc2VhcmNoX3BhdGgKIFNFVCBzZWFyY2hfcGF0 aCA9IHBhcnRpdGlvbnNfbWVyZ2Vfc2NoZW1hMiwgcHVibGljOwogQUxURVIgVEFCTEUgcGFydGl0 aW9uc19tZXJnZV9zY2hlbWEuc2FsZXNfcmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoCkBAIC01ODcs NDkgKzU5MywyNSBAQCBFWEVDVVRFIGdldF9wYXJ0aXRpb25faW5mbygne3NhbGVzX2xpc3R9Jyk7 CiAgc2FsZXNfb3RoZXJzIHwgcCAgICAgICAgICAgICAgfCByICAgICAgIHwgZiAgICAgICAgICAg ICAgICB8IERFRkFVTFQKICgzIHJvd3MpCiAKLVNFTEVDVCAqIEZST00gc2FsZXNfbGlzdDsKLSBz YWxlc3BlcnNvbl9pZCB8IHNhbGVzcGVyc29uX25hbWUgfCAgc2FsZXNfc3RhdGUgICB8IHNhbGVz X2Ftb3VudCB8IHNhbGVzX2RhdGUgCi0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQotICAgICAgICAg ICAgICAyIHwgU21pcm5vZmYgICAgICAgICB8IE5ldyBZb3JrICAgICAgIHwgICAgICAgICAgNTAw IHwgMDMtMDMtMjAyMgotICAgICAgICAgICAgICA1IHwgRGVldiAgICAgICAgICAgICB8IExpc2Jv biAgICAgICAgIHwgICAgICAgICAgMjUwIHwgMDMtMDctMjAyMgotICAgICAgICAgICAgIDExIHwg TXVsbGVyICAgICAgICAgICB8IE1hZHJpZCAgICAgICAgIHwgICAgICAgICAgNjUwIHwgMDMtMDUt MjAyMgotICAgICAgICAgICAgIDE0IHwgUGxhdG8gICAgICAgICAgICB8IExpc2JvbiAgICAgICAg IHwgICAgICAgICAgOTUwIHwgMDMtMDUtMjAyMgotICAgICAgICAgICAgICAxIHwgVHJ1bXAgICAg ICAgICAgICB8IEJlamluZyAgICAgICAgIHwgICAgICAgICAxMDAwIHwgMDMtMDEtMjAyMgotICAg ICAgICAgICAgICA4IHwgTGkgICAgICAgICAgICAgICB8IFZsYWRpdm9zdG9rICAgIHwgICAgICAg ICAxMTUwIHwgMDMtMDktMjAyMgotICAgICAgICAgICAgICA0IHwgSXZhbm92ICAgICAgICAgICB8 IFdhcnNhdyAgICAgICAgIHwgICAgICAgICAgNzUwIHwgMDMtMDQtMjAyMgotICAgICAgICAgICAg ICA2IHwgUG9pcm90ICAgICAgICAgICB8IEJlcmxpbiAgICAgICAgIHwgICAgICAgICAxMDAwIHwg MDMtMDEtMjAyMgotICAgICAgICAgICAgIDEyIHwgU21pdGggICAgICAgICAgICB8IEt5aXYgICAg ICAgICAgIHwgICAgICAgICAgMzUwIHwgMDMtMTAtMjAyMgotICAgICAgICAgICAgIDEzIHwgR2Fu ZGkgICAgICAgICAgICB8IFdhcnNhdyAgICAgICAgIHwgICAgICAgICAgMTUwIHwgMDMtMDgtMjAy MgotICAgICAgICAgICAgICAzIHwgRm9yZCAgICAgICAgICAgICB8IFN0LiBQZXRlcnNidXJnIHwg ICAgICAgICAyMDAwIHwgMDMtMDUtMjAyMgotICAgICAgICAgICAgICA3IHwgTWF5ICAgICAgICAg ICAgICB8IEhlbHNpbmtpICAgICAgIHwgICAgICAgICAxMjAwIHwgMDMtMDYtMjAyMgotICAgICAg ICAgICAgICA5IHwgTWF5ICAgICAgICAgICAgICB8IEhlbHNpbmtpICAgICAgIHwgICAgICAgICAx MjAwIHwgMDMtMTEtMjAyMgotICAgICAgICAgICAgIDEwIHwgSGFsZGVyICAgICAgICAgICB8IE9z bG8gICAgICAgICAgIHwgICAgICAgICAgODAwIHwgMDMtMDItMjAyMgorU0VMRUNUIHRhYmxlb2lk OjpyZWdjbGFzcywgKiBGUk9NIHNhbGVzX2xpc3QgT1JERVIgQlkgdGFibGVvaWQsIHNhbGVzcGVy c29uX2lkOworICB0YWJsZW9pZCAgfCBzYWxlc3BlcnNvbl9pZCB8IHNhbGVzcGVyc29uX25hbWUg fCAgc2FsZXNfc3RhdGUgICB8IHNhbGVzX2Ftb3VudCB8IHNhbGVzX2RhdGUgCistLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBzYWxlc19ub3JkIHwgICAgICAgICAgICAgIDMg fCBGb3JkICAgICAgICAgICAgIHwgU3QuIFBldGVyc2J1cmcgfCAgICAgICAgIDIwMDAgfCAwMy0w NS0yMDIyCisgc2FsZXNfbm9yZCB8ICAgICAgICAgICAgICA3IHwgTWF5ICAgICAgICAgICAgICB8 IEhlbHNpbmtpICAgICAgIHwgICAgICAgICAxMjAwIHwgMDMtMDYtMjAyMgorIHNhbGVzX25vcmQg fCAgICAgICAgICAgICAgOSB8IE1heSAgICAgICAgICAgICAgfCBIZWxzaW5raSAgICAgICB8ICAg ICAgICAgMTIwMCB8IDAzLTExLTIwMjIKKyBzYWxlc19ub3JkIHwgICAgICAgICAgICAgMTAgfCBI YWxkZXIgICAgICAgICAgIHwgT3NsbyAgICAgICAgICAgfCAgICAgICAgICA4MDAgfCAwMy0wMi0y MDIyCisgc2FsZXNfYWxsICB8ICAgICAgICAgICAgICAxIHwgVHJ1bXAgICAgICAgICAgICB8IEJl amluZyAgICAgICAgIHwgICAgICAgICAxMDAwIHwgMDMtMDEtMjAyMgorIHNhbGVzX2FsbCAgfCAg ICAgICAgICAgICAgMiB8IFNtaXJub2ZmICAgICAgICAgfCBOZXcgWW9yayAgICAgICB8ICAgICAg ICAgIDUwMCB8IDAzLTAzLTIwMjIKKyBzYWxlc19hbGwgIHwgICAgICAgICAgICAgIDQgfCBJdmFu b3YgICAgICAgICAgIHwgV2Fyc2F3ICAgICAgICAgfCAgICAgICAgICA3NTAgfCAwMy0wNC0yMDIy Cisgc2FsZXNfYWxsICB8ICAgICAgICAgICAgICA1IHwgRGVldiAgICAgICAgICAgICB8IExpc2Jv biAgICAgICAgIHwgICAgICAgICAgMjUwIHwgMDMtMDctMjAyMgorIHNhbGVzX2FsbCAgfCAgICAg ICAgICAgICAgNiB8IFBvaXJvdCAgICAgICAgICAgfCBCZXJsaW4gICAgICAgICB8ICAgICAgICAg MTAwMCB8IDAzLTAxLTIwMjIKKyBzYWxlc19hbGwgIHwgICAgICAgICAgICAgIDggfCBMaSAgICAg ICAgICAgICAgIHwgVmxhZGl2b3N0b2sgICAgfCAgICAgICAgIDExNTAgfCAwMy0wOS0yMDIyCisg c2FsZXNfYWxsICB8ICAgICAgICAgICAgIDExIHwgTXVsbGVyICAgICAgICAgICB8IE1hZHJpZCAg ICAgICAgIHwgICAgICAgICAgNjUwIHwgMDMtMDUtMjAyMgorIHNhbGVzX2FsbCAgfCAgICAgICAg ICAgICAxMiB8IFNtaXRoICAgICAgICAgICAgfCBLeWl2ICAgICAgICAgICB8ICAgICAgICAgIDM1 MCB8IDAzLTEwLTIwMjIKKyBzYWxlc19hbGwgIHwgICAgICAgICAgICAgMTMgfCBHYW5kaSAgICAg ICAgICAgIHwgV2Fyc2F3ICAgICAgICAgfCAgICAgICAgICAxNTAgfCAwMy0wOC0yMDIyCisgc2Fs ZXNfYWxsICB8ICAgICAgICAgICAgIDE0IHwgUGxhdG8gICAgICAgICAgICB8IExpc2JvbiAgICAg ICAgIHwgICAgICAgICAgOTUwIHwgMDMtMDUtMjAyMgogKDE0IHJvd3MpCiAKLVNFTEVDVCAqIEZS T00gc2FsZXNfbm9yZDsKLSBzYWxlc3BlcnNvbl9pZCB8IHNhbGVzcGVyc29uX25hbWUgfCAgc2Fs ZXNfc3RhdGUgICB8IHNhbGVzX2Ftb3VudCB8IHNhbGVzX2RhdGUgCi0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLQotICAgICAgICAgICAgICAzIHwgRm9yZCAgICAgICAgICAgICB8IFN0LiBQZXRlcnNi dXJnIHwgICAgICAgICAyMDAwIHwgMDMtMDUtMjAyMgotICAgICAgICAgICAgICA3IHwgTWF5ICAg ICAgICAgICAgICB8IEhlbHNpbmtpICAgICAgIHwgICAgICAgICAxMjAwIHwgMDMtMDYtMjAyMgot ICAgICAgICAgICAgICA5IHwgTWF5ICAgICAgICAgICAgICB8IEhlbHNpbmtpICAgICAgIHwgICAg ICAgICAxMjAwIHwgMDMtMTEtMjAyMgotICAgICAgICAgICAgIDEwIHwgSGFsZGVyICAgICAgICAg ICB8IE9zbG8gICAgICAgICAgIHwgICAgICAgICAgODAwIHwgMDMtMDItMjAyMgotKDQgcm93cykK LQotU0VMRUNUICogRlJPTSBzYWxlc19hbGw7Ci0gc2FsZXNwZXJzb25faWQgfCBzYWxlc3BlcnNv bl9uYW1lIHwgc2FsZXNfc3RhdGUgfCBzYWxlc19hbW91bnQgfCBzYWxlc19kYXRlIAotLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgMiB8IFNtaXJub2ZmICAgICAgICAgfCBOZXcg WW9yayAgICB8ICAgICAgICAgIDUwMCB8IDAzLTAzLTIwMjIKLSAgICAgICAgICAgICAgNSB8IERl ZXYgICAgICAgICAgICAgfCBMaXNib24gICAgICB8ICAgICAgICAgIDI1MCB8IDAzLTA3LTIwMjIK LSAgICAgICAgICAgICAxMSB8IE11bGxlciAgICAgICAgICAgfCBNYWRyaWQgICAgICB8ICAgICAg ICAgIDY1MCB8IDAzLTA1LTIwMjIKLSAgICAgICAgICAgICAxNCB8IFBsYXRvICAgICAgICAgICAg fCBMaXNib24gICAgICB8ICAgICAgICAgIDk1MCB8IDAzLTA1LTIwMjIKLSAgICAgICAgICAgICAg MSB8IFRydW1wICAgICAgICAgICAgfCBCZWppbmcgICAgICB8ICAgICAgICAgMTAwMCB8IDAzLTAx LTIwMjIKLSAgICAgICAgICAgICAgOCB8IExpICAgICAgICAgICAgICAgfCBWbGFkaXZvc3RvayB8 ICAgICAgICAgMTE1MCB8IDAzLTA5LTIwMjIKLSAgICAgICAgICAgICAgNCB8IEl2YW5vdiAgICAg ICAgICAgfCBXYXJzYXcgICAgICB8ICAgICAgICAgIDc1MCB8IDAzLTA0LTIwMjIKLSAgICAgICAg ICAgICAgNiB8IFBvaXJvdCAgICAgICAgICAgfCBCZXJsaW4gICAgICB8ICAgICAgICAgMTAwMCB8 IDAzLTAxLTIwMjIKLSAgICAgICAgICAgICAxMiB8IFNtaXRoICAgICAgICAgICAgfCBLeWl2ICAg ICAgICB8ICAgICAgICAgIDM1MCB8IDAzLTEwLTIwMjIKLSAgICAgICAgICAgICAxMyB8IEdhbmRp ICAgICAgICAgICAgfCBXYXJzYXcgICAgICB8ICAgICAgICAgIDE1MCB8IDAzLTA4LTIwMjIKLSgx MCByb3dzKQotCiAtLSBVc2UgaW5kZXhzY2FuIGZvciB0ZXN0aW5nIGluZGV4ZXMgYWZ0ZXIgbWVy Z2luZyBwYXJ0aXRpb25zCiBTRVQgZW5hYmxlX3NlcXNjYW4gPSBPRkY7CiBTRUxFQ1QgKiBGUk9N IHNhbGVzX2FsbCBXSEVSRSBzYWxlc19zdGF0ZSA9ICdXYXJzYXcnOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKaW5kZXggMmNkZDU4YjIwMDguLmJmOGFjYzUxMzZjIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKQEAgLTQyLDYgKzQyLDEw IEBAIEFMVEVSIFRBQkxFIHNhbGVzX3JhbmdlIE1FUkdFIFBBUlRJVElPTlMgKHNhbGVzX2ZlYjIw MjIsIHNhbGVzX21hcjIwMjIsIHBhcnRpdGlvCiAtLUVSUk9SLCBzYWxlc19hcHJfMiBhbHJlYWR5 IGV4aXN0cwogQUxURVIgVEFCTEUgc2FsZXNfcmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNf ZmViMjAyMiwgc2FsZXNfbWFyMjAyMiwgc2FsZXNfamFuMjAyMikgSU5UTyBzYWxlc19hcHJfMjsK IAorQ1JFQVRFIFZJRVcgamFuMjAyMnYgYXMgU0VMRUNUICogRlJPTSBzYWxlc19qYW4yMDIyOwor QUxURVIgVEFCTEUgc2FsZXNfcmFuZ2UgTUVSR0UgUEFSVElUSU9OUyAoc2FsZXNfamFuMjAyMiwg c2FsZXNfZmViMjAyMikgSU5UTyBzYWxlc19kZWNfamFuX2ZlYjIwMjI7CitEUk9QIFZJRVcgamFu MjAyMnY7CisKIC0tIE5PIEVSUk9SOiB0ZXN0IGZvciBjdXN0b20gcGFydGl0aW9ucyBvcmRlciwg c291cmNlIHBhcnRpdGlvbnMgbm90IGluIHRoZSBzZWFyY2hfcGF0aAogU0VUIHNlYXJjaF9wYXRo ID0gcGFydGl0aW9uc19tZXJnZV9zY2hlbWEyLCBwdWJsaWM7CiBBTFRFUiBUQUJMRSBwYXJ0aXRp b25zX21lcmdlX3NjaGVtYS5zYWxlc19yYW5nZSBNRVJHRSBQQVJUSVRJT05TICgKQEAgLTQxNCw5 ICs0MTgsNyBAQCBBTFRFUiBUQUJMRSBzYWxlc19saXN0IE1FUkdFIFBBUlRJVElPTlMgKHNhbGVz X3dlc3QsIHNhbGVzX2Vhc3QsIHNhbGVzX2NlbnRyYWwpCiAtLSBzaG93IHBhcnRpdGlvbnMgd2l0 aCBjb25kaXRpb25zOgogRVhFQ1VURSBnZXRfcGFydGl0aW9uX2luZm8oJ3tzYWxlc19saXN0fScp OwogCi1TRUxFQ1QgKiBGUk9NIHNhbGVzX2xpc3Q7Ci1TRUxFQ1QgKiBGUk9NIHNhbGVzX25vcmQ7 Ci1TRUxFQ1QgKiBGUk9NIHNhbGVzX2FsbDsKK1NFTEVDVCB0YWJsZW9pZDo6cmVnY2xhc3MsICog RlJPTSBzYWxlc19saXN0IE9SREVSIEJZIHRhYmxlb2lkLCBzYWxlc3BlcnNvbl9pZDsKIAogLS0g VXNlIGluZGV4c2NhbiBmb3IgdGVzdGluZyBpbmRleGVzIGFmdGVyIG1lcmdpbmcgcGFydGl0aW9u cwogU0VUIGVuYWJsZV9zZXFzY2FuID0gT0ZGOwotLSAKMi4zNC4xCgo= --000000000000c1228f0637cfc572--