python310-doc-3.10.13-150400.4.36.1<>,ne9| #2ܦ_EQF|nY:kE*,t sIECz% ƥ$[}ۏo.Oᢦd20Nt P?P >$qw͡]r`&ķ)"tP%(-gNqw))(4DYPN6Lє³kSX[KuqyGV;K)&[^fݩ{8/I|`U/󴟥'z{ǹ-HZ6QDWY>AB?Bd & I $=^i LL |L $L 5DL DL H\LYLoLL$(89(:B"F/GHLHxLĮLXYZ([,\0L]`L^##b*c+d, e,f,l,u,(Lv=XzB-B@BDBNBTBXB^BCpython310-doc3.10.13150400.4.36.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.e01-armsrv3!SUSE Linux Enterprise 15SUSE LLC Python-2.0https://www.suse.com/Unspecifiedhttps://www.python.org/linuxaarch64t{?Mc- z6+CCI tAq"{+>U:I A{Y$B; A3m^!W"$5  "g2x* w R [4+ =,JyA!'z(>G zL(|y&1_. >e5]*O  {r00}%[ bg:-aXIk/~||`$@1`0A@)/!l;U!;8; $~6;-#`- 5a*\ &+{:%$=/{8Uf%6d-} BЅ5S ǟb!K \Sj#h 49t1<5c0zw fY~U# 4{5#H' -7 i$s>w # GHmR,g,ZmkH"B L&mK6`<,Swn#+uNTU <0w xq gpJz h* CpT'K5 }J O9: JEU ^K^-5EF=QO )&C#Ayv5  o' [03 i1;o""vF{|d{)+.^]6`  #'X8{a$11{&5 >H,5EfL 8VZ *4JKcI"a;5RG4  'f^T'Tdq +y&A/[=Z@Gcw (7R>֝q*;5e 9 iTamC!+ RM meG`2,\;. \X9"^TGV f~ mcVbK,9.g6 4%e6c]*fTZZ)A] DLJ.Ae5}T> 9Fv_1FgcxUqxSr7M$crVl@voX}^KJCI.qW_4vO_|0*%LD3kRb`w4@_w/'F`S &Y"p6@NMKMrCbI# (~P"*'AsCEbRT`YZ1B)5Q]wo"Ɏ\ WbT>0=oI<2X0d GFL%80Ij#[_gK8 +I*{#.8it|d??q(2m)RXx"C");n:24CVآ~ijDo[)#??v>;O|Xe6HwyH:+Df`<:[-mYPҸuGJ,p7XJJNjMXY/~_5C7~+6R:;~&I]‡zHx}Ia\iP~S5BS(@80f\qAu ?lm?%t|nb;F:kSƘ#Q5h5hYGhZ+w46Z2cN;&ByH4 G SX`X,Jh^E?"84tK0,PPBQiLA DN;BL#g8[dVdg$wSQ^2Bs~_NYxJ/XVWA{aG{kx9@u(~}QaBA8nbBu{! NHcah{`@1l@?f[z/B o9CXgO9)>C,69u9m^l Rw5{I3R@>ZH\if\#3}0eh_!wYx~D/X>H/=ѷo#an81&EwXBK./E!U9o"+{JK9bՈc:\)Sz_-b7T(P>%%q ZJN F hA4T\bAA큤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큤eSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReSeReReReReReReSeReSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeReSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeSeS2613e1da696b04e71180c3202cc99dac6f0dfb67f0b0ed9b41ebb28e64970cd3f8895f720f61141fb50434c95589741e918446fa71ef570d653a283b57a4e20b51f1cd6c590a5e580d73ce5f01dcdeb23ba01006604958446897c27cfa45dfa3667ed7b6f1f4e599516465fc9617d3adb40c60087558155e03eaa6aa3303b7a35987a6ee254264b582baaa021a6b3374a5a961aa3155320861ccde74e989c32c9e03c96a6816979d7643add104aaf2e333990622483c4c38845c1e1e6124005670b6daeb77665a0bd536593baf7830c947cb3811119986ed726500defa48a11037818ba791a67f5c08d63289ee2fec6d83e1d8b4f2c435e21202dabf6e814721ee06f52723b9bad40e39994b5f2dc69248b00fece45c385dc564978faef19319bd6aabcfb280555e5915ef4abe76c44a3ef11e65e5c28b75d012ff687f8030d9e0812dac74d45c6290f97c7d6a0415bc73f2c8c016dc9b872ff9a65c27916cf8f9ca92803ad69092eac297677b077823eed2d9a76966e4f5009def52609402d84380fc5c67e3b79e62e3b0b24beedb11fccb1a08e2c5f65c060c57422cdaf178239e8e726e704c04d3a4d1e48cdd96b99342d172e1eb7e64493b6430c494588ee1fc6e043509f379b3405f36d2ea1f6ed3b90aff3161fded688f0f87c2a8b95f47db348ef82ea1481286c12ad68a788305aed2d95e17183a7640526eca45a9d39042918a36fa26b1122c0254b1acdf0999c29efa41b701c3a6becd6cb4c0c896f6537764619d8297b0d47485d388c24bbf8623b95e2cdf44f81bfb223a34fbcf0c14b30da04fe4ad74a33cc37261a817f586a6d17930a411ed4cfa7f68be8a82a4733adbed5385dca316e699a2dc25b7bb22b0741f2285132e05026a8c0dd35e5126e57b634e3dcae5aad00b1fb00b360558784d26548a0177b7ab5ffb49641de1cae1ee5536e97f2d823023a7e141d92b3f33711b0d6bf57a967efdc3d6fdc11decdb5b7893d8032946d74b2308a24a58b5000de00aff80c5b3ec34f6dbc5337ff436bbe3656eb6fc0e3c076bb4b6b4b3eaf2e94a8d4821653223a7cfee467bd488b23208c21fe601bd6b2d4ba6c44d334bb075babbf7f0f751318903b6c5d4382828d64e88644e47e695d717ea8432ec1ef79a17f2d209b11aef4fdbfa4bf570d752f336a9ee7af4a56b8e5b3696b962b69793b274f76439165823c69cf5e04bd5db0b21f178fd8b16f7d999d0da20a00ca8d271cd556cfb1d26dea91aac88b21a9ea9ad785299a282cccc4b9a93cf9b1f028f65b0e90c0c41deea019953beb5528a56a8b0f2e5da3d6f20f47057cc0325273ff152816c202f8a114cd07138ba9abf87cadffa7027ca298ba11ceb6418f3a9abb32ac988c8d342e7c2b3fb2edcc0e6549fdb1ea3414f47ea41c509c75d881e7b70b48c7f8f756212139ccd3356201266373b56846ed89050dd688c78fed84df22dda096e2f45d9a424ff2850f1f559a308d4bb0215d25df449f0adfa6089248cfbd0a2a62e811c8c72bae01b07770961572b4f0880df2752ff107b36be4813a665a58de26fef7e44163565cba8c232839563f463b504a3114265ef774ff6040f5e9d2a8eee7d8ef5e1081f35949e0c3862e6489f446b26641f7976c6f5a5fa6006b010649b19abd2b60bc11abc35f73d9cb449e77f1916046a9cf7c6b403327d5a42692c78f6b8d0f50da71a3b70bf57257d8f280ed71c0a98613a86848632eb18702b24e6bdea9c88f32d337795331d6ebb358ff03ee96bf29abd0943fb8f405185e9248879dba8144a9524f5607f7792dbfe9dfd14f05004c7229a613e3c444800d6d7df9d1c9a64d06275e0c45bfdbca990f04a80626d147cdb82a6af20fedf9586a6b58ec3ed2193cfa6abb69f9787e926a01e336d488abc0af0d96117afe3f28190089b0f8b745c0b9dac5b5702722ad5d17a4c18a0422a599534723d5042ca6ee29f7bc1450cece7b62f49c79d227cbc0e699c82359c92eecc94786318d5ba0504e3b2062a5a0ef0820491f18c53b8334fa5867275e622511852511d08cf283cf728b92205a5befbdccca24e6332e0286cb981bf511d5c856f35a9bc88f4bd6787a6712a2480a80319dd8ec19dbe206aba255beb86d7fca0fea978b20281e9e91740c7298a13730293aae706c2331a4b8601315f7740d05e0871fafe1cf048508396ab4bdf20c7f3063d87edf79394d04c72834841d369fce80e1e23ec0e3901ce91a51a409e4fb8ef3609a7e5c15cddb3d7f3fa42a15ff6e70fa7ebd8dbac361958e8570df60ee998c1e99bb5ee179f2109ddeece8012a5f9f89e4423b1a04734e47cb182405455c0fb38cbd6ef4eb9569fb86a4acaa3a463b3f0b5bb7c94e3514d2d2735f817a7841ae4f04802a4fc70f51de2ecf55bd50cba0a1bc76a9de0fa9255674428207f60b80a41df607504b79639cafa2df339fe12854cd86ced5728e5c7a46533e73bcee9d565b5d75938b43e1c56a5e7df7dc2369dd6a3a4a9849602acb43daadf44a7daec88d4253520e74e4ab21b36d3aa3cba29a6ae72bb8c465302cc41d59a181d10b151dd6a0ea0502e3d2df5958d0b92803c5f033946a4257989a8e444c9e478e639c4d6704b4dcd3a9b7a29fa223d094a5d7c62cc9defa73a8881588ad6c294e63110c59578bfab41b26d8a26d5a531a656c752ad1438f5e3fb859d79eefe3df85b113985e3956dd8aa77766f9eebaab4bd5ccc14b69fd745658f5012cbe28c16572aa3e614d05551872c0f9832ba1761fc5b57e79cfbdf44866a980874f771962ae8f2c43b4e45f2a16ec6b497fdef963a47705a975a198ce8e4658e4df73239d2e2d010099f4e6c40bca7da8e461ecb99863dacf468558967c5873fac7f8ec8ecbcd8b0c35a56d9bbf9d6fefb5832909686866a3db0b381bd4015adbba12dbddf66490fca89a54e0e66dbf33eb8f00f4b7822ae62dbfa23057456ce4c8f1f8994f8741f42c5c0e29273b87acebed01ab15e716e209db721b039c7d1b89ae371672b76b25af79e227d286c9eac24ad3512566bf478021a45880c787c3bfc6058bc9c453ad6ef13f94c588585531cb43291dfb985b69497a033737d475c561dc70afd7811f60808c6ee2b8c4113b8a4f063cdeac3f189e9bec3c01d90df2f32ab6c0b8f3ceff542209e2fac8ef80394a5ada3d3b46e8571407aa37a7edea87bab18fc5aa62ce40da07e45939302b1d5d1e166212dc056fb1a6a24eac112ac62964e340267a780ef20a2eeb82ef21dd4e2cf2d4b0ba927f19d9049cb0d80de953ad06c1cbceb22db7f2faf1d01ae9d059e77166e45456bbff33e797da3c107dcd33782334be442efe421192adb914a604844b35629a9c66163f2819bf5eea64a3e0404d8a7c7e0f91db516b4f281df18e23785bdd8497747bcabcbfda53f3db2a42a1901004fc1dc3b45a5c535cd5ec2bfea1f1830158ab687d1ed8e263a7b83380ae6087500824ab962102a9435aaa5c4bfa290d00667cca63cf5ecab8bb1a0b8c2882f68f124687fad04a6b3fb1744c75629b2fc2346ca61cb56742a5f09bfed0283f56545f15e96c70c2ba956c396bdce78b890f1dca9d9b6640e7722efa557c075d8b91389978d63627776032860190b1eeee81abfd0423d6a794fe6b2dcf191a2b5e350b3562ee8b97f9d7765c579a80b1c16482eea22e81a473caca4f08859093d8e70f4f14463a018e37f84d438627c9d713a63204b2e72781be58f197b2372f86ecd60c6ebe847e932cc7789f42d54c913f0bd1346b136e437132abe93431daec64c921c3ad3d97434c7d99fc67c488086ba22f72f046feae31862a94e62199c218124a2c66b87303c953fa7dcde0472a5ee2b8ba42ad3ba315732db700ec56ff45ab48ded2187c865ef15f4f5d78d32c95b0f45d70d2b52eeed605b09d6d8787e88a79112560c3fbabfe6226cdbbca444f3818da54fdafc296174fc48e1c64a10db7a7d7647b88d1ed78ad2ed7557f0d937a1a25539f868ac9098f35b7dace644e091cd20f65c8db4451535035110005e89085d02653865d0a9eaf53ddb1ae003fe310881b19e066b80a7a1327a9b83af02aa05e98ccf092da852197906756b9847a30acf3a637868b780d467fe121c0f65b4833f1e1f7255acb0c83c848f8eb2041eed07c4d25137a4265ed2ac87c1217e4239c581898e2f4435c8aec4abb642541dec64b14f80fa58e467e696381a5a7f577fe7152b9810ee2e918854fc249aa7bad869f0dbed89289b86bb60e7e281eabf985c88e40a19b12a2ddba81627cd8d5185833bcc4eb25e568b9994d889798e9c69d5a493fc613b8be736c880549e2595e4164fb27829c89becdb72165eb82ded7a75f93c810f9de11c9e5e6634a7f5444dd83da55ccb265bac825abf72ecddccf7e394f284636bd9df494a2b0c07bac886a4c8b0c1ddb85e959ee40fae2c86c1d68a6a722ce7b88ddb291c1f6b451f568ac4d89dcfdb54aa4cc92c355dd9fa8ea2d7ae7a34991c6beca94d69f669c5f77c4fb73e3be9658150bcc19232148db34757a74c1c543845e32c978a73272a32a2d87bda7b7e415e973d00ca9b153cc7fd03f25059cb2ad81b80b03efe2f9eb58162b90eddad2cface23f96e94982a067dacb4cac44042346eb421660c769f7b361ac12fe0f7fe53b602f1018c223b45c0ba2d49fc57b0737c5c69a55c3a1f2e41d7e2077d4aeab74baf2663b3b4926461b2b7a59d55d28f22184380fd8cee5bc52f078ee706c2b91c4ea17ad264aa64d0ff671743da906bebe98c963ce5f612614485c456f8cd07f7b370df873382ffd76dfaba8a597c292ec06bbfeb6ee53d4f90280ca5e38a4dba90e1bd556d09917bf2989fb229d5571b278edba40507771180f4652bb52be305db82e651d3b840a8b4e47941883c38707a4bf672f561d9b8e7db7a27c0868467473700e2f7db4d8553e723421b1fc99e36f6ccafa7276494bd598d454d071ba06d5bcd7a51b5d066e494d671932209a7e4b117577e010bdaf96f4ed50714691e71d86a5394384bb4585c666eb31f732d5c8a90bccf82a5066bc493d050906e0f32e8b7fce08307feb808ca6c417f7ad7103a3aefca572aa23e443a4f8332452d921ee9c373a2d3fc0dcfe2ceb628717d1f8fcbf79c877f327f9408f3dc02957ce2c9c5cdc947ef0a9c923d039fc245a1badd0186db5e074f8745c78ac464f396ab142c5f0756478e01765c0fa958e3254a6916ac4522142fcda38cf98c20a47f2e015238d3ac02bfd5061ec4d9ccfefd176f0434d8614b0ddd9db0da84390a862e4424308a6666f8b3409d82877b3e5a8518ce862a438777b18f47c1f1f02307379ba433cbaed8cf8f190cbb2a8e9a4880227bd4d6acf61382886b874af33d7d04350f935fb4806b2fad09a129d0ec384c6f67c28b1936c31edf0f7b053489269f2f0d0a802727196338fb007f8ce2e7953ee77410e1aef0afc093b34bbe3d002ce7f2354a7b7886226a9e9f21cabf856ab47f21346cc83cb88b845c4d9f94f39d8e502d4eae073da4820a6f89b2a6473cf75d195de125769cc55b8b9c3d0a8cf1653d0aa3538fd4e0738f7eea04e56cc204a8fe1873944f79fdc052aed8e3b1c15c40fe9dfe377e65c072a9303c54a24b4ffa484acec02ad5c258532c370923a3e005ddbe1f37316a09d1a85790e6792602284f76a983665988aee64616a9af8961246f4d12162683da38dcb0760d38f075fc622118ea58ceb996c75e4cb5c920ffb97ca35db25a35029c3ba15da9f1485118daf2955ec3a7752f427115bf7a46bff35b5d016dd051fde89757642d60089830daa751304bc19dd584af9fd422e99f07c7b8b822e7e854acc62153b20759cc9cd709d586f773bc2b18aad04a5e5dd27ffeed90b25bc42add9be781e8c5ce4de2c0ec0cd614b2ad638c9a9eee1a9cf97e2a78ea503ec4eeee2959d867103500051a6db9b1dbf837cf8f473e937253e7cacd3b85d967b86c480b3f9c398e63b53ab5ccb7e11e699759dbc2f2950dec69a56a29c4444f40a9dc55cce326169c327036e629565407e7e24c6d5ebaefedb609444320e226810eb4a5c461288bd7d363ea5e3d248b75f2f06410dfd4c23af78e3675f373c855d67ed089bf33e17bba885cbf5ab1276b0e8ba3499228c28880de4b69c525f19b751471bac6d7658e18c5b54cefbd7f8443d6179035e88a60594fee8c524b450ced7ed92bc6d44eb709a6233364441fd0a651f32e26bb148b303db9706012aa2c2a43aeda6f5b122231a2f7c1b2aeffc0dec279e7b5dbb7e149fc803296e6caa427d465f2c44eeaa8faaea0b31b3c5afdda92b6e26a6b26ca4a7d3d4450b0edf4cea5fdd19e648ecc0d47c17192daa95dd56fcf246cd08272767a349ab70853ced8f47080984efc09dd07c08e7e7b5e6eaddc39a06ed4a29e82a82067aac35f66f0d582ab9e8848e9f69766062b95b2f0d842e9a8f46d7c18bb867de6c422576e3e21d6cce8b4a95bcb999ab24afe82ce5280afc90ddb966bda034c4d942797ad28b2f7dea6da7c9aea515cc951f285da889d6ddf7b55302d4e51de5e14993d55ddafe5fcc0f297fd7e6d81bcf8615eaaed79e5e7fca8fcf55535c1e5b39b8b85c15c64758eb09971d86fb77cd065d05689febc6fb64447221d5e8542f6c12500591d8a01a3c0f6f6600c947f274554542203099f4c53c86f991dad0cceca3b2f91bc98ebc4da9fbc28225aae942a295ca00c573f15ff6fc3eabaa5bb4b4c3ee73c1188a0235bee714adfecfb057caed708b28bec88e1011e75cafbf0d61011f810310b3e7f13aa7acb56a136c56ea6df4103ecdf5650130b35e838f757702cc63a1d7cdf76b6f7f1de42db40672bb50b4255d1571d5fde9d1377f883323f8c12d75ab00ae719e3cb0dc8febc1253a46369d88eaafa6ee85aff6ac4a0cb3938bbb34371226b51a5f1267ccf36d4d443486a72cf68bb7b8a5843f1fe05d794745f5adc402852a57a34aec2e6bb5efbdb7a6aaaa830aeaa6b808e02f3e9cf9531fb91ecd03da0e6294873b5ee8d71e0e957b250dedf389460ffa03a7468341f0b7b9b666d763c7c2c0cc23b98879406f8c05c1989c9ea3771b29ec98c1133100e56ab004b0e31062ffe56bab61682caaf7d4a1a0ed41191603decfd4df734d3f84947366f03f728d23a6cc56c482faf51365baad7f86f583c6f4b7c4dfdec3c2d6099df28f4a33cc4ab114212cac93d6e2cc27eb2f4a2ed51a7533b030bb9c0560b06f45f2dc42b9baa5519514fef17c0bbf7e8cdb46f4d657add5ed600a4fd81ec06d996fa6e0b99f8c3abc4daf506b31095614f1ca1da65f75a034d85c04002d7fb9c885cd8d17c426455010c082152ed141d2d6cd41f812209b19cec7dd2c16553dbc26b0fc249c1c827513e52c12aa3537bc34ec50c826fe8d61fd7dd8fb0552d0292f794e89094fa4ded1c868ee84d98a1a3a177f682a174bae7aee8b2854ac1b83fa3c2a2df576cf63339feee48735902aada30493bb0bc0da5e77963205edbb9ae323c3e32c3c817b8a655a312bf47736d06121e05b74a58c580abd437675c16b4979de5a0f3d1323b64257b84f12fc138882235020d93b34951d9dbf53efae3091f2a78ee7f248443c421afdf4d2af7a431aee2ff2421900cfda4087d22742c196b59342f17520f19e9c42992534f35407bc94e613510f4791ab6dea50156d422cb3b591457283a85932c4c81bb956e910530f01e523eedb5eb67f8a1df4b51bd3692b13f72618466b8c3867c82ba5d6a3d2b8af3bca58fb971e20f260bbc612cf3e734c49623e92297b20f7b014d58912b42aa86ea6c76b6e5be2c392d5a767c1bb7ec3d810e3c872be70d090a6b3f3d84fe13e20fd346a0ed7a2bf58da5b4222797a5143f013bbe482b405203663f4a9cdfac569af40f010e996b6eadb95792e2a959eae40e0d4b2319bb85ed2665af2f15d824c675a2bc15f1aade640fb5015d6b1f7efb7c84f5c68e9119e9bc4aacce5be1f3996e0cefd62364d1b8f590e0d4433171a01cc7aa03bfae024dad8050a9d1a0a40a5ba92508e55079f56115859230cd735d181067fbdad70f315bdc7f6060c763c6417a4d7f85217da13418fe8f5bd86b099dbee9f820430edf4a65eab01d7ffabe71bfcfcae688710fa95abef8143d22fa5d6e977380b3735af135f5d2792e4d79cef9d6c7491d8031553081da8a92b4dbfdb3afe5e2d52945a996f6b725cdf9ff2f2c9e7e4e585a4d453591aab8401d868d7881c7b2c00ebef074cf92e1cf808650339969195455cc5f5b45d7eff2b6975a7fabc6ec363dacf4e938ae8d7523e7476332ddba18323d11a53e71a7c9b5110e031ceba31aa153b7161b49d2155ecd3d146866260fbebfad680fc78b18102d7516f4a59f86e41c77b8b3753417a2931b43ec8a578b7cda3d05f9ca6952a6acfa45f05f60b7666301c335283d2d83bb6a8529b80ad1fd28e6801a4ac85ba2d38e682f3519c19c44adfdade4e0faa70cb14357dbd4f37fecd181088a9fb1b947283989f9ca1f1791039303b76035cd6fa0ab1abd8e82f217b2a61008c65e0f416e34fe8dd3d572a8eb4560be02bf02e0bc7f1c2cb2e6db9f1355c389c26eabf81954059ac0b510978596e25e390b4422038a12214f35da1dc78c14518e4f4edaf244c438757e555307d63161fcdba711a70dd394ac4fa4df63bb2a54609bd0c74e894ecf6f62835db74b4a40a1a0108a4fac847036bf928609d36235fabfdd9b8971756af61bf3a136bbe994bd62b6c6c6f2aa9f1d246d9123950f54d5940e3a77d8e9a65720d6f9dcb8c3138c7120abd964a2f1b8d8f792d45d2ff9abc66b7058bc016ad18c8fe62b974866d600740ac7b22ad44fb98b263a951c53881c41792a000c4a910378fcb1daa49a2ab9783cb50ae5da11a703a23253f39e3bb2ef28342b78975d1071af3536df53c3d52965b58342f5b58fff6bc8ee1ea14cc53455abe40092d02ba8574b00884b0b3df1028cfb778e87b32d5c601a0b277cc59f5355597f994f6f0e5b80b255272b996cf9ed80eaa67f7598dfc12133c206e6fb617fd046bbe402bdb91d004222a004480f3dfb9311149d25c357552bf06313b225a40c2a6c77e8debf047cf3c5f06f6ec399989f069d7e2e981bd2ae64c3c57deefe6cff47702d41721799726f83ce406a7833a94ce3db71793ab9a65460d028bb91488a25bad2e54a6f8f6914d1a1ce621bcbeb91e64fe8493d096b833197bca7df0d5cd8cfcbe795d163fece2af1df0ca1d50e75b170a2b9bcc662449c5a22116093df651fae22c8fb00e17df62ab593b89f3726ebda16f703071b99ed87c4e32cc4bf966d8748c9eaaa5fbcdced7c40a5e5a4b69dd970ace0a65d931fb79a38f89309101e4d29e3232a716e1a00c488cba423b4cb9f7e0cec4b6d003ea0b0c16cb2c2bd78dc0e514ac1e5efcf68ae3a48fba13db5a8c3ff06a0d8b8d56a2c29b6c6f5aebf6a7e5e2d2ee3d2aa6ac39658a79ee185ab9118ad1d65bb94a8f919af49e230977077f8c87ebeb7fa29f6fb3e2000e7b0f61104f6e7cf6e1ae6ab1efba43feee1aa9c12ac3fde0fd66bc48ba6cb09a22cd15245d8259b064bf8b8776e5acfbfe1f84dbd0487af481373d5549df4a8237e9268f14b63d2b2c569b5377f87ef37a82694d94a1c4fb2c2e02fd1bbba12a8dc4d226fe1fed40ecbb005f279cc8d7fd4fb1b6b9df0651554c2cc4cbbf43b1e5d5da95718b3d1982b8193cc66944b2ea5fdc4777db6c209b675fb2c54ce8be779bdb74625000b4bc51dd278a4d38337a11a0842e1ccdc1959ed11fe27bfe417f7ab9a1826d18df77ecf42e0e7aa325a44dfe3e625943980a16f163aad7b448f5a6bf9a6240c697f5edae3637739e18b14be9aed90b0272d5e27fc9206dbeb3e406f131e51ed4b5503cc0cbe4d2759a68c2012a00f54a6401d55b7b0a6fc236c8302cc4aab9baaa633a542cc61485ff3b7b922c2c8bf96bbb81efc00e8c8727c190c179c20be0488ad28d437a1b8053e37232e117857e98b08705ad8d0dce3eab55aee644a656f08228c3cf52cb2dab604ca3144c95befab9f10ea4dabddd74ce8da34099043ce6b87f06131f4642876cb789c73561ff6663c4566afe1cd8a1abece5ad31373e36cdfc839efe7bf903da2dace174d49c768be7e8c4b1e1659391676a659da4fe2e9f04f46a6257eed25fc8aa9fe52629385ff941770625f6a39e01da1addbf2dba5c73257b34899f210d7e90a61b52a6a03d15a8452a3c1d6d4f68d70b2d6adf41f63b56f649552114e1a1b4b5b3bfdc0cf5f2ad2f059dc99ea7a8115f6cc108101e3553e873acc54b35449d7cddadb41755bd8af24a53cc5807f19804667248a7596b4593c1aa1e47731e2beaac3bcd3e6dcc102b30f16946ea6d883ea39dab2814ebfc01e82db54538ebdb5c78639d531999ccc432ec5bedcf1a73f982c3e4b9f000f345a19b7d379c4d92f4d218374135392850a469d3c6b081938a89a7fd0824e764fd834f9fa7e8d0cf0191ca1e8707dd47ff31ccb266dcc47208b205521655da1a49116f0161b67a4010150dfc59147d169da8e41052aa15c626b5ce9987d1c3b9f9f22ec670697547da6693420667754d2eaf641fbd9d3062487f710b2c7ec8b61044e6da2c4710344567664c93d2bcab28163676fe802afcb0210d1b3452cfffb765e60935712a2f4a424cc7ddcd360f7df507234b1b335d70710335deb14bd9ffe8257979703641fed1efee134f94934ae76a2dc35d4854eb803ed065c6fcdafafcc98821443f829c2d71e7a8da5d811e34474a9ed2881d8cc4db187c67e65a33bc224aee9b8b6595b311f34090fcb5aacab03ce2204a19d51539320a8e72ca1795e2d008a37cdb754a082f6418e635ddd3363ad4c90b9ff06b3baec291fedec11409aa2fee48e23173cff2ea9651ff93a0797a91331d71f0a60805229426b115265fc6021727e311bad433434e2a18795bceeae91d5877609de7c4ed1dc9fa2ff5aa32759bd25b9e7c2ea962ba8cc42203579b2e91bd2473825ac91a05cac2d45e4bead9b37d16cba6034db56d5a75ada2e899b569c09e6b928f26765956d06d8147a0b6a6e5c175eeba5302be2755ba742d29db0b1301fb18ee79e77a26ab7546bd12fca29ecc875ab63e85a301459dcd26c2f4145e580e303634f1933a26b82363b904f3c2bd81dca4f3e22b7b767b6f2e5588fb60c1708084788fe114c89687e349a5145f415d80e6a7bf9d1711b68cdaabc615f9078bd4d17c04d04e991aa1d2e5864936dbc06eab0666916dc70347812c310fc62dfcdde67bdfecec086e4e80a56b3bdf8f4659456ac262f0fc2cb52eaab27ce85e5391ea5baf2c16c0ac5442216921fa13d591c48713ff46f1dab6b26b659120365d4eb007ce408c2ebf0a8818ee62a22da8f472c725f159ce5ff97b99ea9bf412f9b325c46ddf6234ea88490c8613b0003f8662fd3d58a8d23a7e2e172f4fe20baf458af5816efb397a20b86ba5aa1cb2ac29290ffeaa34b09b15cea6d688280e6095344a3eba3d4a4df04cc0648f30e6d7af5f57ce7f86b5b07ac13420c45b8a7b36cb1ce8baf5c2e519406cf0e57cc40524979b3515447d4886a0909739213e1439886e3ceb08836d6c2ca36af8e7b0b1d3493df3ddeb7422335744c8b43cdb1eb26dfc54326baf360d5076cd6e5b24274f78bf7dd374943ab46ffbd78ca4f150e4e7e861c9eb0b3c238aaa370ceb534da8b688dff8470889973eddce208d2ea971891a9f2908d7fd078c28351799dbd62985a0f0197829a7c4239658a64c55d43d232f1866b14c44ab99304b526dcb08b837809efac51fc6a60f57de90f17470c26b80de37a18844d51a4f630f626bdc7abf79a8c2ebc3cce3de6837f715bfa243d7c47248bdcde80f0999ecb33c54daf28948a68db6849824b800ffaeb036162741ef1bde8cfba85a94a6eea108de225c87845c342674cd7963e108494c835c30eda17a4b2b245710b9b296e92c2e282e803c1190678597bcdbb8537641dab9ec2a2400df4d31b101d34f71bc9cd19173a240af5a2c64fc09a6360948b90d1b40a7f0aa3d29a541a93ddd3dc52d874338f6f2f56e0ca92021c5e75b1e60ca93228100529f940a7194357e95236d15726af9ba52533c36e7306527a90f7ad2bf2ede7608659f90365c6ecbf30972ac852e5a17efc681270482f8b0fc6da80d1c64491d30524b67ff568c9e0321528db8b160618ed844fe399f3a71dd8bfa9597f9e71b3af426efa410c85449c5df6f8a19a62a89f15e4be77ed82d14194166d2308a88f0ce46981b7a3bfcfcb884cece3f45593df04df56947f9cad91dad82ce628284b499e9379578443990831dc89628bde00b49ddc380da923a7b23063256406961bfbebbf22c18ade7b8ff4e7335434dab4d5f98b4424cbd3dc57f87a45730f85a99b6907c53aec07dab69d1fa403f6f7cc724822ad706facbe11faa3e6d03bbc21919802c5a07558205e562008c09962d3c6330c4a8084ad3b98588fee4614c2c4e032f4f329a81cc80637282b6b97bc92dca605fc10e8a864588717b64a749c084b3ecdf667fcb8890a66e091fdbef5e3fefa7f9ad32292728517284ef95d219b3ba3a3d0100185ec8b512a52f4ed2978cfc64c8df588322230552c8d5051566a4764d4567d8183e2897ae55c8e0bdfd6d681a1fa1ead19675a3c494b3e314f0fd68e8424626eaa1c6497ccc9b4dc4625f879197e223bff800ae443923031ef991c3a15d85aaf4dd5d4859836ddc14624da0ed4d9a3d395482b729eb0e73f8ad08442c96c69096e0e9a744f748b6cd7b6591437b7d94d93b1c363f1a2a328b6ccf684b0140a9a570db861e7c801a56646fbcc82dc0a169217ae885e2a864e68b7d480de832921990f1cb0a3f4f6b79b930c99be56fc0ab99a801f0036a4ba1e8e269a31aa3a569d0894041f07789a80fceb4abb2cf8e6afe320ef264e7fd934acc88ac4753f2e7c942371a064ac4633f84ca7ec8c729318c13b0875f9da6c08a6991f426207235743963f6c3aac53bbb07fffd67ec26a9bc041cc25425ced9a74c9a458dd8344489d9a7c24a773f10b8761887be3b854aa9c5a1b6fb1a1452c3274cbd324788c6c70f8ab50a46f22fde71e5c3c4594e25b26697c5d8609e033f9c831fa913bb3381c47ec12438447de9d4090f145dd72ba9bc959305b12e1ac908e659181de1286d4adf2e8b4e1dff1a28e7543944886a4ce5b1af102571392a22a42c129633005cce9aeac5e40a0e7e61cdc6c030e410b4523ed2dcdd9910fe4277d58e3553d27da2601ace6f174f9f5427f88a50264343b10dbf1e4e68da7c1d9bc00b1446e2c7b9147ebe192f54aa2c1ffdd0e45e3e829b397b1e6d531c4ffd8bac53c5c3ae81eebcce8c08ebcbf4f6607c7fdeb32b09057985c375cc3cef3bbb9b7281706e806ce87c2f6a06733b2fd8afd716ff5c24c8d6578b85ec31ac6fbe367db77f2411d8d66522e765b59f74b1006378cda9ff37421f44c86c72a81684ca302db65198f8676473d750df4777b7cdb5692180c2aad9f27e95f50dfb49f5ee864906c6f165f4bf782b18565406d5ab4e4d9d474848b4b28714d6a034ae2d9fedc38d3a4accf7e59835ecc43bf82fe5595f1503bed705e1cef53899f3005ada95a3f720c3a1e5768538fd7a2d5b09bf7925d91ee0c61dff3c08a8c0ddb563cb621ab2d2e3ea8e3ae4245b2afbff1812167d648aa9335e2bf909e86e8a6df0449f00ae3c64862ce51d93285cc4408a7e52e4d4c54e765f9b34b415cb1f082866879c8a9c67612b764846aed086e1d36fe7726362f8f7f311a1296ef7aceff0e7cee2925e995a92d23c9d1367bc2a1d21bddf35c66b2b933e361ae697a3f7b9c00cbfcbf2323ae28999435e94f21cb32f1b0fc05a125b410e8976ca811a65d41249ae3241c9bec60c499b86ad25a85a0d865d14994ccf8cd0b035b80690603e15e43fd1fb5ab3ecaf7d5b2e913406bd5bb44ad62c53b97f96d5400b06d6d441b0f081815a4224fad4dca97a201abc51b192e215f9140159464fea471f3470c77c246c581f10c71f7800a7fc97be4027c7ba8a628c680ddd783c4b8780cda3a5aafd549ad1667052280b80b03290b80541cfcd195c12609e88161daab161c910aaa99be3120ea2b46f614b9a7aa5b85b1644aa24bcce0dff48ac7058a48201e4e17886108b0cc8503d22916c558e422a54737b55d146591ab37bf90baf5770a263441b83e96149a56bf3d085e268391ed28378332e1b130023e740a34a7b3e826facc57f2f6b7070179324a2f5e94ab7e21963d88d642ba57fc4bf8fb17cde465a83c5d7218a7f1d51232da4dec643ef8a77af83aa0deae50c24275b6106e6933cfee0022295fb8f85c2d6f21f387a928ffba363881773ad1e13dcf0d959c7dd093d85bdaac848e598757b9839f546b4ae3bdeae70d83c9e3692a8486bd3c0f13c6913414205a394f8bad313b30f59b15d67a5666fc2803a29c2c79c9c1fa7063f76e9d09fc9c3cd6489f0e32cb319447cc2025e2b684ddc03a935c728a8ff7fe8fe0b8a074ae8de0dac9fd276f1f588cc0ef5110c47b3c400d2d0beaf7a923c672dd533c4663e6d940557bd445ae0e8c68aa994f44d51b0062491351503e6ece6ac6ed4c01aa098e5b5f3c5f53c5507873bed4f7de1c54323aa0293b2286c2ae4ae17cf35683d2cac2c76113f00b833c0643446a8625d4bfb7460965b01c3c2862df561ed7f28344fef0888752322989f5ef07f74130af78a8d8fa5cb3e2d9046c80eb5f283ed1091adf324f156a31e19e3065ab73a2dde3d22d710fa4c74fbe0add241f97effa08c1f3ff9d5aa6c7e035c8dcb9c07203686ae55195f69a4452b21b1855425f2d5fa32913516757439ace4a23b6046c30a71466e72d6fa378d56b7615aaaa14922a2fda53acef8818dbf19808035cb79a41d21d0ee5bbb2066733f4ac494beea7b3287f166ff1318456e42f8cc5bfec68b4557b3c3d69a17f47bd02133a2d7ffbc3092c2b4797e922c2e025d30740951838ae9be01b63d471e5cbb3d994b9381d5fee227c6437fb685d18f23b878fdc41e6af61de276987850b72ee41ff7a8bf895b77f42812c4c5fe4eb1f3d64ecbc7b6857aae51786bfeee2d3613fd536993078a067d81a66d4b6749a353c43e70057597f505cf4ab7602b70294b03b904d9cbe65b89c909f6b08c5259a9a49f4969c0685f66cb4865f6d4a8fd31287537e309a9480682d6f2c5ad274d76d9506dcf152b8a24a5490ffe9d20e8956ef3e5ce644231986968b76d171253a6308e6575e17544cffc3b7f9efc4b72b0f6bb9e94bcf9006a9b8350c3a2cbbac02c186c3544b4f2e1a913499d02c9bafe0eaaab289bed393214268ab204d8ea19118f3ab9b94686da63843bc506cb5db94f59591b2848b150def82cc44c366b02590af35ff8ff5c4da603e91e5b496914dd5eff21cb53269c9bb73d1396d9befc33a9858039f59b79bb4b3bfa4e3ffe8c817e8f8f443faab4f0f5ce687a72f8d7084e058447f78340e8bb525984480759d3baf7491bf82159e7f3d4f3ef76d095b11b438ab129ce46249edfe59d6506bdef8e9043c6700a9d64b9ec04ecfffb2ac7d69d5f8eea2170682478a7bd63a75f2a9222689ec761cf13fac24199ba6523bb36f1fedce238080e84181d6ec3cbeb1734f821acee8561d4283d1163e1baab314a1a723ed28bfa6bc9b0d30738a628e1ad0cf633cab57af130393e31a092d4c79ee99e9731fbaf8ed8b9dc8672fc2690e1337bbc039684f3cdbb48c4619727224414f3371b3e6f1ca53d8b194018aabe0dc3cdb93921c4ce36b57db85cb07325fe7a6b81e8a845f2aea50baac833c5d20c9f4f356a8d109d6dcfcee944ace466a5727b5c7a9ce880b36e0b200e44be05e6b8e9d4dc5d4b12ebd2d256d06e390be4673fa158f20c2a580d24c7e62a7bc9e3412e8e90abfeb969406f16c640a09b46b56fe18ed3f9419ba05a9cc7fbcb3bffbf081d06eb445f3005c0145075f06d87abbc13134efc94823a534df9fc6aa03196b29628f25a36f61080e17254adf3818f565ca92eb11bbbd136866a45d5321539ef4ffa609d68b4f4b2589a353b0995e3a1f9ccdb94cd94b75367f99fa574ef0a9dbdfddb23799a62f369ecb28e178e198981eb52926be8d6697a474353d4a23dbcbb630931456d5b6d7047705a159cb7ace8a768ee2e52e2c95c02a439a6e8a97b973cca0ceb995b41611102ea8eda75d3dd1611c7ede5e7220ee523e75cb7c2acfe7308231f441ff94fad5a9559baba43af8ca824575dc0ca58fa3c5b98f75a1aebdff736b1fedda221cb855b879169156a85af671f398ad3eca60fdce383887f1b72ae565a740cbb45fa040ac1186507d4e6d746da3b858a84817a4018b46d38828006ee06731312e285d899974ddec5980f6adaffa933bb59bfd36995a5380b5d7f692c94e73b8aa8dff2d0aa60703899c99739f070bb4aacd8bf9ff3cd6f97fe156060cfe5e41d81087764d7dc6ce5858137ae20ddbf0f9a5512207e804b50a362b518ab651a4bdcd53cda54899e692ea480f37dca78b2f3140132e0a0a1012ca13ebbbb2ac23cae3553992ee90eb035c86fa15560f0c6468e0eb269c8b6847cc7c216c76e9ef58d2d7d8044288f773ad1486c6d712112e677dd66dba0c394f56cd61bbaef22fe5d6f5129bc72146e5852245c80d6fff10c2de964e1a845517388ba2317b3641a9391ed24c60d6f6961043b7d5bc4db6f1023e3564fa0b76e651aa9b6dbe9efd2429e347047d9cd8c5f20258f7ffbaa747f09133b00a0d3a8fac5c9f2855ae22db60703c6e16e0935a7dbfb253603597efad3160cad794ffd55100236fb77b72d6605ed8f75407ff1f7f16951f1bb4024eff52cb82419956174e682c841ea39f348b17818ca95631866cba63756ed721f22dc8c996e98917d2839d2a5ce60679cd6e5b4a7671427d08d610f420262465b78c670934a1a93da893b42ab2eceb4be5269af6a761cbb00303001c41ffb3be1466dfb2a16fa861a4f4530cee8e763959fd29293d9f6f20f2d71838819fe78d02badc295303055924284cf02a064d3197b604ce613220479fff4856f2227e893d9187463a98e7cc0ed0acf9684dafc2515c6a77b36bf13d0be71d3074a85661599a9a312d52b2fdbbdf28adb2a189d85fc1f04caab2af074bbad57d05ece679ed0683b878346780213898b22379efb2d3135f4e31d7d56530f94a6a7ab630f221fe3bb15550c91f7ed2ce0400b5631bdee00a151fde37d7a099cefc0d35f798d4cee4aaea033513f93f46fd412747a1249ba060516992387f4649d7e8f4bddce18aecbae65c3d6871c8340408bd3789d2eab52fbbbb68a590036be58bf82fcc3f02709c608771a1f286a109118e4a688b3a3f8c4cdd160f8e58152124505ceadf6d5e7309050e4e8dd317180a1f948d4037d736d4cdd8d8f9e78adab2930d56f2eaeba89202892bdb4ee51dbc2fd2a4eebb1ba561b483b30f86c0ae10411a49d540b907f0470f9bb5429dd7a733ff26439210dd95095fd3d320beea1b4f338a28a2ea0fcbe9d7ca635a0df07b12ea9711084037e99d7d554e033dcb5226a67525a15fd9434317fc5cf05094305e690eb353cd34ec2d75e8a35b321a982c109efd3502882c2c09ea56df0d1836d7ededc9afb12b9f1dbb834752615001253bc0865c0d16ff3e9046da819757824eb65064d08c87ac5b8b637534db5e4e79405e6fc9650acfd97f343859322a5d8ac0b04a35dc660201752ecd3a2bc6932cf0551fa5d20b2fdc355f93827a08960ba8387391f42a430093e47950c08de80e81860d07080f9c81dbf48ea6f814b1555d6e837c88d69cd95541f6b3107a6a615d9cee4d1e508a1c755cc97f0476c446372b2707e6429814b861b05e329accb9e61c322bccdfd38ff3accee136408568a98623ed2a8f0385c0708775cbfc4307bb70a0b0c89a2a533a428c8671375811d5c847fad85158278744b803e1e2212d40ffdee9855b096d5ec0cee1fe6905dfcce3b4bc4884d097d197ed6bc88ee5dae9daa5219489ba1209ed91f16324112b89ed53d81cd64c104a1ddc0f9152a1f44b3828a106b57380f72b6630c6b2d5bf735dcd1f24191d715b2eadea3c49a55e95f4cfe502447bf3eea42f33e1157b6f43702c6c131b169d1b53f2876cca9564fdee33c90a57fcdc240658262883cb944e2384c7112fa2f16500d033f5fc57fbcafb93d6c3cea057bfa7b316dfe36a4437adaecd833b33f956fd1cf0da36c4625af81ee6650001f8a0d575b7b2a47b26cb6c9d02574cc7cfb680e0fc36176992c4e2935dbb2e076c4088f826aa2143cb8ade42b3181f695795f1c29f6291f3bbe2cf8a965809f6c6815bb3b8084ce481154b581fe30148902e37ddc6d665a38296f41efec2de8a58f335050ba4a12e398b7c0fb3b74b2694bdf762c2aef2c7ea5bd9d0515b77f98e04255058f708e54012eeff571e5edd346cfc900a209b0f0417bcfe925abee168afa623a7934f47ba2a756fa32091fd14300d6629f1775b0f050f53a97283aac487e9be0a9ae66aeadd95d18df646e5f08a2e6d8a8c73368e979ea48a553aa7cdbd9339c0a12477959786400f22cae3127c65275a5c6958f0ee1d886b8e37d95d39868e28297b0553411729c16c733165e89487e16aaa073d89116e598c98889596eb6313d04d618b3aaca0f29e202394e2f48556eb086dab2d37a7194ff54c72c9dba79646e3e8fa9eabad0c59a2ae77b08709bd505e85c3c42494d8ecaef350d19699fe88cc9a6952801184d45712e4a6d84e4833d23c22cf6797648942c444d5fb42181e44666e8e1d50f02ad341f0cac1218227a71a0530012611c0cbdd71db07890eb737dc9bc4ef7b82b9aca83a7b7c2db41a2f5027c44a90454df720729e474be9149636de3befeaf1e3c45ae358e191c7335a6de58875fb08f39170abccb3466fa541b8a9c3537ca2c950c83281b0a7225465a3c88b7656bf883311301fe85035c65dc6faef6fc51b8816ccfe7384f36e22961423f9b1bd816f5191306ee0696d43561d2778e48da2bc373efb2b5310afd0d3c66ef52cef5e29992c0d67f4364c97b3d38ee2691f0eba9f4050d1a203aa848764818939f3b73c6f5d34e1bb87b2871eeec2149bf65e8ae7c8d4104c8de9c46112d86f21be3f26b4be87450080433bd092388451722a152cb05c5f4f68ac0c769c12afbc6336830ecbf2dc18df23ee2c14eeb02b1f779f726464ec9174e59096dcc327e2ebf7f67ced584908628f8835660a5e9e65ef3f8ea93c76e512045a3eef7fd4f2f63012fd54b8e7a23b9515672a4a376f8671990e32cdf8e8b201b3a61dbb0fa24c6d49a036b0ed44d8478e2c79b2b9111ee273fa4c4204685c566d7278e5ab0ae2c9d28235ea8cdcaed10e5b771da79facd922773a2a8e9f2b8e91b4ef08a7df48981c4189ea9c11fbd5d59c756f174506119903aec2c67384489c6262336e7d944aedcfcd17f76bc7a93330543cb84ae778e7a481ce7eaabcd935a5d2ac5beb08928a532e8cd7b5a72ebe024fa814fae5d8363b6d71839dc451ba3f33c449b9fa39c3c677cb823caa6437e65208c00cb310db441572e804eda45b7e3a1d6991712339f389db0d5ecd24f1d03ec58b9ee865677d63b44dc292d01ad4007bf2c0f4fb2d756e9b17ead2d855e2492bc68bdb901c396bd37bbac85ff76bcdc45c48b1a53165cd893dcae4cf9c651cdc15c7e52ad3d3c7df2e5860918bece670a967c67727f6ba812f21bfd994c221cc43750469c8ea164701cf5b5fcf58b76d48a2c880f77c45046e009b74c1d224774caee2358e88ef51412215a1de466c3887d5cb7845dc8fcb52e774d16efa508ce92ba5754776a3ba84635cc8a877cbf4970368e001a0de70579080b1368fcaa6bc14c2da5f8852dcb464e56919ae4b8e3b77d2d7fb1227b89a9b1be60ffe36e89a7e1c382ef575f666f5c0b13d1a5856eda05d0abdc42c44e5fe1892de9c2c3c6e2c6507a424b5de999cebb43a61c3aeb8fbe7d9adbd0e4846c85b204a061229b065c48ad922227ddf9261bb20b49c4bc096312d6f25a814571e904c6c5a6fd61dbbd9972e4ff0ce944b9baa058a2f99199f92ffd0e6d3091982187e8475cd0ef0ad3ee464866ae4c456dd489d67c428690cccf7aa8423eb871aff325e36e0e7ce2d3dea08d418aa8a12cd80ac5d949a8505b0e4c0a1afa72459bce9ba133a57f08416bb97f0712f37792c4f75232faa3e54f141032433dd7c62bfd47f962558581b4834076c7b730b22370d734c99892a318332a22bbb2ae15db8734c690eee4c2a422c9dbcd5752334d950b10929191e87e26c8abad20e79615905121d980fce48b269e94bb6f62c25cfb46e58c7fe14576946cab270339e9421ed017d3caa49f6482020fab9cdeeedde2e17f0faf2e17d941834b46279c58e7602aa47b3c8e696a495150b3ab6572ac7823a83a2cf901c1186086cf99f65806f2ef48775aa9acd1e43698744c26f38c17d8b12dba98e89fb5949b1b9a67e3169744654dce0156847e2d848a5d32187bf691d0ac89352b04aa3839258781c9c1b8acc45c2e56271e53ed64f1f60aa8204ed7188519ebc848481a4c3862833e7bae684259c02a66405a28b1a3f5ab23d1e707dbfa07621891243789eccd20c130c15bebbc797eaef22f65537f85f09ae290261f74805fcae1767c88b680ea71280d595c31618db5a0c44b5d1ea75d81a341ed50c77f76ad03727cfc94d6119c3d88da68c95cf4d61683e327758074d32ff205651254369481fd76bd7c1abd3d5440e1781b27bce94e3cd0abf02137365dac7c23cfbbd92e692de533e2eb3e2e5e8d77ea1e294b93334a947ca01a7273d1cc5a36b7a86f97263fe5ec8e7f0958634c2029589576995ce2aac5c3af6d9ccbf9ecc6ed6b59a7966368f8949df214b1595695cd6806884ba6fb4301cc00282e141dd23f761256a39095a57964689684097433e70ef790f83d9db879dbfbc2328d26cba16e306f870b7734b59a42bb958f56374a27a52511d4dca1b3a855805177071470bf6c361a1b9309975dc6f4adc71981e2f4b966a5f0f13fa1ebc1c03192f9bd29f36b0ae2d714f9052fc164027acf7cc2309e17e3bdfef2dcaca60e3a887321ddb26329138f63bd535037f30d75d19442aa6f83b87b549283b93e5e85518b444ffe4719fecf2f01ad6af85fa2aec576789e66b771befc3c5ad18b35dbe1a71258f8cff43f7f152aff7800f5c5a731c818b37a5f6f05ad8a79866cfbfaca23c99bf1da38e9eb42e624b37b1ac53b9fa09d906f83231d1128601123efe48f472328f82070bbfb37c58c5766ddd864601b50b54a1882f2fbec67945d421339ddea67cd545d3b0ffad55e89940a49281fa513a5b7d52df32dabd24a7660decffcf18c99bdd7e2633be758ef7ec16e14ac9076efab0788a0b6bc9e1cea31ac0186dec5d52d42d035cc4c5829ddc43d850031376659a6e0a4fe6227df2964c1ca9a60ad2bd47178dc525acd3294a9ce0fc15ca976e3c6644914b8b0b88da3019e96137ae44401edbbdbcc308d36b5ea40fae1ec61ba9f0bf9df2ccfdc00c0b2cec6c750b4ee0cdbf1e4b21cbe35a0878b649eca9d05bbc27c6fa69aec607a4e8698343883f4ca27d187d69f15155426627b224412d78d39ef5feb470528f4dcf0a71eb7b24d4f553941eca07af57803d21b1674db8419cd5599f1be683a31b5586b609ae8cf8cf71c741affdd4668f8bb7d4758ef0ed763965ae97f0bff00ba94bce2bab6c94916f24272965ff507d1a8d54b28a56fc9f5e9d48da466f0a5a4168269ec9a89558d1a8bfc65a12c8f144ee9e33c448c6107bdf1eaca71a55dd9f78fef7cd183f6d4711c2998edc517d4b832ef790fe23dcafcfc8a9458bb4db4f8078c1f5362157db9186c121b0ba4101800bde59032bf60ca91a3aee0f33055b967930ea3de108b86a91b98552f776d3dbf3a557158b2d7e505c883b2a75148725f2cf5dcc6c35c27369194e8667c0a19288b64d4e65bdac490c528cc7e3d56431a9013980ba9ec31aa99795001b239a2af32337180508944afae7df62b0bf3abeac22a4c02f3b1bbf1c18db9ccbc59e87712f9e062c17be261d469dc4d6b2b755ae0eab6cd5ed42189af8808244cff1b35346204892a1955d9c2ffe7c8203cb50dfb6ce2e3a1dae108e1c7cddcc583db0643981d8f32f4e327c68e608d781d7a6f868be2bc3258f5aa548a4e76179cdb28380637b5674ac4d3bca1952b6720241277ff0499da6c3fb58472841fe3c9ffc49a3a1e7b5b9dd5ab5b5dfc30dfc1600e2f8e4da4ada3579ff03fc2abe0c4a9c9c2be00a10653e6cf5208af0bb1038ac0e7bc7020898a027117181a2c0510bfb189e9d9af585d7eed7fdd8a37477f7a9bfa8095abbb7901133b492265cb6b81cc6e1582e7299c0c2c8b4b79076a56f9c20cb1576879257ac7e203b393b692fab9cb126c9a592921afcfaa0743117cf8c838b650eae6e008e47982caff893710966cf9b46b28a166e929a47ba55798ae163ba9ff1845898959f019364ec78fa57215a532a75d5402eba5ba95424678f3e13e0eb07b39de1fd25ffdd8d9b9133a68a8f719b1f305c4da7d876cea3ef81e58f80359e169cb9426543770eb53cef97fa2d437e80e743b17e1efedb755c436c505a86c3acf8e216d5409ffa89cdf6178d7922eeb2f999c7aa29594db6c5ee165af867a84af0a325f966f52a14b4bd6ff992fcd9466dd42d3fffddeac8cb1974ae268b6f6812e60dfc6eb5f1bfd7bb55c2f3a56f9aa267766759948be5c3da61ae7a13049d9179fc36fca7458579b5b021fc19532c4808cc17514d05a30e6f1dbdad5e293ee6f7899b61bab84da526bafd1ac8a645f7ecc8859cdec2582fe794cb2df8995014db65b4eab809d4a6ba550becb2dc67fac84752f2d5929524ede80234afec38fc81910665a56dc350078b27ba7a744fc6b495e0401cc699360015b8a779d49a91fc22b691bbf4f0bde09c8ff35aabaefe151d8ef2b068eff8f5913685879571c228d2215c6f50f3cb386f2956f655d308b470a5cd580fcb66cd7e49968c3d7857b54567affbc91fd8610414ad48e23ac6eb3f078a42eecb2ed6765afc83c2d3e243b3ff34f8b5809e1dedb0d775ae03386265282d71babfc2d82db59d2ea7dbf9c9da92aec6cab010c04e6da52889f043bfb696b32d4adf1a7177685a2a80fde3765c896050f4abfae6fea1bf8ae7d8e1ea78cef244840e992d68232fdd7411c7dc5273fa8b9e7f8f97946781beb657decaed7b979f682ea7a00451e5894cc982dc1eb606277bdba99ffd0fc3356293aff094e234837aaf9fa301c6498c50bd7a525646ce97e48f22946a092e28d4306491653c06183fa76151614d10b8fb7b51dbcca7add5cae8d8abe8a32ebd9a01374bb520640353c89e0d8a23d52d21fbbc7b04f600583d4a896c950c9633854df40de1d2805f768279e280b4d14dadeb4a90c80fd0f1af795443875f7184331d307aa28dba3fed73126d1d27baceedcf376de52a30f3d74d09f9a0d5c08e9ef211afed3397ace994a39748325ae53bea62124348b15a001934886bdedcbabf89f6a81e8253c0c1bb47ac18e9c7b859f0fcb1d92406745223f49ef32014f758755ae9f22df59e60f591cd0824e1915355bea7dc0ca15c4bc9a16aebf38c4b950f59b8e501ca36495328cb9eb622218bce9064a35e3eeb6a6e8f593c5e58b735cc9aef0a31d2586cc36d204c0cc7167e43132d270ee8416a3b2c3bf16d64f6b5b6d0f7b079df2267614dd6847fc2f3271b4409233c37f7f6a5894f1d19ddad6fa392b2ece2c5e578cbf7da4ea805b6885eb6985b6e3d004ad6ad7e772d6f3c61c65a7fb255e2b36d8bf583044c08ab97e7e5e6b8442dd0fbeb27b75fd2c9163de2f25926bdd72f8cda9e2ed8a97c3002675f0847c9d647e7fc50db3699f1ca41ce9a2ffa202c00c5d1d5180c55f62ba859b1bd6cc0083123c3599a71848687be4406b4cfa4730c0431c9219bec5a5732e8368c0b568654115199b96a130cba02147c47c0deb43dcc9b9f08b5162bba8642b34980ac63ae173dc4842351fc1c8a551afbdb58cb2b295490782130daa4f359a6a80d72565865be8bcc0af888594903ea0112f6c8d923c5726c4081e8c856110cc7339cef0e2d097ec6582b8a0e035a7630ad3052bbb189f3abec9cb29822cd92d9ed86ab7029cabd6297c2a33d33024ab77167f9d7b2dafd5445ee24ca6e13a366426d46c7278fef0b7d6748faf50278bba7f6d78a85a9bce97f75700c9e434209491709d23c599fc95a194340402cec351ecc78b946ea27cff1da0ecc2b1f8b1a648b1dcc10f799cd0f6b65f95c4012445497e5ba3cb9f51964a9468940b27bde98b487218fb1c1fc72e9af6b866f430be2a67fa376392b4db2f4dbf32772671b6ae55ca9652be6181dfc0faf9e9ef25425d403aa55c9706f9a9702153dd7f904ca664cdfc7b3d82a5377e4e4322dd43294a8a1e223b5dad2a94834af9bdc9bbfe275f278b1c2c556706d0aca09c09ffa5f411c71a35c9015667e62cd7d6f6909d15d4b99ae81d94d75f4310f4e5eac73f6f749e7d792413eef7edfb53cc3a392bcfb6f5e0e16a34a7d73030bd95bde08d4bdb2cc8c1caadfffe82cf06d93224fef87df36fa7ca7c8b52b2c7f25658534cd0b83a5e1534e75f8da9a176d1c3d9f4c7829f0f697895060ca7546381d78f2c986430d5d739631719561e229fba41e8be427c067727fd663a3190102f5d1d4f94826b55e0dc4febc4cd9be07f3230422121f94e0ef4ad99abfb3d0dbb25c279adc0b4b7b1a395c4ea2211ee3b382e746fa6d74b4dc41b57b842d2de489fe1467f7f04231349fdb7fac95d69991b14299d0bfcc3190db2b7b0b334c56b80e06cf8c7fa9dd1517474d032c22bd5bf392f9feb0eb4c3fed89eb7b4ee405eea25fd45f882b50add4bc7950135d48a601b566c62f67ef1a3bbb1424ab62dc6183abf6b0a6b1c91b4965bee530e9a68b7b94c0a2a6457fac6da5b5dc06f066bd4afbcb1d06e14821a04bdce9bba2afa6df040aa9ceaf1caa2685eae7e2d6be06460c15726453ec44669b3546b870456f88226b8ecb737f19964c14d488b9a7687711ebe3cfe8ebe11cbd2f8e1ec96bc50c5642cc880aababac8b0d1e7c19ad90dc7d5e576f4c4614fb945aab6860454b6239dc5b72a47737bd43c9226339025b54eab8d32c1aaab40a03e8bc2567f035326d4c074b1541f70d2bc1dce6dfb23f5f18f51cee841154c70fb01bf2d171fb70811b1b28d94b86d735cdf48d587a4779b9fd920062f56d9b791aaabb5f87c711fdcd483895fbddd3086c7e88fb3fbeab420886607c37344c9022d036ca9558338c76468566d424a1c3406b4dd12a176a54cb03a5a6886a8e8eea0e489121958e09430988371bd4a949feb2bf5114aa6f8fa36a6ecdd1e805f93164f79d50a763d5cc622caf127cf9cc2ac5d9e67f82ac9ebe72233bc370a35eb9f66d1876a26c6f2c7c4b84f107a1efb7b2eceb622d3d3728c0f21edff824008b10b8988b2ad1c6eef0189e610845e65ddb236c680af92dd79ba0b748c6224753a17adaf83ea8a1cbcb46cfa02953959f9d1b22e47ec66f88f70ddff407e7fdf50b223bf981f72b3ce4157daef256eb3a591c085f2a29a2474fa3669c78e5f012b08897946916ca046f2b47eaa52c6a6b7bf41fffa4637f123ae10bb389778703c67d62e3f17e594eb3ff1af6b4c624828e15529130fd8e2cba03bcfbce40a3f2459787f5d592aed8bbfa59e9256f49d426fce67fada732660adc3846d4efbc9411d1c64be1fa1f9fe90f31b4ca24bb7f505e2558f8e58ff13d046399afd0be395d6ae10f2473d46794a99246514815c9ba7860f6611f2df3a7efea66f30e44940a1c69f480bfcc6a04aca5f21446199929c4f5daf6b93d6fe1431e8293a66fd289635af76d3259371602358eebc8ac76faa40087fc3b4a8090c8619a7d1ac0ac14f20af1d4e5c5ee075861d61060ab05892530c3d4efc3e4c8bce536944f953dd7c83959ef751713ebafc84c686206d68d7adfad4142a508c22087e93106b104c820e69fdac0081f4698a6afad268a94d34ee78630b57567519d5aa7afb0dbbe48414fc992e3c6ffc30b4e80eb6952a2dc0e247135f5b5e038dc1704c0078956363caecfce4c2bd8d1163781afb7cdd270c8306791552da5c44fcfbd59b7cc802c1ff282a72e4a071fcc58de17544a1f61e6c30622045aaabadda94d5c275cbb3622d98a6c73518e59c67bf513463ec32d8387a574db8bf68001e566e54d1c7495883b4efbb0fe1c238bf2365908f322030917805e53a994c22355589f907c1ee79c43358225fe50d096e965128b8e2a7bb042957ee13dafb73c4bb9b7948e93928ed1b5c9b444615b47400ee0151efdb74161ebe40eafa5ef4bd4d6873cc96452e1e78800eed6ba72fa78523af008efd435a125888f38a0e83fb2bb48336c3aa9fe38ccd6e508a43ed49550f79b156227d0d86992f91ac142794924ca1b0322066f461d6069bb4e79ac1064457312a6bf5acba712d0590136aa97ab8063580e35205d31ff57d74ce7915a4977bfa2519464f794e182f12959fc6a82720853845e6283133856d3dd366e8876b2631538d119fba0506f0a73e7ccecb3af19b615e796909e66e4423105bc8c5407a82f34d1ecb4718c880912efcc280abf5244d3b55dd44de014cc1d5a5f9e454e80df6ea5b9cc682c0c79933f1e86b097ac14a8f35048df41e3106866ceb9c38a822754125488018b634c090ecbd1546f3bb07e11ec7890c6ce3eb1a6a27938c678010772a392b0114720af18884f568b0d02a1b55ba44771e2a2668d2af177b22be7d6bfbeb626301d4bea7074279d03c41ef364daa960379fe705000448e2a901a5f8c2b90e9ac48e4084cc2ce67d9ce72f46dc2fc8cdd183b4fdea63f812a89bb93b3e9fab05fa89c97ff134c00d38fa55c3b1bd4091d69f6f95dcfb1ace72d740a3c8224beac02242056327ae0cec18d6630287938239227f26e8c2ddf8d646ae493d348b6e332666d56c79d9b5ac49746c6ddc0874d8cbb9458ad1039d5c2223654facd0bf646505452c3ba63bb73b01205fbc6cb5a34b03f9201227c8e5bd64c6ce7b85df63e3090f515548ff43f480c0fc706fbcecfce58a8ba48c8e92dee2277270f9a787e8aa5610209914ec4e1771d0599061fa563f84d682350d3897f7510a91cfecff8581899c0456f31fffe2fe98aa43d58c9bd570a0701fccbd9d92bcdf7ee6cb57744a033156e57d2e9405923557e1fa8428e55d2df11afe103bc10374bc378d6ae0c85af875c990580b0430015b4b03bcf6cd25c07c772f2dc470429f8cd4e28b4c9e6296d6c1e3842a5786bfcc6775b08de7d38cce4b57e924f29b1ba1df2646d8fb69c97e95506d9b9f8fed9cd24cc93761865b92b7f74da3b45278d1530f97263bca16bb80e9799571725aaf44e6d38982cedb55a32353a877eb06cc0bb903e90017a69823a285398542bab396c9fa9b5664c9e7cf664d7ffe476c5f2fdc548d66fd5728f014bc848275ffcf84be6b6afe48193f2fb059368b794edd671b2727e4c10dff7a089370f56f8dd08ca10009c4f034d9fef92aedd32be140a0115a5dfd91172fcb4584c4ee667b897298af72ba3329e2428090415ef83e5975bcf587dbc01c63569773a2933ed30406d46bb4b5273edf70e81165c8ff05c340bcfb396cb752c03a7b01df5da2e539f49716f1127e19474dade0b0b9115eb4539cd91f918e13c73d98d38906be59c73bccd7d676b5d692321ec1ca4472bdd768e40ca71c500a6f314193694c116142adb4754db867637c0db0962bb20b20198b5d29e7e5531860850df48094c55d143e2463712a4cb85f98226675d67e4e9ed2433bc98c311ab8ff266283c5f2b62eccf3a423c12ea81ab13ac013ab85a28618f21e92000a2001bd972be2b7a7f7939dc4b9b3cb3c7e87533517c84b5efb67a4dd260c8e0be9619c5b40f79d06a95c3e5faf18138bf75a7322da58061414e8cceb4effdb70ab54b3da6d97da03d617b7674c8d0e83ce90c0b929baf696efdf2353163b0283f5d242655e334a9a6d23df8cb4295079006cccde2835c907e89b300b552edb9978719199cc855f6e998b238a3ca38a059e01ab67cfb9f5da28302d333bc302e5897827bab18d3ecb64df94d1332702946b7c4e9f65361797550c17d131f223189f27854d8dab07f7e074e39678ecb341800edfb9c246d7da38290465c7b8ca34e2235ceeb9021968fa2ae70a6bb7e232d996e75ba87f81993d91f6fdd22e3308d36e570a63b599bafdae587dbccb1bce9a7006f67c21317bb97d6347a839ecdce56eeee622f52b012e1f33bfc62f5f520df6fa28986d94ec575726c19dfff37627d69ef5b1ec32e467ec0d63065c7a58bc9284fced56aa3cacbec9d37aed48a3c9c74eb9c3ce30da6d66248d6cfa00f4d038235bf0aa3fd5b5c3a6a39f8e4aecb5ad9875d42d5d6f40b1b43779cb2fe5489e14e5093146e367d6317e8f750e914dcb98e626548fef0e8bf604777e5e416212ea38cf3019a906fe69ecb9f2d57be725dd785b1cd7fb16143bf1c90ae4a8225f20a6af6b1a6c736921434072c0e85303925d2f0c630e630f25c6b91d45952641512a727b79d456ca6245d847cf3e25c69a0bf63cc2a7597c37c975181657541ab84b84c1d36a4b4574b2adb6368236216d9a77b676ed25ff9575eff0ee20466cb5c54c95fbbaf115b713328caee0f0b1aa12ca0278ba4c463ef65405b458cd376dd8eb2a9c1f8b9a20fbc8b6aa9fe52cb1882f8f86de5714b701766d7b6a0df8b06c5ea35e2d927f311188b94f4a90cb67ed041a59f6e224555dd0ce8791bbdb372c189aef9784abd72df0bdb058d94cbf054bef7e6eed7bd89ed3b14bc0295a4cd2cf4e2f02d44531b33f126da6790a22b220cf69cf309216701405ee596c17871c8566d933f7c1b5a56ef0d8e52c426a56e64a29338d52fe21f8e65a9b8d3d29179d53724f0d0903b5f54b01cb8d68ec4817369f2b29ecc40a6e47850cbcb31a81ca1d0ac703b6648908065463970a16d621c5abeb52a19e2902d6f150ac241224da76542ef57add7dc1bf39401f5933e66e40b973359f8fe519c67c7670bceb688b2872cfffa0f37e0fd33016c454e4c3bd937fe03d0d5f0192966bfa64f3cb457755cf70a64b7eb3a01d1464b576664357d57acca7de5ab93b829002a2afd5d422e5c8d81a8fff489ed1715e0ab1db9eefc7ac907fb48120ca0b849ce37494e21fcdfb63a313b03f3df2ae56b125d51a0e5fa846aa1707f303164aa11e3a392b639097217b00bd55476401821e08c2e6de31a7192eb71eb7fa71535f460a65f3fb6426441a82e5db555c087bb8d09ed4ad06c338a6d47ba8285ff52507ed67c6d009f449fc4afefb82f65bbdd6b9ca48e43d3c2d4044f34770b76a2759a84412a2cbef34b51bff197da003abc9279716dd4b69140fb357bc20cb5609f6d676fdf5ee01980abd5cb25a94db6e6b1bfb71a6b854cdabbfb6b35dfa25ebe921b8c36134337e47c27238004abb3c63c36d6ee6b2d5d833fd678512a0e7c04ee3eaa0eae22c9628eedc81bd2e784d1b38a46a058110d36b465988b5d6eb99ff28293993ea5973d8e88072d5fcf85a29591b39a8ea1564c7405a8d765be32dd1a4629bfc60fafb1ab99c98489ec60424d3bd03a12c3aea7ea784fdaa3b0087218ddbd293c57076fe92ef4b614743a6b4f46afd7f40b23cc2fccb7f4a72cd731dc7043bced9b0bd15d637a57bd70663f106cc9c0c1bbad45a2bb823a2636069ba1b5ed916a2a661615dd7e66a17a3c4520186ea8c9ece2617740968eab46f93e2957f02e1e40c57f599c62fc8367c3206bedc829b6d939e29bb257e7eb076f0002ff66094f2591eb193cd983bb3171d5de51a3329bc8db66440894d14368951b9742361795f4f741e565eaa5fc55546a3dfe58fcefcfe057ae3290a06d8d27be8c5b9ffe59812ec9301f1eeb6e70d760ddc43e318b3916c2c43ac75a11ba0eb8066bcbd1f350082763728af1199fd233c02352da2dc97364826c30c23daa69aaee83f4ceba603bd32251fff61df922047b454272deab850a2e8140f6b8c0fd72111cc5d38504e563d94d93c3c1b875ba842e93e39b187227ee308c7e9976ba00d488d1b60214686a51d0b9507da804ad376ec5579728a3fa062d318ce38a5b26c066071a03348ff7cb8494aadfef461980ce51978867b04b59b37c889f5afc9f5916efcf1d175d90d4b502be9f9fd4ed13e80f4ac6f0bcba16ad86122d95837d15d92520da683e7ea21ba1f5c60ea0a59c8afbbb4f902d927a8f2f4c596600914a2dea6ebb72dfcea6b1a2779ca8c8b8f350a0fc83a54e19a9b69cd3e1581c6b6ad8b4ff3ffa6c2a6d898397e08b893b18c037607583bd172f3c447a2424825901023493cc39594d2fb7eefa74717d500126b3478c17fdcdad890cc3e465ce2de48b41d28129d8dbd39b18b938d673c89976310841299b5c1aa13ac19c0880c93edc9ceed514e7a25358068856c68fe631ec83372ac25c90bc4cfe0bc4bd8680ab72020b3120de11ec1e6f40169e6fa6d3b677629cb3971da7f2d703aa449dff20345c3e792fe1a76ea28ccca869eeee1b4b6e982870ddf0d58d2148597863ca15c91736821b103f6a8872d1034ce40d1ef82468a078bae780d10b9ea389d26fe4c145a555d14375368c738ab09f1cd9cf3256434d40d7ed6fc1abc675d62b4409464541df3bee1a151661d40dfa3b182270d7c66a451c022aa24c3cb29e5003dcbf6602dcc18746ae5bda2586b1dbf5f2fd71d75c71cddf7679ee9f57c3109024d437584f95c70142ba53a6b9ca9c8e93feba69a5e9eee6039523cae7fecb2719da44da10cfb24d08bc941c87de2791a0ce9b7e82112fe000bee70e92ba56a9ca4c3e78fbcb1217153b3a828cc8fdb31aa9bbb2e7a5173c0c5d14d5f50d128f440d660876e093f98c8be2ccad120a6e0ad9cb10b1ef012780b0cc17abf5853c48905a86005bef664c3e41bbc84ccee87019dcb32f5d608cdb194f34d783e5aec499286876737f19640cb91c9c04a36934451e331c93ab50e5c14bf4c79f51c9340d20fe8dd2b50ee2c6c0acbae538bd304c30d9d36c8369641e69aa13a44cca38444c841690f3f71dc39b913240039b706317d52f6642739f45ab67c9b3ac20a014d20ed7174590c4017b3700709c0709b63180e00adce1bfb25503b0fe309ed3fbf556288249b4b54882f18e69eede356968b49bf2516ef30e5f799df6edb85a4fa020e2429b4550ed4a98532fe47e6ab6c0e4b98ffc00d3536bd5b7059e9c960df588e43ba00cff2405db30ebf0754d93922c08005b7ce4858811d755e3a81bbe710d7107622021313fa9666ebc5f304ed8720f2c73fedd6198b21fffaf1f96c817fa3452e5850c62241729c2f3248a1b32a7f7cc56c4c385579784ad80ee985f69409a29020e4db050c691692e1e6e3566f338c3b89551a5660769ec68e4bfed5d876a286bf3e296be1876d982624be6f8d2bb2eeec6957ecb03b092462f50e28419327189d867475abc6cd2cb2063afa577c622a9abe918bc08afae36cc24f83c67e0535812343a6468a340837bb76b583def421a004251d9efc8a24f30cb536b197f9a8e9125d9950d18c691f11f74afffa30ef2680f03d9c0bdf0364a975f084af23268322a2ce7540cb5cb76a16513dc482a23feb8b8703703b28f5dc4b195c53dc13625fb7a155267551e9e0e642c63c68d42d89ae45e7e4c447765248796647855eb8fa15188c1a5c6a170b9328c29b3246b7a9ba79d3540aded50e234a4251bb72d02eb6d7fde30fa11a8d47d4d2cb77b1c7da474bbee215cdfdeeda77c9ce1f93e0b340a0ebfa6c8bbe051141a89f170f590e603c668ae8f2cb915750dfdfb19ff3327a57bf206235e96739e1640c1c455169a0f495fc7da94eb42a7b25e525c084f5fb464244b6c823b8c17668ae22c690c388ccd569fe97275cd366f2fdc8f72df487120d869f15680fe36e054a9e189a47c5c614cafafcc3101f8d468dadfd7df224c5a09f9d36aca2e415c5109f797ee3c8619caccbd8acfccd7bb88c5542f3e9bc92b31685267ca6c982791aa47af02ea938a4ca0853d963aea660845a52749d29a2e69f0f2fb824b3056f65f7ddc085fa75c544e21790cd70bb94ec344f3469c7db9f29b298485b88a74c5a02b15f61470b2aca33b6b3bebf3cafc33368b7d7d1d4cb7df6da2364183cf2d38f75c23f230e9b1f3197eacaf44c31442d7cc7bfed06a1ff51930dec33a1d5f87e5a84180a657bbb6805cb74992e7654feb9bad733e76e798400493cabd334668d73932bc483c3873e4ec05241cdca250c62c5b8bf25ab6a61ad8272c8dd977c144d294c014e0355a8ed081182b1da02a62b60255669b4bea2ea6068e6c09ea24fa731d2b531d06eb91eeaf0d98b858ca30fdbc42f8dce57598a6c6885b13815acdb6df882d4aa5f77b29ec06851f04167106f5f3d374cbfd5388fcb596ba1d7fca629f18b5d0a94e64d49bb42e06e2e60d38eee4a00902393b3df0e4e46c36a2f835a9188c0cd0638d75f0152c23ba74a70ceb77919bdbb3000aba80437db6cf36ed68b5a262aefda773ec47a8425316a2e8d3107a278862ed0112c46184a31bbabf16f1cb10a9326b68b53de4468602fbbffbd2047920d58ed57b89a82c4eb025487f21931e5bb830234c2c957210757c08fbaf1805e21d62f2dc871d2e2404faf1a69018798d8efcf57dd4c43e3e83aabe98e0ed07b39b01b8dab6805accde8caa273ce95018bec3b876d0f615a8485d8772d31b4b0a6e2abc050167f4fe23d1fd4e2594d5bd3894d789cdab2ef465c293cc5bdf418c047ada2d2a04ed8b9ca242828f01cc992c013ede4cc6b202595279ca036854b4de007908835c063b132c28b5d8992f2c031c7da875f131db11d7e8c5f6c41ecbd7c668607f3507a0c6e45b823cea1dd8d9a823fa845ccf5ebe4ed6d36b3c35c33fcee9824397b1009006c580290e47e184eb7044be53067d44f1f4e239683e693ce31ecdb307f4dc7a0fbcd4ba130860bbb9e118e7ddc38fed886eeff80145a7ea3970d54d811460c6b93c5aa1664f732a9977a0af5352a69de7f7d6774d7fe0f3a1da5fa57d860e133df71edbac79bc1357768e4f7fa36b54ec6e640c6196b54c63b43a780a26fae6094cb2a5878b4d724095f99d1356a7b23c561333dd43ce8c514eb444443a99dba748fb4dfd7bb1cc2a2d49bf112ca209ffd08e3aca300c3c2eb6120165c09c26e4f053f0b74209effe0249ed6fa6e8d3742de9696cd77382d685e8d26e8a732d4ba0c4140d8632d277785e7f642a34c00bb924d2dcf58d3a830f8c24d62ec88b8d8dc95779fd0d0a9a89e773c5acaa08cde0ce74282d4c073266aa269d622329ae2ef20dabcf7e948d6ecb38888bd0f627677320c41ccd704a54b72902afb7a1d194d0e9080011c41424b4035d18007d8782e903ad01638e036d6d1c0898dace64332965cfd334bee94fa80933107f9d733c0f9b09342a96418356cbe34244b6541ee17528a38079f71b506d2961afc2a615a0ccc2a3f28d59e624bd8e288da3e3cbb9c9f5cb568f594c7b683fd7020db27dd68d03deb1acde168d77d7dde80ba37f0aa82445e317656890f332f50735ee06976376844fde4b8f8bcd651822529699f7d576406b7279b1307db6e256d3bcf5a2897a572960a0b73fad6aa09fc0b195ac1f9cf280bf7ef7938897c6297885ac8081b6c290a7b63c5b7775bf669e136e14d3c8d9518eb0168d470164c1b2bc2472389ffd2a60983cb5ffc40bc58906c1561fc8be467da56206c71998d2f0a7f0cf912ebbdf05d84d62247c002b2925035bd214c484d5708e955ac1cdf0228fc8d9c696432b5224ce4811d78b071c259b0d38894359e9005bf91a3ffa1fb74ebcf44912c78ea25105a5f6a45738ba5d11fae7d614fe92eb47924c09f137a3910c431b7e7bd023753c106209176b32a674c9c29f6cbec4305ce10c3e2ac4a7ae567ff55af8ba47fb7a00ca5b02693609d8f863c286090df156e132f43b42de25741e5a0eeaf7b59583a5efabd484fa1f162621e2c7da559b984e1d3e23d865bb47d0a2a3e0921398a9ca44064b846c41d9c42854e3fa688c2e3c873e65142698ebf39fb2b513079e397e94b310d18712f7c09ad59d8d264b15328f8cf276b720e6cc9dcfa43e62b0a569acba74c72b7cf5a0826023e50b364a69aba4da5e7191823576e7f78f7ffb234f7735b3b396e9b5ecafde63142bd7c699eca15375a06d4563d230f1f39972723e143a52c2d5e40f359b66e713736c215c58188a51ee5ff4ade93498b547ec804abf0f67e89a4a10de247332c3bae3872ef6b611c45a2d22a427e21e0d8ddcafd2ff0b249a7d4e0f6b89211dfcae1cddb961a4861389050ffc7587aa0e48be352a32ff96be2856f608585ee52199aa474f72e331c70dba0c92eda5af3f7d378418f823e10f0fd6e5e1ce3cde21fe796ec90237e4b38428320810e91bbd4f53e9133abb102f42ebd76d5c5bb49adee4f22f944ac29e1d298bf1d28c79cb5d1c85b24a304b638399bd893b74427659b2b365b66165f8979fa292427e0f551c177965eff2acda085ba15bf9ae222615ce18f07c47b9f5d026f1d05613335b6f67e0f440580b6051c495004f997efecb6f55d96125e3b01d19d56b4547f892bc75bc405d7368ef63870dfe9d463cc08400d45851e7c863b45e9f6cea8e515a309f8b8d11b7e2b60804e9e73a44d3fae6d8f96f27ff96d2de92ae98c625a0ad2d011a8c3f1de6f224840a25b7f11815bb1bcc0d23c83b1b092873c0f71000636137bb6e9299f92560a6c922f90dbd1459881dba50e338992b4d3461a7916b9b1b6e3bc4c580dc741d26db2e4bd6cd32d0d09192e2b0df92c8dea7a85aa606d0dcf01f97efcdca20060e75b29e7ef09fffba755a73f3ac519fe3b51002cd739abf4fcf6904eea9930e5abbfc2c65ca0a86744ff84ffec5b8ffeb94b7d94da93967b08b29dc837edf2bb0ecadda25fe1ec1ae363d579fc9f51b70256814539b0f7c571bf8bde8320de4f85ba11988973914aaa9da1975ce10ab80a4128ab9e5a61abe305fba2c8d56acbe0b1d85f71af465e563951535f3dc9245ac262759c2338eb5a502114d75c9caad6b7db61c48de015e4db9e90674600ec5a080c216f2dd04aedc15b4e6c2d70c0a99d9dfe6e0e6aaced6f09f4128de5fe3b725a406838e2e3d6fb86230847a8bb6503436a1fad8f9648056f858ccab76118e2b201ef573da4c5b2d309ce24ecbd6113c3cd6beea13055e1d9b9c1711f3a4b1811690f522a5e778b7cfba416345db18359c980e5b95904098d5f4ec13b7adde9b5b65ceae1ebccabc8680485e6614e288fc1a234a910d93adf55611427f46ac9a41a44d4beb665b1d87adeda2583494501a09dfe9b6acc8227f63e2118e7fbf75ab5cc3fae2662b78f8c0bd39df6be5b89e2f48e6744fc09e6fde5dda1a1bd6f0638743c18d42d86b11b6cf18134d421ab242a0476f2e39dc7187ebc6f3e79d663c87b59f16d5cb6169508ab666b0d10257f5b3d10db8bba1b82bfccd8d06dc4efee97903e4ec8865285c54e947af16f501ac3af2c6354697603a0dc160221352ee40f65f58ec7d6e9bf4339b74c7155fe5e443fd8390d907985a7c6138e347571b9423836efe7b99aa70d0dfc385bd997d627395fa2d0634f10ca9f0db7573ca22cb3affc44f7f6600056775e9736477c60faafc1a3ecfc3420ffa680a6af4987281d53fa9f17149db0daf46a29980f472cab8edf55504b8d74be0e2bba29716fffd4296e8e20bbc6fb44c8e648edbd7b40bf8e5450d5f7bf990fe65d940d53f51c88503d8d8cf8c95413053eae5f1e8c6a0563b03178434088931c8d84cfeba94c1311c6f83abd6774a5fbe1e89276087a47c9b9056afa7756bbf616a10b9abdd36f1b385937d680e0251cd1c5376826e593c314ed1f7f51b23bd06ea769f1ac0f319017e4f43537a24ab2a057c4aef4f958970891a766addb510e0755c6288ca07b3ac3fbc3f9ea9c64f8ecd6ad66a355fa2012e2371324c6eb99ad1d2da2f31e8ec9a474107a2ca24c4cf1886c297de2908dc0e9726fbf04e23bab8678a9ca64a7272b727e728c02cdb85b36431a0025db3c4c7339198a401c19e6f287441c8b6ac6b276d9daca8df19387f8722b81662702abd817c17e09e1b193b410ec34e05fc92d9f1180a3948ac107b5b64cfb5d66ea73b2a24d7f810b11bd77d2cf0a01e207f6b6320a46c8dac2ff869cb1ff662b990c9888376e37df8f285131acc35aaa8451ab7e09e07eef338c98128215651aa91e4ead8b67bd9fb5e001048d1be735bd53045a3abaefdc9b9938c6716e11426372d329c9a7e911f3518a53dc3068db7d9064b813892ac6498ff584f0ebc9ac6a1782d3e447abffaf5a7f45bc182263a3add41b5fcaa5afc2408efb1222fc2f43a5c4783f7931573ea2c3e4d8e39c10e7baa4db755cfbd4094197a153a85d65d778af0d6d82b0b7e7f886321262d446672469182cf6250561a967a9b5804903faf5c42b8de245cab30e93ddb0a9f2a978a5b7dc1b04fd0904689b44830a3d3083029e58c5094beb7a96396963a58c4c28cfec7ad14c9366ae8b9735409653fd08e13be7bce415d0cf11a0ef074d76b790d78b8c5945c152460a4bfc446253e7d321eefd3558d94df4201acb48d9fc9006c6aac324390f55b61f7e693b3bd75fb98af4e14eec9a24939f7589c1f155ff34fd1cbe307a4fcf007842f3fa21de26deb73c7ab7fb2485fab1351c46379d235fc04dc6d8675b813872cd83e67e2db511e8ed60e318f7c27a4c6aeccc5121c016340badda495342cf981971cf9d4511b028ab56471a7014f1d1ba38db5cec310c6de6198cb5ca7d0ec4d44c2040f1fda8ebb748cc647788887b79bbf41a6860a120425a27ce0df41699f10e7a165b148bdda812b018785a50ab891ad75d6a152204f4a57f682b83eb5722dc42abf96cc3a1cb9125d6323c06ed92f7eb6fb0d23c15cc9e4e4d0d4776e0c18212ea399afa1ff03b228064155cb5b07dbce1b544886dc4f07b20a3ece548edbebd90eea541d846599d91262e405496599fcce49581c2eb8ba7b609727f0da3b2ae50e1a20f59b461921fa3cd526b09690fbfbcca771009c2761ee1cccb42e4055c632b86a84b6aed8317a4e6ad7e1d6cdf1c4b5b19b89ee889f7fbc96fbda71610440d81bad8cbf59dd02ceaad9cf5b19f14b19ea555707e7395a0e3051e506f2c3dace10baaf11cf5f8034149b22cd0579620438fd32193c2ab0e43ba133857785125df4f3a0c0685e22a613f430165f6b8a0d00a81eb00c7185fe7b6f1e694397f48408014492f7a912d0bcb27ab76cc9657b94808d0558939bfa83a35b9c1e2526b2f688a3d34e11f766c6154a80c55f6c7b465433102df70e94a0c7e3748dceb31abc85e6444c93cfdfe4de36d083e4eadc2d27c1fb815d91ec724b90e84cd5ab13f4eb886500d581d89a514840ae2e58e97d8c799b6a4b23d1203a41eb7987056a8330e0ab5f5660b92370e4c12be8b14688622283020b01b550ce312c8887b6d8991570202a181dd5797f558639929ded26a2fecfdf2046db43e4dd5fddac5f2d7e4af16d47fdf5dcfd5b1deb6ac7b28870f65760cf8d2817b10766dbf817817227b822ba8518a8cfaf109d504b542834b7b2dfd3dde898866cf18b2b358765366921f52d16f92ff805ebbb9425be7282960b81faaa3738e88dea0d663ba06b53a66ae1957954ba1f982d06a88ef9b6c3acac630e28b660668933fc53beb8f06fb44174b02f96fb370182b6eb9e8ceacbe321e03cbce841b094036403d53ba2ebe25e13f9e37c00919397eeeed89bd82efd37aab76d0586d017ed3a667fd094168cd953fee06908ea06ce236400eb7bdbc9a657f66612ed2f8c16c9a54bd8fde5c9fb726031b6c38177d7a579fc09883fbc6d5017b1de4bc41104d1821239f92bedaef3f3b37e0fc494d258434d03da7d467c74df7cc892cdb31798a8a1f024148ba70b59e1f1ae4af34a78b5841d607d65082840e809de2b5755be26b8099fe4528f299b41b9ab0e9994f23e0df86fac35e03ab96cdc9f55f7f708088f3c6dffa73b556518baa0d20c0d09f0ea7d3d4932c5b7b0b78541aa178cf435cc93f09bce0446ecb8fd3e3f4d529ba2403c5b78984a797cf3462954494c4897b79fa44fcf974b58b7757ffe27bc93e71d7d8353eb675c20b9c9fc39d7187ba6b3a8918827aa615062654618e8436c5f092765a3cf0a165a4dd29bfe1d90f39555a0e6f79f1aae58b4678f9d01e8b88a61e9c1e47f6d696890f7a5d27d0f3c0f0e0dbfd0e7bfdf2777e0b20763e742cc9470a762209cb976d1a18e5ce627c350d17bbadfc02248001017e2ea7fd11adc1dbf2dcbb785047f9cf38f236eea666a8e1c34214c8a3dc05a23f30c0a68fe37c401da25945be9f157a5450c88ea31a7fcbf52c4aab4e6fde685396f43584cc57b2dbf081d089d5a379b13df8de8414b87ecb7e42e4eefd777ff1cdfe38d0407912df9f73babe20e97d9239a885667dc92d4089fa0342922f101bb8ba0b6a7cd377c9ce716d0de8ca34cd31c2e78979c577423dd67048480bd5777dfc66529dead5f1228e3c6ebd0bed849412a46ea1419b41cf2c783858c7141e52aaec94b0fc6effbaa4a124ae9e9073abdf368d0ec05acf49f0d0a83536ded7810345878920f5b2604b95b29e91861b749d0553507d41c81420e37e7d87d76bbb17eb43a5c6ddb68a44c1a77c8cc97f3cea5b4884f70d0e280b7a1d5bbc7634667e100d7e3e602f55c5f7fc84c9261eabb21a9db1ab03ec31d86c373e32e32a37fd588a6e33cacc405bfadf97e05fea8d168bb43416e38d24c2da517d79ec8aaec7e8620703a7132c149748aa9e722a87cd54e88153befadbe7074b922d9697bc1a796cfabf602590b530fa9610be356d1e9f1ca8f52be80aaa5e83de9d9e44e60af8b9d4fe6e8098880bd2ac18d120d8f068fb23c6cbff3c71c3bf027b5266d3800c9ddd1b4e78e71c241b339de10509922a2bc52d96bcba173d49f6dd610d8bf7fb8795d5890c5b5777fd811b704da5d5f17812c1fba8d88ccaf4b6fb093141134b58c4d1851f1c45ade74ad21a143660391c1bbb0677d2190ded95be1852ec91027c98be68afd8b48f42521224e23f45550f2e7d70b6e38201e82f3c0b1a568eec29ecd64f9fcb427364f8574ea1170bd5681f1824d788feebd5968b2ee5213c7dd2e0f8361cef4d492273f398beb92079c2fb5fa7a577bbaa7362698de6721ee50a2c6d9ddbac1e2e237c325d2ac97043dea8aff36e61660f2610de571d6fef503390b5c1aaff60fe4faff4945193d8e226ab45761ac510368ff962e036cfa5a5546ceecd8eec7b995cbaa7461d31736f3adb01017f4e2390496120468b1c5a99be1e59372c14ae2814710d8526f21a92e6793c8928f31996c5e0dc2bc7c7052fb3a9b0b2102879c10c44eafa3bd4c6153bdb760f31240b84fdc47475741bce3c5761fbbb2d3ef27623f104bef0d2560d9d555fb530ea91e6fdc82195fb5c72cc0ab049bb9bebe84fb52b2ae4ae10f97fedcf6c6ce0492c531070fe0f0ee963baa3bfb35b5fa80e30ca17971ef76b9ed3a989a89b162e5ccecc44c14c17ce52c03b07d0887d3f81ea7988bb8e855a3d930a0f7ee9664b3e22c22bb410de13bbe07584cd7f0f81f4039f96ad12c989e0214362ad60e2fce8d0a4fdb061b1a0170bb0cf68744b285473c8cef83d6e2d8f9759e5d095eebf3acb91d399144dcbb08d8e98248bf65635419fad23ae8dd19f44fdf48bc8c530ce5711cd4e04e8761e2ecfeb997e2e50752d7fb7f39cfa806d0e2a15599e970708896258015d03fd0a81de60432bf863bc6f62220ca4c75325123f90d0342fddef86c292c31da9480f43707afccd0f2b44395e1b19d58cf24dc3d8254db3b41c49b7bd618a5584deb2a69426bd321acdc5b92f1be5aec03412a99e194dd12e8984244527a855657aa182f5b8d973040c98f64e6d770b5ca91b92e32f3b0cd979cc9730d00e4abce178f7efd7fae4414638cce81d0cf6e28152c87cbdbb689f5296c66cdb0b30c9a1fdb5eaa3d43cc92becd88ffb547d173af0eed1f40c7dc80b2e82eef35bd5dcdc08a5aead4ac8b02a307c9624099913bcf8d5477808c932fb55cf8f070eb2fb452e6670594169a51bd453e2dfa43f118e7204ee3c722a4beb968b4892c57aefa288ebf7c99b3e56da812326829cd9344433bb5dc7a3bf9426c6dc3cb8a5985a87df377b219644b8e7fabe2943b37b2aae40392292f18a3e5c16e39eae17de9911332313038697901fe0bf8d0c39c6ba4bd69a01181e2657fc38463d19b463fb00a9c5e97a1625d07485747b772ad53eb5cea589866ca8b475c68ff83edd5a284c41e987ff51dde5914ba2b742d7e19fd2965852e05eb0e76816e724cd5200b4a5b3f928f3bdf77793b32090a1d65df36bcef15f856b891753c95b644e68d5fa9522a71310ab5e851d8e48c69046ffb58b870241e4633b609c1b0464e242af673903f9ff8089e7fca400f004af74f33098afd4a16adc3f227b2d66869e80dcca4732b51d8b4a2e413c862599979e2d52d89ba92df20dc3378a847da5841f9c140afa8713ad772bed7c1d383ad6f640d98994a9c5a2e7cd8bedf7e432c8b12b1e1f17492ca18d2b040186d6614702c8c3f96abd7ad10a553062e9713feb535315731ec8d6c2b9d4936967de3775762141f047b82f7c0b54f55c960101ba4a268efdaba19036d25d9620ffd01d146820db784f5d44614da0fa993bd0bcd5e3655f695878ef702c20b494c2f9672ea34fe4059d5a82f8843a82dd45d25ae6319dd235d5b905efa6f10e94fe9e998130fa60e3bcd28b1b0473a6769c399fad799a0d933d3a0fa5e058baf2f6c74c97d5e5e4a6b25eb2f2bea7b2032a175fdf151a31f24039fc2d9afeab91f1b62e003f2c9443ebae596e4c2ae5880bb01efbbb28f48f79a35f19ba4deb06e7bb92a5311f488235e494ee930b5af4ad5f01bbb9a86ab1ccc291203e1363b7255ec53b53a252748d4804e1251ce903a066fcd1f7328b9f9690674eb3f4ef127215c9ebceabcc3ffe7f4d4aebf66af06e4288eb3d986aeb9615952bf21c8233aac7afe9b581961a2dc0817a2404c40229314d82310727ec1fd9b144eb2ba4f4e12bd4421d27a0292a48f492e65ab95808cecc3584c83e96b3b865f954344672f16b28f21a569a85d3a293c0bd15cae141b05121aeef01900f94e427bab6be148e36b793281f291b799e082331d60d04c7ebf7a5d4601d3235d7a6e935d460323e29b5b159922f4ca1772343475bd72fe94d3c203f8794a7b85883a52798a9d0b1d11c60bf95afb95ee5bbe925897268f81f6cf7152c19ffdb74a2b8e05c367d6d1e903cd85ac9afceefe724009abdc4a872e6c3b2191e98fde2749ccdb18c88a49be61a287fbf693c48c35a0da0f9702e80b887d255c102f2f6910f55c575498530fdbccf5df2331ae03a7a1bd8a4b65ac1c04764185f1b5ec6253fe4bec4a5168a855da2410dfc56dd55882ecc26cf29ea90315b28cc48e2201e930eec081ea88f1ba0c8488fd1039be8730e5555520b9b541bc2d69ae56436973966d594cb857ab047f410e92ef27cf464447e395e1898504151e063c871373126af11e73257e9deac1e1be0a4a6739f098851bb913e5b428b77cac506b235bae747b3f9d8ed93dfecaee9655572e5d9a4302ec79d1b77c190c381f5ca7161e4932fc2fb231551124238c45fe7c10c8f678e3a230ed887180b13e228ae9198d85345c9bd2dbf9f00fdceda59943c051dd54a80a2260298b9328265928c598ef6522c640c854db4b4435b803f246bf290997673b6673a562de3517b547c782b9044c3effd06d639abc575e2cdf473737ce2bb838af0cb343302402fe7c8002746a883e380dd6b2c27598d97550571fc90193ee1d510e14972b28d179fd7bb8ef26c63faa38d3de8b85d865617f2d370ea0ae24b274dbbe109232c10962ae66cba50f698dbb3407bd6625ad45efa2a22389fd52246864268e52ca2349d118a107be6d0363e9d7f3543172f1ac76b075614af877a89969dfe44d54fbee93d2709947e5b453bf80f0a8e609f2bba2fcf31c7b772d2c390df5f480bd9580a1c30d69a1729f77ec5d4358f33ed64b2c7e16983e4cfe87bca376b173f6771b6869c5a29a0aed02b686548ca670c3fb447e95a7e35007015712147f74d0f74da872ff0d48f3b4ebdeb37e8227ac7de19f61c68588c5737f95d096f3241ed1f385b615aa33677a3afa0bc6a886c815c459c88ac22ddff4c871bd0a81010dfa7a14c16f6d61522eb7808ff182cc7d3e896798096e1ba75d5002329276388417d83d6bd4cc496e9d8049009ef18c5be416a2818082b29d88f3729d4c95cfc0dcb71182606fe755cf29fa4488f0ec8b4803685278b77a4606c7a7f7b5f5fd80456e6bb05bab9415a872aa9393f6f224735be8f9dbbef452d3e53d0fb7c756a85396193872aba24d390e403200c84884c998247a637354be2095317f2ad7e5f33224593417539ddc65a4c6d5433ec48c5131d7870641e2648c07a83a429d1cd96c27ead079a11f460f6f56f08a2e399760a2b11fbe258aab2f00dd1859ddd14b84c84657d1ba0b2d016e7addbfc8304986c5984136fbf3f5b7a6c2041dc4fb3b4aa2635dc07ef6ed4dc929960b2a54e4f38475257d12dd1ba8818ee40503b4309513d6d2021624d0987e1112c273f70f3ba40db1d270a81a6740ea00a903c6fb557a5ff9a8de17e9b26be88c23605e8705ddf32f52fb44360e7cd451409e530f390fc83bb866ad0c3647d2a35ee80ea6a5da6191322c1a1a954506085460d87e4236731586ed61062711df3d69325095250ee62500dc98695f942ae55f1b2fc7a203333c30388910f5faa4479d3a781719ce9fdd5f801aae50f62d031950646a324007edc479e79809103d32253c8de5fdc5e94bffecd47c50e6262fe4a460268451524611314aa066b97d737969b617e6656feeb1dd880306d1f42366c1044bcccd8db843f7d7892e01bc01fdde4192d515d2cff4649384d515c20c8a9cf6e7b55d821246eb37a314a7e0cd88d4c4e13fdc851504b301ef07f3eec8b59a9e473fb638633329ec01f68ff37c7fa71315ffadf3526e0db614c419fed16ccf3bf59f48d6beb0b4d970da985ee0a0ba0d03d02b29ec1b1662eea6222aae052aa3db1a8c3ccdac4005f92b1846dcba2bb96ed2a2829899c08ca18e890782354111472ec2bf5a4a556b6f2f2f1ffcd2177319c04de51e73504399a3315497903caec476bfded004e3c4f39dd2fc6d3e79671a5636ea88a9f9f466a30e39449fddeaa55e916372366d436ed36a0d023a95b4c782db0244139c83fd9a9f53c026db13bbbe0cfc28803d1ba3f136616b7ee767130426854d6409c44929ba4ae8ca4948bb94d8de7e25bea2e1ae691f93212d660aafa05b297e6f557bedbad241bb934aabe1c834e5e9d842eb0af286dbdcf399fff5e1670c3a6bd59cd38e7ed111e9d6830c17c1925f5ff41d0e4946c46f137881b9d8b6cdd15276942fadf77a9d812d8242d9f0165ac62c4c4506d21cadb63bcd75e9fc42afa53bef43f5b3e9e7d2beeeae55614faee48e76e9d244fd115e9e881408dc8c0068373d4147854e9e8448891f535b37374b612184d058e1bdb3caa92e240f821915f28195cfa02c7f816f51d2299c0a8d16426c3ad87f18a2fb46abae85fe8cde0dc16e44d2578ee8905becc692bed2b5eea2b7febea12b093329f38c8e03c5c8c59fedc1ed5d44df652ac4e88525aca5ab82415034fff73bc1e02a7861d382d9be7f84f035d40153233bbc668953b8badb0afd3cd1ac2e80f3d275d4a625222b66d6b7da2cce519998dc44a57c71ca78780733d57d4f884536bc0de7d07cc70500b8d30dd94425d488067dd83cfd72555ce95a4dfdbf19d40968dde421f767a5012afdc202b288143c35ebf4b2c2e7cc8b7296ba3d3b5ee3748e66baa125750f105e7b21450d4f458792e9b264873ed0da0550cc67bd84b0671ddde7c4d61d936ba29cb563229927539b30145f1f11b8ee48041efd5fc5998a63dc2439765753174d59ba4b1ae943cc2c98016ca02b205ea447f29913c10ed4ac4319aeaddb3e5c076d4a108a92c0a8502fc1dc1846ad4eb3341b8bfeddd608e526683d8f7fdd90ec0318360336a0a49a37a05be7c0858ec6012c36c485e51126053463312984330fa18dbb3e5189dede5ebba9ff5329805656958d4dbe394df0be460ce9b693b3e02d468b03c5081e1c72f2b9e06c7c399619252e7ea3fb2593982d623313df3c259b1305328c9b30ff0366cb68bc6e1cbb22b8d647b4780d932d24dec6cdf706181ee1391edb7081b19aa97eb3d494602c8e6246a329ca1f8f566d195abc733fcbf6124263f77fa7d330ba8c0bf511a5fedc47465a57c409d2985eb47cc3e678c1a4bfe117e096d6c91d57a2a4b3824524a13cf2691c0a3ea09cdcbdb13b68c00a0d0b606b36b8626ac01834b4ff541fbe2cc0074fcc44f4c446fe4b7870b8e62811dab6cf01b2b0934fec6c77fd1eeaf2a3d5588a1ea35021a6969f28aa9b5d6b42347a1f23f6b55508a7255853ca924ea6aefb09cd77d4eddb377a5cd06e1d8040985d47cc7cdc2cc1bfa0505031020a040519cabbf30b49b780642a4f579e394e215e7976576164dd96732d72022535a9e81e29f5e11276f9b5f9d8a004a62da554e36560e7aeda91634a4172139b4915c6b5c64bf5556eda05a1b7fef884d15db6c290979d5299482a0535b86287de09c81acd88879e168ae344ce552e982ebe8dabaaeb0610833129469294d0ed7b73eaf57b8fd9305ee88ccf7960bce125ad03fae7317d37980579c2d1a7cfa94246492cc9efd59a275c380aad604f1ec69ad8d7edfaa116cc46d327066272c44b746b74854e26772efb0b526ccd1896935911a748edddcc27ad89463487fb17e66d0300ea0cf184f776e1e729f0f45ca27ade8eb79ff9c0aefd62ae0e70b35298855d157ff2c2948c0394f74a2d4bc0fed5c68b1403149469893cb38ec196ceb30af65cd48e7cc44c73424ce15414018c709bff8295f69887199ceda365458e0729ca2b38944692f7d0798f8936e632a38d41a5efc455348823cca54dabcdf965b666a2469dc7ccde38aa132a47431065a9ec5125e0cfa1bd511eb88c2a998fa275f34233c1e5d42b24e6e6b4841ded312411ace1b911e4ba2a3c87713a27170ef5083a99a034d504d9845ad7db9ec33cfe400076ca7fc79fd271d481d1d1427f099ce84693e151a2b322ba1cdbaac9f56bf868a83b19d031cc1a7e286e3d04fc6ece6b4465818ad1093142f73187d6c42957b9ecd2bfa0ff40e78df6cf9d0417904a22634decb2fbbde2bed4452859ed536044b6a2d9462cbc652b8480f26f44488298263f8f386660b1ccf559f1bb5cd23d6c0f9dad4b5843e2f2bf969bc42eae80ea952a249205fe44a8c443d36324224a394966ff80d1cdf3b247b28527e9167953dd4ecd1f7692ba46365626c9c6bb7ca2162827e39440c785d589531b9671c9365eb000bf18e7cfa5afc39fb29bc3b36adc44c43ee8fe335447b68308f5604d220d992269ba1879e954fc7c79e5a10a41bc503a6b1feb893c43ff18f5231bc67e557496b841ef9f31e1386b4f6970f51a6318b9e2bbe83b9821a887aa755f57b885bbe2c14d438b979d280a33094819db796d32c2feaff243eb206bae077962e0cba9e8fbb59ac612109db258d46384f110ae01d7785670b6c037e2280af4deabeed06acd2cd4eaa2de1de8c4a1ea0ade91252e808bbd503c605c160ebc25e671b07327ed2001fbbb30792d635bab5790c484d3019b82dd35f2a188c48e11436b3bc96075fb9a1c0af82a2519a4b5ac867c1ff56970dd932a76f08ea07b4a68b3e6f56646df2ee5bdece037a458ea0881399f146b3fcfcb66c32f204474e5e8380e10ad6301521f48f69e684aa9a2c309cd93329dcef2aae064124274809d24c6b7dd8747e709e8b45dd9aaebb921b2336040eaae1b7dc341969284752c223e5bb7c6309392f007f88f85a8d164398223edd076a9a9ea049ca50e0fa119d099dbee49eed7a83a913e3a38c8481cdb1d9d67581b09baa75ed308090ee08aecaa4e4576139d9f629c035056a040d092c18c90429d481467a77d226be863d7c0243cc173d3120d377a7838be3528319c3bf359ec8b3650b69328c587317de213fb6a1777dfcfc3142eb89baffd5bb4d0e82653e8e4636b95f47ef1c347896fc31a79dd33292be49c5d905b07b7ce4376ad2f6ee86fd2fbb92b72a4b4797c96ae52d203068e59214817dd3b761155f3ec43ba4fafb6880f5479140a9df18ac5fc4364207a5e074de74c706a5c22324f70a8d8b1c486f1f97e3d50796bb6b297386b619419c869f4567c7a964576502dae2caac91b04ba24749ae30f23aa479009b377fd88ce41964b4b49a30e694b80b1f23db39a37d36b95f9307322fcbe00fb91f0c708f51f69d6ebaf29a2e6dd7bf80ba69f9a0a97018fd7b391b6e4324fb3fd419cbe193734637500e05179a18c6b93edda7c5eea472ceb51a8d235b9774c7b655df2a4b361ef491924fe36389428df27d61e9b7552a0e9a7b7251f1e7349a12dc1b53a5168f3bb03302f2b245b9fe128d4a452fccbb954b3790690c6e87445fe35a13dd5c80114c687277bb99bc40c811310d03ba0e0197deeea7a99403ff19d0ed33e3e3d35ce558e7d7765f8c3c6980fc24f698cc8f67477dc24953685966a8c1e2ee4aee6457b51d0aa45e55eb1ae92b7e2efc4fc915bd1195d6f79c39fd237ed89b5205b0832113c9c264839c7e31fb509934071f385559c96cdf18fabed9818298dd7253055e9e7dea0385406229ca46c71e9883e833fc934a65a3e2980d741a74a7dff692e99ffe58ce71ff5aa7c4c7b8631d6e462f16ca3545f0d5971a4fa8d9ff01131e0f66a1804463d533f0e17f105956a9a251644b075b5374d60b072134a8b9ca5e9b23f1bcfe541c4c3e7a242f8df19a872e048bd97bca8bca8383db3659a91bbb08423d0f4907647afd91f8ea2892a94893a8a5859df093d3964a225e00f43892abee0c47401f8406ec98ae8c5c53c6458d7afbb92be11fa9bd4fdf29fa09f9d1b929a40e75f0d3af60d9e0cceae3f4444bcf3dcf9060a7845d2267b2cfd29cf045d5717ea5b744c5f9ea1625cd9bdead1e506c1db83af6e2abb014bf51d33e441cad846854d9e345994f3ce5e7f1231b62b94be4b0378594aded9ebe764916e35cab6e2673530181c1a038fe89fc0273a7944626c9677af7fd3f7288e07028d2625106c3252c5109447bc303a38ac8d80ff5ac8ce8d4c6f68c616fb529cd6db877029547440ea1772e50e845c322c227ddeff8fa6f61c8cfd111bb3419f0394c316f6b37f00898e4845cc8fd9bd364cf03314a12972bef3cf9c6ba6659b914b5be6744645a82c89655ff1dc062d55f46eb41c28439ba9388db425119ecd16a501bda3515eaf972a43d95bdeedecd079409cf34b9051faa77b7e97009b999dfc3ff1ff3fe60dd09570fff5e42083bc030400111c8786fd389b84a6855211d35002d2d5b790746cfa77bd22743780ef443c44c7bc6fd3c914f6d7612241edda8811ff88f3285eafa70a5682f0874af38cba5d8eb843974bc640d52c640b5a280baf5a8f9e543745e687240d9032aac8bafb5e0f2991b2be7421aa15ffae53e12c60a73c5c295060c034b228f6a535cc6b8065dfb440a39e80faeb9f97923dab1179bb5cc2e5c73d46322dfe7b2a8dfc9d5e7dd9511c37c3e1cac9f8a80749dc1517533289b9f99dd2892816ce148095e698b4frootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootpython310-documentation-3.10.13-150400.4.36.1.src.rpmpython310-docpython310-doc(aarch-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.14.3dd˖d@dD@d ddJcdJcd@c>@c@cӼcck@cc@cRcOc'@cb@bbnb?bb@bzSbs@b?@b<]@b@b a@a@a@a@aX@a@aa@af@a\>@a,@a(a @a` @` @`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;daniel.garcia@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comkukuk@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comschwab@suse.demcepl@suse.comdmueller@suse.commcepl@suse.comcoolo@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comdavid.anes@suse.comsteven.kowalik@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.commcepl@suse.comdimstar@opensuse.orgmcepl@suse.commcepl@suse.comschwab@suse.deschwab@suse.demcepl@suse.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 fix-sphinx-72.patch to make it work with latest sphinx version gh#python/cpython#97950 - Update to 3.10.13: - gh-108310: Fixed an issue where instances of ssl.SSLSocket were vulnerable to a bypass of the TLS handshake and included protections (like certificate verification) and treating sent unencrypted data as if it were post-handshake TLS encrypted data. Security issue reported as CVE-2023-40217 by Aapo Oksman. Patch by Gregory P. Smith. (bsc#1214692) - gh-107845: tarfile.data_filter() now takes the location of symlinks into account when determining their target, so it will no longer reject some valid tarballs with LinkOutsideDestinationError. - gh-107565: Update multissltests and GitHub CI workflows to use OpenSSL 1.1.1v, 3.0.10, and 3.1.2. - gh-99612: Fix PyUnicode_DecodeUTF8Stateful() for ASCII-only data: * consumed was not set.- Add Revert-gh105127-left-tests.patch (gh#python/cpython!106941) partially reverting CVE-2023-27043-email-parsing-errors.patch, because of the regression in gh#python/cpython#106669.- Add gh-78214-marshal_stabilize_FLAG_REF.patch to marshal.c for stabilizing FLAG_REF usage (required for reproduceability; bsc#1213463).- (bsc#1210638, CVE-2023-27043) Add CVE-2023-27043-email-parsing-errors.patch, which detects email address parsing errors and returns empty tuple to indicate the parsing error (old API).- Update to 3.10.12: - gh-103142: The version of OpenSSL used in Windows and Mac installers has been upgraded to 1.1.1u to address CVE-2023-2650, CVE-2023-0465, CVE-2023-0466, CVE-2023-0464, as well as CVE-2023-0286, CVE-2022-4303, and CVE-2022-4303 fixed previously in 1.1.1t (gh-101727). - gh-102153: urllib.parse.urlsplit() now strips leading C0 control and space characters following the specification for URLs defined by WHATWG in response to CVE-2023-24329 (bsc#1208471). - gh-99889: Fixed a security in flaw in uu.decode() that could allow for directory traversal based on the input if no out_file was specified. - gh-104049: Do not expose the local on-disk location in directory indexes produced by http.client.SimpleHTTPRequestHandler. - gh-103935: trace.__main__ now uses io.open_code() for files to be executed instead of raw open(). - gh-102953: The extraction methods in tarfile, and shutil.unpack_archive(), have a new filter argument that allows limiting tar features than may be surprising or dangerous, such as creating files outside the destination directory. See Extraction filters for details (fixing CVE-2007-4559, bsc#1203750). - Remove upstreamed patches: - CVE-2023-24329-blank-URL-bypass.patch - CVE-2007-4559-filter-tarfile_extractall.patch- Add bpo-37596-make-set-marshalling.patch making marshalling of `set` and `frozenset` deterministic (bsc#1211765).- Add CVE-2007-4559-filter-tarfile_extractall.patch to fix CVE-2007-4559 (bsc#1203750) by adding the filter for tarfile.extractall (PEP 706).- Update to 3.10.11: - Core and Builtins - gh-102416: Do not memoize incorrectly automatically generated loop rules in the parser. Patch by Pablo Galindo. - gh-102356: Fix a bug that caused a crash when deallocating deeply nested filter objects. Patch by Marta Gómez Macías. - gh-102397: Fix segfault from race condition in signal handling during garbage collection. Patch by Kumar Aditya. - gh-102126: Fix deadlock at shutdown when clearing thread states if any finalizer tries to acquire the runtime head lock. Patch by Kumar Aditya. - gh-102027: Fix SSE2 and SSE3 detection in _blake2 internal module. Patch by Max Bachmann. - gh-101967: Fix possible segfault in positional_only_passed_as_keyword function, when new list created. - gh-101765: Fix SystemError / segmentation fault in iter __reduce__ when internal access of builtins.__dict__ keys mutates the iter object. - Library - gh-102947: Improve traceback when dataclasses.fields() is called on a non-dataclass. Patch by Alex Waygood - gh-101979: Fix a bug where parentheses in the metavar argument to argparse.ArgumentParser.add_argument() were dropped. Patch by Yeojin Kim. - gh-102179: Fix os.dup2() error message for negative fds. - gh-101961: For the binary mode, fileinput.hookcompressed() doesn’t set the encoding value even if the value is None. Patch by Gihwan Kim. - gh-101936: The default value of fp becomes io.BytesIO if HTTPError is initialized without a designated fp parameter. Patch by Long Vo. - gh-101566: In zipfile, apply fix for extractall on the underlying zipfile after being wrapped in Path. - gh-101997: Upgrade pip wheel bundled with ensurepip (pip 23.0.1) - gh-101892: Callable iterators no longer raise SystemError when the callable object exhausts the iterator but forgets to either return a sentinel value or raise StopIteration. - gh-97786: Fix potential undefined behaviour in corner cases of floating-point-to-time conversions. - gh-101517: Fixed bug where bdb looks up the source line with linecache with a lineno=None, which causes it to fail with an unhandled exception. - gh-101673: Fix a pdb bug where ll clears the changes to local variables. - gh-96931: Fix incorrect results from ssl.SSLSocket.shared_ciphers() - gh-88233: Correctly preserve “extra” fields in zipfile regardless of their ordering relative to a zip64 “extra.” - gh-95495: When built against OpenSSL 3.0, the ssl module had a bug where it reported unauthenticated EOFs (i.e. without close_notify) as a clean TLS-level EOF. It now raises SSLEOFError, matching the behavior in previous versions of OpenSSL. The options attribute on SSLContext also no longer includes OP_IGNORE_UNEXPECTED_EOF by default. This option may be set to specify the previous OpenSSL 3.0 behavior. - gh-94440: Fix a concurrent.futures.process bug where ProcessPoolExecutor shutdown could hang after a future has been quickly submitted and canceled. - Documentation - gh-103112: Add docstring to http.client.HTTPResponse.read() to fix pydoc output. - gh-85417: Update cmath documentation to clarify behaviour on branch cuts. - gh-97725: Fix asyncio.Task.print_stack() description for file=None. Patch by Oleg Iarygin. - Tests - gh-102980: Improve test coverage on pdb. - gh-102537: Adjust the error handling strategy in test_zoneinfo.TzPathTest.python_tzpath_context. Patch by Paul Ganssle. - gh-101377: Improved test_locale_calendar_formatweekday of calendar. - Build - gh-102711: Fix -Wstrict-prototypes compiler warnings. - Removed upstreamed: - invalid-json.patch- Add invalid-json.patch fixing invalid JSON in Doc/howto/logging-cookbook.rst (somehow similar to gh#python/cpython#102582).- Update to 3.10.10: Bug fixes and regressions handling, no change of behaviour and no security bugs fixed. - Add CVE-2023-24329-blank-URL-bypass.patch (CVE-2023-24329, bsc#1208471) blocklists bypass via the urllib.parse component when supplying a URL that starts with blank characters- Add provides for readline and sqlite3 to the main Python package.- Disable NIS for new products, it's deprecated and gets removed- Update to 3.10.9: - python -m http.server no longer allows terminal control characters sent within a garbage request to be printed to the stderr server lo This is done by changing the http.server BaseHTTPRequestHandler .log_message method to replace control characters with a \xHH hex escape before printin - Avoid publishing list of active per-interpreter audit hooks via the gc module - The IDNA codec decoder used on DNS hostnames by socket or asyncio related name resolution functions no longer involves a quadratic algorithm. This prevents a potential CPU denial of service if an out-of-spec excessive length hostname involving bidirectional characters were decoded. Some protocols such as urllib http 3xx redirects potentially allow for an attacker to supply such a name. - Update bundled libexpat to 2.5.0 - Port XKCP’s fix for the buffer overflows in SHA-3 (CVE-2022-37454). - On Linux the multiprocessing module returns to using filesystem backed unix domain sockets for communication with the forkserver process instead of the Linux abstract socket namespace. Only code that chooses to use the “forkserver” start method is affected Abstract sockets have no permissions and could allow any user on the system in the same network namespace (often the whole system) to inject code into the multiprocessing forkserver process. This was a potential privilege escalation. Filesystem based socket permissions restrict this to the forkserver process user as was the default in Python 3.8 and earlier This prevents Linux CVE-2022-42919 - Fix a reference bug in _imp.create_builtin() after the creation of the first sub-interpreter for modules builtins and sys. Patch by Victor Stinner. - Fixed a bug that was causing a buffer overflow if the tokenizer copies a line missing the newline caracter from a file that is as long as the available tokenizer buffer. Patch by Pablo galindo - Update faulthandler to emit an error message with the proper unexpected signal number. Patch by Dong-hee Na. - Fix subscription of types.GenericAlias instances containing bare generic types: for example tuple[A, T][int], where A is a generic type, and T is a type variable. - Fix detection of MAC addresses for uuid on certain OSs. Patch by Chaim Sanders - Print exception class name instead of its string representation when raising errors from ctypes calls. - Allow pdb to locate source for frozen modules in the standard library. - Raise ValueError instead of SystemError when methods of uninitialized io.IncrementalNewlineDecoder objects are called. Patch by Oren Milman. - Fix a possible assertion failure in io.FileIO when the opener returns an invalid file descriptor. - Also escape s in the http.server BaseHTTPRequestHandler.log_message so that it is technically possible to parse the line and reconstruct what the original data was. Without this a xHH is ambiguious as to if it is a hex replacement we put in or the characters r”x” came through in the original request line. - asyncio.get_event_loop() now only emits a deprecation warning when a new event loop was created implicitly. It no longer emits a deprecation warning if the current event loop was set. - Fix bug when calling trace.CoverageResults with valid infile. - Fix a bug in handling class cleanups in unittest.TestCase. Now addClassCleanup() uses separate lists for different TestCase subclasses, and doClassCleanups() only cleans up the particular class. - Release the GIL when calling termios APIs to avoid blocking threads. - Fix ast.increment_lineno() to also cover ast.TypeIgnore when changing line numbers. - Fixed bug where inspect.signature() reported incorrect arguments for decorated methods. - Fix SystemError in ctypes when exception was not set during __initsubclass__. - Fix statistics.NormalDist pickle with 0 and 1 protocols. - Update the bundled copy of pip to version 22.3.1. - Apply bugfixes from importlib_metadata 4.11.4, namely: In PathDistribution._name_from_stem, avoid including parts of the extension in the result. In PathDistribution._normalized_name, ensure names loaded from the stem of the filename are also normalized, ensuring duplicate entry points by packages varying only by non-normalized name are hidden. - Clean up refleak on failed module initialisation in _zoneinfo - Clean up refleaks on failed module initialisation in in _pickle - Clean up refleak on failed module initialisation in _io. - Fix memory leak in math.dist() when both points don’t have the same dimension. Patch by Kumar Aditya. - Fix argument typechecks in _overlapped.WSAConnect() and _overlapped.Overlapped.WSASendTo() functions. - Fix internal error in the re module which in very rare circumstances prevented compilation of a regular expression containing a conditional expression without the “else” branch. - Fix asyncio.StreamWriter.drain() to call protocol.connection_lost callback only once on Windows. - Add a mutex to unittest.mock.NonCallableMock to protect concurrent access to mock attributes. - Fix hang on Windows in subprocess.wait_closed() in asyncio with ProactorEventLoop. Patch by Kumar Aditya. - Fix infinite loop in unittest when a self-referencing chained exception is raised - tkinter.Text.count() raises now an exception for options starting with “-” instead of silently ignoring them. - On uname_result, restored expectation that _fields and _asdict would include all six properties including processor. - Update the bundled copies of pip and setuptools to versions 22.3 and 65.5.0 respectively. - Fix bug in urllib.parse.urlparse() that causes certain port numbers containing whitespace, underscores, plus and minus signs, or non-ASCII digits to be incorrectly accepted. - Allow venv to pass along PYTHON* variables to ensurepip and pip when they do not impact path resolution - On macOS, fix a crash in syslog.syslog() in multi-threaded applications. On macOS, the libc syslog() function is not thread-safe, so syslog.syslog() no longer releases the GIL to call it. Patch by Victor Stinner. - Allow BUILTINS to be a valid field name for frozen dataclasses. - Make sure patch.dict() can be applied on async functions. - To avoid apparent memory leaks when asyncio.open_connection() raises, break reference cycles generated by local exception and future instances (which has exception instance as its member var). Patch by Dong Uk, Kang. - Prevent error when activating venv in nested fish instances. - Restrict use of sockets instead of pipes for stdin of subprocesses created by asyncio to AIX platform only. - shutil.copytree() now applies the ignore_dangling_symlinks argument recursively. - Fix IndexError in argparse.ArgumentParser when a store_true action is given an explicit argument. - Document that calling variadic functions with ctypes requires special care on macOS/arm64 (and possibly other platforms). - Skip test_normalization() of test_unicodedata if it fails to download NormalizationTest.txt file from pythontest.net. Patch by Victor Stinner. - Some C API tests were moved into the new Lib/test/test_capi/ directory. - Fix -Wimplicit-int, -Wstrict-prototypes, and - Wimplicit-function-declaration compiler warnings in configure checks. - Fix -Wimplicit-int compiler warning in configure check for PTHREAD_SCOPE_SYSTEM. - Specify the full path to the source location for make docclean (needed for cross-builds). - Fix NO_MISALIGNED_ACCESSES being not defined for the SHA3 extension when HAVE_ALIGNED_REQUIRED is set. Allowing builds on hardware that unaligned memory accesses are not allowed. - Fix handling of module docstrings in Tools/i18n/pygettext.py. - Remove upstreamed patches: - 98437-sphinx.locale._-as-gettext-in-pyspecific.patch - CVE-2015-20107-mailcap-unsafe-filenames.patch - CVE-2022-42919-loc-priv-mulitproc-forksrv.patch - CVE-2022-45061-DoS-by-IDNA-decode.patch- 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.10.8: - 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. - The deprecated mailcap module now refuses to inject unsafe text (filenames, MIME types, parameters) into shell commands. Instead of using such text, it will warn and act as if a match was not found (or for test commands, as if the test failed). - os.sched_yield() now release the GIL while calling sched_yield(2). - Bugfix: PyFunction_GetAnnotations() should return a borrowed reference. It was returning a new reference. - Fixed a missing incref/decref pair in Exception.__setstate__(). - Fix overly-broad source position information for chained comparisons used as branching conditions. - Fix undefined behaviour in _testcapimodule.c. - At Python exit, sometimes a thread holding the GIL can wait forever for a thread (usually a daemon thread) which requested to drop the GIL, whereas the thread already exited. To fix the race condition, the thread which requested the GIL drop now resets its request before exiting. - Fix a possible assertion failure, fatal error, or SystemError if a line tracing event raises an exception while opcode tracing is enabled. - Fix undefined behaviour in C code of null pointer arithmetic. - Do not expose KeyWrapper in _functools. - When loading a file with invalid UTF-8 inside a multi-line string, a correct SyntaxError is emitted. - Disable incorrect pickling of the C implemented classmethod descriptors. - Fix AttributeError missing name and obj attributes in . object.__getattribute__() bpo-42316: Document some places . where an assignment expression needs parentheses . - Wrap network errors consistently in urllib FTP support, so the test suite doesn’t fail when a network is available but the public internet is not reachable. - Fixes AttributeError when subprocess.check_output() is used with argument input=None and either of the arguments encoding or errors are used. - Avoid spurious tracebacks from asyncio when default executor cleanup is delayed until after the event loop is closed (e.g. as the result of a keyboard interrupt). - Avoid a crash in the C version of asyncio.Future.remove_done_callback() when an evil argument is passed. - Remove tokenize.NL check from tabnanny. - Make Semaphore run faster. - Fix generation of the default name of tkinter.Checkbutton. Previously, checkbuttons in different parent widgets could have the same short name and share the same state if arguments “name” and “variable” are not specified. Now they are globally unique. - Update bundled libexpat to 2.4.9 - Fix race condition in asyncio where process_exited() called before the pipe_data_received() leading to inconsistent output. - Fixed check in multiprocessing.resource_tracker that guarantees that the length of a write to a pipe is not greater than PIPE_BUF. - Corrected type annotation for dataclass attribute pstats.FunctionProfile.ncalls to be str. - Fix the faulthandler implementation of faulthandler.register(signal, chain=True) if the sigaction() function is not available: don’t call the previous signal handler if it’s NULL. - In inspect, fix overeager replacement of “typing.” in formatting annotations. - Fix asyncio.streams.StreamReaderProtocol to keep a strong reference to the created task, so that it’s not garbage collected - Fix handling compiler warnings (SyntaxWarning and DeprecationWarning) in codeop.compile_command() when checking for incomplete input. Previously it emitted warnings and raised a SyntaxError. Now it always returns None for incomplete input without emitting any warnings. - Fixed flickering of the turtle window when the tracer is turned off. - Allow asyncio.StreamWriter.drain() to be awaited concurrently by multiple tasks. - Fix broken asyncio.Semaphore when acquire is cancelled. - Fix ast.unparse() when ImportFrom.level is None - Improve performance of urllib.request.getproxies_environment when there are many environment variables - Fix ! in c domain ref target syntax via a conf.py patch, so it works as intended to disable ref target resolution. - Clarified the conflicting advice given in the ast documentation about ast.literal_eval() being “safe” for use on untrusted input while at the same time warning that it can crash the process. The latter statement is true and is deemed unfixable without a large amount of work unsuitable for a bugfix. So we keep the warning and no longer claim that literal_eval is safe. - Update tutorial introduction output to use 3.10+ SyntaxError invalid range. - Remove upstreamed test-int-timing.patch.- test-int-timing.patch: gh-96710: Make the test timing more lenient for the int/str DoS regression test. (#96717)- Update to 3.10.7: - Fix for 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. - Other bug fixes: - Fixed a bug that caused _PyCode_GetExtra to return garbage for negative indexes. - Fix format string in _PyPegen_raise_error_known_location that can lead to memory corruption on some 64bit systems. The function was building a tuple with i (int) instead of n (Py_ssize_t) for Py_ssize_t arguments. - Fix misleading contents of error message when converting an all-whitespace string to float. - coroutine.throw() now properly initializes the frame.f_back when resuming a stack of coroutines. This allows e.g. traceback.print_stack() to work correctly when an exception (such as CancelledError) is thrown into a coroutine. - ast.parse() will no longer parse function definitions with positional-only params when passed feature_version less than (3, 8). - Correct conversion of numbers.Rational’s to float. - Fix a performance regression in logging TimedRotatingFileHandler. Only check for special files when the rollover time has passed. - Fix unused localName parameter in the Attr class in xml.dom.minidom. - Update bundled pip to 22.2.2. - Fail gracefully if EPERM or ENOSYS is raised when loading crypt methods. This may happen when trying to load MD5 on a Linux kernel with FIPS enabled. - Improve discoverability of the higher level concurrent.futures module by providing clearer links from the lower level threading and multiprocessing modules. - Update the default RFC base URL from deprecated tools.ietf.org to datatracker.ietf.org - Fix stylesheet not working in Windows CHM htmlhelp docs. - The documentation now lists which members of C structs are part of the Limited API/Stable ABI. - Mitigate the inherent race condition from using find_unused_port() in testSockName() by trying to find an unused port a few times before failing. - Build and test with OpenSSL 1.1.1q - Document handling of extensions in Save As dialogs. - Include prompts when saving Shell (interactive input and output).- fix import_failed.map to refer to the python 3.10 package versions- Update to 3.10.6: - gh-87389: 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. (bsc#1202624, CVE-2021-28861) - gh-92888: Fix memoryview use after free when accessing the backing buffer in certain cases. - gh-95355: _PyPegen_Parser_New now properly detects token memory allocation errors. Patch by Honglin Zhu. - gh-94938: Fix error detection in some builtin functions when keyword argument name is an instance of a str subclass with overloaded __eq__ and __hash__. Previously it could cause SystemError or other undesired behavior. - gh-94949: ast.parse() will no longer parse parenthesized context managers when passed feature_version less than (3, 9). Patch by Shantanu Jain. - gh-94947: ast.parse() will no longer parse assignment expressions when passed feature_version less than (3, 8). Patch by Shantanu Jain. - gh-94869: Fix the column offsets for some expressions in multi-line f-strings ast nodes. Patch by Pablo Galindo. - gh-91153: Fix an issue where a bytearray item assignment could crash if it’s resized by the new value’s __index__() method. - gh-94329: Compile and run code with unpacking of extremely large sequences (1000s of elements). Such code failed to compile. It now compiles and runs correctly. - gh-94360: Fixed a tokenizer crash when reading encoded files with syntax errors from stdin with non utf-8 encoded text. Patch by Pablo Galindo - gh-94192: Fix error for dictionary literals with invalid expression as value. - gh-93964: Strengthened compiler overflow checks to prevent crashes when compiling very large source files. - gh-93671: Fix some exponential backtrace case happening with deeply nested sequence patterns in match statements. Patch by Pablo Galindo - gh-93021: Fix the __text_signature__ for __get__() methods implemented in C. Patch by Jelle Zijlstra. - gh-92930: Fixed a crash in _pickle.c from mutating collections during __reduce__ or persistent_id. - gh-92914: Always round the allocated size for lists up to the nearest even number. - gh-92858: Improve error message for some suites with syntax error before ‘:’ - gh-95339: Update bundled pip to 22.2.1. - gh-95045: Fix GC crash when deallocating _lsprof.Profiler by untracking it before calling any callbacks. Patch by Kumar Aditya. - gh-95087: Fix IndexError in parsing invalid date in the email module. - gh-95199: Upgrade bundled setuptools to 63.2.0. - gh-95194: Upgrade bundled pip to 22.2. - gh-93899: Fix check for existence of os.EFD_CLOEXEC, os.EFD_NONBLOCK and os.EFD_SEMAPHORE flags on older kernel versions where these flags are not present. Patch by Kumar Aditya. - gh-95166: Fix concurrent.futures.Executor.map() to cancel the currently waiting on future on an error - e.g. TimeoutError or KeyboardInterrupt. - gh-93157: Fix fileinput module didn’t support errors option when inplace is true. - gh-94821: Fix binding of unix socket to empty address on Linux to use an available address from the abstract namespace, instead of “0”. - gh-94736: Fix crash when deallocating an instance of a subclass of _multiprocessing.SemLock. Patch by Kumar Aditya. - gh-94637: SSLContext.set_default_verify_paths() now releases the GIL around SSL_CTX_set_default_verify_paths call. The function call performs I/O and CPU intensive work. - gh-94510: Re-entrant calls to sys.setprofile() and sys.settrace() now raise RuntimeError. Patch by Pablo Galindo. - gh-92336: Fix bug where linecache.getline() fails on bad files with UnicodeDecodeError or SyntaxError. It now returns an empty string as per the documentation. - gh-89988: Fix memory leak in pickle.Pickler when looking up dispatch_table. Patch by Kumar Aditya. - gh-94254: Fixed types of struct module to be immutable. Patch by Kumar Aditya. - gh-94245: Fix pickling and copying of typing.Tuple[()]. - gh-94207: Made _struct.Struct GC-tracked in order to fix a reference leak in the _struct module. - gh-94101: Manual instantiation of ssl.SSLSession objects is no longer allowed as it lead to misconfigured instances that crashed the interpreter when attributes where accessed on them. - gh-84753: inspect.iscoroutinefunction(), inspect.isgeneratorfunction(), and inspect.isasyncgenfunction() now properly return True for duck-typed function-like objects like instances of unittest.mock.AsyncMock. - This makes inspect.iscoroutinefunction() consistent with the behavior of asyncio.iscoroutinefunction(). Patch by Mehdi ABAAKOUK. - gh-83499: Fix double closing of file description in tempfile. - gh-79512: Fixed names and __module__ value of weakref classes ReferenceType, ProxyType, CallableProxyType. It makes them pickleable. - gh-90494: copy.copy() and copy.deepcopy() now always raise a TypeError if __reduce__() returns a tuple with length 6 instead of silently ignore the 6th item or produce incorrect result. - gh-90549: Fix a multiprocessing bug where a global named resource (such as a semaphore) could leak when a child process is spawned (as opposed to forked). - gh-79579: sqlite3 now correctly detects DML queries with leading comments. Patch by Erlend E. Aasland. - gh-93421: Update sqlite3.Cursor.rowcount when a DML statement has run to completion. This fixes the row count for SQL queries like UPDATE ... RETURNING. Patch by Erlend E. Aasland. - gh-91810: Suppress writing an XML declaration in open files in ElementTree.write() with encoding='unicode' and xml_declaration=None. - gh-93353: Fix the importlib.resources.as_file() context manager to remove the temporary file if destroyed late during Python finalization: keep a local reference to the os.remove() function. Patch by Victor Stinner. - gh-83658: Make multiprocessing.Pool raise an exception if maxtasksperchild is not None or a positive int. - gh-74696: shutil.make_archive() no longer temporarily changes the current working directory during creation of standard .zip or tar archives. - gh-91577: Move imports in SharedMemory methods to module level so that they can be executed late in python finalization. - bpo-47231: Fixed an issue with inconsistent trailing slashes in tarfile longname directories. - bpo-46755: In QueueHandler, clear stack_info from LogRecord to prevent stack trace from being written twice. - bpo-46053: Fix OSS audio support on NetBSD. - bpo-46197: Fix ensurepip environment isolation for subprocess running pip. - bpo-45924: Fix asyncio incorrect traceback when future’s exception is raised multiple times. Patch by Kumar Aditya. - bpo-34828: sqlite3.Connection.iterdump() now handles databases that use AUTOINCREMENT in one or more tables. - gh-94321: Document the PEP 246 style protocol type sqlite3.PrepareProtocol. - gh-86128: Document a limitation in ThreadPoolExecutor where its exit handler is executed before any handlers in atexit. - gh-61162: Clarify sqlite3 behavior when Using the connection as a context manager. - gh-87260: Align sqlite3 argument specs with the actual implementation. - gh-86986: The minimum Sphinx version required to build the documentation is now 3.2. - gh-88831: Augmented documentation of asyncio.create_task(). Clarified the need to keep strong references to tasks and added a code snippet detailing how to to this. - bpo-47161: Document that pathlib.PurePath does not collapse initial double slashes because they denote UNC paths. - gh-95280: Fix problem with test_ssl test_get_ciphers on systems that require perfect forward secrecy (PFS) ciphers. - gh-95212: Make multiprocessing test case test_shared_memory_recreate parallel-safe. - gh-91330: Added more tests for dataclasses to cover behavior with data descriptor-based fields. - gh-94208: test_ssl is now checking for supported TLS version and protocols in more tests. - gh-93951: In test_bdb.StateTestCase.test_skip, avoid including auxiliary importers. - gh-93957: Provide nicer error reporting from subprocesses in test_venv.EnsurePipTest.test_with_pip. - gh-57539: Increase calendar test coverage for calendar.LocaleTextCalendar.formatweekday(). - gh-92886: Fixing tests that fail when running with optimizations (-O) in test_zipimport.py - bpo-47016: Create a GitHub Actions workflow for verifying bundled pip and setuptools. Patch by Illia Volochii and Adam Turner. - gh-94841: Fix the possible performance regression of PyObject_Free() compiled with MSVC version 1932. - gh-95511: Fix the Shell context menu copy-with-prompts bug of copying an extra line when one selects whole lines. - gh-95471: In the Edit menu, move Select All and add a new separator. - gh-95411: Enable using IDLE’s module browser with .pyw files. - gh-89610: Add .pyi as a recognized extension for IDLE on macOS. This allows opening stub files by double clicking on them in the Finder. - gh-94538: Fix Argument Clinic output to custom file destinations. Patch by Erlend E. Aasland. - gh-94430: Allow parameters named module and self with custom C names in Argument Clinic. Patch by Erlend E. Aasland - gh-94930: Fix SystemError raised when PyArg_ParseTupleAndKeywords() is used with # in (...) but without PY_SSIZE_T_CLEAN defined. - gh-94864: Fix PyArg_Parse* with deprecated format units “u” and “Z”. It returned 1 (success) when warnings are turned into exceptions. - Reapply patches - bpo-31046_ensurepip_honours_prefix.patch - fix_configure_rst.patch - no-skipif-doctests.patch - skip-test_pyobject_freed_is_freed.patch- Extend distutils-reproducible-compile.patch with a workaround for non reproducible pyc files issue 93317- 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.- Update to 3.10.5: - Core and Builtins - gh-93418: Fixed an assert where an f-string has an equal sign ‘=’ following an expression, but there’s no trailing brace. For example, f”{i=”. - gh-91924: Fix __ltrace__ debug feature if the stdout encoding is not UTF-8. Patch by Victor Stinner. - gh-93061: Backward jumps after async for loops are no longer given dubious line numbers. - gh-93065: 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. - 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-47212: Raise IndentationError instead of SyntaxError for a bare except with no following indent. Improve SyntaxError locations for an un-parenthesized generator used as arguments. Patch by Matthieu Dartiailh. - bpo-47182: Fix a crash when using a named unicode character like "\N{digit nine}" after the main interpreter has been initialized a second time. - bpo-47117: Fix a crash if we fail to decode characters in interactive mode if the tokenizer buffers are uninitialized. Patch by Pablo Galindo. - bpo-39829: Removed the __len__() call when initializing a list and moved initializing to list_extend. Patch by Jeremiah Pascual. - 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 ctypes.UnionType, 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-93156: Accessing the pathlib.PurePath.parents sequence of an absolute path using negative index values produced incorrect results. - gh-89973: Fix re.error raised in fnmatch if the pattern contains a character range with upper bound lower than lower bound (e.g. [c-a]). Now such ranges are interpreted as empty ranges. - gh-93010: In a very special case, the email package tried to append the nonexistent InvalidHeaderError to the defect list. It should have been InvalidHeaderDefect. - gh-92839: Fixed crash resulting from calling bisect.insort() or bisect.insort_left() with the key argument not equal to None. - 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-91401: Provide a fail-safe way to disable subprocess use of vfork() via a private subprocess._USE_VFORK attribute. While there is currently no known need for this, if you find a need please only set it to False. File a CPython issue as to why you needed it and link to that from a comment in your code. This attribute is documented as a footnote in 3.11. - 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-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-47260: Fix os.closerange() potentially being a no-op in a Linux seccomp sandbox. - bpo-39064: zipfile.ZipFile now raises zipfile.BadZipFile instead of ValueError when reading a corrupt zip file in which the central directory offset is negative. - bpo-47151: When subprocess tries to use vfork, it now falls back to fork if vfork returns an error. This allows use in situations where vfork isn’t allowed by the OS kernel. - 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-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-46787: Fix concurrent.futures.ProcessPoolExecutor exception memory leak - bpo-45393: Fix the formatting for await x and not x in the operator precedence table when using the help() system. - bpo-46415: Fix ipaddress.ip_{address,interface,network} raising TypeError instead of ValueError if given invalid tuple as address parameter. - bpo-28249: Set doctest.DocTest.lineno to None when object does not have __doc__. - bpo-45138: Fix a regression in the sqlite3 trace callback where bound parameters were not expanded in the passed statement string. The regression was introduced in Python 3.10 by bpo-40318. Patch by Erlend E. Aasland. - 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-86438: Clarify that -W and PYTHONWARNINGS are matched literally and case-insensitively, rather than as regular expressions, in warnings. - gh-92240: Added release dates for “What’s New in Python 3.X” for 3.0, 3.1, 3.2, 3.8 and 3.10 - 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 3.2.1. - 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-40838: Document that inspect.getdoc(), inspect.getmodule(), and inspect.getsourcefile() might return None. - 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-92886: Fixing tests that fail when running with optimizations (-O) in test_imaplib.py. - gh-92670: Skip test_shutil.TestCopy.test_copyfile_nonexistent_dir test on AIX as the test uses a trailing slash to force the OS consider the path as a directory, but on AIX the trailing slash has no effect and is considered as a file. - gh-91904: Fix initialization of PYTHONREGRTEST_UNICODE_GUARD which prevented running regression tests on non-UTF-8 locale. - 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-47104: Rewrite asyncio.to_thread() tests to use unittest.IsolatedAsyncioTestCase. - bpo-29890: Add tests for ipaddress.IPv4Interface and ipaddress.IPv6Interface construction with tuple arguments. Original patch and tests by louisom. - Tools/Demos - gh-91583: Fix regression in the code generated by Argument Clinic for functions with the defining_class parameter.- Refresh bluez-devel-vendor.tar.xz- Switch primary_interpreter from python38 to python310 for Factory (only)- Update to 3.10.4: - 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-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 and deprecation warnings and have 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. - Update to 3.10.3: - bpo-46940: Avoid overriding AttributeError metadata information for nested attribute access calls. Patch by Pablo Galindo. - 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-46820: Fix parsing a numeric literal immediately (without spaces) followed by “not in” keywords, like in 1not in x. Now the parser only emits a warning, not a syntax error. - 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-46724: Make sure that all backwards jumps use the JUMP_ABSOLUTE instruction, rather than JUMP_FORWARD with an argument of (2**32)+offset. - bpo-46732: Correct the docstring for the __bool__() method. Patch by Jelle Zijlstra. - bpo-46707: Avoid potential exponential backtracking when producing some syntax errors involving lots of brackets. Patch by Pablo Galindo. - 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-45773: Remove two invalid “peephole” optimizations from the bytecode compiler. - 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-46070: Py_EndInterpreter() now explicitly untracks all objects currently tracked by the GC. Previously, if an object was used later by another interpreter, calling PyObject_GC_UnTrack() on the object crashed if the previous or the next object of the PyGC_Head structure became a dangling pointer. Patch by Victor Stinner. - bpo-46339: Fix a crash in the parser when retrieving the error text for multi-line f-strings expressions that do not start in the first line of the string. Patch by Pablo Galindo - bpo-46240: Correct the error message for unclosed parentheses when the tokenizer doesn’t reach the end of the source when the error is reported. Patch by Pablo Galindo - bpo-46091: Correctly calculate indentation levels for lines with whitespace character that are ended by line continuation characters. Patch by Pablo Galindo - 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) - 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-23325: The signal module no longer assumes that SIG_IGN and SIG_DFL are small int singletons. - 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-46643: In typing.get_type_hints(), support evaluating stringified ParamSpecArgs and ParamSpecKwargs annotations. Patch by Gregory Beauregard. - 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-46676: Make typing.ParamSpec args and kwargs equal to themselves. Patch by Gregory Beauregard. - bpo-46672: Fix NameError in asyncio.gather() when initial type check fails. - bpo-46655: In typing.get_type_hints(), support evaluating bare stringified TypeAlias annotations. Patch by Gregory Beauregard. - 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-46521: Fix a bug in the codeop module that was incorrectly identifying invalid code involving string quotes as valid code. - bpo-46581: Brings ParamSpec propagation for GenericAlias in line with Concatenate (and others). - 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-45173: Note the configparser deprecations will be removed in Python 3.12. - 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-46246: Add missing __slots__ to importlib.metadata.DeprecatedList. Patch by Arie Bovenberg. - bpo-46266: Improve day constants in calendar. - Now all constants (MONDAY … SUNDAY) are documented, tested, and added to __all__. - bpo-46232: The ssl module now handles certificates with bit strings in DN correctly. - 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-26552: Fixed case where failing asyncio.ensure_future() did not close the coroutine. Patch by Kumar Aditya. - 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-44791: Fix substitution of ParamSpec in Concatenate with different parameter expressions. Substitution with a list of types returns now a tuple of types. Substitution with Concatenate returns now a Concatenate with concatenated lists of arguments. - 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 - 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-46678: The function make_legacy_pyc in Lib/test/support/import_helper.py no longer fails when PYTHONPYCACHEPREFIX is set to a directory on a different device from where tempfiles are stored. - 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-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. - bpo-46433: The internal function _PyType_GetModuleByDef now correctly handles inheritance patterns involving static types. - bpo-14916: Fixed bug in the tokenizer that prevented PyRun_InteractiveOne from parsing from the provided FD.- (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.- Add patch support-expat-245.patch: * Support Expat >= 2.4.5- bsc#1195831 Obsolete older "most modern" versions of python packages (python39 for python310 and so forth). For next versions it is necessary just to edit the macro.- Remove second superfluous BR rpm-build-python- Remove second superfluous BR rpm-build-python - Add fix_configure_rst.patch, which removes duplicate link targets and make documentation with old Sphinx in SLE - Skip test_capi (bsc#1195140 and bpo#37169)- Update to 3.10.2: Bugfix only - bpo#46347 memory leak in PyEval_EvalCodeEx (especially visible with Cython code) - and many others- Upgrade to 3.10.1 (jsc#SLE-18038): - PEP 623 – Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 – Allow writing union types as X | Y - PEP 612 – Parameter Specification Variables - PEP 626 – Precise line numbers for debugging and other tools. - PEP 618 – Add Optional Length-Checking To zip. - bpo-12782: Parenthesized context managers are now officially allowed. - PEP 632 – Deprecate distutils module. - PEP 613 – Explicit Type Aliases - PEP 634 – Structural Pattern Matching: Specification - PEP 635 – Structural Pattern Matching: Motivation and Rationale - PEP 636 – Structural Pattern Matching: Tutorial - PEP 644 – Require OpenSSL 1.1.1 or newer - PEP 624 – Remove Py_UNICODE encoder APIs - PEP 597 – Add optional EncodingWarning - Patches readjusted: - bpo-31046_ensurepip_honours_prefix.patch - python-3.3.0b1-fix_date_time_compiler.patch- Remove pdb_adjust_breakpoints.patch and instead just adjust location of the test breakpoint in Lib/test/test_pdb.py via sed, because we have shortened Lib/pdb.py by removing the shebang (bpo#45964).- Add pdb_adjust_breakpoints.patch fixing expectd results in test_pdb_breakpoints_preserved_across_interactive_sessions (bpo#45964).- Remove shebangs from from python-base libraries in _libdir (bsc#1193179). - Readjust patches: - bpo-31046_ensurepip_honours_prefix.patch - decimal.patch - python-3.3.0b1-fix_date_time_compiler.patch- Move rpm-build-python construct to correct place.- 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.- Final release of 3.10.0: Complete list on https://www.python.org/downloads/release/python-3100/, but highlights are: - PEP 623 – Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 – Allow writing union types as X | Y - PEP 612 – Parameter Specification Variables - PEP 626 – Precise line numbers for debugging and other tools. - PEP 618 – Add Optional Length-Checking To zip. - PEP 632 – Deprecate distutils module. - PEP 613 – Explicit Type Aliases - PEP 634 – Structural Pattern Matching: Specification - PEP 635 – Structural Pattern Matching: Motivation and Rationale - PEP 636 – Structural Pattern Matching: Tutorial - PEP 644 – Require OpenSSL 1.1.1 or newer - PEP 624 – Remove Py_UNICODE encoder APIs - PEP 597 – Add optional EncodingWarning - bpo-12782: Parenthesized context managers are now officially allowed.- Switch on option --with-system-libmpdec (bsc#1189356).- Reenable profileopt with qemu emulation, test_faulthandler is no longer run during profiling- test_faulthandler is still problematic under qemu linux-user emulation, disable it there- Update to 3.10.0rc1 (the penultimate prerelease), which contains plenty of small bugfixes among others: - bpo#38605: from __future__ import annotations (PEP 563) used to be on this list in previous pre-releases but it has been postponed to Python 3.11 due to some compatibility concerns. - bpo-44600: Fix incorrect line numbers while tracing some failed patterns in match statements. Patch by Charles Burkland. - plenty of modifications in types.Union- Update to 3.10.0b4: https://docs.python.org/3.10/whatsnew/changelog.html#python-3-10-0-beta-4 - Remove python3-imp-returntype.patch which has been upstreamed.- Update to 3.10.0b2: - PEP 623 -- Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. - PEP 604 -- Allow writing union types as X | Y - PEP 612 -- Parameter Specification Variables - PEP 626 -- Precise line numbers for debugging and other tools. - PEP 618 -- Add Optional Length-Checking To zip. - bpo-12782: Parenthesized context managers are now officially allowed. - PEP 632 -- Deprecate distutils module. - PEP 613 -- Explicit Type Aliases - PEP 634 -- Structural Pattern Matching: Specification - PEP 635 -- Structural Pattern Matching: Motivation and Rationale - PEP 636 -- Structural Pattern Matching: Tutorial - PEP 644 -- Require OpenSSL 1.1.1 or newer - PEP 624 -- Remove Py_UNICODE encoder APIs - PEP 597 -- Add optional EncodingWarning - Removed patches (assumed upstream): - sphinx-update-removed-function.patch- 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: 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: 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 Bugzillapython39-doch01-armsrv3 1696327003  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL3.10.13-150400.4.36.13.10.13-150400.4.36.1      !!!!!!!"""""""""""""""""""""python3.10MiscACKSHISTORYNEWSPortingREADMEREADME.coverityREADME.valgrindSpecialBuilds.txtcoverity_model.cgdbinitindent.propython-config.inpython-config.sh.inpython-embed.pc.inpython-wing3.wprpython-wing4.wprpython-wing5.wprpython.manpython.pc.inrequirements-test.txtstable_abi.txtsvnmap.txtvalgrind-python.suppvgrindefshtml_downloads6dc1f3f4f0e6ca13cb42ddf4d6cbc8aftzinfo_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.txthowtoannotations.rst.txtargparse.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.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.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.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.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.txtconfigure.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.10.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_staticbasic.csscaret-down.svgchangelog_search.jsclassic.csscopybutton.jsdefault.cssdoctools.jsdocumentation_options.jsfile.pngglossary.jsonjquery-3.5.1.jsjquery.jslanguage_data.jsmenu.jsminus.pngopensearch.xmlplus.pngpy.pngpy.svgpydoctheme.csspygments.csssearchtools.jssidebar.jsunderscore-1.13.1.jsunderscore.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.htmlhowtoannotations.htmlargparse.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.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.htmlmm.htmlmmap.htmlmodulefinder.htmlmodules.htmlmsilib.htmlmsvcrt.htmlmultiprocessing.htmlmultiprocessing.shared_memory.htmlnetdata.htmlnetrc.htmlnis.htmlnntplib.htmlnumbers.htmlnumeric.htmloperator.htmloptparse.htmlos.htmlos.path.htmlossaudiodev.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.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.htmlconfigure.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.10.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.10//usr/share/doc/packages/python3.10/Misc//usr/share/doc/packages/python3.10/html//usr/share/doc/packages/python3.10/html/_downloads//usr/share/doc/packages/python3.10/html/_downloads/6dc1f3f4f0e6ca13cb42ddf4d6cbc8af//usr/share/doc/packages/python3.10/html/_images//usr/share/doc/packages/python3.10/html/_sources//usr/share/doc/packages/python3.10/html/_sources/c-api//usr/share/doc/packages/python3.10/html/_sources/distributing//usr/share/doc/packages/python3.10/html/_sources/distutils//usr/share/doc/packages/python3.10/html/_sources/extending//usr/share/doc/packages/python3.10/html/_sources/faq//usr/share/doc/packages/python3.10/html/_sources/howto//usr/share/doc/packages/python3.10/html/_sources/install//usr/share/doc/packages/python3.10/html/_sources/installing//usr/share/doc/packages/python3.10/html/_sources/library//usr/share/doc/packages/python3.10/html/_sources/reference//usr/share/doc/packages/python3.10/html/_sources/tutorial//usr/share/doc/packages/python3.10/html/_sources/using//usr/share/doc/packages/python3.10/html/_sources/whatsnew//usr/share/doc/packages/python3.10/html/_static//usr/share/doc/packages/python3.10/html/c-api//usr/share/doc/packages/python3.10/html/distributing//usr/share/doc/packages/python3.10/html/distutils//usr/share/doc/packages/python3.10/html/extending//usr/share/doc/packages/python3.10/html/faq//usr/share/doc/packages/python3.10/html/howto//usr/share/doc/packages/python3.10/html/install//usr/share/doc/packages/python3.10/html/installing//usr/share/doc/packages/python3.10/html/library//usr/share/doc/packages/python3.10/html/reference//usr/share/doc/packages/python3.10/html/tutorial//usr/share/doc/packages/python3.10/html/using//usr/share/doc/packages/python3.10/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:30915/SUSE_SLE-15-SP4_Update/cef239507711bc6d86736eaf320054ae-python310.SUSE_SLE-15-SP4_Update:docdrpmxz5aarch64-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 textC source, 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 linesLaTeX document, ASCII textPython script, UTF-8 Unicode text executableAlgol 68 source, ASCII textHTML document, ASCII textPython script text executable Python script, ASCII text executableUTF-8 Unicode text, with very long linesPython script, ASCII text executable, with very long linesSVG Scalable Vector Graphics imagePNG image data, 16 x 16, 8-bit/color RGBA, non-interlacedASCII text, with very long lines, with no line terminatorsPNG 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 linesj4Ìͽpython3103.10utf-845e8327a96a07941aa31c8626c9779389ca5a3bdcc1fff98f9239d33510e8e04?7zXZ !t/['\]"k%4Pa 䥸Mqa{#1^o5:va1Ǔ&hQr0wcHF˂ʥ&-ch? _Hd=,OeW J d($]#ՖS)לȇ6>ȇwCGK;=@ΚmA;9A4sI~uQep'ɚM1[;hK\'Za%'}J%3UM۰@\f s1ec:I0:=a5667Uj`5hhSz1+>9 /pmɨM-vNX3H#uk.]( x_8wXa+h_PHz~G.ks};ʻ&`JPYQSbK%GtlS+ۊ~*JKT=XHx!޽@(;yQr ,>7.D7  uq(#2-> S*%RfH9~=*F9/y&S=xc#O!Z~r ('Rl- h'R K |ـYZ"\0R=&kg厙lޱ@A.";gK6]hJF0UI˵f S vئS4+XݏԹL Ioȅ8͆o(k+q~S s^=U"JEXG%;YNVP?"jnz'22EBCs^5I`sQZXީ+p?Sll2X)Iςkǡcm|aUx[tR|!0絰ꉎѶ* Wg. 6h痶@\5搹VRL@t*Z7tY7qch6υg(%M)E9ޢm[]>oƑ7P*A5ku߸:y<4Y]_+_A|$hMJ:Xdn8AО0KLsY⇯SzKVWL#ώ. <Iҗ9{{gi?w#ϫԘ .OƚIxۜg;fpū1Mfo4r|-z;-ȗ]UnWc5s ז՝wW FY|R#.)*/ aJ14WKV'NpTlם]`n_dSOq9z mpW0$9ӝ3:S 7^R `{iV -E!%ܜ("[Z{\|Up!Io2GwJ/Qq'p䞁<'g)扡"1"-K'j&5i_!Um٘߇?_\0^DFk8 - N/T.ƣ %'(解4.?R^P {Ѥ@ɨRL,Gy'.$FĜ &GK[yPź":"ib 8}Qc~3'ͺ {ǽfЫY7 IP'ݞSJڮn`Lp8yD8[Y]˩O)yƶcz@*x 0!6/$f#`^q&+`G>7׀/gTP6%6+.KnDM}d'#h IDhK~c%`!scP5SjO0dxFwta*^acʈDօ8?4zJ W^"䮳l$k,q#-=l_9Et.ءzZ ay!;h({~C#$CgEf&[WN͡Z}ي&j(Z?ǂ33Oʁw.yb̉"i)?.5#s;5pzV?Yaq* z[ 3,ŭs_/7 Q*Y{ !AR`i_uG? d]_,Кt+. D(OZ@bt& q3κ??spcvn&OS5*nJt>^SB@ϵɸ*7"@fs"4z1ѓYqv_~;5\bGB 'ڄ,fP32(*3Ge8Cڽ1>Q-·Y`Z{A,@dγsE ^;@?nnśˋ()?gVl<*sL93YW-p SPVCeZ?l`/yo ^fd1 h`W;2gguU)zi2 >@BPհ\%U<<\X1EGȗ $\E|_ɡzHxW(FTa~M ^@Qh)%m%1VdfW[[A;Vޱ"0Ni^|sϲevW2a7oʡ3@Oo\O0#dZӪ. ?'p1(d(e}UIyȬRYa5ozh-6zabcPE*~=-7Ń]>Afl9 ^m6O 4͍Ƈ2A sѓk(7Z¶e5uů fZkFvk44#+xN*:dž[1v>b}TCcҨ0nj,ykTK'yQʳ1$ڻҢ_P~Vw'Jɨ/UY kgڰѲc e8)F8}+^yc4?a-+Lz.1WfAL*[Ir%l_Y'y,E,x D$:=:B$@ԑ1M5bv8Ahq{<;(kS1s ZSrT6Hh fB\\|UpVI74CjK!׺: nNjaXDZSڙ!mt3m.H2pg!)棆?ڧXQPXClcS-@u;oOrΪ|QB Nk/U 0^Ȧ<oL8ӇZ )g&&kB攪u/y"_qċCSU M ot=]"΁ew-P)yN3s6e6[|..[.H[v7C܌E[4+H?H+8Z Jlw % UE-ꤴFĭ-3ЏfMrPn&4_.pK8u&gE MGd>c]ZE'Qj Rs)Y,P!:qvy^+Qf 勖JUJYa-v@'1u7L}y爚t~:GHZi]ƄY7MA=$u5-16D7n30x"P e1[:!9;][6ugŦ j42ݑg0Ax1_a4;vg?K蟇urZk_ UOO8O$ LY9<꒗IW;5ZlPioѣ27]ʪ4'e!6p -HpV+0)/gLZg~4Ne5%?Pq)R93ʑᨰm}t[TgU(s[A= 9zH(T'\ua4{h:rY߇;*qvT#c9gyYA}Pq@v̽X]k 8s_a]s ]ˎw{szɘ&bIb-M\=<+J7M nuW|>; wrDf=aP~A)p.a|5Y$b@|gq)04@eg >?u̐09rWjO@m&[S㓑ipfz0D Ul6>'EEH~ /-A*WhI*#Rv 1*e`1*xl=HsA\?8OQhHm\Vo+ڌF~!^5>* K]akx7 $ĶÞMɼؽA &VG[qbzߡR54)>igmߙ1f=cG ѫiϽ, qy^/}m>shG8nJ[FpR9="D,g{.^S & +|'dk¡!WlWnWf4DINA$9"zqWY 5S.Ea6~Ph + F@{pȯKo7aTL1R@O[n㭒UԧR<++KP:w!C #3\ܳXVv4JǙ^fa뾕T|Y+ ֘I8j So57,ҡFƳ1=s wXE.1FuX/"o.] vxlVCSEG#'#V c9_:];[]/[ъmQi) 9-JJχvLO.sSCkB? S#hנ8nK1jWi#k$@~oeTQy[qOOG-} MӢ7,F!]T_Qԅ쬦Sځڕl` _4C@4Rη`]Dj:9IzN;DT~T~4L `,@_ތ[c&CB fcW3VA̙J58y*`)O]씣[eFxqcٔ?`4v1\*Xnr#-96H|%O:=@ `&UOL]#/СI}9--j{%Z~ܠ/ 9NPU l*ux7לYz <ܘgQ(t3|&$tn*!mXFjy_wrtRlQ@UE0RXnGߋX[dMֲnL2>u< o3N&j>wZ8'6n{Cvgʔ뜮 ;Q⭖r[d%0,A;%3f>1[ڻ_޳*xbM)`՗߮V%ܒTQil2>P_ŕuR-ZmٮF&8$v|,#b_L׾0 ɰ<}l;~#.k3C⥴]sxBК7.1:TcBAuF;^7n%@맟"u[T"suIfl[F}9~D I}c  -g䟋ߔюO,8Ąp0%6O^3vqwVLNu[ m}G֤{TKicijs:r2L?N>D˖V,{ pLUL$<%pU`zU$`χ^01ObUC36 M-")uL!T–Vȑ.ʂe>ׯsY;QPy6v Say]v4ј,DV_m 6kŲ?|f["wb|(WC[k w)|c({$cr ?Fǜ9˺Fnׂ:4 x&p>3]=Uu@^S $ڴ&tB)m <0&'d[_ǡ.R<}}H!jղF=9~l)yZz&(8aiw٦ ~N赖C^Ůe(=~Js5E?Fܹd]@s pVf&i.FӣG@T_B^'\Ti MxWCv~Wo!+Zˏ-@=mÕI%rg"٦$kzDp4냂b yEqYVoT O?n$_o]:k:~G -fePF@k 'Uds:O.h딅J`YZpW[=T5٥_4LvfJh2k|,qbad5Y2;EA`ڀ9G&{ 'zf$1ʿR>/Hݺ(2}Hý6L`G<#bo0v )T< ??gGSK iZW}l} cH !l|e%es˴zȈq&T@c+)75zf5-R'hv <\|sk~6y_֥Cs:nZ,)"{H6v%RwK`tW-x>X)]o]@D*i8DQa_֤E4au==oHT>eT~B\ >VI&0q9S㓫a!{h;UB,W@ vcbs ) 5ӒpL0^DGA^x9#Ϊ()z:lb 8m[=Z4 .嘃z.ۜ[(nJ|p 4TO&y:zr %Xce>we+| igcC0cQr~ʬMMͥomq::AF*`:RI<Q'.O KR6cHtoyQ<-yxԀ+񓐔tP  _QUM@nlޑ wJ!]rZ*YlFa!wu?{{|&+9й.UϙYBJPЁX[BlfQ ?eOྲྀ YZ