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 1sbs1c-0023ug-Ma for pgsql-general@arkaria.postgresql.org; Thu, 08 Aug 2024 01:33:08 +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 1sbs1a-00B5cf-5L for pgsql-general@arkaria.postgresql.org; Thu, 08 Aug 2024 01:33:06 +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 1sbs1Z-00B5cV-NK for pgsql-general@lists.postgresql.org; Thu, 08 Aug 2024 01:33:05 +0000 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sbs1S-003ihh-Ez for pgsql-general@lists.postgresql.org; Thu, 08 Aug 2024 01:33:04 +0000 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2ef2fccca2cso4132081fa.1 for ; Wed, 07 Aug 2024 18:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723080777; x=1723685577; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=TPcevXiXa7TtV36aCkT5h1kDQmvz0ftan5hicASeniI=; b=GkhV5d4D2rnyxMJ8jZTQH4v3gYOwa1bPuagKGplqzZdCepSf1zmyXrHEtisdtQfl58 6167OZsFvdSA3/bvoGJ1zKP+9c8kmwd9J5Ybbc9r5845ZGB8hcqqVrC0P5fJMgdo5Wk9 I7vnIbDqbYO0l2sTOkCkirVYq6Z0uGU7oSfl3h5LBitbvv5jyhwuLEYmq+DDnIfnoemL yvufghiXaozqG5TeKzTW2MjZX9lceweO2w5Z21Z9em86iaU+KEAGemovBfcZ2g3RYT+B sy5xR+xcgwLkBtAxYvRLupB32Bet3VW4gc3piHXYpQC49NdZWEBI/5Eiy3FOFzZqPQXI WmDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723080777; x=1723685577; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=TPcevXiXa7TtV36aCkT5h1kDQmvz0ftan5hicASeniI=; b=TcPogwrcnyeNf3VPYqQClsr3r0XWlDkI8PER2TLE4b6Dh1bSL9RH+WmRC+MPU/3DUO 6DX2sPQvLtFXETmBfPpGQdnS/H1ZEgYGzhlp9fUQ3V+UyYSVArJ5LTQQ8gFYwyYCNglt uOqA+WVvYo4R+nL0JwtQTVnN0M0JKEJMgyo4GjGt2x5r0GhTs0/ZBsoIdyF6wxrvRT9w DKsZTNx97+NfkozmLYilHrZVLXAQzjjZfGkRe5en41HiL7hXXYfbnSkBVZqtPDlXj6Py irqN28IzpnjuAnSU/S9mnbemHSDH/30h7PpiACU6d3h1e2i46yy8bOcEw1YEc69hcdId NyXw== X-Gm-Message-State: AOJu0YxycCvEQCFnwOELZOfcArG53TFlqc+H8WLUooVcAmz6hvFOSu3T Yy23cyMaceHk5NpkFtkbfUnL4CCOmJW9m0HaLGC61yjfipMZOdUbaTypqdCZw7IVifqnII+AItf IHhThUGrhsYdOda3kQG0/aMH1OYjh2kKddL6ohQ== X-Google-Smtp-Source: AGHT+IH37U0X6FFGBGzV7BUa6+YSLlu9yNhPfNO1LfyDeA3yhuZq4LeabZtU/qD6BYelczC9Q/BSo8ozvAou+DgO0hQ= X-Received: by 2002:a2e:9818:0:b0:2ef:26dc:efbe with SMTP id 38308e7fff4ca-2f19de89e67mr1713771fa.42.1723080776534; Wed, 07 Aug 2024 18:32:56 -0700 (PDT) MIME-Version: 1.0 From: dfgpostgres Date: Wed, 7 Aug 2024 21:32:45 -0400 Message-ID: Subject: How can I get a query-based subtotal in a select using group by rollup ? To: pgsql-general@lists.postgresql.org Content-Type: multipart/alternative; boundary="0000000000009ad14d061f2201c6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009ad14d061f2201c6 Content-Type: text/plain; charset="UTF-8" pg 15.3 on linux I don't even know if the title makes sense, I think it's better explained with an example This is the table... dvdb=# \d dispatch_tracker Table "regr.dispatch_tracker" Column | Type | Collation | Nullable | Default ---------------------+--------------------------+-----------+----------+--------- regression_name | character varying | | | domain_name | character varying | | | dispatch_status | character varying | | | total_tests | integer | | | tests_running | integer | | | tests_completed | integer | | | tests_passed | integer | | | tests_failed | integer | | | And this query.... select d.domain_name, d.total_tests, d.tests_completed, d.tests_passed, d.tests_failed, round(d.tests_completed*100.0/d.total_tests) as perc_tot_compl, round(d.tests_passed*100.0/d.tests_completed) as perc_compl_pass, round(d.tests_failed*100.0/d.tests_completed) as perc_compl_fail, round(d.tests_passed*100.0/d.total_tests) as perc_pass from (select domain_name, sum(total_tests) as total_tests, sum(tests_completed) as tests_completed, sum(tests_passed) as tests_passed, sum(tests_failed) as tests_failed, from regr.dispatch_tracker rt where rt.regression_name='2024_08_02_10_32_53_soundwave__er_common_regression__CL2017473_z1_soundwave_adm' group by rollup(rt.domain_name) order by rt.domain_name ASC NULLS LAST) d; ... generates something like this... domain_name | total_tests | tests_completed | tests_passed | tests_failed | perc_tot_compl | perc_compl_pass | perc_compl_fail | perc_pass -------------+-------------+-----------------+--------------+--------------+----------------+-----------------+-----------------+----------- ACP | 87 | 82 | 1 | 81 | 94 | 1 | 99 | 1 CDP | 28 | 27 | 0 | 27 | 96 | 0 | 100 | 0 COH | 102 | 67 | 0 | 67 | 66 | 0 | 100 | 0 DCN | 181 | 180 | 5 | 175 | 99 | 3 | 97 | 3 DFD | 458 | 292 | 25 | 267 | 64 | 9 | 91 | 5 DFT | 1302 | 830 | 0 | 830 | 64 | 0 | 100 | 0 GDP | 413 | 308 | 29 | 279 | 75 | 9 | 91 | 7 GFX | 96 | 72 | 1 | 71 | 75 | 1 | 99 | 1 INT | 9 | 2 | 0 | 2 | 22 | 0 | 100 | 0 IPU | 24 | | | | | | | IPU_SANITY | 2 | | | | | | | OSS | 43 | 43 | 0 | 43 | 100 | 0 | 100 | 0 PWR | 535 | 207 | 1 | 206 | 39 | 0 | 100 | 0 SEC | 172 | 128 | 3 | 125 | 74 | 2 | 98 | 2 UMSCH | 16 | | | | | | | VPE | 130 | 125 | 1 | 124 | 96 | 1 | 99 | 1 | 3598 | 2363 | 66 | 2297 | 66 | 3 | 97 | 2 (17 rows) Now, I want to add a new column that's a subset of the "total_tests" value. Specifically, I want to add a column called "dispatched" which is just the number of total_tests which have column "dispatch_status" = 'Y' This blows up, but shows the intent... select d.domain_name, d.total_tests, d.tests_completed, d.tests_passed, d.tests_failed, d.dispatched, round(d.tests_completed*100.0/d.total_tests) as perc_tot_compl, round(d.tests_passed*100.0/d.tests_completed) as perc_compl_pass, round(d.tests_failed*100.0/d.tests_completed) as perc_compl_fail, round(d.tests_passed*100.0/d.total_tests) as perc_pass from (select domain_name, sum(total_tests) as total_tests, sum(tests_completed) as tests_completed, sum(tests_passed) as tests_passed, sum(tests_failed) as tests_failed, (select count(*) from dispatch_tracker where regression_name=rt.regression_name and domain_name=rt.domain_name and dispatch_status='Y') as dispatched from regr.dispatch_tracker rt where rt.regression_name='2024_08_02_10_32_53_soundwave__er_common_regression__CL2017473_z1_soundwave_adm' group by rollup(rt.domain_name) order by rt.domain_name ASC NULLS LAST) d; The error... ERROR: subquery uses ungrouped column "rt.regression_name" from outer query LINE 19: ...nt(*) from dispatch_tracker where regression_name=rt.regress... Any help would be appreciated. Thanks -dave --0000000000009ad14d061f2201c6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5wZyAxNS4zIG9uIGxpbnV4PC9kaXY+PGRpdj48YnI+PC9kaXY+ PGRpdj5JIGRvbiYjMzk7dCBldmVuIGtub3cgaWYgdGhlIHRpdGxlIG1ha2VzIHNlbnNlLCBJIHRo aW5rIGl0JiMzOTtzIGJldHRlciBleHBsYWluZWQgd2l0aCBhbiBleGFtcGxlPC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj5UaGlzIGlzIHRoZSB0YWJsZS4uLjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlIj5kdmRiPSMgXGQgZGlzcGF0Y2hfdHJhY2tlcjxicj7C oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBUYWJsZSAmcXVvdDtyZWdyLmRp c3BhdGNoX3RyYWNrZXImcXVvdDs8YnI+wqAgwqAgwqAgwqBDb2x1bW4gwqAgwqAgwqAgwqB8IMKg IMKgIMKgIMKgIMKgIFR5cGUgwqAgwqAgwqAgwqAgwqAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8 IERlZmF1bHQgPGJyPi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLTxicj7CoHJlZ3Jlc3Npb25fbmFt ZSDCoCDCoCB8IGNoYXJhY3RlciB2YXJ5aW5nIMKgIMKgIMKgIMKgfCDCoCDCoCDCoCDCoCDCoCB8 IMKgIMKgIMKgIMKgIMKgfCA8YnI+wqBkb21haW5fbmFtZSDCoCDCoCDCoCDCoCB8IGNoYXJhY3Rl ciB2YXJ5aW5nIMKgIMKgIMKgIMKgfCDCoCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgfDxi cj7CoGRpc3BhdGNoX3N0YXR1cyDCoCDCoCB8IGNoYXJhY3RlciB2YXJ5aW5nIMKgIMKgIMKgIMKg fCDCoCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgfCA8YnI+wqB0b3RhbF90ZXN0cyDCoCDC oCDCoCDCoCB8IGludGVnZXIgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKg IMKgIHwgwqAgwqAgwqAgwqAgwqB8PGJyPsKgdGVzdHNfcnVubmluZyDCoCDCoCDCoCB8IGludGVn ZXIgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAg wqAgwqB8IDxicj7CoHRlc3RzX2NvbXBsZXRlZCDCoCDCoCB8IGludGVnZXIgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqB8IDxicj7CoHRl c3RzX3Bhc3NlZCDCoCDCoCDCoCDCoHwgaW50ZWdlciDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHwgwqAgwqAgwqAgwqAgwqAgfCDCoCDCoCDCoCDCoCDCoHwgPGJyPsKgdGVzdHNfZmFpbGVkIMKg IMKgIMKgIMKgfCBpbnRlZ2VyIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCDCoCDCoCDC oCDCoCB8IMKgIMKgIMKgIMKgIMKgfMKgPC9mb250Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48 ZGl2PkFuZCB0aGlzIHF1ZXJ5Li4uLjwvZGl2PjxkaXY+PGJyPjwvZGl2PnNlbGVjdDxicj7CoCBk LmRvbWFpbl9uYW1lLDxicj7CoCBkLnRvdGFsX3Rlc3RzLCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCA8YnI+wqAgZC50ZXN0c19jb21wbGV0ZWQsPGJyPsKgIGQudGVzdHNfcGFzc2VkLDxicj7C oCBkLnRlc3RzX2ZhaWxlZCw8YnI+wqAgcm91bmQoZC50ZXN0c19jb21wbGV0ZWQqMTAwLjAvZC50 b3RhbF90ZXN0cykgYXMgcGVyY190b3RfY29tcGwsPGJyPsKgIHJvdW5kKGQudGVzdHNfcGFzc2Vk KjEwMC4wL2QudGVzdHNfY29tcGxldGVkKSBhcyBwZXJjX2NvbXBsX3Bhc3MsPGJyPsKgIHJvdW5k KGQudGVzdHNfZmFpbGVkKjEwMC4wL2QudGVzdHNfY29tcGxldGVkKSBhcyBwZXJjX2NvbXBsX2Zh aWwsPGJyPsKgIHJvdW5kKGQudGVzdHNfcGFzc2VkKjEwMC4wL2QudG90YWxfdGVzdHMpIGFzIHBl cmNfcGFzczxicj5mcm9tIDxicj7CoCAoc2VsZWN0PGJyPsKgIMKgIGRvbWFpbl9uYW1lLDxicj7C oCDCoCBzdW0odG90YWxfdGVzdHMpIGFzIHRvdGFsX3Rlc3RzLDxicj7CoCDCoCBzdW0odGVzdHNf Y29tcGxldGVkKSBhcyB0ZXN0c19jb21wbGV0ZWQsPGJyPsKgIMKgIHN1bSh0ZXN0c19wYXNzZWQp IGFzIHRlc3RzX3Bhc3NlZCw8YnI+wqAgwqAgc3VtKHRlc3RzX2ZhaWxlZCkgYXMgdGVzdHNfZmFp bGVkLDxicj7CoCBmcm9tIDxicj7CoCDCoCByZWdyLmRpc3BhdGNoX3RyYWNrZXIgcnQgd2hlcmUg wqBydC5yZWdyZXNzaW9uX25hbWU9JiMzOTsyMDI0XzA4XzAyXzEwXzMyXzUzX3NvdW5kd2F2ZV9f ZXJfY29tbW9uX3JlZ3Jlc3Npb25fX0NMMjAxNzQ3M196MV9zb3VuZHdhdmVfYWRtJiMzOTs8YnI+ wqAgZ3JvdXAgYnkgcm9sbHVwKHJ0LmRvbWFpbl9uYW1lKSBvcmRlciBieSBydC5kb21haW5fbmFt ZSBBU0MgTlVMTFMgTEFTVCkgZDs8YnI+PGRpdj48YnI+PC9kaXY+PGRpdj4uLi4gZ2VuZXJhdGVz IHNvbWV0aGluZyBsaWtlIHRoaXMuLi48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGZh Y2U9Im1vbm9zcGFjZSI+wqBkb21haW5fbmFtZSB8IHRvdGFsX3Rlc3RzIHwgdGVzdHNfY29tcGxl dGVkIHwgdGVzdHNfcGFzc2VkIHwgdGVzdHNfZmFpbGVkIHwgcGVyY190b3RfY29tcGwgfCBwZXJj X2NvbXBsX3Bhc3MgfCBwZXJjX2NvbXBsX2ZhaWwgfCBwZXJjX3Bhc3MgPGJyPi0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tPGJyPsKgQUNQIMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqA4NyB8 IMKgIMKgIMKgIMKgIMKgIMKgIMKgODIgfCDCoCDCoCDCoCDCoCDCoCDCoDEgfCDCoCDCoCDCoCDC oCDCoCA4MSB8IMKgIMKgIMKgIMKgIMKgIMKgIDk0IHwgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMSB8 IMKgIMKgIMKgIMKgIMKgIMKgIMKgOTkgfCDCoCDCoCDCoCDCoCAxPGJyPsKgQ0RQIMKgIMKgIMKg IMKgIHwgwqAgwqAgwqAgwqAgwqAyOCB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgMjcgfCDCoCDCoCDC oCDCoCDCoCDCoDAgfCDCoCDCoCDCoCDCoCDCoCAyNyB8IMKgIMKgIMKgIMKgIMKgIMKgIDk2IHwg wqAgwqAgwqAgwqAgwqAgwqAgwqAgMCB8IMKgIMKgIMKgIMKgIMKgIMKgIDEwMCB8IMKgIMKgIMKg IMKgIDA8YnI+wqBDT0ggwqAgwqAgwqAgwqAgfCDCoCDCoCDCoCDCoCAxMDIgfCDCoCDCoCDCoCDC oCDCoCDCoCDCoDY3IHwgwqAgwqAgwqAgwqAgwqAgwqAwIHwgwqAgwqAgwqAgwqAgwqAgNjcgfCDC oCDCoCDCoCDCoCDCoCDCoCA2NiB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDAgfCDCoCDCoCDCoCDC oCDCoCDCoCAxMDAgfCDCoCDCoCDCoCDCoCAwPGJyPsKgRENOIMKgIMKgIMKgIMKgIHwgwqAgwqAg wqAgwqAgMTgxIHwgwqAgwqAgwqAgwqAgwqAgwqAgMTgwIHwgwqAgwqAgwqAgwqAgwqAgwqA1IHwg wqAgwqAgwqAgwqAgwqAxNzUgfCDCoCDCoCDCoCDCoCDCoCDCoCA5OSB8IMKgIMKgIMKgIMKgIMKg IMKgIMKgIDMgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoDk3IHwgwqAgwqAgwqAgwqAgMzxicj7CoERG RCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIDQ1OCB8IMKgIMKgIMKgIMKgIMKgIMKgIDI5MiB8 IMKgIMKgIMKgIMKgIMKgIDI1IHwgwqAgwqAgwqAgwqAgwqAyNjcgfCDCoCDCoCDCoCDCoCDCoCDC oCA2NCB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDkgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoDkxIHwg wqAgwqAgwqAgwqAgNTxicj7CoERGVCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgMTMwMiB8IMKg IMKgIMKgIMKgIMKgIMKgIDgzMCB8IMKgIMKgIMKgIMKgIMKgIMKgMCB8IMKgIMKgIMKgIMKgIMKg ODMwIHwgwqAgwqAgwqAgwqAgwqAgwqAgNjQgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAwIHwgwqAg wqAgwqAgwqAgwqAgwqAgMTAwIHwgwqAgwqAgwqAgwqAgMDxicj7CoEdEUCDCoCDCoCDCoCDCoCB8 IMKgIMKgIMKgIMKgIDQxMyB8IMKgIMKgIMKgIMKgIMKgIMKgIDMwOCB8IMKgIMKgIMKgIMKgIMKg IDI5IHwgwqAgwqAgwqAgwqAgwqAyNzkgfCDCoCDCoCDCoCDCoCDCoCDCoCA3NSB8IMKgIMKgIMKg IMKgIMKgIMKgIMKgIDkgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoDkxIHwgwqAgwqAgwqAgwqAgNzxi cj7CoEdGWCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgOTYgfCDCoCDCoCDCoCDCoCDCoCDC oCDCoDcyIHwgwqAgwqAgwqAgwqAgwqAgwqAxIHwgwqAgwqAgwqAgwqAgwqAgNzEgfCDCoCDCoCDC oCDCoCDCoCDCoCA3NSB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDEgfCDCoCDCoCDCoCDCoCDCoCDC oCDCoDk5IHwgwqAgwqAgwqAgwqAgMTxicj7CoElOVCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKg IMKgIDkgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAyIHwgwqAgwqAgwqAgwqAgwqAgwqAwIHwgwqAg wqAgwqAgwqAgwqAgwqAyIHwgwqAgwqAgwqAgwqAgwqAgwqAgMjIgfCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAwIHwgwqAgwqAgwqAgwqAgwqAgwqAgMTAwIHwgwqAgwqAgwqAgwqAgMDxicj7CoElQVSDC oCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgMjQgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8 IMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgfCDCoCDCoCDCoCDCoCDCoDxicj7CoElQVV9TQU5JVFkgwqB8IMKgIMKgIMKgIMKgIMKg IDIgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCDC oCDCoCDCoCDCoCDCoCDCoHwgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCDCoCDCoCDCoCDCoCDCoDxicj7C oE9TUyDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgNDMgfCDCoCDCoCDCoCDCoCDCoCDCoCDC oDQzIHwgwqAgwqAgwqAgwqAgwqAgwqAwIHwgwqAgwqAgwqAgwqAgwqAgNDMgfCDCoCDCoCDCoCDC oCDCoCDCoDEwMCB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDAgfCDCoCDCoCDCoCDCoCDCoCDCoCAx MDAgfCDCoCDCoCDCoCDCoCAwPGJyPsKgUFdSIMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgNTM1 IHwgwqAgwqAgwqAgwqAgwqAgwqAgMjA3IHwgwqAgwqAgwqAgwqAgwqAgwqAxIHwgwqAgwqAgwqAg wqAgwqAyMDYgfCDCoCDCoCDCoCDCoCDCoCDCoCAzOSB8IMKgIMKgIMKgIMKgIMKgIMKgIMKgIDAg fCDCoCDCoCDCoCDCoCDCoCDCoCAxMDAgfCDCoCDCoCDCoCDCoCAwPGJyPsKgU0VDIMKgIMKgIMKg IMKgIHwgwqAgwqAgwqAgwqAgMTcyIHwgwqAgwqAgwqAgwqAgwqAgwqAgMTI4IHwgwqAgwqAgwqAg wqAgwqAgwqAzIHwgwqAgwqAgwqAgwqAgwqAxMjUgfCDCoCDCoCDCoCDCoCDCoCDCoCA3NCB8IMKg IMKgIMKgIMKgIMKgIMKgIMKgIDIgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoDk4IHwgwqAgwqAgwqAg wqAgMjxicj7CoFVNU0NIIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqAxNiB8IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHwgwqAgwqAgwqAgwqAgwqAgwqAgwqB8IMKgIMKgIMKgIMKgIMKgIMKgIMKg fCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHwgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCB8IMKgIMKgIMKgIMKgIMKgPGJyPsKgVlBFIMKgIMKgIMKgIMKg IHwgwqAgwqAgwqAgwqAgMTMwIHwgwqAgwqAgwqAgwqAgwqAgwqAgMTI1IHwgwqAgwqAgwqAgwqAg wqAgwqAxIHwgwqAgwqAgwqAgwqAgwqAxMjQgfCDCoCDCoCDCoCDCoCDCoCDCoCA5NiB8IMKgIMKg IMKgIMKgIMKgIMKgIMKgIDEgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoDk5IHwgwqAgwqAgwqAgwqAg MTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoHwgwqAgwqAgwqAgwqAzNTk4IHwgwqAgwqAgwqAgwqAg wqAgwqAyMzYzIHwgwqAgwqAgwqAgwqAgwqAgNjYgfCDCoCDCoCDCoCDCoCAyMjk3IHwgwqAgwqAg wqAgwqAgwqAgwqAgNjYgfCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAzIHwgwqAgwqAgwqAgwqAgwqAg wqAgwqA5NyB8IMKgIMKgIMKgIMKgIDI8YnI+KDE3IHJvd3MpPC9mb250Pjxicj48L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2Pk5vdywgSSB3YW50IHRvIGFkZCBhIG5ldyBjb2x1bW4gdGhhdCYjMzk7 cyBhIHN1YnNldCBvZiB0aGUgJnF1b3Q7dG90YWxfdGVzdHMmcXVvdDsgdmFsdWUuwqAgU3BlY2lm aWNhbGx5LCBJIHdhbnQgdG8gYWRkIGEgY29sdW1uIGNhbGxlZCAmcXVvdDtkaXNwYXRjaGVkJnF1 b3Q7IHdoaWNoIGlzIGp1c3QgdGhlIG51bWJlciBvZiB0b3RhbF90ZXN0cyB3aGljaCBoYXZlIGNv bHVtbiAmcXVvdDtkaXNwYXRjaF9zdGF0dXMmcXVvdDsgPSAmIzM5O1kmIzM5OzwvZGl2PjxkaXY+ PGJyPjwvZGl2PjxkaXY+VGhpcyBibG93cyB1cCwgYnV0IHNob3dzIHRoZSBpbnRlbnQuLi48L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2PnNlbGVjdDxicj7CoCBkLmRvbWFpbl9uYW1lLDxicj7CoCBk LnRvdGFsX3Rlc3RzLCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA8YnI+wqAgZC50ZXN0c19j b21wbGV0ZWQsPGJyPsKgIGQudGVzdHNfcGFzc2VkLDxicj7CoCBkLnRlc3RzX2ZhaWxlZCw8YnI+ wqAgPGZvbnQgY29sb3I9IiMwMDAwZmYiPmQuZGlzcGF0Y2hlZCw8L2ZvbnQ+PGJyPsKgIHJvdW5k KGQudGVzdHNfY29tcGxldGVkKjEwMC4wL2QudG90YWxfdGVzdHMpIGFzIHBlcmNfdG90X2NvbXBs LDxicj7CoCByb3VuZChkLnRlc3RzX3Bhc3NlZCoxMDAuMC9kLnRlc3RzX2NvbXBsZXRlZCkgYXMg cGVyY19jb21wbF9wYXNzLDxicj7CoCByb3VuZChkLnRlc3RzX2ZhaWxlZCoxMDAuMC9kLnRlc3Rz X2NvbXBsZXRlZCkgYXMgcGVyY19jb21wbF9mYWlsLDxicj7CoCByb3VuZChkLnRlc3RzX3Bhc3Nl ZCoxMDAuMC9kLnRvdGFsX3Rlc3RzKSBhcyBwZXJjX3Bhc3M8YnI+ZnJvbSA8YnI+wqAgKHNlbGVj dDxicj7CoCDCoCBkb21haW5fbmFtZSw8YnI+wqAgwqAgc3VtKHRvdGFsX3Rlc3RzKSBhcyB0b3Rh bF90ZXN0cyw8YnI+wqAgwqAgc3VtKHRlc3RzX2NvbXBsZXRlZCkgYXMgdGVzdHNfY29tcGxldGVk LDxicj7CoCDCoCBzdW0odGVzdHNfcGFzc2VkKSBhcyB0ZXN0c19wYXNzZWQsPGJyPsKgIMKgIHN1 bSh0ZXN0c19mYWlsZWQpIGFzIHRlc3RzX2ZhaWxlZCw8YnI+PHNwYW4gc3R5bGU9ImJhY2tncm91 bmQtY29sb3I6cmdiKDI1NSwyNTUsMjU1KSI+wqAgwqA8Zm9udCBjb2xvcj0iIzAwMDBmZiI+IChz ZWxlY3QgY291bnQoKikgZnJvbSBkaXNwYXRjaF90cmFja2VyIHdoZXJlIHJlZ3Jlc3Npb25fbmFt ZT1ydC5yZWdyZXNzaW9uX25hbWUgYW5kIGRvbWFpbl9uYW1lPXJ0LmRvbWFpbl9uYW1lIGFuZCBk aXNwYXRjaF9zdGF0dXM9JiMzOTtZJiMzOTspIGFzIGRpc3BhdGNoZWQ8L2ZvbnQ+PC9zcGFuPjxi cj7CoCBmcm9tIDxicj7CoCDCoCByZWdyLmRpc3BhdGNoX3RyYWNrZXIgcnQgd2hlcmUgwqBydC5y ZWdyZXNzaW9uX25hbWU9JiMzOTsyMDI0XzA4XzAyXzEwXzMyXzUzX3NvdW5kd2F2ZV9fZXJfY29t bW9uX3JlZ3Jlc3Npb25fX0NMMjAxNzQ3M196MV9zb3VuZHdhdmVfYWRtJiMzOTs8YnI+wqAgZ3Jv dXAgYnkgcm9sbHVwKHJ0LmRvbWFpbl9uYW1lKSBvcmRlciBieSBydC5kb21haW5fbmFtZSBBU0Mg TlVMTFMgTEFTVCkgZDs8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGUgZXJyb3IuLi48 L2Rpdj48ZGl2PkVSUk9SOiDCoHN1YnF1ZXJ5IHVzZXMgdW5ncm91cGVkIGNvbHVtbiAmcXVvdDty dC5yZWdyZXNzaW9uX25hbWUmcXVvdDsgZnJvbSBvdXRlciBxdWVyeTxicj5MSU5FIDE5OiAuLi5u dCgqKSBmcm9tIGRpc3BhdGNoX3RyYWNrZXIgd2hlcmUgcmVncmVzc2lvbl9uYW1lPXJ0LnJlZ3Jl c3MuLi48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BbnkgaGVscCB3b3VsZCBiZSBhcHBy ZWNpYXRlZC48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rczwvZGl2PjxkaXY+LWRhdmU8 L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj4N Cg== --0000000000009ad14d061f2201c6--