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 1rcji1-001mVr-Fz for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Feb 2024 10:20:14 +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 1rcjhy-0044rA-QF for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Feb 2024 10:20:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rcjhy-0044r2-B7 for pgsql-hackers@lists.postgresql.org; Wed, 21 Feb 2024 10:20:11 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rcjhv-0009dl-83 for pgsql-hackers@lists.postgresql.org; Wed, 21 Feb 2024 10:20:10 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-607dec82853so60379077b3.3 for ; Wed, 21 Feb 2024 02:20:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708510805; x=1709115605; 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=Fkho3TEvFQ4O9ZAGnRpvjFysc0MGckOWnG38giY2cAs=; b=JUkYJ5URJca7cMbWf30ZyXQnKgcsOVcgsdQZ3mGg22Cc9+4v/zsW84EhhsvmT+098i fLOb2Wlj0rAV9I5eX4rB6ayyXf447wVzAv4p+24LxnLB4d+NrGGmpfIP2QOMesCKelMc N6p3o1rAhssQob4TdLOcJ1VW929JmvPqA4mBaAaJP4G4XFRFdk60A5gYpzyrAo47J401 rzfeYg/nDhm2eK+ccG4QCor9/WOGrOwJDQlhYxJu8KYKWH4ypqDjabkjrPVHe22zNyT5 gYmOyttmjrtc14xy2AJ0kDqoQ4L0yw95ZIGpdm0niYAajlXq9DxxYpK/daEAdN6c8WTT gSxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708510805; x=1709115605; 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=Fkho3TEvFQ4O9ZAGnRpvjFysc0MGckOWnG38giY2cAs=; b=JiX1M5WeyYYOZFzuqm05dTSEy0UUnvlDxQCS4mV3xEZCNATx83Jz25GgW4BxF22IV1 jrEd1XU+fMS4NG7S6JGJiGZDH98F5k7yQLi0Wm38XER8IxHo+XkS7qY4fJSAwL/z9u+r vjmKrWQ/mLM4mM2Rekk4iUEc2XBptfMalrTODvGUpI1VAFr++cghihYw/W3IAmBufqGB mXLwdVBMhzeaTrHuYfVWVOxNAUZr6rpo38yZ2fUumAc0FJVJ7wrJnDruZwYbdUkH175S r//YV1aTinjE8s9o9Lc9GeYse+rF4DCt9tAJ2qL6rBIgnm4kq4tlVTEakiTQHA4ft3v7 UbJw== X-Forwarded-Encrypted: i=1; AJvYcCWca5ERpnt/OdYQinG2K4P0xe31ii54TJ6VMFfoO+IgD2aLKjqiUJp+s3VD2c72kIktasBoCf2w2+gEP2AjZdqWdCfrrjCrwMXHbp/zoLFKe2+z X-Gm-Message-State: AOJu0Yz8JqVwVQKuClwTLN3gL25huWtFcice26IzyLBchdtYWDwyc3JP LxEG+rLQ+J5qsoijYr3cuzGLpgpnRSKAYdLgjeVjwEvZLLDc3ywnqhbWTwSj+ywoEw+DD9PSM65 Uwg8ZLvNoij7xFc15nqnxOrzwY+4= X-Google-Smtp-Source: AGHT+IGcVMyWp1xKjiNvzI+WyxDsh3jps8mqPRmQrwiDzbzcpW0c2+qDrgUe3fUkUSzZrCNb7ptE2sn26xmbIRNnXhw= X-Received: by 2002:a0d:dd03:0:b0:607:8177:660 with SMTP id g3-20020a0ddd03000000b0060781770660mr16458732ywe.47.1708510805446; Wed, 21 Feb 2024 02:20:05 -0800 (PST) MIME-Version: 1.0 References: <3046975.1706839355@sss.pgh.pa.us> In-Reply-To: From: Alexander Korotkov Date: Wed, 21 Feb 2024 12:19:53 +0200 Message-ID: Subject: Re: POC: GROUP BY optimization To: Richard Guo Cc: Andrei Lepikhov , Tom Lane , Pavel Borisov , vignesh C , PostgreSQL Developers , Tomas Vondra , Teodor Sigaev , David Rowley , "a.rybakina" Content-Type: multipart/mixed; boundary="000000000000a767900611e1abdf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a767900611e1abdf Content-Type: text/plain; charset="UTF-8" Hi, Richard! > What do you think about the revisions for the test cases? I've rebased your patch upthread. Did some minor beautifications. > * The table 'btg' is inserted with 10000 tuples, which seems a bit > expensive for a test. I don't think we need such a big table to test > what we want. Your patch reduces the number of rows to 1000 tuples. I found it possible to further reduce it to 100 tuples. That also allowed me to save the plan in the test case introduced by e1b7fde418. Please check if you're OK with the patch attached. ------ Regards, Alexander Korotkov --000000000000a767900611e1abdf Content-Type: application/octet-stream; name="0001-Multiple-revises-for-the-GROUP-BY-reordering-test-v2.patch" Content-Disposition: attachment; filename="0001-Multiple-revises-for-the-GROUP-BY-reordering-test-v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsvn63u20 RnJvbSAzZGExMmRlZmU2N2VmY2IxMGNhNzE5YmQwYmQ2NGUyYWNmNmIzN2ZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogV2VkLCAyMSBGZWIgMjAyNCAxMTo0MzowMCArMDIwMApTdWJqZWN0OiBb UEFUQ0hdIE11bHRpcGxlIHJldmlzZXMgZm9yIHRoZSBHUk9VUCBCWSByZW9yZGVyaW5nIHRlc3Rz CgpSZXBvcnRlZC1ieTogUmljaGFyZCBHdW8KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQU1iV3M0X05GMHN0dXBNOGd1YXNDX3lDSnhkVHZScW0zYSUyQkpMYXJqdkF4Y0gzMTRUUSU0 MG1haWwuZ21haWwuY29tCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVz Lm91dCB8IDE4NSArKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwv YWdncmVnYXRlcy5zcWwgICAgICB8ICA5MCArKysrKystLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAx MjYgaW5zZXJ0aW9ucygrKSwgMTQ5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2FnZ3JlZ2F0ZXMub3V0CmluZGV4IGRiYTZmMjMwMDE0Li4xMjQ2MGJjYjdmNSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0yNzI4LDI5ICsyNzI4LDIw IEBAIFNFTEVDVCBiYWxrKGh1bmRyZWQpIEZST00gdGVuazE7CiAoMSByb3cpCiAKIFJPTExCQUNL OwotLS0gR1JPVVAgQlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXIgY29sdW1ucworLS0gR1JPVVAg Qlkgb3B0aW1pemF0aW9uIGJ5IHJlb3JkZXJpbmcgR1JPVVAgQlkgY2xhdXNlcwogQ1JFQVRFIFRB QkxFIGJ0ZyBBUyBTRUxFQ1QKLSAgaSAlIDEwMCBBUyB4LAotICBpICUgMTAwIEFTIHksCisgIGkg JSAxMCBBUyB4LAorICBpICUgMTAgQVMgeSwKICAgJ2FiYycgfHwgaSAlIDEwIEFTIHosCiAgIGkg QVMgdwotRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgQVMgaTsKLUNSRUFURSBJTkRFWCBi dGdfeF95X2lkeCBPTiBidGcoeCx5KTsKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgQVMg aTsKK0NSRUFURSBJTkRFWCBidGdfeF95X2lkeCBPTiBidGcoeCwgeSk7CiBBTkFMWVpFIGJ0ZzsK LS0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMgYnkgZnJlcXVlbmN5 Ci1TRVQgZW5hYmxlX2hhc2hhZ2c9b2ZmOwotU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzPSAwOwot U0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOwotLS0gVXRpbGl6ZSBpbmRl eCBzY2FuIG9yZGVyaW5nIHRvIGF2b2lkIGEgU29ydCBvcGVyYXRpb24KLUVYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHgseTsKLSAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gR3JvdXBBZ2dyZWdhdGUKLSAgIEdyb3Vw IEtleTogeCwgeQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBidGdfeF95X2lkeCBvbiBi dGcKLSgzIHJvd3MpCi0KLUVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGNvdW50KCopIEZST00g YnRnIEdST1VQIEJZIHkseDsKK1NFVCBlbmFibGVfaGFzaGFnZyA9IG9mZjsKK1NFVCBlbmFibGVf c2Vxc2NhbiA9IG9mZjsKKy0tIFV0aWxpemUgdGhlIG9yZGVyaW5nIG9mIGluZGV4IHNjYW4gdG8g YXZvaWQgYSBTb3J0IG9wZXJhdGlvbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRnIEdST1VQIEJZIHksIHg7CiAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIEdyb3VwQWdncmVnYXRlCkBAIC0yNzU5LDIxICsyNzUwLDExIEBAIEVY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHkseDsK ICgzIHJvd3MpCiAKIC0tIEVuZ2FnZSBpbmNyZW1lbnRhbCBzb3J0Ci1leHBsYWluIChDT1NUUyBP RkYpIFNFTEVDVCB4LHkgRlJPTSBidGcgR1JPVVAgQlkgeCx5LHosdzsKLSAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBHcm91cAotICAgR3JvdXAgS2V5OiB4LCB5 LCB6LCB3Ci0gICAtPiAgSW5jcmVtZW50YWwgU29ydAotICAgICAgICAgU29ydCBLZXk6IHgsIHks IHosIHcKLSAgICAgICAgIFByZXNvcnRlZCBLZXk6IHgsIHkKLSAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGJ0Z194X3lfaWR4IG9uIGJ0ZwotKDYgcm93cykKLQotZXhwbGFpbiAoQ09TVFMg T0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZIHoseSx3LHg7CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgeiwgeSwgdywgeDsKICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBHcm91cAorIEdyb3Vw QWdncmVnYXRlCiAgICBHcm91cCBLZXk6IHgsIHksIHosIHcKICAgIC0+ICBJbmNyZW1lbnRhbCBT b3J0CiAgICAgICAgICBTb3J0IEtleTogeCwgeSwgeiwgdwpAQCAtMjc4MSwzNSArMjc2MiwxMyBA QCBleHBsYWluIChDT1NUUyBPRkYpIFNFTEVDVCB4LHkgRlJPTSBidGcgR1JPVVAgQlkgeix5LHcs eDsKICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194X3lfaWR4IG9uIGJ0ZwogKDYg cm93cykKIAotZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZ IHcseix4LHk7Ci0gICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g R3JvdXAKLSAgIEdyb3VwIEtleTogeCwgeSwgdywgegotICAgLT4gIEluY3JlbWVudGFsIFNvcnQK LSAgICAgICAgIFNvcnQgS2V5OiB4LCB5LCB3LCB6Ci0gICAgICAgICBQcmVzb3J0ZWQgS2V5OiB4 LCB5Ci0gICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBidGdfeF95X2lkeCBvbiBidGcKLSg2 IHJvd3MpCi0KLWV4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseSBGUk9NIGJ0ZyBHUk9VUCBC WSB3LHgseix5OwotICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IEdyb3VwCi0gICBHcm91cCBLZXk6IHgsIHksIHcsIHoKLSAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0 Ci0gICAgICAgICBTb3J0IEtleTogeCwgeSwgdywgegotICAgICAgICAgUHJlc29ydGVkIEtleTog eCwgeQotICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYnRnX3hfeV9pZHggb24gYnRnCi0o NiByb3dzKQotCi0tLSBTdWJxdWVyaWVzCi1leHBsYWluIChDT1NUUyBPRkYpIFNFTEVDVCB4LHkK LUZST00gKFNFTEVDVCAqIEZST00gYnRnIE9SREVSIEJZIHgseSx3LHopIEFTIHExCi1HUk9VUCBC WSAodyx4LHoseSk7CistLSBVdGlsaXplIHRoZSBvcmRlcmluZyBvZiBzdWJxdWVyeSBzY2FuIHRv IGF2b2lkIGEgU29ydCBvcGVyYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIGNvdW50 KCopCitGUk9NIChTRUxFQ1QgKiBGUk9NIGJ0ZyBPUkRFUiBCWSB4LCB5LCB3LCB6KSBBUyBxMQor R1JPVVAgQlkgdywgeCwgeiwgeTsKICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSBHcm91cAorIEdyb3VwQWdncmVnYXRlCiAgICBHcm91cCBLZXk6IGJ0Zy54LCBi dGcueSwgYnRnLncsIGJ0Zy56CiAgICAtPiAgSW5jcmVtZW50YWwgU29ydAogICAgICAgICAgU29y dCBLZXk6IGJ0Zy54LCBidGcueSwgYnRnLncsIGJ0Zy56CkBAIC0yODE3LDM4ICsyNzc2LDUyIEBA IEdST1VQIEJZICh3LHgseix5KTsKICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194 X3lfaWR4IG9uIGJ0ZwogKDYgcm93cykKIAotZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx5 Ci1GUk9NIChTRUxFQ1QgKiBGUk9NIGJ0ZyBPUkRFUiBCWSB4LHksdyx6IExJTUlUIDEwMCkgQVMg cTEKLUdST1VQIEJZICh3LHgseix5KTsKLSAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBHcm91cAotICAgR3JvdXAgS2V5OiBidGcueCwgYnRn LnksIGJ0Zy53LCBidGcuegotICAgLT4gIExpbWl0Ci0gICAgICAgICAtPiAgSW5jcmVtZW50YWwg U29ydAotICAgICAgICAgICAgICAgU29ydCBLZXk6IGJ0Zy54LCBidGcueSwgYnRnLncsIGJ0Zy56 Ci0gICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBidGcueCwgYnRnLnkKLSAgICAgICAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194X3lfaWR4IG9uIGJ0ZwotKDcgcm93cykKKy0t IFV0aWxpemUgdGhlIG9yZGVyaW5nIG9mIG1lcmdlIGpvaW4gdG8gYXZvaWQgYSBmdWxsIFNvcnQg b3BlcmF0aW9uCitTRVQgZW5hYmxlX2hhc2hqb2luID0gb2ZmOworU0VUIGVuYWJsZV9uZXN0bG9v cCA9IG9mZjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorICBGUk9NIGJ0 ZyB0MSBKT0lOIGJ0ZyB0MiBPTiB0MS56ID0gdDIueiBBTkQgdDEudyA9IHQyLncgQU5EIHQxLngg PSB0Mi54CisgIEdST1VQIEJZIHQxLngsIHQxLnksIHQxLnosIHQxLnc7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdy b3VwIEtleTogdDEueiwgdDEudywgdDEueCwgdDEueQorICAgLT4gIEluY3JlbWVudGFsIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiB0MS56LCB0MS53LCB0MS54LCB0MS55CisgICAgICAgICBQcmVz b3J0ZWQgS2V5OiB0MS56LCB0MS53LCB0MS54CisgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAg ICAgICAgICAgICAgTWVyZ2UgQ29uZDogKCh0MS56ID0gdDIueikgQU5EICh0MS53ID0gdDIudykg QU5EICh0MS54ID0gdDIueCkpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IHQxLnosIHQxLncsIHQxLngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194X3lfaWR4IG9uIGJ0ZyB0MQorICAgICAgICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi56LCB0Mi53LCB0 Mi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBidGdfeF95X2lk eCBvbiBidGcgdDIKKygxMyByb3dzKQogCitSRVNFVCBlbmFibGVfbmVzdGxvb3A7CitSRVNFVCBl bmFibGVfaGFzaGpvaW47CiAtLSBTaG91bGQgd29yayB3aXRoIGFuZCB3aXRob3V0IEdST1VQLUJZ IG9wdGltaXphdGlvbgotZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdS T1VQIEJZIHcseCx6LHkgT1JERVIgQlkgeSx4LHosdzsKLSAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gR3JvdXAKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB3LCB4LCB6LCB5 IE9SREVSIEJZIHksIHgsIHosIHc7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKICAgIEdyb3VwIEtleTogeSwgeCwgeiwgdwogICAg LT4gIFNvcnQKICAgICAgICAgIFNvcnQgS2V5OiB5LCB4LCB6LCB3Ci0gICAgICAgICAtPiAgU2Vx IFNjYW4gb24gYnRnCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBidGdfeF95X2lkeCBv biBidGcKICg1IHJvd3MpCiAKIC0tIFV0aWxpemUgaW5jcmVtZW50YWwgc29ydCB0byBtYWtlIHRo ZSBPUkRFUiBCWSBydWxlIGEgYml0IGNoZWFwZXIKLWV4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNU IHgsdyBGUk9NIGJ0ZyBHUk9VUCBCWSB3LHgseSx6IE9SREVSIEJZIHgqeCx6OworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHcsIHgsIHksIHog T1JERVIgQlkgeCp4LCB6OwogICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogIFNvcnQKICAgIFNvcnQgS2V5OiAoKHggKiB4KSksIHoKLSAgIC0+ ICBHcm91cAorICAgLT4gIEdyb3VwQWdncmVnYXRlCiAgICAgICAgICBHcm91cCBLZXk6IHgsIHks IHcsIHoKICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CiAgICAgICAgICAgICAgICBTb3J0 IEtleTogeCwgeSwgdywgegpAQCAtMjg1NiwyMyArMjgyOSwyMiBAQCBleHBsYWluIChDT1NUUyBP RkYpIFNFTEVDVCB4LHcgRlJPTSBidGcgR1JPVVAgQlkgdyx4LHkseiBPUkRFUiBCWSB4KngsejsK ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194X3lfaWR4IG9uIGJ0Zwog KDggcm93cykKIAotU0VUIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb2ZmOwotLS0gVGhlIGNh c2Ugd2hlbiB0aGUgbnVtYmVyIG9mIGluY29taW5nIHN1YnRyZWUgcGF0aCBrZXlzIGlzIG1vcmUg dGhhbgorLS0gVGVzdCB0aGUgY2FzZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGluY29taW5nIHN1YnRy ZWUgcGF0aCBrZXlzIGlzIG1vcmUgdGhhbgogLS0gdGhlIG51bWJlciBvZiBncm91cGluZyBrZXlz LgotQ1JFQVRFIElOREVYIGlkeF95X3hfeiBPTiBidGcoeSx4LHcpOworQ1JFQVRFIElOREVYIGJ0 Z195X3hfd19pZHggT04gYnRnKHksIHgsIHcpOwogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQotU0VMRUNUIHkseCxhcnJheV9hZ2coZGlzdGluY3QgdykgRlJPTSBidGcgV0hFUkUgeSA8IDAg R1JPVVAgQlkgeCx5OwotICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCitTRUxFQ1QgeSwgeCwgYXJyYXlfYWdnKGRpc3RpbmN0IHcpCisgIEZST00gYnRn IFdIRVJFIHkgPCAwIEdST1VQIEJZIHgsIHk7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEdyb3VwQWdncmVnYXRlCiAgICBPdXRw dXQ6IHksIHgsIGFycmF5X2FnZyhESVNUSU5DVCB3KQogICAgR3JvdXAgS2V5OiBidGcueSwgYnRn LngKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgaWR4X3lfeF96IG9uIHB1YmxpYy5idGcK KyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRnX3lfeF93X2lkeCBvbiBwdWJsaWMuYnRn CiAgICAgICAgICBPdXRwdXQ6IHksIHgsIHcKICAgICAgICAgIEluZGV4IENvbmQ6IChidGcueSA8 IDApCiAoNiByb3dzKQogCi1SRVNFVCBlbmFibGVfaW5jcmVtZW50YWxfc29ydDsKIC0tIENoZWNr IHdlIGRvbid0IHBpY2sgYWdncmVnYXRlIHBhdGgga2V5IGluc3RlYWQgb2YgZ3JvdXBpbmcgcGF0 aCBrZXkKIENSRUFURSBUQUJMRSBncm91cF9hZ2dfcGsgQVMgU0VMRUNUCiAgIGkgJSAxMCBBUyB4 LApAQCAtMjg5NywzNyArMjg2OSwzNyBAQCBHUk9VUCBCWSBjMS53LCBjMS56OwogUkVTRVQgZW5h YmxlX25lc3Rsb29wOwogUkVTRVQgZW5hYmxlX2hhc2hqb2luOwogRFJPUCBUQUJMRSBncm91cF9h Z2dfcGs7Ci0tLSBUaGUgY2FzZSwgd2hlbiBzY2FubmluZyBzb3J0IG9yZGVyIGNvcnJlc3BvbmQg dG8gYWdncmVnYXRlIHNvcnQgb3JkZXIgYnV0Ci0tLSBjYW4gbm90IGJlIGZvdW5kIGluIHRoZSBn cm91cC1ieSBsaXN0CistLSBUZXN0IHRoZSBjYXNlIHdoZXJlIHRoZSB0aGUgb3JkZXJpbmcgb2Yg c2NhbiBtYXRjaGVzIHRoZSBvcmRlcmluZyB3aXRoaW4gdGhlCistLSBhZ2dyZWdhdGUgYnV0IGNh bm5vdCBiZSBmb3VuZCBpbiB0aGUgZ3JvdXAtYnkgbGlzdAogQ1JFQVRFIFRBQkxFIGFnZ19zb3J0 X29yZGVyIChjMSBpbnQgUFJJTUFSWSBLRVksIGMyIGludCk7Ci1DUkVBVEUgVU5JUVVFIElOREVY IE9OIGFnZ19zb3J0X29yZGVyKGMyKTsKLWV4cGxhaW4gKGNvc3RzIG9mZikKK0NSRUFURSBVTklR VUUgSU5ERVggYWdnX3NvcnRfb3JkZXJfYzJfaWR4IE9OIGFnZ19zb3J0X29yZGVyKGMyKTsKK0lO U0VSVCBJTlRPIGFnZ19zb3J0X29yZGVyIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKWk7CitBTkFMWVpFIGFnZ19zb3J0X29yZGVyOworRVhQTEFJTiAoQ09TVFMgT0ZGKQog U0VMRUNUIGFycmF5X2FnZyhjMSBPUkRFUiBCWSBjMiksYzIKIEZST00gYWdnX3NvcnRfb3JkZXIg V0hFUkUgYzIgPCAxMDAgR1JPVVAgQlkgYzEgT1JERVIgQlkgMjsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFNvcnQK ICAgIFNvcnQgS2V5OiBjMgogICAgLT4gIEdyb3VwQWdncmVnYXRlCiAgICAgICAgICBHcm91cCBL ZXk6IGMxCiAgICAgICAgICAtPiAgU29ydAogICAgICAgICAgICAgICAgU29ydCBLZXk6IGMxLCBj MgotICAgICAgICAgICAgICAgLT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gYWdnX3NvcnRfb3JkZXIK LSAgICAgICAgICAgICAgICAgICAgIFJlY2hlY2sgQ29uZDogKGMyIDwgMTAwKQotICAgICAgICAg ICAgICAgICAgICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIGFnZ19zb3J0X29yZGVyX2MyX2lk eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGMyIDwgMTAwKQotKDEw IHJvd3MpCisgICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBhZ2dfc29ydF9vcmRl cl9jMl9pZHggb24gYWdnX3NvcnRfb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChjMiA8IDEwMCkKKyg4IHJvd3MpCiAKIERST1AgVEFCTEUgYWdnX3NvcnRfb3JkZXIgQ0FT Q0FERTsKIC0tIENoZWNrLCB0aGF0IEdST1VQLUJZIHJlb3JkZXJpbmcgb3B0aW1pemF0aW9uIGNh biBvcGVyYXRlIHdpdGggcGF0aGtleXMsIGJ1aWx0Ci0tLSBieSBwbGFubmVyIGl0c2VsZi4gRm9y IGV4YW1wbGUsIGJ5IE1lcmdlSm9pbi4KKy0tIGJ5IHBsYW5uZXIgaXRzZWxmLiAgRm9yIGV4YW1w bGUsIGJ5IE1lcmdlSm9pbi4KIFNFVCBlbmFibGVfaGFzaGpvaW4gPSBvZmY7CiBTRVQgZW5hYmxl X25lc3Rsb29wID0gb2ZmOwotZXhwbGFpbiAoQ09TVFMgT0ZGKQotU0VMRUNUIGIxLngsYjEudyBG Uk9NIGJ0ZyBiMSBKT0lOIGJ0ZyBiMiBPTiAoYjEuej1iMi56IEFORCBiMS53PWIyLncpCi1HUk9V UCBCWSBiMS54LGIxLnosYjEudyBPUkRFUiBCWSBiMS56LCBiMS53LCBiMS54KmIxLng7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYjEueCwgYjEu dyBGUk9NIGJ0ZyBiMSBKT0lOIGJ0ZyBiMiBPTiAoYjEueiA9IGIyLnogQU5EIGIxLncgPSBiMi53 KQorR1JPVVAgQlkgYjEueCwgYjEueiwgYjEudyBPUkRFUiBCWSBiMS56LCBiMS53LCBiMS54KmIx Lng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW5jcmVtZW50YWwgU29ydAogICAg U29ydCBLZXk6IGIxLnosIGIxLncsICgoYjEueCAqIGIxLngpKQogICAgUHJlc29ydGVkIEtleTog YjEueiwgYjEudwpAQCAtMjk0MCw3ICsyOTEyLDcgQEAgR1JPVVAgQlkgYjEueCxiMS56LGIxLncg T1JERVIgQlkgYjEueiwgYjEudywgYjEueCpiMS54OwogICAgICAgICAgICAgICAgICAgICAgTWVy Z2UgQ29uZDogKChiMS56ID0gYjIueikgQU5EIChiMS53ID0gYjIudykpCiAgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGIx LnosIGIxLncKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBidGcg YjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z194 X3lfaWR4IG9uIGJ0ZyBiMQogICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBiMi56LCBiMi53CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnRnIGIyCkBAIC0yOTUwLDggKzI5MjIsNyBAQCBS RVNFVCBlbmFibGVfaGFzaGpvaW47CiBSRVNFVCBlbmFibGVfbmVzdGxvb3A7CiBEUk9QIFRBQkxF IGJ0ZzsKIFJFU0VUIGVuYWJsZV9oYXNoYWdnOwotUkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnM7 Ci1SRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworUkVTRVQgZW5hYmxlX3Nl cXNjYW47CiAtLSBTZWNvbmRseSB0ZXN0IHRoZSBjYXNlIG9mIGEgcGFyYWxsZWwgYWdncmVnYXRl IGNvbWJpbmVyIGZ1bmN0aW9uCiAtLSByZXR1cm5pbmcgTlVMTC4gRm9yIHRoYXQgdXNlIG5vcm1h bCB0cmFuc2l0aW9uIGZ1bmN0aW9uLCBidXQgYQogLS0gY29tYmluZXIgZnVuY3Rpb24gcmV0dXJu aW5nIE5VTEwuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCmluZGV4IGQ2ZWQ1ZDBlZmZh Li4zYzc1YzJhYWE2NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRl cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKQEAgLTExODEs NTMgKzExODEsNTYgQEAgU0VMRUNUIGJhbGsoaHVuZHJlZCkgRlJPTSB0ZW5rMTsKIAogUk9MTEJB Q0s7CiAKLS0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMKKy0tIEdS T1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyaW5nIEdST1VQIEJZIGNsYXVzZXMKIENSRUFU RSBUQUJMRSBidGcgQVMgU0VMRUNUCi0gIGkgJSAxMDAgQVMgeCwKLSAgaSAlIDEwMCBBUyB5LAor ICBpICUgMTAgQVMgeCwKKyAgaSAlIDEwIEFTIHksCiAgICdhYmMnIHx8IGkgJSAxMCBBUyB6LAog ICBpIEFTIHcKLUZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIEFTIGk7Ci1DUkVBVEUgSU5E RVggYnRnX3hfeV9pZHggT04gYnRnKHgseSk7CitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAp IEFTIGk7CitDUkVBVEUgSU5ERVggYnRnX3hfeV9pZHggT04gYnRnKHgsIHkpOwogQU5BTFlaRSBi dGc7CiAKLS0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMgYnkgZnJl cXVlbmN5Ci0KLVNFVCBlbmFibGVfaGFzaGFnZz1vZmY7Ci1TRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnM9IDA7Ci1TRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5h YmxlX2hhc2hhZ2cgPSBvZmY7CitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CiAKLS0tIFV0aWxp emUgaW5kZXggc2NhbiBvcmRlcmluZyB0byBhdm9pZCBhIFNvcnQgb3BlcmF0aW9uCi1FWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB4LHk7Ci1FWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB5LHg7Cist LSBVdGlsaXplIHRoZSBvcmRlcmluZyBvZiBpbmRleCBzY2FuIHRvIGF2b2lkIGEgU29ydCBvcGVy YXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9V UCBCWSB5LCB4OwogCiAtLSBFbmdhZ2UgaW5jcmVtZW50YWwgc29ydAotZXhwbGFpbiAoQ09TVFMg T0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZIHgseSx6LHc7Ci1leHBsYWluIChDT1NU UyBPRkYpIFNFTEVDVCB4LHkgRlJPTSBidGcgR1JPVVAgQlkgeix5LHcseDsKLWV4cGxhaW4gKENP U1RTIE9GRikgU0VMRUNUIHgseSBGUk9NIGJ0ZyBHUk9VUCBCWSB3LHoseCx5OwotZXhwbGFpbiAo Q09TVFMgT0ZGKSBTRUxFQ1QgeCx5IEZST00gYnRnIEdST1VQIEJZIHcseCx6LHk7Ci0KLS0tIFN1 YnF1ZXJpZXMKLWV4cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseQotRlJPTSAoU0VMRUNUICog RlJPTSBidGcgT1JERVIgQlkgeCx5LHcseikgQVMgcTEKLUdST1VQIEJZICh3LHgseix5KTsKLWV4 cGxhaW4gKENPU1RTIE9GRikgU0VMRUNUIHgseQotRlJPTSAoU0VMRUNUICogRlJPTSBidGcgT1JE RVIgQlkgeCx5LHcseiBMSU1JVCAxMDApIEFTIHExCi1HUk9VUCBCWSAodyx4LHoseSk7CitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgeiwgeSwg dywgeDsKKworLS0gVXRpbGl6ZSB0aGUgb3JkZXJpbmcgb2Ygc3VicXVlcnkgc2NhbiB0byBhdm9p ZCBhIFNvcnQgb3BlcmF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCBjb3VudCgqKQor RlJPTSAoU0VMRUNUICogRlJPTSBidGcgT1JERVIgQlkgeCwgeSwgdywgeikgQVMgcTEKK0dST1VQ IEJZIHcsIHgsIHosIHk7CisKKy0tIFV0aWxpemUgdGhlIG9yZGVyaW5nIG9mIG1lcmdlIGpvaW4g dG8gYXZvaWQgYSBmdWxsIFNvcnQgb3BlcmF0aW9uCitTRVQgZW5hYmxlX2hhc2hqb2luID0gb2Zm OworU0VUIGVuYWJsZV9uZXN0bG9vcCA9IG9mZjsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjb3VudCgqKQorICBGUk9NIGJ0ZyB0MSBKT0lOIGJ0ZyB0MiBPTiB0MS56ID0gdDIueiBBTkQg dDEudyA9IHQyLncgQU5EIHQxLnggPSB0Mi54CisgIEdST1VQIEJZIHQxLngsIHQxLnksIHQxLnos IHQxLnc7CitSRVNFVCBlbmFibGVfbmVzdGxvb3A7CitSRVNFVCBlbmFibGVfaGFzaGpvaW47CiAK IC0tIFNob3VsZCB3b3JrIHdpdGggYW5kIHdpdGhvdXQgR1JPVVAtQlkgb3B0aW1pemF0aW9uCi1l eHBsYWluIChDT1NUUyBPRkYpIFNFTEVDVCB4LHkgRlJPTSBidGcgR1JPVVAgQlkgdyx4LHoseSBP UkRFUiBCWSB5LHgseix3OworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gYnRnIEdST1VQIEJZIHcsIHgsIHosIHkgT1JERVIgQlkgeSwgeCwgeiwgdzsKIAogLS0gVXRp bGl6ZSBpbmNyZW1lbnRhbCBzb3J0IHRvIG1ha2UgdGhlIE9SREVSIEJZIHJ1bGUgYSBiaXQgY2hl YXBlcgotZXhwbGFpbiAoQ09TVFMgT0ZGKSBTRUxFQ1QgeCx3IEZST00gYnRnIEdST1VQIEJZIHcs eCx5LHogT1JERVIgQlkgeCp4LHo7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQo KikgRlJPTSBidGcgR1JPVVAgQlkgdywgeCwgeSwgeiBPUkRFUiBCWSB4KngsIHo7CiAKLVNFVCBl bmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9mZjsKLS0tIFRoZSBjYXNlIHdoZW4gdGhlIG51bWJl ciBvZiBpbmNvbWluZyBzdWJ0cmVlIHBhdGgga2V5cyBpcyBtb3JlIHRoYW4KKy0tIFRlc3QgdGhl IGNhc2Ugd2hlcmUgdGhlIG51bWJlciBvZiBpbmNvbWluZyBzdWJ0cmVlIHBhdGgga2V5cyBpcyBt b3JlIHRoYW4KIC0tIHRoZSBudW1iZXIgb2YgZ3JvdXBpbmcga2V5cy4KLUNSRUFURSBJTkRFWCBp ZHhfeV94X3ogT04gYnRnKHkseCx3KTsKK0NSRUFURSBJTkRFWCBidGdfeV94X3dfaWR4IE9OIGJ0 Zyh5LCB4LCB3KTsKIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKLVNFTEVDVCB5LHgsYXJy YXlfYWdnKGRpc3RpbmN0IHcpIEZST00gYnRnIFdIRVJFIHkgPCAwIEdST1VQIEJZIHgseTsKLVJF U0VUIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0OworU0VMRUNUIHksIHgsIGFycmF5X2FnZyhkaXN0 aW5jdCB3KQorICBGUk9NIGJ0ZyBXSEVSRSB5IDwgMCBHUk9VUCBCWSB4LCB5OwogCiAtLSBDaGVj ayB3ZSBkb24ndCBwaWNrIGFnZ3JlZ2F0ZSBwYXRoIGtleSBpbnN0ZWFkIG9mIGdyb3VwaW5nIHBh dGgga2V5CiBDUkVBVEUgVEFCTEUgZ3JvdXBfYWdnX3BrIEFTIFNFTEVDVApAQCAtMTI0OCwyOSAr MTI1MSwzMiBAQCBSRVNFVCBlbmFibGVfbmVzdGxvb3A7CiBSRVNFVCBlbmFibGVfaGFzaGpvaW47 CiBEUk9QIFRBQkxFIGdyb3VwX2FnZ19wazsKIAotLS0gVGhlIGNhc2UsIHdoZW4gc2Nhbm5pbmcg c29ydCBvcmRlciBjb3JyZXNwb25kIHRvIGFnZ3JlZ2F0ZSBzb3J0IG9yZGVyIGJ1dAotLS0gY2Fu IG5vdCBiZSBmb3VuZCBpbiB0aGUgZ3JvdXAtYnkgbGlzdAorLS0gVGVzdCB0aGUgY2FzZSB3aGVy ZSB0aGUgdGhlIG9yZGVyaW5nIG9mIHNjYW4gbWF0Y2hlcyB0aGUgb3JkZXJpbmcgd2l0aGluIHRo ZQorLS0gYWdncmVnYXRlIGJ1dCBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGdyb3VwLWJ5IGxpc3QK IENSRUFURSBUQUJMRSBhZ2dfc29ydF9vcmRlciAoYzEgaW50IFBSSU1BUlkgS0VZLCBjMiBpbnQp OwotQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBhZ2dfc29ydF9vcmRlcihjMik7Ci1leHBsYWluIChj b3N0cyBvZmYpCitDUkVBVEUgVU5JUVVFIElOREVYIGFnZ19zb3J0X29yZGVyX2MyX2lkeCBPTiBh Z2dfc29ydF9vcmRlcihjMik7CitJTlNFUlQgSU5UTyBhZ2dfc29ydF9vcmRlciBTRUxFQ1QgaSwg aSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMClpOworQU5BTFlaRSBhZ2dfc29ydF9vcmRlcjsK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGFycmF5X2FnZyhjMSBPUkRFUiBCWSBjMiks YzIKIEZST00gYWdnX3NvcnRfb3JkZXIgV0hFUkUgYzIgPCAxMDAgR1JPVVAgQlkgYzEgT1JERVIg QlkgMjsKKwogRFJPUCBUQUJMRSBhZ2dfc29ydF9vcmRlciBDQVNDQURFOwogCiAtLSBDaGVjaywg dGhhdCBHUk9VUC1CWSByZW9yZGVyaW5nIG9wdGltaXphdGlvbiBjYW4gb3BlcmF0ZSB3aXRoIHBh dGhrZXlzLCBidWlsdAotLS0gYnkgcGxhbm5lciBpdHNlbGYuIEZvciBleGFtcGxlLCBieSBNZXJn ZUpvaW4uCistLSBieSBwbGFubmVyIGl0c2VsZi4gIEZvciBleGFtcGxlLCBieSBNZXJnZUpvaW4u CiBTRVQgZW5hYmxlX2hhc2hqb2luID0gb2ZmOwogU0VUIGVuYWJsZV9uZXN0bG9vcCA9IG9mZjsK LWV4cGxhaW4gKENPU1RTIE9GRikKLVNFTEVDVCBiMS54LGIxLncgRlJPTSBidGcgYjEgSk9JTiBi dGcgYjIgT04gKGIxLno9YjIueiBBTkQgYjEudz1iMi53KQotR1JPVVAgQlkgYjEueCxiMS56LGIx LncgT1JERVIgQlkgYjEueiwgYjEudywgYjEueCpiMS54OworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGIxLngsIGIxLncgRlJPTSBidGcgYjEgSk9JTiBidGcgYjIgT04gKGIxLnogPSBiMi56 IEFORCBiMS53ID0gYjIudykKK0dST1VQIEJZIGIxLngsIGIxLnosIGIxLncgT1JERVIgQlkgYjEu eiwgYjEudywgYjEueCpiMS54OwogUkVTRVQgZW5hYmxlX2hhc2hqb2luOwogUkVTRVQgZW5hYmxl X25lc3Rsb29wOwogCiBEUk9QIFRBQkxFIGJ0ZzsKIFJFU0VUIGVuYWJsZV9oYXNoYWdnOwotUkVT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnM7Ci1SRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyOworUkVTRVQgZW5hYmxlX3NlcXNjYW47CiAKIC0tIFNlY29uZGx5IHRlc3QgdGhlIGNh c2Ugb2YgYSBwYXJhbGxlbCBhZ2dyZWdhdGUgY29tYmluZXIgZnVuY3Rpb24KIC0tIHJldHVybmlu ZyBOVUxMLiBGb3IgdGhhdCB1c2Ugbm9ybWFsIHRyYW5zaXRpb24gZnVuY3Rpb24sIGJ1dCBhCi0t IAoyLjM5LjMgKEFwcGxlIEdpdC0xNDUpCgo= --000000000000a767900611e1abdf--