From 697dfc599a07a32ca667b2548434df831241370a Mon Sep 17 00:00:00 2001 From: Stephanie Shishis Date: Thu, 26 Mar 2026 12:22:17 -0400 Subject: [PATCH 1/3] Module #2 live code --- .../live_code/module_2/module_2.sqbpro | 457 +++++++++++------- 1 file changed, 278 insertions(+), 179 deletions(-) diff --git a/04_this_cohort/live_code/module_2/module_2.sqbpro b/04_this_cohort/live_code/module_2/module_2.sqbpro index 06850fe25..d24709b5d 100644 --- a/04_this_cohort/live_code/module_2/module_2.sqbpro +++ b/04_this_cohort/live_code/module_2/module_2.sqbpro @@ -1,179 +1,278 @@ -
/* MODULE 2 */ -/* SELECT */ - - -/* 1. Select everything in the customer table */ -SELECT - -/* 2. Use sql as a calculator */ - - - -/* 3. Add order by and limit clauses */ - - - -/* 4. Select multiple specific columns */ - - - -/* 5. Add a static value in a column */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* WHERE */ - -/* 1. Select only customer 1 from the customer table */ -SELECT * -FROM customer -WHERE - - -/* 2. Differentiate between AND and OR */ - - - -/* 3. IN */ - - - -/* 4. LIKE */ - - - -/* 5. Nulls and Blanks*/ - - - -/* 6. BETWEEN x AND y */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* CASE */ - - -SELECT * -/* 1. Add a CASE statement declaring which days vendors should come */ - - -/* 2. Add another CASE statement for Pie Day */ - - - -/* 3. Add another CASE statement with an ELSE clause to handle rows evaluating to False */ - - - -/* 4. Experiment with selecting a different column instead of just a string value */ - - -FROM vendor - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* DISTINCT */ - - -/* 1. Compare how many customer_ids are the customer_purchases table, one select with distinct, one without */ - --- 4221 rows -SELECT customer_id FROM customer_purchases - - - -/* 2. Compare the difference between selecting market_day in market_date_info, with and without distinct: - what do these difference mean?*/ - - - -/* 3. Which vendor has sold products to a customer */ - - - -/* 4. Which vendor has sold products to a customer ... and which product was it */ - - - -/* 5. Which vendor has sold products to a customer -... and which product was it? -... AND to whom was it sold*/ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* INNER JOIN */ - - -/* 1. Get product names (from product table) alongside customer_purchases - ... use an INNER JOIN to see only products that have been purchased */ - --- without table aliases - - - - -/* 2. Using the Query #4 from DISTINCT earlier - (Which vendor has sold products to a customer AND which product was it AND to whom was it sold) - - Add customers' first and last names with an INNER JOIN */ - --- using table aliases - - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* LEFT JOIN */ - - -/* 1. There are products that have been bought -... but are there products that have not been bought? -Use a LEFT JOIN to find out*/ - - -/* 2. Directions of LEFT JOINs matter ...*/ - - - - -/* 3. As do which values you filter on ... */ - - - - -/* 4. Without using a RIGHT JOIN, make this query return the RIGHT JOIN result set -...**Hint, flip the order of the joins** ... - -SELECT * - -FROM product_category AS pc -LEFT JOIN product AS p - ON pc.product_category_id = p.product_category_id - ORDER by pc.product_category_id - -...Note how the row count changed from 24 to 23 -*/ - - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ -/* Multiple Table JOINs */ - - -/* 1. Using the Query #4 from DISTINCT earlier - (Which vendor has sold products to a customer AND which product was it AND to whom was it sold) - - Replace all the IDs (customer, vendor, and product) with the names instead*/ - - - -/* 2. Select product_category_name, everything from the product table, and then LEFT JOIN the customer_purchases table -... how does this LEFT JOIN affect the number of rows? - -Why do we have more rows now?*/ - -
+/* MODULE 2 */ +/* SELECT */ + + +/* 1. Select everything in the customer table */ +SELECT * FROM customer; + +/* 2. Use sql as a calculator */ +SELECT 1+1 AS addiiton, 10*5 AS multiplication, pi() AS pi; + + +/* 3. Add order by and limit clauses */ +SELECT * +FROM customer +ORDER BY customer_first_name +LIMIT 10; + +/* 4. Select multiple specific columns */ +SELECT customer_first_name, customer_last_name +FROM customer; + + +/* 5. Add a static value in a column */ +SELECT 2026 AS this_year, 'March' AS this_month, customer_id +FROM customer + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* WHERE */ + +/* 1. Select only customer 1 from the customer table */ +SELECT * +FROM customer +WHERE customer_id = 1; + + +/* 2. Differentiate between AND and OR */ +SELECT * +FROM customer +WHERE customer_id = 1 +OR customer_id = 2; -- OR is two rows, AND is 0 rows + + +/* 3. IN */ +SELECT * +FROM customer +WHERE customer_id IN (3,4,5,6); + + +/* 4. LIKE */ +-- all the peppers +SELECT * FROM product +WHERE product_name LIKE '%pepper%'; + +/* 5. Nulls and Blanks*/ +SELECT * +FROM product +WHERE product_size IS NULL +OR product_size = '';--blank,two single quotes not one double quote, different from NULL + + +/* 6. BETWEEN x AND y */ +SELECT * +FROM customer +WHERE customer_id BETWEEN 1 AND 20; +--dates + +SELECT * +FROM market_date_info +WHERE market_date BETWEEN '2022-10-01'AND'2022-10-31'; + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* CASE */ + + +SELECT * +/* 1. Add a CASE statement declaring which days vendors should come */ +,CASE WHEN vendor_type = 'Fresh Focused' THEN 'Wednesday' + WHEN vendor_type = 'Eggs & Meat' THEN 'Thursday' + ELSE 'Saturday' + END as day_of_specialty + + +/* 2. Add another CASE statement for Pie Day */ +,CASE WHEN vendor_name = "Annie's Pies" --double quotes okay here + THEN 'Annie is the best' + END AS pi_day + + +/* 3. Add another CASE statement with an ELSE clause to handle rows evaluating to False */ +, CASE WHEN vendor_name LIKE '%pie%' + THEN 'Wednesday' + ELSE 'Friday' + END AS another_pie_day + +FROM vendor; + + +/* 4. Experiment with selecting a different column instead of just a string value */ + +SELECT * +,CASE WHEN cost_to_customer_per_qty <1.00 +THEN cost_to_customer_per_qty*5 +ELSE cost_to_customer_per_qty +END AS inflation + +FROM customer_purchases + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* DISTINCT */ + + +/* 1. Compare how many customer_ids are the customer_purchases table, one select with distinct, one without */ + +-- 4221 rows +SELECT customer_id FROM customer_purchases; + +SELECT DISTINCT customer_id FROM customer_purchases; + + + +/* 2. Compare the difference between selecting market_day in market_date_info, with and without distinct: + what do these difference mean?*/ +SELECT market_day +FROM market_date_info; + +-- market is only open on 2 days, wed and sat + +SELECT DISTINCT market_day +FROM market_date_info; + + +/* 3. Which vendor has sold products to a customer */ +SELECT DISTINCT vendor_id +FROM customer_purchases; + + +/* 4. Which vendor has sold products to a customer ... and which product was it */ +SELECT DISTINCT vendor_id, product_id +FROM customer_purchases; + + +/* 5. Which vendor has sold products to a customer +... and which product was it? +... AND to whom was it sold*/ +SELECT DISTINCT vendor_id, product_id, customer_id +FROM customer_purchases; + + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* INNER JOIN */ + + +/* 1. Get product names (from product table) alongside customer_purchases + ... use an INNER JOIN to see only products that have been purchased */ + +-- without table aliases +SELECT product_name, -- coming from the product table +vendor_id, -- rest of these are coming from the customer_purchases table +market_date, +customer_id, +customer_purchases.product_id, +product.product_id + +FROM product +INNER JOIN customer_purchases + ON customer_purchases.product_id = product.product_id; + + +/* 2. Using the Query #5 from DISTINCT earlier + (Which vendor has sold products to a customer AND which product was it AND to whom was it sold) + + Add customers' first and last names with an INNER JOIN */ + +-- using table aliases + +SELECT DISTINCT +vendor_id, -- coming from cp +product_id, +c.customer_id, -- coming from c (customer) +customer_first_name, +customer_last_name + +FROM customer_purchases AS cp +INNER JOIN customer AS C + ON c.customer_id = cp.customer_id + + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* LEFT JOIN */ + + +/* 1. There are products that have been bought +... but are there products that have not been bought? +Use a LEFT JOIN to find out*/ + +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name + +FROM product as p +LEFT JOIN customer_purchases as cp + ON p.product_id = cp.product_id; + +-- NULL product has not been bought, there is no product id in the customer purchases + + +/* 2. Directions of LEFT JOINs matter ...*/ + +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name + +FROM customer_purchases as cp +LEFT JOIN product as p + ON p.product_id = cp.product_id; + +-- no number in customer purchases to begin with so will not be included + +/* 3. As do which values you filter on ... */ + +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name + +FROM product as p +LEFT JOIN customer_purchases as cp + ON p.product_id = cp.product_id + +WHERE p.product_id BETWEEN 1 AND 6; -- if we pick product, 6 rows (1-6) but if we pick cp...only 5 rows because zinnias never existed in customer_purchases + +/* 4. Without using a RIGHT JOIN, make this query return the RIGHT JOIN result set +...**Hint, flip the order of the joins** ... + +SELECT * + +FROM product_category AS pc +LEFT JOIN product AS p + ON pc.product_category_id = p.product_category_id + ORDER by pc.product_category_id + +...Note how the row count changed from 24 to 23 +*/ + +SELECT * +FROM product AS P +LEFT JOIN product_category AS pc + ON pc.product_category_id = p.product_category_id + ORDER by pc.product_category_id + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 2 */ +/* Multiple Table JOINs */ + + +/* 1. Using the Query #4 from DISTINCT earlier + (Which vendor has sold products to a customer AND which product was it AND to whom was it sold) + + Replace all the IDs (customer, vendor, and product) with the names instead*/ + + + +/* 2. Select product_category_name, everything from the product table, and then LEFT JOIN the customer_purchases table +... how does this LEFT JOIN affect the number of rows? + +Why do we have more rows now?*/ + + From b561777db37c7540c1fd884713b995d654850605 Mon Sep 17 00:00:00 2001 From: Stephanie Shishis Date: Tue, 31 Mar 2026 17:36:30 -0400 Subject: [PATCH 2/3] Assignment One Completed --- .../assignments/DC_Cohort/Assignment1.md | 13 +- .../Section1_LogicalDataModel.drawio | 40 ++ .../DC_Cohort/Section1_LogicalDataModel.pdf | Bin 0 -> 28347 bytes .../assignments/DC_Cohort/assignment1.sql | 101 ++-- .../live_code/module_2/module_2.sqbpro | 152 +++--- .../live_code/module_3/module_3.sqbpro | 500 +++++++++++------- 6 files changed, 522 insertions(+), 284 deletions(-) create mode 100644 02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.drawio create mode 100644 02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.pdf diff --git a/02_activities/assignments/DC_Cohort/Assignment1.md b/02_activities/assignments/DC_Cohort/Assignment1.md index f650c9752..116026411 100644 --- a/02_activities/assignments/DC_Cohort/Assignment1.md +++ b/02_activities/assignments/DC_Cohort/Assignment1.md @@ -207,7 +207,14 @@ Link if you encounter a paywall: https://archive.is/srKHV or https://web.archive Consider, for example, concepts of fariness, inequality, social structures, marginalization, intersection of technology and society, etc. +There are a lot of value systems that are in databases/data systems that I encounter in my day-to-day life. Often, I do not think of these systems but after reading this article, these systems are so important in how databases are created and how society functions. -``` -Your thoughts... -``` +The most immediate example I can think of is for any government id or identity/account creation. Most databases include only legal names and binary gender fields (although this has now changed to X for example on passports to include everyone who does not fit into this binary system). This is still stringent as there could be more flexibility for chosen names or even within in the non-binary category, X does not encompass all of the differences within this category. + +Similarly, for a lot of surveys I complete. Often race/ethnicity options have an 'Other' category, income brackets are centered around middle-class assumptions, marital status does not account for common law or other non-traditional relationships etc. These are all categories, while improving, could be expanded on instead of provided binary options. + +Another example I really thought about was banking. Historically, until the late 70s, women could not open a credit card in their own name unless there was a male cosign. This would have impacted databases and significant reform would have had to happen to ensure the system would allow me to bank as I do today. + +Lastly for healthcare. A lot of diagnostic tools and symptoms are predominantly based on biological male research data. If medical records and past databases are used to train machine learning tools for improving future healthcare systems, this could be grossly misinterpreting the biological female category or any other non-binary category. + +This article has made me realize that all of these value systems and databases are originally designed around a "normal" or "default" user. When the user differs from this default, it can have large consequences on how the database functions. As technology advances, we need to be aware that not everyone and not every database can assume a default user. diff --git a/02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.drawio b/02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.drawio new file mode 100644 index 000000000..f28929fe6 --- /dev/null +++ b/02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.drawio @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.pdf b/02_activities/assignments/DC_Cohort/Section1_LogicalDataModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..49e967ca7d6f7bb0ed9931df19ff993caa01098e GIT binary patch literal 28347 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

^w>`WEn;R-7vf6A=LA{ql#c~ zXIPZZG31Lzx%X8RSg_6A-LGIe7qnYRVm=+)%x3#~SOibJ3YmI!@D<-3jEWa5lAr_L z9gOxIOl9&_%!HtBufz=%*G|ctgl=!^xpL2L2|RGQuW-4~^jzKa+|6`3A3mqzjfie9 z{0$YnBgk?HBs*E{`im(JT_I}c7=Bjhx91&=;sN(Q**w1bO&ZW za&GpX?^OaHLIR(^!VQ+#x$FX5`is^X0T+M3TbG>pBN2q9$X!Qv%<-khz@s23mnpv^ z;TI-l$$U{J2yfpzuNxBZz1PJ?*2D=B?vteqH;Z^DlBtL}1-jHrFJNX>4IH{8_Ogh) zVPDq3oWc&hJISw3>J!@tvlueKA^rf||MKfaSn}zU8{E^UU576Q-_ALKFz#c9f&MQO zrszpE%F=bB^v~^kb~cj)=!3=RO$a?{tDBdWw3X1s#y=ZO5DEK6Y3HuPOfrT$-uXG! zeu%OV>#xhrNpaK?gdznjCdgFXJa)PLIE&`2;a126w_q`+m6O2PcA`fpBqH^hsEi z#K(LpzH~^UN%GyeJ9G{)|0l6BTzG0EJ0@}BLyG#Txpw^_z11o zjz= zHtIe-_8N;2qfD0KrqmT!%U3?!_^B#9CN*^}C)=)>RDhv?QNR(iZm?gAhFc)Sa4Oo9 z2CrpTR9gC^dG@QTMVcYLG8%bWU~R7H`S2!w$981+vJU^}Dvur^q|Hc+u#a{+vp@P+ zzxF?dHyJp`(hr5v6{hyC1y-S@r0k*P`VI*YKNhA|qM=~2upY5& z2pQUs!(WRxeU7!)KZA&)HWE-=m&rlVr^8~yX-X4I(wg1tYKGAc4Akn&(P#aremKDd z%s`lx-hmBniun9$%s$y<315ngFERY;-U+Sw>|QHiqiam~j^txFOBxELbm-zZz5OeC zae#@@o%rkh)!K-QlYspE9Uu3)$Z(OtpN!IQ+sy1Ll7;1Eq)M}>?RHBB^fd!@<$=-B7#}?^OLfvl<9}VMPae9aQJ>`QaO+{MhO7#ztZm#0gdl)r!Cd>%oAH<-M;Zsuk*=-A6QLR>g6&?~lt( zSv0Vs>txhgAq%6iM#`gShtp=~@+h26)!-}?JRP}4Ez2c$JYqixnauW!)`$u0U>Vtc zr5QDqg7Nmbo6YY!wZwEB?{A1x<5TzlDlN#JtwHn%y;*F*a!(PYRm-Rejo>*Y+@7cTu#P>{!AhOh(~tK zlO6FmNf0pUKXWJKUYzlmM`7^^9x1)7er4GD5r2QLwbIT!So#>)pX*MKSGm7jDI|K2 zYt&if(;WqMVY4Eb=#67-v|ljqo8gV4(|E2p;48`>skO0Fup(6M4eKrQV`WN~h|v4q z0-WP(Oo2}%;N{KiL7DZvMZl+B-7I8*dur#9T%SN_*mHVDXrg;bc#*6J(jY*#&tTO1 zb9$6sz&%MAqZ)rGs!VXU7=Nh3yNfvNAk=%3pqzJ)SYH^FKo|MqM>q`Z{LBt$8Bv2q z@0SS_v$A^VROdd~VN(;>S&wLj9A$lC_n90}2{-(Vm^q*cNaY)>5dGQ*2y;e}$CvAJ zWj?;Ag)@)7FdU+fPAb{(ZA`TOCeX88N1q$c>gX=F^+weFdR1zNq~9T=7QgCJ$b`dRL=aTv89(WR5J ze8Sw4vIx5&l8Su7u9M1q!i=sL9Sk4**qA6#nJJnxSip||%l^@vi=Wh?;!Y+Ky{f_u7jgB^Q^rXyr4@z0tOj4|LXjBA`J(iwl=3jM=?l z(CU`%G-&&rV6n8_->OmA2kO$G-N*h5cd1u?7O~f zpU~|lJc)V0c^KHWzEkl*@HpYVXT5_#+OJq0yJ~&F$><@zDRG6hyH~!0(7vH|O_?$o zFKhQ}H~8!g<|7pC4K}tWe-D-j zPg#42%Sl8VVK4`8MEmaT30=n5%T->Ug5&PnG=k0_H+-J&TS1o)taGm`=-Ue{+xV&I z)9ifm&3*E@9m{egc;<}tHm>M=e2;rHOY(~a(<&!?&RaH^QOF-UL<>{+2f6m{`&ZbS8$9^#i$ zVXgsyet@KC;R!fCB5_k3d?0&qM(I&mMt(+N#y8E#l)dlf7pZ&S_g1_8qCOGhIfBEy z^UQ(qXbTnRK#*SS=2=y}7|Erb9Fk+CZKM2#&5TfuRw&c^sTf9~4S&Hh2%IvSGv2Bm zj;PR&47%$WkH0+>V|LNwEXn;0+q~GKI2eg|r0uYh8vJ`oihg&hSO6Clm8eSMP*~{z zT|$fyznlJE3wikx!%mu9{JUFYK7qD3^<&=;cw5_xe*Elz9LL(3f}AnMulN9Dz%NzE z5hu09QBRjz0FMQ1^3IWInM&^TdnhH0){&l9xF0x=;_X&xaQ-kGwq}}Wa@On+v1)h7 zHy=sUT`u9Q!kuCrgYA@Oq+p_8DqK9Y`>gcMgEmwIZuGTdZ=LLLYIB7R8K=~DFN5vF z^dCB0OSfAlUb^S6)mkmY{pj+Bh*t1)j?)qx^WGN37RARRo0iw2f^)8YA#}@`nkF9E z3#LeSx4dGgjWhmJ}k{~H0amcQa%ka#UiYP*{;rH43+xfPgk~W7r_7 zAm2)%#{lo7ODfbGaz?0ql`C3IE-bd08nK;zLr&+t%#)Qj-!_*HkP=|*4 z&SFEzdP%4@lUzQSSHlbjHHhZy4aOr?H}R&tvxqDR<0zh!`@|^`8`_o>h?;{JM?zeM zP0GeKT0FVfifHn+a#gxBMkp}>g&1VHsVUw%`myU>k35SW>V6%JtNUCNtoN0VU;yh_ z=gyFi*RJRT3T>UX;ezN8eo3-0fdbdbBCO1LO~w;qiuYzxE;$oMtF0y$4CXDWwMrk; zHr}pF6?4n<4!3yF7}pFR-MYKBS9&v@wwbX-CXc1~yjeQgD{7rEt#wavuXfu*nXcU3 zE2Xk3SDBBva1sv+kb9V85`V*h%t#dPLQjnTJ%wW5ZwG{UGwKudKsypFRQvV&J`WSI z&jd%f_qNBqfCGNd5aCHWu||H*U}%g$PZ&sP5(B@78~H%k-JidH?hi2@Dh>}01S?zS-z6@(jmu-q)usR>0cRONh7-uIB)Huv4!4=Rl9T0%kDf^*`P^Xh zbccRa!z+#K=*e+O`NGEgGN?jASU{UEhXDfo$p>EkBYU45%mg1xgBcYBA8FW<>@dkC z6Av&up#>2{Y7iiaS(AY?d^KOb8OiJvI5SYzgath4dDrjyRjCa&Do6g0NuN6K*qdbK1iHJGq$kP zpbjw(em>Tya=3cz4WnRDryfi4h)T&wezl#soij&~1C|%E3R8>bBs>h$oqYI&k%R>| z8kGI;oZh5CVx+ObcVS#T;w@|O92kS6dbH`3^EgY*9@|$tl-jdhDqSp{$j zrgAZhgiv$Ay=*@lO2x6KStaQ*#KoC$!R2?L2amR~wo&My@uB`=hK9 zgGAVM@29u2bTHuwgKiq#oV|E_wp#l5JF+u_1bi@*e4M5W<)w4^tdq3~33(iJ(xRgK zjfX83VM-p9KaTXEUK7PD^H&n90jUvH)X{Ey@e`Emt0hMHG!%f;bVU;BTczeUA|A|U z*5)s9=}YFp{Cf}wiqd6k?H`K7ixJm;MwF5Whz9*Y)1g#Le5=vyNSIb zC(EaF?_AF!J_p*!NTX+R^9u5KY8cw2?GlPZ<-Mxx6y35NQOL9)pEq}|A6x$snoVV# z%4?i?g*%40FvZrnetJ`wh~*$PmU0xj$tDrm_v33*6omQ@9=H~SrtMqn^F{HmX`TYM zTd9%d8p_9#QSdk`lkGc%j97$>)S-u_w!$od6h70k=j2p3@_gDDe5Yk;oTC?UvE%%! z%!1-O9yiVh-)9^4JKJMhX1~8_Lm+&-3T&I* zsWIZbzRtY$zWABd=0SK*oqXBfMt}SB1MJ#@%<$va%NG>4y6grOwQwq~gK~WC*H%%I zHD;|EnO?r`0`;c#8w*x!t}TOKCph)qroDc(Hr;NJ0fD;keI){$U{;pw*q|QLKNP`N zK)R?2jgfqxT&O%zvQ{g0zb@ZnG3Ch4;<4KB{+O<&psite%cz`hche;0TLxb2v~4b? zrZpb3fA=h~=45lm*l?)q@?gj+nLM+(+Kgex7JNt~sxSmTEWqz_oTx!Y+u35u#LH)Y zL9pC&Eo19P&|~E>q}j)j`Fg|ab+6XecC-O$+-=?M>gq>%Cqe)(&7mI_gd;Jb@24qC z;?WNeZoc6NL$9(wq$)tlV93Cs-4H|>Q@>&~q%rGDGfsoKZ#^7cgf$W5Z)??)3-n*w zMktn3%;Lr1Lc7^t`0-}Y(Zrf*DS2qhP%*6uLw}*^!J%$`>-u5yLAmdu9^t2SKJCv; z4Ie|%??&CJqNj1~2dAm#3o9qua>0 z47xW@0css~n-|{>*@PazY&T8bQ}gpK5LyjH&v}!PpXcDg*yF%3d5n+;vuY)(V-1dI ztbXZ=63nXXNDcbPjzDk2-_r6(*|LG&(sq|&hlcZGWxlj=I%14-P5Na7Jp^UEa8B!2 zb0_7ZIQ7Pi;*t6+`Cao1%Al4P!FQHfRs{U*jK)ko2g=S)wcVU4yH1m%sxML>WN6q6 zzR1TYZqf`CRrlU0n+rH6Xdo9Vz-cM(GJEMZF!skGe=*nsa&iKkU%}_Tr%p!Cu)r&o zQKl68yi{(fZs)O>Q5wS#j~Esph_?j)J!{3Q_D9inh3n7FBLD4-g3PNQi$kOIFf;9v zM+=U(wV4mqHc7P>H@fV12VYxkS8MCM4vnsmY;b@o?z6C)3AkjmZ3ORp8f-%6<}Y2K zv16+RE#~;3IoGZ<+OWiqeLc1H7BbI3o2~#90oAv6(#x@gcVOt-d!oYa9GL#{l;|fs zVUa3^@=>e}rXh8OgR`tHP#7u%fwoC z7*$oVYZymUW9K+}>s%#C^Jq2bt0hCTGZi^eUtn=jzD{<*%BnLgeAXKXBXSIBpH?ya z+*?1AzmRKHFKU^&0KTw(Q$#XMXi=%I@cFCkAr7?PSYu)^CGFpoXC@vNlnM<6BDr||E6Vy)w zVcZ3V*(gB&=3wGY_nYWWwCMB%qZ0wByt|Ktte%WUcn z6k#Rlqgd^hnhlG4fNUc(QUiCIGNOqxhJO9e6a5v9_qFVzIi{DqkVH6jYL-H%f-ss< zcm7g>ueTv;X4g+m$O9&ifZl=9o7IzNDW;MBBgUd`_Of`1n{on1?|KJ5B-}A)8_1C; z0jT}^CeN7I9gG{Rmontu#bDq%0Y487CB?|Knr=^uW+c_RpM^*+w*<-w+WG@U84HO zz6DLZ`Fvls`r5jKuMOfNFi}sU$8e65(^(g$V!y66rGBSf1h(q7^3NJnZY3p7l6EPW zl>zhWx^LcZ%C93%jqE!v(wXCZwP`XFv9OYhC-;omxLyz-;H1FFr2^8=$Q|2~#b7AFn>JRl~C_RDQZ zj{<5X$f0k=*Q-n&zlKuec=Dtv z=S3AO)Ln;s^9&dXbDmuMK79<$gwkPFvyh(6P89!>25n?Gi0)9wSS2>UCa1VI%`16* zqTBcd9>(a0O`vr&s=gus#yP8*`uN9k`~2l*akP!=)nNxQC+@bD+s*?aU2C%C8Bcxm z2FlbibnDL#x1JyAJkB;%ABR;wh2F@o#?-CSIn(?UY? zyXkxOvH=gAmQC>J0{!W!_m$l`CB`A&#$X$|AU)KSFS$eZLO3<>@DUl24HZd|4deP( zjV#{#S5Qc)a~ZK!;pt@b@n9e5P7FKEVUyvRW%?5zYTEK-lrKd=_T!k~07qHAq>0Ca zwoI5*=2TJYE%0uJIL_3!@j_wcA@E*P7y^Uaib>Swr2L$9oNulTiZ<-uZEdIy4={`+ z6@1XVYkh63;^0yD#djXJj4yUERk^0ZpArbk)Ae(rjjl5RS;87sIqplJ)P*z^H~vX=7;et=NqYdMH&hT_Ab$cj>J_m$?v1<8g>^LEY8N2*9V zO%HAR$4$HE^bIIk4#u=~=_z9AWBj)T17qZ6Fn_jRL1O?3~+qt~1@ zcV(lSO=S-kXYRA&?vo{5(g!NhCPANjTPJB7?|+ud5+h@s>sxQX3|15l*Pi5z$Xl-whRP@|4R=zVh!< zlowm28n*flX4CRI-xf2n)?&Z=T9WP<#}Icy>mCKdxnTIz|5$Gu6aTqTfsA{-RaoRP z)s^bLoXbp`gJa#e$DZ5yV~7A1@UkkV)9d)$tIRz5Ktsyg{{E^Li2*!nKb6w+O_VTS znCYaw4P$EFfq?_ZEsukCz2)%GAT^t4b-0l7)`$7+6mnyBipZ_rEyaAFCQBiqUjM$J zK142?@tHM`@PrSYAB4=q$WzE6_k)IEMqgLIQ^(fg$jxiaxf&4=_0J6CBiuM?1giQu zU%>w~q4Y#hW`$p;HibH-f`D;%l1jMq{#;bvVZ+#@y}4?ySeD|;5%(a>k9wX8Rp+w)DMHQVpPXTg)dh0AdJ&;KkE$5kGg_SCwtqsc54 z8L1+MZx>ZlOFxsYyEPzt-v|L1q9+ZQ6#aO8NG2&DNa1Cf+`Eyet?tiBRTKNuL|VEw zOrXZGGjOCkh~16HT6QuUk0cn@RDsxCB%ZsvNjW7U3zOcvM~lsS2TQ%Lo%;}KM z-2|E{&-l-oR-e0#QK<5^z0TkYwMRX}qhZ_mY`26{T=9!eZs?}ns3@C6?>d`%o4{11UB`&TMC zsv$x7?*(v&460r3I@ z=bYT@>!87;p^XR_=Xae!qXRCkB3tqdHQ!!KTTb;%y4Ws1vanBuWQ2Xdu)DNl*WPWL z#dq1ao{+AY0(_BqMamsnalo*;?P7jC5Vn5MFO4%t**Ji2L}}7rlob3GsYPYDXz;2Q zi*{?v#4X+im-5n4%0W71b)@$Dx16G!w5^{zp}vJ-`Dp~89uQACimFR#ty+NdTXn;N0U~#9k0}iG_N0DTciD}AFHK{^Ry49(^9UIQCKfB zE%Vs@%tRQIN9s5|V?rOK`)01->47H(DaU4?w$7W>Q$9>Z7}TrXFdvRoE{vThK+@-5 zXFyWri>Qh*+o#CCD`CyaH%ofs|B=bH%120dUJq}u&#l?6JzRo+I%K!iWs3bFl$T%_^j^hmH9D8T)y*J0q$U#<-tjOLf z*_$FG6xky)dqpAMj;a}?&DJkN`DT3ubGK5lZI!z5ou|KuiVjoeIpNoM=DYp|tX((#2i4-?EYh&`C$ zz5e)5;?NA+oCL2uWT(P&ZI{Q(jOQA5o(w4%Kn(TwIx#V&*ZM9GN4@dWo?aBztDTm~ ztV*IQfj}OXd8j{#Wx=4%>!7$;sh6lL*@VvPbY}C0yXU&a@jm!OqxF2%-J*0=Wx?OT zM}nIjogG4<^NrW)(VhBg1*fInNY2Pup2Ln~O57IQy zjgkxQ;$)-;Rw=odt18ayz5 z9R=Jm1~rD^qZzt7pI_3$c!bv~i9IgEGZlvm;iHK)#7x}QH{>buf~!1s#&4Ike^2GR zyC2kl?$+fDb(adv7cN&+T{&NmVD&r~pEb!HpgR^lg6p;RSHo5)%CFq5pSkIsZ&Vr=PuToo z^J!0p*cwL{TR~gKd0ER&FFi(ziHXq+2phnc5YnB3{3<(z$0hNY%39>fxo zl%0|18g5vc#5v9wt~HNU&JE`N%(ffMm>Yb|SQntiCiVg3R^4GLJz~!2z-GMlRLt`8YfRcOBWY;qbHods_Yvz-IT=c zJnG=u*VM$_V%QC5({{!5vpjl%5Xj8KmmAVjW5dg2*MR?R_$a~E`4Z%D9V*)S=%tR` zpwEh@T`6wjPnsCcj;_ z-BcD6_5SPkq$m!MBe84G{2z>dx}mA%wwwLrv$1dOY%Y7H%4NZVvDTX(M$nb){^m}~ zE9D(|X{B@)U&FlLeJ@)+qv9(oRHzXnNygYH*2hco%&&RfGO12#N!=ydVUms8sC6$C zGrrhW{os{QnDkQCCH}qa+fRh{a;#xtsFc|~ND7K~FJHe_{K4H}mQ{{^m}%l!%;iWnUoMIe;tiaVIs*ZT|- z1(o?G3}T%kTW@9P>P#zO9e|$Z-mCo1r`66vkWYqEyaQeQXWiYO>m8mraBXqYkYn??*CW zMXR1;FaF%GI`=%#JrJjc+552r+xX#zyRvHX{vog_?Rw~k&EmS?PVcX-Qh+04vteOS zwe7n4f{L{FLj=Y3I_Vjl==x}5wryvPO+#jY0(;ezL)GNX8bTvBqxRlcJFfnR6g5)( zbF1F_WgWeH!nRFw0(&@Yukl?`oQVd&uH|sz|4@8R6utUf0yh4o6}4Ucj5kw zG0ijcn3(OjJFTSWi`!{$y!$#^@98Hnmg(*WoM{Hr(9?(5?qYq&vEwjl@Jb{P=j6l8 zXv8Xz8?*N=V{S%DWvhTE9Y)^2#JzHMj+jC|Om1JWz|f|A_QMFX@Cz#U9?Iuk=9BdjVSWCLQ%PXvkdWmOf@}L;?Cl4d5&l_!|KTGqC z0B64bF=n}xA2U*#Vd!-S=ivL(rpM9MziID+y7E9wMDV-HimMM-$oYkhO+U=v^b+b8 zy`X%iS^)fz2Suk9Z4)OlF#tj`f@6~}lhb{%U$);Pam_Tum0-twmX)?1y%@2zdvP}j zTlaFhR^DX8c*At5F{3uB%DPb^g`-cv#N2@UrGj&w4SjqE|8>gdi44&rEfqxUK#RT__4Q$+=gENU%Nq@DsB z0usgJdmO@Ls3i_DZY$ej|!|`n`)!0UXz12;w1BwY+HUJ4?ppJZ2E>n zvVIY+d2x4ZXJ!iNypd;MJ(a}7NG*L_zK_jWpYE5@3wOT1(?O_)<|w7@Y0WthpERot&74mlPrS3?Lp-JinQ zk(Exl!djDH1nOwUpzhW43C-;Jx0}NY@=^-hMl5I$ls6tp_a+R8N2M~>D$kDmEZjaS zIkxGhW!B{uR9Zi*?nZDHXCysA56Ktjj7-Sg%zw*BynC@Kaa!r)5{mjvPN*^ukwqS> z8S{lde{R7SmKj4Z&;Z2_nL4x3%`xh*_$OnZ&T{McD&z$V)q&kRX2Ut`m;<^Nks~9_ zi`~3;Y6hp9NdIVJ9cLCqV%H{mW$3K~rFd7(+G;sMEw~y(>r5sRd^U;EA>?nIngX{= zBVVnX)$a}@Zn-di@iw3NF?ZzK_ob|fYluzAuK%?{^J21pzN?6b#Spgc$c!044HdnK)fC7gzO}HY+SugL&U9t^=_U7_ zj?5NPEa{DnB{^ZAfY{_?6YTBoD;W!1ixv;*1L6ud7Aq_;}Lr>u+7$*rv-7g^uM z3fZ!xx^GdU_O63}tWJw>`!@mTgrlLO$k}<^hw^~=*gKAa6R$#;+Lbw^!`)ry?odtp zIlSK7oNZJS^OzsCOEGzI;i+1r)dGmLqdjHlW_HA}nu#9Ul$=ld+@9#c#_ZmPADdTy z(~EeaBNs3yyBiI8Ze3Cg{bh<=XE{a9Zc^C`_u^`vClG&#sM6GJir_A2f43|)FfbVx z!X)&xnAGrirGR@Jo_9 ztMr@mw)4(ceTK@g#HZ18Z^G3r-x6HRxN96@d6hLpGGX8ba%rz*_qao`m}R=zq%rUI zyg`(Bx$VxpW)rcazQs-9ul~1J69iE&Qo9dUnHW6te(+uj@^V)Tx)yvM+4^>c+ECjv zIyu5vPleCG=vL^tyv6yo?ek{(A|oD)^=(SYrd8mP`5qDR`ooWN*2z01b0P;~CaqaR z1{)Qw0`^;o3KtP$XX@*rvTkKApLgrhj6g>7b z4{fs$Q4YgxYUFMdZ=@xxr50zm^s_EMEpT?1#>XH) z;6T$wWJ|TZS0}AbrcGWqO1rJo2V%T`*@5$hT#@AngA!YvoU}!0ib~HryAIeLvBKQh zyab&V2itdbqgFeHNQ3jGdpAw1>Gjh~V)*8W)&$55T(c3|4df!KqZEU!h$8IRJSL1_ z1eDFZ=H1x~E7Kuc@gXrH{&MS!hJT6brcc}r;>rNidm7@{;1LG@N_xyaia!!Q5p(Q& z{n++m$|?!llWz^N(Ztq#+)mZa5bLod$!rT#tH)m0h4R!>lO&?hvphLz5xG|Jl`X5> z<1%JxS$T!oT~0-3>$pibhF}PmQseEfP2A~?$?Z;B0saS-UL(UzFIcLzh|uS*nqoU$ zp44I)2bgRJu=0;MwpH4D76#WN^R<(Bb#^63ywRTnl#Jws7TcssZ$0{I`f}u8c3)sj!xo20Cp~+0|5o+5_Fs`w8o4*p0ca?#7&N=bLb?j+Ydc+gJ4{|I>A) zI`Gs+{RA0P+>yG6+!#4uft#OH_$|Wz3mPlU5@9W&>LR2}XS#UhIq3|H<+CBlZ6R1c zjS7k4e3N_9_kcg(AfBuAmzgw3sI2Fae4jrQe>#>yM6#BvoY&OWL4=L8p71geEk6G8 z`IDtkVuTMg)%?|J+nN*i)P12XlNr;ha#CB~%nr`?QB7+;Ix`Jc>skHV@i^8M6L*ba z+TxA79;E^DvrxF8Q(EcZjH~!4a(lxc_mjnxslk7%G}$aIDrc&Evf6TDcbdpQULQxXIg#tgdeO*>gg>6O*W765Lq<(F_3t)@< z&D!}hQpVn@C{AWtRWgw)2;TS1y%h%%yh%;AaqZtaRVR4W*!_C^(ge9*j^~U>)QNv( zf-F$L$*)$dZMGj19oy!;T!sE2C>y^6AH6heU5fRz=W*nGH`todWlM^>Ky>}MjpH$I z1S=@zlS_*h!-~DDD<6_*wSvcJFg}yT_tmUM@`&^Z+hf~f^T8OoG%SwwNd~!4UFh*@aACT-I{r=C}|t5aLSy0vhyZaHXOyJdok`6wAr+THBV$B}@& z58)zKVI)=wKQ9yGMzaEWFU``MmeyM$$hV*Xp!{1Rp&K3 z^Y!>0n*c;Fs1(w64pE<}Vrbb(Ir4t2Z~#jc)UeNRBYn02xfo6docD!X2W)b90% zZr#VaWar5VqZfz2)2_EBwh-!(J%sKkU0zT!OB*Fiv7ks9EcSkIhjqZ{v-&ZE_GSc$ z@4{VrpSCk(uo^Wo-lF^7l1sA9onO<`qKRZjo(Hv%s;D%)0Y#G021%&e-KOJ774ZmW zHGJ21Be^P7wNaYtfdPCaTW}1v`?j9pE&?Mpgfp)DHmJm%m8u_b%XOLlWuVt#ELn1? z@y@t(!5b7j{Tr@{9AqDyzjkSv5vsU$voL6DxhUDFWSrK&vqWmYx~&#fP9ZzFU;nbCUb0kRNVXIXyp;jmA#KY}81 zJr?Dn@(gOYE-kiEJo0($Xy5xnjEZN-$DDg;yPRs~z=O}{;`{0)9Uu121@db_s#VN4 zIs7ZAb|R7Uk8X1?(LCG~HNP?)S`)c9?`%yq9URd82OTR7TYK|awMCxJ8}sMBaigv> zbMw3vUXtD<+$Zu=Y&rwWNhJ^uCx~B?2=$CNou^sHQowLnE-o|M3`pj=Pnb%j8I#-q z8G;_HC*ODhMR3{Ai*SWNyYWThTF8%_;wS;<+OTfKF3HL4yJZJhGB|L24Ht(VSy zl>L;Gv8#oWYUDZvP)FZ|!@AldvMC9J?;^)%h!2WMoVF3o*wWPZLkXiK!uLII^NkZO z;FjfP(-ir`P-d^iu=)J3hJzZFVw@b6K)F+fQJ4Q}55bkjRtIy0=BTQ6br~J1(y~BI z)~C3aqF0+4u0Bz$OO_(pvgDpQLeA6pkz`{1c9K3j!xt?ontmN)y27u15TSe3RafazD zzG;WLKZ3oq135gS4>`8^ZFCQ~wIdLh-^zn3JXI!W`<`Bk{4vrqI&(eWaFlAH8ZBq> z7=hM!Wu#-Hf+QzG-MB=aM?nK6&+aY)=X24-anj_RVW3e{Bd|0iuWp}>ex^^oqg*68 zc3WEZt z6Wi2fHz%cZmP|(GY7QrRSazSXfhVc|WVHQoFA;T`eqpjE6`f~Dz#f5BlzcK7Z8U)b6<#NOkqC%b34x^8VE$se=4J={qt zcm5jtT~?QM0v_M-Y^^~sW2JWD#hSFz2{ox?IKLt52Uq}R zBYM#;;~mlRaCluTS7A+M)8Vu;zhj;DwpaCRa=Pf|qKOsu`Bd}4@Y~#<#rDMS3Ewp0 zdV&ZJ<7T)Znr=pwo;4W{&iKnwXI_dWoO%S&;W(UVlS5H4AR*2zZhK!s+YhA@T1yQH z={t2c6+Lsk={81*=N(=e8b_87%gqzNlw@ufp4W9df5hmgJ{{S7560^d&RDDNd0X-@ z@jH^&UVEo-^pnO5jW=yW2QEXr5}pD8%Z!skgGB0VVo>Mv^qlf-;=awFAeGel|l%m<@P6?NFk zL&-`;K(>SrdWov~x;K+sxdS^coOO?NOlN*JIQ(9SVD`o_Z;6ED1JzERE5cXSo(_x- z>L*L{JJ(s1B{$gY#-!I!wFYi1%LE+POxzLPS9U&BMv!wSF_g3u5I z7>b0!0R=w*UV;h;fYAbQh#;PtXXC63AQ!|6^iEMl@ooR?@sGoxUn>GY!lf)cZ14?E`>l1y((@NCbnl^SA;3oKhcqM_VDmDP% zQO(`j#vOx4KK|7W5Vh{$i^Sl0kRUvEm|qW1PBcRPB4a`TkR=j~f;HxZZW{;*u>Joz7X=(F4e!|AH_h{)HL+|A7!;P=E*f4+haBuE!-9a#42g zh?GBG)_P0%Dtpe^hxTT3hriGllm{m4Pjlv~xqO4de1hT3^`RSDSqbF?!?B zuN!cb)!nALOMOY% z)gHEq(wXtHuz*CZ1fC`3yc;|6ey_Otf$bILcLBOP9+V{=MnUoVcIG!lz};}wVh8^K zLPEvd+5gBS|CLDakMaM41s^3qME}3TO4bFa!-J24zk`QQ{;y18Z2?3z5NZHE6!8mH z4Ll6mt~xFleCZz0ugBnD%ujCs!bu8XM$x1|didV~0&oTZ-P9KJw}!8}fImPke`x|p zJel-&4FW|26Q0mucuMnc8dMOCkIdgR2n3F&mY&pr=lg^vfJOlX)Zg0ysSZfZCp0J? z;d(+7z{6TkXb?PF`gaYAJUs_g08fTJ(GG&=yq?gY$Wwj*+2NEeP&htioahU~!*)+- z2q2G~)ZpmTwjl8w+Y@~S@i6S)H5lZy21WnJ9H`TCzy%PeY=#M(UMrXY9_f2xUKpOw zeL{l@p7H|*KYh;ueCugH1W(^f7~((dL;lBjNXThF(El+W@R~hoGaPbyJUHa^cyKtr zB*O3h!eMyg?gK{0Wj)UZ4nPo3wO_7i46!w6q=NaOIA&e^#1@V>@x@e literal 0 HcmV?d00001 diff --git a/02_activities/assignments/DC_Cohort/assignment1.sql b/02_activities/assignments/DC_Cohort/assignment1.sql index 2ec561e2a..2ccfdd397 100644 --- a/02_activities/assignments/DC_Cohort/assignment1.sql +++ b/02_activities/assignments/DC_Cohort/assignment1.sql @@ -2,39 +2,38 @@ --Please write responses between the QUERY # and END QUERY blocks /* SECTION 2 */ - --SELECT /* 1. Write a query that returns everything in the customer table. */ --QUERY 1 - - +SELECT * +FROM customer; --END QUERY - /* 2. Write a query that displays all of the columns and 10 rows from the customer table, sorted by customer_last_name, then customer_first_ name. */ --QUERY 2 - - +SELECT * +FROM customer +ORDER BY customer_last_name, customer_first_name +LIMIT 10; --END QUERY - --WHERE /* 1. Write a query that returns all customer purchases of product IDs 4 and 9. Limit to 25 rows of output. */ --QUERY 3 - - +SELECT * +FROM customer_purchases +WHERE product_id = 4 OR product_id = 9 +LIMIT 25; --END QUERY - - /*2. Write a query that returns all customer purchases and a new calculated column 'price' (quantity * cost_to_customer_per_qty), filtered by customer IDs between 8 and 10 (inclusive) using either: 1. two conditions using AND @@ -43,12 +42,13 @@ Limit to 25 rows of output. */ --QUERY 4 - - +SELECT *, quantity * cost_to_customer_per_qty AS price +FROM customer_purchases +WHERE customer_id BETWEEN 8 and 10 +LIMIT 25; --END QUERY - --CASE /* 1. Products can be sold by the individual unit or by bulk measures like lbs. or oz. Using the product table, write a query that outputs the product_id and product_name @@ -56,36 +56,51 @@ columns and add a column called prod_qty_type_condensed that displays the word if the product_qty_type is “unit,” and otherwise displays the word “bulk.” */ --QUERY 5 - - +SELECT product_id, product_name +, CASE WHEN product_qty_type = 'unit' + THEN 'unit' + ELSE 'bulk' + END AS prod_qty_type_condensed + +FROM product; --END QUERY - /* 2. We want to flag all of the different types of pepper products that are sold at the market. add a column to the previous query called pepper_flag that outputs a 1 if the product_name contains the word “pepper” (regardless of capitalization), and otherwise outputs 0. */ --QUERY 6 - - +SELECT product_id, product_name +, CASE WHEN product_qty_type = 'unit' + THEN 'unit' + ELSE 'bulk' + END AS prod_qty_type_condensed + +, CASE WHEN LOWER(product_name) LIKE '%pepper%' + THEN 1 + ELSE 0 + END AS pepper_flag + +FROM product; --END QUERY - --JOIN /* 1. Write a query that INNER JOINs the vendor table to the vendor_booth_assignments table on the vendor_id field they both have in common, and sorts the result by market_date, then vendor_name. Limit to 24 rows of output. */ --QUERY 7 - - +SELECT * +FROM vendor +INNER JOIN vendor_booth_assignments + ON vendor.vendor_id = vendor_booth_assignments.vendor_id +ORDER BY market_date, vendor_name +LIMIT 24 --END QUERY - - /* SECTION 3 */ -- AGGREGATE @@ -93,12 +108,12 @@ Limit to 24 rows of output. */ at the farmer’s market by counting the vendor booth assignments per vendor_id. */ --QUERY 8 - - +SELECT vendor_id, count(*) AS booth_count +FROM vendor_booth_assignments +GROUP BY vendor_id; --END QUERY - /* 2. The Farmer’s Market Customer Appreciation Committee wants to give a bumper sticker to everyone who has ever spent more than $2000 at the market. Write a query that generates a list of customers for them to give stickers to, sorted by last name, then first name. @@ -106,12 +121,20 @@ of customers for them to give stickers to, sorted by last name, then first name. HINT: This query requires you to join two tables, use an aggregate function, and use the HAVING keyword. */ --QUERY 9 +SELECT + customer_first_name +,customer_last_name +, SUM(quantity*cost_to_customer_per_qty) as total_spend - +FROM customer_purchases as cp +INNER JOIN customer as c + ON c.customer_id = cp.customer_id +GROUP BY cp.customer_id +HAVING total_spend > 2000 +ORDER BY customer_last_name, customer_first_name; --END QUERY - --Temp Table /* 1. Insert the original vendor table into a temp.new_vendor and then add a 10th vendor: Thomass Superfood Store, a Fresh Focused store, owned by Thomas Rosenthal @@ -125,13 +148,20 @@ VALUES(col1,col2,col3,col4,col5) */ --QUERY 10 +-- Created table from the original +CREATE TABLE temp.new_vendor AS +SELECT * +FROM vendor; - +-- Add the 10th vendor +INSERT INTO temp.new_vendor + (vendor_id, vendor_name, vendor_type, vendor_owner_first_name, vendor_owner_last_name) +VALUES + (10, 'Thomass Superfood Store', 'Fresh Focused', 'Thomas', 'Rosenthal'); --END QUERY - --- Date +-- Date DO NOT COMPLETE /*1. Get the customer_id, month, and year (in separate columns) of every purchase in the customer_purchases table. HINT: you might need to search for strfrtime modifers sqlite on the web to know what the modifers for month @@ -139,12 +169,8 @@ and year are! Limit to 25 rows of output. */ --QUERY 11 - - - --END QUERY - /* 2. Using the previous query as a base, determine how much money each customer spent in April 2022. Remember that money spent is quantity*cost_to_customer_per_qty. @@ -153,7 +179,4 @@ but remember, STRFTIME returns a STRING for your WHERE statement... AND be sure you remove the LIMIT from the previous query before aggregating!! */ --QUERY 12 - - - --END QUERY diff --git a/04_this_cohort/live_code/module_2/module_2.sqbpro b/04_this_cohort/live_code/module_2/module_2.sqbpro index d24709b5d..c0fec596c 100644 --- a/04_this_cohort/live_code/module_2/module_2.sqbpro +++ b/04_this_cohort/live_code/module_2/module_2.sqbpro @@ -160,15 +160,15 @@ FROM customer_purchases; ... use an INNER JOIN to see only products that have been purchased */ -- without table aliases -SELECT product_name, -- coming from the product table -vendor_id, -- rest of these are coming from the customer_purchases table -market_date, -customer_id, -customer_purchases.product_id, -product.product_id - -FROM product -INNER JOIN customer_purchases +SELECT product_name, -- coming from the product table +vendor_id, -- rest of these are coming from the customer_purchases table +market_date, +customer_id, +customer_purchases.product_id, +product.product_id + +FROM product +INNER JOIN customer_purchases ON customer_purchases.product_id = product.product_id; @@ -177,66 +177,66 @@ INNER JOIN customer_purchases Add customers' first and last names with an INNER JOIN */ --- using table aliases +-- using table aliases -SELECT DISTINCT -vendor_id, -- coming from cp -product_id, -c.customer_id, -- coming from c (customer) -customer_first_name, -customer_last_name - -FROM customer_purchases AS cp -INNER JOIN customer AS C - ON c.customer_id = cp.customer_id +SELECT DISTINCT +vendor_id, -- coming from cp +product_id, +c.customer_id, -- coming from c (customer) +customer_first_name, +customer_last_name + +FROM customer_purchases AS cp +INNER JOIN customer AS C + ON c.customer_id = cp.customer_id -------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ +/* MODULE 2 */ /* LEFT JOIN */ /* 1. There are products that have been bought ... but are there products that have not been bought? -Use a LEFT JOIN to find out*/ +Use a LEFT JOIN to find out*/ -SELECT DISTINCT -p. product_id -,cp.product_id as [cp.product_id] -,product_name - -FROM product as p -LEFT JOIN customer_purchases as cp - ON p.product_id = cp.product_id; - --- NULL product has not been bought, there is no product id in the customer purchases +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name +FROM product as p +LEFT JOIN customer_purchases as cp + ON p.product_id = cp.product_id; + +-- NULL product has not been bought, there is no product id in the customer purchases -/* 2. Directions of LEFT JOINs matter ...*/ -SELECT DISTINCT -p. product_id -,cp.product_id as [cp.product_id] -,product_name - -FROM customer_purchases as cp -LEFT JOIN product as p - ON p.product_id = cp.product_id; - --- no number in customer purchases to begin with so will not be included +/* 2. Directions of LEFT JOINs matter ...*/ + +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name + +FROM customer_purchases as cp +LEFT JOIN product as p + ON p.product_id = cp.product_id; -/* 3. As do which values you filter on ... */ +-- no number in customer purchases to begin with so will not be included + +/* 3. As do which values you filter on ... */ -SELECT DISTINCT -p. product_id -,cp.product_id as [cp.product_id] -,product_name - -FROM product as p -LEFT JOIN customer_purchases as cp - ON p.product_id = cp.product_id - +SELECT DISTINCT +p. product_id +,cp.product_id as [cp.product_id] +,product_name + +FROM product as p +LEFT JOIN customer_purchases as cp + ON p.product_id = cp.product_id + WHERE p.product_id BETWEEN 1 AND 6; -- if we pick product, 6 rows (1-6) but if we pick cp...only 5 rows because zinnias never existed in customer_purchases /* 4. Without using a RIGHT JOIN, make this query return the RIGHT JOIN result set @@ -252,14 +252,14 @@ LEFT JOIN product AS p ...Note how the row count changed from 24 to 23 */ -SELECT * -FROM product AS P -LEFT JOIN product_category AS pc - ON pc.product_category_id = p.product_category_id +SELECT * +FROM product AS P +LEFT JOIN product_category AS pc + ON pc.product_category_id = p.product_category_id ORDER by pc.product_category_id -------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 2 */ +/* MODULE 2 */ /* Multiple Table JOINs */ @@ -267,12 +267,38 @@ LEFT JOIN product_category AS pc (Which vendor has sold products to a customer AND which product was it AND to whom was it sold) Replace all the IDs (customer, vendor, and product) with the names instead*/ - +SELECT DISTINCT +--v.vendor_id +,vendor_name +--, p.product_id +, product_name +--, c.customer_id +, customer_first_name +, customer_last_name +FROM customer_purchases AS cp +INNER JOIN vendor AS v + ON v.vendor_id = cp.vendor_id +INNER JOIN product AS p + ON p.product_id = cp.product_id +INNER JOIN customer AS c + ON c.customer_id = cp.customer_id; /* 2. Select product_category_name, everything from the product table, and then LEFT JOIN the customer_purchases table -... how does this LEFT JOIN affect the number of rows? - -Why do we have more rows now?*/ +... how does this LEFT JOIN affect the number of rows? + + Why do we have more rows now?*/ + +SELECT product_category_name, p.* +, cp.product_id as productid_in_cust_purchases_table + +FROM product_category as pc +INNER JOIN product as p -- will give us product_name, product_size, product_qty_type + ON p.product_category_id = pc.product_category_id +LEFT JOIN customer_purchases as cp + ON cp.product_id = p.product_id + + +ORDER by cp.product_id - + diff --git a/04_this_cohort/live_code/module_3/module_3.sqbpro b/04_this_cohort/live_code/module_3/module_3.sqbpro index b580defc7..0dd28b1f0 100644 --- a/04_this_cohort/live_code/module_3/module_3.sqbpro +++ b/04_this_cohort/live_code/module_3/module_3.sqbpro @@ -1,179 +1,321 @@ -

/* MODULE 3 */ -/* COUNT */ - - -/* 1. Count the number of products */ - - - -/* 2. How many products per product_qty_type */ - - - -/* 3. How many products per product_qty_type and per their product_size */ - - - -/* COUNT DISTINCT - 4. How many unique products were bought */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* SUM & AVG */ - - -/* 1. How much did customers spend each day */ - - - -/* 2. How much does each customer spend on average */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* MIN & MAX */ - - -/* 1. What is the most expensive product -...pay attention to how it doesn't handle ties very well -*/ - - -/* 2. Prove that max is working */ - - - -/* 3. Find the minimum price per each product_qty_type */ - - - -/* 4. Prove that min is working */ - - - -/* 5. Min/max on a string -... not particularly useful? */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* Arithmitic */ - - -/* 1. power, pi(), ceiling, division, integer division, etc */ -SELECT - - -/* 2. Every even vendor_id with modulo */ - - - -/* 3. What about every third? */ - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* HAVING */ - - -/* 1. How much did a customer spend on each day? -Filter to customer_id between 1 and 5 and total_cost > 50 -... What order of execution occurs?*/ - - - -/* 2. How many products were bought? -Filter to number of purchases between 300 and 500 */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* Subquery FROM */ - - -/*1. Simple subquery in a FROM statement, e.g. for inflation -...we could imagine joining this to a more complex query perhaps */ - - - - -/* 2. What is the single item that has been bought in the greatest quantity?*/ - - -/* MODULE 3 */ -/* Subquery WHERE */ - - -/* 1. How much did each customer spend at each vendor for each day at the market WHEN IT RAINS */ - - - - -/* 2. What is the name of the vendor who sells pie */ - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* Temp Tables */ - - -/* 1. Put our inflation query into a temp table, e.g. as temp.new_vendor_inventory*/ - -/* some structural code */ -/* ...heads up, sometimes this query can be finnicky -- it's good to try highlighting different sections to help it succeed...*/ - --- if a table named new_vendor_inventory exists, delete it, other do NOTHING -DROP TABLE IF EXISTS temp.new_vendor_inventory; - ---make the table -CREATE TABLE temp.new_vendor_inventory AS - --- definition of the table - - - - - -/* 2. put the previous table into another temp table, e.g. as temp.new_new_vendor_inventory */ - - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* Common Table Expression (CTE) */ - - -/* 1. Calculate sales per vendor per day */ -SELECT - - - - - -/* ... re-aggregate the daily sales for each WEEK instead now */ - - - --------------------------------------------------------------------------------------------------------------------------------------------- -/* MODULE 3 */ -/* Date functions */ - - -/* 1. now */ -SELECT - - -/* 2. strftime */ - - - -/* 3. adding dates, e.g. last date of the month */ - - - -/* 4. difference between dates, - a. number of days between now and each market_date - b. number of YEARS between now and market_date - c. number of HOURS bewtween now and market_date - */ -
+/* MODULE 3 */ +/* COUNT */ + + +/* 1. Count the number of products */ + + SELECT COUNT(product_id) as num_of_products + FROM product; + + +/* 2. How many products per product_qty_type */ + +SELECT product_qty_type, COUNT(product_id) as num_of_products +FROM product +GROUP BY product_qty_type; + +/* 3. How many products per product_qty_type and per their product_size */ + +SELECT product_size +,product_qty_type, +COUNT(product_id) as num_of_products +FROM product +GROUP BY product_size, product_qty_type; + + +/* COUNT DISTINCT + 4. How many unique products were bought */ + +SELECT COUNT(DISTINCT product_id) as bought_products +FROM customer_purchases; + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* SUM & AVG */ + + +/* 1. How much did customers spend each day */ + + SELECT +market_date +,customer_id +,SUM(quantity*cost_to_customer_per_qty) as total_spend + +FROM customer_purchases +GROUP BY market_date, customer_id; + +/* 2. How much does each customer spend on average */ + +SELECT +customer_first_name +,customer_last_name +,ROUND(AVG(quantity*cost_to_customer_per_qty),2) as avg_spend + +FROM customer_purchases as cp +INNER JOIN customer as c + ON c.customer_id = cp.customer_id + +GROUP BY c.customer_id + + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* MIN & MAX */ + + +/* 1. What is the most expensive product +...pay attention to how it doesn't handle ties very well +*/ + +SELECT product_name, max(original_price) as most_expensive +FROM vendor_inventory as vi +INNER JOIN product as p + ON p.product_id = vi.product_id; + + +/* 2. Prove that max is working */ + +SELECT DISTINCT +product_name, +original_price +FROM vendor_inventory as vi +INNER JOIN product as p + ON p.product_id = vi.product_id + +ORDER BY original_price DESC; + +/* 3. Find the minimum price per each product_qty_type */ + +SELECT product_name +,product_qty_type +,MIN(original_price) + +FROM vendor_inventory as vi +INNER JOIN product as p + ON p.product_id = vi.product_id + +GROUP BY product_qty_type + + +/* 4. Prove that min is working */ + +SELECT DISTINCT + product_name +,product_qty_type +--,MIN(original_price); +,original_price + +FROM vendor_inventory as vi +INNER JOIN product as p + ON p.product_id = vi.product_id + +ORDER BY product_qty_type, original_price; + + +/* 5. Min/max on a string +... not particularly useful? */ + +SELECT max(product_name) +FROM product; + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* Arithmitic */ + + +/* 1. power, pi(), ceiling, division, integer division, etc */ +SELECT power(4,2), pi(); + +SELECT 10.0 / 3.0 as division, +CAST(10.0 as INT) / CAST(3.0 as INT) as integer_division; + + + +/* 2. Every even vendor_id with modulo */ +SELECT * FROM vendor +WHERE vendor_id % 2 = 0; + + +/* 3. What about every third? */ + +SELECT * FROM vendor +WHERE vendor_id % 3 = 0; + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* HAVING */ + + +/* 1. How much did a customer spend on each day? +Filter to customer_id between 1 and 5 and total_cost > 50 +... What order of execution occurs?*/ + +SELECT +market_date +,customer_id +,SUM(quantity*cost_to_customer_per_qty) as total_spend + +FROM customer_purchases +WHERE customer_id BETWEEN 1 AND 5 +GROUP BY market_date, customer_id +HAVING total_spend > 50; + +/* 2. How many products were bought? +Filter to number of purchases between 300 and 500 */ + +SELECT count(product_id) as num_of_prod +,product_id +FROM customer_purchases +GROUP BY product_id +HAVING count(product_id) BETWEEN 300 AND 500 -- the same as putting &quot;num_of_prod&quot; but not all versions accept + + + + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* Subquery FROM */ + + +/*1. Simple subquery in a FROM statement, e.g. for inflation +...we could imagine joining this to a more complex query perhaps */ + + +SELECT DISTINCT +product_id +,inflation + +FROM ( + SELECT product_id, cost_to_customer_per_qty, + CASE WHEN cost_to_customer_per_qty < 1.00 THEN cost_to_customer_per_qty*5 + ELSE cost_to_customer_per_qty END as inflation + + FROM customer_purchases +); + +/* 2. What is the single item that has been bought in the greatest quantity?*/ + + +--outer QUERY +SELECT product_name -- coming from product table +,MAX(quantity_purchased) -- coming from the subquery (&quot;x&quot;) + +FROM product AS p +INNER JOIN ( +--inner query + SELECT product_id + ,count(quantity) as quantity_purchased + + FROM customer_purchases + GROUP BY product_id +) AS x ON p.product_id = x.product_id +/* MODULE 3 */ +/* Subquery WHERE */ + + +/* 1. How much did each customer spend at each vendor for each day at the market WHEN IT RAINS */ + +SELECT market_date +,customer_id +,vendor_id +,SUM(quantity*cost_to_customer_per_qty) as total_spent + +FROM customer_purchases + +-- filter by rain_flag +-- "what dates was it raining?" +WHERE market_date IN +( + SELECT market_date + FROM market_date_info + WHERE market_rain_flag = 1 +) +GROUP BY market_date,vendor_id, customer_id + +/* 2. What is the name of the vendor who sells pie */ + +SELECT DISTINCT vendor_name + +FROM customer_purchases as cp +INNER JOIN vendor as v + ON cp.vendor_id = v.vendor_id + +WHERE product_id IN ( + SELECT product_id + FROM product + WHERE product_name LIKE '%pie%' + ) +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* Temp Tables */ + + +/* 1. Put our inflation query into a temp table, e.g. as temp.new_vendor_inventory*/ + +/* some structural code */ +/* ...heads up, sometimes this query can be finnicky -- it's good to try highlighting different sections to help it succeed...*/ + +-- if a table named new_vendor_inventory exists, delete it, otherwise do NOTHING +DROP TABLE IF EXISTS temp.new_vendor_inventory; + +--make the table +CREATE TABLE temp.new_vendor_inventory AS + +-- definition of the table + +SELECT *, +original_price*5 as inflation +FROM vendor_inventory; + + +/* 2. put the previous table into another temp table, e.g. as temp.new_new_vendor_inventory */ + +DROP TABLE IF EXISTS temp.new_new_vendor_inventory; +CREATE TABLE temp.new_new_vendor_inventory AS + +SELECT * +,inflation * 2 as super_inflation +FROM temp.new_vendor_inventory + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* Common Table Expression (CTE) */ + + +/* 1. Calculate sales per vendor per day */ +SELECT + + + + + +/* ... re-aggregate the daily sales for each WEEK instead now */ + + + +-------------------------------------------------------------------------------------------------------------------------------------------- +/* MODULE 3 */ +/* Date functions */ + + +/* 1. now */ +SELECT + + +/* 2. strftime */ + + + +/* 3. adding dates, e.g. last date of the month */ + + + +/* 4. difference between dates, + a. number of days between now and each market_date + b. number of YEARS between now and market_date + c. number of HOURS bewtween now and market_date + */ + From ffca17a662b17c730ef5e99c4a2a25b1e38b7ba5 Mon Sep 17 00:00:00 2001 From: Stephanie Shishis Date: Tue, 7 Apr 2026 21:25:12 -0400 Subject: [PATCH 3/3] Assignment 2 completed --- ... Bookstore Logical Model - Prompt 1.drawio | 293 ++++++++++++++++++ ...t 2 Bookstore Logical Model - Prompt 1.pdf | Bin 0 -> 51468 bytes ...t 2 Bookstore Logical Model - Prompt 2.pdf | Bin 0 -> 56659 bytes .../assignments/DC_Cohort/Assignment2.md | 39 ++- .../assignments/DC_Cohort/assignment2.sql | 117 +++++-- 05_src/sql/farmersmarket.db | Bin 602112 -> 602112 bytes 6 files changed, 408 insertions(+), 41 deletions(-) create mode 100644 02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.drawio create mode 100644 02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.pdf create mode 100644 02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 2.pdf diff --git a/02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.drawio b/02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.drawio new file mode 100644 index 000000000..72d432a2d --- /dev/null +++ b/02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.drawio @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.pdf b/02_activities/assignments/DC_Cohort/Assignment 2 Bookstore Logical Model - Prompt 1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..82ca93cf8c35b0d3db27b007d216f6f7dfbd5be4 GIT binary patch literal 51468 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

-+hp;g#2i(eGn&0 z!!RC4Do{i^y}H6asn$(V;jDb(Q)s6)jvL|!B)B)xk8TG6Y9F@;f^H3tAe}V&165I=Q(qcutztGrxH*azMG0F6eb?JFcOr) z?5R{I!eZ)ZOtB9QZoqZL8d>u19!gSon6REPSu?n$xWRqZ|68tvyS>36thveq*|U0Z z@P%;p4a4ChKYao{r-F}fVkB(^=u`~@T(MZJ&Px2{o7@YRNC%c7e^?Zj$p4z9P_ZCm z-Jo}kpk_Lrq({xX5hR%$c8dWYTmon=*Yo0Zj)^odeqP@&MP`W6nXWjmW*lgFuV&<= zFEiOCdUQJNduN>P-x1DN*qqfe@!lUPF}>GMc97>Fj}TzAF#I#r_L={apW?Onaa z)0eKowS>badtBB9>}=!46p!_6L`ywQd!${ZL_@FNdNkXo?Cb6?YZqG%vM^$=z3Ru0*j!Jl8?)OL^wlnXVh-Vb>+Ox(mVa6By+)=Ve?&s;-?cYx+(#0> zW`-#>jQ9G}RENjYU6KkKz0bDUuUmC5$3bXc3Ejxe_ES&MmamT~W@B6q#9X7f4ezir)wmt&&s%ck zTAQwsOn*x=zd-hk*%q`wn2k+HE;L73ptWANnfNud+FHFse;hWH)EeOIH)WcfF~7Dz zG)HmEx}KJL&bmB$Gjv;?dfq5H^a3ucQ968P8<1A?JQKc-WIlVxUW=!+TBa{`k85yI zU(4K6?~eJJ8f-W#9@xu>Jz$EvM{QQN$bL z`u7N8>XW)}F^69})p2m88WQ&iQxxi?G3K?VF1|PLn4w{9cXYJ*x$%N{9VtKUw?FHx z?pTt~{k9kVQZobUh)NkSp>aZcOVV*Z9zo47I-;kt0Jz>Vj=B(=HlW)rFWlp;ge~yf z31jP{-#}ltCrj#l$LHdW=KONA@%(zE<=EGBdvs)EZ_hSb zrYZ$>9+5-?^8?N6mtA;|AJ5Yzs+1u!pvMv`%3H4%<18o+)@F#=crvN;6zqRVh=LOz zpIKbk{h|UM(>f*ESJ|;(6!EkG`vCPqDX+Z`xmZ(>)Oq%Jn^~Ky=iRs5Gq%sKc}5vi zt+g&J*$y^rDdeFW~a0;zhCKK z$zApsr6|N^#d_5+txj>5cmJKJ1)gM{@C$-`pP=$-eQbP}{=ykze>q_#@s6rK6kib> zjZAxMwbwNFuL{?(BZZABe`7e{z<(`_vZ8%XEiW;pUn)_T`R*`swWbGycn zw5kSL9$c(fg{;-u(;tCWQJxeL~C!LX- z3Ffz#H*UVT(rt?AESOD_I#{s;r_)&wUF=S8aKk|h9#2pV=H`d4~Z3@mP<6g zJNu)^v77RG12`WKSpu((vM*SN3WFQPp?WKqr1alLUv%P$3%zEO^RK9xd3aeOUhP$o zI%7r=&EC^72M0t)Z3@BC6S^Bw#iiNR&v41Nc=tvbrYzpcn`F^y81wKy@?O*Eaf%jI znyrrv{^BTrUzdk_j4lt}#>L#3XcGU-k-?{T#OxPbc5s~55V+MuSXTI>q^*)$sxn!h z+;5~vA~EnXZ>ia!^($N*dE}$<5W`1@MXS8Y*eV^dL1SE*Hl;*bx_tRIvYAh_OWDL` z3e~krbl)s~lV`YI(rgd-XexDT0k&M0TZ@ z)xR%j@Ga}C$}3&x3+CgDElpT80<5c$=i^lRD2tZG!ASJU-;er`T{QFeRk zm*I1A(jNG>^_Lu)weRXoSC#e8rD86GR;1=-U*wK2a{E`#of&er_ZUkjgX3z;H}h6} zoxhFI9-V;SOW$`WZE0?fXC{VYJDO=L&YO)Bc#wE&3v3i7?!UCwO>l`ZC6-ruZYG(< z&5-d)NSESSV|WVPfJVEG6;muc2Q7anIcvOB*G2foOxFmRKCTE=m6zfo5>iVBKe~|D zF5LTTL|h%pZc?11nBH}<;1Els$5Z=)o(64A`U)wfPiNk#)J2IT`C%pbWheUiCTYms z6xY_iV*LKt%iUQls9!YcF<_c+kq+_A-ML z9tHTqNt^Y6sUREj-YO{tyo-l^gz1m3n2txWCJraej3dCL8_O2C4c}!sCVBsJ@Cein~}2fkhh5dK)bPK;lJ9)v?2_6bu+Slh9NoV5&D>?zz_R@($3ojyjV zBR7)-zc87+3p@e_$CrrSNJ9(7S*vt?n~W!MG`TM5-Q@FjUU60Lkn0rNRf{I7g-u8n zpXsx!BU4LzG*wIBlI^N}M_LaKG;j;oK|=I-ggEq=K;u$oKg(q`u5xOnR{dCsNjl^_ z(n#^f@Xkx*W@0H|nsG=vYk=~|x@2+-*cy76)nCe_A@2dFPR1>*B&a=(Laeu|2Wp1L zqzD_+o~HSwqN1a&#-kpvIcH_0vpvWRTQ&N2fd}us7s6l4lN8_PS*`dp2`# zvt82u(yaRzd|NitSIT)G=SNdb#}v1KPJWqIiNiyTc|*jA@5INK*Fsi;>8mR1zyY_9 zBHp98E$&ZAUT+u1)zQ{Wc#Qm*e%_+T3^(N6NML{IgAOM(c0wGKO`L~!pdQM+Xy1&`TVU*5KnypT@lO)1-`MqD#9z9#Yns&+ zku`uHd;C}C?$b<{O?xI|hx301xB(c(oV{H_!dHh530IP&!vStm!7jsw1>yRo8N11DY>51qfIj= z>rT0K!4>KWI*ZUOPK3Xaqt|G7+dhBCpxZ3N9&wI$fZ0PM9F;g=TGJkTN)C)wk4i-7 z8_<(s&{n|0B1I>m>lWRK&-TWo8nZq{TmsDXdcZ5tsnR0M8iXOHS$nNhROKL|<=2eX z5G_{h_a`%by+h+8C^}55zw||0@i>=h-p=|+6~E}PUD}IAnAWG@yW-lrNR^)A7LB*q zdb@Rax75`vFztjh{1k^xyPsv;Y`BLfpjKFt7Ac;Bnjv`oBDt+r?nW^68v!5so1n-Zh19%n zhN|B^RlkR;M!9N`3r3>-Y+BhkPNIl()9B9*lqA~dU00ZGXz|xHv|2Z~Oi_c=AvYPT zLA?`xoYk&506_vc5?;w!%rgm?dbL(rX!^q%}XVhxVgi+O$fEHWlTyYHcUw09_b9_dWxPT`F+ zsTYE!y*rgSJ)TLr292r!$(f@IO4Ato`nvu(<0Zm-%rGSS>_yR)jz!XC%JXrnq*}ua z`foH{KWHQX`37vJL11RO#Bfz0tHk?J^5ABNI2Ja7)n{G<44(~ySJ@@BiN#Y_#0A0> z*rWS#G&vAC!lj&mYM)5-6@NHmQc9pue)NxFevOn$k9ncmMOCu(itIJ97&EQ-mf@q0 zJHM9>wC_)^+C$;&^fBrkS?8ZbguFyVWMBq8>dU8Y+k^WU&>yXryd|OO+X_r)ip#rJ z8;kQRgv+|oXfHuOFg|#RE_*EgnUnqpQ8qD2N*gE$1!U=5Q(yZ;&K9X7YUurT>)md7 z=IQstukId4H<8cIy=?4vKJk1|ez`@oz;>AujP>$5=L49!tj|yg^FXVolXz_SK{G(;969~h zzYwpJMF<@@!Yj+s&n`oa)ErO!OJ=$9l}?GX#OR;=6d~`Mu(tGXEvgE^AV#>BtoW$G z64QaGE1NI$qI$crG1B+X;0# zUG`*m{hb^Ia}@_C!KC-7-W^=v1D|xQ=UP|AgbZ z2u+zaz?@`W=L>NYaU*FHsk_=q*+%lN&a_>n9lqH-+Ggb1x93H&BfXr3;G^xrpPSQD z9=kf1v%gm~-*B46WGK=Kha`zhX#0bd#GhbrO(5jCqa=#HlN0E9gq1)$rL3lteW0iS z@(U{t{#pPBP^F8ilq5EaM}_obX$S zy1+KPu6$P0=SRtbm`DixFY(TQN0m#78N?P%en2^5ZQcJG5vNMqz}M_S?Vv9amJwg= zVNZkKfftV(>T{=I|07YgsR14>r)`BLU0WoI{`0M&od1b>d|jL35w0vPd~%%V&Y3*p z>k%>@A;s`qt~Zg>4W}&(^gGyY}&g68IU7+5Pvd`$qituA+2aRaptWZHg8?pwHs0wk@;It{_$_ z(bB3{a+7xBaALm7-tx`GZkO%ak5AunwWgFP&7m&E4*9Lysu0^`Ta#8YA3dLz-~C%un(0`2u^GcWvm8^u zEI&-+zI1Z&Q+R`$)MkF7&*A&Vdg_@dC3BH|N{hl$WAdnp2?oUkDhv5=iKPBO(TD}* z5kmfg#_r-Ofuk&E$?g=#IcGkh^19bTW@?5!-S0yi&!Kv&wI$FZxTIYv>WTaZH{;2j zC<|;vvIzVulGJ&vX*Cg*Ttk8*|3o-L9{jcfvnA>?k=SIKX>xti^@ee`Ozf{MaZ$+* zhd6;qy&VU8Ilt-BfIe|T=$wILlWsq~+O@!i3y)rP^=FbMSm4n_5=pqETfUdM7`w1Z zet%GxN8AT8uz&ScX;P|P;teeuMW0#WFbI35CZbMpskB+MP*wWajDNBCMgL~Zne5Zr zXxs}d!*$%dC<{Jr&2DE=3Y1*QJ9N-~@1j(Le~xNV4&O|E4|ij8@vG^k$;WOxLuZ%g ziuY^3o>#QQk7le?kw>|09p5GfpvA>*SB6n%K)$wgNOdI}*73ddwbwQcx3}N63zs&# ztBMPc5gYqXa;69+1CDC|zMW&>f4Q7(Eq!`7dmwMKc!bL`p z3#m*)-m2@ijDR*w6`hdx3Dump=5Q>CC{A?FKVO|bbG6NgxgD{RV@mUNnOrG#+o38x zeSFz^%EhieQ?k)n&aI(+|4oQ$B_Kn}X0hsR`}Qv6C;Ov^x>e?4MlyFFpM6EwTW)U2 z=2gMQX0xxRPn$gC6~d^Wi@dkft){*rVmWKtNg9N zuCyXQx5@v=M8qFh0VF98DT&LXP$_=uB7YfnGHlmhPKT%QIv(tkSz(V_pR~}uzmEQW zV)3!$rF#jh}_3HWC0VH>@G|5vp2swg~TF+kHe=&_hz?BZy&qN z>h_(=_*flwx#F->{o*{HJ_27ow|wN_He{rWrEZT^jiStHxjM6mQf8DG;PukI7I+S$CTmbcYx zo>wm-RZjNBkYq zPb@G*RH$cCszj^tqGR}1Ps!UV1eGRj<=^Y(Cm>p+wW-t?S9YN`J*6qjXBq@Wy(Lc( z{_xg%a*1oD^>#it8A$)*oL=i}4%E5wrqy6_0(`CzDfisl>MYBIuJx9BT7m<(7~}jL z^ytH7M#AGn!(RKPn@RM5vWt=kzG%j_qa@@72^D^C54?hVg|Uttcn0Y`Wt13nOnu=z z&BUofp0F{Zn<=7;D->ScO;$B?>TuLKLuC?Xe{?^Lq~xc?191=w`)59uXttJUENw(L zkE`$W@@50hI9{#c(aE%VaEcrKGlI{z<#?!*2jWnY=jektUD&*CuZ(byaa> zhmp97+)%Y&)?fjkyV(BlRf@MB{iPlHw44Wn%!k@(f9Ua84-iyL}OEZ&hC3 zHUF~_qpW7!&CX2ceezK+^VzVOO;;9Fty*b~vQf(_De%aKGAT~y96 zrr&z&8Ce;z8G%glOybWr$-Yy2avvS;5T5C*5^(0Vk%-<>?HJ;_ISwf=#mQl z0%icDLol#k^KXNB2MgyB5s*j;O8LRXVX-R?T=s491@zXW;_sdeQ`1R$d`O(N6Bz8) z{UWzg=qvQf1!Mft+T?0lVqtlc@Ia`>WoUIvp03UF`$Gzvrtu_anPda%_;p-?m+lhr zA~LhnpBzWgpN5@?UmhQDDun0w<~eyKPok2I+EaGgV<^N|OLi&8B9<3h>Tbv=Y&;fH z&_I+H_c{8+ieA3!C`|HZRNnZtoNO15>&K9Mr=YEdJbrFf+XO*6vS03M(oEQ^U)I#@ zdkJeNu;X`s>E6gBi%uG0D*F9c?7N$@7oo&TYWFLt+za7C->j(&drHaN zi+N;E{GnH1=`${n|(GF$-R`77_`{k zJbL|T(2PIF%M!Pyz``iU>!b79C)<{EzmAYX3l6W#DT6Zj=xr;tljk)7Vw=Acu@8bIb4)w)}J1cZ7O}xM&TVIZb;@lAZ&H)8W`OFHF$cIM8Xn2@yPC+#^NT= zju6BtP(2CU}w9`p(axED_8R8sxtz;s+NUr@PAb1sR`sIXOYhdUu z$)~s2YPnO+Mp6Qu?5Xs)@tEw6in1d#`;N^3s-qf45MKB=eu+v?(N58vhmp6lxAn7T znfXjUeO`1=;meP$vvc^jO_#A3?@y}EqJ0)`#Bb6rsZ0c~Lp5Yo@Wq=F}Bv z;)HjfoEpTbrVYGV6~OrTh9=rJuxKFJ7MJuhAuHZ6UX}%J7Hx4;YMiiAbQiU4T&(&H z0 `fkvU4qOzs`E^n5oPA5pLKuf!D!5($@#X9x}fav#HF%|V^IFuqS!Cq#znzo-3 z22O?@HS#tv-1f)lv5Ux*&+P$UoOHM|>}!y?5x6m^$com!b+bH^OX151vf2)YU*ov! zo@K)^`(@yOFcv<-gHc)>dhb5UZ!9v(@3rgU)}Ku2bFn?0i$9d-UiYjmRTwA9}05le43Vfz7}7`$IVZf86gcYG>;#Y~p0(XkqVc z=LorU9`at+z{Z4_N#LIsoq(f-fwhb>z{Un-1c8_#bSVZ_0FaTLnH_=vfPe>>A?ONL@c(_J z^M5HI_vD*E0R;cB4*vIQeHh*l)c^mb`M1iDg#W-1keLJxoJ^n=uvJ%bF?4pfhqQ^1 zgfP?sdig&9QY8stWjiqmVHpE^VkQY=NDEjvyZ<9AxjRAX{~zptqKTOWOdLl5Ee8W8yh1S41kbOAW#zs3z{7OV1yuHAjAg<-9+o(PuWC3PSjU!2SN`Ju9)+zs37k|MxGzf2yiO41uU<{rBy^rPd*alpIp!f73wl zV_K~LsTAa6_P=NHKlRdqbT?r&2ngnXIPC!D{~;Ux|M41F0TB4tzqAI(W!<(Pn9=#q zc>@xLNvl{W$uR{b#XqT^WKR&hn|oTT9A=UVUtj(!r*H~h)Gl!}=9wyJyC<1{zBxk~ z#qX@g67AUe7xHUZo=H|IktB0zKfu6?MT>EuU2KAkn9 z=P_PO$S zB8OKbq~Q`Ba3UWXLUY*q;(5pQGn2C73rAN%7tNZ#fHlcEu9qlAL_5~iXMvCbOp%G_ zA3STYc0xXopDnHu2lKEFEv6lmnb+%1H%;^sO$~cikR0$V-+KJ)=~$n&kI^cg*?xxX zn@s^5+WrTl@qcKJ{~PQ79l1~u5@G(o$GC{Ck)1JgNd9*uGl>5uvKbrLIz#^V%z^{ zKoAs({invv3Z)x8)S&30KQtgaGnCZ&hsMkdgc5fiXdo#2=T8mD4yB&`sR2MxT=$har<>-MO8x&&oKm$S1jelzFASmbdPmPTO zwqLQa!}dQmFcet!FfDXu`BP*6hf(!FgLD`eI{>Ud_J8n`57Gi*`#3x6U;F`K>%qe;h2Z<>O$5^~VADi$BPq zepo&Z;9vZ){ly>XFa9{7IL-&B1q$f>h5FfC-O4O14#S_(D~HrRSV zmb)-xi;W#-j$&csfRZvFln)H$r~aw2Lpmyq#sQlLJ7j?cV+Vi&dLQ^>g^fAvkd6vt z2ZCAeLV6I)8U!+x!Hy3O4%q(80X=M)8ysNReHj>1|A+MeGsCRgS->o?F%b-a z8Ap(K^_TL2VaEp;1RJx#ASn6t&%OcKTEUi&9d=xTA*W~$(n4sWFlB+Pnqc>^kW)*T zv@8IaX9R!*?T6(9Kmx}@4bpRA#s}o-!aQFf8ynp)?36AR!V4B_OGif;0+9mxP2M zB_%2f%6FIJ-%W^X%uMVcDvstBb`TDT znv0{olN$tj4xdZP#li$Q2g0i2=woANXTrtH$qg}Ny=dcL?&#?XQPqM#xjDIoAix1W zxDdpP4{mr4BH`p@XK~TORLRDTiQrSZ2sb{LvLf>5#l7Py$`Cj{m!<^7&Bfhfe_4DO$btgm|EnZ+hD$l^)6xQtrJ8{?y*@P#EzD}J}NJA zbxBLORh#l{K){d}H$@;5mUz%Y{DV(aX8k&RZ9zL*^-stvpJonP>HBxM>XVRi2w0j2 zO|sj>xjJMrT{7*Ntqz-8oDmE7;pXS(zP&YjGb7`S|JN_%u70~eew>*kbLi-dR`^u7 zG61;~cA46)oQC{bsltLuqFzGi2Br1QF*fDnowxt3jbMjTHZOI+j5VO*>>+G|_S z2BaJi49o+>n#M*Q!;!Jli_$6&&K(YSJDWiqyA(d(P!s+|=C=DfU$pQCUvF6rE7_i| zE>@D4SrnxKioNr^jyEO7(OE#o%qNE6${1_!ot_=QgAe*bo=aAF<`VTcf zF$B#X@2nl2UBY#?l-nBUk?#?7e|cDqz45-=rCQU7Ig+U=CdJ`6|8#2n4+EMXp-GCD z*|MJSYSIf5v@t)>C!B0XIEK`)#T4@C=EwUFl5vd4nn%@3Q~Nq$wF&d%CT^sK~g+V@=9ejN(jq=pI9S?RY6E?j^lM2|W4Cv~qwerV2?+q$Fz%lJM zz{Bbzs+SE%u+bOSPi1~ElQKUNnW+v}gMYUw4m`6hTOWDa8Jg0Xz4S&;=6EU&H6sNn znI4PENZ=Q5qn-y}>alVt!xO^ew2$a8nB>J;$wKH=;XD2J%9hiTjYYhg;H$+~)0F!@>whGeUMt43MjjYLmeBEDqQL)hYI)IdfZnax1z zkf&DfhikPz%pV>PIxb{OWXVe1ln%de_p;=n$;&@%MAH%NNWo4eW%2wOhgi9gMvwWFn_oJ)Ul-TmTn{Z35cabBp%bfI*OM8n zee0&_Idd!pf|htPp18KzZSrgxgTBMZ#lK{|wx@>_-iqD+d^L3Ax#Q?@?5t$_$u0y6Z!M!tD^wJHIJ^gzhCwqpGyw4e{uYUa~P%LSV5wZGX^X|)&x$*BcX{vTES^E)> zoB5O02*uP(o*gcWA0uEDDzZGSs>-%Xqu8UZ)J$x5yrKS9(u2pE^P_!DtfUreWCPE0 zpO>u|rd6wWW6@r|*Xl9+IRV?1K>gP6#N5}tHHjK_o#e{6e6v-TY<9fT$%08|TFZ#b&1%O&iZO((5wTvD;$}mU z^rNAt-m2n8a{hGe;RGg(*A**Q+bMiZu@YPIOv>Y7iKbJY93!3iZbH*HS6g3w4K;l@ zqEmk~)mY#Aa<%Mx1Xekgdh?2G#<5-6!>=R_XkYie5<36*Fy)%LG+FUH?1Ig#PQi;4 zajE`TiO(_=wVzgKU02VvX+FyK`7+|=1ANAYc=ePo7oJL|>L1a#>{}?#61P?LLgMWS z>c@3hswTNBx7mmYGmS-XiazofP}Us2FP=U4Yi*Qu&;W zC*pfE5MQ;Oa^${t^&*9mw7_Q__rq&f_03WCsSixMw*~F zmo{_Qt7eu_o9&KQ{n5JBr(;rVBi6A;SM6yc8_$uCFg)N$ST5ZPiErjq^yGIbzLL^% zX)>7e+N8~FTD`f*Zj-ZTUh7!K;`1n$>gREUX-{5xy}tNPsn=v)k>ydil#N|cx(njT z^KZi}tj`_~N9$MCCM+3LR%*#gt1s~yBVJm#$&#Rv+aA^HV z(@7#R@tvjXTOrB@rmfe@K0-}ubL$Om2gl$B@?Cp>dii$6Q9-M#g2Ss=smGkoy!dK= z=sopF(KMT;_Ixs1`;U`$*+*Qaf)^Lqm_kH8&?xqPa;i1H@FOWgkoZkF$tm*(y398P zBa0199WAQ`+rF8&65e$kPIYXZGxWMQSzobI?5vdDf8&*q!8JiHJZFNJM+{&FAE%@h zw%Si-Y!SpvKY4v#!qBiyq$uG|zWW5}GJi?^l1pZq%4RjXR_eLYBM@6^1QC)eFcFa z++<^eWWYG+;_*=V?npsl0hcl9p!b4;ft<&%L~++7uI*mLb8<4^8M|HDXKwIYM7kmNz zm^;*6`Q{c|R7SUNeM-$p(x>r1Cdb_7A!n)YX?3?G{dz>hc%Ov?%emystqMKX1G$dl zw+EX?w;}au&L4a|Z{53b43BL>@bkOAYDB#c!ad`eh23j6w^Vu>&i*M$TF(CR6-kb1 zAH_SK^z?!`clj8}6FdAJwOilA##RFk-D`NTy_bEWvoUlYDsZq&4$8{|PUP&P>+yrQ ziKJJzNnJT9`0;x1r|;`ao+Nt`<}aR`{>1vjZcBAStT@hdYix-pV`08r-jVGR0``1yvAUaDs$#TNC?GWzKa75`RTZ&ijGf#~i zQjZHS*xXV%^f;1;Qmf=zxWvUzHD8MmThz` zVUr0&^5>ejloVgcW^mnw8)Dr$GI{95 zLSG%vmw=PXI*g~XldE8xNqd<#1V7t-55|3dK?SwT_7G}VfI z!mft$rB+6#{T`y;R64iJwSGuRTpw zD9d+rgx!md*Y}o>I4|uC6FV11Vp7K#p`)q$%I5fD( zdHze|v_RCSxLbDQK~CJP_nWKwr&p{J?hmO=`b=mIhR#$>+2MzkeJ^GS5K(7yjbHs< zP-;=@pxD@3KHzgo3wIC?!AD_mDwSWH^5M73`6tRaoQE8%1gH~YpGycNwiA?fU9i;e z+LHE%yPPk6^nvMIGcUQp(2~Q@XNEKOhq$>FU<% z^QmQ=v^6y?&uqQ&iR4N8MJNvSr8Qf56N#HLV$1zwf*zXg6PufQUFE@AAAM~FbA0c9 zS+%O_?!WTR^S<*=0aJ=f8&1TNbCz&~BzlhCB{0W@oyd#FC-9E;;1n9=pk9Z|WtIasFvTS8eQ0#q<`!scx|nAVbC=Dg)a z^@N%`9kr*b*^eu4^{!e$qr_CN9?kzpbVGbn~!C8!-!>(S>``x~E5m=~SOR8q4+( zicJql=jD7J1Sxv2c9!Frl+(6V@{wFBA1`VA1XZPu+BEx?T4$D!#R9E`kzU=}nD{=2 z)pw5_S2I1I9(iV1c)p>AppsL8OnufJ^sBZmr}<=_#hdE|njyWEDRYcM?RffvM{R_a zl~aWf$~FCm-#k)8$i9-VrlqDCxb-|ZP-$v~>Sz%Ee4x8|I!>mwz^;71v9Z#GFyUy+ z31$8`jmvr3N#xi!L|fW$g372mX09FQ`*5`T-c7!$&CQD99p|kpTm4!BH#Y6x(8@gF z930PjaTxk;gp7Whn*HIsdfALY?qQ;hqO-R=`7}b5QYzW-?Ob|tn`43-Mbfd1g^IHY zqKwmV?pw>0Rm|Hd$GyLLoAF+4j844s#|Ocd6faJZGny2OQYZDU(mBPJJ@K`=VHHZ4Y=mObvr=vj3+8@P%|ejlUu@K-^V@t*IqXP+H8r*}@w)9ck`U1b-Y&jlT% zOfu9j?`000o6S0U%C4KHuVAp5ruC*&s9Df5yJ_@bD8{5B4jfYk50aK)BRQtbme?hJ~x6yNj8HD+DOf z0i`Z8O$#@O0kX=)rDfse2H{e$2Tqhkze=HB6)xd($#}WRX}ayzzJRyN@j&)!R~qe${<6$^746G=xehygcnkPixj@C(2I z(Ne(KK!wm1vR6?8BxwQ#EHgJX6Bpz`pbVvDV(JRv(gdn=$YT)Tov05&=PwB0&!2V2 z{|{#?3jB9~S?py~|1k@oKKH+70o_}b{~xCD|MI3Gv#bA@FYEyG-4~>;dw6gM;KPH@ zrDS973Nb)#He_#)HGtah-pi$5)ln!YcSRu`g&r9@3wr=bd*xII)DZwZ5GYa#@S7D- zjz;d15(Eko_8&m{ufou91w)N=e}w(V-W^aWq}u?=*>ey7!u)@e14FwSuu^c4Fi@%df6oy5&-TI4 zKI)&zfhyboTMi8A_5QtmK*9STVW67({}u*P3aQ>NImnR%uM`xmloG@Mg?R`HWe^z3 znouhVLFo=MCmxKz21C0#@P6?9QW-gXV3lEL+f;%el>j3bGqe0>>L~So>BEDO1@P=+ z0l?+q&wWJ>A9!*+dmaIBlECDCvjF7Cf#v+#SCo1neK4{lo_#C{0TPCpCH=GFJil2I z4@Nu3gSJR8oCH8hVPuv71^9Etk-+*T2aXZOdG^6Ll>3)7{ahb^C<}12__}5TrKX3l_cIDm&_j+NSZDY@o*$_N*eEdaAHU{~((e~wcrh|A-u;XV6xVn$G78@Pi~Ga{MpmXn>rQ1_Y@M*xB-76btx}VE=byfq`NHa{MpULuvs62GZycEa#USG(h@2 z4G78wK~OdiK^YkYg=(M-vzI49P%8~V%?K11_%X5+zWpo(6c>==2c8JuKXC!61!zH# zBL|lAYe7)@{qj!yduTnd9Dbx_{I=boxPTl#xHPo=DnXE1fM&;!k&W;plcV3X0>u~P z_}^%Sj1Zu;!pJoE_cIMpd_j)?jaJAA0n%y@aR--!Mie-0hJoS>KSt4t|JM#8asNvz z#NNn(wLmCd58D6AvgFA;%BA76`Q6DnXE1 zfb1VRa$q^X=8n=2ghGsL1F?^7@PL9Da{RzrA<&r|FuUJuLja?l71+-Y3Xu>L1R$tI0=Zu(H%8YMP;R7o{5w#> zLBR-h!ojuYMw>Cf;2<>t`2#3&?BJr%Am5Ypn+-#`F)|k@_dfOl2Spjw2?y7V8y&Uw zRQt_jpxhYQ43v96Sb{V&^j?YAfa1vhOSfHy%AgTFxo6epnn$*%r4rU?pKH59@5 z%P9l*dtj2?K~Ze=Z>oWU1?q&qS~a95VAMh}3K&r6J`n>BiWsO9{!X>uf(B|u4=(B- zgEBx{1OQ(o{2-{U1e_RZVS!iVEWmyR$$1_8vwpH}-~=2F3QGIOhOGRrNurblEfMf(*YV82HQ zBsYF=QJ|ef{tB8TX4EotKW>>99P2S-m!ZGtW$5qxGHUFvCi#2R!i-{u?#D6jHCg{8 znNcSkT(e&^GxT?!8MsLiBgeBJL(B_~^~e+cPPN}d1Cpu2KolBfV0X<6j`bK)X5dx( z9siioyHF(I{k#7G$9l}j=l$h@12kqt@BZ?@kq$G)9{OwP44`PD5sG5AAy5?K2oB4C z+v@LpD-r_0D>5Yje+FiZHFQ79nim`uG2^VENE#p6=mAA)0uI=iQT(8Q zfl?CW7BHi%f%}*DuJZn!f%1W)BJzZT8{kh490>g=x*Dt+W|tH{xnHm?^MPX-@`S%r z?RV#lA&r6}qkmg9a0J4PGlzm!4aMSuRt+-}7>eR`ep3w`H!vf-|E1dRm#>&H!B7+} z{hMmwxPcja{x8*jj~kfL!B8Ya{<|4~;|A}ZH#s=g_LT>A_LvdF`|AgG_Lx!pprtc_ zqDem}a*DvU6N>%&m*d1NKR~;by#_;c=L!^M%YbZjaS6>nq9FksN4^LAnV2!&(ETWH zK5+EHjPr(~2zX?6kJJS0tTAg506A-vk|5j0jPiz}sOjGf2po|xBjlk!Ids5Tqv&q1 zYM50r{@HW1l3+=gnGTBK{`VyL!4U~FA|CpaiQk(fG9>`3wx{;Ntr|4R-;+TkeRXh2 zDAxM7NrGb=X5>2bC%X&gw5idk;}s4j<`*WLny zt%D!4f&qw(|5+ymFa$ymX1q6aUwPonh#xaF?kf+R&S1te@2?*?2f>V=-(Ma$alnkB z-(Ma$aX>D}!Hp2vFoL}30IU${v;Yr*HVEWa00AGxeFLv(13?k*|AHuH$p6`QvgeJE z#tFg`W=uHrClwA{1pLA$IPt-Zr{7;5I8VTk<=R(2a7f0C8{c0)a8o%HNtz!V0Q)Kk z?gxir#*_a+L$HY>KN15Ck(U*yK!NI00HBEW=|6ownnFZP9)K*0O9Vp{v)&ab2%@MJ z0znir!XFA^{C`0d3ieT$vFm>j2zFAKk^g@X2=-E#G3|d42zFDLH3IxWAlS|^+FD{+DuTeM9~Pc6lzhcxOW_dT9nS< z4iXqWP3Ius97?OkjziJ5bSTM|*3t-3& z4pdDGWSAh21w&p-{2w(0cca2E>oM40L!N(GI!0Fuu%BHhz%?ffHD?HFUjbC2TLMt4 zxc4_2wMd=+jnX|Yd*EgH7fO+!0HYKmQ7}-q!LKdj0edRU=<`1a1bZsXsQo_(1bZsX zdJp~}5bUXt*YgM7jz0(lTRLV${~rW`EgiE?gg*!bTRLXc`X2;>Egdu3e}94CrbW~l z7;FkMB%s2_&%4gi^%@weu>-jM9Ci5#`*|Nasuuz{jy6F#VgFvtc!0dMQKL`YS0L(fa{vhyQ9sn~h zit1EBfeqCw0zqv9;Puf(Kp2`ehM{^PK$$cQ`R)TF8|?j2U;u#$vt|Pr>K6Imauhh& zb79sE@dtrm&xIMM{|A9!&xKi2#2*BLJr`zO5&H`Sw|Sw?IPm_$em1-8r4;B|H4J_G zGz`^Z0DuY^_JPM)Ba>t>m@w>w0ePn1pO=6F+JW_kqV60+U0$M!fIw9Rm9V2PJ%L0W zRryAzO+ZS7PTWxj1k4NRc|r3*Nja_Ijmg6|#rZ*rv_&D{5%6%RZ+ z+{D2O!fN5bp{=?1PH5U-)RFu)f^z`as#@`fG#fV-~SI(T~QjN zJH&y%Q7eY(!Uh%)wf?{>dO^|Q9o_i}&@brsqgNB%Vh3y+8jR=#g`$n>54}PFZG)DB zYAXT$M(cs5jDRPQqBazLE9)OsGEg8j6k zzf0zTBoA$eXk+_BoCaJH+C}{j7yN4%_fYdM$AWrLoR*6P@X$L|cYEL|V%&h|MpGZa zZ|DUBenT!f$b027hNC0kn*hQCiBiBXAsF1R)uopEp9@$JB5M;aB8fC2lngex7ZUAcE+8z8#`8lq&Kmj_2f&lALQ_XUI7a zUm6m66K@>aW_*#!X?x|8Q`6PEIJXE7F_3ZCUU5&jd-l*Bf_uh2mHC{$Ce`_;iO8_b z2YM|&8YHPy_!Eln;!du+8gLnMcDeat5z!s`UNh)ADjUH6UP0WK`kq`O*Oki_Bqj{v zd3xVB671Vo7e&|bhz=Wb9KC*s)Dl5Yi9=)T+NWH8kE%-oDt|I?V66+wj-xrdd6?VB#0a`_`&ae2_6^Cchb$sp= z+mK(CJhA9@DEkK)w#kvoGpDo`bRN+_Cd}D(j#z0Xv8mr+*YJpl@|a|>Qh78$926sz zb#Xg8-o@hhLde7`pIG)b(NQGxqY&5>~5#mkM#0XT(W&JKD}L$F(eXn)rRyL%R;fbU90R@iLs6i7t%SU z6BQydo=N@JDyO$8UaifHhV3+d=bKRaw5wG@dol6_yoC02lSh9an|b&L3YKSPBHlRE z2-@Q7!a?WX9V8{1Vj>}MnO0}}HOHyyfr{_K-YcD?4E@0Q3r$rYg-m1&4^2rQJW=gDcUt}QPLp1$k zPw3IqUL2lXRY~eO6Q(y#SZ>O*7Z4}QzGb*m>6hTN7gOcmGdq`PLQfYP^Hn!=R=4qL zhHv78Sm1ruuo(G(!c)yPbauDfOK=65?~}e?=bM{JCHe43H&n*=8H))o*&3x%%#F@w zQ_;jMu{RlIUw!8(!kUxAvTER!Y^^t;Bd<&Q<=ubW9?*^W>RYp*U3IPK#Cg5wkHy!z z(qpv0Ux87UZ7s9UeMxJ5?+LG~i`INHW!N!O_WYWZ$iPGRr08$Yy#`3QCD z@E_|&Wm&fpi7!gT^amL(oNOazSUc1rcg^`)mfwx&BL(SMo2L&&^pjW6os4hxq8MGr z7QjAvrk>BP1+&{f3!$#^*zh zRwm#4>eaKQ>@)5~&6IrO@(kHBJ%7qGNGMPDb^C_Z;#1}LooAtBRC2Ye5=7*aGU3UA zNPZrTt8c?9!Su0-Jm=A z@o*&ek0|~KZ9(&~D>RaXkx*YF^?$Y<-YcL3%AE>PZ0GK$Aku_aQH^Is3#aIGjA(1op9s6 zBwF3E$sPrv zuL2_~6FE;e*?p+TS;iPeA+-;lG=ybL8Sb1qIdx_FEW=AT7iK+aPWq*nC*F~5ob|p# zbI)vn-G}hIp)O+q(GT{R)2$Ia%^vIc3yKT2U&Sw*z18&Fo!@@L%2U|nW*FG+e8fL` zw1jfB__X8XiRF6Hv%~}?r-gbHZgnt|$KQBq@h<6|gNvB=H9Kam_@tMj8_=(TJ7KvM4yoJV{C+byFRhNC_eIx}L4H7c))h;7^E;y>MR{PD5c9)kFRXdigpDDc+WVl5n z&YS&^^s#OrK?(7fDdHN%f+i^!1!77mRffKodggd~5}b@;EOn6bxNWbuyV7S^xZ;M| z-jnpp`qgwv%{vLksAg#{bXikhk|@gI@9lKs7dgusDC2~yCmGAFZcX+kSi6DB0ZndHI zQy2~;usB~C<BEMPUYf&FBv)r(~H|ZTx{)*VAJdys{KZs4GCUKc zKUhUoJ$uFQG@GP)kC)=UpVlypAZ?k|W#El0x)nksf23jBXe?MM7zPc$TTFHyN}e^0 zf70jH3tba@ora)8stihPc4L7C&gUIu`K1lRo72ib5%qd1EG0_+96&VFf)fDYht<+vgsmv<(gtG8t@jhfacHeQE zSzjW!#l1dx+BZ-Pi-JKURCS%VLps_ydi{dA3DJf#!Q7PAa%<(*aXRC;;v=(uIenaF zfyFdeGDVUdcIt77c*rP~prkivL}euNPc=(GRgLO(45Ro28+DnUeBx+PsUUQ%>?)(W zIK}21;uW&RQCNRsIDFKJWu-C5E4W>>I{Ct|DKwvDi#jz)wJksLK^u$&UqV{5 zli72&cP>3(*95+}Z90(sE`6gd^t<@>s|fD_a}CmD?A%B^W>V(F>;;k^2pKgJtWslj z5*cDriP+@(R%OYR>sy!09Zi#7z2QGcmaM{k$7?(L$L9pCZN)0T*r!D=Ov-k|w-+Nm z+~puE!?VP)95|d$Nmll9>}@T6!leg!rJwDOCuyl`v#Z@3DG=+fT?npeHhrq!QH)!h zY*(yrT$0TG-OUb>_mVM1i#X3%Q-xVGU|aQW^apRT62FDu&m7-Bl<}!BPlz^JXq)rc zNQPSOUjNL&^3I;GdfYNZCA4$;S|d(%r>&W&Z{!<0r~!LvGkXK0t>um8vv--wUgDfC zO?~rnIl0PFeA^?e(IMzk==fr=CGeYtWu1tO{Zn0boe|SmV=~?w1E%W0o2RcGO;;Xz zxqNsO&pT|+&6W^hVg2m5xwVt62Ma-LX0E+Q{&@EAhf@VE+2fYw`8v%G&JFlQLLbdN zuFnM5v?ttIa5*a#(mo}dc=`?}M^HjeE-hho<9!4TY}w^mzus4<@-jc;~VjuK}4|_w)4l5vGA6 zvx_>3qiG3v<#>9WTrQ=PuU|QpZIC?ednAx%nWJ<)+v}2QPTzw&!}7GaKCb?f+an`q zE_g5tGn-e}v~`BE2(|MR`z7_w!mE2fR2!06<$ZU0aV+_Qo!C;auWHQD-I>s#;M9Uc z8!nTb&R4N2H2d%9QR>~9W9JJ{gq%NrzI_p9CGgzoL9V#i9a_yVwAH?%b#Idh>PSUB zaV6+>Y7NCsb}~L1UtupFo%6UGYr*MMJ??Ndd*H)sDY8&$NtQAOmkVvj4%ZvM2)jpm zeT*CbFfNX7N80C{Tvyle%F54UhCE|)@(vCTg^l*@?#HHNM<(UA%w&jXxL?lKJhYK zu#_W7yTx^$8v4KvSJwP~!8}P6TVr@>9Py#htlS%sXJuscWMovOQ+Z{8{{&(S9;`V9 zLtUqn<40lzQd=)2Bn%8B%;tJLbdjfR(Rol+`XD82HLhPOl;i~EG$pJlB=^enEqbZY zt;jJcoSU-rbE=Po?$E0HOa8d6*%B>e!Pqi8eS5=4S@7tL>LaSwSDO8^vr@0xpOens zVeL%SFfuYCrie2zf{`)la_9dr_h@Q6z47#EJo7+$pn_8vP7% ziP1E7E(*Y?Ek?>@V`%g!**`|p@DVo>3Av8veNH%^$R)Homi3-puf}?6#QtLnb(eLr z$d$zfGc#T@)kkMU@@&m#*CIDcO{A2!Y`;tMJNlLC5hV zP1j+2of{*WY^99&x9?SO!tcx6l+&L!WrW*k;I)V8fAY$77ne{nbR3vD9g`EW#F45j zmJS=tYwZ%f4ol38`lNYErAXFYp~Q&1cZMtG+|y-dJ|S#+mZnd?zTB@j1gp(VcGK&4djAcds{*vDBk_&e(MetZ0AI_4jd!IwI+#l&w*` z^($jz!+d63E=!xQ^`h?^*R)XE+S0Bry^?+(#e3Jq)aUg&FH`fS6dr++OCECgC2w%f z+JASanR$0SKch#iEcg>ET;R-=h^3F85SH-JX}ECQ^=Gm3sbam<<`++&J6CvztAsR;^Glth<}Ct`A4zv_{8q|3pcrJR1(@uK8P8!&cyrc+=w59pSdYJBO?-UEjEsBtyIoW+sPXwF4^pr^R(Yr>!qi+3F__Fh4edC8j<7{2o1gik z;GB0g@%d=JW*dV1k=VkQDV?^0y}aMc%Yy@%n(umVik>f&{kBV^?;$(>K;1d+`(>?i zrllpT(8ZiCoBkz10}WRLv84*bQh)P+OZYde`uXsUQW|nEPCj+M_+iZ7G|}csOS6;V z@%Ge5Q*0Y11!^fNB&C0W?DCtN=M8&>U>^P5?dEkF4 zn>Gy|>`Lhyu@NmS^p{<{9vBs4Q4GOUaETe?HlO!QiC%PprOwP3 zKHbpG^a#Oqmi4x1JQ z3XzLfXHFN|L|);z(Uu!GO_aZ|Y}kF2UN|3m=A#F3jMkvhI7tSTJ%00h8L4_TGXqTp z=OI?zpfY`1rO0a57Wa_0(1lCTQj@vV7JI6Dj>!YVDtM3WDTn&C#rc#S$Fh$=jTH6H zoj0dUvrxORXa)DsOz68>-h7SF=={dv^o$J1q=ju&l(ByxbNiEbL1%X)plTf#!e6H7 zrsy~A1gEes$!nZcRL@V&=+;#^$%^G=v9WmgaoPX{&&3wmX4%%3ZmPu(XA5$xVSIUE zhaTebMbq;(jSfg$v09tPUYMt%{pc{m(J8O)VGK91p#5%vhcC-_?|ydnJ8}LFQNF+t zS1SH!i4*HC!~Om6m`loigRgCASfvbsHeNA?H`ZBcpLk|WgSAuSd^(ThxqFzU22Wds za2_x1X{MIE66mZ?9l7*vti_mnI3%Jr`?czG&DG;f@D4|7Wl0^GNI#VcW6c^fqm;p= zEBGhc^!-%QQj7S$CKE0MylGy@d3^lwl)Tk9=k>2*TTdz|BI0={-v!icUt%Cq6ulgk zdFG8kxvMHG1%AuN;ULZLxJPF^E}wS1&ucQ)aaD3_4lY($p4w@yV5R6_q~JW?&*|fH zJ100NEhlu5tjQ+X&w#usZ0NQ1@kN3Z3hi*b6J|SfOlOaT56d=CulCF4xH2XvMLJsf zPOXo~d>_GE9z8|gC>3XWmQ%K(4QEEFW<5)#$3ISoZ%*|RLA2>%(a5*Lv3>^A8eXO~ zX8u=FLuXvPHg?nu@iVAalZ*IYE4_w{<_g`Jh1WgJOzv`7R9OG`pp}=hcg9@Dj9azQ z4zV6%c@6vfvW^I+%(RO+Oes^|*Bjpd zriHz_?2gG$B3xke^}FTb!5a7b#+p|QQbWHQMiPriKyP0En%3c9=Md47Rb19L@aUpD z-{*UJW^#w-_@78iNnGkNTP@)@&zBuU zRIRd}MZfzVKk|5DGmy#gp+n*BR~#btb1V4qC;D(~8!DYIevjgL?%b=@%X?*9_l8=B zD4fn47gzm0?f@>X%(#mYg#P#&l67n&e?y9>=MBbcCQhDku3{Bdl8q|4W2SiYPhKWy z&rukhorkc_s*$^~pLP>IJ3q`hPvo39dF(p#R*BBqL#eeH;`*B(0_nI2{K;ZY?bPUy z@8~jbIfqTQ8tE{+!>e@=xfjhr;!>>Bh7}^^G~-%-Ldr=>T-@oQmXlfDWQ$%P^$?!J z7<~o3tDsKl^3^v_1F1)k@)NG7Bu}o?mIx;jjg4RYXxWg$G8((&4UZbZcj&eV6V zFMeU`r9!E?La7Pq%W3+VI2#jZn0rXOpsww+gbx&VIm~A)=&4ECL+psYkpu6RUIwOFtao^-Arz4 zuy2$^<*m20XUODn(^nRouVecK#Gg4aCg8z39)cKej+yJe)IHBR??#^8bIJOCb#dxS zU=&#ub^C&YTlaWH`btZh8~?N$|4iws(vwvsw{J9V-wtoCUJ30T5APXImi3g%;__VT z5f5Bhj)@|O>dfZqv6_^d}Uc2gp@Y3!Sq7SOcoZMmASOuqp?R=QWiyLHWHIFLu5@+UUC;he3j z$Y#&xA*!6;C{2DXZocppIT*-D+n^W zc7OA5)BMq7S*~mHT*h?1=SyqH2QO)n$afo<_0-E;k2%x3j#x;R5L{uVwa=V^^*ReI z{_PBGB>_YyPE-i(cX%cFTL!d{fqfb`?7nD_FnjhPSA+@$5@lHEvd5vFOi zoPrOFRHm}H3y;7P@n}yt2wEuLF)IkdQI`tRRSF_1PQxkrxSd+>3Z)v$e9sc$y2IZ2 zR!b|s<0Pf_GrQ$Sn+gS47p4WjF@El5p?`2&G=l6Kqem|b{R@c<>CP|iRy`~wL81{| zbvgX=@wZCC=7J^#32EVUS#UaDIGt6GZ$Z}At<*WGx$&>5I1(l71I=P`*-b9;h)C1xl{ZvdgXLmtC0r6O2VY>lHM>5v87yCQWOtKkUdrG|weQ8F=^QG# znL=w`j1uym_vGGZj`}hjIVskvz;%(EY4a=DEcH8iQEIPln=<8M-xhApH_zkL*8GsC&6}Ucmj6IeJNFKrnIrovLT1ZX zJH8LtVXQ8O50Cf0Q;=2Eiqs_TB3iWh-r<}nT5Be{_%w%g|`g9kw(?*76+McSc$Mzt`Z$Xj=k|8+f_1|02C)z`rDp!(>5()Lc zv}ZGWm39@a_gAza@|mM{vAW{|d(4vFBZM6dea*giw5&{>6iwzYJZIG6+}K7vq(!$& zO3-Y_aQT*$`%HOkKw0J^=eyjYzUurz2?S;>{JaA!@<(!lRDWFJ_oqI~Zeu%^{p~)F z;C!B#g6EYuPUTu-x1)PUEn)N>3k}Stb57$uT(afLrGBfe_QGaN@Qr{;{N5cvS z-;0P2n^K`QnjCM=>Y$#cR;N=LMGn46Z(9}QIek-`lJAc$j#gOTwxb${2XGRYJq=!bqc7>sv7X;``JD+_-P+pe_IiG0bBr!Gy**DZti{vBVZ5NFu(IUY`uIb$hf9)=XYTT; zr0S@9kChcJ2Iw?Dp|iH5x>67*a>aD^q}IjK#fW9S1mypx%}#$Ud!gs2ZC`4XkO3*eDHPiP{m9+8$*2 z%G%zX)U=zQZ*6O8>jM{4lvH8!c>^Evrydyyi+&xNn3$-wb>Ge#uxp6te)GfZBAn{+ zjaL2E@}k3wGcr6&GrWE8;U4D{F9{Degp$xDaF*#Vo@$9PpSpGD)4FX5E9(5oqN^9JvH~SVDuPx?Kd6Kk+OnwkraLeU ze6S{YDLkCq_f|V!Q`eSLC#&~en!5C8pJs1B$;-&kUBhe>>>01;$687}OoG)SOK@?e zLNsneAh&U|Sf#{SPb-=g%8TDiz>3$WEKY7cM&j)Y8MoCW*-?HXKFox7_yBDM&y)GT4KLY0B)3fdO38Plr`?Ex`uXzH!X5&lFv8(zBWov$=S~eKG!|U6(GT0M zwId>x%_-z!Lype~nKSfl5jvPtzO4^ppTTvR4py|yj46_H8Z%1R? zr7N8&7}QOCBiIP#Oe)ryWLiZL!{d1HA9qb9Jnr^ z`re6+nJUAKikULQOpuv6!vrUc$2o7E((?WUB77v-lt%hUnAN1)41@|gutlPhZ0Q>* zkZeiQbSK%tH?lI>#y8Tk118$sg%Bnviw?Md^h8TtcO*|#fXSKH+@kfqaLNp0tT~E| zdnc@@GA8Xhctu+z3CZt|Y*E};=b1T_c&~Yj;=NM^$>WyR<)~ceYiU8egvIg2Em-WW zhi4cH#P6;X>zLkOCw?Pf7$VaWrW@Vd5{95tiaP0xl}JH1DVb{KdyN+{v~`GlN_ggo zVaF7cuBGoarIN9&LrEqfC3IH=mc^?}=#tD5O6bH|ZG+M}1>btn)lE9la&mv3QZ%$) zZuBXDel|J63Hv<7W@uLvrfO(f6PEA%sO03(q{fWM&Z#8I)hYb~-ib!{iZQQ~Lo+UB zTn;a~qMug~U!=IYetxH6IOr~7hj)SNx?Zh;WIzL|LTzTQ%QeAO+hqng;rmwfI@y`YHHk61nvgK38|!30!bhXZ*SNz18XSR>aQ&@nLJ$u8 z6O!b>4{81t?ujPmF`Jr*&Wcg5BL+@4*9D)sY_YEJ8p$30LRn-+?eACU`CCEJ3YW3&5bQrybcEdf5&?@4M*n?@q5fT&cl90sU@$5tz#1};#ca(`D#B zQ+GAIIM!0Oo8Py4xqD&v2VG&`?x%S7Z>?ev`ou&Pa_F{*(|+_Q2!3zOxYzgP%hF~- z>%!)j0O_2%F86QSEDM`{hB>R$z>srV?aif4zawtnt^!A&14m~C{Z@Cy(|)w<$_e@n z?JjQa4lL}>xP9Ao6Z#%dsJaUUUfjO{$LR(a0(N(=t6Ck?hLi+Q6Wuc&vsC=tt{6CR zs{I<{3c0aP(|2rvJoXPc4Kr>O%J0Zv*y*{SwcQ;*ExegpJokJc_tDDZ!5Ez{Iwz^A z+;GyS?(xV&rgJ%$5mfPOv~JGFZUnDl&3pC|CP#?Wa=xi}Y4=qBG~=^MESn~~a@{y4 zo2G&{b}!=?PZ99pLhqJM(>QZHkC}K789)+&S1NrpUb^76u$64XFfq?DDN-qkVWrvN z63?>io)LM9jHXn=V`(Qc1{AFt9m>{wrAlbRq|#4x+FEp5##=EAu{GPp;72^Qu(DT> zPBJ}};KDAFnNkqM;#2jk&RYha=a&%a%v%)BZ1u3^l1!?0V`!WuTu!01m%2>DG|nu} z{H#tq_63#b{5<#R$+(si(Uo@8 zcJr`CeE*T79&cXGIoO>EUq3PGsc`%RH?`chbKf-=n?s!0>zya^Qc@iCl<6aFpZ;KS zZzq2C$Q3qX`c-LhqH#geR)svyETmN6siC5W57y&zO=ok422&+7;ijcI)v=uFaZES) zh^nO?mf19HnY!YCwd66NNZ}@IO&ONFQ*d07Cec>vX~^PP%^S}oDvYk`_~=jEr|o6W z>zAgQhug<875dqH@BN%L&ZsYQ*P5K&GM+I~=kBEh(q`K@Y3*lh*zy!_n`lx6+?rD! zvFfnl7O>w)z^k(EB$3H~$)%8Ynd}|*r87JdPyJ~g2KSyZ#iCD4ZqIwDLTssg+B5R1 z^psC*IG!X>#T%r3btd2Gd4jHE;`zehthps{pitr{m&+oXuSlbk>DwHTMwlid(DAYlonlC%nY zqf*EH@`me0rFNAMiRUxVv%8o)Q&=M*`&#x<*^GDQ#UX#OTjq@<4nfgPrs+8G=Nf0Z z*r*|IoWyrSL(pTCK&ScA3cw zxU+YYB$>SN?$=!XfBJe0u&SHwk5?KgX=yDon?bR*r}CEb!z0@9t*NQZQH3JB6D zDJ_lU-Mr`i&wFHh?|yiA+}}O3CVp$ptQmw4{pJUA*{>QZBqk}P3&c!Aqoady1ju`U zSNr-bwOG5|oFCJz-*4pPzV(n@F7KyLjN+~J=^V2=@C;A8 zs+QPGQ>^y!mR;^rlAo-r%e-lA{&g4`q{G}5NIbe*T_B?ix@h7d*y(qq9aiVWKr|zL zCb=nH{yZvvYrnd zsWY=?HF~?0=q}g9IF_79hd&UICd$vpHa`8qT})ME^!Zj=bGVLLlP!U5+NKQpUj$NvSyhCUT@Q4Kr!k(|A~-F3c{-s(~DC7Z>%XbA*;%-oP;H8+tYQOTs_7Y zi$uZT`WKB-%2pg!Rtj7Ng@iT2qmJg;mi<)!6IOyy>A zG$*D*W=U%@nUwVkg0@p@6n?)IEL57^Sf#d@`7#Hr#PL^CG`Vfd&q-SyI8~T6tV^*m z6&f8J9Uko`G%o*+g`2oYPE9fOlzP_G3|rBZuj1|V#x#IuQ`SvIVP5WV`rfDu^uNIJ zUI&bvY?PS7JjX0aJxa|h5Lh_({~8Y3%tvR<>}+n)x8LWW(?7tgrOJ4qyf_SA$XMDG^qX0Mpm#Mn zr9?QHCapNtnH0D=_X=-sdG$5A{d^MM45>rv()hH|Px{-QpVjS8T&O%wGCNswGlH)yZ)eOrlSW2veCy@5 z{T`PeH4JPzI;IO>7N8U#X{B!yN;xv$B_88c|9V`R|5a^Svf6-x?_Au>NWfAFZ`^A^ zhIi0xC6L}e9fELC@R=Tog)9xj9P@nzVWKS+=@%CSksNTsFh} zILs%YO>aLnmS&1%EGNG)zp=O>4qYJBqY2Sb_+`{=0vdcsv2gs$%-s|t7v+ZP1!AWJ z9+AmM6KyX}`#}ycV3XlZqb7qd+w#IZrqDxE3bKma=?~*ked+ zC7t|p`Ai-%aj}8Spb7$E0AMUrhOa^Lyr@54<>$od#ETfppNREXuFtV5@!4g%D9HTRCf<;j1-B3Up6H6z ztd^g&I@9nNX$`ZGL`W~6U0m7EhYPEBu{Cl zo(ot^5NYck zMobwFPaaB-yz&53%#Rh@=oF&O6zvW)Au~#Y=B5G7b;G<==v!cX7}Ln=R-|m1wd$?y zCs2VDFsQ4bFh4Erb@%fqvjuAnRTdJ+t zewwJ=h~xy0UI(9-=zH?WCv+v_ zc?&pNP5F`O-{N|!n(!v1+mgUZUqEU0+477ed!I7PNZ@Dg#59l0=l zp2#uf$g%kAN*Y77_i>AgQm31%l}mh5rVdRtO+|h2*Xv;h_5_Wd1Y_xXsrM!-n7^V@ z)Q60F1~*{-oiUQk(Ql0PJQjEhSh=D3P?;+%7`B>dJk>%2rn zN&Z0pQu81)a!E$uI#*uiC`X<8RIsxp?P+OXn7^KXF=uAXtwFf(Ri2&%YsQzha#R8L z%$sfME3sRutBtOWwYtGNY}760xTq?PGe2wF)#^?BWzAmqJ?0x_)af z!ib207`8}j6JhKZ;g-v^nJ|m!RxOB>CJB>w$gag3364czfzvxw_yF zDX|TO?+R-QD+(qH6oy3WJk^xd8o6gibdmyPE z=FDiT)Eq$+NYIt(TS!6{X4JM)_*bgOO8!f20|RF}WYE0y$A+amtC2p%Ypwh{s9j4b2V9~GsfEn?C55})Iq50Qutr9S5y15=KMj1nR9aI%tKTWkCWLpT+OS! zW$Ly@$G(YAw|KKB?KNk9qftYI(#I_fo4Vsq@45D?c`+Nz+{#^+g=@*$DC@5YUr)aw z)SG@3&dO+WXk*hK_7hF=O%ld_=vuT8`gz{R0YDsjwGr{gu2D(Eoj8pEfIHadRps~IEknl5 z+;Mq&kLSu`|Bh$CbB}pN=lBql^|VDS^TlS>*rC^1SEe{=$(f$0n<{-uWIiL3dNA zy3f?P&_ooWXCB4OcPfz>kW}h%nv7=olvzemdNRG{C!gR&tj}~?LG_VZ*x!7S-ViTS ze>6!Y(Z)GtUoBDI9bU>hx`->z`?~NWDSRY0rDPMAFLBModW-mTp4q~5+uqEr{9KJAS?Jcg*y26hNN`u|+3)V(5!`N0NmAN=-oim>Y;X!)xm3=Q%B64R2To+zmkWEHEwUCW08jJRs&1Fao84j17|D=m zT{u~yWeNIRml|4nLWy;Hq@LvtS{drH`TWnBq;+}X44RIRA<_Y$C~_<+8{`{J0%mv? zCVpKEaH*vEE9q!m`~`X!HIs?-4V?Udp5f6|HBzgJXnI+(X+a4?JOIy>Ab~>0r@1o5 z-fz(~+P{^zO-;pEF^l8z)3tdULX9I&X$K>jcV$B~4Jg%$ovSko*V7?#`O$<`Y1;C} zF_ec%wcX`r#_v-{D45uz>nh21!oV?}44x{EZtW#0tjNv9lI%m%$gdFt2K4Jj=J%Y= z^g$FXodJ$R{#)R#jv882+GPYg8&olE>J>vOc$Y-RQaJ6KgJ0U!Njd$*AOT`}>x`<* zmW?k;?8hgqqX?VhDFKS5pSc<{{kp94(`-SG*Dd0c71{cB9+OXrlYZbHc*nU(hJu@3 zt;i{c(#(&!W?EB`t2sdrYaCr!6Y@htO4+miof5`wJs~*jCbP3e5}vC0JX%hU?g=8l zk)j)-=0-2C@`fnVxNP=+w&qPfWo_OKPu>50CRNmT_zU5%saPxqOv1y`c+|AaH+jC! zyawEB*2`co^Y&Wo{Llo{beEs6YGYBq?p!}BDQ~$RE?QsT#2{%|znmbfG#@t=d=_Mf;< z*h2V;YKV)O6j}}8zm=N|w_|Y!bZH>QnVzhNrhDrSoc-z&Z#8ywO+3VjdTSap?sX0p zCyOxrc=?IJlujx73)-6+ZXsS3zU4#DEnksJe{Q^!O552u_l0-KT!NGwlcXE@?}kxj zgImqtLgJ3R7)l>CIY zVA8kH=9$tH_atS3Z{((_pn)sAL8Z@S%-Gs2YEqTb$J=Di-|?8yo`@J2Pfn$o0^7K z>Pa3oo>vL(@*iYw?-G0gLfd}vb@o_w5=CHM)dA3l$2JH_Y_&Y6nUWQQs#XG9(YGc- zB+CnwVT407@8iN9oCHrU`ya`kiQb*9Nd$kH=rp>q3)~z>o&rc=i>KoDil=JZ65d|D zG<9uY>?TWW64r0;-sO7|Mbt_`y7yQ$B!IUAP3;xgC&Fauy_M%x61v9jYJ@b3*v2aC z167iQGNz24ocXED$)?q!gvPP$pkixPhM#f9N>aupqO|ZxmDJ{P!^WUgM5*jKysvni z8nT>*8(5q`y8eWu5yQ%DY*U%MZ;DbHp`qBu`4JUKLFk1*nz$<^Ln%Hjn=?9p=5x=S z@$wj|qplH@+9l&7s@R@w%RROy>ey;imsI109z|zy-D6-jYd)T-tl3PDV*dRMjc4bW zkg+UHS=Guu2u24)=E4s-KmRefRfe}dG4nMI?R(cIhhn$uay@Tx`R3-u?&qA2L(N|e zvzau7Vyy??e{v{8lW?DyWucSfZan`jFKMs2Sf7cr+`1&b)zBH&`Z!U0!iUd&?Pvay z9$dFuxn1SV>^UncQCir-l<$UAKaN%3QLM;Z@XK_E4=59;yw{5*Y`jSX*w21yT_0x# ztSGPg{>1Ck$7TrfS`w=qFl895Tqne=BOp+j6*E@x5GRmjv8)3=Wv*mqu_T_eXma>f zI{SH@Uw?=s&SzGq-^m=S%O~^rdsZn|6s8A**=Ckn)e>=T zgDFE7{Jt-prna&ojVggWAsqp@PTZ$Z>F zEN3+Pg5ILev;LEuQEiEZE$LRU|TY6 zisfzcb*-mtc}hV2Gnw7f00W0PNBo@_MW}?z@RgCO6t%&w-18{n;K^23W1^C%+3W1E zY!#m3pXn;OgXwHo0)r&3C0q4LJi7y|vYGD~W#>inBvqa{g5n6R6I}-Zl;8T5M`enh zx$x42=FSmMP|i1y_L``i+20KfiqSg0)vj~Yd!HE;8yvxVRuxWeFFhwcUO3(CKje7a zajWBd^>h3QzkbTww>2C3c7VoA9{N68-RK&zl6soKzo+xAG+>e0ybefrDq}euSu#G%LN3QoNS=gCJ-)LkX=< z!B*GA%*4dBNd!kobr+ff?g8UpyhEQtuVZ#!I}F{6eV2K>A*`hP*zmefza505!uQ*|+Y6Ib@5 zCSKdOfX$oc7PuE5K0@=!iQ#Oeh!?c!8%eb3%q_|1&kjROr>b^yWPY3ups}0%-X(Oo z*h*^JAl8R|78te;c0<#x!ydt{u2JV^GCWEP3L5&<6B}0bHa=3DY^ADQgh&RJX}5yL zh#VcfLd>Y4ibE&Mp3ONBs70E#Zl5ROki$$Kvl`QTbYvZeZh`ew2}Qt>B#P3Wn)_bAB?XLK=8OQyT0KGlAomdSLqJ1o|;ng#F44(pG; zdWp!lhU;&7F^v}Dr(Vyb>gd)9kgVIeqo5+LUZey7ualG=&^0S@8Jkl>HLA^M0wkpsqhfOSbJz9ey*GC^_&9RKA;X-XEsE z{PeBQHJK*+)w|<6x8?2QyO*aYx0{Vc-}t^Qox3mZFGokro9W%G9J31CJV(tZMhOg9 zAzGVI?X`*OvLTb2=h!%@lz&a~CKrb}qJoCxmm#gHf!+=!Rz81$0T*HjOQz`I#Vhnm zGkS(ptDv!3!}Utdh>_aPyxSffc}H<&&*Fyn-ocosy|gKxsK1wt6grO$CvDjdn7>&T zv%|BkT`XBlwNkO++Msc&taznqqhq^MakJFeQ!~}vV>wc%YvG-Vc6MD&HbiDc?jJz? zGoZ3x;TE|8Y3L2#ezz`}|6?qatN072XWm#VL{=2-8<9RBR{#WUmtooNsO9?sA=Z-_ zQvMw}5kDFdO2ohqNqi|7T-{37GKNJOFJ8oGs@qYrkD9TM8plGc)*Yr(c88=G4?Y2` z%<|$~E2v8J3xwgNB7_NeqMTDT5YU$6XA$XI7_Fqd;tZC;3NCfhs7bLP2^Actu|D&H zGf%iF-ixVGm~LLF9-Z2&#B-NO)o$Eq9{cRi#%vJC-t@)ITCgWB{;&_F7_H0+>S>T} zO4N+I<>Ww+3m?e#f-q_i2k*HW5F?;Z>9}X!ZH=^+tND0Mb=jd%3~2C}bp@Q?8V=MN zr(cbyQ%5D;N&H-oT3F{Z+lnpU_wm=@#e0v?nX%TOkkSEMr!i%i>#ReYcS{BEI@TXx za1ZgmaLl)((xI$P-Y~1Xa6xpDyc>3-+YEUBghRmfj&T#A45u2w&z$A;$I}Lx0tOLt zKO2d&m)r}g@;lae9CTNsY~UHfIsOj+nyRYj~Jv^^~>K#$qOMR z?w>?=B2*9L8v=JdWfZGib(UEC=m(PAi}a~nc!m>l^J`v4=H`E*cU5`wmK~C2a~S=D z-qwh9f-`DM%D{O3wbfmN$3PjQCMdynd+M(K^7?AO?V_`(tobJ8V80;%HGQ&g;;x{~ z&Mz`Y>bULm_VkXb%D0atC7F`kQF6lEF&~^lIxy(*199Nswg__LRXX7OabF>d(tUd3 z^zIFj8Q=E)uzyqlH)j(fF69bi)5rbDLBCnW^PfzeWYriPT^M}=v3D3LC;KfbQ$@ZA zbc=efYOc<%-lu#%ZOg7aPCqPrz3vv@dT+*_FF$W^w><&=lQM3ZQ& z{TL;r*W!0I_vI||n8YMb#oM+!Rw}AP)J^CeG|YU4bt=Sg&BM5u`DuV%X^BbEn&vD~ ztWr0n4J?PBi$<5Jhovrd#mds!HOk)zCNZxWlD%m5Z(VPm2^}m9a}D^FiWe zPok@;;ZXZ-BEEkGta-gXTpUJ!EeDb}KaN4qD@1P)Virvg zmMRHBmzAjvVhZ{ZTz!0+VeOJjhf0f0KgNcs6Er%WAy@1P_7>t$F`!Q85PYr7I`g>R zbc_hT4^__BDfJ?0t`wm~!>sdDq~Z*^9YnH=l+cTPcLYq3QYB{fI-3rAMH_hxmw{de zj?v1(ePGF{{_sh;7yp^K`OSGS8)6%G#JPaiPUN_JQqbV~@4mWLjN|c56n!M)Z1|l% ze)6mEj3v(ttzQG;WtY=mzV_H(fE{#tDA>w)*zRI8%anby~JF zLA=fviy1 zb7N^O^EbIK(}jY^%DF%#o89GF#xytk$=adV#LrAA?k6v=p73}~Z5^G-F2wayKqgZr0b zSicL13dfd^?&Pby#GKaEvI|E#*iZ6Ru8w@T++ zz<8%{)5rb7@;F+^bXm}wf$58sxO{-A=H`h~Fkw5TW7|i^qPTZvDtY+U;+mYLZto~U z(CaTm^&$P?IC8QSW`>nUiiP6oKf}!J@PXV_olF+F8ZV`)6>8#wascR}HkU-i895pu z);+QFwuE7g#UwtGPRLl4=Hn|!c9~NAjfw%p3MxN%jDrq75M+pm9TNcUEX8Z_G!;b% zG!yFtjer85%ysiq(!QCikK=al)i4~D)!@5}lZ?nfzchL0>nmfZ3wEy$`zKbZZamlo z#t}tdj7re`K~wGB+REygE`}Ue(VRnVWdMGc zAs1>5KAk#;D(zQJsrC~5wz@alM^a)AngttSxMVR|vf;$@*@o919u_#8(WvhY6*Ty5 z_Hz+u<#Ix(xSVi%ys7Zj$%deg1qi zXU>)S5sR^>J#Bom$9OG+&+^`+3d37ZKnPbvglW4OB@4qeapB=#*&=9gJWt|%Y2>RR zM{1mk(#XXTx&aDp<&AfEh4XPPYrj+c{T{*-44ccu1_amgmVM9kg&*Ur884fEeH>3s zHv7E%`Qq?OTn`E3H-Y+$Bz~8menkm!FHJ<&lPB>TXBA9iA)aifYH;n=3mfpDqdh;~ z7gyemcE4Jw`ookw#>WL+fh0rv?tu8_>4rD4o4txlnOZu!2M3{d7yThpN79w*}K9LDw!qt97(+2(63#B z=Y@#0w!s_WPk9#J$#HAX%{qg2MsJeIYvAXwjbE_B*FB*cK5Wmvje`g;(l1Pt7(}S9 zj{Et+oiu$EZ+o9L$0`8#;R5~2EXT`~UT#VrKab*=O7_d%TO9iUrDw_v2=2?@n}22u z9^3A;Z~ivHEh)N-BK@H;kXi0n%Q^$5Ue$t{bhO2mCpdbV>Kus61=gQl zmx)|blsvGf;Mj5C6((Dm&zlVy`jz;D^cUam;sxFrr|wKwmu0JJe+c>Yx>91JpiWrA z5g1iE?`oWIpLmP>R$yHGn(eOP*WK^75F9+CND~|p<8Lt`>~x`qy#!j-s3zKQpaeHU z93-X{Hz9lzVtoKAP<#bDXtLy$17l3ScgsH7v`eu9xtivcqKs;DhZ+|G(Vb%N+c^3W zCU#;}SNItu!bk5uWQ^jI^cG$c)OWgV8zAbgCO!&#_6W__t> zBK*S&--|$eflNLv+%_j?+*)*Sa&c7=Z|ct)B%NJ+9u1EzNy4uUxSu{y7!uRxlW=`t zK4D6qz$n5Mvt-)&&|Os}ms7H&C$={AY*&7=#5=xh!-QUi@9dEs^Q%@!O>6&a|m;0QiPCOWi5r4>#!4=$g#4XPkP>-~uEi!L*&)X&a``)v1fLzi9)@>MS= zVyRbofyd>A?{}d``aJ1hXIw14GAsJ&;Tf@p<>kq?(K_hjQz4XlNb>T=ZJN(~{2atol~4Z#A-K4LJTJzc#cnN~;Xrbol`V9G~H28(M_x}mhQ z5>{HaPklwclWFX`@J`;k^G+rpag^?)*^W_qUyGO z^_eBq{pL{<${3IJ6Ra=eSf9C9tj3)bMwTSwW#oPBDU-JF;-XjUa4Lr2m+cw!=@49= z>n9>@9KD9)A+ErK(|T-<@YRn=YSOgj zTe>M9x3aU&>iF`}cB4nQkd&fF)DqPIi9{XTT>4dH>++TB!GrWM9zte5o%1IRZ<=U1 zQNibGqZu<_>$?&6^x&ODsUQ=wwo#**wGJCa8JPR^vQI5wts){59XS|(u;HI!M#mjWd{Q-X)#Uz}%92V-^p5wvLiX!8?fM`l zo6Z25y=rF9X={(-6+hRzExMbjp@Q@v>Q z&_BwvUxDpf_n-N&T~;oirU^q6UHS2S-r-8GBzMVYUj>ZblJfUO2D-o64q(t2u^Im{ zd09C#pw9koB8Q;LnzQHehtDc9K0HpsJ9ubmzq6HgVh4jQ4QnPt$IHa?Zz5%`$Q!;M z^aGX#RGiSI-YMq1KjS&lKV+rgddD|y-L0ZNRFfBDp!n|SnkcmV@x)d4Xiw5<fFdOpzbs@3dj$^6PWQTD}2zpsIt2*2L^(f4poiWgswC|N0Bz&ewIC7}ocp3^ruTyx zS8OBx=J^bb>yg`{FRRVl{ry$Oj25{*1Wc>Vh12K7-j)ZSPLDPBpS6U$uSGg@X1KjQ z0k-=l_e>UI$)YfXbUi;z42UNB-ENSRoFxGtD##d0Q1B!PK9aHeHdaTIbly4 z|45qY=N{87$B~A!Pcsg-4K)(1Nl2cG*5se%8fEp&%BtLP|m?37q}uUP3E*m`v>q&aQbMA^00E%Hg<3-O^12ck?Cg zCZ>{tQUBv9V}}uVM1PiCB-NJ#*r-KL&mYG+A;t=JN+x0amLoj!W?aKju6}tU;0wwCe zu-A{u&u=mJu6)iH@r=y$X4`I}Z*HF0Esq5nEUu>Z`fz%zxxPgi%D%kyJh(gBJ6}S= znBlJ@QOVhAM_m6ULJ|aGxHP#0pEPi9OP%K>hn-O8HGZO*P;xPuy*wGMfiQD3yUU)W ztSKFenYcT-J4Dp0YLu3Tm&sz~y)_|^BA34|_L?DK5lCjq-?NOHs*VN$WZOt|KC({U ziQnqXCb5uGP0QhUWPW~4MI5+-N5(*5U+6ZFt@PV%gdM|q_d7xT(~kh>lA6`WkK`LP zS;&r&{CwW3l1Mui`N)joMuZ`NJM9@Kx#f6&Qw~v8W*6`*=p$Gi6N)ID;?;4cKs_)n~!EEA~IB&50#iIwbO%&_=qW!#F&-QgdMFL zTkp^@iM*1?|N9iNb-O`b8{1x}9iNBw$Rgdo*4fQKZ-#8@+sl>Srn89B4c)uZ&LEyJ zc>#g5b=UHA&?U`PXY}W#t6wdycj#>TqcfIg)G1g_AN=hU%C{1dnI^HD{F8^Q6)(yp z)VyrH%zp1Xusj{5X&N+pXGZ%p_$i$o=5mU*;*!=a++DVN*qt^P-XtBniWF#~qlSLj zxJ)&Hy(Bp*Uayb8S|BP@%BRO1yGZpp4La456m$x6vQ^nSwAvBjy~sF_1M9zLm2u6X zm8yxX<8!bS+~z3ut1}Aqk_5d6q7hrwe8|x+m5ro)TmrxvA1O*wo;SacGrGub|0OH~ zu=}drDXZHZ$aCtR{qCIr8X7u2KB4vJaTksJs-y59`cE*i1UvY#y;_fz?(7#4o`*N0 z#E3LA&=q?2<1HePP!RJ^1-R2y#71DsGrN25M!DW@`+fGzAT7O~-Do=7U35A>HYy=L z4Et@*f$tK(!^*_BkADM~&-D7Fq{$aD$zLcyegS&r z3pI4=SC>7*H4r+o?V6v)AQ`D zEaLb{+vZo{@g6~tj)u9S`EMw4evQ65q!pZSO|<%ID7(eJI>Z%|dCwiJC{#35CUdQF zlYzgB<5jfs`tpJ;&jR1hUD$nM5XGxBKVImK%F&L|=w$Oi@2*^5aj@XhWnooID6#4W zPLMQ<>3;mAh+>Jd4d9Sb;IyzD;b>NFEj_EdjF=*|^04v=d7I0tc&EG?JHq-sF@AGL zxA36cyJ@=YJhg#gx$rE4WVz7Q0AfdKsC*?BVHX$8?q1z&l&qep$R?F*^+F;;JApDz zMWs1=)pJ#RwVALyWSLk1N1WjBpfCAiXBhX$bDrgRPuWTZ;T?jK@D2Iay9x`^*bYVGQkc}J^>b+V1C1I8 zk4^}sEPEHEacNgTZ#LahcsVm@$HHC*vdC>&9R0)?7)cwB5d5`j{8qQnf`|!=T*8^m z$`{l4+nNc<^;R9SKtB-MKCxM;tK?SbU<^$C)3fN4Rez~Dv86$yriWG%q44oH-=ul+ ziAlOW3S`sAzx~I zh#6`&Z_*lv21~d~DyP55@_nlIicgV)FVd9|-shltJXGq0tNgAwHmg`urCSp6cxQ)t z*h~>u`KL)PV?QqCL`&9)xrobroed>+(_?sDqBexa5qjSWnX*#m)c5A!Gno4DLM4bx z@1CzdR|-It&|!aFzv!~+tYfoioX-rdy@?q}E0hfur}zF=tLM4fTADh~A>g%{jKs-e zchRwOrKe|lLho9-)Yw~>8uO&(x3bSE&-t?(BA*wvE?tAk%Y~69nyn2sx4X=z1hZV{ zixgTlUW%U1#Z2$5G|jAaTCKk=UtVo^5ciz z8AK4(5fIgxQ0Twt8O)l>@a3NIOBu$>!g8S{r1>T2Z}>zpjQf?W)Ocd|wqnZ1k2K9x zmhQ$aedS{Gxdb$B0aC3;hWJ>b22MWyqs%ykRBu>1KFROOozR3meg#Ngl8HFL57Xj0 z!Mpve43WT=u-Hm+QWB2QgGl6cc6{_d7T4T^ul(w zhqf)ZAWCs!0Y%-WO?5tQlgH>z?t-9w_4;3jjL1F!HnTIA!#H?$5c9uv+w*d@wg>=&OSH7YY zM@059{X*|bsLY;yi{tZoCE(L-ZiD3X-bBjrNP!eZD1O{ea#}S4YXJ0`D_WZ^pojCu zG%Q!cBjRx{W4zjiptrk8q#A+iO5cF!k5HR;q2zF!ok;q@AgD0ac~$>KA8f#N*}5(3Eb(gN)Q2xC9Kbx;{R zyG3#%eGAXu-G-9+gSEqbAp|bisJ-_zi}3R*QhNvPW|B*!qcL!kT@F{Hw%Ny4S ztOB@{gML?`r_5PjfGETstX*%yWW;bI&7yv;9Y~x>5CX*nA~SUv zQ&vzSlJ)w2s(IC$hsad<$UzoOx%gGzn_S({Xk>#U->y>!3@~bJWSl9PI!)$p`IS*K zyumsk)KKRov6fmN4-?NcYd7{xbUgG{SAF7mrUf+{-p*S@%Xku zzw~+=mx)G|yQ|vXn(SgJ^IU$}bJcANb&vC)Nsi+QwDcRexdlGz<%`MUvO^3cFYW_+ zpwnDp;Hj;APmXz8g;$s#gR*n0PcFc(PKRVHlzrI2ZR3T`SrG(jMH)c6olmtVY_N+u z2VxXD=}N+BG6Pz-q6 zMgc*BKaePnNRZW4esa`?!4U^W`|)Y^jC6^;26?W9+>YbiAT-`a_q|a%AT7_d9`VOC z$2Bcuw*^pu)sKF>+;E(D%8+(~RJlo3l*3U_FsQA$#HFklE7JTt=yxtYm#*+e&}*2^|8E_5z4 zTI1{ecw&VzB5&ila!hfEb7*l!zb<-#dmPg&&h-fEC|Kmq zkAFoVLGI(^oZZOrH4;6|qzNs)N73$q>|jFMy%A0A^UVsrW@JjVISKwZJ0 z%(1P1_@W>^mpy)<9XU+C=nLAhI>_?PbUg)g=TL;LQOO}W0x41DqnNHA6iJ8Wje@C5 z`MbYqUB7BSqrF?4m}TRMiR^J8>q3X8GhiAF^LOt0f*kI6#igH*629!DYQP+K+dvg! z(ZM#tM5j(h7g&*F{Pja#G1d5&8YV*K_oD6b&x!T3^q(to#(j`l&M0C)(-?~l1igM? z)vIsyN{vcmw?fTiO6VddU=p3J8SicCupfssnS~$R0if09!CH5L8^?GElL|vQYvC5=WiaYcVpSG_^Vlz;XJ{r-SBV)?QJe z)tfWg+8X~p8L=|plO|>%NO2yByCy0CF?aD5s}8vS(9!zqVxf4*DV8&i1q)a?|J&+L z!Xs;zij0OnC#BTr$3msrleUE*O+6nIwRtesJ~^q|>AK`ykfr$Dn;Eyn2BVX$^GLRm z*6YAokMAWPbBjyKwEA!1ru-3)L89_C>XOcCDJF-ZFPFc3C~j3mtJA%}_#IW;njKfi z8jaqXeThsDx=Ca(d88DEY?Z}fZSiS1eqW;1;%BqM}evfJ4~ zG@FiOKjuag%`%s$k#S1VZoRf8$yr(4sK&|LQI77Z|MTQJ63(49?mW5lVi}cr;V~kI z7L8{aMy$ZZcZp)EsU=+{FSIUXw+UBucb59Qwq4(oZ$$nwnx4F%`3<~LS*>tJzMH;` zbO?QFy<3qc_1q@^>_e~R;Y6@K9LHohzGQ*UB>p0sEXGVd0hXDJ zbu#TV{)hqxN1ZWo@W7+;;n=5-==pj8c}p_vMMC*IzJx9^eI&+Zu4^ol?8&JkVA)=> zKsAc5`UFYw-D^~r>0B0h8X8#@-{?hy6p??#-^h}DMNTgBGxpdiRtMpH6CYSP2_@2j zFz07Ji;P_sgrtUSnH3=!=F+^_1QpqIXBndsnf9H1Sem781%76&akJI4zV>pP(m~31 zOG&eK$`1sj^Nl%`j&ffM*VihY?_7AbRHARJ^*?!v$sSL8 z+3ubto?fP`X_jJ4Me#eH*OjIw)#}~$EioptAm5?;C<4Ro84Qk24kiXR|I!#>;N)U< zwob219E}_-?49f!pojqIdpQFe6G~R0e_o724i*O1vdYj;tPRW@DFJA#LXJjI5DX<3 z8<2$q%n5)h_Xh4IDC>`fiygoQx+fo)*r-whfGiL$2!IoU#wuc9FJWR~X6^)~%7a)q z*&skJG*(F{V8Oyj$kxo-gp%z)jSCCgxlw8{gFpZlAdn4;%4X)|0I-1Bz);#H6qv&X z1)y+p{pTZ{|I~m|4NN$oK!<)i@=nPmmx&I@-c6Wr1|NkHnN+xC& z&x(&5?I7HgT}H=ji-jHK_R7+1}pTP9S9`^=}rnOIvj1&_62i&J!UlaB_m~dw|Mld5O8&2{f9wC- z*1s*?^G*Jz4IQWvN)Q+2zfFPJq5b;b_nc7j(|?=%x7@$~f)eZgGgKW)D2hkxzikpZr&Z!A|IrJh1UXfh!o$D2EXe4%WaneFyBm6&RbKpCUXd$+Ci7*zRFIf1q3b6Y2kr+xvipt}p-J5iV+LWM_OIkpGQiW{Lk> z*NhEpo$l>HNi`gRe{efcH&C`yv9*BKF@dfh|DbdJ^$0g8*98q4us}96=z8`4z9>OJ zAe6LZO8H;yp4W8$qO|=#4aj!SAN^BfY5??)g@KY5?|o+R+~xJB0n7 z5csDChTQYE{?OP!(7oZI286C_FdF!tH}z*-AlE(4{-JhHT>4W3{lmn1pt0S>n5VU+i(fw#x;)Cz}5`2V8)A?Cb*# za=#2e(7<4rdEo+aJuJu02Dt}}J*dkCQ;rRqNQ|8}KjvgDz|j#>UPDf|(cSs(Vkd`?D|i9ek)ki@}tG(tu&g zK@o#6<)H5J@OeN*Y*f$ph=59$K%aeogq00>rt+#lB- zl!I;pFdB#pMgy?H#sYwi4R-FK$Eb()0GwTK8c21$&Dr{ZoqW!Qgkn^6v_~$sFX&9{b z4-51`xqnE{4>S-6W}bmSm^_CadJh0I2cW-<4fq$o2mZzHfq(IP;9vY6^cTMe{l)J= zfAM?JU;O?r`5zR#2OH<0f6n}W&J_pw1a{qkri3uD58=3{_daNs^DpH9u+JBAe-eCH7X-UzL!b}jVL2|~ zJ&^d%cDVqsYYv3#FXh-^*G?|z&H!T%x|zXhuye)53B9=avoFy5DVVhm%D{y=r?7K@ zVDktrFb9mUaY63+#}CE}xu^F&&|vdeXavHHmxB%Vj00uv-lJXrum?qQ!^}Mg8vte; zPz@#qIoN>EJFJKHKrp$*eai4~ywG-GVikJQfNcYcSB9wzO>Q4PH|UKlOssN1^EH^~ z2E{=?+_yN`p$GJbJna?nB2|WeC z_5}cj^)&z(HjaSM8`_8C0CK|m6%YucL9fWT9A zN^E{@;Q_s~gWk=t-Xo)-w|7vNyvNu7b6F34T$D=Cn> 0 + THEN TRIM(SUBSTR(product_name, INSTR(product_name, '-') + 1)) + ELSE NULL + END AS description +FROM product; --END QUERY - /* 2. Filter the query to show any product_size value that contain a number with REGEXP. */ --QUERY 6 - - +SELECT * +FROM product +WHERE product_size REGEXP '[0-9]'; --END QUERY @@ -111,13 +132,27 @@ HINT: There are a possibly a few ways to do this query, but if you're struggling with a UNION binding them. */ --QUERY 7 - - +WITH sales AS ( + SELECT market_date, SUM(quantity) AS total_sales + FROM customer_purchases + GROUP BY market_date +), +ranked AS ( + SELECT market_date, total_sales, + RANK() OVER (ORDER BY total_sales DESC) AS r_best, + RANK() OVER (ORDER BY total_sales ASC) AS r_worst + FROM sales +) +SELECT market_date, total_sales +FROM ranked +WHERE r_best = 1 +UNION +SELECT market_date, total_sales +FROM ranked +WHERE r_worst = 1; --END QUERY - - /* SECTION 3 */ -- Cross Join @@ -132,12 +167,15 @@ How many customers are there (y). Before your final group by you should have the product of those two queries (x*y). */ --QUERY 8 - - +SELECT v.vendor_name, p.product_name, SUM(5 * vi.original_price) AS total_money +FROM vendor_inventory vi +JOIN vendor v ON vi.vendor_id = v.vendor_id +JOIN product p ON vi.product_id = p.product_id +CROSS JOIN customer c +GROUP BY v.vendor_name, p.product_name; --END QUERY - -- INSERT /*1. Create a new table "product_units". This table will contain only products where the `product_qty_type = 'unit'`. @@ -145,34 +183,39 @@ It should use all of the columns from the product table, as well as a new column Name the timestamp column `snapshot_timestamp`. */ --QUERY 9 - - +CREATE TABLE product_units AS +SELECT *, CURRENT_TIMESTAMP AS snapshot_timestamp +FROM product +WHERE product_qty_type = 'unit'; --END QUERY - /*2. Using `INSERT`, add a new row to the product_units table (with an updated timestamp). This can be any product you desire (e.g. add another record for Apple Pie). */ --QUERY 10 - - +INSERT INTO product_units +SELECT *, CURRENT_TIMESTAMP +FROM product +WHERE product_name = 'Apple Pie'; --END QUERY - -- DELETE /* 1. Delete the older record for the whatever product you added. HINT: If you don't specify a WHERE clause, you are going to have a bad time.*/ --QUERY 11 - - - +DELETE FROM product_units +WHERE product_name = 'Apple Pie' +AND snapshot_timestamp < ( + SELECT MAX(snapshot_timestamp) + FROM product_units + WHERE product_name = 'Apple Pie'); + --END QUERY - -- UPDATE /* 1.We want to add the current_quantity to the product_units table. First, add a new column, current_quantity to the table using the following syntax. @@ -191,8 +234,16 @@ Finally, make sure you have a WHERE statement to update the right row, When you have all of these components, you can run the update statement. */ --QUERY 12 +ALTER TABLE product_units +ADD current_quantity INT; - +UPDATE product_units +SET current_quantity = COALESCE( + (SELECT vi.quantity + FROM vendor_inventory vi + WHERE vi.product_id = product_units.product_id + ORDER BY vi.market_date DESC + LIMIT 1), 0); --END QUERY diff --git a/05_src/sql/farmersmarket.db b/05_src/sql/farmersmarket.db index 4720f2483b29a5f302ff6c92a7328931d8379e34..844499fed7326e90c34ddc4b347eb0a326365a94 100644 GIT binary patch delta 626 zcmZp8pwjR_Wr8%L;Y1l{M#GH>OU^6s@jPMRKgi$C@5?X5_k?ddUkRTZA3yIQ-Zow@ zUSXamn;jhv@L1^bu`?IA^356;&z(WTqM#C^47jWtJEj7@6rBnCKcR)6 z8CX~un3?jjGwO>1l}|q3BQ1kPffWxsqqQg}P=R2t0#*gw?2NX8AQLRHEAZxGXAGAF zDM;)!#AbpiC(sSzAS-6|N_$~(gANDCPe26%!R4u`B?`{@MR~4?ML4|V$j;8_DhVF|90%~7H#_s*?(83J8#=7g{{N#`({3T^#jUhUP|!i4KWb{3re^j>OLJ#} zK`2Ox_*Kv@K`Dq9UP3x`km{5n(V-4a(ZNF^R%{|D zXp?381Z}?c(b8BJeRB90`~&{9?~Cug?}$(FE_z42dpzGgQ=Su^ZOR9wptLD*_lkSg z-S5u2e!HH#MqN3Vle{K3$RV-?zsL9RaU7Dr%F}X>yhHja%}DK1(D}}J)7c=diO3YglF>5R zDy_Oo+uhXJ(bqZH(Kei^b~pr!mmKShYhkpBxIMx|xSY+}Fn#WRyVe0a0PCKs03dLBC4^kSmfbGJNpk7(I*^ zNd_5SE^p{T+;4a|&4n-}h0|&X(;+vP+AtFrmwcEB;quBB%*7jFB10~MYmp(r=O|WT zGJ+GxaKeHeim)2Nb;v-h6o9=^oJ58I-BA`gU@A%{^)WVChxBW_q{V1SABE-^3rBc3 zZHHH3$qui85@(ac?5x7kIK5LJ;>|m8Hh!7QvMramcoIx5vfBc1Ac0dzzrf|XErU>! zqT601*tYXr{@60Wr819IS|19LH=yfeA`b+g5 z$Vn&wk5lx=>D^qu*>Z+UCe5Ua%W#^_oQBynZbbSi9?BIg?1Y*M7IyIPwjH*^JQ7v- zSb=vT{Un!AC9Ah_>8fPX%4N=$7B0Ukv1VANC72d6Ezz``rX`t{Y+88AB8UG1iewH8