From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adolf Belka To: development@lists.ipfire.org Subject: Re: Question about updating python to 3.10 Date: Mon, 24 Jan 2022 13:46:15 +0100 Message-ID: In-Reply-To: <5B3D9FD3-AAD8-4610-9BB3-984FA4CE4121@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1624219829091359074==" List-Id: --===============1624219829091359074== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Michael, On 20/01/2022 17:51, Michael Tremer wrote: > Hello, >=20 >> On 19 Jan 2022, at 19:52, Adolf Belka wrote: >> >> Hi Michael, >> >> There will be a bit more time before I have the python3.10 branch availabl= e. >> >> I made a mistake with one of the commits and didn't notice till some while= after. So I did a git reset --soft "commit hash" which I have been successfu= l with in the past but this time something went wrong and messed things up. >=20 > This happens. Branches like this don=E2=80=99t have to be perfect. They are= work-in-progress and often that has its problems :) >=20 >> I have had to re delete my local python3.10 branch with the commits done s= o far and am now doing a full build again to make sure that my restart doesn'= t have any errors in it. >> >> I will be able to restart doing the commits again tomorrow so probably bra= nch will be available on Friday. >=20 > Thank you, I will have a look tomorrow and rebase my branch based on yours. It took a bit longer to get it done as I had a problem with my built-in freez= er dying so I had to sort that out instead of working on the python-3.10 bran= ch It is now completed and pushed into my bonnietwin repository. Regards, Adolf. >=20 > Best, > -Michael >=20 >> >> Sorry. >> >> Regards, >> >> Adolf. >> >> On 19/01/2022 13:33, Adolf Belka wrote: >>> Hi Michael, >>> >>> On 19/01/2022 09:25, Michael Tremer wrote: >>>> Hello, >>>> >>>> I am sure this was documented in the wiki somewhere. For some reason I c= annot find it any more. >>>> >>>> Please let me know if you need any assistance from me. >>> I got it to work thanks very much. There is now a python3.10 branch in my= bonnietwin repository but it only has a few of the changes so far but I want= ed to confirm that it worked. >>> >>> I need to finish doing the remaining commits and then push them. Hopefull= y I will be able to complete those later today or tomorrow. >>> >>> I will email when I have completed it and the full branch of my python3.1= 0 changes is pushed into my repository. >>> >>> Regards, >>> >>> Adolf. >>>> >>>> -Michael >>>> >>>>> On 18 Jan 2022, at 21:21, Adolf Belka wrote: >>>>> >>>>> Hi Michael, >>>>> >>>>> On 18/01/2022 19:51, Michael Tremer wrote: >>>>>> Hello, >>>>>>> On 18 Jan 2022, at 16:42, Adolf Belka wrot= e: >>>>>>> >>>>>>> Hi Michael, >>>>>>> >>>>>>> On 18/01/2022 16:02, Michael Tremer wrote: >>>>>>>> Hello Adolf, >>>>>>>> I have just been trying to build a couple of Python packages that I = need and I finally arrived at needing flit-core. >>>>>>>> I suppose since you did already build this, there is no point in me = doing all this again and also there is no need to build all my packages on Py= thon 3.8 when we can have a newer release. >>>>>>> I am afraid that you will need to build flit-core. I was building it= when I was trying to use pip to install tomli but that approached failed to = go further and that was when I used pyproject2setuppy, from your input, to bu= ild tomli and that did not need flit-core. >>>>>> Oh, I suppose that didn=E2=80=99t hold for very long because I now hav= e a package that needs it :( >>>>> flit-core also has no setup.py but you will then be able to use the pyp= roject2setuppy package from my python3.10 branch to build flit-core. >>>>>>> In terms of the python3.10 branch that I have on my git repository at= home, I presume I could push it onto my personal git repository that you set= up for me - https://git.ipfire.org/?p=3Dpeople/bonnietwin/ipfire-2.x.git;a= =3Dsummary >>>>>> Yes, it is always a good idea to backup things to the server. >>>>>>> The only thing is I am not sure what command I should use to push the= branch from my system here to the IPFire one. >>>>>> If you have your repository set up with =E2=80=9Cgit remote add =E2=80= =A6=E2=80=9D then you only need to run =E2=80=9Cgit push bonnietwin python3.1= 0=E2=80=9D. >>>>> Aaah. I think when I tried to experiment with this before I created a l= ocal new clone of bonnietwin which was then separate from my running local re= pository that I used for building and I struggled to figure out how to get br= anches between them. >>>>> >>>>> Your mention of git remote add indicates that I can add my bonnietwin r= epository to my running build repository. Thais is what I was missing before. >>>>> Thanks for the clue, will give it a try. >>>>> >>>>> Regards, >>>>> >>>>> Adolf. >>>>>> -Michael >>>>>>> >>>>>>> I can have a go at trying it and see how it goes. >>>>>>> >>>>>>> Regards, >>>>>>> >>>>>>> Adolf. >>>>>>>> Could you push this branch somewhere for me so that I can base my wo= rk on top of it? >>>>>>>> Best, >>>>>>>> -Michael >>>>>>>>> On 13 Jan 2022, at 09:32, Michael Tremer wrote: >>>>>>>>> >>>>>>>>> Hello, >>>>>>>>> >>>>>>>>>> On 12 Jan 2022, at 21:08, Adolf Belka w= rote: >>>>>>>>>> >>>>>>>>>> Hi all, >>>>>>>>>> >>>>>>>>>> On 12/01/2022 19:10, Michael Tremer wrote: >>>>>>>>>>> Hey, >>>>>>>>>>>> On 11 Jan 2022, at 14:32, Adolf Belka = wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi Michael and all, >>>>>>>>>>>> >>>>>>>>>>>> python3-six has to stay as python3-dateutil explicitly specifies= it in its dependencies. >>>>>>>>>>>> So that solves that question. >>>>>>>>>>> Aww :( >>>>>>>>>>>> I have, with quite a bit of work, eventually been able to get al= l existing python modules updated that had updates and built successfully wit= h python3.10 >>>>>>>>>>> Yay! >>>>>>>>>>>> However later in the IPFire build libvirt failed with a problem = parsing some documentation files. >>>>>>>>>>>> Stashing my python3.10 changes and re-running the build had libv= irt building without problems. So one of the python changes has caused it. li= bvirt uses python3-docutils and that was updated but reverting that back to o= riginal on its own did not cause libvirt to build successfully. >>>>>>>>>>>> >>>>>>>>>>>> I looked in the libvirt .configure for an option to not build th= e docs but it is not mentioned under ./configure --help. >>>>>>>>>>>> >>>>>>>>>>>> I tried --without-docs and --disable-docs but both were not reco= gnised in the build. >>>>>>>>>>>> >>>>>>>>>>>> The current libvirt is from mid 2020 (6.5.0) so it is likely tha= t it is not compatible in some way with the updated python/modules. >>>>>>>>>>>> >>>>>>>>>>>> I tried updating libvirt to the current 7.10.0 >>>>>>>>>>>> libvirt has replaced autotools with meson. I found meson options= available for all existing ./configure options except three. There is nothin= g in meson options for:- >>>>>>>>>>>> --with-virtualport >>>>>>>>>>>> --with-macvtap >>>>>>>>>>>> --without-dbus >>>>>>>>>>> Yay, another project that is using meson :( >>>>>>>>>>> We no longer need macvtap; we have dubs, so that should not hurt;= and I have no idea what virtualport is. >>>>>>>>>>>> I tried building it with all the other options and it successful= ly built with the updated python3.10 and modules. All other packages after li= bvirt built successfully without any problems. >>>>>>>>>>>> >>>>>>>>>>>> Normally I would then use the updated libvirt, as that is needed= to work with the updated python packages, but I am not sure if those missing= options are now built into libvirt or are no longer available and what impac= t that might have for the use of libvirt on IPFire. >>>>>>>>>>> I don=E2=80=99t think this would hurt us much. I have CCed Jonata= n who maintains this, so maybe he knows more about this. >>>>>>>>>>>> There is nothing in the libvirt changelog about virtualport, mac= vtap or dbus. >>>>>>>>>>>> >>>>>>>>>>>> Searching on the internet, I was also not able to find anything = related to libvirt and these options. >>>>>>>>>>>> >>>>>>>>>>>> Any suggestions/proposals on how to move forward on this? Should= I just build libvirt without those three options or ...? >>>>>>>>>>> Yes, and I think this could be submitted independently of the Pyt= hon branch because it is an add-on. We should be able to ship this at any tim= e and might want to delay Python until we have enough space in a core update. >>>>>>>>>> Okay, then I will stash my python3.10 changes and submit the libvi= rt update on its own. Then Jonaton can test it out. I don't use libvirt or qe= mu so I can't test it easily. >>>>>>>>>> >>>>>>>>>> Then when you think the time is right, let me know and I will subm= it the python3.10 series of patches. >>>>>>>>> >>>>>>>>> You can submit this at any time. I was just thinking about the conv= ersation between Peter and Arne during the last call regarding an updated ker= nel and updated firmware. Depending on the size of Python, all of this might = make an update a little bit too large - however, this should not be a patchse= t that we cannot merge within two merge windows. >>>>>>>>> >>>>>>>>>>> Thank you for looking into this. Sounds like a not so nice riddle= to solve :) >>>>>>>>>> There were certainly some challenges, like updating python3-daemon= which then wanted to have twine as a fixed dependency which had nine depende= ncies some of which had more. I had got to 19 additional python packages and = still going and then I said enough was enough and looked at twine. It is requ= ired for uploading python packages to PyPI which IPFire doesn't need. So I tr= ied patching the twine requirement out and that worked and then I found other= s that had done the same because they had no response to the request to not h= ave twine as a mandatory build requirement. >>>>>>>>> >>>>>>>>> Python seems to become the hell that Perl used to be. In order to a= dd one perl package, you had 20 dependencies. And those dependencies had thei= r own dependencies too=E2=80=A6 It would be great to disable or patch out wha= tever is possible so that we do not create more work for ourselves in the fut= ure and have to update packages that are barely used - we already have enough= of these :) >>>>>>>>> >>>>>>>>>> I found it all challenging but rewarding when I made progress and = eventually succeeded in building everything without errors. >>>>>>>>> >>>>>>>>> I am so happy that you are putting all this time and effort into th= is because it certainly requires patience - a trade I don=E2=80=99t have. >>>>>>>>> >>>>>>>>> And Python is being used in all sorts of places in the distribution= , so it really isn=E2=80=99t anything we should not be up to date on. >>>>>>>>> >>>>>>>>> -Michael >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Regards, >>>>>>>>>> Adolf. >>>>>>>>>>> -Michael >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Regards, >>>>>>>>>>>> >>>>>>>>>>>> Adolf. >>>>>>>>>>>> >>>>>>>>>>>> On 07/01/2022 17:49, Michael Tremer wrote: >>>>>>>>>>>>> Hello, >>>>>>>>>>>>>> On 4 Jan 2022, at 12:49, Adolf Belka wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Michael, >>>>>>>>>>>>>> >>>>>>>>>>>>>> Following the suggested Arch Linux approach I have got python3= -setuptools-scm building successfully now. Yaaah. >>>>>>>>>>>>>> I had to install python3-toml, followed by python3-pyproject2s= etuppy followed by python3-tomli. >>>>>>>>>>>>>> >>>>>>>>>>>>>> However then python3-six which installs after python3-setuptoo= ls-scm fails due to missing the python package python3-packaging. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I can install that package, and will do so as I continue testi= ng out the python 3.10 build but I have the following question about python3-= six. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Is six still needed. It is designed to ensure that programs ca= n work with either python2 or python3 but IPFire only has python3 now. >>>>>>>>>>>>>> I can find python3-six referenced only by aws-cli. In the aws-= cli build python3-six is not listed at all in the build requirements. I tried= to search for aws-cli and python3-six being needed in run mode but I could n= ot find anything one way or the other. >>>>>>>>>>>>> If aws-cli no longer requires python3-six we can drop it. Last = time we touched it I had to bring the package back because aws-cli was still = depending on it. >>>>>>>>>>>>>> If python3-six is really needed for running aws-cli then I can= install it and the new dependency but if it is not needed we could remove tw= o packages which would partially offset the three new dependencies required t= o be able to build the latest python3-setuptools-scm. >>>>>>>>>>>>> Yes, that would be great :) >>>>>>>>>>>>> -Michael >>>>>>>>>>>>>> >>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>> Adolf >>>>>>>>>>>>>> >>>>>>>>>>>>>> On 03/01/2022 12:32, Michael Tremer wrote: >>>>>>>>>>>>>>> Hello, >>>>>>>>>>>>>>>> On 3 Jan 2022, at 11:31, Adolf Belka wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Michael, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On 03/01/2022 11:52, Michael Tremer wrote: >>>>>>>>>>>>>>>>> Hello, >>>>>>>>>>>>>>>>> I am not sure if you already looked at what Arch is doing, = but as far as I understand it works like this: >>>>>>>>>>>>>>>> No I didn't look at Arch, which is surprising as I have in t= he past with other packages but I didn't. So thanks very much for the pointer. >>>>>>>>>>>>>>>>> They build Python 3 without pip and setuptools (https://git= hub.com/archlinux/svntogit-packages/blob/912617035af94b1466595eedd6e6637676e2= e733/trunk/PKGBUILD#L59). >>>>>>>>>>>>>>>>> At this stage we might need to build setuptools separately. >>>>>>>>>>>>>>>>> They use a tool called pyproject2setuppy (great name!) to b= uild tomli (https://github.com/archlinux/svntogit-packages/blob/packages/pyth= on-tomli/trunk/PKGBUILD). >>>>>>>>>>>>>>>>> Setuptools-scm can then be built with tomli: https://github= .com/archlinux/svntogit-community/blob/packages/python-setuptools-scm/trunk/P= KGBUILD >>>>>>>>>>>>>>>>> Would this work or did I overlook anything? >>>>>>>>>>>>>>>> I will have a look at the links and give it a go. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks very much, I feel re-motivated now. >>>>>>>>>>>>>>> Very good! I got a little bit lost in your last email and I t= hink I could tell. But following a solution that somebody else has come up wi= th can be a good thing to follow and of course we would customise it to our n= eeds. >>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>> -Michael >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>> Adolf. >>>>>>>>>>>>>>>>> -Michael >>>>>>>>>>>>>>>>>> On 2 Jan 2022, at 13:44, Adolf Belka wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi Michael and All, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On 26/12/2021 21:55, Michael Tremer wrote: >>>>>>>>>>>>>>>>>>> Merry Christmas, >>>>>>>>>>>>>>>>>>>> On 26 Dec 2021, at 15:38, Adolf Belka wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hi Michael, >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On 17/12/2021 12:41, Michael Tremer wrote: >>>>>>>>>>>>>>>>>>>>> Hello Adolf, >>>>>>>>>>>>>>>>>>>>>> On 17 Dec 2021, at 11:55, Adolf Belka wrote: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Hi All, >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> I am working on updating python from 3.8 to 3.10. Pyth= on itself is okay after some other python related programs were also updated = due to their older versions not working with 3.10 >>>>>>>>>>>>>>>>>>>>> Thank you for working on this. >>>>>>>>>>>>>>>>>>>>>> I am working through all the programs that reference p= ython-3.8 in their rootfiles, or wherever, to change them to 3.10 >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> My question comes with regard to the changes to the ro= otfiles to ensure they will be included properly in an update. >>>>>>>>>>>>>>>>>>>>> We will have to ship everything that puts anything into= /usr/lib*/python3.*/site-packages again with the release of Python 3.10. >>>>>>>>>>>>>>>>>>>>> This isn=E2=80=99t fun, but not as much of a pain in th= e rear as shipping a new Perl release. >>>>>>>>>>>>>>>>>>>>>> For the addons then when I change the rootfile I am al= so incrementing the PAK_VER number in the lfs files and that ensures that the= y will be properly updated. >>>>>>>>>>>>>>>>>>>>> Yes. That is required for Pakfire to find a new version. >>>>>>>>>>>>>>>>>>>>>> I don't know what to do for the core programs where I = have updated the rootfile. The lfs files for these programs don't have a PAK_= VER number to increment and the actual package version number is not being ch= anged so I don't know what I need to change in the lfs to ensure that the roo= tfile changes will be properly included in the update? >>>>>>>>>>>>>>>>>>>>> I would say committing everything into a =E2=80=9Cpytho= n-3.10=E2=80=9D branch and submitting it all as a patchset is fine. All packa= ges that have been touched in that branch will have to be shipped again which= should be easy to identify if it all comes in one large branch. >>>>>>>>>>>>>>>>>>>> Okay, that is clear then.Will follow that approach. >>>>>>>>>>>>>>>>>>>>>> I would appreciate any help on what I need to do for t= hese programs that have had changes only in their rootfiles. >>>>>>>>>>>>>>>>>>>>> Absolutely. Did you find anything that didn=E2=80=99t b= uild yet? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I have not had any problem with python3.10 itself but I = found some of the older modules would not work with 3.10 so I decided to do a= combined update to 3.10 plus update modules to latest versions. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I found that after python3-setuptools-scm had run that t= he next module python3-six failed to run due to missing the tomli library. I = commented out six and reran the build and then python3-dateutil had the same = problem and then python3-jmespath >>>>>>>>>>>>>>>>>>> I completely lost track of what the status of setuptools/= distutils and so on is. This has changed multiple times and become independen= t/part of the distribution again and so on. >>>>>>>>>>>>>>>>>>>> After some investigation I have found that since version= 6.0.0 of python3-setuptools-scm, tomli has been a required library when it i= s being used by other modules. So running version 6.0.0 of setuptools-scm wor= ked with python3.10 and subsequent modules built successfully as tomli not ne= eded. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> So the obvious fix is to install tomli but that is when = I ran into a problem. tomli has no setup.py or setup.cfg files in its tarball= . The only way to build it is using pip. >>>>>>>>>>>>>>>>>>> Err. Great. >>>>>>>>>>>>>>>>>>>> Apparently, after some searching, setup.py has been depr= ecated as the recommended install method and if setup.py doesn't work the usu= al fix suggestion is to run pip install. >>>>>>>>>>>>>>>>>>> Yes. But apparently the new system is deprecated, too. I = really dislike the state of packaging systems that come with any language the= se days. >>>>>>>>>>>>>>>>>>>> Having searched on pip for a while, it looks like builds= using it can still be done from tarballs locally without needing to access t= he internet to download the modules. >>>>>>>>>>>>>>>>>>> That is good! >>>>>>>>>>>>>>>>>>>> As pip is installed as part of python3 i tried using tha= t. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I used "python3 -m pip install --root=3D/ ." in place of >>>>>>>>>>>>>>>>>>>> "python3 setup.py build >>>>>>>>>>>>>>>>>>>> python3 setup.py install --root=3D/" >>>>>>>>>>>>>>>>>>>> for the tomli source. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> This failed because tomli requires flit_core to be avail= able. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> flit_core also has no setup.py and so I tried to build i= t with pip install. This failed with the error message that tomli was require= d as a dependency. So I added --no-deps to the flit_core pip install line and= this time flit_core successfully built but the tomli build still came back w= ith not finding flit_core. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I have tried a variety of changes to the pip install lin= e but none of them has been successful and it has become clear that I am out = of my depth here and need guidance rather than just trying anything I find fr= om a google search. I am not even really clear if pip install is the correct = approach, except if not then I have no idea how to progress. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Help urgently needed on how I should be approaching this. >>>>>>>>>>>>>>>>>>> Circular dependencies can happen. This won=E2=80=99t be t= he first time and it always is an utter nightmare with our buildsystem. >>>>>>>>>>>>>>>>>>> This page states that pip comes by default with all binar= y packages: >>>>>>>>>>>>>>>>>>> https://docs.python.org/3/installing/index.html >>>>>>>>>>>>>>>>>>> Is there a chance that it is part of the distribution and= can be enabled with a configure switch? >>>>>>>>>>>>>>>>>> I wasn't able to find any way to get it enabled that way. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I did find that pip install will not install if the packag= e is already present. You have to add --upgrade to make it update any package= already present. So I tried that. Didn't work. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I found a section about needing to use bootstrapping if yo= u want to install tomli. Followed the information for creating a wheel file f= or flit_core and then extracting that file into the site-packages directory. = Tried that. Didn't work. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Rather than doing a complete build every time I changed to= trying to build flit_core followed by tomli in a ./make.sh shell environment. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Doing that I found that I had a pip install command that w= as creating the flit_core directory in site-packages and also including the .= dist-info directory. The info I found said that the .dist-info directory had = to be there for pip to be able to find the flit_core package. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> However the pip install of tomli still ends up not finding= any flit_core package. In the bootstrapping information it mentioned about c= hanging the PYTHONPATH environment variable for find the flit_core package so= I tried that in the shell but it also made no difference. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I then tried running python3 -c 'import flit_core' in the = tomli build shell before doing the tomli pip install. The import command comp= leted with no error but tomli still could not find any flit_core package. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> End result of all my work is that flit_core has been built= and installed into python3.10/site-packages but nothing seems to want to mak= e the tomli build find it. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Does anyone have any ideas on what command(s) I need to us= e in the tomli pip install to have the installed flit_core package visible. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Regards and a Happy and Healthy New Year to all, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Adolf. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> -Michael >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>>>>>> Adolf. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> PS: I hope everyone had an enjoyable Christmas. >>>>>>>>>>>>>>>>>>> I hope you did, too! >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> -Michael >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Adolf. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> --=20 >>>>>>>>>>>>>>>>>>>>>> Sent from my laptop >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> --=20 >>>>>>>>>>>>>>>>>>>> Sent from my laptop >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> --=20 >>>>>>>>>>>>>>>>>> Sent from my laptop >>>>>>>>>>>>>> >>>>>>>>>>>>>> --=20 >>>>>>>>>>>>>> Sent from my laptop >>>>>>>>>>>> >>>>>>>>>>>> --=20 >>>>>>>>>>>> Sent from my laptop >>>>>>>>>> >>>>>>>>>> --=20 >>>>>>>>>> Sent from my laptop >>>> >=20 --===============1624219829091359074==--