<div dir="auto">It sounds like you’ve got it working without PYTHONPATH!  Progress!</div><div dir="auto"><br></div><div dir="auto">I’ll try to generate more ideas tonight and tomorrow.   I’m about ready to turn into a pumpkin.</div><div dir="auto"><br></div><div dir="auto">John</div><div dir="auto"><br></div><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 7, 2022 at 11:08 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
<div lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word"><div class="m_852712915793840424WordSection1"><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Thanks John and Moritz for actual testing plus questions and ideas, very helpful.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Am progressing.  Have made a number of configuration efforts and some internal changes.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><ol style="margin-top:0in" start="1" type="a"><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Completely uninstalled and reinstalled Python 3.10.2 on primary machine and secondary machine, including scrub of user-cache directories.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Building and testing local installation on primary machine, testing PyPi package installation on second machine.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Completely reviewed the python packaging instructions and related pages, line by line.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Replaced/refactored setup.py to avoid deprecation warning, same information now appearing as setup.cfg and pyproject.toml.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Instrumented the pypi-packaged  __init__.py  to successively test different import statements and report which incantation works.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Started using fourth-digit version variations for testing minor changes to pypi.  Latest is x3d 4.0.62.6<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Updated details about workaround on home page.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Added a file-length check when building to check prior to deployment and ensure that the full x3d.py was getting included in .tar.gz deliverables.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Added direct download link for latest x3d.py on pypi page.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Created dependency for xmlschema package so that XML validation is automatically supported.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Responding to your questions: the entire build process is automated, uploads to pypi are via twine (with upload progress bar visible) , outputs are logged in version control, and everything is committed/inspectable.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li></ol><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><ul style="margin-top:0in" type="disc"><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://pypi.org/project/x3d" target="_blank" style="font-family:Calibri,sans-serif">https://pypi.org/project/x3d</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://www.web3d.org/x3d/stylesheets/python/python.html" target="_blank" style="font-family:Calibri,sans-serif">https://www.web3d.org/x3d/stylesheets/python/python.html</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://www.web3d.org/x3d/stylesheets/python/x3d.py" target="_blank" style="font-family:Calibri,sans-serif">https://www.web3d.org/x3d/stylesheets/python/x3d.py</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://sourceforge.net/p/x3d/tickets/19" target="_blank" style="font-family:Calibri,sans-serif">https://sourceforge.net/p/x3d/tickets/19</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python" target="_blank" style="font-family:Calibri,sans-serif">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li></ul><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">My current test arrangement is much more predictable/reliable.  Made some small improvements to package itself (e.g. exception handling for XML validation when network is down or host certificate is mismatched).  Only a single package is created, x3d.py with no subpackages.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">Status:<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><ol style="margin-top:0in" start="12" type="a"><li class="m_852712915793840424MsoListParagraph"><span style="font-size:11pt;font-family:Calibri,sans-serif">Regular install of x3d.py requires regular setup in source,       i.e. </span><b>from x3d     import *</b><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph"><span style="font-family:Calibri,sans-serif">PyPi installation</span><span style="font-size:11pt;font-family:Calibri,sans-serif"> of x3d.py requires double-prefix in source, i.e. </span><b>from x3d.x3d import *</b><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li></ol><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">And so, getting pretty close… I suspect the missing fix will be going in setup.cfg file, but not sure what it is yet.  Have poked the following excerpted lines below, but it is still not cooperating.  All testing and insights remain welcome.<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><ul style="margin-top:0in" type="disc"><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://packaging.python.org/en/latest/tutorials/packaging-projects" target="_blank" style="font-family:Calibri,sans-serif">https://packaging.python.org/en/latest/tutorials/packaging-projects</a> (Windows tabs)<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://docs.python.org/3/tutorial/modules.html#packages" target="_blank" style="font-family:Calibri,sans-serif">https://docs.python.org/3/tutorial/modules.html#packages</a> <u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://docs.python.org/3/tutorial/modules.html#importing-from-a-package" target="_blank" style="font-family:Calibri,sans-serif">https://docs.python.org/3/tutorial/modules.html#importing-from-a-package</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li></ul><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><ul style="margin-top:0in" type="disc"><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python/setup.cfg" target="_blank" style="font-family:Calibri,sans-serif">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python/setup.cfg</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li><li class="m_852712915793840424MsoListParagraph" style="margin-left:0in"><span style="font-size:11pt;font-family:Calibri,sans-serif"><a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python/build.package.prepare.log.txt" target="_blank" style="font-family:Calibri,sans-serif">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python/build.package.prepare.log.txt</a><u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></li></ul><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"># setup.cfg<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><div><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">[options]<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">package_dir =<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">    = src<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">include_package_data = True<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">packages = find:<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">install_requires = xmlschema<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">python_requires = >=3.6<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New""><u style="font-family:"Courier New""></u> <u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">[options.packages.find]<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">where = src<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New""><u style="font-family:"Courier New""></u> <u style="font-family:"Courier New""></u></span></p></div><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New""><u style="font-family:"Courier New""></u> <u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">all the best, Don<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">-- <u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">Don Brutzman  Naval Postgraduate School, Code USW/Br        <a href="mailto:brutzman@nps.edu" target="_blank" style="font-family:"Courier New"">brutzman@nps.edu</a><u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:10pt;font-family:"Courier New"">X3D graphics, virtual worlds, Navy robotics https://</span><span style="font-size:11pt;font-family:Calibri,sans-serif"> </span><span style="font-size:10pt;font-family:"Courier New""><a href="http://faculty.nps.edu/brutzman" target="_blank" style="font-family:"Courier New"">faculty.nps.edu/brutzman</a><u style="font-family:"Courier New""></u><u style="font-family:"Courier New""></u></span></p><p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"><u style="font-family:Calibri,sans-serif"></u> <u style="font-family:Calibri,sans-serif"></u></span></p><div><div style="border-style:solid none none;border-top-width:1pt;padding:3pt 0in 0in;border-top-color:rgb(225,225,225)"><p class="MsoNormal"><b><span style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span style="font-size:11pt;font-family:Calibri,sans-serif"> Hans Moritz Guenther <<a href="mailto:hgunther@mit.edu" target="_blank" style="font-family:Calibri,sans-serif">hgunther@mit.edu</a>> <br><b style="font-family:Calibri,sans-serif">Sent:</b> Sunday, March 6, 2022 4:08 AM<br><b style="font-family:Calibri,sans-serif">To:</b> Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank" style="font-family:Calibri,sans-serif">brutzman@nps.edu</a>>; <a href="mailto:vmarchetti@kshell.com" target="_blank" style="font-family:Calibri,sans-serif">vmarchetti@kshell.com</a>; X3D-Public <<a href="mailto:x3d-public@web3d.org" target="_blank" style="font-family:Calibri,sans-serif">x3d-public@web3d.org</a>><br><b style="font-family:Calibri,sans-serif">Cc:</b> John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" style="font-family:Calibri,sans-serif">yottzumm@gmail.com</a>>; Peitso, Loren (CIV) <<a href="mailto:lepeitso@nps.edu" target="_blank" style="font-family:Calibri,sans-serif">lepeitso@nps.edu</a>><br><b style="font-family:Calibri,sans-serif">Subject:</b> Re: [x3d-public] x3d.py package: Some feedback and suggestion for improvement; tuples and lists; updated x3d.py<u style="font-family:Calibri,sans-serif"></u><u style="font-family:Calibri,sans-serif"></u></span></p></div></div><div><div><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">On 3/5/22 9:08 PM, Brutzman, Donald (Don) (CIV) wrote:<u></u><u></u></p></div><blockquote style="margin-top:5pt;margin-bottom:5pt"><p class="MsoNormal">Thanks Moritz for looking at this.  However, we can’t really expect any PyPi user who types “pip install x3d” to go through such a process.<u></u><u></u></p></blockquote><p>A Pypi user does not have to go through that - unless their local installation is messed up in some way; I was just trying to debug. Plenty of Pypi packages work just like that.<u></u><u></u></p><p><u></u> <u></u></p><p>However, right now the problem seems to be different:<u></u><u></u></p><p>Something changed in the Pypi setup for this package between 4.0.57 and 4.0.58: From 4.0.58 on, "pip install" only downloads and installs the metadata of the package (license file etc.), but not the actual code. Note in the following output how an installation with 4.0.57 gives me two directories in my "site-packages" called "x3d" (with the code) and "x3d-4.0.57-py3-none-any.whl" (with the meta data of the package).<u></u><u></u></p><p>However, starting with 4.0.58, I ONLY get the metadata and not the actual code - and thus an "import x3d" must fail just because the code is not actually installed. It also no longer downloads the actual ~400 kB wheel:<u></u><u></u></p><p><br>(kitchensink) MoritzAirRoseGold ~/mambaforge/envs/kitchensink/lib/python3.10> pip install x3d==4.0.56<br>Collecting x3d==4.0.56<br>  Downloading x3d-4.0.56-py3-none-any.whl (418 kB)<br>     |████████████████████████████████| 418 kB 2.3 MB/s            <br>Installing collected packages: x3d<br>  Attempting uninstall: x3d<br>    Found existing installation: x3d 4.0.52<br>    Uninstalling x3d-4.0.52:<br>      Successfully uninstalled x3d-4.0.52<br>Successfully installed x3d-4.0.56<br>(kitchensink) MoritzAirRoseGold ~/mambaforge/envs/kitchensink/lib/python3.10> ls site-packages/x3*   <br>site-packages/x3d:<br>__init__.py __pycache__ x3d.py<br><br>site-packages/x3d-4.0.56.dist-info:<br>INSTALLER     LICENSE       METADATA      RECORD        REQUESTED     WHEEL         license.html  license.txt   top_level.txt<br>(kitchensink) MoritzAirRoseGold ~/mambaforge/envs/kitchensink/lib/python3.10> pip install x3d==4.0.57<br>Collecting x3d==4.0.57<br>  Downloading x3d-4.0.57-py3-none-any.whl (16 kB)<br>Installing collected packages: x3d<br>  Attempting uninstall: x3d<br>    Found existing installation: x3d 4.0.56<br>    Uninstalling x3d-4.0.56:<br>      Successfully uninstalled x3d-4.0.56<br>Successfully installed x3d-4.0.57<br>(kitchensink) MoritzAirRoseGold ~/mambaforge/envs/kitchensink/lib/python3.10> ls site-packages/x3*   <br>INSTALLER     LICENSE       METADATA      RECORD        REQUESTED     WHEEL         license.html  license.txt   top_level.txt<u></u><u></u></p><p><u></u> <u></u></p><p><u></u> <u></u></p><p>How do you upload the package to Pypi? By hand? Do you use some uploader script or do it by hand?<u></u><u></u></p><p>If you follow for example <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpackaging.python.org%2Fen%2Flatest%2Ftutorials%2Fpackaging-projects%2F&data=04%7C01%7Cbrutzman%40nps.edu%7C71204b50571049885f4d08d9ff69ef47%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637821652758101749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=atx%2FZE0pZA5RSJGmWCkcPGdY1thic5PpQLQqdqmABGM%3D&reserved=0" target="_blank">https://packaging.python.org/en/latest/tutorials/packaging-projects/</a> : <u></u><u></u></p><p>- When you do "python -m build" in your local directory, do you see the actual code file (the .tar.gz file) or only the wheel metadata (the whl file)?<u></u><u></u></p><p>- When you upload (python3 -m twine upload ....) do you see uploading of both file?<u></u><u></u></p><p>[Of course, if you use a different method or uploader to make the wheels and update to Pypi, then the commands and output will be different.]<u></u><u></u></p><p>Moritz<u></u><u></u></p><p><u></u> <u></u></p><pre style="font-family:monospace">-- <u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace">Hans Moritz Günther<u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace">Massachusetts Institute of Technology<u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace">Kavli Institute for Astrophysics and Space Research<u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace"><a href="https://www.google.com/maps/search/77+Massachusetts+Avenue?entry=gmail&source=g" style="font-family:monospace">77 Massachusetts Avenue</a><u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace">NE83-569<u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace">Cambridge, MA 02139<u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace"><a href="mailto:hgunther@mit.edu" target="_blank" style="font-family:monospace">hgunther@mit.edu</a><u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre><pre style="font-family:monospace"><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fspace.mit.edu%2Fhome%2Fguenther%2F&data=04%7C01%7Cbrutzman%40nps.edu%7C71204b50571049885f4d08d9ff69ef47%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637821652758101749%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=bo7wTcimNGdJaXgo%2FK1%2B4ideJFqpvZp7qh96xyS%2BaKs%3D&reserved=0" target="_blank" style="font-family:monospace">https://space.mit.edu/home/guenther/</a><u style="font-family:monospace"></u><u style="font-family:monospace"></u></pre></div></div></div></blockquote></div></div>