Aller au contenu

Des données pour étudier le climat

Analyser les données climatiques⚓︎

Les chaleurs de ces derniers jours remettent la question du réchauffement climatique d'actualité.

De nombreux scientifiques s'accordent pour établir un lien entre ces périodes de fortes chaleur et l'activité humaine.

D'autres remmettent en cause cette causalité... ainsi un présentateur de CNEWS, affirmait vendredi 22 mai 2026: «Non, c’est pas une chaleur exceptionnelle. Il y a des coups de chaud, à 30°C, comme il y en a régulièrement fin mai ou début juin.».

Que peut-on établir ? Est-ce le changement climatique qui est à l'oeuvre ?

On pourrait balayer la question en affirmant que le présentateur télé n'y connait rien et qu'il est plus prudent de suivre l'avis des spécialistes. Ce serait manquer de rigueur scientifique, on ne répond pas à un problème sans à minima établir des faits et tenter de les confronter à un modèle.

Même si la journée du mardi 26 mai 2026 est la plus chaude jamais enregistrée, il faut étudier plus loin que l'exception.

L'IA peut-elle nous donner une réponse sûre ?... en 1936, Alan Turing et Alonzo Church ont montré, chacun de leur côté, qu'on ne pourrait pas construire une machine capable d'établir la vérité pour tous les problèmes de décisions... Wikipédia: Entscheidungsproblem.

Il va donc falloir se forger un avis par nous même, quelques études de données statistiques peuvent nous éclairer.

Le site dataclimat regroupe des données climatiques ouvertes (open data).

Dans la suite, on se basera sur une exportation du site (ormat csv) pour la période 2024-05-23 à 2026-05-23 soit 731 jours, convertie en une liste de dictionnaires Python contenant des températures journelières moyennes au niveau de la France avec les clés suivantes :

  • 'date'
  • 'temp_observee',
  • 'temp_moyenne_ref',
  • 'ecart_type_sup',
  • 'ecart_type_inf',
  • 'temp_max_ref',
  • 'temp_min_ref'

Voici un exemple de dictionnaire pour la date du 23 mai 2026 :

Python
{'date': '2026-05-23', 'temp_observee': 21.7, 'temp_moyenne_ref': 16.3, 'ecart_type_sup': 18.3, 'ecart_type_inf': 14.3, 'temp_max_ref': 21.7, 'temp_min_ref': 11.1}

Le but est d'écrire quelques fonctions Python pour nous permettre d'extraire des informations significatives de ces données.

Les jours le plus chaud et le plus froid⚓︎

Les codes des deux fonctions permettent d'obtenir un tuple comprenant une date (chaîne de caractère) et une température pour les jours le plus chaud et le plus froid de la période étudiée.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;dv,n2S5wbcy14: f-up08j_)9eklohxrP=[s6(]/mg7050g0F0c0e0b0H0P0u0p0H0e0P0P0N010c0b0y010406050P0x0U0U0e0L0q040l0I0H0x0;0I0j050T0{0}0 110_0y04051h1a1k0T1h0_0g0b0h0)0+0-0/0+0j0V0x0e0V0F0w0y0q0c0J180u0J0b0V0J0H1M0J0c0@050!0o0H0F1t0,0.011L1N1P1N0c1V1X1T0c0L1i1H0)140P0y0e0j0/0k011Z1v010v0$0F0j0e0U0F1T1^1`1 1#221X25270@0a0u0M0L0I0y0I0P0b170j0u0Y1?0L0L0F0p2s1a2a0j1i0T1H2F1/1;1:1U0g2c1w0b0j242p1T1q1s0*1!2P2R0j0I2V1T0y2y1i2D2F2,0`1_2t2X202#0L0~0H1T0e1K2y0v0/030C0C0p2$0F1P2!0I0w0r3a0@0u0r1a0e2-2:0^2/2b2=1#2@2_2{2}0F2 01313335372S3a0w1}040u0k3g3i1`3k2D2O013p0e2`1i2|0J2~3032340Y3z2#3B0d3d0d3H2C3j0_3L3n0/3O3Q053S3U3v3W3y2Q3A3b0s3d0s3)1b3+3l2;1u3o0I2^3P3r3T3t3V3x3Y3{3!3b0m3d0m412,3,2:3M3:4b3@3w3X364h393b0Q3d0Q4n433-463/483q3R3s3u4v3`383B0W3d0W4E3J4p3m4H3N4J4a4L4c4N3_4g4Q3b0A3d0A4V2E4X452Y4!493;3?4d3^4f4x4,0w0E3d0E4;3K4q3.4_4K3=4M4e4w3Z4z3a0z0@0r0z564?4r4#4{5d4~5f4y3B0r0r5k3f0T3h3*4W445p4`4t4}4O4+3|3a3D0r3G5B3I4=5F594s4%4u4*505M0r3$045$5n5U4Z5W5c4(5e4P5#3~5(405R5D5T4G4^5-4|4)4 5g5w4k5(4m5_423J1l2*1a2V2I0g1;2N594w2U1r1i2)0F2+3j5`1i4w6p2b0b0g0/322D5w3r6w6y615v3b5y0u2g0F6E5u515y2F5C5|200G0@0Y0v6r5+4^0n3d6Y6S3o0v0@0B0I0x0L0C1X0C0y150P330J0e0x0g6%584Z0?040R6~4Y5}0@0c0F0U0y744@20710D0t6r0_682E5F6D016z2:3B3D5c7n5Z623b1}6J266L7o6F517s5R0u7H0u6Z2?6+6-6/0~0K6r7J6(0/0I0@0N7R7K1#0U0b0@5m7k3E7j2.3L7u0C6A3b5%7t6x7C6N5M3$7z276M5;4i0w7=7G7I7Z0/6U040v487Y7T3N0@0b8b6 4^0I6#042Q8g752?0o0@0L1`1C7c3M71737)85017#5k8v59710i8n7d3o8q042f8E700@8y7,8h7L04787a8O4^7f7g7i8v7.7:0w5?7?7~5L803~7|7B7v6G8*1T837I848c0j77790y0C6,6.8I3M7V047X7)7S8T3o8 8X8z8c710O8Y8U8f9g9c0/710S9j9n8o1#0P6P02030d0E0f8W910I0o0P0F0L0h0F0F9y9A0f9k1#9q8$9t2t8(7q4j6C7@8?514k8;8-5!80643H8{8{8A870b6X9a8A8~8V90927N955997020V0c9P9@8}9e7b9U8w0@9s8S9u3/7M6.0C7P9Q9p0@9rak019w0@9N9B9D0C9F9H9J9Lasa4ad8Jal040S7h7)7+6q7-9!7/9X0w4B4L7.7_804B9(7^7 5haQ9-9.a$9^ag7O0e7Qa59o0197992,9bae8d8l7RaJ69aL6E8)4SaRaMaT5h4SaW9#5Mb0a#7H9:8r0Z6.19a-a@8xao9_9Dao9ibka)aia+bnamacaKa.aq04aA0g0e78aAbtaF8HbhaDa^bma98Fabbp0493a*a,aCaaaFbva|bx9x9zat9{aw9I9K9Mb#aBbwbiam0D9TbU9W1`3B4.b19)7w0w4.b67D5Mb`3Ha{7la}7C8)53b{aX8.5h53c0b33Bca3)8c876Wao8k7JbM5,6*bQ7N6:0F6=6@0C0v2m6wbF8Rb.bJbl90bF8#aI8%aM8)5l9Zb|8@cQcgaY5w5j6Q3E8|a.9_bRai8mbI967W9~4Z8C047(a=c56u9VcOaO5xcRcc9*5hc|cVcd5w6Pbaa?bJ87890Lc.76a_c+9 8kc*a=9^8L8s1y0FcEaoc:5AbUbN04bHdj8}8L8Ncr8Z8QbPbLdt8P040DcL4ocNa~c{7s2|aScW6H7y6KcS6O7F3ha$bba69`7a9|94df4Za:dc8UdFcGbVbXc6c$8ebFandB20byaAaub(ayb+9Od`b=d;b@0j5w7=dQb2dS3a7{dVc~b}5$8_dZd!bc8l9?dxd^d%91bRd.1#a00Ha3ewafetbFd?c^4rbq7#bgdGdCbWaod~b,e09Gb)azb,d`aHdLa9e85w8+ecdW5=1~ehb7800r8+8`d!d#esc(eJeBa/c-d+dd9mc?dMc8c{9,e%eicT9%e+c1e-9,e:eo2y0cbfe_bjd|9deDfjaEeFa(cuahe^fm019qfo8ceP9ObBbDeVft9qdw3jd7eHfleL7ebOftc%cvfsfK9RbueOb!9OeRaxb*bEfDb:e6690T6t6a6o6c6l1a0c6ff/2L2G0e1Wf,0T6d7j0Y0!0$0P04.

Les nombres de jours extrêmes⚓︎

Le but de la fonction suivante est de renvoyer un tuple contenant : le nombre de jours qui dépassent les records de température maximale de la période de référence (1991-2020) et le nombre de jours qui battent les de température minimale de la période de référence.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;dv,n2S5wbcy+14: f-upj8)_09eklohxrP=[s6(]/mg7050g0G0c0e0b0I0Q0v0p0I0e0Q0Q0O010c0b0z010406050Q0y0V0V0e0M0q040l0J0I0y0=0J0j050U0|0~10120`0z04051i1b1l0U1i0`0g0b0h0*0,0.0:0,0j0W0y0e0W0G0x0z0q0c0K190v0K0b0W0K0I1N0K0c0^050#0o0I0G1u0-0/011M1O1Q1O0c1W1Y1U0c0M1j1I0*150Q0z0e0j0:0k011!1w010w0%0G0j0e0V0G1U1_1{201$231Y26280^0a0v0N0M0J0z0J0Q0b180j0v0Z1@0M0M0G0p2t1b2b0j1j0U1I2G1:1=1;1V0g2d1x0b0j252q1U1r1t0+1#2Q2S0j0J2W1U0z2z1j2E2G2-0{1`2u2Y212$0M0 0I1U0e1L2z0w0:030D0D0p2%0G1Q2#0J0x0k0x0s0^0s1b0e2.2;0_2:2c2?1$2^2`2|2~0G3001323436382T3b3b0^0k3h3j1{3l2E2P013q0e2{1j2}0K2 3133350Z3A2$3C0d0^0d3G2D3k0`3K3o0:3N3P053R3T3w3V3z2R3B3c0t0^0t3(1c3*3m2=1v3p0J2_3O3s3S3u3U3y3X3`3Z3c0m0^0m402-3+2;3L3/4a3?3x3W374g3a3c0R0^0R4m423,453.473r3Q3t3v4u3_393C0X0^0X4D3I4o3n4G3M4I494K4b4M3^4f4P3c0B0^0B4U2F1m2+1b2W2J0g1=2O3-014v2V1s1j2*0G2,3k3)3I054v552c0b0g0:332E3C3e4K5d5f4e4w4+3d1 2h0G5m4v3Y4y5q2G3i433L0H0^0Z0w574;4F2Z010n0^0v5H5b445K0j0w0^350V0z0c0G0D0A0J0y0M0Q0D0G0L1:0G280Q5P5B4}0@040S5=5J2@0^5Z5X5{4p5@0^0C0u5P0`41583K5l015g2;3C1~5k5e6d5n5w6g5r275t6k5v4x6n5z040v6x5O5|3p0^0j0o5#5%0M0D0 0L614X5K5^0i5P6z624Y0j6C6E5$5(6I2R6Q5?4Y0J0^0O6#6A0:0V0b0^0E6L5R216O6=3L6.6:6Q682/6b6j6e1{3!3s6c4)5o3{0x3#0v5s5u4O793#6v6y6R6M215D040w476+6S5S0^6X0M7r7l1$0J5M046!692F7k6?6B045 0z6_6304667E3l7Q5B760D5h3|75716l6t7X7c6p7e4*793}7i7j6y6$5K7n0b5G7Q7G4q7u6G7M4Y5^0P7}5K0Q5j02030d0F0f7K0D0J0o0Q0G0M0h0G0G85870f816@0^0T7x7H0:6(04020W0c0f6*7^7:5}047v8n1$7 8G0:830^8k888a6J0D2 8N8m7S6,015^0T7P4n6_7U7W0x4j6i7)784h8)6o288,6m4i1U0U3i7.8{7_4}6U046D6F6Y6J8r3L8u0r8A2-8}4Y6{043g7Q6~56705m8(4A8+6r7f8.4A7%8;9o7*9q8^8`8|8C1$7=7@9a9A3.7{5(8J8X0^808V7s218L8v868O5/0z8b8d8f8h8j9S8U6 9O8H8p954}8u020I8y993k9b7t8E7|9N7y0:8I9`8s019Q8T8P2R8R3u8T9J8Y8!429~0v8%6f3c4R9n778?0x4R9s6qaj7#al9x6w8|7j9F3M6V926H6.1a8B8W979;3I9?219d9f8#acae734,7Y8=aq4-anaS5p4-7-6xaw7n2z0c5(aC9E8W5^5`ac8~ay7v6I0e6Ka/7~0^6Pa_9@91a=aBa864675=0U5a4=544@511b0c4`bc2M2H0e1Xb90U4^680Z0#0%0Q04.

Longues séquences particulières⚓︎

Enfin, on souhaite obtenir une fonction qui retourne les plus longues périodes (nombres de jours contigus) qui vérfient une certaine condition. Par exemple, on peut chercher la plus longue période de journées avec une température moyenne supérieure à 20, la plus longue période de journées en dont les températures sont supérieures à la plage normale de la période de référence...

Pour cela, on commence par écrire les fonctions de conditions :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;dvn2S5wbcy14: f-up0)_9eklohrP=[s6(]/mg7050g0C0c0e0b0E0L0t0o0E0e0L0L0J010c0b0x010406050L0w0Q0Q0e0H0p040k0F0E0w0-0F0i050P0@0_0{0}0=0x04051d161g0P1d0=0g0b0h0#0%0)0+0%0i0R0w0e0R0C0v0x0p0c0G140t0G0b0R0G0E1I0G0c0:050W0n0E0C1p0(0*011H1J1L1J0c1R1T1P0c0H1e1D0#100L0x0e0i0+0j011V1r010u0Y0C0i0e0Q0C1P1;1?1{1X1~1T21230:0a0t0I0H0F0x0F0L0b130i0t0U1/0H0H0C0o2o16260i1e0P1D2B1+1-1,1Q0g281s0b0i202l1P1m1o0$1W2L2N0i0F2R1P0x2u1e2z2B2(0?1=2p2T1|2X0H0`0E1P0e1G2u0u0+030A0A0o2Y0C1L2W0F0v0d0v0q0:0q160e2)2,0;2+272.1X2:2=2@2_0C2{012}2 31332O360v1_040j3c3e1?3g2z2K013l0e2?1e2^0G2`2|2~300U3v2X3x0d0:0d3C2y3f0=3G3j0+3J3L053N3P3r3R3u2M3w370r0:0r3!173$3h2-1q3k0F2;3K3n3O3p3Q3t3T3?3V370l0:0l3|2(3%2,3H3+463/3s3S324c35370M0:0M4i3~3(413*433m3M3o3q4q3=343x0S0:0S4z3E1h2$162R2E0g1-2J3)014r2Q1n1e2#0C2%3f3#4R4r4,270b0g0+2~2z3x394G4?4^4a4s4L37390t2c0C4 4r3U4u381P0P3d3 3H0D0:0U0u4.2A5g4!0m0:0t5m4;402U3I0u0:0F0h0C0H0A3l5t5o4C010/040N5G4B5w0i5j0e0p5N4l4!5K0z0s5t0=3}4R3G4~014_2,3x3z3-0t5)3;4b523y1`56584K3@5^2B3d0t615s5O1|5i042u0c0w0H155$2A635V5I5Q040g5S5U3i5I5K0K6m5v1|0L4|02030d0B0f0c0C0Q0x0A0F0n0L5C5B0C6w6y0f6r3H5K0O5t6f6n5w0F0:020R0c0f0J6T5H5P5R5T6d5u6Q0:6q6-6)6t6v6x6z2v0{0c0A0c0p0x0C0A0@0x6M6z6P5W0:6S6-5#2*5(4@5*735,373X4}7g5=515}3X5522577h594t3W5d3d7d4-7f4 4`3^3n5;505a3x3_7s235{5?5}3_5 6.4!665k785I5q045s6=643k5y040w0i0U5D5F7%6g5w5K5M7;6V2/6+7Y7?0:5Y5!6P7I7F0v4f7m7P7p4d855_7t887K4e7z7#626?1X66686a6c2(6U6s3k7|7_8s0+6p7}6@6Y6_6A6C6E6G6I0H6K766O8v6/047b8q8k0+6X04020E6#6%6-8r4m8u7e7=1|8y8M4!6u8B6N6{0H6}6 710A2M0u8K8z1X6R818M837j0v4w877v5|8a4w7N7u7o8f938h8R017W3p8|0+7!7$8%7`7)5z5B5D0j0y9k5J0:7^9o8w3I8$7C8(8}7 5Z7c827n7i1?4M7H9L7w5@4N9a8e7x374N7T628!7V0:8n6b6(7(3*9D5%9F8x6:9w8-8U8C6B6D6F6H6J0C6L8C9w8~8Z9g8T6Z6#9*9/010Q0b0:9u8 2*0P4:4S4+4U4(160c4Xan2H2C0e1Sak0P4V5#0U0W0Y0L04.

Et ensuite la fonction qui recherche la période maximale vérifiant la condition passée en paramètre

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013it3a;dv,FnT2SR5éwbcy°+14q: f-up08j_)9eklohxrP=[sà6(]/mg7050g0M0c0e0b0O0W0B0t0O0e0W0W0U010c0b0F010406050W0E0$0$0e0S0u040n0P0O0E0|0P0k050#13151719110F04051p1i1s0#1p110g0b0h0;0?0^0`0?0k0%0E0e0%0M0D0F0u0c0Q1g0B0Q0b0%0Q0O1U0Q0c0 050,0s0O0M1B0@0_011T1V1X1V0c1%1)1#0c0S1q1P0;1c0W0F0e0k0`0m011+1D010C0.0M0k0e0$0M1#2022271-2a1)2d2f0 0a0B0T0S0P0F0P0W0b1f0k0B0*1~0S0S0M0t2A1i2i0k1q0#1P2N1`1|1{1$0g2k1E0b0k2c2x1#1y1A0=1,2X2Z0k0P2%1#0F2G1q2L2N2@12212B2)282-0S160O1#0e1S2G0C0`030J0J0t2.0M1X2,0P0D0y0D0x0 0B0x1i0e2^2{102`2j2}1-2 3133350M3701393b3d3f2!3i0D25040B0m3p3r223t2L2W013y0e321q340Q36383a3c0*3I2-3K0d3m0d3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0y3m0y3=1j3@3u2|1C3x0P303Y3A3$3C3(3G3+443-3j0p3m0p4a2@3^2{3V3|4k403F3*3e4q3h3j0Y3m0Y4w4c3_4f3{4h3z3!3B3D4E433g3K0(3m0(4N3S4y3v4Q3W4S4j4U4l4W424p4Z3j0H3m0H4(2M4*4e2*4-4i3}3 4m414o4G4^0D0L3m0L4}3T4z3`524T3~4V4n4F3,4I3k0G0 0x0G5f4 4A4.545m575o4H3K0x3l045G5w4d5y534C564X4@453k3M0x3P0#3q3?4)5L5i4B4:4D4?595S0x3/5I3;5X3R4~5#4,5%5l4;5n4Y5,475I495;5Z5?4P515_554=585p5F4t5I4v624b5!652~5z5O695D5a0x4K5I4M6g4x5@666l5(5P5*6b3j0x4#5I4%6u4O5h5^6y5`5)6a5E6D4`5I4|6I6i6K6x5N6z6n5}4r3k5c5I5e6V646X6k6Z6N6A6P5a0m5s046^5K6j4g6:685|5R6%0m5H746|6.6~5k705C6$5q0m3M7f774+6Y7a5B5Q5+735.0m5:5Y6h6-7j6/7l5{7c727e5 0m617t2_1v2=1i2%2Q0g1|2V5i4F2$1z1q2;0M2?3s631q4F7X2j0b0g0`3a2L5F3A7(7*6?5,262o0M7:6o7=2N5Y6}0`0t5H030B0o0+0P0E0S2Z0B0?2C0e0c1*2D0g0q0s1e0B0+8a340g870q8f02030d0L0f0E890W0q0z0E2c0t1*160R0b318f1*0I860S1~0k0|1H0:0h0q0S0b2a220c8n8Q1y2A0B0Z3c0k8(0b1R0M0W8#8y1*0C1g2I8/2B0s0P1c8r0k2Z0K7Z117u7$2B7/017+2{3K3M5l9a6B6Q3L7?2e7^9b7;731#627~01800 82218P0M0R0M0$0F1)0B2w870B1`868V1*8b8A8C8E8G0e8I8K2C8M8O0B0e0u8!0B8@9J9C0F8W8d878G0P0u2c8z0E9+8X0M9.0B0X3O0G0v0t957Z5L9h0J7,3j5.9g7)9o7`6%3/0B7@7_7d3.9r7}780`0N0 0*0Ca39t0r3matan3W0C0 0F0M8X3d0J8Hax7w1-0~040ZaI502~0 8e9DaO3VaL0i7Z0B6waQ048,8.1gaU5iaL0K0Aa297a4ab9c223K5 aaai7Ba^9l2fa{7o5qa_5;0Bb5aZ9t0kaq0M8j0caYa!1-0P0 0Ube9t0$0b0 5v97962_3Ua5a70D6da`acaj4sa~9n9i5abxb4b6bf3{aq9.0Mbkaybh04bj97b7aybmboa/bs4zbu9d4J7.a=9p5q4Kag9mb06C0D6r3Qb6bUaJbK048p2G0MaG9TbOb_01bQbS2@b^aP1-bW04bp6va:btb)bv6FbybE5S4#b-a bza|3jcibHb5bJ3Wbabcb 0Rc1c80`c4cB3Vcacc4cceb!cgb$0D6Scjb*3K4`cnbDcR4_al3NbIb80 2c0JaCaE0*cF5icEbTcv0N0t0 0l0S8Dc,4,9v04828~902c0B8C0b0B2Y1y9Q0B2y0B1R0W1*9K0E0h1*0e0Ed90M2Y2C8t8v8x8z8B8D0k8F0B8V8X8Z8R8$a%2z8|bY7Ycf7:bv6)cQad5q5ccUb/9jdLctc73Vap048_0Sc`660 0bd#280Pav042Yd)3x0s0 0S221Ka*4,aLaNcKc20kd;042nd_51d{e3a#aS0Fe6aK0 0Ka-dG3Sa;dJcN5ub(dR6p5sdQcpb15F6_b?b@c!aydX8Yd/b`dD2Jd}cC01e5eE4AaR9*ea0`aL0VeMcwd-eQaL0!eebqaUb#a@6D5HdMbA3k3lepck6%5GcYeve:dV5ieyasc/c#04c%c)8/c+eIa+0 a.eXeIeZ0k5F9f34a5dNf8bCem5,9fdUe;evcvb9b{bMeAc30 0wc53se=4,ca3of4bZ7%cMe!3ka9fab)fc6Dafaheqb:5-e/fjewc2dX3eddeTf2ef2Meh9obv0xa_fGffe-47e+cW3kb33qfQe;flcx1efpc.c6f@eSe_ayc|822G8R2G8c0k0:9(2-dg3e9F9^e~bNfzdHcLeifD0xbxf)fM9jgmfegp6pbGf;f=fke`b|0Mggf|9tf{fucvfxfpg19G9Y3c9D8e8P8b8N870k8r2Cdk8hbcfY98d5fCf76Db=goe,5q6qgsg,5Fb=figxf}e|aDgff`bifpc;c?c^gCcJfA99g%5Fcig+f.6Eg/hacsgwe:cvgK0W4h0|8Ld9dt9Rg!f!a?g(3kcPh9fIhuhchx0xcPg?cu9tfT0/h2eg9taLf3cdh4g$gkht0xdLhwe(hShzhVdThffQc:d%e^gDayfmgAhI2Mfv51bQ020%0c0ffph+bMczfphLgJ818$h,0B8H9Z8R8W0b9`8P340q0c0q2C0q210^8rhqdIf#cN6^elgt5Siof-hxio7|cZgxfReFh`b}h|f c2gF3Sh/a#h,ikgjimfD74ipg:3jiPite(iPiwiyb@f}0*cyaHiEeFiGh.i!bbf_ghhJiMhs9ef9hPiq7325iUcq3Lfhh!fjg^0kc(g`3dg|bRg~c=040j3YfVi(3VgKd60bd89Ohki89W9Gi7j6i/fZili=iSfFi^iR3LfKb.i_7ea95;brgifBhQ9ef(jyf.7EhXi}jPiXizdWd=0+gTh}0 d|hO5$eKaTf0d`0 ePj*d$b{i-0ciDj$j+040!j-j@510W5Hdp8w0g8d0Mk0h^j.28eUaXjfj%fniCi%j|k8echq0#7#1t7J0#7L1i0c7Nkq2T2O0e1(7W7K7T960*0,0.0W04.