diff --git a/.github/actions/ghpython-components/componentize.py b/.github/actions/ghpython-components/componentize.py index fb9bf41..f02c808 100644 --- a/.github/actions/ghpython-components/componentize.py +++ b/.github/actions/ghpython-components/componentize.py @@ -13,6 +13,8 @@ import System import System.IO +# 1. x failed to find Type Hint. Using "No Type Hint" instead. (Missing Hint: 87f87f55-5b71-41f4-8aea-21d494016f81) + GHPYTHON_SCRIPT_GUID = System.Guid("c9b2d725-6f87-4b07-af90-bd9aefef68eb") # <<<<<<<<<<<< changed # GHPYTHON_SCRIPT_LIB = System.Guid("066d0a87-236f-4eae-a0f4-9e42f5327962") # ?? test unsure # <<<<<<<<<<<< changed TODO: to verify if it changes anything in py anc c# TEMPLATE_VER = re.compile("{{version}}") @@ -21,9 +23,9 @@ # TODO: we might want to double check this list if the guid are the same in Rhino 8 TYPES_MAP = dict( - none="35915213-5534-4277-81b8-1bdc9e7383d2", - ghdoc="87f87f55-5b71-41f4-8aea-21d494016f81", - float="39fbc626-7a01-46ab-a18e-ec1c0c41685b", + none="6a184b65-baa3-42d1-a548-3915b401de53", # <<<<<<<<<<<< changed + ghdoc="1c282eeb-dd16-439f-94e4-7d92b542fe8b", # <<<<<<<<<<<< changed + float="9d51e32e-c038-4352-9554-f4137ca91b9a", # <<<<<<<<<<<< changed bool="d60527f5-b5af-4ef6-8970-5f96fe412559", int="48d01794-d3d8-4aef-990e-127168822244", complex="309690df-6229-4774-91bb-b1c9c0bfa54d", @@ -48,7 +50,7 @@ surface="f4070a37-c822-410f-9057-100d2e22a22d", subd="20f4ca9c-6c90-4fd6-ba8a-5bf9ca79db08", brep="2ceb0405-fdfe-403d-a4d6-8786da45fb9d", - geometrybase="c37956f4-d39c-49c7-af71-1e87f8031b26", + geometrybase="c37956f4-d39c-49c7-af71-1e87f8031b26" ) #TODO: double check, don't know this param @@ -297,6 +299,9 @@ def create_ghuser_component(source, target, version=None, prefix=None): # ------------------------------ # ------------------------------ + # FIXME: here the component gives back this error: + # 1. Error running script: Unable to cast object of type 'Grasshopper.Kernel.Parameters.Param_String' to type 'RhinoCodePluginGH.Parameters.ScriptVariableParam'. + # needs to change the type of the parameters for both input and output # parameters params = ghpython_root.CreateChunk("ParameterData") # ok inputParam = ghpython_data.get("inputParameters", []) # ok @@ -305,13 +310,14 @@ def create_ghuser_component(source, target, version=None, prefix=None): params.SetInt32("InputCount", len(inputParam)) # ok for i, _pi in enumerate(inputParam): params.SetGuid( - "InputId", i, System.Guid.Parse("08908df5-fa14-4982-9ab2-1aa0927566aa") # ok <<<<<<<<<<<< changed + "InputId", i, System.Guid.Parse("08908df5-fa14-4982-9ab2-1aa0927566aa") # ?? <<<<<<<<<<<< changed ?? ) params.SetInt32("OutputCount", len(outputParam)) # ok for i, _po in enumerate(outputParam): params.SetGuid( - "OutputId", i, System.Guid.Parse("3ede854e-c753-40eb-84cb-b48008f14fd4") # ok <<<<<<<<<<<< changed + "OutputId", i, System.Guid.Parse("08908df5-fa14-4982-9ab2-1aa0927566aa") # ?? <<<<<<<<<<<< changed ?? ) + # FIXME: the "out" guis is 3ede854e-c753-40eb-84cb-b48008f14fd4 to replace up if you want to add it # ------------------------------ # input parameters @@ -330,7 +336,7 @@ def create_ghuser_component(source, target, version=None, prefix=None): ) pi_chunk.SetInt32("SourceCount", 0) # ok pi_chunk.SetGuid("InstanceGuid", input_instance_guid) # ok - # pi_chunk.SetGuid("TypeHintID", parse_param_type_hint(pi.get("typeHintID"))) # ok + pi_chunk.SetGuid("TypeHintID", parse_param_type_hint(pi.get("typeHintID"))) # ok FIXME: this one is maybe to modify pi_chunk.SetInt32( "WireDisplay", parse_wire_display(pi.get("wireDisplay", WIRE_DISPLAY["default"])), # !! TODO: not sure if not shown by default, for test get out @@ -353,7 +359,12 @@ def create_ghuser_component(source, target, version=None, prefix=None): po_chunk.SetString("Description", po.get("description")) # ok po_chunk.SetBoolean("Optional", po.get("optional", False)) # ok po_chunk.SetInt32("SourceCount", 0) # ok + + # po_chunk.SetGuid("TypeHintID", System.Guid.Parse("0b057941-4ed8-4cde-9c90-bacf7ba51cb7")) + po_chunk.SetGuid("InstanceGuid", output_instance_guid) # ok + # FIXME: here the param hint needs to be added/modified + po_chunk.SetBoolean("ReverseData", po.get("reverse", False)) # !! TODO: see above po_chunk.SetBoolean("SimplifyData", po.get("simplify", False)) # !! TODO: see above @@ -369,10 +380,11 @@ def create_ghuser_component(source, target, version=None, prefix=None): # FIXME: does not exist anymore, need a new chunk script = ghpython_root.CreateChunk("Script") # TODO: here the code from the component needs to go in base64 + code = base64.b64encode(code.encode("utf-8")) script.SetString("Text", "IiIiVGhpcyBpcyBhIG5ldyBzY3JpcHQgaW5zdGFuY2UiIiINCmltcG9ydCBTeXN0ZW0NCmltcG9ydCBSaGlubw0KaW1wb3J0IEdyYXNzaG9wcGVyDQoNCmltcG9ydCByaGlub3NjcmlwdHN5bnRheCBhcyBycw0KDQoNCmNsYXNzIE15Q29tcG9uZW50KEdyYXNzaG9wcGVyLktlcm5lbC5HSF9TY3JpcHRJbnN0YW5jZSk6DQogICAgZGVmIFJ1blNjcmlwdChzZWxmLCBjb21wYXNuZXdfeCwgeSk6DQogICAgICAgICIiIkdyYXNzaG9wcGVyIFNjcmlwdCBjb21wYXMgYWN0aW9uIiIiDQogICAgICAgIGEgPSAiSGVsbG8gUHl0aG9uIDMgaW4gR3Jhc3Nob3BwZXIhIg0KICAgICAgICBwcmludChhKQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuDQo=") script.SetString("Title", "S") - language_spec = ghpython_root.CreateChunk("LanguageSpec") + language_spec = script.CreateChunk("LanguageSpec") language_spec.SetString("Taxon", "mcneel.pythonnet.python") language_spec.SetString("Version", "3.9.10") # TODO: the version might be a parameter diff --git a/assets/cpythondoc.ghx b/assets/cpythondoc.ghx new file mode 100644 index 0000000..d1bb42f --- /dev/null +++ b/assets/cpythondoc.ghx @@ -0,0 +1,85 @@ + + + + + + + + 0 + 2 + 2 + + + + + + + 1 + 0 + 7 + + + + + + 270470a3-090e-4199-8a96-d6d60083f906 + Shaded + 1 + + 100;255;0;0 + + + 100;0;150;0 + + + + + + 638412573507187527 + + false + cpythondoc.ghx + + + + + 0 + + + + + + 201 + 292 + + 1.0837505 + + + + + 0 + + + + + + + 0 + + + + + 0 + + + + + + + + iVBORw0KGgoAAAANSUhEUgAAAOEAAACWCAIAAACn9nhUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGXSURBVHhe7dJBDQAhEACx9W8TIceHhJyDIWk1dOABH1Tdowt6HKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXOUeocpc5R6hylzlHqHKXudxSazlHomtmpFvoOOsRmzAAAAABJRU5ErkJggg== + + + + + \ No newline at end of file diff --git a/assets/deserializer.py b/assets/deserializer.py index e38f242..3a4c36a 100644 --- a/assets/deserializer.py +++ b/assets/deserializer.py @@ -51,4 +51,5 @@ def main(): gh_io = gh_io[:-4] clr.AddReference(gh_io) + main() \ No newline at end of file diff --git a/assets/print_hints.py b/assets/print_hints.py new file mode 100644 index 0000000..cec893f --- /dev/null +++ b/assets/print_hints.py @@ -0,0 +1,37 @@ +import argparse +import base64 +import json +import os +import re +import sys +import tempfile +import urllib.request, urllib.parse, urllib.error +import zipfile +from io import StringIO + +import clr +import System +import System.IO + + + + +def main(): + from GH_IO.Serialization import GH_LooseChunk + + # get all the types and corresponding guids + # rewrite this: 08908df5-fa14-4982-9ab2-1aa0927566aa in majuscule + # i ncomment the line below + print(GH_LooseChunk.GetKnownTypes()) + + + +if "__main__" == __name__: + + gh_io : str = r"C:\Users\andre\.nuget\packages\grasshopper\8.0.23164.14305-wip\lib\net48\GH_IO.dll" + gh_io = os.path.abspath(gh_io) + gh_io = gh_io[:-4] + clr.AddReference(gh_io) + + + main() \ No newline at end of file diff --git a/assets/testTypeHint.ghx b/assets/testTypeHint.ghx new file mode 100644 index 0000000..412c760 --- /dev/null +++ b/assets/testTypeHint.ghx @@ -0,0 +1,364 @@ + + + + + + + + 0 + 2 + 2 + + + + + + + 1 + 0 + 7 + + + + + + f8be2b46-c707-45df-94e6-6ce5d1c1ffdf + Shaded + 1 + + 100;255;0;0 + + + 100;0;150;0 + + + + + + 638413868051787861 + + false + testTypeHint.ghx + + + + + 0 + + + + + + -33 + -48 + + 3.9772015 + + + + + 0 + + + + + + + 0 + + + + + 1 + + + + + RhinoCodePluginGH, Version=8.2.23346.13001, Culture=neutral, PublicKeyToken=552281e97c755530 + 8.2.23346.13001 + + 066d0a87-236f-4eae-a0f4-9e42f5327962 + RhinoCodePluginGH + + + + + + + + 1 + + + + + c9b2d725-6f87-4b07-af90-bd9aefef68eb + 066d0a87-236f-4eae-a0f4-9e42f5327962 + Script + + + + + Scripting component + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQdSURBVEhL3ZRbTJtlHMbxwmTGxCjRMONkbkx0Y0P6tf3aDhgCkwyXbcTordELl6gcC4NxGitgvFiM0ZuFHiiHcj5LCwgUWuuQOdyBEVd1rjB3p3HgIcRo/o//9/s+IFzWmJj4JP+0Td739z553udtzH8q6d3mQ7oCh1OX7wjrCpw/pxS6/tIVun+UrJ6w3tphl0t79mhLo5eUb09n8P2UfGcTg1el4hZIxa1gMPSlXTCU98FQ1vOHVDXwpLYlOqUUOBqEe/FdKmxx6a0ehntgONOrwnmMlcMwnB2uUzZEK12By87O13VFrV7J2rm+4dpYMQDj2SGeQchVo5BrvB5tS3SSClrKpOL2gFTaydMV0Jf1BhgeMJQP/Cmcy9UMrx3nA8ajO0BvbXrcYG1+2mDt2j7VQ+pUDv8k1/hgYripbhImm99DK3kJPE5aPlFOSzmxGmq7+EJf4YZclkraoC/r4unmvHtgqOhXI6kcYbdjCliu5U+Gm20zMNXPeuhengV3TgDf5gJLR1exmPaYhlUlHEuFzb9JJe1qQwRYuUgBF1l/osEnVOfnpxk+qxxgbgi66Pvj6QgfA25mA1czQPOHqzS0Kq6fU3W80RAGi8sUrkXWm5FMqc7rA7A0BGFpDMHUGMqlcM7buJEFLBwBvrCAgoY5Da1KX9p5fdO10pJBGIXrjTiEc4abz/sZPquAzY2hdUtDyHF37tVYupZ5B1+mAXNmIGAATSbfB2Ie0PAc0Zne31UwZ10lsvbBWDu2bKr79PTrH3ky3SONr7m9Yt5Xh38vXXoji24e/QBXj6zicioQkoEZCZhMBrwHAPfuHRqeD6jo/0FxrMVhrPatZ703EsfNuMDzC+7mQZmVU8Dt41DyXuS8v1IjwWdGwK8DJg4Bo8+DBvZ9p6FV8Wuclqu9ataieucmXVjJS9sEi1k+yS15Gfg6B7ieCVxJVyMJMnzqBWD8IDDyHNCfAHTFt2hoVaYaX9HGJZq5ISbbdC47/3gTHuEKfqNUELj2IpS8LzF8Vq9GMpYEDCcCfXuBznhQW9xBDa3KXNLzkHxu4p5ygM0Pi20mm1ZO2RX4RiRcQVrIIJpPJQrKRH6JaCKZaPQA0WAiUfczRO27bpEr7k0Nu11y3dgjJtvMO+b6YFtqfSiJInyAgItIuIJ0Jf1Xbem/Iwofs2PpJTUSkTdHQgF9hKaSI+RLitBIYoT6EiLUEf+htiU60WK2XbxKpYKfm7byHt0PGkpco569DurYtUYtO//Zvynn/RbmD3MFud9+7ve4qOB+YPBZUPduu7LGvdNBTbFFyoZohdmMHfzkb2E6ZauCA/tEBUGtT62RM85BF2Nv0IW4h7Ut0QsL+gf5VZ6m4UQf9e25zZGscyRhsj/hpYuP5sMds/Va/6eKifkb1QMSMlhsgFAAAAAASUVORK5CYII= + + e98563e8-3930-435f-b288-b340ed9a8197 + true + Script + S + + false + false + true + + + + + + 54 + 51 + 147 + 64 + + + 121 + 83 + + + + + + 3 + 08908df5-fa14-4982-9ab2-1aa0927566aa + 08908df5-fa14-4982-9ab2-1aa0927566aa + 08908df5-fa14-4982-9ab2-1aa0927566aa + 3 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 08908df5-fa14-4982-9ab2-1aa0927566aa + 08908df5-fa14-4982-9ab2-1aa0927566aa + + + + + true + No conversion + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQTSURBVEhL1VVbKK1pGF7ISnI+s5zP5/NZzkQohUxcUS7cOCRXtiQ0MtqS5IILp8KNtitKKQmR7ERxISllz0wadrGszdAz3/Ot9a/sMXvbczXNW2/rb631P8/7Pu/zfp/qvwo/ExOTL+IT/yJ/EvljYWFh8XFiYgJbW1vY2NjA2toaVlZWsLi4iKmpKQwMDKChoQGlpaXIyMhAUFAQREG/ilfVeoTvhJmZWbl48c/JyUmkpKTITE5ORmJiIuLj4xETE4PIyEiEhoZKYD8/P4SHh8PKyurO1NT0nQHmm6G2tbX9Y35+HpWVlbI6Znp6uiQiSVxcHKKioiRocHAwAgICZPr7+0MQaAWGRg/1D2Fubv5zfX39U3d3NzIzM9HY2Ij+/n7Mzc1hc3MT09PTSEhIkF1EREQgJydH/ra6uora2lqI4h6EVB8McK/Cz83N7cvIyAjy8/ORm5uLuro6jI6O4urqCtfX1/KzrKwMsbGxKCwsxNHREc7Pz3F4eIjx8XF4enpyFuwiQQ/5IoT2GxUVFaipqZGyZGdnIy8vT+b+/j5ub29xf38vgZKSkrC9vY2FhQXQDMvLy1JSd3d32NvbPwuSjwZYY5Q6OTnpqqurpdbUnBKRhNnX1wedToeHhwecnJxIkra2NoSEhEj9fX19ZfVCAXh7e0O48E5g1uqhxWBF9b+lpqaCyUEqJMqQi4qKJMHT0xOen5+xtLT01ZB9fHyg0Wjg6uoqSUgourgW2FYqMfkuR0dHHcE5PFqRJLTmS5vu7e1JcEZPT89XNvXy8oKHhwdcXFzg4OAgScXzvSB4rxJMn8PCwqS3mSShFemWlzk8PGzsYH193Vi9Ig/1d3Z25gwkUXR0NLf7MwneC3tp6W2FiM8koluYfOYWcwaPj49y2CR9WT3lEUrAzs5O4ojv2cEvIlVW1It/ZttM6kufK111dXWht7cXp6enElyr1aKzs1MOlNqzY1ZPedgJJRVz1c/AELVqtfqObTNbWlowNjaG9vZ2DA0NYWZmRn4/ODiIm5sbuRPHx8eymJKSErS2thqr58yERNwFo4tk0LvUjtZrbm6WG8rDbnZ21mhHynJ2dobLy0tcXFzg4OAAPLNYPcEDAwO5I88C7tUeMJJ5lnBoWVlZ0udNTU3GQdKK1JuLuLu7i52dHXR0dCjLJeXhdtvY2FD715vMEF18EH98ICid8TKpNYdJQA6UVSuyCFBpb+GcRwHzzbOIoWEX1JvVcmmUJCglVIBZsXAfrK2t5e+8G8Qcv3+aGuKdaFlLF4njw5gKKOVQqhZ3ACwtLeV5Jbom+Jv3AUMtpPqdVk1LS5PzIAD1LS4ulpWWl5eDB2NVVRV4fhUUFPBo+MR39RBvB+/Xv9+5b+WP38n/o1Cp/gJAdKz5nm6ZIAAAAABJRU5ErkJggg== + + 58f70747-b4db-4eea-9609-7c7f35c7d972 + + nohintIN + true + 0 + true + 0 + 6a184b65-baa3-42d1-a548-3915b401de53 + + + + + + 56 + 53 + 50 + 20 + + + 82.5 + 63 + + + + + + + + true + Contains a collection of floating point numbers + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQiSURBVEhL1VVbKLVpFN7ITnI+s5HDdj6fz5QoUeSQiUgOF27dqb+GXIyo/0a4kUMhKfqLnENEOYWEFLlkxAwKGzN65n1ee+9+Y/7/N1fTrFrtr/1977PWetaz1qv4r0xtYGDwKH7xL/wn4R8zExOT7a6uLqyurmJ5eRnz8/OYmprC6Ogo+vr60NLSgpqaGuTk5CApKQk+Pj4QCZ2Lo8pXhO+YkZFRnjj4R29vL+Li4qTHxsYiOjoakZGRCAsLQ3BwMPz9/SWwp6cnAgMDYW5ufmdoaPhJC/NNU1paWv42NDSEwsJCmR09MTFRBmKQiIgIhISESFBfX194e3tL9/LygghwLzBUr1D/YMbGxr9UVlb+2djYiJSUFKSlpUnnM4OwkqioKFlFUFAQ/Pz8kJ6ejoaGBlmJSO5JUPVFC/fO1E5OTo9tbW3Izs5Ge3s7BgcHMTIyguHhYfkfq2CA8PBw5Obmor+/H6enp1hbW4ObmxtcXV3ZC1YR9Qr5lQnulwsKClBaWoqBgQFsbm4iIyMDWVlZuLy8xP7+PpKTk2WAmJgYVFdXo6enB+fn59jb25Pgzs7OsLa2fhFBtrWwesuxs7PTFBcXQ1AkM1pcXNRTdHBwAI1Gg9bW1jcUVVVV4erqCkdHRzKAYADu7u4QKrwTmKWv0KKxIvtf4+PjQW9ubsb29rYMoGsyAzw9PWFjY+NNkxng+voaJycnUKlUcHR0lEE8PDxI1e8C20whOv+zra2thuDMjLzu7u5iZmZGL1PS8/z8jIuLizcyJU03NzcygIuLCxwcHGBjYyNVJZ4fRIDPChHpJiAgQB6is6k7OzuYnp6WdNB1AR4fH+U3/J4SJZ26AOTf3t6ePZCBQkNDOd03DPBZyOueZfNgd3e3bPDExIRUC51NJDgr4DeUp1qtRkVFhaTo+PhY0iOYgJWVlfxGqIoVtApXmJEv6phl19fXY2VlBWNjY/qqWNHDwwOWlpZk5gTn92VlZVJhh4eHMnvSw0o4L6Kvrz3QWqlSqbzjYeqd4OPj4zIgfWtrC7e3t3KgyC/BqZaSkhKcnZ3JBHTZs2eCIs6CXkXSqF3x4oXZNTU1yeVGcMqRHDMIn7n8FhYWpGrYA75bX1+X4DwrZuRFwL2bA1osdwklxkrq6urQ0dEhe9LZ2SnlyWmdnZ3F5OQkamtr5XalpOfm5lBeXo78/HxYWFiQ+/eTTBNVfBE8PpEGDs7XzowpRXLMhpJzHS0CVG5aoZxnAfPNXURTsQpWwGw5NDonKOWnA2ZDhfq4puV73g2ij9/fplr7JLR8T77F+tC7DpQ612VtZmYGU1NTuVFF1QT/4X1AUwqqLrgKEhISkJqaKgEyMzPl4mOmeXl54GIsKioC9xeXojjzsRtNa7xf/37n/sg/fif/j0yh+AuVqtAmN2lbmQAAAABJRU5ErkJggg== + + f50101bf-590f-4d1b-9ad0-aa939bf64d7c + + floatIN + true + 0 + true + 0 + 9d51e32e-c038-4352-9554-f4137ca91b9a + + + + + + 56 + 73 + 50 + 20 + + + 82.5 + 83 + + + + + + + + true + rhinoscriptsyntax geometry + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQTSURBVEhL1VVbKK1pGF7ISnI+s5zP5/NZzkQohUxcUS7cOCRXtiQ0MtqS5IILp8KNtitKKQmR7ERxISllz0wadrGszdAz3/Ot9a/sMXvbczXNW2/rb631P8/7Pu/zfp/qvwo/ExOTL+IT/yJ/EvljYWFh8XFiYgJbW1vY2NjA2toaVlZWsLi4iKmpKQwMDKChoQGlpaXIyMhAUFAQREG/ilfVeoTvhJmZWbl48c/JyUmkpKTITE5ORmJiIuLj4xETE4PIyEiEhoZKYD8/P4SHh8PKyurO1NT0nQHmm6G2tbX9Y35+HpWVlbI6Znp6uiQiSVxcHKKioiRocHAwAgICZPr7+0MQaAWGRg/1D2Fubv5zfX39U3d3NzIzM9HY2Ij+/n7Mzc1hc3MT09PTSEhIkF1EREQgJydH/ra6uora2lqI4h6EVB8McK/Cz83N7cvIyAjy8/ORm5uLuro6jI6O4urqCtfX1/KzrKwMsbGxKCwsxNHREc7Pz3F4eIjx8XF4enpyFuwiQQ/5IoT2GxUVFaipqZGyZGdnIy8vT+b+/j5ub29xf38vgZKSkrC9vY2FhQXQDMvLy1JSd3d32NvbPwuSjwZYY5Q6OTnpqqurpdbUnBKRhNnX1wedToeHhwecnJxIkra2NoSEhEj9fX19ZfVCAXh7e0O48E5g1uqhxWBF9b+lpqaCyUEqJMqQi4qKJMHT0xOen5+xtLT01ZB9fHyg0Wjg6uoqSUgourgW2FYqMfkuR0dHHcE5PFqRJLTmS5vu7e1JcEZPT89XNvXy8oKHhwdcXFzg4OAgScXzvSB4rxJMn8PCwqS3mSShFemWlzk8PGzsYH193Vi9Ig/1d3Z25gwkUXR0NLf7MwneC3tp6W2FiM8koluYfOYWcwaPj49y2CR9WT3lEUrAzs5O4ojv2cEvIlVW1It/ZttM6kufK111dXWht7cXp6enElyr1aKzs1MOlNqzY1ZPedgJJRVz1c/AELVqtfqObTNbWlowNjaG9vZ2DA0NYWZmRn4/ODiIm5sbuRPHx8eymJKSErS2thqr58yERNwFo4tk0LvUjtZrbm6WG8rDbnZ21mhHynJ2dobLy0tcXFzg4OAAPLNYPcEDAwO5I88C7tUeMJJ5lnBoWVlZ0udNTU3GQdKK1JuLuLu7i52dHXR0dCjLJeXhdtvY2FD715vMEF18EH98ICid8TKpNYdJQA6UVSuyCFBpb+GcRwHzzbOIoWEX1JvVcmmUJCglVIBZsXAfrK2t5e+8G8Qcv3+aGuKdaFlLF4njw5gKKOVQqhZ3ACwtLeV5Jbom+Jv3AUMtpPqdVk1LS5PzIAD1LS4ulpWWl5eDB2NVVRV4fhUUFPBo+MR39RBvB+/Xv9+5b+WP38n/o1Cp/gJAdKz5nm6ZIAAAAABJRU5ErkJggg== + + f9878e13-3729-4963-adf4-425c01da1947 + + ghdocIN + true + 0 + true + 0 + 1c282eeb-dd16-439f-94e4-7d92b542fe8b + + + + + + 56 + 93 + 50 + 20 + + + 82.5 + 103 + + + + + + + + The execution information, as output and error streams + 7a28daf9-b80f-43d1-b104-277848a24ec3 + out + out + false + 0 + + + + + + 136 + 53 + 63 + 20 + + + 167.5 + 63 + + + + + + + + false + No conversion + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQTSURBVEhL1VVbKK1pGF7ISnI+s5zP5/NZzkQohUxcUS7cOCRXtiQ0MtqS5IILp8KNtitKKQmR7ERxISllz0wadrGszdAz3/Ot9a/sMXvbczXNW2/rb631P8/7Pu/zfp/qvwo/ExOTL+IT/yJ/EvljYWFh8XFiYgJbW1vY2NjA2toaVlZWsLi4iKmpKQwMDKChoQGlpaXIyMhAUFAQREG/ilfVeoTvhJmZWbl48c/JyUmkpKTITE5ORmJiIuLj4xETE4PIyEiEhoZKYD8/P4SHh8PKyurO1NT0nQHmm6G2tbX9Y35+HpWVlbI6Znp6uiQiSVxcHKKioiRocHAwAgICZPr7+0MQaAWGRg/1D2Fubv5zfX39U3d3NzIzM9HY2Ij+/n7Mzc1hc3MT09PTSEhIkF1EREQgJydH/ra6uora2lqI4h6EVB8McK/Cz83N7cvIyAjy8/ORm5uLuro6jI6O4urqCtfX1/KzrKwMsbGxKCwsxNHREc7Pz3F4eIjx8XF4enpyFuwiQQ/5IoT2GxUVFaipqZGyZGdnIy8vT+b+/j5ub29xf38vgZKSkrC9vY2FhQXQDMvLy1JSd3d32NvbPwuSjwZYY5Q6OTnpqqurpdbUnBKRhNnX1wedToeHhwecnJxIkra2NoSEhEj9fX19ZfVCAXh7e0O48E5g1uqhxWBF9b+lpqaCyUEqJMqQi4qKJMHT0xOen5+xtLT01ZB9fHyg0Wjg6uoqSUgourgW2FYqMfkuR0dHHcE5PFqRJLTmS5vu7e1JcEZPT89XNvXy8oKHhwdcXFzg4OAgScXzvSB4rxJMn8PCwqS3mSShFemWlzk8PGzsYH193Vi9Ig/1d3Z25gwkUXR0NLf7MwneC3tp6W2FiM8koluYfOYWcwaPj49y2CR9WT3lEUrAzs5O4ojv2cEvIlVW1It/ZttM6kufK111dXWht7cXp6enElyr1aKzs1MOlNqzY1ZPedgJJRVz1c/AELVqtfqObTNbWlowNjaG9vZ2DA0NYWZmRn4/ODiIm5sbuRPHx8eymJKSErS2thqr58yERNwFo4tk0LvUjtZrbm6WG8rDbnZ21mhHynJ2dobLy0tcXFzg4OAAPLNYPcEDAwO5I88C7tUeMJJ5lnBoWVlZ0udNTU3GQdKK1JuLuLu7i52dHXR0dCjLJeXhdtvY2FD715vMEF18EH98ICid8TKpNYdJQA6UVSuyCFBpb+GcRwHzzbOIoWEX1JvVcmmUJCglVIBZsXAfrK2t5e+8G8Qcv3+aGuKdaFlLF4njw5gKKOVQqhZ3ACwtLeV5Jbom+Jv3AUMtpPqdVk1LS5PzIAD1LS4ulpWWl5eDB2NVVRV4fhUUFPBo+MR39RBvB+/Xv9+5b+WP38n/o1Cp/gJAdKz5nm6ZIAAAAABJRU5ErkJggg== + + 89210f0e-52b1-422f-9902-7951d4400654 + + nohintOUT + false + 0 + true + 0 + 6a184b65-baa3-42d1-a548-3915b401de53 + + + + + + 136 + 73 + 63 + 20 + + + 167.5 + 83 + + + + + + + + false + Contains a collection of floating point numbers + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQiSURBVEhL1VVbKLVpFN7ITnI+s5HDdj6fz5QoUeSQiUgOF27dqb+GXIyo/0a4kUMhKfqLnENEOYWEFLlkxAwKGzN65n1ee+9+Y/7/N1fTrFrtr/1977PWetaz1qv4r0xtYGDwKH7xL/wn4R8zExOT7a6uLqyurmJ5eRnz8/OYmprC6Ogo+vr60NLSgpqaGuTk5CApKQk+Pj4QCZ2Lo8pXhO+YkZFRnjj4R29vL+Li4qTHxsYiOjoakZGRCAsLQ3BwMPz9/SWwp6cnAgMDYW5ufmdoaPhJC/NNU1paWv42NDSEwsJCmR09MTFRBmKQiIgIhISESFBfX194e3tL9/LygghwLzBUr1D/YMbGxr9UVlb+2djYiJSUFKSlpUnnM4OwkqioKFlFUFAQ/Pz8kJ6ejoaGBlmJSO5JUPVFC/fO1E5OTo9tbW3Izs5Ge3s7BgcHMTIyguHhYfkfq2CA8PBw5Obmor+/H6enp1hbW4ObmxtcXV3ZC1YR9Qr5lQnulwsKClBaWoqBgQFsbm4iIyMDWVlZuLy8xP7+PpKTk2WAmJgYVFdXo6enB+fn59jb25Pgzs7OsLa2fhFBtrWwesuxs7PTFBcXQ1AkM1pcXNRTdHBwAI1Gg9bW1jcUVVVV4erqCkdHRzKAYADu7u4QKrwTmKWv0KKxIvtf4+PjQW9ubsb29rYMoGsyAzw9PWFjY+NNkxng+voaJycnUKlUcHR0lEE8PDxI1e8C20whOv+zra2thuDMjLzu7u5iZmZGL1PS8/z8jIuLizcyJU03NzcygIuLCxwcHGBjYyNVJZ4fRIDPChHpJiAgQB6is6k7OzuYnp6WdNB1AR4fH+U3/J4SJZ26AOTf3t6ePZCBQkNDOd03DPBZyOueZfNgd3e3bPDExIRUC51NJDgr4DeUp1qtRkVFhaTo+PhY0iOYgJWVlfxGqIoVtApXmJEv6phl19fXY2VlBWNjY/qqWNHDwwOWlpZk5gTn92VlZVJhh4eHMnvSw0o4L6Kvrz3QWqlSqbzjYeqd4OPj4zIgfWtrC7e3t3KgyC/BqZaSkhKcnZ3JBHTZs2eCIs6CXkXSqF3x4oXZNTU1yeVGcMqRHDMIn7n8FhYWpGrYA75bX1+X4DwrZuRFwL2bA1osdwklxkrq6urQ0dEhe9LZ2SnlyWmdnZ3F5OQkamtr5XalpOfm5lBeXo78/HxYWFiQ+/eTTBNVfBE8PpEGDs7XzowpRXLMhpJzHS0CVG5aoZxnAfPNXURTsQpWwGw5NDonKOWnA2ZDhfq4puV73g2ij9/fplr7JLR8T77F+tC7DpQ612VtZmYGU1NTuVFF1QT/4X1AUwqqLrgKEhISkJqaKgEyMzPl4mOmeXl54GIsKioC9xeXojjzsRtNa7xf/37n/sg/fif/j0yh+AuVqtAmN2lbmQAAAABJRU5ErkJggg== + + 6fb8450c-3afe-4a9e-89e5-66d8f96bc6fe + + floatOUT + false + 0 + true + 0 + 9d51e32e-c038-4352-9554-f4137ca91b9a + + + + + + 136 + 93 + 63 + 20 + + + 167.5 + 103 + + + + + + + + + + IiIiR3Jhc3Nob3BwZXIgU2NyaXB0IiIiDQphID0gIkhlbGxvIFB5dGhvbiAzIGluIEdyYXNzaG9wcGVyISINCnByaW50KGEpDQo= + S + + + + + mcneel.pythonnet.python + 3.9.10 + + + + + + + + + + + + + + + + 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zz//nCWbNKPCGsr2y93dHeHIzy6W1ZbVE0HZCRCf1AtQlIDurPVcgsd4wL5w+PDhaq1XVXQHRGcm4B8WItyePXuYCWw6qWvfvn0s2dT48ccfs3CzEwgICOChcNy4cYRVriW+fvvttyhOgku4ccpBX7YunMFRVUXnsJOJjo728fGhhP79+8+aNUvee+p5RwFHGbaXXnqpX79+LOv0O73P2g3IyraM4SdkTpw4EdV49GHI2Y8yMOo1FFZwoiM5kYAn3GXLlqEy17IrwAzc3bx5s4ph7EQJVMQt8qOXqqI7MHNY5dlGswGlFqIa8ZtK1fMT0ZSAja9sUVTbyEDgZ99JI2kGedhxMpdo6urVq9mt8gyEx+xQSZjq6BQu56rRo0czLkxyViR576mNHneU3VhrayvhcP78+TxS0O8dHSVEsY7z9MMmTz3q8i3n1fMEHzkyNqjMkfN4gOUk+KhKUAWqI9kYfvKQUFV0BwpR5ZNW5aMdaY6kqUg1g2zUSDtVI1VONUlUQp1XGThD+0m0VfA0KIr+sbCwYBqz8ZD3nszlKNCzRFO6mBWcmETvM0jAGLN8E0Q5z0ZNudUJ7RcqHvnYO3SstCtpeOZ2ojVxl/6R957AvI4Cm1GekFgccZTeZx1XMH7qtySiC7HWdFYwwhzGUR405W+h0BuO8gzOTjEjIwMvTYMgdApxlGcmnhGbm5tN/diHMbujwFrPs62vry8h85mXv74DXcR+lIWe50g29KZO7MP0hqONjY0s60QFHo2thS5gZWXl6ura0NBws2//CyWK3nCULT8bf+BpnccjoXNYbUpLS1taWm4Z/5kdUyf2YXrDUcWNGzfodKErSPjsSO85KgjPhjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KuiOOCrojjgq6I44KujOvzgqCHpiclQQ9OWFF/4HE59Us1VShOYAAAAASUVORK5CYII= + + + + + \ No newline at end of file