python39-doc-3.9.15-150300.4.21.1<>,ސcr}p9|pvnWД_H (m4.&M gt$rzX G.`Y7m}feěWi;T|L[pa'4K5豁 ;p*!:d|%`2K $$WR!zډ~{ _Ǧ?hˮ-l\l4g/ gsIgj ̎WHi(j vv} Xu>*R>>?d $ G  9Ze {UU U $TU 5U FU KU\hUrUUDhx(89:FgdGgxUHxUI UXxY\U]U^#bcrdefluUvhzsCpython39-doc3.9.15150300.4.21.1Package Documentation for Python 3Tutorial, Global Module Index, Language Reference, Library Reference, Extending and Embedding Reference, Python/C API Reference, Documenting Python, and Macintosh Module Reference in HTML format.cr}s390zp3aSUSE Linux Enterprise 15SUSE LLC Python-2.0https://www.suse.com/Unspecifiedhttps://www.python.org/linuxs390xq?Mc- z6+CCG8 Aq"{+>U:IT UyPYj$Dl!m^ S!r  H*g2xru+K ^: M R* 9`, vz!IA!&E]D |Z(!}y&1L <d[*O  ym.xו]$abu:#-X}H.|`G$?.9B/(D!k8#7 ""}6D-#xU -5a*\ &'2.7Uf$6d-4 3ps5QLZ{c U S\QPg#8 1s9_c1x<5c0`zw ,vU# {5#H% -7 i$E>pV9] H ;3Hm8d,Zmj"2 q%i6`2,QnL#-vMJU <) ܣ |pGI e'CfS!'K3[ }J ~6{: EUJ,C{:F=;P O  )!A#X>v1 c5o( Z#:/3Y ]o"!-DexdR)+.^]6-`g '|d$O 016;!H!~I 9H,5EeK PLV (JEcI}: R}I  'U$]kQ;'TeHI +y&<&/[=Z@G_q7R>j_*2Pbe   a:?+ RL msG5_,K;&& SV ʔ8^R zUmbbK *g= 4$a6R*_TZ@Z):`/lc .~AH6G 65=LMz;g=EkeVb_e3%;y+ PJVy9RU~T4;i Y^PWCP \.˽@93/DACeb)0ף[< $C/C 'Z"D>MJpdi#$?|8"'rJ RONX\C<*5N+.e:R-O/;`z2]mbE~J%.d$O+}y/RodӤ?*+2 n~>Q<0nkVS|_@e4l:Y@vrWjgy*@XX\ @>:~/<r:'HQ\{.tE3j=_0-9ZUqDRH>jk7*B_oP/:yz|-Cj|h}D{ 57t]^0FZxr13zxBc+3&dZg|wm:qU5BJOJ@]J0q2^po(zOmW]n+,,Wu=i hN2L =$*KOxYOHTQOUiS'>\@TcT MjSB:Dq_Fu\r>[^ܼc^"?SY @XvrbjVwg{0xcfN=9UdHA |m5>YH{p'BpT9L@c Cz 8_[#b;Y)H:]`R31S1n ~*' xEm $.X+AA큤AAA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤crhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhcrhe26acb51a512adf58821f43518fc31e331e06625f0d39c814f997f4e2964feaf4728540f995d5dd2afe79db6247ed0d300e8a6a2dfc9dea44832f2511ec33707b2fa810bb8d420a437c6dbd552cd45f8f46d2309ea5ec8e0e3614501d0d50b1c667ed7b6f1f4e599516465fc9617d3adb40c60087558155e03eaa6aa3303b7a35987a6ee254264b582baaa021a6b3374a5a961aa3155320861ccde74e989c32c9e03c96a6816979d7643add104aaf2e333990622483c4c38845c1e1e6124005670b6daeb77665a0bd536593baf7830c947cb3811119986ed726500defa48a110975a38a8c414f637c103790d868be944509a9e44a04c93cc51e338afa70491fdee06f52723b9bad40e39994b5f2dc69248b00fece45c385dc564978faef19319bd6aabcfb280555e5915ef4abe76c44a3ef11e65e5c28b75d012ff687f8030d9e0812dac74d45c6290f97c7d6a0415bc73f2c8c016dc9b872ff9a65c27916cf8f9ca92803ad69092eac297677b077823eed2d9a76966e4f5009def52609402d84380fc5c67e3b79e62e3b0b24beedb11fccb1a08e2c5f65c060c57422cdaf178239e8e726e704c04d3a4d1e48cdd96b99342d172e1eb7e64493b6430c494588ee1fc6e043509f379b3405f36d2ea1f6ed3b90aff3161fded688f0f87c2a8b95f47db348ef82ea1481286c12ad68a788305aed2d95e17183a7640526eca45a9d39042918a36fa26b1122c0254b1acdf0999c29efa41b701c3a6becd6cb4c0c89653895876607067b415d8b2362efeaa8dec5a837400782537e9079799a114cdd00c14b30da04fe4ad74a33cc37261a817f586a6d17930a411ed4cfa7f68be8a8221f234e7074d49c25f39146eac5dd5085d6619e3b27ef8cf521b6c7fe2c99faae1cae1ee5536e97f2d823023a7e141d92b3f33711b0d6bf57a967efdc3d6fdc11decdb5b7893d8032946d74b2308a24a58b5000de00aff80c5b3ec34f6dbc5337ff436bbe3656eb6fc0e3c076bb4b6b4b3eaf2e94a8d4821653223a7cfee467b24e0b77173426e7416c6bf454cdfb490a33cacb5fbf6f9d1699483c608b929c2382828d64e88644e47e695d717ea8432ec1ef79a17f2d209b11aef4fdbfa4bf570d752f336a9ee7af4a56b8e5b3696b962b69793b274f76439165823c69cf5e04bd5db0b21f178fd8b16f7d999d0da20a00ca8d271cd556cfb1d26dea91aac88b21a9ea9ad785299a282cccc4b9a93cf9b1f028f65b0e90c0c41deea019953beb5528a56a8b0f2e5da3d6f20f47057cc0325273ff152816c202f8a114cd07138ba9abf87cadffa7027ca298ba11ceb6418f3a9abb32ac988c8d342e7c2b3fb2e8587c1ece44dc36d418f5cec90d00fc2e7f11405f3697117a7a67e3c6205e84c3033ca57f926714fc140e3d076068f32daa44d1d95efd2cde534072d3156471ff1f559a308d4bb0215d25df449f0adfa6089248cfbd0a2a62e811c8c72bae01b255c712cffa9b927ec0513695385e0ad3b39e50586f1a2cfd8039d543c381ac3de4fc0943a1bf9993ec5d16917e12065b8d388fa51c2124938811e9779be8a36c79b23728f02f1b3491d5b0c5d91ca8ed00439bc9c87ad0f8f7229d55c9a8c5dbc35f73d9cb449e77f1916046a9cf7c6b403327d5a42692c78f6b8d0f50da71ad9694470b53962e3e363884641ffc2905aafd24d3a29e6201a6d3184e86859cb5439c350974871667166ec6a5729f0f46ae34450ff4e2864dfda659f96a95f0063fcd1674564095d3ec0295e6c5aa0cf9f201b7d7c8ae99da43bc0663d56f8a130338c42e0e479ac8c347ffe00adf93644c65d67a606b63f60e9086d2b233f51d3563a90447a9b204474fac0fc5c1be305715cd233e8e8c95cfdfd981dd2ccabac5b5702722ad5d17a4c18a0422a599534723d5042ca6ee29f7bc1450cece7b61422ee2d84414de548dae6ad0c51881a85fabacdcf7cf35749bcd4e1d735d151c7aa624d12d5cd90793e80e1b055d4d618e079b4d51a3fb8874de76d29d2f1eeecd53ed5920025f879160b5697d47ecb69d69ce4c61ab3a8445e26a34a6601fa31c9be113b0a3e9fd78f2fc30b09c2c9a8f3c1867c98e6187c529427097ce688aae706c2331a4b8601315f7740d05e0871fafe1cf048508396ab4bdf20c7f3061b7d847778025bfdb3dd19bee3ba2386c3f1cb07d4ee9c0b0807b7e9ff2ee0f13609a7e5c15cddb3d7f3fa42a15ff6e70fa7ebd8dbac361958e8570df60ee9987a11af94325cab17f335c51318cc1cdd33b51ef578582abb35825e580cd0badc8afc8bac12b9b97bd32eb411c8b70c80ca68799ca37d012db80278da21621f754e16ad068557bdc1b73b85b03af3aa4352a09517ab1780f34574e2d9342ab642e32d888f86bc8202bf7d15943b7a5eb487252c1da441d86dd5c460b31d56040077ad96929cb062494e883c01ef00eb5dbc2a9a7b8d99e4db139993787ab3514092fcb79cb227e0c341b85a1636d91de6e3523477dc1d69c4770b45f8f6d3580efd46823e97c2fbdef065bdcf51707ce2e0718b7c3426eb8aa425c3c640dd31c32d001f23ff04c42cc15f7d5ae7c94f68735820202af95664832bce935c0835ece63110c59578bfab41b26d8a26d5a531a656c752ad1438f5e3fb859d79eefe3d284afbd9a2d38ae1cc54b0e2c262f9c485f5130b2b691f6f32797f028115c17716572aa3e614d05551872c0f9832ba1761fc5b57e79cfbdf44866a980874f771441fced13d188d1d910744b07db3749a5b6d75533a5174c5e3bbeb274bfcb988159f2b3fd423c7475a95de5995c342c504446015cf556da27746e2850d40c2dc0bb57e50065bff32f602845faaad101c09c7df84a0512b27393765a9a6652e9a8e2c4c3b369985fb6b6a2d54340e479464bdcdf563693cab57f0350acece01818994f8741f42c5c0e29273b87acebed01ab15e716e209db721b039c7d1b89ae301e0d79314c8ebb288bbffca4f5907740cff1f54b687da5442352e052360de64ffa6f82fb4572241ef123a70650e77ae65685d0398f3029f147b31fc2940ed2302a09da8f23a5774154567690b2b65459b90abe594a8b9d4ed59ff5b6e7db84d286ec852c564b86dc9e4f975c93670f11c06bb0c4b31263af89e96dafd6ac9f84dc596204967e46ba5fe81b1f03b63fdb476e6870a4ed622ad4508625933245f60353d3dffc87f790c6ca03fc92137ae1c1c2f8112cc3b7482287b95ad747a8dcdc7b5153383a418cae9731f18dcc2115289b40d51de7c7056548eb8346a1c9e639da62a45c8c3c827b8b00391f124fd6b5c038a0201af8bd0e4d6b19de3d42d60575864afcaf3d15db8c6023e0f732740deeaece8bc7ba1050eeb551c886a69d494ca058cbd7278359fa96e6bdfaa8a6968afe10a994e43e9b7d1eb2752517a380ae6087500824ab962102a9435aaa5c4bfa290d00667cca63cf5ecab8bb1a060822dc4b5c3956dbcf749d909c6c6e1ae5ec478f941327d8b2fd90a8b31c6e7ed0283f56545f15e96c70c2ba956c396bdce78b890f1dca9d9b6640e7722efa555ab21606acbc73eac4001226d4740345f7bbee15c740ad68e9ba92099ff144d6fcd90c00481f41d436b7c2597bc89044f4e7f21d19b8b65218a8e282a5632c92da8d50aab2f5e9ac00f3e70946ca7b276803fb61701479130d9f14627aff3d8e76702af781a4bcd19df542e2188db156531552d7507d60b3baf3e0f09e8997493431daec64c921c3ad3d97434c7d99fc67c488086ba22f72f046feae31862a91d737eaab6c42aad475b7af32c72377a7a15b00c656de111ecc6189128bbd025cc8dc43e76e9e16d7e892f22b74f945999e182f2c5d73c80f95a324369f4764aafef1a51555005bb8b101ed751bd89451c63bab776154ae32092b4c40a1b8127d6325bccf82d08e3865f34a5279a2555209bbd80cfde54cdac777d053eca43cfa5cd50dbf2abced884e9c63d5da10ae4ccb26a16abcb87e69599b65bf1e68b455fd8c3bb112d2d883cf1efaf11b33b0c744ca2ccda642083eb9e8e052681020e2e237d050201935840b4eb999e1a6fe79cbbeb0206bbf43a6e8dae509b3d5eac7c230000c5179621f4aa9ffac632aec9a3e3991fd77659c14b1bd14245a7cdbbaec4abb642541dec64b14f80fa58e467e696381a5a7f577fe7152b9810ee2e914a19ea24c638e68c0b9acf946cbdda985f6e9492ac28ecf78b3b8f6cae6b26377defed83bff59e95cd5966428dfc57b8c69322c095434fc11cc448f6fa5790c136c880549e2595e4164fb27829c89becdb72165eb82ded7a75f93c810f9de11cc4826a66367d3a9f362b018b0967492ccbe2646cbdd0e3d1492d1bb3ab76a0fe494a2b0c07bac886a4c8b0c1ddb85e959ee40fae2c86c1d68a6a722ce7b88ddb291c1f6b451f568ac4d89dcfdb54aa4cc92c355dd9fa8ea2d7ae7a34991c6beccd432a705db3e2a37c239c77ff81587ebb95988fff80119331a0238743a40830b2ea5516c11eb750bfdf209c9635ae8f8b2b8050c4279f23683c48ecf7e871ccc951fd4eefcc780e0e4c0387bb13901d490c876393fed8509cedd187149a1977b421660c769f7b361ac12fe0f7fe53b602f1018c223b45c0ba2d49fc57b0737c5c69a55c3a1f2e41d7e2077d4aeab74baf2663b3b4926461b2b7a59d55d28f22184380fd8cee5bc52f078ee706c2b91c4ea17ad264aa64d0ff671743da906beb98aee3e7df49d08edae2d1918ca2d699092f5e0360479bf19750030a9b429bf420a598f4763438d5e8b66cf80d055202bec99ff41d653077ecb44afd1717de98278edba40507771180f4652bb52be305db82e651d3b840a8b4e47941883c38707a4bf672f561d9b8e7db7a27c0868467473700e2f7db4d8553e723421b1fc99e36f6ccafa7276494bd598d454d071ba06d5bcd7a51b5d066e494d671932209a7e4b117577e010bdaf96f4ed50714691e71d86a5394384bb4585c666eb31f732d0839617da6ae2147023083fc19a60012087bfc1e922a8b2471ce2fc21cb19db530d48fce659c5f6428584de374b320152c07197c379a8a8f928aac2ffbc3d4ee451c4d596e33f6d6a388a745c3953d41cab0b287ce83b5662d49ca76fae5010d2926d11e5e8b1c6ef9d2bab7deea8a942319d0c956407c576d329af838edbf54e2a9c4b278519561e1740537efd535a4ae4e614914d886fa7529c8d201565ab48a125612d41600e8cf45c9d99cbb85759919921a6d6922bc0a87234483af767a8518ce862a438777b18f47c1f1f02307379ba433cbaed8cf8f190cbb2a8e9a486cfc7626de5615bbe34680d7f8413e5c1fa1cf6365b80fcb8fa4db98d48e1376132450fdda5d9e5a93b6e06642d7ea1dc3ccec2d612ac0337c4f73f9cea90766f53b23fcc3a75cdfcfc4232262fb1be154417b99c03498976a245e5e51e1a0bc4957c3f09e9c7a4b81b1ea7ccb2cd2a4a1f8a4b95eb19c8a412c79bed84039243cf75d195de125769cc55b8b9c3d0a8cf1653d0aa3538fd4e0738f7eea04e56cc204a8fe1873944f79fdc052aed8e3b1c15c40fe9dfe377e65c072a9303c54a27cdcc79dd7f35d6d8f0ca38ed2d290767b1cc90af57a1c42efded306e29b5fd1e671f9eed1f0be86d839a7ec021d03cb139b82871824ef81debdae8b5ec0979d1be89d8e7990e430a0d21ca573cd4ec75fc05df136ed23535be144347f330d26e40eee6ad6a8b26921bb87fdaad5c7eb888a5228a6760e76e946014356d0ce5772c370076003f0f0770c8b0ddfe4be2c9338ead06c792de1b4140d5501fc940a495b5fb6853090028bbeb4e8aca0776257b3e50d608a0fa3c9eba997825d6f30766813a54646571f5e38fcbbaad33df5c8f907a693ec61b0d65cbe6311d44570e9bbc278cb3bafd21de378b39be9a35d24395e70ef80188a65293cc609a6ec0ff40815ed76f2ec1c2bdb7b61171ed72f1528a44011f373d689e7594372b06ba2b5b79aa2274889fd61e8774e5d66d402209723e125609c8aa72bc111f6265626777f20e255e0afbbee50b6b5711ef200e187b758a66cde030e55dfd8cfbb875b9d1a7d43f9f9a49928b958b5a8eeda0233ec4321e8ff3ebcd8b51a3d5ff07f322e46b1fa59bd296e74e008442df275afaa26727de8049b328c1140fe25a6fceb4cd1a7c6c2cc9731143f78ff82a38f7105c2491fcdbc299bf9ec53f4827113579ad192379abdc8df24d54a3661b8a03688e83d314343ed6a39a31cb0ea2893bc861236594234c50670a3693a81b868cc7aadaacb101e412660745c312e88191a73fc12059670835673674391b39ba128c8de89e82fff5e6aa4f6e19d9c88b7bf8fc137058b844ddd68fc24c8d1b64617de5d9983c7592c0418bc74183a81c4d1e44e677113636693c07cd41d01f764054ab3c4be3f9321ce25901c772d5c165f5269c624458ef3749cf81e51319e1a6d99b42fde54f1040e2a8d54059607229e0d1bbb3978499ad0ce44ed7bc709dbdce361e5926ef20b2173ad9bb82903b6869c4d3993a07bc5b555251b3478100cd41b78c6f1f525210c02dd84c77c1cf192088678a0eff4eefd19e92e3b166e0c1fbdf633b46f3a98b3bd660ccea4e1b26d8b20914e0dede279160526646f275d8428c4081fc6e4f027fef4f29e7725d99a714adfecfb057caed708b28bec88e1011e75cafbf0d61011f810310b3e7f13aa3301ec229e0bceee647cc4aef75f2b9368a1b60552ebba538d0a40fff1841514476961bed89a7a9709b24c1e6de053bad62e36d573a73d3a31a1b84288381b37c1cdb13344212a4dfc22fd9ed7eceb7c7b01f664cc6b9bd96be263e4110e1c2df1267ccf36d4d443486a72cf68bb7b8a5843f1fe05d794745f5adc402852a57a34aec2e6bb5efbdb7a6aaaa830aeaa6b808e02f3e9cf9531fb91ecd03da0e6294873b5ee8d71e0e957b250dedf389460ffa03a7468341f0b7b9b666d763c7c2cf53b8387a7ba7198dab238bec40d11a1b45c6dfaa5cfa0cfb3fed0c0443e8b298f96996608ef5406f5dee79ac66eec295c5f9228828b4394f06a45b6b78e06726605dda39e31009826596577595825150ced9bb72e4f975a82b85cff6c4fede8d46f91b5c7243c3d369038ea5f27a637be9f6afb3abd0208e077aa85a48e4061b0671f4065d8174a12a9e6e3f7fcbcc4637933765351994a954646c404be12c9e5648ab4dd86c6c73a209b6f95782a4b2d43d66958c4707ee9589792bdaf9cea3d0c2a1fe0e4d0e37bd61b6451ef0149bc8bca633170e61c0f2780225d5d0df4c1c827513e52c12aa3537bc34ec50c826fe8d61fd7dd8fb0552d0292f794e8907f1c018a36e7f2cd3384505e45f65c431a61d53687d221d79e7ee2ae616716de40e5d3569916c8d9dd98117b3fdb36cf12e0b7c516b2a2162d9351e5298dc72ec3c817b8a655a312bf47736d06121e05b74a58c580abd437675c16b4979de5a07fe4e3ce2fe1e94c6e1acab10d6b4275d58688cbdae90fa046cd7d4c8e99e80a46d08fef6bdd01f7cb561e1a74aadeda362fe4285103bb01879e835e9ec97db5fba5b95fbd1a97b552ef4ea5d0922792566ff2440af8d3f5f0f51dc95535a02df22ca9a0b784231da93deff249027cd53a4ed796d6ae851cca372699c82178d3795eacca12bff78114814398957e9e32c5f19f0fdde9f8dc5b777a41d1cf8749250fedf83cfe142f34d40f6080a545cb7757e532c852363f8ed458ede30c8daf54433806b91c5ad69ee0972ca213b8e14943e5652b7ea76e7ad28ea5a770297b905caeb2cb729907e5302ef4e9cf52ddac21c3af08b543e81524a2e137ae8905e40e0d4b2319bb85ed2665af2f15d824c675a2bc15f1aade640fb5015d6b1f7efb7c84f5c68e9119e9bc4aacce5be1f3996e0cefd62364d1b8f590e0d4433171a01cc7aa03bfae024dad8050a9d1a0a40a5ba92508e55079f56115859230cd735d181067fbdad70f315bdc7f6060c763c6417a4d7f85217da13418fe8f5bd86be3213a51d5b146cbc2dc98f20e8165b0cfee6ec304154c3ae67bd6f3d5605c28b00b0e01b1186c2dd030b9155191a3df8a478c3834bca4bfc2f7f6e93d4f8c2adbfdb3afe5e2d52945a996f6b725cdf9ff2f2c9e7e4e585a4d453591aab8401db654e89769893af59830123094dae1273ec91476ef6857723bcd5a4ce3afbdc9975a7fabc6ec363dacf4e938ae8d7523e7476332ddba18323d11a53e71a7c9b57653e2d3ff9bf0a699885f0a8348e6a02458222d60b9fd63590840f572cb39992d7516f4a59f86e41c77b8b3753417a2931b43ec8a578b7cda3d05f9ca6952a6a6c14ed92470d8a0ea2ea2cbb5bb0c0589eda0ef313b0118a93789f3bfd19a9d6f165e7ef38b77144fdbb1281166a397e09e19f465b2416ab394817c7b1c198834e618e4f0e7cfa6af6ebfdf0f80ec2d924d475d0c11b29102a2f14e024b4874416e34fe8dd3d572a8eb4560be02bf02e0bc7f1c2cb2e6db9f1355c389c26eabf81954059ac0b510978596e25e390b4422038a12214f35da1dc78c14518e4f4ee5cbd1af40a872951ab33c772b0bef46fbe5aa33dffd9ec4b07b6042f52d64ebc74e894ecf6f62835db74b4a40a1a0108a4fac847036bf928609d36235fabfdd9b8971756af61bf3a136bbe994bd62b6c6c6f2aa9f1d246d9123950f54d5940e94e01d38a88c1a4dc9af96352dff0172b05c29d2297f0fef090abd2981e3aa5ffd31ea4a77700ee9c98c4d6e382b8dab244cf2a4ca106c92c577b332000ca0831fe83f9ba8bd060064c58a5b9595881e5f69d6ded1d57889533aa7aec8d9ecd0a07162bfc004fdb798c024b70d023db20a8dedacbdafce6bbf99f0cd8d0b6bec55abe40092d02ba8574b00884b0b3df1028cfb778e87b32d5c601a0b277cc59fd5d11124c3ae932abfb034ef03f2b8e7d711c2d9c46e59df2bcb475d0acffe21617fd046bbe402bdb91d004222a004480f3dfb9311149d25c357552bf06313b2e86a810c14a67599a9334e1f6d4f7a98307f8934230a5e940ea45625d3846a0ceefe6cff47702d41721799726f83ce406a7833a94ce3db71793ab9a65460d02813cda22124b034190d088bf9a68033cee51e93d2caf516e3e1e46a5f498f4e4b8c366b4ae1c97053183cdc10ce317823b4fc7428b63f0d12f3d3d7c0fe25dab60fb8a72d0963c3386419ae4b2c53d57a74ff0fa0b8e77beb3d3f6e60abaab7164d0b576b5be4e64f2a1b21134ca68ade4294e334f480cb564f6368dd7ce951a60dd6dd7bd282edbf40ec47e0ce575c46ac57ab879ca60b410810e7b329f72b23322dba1a641290671dba38f1bcc4f1e56c7659434cd24b4f5b96bf0ab7bc70dd29b6c6f5aebf6a7e5e2d2ee3d2aa6ac39658a79ee185ab9118ad1d65bb94a8f919af49e230977077f8c87ebeb7fa29f6fb3e2000e7b0f61104f6e7cf6e1ae6ab79762fb18d6af03e8bb0e92d6e936829cb9b4f7ba861b7c9647ca6e5a123e1a28e0a7a99201cbcda4b08d6fb79acb13fc0c6bef9690c5d6b737035dbf2065cc7ccade26097d318fb758abed5ff39912ae6dc993310abe249c0b609c6756c3d9ef279cc8d7fd4fb1b6b9df0651554c2cc4cbbf43b1e5d5da95718b3d1982b8193cb03954819a3382aeb8954018283c18ed76b203ddb4be6b3821a88d203375b36f0a0c9bf3393b7cc46b6b1b5ff2dc9bb3c7d38fceb398fc484a6775b9984309802cf0c26f1760566fa88936f0d46c467e154f64d003e34b55aed67b856d5ad8f637739e18b14be9aed90b0272d5e27fc9206dbeb3e406f131e51ed4b5503cc0c4a4f5f5c5ead880fd5ba6a87d7815f0ac19fdb2f03337fede50a63c9a35eb2c7cc61485ff3b7b922c2c8bf96bbb81efc00e8c8727c190c179c20be0488ad28d437a1b8053e37232e117857e98b08705ad8d0dce3eab55aee644a656f08228c3cef95715689fa39bbab9566b9781ae4068e195297bafae7b9f62f7fea2327eb4631f4642876cb789c73561ff6663c4566afe1cd8a1abece5ad31373e36cdfc8394f7d4098bffef5b8f48a5a561e5328e6f56ea4056e873602a150dbae875e4d65a6257eed25fc8aa9fe52629385ff941770625f6a39e01da1addbf2dba5c732573266ef31402a2ad2ef92ef71c88ea0d32320d7eb4ed54db14e50dc4080ab35dec235e5b7f63b4792394d8e0cc77ebc227b900ed57fd0236f7d804ea652538892873acc54b35449d7cddadb41755bd8af24a53cc5807f19804667248a7596b459d008de14bb1fee04a35ae49e5545ae8095d1a8ccc354f95293cc2b832be97ca5eadcf7712369b4e1946352145d8a95831af9a7b445d9b7906970e0ec50510b215a19b7d379c4d92f4d218374135392850a469d3c6b081938a89a7fd0824e764f972ee94eca871aff97e57d9d604d25952b4138606996f7f1fc1b3bf11adb0b809116f0161b67a4010150dfc59147d169da8e41052aa15c626b5ce9987d1c3b9f9f22ec670697547da6693420667754d2eaf641fbd9d3062487f710b2c7ec8b6130ce63ac2c5be2172ee6d78f6194b459315f92cb6bf0277e22af701580a459b1765e60935712a2f4a424cc7ddcd360f7df507234b1b335d70710335deb14bd9f1998628bb0cde2cd47b0bd2e4d81000ea842abf6a1adbfd4122a1fed676ed83ea2244cbfbb47859ea86adfca4708f92610e5cc59b2ccbe31eab47c2edeceef413248ab85313641f12e4c90943ccfb13ea44ea4b86a08a2026314ebbce1fb1733795e2d008a37cdb754a082f6418e635ddd3363ad4c90b9ff06b3baec291fedec11409aa2fee48e23173cff2ea9651ff93a0797a91331d71f0a60805229426b111e90ad76bcfe9bcb7061d3265a0ad08925e5d5724d9e63b8636c3e876c0ba43cff5aa32759bd25b9e7c2ea962ba8cc42203579b2e91bd2473825ac91a05cac2d45e4bead9b37d16cba6034db56d5a75ada2e899b569c09e6b928f26765956d06d8147a0b6a6e5c175eeba5302be2755ba742d29db0b1301fb18ee79e77a26ab7d4b4fc6c2a06876a6a7c7b855d6a60c6a64553b818fe47d7dc28da006ecbedb7656f748d6c019b6d9c96dc4041bf11639d46c98ddfddeeea363b053a26434d6b66f3f58fd0dd264345a9fd9a3de0fc01d5c9fa9b43809dba3270d83441cbb9c0aa1d2e5864936dbc06eab0666916dc70347812c310fc62dfcdde67bdfecec0863e532bd92339f986e53e05f506a84c5981a022f10544fdb17154ba616b9434547dcf370fd67c5320be2ade02464cb82c1b8f9925cb22804fe7f60bc003d1efa1ef975e16aa68f6231107d0ca3ef84f2851184b4c6b9da2573f6aabc24b4170b44b9c18ecc1f7fb15a12ac1b0edcfc332b2bcb5eea006a370ee723e22c3c1802ca20b86ba5aa1cb2ac29290ffeaa34b09b15cea6d688280e6095344a3eba3d4a4dddef6acdcc72a7f33d81a6c9f4d994286aad2ddefd04c4464429762242851a0519406cf0e57cc40524979b3515447d4886a0909739213e1439886e3ceb08836db8b1820e226eac78fe27728bf19f40dff15452969bf40297156df0aa50334626ef33e8588805b425d492cea4b171df8d491e4c78acbf7ef4fb4f04c518958a060f7e3a619af49add4bfb5af7f44b5a2b67d74126652a6cd26537bc9443ee8ddc238aaa370ceb534da8b688dff8470889973eddce208d2ea971891a9f2908d7ff524d7e3241cd840d0317e94e9caa603537533823651426cc54e40486a8485c94ab99304b526dcb08b837809efac51fc6a60f57de90f17470c26b80de37a18846d5b88e9f7c6b8f9c47ed2732a3cd745c3f05ea0a352874f9305a8cd9015bc00fd22db0834bfb68741a7594882838025aa76611fe8c7dda446362ee83827cedd85a94a6eea108de225c87845c342674cd7963e108494c835c30eda17a4b2b245710b9b296e92c2e282e803c1190678597bcdbb8537641dab9ec2a2400df4d31b101d34f71bc9cd19173a240af5a2c64fc09a6360948b90d1b40a7f0aa3d29a54ca919bebf249dcaf261c68b1c60b70b28b681d309e0bcff6dca441cb5c1b102619fb6497901bddcc13b502c44d6e5f3cbba0109d13a3e9c22fde317630921ce08c39dea1833679f48beaeb7bd8ddfccae6f62599724ae2a205be31ea407b4940ee50e257f051caec586aa2d47425a64f80d6251b248239b944650c53850ea5cf69a71189f8ed9e94f7b612325ffcfd41ca025bdd91355b62992a8beef341f9d93463060bdd320596ee2d0183907658f34d94d1235c733c52bcbb1b842341ab96578443990831dc89628bde00b49ddc380da923a7b23063256406961bfbebbf22daff3620b268aa7bc71057ffc8fb90710dc87251bfe3c84d82f70f91280342421b35959c4d0a73226e827d62bebd30b91768eeb100d423ffa2403d5b013ad329a07558205e562008c09962d3c6330c4a8084ad3b98588fee4614c2c4e032f4f329a81cc80637282b6b97bc92dca605fc10e8a864588717b64a749c084b3ecdf6d675fcc87031d10403115239f0c303d0bb9dc6c1583b02547cbc3d421ff0a542b176e2c7cb0f4943066f9efb0bb154aad96f76448658857f1eaa11e5178018074bf6516450cc4c252ba33185278fa8104c0bed43d623a6c755fd2a8a79bd4f7c6c521361155d9254a2a05c7111a8820d848856f5c9f725626a329d844a26666cc3e0a0ec86af27093c4205de6a2f49ac64c147ee40b9c48bc84beed2755369e569096e0e9a744f748b6cd7b6591437b7d94d93b1c363f1a2a328b6ccf684b0146ee033e841bb23ecb47dcef8e82f88d2e45ca7ab4f3828a100deac600dfc40d92921990f1cb0a3f4f6b79b930c99be56fc0ab99a801f0036a4ba1e8e269a31aabb1169b0ebd800cd9738bd3da3bc6bcb1c3d96fee83899190434f0e444e09b0676c7ac3e2fb038707dc7cde7ebf929165acc71aa047067960a44a33a07cbbf9221dbe1b3d63ceb4996a3e79573d158e2481edbb0c9950d537fa2d3f8e6d3556a3265d191a8142cedad9e48672162ffcb75a2597c40a14fee721823289d0d45cd9eb03523d384ab10440db7cbff354d7ee5ad312ce4b41cd9ec2847dc44c752324eca8ecf05dc6bb666317d9b371c7039f4edd2e6a2d0202badad47ab63ec9cebe29216c696ec9d1a4b41ca47917582a367f11398bb6784a3d21c8a57fd6c37e9633005cce9aeac5e40a0e7e61cdc6c030e410b4523ed2dcdd9910fe4277d58e3dbfb114312112a19564a74c751c02a7ba6eb8a2dbfd24dadc44b5d7471c14d39446e2c7b9147ebe192f54aa2c1ffdd0e45e3e829b397b1e6d531c4ffd8bac53c5c3ae81eebcce8c08ebcbf4f6607c7fdeb32b09057985c375cc3cef3bbb9b728186670bf30604149ded1ac693a5f3e03e86df2f07b9bef418e178e7f71aea2ca42718db689e6a7f69a5b261bcb480805aa062356de84c04a8771588cb4c5ea8028da9d4d1dd59300300199597611ff84866baec0641f65b888089dcb55b74b84e2f1c973091640e309ac6e3c66166de82dfb39c2a866672320cd21ee66ee2ab138d3a4accf7e59835ecc43bf82fe5595f1503bed705e1cef53899f3005ada95abc68ae0d515cd67716e4993f8fd6189c21278a6f104a4eb69bee93a187181757a7768efdea170e47e74115a99885a8d803e2c7e691edcae945b12a15e61628f2c8a09ad8083c8ad492fb0a5249b63d3a4217ef55c778a32a217b1f67242591734f706bcdd11c9960fd3e0f62c98ae5ca9fc91ea48381d4b2fd75eab974e2fb6cb1cf093560af6a4dd057356f88f54f056747fb2da6f83558433cbc794a5674c6fa9a425dd3b7cfbc609bc8ae3ddbc7a5a8aa850dddeed471f84c30df76e1d00582e0f5a96a6733acd610481c65e84173634285e6da0cadaeed778c1d43ede51ffd1fb5ab3ecaf7d5b2e913406bd5bb44ad62c53b97f96d5400b06d6d441b0f0843c4748dcdfa69347aab851007d9898add896704a124d26d8b5b90d6b0f01c7c937984395bd3fc85e43b711ba4562faaae933902f308838f9c6c51980ccb008349ad1667052280b80b03290b80541cfcd195c12609e88161daab161c910aaa9956a16aa8b0b823af422f4a104582b44178f4d4a112f313aadb2b31384c8a7904be3120ea2b46f614b9a7aa5b85b1644aa24bcce0dff48ac7058a48201e4e1788fa3279a58cf05c26cfc1adecfe38fdfd9aaa7f112fff39ce10b4125d4647573cb83e96149a56bf3d085e268391ed28378332e1b130023e740a34a7b3e826facc57f2f6b7070179324a2f5e94ab7e21963d88d642ba57fc4bf8fb17cde465a83c5d7218a7f1d51232da4dec643ef8a77af83aa0deae50c24275b6106e6933cfee0022295fb8f85c2d6f21f387a928ffba363881773ad1e13dcf0d959c7dd093d875ef0cfd678dec6b532666654553e5c2cc837d6eb124ba4f10b6cff808a886261cdab264d2bcce272b3ef77ab922d2b8f4781d6dbe40e354a09740d45c88a1ad65fe190c855b046ec0502768964060c00e30474535fbfa9ed0eb5166260362a7e6359a7481c6e299ce64d664e722982e43da23fbe18e48387fc9fba56b23ff3e533c4663e6d940557bd445ae0e8c68aa994f44d51b0062491351503e6ece6ac6ed4c01aa098e5b5f3c5f53c5507873bed4f7de1c54323aa0293b2286c2ae4ae1ed84bdc0e9bc0fe74d2e0a7b703f68b2e5d2d5668e0edf44c16fbc8c9320950f561ed7f28344fef0888752322989f5ef07f74130af78a8d8fa5cb3e2d9046c80c367bb0b4141dff5d65788dff537040af21b912170be83c3080f79b3697692d3c020290740d193f74c1a369b43e7e49ff97215f61cbfc3fbc5e7a888e58635091cd94956292ce32b32411ebaba2dcda3362d7b4326e4c6d756fbf1a9465dc44337ec42bcbd9867f2e3f03579377182dedc4c663d528d4d5de40d1f20d03f583eac494beea7b3287f166ff1318456e42f8cc5bfec68b4557b3c3d69a17f47bd02a276f54283eb5033f38d014aa2746e515c17eed6b66f62904c79ed18f151b5bb820c9b2b10a6e61cba457ab685bf5216de94161e74d73f4da4afa15189979010107f3d44cc1de57a9cd667bb67b63115ff8374bcc38262133a871143fc3862f241ff7a8bf895b77f42812c4c5fe4eb1f3d64ecbc7b6857aae51786bfeee2d361c70019c1ed55dfb0683816a7cb731aecc74d5f855610bbfe88352428283e7ed5b03b904d9cbe65b89c909f6b08c5259a9a49f4969c0685f66cb4865f6d4a8fd302625a614be10c1501bb0d3b23aaf3974a97e57da5ed7d40a02c8ab0cb4aa7dd56ef3e5ce644231986968b76d171253a6308e6575e17544cffc3b7f9efc4b72b76c8eee6e7d8bd4e5f274937feb50c2cfed0afd8cb1ebc3f414575a8d38e962b6923cb37630f635ebecb308c7713d49dae0d5d5643bac3895378bc9223e364ee94f59591b2848b150def82cc44c366b02590af35ff8ff5c4da603e91e5b49691bac083eaf9e1cfdddfd47abfb099c95206876143860dfea5408ab47569eb1135b519ecf9f5e622d84bd50547410f02bbf70ca6bc9aa58fa7b06ba14e8facc581997f1fa3669bc9185c9e2ad3ad2ce3c94a05617650a65f8b4016dd00f2f68581b36729de5d21e50fd0de9e8922ef7877f3c15999779ade1f26cbd882bd3c9cf6f5356c4403d215c6dcd618c9d29c85e300a6deab3c2dfeca0557eb5c28c4b836fcbf7d5284d2f4d40ba09fe27424b56164ed1068c88ea5c9506a4ad7b3817efc2d078b3ce7cf9fec097827f0abc14839c433092d0ff741e0692607f9b53162879418935a9378a46ca9d070ca31bdc9fc27307263817be069b29f6b2e2910ac2914683d6e5f351b3cef8cd9feeffaefc7f81539eae5135ab354d4729f42fbc91f5d20c9f4f356a8d109d6dcfcee944ace466a5727b5c7a9ce880b36e0b200e44b753e90b47e8479fd1369af6f4792da7d7ce37ac169ea04528a560a860b4451f0bc9e3412e8e90abfeb969406f16c640a09b46b56fe18ed3f9419ba05a9cc7fbc6b8743530bc66bf7cb032371f36a987589460cf3bbdbf0830ac5b4739b47b0846b76610315f90edbdfe8319e86257e97e7e77fb8419624e6e1bd6e20142b97a6ba761d2821fc589fd782a67f28112b92af67d499d8f2fc62fe1dc15c6e76191f574ef0a9dbdfddb23799a62f369ecb28e178e198981eb52926be8d6697a47435413e409754751e628103a5d65acd0d75542817cccf418e229069b6ca7ea117289a6e8a97b973cca0ceb995b41611102ea8eda75d3dd1611c7ede5e7220ee523e2486b718be383690b90dd68f02a18bc1c7e3a447f132ad0da461773cc8f2d1da674ff403f56400d3a3d305e465e19d3478acd615498b5916468887160b49902528d3fcc614b61303da5de04e581cc6e794dc85d6eee0fba51a16817f7436b67cc332fc47c6843e9c1f37761a0646c0ad502a42ead2a3257d78cd6c3b53af46b4902cbddf546e62e5aa6b597477848faa7516cb2c5e6bb077f900c1cbe10557ccff3cd6f97fe156060cfe5e41d81087764d7dc6ce5858137ae20ddbf0f9a551224644122938589a3c95edfcc727c2638539efaeb2bc655e961d15c8bb7d8bce15358a0c260bf3ae1583db0d07b691b956dca8616f167a60f7bfd62ae98d96e92fe3b16835c10be672d86745808af992366f5cc8abb43d112d4d949bcff16235eb6844bf116d70695b930257ddae1214a30f2490467ed02e8cc1206f38a1e37565980d58cbe827a15d9c1cbc56b120e9ae4f755623fe37a2f14e47c998a29748e04aeb7bb085dd91a6f88d56a81194df561213afba7b9b6f7b9a8df46af5cfd4dff66fbaeb7f100a16a4c1f4783288dc122ae236fee27759850300bcb4d3dcc561cad794ffd55100236fb77b72d6605ed8f75407ff1f7f16951f1bb4024eff52cb74c5f8d394aadf84398ccbaad9828c299cf300cd011228497a16ec8b0299231599f7a684844e03a5ba6fe21c5ea967f1d2fb87c0ba877fc8081fe791cbb7df8134a1a93da893b42ab2eceb4be5269af6a761cbb00303001c41ffb3be1466dfb2ea4ef86ed145010f0071654bd7384a19b1a0d5c4c2c69f0b0526b5227d3ead102d9d32050adf0408842ac2d623cacc66db1ded3f4dcbb0daccfb3b079af5a1f03a98e7cc0ed0acf9684dafc2515c6a77b36bf13d0be71d3074a85661599a9a319cf7bc558138eb9b3c13ea1cbd8115a5e279d2604a69a274e52dfd5723b216feb10fae5b6818af693c0ae671e88d90cc71624bae9670038f2c46c580102fd8370c532cbae45b60a5aa2bd7d6def49f871b7ca335e00bebb0747d2f32bd43e681ea033513f93f46fd412747a1249ba060516992387f4649d7e8f4bddce18aecba91c69c17f1c3032fc48772f2edd29c987009efc5b286ef57a6c410450f6a138e937fc3bf8ad74e44a92675828f9b0f5e3d0d87b714a7828aa3a0144519a905a009050e4e8dd317180a1f948d4037d736d4cdd8d8f9e78adab2930d56f2eaeba89202892bdb4ee51dbc2fd2a4eebb1ba561b483b30f86c0ae10411a49d540b907a32579945d21ea01a5bd971b782a41bb947e21dfbe1e0a4c1b9e97d940828ac1f3a182d3bbc21c93574e64f923c0f521be192b60ba8473829f451554632ad317c6e5e69159754c0597e33d8262d379635a22d19c6c2756fd73e58de617afed08d95317b6c264c17b480c2e955ff6da0127cb7b340c33007ac6160ed73c7b98a2b25428a3d115b093b8ccc740f3e04652ffbdc1edca53c8abc9d55e8b413796d7ff3e9046da819757824eb65064d08c87ac5b8b637534db5e4e79405e6fc9650a20135c15b7257796719e011fe4fb15b2244e9d90dba5dda3cc6e654025149d122fdc355f93827a08960ba8387391f42a430093e47950c08de80e81860d07080f7fa4fa5a411e54b2b099f6c24b1848023f9bfba5790f9793824c0d15cb871c948a1c755cc97f0476c446372b2707e6429814b861b05e329accb9e61c322bccdfc22d1faf7552ae54f14b5c42f3f48668920e3934fa78548295fc7240c818ddcd2a533a428c8671375811d5c847fad85158278744b803e1e2212d40ffdee9855b096d5ec0cee1fe6905dfcce3b4bc4884d097d197ed6bc88ee5dae9daa5219489d3c21f007e5b112a7dd26d3cf765ec6f5eef21d9d4b56f9dd5eca700ad1546c118f7744a24a908f58b24ab5172d20cf0b652e2622e1431c650f5237cd1ffa64b7bf3eea42f33e1157b6f43702c6c131b169d1b53f2876cca9564fdee33c90a5729a69c1657a51ce6cf2187acfaaac4e5c5ac99a7785b835c5f706ac164e2bc225a9e3a7f67f2f1a2810cce69cdfe7d77dae5a8264858033d3b2786d8a5008b5cffaf8823ffab8920d00dc75872a8d778e833b250008d5b88891d17b3f974ecd50c41c0e2da3f6f21d98fac20c9f215ce9a5bd598f5a47e513b6201fc025425ecf5311dacf23de3eae087535150cf2dd6f5a78b3a5d3051063edea2d6cd2e4b8a59d05a2de7f0db97b00d4e91da0739ddfbf7ca988f3289e1035f5ebee598a445f98e04255058f708e54012eeff571e5edd346cfc900a209b0f0417bcfe925abe75e45a01dc5abaa082b31080e120ba5718b4718a57a7b54a3fad7e3a331db7f8e29e3864781e55c899fdc7ddd61978c054a293c017e07a079c7311ca358dcc3d91a6b24cba9904032d5022c85339b997121689718ea06d842f2a9ae722de3009f6faf9db8aa75e4db1beb6d393046731ae8f3277182f1d3d2d510550be78abab889596eb6313d04d618b3aaca0f29e202394e2f48556eb086dab2d37a7194ff52c15e61eda7ac3c9e0ad4e57770ae0d292ec5af8388d84705c74bc7cabd97c36f350d19699fe88cc9a6952801184d45712e4a6d84e4833d23c22cf6797648942c444d5fb42181e44666e8e1d50f02ad341f0cac1218227a71a0530012611c0cbe2bf3609b876f821a1a8a1a57e133004fc1f72ec2ee9d970e63d6f16bd41c34cca1f922e3725f0c404d667da3afea35c6be270a1967ddc7bea4373358b1285fa15942d4f8573cd334d34916dcc0cbbe3f9bb13645d4d66ee50f772cfffbd56fb11301fe85035c65dc6faef6fc51b8816ccfe7384f36e22961423f9b1bd816f514963c269c8b232a9fa52fb8f000970a1c090734f3df070740f0192691efb625c05e284ed10267de4fef6965693691eee086651d498f0d0d1df73db3cde620040741da14ff365abb4dd7c02acc70e4fd4f6d84a4ac370ce0766da3b4faf7167a4be87450080433bd092388451722a152cb05c5f4f68ac0c769c12afbc6336830ecbf2dc18df23ee2c14eeb02b1f779f726464ec9174e59096dcc327e2ebf7f67cd08d238fd094859cc19b613faff1a4c7800e739692652d6460b2adb65ca7595380125779956d4b1fb8eb3a9a00c4c58c857fd9722325e0ca8bf02d99cad6651e862464f4d1fbbd7a83f338eda1c6fb5e248733966257f1fd01ee614567a3128c35ea8cdcaed10e5b771da79facd922773a2a8e9f2b8e91b4ef08a7df48981c4189ea9c11fbd5d59c756f174506119903aec2c67384489c6262336e7d944aedcf0b6b3ae7c325d37a786b8ac00c78494eccf22e1f64088ceafdef77599316e8fc637a45b373677ab61ce9aecf5278857e69340d5c30b8267da3eb21ca71e571e8339449cc0769d8d21cef7cfe4ce57cf86207db2191a6b3779cda7376ccf000e1ac4bbe161410df785f64f4caa50b316d072f95a008048fa26221acab180e60fae73f6d16797a645d7e4db660b359caa48e322607a65b4d7c7c3017dc45c03001973f295c8c5fe0c625fc295ea401b2c6a74419ffcd7e00f80109d65bd6510a9cba812f21bfd994c221cc43750469c8ea164701cf5b5fcf58b76d48a2c880f77c3094243409c505763706edb69789b823c9a8c98f027061749640769198d098ee8fcb52e774d16efa508ce92ba5754776a3ba84635cc8a877cbf4970368e001a0f706c97721405eeea1b4622885a6fbd982507fe1eceb02ffd3c075f7dafc53e727b89a9b1be60ffe36e89a7e1c382ef575f666f5c0b13d1a5856eda05d0abdc41a1a339e5bb65c839f492bbcef6ca0d52b83c23ea1c2779945b94aa81a28e46d0e4846c85b204a061229b065c48ad922227ddf9261bb20b49c4bc096312d6f25a814571e904c6c5a6fd61dbbd9972e4ff0ce944b9baa058a2f99199f92ffd0e6da7dc972368694f95cf293f05d114fd1a1cd1aafd5f14c041449cadf7d15f12b44b3920c6c1381f42795913267cbe34bbd36e158c9866855e6c48b8516928cc920263a06c516f083f829e9dde5bd2e2f6f7062131c9197b3ca4a9e8fc0c7f88533dd7c62bfd47f962558581b4834076c7b730b22370d734c99892a318332a22bbb2ae15db8734c690eee4c2a422c9dbcd5752334d950b10929191e87e26c8abad20e79615905121d980fce48b269e94bb6f62c25cfb46e58c7fe14576946cab2df980656b13cfdaa45473af54e81474cc9343a9fb8db402603a9c0ed5d546ad56279c58e7602aa47b3c8e696a495150b3ab6572ac7823a83a2cf901c1186086cfb36aff298dced8b3488b3a7728fc72f62ce5d304b022c19b7b8e3b52edab99deb883a2f849cade36ec02949499bd90fbb02e24113f2ab646a732037d82d06990343fc63f13003b48d5961dead3bfee7b921da78ad619363a9c1c8bca998cc894e6046c255e24069fc7254e8d8c183c3f23d73cd146290a0935fe7fa06d8fb53fee39d93972ad3f70701700b939ffda3c0bb404155e06f6175e3edd89c718f013e455ee6ac5859201f8331341848e131f351d93b530438646e3777b8e17b09a32fa97bf0d8f3e3a2e0ba31b7b696a4784ce1cda96031b1e18361d35b599d6a6cc5ec89f0dab7dd59a5972352e07a15c9e728798c7c2a288df1716028f9683c04b19f156ac3eced4147987528002c94a19b58a086fb0af24eb8c127781b558c10bc6605b8cf0d6bad6bb2519d6b756b3ea90ff32657c32b6a8e14b42edf9270dda6b9b1304f421c321ff33cfb2d6196c515f33d4498bf7a6c36bce855fcc1454827fb4ebb184cfd575516bdf4bb9306476ba55e750a8884b160421da02c47ca93565c1dca01e8a93caf89498b8dbe6152645158f33704ae21c532afcc583bc1da75dc6f4adc71981e2f4b966a5f0f13fa1ebc1c03192f9bd29f36b0ae2d714f9074e38cecc7779580864a13acb2f6f0a8e7a7ab7c1156d35f655cd1d77cc84d3b3ebe8c73c1529b0366164081831b5be9d36b258b58f74c739b83e8eda3f15b73d683899943057e8baa846063aa3243563ea3a675177ad0ab2aefa5018093c03053dac7a9998c8b62736472ecb48d2c4974a7e200c674078abf1db34b04c3ad904b37b1ac53b9fa09d906f83231d1128601123efe48f472328f82070bbfb37c58c5766ddd864601b50b54a1882f2fbec67945d421339ddea67cd545d3b0ffad55fa8b73176ed98cd72e747b9fc7028d38930d9e55e596166649b08181c0117e806c5e542c2ab0e8ff5b820bdea19ddd9a7347c40d709dc252258230322182545c4e0ce8c897dbf3036ee16457fec392522997089336fdf603d226d04dfcbab9c5585f9afcea41ced89db58a41e2edbee5672a8c85ea2e52ee4e4f090d4f9dfef508d36b5ea40fae1ec61ba9f0bf9df2ccfdc00c0b2cec6c750b4ee0cdbf1e4b21d12546eb730d0160b69f2e1247a308d21238526b6b5ba58e7ad4d938656d67cc57bdded81a4bd7e796797679da97be946ac4b7766f9cbaa4e4f451dff3bb448407af57803d21b1674db8419cd5599f1be683a31b5586b609ae8cf8cf71c741afc43a3372f47fe57a1876bb03f11e81a9adb51b7ebadd34e7320eabf0670fd6bad49f6e0792b8800fecf236105c910d4a0f5fe1b2e16ae64fbc3b2ae5616a5eee8072edf4607d2603794deb6f5ae5b35a8ddd2fddd1a0e38c2843b03782008a554ce43d16e391505da6586866daa1971bf20c4bc5c553d420ae85ca9feba0ca0eeaa204274d1c58acfe26329a23366db1a53b6651332247c9cc01f18c75da3602ac87fed3f9419bf9d34e8e07bbf88b0ad9b9e08a823f859c71a523cce18e31acfd1e3a4bb496a8035ba0d5768eaea073b28f92bae8b220942d6fa3cfea50d64558ef076ff367e7975d00983a7575a73944ae3a846ac00f5497af79f76aa75289808244cff1b35346204892a1955d9c2ffe7c8203cb50dfb6ce2e3a1dae108e1c0c45fc4bbe14367ee7b66f9f4ff6b6ca924179ead5f42dd9e23834b131c0ff4114250d36c0d1a13c52ab63d805da1a7b52252714ccb9092747cafe6e9e4acf22913ee1ec81546c9630a691c04b09d11b42dbfadce357fb7da515d4b5fefaa9a2cf6cffc1f328d27b1611ad817052b031bfd6a58e6c5cfde83f0d1e1db74d857186f58c5893233270c24058f0ad685703f7a29c8932a542d16612d9ea83897f139a61bedc893861581f0f4cb1c1462eed9155192800ef00bc7ec98b3f534637fd467980c227b0d7000fabdb94bac46ef9076910ad544c52d61276a4e036788b54034df21cc57eab47908b682b13d884a22d2fd7934352420caa53f8d23275220475e25280f8ae0b397660f0dd7f58b3482d4dff82f249253eb283892b614ec0b852445304f276bc8856124a7dcca82491e95202f1c1a11eb878347b1f8ffe9e69c3419c0fb1825799129f4b54fb63241a7d9f506b0535d388c90f03c0ff78847c070dcf1ca067ba83fba3d99fabcb0ff46fe35f234086ea4a1af13bcb3b8f5d8a1577f15039f83104e2b2c5954f2757e6419b6f7c955156515effa9197b11315d69c177af82a9171971b7a012af988aafdb15fd51c7ce7f08e90e19fd3bc2065d73328910b58264aae7cc7944c6dc3e58b37b2bffe8f074e029ca81a314505cfb55f228910c10720110c150a4850ff8079425014009b20932c7fcd11fc1fb69552f275850b41097d86273393fe69ee1b2d821279d56ad6fc2aff8fca78b0bd7eb0d70dfa729e844675c0c95cd1445108283c8401b38edcffc9d6cef9b81249e6f6e408a2e03d508a856a814b7d7a2275ce6c65bdae72e94f17e75e511523d6526d4fb9ffdb74ee281e3fcae4a40e210eb8f1ac7bd9716ee1843386ddd7c67d4c5775077121052f728c767d17e1a06ffc1fe0344bf583138d0f8cb69e7f63eaf7089753bc19f0f189c09800ea3e921af04d0cd45ad3524c692439cde2111a3aff550f4abfae6fea1bf8ae7d8e1ea78cef244840e992d68232fdd7411c7dc5273fad0ed5b2b72514508b2438c45b57e6b5c69f060c50540d6b65adc48616d9d1afd5d045fd991ddf2b208dd9bf39a591f50e6ec793416e2867f54e8c6c7e89b68c2fa3d6cf351f97f403ee8128e55317e4ab17d88010ff3408bf10224deba6d778697e48f22946a092e28d4306491653c06183fa76151614d10b8fb7b51dbcca7add5cae8d8abe8a32ebd9a01374bb520640353c89e0d8a23d52d21fbbc7b04f600acc84d1ad3e40648425cea6402468fb4ae5ede479b5314b2aacc6e164272dde80737b92f8825f5ed0740482819f3fba7826297908bbd44ff00b64ee95d262d60866319c7cf09c3d5b2926ea9d9f068801c8ee0724dac66604b03ac50b18295775fb8b0b215a51fc05bc152a12ab32d44cda758721c5df53f2aeab1b1e3490aa5f1af795443875f7184331d307aa28dba3fed73126d1d27baceedcf376de52a30f3d74d09f9a0d5c08e9ef211afed3397ace994a39748325ae53bea62124348b1f63a9274a946b68069af217f81e270b89473c8c61280d4fd5dc663d46a00bc6ed9c77c3acd7951abca15a097ce53bb202c174044281fb10861d55bab535f97a0c89ca40639d0bb71502306afdbc8646f6ef362b79c54a8f9211aa290ad8b363575fc30ab04aa494f8ab239fba636663b950ccff763bd3b95a3c214ee2344ec895c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3e0d9027289ffa5d9f6c8b4e0782bb31bbff2cef5ee3708ccbcb7a22df9128bb2187083882cc6015984eb0411a99d3981817f5dc5c90ba24f0940420c5548d82de4cd39856438b0eae2c0155ad15e281513959f7ccf998784e83e803b9be5b1b47d0fbeb27b75fd2c9163de2f25926bdd72f8cda9e2ed8a97c3002675f0847c9d647e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc00803ed5884f49312a371e113305ee05b7edc25f1091e04e590dedc4c879207daab54115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63ae173dc4842351fc1c8a551afbdb58cb2b295490782130daa4f359a6a80d72565865be8bcc0af888594903ea0112f6c8d923c5726c4081e8c856110cc7339cef0e2d097ec6582b8a0e035a7630ad3052bbb189f3abec9cb29822cd92d9ed86ab7029cabd6297c2a33d33024ab77167f9d7b2dafd5445ee24ca6e13a366426d46af21e4e3f5dd5c44358c0e41840e73c7e9617bd6c5ef05ee30a46b2b9c066259d23c599fc95a194340402cec351ecc78b946ea27cff1da0ecc2b1f8b1a648b1df808f0aa32fbe90fb9c9c846917faff3fdd4e236c284b76c02dd33753dc9017742d8fad13bc28fc726775196ec9ab953febf9bde175c5845128361c953fa17f4cfe678a4446900f4081ab8d74ef3d1f8b1002edbf8cae3db292fcca0637310ed108f280badfe5ec5168738c4f70a59bc6ea9d1e9243ff2b951386fb668e93502180fb63dc404b6f3d32584692fdd10755edc8f0a2b79e60ff73cf40e689b4c1f317107a21e153be1378b803aedd3657fd832e281756ac8430d7e5af8061cf0ba4897738d25d53b009069561148a7dfb13a1be4c6fdf37963fcafaa9908d16b04eb41d8b35189045626c311053f488813b98175f4877c62da575c1dbfdedc12df04a635f9806315c1b400b5cd9bf814985b1f88f489b794cb2993e5d77ea17bd5421b47d5f12e12dfba57be61b96adc2a7c3787b2b15584363a83c314e46e291298ba47fd680d221a6be604c4d6bcb8c5bbddda9960e77ac17c06d45caf38900f01acd04a713871ab8c54dfd0fed9ad0a6352347a6790f2fe5e240ccd97c2bf2e2dfc867abbd5c5e2303642e91ccae02a35eae155df289ef8fa089713dc29184b26dd3ca3bbb5a1efcdbe84745859f3a1a2fbf459704da8c6fefad9953ad8071701c97f71edce854eb9c0dcc64c8367842add36ec4cf6e450fc91dc78cb1a75e7fe50bff433d281121f873738857044baca902b4634609559817d3a1d79b6f4ffd20b2565f6aff6001664d7bfe06b30bbf9c5a012d4e58199c34c41fbb69d5e6b0d48ceae1c570a9fa1151c14d3e7cc5de34afa36f593da0c6fdf3879ee8d451eee85ed52a842c6f15549828c8f7b5971f80aca18c772a0e03c1ab8799ab95403050a3504c072366e93aee7e9661c751e61e8b2ad247c599af9018bd1effcb49e52d9a2c3ca672f66bc2cf451d9f6cd8b0e6af6782e697ab8d6d712820a81ee36bd8c5bc95fc7e3ff90b987e57c0f8bcbeab23a62daa13981ce237b39977fb9600ad3f66b85f46e5a384e549716ba4be79632435f9a9d3767c6aa2c7ecec26fe6f7219d3cc78966c5d6e6f032b3c68d37c2a78672fd536bb1cd063755ab26fd9dcf5458681097a119a6d21a4f3d7ecdee48c0de946881e0e6135364366cdfa4ebe9a9758c0cda395c37b0698de5879699ead85130520f13b127453383a8929f61edf11e61b89c42cebafe7699504e5c2ee8979dedc49aba9c0f405637ca6e9ae5b475b1716c0879b7449efab0b02ddff362fb48bc6f6acaca636e2915ef9fba9d663a3704f5798a82adca701dbb7ffffbc50a320001c91adef7c81a5620e25e6a837601faf2b004607e5edffce3c1e731be75a9b925f7dec72d9c8159f0f9bbb2ccf45f34ded8ba3d88bc18bbe066984f4af27caff0f99a893a2f78e3dd0f7a4f747bdbcf4a5718e931732be25bfbcec1fd88735858f11b2bd753bc7b2659ff201e2d37b757f34966f4887cf3e9ee5f92ab4c980d2d9671ded4c6e1ceed87df370341e6ed51d7513b167c04109ac539624caaa3ecf4092f70066865965ad88fd44fd1d01b039429bd877ecbf5aaea853e2b23485966fcdfd67f957f9761eaf3cc96673e96e1a04f4aa9b8963c96621d5e69b783f4e92a1029432118d28ee3437dc1b01910f4c2ffc49c123e9514bf236b674fadf1c223a0db8a81bdd574fd092db67b8175ae23ebc92277c91c6eb9480b1a5255b92b4ea6f0083ec6b01f46a8515254416ed2102fe3f55727c31a251b53477594f083b89241c44a2c04c6bd2fc3ed83e3200a348a64a92086be51b68da6ac266983b738e4d9f2664647df467f2ec064e5b2df9ca57439c8a5cce6e6ebcca0c7ce4446fb089079a5763daa87c8e5c21b84d8edddb9e0f707d555ae0080c2d9de3d51408a5ca50f94c43e3fca1fc4cce24a8d16c99d0dd10088a4c7dff4c842246b85773bf0882dbb4b45dc291002d4a2bfeb04c8a75b66bca6899db9c8d68823351bb40e441d95a308f7ca70bb20c0ac4a5b416f4f8afa6867d2c4ab0ed3929da1bcd06977a4d5e349c0e894812332eec6a89350b116d0f46ab0532df27e4fa14fca2414c264cdba612f434d99b54ef9b26c8241717ca6328e1bf2386c8a8229c116e9f6785c19a1d5b0428c4183779e49d6743b9ee464dc6b0217c09be6ef79441f66a65f2db34145e4633339f28bcd6e4492cace8491513bcd983c1caa57462d31e035399073c1f1448c0215c49a6e900d822e2a8c765eec4d798375aac040f769ec57076677cb1c0215d2d72bf98f0dfe58590cbfe93bb553a624433bd099ec2342d1e673959d62702259c7db60de4f5c3070eacd2327b7b518c0303430cc66ab8eb7c20716de9ab914a10e5c7ec2461fd32ec6cd7b7ba755bf80261eec84dba94401bc983c09773792caae510335115555f932fb2fc54aa01023a0c3e259210e99ef8aa5ffb189d1b21f890f1e80715dd1275eaaa59742d81417c0f5f6236b511f7f2fe30ea82e82e1f6bf5664d51f53463df259adddb00e93acc2da3556915286d9af4e0a9c950a4d098b9633b8f54dc481cdcf88a127cbf1e2cd506781cedfb74c4c5001360a395f256d5e9517513a4e4418c4b3ea600731f017e93e18c35c6b11eb8b064d9751585c109ccc531c944edaaa4c149c8b7d4e9be992b49c88a7739812a1c25d6e70b3351b6a7389cc0fce11b84e3db4578ec6f3a0bbf21eab47e50d54fe64578d977bf9a17e492a337e39feacfe23a8f81be7da81b665b2779575ad7d384d581c19e8932e360a85b01656104614b1a0cea8468a19f5b6e0a0c7a88579df2ba32f57249456a2d1cdf983e36110fb2a3a8f90feeb5b043611874b7334aba8cd78aca9d935ad63efbbca72c94c0ebfbfc263e9500baa06b9e9a9c45f1764e2186b824d8bda3d174ec59f0fc44e1e9264303707d184e81fd51e4a99b6461f40f648b7a65118e260094c25f9d2f863e38b78c752aceba2eec6706ca4525db2acb474a9c8589c7d73c8dd4f066adc99a9599f7dd45b87a08969e3905998bd4fe51292c0f290275014c5c99b7986353e14faa47a3322bf7623985aa5476954b0e2f02aa543e0651f118d937b6ab7621879ee21a22fb42a58303a9b45813fa9eda61a066a7068d2bed41866474dc1d2ce3a536cee320a4a518ab304e1b4bcde27e9eb5a241d72cd37a37ce2287aed12bec89480beee58681132a0cf674d3964a06fb9625f372dfaf6da09d65ffb33484d78783d4d0c289ac2cc0f158826956094db474cdec7569fb1a4b5e5c43208339ec88ff2e6a487b165fc10f18bad6e9c74c5886ec5f481cdfc09d149d1e1d02e64f36065c46058356a23137873e8dd6195755f7fdeaa5aaac22e768de9a1224271efb01a5666a7fd70c36e400551adf8b429b10758c6fe0ccdeeadaeaebbee09f2c27352783d2abf0bbebe7b6537703eb8e36b35312a28f735a91377cdb5a29a4bcc1bbb7e9fb346b8b639b959f7dac257bc6f2771447e8c81dbd70158bacfb61993f74632cf2af4b57a8b7efadbf9bd61ff26808629e9db91de86affad80f15a88057bd8e25165b3cd75e47bf517c2c1b2553291606a7382db7097f744ed68acfdc8b4769c0673b48f606efa0309582dcd4224f2033a34e14725231a68b0d829aa1098a39d6067f9d79afb725c2dfbd94f4ac7338c91be3cbba9a68c54ab9a3a4682e5de0d2bae3e600de7d05e241942f58ee0885537f9cb75a0a5c8511611b0ebc9d5e77e17a76c4c9bff40e3357ffc602b8e8f10b00bbbcf3bf22e8871eb2ab4598ad5681d33d74aaa4a46b1a8d8ba3c46c2cc55f12bd3db168c5504aba75a717982d6d97327074aed4b2eb15201b1ab5e5262cda18c2e1507ae7fcabf4516e08179bc91f8df4188ff377a0fbf0bdc1caf92206127d117a989c9fd435922f8667414ec9d702e48dcb94e827b0d424de212a203d4609f54e3f1e4c502ca61d4f511f4dd2efc5e4f85ff2cfb28a291b6ef09b90a75797749a74d845a2399053a7416c2518865ca416a12daa9ff3e0c9a495ef64c5cc7f7e70ac9e4132674682637cc48eb12c3a13bc9574190adb14906ebe49d3dac660af09d933e318901486c59ab2e08851b0f232e483220f9fc2672ef2b5981850169ec4adfd4b060acfa946ab9614f95ef19cea0914a12ebecae45cfe1c9c790a4ca7d184401beacb463c846a9d73395efdaef183b37283ea541bb15b843def49d1a116e4804e2375a067d89cb9b11f04c776ab2fda76e2a5c5e4ed2b3ad0005db026b5c2a0b6a754934e4a56e78018131ee5bd989b3d7284adb614e5444d6956f614f85a93d75a2bb83f51f1e04d19d76882cfb259562fbe153deaf1a4ecafd3f80284e3e704089918ab06c26ebd343484f1ce48b7f4f011d335427b8851265fd09a2c0a9c2c2cc6582ef2cc4f7647b5e5a6e477b78523b4be365c694a0df82d3207a6907bdb2dc116f6fad678350e8e7b1e6b4f914f21b1b0a0330ab88ccaf1738fbc3f7d6911bd2fe370a1f67d4799009370269b3ce39f48d65fb1d921ce3c8ca4c76b8a0f15a4ecaab703e0a96a1af96d7a70733f25ccbb2f3188dd0139c1ac5ce33470fac80d673e05a147d414ad0c288d40277162a2247a95a28bb537f9c095fd51fc8cc08b2a851b828527ee4b51c355a021b05265894eb0054e8f70440149b7730ae72aa7b94ba11f900d67c0265420a47edbfbf525b02bd5d70ca355553a62dccf5eb81c7e4dc75840570ff685e5f085b99c2ee39db734ac039cf871ed8624b5705a7c6fc325b901ec2494020c7931b014e12c184f66723949dc7b242cf5ec4cc113963bd0d9a1aa5854d3af25e036ab2850ac5f0736b7af83a0c2f94db6f715b081c9d4d2d363166de4dfc99ff2bfda7b83d86217e859db5aec34f3b1fd4da6c8e3f5847301ed2b40a149d6d378e06800f4d96a75553bee21dbeab2e75e2022929cc3c73596d84c66c7b6841bcd6ec2ef6bd69ac9bed6aa39bcecf42eafba7aac7f929ee625954adca2c370b95298f530a0e5f470fffe17921f9df904c6a933bddf8533d9a59ec82fb435974e405eef9e73bf8b64ecd90a45ec24639cbbd05b51e51569ec815cdf3cd7cb4238d8717c37c927381b7a7d35cf4b9ff4d45b26561783d8e5ef1f222b0298b87c84df182e79e52961c71ffe0ff76ded3d3a5d7203a26694e460c5b5c06cc2704c928f3006ce5f746819bf70c7d951f72ee0c5c330775ff48104a396172a6b34564ad5430dba446df60102e98c99ddbd612c9df91b64c5003a064919a08d8df8e87973b116230518bbe9f31d95baaf86714ccb06acb946d108f374084c62e42a839f3cac993e71beb1e076258339fc42d5005f2a9a410e3f5295c6276412361d21cc68bf8cacd675f95686f193a50046671f00a922ae5f0901e4b2ba41a9fe14ad03dd8d34d12822e6cdea17766e6b6afd5b7ac1a3f27674bac80e8ddaef47b0ba6d7847dbe6f7d19f643127b222475e10a25f638cf78c1f24b380d361e3f9e1482ff50a178899d7108e2165d453a2af2343ab58929c0921a9f4cd3a9d49020342523017e2a985db1e11871173d5307ecd2f7d1159f8531a063585b35a68ee4404f82630a3df7a3dea5b034a31797b582f16b467f2c61ae795992374a02eeaac9d29718fda7ff6f6abc19cbf4c6f7a49f602a54d806e9a328483f6b781519ad1cf3e1486c585f0b285c2c343f949f7eb920f1f8e1d149505ba482bc93ffa802e58bda065cbd8d2c48af126b477cd1df177ac0cd2c9a7ca8b7ae887a1b4ccf4838c49ca0ed118153eb87eef6a3ceccce770fd803b0040ac0d66dc7a533f314d786451318c4de4861d8891c9a4f01d6108f0cb823b59b4b645719d01af4e2045ed07d53de630e7aa471dad56f7f8d2c35072b6ba26adfdd0a0b4b50960341df982304b9e74c16f1a18507375819179756a9a0252cf2938a5c54dd009603ea83d9f1ddee1c351863404772933fde4f0d8c8bcef9e5ee8b9c35decd75c96bb7a601fc3eb02b47a55187a57943cb55633e92b14948dd6203d6364352986a99d367c7cfaaf6815c1793841666a09aec47e552f8a3d55a3eba821e987eef890d370f0290e8dedb0f286a00bfa6bdff7307602cd54f43cdcaac651d27ae740021125ff5d4831fbf71d5df5e95e06d6738a58955382a5b6690d8dd6d89672363f90ba05e032e0aae404822133a38ab4340a30aea4cbd0708b0b996f23b09830f0bad61bc9035a2470a7fb2b7ac060946910aa729fade7985dcd68519a42b2f76b821df09d37d47ee15186cb2cbb471e5d53b89b0be9695090743b441cbfaf314027226360bb2d48aad90740c2a135873119e000e417312e9f302c3591c0c6bd5f9f1ee684d71d95c7cecb67f9e318894f03d380a8abb95779cf04771d463a88c0c7cf116b1fe072a732e8005090e1f44593c81ef14a9aa4ef820165837f914f2850e02c32a7e17e42c98ea01b0a7693fd77c36c700e1d40132620b05322e5cb4504e9d47a0844bc68891a1f853fbddb01c4928279c7bc74110a813862395cd83f3faf3515532043f9caf2ece90dbe9771434eef5afcd3373029e4e0d78cb8823288f8af3b0aa1b89375a2c77ac75e563bd7987ce4830d86d12435a38aeee4756b47e7087616c27d67673fc99d07d7a9bb76f942e2d0af0b23db381491f67c10a3723018d3c8c761f4b922d4862053ac60338ce94fa0e728954b7826dd568d13da4d229dfdf771f6390461a1da949a9150a80c16ad725854e310b12222843cac90a61c30d6003f6afb15d69df8b3b8e8bbe1c155bba9147625335a40a4a5c9735f2a232be304cb63181a44521c101c5d65c77afa72ba3a901fa951ea017c0dfc994bd08e57171d9bd69472745621aabcdda71b3a033d687dfac2dc33eb18c1ee50d4dd2ac682f1367f835c27c02f476ccb44a62ac00cfc12e0829371422d2c1d9b46b8e520e68ac30c8b20bce66aec7ddacf2e75d11e2ca2b567e35835cde15dcd4f0acb1df88a266245b1e7f68f6e6e3e19d277f7e0ee4daa32f6f6abaddaac4c21a44fc586a6da1c5c5de0e6feef383ffabf5778b8381968355537fe2c7bfaaff182a714e5408282bb7ea2d64f0dd55d0d1e36420f2c7de4f34cb716be9965828e15069e5ed2f5496a1962bae5a9e701934162d8df204d08f39cb961421b98282bdb12a0ab8f464eb7fd93c63744e57dba72b4e9c12722b2b1fcb24aa9cfd0b6cfafd2c62b9fd22393186c4b72841e164f7b261836ed5fc08256ba0997492f60af7d2dd72d584014946f32971c4639fb13f1b4bb274147c1984196d75e48bf022341c1492f0f6116e6b70120ddb823a0baeafab3ca7436af2a77dfc149e2a5266bdec1461093631ef2f3741c4348b903adb6d5958ee0506005e4cd738212cf31859f85d120f193cfd509db6edba77eb0769e958007a45dee9f240649dc2ebdff50f868434616051f575029d76b74f634562419d272baada72bf4b8af395386061d67f594d975bc55289dcfd5e688cb68ab672176f6362e656b1a9b57c5a6ffd5f33d45e7607de8f9f5f041892a461de9040e0205796287b1680e3d1b3cb815f2110e1725c23ab88ba740a8447d6d885e2a97bd78bdf204323307d03b8c1fa72b84dbabbbc12e9d1b9c19f22f3999e19f19afdbd893555a395ee925509bdc0eb01b1d79fb2a9d84ea96974c2708b54f6f5571899fe04954fbedcff53a34850d170174e52a4908760573fa6d7f7f0d6cd832e19cbd9eed8cd7095a41e9f8b9d47d25b4bc0f2c243c1f9237c1aee6c10b4670723831bceaf8f7c08eb8be9cb705f162c40e8c78c998a9e26f4b5d0658a0ec61e666e3ffaf5bc4316f851c7dba0ddfe116f6d38c79bbdef7326076690b73e7268f59838cd36844209d7d4a7613242f3d232e3aebda7f8c166af0537f796c48177adf0f1ba6c20f286f7e21322cad32e7d430d4f4b8b8fa04986358b3440dceb815728cc9b479d9fe669e2c0343092d648bf2bde19d68ba87e13014d5ab11d887540b32f54f6f954fac6463c733dba6ca3d9d9390fc4a735705dd39e9f46047e1d6ea46969c1046699e4546e600e5ab150fb85e4278c16ca74c226d70bba59eacde5ed9c9f6c9bf29efd1b6ff4dde4d391a324d7b2dbcba9988ff47ac218382d96e09faf0721f383127686108fdd2380d357f764bd038f83e7d933af9a84dbc654b092afcfb1786df8f67030a17bcd2ba9a7f7a2cf5e67c300f12b88ddb2717413e3e16727ea69a854a546a55770edde20dbf52bf709e68cdf578d5d006920ea33fd659b9842f278e1256b6f7b61b5df489b456dfc75adad0474dc133ec7c4362924e6fcac7b631abb9e09ff1a6fd5f3980d6a9b805f1134d1d1835ccaef5b6d7b0306a94d307aac4bc0e64f6a9348722e38fbeeb8e4c1c805c91c2b8627ac2a52ae70a4226da4de5ab3631c5485491666e3fde2f8521117409795a9e20d858c9aa04de554db1785d5584dcdac121cb10a376ecc889f071041c749042d7ac5ca841dd10999bbd79c5ac2ddca0314e8461c3abec102cb87f76fac5291eb37f0ed9dc2ebd548e895515e17f697a8f4acd0297e7d960caccf37b6905d59ff8215a12ec83cb990acde24e0aca32dc65d47c251f4407e421c14f3ca94d698916692afffa4f4fca27b95ee14f8f397dba3d7c04d418be3956d62cc126374c31d9b4ab78e8162530d784c4722fd1e1433b4960f495650f75faeaf09dfcadf833897b92e71cb8a54986d80a6f37ab6d758985fa50e42cf7a397909ce3045d921f7499abc142de5faca7ca377b56f066f53c41bcc10e44ea5512d02f1dd3dc2aee2aa749f7cb9404383c85d4b2710bd41096c9b73dbbd39b5492598a82b6434637abd7f94e671f1081d480d8ee44c068cef5816c97bcb7600644346257f5d08257ec7d521b47fb2c7a964e8bb8ca36650d9db44fba100c5d2bff7042988e9b593a8c4ed97ee2a866e7127e9e8c70fb7b9d6fb1665c4b2412327fc5104fb301e6c0901dbbe0c49e56a5ed4074096324d87e49317bff25e3735b47a55c0d37b8bc349eee64fb2a4f5a7dd9f86e148de20e68d424f92a0eeb64aabf17528654bb04b2c3dce3ccbfbd38ee2f42d4077f3ab0ec1ce9e898291172e0355daa7e08c537599feada206c77b3d693a1962916ddd80b0ca490274783533ba338f5b042425a89c509b303852f9bdb1a37ff869e48011c04c4ebedab371d508f7765ec3208b1e5ef0776c3524ab5ed5fc9b092059e16ebfa9dc623adab83cc28b6a6291a6475399ae7d393c45a80badf528fdcaecd64debf0e2fb9d53e10e1f04541c067d0f797c6f32d2df7e9d27272fff508359d1ce14d5f6cb3c675b38d904a58617b15d4b33776b9457bdd7f52ba98db099f7972b9ce0f083401231d07ec0debed572d06c2fde41e13c5a77a16640fcb39efea3e1e9738b7a2bd01b2965e91e50e132174f426661894b4702e5ee6d2aded8f031e7146cad54493995f34cd08ebaaa1127ce390d457d18278b3671752c670a9d994145d9541d82921333139f17d0092709535e1be209ed89a028296f1d21d0ba7d43b97f4515cbf136d175068bf65ca765a453399ee80a27d82791e0374899f6b7f036b90dba95b70b5dcad3b2660d238c4755963652a41fba0056a7118600a18573d8b80d7542b054ae00252a188f7462539daf9a6a9d01add6ca27df84e4c9b68b171347bc898922f6acd3053eda47e7e326fdf3e51c3bf84ce80a3a02efd59f6a7c5c916648d25076132d0e7c909fc0306b8d22b85f4b3bbdc863f96530e9748065c857b4d5a6e093bcd908b16a92fd27ef46028283f02c0f2df1784fccbafeb1bf9237e065d04a797d93e1ef0d5ea70b5f440177f2fcd417806c2668dcd2407e5be7ff6b650bfd812d4cb221cbc2edfeb596174c8fd1c7b4cb3e9b365e6e186cfe8b9f228bf65a0c7a1036fac8230000803510d6437f8b4ac60348af73d41aa32bd66b5e76a75d5333ea674d984b64c835aedfa6c49ebaabecc026669785e9d118d05565e996e3d22317942908b533759c9733ac3a77908d65cec6f5fc85f81ddf2474ac9e67f67f86067033209bcf149a3ab34286b16a534e3540512fe6a472d56f4bb3da28a49b590eeb4b08c52f667b11a928dcbf40d8804cf7278a19901989080cf089c461b9179cc73a20494412ef2478f8d7d51bd9727a8bc0fa45e135c469d3f6af9831cc30f67262c66310adeccf69c29fddc9c5886a57189c76a6e56cef26d99bf46884b1eba03d4562b1bd58811195aac84966191c2e0ac6fb97ad0b2b735b992581b033b8fe136464b89febedb4179e4b8830d82759e85096725b6e3da92da90f6d15717cd7df89185872a23295c08cd0904d5f7d0898e799a849ec3054ed946187cab958ccb360947ca65cbb81e9d0706a43ec73b37d9e32331a15211220ab26e6591bd87dbb36677e3d3f2519d0ef7963c2d4fb86ddd9f83a910d47a7389653abd77fd8015a029ef374de1bfcb6020c1a246d2c73213815b0af29af6165f19414e5213a7ec7d283dd336c4433c8bab693fb3301bb7fb16fb1a0fd658cefa1a061eb06cd55e5a915188fd7de5b2f49e841df842dc03144bc8f45f43c579d1790c864a269447da6d6ad8a935949255657a1897b837533e17f45acbb4da6abfdb1f778aa7e6e5ae0268117743a796b2aa037786f63a46ebb1f12693bdf2f47028ef30c3fb885cf97aed09d7ff54598bfcbec55b959065b3f2d8d3ce3f4a905656133122ee86acc7b0472680ca78ea48bf5e425875b5b95c905f2bb24a30e096ca5ec38820ffa8055a73a6d5dc8a0a4651e009af49d936b03ce4c9bdb3033d88d8368ea77a5e12429516013e526948d3fb13e6e4bc6304e7ce40d86bffc7693c7ea85f37c2e8574bc6d18194f01182e4974d84067b0c68270a20637e5474202e7c0302d2f8454330952b71abcbf75eb99ffe309df2201c254c20da6d8fd5eb98c0173ffb0569be0f97dec5f7091d4e82d93322f4fd57ac28f17e116e11fbcf62c23bb5a5eea4680aa3017965e65f571e82ef78d72c72499ee0dbc4bc64b077b3e8f98943ca89c11f6b4f124dde10edb8dcc5e0c398190cf6a8b3cf896152641a3b6c49b17d00b7d4c65096c11bad6e921693f477a1a514ddacbadaf7a79efd42bd06adc79fec0c45e2008b6d71bf53f76d64a4707f40c9e894508e97687bdf21688cef1de64c403db0fef86d96a2956a6a0d7f481fb04a747a18f85c8777ed93f5b6ebfffd9f5cc98dd0cb41eab85dbed186e161922786347c6b23cf20db4a720a82c1129956a6f9b4a13982419cb3f16b77d4fc2814aad51e0430bea33e0151fb2ef0b3cba17625540639199e369e937620472601136be9935f1de44273c3a9b6d0cec0da8167b7f49fe37602b189a7b28f576851e5bc4966f777498d150af224717b91e9c7ea542848822c82f38c12074c064240d43d63053787a51cf60ba0402cf165fcdc9d5622027261e4831b82d038914fe29c4e0e8fee6f3397aac2095f80815c15be933177a12ad731f32b8cb20a78ffa9c62eaef322d5a8e4bbcca2cd120e5dd35278da799454287229e84844f5df06daee603b172ece9c3808d76751a899a3090f678acd5154a36a4128beae5983c39b2b36e59715ab6424549c4e7700ce887e9b0bc9dcb1dd0241f6478e79422fdbb13b62c91967b02b668c75c619514dafe25dca1c0c501eeead8dff908c65308b4341aa7d7ab5b8aaeedb4a7d1c700ef4b31761cebf6587a4aa9025a70be6ff09c2fdcc5385e0a44602c82beef13715cf1b0dd0e4c0a51eee93d95c0fffde14ea83b3dda3b146ba5e80dda2d3e037719c794cb3689c720ad27afd9c6c8dd3c8b1afd250486112f47aa1632466f06296d9efd47a51be7e03dea8a00887236b69ffbb8ed8387d54efeb542cc6ac21518813e1bc8d7fac0ec9ba6a996d17930734d415ff2f8f70c4ef3c484dd5b4514a0634d490694d292e2a673f169a3d471a69668907bdbc311d01977209bec2425218fc4d2bee9b5821f81004965e1b0338423415d6dc7d25bd9dc42328538dd3d5856f3092519120ff2fe5308d4c03dca652c233360cbe630ca75d41d6c3841ceb7735fcbc23accee4bf20012e7e10182f49700b8fb6c48db12e9b2e97a9ce6397f59e9c519bfb4e66872fedb3c18336a1a4e27aed2be4d07bd0226301e046e0624e2b55771c013a26e3e43f691c1ce0db772682039a666deae069403004b97439bc53f509009788ba91e6bde89af9b315bb9d3c8ac44b781afc4d23e019c3cb7f644aa0243bc22b1ee0d6bd06ee0263bb894c7f6c378004a2b9f65af4547770aed31408209a50b56dddecc891280bc4c5470f5e7cee84509622ce168f338ed77201e5cc21d07835047b6fe2507314e509c8ae5159cb46984d5c0f2ea9c563ac1b281566b92a2cfa1254c2e02ea1305a1b99c21443125761f2bdf61bd46517fa563f3b973a7782bf1dc024aedd83917f3a750fb38970c058fd9ab13ae107b962b6639b9ed3946223547f345db4718c09f65b5f7063a197b3c01952e6abe40c75b70de9ddc5d041c74f2485402dd81e1b5a41ca14d0f25f63f161aa7392b94a5668ff9cab5cef0535a580c4859f649e633eb35a27f854c34fad1e50b14ec5e2784368799707728912b0fbe7722be3a0d8cec00a8ad707763bb6a8005c961dc8abbd8700fc9167cd0ce45ef437b115b11706ce6e0e3ffcfb0e89ccbd6efdad9e749d0a924c841945b87ffb8eeef345c25ecb4d0aec57a172e170087a91eef8a07421d27cbefee76c689690b2434cc6acace0c52840cbf29101e2c60f3d18bf1a16f7067aad387a1ee635751340e125be6e54115d175793ee4c235370ad69380751888e57bc0ea43786682fcb560effa376bee8e66937b70a459d91e102f9f17e813a88cd4f7ce62374b43076bdeed099df3a8e3c59354bd3fb2d3d7bbe8648db9c426f5af8e948b4b4cdee0a90310a3b471128da6e0286e9b7ccd90d78413d113c7cf38b00d9f403a81445df7b01ffe89cb5cac9fdff0192c8c324ae14564f04bc8cfa5b1cef9f51144f1ceecfed4ffb1b834bb70e43bfbc229722e0a3a61e1ae3c6d4df2cd73866a1b060696e39b524504db5eb9e3f983543d2db3b3b9663655931cc36ddfd4542b5767168141a1500838ca2aa729aaf043170ecd47a39893134e8c0166778fef56b0b2b462e69a83b75014bf1020a921a0ae9979c1484274bcf0291c3327596e7812ae2a9c9e8dbdb03fe4cc869127c27710d09381b50ebc8e51c8c1c8293ef99e13d9293a3534fd58379de1d1704fac27d4e5a816b6566b51290effb890ac73589d900e7b084f8a97198e5ce977dd551e019d101f94d188b699e6e9632a1cc27785422509c0245739a17904131f4b4ea4d6a9245f1689d77b197cddb52df09206d9b101668a92241ef54b93ee4905db40fddd94760f8ecde3d35c8f15d1387f4164aa4c58d8fff7759cd0406516ff69adb057c04a3475177ba5ef52d377119221a6e3879d1bd8b32a8db6246dd36329abd91b2a76c06da4d6ae6c728b9a75547455c76d2adcd08167f12655abb40a4c103a35aa937887bf570e0f4aba095688b18501cbe408f180fa2b7288beb010bb0d7771fa03f28b8f7f01d8a76abec98f96137a72728068a46ea8b65200f3066e28d8d84e119d21208d94585fdf62d33abd42e4d543ccbb52bda5bd4ab1dcfe2557bf52ec9bef1c99f2739c6f2a7fdab0263c75b0c3930c78e429062ac9c8eb0f2b4ac8d5ceff7d5f883cd1fb76770e31324d8036b3aa6dfc0566ce18fa45edbbfb72dd7fc2e3f73fe7b1de00a393f0f0bef6a5644477e6a408b0df4a3f4f1dcc0ea464b2ec9194431094a73c56a7684e28c47dc256e743687e6067645c08c7510e2d9cbc2d5294f8912162a2248f026fd5cba6931ee82527364acbd3f82ab1f1571325d75ab15f854cd25d3db21a78459b5eda35e2cc237a83126ba66197497e1ff840d1512ecfff9ab55f8ee16bbf1f6fa946968fd22639583450f75d7f4b1239bb9ab9d7bfc90792cdf000ec7f3d8d4022a17434ea9b27511960b6523c21a81ab873b83fa65decf372d98c654124820e582c2c96ec85a24d44fb216c412fff6713597b9e3e88ec5a7aef0596f4c200dcf63a21811d5321f872d7e3c13e222914edf14765fd50d49db49c646bc557031e045572e4a1c1473b070f5adffb87272553bfaa6a01546f101583370198a66f018086863e290f5f1601b059c23e199a99bcd84e27511c491a6631c55243aa9f783d89854d20c4690fddf2bee489a3dd0ac007de7ac055844a550442ae939c24760bc1b358e78da922c63e406dc7db1ca70c0e223b056b7a1e445dd29be409d817d380924fee4282f53768e1be96c6982b4f032bc6a90ac4659d2bc63a82a8b2c1dc66ae32a9eb6cca351d11fc9937aab553c6ea56dfff2a49c2d911a955a76d377a6831cbfc6f5c4130ecb63565d403f45c9659160d49a7a956a111d5dd230838c3fa8210b784b1d348bf715810651cc39c1b35e5da46820101f698394764230f5ce44f56f8dc8674a6edf35a1e32beee53768aec96967347cdac38a157a003551bbf755315453895ee4336281467e9017043d46f20cb61e232a029f265c729851f8e5d3fc218f5f5495a7c86f4597510676d9cbdd2b85b745ee825308484537f202e396f21e0fff8dfb7f3d1028ac463c3b43915ff044261a53adadf252040329b7353459c03f9627a993881fdd16f5a7cd88e51810077883c46511813c88fae253db55839a534712213df52697fcda8b6312af53b518c8423a05429bc9800b67be2da3b3faaafd8c94355515ed5db7143ea74c46495a6056252522aec00911b33dd0cfb8bdb565327fb814b61ebf64c1fa520cc06db883ba9f2f4e2902c9847d0de9f7c2f63dcc24aba3427e156bf97e2904da087b962e74b41549e6f53bebb974a1bf0791b13b9b564973e253f8d38e2f3427a922c7613c8a8e1b1a05f8527eed3a7c5fd30fef76b78d67a45ceca71f8032aef77b40fb3f7506ed35b624a1b8e78afb9c893cb84badaf77444ccf3942ec7d5c84e3d6c7c6e001c36ee7daa0b9e2e7f618a5731de93e1daac2d50a09ab2a036624edcdfb17b798b1ff36c108b52b940753fdeaf760dd016b1ba898a3042fdef01367238894dc3c0f6ad24cf7f8fdab91b820ff019242546bdcd891eeca54d8caac397c458c19530343158a6f76f656182c7a17aaf29264e922d6e4d86fda3c7488fe21859371d511adc8f4bbfc3e89bf8ad7b71f5b51eb724e19d2ad91b963a31236ace240ba4c3e9cdc45e8f5a87321dd910487ef649ebc39e8c5209d726d52ea1c6f9212215cf61802fb3a85fd2147bc499bcc66e93051044bb7f2f9ab4b3a39d3646835b725459fe335a82dba2480b894c33e048f01bebb5f713aa8286b9c3e4bdcddb59002de9f2d14e3cbc1056fc89df37ec34530d224532f4d8015bebda98f54ffc869cffcdc9da47ce9b21b8355c9c15ce52b500c5f4ab0b3c1abcab60bc76ba8da2e9cfef896e7d38a93e9bfcf924dc1eea7f41fce9c0f9f8a817fdd6e7965a4f966ef7571e558b4993258531b80dd0a9603cd0f4a0cce4ac8d6d533b444e4253325c0cd7ed5c9873bc5e2b15d0cb35dc86580c1b7ff9dc8361b643c7a68718c5cc0f359004c30f539b28127deba35caea88e0cbe43b2a9b56afe553573e00c70e5a7430756a28c6d8f029a9036c7acc49b2b438c686c3d9bbc66d47285a23d0b3d2d4e005a55dff7868b55c99df887350632babc58c39b23c7ebdcf25b7752c3bb3f6efba2d6de3ef768aec8a08ed819710b6acbbaa09cfecb1c7763ed92903f320639c5ae266f002e1a9f48630e8a259cf8ebc94d906467299faa7dc18bdd61a2ad84f2af16b2fc8233ee8f4017d99289cdb59408cb3f2478bb42d12e5a511afb362ecebc2c97b97fb47a0ac4ecb2ff360e91ec2be4be201b2c42fbeef923e0e1df87c9ac2c0ad95ddf5f3a5687d2351fb213216e66f553937e7df08d1663faf24385c145ff475aa4b1c5fbdaea0b4d47592879894e94fc6d3820a08e77a2acce10a93a8cc824b8c85397c853c5d4edff8e49a13ef541c82cd91c27fa4d706f3347c66d883591d32d4e035d68e0ea6a4751cfc25ebb03963411534951f16963673d61bbc089a1dd5e9707c580b3a6715e2c109f27a6eda07bcd95e23ff42997c6cee7dfdac575c3245d29da1c26b61ffe2de21cf9f244536d1af9ef6074d170904b5664f0fb241569132d22d1078fecad2dc3620168a15ce18bc7d923c00d89044e0f3e1d38e25747f32105e0c2c3b3e57ca1ab1275d65e6a9cb3ae9efa4e503182006b3d04c6cb43c4891427abd2c083ce074904ed1661edfe9d0588ee7679d4bc90938c9471d2f921340479986f1adb29f156b3c0e678ae4fb429bfc04ad6b6cf9b62a3d3099bdd682a63469cf9d5af2fb6721bdf1d9ad6df858011bcc3021bb13658b69a335b756378a4a31623d5642f2434e4010ec202997457aefd3f781cec70b091b2172012e693e8083e0f0d445a49b79040a829427faf9fdd8685927c5043e330e476d403365fccb5f88bcb53baa71d9080a3ca72d4bfe68f36bb4853e3c1df4a376cdccd28242115517c49d9273822af4c29cca4ab46ef0cbe10f584be13cf7d080da7c5080433023bfd0a700ef19d0645187dc32b2c68dc7bf681d2a50b0e4847730d1c28d7d0dee42322606345072e95669d609c03542fe0f5907eac2a439c2b2314cc1fc3426af1e3abd44d3841149475e418f02761cf01d92c193e70a09282184f3fd974dc4555cb6afe623fdbaf449eb772d640564aa71fcae228b07b6785f6950a66da633e3cb30f100d6949e57c7b441d235e2c5b645f9b22433dfa656c5db41400c35250aea582491217d04b809a37b4823addade7460778d7af33c963f9650674bde3c44b5a875c83a114549ba4905905d10a6ac38bb2d9daf95220238189fc4fb643bf7d2d416f9ba5c6ade193aff942fbab90f87ddfb0babc059217a4167ba34065f2cef032e0f81b3c84c7b3d8b5de416303ffa4417cf076ef2483cacb2b551e04fdb5ef12bf88de3b9ebbf26d51aa06dbbc7e0f72dc32ed4313cfc9d2f03c9f1bf6588fc863a5484e640bdebfc4aa071b79cc63ef65e7ef75d1aeb22da18ad82ba4ae37ee12746064149e2a0e92610910f433efbf6b3775f5e55e11e8b5a5a8bb72aa2ee25e0fe1d8be1456cc40c041d908e0a92c39d6a6a1192539b75d7773bb07ca2eb391dd73a8bb889c7855df84748747ce5c682f755a5a8c544c759e50b434029249f7692c78087ddb7a87a845276d0a92f7a5b4a260d867b2dd9729ee12768378c774cbfa425cc70dd3f473325aa6961d25ed938762ce4282e1ab2b556f1ffb5a3178414e89d5cb63a6e2314433858f432d3fdab7f5b367527941bdcd14b7cbff405c8b099fe31d927282f47bc44ad3345a333613461cd5c63e954ff725c33358197cf29c9b017581f1ed45f5891667508fe078fd53d710dc244530de32088556cd671c36f3c6118004b330ed8281d6293b628a122b22e7f79220db07ec0d12442ab41b3256bc9b873290f0d0a88b1a7df9726bdc26383bc7e9fb7dd84fa57a7d7a0a110c1b4ee3c2c56dbec0e00dd0822656d56316c4e3d270aeeab83acaab7db965d8ecc912f3815150caee4ba36d494e85c21ec6fd4428346756a1602f51415b10f9abc89fc84f13a71d61403e55972803b36d5bef393b9f444d8ab1f9103d542556e3794f1e746c6e1e727be2477edb86afb6f13e8b3f744f779f4a1dce8eae4b5a873c7e6eaa63de45c11c27eb161a8e44407601508877e40041428b48f0219eca93f1a8a78b25035f43da3169befe2fe98fa5723cea8262d76f2da0c752f41fa815ba817abb615e062c4fb497500a7c919df06b98def9be6c41e4909146971c77c5cbca20bf2e0a479072be03855e884613e13b3ca5f01cd55b2e31d85bd87690e8a5ade5e569b1613b603b90268e72ac2bbda89aedeb0e441e2478b06b9d1d354c266a2e78fe9fdf941615f73b4b273df4475d95bec81702412cf51e846276a630902b92ff19e7fa3fb3e5dee9d425b254bc96a208f342351ade1ff52160b6c2572aa5b9f3142c2c06662b94e65b230ea5f116ad472a5d8cecb003751b77eb1474d61e55071f3ee280bd2319a1a286d5c5f37d3a41b27a0f3c3bc2cad5d06269d13afd4abffd562d249b309e9ccf83706f4284bd9535494f1e980d2e08bad3644a7312a6bdabfa4009cf899600e976523e54a3508299d0916ab0f458ad31cabd925937a69adc5d59e1ba168afffc15337dfca3698db80e9dc3915ff90942c4681ad502be789b91746320d91b4cced71fb03da84cd5cfe2c07c618a46e38bf676548d42b45b60a1e6ea41a9e792d5b016cb589ccbd40c0423868f765f43c63733ea6a5f8c6f76d037313fe99be00a5522a667e2df9125425b991d8dcb5f7d710356d4f1c6c39c812b7ecd1430c0832a4be74cf3c0a0838015dd8836cb21a352adf8c38ebb15ac7e8cb15020d237c91a467148c7ce1ac23014bca9fc0297096cb8af86755694f557e87fb74c3d8352d1046530dff1ba3142382342ac5334f7f38422761d9b77686ffec97494539088a6423427391faf7b6b564178b30ef9d9aa86feb063c66c4205d8a42b30223a791f3788daf9cfc7f91012e40196b467115692c527cb8a80f629423cbb99579f202314e2a1fb89b5f0d1238efc9e3c357ee607b7b1e5e8ad0de2a6f92b100f40571b2904b5aa7949e653a85d9d4464a515503e21143d34d12166fd538036786353ed87dd6ee709160cb59eda463edc6b907075bc977d0f9cd64dd3e82e86390bbe422598244e75345a60728578d9dded4168451da6efb6f4b8118525310fa3e530a730a20d957ae5fa6ca53f7e663b03b7bce05f8d98d7f21a94e55b372713e523b74a19ba00808022bbcbdef10cea42f3a3a412c5d421b2da14bd29551c5a8fa92e947ebae56a65ab9aaa5378c68bf83f2b8737cfd779a7aa96780e1a07fa49a63900aa08e97acf1998a83e353dbc9732004607607aadb6a4c60af1bec75f49f3d8ad11b0f24d74d2f01038c7975b61571a607c2c0506e9f500e033962bca1a98092a243a7dd185cf1586a31da44aed133475b642e2bedb06f9215259938464dfb35c0bf64a4b24d76ccd6fdf0bb24895b500ae811cd440f3e7852d0d24f033feb3f6e263d449811e0e7649521dffc0261fe5e85cc4fee69b6fb86c1b875245a497ecb7e183afbc0b1be06798fd598d21d6a0634878c134976d79ca0e03d33650bcbbfe06b14e4e24c4c409f68ccc58eb02fea95c178e2806ded5d644fd79b8091d910003da05a76b57a2b18ef808aa0e76e295ff7a75ff3fba81e22ae282d955ebb6b1af3b092741e06ab4277b9d48d80a22c7de0bda1679f0b7249972b70b8894ee9656cab021c62a6a332f8e856456772ba41a88273b36fe63a5a184604a6afa97cd6f186b48aa537b5a2f1a54e8017230fefd22228db1c907e335ed12b0405db79b0e07685fafbac7bda00de19594f5d24ba78002beade8c6c77cec4d86b27690e3889939b698b280a1e3aefd62700a927e10b0e6ed9be50d3660f79d8bbe00164e54d1d5c7b6780571b76a7b3ca17c1650a31cab97a0c090eafdb1e0e52ac2c87a0f52a62127c5db01c05dbc526a581c331aa3ca0fc9bb59787fcb102a28f769de0631e2ce29f17765325d6c46244ef1235b436a6c6cf7cc07853ad595086be3bcfa1c44fbbff4afbbb4b88576c4db56993d69632c5125ac7fc3859cabdd9c16f2473a17f4a04bf3662f5ce7ad1c6510a6df740690b506a4682069e75cdadb678f5a0d7484222fadc24cd3c4b67496749be55bac8e85f154caf75f5c0ce40250a462f5dbeee02b6907fb4163f4e1b4be00b998f897b34289d2fb334918774e670d395533e00fb6bd105672e2b2947504a2d2c6db580c798aca0f4826cb2ae168bf7171925f0329807bf7680298c5d10a606c0f27155df5c92dcaed882936a4ba488941eb07671498f9b6fae01cb97b49c8353079e3299b7ed9c4a5c0f19876fb33bcfe113cfe75e908006e3a03245a0b394342fd421e23e27ecc0870ec5cdd71a8cc7b8cb5f3410da652586a8bd9675e8be0ad8d058480504ad815d6a094f9b62f4531499a4ba667d36ddeae9f7cb301c9633e734b77fa4567bd09b357b5a07158a072c6167d8982ee147a2beed1aaf5ed7b0a79f30829929a7bc879f7bb308a36b09d7e151c3bfed1556265fb3714f65451db5154f33fd93206a69f545054d7899b23d548daab5a76cca32ace4d7949bf98761449f577528512fe1c054b59b3fe20f4660e89309c87569bdf5444ebdea87721b64a99a0fd9ae8e5b43d2512bb6fb9af5a14eff73860080253a81cf3b26636b8d40b0b4b3cf2e56fab7c573dba800b03db77a42cb8a5adb62aee9bb9785baf9b009015badf6d6be5b337a55437b751223150117ddffa8c3d0cc9cef8b769f8007aefa8f68ca13c53391a2d2dfe63ea5bbdd92c0da740c133fcdd9a1eb95c5bb119c745aaa2bd35b4186a015c8dccc0535680f5e57aa7ea007215f0d5bc2318cbad71cac7989fb14a959285282871eb052feab75089dc3ba8121d5f34d967f9c8ae543abd69857170cfc8d47dc3222be007fd811e982aaee889db446d21a9bdda99f854ca8e867d1449dbb03fd554259008632042fab23d71fbc82c40c81e8fe121932f14909917d481ddd5a7c87fe427c09e3c83fe16d54f974f5668267e87afaa5fb001ebdd5d886c1bbd55898ecc8102d8af73906b88d4de639cfc92f5d63c685eb11b1d8c15feada7cece390a60f34103457fc7731cfb338bccd91b13acfb140098d62069119d1708170321165904af0871276e5235c5caa1f556897beffe25c543d01332ba9154ccc2a6a6692bd136b299be45d3c0f01625d49e007635ade3dcaa5757daec195f1d2aa3118d41543de9ff5354a8ce6d5e82a6287e942523bd247d34251e861f051619bb9c7d0acba5219d17943e6fa78dfb8abda738185abf419fe622a340e1c2c9cb0a21d5e2888d7226149356648622389d174d16392cffb71442072e4541ff5a23e83a222d96b5318dd884474345bc46beddd6bd9a8e8beb0e32305899a36da917b04e5146c93a7d2ce1d04993e4374464de735143acb0dc8cde32650c683a4a0ba2938f2b6b5b54b2bcda117f3581c8753019c76f48ec7163f95d846ad7e2b4ae197f99fb6268c81841a1dabcecef6b68e0719be5c511a9f2f38ae4dfcc29d113e7847ba56c89a7ecdae7a2653db308d2a2d9312edd964cc566f888b83f057ab1e3d5c26d69d465fe6bbc74bb18ac4d2fcc0dc2d46b83278a1a2436e260d480951fd7580ae3ddf168f08165f64edf75a265219117e5860cce280b922cc00f59c4b22a7b642cdef0aca49fd69b4c22f2edf0e1901f43713b89065042e289a8ebe8709105c2d7478d4e3e490b02a68e455f94d21a5ab7e78ceec5eb96b5c9c83255473a1f094604b8369dbb744ee54177b3881ff35e2bcc05bb917a575ee33d8d87e56b1696f2081b2976771afc68af919779edd678ebe774d1d5dc6a487feb1c83ebd505291ce7525af4b26910e334335252e387f04822cd8ecd433544bba2b2b4978bf8cce2b2c87ecbeefb01c19b5b9998e09a6b3146780bfd6906e364fca0880e6ab302c0c5a5791b3e845b986bf733bae3f2819c608185073d1015ac9290b43f05b1848cf813bb9bc3e70c81a45da97db230d411da764f9ab841716fe953e6624e372cc2f528fcaa1d559166207fb190066b48bc306e358c45cd477565a1a33048a8c8ad7c694310c861190a919ab548862cb88ab42cab1586a2027c851b175267712383cc0228e324f7c2778f44c424c54263e3537ee682e999ccd5b7a47a5cd1dd227a6fa20630c29d93228507c637352e59335e1a1fd455ab0244354764d99c39f11e4aa56c982c98b50f2613fcc61b5013e2a4c438e5db75040abab818df03949ef573f626b822038b09eb82107c8d330ef9854ba053467a94b65cdf26e1d184001d9eca4965d80cca1bbe144df6f95b64f6cb46a811215bc233d9a7aec040712e1a66ac24f038d08be42f1e58c46971f2e708b5170649dbd9e583e32488e7d7b2826c3d37dfb3c6b9eb6559f27808609b7d95ba4849b4aa9b55757a0137bb2e32f5907638e8694073563a581482da9d6a2672b44dfd5e27936b139711e854f3d1b612d623b3306d612f6581409181228fed6ee0c0aaa4c03c261aa758e8acc69913e9628d83d3361f353200341616008698ea241f32239393bbfaf6d03ec7657da5e69c88b2d0fccb8937104b854df50d498f49942d1c99b8b3bff6d33720235c8b0d40ef1e6d58ab1095a67e8289310d463f3a07563dcc8824782625b3a2162051af081ba3515585afffcb5b119665bcd5f5d24fd4337f724ae6ce8b03c528d09564f0256761f8534b6b1aa6765e3a4fff45fa88e5f47d6eef9440cebd51b67490c27289bafab56d08575ff30cf9edddfe7c6dcbf3b8fb99bd4a89d764929d3f4d6c9fa6085b688dd668687a953d1b3935b2f0cb87eef920bf307cc07a8412619f255bbb79fc153dc518a1bd3017261c0ff9c37f6ddd918ee434c172dc37615cf92208295b4859b2444a01377d04f7cadf44e2a358631404b56fd30099fabf7481e658135e09863f8fbab3fe0bc749c7c4bd24f3667615cb8bed4e8d4b54c8ecbcdb755932a56e6126bd99e182e4e051efd5b8677ccc15d458e258befbde12b22dbfcc9ac22c9c884d7f49f698f9c771feffca59aa8ff7138228500750eaca690d1e8b2833a00530ba75724780c9351fa15751296faf19d909d98493038ee937f22d70228b7d1a77a072a7bbd8e25a94d6a2475f36fe463cf1e4cb8d5ef65387ddc6bc7fde839bf63f42082cbcb73cbbda212a368011950e062f7b80d0a39f7db282291e6154275fa92e4a8554a55333ce6ee6c9ede47c74423759443ddd9f31e74fffd14ac81a3e4a5d79867602adc89d5182cfe34369ae1d7c450e8cca0dc2506dd5588e0755d542c44cb69226a0ab3f4705486270bedf2de6e2a0ef55d0638e600ed085af8cc3c51ff3733e80800cf525484657d4e520619d4fcd501bf44937cfd24113aed12a99f03f729214e32dde266612bcffd9f2f3559811367c90a0dfa899563b37eb8dc93ce886cc8071c14389178244658e0952856a8b1c87960f77609a68d4f2c290e5dee7c419a43ccd4f46d5b28b967970984863de54c9c9ceb60d317d1737ad293ae56029f08e40d406940c8c84b923ace9e31d7d77c4cd592eec3d51b130aa40f537d9c46943640c7374cd28774e6e2d47ba62c12fb7b741644a0ff097f84d4ab753533b40194b444cf64e633fa962013059d64633dcdd5755d23b00e9775b1320af4af661e8f8f4aeb6a8b6d53cea0710a8b96211d78816030d419fb878d721ded053f8fd90015b431761ca4cd2e0af87a94cb0bab6b0d4e7d38ea9558ecbc817e87b95eaf6dc10b7aac272b41cac767c721bea125365498c761949c8adee48869cdec17022c5b4a2d394dfddf5b0c1b7613cad680d99bc800414972d0efa938282e30886ec6cab5d0cd7512aa819829ab99d16af2fc294f80fb8d3235e709507d864fc7a0b9581d04ee874c95c25ea396566d380beacbd6a55626c10ddfd4d0dbbfe9a41d98e6a08c2f8ce29c023fdfe7cb5e2af63ba093bebf53bf9e20ccc88467679edcec05569990bfe00a5f5bd7dcf76c8f7dcb9b9e9eabb408d1a3c1fcfd0450708ceb86c156a1c2e57f7175a1c3ef10f46f658f1f26fd25fe1389c1d6c131af8278916d39ea71b6cdd181e1b41026c02c67b87a5b57f2b7b7ce40b69943290194baa3d4309286eerootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython39-documentation-3.9.15-150300.4.21.1.src.rpmpython39-docpython39-doc(s390-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.14.3ck@cc@cRcOccb?bbb?@b@a@aaan@a}3af@a.a(a'@aa@`@`g@``r```@`N@`/@`"y@`!'`_T__԰_ _v@_u@_P_|\@_m_O@_N7_>e__@__A@___ @_X@_X@_X@_X@_X@_X@_X@_X@_X@^z^z^z^z^)@^^^^@^(@^3^@^'@^H^|@^h^`^>^>^8 @^8 @^ P@^[]f@]f@]]]]W]]c@]]]z@](]]]@]V]w@]i]g@]W@]Ik]6]!]G@\\9\~\@\\@\7\+@\\s\b@\b@\Q\C@\4\4\,\2\\\\&@[[@[^[ @[ͻ[ͻ[$@[ā@[/[[@["@[D[;e@[6@[4ZnZ@Z@ZZԐ@Zx@Z@Z Z Z Zz@ZxG@Zhu@Z`@ZLZ"Z }YYX@Yo@YY@YY@Y@YP@YI@XӸXƉXqX@Xv@W@V@Vm@VVhVCV }@U@U@U@U@UU[%UT@UT@UCjU@TeTBV@T;mcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.comdimstar@opensuse.orgmcepl@suse.commcepl@suse.comschwab@suse.deqydwhotmail@gmail.commcepl@suse.commcepl@suse.commcepl@suse.comdmueller@suse.comdcermak@suse.commcepl@suse.commcepl@suse.comcode@bnavigator.demcepl@suse.commcepl@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comcode@bnavigator.demcepl@suse.commcepl@suse.comdimstar@opensuse.orgmcepl@suse.comdimstar@opensuse.orgmcepl@suse.commcepl@suse.comschwab@suse.decallumjfarmer13@gmail.commcepl@suse.comcallumjfarmer13@gmail.comcallumjfarmer13@gmail.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comdmueller@suse.comandreas.stieger@gmx.decallumjfarmer13@gmail.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.comtchvatal@suse.commliska@suse.czmcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.comstefan.bruens@rwth-aachen.destefan.bruens@rwth-aachen.demcepl@suse.commcepl@suse.commgorse@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.combwiedemann@suse.comtchvatal@suse.commcepl@suse.comguillaume.gardet@opensuse.orgjayvdb@gmail.commcepl@suse.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.commliska@suse.czmcepl@suse.commcepl@suse.commcepl@suse.comjayvdb@gmail.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.comtchvatal@suse.commcepl@suse.comtoddrme2178@gmail.commcepl@suse.comjengelh@inai.demcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commcepl@suse.commcepl@suse.commcepl@suse.comtchvatal@suse.commimi.vx@gmail.comhpj@urpla.netjengelh@inai.detchvatal@suse.comtchvatal@suse.comtchvatal@suse.commimi.vx@gmail.comadam@mizerski.plschwab@suse.debwiedemann@suse.comtchvatal@suse.comtchvatal@suse.comnormand@linux.vnet.ibm.comjmatejek@suse.comnormand@linux.vnet.ibm.comjmatejek@suse.comdimstar@opensuse.orgmimi.vx@gmail.comjmatejek@suse.comdmueller@suse.comvcizek@suse.comjengelh@inai.deschwab@suse.dejmatejek@suse.comkukuk@suse.dejmatejek@suse.comjmatejek@suse.comasn@cryptomilk.orgjmatejek@suse.comjmatejek@suse.combwiedemann@suse.comjmatejek@suse.comjmatejek@suse.comjmatejek@suse.comschwab@suse.detoddrme2178@gmail.comarichardson.kde@gmail.comtoddrme2178@gmail.comtoddrme2178@gmail.comjmatejek@suse.comdimstar@opensuse.orgjmatejek@suse.comfisiu@opensuse.orgdimstar@opensuse.orgmeissner@suse.comschwab@suse.dejmatejek@suse.comjmatejek@suse.commailaender@opensuse.orgrguenther@suse.comp.drouand@gmail.comcrrodriguez@opensuse.orgjmatejek@suse.com- Add CVE-2022-45061-DoS-by-IDNA-decode.patch to avoid CVE-2022-45061 (bsc#1205244) allowing DoS by IDNA decoding extremely long domain names.- Add CVE-2022-42919-loc-priv-mulitproc-forksrv.patch to avoid CVE-2022-42919 (bsc#1204886) avoiding Linux specific local privilege escalation via the multiprocessing forkserver start method.- Add 98437-sphinx.locale._-as-gettext-in-pyspecific.patch to allow building of documentation with the latest Sphinx 5.3.0 (gh#python/cpython#98366).- Update to 3.9.15: - Fix multiplying a list by an integer (list *= int): detect the integer overflow when the new allocated length is close to the maximum size. - Fix a shell code injection vulnerability in the get-remote-certificate.py example script. The script no longer uses a shell to run openssl commands. (originally filed as CVE-2022-37460, later withdrawn) - Fix command line parsing: reject -X int_max_str_digits option with no value (invalid) when the PYTHONINTMAXSTRDIGITS environment variable is set to a valid limit. - When ValueError is raised if an integer is larger than the limit, mention the sys.set_int_max_str_digits() function in the error message. - Update bundled libexpat to 2.4.9- Update to 3.9.14: - (CVE-2020-10735, bsc#1203125). Converting between int and str in bases other than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) now raises a ValueError if the number of digits in string form is above a limit to avoid potential denial of service attacks due to the algorithmic complexity. This new limit can be configured or disabled by environment variable, command line flag, or sys APIs. See the integer string conversion length limitation documentation. The default limit is 4300 digits in string form. - Also other bug fixes: - http.server: Fix an open redirection vulnerability in the HTTP server when an URI path starts with //. Vulnerability discovered, and initial fix proposed, by Hamza Avvan. - Fix contextvars HAMT implementation to handle iteration over deep trees. The bug was discovered and fixed by Eli Libman. See MagicStack/immutables#84 for more details. - Fix binding of unix socket to empty address on Linux to use an available address from the abstract namespace, instead of “0”. - Suppress writing an XML declaration in open files in ElementTree.write() with encoding='unicode' and xml_declaration=None. - Fix the formatting for await x and not x in the operator precedence table when using the help() system. - Fix ensurepip environment isolation for subprocess running pip. - Fix problem with test_ssl test_get_ciphers on systems that require perfect forward secrecy (PFS) ciphers. - test_ssl is now checking for supported TLS version and protocols in more tests. - Removed upstreamed patches: - CVE-2021-28861-double-slash-path.patch - Realign patches: - bpo-31046_ensurepip_honours_prefix.patch - sphinx-update-removed-function.patch- Add patch CVE-2021-28861-double-slash-path.patch: * http.server: Fix an open redirection vulnerability in the HTTP server when an URI path starts with //. (bsc#1202624, CVE-2021-28861)- Switch from %primary_interpreter to prjconf-defined %primary_python (gh#openSUSE/python-rpm-macros#127).- Add CVE-2015-20107-mailcap-unsafe-filenames.patch to avoid CVE-2015-20107 (bsc#1198511, gh#python/cpython#68966), the command injection in the mailcap module. - Fix building of documentation and the universal configuration of the %primary_interpreter. - (bsc#1196784, CVE-2022-25236) Rename patch: support-expat-245.patch to support-expat-CVE-2022-25236-patched.patch and update the patch to detect expat >= 2.4.4 instead of >= 2.4.5 as it was fully patched against CVE-2022-25236.- Update to 3.9.13: - Core and Builtins - gh-92311: Fixed a bug where setting frame.f_lineno to jump over a list comprehension could misbehave or crash. - gh-92112: Fix crash triggered by an evil custom mro() on a metaclass. - gh-92036: Fix a crash in subinterpreters related to the garbage collector. When a subinterpreter is deleted, untrack all objects tracked by its GC. To prevent a crash in deallocator functions expecting objects to be tracked by the GC, leak a strong reference to these objects on purpose, so they are never deleted and their deallocator functions are not called. Patch by Victor Stinner. - gh-91421: Fix a potential integer overflow in _Py_DecodeUTF8Ex. - bpo-46775: Some Windows system error codes(>= 10000) are now mapped into the correct errno and may now raise a subclass of OSError. Patch by Dong-hee Na. - bpo-46962: Classes and functions that unconditionally declared their docstrings ignoring the - -without-doc-strings compilation flag no longer do so. - The classes affected are pickle.PickleBuffer, testcapi.RecursingInfinitelyError, and types.GenericAlias. - The functions affected are 24 methods in ctypes. - Patch by Oleg Iarygin. - bpo-36819: Fix crashes in built-in encoders with error handlers that return position less or equal than the starting position of non-encodable characters. - Library - gh-91581: utcfromtimestamp() no longer attempts to resolve fold in the pure Python implementation, since the fold is never 1 in UTC. In addition to being slightly faster in the common case, this also prevents some errors when the timestamp is close to datetime.min. Patch by Paul Ganssle. - gh-92530: Fix an issue that occurred after interrupting threading.Condition.notify(). - gh-92049: Forbid pickling constants re._constants.SUCCESS etc. Previously, pickling did not fail, but the result could not be unpickled. - bpo-47029: Always close the read end of the pipe used by multiprocessing.Queue after the last write of buffered data to the write end of the pipe to avoid BrokenPipeError at garbage collection and at multiprocessing.Queue.close() calls. Patch by Géry Ogam. - gh-91910: Add missing f prefix to f-strings in error messages from the multiprocessing and asyncio modules. - gh-91810: ElementTree method write() and function tostring() now use the text file’s encoding (“UTF-8” if not available) instead of locale encoding in XML declaration when encoding="unicode" is specified. - gh-91832: Add required attribute to argparse.Action repr output. - gh-91734: Fix OSS audio support on Solaris. - gh-91700: Compilation of regular expression containing a conditional expression (?(group)...) now raises an appropriate re.error if the group number refers to not defined group. Previously an internal RuntimeError was raised. - gh-91676: Fix unittest.IsolatedAsyncioTestCase to shutdown the per test event loop executor before returning from its run method so that a not yet stopped or garbage collected executor state does not persist beyond the test. - gh-90568: Parsing \N escapes of Unicode Named Character Sequences in a regular expression raises now re.error instead of TypeError. - gh-91595: Fix the comparison of character and integer inside Tools.gdb.libpython.write_repr(). Patch by Yu Liu. - gh-90622: Worker processes for concurrent.futures.ProcessPoolExecutor are no longer spawned on demand (a feature added in 3.9) when the multiprocessing context start method is "fork" as that can lead to deadlocks in the child processes due to a fork happening while threads are running. - gh-91575: Update case-insensitive matching in the re module to the latest Unicode version. - gh-91581: Remove an unhandled error case in the C implementation of calls to datetime.fromtimestamp with no time zone (i.e. getting a local time from an epoch timestamp). This should have no user-facing effect other than giving a possibly more accurate error message when called with timestamps that fall on 10000-01-01 in the local time. Patch by Paul Ganssle. - bpo-34480: Fix a bug where _markupbase raised an UnboundLocalError when an invalid keyword was found in marked section. Patch by Marek Suscak. - bpo-27929: Fix asyncio.loop.sock_connect() to only resolve names for socket.AF_INET or socket.AF_INET6 families. Resolution may not make sense for other families, like socket.AF_BLUETOOTH and socket.AF_UNIX. - bpo-43323: Fix errors in the email module if the charset itself contains undecodable/unencodable characters. - bpo-46787: Fix concurrent.futures.ProcessPoolExecutor exception memory leak - bpo-46415: Fix ipaddress.ip_{address,interface,network} raising TypeError instead of ValueError if given invalid tuple as address parameter. - bpo-44911: IsolatedAsyncioTestCase will no longer throw an exception while cancelling leaked tasks. Patch by Bar Harel. - bpo-44493: Add missing terminated NUL in sockaddr_un’s length - This was potentially observable when using non-abstract AF_UNIX datagram sockets to processes written in another programming language. - bpo-42627: Fix incorrect parsing of Windows registry proxy settings - bpo-36073: Raise ProgrammingError instead of segfaulting on recursive usage of cursors in sqlite3 converters. Patch by Sergey Fedoseev. - Documentation - gh-91888: Add a new gh role to the documentation to link to GitHub issues. - gh-91783: Document security issues concerning the use of the function shutil.unpack_archive() - gh-91547: Remove “Undocumented modules” page. - bpo-44347: Clarify the meaning of dirs_exist_ok, a kwarg of shutil.copytree(). - bpo-38668: Update the introduction to documentation for os.path to remove warnings that became irrelevant after the implementations of PEP 383 and PEP 529. - bpo-47138: Pin Jinja to a version compatible with Sphinx version 2.4.4. - bpo-46962: All docstrings in code snippets are now wrapped into PyDoc_STR() to follow the guideline of PEP 7’s Documentation Strings paragraph. Patch by Oleg Iarygin. - bpo-26792: Improve the docstrings of runpy.run_module() and runpy.run_path(). Original patch by Andrew Brezovsky. - bpo-45790: Adjust inaccurate phrasing in Defining Extension Types: Tutorial about the ob_base field and the macros used to access its contents. - bpo-42340: Document that in some circumstances KeyboardInterrupt may cause the code to enter an inconsistent state. Provided a sample workaround to avoid it if needed. - bpo-41233: Link the errnos referenced in Doc/library/exceptions.rst to their respective section in Doc/library/errno.rst, and vice versa. Previously this was only done for EINTR and InterruptedError. Patch by Yan “yyyyyyyan” Orestes. - bpo-38056: Overhaul the Error Handlers documentation in codecs. - bpo-13553: Document tkinter.Tk args. - Tests - gh-91607: Fix test_concurrent_futures to test the correct multiprocessing start method context in several cases where the test logic mixed this up. - bpo-47205: Skip test for sched_getaffinity() and sched_setaffinity() error case on FreeBSD. - bpo-29890: Add tests for ipaddress.IPv4Interface and ipaddress.IPv6Interface construction with tuple arguments. Original patch and tests by louisom. - Build - bpo-47103: Windows PGInstrument builds now copy a required DLL into the output directory, making it easier to run the profile stage of a PGO build. - Windows - bpo-47194: Update zlib to v1.2.12 to resolve CVE-2018-25032. - bpo-46785: Fix race condition between os.stat() and unlinking a file on Windows, by using errors codes returned by FindFirstFileW() when appropriate in win32_xstat_impl. - bpo-40859: Update Windows build to use xz-5.2.5 - Tools/Demos - gh-91583: Fix regression in the code generated by Argument Clinic for functions with the defining_class parameter. - Add patch support-expat-245.patch: * Support Expat >= 2.4.4 (jsc#SLE-21253)- Update to 3.9.12: - bpo-46968: Check for the existence of the “sys/auxv.h” header in faulthandler to avoid compilation problems in systems where this header doesn’t exist. Patch by Pablo Galindo - bpo-47101: hashlib.algorithms_available now lists only algorithms that are provided by activated crypto providers on OpenSSL 3.0. Legacy algorithms are not listed unless the legacy provider has been loaded into the default OSSL context. - bpo-23691: Protect the re.finditer() iterator from re-entering. - bpo-42369: Fix thread safety of zipfile._SharedFile.tell() to avoid a “zipfile.BadZipFile: Bad CRC-32 for file” exception when reading a ZipFile from multiple threads. - bpo-38256: Fix binascii.crc32() when it is compiled to use zlib’c crc32 to work properly on inputs 4+GiB in length instead of returning the wrong result. The workaround prior to this was to always feed the function data in increments smaller than 4GiB or to just call the zlib module function. - bpo-39394: A warning about inline flags not at the start of the regular expression now contains the position of the flag. - bpo-47061: Deprecate the various modules listed by PEP 594: - aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, uu, xdrlib - bpo-2604: Fix bug where doctests using globals would fail when run multiple times. - bpo-45997: Fix asyncio.Semaphore re-aquiring FIFO order. - bpo-47022: The asynchat, asyncore and smtpd modules have been deprecated since at least Python 3.6. Their documentation has now been updated to note they will removed in Python 3.12 (PEP 594). - bpo-46421: Fix a unittest issue where if the command was invoked as python -m unittest and the filename(s) began with a dot (.), a ValueError is returned. - bpo-40296: Fix supporting generic aliases in pydoc. - bpo-14156: argparse.FileType now supports an argument of ‘-’ in binary mode, returning the .buffer attribute of sys.stdin/sys.stdout as appropriate. Modes including ‘x’ and ‘a’ are treated equivalently to ‘w’ when argument is ‘-’. Patch contributed by Josh Rosenberg - Update to 3.9.11: - bpo-46852: Rename the private undocumented float.__set_format__() method to float.__setformat__() to fix a typo introduced in Python 3.7. The method is only used by test_float. Patch by Victor Stinner. - bpo-46794: Bump up the libexpat version into 2.4.6 - bpo-46762: Fix an assert failure in debug builds when a ‘<’, ‘>’, or ‘=’ is the last character in an f-string that’s missing a closing right brace. - bpo-46732: Correct the docstring for the __bool__() method. Patch by Jelle Zijlstra. - bpo-40479: Add a missing call to va_end() in Modules/_hashopenssl.c. - bpo-46615: When iterating over sets internally in setobject.c, acquire strong references to the resulting items from the set. This prevents crashes in corner-cases of various set operations where the set gets mutated. - bpo-43721: Fix docstrings of getter, setter, and deleter to clarify that they create a new copy of the property. - bpo-46503: Fix an assert when parsing some invalid N escape sequences in f-strings. - bpo-46417: Fix a race condition on setting a type __bases__ attribute: the internal function add_subclass() now gets the PyTypeObject.tp_subclasses member after calling PyWeakref_NewRef() which can trigger a garbage collection which can indirectly modify PyTypeObject.tp_subclasses. Patch by Victor Stinner. - bpo-46383: Fix invalid signature of _zoneinfo’s module_free function to resolve a crash on wasm32-emscripten platform. - bpo-43253: Fix a crash when closing transports where the underlying socket handle is already invalid on the Proactor event loop. - bpo-47004: Apply bugfixes from importlib_metadata 4.11.3, including bugfix for EntryPoint.extras, which was returning match objects and not the extras strings. - bpo-46985: Upgrade pip wheel bundled with ensurepip (pip 22.0.4, bnc#1186819, CVE-2021-3572) - bpo-46968: faulthandler: On Linux 5.14 and newer, dynamically determine size of signal handler stack size CPython allocates using getauxval(AT_MINSIGSTKSZ). This changes allows for Python extension’s request to Linux kernel to use AMX_TILE instruction set on Sapphire Rapids Xeon processor to succeed, unblocking use of the ISA in frameworks. - bpo-46955: Expose asyncio.base_events.Server as asyncio.Server. Patch by Stefan Zabka. - bpo-46932: Update bundled libexpat to 2.4.7 - bpo-25707: Fixed a file leak in xml.etree.ElementTree.iterparse() when the iterator is not exhausted. Patch by Jacob Walls. - bpo-44886: Inherit asyncio proactor datagram transport from asyncio.DatagramTransport. - bpo-46827: Support UDP sockets in asyncio.loop.sock_connect() for selector-based event loops. Patch by Thomas Grainger. - bpo-46811: Make test suite support Expat >=2.4.5 - bpo-46252: Raise TypeError if ssl.SSLSocket is passed to transport-based APIs. - bpo-46784: Fix libexpat symbols collisions with user dynamically loaded or statically linked libexpat in embedded Python. - bpo-39327: shutil.rmtree() can now work with VirtualBox shared folders when running from the guest operating-system. - bpo-46756: Fix a bug in urllib.request.HTTPPasswordMgr.find_user_password() and urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated() which allowed to bypass authorization. For example, access to URI example.org/foobar was allowed if the user was authorized for URI example.org/foo. - bpo-45863: When the tarfile module creates a pax format archive, it will put an integer representation of timestamps in the ustar header (if possible) for the benefit of older unarchivers, in addition to the existing full-precision timestamps in the pax extended header. - bpo-46672: Fix NameError in asyncio.gather() when initial type check fails. - bpo-45948: Fixed a discrepancy in the C implementation of the xml.etree.ElementTree module. Now, instantiating an xml.etree.ElementTree.XMLParser with a target=None keyword provides a default xml.etree.ElementTree.TreeBuilder target as the Python implementation does. - bpo-46591: Make the IDLE doc URL on the About IDLE dialog clickable. - bpo-46400: expat: Update libexpat from 2.4.1 to 2.4.4 - bpo-46487: Add the get_write_buffer_limits method to asyncio.transports.WriteTransport and to the SSL transport. - bpo-46539: In typing.get_type_hints(), support evaluating stringified ClassVar and Final annotations inside Annotated. Patch by Gregory Beauregard. - bpo-46491: Allow typing.Annotated to wrap typing.Final and typing.ClassVar. Patch by Gregory Beauregard. - bpo-46436: Fix command-line option -d/--directory in module http.server which is ignored when combined with command-line option --cgi. Patch by Géry Ogam. - bpo-41403: Make mock.patch() raise a TypeError with a relevant error message on invalid arg. Previously it allowed a cryptic AttributeError to escape. - bpo-46474: In importlib.metadata.EntryPoint.pattern, avoid potential REDoS by limiting ambiguity in consecutive whitespace. - bpo-46469: asyncio generic classes now return types.GenericAlias in __class_getitem__ instead of the same class. - bpo-46434: pdb now gracefully handles help when __doc__ is missing, for example when run with pregenerated optimized .pyc files. - bpo-46333: The __eq__() and __hash__() methods of typing.ForwardRef now honor the module parameter of typing.ForwardRef. Forward references from different modules are now differentiated. - bpo-43118: Fix a bug in inspect.signature() that was causing it to fail on some subclasses of classes with a __text_signature__ referencing module globals. Patch by Weipeng Hong. - bpo-21987: Fix an issue with tarfile.TarFile.getmember() getting a directory name with a trailing slash. - bpo-20392: Fix inconsistency with uppercase file extensions in MimeTypes.guess_type(). Patch by Kumar Aditya. - bpo-46080: Fix exception in argparse help text generation if a argparse.BooleanOptionalAction argument’s default is argparse.SUPPRESS and it has help specified. Patch by Felix Fontein. - bpo-44439: Fix .write() method of a member file in ZipFile, when the input data is an object that supports the buffer protocol, the file length may be wrong. - bpo-45703: When a namespace package is imported before another module from the same namespace is created/installed in a different sys.path location while the program is running, calling the importlib.invalidate_caches() function will now also guarantee the new module is noticed. - bpo-24959: Fix bug where unittest sometimes drops frames from tracebacks of exceptions raised in tests. - bpo-46463: Fixes escape4chm.py script used when building the CHM documentation file - bpo-46913: Fix test_faulthandler.test_sigfpe() if Python is built with undefined behavior sanitizer (UBSAN): disable UBSAN on the faulthandler_sigfpe() function. Patch by Victor Stinner. - bpo-46708: Prevent default asyncio event loop policy modification warning after test_asyncio execution. - bpo-46616: Ensures test_importlib.test_windows cleans up registry keys after completion. - bpo-44359: test_ftplib now silently ignores socket errors to prevent logging unhandled threading exceptions. Patch by Victor Stinner. - bpo-46542: Fix a Python crash in test_lib2to3 when using Python built in debug mode: limit the recursion limit. Patch by Victor Stinner. - bpo-46576: test_peg_generator now disables compiler optimization when testing compilation of its own C extensions to significantly speed up the testing on non-debug builds of CPython. - bpo-46542: Fix test_json tests checking for RecursionError: modify these tests to use support.infinite_recursion(). Patch by Victor Stinner. - bpo-13886: Skip test_builtin PTY tests on non-ASCII characters if the readline module is loaded. The readline module changes input() behavior, but test_builtin is not intented to test the readline module. Patch by Victor Stinner. - bpo-38472: Fix GCC detection in setup.py when cross-compiling. The C compiler is now run with LC_ALL=C. Previously, the detection failed with a German locale. - bpo-46513: configure no longer uses AC_C_CHAR_UNSIGNED macro and pyconfig.h no longer defines reserved symbol __CHAR_UNSIGNED__. - bpo-45925: Update Windows installer to use SQLite 3.37.2. - bpo-45296: Clarify close, quit, and exit in IDLE. In the File menu, ‘Close’ and ‘Exit’ are now ‘Close Window’ (the current one) and ‘Exit’ is now ‘Exit IDLE’ (by closing all windows). In Shell, ‘quit()’ and ‘exit()’ mean ‘close Shell’. If there are no other windows, this also exits IDLE. - bpo-45447: Apply IDLE syntax highlighting to pyi files. Patch by Alex Waygood and Terry Jan Reedy. - Removed upstreamed patches: - support-expat-245.patch- Add patch support-expat-245.patch: * Support Expat >= 2.4.5- Update to 3.9.10: Bugfix-only release- Remove shebangs from from python-base libraries in _libdir (bsc#1193179, bsc#1192249). - Readjust patches: - bpo-31046_ensurepip_honours_prefix.patch - decimal.patch - python-3.3.0b1-fix_date_time_compiler.patch- Update to 3.9.9: * Core and Builtins + bpo-30570: Fixed a crash in issubclass() from infinite recursion when searching pathological __bases__ tuples. + bpo-45494: Fix parser crash when reporting errors involving invalid continuation characters. Patch by Pablo Galindo. + bpo-45385: Fix reference leak from descr_check. Patch by Dong-hee Na. + bpo-45167: Fix deepcopying of types.GenericAlias objects. + bpo-44219: Release the GIL while performing isatty system calls on arbitrary file descriptors. In particular, this affects os.isatty(), os.device_encoding() and io.TextIOWrapper. By extension, io.open() in text mode is also affected. This change solves a deadlock in os.isatty(). Patch by Vincent Michel in bpo-44219. + bpo-44959: Added fallback to extension modules with ‘.sl’ suffix on HP-UX + bpo-44050: Extensions that indicate they use global state (by setting m_size to -1) can again be used in multiple interpreters. This reverts to behavior of Python 3.8. + bpo-45121: Fix issue where Protocol.__init__ raises RecursionError when it’s called directly or via super(). Patch provided by Yurii Karabas. + bpo-45083: When the interpreter renders an exception, its name now has a complete qualname. Previously only the class name was concatenated to the module name, which sometimes resulted in an incorrect full name being displayed. + bpo-45738: Fix computation of error location for invalid continuation characters in the parser. Patch by Pablo Galindo. + Library + bpo-45678: Fix bug in Python 3.9 that meant functools.singledispatchmethod failed to properly wrap the attributes of the target method. Patch by Alex Waygood. + bpo-45679: Fix caching of multi-value typing.Literal. Literal[True, 2] is no longer equal to Literal[1, 2]. + bpo-45438: Fix typing.Signature string representation for generic builtin types. + bpo-45581: sqlite3.connect() now correctly raises MemoryError if the underlying SQLite API signals memory error. Patch by Erlend E. Aasland. + bpo-39679: Fix bug in functools.singledispatchmethod that caused it to fail when attempting to register a classmethod() or staticmethod() using type annotations. Patch contributed by Alex Waygood. + bpo-45515: Add references to zoneinfo in the datetime documentation, mostly replacing outdated references to dateutil.tz. Change by Paul Ganssle. + bpo-45467: Fix incremental decoder and stream reader in the “raw-unicode-escape” codec. Previously they failed if the escape sequence was split. + bpo-45461: Fix incremental decoder and stream reader in the “unicode-escape” codec. Previously they failed if the escape sequence was split. + bpo-45239: Fixed email.utils.parsedate_tz() crashing with UnboundLocalError on certain invalid input instead of returning None. Patch by Ben Hoyt. + bpo-44904: Fix bug in the doctest module that caused it to fail if a docstring included an example with a classmethod property. Patch by Alex Waygood. + bpo-45406: Make inspect.getmodule() catch FileNotFoundError raised by :’func:inspect.getabsfile, and return None to indicate that the module could not be determined. + bpo-45262: Prevent use-after-free in asyncio. Make sure the cached running loop holder gets cleared on dealloc to prevent use-after-free in get_running_loop + bpo-45386: Make xmlrpc.client more robust to C runtimes where the underlying C strftime function results in a ValueError when testing for year formatting options. + bpo-45371: Fix clang rpath issue in distutils. The UnixCCompiler now uses correct clang option to add a runtime library directory (rpath) to a shared library. + bpo-20028: Improve error message of csv.Dialect when initializing. Patch by Vajrasky Kok and Dong-hee Na. + bpo-45343: Update bundled pip to 21.2.4 and setuptools to 58.1.0 + bpo-41710: On Unix, if the sem_clockwait() function is available in the C library (glibc 2.30 and newer), the threading.Lock.acquire() method now uses the monotonic clock (time.CLOCK_MONOTONIC) for the timeout, rather than using the system clock (time.CLOCK_REALTIME), to not be affected by system clock changes. Patch by Victor Stinner. + bpo-45328: Fixed http.client.HTTPConnection to work properly in OSs that don’t support the TCP_NODELAY socket option. + bpo-1596321: Fix the threading._shutdown() function when the threading module was imported first from a thread different than the main thread: no longer log an error at Python exit. + bpo-45274: Fix a race condition in the Thread.join() method of the threading module. If the function is interrupted by a signal and the signal handler raises an exception, make sure that the thread remains in a consistent state to prevent a deadlock. Patch by Victor Stinner. + bpo-45238: Fix unittest.IsolatedAsyncioTestCase.debug(): it runs now asynchronous methods and callbacks. + bpo-36674: unittest.TestCase.debug() raises now a unittest.SkipTest if the class or the test method are decorated with the skipping decorator. + bpo-45235: Fix an issue where argparse would not preserve values in a provided namespace when using a subparser with defaults. + bpo-45234: Fixed a regression in copyfile(), copy(), copy2() raising FileNotFoundError when source is a directory, which should raise IsADirectoryError + bpo-45228: Fix stack buffer overflow in parsing J1939 network address. + bpo-45192: Fix the tempfile._infer_return_type function so that the dir argument of the tempfile functions accepts an object implementing the os.PathLike protocol. + bpo-45160: When tracing a tkinter variable used by a ttk OptionMenu, callbacks are no longer made twice. + bpo-35474: Calling mimetypes.guess_all_extensions() with strict=False no longer affects the result of the following call with strict=True. Also, mutating the returned list no longer affects the global state. + bpo-45166: typing.get_type_hints() now works with Final wrapped in ForwardRef. + bpo-45097: Remove deprecation warnings about the loop argument in asyncio incorrectly emitted in cases when the user does not pass the loop argument. + bpo-45081: Fix issue when dataclasses that inherit from typing.Protocol subclasses have wrong __init__. Patch provided by Yurii Karabas. + bpo-24444: Fixed an error raised in argparse help display when help for an option is set to 1+ blank spaces or when choices arg is an empty container. + bpo-45021: Fix a potential deadlock at shutdown of forked children when using concurrent.futures module + bpo-45030: Fix integer overflow in pickling and copying the range iterator. + bpo-39039: tarfile.open raises ReadError when a zlib error occurs during file extraction. + bpo-44594: Fix an edge case of ExitStack and AsyncExitStack exception chaining. They will now match with block behavior when __context__ is explicitly set to None when the exception is in flight. * Documentation + bpo-45726: Improve documentation for functools.singledispatch() and functools.singledispatchmethod. + bpo-45680: Amend the docs on GenericAlias objects to clarify that non-container classes can also implement __class_getitem__. Patch contributed by Alex Waygood. + bpo-45655: Add a new “relevant PEPs” section to the top of the documentation for the typing module. Patch by Alex Waygood. + bpo-45604: Add level argument to multiprocessing.log_to_stderr function docs. + bpo-45464: Mention in the documentation of Built-in Exceptions that inheriting from multiple exception types in a single subclass is not recommended due to possible memory layout incompatibility. + bpo-45449: Add note about PEP 585 in collections.abc. + bpo-45516: Add protocol description to the importlib.abc.Traversable documentation. + bpo-20692: Add Programming FAQ entry explaining that int literal attribute access requires either a space after or parentheses around the literal. + bpo-45216: Remove extra documentation listing methods in difflib. It was rendering twice in pydoc and was outdated in some places. + bpo-45772: socket.socket documentation is corrected to a class from a function. + bpo-45392: Update the docstring of the type built-in to remove a redundant line and to mention keyword arguments for the constructor. * Tests + bpo-45578: Add tests for dis.distb() + bpo-45577: Add subtests for all pickle protocols in test_zoneinfo. + bpo-43592: test.libregrtest now raises the soft resource limit for the maximum number of file descriptors when the default is too low for our test suite as was often the case on macOS. + bpo-40173: Fix test.support.import_helper.import_fresh_module(). + bpo-45280: Add a test case for empty typing.NamedTuple. + bpo-45269: Cover case when invalid markers type is supplied to c_make_encoder. + bpo-45209: Fix UserWarning: resource_tracker warning in _test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination + bpo-45195: Fix test_readline.test_nonascii(): sometimes, the newline character is not written at the end, so don’t expect it in the output. Patch by Victor Stinner. + bpo-45156: Fixes infinite loop on unittest.mock.seal() of mocks created by create_autospec(). + bpo-45042: Fixes that test classes decorated with @hashlib_helper.requires_hashdigest were skipped all the time. + bpo-45235: Reverted an argparse bugfix that caused regression in the handling of default arguments for subparsers. This prevented leaf level arguments from taking precedence over root level arguments. + bpo-45765: In importlib.metadata, fix distribution discovery for an empty path. + bpo-45644: In-place JSON file formatting using python3 -m json.tool infile infile now works correctly, previously it left the file empty. Patch by Chris Wesseling. * Build + bpo-43158: setup.py now uses values from configure script to build the _uuid extension module. Configure now detects util-linux’s libuuid, too. + bpo-45571: Modules/Setup now use PY_CFLAGS_NODIST instead of PY_CFLAGS to compile shared modules. + bpo-45532: Update sys.version to use main as fallback information. Patch by Jeong YunWon. + bpo-45405: Prevent internal configure error when running configure with recent versions of non-Apple clang. Patch by David Bohman. + bpo-45220: Avoid building with the Windows 11 SDK previews automatically. This may be overridden by setting the DefaultWindowsSDKVersion environment variable before building. * C API + bpo-44687: BufferedReader.peek() no longer raises ValueError when the entire file has already been buffered. + bpo-44751: Remove crypt.h include from the public Python.h header. - Drop patch incorrect-deprecation-warn-asyncio.patch, fix included.- rpm-build-python dependency is available on the current Factory, not with SLE.- Add incorrect-deprecation-warn-asyncio.patch to fix bpo#45097 (from gh#python/cpython#28153) to remove incorrect deprecation warnings in asyncio.- BuildRequire rpm-build-python: The provider to inject python(abi) has been moved there. rpm-build pulls rpm-build-python automatically in when building anything against python3-base, but this implies that the initial build of python3-base does not trigger the automatic installation.- Update to 3.9.7: - Security - Replaced usage of tempfile.mktemp() with TemporaryDirectory to avoid a potential race condition. - Add auditing events to the marshal module, and stop raising code.__init__ events for every unmarshalled code object. Directly instantiated code objects will continue to raise an event, and audit event handlers should inspect or collect the raw marshal data. This reduces a significant performance overhead when loading from .pyc files. - Made the internal putcmd function in smtplib sanitize input for presence of \r and \n characters to avoid (unlikely) command injection. - Core and Builtins - Fixed pickling of range iterators that iterated for over 2**32 times. - Fix a race in WeakKeyDictionary, WeakValueDictionary and WeakSet when two threads attempt to commit the last pending removal. This fixes asyncio.create_task and fixes a data loss in asyncio.run where shutdown_asyncgens is not run - Fixed a corner case bug where the result of float.fromhex('0x.8p-1074') was rounded the wrong way. - Refine the syntax error for trailing commas in import statements. Patch by Pablo Galindo. - Restore behaviour of complex exponentiation with integer-valued exponent of type float or complex. - Correct the ast locations of f-strings with format specs and repeated expressions. Patch by Pablo Galindo - Use new trashcan macros (Py_TRASHCAN_BEGIN/END) in frameobject.c instead of the old ones (Py_TRASHCAN_SAFE_BEGIN/END). - Fix segmentation fault with deep recursion when cleaning method objects. Patch by Augusto Goulart and Pablo Galindo. - Fix bug where PyErr_SetObject hangs when the current exception has a cycle in its context chain. - Fix reference leaks in the error paths of update_bases() and __build_class__. Patch by Pablo Galindo. - Fix undefined behaviour in complex object exponentiation. - Remove uses of PyObject_GC_Del() in error path when initializing types.GenericAlias. - Remove the pass-through for hash() of weakref.proxy objects to prevent unintended consequences when the original referred object dies while the proxy is part of a hashable object. Patch by Pablo Galindo. - Fix ltrace functionality when exceptions are raised. Patch by Pablo Galindo - Fix a crash at Python exit when a deallocator function removes the last strong reference to a heap type. Patch by Victor Stinner. - Fix crash when using passing a non-exception to a generator’s throw() method. Patch by Noah Oxer - Library - run() now always return a TestResult instance. Previously it returned None if the test class or method was decorated with a skipping decorator. - Fix bugs in cleaning up classes and modules in unittest: - Functions registered with addModuleCleanup() were not called unless the user defines tearDownModule() in their test module. - Functions registered with addClassCleanup() were not called if tearDownClass is set to None. - Buffering in TestResult did not work with functions registered with addClassCleanup() and addModuleCleanup(). - Errors in functions registered with addClassCleanup() and addModuleCleanup() were not handled correctly in buffered and debug modes. - Errors in setUpModule() and functions registered with addModuleCleanup() were reported in wrong order. - And several lesser bugs. - Made email date parsing more robust against malformed input, namely a whitespace-only Date: header. Patch by Wouter Bolsterlee. - Fix a crash in the signal handler of the faulthandler module: no longer modify the reference count of frame objects. Patch by Victor Stinner. - Method stopTestRun() is now always called in pair with method startTestRun() for TestResult objects implicitly created in run(). Previously it was not called for test methods and classes decorated with a skipping decorator. - argparse.BooleanOptionalAction’s default value is no longer printed twice when used with argparse.ArgumentDefaultsHelpFormatter. - Upgrade bundled pip to 21.2.3 and setuptools to 57.4.0 - Fix the os.set_inheritable() function on FreeBSD 14 for file descriptor opened with the O_PATH flag: ignore the EBADF error on ioctl(), fallback on the fcntl() implementation. Patch by Victor Stinner. - The @functools.total_ordering() decorator now works with metaclasses. - sqlite3 user-defined functions and aggregators returning strings with embedded NUL characters are no longer truncated. Patch by Erlend E. Aasland. - Always show loop= arg deprecations in asyncio.gather() and asyncio.sleep() - Non-protocol subclasses of typing.Protocol ignore now the __init__ method inherited from protocol base classes. - The tokenize.tokenize() doesn’t incorrectly generate a NEWLINE token if the source doesn’t end with a new line character but the last line is a comment, as the function is already generating a NL token. Patch by Pablo Galindo - Fix http.client.HTTPSConnection fails to download >2GiB data. - rcompleter does not call getattr() on property objects to avoid the side-effect of evaluating the corresponding method. - weakref.proxy objects referencing non-iterators now raise TypeError rather than dereferencing the null tp_iternext slot and crashing. - The implementation of collections.abc.Set._hash() now matches that of frozenset.__hash__(). - Fixed issue in compileall.compile_file() when sys.stdout is redirected. Patch by Stefan Hölzl. - Give priority to using the current class constructor in inspect.signature(). Patch by Weipeng Hong. - Fix memory leak in _tkinter._flatten() if it is called with a sequence or set, but not list or tuple. - Update shutil.copyfile() to raise FileNotFoundError instead of confusing IsADirectoryError when a path ending with a os.path.sep does not exist; shutil.copy() and shutil.copy2() are also affected. - handle StopIteration subclass raised from @contextlib.contextmanager generator - Make the implementation consistency of indexOf() between C and Python versions. Patch by Dong-hee Na. - Fixes TypedDict to work with typing.get_type_hints() and postponed evaluation of annotations across modules. - Fix bug with pdb’s handling of import error due to a package which does not have a __main__ module - Fixed an exception thrown while parsing a malformed multipart email by email.message.EmailMessage. - pathlib.PureWindowsPath.is_reserved() now identifies a greater range of reserved filenames, including those with trailing spaces or colons. - Handle exceptions from parsing the arg of pdb’s run/restart command. - The sqlite3 context manager now performs a rollback (thus releasing the database lock) if commit failed. Patch by Luca Citi and Erlend E. Aasland. - Improved string handling for sqlite3 user-defined functions and aggregates: - It is now possible to pass strings with embedded null characters to UDFs - Conversion failures now correctly raise MemoryError - Patch by Erlend E. Aasland. - Handle RecursionError in TracebackException’s constructor, so that long exceptions chains are truncated instead of causing traceback formatting to fail. - Fix email.message.EmailMessage.set_content() when called with binary data and 7bit content transfer encoding. - The compresslevel and preset keyword arguments of tarfile.open() are now both documented and tested. - Fixed a Y2k38 bug in the compileall module where it would fail to compile files with a modification time after the year 2038. - Fix test___all__ on platforms lacking a shared memory implementation. - Pass multiprocessing BaseProxy argument manager_owned through AutoProxy. - email.utils.getaddresses() now accepts email.header.Header objects along with string values. Patch by Zackery Spytz. - lib2to3 now recognizes async generators everywhere. - Fix TypeError when required subparsers without dest do not receive arguments. Patch by Anthony Sottile. - Documentation - Removed the othergui.rst file, any references to it, and the list of GUI frameworks in the FAQ. In their place I’ve added links to the Python Wiki page on GUI frameworks. - Update the definition of __future__ in the glossary by replacing the confusing word “pseudo-module” with a more accurate description. - Add typical examples to os.path.splitext docs - Clarify that shutil.make_archive() is not thread-safe due to reliance on changing the current working directory. - Update of three expired hyperlinks in Doc/distributing/index.rst: “Project structure”, “Building and packaging the project”, and “Uploading the project to the Python Packaging Index”. - Updated the docstring and docs of filecmp.cmp() to be more accurate and less confusing especially in respect to shallow arg. - Match the docstring and python implementation of countOf() to the behavior of its c implementation. - List all kwargs for textwrap.wrap(), textwrap.fill(), and textwrap.shorten(). Now, there are nav links to attributes of TextWrap, which makes navigation much easier while minimizing duplication in the documentation. - Clarify that atexit uses equality comparisons internally. - Documentation of csv.Dialect is more descriptive. - Fix documentation for the return type of sysconfig.get_path(). - Add a “Security Considerations” index which links to standard library modules that have explicitly documented security considerations. - Remove the unqualified claim that tkinter is threadsafe. It has not been true for several years and likely never was. An explanation of what is true may be added later, after more discussion, and possibly after patching _tkinter.c, - Tests - Add calls of gc.collect() in tests to support PyPy. - Made tests relying on the _asyncio C extension module optional to allow running on alternative Python implementations. Patch by Serhiy Storchaka. - Fix auto history tests of test_readline: sometimes, the newline character is not written at the end, so don’t expect it in the output. - Add ability to wholesale silence DeprecationWarnings while running the regression test suite. - Notify users running test_decimal regression tests on macOS of potential harmless “malloc can’t allocate region” messages spewed by test_decimal. - Fixed floating point precision issue in turtle tests. - Regression tests, when run with -w, are now re-running only the affected test methods instead of re-running the entire test file. - Add test for nested queues when using multiprocessing shared objects AutoProxy[Queue] inside ListProxy and DictProxy- Add decimal.patch to add building with --with-system-libmpdec option (bsc#1189356).- test_faulthandler is still problematic under qemu linux-user emulation, disable it there - Reenable profileopt with qemu emulation, test_faulthandler is no longer run during profiling- Update to 3.9.6: * Security - bpo-44022 (bsc#1189241, CVE-2021-3737): http.client now avoids infinitely reading potential HTTP headers after a 100 Continue status response from the server. * Core and Builtins - bpo-44168: Fix error message in the parser involving keyword arguments with invalid expressions. Patch by Pablo Galindo - bpo-44114: Fix incorrect dictkeys_reversed and dictitems_reversed function signatures in C code, which broke webassembly builds. - bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules, which was introduced in 3.9.5. - bpo-28146: Fix a confusing error message in str.format(). - bpo-11105: When compiling ast.AST objects with recursive references through compile(), the interpreter doesn’t crash anymore instead it raises a RecursionError. * Library - bpo-43972: When http.server.SimpleHTTPRequestHandler sends a 301 (Moved Permanently) for a directory path not ending with /, add a Content-Length: 0 header. This improves the behavior for certain clients. - bpo-43776: When subprocess.Popen args are provided as a string or as pathlib.Path, the Popen instance repr now shows the right thing. - bpo-43318: Fix a bug where pdb does not always echo cleared breakpoints. - bpo-43295: datetime.datetime.strptime() now raises ValueError instead of IndexError when matching 'z' with the %z format specifier. - bpo-37022: pdb now displays exceptions from repr() with its p and pp commands. * IDLE - bpo-33962: Move the indent space setting from the Font tab to the new Windows tab. Patch by Mark Roseman and Terry Jan Reedy. - bpo-40468: Split the settings dialog General tab into Windows and Shell/ED tabs. Move help sources, which extend the Help menu, to the Extensions tab. Make space for new options and shorten the dialog. The latter makes the dialog better fit small screens. - bpo-41611: Avoid uncaught exceptions in AutoCompleteWindow.winconfig_event(). - bpo-41611: Fix IDLE sometimes freezing upon tab-completion on macOS. * Tools/Demos - bpo-44074: Make patchcheck automatically detect the correct base branch name (previously it was hardcoded to ‘master’) - Upstreamed patches were removed: - bpo44426-complex-keyword-sphinx.patch - Refreshed patches: - subprocess-raise-timeout.patch- Use versioned python-Sphinx to avoid dependency on other version of Python (bsc#1183858).- Add bpo44426-complex-keyword-sphinx.patch allowing generating documentation with Sphinx 4 (bpo#44426).- Revert previous skip over test_capi - Add skip-test_pyobject_freed_is_freed.patch to skip failing test on SLE-15.- allow build with Sphinx >= 3.x- Exclude test_capi on Leap (test fails there)- Stop providing "python" symbol (bsc#1185588), which means python2 currently.- Update to 3.9.5: * Security - bpo-43434: Creating a sqlite3.Connection object now also produces a sqlite3.connect auditing event. Previously this event was only produced by sqlite3.connect() calls. Patch by Erlend E. Aasland. - bpo-43882: The presence of newline or tab characters in parts of a URL could allow some forms of attacks. - Following the controlling specification for URLs defined by WHATWG urllib.parse() now removes ASCII newlines and tabs from URLs, preventing such attacks. - bpo-43472: Ensures interpreter-level audit hooks receive the cpython.PyInterpreterState_New event when called through the _xxsubinterpreters module. - bpo-36384 (bsc#1185706, CVE-2021-29921): ipaddress module no longer accepts any leading zeros in IPv4 address strings. Leading zeros are ambiguous and interpreted as octal notation by some libraries. For example the legacy function socket.inet_aton() treats leading zeros as octal notatation. glibc implementation of modern inet_pton() does not accept any leading zeros. For a while the ipaddress module used to accept ambiguous leading zeros. - bpo-43075 (CVE-2021-3733, bsc#1189287): Fix Regular Expression Denial of Service (ReDoS) vulnerability in urllib.request.AbstractBasicAuthHandler. The ReDoS-vulnerable regex has quadratic worst-case complexity and it allows cause a denial of service when identifying crafted invalid RFCs. This ReDoS issue is on the client side and needs remote attackers to control the HTTP server. - bpo-42800: Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. * Core and Builtins - bpo-43105: Importlib now resolves relative paths when creating module spec objects from file locations. - bpo-42924: Fix bytearray repetition incorrectly copying data from the start of the buffer, even if the data is offset within the buffer (e.g. after reassigning a slice at the start of the bytearray to a shorter byte string). * Library - bpo-43993: Update bundled pip to 21.1.1. - bpo-43937: Fixed the turtle module working with non-default root window. - bpo-43930: Update bundled pip to 21.1 and setuptools to 56.0.0 - bpo-43920: OpenSSL 3.0.0: load_verify_locations() now returns a consistent error message when cadata contains no valid certificate. - bpo-43607: urllib can now convert Windows paths with \\?\ prefixes into URL paths. - bpo-43284: platform.win32_ver derives the windows version from sys.getwindowsversion().platform_version which in turn derives the version from kernel32.dll (which can be of a different version than Windows itself). Therefore change the platform.win32_ver to determine the version using the platform module’s _syscmd_ver private function to return an accurate version. - bpo-42248: [Enum] ensure exceptions raised in _missing__ are released - bpo-43799: OpenSSL 3.0.0: define OPENSSL_API_COMPAT 1.1.1 to suppress deprecation warnings. Python requires OpenSSL 1.1.1 APIs. - bpo-43794: Add ssl.OP_IGNORE_UNEXPECTED_EOF constants (OpenSSL 3.0.0) - bpo-43789: OpenSSL 3.0.0: Don’t call the password callback function a second time when first call has signaled an error condition. - bpo-43788: The header files for ssl error codes are now OpenSSL version-specific. Exceptions will now show correct reason and library codes. The make_ssl_data.py script has been rewritten to use OpenSSL’s text file with error codes. - bpo-43655: tkinter dialog windows are now recognized as dialogs by window managers on macOS and X Window. - bpo-43534: turtle.textinput() and turtle.numinput() create now a transient window working on behalf of the canvas window. - bpo-43522: Fix problem with hostname_checks_common_name. OpenSSL does not copy hostflags from struct SSL_CTX to struct SSL. - bpo-42967: Allow bytes separator argument in urllib.parse.parse_qs and urllib.parse.parse_qsl when parsing str query strings. Previously, this raised a TypeError. - bpo-43176: Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. - bpo-41735: Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. - bpo-36470: Fix dataclasses with InitVars and replace(). Patch by Claudiu Popa. - bpo-32745: Fix a regression in the handling of ctypes’ ctypes.c_wchar_p type: embedded null characters would cause a ValueError to be raised. Patch by Zackery Spytz. * Documentation - bpo-43959: The documentation on the PyContextVar C-API was clarified. - bpo-43938: Update dataclasses documentation to express that FrozenInstanceError is derived from AttributeError. - bpo-43755: Update documentation to reflect that unparenthesized lambda expressions can no longer be the expression part in an if clause in comprehensions and generator expressions since Python 3.9. - bpo-43739: Fixing the example code in Doc/extending/extending.rst to declare and initialize the pmodule variable to be of the right type. * Tests - bpo-43961: Fix test_logging.test_namer_rotator_inheritance() on Windows: use os.replace() rather than os.rename(). Patch by Victor Stinner. - bpo-43842: Fix a race condition in the SMTP test of test_logging. Don’t close a file descriptor (socket) from a different thread while asyncore.loop() is polling the file descriptor. Patch by Victor Stinner. - bpo-43811: Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up testing. - bpo-43791: OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests are failing with TLSV1_ALERT_INTERNAL_ERROR. - Refreshed patches: - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch - Add vendorized files from bluez-devel to enable building support for Bluetooth.- Make sure to close the import_failed.map file after the exception has been raised in order to avoid ResourceWarnings when the failing import is part of a try...except block.- Update to 3.9.4: - bpo#43710: Reverted the fix for https://bugs.python.org/issue42500 as it changed the PyThreadState struct size and broke the 3.9.x ABI in the 3.9.3 release (visible on 32-bit platforms using binaries compiled using an earlier version of Python 3.9.x headers). - bpo#26053: Fixed bug where the pdb interactive run command echoed the args from the shell command line, even if those have been overridden at the pdb prompt. - bpo#42988 (bsc#1183374) CVE-2021-3426: Remove the getfile feature of the pydoc module which could be abused to read arbitrary files on the disk (directory traversal vulnerability). Moreover, even source code of Python modules can contain sensitive data like passwords. Vulnerability reported by David Schwörer. - bpo#43285: ftplib no longer trusts the IP address value returned from the server in response to the PASV command by default. This prevents a malicious FTP server from using the response to probe IPv4 address and port combinations on the client network. Code that requires the former vulnerable behavior may set a trust_server_pasv_ipv4_address attribute on their ftplib.FTP instances to True to re-enable it. - bpo#43439: Add audit hooks for gc.get_objects(), gc.get_referrers() and gc.get_referents(). Patch by Pablo Galindo. - bpo#43660: Fix crash that happens when replacing sys.stderr with a callable that can remove the object while an exception is being printed. Patch by Pablo Galindo. - bpo#43555: Report the column offset for SyntaxError for invalid line continuation characters. Patch by Pablo Galindo. - bpo#43517: Fix misdetection of circular imports when using from pkg.mod import attr, which caused false positives in non-trivial multi-threaded code. - bpo#35883: Python no longer fails at startup with a fatal error if a command line argument contains an invalid Unicode character. The Py_DecodeLocale() function now escapes byte sequences which would be decoded as Unicode characters outside the [U+0000; U+10ffff] range. - bpo#43406: Fix a possible race condition where PyErr_CheckSignals tries to execute a non-Python signal handler. - bpo#42500: Improve handling of exceptions near recursion limit. Converts a number of Fatal Errors in RecursionErrors. - bpo#43433: xmlrpc.client.ServerProxy no longer ignores query and fragment in the URL of the server. - bpo#35930: Raising an exception raised in a “future” instance will create reference cycles. - bpo#43577: Fix deadlock when using ssl.SSLContext debug callback with ssl.SSLContext.sni_callback(). - bpo#43521: ast.unparse can now render NaNs and empty sets. - bpo#43423: subprocess.communicate() no longer raises an IndexError when there is an empty stdout or stderr IO buffer during a timeout on Windows. - bpo#27820: Fixed long-standing bug of smtplib.SMTP where doing AUTH LOGIN with initial_response_ok=False will fail. The cause is that SMTP.auth_login _always_ returns a password if provided with a challenge string, thus non-compliant with the standard for AUTH LOGIN. Also fixes bug with the test for smtpd. - bpo#43332: Improves the networking efficiency of http.client when using a proxy via set_tunnel(). Fewer small send calls are made during connection setup. - bpo#43399: Fix ElementTree.extend not working on iterators when using the Python implementation - bpo#43316: The python -m gzip command line application now properly fails when detecting an unsupported extension. It exits with a non-zero exit code and prints an error message to stderr. - bpo#43260: Fix TextIOWrapper can not flush internal buffer forever after very large text is written. - bpo#42782: Fail fast in shutil.move() to avoid creating destination directories on failure. - bpo#37193: Fixed memory leak in socketserver.ThreadingMixIn introduced in Python 3.7. - bpo#43199: Answer “Why is there no goto?” in the Design and History FAQ. - bpo#43407: Clarified that a result from time.monotonic(), time.perf_counter(), time.process_time(), or time.thread_time() can be compared with the result from any following call to the same function - not just the next immediate call. - bpo#27646: Clarify that ‘yield from ’ works with any iterable, not just iterators. - bpo#36346: Update some deprecated unicode APIs which are documented as “will be removed in 4.0” to “3.12”. See PEP 623 for detail. - bpo#37945: Fix test_getsetlocale_issue1813() of test_locale: skip the test if setlocale() fails. Patch by Victor Stinner. - bpo#41561: Add workaround for Ubuntu’s custom OpenSSL security level policy. - bpo#43288: Fix test_importlib to correctly skip Unicode file tests if the fileystem does not support them. - bpo#43617: Improve configure.ac: Check for presence of autoconf-archive package and remove our copies of M4 macros. - bpo#42225: Document that IDLE can fail on Unix either from misconfigured IP masquerage rules or failure displaying complex colored (non-ascii) characters. - bpo#43283: Document why printing to IDLE’s Shell is often slower than printing to a system terminal and that it can be made faster by pre-formatting a single string before printing.- Update to 3.9.2: - bpo#42938 (bsc#1181126): Avoid static buffers when computing the repr of ctypes.c_double and ctypes.c_longdouble values. This issue was assigned CVE-2021-3177. - bpo#42967 (bsc#1182379): Fix web cache poisoning vulnerability by defaulting the query args separator to &, and allowing the user to choose a custom separator. This issue was assigned CVE-2021-23336. - Upstreamed patches were removed: - CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch - bsc1167501-invalid-alignment.patch - skip_random_failing_tests.patch - CVE-2019-5010-null-defer-x509-cert-DOS.patch- Add Obsoletes for python3-base when primary interpreter is set to properly replace it during upgrades. (bsc#1181324)- Update to 3.9.1: Security bugs: - Prevented potential DoS attack via CPU and RAM exhaustion when processing malformed Apple Property List files in binary format. - The plistlib module no longer accepts entity declarations in XML plist files to avoid XML vulnerabilities. This should not affect users as entity declarations are not used in regular plist files. - Add volatile to the accumulator variable in hmac.compare_digest, making constant-time-defeating optimizations less likely. Core and Builtins - Allow assignment expressions in set literals and set comprehensions as per PEP 572. Patch by Pablo Galindo. - Fix a regression introduced by the new parser, where an unparenthesized walrus operator was not allowed within generator expressions. - types.GenericAlias objects can now be the targets of weakrefs. - Fixed a bug in the PEG parser that was causing crashes in debug mode. Now errors are checked in left-recursive rules to avoid cases where such errors do not get handled in time and appear as long-distance crashes in other places. - Fixed a possible crash in the PEG parser when checking for the ‘!=’ token in the barry_as_flufl rule. Patch by Pablo Galindo. - Fix handling of errors during creation of PyFunctionObject, which resulted in operations on uninitialized memory. Patch by Yonatan Goldschmidt. - Fix a bug in the parser, where a curly brace following a primary didn’t fail immediately. This led to invalid expressions like a {b} to throw a SyntaxError with a wrong offset, or invalid expressions ending with a curly brace like a { to not fail immediately in the REPL. - Fix possible buffer overflow in the new parser when checking for continuation lines. Patch by Pablo Galindo. - Run the parser two times. On the first run, disable all the rules that only generate better error messages to gain performance. If there’s a parse failure, run the parser a second time with those enabled. - Document the default implementation of object.__eq__. - Fix peephole optimizer misoptimize conditional jump + JUMP_IF_NOT_EXC_MATCH pair. - The garbage collector now tracks all user-defined classes. Patch by Brandt Bucher. - Fixed potential issues with removing not completely initialized module from sys.modules when import fails. - Star-unpacking is now allowed for with item’s targets in the PEG parser. - Fixed stack overflow in issubclass() and isinstance() when getting the __bases__ attribute leads to infinite recursion. - When loading a native module and a load failure occurs, prevent a possible UnicodeDecodeError when not running in a UTF-8 locale by decoding the load error message using the current locale’s encoding. - Correctly count control blocks in ‘except’ in compiler. Ensures that a syntax error, rather a fatal error, occurs for deeply nested, named exception handlers. Library - types.GenericAlias will now raise a TypeError when attempting to initialize with a keyword argument. Previously, this would cause the interpreter to crash if the interpreter was compiled with debug symbols. This does not affect interpreters compiled for release. Patch by Ken Jin. - CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly parsed. Replace the special purpose getallmatchingheaders with generic get_all method and add relevant tests. - inspect.findsource() now raises OSError instead of IndexError when co_lineno of a code object is greater than the file length. This can happen, for example, when a file is edited after it was imported. PR by Irit Katriel. - Fix handling of trailing comments by inspect.getsource(). - ChainMap.__iter__ no longer calls __getitem__ on underlying maps - TracebackException no longer holds a reference to the exception’s traceback object. Consequently, instances of TracebackException for equivalent but non-equal exceptions now compare as equal. - We fixed an issue in pickle.whichmodule in which importing multiprocessing could change the how pickle identifies which module an object belongs to, potentially breaking the unpickling of those objects. - Clarify the error message for asyncio.IncompleteReadError when expected is None. - Extracting a symlink from a tarball should succeed and overwrite the symlink if it already exists. The fix is to remove the existing file or symlink before extraction. Based on patch by Chris AtLee, Jeffrey Kintscher, and Senthil Kumaran. - Fixed tkinter.ttk.Style.map(). The function accepts now the representation of the default state as empty sequence (as returned by Style.map()). The structure of the result is now the same on all platform and does not depend on the value of wantobjects. - Fix various issues with typing.Literal parameter handling (flatten, deduplicate, use type to cache key). Patch provided by Yurii Karabas. - Fix the threading.Thread class at fork: do nothing if the thread is already stopped (ex: fork called at Python exit). Previously, an error was logged in the child process. - The onerror callback from shutil.rmtree now receives correct function when os.open fails. - Fix os.sendfile() on illumos. - Fixed writing binary Plist files larger than 4 GiB. - The repr() of typing types containing Generic Alias Types previously did not show the parameterized types in the GenericAlias. They have now been changed to do so. - webbrowser: Ignore NotADirectoryError when calling xdg-settings. - binhex.binhex() consisently writes macOS 9 line endings. - Fix a stack overflow error for asyncio Task or Future repr(). - The overflow occurs under some circumstances when a Task or Future recursively returns itself. - Fix memory leak in subprocess.Popen() in case an uid (gid) specified in user (group, extra_groups) overflows uid_t (gid_t). - Improve asyncio.wait function to create the futures set just one time. - InvalidFileException and RecursionError are now the only errors caused by loading malformed binary Plist file (previously ValueError and TypeError could be raised in some specific cases). - Pickling heap types implemented in C with protocols 0 and 1 raises now an error instead of producing incorrect data. - plistlib: fix parsing XML plists with hexadecimal integer values - Fix an incorrectly formatted error from _codecs.charmap_decode() when called with a mapped value outside the range of valid Unicode code points. PR by Max Bernstein. - Fix pickling pure Python datetime.time subclasses. Patch by Dean Inwood. - Fixed a bug that was causing ctypes.util.find_library() to return None when triying to locate a library in an environment when gcc>=9 is available and ldconfig is not. Patch by Pablo Galindo - C14N 2.0 serialisation in xml.etree.ElementTree failed for unprefixed attributes when a default namespace was defined. - Fix a bug in the symtable module that was causing module-scope global variables to not be reported as both local and global. Patch by Pablo Galindo. - str() for the type attribute of the tkinter.Event object always returns now the numeric code returned by Tk instead of the name of the event type. - fix tkinter.EventType Enum so all members are strings, and none are tuples - Fix SQLite3 segfault when backing up closed database. Patch contributed by Peter David McCormick. - Fix the tarfile module to write only basename of TAR file to GZIP compression header. - Allow ctypes.wintypes to be imported on non-Windows systems. - shutil.which() now ignores empty entries in PATHEXT instead of treating them as a match. - Fix time-of-check/time-of-action issue in subprocess.Popen.send_signal. - Fix --outfile for cProfile / profile not writing the output file in the original directory when the program being profiled changes the working directory. PR by Anthony Sottile. - ZipFile truncates files to avoid corruption when a shorter comment is provided in append (“a”) mode. Patch by Jan Mazur. - Fixed KeyError exception when flattening an email to a string attempts to replace a non-existent Content-Transfer-Encoding header. Documentation - Fix the URL for the IMAP protocol documents. - Document __format__ functionality for IP addresses. - Clarify that subscription expressions are also valid for certain classes and types in the standard library, and for user-defined classes and types if the classmethod __class_getitem__() is provided. - Documented generic alias type and types.GenericAlias. Also added an entry in glossary for generic types. - In Programming FAQ “Sequences (Tuples/Lists)” section, add “How do you remove multiple items from a list”. - Fix RemovedInSphinx40Warning when building the documentation. Patch by Dong-hee Na. - Update the refcounts info of PyType_FromModuleAndSpec. - Fix tarfile’s extractfile documentation - Document some restrictions on the default string representations of numeric classes. Tests - Reenable test_gdb on gdb 9.2 and newer: https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb 10.1. - Fix test_asyncio.test_call_later() race condition: don’t measure asyncio performance in the call_later() unit test. The test failed randomly on the CI. - Include _testinternalcapi module in Windows installer for test suite - Fix test_logging.test_race_between_set_target_and_flush(): the test now waits until all threads complete to avoid leaking running threads. - Avoid a test failure in test_lib2to3 if the module has already imported at the time the test executes. Patch by Pablo Galindo. - Tests for CJK codecs no longer call eval() on content received via HTTP. - Fix test_site.test_license_exists_at_url(): call urllib.request.urlcleanup() to reset the global urllib.request._opener. Patch by Victor Stinner. - test_ssl: skip test_min_max_version_mismatch when TLS 1.0 is not available - Add tests for SIGINT handling in the runpy module. - Fixed a failure in test_tk.test_widgets.ScaleTest happening when executing the test with Tk 8.6.10. Build - Fix a race condition in “make regen-all” when make -jN option is used to run jobs in parallel. The clinic.py script now only use atomic write to write files. Moveover, generated files are now left unchanged if the content does not change, to not change the file modification time. - Update Py_UNREACHABLE to use __builtin_unreachable() if only the compiler is able to use it. Patch by Dong-hee Na. - Addressed three compiler warnings found by undefined behavior sanitizer (ubsan). IDLE - Fix reporting offset of the RE error in searchengine. - Get docstrings for IDLE calltips more often by using inspect.getdoc. - Mostly finish using ttk widgets, mainly for editor, settings, and searches. Some patches by Mark Roseman. - Use ‘IDLE Shell’ as shell title - Rewrite the Calltips doc section. - In calltips, stop reminding that ‘/’ marks the end of positional-only arguments. - Typing opening and closing parentheses inside the parentheses of a function call will no longer cause unnecessary “flashing” off and on of an existing open call-tip, e.g. when typed in a string literal. C API - Fix potential crash in deallocating method objects when dynamically allocated PyMethodDef’s lifetime is managed through the self argument of a PyCFunction. - Py_FileSystemDefaultEncodeErrors and Py_UTF8Mode are available again in limited API. - Readjustet and reapplied patches: - CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch - skip_random_failing_tests.patch - sphinx-update-removed-function.patch- Add CVE-2021-3177-buf_ovrfl_PyCArg_repr.patch fixing bsc#1181126 (CVE-2021-3177) buffer overflow in PyCArg_repr in _ctypes/callproc.c, which may lead to remote code execution.- (bsc#1180125) We really don't Require python-rpm-macros package. Unnecessary dependency.- Make python39-doc building again - Add no-skipif-doctests.patch, because SLE-15 version of Sphinx doesn't know about skipif directive in doctests.- Update sphinx-update-removed-function.patch patch to the latest version in python36.- Last try before this results in an editwar: * remove importlib_resources and importlib-metadata provides/obsoletes * import importlib_resources is not the same as import importlib.resources, same for metadata * The backport packages from PyPI needed for older flavors are specified as such for setuptools or in pyproject.toml. If a package requires them they typically add them with a python version qualifier and the packages have their own version numbers.- Add patch sphinx-update-removed-function.patch to no longer call a now removed function and to make documentation build independent of the Sphinx version (bsc#1179630, gh#python/cpython#13236).- Don't require packages which break build on SLE-15 although we really don't need them (python3-python-docs-theme and python3-sphinxcontrib-qthelp).- Fix build with RPM 4.16: error: bare words are no longer supported, please use "...": x86 == ppc.- Update to the final version 3.9.0: Complete changelog with all (many) changes from previous version is on https://docs.python.org/release/3.9.0/whatsnew/3.9.html Changes from the previous RC versions (not that many) are on https://docs.python.org/release/3.9.0/whatsnew/changelog.html#changelog- Buildrequire timezone only for general flavor. It's used in this flavor for the test suite.- Update to 3.9.0rc1: * Core and Builtins - bpo-38156: Handle interrupts that come after EOF correctly in PyOS_StdioReadline. * Library - bpo-41497: Fix potential UnicodeDecodeError in dis module. - bpo-41490: Update ensurepip to install pip 20.2.1 and setuptools 49.2.1. - bpo-41467: On Windows, fix asyncio recv_into() return value when the socket/pipe is closed (BrokenPipeError): return 0 rather than an empty byte string (b''). - bpo-41425: Make tkinter doc example runnable. - bpo-41384: Raise TclError instead of TypeError when an unknown option is passed to tkinter.OptionMenu. - bpo-38731: Fix NameError in command-line interface of py_compile. - bpo-41317: Use add_done_callback() in asyncio.loop.sock_accept() to unsubscribe reader early on cancellation. - bpo-41364: Reduce import overhead of uuid. - bpo-41341: Recursive evaluation of typing.ForwardRef in get_type_hints. - bpo-41182: selector: use DefaultSelector based upon implementation - bpo-40726: Handle cases where the end_lineno is None on ast.increment_lineno(). * Documentation - bpo-41045: Add documentation for debug feature of f-strings. - bpo-41314: Changed the release when from __future__ import annotations becomes the default from 4.0 to 3.10 (following a change in PEP 563). * Windows - bpo-41492: Fixes the description that appears in UAC prompts. - bpo-40948: Improve post-install message to direct people to the “py” command. - bpo-41412: The installer will now fail to install on Windows 7 and Windows 8. Further, the UCRT dependency is now always downloaded on demand. - bpo-40741: Update Windows release to include SQLite 3.32.3. * IDLE - bpo-41468: Improve IDLE run crash error message (which users should never see). - bpo-41373: Save files loaded with no line ending, as when blank, or different line endings, by setting its line ending to the system default. Fix regression in 3.8.4 and 3.9.0b4.- Synchronize formatting and fixes with python38.- Increase testsuite timeout to account for super long running test_peg_generator- Removed CVE-2019-20907_tarfile-inf-loop.patch: fixed in upstream - Removed recursion.tar: contained in upstream - Update to 3.9.0b5: - bpo-41304: Fixes python3x._pth being ignored on Windows, caused by the fix for bpo-29778 (CVE-2020-15801). - bpo-41162: Audit hooks are now cleared later during finalization to avoid missing events. - bpo-29778: Ensure python3.dll is loaded from correct locations when Python is embedded (CVE-2020-15523). - bpo-39603: Prevent http header injection by rejecting control characters in http.client.putrequest(…). - bpo-41295: Resolve a regression in CPython 3.8.4 where defining “__setattr__” in a multi-inheritance setup and calling up the hierarchy chain could fail if builtins/extension types were involved in the base types. - bpo-41247: Always cache the running loop holder when running asyncio.set_running_loop. - bpo-41252: Fix incorrect refcounting in _ssl.c’s _servername_callback(). - bpo-41215: Use non-NULL default values in the PEG parser keyword list to overcome a bug that was ' preventing Python from being properly compiled when using the XLC compiler. Patch by Pablo Galindo. - bpo-41218: Python 3.8.3 had a regression where compiling with ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension with CO_COROUTINE. Now only list comprehension making use of async/await will tagged as so. - bpo-41175: Guard against a NULL pointer dereference within bytearrayobject triggered by the bytearray() + bytearray() operation. - bpo-39960: The “hackcheck” that prevents sneaking around a type’s __setattr__() by calling the superclass method was rewritten to allow C implemented heap types. - bpo-41288: Unpickling invalid NEWOBJ_EX opcode with the C implementation raises now UnpicklingError instead of crashing. - bpo-39017: Avoid infinite loop when reading specially crafted TAR files using the tarfile module (CVE-2019-20907, bsc#1174091). - bpo-41235: Fix the error handling in ssl.SSLContext.load_dh_params(). - bpo-41207: In distutils.spawn, restore expectation that DistutilsExecError is raised when the command is not found. - bpo-39168: Remove the __new__ method of typing.Generic. - bpo-41194: Fix a crash in the _ast module: it can no longer be loaded more than once. It now uses a global state rather than a module state. - bpo-39384: Fixed email.contentmanager to allow set_content() to set a null string. - bpo-41300: Save files with non-ascii chars. Fix regression released in 3.9.0b4 and 3.8.4. - bpo-37765: Add keywords to module name completion list. Rewrite Completions section of IDLE doc. - bpo-40170: Revert PyType_HasFeature() change: it reads again directly the PyTypeObject.tp_flags member when the limited C API is not used, rather than always calling PyType_GetFlags() which hides implementation details.- Add CVE-2019-20907_tarfile-inf-loop.patch fixing bsc#1174091 (CVE-2019-20907, bpo#39017) avoiding possible infinite loop in specifically crafted tarball. Add recursion.tar as a testing tarball for the patch.- Changed bpo-31046_ensurepip_honours_prefix.patch to include fix from py3.8- Spec file fixes - Re-added subprocess-raise-timeout.patch: now compatible - Removed bpo34022-stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch: contained in upstream- Fix minor issues found in the staging.- Do not set ourselves as primary interpreter- Update to 3.9.0b4: - PEP 584, Union Operators in dict - PEP 585, Type Hinting Generics In Standard Collections - PEP 593, Flexible function and variable annotations - PEP 602, Python adopts a stable annual release cadence - PEP 615, Support for the IANA Time Zone Database in the Standard Library - PEP 616, String methods to remove prefixes and suffixes - PEP 617, New PEG parser for CPython - bpo#38379, garbage collection does not block on resurrected objects; - bpo#38692, os.pidfd_open added that allows process management without races and signals; - bpo#39926, Unicode support updated to version 13.0.0; - bpo#1635741, when Python is initialized multiple times in the same process, it does not leak memory anymore; - A number of Python builtins (range, tuple, set, frozenset, list, dict) are now sped up using PEP 590 vectorcall; - A number of Python modules (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref) now use multiphase initialization as defined by PEP 489; - A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384. - Remove upstreamed patches: - F00102-lib64.patch - SUSE-FEDORA-multilib.patch - OBS_dev-shm.patch - subprocess-raise-timeout.patch - bpo36302-sort-module-sources.patch - bpo40784-Fix-sqlite3-deterministic-test.patch- Update pre_checkin.sh and regenerate- Convert few dependencies to their pkgconfig counterparts- Remove release requirement on libpython, it is not really needed to be equal as the abi changes with versions- Add provides python3-bla on all the subpkgs in case we are primary provider of the functionality- Remove unversioned files from devel subpkg too - Remove main python3 files from -base based whether we are primary interpreter or not - Fix idle to be co-installable - Add condition to be primary to provide/obsolete python3-* - Fix doc to build in versioned folder so the pythons can be installed next to each other- Revert the full versioning of calls on the macros. These are generic so they should really just call python3 X- For the doc package we can build with generic flavor, we don't need the our-interpreter based one- Add provides for pytohn3X-typing/etc to allow BR on those still to work when needed- Change macros.python3 to use full versioned 3.8 instead of just 3 for python interpreter- Reduce some now unused conditionals- Redux the -base dependencies to match up pre-merge layout- Generate baselibs in pre-checkin too- Generate the importlib-failed using pre_checking again - Add back the information about skipped tests on the pre_checkin output- Use %python_pkg_name instead of hardcoding python3 where applicable - Sort out preamble with spec-cleaner- Calculate required variables instead of relying on their continuous manual update- Fix the -base module build again to generate only the deps we need- Replace OBS_dev-shm.patch with the upstream PR#20944- Use the %{python_pkg_name} on more places to allow easier multiversioning - Switch to _multibuild approach for easier maintenance of this package. All is now in one spec file with 3 conditionals: * bcond_with base * bcond_with doc * bcond_with general- add requires python3-base on libpython subpackage (bsc#1167008)- build against Sphinx 2.x until python is compatible with Sphinx 3.x (see gh#python/cpython#19397, bpo#40204)- Fix build with SQLite 3.32 (bpo#40783) add bpo40784-Fix-sqlite3-deterministic-test.patch- Update to version 3.8.3: - Complete list of changes is available at https://docs.python.org/release/3.8.3/whatsnew/changelog.html#python-3-8-3-final, but most of them are just bugfixes. - Removed patch CVE-2020-8492-urllib-ReDoS.patch: contained in upstream- Add #!BuildIgnore: gdk-pixbuf-loader-rsvg to python3 SPEC- Add patch bsc1167501-invalid-alignment.patch (bsc#1167501, bpo#40052) to fix alignment in abstract.h header file.- Update list of skipped tests for qemu linux-user build, test_setegid (test.test_os.PosixUidGidTests) is confusing it- Update to 3.8.2: - Complete list of changes is available at https://docs.python.org/release/3.8.2/whatsnew/changelog.html#python-3-8-2-final, but most of them are just bugfixes. - Updated patches: - F00102-lib64.patch - OBS_dev-shm.patch - SUSE-FEDORA-multilib.patch - subprocess-raise-timeout.patch- Add CVE-2020-8492-urllib-ReDoS.patch fixing the security bug "Python urrlib allowed an HTTP server to conduct Regular Expression Denial of Service (ReDoS)" (bsc#1162367)- Add Requires: libpython%{so_version} == %{version}-%{release} to python3-base to keep both packages always synchronized (bsc#1162224).- Do not pull in bluez in base again, explain the cycle, it needs to be solved by bluez maintainer for us by providing just the headers separately- Reame idle icons to idle3 in order to not conflict with python2 variant of the package * renamed the icons * renamed icon load in desktop file- Add importlib_resources provide/obsolete as it is integral part of the lang since 3.7 release- Add -fno-semantic-interposition as it brings speed up: https://fedoraproject.org/wiki/Changes/PythonNoSemanticInterpositionSpeedup- Update to 3.8.1: - This is mainly bugfix release and no significant changes to API are expected. The full changelog is available on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-1 - Remove bpo-38688_shutil.copytree_prevent-infinite-recursion.patch, which is included in the upstream tarball.- Add bpo-31046_ensurepip_honours_prefix.patch which makes ensurepip to honour the value of $(prefix). Proposed fix for bpo#31046..- Move bluez-devel dependency to base as it is needed for socket.AF_BLUETOOTH and otherwise does not work- Reintroduce QtHelp with the help of the new BR python-sphinxcontrib-qthelp.- Fix SUSE-FEDORA-multilib.patch, the platform agnostic infix for library installation is "lib", not "dir".- Move idle subpackage build from python3-base to python3. appstream-glib required for packaging introduces considerable extra dependencies and a build loop via rust/librsvg. - Correct installation of idle IDE icons: + idle.png is not the target directory + non-GNOME-specific icons belong into icons/hicolor - Add required Name key to idle3 desktop file- Update to the final release 3.8.0. . - New Features: - Assignment expressions - Positional-only parameters - Parallel filesystem cache for compiled bytecode files - Debug build uses the same ABI as release build - f-strings support = for self-documenting expressions and debugging - PEP 578: Python Runtime Audit Hooks - PEP 587: Python Initialization Configuration - Vectorcall: a fast calling protocol for CPython - Pickle protocol 5 with out-of-band data buffers - New modules: - importlib.metadata - Improved modules: - ast asyncio, builtins, collections, curses, ctypes, datetime, functools, gc, gettext, gzip, idelib and IDLE, inspect, io, json.tool, math, mmap, multiprocessing, os, os.path, pathlib, pickle, plistlib, py_compile, shlex, shutil, socket, ssl, statistics, sys, tarfile, threading, tokenize, tkinter, time, typing, unicodedata, unittest, venv, weakref, xml - C API improvements - bdist_winnst command has been deprecated (use bdist_wheel) - https://docs.python.org/3.8/whatsnew/3.8.html remains rest of changes including documentation on how to port your programs to the current version of Python.- Add idle3.appdata.xml and idle3.desktop (originally from Fedora) to make Idle3 full GUI desktop application. (bsc#1153830)- Drop intltool from BuildRequires. Doesn't appear to be used.- Add folder version to allow tarball downloads even for beta/rc releases- Revert patches from Fedora (F00102-lib64.patch and F00251-change-user-install-location.patch) into their original prisitine Fedora versions, SUSE-FEDORA-multilib.patch refreshed accordingly.- Correct quotation of platsubdir in Lib/distutils/command/install.py- Replace python-3.6.0-multilib.patch with two patches from Fedora (F00102-lib64.patch and F00251-change-user-install-location.patch), and our own SUSE-FEDORA-multilib.patch to allow better cooperation with Fedora and better upstreaming. - Add OBS_dev-shm.patch fixing bpo#38377- Pull in just gettext and let solver to sort out between: gettext-runtime-mini and gettext-runtime- Update to 3.8.0rc1. Overall changes from 3.7: - PEP 572, Assignment expressions - PEP 570, Positional-only arguments - PEP 587, Python Initialization Configuration (improved embedding) - PEP 590, Vectorcall: a fast calling protocol for CPython - PEP 578, Runtime audit hooks - PEP 574, Pickle protocol 5 with out-of-band data - Typing-related: PEP 591 (Final qualifier), PEP 586 (Literal types), and PEP 589 (TypedDict) - Parallel filesystem cache for compiled bytecode - Debug builds share ABI as release builds, also the 'm' ABI tag was removed (irrelevant since 3.4), bpo#36707 - f-strings support a handy = specifier for debugging - continue is now legal in finally: blocks - on Windows, the default asyncio event loop is now ProactorEventLoop - on macOS, the spawn start method is now used by default in multiprocessing - multiprocessing can now use shared memory segments to avoid pickling costs between processes - typed_ast is merged back to CPython - LOAD_GLOBAL is now 40% faster - pickle now uses Protocol 4 by default, improving performance - Refreshed patches: - CVE-2019-5010-null-defer-x509-cert-DOS.patch - python-3.3.0b1-fix_date_time_compiler.patch - python-3.6.0-multilib.patch - subprocess-raise-timeout.patch- Add bpo36302-sort-module-sources.patch (boo#1041090)- Try harder obsoleting importlib-metadata- Update to 3.8.0b4: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-4- Re-enable test_threading on aarch64- Remove xrpm from subpackage tk description- Update to 3.8.0b3: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-3 - Patches reapplied: - python-3.3.0b1-fix_date_time_compiler.patch - python-3.3.0b1-test-posix_fadvise.patch - python-3.6.0-multilib.patch - subprocess-raise-timeout.patch- Add Provides: python3-importlib-metadata- Update to 3.8.0b2: Many bugfixes, full list on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-beta-2 - Patches included in upstream: - bpo-37169_PyObject_IsFreed.patch - Patches reapplied: - 00251-change-user-install-location.patch - distutils-reproducible-compile.patch - python-3.3.0b1-localpath.patch - python-3.6.0-multilib.patch- Update list of skipped tests for qemu linux-user build - Don't do profiling in qemu linux-user build- Update to 3.8.0b1 (changes since 3.7.*): - PEP 572, Assignment expressions - PEP 570, Positional-only arguments - PEP 587, Python Initialization Configuration (improved embedding) - PEP 590, Vectorcall: a fast calling protocol for CPython - PEP 578, Runtime audit hooks - PEP 574, Pickle protocol 5 with out-of-band data - Typing-related: PEP 591 (Final qualifier), PEP 586 (Literal types), and PEP 589 (TypedDict) - Parallel filesystem cache for compiled bytecode - Debug builds share ABI as release builds - f-strings support a handy = specifier for debugging - continue is now legal in finally: blocks - multiprocessing can now use shared memory segments to avoid pickling costs between processes - typed_ast is merged back to CPython - LOAD_GLOBAL is now 40% faster - pickle now uses Protocol 4 by default, improving performance - Remove patches which were included in the upstream: - 00251-change-user-install-location.patch - 00316-mark-bdist_wininst-unsupported.patch - CVE-2019-9947-no-ctrl-char-http.patch - raise_SIGING_not_handled.patch- Set _lto_cflags to nil as the package is using LTO via --enable-lto. That will prevent to propage LTO for Python modules that are built in a separate package.- Update to 3.8.0.a3: - PEP 572: Assignment Expressions. - Other (mostly small) changes are on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-alpha-3- bsc#1130840 (CVE-2019-9947): add CVE-2019-9947-no-ctrl-char-http.patch Address the issue by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause a ValueError to be raised.- Fix metadata of patches. - Rename boo1071941-make-install-in-sep-loc.patch to 00251-change-user-install-location.patch which is the original name, so it can be looked up in the Fedora VCS.- Mark distutils bdist_wininst command unsupported with 00316-mark-bdist_wininst-unsupported.patch - Remove Windows bdist_wininst executables from runtime package- Update to 3.7.3, which is the maintenance release without any significant changes in API. - Updated patches: - CVE-2019-5010-null-defer-x509-cert-DOS.patch - distutils-reproducible-compile.patch - python-3.3.0b1-fix_date_time_compiler.patch - python-3.6.0-multilib.patch - raise_SIGING_not_handled.patch- Remove building of Qt Develop help files.- Return distutils-reproducible-compile.patch which is still missing (still unfinished bpo#29708).- Update to 3.8.0a2: * List of all (mostly small) changes are on https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0-alpha-2- Build nis module again.- Update to 3.8.0a1: * The most visible change so far is probably the implementation of PEP 572: Assignment Expressions. For a detailed list of changes, see: https://docs.python.org/3.8/whatsnew/changelog.html * Recover building of nis module properly in python3 package - Update patches: * CVE-2019-5010-null-defer-x509-cert-DOS.patch * python-3.3.0b1-fix_date_time_compiler.patch * python-3.3.0b1-test-posix_fadvise.patch * python-3.6.0-multilib.patch * raise_SIGING_not_handled.patch- Put LICENSE file where it belongs (bsc#1121852)- bsc#1122191: add CVE-2019-5010-null-defer-x509-cert-DOS.patch fixing bpo-35746. An exploitable denial-of-service vulnerability exists in the X509 certificate parser of Python.org Python 2.7.11 / 3.7.2. A specially crafted X509 certificate can cause a NULL pointer dereference, resulting in a denial of service. An attacker can initiate or accept TLS connections using crafted certificates to trigger this vulnerability.- Do not require full gettext in order to avoid pulling in the glib2 as a dependency- Update to 3.7.2: * bugfix release: https://docs.python.org/3.7/whatsnew/changelog.html#changelog- Stop applying python-3.6.0-multilib-new.patch (which is still WIP), and apply the old proven python-3.6.0-multilib.patch instead.- Use upstream-recommended %{_rpmconfigdir}/macros.d directory for the rpm macros.- Upgrade to 3.7.2rc1: * bugfix release, for the full list of all changes see https://docs.python.org/3.7/whatsnew/changelog.html#changelog - Make run of the test suite more verbose- Write summaries without em dashes.- Remove python-3.3.0b1-curses-panel.patch it is unnecessary anymore. - Add boo1071941-make-install-in-sep-loc.patch to make pip and distutils in user environment install into separate location (boo#1071941) Set values of prefix and exec_prefix in distutils install command to /usr/local if executable is /usr/bin/python* and RPM build is not detected to make pip and distutils install into separate location - Remove finally python-3.3.3-skip-distutils-test_sysconfig_module.patch - Remove distutils-reproducible-compile.patch which doesn't make really much difference in reproducibility (see gh#python/cpython#8057 and discussion there).- Rename Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch to bpo34022-stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch- Add dependency on bluez-devel to build support for Bluetooth (boo#1109998)- Add devhelp subpackage and split qthelp into another subpackage.- Remove python-3.0b1-record-rpm.patch and Python-3.0b1-record-rpm.patch, as they are not needed anymore- Switch off test_threading for optimization builds.- Update to python-3.7.1. This is just a brief overview, complete changelog available at https://docs.python.org/3.7/whatsnew/changelog.html#python-3-7-1-final: Library bpo-34970: Protect tasks weak set manipulation in asyncio.all_tasks() - Patches already accepted upstream are removed: * 00307-allow-to-call-Py_Main-after-Py_Initialize.patch * 00308-tls-1.3.patch - New patches added: * Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch * raise_SIGING_not_handled.patch - All other patches refreshed via quilt.- Add raise_SIGING_not_handled.patch to fix bsc#1094814- Add patch to fix importlib return types: * python3-imp-returntype.patch- bpo-34022 still not completely fixed, so we have to keep excluding test_cmd_line_script, test_multiprocessing_main_handling, and test_runpy from the test suite.- Update to python 3.7.1~rc2: Core and Builtins bpo-34879: Fix a possible null pointer dereference in bytesobject.c. Patch by Zackery Spytz. bpo-34854: Fixed a crash in compiling string annotations containing a lambda with a keyword-only argument that doesn’t have a default value. bpo-34320: Fix dict(od) didn’t copy iteration order of OrderedDict. Library bpo-34769: Fix for async generators not finalizing when event loop is in debug mode and garbage collector runs in another thread. bpo-34922: Fixed integer overflow in the digest() and hexdigest() methods for the SHAKE algorithm in the hashlib module. bpo-34900: Fixed unittest.TestCase.debug() when used to call test methods with subtests. Patch by Bruno Oliveira. bpo-34871: Fix inspect module polluted sys.modules when parsing __text_signature__ of callable. bpo-34872: Fix self-cancellation in C implementation of asyncio.Task bpo-34819: Use a monotonic clock to compute timeouts in Executor.map() and as_completed(), in order to prevent timeouts from deviating when the system clock is adjusted. bpo-34334: In QueueHandler, clear exc_text from LogRecord to prevent traceback from being written twice. bpo-6721: Acquire the logging module’s commonly used internal locks while fork()ing to avoid deadlocks in the child process. bpo-34172: Fix a reference issue inside multiprocessing.Pool that caused the pool to remain alive if it was deleted without being closed or terminated explicitly. Documentation bpo-32174: chm document displays non-ASCII charaters properly on some MBCS Windows systems. Tests bpo-32962: Fixed test_gdb when Python is compiled with flags - mcet -fcf-protection -O0. C API bpo-34910: Ensure that PyObject_Print() always returns -1 on error. Patch by Zackery Spytz.- Add Stop_hash-based_invalidation_w_SOURCE_DATE_EPOCH.patch to fix problems with SOURCE_DATE_EPOCH variable (bpo-34022)- Add patch to fix build with tls1.3 supported openssl * 00308-tls-1.3.patch - Add patch to fix Py_Main calls after Py_initialize * 00307-allow-to-call-Py_Main-after-Py_Initialize.patch- Add -fwrapv to OPTS, which is default for python3 anyway See for example https://github.com/zopefoundation/persistent/issues/86 for bugs which are caused by avoiding it.- Fix ownership of _contextvars, _queue, and _xxtestfuzz- Switch off LTO for distros with older GCC - Fix %files- Add dependency over libuuid-devel- update to python 3.7.0 Complete overview of changes is available on https://docs.python.org/3/whatsnew/3.7.html, these are just highlights: * PEP 563, postponed evaluation of type annotations. * async and await are now reserved keywords. * New library modules: contextvars: PEP 567 – Context Variables dataclasses: PEP 557 – Data Classes importlib.resources * New built-in features: PEP 553, the new breakpoint() function. * Python data model improvements: PEP 562, customization of access to module attributes. PEP 560, core support for typing module and generic types. the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec. * Significant improvements in the standard library: The asyncio module has received new features, significant usability and performance improvements. The time module gained support for functions with nanosecond resolution. * CPython implementation improvements: Avoiding the use of ASCII as a default text encoding: PEP 538, legacy C locale coercion PEP 540, forced UTF-8 runtime mode PEP 552, deterministic .pycs the new development runtime mode PEP 565, improved DeprecationWarning handling * C API improvements: PEP 539, new C API for thread-local storage * Documentation improvements: PEP 545, Python documentation translations New documentation translations: Japanese, French, and Korean. - drop python3-sorted_tar.patch - drop 0001-allow-for-reproducible-builds-of-python-packages.patch - refresh python-3.6.0-multilib-new.patch - refresh subprocess-raise-timeout.patch * new C API for thread-local storage * Deterministic pyc files * Built-in breakpoint() * Data Classes * Core support for typing module and generic types * Customization of access to module attributes * Postponed evaluation of annotations * Time functions with nanosecond resolution * Improved DeprecationWarning handling * Context Variables * Avoiding the use of ASCII as a default text encoding (PEP 538, legacy C locale coercion and PEP 540, forced UTF-8 runtime mode) * The insertion-order preservation nature of dict objects is now an official part of the Python language spec. * Notable performance improvements in many areas.- disable lto with gcc versions below 7 (results in link failures)- Use faster find subcommand execution strategies.- Do not mention the testsuite disabling in opts as it was moved to main pkg so base is test-free- As we run in main python package do not generate the pre_checkin from both now- Move the tests from base to generic package wrt bsc#1088573 * We still fail the whole distro if python3 is not build * The other archs than x86_64 took couple of hours to unblock build of other software, this way we work around the issue - Some tests are still run in -base for the LTO tweaking, but at least it is not run twice- update to 3.6.5 * bugfix release * see Misc/NEWS for details - drop ctypes-pass-by-value.patch - drop fix-localeconv-encoding-for-LC_NUMERIC.patch - refresh python-3.6.0-multilib-new.patch- Created %so_major and %so_minor macros - Put Tools/gdb/libpython.py script into proper place and ship it with devel subpackage.- ctypes-pass-by-value.patch: Fix pass by value for structs on aarch64- Add python3-sorted_tar.patch (boo#1081750)- Drop python3-tk and python3-idle recommends to reduce python3 always pulling X stack bsc#1081751- Add patch to fix glibc 2.27 fail bsc#1079761: * fix-localeconv-encoding-for-LC_NUMERIC.patch- Update skip_random_failing_tests.patch (for PowerPC) to avoid test_call_later failure- move XML modules and python3-xml provide to python3-base (fixes bsc#1077230) - move ensurepip to base- Add skip_random_failing_tests.patch only for PowerPC- update to 3.6.4 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed python3-ncurses-6.0-accessors.patch - drop PYTHONSTARTUP hooks that cause spurious startup errors * fixes bsc#1070738 * the relevant feature (REPL history) is now built into Python itself- Install 2to3-%{python_version} executable (override defattr of the -tools package). 2to3 (unversioned) is a symlink and does not carry permissions (bsc#1070853).- move 2to3 to python3-tools package- update to 3.6.3 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed 0001-3.6-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3093.patch- drop python-2.7-libffi-aarch64.patch: this patches the intree copy of libffi which is unused/deleted in the line afterwards - fix build against system libffi: include flags weren't set so it actually used the in-tree libffi headers.- Fix test broken with OpenSSL 1.1 (bsc#1042670) * add 0001-3.6-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3093.patch- Update RPM group for python documentation.- fix missing %{?armsuffix}- distutils-reproducible-compile.patch: ensure distutils order files before compiling, which works around bsc#1049186- Add libnsl-devel build requires for glibc obsoleting libnsl- update to 3.6.2 * bugfix release, over a hundred bugs fixed * see Misc/NEWS for details - drop upstreamed test-socket-aead-kernel49.patch - add Provides: python3-typing (fixes bsc#1050653) - drop duplicate Provides: python3- drop db-devel from requirements- Add missing link to python library in config dir (bsc#1040164)- update to 3.6.1 * bugfix release, over a hundred bugs fixed * never add import location's parent directory to sys.path * switch to git for version control, build changes related to that * fix "failed to get random numbers" on old kernels (bsc#1029902) * several crashes and memory leaks corrected * f-string are no longer accepted as docstrings- prevent regenerating AST at build-time more robustly - add "--without profileopt" and "--without testsuite" options to python3-base to allow short circuiting when working on the package- Add 0001-allow-for-reproducible-builds-of-python-packages.patch upstream https://github.com/python/cpython/pull/296- reenable test_socket with AEAD patch (test-socket-aead-kernel49.patch) - reintroduce %py3_soflags macro (and better named %cpython3_soabi equivalent)- update to 3.6.0 * PEP 498 Formated string literals * PEP 515 Underscores in numeric literals * PEP 526 Syntax for variable annotations * PEP 525 Asynchronous generators * PEP 530 Asynchronous comprehensions * PEP 506 New "secrets" module for safe key generation * less memory consumed by dicts * dtrace and systemtap support * improved asyncio module * better defaults for ssl * new hashing algorithms in hashlib * bytecode format changed to allow more optimizations * "async" and "await" are on track to be reserved words * StopIteration from generators is deprecated * support for openssl < 1.0.2 is deprecated * os.urandom now blocks when getrandom() blocks * huge number of new features, bugfixes and optimizations * see https://docs.python.org/3.6/whatsnew/3.6.html for details - rework multilib patch: drop Python-3.5.0-multilib.patch, implement upstreamable python-3.6.0-multilib-new.patch - refresh python-3.3.0b1-localpath.patch, subprocess-raise-timeout.patch - drop upstreamed Python-3.5.1-fix_lru_cache_copying.patch - finally drop python-2.6b1-canonicalize2.patch that was not applied in source and only kept around in case we needed it in the future. (which we don't, as it seems) - update import_failed map and baselibs - build ctypes against system libffi (buildrequire libffi-devel in python3-base) - add new key to keyring (signed by keys already in keyring) - introduced common configure section between python3 and python3-base - moved pyconfig.h and Makefile to devel subpackage as distutils no longer need it at runtime - added python-rpm-macros dependency, regenerated macros file, drop macros.python3.py because it is not used now - improve summaries and descriptions (fixes bsc#917607) - enabled Link-Time Optimization, see what happens - including skipped_tests.py in pre_checkin.sh run - run specs through spec-cleaner, rearrange sections- move _hashlib and _ssl modules and tests to python3-base - recommend python3- Skip test_asyncio under qemu_user_space_build- Add Python-3.5.1-fix_lru_cache_copying.patch Fix copying the lru_cache() wrapper object. Fixes deep-copying lru_cache regression, which worked on previous versions of python but fails on python 3.5. This fixes a bunch of packages in devel:languages:python3. See: https://bugs.python.org/issue25447- Build the docs in .qch format as well- update to 3.5.1 * bugfix-only release, dozens of bugs fixed - Drop upstreamed Python-3.5.0-_Py_atomic_xxx-symbols.patch - "Python3" to "Python 3" in summary * This seems cleaner and fixes and rpmlint warning- Add Python-3.5.0-_Py_atomic_xxx-symbols.patch This fixes a build error for many packages that use the Python, C-API. This patch is already accepted upstream and is slated to appear in python 3.5.1.- update to 3.5.0 * coroutines with async/await syntax * matrix multiplication operator `@` * unpacking generalizations * new modules `typing` and `zipapp` * type annotations * .pyo files replaced by custom suffixes for optimization levels in __pycache__ * support for memory BIO in ssl module * performance improvements in several modules * and many more - removals and behavior changes * deprecated `__version__` is removed * support for .pyo files was removed * system calls are auto-retried on EINTR * bare generator expressions in function calls now cause SyntaxError (change "f(x for x in i)" to "f((x for x in i))" to fix) * removed undocumented `format` member of private `PyMemoryViewObject` struct * renamed `PyMemAllocator` to `PyMemAllocatorEx` - redefine %dynlib macro to reflect that modules now have arch+os as part of name - module `time` is now built-in - dropped upstreamed patches: python-3.4.1-fix-faulthandler.patch python-3.4.3-test-conditional-ssl.patch python-fix-short-dh.patch (also dropped dh2048.pem required for this patch) - updated patch Python-3.3.0b2-multilib.patch to Python-3.5.0-multilib.patch - python-ncurses-6.0-accessors.patch taken from python 2 to fix build failure with new gcc + ncurses- Add python3-ncurses-6.0-accessors.patch: Fix build with NCurses 6.0 and OPAQUE_WINDOW set to 1.- improve import_failed hook to do the right thing when invoking missing modules with "python3 -m modulename" (boo#942751)- Build with --enable-loadable-sqlite-extensions to make it works as geospatial database.- Fix source list for previous change (add dh2048.pem).- dh2048.pem: added generated 2048 dh parameter set to fix ssl test (bsc#935856) - python-fix-short-dh.patch: replace the 512 bits dh parameter set by 2048 bits to fix build with new openssl 1.0.2c (bsc#935856)- ctypes-libffi-aarch64.patch: remove upstreamed patch - python-2.7-libffi-aarch64.patch: Fix argument passing in libffi for aarch64- drop the PDF subpackage (removes the massive texlive dependency, and most likely nobody is using the PDFs anyway)- python-3.4.3-test-conditional-ssl.patch - restore tests failing because test_urllib was unconditionally importing ssl (without really needing it) - restore functionality of multilib patch - drop libffi-ppc64le.diff because upstream completely changed everything yet again (sorry ppc64 folks :| )- Update to version 3.4.3 - Drop upstreamed CVE-2014-4650-CGIHTTPServer-traversal.patch (bpo#21766)- Add python-3.4.1-fix-faulthandler.patch, upstream patch for bogus faulthandler which fails with GCC 5.- asyncio has been merged in python3 main package; provide and obsolete it - Remove obsolete AUTHORS section - Remove redundant %clean section- Only pkgconfig(x11) is required for build, not the whole set of packages provided by xorg-x11-devel metapackage.- add %python3_version rpm macro for Fedora compatibility - add missing argument in import_failed, rename Novell Bugzilla to SUSE Bugzillas390zp3a 1668422781  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU3.9.15-150300.4.21.13.9.15-150300.4.21.1      !!!!!!""""""""""""""""""""python3.9MiscACKSHISTORYNEWSPortingREADMEREADME.coverityREADME.valgrindSpecialBuilds.txtcoverity_model.cgdbinitindent.propython-config.inpython-config.sh.inpython-embed.pc.inpython-wing3.wprpython-wing4.wprpython-wing5.wprpython.manpython.pc.inrequirements-test.txtsvnmap.txtvalgrind-python.suppvgrindefshtml_downloads2797284842be2cdf02d8608b2ff5cf6ctzinfo_examples.py_imageshashlib-blake2-tree.pnglogging_flow.pngpathlib-inheritance.pngtk_msg.pngturtle-star.pngwin_installer.png_sourcesabout.rst.txtbugs.rst.txtc-apiabstract.rst.txtallocation.rst.txtapiabiversion.rst.txtarg.rst.txtbool.rst.txtbuffer.rst.txtbytearray.rst.txtbytes.rst.txtcall.rst.txtcapsule.rst.txtcell.rst.txtcode.rst.txtcodec.rst.txtcomplex.rst.txtconcrete.rst.txtcontextvars.rst.txtconversion.rst.txtcoro.rst.txtdatetime.rst.txtdescriptor.rst.txtdict.rst.txtexceptions.rst.txtfile.rst.txtfloat.rst.txtfunction.rst.txtgcsupport.rst.txtgen.rst.txtimport.rst.txtindex.rst.txtinit.rst.txtinit_config.rst.txtintro.rst.txtiter.rst.txtiterator.rst.txtlist.rst.txtlong.rst.txtmapping.rst.txtmarshal.rst.txtmemory.rst.txtmemoryview.rst.txtmethod.rst.txtmodule.rst.txtnone.rst.txtnumber.rst.txtobjbuffer.rst.txtobject.rst.txtobjimpl.rst.txtrefcounting.rst.txtreflection.rst.txtsequence.rst.txtset.rst.txtslice.rst.txtstable.rst.txtstructures.rst.txtsys.rst.txttuple.rst.txttype.rst.txttypehints.rst.txttypeobj.rst.txtunicode.rst.txtutilities.rst.txtveryhigh.rst.txtweakref.rst.txtcontents.rst.txtcopyright.rst.txtdistributingindex.rst.txtdistutils_setuptools_disclaimer.rst.txtapiref.rst.txtbuiltdist.rst.txtcommandref.rst.txtconfigfile.rst.txtexamples.rst.txtextending.rst.txtindex.rst.txtintroduction.rst.txtpackageindex.rst.txtsetupscript.rst.txtsourcedist.rst.txtuploading.rst.txtextendingbuilding.rst.txtembedding.rst.txtextending.rst.txtindex.rst.txtnewtypes.rst.txtnewtypes_tutorial.rst.txtwindows.rst.txtfaqdesign.rst.txtextending.rst.txtgeneral.rst.txtgui.rst.txtindex.rst.txtinstalled.rst.txtlibrary.rst.txtprogramming.rst.txtwindows.rst.txtglossary.rst.txthowtoargparse.rst.txtclinic.rst.txtcporting.rst.txtcurses.rst.txtdescriptor.rst.txtfunctional.rst.txtindex.rst.txtinstrumentation.rst.txtipaddress.rst.txtlogging-cookbook.rst.txtlogging.rst.txtpyporting.rst.txtregex.rst.txtsockets.rst.txtsorting.rst.txtunicode.rst.txturllib2.rst.txtinstallindex.rst.txtinstallingindex.rst.txtlibrary2to3.rst.txt__future__.rst.txt__main__.rst.txt_thread.rst.txtabc.rst.txtaifc.rst.txtallos.rst.txtarchiving.rst.txtargparse.rst.txtarray.rst.txtast.rst.txtasynchat.rst.txtasyncio-api-index.rst.txtasyncio-dev.rst.txtasyncio-eventloop.rst.txtasyncio-exceptions.rst.txtasyncio-future.rst.txtasyncio-llapi-index.rst.txtasyncio-platforms.rst.txtasyncio-policy.rst.txtasyncio-protocol.rst.txtasyncio-queue.rst.txtasyncio-stream.rst.txtasyncio-subprocess.rst.txtasyncio-sync.rst.txtasyncio-task.rst.txtasyncio.rst.txtasyncore.rst.txtatexit.rst.txtaudioop.rst.txtaudit_events.rst.txtbase64.rst.txtbdb.rst.txtbinary.rst.txtbinascii.rst.txtbinhex.rst.txtbisect.rst.txtbuiltins.rst.txtbz2.rst.txtcalendar.rst.txtcgi.rst.txtcgitb.rst.txtchunk.rst.txtcmath.rst.txtcmd.rst.txtcode.rst.txtcodecs.rst.txtcodeop.rst.txtcollections.abc.rst.txtcollections.rst.txtcolorsys.rst.txtcompileall.rst.txtconcurrency.rst.txtconcurrent.futures.rst.txtconcurrent.rst.txtconfigparser.rst.txtconstants.rst.txtcontextlib.rst.txtcontextvars.rst.txtcopy.rst.txtcopyreg.rst.txtcrypt.rst.txtcrypto.rst.txtcsv.rst.txtctypes.rst.txtcurses.ascii.rst.txtcurses.panel.rst.txtcurses.rst.txtcustominterp.rst.txtdataclasses.rst.txtdatatypes.rst.txtdatetime.rst.txtdbm.rst.txtdebug.rst.txtdecimal.rst.txtdevelopment.rst.txtdevmode.rst.txtdialog.rst.txtdifflib.rst.txtdis.rst.txtdistribution.rst.txtdistutils.rst.txtdoctest.rst.txtemail.charset.rst.txtemail.compat32-message.rst.txtemail.contentmanager.rst.txtemail.encoders.rst.txtemail.errors.rst.txtemail.examples.rst.txtemail.generator.rst.txtemail.header.rst.txtemail.headerregistry.rst.txtemail.iterators.rst.txtemail.message.rst.txtemail.mime.rst.txtemail.parser.rst.txtemail.policy.rst.txtemail.rst.txtemail.utils.rst.txtensurepip.rst.txtenum.rst.txterrno.rst.txtexceptions.rst.txtfaulthandler.rst.txtfcntl.rst.txtfilecmp.rst.txtfileformats.rst.txtfileinput.rst.txtfilesys.rst.txtfnmatch.rst.txtformatter.rst.txtfractions.rst.txtframeworks.rst.txtftplib.rst.txtfunctional.rst.txtfunctions.rst.txtfunctools.rst.txtgc.rst.txtgetopt.rst.txtgetpass.rst.txtgettext.rst.txtglob.rst.txtgraphlib.rst.txtgrp.rst.txtgzip.rst.txthashlib.rst.txtheapq.rst.txthmac.rst.txthtml.entities.rst.txthtml.parser.rst.txthtml.rst.txthttp.client.rst.txthttp.cookiejar.rst.txthttp.cookies.rst.txthttp.rst.txthttp.server.rst.txti18n.rst.txtidle.rst.txtimaplib.rst.txtimghdr.rst.txtimp.rst.txtimportlib.metadata.rst.txtimportlib.rst.txtindex.rst.txtinspect.rst.txtinternet.rst.txtintro.rst.txtio.rst.txtipaddress.rst.txtipc.rst.txtitertools.rst.txtjson.rst.txtkeyword.rst.txtlanguage.rst.txtlinecache.rst.txtlocale.rst.txtlogging.config.rst.txtlogging.handlers.rst.txtlogging.rst.txtlzma.rst.txtmailbox.rst.txtmailcap.rst.txtmarkup.rst.txtmarshal.rst.txtmath.rst.txtmimetypes.rst.txtmisc.rst.txtmm.rst.txtmmap.rst.txtmodulefinder.rst.txtmodules.rst.txtmsilib.rst.txtmsvcrt.rst.txtmultiprocessing.rst.txtmultiprocessing.shared_memory.rst.txtnetdata.rst.txtnetrc.rst.txtnis.rst.txtnntplib.rst.txtnumbers.rst.txtnumeric.rst.txtoperator.rst.txtoptparse.rst.txtos.path.rst.txtos.rst.txtossaudiodev.rst.txtparser.rst.txtpathlib.rst.txtpdb.rst.txtpersistence.rst.txtpickle.rst.txtpickletools.rst.txtpipes.rst.txtpkgutil.rst.txtplatform.rst.txtplistlib.rst.txtpoplib.rst.txtposix.rst.txtpprint.rst.txtprofile.rst.txtpty.rst.txtpwd.rst.txtpy_compile.rst.txtpyclbr.rst.txtpydoc.rst.txtpyexpat.rst.txtpython.rst.txtqueue.rst.txtquopri.rst.txtrandom.rst.txtre.rst.txtreadline.rst.txtreprlib.rst.txtresource.rst.txtrlcompleter.rst.txtrunpy.rst.txtsched.rst.txtsecrets.rst.txtsecurity_warnings.rst.txtselect.rst.txtselectors.rst.txtshelve.rst.txtshlex.rst.txtshutil.rst.txtsignal.rst.txtsite.rst.txtsmtpd.rst.txtsmtplib.rst.txtsndhdr.rst.txtsocket.rst.txtsocketserver.rst.txtspwd.rst.txtsqlite3.rst.txtssl.rst.txtstat.rst.txtstatistics.rst.txtstdtypes.rst.txtstring.rst.txtstringprep.rst.txtstruct.rst.txtsubprocess.rst.txtsunau.rst.txtsuperseded.rst.txtsymbol.rst.txtsymtable.rst.txtsys.rst.txtsysconfig.rst.txtsyslog.rst.txttabnanny.rst.txttarfile.rst.txttelnetlib.rst.txttempfile.rst.txttermios.rst.txttest.rst.txttext.rst.txttextwrap.rst.txtthreading.rst.txttime.rst.txttimeit.rst.txttk.rst.txttkinter.colorchooser.rst.txttkinter.dnd.rst.txttkinter.font.rst.txttkinter.messagebox.rst.txttkinter.rst.txttkinter.scrolledtext.rst.txttkinter.tix.rst.txttkinter.ttk.rst.txttoken.rst.txttokenize.rst.txttrace.rst.txttraceback.rst.txttracemalloc.rst.txttty.rst.txtturtle.rst.txttypes.rst.txttyping.rst.txtunicodedata.rst.txtunittest.mock-examples.rst.txtunittest.mock.rst.txtunittest.rst.txtunix.rst.txturllib.error.rst.txturllib.parse.rst.txturllib.request.rst.txturllib.robotparser.rst.txturllib.rst.txtuu.rst.txtuuid.rst.txtvenv.rst.txtwarnings.rst.txtwave.rst.txtweakref.rst.txtwebbrowser.rst.txtwindows.rst.txtwinreg.rst.txtwinsound.rst.txtwsgiref.rst.txtxdrlib.rst.txtxml.dom.minidom.rst.txtxml.dom.pulldom.rst.txtxml.dom.rst.txtxml.etree.elementtree.rst.txtxml.rst.txtxml.sax.handler.rst.txtxml.sax.reader.rst.txtxml.sax.rst.txtxml.sax.utils.rst.txtxmlrpc.client.rst.txtxmlrpc.rst.txtxmlrpc.server.rst.txtzipapp.rst.txtzipfile.rst.txtzipimport.rst.txtzlib.rst.txtzoneinfo.rst.txtlicense.rst.txtreferencecompound_stmts.rst.txtdatamodel.rst.txtexecutionmodel.rst.txtexpressions.rst.txtgrammar.rst.txtimport.rst.txtindex.rst.txtintroduction.rst.txtlexical_analysis.rst.txtsimple_stmts.rst.txttoplevel_components.rst.txttutorialappendix.rst.txtappetite.rst.txtclasses.rst.txtcontrolflow.rst.txtdatastructures.rst.txterrors.rst.txtfloatingpoint.rst.txtindex.rst.txtinputoutput.rst.txtinteractive.rst.txtinterpreter.rst.txtintroduction.rst.txtmodules.rst.txtstdlib.rst.txtstdlib2.rst.txtvenv.rst.txtwhatnow.rst.txtusingcmdline.rst.txteditors.rst.txtindex.rst.txtmac.rst.txtunix.rst.txtwindows.rst.txtwhatsnew2.0.rst.txt2.1.rst.txt2.2.rst.txt2.3.rst.txt2.4.rst.txt2.5.rst.txt2.6.rst.txt2.7.rst.txt3.0.rst.txt3.1.rst.txt3.2.rst.txt3.3.rst.txt3.4.rst.txt3.5.rst.txt3.6.rst.txt3.7.rst.txt3.8.rst.txt3.9.rst.txtchangelog.rst.txtindex.rst.txt_staticajax-loader.gifbasic.csscaret-down.svgchangelog_search.jsclassic.csscomment-bright.pngcomment-close.pngcomment.pngcopybutton.jsdefault.cssdoctools.jsdocumentation_options.jsdown-pressed.pngdown.pngfile.pngjquery-3.2.1.jsjquery.jslanguage_data.jsmenu.jsminus.pngopensearch.xmlplus.pngpy.pngpy.svgpydoctheme.csspygments.csssearchtools.jssidebar.jsunderscore-1.3.1.jsunderscore.jsup-pressed.pngup.pngwebsupport.jsabout.htmlbugs.htmlc-apiabstract.htmlallocation.htmlapiabiversion.htmlarg.htmlbool.htmlbuffer.htmlbytearray.htmlbytes.htmlcall.htmlcapsule.htmlcell.htmlcode.htmlcodec.htmlcomplex.htmlconcrete.htmlcontextvars.htmlconversion.htmlcoro.htmldatetime.htmldescriptor.htmldict.htmlexceptions.htmlfile.htmlfloat.htmlfunction.htmlgcsupport.htmlgen.htmlimport.htmlindex.htmlinit.htmlinit_config.htmlintro.htmliter.htmliterator.htmllist.htmllong.htmlmapping.htmlmarshal.htmlmemory.htmlmemoryview.htmlmethod.htmlmodule.htmlnone.htmlnumber.htmlobjbuffer.htmlobject.htmlobjimpl.htmlrefcounting.htmlreflection.htmlsequence.htmlset.htmlslice.htmlstable.htmlstructures.htmlsys.htmltuple.htmltype.htmltypehints.htmltypeobj.htmlunicode.htmlutilities.htmlveryhigh.htmlweakref.htmlcontents.htmlcopyright.htmldistributingindex.htmldistutils_setuptools_disclaimer.htmlapiref.htmlbuiltdist.htmlcommandref.htmlconfigfile.htmlexamples.htmlextending.htmlindex.htmlintroduction.htmlpackageindex.htmlsetupscript.htmlsourcedist.htmluploading.htmldownload.htmlextendingbuilding.htmlembedding.htmlextending.htmlindex.htmlnewtypes.htmlnewtypes_tutorial.htmlwindows.htmlfaqdesign.htmlextending.htmlgeneral.htmlgui.htmlindex.htmlinstalled.htmllibrary.htmlprogramming.htmlwindows.htmlgenindex-A.htmlgenindex-B.htmlgenindex-C.htmlgenindex-D.htmlgenindex-E.htmlgenindex-F.htmlgenindex-G.htmlgenindex-H.htmlgenindex-I.htmlgenindex-J.htmlgenindex-K.htmlgenindex-L.htmlgenindex-M.htmlgenindex-N.htmlgenindex-O.htmlgenindex-P.htmlgenindex-Q.htmlgenindex-R.htmlgenindex-S.htmlgenindex-Symbols.htmlgenindex-T.htmlgenindex-U.htmlgenindex-V.htmlgenindex-W.htmlgenindex-X.htmlgenindex-Y.htmlgenindex-Z.htmlgenindex-_.htmlgenindex-all.htmlgenindex.htmlglossary.htmlhowtoargparse.htmlclinic.htmlcporting.htmlcurses.htmldescriptor.htmlfunctional.htmlindex.htmlinstrumentation.htmlipaddress.htmllogging-cookbook.htmllogging.htmlpyporting.htmlregex.htmlsockets.htmlsorting.htmlunicode.htmlurllib2.htmlindex.htmlinstallindex.htmlinstallingindex.htmllibrary2to3.html__future__.html__main__.html_thread.htmlabc.htmlaifc.htmlallos.htmlarchiving.htmlargparse.htmlarray.htmlast.htmlasynchat.htmlasyncio-api-index.htmlasyncio-dev.htmlasyncio-eventloop.htmlasyncio-exceptions.htmlasyncio-future.htmlasyncio-llapi-index.htmlasyncio-platforms.htmlasyncio-policy.htmlasyncio-protocol.htmlasyncio-queue.htmlasyncio-stream.htmlasyncio-subprocess.htmlasyncio-sync.htmlasyncio-task.htmlasyncio.htmlasyncore.htmlatexit.htmlaudioop.htmlaudit_events.htmlbase64.htmlbdb.htmlbinary.htmlbinascii.htmlbinhex.htmlbisect.htmlbuiltins.htmlbz2.htmlcalendar.htmlcgi.htmlcgitb.htmlchunk.htmlcmath.htmlcmd.htmlcode.htmlcodecs.htmlcodeop.htmlcollections.abc.htmlcollections.htmlcolorsys.htmlcompileall.htmlconcurrency.htmlconcurrent.futures.htmlconcurrent.htmlconfigparser.htmlconstants.htmlcontextlib.htmlcontextvars.htmlcopy.htmlcopyreg.htmlcrypt.htmlcrypto.htmlcsv.htmlctypes.htmlcurses.ascii.htmlcurses.htmlcurses.panel.htmlcustominterp.htmldataclasses.htmldatatypes.htmldatetime.htmldbm.htmldebug.htmldecimal.htmldevelopment.htmldevmode.htmldialog.htmldifflib.htmldis.htmldistribution.htmldistutils.htmldoctest.htmlemail.charset.htmlemail.compat32-message.htmlemail.contentmanager.htmlemail.encoders.htmlemail.errors.htmlemail.examples.htmlemail.generator.htmlemail.header.htmlemail.headerregistry.htmlemail.htmlemail.iterators.htmlemail.message.htmlemail.mime.htmlemail.parser.htmlemail.policy.htmlemail.utils.htmlensurepip.htmlenum.htmlerrno.htmlexceptions.htmlfaulthandler.htmlfcntl.htmlfilecmp.htmlfileformats.htmlfileinput.htmlfilesys.htmlfnmatch.htmlformatter.htmlfractions.htmlframeworks.htmlftplib.htmlfunctional.htmlfunctions.htmlfunctools.htmlgc.htmlgetopt.htmlgetpass.htmlgettext.htmlglob.htmlgraphlib.htmlgrp.htmlgzip.htmlhashlib.htmlheapq.htmlhmac.htmlhtml.entities.htmlhtml.htmlhtml.parser.htmlhttp.client.htmlhttp.cookiejar.htmlhttp.cookies.htmlhttp.htmlhttp.server.htmli18n.htmlidle.htmlimaplib.htmlimghdr.htmlimp.htmlimportlib.htmlimportlib.metadata.htmlindex.htmlinspect.htmlinternet.htmlintro.htmlio.htmlipaddress.htmlipc.htmlitertools.htmljson.htmlkeyword.htmllanguage.htmllinecache.htmllocale.htmllogging.config.htmllogging.handlers.htmllogging.htmllzma.htmlmailbox.htmlmailcap.htmlmarkup.htmlmarshal.htmlmath.htmlmimetypes.htmlmisc.htmlmm.htmlmmap.htmlmodulefinder.htmlmodules.htmlmsilib.htmlmsvcrt.htmlmultiprocessing.htmlmultiprocessing.shared_memory.htmlnetdata.htmlnetrc.htmlnis.htmlnntplib.htmlnumbers.htmlnumeric.htmloperator.htmloptparse.htmlos.htmlos.path.htmlossaudiodev.htmlparser.htmlpathlib.htmlpdb.htmlpersistence.htmlpickle.htmlpickletools.htmlpipes.htmlpkgutil.htmlplatform.htmlplistlib.htmlpoplib.htmlposix.htmlpprint.htmlprofile.htmlpty.htmlpwd.htmlpy_compile.htmlpyclbr.htmlpydoc.htmlpyexpat.htmlpython.htmlqueue.htmlquopri.htmlrandom.htmlre.htmlreadline.htmlreprlib.htmlresource.htmlrlcompleter.htmlrunpy.htmlsched.htmlsecrets.htmlsecurity_warnings.htmlselect.htmlselectors.htmlshelve.htmlshlex.htmlshutil.htmlsignal.htmlsite.htmlsmtpd.htmlsmtplib.htmlsndhdr.htmlsocket.htmlsocketserver.htmlspwd.htmlsqlite3.htmlssl.htmlstat.htmlstatistics.htmlstdtypes.htmlstring.htmlstringprep.htmlstruct.htmlsubprocess.htmlsunau.htmlsuperseded.htmlsymbol.htmlsymtable.htmlsys.htmlsysconfig.htmlsyslog.htmltabnanny.htmltarfile.htmltelnetlib.htmltempfile.htmltermios.htmltest.htmltext.htmltextwrap.htmlthreading.htmltime.htmltimeit.htmltk.htmltkinter.colorchooser.htmltkinter.dnd.htmltkinter.font.htmltkinter.htmltkinter.messagebox.htmltkinter.scrolledtext.htmltkinter.tix.htmltkinter.ttk.htmltoken.htmltokenize.htmltrace.htmltraceback.htmltracemalloc.htmltty.htmlturtle.htmltypes.htmltyping.htmlunicodedata.htmlunittest.htmlunittest.mock-examples.htmlunittest.mock.htmlunix.htmlurllib.error.htmlurllib.htmlurllib.parse.htmlurllib.request.htmlurllib.robotparser.htmluu.htmluuid.htmlvenv.htmlwarnings.htmlwave.htmlweakref.htmlwebbrowser.htmlwindows.htmlwinreg.htmlwinsound.htmlwsgiref.htmlxdrlib.htmlxml.dom.htmlxml.dom.minidom.htmlxml.dom.pulldom.htmlxml.etree.elementtree.htmlxml.htmlxml.sax.handler.htmlxml.sax.htmlxml.sax.reader.htmlxml.sax.utils.htmlxmlrpc.client.htmlxmlrpc.htmlxmlrpc.server.htmlzipapp.htmlzipfile.htmlzipimport.htmlzlib.htmlzoneinfo.htmllicense.htmlobjects.invpy-modindex.htmlreferencecompound_stmts.htmldatamodel.htmlexecutionmodel.htmlexpressions.htmlgrammar.htmlimport.htmlindex.htmlintroduction.htmllexical_analysis.htmlsimple_stmts.htmltoplevel_components.htmlsearch.htmlsearchindex.jstutorialappendix.htmlappetite.htmlclasses.htmlcontrolflow.htmldatastructures.htmlerrors.htmlfloatingpoint.htmlindex.htmlinputoutput.htmlinteractive.htmlinterpreter.htmlintroduction.htmlmodules.htmlstdlib.htmlstdlib2.htmlvenv.htmlwhatnow.htmlusingcmdline.htmleditors.htmlindex.htmlmac.htmlunix.htmlwindows.htmlwhatsnew2.0.html2.1.html2.2.html2.3.html2.4.html2.5.html2.6.html2.7.html3.0.html3.1.html3.2.html3.3.html3.4.html3.5.html3.6.html3.7.html3.8.html3.9.htmlchangelog.htmlindex.html/usr/share/doc/packages//usr/share/doc/packages/python3.9//usr/share/doc/packages/python3.9/Misc//usr/share/doc/packages/python3.9/html//usr/share/doc/packages/python3.9/html/_downloads//usr/share/doc/packages/python3.9/html/_downloads/2797284842be2cdf02d8608b2ff5cf6c//usr/share/doc/packages/python3.9/html/_images//usr/share/doc/packages/python3.9/html/_sources//usr/share/doc/packages/python3.9/html/_sources/c-api//usr/share/doc/packages/python3.9/html/_sources/distributing//usr/share/doc/packages/python3.9/html/_sources/distutils//usr/share/doc/packages/python3.9/html/_sources/extending//usr/share/doc/packages/python3.9/html/_sources/faq//usr/share/doc/packages/python3.9/html/_sources/howto//usr/share/doc/packages/python3.9/html/_sources/install//usr/share/doc/packages/python3.9/html/_sources/installing//usr/share/doc/packages/python3.9/html/_sources/library//usr/share/doc/packages/python3.9/html/_sources/reference//usr/share/doc/packages/python3.9/html/_sources/tutorial//usr/share/doc/packages/python3.9/html/_sources/using//usr/share/doc/packages/python3.9/html/_sources/whatsnew//usr/share/doc/packages/python3.9/html/_static//usr/share/doc/packages/python3.9/html/c-api//usr/share/doc/packages/python3.9/html/distributing//usr/share/doc/packages/python3.9/html/distutils//usr/share/doc/packages/python3.9/html/extending//usr/share/doc/packages/python3.9/html/faq//usr/share/doc/packages/python3.9/html/howto//usr/share/doc/packages/python3.9/html/install//usr/share/doc/packages/python3.9/html/installing//usr/share/doc/packages/python3.9/html/library//usr/share/doc/packages/python3.9/html/reference//usr/share/doc/packages/python3.9/html/tutorial//usr/share/doc/packages/python3.9/html/using//usr/share/doc/packages/python3.9/html/whatsnew/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:26740/SUSE_SLE-15-SP3_Update/46830a52e437121aaf83c93ebea4c70a-python39.SUSE_SLE-15-SP3_Update:docdrpmxz5s390x-suse-linux      directoryUTF-8 Unicode textAlgol 68 source, UTF-8 Unicode textASCII textPython script, ASCII text executablePOSIX shell script, ASCII text executabletroff or preprocessor input, ASCII textPNG image data, 500 x 320, 8-bit colormap, non-interlacedPNG image data, 955 x 758, 8-bit colormap, non-interlacedPNG image data, 538 x 319, 8-bit colormap, non-interlacedPNG image data, 978 x 175, 8-bit/color RGB, non-interlacedPNG image data, 250 x 250, 8-bit/color RGB, non-interlacedPNG image data, 706 x 449, 8-bit/color RGBA, non-interlacedASCII text, with very long linesC source, ASCII textLaTeX document, ASCII textPython script, UTF-8 Unicode text executableAlgol 68 source, ASCII textHTML document, ASCII textPython script text executable Python script, ASCII text executablePython script, ASCII text executable, with very long linesGIF image data, version 89a, 16 x 16SVG Scalable Vector Graphics imagePNG image data, 16 x 16, 8-bit/color RGBA, non-interlacedPNG image data, 16 x 16, 8-bit gray+alpha, non-interlacedPNG image data, 11 x 11, 8-bit grayscale, non-interlacedXML 1.0 document, ASCII textHTML document, UTF-8 Unicode text, with very long linesHTML document, ASCII text, with very long linesASCII text, with very long lines, with no line terminators0 G/_0python393.9utf-85fd699316a6ee9a3ff655138bf2d2ec245212fb1cd2ddb358dec66696b4be60d? 7zXZ !t/;M]"k%a WJj8elsl2irq3Q7.Sl0/`4B⇲pe~mڴkV05-V0Ȃ>a6@y]xGw%tfhPC 'Mh$pttdx(ȼF]Ə?9,|Gܪ QlUFIҒ*[JQwkT.r,Պ.oU%Ι4tuZuY|;Mɍ2k50G!8"#Bo9G@ ZE򙋰-rJ(=% ږ@A}15s7_췀Y%pcW)ljǕt=m@+8Kt_Qӷc=YP 8 |[f~G>H;xڳOܭanFPP&OR߷Mϡ.&6E+.-U (ꩆpSbyO|vx`\- / $M6rm md?}kW^{5@K4(m6ߟR GӘtVjaD6so.4rװ*~v&Ѩ9KkhTK:&˭VXM9u霠73ZdI=S= RM u'ġYJ녋Qyȩ4RvXjjXᄀ<\M8+GDMܾq-כD1y=[o*/\IҊϺį6,^?F}\,O5..m|YdфI_\^v@&="o9D<1NN4UI^uBu|Y}[z13C1ٓSryoI=~҂)+? YiqFQX[|h:u{$q^Mzǽ[R:PREy2>Kѧf)غ&jw$#pY dghұ%%W S&tt@p HhdǔZބ%}xrgiu'}t#c.C0 {?١ S/*#Y,$qi<1I&l_4zjwK.$e0)bqá䋁ay^q~#x'BhEXB䙇ASbv1ͤ c6@ bط0$P3~*(^(0=+ݣZ@x3/w5l 4Gnk>׮s'nl4yQ)c=%A]SR{:%{/+EVxnL(91Y!s r KgwR!Y/kZ x%iS[gin(>$L/kIN3BWAU" $عG{1 ܆b:;jZSʘ"2}Dq (88p>]Zb[}ځ׌̽24D- .24;Xv@t"%n~ijdy81#EL$ׄ)Vyd0fK&B*O 9v dyW9iP,3'ƃПnfDLlkHSUj,lJ MDK{W..`^f)MF*]4 r(,P(:(UoL ƹ:n^[^,0{3,3lM3ìMq% 1`D)7m]1)ȯG =jh\ z@%]xլRÊ)v3FK TBkⰡQٕg Unǫ@%vs򺞳LisE_6W j,13\c"P$k>әYi8Ǽ%}|,0ҫcՅ񔯮,Cիmj:Gl]Yy$8^:'U-h,=4׋wؿckS.ۨ0=#mLK=bKnJ{,7Z"`&N^9w>9^.Qm1atNA6$R-J $ lz+!N~<9#?,c]$ _dbw1&DsKr~=|pf> 0Tck7FE9dv㧐mOE-o}͎BhkBOز"ZZIΞ--Q쌏)8K*U'udײpc`WzVfA-Zfbfp7,1EYkMڊj{[Kc_X&Z~/[O((~f=sM+)6!XE+ش ĵ"5hWl7+2xV|+|48_1?`3a#NVq?dX,W+B`[ډI9q6kp.vQb@u7<{*Eh.8E5[7P-FjakO vg{M{z*ؚ̐{ Re 鴰?Am{Q+c1 ~]pښ=dhuW4Hq{~s*X]:Rxo7発e֕R[[Xs7v0(eyk/ $\yv/Ix{2,2៺\'vxsⲂ#s9mb  y|  0`D=ҝQhƿu&{k>kVmeSn*kc-tX&g GXvPИↇԝ.FkKQSY 1jR,.cV hH@mkoÍ蕒b.1kLd[TT @D_@u=~+Mf"tkx*Է VxNK'00Օu`4VTM`JR<Ì/n|mcrP%zޚ͗@K_A&ٹ?'h}yחW94΃2Nw7.j+呉Uٳ$kj0It~_-=VNt$d~Sa;b{8!z/UU&F[ӉChqcۂIY!?#(\ܥ7o0AX؂Ԕlȭǧԍ'M -2oyl*&Pg DS}@=2ǝ o药mu5lPqӶp~ru`E>HEH$=Cu{J 7 8͓Q䂄*%!CBb6o~E2FxU SM Ɓ;1UqM ΣP'LK A ڝ]ɴ.(vj#K^Hw.(nlt\' qgꖕMafɁ_*s~LEPH? !9~SHZXѡ C/VJU] 5Mlqd5L.d¶vG() <g15|IIK9ZvTHw65&ezyq|p ӧJnJ_GFܣ d ѫ/ӻr2)pB>T;H3 SsϬ<$チ7X_HkyA[ux*, >TF#rŝݸoY@*vptc⾾^vҪ^zg\G,SPa$B{?2VW%=: g&Wz-vV̉ٓ {{]洏 {zT^YV#;ό^jBѝzghNk֬f_]й<%;:Ӭ*7IlwɁ8z/a%iq@,~Pn&Ӻ=g e_s{#t0zy䭐Lxuʒ-mw-j5 M#hls]Zb NJ$'2w!Fa'[4ù)y44Qe&]ӄrK 6dOOx,)KrJXL83]8=͞褬xnEi @W5Wpr2Iꨭan%^0whGa(:RjWW]S4R@\5ଽ^pZGZX(ݝ,ʸ`$}~Ɵ*g9~kdrrq{K-!, QG]ٕݍS\H?RCCtF#Ԍݴy7ra?fXݺI[+rp`尰\^0R`s0jCxt 疡sy|o98CTnv~ G<oZ^Q 6amfC8_oG!uH cϹ`qT% f]\N%;3w'\ ۀ43 5넳6ѩ^5N6&qa+dH9(&@}7wSB{hqV3Ejbc-)'@unӝۅfހ@Va7jI؈pQ) Gojd]2wC8 /(n{7zP;zX0]FADg4M!7{Ɇ/9} 9%}K-Y,5V4HmPɫ8|*{@N6-S_/!uB(oGΧW1 Q{- \gU^(4%@:tM~bfcn(No$K$S)+jSƲj ѬԷۖ7Ssa;JX(xFZ >v]!A+ @/|joI4U1{/o0d,l>D$,ftr,KΨ0/ :{Ce0X$D鲢[K7zXZfV2 ny7 H1&:!&Gsc^i'GEݬcnsWex ZA)^\788%>aʢ{[NmCQӊhP #=h9~\<ڣ?2FLL'P.ycM HPrj.^!XT"x3zLMݎ? >ӈllQ!St5lЋL ,z%DP-6DZ-ubd]cCo%:K4! rAC!DM2B\20/閬,d {r-ߩ?6_wJ?qf+PƮ㼟6x;8dq( yOQsoCI;L8vֆA "b@,h+y3ކT5*SU+.c@=iWGLF"ox 0y*N_pL-akNgqaY8l#P:T9`tH/JeZ|ZVsD_\窙Pˠy?yge\(?;/4t縭8!(QDmT]1b@/]p5#kަ7jsPp3n=ޡDԻ*Ϭ$E. ;e}'uG(<˾dJK(۝ST_ʙEB{P{9eQXzad8β䎝uJS]X`JE>r?ӮZ .%%ُz,a Qő;*MŠ)n|t#9z~8cA-gedtҌ!Dp)p`: ;*I$nA9+B]ǝR\'P۰p=P)I>sϔ$=֌udib܂2S8S+;).-?{/׮ l2b1Fovh vӀ`]r76N9)(q4g A s ̶Th+$΁ Fx[Y =Go=a+io7i#zJWfi],`>)cj.QleΫ˞xwdܿF#TXU.SQi#m]O]iCFp-T]˽&w8N)SK5F S⤨0 RLblnLIFPZ`):0?o}A=m xip< S|a`xvcuM *zaelΖ@p,V,dF_dvA?2V>WSKw^JHomXx D۞ meHʽ@oՑ- ?{"aHՑ@ % `LzZ$W`/!f ǙsXdF 6ϡqNh,_@=!#:kUұ~L#ɎRW{d!xBn̗TeF(ĎߜQJ*ũ^p֫VY}'4#fc>9f8I8(wj@),T#R;QuZҷ) m-xr#cxfpyT*N vnaI5\oW#[ģ@\J?Ry5fID2u:%VT NllQV\ X3}#T@ ~fh7דRXʖ{c_7t7|hH.Så$=&ČNx4Ž+N8I.bi_,A'7JV1$C޲Љ>I:i݀xJ g'`wQv*ѧr0x-3 (g3"霰(-泙֘U\2~wwpBn[O\=|0[뙎N]Y+xXQ(K'._UؘqRE)d1 dJRr =ꈥ^GlˊW@((*Lz< >Ȅkɾm3 S3ug.lINTIy̠TV}w&/},1Ͻ}y3uqfJEQ&g:;RC{  ɉBkʀ9L̨Uߪ[ cݽRkm7b`f.Qy[/h>4 9NoHj/_VpfVdɄNn_0;C g?~RTUp~jB bƲ $ߤ@'h4jm~lR%#LROM\ki0 cY4w%n9mb,ޟ!Cˋ5c4/lrn9y/E_=QbzIo :Q1`Cw>3luD8ԙtkκY^`ܛP„&[ J W7R|`EáqD#uG-p'4+q?¼e" Ay}x$>%eż!RAJJBD-di^BL aBte^oxǮ7O/%e4pqBr WFRqRnwN0[X.aU{BA`><GI_]'76;HMV[>5tI(X$п;˺*Juc-/8?#,lz1L7韨yL5 ,JoÇbB ,w7E73|O̾ [S>fg?/Hܩ9љUOXʰ52La1ҁӼ!)cX&9dm랼k; )Ps-r)ɝd,GBA:ojUmUUOWDtS?8]XB@%.IoئTgc *W4\|z }zT"RϦZa ί(&XuYRJT~R6N@ f&_QKFHK0Gf sIVōJǫs_iv3Rp?㚨V<±BD\\l‰ VDw-O2ERa6-k⳺^` gN{Imk^LBǪ4*5c]H.Ɉ߰-', 84u+7M-O9oAIn $=a;+Pl'wӰ ef lg(h#PgXN`]uAƇ޹pe<+pWH8NuDIY@hdo A Q%s6(ubd4@ T'MlWeglH8u@Ia>nzgvwqM]<|J\%q>Y_*UѢFY?fD`Wn.뼡S4ĸ~K!ĩ.Mo6n?uE_V6֡AQ9H0b01u*ۓ9I,?S4ޅ cjʰ#C+15&W;h2sN҇fYR^imEP}e>uۗVTjW+Vw; k=펶/*5Hz]keS7xc緃L-yprG3Y sKSHe.83gSݷqMPoYZw Ě6V=6-h'B0oL.PC+촑'' l꜓۬(w:Pw뤷z=T nV+ڽ^}HjXl5H>]&ƕ_5'UX #k2ƒI3tʍxN4,ezٴ1;Lԣ4m|ft/[slm18-Hؽ|h%:ŵ(acDr.jkFǘNา`е˪]y%xvpgq$?jr|qz7v-%PϐUxU'G }bJsz ck|f.7B)#ƀ bQk*NAҊ,$Ez\0J-FyE;CV-XZ'j1C>Υp4jɂ!n< RA",,I`!T!cjAՠ@'3H/3gt5/jJYu>7*|M;b.w!=-(ii1:m`"H7.v?j"gOPJqDo}BYQw"í9U D A8m<8,ڝy$rʩAuxU9U}ÎD?C8me M7I~,H,Ajn)%bB[#Փgݧ#LO3Ȑf<^!-ӜmOzOy|ol`{V ~*cJ?4Q@4'F6j;xN͈lrլVa;P8mLFY&HZoЧ.Tt~<kvyT(b#Fn[nN/])~dN,W1Xއe7qt (<+ZcU$LC@IV NONxR&״7>ς2jɬZ;}y'LjOɞc>jQZs6j7bit P\hf7®3oMS뉔LR5Ry{ lL7DG>_0?gb<^?&'(tef{I$a\o%3-o6i7mk*E{ -,/)(OUMOHL0o]8ј1{ ^2pK=r0餙T7 w`jdWA™r-Id}H>~&3%"~YMQ=78z*8AN dᆂ#m J9OD@i&W$&8y%,RabD~GZP~ԁQn*J8H)uT|kEr^GKu^֯1Y%vj*P@֘ZyCk™o ʩx\{¾k6"6Ry+.uky|\WYն Q3:VNJH^hq>% p3>p~Kaҏ"MQGD(c#CG 'gp|PZ]ww ֚0}E@*0j>Ȏ_`8JC!w79bRiGXiA UVt{dw#c%iבr|\J"uVr=\Ew'{OZ&\y28Efh~j1> 8”H#9| ;ƴsL)β;TЅnۻ,yܣ(U"dY\G&d5]2L#O *q&^8pYF[~W!ukS@ťIC l앧N;fW~{zm^I!G Pq>xM_d)QK7]*atysxH/'8w TRO"cWfN ~ZyVwb2bKiwO}Cje[E+^z~xe7O"'Pr:wa@ZbfUi_uc ˎ݀I̷?- m <qm6yR9Qi{@2dq(<(MLf ?X&Hk䛧wu)[ uV;zۏv¦f)v,h LV( ݑځSee xϊ%1gi"?8+E,-?OnXTH7 9z]e1A7@Q(6EկY9qJQ,+wy}I-YbKVr뮾AG8ԼsHK )2{,;ye;rtGc3D83gV B%a y6~;;a*{ $ռ n@gmYbO((Pĉ[z4:|rϩ_Z4K/NP VM:@w,UElKр @2-Dɣa3BJӭt7|M\Pz/Ey-w牃b=*UhV+߆FP_ :' S-nN]lYtrn)Lї e,n"}o:~,iXs8d ' #TkAcZeCo:L}MXH Ҥ(BI9OvhIΙFDcCϞv|J|Pxid.,$gAZ0o|iS1bBFU k\!p3 ]HW`S xc9'Whz:o}ߝQO01!?&^H|$%D6 G'r,WIZ@k%5gO)T Kԙ!_lMR,4i`"3pz+<Vt11A+H/f/1ɥ'b-X{ptf0gYMUI lAVDt۷JJQ<yԀ =@/2SǞ7|7,y'kD|kNnEp_ƍ< }{7xlmiE`gV+.RO)2ӕ{)|;q{O?"=& :>,y}ݛ$nyy$i+lD(0apśʔ2Ta3"$M~Gq{y/ɔ}EAL5+ѿeͨ ]{sIJR3"bq}ܺiR!:Jj5+l/Vm:>VE)&KecLKZP. e#dz*dZ&iaZƠ̲?\nA/L [ 5tKʓ~8+putIĦ]_-TEJ-a/*]ϼL=TRP0 I>B6{r }7ۻjQ%n {nJ|YNFp?~X-c_6[dֺ~Km%I,'m#ʿAd[pM #uj:N]1: e޷.YD}Y;i*+xy!ZdD!!o~VLc{"DuV.0Ajd}P򘕥g_E5c' 4cG\.;& gTEGwM/^[ :%N,ebG҃$L6q{\8p_?i/dZUXg%pIxxtipҴ }oS"-N2/7@h7j[]{Tt !a[3jGϞS*BKkZ:o, tP_D+ts?^& \Gk"Sy#1p}򞎷 SBfD1zZ00@28'SSџ ߙ﬈PvNVf@cs-e*n26xVPqDR}CO;˦/Vq=V:Sp(,.;Pq+sXmKOeû {̮"'@.Ml~*-Ȕmf\!£Xe*dau`]eP5 Hqx'_*sаjXUIA{Ʋ<=-AbeRkk< ܆bBqsNI tAw Ӭ(^-is[dT֍ ȱ$9xRJrvԺ p&O8SW< mF<~5⸘{=|}1Wn+q&WIb;v("N;I>AC_G;(߬Sfr]ɧ+% kSD&19C,g64be3`fN\K6q?GnVxنp掍k zO8\s+-T6` 0;IOt&Y?ߒ0)@ٙ0aUmȾxSnVa-]HڹX/tkQt7Wa,^n* ʫ('z 3m- !#E.Hg|s/}b >q>hٶ~vM#>/äk!xS˲h1Rd;-痧b7|Љ %VnCxGZꅮ-ȥ ~jZ 2aIW^]FA8k64pgNK`.29V̔"͐š0plMwi$E8>^fc.$_UaS:`f4DS. 3DYIi 8Po > g-_$r5Y"0(o J/A48H>4xj2VœnSAϊ@v: y%Y+aillDv㤆Yf\ldsd4=aXL#D"w+מ>Mtsgx(pJZ eEo"%셫֭. 1#g(|)qB@cez%,pg/JZ0KGn^%<І' oF-۱)ղa&{8ӰfR81QlZjdxˊ8)y&MrQ/K c-]?-a( ExB- ji}/9jfh QBy_ɝĂj 65$DrP 'ѪZ;WD8WnW@\ruC(q@ZFݫRw /`UXJO1xUNB ;sl(6È%>`S/k@\DsK%BO3*7|b5 |/aJb_:k4jXz-lfLq6az3cQs}.і=LOdΒ(m Zgkp>.'~Kxo8;OqUT= 5~\ıpd%RX0$ԱZ'P0l>1vhݍ`!^9i] 0avr;UiO#c)>I"ͬKVW#⌥g`.R %D?_V9.7-v6S)A;$,dFtk)BL6ϑ=! ^蛏c2ʃ Dprby F1Uak$VBv2I^d.{i}+}7.6"*\@{|.\92òǼUVau+MO\y𛌈$NaC_J_(m*vK8ف~.1y,&zI/4A|fACi2>>UE]˥;kl`#tGYrtnT|[~u1K Ԇ|.GC[4A|^hD4\ФjMZ&zlĺmz/(0ev.$AZɞb}e l i;k1}M5{qKbsu(Brl"mբa׸ϴ $yX`|8}:%r9>^6ASc<Y\/eOYXB0ɷ cRL9nfSDAJ#A̍֘6h1҈ b` ۮ4+Լm M8G\yՉG ]1wx6Xc^;Z5Q!8GHpOid^XozDV/YCp nY(V_ bj,7#[;jK[V5{n#|R,IxTlRID7au$6$ݨlh 9KIoCu.%%:q?x7J11fJ ?Qy0E<moq p\, Y? Q ]W$-e _]_kqv}I_}\󻫼fgk_/G^r2*M_-l):ٺА`~$>S6bkqX=u!)KU!˃0ec ^3*nT) u"^Db_uS9W"磶;q|2-FV &0} N8=*ҕY}SH#)7Q씰qnu+.(<rV,-@$JTX;:|O9̥ Te̠dz{7/??\/\vMUsB{ej K_'Qx9< GiJcmpb0M; } FιS=/[{)0\X0 d㸌KǺB]yȢkZH=yLÈyE/q6;C.Ƿ=МU"y-`[)[!!ʏ5Fڭ5Ww_pӒۂ)Kf;JN }i@iitSQ^ޏhMc$UY\bݽl^U,'%P-Ӵ3x O칣RҜLj<ؚY"DҔi@KL6+ ȹ.^=GadRFڈ7B#Ƚ/˗ĽkypёR{`$W$Iȿ?d&.s`W~ |MiԵl@#dwTL:onܙlbWIX`JfQ%8R&T\w`.K^ilWۻꭓ *'[2;PΞ6EkLjFOx4;j|e77[xu3IPvCy32q6뇷2 iɅT}x9"wbN-ysTy.1f#XU5BLK2Ȑia/nA@3݅ ε`3)`wzn]Qf"͕hs+drJQ uU7)&~ YDg(߈]7/GB $$4Ѷ(%? H@UM0frz(x! !!7B189tOK㘙&Ip;"o.zi0t}X+,|F!- x~%~HlrN"Z`NPa(F&ψPm^ɗjԗsv qQG:lFaW?5k./ɦ@2Sn 7nk'l}K=!Yr3E>7vܦIsR:7[/FftR@oB.a'"Qs*6r7;娗M9vJ;b %2;⹓Ya%\|Vp &W IvVM7?՚}"i ꐈӁMWik+DaT~dQظžGn,nR^ 't8oŒ\?wiᓰ77Xyd1]Iw3iQI~CY, RHƫM@- 'k`}zZ2Lǡ03`6*C_s?͕ǨAD$/تɬ_ L!t##R uΤcu'ˤ+`.ʊ2,1С+(ɖ.[Cg u}@8,HkɕPߞ!/ȋp٨ݚ8P-Ej>F9 7Nڷ!(s n\WP04!&*Wuwqh|HIMwypph­$r=vvRR "E~̉|DNϋf)8T-V",݇a㮘-N04_iP$53"(ڏ$84nneu;hsB(aUROj$9#sR5 9^eSGA3#QII)|',\r}D |_ k]x~&Ճi {{LiPMo= (O_3@bSeE0|Y@ Ved;SP 8/bnd?JJ]x<\weN:)}>jɎH^̲-Kq?}(`sh.|(=AқNGƑi U^M\BW{D !}Y?qLGw3y{GW%6Y-%MI7TdWj|E]~X͢*#sPʕ:A\Rk(ܷrIa<-y' >L-*XEO43p)xB,xٔ_m@Og|zŤujZn[l 7D\XxEX{ީB V倦o{1F5CN67i˧MZR) xvY{1gē6-k¡o+[ 1"vww]zJSۍg{VJzsp}, R>{M26:2U1#<̚/{X9SYz!{~L7Jǂ.۶͇K|k0o'(o["GlWMc0碯$;s ᯾&~9Z{\}xqб 0Dm Qۅvg,3cy~/J E4Ny}#~ىӕ\F/@t4Zd"<;0O3l nh \n=Z(`^'> y}AYMm㗇E{ܥje\q wM_{PAe<CbS0܀6)Z"Jk<_CKb?]fPRVd]z(‹[l_G,DX>sm~u'I4C&Oy͂n)b/xO@tWS+dnFn d:/a3Yjt<1 :Jj n7$[f̋i$p `&u'iIM4hb@vw ;s1aZ ]z2GSg|x`pʁ R 4aZ Pl\fr(ʛ?O˙<\%M.W|N<ؿWN Ux$d7))!ZOjKlOLcO{5kE KоaB_|wrnxh3cV:+y xTbCfA fҶFNK`h,S:8{7s]LSk({T.mk@e%\8O`-֔ՠ`6UEJKГUEs80[&(K+y(΍7kG,$7jbG\^"z}۹jI;x,[!3~2urخJLS$خ[1&Om5Ӕq]B]A/4ǚ-k`[^Y yNIc` 6vƝ˦&`rϿA="dA.4<5`J[iGx5%Bdwq8Cƶj)جH#cx4UՊU9\%9K(@-ɴl *}I8-|GFX}S"|oޝ4f~ WlQx:ЯU[}փ7KP31؆Tp3=Zlr­񊹿ZKV#ĜWZjM;\C҈qWQ QlE)V;p;26]ZcE8РX;l'?"xr#}ؘUÒ dG'% cKO'QST/9h^y&//:Ϛ>ꀤ8ܼ_6Hɓ0Ha99-(03"ܟur\};$Yf3+A*B5~8zKJꉔ4$ZR^[dgBN)j?13j(++U>8d%4pCB%b7v((-;Tl5x!Xw9 %AЛ ^l3z]Z-kL$z|kB ?goJ EfHp6I1s$Scy?sg-<W6mF?k- NO2_ DD\=}! /f8'`u^`% a` @fW WFگDYt`?wC LP={nS s'Mrۊ$`ž"rU+EqAmBlAÔ$4%fp0mc F:H}}m;7~w6bÂNs[FnyC7BH Cj*,FW45Kֹkŏu!ER̄Xhr )IW3P{rup?jE]U2*4L\7?_+Jǚ‡? K%/K"9,j #K,A36c:mk'ٹV㹑ݟ &)b :ĝe'jSl,g^ޝr #? + . pk->G%@f >1( Oc6Ϧ=ŀnviniw:'Ɖt$/2-ld-꫹8 EOMg،1 )WeXcSd/>Rt[.v[DCe=QX@Dz3|P jot;LaY}>78[W>"o0q_f@d"QR$ǫ78 u;L/V-Oc+v/}%ϐ rw#=CՎ Z45wRvS?D*gk.59WO}*3,BLWU6؊rr $t8{ډcTcV`{>{cy. 9|IPknzxŽSܬ˜0&\cp=kz>fpKWxr.H87#_dow 5]@7*|;D 9B.NpM=֞+kPKkS,#i|"lվQ vwI[n $yur@%&)??Cj0FRn=LUƆ*υXSXZ<K<->`,Rի\9)%5CV?sRR$Vk* CX3%_$jEi|$LϭUf|?f/ -`0G=pS B}D3I1>HZ1. д@'\m'{G{QgzC+,] Дhvo\w%,P >Ɯh==g$s]'_!ӽQNJmVf\7#lM|+5;`¤f͔0EAg9 _6h~3(i0gy+WÜ-: (Mq4q;|$&Bԃ[;hu(Qdl$.6IWC= 'Q=)6!+$69r #esR #PC=ʾ8«J`đټPt VwsEfv!4ۭmB2 ރ~-PzN &84"1&)rDhF0# '<#4x=< 1 s8>(ɦ>Nt <#Ũ7$,ٖu+vz%_nj4'Kjp>av زVK]6xJQ_+`oi®fy* 403I'1p Y#x具Õ_Ξ>3Pf6j` e*I+CMDȦn<$N0YomHkq`ݵkv19jt#?VmQ_nxzq3HiɤCla()j?Q"[`'ul@i3ڜx-JV07j(5=f.>Ωf4@ uELwJV>h  S”83[cT}ţǡNC/3(.6\rv槪$f<>ޝMVP*U#F Gӯ'.hD{jXD*a5?A| 3F`Ӌhw%g`'M1+",}JN(kZr+XZQJsH7"0`תf{ݰ94 {ŀ֮%6=l13Q'yu*6CL3i&J,4Q)BT OTvC.l ȬZϏO5zZ0σ1_AϬȝ,:ŗ#Χ3Yzc#G[91h ቒkbA`oi>O{ +cɍ*Yn .N˂|_q]q<@|ىsdhZg(CFYi@|A+w̦<1 u XiJ^(U'!neJ@Ckp:k!F6ٯUݥ&EVͨMgviwCpN[ߏ[Z |Oam a `P3d&4I4VSJd)~*M CL ,ʅEK>{O9Ǯ}Rq/tgyt[p8H.aCA凴:+Doّݢ#De?WV5 mrVԶ#?ji,ZD>]A95Čru!^rHm #fY}ܚ :z:,_2s \)_p* pdDLHmޖz :nw1?J;a%&$EòěFpolBo+GRv+'5 '?i4* )4M]Bdd >  4dfԔ1hsIJ-S:s:dx29>AJ{uWO ]P\CgBĿn[EFQo0Y3SkUFRڽ+׆$A򂮛iaz+0[S'yʶc&#¼f ̀r\єt^Qr^`v!H ktVÁC}+o2&E;3 t 3r+d kyhÁ[ S zF ,YM\yțwXp\eW35ٍdalf'ͦ/5KW %te픃K`"Ƒ|O׎`-cTV}v(yNR" :cIbqj>큆NK 3Kuڴ.铮jrCP(-!ɑFo(ZR%rexȥ̥"Vck=KwJNӰJW"S)Ï1>2ٯ0GO³_cam4,vJXaJ]b}R=G!QE$@,UeB4︊ϙH6XG\v(I;Չkuz Z M;Ho _Գ&M讐sVČ4zW,|.=sև r.>dyuy8J@hZG+zMyFܩDs~|ӶoGX\ 7tnh0*ås#ԏG<.+M6s\KK2OH3 0ؘvn4[_ Y5>%wKi w[$flnҮZ IPϏKjK- wt;{{#EӸ:>n#K\;~L r<9wc.,m H6 j[n2˿1ѝ51}xޕ[>VDBې VBH(x\1+q"#

ę͹sm D:ygue_U3Mfl[AAˣN{L|*)(PpzqR۳J+sw%a1g :pJkP 'c6 sqw!^X^*U9p[[ -`0AFqc#u쯞J`?RCUnhWJz<71{Դh:Yq:E[6w)VVoS*C=lS,L ˹|5 ch]u'Y̪FI5PVڗvbspx$X:lxFHIZoReeyC#,+!Aiܙ8%^=5+2o^L50SN%l& O^t>\~y(f jk&zεzk26E[gCȜ]ς+=h/QB ^?Nmm36B|T6ֱׂ¯s;g8Unlq zp@I1)52S&;ռR k[d"2%GY2V:k˽ƍv(E ;u}ƞA2b,'1B+*I~s0VI|AR D-dP)r)7h+(lڎHMil_?(#cO+J%CG#kY7x& Gm23Sqv1g 18%uj C I wSu3C  ?ZF$9ܴ2;4 h^h`5) :f8Ԧ>4\* .4U"%ܿ ^DyNf)# *T/b.LOݟ,t lN(`[e{wu$qu^D s/< Zow?!%+ QoTw2;F8l8:zz`hӴ$vC(j{U7:)Qv@?dER#u47}tX6JFqW?o1m>F3ؕCi1al;mZ /inm}7, pw[La"a="!843::QP2/捁Uӟw3ݿFemTi'.[ǜ[ì#ԥ24ncbuG2c#/o4\,yr {̚yMxQ.i?bʃw1d?b!Nԅ!Ѩ~GiI@>K;T}6>٨SڌݛlV{hK0ާC>DtAbHʈn>νVy yց@ו>HA xvo<% W!Go|:J*>V2ք4O~;~Khg!\s[;k e/$gװ ŋB? =HrP}~]:N*XMe$"w~:%v%"ʔh_񦛜Ur)N[\>M6ʎ3„N7/:i*Mîݶxm|ty\4!i (%̚PZ5Z-">4Ws23: u)3uS∝,|JG0򃓰 Y?UDik+mϏ؆9䄧U$fPp5&uD\{6mAGTKRԜW@@)nXjG1R~a6]ᎎ>w\byNwqsmPO9*-Ai 3}ݕz6\bL|lTc% ́cM(cäuGc)t+ؓLF+%]!x! PR8їѾtt@ê#v h<s?Ryac^NOvB!V\u4rav軇,4()5T[Jt! ){EECt9wRwpleW^\-Vs4J;3%jLiPUV&@rh~Ņ/eGi4c],K32L8_gik)' ^Un7/e2BZ״XRԺ`P W2}gd<1.; uc1Y#3wВpWmnt\=0t?s R hf1.q7%fΐ @|{ ѢJcr՚M:g6 (HջĞ!9n}6(3PԞ{DVҲUS 1wz*ǕE]p釗VٍN>Y{ǘei*gBcͲLՔ۬ΠsNg>A41a^O~$CN2^fZ4E3lԭeԾ $P~KԊ.%\2~πۖ,'DP٠F}6utB~ `41sΨj|[ŗ\kS?TJǶUKo1m&['.;l'tDGGF/_7vL4,Ku.sJ*b"iri͙.>]{2_uP9PvS<>H o >ֹveRElaQໆiF3y 2.:R1Onu;b}"/۹4ͧqxof !y4\u /8w *ɞ5be>"M`=*?A {`zqٙ56C m L"*9㭀K5T}LF#zUxE~ɺݚqd@k9aD|:E66Z CXaczX s'zmzOQ(ޖbha[5uoFw2t'3q0,R# N;K U^7@n'e\hVuF`sLuiW_#iItj6ͬ;u%CJ UYqY R}yg\InOran 4W/J \-_M>R\eg'FQhr*+ !4&䣋O Pr^,p79h@K,{[ON¬~l <-gEivw^uK70 ULT ;l$;y5 v.FGkqM}"V&;  Xbx2 c#sF1ǝÏc 6P`]icIN߁u멟U :(59E\e58;]"NiVPs<- 3QiO&땒sn c}- x65DvצgC2fNHY !oJT ,APja7WR"5KgQvu 9qD/xempP1@o17\& 57d6 Kc5Pn!GȖ?U~DbEzPD_v>֪.H fti<#B_ګ0JעTYcN\t֎expj=ȯEԠS@ȁѷV8 g=\3EˈLכz[qRq]4\Jh&}Szm\科ŵ+Ŗ1 Ln WqB(OuX2`M2=փ$W@;DxK3S FJ)`TT[gZT%52[e(1LO=6U0߃xc7u(q[±oPrnX9~֓j?MI&Zd̘f 99VYmva Ta95֕V8 nr/Od~uT_6o}}.'ˎ YI;-ɤ8jZfRӆgo3LI^"O84_#t-0s:g=t+ᩭ+x7gE}҃Rџ}R%0H|dXQop'}8YMϝ2 lE}L .kb{Nr$04o7b@CV2lCᜎ[t~1 舎 %^A$m}^W'8wp'\1\s3+ުEj.TN%,aH>woJQqqt,Z ^(0cB XMI`V2J3rQrmkꞓ{- >!ZWXZ6&e39y{3FJ#2L#-<r,ݡn* }.iN91ol9!ֲܻ拮b]_)s#.p"5vȿjE~<^{.N ;"('G%_}Ά_U(LWڜcr1/#ksZQ?6/Q{]fXt@ sZ$頛6Px>ngMw+[l+Dj Ҩ(1RӸseD8MU:tp԰f1h<{yY5*5_9LFNށcH1g-+WG 8_w([|heSmv@FW{4]m#x~UfսԍI|b6kvaPKBŦ_X71V6*胦&` ^9/\p5Z |1j5)ZBrrAI,Ů?"vqX|,jN/+e_KY <a8U`ty䋏O$V 9aSD)V4Ss”fTUK騭c6bnҜijɼDm&x\HvOhSd ݆KB'Yt7-Ŗ؛i|qu1t_%D{JMT8eF ލ>,hb'ߓ EQXBh}Jmثo//u%Wkoc؁۰elwHVq/S t[dLٱѬ{84bSNwGج񔋑/h= 9 Us:+ \UѬ7H`U/Z_A$^^l \x}d`<ʾ?=  =wyҲFM?菥uju9= M8@0ȴBRB_QS֐LB^$0d4vE#(p6#5s$tHBRdfmy->:媡1JcB&(b0-v^_ԩL{:r6D#4V!(JxٗәV⠝89J=\n03kg._,1Mˁ)$$ 9&b Z#v___cnISTDH{;Fm/,<ߖl3gNOk[;E0iY_3îwsN:|YT`7Y5.0Y {S- yx J˄Ҥ(~]MNKV-t6N#<*^ ,"Mh!ONETw{W7G[V vzu(M /@|Nhmh. }@V-AM6UL&,+a}Ğ_' F\qU K^7}sf:%?A*u1/u5PSb<#׫@ύSӾ6V48h*BY$=7/*e?K ϖe=dqC2H~ 2K jHKAhe`XyKDKrbyʛ "jCjjۙ}VqطȚȳbTcg9aw13tփJ\92@5bc,Ɵ,S;6JQΰ0C7V8}3xVWxߕC^Ӟ.{`</p•dQNnr/}a uPy]E_C"<:IP5dC9vr\"󊂶y!p[W D@?+EI qEiŷmx(h OӺ)/0^;Ix v`讲͉,1 Y}cHLIVܮ8'N .X074:J pꌃ8i1{Q':{nhSAbzsAȮ46DE9G Su㼏=8ҾEd`Υ'Q45{zT@,mwy*_čL?'u~F^!16/PcDp,oA6}FaZs2c(q#S?_ q"Ok? 858y*aMx*/ * 9%t;nq@j8| lqm3XF6A6Q~Q0CAaGǍ 9HCU~fҠJ%;P^vTY֐j`utKs+QHc)۹^ K/ykLi!U4rL ڬlaA~PPdk8ݬM9-Gh8'N͹ѽ*O ҁn 8`.dp*ɗox,",qE v7=_CGa댽?[L_m< a & iM氎Z'!_i"Hv V&f'p@L{19[IKڷa^{ƬrE zI]j^.])v6>*vV@qn_JA?Mؿ r Zbc}. ,Nux?DՒHMFov n+#Aj6(4ycrGItWb)QZ3oω9@No- PE G]273ϯIc'gEr])]7oiz햚 NJEX1(zPX ߍ`u32EMHjpɹ/^y)\L.^VXU܆ g$XyqmQ[Jr3< ^pX`g??Nm2|~R󽃫?˨^r~pj> W`^NYL ߛ m) k5b2`5RBw~`1` A*yt\,ݤ-f>e#uiͩkOǒxxmۉ0aGMJد9BϣXxjs6&uBaCM| tX{#Fj05 k %Q>r<1c4m9^G9-Zmo]?'5W{'T"s |_S>j<~&`CTjM.+:+ѷC3g$5u ؿwH3X2ܫ8d*# 󴢖Y'YNg"ݼC/"=@ F"ݫ8oEu{R Rm@yHBQhe L9<:G4ZT*6t&"~B彉>03.Z#E\tG'f[@nyE 0vd6F .gvjڇN0ec{MU$ SSut^Dz&e8@%ڌf2=ػZM1&0+9ǽ4G8ᨰT7u(x[Ep!"Kq ϓ.>3S%Q\b_N[d)ٹQqi=;V& Wlu- >߀'8HV"I l a ~%ϯBJd h#BC,'>xFxYQj'[IT >`dyOn7,*$7vA%CԽwge]Lo<*aví>Ib!`[$#JJ&p9P=lwB-r~5@2`1ǃfgo.[?P3C=B (PRWXj@.І?*"7k)kA,0G'!ArU L.`5:pȆגP)y }ξuOX$-':[n>C@1kVȘb3I9K?)2.^p6Wg!ٕv5' d>~1Dms.>u]c!vynPHB~Hem$5ɩ\ERC=+a*F;JI`lk&5'QK e1uuWIμ.c =ɼ7M#+۫?,=2fԗ4$*nm cGQHK/FaSRcH̳͹ n ycEq| 5?|.dŀB_D$ȧFaVt#*l~s 6;&Puh;0ҳxqVU(DKxi4d_`c|T<6j#12RKzh5M|=}~ݧ |͑#7R4n"Rqˋϋ!)*DWZk zWU@XcqP+5EfPX\v`VJXPiL жT(Xuzn;JqCu9{z/ݕ.C$i=므hҡw$|Ah}M VbEDba1[a"NhZF *cG8[37^7IUW0^:ɴTv??>] KR=G'S|$2>xUem98/BMLX^RukI{)חOJ!B2%WqMleƉT5!)A]e˚ ?0'^;eպ儻)wDѥso4p$Oi?mQA1;jr0o2}UJ!_Nkpy~G}`^Q2*f "]a*Y7KR4a@n.Pz/N(wyFW*? 䇛qzdkBN~̔+1/SHi+Z8ĆϛÌȘd~k^ h(FMIj>R]j]ppEo5J;@hw I,KAt?KtRbMdd}!N=@@a7۶@7n(>a=Ŏ'5UrZy68V22yHFY(.bfN kMu7P[ {37W^^ij9J@ly*\Z}bpdFȊ93=7{*+=+1^BYDw};&ߌt-laÔ$otcd~Xӟ `^+AMLaN{<̕Dm v,G'לlKvKҋh' \ٿ3P!ŦL 7΢ 7)ǩE91HjNV (mHY`ֺ꾎%릡y9-Dƥ^,Rf'?1W80o`%1Rw?LMH$*oڝiBH`㗯56 C;]dqoiߊ%ˀY%SuyJccfX&:0le(ZgG .dYpnÉCО_J5UhGAS ; :>C9c^؟x!ܖŬAY*P#6ք)!Ni1IsI۶*jeތ5;.QRVI6op[NAJF`aCpάB)nݺBv~( 6wJzgU)oT)%іH z4 3h84ЁMbCO¼67Pب.]AKAPI*/~]GO+8PaoN3iaOפ%/L7(8sWGul5Î9RBN&.x^WIQs7lجM̺! 晪'h70Бh"a-2?P#tB"MOWsHS4ƔI:FiDD o!{I.󸃡x霟] PϏ| al8Qx3,Aݛv_9CQG@%'!/x́f z3*=l(lN0^0W8hyW;Q6ډ;r43*AKd }s3Ll)ݾ1kL(QAG&EručlP"tnLI@Uئ$[fsV211=HĬ{MZZʮl^(=`x(:ퟺΒ:2AЕ##NW>\nzz,b¿و!{@{k^ ٮǻŽjZxE6Mahd~c^F3r۶h?ja#dq%zZSGΠVg t_^ٲQ:cu"a]u-8bf@8 ( gD|W:#nIR\ۏ)ݱoE qY\|! .K# pƋ|{z;!Zo,Om:p߯:m{ӇԱ1J i@r^_},r?1I{ah+;S[TXNܔ̌H~Ĵyj#YM pJ􍖰_R~Pi'*&TT6`=M3JB5Hv_G؇>I&#qiXHx^]ǃm2٭AzqI M*|$"Kvak"Ukkoc$|vr@TG0ip1ןu[﵄սD!yPf1dr={3d<+FM60n] }ڄ4p$՛:HV܇4psjKArh$4#:\`[swyI!2 ]pM?C"1mQ9YP 'N$[{2IKG I+%F7X?qJQSƏgFUopiK;؀6,kCJ:ըǐ#I:m4aIF>5ʫc4,Ӎ?Ń0;&:*`x6RdՈC< cž\ IG`^Lt{࠹S=+B`s2B:#H7<͑ފ5i؀RKV;e=Tn `&_گƿCxnQk؂v7r3meWꮝ_$M6_,х-{eׁyRZ*P⥪u/*Y_<|2O_*K`ԝJ@XG,`,؆Zcf6.i2~BUcWiJI+UUYg#,fԂ1Q} }TBL=)XfJ2Yo&`i\<#Q~G`'N_*-'lrR%'ݷ*QBuրn&IAծu垿1dV_se $K%2w"JC~@z7ʲ59,Zx_h FdxQr^[i"l[Z_͉d,RSmJςm(Vjp]JQ.h}A0}NZy>*=\y5,!uJҶ̈́‡S1s)*?sX,Ag5jZ_nsh~u%XC}7&^\U~ &f-̝$#,1ipY7U{dC1Z) ׻uy<IE/kjN)/aZoE@ Ա_5:8#j޿=8kK'M]="aTU@ N5\LL -*,Mg+M#)AH=98YTj##f!֝IaU:)n0ƨӈ \7}/;YE4MDؑSdN^s}d> z&( ;^+UOI+sJT.w4. ?@)UB_F0W}Mn|I8q3Hu|~D=mm^sn|7֑ kM0P'TQb ,c_2Ju| fIlKdкyېSGT2˷^-C{i~EMXqZod+;"oFA 5CZ[ZCN{r&+PZGbwęKJ/Kn^C?m5Z8~r,1D7QͿ $XJgyÿZoG"bAL=۟]Gm$1c C i${"  ^nR +DC:B''nīWT鍍(OĖ[gHص ;'g(?S(emЪ2NX5BL*y!`Mu~c[ wOY>&8meԘ݇Զv'`.d[u#tRXw1ԥ|?4`=Ǡri99cܸɦ0TM]bl|0I@N#Y+6&kaRp餈D߻I.(,XbL%0[IjyN$0zmgzIp<䘊" ͑BC7D{N{'Ȇ-wxY ulA%#ƞkj3Lقᕯ|̯7i/';` *s` v-uW/SuIvM@#/VK6Q5 .E-Aـ`!&'ITc( i "_?H_|-]E-/!c_`6OUpFSs\Xg )1ĉm|Hl2J i&?MsPsn8Up\m?0: Ni(1}j7k(ȕӱ#WOWu2z|Pݛ͸(gz.PY{ *Lor=\VC}H>.EJ4fbk%HxEʸ21`pA:fR"aZ #MyanqڣR7Mj9َ11+޲Bִ&M7|E 5R4%8FK+~#aNg"dfVu\xsg2ѧ4A@*HڬlZk> -^zNZ'Fo i| gF ]l d%"C)wG3?*U.$A]2E`X~ yA ym.FMCP@hfܛ;bVT=P;[eC7(sȟl37 LVǺx)wۙqEmjs۞w*FcV!X춾YyQmzsʀ 3v=o P=7ק6eDZ_3Ϊ"Yd ,{W͍ݽHfz/ Y88HPOȦjxChZ"*Ir3r>|kR+8Zw$Do29`.˵7zk{=(ot,fK.t<9pf,ٖʤksQϨ>:(e[( YPtդ%4gC2 v El(j LHɰHa"x~P]߆bT gM+A۰2 wΪW3^lP9'+~h͕S )03WK{C300xw,2% H("y`nlc,_h3(?ͩ7ꓸ\B"}<;;ɞ|M6Lբ\rj/&jQ$Yv/#lH"s! ؏0U ޡ5YN~`F מx雸/+JmF BT(4,BN/4>-X'3#b'i~5F ʽ;2 GWOl][)6|IbKL1G^<5/r|}t^6Zjw]ls%~U^ɇbF5^`B" NI[dV=#rH0>,bEa?j v x8&aW,j,躶 -"tc .UKJx-e7z|Y:UCe?BvY0ϓ" G >Ff(e$[2E*Ƭ-va~QXj8\^q~8nH'F|.zoÑ3ap0-0-e Vm ̃׮4+aՕBݵ_ۤSCyC= \ILS2Dv6P0+EJӅ,$%*^7Lrr`yĂAPՌ~II6A믪ɂy܁Ѫg}D" ^ZP(M H8v=<3]Vak*/xa-Kd|"3bAt40ԑ Q>U^ˎiy&^VIFLz^3 0E}wt=Ԁ?;Q0 ^T 0b-WuZ[Cn;ai3 +iRPdG@L3?TP&38QOZ Cg%Y_qY5 BuB녚ȣjCeTiB2e\ظNIսKJ`tqٙ\e{qmކ9':]dD$W͗~9l59Ak򒔧<#dqGNA j|h@o@Ag ȍRUNRQRSwBOl^κ}Hby\ -#[ėO@ʘJ<$A>\Zq!tod˰'l&g<77k'^+g4\KdawIvi *TAƈgZCFiGe\ .I s"+#9]^SXv1ʧ6i(Wr7ae:geisQ)ұWQŊ$A\G{VB(pҐ GCY^skn t)d G,rh +0+WoS]ȁݪu9Fqh7.tAz:h-UƘj&k@[;9bu;~=0Gvk+1@Qv+{جO/sGHr|AɺUw~u@0޸fIcr'(Ke2M.,NfjҴ'̄h\RS5ixzqF3^R@ cg)*!ޡ5c 譹PkXDjI1#*L#!.KY^#wI9x2^\~n'|`^RU&5T[reI< >^OЙҘk\A@vbߠpCdKH U˾S<"RSS5q6*rdޑqΫnoKDH|gB> A ޘB?~ v{} k*[z Hx4;8y{gp )@b~?LҍGgyQ'!Aoo@#Ә(ʽm8l?b8l3[Uրa6bς 63Ͳ~ _YVQHï`%T=+}k"WękX1AG%tv\0Rq4j I<{h_ʕ|aD8%sV~z?at* #)Ȥj 3ZB-4]-ˢIYѹrZ^ KQ@~{? ,{.\"rTudL VHSHkzUkϵ^)1>9v tKy.ˉ,A>`gGל́#VhϢo\4`qa}ڬm {LȨRLess}8= BԆlCauh:oD']:{B;$P1$[[lʭs,S= ("@}~S٩ r1}BJ C*)HҨtt^3iUhjTOņ]M1.4q KSŠhE>6,Ny,3 шTeʺ=j1p v YZ