From a7e500b2c7980cce7c86595f943a9186304def7f Mon Sep 17 00:00:00 2001 From: Steven Shan Date: Thu, 22 Mar 2018 14:48:33 -0400 Subject: [PATCH 001/151] updated PlottingGraphWithMatplotlibAndUnrealEnginePython.md --- tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython.md | 2 +- .../plotter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython.md b/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython.md index 8ff7795c7..4d9c5246a 100644 --- a/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython.md +++ b/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython.md @@ -194,7 +194,7 @@ class PlotComponent: dpi = 72.0 self.texture = ue.create_transient_texture(width, height, EPixelFormat.PF_R8G8B8A8) - self.uobject.get_owner().StaticMesh.OverrideMaterials[0].set_material_texture_parameter('Graph', self.texture) + self.uobject.get_owner().StaticMeshComponent.OverrideMaterials[0].set_material_texture_parameter('Graph', self.texture) self.fig = plt.figure(1) self.fig.set_dpi(dpi) diff --git a/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython_Assets/plotter.py b/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython_Assets/plotter.py index e8e8418a4..6466adee2 100644 --- a/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython_Assets/plotter.py +++ b/tutorials/PlottingGraphsWithMatplotlibAndUnrealEnginePython_Assets/plotter.py @@ -14,7 +14,7 @@ def begin_play(self): dpi = 72.0 self.texture = ue.create_transient_texture(width, height, EPixelFormat.PF_R8G8B8A8) - self.uobject.get_owner().StaticMesh.OverrideMaterials[0].set_material_texture_parameter('Graph', self.texture) + self.uobject.get_owner().StaticMeshComponent.OverrideMaterials[0].set_material_texture_parameter('Graph', self.texture) self.fig = plt.figure(1) self.fig.set_dpi(dpi) From 261b0ad105ffa6e6a08a5d113657a37446200694 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 12 Aug 2018 12:59:41 +0200 Subject: [PATCH 002/151] fixed #502 --- .../Private/UObject/UEPyObject.cpp | 9 +++-- .../Private/UObject/UEPySequencer.cpp | 34 ++++++++++++++++--- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index 472ac2dce..eecb2180c 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1840,6 +1840,8 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) has_package = true; } + bool bIsMap = u_object->IsA(); + if (!package || name) { if (!name) @@ -1863,7 +1865,8 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) } if (!package) return PyErr_Format(PyExc_Exception, "unable to create package"); - package->FileName = *FPackageName::LongPackageNameToFilename(UTF8_TO_TCHAR(name), FPackageName::GetAssetPackageExtension()); + + package->FileName = *FPackageName::LongPackageNameToFilename(UTF8_TO_TCHAR(name), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); if (has_package) { FString split_path; @@ -1892,14 +1895,14 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) if (package->FileName.IsNone()) { - package->FileName = *FPackageName::LongPackageNameToFilename(*package->GetPathName(), FPackageName::GetAssetPackageExtension()); + package->FileName = *FPackageName::LongPackageNameToFilename(*package->GetPathName(), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); UE_LOG(LogPython, Warning, TEXT("no file mapped to UPackage %s, setting its FileName to %s"), *package->GetPathName(), *package->FileName.ToString()); } // NOTE: FileName may not be a fully qualified filepath if (FPackageName::IsValidLongPackageName(package->FileName.ToString())) { - package->FileName = *FPackageName::LongPackageNameToFilename(package->GetPathName(), FPackageName::GetAssetPackageExtension()); + package->FileName = *FPackageName::LongPackageNameToFilename(package->GetPathName(), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); } if (UPackage::SavePackage(package, u_object, RF_Public | RF_Standalone, *package->FileName.ToString())) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 3a52be221..4e5db4f2a 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -791,12 +791,36 @@ PyObject *py_ue_sequencer_track_add_section(ue_PyUObject *self, PyObject * args) ue_py_check(self); - if (!self->ue_object->IsA()) + PyObject *py_section = nullptr; + if (!PyArg_ParseTuple(args, "|O:sequencer_track_add_section", &py_section)) + return nullptr; + + + UMovieSceneTrack *track = ue_py_check_type(self); + if (!track) return PyErr_Format(PyExc_Exception, "uobject is not a UMovieSceneTrack"); - UMovieSceneTrack *track = (UMovieSceneTrack *)self->ue_object; + UMovieSceneSection *new_section = nullptr; + + if (!py_section) + { + new_section = track->CreateNewSection(); + } + else + { + new_section = ue_py_check_type(py_section); + if (!new_section) + { + UClass *u_class = ue_py_check_type(py_section); + if (u_class && u_class->IsChildOf()) + { + new_section = NewObject(track, u_class, NAME_None); + } + } + } - UMovieSceneSection *new_section = track->CreateNewSection(); + if (!new_section) + return PyErr_Format(PyExc_Exception, "argument is not a UMovieSceneSection"); track->AddSection(*new_section); @@ -1190,7 +1214,7 @@ PyObject *py_ue_sequencer_section_add_key(ue_PyUObject *self, PyObject * args) #endif Py_RETURN_NONE; - } +} } return PyErr_Format(PyExc_Exception, "unsupported section type: %s", TCHAR_TO_UTF8(*section->GetClass()->GetName())); @@ -1583,7 +1607,7 @@ PyObject *py_ue_sequencer_import_fbx_transform(ue_PyUObject *self, PyObject * ar FMatineeImportTools::SetOrAddKey(*ChannelCurve, CurveFloat->Points[KeyIndex].InVal, CurveFloat->Points[KeyIndex].OutVal, ArriveTangent, LeaveTangent, CurveFloat->Points[KeyIndex].InterpMode); - } + } ChannelCurve->RemoveRedundantKeys(KINDA_SMALL_NUMBER); ChannelCurve->AutoSetTangents(); From 25ab29b81f0783ca4631db797a2c237f561e4566 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 12 Aug 2018 15:00:56 +0200 Subject: [PATCH 003/151] more transform api functions --- .../Private/Wrappers/UEPyFTransform.cpp | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp index 568ac06c8..b9fec54b5 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp @@ -26,6 +26,76 @@ static PyObject *py_ue_ftransform_get_relative_transform(ue_PyFTransform *self, return py_ue_new_ftransform(self->transform.GetRelativeTransform(py_transform->transform)); } +static PyObject *py_ue_ftransform_transform_vector(ue_PyFTransform *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O", &py_obj)) + { + return nullptr; + } + + ue_PyFVector *py_vec = py_ue_is_fvector(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_Exception, "argument is not a FVector"); + return py_ue_new_fvector(self->transform.TransformVector(py_vec->vec)); +} + +static PyObject *py_ue_ftransform_transform_vector_no_scale(ue_PyFTransform *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O", &py_obj)) + { + return nullptr; + } + + ue_PyFVector *py_vec = py_ue_is_fvector(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_Exception, "argument is not a FVector"); + return py_ue_new_fvector(self->transform.TransformVectorNoScale(py_vec->vec)); +} + +static PyObject *py_ue_ftransform_transform_position(ue_PyFTransform *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O", &py_obj)) + { + return nullptr; + } + + ue_PyFVector *py_vec = py_ue_is_fvector(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_Exception, "argument is not a FVector"); + return py_ue_new_fvector(self->transform.TransformPosition(py_vec->vec)); +} + +static PyObject *py_ue_ftransform_transform_position_no_scale(ue_PyFTransform *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O", &py_obj)) + { + return nullptr; + } + + ue_PyFVector *py_vec = py_ue_is_fvector(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_Exception, "argument is not a FVector"); + return py_ue_new_fvector(self->transform.TransformPositionNoScale(py_vec->vec)); +} + +static PyObject *py_ue_ftransform_transform_rotation(ue_PyFTransform *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O", &py_obj)) + { + return nullptr; + } + + ue_PyFQuat *py_quat = py_ue_is_fquat(py_obj); + if (!py_quat) + return PyErr_Format(PyExc_Exception, "argument is not a FQuat"); + return py_ue_new_fquat(self->transform.TransformRotation(py_quat->quat)); +} + static PyObject *py_ue_ftransform_get_matrix(ue_PyFTransform *self, PyObject * args) { FTransform transform = self->transform; @@ -44,6 +114,11 @@ static PyMethodDef ue_PyFTransform_methods[] = { { "get_relative_transform", (PyCFunction)py_ue_ftransform_get_relative_transform, METH_VARARGS, "" }, { "normalize_rotation", (PyCFunction)py_ue_ftransform_normalize_rotation, METH_VARARGS, "" }, { "get_matrix", (PyCFunction)py_ue_ftransform_get_matrix, METH_VARARGS, "" }, + { "transform_vector", (PyCFunction)py_ue_ftransform_transform_vector, METH_VARARGS, "" }, + { "transform_vector_no_scale", (PyCFunction)py_ue_ftransform_transform_vector_no_scale, METH_VARARGS, "" }, + { "transform_position", (PyCFunction)py_ue_ftransform_transform_position, METH_VARARGS, "" }, + { "transform_position_no_scale", (PyCFunction)py_ue_ftransform_transform_position_no_scale, METH_VARARGS, "" }, + { "transform_rotation", (PyCFunction)py_ue_ftransform_transform_rotation, METH_VARARGS, "" }, { NULL } /* Sentinel */ }; From 773cb1858435640e8ddfad912ccfcdd22be90e22 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 12 Aug 2018 17:28:24 +0200 Subject: [PATCH 004/151] fixed runtime builds --- Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp | 2 ++ Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp | 6 +----- Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp | 2 ++ 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp index f68847766..90b47da3a 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp @@ -57,12 +57,14 @@ PyObject *py_ue_set_material(ue_PyUObject *self, PyObject * args) return PyErr_Format(PyExc_Exception, "argument is not a UMaterialInterface"); #if ENGINE_MINOR_VERSION >= 20 +#if WITH_EDITOR UStaticMesh *mesh = ue_py_check_type(self); if (mesh) { mesh->SetMaterial(slot, material); Py_RETURN_NONE; } +#endif #endif UPrimitiveComponent *primitive = ue_py_check_type(self); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index eecb2180c..304015335 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1857,12 +1857,8 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) u_object->SetFlags(RF_Public | RF_Standalone); } } - package = (UPackage *)StaticFindObject(nullptr, ANY_PACKAGE, UTF8_TO_TCHAR(name), true); // create a new package if it does not exist - if (!package) - { - package = CreatePackage(nullptr, UTF8_TO_TCHAR(name)); - } + package = CreatePackage(nullptr, UTF8_TO_TCHAR(name)); if (!package) return PyErr_Format(PyExc_Exception, "unable to create package"); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 4e5db4f2a..32b11dd48 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -67,6 +67,7 @@ static bool magic_get_frame_number(UMovieScene *MovieScene, PyObject *py_obj, FF } +#if WITH_EDITOR static void ImportTransformChannel(const FInterpCurveFloat& Source, FMovieSceneFloatChannel* Dest, FFrameRate DestFrameRate, bool bNegateTangents) { TMovieSceneChannelData ChannelData = Dest->GetData(); @@ -145,6 +146,7 @@ static bool ImportFBXTransform(FString NodeName, UMovieScene3DTransformSection* return true; } +#endif #endif From e95b6151c2c7d256d58358283d1d0ddc4e53f950 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 12 Aug 2018 18:18:27 +0200 Subject: [PATCH 005/151] mark saved objects as RF_Standalone --- Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index 304015335..b517cfee4 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1854,7 +1854,6 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) if (u_object->HasAnyFlags(RF_Transient)) { u_object->ClearFlags(RF_Transient); - u_object->SetFlags(RF_Public | RF_Standalone); } } // create a new package if it does not exist @@ -1886,6 +1885,9 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) } } + // ensure the right flags are applied + u_object->SetFlags(RF_Public | RF_Standalone); + package->FullyLoad(); package->MarkPackageDirty(); @@ -1901,7 +1903,7 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) package->FileName = *FPackageName::LongPackageNameToFilename(package->GetPathName(), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); } - if (UPackage::SavePackage(package, u_object, RF_Public | RF_Standalone, *package->FileName.ToString())) + if (UPackage::SavePackage(package, u_object, RF_NoFlags, *package->FileName.ToString())) { FAssetRegistryModule::AssetCreated(u_object); Py_RETURN_UOBJECT(u_object); From e6a7078feb2459234bbf05a01b33456f67118874 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 12 Aug 2018 19:16:39 +0200 Subject: [PATCH 006/151] automatically set import bounds --- Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp index 0ac97e646..7cd84c120 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp @@ -1064,6 +1064,9 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO mesh->Skeleton->RecreateBoneTree(mesh); mesh->Skeleton->SetPreviewMesh(mesh); + // calculate bounds from points + mesh->SetImportedBounds(FBoxSphereBounds(points.GetData(), points.Num())); + mesh->Skeleton->PostEditChange(); mesh->Skeleton->MarkPackageDirty(); From 3b8104d715d919bf2188ec635ceddd174866a2fc Mon Sep 17 00:00:00 2001 From: yinhailin Date: Mon, 13 Aug 2018 09:58:38 +0800 Subject: [PATCH 007/151] pyactor add function "set_actor_hidden_in_game" --- .../UnrealEnginePython/Private/UEPyModule.cpp | 1 + .../Private/UObject/UEPyActor.cpp | 29 +++++++++++++++++++ .../Private/UObject/UEPyActor.h | 1 + .../UnrealEnginePython.Build.cs | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index ffbd2d9f7..f15b41b99 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -599,6 +599,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "save_config", (PyCFunction)py_ue_save_config, METH_VARARGS, "" }, { "get_actor_label", (PyCFunction)py_ue_get_actor_label, METH_VARARGS, "" }, { "set_actor_label", (PyCFunction)py_ue_set_actor_label, METH_VARARGS, "" }, + { "set_actor_hidden_in_game", (PyCFunction)py_ue_set_actor_hidden_in_game, METH_VARARGS, "" }, { "get_editor_world_counterpart_actor", (PyCFunction)py_ue_get_editor_world_counterpart_actor, METH_VARARGS, "" }, { "component_type_registry_invalidate_class", (PyCFunction)py_ue_component_type_registry_invalidate_class, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp index fca6298a5..92f0a96d5 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp @@ -261,6 +261,35 @@ PyObject *py_ue_set_actor_label(ue_PyUObject *self, PyObject * args) Py_RETURN_NONE; } +PyObject *py_ue_set_actor_hidden_in_game(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + AActor *actor = ue_get_actor(self); + if (!actor) + return PyErr_Format(PyExc_Exception, "cannot retrieve Actor from uobject"); + + PyObject *py_bool = nullptr; + if (!PyArg_ParseTuple(args, "O:set_actor_hidden_in_game", &py_bool)) + { + return nullptr; + } + + if (PyObject_IsTrue(py_bool)) + { + actor->SetActorHiddenInGame(true); + } + else + { + actor->SetActorHiddenInGame(false); + } + + + + Py_RETURN_NONE; +} + PyObject *py_ue_find_actor_by_label(ue_PyUObject * self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyActor.h b/Source/UnrealEnginePython/Private/UObject/UEPyActor.h index dbc72a9fd..9ab27f13c 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyActor.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyActor.h @@ -27,6 +27,7 @@ PyObject *py_ue_actor_set_level_sequence(ue_PyUObject *, PyObject *); #if WITH_EDITOR PyObject *py_ue_get_actor_label(ue_PyUObject *, PyObject *); PyObject *py_ue_set_actor_label(ue_PyUObject *, PyObject *); +PyObject *py_ue_set_actor_hidden_in_game(ue_PyUObject *, PyObject *); PyObject *py_ue_find_actor_by_label(ue_PyUObject *, PyObject *); PyObject *py_ue_get_editor_world_counterpart_actor(ue_PyUObject *, PyObject *); PyObject *py_ue_component_type_registry_invalidate_class(ue_PyUObject *, PyObject *); diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 6e7727d0b..d4f679b2e 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -21,7 +21,7 @@ public class UnrealEnginePython : ModuleRules "C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Program Files/Python35", - "C:/Python27", + "C:/Python36", "C:/IntelPython35" }; From 55c5c03e0c06bf8e513e9fd0ce722e17556c356d Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 13 Aug 2018 14:09:25 +0200 Subject: [PATCH 008/151] fixed 4.15 --- Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp index b9fec54b5..84bb2ed65 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp @@ -82,6 +82,7 @@ static PyObject *py_ue_ftransform_transform_position_no_scale(ue_PyFTransform *s return py_ue_new_fvector(self->transform.TransformPositionNoScale(py_vec->vec)); } +#if ENGINE_MINOR_VERSION > 15 static PyObject *py_ue_ftransform_transform_rotation(ue_PyFTransform *self, PyObject * args) { PyObject *py_obj; @@ -95,6 +96,7 @@ static PyObject *py_ue_ftransform_transform_rotation(ue_PyFTransform *self, PyOb return PyErr_Format(PyExc_Exception, "argument is not a FQuat"); return py_ue_new_fquat(self->transform.TransformRotation(py_quat->quat)); } +#endif static PyObject *py_ue_ftransform_get_matrix(ue_PyFTransform *self, PyObject * args) { @@ -118,7 +120,9 @@ static PyMethodDef ue_PyFTransform_methods[] = { { "transform_vector_no_scale", (PyCFunction)py_ue_ftransform_transform_vector_no_scale, METH_VARARGS, "" }, { "transform_position", (PyCFunction)py_ue_ftransform_transform_position, METH_VARARGS, "" }, { "transform_position_no_scale", (PyCFunction)py_ue_ftransform_transform_position_no_scale, METH_VARARGS, "" }, +#if ENGINE_MINOR_VERSION > 15 { "transform_rotation", (PyCFunction)py_ue_ftransform_transform_rotation, METH_VARARGS, "" }, +#endif { NULL } /* Sentinel */ }; From 2adb8d7218b0cc415ca23b9c2a9520b3032c7fff Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 13 Aug 2018 14:20:31 +0200 Subject: [PATCH 009/151] fixed 4.16 build --- Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp index 84bb2ed65..72bf9aa6f 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp @@ -82,7 +82,7 @@ static PyObject *py_ue_ftransform_transform_position_no_scale(ue_PyFTransform *s return py_ue_new_fvector(self->transform.TransformPositionNoScale(py_vec->vec)); } -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 static PyObject *py_ue_ftransform_transform_rotation(ue_PyFTransform *self, PyObject * args) { PyObject *py_obj; @@ -120,7 +120,7 @@ static PyMethodDef ue_PyFTransform_methods[] = { { "transform_vector_no_scale", (PyCFunction)py_ue_ftransform_transform_vector_no_scale, METH_VARARGS, "" }, { "transform_position", (PyCFunction)py_ue_ftransform_transform_position, METH_VARARGS, "" }, { "transform_position_no_scale", (PyCFunction)py_ue_ftransform_transform_position_no_scale, METH_VARARGS, "" }, -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 { "transform_rotation", (PyCFunction)py_ue_ftransform_transform_rotation, METH_VARARGS, "" }, #endif { NULL } /* Sentinel */ From 6556d36927b412bb6e4deca27e06cb7642cced81 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 13 Aug 2018 14:37:46 +0200 Subject: [PATCH 010/151] fixed 4.17 build --- Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp index 72bf9aa6f..11548407a 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp @@ -82,7 +82,7 @@ static PyObject *py_ue_ftransform_transform_position_no_scale(ue_PyFTransform *s return py_ue_new_fvector(self->transform.TransformPositionNoScale(py_vec->vec)); } -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 static PyObject *py_ue_ftransform_transform_rotation(ue_PyFTransform *self, PyObject * args) { PyObject *py_obj; @@ -120,7 +120,7 @@ static PyMethodDef ue_PyFTransform_methods[] = { { "transform_vector_no_scale", (PyCFunction)py_ue_ftransform_transform_vector_no_scale, METH_VARARGS, "" }, { "transform_position", (PyCFunction)py_ue_ftransform_transform_position, METH_VARARGS, "" }, { "transform_position_no_scale", (PyCFunction)py_ue_ftransform_transform_position_no_scale, METH_VARARGS, "" }, -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 { "transform_rotation", (PyCFunction)py_ue_ftransform_transform_rotation, METH_VARARGS, "" }, #endif { NULL } /* Sentinel */ From 9aac61e9a11d09a18b4eb33da888e9b769c57884 Mon Sep 17 00:00:00 2001 From: heylenz Date: Mon, 13 Aug 2018 22:20:50 +0800 Subject: [PATCH 011/151] Update UnrealEnginePython.Build.cs --- Source/UnrealEnginePython/UnrealEnginePython.Build.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index d4f679b2e..6e7727d0b 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -21,7 +21,7 @@ public class UnrealEnginePython : ModuleRules "C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Program Files/Python35", - "C:/Python36", + "C:/Python27", "C:/IntelPython35" }; From 88c870f2433ca7b9d8327f572fd07beb5d6a22b8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 15 Aug 2018 09:08:31 +0200 Subject: [PATCH 012/151] fixed autodetection for PyFbxFactory #488 --- Source/PythonConsole/Private/PyFbxFactory.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/PythonConsole/Private/PyFbxFactory.cpp b/Source/PythonConsole/Private/PyFbxFactory.cpp index d362f664b..9161ad480 100644 --- a/Source/PythonConsole/Private/PyFbxFactory.cpp +++ b/Source/PythonConsole/Private/PyFbxFactory.cpp @@ -27,6 +27,13 @@ void UPyFbxFactory::PostInitProperties() { UObject * UPyFbxFactory::FactoryCreateFile(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, const FString& Filename, const TCHAR* Parms, FFeedbackContext* Warn, bool& bOutOperationCanceled) { #if ENGINE_MINOR_VERSION >= 20 + if (ImportUI->MeshTypeToImport == FBXIT_MAX) + { + if (!DetectImportType(UFactory::CurrentFilename)) + { + return nullptr; + } + } FbxMeshUtils::SetImportOption(ImportUI); // ensure auto-detect is skipped bDetectImportTypeOnImport = false; From 9cad9e782b4cd7b3dffcc9a11800ebbc1c2a9bdc Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 17 Aug 2018 11:11:02 +0200 Subject: [PATCH 013/151] fixed typo, check #507 --- Source/UnrealEnginePython/Private/UEPyEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UEPyEngine.cpp b/Source/UnrealEnginePython/Private/UEPyEngine.cpp index 6943eb8ec..40a92d582 100644 --- a/Source/UnrealEnginePython/Private/UEPyEngine.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEngine.cpp @@ -317,7 +317,7 @@ PyObject *py_unreal_engine_unload_package(PyObject * self, PyObject * args) FText outErrorMsg; if (!PackageTools::UnloadPackages({ packageToUnload }, outErrorMsg)) { - return PyErr_Format(PyExc_Exception, TCHAR_TO_UTF8(*outErrorMsg.ToString())); + return PyErr_Format(PyExc_Exception, "%s", TCHAR_TO_UTF8(*outErrorMsg.ToString())); } Py_RETURN_NONE; From bd2107604ad2b895cac759d9a38821ca8ec0b72a Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 28 Aug 2018 10:02:43 +0200 Subject: [PATCH 014/151] added get_inner(), get_key_prop() and get_value_prop() --- .../UnrealEnginePython/Private/UEPyModule.cpp | 3 ++ .../Private/UObject/UEPyObject.cpp | 51 ++++++++++++++++++- .../Private/UObject/UEPyObject.h | 3 ++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index dfdfb6e24..e733a853a 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -565,6 +565,9 @@ static PyMethodDef ue_PyUObject_methods[] = { { "get_uproperty", (PyCFunction)py_ue_get_uproperty, METH_VARARGS, "" }, { "get_property_struct", (PyCFunction)py_ue_get_property_struct, METH_VARARGS, "" }, { "get_property_array_dim", (PyCFunction)py_ue_get_property_array_dim, METH_VARARGS, "" }, + { "get_inner", (PyCFunction)py_ue_get_inner, METH_VARARGS, "" }, + { "get_key_prop", (PyCFunction)py_ue_get_key_prop, METH_VARARGS, "" }, + { "get_value_prop", (PyCFunction)py_ue_get_value_prop, METH_VARARGS, "" }, { "functions", (PyCFunction)py_ue_functions, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index b517cfee4..4cc159b65 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -561,8 +561,7 @@ PyObject *py_ue_find_function(ue_PyUObject * self, PyObject * args) UFunction *function = self->ue_object->FindFunction(FName(UTF8_TO_TCHAR(name))); if (!function) { - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } Py_RETURN_UOBJECT((UObject *)function); @@ -1162,6 +1161,54 @@ PyObject *py_ue_get_uproperty(ue_PyUObject *self, PyObject * args) } +PyObject *py_ue_get_inner(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + UArrayProperty *u_property = ue_py_check_type(self); + if (!u_property) + return PyErr_Format(PyExc_Exception, "object is not a UArrayProperty"); + + UProperty* inner = u_property->Inner; + if (!inner) + Py_RETURN_NONE; + + Py_RETURN_UOBJECT(inner); +} + +PyObject *py_ue_get_key_prop(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + UMapProperty *u_property = ue_py_check_type(self); + if (!u_property) + return PyErr_Format(PyExc_Exception, "object is not a UMapProperty"); + + UProperty* key = u_property->KeyProp; + if (!key) + Py_RETURN_NONE; + + Py_RETURN_UOBJECT(key); +} + +PyObject *py_ue_get_value_prop(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + UMapProperty *u_property = ue_py_check_type(self); + if (!u_property) + return PyErr_Format(PyExc_Exception, "object is not a UMapProperty"); + + UProperty* value = u_property->ValueProp; + if (!value) + Py_RETURN_NONE; + + Py_RETURN_UOBJECT(value); +} + PyObject *py_ue_has_property(ue_PyUObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h index 68f8b0f99..20ce89f9a 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h @@ -25,6 +25,9 @@ PyObject *py_ue_call(ue_PyUObject *, PyObject *); PyObject *py_ue_get_property(ue_PyUObject *, PyObject *); PyObject *py_ue_get_property_array_dim(ue_PyUObject *, PyObject *); PyObject *py_ue_get_uproperty(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_inner(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_key_prop(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_value_prop(ue_PyUObject *, PyObject *); PyObject *py_ue_get_property_class(ue_PyUObject *, PyObject *); PyObject *py_ue_has_property(ue_PyUObject *, PyObject *); PyObject *py_ue_is_rooted(ue_PyUObject *, PyObject *); From 2216cada482fbce8fd47ced81ac9ccc5f3ac0a59 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 3 Sep 2018 10:52:37 +0200 Subject: [PATCH 015/151] added folder api --- .../UnrealEnginePython/Private/UEPyModule.cpp | 8 ++ .../Private/UObject/UEPyActor.cpp | 45 +++++++- .../Private/UObject/UEPyActor.h | 2 + .../Private/UObject/UEPyWorld.cpp | 105 ++++++++++++++++++ .../Private/UObject/UEPyWorld.h | 7 ++ examples/world_folders_and_groups.py | 26 +++++ 6 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 examples/world_folders_and_groups.py diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index e733a853a..98a9a791b 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -621,6 +621,14 @@ static PyMethodDef ue_PyUObject_methods[] = { { "set_actor_label", (PyCFunction)py_ue_set_actor_label, METH_VARARGS, "" }, { "set_actor_hidden_in_game", (PyCFunction)py_ue_set_actor_hidden_in_game, METH_VARARGS, "" }, + { "get_folder_path", (PyCFunction)py_ue_get_folder_path, METH_VARARGS, "" }, + { "set_folder_path", (PyCFunction)py_ue_set_folder_path, METH_VARARGS, "" }, + + { "world_create_folder", (PyCFunction)py_ue_world_create_folder, METH_VARARGS, "" }, + { "world_delete_folder", (PyCFunction)py_ue_world_delete_folder, METH_VARARGS, "" }, + { "world_rename_folder", (PyCFunction)py_ue_world_rename_folder, METH_VARARGS, "" }, + { "world_folders", (PyCFunction)py_ue_world_folders, METH_VARARGS, "" }, + { "get_editor_world_counterpart_actor", (PyCFunction)py_ue_get_editor_world_counterpart_actor, METH_VARARGS, "" }, { "component_type_registry_invalidate_class", (PyCFunction)py_ue_component_type_registry_invalidate_class, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp index 92f0a96d5..e319bcc94 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyActor.cpp @@ -221,6 +221,49 @@ PyObject *py_ue_component_type_registry_invalidate_class(ue_PyUObject *self, PyO Py_RETURN_NONE; } +PyObject *py_ue_get_folder_path(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + AActor *actor = ue_py_check_type(self); + if (!actor) + return PyErr_Format(PyExc_Exception, "uobject is not an actor"); + + const FName DirPath = actor->GetFolderPath(); + + return PyUnicode_FromString(TCHAR_TO_UTF8(*DirPath.ToString())); +} + +PyObject *py_ue_set_folder_path(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + char *path; + PyObject *py_bool = nullptr; + + if (!PyArg_ParseTuple(args, "s|O:set_folder_path", &path, &py_bool)) + return nullptr; + + AActor *actor = ue_py_check_type(self); + if (!actor) + return PyErr_Format(PyExc_Exception, "uobject is not an actor"); + + FName DirPath = FName(UTF8_TO_TCHAR(path)); + + if (py_bool && PyObject_IsTrue(py_bool)) + { + actor->SetFolderPath_Recursively(DirPath); + } + else + { + actor->SetFolderPath(DirPath); + } + + Py_RETURN_NONE; +} + PyObject *py_ue_get_actor_label(ue_PyUObject *self, PyObject * args) { @@ -285,7 +328,7 @@ PyObject *py_ue_set_actor_hidden_in_game(ue_PyUObject *self, PyObject * args) actor->SetActorHiddenInGame(false); } - + Py_RETURN_NONE; } diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyActor.h b/Source/UnrealEnginePython/Private/UObject/UEPyActor.h index 9ab27f13c..9776c0354 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyActor.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyActor.h @@ -27,6 +27,8 @@ PyObject *py_ue_actor_set_level_sequence(ue_PyUObject *, PyObject *); #if WITH_EDITOR PyObject *py_ue_get_actor_label(ue_PyUObject *, PyObject *); PyObject *py_ue_set_actor_label(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_folder_path(ue_PyUObject *, PyObject *); +PyObject *py_ue_set_folder_path(ue_PyUObject *, PyObject *); PyObject *py_ue_set_actor_hidden_in_game(ue_PyUObject *, PyObject *); PyObject *py_ue_find_actor_by_label(ue_PyUObject *, PyObject *); PyObject *py_ue_get_editor_world_counterpart_actor(ue_PyUObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp index 074fbc93e..0987572ca 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp @@ -4,6 +4,9 @@ #include "EngineUtils.h" #include "Kismet/GameplayStatics.h" #include "Runtime/CoreUObject/Public/UObject/UObjectIterator.h" +#if WITH_EDITOR +#include "Editor/UnrealEd/Public/EditorActorFolders.h" +#endif PyObject *py_ue_world_exec(ue_PyUObject *self, PyObject * args) { @@ -315,3 +318,105 @@ PyObject *py_ue_set_current_level(ue_PyUObject *self, PyObject * args) Py_RETURN_FALSE; } +#if WITH_EDITOR +PyObject *py_ue_world_create_folder(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + char *path; + if (!PyArg_ParseTuple(args, "s:world_create_folder", &path)) + return nullptr; + + if (!FActorFolders::IsAvailable()) + return PyErr_Format(PyExc_Exception, "FActorFolders is not available"); + + UWorld *world = ue_get_uworld(self); + if (!world) + return PyErr_Format(PyExc_Exception, "unable to retrieve UWorld from uobject"); + + FName FolderPath = FName(UTF8_TO_TCHAR(path)); + + FActorFolders::Get().CreateFolder(*world, FolderPath); + + Py_RETURN_NONE; +} + +PyObject *py_ue_world_delete_folder(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + char *path; + if (!PyArg_ParseTuple(args, "s:world_delete_folder", &path)) + return nullptr; + + if (!FActorFolders::IsAvailable()) + return PyErr_Format(PyExc_Exception, "FActorFolders is not available"); + + UWorld *world = ue_get_uworld(self); + if (!world) + return PyErr_Format(PyExc_Exception, "unable to retrieve UWorld from uobject"); + + FName FolderPath = FName(UTF8_TO_TCHAR(path)); + + FActorFolders::Get().DeleteFolder(*world, FolderPath); + + Py_RETURN_NONE; +} + +PyObject *py_ue_world_rename_folder(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + char *path; + char *new_path; + if (!PyArg_ParseTuple(args, "ss:world_rename_folder", &path, &new_path)) + return nullptr; + + if (!FActorFolders::IsAvailable()) + return PyErr_Format(PyExc_Exception, "FActorFolders is not available"); + + UWorld *world = ue_get_uworld(self); + if (!world) + return PyErr_Format(PyExc_Exception, "unable to retrieve UWorld from uobject"); + + FName FolderPath = FName(UTF8_TO_TCHAR(path)); + FName NewFolderPath = FName(UTF8_TO_TCHAR(new_path)); + + if (FActorFolders::Get().RenameFolderInWorld(*world, FolderPath, NewFolderPath)) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; +} + +PyObject *py_ue_world_folders(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + if (!FActorFolders::IsAvailable()) + return PyErr_Format(PyExc_Exception, "FActorFolders is not available"); + + UWorld *world = ue_get_uworld(self); + if (!world) + return PyErr_Format(PyExc_Exception, "unable to retrieve UWorld from uobject"); + + const TMap &Folders = FActorFolders::Get().GetFolderPropertiesForWorld(*world); + + PyObject *py_list = PyList_New(0); + + TArray FolderNames; + Folders.GenerateKeyArray(FolderNames); + + for (FName FolderName : FolderNames) + { + PyObject *py_str = PyUnicode_FromString(TCHAR_TO_UTF8(*FolderName.ToString())); + PyList_Append(py_list, py_str); + Py_DECREF(py_str); + } + + return py_list; +} +#endif diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h index fddb850a2..af2c40665 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h @@ -30,3 +30,10 @@ PyObject *py_ue_set_current_level(ue_PyUObject *, PyObject *); PyObject *py_ue_get_world_type(ue_PyUObject *, PyObject *); +#if WITH_EDITOR +PyObject *py_ue_world_create_folder(ue_PyUObject *, PyObject *); +PyObject *py_ue_world_delete_folder(ue_PyUObject *, PyObject *); +PyObject *py_ue_world_rename_folder(ue_PyUObject *, PyObject *); +PyObject *py_ue_world_folders(ue_PyUObject *, PyObject *); +#endif + diff --git a/examples/world_folders_and_groups.py b/examples/world_folders_and_groups.py new file mode 100644 index 000000000..d4be586b6 --- /dev/null +++ b/examples/world_folders_and_groups.py @@ -0,0 +1,26 @@ +import unreal_engine as ue +from unreal_engine.classes import GroupActor + +import time + +world = ue.get_editor_world() +group_actor = world.actor_spawn(GroupActor) + +for folder in world.world_folders(): + print(folder) + +new_folder = 'FooBar_{}'.format(int(time.time())) + +world.world_create_folder(new_folder) + +world.world_rename_folder(new_folder, new_folder + '__hello') + +world.world_delete_folder(new_folder + '__hello') + +actor = ue.editor_get_selected_actors()[0] + +# folder tree will be automatically created +actor.set_folder_path('Test1/Test2/Test3') + +# assign actors to the group +group_actor.GroupActors = [actor] \ No newline at end of file From 8ca62b57d46e85ec9817f85a6ea2f54ecbf3d55d Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 5 Sep 2018 18:21:19 +0200 Subject: [PATCH 016/151] allow passing arguments to multicast delegates --- .../UnrealEnginePython/Private/UEPyModule.cpp | 4 +- .../Private/UObject/UEPyObject.cpp | 66 +++++++++++++++++-- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 98a9a791b..7050bea01 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1427,6 +1427,7 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject } return py_ue_new_owned_uscriptstruct_zero_copy(u_script_struct, data); } + return PyErr_Format(PyExc_Exception, "the specified uobject has no __call__ support"); } @@ -2953,8 +2954,7 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * if (ret) return ret; - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index 4cc159b65..a0b8a76e8 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -985,22 +985,78 @@ PyObject *py_ue_broadcast(ue_PyUObject *self, PyObject *args) ue_py_check(self); - char *property_name; - if (!PyArg_ParseTuple(args, "s:broadcast", &property_name)) + Py_ssize_t args_len = PyTuple_Size(args); + if (args_len < 1) { - return nullptr; + return PyErr_Format(PyExc_Exception, "you need to specify the event to trigger"); + } + + PyObject *py_property_name = PyTuple_GetItem(args, 0); + if (!PyUnicodeOrString_Check(py_property_name)) + { + return PyErr_Format(PyExc_Exception, "event name must be a unicode string"); } + const char *property_name = UEPyUnicode_AsUTF8(py_property_name); + UProperty *u_property = self->ue_object->GetClass()->FindPropertyByName(FName(UTF8_TO_TCHAR(property_name))); if (!u_property) return PyErr_Format(PyExc_Exception, "unable to find event property %s", property_name); if (auto casted_prop = Cast(u_property)) { - Py_BEGIN_ALLOW_THREADS; FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(self->ue_object); uint8 *parms = (uint8 *)FMemory_Alloca(casted_prop->SignatureFunction->PropertiesSize); FMemory::Memzero(parms, casted_prop->SignatureFunction->PropertiesSize); + + uint32 argn = 1; + + // initialize args + for (TFieldIterator IArgs(casted_prop->SignatureFunction); IArgs && IArgs->HasAnyPropertyFlags(CPF_Parm); ++IArgs) + { + UProperty *prop = *IArgs; + if (!prop->HasAnyPropertyFlags(CPF_ZeroConstructor)) + { + prop->InitializeValue_InContainer(parms); + } + + if ((IArgs->PropertyFlags & (CPF_Parm | CPF_ReturnParm)) == CPF_Parm) + { + if (!prop->IsInContainer(casted_prop->SignatureFunction->ParmsSize)) + { + return PyErr_Format(PyExc_Exception, "Attempting to import func param property that's out of bounds. %s", TCHAR_TO_UTF8(*casted_prop->SignatureFunction->GetName())); + } + + PyObject *py_arg = PyTuple_GetItem(args, argn); + if (!py_arg) + { + PyErr_Clear(); +#if WITH_EDITOR + FString default_key = FString("CPP_Default_") + prop->GetName(); + FString default_key_value = casted_prop->SignatureFunction->GetMetaData(FName(*default_key)); + if (!default_key_value.IsEmpty()) + { +#if ENGINE_MINOR_VERSION >= 17 + prop->ImportText(*default_key_value, prop->ContainerPtrToValuePtr(parms), PPF_None, NULL); +#else + prop->ImportText(*default_key_value, prop->ContainerPtrToValuePtr(buffer), PPF_Localized, NULL); +#endif + } +#endif + } + else if (!ue_py_convert_pyobject(py_arg, prop, parms, 0)) + { + return PyErr_Format(PyExc_TypeError, "unable to convert pyobject to property %s (%s)", TCHAR_TO_UTF8(*prop->GetName()), TCHAR_TO_UTF8(*prop->GetClass()->GetName())); + } + + + } + + argn++; + + } + + Py_BEGIN_ALLOW_THREADS; multiscript_delegate.ProcessMulticastDelegate(parms); Py_END_ALLOW_THREADS; } @@ -1907,7 +1963,7 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) package = CreatePackage(nullptr, UTF8_TO_TCHAR(name)); if (!package) return PyErr_Format(PyExc_Exception, "unable to create package"); - + package->FileName = *FPackageName::LongPackageNameToFilename(UTF8_TO_TCHAR(name), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); if (has_package) { From b4d5c3e441348b297eff12fa5a475e0caaed15ba Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 6 Sep 2018 12:10:45 +0200 Subject: [PATCH 017/151] added archetype management --- .../UnrealEnginePython/Private/UEPyEditor.cpp | 24 +++++++-- .../UnrealEnginePython/Private/UEPyEditor.h | 3 ++ .../UnrealEnginePython/Private/UEPyModule.cpp | 50 ++++++++++++++++--- .../Private/UObject/UEPyObject.cpp | 37 ++++++++++++-- .../Private/UObject/UEPyObject.h | 2 + 5 files changed, 100 insertions(+), 16 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.cpp b/Source/UnrealEnginePython/Private/UEPyEditor.cpp index fc3a0b411..f23f7c59e 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEditor.cpp @@ -37,9 +37,22 @@ #include "Editor/MainFrame/Public/Interfaces/IMainFrameModule.h" #include "Runtime/Core/Public/HAL/ThreadHeartBeat.h" +#include "Runtime/Engine/Public/EditorSupportDelegates.h" #include "UEPyIPlugin.h" +PyObject *py_unreal_engine_redraw_all_viewports(PyObject * self, PyObject * args) +{ + FEditorSupportDelegates::RedrawAllViewports.Broadcast(); + Py_RETURN_NONE; +} + +PyObject *py_unreal_engine_update_ui(PyObject * self, PyObject * args) +{ + FEditorSupportDelegates::UpdateUI.Broadcast(); + Py_RETURN_NONE; +} + PyObject *py_unreal_engine_editor_play_in_viewport(PyObject * self, PyObject * args) { @@ -273,7 +286,7 @@ PyObject *py_unreal_engine_editor_play(PyObject * self, PyObject * args) Py_END_ALLOW_THREADS; Py_RETURN_NONE; -} + } PyObject *py_unreal_engine_editor_select_actor(PyObject * self, PyObject * args) { @@ -449,7 +462,7 @@ PyObject *py_unreal_engine_import_asset(PyObject * self, PyObject * args) } Py_RETURN_NONE; -} + } PyObject *py_unreal_engine_editor_tick(PyObject * self, PyObject * args) { @@ -742,7 +755,7 @@ PyObject *py_unreal_engine_rename_asset(PyObject * self, PyObject * args) #endif Py_RETURN_NONE; -} + } PyObject *py_unreal_engine_duplicate_asset(PyObject * self, PyObject * args) { @@ -1849,10 +1862,11 @@ PyObject *py_unreal_engine_on_main_frame_creation_finished(PyObject * self, PyOb py_delegate->SetPyCallable(py_callable); IMainFrameModule& MainFrameModule = FModuleManager::LoadModuleChecked(TEXT("MainFrame")); MainFrameModule.OnMainFrameCreationFinished().AddRaw(py_delegate, &FPythonSmartDelegate::PyFOnMainFrameCreationFinished); - + Py_RETURN_NONE; } + PyObject *py_unreal_engine_create_material_instance(PyObject * self, PyObject * args) { @@ -2060,7 +2074,7 @@ PyObject *py_unreal_engine_add_level_to_world(PyObject *self, PyObject * args) #endif Py_RETURN_UOBJECT(level_streaming); -} + } PyObject *py_unreal_engine_move_selected_actors_to_level(PyObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.h b/Source/UnrealEnginePython/Private/UEPyEditor.h index d30ffda04..f179c1788 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.h +++ b/Source/UnrealEnginePython/Private/UEPyEditor.h @@ -24,6 +24,9 @@ PyObject *py_unreal_engine_get_assets_by_class(PyObject *, PyObject *); PyObject *py_unreal_engine_get_assets_by_filter(PyObject *, PyObject *, PyObject *); PyObject *py_unreal_engine_set_fbx_import_option(PyObject *, PyObject *); +PyObject *py_unreal_engine_redraw_all_viewports(PyObject *, PyObject *); +PyObject *py_unreal_engine_update_ui(PyObject *, PyObject *); + PyObject *py_unreal_engine_create_modal_save_asset_dialog(PyObject *, PyObject *); PyObject *py_unreal_engine_console_exec(PyObject *, PyObject * args); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 7050bea01..c037310a0 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -304,6 +304,9 @@ static PyMethodDef unreal_engine_methods[] = { { "add_asset_view_context_menu_extension", py_unreal_engine_add_asset_view_context_menu_extension, METH_VARARGS, "" }, + { "redraw_all_viewports", py_unreal_engine_redraw_all_viewports, METH_VARARGS, "" }, + { "update_ui", py_unreal_engine_update_ui, METH_VARARGS, "" }, + #pragma warning(suppress: 4191) { "create_detail_view", (PyCFunction)py_unreal_engine_create_detail_view, METH_VARARGS | METH_KEYWORDS, "" }, #pragma warning(suppress: 4191) @@ -463,7 +466,7 @@ static PyMethodDef unreal_engine_methods[] = { { "get_viewport_size", py_unreal_engine_get_viewport_size, METH_VARARGS, "" }, { "get_resolution", py_unreal_engine_get_resolution, METH_VARARGS, "" }, { "get_game_viewport_size", py_unreal_engine_get_game_viewport_size, METH_VARARGS, "" }, - + { "get_game_viewport_client", py_unreal_engine_get_game_viewport_client, METH_VARARGS, "" }, #pragma warning(suppress: 4191) { "open_color_picker", (PyCFunction)py_unreal_engine_open_color_picker, METH_VARARGS | METH_KEYWORDS, "" }, @@ -1138,6 +1141,8 @@ static PyMethodDef ue_PyUObject_methods[] = { { "as_dict", (PyCFunction)py_ue_as_dict, METH_VARARGS, "" }, { "get_cdo", (PyCFunction)py_ue_get_cdo, METH_VARARGS, "" }, + { "get_archetype", (PyCFunction)py_ue_get_archetype, METH_VARARGS, "" }, + { "get_archetype_instances", (PyCFunction)py_ue_get_archetype_instances, METH_VARARGS, "" }, { "enum_values", (PyCFunction)py_ue_enum_values, METH_VARARGS, "" }, { "enum_names", (PyCFunction)py_ue_enum_names, METH_VARARGS, "" }, #if ENGINE_MINOR_VERSION >= 15 @@ -1295,8 +1300,35 @@ static int ue_PyUObject_setattro(ue_PyUObject *self, PyObject *attr_name, PyObje UProperty *u_property = u_struct->FindPropertyByName(FName(UTF8_TO_TCHAR(attr))); if (u_property) { +#if WITH_EDITOR + self->ue_object->PreEditChange(u_property); +#endif if (ue_py_convert_pyobject(value, u_property, (uint8*)self->ue_object, 0)) { +#if WITH_EDITOR + FPropertyChangedEvent PropertyEvent(u_property, EPropertyChangeType::ValueSet); + self->ue_object->PostEditChangeProperty(PropertyEvent); + + if (self->ue_object->HasAnyFlags(RF_ArchetypeObject | RF_ClassDefaultObject)) + { + TArray Instances; + self->ue_object->GetArchetypeInstances(Instances); + for (UObject *Instance : Instances) + { + Instance->PreEditChange(u_property); + if (ue_py_convert_pyobject(value, u_property, (uint8*)Instance, 0)) + { + FPropertyChangedEvent PropertyEvent(u_property, EPropertyChangeType::ValueSet); + Instance->PostEditChangeProperty(PropertyEvent); + } + else + { + PyErr_SetString(PyExc_ValueError, "invalid value for UProperty"); + return -1; + } + } + } +#endif return 0; } PyErr_SetString(PyExc_ValueError, "invalid value for UProperty"); @@ -1726,7 +1758,9 @@ void unreal_engine_init_py_module() PyDict_SetItemString(unreal_engine_dict, "RF_MARKASNATIVE", PyLong_FromUnsignedLongLong((uint64)RF_MarkAsNative)); PyDict_SetItemString(unreal_engine_dict, "RF_TRANSACTIONAL", PyLong_FromUnsignedLongLong((uint64)RF_Transactional)); PyDict_SetItemString(unreal_engine_dict, "RF_CLASSDEFAULTOBJECT", PyLong_FromUnsignedLongLong((uint64)RF_ClassDefaultObject)); + PyDict_SetItemString(unreal_engine_dict, "RF_CLASS_DEFAULT_OBJECT", PyLong_FromUnsignedLongLong((uint64)RF_ClassDefaultObject)); PyDict_SetItemString(unreal_engine_dict, "RF_ARCHETYPEOBJECT", PyLong_FromUnsignedLongLong((uint64)RF_ArchetypeObject)); + PyDict_SetItemString(unreal_engine_dict, "RF_ARCHETYPE_OBJECT", PyLong_FromUnsignedLongLong((uint64)RF_ArchetypeObject)); PyDict_SetItemString(unreal_engine_dict, "RF_TRANSIENT", PyLong_FromUnsignedLongLong((uint64)RF_Transient)); PyDict_SetItemString(unreal_engine_dict, "RF_MARKASROOTSET", PyLong_FromUnsignedLongLong((uint64)RF_MarkAsRootSet)); PyDict_SetItemString(unreal_engine_dict, "RF_TAGGARBAGETEMP", PyLong_FromUnsignedLongLong((uint64)RF_TagGarbageTemp)); @@ -1814,10 +1848,10 @@ ue_PyUObject *ue_get_python_uobject(UObject *ue_obj) UE_LOG(LogPython, Warning, TEXT("CREATED UPyObject at %p for %p %s"), ue_py_object, ue_obj, *ue_obj->GetName()); #endif return ue_py_object; - } + } return ret; -} + } ue_PyUObject *ue_get_python_uobject_inc(UObject *ue_obj) { @@ -1905,7 +1939,7 @@ void unreal_engine_py_log_error() } PyErr_Clear(); -} + } // retrieve a UWorld from a generic UObject (if possible) UWorld *ue_get_uworld(ue_PyUObject *py_obj) @@ -2841,8 +2875,8 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * #endif } #endif + } } - } Py_ssize_t tuple_len = PyTuple_Size(args); @@ -2955,7 +2989,7 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * return ret; Py_RETURN_NONE; -} + } PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) { @@ -3015,8 +3049,8 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ { UE_LOG(LogPython, Error, TEXT("function %s is already registered"), UTF8_TO_TCHAR(name)); return nullptr; - } } +} UPythonFunction *function = NewObject(u_class, UTF8_TO_TCHAR(name), RF_Public | RF_Transient | RF_MarkAsNative); function->SetPyCallable(py_callable); @@ -3337,7 +3371,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ #endif return function; -} + } FGuid *ue_py_check_fguid(PyObject *py_obj) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index a0b8a76e8..088f057b6 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1894,16 +1894,47 @@ PyObject *py_ue_get_cdo(ue_PyUObject * self, PyObject * args) ue_py_check(self); - if (!self->ue_object->IsA()) + UClass *u_class = ue_py_check_type(self); + if (!u_class) { return PyErr_Format(PyExc_Exception, "uobject is not a UClass"); } - UClass *u_class = (UClass *)self->ue_object; - Py_RETURN_UOBJECT(u_class->GetDefaultObject()); } +PyObject *py_ue_get_archetype(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + UObject *Archetype = self->ue_object->GetArchetype(); + + if (!Archetype) + return PyErr_Format(PyExc_Exception, "uobject has no archetype"); + + Py_RETURN_UOBJECT(Archetype); +} + +PyObject *py_ue_get_archetype_instances(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + TArray Instances; + + self->ue_object->GetArchetypeInstances(Instances); + + PyObject *py_list = PyList_New(0); + + for (UObject *Instance : Instances) + { + PyList_Append(py_list, (PyObject *)ue_get_python_uobject(Instance)); + } + + return py_list; +} + #if WITH_EDITOR PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h index 20ce89f9a..d43422274 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h @@ -41,6 +41,8 @@ PyObject *py_ue_is_owned(ue_PyUObject *, PyObject *); PyObject *py_ue_save_config(ue_PyUObject *, PyObject *); PyObject *py_ue_get_cdo(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_archetype(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_archetype_instances(ue_PyUObject *, PyObject *); PyObject *py_ue_enum_values(ue_PyUObject *, PyObject *); PyObject *py_ue_enum_names(ue_PyUObject *, PyObject *); #if ENGINE_MINOR_VERSION >= 15 From ac3140fb2f439c6548e94612179581c742efe6df Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 6 Sep 2018 12:16:41 +0200 Subject: [PATCH 018/151] Update README.md --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 458b7b12f..c69d75e89 100644 --- a/README.md +++ b/README.md @@ -431,6 +431,27 @@ vec = self.uobject.GetActorLocation() Reflection based functions are those in camelcase (or with the first capital letter). Native functions instead follow the python style, with lower case, underscore-as-separator function names. +Note that, in editor builds, when you change the property of an archetype (included ClassDefaultObject) via __setattr__ all of the archtype instances will be updated too. + +To be more clear: + +```python +your_blueprint.GeneratedClass.get_cdo().CharacterMovement.MaxWalkSpeed = 600.0 +``` + +is a super shortcut for: + +```python +your_blueprint.GeneratedClass.get_cdo().CharacterMovement.pre_edit_change('MaxWalkSpeed') +your_blueprint.GeneratedClass.get_cdo().CharacterMovement.set_property('MaxWalkSpeed', 600.0) +your_blueprint.GeneratedClass.get_cdo().CharacterMovement.post_edit_change_property('MaxWalkSpeed') +for instance in your_blueprint.GeneratedClass.get_cdo().CharacterMovement.get_archetype_instances(): + instance.pre_edit_change('MaxWalkSpeed') + instance.set_property('MaxWalkSpeed', 600.0) + instance.post_edit_change_property('MaxWalkSpeed') +``` + + The automagic UClass, UStruct and UEnums mappers ------------------------------------------------ From 473a25360f9758f7b28793e13da61f90bb81b3e8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 6 Sep 2018 12:31:50 +0200 Subject: [PATCH 019/151] ported to 4.15 --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 4 ++-- Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index c037310a0..97cdc5efa 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1318,8 +1318,8 @@ static int ue_PyUObject_setattro(ue_PyUObject *self, PyObject *attr_name, PyObje Instance->PreEditChange(u_property); if (ue_py_convert_pyobject(value, u_property, (uint8*)Instance, 0)) { - FPropertyChangedEvent PropertyEvent(u_property, EPropertyChangeType::ValueSet); - Instance->PostEditChangeProperty(PropertyEvent); + FPropertyChangedEvent InstancePropertyEvent(u_property, EPropertyChangeType::ValueSet); + Instance->PostEditChangeProperty(InstancePropertyEvent); } else { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index 088f057b6..43ef8aeca 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1039,7 +1039,7 @@ PyObject *py_ue_broadcast(ue_PyUObject *self, PyObject *args) #if ENGINE_MINOR_VERSION >= 17 prop->ImportText(*default_key_value, prop->ContainerPtrToValuePtr(parms), PPF_None, NULL); #else - prop->ImportText(*default_key_value, prop->ContainerPtrToValuePtr(buffer), PPF_Localized, NULL); + prop->ImportText(*default_key_value, prop->ContainerPtrToValuePtr(parms), PPF_Localized, NULL); #endif } #endif From 004ed84cb80f6d9ccaf523c4c16007508858c27b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 08:38:39 +0200 Subject: [PATCH 020/151] Update Slate_API.md --- docs/Slate_API.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 8b1378917..808158ad5 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -1 +1,12 @@ +# The Slate API + +Slate is the GUI toolkit in Unreal Engine 4. It allows you to create windows, buttons, sliders and all of the graphics elements you see in the editor. It is the base for the Blueprint Widgets too. + +UnrealEnginePython allows you to build GUI from python using the Slate api. + +The python wrapper development has been sponsored by Kite & Lightning (http://kiteandlightning.la/) + +## SWidget and ue_PySWidget + +This is t From 755070b1218d26e3240878cf9e5f73c42be05a2d Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 08:54:04 +0200 Subject: [PATCH 021/151] Update Slate_API.md --- docs/Slate_API.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 808158ad5..2808cb1b0 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -7,6 +7,24 @@ UnrealEnginePython allows you to build GUI from python using the Slate api. The python wrapper development has been sponsored by Kite & Lightning (http://kiteandlightning.la/) +This document assumes a python3 environment. If you are using python2, just ensure to use unicode when you see strings. + ## SWidget and ue_PySWidget -This is t +SWidget is the base C++ class for all the Slate widgets, it is wrapped in a python object (PyObject) named ue_PySWidget. + +Each SWidget exposed to python has its ue_PySWidget representation. You can get the list of exposed SWidget from here: https://github.com/20tab/UnrealEnginePython/tree/master/Source/UnrealEnginePython/Private/Slate (the ones stating with 'UEPyS' prefix) + +## SWindow + +this is the first widget you generally use as it will be the container for the others. It represent a window: + +```python +from unreal_engine import SWindow + +window = SWindow(client_size=(512, 512), title='First Slate Window') +``` + +As you can see just by instancing Slate you will create and show them. + +In the C++ api, each SWidget has its series of FArguments (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SComboBox/FArguments/index.html). They are the options of the SWidget, and in the python api you pass them as arguments to the constructor (note the pythonization of the names with lower-case-underscore-delimited conversion). In this case the ClientSize FArguments (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/ClientSize/index.html) became 'client_size' and Title (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/Title/index.html) became 'title'. Note the shortcut from FVector2D to a simple 2-elements float tuple. (both are supported) From 60b20ba7e764813365d6c1dc7b1ebab8c920f5a9 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 08:59:59 +0200 Subject: [PATCH 022/151] allow strings in slate for python2 --- .../Private/Slate/UEPySlate.h | 8 ++++---- docs/screenshots/slate_SWindow.png | Bin 0 -> 50772 bytes 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 docs/screenshots/slate_SWindow.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.h b/Source/UnrealEnginePython/Private/Slate/UEPySlate.h index b7ee58622..4f4a2f706 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.h +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.h @@ -136,14 +136,14 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); #define ue_py_slate_up(_type, _func, _param, _attribute) ue_py_slate_base_up(TAttribute<_type>, _func, _param, _attribute) #define ue_py_slate_farguments_text(param, attribute) ue_py_slate_up(FText, GetterFText, param, attribute)\ - else if (PyUnicode_Check(value)) {\ + else if (PyUnicodeOrString_Check(value)) {\ arguments.attribute(FText::FromString(UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(value))));\ }\ ue_py_slate_down(param) #define ue_py_slate_farguments_string(param, attribute) ue_py_slate_up(FString, GetterFString, param, attribute)\ - else if (PyUnicode_Check(value)) {\ + else if (PyUnicodeOrString_Check(value)) {\ arguments.attribute(UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(value)));\ }\ ue_py_slate_down(param) @@ -342,14 +342,14 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); } #define ue_py_slate_farguments_optional_string(param, attribute) { PyObject *value = ue_py_dict_get_item(kwargs, param);\ - if (PyUnicode_Check(value)) {\ + if (PyUnicodeOrString_Check(value)) {\ arguments.attribute(UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(value)));\ }\ } #define ue_py_slate_farguments_optional_text(param, attribute) { PyObject *value = ue_py_dict_get_item(kwargs, param);\ if (value) {\ - if (PyUnicode_Check(value)) {\ + if (PyUnicodeOrString_Check(value)) {\ arguments.attribute(FText::FromString(UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(value))));\ }\ else {\ diff --git a/docs/screenshots/slate_SWindow.png b/docs/screenshots/slate_SWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4977d4449a6023849fdc5f572ee74970c20464 GIT binary patch literal 50772 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�tX=3o` z39xDNnJo%%@Jxk8h89;dIqyig1iZHUWMHw02%HQ{g)g zG~Zkt?=%*mYBRJC_nUw&F!Lj{GRzzYIHs*H>ZQ$jnba+_kHdZ!1E4P+Cn>o<1TM?( zad1(PQjl{_fw<#fa>qk!fQxxrTG3cx{@_;&KUG>3J>e_3QIny4^o73;Rf?8p-JZ@p zj>Z*ca$@@HIfvGM18an6jIMB@rryFz_86H{r3I1n!lHY=(9|tZinIa_cA&6+IJtb} zV30(6u(v22aEQR@{X$FC%5Y4L*0+F71v2JzvJ)355VAjY6ydVZQU-uLwToVY1 z;svqnQ8;TAgHYV2Ao$NNRTf2SV_ZS!GSozek}vUm&^Q840+hG6K_NNITvT6j6P+(v zfCKGNuj06JF?a*Ik|l@z!7tc=gztqFF&1O7;$IMrh`%T^zdiJGiv5p{2C;jX(3!J$ zlG0~r>}8E_dC(uLu|X3YR8&BVTayzcRCKWFSI!-Ja?3l5Gv1S~a5;y@xm+0l8^|k) zFD8{LXo@-CJ&;;)kxKab2(jedH6(083j1Nr-oAyA^iN{sr#5{E?nsee8YbY9M-)cG z6hY7nM3&w+A1uyHL(-AT$xc6+{Nl9*Doy7^OBw>AEv#)H?jYz^Jz-S9Jl@h~p zkweHjkcTsUhYBL8Xy#q_!EttG zH`O4d5@T%jB$jV)2mS}RO{UvbB!GT;E0DQM@Y9tHv@y5;$sg~b(e+?`-!${g?(Wrk zxid~mFXG^-a9pwvE?F!T_C{zSpD3qm`5onEx`;kVRlXRLYAb@3@?ok>=Bn z6K$@m47X@SFSaZs-vv^x;@H*APM_yZ!6^?aF<^7mLS4J@pfbR1?d>90)L7~TBQ%NT8Gw!@NoCFx_ea_E#oESVf z8f$l3vBRlB1uGe7xm`|sJ9Vk;%hLoVci;EExyU-aXX>(a-5|J7sABrrTnkO~IFq`( zqtdYKn)tCRHo#M*HHLI0iQbWiU2G$3#rN9513Z*sC{^29f$31;NOLWi`|2f)duA^; zpql+PZOuUAS_~jh;5QK*(C>rg=Z}mSAFzU^Haw7cLdWY$0$4bCsJcQgFWejSCSZ^N zCe^BYx23V@FBO?TS_+I9yA?hi{6aRi7v{C-$DO4N-j1Z}F{Ny2xp0ImHQ_`LY415s z%|ZfPmijaK<6SykT;1W9l4^6c*D>JA-8l$-3Vx(8<&Y=L{g$!prvf|4uzgYqmlKE^ zi`Ge)+OSp$@C)3?gSSKYWy15hNKk%RT>eJcS$00~4w^R)>q>UDpE_)m8@_ODleqR_ zyt^BCEwoCCQ&F=D#3s~((Mg+yGrZ?_HLT5Vf0i9loqf7=rzus=v=wbt- zyciuSm+N1NA|GOS(?*RL9tot>|IvetoSTMFvYl^t7NkD?5^tB7Gt2H-G@p&f4aq?B z{8s0G0$Om5Fx)u~IyNa(PQyP2Mb${GE>C{P8eDH*24xi?rRNUBxxuB4Z9w-1xKyX z>M~GRba~Oua+9@!5~G(V;&I7HB{+(i=i{COgO1F8D5O zi$do&jOK(70N}nHv%hVCkkk@CFcuQnAKd;2pyNl)07imkN)q-i`&tHqd4xK6G&rYS zyDb?l_)I}0zU5`f7`olZ=|bA5FQaMs{eP-f8YoBvf~sqx#%$zoN1(LS#1so~)BWyZ zP2bXo|^@>9N686y$@VA~CXxJnw7W*}McFgV`-F+hNEDZt+91m`<1`FKd1nIs` z>~w+cv>s$>mTRp9vz!j1ocEoj%>w~L~=9(E2M%9ye2DFvht*-{qQHMbPMqBG9|j3 zN{06X%~bP9J{mA>uc(Xd0Z#!VcMoKkD8LGPMku6-@SI0GX8t8OK^C_Y>QX%Pd6CbP zkkR@)BSx(JtSgl38dS<~Rs&~h{(e}^F0>$k_a16fnkjK-mup!0N5Bz^6x%PQ-NH3? zNRD;4nXdP??0|Jmgl4$bUBDwC(fV93Mx6Y-8|Q(bt*N%w@dE=yfeOjPuTgaTz{}RK5eS)7twK;)bcEO9| zi^*2{ysn!>q-Cj>bLz}m|$Obk$42bf<*v+eiTpl755TK znlwJbj8*01y&H`uifQVaAtbidIxdO>2jkXA{gx5CPrp9pY+H8@@=^@gyj~aZ2@Br@ z04W^aJ_2;rpb=pww>SPaD{ykv*ZnR%c{mJbt&FtL3-|^JjEDX1ia_dteBcGPc%CT_ z%lXoKj(Sr#A1_2N{s3b=6=NOw5b)WXV^#7RXZHa?ln@XzCIj8j>EvjICg7@#&;stB z1T=2HJN#8k!BAG38}`T!ZTLvD+L9NtpJg5uN$kVCu4`4;FCROv1_92_p-1cqff?#xI9uPE7|y&z6@C^JpI zrRba;gm&qx)pit;PD#&RRzYphoQq|snAHNfz!B~PGoKk$n=V;!07_N90&Xj~2cGco z`=>$kEiurb(=JmusM4OPXQzAUU&gD1^4#af=RX2dpDG1aa9s=p_Q*Xo<>c;N8cOhq zxQ<0%e8?up1{1908~yFTWdzQNCw$bWQ4Bmbe}WE=YwUL)YtUVc_gjxo*DWuJv~wfe%&|25lYr-e_g_=hKQW3wS#R=3cNMzPkG#$b7H?09-XN@_q z_~3H*b6y9UHeZHdDL325SU4o1u*U{YyOk2JvQF!mVY6Xm6M?Gj|1En)k8Ny()caiA zSzO#s^6fTxFv$S=qu4_ty9ZuL_w~X_Xxy$yvyumT3T>_B+XDb!qkL=2R_(XzKb-<} z-b)9^H|dva_7{tVGGTcO(6H6ZWnk%UYt;{bcn&G1K(>T?s|_@q1xlgOxH{-sA^55a zA7X>vBju2j^Q~Y##CBH}0hRUpe!I^rPB&p21B0IsG<9(HM|wVh00ya|_-FF96v&ns zZ?(%$oZxaCNl18HHWDENhZZ^gI#aRxtIx$Q7Xewdw>@#KqLKu2ul*oFtU2PgS8KPe zX%6|hX|d+uAKOxQN8atDE>)VZbg*f2AHf=pHrK*8Ac*qOJJ2@!0~y=CVsbf*W{@P1 z4I*&e_do6hsI4qmOB4161ChW9GL+X;goAz#iq=ax)@yWMPlW+}(AHCiqveHw^n+M2 z_g^AkVgPVv;3^9^*k#~wPPn3Sz#mynl;s_@K*&^>qVn%^3g`~Fkot$>^b^|N<& zoq@xkw7tD+#mDJxuxGGv`4OP;F0Y3k{qWX=L~>D|0wB#Q8p?wDDQ4fPGh)Z8G7?jy zx=n1l)3uOBdI4I<>dP{P19~O(97(_FwW{SHVgOa4vxQ{47w^^o{q}9L)pBtK<=(vc zVxNhz7m!K+tBCqsQRQ<(tS-;;3fp&6<7JQUG;;%dXsSR`yG;7)a;FfvGeH?(jr+hF zK_{82mgf3QY+s|^VZVa<7on%YhZG84P7OW)&5guFP_qnVzZ6JKbO=&=JMC-XS*_+C zlMl2}+V`L$A($$qA9p>ae9FCP?Ws*^D|Vlg3teieF$EGHD(>Lc`w?<}($MIR3O!;4 za>V1Sjm)z+l_9RE((JFikOu=<&2@@tSZgHxvxqCII0+QSeGrc;DTmT&(gOE-s{SNr z7NuN+m9zs7WkXjX@hw=8dbpMm_1)Lf#@T&bK0z1D#xRyax!-a(6&IZXwg%K--}`bVOYH*-yR8kyb(<|F5u#cg*QCf#>Bk zkh55d0?jZZV8f5!1DeSaG73@>9b_&vy-JLepnBz`SY)ADk59IGJfD1GPWpB#n@BNYPUBrNr6m_FSgZ*K`f+4~oo#xs4^- z?IoZ|wlfkj>s5_g%S8Yu#vlR+dHQ@pQvsF^IBD&bm^EQQd_9|ityj1Qw!`8t&%?0bDKo-D?2SNdbtp1^qoCWYRr_5H}S_7`BacEYH`c6IFBH$R^U?N8C zYwP}EuB~+RnnaR|zLezox2lHXMUef9mnqHPG3MV9eH?IQqZSv*f{=-JI-n5^jacl? z(m!tD{S@|Sl=~N;CZhgRwLRBDBKjZ@UQorFb~Yp8Usm5D2WU&6Dzf@5)W%Rp;+)$n z&xd!;6mO8rOdC~YJWcqIjsXr=JaeL=-vkBMjDD2l*$WnkRFES?O@Yje5AvB)we!rd z8a;HR*0skD$5fQj)|Sqb&umc2p#dGyVCU6~8pqwei3$W~s{2LB@Bp0? zmH4GfV&vN3{WQ*RQSgI3Oz`+pClmsmpkiyZ_=BUJY|ABEw}Jta_hypZ29NAcqw%)> zj*(&N{DZI>L$rX^G2p*WdNFe6#Ejcjquj1#Y~|B>NALYLAiK;2#eJKN+f!PeTHR}Y zfE?*=SW)JdM6lNC1~@U>+vF#XcSKvG@wO5E3j>+o8wHF))x>(~Brt9FyZZxq08H9W z)zG=1)9XFBaZm4>L8)$_4$e+#M|WgA$&N5=ucOB6SNh_tH30r4C+sE!mlipJtYtJu zCwh9zne7X(OXkrg2VBH^d{{-99(D)|RHO3oYF~Qia#uepIMw)nav>snd~v~R>YSYb z#k%d-a0yWRwO*p3>`+@P==OCN=OzCqbo^k{yFe;=i${sdaE+H7O6MzHs7U4iBN##O zPEgDhk}|ffk@`@v62O-NJ)c*~e+6dUE=`?&y6kURNr4mr4-N;WWr5h~k_V??S9@Q| zJ!cJ5*o|(ssb;{JAr^NJ(BYG}`Zj9`RM)UBY&IFM$MYd5cJ5YDL{6OQsN9S+4?xI$ zp!3Dn9tWc~R-of)X=vd@yXmH33O(2T*i`e-S4G!NJUK!bN%~!}&`O{Y-p8t-n#>M1 zzDdRt@=O1CMNfVMvXcbt8ss`!0qwQFMOM)rAcsW&bm?J)GoSMnt3R1r-E^zj?v`8J z3%CMQZf+mmIA{b|L_D8rMK-ZjJP;CMj20g*pcGu-uWXgUD}vA&u?@KU`?BW&pvSt8W==L;&>33HAtdUIWk19yl5O7;T)gKJYn%{xu%g7B) zMjZl-yDaU+=D(>auIs)j2dU$uFe9dQdcvAaut4|6?t#lb1qMX?V5kF{HRv({$(Z}+dpri$qmF#J6kJQbkl zK=ylLF%l~Rff04SHY{-~y5jg642Jt$0fYqj6QJ^Kab+mA*vSnWl3@{0#gQC7)B&Ld>dw_JHK4?no`pD43m9!!^QaswT@PzT z9Dswts(mmS;9>#S2(5Wuab&%$VM)8Ar2pXf3;tPlwy>N5yr#9{+H1w759Dtbs3XPw zQ5J-x-^Cm@Is~$i(2ETk-P>^moC1FI0V)9e>Gm_UwKzp9BD1%L4&oFCIgG%hxC)6pq<47dPbT^&2P_nh>O>x zfDAyp%;djnsmx_!7Mh!7g#>~z6vu(RU}rVygBP=wD;)ZqE1bqNG9zQ~{6iX)VmoRPA^q3lr6NxDaiQ&?go4% zFw0S~<_8V6l0AtPn*Y&UK^7f}Vs)epD)JLm6fgFjQmlDyrM33dHJWqt;=JdC3>B$d zE(P5Kl6Hq`RoPyUdTpGzA*Ycig z4K+YvJcqmh8j(&0Ik*)RNM)(c1hM5k10HHP*>{25CIC)KGy@s-wX{K5J~I1sf%UY0 z8t}j@uF8Uf~eFu)nIWM#+h)T3t;dUo- z0}qGDYn4!H{wr)og`48 z@=-kjIS|JSxjy&+@FO-1m6#Tb8o<@xZK4l=3jsX8!|M>}eW}={&Z+|B8jR^YpJ2Fv ze4?5wF5g_UuslrXWV0@S*-m#YwW6Dk(%8FzH*`TmreiHfIACo3Q*MARJ!LL6KJfrE z*(N4`{S+7QX;2Uwy$DHLGb-f?PzfMZSt|QTdRZgJacJF~I&$HO!bT8LD4Y&BAUCj> zn(9xXe7B}+y5Jfw-#If#_)^d$@wety)~gybthX3WSo%8*f)sqI0sQlzimHhEhonylrI{$N6bD93gXLKW&kcz1;r!0LrAtm-_{!t7E7H{0@ zaR7U95#h~TOSa?slRN-#_FWrc%e~w{{z$t_zvnaP$#_E>g@eJZ?)8IP`o~=Xeq5?5 zbf~zwN!bBt0s!u?1aVH04wnlEwzLCdLpEzJ(mgPkNtN1zFu{74KD&hv)+m2~&zXM= z{!a@2g&nuHf7KSWMqoDb4ulDyV8zMB^0hF9KRI%+BRUSx*ARPM06*_fh48^(YiMXk zEHdl}x;63!IhWP>AOGJwY)Yv`Jo})e*W$Cf=NEq zpvh~R?Piw@XVEz^C&nQ+d~kGryXMo)qXZoNluw%{qZtPLLr+HI^50*_GvIRt5}OBM zyViLU%<(OkglBE4fT9B-1;ATzqEHcL100>A?_$ZXjet1|?D=~|2O^4G5K&0m%46Jv zN~=9`{7Q?}y16C8MRd-z@3n|~|C3(yuy-kdaifn{&pA}hKUnW*or(ami_OW;iYUV) z9MyPF3_zli01_43(z?lg;<`}^wO$@(tYV+G9zf(-zw}&lQoa*;S1n*IRRWuXxBNvc z53XAT_|yMN_-p+f1Q=Z$&O;Eqr_Px?PipbOD0|f1#xJXmTxwr4j~QT8dW@fVS3Ja+ z&J3osygI9QpRc{Yp`|iJU%bauFp5xe94c0gg*}JJK@&%EKmc6+Ke*u!Sv6!hV< z5zkP^t2LwJMKzI;U!|04K!-PFWJN@C{K2O)8h=xHfW`r9jhJICa+h?EeoFc&uE=OOz6v9(!2O8lN z5H*_YpA>*6-IG}U?zw67A4rD}al%)NS(c6H_A{rRqxQK6o^kZUW{(Ch+48 z!iz!k4ZA5BA1cm`HB2K;s3{tK`8C^M$sN{5^!R6)K)=XS0cIXBAck(-0`p~ge&SKM z?{xLvDG2=*H$qpU#A(v!fvlo67%cZW3 z=)iE-0!}@ys#aU)B1-EesPiQ}&I4)x!EP!sO~P#w?vqRzvlIn!%Vf}MCKsx}0}g@8d-lEKGo zH5Ga&u}HcQ!@{1YrBEPklKMhUm4jN!O{b3k&T^f}1)@hibSe!fo7bu06pgocO(k>y z`S|J5eNGP@sAe!1g94UkSRH{V4p{O)bh#)ew4j?j9wb&{V;zTI~6`8CA6j5ts#}`w`LvHk19U(;{VXedqxsmtFa?t@1OB zG)~!d1OLma%6H@(3ewU;ZXF0AtbuDGF@UQ zTQ%cDLgNwFj&F$E0eicAq?uyA-TBikn3A$IQ`Gx>5pGlj84^r}fm9;|PD4tDuOe*Z z&iK{aR@q8Hq#6&boGD@86(B(_f_3#E9k8cD!)Mu0{mw6PuB5xlW^fDxB63FqU6`3S z7xdb9#*RPZ&WD{)Fm^2a56PcVF^yW5itONA&k^OUEfgghaK7S?lhV!?-bSPGkZ-Ly zQf0#(On?;Ord{tDTPT^2MZ<&<2vsCVLgUDX98oKgf$AiML8=@!h?Kmg$RwKP+AiFR zMhAlnQn7!5`{dL{_OzzVYuE(WjC3*<1xbFx1m?LT~xB|jRhv=jU zWS~85P)2d~5m&%fG?wA;sx0cipb3aAAoL@XQL4=^vUA~#SnrNA@&p+4X&OK^izN+k zB9KF2Ms9l9tdF_S0u2$xJ3#*#qBBq0&-z`kE1aOclodqZ0e{jb3X;)Vd*QAgxssCu zsSQ%|Q`ysZlp1xdY0A z<(oF7Lp*;8>}H4{!{$T}48!9IZOXhR!Xa`_w59kRy%;u0`k}T_)vN}}G@r+iV4MqP zjo?lyOAiS~5`(&)uuoG+?FKM;Ps_3}*4p3w4w?1i%~vKhYkALtioHZ8{j#n~LVs)S zgu5fuXa30;Hg@kmoT>@m#VQbxARRDn&(Tlr$h{e9X?w8N5^x7C*Ya)zo%Rwhvn+8C zeKVK$+~;QSaL;aY*{^PvANB0pF5DeNiilzXozbnbw%igX>$Vd&4hU&8nm zn`L;UfMmuaykl^d%4s&+@84{zx1qKm8kz|Zu&%QEnzEU~yIHg)u(caHi%6{t&d;V> zeC}B&Mu`JER}~x*L#1AeHN5VNv8I)UO`fzgBt;U^g5R26-UhM{(09m@$3&4^YhacO z2F^;+r=ffIdWD`nTqB^h?R1f~kPvr|3Byvx{X>hsj9QFz(;zBSF7o}5{toHWjNj@{ zBhxjT;W5KSS!lGhLT0}7WKR4oAqw&s?%JxGU*s{@qS%n+k|VkDO|e;E;hPkR?nCm@yuTRZS&`$|ZHaZC% zl^4)a8M^T9#zG|SZRb}$?$wIiAip%Y$iKWIh|%}XYq-3QeFW($nZT9t-X$bGV7IWh zalaefJYo8b4C0zaauBv(p?;zVe_*)1J?8OOXhE=l^!O|kx}uyvdYR=)B2jDh;63Kg z&is|Pmx=d$z&nb3$EGmjc3xtPWQ|8sqp^wA8R5_XuJ|`yc=b(RZpLgF>(U&o4~0R3 z|Bwm-k-Y?lS!I9d3~sw8gIO`9+C*9Cdx)e;HZX#A6S6z}r9|Sju(^r@DsO*}sA+IC z9$G2-@#)GY|794De0r78@%zh)b#^hqRkeWu4%CQB<;XBp<+KFQZw$=x^jkCqhGKR~ z`#uab)K3x^g+U%pUaZvKD|ICxq1IkH94_c#R|i0ugd7}xjjqu+f(TK_$f(!*U3bX@ z!@w+$d9l>Wye@xfZ}mWfcv8?)<8?k{J`9%UyI@{QFm!1^))L&cV_erE7`@8+19TlJ z1bmt4_>minObTKT$)(82(HJONiHI*8C*A5L2a?=!+UHefmtTNs&4@wF<;VHZ02m1u z3@Cn^p+|sW(<{6NSX@YQn`^Mm*=mrYBvZkWo(v37~5M7KxPI9OgWH;noI1Tf&=MQN0ijgT@Rz=lM;VuP} z#>0vv!w1h+jHd~F|2@IT&?;Q0cY`dXA!%J)jWOxrK13%&i^cmQ!qwlYho<~@4~y_2NH6cj}c8@H6z`m&Z7JCp)-gXc#I`w(BDq5dlz+JPM_M=-71K=D`RQVMSVC zJTf&mp#ADs7{mUzvj{%35|XxIyl;XBG9P13b*Oa!4U5~0MMV(3MHzif`Ok;|LP>4D=<%-{IiAOR|4xyO@(s;Bgx zdjjjp@_Av1{F#Wu_)`XxEO51FbL!T1P_FZlZi>*{{ki@`Z7;~2u$ow-xb?_)fW?4n zy?FuI00uXdNrDV^>Q}rEZaVEG(wiUl#~>OCBuQFwe@JTqh%-P2ldaI~M2G7h)DJZM zB2lnm4MU_Hzgd)n%Auo6)7A;nJ(rPt2H7 zVrF7_!TpPy^6~TDaLy#y#&DEVOm)|korM2I^C5+-BL&ig270}9>lG_4oeC3u4T0XkjDW$(uuE8~5I>&m`DBu)Ue8W<7C*HHE;*ma*JAH(9I`n6xE zG^%2u=m$ecpCunit7bgn&GCp>uqcA+Pf1Z;HquPlRdMgV10M~!OdU=w`cR8L)S?f9 zTJ)h7eW*nrDtd9X=tC{~Q1vNOi$2t%kAFLhBWlq{hFbK20G-sL54Gq6A&-m?^{7Q3 zfAhp(t5l0V)S?fy=tC{~fH^3&=tC{~P>Vj)q7Sv`LoNDHi$2t%57jXwwdg}F`cR8L z)S?fy=tC{~P>Vj)q7N8DQ;R;pKuaz9P>Vj)q7P-J0OlNO(Fe>Ot3@Ab(T7^}p%#6p zMIUO>hg$TZ7JaBiA8OHun)HGA%&AEqDl&03=|fHWP?J8?qz^UeLrwZnlRng>4>jpS zP5MxiKGdWSHRp{moQp&g z%y!*l%Q*ih=_959?*?f0{{u4!2H&X~s*H0?th9!?%k1IB31H#^@7tfWn?eZyXV=`) zy<4^#9Ld|aAZYe)!{2`ZuTk#~1^_rEhjjw(hBbDc0^{;Wh|R2z>jh);ul-6;()>h^ z>Zpk3o&S}$=4?^H?70**DMKTK!MaDo3$Fu*d@^Bh)jWhl4v>#2Rw_Qbr+`BakdJa& zF~s#a)G?-NI@=r)KtNe!mZEZxd(gpMk3}E!zfyb^!F;U3UB`_EA)t>h<9QEumzOEYQ!xdVvxtPSC-8qY#1EqpLtt{QM?g`{S!SqNb_4FJ&PaUeHIdy!UrYz! zXunwnzQ7H2CcO>iDo(!TN(*`=^5c)~OwM+u{Hhtj&<+6vBCsaPD+BPf-R31OaiSh3 zz9P#WyT9N`Cc0UcNV8x3Sg%qui2P^sT?hrt!0|!SFT~_k07`G2NC?eK1M=E>f z)WTnXv8SvaDqJPd;u$NMehblY66=sIel^e4KVzY^=gZiS%7GRj0-MO#!Y!*h4-Q}d z1;J|IfJdHNl;Uvy3RuRnQP>BC+NMPa&hfVWrK=8Z6jI=NT)(g9&uPR8Prbrgi`g9qZgPNf!XX6$H*09aq;K5mVW;} z;o%%b{v}IF=_-ZvX)vwWq22T-c)vEC1cEQSGwu9Pu?Y3?+x5c7j~ox6OfM*Qd)a+$ zygpB2SJ;(gEtb0KupV#Ace2_-i*74zROQ)z%)_tr8KVzR!G2o42Z)P;u`|3aHhTjz z=WAvZ{%HDQY;6xh{TR8w)KFtqMS+l+r$uAsJk}db#YkPbIsK+qt-^MKYf9+^Ti>xP z+xOJJf+-nxiWQ^wg2Zz6dPjxhp5!0hf()9wt?*{hESNG2UXUBguYruN`p=)VrSS9*4ENbqSoe z_dlIXbZ~@?kZWcLUqR$1QjFZ5Lh3{55LQ}?e9atb=K#cx%T~eQLUZ2tUUo88aSY5_ zUqszvID96;1>c{Yk+N?pL>8s#!A@otrp)BP+kjM z!yH`9!w2mDc_qPI1hM1lvw&w6RpqB^@i1#qwM7wfpl>V8-GYIns-*Tk_=F(N5pZMO z<^4mjJcX!xr!coS-3IIUBwXK(y$+GB%gEeDZ_lJ-s!q#!eZQu(yXUiG9yNN>(e7`; z1?U-AO+im~XOIiC_bdVtAy<7xdia#T_zgdX0LKc?$%<-6Md|sJ1racz&n@!IKF$>V zHuaH!@6DeW`%GVNN*EtFeK5WRAf@_20FnE<0B05~X4i<1gGaDOQe7p28XTu1R$3`- z*=bqk_vyg|%_Qbl*D?>>Gwt3MTQb+vyKzGFQU8F-w8mTsN&ldGjCWpyJiD`45h0Q% z^aBo%@Btxm+{3-LF>=!ai`60#3Xm@dX;2Klxc8;DKnme`v~E}s#ku0LP%&v;Eb+55 zCxyqX0y1Fxpdnb(x;3W+Rac09#OrA@QzDvgVGzLiBkBRP>H0h&lf6G|z;Ad?8Q?QE z6f^kQCrmeFsC>mU{lJ5Fa5L})v^hOjYtQ2xUj1!_>txh!PBI8NX|qa>CBXu|(4%MX zMsfkHV04BPlTbN@WO06$EDKhc>Q0sElwidGBix0r8G!njk@aBQWA|e}Q0bLkxR!fL zf3VWRDk)GT?=|*k6dcrrCwe=+*3Q{@FXrYENZp*KEw*rjJHkTC~<*%?oEA(6E4jwinHdu(MK5XmU8 z&0Ds>*nrcx5~tCJx)$r<@i<)X{VLTr!Kbx&bVuDl=6rzFG3rf+N}g^ztc8(RKFt@5 z#nATxJ`2^X`Im@kt-oYb%Yn!upj)CkGMt)TafNVp|z1R8H}YG(NWV6%I2gsF2@~V;3^+KXXj7E zq60*#B4b9(!|4ebJkv$+G^2m=$TJEq8W|!GkKfWAd-D!u{o0VeQE%J6%p3{(MAhx1 z`kR)zuIU*M^^dm_Jfb_x2YE1aEb*6Y@aYEhUdknQZD3|_z!o^mf3EwEX+=@IUX<<{ zwTt0FPk)@Kr*%N)BA(nbpG5*kgKHkrR4wDUw)bec4s1+J~t zX6|NSFqRPrLJZ|6EOy6fE#Azk1ak?PuQwpx!IjL6lB21kCeLn2KO-8FWO<`Q0OmGN z9y};Sndy>7Lu?XW1;H->oN|B~6_*K@&n;RssEqS)_8zpz+gmTSG zSa(I&Ro-rQg@wvb+>tMNYJ+zxO$Q> z7?91QA=guWNE{k%rE_NlX)dH|ge@2I+<|+lgJ3j}>pg_L>NS!FO!XyO#LGI1KHFa* zoBe}qw{Nkz!5v2$>IkF2?itS;0tVs6MASa2L*}D@j5Knmq7KD{F<0@f&VoA>Q;uN2 zg$&#psoeF~>E;$C)0rn%kd zbqQ_1oG~KNmfD3{i-A{~Co#60LTRD5$iM!0mKkj(xhS$5sclqQO>iz%Z6fNL{m7t4 zq#x~E^@KpwI+!?TLF+yh!vL8K17M`G>DTruSv%y-efCt zT2hjIvl6ebf}6d;!^g*vAK!dbz5=*Pb-OMf2U4iCcL@OkAvasIu0y_g5oJ8B`(@^W z%4n+=&Yy%h$p=^I%ZX9%L_S{hVxaI*C!r(LqmCTfNebuzSl^wQ;B)VR-l~O_3Q@YW zjlNcS98n~L>aS@8yQ-6re^=b+aXZR|WLcvxJN|lrGwDiy2XJ;TE@qdTcZVx6gMc0Y z`mDj}TpIs0iNxu-RxwSWDR`EDBX5~4Fgwh8)AC?pUY2yZ=)~oJa8)s-uUZ`C)6vp( zANjPW&JpmD)sP2Nr|*Kl$~m6npONLwZJTG-Y zN30b^R{w_k7yS@I^;>RH;FXkwd3S2!{V7R|aK)W$I@hdPgz4Q`>XZAdtj8oiX!yaj zgkAMdUY%!_&c0Oomk4#4dWdn-bk-X2jwy-uVcv&!T^ceoBrUGPT+Z)$I8E=Qr$yU? z>64SNj-!&;mFuBHJ{3P|8C$rLKKyl>dwJc(%v$@VliZuVfnsuLWXvWeC)PT>MR$+J zG(0oRN$R3o&Cp}QihEzO&rKi8Pmnk(45u6 zU(VmD(>p@%pPb+3p0%yAgKPvY`ghK1X!JIk08qwZ_G|FvZyqv76+?al=m*36t;jXs zM(pQqWLV(m$;;9@r)k#8j1x^-32t6~@&0YZ%pa-UGy4ORqfLdv zE)(8b(HoLMHbviHznGuKU&0c4ZnDd~Tu)>X!Og#HsaYPTttBE(&Yr~mh9u9r)8Q=x z9W!K5hI4<&UmHMW2a%s^Xsnqh?kI)02lsZ4b(l7CvoJx7imx4+-@;iy+zJ4cIqZEe z*l~bCnNZ@1pOy2fV_i<>?&sWcz{gEX2<0Im+xPy4lp`*jWPS>U&04Po2eb+%+^j2T zL_9X_Cok3%W`uyh#I=r><6>p;y#uXOf9NZh6HZmC^`rO)up|CKhc`mMdnSNrZ3>(P zXs_yE_lJ%2`bzxBUO~-GQJt-sp(|a(U_bj8&L;8}0-Cx5x-E==rwvg_{_ zE+=45lxDvkP=!Ec=g4LshQiFgq&5>-Ki3Md1`3*<7Ga=-`e}FXhpBXphrf7w01lg{ zFw92t8oFXdQ5Vk9MLIZdzdq?fCl?FpGtXARvvbbPU*{zLvz6?~$jLnCLPlSq5hZ_d ztpJhvCi-m|0-!#&q??DpHDI3wz^V4`Rb+khoS$(^S8sB{!~$V{1^j50E%I2=+ll)^ z`&r3TYaaqSROIzxd;0FL3`INZH!&k#65ol4iB{NsXQmngUjlEIEz;hm9|`A1Bm+>E z9x-O8^qm$JCzvE2o%p#|=iF((Ia*~S;LPkLQfhs}{$t1?&#VX-Zt(d>J>Kr( zkxL`~yoH%d1swUow0+a?Si++xk*zey)EMj*joq~M$nzn@GL<_@E??sC;z|F^nsvh` z^tHMDyiS9lYb~xi$t(ZG|C8 z?7F^)!y?Z>K)?af8W?rJLyq*Bc;+0>d0$hraWK4JpKJg}lP8y7^0Zhm_LJw2Mi)*Z z_eWqsvhGr7-dK|PsfNV1{jv&U^F+uGT8c#hkadMF{>|0X?2T$kb0zSZ&Mril7N)QQ zKc1+%z?>Z`?cQ^~g1E4|Q-46Bi@HYFu%{@J@HO#Q|Ds#r?~c7o%?o37sB4kqNKK2Fj zIsTrfWU^wRJWn&6I|~A}yN0R4536dUeR8wvh*`&Nns>#MAxvjn=5Eaq+vec4^bHOa zlJ|*B!V`#crQn8tnCpK1K9NprU!D1eb^AUSnBdf|%*ia@$|WA#YmAVyGw}JcE zp5oHSsTBDVcM9|ae{v4n5@FD?$D((K3i=w}W-sTy>hQrQP1Cny*I#hYJh!dhS(eRS z?^m(dRMw$~|CYa*8S$0=yd&QPWy*O2?i6Za2=;nDN1oT%h7OMtdL`Tv3MamJVa_%& zE}HB1S=!DX;LKv}Y!3*om~HCifvz$p**lhLA9~3VQ8W(gY`IO+H|)5y9bRKkM`^cb zYqwphj>=oIEZ{~8ju>k>z$*#$^kwV^)*>1<7K-(X16!&|+OHLow;Rlt5>3Kg z=Xh20aCfWxd55oG(3pn455;>$~p@6$sm%i3FkR50qU2)@otYQdiL| zz_2VpkK~CL=-^II_&_^|Ihh$0sL7zOta)oO6349dJB7!GjZPuO3vbx?)7Y6V^2Bfa zowT=h`Ta4?;vpgSExix5jo#R5a9Yp^6-d#|i94Meq$pD@07LU|cp+=x%$}2V7a^zU zvgWRH*TR}S(E+k4I};9&gY$jFQBL$m+VNNpwz5TBEbTf&4tLOdIFotq#jbrlQ^Hg} zE`ZvGih2`&yEUko)!%<+-8DF%rmQ*QfsVe!N9VES1vDb$cTPD!m_6Z&8fW5uh`-e} zOn;%W%7#ukRi}?tyc1+4m(bP^Uo(DwkNbCwvO920I86Z}D1Czk5tFpKHIl_ToaIq( z(mUKZ;Nc$Sa;ISfT+07B9gyPK;>fmP6Fqb&qy(}K0TKu(-*Tv1nGu2_=P)a3z8RfU zhSOW2*XF57M~Ckbh67%wDa7UXOY75Asvk)*D2PF#p#AXdRKtQXZP|J2hzzLM&ZTlv zdB$c2oQ5m|A_kumE|7c|=Z*V8A0I0;lr@?~vG33hMb+w`@|(Ec2R*WqZjwVge#TX1 z?zNL8V_q?%hvmj_ks;E#wkf}OCI14i67}Im2MQG`H#x@$X|lRmNhUN;Ip?J^{WPi{HRm5}V3u+2l0mx>upu`&|s!C_Tznzms|>W27F&pvJD e6B9ms(!l%>)O$z2e=Z9C^Ip1QNr^`U?|%R?_-@1i literal 0 HcmV?d00001 From 619b5700833ea671faab4cd4b8b708d9dcb19b6f Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:01:36 +0200 Subject: [PATCH 023/151] Update Slate_API.md --- docs/Slate_API.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 2808cb1b0..72181afae 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -25,6 +25,14 @@ from unreal_engine import SWindow window = SWindow(client_size=(512, 512), title='First Slate Window') ``` +![SWindow](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SWindow.png) + As you can see just by instancing Slate you will create and show them. In the C++ api, each SWidget has its series of FArguments (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SComboBox/FArguments/index.html). They are the options of the SWidget, and in the python api you pass them as arguments to the constructor (note the pythonization of the names with lower-case-underscore-delimited conversion). In this case the ClientSize FArguments (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/ClientSize/index.html) became 'client_size' and Title (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/Title/index.html) became 'title'. Note the shortcut from FVector2D to a simple 2-elements float tuple. (both are supported) + + +## STextBlock + + +## SButton From 060e66011c432502b45700366a2923e22a141597 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:08:35 +0200 Subject: [PATCH 024/151] Update Slate_API.md --- docs/Slate_API.md | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 72181afae..9a1b2e350 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -17,7 +17,7 @@ Each SWidget exposed to python has its ue_PySWidget representation. You can get ## SWindow -this is the first widget you generally use as it will be the container for the others. It represent a window: +this is the first widget you generally use as it will be the container for the others. It represents a window: ```python from unreal_engine import SWindow @@ -34,5 +34,35 @@ In the C++ api, each SWidget has its series of FArguments (https://api.unrealeng ## STextBlock +STextBlock (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Text/STextBlock/index.html) shows a simple text label: + +```python +from unreal_engine import SWindow, STextBlock + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +text = STextBlock(text='Hello i am an STextBlock') + +window.set_content(text) +``` + +![STextBlock](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_STextBlock.png) + +Again using FArguments (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Text/STextBlock/FArguments/index.html) you can (as an example) set the color of the text to red: + +```python +from unreal_engine import SWindow, STextBlock, FLinearColor +from unreal_engine.structs import SlateColor + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +red = SlateColor(SpecifiedColor=FLinearColor(1, 0, 0)) + +text = STextBlock(text='Hello i am an STextBlock', color_and_opacity=red) + +window.set_content(text) +``` + +![STextBlock red](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_STextBlock_red.png) ## SButton From 92296bbab909f9df409c58fa612d7d5bfbc0446e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:09:26 +0200 Subject: [PATCH 025/151] more slate screenshots --- docs/screenshots/slate_STextBlock.png | Bin 0 -> 52459 bytes docs/screenshots/slate_STextBlock_red.png | Bin 0 -> 52777 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_STextBlock.png create mode 100644 docs/screenshots/slate_STextBlock_red.png diff --git a/docs/screenshots/slate_STextBlock.png b/docs/screenshots/slate_STextBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..81c87ebe32529f6a1ede39d604979cf2fbcb9017 GIT binary patch literal 52459 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%0Dh2Js(u~Cn^xo}t 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/slate_STextBlock_red.png b/docs/screenshots/slate_STextBlock_red.png new file mode 100644 index 0000000000000000000000000000000000000000..062b1c4c568de1288ba01c6416741fd6086411fa GIT binary patch literal 52777 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 literal 0 HcmV?d00001 From dd86bcafe4a43f420f473e2031f6a89e462faf09 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:13:38 +0200 Subject: [PATCH 026/151] Update Slate_API.md --- docs/Slate_API.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 9a1b2e350..374d04c64 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -65,4 +65,41 @@ window.set_content(text) ![STextBlock red](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_STextBlock_red.png) +## Dynamic binding for FArguments + +As in C++ Slate, you can map 'delegates' (well, callables in python) to some of the FArguments. As an example you can dynamically change the 'text' attribute of an STextBlock to be constantly updated with the current time: + +```python +from unreal_engine import SWindow, STextBlock, FLinearColor +from unreal_engine.structs import SlateColor +import time + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +red = SlateColor(SpecifiedColor=FLinearColor(1, 0, 0)) + +text = STextBlock(text=lambda: str(time.time()), color_and_opacity=red) + +window.set_content(text) +``` + +Obviously instead of the lambda you could use a plain function (any callable will works): + +```python +from unreal_engine import SWindow, STextBlock, FLinearColor +from unreal_engine.structs import SlateColor +import time + +def what_time_is_it(): + return str(time.time()) + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +red = SlateColor(SpecifiedColor=FLinearColor(1, 0, 0)) + +text = STextBlock(text=what_time_is_it, color_and_opacity=red) + +window.set_content(text) +``` + ## SButton From 8bfea17fc83ed23c618e0e48b7136acc2390cfb2 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:19:46 +0200 Subject: [PATCH 027/151] Update Slate_API.md --- docs/Slate_API.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 374d04c64..caff49b59 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -102,4 +102,27 @@ text = STextBlock(text=what_time_is_it, color_and_opacity=red) window.set_content(text) ``` +## Content assignment shortcut + +In the previous examples we have seen how we added the STextBlock to the SWindow by using set_content(). + +This is a very 'procedural' way of dealing with GUIs. Technically Slate (as well as other toolkits) enforce the developer to a very 'visual' style when describing user interfaces. For this reason, if you do not like the 'procedural' approach you can abuse a specific feature of ue_PySWidget objects: when they are containers, they are 'callable', and calling them will internally call set_content() (or similar). + +Based on this you can rewrite the first STextBlock example in this way: + +```python +from unreal_engine import SWindow, STextBlock + +window = SWindow(client_size=(512, 512), title='First Slate Window')(STextBlock(text='Hello i am an STextBlock')) +``` +or 'visually' better (note the opened bracked in the same line of SWindow) + +```python +from unreal_engine import SWindow, STextBlock + +window = SWindow(client_size=(512, 512), title='First Slate Window')( + STextBlock(text='Hello i am an STextBlock') +) +``` + ## SButton From 3f6a97da04720955cbf55d29239c07b472ac458b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:20:50 +0200 Subject: [PATCH 028/151] Update Slate_API.md --- docs/Slate_API.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index caff49b59..0f01a9a51 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -125,4 +125,8 @@ window = SWindow(client_size=(512, 512), title='First Slate Window')( ) ``` +## SVerticalBox + +## SHorizontalBox + ## SButton From 69fc327d7ec35e4dc7fb44fb852c79e5828565c7 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:26:02 +0200 Subject: [PATCH 029/151] Update Slate_API.md --- docs/Slate_API.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 0f01a9a51..0edacd4da 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -127,6 +127,43 @@ window = SWindow(client_size=(512, 512), title='First Slate Window')( ## SVerticalBox +Boxes are one of the many Slate ways to organize/align multiple widgets in a containers. + +SVerticalBox () + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 0]')) +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 1]')) +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 2]')) + +window.set_content(vertical_box) +``` + +or in 'visual' style (always note the first opened bracked in the same line of SWindow to fake the parser): + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox + +window = SWindow(client_size=(512, 512), title='First Slate Window')( + SVerticalBox() + ( + STextBlock(text='Hello i am an STextBlock [line 0]') + ) + ( + STextBlock(text='Hello i am an STextBlock [line 1]') + ) + ( + STextBlock(text='Hello i am an STextBlock [line 2]') + ) +) +``` + ## SHorizontalBox ## SButton From 4b85b059e5be2a1b6d5cced500278d65f8b5a42e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:27:21 +0200 Subject: [PATCH 030/151] Update Slate_API.md --- docs/Slate_API.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 0edacd4da..8656760af 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -129,7 +129,7 @@ window = SWindow(client_size=(512, 512), title='First Slate Window')( Boxes are one of the many Slate ways to organize/align multiple widgets in a containers. -SVerticalBox () +SVerticalBox (https://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SVerticalBox/index.html) is a box allowing you to align widgets vertically in a container: ```python from unreal_engine import SWindow, STextBlock, SVerticalBox @@ -145,6 +145,8 @@ vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 2]')) window.set_content(vertical_box) ``` +![SVerticalBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SVerticalBox.png) + or in 'visual' style (always note the first opened bracked in the same line of SWindow to fake the parser): ```python From af3e92d43197278f78644677f42c32b82ec508cc Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:48:52 +0200 Subject: [PATCH 031/151] Update Slate_API.md --- docs/Slate_API.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 8656760af..68ba9be72 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -129,7 +129,7 @@ window = SWindow(client_size=(512, 512), title='First Slate Window')( Boxes are one of the many Slate ways to organize/align multiple widgets in a containers. -SVerticalBox (https://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SVerticalBox/index.html) is a box allowing you to align widgets vertically in a container: +SVerticalBox (https://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SVerticalBox/index.html) is a box allowing you to align widgets vertically in a container (each element of the box is named 'slot', a lot effectively contains the widget as well as various attibutes): ```python from unreal_engine import SWindow, STextBlock, SVerticalBox @@ -166,6 +166,56 @@ window = SWindow(client_size=(512, 512), title='First Slate Window')( ) ``` +## Slot attributes + +We have seen that the mapping between a box and the various widgets is managed by 'slots'. Each slot describes the way a widget is managed in a box (mainly alignment and padding): + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 0]'), auto_height=True, padding=(10, 20, 10, 100)) +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 1]'), max_height=173, h_align=EHorizontalAlignment.HAlign_Center) +vertical_box.add_slot(STextBlock(text='Hello i am an STextBlock [line 2]'), h_align=EHorizontalAlignment.HAlign_Right, v_align=EVerticalAlignment.VAlign_Bottom, padding=(0, 0, 50, 50)) + +window.set_content(vertical_box) +``` + +![Slot](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Slot.png) + +The first slot will have its height automatically mapped to the height of the contained widget (the STextBlock) and a padding of 10 units on the top, 20 on the left, 10 on the right and 100 on the bottom. (more on padding, later). + +The second slot starts 100 units below the first one (caused by the padding of the first slot). Its content will be aligned to the center and will have a maximum height of 173 unit (we use 'max' wording here as the SVerticalBox alignment could be forced to make it tinier). + +The third slot is aligned to right and vertically to the bottom with a rght/bottom padding of 50 units. + +It is pretty hard to see what is going on here, but adding an SBorder will clarify things... + +## SBorder + +SBorder is a special container what will add a border around its contained widget: + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')), auto_height=True, padding=(10, 20, 10, 100)) +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 1]')), max_height=173, h_align=EHorizontalAlignment.HAlign_Center) +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 2]')), h_align=EHorizontalAlignment.HAlign_Right, v_align=EVerticalAlignment.VAlign_Bottom, padding=(0, 0, 50, 20)) + +window.set_content(SBorder()(vertical_box)) +``` + +![SBorder](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SBorder.png) + ## SHorizontalBox ## SButton From a0e9a2dd1a41fced5665a22cb2da5e977614fcf8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:49:14 +0200 Subject: [PATCH 032/151] slate docs screenshots --- docs/screenshots/slate_SBorder.png | Bin 0 -> 58429 bytes docs/screenshots/slate_SVerticalBox.png | Bin 0 -> 56642 bytes docs/screenshots/slate_Slot.png | Bin 0 -> 56110 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_SBorder.png create mode 100644 docs/screenshots/slate_SVerticalBox.png create mode 100644 docs/screenshots/slate_Slot.png diff --git a/docs/screenshots/slate_SBorder.png b/docs/screenshots/slate_SBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..4503a8feeff8141ce7dedda1262de2cbe0f9636f GIT binary patch literal 58429 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 F=l>H=!-4<+ literal 0 HcmV?d00001 diff --git a/docs/screenshots/slate_SVerticalBox.png b/docs/screenshots/slate_SVerticalBox.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b11f2b06d5da62a452ec28b585cb412f9864ae GIT binary patch literal 56642 zcmZsD2|U#K|3AZ+j8Gaz(x7!FM;lR%W5^=OL?Jn|<>){|#%+elmO@nInsHx6ha$#V zv6U-FIvnH3ILeG;80Y-oqhGtV-~Z#W``Gf>d41lW_wjmO?{N)#%v2aI1?S=65jHnF zY|X<10e^<<+9UveQlw840srB}S(_U1l(tDvfWPp2U@S2_JdfgqR^6cB?}EN&r*J$x zA}_fA@;3Vv{>j7B*K2+la{}-Dbq$&j(0?TZcF6DR^^ug}BYVR9TCN>$X=%Ct*S&jZ z-_{aU&k3CNCD~OCtH$2DxBWu$Uh{j;kFNFN!rK?vO^4p=;}-ST2BzPCEvBzjt$eL{ zpMrZZ;GQ0KY;omK=JIX3y5Qxmf%!?!a@~4a31@|~UKisgdDV@5QRE(ly|X>E>2zl8 zl7J6Wz%F7we*ImEQYLMwZy!t7Kgg`Or>)KytTzYFMXbtj zn!PUI7d#>soK_j2YB)=2{Uy0_%xe9$LD1Ghl5;=5R^HzD-&2Ech&ADFERjb|%DIcON}VA<^MvdcRq!(p6{+r$!e4XHvWsM~jX?lNIR z0`AE)elM|iqgp%M^0n3N+}C{d&P?=bn{k80WW#uNe)LtMnzg+y6e{-OUBW|!j#iHJ zC*A0&;jcs1X;W5fMFuSSj`6f&p|FJ+^#;$$@3p|lj62JlPj|mPNDEZi>~Cl{>tbr$ z01tM??%O_uK(Kc~`4pi1_JV)PEhMDc=GP_H$jM#I)~+)ie}DVJ(cY-j3OkXP6UpEJ5T00PfjYh%qo!i2URCSH0FNSz_H+EOt_Ns z`WKh=<+)*Tml^T0nP%sSJI)j4@l(AwSe+VcomRx>*LxP(oVT@K-)1%u?ZUs<)#lgQ z`C6FN)h$yEk?zK=r(Aj$ZR6|u-q!RzjmsW0AfE4RXPsYj#>97}m||>NA88xty<^M; zO?D|@ElpAl!op9dez3_{Vuid?(8^nDZa?d>K3`LlTD9V$Ev{<0&c2)fn?Z!CrGA}( zNZy2)0SBIXa1J?M$Z$DhpwOwkuT^wC$ZL6D#8|uI+Njm~XiswJ>tx4hjrC!T+U0DG za9&!izAS>xXHc+mymv7}JW1MX6%r)sBJ zoLK*(VdNR-wH}u+q$i;_w6zy~b1t}SG1zKXn2+dq@qvX|hccFfUrWx9g_`Nm@@qZn zj{0I9wk#Aeq~WNyHepp4Jh&J(Sh5&Ww|L0nU}^25K4VVbjVnCo`L2lNp&O1S7;Sdvaq(zZS0 zQ+4Z8ruh3eQgtke2F_%hwEJ(iMF-Yapz&KZy+iYwj>QKUy0qFf{C!HVNz~%z+*Kd; z)msmm;WAOd{+YN>^L|=OAC?0e>4EqbZE^j&7w)C6CtAq0@%e456D!3N`Eya^YL9Q% zi`{w(^yUtspE*=#k6Fd{psd`D!A=P4Dc3e&yC;L6HhuUsGO>dF# zHPt}x%B64DA1pPsr2=PFkE2m5@X>~JU`EuB{FBJER#FQ^NFuxYd*v}MaWocu!$P@;IE=EiV zwcyVagNyDTW%aF~{G3m2PaYlcIkG0p?j8U0LPmj*aG9UFxmT4SIQJLN4|_}-tj2JB zS$BPw?#8#&4Ckk&M8#KxR9D2t8^r0)T=*;4PAa`~ex1Qtx8sZruBMre^`BY5$FF1y zCcUa(`?!YEw9O1CqrE@Wp1)KVPCi6WnGve#5PI66q~%Jf@$O)3+cL0}F&MOs`j;%z z3T*qDzReGi)ra*e<}UU&aU${@}Crq_|UIVJB>) z?3x#sY+a`4rdp4#c&*}G3YytqerF6ak3MFn#4n|Ep{akY4RRJaYZC#Ey|ml;R!g_7 zo-flx*J(nVF|H4aDzuooYWTij$ylic+!I;>}YkEi7+9UrP5n(5i;_}F<>uV3nmN;82tF9c> zSB$;p*2h>bWdvv6aI8BPKf?(OE(oj&Ua5#!vBWR*E~d3rB0_y<l6I@@*ahb$E&+1xJeyvFSiR>PS~EgqTsrG++!I#YX2*Yxy=u62lJ#H}2P zpfl1Hhb3E(lhUq9-RS6BdX%Cj$A+Bo>NwPUaOWV%~=sqZF{5i>|D?R_q-HI3SS zN{@-eaD%;|0fu!&zpf$#27Rsw`<#T#7%Ahh>cW3FUvJ;3i=V0ppXzF#7>K6_WzvHZ zKjvhRVe9R^K6CqhaC*%LDp8avJ_9BnXKLK8;LxUJR$ypzV7hZKtqtbRARV0GB}D7Q z%_^S%J@OpUlxVc}=C}6Cll|+|w7aC$TE;>C@&b1q7S;+8zWg82ZZDkEevVxhr)zFh2EXH{NU{>D~-N1m78( z(gY}dRZ+jvjQY}o`Z8&3_@0;ynvX`jx*fFa@R1$^HjG0nuh5?!(VzCWi)2Lf28Q)c zd=ytaW=7w>+#A;4tLKH9{yNj(h~{&ThyWX*dqN$>*hP<`)PJxFdSi3UfXta5T&pf2 zFWn;_sM!v;G+53t2-aKYLQ{He^HQJQ;pW9~#$u*=-zO#FCWDb1Yhym^V|JV`b*srX zDMJqR+M}>=8thnmE}NyHU&)@iKS^GD5^*J1;6){8TxKn&%PG;}(6s$*O~fqVT0LO) zE1cI#z_B@oAv9OsS>{4V!CXqrmY0jqOJ;OH+d_K{i@*;K4DB2knrGQXuJ@kUWq8v# zU+q?}h&rlv<&Nep9R%22k#|kBB~3?eB9w|~f(e|~5O!T)g|ww;l(o-3`AhDy5P2EDP`@L7 zy_z#!cW4cs)W+&ESnIMITx}f;4VE}LIPy^#H`m~}+Q;nVsW=-XF?+)UJ@V(Mqh|*T zw5@NwBXdWudT7YZV`ThUfGBgOCeA{gQ)wQ#P4u|_Iu1Bc^M4e_uYHKGS^gZc;zK@4 z4#eZ^_+HRYA;`%B^L{sJoc0;%c0ZPz%z~TJx4y@(B=J@d);hs}2|I?Ij#$#*d{I%} z65cU4B(pwLP|M8ac5TyRbrO~jhtDD*ua&|&l`@RBXkT7i<|1Q>=u(2{ftsXh|G*Tz zfstq0Gl@JahOJLr2Oq~sJJ%^`s;)}AR$Xgn-)Prega5{%(@UE?(wAv-YLijzK}8P? z4{5u;T<<)B3|D7=9HP4zR0>62T8{px$~xDfR#-FL7y79n>=UcZ)LY`iW;ko*e*IhF z!E&Xl8J1=biEfMCI(H!^dDl{nuMr<_mU?E24sM1Za4BFGQ-fX^7U5%*u*2#Y ziy32MjznJ8tYQfq9vxG+xVS#h!&nC`bo+>pVbETgNxDZNO~EqUR&XE{nu$Qn^A;KuzAUq2V&2dt zP)xp4n4t~K?0Wf>-M37GJ<-RnB?|N2*>xaJs2R1zB?4={%`4mJEvlmc_m#kG6m7}F z*rb-d0GjG^D!YC)g27m;vE$4E2z6Pr;&gHRSzJuecamn;>n<&g@Qv)TT$Oqc*lD24 z8X#*LrL|mA>c6#~7V)(?{3`-cY4IpE`Sa}??HPQ|QZ!;S3|GUBtz%DIQEx%QjC>8(ZSnYM47FA+;FnOaJLqMHP%7aA`fRd)d3 z$C>NO5Hu1B@Tv)bkr+A2z2?s|nfe0L_7wVtgiJzB!@Dg+9X*T4C|mNTtyD7cJio>* z--|=9g#xWR+E|hLzWTlUdTO|=t2yslP37;WTIyB^rwYy+JY;;RXvtB0Ff#XCKmWo` zJAsyvh`y4xhIX`-n3gfBujZqB5smHytJ&wWVoL$Y5MMZp4Ja8zz2Zp%HprCdFbO zz>omTP}fPS%8|w24a!4Z)B6-h`9=>$kHz*65OsAr( z{wgc`*h^Kser?J^luD00w4)_zFAgO~;{tU==i8l8p#5`Zy`0zEEd*2c4CT|TsweyS zk)?dmA`sZq@b<;fcJYXbo7G$TYH07zd3798Zh3vafgkETO;c~;>Y@ziE3~}>d6rmq zM%`RsrgNvED2_t*IGo-)B+zO?!s#w@0nQ4kf2n^KbbGjh z!IKoV_V@UYk+Gr}UZ-d==f%-eTSu6kd>Z1u??x<>`Gqr(nimFe_0OY4!_|YXG%lvZ z2OY@Q^6e#vPM$qhsv(ZRcVcL?yJ|I~mUqMvm4D9&m}Zt!GPXp9Hw}3tFIxMmGu$Zp z!A-rZlgM7J-fsX@XDYR4jz*k)Oie$`Lpv3?wgalFdA#O5((}x!mZ&>p%}_|MQDZyj zH~rz?j?K++MlTAsz0i2RH^hIIsWuU3;*$9M_EMHnSkw*Em# z_?_6Ypg-Do2)}DsLE%**KQABDU>+qaNwhTgQq8Z6s*eV!-WApIy-AA-z86)UAdX;5 zy`We8UTM)VRZYEt!P53R=NpO+5e`XozvzdJjUIgYHk-;Ic*HpNZc=SAe`sCP2HG-k zfKpgCE)vwg?WjF! zPxFYa7N0a`NgD92rcbz2^xssX-A*<1qX(F=SKsixN+LoGu+jW9qb8Z>lv4^R*UVXt z^^;LD=i(l?o9Rj+*ja!4sZF6h^Ukuo>@Al8R}68>;Y+h+-S3dK!CKwKnHQ?I_PS}Y z@V1_fTlOC1=o_S?n>Zh*LQCDxTd`0h z=had4^8+6BPa-b8o*RwiB&$2W@0bxhK&>P0T{4(kq1K1MIvicPri$asmhPzv-)Nv~ zE4ge#Or9rhU5@BwEISoUZN>F|DnhAeO1t15i`=lmS*yfy8og>e1mIo}|7!zo!U@}?3IlF}6S0LNqK27L0+eG<;)k-{c zm3088q?=5BlpSu9BbzX^=qNNEdzHUbt`~zbhA{WU^oppYn+Ql;{mha=;5m>XLbLAG z(^t_eg`&&>S$f%~#cPBzio@eYWr1wnH1vACI>3NEwRM7}t%{mHF*Oq5~RmW?l z%I1g-e2BQDt#_pm`-FIKchBBtR3RBOcjJujo#%%=nB4i&N&V6w5^YR>{mrs|)&G7Y zT^ZkB%a{7bb?0W?usTCKDTeZmw`Dq43SAlmv`(5up2ZfD-g~e^EgMIyUc84f?CL2~ zlFqTC!U?Q~9hzp*7bMrKBz$h~(!5RKkGEsmXH}f5qF5QfMQxH;t#_1KPTY_w|JYSn z?FZCXKJ>t$Yksqp#NhVh>m{1%10~G$Yif7{aZj^INraii@>i6n=1s*tC$O}eM%0oN zgQmtE*YGj>G_;vv1L^#IPPCo(s0Xg;SRKb-<3%3XD{g(e`>(^^yC{Qc&qxADi7q5V z44d5c1onQ{&7j*qEy-`G3y#f6G55#uu`7-Q_0ZU=h5B?==6UZgBCjQ=47mpPKY3dD z-%_w%1r*r$GTMSrBY@#LHa$$u4Dcr=upz>|~iX^)y?v5vs7?Y%Cog~(y zC91H~e!kpQ6#B<`B445>c{GGU1Jl=kQ(Tl^mlhwk7kYG zZWkf(5)nef(qCrag9Ucte@?FKRUW?<0MRtW+zO3n)*I|;D0A5&z_y!W-;9xxWUEC< zRUEd}EevA!84KdKJu|aBe7^N5QbJp8;CNxl{Ov#$vk|nF#@uAxhyP*o+niSsU5_#=MLgt$B64fT&-SGL7JH@e84--`I z(j=+S5iXGYm_YpBseSc9iRqy^%7f+<)g^K4c~}_41zWOwF{_qJ9MK&--j8PmU^`$G z_##xAYP! zquOyhG>5OMyCAVZAq6Mo{mLqdURqf9s6HsY>^`LZcV$FCw(-nrslvDn-mDU9eYF1; z*7~>f?iM05`nM-Mfvarw9z?j`Grv6Um_ufO+Mdq1Hg;u#v|{HjA&!#=I?kmHi6H~WRe za+ujo^-EG>-nfZ;W-HF7<9-@m)boh@720CtM97-SzPy}k5!<5X)>ewI8IW2Hl=)Zp zA8l=Bh(8JUnikiY=<*0{@^Db2xc1h`a*|l`42;Q=z3I)Vx0qKjczFV z)LYlLFG(C_rJ=2y$p`FET|#V~095Mbt16$1&LYUL3B4}+6wkHNSF5E5 zxeo2JNBGh~C^Y!qm<1kdmbzP+x%7VL4Yf9}UG+0of^(`B(r*od*2@d@zRgRf)~;07 ztqfz_tjOsWUkhIT*rraFug^0(s(#~rT`kt~96C1LP;Xwl8J#cZCXT3|Gd!f+v853M zg({9|sLhsL1V-IjU(bfC(n1!%WePx@kJ0vK?!1g{F9uUxH#>i{dq=~*KiY-{iy-_x|twaU8cJeRoEL4o^oA)XB?DqV-xg*Ok_zj(f3V=e1BEjQCwPhD8Q*26VcsLL$i-Ila3rMDm0`8H+z zzRnjWV}XyH>}MnDf(yxXamkZ_z~YldP%8^QoQ1A^SJt6>Ay!Z*;5y4oTV-ap_Ts>N zkgW_{ShsNYQ{7RW(A6rnK(ER33qpa%KUheg#t_;ycvJn?^_a%VKN`a7m5$ur@id|$ zD^{c=!MEt4;R6)h7H>wo8H+ADx4EE^FdP<#$r2eOa+b?D%LTFFYf+Nz_@;fpA&b>+ zU(ii<-@AQ1A7VL%7KX3pY?lsENjo>oXngG9JVCCOyK(JTl{&X_{leI1JS5 zZ{sk5)7>SBw(ZVeoh)0Qv>9)h?Z`? z)4W;5V?~GHEN%D8eZVn3oiQ!H`gi>5-#t^*wyAWK%@alcj>SNHOrUNnYp=}QUOSh? z0GGfABi!eg4sbJudCBwaTQWQNncjEIe_X=zVv;nQ$;O=whf zOtc<`x4hRQ%7{o|a^t50k62)2`h*idH=;GIzk0i)3Tgsg;)BKL|8^61H zq5n9KRO`MVE#?4^F#OKArl_-6;j55I8*(sfg1kOa&|YMr15Fdaja=eyATjO;zTdl% zf3V)xt-g)Fu;1`4uv|?u)(>3F+}S1cO+oXn00|^!ItN%Hzwr;a)Q3n(#z%xDC2ME~ zW*+ZF1HVXo;tnkjGNO9Q=)D}b4jR?>3658uTDF{NbT!i z+x1%;$b+Rpv6rxg?vab)9nIZ*>%v>#KPiudL5-|#w&IiF@UMq50!3FT|K{6XX;trY zibCBr@UbyO@zmR9`pRycB6D<_H{EJ5FxD!H(a&)6zLqvY8X^v z^ON;bkZMdpNAK-sBoyR-+HxU|o2^u$M4yC>?IQ;Tw+P35T1wWK0w8>&b?4?xg%Eq! zJy}!1MAXmbSe_fK-)(B~Yf7ndh&t^rW7^;VsQiJdAih;RRnr8L2tI;Z&C_ zBM4JWV8rcQ=uN+^h!2|m6hq%#)DsLE7i_E;y&a6bcLkuCmN-}>barphQsl!1Cn(W0 zOy;*QrKVx6DUv>6tq;PqW@{$pFm3^+1nr@?My^HgY|s=uGa%AL3!Ua+uHWSTs5Y~p z(48GBj+mExpKxfKIHDM)9hg0kgAEHVN)9gSTG5(3yM@^Jxu*YfhJKx(=aIQ9X6FM1 zf3T#E1j_B03j~+q3PZSn>bNPyX3>|1*HvbkOb>*ZDUava43wRaIfHc-GvY-qoy1bM zI1i4Ul4+jXb6cnBoqyXLrGDydpZ8erYGucUaW`@A$yI)PDD*~#&f=p@tEKvKSwy4$ z-DM>1|H+{iV31--FK_I%X;T8*5Z?XwlQYgy9>+D!2ekf9TP!Bm+e;w|$pbZWhwA2v zG|<&_%kWU=x*8@hFi=XrjfS+4!lyrMdB{%PtE#Mt3dC>Hmlj1IyV!kXaPNs__B)xi zcLlX~MCQ9R-qUafi#RKdsKN%EDKS~b-lbN3UUIpf9?iE#jdODz>!M)wXmLC{l69J9 zA6u|Cb+lP%0z~kMC{8;h()WC~Fo=FYD!YpP_ed3)+Sx2!Bf1oqDXSpv8%8y1?}hSt zsLJ;_U}*%npo+3@ZzLu1*31DP+K6zVq+nV5+=Y~g@T9p-Fe!xQuFS02bNer`=JL&2 z4jV&qDTZ#ID@2ekckSx~(H=v$Mo1>d_0cmTgg&EqP!ujH?n7}$$9=I3M^~R40cJ`Y z0S5Jdx6g>bf>Cts5HG*1M4{B?8+jOlNtRuotw;EJyA-n%Qn$VS{7i~o-L07hnbn4Z zCA_o^T{u0oHHB5N9lsR4x00`c4SWL!js&j;?jb497=Y3@0@h)i8;n_o?0@qHO@d(4<+PWyQNWZcu zh)b?77W^ZtCAi1hP}%;zIKrm&vb82wxdW+s@oo)8^d|ZG^$L(MAJuvV)pRP)0 zBw!0+7au9fBj`quN>Svz_7H~Pr^nZ)tc)H_NZ4<8QKG+PXJK=5HUEW&zq%$KBt>EV zYkG27SPch))!hh%_S28V#o&u0#Px%qSh_I$v>b1uq}g!83rvH3kqWlevEhu}Tvv90 zS(=d31;n8J&O#;7teW2&ci|#xzD-Wf z>j>(yi14OJQALfYQ3AZG`%u5jozYf9ClTDpj0zth$au3zc}SvX2SljJT$tA<`vuW< zt_za!LI*=oAJldFpMh2+<&P@R$D^Zn10nlLAi_Yk-O~$n|abOZmRNzVz>B_ z&a&>gR}n?mps_(+2?-K)hRHsu>fJ9~LaAD&I-&oy9~69i6DuwdV2T>JL}V#gkM`ZK zbBfA360o^@eD^Cekz{|`F2P87394?BnXrmApOD1dext_KEek&;5LjBkQV4o+eRQuN zdW+4m@Vi)zQMC7E(UW~Xv7_${GgRaa-$2qZgoOGuX~}N$B&95p#H*!Go0POmUHAHk ziFNK$oiqOMk240Aq%eO}cxNIV!IsH)ly|Y9k-!?Wj=x&7HFvIo3no0S|6Td3uwcSr zqQuK3)aLYVE!VxO@?QnvUT$|{o(-Lf{g>5oPhXtp@WD)~o9OEhCK`N-s@CwRJGU_T z;Oh`VxN3K7T|oj*CRA2{1Q$#efv2Yt35iky2pzd0^nK(1%$C+t0D9>#l7&LI15`&J z!yvU4-dJUf))=-6HN6^)MIa34c+g_Nlmmk?mp!pHJ();&;{C}fB9^IN_)6~jBj`Bk5-w!I)^57qn0FAo-d;W2kZU8U+x&)6 z&qo~Q%`!uM9Wpe>@ZxXGy}NQAD2T22q-wz;FBOD*CqzOk`O%`0TKB#E?Z*o(Lu!Av zR$~fPmf(dIxtb55RfQ^9K$n7^01MH@J~M(~yGkjBN!z5hIJ&|G+MXxys33H`c!i`+ z3w_L6HoWQ8B~7aGj;s0kb^o;7>0?fiC8$$lt86`WeXX%PO=_Y8I}q&5g`2^pQAB+n zl$hN-Y6&{SPqn0bZkP7zd`Yj!#nLDidN-CqJ?ufbEM_F- zgc(hj>Kp$UFl?oufS%VVJOB)wM-K%Y*Hxj@v(E z=J!Ef^gPl#ujgNrw?ho>?F6vtT|#6*l_*k07J)8xW`t2e7L7+jQSfw}9Iy4hJBTfj z0?XMKv!2@6eUeVt?}VIu7qk$W|LgI)blRq>iR>O<@l{aJutrr&T9=Jm@}50o#>Z|MC8sN!kJ(=-SD zWOP1XaZu80-#5}h|IAoY1>1f}Ro?0?t)MU29Q=>a;?kgcV;8*vyQZ=<( zC^3IjMUdK615YeaX}LEZ&2N^uSw%i_MbERQItucNEF?&4%-SI)t8MizpCK%WeQKR_ z32wH-L!+Cb*Z;y%@}FzUGoMYmz`M;NV1p;f*4%2^&pGI4#S z_WdUjIHF9>O;x#a93iH@6`?3UPx1IQeW=JQ3fXCeit_N5wa4_IE>wbKl0G7*pTq?} zzRF+dOQ~d>&v*b91SM95aq}^Y?A9VFZWELIjGU0}Hnl;^JML1ZSgusY3?4Ix{%N7{ z*i?<7b)w6#0tznHT}uky_0$_^RRmf-GKSxGu=k*hAUs_2T)Ghi9K|E!yX7PIH<(+h zdNQM(%9$hRcPHFgBk2YBI>@fL9VSRch?e-IBEJJlvsU@OmR~y<)OG( zJ)aT5tnF2Yjaj5OF-a=_gjuCIma<(+jAC}o#zbT|0%ox4)>HeKHj-`@!>|{;73FUZAp1RH&Lph z=cG;fjBYJEX*YqZ$Y7yzBYAdfLiw4#l-#R?tI;(Wf?_Tyy4Nh)4$yV^#GFvSe==LFjj2eC`LNwp{O?E1tVWsh1ZQ zTM&Rom(+vv0FWuQ$zFWRb;KqyEm<|!Tldu=SubXqFr3(ofGQ_0BWLY)dVb)mJGs1!)K=D*E;T^%ZiXVXzF)ffv1c5QbiEG<)u2=J%o^%3rngp)MG;2icq2}Vs*h*ofVRgd zx)W3iDdD;qXll%#(D*%K#(L`s&yvONt^wy3QOxLE5s?EYdy_)^mkJ{yRNr5lbna zgRZ$>V6Sa#bA2i4bB9D>@c8PwVil&`Sb$N@;rKO$J!yFf1<=>uUVMnMq)MNbX10Td6hNQI^j<9Y9Ab{-29U=qJlfG z>b?1?*ZGmPCZ2{t1tx0~&}U8Hn<7mWBXG8IyzNI(Q~I0dd%)ORk{{PkQxX6Ret3ch zcomW_c9akMk@)>5uFhCKgR;PU{3;#1JI_<2f)srsN7Yn83gRj*Cd*X~U8kFkAtS>x zDnehuEi8V4qe)c{?a|&!P`FQRG^tlKvx=;F9 zn?>G+I)IeBQ6UOK|0XDi6+TBOSxVjvA3w6AS;vm}-wB=B0wxq?`Fck>czf{aQ9r@B zlZ-tZ<-9L%lxq`!h6`I8H|BwZc*5+%4urkEupsah$2)~{*iDxUl`ekxRXLg1IMLtT zrpn!-o`nwB0se=gQ%XX+{5IbDty{P#m;Il^n#m1`VF-ISc=n#+m}m=rsDIBnb9R$; zp}~Jkns4jHYbp5H-=ZoI7(s^0iOnkDi#Wot>nrDn!jA&|ln+>-5b)*X2m*k%k`a#f zVxs8`xvU+CjwB;UF4SR2=-3O@E%!St^ROYG9-7`0GX9>Vg3gD^R$L_E-#E|x%MHpz}q2PqKruV;D{ge8fr|$w^@R<%RyYX0F6Ah+z6R=&Q9`! zkzt;=YS@q5T=8S)(c5kba_c;z~i`*U!hy+>f5U3r`-2q!Akr7tBSsi<@8+rqP zS)sW&a;))y1~ht?b_t~te54$!>Ye4~4<+C{ts+yqz;Q5Ml>=V~`A6-?6r1xICXcE? zGr2lt_K>$VXlBz-NGp2-epg=)*H!jS(CIV=+GC{ggchBdwha)$A~&q11z4Ear$m$d z*W!?ao>qmuz($}P%kcPF+XOl##YBp{KF!l^ktO?R_E0mQQI>v5rOdudBrcjTxH`et zm|s-TFlr~#mUtjD!8eIQ*(fdaj3}^g0aYy1UA%*3jm=pI`?>HU#s&_d+XqKBuc1Za3$~cutEWo zV^xUm0=+?StMK2m@$NRU{($X3BBbH^oxuZAA_&nby^b+JBZveM*)po6_CCsHtqZ57=1;08wu91sw|-oejXy z&ay%bq1z6$SR|HfqYN3oGqLFCF80#^EWh`7;oFt|f7S@d;aaaF7@D*yP$90+DyGKd zC&2CjB4}P(DvjYcLssm+ohzt9)M^&3M2egFu)m3lF@jJOSYsALlmNKyPeTmh8|F zg>vuYXJ?SMn|yNAAq7+0o&HBfobTl6I164Lp*wEP$*xrc>jTUgV0Rodi!7et3K1tt z5(Lsw*)44XZe+J6@Oa_+`MqaQftdf2ed8qOsY4fnVq+jMr)ih&N-#nbU~Hv_0wD`R zFx|Gr^^=xJL3n!esCoxzkMLuy$ElCvV)&)(w7-#3L)~-1{eVg4`j!8wY?0)`sHiVX z^g*CDBm5OO*=_%h6OfV+d+nXT4X{b7HuL~pUE9>W^(0ze^GZ)S%=<{%Zx>7Tuu+T8 z-ewBd{VYA3i&UKEw&73C3Y$a`h^3=Wh7V5Pw&Ge-p1{{L<6*e>_$w>>QjbkTGQjnj zZfON=JAgYUZIIp;X?&eylf-bw`Q)G7sVu2`{)s9&> zx03TgQ(UGO%kOfgz08Ciy%9j!SAz?$~aW7{&V_ zOgpbNE4MX3#6QHK`WMs766i7{_fCQMBxZcr`~s+31?s+hGI=d<*5OrHDsKEvaPW}c zgVZZ9=ym!tl9h;gZsT)j-&@@362K+uDTjjULtx3EsWr(?Kl1{h>7C|yeU8*VGFcL> znpBt>Jq>^AljUswfJ-C+4AKTf26~IV?64Ge@V4k<&hodQ5m-UvUg90@BqPDh6z7X~ z-`;NuW<-3PrGF*pFN0{+e|dL&V(AjwdiExcriZs6MOz3!y?YWKDk*ycEx6Daa$5T- z5LR|v2-_|1cu*Of+QL*ZP_OxV`ExN(7V66LmshQRlKOp6%kY}!q(mS8`qNtSj=Pny zCE%=Pme5+Io0pCRRS&N{NOi#QcKzQ&D*wdlBEkG#E_|)ibf9zWa>vBlRAb{$3Bksf zO1Xe*aHRGfug^?^?==d@f&u7M!<&6;ZH9m}vUBo?f?S>ALKhH3Al9d6>mlTe6-npD z^T!kSClmi*I3Xp}eoCvr1XSl1mCku?6a}oJyH2d7n&_Y>tvp=~j~_|CF$8ulwf*Gh zbJ+TEpl5IxIWRl?q)Xr^7g4tENfn4x_ri&fch!C)KrMd47SOj!y@sXY6&G))e^FD_ zLdd5a!aTqi#qgPg*$tsrXKkYzZOtMdP#%K)1z=WDMGI#IiVAufsigws@WSzaDt{E> z`shFUwdTSI`7abpvIa{``vA zWP8F=%MhssaPa>AWSwV1LU(?(J)C+@I6p!z-UWnH*%SMQah=;k<#@+4fYxGW+GWJ^ zLlx!ZK@ccg6`cpjf_$XT5jU#0Jr{t4?g7x~9GlI*;&v;PY5~4<^J5eEC2QZ|e3J`$ zdmW&KKVmYF6vGD&rv7Pt#|{G^wuZvW9LNYnO1V+v06>=AE#Db`4x*{^YM$XkVq;f! zo~&;IU0V9830Ha~j%<}{apQ=okexUc|dc~}jB;Bl~8<%}NWSfvO& zG;0G99g+C}uEG944j;k4u$DE$`a5Wv0YLG>eIvbkcQaV!-&3GB9i=D=IZac;8_jM^ z$GCa8-3etgJU9hsDDiOu(MBPV8&(pa`UaQ*W|~x`DgJ<~Ada|g_K^U_7S`9{extEr zO!@N#!}!oA&cvSvzLKp1CGrngXC_bq1&6(P!yURve06&JOBV5IThoI*zRJq7 zj}-&l)Tv+*?Wx4Mr{+iC0&r+P$y$rY|GCDFU#!EC_qUA*QMZbfxSX~T^XLnh=qO0L zg?@?i=I@F`bgX-i?+7K*ETfyGFatK*!^nF30r^)^1S5jiEorB(BES02?iM!Saf(1F za7VcbgeznmT9zj>87b= z<*K485Ze687^ia-MFrpjsZ{RH_zi4QvwEGRX5z};Fs``4I>7T9Y>I@)K!tbK^C^D-7R zHBkovihG*X!`{{KMT)`G5_)dU*tR<_hbX-_qBO>7{94J@e zxc`3?P9SKIrZ%$z3fvO{bd%$*AL^$0ySjlwfmYZIPq#By;g&q-_g#$4TJqIC68oP~ z#!$d0fwZChkTw>+_k%r#)*UKkY?8P$hA%d4K_Pc7bk<lC;Fwn(BbB*-hf?}iSd68IovMO_@ zH$-$3X=A)$(2@K|EM5ZKp#>&a41b5Y5c2Lz+$GR`rShFnkL{vb<<{L(Aey zO=MdTS1_D{z5*Y~B{>`yvdmH4lx`dX=}rf_A2lrM_LH}ZJ^`EsAa_)N+}WIdXYhCu z2myS_T(OhnH?#NxLx`f@0@6Q*mh*3@L zDGlC$Np#2$V+vT6l~bu`et)w82#779*8samZGp2+y;@80+b}jm8Qe5v$1c$3xT%F$ z%S?218b9>nM(Ky*S}Bhfv1=6D{=#IU)KkVUg+)`Xw}8yzw6&}~5ILsYIK=R{#yQ6g z^T`Fb9)R^V-UAM{<&_hXvUle;9yb8=!|ifU!PL`FrwI;)Hafj|6#Z{YsGs|AY(9d& zjcWjIvc13B_Rg1rH&lKTQ`Bp0q@(QXxHR|x3T@lq4!QYYa@pAmo)>zaBfaNa0|X0O zLk5195BmSg2NNav$g6w`Bz~;u0st~ugt(Y)op;q8N`25qKR*L9L^$lax&txa_GU;{ zZTa&!Bc}m|`VVsqVB4bQzw)bt6mh&)f-5>eWd1f#4}5qNG~TYgI6oE!2_Rp0rZuocUbP`}F zKs#mCW0IGVtczJgh6j*h^~Mkos-3Vz3c=H-AQ>RYXv!N?{?z^Q;#Gb#aETZjyI3jo z^ECvpiSW{?^A3Y>!9IxLUWj|6mX>&8F1;Jae_WR@S=Fa z7fVY|?SmdHN#H3uaKyWGSdQ?hBwr6}^N9=O1Sx8T)4~O|-VgQxWG(ub$MZ*$3oca(?Dm9?A#fNVd_J^MN=}w2b=j@bT zCig!1K(^eFHHP2-&g!fq)Mre$&F;--afVM%HyoZ)`u!om0Bi)&=*c8w%i6tdxArGT z9b>p4CDi|;8?pi5vX67`kjHK~aNaBcI)f*5ug+zF9dodkEg6nr&2gJK4hYbA&PvWKP{@lF5 zn@c}|Yu|s6!F>-QxC$3;{keJF@<83G6Qbv)bla_d>Y+!El@RJ1%mh33cS(?B|R9 zALWo6{s_jpD-K%RSYV;JMvXbPBf%G>)#l(A3tf}ka{VM$nE<5i2FhwGx)&He%=XUa zt@7mhLr5PSPa4u1pC0PCgmR48_I#OY_|U46f3)kl=e4uNFI!PcpwrIk@) z%#X7}#C4F%z!@Pu%ej>L+>KnO?W7wJmIyJ!9eJ8}_wRuc#SxhjT>S)u|2BKsom197 zwHfdQ(X)R!*@BByAZk#fh1+>*f;&c$!FxN5!D?lNmDOrC2ViL+=iG>6G=*VD!2Z8! zE!n)|E(Al&?jmAs+p^T3go zDqG~4cW0xy{x=FP$YAV|Z_A7YX5pK-5-0ES_FwY0bR_ zrm1#2o0sx7>?70ZC)`F=r>bsndoz^Kbo2cCnS}aEeCQhpXpV9O-Y)KdVZtyd zy*x&Z%n^)lk-X?r_32PNGNecvHFRju5%sI(~&@+d;p%^e^kYx z69i2fdWo(swq&G5efd!+9b9=w&R<$_mEe)_y^V^SZQqKUQ2UnM>{!8+uuw4FRSU5R zqk^L!+P2t3$8Cb?B*mVOM9c2*t&naso*#PU13HE_)Hfkh#`2`tT7|ytG|vU~=HwL` zbdz@=-A%h_FUfW__OwL~Af1HK>fYgXWp{`J2Fs81FCNPx{l-MdRfq0}T1oDN;!GW| zj$l<&VpS1l-Fiw<)ux2N5oa47Dh8%rKhzMPfG^rH!~{I1BhUu%JSav@UMA&5WYz_A z@YPxHfvqWg>$GLaFljy9L<`p|zCjKjUUiq@F#=z~ZgIf8C|@Yq0~$LIkYJt$dD%wWYj2(A})A~bH+ zu+aq>os6o<58N7%;!?j|R1*G)1of=B1FscyL0Z>SdO&;|TN|`$QAnyY)d`x|!ajN- zy*F*?x8|Y}Kn)dO+LMblPyJ8TOGEM{e6* za6Cy4=4f3%Fj?=*mU*!Ezr{*})vGQ+ipCf>xU)pH;dDP5Ov-HBK2&?oLeS2YME8Rj zgH+qvN)23-Z7undZPYf@dvd^*4!upOJXabqz4s~rp6ZGA z@g?Ph&X4i|ykT&Hh6l|zAJZ{1V=AVNn{PAY8^*Ey9K4+Hb$UKuCv(rKjeYWF{VC$W zSfJOUAX|~^kMb)-axSv?{({zW&Z2A({;{g4cZsiwtd)|e8(g$7KKz~KKV!CZ2T?Z% zhn7MfC;Nl&LSuFsvtA)Q6lT>y3k!YX7**40o_jya1~5h_r3d6BNb(Zpt?`QR+Ie=3 z_mBhh$mB&GjkA}+s!sl!q(#Jr?-h04+ixu6*ii}rV@u$kqNMFj)cwdA(Z zCeebB94!rkk_m*@otQEZ5_-^s=z6PDFr>y<-!B#Um!SWrSW>=n7da=DUi#smO->c&Cuh*dB)Tmkx0WiEc+HT%v%P_)fUzP z-NYN(i8)NIr5Q_QhBS~FxRka}?^9P^)pSWoFSSRaO^UIx$^a`Gx?2YN$y0ZoilOsY z)Y4_Kq-ttV(|7a`b@aH#^tQcGaJEoK}C6 z^4#wgS#z0yA?cVssFZ*$3hmCxJm&FSiU}t;2Xd=AKMC8*qjR%I%l(Z+=^5fWy5)i` z0gQJPr|k~Rk?D*Sy;e*7Oo6K(7_ycGaEqK#AFxgtazam0Bcta4N!%LB978CdILk{~ zkcrGzTom13Q10sx>f6x%fJ-1n_Q0E?)iQY3iT46#x0Y895E4|*EW9;hOP4O!xb5Aq z9~yc(+=893f9&ykgU7+7TcPS~`%%joy=8Z9+zkhNYsZ zlIi>EQq-&`@Ln8yxE1Z8+6=zENEPZe?)?=iomFfg!Tc?0hm|>WIN0a$UIq=lMLivp zFG{kk%!D=%FFAStq2C?khn)_Y@ciT%s}4}FVuBklLl~g(Idmy$IWMaWCdj2azGwH`B!A!d$5U`HdX`cL z)+BHCui6E{H4pZLooI-Yl^8zliaT<4(2ELN**QRK@KM- zap#PzZ4w0axan8gt$5o-`(v4dE|`o9FD}R!A^(h_OMlckba$XyRf->KzmMVW;_P7B z`umoS)fILrxFNao=>8{SV?&XQkxE>{U^Vpg^zb4GEs$AmlIXT+18i8`NBVObzGw<~ zsgT?<4@NN6$uI?3b}*Q4G1_(t&iL>p@7N-JSx#rvmO`>M7t-Q+_-Luq|MiQDp&_AX ziltDO9fzY|s_W(BTov3a9F3o{_Z@%+s&A!#GTwzq^wxj;ea)?%-eG*utiz|{bw7o= zhDh!@>yrIH%wL&xpqht>xWb+BP8${CBlTF7V*^!Ag(bMDIH2ASX4iWM?zqYg?MdOR z%(khR<0;wJqvhD>`BMN{Sa!$_Xi0-qhfyJ zb3wy>^%c;Zbd((AMdkN^;Lt&VQ=C6m>hL22*!g=a%LWza7tR48AQ5Q7;?N4L9Lwu+ zKLf9x`FpTD_cqkbr|>UG#%_{pwCi;ag@xdAdorpIU*NV&;VmzJ@SE?V+%n-e5jamD`4!LGNMSJ>199bP!2;zs^^al@C>et4l^ z>Vn@~j2(hAbG&J%!}Xx6oP~N=`T3Ym0+P_a(evFaL@a@`>BSA8V`yxJ{i`GoyfsP< zYNpfaomk-z|7Z@n$$x~@gO#pII231(J#A)(VB=jy0B2j9K%iXkd~uywxp7>n zu?4sXu2#S}Ep3WZ(NgLKr&tSL!fa0YOpYmHPtI#M!x_^*c!MWMK(UoIf%OuY9Q z`Oga0)0b?fJ<9?cWlJmAODbA`UD=!B-N6&s(L9P+S6-8RK-0^Z?DS|!v;WZXAbIdX zuJsJS1O`yzJTLhRHJX*)7CtgMfU?*u3O zN4YY9fRI-6?*Mz;0@>_n%YYFG*7wiSKAop||F)mPS`LJTzh>s(Q}HAhR9vtF0Pq_@8D8S%3NJa$xJu|c$-=5&grp|)A|7vee*yqB)v--TE+oIoUHQ7 zjdUo*bG(&O~31%{~1cf?`nY_@D|%DyE@wu^nS-XCi(x$JWy9<{lGr? zQl$D{l?jN_4gkVW!JyG4Xs$MBZh)UQ%AdEHRqg>7HEUed1_0K9lMs*%{7O}rn1V>@ z?!5Ld^RzEA4bVH)J&4DvWc;NvMWF;J5;{#e^_o#a{sRXgo|^XO?Y9cw8b&02XiW*Z zGM-Z;hdzEX3_B^AH5@c`=_MYyu6HF|MClqVhQEMIMBrfgjr$0MHWd-kk~zqWx5x#J z%cVpGA>xCt$bec1p3c|MlKu-zdzXHD*MMJHuU~Fpe|%v70B|sz^Q`BpZRRHCP5rA) zOJ-0OJqHWrAAf&k%DJS**;4s~qrq^+GBu^FS*gZHclFVt6GaR|5??{jrT%OyZAX zuVjH@5qO=-@Ii_Q8n$ru3JvLGOnps2Elf<*qq8?1JL%q271cr9Afp!Y>iW*+Lf@Q1 zMcF>RvM#*?$F8fT?hm5`+eQT;{%&(GU<)>T6#r2UP4=i=XBCR>8JO9+s57J=1~Z(u zNMn-HtjLy;}_MkZi_Nu zmrr@q33(6DR*;=z>T}7|r|S;x1f+o<58&skC=bNd*3PE8&ZOr6w_!^0t@4&bqsj&8 zy9s<#+^(bC8Mf+~6%!k6!f=!JFChUv>`piasFM`W$!Et^#y$ClfB*C!1om^heB!+n zlut(id^#G8mCrO7_O5p}@p$xrQqgu!WAoL-;XRXC2Bk9ydGVTQU>0#31_cz(O(WL3 z!3!`@J;N6)1S8vc(A|DWUKA5cpM$>`Jn6xtL)sK;q!CoO_l4e76I3Hrg!^zeI`@u< zrHqMf>&&AB|6=>j{{YDw@jY^Y{4xBHgM}D<#?6vIkQ&=6HI}w-CwKmq4Sd6Rpjmu6 zy$w$`mrf>+zrR=Z8G~G4#17f}161FgJNIvx_s`p(A7wX(J;g^o7<;t)I)qtqY&E^L zh_3+5-@?+Ft3b5P@e1tqQXyXe;=6%L{rStLzBf&aXYOpCy%Tq40NGOM2UdCEyoZ^* zl+CniUQtGN0R=dt*2%?Ji}v8)|FJ5HC95oLqOZmg00vanDElJs*9QK1UmlUSY*s|2BOd zws@^w@l{qFRqI*4a14)d82FyMBO~fx!RlX;}=2vt+G`8I&C1J8MU;Y*hs%0BWPp(SLuP)DonqWmP9g0NNvt>s^Um9=_}5$gO(bTXKmJin)YiXkP17*oHv*_)7yG6*JRKGt*>CM4xKpnF||l|KtUTz66hU(u;&caJlB zJWaBA%F8j~L7?9|`Rt75Bht?9b4HLDF`u6wr2MW72~F74i(lwR%T~u#yop zUh(Qq_J-f>3cN|G+oJPAt0K$#B9oK3%F*-Ge|Z*dTFC%P@ROa8uQ589!QvZnpo*&_ zqJ8J)ypHl-czyH-Fm14VtFFGM9H%4Yzh50U%(Uf`o0e96f^CJ~-nQo*JBOZ(Br`SK zaGAIfwiAsM7@iQouVF0NQSp>>?l$w=O}^*K+M3o7p4IaU<9KJof*;Rn4wzA1CPce~ zrFz!;PO%u)BN%;Sh!lJ8NMGFx;OojIu&D-E9FlfxAcFuJGVDx)KAAg-GJR!J&EFSB zf&w$FAB6-)*{;4Ohd+5d_|1pO&*1%Ca~O~3?g6N4q(P(G&Q;dC=x;wg17n~}Y=RL< zbx-5m#%Qnk@qLO79d~}KY+ai}VW2+y;OATMl%vg#Vy%4o&J$`DxxH)#PI?Q_=_!sl zA-9noiFmEe3 zs?nLI8Vn-=*5=uHsZnYf4R9Y+Sn+$_VJRsOlQxSsP9fCvvydCe9U?{P-{t$~Er(vs zfNzqG6FP<4w-BjCns_EH4czDVSi3xeIjYlt*rugmBjo(m)yBCR>_Nn*zGWiU7%rF& zwhIwua-CY)QI-&-HEPHF2h1AblART*4$7#NzL;p+J(cgXLHuN%;f|jrhr5Kl5;18$UgY zC8%-h`Jna12}OR7XqV`vzfG1te4X*l4fyeAKk#Qi5Od4^|Dzvx*#2if@Mk~pXFu>~ zKk#Qi@Mk}8SwFA}Eb~c;pvLSIBgW&@FK|1OC3n^5O6QYZvO|kk+OV^>dFr%Zhh8I} zXx$(~V`@57EFA(CU`78`TJm!;PCfN7#Tztzl(i$pZI^sT_OM0<0uwcN)RRgzp{h6c zfh(#hnL#!KLdOxGG_EYltZ;(eKN#!}1h7^x9q;y{rXlmgaTMb{YB@I#R?#i4X%Wn} zMzvsvYUq&L23<;{N0bCC1nG>A+#e^-?Aeq|%5#0Gr+N)QAm18N&`%pGMxnsiLWn!4 zt0A=?I#K~9?t6~4LH8pJM|%jtl8)1>z=+MVTk;mOhY~8n)E4rUf8y61d#`+GPo}Zl zz)i}&53@@a4qI+%hUg|Wa-*q6RWhaGRZ18 zJtnvPDBJ_o`cq<=21{`-C{qH-o)Terdx@8OK*tlDEMs;9lQB?j@R@%00ymxqrX>P9 zhEKH2fsNPV)DW3Bz{3jXG@iV~PGIoEP5=!G3YMFphGD*DO)_&sUV@9Ts9Q3o??5vs z20E>gmnm7soz|IBCvtC);-?-ihT1IDu2`a!;MrkAy$9(U;)1mD6inHy9Q>^=4u2}0QWUB#XU>m>@HdNL_tPyU9(Z&DX(x{3q**N zzVv!M#*NCCw(?AOxWcoinM)K}?AfCCuC9>iL{l$~HOG<=fJ!OlFUd1TRHo5MkyY19w70TOcS%sd59y185j$#cD~w?p40w->TBbi-oC3mDyH)RC8VPe0$=-mQM7^`OF3mn>L1qnkiHc5MhnvWWR?O`Uj z%I8z}Z5HzF7zPV9JGj3#UZ`pHouR-X~OmGO6G)HOw6Oyif z@^Eio=0MNRDmfxGgqe4nC>Lp5Xb)A#HSI<&apgRO_SvtF&^xN0Y8-5i2;4i~F7 zwC_OZ8hU{l84KQi2oab*R?58S!lyJ35}4UaZYnL>A=u;(q@-`{I~88?C7<(#mG3;UyThgA4u4d zr|63Y5`{mqUuS^*ID7N6ti$vguwN@?f#wfBWLw6NJ1|*=m5GdN-l|ain!hI^|2uUN zF86Xe{JH(q0PHH)GUV-7>Gf7+P?Ex!EC+$f(!|~~zQgSXrNViu%C|Lt*;u=&3(R}q z=q6S1__KT7G4womDs=^sMN1zn+N))J(4C=$j5)!sBFObHgIo_ix`%DO!2iRD;2{t$ zs~PDLg2*WQHAH!tU{1{073q4*V}*`Blq0f+h0t@ggb_L11sR8RF|9uqwKt6*B08)gGx;PJ;oNzzV0hPR#l+MA4Hw=Xy(GrH$Y)z!TWPGAs&X72s45FrWi05Z*i>%6OXxXJF3XgFKYM*ug$ryBE>?(Si=bv7;wN(an315EuV)Hb9{yw@V<@r>8raiz-52?$RZUM^4tL!_o>_jR zkCAad4}R{`Ty+-fJ|)8w?~@cN>GT4yWSH$dT^i*m5tnl9ItL0Iadax7VyKu#23baB z_@d1zTxE2b5?m$W?IFTFbfjMlc@T6uX(O*S#?9J@EXpdT^xafuxQVdqogvidLkxWf z!%h?|g54sH8!Yp^Z78Lpn_2`>^#W~i&pVEPkwYXr4{}kjt*~M1D5vU;apM~iwZ)p% zn?sfht^FFZyUTq6fapj#!^}yM(jopRnJ%&YiH&bgg{EN9IfgpzA0--dwfF zdFGvoOszUVfb#(umw5RN5pV~0sGwqJTj#rBu!^$!{HiR(5T^)sC=ZTug$qzX@v^jF zAxJZEv!e-?f|Rh2;l2TPt#JcXpO1^3$FEQ*Fs1|#nNY$yINbxEX5jAG*`1vL90vkp zI|`P_?S&(%%xiZ$;VYeN$cxsBEp03AAZG*iZ^D>qJ{(Y2Lit(hPvi>(1BguwxfzN82mtWoY!`A1Z1EHaDkip{R|81_C<9gn%=))^r_=)+J^0DRCA7uK zl%d2Qd!9_#iARm7VkaN5QK3?<559HR@ z5Z>btNho=>!Y+KmX>4ti9b(-GH5q@_JhA9FzJ(#$kp^K<;OCfz9Dr=7M+OTQFL>rS z2nmPpeE`%ZGGHIftepj1#xg_aeWbuc?F1T-Id-WYH1SI|+=mWe+@e>wH-Tx?HC`e zTXuoOiSrb0G|Kd0pVF(iJJO7b22Y=Rzkmac^BDf?jNyLsG2-bYE`$@vRAcm z>h6*>XcMGC14H%*)67x@!X=X*i@>^mu&z>0viG(;qt` zYL1c+nK2AQALs$Vr@=$XAg9*XrMd3#2 zW2Web{d7XKKOtI5m?qEK9##m@$D>d^pde1@X=akER7s)nK?s}rFW9oHZeskCY%#Rn zE$u|{5R+lMc)dSAeV?!b2O6uUu2+6aV$=IrOEj@`&^>royB-kQpSdUHT`UxDr)6h> zH^^$?j{voX4BV1zkq7`Efjw4|^;&zmfYU4 z9K>PwmQ%Y#ZHv&Ws}lR0L6WT+YS*2N98SBO1=fq0!$kWjyXVUc&3X&01n_iUCazPR z7q2W4&uoDtQCZH2d|=%M?A&a5?*t3}oC=v)o@XJZ)CXkG1Ojj6b>!aKWg4RL;f;V< z{-Spa>PICYU*O5cJ|hIeQwx2to_aPO${eZ}7t9fKl|`<#*8~FGU+|iBidFx83hfWU zBGl{X&9RGzqQB`O@G6&A4m$HkI0q!eVT*e<4Bl&BV2=rQyo5=EN~4e0@7zKJ;}8zg zNZ4D}Zhy@Iuwb<8W%7KE(*8~!KK2juNy|1YWBqO}KX=3+2?=GnIhPA~0zmo%w`1u_ zpO$HDH0q#AKNNRe&kQSbyy0MfOoS(EAKt=1ECln4d0-9G;e`h|#R$ZCnY9kEiyEX<@L+GmhEsM}%%8%06L5== z2xZpHz=vUJ(^uAJd_YF{@e}}3-C=A?KE6HltCu-6xywtF92$-xYGyD*&9;h9M?>Hp zi@nTbgru|B4?c(2n<{)IBgfPr9)r)Q-i`%tojE7|1-#ti3ztd&iVa<&d%@OBxiyC_ zeWYmi7GzHKQ07$GuI&j#KXF@~jR1)UQIOzjae14>v^31tEUF36yV-v_78Bc)T=c=8 zy&(&@lZbmmv_N09D1%w}I<=~ZzWgT*Ozo8ZonUxy0u1zvr#DO5SqrVy`0 zSP}#e83A_NX}N730G;f^GLYL|Ti!eDZ~s34nKrVH5C(08>3!&?VDmP`&h{}_9`rT@ zhulX$UBtuYsE%Vw$1a$cgV10A24s0rv!maEmc@4d_9s@B4UGU#umRw*2B00G{PfSC zTZo1JPoSk9laa@|7F%23PhxBuQ>Y$*O+#4e?tTRuB$PO$h5Bg`m&SJ?W@&=**mdw~ zzjP5>lDjY=s18a8nhbrD_=>CaUIkZ)ikk!9iW}zIY%gxCV3Jk93Z~;QT9G9S3$%M| zM^xk;w=mx{Si}we?G;vXX|7{~vSi-(HNGviwM&cE%ZEDRQ^8+hZ%H;EAv6BzhXgK`alens$-h zVduJtzYNHIRVFy%7!Xj%wqXi2#QUJ+e*yCd@fjUlt4#XRjWU&&12YZdW~&rp3*~{8 zvPyI80gjd`0yojZ^_oJVvx%<}Lywf5A5DAY{c!84Y(A z)BPUiB1c}AL~!p-QVg8#!4gVJF>Z_AScuVtrckh?ND$&5l*%Y}@k%}e)O%{emWGKW zVH^E8TR5Fs0JxQDIJ<;cKTBCIVSsme@<d8`oQM`cVeG~Bb08@I zWuOn3G)^r=JOg@(gQC>#`JwN>5sdPt{V2b1R-brIp?oFWnHvfb*b#^aBi@s@oQl0k zbhv0;!m8>AN4qO4o|EWJP1&we)S7g7p{=5Jm97vTTn-}YDEh=(LUPBXoPLxI+JKwi zKMP?{8Q?DxJfViVvRgK@33_C1q^4)tC#0yxNN`D1S8nfJ!KS${3nvsv6+yP&Gb_lD zhL|^S(t_G+8#I4C?*R8o64Vw(2TP}@>-zd_$Fw1_=z_cF9lb(jsZ9lJ2LJt%Y7HoC zrlg#Z&FZ=!qw4{bSXB~oq##&iK~bFyzfQ!3E%e?DuZg zGXn8Nt$ga=b;Xu60hP77tqTA7t^Po24vQTR5nf zc4=MMWy)IMXRuUe&;gl2-22ej`EcL05H7u}UT;xk0|faL5mYoh&1nJF%kdUZ=={0o z)D@bcpu<9Jl_YyD3{tD47d?us#ic1r)1c{)24$ZUo30^DZt)xy+6C*rg>~N@o_xI9 z=k`05dW8vH<@a24HdF0WyMbg_)C`fOeI(2f2bO|gS1hdU>LXE~F z$Do3~SzfZycxoyXQe*z38dkn9603TrOa| zz*q@L!vUpjz=o~IO6|4)B#ErZwWE49Zs^?Hn|V^) z<6*%A!h|F3V@2pP72_4^1IGF7i-+?8G%}uDqnMOX;Q@y7Ng&WC2cdW>Oi1Ydf}Jpq znD7AY56m*D-1Qg{k>Nz^Yvp{i6_vvPj~~hPa7Sf@U0{Uy=nG(vtzj$VCSK_}vn}~= z##A#rdEFJ%az<}i```Y8gMGFLFD3Fa>JKG8-Smb`UIx?3b=scyI?@kgPs)gPdjZC< z8lu({4M-Jg%xTbqN@wjlmvzLoR#l+jL1GP1FV?aM^^!y04=)Wz51)e%^R-plmz=zx zCOrA_ae>`PP$Wz~tXdc|A_23ZQf@$(vdr|h0fDd|E2rs}Ts=@&!u%JwW=F)QQR{F- z^%ID&av}H^cO}8fJ7y|jqvnKF*gIedb96QM2qVf_Z9a!+zkD>*5x$mx7_%i{| zF9JT{HO zbuob6wZ*TYEhe_PJL{%aRBE>@aBnED$KZ=r3+WX`a?4CVbZG}zJ)F3U+)1iw2L|Ab z4_~sGs_hQf*msqxsTBp7msTM1|G1vF(?Za z7{n8y(@N|xf@>tIHE8A#>I9+;G{X^?Nlxp_8Q z2g0CV+4=yksB5N~tD|L1Q zXC81b>?_NLmjF+|fkbc?pgPbB4C}U8gnW@$K)&pThC4{cbW7ftgt$x=CU(pE1vX76 zR1al$OjfEn4`G9ZRAg8zRzJlk{ovAc!p{y|8kENdv~WXC+C{YF-J+H`_@AEB>5Me9 zm9%~hKs@+DaRU>&kT?WifV@fR-Gzdw4o*u(-15)^m(|8X^hpO%56jjL(@Bsd^lsDB z6(W`raRIM&dN1r>-ZqGxk`$IZreBK{4w4bmV0A&Wx-iBsz6N{R@-t!M{e{?MoG9F} zNiX&D@*};FzGWxqH+B$#WiIQ5Cte_f5}5$a>TnRJGKx2P%wDu$#A9)r~yTdsMx71`ZNoMdbM_Kh&HE1 zLHi@=k?R3C`KFy#Ll6~ViI)WKt0JbW`Y6h&){qqsRy>uwL}@tnH9QCioNwX5nOpAy zpA}&=p)xNJlB?GI0_e##e_5Kb^?0M+Q|K;i>DL6_XRrM-14%gm+)_K=I<;hB*5wig zfE+ViH{H-H@h*&m8UjH-cog32CM(FS30PL`iaQ3v$d^G!JxqhQ033y)`u3Wdw&|8|+bZIV9vGDtK!pmUTuEi7B zEC=+Luvscz8#fCecMgI_uW5fH>9=ccv4>C~1B46%x^bNx5p?t7STDwVE`}=o@aZYo zQKKZ=PHJ#WeKCn&WL#*?6=$7CMVqrN`^uG zwTeC$_Hxgu39q(dH^C+jz==0A!2}5}X9^yeP+rZxMva-=A6;8z-Qu23y*jyukSV$Z z7xD*W8YAJI0?7F{?87Hos9-L`fK(Vq8u%v^Ctb9j_=_H0N{ip??sc0~79D6n<(r-q zFu<_&&ygDdSoi>u&JC4=VO-+fAI?q{IyvF-`!RPZwDx1wIxNAdR)@ex&<=m9mNAvb z&i;MO`hu0l>N&h{=R}d*QjK-s(BQ4u;q82nrVjwu%FpuDwKaqdx#-n3f|1)&B0rL1 zG82disfpKt^+Mn+^|CT6SSDb^VypzTC<5<((Ul%1I8CB~X4{pb76y8asF6tPThbV0K9Kb%BR*!dRt{DocUQsz1mA?-2eF{AU zj`7`~wX`FjauEza5i(F3-Me~K^>$I)?D9#A@>7%QQWNT?2$bM4?;|IwghGEU5Dw3? zE*)VnABjuYcc)MHn{a}5!tX9FqKtB{he~hOFybHZ^jaGxe1#-L-!AEbFk(w{^2dVp zQsci#c_@Aswtgp^YdwOu87T+^{D4$o!21&u{n!v@4-~j_@t@=KI`!e(7`4vA#Q!G* zO~#^6<^M*O{2Pa>f>?aKbtyz4T~`zSe(B~GM~Q*1-6CCvclrgS%uQ|PTWkU*QL4~% z&)lOu{*WU7Qk*wi9A}49{)7VV&AofRjPD6D2iy(c@R;QA$w|mw`@XUnys`%-p8HIq zNOMN(m02)M%bp5V=O3?eovSgG`gla@ubCtYz1BDdW*@J@(LR5m1y1UfPw1Hjjk|uX zZ!S4Ei?ZORd&Yj+f)2s>|n2(fnGoNcm+0wq+vQfj{knA!%$5E;NUXjsC2AX=@=L+|2&vi z`z3jJI{B?yN9JO9GwFX}MPc;DH=5`*%E(EnsgtI(ncFm93_)OO12>7=Z<)6#BTjiA zoiaLoOy-SkCXG!Ia9~E8RMF;S?aJGjSw8!)e0Jjf{6@$|_nYAu3oC;LG6DyVrky+Q zQ~pA{^hN(mnZ~_44@ceB6dw;l)B)NBAYrMimY?`P8X2!NFjS$rLe_H7O)KSv6@+s5J z53)AnvIc^k2)A*-`KdiG&YF(5rc)aco1^3<2jU*w4WyoX9zb^Uw8$P1@Am!|1RmhR6d{7j1Yk=geMT)1L z_mwXIMMzAkc@(oV$6SW{YJJu1K{>y>a=Vo+Fc?WryiwkaX&KRcwyT5J+WW5^nAtPbsWLQit0Za`ff1UY@|MVjmjxg` zNSr!@9lQQSX3uF4wU7sFgoz6e4&TLi8VOetRc;JQw7-)$P~7(g-73jZ%{~_m<{leB z83Y8X7p^ z&bdzgR%tLK+yl0ldqac(+~eHQkB>aU;@h%ht#BP@6gaqE0e+kEE3hKRjJpx z**xZwfQB%b=bRdHrzwIh2q6{v{h0AJIriQ!=K&+~)WGRTrT6C1UpBk@el)n^jqW(D zD7zi!?(G_QQ}*GF_58EOxo0hicarjH!r;rqL5FuclidLh@#Rz9-bs))MBR>)A2OGZ ziI<<844_Q~WOQCN2*asG)#|cOHhCqF-gQxWnzz%Y+t|8$fvcjy;JV>xRD95Me7QPLcQI6m=r#7=W?3r)g6EKP33fqb{Rr$^+RRbwzFv&MPBxe(`2iLkVh;#_# z3E=J)C^0@UP=u-Na3X{mR&=1+L+N_u;N1$Kzm3{$!JpnoqW`z6@SM*+D_idzN`-`{ z%djblA-Vo!t$G-aG1Nmzv?(Tf`bxCI#x;d?(|gQiL`hpBtA0PVKaKm$Zd_Y?9(;Lw z`r}mkeU+YlOf2h9JV2X*^h){YrgHbUkD2v*y4i;QaWJ!0+n^VQ^TPGbP`ZKjTcpwT+&A&Yv~O3~u~^t5aZDhksw2 z0MVOMYx2&7k!h+j$@^|s^yj|l!K!)g5zZ}&72lpxarbyshFY8C z6onM|f{mcmEV5-S?o+~+IM5-fbYlCB%D04h0jcu2$@0&y3{nnqZn_8%2sbUYlsfSZ z@?PtUGz=Gr2uGd~2o+mzTo^v_){uU4^-RO>9z&w}BC@Q*8+|5CgC+;pR$L=mR|#%- zxl?lii%_!Tahtz&fNs9QssrJBgWg+`id=beJigkSXI$a;bURVao-`K6@zr<>dSiDj zKHwBIa-Us7GaE<#u=)6h>E;Qw&7Qw8yWl-i_eu9Wc^hI3nGNe~y2)<#h{_`jTzqSz zw7G-fH?~bs%1Ns%sWH&bq>xS@LLZo!$7S?)?%wt5ltl9%ycW%&1n*0}hP^2q-Mu?E zyYhAwZpqBpC1&qPqR;ar)#?dt5FD1Eznbs+#dU|!-=pUeC+F*SY3N}0*ZXuO)Z zQ(QE^Lg`Jmx5(bl*hU4c+4~2#07Qm5q%#u zS@LiUo*MB3Y9VL5Yw8BaHn4r^4Pb|l;{7bR6EHI$Mtp;C_Qo1!3=N}{iX-su2<+(J zD0%Gcv^~*3UAxaQp9Agz#i z1MfInfOOcD59E{$oT5E{vPnvhwP((XHffbn>)pB4P784o8gc-WkZN)*Zxbn0A# zxJ_l2$$k4_|DVm#{G1>Alg|dfEVMa1U;NBt{>)?k%wzt{WB$xz{>)?k%wzt{WB$xz zqA2OlJm$|l=FdDPQrCaxF@NSUF>~3^Jm$|l=Km{-3i7x_PdVX8v@S&W5& zAm?PbFGBG=Uz4&FQD&&`f|kaCu^QiSnI?u@Z-=Yruef7*CjVhY(GhZj9U66+-&w`5 zD2ho(qb_Z0%Gjt0kgCmm?zbd(A?d8k2$MOvu*sZ%PG5TmGZo!PMVyPx&li93)c~B0 z{$G}SZh?s9P?>l+G$f9@Ar+FC)|qko@4yI7?F|@SK8jv4wXQyhb0Lihm(08RBE)W# zU!ws=Zk9f@+u+-6iD_bEx6p^^s!n7EOymSIOy;I)xgq`3UBf;r?8R*Qz7pkZ*n;2Z zLy$N>f`>eqfp?vJ`P{GxSgLPA@&LGK2>$sF7JZ%VE=7$892LD3*pd%duqDIOJtb&} z0=dO(F#;3I`T?$?SW7bM7TJ$pM>juzM4cvWX~fqM-%>6<|yP=PN8+a%)o&%4S~Lb+&WU4B!7^ zO-iPUSv_=B_hCPFJFr8|mfiExad28g>K8&LMFWKZ13du7&ksicvw2lpQ^Z6t^{m19 z?J{d`0f+Ln@f(56-%rGHmEAEVX$`ou&Ll0p&x9eX_)#C+txW(lD5l=cbk&?bf+pZW zmKMk{EoEHBZ-BR$&w%gETE&yIFhQx{fw+MbV}{F04&$TfI>Vplq)xp!dk-Zl5vi}1}ir_Xln z#JBfb-y{ul4@KgWtDjEQ*CVIVS1pvMEqtFD_!Qw9!%9{(?@1lTXFu`c;(+3-T0R$koS7#0L8a7Sy0vPyd8>5}*fcL!@;b)t= zEajP(5SzzS?4KXaT!aF#PL(Bw%^ z!hqF@_>2tJeya)luM66Vi&nss0DEf7mA$gjxP$U;_kkuET>Ad4rMMX%|KJiXqpZGV z^KSU`sy=!=Yna&z7y?aUa|d7F1|?I#d~hN(DB*7wWp918*_q+Jbhlsr8*BysX zS%$$JO5mXo<@+j!Av0+t4+E8f&uEq!j}S3_6-8)N^}_s5Pc;k>6D*=|E-aVG(x7(7 z5ny-HeyZ`i+&OpXww7ppbCbfk$=d{`f4IqKh>^qIB^3%8fu(8K1acxHN|T2tkB|c) zH+gn|X*`xK7fo_ECI!1_GjQEbiy;A3(%vCXY1N-IO(Ft&w z#qHN29#cdUR^lUiCj%MAU2V^L-nEpOilj?y9C-ZR-wfB`CCju0Q*D1yc$L^?XA8qA ztIaR$GCC5t>g(tsZ1egPdFy;kPBX*cdsryPH(%WV(ub;2R}6lygj~p0=YNCHn$pSm*{Kt|DMVpEKYiI^RtuvjV?`F30yGT!$}Boi2hVa1(bFOR1X| zaTGr=(suJ7=c3-Qw>rD{l5?GPUyVq>FlsbBGwB9c%5UEVBaV+Pcoc=CZ4+e9gdN(S zDwvuO!`ppGm4SPY1alhx{R=j>Gqv|RrWRu#ED~IN`B_UOeI6;q@`!!f+J32|9-geE z_>uy*FA{xu*s|EbOw|Nptg1FX1n4OBy6~dVH2>Fw?>|c{Cb}q-E|4JNkFCZk_Q?)* zbl+cl4G)ePxzQy0TmgVwF%C#Z)oW?MJV}e$tG=DEL2r{`+G&Ly$ISoUYu?1AC1<*P z3?<;EI_ow;rB)bV}ph6Q?@iTtLBsCqN}NpQ^`lT8>>vMTHVAck!R%8@5odb8fjg-TgcUY zq*O1QxyhDN)VRIwMj?=0xPvzUo%c^NSqK+vYs=R@Oo0sL34zF~>Hxp*=i9OCd@h-p zrfSi|L{o~VySskkSd_R1n)X;MbFyjKb?d)4N}>_t1>!D^+;xdrJV6GGj54gE(ad-j zyL=b`Nnj&KgmTGnD9ecBnIZJZE%Si;MV5X+=uESS;*-v{k;M=ah<|nc%BGZ8@)%9x z73d`$gkeSQfMAJ-g%R5&pZ7H!BaRTb-oq=#453%B^L`iHJckSj0|yfOM5%oqrxxu* zMZ*cP5w|MFpX@f;VAg@*wW!Cr0Hm+XvknG?c84MaR_k6)f~q|~&!LO94FD2WBFZC_ zywD3Aw@eZDNlrgGKxgRBmM><-%-#~4u7zu~z7Sf$EnYruOSxDpLXFHqsF;Ur{wd>m zVWGS3^fBW}hEGhiMPZxDa?~WSoGFNrDLNM<1=UHjVbjGK+7g_LlWw~^$7G+Ai3mjbt2|49{sf|mi6G}O< zjzBmA?z;t4Elx@ivp2$y3r9<|rEm#km{P3s4jI6aJmx?qBYQ%O2rJKEQ_&&M3%otv z%^@))_D=SXUz}+!v4irLH=G+%fARX^^Upj-Ycu{%OBKrIJ(U=L{a?PMGmgeL0tMFF z&05(-54jVkuB>~n)%cOQ_x;Nf=imMiId}~Hr^n#v$?|cot8Hy&SqjW2Cl7ZYGq08N zx^md1j9V^|eNXSLvkf!XdwF^A)a!iVv)=t7T&%UKUYksZ=!(kT5^UKvlt=Atov+=a zZ`*J7&D|z{ys*bAPVD!qzhVCwzEn4Vz(z1Ganpg6JzXyp@N!QT%N{&>c5>YK!GEg* zYYuZ=8`W)m$&D}C^Y3*&mM@Iq>=a)IH@DRj?>JN+FnNA*6`sLo1ztTH@SxV6XL|N( z`T>EtGj$iQ?!Sutr|?Nv;O0GN_q({r2Momw7HkQ29g@D==5OpG5|-j_qI=xGzt`^& zQU2V_7t7?!c#Z>l>PAF5hmqAK<`${T%4pFCvxP=KE;z1VR?hiKYNIII>c6h#L?u?! zkL&2D4l_Ny&M+Uw_xI)Sv>k`sK6h4IuRFW@Tm!%80bTXl+Aw4Ocw^CV5&C7pPz*HMk3H$Uzo^Q~j z{AX`O_+|*@%So_Z^OI-$tyt?4J?U+Nm;TqKjy~~!y#JZdlyZ^Jb*KA%w~DJaTH0k! zsnc&AbCX&{pX2+$@P`Gl0#GX?NxoJ8s%lBGM(w6Vh5ZqC>wKW0>Fa}1EW3vU6^?pv zidS|Q$qpxc{RZnUPXB%NipIQ!OO*Vx%htGDHx|>^IpX-YPApTQ3@<%BKjxe;v>o3Q zIG5i|@nFmmD*5BEZJhBs-ST{{k6lkH&P=%9EaF@8qi+_D`|Ogp-{mh$yZc33^WPmy zd}M7U);BYEdt)2Bx}B9)Z@I4+fiLEBa5QP%S#j2E*7w4xZW~S8LPFMp3434i%&Il1-g12J?ZhQ;a%bGuSd2NbYFDj z7YQ~ULk32+0~<`&5#mqY+|29zf0b?JUrDBWTmdb02F)<01~m;D5y9=aCz4)IqTMpD zi5eP?iMd`R6_smtFo%xJq-hg2(6~&rSVPRIhgE!z`#E2Es zo>}acrC`k>%ZOUH2dt1`yfy;*)_-j=-BlD1i6SGJbZ(5g zlUVs<(04HQ{5FAkQt6(8SrmnR=#w{zJNYMxl-6N{w#d(EPH{JJ;nWGu0pWfpk`-aW zu8~`MIYioVaE8(ZK?=izC+(_2aLY7nMC&QtmI?IN{HC;;C~t!n=Kk^K;SnN1&*C<; zbw4WESm$7NqOfKHE|?9bt1j9>n|99euR*#4ac^bpYK;bFUot5R6Yyj zLw3yD&25o;E%uoZIn_%P=!73;XUC+A;a;`2eFbHC_jaoqj7V0|u4W1olh38}qO$|6 z3yIeLjCQlPQsCzXUY53Ov84lNiZ~-<{-+E@*Sr{Z$G8T|j6&!*eQ z0CG1 zPM?#G@ok6SBxvdz2w}@f6D&Bc*8!O!@04|z$T@!X6^)e<_MaF!J7q$POb&=lyc3#WG~pd7@l_NRS!p#fl12Z2F^Cn8 zxA8T*xf)C8=GadP9AlYN&ON zaAy3p?$=qJTqNYJp`6WWsCo(EN!A_OUM<0&aYtS?Ahk$v-~u=mcp+vJ=yYH;&kw2_ zPWZ!SGxZ@@GevQvw9a-mn&^wQ$owEKoKq;SrN^c?I%Qd+)i_AzQNGFBZ0z>+MTUIc zj^R0aqE}(~ikB9!x_4=OQ984@LRK;3t*1<%HncgCZ;j#alQkW+^QgnpPUp-%n~Qx3 z!%*pr~g&@0#Pke?ZmuC+Wk8qR@IENC4{( zBfX02w_#z{1`H|uK@RG}8f#bD8JlY?@u=pxQp%wylf3x(XC7k?E6@!mQT2|ZXAz)OeH1MA>qnx|Cx<6NOI3A-!)WL?Ap;(jba-sf z1THJo9{&FKU({eG4=|j34J)6HJ8^f;uF}5t}x#jWZ-bg)7JZwB9A6Pi^_)jE~ zX-q!K_(3_S33mUid*tehp}-YP@})2cq$Vrh@frB_FN3sK)QS|@HWDQt^dUux72jUK zq!B42U#RX~yMQ5~jGLVZ5$)xBAfg=jO*n|%Df~v(87}4Iav{ZG(DzB7F4MG>3N6!2 z+qJEsFwe}0$DU+2lO4Fc)8&D+`z@Jyo&_kh*}Ic4-GIJufh5V;&hn%w@qm3C6{Zt{AFK0TnaTkFO&ZE!w2PK zh2X#KclTW^?YevR+1=mvr#*Q1@T1&Ck%J|>*lc`6F8xvH%#Nv%8L`y(WZ9_uKtfLYe8geQn7V92+=uuDjqn<#>{OD(F+=o`fppq;aO^HH}2|$bM*>lCQ!pwd(Dld+`3ZRQ7?|d1nDHRa|Y64 zuX!uiJj`Vh0^KrrB%iDYwk==Ncjj$fiADUD2?HksZys(S$2F_Pt(9o5^jzJE8J=CNe!4mEK|zi|+q&#kb+$>`j$5g%b-`{~B#D@F*lN z^uywk2YX3mp|W_RGQS7Y+Jo7?J&i=hc1|<;iZ}c6y^W{Nyg?jB;MkKCkJ%;n+3iH` zu-iRhw~_AaxgP6_SF~2HByGyNX|d@oWvN;o#e!H!W?s1GPPh?VDR_?pbF`M3 zW{VvyX5N!YaZ1r#J(SM3=q=EAB3SwEnS-w{fAS9uX<$#W*K4D%jyn*F8~z&k>?aBS zyH!2UHS?~-e5_qBtc@7yG~Mi^fZpVN**~f?CgDfsg=Vf5?r-p~{^bA2eY)E{U8+j{6+NgMf$l(y?hxlBL%K>o7PR$QtOYSG8KZ& z&l)TCfR*C*=?Ix+%1UAnFPdvDnkRjD^DaQQnju)rxKW%I@g(hLndxnlEL?=gyt2oE zftl1jnNZGOX0QI4k@moNV7SJoo;N&?_@PMf7<+H={9YTAC418)S@>!(iwSk7LEEB7 z39rNMNQU3B+%7fk5XX|u#*R8gk6MQ1Iz{AKD)5rA8&pbX5LiS&s8UV>!Q zN6DytBdXG788DknDD4~y6<0)2s#+8yYZ$rQZG6xmsAkLXq#oWa&kQ)NJnYaT(W0?!P#Hs>V(yGQ#OUYaOv*5H=qe3-D{TR zhV7wV9iSG~sUhW8aq?lp{U#!TtIU4NX8!~zH*9(*SpQ6wd|T#QTO)QxT%wj7W$|e7 zoJlohql)r5W64{+eKCr<5|s~DU2*l!S)1BL8(a1uc2#}=L-}mJiCrpYbuUzyRTtHr zLi()9vl7^Ym`82Z=a$2gHgW_~+>ASCV+L#M)vN0F5Sh(HjGi^C(6p&xIr=5#YfRzw z^_|BkE_`XU{Ts?)8nE6Yok(YrN0+0=Qt-gzc9Ol1)EUGyn_m~DqGRq*Qi zMPD!1T8-5**yKELu*3>yF(t*v!}!Su6J|FDW{s({A}pH7NzPvi8#r>Ijrpb*CLjmP zs8&=Ac>6Y`m%%BOGk5pYge`Gp+q0fvCy8gX(v&EA-6ezce572ae5&v|OBlMZ7JW6)TLdm@*qoF>=JFwCl1e&^xhmn0ggVJrc!u!Ei^- z7(Eff#((S@F7h2pB$3Zs(T8^Gc|0&k;MXeNQN`W_pEIShYGyZTytA8>YNx-{OfwHD zxZnFVhwZ`cVP9QeFJ`Y>jt!a(CSuv0>_yWk*6c^gH^IhfThvf19c>alXwBb2pswv@GuW-p&<3XP_RW;S)0RL{xO&aJVk z_&3C~=EU;ZE1)m7V4c>6L?ncUB`j1hjHwI8`C99bwG4YGk_qy~7^V}u8++BnY-gI2 z!ocM7fys;01Iq!_Wo8L`2%O9(sSF`1!wN;y_&{B~O*L3awDnE9wmw&irQZ|E%pvh) z(;`{hHHtB*W5yrkX6KZ2e|Z}II(_?P!4FB*?c6C!stk`BdVpagnYbK%N<=YR;l%k7 zrexAc&`{NCV(qF}+qT#@*W=dL$Iz^?U@Q8)O_;n(m?-z;s77MaMtM@Ck}6p05eWw_ zv2H6am<=b!@h0q!*;*;;&D_7ouPSYNAT7&12E8 zjAg$vFufyvq8%NWT>uWK3DW zm~YrKwKB-xn*h9TA(vcT*5!w-Yd_2uBwrv@T>0n3uz7p8R|8_W>fYmnGZF4^t=nMRmp&CHq@(+^P&CCIfMa6h!> zkDV@lByzgD`rWrVIa`Yz{_jh^{uZ)|SV^pQ%yVWuz=1<7$%G&J!LF$(9Sr+a0JN@t zwuu6JwQy4=xC`^ngFS`a-2Kf>ZgxT(S`+r>&X*@masL?_jN1qn7UyLqBI?jN&a?pD z8ml#<1unT{BeS(3)MHO!=&k$S66_ZCd~F7LcnT~TNjX6n#$z~+AE(jlsVl71Kov~? zB`U3+eDjc0gpsM=P$K`xR()5=RAlq8$)l>%SzzTb|1eD2zkC=g z3Vsr^d7_u5!Q)=pMAKDeNDc8MNF7Y_br+)TTmkixy-BZ7SM926WSXwVnTADw;W74D zyXO&Jbd)~w96E5HOrwt99vHtg#BRkdP&0^Y3kN5McG~(DhtWxPZY{g&NV z^@~X>VP^^3U>MD&+rquJU$tU)7e}k~y2PI+S~k(COTo(}k5?K@m-OT;t9GyaB0u+w z{=(dGD}IPxlDCjR?Yw&Jyt5B&BjWC04x?_Z;rtP=TW~mliUz3OZBNccLy<_VlJHA;E{d;9_h^BKBeK9E?vF@I&4 zj%Cq_D>Hjl8P8;Q^bqIx-M8&rzr@m@&TCMLFNw-&k8utr<5~=RWitv(JyXmFjXpmC zFu85p9-BYa3{Y3)8WmDS4a35TO_RaIjs691@i6~5Cz#GNACzYsSh*D1lGm~GNbWh3`dTCngE?7cE)tO#JN9t0dP%ACGdt8J&> z1WEZ#&g9QG(nKu!lm|22i8}^G9=-<<_tt!2;!mUNrf-cZ;uM5umoLvQheoe^dtj1^ z9i>j`U{L6_f_j&0Z(<=SFCSnEwsq2RC#<-H4KkIxBoR386D|lG5-Ki6wje9_dcueE zsLC3=AL`lx)DJ{r=4fvfmgt2fvJ`rL5BiFpW%TnK8=GViCV7oge{MiZn?egeF~#ciR@dbh>2K!r}8ZPaEx@A zOpM5`$trS7A!aN_#6rv@tSYE{?%)86mi&zms`HD%0OyeFw;3=mAd$J73ZWR(U5nM0 zT4oD{U!^DLwdf@l=Oi^XRUdH>8IZZSZ-&zHzUa$CP+5Kb>&fAIMHij4_hda3Me$X} zR@29vGwWA<LW*HnfmVk{Qx1NUlNH4qJ^PoL2o5ZRa_VFgWb-Ubwb*QaBQ_n z4_Og6;Wgl~e8J<|K!c&F*2cn39<&T|)D?ucr))gWoF)%d?0_G%4d|gU&^#Kj(={!n3k1$qe+zS1d3LR!3q@F%l|quFEu!4 z8{_@$@#SBoN+?TupN#n`wm!RIq{;-?6nkyIs-+?w0wi$gP&Fy6Gxr8~3|aUCAVk8oG(m20eg#rU7dsnQ-TK3MH(9 zNSyO%oDavnz>TeEHc16LQo=F!`PS=d{ZF#xvMo&+$6>)e22T?_>y30(f>BOi(+=JU zDh$2xdDuA9iJX3FM}$kX}=96H1^n*ZTq+uJ@aF=nn4JZ$-tN0o?UjA`HG&2a6U(rAQ|0TMHdcYSyN?)T(NM-4fE&BcikGR0m|m))upGp z4sX{-AS@tV{BqiCV+3x+MOT&ijl%l&t6~iGG0i@Ez2q?j@}ka8A<#~=_nfU2L&(;n zgoNpTCE9btGa3?M_Vatfnv3lZwm#Px`$Xw>TIIOzQw%? zA%wg}Djs^YR*P_%q!ALlmS+s91_DTVp-8>X*r~tdtFY+y)AaRU?v}Yeo(hFt^)RoN zmR|{^<-~CHA1l_`@hT2dEWuEBW=36$hTah6iigxJ^4!Aw0w-Noab-w;*~YIk=^Gz^ z){5XPm;)AfN*|*uWo$}&OF7zlwjipm@3!*zh!*#DyzMC`ej%uOrDB#dp11wP7GcUI zk>z6t8*VHe-PZnsELpqop*VO#5?knQ0r@5%AjhS7N5W1YnP!~sFVdCzQ_FLrx=)Cz zVK%L&YCb`WuTmd33QKR7^?U9#Weiu+Q3@35QGXL>j)%t2H=T~=Xo1X|xac_*`!(ZB zw}@;NqZ+zMUi)bw0fv%!{U`Goyj%`4818rcCyfXUPuHBpQpFLN0JQX4dmswskB{Gt z=kXR715;8Rmk=*zFMsyPKCIq-(?5?$t#Y990yWL)4)fjX^)me_J1Z-sYt|sCBsq=5 zdS(5)xm)*Yb^F2(695FMna6oWW#x44%DV}Nx}t8(|3)t9io6FGhR;|Ocd^BFwBjI= z5^~a{=(el6J5O^J%r1HNz3`8Zhl|p}#l==j9;p{3x_{-1c=Y3bdeT&?lUuU>y1&sy zM~PyA6_*lNYdiw@3IpLcsyTn3% z4b9rB`#nFeQzH%J#4Qh8-iXYu_FR*DMjCY)E-3YAf|1il(D1Gv^%?fN=W!5xPrUVm z$K2dLu6qr2-+#P#*mk#4PHQQ@&eWa(o~V=O1S?h*P*78OabXPlAySoNPMzsZsOBnH!52)sF z`=IodVs7RKNsB7z)>{iXEXVVDT=F}fKCC*vTv7SMe!rF1WbGc8@JU@Pxk??3q36tG z;f;}ZifVjPD;!)F+V}0o27n_G!7%4M==t8Vz0;BAP~^b@&qX{ zOfaOfG%3=v?q^*)%-#36cf|LJzGohLm-zt^Xa0OWA8ME??_|}x18x=>wOnR6A|28#-Lzj1HUVms`_U2{lI3`#+CPEHgi!gt&+ z)jUWVmij6Trn_do*LOI?%xNh=Yu|}2-ubtDzH+A19c>MycWF4Y%>q%+1EJj*t&kRm zM@*bHKs{XsNJ3xR8nzASj5xD+e{GbVfohetFy2=i)iI>jl`8Q|N8Utik>8NJbL!6z zFLyKV_cB#ADW!JEWT@PBvBG4Oj~QzGi9I(WYYa4-0y@j-Z!c6rO%~prAr3!{4Av1< zQazyI+NT|9mUcPA_=VIzw)YWavx{SnXR=i^y-wjJOn@|Kmc`d(0nwg8qG;)G;hS(_ zSo|K`QP?(UVrlHTr)N&W_+ZfWbGfa5NQUIz?!@6&)q&LQ`e@4>`L4FVc|1X&m;XL$ zQnDM$bD?F{NXnpJB^;dv`YEA|kKb})*pl$oJ<#~wP+l{o9eaYnXw;p1?s+00^=>Tg zilhZ(DW^3u^@lbS@|rEo2ct`l!UV!D%p1M~+m?PWzmhGncwi904JzJdLL6lG!+iog zLQrAQ)BV-f_ykCkh56a8>Th3NyT@ZAFeUChI%}?Oe;tLOvza-0As0i*M^a2xCyiac z2?@}+xfw<)jw^$)nS1O|p8fMI%h=fK5N~xQGcl-pOnt1fl$NdlXHZd+ziRxJ);890 zyE--^&?HXa{uZtRn2te8~}7b8cNlZpjIV7I1r(i{ zkY1DDnu&?X3BwwXBXNFXFo`z=qQrBHKG*Sc*{h9{X2xK)zcZrmGqdrmnFr#TdFzf* zb{roMG$};hW+07LGn(FfzHYOe)O6!{GS{2f`j5$64y1bLCyJ!oCti@dnXgc345S08 zMc+EmHb@#TzLhV~l3*;ZS@5CLE*RbqxivNFL^AM+gl?mz(?v5=BCqRbh+ z-QkL1R;vBpi6gCM0kGlw6wq8c!izH>cX%b;70%~ehd;RiO$`46ibt(k8k(Tlwcx~_ z^r$wp)W`h1H7#|O(Sdi%F5&q1Xa(PuEHa0bQ}#AzKPhfcM&;}a+^@=zB!LiUeCy1X_R^y+oALDXAI%-hzLv+$nI5g7ma>`ANg zR&{~O@*67EgC0|*?o*3ERowMm`r2et*vtxjCi6|r)SI^J0*f?`1WsXdRO4wE-v~O8 zggd8dW~K&wI`(gQF^d(%jf(tQRu6l9?e!O4Xm^(Y>?%<|B3s`u;Z60zRkIzsY#Q(i zD$s0>>h;Kd-&0LrJ8v8y9;In>XD405=D(+ zdZNOr=02F2f~38pB?3#6=Kut|fV+Sizs^fzP+_pMqCK5lgqEw3v5>?wie9#;b|}*5 zwh)_RndNiD-ow>o!7B3F=V^|nm^m>0bzu6=MtdB`^)q5`ye8DJKyMZmflwcGV*5Hr z8%JNJ%D`PaGf8BVifMHz7t#$~)~E+-wDWLP!{Llt_A|=*vrf+E`+Z1baCmzv0AP1E zb^Z%}`RQTv*Nw|(xia&?YA;hR*V0v+%>8}6*t}MJ@*UOQii-jf1pqbP9}3N!-sEWS z69A>^+ivk^%?FKF9`Qq^7dci&J`nq74{v@#Z+@Bp8oUgJazyQ<1w_j?xV5F~LyOUC zgRTW2>JH~qH@{Miqc+O08=oIM7}j+k);(Ff>|c9rT?S~e8N~2&13tsKzL^u}|LC{X z7p>x`lM_wR-uoB12ikh|b+O_jC<(byC9qQE` zt&}Y*;TH@3nYbsNL_)gL?y$TQvo%a0YCN0$3OZq13+%tZ0ondEY;8|ub?0TlZ{B60Nw(IATB8sENFu(66+M=u5}-KoH?CSX@FU!0=4ogQs8QwnYS zS;3|&!TQ1T*WksEyW)03p_dEiif!YLT^L)&1kaUZY9Xq`IG@}V1U zUyCytkCXdyM5-sf`g8iDB@D;moLDerFHlN71Em(g0@%p(Xk)(x7UF_b<-|?&#%uK9 zC=RcgDD~JV9iEPP?G#z+^k%}C5T3_;4Sr0o48Q-OP^^D>%a##YjS(@30%eME==9t{ zov2RzsLm~)Kz`?fh3TS&?d;;o*%0A9RnrK@pq{S3`_rapPe$<`t9V=B#}lL0XMhI1 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 Rz6|i6w&s!F@-(bN{uig#>uvx5 literal 0 HcmV?d00001 From 25dde60521e909b8686cd05c6456a784f58b509b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:51:25 +0200 Subject: [PATCH 033/151] Update Slate_API.md --- docs/Slate_API.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 68ba9be72..88101f2d0 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -193,6 +193,16 @@ The second slot starts 100 units below the first one (caused by the padding of t The third slot is aligned to right and vertically to the bottom with a rght/bottom padding of 50 units. +Useful links: + +https://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SVerticalBox/FSlot/index.html + +https://api.unrealengine.com/INT/API/Runtime/SlateCore/Types/EHorizontalAlignment/index.html + +https://api.unrealengine.com/INT/API/Runtime/SlateCore/Types/EVerticalAlignment/index.html + + + It is pretty hard to see what is going on here, but adding an SBorder will clarify things... ## SBorder From bbcdfe19324c472ff2a07b96da23f23a74e2d918 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 09:52:41 +0200 Subject: [PATCH 034/151] Update Slate_API.md --- docs/Slate_API.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 88101f2d0..5b231ef94 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -226,6 +226,14 @@ window.set_content(SBorder()(vertical_box)) ![SBorder](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SBorder.png) +Now slot attributes should be more clear. Note that SBorder has a set_content() method but here we used the 'visual' style (mixed with procedural one): + +```python +SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')) +``` + +## Padding + ## SHorizontalBox ## SButton From b5e050d84b6673d71719c6dde58cf4184f6eb2d3 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:00:33 +0200 Subject: [PATCH 035/151] Update Slate_API.md --- docs/Slate_API.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 5b231ef94..aef547d1c 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -232,8 +232,67 @@ Now slot attributes should be more clear. Note that SBorder has a set_content() SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')) ``` +The list of FArguments for SBorder is avalable here: https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Layout/SBorder/FArguments/ + ## Padding +The padding attributes of slots, defines their margin size. + +Padding in the python api accepts various forms: + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')), padding=100, v_align=EVerticalAlignment.VAlign_Fill) + +window.set_content(SBorder()(vertical_box)) +``` + +passing a single float will specify the same amount of units for top, left, bottom and right: + +![Padding](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Padding.png) + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')), padding=(100, 100), v_align=EVerticalAlignment.VAlign_Fill) + +window.set_content(SBorder()(vertical_box)) +``` + +a 2-items float tuple will specify top and left and will force bottom and right to 0: + +![Padding 2](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Padding2.png) + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')), padding=(100, 100, 30, 30), v_align=EVerticalAlignment.VAlign_Fill) + +window.set_content(SBorder()(vertical_box)) +``` + +We have alredy seen the 4-items float tuple for specifying top, left, bottom and right: + +![Padding 3](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Padding3.png) + + + ## SHorizontalBox ## SButton From 2b87f3d7b9deba62068a14cad37720709a5a2d3b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:00:52 +0200 Subject: [PATCH 036/151] added padding screenshots --- docs/screenshots/slate_Padding.png | Bin 0 -> 55635 bytes docs/screenshots/slate_Padding2.png | Bin 0 -> 53810 bytes docs/screenshots/slate_Padding3.png | Bin 0 -> 54872 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_Padding.png create mode 100644 docs/screenshots/slate_Padding2.png create mode 100644 docs/screenshots/slate_Padding3.png diff --git a/docs/screenshots/slate_Padding.png b/docs/screenshots/slate_Padding.png new file mode 100644 index 0000000000000000000000000000000000000000..fa097beb3bd1702ca3ad01004d9c9db41f7e2773 GIT binary patch literal 55635 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%0AQx?_WsL&fMhX~?^_*dJ~AR-(os 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/slate_Padding2.png b/docs/screenshots/slate_Padding2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9fb4d585e82bfce6f886065045187d84bc8752 GIT binary patch literal 53810 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/slate_Padding3.png b/docs/screenshots/slate_Padding3.png new file mode 100644 index 0000000000000000000000000000000000000000..68f6b1b6dc7e39cbaab7260be2491006c7fb2fc8 GIT binary patch literal 54872 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 N_3Jj-UbXgO{Xf_T{UQJW literal 0 HcmV?d00001 From 5928734031fc609e1c74a709588b7e3643feb8c0 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:06:13 +0200 Subject: [PATCH 037/151] Update Slate_API.md --- docs/Slate_API.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index aef547d1c..bf261aa52 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -291,7 +291,35 @@ We have alredy seen the 4-items float tuple for specifying top, left, bottom and ![Padding 3](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Padding3.png) +In addition to float/float-tuples you can specify padding using the FMargin struct: +```python +from unreal_engine.structs import Margin +print(Margin.properties()) +``` +returns + +```python +['Left', 'Top', 'Right', 'Bottom'] +``` + +So: + +```python +from unreal_engine import SWindow, STextBlock, SVerticalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment +from unreal_engine.structs import Margin + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +vertical_box = SVerticalBox() + +vertical_box.add_slot(SBorder()(STextBlock(text='Hello i am an STextBlock [line 0]')), padding=Margin(Left=100, Right=50), v_align=EVerticalAlignment.VAlign_Fill) + +window.set_content(SBorder()(vertical_box)) +``` + +![Padding 4](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Padding4.png) ## SHorizontalBox From 2d3551d08f3b136f8a57107827d8dd0c45c21763 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:17:01 +0200 Subject: [PATCH 038/151] Update Slate_API.md --- docs/Slate_API.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index bf261aa52..5e6961c45 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -323,4 +323,25 @@ window.set_content(SBorder()(vertical_box)) ## SHorizontalBox +SHorizontalBox allows you to horizontally align widgets in a containers: + +```python +from unreal_engine import SWindow, STextBlock, SHorizontalBox, SBorder +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment +from unreal_engine.structs import Margin + +window = SWindow(client_size=(512, 512), title='First Slate Window') + +horizontal_box = SHorizontalBox() + +horizontal_box.add_slot(SBorder()(STextBlock(text='Left')), padding=Margin(Left=100, Right=50, Bottom=30), v_align=EVerticalAlignment.VAlign_Fill) +horizontal_box.add_slot(SBorder()(STextBlock(text='Right')), padding=Margin(Left=10, Right=20, Top=50), v_align=EVerticalAlignment.VAlign_Fill) + +window.set_content(SBorder()(horizontal_box)) +``` + +![SHorizontalBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SHorizontalBox.png) + +You can obviously combine vertical and horizontal boxes (this time using 'visual' style) + ## SButton From 0c185def0e59d062de311042c0d27f4328724923 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:25:29 +0200 Subject: [PATCH 039/151] Update Slate_API.md --- docs/Slate_API.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 5e6961c45..f24bdb1a9 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -344,4 +344,12 @@ window.set_content(SBorder()(horizontal_box)) You can obviously combine vertical and horizontal boxes (this time using 'visual' style) +## SGridPanel + +## SScrollBox + ## SButton + +## SEditableTextBox + +## SImage From be2692b8457642634aca916609fa4d406d34d9ab Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 10:26:02 +0200 Subject: [PATCH 040/151] Update Slate_API.md --- docs/Slate_API.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index f24bdb1a9..b4c3e4963 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -29,7 +29,11 @@ window = SWindow(client_size=(512, 512), title='First Slate Window') As you can see just by instancing Slate you will create and show them. -In the C++ api, each SWidget has its series of FArguments (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SComboBox/FArguments/index.html). They are the options of the SWidget, and in the python api you pass them as arguments to the constructor (note the pythonization of the names with lower-case-underscore-delimited conversion). In this case the ClientSize FArguments (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/ClientSize/index.html) became 'client_size' and Title (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/Title/index.html) became 'title'. Note the shortcut from FVector2D to a simple 2-elements float tuple. (both are supported) +In the C++ api, each SWidget has its series of FArguments (https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SComboBox/FArguments/index.html). + +They are the options of the SWidget, and in the python api you pass them as arguments to the constructor (note the pythonization of the names with lower-case-underscore-delimited conversion). + +In this case the ClientSize FArguments (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/ClientSize/index.html) became 'client_size' and Title (http://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SWindow/FArguments/Title/index.html) became 'title'. Note the shortcut from FVector2D to a simple 2-elements float tuple. (both are supported) ## STextBlock From f260d370e927d26b258c2ca8fcbb30ec8b05c638 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:22:53 +0200 Subject: [PATCH 041/151] Update Slate_API.md --- docs/Slate_API.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index b4c3e4963..b91e25f1e 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -348,6 +348,40 @@ window.set_content(SBorder()(horizontal_box)) You can obviously combine vertical and horizontal boxes (this time using 'visual' style) +```python +from unreal_engine import SWindow, STextBlock, SHorizontalBox, SVerticalBox, SBorder, FLinearColor +from unreal_engine.enums import EVerticalAlignment, EHorizontalAlignment, ETextJustify +from unreal_engine.structs import Margin, SlateColor + +SWindow(client_size=(512, 256), title='Slate Window')( + SVerticalBox() + ( + SHorizontalBox() + ( + SBorder()(STextBlock(text='Left top', justification=ETextJustify.Center)), v_align=EVerticalAlignment.VAlign_Fill + ) + ( + SBorder(border_background_color=SlateColor(SpecifiedColor=FLinearColor.Green))(STextBlock(text='Right top', highlight_text='Right')) + ) + ) + ( + SHorizontalBox() + ( + SBorder(border_background_color=SlateColor(SpecifiedColor=FLinearColor(1, 0, 0)), padding=20) + ( + STextBlock(text='Left bottom') + ), v_align=EVerticalAlignment.VAlign_Fill + ) + ( + SBorder()(STextBlock(text='Middle bottom', justification=ETextJustify.Right)), v_align=EVerticalAlignment.VAlign_Center + ) + ( + SBorder(border_background_color=SlateColor(SpecifiedColor=FLinearColor.Yellow))(STextBlock(text='Right bottom')), v_align=EVerticalAlignment.VAlign_Fill + ) + ) +) +``` + ## SGridPanel ## SScrollBox From ad3c049f328375c71222069ed803a3f6bf042d0a Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:23:43 +0200 Subject: [PATCH 042/151] fixed enums --- .../Private/Slate/UEPySBorder.cpp | 2 +- .../Private/Slate/UEPySGridPanel.cpp | 29 +++++++++++------- .../Private/Slate/UEPySlate.h | 29 ++++++++++++++++++ .../UnrealEnginePython/Private/UEPyModule.cpp | 11 +++++-- docs/screenshots/slate_Padding4.png | Bin 0 -> 55666 bytes docs/screenshots/slate_SHorizontalBox.png | Bin 0 -> 56356 bytes docs/screenshots/slate_SHorizontalBox2.png | Bin 0 -> 35348 bytes 7 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 docs/screenshots/slate_Padding4.png create mode 100644 docs/screenshots/slate_SHorizontalBox.png create mode 100644 docs/screenshots/slate_SHorizontalBox2.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySBorder.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySBorder.cpp index 3aff74d85..b2a8e4d0f 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySBorder.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySBorder.cpp @@ -153,7 +153,7 @@ static int ue_py_sborder_init(ue_PySBorder *self, PyObject *args, PyObject *kwar ue_py_slate_farguments_optional_struct_ptr("border_image", BorderImage, FSlateBrush); ue_py_slate_farguments_optional_enum("h_align", HAlign, EHorizontalAlignment); ue_py_slate_farguments_optional_enum("v_align", VAlign, EVerticalAlignment); - ue_py_slate_farguments_struct("padding", Padding, FMargin); + ue_py_slate_farguments_padding("padding", Padding); ue_py_slate_farguments_struct("foreground_color", ForegroundColor, FSlateColor); ue_py_slate_farguments_fvector2d("content_scale", ContentScale); ue_py_slate_farguments_fvector2d("desired_size_scale", DesiredSizeScale); diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp index 8fd149a40..6c3a7461b 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp @@ -11,34 +11,41 @@ static PyObject *py_ue_sgrid_panel_clear_children(ue_PySGridPanel *self, PyObjec Py_RETURN_NONE; } -static PyObject *py_ue_sgrid_panel_add_slot(ue_PySGridPanel *self, PyObject * args) +static PyObject *py_ue_sgrid_panel_add_slot(ue_PySGridPanel *self, PyObject * args, PyObject * kwargs) { ue_py_slate_cast(SGridPanel); + PyObject *py_content; - int col; + int column; int row; int layer = 0; - if (!PyArg_ParseTuple(args, "Oii|i:add_slot", &py_content, &col, &row, &layer)) - { - return NULL; - } - TSharedPtr Content = py_ue_is_swidget(py_content); - if (!Content.IsValid()) + char *kwlist[] = { (char *)"widget", (char *)"column", (char *)"row", (char *)"layer", nullptr }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oii|i:add_slot", kwlist, &py_content, &column, &row, &layer)) { return nullptr; } + int32 retCode = [&]() { + ue_py_slate_setup_hack_slot_args_grid(SGridPanel, py_SGridPanel, column, row, SGridPanel::Layer(layer)); + ue_py_slate_farguments_optional_int32("column_span", ColumnSpan); + ue_py_slate_farguments_optional_fvector2d("nudge", Nudge); + ue_py_slate_farguments_optional_int32("row_span", RowSpan); + return 0; + }(); - SGridPanel::FSlot &fslot = py_SGridPanel->AddSlot(col, row, SGridPanel::Layer(layer)); - fslot.AttachWidget(Content.ToSharedRef()); + if (retCode != 0) + { + return PyErr_Format(PyExc_Exception, "could not add GridPanel slot"); + } Py_RETURN_SLATE_SELF; } static PyMethodDef ue_PySGridPanel_methods[] = { { "clear_children", (PyCFunction)py_ue_sgrid_panel_clear_children, METH_VARARGS, "" }, - { "add_slot", (PyCFunction)py_ue_sgrid_panel_add_slot, METH_VARARGS, "" }, +#pragma warning(suppress: 4191) + { "add_slot", (PyCFunction)py_ue_sgrid_panel_add_slot, METH_VARARGS | METH_KEYWORDS, "" }, { NULL } /* Sentinel */ }; diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.h b/Source/UnrealEnginePython/Private/Slate/UEPySlate.h index 4f4a2f706..bda71c376 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.h +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.h @@ -196,6 +196,16 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); }\ ue_py_slate_down(param) + +#define ue_py_slate_farguments_int32(param, attribute) ue_py_slate_up(int32, GetterInt, param, attribute)\ + else if (PyNumber_Check(value)) {\ + PyObject *py_int = PyNumber_Long(value);\ + arguments.attribute((int32)PyLong_AsLong(py_int)); \ + Py_DECREF(py_int);\ + }\ + ue_py_slate_down(param) + + #define ue_py_slate_farguments_tint(param, attribute) ue_py_slate_up(TOptional, GetterIntT>, param, attribute)\ else if (PyNumber_Check(value)) {\ PyObject *py_int = PyNumber_Long(value);\ @@ -312,6 +322,20 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); } +#define ue_py_slate_farguments_optional_int32(param, attribute) { PyObject *value = ue_py_dict_get_item(kwargs, param);\ + if (value) {\ + if (PyNumber_Check(value)) {\ + PyObject *py_int = PyNumber_Long(value);\ + arguments.attribute((int32)PyLong_AsLong(py_int)); \ + Py_DECREF(py_int);\ + }\ + else {\ + PyErr_SetString(PyExc_TypeError, "unsupported type for attribute " param); \ + return -1;\ + }\ + }\ +} + #define ue_py_slate_farguments_optional_float(param, attribute) { PyObject *value = ue_py_dict_get_item(kwargs, param);\ if (value) {\ @@ -450,6 +474,7 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); #define ue_py_slate_farguments_required_slot(param) { PyObject *value = ue_py_dict_get_item(kwargs, param);\ value = value ? value : PyTuple_GetItem(args, 0);\ + if (!value) {PyErr_Clear(); PyErr_SetString(PyExc_TypeError, "you need to specify a widget"); return -1;}\ TSharedPtr Widget = py_ue_is_swidget(value);\ if (Widget.IsValid())\ arguments.AttachWidget(Widget.ToSharedRef());\ @@ -464,6 +489,10 @@ ue_PySWidget *ue_py_get_swidget(TSharedRef s_widget); TArray> DeferredSlateDelegates;\ ue_py_slate_farguments_required_slot("widget"); +#define ue_py_slate_setup_hack_slot_args_grid(_type, _swidget_ref, column, row, layer) _type::FSlot &arguments = _swidget_ref->AddSlot(column, row, layer);\ + TArray> DeferredSlateDelegates;\ + ue_py_slate_farguments_required_slot("widget"); + void ue_python_init_slate(PyObject *); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 97cdc5efa..bcf84e367 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1254,6 +1254,7 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) #endif } } + return PyErr_Format(PyExc_Exception, "unknown enum name \"%s\"", attr); } #endif if (self->ue_object->IsA()) @@ -1261,9 +1262,15 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) UEnum *u_enum = (UEnum *)self->ue_object; PyErr_Clear(); #if ENGINE_MINOR_VERSION > 15 - return PyLong_FromLong(u_enum->GetIndexByName(FName(UTF8_TO_TCHAR(attr)))); + int32 value = u_enum->GetIndexByName(FName(UTF8_TO_TCHAR(attr))); + if (value == INDEX_NONE) + return PyErr_Format(PyExc_Exception, "unknown enum name \"%s\"", attr); + return PyLong_FromLong(value); #else - return PyLong_FromLong(u_enum->FindEnumIndex(FName(UTF8_TO_TCHAR(attr)))); + int32 value = u_enum->FindEnumIndex(FName(UTF8_TO_TCHAR(attr))); + if (value == INDEX_NONE) + return PyErr_Format(PyExc_Exception, "unknown enum name \"%s\"", attr); + return PyLong_FromLong(value); #endif } } diff --git a/docs/screenshots/slate_Padding4.png b/docs/screenshots/slate_Padding4.png new file mode 100644 index 0000000000000000000000000000000000000000..b552e9bec3b19508067aca914fd8d743f6e32075 GIT binary patch literal 55666 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 F{Xd7gY!Cnd literal 0 HcmV?d00001 diff --git a/docs/screenshots/slate_SHorizontalBox.png b/docs/screenshots/slate_SHorizontalBox.png new file mode 100644 index 0000000000000000000000000000000000000000..a82ec799c9795fefa7f298f39710edd4643ee752 GIT binary patch literal 56356 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 z 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 literal 0 HcmV?d00001 From 9a736c706553a88bb61f0878a4a92d9ac0adbb1c Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:24:53 +0200 Subject: [PATCH 043/151] Update Slate_API.md --- docs/Slate_API.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index b91e25f1e..4e2f33587 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -382,6 +382,10 @@ SWindow(client_size=(512, 256), title='Slate Window')( ) ``` +![SHorizontalBox2](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SHorizontalBox2.png) + +More infos on SHorizontalBox: https://api.unrealengine.com/INT/API/Runtime/SlateCore/Widgets/SHorizontalBox/index.html + ## SGridPanel ## SScrollBox From 6df887d020b91448eaae59d3f4f9da66e36755a8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:39:47 +0200 Subject: [PATCH 044/151] Update Slate_API.md --- docs/Slate_API.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 4e2f33587..9452175da 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -388,6 +388,41 @@ More infos on SHorizontalBox: https://api.unrealengine.com/INT/API/Runtime/Slate ## SGridPanel +This widget allows you to align children in a virtual grid. For each slot you specify the column and row and eventually how much it 'spans' horizontally and verically: + +```python +from unreal_engine import SWindow, STextBlock, SGridPanel, SBorder + +margin = 40 + +SWindow(client_size=(512, 512), title='Slate Window')( + SGridPanel() + ( + SBorder(padding=margin)(STextBlock(text='cell0')), column=0, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell1')), column=1, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell2')), column=2, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell3')), column=0, row=1 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell4')), column=3, row=1, row_span=3 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell5')), column=2, row=2 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell6')), column=0, row=3, column_span=2 + ) +) +``` + +![SGridPanel](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SGridPanel.png) + ## SScrollBox ## SButton From f8d0c7e981a7101530d2a4252c0ce455a471ef66 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:40:04 +0200 Subject: [PATCH 045/151] fixed grid panel --- .../Private/Slate/UEPySGridPanel.cpp | 6 ++++-- docs/screenshots/slate_SGridPanel.png | Bin 0 -> 58878 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/screenshots/slate_SGridPanel.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp index 6c3a7461b..06df26b6a 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySGridPanel.cpp @@ -19,9 +19,11 @@ static PyObject *py_ue_sgrid_panel_add_slot(ue_PySGridPanel *self, PyObject * ar int column; int row; int layer = 0; + int foobar = 0; + PyObject *py_nudge = nullptr; - char *kwlist[] = { (char *)"widget", (char *)"column", (char *)"row", (char *)"layer", nullptr }; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oii|i:add_slot", kwlist, &py_content, &column, &row, &layer)) + char *kwlist[] = { (char *)"widget", (char *)"column", (char *)"row", (char *)"layer", (char *)"column_span", (char *)"nudge", (char *)"row_span", nullptr }; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oii|iiOi:add_slot", kwlist, &py_content, &column, &row, &layer, &foobar, &py_nudge, &foobar)) { return nullptr; } diff --git a/docs/screenshots/slate_SGridPanel.png b/docs/screenshots/slate_SGridPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed20ae0a746de1f406ae6039b18b1192d1eefed GIT binary patch literal 58878 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 literal 0 HcmV?d00001 From ed9167202abdd2619d6a89b0bd76f6d496222ea0 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:57:54 +0200 Subject: [PATCH 046/151] Update Slate_API.md --- docs/Slate_API.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 9452175da..f6cd2d210 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -425,6 +425,47 @@ SWindow(client_size=(512, 512), title='Slate Window')( ## SScrollBox +This container allows you to scroll on big series of widgets: + +```python +from unreal_engine import SWindow, STextBlock, SGridPanel, SBorder, SScrollBox +from unreal_engine.enums import EOrientation + +margin = 40 + +SWindow(client_size=(512, 256), title='Slate Window')( + SScrollBox(orientation=EOrientation.Orient_Vertical) + ( + SGridPanel() + ( + SBorder(padding=margin)(STextBlock(text='cell0')), column=0, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell1')), column=1, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell2')), column=2, row=0 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell3')), column=0, row=1 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell4')), column=3, row=1, row_span=3 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell5')), column=2, row=2 + ) + ( + SBorder(padding=margin)(STextBlock(text='cell6')), column=0, row=3, column_span=2 + ) + ) +) +``` + +![SScrollBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SScrollBox.png) + +More infos here: https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Layout/SScrollBox/ + ## SButton ## SEditableTextBox From b95431829f804ea93fbdf09830feb11aba78132f Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 11:58:08 +0200 Subject: [PATCH 047/151] fixed scrollbox --- .../Private/Slate/UEPySScrollBox.cpp | 33 +++++------------- docs/screenshots/slate_SScrollBox.png | Bin 0 -> 34664 bytes 2 files changed, 9 insertions(+), 24 deletions(-) create mode 100644 docs/screenshots/slate_SScrollBox.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySScrollBox.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySScrollBox.cpp index 3a22a5c92..d365d2e4e 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySScrollBox.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySScrollBox.cpp @@ -5,34 +5,19 @@ static PyObject *py_ue_sscroll_box_add_slot(ue_PySScrollBox *self, PyObject * args, PyObject *kwargs) { ue_py_slate_cast(SScrollBox); - PyObject *py_content; - int h_align = 0; - int v_align = 0; - - char *kwlist[] = { (char *)"widget", - (char *)"h_align", - (char *)"v_align", - nullptr }; - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|ii:add_slot", kwlist, - &py_content, - &h_align, - &v_align)) - { - return nullptr; - } - TSharedPtr Content = py_ue_is_swidget(py_content); - if (!Content.IsValid()) + int32 retCode = [&]() { + ue_py_slate_setup_hack_slot_args(SScrollBox, py_SScrollBox); + ue_py_slate_farguments_optional_enum("h_align", HAlign, EHorizontalAlignment); + ue_py_slate_farguments_optional_enum("v_align", VAlign, EVerticalAlignment); + return 0; + }(); + + if (retCode != 0) { - return nullptr; + return PyErr_Format(PyExc_Exception, "could not add vertical slot"); } - SScrollBox::FSlot &fslot = py_SScrollBox->AddSlot(); - fslot.AttachWidget(Content.ToSharedRef()); - fslot.HAlign((EHorizontalAlignment)h_align); - fslot.VAlign((EVerticalAlignment)v_align); - Py_RETURN_SLATE_SELF; } diff --git a/docs/screenshots/slate_SScrollBox.png b/docs/screenshots/slate_SScrollBox.png new file mode 100644 index 0000000000000000000000000000000000000000..a011a186f7116dabe196ef6d3207433e7b94aaaa GIT binary patch literal 34664 zcmb@uc|6qb`!;Nuv5YmwE=!?NWXV`+EQ2DNjHN;1m2^E%JtIL_k|jlF2V0TYJN(a~|7 zH`F(yqhkP{(;s1B0{@fJznKU=(0iL1=+c#Tiv9#&K%CJSG#y=eJlnPd6nxFPyR>}T29 z`+?!W(Kjadx&k`i1kJs<9lNkIy72p-)6XyFdp9o**|Wf|;kUkx1ugg4?ewL7HPH_A z{#BTN@y_tg{KKtN3c(v413|wB;+A~u)_nQ`ItBtd6jiT{!>$xeyr}#2Le*|>#jd_p zEucwFCA13rLW6Yv;oGEAS%ZP3Y`4!n$f?0gn9pj;q)+~B*RsaOo2KtcC+#u3vrJ^( zOCx9;oyiE^wY3){=wb}96LgEFq+|R?8P7T$Do0ywhAIAMkXhoL`6!vGV`90oOd-}( z)b`0pf>I50_5-AB076hNB0>_8Aow&gTq(3?JD(b%SM70;qeOK;Eof3rj8S+p@3Zdn zNxVE5oSdpZBn~sedWRts4@Ht16pjnxEp$R2 z>j;~M9Vb2ulCP3PyGub&@8lI`YO{F%XOvRe){$eRp0Oi6U>F4Xw-ql!A#NRuB@9>E z)&wgcnz5dhso!sTe@z|zD_GrL*4BwyZtv*u2wD#H?$mHzaGvCUQ~g0~@tt><=32_! z&O)qDi;%M@qqk6Q+j>yHl`{v9>^t-PO_a?IPoocZwwpsb0=Te_oAuwW=gxI$ZOv;Q zj_jxpFZi@KAH0?<)NA?hEnH9@_gmxt+rTxV(;#x z*RyAKHkV(>zTc~r$Kx#K< zV7{saFROWIt&_QKpR8M-kg540tuRzGdsg9eMi4h z95^Y?uY$j-1%9P|Klx^E{&nn&>Gp=5?P^uAg0^j+-8HTN3ZouJ!5K7JmjNEu7$IP* z{z=}$x2>bZBXBPC+sL%)+1vi#zWoVQ>vf;M)AD{c>p_tY+sLoWZ-iSmN*6XuaoFU( zkdvv|PZzd37m{!%bN2%d?6RmTM)Xu)it)`$`6p}_V^WiA=dY(mX>X6Gif@y})AYZ0 zp4f1R`U!2403>d_{jd+)wJSEap*8khfIQ<1~%$tyuqS5(JV-N#gW zN24GJCa7wBtMIHsQ@{eg^$cfs_qXqV?(&qL%AUp~a=(0&@%Aw8Xg|)orH!NXsQuu& zn8;O|WconWcxbla&(mUZs-1`bcrt$)^f@OQwzBS<_iAIV2j03`e_~?$Q0W6=ta@Kw%WY6%X&2)m<9H$dW9E}%Ldh@y=R)HuM7-{UBT&rAA38XqN?3I zXT8!{rqr@p{Z914R@$hLYW=&;)oP;1tstN877MZE8ZG1 zY#-YbLf^DAWw$%k@g{id4cAzod&6|uVg>1W8P1Jr-#xY#ICk$E9rfDQ@WAM`IqLyo zTjjSs4{yJ^r$H?B|31e#@Z7VJwMl4K5YiAu52e4q5H7{Qp?TkzBnX!iOtQzJW;D8n zP#d32Mg!LF1>ai~I+M(Jc4JX|Z&6ZcXln8GtpxRWX!yE+ct^{0+5=7QiG^9GTiPc4 zu-lWbnpHY7-9DE;AmXPR25J`qJv3IYxvF>-ugCAL$Bz$j)H~1p#c8kNQiC^=gC7mZ zZU%k!f~z=G2;u|o+A+3#uKdH3<~K8>GPX07rqLSv@?Py+F8NqMgUyo;1b_X3r#*!K<^eud#(8? z=$WdnE`e*FWa{!!@r{oi3wyf@9=jB-U3bEkIU9#@EZWoTVmWCC}a58|gTUGZqU+%rzXsh3D>rmKkRA476I@jTs zdEy_bN9}F=Gzs3EHVFP}5dUn<&Z9mxZ*2GX*yuL+mCf|XE49BarE2djYmaU17zF(= zP~F?e*wYw^AL!R!Sl05u$47{pKlG^2p2`5*{c+4NIOWOVuQ@Hx&+Di-D>nUdf% zy`vthjSS9KEKIA{lfCa|tei{f+AAh8jV;NKDWmFeVhQL_6J<{vm&fsO%HO5r`haC{ zsK>&p)oR8$nj*8w4P7l@(6tU)N@0Jqm94#*?QrCF*aqP{^PrR}mqQMd%20~*U`-XN zP1jhy*kHfdwW0_9<_B-)r_N~aZ8S|%U9Y?!o;KP2VG=oTWg%eZ3|IUy0)xL@2adZv zV<{=0-2-)bAZ(yHAe?s;*|8vsU$1Z$RKSzjA{$I}C|=fA^Tl_^#Yfp-zx=Wn@DpxSEx_`D=P$dic0Jr1Y`Nkr8%-hTw=-Qi~IjTh|=u$dGdP;Z&_ z7glG!zfxJUS@0X!OJ1$F6TN^R3O!dTA>%*%HCIipMvPo(c|I z4A~k+A-S)q+ixhjIp9uoyDkhLZfblO#aJ!uE!%6!{4((LgFQF*U;_uz&oz`Ha5(jE-RL2fn_N{U32RrgU%KTlB zZOcsgXIw_>-@WawJ$8q%R+S8yiSn*foCJuSXfyuq-+RGp_nM|++k{v;MF-!3EeZBp z76@JxNUh&Utrz0F!4I#FOFk03uomQj*O+J$-=%ssWL@;|`8B=p1np1^( z#>A}qkB>;8_LTa4B3=&9*mWoQ{mAtN&40|dN4j=K>>mfr+_Rm=u@n4$3#^ULXP{Y} zIRcK&PrgBVUWU4Bi4G3D+!=n!A^z|OEBzdFx*&9ADJA%icgC5tCk+eo%pXbiR~Yh< zA@N4`?P5)7CohQ3b0e8mHWro3p5^NZ zNZ#b6MIF2`iKw7Akc3NCapy>hPL_ABy|^}YJT+spFhlr)_;bi1-G*%Oo!O45 zllR_^({0njBvoOZpdiQ@0AXj~o}~Vm_+qSZnDcJ?&SHFUz&gG^G5v3jB*Y80A*1&8 z(=_duskY2Gikpmw;0GFbNIC?DD*G&&SzRMa}9WL|G+oSm5Lgx^ER&2 zLR&-BU%jp2r}JnfxzIjHwS%^bABpNKyT#6$bApp9gKR?z?WfZ(y;jt9;zim$KLJ z*dzzWCXXa_b(u1bM=)P->&}^O>)s~@BN<;Gis~y~8_jMAeV}k5=^HgtPgf%zQx`m| zCoXLJ!fAI66mmT*SOez`kP>$tmY=?{-qQg`~+R?fW_{Q%fQ|yN`Vg07ziN_IdZc zCXrFkkYp+Kb5yBt39`>fT(YX**5*L{uI=;UQF)EnEgGqDzd7NBRkmu^-iok#fz$Sk zWHmgeCUBvNo1Di!d_Hx%wjnv3L^Qd;y1dQ*OOrkU1ow&Tl8k8)9rm>e7U$x)b@5rr>$2MUC4%a{aW2x zZBy$bU-u;EwVF)9L>WWDn%6&Prfc<4>8yv-_$cr{-^O-VIfBa{CZA9Yyl6^f>cmpd zV(l-EqRwF{Q*jv^&oYEMBNe#@7R6ZDU;(bbxb~=AQFAHDVf<^8Lf`vd2Ca)VO)0i{2)W zHRTxF{}gtDN?jxkbuHzlZKstvYFJ|w2n^m!VoYqX zv>gdg>T@4%6*&YcN=^NazgXC|q;MxnnKSrWK{ATI2BOD>cC3OM677x5%hsyND1g90F~TFdRI_gJ)Ng@lg43J!Wj@ z``BSy8Hy&oDYJ)TbAb>ju0zoZoFDHRJyB5c9HFpG*=|zIg@RYE1S4y< z$y-t^FqfIvvyv#PGAsS~iTb4z%pBp&wxdq9q7PU^!ujG%T*^*YyTtYb*4e}S=>cVne9JFs^FCKd--^00%4~Uov0>X!F2I=R_nBq=Il&6y~3G6pV&6_ zny|DnRu0wthu>rBTD|9!WzsXf`=bZ?C#&bxRyoQHTq#O7T7AAlUuo{S^?68G1mrknIv?V&ruYUN6)mMH?CTuTAS3id)$g1P7 zqx1P*^Zz0<<{?Gt`T~RwG?;yr2v;b>AT61)cebI@mT_`wvcj9Pb0$bm%c@B@SGGeeT?SWfWs%=1Ook|=r%_H`D z|Iw|Cc%AFj13jqh&yT(FZrI+oJeSr)xn;|w@{D{=(cb56=t<iT+8;9?MzefV~hTS^W6mpVKnQ*;7Hlik3?@+gFfH;3ZKCMLaI z_)KngIWw1u0Od;Q#|j|rBL6c#a!S3JXf(=WGUGfRUB09qwsO&7ch2Ej%|MfJD30po zN|mH{!b(`JJFn@4%Bnb!2@D>J6W>1u6vwEkEOolrx>D|p_CnHZD2Jcb6h_BeS9tO= znj#*QCrp?|U<-~gY~p%asN{$nEz?yYJ{!KSBmvj<-2bj?@nDdxUQ?3N%A-7iojL+_ zAKtmzck-+w-KN+-3Dzv2$v#eW8LTmA@|QR=0Uyi|j3Rj2qeHL_$-!?!U*a{#3CW_| zx;pnK=9dJqs3HW;(sbyRR$8x4Vqln2bAvK;&UE>@P9mTP;Hdo9dzV`zp1!Sc*4J3& z2M+`q5aV;*zEqa#+W%QZ^yoGwQnvc=S_V68gw7IjPjUVEJ<^h?%vQxIW`3siiBpt- zS8c&wPea#~s6BCyT?o4D$8ZHlWQ$#tlAK6CiyWjKv9h5-fHbQVDkXnGPW?v>G)5Lq zu9)GMZh5D?ygsf~Ec@U&pR9uxhOS(j?n8cT9;KF-X)W`zy@tIqqWN#rb1P9td@EwF zI$}?CrhYw5B_m0PPP~e;_CTQyZ+V|pDNE-JA8xR*_5Oz#(omO11lLIwbL1`A;*KtJ zz2DQH|NGSM3kv(MHna=beC|RO`@&B7Fm_FNpf5OxEsWoBy^d}dh|A{XjAD_z`ROQfrqY*HJUeWcR1m z%BgOg|9yEM5U2gvcB4*CIUMTOj99ylYV&{DxGP~1K3DLBY&qT4u=0UqFKg%!Mh~Tm zOP5Dyb3>QcKg4CiE-?hY=43-yx#Ymaj2$?I@iy$9yT_`vW4|}*&Az3UZMCiqUyavyb#Px*P}f{t z(3ojFUC<}mozwESy{Gzho`&cRjQr}O9{=R*bLOZ5=XAyPP)7f>6UKmM70P%_i=~IO zIL}*A&G{G_*n`>6_=`J~9H&d7cpMcRN#8PXj~0fodv39>D^giHoP zt1dy?pF7%$P9{uOG~98+DXUq~>kzzCf!_jsq^MfVmMNNp*ywRmHEbARtn;SBl#SS% zat@_f^bOJ9tCHMQbn|w+(cjUjf*yF7?o0Ey>>Sp3vt?P6XiE0ymqul~vfWMA*>C)k z1Q>(!p6%(jX+M6DcIUHflkuV0!kgO&2ZTwR=7hwn%h>{lTxYxz*|dH1+n z(wWXD(%CoTSW8N7azsKKusmlMl{H-G<-=4QXZA3qd zweTCB#uyU%EZQ6fEWTy))ZWvWcBvqB&m~QgT+CXhth;~g90}Xtco$&k!p9GSu1_gT z-1~Ki1WA`beil(gYTyXOl328)Ex@;&Cz6i$NsHD zJQj=`{Zk#m>{ZWc$wc8K(a5eQqT^9b*GVTZe#uj5kE*^ zUip6H^cb0AJn}#Yc_kqG{2sud(%qC#;gI|E^i=)jkxK-ID~hb4I#4JdCp+ZG2s2|m zjQO0LnNvvuNfpEYkJTYJt9RqI^c#%dgIte$Ss(Pw{S?6gR4&Rm^$*+Aayik zUgymi5pH0W_-lU$OOV(7PMrk{(Nu8W*O--$9sYU2Q4yP@%OJ-Ai+wKuU;hwA5QJN( zD{>b>gpW%Is=Uyj15arzKWip(j4{=CC#u4_hMs)VB}UW-Q*Q7}wc9@#$AK}geFmPm zwbaGcS9A?`HbXX(5bE3xhQ9A9GF96$LTac^uHT;8Q$SGL(nukO`Uo#lV<@`PNc43= zgJ19T^Ds4u-L43rQW#^>Z3+{ezYzoCb-w2f$hKM&TmF6IJlROd(ajFQ<5H9-pXX3Y zqJsEzU)R5OVb(VY40Fqp^b2;PaPDY2Y4!lb{qAC(SfK|_%~nCE2`z4dWAEmAeB~gvi_RaeJe8zNX!Y+BtdgX6)S*Ku z___Uc$d*AUmiq1~p~)vzSYQoZI7#{>#C|h!9rZ~wPXyUm&;7+w>J0#;UU(u&&jO1TsieEW6j7c) zXT*(IOJU^M5evYa&wZ{~jm+SM_xGzrfilcQ%f8=wlQ>`?OL8X4=n}r< zpqyah+;rj=woIQHHD{Mbg?9RQ1BVE@vU1n{+(|xjl3DO4iCd3BUow)1BPf(g+4VC3F!-9v;i#B zLGwz@1YatzS^x$+_%u&Ajvyn>qwH`I99&$f%-o}QoM6>N&tX1`9Qk~;rGfED^4TPT zr@9RK87p{?lTfHG0SevLx%W1F5igCqSBb~ z@WTDfR&HS~i}-tbNPgZ96*?BjM_A~yg?i>QG zzBlDXPgXBQ3MZ{me6^%{ArXQ+4gNRveHE}CWq=Q=vm zF^OGLBt6rV+E&2H=!^e5aKX*ugMq&s0EebLS+Uk9CQgf^VKW~R>=E(HB+zy zu&K)+8i`)Qg;=42hE>3d2N_yBb(f{Up|b3B~a$uOjxq;qnR z4W=a(a`=Zb$WrRz-r`!eg@n*!{Bryq*i4Bm;!I}uYb#fW5?4L>h^mdv_(K>M0hP0H z@A3w-@wK$z<-okDnUYrn&A-qz1wC5LAf4a152g$yHK&Yy@T4q`OYj7ytV}F`TD+z= zV2h;)*cqPrc%7gNzoB?hMk+)h<+yMGmfN&r8SB)N&ggb2)ddiVfgqTNE-((r|41<| z?E5kFBAuXvM>DG#x6xH*IpO;5&(q4?kp z%+Rt#W|yn-h?E8mXI_gQ3k0@+Nf@47?&ct0Z0??(Tc&Ea#@?U0Z%k0bRXN7V;F5ni z0T;&HqeCwjKnBjsGdn2Qf=F3A`UUyp?6ILI`*Wydi7Z_P1Xn2sjGre2c?k-QDW=j( z!Ys%V%6tGC6Yjf`&<-V!tcv-IP2GvPWuSr2w5e-I>Ag8eQoO=DZ~ff9US(*ql{&C; zddl)@;;#-kEtgg1#l9)fA?XN=et2iJ?#XS6rWYJQRjVS_6X=Sa6@V%oVm^$zpGRo4 zG^FEWKN2M?b?v9o6(jPyTXEKMQkGckWS2v<%rAh!KcoAcWZ)eI;OMKWeAovFxGOXg zcrCByYy^SjT}@PZ9S=B!%97-d5a{iwfvsWmS5m`HmO39h%3P8@K*@OBo|2hT9*tWU zF4L+yk8;&BArrSzNYW==-8NF01&!A-TO~eAP|KzzE_0Av0+ z%Y}O=4T7#YA;iRhOEr(cFpxUXDy+%|8#x98$L0=Jk1*DZER)eT;c#(e7l%u9ni{iV zN;GDP?cuTedETiuI@ti^U{NW|uM}Io{;L&|Wcw2703GUjLP-8OaWH73Y<^nB%u0D2 zhQRRVN~0s<{)Gq#_QT(T5IVS`syloA-Tquv<^oJ|1aKFC4)epW%7|BAdLK8DK3!nJ z7a9WL8-P`5Oux9#^Bx-Hb~S5Vmvyblm64*GlOJzFLxNT9F4?l<(4qB%gHj0W-;ZDe z#9?swEU%5@GwtKTO7_ z{YtMNo0A@a{Em+wb_5*0B}W7ly0ypEhYl4180F0+0=t5i?zm+R$n7z+8Znae){uyP zqP1rV7*O%ee%88hQOA3P|>Q7@hzu zo!!?VfZ&&vVA3pEpqCBSM$zJsrj`WV>F04D*eQX$9F zTLo&t$C4FN1SG{x*UgpK=Fq2duvEP+G5aOZw8sL*N^Zg5o|5#gnES-S4dvn$2@7KBohL8Y1K;*nmHM=I?OpOrt&oAJ7YiK_|n8TxmxVBPs<#5nzk|$`J-(7zFrq+Eq+9ben zxgxptR`oUablL9dIZM5c$d^i)?l+4vb8gBZYJeX>EGP=OdlEf&y6Xl&UsuD&1toX1l*hpaPzD#N;2Mv9SZB$ z0*~AOOHUVrrMw=gzX|xD6}BPv5;$9&D4ADqo(2KQte6{E3V3jScxm8oH;;XbjW#b! zsn}HW-TadLnL~wXIKaWJ;5*fdcQ`Lk4o7SuFp#3# zti?wL3d~;{NZ+lxmn*iIvfIF{Rp#3rCZ>YY65m^I^|0Ofb;aXsqMbj->L)nz4-fb` zpqc`A!fy7oNE3=_>{aDgC3q5vNxGfO%8i|sq8G}bFnxDK+%=40P}m@>amYDCo{?~f zkq~Mao5pyKoh6b_G7B~hP&6vcckb%g=`>b+&jVW(6=I|p9lq`AXvM~0tJZ5@GMlZU zN^|`PC9Dy6p`ym)F@xtcmfKIMfwr!5WEjat75c6?NX(APqr&Zuq#4A9!x(`@h6cK) zU5+o>jIG$DzNz2&trt)8u4R_CdyV?e{9c)*HB+OQuY3xxkvW-N@0I?x_)`9bc%xhI z@6{Oqqf9*trB%J%|E6xmGw=5#ScB;Zg@AFFc*;gs@NPP1=a<^OorR1N*`_b2t%7?8 zy@#H(KA%C{G;5uaTaP~-XA(M7u=f4~mPF#jmGuj9#|p9^8DXk-Vz-nAI7!{7fPs*y z%aGF0k0wV!VzwW}2RM0m`Hy;6i=)TAfVIO@qw5v`=wU#9V=r>B_2;p&ME z=r5`d>N`EMcxEexH#V=QY)PakOR9jw(%zR--RV?{mz%>S?b;Upb)g!eN;^U z?`$bBHIbf(X>Rt!pCl#>G+!?P+{A|nn63L-=i2?`DHfPX&{AU5DUY<9@4Ev3ocepa z$iTFXH)Fk7QvKD4Njkqz#cp%?OvQ=#GhL?rIdKEhRPJEWm*@xxHIxLYLXfQk6|tbS zTyqv{R|jdxzS%j=tHlM2rKhiH5aeVRXFpP850v_mjm~>wwr^g4)pDr?R+iUqzdrx- zYJ(c3UGo;$LzJk!`C2~9GzW+}D1#5s{XnbV&~-6e zzHXUy-fO{s%zrt3t;X4e*Z&tS>buYQ>3PA`I$#giP66CV$U}#ozo@i4Q{7gd#!@Fm3aOgR)>}TwCq(9rHY=38=%22Xc&vnBEJ5?J{SubMpu#=n!|x! z6S{RS6i_sFAgWl(5u==QX||;`1_lp()Le08XY0k^5*t(rQ;f6lQa+#u4`S9-T#rvct zY|u;?S}GE<-M2lU$1%eMogQL?Z97V4svh@1QCcc#Rt;(R{$>NI$voxm>#5TG zJ~5X?w20ia!O|v(l zJAV#WO}Ep>3pA>F$W2Y1E)|)31cPDQ>m#?eCh`nAl zPj4A2TBuV=P@^E{Or1k|42l=SPhW&WOXF9ZIhPu2u~f-SAeV3-Nm2(XALwb9%gVDt zpPvO5shu50|Ct(_&U{H=8ZzM+7+Z|HhmsL(P8ML{so8Frskd8OmzR`28|A-JhTigZ*u0hiV(UuGq?UeS4q@l#(eX86<>N$|2MIKVM$Ki{`*EojIAgH(*D{#Tg)smiBPArGmQ-C$ zrxyVsMaND($N_1|lH{7y7!@K5_WlFxS;R^K$9o9pZ6H+le@G*hMas-Fzu0TKz~V>) zH$Zg)bC&AUWTLE3%%MsF0CCAm1FesGe#%RXkDIQ`d{;P7u;8XDLeaUMu@W?)SV_%= zXA45?6)(y?KEeb6Z+Koh;A^YB_XfwL+7P_hzQnFC%8>G(mWfN0KL!j!BXljLoVgq=M!|P;Il*Khr7OGwsD$9C1Y{#1_jg_OwQp$V z0*$5m$7AEC%%F*F%>?~(g_oxRb|I`}T|SKAU2jWtsxjHGH`2yvgo*@di|7i@YI`^s z9$Y}kE8K57D7q}Q`l-lz+(&rGg5-~gH}|}{@ci80D@Qk#+{}QR9SAuMtrCHt8v(D5 zj|d+o>EQOi=$=xGJ$Ad8WzJOOuB>a5b6BG)^18-xqMVddV;W8T{f{8kMRvLm4cJ`+&L2e7qsMhLbAV??js@o;J}rAb3jYT*697VNqv3en_CZAROJ8 z<@ty9OflE7Dj;zbnMxP;z=xwkm3pVm!16uguv5<5>9v?B0J?So?bJU#AUR%^$PGH$ zOrbM{_S~`?huxNF^JLKGxwv~K2gY*lG{W=f3DV&oj)rtH5A_{vRo2E6c|kXz$lm@e z?dgb@2r}kQ;*dOS>I-D?*DiBi@KSDOqSrD1N_zcH2V2z-*VAE|k`I|F#F7vjHd3I< zZ51EeRGQ?0Sm-Dkp+nnN2@Lgky;roY(g_92$2z@AE9qnbOax=Rt0gO}eGpmD(Z|#8 z;(g)&LZS+XjQ&#u9C@@{;9`chk9iDq7Hrm!dxt>P0U}6^z^Rij;q9!jr);YPT^0TP z#e-{1M9@15wdw*v{rIv4z()u~Tf&$6cX!yVm| zLui0Ydzglj^gk`oR8L18#r7yG1)Abd(V7l^0fn~g7r}z8LQhIG#vEi8XZd2K+ok+v zsxN%`=Q_aUm}7epi)Pa<%6AJdwgkCUh=uNF(EeV~1Y3@y^?oF7{^zYgpP(TM^p035 zns_k9>d09CDZYv`p>vsu^T&ByW>)Hlf;F7CMX-L zy_>5Tyr$tkjHSh*B8Dt6p@$A93~z!?^etG`+oui0;{Ga2Lzlzwr!H9+fe}O00<*eK zFTS5Y^%7TFyAEb4kc|vsr>&Px=*eY;e$_~DVgXG@(g;Ku63GD@>0*ne)tWcQ6UOyI zk3=$tISvoII@r9H?VTpF&6S@XAjq(>%7-wp=9FC3*?t zPgjAaN^08@m=kG=V(hXo47r6>Uu@=$FBBOh5~0vPBG7XdI&`r7n90Snmx_gWblgid z%J|3b3wJjQmW1gZ=u}{-AO{@@r=5S5DksdYWrjohRUkx>PHYOeiGtzdxmfX)OW(l^ zE4}9NFEUCB&toY;ET%^^a}yc}m%LErWdK4T(n^2~16PY2zE)MnITkM5?KJs{9af@J z^+VC6qLu5fN#2ja{R-Vl6G*y|A0~GM*PkqL9A#qUdY2Sj-l+uCHlTh1O>g(rauEQ% zDcsUu%z^L`Gimx^r8%Kt@O7TBW#X`?t9M_6Z~&w0eUZ9LSeL>=zNoW_nn4Fu;6Dus zCZM^!Y@*kWf$}Txk~L&6*{zW1NveDZ{ek>1XLJV zHaGKB#@^}Agdn?Z;oeA(LvU+1SF*zwCrO8!DKybG<%5%rQKgzIepI=ss`PSDBps?q4eo)4bpOLU(1BKPv9UX+o_i^~%UZp2JWS@-M=5$HVsDF@c{VpD!i%S=K1}8@kdv)gY5Mc%)zvq6ObLgCh^ar z)MYS>4{esNiesan-884W{!6aHZ)LL|lK#>ZI7#5RBpQFb6jathVv9Y-)my)JT9~n; zj)J`4zW!F`RbJj(0AjrT_Zz$q4?qTJ4*g2u!h=q|QhRXsb%p2?V@qYLV6iGL)B4;% zzUr1kl;L$7(?|{C7LDCI1kECKu}jww5#ZcB`4|ZSSs3CMSnl@m*1Cqws{<>D_dyT2 zL}vdSf;oSs#4E^-r7$dzugXb*$SdxP3MZ00znnkz>0e!omJZ7j0D_LC4J_*l7Of*! z=Y_&Q977y-Zo1#P|3?o4?i#IWQ!FdCuqZVpBIHOz43K7?uy6uW*M0DN@%G{yMiXGMiL*(EV@kYhHY)_PhwVXFvzyipmB~ zGYFVw!eFfO1O~TxjjN6X_mM)zTM`mDU`kT2V6g4Cvw|@AYniUJ1Ugr5-|ktq zYkI#UyNKNf2&F>vIIW)%EwkkmBYck)=<#>YCmx>Z0R!vFN`Y&+6?e=OQ{?`CG*N1BNX>I4~Q-x z@GXlzZDzL|xD3A15K7Of3b2sWOdawFtUo5X1vE^+!w0QT6`{w|ygP@0v>>D`)nJJQ z`-lZR@evAM37RG)tN}-HEFVd#0;CRs*OC8gJ44@(ovcWZL_w=9MZ3{@@e8P&QQ_e1 zCUWykL!i6`U=M*bh!tyby2Zz0Gzg3gm$*~1UcGg6sFWL`;$&Xg5nI$_K#P4pAWs0H zTzmBztutLDvmCQeUjfG>8NK6ab{8>q0$ik$6?4!%jtm`Y-1I95gI4QL$5O|9yN7;B5dVkE@9j2sc2@!R}^P z$;_G5)I=T-Dt0Af4Cte9qFh2}??wJg;gqmVZ_%L|G{9kLSOCh68f+P08C?cTFg`CB zKh&}K(Q%dwnW|UhOH>0?GHtry8o!8+@xAUO0B?n9P4;)}v~CU|PY}}5aFq&~k_YsO zN;24Z?y%2+@d`}8)Q=$)wS4VCPbUG(3m0TLWSS!I+f1tfnw%*hOXs*cUj&$&6*2?Q^xK`}~mRv|&D*2!p`bSV=X2L@}p79uv|M z)UVdsEM9XYJq7vMOP&h|^Y``X^c_sALEh;`g>7ve@wHH-mg)2%;<@Oo?%o94`47!( zGXm&xviHUE4rYg^O*xa?@!i}GA6X|vRJZO_@JZd z2K?chD8(}fiN~KF(m*vIPY4qO?!ysZ$NkB2?t9#gwE0FA9bsYJE_tAVcHqExCUCL~ zJ#|s$1+EfWd#?l>lG1}pebbEGz^lhV;~@+Tz|k>tL`i}!Js-uNC2s!p7L6P--+)4G zc^w>0;Cam;1?cb!9pgvv0KWpmr7(E;IF9t-;e^^H{{C#$c{4d$$hh77#ry&%3*E2U z-4-HnT6akwL$mS#t}8G7G@N$Q#w^6xdg2S+fIM-fodJ6o4)6hZohU(W_Lln}Oq)aK zRIK+Y8=(V8Dz}SeE#rsFjM0fSGE|mFlen6S&L7P2#e#Q#4hszM5E+3+>zgDn!Gf7s zKKPK-s{0q`dImTlfMc3GiQ^CXM51T_MM`xh-M=)vKDAVRZ+rOx^&E<_3sRWUy741e z`(x)p0h@n%5TeCsn>-x>nOk_=<@Gr$6Va~J$RpmG#9Lz88DF^3=4>2`es=k^o37$> zD$YUiHsb!yPJhdt`vw!9jn(;Ax2s%NX`TywzMT?7oV)bAVzXB)inzhID~Z zFfkwh^MZiZkAQG;idtGTN7!hFZ2Ge2lI@uCZWc!31B=aX1~u8e{AFL|(q`+|;Q1^5{qy1#%_9El9&$xWaO@;(9LfnqG=&t1f^ z@bg?EXw?8pwWvP1m=QRFAuDyq_r+uvpI<3yPTR2%0jec|C*>XxL3Gg&8=6YVa*kFH z%MdiX!6}3Aea^@w7pF9j6wu={M4SIsi8G*u-)W$HAtqXu%7TD0VKz)%)iECs0(=-; zNCbbGz$KUU=n=%=0&pJe>n)&i{y$;Ggy-k)OVS^RAq_jU-Vs!|2owpXC-*t>DOzwa zp|a(B5bi?XsOD$~Z50fd3z&^x_5Rp5VS;WEE6f;q)-FZY*BH`8qqthmlrzPwfc#|D z3-`oZWzcFSIJmpNvYwg#7yq8A13dkBQdCx9h<$;~6KY4^pcZ!$!u=$8HRY;t;Isjp z_~1`2xRiX_Z%4YjerAfuCDt5sG98^DFM~Xbc*%&0LJ9#bu?P2Xwzc>X2@7Mz^1)eH z;V*&W5=0}YmQ4G6PWV!zFeWolP*87wipN9LTv8bj5DrYgZZ3`Y@xhOQ+YGQDaPb_S z86hK1SAplF<#&mg~ zc3VliD4$(L+XE_O-E?{fC2fHn^uWX%Tn~`P)JVpw$-U6X2bL+ND_rs{5`iK4HxwGQ7&&+x;ptDqe3S=yjiCm}VhHrcJdL5U zy1mlKyN`ANZjFPR2uS3jC2>Cw$@Kv6Z4Kb-{~Zr*<_CpCj;5}Y!|1ibq$75${?f($_6s}6!eQX-ozIT}o z7CTPs`eA9?z?+&!Dtp~&ZHXJXCU5V4d0DPM)#i)S!6pDWxu2hD_Mb*!q6L5@Kje>d zCw&ZuQ1{C+o-3UfUah(I23f)bzhJKqh2Z3*LVzqgrUE@%h3s$K?47oT%~kjf=-92} zqyZ&t?}NO*d<;Y@5F(K1Okklrfl)#f=l#&Fb-VMnJU-AbpKUV zEX~c?>4j(vI+Vd?+OF80#-IU}a;3G&0eu#RS7!(an$nZ)Z(ovViefm+&dl`TRaIZ( zyIbZ39Y}$GoKGnfqjdd^eW47vu6eMn09ewXK#z6e;ko|)AB;LrfwqC=MklW+^sD_# zo`*=DpfN3Gt_BD+a9*gv0D-21U*v0@d{AV0N-AXdnzy}t-613?S_$N8exmi){nPwk zriK3QX0N#Tmqi=OPRI>hV5E{qbfyHMbk?pnkoE>zQk0I*_bSojz2+vGr9rRrWB}`w z)Zgb*Y?nVQHaDJgG$eVx&a<{O9}xt!v+;BQ?|*Y)9Gn58ua^Hpnyq|u*G^eimH&y_ znr{7nr?v<81I`_o)Bup#NFd&ewf^78ZPELd_eXsP94fwSX2oW^={bmK!e?t>MFOJ6<@C^W*Ge}e}J6WZ{UiDU)^j)AX z@=K(hFucF})xUpk=A1b@&GqqbF8|+7ZV&FLTt2X>0m>zVkn8#1&2G^S7>xJ9&5D05 z?zmK91=^tyIAfS=&Tq5`PHWFrBsV|t@U`3$96e$6A_6FVp!@2=54S|^%Vu219cF{b zVl)nY5|H*mqLCAgE?#1&ts6u-scwU&2B5bG3B()em3C%r#CvMr?r!=87&(Dxi_@yh z3BbW>m_5pAoU`omzJ>MtvFB2ZgdQnCquGENgsiIz>{|Rh4gEOR(nl)L%Q?-KXz z7$HA5X{aA~`Gw$lwC6tpFh=im4C$-D+ejjZ9WR_lcMr}*p^TU@(3(IBk)>HVb7g{y zTjP^Foc5sz;G+_PpYLgoL~gwlhAWN;@>I|)ESJ%t+5(65LL2*kJOfuX+)r`|2Zqwz z5C{Iyg9iu4oH+t82O&%@sT*XE|Nl%E?EqY%2dfSQD-fvnG-ys9OFiCJyvo_GkIG;v zqZpt78J(~dZVGMPDvjD2PkzA^LHj#F-oSbKF@X-eA{;pAAlS1@*mhz9-D?@@!`OWu z6ryT3C_H_8y^vHUPRs-88_ZI&?}3wLN19}rff3a)@_a)+VAH;xwbDLkhwv86mh zk(CxTilF%$0+=Xl%HcxGWdLJKWL3>*ie~Bwe$}?e9NPTwRpYOM2dTmhBTt~Mxix6K z6c>J~$$AQmM>M8L1!M;x2#~c4Y=B)(DnBD=vzQd(!VC5haOiTtp(_c6KwIuLYO2G0^)}kYj>?h8{IyN%5&d3JfA`^w44-OH6k=HoYK~0rUR;a|0XvQwVKS zy^-Kz#d;BN4%sFOIX(po33T6XhMonQI{`>^fEB*<4rB112Oy$60o)C!_JB`=UOv!X z08Kx}e*wzy!SY|4Zf&i}g2N6%F^>)+5**+Cc$6lxur8iAWy|_s@Laz$|1WrM0QV-T z>;w^Y@G8K0wf`!{pyt?|NRr`Wfz#Tb;5q^)O1l130Jt;|_?N~w<=w&<}tV7B+mNrd|EDe#ZWKE6~k)7=7PH2<{B_xrQO7=J@MKNu%W;y9( zt5B-v`g}*{{@wTMd0xNg{O5IE&3FHNuIs&BPO@|oQuQYR-+`#lF#PhGp~Tb@3YH3Clx`{nsfKzbLHhR{ILQUH)O)@L@yXpbG=0-JCC)d*I&HtiXM z*?7T3=*bE~(t$q|2)4tp7%^iS=~dhEC5T4qG_vY&-bMG9vhhYoHq=dW!G2*JSGX1?gXYL`->iww=5r6)!1q*ha67CmHh#Ymyl_+(>X zh=c%KryjUKXKsU25wH{7)0&tWvq3*)zz(G9PuCML-Gp9q8I)jD>T6Vk z6wui(p1BNQqJLXAJu`k+9JZ;<)7|gmVy?m$i=KJ^RI2 z>u_;QZ55mLZvC&-9Li%vvID?NDR4Mz$|~9(W?_llJhQM1v2RaI>9PBxvjmV9i}UiB z;Qz8Pzs77liOO&usY&!l^o9m^qaaT!>@Bd7Hi1hhRRsed>Ws|cA3}iuR*7{gPyW9s z){USt%LKwC7Uzj!QQp2p^v8d-mFJn20AsRu4hIHXDFDng#l1o~V+MF=nt50%ZUC0W ztoE?3hYYCs+1#hT9LZx_?rP}1a{p=b{x_QS60DX5KJ4D8=n5N}#tbEN(4IDvI`*v% z%_s0B&KhzJxKo8eZHGOTZ|Wcs&|0rD{YTvYtD_7<>cPV%5V3Oj@X;dazkfu4={i*9 zwh%0+dDb9O0Q9|z3G`Rn^7aBk`XlrYM|-dB57}5Bbm4ygmkNWWh_iWpmKmm}0$8fj zq-@ki5k_@E$q!8A?54(G`dLu_tu$rtXl^thFw!*3f4tFE{bgi73%d)d(fnIq9lt>7m(?>uLjB92$mw0 zi3*~vCtyd|NR|MAwYwV<*vmi0DQ|XMp-?ro<6&1ue>g9+z`Y%>-jF#b!m8re?`t* zVD7+d_8otduT_}=ku$5Jf@=Ftafy*2CM@y*Cdk`p;uY5%`Q@;>%B>zm_rh8_b{&9j zxG(@b;9CgQ^m5*>3IZ7QRUdg0yp!Pj8o|)zDsOE?XAlAQMSL!jd)N2t=e(SV9%TsA zb1m|kE;Mx_?cUIAPW|UAdF@7H+U<3Hjd71+W3T76%`riGm0uGEkxTcF-vvB+J^fOz zahwq0e&Hi_16O{1`GWLMzE_Zw%$2Rpl1zz?drls-X#};D}r`1Fbq&th>pR6G+*Oo7esY)(W;TgCeGZ zPYCay%ePRwJpeI}eVr%atU4hCD|0A~gAm z&UL1XkA}YNxZmfN9u!;?UE|nUO%DX(h5b7DTi8Oaee7bW<7bpu);|@o_HU$ooHpUg z2$2z(Iyn_CwEK^ZtaKip!!3>ukx${&KV2jc{1C~Hb|OI4&I9kU2Hb$r^MjxPd>b6K z?}Zv*S+8)Awa95NVG8{6aPb7F1nS5%zxsXB zu!BWkFAbwj;}lTI`KSXILrGCS_;%{To{<>0LsI3*tZn*n1i}TM+JPUR?%av&A8!ot z=Z-uSuq0!^+Cx9vdr#avcGK!RSxO85QI}H)PCWG*X!m(`ukA+|Ox#`j7~=Ypm`7)m3`e)DjRbjfWf-h(nY8kmHs%2%Lq7DK60Y}PNkyCN2e*eft;)T z+`&IVt@e$Wdn?RKF%gV9g*i6!+GrWs)|hv03Kp7Dko7zN@TXFdpDIb@FA#o-m#2&* zC!{arNJTflX85{OgFK-f7MPr-mT*$_cRgly?Xb0GZ{AoJi5X`3_&;y$G_*o>jvQCR zo_hCIw?RtItfsH&GHi67+4z0d0VuHcc$G8xdqA#)Nb7Zp+-@nh>zYo7;>PMtPmuf4(zKC+R%M@GR za*MXFo>N%JnoUny%!Hr6Lu74EoZlgof2EG4D-PdKIsE>0Age4-0QF)QWK>q04_ZxD zR!m4~r+Z1~InKZ9r^#9ROV2?HS-hMNLjKPZC*;ZepiPGXsXvaxrK1{REYc=&q7MyS z#pr!)gwyYU{@!Gb#E#3T820GRI^KfRbr7ItR2~k83C%X1ao9hp9rYD;_G4h&jbnJf?-#M+FQ@Ei6~^6g(whDlR*e9Zqxcj z$$6ky5%IX?4IopGoHP(Q1|I|nrZMvlE{eu)F)#2HI|{VrjV!yhz*GcOh)jHWSRr3M zG|rs>P#2qNfK-7InJC=;-(ITo%r5h@o5n`0I}C~&!>7fOBnRh*(fk*VKHsjhMgrd7 z)H|s6#0qtAN&8b%pi%V=R_*#A;9_xX*@??eyrmaD`ek!F8yIwn7kXkOC!dt|aHH*u zTM{KioOpOxQb@OV&UZE{l5pQ@{z5O=UjrchRD=F9KA1lxaG%QL4w3#BwP^2D)LLI z83ktUezQ+7XoxqxzLDH>c)_3c3j8K)5CQZ-SfiYVVdBe42--+fXf`END z90(d=%N6Tr$xVamhku`~|78NsHcNl6xh0ZpOZ{~u<9Ze@@a09on*B>W*B@RnMZE|c);zS&o#>q#UeB4BrMf>dkl zwi`0kRe(uex{(ON3;+!#wCWI19qO^I@lfX}!4EIhRkTzwJh6U19nqHjg94-O>aJR_ z7iUS8LLKKD+*$B2aWBOk+_miU2Adif!6BT(cdg>|j6I<6b;`P}>Tn}5m3tvZyMrDQ zUiUTvvmlktpkiTQ!j*=sTl+4-9E#@G65MnFZb5#bb0uo{9pWj06rG?n_^rm3+7XJ2Gw!f^nyDS8txrW%L- zXYmG*Xt%lTB$M|1vN@&o6gLgYmAO2hAf$_Ew0jZh6Y@dXYj{!?xqg+EfvOmVS~=0LkZCL_<6^=ToZ*=G~*^);$3vE7>o)#&l2#kwqsy~ zFvkr$lU2!(tzk4;CHy0o;T4CQduW6jL)I`fi7O90XG%x(GJ9*ygNazI975%wUtmCNdIz zu3}q_K2QAUGICc^$BFKyVV1 zej_+McfR!duyF|}Ak-DrR}dnI&rcz|{5#f;>9NosoGy_qp~GzuiVD0l2n65~Y;D;P zQBlHwR36xx-p_=W8aFiuB)9A;O3tE}B6bxa57}`9N5;+{l3fM*uw|WZR}XAi+&o8L zd)c(6kGlVW2LH;fA>ID~&oQkx1a|nwH9J#fM!K==263MHt4NBEatRheDvXK!1CY27 z#5TerT1CI5$G>=-FmJZ|Dj?9i$CtN7?`d!~rnX;F?tSPl6>KArnfK!$59FrsFuc#@BMio&k{XPr@r5l_PQ{ zh7d^g|4Z2~U3rl=ur&6^Q{?Z)z9J{@6p;SSio>x~Xjw}eM7UyyPO?OQ zY&;lFiE*uyzfBq|| zRD=?ESk2c{)wmC+gr#B~`S=W|tbs=f*B+VO(F8m2UC@(->c;LZ|QFctV1Es zz+zhAJg06pI^}Xp0Ec<5OII!wB29I+ih595Y)ORvr{}GzIW=;VE@_>;LPtBL! z<~PI2$$0@Q${+c<2*^_|X6)+_q5k_A7CxXcfl^C@yoh=bql%X_NH>6n{c&At&AI6& zqz;6{pThy*S>g0|0qx`bT$35d)o2^-6<%8_ewPagMh@wJ#Q^oxEJ+nuj9 z=w<(028^fxX~xAr0CQ=-$AU<%2XLoawP-k({`+)S{@*%*=Hzwxp*!C-vU=5l6>1GV z10hdtLuK1!UFlXte$rExy@1~y=~ht#S3GM-+J=iEQ4~T0euKFhk7bc|0+HS54A%n>BS*v9M_?S5C6*Dy}p!D!d zyRISNXP0NO(qKrUyvd*d-!QZfpWwi7Vn_e|jwfI}x7@}w1v)=VIfQtF=LU3{k-GSM zg@Mr1K9N%Z2;Z?I5aKJ-nyT}^s7s3E&!in9M%~qBb+Pm%Neiz}aWgsb^D`bSh3{$xZ95Da z!!vNuywS%c`W1|!C#W-Ug$XYbkfbk8j2z#IlW*#G{;R4+1HR3E0Zt_rXyy~uvIK0sbELc39mxIcuLbbLKzSQ{fm(c;vJV ztO<}dB^(z6AL2;e+|#!L97<23M-G-x0z$i~Eo)!2SKf;;&ZzV4u5uQ*TYLn6qXvH8 z3EnO=(*}e=nfKYbAngxB!&>!Ji(GNV{{3`w9&WQ7U{P5{V7fmIJ()RfzR007Hntt_ zF;jQjT}7U0Ik$yBe2%9C2M(nz>UvQP^7AZpPN5RCev#4hOB(+lV+tNbWfa%4arHW=L;40GF=BH z5y#w7S%a^^pHEhjWml2b^ygCOb;!B~y}J^Hv;0r8d{ZU)CNikB;J!s@_)YL8%J6Qt z)vIh%&o{Kp!SkL2yN*C95cuwz>!|$m4q+O_q#Qva6058mu#@9!` z8-A;IJ){On7>M}?T2ev0nPvq!I_5afc4cbQH@j`#D@k3SCh09s()lOA8wtyPo8I{| zrIRR!PJ8cJA^v}h3)}&SXrGzTTu|CC0$pTH=8*B38ceC+u`POx!l~;3D(j6&YqGw3 zOh9R&8NXGm(-SpNAWgRjxImovN-mFSV<(T&ZC^Nxet>*IOIxG+1#Op*h7R??uM##{ z1vY8U2#XO&9dC`iIazOX6wO{RqgT#pu0z2O#I<~_U9eo!61ZTiX=%3GrqzR&;(AaY zN$%2PtDa!f@-%06F7gEs<^cOI`UEQlLQ?u;U58ggCzEw2tP5A(3$_kmWx}-PGwE6! z0)(+e*@k`(5O8XVlc25<^_F*6SBVx=EKGsIsbc- zuh+|op5T5sVC!m6p!`r607Kk50w=V=e)(l%Y*p z4Q=#Qs<7x^NI1TOf4z)n8Q2Fp=PKO- ze+GM3-8H&@bI2Gz8YikFdKTS~LB)R_i=)C2A(w8wF%3163S=b?9v9~$K{lXsV7_0| z8gq?wM=<(B!WoqQfR&-!$Q|beIkRdKDiNaB&#+_$x(wA{JLkK+p3aARBtw-Hg~U1# zp$YNZvV9a4%I3JhP4+Oc$ieor_>_6(hNOo9rbFcYy#A7`R+%a~x zVwL3!r>K!a2isJHBSCdk$Xw#fcl_9!vs6N7y1^-l0Cg`K~PuyL` zvTco)m8zmdeG|+(3Cx!|HbZ#@g2qChC)gpbJUXGv!kh`&zKj=ns=nla^@@Y8Cc>zr z`*d}Q6@HUKHHKuMMfFuOt4KTC<)uZ4N-}md4#uG)QLZvze{?%jwq15$0?ZC|K-uGe5#icl z1k`|@aBZM^h7iuPi{7i45V$}(^@Z|^QSn!37C$>o>ilW;&t2DZj9Pj{eqx;QJ-Sj4 zKp(#7f%8#T1F0aE3f25d+m}foq@|93-+6ikLD(X;fLnD2rHRtZ%uvc-uzg(Hbh>8M z(H3?{E$BbI%)f?%nI`~r`YCKX#TD=$KnMewaZDQ|%lx6ms52$@=!<|NgE8=ZC#dEZ z;w>)hOvcr4K+L7YRkBVg_I8wFOH0ne5^DI@JpWp1Hf(c|S&WB&(FGI#Bre%y1H%dJ!Ac)Q+ki9Dd zqkUPVNCk<1xPJJQBP%)iP7F9ex-A&4zYkPj0qd$*W z*Bzcadv6;OYKRpIN%w5@02yo%Tn+^Ew{Bi3B0;0#cjP+74_V+)^Sgk1aiEv4w^DT} zktW|HYQQ-4WueNc8(j}ol=m)dv#w8b*n%G~a~hkTe-6&gmsIU5+gHC$uQA8nsx06q}O2PluL=#mDVv6HT6eY^cR<74dcSzT=8`0UB5T7&GTRM2x5Ccs`s3wY*|IVwdQw}MY<#P2PjtV(utr`mR1I$O3*t4m*R_0QK znU;sFgdm|VtQ(dTDq+W()`wasBS$U!l-JFbcDkgpGbt`aezebnH&~u+JiP)7@9zXl zkHBJjA^-BP^A3fXtcjl0=ecu`nm=(hadtnGwUU+Ept*uTG+&GQanU#t{z&aUR|wft zlc?Ni9$UaDqzQhx^~(9WV`1`s^xBa}r=iV8S}(M~Yhf3nL9I8iRqt+vTqO&^j_~Qa z0C0r#3-r8gIWcn_2j*LCfoLM=Gl&9w`5O&Y&fo=xB7tMK>!x2odp)O}CxQ?lo)1j+ z9nS@CU?s)BJC#{^PWDUqWsA$WV;Lww1UrJKvjMnT+{f)wuIf>+rqJl+v}|YX!uMf> zHdARFN+gL>^P5ZDm`PTt@K^+;S`2bg z;0XXZC-GTf9Z%sM32k8&kc5!H`;s*-HTF17+5&fAS-@U}Yh!Yd$irN*?E<6q*oNk+ zCnjtJQRXTYzKV3g9hHY`e6pLR*n#>W3t@YaEMTMg-4=uHWAdx@*;!H%w64JIVTZD; zgUHED$(JaF3zdQc0t5%MA}fF}nrKap7D1j>c4pHhZB{D&{)KB4$fhB77rM%t7rX~0%@I#gRxIAP1gVy$sBXL~KN z6>H04@CoVECuYX|@N9Dk zdG$#MH}ZnWWAIr0;lJQ^83M4ds-!vQsxmw#85Iu&)&2e+;;d5rXM5>Z<*rLmZ}owr62~ zg5U*Y;vNlzzGMi@;6V>~!y}-cAl0Vd$m`ZqIdTcSo^fC!OH{kC6=I7MQq!L_GhP#Y z6*OYLJajr#&<|pLs8@Z-VW_wOn#@Fzj+IBq{Lw5!Jtp(aH$@)QH(&@*>AD)x>Gr@A zG7Fok3(v6_@JB;08(u_}48*3|Ns0eBY$91JQsK}o9RP7*5>ggboMLrpO>;;cgX zZU{E76vxDT5S=|7^Jn#1$T@?{`$z51P8F!iR<3(EM(fwXN0!w+Zeg^8-2zhnf{j5; zfnqrmze{)jimBNE?Q*-a-7ttsUzyuejLMh3{ucX#N}B>*N2u7ydd>4VP5b;&_fF4TSE#3F-y{j~_E#I~YbUP!AxEFnrf~KM z{xHMeu@~LF5{ebVh)qH|WFZUrxl?_E)p`DQc#8zt_sc=c2_Nhk$ol(7C|`aBBH{bb za0=N+qTjb{;AWK>>5H6vQ^)xJohf`$uDk+z@l;K!3D2b?v{bzPnoPAyZ39IPzgsyP zJ<8_=7}qOmXouL%$926Kv%0}pfegv;4Y1MPWbpCIZkWVgPuMid3smR!e3b}Ion0^F zC#&#HvC<*`==#ib%S&UCeR2$VA)4qB7hV;`OL=0OYpc1a$j3nK)-BYgH|mO^J;kM* z7ad+Wl~l9U8rckpk_6<53|mt)yX!@1m`;8=a*by}1m3u>aBmoWiqtI^Q*)b--;L4~ z{-FIsxHF9-gct8Q6Vb1;OV%b!1|vs`Q=g|4^<9Zyz{74j@sqgwvjX^xNIC%z=!s3sByr_4Abw&gTOCF+M)&RmS8 zAR~eOaT~-|m@VeUf_^;22QkQ1ER=oUe%dWmo4{QL+MHNRJ9$6zSg2Q&{Vu#w45s)& zboBCO2(*Kj`G$G_*0hS8tyUDIx^sLC_mxaW z12m%_UW*=_DKtWfYKdw)TUY&YcpC@nGK0_e#Q{pu8#77o6!!Z7Y`b=WOT`N@kSJl} zIXlsWD$mG_O-A?MY@Y0d18z(Sk63|7VUU{K>>qyMM;Oa=8v}wei?==6t#YdLYWpFM zA_)?G3FaP$Nuu}@l^7;2cB|O7re+CgkD_8XYS|e=P4W(=b--of{mLN)_;|~UokZV! z*_6(cfaGF%&p;cLhvrIgp^1XW?;U65y@5lQh1X>xgbF@5x!JkwKOy5Dr&MyPd1+Td zjEIuZ*P%vc_Q&vgI6iYN2hMz@82vZ0tWt|tocwuj8nFL z(F4_6%E|{;JTcn8PoYMh6LN(N8-tzU=n%h6;S^4yYidDKNpe-;IhvpzT~u(U)7ku3 za5}{TmAY)wPx;oRkb9udd=LgXnYR~P*O^q^T^LR^K;pv0$K5~13>w1bsxnXd&j~b4 z3$z^cqzs{P()!2i=Pu@Xt99Sp1?m_;k8+D(+tMei%GnHRj0tFS?1Z2ot%g*JTN=n7 zdPK|Oa6BIWk`N&RkdQ=Px!*g!ZD&DBHifLC|7YG$=Pn5YfTs$;#0={k7(BHLew2$U z|LV?+JQ_Ukz5jUdxoge`A=?m?kp@V1W+1oF$g7V=_a?RvAuVGk8XwlpoJL7!b0Ew- zQ7bp_%xG?>;kdKY%Tg=aM7R-@ZjcJrmLR2@x+yWvC#4<+H@K%wXiC;KSV2y|umlW# z;E*H1UZ?d51vvvt1T{qK7VZ5<;_=j>R0o0d16(D_VZ&{YqHovw_}8m?C&HVH5)3h_ zF`hH#-iojHcY%cOodKHP`89H!8G%N8Zq$lE^YAK8T{Rk2ja$s*NkC)X@=h6lbZ=?E zM?SLNe-lke3Vq^iO)uKT%0s#1aK0kckL`vJ&f};bHs*8A*+uGD5qVa^m{66gnzCRoBw&{CHsCGDr+&aLVU>6%;0mlC~%u=x0>$xGpi4ELk`>L&;ICf>%1&vUMh9xhh zDX0AaRR^%w&a&f>5&!9X(pDpnDZ44b!$;zV?p@perL6tQ-p7oPoBdfQ>^%0K7&k0u z_=f8~+ym;L9l*mhu0J=B-n~|lgAx;BC9$eO6Q5983Ay8EBF&YE!)r-;&)n4QC0b6! z^2s+Dn2~Sb-#UBSp_7`It`XCajfX*f8C&6$N_TygO#r3b;TDtevjTNnV;YXk{}c5Y zx^p&?YlWH`$PKr)4L{(Yzx(WD;^Rx7FR#;x{LB6CO^$(R{)TZrQ231gomHPVRv4KN z8G93q_AK^ETn9u5rb2{1c*fm}Ro7W&NvSrKRT36rTY%thJw0gC`6O1qCP;^N6xtx@ z<^ZRVc^}%@A35-F(>oNCij>u>O}k9@eT@tb4|-qY^EI2dSJ^7A+|?Wz8NjFM{|MU3&#mS(6eX#1mAS|cXg_D*xrQ$RP^|-p$t_Cm5A6v+;M^6Tas%6)5EXl@ zMXvqa-X0H=1OqiqTT55VRem~!H%=7FZ7nerhMdIk2OYQ~tn0|)$aIQsGM7{kZ=og3 zb$PF^-%2jU-&z#3ZP}0*4}Faj<8V;wK4KuZUGVbg1UZo`NrZc0Fb8w{>LOhT!)}qO zGZ;$lcueXR>VC*bo4A@k(Xw)C2m%#8LG1k_p9({)z@H$WR; zbK#AQO%i#Zoa%05e_FfzwE8Zx2cegS5-NM1djumP(fxAJWn*n6w6R9jHy?)sCWSqp ztFLZsQhla9Z6=2&bcS(^4(2IsC_nAatgZK!?Y$t?C6;$6?+|hTb?x!4!?s`SH&FHT+x>yuMwNop z4%0STzXwt!2t;|hc!ox43>hm52Y4+INa;OTxR3yANOspPOoiqGZI^&1MRq? z7|GXcFKU#F^xOA%m$R?xEjm)1B9{9O=`bc|a7(9}*+VUW9r?1&h4*{G_Qho0KpW0A zFqG?ARXwpkP)tox7^eeb@=su&D>ywKZs?t-GdQkJ*sNL~g34-o1z>kLorz0JG`nw&1@(nn3r@^N8sO*Bh5}R9 zwco9KmH~onKTq+vSc52rV0N0(F_-v+OE500h@Or6vBG_{RbI93+!EBQD65(H@Dhkat2ZvbKYMCXX8}g&-IEAkQQmG)BnIgt zYG@dA19?U>x5<@-p&Kme<&hUY_rNEy*{vZEfS}VNFmg(pClY4B1t{fSv#h&#{rshK zhd?RcXEGM^fN6%C*-NkT7g0XoQR5aj>9~YOI+IW=r#4c8w-{L`3vA6vcNLgS9;xA2 zZXR5^j$T>s;?o$3=0XTkS$VIPj>L8&JsTu3vJNpN7urD>Um!Jn$d$_Lv zhd<~}zJwMB>$6b`40b*vi}CT9&XmVR-@1d;28&a_&VPAxkj%L~fg47XEL56Fxr>36#CD^8Bl;AR|Zk+*uz)GoWS(S_FYJz(7R0sZy2GV@x zXpHCJiw-|sU`1X>r)hEXh{O>DnD`<|-&rDQm&OUAeGlI~kGPwkdENh+;fNA1Y}qr@ zB1diV4S4#?mqG|8@Vw1GpIjq)S`dX`CtTch^~GODGxUGu2-XM9{o+`sG!mIUw`j)! P|82M0Wm#eF7W;nyF$2&n literal 0 HcmV?d00001 From 2ca6776bfa82c22d8034cb71835600c578bda82e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 12:11:21 +0200 Subject: [PATCH 048/151] Update Slate_API.md --- docs/Slate_API.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index f6cd2d210..0e8c5ab65 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -468,6 +468,31 @@ More infos here: https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Layo ## SButton +It's time for user interaction. The SButton widget raises an event whenevr the user clicks on it: + +```python +from unreal_engine import SWindow, SVerticalBox, SButton +from unreal_engine.enums import EHorizontalAlignment +import unreal_engine as ue +import time + +window = SWindow(client_size=(512, 256), title='Slate Window')( + SVerticalBox() + ( + SButton(text='Button 001', on_clicked=lambda: ue.log('Hello i am Button001')) + ) + ( + SButton(text='Button 002', h_align=EHorizontalAlignment.HAlign_Center, on_clicked=lambda: (ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'Hello i am Button002'), window.bring_to_front())) + ) + ( + SButton(text='Update title with current time', on_clicked=lambda: window.set_title(str(time.time()))) + ) + ( + SButton(text='Close Window', on_clicked=lambda: window.request_destroy()) + ) +) +``` + ## SEditableTextBox ## SImage From 9913476b50274205e080c78e3c13526d0e750d3e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 12:12:01 +0200 Subject: [PATCH 049/151] added bring_to_front() to SWindow --- .../Private/Slate/UEPySWindow.cpp | 21 ++++++++++++++++++ docs/screenshots/slate_SButton.png | Bin 0 -> 15923 bytes 2 files changed, 21 insertions(+) create mode 100644 docs/screenshots/slate_SButton.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySWindow.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySWindow.cpp index 835ded96f..41f6615ab 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySWindow.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySWindow.cpp @@ -126,6 +126,26 @@ static PyObject *py_ue_swindow_request_destroy(ue_PySWindow *self, PyObject * ar Py_RETURN_NONE; } +static PyObject *py_ue_swindow_bring_to_front(ue_PySWindow *self, PyObject * args) +{ + ue_py_slate_cast(SWindow); + + PyObject *py_force = nullptr; + + if (!PyArg_ParseTuple(args, "|O:set_as_owner", &py_force)) + { + return nullptr; + } + + bool bForce = false; + if (py_force && PyObject_IsTrue(py_force)) + bForce = true; + + py_SWindow->BringToFront(bForce); + + Py_RETURN_NONE; +} + #if WITH_EDITOR static PyObject *py_ue_swindow_add_modal(ue_PySWindow *self, PyObject * args) { @@ -189,6 +209,7 @@ static PyMethodDef ue_PySWindow_methods[] = { { "get_handle", (PyCFunction)py_ue_swindow_get_handle, METH_VARARGS, "" }, { "set_as_owner", (PyCFunction)py_ue_swindow_set_as_owner, METH_VARARGS, "" }, { "request_destroy", (PyCFunction)py_ue_swindow_request_destroy, METH_VARARGS, "" }, + { "bring_to_front", (PyCFunction)py_ue_swindow_bring_to_front, METH_VARARGS, "" }, #if WITH_EDITOR { "add_modal", (PyCFunction)py_ue_swindow_add_modal, METH_VARARGS, "" }, #endif diff --git a/docs/screenshots/slate_SButton.png b/docs/screenshots/slate_SButton.png new file mode 100644 index 0000000000000000000000000000000000000000..b813bbb3fee2334f3534ca9d592f57d0373ba5ce GIT binary patch literal 15923 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 g@8USQe0I5yv>6X@dwp}F1Aoq+H9V7}V-xcK025 Date: Fri, 7 Sep 2018 12:12:57 +0200 Subject: [PATCH 050/151] Update Slate_API.md --- docs/Slate_API.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 0e8c5ab65..ede4c7b5c 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -493,6 +493,8 @@ window = SWindow(client_size=(512, 256), title='Slate Window')( ) ``` +![SButton](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SButton.png) + ## SEditableTextBox ## SImage From 605d1ce1aafdb8bab35d9b5d79c05c08d80d00d8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 12:15:19 +0200 Subject: [PATCH 051/151] Update Slate_API.md --- docs/Slate_API.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index ede4c7b5c..d4e04e7cf 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -495,6 +495,16 @@ window = SWindow(client_size=(512, 256), title='Slate Window')( ![SButton](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SButton.png) -## SEditableTextBox +Note that technically SButton's are containers so you can assign to them another widget: + +```python +SButton(on_clicked=lambda: window.request_destroy())(STextBlock(text='Hello')) +``` + +More infos here: https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SButton/index.html ## SImage + +## SEditableTextBox + + From 79fd7c5a261537170b4c24170c3a65ec555b8c46 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 13:42:42 +0200 Subject: [PATCH 052/151] Update Slate_API.md --- docs/Slate_API.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index d4e04e7cf..d8b1b53ed 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -505,6 +505,45 @@ More infos here: https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Inpu ## SImage +This widget draw graphics resources (images, solid blocks). + +```python +from unreal_engine import SWindow, SImage, SVerticalBox, FLinearColor, SBorder +from unreal_engine.structs import SlateBrush, SlateColor, Vector2D +from unreal_engine.classes import Texture2D +import unreal_engine as ue +import os + +plugin = unreal_engine.find_plugin('UnrealEnginePython') +plugin_base_dir = plugin.get_base_dir() + +image_file = os.path.join(plugin_base_dir, 'Resources/Icon128.png') + +texture = ue.load_object(Texture2D, '/Game/Mannequin/Character/Textures/UE4_LOGO_CARD') + + +window = SWindow(client_size=(128, 512), title='Slate Window', sizing_rule=0)( + SVerticalBox() + ( + SImage(image=SlateBrush(ResourceName=image_file, bIsDynamicallyLoaded=True)), + ) + ( + SImage(image=SlateBrush(ResourceObject=texture)) + ) + ( + SImage(image=SlateBrush(TintColor=SlateColor(SpecifiedColor=FLinearColor(1, 0, 0)))) + ) + ( + SImage(image=SlateBrush(ResourceName=image_file, bIsDynamicallyLoaded=True, TintColor=SlateColor(SpecifiedColor=FLinearColor(0, 1, 0)))) + ) + ( + SBorder()(SImage(image=SlateBrush(ResourceObject=texture, ImageSize=Vector2D(X=64, Y=64)))), auto_height=True + ) +) +``` + +![SImage](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SImage.png) + ## SEditableTextBox From b335fa25581f45ad7697c2214ed98754b6e20ac5 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 13:43:02 +0200 Subject: [PATCH 053/151] SImage screenshot --- .../Private/SPythonEditableText.cpp | 5 ++--- docs/screenshots/slate_SImage.png | Bin 0 -> 45635 bytes 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 docs/screenshots/slate_SImage.png diff --git a/Source/PythonEditor/Private/SPythonEditableText.cpp b/Source/PythonEditor/Private/SPythonEditableText.cpp index 183c6f862..d91ba2a80 100644 --- a/Source/PythonEditor/Private/SPythonEditableText.cpp +++ b/Source/PythonEditor/Private/SPythonEditableText.cpp @@ -34,11 +34,10 @@ FReply SPythonEditableText::OnKeyChar(const FGeometry& MyGeometry, const FCharac return Reply; } Reply = FReply::Handled(); + // substitute tab, with 4 spaces if (Character == TEXT('\t')) { - FString String; - String.AppendChar(Character); - InsertTextAtCursor(String); + InsertTextAtCursor(FString(" ")); } //else if (Character == TEXT('(')) //{ diff --git a/docs/screenshots/slate_SImage.png b/docs/screenshots/slate_SImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9d03b6450e215f95aa23c21b5d83d9d1210e95a3 GIT binary patch literal 45635 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 literal 0 HcmV?d00001 From 2d91906b3efea4208ebb0d7c982eccef1b439966 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 13:47:06 +0200 Subject: [PATCH 054/151] Update Slate_API.md --- docs/Slate_API.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index d8b1b53ed..5efacad5a 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -544,6 +544,19 @@ window = SWindow(client_size=(128, 512), title='Slate Window', sizing_rule=0)( ![SImage](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SImage.png) +Pay attention to the bIsDynamicallyLoaded field of SlateBrush, if you are passing a non-ue4 resource (via ResourceName) you have to instruct UE to load the resource as a texture (by setting bIsDynamicallyLoaded to true). This is not required when using ResourceObject. + +Combining SButton and SImage is pretty handy: + +```python +SButton(on_clicked=lambda: ue.log('Image Clicked'))(SImage(image=SlateBrush(ResourceName=image_file, bIsDynamicallyLoaded=True))) +``` + +More infos about SlateBrush: + +https://api.unrealengine.com/INT/API/Runtime/SlateCore/Styling/FSlateBrush/index.html + + ## SEditableTextBox From 286f3bfe394fcbcf017b52c657ce5ca5fdda6f08 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:18:45 +0200 Subject: [PATCH 055/151] Update Slate_API.md --- docs/Slate_API.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 5efacad5a..19684821d 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -559,4 +559,59 @@ https://api.unrealengine.com/INT/API/Runtime/SlateCore/Styling/FSlateBrush/index ## SEditableTextBox +This widget allows the user to input a string: +```python +from unreal_engine import SWindow, SEditableTextBox, SHorizontalBox, SButton +from unreal_engine.classes import Object +import unreal_engine as ue + +asset_name=SEditableTextBox() + +window = SWindow(client_size=(512, 32), title='Open Asset', sizing_rule=0)( + SHorizontalBox() + ( + asset_name + ) + ( + SButton(text='Ok', on_clicked=lambda: ue.open_editor_for_asset(ue.load_object(Object, asset_name.get_text()))), auto_width=True + ) +) +``` + +![SEditableTextBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SEditableTextBox.png) + +The get_text() method will return the currently inserted text. + +When the user click on 'Ok', the asset specified in the SEditableTextBox will be validated, loaded and opened in the related editor. + +More infos (check FArguments) here: + +https://api.unrealengine.com/INT/API/Runtime/Slate/Widgets/Input/SEditableTextBox/index.html + + +## The .assign() hack + +In the previous example we used a 'mixed' visual style to allow the SEditableTextBox to be assigned to a python variable to be able to reference it in the on_clicked event. + +The python SWidget api supports an alternative way for assigning references to SWidget. It is indeed a hack (and honestly not very pythonic), but for big interfaces should simplify the management a lot: + +```python +from unreal_engine import SWindow, SEditableTextBox, SHorizontalBox, SButton +from unreal_engine.classes import Object +import unreal_engine as ue + +asset_name=None + +window = SWindow(client_size=(512, 32), title='Open Asset', sizing_rule=0)( + SHorizontalBox() + ( + SEditableTextBox().assign('asset_name') + ) + ( + SButton(text='Ok', on_clicked=lambda: ue.open_editor_for_asset(ue.load_object(Object, asset_name.get_text()))), auto_width=True + ) +) +``` + +Basically the .assign(global_name) method, will map the SWidget to the global item specified as global_name. The .assign() method will check for validity of the passed name, so typos will not be a problem. From 05c8549a607bf7221065299df056a51550e60253 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:19:50 +0200 Subject: [PATCH 056/151] added slate assign() hack --- .../Private/Slate/UEPySWidget.cpp | 30 ++++++++++++++++++ docs/screenshots/slate_SEditableTextBox.png | Bin 0 -> 10222 bytes 2 files changed, 30 insertions(+) create mode 100644 docs/screenshots/slate_SEditableTextBox.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySWidget.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySWidget.cpp index 62c7a3e33..1104338d8 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySWidget.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySWidget.cpp @@ -323,6 +323,34 @@ static PyObject *py_ue_swidget_new_ref(ue_PySWidget *self, PyObject * args) return (PyObject *)py_ue_new_swidget(Widget.ToSharedRef(), &ue_PySWidgetType); } +static PyObject *py_ue_swidget_assign(ue_PySWidget *self, PyObject * args) +{ + char *global_name; + if (!PyArg_ParseTuple(args, "s:assign", &global_name)) + { + return nullptr; + } + + PyObject *py_globals = PyEval_GetGlobals(); + if (!py_globals) + { + return PyErr_Format(PyExc_Exception, "unable to retrieve globals"); + } + + if (!PyDict_GetItemString(py_globals, global_name)) + { + PyErr_Clear(); + return PyErr_Format(PyExc_Exception, "global \"%s\" not found", global_name); + } + + if (PyDict_SetItemString(py_globals, global_name, (PyObject *)self) < 0) + { + return PyErr_Format(PyExc_Exception, "unable to assign global \"%s\" to SWidget", global_name); + } + + Py_RETURN_SLATE_SELF; +} + static PyMethodDef ue_PySWidget_methods[] = { { "new_ref", (PyCFunction)py_ue_swidget_new_ref, METH_VARARGS, "" }, { "get_shared_reference_count", (PyCFunction)py_ue_swidget_get_shared_reference_count, METH_VARARGS, "" }, @@ -344,6 +372,8 @@ static PyMethodDef ue_PySWidget_methods[] = { #endif { "on_mouse_button_down", (PyCFunction)py_ue_swidget_on_mouse_button_down, METH_VARARGS, "" }, { "on_mouse_button_up", (PyCFunction)py_ue_swidget_on_mouse_button_up, METH_VARARGS, "" }, + + { "assign", (PyCFunction)py_ue_swidget_assign, METH_VARARGS, "" }, { NULL } /* Sentinel */ }; diff --git a/docs/screenshots/slate_SEditableTextBox.png b/docs/screenshots/slate_SEditableTextBox.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a617870aa1e3b172262ca263053ea6c67d8201 GIT binary patch literal 10222 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 literal 0 HcmV?d00001 From cf931632f9ff795520088c48142aa064d0d96cbb Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:30:58 +0200 Subject: [PATCH 057/151] Update Slate_API.md --- docs/Slate_API.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 19684821d..edf89579d 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -615,3 +615,11 @@ window = SWindow(client_size=(512, 32), title='Open Asset', sizing_rule=0)( ``` Basically the .assign(global_name) method, will map the SWidget to the global item specified as global_name. The .assign() method will check for validity of the passed name, so typos will not be a problem. + +## SCheckBox + +Very useful for managing boolean values: + +```python + +``` From bb8e2f156a8afa98987ac4d115d067e694a4492a Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:34:30 +0200 Subject: [PATCH 058/151] Update Slate_API.md --- docs/Slate_API.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index edf89579d..d478da95d 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -621,5 +621,41 @@ Basically the .assign(global_name) method, will map the SWidget to the global it Very useful for managing boolean values: ```python +from unreal_engine import SWindow, SEditableTextBox, SHorizontalBox, SButton, SCheckBox, STextBlock +from unreal_engine.classes import Object +from unreal_engine.enums import EVerticalAlignment +import unreal_engine as ue +asset_name=None +checkbox_bool=False + +def open_or_validate(path, only_validate): + try: + asset = ue.load_object(Object, path) + except: + ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'invalid path') + return + + if only_validate: + ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'path is valid') + else: + ue.open_editor_for_asset(asset) + +window = SWindow(client_size=(512, 32), title='Open Asset', sizing_rule=0)( + SHorizontalBox() + ( + SEditableTextBox().assign('asset_name') + ) + ( + STextBlock(text='only validate path'), auto_width=True, v_align=EVerticalAlignment.VAlign_Center + ) + ( + SCheckBox().assign('checkbox_bool'), auto_width=True + ) + ( + SButton(text='Ok', on_clicked=lambda: open_or_validate(asset_name.get_text(), checkbox_bool.is_checked())), auto_width=True + ) +) ``` + +![SCheckBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SCheckBox.png) From bbc68c0a94b2291d97c19aadfa455fea4aa91c5a Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:46:58 +0200 Subject: [PATCH 059/151] Update Slate_API.md --- docs/Slate_API.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index d478da95d..5bc34334a 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -659,3 +659,55 @@ window = SWindow(client_size=(512, 32), title='Open Asset', sizing_rule=0)( ``` ![SCheckBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SCheckBox.png) + +## OOP refactoring + +Time to refactor the code to be more elegant, and to allow the reuse of custom/complex widgets: + +```python +from unreal_engine import SWindow, SEditableTextBox, SHorizontalBox, SButton, SCheckBox, STextBlock, SVerticalBox +from unreal_engine.classes import Object +from unreal_engine.enums import EVerticalAlignment +import unreal_engine as ue + +class AssetOpener(SHorizontalBox): + + def __init__(self): + super().__init__(self) + self.asset_name_picker = SEditableTextBox() + self.only_validate_path = SCheckBox() + + self.add_slot(self.asset_name_picker) + self.add_slot(STextBlock(text='only validate path'), auto_width=True, v_align=EVerticalAlignment.VAlign_Center) + self.add_slot(self.only_validate_path, auto_width=True) + self.add_slot(SButton(text='Ok', on_clicked=self.open_or_validate), auto_width=True) + + def open_or_validate(self): + try: + asset = ue.load_object(Object, self.asset_name_picker.get_text()) + print(asset) + except: + ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'invalid path') + return + + if self.only_validate_path.is_checked(): + ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'path is valid') + else: + ue.open_editor_for_asset(asset) + + + +window = SWindow(client_size=(512, 64), title='Open Asset', sizing_rule=0)( + SVerticalBox() + ( + STextBlock(text='OOP widget below') + ) + ( + AssetOpener() + ) +) +``` + +![OOP](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_OOP.png) + +As you can see, you can inherit from SWidget. Obviously you can mix 'visual' style, with fully procedural one, but the use of classes will simplify 'context' management. From a1472f8c9cbcd4b731bfb944dd4c0235a94e8c29 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:47:11 +0200 Subject: [PATCH 060/151] checkbox screenshots --- docs/screenshots/slate_OOP.png | Bin 0 -> 13848 bytes docs/screenshots/slate_SCheckBox.png | Bin 0 -> 10525 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_OOP.png create mode 100644 docs/screenshots/slate_SCheckBox.png diff --git a/docs/screenshots/slate_OOP.png b/docs/screenshots/slate_OOP.png new file mode 100644 index 0000000000000000000000000000000000000000..cac3dac265dedac1001fe3e3fecae6593357a1a6 GIT binary patch literal 13848 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 QNDxR>Nkg$z9ufTi0Qr^g=Kufz literal 0 HcmV?d00001 From 3dec5c98b6a8f1d83169d4eb890d1557c1543742 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 14:48:34 +0200 Subject: [PATCH 061/151] Update Slate_API.md --- docs/Slate_API.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 5bc34334a..c8e080b11 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -685,7 +685,6 @@ class AssetOpener(SHorizontalBox): def open_or_validate(self): try: asset = ue.load_object(Object, self.asset_name_picker.get_text()) - print(asset) except: ue.message_dialog_open(ue.APP_MSG_TYPE_OK, 'invalid path') return From aad046a6db21fadeb707c4ed61c0d7e4418a0396 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 15:07:49 +0200 Subject: [PATCH 062/151] Update Slate_API.md --- docs/Slate_API.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index c8e080b11..09882df76 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -710,3 +710,29 @@ window = SWindow(client_size=(512, 64), title='Open Asset', sizing_rule=0)( ![OOP](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_OOP.png) As you can see, you can inherit from SWidget. Obviously you can mix 'visual' style, with fully procedural one, but the use of classes will simplify 'context' management. + +## SObjectPropertyEntryBox + +This widget allows the user to select an asset from a specific class + +```python +from unreal_engine import SWindow, SObjectPropertyEntryBox +from unreal_engine.classes import Material +import unreal_engine as ue + + + +window = SWindow(client_size=(512, 256), title='Material Selector', sizing_rule=0)( + ( + SObjectPropertyEntryBox(allowed_class=Material, on_object_changed=lambda choice: ue.open_editor_for_asset(choice.get_asset())) + ) +) +``` + +![SObjectPropertyEntryBox](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SObjectPropertyEntryBox.png) + +note that the callable executed by on_object_changed receives an FAssetData object as argument (this is why we need to call get_asset()) + +More infos here: https://api.unrealengine.com/INT/API/Editor/PropertyEditor/SObjectPropertyEntryBox/index.html + +## From 08ddf2b459fa8b0e8fc782c14b24a503ccb96914 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 15:18:24 +0200 Subject: [PATCH 063/151] added slate_SObjectPropertyEntryBox.png --- .../slate_SObjectPropertyEntryBox.png | Bin 0 -> 28354 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_SObjectPropertyEntryBox.png diff --git a/docs/screenshots/slate_SObjectPropertyEntryBox.png b/docs/screenshots/slate_SObjectPropertyEntryBox.png new file mode 100644 index 0000000000000000000000000000000000000000..b783f4e03fbeba374813290da8cd6bfc730f91ed GIT binary patch literal 28354 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%0A*saP{qTus&v;`|OM>Ns%e^Hx;_9t(*|cf^10Zlg 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 Date: Fri, 7 Sep 2018 15:21:47 +0200 Subject: [PATCH 064/151] Update Slate_API.md --- docs/Slate_API.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 09882df76..2dc094b87 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -735,4 +735,12 @@ note that the callable executed by on_object_changed receives an FAssetData obje More infos here: https://api.unrealengine.com/INT/API/Editor/PropertyEditor/SObjectPropertyEntryBox/index.html -## +## Properties Editors + +## SPythonEditorViewport + +## SPythonListView + +## SPythonTreeView + +## SPythonWidget From e7fd9142fad3bd046826970bb94e731943823395 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 15:25:22 +0200 Subject: [PATCH 065/151] Update Slate_API.md --- docs/Slate_API.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 2dc094b87..dcb7543a4 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -9,6 +9,8 @@ The python wrapper development has been sponsored by Kite & Lightning (http://ki This document assumes a python3 environment. If you are using python2, just ensure to use unicode when you see strings. +It is a 'Work In Progress' and its objective is to give the user enough basis to start building its tools. Only a meaningful subset of the available widgets is explained here, pull requests for extending this page are really welcomed. + ## SWidget and ue_PySWidget SWidget is the base C++ class for all the Slate widgets, it is wrapped in a python object (PyObject) named ue_PySWidget. From d300599674c7ea1885a0894626ff70d9fbba26df Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 15:28:20 +0200 Subject: [PATCH 066/151] Update Slate_API.md --- docs/Slate_API.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index dcb7543a4..c2eaaa338 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -737,9 +737,25 @@ note that the callable executed by on_object_changed receives an FAssetData obje More infos here: https://api.unrealengine.com/INT/API/Editor/PropertyEditor/SObjectPropertyEntryBox/index.html +## SPythonEditorViewport + ## Properties Editors -## SPythonEditorViewport +```python +from unreal_engine import SWindow +import unreal_engine as ue + + + +window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_rule=0)( + ( + ue.create_detail_view(uobject=ue.get_selected_assets()[0].GeneratedClass.get_cdo()) + ) +) +``` + +![SDetailView](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SDetailView.png) + ## SPythonListView From 862bcc271e43fbcc8be3aeb9bf1a5d2f72a2c564 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 15:28:40 +0200 Subject: [PATCH 067/151] added slate_SDetailView.png --- docs/screenshots/slate_SDetailView.png | Bin 0 -> 29194 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_SDetailView.png diff --git a/docs/screenshots/slate_SDetailView.png b/docs/screenshots/slate_SDetailView.png new file mode 100644 index 0000000000000000000000000000000000000000..cbb6ac846fbaace96455822add9471418cf16fd8 GIT binary patch literal 29194 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 literal 0 HcmV?d00001 From 2aac28d45b7a8fda992354c162c31397997f3088 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 16:02:24 +0200 Subject: [PATCH 068/151] Update Slate_API.md --- docs/Slate_API.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index c2eaaa338..f212ea97c 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -739,6 +739,29 @@ More infos here: https://api.unrealengine.com/INT/API/Editor/PropertyEditor/SObj ## SPythonEditorViewport +This is probably tu funniest widget, an EditorViewportClient and a whole World all in a single SWidget: + +```python +from unreal_engine import SWindow, SPythonEditorViewport, FVector, FRotator +from unreal_engine.classes import Blueprint +import unreal_engine as ue + +editor_viewport = SPythonEditorViewport() +world = editor_viewport.get_world() +world.actor_spawn(ue.load_object(Blueprint, '/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter').GeneratedClass) +editor_viewport_client = editor_viewport.get_editor_viewport_client() +editor_viewport_client.set_view_location(FVector(-200, 300, 200)) +editor_viewport_client.set_view_rotation(FRotator(0, -30, -90)) + +window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_rule=0)( + ( + editor_viewport + ) +) +``` + +![SPythonEditorViewport](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SPythonEditorViewport.png) + ## Properties Editors ```python From 9ea52f9fe81ea4f14d2eeff687f0906f6fdcfc63 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 16:02:50 +0200 Subject: [PATCH 069/151] improved EditorViewportClient --- .../Slate/UEPySPythonEditorViewport.cpp | 8 ++++++++ .../Wrappers/UEPyFEditorViewportClient.cpp | 16 ++++++++++++++++ .../slate_SPythonEditorViewportClient.png | Bin 0 -> 112551 bytes 3 files changed, 24 insertions(+) create mode 100644 docs/screenshots/slate_SPythonEditorViewportClient.png diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySPythonEditorViewport.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySPythonEditorViewport.cpp index 649b842ca..b9c19952c 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySPythonEditorViewport.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySPythonEditorViewport.cpp @@ -4,6 +4,7 @@ #if WITH_EDITOR #include "Components/DirectionalLightComponent.h" +#include "Wrappers/UEPyFEditorViewportClient.h" static PyObject *py_ue_spython_editor_viewport_get_world(ue_PySPythonEditorViewport *self, PyObject * args) { @@ -11,6 +12,12 @@ static PyObject *py_ue_spython_editor_viewport_get_world(ue_PySPythonEditorViewp Py_RETURN_UOBJECT(py_SPythonEditorViewport->GetPythonWorld()); } +static PyObject *py_ue_spython_editor_viewport_get_editor_viewport_client(ue_PySPythonEditorViewport *self, PyObject * args) +{ + ue_py_slate_cast(SPythonEditorViewport); + return py_ue_new_feditor_viewport_client(py_SPythonEditorViewport->GetViewportClient().ToSharedRef()); +} + static PyObject *py_ue_spython_editor_viewport_set_show_bounds(ue_PySPythonEditorViewport *self, PyObject * args) { ue_py_slate_cast(SPythonEditorViewport); @@ -241,6 +248,7 @@ static PyObject *py_ue_spython_editor_viewport_get_light(ue_PySPythonEditorViewp static PyMethodDef ue_PySPythonEditorViewport_methods[] = { { "simulate", (PyCFunction)py_ue_spython_editor_viewport_simulate, METH_VARARGS, "" }, { "get_world", (PyCFunction)py_ue_spython_editor_viewport_get_world, METH_VARARGS, "" }, + { "get_editor_viewport_client", (PyCFunction)py_ue_spython_editor_viewport_get_editor_viewport_client, METH_VARARGS, "" }, { "set_show_bounds", (PyCFunction)py_ue_spython_editor_viewport_set_show_bounds, METH_VARARGS, "" }, { "set_show_stats", (PyCFunction)py_ue_spython_editor_viewport_set_show_stats, METH_VARARGS, "" }, { "set_view_mode", (PyCFunction)py_ue_spython_editor_viewport_set_view_mode, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFEditorViewportClient.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFEditorViewportClient.cpp index 9e36b459f..43aff5748 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFEditorViewportClient.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFEditorViewportClient.cpp @@ -37,6 +37,11 @@ static PyObject *py_ue_feditor_viewport_client_get_view_location(ue_PyFEditorVie return py_ue_new_fvector(self->editor_viewport_client->GetViewLocation()); } +static PyObject *py_ue_feditor_viewport_client_get_view_rotation(ue_PyFEditorViewportClient *self, PyObject * args) +{ + return py_ue_new_frotator(self->editor_viewport_client->GetViewRotation()); +} + static PyObject *py_ue_feditor_viewport_client_get_camera_speed(ue_PyFEditorViewportClient *self, PyObject * args) { return PyFloat_FromDouble(self->editor_viewport_client->GetCameraSpeed()); @@ -84,6 +89,15 @@ static PyObject *py_ue_feditor_viewport_client_set_view_location(ue_PyFEditorVie Py_RETURN_NONE; } +static PyObject *py_ue_feditor_viewport_client_set_view_rotation(ue_PyFEditorViewportClient *self, PyObject * args) +{ + FRotator rot; + if (!py_ue_rotator_arg(args, rot)) + return PyErr_Format(PyExc_Exception, "argument is not a FRotator"); + self->editor_viewport_client->SetViewRotation(rot); + Py_RETURN_NONE; +} + static PyObject *py_ue_feditor_viewport_client_set_realtime(ue_PyFEditorViewportClient *self, PyObject * args) { PyObject* bInRealtime; @@ -101,12 +115,14 @@ static PyMethodDef ue_PyFEditorViewportClient_methods[] = { { "tick", (PyCFunction)py_ue_feditor_viewport_client_tick, METH_VARARGS, "" }, { "get_look_at_location", (PyCFunction)py_ue_feditor_viewport_client_get_look_at_location, METH_VARARGS, "" }, { "get_view_location", (PyCFunction)py_ue_feditor_viewport_client_get_view_location, METH_VARARGS, "" }, + { "get_view_rotation", (PyCFunction)py_ue_feditor_viewport_client_get_view_location, METH_VARARGS, "" }, { "get_camera_speed", (PyCFunction)py_ue_feditor_viewport_client_get_camera_speed, METH_VARARGS, "" }, { "get_viewport_dimensions", (PyCFunction)py_ue_feditor_viewport_client_get_viewport_dimensions, METH_VARARGS, "" }, { "is_visible", (PyCFunction)py_ue_feditor_viewport_client_is_visible, METH_VARARGS, "" }, { "get_scene_depth_at_location", (PyCFunction)py_ue_feditor_viewport_client_get_scene_depth_at_location, METH_VARARGS, "" }, { "set_look_at_location", (PyCFunction)py_ue_feditor_viewport_client_set_look_at_location, METH_VARARGS, "" }, { "set_view_location", (PyCFunction)py_ue_feditor_viewport_client_set_view_location, METH_VARARGS, "" }, + { "set_view_rotation", (PyCFunction)py_ue_feditor_viewport_client_set_view_rotation, METH_VARARGS, "" }, { "set_realtime", (PyCFunction)py_ue_feditor_viewport_client_set_realtime, METH_VARARGS, "" }, { nullptr } /* Sentinel */ }; diff --git a/docs/screenshots/slate_SPythonEditorViewportClient.png b/docs/screenshots/slate_SPythonEditorViewportClient.png new file mode 100644 index 0000000000000000000000000000000000000000..8de4d801fc6e846376dc995efaccd7e889bdd4d5 GIT binary patch literal 112551 zcmZU)2RNH;{5DL4SVd8zMW`r!T0%Xw39S~@8eOVpOKBg}s+}QJRkfn1Q6ozG=rmiS zM(ogN=&~!ZS4hN4WPR!Lf8Y0bzwbMaj637F@9X;guIo3>^Ssksob2|A9~2i55ZLEn zZ+lTd0Kh*MJS-~0|0aKUFPr}+7Wtsm07-)0BMnIqjBf-8Q%>OJFX73&; zARyKC=P8H}eeEwGzh@omN*5B(-n>0yn*FNa8{|pnZOD_Cu4fMy zs6!wpM1kU^iIAL=ni{r5Cg7||X7J;10PCjT>_fRWu3z^1#f75C6%X8%?W?#?(c9de z7^3}BD3%&GRWTet@^)oq{q6N2x7{gHg~ha(^R@fXy)vj-vZ2ZUdZ6&rO*RnmOel&; z$dl7{IzHkV`8A^FfSXF%v8t8`kegT3uZZ7KBWpd|BR;6$B8#{a<05W8i0zuNwNE2@ z#*<;E@lTAW7!MO8r>_@_Fa3D`^+!*EmFfdSgqdXE-aRGa*0MglcIS?Qv6LW!J{s}1 zZzIFxeQZODJ6m`wJu*TDh5_IQVwW9##^oN^%V%Um2FyT9@bywnpU0=$&&)yS`^@A6 zk4)b%`BBjo_OEm5^m(jQ*PkoEGOWJNr1=e36bYy(c3aGNIf?Id_~~*ki| z%)KNx4IAvN&cLzqvIe@nARBx?+sK*8{B(8c%9pgWyqli zIg^9GyB85ti`y6TnGY*k2iXII779xe49Xyva(i(T#@hr9G|na>mzD56i*VxN`3VcJ z|KpiI3yV~5RTDtuo5tee$a0!9e1;y#qhP(J=(!EYLlLVUnC=1R$wCr)Vg69t^dYk; zMz665_a}Dm(uPXO_ci5@k)G@V*k)kvL@3VkOK>@i#CSp)Woc4@A?xlj7bqT6T^ zxUfeEBaMa*CL=s!rEp^T(%p$|W%`C;^}LlBlc78sfjuE*%6(knoT`HAO~5*BGt@^c ziLG+?q&!BJP4I*5^-)xyDk|WI686)+KmXjdS~IumtG8R368p!Gq=enDM!=pWXfH7g z3ws%qQENPQEaP)bXWMLYaKg)V)yCNj^TQAKUydw2kWniL@RMp!Ok~x;SapPuhTjVF z1E3|Pf2b})Fo%ys?|q!I%)$t!<1CSBUB`1Rq>bv(ME%R+#DXx6(Ds?K+e}Qg!W#(JiWH| zqb_7YsPSsutSX?greQv0adrS+zx8A7$9u0(7&z21hIwzVyS4BW)eQCcPQ#_PwUAJW z31@bU&xK!eVy+>8~ z=#Z)PaDSuE?&lF<`93e~n2rx?d_=D*?rYFaQXt17p3#qG_oKCCz`N8t&I#9n5!=ag z$<8b1PE{k;Mvx&e5wQ;hsc2K=mL2Njr#Yi1kx!)NuaSd_ZFR4_7@Il|lX!AnFTB^44zFrDEn+r!rVj<+EaEw?R$cJI-s zD@rguD{sW%z6AlKPTR`6w!dzEb7gFRc^jfxIh0Ct72{FWwG#H6HvSrnNNU}kG6yE? z5j|hn^1f8DzaSr%w=@3r2}Q9cJXRek>W$o09CvkN30*8bZl!19Tq!6f2F;*noit5c z1e&KMwbA=3BwE)7=N8X$Kj5|-u8*vM-6b)qjo*r7K&*8tcikk7M}x7YyB2v|9FNM# zdF9LntO>5HnBWD|B+^nE;ym@M152wuqU3WXP3*k`LQ3@hTWkOAEc~(@ipK!+W@APA zt|e;faHV-&ylOU{w}Dbg>--%%L|Jgt5C|DmGcN#c}5jL0EWBxfEvWKA2SlPLC{Q&p^2| zqMz}CkvVN~5v4dRkBP-poy}5@Y)kZ00Tn?bXHt<%sW-W@)Mudca>B}j69*Gh65H7^ zTp}qg!$3or%bmxu^9uL&yKPb4?Bf5ejaq+b4?mGg|24F9;s%sdc7~Oyd|pYnGSd!$=uL z`d{31NR2zyul=tyoGi58daVB5gjdY(Um-1h-G&}kt}U$J)C^M=0mmi~Vvvh5z2zs9 z^xFn}>i3J4Efz&OS(IzJl7GNB5EDZbZ2J=IGib&MRI z%!?~)hs@b-IbbE{|M+LOdSiExI|e%xEdW#yL*RBA)zKUEJLqjo*v*RB-T(W(>}m znd6*x=5gSCi&Y#sNkZfh*2&(U@e%RujABn^$A1Gb7#zJtzH~B#ew2k{K)LDj-!RB~ zKc{rkHZ9mfqD<0)uE^7yLgVSX~=*Fv;+ML+oo&X9zbWqQ-fZ-W7K8$kJ`n$`9 z2-DT~b$hc)8G}j0bu`@F_ZL{<>Qu_%j#3}Wxmu6*+4Fmy*h*>6^f#e?0Zzb+MNH&j z#$cu5#K)}y+q9DzS>SgX{iUsjer$dC;l1u*)-H;-O9eW&tC(+L44%b2d-gc9g??u* zp=~k2Xu>X_XrOu!BXC}SQOV4^my-O!T17K)Fj}6$8V=AyDmAHu9Y{Mm6g6Lqb$#E(0vTrB4J zm>P&H-jI zc5sT^=(YUOgOKn5u8Zt7Xd7dOu|))TWFTp2&rQ#i{?ZNzR!L8MvgV43zYL#Q*yyd| zj8~l*0$K!+fBcQ@c9491x~#n(W@avWPM&=YB7XcLd;ev35TkJWsE;;Rbim@Ex&iqW zl>d{1E#nf;eNJp{u{g%NYVgzH4*Hz!F7QyZ(s9qCRUcLmN;mp%L6}SOg{YrXFb0UH zzSm`W1I;)6%+x^T$g4c>gBZvtr-SGxt8iVm`9Is2?RD3)u4dlKP~EeuF8RPogyi`W z!Y%9*SbcXRDVvuB77iuV#eR~0Y$tooS@zoLi0_HS_3KWxC$*=xX?W3h|qz&(nJXY|-DRfycc6}51eROdm6c*|}3 zi>DAPbAC0kG&`4D%~?2iEPGNARRl|iVrRxweS;J|)?wyCyaf`wP?Wd?&wAly)v=** zx=kg!X+Tr3WSOp!62DcrDSHie*^Z-Os%cuLX0E^vcM7XpJ%e(%Z69U=s=tStvqM7G z4{%Hl{1;ss5jTs1h27VGzd!+ldfrG{JsZrJUDKo{b2HyKl9UI*Tw1E8z@?S0C51*K z0Ot$!NG3!d#E84K*1IfSY+IbaP-BoB9k`ofm&`t_DF!Ek{!Ifw?evxV8^`GWc>=1L zY1IPDn851eMrKNb{uZueVZCCLXfr{E-coq`;lG=!k#)|(TaE~T%A!kVi~bF@J3|%! zJE;8NM}FWJ78Qq@u5jj6@Rm`JtR2HnX}gm512&UYfmX^JRzh;cwjHq6AK-=jq!WVI zjWXuV1>mP{n3vSMKeRv0xI9>KJNkI+dLMjl-kQIqRN&`Q7oT&!Lpc{iG0XulXE>Mh z-kC*&O+@fa*HN1!w(-V|Uc`np@e-ZQw+hGuexk?_VwI51b31_+_Q2*vS(OFl{uJV~DxZk; zaRb^8Gg?GU5SKu0hD@%0SnbKxr{=fw)^MDLSvf73*Sqitoj)Z`*jvQmYbaVW__5Ln zq1pR**9t%{G-QZNF@Y$WPMe7TeBt~!ygk8@BH;390<!;w%YgY!Ctqgx{l@#JtI{@2-(3o{(A(Mxo8)0%E5zn z{2~NIvB=c1*r~y+Ar6O6e-rg}eQ6o1AeM24HaSuu$-c)`=9|=Nvjl)x*ehk}i3G_Q zRZ5HH?S0h~Bn6WXu6PEnb!|RG_hc}i6rXg&mv}+5gev!2VEY;s%+@tb45?CG%Ufx2 z-GkuGV9N#qV{QuI9c(G3M7_Sq{QJUWxqQr9UrA5>%~grT zheaKPlB@$;hOY_vifn#0c>i(i;9hss1_a$wsx4ju5wP;A{)JDA%oa3$ux8^dAB#fI z2_CYtsM9(<0v-%nhJX}JG)5W{v9g)v?VVvdOBH&Q@Q!WYPK)opHifEGng3d!m^aQX zlYJIiqQs15X>8x>T(i>Hf{9^?R2S|E;;`#nwiz!y(YY0X&MU6HBuK4{^+3&6v7ecU zXrVcmZLqPhzK&)`pzoL9$RTLx;#0sH{lF~3S3BcnA|47kc20Kd{)_(xn*=q!W?VS% zVBr25r${IBNgrl0nV%rOE)_^ZWi}@7J*2Z`oHeH@QUBeHsizUF@ z%u*%i$`oGdT2ciQk{s&XV*kbE%I!+N`@^Jl<9uxGYrT8P9)VS7; zS?u3U(k(GS3kQK8w&;OQ*l!^{eZ}YgHfaFdOmE>ZJg`XdAXC^x?PU9=th{dw+W16V z|0BiECgD*ca~TmQ&RtZglQ8I_90u%Rq2pGuGo4=tjHyor7U%J%QjLm#T7dtJ=l&nm z%nV^hG_y+A@GybY&zWcsL1z>eqg28MbY-ec-Jc_HCmuKU492rVN!Lvy(R-t^E`517%%A^U?t9Q<@MPL zg4!KiY^)deT}BFCK#iNaoM;F8gzr7!V|4%if<-IGV$fC5!BNj`HMF%^`px!+OJ(yf z=VZcu1R4iRn7WPuI9UEdAF6OKtVsX=qQxe^t-cPg{tyP2L`n91I&Gs$Tz0wb<}dN+ z2Sj~OP^ax%qz%5N%2xf3*MJ3@a0QRRpo)rzY&|*;r6_DEc#bl5K+T2nUV4_+%5}S3jwsn?C9;VT=J?SL54v;B8(M8BxF=G{{}=OQI+9FZGaq-T<95hnHjV-ffpvqGhvnQ4)JC~1Z$ zxfP^PC9oJT$`)#AZ;Ed@V4)W(2wMq^#ijkS{8PTCEgn*TUBmu8s5>VW5jJ@9{#Z&r ze?Ef!>Dqh%XVJVlErWj*!Nq4))EDIIe-QEiv#kF&%b@+%x$Y!VV(UNhfY&rqtzBiwD#gt43ViG22;|u0PJipySHs1XBp@`RbMg$fX-g96Z zg>qBoewjZvo00nNh^H{DbGr6kzag!4{7OvRuldt_z$GlO#gEn$Fc*mkS7rrw244)> z@US8_U3k^iq)YlTxC(wOC%1mjrZ79Ys;PdfL47l$oOo-Oy*Bu%gq-qxT9rswCvADK=Y~=oYuWnEzpaTSjbCN=q&?zT#rvUSjRS=k?W9;^&~% z%|wFR*a&KQv?r$7Bwh3Lz|j`G%2;=kRQ%*=x5=RSM0vv?l?&kw8;@!XO^0sQXU>}U zG1~*m$Olp%{IF3uZI?aiT-k3Hj?+QDxVN8mrZ`;ev%#lexP)n`RcNECjI68X`YoEbfo|jR1<}x5NqT640g0*&L6`vdOB}ShZjUNvV zj$an5icOseP;VcMC2tZJy%#XaV`kGunNb}hC;Gj`>EVqCiMmfFn}!TCu-N_bF=t`Z zvtLUY+MWv6LNppi^W`2qepq8_(5L=D;tbf2V<0Dd(q8KY`1P1bt4;B<_fD%o^Ux(l z!7)8gT>e_wT3dsh)1S!HWqnKQG~vQM0~oPU1-7S)HqCD%Q;DC(;AeC0#-9=`;D){PwDx9*q0L%sqkW>szMv9 z9Dvx3%GGH6ziWxzHy&6x6%UTiNTU~4+h4^ccm^Y0)3(o!&NPsNimPJmY=Z7ib!^ic z`!>|O&%#H zwxdVbj(Z@rbTbgE+Q#O^jW21xk~==y6ei5@4&w?-@NVWB1(g1dBw7W|JyL5?x7@6_ zA6ahE@Ju6*D>!z7*DtcJx|`Xbuie_EcmO`z<`c#pQs5a~3$vWC@@^z|O59`*jkGYF zToq#BZ@OX!*1|*T&-D{Sr`eltd9GxVuHo=H0&SkB>VQ|X8iVS$ zy>1C2rLaHq-cR8*T)&%);vHg;KMUc$wfct&!#w=1*3X`bjP6~GIXGvY-Jo{VJMI@d z*>3)_8q`5OecNNN_5zXSjoys8Nu{qUiNdox&4X~mR_Vv0eGO9 z9w;*W=dJJ}EphJ|Iegr*W1eyA@&!VdG^}MtBb%2`>qv#&-UBsrJERqwG#F{@jh@uc z>=)8nP0OLk&B9q!q|8v`l+|<~8A)a-V>gru9;ChD+pG6BbV+pGE8N^G{|?Y4@1h7E zQ?h>dO9}T&bX%m3=(e#pPY`=1II{wX*fD~)0^+8@rRs6aheQkM;Y!Dn5$t9Ya#)KR zrZv=zs?3Y(_n4#s{KUR{>Fr*Lco00cD1($(PY@ODWSR6AL~>>H-I_gRg+>hFNb{XB z(eJD+@bdW z&sa$po_n|aLs9m-mX761yCtQ~2XcBGM`Eh35LZMVXaDBZa?>7=A{RvxC?fA$*nxWr zF*@=^hQ_1DQ~3Q6me2-rvuLs3-R9s(%g73VG{c=VqrCY^C0k_fSG@?2{5&*OOHx^U zD=T3v`~I&~|I%C_Cr9aT?614G(@p^y58j8CX#r1lcU=u=igb|X&*`iG3k1zAYlv_J zT%bc1cunpHoWRn=rc4=NMTo@5GtHJZ?_NvwEk*+LK#_1M`Hyd5{|y zL6ZsoqSa#pfe7}fQqGwug|OYGXQKO*MaYq~QQU9-18nCb7t)0Fx6;f6w-NpNWV z4{g^h+O)Lv=e@yC6@!KYNi@BNl^IX%{rSwaLAt_ZTfOOF*4>Sg%lX=dW!FN4b|v$?IWAN22f7{u8$riX#yc zYIAM_aRByX#rTNK>1J_Zadr~?gtREl9o#5;$Xt6YX5LHBWm3f4^PJRSVnUfqsRen- zR^tl9x7v#}1X}3eHOBI#0kY=u$cV%kSrcNW5?mG{mT0~DYVNTv_bI?;OXs&~|BT`2 z-hvwbWkXMrVE5p?!4(xnV5cWBGlT^XByWh$>L`SHRGY$xx2`T`i)~@o9E7zxlHcYP zysHJo{1W_p?pI{r`q28BXCphppXNgd|3-VoaCPS5K_iw!7=!6rnRsXYCw26D*80TS zXt`+01yY`*iXu0wd?611*j$93ATF37coA)tY`sp}xwstWv+Qjqx?uR5P;TwA>vezV zX-J-p=d(pIppEyfT%oG$JH>>cvKX&)j;zc+J;a8di(h@(v5%R%c-VZ@ zwXcZQYusj#WptztsvhoXK=XI&Y7wBQJyj%uZX+DfWS>@rZCzs$Exi7f9f< z=VFq%C0>8i_B{~Y!3}eWz7YB=eod2`UrTr`0aEgy>d$w&9!ald`6rv*IX1jR4ahs_;B;L4<*N__uAA}yK z!b!Wj(x_^Y1Q(&%gN&a3wmp?xbx|;*9dwiBo!+VtO1!neOS_+y?4G2qZ`{K3=m@_m zZdq+Sm24uG+|$d|@z^Vd&Y z?Ow|kZZO652ri7es_ZFfBe5kfnsnXs$BN~kaT2E0>5;5~k!|)N1K^G-f_~wla*opF zv1lbDHDiiU$8UnQ<6k+VlIG&sb~1k%?v+2xRiaq8WF<>FDimo4;GxDwg)@!8UU^UU zp_3l6UR^FL^}k^+pa1h94UuL8w%+a^F#}q= z^sR-|QUXN0-rA+M*>DpCj%9e{HMFwqa;s2ypX*aJG^(*>UK14>H_^ZurV~SXU*|1J zoI*kZZZ}kq%0VBXa!W{_Q|vaMMV9lL1w;4UKP64;)jVb*G**Y1 z&@x|K`w}>u8yr?=b|dK3MC8%2s6{U#GOKkU;sNG~vVRQD;@^Nw40~spUv1UQd7g_# zfVYli#P_?R6Fya;Ng;+-<)C|chbG&;G$W;iqemj&bf0RIN{SsuxYK%9b3UOLLzftp6V1W+y$5m zWijXME|$vu5;k=zqrJ!i!WX4E{qro|&nhU4p2z(~KaHCABkXc}FuEir0qoJXJ%|X7 zV<=kHxA5>NO{@Ne&%q5WSQi<5--1C-CQOjHJE}g`0`!Zu)W7cOZJkVn$uii3Jofyt zwwYsxGg~%`sh-}Pw{G}y^?OY9z~4+=a=EH7+MpWh8ru`Z-J(B_VQ0^)l9(~^5wsy` zPA`2L%vmMaA!kN%sf;(cVKnzCma*M#?$}9Nk!J4}d}Z_c|Hz`kVK@pQMt`8Si~r>Xpffsr|FB7mZ15=Vt}K(y~^=86Iorgvtu&hwPEK(0lDhI z;oYIn0L}XF7?eEJAiZUf)ij^(vl~QU z@lUEp;?$u|(h#TxC=|xtM1?b_efEAO;TqXXP|g?ntT4@I*Amy-LgC<=TPVe-s)o~H za~=nZzz&Ik1qIP@zPvB8!pORC%R{0{fr3cuOqkj%DN(O>?4lyVivEb$EWOLZ&c`N^ zYh_bZbOLFK{V%VEsUfbKfBsTEHv8Z$#%40gCgf{yhaL7UC7SBir=={``s}Wv)bx;0 z|BBQdixn33bilnp|-J+xy2Cjn>rV-3=yUZm8#zY&6*)Gj{HD3(oaI%!(!OULl-Y9(! ztHbC()wggaxaT*RWcmVzJxTvU-7BBp2j)he_REtVqa`tms| zf@WQE!p~UI@@;d+a3OI!1Y~qvuOl)bZuuDUF7v@IcaJ`c;=1KxxSdd4*k(FTejdwV zVx=v%e&A~0Q(e4>I9f3d*HTK}#4T5KQ#FR9&`)hOs5+t>OD~F!VbmI>7=o3_EK~M3 zAz!o=kG*D#_8U5~X+0_7O-oXeJ|}O**TfV!pG*-zTQD|60Ip!bDtor~hiF5K6LlIKnpN{x8ikxSjBSvXv z)_1oHYA5_Wik?^{7!AK!`|K5U8CvRJ>Ps6j)p5{4JSy%mKf_d5=X zNy5Asns9s^$@(iDrm8O;Xfb5AW>s9rQ+|pFq?uwvq$qX>!=!f0*={$}@P%x!gU%56 zO@sf8&RmRQBBMmoBsfs;A=PXr=kN1RqvbOb4rjiI&EG15cs^%jPg96~kPia-?&O5p#-pyKq`_UIS`LJGY8UtAb)#y1ajw6lw12{4uq?W2X<**`j+? zGuG}-W#X6%g?X&?W+*(9DQsQO+lZrQV^uoR+cSt2o>~XT)$ESApgI)cHjw>5DdNOL zuUkl6Yo&T$g}Xlk%BLsS@N=Pbh%I;pzSZRHR# z(iV%bN!m*wyd%*izC8fka+06?SDhI5*X>Bv9Ym-0&_6Z9Nm9m}!h9tl>u`al7=sSw z(Hre*m-9XGPLWE zYBCpm<~8zeAoK|4FSz8_*mD}2{QfsT(p@n+HVch_efRHA^4rlopTXXCXh<_x)oFJd zXfzdFV4dq{Stm+2X$x-xZ;&J~%>CV&k{@5*2%X7{R#SWoaC+V`1_Ozh`Jc|RnE1~kGc-^H%Qd*Gw4z>*n4Wj3-_^w3*s%) zpM%-0^A||mV}#SvBY7KB+!tVvDfSDj`xKAXpjVZ^Sj-!YTY_ElW^ggOgD5IKH?MUu zCbt2$C3M>3oV=)%Md5-R%naL7gJVm0tC@{FaHavZ;W+{_)}w-@Ibf2Sx{}Pt`P2+> zKfo+xzip<^_FK1oA=xVJo7um9YS`RpNNN|Vvg5na`c&fiLZ9s`J_qO{D9(s9UVW7Q zCeKetCU8JD1%XkUVh^V}meGEwLL>)crw5Nqw`>LGjkIj%u9&vFy^fhOga|Zb>-TNoP-syFAhr!Y@ zL1OZ2kb5fNBZYp&iBKJ7}O}FRECC2 zHGt>MPpkSgJD^u{^g^HE1vex9y(I4L9%5xna!D9KO!0xa2-5yS}Tx;Mv?U+vB`Th+t44g4y462tyR*8=ZN5Ioel zySbsU3}-zbI@-shjf_CW#7#Bx!s3X=yu$eus!o6B1aFLfhRXgmFC;xka`k;zqU)Cg z96{qnM#V&#a8dPfS8}#ClCjx{cFx71*t33w=gvFl!vf*IU2vQ+qRMvtzzvkWn*l3T5?cxX11| zq5_(DufSevvA=QG)Y$)Ksl!iSkSW#zb(b?b%?K_UGq6tV3_4*mZ9h*ei|*C*g86D&~7wqXrcU2 z^?q+k356wN0Cm~2bU2N{q{%(-NB;)YMcvhOA3fDZok%-1{>bDXI~y05=VPM2-ha7< zZSf}|pYy;C!2s)GnYv&P@0|{eE;Me*4}m9ZQMo)_C~^^1ZNXaOzibwA!vvI9`jj->zv9DKIS6DUVU88;*`H(SYQ0zpvZz~-J8YB$z^X)+mD&M= zO!-Q2*|h21z4|GXMaG1qC)-gm09PD@(sepbpw z@5ox<_w0H0akPtNal@Aaj!ZC9ZCpgq{neaqGaqAHn0*{`o2&L{%uiJK-UmTq6L!-M zEnqdCu0I`DZA@>U#^g$#=O){HWa zmQ;&nfw#NK%b|O%^KGGXKUQI0-kU`JZ4?|d2Zs&giv&^IvvL|x1z8zU8Q=+L0ov^N z3%R}=ooYjMm?duE2gD}nev*&*%aD>lInST!f92-qfn@z+b*R}%ZHc^Y8EdZc3_Oy;(`$tRO! zL>i!94NqgCiH`rq*>%VX@8K>$(}25Be^!Tk`46io-HEpcl6l6jt6+bR?aMJ@Vxcr%7c8GpRT{yiT@qG57DB${;IAc|0>7m6aq zK&3xb>8^KOEh_~(1Aw6Vw78en%pMkZOB>MAR9z4Hov^n@4@xih;M3s-{R*x;e?; zQ!Uwe94Hwgy0zMv1|YXejn93K#KqdSr$1!z7mt~_t*6JzhG=@Rke0yDj=ThMe1f!h zjL6DS*HQ8JGe^-$FYk>NZ^kR%mG(3awX5|D9C^V{i?UMp*39e|m2#A8lVh7`{%0Uk zJ342r5?Svejup^rX!h!uDqS_N$@5lM^kG+`O%W3vYpLz1hj-@Oh{?@<0Y3n!65Pblc#K;N4eF&TM67Dyo)QOpj$r#t6V+UlkHYzuS8bG>d->S%>0gTMZEcJ(> zuWqs>k-Uz8vdjjEld)^xD`Z%j)auKlgQlz^jj+J#OEj%eUe7!;l+7Ys@@7HvKy7Uh zF&~}>A!v&GgTMlhb8ftvy?H@CI(r|W_KRSTaU}CwSGaZcrKA3wr@)Z9gwlk;?pH-? zIx>Bb$R}-E@7iv~?F6#z9p#Z0(R_rwWaBMLO{^19^_N5EF%+tadH~f3C%W;z(A##a zuw^i{QlBl4^qMclwl6qlGm_$?O#?1r)SbD-?K-MdMeXR)J5ZO3QlLd`^`JJv6(23d zxPCcIxX%#$ODi^JEbd2&E_l&$I(&jiJmsLY^J!LV*XPz*TEOXDGmmZSDX*bx1hZFU zqlQ3OM~q@V=I+Eyck_jK5GmJW##rH_$Uvz&tcAA328yo~6pm?8lX**7=lUxLtz`yZ z%?X%G?yEHwUC|5eqMQ>Kk5BS_2rRv^xc|N^a3rP7j;4*|%j%X+&05qCW>T3?&BZ&H zxf!RNWv>sd;RcozOUbWo1zV^uq@g~%udtdH_65}4xaC!32$M3xThYvdn8<%jndN>j zlTE2&(Dy#1&b|-{QB3@nwM#j?%h>9p1vwGJ1+FOpgdkZJayUS)pndzc_sm7Noi5IWqsCdiQ1NGwq-< zGSxtGjVw2M;c)z+TPn8TgG0^EhqU#u;_^i&xo{O?u=`ZH!lYrb~`4}r8e=2v`!-7ajLfXIdQeWZaK*aSomo1`97AKCA`Ik zta{H;%IT!5$vu90GWgOghUU51hhu<^FyM%VNX9vNAYjTEx0*}{Y-5|}Ew+5LdeBJS zU?6kziCo3fk?}DkBUgjdoB{>4?$I_Aj z`G6xdfot<`6KHa7%#%9rJVX4vHl7B5^tFP37G|3z)RqFp?vI04j7>K)$ZL~9SuX3h z(2DNi6~XJzxT|Y0EoAh5Q8G=o-$PB?~yqo^~)B(6V|Y;c*PZQkbvR z>L@%`vVtoJm|m~d+Gi2Cs2pn**T@b17nY`P;cXJ|JxpG-q_d*zSjfI5K8kbKF<0#b8Wwq>b7I&j@g z$}7L#wPZlks`p){N{ajUYH9Hu^LWaU^H~q}l~_}2%OjqQtfSHS6%lfeFjsdW%m%@MWk`dA zWCr&$Xc^}8Ge+TDBJzHA@@Z?@+UI`p0gQZXI3{6$vs-n(V`DLSF#ieNbPtiRpEu)`rjg9yHxBM7)z6 zttkh;!6c2?Ore8o?aExjP6%)192cF88HqZ+*y9jW=>KH^tSCNJ=@vJ6EAzwn2+*2a z2~K(EbvN>$J^!vZV<8*!ReTD7H6UWa2t-J58*P-{+Kn|w za|2H;baVhUZRYZhh{3&`(ckBF?=Ea^2#~VKp4VvbY2hMiqhbl0xT|;jkJ*_@(>*YX zQoX&>YGkh%^C10B3R-O^I{Rg9tZbZQ};0NpXz9D3x2#HTqeQOp;0!Q7$ z+)25r-1aFO?&WD4 z%hgLCyW4FNvCBCuYhP--qsV0a`r&J3VV9FKLvr9!LBFQh7Z_N3^dghay8o z7LfQ5YhIRN5s6-a_HEMwgC57^8UBSUHu;(8)Kn;QIbq(7WP0sTt)3HI>N;%~Vr|qv zbL>%xEFg8pXGzyaNiOC0%NywzeUY-ndd$fBr1Yfp4WAxs;+CqKe*O zHz>zxN;4lq<5n|)!PC>JY8ksyqcZ{8H+-@L8ciS)DyeuGHp5kF0dsuVOQ>I2{5w|Z z=S%AjV?XSg49)NSBrIA&Dd(WPM|-OCti=PeDJ(?BqTG@N%|xk`!r0$6IDQvdotD`J zEeyI+Cu-BW@3V;ph#L&k`-zH{y*3b$nCsO3T=;spp?B@X>3To=7+B`S8SJN{eWW!$ z|K}Bb<0>BEx#O2^{!Q(4cj$?Sq5Y@eLS>WG%n8n*()c)`ibJotO!!NpwyDGvP@C6W z|I7|1m0#r^Gr;atz;%ShmZ>vF4xbLCpI1~`G*s)0{wb|*FcL@~h?c)5*D_GwdfQyW zTF@t7OE%$#!~GfGj3DuU&ZWP8C&0xUjZr}ahzu-BJ=eUmhzOL&$ z&(E#y5z-Q=S!O8yGhTt|pgZ-q-Jk$j=sCZ_X{M*WOhI%|bx5{UfKoko9+1QFB*Mk5k(KAxPiZOc;G?tR>EYRRu5l8tbX7}{h(~i zJ}J=Ag|IR&aw-KySio@%EDN-e#0t<}jF1JO%C^a&{~SI#FVCVoRE^SC%MZUB@}uOq z)X(H{=p=h+r_*yb4pdoXq|L>+3r8#Kj78fAcP@;s*jRC~owsr+4$~!Vn&{ROPV+=a z=#!O|Yz>1)Bg4Ef$`WE}8(+f6J(|5*glNbz34cs?kS{ucUmvcL0k%bpSu=ST0s6%v zw&@1SkwFO{$;4_PTOa#F{sjsAY)S*?L9W?qvhQ1x_ckZs+gHVIuoz51|E%?N!4Zv8 zMyY#mh_nhn>Vs!fc$Si6T$4f1Q2Aqzy4U_lcgJ!&-+hyNDFzG@PWOHy%S9mPfn%`1 zbqei!H9}S%Q;w|^`jpmLu~(VwB2B3WgNBArj5#f9d@cS^?k9vJ@ah`Za+iw>LE|!h zx@?=}odGI1OBD7w`g*8!BFi_UC%(rZS=)*U59dK^WcFNlyp>kHm}PyST}AJS_Uh-9 z&8XnAaQb}KJo1$NC`V8Wc|3}49vU@7FTWl^PHJ-;V`f@=KIWf3>Nr=e1W|bPhcFK| z&MnU{ow5Qf6vKsRoW9Pne~2obc0qFg5evbSY2`0c8_M{Iw?Ml?Bs|sPU;eQnu75`4r=IBm=jL)8+vk%%mF5Z#KJ@gHLBuPewe~Hln_zow^G$N*kYJq2$d#R%+6=rpIUYw z7c$7Jw;JGCi7HRaISe8C>u>#y!|mHh+EQcgr$%J4U^Jk{^m(UIHJfCa3lwo~hOPWz zi1vV*5UTDG4NMr!eTU%%O8Fr7lx8^%rp<5gqL+=aRutz^S!6}AUj&3O)m0As=$^_8 z_xz#j^AQ5PLvE7$7!p?o_}t^Dj$SRv6|)K%zkcIM=hBDT;Cz30L8w@$qNyc)Pr`#W zK_nlfa^JI9L;LhPEp018i(cid0?}_eu4DtO7R*Ff_o(lP0H>ymn@B9&DxygTIPvz6 zs+ZV!&m8XTgAe%X;<3l(7Unr;?;Eu-BGv;` z2>Mi@d!{asTCY_G2hjcPt^wdH$0Ab*5xPS0P zt{3*pLsG-^H)yAUF|Dk@JPMS&P$$Oo)Ef3E--g%lI;?as<0;JL zbCjNmCF>pJH=d_er=ot&zD!t8wMu!Tz2EKejO%;)n-qe|B4?Cil!UeqF6@$CE8Z`w zcUHL%xp=}>IA}tta&d@Rx*8pRE2P$9;;2YbD(3}z6$3=Hy7|L@7%OMdSo6QNdy2+^ zlLocgw8}Tpsrr1JTU1wY{!vR*o!t0gXAXZ8t~}#8XU9+2@-4b>em-Qtl9LatV+DOS zyi%w1OFXcyPD#k`%V4htJG)ED1;()_WTfz7M|S69>Go*MQsLne*5_8OJ#&3|-o_HI zDRvW{=(uOUy)H?E;e@=Q8)h~>Z`f+oYF-P8MGP~hI+|{;TqS2JqWF0MHFdq{ob+wO zv&Qucwu2d!KaTw!Y!TCO#4}85s|p9^Xc(6Zx6AI<8MFVX_E}u#9!6$GB_+_gXz0A1 zI1D#*kiIhkXYD9uog}{X;m>J?BrVy|^jt=dg|o|_akCKkOaY&$p7kh@^n%6wc@Ln5 z8)>kZwBUEl?_Z1ztY`v1OW(P~eb0T&i0gjgv+vp)kxlqIZPkvbO4WncmE|xv-WU~u z)s`J^mOU0<8m49va2L5$TEJ|*h|yTkB5V5vti`qG_m6-isX)b*tJzsM;8DwEp-*5& z5D!(GzO6}haP*(@fNn|*l@+g&B!dfh|7q1vduGBN zwt=Zdn1{xfpI=&3Z;0E2{Qwc9e8zIn|Jz#s$*SLeOZ-bPH$Py@VbGmG=I|vlq4T%y zES`*+6krzpp*%euOl=*OWG?DsH-WIs@q zpdA5>x8yh4K68oip*Mk4C(V6MA--ytP1#G{p2}gdlnSRpl?^%2QdqQ6zRjLY>mRIQrs2**6)!lAV$SILNt3;pb- zp@nm{xA)6pa~I2yN;&dq=;vRRJZRCdBEYhJZSlPY{&3MEw?U$*-WjV2iItn;!6WDG z)5=29OPp41Bgw|hRXv(?G;Qp)G4@^Hr!sFPOH_{>7D9v=6shhSGdz`fo!Ps{odJ$r z{j&cBuO|Z7%UtYxWc!xG3NRg(_lLzVB}rOi?OIc@hsy>|)Q{{4Z*1hjePOl^gMH*< ztB5}GIgw6d#aumw+*^>n9JGEG-J2C&HB1r)!uhC%s!dQ%E5pcVq|k9@HUY<(i8)bAnS`FNPAUHjvrps zF{m@8EL%5zxZHCu=njE9)ZoS}8;mfXV7A<6tc8M=fnm{d2uD&?jO-_(r)qxtt0X3( z%Hd4}dboK|&GE@!kUVs_jPnF@2=^@~Af*%z0<;?HPWq6PQ?1Q6ku1B7i@dY<9SFyH zd(-z48AI$6dw<=sxT1}XCKaLv2vWYRRhVaq5Y|;!Ffw!)XZbiaO|laB2}|R}8>TPZ zCEfE?oi>R4VwjVeLc8Ide%b3!%WSODbPqTcuy*$}q(!DZ#DLZ|%H&D8j(iq;ttPyY zX-kSq1M)IclFd95M~IWeX0g{Qybn1HH*7{HLn7daB{qYN=4Tx)vVl)dPTLLKGceth z3(h;T(@{L&>b@GA4eUwvC5#fL6r|ECueNDd)95;=%&P38P^0K@VwqYk0vvW+!&gJ3 zQ&$D_4fEU86PVe(EkJI7@;Fsdpo-hXni@$e874lCF3aUO=`oHFE` z7SWc0yJo!j;Ma$BFPc-e!Gt;-Vw#;?MW1f^tNg7mdS713;?hLs1`!-~E>XP+R)B22 zp|dWQ@K-R6XWS8jU=KolJ^Y1@&q3=kb6)_T5Y@IY{jBg*My6Xm3Y6qR<`J~%-in5L#F!85>=ZA!){5#Z&-$Hmy|KvP`$6wq*c4Vqy#@#j9cjDZBPjmFT-1Nai{ficK(pYgn$% z&wlxgxa!N$MJDNt)Ye?+g5(IH*sE3QV~LcMbey(i+O*l{5;du{_tN(77Y^Jy3a5UO zI!$U9$9P(RN0!uTg2nvVOs%qE$~l{>x_1n5W}uiqEaAqDh+|SslgOwv zaU5!aBA6edO=#7Q?X55Q< z{Kcr;ao#?+SFO8CQncsAU8+FEaKtq4GJJ(WpY@ek>NQE>7N}aEHlFo4Gx;KWA;AZ1 z+;X8aIyS68tI9uJ-=FS_>nO;1=aZ4@IRvN@4ryCe-lMTd9NEq?ke1xh-@5C>&%s9F zKD?v*rCKKk9F^wz9>5j1FtpYP#aEC1LNg=SC_0NIdi>*47xeROyjwtEZaxjM`hH>k zW`%Q{925<^CD?7mb4;UxW2RQEXY4>8I<+}OwjZMxDurpsg_|cgX3dKP_GKZ`*O?R> zmftN!><26+m_5L7V5bio6kWG^Td~1gq3XHkau;Q@ zUtkP)f7J~9dkAt%U=GcXZc$;V<+%v7np^X*cu7RFsg}3nMb8*&d!y2c3Bj6XIz=CD zV^uqwsKAH9jk9(I-3IPIyUkQmY$$!?S9M7LAAVQhW43GU(Q6)nZUj|2WBrgzKK-U`dxlzH87sV###VP% z;^~y&iPG|YD8S#SuT^$ETnm4oDXe-`HWVaVA1mGIWTuD_BqZi;HXwL$MM|6$>|o1s z5v*|_?F-BTzkbdEx?OHY%h=uR4IlQ8jDt&em217N>%z+qJ-&frzB6|VM|9PaEEzGE zbwqOsn#r$eI=mc(;}Zd533=U@(-&)pC+ThBs{Q2lRuTzOmtAx|J;%Jc6 z0_I$9OMD#eRh;ykWA}e{COV9E>HDOyO*e?;X9-Nru<5QM*ugGXEe}-`;J#LZ6nz&)SUL{47IswL%Ob^-tJvL}OALR? zQH+JxO9!b(Tz(v0jOBYUf-C9;te+9ng_}Crus)C^DLZcEkP3qxyYkG@csJ;xnZ1yt zaSWgTu1mC&&B}Y$)Df75rgR|cv7L?96&C~B0}Qdi30Y~yt`*}o5D)hL9UgPbQdo8O zNRKkB)2%SAg{ODO#6~{NGE*9`A&Cduw+AWzfvTLlm7BwZ4xqa2($5o>-F(Ip!|K;d znqyh6BAS9&;q5eL3y*G3-(FYS13BlcMixY_HAA1pi8$u!nJ*^JB2GL~9t^S3%(u_4 zPIc>NKEoiuEW3Mh1-*8Icbqf*AW5>bYrtzYrU!R49%fxks0ROP8mO)V>sy@r!L)h2=Ca&aZ)J{s6`KHLu9Cz@A=oU1Qml_GcL{)AMJ zcA4K>@<2=uA8XvSF*UHx_M(Y@&Ptu3=NN9))jb-w^3kh1E^N&1MYL_=Z@%vOECtit z=?2Q!wr31f)-vY22Q9C@O6RKhG{bHpU+Kgb+qK*-0t>%b}Jeb=4vpe zF+fgx{VF#kh#Ect9qIV!rCccdOSojvLWxBk>k!rN-0>g0itK=s?KjoY_f02ovR)ss zjIZq{V$7HDi-CjeNr{N{_JGNO#M=%X-&TTNHY^t~5ju+;)O0UP%0|>Y7gJ=Wt=YEy>>Xih zdyBBL$tWulJlEgy&2xq1SRW>+uQTkM`rTE0;acu!U9xgO%;m*mKnmEpXjWSerHqdo zMn8vW$?l$T!skvVWQhGdOi18^>D(k9=JF-w(a^F(dqODK^>h6eFV2xBY_L#8)W~My zUM>+sgNh>tLbWCjPKFs z9R;tgMLugK>JdMsNoyhfFtjv^C5Jt>tQ)$}`B6&$B+Lf*1Fdxu{#wcXUozLVpc`op zx8;3a@YDYZ8%Y|Z+5xEa*vnn|{4y^ypVO>5y@m?a_J29Ojt+x58hvYob?{hFs!tRMP_TtkEe-}>>ly{N~Jshvj+FC9EtOnr` z;SW=4&l2onzxNgonLU3gL3pc7^CdmB{`1d7oJO!>KvOoD`{Cd5;({jj%{WdrWWNFj`Zjpw`=#cOo8JzzRi!gVZKUY=NN451%10F@S$2I;k4dT) zzXvCfRv4t;?RNCEaAP#EfcO?;nP*=b*|`WAShVc1_By@ww;XPn z@&UQaU4vOgUngc(lyV3k(Xm&gZ3_TOtzM_b){gOBEAheS8?|4 zwM~#~j^4pmVjd;MR?RRR&Y$#eDip6$E#17FdD{I~*RMj{88#viXamb;&e+Q4_5(pD zJ+1cw7K;r=DD)SbfJ-l*^(S%eG^IFkE$44bu&>uEjX3*iwc5&iS%@pTCY4$5O+{P= ze0XJy*`#VCtZ)!wP6cr{)|yLaAZj1BZw9MQR#*9wPTwzUFD&{yzy4YIJfsW3w--D4 zYBr9l`{np9;{XNtf_YMr&x1}{5b1I&7YnuY)L{f1lxT@=f^D-HU)HytxII>IWHR`9 zJiBz2Vi3{G8Y?4yH^+WbB4zkqROB+NI%D{9)$$QZ_u-4phvbWqWS&GUiD=MEUmsTC zJwbjiLeikB){7U!pq~nRr*jbOBi#0S8Ca9bL5MDucOg9C4OIyq)BZ~Sa<4;@tI%&_ zq=BKHSC#>)h&|mWiweWS$ETOWF`7d2AE?ZmwW3l8!Qp=tB@2>bEVY?>$q0>c2pS42 z`3xq~QX6B4w*a+bTL`rZ@si^sliQ_*T8KG%tByGgh1OgO435ZPUQ=hBJE|wULR`vR z4;fqg-`fi}?QCD{JDhwiYi!gGz%jvfSc9+Xx|seaE1W`(Eqz_(ToI*>Wp*x*mHF-E zzY&Cy;Wdo2t3!S4m8Bzn@ZrPXiW?0KeNHJ*Oyk^U zzjjl0WTV)5v;{|Vt=zkdxd$7$)tp}NmBRk4ZfaqCw=Ei25?_|`#Hn483(*d7?&un@ zdWD5QWfi8U9_I&VMaF!iM|?TPQMQR%eD0;+)&y8)^DR8b8)J)=r%1zF87dKB(v`Nn z4X?||Km2`o<|womcne9dMi@DNlq&Uk@M=hE%cAmr4`qc^ihGuPlOLObZCO+67WFHL z_x;XZxTlpft!Q=N*ar4I+N9|qkNet0q0NAe`kP{Vl&`Ds%SH)e+62{I^(}@Nk@^wH z6|-0+@BdW75_yr3WwLS2k?^&X=u*qh^~PMqAGUnGgkPJ>Cr}>ws9(=fZXN}6l-UdL z2zUjtx9E$bdL#;Cv70F5_ke@=O#FH8uHvD?z$N5H=gN)77v1+CP zF&0DSX>|JTL;l#^$K;al#z?Oh=OgDgBBuE(6Zctsul>dzyRfULQq5_67%AWi6n)_L zpzp|@m-F^#|H>X4z!*d&VCNVy z*JO{Mu+Q!Q-%h`F;7||zGrQe-uc@5xQ^i*Gv5ozGALx0*s9Im_#A?U9m+%JD1Ko|Z z$&ITaN3D_Iie78q`(s*CC$l2Nc|u9#U+BEP4zfDuLM2c{U@%E)FgrvKJa=s=%>Owd z&>vB?A@UQ9)hq6A52)C`g(J-Jk8zk_u=f<#o@TIEGu|s2L%233J#;7&{ZMN5K_gGR|^Q~WPDAQ>CX_|9k zS&wkFm9uG|;v4ivQWYHDid`>y)(7)krP$to^qQ@NS< z;5b!Gb=`SsXxM>&}VsIclvbNw(&p1CbU)w&L5y1tF)I_-2A5&to(SH3}bd`+ZBf9AFPVUR? zFA$#I`v8wjua-lxck40@LSzDOMN#K$`>1gr;@QD7WvQA(6aoHd>?)wPO8 zsB^`?qj4`081Cxhi#^(_$3M230BH6GK_H?i4^w~2{}RPtA5mW9F=$ZO^Dy8fS?{nD zAMB~kKWeb4j7OS*AlgtC6eGr9Td|^U2(5tW23Cg+RXA-o?nKNTjodm5h_&7>spus; zoxIrHe^d-}fGiuvub|bA&ZcoZ%6hyB6j4n)8Mi8gb{|JxHX3x^fWlL(a1jBaaV+HM z?sOiJQe3;fYYWpV*^EA!sr32|<%vf`5DQlBKY5u2I6w|e?wm9F85X=Yv8poG?VUtu z8~t=C5V&^VOWo?UU#dx(IrP%?eAo|;ALdkd3>Qe5ka;?hyuHVSKe5 zBjEUmDaF}s4<9UQy$hf)$qkm!Z?zzOy}ge3QY_uH$y#iMc@?`tzM*{WTVsQ5id*vV zLnv>WTN$^ffzcSohTd;%kSPu?(}^*A(=Q0wulx6fXf&g`6^+G%OdeS6&n>HPQ8cO( zYmxHxP_FFV$)60c%_G)xoR9S9E?(7Ft{*}Ts~r4-?3WIPt&L>$ps3ieQ5oK(+aJT` zsgPJo`U{ma@w-Kr_b*%wM&c{HFMrEtcwuUC2r-tuq^PF1+fwcV5O!_J{H^94oHJmd+nsMR5fF;r7Ld z0{pUxUXT5EWYJJmK9=(Izv@_lD@kgy8jtbpK4u8EJzr^goz4Ic3!?T&L0OaJ@+-oNr_bu~bBsE_6Rg*e*zzMAB5W#?I z*zkOSy^nA1+Ad`=7oXi}hK6|4SrahMR$(m7(Uu}pW``g@i!du+Yp2H07H4twSju3E z;1_B<_630w9&=zi7UUTzkBErOWS-v^%>2M;u~GR%gf?&y6Ny{5dB&`e4o0zTia4iP z2};#M+tLoo4gwN4qf32Mea0At6>(UCP|gT@14HR}D@SdrFK+EI(xW8kCgf z=0a;!M3D|^3yqtrAWIc$znX^FgSW$bjij z0m5D4MsfO_y|SDQ5bxkWg*2+~}#sOCeY zNIXUR#p?x7om|mpEjp_Wtws2q(_+dS6f=l0r%Saq$w2FuWZOpJo;!Fsblpy5YHNx; z0!0o9Ead&tI91WOc^MOOg%jv2Ph)}gUIAKve>dYMSM4ce>{Xs-c?tS2L*5S~=(yfW zqrEHYXO`P@-EP6XC|Fy^%$}Q7kmJ{8m?BBf&Jft-cis8Nx&-C@J=is6!4xKbw|9|A zq)lZJnnC|aVZW~QKq;*^r1e1jit>qSIms+b1q9(MlA$2%wdT;CBJyu4KX}A0={m0N zDUJXBHw+vW?yHJL;pm(#TC4ozt%5rB$KFb#^js1Io{k`@bG!z4_V%1yKF9K!hWe`4 zrF-{B=V0DyWzMj4Iy4?4v^)Ij$W2xs#t}?iPaA`_Kn)r$$&=@k3Y-7X zCS;qjp}T=?#n^Rn&SXFF{){sdiZXUVyJJ^KVJfC`L`rkBoh~yNs;(1f0B_L{&pZVF zjN+BgT_=-Qz@pmq%E)a&bd8vVEOP(2Jjk5dv2IQWz>8-ZQ*QOq5-++w|He9zEyKV) znE_Mdg7(FZvP+yp=NEMLn71z2%59N0Yo}ZeEEZ8ct{b@ zfeFh5yy8c9i(D=VsH6DB{qO+^Rod$2o%un2fpaJ~Jo-MF+8g&Ke9M#tHYsOd>$}sP zOEn0{!m|APp^@F4z!ZDSS}19j6~#4QBAhaTVy4W#q<`=6>B(=!%Hyh_>X^Vff@k~j zymg4e2LszhE&x2{ef9|M4F7W5mmRsOxOnCsmWc*Urthb-)J`2g9EB5R>dRBhqde!) z>qC*Fgro)bP)|BBkrjBpV3Q&Rz3Z z23wPfa?@v|Yx<3h8a3YWB^wS4BzEgcqq&cY9TJ}`dNONI0ais%_< z(ar3*q&3@324Ux-V5y_Vzn*gFhFm81HhC!^n_h!2nY;iO(AK#3)0lN)(0405cfkL zMIV2=+nIJY5%A#N*M34InlV2|0-v8wES=I5G4WI{%SC^8{3TVg2fc6%D8f0O486et z@d0au@azRv=@8eQtsYr-j(h2+N}-I%A;%_0J5&XEfbU>5LH**DLPf=Y=c$Fv->n#d-}?-z#UN`=x1+Thl^b%x(heKdK!+Zc zWAuI9}QPnC#89KD_| z%P_)Ez~|p!m5Q{7oNJUyc}E&b>%w2eNgi^V11`-S3!xooi_=?U2p6_jB8Q#E+-dvP z0nZPn1^g^0z60#crgcHx8sHPNF<($1+-6P7w?-M4cur&$AY~R$fm?#Kba#XB81cX^ zrCcR39teI;IE!UBp!Vfp5SY&WIDZ5J{Yp2IKv7S968-Y}*2=J@+f_gfXarA+zj6Ju z=rs}#fDsq{aH`Y(LFYdOM8PwADG~l#>O&^w&&}l6?rLyrUqjH7a#=fc3YPs2(*p)f z*vt@5BWBj%fX>!UO)9Tosp^`;q~0A zWSiu=LIdN@AEPr{lMws#Qu{l)sS-J$Vo;54jEqezh$NOr5HKpw?<~JGb21!m?hDe^ zXjTwnlo-W~=SN z_amh~f2MvBtOEza2T)h(ft8!2oE1T5`Qjq)n#qB0I*lw-4m*X;I#=B-kc2<4^`&Ne z<6UYVn|o;QN9O(^8yNb)rlI+Rrx6AUPm~to2u<1iW>p=UrO>ZgYhQh+#OUQ_agtXi z>?U+~5_z*YF(ic${&SPd72x6iNLlGa?qU3n&m_xYjo$H_!9H&k^qwG4$mp}1RxR{S z>#`}7SG{jSi=l08!I>fYT2eXAWtaPzTyDeNj8Xg3{d*zP?$qHYh zBf9$y);W4dZ9D4$pc!XM2&6M>_{y2182e5fy;b;X>&4Z}*_R;v=RD==Zd_^9%b$#g zvUJDKo}XTJwGd-ywEqGFQbbAK+>Ymdpr7U4R#w`r%>AaMBud7T>Fg=fl<$9D@!q7@ znzR`0>BjMPmp<{$#ert3ET*su`u43)dV5N)o>uqeMX*OMpXrd--<{=O31tqQ01_eU9h_L_(M z)|gD8Zy+HSP`~$35i9zW(98?5L^km(+pqX@&(qn~;hQTcHssM5S zG1aA@1oopxq(a1S3qx}i_1-3{j+QRBhc-y5V`$^fnGUe=9)s2N5b2!gX}kn4!0gT1 z+phQ;oz2oPXYRgVECF1VYH!0iMf^a?7A!PY|GJ1r8~L}tcR?1Ji)yWB&^DI+a&R&Y zL#zAia;guh_DgpUa@{nfWrzY*U1f$;I;C0EeKp1DU>*+ruOVRXnjHJV7!``T{K0ay z&nx1=H3qviJ`Qq|EbJbC=E@tZwUt@86n0`dQ-<^Gw|7KeSs^?iZn}ug?O?l8CxHf$ zhj}It44IB^)69rmkKt8>=86v89V5{(zeA{|y%dhjOnvJHOBVAXZZzGCABI zy5{8e9i|pr2#7gXutUy6kLpUw49p3$<;RAE90J4XcZN$QrFD&ww{RdINl9>it%iMY#wI;^El(_7TS+*S#qXm|0j4AQoLR4Jxp2Ip?Fi-L4iFk2s*N z6$qk8zgh=Yb{EX0)idPG(lMhHKS5H&$RD3{Kl8CYs>p;34Wcf}?i*syGw6f6>o4Up zg3ADRR{rYm^$UYAga*dG?Z%i)?+TM+2gabfK}TWT({?elLTvnN-Vv+^mtO&MI8Q+# zYNE=@x7j#Y?Tr*_10VHVdCnMWyINX~X>_Cb_e=K2)#_vD2a5mTfxe`lS^kz|g~Vx$ z)3;?+N2NE;`sGKBa(ZPm6#6+!TY% z;Xd-1=d8^z?FZ8gQc`dr9`rW^&GJiR)u&A%<{QV~sBkN_J=oILG7#4F%_g5iC(k-kfrKwx)j>9^u1=lihldr1MSWZjif$%fP}Q-M%@L zLefw+Yhnqw(28nAXHi@p{phYto@cusb?~bKEXo#GGiVZ3PZm8hBnO+c9=OBUF^J<4 zwE$hsnuIX+p$3#(_aDx={4%*-a}PWjmP7YG%A2Wf!np(Y|t{ww8HrBg*wi-4f{>XpK9xy zu38Sa8p<+7n)}dOSl8FA5!&m#z3zbx(eQf6O>3j;N0DnV?4h_P8`_P)A^l#qyPcPx& zN%u7+Dtvy1L2z#SSH+_T=q%NUJ&I0Ww%|>)%*>3d+yQ4Drmrn%C1L5i_MxrAFQV#U=ppK%XO}@xruVf`s^?uPo znct7e@`irGf~rJ2wnBmDow~6oQ*cuQku6C9CMV5cq(v#;Z(GHOS?u-mH4!ut2Rfkt z)4N3r4eZW`gewI?HRShJ zN8RHlJ9&kVuHKF(=El4*p5g+$hR{bhnt*h`Uz#RNb@_^tm&Cmi^_d=Rpp|PsFm0-6 zCxzaBC6gj6<8*SA5^Ib-TYbcT@lqqO2$enPiW{#ZOCd%MxKNsXYoVY%XqFb-O! zt65z(p06LV2$5%hx zuFoW_KKjBUh}7b!mU=Vo87jCb<0P|dr zd3Arl0=&@*iFAs0DQA2ONA8vwEP8VhG#Gn&nwsBaY;e|GXq-Mkr|NlZyEUn=6W}qtDA>+WOT5vSq0INg;bA;b5QdbBF8stFB<4=SH(&!8^}uJlZ1h0IkxLj#J+K{ z_2+0De3_+5h?X;*_sCM@$X|J}?@%o5{1NZAX%NT}?YH2~*fb!(6#13xy8phb&Xe1g zv8T7Dt=yG&B^Lk0^&XIHK0mX)Db5_q>5v9{Dq@!?(KXwKL+C=HlfG3>3F#bwa(a(7 z%Rt53KU#|k?ak$m{XHCKpWWMoSl@prL{}d8b$$W_5TPBoAE0UY>7Yh1Z)LuZ zp~#Y27may!JfU9VAEuii-@&U|`@DSWr*x_fw)-rfHj^<8Ljse!bfN#PVnfa!8>ToW z++oB*dGEYhvfhE+1C&!MJNHJCb-mBr<`tv=WXYCVYi{1IgrNfqUae1al8`^QEiu3L zon+Dbm%7KQ-FWX5bmM&>?(Xh!=X^}nMfpt-+*y_Hp=h5DBL*v8y_E^6MZ=rgHaP#w z1+tRtpDImskMpAZ`FyMohUC^=<>!}fNGl+?yq3rv#Mnbx|9U{#Hk7yAji{BMZV+CMOV^;`w%7W7}vmd!# zbi|X%7gWb(V#oI;<^w13Mhv5b*&0M@o&J&1OjL&Ca(r;lUrY{{sdTef!1x?!HaFW^ zQh2+JACc^`Hy$LQwP^@?%vWn!v=0=1=_@jPlRVQn_W0d{d)k-y=pyKA;?x`TLzv@O zzKpm@gT(W5RZ1<$x^oBDnQ+eCS_L<7R0EUFM;tZoJA&(ye6liX?7S|iVpCCt8c1uY z4eQlb)#oZM$dh!OugT#gn?g74+n%Y$CVc~BoXb;hf0LL-jE9M*7>bJj??D5 znH2|pyI~dMpE~V3T%U9NCl|ORV`up6&hJs%{%||X*pQlORL`)6E=7U(8bcN8e5+lK z9r`L=5nu1isHlURW7B5$+<}uwua~)Bbk(@^w2M9S7;PA7* z&v(|I1h+iHDKNm9M+UUw*&{J`mebUsr9HVAgC3<9oXeH;7ab3RttKvRkVfTRC zx11K;KSyay+^hQ&v9C?J^rveY$qV#XI4R{FcI-thiDIAcq`_#;Z@YF}-m}E3dgQKK zYrFHJly~>`*KE*y)(#Sdtu+7jlg08>)-f;4Ray3KC&`~(88PSi*RiXd+-n)#J`w$m zzj>Z*i==9hf=Xd!YlWX+<~I)NCXOYCrZ&HDn#8Gb+~x6uD=?_=lyMw$6E;8L#*sab zQ|WnhGcxTfwW?H>>xJk>K$)VyrygPR*8%AdHls^^YlBjy)a&=UdJ|}~GNr!y!482Y zMh!9WfiXF%5;icbtH~*xsGL;%QOK?^7#rwHTBXeR@hEc=Teb zz3RfKv!M;Zj_GXUBeMXy){UGE(@pj_;?n2*v&egCS~pw=kK;Ythrt}sxi=e^TjUGQ zHF6#=*5nq^R@X_4=xG+Pn-=<;y-C}ow#O_>GAXgfbP>Bs9$5O~Cg7XqTP?9oDH3#Q zGq&sY$pK|v<$V)EVOQG%Yl)j@vjd)bjS8tPt%t3~?c0AS%XC_KB27T3g~Kxu32FGj z%kN$p_B~F+e=j!O)geXk$JmGFgR<4bE5Xk04E3ME!v>klhIP9=W$l8bhR2Q-{4L2NU(wq(+77 zJU^}bhrmEN2%p?;?b-Jgg?zmIw0k9Lq1|Rpx7KN?s}Da5!b@)|>uaVn)a5Wuv(Hc) z9O>*TPf02HDJ!|BXYpqjeaZ(iCm@!F&17QEVM{)#Y zda^{NCd@Qd_@CK9w#aNFeB3h|1@Cf%`y?emj%V@G(sv`t`?ak8lxESuqbbdcY9NrB zj2yVQu~`SAc9*QFm#v$wTjKm@%YXrM1antoOP?Z-U1Bq3_ags^a8p~xqIZC$>;AQA zq~?Rn+h09yZ<&a$>=UuL{e7d5t5ENp{M~$OzfTKs$5j56Ia*;Ix_O&)?cPl9HGXY* zaDBb;yQ9S-=-Hq`+r;ASd*Fa&t2M<@{yvvPuwSyvNd_@|=r;sPkJ)9gTaj8D+I*&L zg9&mGL^|o8hYr!5^^FeRMOPEDAP5RZ=fJ8Z6zayvWpMtP0ad8(mCg4|%x#m^b09`(Xz$8`c zAFLsQ&YH=VPcX(y9FcM#ExmLxWsTTmk zUU3B>U*iqz{S_@$~J`uD>I?keRtc%{x%Zsvx+M#Y8FdQJ3! zC|zQuo~iaf2xHGSpENVF(rZW56a=aLSn39orHiWBXssvm^z?3<^HH-}Z9mS4CIls9 zK>kt8Uj?@O7AsyQX=2|&Rg65zNVf>v`@P`h%zzi#-F$tbWaQ9tX~9KiDOFS~XZ3Oi zxb1gIeA!HreAs{q9S>LXrMSaMjG!j>r!YN@$qGLSd)|?}kKuj&aej^5d&bX)XoH=n zHuG&oXH0{>t(cPsZz`g~o7v(eN)O%>A70!E5ur99)|*l!iQ0|`M2PM#wtBqNX|OIDcai_@D8vO^yB4|-Y(y|QGFsuU7;`=^83GIyFi53 z9N!#w-h$xDC4H?DA(%sv*IhOPnj5)DZiIbnmKuvDwUU<-fX@^p$Ef_7pBQNsr}-x|ACfQ^*R zNfwW6thZG3yg~SEqpPZrgwu!4bB?}O+=WE4(0_43i1>5iM>-sv3#aesYO3dmaA*EBg5VI6Cie zw*R+_+q3p;jZm|-iq;ksRn+=wYeuwYYwsDeXsZ>Q)-I|o5@PSzdsGoy#0X*&dp!9) z|L4ke<&)$+&VA17{8xB%*Duj|Y=T%Ii1wbZmDQ_K2=Bg-a@U|5PESzgvErqc+nQHF zcRL3!Rw$sQKP#W0H+fX0DtkYytB`Ch7w?NiN>4}wDQV(n|7(K9LA_?c4r!>19Ir8WB)zDhH8#dSRK72rKd;OFc^8NoP#6h*Ha)8{S1FBp+gfv|ewLlrul!tXJ{=`I zFfAn7-kd?M61M-rmiEGpJhCVPM27wFoL4V-KZ=BzQs@ri@?N<&fEA!(6L@E)LmasC zcJAl2d=C<&XeV|;&*xq;%_H3+L^sYr$OsYNQKsFAp?V@7NIAB-VJq8On9WE?6-csL zw+5=8ScXqLNaG{mH^|(par6r>C-XF-wUI z9y9lQzF#+g1cK7Fo|n)gNG#z0&dQWUK-RS$UYbZ(|5J^G*37SHoc~m$^nR`Xu#tbe z-z@}Rl}*ZQ zf1XtVdr05}l2b_9S?y>$Z2aJEGLGWh!4R>YGiX(8uc71voU;$eGv_jVX@$yy!;PdK z=Iz(Gpg%>1I`#p_EdaU{&QSYywTfk({>CyTy@&IZt4~0U3aC#E81H#T$6DT$?*`Jk zp||^UdQdaox%Wo*x;XI!+efhB4oS0sGh5eU=r;X$81ZeM6uF*fM(_gcMIz+{+ZE-pbzL{#6*p zjNu9Ufs|s$YbN;j#NSbCvgnw9?cTiLOd$4QqsbH*?s;ME+DC1VFQEKpAorhVG?RyR z!1;|P?rwF7dyD;zqxNW4=ofQ}*I5Z&?(+<*t*4{S_VqGwI!I&iw#mPCN&I668*CLNo4XG`!mw8hkBB|8f+67wbj_e`cE55V``6v4mC4M(L;Y z;u(rI;W)_=-0okWyqIYoXBq$ekn$D3mV$(@BpECeZFC^(FK))kL|P`x@Q@O1PJLkc-JaT zwl2hu2gvyh(sFQ*tjX4Mk~p2RoR@$5hs|I^IT99d!X|b0VZJwRaZ$xT@zJA73tNN% z3s8y(1|R_sInr9KO~t&-l&IjZV+O?sXs<*$P5#KDQ>zj7_YPn62V- z^qxfV33i3Q5vNj(GS{GWj9&VX)k2hcU8J*#I47f_lWP^Hs z8(php0X=1X^FUd^Yd+k~z|RA|g{1R0uJ!X*7t^y5Jq}B+L>;zSSw9TXKh@mkt&JkB_&uC+_Kqe8#k^V#Bxvmmp&r}$o*zpE#Er_B8mCI$)JX#>vp-u&)g zI_*@_@2KR4ltHx$)Ln>HGF&EE$lLgl1m+!XBa{G|-uvMC#)I;dg)uhXM6c!_%a{KK zdLgpD2T3i~mA4dnBk~YAlG`@sNYx z?NOkzA5Eq+nJRX*Bso7LI*IZrPbu!Ke%_bSjcozvuvB34FD|&axl)38BkF>H7BhR- zJSeC~%79A1h9NxC(6L-or^2bf`h~#~?%$Rg+sOPja|7vtoq>Njt>y-SFqYIR-X7dH|yv+ zdZ)zR)FvqEd_!sXM_m$Mpc}X9B`e%?yBz-A z?Idqk5*E7y&iL@ z^(Sr;N1>I$vtw>!b4L`0%cGq+M%MLL$Y;CAxutaHiJ~x~) zp+ev0x*~dZYC!usmdnFh)>{L(TUz_n!{PSj{I+7n=TU3=GXkn3k=ON8;gTTjLJ6M; zjV;>pfnjKR%bmv|wUcCas8I;w&W}9_#s0oixVPV(kMW=~60cp;y@01jP#e(<}qiMFMD9DLqq)Cvo+CjR`y3h-Pb z!KgJJ-JJ0h8ZSssK20fkPVrwd~fraZYqK{fFT|@{2^P zxFcPKP-TZ^b^pjt_eKqQ0m9+g@1K7`RvSe?n(Rb-UDyS!jzbBBj!^~)3g zvV;4BR-ASzo5D`V3h%r(Bpe+Z3cIbl-*&%|QntK;9n9BLv`rDn9|a;52D{WxQ;!S- zvDfGQ;z7SS3a#_gSwGUgV2)YHdbF4c8T&d(#ONpocnOO?@=gfmDQ=p7gCdXyi9L3f-19{ZOXn$V=QUKfGpHzPE>ZcSV|JhePhLyB;Pwi(CT!j{_q0`V zifyZcUF~+)NYnE0l+IF$L7#EB=uT-6*s4l3mmS zU7E6g_dBJcF6VkN^QSkGynq!YV~5;52Hhw~ck%++Bohi%PJyipMQ&f0zghwrDc0J& z-^LwHHsPw^Gqax}SmsApV);h+7jIP~-cG7G@&K4PLcA-o1OvCfCYxtr2uMHiyzbz( zMRdLv|2=X&X69zohJU^7+n6)h)8USuc&VUL-_UvOfrF(k(-x{cj9!{UQoB^&Dep(#xj`8i`npGyINJv61sNUXh* zBrVj(A_6j%?z2$hg$Q~ugTK34l|@vxqx`Q_geq%h4d<75TEmoC z&2P~}6Sn8;u`r6?Ke$}%(EzaY?3}$|TzQT7dhmtcLbQ0%jPD&G!slAflNX06Qm#Ei zvV#**6a&whY3zMg$vWnUDuKlrWi^h&?E;f`+k~l-A5dT1>`?N<|FwpVZXrW>Hu-w# zuu*kd?Hc0VFJaxHa~AsyL#=kkZgyq!PoYgannBP}g9J{Sv6aTRghD7JJivMh^69Co z?%1zfFz19bch{KmggweB8<*_&mqHSxuo=dbw` zW+)-+D;Is`q^2lk*PbL3C&1~XeG1QvNXg~iMz>Mx?g}zj_U4Y1MBI@uQJGeVm_()i<3ZV2OQ zM62vr@W9P*LrbK5&T!!5y8mekRN-PfEcn~shTx&Uqon1)H;Z z0Q4HkX=J134pSIVUvA+2BbIHa#pn1F+GYt=nO}IHr0;OOE`jEI$xR>M z%7^RcEI5)Ts#%HsCz?q1liIL)D8Q#SR#)T?^R54 z(n=Yzm7l%Yd%6F>r+*;^b01Z6ZZ*F>xPy40(dT7zsxzG>`U`Q7eL~T%=X{M3{U|kwUoN^i2};g|}0F_Vr4J>_5*?iDuZc47ds|f;IUH zQP04rMY4>Zo%ij|r{@-sYwLEh@BhWDs{OOZ*YHS~kBiCcGxv0xH={CCK!Gto0{|;i z-Zi*-8z>STjD10=*oS7xvuDY>KJlqhqcLoe*eretTHQt2qZXjdWKOLc>Pl$t<4@dL zT*Ep$#Bl6Ruk?4`6S}rsBGe_$9#h-B*d5D zU%0T=pJDXVX{G9my6#OKV0>OR7>VRn%m=Ti4ob++neYKRD1J!8OGtw??FdwB1PCncQfmmUK5zK>m(1aY{1)m z-?zdCh;v2O_)e*9auv1;P6;v;GdWy;9@WA`s2G2BSpHc-UD4Cm7E#Fep(V|#kK^4W zDqcC-Jxa0}=Tk-u9QYxo5m9<&?)Y+P5seNFT+q?);7_ zU#+^FCmoIVLsD&jp#92(O`Uej!$J8v6NucboCTJDVW)-eXtep%tt9WEgVD{x=nhYc z-8TuJY*Orx6NZ>2Qvl#{btS4OLWY;8LUT;7r_M)^>L5)wIVJ_qq)iqY`h71yqamQY zKlSO*Xlxnw9NKz>d3)r=vmw;;rJ3F#_wYx&q|J!h?TrbLGEbNsiMg3a$%Z*urGl_IruZ{p~6y(>(UF5RTkCFCl4WACJ7HV8_DUv@vL`A5Ph1A9D*8Vl}-VlcGcQ^HM#Vcw!8IVko6;KkT z$g)=a*y+Iw7Eu0_R^K60CwOSl^R_H|*2)Q6fh|c^=f6+`lQs@fE@b9M!@$&zA(7K} zi7Xt~kKAKznw;2>!VIJl&NvSm6*jjcj#@Frw1`G6vWKar-MsFk-i6T<@t{)pLVQ$ z)`vgvTG?9rET*5svUaiPdE`B}6CfF|bd8nQ8dm8O{hnC;Es#XEy7|6?~kJ1nHiwE| zy&~m(P)hutDk29^e6m`)Ime%eC~cp4-CuI-lZ_RxVG_T_v+{gwoju-LDT3!6;#4A-C!;1Yt_iMlOJ{^w}fi zCbmpY){ziXN|T(K+socmhxmilI5gZYTTV_M`}+re71*lv5^NpR4G1}v&ausHc+U8o zy`net0T9KJ$8X_Wdp||ID?}@QNWLZ-bTp2)b`(9s>7*e`X{mnkojKwze8fZmk-=w7 z$Q35-cUenTf&ZN!ho8(~#WTP!rv?X&Br^^;3&?J9ddZ$Rw*YaYpxNs|($OH#pefQ( z&~C_uY(`Vw@#=G4_r|p;Z#s8NSmV!$p!rvW+8p4Q;C297>ADVJEmz50l)?=DRXa3c8dF3Rg2ICvD%_zNq zkdO80W>m6+Zf`5*p2RRYivJc zi4*VBktv?ddNZG7PTH!ldAD&_)=)(##XMzh=Q}!!dkt->e?0Sc8P6jw*QCraryF%8 zL%DT-;C{1YqnKK2=UBsT!1R3;?XwA6_WtKCltWQalF$B6664gTACU>pKFEj7ei>Id zhzi>>M*?Zr<%Zft`ZTC`e*4++#t?zi=xWW7A16yR&*rNI;O@SJ1gMtjg%@NmyV5Q#B|i z2kcHJVZm8XmX`+vJCJTuO?2f`Kz5ibiWyeHs6@P)w%(~t#anu}G5Ry|B;VmnrWGloj~Fw}{~8ZI{*}o! zPVAQ-srlOJn(R&^5dsyT*2+AiK#+Xo`xO_mD>Aa8M}}D{`s4mflvJym3}EgVsv5wl zn?A6S8AIO12Y+4g7>kGQMsJZC0P`aDQ`>89clZoHMWFqJE=iWdnxv#*@n3veEBYlR z!{;>qmkBP@;0(d1G*7wFmYyFs4u{9NtkI*6@7{kddba{WNq)p4!sy#$`*Nqs_HkGv z=z6uZwp+I(H8&~xQE{C}AjEY>(o^z=Wu(I}OFQr6_c{4Jd41j=uuFC%A@AO}XmT7T z;o#B=@<4}1$s0mE4NnE254M!BYpMEjrw-OmhGCj-$F3*{g_p1REcSzHQ_NY|z@y2U#x3Zm-V`5&y;A%V_Td3cFB^**5x}DP(hDGVi`!9XR{;7%6Y~ zF>n!W-Q|0UhAZry(%<<+BA={VOyDUyQTACQlVdj?=NRz#AIF%1a8HPj5<$ZNT#brADQIzE|xkhgH z298+k%t<8jLb>&R2QjxTI`>DNRpf~KR9;8@VDy{ust6L#;uWiKiGZClo0F0a@6B8w z2@S#&4zM@DPnB)8bws7t&qV>GE4l~{;8z%iy6{iRCJ;bIn9!MveR2TH>I^STcL!Cv%eom2E<=_?P-iT zSq$@TFp(l^4b|7a+vv49zkvqhF|p+}EAr0u{N(s=rfWQ&elE_FRiOFS|MuH0Dk-kE zJLx2M>GB@a?>oPVMs zJ>2?U@3^Ry+Kj$Kd8pJX4CFqJlHv6Q-UARVJ(OR%Z`zo5gh3b_MIfcD@|3rkt54ZJ z%%FtRkbpFCvd`DuMhg&&qy@68IDE(U_=AJa@O7)ppoNMlA~1F&c-vxd#wmvjO85SU zF{X#jK~=mTIf=62P+xC}A@U{$ZVM&~T6-=F4Ju-@IX;oNDC}G+(`@9!s^)NtH!5MC zP3YjRpe0hl{^c=j}i%tg<;vrwSb_vNxaqjszr>Q0SiWknaMHDhUiD zMM8|FJW?UipZ<_OYUTr)c@-zZ>#ZE*l_TFaB!FA*rh9%j+x>HffINNvg>%8yJ^Ot- ziycf4al@3Kp%TZEqVLSSh%hLtx;+DNBzNA`VAJ523|mw1s@fjA&k~%9>!`XYKoLoD zjYXw5G=7}we%0PedHvSvx{hON$W+ZoIm}=rQlmXz>db(H12~n7VtedFWjS)RNK~9a z?H~2sRf6ghZ5w(Ybh#b*r1SbU4ByaSb#c7pcXgpyT#Hs6>%?B<=Q(NaUuXBYFgN4q z7E!7iU1 zDdg<{O=n4zoS06OaZ1!IFL2gCorChqDFc#26&|vUeA2cu(v)7Z5O8~Ve3{pvaukUb zHwqq4$>8#6b!b5B6uo!T1fI_OWb~@6R}Ri#vzxL5ZnOuxGg1Q&>JR%b1}=6e7d41f zKG)+fmHOGoS2Bf(evpcj%zMw9P8BIeF$f_&?Puv<#u*JiijYAXJB%AD5i#XyY2dlt)?rGn zi-9MLTPG`QyoQa@=R7;|ITxP%bt`->bYottqb0%pNF2je5ra}(l1o@NY2yqckNNZL zXsn}I6Q+v3x>j-Ydhs0#>&RY{eW;LW!eQTV;AB7_3LC#Q)nGb!MgMeSQl8&kp~2ec z$B0)R`~Vl9Ka4`_DXX}Txkm*?6>oJ!Zd(4$*NXJpNbg;0oWEQxkvLV^d@u+KPFq;(W+sKr4Y)a+?#->q_M4g+4APzoei0EqQONts)rljI7UPm2NF+$ReNP1@ zNUP$G&iTOQ5f&QCMY20S2>-J1;YhOHSrI#bl)@SLIP$=v2 zg^M>rJL=9kr!}fq%u*K8+SVIPR{kr{D>4PB&v-~P3yPTp%OtGLx($`Qyi> z3-nSTHnHJ$h-00OAcYv4P|~!tGh|j}j${Fq3lt6rWhfvH=e2c?agWR;Mo(6(L;A|I z+V<7#jARYoFBr$@)c&<*;cNoGs)!JBO2t_3S&xft-M>HLCh3xt2=sKs(Q*P!rpQYq zjVBrMFFPLC$gz*VI*CD<)Z2uwb;zH+F6j#s=WC%fbH!LDCN6EYaj7^GYabQ+bW^I4 zq|LHV?dd<-TzT%0vese;Jo)unP#fbi?0t=NtYmSAJSI9%2!&CiLcPUzvW3VMUt6XmxK@dUlT>gP_J7xn{&2iZ^nx}1eCG$(;&Lp-F*+V z!R|IB6Fpk&Q4+@5TJNPi zVc0rzN=QYIhJR~@4b4%gMiHT`&8A{g98^U^w`GbzRAJ(u)VF-@f}lKymgvN~lxk)LTv$sqnzXIq#U4jY8EadNc2)I;21u}FHURGWLlRdQ*%{^zg*?F=2H zlM~Ut!ZIda3M?tv-yxL2rZw*Aur0#}?(-0?NHJ!HR*fh*1-;N^mTW!4ya72#e94q!;>mD^FK^1j;(24MfjCkcO{Qj@*{7>*N#INPw1$yQ4(-pjKOv! z;#!%|teqM={bqx^@%&?FUBEp3qT=e*J6}UQy`S8yO1bgOBKl#Kn{-`#w>^aW&H*Yk~(vxa7*ZtcAn zU9Vcb#n2Cab3t&S_;R;ew20Npio%re(X^k3=HbB3E>+jPF_sv%zwRlMV21gy7nFo! zR4<3oCYEpF2;W$faOUn}?QXX(?de{%vYgc$b=9@UrR;f6KC)+Uw7`z~%jpa(YE?<+ z`;erjE_+wxw5~BCVmO&}N7Q-oKSUvNgamPmbDli#d%EuzjSdcJ$Otu!BwOBQuBSd0 zqzawIn%)*?BvV2mr=e_t z|9D=MiJQ^@nJ8b>&kz9A%>q*N0#aYX;@UYL*tc`kTTbOGgiFrh-$=V5jO%CK!fof6 zfN8iJP1Tv<-m6$85PXgMiLPzyM*-twME_aA;CgFx_>n0OgeH9$r_hln;{`Hwz^*7v zLVfyx+rpk<<1yd%JXKP7Wb-7zy<5s#?i?5!!4cfYfA>Tn6kj9717KgpW-h1Sh1PxJ z&Ge!JPF>DF_vGr2^rS1^6Hg`d9Fv_Ai_CK4K`~T6+~nT?Lg@-dYRqhStZr=$m?b|i zJ>k=>KgKYRNwx+zZ2u6;I2vtJ2y7kiE2QBSvxXQnNc~Sm_P+!jC{v@BJO{lmc>*Mi znpbiIhmZ*$c&(g!m&>X~LA)VTGY9p{($Jt6a|WC!EA@TsDQnS@!VC+=X$);%H6aI$ zAx9j=sY?$@PndNSEPQw!9J+mg5TaIHG{m?=2S5KUzf;Y*=wT zVu9?9f^l@<-mgc#Has5LV4_4R*xXn*;i*N{oAxRhb82CVv5`+!SXXo4);Yd!T>Q~D zn7>W%^LLnFRj;N`vByd9c%r=fQ!)9H^bXSR`?aux_Y1W<_1W_*OP}UnJaHTH7NE2eF@HO1m)GB&f?=9v8^Np1pX@T56f|s4}n;O=-LzgU*CD+uU_N}^$ zl@ePK`kC{JyCwcH+hU$7dNsPL%rW@Cngq7TutFlV#M{65t_aXa9YPv5f}yZlUYUIi zx|sxe&nr**D3p+;uavJi^MqrZ>T?R`5Sz*46@f0&E&!K5Q`+i3@^4T1n({wrK)Dhfj_@EEWATH`A4={=!5h0$gpG&$ z-|>iM!Z%`lG778s;;uz^k4lT|)dwGUW(`DzS_eooqiy#RNb-~E?^_sCA{Le7xkXIy zPn4Or$hVyRLG$(bG4Y6lhO)!0HUKU{Bcu5(&&zwZHoGb0!jmT1!bL`1niW%ABDHfe zne(zE(ko;VFPk_y6ndxb|BB#|J4$NPydgEKXhL$dcukX`LKt2A<|Pd;_{X?6t!ZqY zWGb3D1ityHqb!@%|E+Y#ipZ__GIn_F(?WsP8%LIt8hO>QIkxGJV{XN~sdRgfkiqqf zK)^%)-6gUro?;b8#}h(_#^KrCQRh012C!cJ8&t)Tk4eE|-7Te190|)IXQn)e=w+<@ zXRH^NBn^CnTObSB{F{WLZ*4$^kRMF;FxTsnji{bRA!D#0gthNt@qtVHz93_BNj`y9 z#7=U{fB3l+MrR$gR+A*YUp0Jn_;w9$AsIgZs*<$5kYaZEfMO|;&jiiIT6W(0lVnO` zpt&%yz0u$Y@_c3RHatR^-utT0s|TNx=_u_Q`(9Sr%j5tt_$u!WdrDn?JuDCqtSj?a zC&7?)mOiSD=|LbxN&wpryBJ(6R}Pls!~85Wmc!KV(*H}LwdnaD$^DCwO-H?erMsa- zfxjcyff#P!BZt!nn}$i4y?SH)KA}YV_*cPYol>i&$?_r9RW;-D5^E01NV(JLt70lIlJEI>n`yVh$cfK{?28b=LRsQC-Yf+~a` z$j?T&91*XcvRzn5iZD4_=L=DSdh3K}D{;oj?t#lA9K>GyjGCO#tjJXFUy?NEP( zDAfaaeB>c-JwWPzz3?a9N#a(y_zSh*1tqias_yq`K>nDcz*A3mMDvesdAkO6T;!qr z3gP~D?R@}oz04Wpll`?9R1l8O7Q9WYdx?c%mqcG+oSRKFpK}&o^DV4Y_u8R>*Se7d z!eR`@HiT)z*y|4-y2qrPKaPC=_)+D}_SdYm(}|es`-1MI9g=R0yn?huJhh&tGYmcX zeYjPqQJfPq04E)!%({~4MV8Os+mGBM`8D#sl+;EE3HK@YHS~*^^&63%{tjm+n&~pR z5TL9dfXjKg3m`AwZp2%Nds_--Ny09Ww4uR&;!BVn-{;uT)zf+$BH>tsRD6BlxnDRf zBO6(xl3LLqJ8}7WY5AhNdt2XyWr3?~AlKdL`w=no3a-b6=L#xllF5D*;~x>?ZIH|w zru^_tZgV?p)RVsrFJZayf#<)A=r$K)2i+NLYF|%jkG0OuA`e1`Ru7o$N@lW0Zw`+t z*-w6w5|VGH=angpkC)Q5>Iq7+KV9Qqrg&E!-)ty-wsjlx?^CwgWO6TTUii)7FCEoJ zGF)$$2!U+v&x$Ec5YkYx8(-g~O+azUSr3NAoR#V{KP5U~0ODe~ZU-HdQNwtliCI%sq zbGD!^v;%i#yfd{0w-pVl;J~@LGD>fLm-jdY z(Qd*9!wxL z#LZ4e`x#C&s8{SYQ5gX0Pd;jFEQNZ)1ZfUf#thhRlP`A(3qb`3&$m5Ysy84Eyy9~-^FjgsfIEEmb3F)w%wI{9%cc5<|0!{`XGSg!F`|4stNbt zf@Y947IF5IKx!x5xI$sErmK7L3~_H;4~d2gceEnKyZxyWqUbRf?3mTR6pzD zg&Pi2Yg!Z!4XiwJkJ!$ijZ#K1e1VMdJ$wDY8O=*G%WOSbD~-#?-fP)X8)24=Vy~BCdzglFS&NL`(2Dobdg@@OVuJ8u&fcJH6gjWW zk>>oC2;rL7G#pLoz41`O!UB@x;_y#)FCY3|(^K`LqL=pwbn$qv4K}&#pqBg`=Hr+nwTlX3ruer4iDBMf;bNrQ z77Y9`cFuyYqY%t<_Q|v7_vgq}+Lf%x+W(z*@=nM^H1MT9yI$0OrVdJnI8?I$`0$rn zg_f?2r@>`7-9a*jPF_l+-A^8WyMm*Vr zBr3vIQo_|D?c3X)DMr8T;RHYY85*zel5M#%&DrU1mlIw8Tdo*KdO?5O4ul|2&$vIH zwQkM2MVRp-uZXffMKP1PX%F$LiY9R?jWekDCm6Z}v`Zyil9`3R+LUcuQWR^-m6l&aEbhf zz2tMDG*mSF^5GF`SV7QO7d6N&)?-H>U+UmyCwVG2MDZT{T5a~j9Np)+=BN<&JUjoq z*mAk6zocUg1h?I-#hmR_ZNd!P3Rf8Dg&0gH2(ESh**;e5)r$_mI@&{p!vlnO8pnQy z%EW`KOjiQeIbCXFxRP{*3-oGM`{P5hdn2CXG%e~ha-*bw)~V;Wh|anwY%+Op7!g_UM2>ri$5IH>hYtcE!~H)LpX?*!W!`q zQ$ObMNXsga)FZKeK-=5FO$#OqSsa7W&Q>_r zY7d{AKjNBqTJ1&HnRg|LRVSXtw5Dwp&UGwqJ*UqjId3B1b~*?S3swXKZKZhe-N>`F z^`dM?+Uykaebf!JcLMpy6XOk&<=S8I&bFAlyhy)<`FJY?B+e6DMWX*PKvMMQY9Qu{UJmmrfdJlkuG>R^k%UzfLr1&bK+_pGt&8+o}*v#<-&Ih*~g)Av>vVW=Y1Zyo>BM4Kpmc!IQ0MG zAOr!Dr}XyyDG|WBG#+3L|2F`!9WPCoop@_}tJ4`=HWC2a5`Q|&w*MijI~7ZSlh+@< zbKD2CV}3U3i6-Lin{zy+Y!6xe1E7T+S!!9FxpY)YmRUB3AfC>IZm5MV&*_1;*W$~9 z_;0tOrHG4bNKt4vvugEm5=NjBy^xO)LN9JMEurm9R6i$J&GIsxjQCu6erZ{mChWyI z_9h5ifmdpg@(I`QbA%8p{Y1-6?gVSJroXa*hv+OHK|t3oA;8wIro}hS5imKK3h9%i zmLWG^G+6JH?)>5vdti||di3bK7I8(Edc~ckw*bE}}BgBy_vxXFLO73#WE z9mWe0LqW>sQo~X)+*u%FCiZ9AeW=^?Zych(y({qB>6vg!-0UlN<#g5 z7ryeyQ}=hL0PU22ImnWs=EMYs+iP6Zqui!g)zXlgTnVo)W zdqJfBv&L02EMlxEntRQ>p6>5-HgEBbV(NU{1r}Xw9%Ud;5}qoXduTy<(Nq8kEc zbGy{PI@N0<#oShDA2(%!Jmd{-Fm?G{WgNOwSxSq6=fo6j`x!>B-SMRNGNl#%5ozbr z&F(JErh?Zagj-w>=P2O<4U+VJ%Z#IvvFt2_xwIK6q+Fze2oVAQq>eA8%@QKZm+(I{ zVdh_&!Ejn*%|b#Cp=2cP`1ZW+MwHu$R{<}_NrkQlXY_xds{=d3db$L;Oj&*|hT15u zn~{cLrfV^`u@R(6df2D9qp*hxW^D)c-wMBOIQ{FiNd%};9ga57`cKHkd%On>&3f8k zSLJFnZvE(+N%25H2OwDUEM*g!mR4 znM3B!aR!Ap=l9W*qH)kGtPby!dB4$?!RygL+n^g-8}7gppS-&Hu-*lN?Ex6pPN!G7t8ja!sbnZ?uem)jQXBpzbB8+5C2xUOa&~l&$LJ zYxl1Z-hbJ+3WoL6Lvlj3=f6KIPyyD`1KO6Bw|t-=A|EbS5rSo`-^5)#M*}7zpIam& zwAuco3H8&LYr9WMegsY0KX~^r;^nvHuwIS4u~;6fkUd*UHw|-+*n1n0 z1LOSBPmvXp|J6+V&_|bZ$Ilh~a(n(d@rWGdFasr_^%fs6fT>mJ6A6_>g+_c-2~fV>1efI-s-FF$?(lSQawCb5p1j{ zM5{_IDx_B3l|TZ$k1!BYQ|~fknlTx>qz=|u*7`&`+HjOh^^<|H1O`5CXLwW@PjDVQ z(XHP|9>nOROqH0jMN&ww%Yj^FzcZ9`-<6a z4aM>d8b2qQywzV972meVxlnYs)?FdGN0IJ6;Kle8swz5rUWfgprpbcVT)Nu&1Ot(La3PLunQjmiMpE)sOVtw0~1ybrtMZp z9^Vndw|R5MK4JSR=u`)GVX31LS~IESiRVl+Q@s$qX8e^ibeRwZup3;8MnwB8Zkzro z#1Z-4D1p(v3oZ1x8sDrd2NsU7hqTqZepwnjv|kuJOzmKW`;bsMUe^( z0VvaC)bPZdS+1rDnKu9uXVOUd*vg=`jvc=^o&F#bYf7`l!>`o!~ zo_v7AWZH`@b03y!ROd^Ki=kH0V%3?wQSL&08us0iV64_$tP%c44*J92pDXqa7iBlx zcKF|GCVgQA8U7PGb;A)$Uns4VY5r8fcj>q1BTzi6x_N$I6C0j2+U#;Q4h{<|;`l|B z$9{Y)J4op@@l3Yj!YR1+f39DbpZ-1%k$aRy+MXg>jVKhNl9Y9NU>8sjkr$ZYA zB)XhWW>g70P03Jpm&}`mKe%owAj`h5wmc;wY1DkQyQbTH`YB+ZN0}~^D+;c6XhoA@ zZMkHEo@3zv`EHKfQ?!z;fzdQaY(m+%%VvWAdO4;H$pie8KdCB@@w(7!C%lV$`!(Z1 zEVEkHb|RdyvaxHOyNySWo4}dm9GfTer=NZ`rvJ5pKVnh&mC{z2`(U%7ia(=e?@iowl?VYR1q0%^fcEi9|{g5jZ8d+~qxTE_BqksXh3KYgeMb<7<1$W39JL z?JdGgdXF(FCgS$u&VKEs-V(U`^^za{Xe#F)BFw-&E~v}5mK<--pVQ}RD{Yl=3t`#u zwEGOKZAupY;h&OLVDV}WX>9Y3kx}PD77q09CtnY+k3BW?AN~hv-ZJt2GUN5IZZL&& zlQh~6{C^akcOcaNAIF`&36W%!SyogwM=42GD%pf2*?Zn0qwGy~NZ$~$*WG2E5hr^) z&f&~6j>C=L{r>#?{ds-f@7L$`dOV*`b?r?tFSc#fnd7Mk0ISV9I$*3_PnhA-K8f1; zl&-PNcT{Qn{S8%Yjbm-H&F1Z;Cv(IRiH=K}jRM~-({IPQr6Y*M|B`GNgrqau4DZeq zq=1B`AWS#e>pZOe{ynbGhg~wUFYAlsW{6Qirh_bY>8-gUi$1LepJ}um-0#G@p2-)J zPACnJ{33<+a}N&Fzvj`2IXqlo-c_*<#x)ViYQ4~OEf-?FI79fiNj2$#*yrFg5PcRA z!vTp}2ns%YRRMtxNZIFD2Uc&^>k_s*j`)S(FJHhN3qW9rC*A)g2EEr=0TxIr?ev7> zt<+UxIgDAaQ}(N@&uw%IH1)AhI?Xh7O3e1azo$Z)v`pfv+;JAh-Sh6&VH2fx8bfz_ zrkX#@5ha!N7lV4FYd`)AzYhy5X)~OW;?O-wtNI-#_(61G?16=O{$+J%*qv$pedoSb z&UiDymIlt60^a=gE)I%6L2Z?d4=#L|&KQ4z9uHk0x`8KLI>?kyRFI(u_R3nkFYNACRco91dpmo}l2B__IzY5=#P6&ZgUM8tzARl+ zOb}YeBDJolX$40qzY5uZTz=)}Z4glGSBX*9Y_Ba)ae?rr*=f4%H~fCWU67 zg+#VzO?L2~{r0jLvrT~zB293ls!Apu{!ABU8Wmy0n~U%YlYId#=Jf5FrF=o2GB8(7 zRWgAkTW>*~IZZ0_H^~j-ivnq3Q%V`JIa#`qg7guu(u6J7tXMnCyeNB>1_@?6LMPwj zk_cS1ytVDgWTpIB=BG$Kb}^>Ifp22habyiFS#aC)_E^dry#+@G99xN_)y(6|oPUF{ z8lAmChUh7+L4f}`K%$mLL#}ndp3b(tb$3%ib~sAq@Jrqo?+3|hcBa7z4ZKzW1y%e@ z$+fnw-mL;j=ESBVsSLzar*#m(QH< z4qaPaai>Gu$yXP-oF!s2dNhZG^jT_vhPUkw9@vdS_XM(!jUxW|48Ag!*9ueH3_-J_Ge?6deZRf&X*=kEdm_bi7M1{Gjct@48u;w({$EkQ1tsMcnEZz+y*4_yIpq=i(?Ge>QRfVUbSm4U#>=;t zg)2s5o>C_LGZOl|LA0h`xX)D-jK**gtO(MH9Xyk*{rKnnDu+g^#^$J`Y>NC2^Wfvo zO0WH3ajj~*jOzD0Tk921oJhn6fECq2u;Z#|;e!IVRi>!gvpD-Cg}9zTv7cJ~%>eZE zlUWM4YxTpsb>OyzS5U_vi^Ts+zkMU?`wT={<(%D#l7gA%X=~^48D88eh78a%aycV&dXek0@^5~%qMC+LMfiDiFD~$Ea{0TO zM}xue1#HDj^~mPgS{4Yy=QX!T?FbRYV~Mz~tOt&K(0QJdF1Dt&9y4B}&SX*8L32|V z5$dVu@LFm(w>=(B zJ$RR}cycY_9ruqi1ufV%^@bg72*pRflR#fr1rv=q^%3>`y7WmBczAjrA^p~+RE%}p z!b-@B3t;>HWjg19l*WZZeTGRO&*+z&>%lKMp^;vFQ-@mJUE)`eHnb5*X`d)oS-yn8 zfvR6x|3J;E5OME8^sub6X7H(CpnPrEY4nxG7;_EmA|pXQWXO!BUKG1t*{{qS)Csfv zj^iAls9M3~sv;}l+g_x3O{xKncP4_rUA_-xXu3;l`Eh@y81{daq6C1UWf8 zRie)qr`k6wVcD<-4!+pPM?ycn@_d(O#k;8txl{(W1gFEO)Ps_Tpv7H` zQloLhS;qKp=%Gufzv|)cfu%>-@|j$V201jxtr)jQDS=b0&p#VayU{MRTMml{xgSli zTB$4WKT61k+n)0e2b*hjguS?3Oo{vZx9t2QGA|~3iH^6^U*`sOcv`pv8|0)$Zrb1b zY9-Y_cRDZsGvs&l`kuIV+nLR9-&vt&7iLO0dQa z>E{?{_NyKsuW1KNT`@oZXIK2q_tLQt_Xe)d<0nJs+yY3h@6+S@cXFuF50hUfF?S`O zZ(Ph$C#6JK2y_>CrUkYg3?1@>T;CFF{Ve#rx*kB7wFc%?7+t1}Xeh$I81S z5{1ZXit=}revRUy(oIrjtV6>mSl+nd)5OJ@MM%+3`n7;HaOGj(Sj<^t@59`up}q*~X#cawdQy5;%|pl)!V5Hc2m+&2%hiFb$itJT@w zNBr{Bal!Wf@q9it^JjHTWT1eaO$6yeo_dW-6AomR^0#^9=}*&dtWbaN^UUc7ru%=~ zqD;mJ$TvJ-kl90~M>5w&Y!{G^@9-`Q+|o7|e#R>lb(%E%D(n_$=rX&i=r9fal>y@0 z){Ok>5^g2NV!n7LJABocJdGwSEVmYf_vFaB6bAJjllw8RA<^yHj4EPe*56k|TH9__+Z zWy1@?aX$YZ^TE$go1dxgO6Z!%5We`ZM!jNjQuELZSobR@l<(x|GVl>MTdjazA-~pxWcfvb^Z6z=jK`0N9sJ3ZjV9MWTyR9ASXeeodN_qKk8RP zQS3n?SX*9Iw}Xa9iTy!lV_GFq@s5T8OT&hltv^C2oyagHyJju<%Uo1T%xIGrWuy0~ z%-tX=UoVe?7b2@~(pBnML$joW4M>|G)axE|(%~CICyoeYmk1Oxu#BAr0%jt|!*v9o z?$~on{#9wp!u?gRdvzINN8wzm!V0mk%q`IE?RU7CeM9ZC zY;=kM((NEz)BU7DB$~3E94K6p_wUQ%hFB2P#wh+60LN#e^zeC)wXqqYo|l%yg`) zCf4id^h%_3cAJk}w;^Y8IT=zK7|r3BK#05Q<9Bbrd;4+urc8^wL04_uXWI2McNJQ!*zx`-j(m!Ex;gNQIf&2Nd_KTp_ACu1Elb7-K|Qzs;ws zJ$-JZ%=35gED^0Yy*iYyuIJ0bW^`UKBoL&`6Pc*v)zDx68-?+CX;zqB_-7+-#?ylJ zg>chK_XjJ~-^e_r{cvPr%1x_{t!+=Ii*oyTHRnZV`lpMBw^**Gh)5Z9do6KiS9yj` z9kqt8v{|2@aL7vv5&odpk0ZR=PUlv*J6I_PODXyrS0;jT_hdI1K|TcUP8D}(YvGW)qCagR%zSG z;6VbMeN&UvH0(I4YRVM@mvbrf4=8YKY?3qq6J8UBQgkXAQmE;k9eQO7X)hUB!Q8t! z{a$7J+N3C4L>HnyVjZM$SyDllm)r3Nn=YI3`N!L3Eis1hcwgfgUkcxN*xqjYs4%uw z*~85TU#XS|xM*sq8tbnRo;YWvJ5bX~QeH@|Jv?&M+NCFH4nAD#dCf(q^-5GvvE;WH z^F=dF2Z!aOOc@h~WIo38lr%9G;tFNJ!xH1D7imKkF`g$#M>?FCH~_uwti*n@I*@|5 zmeOLl4@uPO%)46FVS~;J^2V9xgB~=^_(~H#>@C!JT5H4p=nSm=-A^aYq@_D+k9gvxK_Q^Iu`!) z8uL@$$>g;-3h+N>(phG5-2|H=NH_e@PsHD-K#g@BrNIZs)i^oCxVSVyym*TJJ>EeE z*N&(FRmNx>mm_R@z|L#g*~ZRWI??SE>qb(@%WI^l)Z=sZtxIH>9n;5z9%VjuHst*I zysi@xPE!JDePbH^o()EOqOH#}d&T}{D=8K(KeI?kN6))NP_#wBI%^_~a-{%w)N|aV z41U8R0&1w83Ij%(RSOXtg95(}y%!&?EA}Ln_FhGWc&*qo%lWlzC;cXI zhO8mytRV-RUp8&KP3XF0w@c`0u+iBB@#GwLdAaX}mYu2DJk?+Fgc1XaeItmm2iwE0 z!(X`u}q_NU7oo|C~skgqkPw8`(39bvlss*P2lWDaf z15pJ7XHza{SSL~|9j>cWZ(&tk=8tNl`kB&L1QOc(CXHeOOT5X^7Wim}v#iWHQyaK% z(c5Vv2v&WXxBc{<7k70--Xcv$*2lQc?b|8w2r;Q#Db7Y6K?$ZWF2b#dKoO0+yTwud zYoDWTN;0cjz>=v00N4*=MUP;1v7G_L*X@4iAJqIWIwd(s=*OM(79_3SpTsSdfVIqX zB?5Xte8m;^ix#pSuj_zV4xd7d&|KgqaRkY-GImIIt?m=y>XHI)us9mak_q2jp-Pg! zZe}e9w0^Y=|EX@kt6>`gL)5=q&>@sB?ma8KUe?y3t={Y1?{@Bhm`!f2J*3TDHch2h z3!x5C+}&c-Qc(oosZx4edlnQQq;qHe){{vVn>2YvfA<%Su;dq4+`oOKcfP@Y0@y6v zhquE&j-{ZliEo9%5XsuXw4p2fobB}C6q5ll-@CELT&<#ykuUiR9u%DGm&w)@b$*=| zCdEoJxup=ESq5)ex#Cvsyk!KEoB+_R!#dQyneg+4>4EH0%`Mz(!A(*&(|O-ni!yK>H-Nfw)!mQz=K*JkEP&731+W= zYw{}Yw2Y*$f9+ERh(n05h(V-;Kv6}kBuNh!K8}OOe1vRuQBHBvR@L+F>vdTA%E*N4qoPL?%1(?z2WD> zvM%$$A(xsuG;_7-Dfy$XYxH20Br`H)qmV9K^9YmQGM;3>7v|y+>^?U=@Y zMHs%?nKpwVSyX`{bgwS^sDF3i+5^`2E_bSvW=&(ZpKLM2AgMNNXqytEjcw7E)N1@e ztEyLC{>pe;E^6(8suU(_4|+Rm_Gt)GU&GBwn*=VAWDcU+ww`Z2EFk)jKUjuuvAZhnG$a=W$SZxP0o!6)-z0e?=>wd_M zCejV{OTYP6a$lo|KJ|s)R(}qmxra1dY`DO#nYO?Dd*q-&(Nz0&vZIK$NYH(kq*ED@ zOzrV?3kHj3moZq-gAS5mJnzSCdF)%gcKTn`H8eJp>bkbk=C^IMemdF<-^!KJRh^$i zVXwh{*r{oOQ`kml{P#L0k@nsPpIH|Lp4Tm(C!M)k`l+ZSs~6pdSTX zf3LwshY!F-p17?~&3r31{iT*=YNU2~u{$wGkITngbEF!e$^v|RtL5M@6J5YF8w9d{-(+Qz1%n zwF1UaEknu6CW0WlwC36=){F${U=zOC#Qcd5%3tVG{)3jgm@5;0mv=%7+0*$AC zs{P)?V24}!6s-)&<^2W8JhjFL&A$lX-lu5#yONw792{;IHfl$=2yUHRg^%QgY6E^+ zQybo%dP37WY+5-c`HZtXxg`AKia-9ban}&ao4!4-`FX5Xs*B+4O??&Dv4HrX>f5T@ z%@-9MSqOVU!JM>Y#qn0&#xqnr+xCyW_}AL8-bp^Nz?^4CrZizpV{mHWv`xopy^dfX z`pX|@_O{v`Qj%{{G(6Q|9IYR*oMn<%A4lMdxu0iF+) zZ~xeIXE+ko)>~o!Q8VOf@I%O(A^dw`zfewx*1~%kH=K*(jZ&YIghGX)p%kBR3|QRM zu~CfWPNgP1GdEvqGWKbX56_8BaxyzLsP{dmA6SWoL6yU=>}tp#-??M3QR0l$eA0Wg>gXs-p+iCgeNdXWsWHF^<|>01(i`!1kOWvAfrw=*&xA?qwcj~F+m{$V zAgSwwMflR_0_zJciomq3JQofoDUZtoo{-0n*@Pbujw(UY;kz-y<#wdM9OHUG_s*^WqQ;$Aqsu*&&3K1$#GN3bf)*ob^3P3xW)+ShdG6}tO)Q%PURp0C7GNbA zl$+LaBVrP`X&uNTV+yNE3hG&nj1$s7TOy|d2jWwz1+}6U*i}to`vAx`BQiyQRp;p> ze1SVOU=w;kW!LgL+%{!P`S4@+)-*M&kUs3+l?oD0A2-(k3D;^Aa{N-Z`_LsgUQhf9 z8sDb~SCCZ?UsCl%dW0kvegf{8!-A|)iV9ac1jQku7GvJ0^+nHk>N3Wz*FC3c5n4a( z!GZ%s0^}sFmyNoFYehzAulMTC%*~Y?K748M=PCQLe51ovzJ;i;hGB8{ck)V3#NJyf z-aL~IHxw|gmEwMudTD&mBD_rZIyDVwgDA--J76&YPA&IiPXSnxm6RAoe4*xl(*{be z!9e07G;E;6u=XQ-0)Gqe0F8zNJqI)}*6$W~&;}JUguR^cDM?!+b5^NZO1vmB37)prwxSGGl^M2vGoZOY?NyI2VOF z=JcwLwxRP)R4s8-1}JW&>gMjQXEl27JT~T<79v=7D+{tOs z1$nq)(q(p+o1_aHVKBQN+v~n2+Lv=_+^H=hFNV4w#c9(lN7EZLINFyjY19dqbZG)# zS1|~#uQyal^3t5{jOFbyVz021{q#gd{o z&BpR?qO;hbdtTVF7r|8yAR_Jk?bVcLH}zpXz1W5mZ>lg6ViC1kW>AKXr)=x5t?ZQG}cCaAzyz|u= z*%wu%lmZENMI|_->u*BoOq~uzGD{sF=#1&=lnDA?zIY3M%B=++sEc9^6R>7|*Cui^ z*q-UG4mQDBB5_`pMq=2fP{e{)l7HReNpS7VXMWe@duV2v*E3f&_bjoVGlQP5GP!0F zLu~K@PuauF0nSD|SdoAAsGNz5xt5B);o`i$t{Ussvx%z-pY3hJ~wJZoHN;RS9FM)s48h2R(W_54k{XoHSp`GJv|O#F&bt zX5|aYlw#*rT_h1cclZY)E9tIK>41Mkey+PHTwHMTnTY`pp(3Zjj|I_K;t`9&3tH~&bYmiQ-vb4ec{onIhv2gaJdCRTuAw=<$k4OX3vav zdowiPsSu!f5XO345v&fFEYl4w?_xKg3B0N;iZo-_-jB3)Vq8wGVi%A6L!>fy=&s*yN8rZb1W6w~jJt058UI{uAQao7Hfmai;Q zB_m7nYzCcVw73>)4 z_|U6KJM1Dr&1aQ}flVPQ`lO4S%3)r8@3Yy*iVayLtXc^VOYMHV(G8Xdm*2`^DSF?T z${v)Teb@TZS}h12(+CygwY`377b3T(d6w3=hrNf{uVEqCug-r}eQ3;s%=GOBFNo=- z6#AE}sH70wns2Ury}N+Q7At5^n?3-E*8opGL@2G2YSBv+#TlLrw^{HMKT7yOd@;SPszRaNpDHZb>jx+fJ0`e5nxbi{Q?cCaqxC9QXTLErxSE zZ}VxR@BcYX6BDs85xlY^^+Zi5^k-4gBbl;9ufo|@+xIu57fx}V9!S+>)BQ;P#t}M- z7q#Mcr(ZZbvdO3v#~Z!Fh_n@+9Mbh}fMDTW?f)iESpmjQOk z_ThRc1oP-_I^LX^@3*v^?a1A4#zlRi>R?!C-u(d*W2UHFJ=8_6!1CF0YL~I{ifdNP zcQ4^L*E(ji zlG8D!pQrz7f6jy_Wr(cckqLgd#svJ8Hr6x47u6c|c$|H=Wb< zpwxOOo%ifLb|)d(&ng;GbEUf7r9LZyRC|&xG^>(nXf_EB4aK?uvc#~>Yx)U!`e%AZ z>>|hVvh#E&pQBkU{H~&@0~P;G>D!0N*2o%j)m4coX&07^HpqAtvUO%%iC7RB@M5** z+twInpRJ2IK-^O)HkcLFA6Uo$t7iE7np6rI?wparEZdGg`}IbtM5c&8rfe}??#ZJm z`C6=;a#b4dckfamff?-9BtJF317BCfVPIuV=xBwk)uE(YOXcIsSKWn?jUJ8$z^E1j=Zz{ls&OGgwVyy**@+X( z0NYih^WU^|BZI~`fHh)0v|~DjaZeNsQE@-wHOUuJagV%WV)2N*za-dba^!}=){iQC z;4^g_I}--AEdIsp_HhPa%EO)dH#urU1Lm~qefk;2cZk~BvDMiX?B|RFO-67&e(KXi zb|0$+Dzt}-+R%@{vHq=2(u^!}bCWwcPeYPE{6%V71_S8*Kd=?MIim0wD%9pUEN3VA zoRtd1*s3wcC>X$;DphUyjg0I`x#&s6OQ$~N;^m_hrSf$wC(6T^6MrU% zRYnOlzpy=#I~MUSDNE-2v-d1qj3?p> z%j;pfmzvx7$2j-0zuW~>jiz2NdV#btRvd1M7PnMNbv8fUq`^&>a`VGj))UID?+#gb z%u>%R(PyU~JL=blu1QYpxh%T{*@Z0S+dfa}L{FVytsuNue|g~$--$>M{D+V&L;5i( zHjdb%QswZz?XIs2pkwpSu$>OdSsp%Yexo*YIOoeEUKw;#^XM;pyr*R)pVBv}PpqOF zHlAbkod4?F+Cm}5i^7!z+YX#H2;Gp@>LF;)*7pBZkX-~17`8?^fB;D~zqRf(a;NQ$4R>V@ zHH-$M@uVYgyY}6`U~+{J;>wY={K97a0IqU$#v!Dp5*s2h<1Ja@()9!0w1JxmraE`6 zLWR(~(W2i5E?!un>9_M(Tlc71r$tpWsA;jL`j(M4yC;U9ekHuG;l;{9(Qt1tzltqR07ma}sgoWgelRGn9w zX`Y2Y0nE?_>lpID-cvFUhkTiqq7&&p7TCu%`j#^pvj6;xkEjblF0)Cz+E92OjJ4n4 zYhZmRG**xoTvE%IqO|wThl^E`#vZ3;v1>u9^UJi)x!D958yQ#0r?I`*tG z^cO@`5QMKHIqQY-hQP-K#9E=QM&0=F?&6Soov~SvD19BnB!6QmFRr>jAvGL zrfmQ~{C(c~o%G8XV^d)e$W>gJ#i?MGC;G-s0O`H6edd)w{Jt zS~M^&?4h#F4esro2aF-Js5gxQ;BX2UpI0)`QY+!U@|bY^6{G2H z@Tim@=%8xOHekxjiFt=ivDXx1pEZR2qAt+f34Tk}mG#W?hRqp5>ATA-nLm?T`RRkmiwI#H8@EUUxc;x}fd9=YHFh=YBg!J(!IohMk_o*;lh&EGv4m zD1;)_#p8vIiR($EA4Mg#PKw%X4B<3^+>>PL<1pXMS3nM%L-H5XUG0wmgz$GTaK~ir zMY3Tq-=Ce&iP&pWVKMNh4K1{hhc6sAr7UuF^r?7+;0D&4$8jX;N1u;d*>eT{vV7;J ztAe>RN-!+{_s~4gwE` zW-cL_LLd};!nl*XfZ02^d>69Q0sU&UbQwUlpXf(H_bKz9=7VSR?ZPr4G_5EU!!eGCIBA)fgF}mygf2oX?;$x}27mK99wt3oU+R#{%~<%_ zoZDdbvB6HaquJd+9s5t*KqO#)*1<8qP!{>8ZS0Cr=hL25M>cV&4aCG+8Ud0Dq9UO&cD=! zz%t^S!h~0x1?VCKxQg%SMS-=)>YAI=J(WMU*pU{_-h8W*6r6SZ-2GZ?_FT2-;)56$ zophR%2v*qEvMJYlnt=Pz9(>S)>7J9ujCYx9nyS#HR zIYCyzVL+jh0hQI?!0hJsgm+CG*1Fw@rPzqV7p`2d;xBV6kQb+nB7$MxKR?U~7jdOZ zif!b1Km9F_Rei}>k zb=VlNxt9P|tZ~!|q@1F{?s2WDlXaYZ>l4-*%?k?nfNKmooCTrml*2bf}m;WLo9AZXo<6dub5 z!Ap`fV~s(F#+1+Ia>VcG@SwabB^+3zbn&2L3f2h;NY12Be_pR-&;GfAh2n(!?9SDa9l z`;_g-J6A=+;7e39IpfhEOZC7JVtU;^59h0VdN7V~BHzgmn}TQthcY)Zb5OMu!`SO7 z)Z)5zp0?kn_3pLYS5NF^{&{45HWaE2OZ+LXov%Wc3KX1YRJ6WyRFXHcV8Y9XY$pbE z0f^p^t+r4w>J`8HQ>%_2EMGeqXh-wa0hwv1pGpR9*++xFP;C9KQTgW%T{W)Q$PJP>2L6-U-RiWYuzQnhVW>Pwba zqYK;5I3RdkY@Lx6yUrS*8Ozvvh*vfzWM)tKUN)#rQqZUIb1uikqA!mV9X;H{-{uW< zekwSu+tSdA3J6ZfVe7<3!d#8rcnCpw7t%X?lbqDMP<5BQve*n3bBw{jke@dx5AG4;iy=o5Sg8HUkYraa!v0AiDczhC~{pH3lr zw4Y9|=$kJeEliJcj8`a=zJrW{5!?4%XO?j%)5ZAmm7<`Yl<@mq;1s!VwC9_1NlYQ| zvc_+9&d!*lb0=kdq=g(|*>=F6Q~u4si@BBhWBi^UX>R2RD(~ImS-j@D7clHlbs+K4xC1K}sL$htxQhC$ z`-di0^%eamdX|rjS`VmPMTP)S7TehConzmzQqsF`RNpA^yKAU4*#5i1I&b#=Pg~AC zl`2;4mHK?I_OZ<4)*tu$pG(L_EZe?QMLf#jZMi*mY^M2481c~U7Bb-Vw~@u<#?K)^ zvAzA7r&l7_bQrp(bzrZS^l9KR7uT_DTP_g)DM`Agid09;v>%P1Yx4<#*?%v-YpALC z6L^i)7G8YsJrhj8V>!nz;r`d(&ld<1o{`tZ38|n3`vmb3t3w4b4TCyF6s2Q_UZxIv zFWiIzZX)i?sznKU0B@*xiOI^`cqWP6MCBM=Hn3c>br_}?mme&5RbD_}k)*nRQK!dj zAAFVf>k?=FDr4UQ22p*{YTPCO;Dp5}I6%4qGy*<=oI&84`XWV_t7MUIBJd&*11DYZ zjax;YJiVX?>QVAF z8Sgi!-#O{pb?dTmJ#xdRfdx_}50{#+!CD?Y<9)PjpdQIQ``!W^`JeWf{O@YMCBYI~ zR+fv_Yi8Kb(N^sA#_Zr*#ZjKFY0ZOAQ_oti>n;Oy7N2qK-a1}jYc_e=k1TF@FCs}> z^Y?y{1=UMq{$j&{yYSy0MhCq$jZTqA12lGLm&B@+2+11F3!6uBGj=X@J}Cbc1HB|I z(rn;v&UxTOJv<4-ijSBV`TPCm%s<5zoS<|)jp>#ibZ=JMHIjs!;+yC`3@oo`8part zcZDks$VkM*a4kvyf`d#bt^i)-gYqE90w6?jQqXLAvK^5K`bs(h68JFPsA+Q34n|fO zPdsV1!#A8bLb1Z-p5*=&W9a!MD9x6*zoHK%^+2C`Mv#Ty6hn)XHBW8S^^l>Y8R+e85AJ|Leu@}CK{(?(fR>DCo{O>Mq; z^y6ti3p@96+x0@;g&)GDEwWoD=glVkc@->Nl-DG6%D3!Cm>kZDsVrFQ2Gm?;p}u9KeNd5;v4f`}k`Rw6)`hzawgWXckX zSap&GJ%bh{$g7jwFOF8+@zZuByYX5AoZNCU0y?q#UQ6zS8XVxU<`XsW6-#0St>eRl z+o+%koi(1Il^8~ERv5=(n)Pb^@7}*7oQ}uVPpkEIp(tIz99_{BdkY7)blczTRE0u5 zJ7SSW?KWA1;X-0`w>r2d0mZ3^Zn^5LDjDxmx4A8PmSy%VbYV>VZPoNh)48pJyHcF^ zvTD5!2By~M!Se2_+}Tn$R#Xa;twH||X5=;TBa{O4#r*NC5TzeyFHOl6ObyQDmjhAZ z`|t0Q+Yjt-1S8#Caiz7D_gbKN(?S;?EJLVP?gveA#}FkW)NHyAbuWrZ2-3s}f|LQu zB8{$)T`+d!eDWj~`jmWRN6bGV7yzFOM_>*rpoB_t#tD!#LmobX6qDbE;Om8rK}Rhl ziwhK#C_lb(aSTc$?H&*&PIAb2P%dd1NH88RCe=_DdWS4X3VXD86RRU-eu78sDvHxn2gRD>_Y!}{UlPU9X z(hG6AH~u(00~eOX2Y&aB)17fXd7ey`#D+COn+VcWz5vASpl_UGb8IKck;&@%qRSaH z=p+f_kWXdVJoW;R42y>)&IUZwgsSp|I`)9wlUj<>g@(Mq8r0-{@OB=$X)@pC2t5!H z(MMLLJ>^LiLn5A{5cc_@ zV3&HkO9hO1)e}Ey_M^_IAWI1T7&BH=dkwPvr;~-iN{acVrq9Sub4HU*+bWZTyeFgZ z13gn6_CVI^8}_33+&1K36Oy%jI%D^AQz&#W{pt=4>BBnatTMW4W`YlL3ddyC5)Gk5 z?4BLD1JZ#lT*0ej3=b~80j;nb9HfzxRRnp-54Q>}%1&M~0^$rn_lN`+vd6_h0!Tf4 zH6Nr-9I7REo%DHTXKh2d)*uDCSMN@oM!*FvOZ++jYYrWAhEbQos|#&lMJ zq3og>oNwy#rbaHs7ouKGn%d%I9L%55syCP7?yYQl z#Hu%qvOJ1MRWYwzKn=*Hx4_<1ezs?9aSMibv*>TR^AlVgL~4 z%E}Y%-*t85)RlRWO&0bE*VN#p>@iNd&lay?-L&l@WjdgKa8_E`%&J=doLLQiC^=e0hzteX&# z+xCBNa`r5;69ji}=-xH@@K?+xl2+T`5nqm`&X#lho&p5=oucVQ-r9G>yYa-Fg$ll( z6c|nF2nVc3*jJ$#II!Fb>cBi|vIy-uUEcn|l07&z58x38;MPtlj54CPlCF=AO!)6C z_bE+8eZunt)5v}g@Jc((i4oR!#&ma_-z4X3oGQm^kb&>qTwJs+{`eltUND^)H&wtD z6Xj#{`KR=!H|&%v9kI2FLLF)BEBGi$7S*~ITJ4NTUV_z&)N@8Lnjm5-x=K^V^i9aR zH0E?BLP3*Q1uPW0yigzCYY7*tSteKb;Wu)|A-=*!p*h0F!WZkcmByX;j@P8GP|MFV zcYx<>93!W6P&yw9b!+5Od_Lm0Rm4$glW_KZio%*Ku*|F+31HfC$g{;R6oei0RqHGZ znx=Jl4m7ItL`^fN#~cLxP7UONtb#Z{?2xSV$&jA?J#`IJEQeekE39QRFthfaP)o@l zbJUUM)^n7@16uB(j?1-(j_xR~0&ga@)P`R9UGhG;s={%?{6e*zQIY96*3%rK6bKyZJ{-zsHF8PZ|2mL z!5^g%nHMKWQ!+eLHAtAFlK%IdVFN%YeX=#8q?G~IPHZm`C0N9~RlcAxDqVg_m#AZsVgBwaTc%P|#!0bK&z-;B#f$vyJV8rA-t=#S{khSoj`xky`lW-wR$( zFKG>iW8SzM@1PFuiV;a~3;Ln#yvjM)s+Fy4#@;(6THHVC+qT|@N!cm&)hB8i2NVU4#@PtlyTVaXQ%*K}Yt|!KrHb+yBVJvY9DP`5PM4ZH8aJ zl_iP`e>nMzP{8WqC0h1BsC z4&_6{_+#`;B=(rtoW6+?Ug^*B6iz?J_`)_!s^SzUencxuFcb1Q#_s)a2`*(*Rd7{| zkz|QEg<(Ex8?h?=1)Asum(7g-vgsf^dOEA49px3ogy4Hq2TUh#i+bpZd_L6$fH;4O zF;j7U6k{oJx?wrQp=9|xQVj5!J_s*+ar?|c+(N_-ZIqAT5rRGXq9S>g|K3GhlI54Q zupPA_=ou&>-TpVWR~@*{)GbfG02+bzj-kcBfEV;LsA)hrgjzwzKT$YK>HXi*8{iwC zb&01bkqYip?|T(b{_AU_$KTXy+&VNJ%A39OIdWK2i?8jEqvBdq-}cwLPkl=2i4P>1 z!-~1sLQxM>VC?Ba4n79u1K`!{FOg?Kck7Vn+6=qF^-uNe(^E$Sf~h%k8HZ?|-yke= z<6p zC?rc1xhu|Q2l#G|Xf+WUu{w;w0Z&&?GJuyaLJ$a$Lf2)q-E+@y%H$7uUVMBYS*>v* zOBT3d75K5-M$a}UK$wW}L!KbY14$IlCR{k=K^K{Vi$SrAXA=xSToq>R-pZj`5cmoc zbvoT{atWxzh*TgBxFr1NPKKo)NHju)@&d2!pI$b$7ShE1b+_cOr4xEHnEwcVM)UIE z^TVkJs^F4eYV^=6_Na;(X+YPct25KD!mdV#fag3`g6kj`MQenQ`J_~nES%Pu~jZMbU3 zwJ!`l{w!je>W|Q8TGCLNRwejI&Pq8bi;F``s8N?vf5qNd8~U~HO_<|`#gnnhOO6f^-xZI6j{fi)BG*JM zS#N&^Z`s5Omxxbus(kOiv*LVLJ2^LYwqJ!WZSRV_@87@o*WOLL-4NHHhv)9ZG{um7WQ*!FG1n>(6NdlY#eku4Lhq48~ zj;E22UGr}k9P(Qb_|=~Se@+rK0VvQUKyc6#0>YAkQW6Jle96j!8zAvUFBqUc~Oxt#y zOk1}trmfpo)6U(?>E3H^NUwkEhteC~_DkufKk!QWsSkWHU3|)tg9pCuUvfkOloJIc zM6ag(_r8$s+Op{HiSM#RVTb(+@&utK3OQN8d)^+D5l{;7s}N-l*ex(e_`Ps|^}WpS z02tbB`b@K4K2FwE+MIloXB)OldDH_VJ>kKAAV)AgeLR1e5wz;qC#|dJ1-_nZ(Yp=L z)4*FWGeG@P7d-6=*D0?yY$Md8EXre_qn^72&d0h1*j1?CnlS#TB|{A40OZ~C0d7-t zg=PRJ$gAEVG?S64Q<(gjo43;S^A~1xND5H5OBUcK%y*o!XU{F2eGP{TRWI zjE!Sy)%*%>CoC-HKNF1|gn0YGAA+<*0m%Up3+yZ)alqe!09KBguR?-Q5(Op;t83;P zD{bGBOvEDSP-^UQ z7|r-rWg!Oou7kx$m65M8m2tMjW#>)T#b(jr7>w(hAW(M4i2}AD2yRo8rYy_1Av{^YtCD#8 z;mULAz%}eDl%QYABjwjW6M?Mf&cIjFVGH(nwjd`1Eiph+;Lko7@TuejmJm3u=knmS zm(xK@3{ZN4V5Q^g=j|8%2hz@ki|NJ#Z%;QLdPmy7cr+~>zK|A=oJ)t6&Y45GkXCNK zl;4!Fx?A_0w_h^$Yv%49{wd~dTlb`;)$?ij*n{c*+rOBec;koDqtE`bB?VteM=ZHO za*!X?{Dvn(IPR96$J5S|DBzVy{4&b79r%pGR(G5j!|s+tfjj;nQ+U9D6R&p7z6K&~ z1GIq&hU<#ngHwTT^Vhn)p4;lK14IX!0e#f2|I!}F(HA5MNESd(wcGeCa~q?3UEenA zsyx@twCZ?Vf`8?)@@K(4||ZuGX^WG`One&!-=aKX=!=Y{4744gohgQtCGC^fQKCM_Z#*vSga_!3P>7| zSRheYJ7&i^8orlc!QOdG5aKfnw1EzP&62kks*f!+p2N6u=4_QK=qpD$_FVR7 zp7Dda{CZ>N8DD7Q$wQFy)&rA>EMpuq-hdeAKZZM91CxasBN6Bek6Z3pmU+fs#$~sa zm>pwuybXc!juQn|LZX0R?~SrC0d?qPmgR#}#w`=d6wHV~`w0Gc0{MbN2RQ+`>qM5(CK&acOg^C?$K;-xoF;FRH`_RE@Oq}}lY|1u zvB(WsmXiZMp8)5;orEmQNkUB&{Lf3DNXz$pz=HHkc~_zC2z<#Bg)e$Szyu&C0aiLJ zNx&awg4~kpaUEbv>2R}f=)013jimn1D`bUwr;Ez7-Ih;EA8BGzb5Ya zYw75@H>XqgJd+N4!ea@JB?|hS1rn95yU(WG+jpj&W&1QH3cGgh%)iu%GuDR~TQJGI z21i2gbt_nxfvf2x&@qq|P!8}Hx&}GdS(yW1vyGSv+Gwi_%A!MG_}3#xf2JAGb^-6# zgs$q#F)$W@9+Ng4L-M)IG?S@jZ>V%0V{ey`cG|UJ*~71ol{F9tozIIP2e7LEzy@<8 z2X&UbjgW0)vXFI+=Q9ebS6+jDU$4o5_dNcj%b6GeObS55PpAxA_ed15ruOXGYwKW7 z+PiZx?c006gFQZ?B-M8qs8~pi%gGc*QHi_2tJR zV+X-xfM5(^tQp6j48$zxYCJQZbd7m-JeM&6FnGKy^)-eP9&2G+lL3=E-E{NfH+8T1 z8HLyp&q$)IASVM7@XHC}r1WGJI#>h;4c|QQ2MCS#!I41+jqHjSiQvWbEuI2S3WYz^ zSmc}_+#O&dkkKZY>k5sMh&(4ICaz9+&@l<14FP?}mxW9n`6kcFgFkdt7rvGma6ouY zVeQz}bokQ8(gFKLf5?I_aOCDIndYs6BIoS_PZA1^!~g-;cL@xKZoK5l0O*z!WEm0y z90$M-!s68z8?JmV?Z4-j)7FEJrMtH5w}8LhfF!{ZfbILz({K8@^z$G6cDnD)-?BvE zRZC>Ply)9_PujYDvFs*n_wCPZ+xMoQ`kCj_dq40>I&t=)v~l7}TE6xfOBTLliNaSs zS>TQW&SA@e$I|W{yS=`@{eT3)ehC5CVL;NF1Bn5FL*Ri#5cT-A8*Kmvx2TIjFQe@& zc!@TFqIbIJ3BR>40k2a6eUoK?o~jG`Q?~w3nJ=iaA}2qu?mQhz>b1ShTWK;LD;~4j zDP8nlvQFU@qiZt)0=kz$j{2G)&=v^@#tG--I>^P=>lb<+81#Y4yDrGYMw0~q!5_CA zp1FBnoBcy9a;RX}3Srh}}2X zAVK)iA1%8IwkGrIl?VJIO!@UnJfm>He+;c1H@|eu{8qWu5K)r_&;q~hP;}sND+13c z_-zME7C_UVs(&R$JGdjCuBD=n2`!oEbdq2w{73HK$7s|k5c3fG@Z5sNLCbY?+BOu%CmO?C@E@ck ze`wNo7O<uaP<7>adR#xZqIVmYmHrkz+ho6i zTvyJcfchxc<5t=*V`pI7Gcb9)4)I!2k3>=BjxrxSKo^ilq5!B)F)vY|&V#+kDT})b zicz9~B*C9g2y%kF>tKK5mj880$Pl!!TY%Rf_w3o@w-^@j%mLnlz$=f2gT70!Xu7?= zZfc@nsJjaL7kwuJi2`;P@N5GgW?VmR{V=Son-3f$3{j>JF~)};-~AXqDcD0qcy*r9;5zRs(gOBp?{u#c8_!#iWB@w^c(&k`v~U%-56W`} zSE2j7|M_Oc{wpSPGavl>Fl|y>FmYF(h_zDEa>BQ1)ed$H{d}l;F!4Gg8HhbJ?l4J59&0SSH9>;s|`xs836Fv=BLZ| z69Cx3KY-?siTtKP{^L+cEMO0RvD<<_zsiUYCE@J{e1aLzDy*&^vvR`%KKfzw%39jH zZ=bIpe^$X0h9C8{xx2K{B?{)(ag60P3x0TB!QhF3qxXMn8}MI#F$ExxTNI>6&}5;-t{m4?-oauYVj&-(WSsQasd3RzbtT9n z_PWmMF-8-N(}>}yTXp3z1Ao-O+PLFHft7gA!W%E0P}BpPt~;U9Y0}7y_^d+AYLHoB zK=81K>&qb2!LW8mfG%FNEN?V)Od@Ef_F30Y3<48`lZ(7gsNuvcyz8(yR9ECEb1?58 z;&ELmv#wu6r~`PC04D*PBJ%}TN>36zK|s<_P!a|_ptOGCmi_X#U;GICOaMxWoq>bb znFze>r9WGM(gOCutDiMGCk37e2(V+Y|MCkZIrwbackc@hymf$b;qvoo|D{i-eU>Qf zJn?~a*Us}LQMlWG$>aww;jHZ!+OczK37?<7^%dW}*t+kk?y5ls5OlTlrAX2^C zcnKX7fms^{uu*-si@=A#t~RREM1pdFNkrBWecjrxBBLI^(Me1fQbNZPmo7oRXqTknj{4L%;QhG4}s4>;K!Q^z8i4J{N3`J zCk99qfMtK65i;20FGC(k+qTcX0pTBDTCli*+Yi&9>LfMs9fWx z$6ZMhCCc zt4?#C{>HpGpVqmwinDm<(9(KX~nPd1t`*wo8zcf<+_=xQ&3sfI9_s z#{dbzXBx3r?e25X)xpS8}YdGpYfOxWC@E~EJu1C>z`o_n)u^n#TvkmH5`ffxCK#&ox zLp|3ux$6pYySZ)FAq^b^GIcr8$U1*U!Jx;^`b=w*LbUe#U>!>yJKLJ9ln%68WVKGw zIWO&Mo657#5zs~Z4yY@7oezNO6bQsPAD&YV-kd`g+=DH^08a2W0_8E#Ly!6@Cs-G^ z5U``5I&Bk)f$FZFJMXt1;7{Ny@OmV60}$8`;?0L8^F5Xv;B(CQI}UjJ0f_^E9~%b` z9!|S<@3J*nzN=7n6>$4Pzwo$t0DoEXupfiIYHh>%f))s^(jty^890KiY; zxrF!Le!}WCpGiNfJ~YaK>bHfDP+JA#gX;VTro+NK>a6~94qbKs5=1x$EsOZfYo1o#2`Z!-WmQJgSjQucZq zC?DL+`vt?G8;w%oGS~-s1lnLbr2UUQ6`BLAXtG>_zcbjxMliO?tr*EhKyZ)cX23!Q zoVSuY3D`Br^0N2~@3K;6m?QBgs?AYZl5o@m@rkr@&-;9LV1xr#SiX=BTs5F{e8!(K zP#o~`)0PB0pB4=$kq|5j7A}3VV*kZYq=kzgPy5b)DD61%lsT6D{!8WH}Z0HeODLu75u5SiGLLTY`a|iS77X4+hLL1{e=S0?2aEYc%bYpM z*B)pso$lH&6#2-W$Dlq!>pIVRg(k0wLaakf$qDU8Jx=JKA6N8MUhUg?N1n2gd>WhE z^4fAvD6J(yo0HNP)lVWMcpWS$sMw4zc>S&W)6IJ>It?G8CFJ-^lCS}O=Jrz^Aba-a zt#sbj(Ln?t3-H)IK%%g22?BQPj@tSx5vW#djUKjyVJRJ4vOtH=MO%UZ_}dQ~d1t|s1*2Ui@Y@b+=5q_bR)7TJ+WGUo zGeP)Q9+fuVIs$yI`g8hamCb|34wa2~MT=Ka)^z-Gu%e5LB^IJCSwHl7`>fBjYm#6kY-W)Y ziFPXji>ILI+HQmW!Z>!-13e!yT)6x~TC_wU-#*A_w+xg)ArRLPx}v^OtDJ>PN=rBM+ZhX&o=aPIZlrUUZksbdZRdkuZTOXEut0wF=y6Mc45y#)XDANc{Bk;S z-=_@XBpxV5tV$kSyXZXCZ4{8#Hh@xhO2>L` zXP}-kr7@nhe$lZW?Fg3#J?fH==;}=X`q3_c*R{5t7romUaIO4D7Wh&}5!;L4&VT}I zmVlo1RSrP*tOa}Q62OOWcLBi`c=qOf4nD&GJEideBuf9Y(&hOAJiv%&6js-cS+Z~< zZQ$14QTu^mz5_`EZb9JIA9fJ7Y~7N6H67+Ez!JSK6TZfBU)b0J}Ez! zP-ydMND}b8f+q?^2Jp7Sa(N4aascN;zly}5`Pf;o4te$2kmH#8i~>qR>uBsCkNQ!j zCF+7^jB=DXHI8ARt+c@H?HH}`kns^Q)6dKLO<4zvxoFRK4m>WmodtkxsZ8%40I->x zC}1M;LUIeDYs``al%s*D`1>L{_$3@BaYTT|4dV^jr<0>cmUA+zEy44OvR3AasWz+waNJeK`)yeKa7GALlsEfa<|H5|8W}l3 z09t}Te#0HW(wTRq!xui7jsW-kTsn0Ag9&dAWIX3sy7H;Ca`h8w`N}7qUb>9Za5>AC zQC|MI;bSKIcv`yGO2;odmhb&&TD|-cqkqY0!zH6HeK;*${6#7}pYFG>Ds zdgWE%PrQ8D%9p1H-lhTEE&naN2?~Z$E&Jr6+dfyudq(j=-^%pMlwH@Q=v=j-@gM zb_Q@O0f7`r0N-Yaw;U*g4HFB>^TUh>{2|0chmj~?SHX^nhlNj^_S+9g6pkB>TM&2y z!oRDqWsBc}!0VNV53Hoq>-U(CT=(xUU}wR<$mqVR`8o3I$E-hiz;UBJuZ45SuRfZu z#A}gOA9PJ1ivL{3TMu`TEb!JYq5d2Fpr5Bsc_7A+?nkA?2Gy$_;s#rB)0q7)TS^~V^6XgKp7&w)wF6*b0gm%$eVvuzx+vI3ylLqzJ z_uht+DeHI)LS^`6kD%V<<4&bxQ4ew0*kG(yuo_a$%e(s5M!hrJl*(cI5$L)0N%x(KcaV1^2cr(5A zZErXHgyYR`{mJx(x4hTz*V40ZeqUO<^`d{z0S{7cKXg0Y|HwPi=`$B?zQSo|c%tBC z!LhTR%;1*8swE0|T@oLP!tTahcjLY)wo148IJxtNLkG$@V=XYKPzM>Hi35W*c?Ii_ zbO3&xy1v*cpx1!corEO{DrY~OFLkvJ`PR3wo-!Vv zeANx)o!)3~f1o2DWva`4>*Wl>fY#6Rq1RD9(!;6Ju~Mg?U6dn8QwN$dmW0|XkRaeg zOW0Llf&efHK*@Ua6$r+p=|l2om-B~~aQngk?t{PSUslV z-CMW#--9@|bSAB@oG{;LiG;NUKU!}g*m0tN!;S&pgh0?oB7l!9K}TN+IiMe3qF-gQ z(8&b;h8m7j^z_-;f0y>HUrjdh??qQ)hsF<-XoI|h^)*J#qaz?k8#A%8Bo1gB$A%qv zf^nB^xIFAE0MMiCVtvsuQNWzU_|!xJi~`1b03O(71E@~3BJdbs4kqO_(<&u(I&h?+ z^IZVBP(AeGXK3(8P|jtWAfU;QXhJ6vXhQYmRS%#Z%SdOwUpT5G+&S3A;({i)$g{lB z8Ol>%+R|On}m6lLcn5;u5KV#0} zwAC-S1W*Avz^1xpkbFMl>|+kM<0p4_!-Pqv5i_W;lWS_IpU^3kvQ4khR* z7$7q;-DHi&z57ZRxW3Y@9?QBw5TeCob*>iBv4 zwR=46+q;;38xjQz=KiT>qp?fiw-rdsYm-mkY_}a0SI?cZ^L!#L$zP7_{3enKE1P`a zuZ6C%LbEPn1?5DH5j~oIR+rSkkC25h)P4ru(Fkrg|}P4pWjct=Sj$itSgIbyWy z06Et`M0GJ8-gwBI zsyQpQAHnM%PxuJa(M#|3=M?a`%gy7V4;CmhU9B_)Rlv=OV&ro@@d+qf=Gf`-=QWm|+*$!=*ZnkabRafXv7VHVP zlX@&Euew_HI$oE}Xk7CsSDrS6%Y;91qHWhka6M1yoIYlBlodL{|4O8l_#Oft@WVQX zElS!j8K4Yh{?JmkC*U9OErkX9Rq3B$K4gIhe{QMw( z&G^XS)pX@75`_zCZTW=%{fGLCA3Fy~6xPiz;<*DnuYlk#K%#)14(bWC@znJj>53%_ zYzs1gwEI%ikybE4=w!vGE3%xJ)e{;|7*n)V#8|}`1v&!qE;g1Q(d4zPuow#&&r5YR z4hP;*;yB|v^qMSSUTeIW-chg#!-K?a38EgHNrjb=gGT2uaO`}x$tUKv1`ZhXY>PDH z9Jr|ggC57ovN-Tfrx%C265v^%bc9Z*sLS&C6N+Ow($$2aT;K>SYAkvz;E~=F0bAgD z3xXxU#31u6q43gqI1aSm5(mm1C3(nSb<8{y3xG*NmK9qAlMb|Bn1NjP*;TPQr`_*&&hu1pB%WEomm{|=K4?yDhxdi` zvm==Z#@01a&U-g9Wy*}6hMc3a_!ko)A>#7VT*Ch0$-9~`EGs%lO z%x}~Ia)8EM?{6`%P4Xka2FU>eK6nIIlvvw5R$l+@)&pq(e_;|2GExq}Pwd*gC+%Cv zf3E?bVaDHV$bWWv!;-So39m`|>ym~8{(9uzv~}BdPZaP8=(XkJ>FkM1>C~|c>G0x8 zI=g<{KaS)+%l(u2tqu60?8CCpYCa8bG+e)ANroj1Du=)H1j1+}1K3rV^{2%iiG#@X z<9Gn=nh%F>&vvRKG**n{C>3bW=@PS4M|+KB$^*1vjD(Cd+fW$+8T#(Ww_`)5v0Cjk zmV0amUE)0e8RG~snJ6Hjqfs^#OFtkEP{4yAA;8Ia5VZ?XzHultsO0aJ{UB4)mtDS z-Rma;8Bk=@XPahM zY}S6%R~lu}&8zQ0+)7^GI|0`uz`j?R&^Ru}p1TUwMj>rt4QdIXjVMRyYoqY*#mAD2 zM!;vnfHjX2Z7WZIKpwXpaQi{!@C|$R?()R8AJQFyVD>}Va;5!Kd8fD=)9(iqz{3&?6$ z?G0GSbPQ4Nu=>y;fP+VSS%)%TJ1+bN<<&Wq(s?EdIf-D>P!olM8rZE=Idxu|9_N6E zDBYewJp-IM_ zO1qbyuyIBZVf!suWEw$+fuIEn1p|@SALwTSrP2o0SDB;8V*N^&dY%N7V5M!52J}}w zpn9~g$Do`#BnjA6hH|ztpktqD=OyZwK&tg;`BDa*9y^XLZ8VXKaDAy4uV0>H zB^fXq@(Q-0_8HcO$#HHR1IY9I$6Cm18=x-hB^f9*+K%$PM)Hopje9P-P7?(}>u|06 zx-PuldH_$~fM*ntDByv{gNOPZ1?(n(_5|YKVNVqN)yOUR1858T52rInFQt{Gqv_z{ zvj55I?341_3QQQ>XW=%(M(@A6zXr+ICQGuwhZyNY-FM>ohL9{&oz>A~L4ETG>dR@1 zHdNMPNlO@JV@U(sWnAjwnDJi6_$%^7oSi`6F~BNQ zG+hhaq}8Uv#Qfo^OsN%MG9l;M`^ceRX(I zmchV_Qu$0O6oQP1KFKGgD(0!BdhXegCOL3+E}SP>(+Kk8ByC79%a1s(3J+1 zq`i%zQ&8?8FFFQN>Re7cKUdOyz1p_OMwq8l_?#KgRaWF)I^FE@oS6l5n#_%m*GY!+ zK}VW8wdbFbRvPP)GOp_>;Ms;KgHKpoJm7yy8i|5G&{%d4R{VA9qv^2G`xg)TAB(~p z65Ds?KTo}|`%pT%ayp&fxF@Y0IgyqR*pHk;*6s#=d^G=rXAJPioSwdM(~||?8CcCh zA2R6q@Z!pb`N(6d>6!a(c^#J{F#rl(ABHS)9INxUmMnCW6eS9IP z(-;-w6>o)ikeCRY7B91$ywm!FyTn+=WcDBJP^N#lk?}p!0AmcXX`(=Q2Xvc5Xmo@R z4YH%L)DvuIG7OmNXzv47po87`{sPd3bj0k1wMhV&yq_5JClGB(XTH%9I=1>O0rgl& zTSDC2x!-wLURt(Q>Xfj9O(ILri07qoN|dkPJ5RZcz}11 zZuXAODQ0A+*-Ge|gYF%5uFq{>BnEWq6Da!Ho|T|u0HBQWOluIzzdWl=k*VIx7`U7_ z4CDxM8t5i@mlZknVn@ESFZ#?kJLii%UX4Vu(CW?FX-V3lbU|lR%9(*Z%>NoB0=oda3a@|gzI65c`6}}Sp_DaQD75q9 zb6E#8eRcHX%8xK*6JtovXYdDWj7^I89R`hmBWP?Kq9h9d;x3Mf{(7B>B!RY!^`IGV zi0MS3Y(p?fU?Uaffd~Y6b_6^Rt_S9csSbb)I-Cr7mYL2aZ73%oXVx{k2mtyQ^-+cr z6N0h`oFDa^Bq&K^qCh{IR4y~rg;H#^gq#7H+jR=PE>$jk*0ser1ttYe))p~za3ro5 zWSu#b;$%?fb_B)QFj??jiC_ag9CL1`wAI06rlYf@O?GY>IceaQ?W{x14>9J~)2fX- z-UcQKt}n-On?ifw2VdG`e;P^vnUNQ45=0m%Gau|qT@8TLki*5L^i_8(~kJ_wd(Dy+&Ut7HnQ`eepL_KNM zMWFwAF3vvG2w-k&dz5L3^T}(YfnQz3n#3&x+=77I*QnU#HQVz9w)ja?4_|~oy^gmS zcJJBWb`=h|5|>e3tgx51NC=Ejh5YdiZ2oKXfv!96p*>mT*g<_dA{p z6hFn1w;J+;mH8Qj>e~wN+T_nX{bYW)u>^dVi~nS@puGBNCJU}B$Ud7ktu6X;>Iv!@ zD~K9T0uR*qQ~)ok-Bl=Z%z2iOM_r!xd2K)jJ$b?dz5Pz*+j!!V>L?J(?z=s-f%K?805<3mJ<$y0Z?%uu6us<#C zKa%$CSxozO=Wiz9Yk~Angg=vjorU6aD8F*{ocHBDxAB$8b5%|siR9tx`Ez~?0?7gr z2kI-37~tCqAsOg^IwgUqep~!FW!Mo`8Dj{5<4);-DS3@yMb8+f`W(k{UC@Y)lvlpQ zQt~6Hp7EG~+|SYCC1Nvw=vN@#BW9Z&cwQ@FGEwk@m0blU2VR;Cjp4*_U<7vP{NOw& zcy!!?IZwi2Hl)WVt%K7Ko-I;78!1Zn8!rNx(wSw8;g$mZ%RK@+wz7$}DSTZXeDjBirZ8w3x;Ao$Z3%WUG153Bby6pH{V4yt# z*)V_+CLaYS1?uvbG=tuZUgV@H*V`4@rs)|-wU1Tqwiz5J%5%FJkZYn4;r3>OHk>aq zl+o7p<(Sk*TW^nYp{ZA0#e@#mw9*sTiq{)*=*a_WgObOnHd3Fqw2#1?Mf?4nEV`oi zL^jBrhOW?TpE7`-Xhx8&^-Z4FVZS!1R~Zup0zLrWLGVOj`_8n>k^m$HxXqAnLD(MFoRypfNus+bo6e}fexDG#Niw)x!?a8~W{NSY?@k#ZF zi!1^EacwpjZb5>m*CW?$4k$V#I=7r8&{ol$6?k=e zg)Vvq?oQw7%5FlHH60wXKg8&cJ=;bbZrS(p3^?TG&=~+)Fd%qqf?&dtbrXTj(Sn=X zxSiORdY!(=X7tui)wz9XAAA=eVP9ykYp6k9>XS!ZJfolwGpY>$`Anh!6uLXU^o#X@ z*tXWMwq{fNFFMz=evm7?4Fj()KpJJAaAjGv&H6THq8-}@;=F_|&&v}z0WNZ%!)1>1 zSma$_X!22pL;<%Qcne}=1LXC|B);*e$G`IcVBOz+cm7)q+js2pB!GV)%D<`L-&HuA z6NUYY`4$9r70eEa!rp!RYdgTmPt{$8avOp`A^_mI1$>oJa`#<7ywGEc2u-$d}T2aZ1@q zW#_3f*wTSD=h~cXcA8DD4w$lv;!MetMhU4MX0Yg~ZGcY-VI)K{_ zq;Z=8&n$pO(s0Fi>?YvvMEG+EjHEoF_rmG9*W_7}9qdw}tXm`M~cao{AlqX3`*bP|oC5o8>i zp#YGhb0c}xTc=SH?6C3}80;+YHiXLyjrP%xT(1p)4i;^u5)+&QE;I){4!-Imc(FNo z#`;_z03QK477G_?)DgTMDx(}F+TimAYDXU6!c-aMUcyNj@-2pDPc%o8ok<4iET>Jj zYc|dsqQlbL5llQ_0|)8}2vOuspTW9KmVdz_QGip9I)^*v?AYn3q1Td*zsZ|JCt^^E zNeKg-%3wpgSbqd|%h1M$|w$Y$nTgPr$L^@^fr z8(ljEkktU&=`)Qn)w+5ue9Y}SLWg7cTo4;x<7zK_z5Y&T8QSqS%3R8H=CvNs&%e?K zI}aZZwFAoBrkry-mkq3gwFREH9pd*BBHDV?wLIQY*tIKvJPEr63yTLm5%60N2M*Pw z0XjUpph?31{R`%IdcOkDA9b)m%_IRlcN5eG$pYSn!1;mqhZT#?ePl@%@TaNOcPeU< zU^M+QX@EMFMeum!87oLrr?Eq!wsAL{aSMT3dB#A-L)Iss<6?`S0PBO+m`fgU5cOOq zaT{^{kd^$gP5V3AQNV@fuL&jzI1n4-K_YMvbk^x`8v-SC^@Ph7iJmlQ=(|C&Itu8} z2hveT^fr{Y3yle&wxj`EeCQ#c0`wRw@;c#IpOb6`r7jjM7C!CzI@t!-g7OIHfsu@I z)W>mDu3#`{vcW};GSj&}`Hbj%vXfJpCJ=ORpr_zA)<$-ay)AV(26@`BZRikC7*yP* z=+p+kJTp&c-JCW9P74C!{H+8HFtDjjwv*rpzQ|P%8IRL+`IzL{hT5&&NVYXm;M#*8=+|Qd>yHzK-F_

E9?(t!?Nrkj1mR-K)wk%JK6NwPryOd7{mdxCKRP(5RW+C|+IXj9`=Ng9BvD?f(&=k!XlVD^lQ9vcxmOB@B* zc8$BDWBiS`9~>od;O+(5Vch5S1aLiTq5uYynTdioV3m<1cqeohL1>;3dD7ll0}fsv zyr8bo1Z=WhOCUIK0Qv!tSFkR?lN|v%eCr{~SmL5%VuGFmY%p-jD@{G={?;@n z9rUq_e6h1ORPQmclv)@36rk4_tWf<7ES^Kh^FZ9z>xsEr69q5;69rWAB*6kU8uKlQ zLF3w~j;=`pW#g0MAdn}GlAUjZN@RX?d%@+UB<<%?FLu1BZ9<@&0_yiR{RA6LXa%II9N># zx+I}EY1*<)+JVjvI6s>JJ_2?6hZxl^(@ozye1d_X>V#LsfTf8>*3A!U(DB!+BiN3T zgoZ4K9s!B8+Iag0j9HYco<4x`&aOb8m8kt>Y0&NVne!-otzUJsc6XxhZF)@UcwJdv zuQRW)%Gi$T2ilTteOCgvAdoD`t%L|95=+Z{vY@^@?m7Vayc`hq*`~!1>dE)Y)wLQ{XL;eiA@ulLTl#ieb zc%%oYL%BJ6XQ1uR{Bk$jOgAUgJEZ2+RF}&}H>jf|-DGfR5mRzv6nv|bXIW%~{!)uN z2IXnwpbMaWM>}6&G-R}?w8*n=);`Ny9p{DK6y@A%Dd2fmC_hCDoW=u< zufKJFm7|O_!F3FK)XQr>{}@LWSG7g#ScFFYnvf4_?~fc6<|v4~V2?dE~W#5^4rDeZEZb*e|{ zvRD?IXh#`$7hLE1Y}1e(ggYez^=u0z0UJ0ol{ws@nPW2@5`>!ExV+gRG08!t+;)&; z$B&PCR^k}hX-3Bh$E!{_=qWcEB^*3?)d36ykZGL`9u%en1KLD8NH#`#ARcD~2E$I~ z$7cJpZA3kNfXhYK>f|<5*6TCR<3t_7VB2J~ZA{e#a1Eo4UQ>d7ek^BQ)@v-&*hgE+B8Ga|t!Esr?V8SI63eNdkz2{QPakkci2{K} zP-;i&L4@a)3+UK!(mojFMC)!vDFNsR*z$x)vpz3~%9MvbUNi-Cn0T3Q7qHdI^*K4& z9%)V*O%g`nuX`*Q@LU9>Sz=+S-gQDFn5(YJ>jKq)js=|;Yu0BQ)sH}Zw&_dK?u5)y zWm$1X<@~aP%8rb6D9^Om6^G|Kub1m)I_o;ei@;y)ddJIlSh8)@hh28OMJ9lp`Y2a^ z%7!xP)rK_XumR8~$|7b1r@{iSoiA)g2?y)(IGsM|)V8y8S^k7Gz@Ucuv7SO@>>Cpn z>Ss{w>oEox={bHJ+jiVuuKdU*qqSG%Gd3BJv5lyk(${%d^f(tn=d#-hjXtOz;JRUZ znkWEB6p%1*&9P1L1lIY&0-i6}@6Q-4ESP^jjNoVM|Hz57v3e?I-|G*>Z z>eZX+(uM2ko|D(i51YSSUh^+C9z3*EeFpu9`X%)@Q63*+gbn`w1ZD7p1QH6qGD&;- z$?7lVwMo`fAMHGn0VE5-kLMqMMQ_Q%ktK}*nI_MA0QC`SPw1_PUS47ve+-vWZ5S6l z28K8ZTaB#^E!NUTlL3^B>v(>!@+DCKUQ?oQuv7wOJJW+F3c6-70-k6*d6!#Vma6B8 z)`2W~qUwWgbg>lN4QR4#&pM{I($0%aZBX)$ zLTNp=EXe!L0OaC3D{V=_%2C50S*RsG^^A5zpV4eQS*UTM`FfSH zE@cXgvDVSpM0)C(g%%4ljW#H6Xgqcopl8g5jImZ@E^QPV*Ih430`Qs=1%L-6&Ez4| zr8DJZ+!h@!U}ggvHW(P#Rlu&$b>PZCXma3usn5Ytur3fUV$?$inv^q({(6 z+H4z-#lgiIZ3zZo{^E~to3O}c(Skfmh3+JvACyHqAUYM*QO5JBHlLU%%2jtxg)6r&NOFjZR^mn8qXfv;!d3ua5bXlKmMuENAw0aG( zosmt(JRRm0bZEo*GFMp=I3JFS&S}zWud)byaEWV=YmDDlz~6v?jBS91Z`-*OUtQdv z77v);TV74aPMl6xuHHzGzV7jK?fR{B{>0^UdgD@BTr@v@*nHH=dOBoD!P2t*&^fqa zGA0Sx*TFZyzu*|^FM9uE{s+$>SRX*+mIrnYXvahVJnZ1}SdY(+VOQa@*)dt5|LlMy zf;$U?*CyegX$Pn;*XIOac$JCxYT zHfpRbdXLWqjK5J%AfEei&5m)OKH!cL1vHEXVz$8pumgHf${U|gh9@ur+Q6Wa*1;m5 z2P6(G`Fw$J@i=glu^vhsgEl?#WB?yQ;JzWxNic;xiN`jOW72a$({=>c{)gx>h#D*{ah5s2?xu$s&ch+Crf$ZtITOQ`|R*zK-OT0631h3AP*g7 zQKxc6wAlJn0VdV;1OQT+k67Lkl#nf*$QW)OcIsc-2WPXMEQff5(Y} zR*W<|2DrS?EeXhoCl)c%tBkakI)K~-;DyN-q`yE!e?i-YS3M>s>8x*)BqIlPe7H$v zq@m+Nb-TYJusFED$Vcb`>}6R_J^G@*{NpYF^vY94AQ{LB0pDV1I)yr^QQ|;{=5{Qh z6FHEb=d1&zQ>BvyRIc?v6Yki9tYRiO%m$R%VA9(_M&$N-`zg3Bfgo1`httL8uL6wA zNPfq#`uw9%9_)$o>Sw02T~`k9TKiJRBFMEJ*r=|`%eYtGWpj8R>&%nJaY*ZRjL`Y! zWsobHZJWn9CXNMAJ_Wp9IF#GkdG^-*o)GkFtpRKK-qUB&Pd)m0dhFh-e#-!FEnqhR ziNVcV52Wii?oa0~TukdnPk3Umx^~ol9N0J#ktFN(k>0^L-Gyxtv z9Y_|CBmk=KfL9;IAL2nr<*};}lLaOLfa@($@PxtaVzNNKCJWV<4`9g#;y{cQq!DkF z&$1SKW@w2|3dTHQN{8b)T@nO9V=s9k#^fqjJ0u61FdTTzZ$0EK2{sV7C)j8!TjGF@ z=a-;2f%H4lI7%`wh|Z(q5>C5Z8*3M?INkHB^0^j#Nb8M`&IySn53E4iIHjO zxj>P5xAtVx8PEn614{C$*9Aj8p*-|he99|LeO#~#>eZ%~WjO=C%GItpre?#0qVh)5 zVX8f8z;&YUP#k1-uzV%5B`CSfs1BTMp)}Bj&KhM*R20w?ov!e7_$Vh6l5!jkJgtAZ zWIMF2$1t!C1E}&noq6q#>$*C#fieO*_W^k8!Tdq2uXdZYR$BwrIz>*CV&%b8i6Xa8B^IY-1j{#@brSC2l>u_x4j_CpHGG z-MxGFr867HeEa^1t2aCmz_STw&fSyFoxkXGe&unk-fF<@2|VoRZ$un4|5)B~z{i*l zFRYmV&VEmQ4S{|{830?{X27!*{@`NqRS49TR{yq^Uw6c_3FtfhBjJg{TK2mDeK7qp zZapAT06Z}$@~USY-%-dij|VIb)xNwoIRax2>&G}mo^9cWE@cr~C&x+&<^^sy*g0^N z_{;h^{x)dLW}O`8O@fs6_)&LF=8>hS`3&jQ}Qh7-p0MI@dqd_RLIAAD8h!+PS zj}m%Jh%9RtR{*}O0D+yHH7NiJfK)3!dkc0{gg2gw3%FHo+)THUz|e+GKd1O25l=R8WCx( zZ!#c3;GdVqgNw^68~#;B>@F;?uAAM8`RUcPxM0b|!U5A~e}iMOR2n6K=MwyRg!1WV z>X;~~zeDNmSh9e6K=y+I)SLHkqX7>!);A%L5Dfe`;2&c$d(iax1o)gxC^MY3UQrCa&5j zpvT1L!UaD9CqEZMhayuwN+R1e-WO4^B~Lo@*-@xIg3g4CHYN!G&nf;=Q8b%graSt;F!L+4%A z>JmI}=vA(O-tD9juveEhJ<9V#N>GW2j9oXsoqz)zYI4^**2qX^B0lID!kYQJWpJY~G z?eE^RH|^QG;7P#JG6L^?93^6c@F7OGlZO@o^?9W6Atroq>8WcsjBoyuHg}RNEU%jl zo>#CEJbkwMaKr+?#o#*!DsS<^cOC9%XQ9QM7?+w&|2BjMet`8^CngF6^&V%9?@Gkg z(jIt#FyVDci8S8#wa z8KNwL69zOV2YKoV)dT!|G#3UIrrK*glw3Gb&u1K<%WX6p$XJK8FEUw#3hI2J7DrK0 zbbvY&$|8m~BFo5*FUqt;UuKhl=JY6|bI$VSELGne>(~JU(aG0i1D0^i3kHg8mtR-x zbuD0dI|vA()1X{!M5a0bbhc@BlsjGYIPXzgdOX?<18yl{GirxGefj_<92HW}+Yny+ zL1>>xeFE6$X4lSL0e#fz7}91&FD3emb7EgvU!nb&2iny+C_0^w_qyc~D0Xqf< z4jl1UB@Z05z-CE>|IG(W8kTUI;*j~P)f09Myj78X4SWPk93Q&}xNU$xLWN_|7a_3I zr>HFYJtPS4xt*U+pe_QpAo$RsK9pE}wbA%$W1lPp8v{PH)RKi94`N)%I}0s7L@?GM zHYm?HL_mi2$j4acv2bQ*p`gT6mTaGKRY9APUSl}G_MKn6gG7PJf*-^WB!QZAIRT!8 z@1?rGU_k4c9QFSBGLFO_;Wf2VODuZKYKmiZuSsgk{ z$g87oI@)O+FAH6Rf6-5(w2eL}s3)y5@`@;TUi1n-rh(^9*%YmI3br$)BaQlW5>stW zA-0eDQ^y2220Tu*)p64C8u65M7|67)%SQF)V3cH#uQrem>>|(yp8H5YS|3pc9>Cvj z!2N$s81g5Y7xEVvEeXK$2e`$6*BgB&;lQDE{`krC(~lyUKarlko`1a~@Go0Jv4rHn zk_tSN;D02_aQM)&B@y}gg|(IAY2A{AwblN)g#32Hlm74`9=7B|jA{d*kClgCE5I%R z-iYu&HEl_N%Su9UC-9`BfV|&=K(c_>CPhym0q}Cge0-sYdMk%OY+!kZ=we#oDI;Am z6+0o97>ja*8pDNW>?WrsN-P-pP^culkXJp`BM61>Ywne{#G5IxqM)+MwaY&u;i0S)Z)jz1NciPNV~r!!~H z40VJaYaXKA=se+XsO$P&WT5r@-L61oUJ~S`1azz^t0*$P_Hhmote@vzK(PUhw(?wT zwptJ8j`1cB=vv@fiN~T`X~18Ld@Ki9{6)w`O9oK-pNF>O;NT%72^Q$_u%aao`xh3| zla?GHkTa;`4>qC1+IHVzz9RdU>^GcVp-;(4LVla!rXTwmE3(mbX?dfQ<^rk8v#0;SG6f6d6slg;E9-g z0NJkGo+$QOueDQTMuS(thR(FpRX&%PyVSu}L76-5AdB{J%9BBWFntUtl#_;BKUy>s zEQ&4qo#ojs+lrmZVMCpQHo&Bf&HfpE0 z_^8LLhiBK1dNP1#5BP8*-)KOYA6h)%eh@(%w+DQ^mo<*R?1b~x}gM#=#CHrg-=z^9zi4&HR2->bGI5nz2lcYWP%4Yx;{&u(^w zw*+8?w;_-W6nO;NfL{GSV+7#|M2R69V`9wl`evuPiW28k&zQ$ps4>vx7Bg!cH8_oU zT4E{VZH&bP>p09N#&~>r8M-@86mXwHlLMB1uoCD&)5i7efI&~z>l8YkXdM91%!EYd z7sUp9J6hC#}3MCfFGd z*$7y)umPfLYdTT3xg=YmYuD59o0~v)|E9!C(qH+TuJ= zp0*@G6NOQm+K!_2CzlxSPHsR+Ku#N#Rl4x;c#vsZw5htHuXI7PpVcXJ4#b4PWj0?r z8=Z57W{Km0R=MJo&25YU)&pg_2Dna06H`2V@jgoe{B_4emK@+gMc+v{T!GyLyb8$m zi~!9y60|J@c|el}@P2!t>|Eg2KiV1j9KZcwwxAmvM)2ltz{tk=H6#nx4w3~s26vj(*L#T_gOw&9!EaNT{cOA`$%B<{SK4G8ig25f zEY!Hj-2n1p-^Eh{d6u+MXngkLSRAf#TM`9Fc}4+qlGr>^u+kHR(wKJEQIZFRcLXO< zGM%PtCr6uVI{S!3#lpq-V(s)}u@e)A^(-zx*lVL?XC|un<(Vjk2VZ?{CfVS1mH_ZyN+W8`%*WLce5d= zCp{WZ=c}yWQJ`%^cYTXZoCmPM{8Cw+S0cwTAalLgs6F~bTEY1aJ#MY}8YmAlQpa@x z@Z6%DfE@k?w;1s41OK}Wcyj?IzJqY^NLpK3NsnK?<^deRnYRQG{B>6W!QF2s6ghxo zfjb8P>f<&65(ei>5`kobw+>*BTN-GK^R~5KWcM6{0NJl{LHfBp19hD{wv{OFP+1a)~A~h-zNOd=%?L3I%wsz=@)j=x_8?>c5 zLU}m;+*Z@~$bkv#WUL1ee5@TL0oE1++6aB3Fb4Dt5+kra`b1hw1&)WdqFgab6nHEG z=fyV&G%<*nO%zHSpo>iVr21HoV>Pk^jnex>U6Dn)yLO^i_;?rHD4FD($#Z3T-l@$z zoH~7~o1Y_~|0uC8M!=dse9-*V>Tz59M{}}J6Na29U?&03Bp`SLng9UgQR21%5(Wf+ z1ap8sW&|b*fVK-BZNVl!d*Hs#0y1ACETvG<1&fUjNMglw8wOb^_wON zn2fk+wIdVIfPR?e02mk@91a8rkb@JU7mIvF4d5aR=qE@&VS4lvQK6F)lbDMX{1`1* zD=4GBZuJ+SO_q^XOvy8P2g1J6$q*{bb$Y$SoSQm306aln%V={a@L#0CQPY{{GT$%P z0C7hsK?i`7CfE+>E`S$3XboDF)1EZoc5a*PCsEpiJ)v?eNR_D_5!-Ov^6@DJ+M2Ot zDYDErI?9r1_^j_^(2>-dMLHp9#@40X;J zI{85VT7Y9=u7ln<+OHGx(D4|Z-hjmR&>{1Eht|@ubtHMG?FYnh`*poxzk1j5YmtY| zubKbhdX2b#p}l4~4fP*me}fXwIK;nj38>F=-hw`PEuFSwLCl(kQm!w1KxrqWM zATJU-tKhbLEhVT{eoj!v-$+29blL-^fv**!B<&~x*2@-bXMms^0xzMHub+q+l;_E9 zlfMMbUfveQe^clkfXP@6^p5CQ1nN{84QJGxl$Jdcs7toLQ?vJTbbDKLQp@ED5z~vPRDZ7Mv_l%5|X< zQ`_z8033lQt#+gvnq#7q8aXREKF~-K;H)X{^aaibry1c+b!20*=8Ojpx|BUM0Fds3 z#3V$ofn;7#;bP5vE@R!yw}q|AjLI`#>Ia@QbxUer~L zWUm1}PXb?QpEtSeW&icSd5wPKSp~`zBN>79eBi(#qfe&wrIYExnXBo^*S#Sm4u5Z@k`i;P!um(oD2>KHR{#X@00yWZ2L4Dl39R$aE4+P;zv-IyKOn`qx ziU|SvDi@n7lidb_yzWShb{ZIybf>{(Q-M38#7>Q+k#@}4sdpV=JmYo;i~C$#m?wyP zHBn$tWU%9X4&Ji>x_caQA7o@h=ynF{C{%`yldefhsSg?_he4?}JTUe#dLyV^EU8DIAe)5Qz%By1DB~iHa)mDD zk)ComG?h&O6R?-%_IVtXaGKq-2m|1F`3dnUyDW!O?;P8}(a{-$j*gH#fCZ#{kL-Zi z7U*0O#m;1q6TAh(I+ZqX!8To}TiT_a+n_A8+WI&Yn)O(RHr!F5P1F-;Yf48M0(aB_ zdR#w8O9-{UoxUK~EzfE=E$sm&$G8JpZv-Tuq`T`~N&;=EOy>h>w<$ECdIENw+X@6m z%K1Ew+JVl$_jGKuQ`VZ0PSMVRdj0wG9LP zYW2Se#t7nr?SBCN+ygsz5G*-RKi|An_P_*z%bKyb7tY8-NW;O%i~aL;=7>WCfx=@KC_cRlRnuAf7-i z%L%rV&q+YzBl1PTMeu<&o&y{~J6xzJ#{(tQb25P^G%JH1lNE~yW8!U20OQq9(l$}S z>)5J%1hoaC47(yYo-VWzbYYKdDMP6Xx7oM4(0A>DE2)EThmRsla)n#G2i+cb~uA zu(od3cH>l9T|S=HkDN?rk6kjmQ|a)LRew!V*E_)V9C@H73+2^EwNd|}G)jM6vOM${ z!DIk-z?8qs^4unQg?_3T&s-o`;IDJ~*Uksy*F2I1qxHEq_xUVWm+CDD>Od)@hyJ33`s;9Ib*(B!PM^42*}jS&;1;4?Tjn+7O(~*+wRAkwUN9TWoI~>2p~|wv8s)iVuQfJ#9#_=+z1M4N9RsD%UkdO zO&jNhW-wEIhoX-GEn;L-+bwNS4!g|jakCBOC`SP~>r2}PCJNC`X(kFI59Utm+C^0%C z+b~{7EG{n2T)#U@6y&uD?F4u&*_qnma3T?~@tp+PmpUk!D6}Nuo9V8*{)@DA%fECz z2b;h^^1?>Bf|DuA3FvVCn8+9l@KZorZX<~U+h@r!1y5w#W(Vj3Zn9RFH2XEB2hau) zWu#H+qNhFrHndY&L`n#gX__pB@zKRT{ufPuk66Go;pUWLS;jb7h4X#vXCpd}6K8z<876Q|ROlV{S|v-f!7aAXPo zVs^c=&FBlTJHS^R@$CiG!4_X)WI};5>J{pz)CO|?*r5%}&Za>9CV^WVca|)S_4NHq zYb9A&UrvXY`}ontld`jbvdT-6ptd<#=wng@;u-5O4*IUSfk7Q5Y+PUBDs7z(vM%<9 zT?38NnQuBGUcbpi0a=A62xz<>eB!{`0iJ+DJC8x}6E~TjT%`@w#_0X~-=4N?`8QU+ zrw*`!7dy&v;Yf25!7kh8l0fjrxpUFLKFd*u_1fgZSdktfk7s*>gp+!N(SlI$x~NTV zAAEo92+Anua|_^kj)2xtKu6~_(m7p9IOnEs?P>|YjZg)+Be8u*MhB=20jZ=>lR&SXC*=0LSM1owefMFh_zbRDJqBd}ZLq6=qyc{if?s3g$CHpG==Tv~{Sn~5)P_DS0y@}$ z?ru4hXTQ|1VrP`H5!{#KVM9w6=+~p(cMBw0@PxqqejhIoPYx|v+`-O*#27$%*rILT zs!)t#U6eCsGB&cV%Zz6{RcL*W&yah}W|?Jd6EtEyVm{-3ympg`f;SQZw_@gmAVU^Z zPNZTW<3MuIIY7#1Pdsu2YuApCTMfRma3Y;NeJp?bX0fR8m%_TL2D$FeMbR7<{g=*dFaIjFk~3ixwA+*klvrOn1m zyb6h15SBE6$LFqTlX*)3D7R#RvKb(bIoPX2m!BA&Aa>|rNrwpi*S6SpE(AG#EaVK_n+Lk5& z^KhqjqhI$COcc<^DIlS*b^L=pm8>200K(cV^%=vWX>W%csqmQTCPdt?# zzx|Xa4Cl^Yv~`Hv5O@t9Nk;ZP@C!IUw0$S2{zQC8lo9kR5;Me&k1z zpDYG}^1XZCS8h4HwGIqGyExDh+(}T|RwtL3M4bGfX$!C}lLd?oZ77T27}g0YyBP}D za8X1Z^(b}WP_Cd25%sDAMhlvDEIA%(L#RC3jp~6{2R8*cO5II>tkFGBJ!PW=gic*$ zjc?AGj+;C|8`|R?dTk@x0Wq*l0l!j5@(2Ws%KQ1u1~Y&`yUIY57kRZ)+XB|t9R-zZ z9mu-ADNI-E81$_T0(!Lp^cT76=GjdF*FfvV>#K>RUth@N+B#3#px1Q9mM|X21U>a! z4N%(&a-Yw_<2t~O^Lzx@(FSV`0sqh;1f|t<{N$N*&&A8>z6TyoPd@c*dgj?Trq@0G zM7nn4zI5!wX|q{RD@Tr{mBYu(|1PCN<`3B}*Y2zj$uy3u`Vm^4W~Y9QG;Jswfp#d> z*FvYf%gXLS=9|9r*+>K|Sx_1129u#3NfsC{)Go&nla(ZcyvvF`VwIP$FRxZIj%hrr zf!^S43-3T+FR>Hgaa5*2d}bYw<0WBnlWH$`=>!vn1hvly>ia#p*(y2M+DF&+k)6{bLkWjRyLo^EC9MvIJY}#WO}XQl0n6nNI~qKIeer=<@^fP}|zXmO&P6 zYP*s4_KJ);wdw4FEb<6Y_~_D1-@q4HY^%0oWu{wQ-l8Bs1^0AFCz{J?PJQn<2_O8XsBWZ3yfv6gi>sW|S;MRGXLt48Zm^ zW-?ZKiMTqlLEJ5|7iDd;#PgUSC}@kZR?JNl>I02~M1dV;=c10CM9D#_asiHm5_%*G zO?EWx*zw0{`}RLK`n2mI#{gq+a533#2h*dZ4F|Gjca<(lLV55G=L}n|r+{oUAr;W0 zomsogL#~JmBif)Xek6t0h0jiq&o*H}2EC)`;fQK`MW%o}I-)7SfzmFPj?xYtui8XF z566hW5aq1PvLy<=Lnh#eaZI-hx(M2l)?EaakfC3j{gQ<(+Jdd_GK|1rmy?TWOeG32 z5VAeBBc1syi@)w^tKgRzqa0vcC~?eD{RsBWF~`34tsFy>4XxL;7r^U=erewr*wqFy zTvOQ9>u#V8?Et^_Zm08N7Puu6^>Ho(m?yNOo;IX$tA#skY7+rH+5%nIUIA`L;Q58q zr!J&hw;oPUJn>ArdhKR9b>c!gzH!$7F2wTcQ45;+>y1bjP!DZtJG||wG9It`m;qGp zevPFd>v^16y@EFCE1RDcSOVbBC=B%U=Z^4jqx$@c6^j+zS-``KBO5~AgqTFRWx;rc z(rMF?c1R*XnZ{1S+q8B%xg-OmwLWzUkM~x>j@OKsOceA9$OEMTB6cVqJkwdm!J!So zPICZYgG7Py{rlgPe)LEGtF&#~U-)a1`l{sN!}(bS0J{vN2@EbSy7F2A&~u_A`1(aI zh!Y04FEA!Pv5Jl~fe8s4otT-<08JeqoXlCa7}+O)&UJT}%i%M;vsHqGK?jywN#8kcS-u ziU#*ur_f9ksHaYOz<+tFtgF-L&5{#`)umlLb{A|7HOS7`5wfEYbZnbt*SE>`T95_p zb=8)%m3MTm2H0`zIQ~wT62Nf~XjShv#>eXc+jpdNjdc73o<%wBA8Nvv z9rN=FD}Elc{$Z9z|H)4Qc7*z_2--~P=_6I2eP{Eb3b(anA?_L|jezaJ-;x3P`wIIp zN!lN3T(>rnEU>PD@kB9`EFeZnoI;F)p2-5^AL$6KSL3JrNC(_TlLd*(0AsVZL0R1h zu#$0~*Nzw_3YcWAGLnUoFyKIPaAqo%Hz>~&jGb1X;}~$zOcWe85S2Dy5cJ}>Y*0ea z3kg0W*P{%2Oh_&&>J)4PWuB1zZ3%)r#;r}7jmd(bJe z7$}s-aluE>4)EZ_z$Z`}05((YDPD`62HCz3eSa`6s?T(9!)Fv!roo-{am@Z$J=8Ah zM!>m_+v{ahb{@3L-!=hY1MnJF8@V2^M|)MTx>Ap*b47GrB2Y@&#W|{g9Cq=eOA+Xs zCeS0qbv9au4qLx#D>iPH5L`TUJzcx_KstB&QaW|~eA-ySEeL##FRyjf!x*Ta0LT+; zKgt!VSN|2Ewj(`#DBA)kqc2sy%F9<7f#}1XMk0Y^0l~ZI6&^pJvt+?{7Wj*0*g2IfAl{ak>oHs~lRz-eD@>+i49p}7xbSc$ zXe4$v25%w`LWOl&X`ZaY2fDx?X5`=xpclG9E_k{4Bk1dqob*7Qi1Mp{3K$=yiOB!^ z0D>tOZ74lLcm{gvN1!tr=^&>L&Ve-LBOVUe={Zgg$5cl>1vd>b1qU(_Z4ecC*;6wN?@sZwSIcT-^7@)wDcHU*6n@!YD={AEN*FiqW5u9dh z1N31=0(G<=XtXt@S9J2B&HVlV9A_dPi(_4{OSu*!IjxXx!87lGD5PK2x9#+XPRj4Z!VHwdqhCC>$Y5v^fvz(C68Y9J+#f zl=$*qly@+h+AAGP4X`8BplIh2bs4jAob!l|h{2u5U>%fx>%l;~DR^6YETs$3-n{-q zMB6xa#Apm-G67!OLmS$T@}#wms*^wC-r3Fp?M8_Nc>w1@dJ0$@Or+ylA}HtDiu_3D zvcc{iL7#xv4e28Q>ZZUSE%ZxMB|+Q%hmq15@SiN*mzquUqtW*Y%xCj?1)}reniN>F zfZc+KLrWH;3~s|@0dGPKY$}c%s<$B+gJSG*Fi9vu++p&1TfM|ct;3i(ga!J}Ms^;$ zI|2soGI%L69d}%#nkaz5qy;cBdA~v%V1tgbWx=F@a-P&oGEsQ$O5jACFDHW1Z#@*6 zKzkVAPKLpf!DAADM55|vkl$M1B*!FCJuf7|2^Hmj9HBW$eZtKFY@%(W+r;I<0X+ri z0od|fD2w3vMmg&`Zzb&DI4ILH0!~nQ)Ezkw+EM4F(pKUZwmQLiKzn1m-f8kR#?62r zGLlEYZsg<%$`~kB)<5fzOW&OcvJtQrNAd^{hM|umpl{x$m5zZ8z(j#O>Ny?i;T2B? zV#-E9Vxx)HJkYL=q39G-W24UxpkKTmM7C)>WzkM`%Evjw+YOwHl%s!?Q>Hxaaa__7 zSRVlFu|{CawL^WhZ#HdhqKu&3XpO53=Z`krPY7tIJnW*6iZ-NaHw^3s+JmNVBu(CJ z>^xCYJ_3BT*T-&xv@!JQC1G&B{4fPHRv?-1TM&3&L0_93BmqnokO*k}B3)&8ZBlF^ zG?udM98*PC;xlL_3!S`_6&Az24UxxZ6mShNmusQ`M!^a=5E`hBjqYg}>PfNV>>OwT zY;gl+mMH?%0|Gr=sJmOitCB(lb-@?aIPbru6F?aqkIbRJ7`aNEfs7F zx)JCf)s8+@L3`L`o3R~GKdiU9(*438fwv&I)ekUMkVb;Qha2%ABxF-Kc*KHxNdz>0 z@pXT~Z&8@N$^eg#Azm^m@jzc>6(aNFAtp;Q;6NNNz~6dcJ?NMyV2)s20F#LV8`K7B zk`R&w*!W46B%#xx(*>~cfxt-@TLL;H3Z(NOj|Yx2l)P{R zQQq6M39R~Dwh0Pwfn>fd1^_g{?KYKFKyJV}5Ny}$0Fs?U)-T*<3ut|e4bbFSM;jgw zpwpNF#~BVa%6J^oaBBReMBNn79?IxwyNAh)Z*BFCd=}HcA|uAZ!GebekQ}7Y*1TXy zzz*wcq>H%IL;>xg-H}ew_pxoSN5mZkK7SE`wuUfqItOp2}m1 za|D`9^u-21d!*;V+md<_IyYfUdZZ`Mxjh2c3i^w+66Gi(jrK^-1Nt|T1N035-{5Gn zUavquQPKyoBn@c$l#KvAZNW#MNuF)RM1lTTX+D<#UiGwbSitsM5Ek64%-}Jj#3Z05 z3+omuuxlW?4i>DDB)~>v7(m`}xFidjKuChXl3*Jub1>!_jrvR$G%j~2@f>x?<9cIF z5OWg+90(;cj4nA4+B;KDfV@I&cv7Pz0bruQ0RVE_WzYoB@#4}>>yU;GCL2y1lM6D| zQD6eVmJ?7XNQB?>vWe->O&AY*)*(%xy*SaM9wiq9Wj*FEvPc7Z&XhT%KHK8rCa=c; zO~6ha(iGqT)i#y{f&!c$b*d*1puOgFL!wahr0H}iL#dz)c2U=(1r!Dvhw+q0piPur zkdt-@9$RG!21cyId3FG7>vp}!E3EINaUSgBJj^BvW1uaxInqVMTMz6j$J0v#&biuz zb0?2-bX?UFupwwaD_awmDWqd+OThd4teCL6B#6F3C z8aFjok{`ujfOS1~6D5X&?(QB~$vlAAbVq>=)?`7@bpQuoMgm$63L6Xt=n>ckA7=E6 zQL-TDSf4Zi8(d)OIItWz(3l9g)sQD;ehrd(BFpjw;Y0#G1!S$9xN4i}p5JT&Qw|&S zk+Lbkj!;=GMb3py-5AZmRGHDrgC-9LNq!!p9gfi)S#xf1dQY_amuHGV3>cc*ML@_K?O7)FjN_B)E4bAFvK?UF1$tI}bQE%8~D(f6}%o8v#C% zcJ!O{labdCEYSxO%}1Mmwt(%)0{IDeGO=PdAzA3+2XvM!AW`sS0m*>qYfLKf3+>K( z7Quf+A39juiLtUn**ReQlxr-e4PzF~0DaN(CsQ9Nx;G7!0b@$ zEC+z{2t5HL3OkXN0Rc@ea1 zn0f`|x)8wAmNWo8p|YwQ>^f9kpcPouuxA~DJauqv%1;5#gwAnF55O_%Zi4C}==7#Q z2ds`h>L_#C`ginL3+h$h@j0MiEkxN2N|5P-P@x$tDDQ)j1h`P*oZ04Ph(TD}RiHhz zJEIG-c{>VzUWK05M?H67UNXb+0IhwbO!bX#iBuiCVnJ4gF^H zm1+l?K6q3DUU!fzw3v{8M0z6NL3`GQ$%DTQQ9j6o(%*PMOoFbIj8lNO7n23VK_m%| z95=H~*@Z85jGGaRe~i0bX?m7y1AL9=1mnEX%maw&9feYfKxHNiJfNRgNf3B2?WCWq zbsqLp-~i!7eMdnChNXfREA!<-ltFUZO6W0RxDYTI{9?()2Dp6$eVi}~CIk%nGx{Ra zQYUSX*@^9wRzRJC=cByRj*=|EK~i6J1=w{U4F{plfuM}z2f#5ZPgJ||D})YIZ8BOi zfHH2QQm1u6(~(mbp*lFw%r{3J>wab768`C&Gk7sGi|WGG>Wax=gleIMy`jhr}fd}dc+3TSU6*R>5A$ByeB zWrvb9xUK0&z6GF9!m*W)dVW_7&SK;<{Ud?U-%h@)^kTDSa z>#o9DO9V7QV0`j&;w=Y_dEU0!FeYvW_9e#S$n!Xq)dWEj2h9b5$wa{ecfZ_-| z^$Zl`(Wc7&sz49`+V=x`p89GBnH^hgSf}cxyi?$Oltv6((1&L2YC(YdCy%I*X>pOGBkngFnN(6-7(i1oOJb!`)B zOZ^B@-~3B&2lmG zcNPw>SZwp>94v-ON%*dU@DX^e(rHT+7}q>$03>#fV(cgmM;V|=M&vOU6*W=7#8(B3 zJp+--fbSxJMy4{Miyd)3Bo+#sAW9?(QKp07gEgSZBeCGbz%N_`c@8qc-=9!K)~7}je3O2P{x23 z?I}~+XhS{u*rozW7U@$=6ht-!oDa&GW8?V-;rR-u>w>KUI&G7vytO-H7i_cLM193T zrq|r(jp%gF#P<66r1P%LO_hzH`q8=|uzt9!K${Bwjfn!ZiBi|8f^xRQH9Ze#6D9pj z^*a`PDMyL+I(?xP>gT3Fe@I&`I~4y*KTQ9uWkcgVStt)TIwUR-9U1d%eUcp4c`C=FA5xh;ox};SG#N$r^`g-gM@NX_)jN&|U zeV9vV6PUCWaBkiS&`;9376`u8fNO-Z(+?h8M0-&-0@gEZeO(8CKs~{}kyjt2GL-0} z>PbhSJ>}IeR+t=Z&~|83z;@`Ho6l~b-0kD@3LYz3yr}j_1pJwWKDKmNw)j$RLFhLY zJYJO`UV#LG$%M#f;-Ho2gX+3?s`1v~vCqI5?a-Jmj}V~btp}FO0|3n5E>QreWF@a? z4YLD&Fd!b-z(LSXdpUDL<;3km=!r8?fQ)hsFb0SNJq27uPF_zEcwx##QlLFdA|wj` z{jFQm4|ncND@FI=z5CL?z5DL;R!J1P3DlvNqfH#2b*8`tqp}eX)N?BQ2++epMO)Aj zkYn+VbQ!q~v<0AD>e#;O$m+#PM)1}V>t($4;QDGa z+ctnUwJ!Bu7J$zEY{?XD6qISAz>@7~J+#Mja+`u$NBGe-YJtDWaLa?VLgx@=xSlGX zMYG4TXZ5o{Ke;Y+&MS`+YY5|{vJs%eu}3<9>z8X-Wl;~%ufSG$h58?~fj+nlTm3~x zAo!!C?TlW0A$=pp6ZYgg$ZmkvQGea|2Di8VAqk+2v7+Ol$Ie2D7ZLpNiv)qsEcmU2 z5U(8A5dg~0f+hUY)V=Tc~d!WSM!=)|I6(z2dhdpgHSzsQ3ISx!F3NcBj z4dDPx7MLhl=_geVsEI;M5>Ud<2ek|Up@{-Z?gFrV1+ykxM4hDIU0*L=qXAAH&_B6< zfBIipV(<$`W`gv)_{YEnfxCv!f2)6tfIp8Zr=v;nYixOnnbSvy7q zoIT3ib_S2bu>t5*RHkUU{A)zz)Ws5r4sHY-8x9WhY@}n~06JspqMZWm_0GD{l(Rk9 zs?PPLtO1NLbI-i#;0S?UUP|%?*x=m3)85Mhm3dGzT5U-y55QLCQBN6wb5eb#)xOx3 z-dVK$|9)a@uNNh2|%=q^8>pIJT7+_ z)E3uU>u@er{T%4LBl2#V@TK(QyS~kR+K|Us#)O;D^$Os2%}5^CFlZdx`S8X=gtif( zehI+%L|Fv<9@`^70(JB3)bGMB%G5WLb{^kNz>a~)0F51hCkyj-6%dzj8v?IQu34Md zSwM18k_e4q#KFTB?~WMVB?~P+)?~p-w2fCN!PhtoAigs8N~{GuP7@`LYkX(>jQdzu z0Ol<)cSivSLj!Cyg2_TVvD`_5on>ddLuSXpsypDkmLN;6y{oi90VzpdBagJirDE z2W_?mF}uJ3EJPk37||$!>ImkcI03cgB1Rc$2Ii5@QFNGBaBiSS4vvlxz+9ZCSHNkG z|4&2mxF5GYZNHjL}H0px*;PQ^rz}?PecVr|(rC ztnK&uS$iY^^~;SGA5b!Obo3^-AP{%(>E@a&SjpXhh#D77kDUc30X60!9u_!XZdbrg zV=H5>mVno__Q^ALYYgXSoT?-`9?z$_zYyW=Nb7DcC?aM^!kS7!;BIQ#P7Qmt<-Ow)t zw1vgWKIAfk$0GPFL6h~1l_h}18l6C_lQEkl5ad-(=Mv=+aBP@c4QVC{D#Ni@hk%Yjwb~V$w;WUkTk^SVI`9O~ zU*)Y1+t0k(HuQD?ZKHeyKBq9c{+u_I;hdT*AiRNq<14R-a~-xSi|c?q)|A=;zDCO% z2;^ChYtn5d!1kk@K0|#6#+Cj>?MA?Ok>;}rPRkFV>i_Kclu@q0k2I9%Ym+tqtALDc zL|p{@y|>3*g(8~)Z!ch10XqSr>toO%Pbhc`;_#};<@N&MaZYv&4oMP_k#&xe47i=4 z*<@Xey&i8(&SP;Gp-U2kM?09;niC8Y1)w{4K|P^zz{)d#7x3AEN^@XkFe^;X=Ma!6 zQ0~E*C>M(t4l-O!PE5-E0t4ljK55E3n}T(d{Z6^{@ZH_J)4#CtsvV2^Ji*$8brgPf zQGjnU_RnGR#sVWt=h6Cigwl$1M4g5XKQp%RZN zlQ^uK z-~~;z_h`$7AN+FXgrM#F7Z%cgcK6-sotAN3HT}P|MB#gT_M|n_adN?~PP73wo7~gr z7jgvTMC9kA1yt}_MntbQGG_j;R~c;p1Qp7vy?}Bi3f?zIu{T=V1Mp72){T0vS1^yQTqtYo+5YHUO&@Kf*_s6uwh{+Z3Sj8sxIYH!CY`dXx&@hEUm| zWs9{1EfH%vG>oq@*#$Yb(zt1JR-kk<2J`_xAsi%?||Xooax z$@3T^9)OdGvW9*k!j=n>3w6ZvSC7i304Ir(4x>4ajLc_;0$Y@K0?cXUhfb`>V5@r4 zu@253eSln%6SdqPWe9p|GY=TAD8sSTfs?PcqEj2?Y1_#I4IL8&%4v^M>w-p`s;5qE zoVL=(Ky9R+)&+fB+T9FD9HK1lJOQ{?yk7Ns7CHvKI0uN4EY2;$=WCg>^4Qux-~5e)K8O zrutv?$4c`Ulo1*is>}i_cN5_E)y84*g|zP|SRIWqIUcpR|e?ZLzV z3sNWlyo5n*wTv{5Pum{-LZuy@0%Z!yP{IyQD%y+yTP#lH^;mp!0`2h^kJ^lY_SB9} zlc0>YaC##hWdv+7r}2HTMxplc3xF%hReu1_3W<&Kg_M6lnW`3;0<0~z4`G>}(a1p6}O-$0XR zJCrG!-_1YVU`rY0BS43922J0trNZ0d^9rM6fv|w?I|%sYK8Qs%VZbkWO%|{lVDcF2 zDv$t_+YOANjGc_Lv}OC06E#*NHWS7()@qC=G#3Ddi2^25tjLbk1F{2hV1;*@_69#0 zNe~W{lZFik)e{9P-L`=3;6mx-^g1|E*==Aue&Gzb$fTo=K)ak&QAfR&NCbF%$mRj< z`hqCQ1CQgAFJN{-%r1_s&x;cDJg_}Dbkb3WQURwOWds*D03Noa)h3p3;`p@_?M7hG zQ0J($V#+x~7iHS6VkCp@lsy3*KwHXGr+^LD)tz8yyTP&r)_Lvn92|xAfNFH7D^S@~ zqTmR!xj`DXV$Z&^U2Q)e%WZ>f3b2j!^;&Ru0XCdBvo`J8vV=Y53biM%wmJtRygZM^xgVlhpV1;`zy3uR0e zS`6(I2ImiF`x=uaHfub0TeOYiSie*UU`;7z5(Qptt;7ar4mL;-00!@P5`?#BCk#6u z=rSOB>w)lrHXB@2PE1@d9eB4XSsY8)d)uWx!FuFjM_XV#S=vOxq8q;|ISY)X@_AzR z6CA*KVOu}SGxCJyV#4uBt9%65sy&g9*DriJr>GkNcCaVS(&@nCmku2mWmAAtiZb>q z@|dfj$&+rfMyoA%1e&u~ryn08Yqk+^wo^eTBH9w8od?)*9c~7f6rxRsV&C;OwA~%c=?bXd8ib1z?SFSAjC6RmS5*-3U{*>PwWyc#)4#e+65#-Td4%c+4oLPgNRi zHecKO;|QD=eLUg(AaUSBi=GS=nZ^;uAg_bKZ$UlBnig~TeIN(g#J3eztz5Bqh9rP7 z4|XLcRxnxcc0_KdaTQ6#K}i-Eb2Vu&cU`}gMK4B!{F z{DS92tVu+nn_ZqzRac;sMBBl{Qn^kjovbKfi~g#NwAymfprlTB6I2cw3jt-6H?)O| z>&do>#`lXJj<)KHjQR-JDo;m(Qh_;zUpjO)^8g#PJCa8k&I`8Gp>(>G5$Ff$DH{Td z0__u!u~gvr>_bdGv_60~VXLx{9e}=aEp7(18T&hhkuCewm-7<^+Bybp&ckRNrhqZ< zpgzz=piLdKd`%kEHjZtz107yxMDT6;Ty}K?Xjgg8OU_yRjRw-RC7<=PbpZBLWq__b zY@>tbgQcUj*x4H}W~7O@=Ep#CM?f&>~w_!Vua_l+@Bq5*;X_Tpfcy6)n5kHkE#P(2PM}u^1E8?|`8SLV?>Gg`d+CmfPb3N@31ED6Ic$utGD#M4oX#;CAkP@i_>DGj zZ17l5TvHgMnke{y892z=xvoJb2IR}Z{UA8G!bh;JYA3v(pp{G%JeyiNn0Efz&b0k6 zx2L6Jc@pgWjh$)Bzu1xvo+^V`1~j8x=qAe-PqRAEv;$mUzzLyx0t*1;o!oZ7q9Uym zIMZ!XW1P`0$3CMisGJmJ8g^K)pm~jYI+p-!(TB{pMNC~!V`1OnpCeISKlusiE1M~s?RT%&oK?C(fdxA;rBS%3ARL+$Sf-S`;IXC*j} zyq%yj@@Tu+Wx4VykG3Ol{&BA9{3FyBy9=;Y{XDP_DjTgM^cRT&>}f-gr!8pMsZE6X z3A8<<6B`Bk3LEuLBhat0z3AH_)J_roEPy^J4~%>}Wcs`UW%I!26}lK>AYJ9yF(`a@ z+rjx32M;ZottATBSzxlDago6vG)k`*ZZFgXA%M3uKx_Oal!uKU&%m|EF`k_w83Ak+9ena&y8GYWofh7+kQN?UNO%9|cc*>t+2?v*9JEK8 z7kS>r=48M*lHLqD={QbPfNdY_6}=omI+s}Bd?G;__ji)+XS%>Iu3D6I2KW^GL!(XUDPX2bjeCV zv?18;6m&ivJJz=w=VF%U633%{2H_S6p!V1mQ=QAoy26?R$a6i8fPRpUJ^=ib4~Tlw z3bd`h3Lvj?l;~%Z&)O+ir}LXLel_#x8)b^<$HBvvK7I;}AKZZ;?=*H03J{zLPZo;o zAYz;7eD}a)UY2CRVRbxN2*54@;c@ba#axj&5Sy*knCo?8Y-aKi6AX*_(DV9njAjxA z00y1_SOx!euLlS+2KI`OIf2(-^a>2HmPizM0eG=@eScTl`p>tfoqxPDZU2Yc(~+a? zf=wa5WkA|tI-NkxPR_slibr7A2~J(d7dj$-0gUaSyfd@~h=tVa`bA6V*BpB^hoMdd zC7lI$LTwduotpt|Ic+7J6@Ott?z&P&;3G;Sc?6C>a_A~kn-T3O+wu|o3xf^$J~_^# zmlqT{^ixp%h}IH7f<>DMtq&lGDZd%+)Sf#EBV7b;J&fc4$4+r4ePBH#3Q?zsV>psW zU6hj^@c{Z8WmDiB$MciNaK3r||QWK5Pc`8Rf`6 z-eRF`)|GN_jzH~)=%;L9N88Q7F^lpzpE!p`?b5E*Y4ek^&A>j)TO$DUCr_R9c|==& zCxLne+J!u>dGaVp!w!9*Y%^dil<$01;VIX4;k!Cp1AQlG+L4bo3iR3Ocw4#nZuRF( z5I{%7ID!(%0_e?9pI1Pj7CGZrjb|3z@p)%W7OJkqOOKt#GhTYIM`8fI#9fcWEU`;q zdK^pj^T6vu3=;*QtGFPvfgSRbv<|pTIzZZCwj7vFZs181KKPgfxM21RA3G6{Z~wFH zY0JOdk~1l^RT2VTI9%w-BtdpF(6(Oa5p+Ufab$U!Tr#mDFwsYH0OP5&PV{KQ@h7m5 zqbx6^d?DEufJMPYPv{?CA?N_mcBXrWK)upf^x8Ic5wJOV@{~I&(3C|`&UT}G1oW4V z4WRQyNm{`^5F>liGXY_+{Y#+Fo$Ul*Q-gWo7117c8XTjY(;~%=4hz#shbv4eilK4e6;pHAKsXp`4u9=OHNc1Lq40@qJ@*p2`l`!>=8 zx)wmA&zr3$0Da)?2gn1Vr!**R3)^_C4XZnD7fN#pjZ_iaV|JD4M{~#>!W_YODrtF_^UP8kCql4;*`9exiT`VPT=sr4c`1IWh7x zkYvJxwFPpXTs&a_c04vF00xZ5z(b7N{$ktA;Q9r&iw*g_-2{}J3@Y=BG676-O&TbV zlM7&TC|%Ow{lXf6!WF;M``g+@Jf0NPO=i$`TVR;0;y&ZLxtIwUyN z=%h%ajB?nkE<$go;FmehQT26;w3E&Lx}#iql}86Z14$gvF52((6JWb)KUEj)s{ItG zpA5Q#`WR;*%3(`;CI(Ctstqt`6PRij@V0{t&ooT6#Rm|nN4p$rg||C^UPIcA>>0f?1r7lM&Ni7lZnEDCJ2Tu zE0IpKVdtfjC^=a1BqN~b1qE;cAamG&?D&lxo+wa;c6nj_7!%-b0_^b20PVF@8$u_b zP9}oKMv1Y);vqi|u*I);eI5cCa-{>XAV+edEx3N`?oPl3oH6YnP{LLn(L5kYKmY?B z>ws4o+r3l3QAU|MPQ}P!XFh{Gp}|1yBhY6CFY?ibfUXPXEJd#+`T#^5g$7f$J^D2s zbce z&pXKC+{^Obj=(vNGd`>6DJNh{ zUpWQ(Q}%)Ol#hThP@B$=2OkePb_!HRAXX5F9f1E)C~L#z;Rh?@6=~dpKs$_O1mk1{ zZbNWa!4if8hf1t02||}B0CSRs2-KZP7D}AwhJcPYFukK7l?WWzPr?oqd(k9~`Srs#2211auok zu_w?TN-m738vzSuw2%PGQ371NSuTroi1u(Kcr8i8hCD#$q;?~~4$g^=1c*+GJW4uA z^7DW`qur5i1hkDhK-5JU+Ex2`fGq=o2DoTLdb4(6OTbon>Z3hN2F5IFa0ikgkWlNPrMU@ee4L>Ky9Ly}a({ zQy%4{-Z#stuTUnvd|#mp9QX?TTL}y*!#CzHA;{;i8LBUxewSZ8jDRA8h4j-eK6=>A zI)+^Be15q-QJAL+>ttb8Y$I32+f7#kR-?4DQ;;h@Amt2<_his0^FEU$&ki3jFxXmt z8i18gn0Tb!09PINXX4eeIk^^_ZcC|~Yi1eg4cNLkYMDCw0Xy2Ed_JOkU0^K4l=EKZ zg?h2C`Xm?iT;ydl(x$@3WW?rb~BI)2*L!Kpl`>%cZ=nd?Q=`4i<@4t1TA zr_I%-BW+WExA$Q0{`3yo&o%isXRv-+tKMS0HFWUjBLW*QU!?4;$K~ z-Tp1YAp0BcPZYRlq*P?Xt*AyJv!O#r5Mp`S);vMNexk5+ujzIT*zPR9%I|Fsy`-&V-A}N;6ZD-9 zTgG3V`7Wg$SGHAeTT*uiW7Dmb)VZFh&vvWRE>pmcHA!2LyLFskPwGA(sWVSXz3Rce zr_0kWWp!uHI_l0n@z^IbzwNKICFMKP)(?E{+2)0J5qMuA{lv`cAC|oPlCM#Z?<=ei zw)!W~j|uM~%un@2FVkOgitugJ@zbbdK;WQ%)Su1|?B*By%Z;lnef9L$5iIOqLkwSU zus|Or*MWi+a?|D5r;flOf`n`&HgwLEo5rV(&Yr(+824h3?3^8=D$@ZI%nr}a@AA}1 z-5D4-z`miH15Mp8lV#YQqRas{!1vrKSDP$zVJLT4?wiTT@1R~5l=-eapX8^ngh-$@|j+t{X3Y`w83^ zSb9zhYWZaOz3DH19H0Dov2nfNXt2<-eC!W@8@_p5#|cCFa(%YCDX(B5ZS7}i0|h!g zZ@xDengGD^{UMdBvnL(UN#2Wr*gLg36_^Y?ZEDK~Ij|0-FE3t^0f23p`h5Z&j=sVq zHt)4BtkVG6{cdrj&FezF#?9f-^_zhucHyv>Es%8001f6`ICd{&%jg)$=yKcBs z9&GyaCY|=AEu&tY1^37@W$&+kbLNL^d9{blHtHCTwc3bIG0{17aEZxb!^d zN#Fc`2chnirwwVymgR}UZX0>+SQ2VI|EK^@)Lp*xN7 z$ZMNrDOa3>9o_uh?9c0=+Ekr(cTg{Dv+DiZ3UzJsT(i8CT|ql?zo~nVa;NXuP8N>6 z@Vq~6dQVHY{Dyzvj(k0>WiK}GzRg!Y=C9BP%s;F&uGKH>{^26X;46q-&JU&h9R(Qj zJV{v0lLh=EpX`^@KIK;#?>6kgf+q&UX0m)Sc^v*;wqAmqLBL|SmF3g9#|#{XJo_!! z1BKZkLqTUVxpt>L(&@y>H_T7zc1Co{)YCcI*l`1I&WQr@HYn!-5_QlGxbkF`9}_0Z z8nE+syk2AeR5sINa@Pf5{=~9>(Jyk*ZVU4)_c}HQITrQdl+PQ88_K5J^r?G_n_{M! zXLI(5GmoTY-_%!nwehPrugrW*T}21kk=K$>QdjNOU-872p8|IJgud(aa#y~Wg$+9C zbcyAYC8IY`(5Aa4b?UeDY?t;`mt;L>Zm#?FRoB%~$LO7$dQr}@BR%X=e?<+3oa4^@ znx>sp`3}}5{c^R2U9(&MujBsGrRKSh@)P)pYVMi2hhFKV?!WHUN&O4D6@7)*&%es} z)0SSrsRA!I@(YLg^GW_aHNSRP%u@&cR>ETbMaGr3@NU9n_~G>x1bXBNCk$W1(Put% zr1OtA4c$!nbwn^JdgBa9IscoYHovIFdq2ocXf*|M1uu`CQO zm@M2&y(bMj)P;Ve1`On9@Uj9Ip}x%XVA!koo|AE{^$8O|`&!n)#H6pTzLLm1&**n* z*KC7dx{zxX!wtV0)a~-5gK7b*JtMe=7NI z9h*`&=@ZyrXm`pl>DqVH(Qfj&x3SlmPq3$5?u+Wrd*p`pQ(pUXwaNXOb|_zwUsLm5 z)~4J1i64wRu*;VltFNleUqax-m#qK8AEuuq{qf(2pZm{mn{(&nf%4^hlif$JlZE_h zq5h%~@b8{T*w6Oq9w;C%L4-z~0)wVv@WGV3#%jml{5&>62Hx`1zo3o|BBf&)aPN`4 z1Pl=b?7B5b9dqEv1g0ZWccibAW}C3b1kAE3pC;`M*paePm?!PXg{3`kAM+>O($j7h z1-d6-duLC5!dzh!qCKhaeuoWi;#JT6Oa-~yobyl8R-SC;+}||qku6J|d7ky`gwEya z%~Q9!cf8hJ*~+w`?zAU=C)ZDuQf0`m9xR_}$jKgrgd^|lfalD%U)c$tzQ4C09gi(N z#tE>m<9LPb=*l{%+x*ph73VssWSMg2sbBdH+RQH?uy_5|HNEQx-nX;qpnlTadk*<^ zZ_?iVtnPWaFOp(U{t52s-M(yoOE-I-*>c(U{uu}ydh9tdP^aIxVxA_9YfgS@=udL^ zF@Fi65A=hx{xSLbkI@!_g};w-f&hIlfkAv=pZXztT9A6Fex6{#v0$8-H+!IfkmSWP z-vkOiAPuQypxy@{NMO*X99Yk+YssWEbhn|?urUqjYzBabI(7USu*+XWjQYtt=uQYp zogGJhi&mQnxF#QL3*nGEsE?FIY5tXC0ZF$oGcW4cIJ11qA9fYSzthXU(TtQ0h)*n8 zww1qbSU}z8w~cRO%O9H|DbLB~nYuf$r~a<216%s0D@&-?y6>IPq1PE!{T148^$*^B zdafq~9a(+~6!N+zZ=kU2gQJay%!{m@P1>m^we7WBQcr$5=*G6|TkR>!@|08Wy=r;N zlJiBoYM)?FdCqs~=Dc%P`z)(^z`p7dj>yfkPGK*rYq>z(q*vuKkK5NCv+LGgBUOh? zzmR8-%QAHddlk=L^;dX5!o}$! zM&r~^Ia!TopqWfQNaBN=r(POr{ZqH}$?W*m;e6LLbukb*U=aWCGVOLzT3+oE>V~SP9yg7d4wxrwK8&m7 z)h?kOxp4ybN;!4fPkFT~%SjX3qx}_Ger2zYH1ogw(mOWEzuq^UTa-c8U(u1@p;LpC z<8R6jdDCt7=khBuP_WKgcS4}p>95$I^`_2*cM($V{>^gI_5Bq*7v#8KLHUz82F_pX zQ`gPggtk;0ugmL6sUK>2g|$e%zDMMm7H#(Tu!iit(@t_95!=+2RT-?i>cu_JeUax( zxx@VyJL;bL(>{F!3>i4kZf&X$nDPo9Wc~`G=sNU0di(=R*fM=aWtcbxlFH z1|i=iO1<_e17n$cgnNp4^+KO@HtH&AFS$on=!0F3eYbfYt>1t;Gy z&|eTNnD;|zlKu(4e(JwM2mRdc@A!qo-cL=P$OZ;^ zx&Vur;amFFdZ0?Iq*{# zgEaGN0QYM~eon~YfVG8V0-PrV={E6>@1+igKB7`^a*`r%*It7yob}scana27uKZl! zBkEVT(Jw^m#hwMA-2Ep>!3KNAD)qU6WS)BK_nww_dF+{E%Bin9_0+w|V^b|hwKWe{ zn|QSYp0l$@pQ+Fm+MhaXlGN$kI=fEaIm4C}6g;+HytNf||1Fi?00*PQBp611#; z4D}9A4ze##{kDGPQ^9_-JCD`r+JLduE^RxQGcV=M+*G!1%hHB?f)0D?ulgQ7 zf+bh5uVr;|OjcW%JeM|$IXOpLj>&mMuQi{rV70$Wa{)0%2y z`a9k^{%kM2vrqCwVe;U8iB5ka+H+?=`)u?<_5*!WpQrXy%JhBJlV(2CI<}ks82`zV zv4vAv^EU~g+8_FB=WlzIPu%?N1M;pr%g$?Y(-SCos*w7$OQ@UFeZm){Eq6~*r+rs0 z?r*^J9{Tg%XPSBJ)!o6K%Qdt?xdsXKgCYHZZTf~gF5f>Wsqk_m0YmDN=@0R9ejxrD z@Dk$ESHHRE2iWp81Sb*G*REjUih14FW}~ksm5c=#(^H@T7J9+{Z>9%6xUvxl%!Wtf z=)f5yjE>*S*8@)3hg^E zWWcbe7q~F?NjXv{=FF#lKwEMlbP;s2)&Jx#Hg1bkCt4S)a;89g_yn=(kA>cWEkObs zKKaCQ0tEBG+%jLGo%yK@n1hz7Q?9n)>3}x7?FH1Ij^Pg1hW4bHuR7OJ>hHkbKmqD? zRj&3=_^vk=)XMEc9j8B`M@oCdD{=c`W`j&dH^fhiaP`Qkgcrt|UCDQ%zt-G!CAAR+MqDs*u7&|POer3(_SsDlkWPfiNx zCeELQ=j!hF1jeJQ^LzQU=^39kJ>%1+XMEc9jQ{I4)qTI?sc-4{vq1vS{{)^Df7~|fdZZM`|rQM6m}IPPlALbg9JLRd+18nfp>iGKz5Vkd+8$3r+nJY*Xhqo Date: Fri, 7 Sep 2018 16:03:57 +0200 Subject: [PATCH 070/151] fixed typo --- ...rtClient.png => slate_SPythonEditorViewport.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/screenshots/{slate_SPythonEditorViewportClient.png => slate_SPythonEditorViewport.png} (100%) diff --git a/docs/screenshots/slate_SPythonEditorViewportClient.png b/docs/screenshots/slate_SPythonEditorViewport.png similarity index 100% rename from docs/screenshots/slate_SPythonEditorViewportClient.png rename to docs/screenshots/slate_SPythonEditorViewport.png From a91b6264f3c97818c0acf80211ce035cee0e2a3f Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 16:05:06 +0200 Subject: [PATCH 071/151] Update Slate_API.md --- docs/Slate_API.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index f212ea97c..ab95609f1 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -762,14 +762,14 @@ window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_ru ![SPythonEditorViewport](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SPythonEditorViewport.png) +Note that by calling the .simulate(bool) method on the SPythonEditorViewport instance you can enable/disable the world ticking + ## Properties Editors ```python from unreal_engine import SWindow import unreal_engine as ue - - window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_rule=0)( ( ue.create_detail_view(uobject=ue.get_selected_assets()[0].GeneratedClass.get_cdo()) From bab1371c36b8a50927215f1c0f8a8a2b314581e9 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:19:54 +0200 Subject: [PATCH 072/151] fixed SDockTab --- .../Private/Slate/UEPyFTabSpawnerEntry.cpp | 4 +-- .../Private/Slate/UEPySlate.cpp | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPyFTabSpawnerEntry.cpp b/Source/UnrealEnginePython/Private/Slate/UEPyFTabSpawnerEntry.cpp index d577a951a..bcf3d7438 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPyFTabSpawnerEntry.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPyFTabSpawnerEntry.cpp @@ -36,8 +36,8 @@ static PyMethodDef ue_PyFTabSpawnerEntry_methods[] = { static PyObject *ue_PyFTabSpawnerEntry_str(ue_PyFTabSpawnerEntry *self) { - return PyUnicode_FromFormat("", - PyUnicode_FromString(TCHAR_TO_UTF8(*self->spawner_entry->GetDisplayName().ToString()))); + return PyUnicode_FromFormat("", + TCHAR_TO_UTF8(*self->spawner_entry->GetDisplayName().ToString())); } static PyTypeObject ue_PyFTabSpawnerEntryType = { diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp index 71dc593ad..ae0fade73 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp @@ -756,9 +756,9 @@ FLinearColor FPythonSlateDelegate::GetterFLinearColor() const TSharedRef FPythonSlateDelegate::SpawnPythonTab(const FSpawnTabArgs &args) { + FScopePythonGIL gil; TSharedRef dock_tab = SNew(SDockTab).TabRole(ETabRole::NomadTab); - PyObject *py_dock = (PyObject *)ue_py_get_swidget(dock_tab); - PyObject *ret = PyObject_CallFunction(py_callable, (char *)"O", py_dock); + PyObject *ret = PyObject_CallFunction(py_callable, (char *)"N", ue_py_get_swidget(dock_tab)); if (!ret) { unreal_engine_py_log_error(); @@ -1400,7 +1400,8 @@ PyObject *py_unreal_engine_register_nomad_tab_spawner(PyObject * self, PyObject char *name; PyObject *py_callable; - if (!PyArg_ParseTuple(args, "sO:register_nomad_tab_spawner", &name, &py_callable)) + PyObject *py_icon = nullptr; + if (!PyArg_ParseTuple(args, "sO|O:register_nomad_tab_spawner", &name, &py_callable, &py_icon)) { return NULL; } @@ -1412,14 +1413,33 @@ PyObject *py_unreal_engine_register_nomad_tab_spawner(PyObject * self, PyObject TSharedRef py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewStaticSlateDelegate(py_callable); spawn_tab.BindSP(py_delegate, &FPythonSlateDelegate::SpawnPythonTab); - FTabSpawnerEntry *spawner_entry = &FGlobalTabmanager::Get()->RegisterNomadTabSpawner(UTF8_TO_TCHAR(name), spawn_tab) + FName TabName = FName(UTF8_TO_TCHAR(name)); + + // avoid crash if re-registering the same tab + FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(TabName); + + FSlateIcon Icon = FSlateIcon(); + if (py_icon) + { + ue_PyFSlateIcon *slate_icon = py_ue_is_fslate_icon(py_icon); + if (!slate_icon) + { + return PyErr_Format(PyExc_Exception, "argument is not a FSlateIcon"); + } + Icon = slate_icon->icon; + } + + FTabSpawnerEntry *SpawnerEntry = &FGlobalTabmanager::Get()->RegisterNomadTabSpawner(TabName, spawn_tab) + .SetDisplayName(FText::FromString((TabName).ToString())) + .SetTooltipText(FText::FromString((TabName).ToString())) + .SetIcon(Icon) // TODO: more generic way to set the group #if WITH_EDITOR .SetGroup(WorkspaceMenu::GetMenuStructure().GetDeveloperToolsMiscCategory()) #endif ; - PyObject *ret = py_ue_new_ftab_spawner_entry(spawner_entry); + PyObject *ret = py_ue_new_ftab_spawner_entry(SpawnerEntry); Py_INCREF(ret); return ret; } From 28d1bccb7c6a5ba00887dea9838291fa748a5da0 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:24:40 +0200 Subject: [PATCH 073/151] nomad screenshot --- docs/screenshots/slate_Nomad.png | Bin 0 -> 514504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/screenshots/slate_Nomad.png diff --git a/docs/screenshots/slate_Nomad.png b/docs/screenshots/slate_Nomad.png new file mode 100644 index 0000000000000000000000000000000000000000..8c6f8da11dd7bd389b445b48cf5ed245c9cb7be4 GIT binary patch literal 514504 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 d1%IljS)p0Z;ccKA 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 z zU0rsFhXJZzy;=ajB%sKSBFH}c!BX#@`}$rRPnzzp+=9jW69zGUb-jG?f1dSE2*WOu zPsgI|eVYI{WbbV@v5MBm?{uX%s%JU#u?QW9&8hl< z=jUBtV5E|MxPt8?JI>d2HN_=5dh9q+X%cH9nQK4>?krV6(=IXm`OWKX7s=zwHDggf zE~wi93{c-X>pYG~JcLW~vN%B2x=WQ9gV%Tu)BUa$Kc7GH#%y~XGAqLn{Xn;pE_yWG zwO=5y!6O;ib#I5`>~1qj@WE?54Z%ZN-wC_4Y5^F+O2k=`3S*fsga3&Ee0WY;LGsfA zPb7%eP|t9&Nafz?Hcz0>j{)d=>8$a{Rn z%Bz7T8khOgY0}LY(p6e_V||2e;70%rm(5h0{O3|sni)+7n=!!~HiM;<*eD&p;>WpCrdvtG@}_K?ZCQ1nA%zynaldj9&CJ$_|e7gd+{YFNpy z9)i~A1lurszZeb{5`sr9C@*s1AO@G?@w0 z&Q|p`$WRUb>|MuH_@p+U=6=zK--&m0-+P z{OFm~rl4l{#8=gj<3v@j(KnUO-+NTK0;58W7bm!MLq}?F$UiA?sLf}7Ev^-YZL4Cy ze1<MN9I0`t1^PKKq-4uMghn%WgXH;1fto!@&(^_zPeeUNqh@IlpIz$I(8=;xm z9Fr{~`I5&pSIDQ3)>LDl(Ggp$fFBDat{v{p>wpG6OlLRg4^Ph^rW=-v#Zd{2d z%Zs>FT=AOzQ7VP%6k)%xkCYs-!URnX+dx-Xw!~PF7OsZ$3FuJQA|_ zIokwz^TkfKEhF;du*K{-0%X^*etSl?ql=;~T;39BTEB_Tp5NVwYv&Kq;Z>g5vHU&! zu_11TEl>iba6Axgycr=g3()zg!P`FEm_+^@a(RNi$WnH}Khl>P4u-CNb>D?$y;V%t9-bHMeu>tR%p-aOQ zarPpJ``o;dJnHvwW;U)P`Q8n|b3-;-ysGm4mMa-F(6GvLrF324@}SRiJW1oHOyc>K zg{d)0f^`>$V^j)g%%k#^GrH1a0vRRph0=p*CAr=Q+$WmBTvYU06?d)NWoNte8)*gk zMMtfXG>j>qiVgYN@(#7FFl-l)$#V}U=)RYlo}3e4FI-vhPU5e0)8wccpf|Lo(b`H6 zYo|3JvmP@X)6%(dXPhUpa(}Qg$~aBa=%SJn$ni=DhClRKNXpX%L zRb0A5x|fkL=oK3$>Q7V6%dZwS7+(uNbn^fnUe!A!^F`W+Yz2Lw_MS1vFI~Z~cH?ke zE?iRn?yePM#<(&ka`h;^<96d-%e$6eJ7)|M6pvcK5X>dkJng|<`D(9d07bL%Tg3-e z2fdji65y1~zkxX0uCkUmb!71%DZT|Rp+>XbV6J5d|E>Huw6I3;c-+PqLvqotq5ps8 zZC@Cc1xGX9X|~|DI@A1+ zuGbYV(MrHfjW#uOuP-jjsdbDhRIpE$PXb`Ve+=HXmN)5G${iao&Y@m)#9}z#;(u}m z$|!MJ$o6r)T_AN0f2(S~K#u=0?B)gh_?>!8AnhjwT>|TWpYhKPMdn-HJeIY$?~=aL zo$*~-GT-VZFXWe$n>nz7+8O<;0Ka2@5&9yf^m&0OLX;O?lkf!_AN<4AzuCNWh}4x3 z)NB5$d`{ZRhIg?`H)oIZBf?SfutjYM zXm97zBX9sLL3Heyp2QN=cJAJ!51D+_w?y}7_c5nncMEm_R9N1kWq^hC&@*6-{pYAf zIcIWgdV~08@zYarq;C%eny;Ex*^vZO!8h(AvLxd*XP()g^71~_p_k#By2IfdgS|~# zv3#nUKk56zU&uNkD+(795vUe<~hE z4Z|!2BAhT_+vL!bo4J@-7g`}&akHa%4cES;Hz12$xb2pjDgM#TW^_{c5xfKoNL%V{ zPLZXp`Hp|rL+(eQZcPIA>|P9ols6NM4&OoaOeHW~5GHEgpp<-b4ax$sjj_)Th(;*6 zaGqL6C`piNIYIc-+CfrK?{Vlx(3o=s(k-)POTy?e@Y$sVp2M@-|FkMZktGfx$}Mpi zr4{!oFmvxlUg32oQ7L$hyaCUtU+g@lMNs)0CBgr6l({{n&R5U}G!37ePTgd+_nqYl zim3NkZ+00L5k_ZT15lujO0-ZJ0^JSo}`>PF>e+r0njG;_OBWQw@PhwZ(; zOC_UmFc__xyt3WHyC9!Yx*~suhv$Eel>HYS;$RmjI~TZY5HWNN?CaTjhfr;XMTo4{ z`;nLOF0~Qgt&-cL<*FBh@SQQdj_mB>Q=$?h7YgGaZWnIz@Jre47ydV?uzi8ov#rsb z%RuNFSZhzDc{#1F0F!u0qU&4h+KRzxF7b1eJJY9aw6$E~+$(TDhjAGiVI-Hx+i}vR zq=kATWt>B1&4ig%=K>x0yFMu?CFw|6yWTj;#rK(lBJxIxGJ!Eb|s z`$5s;l#wh10_WAL#E547FXt&QL5t<=IdB9I-q`{bej`D^i%)D$8Ycw_5Z(hZgahu0 zgvQ<-_^z@tvGJ+7HB=l}(b;MK1iqAk2Tw?NMJFwD@^+&vvd z!1YF0fubVwq%;ruc*8c50Ow%no7$ZtwJ&-Eb}SGFSo00>F`b6FNIugzggo| z$p>6H4S@~#w+A^|x7(J63^6Ryu_;^x4y+<2_&3#*Gks&0C}WcP_`LQ=$}2xZ`#t-{ zhfOB3pP2ivz%TvxgO|cBD{VUn=R}7Eyq+bk8PWj^F{5JfUZqi1-I?g{n-lbIXc{nQ zL70^N{pWF#5N`vS2_``cY$l>)Bv>hXoOBoR>2xTB54C*UWQU5<%M_IVqr)4d^l_K2 z_gD$DbDRhA4y;-(bLt$@L+u#ZQ@yDU5)|Af8KxY6@j#7pmSO>B8W|zPG!Ntrh~o2< zRcY*dNlRIB=I^`Jy*XriP88dDuv=S7BcBti0~;m4G}G+FQ@4vs5sVsMwl)IiPgnZoe~;xP>ZT9k;kn zAW37YqGoT4kM-nzLv4v`RGXd&OyRt&A-jI;_LJ+NJqu3E(}dmUPkH z-^ZMQJbTvgAi)k~ap4)|+Y^)Qb?V6xbJcMZL+!%$It~*KnhA1zntbYrx?iR>KsepM zeXJBWmUeu>f?(f}JT}&5_xBmvkIMksyj4zWnh6i;vM(lyBrk;;Ll5D^ zjhpQpAsd`YoXx_c(?Lc8Y&6N&;SB!Zi1itN@^WMQ&yc??b$6x_H@^eJ=@sJYn24#4 z&ixPS_PTTN^{VgB3tpv3iA;!2q={!wFJ)5zu58pB3v#35ZYj(^`skitQ)Qj2ciy@8 zBS!xmp$+HbU4_?UG_5fh=@Oa}lvmEc8zjkhTX~tXWdhGy8||=d;2-VU+fw7Xj5@12 z!1MwGy}+i&b6-`qUW5P=I=A(Wkr4Y-C>@6DuizYHZgK$5Ciy|$?cKHxQ?`1<|3P#N z4nSvk4=m1)F2f1j?vQc9ln%rbKeE|t{$YmZkPZ`+(w|QaFn;+r7bEr zHFzH~XcBKfNvL_SeQ0vhECio=?*c`A1S*o&V3`#b){~O5cEVz2fW#TocC*1$#K7a$ z1dtUl$InkDV}-y3ZVdyG0eelR+(N*`rff3u3i#X?gyj)WgUd(M6~ssUtiWs9Vsa(H z*S1+A;Q$yoE`jJ4$J0Uh0SwCKuB`ytT6L3gw;r8eV0bi*@RC*yKLyzbWL*Kg(^fQ} zX)0B=Kf77Vq4H@2eDUSKb85@wY#p&;f(GY0aGuj^V2=~UqH9@KLrpTYk&kS(0&iz% zh5BaMns5P|~W+x53|=k(JZ_zjXp z#kN&HxDb+gXus0w^;qCA=$-le_8(ueQe9l%c@GEs$loGdd10`n;Qiav@bJNkdyBP> z8zHP(GntAi9;hpBBTjJ^W z*bTkLG=p@YK@z6`0D)ke^>tPy*$eb#lLE*wsgETiVc6N!+v`;ASGoH46~xJ)d#%Yo zK*hxE`pR1FXOIa7O*$XN&081=!(LDsEZJE3R7iHkRXp%Dk#HTEzJ4ozfIiwX6O&D@ zd9XszK;kr&qrgcVm$2(j#tRxby-VRMVuU7Msb79eYMe(?%NpcA%hZ*g+t|9YCh_aL zCtEgWu@8kkMqWq0qLW~zL-(h*Xh4q4Sf{>Y|KjzJV992pTUI1q(PLZV!_6HksSHEb z(2#*bX6xi4d_9)7Pdb~@_7^l(1MP7Zr9CdmyCj#0%~+w5rNHseh^7*WG48{#pFez- zy}(Ww=hN%2$C?&^G$E>Vz)%$8(>(Gmtu?J~0s^^meVKbn^!7-#2$W_eWBKN$M5X@J z@t}ZJVCgkV@g#rp9;)PLsFPOvye6N-t+E!RXv=Bc2>7bnNu@bJNJ3 zlGEZJZqy$i@^yR&l9kx0lbxYfq@uroI~%;Z!6|DQlMQC~O@37P^ z5q@Mi4^`1`K7sDLI32qjj;BX(k0Q<{U8wzrYVMtMqXccLq zE85L=|8Hd^tm%uiE5q}mfzlUUJ*FUC9l^jBnp^8O8Y_7&2NZGmS5v2wvPw|x^g2IC z*0*_d;1R9SaQR{QFDlrs3n)V{qPaXWs~9AkX~g*T{du@Y*v`_8_7WyVmyxkzV@8BLE|CAS zbHObGBY8FBl?;R+8O3qsPq~w6ThU$-*oZN*GkmsM1;s@xR@O5#JN)|KB6!@O)TdBCZ_96tKUWdScj(`-rxxTCb}-=RR5|G(yja&i{xB0B_wUijGzerKt=M? z6&B4Ep@HE~)0w(YUc54+6DI~S0GBv}pV&I7WZ~=AMFaa_0cF%fSr%~&D?$9GRu*bG zhDjs@Kz~IHe765Ef{sKBIw14`ypOriO)ceU86_6AFG{RXyeU^cIc9*#G`-Ahn}CJ;;o?u1u9LUzHFD&RJK*i73#A$fIT!z(+zwhSkgL)Tjh(W7+NV(# z@6hz*6G9*ceX~7#a#Ik<>Eju}GogOAwQfiRm-Hg*s5DwkWsv8eCByU1Q6KN`j(j9q znn;@XCY2{X`c<=&Cfh83_{v!?2n!w>%?YJOL0Khw<&BsD6+OG$lRlW9;S0l;7>?}> zKm)=euBo{codyWMkzEB1iGi*^i}4@74dFipTWThJsjwEL+qjErc3v^}y0rjpso<~Z z>UwKu?_lNX>zI{#in@qbU!o$L9BF<9*w-GcOMMOTb}ame1xEKc+uIH_YS@K^jMLgr zYfaWpy%ps8ZOUnKFTGc()8yq#+e8cWI^UJ~i82SGGEo z_a%}`<%8oj7#(TXD?c0IL4sOLLO4klWZ<{5L z?&}N8+t2l_&qB_jd35kcb+Ux2lWYB5^W=RO`_Rf-gm|D_`|THZ_o!Pg8y3m63qd+d zWdD};q62EcK#oA6s&|3`I|KpQ3iQ&Zv?yOOu4qAW6VnA^7r43Q-PjxJm?zWA`)F9i z^l#gKQtef$=BVje*n?T8+12!otDHv-ceDu_yd#a88nZ<{yFMnD=xhs|iZV(-6-+4) ziP*mXSCNRst+>DtFi~EVU&EYD)Oh8}w+&xf^o^+og;K4<4^v-wQd4Xt7ugKKwLo4< zoU{?9>~J_pYVYDgX*tvq6a4Wxf*l@|2rY+*4WC;%=#(!m!yh7!Ut+n2Nh(|&7!e8d z1@(J##JxXB?dQBPInAnlSzh*K`Th}xZ3M<7>zJp;ChuhJ1_ZVX`CrpujMFLrc@@l8 z19fW9Ab2UqEn&mKuuH$Edx+RkBTQa|ykfg17$aAevN2Xqk)9)tvkuecpi-!M*@0)D z7!kmCy7^y7pGoZ0qHH+W>t)KvaPp|A7SI%2;Kav(tec-KA zDPn!mH5P3)^egUiq-9|)O_iK3lNqBRd&$nFNP~8KPQ9K%jeYKG$lRauW}0W7wWejd z`u|ij&IjJ3=@0k_E-+3_V%knbb+R0+++^J=nY5l>p}HWkYd`)2;excgs1cix zTBK!nhR>>kcL9sU>bmA+hk;p>I*r!Mvk~-mMe|vjDy+TK|8Erm@W8$xQ++0gyiA|QM^39F3%HR<>7waapY1TD0lm5^61P+-T_^-Xcs!)7;eOrczAY=8y zouJR)lrVBkdW_H5bYbq0F<`I8pfdMCgif#H%ANUfD7uYIM z!!=sN`*sgnu)A-kFD+)4je+g3e7L+j!5UyguXUYFXSL5p4_mB>k0`hE0qr0$Uhu^yzwLn*T?Zg_5shik; zkpqecC4vsZ_j`AcbXN8*@LAIE7UO7n~A_WRl8lq$OT>gCCyB?jK(Js2ZEC#iiM16`zJ$n55>SDv3L@g!~i$8gOq&nV?f>vs*bRmv|xpHs>z z@x0?e2jQL9*6rQx$9g%vd23tZfrlYIvcxgXBdQ3sM1#7hp}b5rZz1O$XLTZGeIFJ3 zsu_$RTdkSI`s>SjF;n1P!bwvy3iPZxYeKLq z)cOC6WVjE##*F)DQYCP2Y^D>%%u*6*48cDyRPtD%-%{pjud<0Y)M`x+zjo$97Dk@* zQJyOt92nM|{@F?mTX?A&u!e|2V>LW&g#-m}&|tVX$%XdiwBmwtz>p5GY<;^}`Un<_HKv#)CKJ^Irhk2U-!n=Zcp{E;EU;igZaau@8<{cTGGh z3btH!BR@E0WJ!Eii z@*9($pV2mr4$m5#siK+JEe>bSJz3K%ZY_*=3jpZA}OTog|k z1_Y1ow~da+g9T`YsP7gt5`BKB?n|02y!vh=@sg`s24;86!K0OkZOhiv-l)^Cx^>Tw zm6o5z;QNR3oNhXIb)g3qtr)}k>xfBXCmjm4Y;5WFv%k-x5(%f6HEnU)f?$dBui%vC z!I$zi$onT#Uyj@j!>Q^++I4<5-SDpKzbXa+iJ+8zH2RhD z?9!mAPoidv1Qgh+Ntk|^Y2I=vs%L1Midfm%UL3~q!C7rt-H-IE#2x7D+-R@p(J5%x zzwv8yQgUiT={~X#19WO$G_lI%+xso*RbJfJ4 z(6zk=^AQdC7A|l@*mE#`ZZ2c>-{;w=Wy zSdU~&El!=_emI8IQju}o+=ljC#f&3a;C;` zmd%pespmp@-U!On{4Eib*&dc62x#o4zG6w@HX3c%YfgmkX*cNss>RE`D4V71;%FFT?DlneLiN_Hu~w{C z$7jfFjP>FUY98^~$D9+l!_F5R^M&=Qn)1qM8B?s_=K;I(pMN?? z>MaqI{|rhE^{uEpu5rY=i3#2qPy4C#Co;a*ru=O&L6bc#E+)yQXIKp*tS+CN#GYF# znX66=t9@zq*vj}t+-;}Dd`sPhP1=x%icBj3|ni%s4tm2 zRB*s6hPa@4dpg4+?{}U6M>u4LPw)i> zxD6jIk~$hpQ5QX?&rD;ERL<_&9-L4*CP=_SC}Mfq|LDt1(m}KTq_j#r4szm9|LmXI zd=7FTntGu9X`!dQg$LW zFwy6=WTEefFlE(Xdu8dQgyOW@F*;<~h8sI1`!$nu{7DC5^W}|OTp>P~#9;g12a}s@ zA%wF=7r%Nr)IhnwJXreM$p^)ns@jRa+L@(vyTMaqn|TaMv`0-`_365@M7qHD}HolN#7dX$K8S&7z%d-?O%x@p;io{N8+^X0xFKEM^u~2V!M& zj!S9o>-MTZC;{&#(z#m2$XqcW7eK|4DL>@l3{$<4AUk>#L;P*C*u-Y!g)w4}X5Oxc zJ@=cQjdNnFd|C(hzC(TZ+@pCTqkHZVKCYRaoD*p_AAvS0w=Ku@{Cyn}{~$-h9;e-V z+bXt;wFhR=-av8^@J$*^=T{gbunwH3eb_R=GiQdgqX$nMc(z>yCo{g{Y4iULBQ8Ob z;jY)uc$l{})ExZ;l^*ermfw6NIadVwmkhLS#++KNPel-==Rc}duq)X3vXBMKgCj!+2%&Ql3#^@!U)>Tjh2)4&*%Hu z!m(T;d@Y<;_huS-mvzwJble}QYOlo@PG~Iwb_V&8qi)1zH zHiM9?gx~?Ad#*AP#20CLjp$pDSxWWv1^N;8=h&^KK$m7A@=-F+!$WYQRSHCh(v@+< zAl5QV&_?Vaf5?`CoF>w4>nwdEvTR3b2#g-H3qA2c(+%wMz5ilyh8pNVr^>zPf__Lhn2bC*>cJ1alDVVhJDhgu#aY2bl%bxCpjQKLb! ztHk21)|zQb-I;PV$Hm#Y_rpC;8&m0f1NoJxh*Cg75M=KPP^s=l1Sw_(Han4az$Ue> z4`I!fUTgptWK85>1QOVsVL=GZF0DvyQa?uF*I?Yx7L_jiYS80_9lIQ=qT^4lwM4^y zm8LS1M0UHwGZwN~e`*svS!$Ey+^@3i?-t%ErXr!=MNHGUI~@>s-kVlb?0JpPNcs%* zPR2=hBb#W^vsS**>HSLI3MTjDs@J9nC5PR%FYT8pI(+4mC`s>@K%4s0ZG2#%}BOK!(6oqrBjG|PO zoski7Y{$x|>~V0ctYaVN9Eb1g^ZWhlx?Ha7;Q4yK9*_I&c1JZHQ?>M%F!9(O8@#-h zwuH9JUG+yDtJfY=r>_Ms$6gEWie$yINx1hr79z^smCp7F`)~v;%L}irwo2FDA9Sj| z(BH*hwle>3)OcT4W##u1cDe`Is8PveA9d+|RRKy{v$(jSS3KO`qY2p=kZ@VJW2 z6Z##peSpJ{h&>-qM&Zy6!OAvezp@iO8_EQ4O>bI@vMwNRbUJai+3h6tGP`-MW)*{m zzq;fM@o~>ClDliI`VQA_1+>;^NA67#cur4pPo=2%XbL``3`fBuH)`NmYSMOPd&P1y z=Fs%jNqHeW@&IpJ4ipJNCzq6>;Pxl~%AZd`!W5@}o|<#&aXq>5a9kiJmZJJl-sS9N zp~=?@x)(a4Skq#Xz>ir)ehYuPmyRgm17ax*9W3Hf?4(zvN>8YGIx%QAho7N5x-U#(X%Z%A1v^Sy7@jo1US859kM^cl<))HCsj-ij{ST%x|LT=2qleLwGdd-}E$t?GtQQ0SG? zzdMu5$`+FY8Wo2h@;V0}B915KR=yLT&WLI@D2!4#N8>RJVQgTj7G1lY_bHQ?2FksKJy8MUug;Gc||1VKdFtu6F26Sek4fOnqza-wE@Vj(Wi6mU}s$B8PRlH#Kb1r z^T&Rhc$>q`O`etaL1F5f$$M^IWLtN~|LL<8K|F=5dzCn(`p4uAb$=$_c$+TNA6FR@joeTK{7(3u`lsYPsGoLG1!j7 zw$olO-uU$G@&Ifggb!ORvp>Th>2RguSEo*9#cJV{4eFuPg0RBst?a4NB2DbVg&y)S znfu%H004QAxwc;^+rW&zI_{fA4O^EuWOUU=I0{*!VSwUapS#zd?Y} z^+`@3u$H1WptbQ@+w^wJ#%j}`f8T%EY#L*lGCvcVZW7q1I4Aw(`H}r2s4xjqonxGa zcOI`SMil+{=X6`0vHVB(QeK+bbi<6qyST{1%jM@u)X&CrWG z>tdq74rw^%Gvz8Fl7a|nb2p0G$gKRfSr zeC<#``Uwra zTkW}8D^5yn%-$O3`!>Flzerm%h%uZ9+?*!@p-1Fky+*Q#w%Ha*J&bCP-tJ4LIIs0n zIOWf)FhLbY05sw+c?hg@%-smf5NSqqMR0&3G;Scqb_}4_2)kgm{(Us@H;wEYO z{0|p%!i)tyyT;nkAiygy)=j+3;Vl6R^cG>0)I9#-@4bIo9<`3Fuf^Z)f>kgS9E z2?%KA!vEY#O!`9OeO|^36RO>y-2JgVJl6gU+XOZVU#4F>1p?vXPI)eG2}p@56~68^#3`8Q-WxEqdL#kY(CPCHf!lMGN>w z??0K>~Gw>(@!FPL{FU^#;_l^=M%0=(=ak&ICZ zIz2!stD=1n9cX3vRoA6|v>7n}Er7{*d^6MWYB_hrN)6EeG3G1eABJ}zi&j^^G~VM} zkUW6g^=WHZl*!hWe)=_8IadSs-tF4Z+(S>T9 ziuO0Qb#c*Aa zy%aL@lIwnqS-KqL`jh>&lz;G8yX`b!RUXv>$m4A1q=U1&R#ixqsr%k{XVW2Ab)MHZ#e^fUuApdoq12YwrEgK34g%-^*#T6 zjPygKLJISZuOf{3%vcX@?>Bo+Y^k?cu?hiteVpFIV4Y4DvDcdz&bs}Z3r&=!*Aei4 z6w-1fJc1SrM{h_&~uqb>0!&YXD=l=cURI8eS{io0xN3uR><6drK z`skYYKsR-jrZ&&*;&_#C6=EH9B&GmasAMSSXt1L@M3ro+4h0BQKkg@wkP<4&SpQrc zTnfw)#{WgG+pO*3K<2e}Kh<3%5RGGNsQx{Y!(Q*0vu`hUHws*UYd*b%FE|ky%k_yU z^&5KyJ2c${8N*u*kMBtV%@3zt0L63M0h+rXO4nL4t2;&m8Sm{maW08m%IWt*0wDxs z_(93&jy`u=#9Uj1ALp$YhSm2Tx6j}B$jB&$^5bk9j+;$X+0Qphw~#Heu-u)s9xS!J zzTR}xEBse=$yU`&`A-0qW>u!7bo)JW{QwnaD2Y1ymYkS8y)qp!IH9!{Buzfyp1SPt z6z_&G?S6O9u%=<>X{z7HfXrCK>dPG=eYI0tuYwVn_<(s-OwzZ8%9T~EhKIiu#+2w^ zk|UN)7YAlc`Zi6fF*5NaJ_!F8ybGOPu)HeN9_z zXGr9zUN11i%FBMdAll}3O1ge#=}_lTTW4nPG{x9;bXq?gB4^>3{QjDy9|l|C>+-Y4 zO6zPJe{I4YCvT^9t^0}{P2Z_!GUi_|cXw?j>^ou+ArgPN@MX@!pQegPKdjZZ)Gy1K zpv?i-KcrW~={PNC?+b*TetUqjYr2$Ee%!xr2@R&M1k#uhZWABe7Y}K5Mg*mk`&*in z4DYE>do@s`fnvmtsREW9Bws9%r$?AE#mQ-zEr|#frzRxbc|1QkVeMN6Q~de<7kfAK z$*wUKjDcv+3PSZ{oFdFiKyccC(&BYp4?&n`4Uz@8By&k>`}1rjygzi;JNd12YECnP0Vzp#5KLio{k{aa;e=faR2L(=9NL?i+T5`MHEUU{mB&9rK&ck8R>ZLMDpw zx;0DE+4lqLr6r;>y(bJ%cVa~6zxaw1gr}O=q~cV%Z;TtNKMwJh7T8Dcm-!rYD$ioV zDuQzN!g56R=75a>1&85N(*vs;FrbW1eQmE|NRKSI|I1Kben--k_VEcYNi3%E$S)k8 z868a>#{cKmZNp@EC9W$3$~{%YDRPw;w7xkSpYnC}=l{SYJBa*smzO+Xk#7#n;cc#N zjr%0H9v}e`gIP25imE@LPRxesjM@jhcZ8VDtGg_s>YvQlsC;E7Ka$9ulP&@6+*kvs zub#!C@4@b^8}&&CQ9a*R7%vJx_u6WFW_)0EIVK(1buS|= z55K;iET*9>pY?T>c7I3&$Ez^MAGmHD}NGq}>rjE1Cqfa*rSZ01TTocu-6` z4rt^RPYSJlb7;sA<0-v-i-j}(%zfp79v7dOxf1S)Tmj-aXAYX@&+S{^ut<5@vGPPg zx?BIsdOi+izhcf{qhFeol9Q9^13`Z4Vr;JFt$**2sf|WgbBz?U7kWhZ7tPzR`5m3} zff%j_Iq&`0r;9Y^Y7$mPDd*4-)5=2EpGaj#$ZHst@=g=h(KsX42V34%MeNo`dDAEE zAim|zltw12#aA95f6aL)j0a+%xblHMAidhQT)Xyn5I3|Nv5q_vJ<@iEQ$1)f@Dv`^ zh?yQQ@HsF|nYRA05(zoJ&WC@XUU$KO@`JR8td6#T$pB!G0Y#)7{$_9wh6g^gJ6&+oGZ!*&e)Ptxl(Q-ia^fiU zA}c;(>#XWkYn7@_$NPd<1}t{tRdDv%?lwH(7dgP2!7xRe404cQQ1@kcco8UmnvwOc z#62SKQ5nS0t300o??LTS`0MG&RaM*O%?fCBSe@R`)gN!^6~ii@-9IOTwe$@V^tp;5 zn~vD=5N!uiJIA(qa4(Z6ymgDQh$~?KYSt6W)E~;Qty2~T4WF;tciAcedY^cg8Cbf0 zdvaS9pIC9F&4rsBeEY!7sSF4sqI7Mxb0B{UP9KVDJo@YnI1+1NRpzyXfO2R!*}yhr zUoP!cL!9mYy0q+n|rB$wI{yf zTCmRe1zS)57mTsVqSp{8yuegP6zYTSp$R=dM!^xR!Qi9jc-{?AQCkURn!;Vs>DGLx` zOKc4^^`fiAPY-F2CnG5Wj4tM@ScWPVY(VybSxd)wu>&Pt9HDlgsLX5)#@k!E6!&d5fl795 z00i`5PP65b{`8PI{e`#Wg)&qD_@6%kMbx}|P_h?W-lC#=L+3M|mG>TFHOuNm(;-+} zXiK!7cygwSIPAm4VJ28Kq|9-D_XN_ zbhn--Y>2Qa)>}g3j7JW&Wn+wE{(F|iXII7an&FSNbJgG*-Oq=c*Mj#ialAz`V1JUq zzX`vda)g{Y3?H&tyU!9ApMv`}G)$>1dzQljZYP6aPhGaY+lbzz{Ak5iJJps6;FPj-QwA>gl~Sb`=P%o+ImnH6xRC zd;ER={?~cuy6f-16XAY~kFPHyw9q*D?C6^Q>?V8Q`z2q{i((9z@hjtwj<@wABJur~L?i;dc`45n63{y}wgYe0?zB6}+O! zPPurC82g?(DEcnsPfphb0=F{n1(A|gmogSv7r0%A{FaV>^7T4qhAKEUSmL1(dVD7E zv;VYM#a|bRFx-XT%yL~G{4sBHeX1>P#*Bnbo1E*4^2x&n{L@wZMp#+&gs~H2AMOP= zp(GAzNKbg=7(U96hAbfS1vPZej}ecR-(sV>BB7M1TYVlDuNE~Th4TCr6BVCsI5>-GP^@5ua zw|9<2Gt}@ssSoSp0A2u3S=)ia_og?3hV)L39ai{FM#pkSRl7?N@N)Av z<+J5`lN1fSlXaNSfe$F*h}RHOFu1P0kQ_D=W>GRYc+VpuSO>2dQ<=s43`U)_ic)|p z5p&7}jq3%I0gJ^T7j!MoEf$PI6_idz-WNKj&LkhgfL~2GN})Ms7>@e9xfcqT6bGN- z_VzCOX2*a(lTGg3j4`(=yp=@%kZI)9}VH zEO_O&>R8`>`49us`xQ5Veyp-^mizf#$+@ybnf^Eb%!T#0J;+aQcV3`!K=|639=Ei7 z3Y?_~-)UyNRqc0t(c-S2I=D+@u7kfUfEX!X^(11VV%Tm670}%JyMQ2BUops_aoUDc zab6U8JAU19t6?Ls-u=KbknmnSf93X(1CGM4v0{8?+-NQlm|**zT#;?-u{kjM!UYh5 zUg!h&s-qG3SlLM7lW9?*JT5S~3s|}*RaD#yv0)KzQI>zl2?_;;>up7DNo%lMCXwiN zYNYY2r?k_Z<~}(654?wPGD9dnnTMQw8j7Z7pI#iqZNJj4*VJyJaz?xht`3DCR&PM5 zvCyOapSz+AMhphek{K}RE`;uF@S%kEC7K}A;AmX%wq|$M8`6Xk-{sGyn~Qkds<`X^ z;h!&fUIc&Ss84q{=1J!0q)3Rhw3=8!^Yx@i6gYW5wwoORn6G+uAo zD$RJw^`ktMYk=YE^$M08mWt`Rc{5N6P(&hX<3igpE8*ao44n%oJJ<22V0gh<8TZ-0 zuU4B&gi(SK3_)$1J$udYn)l-wyU^2HqW0gSZNSq%?(7Y*BN)HN_SpoBMwRnwSEtcYX@2(GS)sCR-x06G0^X_Ktd_5xsc_ zA`&;1ItK}2W=B4_scSV@Z+ST-w`@$WBwnJV%=bH3%l5SAW2404lMrArMEq*GZi)!cKdkvd)9&Q--=ZMnoa zA@6N>;SP3k?|eczgc6a1NqY1%Oloo+(v`wfi?f3FqfGPuTH z1RH&w_K<-m;veON_@S!@^WhXuSTJT!=ggXjxOZ%YUA%kGSZ|yCW_J{+4r5EMJg6Nk zz`{0pYf0rkzCMrSPhqbqBdaaK~ZHumbvC<(c_g?5%0lTL{uMyaci zu|^K5tNlG!Amy|shZ0pMsMhuoM+}kCHgIv1N5WKpb+yjAE_!$UP{6A!@c4tCp@r)5OFXHk(Ea50);PJ*dpi6+_zb_Z zye63G$#j+V)@;~=tw@i8WH9_*2{<8vm1|DA7S4P{ui-$mdfY`jcsI6!fyw{IkWpe` zz0`B|KP_xfD7le)u?`-MV^C)KgKx)ug9Dxn%M17GQb`ViD_XYks0@DQ4!G)Wsk)ri#H?*X(&q6P)L!vFa znosB!2Z;oB;5q>49j4ATufGU&r9FLZ_s?TUIY|)HV^G3vjTkzw{!YUGE~51MlSb;& zwnppWYT;Nj_3QC3!b!^U4B^zldi!WBnl`q(u~)#OS$q4OX!T0>^}w;cTnm6-Dxfx! z8)%_)_iE&Xt5OMMNzL84}Wj)$dG-e^YJ>y*NV#6Go+q# z_1W8U+PJIuySKcm_#Ly9b`jdo%Jic{C?M9@<4=Y|>>5z&Cof@|ruO7u_| z`IlYYTZy^!Q;eTTIl*QyGhPXwlFVx|O?r!kG3d8-HTb-!sASer)5(`*G-@;OaQ({YNJMq9b9@Z4T zSjbrwIS{N8yb#$0o&+XTJ03u#?7fY%3`QOB?I9D6F(T!<;`eAalN{&!fs+z%HId)+ z45uUBYH{7)OeCJ=#sBmieo#;B73Tt;!YCSu+;^-Y=lZwevC2n+QIqK&tFRt@KQ~6$ z0jk5sBXW7nG1}`WY-ZFmIrMP3>^=)7{k+G1i1$GhHv9cK^C6K>#INUJAv$;tam#;C zuNV6B_{1kKx6eLO_z1*$3s;$8cH*D%tZq_04X-d6T{$WYsUB^SUT_B-%5@VchMt}x z6FW{YqX?&H(~M=n1CY$0)ZDD8+YO-d5^*nt3@t#)xw28DyEln#IV{_yvx?haOsgBo}W-qKCMM3g3yBh5G!?wFcu(|~70Xn%|@wgcB zo7k~)FrM*#)|};Oas&k#T%B^_8~tap;LKw;WPE50CcN2Dr+XZmWhHju=5kH^pd#iM zi2=YM`pBQcz~F|l`^{;j63_&Ivp26)NbT$HziqD_ASsyC4BV*>JG&mDxaZj^nG=eJ z47MLs+O&>q=7uglhbb*nZ2ZO~YenK}w}2+@VA$<4wD&I`d%rOB0eUt8^`4AY&DvKs z*T|s5GJ^K(W7SsVbL#$9=3ir9TlMNsQZEM{d|qdTTypU5UqnU$0F~9;&MW-vtDp}Q zb9QlQ|NV4~l-lx(ayftd=EvpUDA$6vF2hlHangFit&;74KfYo9f57#A>&U9rBX;NM z&@<`{GB&{L>nFHh$?WUuuo=2SFa(@#&}8YeI>v7g%slw4pz}Zl}q6li^2FQ zI=B+0%e}4c1HA9woSnNMClzpdWx2&rOJ2TWK>Jj$EPP`sxq1)64=|k7`!p#V9=4J%8w>=>@lY92q%=W-&uA9C0wzJnk zoS{=v%kZ4bRpytRnoNpqqe9#hqwTILsJlZubNqpnl6k+ikHmXe?Mv{}U*-J%ERnaD zh)U6PW6IBF+D|5E)NX;3>Bj&ip;Z9B*#1GPlo5n}qqrP3UU^d5S&V-ey)9mUasV&? zh!h4fdf)KK+Q8p?1fLlWXOtXe*u9?|!3g$@5b)W8mr5$P-!?C`D@8o>{u<6heAfa12GRTq zzShTIjL+fT7h zV#eeif<7Q?sI)niBL}!pVgYyI8lWZR0!^^#pL_c-uWp2wFqp8Au|8C_#`kbo(ls6{ zjugKQpfcEE)1M;^+K-p=YY#Ps6^^f%q-s39oS3gEGZOF{wD)+$=EL@Nd=h|~GrWpY z){(MORL{!9FT=Pr-Y1DkBoxysJzPq-uheDjau?@|l+yy`v3>^;0mI{V&|2!%!x4=# z{bG_|?^51{gdM6)nN5>T!DdioGbwLPgdWZ_DF!=|ILupk5yGhN(mypr{SRK9V*e5i zW@-I~_G7l<%TXRpgV3kll`(r1+l*{#RynSd{|Yy~6AeK^<=kfd5j?uJOhal}I~ z9uZyp2Nf-!X$p}{r9?%(U+*N2)C%Lj6QWEn{k@AGAge9m!*h{WN$uZgmN0hwXNRRf zql1zy?&siGBnM;$4L$>V=b+O@y$%8@4<|%E* zqP9?tH*jpqOY-|KgA(iCq1BH4zckz+K1$KJ_v57SsdI0oW1@LY`G0%4Xw=7h&T2%6q|@5y8i-Hx^Y4HH-!crB+MLVtR6g~PkxEQL_r}@HTQak6 zjAuEb;SBgtBC~TWc%sQLitGnmH?gNX@bjqSmFN?94bwKaPUK#q1j2F@Us0Z^>m6>pJG8BJ9`m?&RN^8`k ziY=if7$K@#yLRLl`C~~dT`HH+Gt8vvc4CIgQ6lLztkmF>%kx)kqGbdZ9DJNlub5Y> zH|El(yrnDNJTL|s092OWokzfe;!;;)@+ZaEQ?>YL7e2DQ*#ItbhX2_3G3k zx{-Rccw)aLcH9>Z{f~c7Z&68d}Zh$YTiwr7n}ji;^g}GfPPs*Qp_va6|MLG1zmCf zK7#BD6S5o}^q^71(MpFk%SrB>V7YOTr_!|!gde0!_0fAzc_jFsB>M<_lolGjel|+k zTHRCJS$gvvh#_hQvzdnIlk4I z@r$KIyJ27Hoj-zV@4lsq0&CS|f2jNqDsM-e8{4{h<$=hGL*d-cF}G3%ZeAU=doWjV z)KGYO?w_!be~E7+0z4CBU%LSn_(YV7!|=g;d6V>F@rJxm1!G6*^`EE6X)6aS?JiIJ zQ0NN3-xOVfQGy)8WH`zGf%-}!k}9{mD06BWwkCd>-MCGReuZ>8iDH!Kld<8~oV?`< z)}(xe-F{v%yq;$YOKU#Cp6Z{h6X@2Igl0PX2>fIQ-s_fG_Ns0++W2HI`ecv`e0t({ z>UeVEcj7pU+PwF35NXqL>yfzsbilrT{aQ-%wTi?78{xU(y3y0s*G_44!%~+@77Rn0 zX%7ycYqqI*Qso`BCRcU%1)k>SL`mZbCs_v$)4mQqBSvoBTCMXWhn8%$KEt=z_Ow-Cjx{iW=lp!KM_j?wpB(Q<=+^_(K&u$jar+}H4LULY{_WwKjPQ6g6VaAYKH!}LMcs&_F0V|DuxXgXNua5lJH&*)GJUdMK^Y*6>k zKInzolw^tI4YzA==`0uXd`1#j-Y~?oNxyaXS6K;De@lJsLuV8Ghacmr64}^>ty}4T zOw9dNEU^=`45OMADUn03=;?D+dS{|9$6if5%TatK4)f&m8q*_+5N4t_@W!{T!S5LOZBEpB+(Wcs2F5Wxmy|wF9vhWqW+U z`kTTMVTC`r$kzRlD%XGSSink%;F@F+4aG*q5B;E7M6+{X8k1oR{v(W@KiJ8fAB{3? ze}2$?uWtIScJG-3sM8 z5TY#32T^tg_JB)V{K3&tksP@1G&V@Zc#3K-Kb|vJ%pp3_kR|Mrr9Rc6jwQc-au{I? zHQit5j7IZxNXp+1obEaj+4H2pF#l>RoOyh_K6SvjlzRah-VcGUmTH#V-)Sfp68Zwe zV~d1KtA|6(y`1|y{pw(~QO=G^zb&1eb6lJQ9QXA{DksUQPir$1&NG06)AN{81d^_G zE)7}17k^uApGPl_)L+FPgh7z6L5sA9{C2IE3yXq0oAU-cJ=2Mx?U%~b?)iveg6X!| zztuY1JsT((zim@LI62!@v>mSe6&YJjlIl7}0Xg>dngQPict*LD?!%hrO9h`|taC)xn zI9O8_cqZ6eXjUx%xt?*mro)Nt(8s!Xa_!pdw9=Aq1*(3CXo-X`U z@tM3a@gpGbIN@{~;{8+gqwDJFVQv(n&Vrxx=zw_{c}SuT$#1_83C;0o?;;2B=K zgOb(h^bNfK+Zy@^j<lX775`qTtqg(V+I#C!=8`sh|a3SvqZLLT9?;YgY4JI$Q7?BVd zvKQrqLui6c$|U=Dv7yl?X`;rX)Jor9hY!tKr5BMgNn9eFVnNwY^Co~~M(>AX1o#c{4s4EJgZWMz zCf%~Me-gO!HmDdX+wnNBxlZ3}?GMt{$%}CdJ5Nhp-&?QL7_F}`MUS9zGtplBHigyj$rCv{#U59>Hccg|Ml!S*H5obgOtOB2DK1gjDoVRrasH z-3;Qg5n9-H&cv^=L)usNcd?00ZxxO+O zQ%Van@%`{KZwP`y~@@&@f;zCPn%VL5jF1uL+f48FwcC?M1Ga;~o3S=rF~H zm4UvgQyHja&4fMPY8+M#h_Y4K#C5Ba81E;eHEs@k65Eq!O;pV2QZMBA5-GD-Sq?;| z1O&0QGvU22u#1Nv89}vT@a#9)R-#GR_V7#~A>&rn>Nt%{Ku{jHpIPNS#oth9!2PiB z+-_%cs`%L^MPBcSyK2wxXaOxuT!ygQ%fI;{<7f$f|Kq3Mo69xYSIW$`0ag@hD>m}t zmSJ-GCu#gD`m6uz2xxHlbk@K5#WFu_?pZ^uUvan+{bZJP(yo*E5LkG|R3xqo zPjV}+DG5KH=F{eP{Zoss3U+6~HvF0dAWKchsI~0(L&L3xR#2Ef;qrw4zA8HiD=<|O z3Z>L;py&m665z+tJw=e?n_(39)6B;G@28iPP8M^QJj^yZ#zk5I128HO5Y$asIjnc{ z7c2sse#)uf+)ndxL327YHunvsZ>&2?My^_~qW<#@-vfp*hRx}~ zefNX-U!`$6>^NngcQaI9m69rmaNSfyz3-+5Bjy0!P1lql9`~M0WJRfDow?}}D(NT9FKz+X}^++O_ zG8q!j!Y;$D;IJ*~eYdbVXPENO=dYKEjV)yp$q|HNIce8qxQ&xZ5huzHU;RWuKQMK%PpW zEtB2mQEo8g7eA)kuKnJzoe$UqIKi9}=q2gf+cteVu8fi(RQ`Ks;CIA=WfL_|N3JE| zdVyI2HXh^M9tMY5bbUmU<^bnx%=gFh67S_eXH?FLc$_m6{B&VXYO6>6QNO^yF+cz5 zS&1jgTP5l`a%YR8=+ApUGUny`5u~`TXgJmdvIlsnsRl0Iu8-=GrJKymiloo@Lf#23cS&SETk!G8#TL&HiKnvrLa$A?h=KqAV;>Jfd zo=I1a&vJs$5o&XM{12-i2a3s5tr?DU5KJGuwr|eNl@#U*AQeb-Aaiq*Z^dJ9SfaTJ zQd!4&Sof!+fQ^%TsbeYX%ZcaHc-RpPTjq2{5buw!IY&nC`!Hq+Cr9xxUJ*`qObq(; zALS(6c`94Iwq{#Dm~TN~Z=Bj0YTSQ7N&bG&TR8yZ@Ml!m;}GvH`&*BtpJO~z_rRnd+~>|ywuDF~)(|MLI+hn_CG_9=^$zs~K56W8hamN%tNF)YMk$<% zRTMpeQs4ctP3tD=NUS3@2PnZN@14jabnwOh&P>EfE7pLDW4lp(RFt#34g&jke zNl=5&cCHU6rj4o$>`bnFGnRP0NGq`~3{IxLd#Sc`BM`V6K!q#3;P`7MS}SkQ?7)&Y z;?yBKLFdPFem((9ub7vegrDuCq-S;!a};Wl4X5xL2_-9mfB|dbDZZfjlDV{h<7wK= z?p!;YsMaTBGQ0ti0YTqn!Z%-A6={`@r`599 zWjR_Vwv*toI_g8dDSu$SmCQdtx?-cejcnBb)>uc(IjD&xjaH|*gXB%tY73aD00E=PfzAj%j@!=XH97;`?KLNjU>kN}_5)g=_+%!dF zdflBce-7#F;K}o|eNA>xi*zc_1y=bXW9g`Ptn7Ej#c^u}s9?!O<9|P-8*r6BKH&L7?a!cxX)fw3Fq{=aK87mH1v+!|Iv;P0s6g z`E&sItCC0JjOORbG?-6J7m&UNoX|Rk?sBMjz<>~+jM(_3(i1vV`M=ZmT&<1MFNM*{ z-)R+TmdWS7x&KY{_mR+g^pd9o{#S9s&-9hmwmag3($HG_$?s;8fBn&d?qmVkapR^D zmbLJOSLx$;9?r2HGijNgzeRhCT}vfPYn^=pntC^9s;ow5n;h?_v0p>s9eCsG`*=j* zAzzavfC${#>??HInRFbQ{pyAU6qVoqzV7xsC`PL5NXA8m;onCjqev5jXiZJAp&ywI zwA10$W5y<-OxwiN)iy2er z`9E*14{5A#;0Eg`0lZDNPq)&7NZh7ybam69z4_K4_k;>0U@|yb`?+3DG0`Tbec5GN zsaupxRA<|z!%UhlEngdCW{Zh+#oHgjGF#dp2^zq})B}M;M=Nw_utkN_$8&*X?8i5< z%R@ImE}}E1w)=j7k~BPTN@ihRlqEQ(>NORA9`ar<|75GMPpdqsxza@!nd~leYNtV? zZ4~TGDlJ zN3zJc@g0UZ2skKrGmZ=WXK8GU+`L1{9QI&vLgScZ$-&!rpPo4cNfb$ z)3nA_?>YZ~HFeLuzlH|Iye;HSH>(g4G6Td!FIF7<)AVjz_a;Y_`$|62&VHv z)suI|g3^&US2>>Hettk9w z&|0I@3z}(8)e4`G9_?+TEyRF{ki|EpVM~KN5{C~q)#paw>BD~iN71=QGyVT@eD0S> zBIL5U6h#QdFmwBsN~Mci$S_JFxnGCebJ-|Gxr``s$tC7~zs#*rx!(>U#tm{gG_rp3Z83TEdMgsjvkC;v>@l>XI7#`1@Xr zjq|bfJSj5_$(m5f+C-JE+g{ z_^-eu!8LdbHI6!V8jp$T7S}nqoAEMqTSJ$Eo1v)ach%7k_+EzY0|)PZezSP14DObI z`oze~j?>~n_qT$U(miY*L?%o}-s!$UV%R7#AMBzKCq<5->f+B)P}yn(ksHq=O4T{6 za}C{+sAVYV0&758Z9nQHRrRX4SIa0+nhcm1A#(60z^|#53B;g;Q{NH)k%-mRs-Cv03c==TZ!f4CCM`%?> z(Zs?c+4;cdgqR;Y{mIkxoc{CSNTQ|jLr!vT*X7ryuWNiTFu`Rog=i~J2zu7L@x-|8 zg04+pOpMFnHdz(*NBX>OVDy!&`kPzLp^uq>zvii4AdkhGW=XppTyvK-Q7C?}{3A2| zIAy(V0Z3gaf^I$+1M(E!gXM+6cel%hK#r`*R`eCS+;M(rv{1{#R^$QQvwrVWxY2!> zk3nBg@qHW0g%1Me%A2DZP=2(4wJ!g&hLuu>y$cxvTXh#rD{qHn&Cy^=Age-J*)6+_ z?7HL={J{x~2G#FyhS+iG#Nu~vn2`<|WgT4BFjEVga4XJ!+ zj1MeL7ONqJojpry3=W;fhg43%HwOqS1kH>>%wsAI`LEFHGWIc|TGHnI;LgO8-6%4n zu192%W=|u}>^o$fLvOo$t<~S@tC>B|RA9OPX=h9v8Re*nSQU>yYWJRo=(68txPp- ziK{mutlrSQH%G5Ob&d?SlD&J`WC1Jz@ zTWES@^$Thq^|A+U|1i%CW1q|_@-|2xoq6@%x4T#cuVsWZMd-?hCtkvAq3F4$HWAEIKiZ5T_A5J79M1-95iCMEo3Q}BPWzP7D?>~jQbG7+;KNFjzh{3CJjfQyT z6Vqo+N2!4%yhIQrRbrmnJ$p_;+-2JzxM23Gg_5gxfFwdp!@=Ls5pMkRW-6cOO2kRb zMleO#b0PO6$TBH9N+D$~S0A5C~*jCtw{BxXx=Y2NKdOK?Y|X~39oh+*zraX zw-`BPjm7@>4IX=cQ$MWj%q(i*T*94zdSh0TgWrJpe5kJW*(Na+#3%vnN4?m)<)5i z?U@_B$ zRze*Oa(c8o`Gs{AQ>*1P=iHcI7_*^kKCbtMK=y?nMZ#2xvp)iajUhIFfqrUPY||T- zo2-+C5>L2ZsN8qvs)agD*nEQd;B0E`-rDg0n8&dNd0QskHJ8LW(QL=- zP|Y@ezcwqJ8S;n6K7M^WUoCp`JiHvq;by7tYbyyDyR0i11kr@?9H zN50ROnJ$EVnTSl-enGIs44JQpOd6znE&=$1NoGKm+@)@a-+^Of!*2HDrGZ3<+vF>^ zK@|&~&w}t**S3K>G1DS&&Sr)=NNYn)^ynQaAw$tq=pOfsj zqJQrZ#jy$Sqx?z)mg>Sx&%8WZ*xn9M$i@58-<+qvT*9b%*l2jzNE8YCz*A8+V^yw| zwt#E6gz<59lDXO%(h;K6aCsI_?x(1CWK6jCM6i-*CI1-E+Sx?R>+pbnGTe<#`rOsk zlD!50%IhNG11e=GU01e;rvpiNAy)f$Yaz?$U6mJXBMexwkjagDv@pq0N46GTA*GO|0E; zX?(tkskKcI)-_5PZQ^)qwFmqg;$9_)`c+ya zn;Bee-Q0YCm@Wz#4=AC)hwFTgT;%bGY1P(k*TISuD+*KBdH@r0I)$j9->G}Yt6A8y zAB`*!9JoU%zS)1uLpSCzTk~~H?yp*FV6FCX&LjQ3ewTV=rQ68h(Y+wxcx~L7TSnau zd&d`@)_U`AmyzGil^P?Z&|}5Jsqdt2&4Eyhd4i^Lr24C0T?;)~A@o#L0?^~C--jvk z#i(Fh#|0*)?Zcalf7ERWm6-n*B`suB&<5IV-+$RiU6`9+%iS@+ww))*bh`Zw{w!N4 z1QdfrYR$x~f0cD>orJ>!uPn~3juv=kz}(RN89ybRbMB^VB4qDoeaD|y4Nl+@hpAo} ziC&|FtNy5n8&;de>`#?lBK-X^(Ag-d%t=zb(!E?-bF)i_rWh5+Ee_lP0Tj}&W_pjG z6NMqSJFli4E~xsg5FexF{ck@Ow!dG>qs3Th1`?OFMJ&Ba+@E?PI~LMNiEmDdP)5lx z<8v#FeeU{#p*e%(jOw;^Aw89F{n9hK%8Sz;YXSiWi>cu=DKRFjQNHxQr0%2qnPeyT z5X486iu^>M;i=Y8pgp_Pnm>EJ`=BG$X_9Q=G)l;K96*{F)g1g6oe&ejTRS!*GtgZp z3@@ia0|&?MK^W#EO*_C357Z_u(H>5Z{V9K3K|aKYdmkGLx^+dgc~rw_IOdxXi5I;) zA{>{S#26pJ(gvVlMeP-}`5NKSU28MM=xJW7y?qnMNiWic6(FLSqvO56R=a9E`yO8K z&a~iGC&8kHtmZF)8@f+t#c=686FZk|(Li}TPU*Mck(50ceHyb5`-U|Ozu~$*bMjBD zg77cMlOz@@yZ){T3FI{%LiYEGv(<5ZNtlxPm@NMrr;VWFA#`r7E_E}5n`GPfmxb&l zL38#|FWIU4GXYrfDW`Lojr@`Y%kUdIwya5TxqZLzo^7pR6|X%R+?)D_gDg&o?}8>x z9LbsGHc~w}oH0KS?x-Q{c~TiVW@M88Le>wqYa7p=pMS8?Am^BSq_XVWAzmehh2 zo>6_Vzq$!r??2k7Wt(sd9DcXYxq7>_$D+UaKV1rA22;~40~-J6Mq8ZUt9KfHC$^`r zRy|X3-@LR&|3}k;d2Qe?;l+33sl8uM{rGS(zBGxp6`B_of8E>Fpqo={=&ZU`zg@0; z*Qu3TZt8Pm6TVL)@S<96CfVijs;_|}dro2*ARaxfcNQwE9dXm#z%%{2;~Q=>-&#l;!{I7i_6dt`NNoy^_OJ&Ik+pU={C7 zoD$Og-6sSOc(X(iDZ;msz9o|x3AR4>8@JV(ZD1A6zg_n9_Z&uuUrK12(K{$Xf^%*6 zx2MW==Sxu&ip}RJ@QuHFqpz6;W!_*!D87H?pl=KyN0&E^);FezUaC`Xj)S)0YNV%$Z|c|3{fEv+k5plaag+M%h^luhp?Mya@sPD;Tr;1pO^8PDCM7hysLeb z38V`QvA)$I1r(iUv&4hZy~8R}t3!1#BzJo6dUy$nj5-{_t3+ePe)ci6u(%M0MDShg z2`6No6t*8_xt=ziEra|luvu5CfoLWnCuaBlAu63Ra0A+#bV%m0|Iwc2&qL92jGN-J z9?YEvCmF)1qahOc2bijlX@-;4DYmm213)CC-6(S1u`HvsbqHEh@k1*(1T^jTVBT;&v=oaSWOr zJkEUSk$>A>ml3b(Bff`VgI6;$Vz>q2-ctbmoOu3sCz3gh+`)e^6k$h@G+sI2(RfB@D zt1Hku!mtKEnJ_7kH0b}{l%V|@uD^~8j;7E1lL4`E-@)6z=U@}+o5|rEJ$B_E=aBw< ztVso5Ot)hTjjk+2C#HJ&HoO>2ercv1J(ejqYd%*n=%L&qBa~?5`267MC4U}=PC^!; zw3k3)m}k*#8?XcuMt;W8eCT_D*&}KNQK6Y1?)+>ty}92EZ7+3-No(eCBZggKmOME0 zc95Kj=zThXx-f}>DF>a-Oli~)I-OOfex;^_HxNi2@JjqIi^$RUkgFd2gr$_8(~Zs?m~ymduwJsqcZ zxOi@N#22!Z>-ej#)R-}??XL|Q6nHmmWNx3Ah8BO_zS=xu=6+%cMv+~(cYSqeX4Ch1 zA$Ta{+&fnEv>;k-8JIl$AkN4u@aKX@{O@2o3o^r3 zcv%}wPYiuLX611{l6rj`Imz9$NCzefh~pm{oFvFqRWrLT#p!)GNNiP1e0Q7wfqSTB znXb?bq(u?e&2lt{74w^=mQ8t#vez!{?|H6Yr}nUj;np>s-B&b{o`Y0cZ}{1;#DC3n zP|;0vxt-&9aAgxNIG?L?99`QO#|2$jn131+^z_8(N^N&g%G+_B|? zXAKTmen;}dZ)z6+NwH#Y$0`}73vjuqXHPA(w$LXDs@t*a|1~uea1u19<&8tD&DhPq zg|F!j9{{3dRLXWjc>68XOv*P61s|0Jra@DZW9TGLT)dR50kW zAv-4}n_=8Q=jUbg@_r8&@JPhJ#9OX9OZ#6tam867nb!bWLVl%6PKngws%*oHKjLzI zzzg{K1P~BHj_p_h1tzb6gkJgrVb%;AJ86Uwotp6>_E68#ZN@=ByR~L}|L64Suv_`n{oemMUV zgWT4hLv@Kz3kkuHCamu!0rnV!@#rR9Ehx>cL>2qEIZefTxHP&c5?OtWTT7P+Ax#Fe z_}Zn<^pu$&T?0`IX>$3TEw|;iMY=#qz%#vB(Yf;LJn=H7m$HHw zQFXsQX>@V;cPwzmi?-al;txP2+^ry8UzpFrg`kGf7<1^0Iev{%jo4Ti=#J}<`2p0U z&Rh$Py=FMeaOU%(*StD!)Ub1?QBVF8RNlz=}>w}aulFRDpQglKO&e@L`dv!$PU z61sSfLtMtYV}XB;|I{6ey&BRXX6davAq0JL4s(*)j;c-;d9ws&=GwC{eV_2AH< zH+TZKL}|#X39nM%ilrIU>O|RTT8-3~6~T(eJCz#XB`YhnBah3rPb-E=TZ1|mIh+PL zwU00=?6lj{wy1$q2<11((m^scvxHl{v&or7RVaI?^NUb3{qcCv!V))BG_0fDakmK_ z8E4B63RDcC5-av<{RFRm`J7CBwY$)cbk1e-{_iU?JVB9ZA&0m0=jI`G@oJV`qFcY* z_J#F=ISBml-A2$+yl2j<0W<+RQvLEo-@KWoR-$*U#d&ZDl+9#hD*I~I*YefmN%1Zn zdTe_#rhh}Z*Shn_^w%{ZS5=lP{pgc6{Be76n{jmeq>$ycoj z>dJ-qO)U7mzz^sNg(`q<;GU(LVHBCpSncJSJv*w|yBI|^NVBZYl!o>D2Jz_2IC+3t zHfSSrQeF*X78C3OL8&pA93SKaH87G#bp#g^S2g>cQ|AA3tFav}$T_WOin!E;g}_k! z>#PgG7s7VUl0fmbYeRa-ajPn1epF8^l5yQj zc&+47838nEABMM|uM4D<_^p+f4IjPPOBZCH30*&3>pJZLqmwAxhT2O% zCN*Tc3nrpR=5oVtCZ2cx&t~4ikTssmplifJQ`IPku*@kQ0dw6Q1nOUt*I)lvG^m1m zi61EnL)(V{J>x2%7sLPK_ww<469~y24_VLTTAtsP|9slf1Zbt(w4Tb)B_pmr_`tQ+TqDB<5hOk}b(!6K88nnGK+kDjR1;_cphj4E1uNbn>py5R>Y(q(NQ8|3u%kU;CUjU=)o^b!!Axp{L7v-pLitHCj`;| z+_-*;rsAW^P)Xhl{!xH08z2r^Tz9w;Dm<*I*bLWw1k*iI>0dg0zcxY|*t1Re$%hQ? zr@mlZs^9WnHwjQee;k!pUamYMo9HFtT@*`KZ9fwye!IA8vXA<7jEw-4#L0#?0ZG4% zJav&yq4@~>I($Z3%p+6Ri~{NF(HrU`3evYA-5HaIn*VnZ?$42>?%RIn1n0UgxSYdq zOZup~I{4(i>D~~4GmEy}bn$hTxqJ7u%2*iM^47(b0)e9|4R{qo{z^NdtgLl`Z7!KF z`VFst>_>InJA3`ya~OMZJ1Kd{VaLlbqZUJ$y#T%g_rlb;?WP&fqb*;mlWS1gI*e7c z+crALcR^+_8@rx#B_42G^3OYX{pl3#^gAY(|trwgO1kjAVD{ggxJDr|tb zVP|<*f-9F~1dv~z?MCO%6lWv`D%=uIQ=jyx9ep}0X zEtez>l#X4pxMHpFb6F|%yw}I>-Ru`Xg<~?ldJf<7>uKE4Q^m0Z zqoSMcH(6X{*zO;hhUc7?9x<6==V1;0=QeuJlFKf3Am)ue<%RWE$FmC?$~z9ty>r=M zxy}j@J?%YZy+Jhw$;oRLb&>~!cud*RwQR6mP4FYxF-!ehEggKoFLA1g0EKJZ>;~%2dJC-xQaez+; z-twJlemFm8*XYzES>oMMl`>gSGNHn9tHd)h(frN4-Y2-%kEy`P=?XVu$aoVaj2ocR zKN8olzXN?%!yb)XDS7av-xtqSn&{Ob3J9z-yXX=sGh3t@6Wq--&If@M;%HB%i$?dd zHfhv@Td3NKEw}B)L759=ALlA?ZA9Ai$`)nC4q5(7tKUcq_mtzjzoQtF<3Z*b_#fpt z89`Trt}i>uxZm|!QMI3$yP@ts)eZ1tz@QlTPKM7}fCF+=$onoC`ewK$CYG#wRF$@l z8UE}_gBP7H3t3j3txiD*+L0f+S1*4FquaRtb5ravOT2+WEM7IAEMfbAaP?U?nzZUr zx!;T)J+y_-RA_$OQE5)w1MY+&_5)DifBocBu0Xh;iu%do6y3i>YkA2&oJ#lSlQ=d+ zatf~mi6I+Iq`GR_+Pl)E^OtfH55-UMLl2=F8|nA-I+~^+tsgmVZTM*>XwcIT&3vSv zSce2MPznpcPL}Jo0X}k|6&;;ebD32W+qrsE!N z+Ew^R=b1P-&u7M>l{5T(N; zg)SG|?EuZ)$Lo>B#KDzu9&~Lkb9Z#e+nYWz;1hN-xX;7 z!qa3E2s+YaJ5kqa*~$*XmzL!2Ae}!=P;sxhGVtNX2eHKr<)cD8wtH-}NscNW^cc6L z^AV66Oh+c3*Lqnrxs2|9BiAg;;hXsmSsG$u%j|tj*6mRXJ*0ZBEa^V%zO^a@Yq@z~ zSr#3&(M53YzF2zlRUgj`V?P9*Wym%9IfUEeUSTcCgDTauvFIpV;l2;k{hC|bA`U|) zC|=IDievTY<_kY(xSN$rJXvogw3H2!-Z$D{ZRu}Z1CJC@aeG~lAq9N)>AP`*eD^|$ zM9)^B5-PRl?Iq4nL_tWMqJTc~uO)r`iP=J#?su`%6=6?@k zb)5fO74(R^9ewmb#Ea|ni&3|VO!wZTq4)<$zFg9VV!#<{tn=bSBGQv-+WuA8rCR;7lyjb62 z1@foVI^Ov@O;zxKo(!J&62Bcdf8FBOC*>ldQe`HWVcEr?6dvBuzqJ(Qhl3oqZf(cD z?A_xNO_;*HYIJS(iwGn+!eTVWrM@tOuDaK4`PS~CzGJ1C{b_<58@hErNo9P< zWN_#*Q&;w}w@dFbA`&w)0sFP=bRGtMx*uD6$Fq|ke}UDU>Q~5?adG| zy{SHztBa;SxttL^YBCvW0XSN}=9=r?gfRR6w+Cdp2OHNt zF!;;dpoiaM-G)J^f;_!W8SnWhdLCjnXTl)|Ij1tK{c>@I%q>WsJ74)yc+R6>cj>*3 zOwE5)dCa|6*{!Rk;5FZVq;-s_POT@G@mrVJBg@&+#@!zrTph4dBEl$cn#6eBYjgg) z@f86lx7iXS6I~lC|EM@qhfI8BEZ{tl%L~o_t%kW4h(A zrEw0SM|kn5lyM8;H9jxwG>%kWrnbl%wY42Ifdlu_J?B<6ywj=4+g3*RyJEUnY1;zI zJ#X@DQ#S{i<%-&9_Xu>4LZNN`512q6w!laX`!UEAAF?Y(Z%Sw)Cf!Z1zx!?Ask|Cd zF?F0${_E(`r~21XSFD0-ZBVN^s_yen=4|IZfmcXBey;egM@^`^;|0ZOAtB0h-f&=i z_MPr~`6jviAqd?(r&LD}KXWRF@M&c`%MiDubxaQ$_AtN4eAXOg#?vx@|2LX8zTrN8 zG5DIlWiMXU=HEVftAr!I3dH;Cw;~dJU(|-j6BmPtj4uwqmRVdV$t(M_Zjxs9wL95{=TTH zusj?Miha=BM0c8~e6q8>>DRaal*7lR%3N!!m-#}&&YIX>Q?h?qf;n`}<26sqFD7m+ zGM}MqV;8N<++|Ac56&uv%b{ijAh4ppT2~KgiM4n<_vcGcuq<|c%$|hX(~7{G(m4l3 z*lJ>D6RUxKxL4A|?=lrbBXcc-NDQ}3yLikXzoH(JOR{94d@QiU>vAs({*r-_n@r@t z05N%q61LaZKraUQ-5$~bW%j2Cqs#<{3Q@U&7iY!H@Yb4V=%MuEv5&LnA&K{gQH@Idmy499poUMbXFY|EPPP8?tSc>uf7cU zqy@cnoJq2L*N1$yWobhr`{M<0($GFxZLhvF`v?|NN714=WA8JL3?~uk1$E8Vwi<`) zvKw1k?=v2CRy7|PeX&p&F$EI-y+^3x-%A&J1*t6;mf+2U$go*NQUF#^ZqCfo(~Ku62qu{;n~2$Vcc|#jQ4**&~U(z zvmzpt9E5I`l{?v;?fVX4VC$+xwQ7iL0mntn$&EQCQZn|rKg~GMeGzg^7qIsRRl$zW(9-{B$yah&ELH1_5Iv-RZw8P3Fi$!@ zu53xJ+x(zAoNuAv2-~R?4+CpR++~jJ_n1vB61mr{xX{WjewU6Xv^&-`epbweOx*c7 zLyOwbKD-l+o)_U3lWM`{aYI!higpt{!h7>qy=M4A+fRdT-w^reu*~vbmRJ|)=8s@1 zky{!7WpCex=^S;wJ{Iy0R+7hqBq08qCVOc*r6G@->)9^kZBID2ufGZ)=f1WHgSOoS z(@YP;KEEGO$jD&WAJ~lGU7UA}nv){}Nw-;oi+v;cx&uQFo{$;e6fH0RT^8}qXtt|r z>tc(y==pN7$Z4-P-Dx;3-I4L-1GlutfRU+=ynhB9A$vbvj*$QRy@!`l6^DMg{7<1- zivv_H_byuFq-{2g1}XiPA-@;rr>TxBB5`_@BJnKzRF! zSCiR)%a(CQPk88{SivLJYmoyZlN;{6i7}wF?up9J*d4pA)%EipG_0S{aeVH>mr0JC^*IMC@AD&q%cK4Rm~4gvEv&uGeUDnc$I zCgBf9JqX0i{_PG>OXiZ2axKbIamfmv-wzTz+N^QUZQB1$(^&iH1~Q6D%9(C(!(6ef zykeuvv0kOYbhpHFqx9rL$DSb7*XH{3H^rwHSe|WIY28^?w)tkq$5+VYdZiMDZQ9?b zsb9b&~x$5-|C_oL`jHgXrvrjycupsL$#o|9|CXD|#F59u8F>bl5 zrlDYxtvR&c#yV*-vCh?iSzSE2w$@LO&TFjMjz9f0+cf@6SHp2Q*Qqb&Sp(kz-rea! ziSpOER@Ao}ZuT+oD@reDQx83c#@+O-XqMZaL+gaf9P`jV-OK|k7}!ebxY1-1^H6&? z2kU^)n4QJ{qK?8hwVq|?P08NL*0;MuZp@h_w#c&X9NwGlob!9!>%J&7_|~)39c9i& zq@3I8urXhJk%51G^*ug^ghA3ZyFwt;LQKSH5kB)bF=zxT`6RVLjl6DIO)YK?B37f# z#y%j9(bKbKNE_$JK+S9t2rf_scN0v6aY0U{=2!i9Z3J@>RMTHxYgKRl@NW zY63=GKh#|=ciS7rrD7;`OPx@!hTu?RIN!ov<*UXs6nd3NDdqd$UvkF{?S0h8>ZvaV zyk3UI9zNvvqA2O!Cq7(>|3V^KR1OIh7E18{|8bfdc2*VWiLfWL1JGJt^+%wDV(Sdviy`{cwRqecxstm2-=g!8D&uB(^H0{c05;qYk z(vcT}dDL@&x1)~fl<{omUuLZ8iDgbEuSF8GJNBq2o+nWrp4Z=atY0?|rpC{w?M)Nai)JDeULD03ql{dLDiB%~7 z0eck5d0m{sbvD=P14fBsPI+9ZG?s(rU8sMdW36jZ*Y+s#U9FqmtxdH8&VVq>MKjd& zViCCSrBNxnH>)c^&%QWo#30dgJ*Zr3B^?)7g3E^}6 zOQUf7fKVp859p?Rf6ybbO;+*t;I|*pX8^+q>?W}G!)3%@JQ!R0K2oU`mSBbfCGx93 zdQLNSxo@C(xkRpbqHA-wE|DXyb|e2$|GkeWY?X>GuH<&jy|KQxA!r#nlb!L8y?n9r zBFY`La|MVPR0-5f+0_4vwfKiqg;pb@whiUY{nsI<>R-h-0j3Wc;kDGn&Sgjhs_w>* zf!s|mtEN=2%*+7Kg3Hi;DPI6c532&W6RrnitE~wuYRf3I>q?F02|+m!H?hLGs(vF~ zNfTxr75pR+6yl8kg2BOW{^s?pJ%4El`GECtf6j6Fs$8rva=Po>hxe_en8z3uA27#4 zkP`lhH6(v&l=O)#dN53f-)!EaMj*LBEsXBQA5IqHWAwssoxy_S7ry`SYvIxr?{7}M7w&gh5C`^>CT!s zuUy+jqN(^g@#)O6Zt~@Qk0zsS&i|vQo{|9>ZvnLD`az8h?%Am7nDhH*d|)n-M&5vK zOPc!I0qY;DNQb7Qxb<_eFL(G)rG?O$4z~4D8Mw4HjR(KAPYl>FHAES^3oSBw7b9tg z_pvp%x-gkJ*7c9hAqCO)27vm^D9o@j>|OWhogS%zJl6h2kIgI$C@CzXAml$E8LT%z zABN88v0&z@jc!E!D9m{nxGdv zwGO&D`t`J_koRseSgt^Guoj~Z=Dpz)F!#2!mp=I3z31KN$)k_#0G%ra9aJfrFQEPi zXSXclY$x+M(oJ5g74v|8HRiX3p_{2thAC(|J^xA_0%&SO&FVM8fW0LC!G z=`tE&+dCRJAhKS9bNqAp8s{A=VG)VNzE^ziknCfFG`_s#=hLd)$i((;@P%9y4&AKQ zpQk3vQ$QUJ(&9yW<3RoM$7%f7;nXBQv(_aM1f}J%dpGoW!``*L^Yh#{Hc3u}Jf=~;)?qYr3hU2*&6MM&Q|ICwH`SZb|uflL(oqmNJ@>w_N7-gU{@9uH6K{y=GtQXzv zfg68*=FGz5AD@g5(z?vof-QfoI@%3R?w0Jy;}05a_Cy4mGUQy(9cr@S$A z|9Mu`@J9T(rZ|8^A9ln2`BHD!hIM+Y%x{zazLue*Db0IGX9``ySmH071+aBRCT0%u z%gakdWVRqpxxfGv?WzW9Iru!(IfX|8rew1otpMmuxLyxt=Q7>WYyb3<*f&uRNs{>g zSDuCiZu)y$7e;nO*dN{4PQzK{#~B?{+_I-9J$^I$=}7z-U0{prEmoWnF;2D*Rj;GdZ-GJ?x@x!_%zg4S(7U#fgq z)6z68|9n_wuTex2JGie9*iOlt>%8nFj879(?meO}R#lj3<@^$`Jjk%ix4d{CXCimM z-%WaU1@k_5-z(i`+M@7hc&oC~OP_c@0bzJ${i-+pL3L*;#&3D?hNJPG!TaF^+YtRg zEwQ$6TvhCkVZ|5^FcAS5Y3lTu4d9STOh7;SstuC zkNi9(wBQJ>uKmLwH>gs;CT^y6xJ;M$r5^P*Fs+i(gqE=WVJJ@W7!fZ@0d3 zG)#ZvALq79b6Ecv&>a+%ZhBu3miB(0iwa$Z>8drmMztv2G){;m`k< zLqWl~ym5yYHR$$oo|ovMnBRad6%JPn%IE^gFVyvY+?&=XLd%s1rCiD1mmbR_26E(`Xdm4;VH@w-BI0%Mw&)w3I3A*2OmbC6) z_tNNZZ*{0N&7>g(80<_8x&8bmxR9MV$8SgOpm<*5dinl{1hb!-TRwNh5qzvY zp3i4R9!5Wi{v_0=c=XWc?VZ*vi^**M$$I)a4|k~-P-PeFUJK&IYi=*Pc-kJ+Dx>VM zQ)LUDpR|I?`_tG__Dty-{P*vyu8;xocKx-a*bk&m~65~t^LV`4IyIg8yItC8X{mI0;sN38FPLs-Rk>HklA=W%bZxHb=Kb)pX}qZ4YC z@gP3lYaao#@@)dUIF|@Y*X~Q_M(~X}%LqJ=MC~svT5%vNFqY192YOB6rBt7(IwM_+ zF{?y#67|-K$Zyhh{|nxETeT!9)a$;vR(olv>t`MjySe0Zn3|^5>q<8H-|nX?7681@ zf>D{c5LPrd7%+(Wm+?r7waDO}=f~k+|N2V8gyb1~X_BgL0tEPHl#!Oi{(4z66;QF8Gzbc&z()j93-`dw&VjlX-!cH?(`i?{u(K3D}D;^kw^f>3N`Q(F-5yrk7!NDh1l_=nm#bvTc zVa%hD)@V|1y)Kn2KeiojDXe1Rg@n_&1Z4NQ$*^MAH^yvHpWTr=G`H|3pDnh4(4hpdxT&JJ{ZMlnkT^S&sJAn23Jp#r5K8TJ=%i4UrCy+7e*l*#oimnXm=dU zPOeKl6?Rs#{6z1Sve+dyYN~WN(>M3 z7Qg=N-EKm<_{7^)c*h<5v3Nun7+X~=Ui$d4)t<%M^$G;Kl z5lEmLqdfgA5r85GF$7AYD}!{SJDpg;^=)nWRl`;&H(ot?*MI60_Q|KpoU?}{bA{g^ zD}0it#^qgkPPwvRRBr0_hDi%A>_#|4;^Gg>x~X%(@V_1?wrDgSNoWcK@cY6tjwGwi zu}+K0B6RD3=spnTo-G$%l+5mW*k-iyomGMl91mn|7Wvr0C~JidTF8Oe_}*@6)tx_K z(srjMPfq|Th8C5|FtkSSQjBL$y>4nP>Ew}5Pf&AGXDfpI+hi$gv`Nw0q)}lqD@bno zee#E-$fWPmJB#rZ#P1qQrw~V3;a8)gPfwg{iZ2Z&5xFUxoaZ><0hfN>4tx z2JfYlnN)qT?WW^t8~z(B5N<30h1PE*ZgK4XyqA{$A!@c5A=5-H1>%g6vwcWz#ZAkY z_VSVDoqKd`gvVsNC;e-xODCZ}z}RW#%elI*fqNe`0E*?zMZc2CY?FaT+6?c`q4mhi zsJ)AQBi&PMsiMHd(4^~L*2P@BNh&`wzxQC3(*AtsV$|m&_yP$toOWiWej)}jDE}y` z^hk|8hYbcefgB>EBZ22bi6?t21m|^|t`&vIyfNYi(C5#D+kfSVonBOsvc99I+IFMr zoa9H}{47(>RjJ(4NJnf8+H~fXTS?4YxA`eTPHtxEn!2HpcFd3ovHA{F?wMo{Mb;5; zgTTSiLabDak!uz1rBO!Tra0fl?N~2e#`$w^WB`fLDSRUKn;F`WJ@MnbVOPw$Q%zIU zx`>|4+#H**)mK8~?Z1mN9AG6$WK40X}V@0|`p#0h8Qminm#k>^>d_Xf4)NX4=J@$8E!$efC1 z%0W{z+RK9=tT}yD|CaF12GMv+0TUIZJt4AbOui)Ha_RL&}2yb;>C9b;md)Kv>}t=^@2IQFB>%%Ss8c&Q<|#&^TjD}#EN)d2Jr z1vpKUR+v77_~P>P3#|>tD-(Nnjz(IPotfF6KMqIa!5d80I|VzO*P}^)tQ! zuyMXc3H1et=ek9@_|NXSe8jH>Vzy>I##0GytVlYCbQ&KudNvL!)V5BsRQP1yry}j9W z?Yh5robx$1RLq;2TgU-0a_m=y@lAeNv!j2^%!EH*=Vi{n z3co*u!Bu=c02bOdf{6?*a2g_0)R;c#ZbK@6FobB zLER-lJAIn*+(eoNkJ2MB8#uFhk&y%ZHJdEd4uJr9x`&3gv2x!P}I?l&F89+j)B9AicGv+0YNK4T& zQr?1C6w%^)GX8UXrmn=iN64ZqfKF@=2gnm|Ui07gJ4W7=?SM~Xz|It-iL=F)#z;Oj zw*9gG>}1zlz9S)&T!6QUcBxX~Wsc18pOMiqYFbx`>U;}YZ)vGHH>T&pc#fLA11Af=Rkbxl=;ZGPn9zv{*F#b zx_JaX0_)F#aAb<{o|sk9cTPAjd|^6s0o@u_ykG#|VPEM`Jn>Opf*3%vB&A_y%@nrc zb>^f-i^20{K>c((4vBw=lS&MXH68fPYTCDE8fxwN^WdG0BnAKXn%}%k%bM}b1FL^+!e01%Ix*png}Z7xq`P<|IE?F z3C?Q9n^6l;^ZlUD*%0R+6nh$uP+)ZE+i>^5HV#e)y*#=xGc+F;8jj~vu;4D??NXd@ zS6;N>t~alEBhpmAUaUhJZ?fx*3u?L-Z6eqkYM0w1=h)+58vSfQfm60nrvuU!vYhcL zw0#-vN<%@NFxw#9QV978711^OhpuI0`utId7HRrj;jVm8N{&wiGe7eJN)mN38Ydh@lk`Zr#p zfNX8&Avux^_>I2*6*HTVboIh{TPmv3O0cNX#T`(Gl*o*AT1~z~`4{xkBs?y&@{`)j z;lTrxDMH5Q!&uBkq`vNkjuc=CufV9Ckc_OXDb(igL998sa0;>J&6`bHsxT7LPR;E>AHJ^Hc{?R-b5sB>k3QNFfH1zP)lM1 z^2i$LZs&*fMtu1meJ&k$_e%26YDRcY+lwloiksIKoGTOn@YCErVgrb(5r0z%yf_MW z(y(B+fY~db4J=cS& zg@RpG;9d`lgIH7)DQ-ohrqI2_cqKr-cxRLrCeh|LeRgHE`|!KZJH-bc3va{CranQ}uf}d6+R& z$L6=?ss#|IZHDO&VMK}x6&?hGVgowK6;#&)bYN=cg~DPk%$oSVzjcZq=-u%OL&_tk z{LVQ^Uh(3zqn=O&0C)skpmq9$>m6wO`X+?C&Wk2c_cIUg&gA5Oz$k16?B9}AFz=NK zJd+2=^%6=&xVx(BOATS9e(P@pkJu%Wrv2FZr(|9`xQ{#{Pbh?T3(}s!B8d2_I66-& zLasWceGSrT=+Oe<(TLxY)2Bvmrn|tfednf`R;oH!C;R++@#KzW4?oMWVoRE010qH<>K+McAJ++hwt-;7Z4@#f6Xj{k~BBFL3(gaF`n*L@u z#K5O+v#6pkrsDFc)YT#5+Q+ldd$^VxH^s-bfQ%80uSM~H_1KrjFFjUoOXd7OJTBw} zQyi@i7f?n+HBb3MWlZE8H_T`(OKnoX{MWr=l&1kVi#6B^4Vr0zN-0YF+L9vFb|x+SAa#Gt8vU_CMx31 zQ(^mquu>BFsIxCSIs0JB$g>}NobEXJ1nP~LN!}|%yk*OYU*q1u_S%2vx()+FuuN)U)+Os&VUQrbEw`oBi0~xU5@teEI_i#79gb zM0jv?jM-tdyRjOJ7hl^OY7?m#tzQ|XrQthJ(UL1L4s$;pTh zt&2tka0RKhQXv&Fk?Zyfr{K?KVS`7a?mOSmTcsgGVPi}7m2XNjsaP$?5yBrab6oC2 z0Tc-JJ0{uT)pTHjAKMNUpGsIY1-Wnkt#77ChgS3UU$ zw@re*-6i$KO1>WiVjy16X101G<1!z-(MDu&2>U063lA*a$v+_!sO_&@%fg-@CCr1; zN$Tl1{F?mqo8`3%H!ZI)=A}VTdaw-#N#vGgW&g=8U}dN(3dRxYr?(VlT~!|9)7Xhv zG@u#*QAkSr;56jY56{*QPj?qRy_p2{+Xhip%=rH;cR?Mtq0>qTQPoB9yge^V!|G}pG9t=dg|LK`~M#Il%ZYqWz zMcD#f6_zoI{&OV@o^SML;3)Wlmsj+b)jMy)<=H=lBgW_)>qT=x}_A5aKOE{@+k#yY_rh#7vEwlG_gNs#5MqSJ5)_+${c?4AF z}UH**6a$VQ0UQ`I>^Hv^h^A zQ4(eXX_RjnmT=SJ)2^Dm<2zU6?{_?vf{yvBm&O9~$9pN%i!Gf5vw9?M(ZMPoa_!6%h>df>#$Vtq2suefAZI}AQc zS{(egd{UPcq>p|cAFP}wd!Tj;NR|dn)#XDPhFUbgPPZx7ZS z7hGT@TD_z3M5A*ml?EMKh>)CQk_D7DX4PXEphuuA&^z~Ms`WCI0Wn1$@Z+Yz90*Aq zewe)0&Ya@*+xKoiTyH%ab#@KMqz)A8M8@@xj2ezu{AIXgTnR;&H#zVp%JFzq_Wg5B}*fyCWu_gc>vYQ_g` zOQP0BAlXR^UbLMs9`)dLYLX2jiTe{v-1lce8wI-<7k~8~tYAB`pc1Nw+JAu3i`Ti()@W99GqB&@p zu8p+>j*iv}B__#RLQ4gFS8PS+5LZykM9a*4dOuinMdoQ2=fi&l_TUfq=J^z2g7cyI z!~*9h9WC+`P!2gY3^X-WCec2jFqwWF0_t6Z1~E!K?#W|x85cOR3(X>}MHru9VN_uo z7u3{nJ`es9ELJ&$F$KL&MpHB z35)YV0Wio%zja=cA+`9rAzG}Mim!`0XK(UG%tY|9fl~i4Tj%!(*RU>>i9~#?3?VMC z&9XFARcEDtGVY?Pu?@%?g_NP*#d*8qn*;Em&@x+9NG;>}_H7T1t_itczK2smpl&yh zVQI_-xUYPzDn0~`bQ~0oY(Vq>wF}i9ayi-L!JO2(4~JSD39XAc(}}H{^?g1+hKD|; zNBAiMGp?i!kZk;ap8V{ZdR8fkf}Nlnv*l5^!kBU3)W)np)+1#f-`z0C{HqW_uduOp zLAYn*>D3S>_({s`>^Q}D`<0aqoMKl5`os`;xD=ll{9=hOfpqmFtyJpKNZV7ncN@-t z=ZkFvkU&N=E+_zD+punEyAE8?A6@B96Z>dR^|oa#wE*#hJMP?FCfh)#c^}#h7s>VM z(1y)5xK!Kzd(QdipsLHgwOm2Vn47!$@UynQ59~Kn9lc%s zQeu3fVHkmupm&yKxs|qZ9a6+!qY=fnvz?D6!n!&etZ#`>6~(UKR+`CEs(JI3_MpVH^wO2@RUg&%(|TaBm6WA`m7Fo zlxp$}e0dpNJh(vkY;_7SeAX;g<&|qD;cJxDd#i&%`cE0zM0xb@(8B6cDpf9)KC`a^ zQtnq^(wt3k-X^uakw_kAwZ6R@z=OQ+%|3s7$IpCogV_A9lg7f<`%q!ZY?xdZh-P$u zRo8cSR&`<|6S3*bLv!|+3`S-^W>4mQ7Yezz3NhGN1h7B8SF@_FdOkI6-$uJVW2ucnx)@)9{Pvqow~iN+z58Nhdba0`i`30FiglE6KQ|vL(n^ z;Y;bLLJl^W^T?qydHVOmkPH)L22Rdl)-KGzXx0B+o`BT_uXx*_yXA5ZN(jZK5D{nDEfq{ zutc)YoX;H_rf%EXxlATho&JDk%dQ=nP$XpiKC&VOX8?kzww4)toL!g>OnV3B(LPqp z%NXr;#L#$<8f<@XSmLl!qies4ZD)lQ`z%7`5$^qZ-ZRNfxHo<=K?1ig~`FEHx$LT5I4Dh+f>9#3_OqY zg0xTjgdQ*4t~cO*^!Iu1lm;}7E@b_u{w$S`iwR7c?k` z<29IZr9ThUBUK36c)Gtqe0SZTMl>A33Fdk?=U6s8tza`)X^4FrLd<U9l#z=P^42c=j6lD&?g?u*>6>ydLS)nOMF> zo7tAnw6ao5TjUu?bbP~7DSKAg^@K*l@ImW{*L3TyBW_~FNlKK@PSJciHq7x zSWca#>q+hUy-$W*em755vJ|2ZC3^<6W1TX?e&g5<{hIIN4gPPHW<~mtG~Lm7D%Pdl zS7&l0I^jX&BIsP|khI4Jv!7)XJ`6*IA>|KnBm(t)9S3#uKTZBMJCsRS!CVwLU;K@H zc~jZPrC=KYCTe!oS9^w^La0Fd?!#x~!~|GD43GZL;Q>IuTTEwB5iCm8A8%VW zXe!(8d(XSZ2ZQnseRm>?XatG*DCzm`B?%9w`s6$IC3HZJ(?;(Nn*3iHkqnoHy(!@` zoc|=I6Z~l?^ovOA6~Dt-l_~wBfA^pgDPa(^2vm;{f}6_C zMo0f7a;N)(%MI^fME zxV0rUKK4lV|6(Jl!u)+Zz$NU7k<8018Jq7T)_0HCOB0L-Ri$IuD-wYgZ(v9<)`3tO znep)LA#ipk9`*T;j+?dhkAgnkb|Ta3^+83iE5SDQ=Errl8a(>Ay2Uq_Z%A%aa7z-E zMkmCHeB$t+G5)Ww4DCzrPyXpn`BhnK>aqU;r^K=#xXGi9>~jnCqNqo0HIq!pSy1Aj z;@9!GN_v5yCehu8OP~Cn&S$*rnJlasRiBYmz=N;D1SJbHUj4aITD$7 z=`ioDH3Y*IDz+7Y^=+hEJAnP^8=qX1@?$Gcl}TD3+?V;`FtxEM>sw>2^fC=34ohY4 zU%4ml05Ec7T?QmLKaA`rBoaoH!k%12vjIq;Bw`&(K4KnV$!uBnc$aQ+WQ>N}=gNpa zENTPCVvJ}g5W3zB=ox=3c55#1V%}mbO^h$A)JyY_nyr3!gMqh&itUQj3H0u3nFkrt zI?dFK^=k<_Hndx5$!uEwOEJs3&D!fSKezU=!LWSO|LcB3 zGGZ|A&}fD8h~_;H)n^_rZ2ecbjf^x*uE5B{q<3hX2SCH^d@0tGUq-`xHOv$H4J9D; z$by!E(7LA4D-9bp1rGD2{8U{$1gm$o|F+F86dxmB#MVXGU`Bm&H`!68;39Su7=v-W z(evAi^uyRG5x^9gv`~Jbr#T}NJ2|5SpB>FoA`-4aqTIM>kQgD1cfw1C@zDnJ(+4lr zI%C9+Nhj{wGW#jW$J2`Wetaa-&GJr`4Qc$5-R;Uu*@Q0^d;`9}cLC}ZC~4Sk93*1t$QLx8uVSHArGZln& zhdaTffURf9NGW55A*{eo)#E0+hA{@~<`TN5IX}!C_Yi|Fz_+Ghk-3fZXk53FHu|cy z4B|g`F>fb1zPGGbF4VF%dO9gNb>jaE)3ipoCUDKByS27iPujKajrfIwr1z^*E#M*L zohXFj3u1b6CUZX8qXI4g-p_w_FtmIm-57EKlaF^Kdaup=^WQki2Z)Mp)6DlNyo{tb0^=v&j3{G^08CLeY&^q z0TA`mLwXEG5^OUXc4zoxA){kU*vOxSourNi4zfWzcWZr+I%VE;7=C&8($<9@cE&N9 zfhz3xfv+xptB0ABgR!dTPJ!pRn=cwVpeO4GXCVca6^3IgB|Jd;$f*LA5aaI}DW_?h zrQ^-tpfo?B>kyi0n0gUwUD6=h4sowC6NdhkmnifghI36(eIpM%^;qVcX{gk9Jx^hI zpwyQpU?0Qu=y&vP4n$Jz>BqkN;e26tnZUxCfCxw(069`HjGL(Ns@oONEj*Fo^B_$K zLqZ2?Jz5qn{sKNd>8o#a_?f-0UbpIGU(@hd3i7<>q|!XOs|Hy_hKl%s@hKp}%A`G} z=>0=)GWX*gx(5<7pK^VD&Q!MjVM=w;9t<3Z)FV(OIil5e{g4XdG*Z=T_~_p1<*lx( zyOM26FCRx<8f|hcCWVFq%f&ZRYAMcm-d|0p*5>u=uAC|%#U@e!3F*x;_G^(Ji_~yN z%M%l+pN5XZbu^g%KkEbCqpBf?dXb3y-j}J%`Ix~3CWwQYg6T0omsIN?_I^dL%R<65 z_a1NC-u{sX{2+hjtiM=?k-qj&hN`WkE11^^w0xKs4>AI;9Fd~iW!C)hS+cfi<1ypK z^=1XowO~=J9TMS#tLn0G$4OW9eoa1*3Gl53vs~|meJ~pO0-vV-^<3dBIUoWt_V`>3 zBWr@%`*;jWAO6Aw+6sJ}?WY;*r&wpGdb}Yu%~BFRw!*btk+l8TGsVrbL33TwS_mR6 znebNSp@UfiV)>LG())rMy=*QEIn_v4*}I)C@7KBz%yD+NS9Oi30_G2K_4)NVz=RCR zq_Gw5z(SKpG6n=miMbj>8rW9&gP_i{Ye#HFQFOGEQ#l9B1)@ZxJVRks5y*XFUTP*4 zXlbO_Q=)EQ*srPu|6r9BWV6)J_VR0zTfe<-N!R-2mwxrTCb?^=O)o5;geL1zPW8;# z`ZGs})SAcZ(x7)MC_S9#OBznMjY4^TS<-!unIFIwD(Tgp4s=7fHuBdquVhc=kALf| zULyW{{rNF+2P-qhIBQB-Sym#?kXxUt?mW52xLX#?8U;*+t8;0X)7xb3He4y4O; z*+B^Eob0n=+wj|MEZbluX$ZZlKsSu1F8b;Gq3bR4`k`kS7l8bFSWyzw%8vo5wsJ5> z`aPrl9oUB09AUY9iC;gg>A9$;QQfX*!*W0dC5P8>t)Pjov;V!J!#r2jWYx(;>{&k) z#iu&?9CzW&ici3Qog`*X8j=eF`1X*IZH&FkPEV_*4)J{-VtlH!=3qGQ!T zd>4Q{+rKpAQ(Wk8x#j$j3cGKRf!IaKUi?*f#W@eVMSLUb>#ZZm+xp9eVSa1>>`}U=KnyTFVp7WL%{^jaJ_W|Oe z`Ty&6Py=1PmD8>MXOeFLKQjwp$&aV5p+rW+=SKdm(@GM>D;Yix9Cgm~(ij(7va=>i zlXr3W=ra40(l`*+!XTz3v)t-7Pf>Pi2J0X2_DSayE`vDqjT#0mVzRUQW#6t0?GvL5 z&tkh(igz5(1G-?~WeY&5hA(8yYJ5sTN5h|Oh&5_B6JoO~TL>CVy0!uicTiKE zBNea$3ID3O@Qx(U15(_AZv>DnCnc4Y$`ZSMg?9&*X>1Atm2 z=Xr}UVP)%gXZ9{-Wgnk=l~rf*I3lufru-M}DV1PuEfSm^qE}1OJabOXYD#_iM$t8b7DEv1LKI77;1stT+yj&7%;C^?|q)Mze%ca zlUx1Ht~%kW<({amd=YN5DZd?}P82&j#~8{=kaYT^%O5RclSHcDA{E_PMHjRD_7TND zD(>m;A~KjXlTGrsZpWA2R`V3r>W@KCib|&EjJcbv59;g;dDyKfjS~a(F+YDFn8Wt~ zm}}j~?X>+P8=u`Q-;@7X32#WB?5I2V;{PqT#uw6LDtWY8{agx4zimPE4EC7VCCKi2 ze~j6FqpwQVdCGZH75dc##E_|AIUKlUc@8IjKsehzZcO-Lir&du6c0g9ti0!XYkOR^ z%e9CNx~OGW%U|I48_6AR-A{kJEzYY<5K|V_7@Psmr@CE%OalhbI^V}GCAK2ROlt+c zhM+xSYm3-7IK;WOq14>7D~&}>Ko4eV)}q=f(Es%=&O&+04z5LjAFd+)wD zj2x_(9O*JHsrcgX<&Cts$>RNz@`h(7Hi17RtV2=&QKp7CUvxZA#U!86ESBFEPX{SE zSuOf;(%NP5S=F@}{KBIC(H@2Kqm8rU-K$QsV`<~mEV+&S3UF&^nLXRek6;Y! zkF9yIe$JLC{XaE4s)%BCOaD-~CVX8jBykb}L_lu%5f4NbAZ3sq;?dw$_K~53E9)T$ z1N*F~{LhEIF@l6097)?a4!-KMtX~V`AFQkON1sWis*_qYOEYS~hAzm!M9)8+i#=71 zI)oTAvH1@c9kpbAFx-X2^>9K^b*A*q|IL}*zbTax>21k6v}&dZ)Uu9~8M(LxC|wSl z8JjG7AiUufRc8IsCVPhc4I?h`+qX+BrO`OZ<*XrI8NW!}kxTi>`ZBYQaGr4*xQ`Zj zJbW_VIAgQ6f0SWYm5~Uvg{f{~{bW=aMB*5PZpjcvf5q^VLp^`JXL1siYQ>M-zSxA! zR-cKYAPNW^4-j?Z=MG~0CO>mLJsESr^Q;LRO=#GAt%}lx51~h1zXT4~+6ROVh}y#U z#eomUKUv|{UC{U=#bcS&kSuIPK^cmWF?iOIRuL6($@2k|_p6cYVjKGS&d3F71h3#e z?0-L#)c8oSFea1k0U?yckHG|2lN^?xIjas-L30xjmsM$sI)s`>7e7U>q%l35^pB2% z33GQIbDu=hi&?{WP|iIQzvmy2N<1JrVY?AodrY3@aE2pI&N*1>t;AtG9M>CfiKDg{jY5w3?IF_t zV!5{&Q^4$u4E(}j{XVkKON0s{<_u-u_rxELCQ3*4ph5@y4ag8PKP4y05Y*tU(B8yww{wIqFoHB;qmOJ-?%s`j+UcA0i9 z?a?;R?htvXg_AMly+8*TP&&uS;HlNxJ)aU&5>aVANOxy{A4n86qrK!DaH=m7>CB+f zNeLrsAo)}?A&^7)Utx?<7EE;ev&5VzgMNy@QJ5 z4vD&Succz^2*`^0$S@=lGV}2l^c6LC%Y5c5a(nlKc?W)vkb>CVN!R-J{2uRN zTT4^$idFZ7J1Wy|mI$%dh>#yi1li=pv#uUk#rjGAy9nMRys+qRuh(?U6>)d$^XVE&O33e^*2P$Jdf`zTnkxYwNLa$uieVqjB|PG zbj6+ZZsx@9*c)yZE{)XzOLQtT4uoHi@ndHP)uoj_L+puC(0J!Ju@jy6B)}m3#WvSi zH^ZAJOxr|NEaHjv4leC(xBsBOIrV26!&*pWevfYtV1)M|yy#IRS@odtqYMqjtXLxr z@3}|NJ;*>WL+J0w6p*}wL78#p!kMvw4*Q=1^%eqNEIp-i0S1_SN~ER3RRJ0D<_j!yYtZe9%qt1N*5_p$5LZ5ko0@Re8%oC!il4!C`!m${v@ZI|F3ER{AK*^y5L!JtCr;<7ZFQjV$Y_O?s_r z^Bbtj;L_+3o|+J!Ukx_4uO%0yw-lpBKg0&F%hV(MkD7WoD&VA?6ps}Uf$rz6f01RO zZO7CBu;#w_gVlQ9ykB+nF}~oG!(xRVnawK~iQ~6cL%I8R-EIsxk1x=_Oz#Kr|8AyX zBS6ya7!W#<3P`lINR6aHUmEhL1rLGl7kVT_LyeReW^)M81u45X3+S^k8{DHsT_MIc zWz^($n<3^P@0HwJ_e9JHxhmWr~$rfSXUagUG0m%SdIHuwzk2zPhyVeb)(`^^H!<`DrQ#lBnDVU^s4==i0u$$w}scUMjwU}AhlZ>isrRXYHDmY{E zOB>-)^>SWI_WO*Q-5NY%Jx;ko?fu0nQrfkh$rP+WGedh)kE%umM@BFTlt;gzX(LQZ zgjCmG?5eVM0sH@jv$}>Jj+mh@_ z0>?@}1IfFZV2uo9Pek3=cYXMEYOU&!Dng&qtF5sDk~{VQB0#NOI9nzJ1#mX*0F#ewgCnKRESg->l0?T#r0-Kt zMRA;uk6vFPc&0MJgkO>s*0%q>^1dmzhf$*~qi^hmz25=<+6T4N4(%|qk6MukCT%fW zqJ$id60ACnl%3_k2d&=!&>xnEsL4cjtqup zC3AyhSC1L7I2axSx;@X9>1^_#LeICp{Yqm@^{a*1xbiLbSydTpj^ihZ8nddjD<@~H9TT9wD z3PdgR-(b6;rHX3Cr6L>7%1C*ID{yf43^4yyYn9l~XSg|ZH#Ew^c6b_n55yXsPUHfl zb&8!*>3CHh!oZk~7VZP2beN8N5ub`<9?4T89jjofd(v%N!i^UT(Z^f}x7^O|c}m(P z=eiy_Houy2w`Ab5ein~@U`!FYz0jA4Jt0uSOwI2`Ux8h$)@#D z4mi8(kj1IBC z4ou|Liq`k7;#22ez_Ltibca;48p3cN7ciny8@g-P4~>a+Q64^%>=5hLkuLtofML(h zZx3%_{CRCKn@tm%vg<*!7qt)S5X7JfnZXi2Wy}Pl!-of{&ktr8F|QVTF4In@ct~?} zuhcgHLvL?S19ChdYtOh%`|)PD=Sr0lVsh{xcVZjcY>f#DM$dPT5cjg76N^=AjpGhm zDYL9yX8n_+k%}TX$4rbL2C=Bis4wYx-DU)Rpr<2|9Xs{A9L~R2EX6ooJd(a}<`Ml9 zWdGeCtUvi7YWUIKyA}T-n?KI=mk*6w8Jsw#4=vA=(UgDXd(3#fisVeI8sqB~N2on8 zsJ?FC1Jm{WS@ydf?=bU1(nWNrD(6wS6*N7yLMaJVNr(fR@&2I#P0~fs&Q&1r{?z z#Sa4UI7ZO%aDa(40jYK3>tpIE<{-!Dfaht>FaJhQ9PcU{5v(2=5v)OaQqA5us8Dqq z#hXj;&lka$-JG)i6nu8Xzs8H1;Vb@T2`9V{o=A1V@179LUmb`1*Pt`OYC2!IR27A! z25ARQeIhTZbr=_NkJn;)#O6DWtRotZUA_xC76AIr6mgzRB3X%U7l@%}6$es`ZP(?4 zO{Y#$M>iQ8C$g28B8ixy#8*#-=rh$lmY25-A|`AjdqC|5#IXC9pKjglNN}H(ca5nM zh?G{Bi}=8wB0$gLo5YJHa_y%SC{F(HmC}a-XT$_$lIN-v_aL=9-sPYv;+TXT5jQhL zkKDy<`RJo)4lY=q<`v(bZ6Kz5+;&{$xo3T4ZQzUpEWMoj{d=qur#JZbvbZjrqDLa0 zq>Bfa!89^Qnw~pym%-TJX9AL2qs-ESkqki#A&ZXbkKGbI)A`t17sIX#?Tzk-4^&pY zw*TF&xJ(k~`jj-O!J%`M3Bsbp0MPv?7&t|*IvaDm3~t^+R-28_`VPCCo#viLV5c(XMD>+ok(XwJpo!Ui>Fr`xdJ-UJ=}d7vXjJ zkN(ZnJzp~ODyj=1@JX30B`$8-f010a6GbUQJ!Oc}hegR@L%6#i``@+3R3Bw3V^{^f zA93T1QL~0cXMO7`%NdQj6JB$|^^3LYCT{|N0Ib^QAOpCQE#YlR048*Dec(QH#8hoEg6<&(&&1#^0d&;t)~rDe;j&~wW{6E*J$`^ zU)_crSTIQmM#bn@)z?M)QFaJg7|*%V3#6}9tt2)kf7Et*%?DojX|uRpB|0n`6ZkX= zL9GyV{+yT}0Bi+NAWi1Yx-g!s$VSPxLiOe%`-MkxKm7kiDe`>CH&J}mjDZ+LAkg1e z5^splk_>B<4E<+)1oWWOf)(T6uPG{@G#jAqyS2Lczv3grSbZTqf7X09_R8%3YAa8{ zR5VEHr2rbs&Qqfd34Ghdfz+BktcDFqH%~=#co4W^TaoHG?fk^L-}cz7kmMDv!F%w zIHumewtsLJY0<(&pc~=^@B#MfU6)ej~wjb>=Ntlnb zo4e?7Q}B=TYem-k<`SB_K>QUWDl8DAL8my}Q}iE6?Qt-qticqRN{K74wo8=L>h+AuX5~3Oxe14gF*)06aCg|Kr5}W)_ z!RNq)!7lB62Y~Jp9a>Jq@C;uq-IN%CCe8v@S5pEc8Mz)p??!ZYE0Stw8Hw~cCwY+~ z@44HT1RTR7^P_>h;4p;Am~(4qm))3cB@=CW+1rmEDF`e3)d^|P{AwGk*yGzs+X;# z<2YoU0~mUlSw*J;%Fbfxl=eQx8dV+;af6tSCuS#m$kCL@iGMN1NM~I<9(o#EjH#Zf zB2^;+Y2!cjcn5mv^ck-Mw>kGFhFF(gYJn!2*u%o0<#JzI7{L`&H=0Pr(!y^UP7~V_%@|LiHZM^81HtPSm!fR`7D9xz+*TnOw#yCz(!*^oKN7len3Rf zkRdT5um?ttTz;4q=3rn*&Iu!p681a@p_^?%L(P|$mPNuxi;)c;AXvhdc`0gDo% z=DAKgS2&_;)ec3ep$t8~tB4z=T*d=MzrBhXEOou~g>V$)?b>D&d^2iztk^b6eE|<{ z?{n3jqpT+9)17vT276rT^GH7RKAPBVy3FqzsH8}tTU@|+3MlgQ?d$Vp~or6>0um*k>}Usk&^=2bD_@WU+W$d zpeXULCJb2GZw_obT>mF-Pncts4cW454C;5K1o8s&2AK8_{*6!e?QF)@&iL$CRuS~Y z=bShg{X0A~y|X&tY{Y^m6a06;-hKB0kZ%yjLm?i&y5oqE%deYX`aa(KGMG`~nJPW! z(>8ar1c*WYpO*4bT?2DB44`pQkoxSRK!E{iL&qB@zU$pZ1bEjr1LNWk7iQdG@@Ky_ z+U1Pzl`3jyM+n}50*V?%6AtFp2VG_93>>6@S)gq9^LbhHrvzK9hMTd z19z1tww~5~^#W?3x~9k6NG)`uuon)S=F$E&-^Oo8;q+P}8gsfgjbmEF8;MIG0UQG5f%VB&rs6pKv^ z$&81R-bW6COAOM(+oXF5BV>MmoIV{W4C7p_kIxmc2d_ajU?9@EjSyee(upBhC-{5b zLTKU(6{}=ru7vKavsQgCm0qLB#4!-S>)7i#vU8tJT-?D|D4j_r)@l<;-Z6=SO0AtI zpDU*B@(f}QCMmZyW6c63mrjU3B12`z&H^jpQb=9?Ng2X57v)%mU*XJ|&tkNj_wEG; zym0LTdk#LGJo=n!GkE56y<(|akh|9dHkPRu!`am087&AylYwR@NXXFnBWb?aga0R6 ziSzNoc2J|f)q|faYK2KKJ71P$#PwUp97hW)4MlK1E7`&aOtRYiwuv$^jEQ#u+UZ9r zj!N&!9x?*){U&vtwvBcfuggn|bXgZq{EB|6=vzbiw{sG2+TY4VYrSbB4nJ|3EHu#5 zZ$j+v!-%?%Uf{Arb4^0@GL$TPf$(dr$cxEE3L-K$Qtmagwtp`sITTAC z{H?OxDYmB-tS&Ekna{#^EXBx0#ra~)QQ~9l%bw_dqbhsSnEM<)33tUlFn6X-3FB{D zkZ{$oJzm5-cTo7M7^Y=J`>2=WZLTRXTML@SZid|h5xY-^mfnq3BtnEicJvcoSh~v~ zZpjd8S|mn#Ru29I2h*kcFM_O%h2Cro|DJ<*FttK^hSG4+c+1J z0MT#g_dk8Ozxzy`EdnQJd^-dv9tCa7Jj4yI0>0l*px4tlZuAM=eYuH}9c5$SCET+b zS6Xh;yVbwR%4}Bw7WV=3R^`W9jMkS;93e(a{N&+G{h~k%c$pvY1sm*B z($&m{(DBKbN5y65R{oyhB;0jZ>yrVh(_eF4hp}q$)fhL=#MwQVTE!I+l!ABHB3VoT z(jz2B%`RzOG&#_pgzG!el}_4DEl&m@jD27Gf7nmd=&pXxoOG?VEB78+N<4dSBw!wn ziK1dvW~ny|&dqrAp*PBVUf&~wn{1P(lNj?{Nn|YW*{QJ$AG61BaI@G_8k`8@j8SB@ zO#0P7AUTonYxdpsdUAVyUDa=yelfmW!0Co6)JRL15RmQA{N)1tWmhjIB4h$(v#{S_ zZ8Hb8u+rIpyHrVVDS^wp4`s;AC0t~Z4Xph;$59{)5foqBxo19y?t?ExkCa5Q70yqtT|)rJP4TQ&#OikXJkTWgaQ9W^S;<5~yy3 zglm&L|HF?gYRHY?zKx@0(gCP#_*pxUh1$4oX;a@UxbEJY-i2M0`BeLsWf3C&y@H7> z?UUc9k#HdP0J4Qu*RtM`CUUrC^95V$FT?MI=4U*ge9M42S7?XOpQhoE^KLI$D=r>P zV5Ut??@uVgb_Lmt+xRbs58iJE=#d8*)5+hI<3USlWh3NvlHU%-dM^N8KbKVRS*K4% z0j6J(D9(w5|6HXDPsVd{VK(nqyZk;SIxW{DD~aQEBnNB&lQvit(tL`U%tIc1MIfsP z&Ha9&*kokUn-6_T(wOSK3exMJE6YNV>#M);=74yP&)Z*4F19mA+)iXBUVsbg-Rjo2 zRLOotUn*SxNz_1(M0#Ja&Y+a>055Sx_35u(o@k%Pi$!*|k3__J{K4xu(}FMPFX||) zXxKY}AAltJuVtCXVa(?phUpyU89H9KeP@qyXt%v$xK5q=+q|p}p_>bvk2>ISt|b3D zIr~RM{hw9Y$>w}p?n&KlFjH%iKCfFNsK2?x!)tCI=EYuY|EVxsqY|M0L>2Za*fV~sD%itkmRn3c zLG$TntGZii!gV%`fLe57p#?0__tO|0gy&eTwCJaH^dB#5b>fnlp=aF4E zbd%G8F-?PR{4EU+6ynAil=@P)Wdq*JWjyR7CsgmGgv4CVbV>&gC zd0lS2IN~nUeGXfd>CUI7r8-1P#WJn4C{Em)`T)6XMd62fuxCis-)N8_k`C(;BDN<% zyk+Pu))@k(UE{R+O&*4$`l(JGhx}gpM~;9y9WPCZjGT+8VG|iD`&>nE(Rg$EFq_y8 z_q8Q^=+DT(Z(#Y=S6OG(;LY?O`Jx>FaR0UkK$yJ_X&=uxi=K}ANJ|g}Yri+?fi7Y! zcBlKKlPwQvoo1Z!gA%jJ+G1Q@4xK=nLzP%ewhOW16UG#sFKG&Ur43O_UK&o`_rD&b?C1u&?0FKw);(<_3T;RSX;JfWm;q#ES ztS5_)KpfM9Ony`QWg9T7rM8c`>kTMd=>28(KCS}*XR(ZlV>IM_#5z*Kbx}MLo^?^w z@1x>F4&F*y?+pxkrA#M%8SFD;cEI;}t8*z^e%C{>zodKpj#jwNQ4k?k)X^my(JjbG z+YAn4WCrQ+gE^pLG`a zm5T3A3txDE*ZiAy?U)3^D=J=qb43d|&Gf1Qyc@*4Y`@76-`<#jeGM1jvHsRmnO?Vu z>gtXmnJl@)#+~FMl=oObzxRF@i|wm7qzOO(;7-RED!UDgd`}*zrk~{av+ezk+^AjF zm567Y6iV%@s~1$gLuUd10~JB)zGpu^SFri?Wo)}n{k1~AzLxX5LP_l_bL;nP$D*Bo zSMA(q^!;I5>!c}j!uNN41d2lyD#9K*v?p8~#w&~jxIrA>=Zp1wi|_ORRp0(Yv>I|( z_-{1=Bg(3jMIOD*)^np_zVw| znN#LBU}JZo5_0r}xiV|s3c391TV&n+4{K#3w@I_w5mk&!m#?x1$V{FsH(z#z+;;gj za>dm*$Tip9EDIK2s<$t}Jc7^=MR{dxKR4n`mAED7>N9TC>uHk-} zS3ssV^ta}VpAtM8WK6340zB@FHXtKgOqLBY=7}_YQxiNwYR5@@j9cr0BgBWxaN=(Z z1FdL`Tdvc>p;}C!;&I3AccsM!V%Fvb2wwNvt8bHeGcJ>fI8Z=S{3>YST`wo_iFCHX%@5c*K{fK)x_D%3Yw`K!4 zMqyjFZy~FE#F+l!b;gFpQ&^DgVbvqyBS2$@j|LoV%e7WNLa2BQi#y$N?J6GYCt4Sk zj+GQ7>LNM#(JmChqC&_R^T1IR7vuX6+2Wk>yjYKli+V^G_))YC0#pJ-2yKQ587^3? z^b=qVcG1RocSYa`n{Xtyv^$`qgD{L4e90~Cu5u8_Y=EGs7&AEJ!BQ4usV~ZW1777Z zxS4}H=$erGT4H(2`hM+Mmky>IKz@O{(2 zU3?Gv6mh&~m2D$GeDa0RXR#*4{TIr^NBj-y{#y0#5x*PXuW|Q#qwntz>H8_($I<)R z>gT+fNA@jGq+GTXj2s7Sk%okwt9vGY$0N@fv0HqK)zp5xqk5a7|B zJ8@3Mxf|EVJMP{n*W9pHmaV)_7B0I==3jD!Jb2CLl&2KbYVnVvKtcBGRr~l~y~N&+9ssV`X0lbgYE=hOdIm^N-wO?!bFL zVt%7@7}^mw77D*hzvVj1wpXjIt@-xP-Uu3<3LoGR+pZIIjCv@8M-LzYAI}Cn7XSV3 zqI!ag)(d@{0HbBhk4=;1GngnNCr!p3z|@%YQE^~)V=^BBB^M7|bTG&FvQhz03uJCK1q=h1ejOteWn5e56Hqay$cwGMC)WoN zJkmEIC+BKETK$=FF5-NuwU6<5zHP-J|NCG(9nX!Um`gFHZI$QqeH?jpKjU~mILG^V z>u;=|hY<6h1&YVz=f=k@Zl7DkXfw`OYdmuqqf#7D5%AIH;U1O|J_1D6eLAN4&Z4jW ze$sB`oKAWSm+#M8jM0bu`HMMvzH;OAJ;e8gIL@UU_=r!1Gr6X%65{dAc&aiMD5m>J;gb&O3 z@Q3J;fdfYC<&ajbb<&eiqSGaI$)#T zqp^xb2xIUi+sTh&46v~FlMVP&DFLBm$2R&kT+A^C!U)CCMmy!#z%2NDhz!722Xw5* z_;~WGc-5BgH7oxfVq2*IUGew7H+-*muU)5~&BaSs%aj@OWcIuzGH>B>ecJr!v6I60 zcwAVVPOu8dAXG6!sD>Ooc(e=~F;*W)gKEb+?pm*}qkkj3r-m|UWE+15*ed!_so&X^ zS`VMW_nH-_bst4YTiagzooUsi^ZjQ}43yZ+3U@}F_u=h1#=(T;zcB=kj_-#6dS zn8l-A07?4}dzIgJllku4p*H<^{?K!aJD(IX*r;|mKN)z0B4Dh}Z#?fE(3aJXx#|%W zkEkTaIT^Rqz_knyd|P+_qjJ~156J^}ua~X2u9bTq*d#aHe3x8u=`}KO`Xw@A>>LG; zgNBaL&#MCTeuES~;(9>Wo=_x%g=Lor|0DSd6!FKTXW5+v1M#dV%NT?5ks{Sm8pSdA{HKJ{PtZ<6JEJI2YAE z4xezM)u*u(&kK3>qlM4$mfya|V|Q6@J%&)k=O$ng^I$W^IAa;!TWc8gK`?C}_QPwBH8;~bxI`FX|bGdCzzJ-S!{9~)qj-$jVuQ+{VP9*^hqD4(ac zi+R=gKF)I%&Q(5-@!E$twp*W%)#uduJWC&{{oaIJfW>tYHUc`%n=)1V03IQN$aSl) zP!I|EW1Q}qrEJ>zL2uT%ud7j?<=3)iKOpS}|{*PR!G} zSd68)S@a>ypYl8{&)1m8*4u1b^To3RkNRL4$|kS|8*^)u-7Ho(QZ`ZERoDcMHF#8C zV}4?u;UmE#TbtmUO5m7yMQdr#N7a@498*aKiK8bp+ z%$d1du9&}8E}40iESS1lrc9V0P8O2{_i4oa9&v9tR7&an-}>}dPM zuPwJv>vqjPcq+DS-PC(QMzEN+UN^*T*H}zWo-#`pPJoW6eza;wuLvFs_!zV{Ry~Fm zKH#E)M+Y4fa8&4s3djr{2_EzP9ZL|Ipkhz~8GDf~%H0CJLs-zq#XfztW2_cILM^R^ zq#t2K0VN!yD4>P55iGiRQVm6%pQNxQ0+%j*gfq0u)&roR2!0IyxIXXuHpU5z)Q{kc zzRyX3tZswScHjug02}d{vL{$OC>C1U1t{}&H^pPuasHhA-Qn|B{4S#aqVW0Kw(F4I zqxQ~wHpn&Ce?it>d82H+_GY>6`a5LyoTV~%!E%|q@KTu z^A;?XIrA=&Q=_56zSEY8C?FUNlxMd5pf>+UVL-zQ5~UMrJkERm7p=E#tdQ}sTi2Fr1K zfWdl?N5IGagL@P@;=wZ*fBC`{YG?Rp0Fsa~gGbutW6SmMF|%aiw8gSy#np227uIQ& z9ImOW)?BUkJVxdJwM*4=e5hBJ^59YqZj80?T5=`U*TdD=Pn(>JSNU%FyCRdW8JDEU@R2oTC{86 z=w2pz-RjlNYovg#3X)sDeVTdhAOc&tTen3ViDVGgaIFzW=`0mJSpC+HL>VSqe#L4Zp3K>g}G53Dk8QuhZ8tLB(r3zie}U%8f#tYW10& z`%v*%_xoc|mQ(uOT1tJ_mwehjFWRl2$seQcYsFagSjRhm@9pu7^K${E&r1Bf)veEK zs_KW$Ez$}Gotm)-9w8sctr}A0BkrrnSU5%xa@==UA*lOKCv}Tg;y)IWU)}nlJ|AhU zx|IZNA8W;-)16PfTCv`wz;X2z3LOCx5%br9`kF9r>NL$Ih=deGE?TU8yv|TOMoYZj z)z>+TmHnSadQDE(akR91m!C7#^9Q!|18b<(Js)-c5_ey)O>>%RKIF%=#Q9a-`f5pw z$37SLb2^>l)$!1_=8K=I;t`WpRz3R4$E-l6ebOhQ3Q>!Q#tg@zOQ2 ze8p9A*{W-0XRsF5}+9z~W@VGaE$A*gc)#dZzgebF`EG|Fr%2cU?D#VV-M8y|e>OfuCISdx<4}@szaL^{A~S)r&*2^t!Ni6Tki4!{ zZ*4>L?k$OMq>MJ)i%ONFgJh%=k2U#7IN8YiAnub+Hag*`I_|x=7drt7;58ZFeEv;% z^yY{0{Js-r7SCHH;(;+dTMnfitB<70$Ah+!jFW~dh7Y&zS=A%RN0N|0Asg!|$J*`^ z1mxu0xp4OUjd16|TUPZuHM3yPJiPn(lbiR#>z8kYGx6HIaOt|?45}SZoe9&kOX2Nz zKQXefY$j7G9rF@v-Q7A7k zS^f|d; z1Vm+5B!VKfTfK)8=WQim`ov@O2>}CmyxWwV83o3)k~*Qpk+mCtws&j=PE6sxk!>wm zrR}JzGV?R}?b8--{2fp#2LcRR{GbZ|cvAE5VK>MfLTwCcv@osN(o5`lZ?FN9AJ8-W}T zq$8^$Q4L8OD<-un68$+QV9z|!E4w`RUIfp6E)SpS&q6PEX!8gC4ElTM&3R_eZ73~hi@*E653wn;~)_>;*pZcG85;RNLw;p;E8rkIy%t^ z{I1dsmedz0+32X-oFw3c)=gvx_dCIecRluF{$SM{bBn9C`|aHPnQ(sfW>{D_8|EXH zPHjZn*|4y<78Z$xwJaSSI-ZiGYfDOoV~!PBs!AQ`#9I925D_B_YI5S(6|&Smj6} zvRl~*fPiU97_nuN#-tEBJ#xov$xgqLK@m<0CCPRpyHH{aI*CEk6G@i*AiAvDk?{lx z#fTm$ISM2kN#@~q`OWu#4R5~vaoDFvWo8jt>`{DNOH{$2s3a3`irFTLu*!y1R7Vv(@Qt`-T$MyFZe!o$0^0DtT?Bq+p zJ&!wG>)#0AZ>nvMY3EKlZ!|W4ujHqVv2H8U4@dv;snsyIv>6tb*6nlgkG8w#x2)n3ORASwH^S=L z1*;myYYaf#PtBeRpMUU~k%~?%)|HNicrU^6KxSKt*%2cM#}>NTj6U=Ix!)lkQ%+&I zMb?M!dL+T9?|RJdsZJotSOGba5RF|(zEyOua^&*rQtj9wAQRb`iN^#Z9I3w`@i;a% zW(g=I!Gts;C8}+VCB5eJxa>=90&!eA?P!u|X(ItwKW&7(5Un8sFOe0-~*o0}86#tQiqr5=;%sofqc+S*TTJ+#MF*`w6{ zumNmmAIC^G#Nd9YF*;6VYsRCm_gRdm&e%3aeWr^KV^Rk!rt061r61o*-#;JT(zUE_g?C1W5uEoj#8nxwzz0*B@n3_ zfw&O;5g3Ed5(m0ZbUB!|+RYhaVyOY=01HT#&`70CPG z@8ydxNIcdRj%>TFEUzXC;Yi(+%&SoF&MhpD2BC;*Mu+b-`U-Zuj&Oo;PrxQL`}W}veIh(~?X7V2 z#+`8V*o2dniGT$BU6K22>?d!3lsB5eIT)c8ST)KWYY~Oqo9zXabJi7N`xUv0OxOC-CxP1Ly*t&Yh-UGRH z`F7acycsq(ZiQ1z8)0U4B^;la3D<7iD}TpC)aCDo<4^6@Zs7NfazHksoov}BFV#t<9UUMZQOWoDSHBEDd*f-id*eZvoH-MY z9G?rvPAtZRWhy2d*xU^N>^kO^_DAFOVU>=Fcs#LeORPaYl6ch0Mi7svhQxCLI^G32 zF>}_)#icWs!s6;yI61p!L?`=$fE+tKVY|QMA7$u!|H73pGrw%)BM8S+5m-4eiR*On zw8fyJ(MZSdoN)a1XTQm0q!W^fjQsA|#G_R>X5Gm}B_Q!USG_#vYvK{leB=q0o@9pQ z7R*6vAYU=v@{~e08Z5UNMLd>DMFAY?tbTl6 z;;~Ia0Z(8{BAe}+DTTnCXRM(V_dfv+bHlj+P2yuG5IYM zV~5&EprYNIgac})kCS`Gus>rMr+w{xkmBz_<4G{`v$8#bga~x{l^~%VHj*zbfx~cQ{I@-MtPzbX! zCTtutk1h5V^sCNsH3l}b=eX#LZL18Fu^CI9l6LC!0gTsJE=y+|0I?_V9;7JowVkN?#5lIq4xK<-$AnGqvnAH=$!(0r!Nyl|ppD8! z5{ZzxN->d)MlcE?3Fvc0pC!~GTk^4ub29RLxVwHnlaZ*5M4Qh(##=k~;qwq+%qSaI z8>ns6^O`pPqq4S@Smp?>7n|EXj<1ekUmb(79$)t_a9f@GjQ+=L$-ms6bFUnqkm597 zW1Pkt2^nGkaE`K2U1Gbo_&ihy4e<(h=k!-nWJ2(I6mE`M77V@1AQ*uVV~$ z%ia6x;jnkFFT;Ly_rb7odOdvn*-yiVpL`Y8)-T!^AS*#qzPbnfv9s=xaP#(SX}Psm zJ#v#7B^&vkM@(Q*;b>Klc+X?1dL(?J>s60RHfF@h@kr7!LCM8Yz+^m2OvG(MUMB9C z%&R^U6(QgRg4>l)7{Z7LAtcP6hzUYT$(@KtBR>*IkPKjiixY^hyIskc>`S%^nfy@_ z2s%k4C6M}UizO+jWS=3~88R>}ktKvP2r%s=@Wz%OPKs0h$_1gJsVg15&1F9Q=w{JfT@7;S8 zu5CXE*KR%t*Ka-yj~>1kK6vs?xPSlcaP!XV;r6{Z!oAnt3iltq74F=BY_S(F-wGQW z+hKL}Qdn3z7pCV|!rI2Ac;5V{9cTHQBpE@{t_%In?e|Z5{+(jG{S7NfUo5fa-=m7@ zpi79tZpS{f1HJF5@oF0dp7%yFCZdscg$ zmOjzwHob2Z#QRw$A`98*Qty#MKHB|rH1UY%(|aHOBs{rsH+-~x$EqBUpO^^~Cl6K;v6Z z1hkQatBr{{D*&9R^u*q6J`Q3=CHSafgpF}#OEGM_EMw3H(AI7i(*xq#2@v}ACPkcl z6}#(sk`+NeY@9sOram2Ol#LV4Hb!GrwswHWU~QSWDm0e5+UiL%C)xFcnkcqnM;mtP z@Nq)UIL2^7Puou57}l?`gNU%U#E=x^vFAAY6P#S>6E6cBNEg@==vP87$EJ2`Cvj8k z!#I->JyHu$JCCCmJA->hr`i$6KvIchBKl`r_IWJFE`6wbn|2*T{YGd?-`bV{JwiXj zkZcOrA#pz>@krb77>b?8Ks!)(Pe zQ|S4_a}PQ`i*1G3Q(uC|1wU;$R{Cc9bZs}{v8{X*@)0B`uVGx5c&{VLM{C2^5R{C! zHm-TWC_7>I8pzaUtlocg4Bne`OxoHuZEb(vS6lF&%W>G&c<3K*JGp4fra>|;`ci6* z=QAVYgg;LJwfEv#;ixu%ajez{FdoQA#G{}2k$mjsi$9>^ zk>sOG5{)IPRpOBeFk~SiJz>@jW*km5GRY?K=n~1ew^O1ngd^Ha>}%qYM59gwXd}5; zmRyri^ht(KJlM9F_?&rK+^3f|C7p=bpL{$igMi7#R4v$+bCXXNyK{SGNJb2)k5tFb%j-Q+f_a44!$8!I* zC$?kuo)~xZ@N7J(W&(D`K6>nAc>3-qMm*}y)=ob961}S85s1HOu6m4-f zw8Tl>R>HAr8wt}VX$(g46hf%j3)w^BhsZwFF^06eAc>WT!y!osyZac6bI6D;jn{so zkospC!S6=WacT8@SU!X0(p#q6((1{1yZ%m{-Y}BU$i>ZTMm(audhSvA0OhbHWjSpCSv%H%j(VRX3`>1M=Ua_3hA~M55`9 zq~3%3i{APHoZ~8YvfK3lBtp{Rgd*E|{jp7(>q0P!UN)R5_kcn^D)HEokWM@n@-ZUc zi(LA>X^3*~;(d?z!a_dcKIx<*QIn4#9U*Z~|KQ`V!^Y`z_BXz@wi%OWuXbEMwGk8Y zm=GSHiOEZR7LA_@N7M4?BNJF6EySZ$JbDGB5{^B9SOm!kvhh*8p5C~2H+*{gp?y98 za&r6ZM!0ci-P#}BxEOk}S8T~Oaewo2xVL#J{QU9LOfn)K^4p))OR5Qwh=X>w z0y62Nh(_8I;Ygj&`T8l|DMj+{p&C z<0!^ud3UzSI4X6b%b4LrnG^HjM4a&hTaGI}$hv{8_2ZIRDNPn=lw70^hmy;kfYq*fz-cYHw|N4xtavJ@ch=)6TWd`IgUDvFF%? zo$N{!0!BPGHmkZ!G8te-f!6+WkbLF=Py`}M#8Zd*8`ssl<3oYcF;!hQEiOXHf

efWGF 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%0Ayg(D#0X?ORO1h_^yR=OoCvCf);F{7u) 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 G5&r`wA8zgd literal 0 HcmV?d00001 From a02e84182e8dc9c4f8093dcb86e8f8ab1e1d66f8 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:24:57 +0200 Subject: [PATCH 074/151] Update Slate_API.md --- docs/Slate_API.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index ab95609f1..fc69920ed 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -764,6 +764,35 @@ window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_ru Note that by calling the .simulate(bool) method on the SPythonEditorViewport instance you can enable/disable the world ticking +## Nomad Tabs + +If you plan to make a slate tool, very probably you do not want to spawn a plain SWindow, instead you want a dock (SDockTab) that you can move/rearrange in your editor and (more important) that is unique and runnable from an editor menu. + +This can be accomplished in a single step with nomad tab spawner: + +```python +from unreal_engine import SWindow, SPythonEditorViewport, FVector, FRotator +from unreal_engine.classes import Blueprint +import unreal_engine as ue + + +def create_tab(dock_tab): + editor_viewport = SPythonEditorViewport() + world = editor_viewport.get_world() + world.actor_spawn(ue.load_object(Blueprint, '/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter').GeneratedClass) + editor_viewport_client = editor_viewport.get_editor_viewport_client() + editor_viewport_client.set_view_location(FVector(-200, 300, 200)) + editor_viewport_client.set_view_rotation(FRotator(0, -30, -90)) + + editor_viewport.simulate(True) + + dock_tab.set_content(editor_viewport) + +ue.register_nomad_tab_spawner('Hello Nomads !', create_tab) +``` + +![Nomad](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Nomad.png) + ## Properties Editors ```python From a7b8da534bb6b710b8cb04c52805cc2f42a7d199 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:27:40 +0200 Subject: [PATCH 075/151] Update Slate_API.md --- docs/Slate_API.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index fc69920ed..584e80896 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -793,6 +793,8 @@ ue.register_nomad_tab_spawner('Hello Nomads !', create_tab) ![Nomad](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_Nomad.png) +To spawn the nomad tab you need to search for 'Hello Nomads !' entry in Window/Developer Tools menu. (currently there is no way to place it in other positions) + ## Properties Editors ```python From 6cb4600c329f26146bd888c25f1e9b620f06309f Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:29:07 +0200 Subject: [PATCH 076/151] Update Slate_API.md --- docs/Slate_API.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 584e80896..246fd4b7a 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -795,6 +795,12 @@ ue.register_nomad_tab_spawner('Hello Nomads !', create_tab) To spawn the nomad tab you need to search for 'Hello Nomads !' entry in Window/Developer Tools menu. (currently there is no way to place it in other positions) +If you want to spawn (or give focus) to a specific tab, just run + +```python +ue.invoke_tab('Hello Nomads !') +``` + ## Properties Editors ```python From bec37118daf5cca068ecf279e78761471c4a94d3 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:38:06 +0200 Subject: [PATCH 077/151] Update Slate_API.md --- docs/Slate_API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 246fd4b7a..a2058102f 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -795,7 +795,7 @@ ue.register_nomad_tab_spawner('Hello Nomads !', create_tab) To spawn the nomad tab you need to search for 'Hello Nomads !' entry in Window/Developer Tools menu. (currently there is no way to place it in other positions) -If you want to spawn (or give focus) to a specific tab, just run +If you want to spawn (or give focus) to a specific tab (as an example for running it over a toolbar button extender), just run ```python ue.invoke_tab('Hello Nomads !') From 408b688dbf0a97d61b8a609a6443b95b865de832 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 18:39:56 +0200 Subject: [PATCH 078/151] Update Slate_API.md --- docs/Slate_API.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index a2058102f..9ea793c79 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -816,6 +816,13 @@ window = SWindow(client_size=(512, 256), title='Mannequin Properties', sizing_ru ![SDetailView](https://github.com/20tab/UnrealEnginePython/raw/master/docs/screenshots/slate_SDetailView.png) +## Extenders + +Extenders allows you to 'extend' menus or toolbar with new entries or buttons. + +Check this example: https://github.com/20tab/UnrealEnginePython/blob/master/examples/extenders_example.py + +It shows even how to register new style sets. ## SPythonListView From 5a19bf8388ecd7693ff811a4d4a9c51aef3c6614 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 19:02:51 +0200 Subject: [PATCH 079/151] added ImportModules options --- .../Private/UnrealEnginePython.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index 8904bb878..bb79b8c8f 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -262,6 +262,8 @@ void FUnrealEnginePythonModule::StartupModule() Py_SetPythonHome(home); } + TArray ImportModules; + FString IniValue; if (GConfig->GetString(UTF8_TO_TCHAR("Python"), UTF8_TO_TCHAR("ProgramName"), IniValue, GEngineIni)) { @@ -316,6 +318,12 @@ void FUnrealEnginePythonModule::StartupModule() ZipPath = FPaths::Combine(*PROJECT_CONTENT_DIR, *IniValue); } + if (GConfig->GetString(UTF8_TO_TCHAR("Python"), UTF8_TO_TCHAR("ImportModules"), IniValue, GEngineIni)) + { + const TCHAR* separators[] = { TEXT(" "), TEXT(";"), TEXT(",") }; + IniValue.ParseIntoArray(ImportModules, separators, 3); + } + FString ProjectScriptsPath = FPaths::Combine(*PROJECT_CONTENT_DIR, UTF8_TO_TCHAR("Scripts")); if (!FPaths::DirectoryExists(ProjectScriptsPath)) { @@ -480,6 +488,19 @@ void FUnrealEnginePythonModule::StartupModule() #endif } + + for (FString ImportModule : ImportModules) + { + if (PyImport_ImportModule(TCHAR_TO_UTF8(*ImportModule))) + { + UE_LOG(LogPython, Log, TEXT("%s Python module successfully imported"), *ImportModule); + } + else + { + unreal_engine_py_log_error(); + } + } + // release the GIL PyThreadState *UEPyGlobalState = PyEval_SaveThread(); } From 4ffbce40ffe52cd8ff87e7a21a3512bede23f6db Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 20:12:56 +0200 Subject: [PATCH 080/151] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c69d75e89..4cd478abc 100644 --- a/README.md +++ b/README.md @@ -686,6 +686,7 @@ The following parameters are supported: * `RelativeAdditionalModulesPath`: like AdditionalModulesPath, but the path is relative to the /Content directory * `ZipPath`: allow to specify a .zip file that is added to sys.path * `RelativeZipPath`: like ZipPath, but the path is relative to the /Content directory +* `IMportModules: comma/space/semicolon separated list of modules to import on startup (after ue_site) Example: From 6a0ee99fae6ed02cc950eb0690862afb3919694b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 7 Sep 2018 20:13:07 +0200 Subject: [PATCH 081/151] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cd478abc..0795e697b 100644 --- a/README.md +++ b/README.md @@ -686,7 +686,7 @@ The following parameters are supported: * `RelativeAdditionalModulesPath`: like AdditionalModulesPath, but the path is relative to the /Content directory * `ZipPath`: allow to specify a .zip file that is added to sys.path * `RelativeZipPath`: like ZipPath, but the path is relative to the /Content directory -* `IMportModules: comma/space/semicolon separated list of modules to import on startup (after ue_site) +* `ImportModules: comma/space/semicolon separated list of modules to import on startup (after ue_site) Example: From f4333ab3683478d87bd5d29097d3a3503f028e45 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 8 Sep 2018 14:56:08 +0200 Subject: [PATCH 082/151] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0795e697b..072733a46 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, We support official python.org releases as well as IntelPython and Anaconda distributions. -Note: this plugin has nothing to do with the experimental 'PythonScriptPlugin' included in Unreal Engine >= 4.19. We aim at full integration with engine and editor (included the Slate api), as well as support for the vast majority of python features like asyncio, coroutines, generators, threads and third party modules. +Note: this plugin has nothing to do with the experimental 'PythonScriptPlugin' included in Unreal Engine >= 4.19. We aim at full integration with engine and editor (included the Slate api, check here: https://github.com/20tab/UnrealEnginePython/blob/master/docs/Slate_API.md), as well as support for the vast majority of python features like asyncio, coroutines, generators, threads and third party modules. # Binary installation on Windows (64 bit) From 96cbe146539e3781b06f27dd1f057028cb7b0088 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 12 Sep 2018 07:24:10 +0200 Subject: [PATCH 083/151] Update Slate_API.md --- docs/Slate_API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Slate_API.md b/docs/Slate_API.md index 9ea793c79..0008d2b53 100644 --- a/docs/Slate_API.md +++ b/docs/Slate_API.md @@ -739,7 +739,7 @@ More infos here: https://api.unrealengine.com/INT/API/Editor/PropertyEditor/SObj ## SPythonEditorViewport -This is probably tu funniest widget, an EditorViewportClient and a whole World all in a single SWidget: +This is probably the funniest widget, an EditorViewportClient and a whole World all in a single SWidget: ```python from unreal_engine import SWindow, SPythonEditorViewport, FVector, FRotator From 14e31b47886348d3a623c094a4e5346e2676a6e7 Mon Sep 17 00:00:00 2001 From: Ethan Stump Date: Wed, 12 Sep 2018 23:03:41 -0400 Subject: [PATCH 084/151] Fix PythonFunction for 4.19 In 4.19 and above, the NativeFunction interface adds a Context parameter that contains the UObject instance this function is being called on. CallPythonCallable uses this instead of Stack.Object when the engine is newer. --- .../Private/PythonFunction.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Source/UnrealEnginePython/Private/PythonFunction.cpp b/Source/UnrealEnginePython/Private/PythonFunction.cpp index 04b62ea8b..efeb5b059 100644 --- a/Source/UnrealEnginePython/Private/PythonFunction.cpp +++ b/Source/UnrealEnginePython/Private/PythonFunction.cpp @@ -19,13 +19,17 @@ void UPythonFunction::CallPythonCallable(FFrame& Stack, RESULT_DECL) FScopePythonGIL gil; +#if ENGINE_MINOR_VERSION <= 18 + UObject *Context = Stack.Object; +#endif + UPythonFunction *function = static_cast(Stack.CurrentNativeFunction); bool on_error = false; bool is_static = function->HasAnyFunctionFlags(FUNC_Static); // count the number of arguments - Py_ssize_t argn = (Stack.Object && !is_static) ? 1 : 0; + Py_ssize_t argn = (Context && !is_static) ? 1 : 0; TFieldIterator IArgs(function); for (; IArgs && ((IArgs->PropertyFlags & (CPF_Parm | CPF_ReturnParm)) == CPF_Parm); ++IArgs) { argn++; @@ -34,22 +38,22 @@ void UPythonFunction::CallPythonCallable(FFrame& Stack, RESULT_DECL) UE_LOG(LogPython, Warning, TEXT("Initializing %d parameters"), argn); #endif PyObject *py_args = PyTuple_New(argn); + argn = 0; - if (Stack.Object && !is_static) { - PyObject *py_obj = (PyObject *)ue_get_python_uobject(Stack.Object); + if (Context && !is_static) { + PyObject *py_obj = (PyObject *)ue_get_python_uobject(Context); if (!py_obj) { unreal_engine_py_log_error(); on_error = true; } else { Py_INCREF(py_obj); - PyTuple_SetItem(py_args, 0, py_obj); + PyTuple_SetItem(py_args, argn++, py_obj); } } uint8 *frame = Stack.Locals; - argn = (Stack.Object && !is_static) ? 1 : 0; // is it a blueprint call ? if (*Stack.Code == EX_EndFunctionParms) { for (UProperty *prop = (UProperty *)function->Children; prop; prop = (UProperty *)prop->Next) { @@ -127,4 +131,4 @@ UPythonFunction::~UPythonFunction() #if defined(UEPY_MEMORY_DEBUG) UE_LOG(LogPython, Warning, TEXT("PythonFunction callable %p XDECREF'ed"), this); #endif -} \ No newline at end of file +} From 5f17cc8a2c5025602c4b88e5128a6e20878e7551 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 17 Sep 2018 14:35:34 +0200 Subject: [PATCH 085/151] fixed FARFilter reference counting --- .../Private/Wrappers/UEPyFARFilter.cpp | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFARFilter.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFARFilter.cpp index 7d039f65c..bbdc82b2d 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFARFilter.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFARFilter.cpp @@ -125,6 +125,8 @@ static int ue_py_farfilter_init(ue_PyFARFilter *self, PyObject *args, PyObject * static void ue_py_farfilter_dealloc(ue_PyFARFilter *self) { + self->filter.~FARFilter(); + Py_XDECREF(self->class_names); Py_XDECREF(self->object_paths); Py_XDECREF(self->package_names); @@ -132,11 +134,8 @@ static void ue_py_farfilter_dealloc(ue_PyFARFilter *self) Py_XDECREF(self->recursive_classes_exclusion_set); Py_XDECREF(self->tags_and_values); -#if PY_MAJOR_VERSION < 3 - self->ob_type->tp_free((PyObject*)self); -#else + Py_TYPE(self)->tp_free((PyObject*)self); -#endif } static PyObject * ue_py_farfilter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) @@ -146,6 +145,9 @@ static PyObject * ue_py_farfilter_new(PyTypeObject *type, PyObject *args, PyObje self = (ue_PyFARFilter *)type->tp_alloc(type, 0); if (self != NULL) { + + new(&self->filter) FARFilter(); + self->class_names = PyList_New(0); if (self->class_names == NULL) { @@ -174,7 +176,7 @@ static PyObject * ue_py_farfilter_new(PyTypeObject *type, PyObject *args, PyObje return NULL; } - self->recursive_classes_exclusion_set = PySet_New(0); + self->recursive_classes_exclusion_set = PySet_New(NULL); if (self->recursive_classes_exclusion_set == NULL) { Py_DECREF(self); @@ -182,26 +184,41 @@ static PyObject * ue_py_farfilter_new(PyTypeObject *type, PyObject *args, PyObje } PyObject *collections = PyImport_ImportModule("collections"); + if (!collections) + { + unreal_engine_py_log_error(); + Py_DECREF(self); + return NULL; + } PyObject *collections_module_dict = PyModule_GetDict(collections); PyObject *defaultdict_cls = PyDict_GetItemString(collections_module_dict, "defaultdict"); - PyObject *main_module = PyImport_ImportModule("__main__"); - PyObject *main_dict = PyModule_GetDict(main_module); - PyObject *builtins_module = PyDict_GetItemString(main_dict, "__builtins__"); + + PyObject *builtins_module = PyImport_ImportModule("builtins"); + if (!builtins_module) + { + unreal_engine_py_log_error(); + Py_DECREF(self); + return NULL; + } PyObject *builtins_dict = PyModule_GetDict(builtins_module); PyObject *set_cls = PyDict_GetItemString(builtins_dict, "set"); + // required because PyTuple_SetItem below will steal a reference + Py_INCREF(set_cls); + PyObject *py_args = PyTuple_New(1); PyTuple_SetItem(py_args, 0, set_cls); PyObject *default_dict = PyObject_CallObject(defaultdict_cls, py_args); - Py_XDECREF(py_args); - - self->tags_and_values = default_dict; - if (self->tags_and_values == NULL) + Py_DECREF(py_args); + if (!default_dict) { + unreal_engine_py_log_error(); Py_DECREF(self); return NULL; } + + self->tags_and_values = default_dict; } return (PyObject *)self; From 57987b2ac675f857f48db2132c585fad3954be3f Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 25 Sep 2018 10:48:55 +0200 Subject: [PATCH 086/151] added texture_has_alpha_channel --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 1 + .../Private/UObject/UEPyTexture.cpp | 14 ++++++++++++++ .../Private/UObject/UEPyTexture.h | 2 ++ 3 files changed, 17 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index bcf84e367..bfcbcd416 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1053,6 +1053,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "texture_set_data", (PyCFunction)py_ue_texture_set_data, METH_VARARGS, "" }, { "texture_get_width", (PyCFunction)py_ue_texture_get_width, METH_VARARGS, "" }, { "texture_get_height", (PyCFunction)py_ue_texture_get_height, METH_VARARGS, "" }, + { "texture_has_alpha_channel", (PyCFunction)py_ue_texture_has_alpha_channel, METH_VARARGS, "" }, { "render_target_get_data", (PyCFunction)py_ue_render_target_get_data, METH_VARARGS, "" }, { "render_target_get_data_to_buffer", (PyCFunction)py_ue_render_target_get_data_to_buffer, METH_VARARGS, "" }, { "texture_update_resource", (PyCFunction)py_ue_texture_update_resource, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp index b5172b8ff..dd141bdfe 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp @@ -44,6 +44,20 @@ PyObject *py_ue_texture_get_height(ue_PyUObject *self, PyObject * args) return PyLong_FromLong(texture->GetSizeY()); } +PyObject *py_ue_texture_has_alpha_channel(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + UTexture2D *texture = ue_py_check_type(self); + if (!texture) + return PyErr_Format(PyExc_Exception, "object is not a Texture"); + + if (texture->HasAlphaChannel()) + Py_RETURN_TRUE; + Py_RETURN_FALSE; +} + PyObject *py_ue_texture_get_data(ue_PyUObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.h b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.h index e14559b3d..54b9f4830 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.h @@ -12,6 +12,8 @@ PyObject *py_ue_texture_set_data(ue_PyUObject *, PyObject *); PyObject *py_ue_texture_get_width(ue_PyUObject *, PyObject *); PyObject *py_ue_texture_get_height(ue_PyUObject *, PyObject *); +PyObject *py_ue_texture_has_alpha_channel(ue_PyUObject *, PyObject *); + PyObject *py_unreal_engine_compress_image_array(PyObject *, PyObject *); PyObject *py_unreal_engine_create_checkerboard_texture(PyObject *, PyObject *); From 4faf897082ae822a78129bed03d5e0806245f930 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 2 Oct 2018 12:05:55 +0200 Subject: [PATCH 087/151] fixed #541 --- .../Private/UObject/UEPyTexture.cpp | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp index dd141bdfe..44f53890c 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyTexture.cpp @@ -126,14 +126,23 @@ PyObject *py_ue_texture_set_source_data(ue_PyUObject *self, PyObject * args) UTexture2D *tex = ue_py_check_type(self); if (!tex) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "object is not a Texture2D"); + } if (!py_buf.buf) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "invalid data"); + } if (mipmap >= tex->GetNumMips()) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "invalid mipmap id"); + } int32 wanted_len = py_buf.len; int32 len = tex->Source.GetSizeX() * tex->Source.GetSizeY() * 4; @@ -148,6 +157,8 @@ PyObject *py_ue_texture_set_source_data(ue_PyUObject *self, PyObject * args) FMemory::Memcpy((void *)blob, py_buf.buf, wanted_len); + PyBuffer_Release(&py_buf); + tex->Source.UnlockMip(mipmap); Py_BEGIN_ALLOW_THREADS; tex->MarkPackageDirty(); @@ -214,27 +225,34 @@ PyObject *py_ue_render_target_get_data_to_buffer(ue_PyUObject *self, PyObject * UTextureRenderTarget2D *tex = ue_py_check_type(self); if (!tex) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "object is not a TextureRenderTarget"); + } FTextureRenderTarget2DResource *resource = (FTextureRenderTarget2DResource *)tex->Resource; if (!resource) { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "cannot get render target resource"); } Py_ssize_t data_len = (Py_ssize_t)(tex->GetSurfaceWidth() * 4 * tex->GetSurfaceHeight()); if (py_buf.len < data_len) { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "buffer is not big enough"); } TArray pixels; if (!resource->ReadPixels(pixels)) { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "unable to read pixels"); } FMemory::Memcpy(py_buf.buf, pixels.GetData(), data_len); + PyBuffer_Release(&py_buf); Py_RETURN_NONE; } @@ -253,14 +271,23 @@ PyObject *py_ue_texture_set_data(ue_PyUObject *self, PyObject * args) UTexture2D *tex = ue_py_check_type(self); if (!tex) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "object is not a Texture2D"); + } if (!py_buf.buf) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "invalid data"); + } if (mipmap >= tex->GetNumMips()) + { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "invalid mipmap id"); + } char *blob = (char*)tex->PlatformData->Mips[mipmap].BulkData.Lock(LOCK_READ_WRITE); int32 len = tex->PlatformData->Mips[mipmap].BulkData.GetBulkDataSize(); @@ -272,6 +299,9 @@ PyObject *py_ue_texture_set_data(ue_PyUObject *self, PyObject * args) wanted_len = len; } FMemory::Memcpy(blob, py_buf.buf, wanted_len); + + PyBuffer_Release(&py_buf); + tex->PlatformData->Mips[mipmap].BulkData.Unlock(); Py_BEGIN_ALLOW_THREADS; @@ -309,6 +339,8 @@ PyObject *py_unreal_engine_compress_image_array(PyObject * self, PyObject * args colors.Add(FColor(buf[i], buf[1 + 1], buf[i + 2], buf[i + 3])); } + PyBuffer_Release(&py_buf); + TArray output; Py_BEGIN_ALLOW_THREADS; @@ -411,6 +443,7 @@ PyObject *py_unreal_engine_create_texture(PyObject * self, PyObject * args) u_package = ue_py_check_type(py_package); if (!u_package) { + PyBuffer_Release(&py_buf); return PyErr_Format(PyExc_Exception, "argument is not a UPackage"); } } @@ -426,6 +459,8 @@ PyObject *py_unreal_engine_create_texture(PyObject * self, PyObject * args) FMemory::Memcpy(colors.GetData(), py_buf.buf, wanted_len); + PyBuffer_Release(&py_buf); + UTexture2D *texture = FImageUtils::CreateTexture2D(width, height, colors, u_package, UTF8_TO_TCHAR(name), RF_Public | RF_Standalone, params); if (!texture) return PyErr_Format(PyExc_Exception, "unable to create texture"); From 6abf75b43e5d06129bd993c1733e4dca7c79fc26 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 2 Oct 2018 13:31:00 +0200 Subject: [PATCH 088/151] fixed #542 --- .../Private/UObject/UEPyCapture.cpp | 33 +++++++++++++++++-- examples/multi_in_editor_capture.py | 19 +++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 examples/multi_in_editor_capture.py diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyCapture.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyCapture.cpp index 1977a60a6..26f2194c4 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyCapture.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyCapture.cpp @@ -29,11 +29,14 @@ for a queue of UMovieSceneCapture objects struct FInEditorMultiCapture : TSharedFromThis { - static TWeakPtr CreateInEditorMultiCapture(TArray InCaptureObjects) + static TWeakPtr CreateInEditorMultiCapture(TArray InCaptureObjects, PyObject *py_callable) { // FInEditorCapture owns itself, so should only be kept alive by itself, or a pinned (=> temporary) weakptr FInEditorMultiCapture* Capture = new FInEditorMultiCapture; Capture->CaptureObjects = InCaptureObjects; + Capture->py_callable = py_callable; + if (Capture->py_callable) + Py_INCREF(Capture->py_callable); for (UMovieSceneCapture *SceneCapture : Capture->CaptureObjects) { SceneCapture->AddToRoot(); @@ -55,6 +58,10 @@ struct FInEditorMultiCapture : TSharedFromThis SceneCapture->RemoveFromRoot(); } OnlyStrongReference = nullptr; + { + FScopePythonGIL gil; + Py_XDECREF(py_callable); + } } void Dequeue() @@ -124,6 +131,22 @@ struct FInEditorMultiCapture : TSharedFromThis bool PlaySession(float DeltaTime) { + + + if (py_callable) + { + GEditor->RequestEndPlayMap(); + FScopePythonGIL gil; + ue_PyUObject *py_capture = ue_get_python_uobject(CurrentCaptureObject); + PyObject *py_ret = PyObject_CallFunction(py_callable, "O", py_capture); + if (!py_ret) + { + unreal_engine_py_log_error(); + } + Py_XDECREF(py_ret); + } + + GEditor->RequestPlaySession(true, nullptr, false); return false; } @@ -276,6 +299,7 @@ struct FInEditorMultiCapture : TSharedFromThis { FEditorDelegates::EndPIE.RemoveAll(this); + // remove item from the TArray; CaptureObjects.RemoveAt(0); @@ -309,13 +333,16 @@ struct FInEditorMultiCapture : TSharedFromThis TSubclassOf CachedGameMode; TArray CaptureObjects; + + PyObject *py_callable; }; PyObject *py_unreal_engine_in_editor_capture(PyObject * self, PyObject * args) { PyObject *py_scene_captures; + PyObject *py_callable = nullptr; - if (!PyArg_ParseTuple(args, "O:in_editor_capture", &py_scene_captures)) + if (!PyArg_ParseTuple(args, "O|O:in_editor_capture", &py_scene_captures, &py_callable)) { return nullptr; } @@ -348,7 +375,7 @@ PyObject *py_unreal_engine_in_editor_capture(PyObject * self, PyObject * args) } Py_BEGIN_ALLOW_THREADS - FInEditorMultiCapture::CreateInEditorMultiCapture(Captures); + FInEditorMultiCapture::CreateInEditorMultiCapture(Captures, py_callable); Py_END_ALLOW_THREADS Py_RETURN_NONE; diff --git a/examples/multi_in_editor_capture.py b/examples/multi_in_editor_capture.py new file mode 100644 index 000000000..a19680e11 --- /dev/null +++ b/examples/multi_in_editor_capture.py @@ -0,0 +1,19 @@ +import unreal_engine as ue +from unreal_engine.classes import AutomatedLevelSequenceCapture, World +from unreal_engine.structs import SoftObjectPath + +level_sequence_mappings = { + '/Game/SequenceForDefault001': '/Game/Default001', + '/Game/SequenceForVR001': '/Game/VR001' +} + +def setup_sequence(capture): + ue.open_editor_for_asset(ue.load_object(World, level_sequence_mappings[capture.LevelSequenceAsset.AssetPathName])) + +captures = [] +for sequence_asset in level_sequence_mappings: + capture = AutomatedLevelSequenceCapture() + capture.LevelSequenceAsset = SoftObjectPath(AssetPathName=sequence_asset) + captures.append(capture) + +ue.in_editor_capture(captures, setup_sequence) From acdfc183c59d72ff9e88ee14225b0bb655a69039 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 4 Oct 2018 09:24:03 +0200 Subject: [PATCH 089/151] improved foliage api, #547 --- .../Private/UObject/UEPyFoliage.cpp | 4 +- .../Private/Wrappers/UEPyFFoliageInstance.cpp | 176 ++++++++++++++++-- .../Private/Wrappers/UEPyFFoliageInstance.h | 6 +- 3 files changed, 169 insertions(+), 17 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp index 09855fb31..e474fda19 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp @@ -77,9 +77,9 @@ PyObject *py_ue_get_foliage_instances(ue_PyUObject *self, PyObject * args) PyObject *py_list = PyList_New(0); - for (FFoliageInstance& instance : info.Instances) + for (int32 i=0; ifoliage_actor.IsValid()) + { + PyErr_SetString(PyExc_Exception, "AInstancedFoliageActor is in invalid state"); + return nullptr; + } + + if (!self->foliage_type.IsValid()) + { + PyErr_SetString(PyExc_Exception, "UFoliageType is in invalid state"); + return nullptr; + } + + FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); + + if (self->instance_id >= 0 && self->instance_id < info.Instances.Num()) + { + return &info.Instances[self->instance_id]; + } + + PyErr_SetString(PyExc_Exception, "invalid foliage instance id"); + return nullptr; +} static PyObject *ue_PyFFoliageInstance_str(ue_PyFFoliageInstance *self) { - return PyUnicode_FromFormat("", - &self->instance); + return PyUnicode_FromFormat("", + self->instance_id); } static PyObject *py_ue_ffoliage_instance_get_location(ue_PyFFoliageInstance *self, void *closure) { - return py_ue_new_fvector(self->instance.Location); + get_instance(self); + return py_ue_new_fvector(instance->Location); +} + +static int py_ue_ffoliage_instance_set_location(ue_PyFFoliageInstance *self, PyObject *value, void *closure) +{ + set_instance(self); + if (value) + { + ue_PyFVector *vec = py_ue_is_fvector(value); + if (vec) + { + TArray instances; + instances.Add(self->instance_id); + FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); + info.PreMoveInstances(self->foliage_actor.Get(), instances); + instance->Location = vec->vec; + info.PostMoveInstances(self->foliage_actor.Get(), instances); + return 0; + } + } + PyErr_SetString(PyExc_TypeError, "value is not an FVector"); + return -1; +} + +static int py_ue_ffoliage_instance_set_rotation(ue_PyFFoliageInstance *self, PyObject *value, void *closure) +{ + set_instance(self); + if (value) + { + ue_PyFRotator *rot = py_ue_is_frotator(value); + if (rot) + { + TArray instances; + instances.Add(self->instance_id); + FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); + info.PreMoveInstances(self->foliage_actor.Get(), instances); + instance->Rotation = rot->rot; + info.PostMoveInstances(self->foliage_actor.Get(), instances); + return 0; + } + } + PyErr_SetString(PyExc_TypeError, "value is not an FRotator"); + return -1; } static PyObject *py_ue_ffoliage_instance_get_draw_scale3d(ue_PyFFoliageInstance *self, void *closure) { - return py_ue_new_fvector(self->instance.DrawScale3D); + get_instance(self); + return py_ue_new_fvector(instance->DrawScale3D); } static PyObject *py_ue_ffoliage_instance_get_flags(ue_PyFFoliageInstance *self, void *closure) { - return PyLong_FromUnsignedLong(self->instance.Flags); + get_instance(self); + return PyLong_FromUnsignedLong(instance->Flags); } static PyObject *py_ue_ffoliage_instance_get_pre_align_rotation(ue_PyFFoliageInstance *self, void *closure) { - return py_ue_new_frotator(self->instance.PreAlignRotation); + get_instance(self); + return py_ue_new_frotator(instance->PreAlignRotation); } static PyObject *py_ue_ffoliage_instance_get_rotation(ue_PyFFoliageInstance *self, void *closure) { - return py_ue_new_frotator(self->instance.Rotation); + get_instance(self); + return py_ue_new_frotator(instance->Rotation); } static PyObject *py_ue_ffoliage_instance_get_zoffset(ue_PyFFoliageInstance *self, void *closure) { - return PyFloat_FromDouble(self->instance.ZOffset); + get_instance(self); + return PyFloat_FromDouble(instance->ZOffset); +} + +static PyObject *py_ue_ffoliage_instance_get_procedural_guid(ue_PyFFoliageInstance *self, void *closure) +{ + get_instance(self); + FGuid guid = instance->ProceduralGuid; + return py_ue_new_owned_uscriptstruct(FindObject(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid); +} + +static PyObject *py_ue_ffoliage_instance_get_base_id(ue_PyFFoliageInstance *self, void *closure) +{ + get_instance(self); + return PyLong_FromLong(instance->BaseId); +} + +static PyObject *py_ue_ffoliage_instance_get_instance_id(ue_PyFFoliageInstance *self, void *closure) +{ + return PyLong_FromLong(self->instance_id); +} + + +static PyObject *py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstance *self, void *closure) +{ + get_instance(self); + Py_RETURN_UOBJECT(instance->BaseComponent); } + static PyGetSetDef ue_PyFFoliageInstance_getseters[] = { - { (char *)"location", (getter)py_ue_ffoliage_instance_get_location, nullptr, (char *)"", NULL }, + { (char *)"location", (getter)py_ue_ffoliage_instance_get_location, (setter)py_ue_ffoliage_instance_set_location, (char *)"", NULL }, { (char *)"draw_scale3d", (getter)py_ue_ffoliage_instance_get_draw_scale3d, nullptr, (char *)"", NULL }, { (char *)"flags", (getter)py_ue_ffoliage_instance_get_flags, nullptr, (char *)"", NULL }, { (char *)"pre_align_rotation", (getter)py_ue_ffoliage_instance_get_pre_align_rotation, nullptr, (char *)"", NULL }, - { (char *)"rotation", (getter)py_ue_ffoliage_instance_get_rotation, nullptr, (char *)"", NULL }, + { (char *)"rotation", (getter)py_ue_ffoliage_instance_get_rotation, (setter)py_ue_ffoliage_instance_set_rotation, (char *)"", NULL }, { (char *)"zoffset", (getter)py_ue_ffoliage_instance_get_zoffset, nullptr, (char *)"", NULL }, + { (char *)"procedural_guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, + { (char *)"guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, + { (char *)"base_id", (getter)py_ue_ffoliage_instance_get_base_id, nullptr, (char *)"", NULL }, + { (char *)"instance_id", (getter)py_ue_ffoliage_instance_get_instance_id, nullptr, (char *)"", NULL }, + { NULL } /* Sentinel */ +}; + +static PyObject *py_ue_ffoliage_instance_get_instance_world_transform(ue_PyFFoliageInstance *self, PyObject * args) +{ + get_instance(self); + return py_ue_new_ftransform(instance->GetInstanceWorldTransform()); +} + +static PyObject *py_ue_ffoliage_instance_align_to_normal(ue_PyFFoliageInstance *self, PyObject * args) +{ + get_instance(self); + + PyObject *py_vec; + float align_max_angle = 0; + + if (!PyArg_ParseTuple(args, "O|f:align_to_normal", &py_vec, &align_max_angle)) + return nullptr; + + ue_PyFVector *vec = py_ue_is_fvector(py_vec); + if (!vec) + { + return PyErr_Format(PyExc_Exception, "argument is not an FVector"); + } + + instance->AlignToNormal(vec->vec, align_max_angle); + + Py_RETURN_NONE; +} + + +static PyMethodDef ue_PyFFoliageInstance_methods[] = { + { "get_instance_world_transform", (PyCFunction)py_ue_ffoliage_instance_get_instance_world_transform, METH_VARARGS, "" }, + { "align_to_normal", (PyCFunction)py_ue_ffoliage_instance_align_to_normal, METH_VARARGS, "" }, { NULL } /* Sentinel */ }; @@ -82,7 +230,7 @@ static PyTypeObject ue_PyFFoliageInstanceType = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - 0, /* tp_methods */ + ue_PyFFoliageInstance_methods, /* tp_methods */ 0, ue_PyFFoliageInstance_getseters, }; @@ -98,9 +246,11 @@ void ue_python_init_ffoliage_instance(PyObject *ue_module) PyModule_AddObject(ue_module, "FoliageInstance", (PyObject *)&ue_PyFFoliageInstanceType); } -PyObject *py_ue_new_ffoliage_instance(FFoliageInstance instance) +PyObject *py_ue_new_ffoliage_instance(AInstancedFoliageActor *foliage_actor, UFoliageType *foliage_type, int32 instance_id) { ue_PyFFoliageInstance *ret = (ue_PyFFoliageInstance *)PyObject_New(ue_PyFFoliageInstance, &ue_PyFFoliageInstanceType); - ret->instance = instance; + ret->foliage_actor = TWeakObjectPtr(foliage_actor); + ret->foliage_type = TWeakObjectPtr(foliage_type); + ret->instance_id = instance_id; return (PyObject *)ret; } \ No newline at end of file diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h index 64034333f..409b37fad 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h @@ -6,9 +6,11 @@ typedef struct { PyObject_HEAD - FFoliageInstance instance; + TWeakObjectPtr foliage_actor; + TWeakObjectPtr foliage_type; + int32 instance_id; } ue_PyFFoliageInstance; void ue_python_init_ffoliage_instance(PyObject *); -PyObject *py_ue_new_ffoliage_instance(FFoliageInstance instance); +PyObject *py_ue_new_ffoliage_instance(AInstancedFoliageActor *foliage_actor, UFoliageType *foliage_type, int32 instance_id); From 6879ca9dc7f6942cc3c77a635b7a206445781aa2 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 16 Oct 2018 17:35:57 +0200 Subject: [PATCH 090/151] ported to 4.21 --- .../Private/UObject/UEPyDataTable.cpp | 12 ++++++++++++ .../Private/UObject/UEPySkeletal.cpp | 15 ++++++++++++--- .../Private/UObject/UEPyWorld.cpp | 4 ++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyDataTable.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyDataTable.cpp index 6f09a9412..727c02c08 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyDataTable.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyDataTable.cpp @@ -108,7 +108,11 @@ PyObject *py_ue_data_table_as_dict(ue_PyUObject * self, PyObject * args) PyObject *py_dict = PyDict_New(); +#if ENGINE_MINOR_VERSION > 20 + for (TMap::TConstIterator RowMapIter(data_table->GetRowMap().CreateConstIterator()); RowMapIter; ++RowMapIter) +#else for (TMap::TConstIterator RowMapIter(data_table->RowMap.CreateConstIterator()); RowMapIter; ++RowMapIter) +#endif { PyDict_SetItemString(py_dict, TCHAR_TO_UTF8(*RowMapIter->Key.ToString()), py_ue_new_owned_uscriptstruct(data_table->RowStruct, RowMapIter->Value)); } @@ -152,7 +156,11 @@ PyObject *py_ue_data_table_find_row(ue_PyUObject * self, PyObject * args) return PyErr_Format(PyExc_Exception, "uobject is not a UDataTable"); uint8 **data = nullptr; +#if ENGINE_MINOR_VERSION > 20 + data = (uint8 **)data_table->GetRowMap().Find(FName(UTF8_TO_TCHAR(name))); +#else data = data_table->RowMap.Find(FName(UTF8_TO_TCHAR(name))); +#endif if (!data) { return PyErr_Format(PyExc_Exception, "key not found in UDataTable"); @@ -172,7 +180,11 @@ PyObject *py_ue_data_table_get_all_rows(ue_PyUObject * self, PyObject * args) PyObject *py_list = PyList_New(0); +#if ENGINE_MINOR_VERSION > 20 + for (TMap::TConstIterator RowMapIter(data_table->GetRowMap().CreateConstIterator()); RowMapIter; ++RowMapIter) +#else for (TMap::TConstIterator RowMapIter(data_table->RowMap.CreateConstIterator()); RowMapIter; ++RowMapIter) +#endif { PyList_Append(py_list, py_ue_new_owned_uscriptstruct(data_table->RowStruct, RowMapIter->Value)); } diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp index 7cd84c120..86747cbfa 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp @@ -5,6 +5,9 @@ #include "Developer/MeshUtilities/Public/MeshUtilities.h" #include "Wrappers/UEPyFMorphTargetDelta.h" #include "Wrappers/UEPyFSoftSkinVertex.h" +#if ENGINE_MINOR_VERSION > 20 +#include "Runtime/Engine/Public/Rendering/SkeletalMeshLODImporterData.h" +#endif #if ENGINE_MINOR_VERSION > 18 #include "Runtime/Engine/Public/Rendering/SkeletalMeshModel.h" #endif @@ -953,9 +956,15 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO TArray soft_vertices; TArray points; +#if ENGINE_MINOR_VERSION > 20 + TArray wedges; + TArray faces; + TArray influences; +#else TArray wedges; TArray faces; TArray influences; +#endif TArray points_to_map; TArray tangentsX; @@ -976,7 +985,7 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO points_to_map.Add(vertex_index); - FMeshWedge wedge; + SkeletalMeshImportData::FMeshWedge wedge; wedge.iVertex = vertex_index; wedge.Color = ss_vertex->ss_vertex.Color; for (int32 i = 0; i < MAX_TEXCOORDS; i++) @@ -987,7 +996,7 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO for (int32 i = 0; i < MAX_TOTAL_INFLUENCES; i++) { - FVertInfluence influence; + SkeletalMeshImportData::FVertInfluence influence; influence.VertIndex = wedge_index; influence.BoneIndex = ss_vertex->ss_vertex.InfluenceBones[i]; influence.Weight = ss_vertex->ss_vertex.InfluenceWeights[i] / 255.f; @@ -1009,7 +1018,7 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO for (int32 i = 0; i < wedges.Num(); i += 3) { - FMeshFace face; + SkeletalMeshImportData::FMeshFace face; face.iWedge[0] = i; face.iWedge[1] = i + 1; face.iWedge[2] = i + 2; diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp index 0987572ca..861f10ba6 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp @@ -43,7 +43,11 @@ PyObject *py_ue_quit_game(ue_PyUObject *self, PyObject * args) if (!controller) return PyErr_Format(PyExc_Exception, "unable to retrieve the first controller"); +#if ENGINE_MINOR_VERSION > 20 + UKismetSystemLibrary::QuitGame(world, controller, EQuitPreference::Quit, false); +#else UKismetSystemLibrary::QuitGame(world, controller, EQuitPreference::Quit); +#endif Py_RETURN_NONE; } From 9690cb39e2244f209ab1727c847cafaf24fc5d46 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 12:29:16 +0200 Subject: [PATCH 091/151] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 072733a46..1885cd358 100644 --- a/README.md +++ b/README.md @@ -943,9 +943,9 @@ We try to do our best to "protect" the user, but you can effectively crash UE fr Contacts and Commercial Support ------------------------------- -If you want to contact us (for help, support, sponsorship), drop a mail to info at 20tab.com or follow @unbit on twitter +If you need commercial support for UnrealEnginePython just drop a mail to info at 20tab.com -We offer commercial support for both UnrealEngine and UnrealEnginePython, again drop a mail to info at 20tab.com for more infos +Follow @unbit on twitter for news about the project Special Thanks -------------- From acf57bb9e5084df282b2e86787a3ceda461689e6 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 12:32:12 +0200 Subject: [PATCH 092/151] fixed build for < 4.21 --- .../Private/UObject/UEPySkeletal.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp index 86747cbfa..3386d4537 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySkeletal.cpp @@ -985,7 +985,11 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO points_to_map.Add(vertex_index); +#if ENGINE_MINOR_VERSION > 20 SkeletalMeshImportData::FMeshWedge wedge; +#else + FMeshWedge wedge; +#endif wedge.iVertex = vertex_index; wedge.Color = ss_vertex->ss_vertex.Color; for (int32 i = 0; i < MAX_TEXCOORDS; i++) @@ -996,7 +1000,11 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO for (int32 i = 0; i < MAX_TOTAL_INFLUENCES; i++) { +#if ENGINE_MINOR_VERSION > 20 SkeletalMeshImportData::FVertInfluence influence; +#else + FVertInfluence influence; +#endif influence.VertIndex = wedge_index; influence.BoneIndex = ss_vertex->ss_vertex.InfluenceBones[i]; influence.Weight = ss_vertex->ss_vertex.InfluenceWeights[i] / 255.f; @@ -1018,7 +1026,11 @@ PyObject *py_ue_skeletal_mesh_build_lod(ue_PyUObject *self, PyObject * args, PyO for (int32 i = 0; i < wedges.Num(); i += 3) { +#if ENGINE_MINOR_VERSION > 20 SkeletalMeshImportData::FMeshFace face; +#else + FMeshFace face; +#endif face.iWedge[0] = i; face.iWedge[1] = i + 1; face.iWedge[2] = i + 2; From 08d3638e7f89a3f84e23404408f1e4696abde436 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 13:04:21 +0200 Subject: [PATCH 093/151] added asset metadata tag api --- .../UnrealEnginePython/Private/UEPyModule.cpp | 18 ++-- .../Private/UObject/UEPyObject.cpp | 89 +++++++++++++++++-- .../Private/UObject/UEPyObject.h | 6 ++ examples/asset_metadata_tag.py | 19 ++++ 4 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 examples/asset_metadata_tag.py diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index bfcbcd416..0f66d73a0 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -616,6 +616,12 @@ static PyMethodDef ue_PyUObject_methods[] = { #if WITH_EDITOR { "get_thumbnail", (PyCFunction)py_ue_get_thumbnail, METH_VARARGS, "" }, { "render_thumbnail", (PyCFunction)py_ue_render_thumbnail, METH_VARARGS, "" }, + {"get_metadata_tag", (PyCFunction)py_ue_get_metadata_tag, METH_VARARGS, "" }, + {"set_metadata_tag", (PyCFunction)py_ue_set_metadata_tag, METH_VARARGS, "" }, + { "metadata_tags", (PyCFunction)py_ue_metadata_tags, METH_VARARGS, "" }, + { "has_metadata_tag", (PyCFunction)py_ue_has_metadata_tag, METH_VARARGS, "" }, + {"remove_metadata_tag", (PyCFunction)py_ue_remove_metadata_tag, METH_VARARGS, "" }, + #endif #if WITH_EDITOR @@ -1856,10 +1862,10 @@ ue_PyUObject *ue_get_python_uobject(UObject *ue_obj) UE_LOG(LogPython, Warning, TEXT("CREATED UPyObject at %p for %p %s"), ue_py_object, ue_obj, *ue_obj->GetName()); #endif return ue_py_object; - } + } return ret; - } +} ue_PyUObject *ue_get_python_uobject_inc(UObject *ue_obj) { @@ -2883,8 +2889,8 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * #endif } #endif - } } + } Py_ssize_t tuple_len = PyTuple_Size(args); @@ -2997,7 +3003,7 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * return ret; Py_RETURN_NONE; - } +} PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) { @@ -3057,8 +3063,8 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ { UE_LOG(LogPython, Error, TEXT("function %s is already registered"), UTF8_TO_TCHAR(name)); return nullptr; + } } -} UPythonFunction *function = NewObject(u_class, UTF8_TO_TCHAR(name), RF_Public | RF_Transient | RF_MarkAsNative); function->SetPyCallable(py_callable); @@ -3379,7 +3385,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ #endif return function; - } +} FGuid *ue_py_check_fguid(PyObject *py_obj) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index 43ef8aeca..ad4fc2259 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -482,6 +482,87 @@ PyObject *py_ue_get_metadata(ue_PyUObject * self, PyObject * args) return PyErr_Format(PyExc_TypeError, "the object does not support MetaData"); } +PyObject *py_ue_get_metadata_tag(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + char *metadata_tag_key; + if (!PyArg_ParseTuple(args, "s:get_metadata_tag", &metadata_tag_key)) + { + return nullptr; + } + + const FString& Value = self->ue_object->GetOutermost()->GetMetaData()->GetValue(self->ue_object, UTF8_TO_TCHAR(metadata_tag_key)); + return PyUnicode_FromString(TCHAR_TO_UTF8(*Value)); +} + +PyObject *py_ue_has_metadata_tag(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + char *metadata_tag_key; + if (!PyArg_ParseTuple(args, "s:has_metadata_tag", &metadata_tag_key)) + { + return nullptr; + } + + if (self->ue_object->GetOutermost()->GetMetaData()->HasValue(self->ue_object, UTF8_TO_TCHAR(metadata_tag_key))) + { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + +PyObject *py_ue_remove_metadata_tag(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + char *metadata_tag_key; + if (!PyArg_ParseTuple(args, "s:remove_metadata_tag", &metadata_tag_key)) + { + return nullptr; + } + + self->ue_object->GetOutermost()->GetMetaData()->RemoveValue(self->ue_object, UTF8_TO_TCHAR(metadata_tag_key)); + Py_RETURN_NONE; +} + +PyObject *py_ue_set_metadata_tag(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + char *metadata_tag_key; + char *metadata_tag_value; + if (!PyArg_ParseTuple(args, "ss:set_metadata_tag", &metadata_tag_key, &metadata_tag_value)) + { + return nullptr; + } + + self->ue_object->GetOutermost()->GetMetaData()->SetValue(self->ue_object, UTF8_TO_TCHAR(metadata_tag_key), UTF8_TO_TCHAR(metadata_tag_value)); + Py_RETURN_NONE; +} + + +PyObject *py_ue_metadata_tags(ue_PyUObject * self, PyObject * args) +{ + ue_py_check(self); + + TMap *TagsMap = self->ue_object->GetOutermost()->GetMetaData()->GetMapForObject(self->ue_object); + if (!TagsMap) + Py_RETURN_NONE; + + PyObject* py_list = PyList_New(0); + for (TPair< FName, FString>& Pair : *TagsMap) + { + PyList_Append(py_list, PyUnicode_FromString(TCHAR_TO_UTF8(*Pair.Key.ToString()))); + } + return py_list; +} + PyObject *py_ue_has_metadata(ue_PyUObject * self, PyObject * args) { @@ -498,11 +579,9 @@ PyObject *py_ue_has_metadata(ue_PyUObject * self, PyObject * args) UClass *u_class = (UClass *)self->ue_object; if (u_class->HasMetaData(FName(UTF8_TO_TCHAR(metadata_key)))) { - Py_INCREF(Py_True); - return Py_True; + Py_RETURN_TRUE; } - Py_INCREF(Py_False); - return Py_False; + Py_RETURN_FALSE; } if (self->ue_object->IsA()) @@ -1850,7 +1929,7 @@ PyObject *py_ue_add_property(ue_PyUObject * self, PyObject * args) // TODO add default value Py_RETURN_UOBJECT(u_property); -} + } PyObject *py_ue_as_dict(ue_PyUObject * self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h index d43422274..4f66b78f7 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h @@ -97,6 +97,12 @@ PyObject *py_ue_get_metadata(ue_PyUObject *, PyObject *); PyObject *py_ue_set_metadata(ue_PyUObject *, PyObject *); PyObject *py_ue_has_metadata(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_metadata_tag(ue_PyUObject *, PyObject *); +PyObject *py_ue_set_metadata_tag(ue_PyUObject *, PyObject *); +PyObject *py_ue_has_metadata_tag(ue_PyUObject *, PyObject *); +PyObject *py_ue_remove_metadata_tag(ue_PyUObject *, PyObject *); +PyObject *py_ue_metadata_tags(ue_PyUObject *, PyObject *); + PyObject *py_ue_import_custom_properties(ue_PyUObject *, PyObject *); #endif diff --git a/examples/asset_metadata_tag.py b/examples/asset_metadata_tag.py new file mode 100644 index 000000000..dfa036f36 --- /dev/null +++ b/examples/asset_metadata_tag.py @@ -0,0 +1,19 @@ +import unreal_engine as ue +from unreal_engine.classes import EditorAssetLibrary + +asset = ue.get_selected_assets()[0] + +# reflection-based api +EditorAssetLibrary.SetMetadataTag(asset, 'Foo', 'Bar') +for value in EditorAssetLibrary.GetMetadataTagValues(asset): + print(value) +print(EditorAssetLibrary.GetMetadataTag(asset, 'Foo')) + + +# native api +asset.set_metadata_tag('Test001', 'Text002') +asset.set_metadata_tag('Test003', 'Text004') +for key in asset.metadata_tags(): + print(key) +print(asset.has_metadata_tag('Foo')) # bool +print(asset.get_metadata_tag('Test001')) From 030f0f1643b9aab0e1f88815374246e64fc5e1e3 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 13:32:08 +0200 Subject: [PATCH 094/151] added level blueprint api --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 1 + .../Private/UObject/UEPyWorld.cpp | 14 ++++++++++++++ .../UnrealEnginePython/Private/UObject/UEPyWorld.h | 1 + examples/edit_level_blueprint.py | 8 ++++++++ 4 files changed, 24 insertions(+) create mode 100644 examples/edit_level_blueprint.py diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 0f66d73a0..1726b23c0 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -877,6 +877,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "set_current_level", (PyCFunction)py_ue_set_current_level, METH_VARARGS, "" }, #if WITH_EDITOR + { "get_level_script_blueprint", (PyCFunction)py_ue_get_level_script_blueprint, METH_VARARGS, "" }, { "add_foliage_asset", (PyCFunction)py_ue_add_foliage_asset, METH_VARARGS, "" }, { "get_foliage_instances", (PyCFunction)py_ue_get_foliage_instances, METH_VARARGS, "" }, #endif diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp index 861f10ba6..ec2be2b7c 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp @@ -323,6 +323,20 @@ PyObject *py_ue_set_current_level(ue_PyUObject *self, PyObject * args) } #if WITH_EDITOR +PyObject *py_ue_get_level_script_blueprint(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + ULevel *level = ue_py_check_type(self); + if (!level) + { + return PyErr_Format(PyExc_Exception, "uobject is not a ULevel"); + } + + Py_RETURN_UOBJECT((UObject*)level->GetLevelScriptBlueprint()); +} + PyObject *py_ue_world_create_folder(ue_PyUObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h index af2c40665..16f07ae7e 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.h @@ -35,5 +35,6 @@ PyObject *py_ue_world_create_folder(ue_PyUObject *, PyObject *); PyObject *py_ue_world_delete_folder(ue_PyUObject *, PyObject *); PyObject *py_ue_world_rename_folder(ue_PyUObject *, PyObject *); PyObject *py_ue_world_folders(ue_PyUObject *, PyObject *); +PyObject *py_ue_get_level_script_blueprint(ue_PyUObject *, PyObject *); #endif diff --git a/examples/edit_level_blueprint.py b/examples/edit_level_blueprint.py new file mode 100644 index 000000000..a7ddd961c --- /dev/null +++ b/examples/edit_level_blueprint.py @@ -0,0 +1,8 @@ +import unreal_engine as ue +from unreal_engine.structs import EdGraphPinType + +world = ue.get_editor_world() +level_bp = world.CurrentLevel.get_level_script_blueprint() +pin = EdGraphPinType(PinCategory='string') +ue.blueprint_add_member_variable(level_bp, 'TestString', pin) +ue.open_editor_for_asset(level_bp) From a8d1778b797f35fbb23a26b0230f77d2edb3488a Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 14:00:19 +0200 Subject: [PATCH 095/151] added sequencer_set_view_range() and sequencer_set_working_range(), #554 and #553 --- .../UnrealEnginePython/Private/UEPyModule.cpp | 2 + .../Private/UObject/UEPySequencer.cpp | 44 +++++++++++++++++++ .../Private/UObject/UEPySequencer.h | 2 + 3 files changed, 48 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 1726b23c0..98c0830dd 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1076,6 +1076,8 @@ static PyMethodDef ue_PyUObject_methods[] = { { "sequencer_get_camera_cut_track", (PyCFunction)py_ue_sequencer_get_camera_cut_track, METH_VARARGS, "" }, #if WITH_EDITOR { "sequencer_set_playback_range", (PyCFunction)py_ue_sequencer_set_playback_range, METH_VARARGS, "" }, + { "sequencer_set_view_range", (PyCFunction)py_ue_sequencer_set_view_range, METH_VARARGS, "" }, + { "sequencer_set_working_range", (PyCFunction)py_ue_sequencer_set_working_range, METH_VARARGS, "" }, { "sequencer_set_section_range", (PyCFunction)py_ue_sequencer_set_section_range, METH_VARARGS, "" }, { "sequencer_folders", (PyCFunction)py_ue_sequencer_folders, METH_VARARGS, "" }, { "sequencer_create_folder", (PyCFunction)py_ue_sequencer_create_folder, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 32b11dd48..128f09b29 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -911,6 +911,50 @@ PyObject *py_ue_sequencer_set_playback_range(ue_PyUObject *self, PyObject * args Py_RETURN_NONE; } +PyObject *py_ue_sequencer_set_working_range(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + ULevelSequence *seq = ue_py_check_type(self); + if (!seq) + return PyErr_Format(PyExc_Exception, "uobject is not a LevelSequence"); + UMovieScene *scene = seq->GetMovieScene(); + + float start_time; + float end_time; + if (!PyArg_ParseTuple(args, "ff:sequencer_set_working_range", &start_time, &end_time)) + { + return nullptr; + } + + scene->SetWorkingRange(start_time, end_time); + + Py_RETURN_NONE; +} + +PyObject *py_ue_sequencer_set_view_range(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + ULevelSequence *seq = ue_py_check_type(self); + if (!seq) + return PyErr_Format(PyExc_Exception, "uobject is not a LevelSequence"); + UMovieScene *scene = seq->GetMovieScene(); + + float start_time; + float end_time; + if (!PyArg_ParseTuple(args, "ff:sequencer_set_view_range", &start_time, &end_time)) + { + return nullptr; + } + + scene->SetViewRange(start_time, end_time); + + Py_RETURN_NONE; +} + PyObject *py_ue_sequencer_set_section_range(ue_PyUObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h index ac22a41a7..64cfe39bb 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h @@ -10,6 +10,8 @@ PyObject *py_ue_sequencer_track_sections(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_get_camera_cut_track(ue_PyUObject *, PyObject *); #if WITH_EDITOR PyObject *py_ue_sequencer_set_playback_range(ue_PyUObject *, PyObject *); +PyObject *py_ue_sequencer_set_view_range(ue_PyUObject *, PyObject *); +PyObject *py_ue_sequencer_set_working_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_set_section_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_folders(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_create_folder(ue_PyUObject *, PyObject *); From f1e905099327ebd6d41336e309bf146e14373341 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 14:25:37 +0200 Subject: [PATCH 096/151] fixed 4.17 build --- .../Private/Wrappers/UEPyFFoliageInstance.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp index 2bc9e7b0c..951b25ae6 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp @@ -141,12 +141,13 @@ static PyObject *py_ue_ffoliage_instance_get_instance_id(ue_PyFFoliageInstance * return PyLong_FromLong(self->instance_id); } - +#if ENGINE_MINOR_VERSION > 18 static PyObject *py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstance *self, void *closure) { get_instance(self); Py_RETURN_UOBJECT(instance->BaseComponent); } +#endif @@ -161,6 +162,9 @@ static PyGetSetDef ue_PyFFoliageInstance_getseters[] = { { (char *)"guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, { (char *)"base_id", (getter)py_ue_ffoliage_instance_get_base_id, nullptr, (char *)"", NULL }, { (char *)"instance_id", (getter)py_ue_ffoliage_instance_get_instance_id, nullptr, (char *)"", NULL }, +#if ENGINE_MINOR_VERSION > 18 + { (char *)"base_component", (getter)py_ue_ffoliage_instance_get_base_component, nullptr, (char *)"", NULL }, +#endif { NULL } /* Sentinel */ }; From b8d73dc95f82ffa20381d17ff932a4c6d135b614 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 14:32:53 +0200 Subject: [PATCH 097/151] fixed 4.19 build --- .../Private/Wrappers/UEPyFFoliageInstance.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp index 951b25ae6..b3205f03e 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp @@ -141,7 +141,7 @@ static PyObject *py_ue_ffoliage_instance_get_instance_id(ue_PyFFoliageInstance * return PyLong_FromLong(self->instance_id); } -#if ENGINE_MINOR_VERSION > 18 +#if ENGINE_MINOR_VERSION > 19 static PyObject *py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstance *self, void *closure) { get_instance(self); @@ -162,7 +162,7 @@ static PyGetSetDef ue_PyFFoliageInstance_getseters[] = { { (char *)"guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, { (char *)"base_id", (getter)py_ue_ffoliage_instance_get_base_id, nullptr, (char *)"", NULL }, { (char *)"instance_id", (getter)py_ue_ffoliage_instance_get_instance_id, nullptr, (char *)"", NULL }, -#if ENGINE_MINOR_VERSION > 18 +#if ENGINE_MINOR_VERSION > 19 { (char *)"base_component", (getter)py_ue_ffoliage_instance_get_base_component, nullptr, (char *)"", NULL }, #endif { NULL } /* Sentinel */ From b27954804db1ef4a72f94a785708efcea9fea89e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 20 Oct 2018 16:07:06 +0200 Subject: [PATCH 098/151] fixed 4.21 build --- Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 128f09b29..696905e97 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -94,7 +94,11 @@ static void ImportTransformChannel(const FInterpCurveFloat& Source, FMovieSceneF } FFrameNumber KeyTime = (Source.Points[KeyIndex].InVal * DestFrameRate).RoundToFrame(); +#if ENGINE_MINOR_VERSION > 20 + FMatineeImportTools::SetOrAddKey(ChannelData, KeyTime, Source.Points[KeyIndex].OutVal, ArriveTangent, LeaveTangent, Source.Points[KeyIndex].InterpMode, DestFrameRate); +#else FMatineeImportTools::SetOrAddKey(ChannelData, KeyTime, Source.Points[KeyIndex].OutVal, ArriveTangent, LeaveTangent, Source.Points[KeyIndex].InterpMode); +#endif } Dest->AutoSetTangents(); From 1043b33e59f306f927d70e3e12b24b82668d4ca7 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 6 Nov 2018 19:57:26 +0100 Subject: [PATCH 099/151] added static_mesh_import_lod() --- .../UnrealEnginePython/Private/UEPyModule.cpp | 2 ++ .../Private/UObject/UEPyStaticMesh.cpp | 21 +++++++++++++++++++ .../Private/UObject/UEPyStaticMesh.h | 1 + 3 files changed, 24 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 98c0830dd..5827f865b 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1137,6 +1137,8 @@ static PyMethodDef ue_PyUObject_methods[] = { { "static_mesh_generate_kdop18", (PyCFunction)py_ue_static_mesh_generate_kdop18, METH_VARARGS, "" }, { "static_mesh_generate_kdop26", (PyCFunction)py_ue_static_mesh_generate_kdop26, METH_VARARGS, "" }, + { "static_mesh_import_lod", (PyCFunction)py_ue_static_mesh_import_lod, METH_VARARGS, "" }, + #endif // Viewport diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp index deb05477e..1111ac4ee 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp @@ -6,6 +6,7 @@ #include "Engine/StaticMesh.h" #include "Wrappers/UEPyFRawMesh.h" #include "Editor/UnrealEd/Private/GeomFitUtils.h" +#include "FbxMeshUtils.h" static PyObject *generate_kdop(ue_PyUObject *self, const FVector *directions, uint32 num_directions) { @@ -116,4 +117,24 @@ PyObject *py_ue_static_mesh_get_raw_mesh(ue_PyUObject *self, PyObject * args) return py_ue_new_fraw_mesh(raw_mesh); } +PyObject *py_ue_static_mesh_import_lod(ue_PyUObject *self, PyObject * args) +{ + ue_py_check(self); + + char *filename; + int lod_level; + if (!PyArg_ParseTuple(args, "si:static_mesh_import_lod", &filename, &lod_level)) + return nullptr; + + UStaticMesh *mesh = ue_py_check_type(self); + if (!mesh) + return PyErr_Format(PyExc_Exception, "uobject is not a UStaticMesh"); + + if (FbxMeshUtils::ImportStaticMeshLOD(mesh, FString(UTF8_TO_TCHAR(filename)), lod_level)) + { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + #endif \ No newline at end of file diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h index 219d68761..9874520cf 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h @@ -14,4 +14,5 @@ PyObject *py_ue_static_mesh_generate_kdop10y(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_generate_kdop10z(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_generate_kdop18(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_generate_kdop26(ue_PyUObject *, PyObject *); +PyObject *py_ue_static_mesh_import_lod(ue_PyUObject *, PyObject *); #endif \ No newline at end of file From 2f72762fd7c9973b4b0101fc3eede247fd3618ba Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 8 Nov 2018 11:41:34 -0700 Subject: [PATCH 100/151] added support for FVector, FRotator, FLinearColor, FColor, FTransform, and FQuat to Python methods that are UFUNCTIONs --- .../UnrealEnginePython/Private/UEPyModule.cpp | 38 ++++++++++++++++++- .../Private/Wrappers/UEPyFColor.cpp | 2 +- .../Private/Wrappers/UEPyFColor.h | 4 +- .../Private/Wrappers/UEPyFLinearColor.cpp | 2 +- .../Private/Wrappers/UEPyFLinearColor.h | 4 +- .../Private/Wrappers/UEPyFQuat.cpp | 2 +- .../Private/Wrappers/UEPyFQuat.h | 4 +- .../Private/Wrappers/UEPyFRotator.cpp | 2 +- .../Private/Wrappers/UEPyFRotator.h | 4 +- .../Private/Wrappers/UEPyFTransform.cpp | 4 +- .../Private/Wrappers/UEPyFTransform.h | 4 +- .../Private/Wrappers/UEPyFVector.cpp | 2 +- .../Private/Wrappers/UEPyFVector.h | 4 +- 13 files changed, 62 insertions(+), 14 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 5827f865b..8b4a174f2 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3151,6 +3151,42 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } + else if ((PyTypeObject *)value == &ue_PyFVectorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)value == &ue_PyFRotatorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)value == &ue_PyFLinearColorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)value == &ue_PyFColorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)value == &ue_PyFTransformType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)value == &ue_PyFQuatType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(value)) { @@ -3179,7 +3215,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ } } } - // TODO add native types (like vectors, rotators...) + if (prop) { prop->SetPropertyFlags(CPF_Parm); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.cpp index d71188d97..0105dd254 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.cpp @@ -103,7 +103,7 @@ static PyObject *ue_PyFColor_str(ue_PyFColor *self) self->color.R, self->color.G, self->color.B, self->color.A); } -static PyTypeObject ue_PyFColorType = { +PyTypeObject ue_PyFColorType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FColor", /* tp_name */ sizeof(ue_PyFColor), /* tp_basicsize */ diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.h index ef75b1832..d3a1013e7 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFColor.h @@ -11,6 +11,8 @@ typedef struct FColor color; } ue_PyFColor; +extern PyTypeObject ue_PyFColorType; + PyObject *py_ue_new_fcolor(FColor); ue_PyFColor *py_ue_is_fcolor(PyObject *); @@ -18,4 +20,4 @@ void ue_python_init_fcolor(PyObject *); bool py_ue_color_arg(PyObject *, FColor &); -bool py_ue_get_fcolor(PyObject *, FColor &); \ No newline at end of file +bool py_ue_get_fcolor(PyObject *, FColor &); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.cpp index 056411506..5ca0eb83a 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.cpp @@ -106,7 +106,7 @@ static PyObject *ue_PyFLinearColor_str(ue_PyFLinearColor *self) PyFloat_FromDouble(self->color.A)); } -static PyTypeObject ue_PyFLinearColorType = { +PyTypeObject ue_PyFLinearColorType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FLinearColor", /* tp_name */ sizeof(ue_PyFLinearColor), /* tp_basicsize */ diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.h index 986ecd2aa..2ade8c420 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFLinearColor.h @@ -11,6 +11,8 @@ typedef struct FLinearColor color; } ue_PyFLinearColor; +extern PyTypeObject ue_PyFLinearColorType; + PyObject *py_ue_new_flinearcolor(FLinearColor); ue_PyFLinearColor *py_ue_is_flinearcolor(PyObject *); @@ -18,4 +20,4 @@ void ue_python_init_flinearcolor(PyObject *); bool py_ue_linearcolor_arg(PyObject *, FLinearColor &); -bool py_ue_get_flinearcolor(PyObject *, FLinearColor &); \ No newline at end of file +bool py_ue_get_flinearcolor(PyObject *, FLinearColor &); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.cpp index 74d914848..41faf7383 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.cpp @@ -152,7 +152,7 @@ static PyObject *ue_PyFQuat_str(ue_PyFQuat *self) PyFloat_FromDouble(self->quat.X), PyFloat_FromDouble(self->quat.Y), PyFloat_FromDouble(self->quat.Z), PyFloat_FromDouble(self->quat.W)); } -static PyTypeObject ue_PyFQuatType = { +PyTypeObject ue_PyFQuatType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FQuat", /* tp_name */ sizeof(ue_PyFQuat), /* tp_basicsize */ diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.h index 1a39ce0a8..94bd2cf9e 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFQuat.h @@ -11,9 +11,11 @@ typedef struct FQuat quat; } ue_PyFQuat; +extern PyTypeObject ue_PyFQuatType; + PyObject *py_ue_new_fquat(FQuat); ue_PyFQuat *py_ue_is_fquat(PyObject *); void ue_python_init_fquat(PyObject *); -bool py_ue_quat_arg(PyObject *, FQuat &); \ No newline at end of file +bool py_ue_quat_arg(PyObject *, FQuat &); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.cpp index edcc35348..3558faa5b 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.cpp @@ -93,7 +93,7 @@ static PyObject *ue_PyFRotator_str(ue_PyFRotator *self) PyFloat_FromDouble(self->rot.Roll), PyFloat_FromDouble(self->rot.Pitch), PyFloat_FromDouble(self->rot.Yaw)); } -static PyTypeObject ue_PyFRotatorType = { +PyTypeObject ue_PyFRotatorType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FRotator", /* tp_name */ sizeof(ue_PyFRotator), /* tp_basicsize */ diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.h index a4ea71a84..2d3f6df4c 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.h @@ -10,9 +10,11 @@ typedef struct { FRotator rot; } ue_PyFRotator; +extern PyTypeObject ue_PyFRotatorType; + PyObject *py_ue_new_frotator(FRotator); ue_PyFRotator *py_ue_is_frotator(PyObject *); void ue_python_init_frotator(PyObject *); -bool py_ue_rotator_arg(PyObject *, FRotator &); \ No newline at end of file +bool py_ue_rotator_arg(PyObject *, FRotator &); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp index 11548407a..b3a6b654a 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.cpp @@ -220,7 +220,7 @@ static PyObject *ue_PyFTransform_str(ue_PyFTransform *self) } -static PyTypeObject ue_PyFTransformType = { +PyTypeObject ue_PyFTransformType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FTransform", /* tp_name */ sizeof(ue_PyFTransform), /* tp_basicsize */ @@ -435,4 +435,4 @@ bool py_ue_transform_arg(PyObject *args, FTransform &t) t.SetRotation(FRotator(pitch, yaw, roll).Quaternion()); t.SetScale3D(FVector(sx, sy, sz)); return true; -} \ No newline at end of file +} diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.h index 3cb64312f..86f58e0f9 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFTransform.h @@ -10,8 +10,10 @@ typedef struct { FTransform transform; } ue_PyFTransform; +extern PyTypeObject ue_PyFTransformType; + PyObject *py_ue_new_ftransform(FTransform); ue_PyFTransform *py_ue_is_ftransform(PyObject *); void ue_python_init_ftransform(PyObject *); -bool py_ue_transform_arg(PyObject *, FTransform &); \ No newline at end of file +bool py_ue_transform_arg(PyObject *, FTransform &); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp index 3380d82df..430e1caa2 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp @@ -151,7 +151,7 @@ static PyObject *ue_PyFVector_str(ue_PyFVector *self) PyFloat_FromDouble(self->vec.X), PyFloat_FromDouble(self->vec.Y), PyFloat_FromDouble(self->vec.Z)); } -static PyTypeObject ue_PyFVectorType = { +PyTypeObject ue_PyFVectorType = { PyVarObject_HEAD_INIT(NULL, 0) "unreal_engine.FVector", /* tp_name */ sizeof(ue_PyFVector), /* tp_basicsize */ diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.h index e23935943..b7b0853e8 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.h @@ -11,9 +11,11 @@ typedef struct FVector vec; } ue_PyFVector; +extern PyTypeObject ue_PyFVectorType; + PyObject *py_ue_new_fvector(FVector); ue_PyFVector *py_ue_is_fvector(PyObject *); void ue_python_init_fvector(PyObject *); -bool py_ue_vector_arg(PyObject *, FVector &); \ No newline at end of file +bool py_ue_vector_arg(PyObject *, FVector &); From 378fe7df642972927de16bf5d1da0309e18d9e4c Mon Sep 17 00:00:00 2001 From: dave Date: Fri, 9 Nov 2018 11:04:31 -0700 Subject: [PATCH 101/151] also support native structs as return types --- .../UnrealEnginePython/Private/UEPyModule.cpp | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 8b4a174f2..26d7c1e90 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3258,6 +3258,42 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } + else if ((PyTypeObject *)py_return_value == &ue_PyFVectorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)py_return_value == &ue_PyFRotatorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)py_return_value == &ue_PyFLinearColorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)py_return_value == &ue_PyFColorType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)py_return_value == &ue_PyFTransformType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } + else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(py_return_value)) { @@ -3286,7 +3322,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ } } } - // TODO add native types (like vectors, rotators...) + if (prop) { prop->SetPropertyFlags(CPF_Parm | CPF_OutParm | CPF_ReturnParm); From da04e62f0ab7a5a08a1884dbb1986055d46f6bdd Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 10 Nov 2018 10:34:09 +0100 Subject: [PATCH 102/151] fixed 4.21 --- .../Private/SlateApplication/UEPyFSlateApplication.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/UnrealEnginePython/Private/SlateApplication/UEPyFSlateApplication.cpp b/Source/UnrealEnginePython/Private/SlateApplication/UEPyFSlateApplication.cpp index 358bf174d..33982e626 100644 --- a/Source/UnrealEnginePython/Private/SlateApplication/UEPyFSlateApplication.cpp +++ b/Source/UnrealEnginePython/Private/SlateApplication/UEPyFSlateApplication.cpp @@ -157,7 +157,11 @@ static PyObject *py_ue_process_key_char_event(PyObject *cls, PyObject * args) static PyObject *py_ue_create(PyObject *cls, PyObject * args) { #if ENGINE_MINOR_VERSION > 18 +#if ENGINE_MINOR_VERSION > 20 + FSlateApplication::InitHighDPI(true); +#else FSlateApplication::InitHighDPI(); +#endif #endif FSlateApplication::Create(); From 7611c527d41a8692c847a0a9129c548d7a12fafb Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sat, 17 Nov 2018 14:44:19 +0100 Subject: [PATCH 103/151] fixed save_package() in 4.21 --- Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index ad4fc2259..e7fcb7de5 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -2116,7 +2116,7 @@ PyObject *py_ue_save_package(ue_PyUObject * self, PyObject * args) package->FileName = *FPackageName::LongPackageNameToFilename(package->GetPathName(), bIsMap ? FPackageName::GetMapPackageExtension() : FPackageName::GetAssetPackageExtension()); } - if (UPackage::SavePackage(package, u_object, RF_NoFlags, *package->FileName.ToString())) + if (UPackage::SavePackage(package, u_object, RF_Standalone, *package->FileName.ToString())) { FAssetRegistryModule::AssetCreated(u_object); Py_RETURN_UOBJECT(u_object); From ed1e6d8a4c2c8bcb3630d85adda2d0d266f6721c Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 22 Nov 2018 16:44:46 -0700 Subject: [PATCH 104/151] added support for UEnums in function args and return values --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 26d7c1e90..009bc5ac1 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3214,6 +3214,14 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop = prop_base; } } + else if (py_obj->ue_object->IsA()) + { + UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + prop_enum->SetEnum((UEnum*)py_obj->ue_object); + prop_enum->AddCppProperty(prop_underlying); + prop = prop_enum; + } } if (prop) @@ -3321,6 +3329,14 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop = prop_base; } } + else if (py_obj->ue_object->IsA()) + { + UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + prop_enum->SetEnum((UEnum*)py_obj->ue_object); + prop_enum->AddCppProperty(prop_underlying); + prop = prop_enum; + } } if (prop) From 376e9c507491ec515d99f4910d6837c319b4f86b Mon Sep 17 00:00:00 2001 From: dave Date: Sat, 24 Nov 2018 17:01:39 -0700 Subject: [PATCH 105/151] added support for structs and class objects in function params and return values --- .../UnrealEnginePython/Private/UEPyModule.cpp | 151 ++++++++++++------ 1 file changed, 104 insertions(+), 47 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 009bc5ac1..5e7cef9cc 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -2642,9 +2642,18 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { if (auto casted_prop = Cast(prop)) { - // ensure the object type is correct, otherwise crash could happen (soon or later) - if (!ue_obj->ue_object->IsA(casted_prop->PropertyClass)) - return false; + // if the property specifies an interface, the object must be of a class that implements it + if (casted_prop->PropertyClass->HasAnyClassFlags(CLASS_Interface)) + { + if (!ue_obj->ue_object->GetClass()->ImplementsInterface(casted_prop->PropertyClass)) + return false; + } + else + { + // ensure the object type is correct, otherwise crash could happen (soon or later) + if (!ue_obj->ue_object->IsA(casted_prop->PropertyClass)) + return false; + } casted_prop->SetObjectPropertyValue_InContainer(buffer, ue_obj->ue_object, index); @@ -3187,32 +3196,50 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } + else if (PyObject_IsInstance(value, (PyObject *)&PyType_Type)) + { + // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) + PyObject *type_args = PyObject_GetAttrString(value, "__args__"); + if (!type_args) + { + UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (PyTuple_Size(type_args) != 1) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + PyObject *py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + if (!py_obj) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (!py_obj->ue_object->IsA()) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); + return nullptr; + } + UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_class->SetMetaClass((UClass*)py_obj->ue_object); + prop_class->PropertyClass = UClass::StaticClass(); + prop = prop_class; + Py_DECREF(type_args); + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(value)) { if (py_obj->ue_object->IsA()) { UClass *p_u_class = (UClass *)py_obj->ue_object; - if (p_u_class->IsChildOf()) - { - UClassProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - if (p_u_class == UClass::StaticClass()) - { - prop_base->SetMetaClass(UObject::StaticClass()); - } - else - { - prop_base->SetMetaClass(p_u_class->GetClass()); - } - prop_base->PropertyClass = UClass::StaticClass(); - prop = prop_base; - } - else - { - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_base->SetPropertyClass(p_u_class); - prop = prop_base; - } + UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_base->SetPropertyClass(p_u_class); + prop = prop_base; } else if (py_obj->ue_object->IsA()) { @@ -3221,6 +3248,12 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_enum->SetEnum((UEnum*)py_obj->ue_object); prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; + } + else if (py_obj->ue_object->IsA()) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; + prop = prop_struct; } } @@ -3302,33 +3335,51 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } + else if (PyObject_IsInstance(py_return_value, (PyObject *)&PyType_Type)) + { + // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) + PyObject *type_args = PyObject_GetAttrString(py_return_value, "__args__"); + if (!type_args) + { + UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (PyTuple_Size(type_args) != 1) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + PyObject *py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + if (!py_obj) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (!py_obj->ue_object->IsA()) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); + return nullptr; + } + UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_class->SetMetaClass((UClass*)py_obj->ue_object); + prop_class->PropertyClass = UClass::StaticClass(); + prop = prop_class; + Py_DECREF(type_args); + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(py_return_value)) { - if (py_obj->ue_object->IsA()) - { - UClass *p_u_class = (UClass *)py_obj->ue_object; - if (p_u_class->IsChildOf()) - { - UClassProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - if (p_u_class == UClass::StaticClass()) - { - prop_base->SetMetaClass(UObject::StaticClass()); - } - else - { - prop_base->SetMetaClass(p_u_class->GetClass()); - } - prop_base->PropertyClass = UClass::StaticClass(); - prop = prop_base; - } - else - { - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_base->SetPropertyClass(p_u_class); - prop = prop_base; - } - } + if (py_obj->ue_object->IsA()) + { + UClass *p_u_class = (UClass *)py_obj->ue_object; + UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_base->SetPropertyClass(p_u_class); + prop = prop_base; + } else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3336,6 +3387,12 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_enum->SetEnum((UEnum*)py_obj->ue_object); prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; + } + else if (py_obj->ue_object->IsA()) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; + prop = prop_struct; } } From 6544d279c71715fe23e43c0db058c3beab2b04b1 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 10:32:19 +0100 Subject: [PATCH 106/151] fixed #612 --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 5e7cef9cc..f91021b4f 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -2587,7 +2587,8 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in if (casted_prop->Struct == py_u_struct->u_struct) { uint8 *dest = casted_prop->ContainerPtrToValuePtr(buffer, index); - FMemory::Memcpy(dest, py_u_struct->u_struct_ptr, py_u_struct->u_struct->GetStructureSize()); + py_u_struct->u_struct->InitializeStruct(dest); + py_u_struct->u_struct->CopyScriptStruct(dest, py_u_struct->u_struct_ptr); return true; } } From 44f90bde22b48486117f3e92abe16502081ecfe5 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 11:22:35 +0100 Subject: [PATCH 107/151] added submenu support, #603 --- .../Private/Slate/UEPyFMenuBuilder.cpp | 27 +++++++++++++++++++ .../Private/Slate/UEPySlate.cpp | 18 +++++++++++-- .../Private/Slate/UEPySlateDelegate.h | 1 + .../Private/UnrealEnginePython.cpp | 4 +++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp b/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp index d0d5a5549..3157ec4f0 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp @@ -63,6 +63,32 @@ static PyObject *py_ue_fmenu_builder_add_menu_entry(ue_PyFMenuBuilder *self, PyO Py_RETURN_NONE; } +static PyObject *py_ue_fmenu_builder_add_sub_menu(ue_PyFMenuBuilder *self, PyObject * args) +{ + char *label; + char *tooltip; + PyObject *py_callable; + PyObject *py_bool = nullptr; + if (!PyArg_ParseTuple(args, "ssO|O:add_sub_menu", &label, &tooltip, &py_callable, &py_bool)) + return nullptr; + + if (!PyCallable_Check(py_callable)) + { + return PyErr_Format(PyExc_Exception, "argument is not callable"); + } + + + TSharedRef py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewStaticSlateDelegate(py_callable); + + FNewMenuDelegate menu_delegate; + menu_delegate.BindSP(py_delegate, &FPythonSlateDelegate::SubMenuPyBuilder); + + + self->menu_builder.AddSubMenu(FText::FromString(UTF8_TO_TCHAR(label)), FText::FromString(UTF8_TO_TCHAR(tooltip)), menu_delegate, (py_bool && PyObject_IsTrue(py_bool)) ? true : false); + + Py_RETURN_NONE; +} + static PyObject *py_ue_fmenu_builder_add_menu_separator(ue_PyFMenuBuilder *self, PyObject * args) { char *name = nullptr; @@ -130,6 +156,7 @@ static PyMethodDef ue_PyFMenuBuilder_methods[] = { { "add_menu_entry", (PyCFunction)py_ue_fmenu_builder_add_menu_entry, METH_VARARGS, "" }, { "add_menu_separator", (PyCFunction)py_ue_fmenu_builder_add_menu_separator, METH_VARARGS, "" }, { "add_search_widget", (PyCFunction)py_ue_fmenu_builder_add_search_widget, METH_VARARGS, "" }, + { "add_sub_menu", (PyCFunction)py_ue_fmenu_builder_add_sub_menu, METH_VARARGS, "" }, #if WITH_EDITOR { "add_asset_actions", (PyCFunction)py_ue_fmenu_builder_add_asset_actions, METH_VARARGS, "" }, #endif diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp index ae0fade73..f51285857 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp @@ -416,6 +416,20 @@ void FPythonSlateDelegate::MenuPyAssetBuilder(FMenuBuilder &Builder, TArray FPythonSlateDelegate::OnExtendContentBrowserMenu(const TArray& SelectedAssets) { TSharedRef Extender(new FExtender()); @@ -1321,6 +1335,7 @@ PyObject *py_unreal_engine_add_menu_bar_extension(PyObject * self, PyObject * ar if (!PyCallable_Check(py_callable)) return PyErr_Format(PyExc_Exception, "argument is not callable"); + TSharedRef *commands = new TSharedRef(new FPythonSlateCommands()); commands->Get().Setup(command_name, py_callable); @@ -1332,8 +1347,7 @@ PyObject *py_unreal_engine_add_menu_bar_extension(PyObject * self, PyObject * ar ExtensibleModule.GetMenuExtensibilityManager()->AddExtender(extender); - Py_INCREF(Py_None); - return Py_None; + Py_RETURN_NONE; } PyObject *py_unreal_engine_add_tool_bar_extension(PyObject * self, PyObject * args) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h b/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h index f2290e0d8..61b79d01c 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h @@ -45,6 +45,7 @@ class FPythonSlateDelegate : public FPythonSmartDelegate void OnAssetSelected(const FAssetData& AssetData); TSharedRef OnExtendContentBrowserMenu(const TArray &SelectedAssets); void MenuPyAssetBuilder(FMenuBuilder &Builder, TArray SelectedAssets); + void SubMenuPyBuilder(FMenuBuilder &Builder); void OnAssetChanged(const FAssetData &AssetData); bool OnShouldFilterAsset(const FAssetData& AssetData); #endif diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index bb79b8c8f..cabe29259 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -362,7 +362,11 @@ void FUnrealEnginePythonModule::StartupModule() const int32 MaxPathVarLen = 32768; FString OrigPathVar = FString::ChrN(MaxPathVarLen, TEXT('\0')); +#if ENGINE_MINOR_VERSION >= 21 + OrigPathVar = FPlatformMisc::GetEnvironmentVariable(TEXT("PATH")); +#else FPlatformMisc::GetEnvironmentVariable(TEXT("PATH"), OrigPathVar.GetCharArray().GetData(), MaxPathVarLen); +#endif // Get the current path and remove elements with python in them, we don't want any conflicts const TCHAR* PathDelimiter = FPlatformMisc::GetPathVarDelimiter(); From 3eb78c53e6883406b20ca9e1b4ca8455356e773d Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 11:23:12 +0100 Subject: [PATCH 108/151] added example for submenu --- examples/sub_menu.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 examples/sub_menu.py diff --git a/examples/sub_menu.py b/examples/sub_menu.py new file mode 100644 index 000000000..9d7901f2f --- /dev/null +++ b/examples/sub_menu.py @@ -0,0 +1,30 @@ +import unreal_engine as ue + +def open_submenu001(builder): + builder.begin_section('submenu001', 'i am a tooltip') + builder.add_menu_entry('sub_one', 'tooltip', lambda: ue.log('hello from submenu001')) + builder.add_menu_entry('sub_one_2', 'tooltip 2', lambda: ue.log('hello again')) + builder.end_section() + +def open_sub_submenu(builder): + builder.begin_section('sub_submenu003', 'i am a tooltip for the submenu') + builder.add_menu_entry('sub_sub_three', 'tooltip', lambda: ue.log('hello from sub_submenu003')) + builder.end_section() + +def open_submenu002(builder): + builder.begin_section('submenu002', 'i am a tooltip') + builder.add_menu_entry('sub_two', 'tooltip', lambda: ue.log('hello from submenu002')) + builder.add_sub_menu('sub sub menu', 'tooltip !', open_sub_submenu) + builder.end_section() + + +def open_menu(builder): + builder.begin_section('test1', 'test2') + builder.add_menu_entry('one', 'two', lambda: ue.log('ciao 1')) + builder.add_sub_menu('i am a submenu', 'tooltip for the submenu', open_submenu001) + builder.add_menu_entry('three', 'four', lambda: ue.log('ciao 2')) + builder.add_sub_menu('i am another submenu', 'tooltip for the second submenu', open_submenu002) + builder.end_section() + + +ue.add_menu_bar_extension('SimpleMenuBarExtension', open_menu) \ No newline at end of file From c2901db4d48de6deae2a9f5232208f229f21293d Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 12:06:57 +0100 Subject: [PATCH 109/151] closed #575 --- .../Private/Slate/UEPySlate.cpp | 22 ++++++++++--------- .../Private/Slate/UEPySlateDelegate.h | 2 +- .../UnrealEnginePython/Private/UEPyModule.cpp | 2 +- .../Private/Wrappers/UEPyFFoliageInstance.cpp | 9 +++++++- .../Private/Wrappers/UEPyFFoliageInstance.h | 2 ++ 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp index f51285857..0cc988240 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp @@ -417,6 +417,18 @@ void FPythonSlateDelegate::MenuPyAssetBuilder(FMenuBuilder &Builder, TArray FPythonSlateDelegate::OnExtendContentBrowserMenu(const TArray& SelectedAssets) +{ + TSharedRef Extender(new FExtender()); + + Extender->AddMenuExtension((char *)"GetAssetActions", EExtensionHook::After, nullptr, FMenuExtensionDelegate::CreateSP(this, &FPythonSlateDelegate::MenuPyAssetBuilder, SelectedAssets)); + + return Extender; +} + +#endif + + void FPythonSlateDelegate::SubMenuPyBuilder(FMenuBuilder &Builder) { FScopePythonGIL gil; @@ -430,16 +442,6 @@ void FPythonSlateDelegate::SubMenuPyBuilder(FMenuBuilder &Builder) Py_DECREF(ret); } -TSharedRef FPythonSlateDelegate::OnExtendContentBrowserMenu(const TArray& SelectedAssets) -{ - TSharedRef Extender(new FExtender()); - - Extender->AddMenuExtension((char *)"GetAssetActions", EExtensionHook::After, nullptr, FMenuExtensionDelegate::CreateSP(this, &FPythonSlateDelegate::MenuPyAssetBuilder, SelectedAssets)); - - return Extender; -} - -#endif TSharedRef FPythonSlateDelegate::OnGenerateWidget(TSharedPtr py_item) { diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h b/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h index 61b79d01c..f74f9fe34 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlateDelegate.h @@ -45,12 +45,12 @@ class FPythonSlateDelegate : public FPythonSmartDelegate void OnAssetSelected(const FAssetData& AssetData); TSharedRef OnExtendContentBrowserMenu(const TArray &SelectedAssets); void MenuPyAssetBuilder(FMenuBuilder &Builder, TArray SelectedAssets); - void SubMenuPyBuilder(FMenuBuilder &Builder); void OnAssetChanged(const FAssetData &AssetData); bool OnShouldFilterAsset(const FAssetData& AssetData); #endif void OnWindowClosed(const TSharedRef &Window); + void SubMenuPyBuilder(FMenuBuilder &Builder); TSharedPtr OnContextMenuOpening(); TSharedRef OnGenerateWidget(TSharedPtr py_item); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index f91021b4f..3904df579 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1697,9 +1697,9 @@ void unreal_engine_init_py_module() ue_python_init_enumsimporter(new_unreal_engine_module); ue_python_init_ustructsimporter(new_unreal_engine_module); +#if WITH_EDITOR ue_python_init_ffoliage_instance(new_unreal_engine_module); -#if WITH_EDITOR ue_python_init_fslowtask(new_unreal_engine_module); ue_python_init_swidget(new_unreal_engine_module); ue_python_init_farfilter(new_unreal_engine_module); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp index b3205f03e..1dbab35cd 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp @@ -6,6 +6,8 @@ #include "Components/ActorComponent.h" #include "Runtime/Foliage/Public/InstancedFoliageActor.h" +#if WITH_EDITOR + #define get_instance(x) FFoliageInstance *instance = get_foliage_instance(x);\ if (!instance)\ return nullptr; @@ -14,6 +16,8 @@ if (!instance)\ return -1; + + static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance *self) { if (!self->foliage_actor.IsValid()) @@ -45,6 +49,7 @@ static PyObject *ue_PyFFoliageInstance_str(ue_PyFFoliageInstance *self) self->instance_id); } + static PyObject *py_ue_ffoliage_instance_get_location(ue_PyFFoliageInstance *self, void *closure) { get_instance(self); @@ -257,4 +262,6 @@ PyObject *py_ue_new_ffoliage_instance(AInstancedFoliageActor *foliage_actor, UFo ret->foliage_type = TWeakObjectPtr(foliage_type); ret->instance_id = instance_id; return (PyObject *)ret; -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h index 409b37fad..ab65fc3c8 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.h @@ -1,6 +1,7 @@ #pragma once #include "UnrealEnginePython.h" +#if WITH_EDITOR #include "InstancedFoliage.h" typedef struct @@ -14,3 +15,4 @@ typedef struct void ue_python_init_ffoliage_instance(PyObject *); PyObject *py_ue_new_ffoliage_instance(AInstancedFoliageActor *foliage_actor, UFoliageType *foliage_type, int32 instance_id); +#endif From d5386c3b4c44394c175fd84e907e80a24b8b8476 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 13:08:16 +0100 Subject: [PATCH 110/151] added get_asset_identifier_referencers() --- .../UnrealEnginePython/Private/UEPyEditor.cpp | 38 ++++++++++++++++--- .../UnrealEnginePython/Private/UEPyEditor.h | 1 + .../UnrealEnginePython/Private/UEPyModule.cpp | 1 + 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.cpp b/Source/UnrealEnginePython/Private/UEPyEditor.cpp index f23f7c59e..3af0860f9 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEditor.cpp @@ -639,10 +639,11 @@ PyObject *py_unreal_engine_create_asset(PyObject * self, PyObject * args) PyObject *py_unreal_engine_get_asset_referencers(PyObject * self, PyObject * args) { char *path; + int depency_type = (int)EAssetRegistryDependencyType::All; - if (!PyArg_ParseTuple(args, "s:get_asset_referencers", &path)) + if (!PyArg_ParseTuple(args, "s|i:get_asset_referencers", &path, &depency_type)) { - return NULL; + return nullptr; } if (!GEditor) @@ -650,7 +651,7 @@ PyObject *py_unreal_engine_get_asset_referencers(PyObject * self, PyObject * arg FAssetRegistryModule& AssetRegistryModule = FModuleManager::GetModuleChecked("AssetRegistry"); TArray referencers; - AssetRegistryModule.Get().GetReferencers(UTF8_TO_TCHAR(path), referencers); + AssetRegistryModule.Get().GetReferencers(UTF8_TO_TCHAR(path), referencers, (EAssetRegistryDependencyType::Type) depency_type); PyObject *referencers_list = PyList_New(0); for (FName name : referencers) @@ -660,11 +661,38 @@ PyObject *py_unreal_engine_get_asset_referencers(PyObject * self, PyObject * arg return referencers_list; } +PyObject *py_unreal_engine_get_asset_identifier_referencers(PyObject * self, PyObject * args) +{ + char *path; + int depency_type = (int)EAssetRegistryDependencyType::All; + + if (!PyArg_ParseTuple(args, "s|i:get_asset_identifier_referencers", &path, &depency_type)) + { + return nullptr; + } + + if (!GEditor) + return PyErr_Format(PyExc_Exception, "no GEditor found"); + + FAssetRegistryModule& AssetRegistryModule = FModuleManager::GetModuleChecked("AssetRegistry"); + TArray referencers; + AssetRegistryModule.Get().GetReferencers(FAssetIdentifier::FromString(UTF8_TO_TCHAR(path)), referencers, (EAssetRegistryDependencyType::Type) depency_type); + + PyObject *referencers_list = PyList_New(0); + for (FAssetIdentifier identifier : referencers) + { + PyList_Append(referencers_list, PyUnicode_FromString(TCHAR_TO_UTF8(*identifier.ToString()))); + } + return referencers_list; +} + + PyObject *py_unreal_engine_get_asset_dependencies(PyObject * self, PyObject * args) { char *path; + int depency_type = (int)EAssetRegistryDependencyType::All; - if (!PyArg_ParseTuple(args, "s:get_asset_dependencies", &path)) + if (!PyArg_ParseTuple(args, "s|i:get_asset_dependencies", &path, &depency_type)) { return NULL; } @@ -674,7 +702,7 @@ PyObject *py_unreal_engine_get_asset_dependencies(PyObject * self, PyObject * ar FAssetRegistryModule& AssetRegistryModule = FModuleManager::GetModuleChecked("AssetRegistry"); TArray dependencies; - AssetRegistryModule.Get().GetDependencies(UTF8_TO_TCHAR(path), dependencies); + AssetRegistryModule.Get().GetDependencies(UTF8_TO_TCHAR(path), dependencies, (EAssetRegistryDependencyType::Type) depency_type); PyObject *dependencies_list = PyList_New(0); for (FName name : dependencies) diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.h b/Source/UnrealEnginePython/Private/UEPyEditor.h index f179c1788..d3399c8fd 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.h +++ b/Source/UnrealEnginePython/Private/UEPyEditor.h @@ -95,6 +95,7 @@ PyObject *py_unreal_engine_create_material_instance(PyObject *, PyObject *); PyObject *py_unreal_engine_allow_actor_script_execution_in_editor(PyObject *, PyObject *); PyObject *py_unreal_engine_get_asset_referencers(PyObject *, PyObject *); +PyObject *py_unreal_engine_get_asset_identifier_referencers(PyObject *, PyObject *); PyObject *py_unreal_engine_get_asset_dependencies(PyObject *, PyObject *); PyObject *py_unreal_engine_open_editor_for_asset(PyObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 3904df579..435890662 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -341,6 +341,7 @@ static PyMethodDef unreal_engine_methods[] = { { "sync_browser_to_assets", py_unreal_engine_editor_sync_browser_to_assets, METH_VARARGS, "" }, { "get_asset_referencers", py_unreal_engine_get_asset_referencers, METH_VARARGS, "" }, + { "get_asset_identifier_referencers", py_unreal_engine_get_asset_identifier_referencers, METH_VARARGS, "" }, { "get_asset_dependencies", py_unreal_engine_get_asset_dependencies, METH_VARARGS, "" }, { "rename_asset", py_unreal_engine_rename_asset, METH_VARARGS, "" }, From 5031be3ef5473b07517c5734ab7a6dea92ae3931 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 13:13:16 +0100 Subject: [PATCH 111/151] added ue.get_long_package_asset_name() --- Source/UnrealEnginePython/Private/UEPyEditor.cpp | 13 +++++++++++++ Source/UnrealEnginePython/Private/UEPyEditor.h | 1 + Source/UnrealEnginePython/Private/UEPyModule.cpp | 1 + 3 files changed, 15 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.cpp b/Source/UnrealEnginePython/Private/UEPyEditor.cpp index 3af0860f9..4d117dff4 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEditor.cpp @@ -725,6 +725,19 @@ PyObject *py_unreal_engine_get_long_package_path(PyObject * self, PyObject * arg return PyUnicode_FromString(TCHAR_TO_UTF8(*(package_path))); } +PyObject *py_unreal_engine_get_long_package_asset_name(PyObject * self, PyObject * args) +{ + char *path; + if (!PyArg_ParseTuple(args, "s:get_long_package_asset_name", &path)) + { + return NULL; + } + + const FString asset_name = FPackageName::GetLongPackageAssetName(UTF8_TO_TCHAR(path)); + + return PyUnicode_FromString(TCHAR_TO_UTF8(*(asset_name))); +} + PyObject *py_unreal_engine_rename_asset(PyObject * self, PyObject * args) { char *path; diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.h b/Source/UnrealEnginePython/Private/UEPyEditor.h index d3399c8fd..788a76ad3 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.h +++ b/Source/UnrealEnginePython/Private/UEPyEditor.h @@ -42,6 +42,7 @@ PyObject *py_unreal_engine_duplicate_asset(PyObject *, PyObject *); PyObject *py_unreal_engine_delete_asset(PyObject *, PyObject *); PyObject *py_unreal_engine_get_long_package_path(PyObject *, PyObject *); +PyObject *py_unreal_engine_get_long_package_asset_name(PyObject *, PyObject *); PyObject *py_unreal_engine_create_blueprint(PyObject *, PyObject *); PyObject *py_unreal_engine_compile_blueprint(PyObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 435890662..2bc1a4108 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -349,6 +349,7 @@ static PyMethodDef unreal_engine_methods[] = { { "delete_asset", py_unreal_engine_delete_asset, METH_VARARGS, "" }, { "get_long_package_path", py_unreal_engine_get_long_package_path, METH_VARARGS, "" }, + { "get_long_package_asset_name", py_unreal_engine_get_long_package_asset_name, METH_VARARGS, "" }, { "editor_command_build", py_unreal_engine_editor_command_build, METH_VARARGS, "" }, { "editor_command_build_lighting", py_unreal_engine_editor_command_build_lighting, METH_VARARGS, "" }, From 3afec1d83d125f110a1c319b6ee0dbb7ba73c555 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 13:45:56 +0100 Subject: [PATCH 112/151] improved sequencer api --- .../UnrealEnginePython/Private/UEPyModule.cpp | 246 +++++++++--------- .../Private/UObject/UEPySequencer.cpp | 40 +++ .../Private/UObject/UEPySequencer.h | 2 + 3 files changed, 166 insertions(+), 122 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 2bc1a4108..9156d5e79 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -1081,6 +1081,8 @@ static PyMethodDef ue_PyUObject_methods[] = { { "sequencer_set_view_range", (PyCFunction)py_ue_sequencer_set_view_range, METH_VARARGS, "" }, { "sequencer_set_working_range", (PyCFunction)py_ue_sequencer_set_working_range, METH_VARARGS, "" }, { "sequencer_set_section_range", (PyCFunction)py_ue_sequencer_set_section_range, METH_VARARGS, "" }, + { "sequencer_get_playback_range", (PyCFunction)py_ue_sequencer_get_playback_range, METH_VARARGS, "" }, + { "sequencer_get_selection_range", (PyCFunction)py_ue_sequencer_get_selection_range, METH_VARARGS, "" }, { "sequencer_folders", (PyCFunction)py_ue_sequencer_folders, METH_VARARGS, "" }, { "sequencer_create_folder", (PyCFunction)py_ue_sequencer_create_folder, METH_VARARGS, "" }, { "sequencer_set_display_name", (PyCFunction)py_ue_sequencer_set_display_name, METH_VARARGS, "" }, @@ -1960,7 +1962,7 @@ void unreal_engine_py_log_error() } PyErr_Clear(); - } +} // retrieve a UWorld from a generic UObject (if possible) UWorld *ue_get_uworld(ue_PyUObject *py_obj) @@ -2645,18 +2647,18 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { if (auto casted_prop = Cast(prop)) { - // if the property specifies an interface, the object must be of a class that implements it - if (casted_prop->PropertyClass->HasAnyClassFlags(CLASS_Interface)) - { - if (!ue_obj->ue_object->GetClass()->ImplementsInterface(casted_prop->PropertyClass)) - return false; - } - else - { - // ensure the object type is correct, otherwise crash could happen (soon or later) - if (!ue_obj->ue_object->IsA(casted_prop->PropertyClass)) - return false; - } + // if the property specifies an interface, the object must be of a class that implements it + if (casted_prop->PropertyClass->HasAnyClassFlags(CLASS_Interface)) + { + if (!ue_obj->ue_object->GetClass()->ImplementsInterface(casted_prop->PropertyClass)) + return false; + } + else + { + // ensure the object type is correct, otherwise crash could happen (soon or later) + if (!ue_obj->ue_object->IsA(casted_prop->PropertyClass)) + return false; + } casted_prop->SetObjectPropertyValue_InContainer(buffer, ue_obj->ue_object, index); @@ -3199,65 +3201,65 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if (PyObject_IsInstance(value, (PyObject *)&PyType_Type)) - { - // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) - PyObject *type_args = PyObject_GetAttrString(value, "__args__"); - if (!type_args) - { - UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); - return nullptr; - } - if (PyTuple_Size(type_args) != 1) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); - return nullptr; - } - PyObject *py_class = PyTuple_GetItem(type_args, 0); - ue_PyUObject *py_obj = ue_is_pyuobject(py_class); - if (!py_obj) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); - return nullptr; - } - if (!py_obj->ue_object->IsA()) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); - return nullptr; - } - UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_class->SetMetaClass((UClass*)py_obj->ue_object); - prop_class->PropertyClass = UClass::StaticClass(); - prop = prop_class; - Py_DECREF(type_args); - } + else if (PyObject_IsInstance(value, (PyObject *)&PyType_Type)) + { + // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) + PyObject *type_args = PyObject_GetAttrString(value, "__args__"); + if (!type_args) + { + UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (PyTuple_Size(type_args) != 1) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + PyObject *py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + if (!py_obj) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (!py_obj->ue_object->IsA()) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); + return nullptr; + } + UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_class->SetMetaClass((UClass*)py_obj->ue_object); + prop_class->PropertyClass = UClass::StaticClass(); + prop = prop_class; + Py_DECREF(type_args); + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(value)) { if (py_obj->ue_object->IsA()) { UClass *p_u_class = (UClass *)py_obj->ue_object; - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_base->SetPropertyClass(p_u_class); - prop = prop_base; - } - else if (py_obj->ue_object->IsA()) - { - UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); - prop_enum->SetEnum((UEnum*)py_obj->ue_object); - prop_enum->AddCppProperty(prop_underlying); - prop = prop_enum; - } - else if (py_obj->ue_object->IsA()) - { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; - prop = prop_struct; - } + UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_base->SetPropertyClass(p_u_class); + prop = prop_base; + } + else if (py_obj->ue_object->IsA()) + { + UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + prop_enum->SetEnum((UEnum*)py_obj->ue_object); + prop_enum->AddCppProperty(prop_underlying); + prop = prop_enum; + } + else if (py_obj->ue_object->IsA()) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; + prop = prop_struct; + } } if (prop) @@ -3338,65 +3340,65 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if (PyObject_IsInstance(py_return_value, (PyObject *)&PyType_Type)) - { - // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) - PyObject *type_args = PyObject_GetAttrString(py_return_value, "__args__"); - if (!type_args) - { - UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); - return nullptr; - } - if (PyTuple_Size(type_args) != 1) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); - return nullptr; - } - PyObject *py_class = PyTuple_GetItem(type_args, 0); - ue_PyUObject *py_obj = ue_is_pyuobject(py_class); - if (!py_obj) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); - return nullptr; - } - if (!py_obj->ue_object->IsA()) - { - Py_DECREF(type_args); - UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); - return nullptr; - } - UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_class->SetMetaClass((UClass*)py_obj->ue_object); - prop_class->PropertyClass = UClass::StaticClass(); - prop = prop_class; - Py_DECREF(type_args); - } + else if (PyObject_IsInstance(py_return_value, (PyObject *)&PyType_Type)) + { + // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) + PyObject *type_args = PyObject_GetAttrString(py_return_value, "__args__"); + if (!type_args) + { + UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (PyTuple_Size(type_args) != 1) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); + return nullptr; + } + PyObject *py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + if (!py_obj) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a ue_PyUObject"), UTF8_TO_TCHAR(name)); + return nullptr; + } + if (!py_obj->ue_object->IsA()) + { + Py_DECREF(type_args); + UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); + return nullptr; + } + UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_class->SetMetaClass((UClass*)py_obj->ue_object); + prop_class->PropertyClass = UClass::StaticClass(); + prop = prop_class; + Py_DECREF(type_args); + } } else if (ue_PyUObject *py_obj = ue_is_pyuobject(py_return_value)) { - if (py_obj->ue_object->IsA()) - { - UClass *p_u_class = (UClass *)py_obj->ue_object; - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_base->SetPropertyClass(p_u_class); - prop = prop_base; - } - else if (py_obj->ue_object->IsA()) - { - UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); - prop_enum->SetEnum((UEnum*)py_obj->ue_object); - prop_enum->AddCppProperty(prop_underlying); - prop = prop_enum; - } - else if (py_obj->ue_object->IsA()) - { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; - prop = prop_struct; - } + if (py_obj->ue_object->IsA()) + { + UClass *p_u_class = (UClass *)py_obj->ue_object; + UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_base->SetPropertyClass(p_u_class); + prop = prop_base; + } + else if (py_obj->ue_object->IsA()) + { + UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + prop_enum->SetEnum((UEnum*)py_obj->ue_object); + prop_enum->AddCppProperty(prop_underlying); + prop = prop_enum; + } + else if (py_obj->ue_object->IsA()) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; + prop = prop_struct; + } } if (prop) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 696905e97..b1325302a 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -915,6 +915,26 @@ PyObject *py_ue_sequencer_set_playback_range(ue_PyUObject *self, PyObject * args Py_RETURN_NONE; } +PyObject *py_ue_sequencer_get_playback_range(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + ULevelSequence *seq = ue_py_check_type(self); + if (!seq) + return PyErr_Format(PyExc_Exception, "uobject is not a LevelSequence"); + UMovieScene *scene = seq->GetMovieScene(); + +#if ENGINE_MINOR_VERSION < 20 + scene->GetPlaybackRange(); +#else + TRange range = scene->GetPlaybackRange(); + + return Py_BuildValue("(OO)", py_ue_new_fframe_number(range.GetLowerBoundValue()), py_ue_new_fframe_number(range.GetUpperBoundValue())); + +#endif +} + PyObject *py_ue_sequencer_set_working_range(ue_PyUObject *self, PyObject * args) { @@ -1013,6 +1033,26 @@ PyObject *py_ue_sequencer_set_section_range(ue_PyUObject *self, PyObject * args) Py_RETURN_NONE; } +PyObject *py_ue_sequencer_get_selection_range(ue_PyUObject *self, PyObject * args) +{ + + ue_py_check(self); + + ULevelSequence *seq = ue_py_check_type(self); + if (!seq) + return PyErr_Format(PyExc_Exception, "uobject is not a LevelSequence"); + UMovieScene *scene = seq->GetMovieScene(); + +#if ENGINE_MINOR_VERSION < 20 + scene->GetSelectionRange(); +#else + TRange range = scene->GetSelectionRange(); + + return Py_BuildValue("(OO)", py_ue_new_fframe_number(range.GetLowerBoundValue()), py_ue_new_fframe_number(range.GetUpperBoundValue())); + +#endif +} + PyObject *py_ue_sequencer_section_add_key(ue_PyUObject *self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h index 64cfe39bb..83185d612 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.h @@ -13,6 +13,8 @@ PyObject *py_ue_sequencer_set_playback_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_set_view_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_set_working_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_set_section_range(ue_PyUObject *, PyObject *); +PyObject *py_ue_sequencer_get_playback_range(ue_PyUObject *, PyObject *); +PyObject *py_ue_sequencer_get_selection_range(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_folders(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_create_folder(ue_PyUObject *, PyObject *); PyObject *py_ue_sequencer_set_display_name(ue_PyUObject *, PyObject *); From 240407bfa4b222a1d6f60e046b35f9175c43e2e3 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 13:54:34 +0100 Subject: [PATCH 113/151] fixed build for 4.15 --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 8 ++++++++ .../UnrealEnginePython/Private/UObject/UEPySequencer.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 9156d5e79..5cc289c17 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3195,12 +3195,14 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } +#if ENGINE_MINOR_VERSION > 15 else if ((PyTypeObject *)value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } +#endif else if (PyObject_IsInstance(value, (PyObject *)&PyType_Type)) { // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) @@ -3246,6 +3248,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } +#if ENGINE_MINOR_VERSION > 15 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3254,6 +3257,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; } +#endif else if (py_obj->ue_object->IsA()) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3334,12 +3338,14 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } +#if ENGINE_MINOR_VERSION > 15 else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } +#endif else if (PyObject_IsInstance(py_return_value, (PyObject *)&PyType_Type)) { // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) @@ -3385,6 +3391,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } +#if ENGINE_MINOR_VERSION > 15 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3393,6 +3400,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; } +#endif else if (py_obj->ue_object->IsA()) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index b1325302a..7d506be0e 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -926,7 +926,8 @@ PyObject *py_ue_sequencer_get_playback_range(ue_PyUObject *self, PyObject * args UMovieScene *scene = seq->GetMovieScene(); #if ENGINE_MINOR_VERSION < 20 - scene->GetPlaybackRange(); + TRange range = scene->GetPlaybackRange(); + return Py_BuildValue("(ff)", range.GetLowerBoundValue(), range.GetUpperBoundValue()); #else TRange range = scene->GetPlaybackRange(); @@ -1044,7 +1045,8 @@ PyObject *py_ue_sequencer_get_selection_range(ue_PyUObject *self, PyObject * arg UMovieScene *scene = seq->GetMovieScene(); #if ENGINE_MINOR_VERSION < 20 - scene->GetSelectionRange(); + TRange range = scene->GetSelectionRange(); + return Py_BuildValue("(ff)", range.GetLowerBoundValue(), range.GetUpperBoundValue()); #else TRange range = scene->GetSelectionRange(); From b0dc3e5aa6e33c716bcb4ac7807cba1a21bb4086 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 14:07:12 +0100 Subject: [PATCH 114/151] fixed 4.16 --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 5cc289c17..7a4b28046 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3195,7 +3195,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 else if ((PyTypeObject *)value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3248,7 +3248,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3338,7 +3338,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3391,7 +3391,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } -#if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION > 16 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); From c87bacf15584a7abcbfc7753ba7e489784425b93 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 14:11:52 +0100 Subject: [PATCH 115/151] fixed 4.17 --- .../UnrealEnginePython/Private/UEPyModule.cpp | 8 +++--- tools/release_win64.py | 26 ++++++++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 7a4b28046..07e778f22 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3195,7 +3195,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 else if ((PyTypeObject *)value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3248,7 +3248,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3338,7 +3338,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3391,7 +3391,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_base->SetPropertyClass(p_u_class); prop = prop_base; } -#if ENGINE_MINOR_VERSION > 16 +#if ENGINE_MINOR_VERSION > 17 else if (py_obj->ue_object->IsA()) { UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); diff --git a/tools/release_win64.py b/tools/release_win64.py index c07ffa3f7..bee239f42 100644 --- a/tools/release_win64.py +++ b/tools/release_win64.py @@ -5,8 +5,11 @@ import shutil import zipfile -UE_VERSIONS = ['4.15', '4.16', '4.17', '4.18', '4.19', '4.20'] -PYTHON_VERSIONS = ["C:/Program Files/Python36", "C:/Program Files/Python37", "C:/Python27"] +UE_VERSIONS = ['4.15', '4.16', '4.17', '4.18', '4.19', '4.20', '4.21'] +PYTHON_VERSIONS = ["C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Python27"] +MSBUILD = 'C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe' +UE_PATH = 'C:/Program Files/Epic Games' +PROJECTS_PATH = 'C:/Users/rober/Documents/Unreal Projects' RELEASE_DIR = sys.argv[1].rstrip('/') @@ -20,28 +23,27 @@ def msbuild(project, python_version): base_environ = os.environ base_environ.update({'PYTHONHOME': python_version}) base_environ.update({'UEP_ENABLE_UNITY_BUILD': '1'}) - #vs = '"C:/Program Files (x86)/MSBuild/14.0/Bin/MSBuild.exe"' - vs = '"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe"' - process = subprocess.Popen('{0} {1} /m /t:Rebuild /p:Configuration="Development Editor" /p:Platform=Win64'.format(vs, project), env=base_environ) + vs = '"{}"'.format(MSBUILD) + process = subprocess.Popen('{0} "{1}" /m /t:Rebuild /p:Configuration="Development Editor" /p:Platform=Win64'.format(vs, project), env=base_environ) while process.poll() is None: time.sleep(0.5) if process.returncode != 0: sys.exit(process.returncode) def commandlet(version, project): - ue_editor = os.path.join('D:/', 'UE_{0}'.format(version), 'Engine/Binaries/Win64/UE4Editor-Cmd.exe') - process = subprocess.Popen('{0} D:/{1}/{2}.uproject -run=PyCommandlet D:/{3}/Plugins/UnrealEnginePython/tools/release_check.py'.format(ue_editor, project, project, project)) + ue_editor = os.path.join(UE_PATH, 'UE_{0}'.format(version), 'Engine/Binaries/Win64/UE4Editor-Cmd.exe') + process = subprocess.Popen('{0} {1}/{2}/{3}.uproject -run=PyCommandlet {1}/{4}/Plugins/UnrealEnginePython/tools/release_check.py'.format(ue_editor, PROJECTS_PATH, project, project, project)) while process.poll() is None: time.sleep(0.5) # ignore return code, has too much different meanings for commandlets def git(project): - process = subprocess.Popen('git checkout master', cwd='D:/{0}/Plugins/UnrealEnginePython'.format(project)) + process = subprocess.Popen('git checkout master', cwd='{0}/{1}/Plugins/UnrealEnginePython'.format(PROJECTS_PATH, project)) while process.poll() is None: time.sleep(0.5) if process.returncode != 0: sys.exit(process.returncode) - process = subprocess.Popen('git pull', cwd='D:/{0}/Plugins/UnrealEnginePython'.format(project)) + process = subprocess.Popen('git pull', cwd='{0}/{1}/Plugins/UnrealEnginePython'.format(PROJECTS_PATH, project)) while process.poll() is None: time.sleep(0.5) if process.returncode != 0: @@ -51,7 +53,7 @@ def git(project): main_start = time.time() for ue_version in UE_VERSIONS: project = 'PyTest{0}'.format(ue_version.replace('.', '')) - sln = os.path.join('D:/', project, '{0}.sln'.format(project)) + sln = os.path.join(PROJECTS_PATH, project, '{0}.sln'.format(project)) git(project) for python_version in PYTHON_VERSIONS: python_sanitized = os.path.basename(python_version).lower() @@ -62,9 +64,9 @@ def git(project): commandlet(ue_version, project) end = time.time() for item in ('UE4Editor.modules', 'UE4Editor-UnrealEnginePython.dll', 'UE4Editor-PythonConsole.dll', 'UE4Editor-PythonEditor.dll', 'UE4Editor-PythonAutomation.dll'): - shutil.copyfile('D:/{0}/Plugins/UnrealEnginePython/Binaries/Win64/{1}'.format(project, item), '{0}/UnrealEnginePython/Binaries/Win64/{1}'.format(RELEASE_DIR, item)) + shutil.copyfile('{0}/{1}/Plugins/UnrealEnginePython/Binaries/Win64/{2}'.format(PROJECTS_PATH, project, item), '{0}/UnrealEnginePython/Binaries/Win64/{1}'.format(RELEASE_DIR, item)) if python_sanitized == 'python36': - shutil.copyfile('D:/{0}/Plugins/UnrealEnginePython/Binaries/Win64/{1}'.format(project, item), '{0}/Embedded/UnrealEnginePython/Binaries/Win64/{1}'.format(RELEASE_DIR, item)) + shutil.copyfile('{0}/{1}/Plugins/UnrealEnginePython/Binaries/Win64/{2}'.format(PROJECTS_PATH, project, item), '{0}/Embedded/UnrealEnginePython/Binaries/Win64/{1}'.format(RELEASE_DIR, item)) filename = 'UnrealEnginePython_{0}_{1}_{2}_win64.zip'.format(os.path.basename(RELEASE_DIR), ue_version.replace('.','_'), python_sanitized) zh = zipfile.ZipFile(os.path.join(RELEASE_DIR, filename), 'w', zipfile.ZIP_DEFLATED) zipdir(os.path.join(RELEASE_DIR, 'UnrealEnginePython'), zh, RELEASE_DIR) From 56a6f3044179e67978794eb4a037d092ae8b79f9 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 28 Nov 2018 14:16:16 +0100 Subject: [PATCH 116/151] fixed 4.18 --- Source/UnrealEnginePython/Private/UEPyModule.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 07e778f22..e89ccc9f6 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -3195,7 +3195,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 17 +#if ENGINE_MINOR_VERSION > 18 else if ((PyTypeObject *)value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3338,7 +3338,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } -#if ENGINE_MINOR_VERSION > 17 +#if ENGINE_MINOR_VERSION > 18 else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); From de7f156a29c3620e6b6702fa4bde90054ce03916 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 4 Dec 2018 16:18:52 -0700 Subject: [PATCH 117/151] added FVector2D wrapper --- .../UnrealEnginePython/Private/UEPyModule.cpp | 33 +- .../Private/Wrappers/UEPyFVector2D.cpp | 350 ++++++++++++++++++ .../Private/Wrappers/UEPyFVector2D.h | 21 ++ 3 files changed, 403 insertions(+), 1 deletion(-) create mode 100644 Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp create mode 100644 Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.h diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index e89ccc9f6..4b299e0fd 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -51,6 +51,7 @@ #include "Wrappers/UEPyESlateEnums.h" #include "Wrappers/UEPyFVector.h" +#include "Wrappers/UEPyFVector2D.h" #include "Wrappers/UEPyFHitResult.h" #include "Wrappers/UEPyFRotator.h" #include "Wrappers/UEPyFTransform.h" @@ -1656,6 +1657,7 @@ void unreal_engine_init_py_module() } ue_python_init_fvector(new_unreal_engine_module); + ue_python_init_fvector2d(new_unreal_engine_module); ue_python_init_frotator(new_unreal_engine_module); ue_python_init_ftransform(new_unreal_engine_module); ue_python_init_fhitresult(new_unreal_engine_module); @@ -2105,12 +2107,16 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) { if (auto casted_struct = Cast(casted_prop->Struct)) { - // check for FVector if (casted_struct == TBaseStructure::Get()) { FVector vec = *casted_prop->ContainerPtrToValuePtr(buffer, index); return py_ue_new_fvector(vec); } + if (casted_struct == TBaseStructure::Get()) + { + FVector2D vec = *casted_prop->ContainerPtrToValuePtr(buffer, index); + return py_ue_new_fvector2d(vec); + } if (casted_struct == TBaseStructure::Get()) { FRotator rot = *casted_prop->ContainerPtrToValuePtr(buffer, index); @@ -2516,6 +2522,19 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } + if (ue_PyFVector2D *py_vec = py_ue_is_fvector2d(py_obj)) + { + if (auto casted_prop = Cast(prop)) + { + if (casted_prop->Struct == TBaseStructure::Get()) + { + *casted_prop->ContainerPtrToValuePtr(buffer, index) = py_vec->vec; + return true; + } + } + return false; + } + if (ue_PyFRotator *py_rot = py_ue_is_frotator(py_obj)) { if (auto casted_prop = Cast(prop)) @@ -3171,6 +3190,12 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } + else if ((PyTypeObject *)value == &ue_PyFVector2DType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } else if ((PyTypeObject *)value == &ue_PyFRotatorType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); @@ -3314,6 +3339,12 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } + else if ((PyTypeObject *)py_return_value == &ue_PyFVector2DType) + { + UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + prop_struct->Struct = TBaseStructure::Get(); + prop = prop_struct; + } else if ((PyTypeObject *)py_return_value == &ue_PyFRotatorType) { UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp new file mode 100644 index 000000000..c206e9964 --- /dev/null +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp @@ -0,0 +1,350 @@ +#include "UEPyFVector2D.h" + +static PyObject *py_ue_fvector2d_length(ue_PyFVector2D *self, PyObject * args) +{ + return PyFloat_FromDouble(self->vec.Size()); +} + +static PyObject *py_ue_fvector2d_length_squared(ue_PyFVector2D *self, PyObject * args) +{ + return PyFloat_FromDouble(self->vec.SizeSquared()); +} + +static PyObject *py_ue_fvector2d_normalized(ue_PyFVector2D *self, PyObject * args) +{ + FVector2D vec = self->vec; + vec.Normalize(); + return py_ue_new_fvector2d(vec); +} + +static PyObject *py_ue_fvector2d_dot(ue_PyFVector2D *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O:dot", &py_obj)) + return NULL; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_TypeError, "argument is not a FVector2D"); + return PyFloat_FromDouble(FVector2D::DotProduct(self->vec, py_vec->vec)); +} + +static PyObject *py_ue_fvector2d_cross(ue_PyFVector2D *self, PyObject * args) +{ + PyObject *py_obj; + if (!PyArg_ParseTuple(args, "O:cross", &py_obj)) + return NULL; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(py_obj); + if (!py_vec) + return PyErr_Format(PyExc_TypeError, "argument is not a FVector2D"); + return PyFloat_FromDouble(FVector2D::CrossProduct(self->vec, py_vec->vec)); +} + +static PyMethodDef ue_PyFVector2D_methods[] = { + + { "length", (PyCFunction)py_ue_fvector2d_length, METH_VARARGS, "" }, + { "size", (PyCFunction)py_ue_fvector2d_length, METH_VARARGS, "" }, + { "size_squared", (PyCFunction)py_ue_fvector2d_length_squared, METH_VARARGS, "" }, + { "length_squared", (PyCFunction)py_ue_fvector2d_length_squared, METH_VARARGS, "" }, + { "normalized", (PyCFunction)py_ue_fvector2d_normalized, METH_VARARGS, "" }, + { "dot", (PyCFunction)py_ue_fvector2d_dot, METH_VARARGS, "" }, + { "cross", (PyCFunction)py_ue_fvector2d_cross, METH_VARARGS, "" }, + { NULL } /* Sentinel */ +}; + +static PyObject *py_ue_fvector2d_get_x(ue_PyFVector2D *self, void *closure) +{ + return PyFloat_FromDouble(self->vec.X); +} + +static int py_ue_fvector2d_set_x(ue_PyFVector2D *self, PyObject *value, void *closure) +{ + if (value && PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + self->vec.X = PyFloat_AsDouble(f_value); + Py_DECREF(f_value); + return 0; + } + PyErr_SetString(PyExc_TypeError, "value is not numeric"); + return -1; +} + +static PyObject *py_ue_fvector2d_get_y(ue_PyFVector2D *self, void *closure) +{ + return PyFloat_FromDouble(self->vec.Y); +} + +static int py_ue_fvector2d_set_y(ue_PyFVector2D *self, PyObject *value, void *closure) +{ + if (value && PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + self->vec.Y = PyFloat_AsDouble(f_value); + Py_DECREF(f_value); + return 0; + } + PyErr_SetString(PyExc_TypeError, "value is not numeric"); + return -1; +} + + +static PyGetSetDef ue_PyFVector2D_getseters[] = { + {(char *) "x", (getter)py_ue_fvector2d_get_x, (setter)py_ue_fvector2d_set_x, (char *)"", NULL }, + {(char *) "y", (getter)py_ue_fvector2d_get_y, (setter)py_ue_fvector2d_set_y, (char *)"", NULL }, + { NULL } /* Sentinel */ +}; + +static PyObject *ue_PyFVector2D_str(ue_PyFVector2D *self) +{ + return PyUnicode_FromFormat("", + PyFloat_FromDouble(self->vec.X), PyFloat_FromDouble(self->vec.Y)); +} + +PyTypeObject ue_PyFVector2DType = { + PyVarObject_HEAD_INIT(NULL, 0) + "unreal_engine.FVector2D", /* tp_name */ + sizeof(ue_PyFVector2D), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + (reprfunc)ue_PyFVector2D_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ +#if PY_MAJOR_VERSION < 3 + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, /* tp_flags */ +#else + Py_TPFLAGS_DEFAULT, /* tp_flags */ +#endif + "Unreal Engine FVector2D", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + ue_PyFVector2D_methods, /* tp_methods */ + 0, + ue_PyFVector2D_getseters, +}; + + +static PyObject *ue_py_fvector2d_add(ue_PyFVector2D *self, PyObject *value) +{ + FVector2D vec = self->vec; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(value); + if (py_vec) + { + vec += py_vec->vec; + } + else if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + vec.X += f; + vec.Y += f; + Py_DECREF(f_value); + } + return py_ue_new_fvector2d(vec); +} + +static PyObject *ue_py_fvector2d_sub(ue_PyFVector2D *self, PyObject *value) +{ + FVector2D vec = self->vec; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(value); + if (py_vec) + { + vec -= py_vec->vec; + } + else if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + vec.X -= f; + vec.Y -= f; + Py_DECREF(f_value); + } + return py_ue_new_fvector2d(vec); +} + +static PyObject *ue_py_fvector2d_mul(ue_PyFVector2D *self, PyObject *value) +{ + FVector2D vec = self->vec; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(value); + if (py_vec) + { + vec *= py_vec->vec; + } + else if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + vec *= f; + Py_DECREF(f_value); + } + return py_ue_new_fvector2d(vec); +} + +static PyObject *ue_py_fvector2d_div(ue_PyFVector2D *self, PyObject *value) +{ + FVector2D vec = self->vec; + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(value); + if (py_vec) + { + if (py_vec->vec.X == 0 || py_vec->vec.Y == 0) + return PyErr_Format(PyExc_ZeroDivisionError, "division by zero"); + vec /= py_vec->vec; + } + else if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + if (f == 0) + return PyErr_Format(PyExc_ZeroDivisionError, "division by zero"); + vec /= f; + Py_DECREF(f_value); + } + return py_ue_new_fvector2d(vec); +} + +PyNumberMethods ue_PyFVector2D_number_methods; + +static Py_ssize_t ue_py_fvector2d_seq_length(ue_PyFVector2D *self) +{ + return 2; +} + +static PyObject *ue_py_fvector2d_seq_item(ue_PyFVector2D *self, Py_ssize_t i) +{ + switch (i) + { + case 0: + return PyFloat_FromDouble(self->vec.X); + case 1: + return PyFloat_FromDouble(self->vec.Y); + } + return PyErr_Format(PyExc_IndexError, "FVector2D has only 2 items"); +} + +PySequenceMethods ue_PyFVector2D_sequence_methods; + +static int ue_py_fvector2d_init(ue_PyFVector2D *self, PyObject *args, PyObject *kwargs) +{ + float x = 0, y = 0; + if (!PyArg_ParseTuple(args, "|ff", &x, &y)) + return -1; + + if (PyTuple_Size(args) == 1) + { + y = x; + } + + self->vec.X = x; + self->vec.Y = y; + + return 0; +} + +static PyObject *ue_py_fvector2d_richcompare(ue_PyFVector2D *vec1, PyObject *b, int op) +{ + ue_PyFVector2D *vec2 = py_ue_is_fvector2d(b); + if (!vec2 || (op != Py_EQ && op != Py_NE)) + { + return PyErr_Format(PyExc_NotImplementedError, "can only compare with another FVector2D"); + } + + if (op == Py_EQ) + { + if (vec1->vec.X == vec2->vec.X && + vec1->vec.Y == vec2->vec.Y) + { + Py_INCREF(Py_True); + return Py_True; + } + Py_INCREF(Py_False); + return Py_False; + } + + if (vec1->vec.X == vec2->vec.X && + vec1->vec.Y == vec2->vec.Y) + { + Py_INCREF(Py_False); + return Py_False; + } + Py_INCREF(Py_True); + return Py_True; +} + +void ue_python_init_fvector2d(PyObject *ue_module) +{ + ue_PyFVector2DType.tp_new = PyType_GenericNew; + + ue_PyFVector2DType.tp_init = (initproc)ue_py_fvector2d_init; + ue_PyFVector2DType.tp_richcompare = (richcmpfunc)ue_py_fvector2d_richcompare; + + memset(&ue_PyFVector2D_number_methods, 0, sizeof(PyNumberMethods)); + ue_PyFVector2DType.tp_as_number = &ue_PyFVector2D_number_methods; + ue_PyFVector2D_number_methods.nb_add = (binaryfunc)ue_py_fvector2d_add; + ue_PyFVector2D_number_methods.nb_subtract = (binaryfunc)ue_py_fvector2d_sub; + ue_PyFVector2D_number_methods.nb_multiply = (binaryfunc)ue_py_fvector2d_mul; + ue_PyFVector2D_number_methods.nb_true_divide = (binaryfunc)ue_py_fvector2d_div; + + memset(&ue_PyFVector2D_sequence_methods, 0, sizeof(PySequenceMethods)); + ue_PyFVector2DType.tp_as_sequence = &ue_PyFVector2D_sequence_methods; + ue_PyFVector2D_sequence_methods.sq_length = (lenfunc)ue_py_fvector2d_seq_length; + ue_PyFVector2D_sequence_methods.sq_item = (ssizeargfunc)ue_py_fvector2d_seq_item; + + if (PyType_Ready(&ue_PyFVector2DType) < 0) + return; + + Py_INCREF(&ue_PyFVector2DType); + PyModule_AddObject(ue_module, "FVector2D", (PyObject *)&ue_PyFVector2DType); +} + +PyObject *py_ue_new_fvector2d(FVector2D vec) +{ + ue_PyFVector2D *ret = (ue_PyFVector2D *)PyObject_New(ue_PyFVector2D, &ue_PyFVector2DType); + ret->vec = vec; + return (PyObject *)ret; +} + +ue_PyFVector2D *py_ue_is_fvector2d(PyObject *obj) +{ + if (!PyObject_IsInstance(obj, (PyObject *)&ue_PyFVector2DType)) + return nullptr; + return (ue_PyFVector2D *)obj; +} + +bool py_ue_vector2d_arg(PyObject *args, FVector2D &vec) +{ + + if (PyTuple_Size(args) == 1) + { + PyObject *arg = PyTuple_GetItem(args, 0); + ue_PyFVector2D *py_vec = py_ue_is_fvector2d(arg); + if (!py_vec) + { + PyErr_Format(PyExc_TypeError, "argument is not a FVector2D"); + return false; + } + vec = py_vec->vec; + return true; + } + + float x, y; + if (!PyArg_ParseTuple(args, "ff", &x, &y)) + return false; + vec.X = x; + vec.Y = y; + return true; +} + diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.h b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.h new file mode 100644 index 000000000..b9c2f4d73 --- /dev/null +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.h @@ -0,0 +1,21 @@ +#pragma once + + + +#include "UEPyModule.h" + +typedef struct +{ + PyObject_HEAD + /* Type-specific fields go here. */ + FVector2D vec; +} ue_PyFVector2D; + +extern PyTypeObject ue_PyFVector2DType; + +PyObject *py_ue_new_fvector2d(FVector2D); +ue_PyFVector2D *py_ue_is_fvector2d(PyObject *); + +void ue_python_init_fvector2d(PyObject *); + +bool py_ue_vector2d_arg(PyObject *, FVector2D &); From 875191d152f50e97696c070b1828f7adc9dda2c6 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 4 Dec 2018 16:44:21 -0700 Subject: [PATCH 118/151] Fixed division bug in FVector --- Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp index 430e1caa2..d2f48a418 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp @@ -363,7 +363,7 @@ void ue_python_init_fvector(PyObject *ue_module) ue_PyFVector_number_methods.nb_add = (binaryfunc)ue_py_fvector_add; ue_PyFVector_number_methods.nb_subtract = (binaryfunc)ue_py_fvector_sub; ue_PyFVector_number_methods.nb_multiply = (binaryfunc)ue_py_fvector_mul; - ue_PyFVector_number_methods.nb_divmod = (binaryfunc)ue_py_fvector_div; + ue_PyFVector_number_methods.nb_true_divide = (binaryfunc)ue_py_fvector_div; memset(&ue_PyFVector_sequence_methods, 0, sizeof(PySequenceMethods)); ue_PyFVectorType.tp_as_sequence = &ue_PyFVector_sequence_methods; From 85d96608467a4724bef5d66b7a8ff41a09c4f284 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 4 Dec 2018 17:05:27 -0700 Subject: [PATCH 119/151] added get_static_mesh_bounds method --- .../UnrealEnginePython/Private/UEPyModule.cpp | 1 + .../Private/UObject/UEPyStaticMesh.cpp | 19 +++++++++++++++++-- .../Private/UObject/UEPyStaticMesh.h | 4 +++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index e89ccc9f6..542b5a42f 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -751,6 +751,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "vlog_cylinder", (PyCFunction)py_ue_vlog_cylinder, METH_VARARGS, "" }, // StaticMesh + { "get_static_mesh_bounds", (PyCFunction)py_ue_static_mesh_get_bounds, METH_VARARGS, "" }, #if WITH_EDITOR { "static_mesh_build", (PyCFunction)py_ue_static_mesh_build, METH_VARARGS, "" }, { "static_mesh_create_body_setup", (PyCFunction)py_ue_static_mesh_create_body_setup, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp index 1111ac4ee..eaf1a1cf8 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.cpp @@ -1,9 +1,24 @@ #include "UEPyStaticMesh.h" +#include "Engine/StaticMesh.h" +PyObject *py_ue_static_mesh_get_bounds(ue_PyUObject *self, PyObject * args) +{ + ue_py_check(self); + UStaticMesh *mesh = ue_py_check_type(self); + if (!mesh) + return PyErr_Format(PyExc_Exception, "uobject is not a UStaticMesh"); + + FBoxSphereBounds bounds = mesh->GetBounds(); + UScriptStruct *u_struct = FindObject(ANY_PACKAGE, UTF8_TO_TCHAR("BoxSphereBounds")); + if (!u_struct) + { + return PyErr_Format(PyExc_Exception, "unable to get BoxSphereBounds struct"); + } + return py_ue_new_owned_uscriptstruct(u_struct, (uint8 *)&bounds); +} #if WITH_EDITOR -#include "Engine/StaticMesh.h" #include "Wrappers/UEPyFRawMesh.h" #include "Editor/UnrealEd/Private/GeomFitUtils.h" #include "FbxMeshUtils.h" @@ -137,4 +152,4 @@ PyObject *py_ue_static_mesh_import_lod(ue_PyUObject *self, PyObject * args) Py_RETURN_FALSE; } -#endif \ No newline at end of file +#endif diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h index 9874520cf..46a8c76be 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyStaticMesh.h @@ -4,6 +4,8 @@ #include "UEPyModule.h" +PyObject *py_ue_static_mesh_get_bounds(ue_PyUObject *self, PyObject * args); + #if WITH_EDITOR PyObject *py_ue_static_mesh_build(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_create_body_setup(ue_PyUObject *, PyObject *); @@ -15,4 +17,4 @@ PyObject *py_ue_static_mesh_generate_kdop10z(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_generate_kdop18(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_generate_kdop26(ue_PyUObject *, PyObject *); PyObject *py_ue_static_mesh_import_lod(ue_PyUObject *, PyObject *); -#endif \ No newline at end of file +#endif From 2492243cdcfc3f3e59486032e2e5dff4d2d6d4f8 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 6 Dec 2018 16:07:35 -0700 Subject: [PATCH 120/151] added support for FVector floor division --- .../Private/Wrappers/UEPyFVector.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp index d2f48a418..113c3bb62 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector.cpp @@ -277,6 +277,24 @@ static PyObject *ue_py_fvector_div(ue_PyFVector *self, PyObject *value) return py_ue_new_fvector(vec); } +static PyObject *ue_py_fvector_floor_div(ue_PyFVector *self, PyObject *value) +{ + FVector vec = self->vec; + if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + if (f == 0) + return PyErr_Format(PyExc_ZeroDivisionError, "division by zero"); + vec.X = floor(vec.X / f); + vec.Y = floor(vec.Y / f); + vec.Z = floor(vec.Z / f); + Py_DECREF(f_value); + return py_ue_new_fvector(vec); + } + return PyErr_Format(PyExc_TypeError, "value is not numeric"); +} + PyNumberMethods ue_PyFVector_number_methods; static Py_ssize_t ue_py_fvector_seq_length(ue_PyFVector *self) @@ -364,6 +382,7 @@ void ue_python_init_fvector(PyObject *ue_module) ue_PyFVector_number_methods.nb_subtract = (binaryfunc)ue_py_fvector_sub; ue_PyFVector_number_methods.nb_multiply = (binaryfunc)ue_py_fvector_mul; ue_PyFVector_number_methods.nb_true_divide = (binaryfunc)ue_py_fvector_div; + ue_PyFVector_number_methods.nb_floor_divide = (binaryfunc)ue_py_fvector_floor_div; memset(&ue_PyFVector_sequence_methods, 0, sizeof(PySequenceMethods)); ue_PyFVectorType.tp_as_sequence = &ue_PyFVector_sequence_methods; From b6d281e6ee5e4797db2ec8e2da7da67accf1863b Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 6 Dec 2018 16:21:34 -0700 Subject: [PATCH 121/151] added floor division support to FVector2D --- .../Private/Wrappers/UEPyFVector2D.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp index c206e9964..20855cf56 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFVector2D.cpp @@ -216,6 +216,23 @@ static PyObject *ue_py_fvector2d_div(ue_PyFVector2D *self, PyObject *value) return py_ue_new_fvector2d(vec); } +static PyObject *ue_py_fvector2d_floor_div(ue_PyFVector2D *self, PyObject *value) +{ + FVector2D vec = self->vec; + if (PyNumber_Check(value)) + { + PyObject *f_value = PyNumber_Float(value); + float f = PyFloat_AsDouble(f_value); + if (f == 0) + return PyErr_Format(PyExc_ZeroDivisionError, "division by zero"); + vec.X = floor(vec.X / f); + vec.Y = floor(vec.Y / f); + Py_DECREF(f_value); + return py_ue_new_fvector2d(vec); + } + return PyErr_Format(PyExc_TypeError, "value is not numeric"); +} + PyNumberMethods ue_PyFVector2D_number_methods; static Py_ssize_t ue_py_fvector2d_seq_length(ue_PyFVector2D *self) @@ -297,6 +314,7 @@ void ue_python_init_fvector2d(PyObject *ue_module) ue_PyFVector2D_number_methods.nb_subtract = (binaryfunc)ue_py_fvector2d_sub; ue_PyFVector2D_number_methods.nb_multiply = (binaryfunc)ue_py_fvector2d_mul; ue_PyFVector2D_number_methods.nb_true_divide = (binaryfunc)ue_py_fvector2d_div; + ue_PyFVector2D_number_methods.nb_floor_divide = (binaryfunc)ue_py_fvector2d_floor_div; memset(&ue_PyFVector2D_sequence_methods, 0, sizeof(PySequenceMethods)); ue_PyFVector2DType.tp_as_sequence = &ue_PyFVector2D_sequence_methods; From ae7fd91cc3dc86d25b43ea6d42bb289364ecdf58 Mon Sep 17 00:00:00 2001 From: Tom Rota Date: Sun, 9 Dec 2018 12:16:25 -0500 Subject: [PATCH 122/151] Added TCHAR_TO_WCHAR to fix issue 602 --- Source/UnrealEnginePython/Private/PyCommandlet.cpp | 2 +- Source/UnrealEnginePython/Private/UnrealEnginePython.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/PyCommandlet.cpp b/Source/UnrealEnginePython/Private/PyCommandlet.cpp index 9b22ae818..3a1643ae9 100644 --- a/Source/UnrealEnginePython/Private/PyCommandlet.cpp +++ b/Source/UnrealEnginePython/Private/PyCommandlet.cpp @@ -91,7 +91,7 @@ int32 UPyCommandlet::Main(const FString& CommandLine) #if PY_MAJOR_VERSION >= 3 argv[i] = (wchar_t*)malloc(PyArgv[i].Len() + 1); #if PLATFORM_MAC || PLATFORM_LINUX - wcsncpy(argv[i], *PyArgv[i].ReplaceEscapedCharWithChar(), PyArgv[i].Len() + 1); + wcsncpy(argv[i], (const wchar_t *) TCHAR_TO_WCHAR(*PyArgv[i].ReplaceEscapedCharWithChar()), PyArgv[i].Len() + 1); #elif PLATFORM_ANDROID wcsncpy(argv[i], (const wchar_t *)*PyArgv[i].ReplaceEscapedCharWithChar(), PyArgv[i].Len() + 1); #else diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index cabe29259..8527d0a82 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -116,7 +116,7 @@ void FUnrealEnginePythonModule::UESetupPythonInterpreter(bool verbose) for (int32 i = 0; i < Args.Num(); i++) { #if PY_MAJOR_VERSION >= 3 - argv[i] = (wchar_t *)(*Args[i]); + argv[i] = (wchar_t *)(TCHAR_TO_WCHAR(*Args[i])); #else argv[i] = TCHAR_TO_UTF8(*Args[i]); #endif From 14deb53bafd17c8d8ed202994caa297cf938eee6 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 12 Dec 2018 18:35:35 +0100 Subject: [PATCH 123/151] Restore Windows stdio flags after Python initialisation. Python forcibly sets the file mode for stdin, stdout, and stderr to O_BINARY for several reasons. This causes wprintf() to output UTF-16 instead of going through the proper text conversion. As a result, standard output was all messed up after the module was initialised. The Python developers do not really consider this a bug because they are not familiar with wprintf() (https://bugs.python.org/issue16587). Unfortunately this is what UE4 uses for logging. --- .../Private/UnrealEnginePython.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index bb79b8c8f..8d8e2c1b2 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -34,9 +34,14 @@ const char *ue4_module_options = "linux_global_symbols"; #include "Runtime/Core/Public/Misc/CommandLine.h" #include "Runtime/Core/Public/Misc/ConfigCacheIni.h" #include "Runtime/Core/Public/GenericPlatform/GenericPlatformFile.h" +#include "Runtime/Core/Public/GenericPlatform/GenericPlatformMisc.h" #include "Runtime/Core/Public/HAL/FileManagerGeneric.h" +#if PLATFORM_WINDOWS +#include +#endif + #if PLATFORM_ANDROID #include "Android/AndroidJNI.h" #include "Android/AndroidApplication.h" @@ -447,6 +452,22 @@ void FUnrealEnginePythonModule::StartupModule() Py_Initialize(); +#if PLATFORM_WINDOWS + // Restore stdio state after Py_Initialize set it to O_BINARY, otherwise + // everything that the engine will output is going to be encoded in UTF-16. + // The behaviour is described here: https://bugs.python.org/issue16587 + _setmode(fileno(stdin), O_TEXT); + _setmode(fileno(stdout), O_TEXT); + _setmode(fileno(stderr), O_TEXT); + + // Also restore the user-requested UTF-8 flag if relevant (behaviour copied + // from LaunchEngineLoop.cpp). + if (FParse::Param(FCommandLine::Get(), TEXT("UTF8Output"))) + { + FPlatformMisc::SetUTF8Output(); + } +#endif + PyEval_InitThreads(); #if WITH_EDITOR From ab0ac86352f9f2b2bea749442919affb278ef560 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 12 Dec 2018 19:29:01 +0100 Subject: [PATCH 124/151] =?UTF-8?q?Use=20C++=20conformant=20=E2=80=9C=5Ffi?= =?UTF-8?q?leno=E2=80=9D=20instead=20of=20=E2=80=9Cfileno=E2=80=9D.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/UnrealEnginePython/Private/UnrealEnginePython.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index 5665e4746..e4334b320 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -460,9 +460,9 @@ void FUnrealEnginePythonModule::StartupModule() // Restore stdio state after Py_Initialize set it to O_BINARY, otherwise // everything that the engine will output is going to be encoded in UTF-16. // The behaviour is described here: https://bugs.python.org/issue16587 - _setmode(fileno(stdin), O_TEXT); - _setmode(fileno(stdout), O_TEXT); - _setmode(fileno(stderr), O_TEXT); + _setmode(_fileno(stdin), O_TEXT); + _setmode(_fileno(stdout), O_TEXT); + _setmode(_fileno(stderr), O_TEXT); // Also restore the user-requested UTF-8 flag if relevant (behaviour copied // from LaunchEngineLoop.cpp). From 9e4f393d987e4a8d48dabe5759e9098f500314ac Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 13 Dec 2018 10:45:27 +0100 Subject: [PATCH 125/151] Add backwards compatibility macro for TCHAR_TO_WCHAR. This macro was only introduced in UE4.20. We copy it if wchar_t and TCHAR differ in size. --- Source/UnrealEnginePython/Private/UEPyModule.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyModule.h b/Source/UnrealEnginePython/Private/UEPyModule.h index b193e0a10..08e599d52 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.h +++ b/Source/UnrealEnginePython/Private/UEPyModule.h @@ -14,6 +14,15 @@ #include "Wrappers/UEPyFColor.h" #include "Wrappers/UEPyFLinearColor.h" +// backward compatibility for UE4.20 TCHAR_TO_WCHAR +#ifndef TCHAR_TO_WCHAR + // SIZEOF_WCHAR_T is provided by pyconfig.h + #if SIZEOF_WCHAR_T == (PLATFORM_TCHAR_IS_4_BYTES ? 4 : 2) + #define TCHAR_TO_WCHAR(str) str + #else + #define TCHAR_TO_WCHAR(str) (wchar_t*)StringCast(static_cast(str)).Get() + #endif +#endif UWorld *ue_get_uworld(ue_PyUObject *); From 38599ea244580caf18b1ab0dc6774fb2f283a6a0 Mon Sep 17 00:00:00 2001 From: Tom Rota Date: Thu, 13 Dec 2018 11:27:48 -0500 Subject: [PATCH 126/151] Adds version checking before calling TCHAR_TO_WCHAR --- Source/UnrealEnginePython/Private/PyCommandlet.cpp | 4 ++++ Source/UnrealEnginePython/Private/UnrealEnginePython.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Source/UnrealEnginePython/Private/PyCommandlet.cpp b/Source/UnrealEnginePython/Private/PyCommandlet.cpp index 3a1643ae9..701f05348 100644 --- a/Source/UnrealEnginePython/Private/PyCommandlet.cpp +++ b/Source/UnrealEnginePython/Private/PyCommandlet.cpp @@ -91,7 +91,11 @@ int32 UPyCommandlet::Main(const FString& CommandLine) #if PY_MAJOR_VERSION >= 3 argv[i] = (wchar_t*)malloc(PyArgv[i].Len() + 1); #if PLATFORM_MAC || PLATFORM_LINUX + #if ENGINE_MINOR_VERSION >= 20 wcsncpy(argv[i], (const wchar_t *) TCHAR_TO_WCHAR(*PyArgv[i].ReplaceEscapedCharWithChar()), PyArgv[i].Len() + 1); + #else + wcsncpy(argv[i], *PyArgv[i].ReplaceEscapedCharWithChar(), PyArgv[i].Len() + 1); + #endif #elif PLATFORM_ANDROID wcsncpy(argv[i], (const wchar_t *)*PyArgv[i].ReplaceEscapedCharWithChar(), PyArgv[i].Len() + 1); #else diff --git a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp index e4334b320..211124849 100644 --- a/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp +++ b/Source/UnrealEnginePython/Private/UnrealEnginePython.cpp @@ -121,7 +121,11 @@ void FUnrealEnginePythonModule::UESetupPythonInterpreter(bool verbose) for (int32 i = 0; i < Args.Num(); i++) { #if PY_MAJOR_VERSION >= 3 + #if ENGINE_MINOR_VERSION >= 20 argv[i] = (wchar_t *)(TCHAR_TO_WCHAR(*Args[i])); + #else + argv[i] = (wchar_t *)(*Args[i]); + #endif #else argv[i] = TCHAR_TO_UTF8(*Args[i]); #endif From bfe470b4026d28062d2391a039d0a4e8f5e1fa74 Mon Sep 17 00:00:00 2001 From: dave Date: Fri, 14 Dec 2018 14:20:17 -0700 Subject: [PATCH 127/151] look for python in alternate custom location --- Source/UnrealEnginePython/UnrealEnginePython.Build.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 6e7727d0b..96b48121d 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -292,6 +292,11 @@ private string DiscoverPythonPath(string[] knownPaths, string binaryPath) if (!string.IsNullOrEmpty(environmentPath)) paths.Insert(0, environmentPath); + // look in an alternate custom location + environmentPath = System.Environment.GetEnvironmentVariable("UNREALENGINEPYTHONHOME"); + if (!string.IsNullOrEmpty(environmentPath)) + paths.Insert(0, environmentPath); + foreach (string path in paths) { string actualPath = path; From fda6204af11d6846bf316a3204c6b142b4da46d0 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 28 Dec 2018 12:59:18 +0100 Subject: [PATCH 128/151] fixed typo --- .../UnrealEnginePython/Private/Wrappers/UEPyFFrameNumber.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFrameNumber.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFrameNumber.cpp index bb939c680..b2dc0a0df 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFrameNumber.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFrameNumber.cpp @@ -10,7 +10,7 @@ static PyObject *ue_PyFFrameNumber_str(ue_PyFFrameNumber *self) static PyTypeObject ue_PyFFrameNumberType = { PyVarObject_HEAD_INIT(NULL, 0) - "unreal_engine.FMFrameNumber", /* tp_name */ + "unreal_engine.FFrameNumber", /* tp_name */ sizeof(ue_PyFFrameNumber), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -80,4 +80,4 @@ PyObject *py_ue_new_fframe_number(FFrameNumber frame_number) return (PyObject *)ret; } -#endif \ No newline at end of file +#endif From b9fb9291d68612a02789cc552da50c93e011747b Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Sun, 13 Jan 2019 10:24:05 +0100 Subject: [PATCH 129/151] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1885cd358..46264da12 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Once the plugin is installed and enabled, you get access to the 'PythonConsole' All of the exposed engine features are under the 'unreal_engine' virtual module (it is completely coded in c into the plugin, so do not expect to run 'import unreal_engine' from a standard python shell) -The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19 and 4.20 +The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.20 and 4.21 We support official python.org releases as well as IntelPython and Anaconda distributions. From dc6e93cd2a87a0d77e03c3a9d423f2a32c2f776d Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 18 Feb 2019 21:55:08 -0700 Subject: [PATCH 130/151] added support for uobj.unbind_event --- .../Private/PythonDelegate.cpp | 9 ++++- .../UnrealEnginePython/Private/UEPyModule.cpp | 40 +++++++++++++++++++ .../UnrealEnginePython/Private/UEPyModule.h | 1 + .../Private/UObject/UEPyObject.cpp | 19 +++++++++ .../Private/UObject/UEPyObject.h | 3 +- .../Public/PythonDelegate.h | 1 + .../Public/PythonHouseKeeper.h | 11 +++++ 7 files changed, 82 insertions(+), 2 deletions(-) diff --git a/Source/UnrealEnginePython/Private/PythonDelegate.cpp b/Source/UnrealEnginePython/Private/PythonDelegate.cpp index 0ed596d4b..e7e4c6699 100644 --- a/Source/UnrealEnginePython/Private/PythonDelegate.cpp +++ b/Source/UnrealEnginePython/Private/PythonDelegate.cpp @@ -1,6 +1,7 @@ #include "PythonDelegate.h" #include "UEPyModule.h" +#include "UEPyCallable.h" UPythonDelegate::UPythonDelegate() { @@ -101,6 +102,12 @@ void UPythonDelegate::PyInputAxisHandler(float value) Py_DECREF(ret); } +bool UPythonDelegate::UsesPyCallable(PyObject *other) +{ + ue_PyCallable *other_callable = (ue_PyCallable*)other; + ue_PyCallable *this_callable = (ue_PyCallable*)py_callable; + return other_callable->u_function == this_callable->u_function && other_callable->u_target == this_callable->u_target; +} UPythonDelegate::~UPythonDelegate() { @@ -110,4 +117,4 @@ UPythonDelegate::~UPythonDelegate() #if defined(UEPY_MEMORY_DEBUG) UE_LOG(LogPython, Warning, TEXT("PythonDelegate %p callable XDECREF'ed"), this); #endif -} \ No newline at end of file +} diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 704593c8d..993828a86 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -607,6 +607,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "set_name", (PyCFunction)py_ue_set_name, METH_VARARGS, "" }, { "bind_event", (PyCFunction)py_ue_bind_event, METH_VARARGS, "" }, + { "unbind_event", (PyCFunction)py_ue_unbind_event, METH_VARARGS, "" }, { "delegate_bind_ufunction", (PyCFunction)py_ue_delegate_bind_ufunction, METH_VARARGS, "" }, { "get_py_proxy", (PyCFunction)py_ue_get_py_proxy, METH_VARARGS, "" }, @@ -3044,6 +3045,45 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * Py_RETURN_NONE; } +PyObject *ue_unbind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) +{ + UProperty *u_property = u_obj->ue_object->GetClass()->FindPropertyByName(FName(*event_name)); + if (!u_property) + { + if (fail_on_wrong_property) + return PyErr_Format(PyExc_Exception, "unable to find event property %s", TCHAR_TO_UTF8(*event_name)); + Py_RETURN_NONE; + } + + if (auto casted_prop = Cast(u_property)) + { + UPythonDelegate *py_delegate = FUnrealEnginePythonHouseKeeper::Get()->FindDelegate(u_obj->ue_object, py_callable); + if (py_delegate != nullptr) + { + FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(u_obj->ue_object); + multiscript_delegate.Remove(py_delegate, FName("PyFakeCallable")); + + // re-assign multicast delegate + casted_prop->SetPropertyValue_InContainer(u_obj->ue_object, multiscript_delegate); + } + } + else if (auto casted_prop_delegate = Cast(u_property)) + { + FScriptDelegate script_delegate = casted_prop_delegate->GetPropertyValue_InContainer(u_obj->ue_object); + script_delegate.Unbind(); + + // re-assign multicast delegate + casted_prop_delegate->SetPropertyValue_InContainer(u_obj->ue_object, script_delegate); + } + else + { + if (fail_on_wrong_property) + return PyErr_Format(PyExc_Exception, "property %s is not an event", TCHAR_TO_UTF8(*event_name)); + } + + Py_RETURN_NONE; +} + PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) { diff --git a/Source/UnrealEnginePython/Private/UEPyModule.h b/Source/UnrealEnginePython/Private/UEPyModule.h index 08e599d52..9d865cb16 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.h +++ b/Source/UnrealEnginePython/Private/UEPyModule.h @@ -35,6 +35,7 @@ void ue_bind_events_for_py_class_by_attribute(UObject *, PyObject *); void ue_autobind_events_for_pyclass(ue_PyUObject *, PyObject *); PyObject *ue_bind_pyevent(ue_PyUObject *, FString, PyObject *, bool); +PyObject *ue_unbind_pyevent(ue_PyUObject *, FString, PyObject *, bool); PyObject *py_ue_ufunction_call(UFunction *, UObject *, PyObject *, int, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index e7fcb7de5..d11031775 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1517,6 +1517,25 @@ PyObject *py_ue_bind_event(ue_PyUObject * self, PyObject * args) return ue_bind_pyevent(self, FString(event_name), py_callable, true); } +PyObject *py_ue_unbind_event(ue_PyUObject * self, PyObject * args) +{ + ue_py_check(self); + + char *event_name; + PyObject *py_callable; + if (!PyArg_ParseTuple(args, "sO:bind_event", &event_name, &py_callable)) + { + return NULL; + } + + if (!PyCallable_Check(py_callable)) + { + return PyErr_Format(PyExc_Exception, "object is not callable"); + } + + return ue_unbind_pyevent(self, FString(event_name), py_callable, true); +} + PyObject *py_ue_delegate_bind_ufunction(ue_PyUObject * self, PyObject * args) { ue_py_check(self); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h index 4f66b78f7..6fb4678fe 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.h +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.h @@ -51,6 +51,7 @@ PyObject *py_ue_enum_user_defined_names(ue_PyUObject *, PyObject *); PyObject *py_ue_bind_event(ue_PyUObject *, PyObject *); +PyObject *py_ue_unbind_event(ue_PyUObject *, PyObject *); PyObject *py_ue_add_function(ue_PyUObject *, PyObject *); PyObject *py_ue_add_property(ue_PyUObject *, PyObject *); @@ -111,4 +112,4 @@ PyObject *py_ue_render_thumbnail(ue_PyUObject *, PyObject *); PyObject *py_ue_to_bytes(ue_PyUObject *, PyObject *); PyObject *py_ue_to_bytearray(ue_PyUObject *, PyObject *); -PyObject *py_ue_from_bytes(ue_PyUObject *, PyObject *); \ No newline at end of file +PyObject *py_ue_from_bytes(ue_PyUObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Public/PythonDelegate.h b/Source/UnrealEnginePython/Public/PythonDelegate.h index 01d0f70b7..be46aa511 100644 --- a/Source/UnrealEnginePython/Public/PythonDelegate.h +++ b/Source/UnrealEnginePython/Public/PythonDelegate.h @@ -13,6 +13,7 @@ class UPythonDelegate : public UObject ~UPythonDelegate(); virtual void ProcessEvent(UFunction *function, void *Parms) override; void SetPyCallable(PyObject *callable); + bool UsesPyCallable(PyObject *callable); void SetSignature(UFunction *original_signature); void PyInputHandler(); diff --git a/Source/UnrealEnginePython/Public/PythonHouseKeeper.h b/Source/UnrealEnginePython/Public/PythonHouseKeeper.h index ed36ecc63..dcde4d3a7 100644 --- a/Source/UnrealEnginePython/Public/PythonHouseKeeper.h +++ b/Source/UnrealEnginePython/Public/PythonHouseKeeper.h @@ -238,6 +238,17 @@ class FUnrealEnginePythonHouseKeeper : public FGCObject return Garbaged; } + UPythonDelegate *FindDelegate(UObject *Owner, PyObject *PyCallable) + { + for (int32 i = PyDelegatesTracker.Num() - 1; i >= 0; --i) + { + FPythonDelegateTracker &Tracker = PyDelegatesTracker[i]; + if (Tracker.Owner.Get() == Owner && Tracker.Delegate->UsesPyCallable(PyCallable)) + return Tracker.Delegate; + } + return nullptr; + } + UPythonDelegate *NewDelegate(UObject *Owner, PyObject *PyCallable, UFunction *Signature) { UPythonDelegate *Delegate = NewObject(); From 30e723241336db7241f4215d50773803161ce6f3 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 7 Mar 2019 08:07:02 +0100 Subject: [PATCH 131/151] preliminary support for 4.22 --- .../Private/Slate/UEPySImage.h | 4 ++++ .../UnrealEnginePython/Private/UEPyEditor.cpp | 17 +++++++++++++---- .../Private/UObject/UEPyLandscape.cpp | 4 ++++ .../UnrealEnginePython.Build.cs | 2 -- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySImage.h b/Source/UnrealEnginePython/Private/Slate/UEPySImage.h index fb608ef55..584e14e50 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySImage.h +++ b/Source/UnrealEnginePython/Private/Slate/UEPySImage.h @@ -5,7 +5,11 @@ #include "UEPySLeafWidget.h" +#if ENGINE_MINOR_VERSION > 21 +#include "Runtime/SlateCore/Public/Widgets/Images/SImage.h" +#else #include "Runtime/Slate/Public/Widgets/Images/SImage.h" +#endif #include "Runtime/SlateCore/Public/Styling/SlateBrush.h" extern PyTypeObject ue_PySImageType; diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.cpp b/Source/UnrealEnginePython/Private/UEPyEditor.cpp index 4d117dff4..e994cf121 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEditor.cpp @@ -286,7 +286,7 @@ PyObject *py_unreal_engine_editor_play(PyObject * self, PyObject * args) Py_END_ALLOW_THREADS; Py_RETURN_NONE; - } +} PyObject *py_unreal_engine_editor_select_actor(PyObject * self, PyObject * args) { @@ -462,7 +462,7 @@ PyObject *py_unreal_engine_import_asset(PyObject * self, PyObject * args) } Py_RETURN_NONE; - } +} PyObject *py_unreal_engine_editor_tick(PyObject * self, PyObject * args) { @@ -796,7 +796,7 @@ PyObject *py_unreal_engine_rename_asset(PyObject * self, PyObject * args) #endif Py_RETURN_NONE; - } +} PyObject *py_unreal_engine_duplicate_asset(PyObject * self, PyObject * args) { @@ -1879,7 +1879,11 @@ PyObject *py_unreal_engine_editor_on_asset_post_import(PyObject * self, PyObject return PyErr_Format(PyExc_Exception, "object is not a callable"); TSharedRef py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewPythonSmartDelegate(py_callable); +#if ENGINE_MINOR_VERSION > 21 + GEditor->GetEditorSubsystem()->OnAssetPostImport.AddSP(py_delegate, &FPythonSmartDelegate::PyFOnAssetPostImport); +#else FEditorDelegates::OnAssetPostImport.AddSP(py_delegate, &FPythonSmartDelegate::PyFOnAssetPostImport); +#endif Py_RETURN_NONE; } @@ -2115,7 +2119,7 @@ PyObject *py_unreal_engine_add_level_to_world(PyObject *self, PyObject * args) #endif Py_RETURN_UOBJECT(level_streaming); - } +} PyObject *py_unreal_engine_move_selected_actors_to_level(PyObject *self, PyObject * args) { @@ -2533,7 +2537,11 @@ PyObject *py_unreal_engine_unregister_settings(PyObject * self, PyObject * args) PyObject *py_unreal_engine_all_viewport_clients(PyObject * self, PyObject * args) { +#if ENGINE_MINOR_VERSION > 21 + TArray clients = GEditor->GetAllViewportClients(); +#else TArray clients = GEditor->AllViewportClients; +#endif PyObject *py_list = PyList_New(0); for (FEditorViewportClient *client : clients) { @@ -2647,5 +2655,6 @@ PyObject *py_unreal_engine_export_assets(PyObject * self, PyObject * args) Py_RETURN_NONE; } + #endif diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp index 883a6ba0f..fbd27d2df 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp @@ -85,10 +85,14 @@ PyObject *py_ue_landscape_export_to_raw_mesh(ue_PyUObject *self, PyObject * args if (!landscape) return PyErr_Format(PyExc_Exception, "uobject is not a ULandscapeProxy"); +#if ENGINE_MINOR_VERSION > 21 + return PyErr_Format(PyExc_Exception, "MeshDescription struct is still unsupported");; +#else FRawMesh raw_mesh; if (!landscape->ExportToRawMesh(lod, raw_mesh)) return PyErr_Format(PyExc_Exception, "unable to export landscape to FRawMesh"); return py_ue_new_fraw_mesh(raw_mesh); +#endif } #endif diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 96b48121d..51394b033 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -100,7 +100,6 @@ public UnrealEnginePython(TargetInfo Target) PublicIncludePaths.AddRange( new string[] { - "UnrealEnginePython/Public", // ... add public include paths required here ... } ); @@ -108,7 +107,6 @@ public UnrealEnginePython(TargetInfo Target) PrivateIncludePaths.AddRange( new string[] { - "UnrealEnginePython/Private", // ... add other private include paths required here ... } ); From e2802a5cdf361a0dfa74c63e6ce1d645ae431612 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Thu, 7 Mar 2019 08:23:34 +0100 Subject: [PATCH 132/151] use FRichCurve instead of FInterpCurveFloat in Sequencer api --- .../Private/UObject/UEPySequencer.cpp | 62 ++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp index 7d506be0e..8858a7936 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPySequencer.cpp @@ -68,6 +68,51 @@ static bool magic_get_frame_number(UMovieScene *MovieScene, PyObject *py_obj, FF } #if WITH_EDITOR +#if ENGINE_MINOR_VERSION > 21 +static void ImportTransformChannel(const FRichCurve& Source, FMovieSceneFloatChannel* Dest, FFrameRate DestFrameRate, bool bNegateTangents) +{ + TMovieSceneChannelData ChannelData = Dest->GetData(); + ChannelData.Reset(); + double DecimalRate = DestFrameRate.AsDecimal(); + for (int32 KeyIndex = 0; KeyIndex < Source.Keys.Num(); ++KeyIndex) + { + float ArriveTangent = Source.Keys[KeyIndex].ArriveTangent; + if (KeyIndex > 0) + { + ArriveTangent = ArriveTangent / ((Source.Keys[KeyIndex].Value - Source.Keys[KeyIndex - 1].Value) * DecimalRate); + } + + float LeaveTangent = Source.Keys[KeyIndex].LeaveTangent; + if (KeyIndex < Source.Keys.Num() - 1) + { + LeaveTangent = LeaveTangent / ((Source.Keys[KeyIndex + 1].Value - Source.Keys[KeyIndex].Value) * DecimalRate); + } + + if (bNegateTangents) + { + ArriveTangent = -ArriveTangent; + LeaveTangent = -LeaveTangent; + } + + FFrameNumber KeyTime = (Source.Keys[KeyIndex].Value * DestFrameRate).RoundToFrame(); + if (ChannelData.FindKey(KeyTime) == INDEX_NONE) + { + FMovieSceneFloatValue NewKey(Source.Keys[KeyIndex].Value); + + NewKey.InterpMode = Source.Keys[KeyIndex].InterpMode; + NewKey.TangentMode = Source.Keys[KeyIndex].TangentMode; + NewKey.Tangent.ArriveTangent = ArriveTangent / DestFrameRate.AsDecimal(); + NewKey.Tangent.LeaveTangent = LeaveTangent / DestFrameRate.AsDecimal(); + NewKey.Tangent.TangentWeightMode = RCTWM_WeightedNone; + NewKey.Tangent.ArriveTangentWeight = 0.0f; + NewKey.Tangent.LeaveTangentWeight = 0.0f; + ChannelData.AddKey(KeyTime, NewKey); + } + } + + Dest->AutoSetTangents(); +} +#else static void ImportTransformChannel(const FInterpCurveFloat& Source, FMovieSceneFloatChannel* Dest, FFrameRate DestFrameRate, bool bNegateTangents) { TMovieSceneChannelData ChannelData = Dest->GetData(); @@ -103,18 +148,27 @@ static void ImportTransformChannel(const FInterpCurveFloat& Source, FMovieSceneF Dest->AutoSetTangents(); } +#endif static bool ImportFBXTransform(FString NodeName, UMovieScene3DTransformSection* TransformSection, UnFbx::FFbxCurvesAPI& CurveAPI) { // Look for transforms explicitly + FTransform DefaultTransform; + +#if ENGINE_MINOR_VERSION > 21 + FRichCurve Translation[3]; + FRichCurve EulerRotation[3]; + FRichCurve Scale[3]; +#else FInterpCurveFloat Translation[3]; FInterpCurveFloat EulerRotation[3]; FInterpCurveFloat Scale[3]; - FTransform DefaultTransform; +#endif CurveAPI.GetConvertedTransformCurveData(NodeName, Translation[0], Translation[1], Translation[2], EulerRotation[0], EulerRotation[1], EulerRotation[2], Scale[0], Scale[1], Scale[2], DefaultTransform); + TransformSection->Modify(); FFrameRate FrameRate = TransformSection->GetTypedOuter()->GetTickResolution(); @@ -1594,9 +1648,15 @@ PyObject *py_ue_sequencer_import_fbx_transform(ue_PyUObject *self, PyObject * ar continue; // Look for transforms explicitly +#if ENGINE_MINOR_VERSION > 21 + FRichCurve Translation[3]; + FRichCurve EulerRotation[3]; + FRichCurve Scale[3]; +#else FInterpCurveFloat Translation[3]; FInterpCurveFloat EulerRotation[3]; FInterpCurveFloat Scale[3]; +#endif FTransform DefaultTransform; #if ENGINE_MINOR_VERSION >= 18 CurveAPI.GetConvertedTransformCurveData(NodeName, Translation[0], Translation[1], Translation[2], EulerRotation[0], EulerRotation[1], EulerRotation[2], Scale[0], Scale[1], Scale[2], DefaultTransform); From 020763ac04138323abf99b0d09fc600f0762bbd9 Mon Sep 17 00:00:00 2001 From: Devin Curry Date: Tue, 12 Mar 2019 10:46:02 -0700 Subject: [PATCH 133/151] Add break_all_links() and get_linked_to() for blueprint pins --- .../Private/Blueprint/UEPyEdGraphPin.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraphPin.cpp b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraphPin.cpp index dca7bf864..283079f31 100644 --- a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraphPin.cpp +++ b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraphPin.cpp @@ -80,9 +80,49 @@ static PyObject *py_ue_edgraphpin_break_link_to(ue_PyEdGraphPin *self, PyObject Py_RETURN_NONE; } +static PyObject *py_ue_edgraphpin_break_all_pin_links(ue_PyEdGraphPin *self, PyObject * args) +{ + PyObject *py_notify_nodes = nullptr; + if (!PyArg_ParseTuple(args, "O:break_all_pin_links", &py_notify_nodes)) + { + return NULL; + } + + bool notify_nodes = true; + if (py_notify_nodes && !PyObject_IsTrue(py_notify_nodes)) + notify_nodes = false; + + self->pin->BreakAllPinLinks(notify_nodes); + + if (UBlueprint *bp = Cast(self->pin->GetOwningNode()->GetGraph()->GetOuter())) + { + FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(bp); + } + + Py_RETURN_NONE; +} + +static PyObject *py_ue_edgraphpin_get_linked_to(ue_PyEdGraphPin * self, PyObject * args) +{ + PyObject *pins = PyList_New(0); + + TArray Links = self->pin->LinkedTo; + + for (int32 i = 0; i < Links.Num(); i++) + { + UEdGraphPin *pin = Links[i]; + ue_PyUObject *item = (ue_PyUObject *)py_ue_new_edgraphpin(pin); + if (item) + PyList_Append(pins, (PyObject *)item); + } + return pins; +} + static PyMethodDef ue_PyEdGraphPin_methods[] = { { "make_link_to", (PyCFunction)py_ue_edgraphpin_make_link_to, METH_VARARGS, "" }, { "break_link_to", (PyCFunction)py_ue_edgraphpin_break_link_to, METH_VARARGS, "" }, + { "break_all_pin_links", (PyCFunction)py_ue_edgraphpin_break_all_pin_links, METH_VARARGS, "" }, + { "get_linked_to", (PyCFunction)py_ue_edgraphpin_get_linked_to, METH_VARARGS, "" }, { "connect", (PyCFunction)py_ue_edgraphpin_connect, METH_VARARGS, "" }, { NULL } /* Sentinel */ }; From 1da9fbc7002c2f1c33762cf97064b09faf85bcb1 Mon Sep 17 00:00:00 2001 From: dave Date: Wed, 13 Mar 2019 17:11:14 -0600 Subject: [PATCH 134/151] fixed 4.19 build --- Source/UnrealEnginePython/UnrealEnginePython.Build.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 51394b033..48d6618c1 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -107,6 +107,9 @@ public UnrealEnginePython(TargetInfo Target) PrivateIncludePaths.AddRange( new string[] { +#if !UE_4_22_OR_LATER + "UnrealEnginePython/Private", +#endif // ... add other private include paths required here ... } ); From 8ed4abccdc503f91154ff8bd791e464292319a47 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 14 Mar 2019 10:05:50 -0600 Subject: [PATCH 135/151] Split PythonHouseKeeper into .h and .cpp file for easier debugging --- .../Private/PythonHouseKeeper.cpp | 255 +++++++++++++ .../Public/PythonHouseKeeper.h | 340 +++--------------- .../UnrealEnginePython.Build.cs | 3 - 3 files changed, 309 insertions(+), 289 deletions(-) create mode 100644 Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp diff --git a/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp b/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp new file mode 100644 index 000000000..ea9d5dda3 --- /dev/null +++ b/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp @@ -0,0 +1,255 @@ +#pragma once + +#include "PythonHouseKeeper.h" + +void FUnrealEnginePythonHouseKeeper::AddReferencedObjects(FReferenceCollector& InCollector) +{ + InCollector.AddReferencedObjects(PythonTrackedObjects); +} + +FUnrealEnginePythonHouseKeeper *FUnrealEnginePythonHouseKeeper::Get() +{ + static FUnrealEnginePythonHouseKeeper *Singleton; + if (!Singleton) + { + Singleton = new FUnrealEnginePythonHouseKeeper(); + // register a new delegate for the GC +#if ENGINE_MINOR_VERSION >= 18 + FCoreUObjectDelegates::GetPostGarbageCollect().AddRaw(Singleton, &FUnrealEnginePythonHouseKeeper::RunGCDelegate); +#else + FCoreUObjectDelegates::PostGarbageCollect.AddRaw(Singleton, &FUnrealEnginePythonHouseKeeper::RunGCDelegate); +#endif + } + return Singleton; +} + +void FUnrealEnginePythonHouseKeeper::RunGCDelegate() +{ + FScopePythonGIL gil; + RunGC(); +} + +int32 FUnrealEnginePythonHouseKeeper::RunGC() +{ + int32 Garbaged = PyUObjectsGC(); + Garbaged += DelegatesGC(); + return Garbaged; +} + +bool FUnrealEnginePythonHouseKeeper::IsValidPyUObject(ue_PyUObject *PyUObject) +{ + if (!PyUObject) + return false; + + UObject *Object = PyUObject->ue_object; + FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); + if (!Tracker) + { + return false; + } + + if (!Tracker->Owner.IsValid()) + return false; + + return true; + +} + +void FUnrealEnginePythonHouseKeeper::TrackUObject(UObject *Object) +{ + FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); + if (!Tracker) + { + return; + } + if (Tracker->bPythonOwned) + return; + Tracker->bPythonOwned = true; + // when a new ue_PyUObject spawns, it has a reference counting of two + Py_DECREF(Tracker->PyUObject); + Tracker->PyUObject->owned = 1; + PythonTrackedObjects.Add(Object); +} + +void FUnrealEnginePythonHouseKeeper::UntrackUObject(UObject *Object) +{ + PythonTrackedObjects.Remove(Object); +} + +void FUnrealEnginePythonHouseKeeper::RegisterPyUObject(UObject *Object, ue_PyUObject *InPyUObject) +{ + UObjectPyMapping.Add(Object, FPythonUOjectTracker(Object, InPyUObject)); +} + +void FUnrealEnginePythonHouseKeeper::UnregisterPyUObject(UObject *Object) +{ + UObjectPyMapping.Remove(Object); +} + +ue_PyUObject *FUnrealEnginePythonHouseKeeper::GetPyUObject(UObject *Object) +{ + FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); + if (!Tracker) + { + return nullptr; + } + + if (!Tracker->Owner.IsValid(true)) + { +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Warning, TEXT("DEFREF'ing UObject at %p (refcnt: %d)"), Object, Tracker->PyUObject->ob_base.ob_refcnt); +#endif + if (!Tracker->bPythonOwned) + Py_DECREF((PyObject *)Tracker->PyUObject); + UnregisterPyUObject(Object); + return nullptr; +} + + return Tracker->PyUObject; +} + +uint32 FUnrealEnginePythonHouseKeeper::PyUObjectsGC() +{ + uint32 Garbaged = 0; + TArray BrokenList; + for (auto &UObjectPyItem : UObjectPyMapping) + { + UObject *Object = UObjectPyItem.Key; + FPythonUOjectTracker &Tracker = UObjectPyItem.Value; +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Warning, TEXT("Checking for UObject at %p"), Object); +#endif + if (!Tracker.Owner.IsValid(true)) + { +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Warning, TEXT("Removing UObject at %p (refcnt: %d)"), Object, Tracker.PyUObject->ob_base.ob_refcnt); +#endif + BrokenList.Add(Object); + Garbaged++; + } + else + { +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Error, TEXT("UObject at %p %s is in use"), Object, *Object->GetName()); +#endif +} + } + + for (UObject *Object : BrokenList) + { + FPythonUOjectTracker &Tracker = UObjectPyMapping[Object]; + if (!Tracker.bPythonOwned) + Py_DECREF((PyObject *)Tracker.PyUObject); + UnregisterPyUObject(Object); + } + + return Garbaged; + +} + + +int32 FUnrealEnginePythonHouseKeeper::DelegatesGC() +{ + int32 Garbaged = 0; +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Display, TEXT("Garbage collecting %d UObject delegates"), PyDelegatesTracker.Num()); +#endif + for (int32 i = PyDelegatesTracker.Num() - 1; i >= 0; --i) + { + FPythonDelegateTracker &Tracker = PyDelegatesTracker[i]; + if (!Tracker.Owner.IsValid(true)) + { + Tracker.Delegate->RemoveFromRoot(); + PyDelegatesTracker.RemoveAt(i); + Garbaged++; + } + + } + +#if defined(UEPY_MEMORY_DEBUG) + UE_LOG(LogPython, Display, TEXT("Garbage collecting %d Slate delegates"), PySlateDelegatesTracker.Num()); +#endif + + for (int32 i = PySlateDelegatesTracker.Num() - 1; i >= 0; --i) + { + FPythonSWidgetDelegateTracker &Tracker = PySlateDelegatesTracker[i]; + if (!Tracker.Owner.IsValid()) + { + PySlateDelegatesTracker.RemoveAt(i); + Garbaged++; + } + + } + return Garbaged; + } + +UPythonDelegate *FUnrealEnginePythonHouseKeeper::FindDelegate(UObject *Owner, PyObject *PyCallable) +{ + for (int32 i = PyDelegatesTracker.Num() - 1; i >= 0; --i) + { + FPythonDelegateTracker &Tracker = PyDelegatesTracker[i]; + if (Tracker.Owner.Get() == Owner && Tracker.Delegate->UsesPyCallable(PyCallable)) + return Tracker.Delegate; + } + return nullptr; +} + +UPythonDelegate *FUnrealEnginePythonHouseKeeper::NewDelegate(UObject *Owner, PyObject *PyCallable, UFunction *Signature) +{ + UPythonDelegate *Delegate = NewObject(); + + Delegate->AddToRoot(); + Delegate->SetPyCallable(PyCallable); + Delegate->SetSignature(Signature); + + FPythonDelegateTracker Tracker(Delegate, Owner); + PyDelegatesTracker.Add(Tracker); + + return Delegate; +} + +TSharedRef FUnrealEnginePythonHouseKeeper::NewSlateDelegate(TSharedRef Owner, PyObject *PyCallable) +{ + TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); + Delegate->SetPyCallable(PyCallable); + + FPythonSWidgetDelegateTracker Tracker(Delegate, Owner); + PySlateDelegatesTracker.Add(Tracker); + + return Delegate; +} + +TSharedRef FUnrealEnginePythonHouseKeeper::NewDeferredSlateDelegate(PyObject *PyCallable) +{ + TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); + Delegate->SetPyCallable(PyCallable); + + return Delegate; +} + +TSharedRef FUnrealEnginePythonHouseKeeper::NewPythonSmartDelegate(PyObject *PyCallable) +{ + TSharedRef Delegate = MakeShareable(new FPythonSmartDelegate()); + Delegate->SetPyCallable(PyCallable); + + PyStaticSmartDelegatesTracker.Add(Delegate); + + return Delegate; +} + +void FUnrealEnginePythonHouseKeeper::TrackDeferredSlateDelegate(TSharedRef Delegate, TSharedRef Owner) +{ + FPythonSWidgetDelegateTracker Tracker(Delegate, Owner); + PySlateDelegatesTracker.Add(Tracker); +} + +TSharedRef FUnrealEnginePythonHouseKeeper::NewStaticSlateDelegate(PyObject *PyCallable) +{ + TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); + Delegate->SetPyCallable(PyCallable); + + PyStaticSlateDelegatesTracker.Add(Delegate); + + return Delegate; +} + diff --git a/Source/UnrealEnginePython/Public/PythonHouseKeeper.h b/Source/UnrealEnginePython/Public/PythonHouseKeeper.h index dcde4d3a7..ccd9edb01 100644 --- a/Source/UnrealEnginePython/Public/PythonHouseKeeper.h +++ b/Source/UnrealEnginePython/Public/PythonHouseKeeper.h @@ -11,304 +11,72 @@ class FUnrealEnginePythonHouseKeeper : public FGCObject { - - struct FPythonUOjectTracker - { - FWeakObjectPtr Owner; - ue_PyUObject *PyUObject; - bool bPythonOwned; - - FPythonUOjectTracker(UObject *Object, ue_PyUObject *InPyUObject) - { - Owner = FWeakObjectPtr(Object); - PyUObject = InPyUObject; - bPythonOwned = false; - } - }; - - struct FPythonDelegateTracker - { - FWeakObjectPtr Owner; - UPythonDelegate *Delegate; - - FPythonDelegateTracker(UPythonDelegate *DelegateToTrack, UObject *DelegateOwner) : Owner(DelegateOwner), Delegate(DelegateToTrack) - { - } - - ~FPythonDelegateTracker() - { - } - }; - - - struct FPythonSWidgetDelegateTracker - { - TWeakPtr Owner; - TSharedPtr Delegate; - - FPythonSWidgetDelegateTracker(TSharedRef DelegateToTrack, TSharedRef DelegateOwner) : Owner(DelegateOwner), Delegate(DelegateToTrack) - { - } - - ~FPythonSWidgetDelegateTracker() - { - } - }; - -public: - - virtual void AddReferencedObjects(FReferenceCollector& InCollector) override - { - InCollector.AddReferencedObjects(PythonTrackedObjects); - } - - static FUnrealEnginePythonHouseKeeper *Get() - { - static FUnrealEnginePythonHouseKeeper *Singleton; - if (!Singleton) - { - Singleton = new FUnrealEnginePythonHouseKeeper(); - // register a new delegate for the GC -#if ENGINE_MINOR_VERSION >= 18 - FCoreUObjectDelegates::GetPostGarbageCollect().AddRaw(Singleton, &FUnrealEnginePythonHouseKeeper::RunGCDelegate); -#else - FCoreUObjectDelegates::PostGarbageCollect.AddRaw(Singleton, &FUnrealEnginePythonHouseKeeper::RunGCDelegate); -#endif - } - return Singleton; - } - - void RunGCDelegate() - { - FScopePythonGIL gil; - RunGC(); - } - - int32 RunGC() - { - int32 Garbaged = PyUObjectsGC(); - Garbaged += DelegatesGC(); - return Garbaged; - } - - bool IsValidPyUObject(ue_PyUObject *PyUObject) - { - if (!PyUObject) - return false; - - UObject *Object = PyUObject->ue_object; - FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); - if (!Tracker) - { - return false; - } - - if (!Tracker->Owner.IsValid()) - return false; - - return true; - - } - - void TrackUObject(UObject *Object) - { - FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); - if (!Tracker) - { - return; - } - if (Tracker->bPythonOwned) - return; - Tracker->bPythonOwned = true; - // when a new ue_PyUObject spawns, it has a reference counting of two - Py_DECREF(Tracker->PyUObject); - Tracker->PyUObject->owned = 1; - PythonTrackedObjects.Add(Object); - } - - void UntrackUObject(UObject *Object) - { - PythonTrackedObjects.Remove(Object); - } - - void RegisterPyUObject(UObject *Object, ue_PyUObject *InPyUObject) - { - UObjectPyMapping.Add(Object, FPythonUOjectTracker(Object, InPyUObject)); - } - - void UnregisterPyUObject(UObject *Object) - { - UObjectPyMapping.Remove(Object); - } - - ue_PyUObject *GetPyUObject(UObject *Object) - { - FPythonUOjectTracker *Tracker = UObjectPyMapping.Find(Object); - if (!Tracker) - { - return nullptr; - } - - if (!Tracker->Owner.IsValid(true)) - { -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Warning, TEXT("DEFREF'ing UObject at %p (refcnt: %d)"), Object, Tracker->PyUObject->ob_base.ob_refcnt); -#endif - if (!Tracker->bPythonOwned) - Py_DECREF((PyObject *)Tracker->PyUObject); - UnregisterPyUObject(Object); - return nullptr; - } - - return Tracker->PyUObject; -} - - uint32 PyUObjectsGC() - { - uint32 Garbaged = 0; - TArray BrokenList; - for (auto &UObjectPyItem : UObjectPyMapping) - { - UObject *Object = UObjectPyItem.Key; - FPythonUOjectTracker &Tracker = UObjectPyItem.Value; -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Warning, TEXT("Checking for UObject at %p"), Object); -#endif - if (!Tracker.Owner.IsValid(true)) - { -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Warning, TEXT("Removing UObject at %p (refcnt: %d)"), Object, Tracker.PyUObject->ob_base.ob_refcnt); -#endif - BrokenList.Add(Object); - Garbaged++; - } - else - { -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Error, TEXT("UObject at %p %s is in use"), Object, *Object->GetName()); -#endif - } - } - - for (UObject *Object : BrokenList) - { - FPythonUOjectTracker &Tracker = UObjectPyMapping[Object]; - if (!Tracker.bPythonOwned) - Py_DECREF((PyObject *)Tracker.PyUObject); - UnregisterPyUObject(Object); - } - - return Garbaged; - - } - - - int32 DelegatesGC() - { - int32 Garbaged = 0; -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Display, TEXT("Garbage collecting %d UObject delegates"), PyDelegatesTracker.Num()); -#endif - for (int32 i = PyDelegatesTracker.Num() - 1; i >= 0; --i) - { - FPythonDelegateTracker &Tracker = PyDelegatesTracker[i]; - if (!Tracker.Owner.IsValid(true)) - { - Tracker.Delegate->RemoveFromRoot(); - PyDelegatesTracker.RemoveAt(i); - Garbaged++; - } - - } - -#if defined(UEPY_MEMORY_DEBUG) - UE_LOG(LogPython, Display, TEXT("Garbage collecting %d Slate delegates"), PySlateDelegatesTracker.Num()); -#endif - - for (int32 i = PySlateDelegatesTracker.Num() - 1; i >= 0; --i) - { - FPythonSWidgetDelegateTracker &Tracker = PySlateDelegatesTracker[i]; - if (!Tracker.Owner.IsValid()) - { - PySlateDelegatesTracker.RemoveAt(i); - Garbaged++; - } - - } - return Garbaged; - } - - UPythonDelegate *FindDelegate(UObject *Owner, PyObject *PyCallable) + struct FPythonUOjectTracker { - for (int32 i = PyDelegatesTracker.Num() - 1; i >= 0; --i) - { - FPythonDelegateTracker &Tracker = PyDelegatesTracker[i]; - if (Tracker.Owner.Get() == Owner && Tracker.Delegate->UsesPyCallable(PyCallable)) - return Tracker.Delegate; + FWeakObjectPtr Owner; + ue_PyUObject *PyUObject; + bool bPythonOwned; + + FPythonUOjectTracker(UObject *Object, ue_PyUObject *InPyUObject) + { + Owner = FWeakObjectPtr(Object); + PyUObject = InPyUObject; + bPythonOwned = false; } - return nullptr; - } - - UPythonDelegate *NewDelegate(UObject *Owner, PyObject *PyCallable, UFunction *Signature) - { - UPythonDelegate *Delegate = NewObject(); - - Delegate->AddToRoot(); - Delegate->SetPyCallable(PyCallable); - Delegate->SetSignature(Signature); - - FPythonDelegateTracker Tracker(Delegate, Owner); - PyDelegatesTracker.Add(Tracker); + }; - return Delegate; - } - - TSharedRef NewSlateDelegate(TSharedRef Owner, PyObject *PyCallable) - { - TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); - Delegate->SetPyCallable(PyCallable); - - FPythonSWidgetDelegateTracker Tracker(Delegate, Owner); - PySlateDelegatesTracker.Add(Tracker); - - return Delegate; - } - - TSharedRef NewDeferredSlateDelegate(PyObject *PyCallable) - { - TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); - Delegate->SetPyCallable(PyCallable); - - return Delegate; - } + struct FPythonDelegateTracker + { + FWeakObjectPtr Owner; + UPythonDelegate *Delegate; - TSharedRef NewPythonSmartDelegate(PyObject *PyCallable) - { - TSharedRef Delegate = MakeShareable(new FPythonSmartDelegate()); - Delegate->SetPyCallable(PyCallable); + FPythonDelegateTracker(UPythonDelegate *DelegateToTrack, UObject *DelegateOwner) : Owner(DelegateOwner), Delegate(DelegateToTrack) + { + } - PyStaticSmartDelegatesTracker.Add(Delegate); + ~FPythonDelegateTracker() + { + } + }; - return Delegate; - } + struct FPythonSWidgetDelegateTracker + { + TWeakPtr Owner; + TSharedPtr Delegate; - void TrackDeferredSlateDelegate(TSharedRef Delegate, TSharedRef Owner) - { - FPythonSWidgetDelegateTracker Tracker(Delegate, Owner); - PySlateDelegatesTracker.Add(Tracker); - } + FPythonSWidgetDelegateTracker(TSharedRef DelegateToTrack, TSharedRef DelegateOwner) : Owner(DelegateOwner), Delegate(DelegateToTrack) + { + } - TSharedRef NewStaticSlateDelegate(PyObject *PyCallable) - { - TSharedRef Delegate = MakeShareable(new FPythonSlateDelegate()); - Delegate->SetPyCallable(PyCallable); + ~FPythonSWidgetDelegateTracker() + { + } + }; - PyStaticSlateDelegatesTracker.Add(Delegate); +public: - return Delegate; - } + virtual void AddReferencedObjects(FReferenceCollector& InCollector) override; + static FUnrealEnginePythonHouseKeeper *Get(); + int32 RunGC(); + bool IsValidPyUObject(ue_PyUObject *PyUObject); + void TrackUObject(UObject *Object); + void UntrackUObject(UObject *Object); + void RegisterPyUObject(UObject *Object, ue_PyUObject *InPyUObject); + void UnregisterPyUObject(UObject *Object); + ue_PyUObject *GetPyUObject(UObject *Object); + UPythonDelegate *FindDelegate(UObject *Owner, PyObject *PyCallable); + UPythonDelegate *NewDelegate(UObject *Owner, PyObject *PyCallable, UFunction *Signature); + TSharedRef NewSlateDelegate(TSharedRef Owner, PyObject *PyCallable); + TSharedRef NewDeferredSlateDelegate(PyObject *PyCallable); + TSharedRef NewPythonSmartDelegate(PyObject *PyCallable); + void TrackDeferredSlateDelegate(TSharedRef Delegate, TSharedRef Owner); + TSharedRef NewStaticSlateDelegate(PyObject *PyCallable); private: + void RunGCDelegate(); + uint32 PyUObjectsGC(); + int32 DelegatesGC(); + TMap UObjectPyMapping; TArray PyDelegatesTracker; diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 48d6618c1..51394b033 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -107,9 +107,6 @@ public UnrealEnginePython(TargetInfo Target) PrivateIncludePaths.AddRange( new string[] { -#if !UE_4_22_OR_LATER - "UnrealEnginePython/Private", -#endif // ... add other private include paths required here ... } ); From 79aef1e4c78497495f574790962dd835c269ca58 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 23 Apr 2019 16:21:14 +0200 Subject: [PATCH 136/151] fixed non editor build --- Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp index ec2be2b7c..61cf5c247 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp @@ -316,8 +316,11 @@ PyObject *py_ue_set_current_level(ue_PyUObject *self, PyObject * args) if (!level) return PyErr_Format(PyExc_Exception, "argument is not a ULevel"); +#if WITH_EDITOR + if (world->SetCurrentLevel(level)) Py_RETURN_TRUE; +#endif Py_RETURN_FALSE; } From 62016f5eaa0d7f8481d7943b4c15aa1b119fee37 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 23 Apr 2019 16:23:45 +0200 Subject: [PATCH 137/151] fix for 4.22 --- Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp index 61cf5c247..19a31299b 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyWorld.cpp @@ -316,7 +316,7 @@ PyObject *py_ue_set_current_level(ue_PyUObject *self, PyObject * args) if (!level) return PyErr_Format(PyExc_Exception, "argument is not a ULevel"); -#if WITH_EDITOR +#if WITH_EDITOR || ENGINE_MINOR_VERSION < 22 if (world->SetCurrentLevel(level)) Py_RETURN_TRUE; From 76ae4b11bfd1cf46db0b191657c0ec2263b12741 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 26 Apr 2019 18:02:14 +0200 Subject: [PATCH 138/151] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46264da12..17e845c1c 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Once the plugin is installed and enabled, you get access to the 'PythonConsole' All of the exposed engine features are under the 'unreal_engine' virtual module (it is completely coded in c into the plugin, so do not expect to run 'import unreal_engine' from a standard python shell) -The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.20 and 4.21 +The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.20, 4.21 and 4.22 We support official python.org releases as well as IntelPython and Anaconda distributions. From 2b92282224328c06d81ca2635eab605a5b54d19c Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 8 May 2019 10:14:01 +0200 Subject: [PATCH 139/151] added 4.22 to automatic build system --- tools/release_win64.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/release_win64.py b/tools/release_win64.py index bee239f42..4ea5beb89 100644 --- a/tools/release_win64.py +++ b/tools/release_win64.py @@ -5,7 +5,7 @@ import shutil import zipfile -UE_VERSIONS = ['4.15', '4.16', '4.17', '4.18', '4.19', '4.20', '4.21'] +UE_VERSIONS = ['4.17', '4.18', '4.19', '4.20', '4.21', '4.22'] PYTHON_VERSIONS = ["C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Python27"] MSBUILD = 'C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe' UE_PATH = 'C:/Program Files/Epic Games' From 282eaa5f7730f96541cc706b05952a8bf814e92c Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 8 May 2019 11:25:28 +0200 Subject: [PATCH 140/151] start from 4.20 for automatic builds --- tools/release_win64.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/release_win64.py b/tools/release_win64.py index 4ea5beb89..057800496 100644 --- a/tools/release_win64.py +++ b/tools/release_win64.py @@ -5,7 +5,7 @@ import shutil import zipfile -UE_VERSIONS = ['4.17', '4.18', '4.19', '4.20', '4.21', '4.22'] +UE_VERSIONS = ['4.20', '4.21', '4.22'] PYTHON_VERSIONS = ["C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Python27"] MSBUILD = 'C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe' UE_PATH = 'C:/Program Files/Epic Games' From 6a43ea4f250a39f9ad1686dfd90770d9ae4ea8f3 Mon Sep 17 00:00:00 2001 From: Elvis Dowson Date: Tue, 4 Jun 2019 11:58:03 +0400 Subject: [PATCH 141/151] .gitignore: Ignore Intermediate folder. Signed-off-by: Elvis Dowson --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a8f0b03d6..e43464f53 100644 --- a/.gitignore +++ b/.gitignore @@ -89,6 +89,7 @@ ENV/ .ropeproject Binaries/ +Intermediate/ python35/ python27/ *.un~ From 02dd03dfd26f72d3d6252febff1d79bdb037cf97 Mon Sep 17 00:00:00 2001 From: Elvis Dowson Date: Tue, 4 Jun 2019 12:02:04 +0400 Subject: [PATCH 142/151] PythonHouseKeeper: Fix compile error: #pragma once in main file This commit fixes the following error: PythonHouseKeeper.cpp:1:9: error: #pragma once in main file [-Werror,-Wpragma-once-outside-header] #pragma once ^ Signed-off-by: Elvis Dowson --- Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp b/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp index ea9d5dda3..dc014e386 100644 --- a/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp +++ b/Source/UnrealEnginePython/Private/PythonHouseKeeper.cpp @@ -1,4 +1,3 @@ -#pragma once #include "PythonHouseKeeper.h" From e928f718c3f6ba82998f681f58f07ebc101db93f Mon Sep 17 00:00:00 2001 From: Elvis Dowson Date: Tue, 4 Jun 2019 12:03:18 +0400 Subject: [PATCH 143/151] PythonAutomationModule: Update for UE4.22. Signed-off-by: Elvis Dowson --- Source/PythonAutomation/Public/PythonAutomationModule.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/PythonAutomation/Public/PythonAutomationModule.h b/Source/PythonAutomation/Public/PythonAutomationModule.h index c0f9c6d16..bc19a062e 100644 --- a/Source/PythonAutomation/Public/PythonAutomationModule.h +++ b/Source/PythonAutomation/Public/PythonAutomationModule.h @@ -3,7 +3,11 @@ #pragma once #include "CoreMinimal.h" +#if ENGINE_MAJOR_VERSION==4 && ENGINE_MINOR_VERSION>=22 +#include "Modules/ModuleInterface.h" +#else #include "ModuleInterface.h" +#endif class FPythonAutomationModule : public IModuleInterface { From bc4b7915125d5e78b3a65dd1df00f1fdf0ad00c3 Mon Sep 17 00:00:00 2001 From: Fabian Elmers Date: Fri, 14 Jun 2019 14:36:07 -0700 Subject: [PATCH 144/151] Adding edgraph functions graph_reconstruct_node() and graph_remove_node() --- .../Private/Blueprint/UEPyEdGraph.cpp | 121 ++++++++++++++++++ .../Private/Blueprint/UEPyEdGraph.h | 3 + .../UnrealEnginePython/Private/UEPyModule.cpp | 3 + 3 files changed, 127 insertions(+) diff --git a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.cpp b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.cpp index 6f75053ba..a3e53b7c5 100644 --- a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.cpp +++ b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.cpp @@ -381,6 +381,127 @@ PyObject *py_ue_graph_add_node(ue_PyUObject * self, PyObject * args) Py_RETURN_UOBJECT(node); } +PyObject *py_ue_graph_remove_node(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + PyObject *py_node_class; + int x = 0; + int y = 0; + + char *metadata = nullptr; + PyObject *py_data = nullptr; + + if (!PyArg_ParseTuple(args, "O|iisO:graph_remove_node", &py_node_class, &x, &y, &metadata, &py_data)) + { + return nullptr; + } + + UEdGraph *graph = ue_py_check_type(self); + if (!graph) + return PyErr_Format(PyExc_Exception, "uobject is not a UEdGraph"); + + UObject *u_obj = ue_py_check_type(py_node_class); + if (!u_obj) + return PyErr_Format(PyExc_Exception, "argument is not a UObject"); + + UEdGraphNode *node = nullptr; + + if (UClass *u_class = Cast(u_obj)) + { + if (!u_class->IsChildOf()) + { + return PyErr_Format(PyExc_Exception, "argument is not a child of UEdGraphNode"); + } + node = NewObject(graph, u_class); + node->PostLoad(); + } + else + { + node = Cast(u_obj); + if (node) + { + if (node->GetOuter() != graph) + + node->Rename(*node->GetName(), graph); + } + } + + if (!node) + return PyErr_Format(PyExc_Exception, "argument is not a supported type"); + + graph->RemoveNode(node); + + if (UBlueprint *bp = Cast(node->GetGraph()->GetOuter())) + { + FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(bp); + } + + Py_RETURN_NONE; +} + +PyObject *py_ue_graph_reconstruct_node(ue_PyUObject * self, PyObject * args) +{ + + ue_py_check(self); + + PyObject *py_node_class; + int x = 0; + int y = 0; + + char *metadata = nullptr; + PyObject *py_data = nullptr; + + if (!PyArg_ParseTuple(args, "O|iisO:graph_reconstruct_node", &py_node_class, &x, &y, &metadata, &py_data)) + { + return nullptr; + } + + UEdGraph *graph = ue_py_check_type(self); + if (!graph) + return PyErr_Format(PyExc_Exception, "uobject is not a UEdGraph"); + + UObject *u_obj = ue_py_check_type(py_node_class); + if (!u_obj) + return PyErr_Format(PyExc_Exception, "argument is not a UObject"); + + UEdGraphNode *node = nullptr; + + if (UClass *u_class = Cast(u_obj)) + { + if (!u_class->IsChildOf()) + { + return PyErr_Format(PyExc_Exception, "argument is not a child of UEdGraphNode"); + } + node = NewObject(graph, u_class); + node->PostLoad(); + } + else + { + node = Cast(u_obj); + if (node) + { + if (node->GetOuter() != graph) + + node->Rename(*node->GetName(), graph); + } + } + + if (!node) + return PyErr_Format(PyExc_Exception, "argument is not a supported type"); + + //graph->RemoveNode(node); + node->ReconstructNode(); + + if (UBlueprint *bp = Cast(node->GetGraph()->GetOuter())) + { + FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(bp); + } + + Py_RETURN_NONE; +} + PyObject *py_ue_graph_add_node_dynamic_cast(ue_PyUObject * self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.h b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.h index 03061426b..e0fd0fe69 100644 --- a/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.h +++ b/Source/UnrealEnginePython/Private/Blueprint/UEPyEdGraph.h @@ -16,6 +16,9 @@ PyObject *py_ue_graph_add_node(ue_PyUObject *, PyObject *); PyObject *py_ue_graph_add_node_dynamic_cast(ue_PyUObject *, PyObject *); PyObject *py_ue_graph_add_node_event(ue_PyUObject *, PyObject *); +PyObject *py_ue_graph_reconstruct_node(ue_PyUObject *, PyObject *); +PyObject *py_ue_graph_remove_node(ue_PyUObject *, PyObject *); + PyObject *py_ue_graph_get_good_place_for_new_node(ue_PyUObject *, PyObject *); PyObject *py_ue_node_pins(ue_PyUObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 993828a86..66aab749b 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -664,6 +664,9 @@ static PyMethodDef ue_PyUObject_methods[] = { { "graph_add_node_event", (PyCFunction)py_ue_graph_add_node_event, METH_VARARGS, "" }, { "graph_get_good_place_for_new_node", (PyCFunction)py_ue_graph_get_good_place_for_new_node, METH_VARARGS, "" }, + { "graph_reconstruct_node", (PyCFunction)py_ue_graph_reconstruct_node, METH_VARARGS, "" }, + { "graph_remove_node", (PyCFunction)py_ue_graph_remove_node, METH_VARARGS, "" }, + { "node_pins", (PyCFunction)py_ue_node_pins, METH_VARARGS, "" }, { "node_get_title", (PyCFunction)py_ue_node_get_title, METH_VARARGS, "" }, { "node_find_pin", (PyCFunction)py_ue_node_find_pin, METH_VARARGS, "" }, From 15f9eea0caddaa0d8237e260de9f63d039282fbc Mon Sep 17 00:00:00 2001 From: Michael Chapman Date: Sun, 30 Jun 2019 01:51:37 +1000 Subject: [PATCH 145/151] Add remove_component_from_blueprint Add support for removing components from blueprints to compliment existing add component functionality --- .../UnrealEnginePython/Private/UEPyEditor.cpp | 31 +++++++++++++++++++ .../UnrealEnginePython/Private/UEPyEditor.h | 1 + .../UnrealEnginePython/Private/UEPyModule.cpp | 1 + 3 files changed, 33 insertions(+) diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.cpp b/Source/UnrealEnginePython/Private/UEPyEditor.cpp index e994cf121..1b3df7bca 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.cpp +++ b/Source/UnrealEnginePython/Private/UEPyEditor.cpp @@ -1473,6 +1473,37 @@ PyObject *py_unreal_engine_get_blueprint_components(PyObject * self, PyObject * } +PyObject *py_unreal_engine_remove_component_from_blueprint(PyObject *self, PyObject *args) +{ + PyObject *py_blueprint; + char *name; + char *parentName = nullptr; + + if (!PyArg_ParseTuple(args, "Os|s:remove_component_from_blueprint", &py_blueprint, &name, &parentName)) + { + return NULL; + } + + if (!ue_is_pyuobject(py_blueprint)) + { + return PyErr_Format(PyExc_Exception, "argument is not a UObject"); + } + + ue_PyUObject *py_obj = (ue_PyUObject *)py_blueprint; + if (!py_obj->ue_object->IsA()) + return PyErr_Format(PyExc_Exception, "uobject is not a UBlueprint"); + UBlueprint *bp = (UBlueprint *)py_obj->ue_object; + + bp->Modify(); + USCS_Node *ComponentNode = bp->SimpleConstructionScript->FindSCSNode(UTF8_TO_TCHAR(name)); + if (ComponentNode) + { + bp->SimpleConstructionScript->RemoveNode(ComponentNode); + } + + Py_RETURN_NONE; +} + PyObject *py_unreal_engine_add_component_to_blueprint(PyObject * self, PyObject * args) { diff --git a/Source/UnrealEnginePython/Private/UEPyEditor.h b/Source/UnrealEnginePython/Private/UEPyEditor.h index 788a76ad3..31c8028e1 100644 --- a/Source/UnrealEnginePython/Private/UEPyEditor.h +++ b/Source/UnrealEnginePython/Private/UEPyEditor.h @@ -52,6 +52,7 @@ PyObject *py_unreal_engine_reload_blueprint(PyObject *, PyObject *); PyObject *py_unreal_engine_replace_blueprint(PyObject *, PyObject *); PyObject *py_unreal_engine_create_blueprint_from_actor(PyObject *, PyObject *); PyObject *py_unreal_engine_add_component_to_blueprint(PyObject *, PyObject *); +PyObject *py_unreal_engine_remove_component_from_blueprint(PyObject *, PyObject *); PyObject *py_unreal_engine_blueprint_add_member_variable(PyObject *, PyObject *); PyObject *py_unreal_engine_blueprint_add_new_timeline(PyObject *, PyObject *); diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index 993828a86..ed7a1d4b8 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -389,6 +389,7 @@ static PyMethodDef unreal_engine_methods[] = { { "blueprint_get_all_graphs", py_unreal_engine_blueprint_get_all_graphs, METH_VARARGS, "" }, { "blueprint_mark_as_structurally_modified", py_unreal_engine_blueprint_mark_as_structurally_modified, METH_VARARGS, "" }, { "add_component_to_blueprint", py_unreal_engine_add_component_to_blueprint, METH_VARARGS, "" }, + { "remove_component_from_blueprint", py_unreal_engine_remove_component_from_blueprint, METH_VARARGS, "" }, { "get_blueprint_components", py_unreal_engine_get_blueprint_components, METH_VARARGS, "" }, { "create_material_instance", py_unreal_engine_create_material_instance, METH_VARARGS, "" }, { "message_dialog_open", py_unreal_engine_message_dialog_open, METH_VARARGS, "" }, From 7b33998d15fb77a386b21b3d219ac7f0efe7b88e Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Mon, 9 Sep 2019 07:46:55 +0200 Subject: [PATCH 146/151] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 17e845c1c..ee231ff61 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Once the plugin is installed and enabled, you get access to the 'PythonConsole' All of the exposed engine features are under the 'unreal_engine' virtual module (it is completely coded in c into the plugin, so do not expect to run 'import unreal_engine' from a standard python shell) -The currently supported Unreal Engine versions are 4.12, 4.13, 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.20, 4.21 and 4.22 +The minimal supported Unreal Engine version is 4.12, while the latest is 4.23 We support official python.org releases as well as IntelPython and Anaconda distributions. From 11d550b62272844b8dcd28c9bfe5ddd92ff20ab4 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 10 Sep 2019 19:33:39 +0200 Subject: [PATCH 147/151] first round of 4.23 patches --- .../Private/Slate/UEPyFMenuBuilder.cpp | 76 +-- .../UnrealEnginePython/Private/UEPyModule.cpp | 559 +++++++++--------- .../Private/UEPySubclassing.cpp | 9 + .../Private/UObject/UEPyAnimSequence.cpp | 2 + .../Private/UObject/UEPyFoliage.cpp | 17 +- .../Private/UObject/UEPyLandscape.cpp | 33 +- .../Private/UObject/UEPyMaterial.cpp | 4 + .../Private/Wrappers/UEPyESlateEnums.cpp | 4 + .../Private/Wrappers/UEPyFFoliageInstance.cpp | 80 +-- .../UnrealEnginePython.Build.cs | 2 +- 10 files changed, 432 insertions(+), 354 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp b/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp index 3157ec4f0..3e0b978ed 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPyFMenuBuilder.cpp @@ -2,10 +2,10 @@ #include "Wrappers/UEPyESlateEnums.h" -static PyObject *py_ue_fmenu_builder_begin_section(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_begin_section(ue_PyFMenuBuilder* self, PyObject* args) { - char *name; - char *text; + char* name; + char* text; if (!PyArg_ParseTuple(args, "ss:begin_section", &name, &text)) return nullptr; @@ -14,27 +14,31 @@ static PyObject *py_ue_fmenu_builder_begin_section(ue_PyFMenuBuilder *self, PyOb Py_RETURN_NONE; } -static PyObject *py_ue_fmenu_builder_end_section(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_end_section(ue_PyFMenuBuilder* self, PyObject* args) { self->menu_builder.EndSection(); Py_RETURN_NONE; } -static PyObject *py_ue_fmenu_builder_make_widget(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_make_widget(ue_PyFMenuBuilder* self, PyObject* args) { - ue_PySWidget *ret = (ue_PySWidget *)PyObject_New(ue_PySWidget, &ue_PySWidgetType); + ue_PySWidget* ret = (ue_PySWidget*)PyObject_New(ue_PySWidget, &ue_PySWidgetType); new (&ret->Widget) TSharedRef(self->menu_builder.MakeWidget()); - return (PyObject *)ret; + return (PyObject*)ret; } -static PyObject *py_ue_fmenu_builder_add_menu_entry(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_add_menu_entry(ue_PyFMenuBuilder* self, PyObject* args) { - char *label; - char *tooltip; - PyObject *py_callable; - PyObject *py_obj = nullptr; + char* label; + char* tooltip; + PyObject* py_callable; + PyObject* py_obj = nullptr; +#if ENGINE_MINOR_VERSION >= 23 + int ui_action_type = (int)EUserInterfaceActionType::Button; +#else int ui_action_type = EUserInterfaceActionType::Button; +#endif if (!PyArg_ParseTuple(args, "ssO|Oi:add_menu_entry", &label, &tooltip, &py_callable, &py_obj, &ui_action_type)) return nullptr; @@ -58,17 +62,21 @@ static PyObject *py_ue_fmenu_builder_add_menu_entry(ue_PyFMenuBuilder *self, PyO } self->menu_builder.AddMenuEntry(FText::FromString(UTF8_TO_TCHAR(label)), FText::FromString(UTF8_TO_TCHAR(tooltip)), FSlateIcon(), FUIAction(handler), NAME_None, +#if ENGINE_MINOR_VERSION >= 23 + (EUserInterfaceActionType)ui_action_type); +#else (EUserInterfaceActionType::Type)ui_action_type); +#endif Py_RETURN_NONE; } -static PyObject *py_ue_fmenu_builder_add_sub_menu(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_add_sub_menu(ue_PyFMenuBuilder* self, PyObject* args) { - char *label; - char *tooltip; - PyObject *py_callable; - PyObject *py_bool = nullptr; + char* label; + char* tooltip; + PyObject* py_callable; + PyObject* py_bool = nullptr; if (!PyArg_ParseTuple(args, "ssO|O:add_sub_menu", &label, &tooltip, &py_callable, &py_bool)) return nullptr; @@ -77,7 +85,7 @@ static PyObject *py_ue_fmenu_builder_add_sub_menu(ue_PyFMenuBuilder *self, PyObj return PyErr_Format(PyExc_Exception, "argument is not callable"); } - + TSharedRef py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewStaticSlateDelegate(py_callable); FNewMenuDelegate menu_delegate; @@ -89,9 +97,9 @@ static PyObject *py_ue_fmenu_builder_add_sub_menu(ue_PyFMenuBuilder *self, PyObj Py_RETURN_NONE; } -static PyObject *py_ue_fmenu_builder_add_menu_separator(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_add_menu_separator(ue_PyFMenuBuilder* self, PyObject* args) { - char *name = nullptr; + char* name = nullptr; if (!PyArg_ParseTuple(args, "|s:add_menu_separator", &name)) return nullptr; @@ -107,9 +115,9 @@ static PyObject *py_ue_fmenu_builder_add_menu_separator(ue_PyFMenuBuilder *self, } #if WITH_EDITOR -static PyObject *py_ue_fmenu_builder_add_asset_actions(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_add_asset_actions(ue_PyFMenuBuilder* self, PyObject* args) { - PyObject *py_assets; + PyObject* py_assets; if (!PyArg_ParseTuple(args, "O:add_asset_actions", &py_assets)) return nullptr; @@ -120,10 +128,10 @@ static PyObject *py_ue_fmenu_builder_add_asset_actions(ue_PyFMenuBuilder *self, return PyErr_Format(PyExc_Exception, "argument is not iterable"); } - TArray u_objects; - while (PyObject *item = PyIter_Next(py_assets)) + TArray u_objects; + while (PyObject * item = PyIter_Next(py_assets)) { - UObject *u_object = ue_py_check_type(item); + UObject* u_object = ue_py_check_type(item); if (u_object) { u_objects.Add(u_object); @@ -142,7 +150,7 @@ static PyObject *py_ue_fmenu_builder_add_asset_actions(ue_PyFMenuBuilder *self, } #endif -static PyObject *py_ue_fmenu_builder_add_search_widget(ue_PyFMenuBuilder *self, PyObject * args) +static PyObject* py_ue_fmenu_builder_add_search_widget(ue_PyFMenuBuilder* self, PyObject* args) { self->menu_builder.AddSearchWidget(); @@ -164,13 +172,13 @@ static PyMethodDef ue_PyFMenuBuilder_methods[] = { }; -static PyObject *ue_PyFMenuBuilder_str(ue_PyFMenuBuilder *self) +static PyObject* ue_PyFMenuBuilder_str(ue_PyFMenuBuilder* self) { return PyUnicode_FromFormat("", &self->menu_builder); } -static void ue_py_fmenu_builder_dealloc(ue_PyFMenuBuilder *self) +static void ue_py_fmenu_builder_dealloc(ue_PyFMenuBuilder* self) { #if PY_MAJOR_VERSION < 3 self->ob_type->tp_free((PyObject*)self); @@ -210,14 +218,14 @@ static PyTypeObject ue_PyFMenuBuilderType = { ue_PyFMenuBuilder_methods, /* tp_methods */ }; -static int ue_py_fmenu_builder_init(ue_PyFMenuBuilder *self, PyObject *args, PyObject *kwargs) +static int ue_py_fmenu_builder_init(ue_PyFMenuBuilder* self, PyObject* args, PyObject* kwargs) { new(&self->menu_builder) FMenuBuilder(true, nullptr); return 0; } -void ue_python_init_fmenu_builder(PyObject *ue_module) +void ue_python_init_fmenu_builder(PyObject* ue_module) { ue_PyFMenuBuilderType.tp_new = PyType_GenericNew; @@ -227,12 +235,12 @@ void ue_python_init_fmenu_builder(PyObject *ue_module) return; Py_INCREF(&ue_PyFMenuBuilderType); - PyModule_AddObject(ue_module, "FMenuBuilder", (PyObject *)&ue_PyFMenuBuilderType); + PyModule_AddObject(ue_module, "FMenuBuilder", (PyObject*)& ue_PyFMenuBuilderType); } -PyObject *py_ue_new_fmenu_builder(FMenuBuilder menu_builder) +PyObject* py_ue_new_fmenu_builder(FMenuBuilder menu_builder) { - ue_PyFMenuBuilder *ret = (ue_PyFMenuBuilder *)PyObject_New(ue_PyFMenuBuilder, &ue_PyFMenuBuilderType); + ue_PyFMenuBuilder* ret = (ue_PyFMenuBuilder*)PyObject_New(ue_PyFMenuBuilder, &ue_PyFMenuBuilderType); new(&ret->menu_builder) FMenuBuilder(menu_builder); - return (PyObject *)ret; + return (PyObject*)ret; } diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index e02525792..b725ae7f0 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -137,7 +137,7 @@ static PyModuleDef unreal_engine_module = { -1, NULL, }; -static PyObject *init_unreal_engine(void); +static PyObject* init_unreal_engine(void); @@ -148,21 +148,21 @@ void init_unreal_engine_builtin() #endif -static PyObject *py_unreal_engine_py_gc(PyObject * self, PyObject * args) +static PyObject* py_unreal_engine_py_gc(PyObject* self, PyObject* args) { int32 Garbaged = FUnrealEnginePythonHouseKeeper::Get()->RunGC(); return PyLong_FromLong(Garbaged); } -static PyObject *py_unreal_engine_exec(PyObject * self, PyObject * args) +static PyObject* py_unreal_engine_exec(PyObject* self, PyObject* args) { - char *filename = nullptr; + char* filename = nullptr; if (!PyArg_ParseTuple(args, "s:exec", &filename)) { return NULL; } - FUnrealEnginePythonModule &PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); + FUnrealEnginePythonModule& PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); Py_BEGIN_ALLOW_THREADS; PythonModule.RunFile(filename); Py_END_ALLOW_THREADS; @@ -171,14 +171,14 @@ static PyObject *py_unreal_engine_exec(PyObject * self, PyObject * args) #if PLATFORM_MAC -static PyObject *py_unreal_engine_exec_in_main_thread(PyObject * self, PyObject * args) +static PyObject* py_unreal_engine_exec_in_main_thread(PyObject* self, PyObject* args) { - char *filename = nullptr; + char* filename = nullptr; if (!PyArg_ParseTuple(args, "s:exec_in_main_thread", &filename)) { return NULL; } - FUnrealEnginePythonModule &PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); + FUnrealEnginePythonModule& PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); Py_BEGIN_ALLOW_THREADS; PythonModule.RunFileInMainThread(filename); Py_END_ALLOW_THREADS; @@ -186,7 +186,7 @@ static PyObject *py_unreal_engine_exec_in_main_thread(PyObject * self, PyObject } #endif -static PyObject *py_ue_get_py_proxy(ue_PyUObject *self, PyObject * args) +static PyObject* py_ue_get_py_proxy(ue_PyUObject* self, PyObject* args) { ue_py_check(self); @@ -194,13 +194,13 @@ static PyObject *py_ue_get_py_proxy(ue_PyUObject *self, PyObject * args) if (self->py_proxy) { Py_INCREF(self->py_proxy); - return (PyObject *)self->py_proxy; + return (PyObject*)self->py_proxy; } Py_RETURN_NONE; } -static PyObject *py_unreal_engine_shutdown(PyObject *self, PyObject * args) +static PyObject* py_unreal_engine_shutdown(PyObject* self, PyObject* args) { GIsRequestingExit = true; @@ -208,10 +208,10 @@ static PyObject *py_unreal_engine_shutdown(PyObject *self, PyObject * args) Py_RETURN_NONE; } -static PyObject *py_unreal_engine_set_brutal_finalize(PyObject *self, PyObject * args) +static PyObject* py_unreal_engine_set_brutal_finalize(PyObject* self, PyObject* args) { - PyObject *py_bool = nullptr; + PyObject* py_bool = nullptr; if (!PyArg_ParseTuple(args, "|O:set_brutal_finalize", &py_bool)) { return nullptr; @@ -219,7 +219,7 @@ static PyObject *py_unreal_engine_set_brutal_finalize(PyObject *self, PyObject * bool bBrutalFinalize = !py_bool || PyObject_IsTrue(py_bool); - FUnrealEnginePythonModule &PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); + FUnrealEnginePythonModule& PythonModule = FModuleManager::GetModuleChecked("UnrealEnginePython"); PythonModule.BrutalFinalize = bBrutalFinalize; Py_RETURN_NONE; } @@ -757,7 +757,7 @@ static PyMethodDef ue_PyUObject_methods[] = { { "vlog_cylinder", (PyCFunction)py_ue_vlog_cylinder, METH_VARARGS, "" }, // StaticMesh - { "get_static_mesh_bounds", (PyCFunction)py_ue_static_mesh_get_bounds, METH_VARARGS, "" }, + { "get_static_mesh_bounds", (PyCFunction)py_ue_static_mesh_get_bounds, METH_VARARGS, "" }, #if WITH_EDITOR { "static_mesh_build", (PyCFunction)py_ue_static_mesh_build, METH_VARARGS, "" }, { "static_mesh_create_body_setup", (PyCFunction)py_ue_static_mesh_create_body_setup, METH_VARARGS, "" }, @@ -1181,7 +1181,7 @@ static PyMethodDef ue_PyUObject_methods[] = { // destructor -static void ue_pyobject_dealloc(ue_PyUObject *self) +static void ue_pyobject_dealloc(ue_PyUObject* self) { #if defined(UEPY_MEMORY_DEBUG) UE_LOG(LogPython, Warning, TEXT("Destroying ue_PyUObject %p mapped to UObject %p"), self, self->ue_object); @@ -1198,38 +1198,38 @@ static void ue_pyobject_dealloc(ue_PyUObject *self) Py_XDECREF(self->py_dict); - Py_TYPE(self)->tp_free((PyObject *)self); + Py_TYPE(self)->tp_free((PyObject*)self); } -static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) +static PyObject* ue_PyUObject_getattro(ue_PyUObject* self, PyObject* attr_name) { ue_py_check(self); - PyObject *ret = PyObject_GenericGetAttr((PyObject *)self, attr_name); + PyObject* ret = PyObject_GenericGetAttr((PyObject*)self, attr_name); if (!ret) { if (PyUnicodeOrString_Check(attr_name)) { - const char *attr = UEPyUnicode_AsUTF8(attr_name); + const char* attr = UEPyUnicode_AsUTF8(attr_name); // first check for property - UStruct *u_struct = nullptr; + UStruct* u_struct = nullptr; if (self->ue_object->IsA()) { - u_struct = (UStruct *)self->ue_object; + u_struct = (UStruct*)self->ue_object; } else { - u_struct = (UStruct *)self->ue_object->GetClass(); + u_struct = (UStruct*)self->ue_object->GetClass(); } - UProperty *u_property = u_struct->FindPropertyByName(FName(UTF8_TO_TCHAR(attr))); + UProperty* u_property = u_struct->FindPropertyByName(FName(UTF8_TO_TCHAR(attr))); if (u_property) { // swallow previous exception PyErr_Clear(); - return ue_py_convert_property(u_property, (uint8 *)self->ue_object, 0); + return ue_py_convert_property(u_property, (uint8*)self->ue_object, 0); } - UFunction *function = self->ue_object->FindFunction(FName(UTF8_TO_TCHAR(attr))); + UFunction* function = self->ue_object->FindFunction(FName(UTF8_TO_TCHAR(attr))); // retry wth K2_ prefix if (!function) { @@ -1242,8 +1242,8 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) { if (self->ue_object->IsA()) { - UClass *u_class = (UClass *)self->ue_object; - UObject *cdo = u_class->GetDefaultObject(); + UClass* u_class = (UClass*)self->ue_object; + UObject* cdo = u_class->GetDefaultObject(); if (cdo) { function = cdo->FindFunction(FName(UTF8_TO_TCHAR(attr))); @@ -1263,7 +1263,7 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) #if ENGINE_MINOR_VERSION >= 15 if (self->ue_object->IsA()) { - UUserDefinedEnum *u_enum = (UUserDefinedEnum *)self->ue_object; + UUserDefinedEnum* u_enum = (UUserDefinedEnum*)self->ue_object; PyErr_Clear(); FString attr_as_string = FString(UTF8_TO_TCHAR(attr)); for (auto item : u_enum->DisplayNameMap) @@ -1282,7 +1282,7 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) #endif if (self->ue_object->IsA()) { - UEnum *u_enum = (UEnum *)self->ue_object; + UEnum* u_enum = (UEnum*)self->ue_object; PyErr_Clear(); #if ENGINE_MINOR_VERSION > 15 int32 value = u_enum->GetIndexByName(FName(UTF8_TO_TCHAR(attr))); @@ -1309,25 +1309,25 @@ static PyObject *ue_PyUObject_getattro(ue_PyUObject *self, PyObject *attr_name) return ret; } -static int ue_PyUObject_setattro(ue_PyUObject *self, PyObject *attr_name, PyObject *value) +static int ue_PyUObject_setattro(ue_PyUObject* self, PyObject* attr_name, PyObject* value) { ue_py_check_int(self); // first of all check for UProperty if (PyUnicodeOrString_Check(attr_name)) { - const char *attr = UEPyUnicode_AsUTF8(attr_name); + const char* attr = UEPyUnicode_AsUTF8(attr_name); // first check for property - UStruct *u_struct = nullptr; + UStruct* u_struct = nullptr; if (self->ue_object->IsA()) { - u_struct = (UStruct *)self->ue_object; + u_struct = (UStruct*)self->ue_object; } else { - u_struct = (UStruct *)self->ue_object->GetClass(); + u_struct = (UStruct*)self->ue_object->GetClass(); } - UProperty *u_property = u_struct->FindPropertyByName(FName(UTF8_TO_TCHAR(attr))); + UProperty* u_property = u_struct->FindPropertyByName(FName(UTF8_TO_TCHAR(attr))); if (u_property) { #if WITH_EDITOR @@ -1341,9 +1341,9 @@ static int ue_PyUObject_setattro(ue_PyUObject *self, PyObject *attr_name, PyObje if (self->ue_object->HasAnyFlags(RF_ArchetypeObject | RF_ClassDefaultObject)) { - TArray Instances; + TArray Instances; self->ue_object->GetArchetypeInstances(Instances); - for (UObject *Instance : Instances) + for (UObject* Instance : Instances) { Instance->PreEditChange(u_property); if (ue_py_convert_pyobject(value, u_property, (uint8*)Instance, 0)) @@ -1372,10 +1372,10 @@ static int ue_PyUObject_setattro(ue_PyUObject *self, PyObject *attr_name, PyObje return -1; } } - return PyObject_GenericSetAttr((PyObject *)self, attr_name, value); + return PyObject_GenericSetAttr((PyObject*)self, attr_name, value); } -static PyObject *ue_PyUObject_str(ue_PyUObject *self) +static PyObject* ue_PyUObject_str(ue_PyUObject* self) { ue_py_check(self); @@ -1388,13 +1388,13 @@ static PyObject *ue_PyUObject_str(ue_PyUObject *self) #endif } -static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject *kw) +static PyObject* ue_PyUObject_call(ue_PyUObject* self, PyObject* args, PyObject* kw) { ue_py_check(self); // if it is a class, create a new object if (self->ue_object->IsA()) { - UClass *u_class = (UClass *)self->ue_object; + UClass* u_class = (UClass*)self->ue_object; if (u_class->HasAnyClassFlags(CLASS_Abstract)) { return PyErr_Format(PyExc_Exception, "abstract classes cannot be instantiated"); @@ -1403,16 +1403,16 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject { return PyErr_Format(PyExc_Exception, "you cannot use __call__ on actors, they have to be spawned"); } - PyObject *py_name = nullptr; - PyObject *py_outer = Py_None; + PyObject* py_name = nullptr; + PyObject* py_outer = Py_None; if (!PyArg_ParseTuple(args, "|OO:new_object", &py_name, &py_outer)) { return NULL; } int num_args = py_name ? 3 : 1; - PyObject *py_args = PyTuple_New(num_args); - Py_INCREF((PyObject *)self); - PyTuple_SetItem(py_args, 0, (PyObject *)self); + PyObject* py_args = PyTuple_New(num_args); + Py_INCREF((PyObject*)self); + PyTuple_SetItem(py_args, 0, (PyObject*)self); if (py_name) { Py_INCREF(py_outer); @@ -1420,7 +1420,7 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject Py_INCREF(py_name); PyTuple_SetItem(py_args, 2, py_name); } - ue_PyUObject *ret = (ue_PyUObject *)py_unreal_engine_new_object(nullptr, py_args); + ue_PyUObject* ret = (ue_PyUObject*)py_unreal_engine_new_object(nullptr, py_args); Py_DECREF(py_args); if (!ret) { @@ -1430,23 +1430,23 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject // UObject crated explicitely from python, will be managed by python... FUnrealEnginePythonHouseKeeper::Get()->TrackUObject(ret->ue_object); - return (PyObject *)ret; + return (PyObject*)ret; } // if it is a uscriptstruct, instantiate a new struct if (self->ue_object->IsA()) { - UScriptStruct *u_script_struct = (UScriptStruct *)self->ue_object; - uint8 *data = (uint8*)FMemory::Malloc(u_script_struct->GetStructureSize()); + UScriptStruct* u_script_struct = (UScriptStruct*)self->ue_object; + uint8* data = (uint8*)FMemory::Malloc(u_script_struct->GetStructureSize()); u_script_struct->InitializeStruct(data); #if WITH_EDITOR u_script_struct->InitializeDefaultValue(data); #endif if (kw) { - PyObject *struct_keys = PyObject_GetIter(kw); + PyObject* struct_keys = PyObject_GetIter(kw); for (;;) { - PyObject *key = PyIter_Next(struct_keys); + PyObject* key = PyIter_Next(struct_keys); if (!key) { if (PyErr_Occurred()) @@ -1458,9 +1458,9 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject } if (!PyUnicodeOrString_Check(key)) continue; - const char *struct_key = UEPyUnicode_AsUTF8(key); + const char* struct_key = UEPyUnicode_AsUTF8(key); - PyObject *value = PyDict_GetItem(kw, key); + PyObject* value = PyDict_GetItem(kw, key); if (!value) { if (PyErr_Occurred()) @@ -1471,7 +1471,7 @@ static PyObject *ue_PyUObject_call(ue_PyUObject *self, PyObject *args, PyObject break; } - UProperty *u_property = ue_struct_get_field_from_name(u_script_struct, (char *)struct_key); + UProperty* u_property = ue_struct_get_field_from_name(u_script_struct, (char*)struct_key); if (u_property) { if (!ue_py_convert_pyobject(value, u_property, data, 0)) @@ -1529,12 +1529,12 @@ static PyTypeObject ue_PyUObjectType = { -UClass *unreal_engine_new_uclass(char *name, UClass *outer_parent) +UClass* unreal_engine_new_uclass(char* name, UClass* outer_parent) { bool is_overwriting = false; - UObject *outer = GetTransientPackage(); - UClass *parent = UObject::StaticClass(); + UObject* outer = GetTransientPackage(); + UClass* parent = UObject::StaticClass(); if (outer_parent) { @@ -1542,7 +1542,7 @@ UClass *unreal_engine_new_uclass(char *name, UClass *outer_parent) outer = parent->GetOuter(); } - UClass *new_object = FindObject(ANY_PACKAGE, UTF8_TO_TCHAR(name)); + UClass* new_object = FindObject(ANY_PACKAGE, UTF8_TO_TCHAR(name)); if (!new_object) { new_object = NewObject(outer, UTF8_TO_TCHAR(name), RF_Public | RF_Transient | RF_MarkAsNative); @@ -1557,13 +1557,13 @@ UClass *unreal_engine_new_uclass(char *name, UClass *outer_parent) if (is_overwriting && new_object->Children) { - UField *u_field = new_object->Children; + UField* u_field = new_object->Children; while (u_field) { if (u_field->IsA()) { UE_LOG(LogPython, Warning, TEXT("removing function %s"), *u_field->GetName()); - new_object->RemoveFunctionFromFunctionMap((UFunction *)u_field); + new_object->RemoveFunctionFromFunctionMap((UFunction*)u_field); FLinkerLoad::InvalidateExport(u_field); } u_field = u_field->Next; @@ -1633,14 +1633,14 @@ UClass *unreal_engine_new_uclass(char *name, UClass *outer_parent) -int unreal_engine_py_init(ue_PyUObject *, PyObject *, PyObject *); +int unreal_engine_py_init(ue_PyUObject*, PyObject*, PyObject*); void unreal_engine_init_py_module() { #if PY_MAJOR_VERSION >= 3 - PyObject *new_unreal_engine_module = PyImport_AddModule("unreal_engine"); + PyObject * new_unreal_engine_module = PyImport_AddModule("unreal_engine"); #else - PyObject *new_unreal_engine_module = Py_InitModule3("unreal_engine", NULL, unreal_engine_py_doc); + PyObject* new_unreal_engine_module = Py_InitModule3("unreal_engine", NULL, unreal_engine_py_doc); #endif ue_PyUObjectType.tp_new = PyType_GenericNew; ue_PyUObjectType.tp_init = (initproc)unreal_engine_py_init; @@ -1650,14 +1650,14 @@ void unreal_engine_init_py_module() return; Py_INCREF(&ue_PyUObjectType); - PyModule_AddObject(new_unreal_engine_module, "UObject", (PyObject *)&ue_PyUObjectType); + PyModule_AddObject(new_unreal_engine_module, "UObject", (PyObject*)& ue_PyUObjectType); - PyObject *unreal_engine_dict = PyModule_GetDict(new_unreal_engine_module); + PyObject* unreal_engine_dict = PyModule_GetDict(new_unreal_engine_module); - PyMethodDef *unreal_engine_function; + PyMethodDef* unreal_engine_function; for (unreal_engine_function = unreal_engine_methods; unreal_engine_function->ml_name != NULL; unreal_engine_function++) { - PyObject *func = PyCFunction_New(unreal_engine_function, NULL); + PyObject* func = PyCFunction_New(unreal_engine_function, NULL); PyDict_SetItemString(unreal_engine_dict, unreal_engine_function->ml_name, func); Py_DECREF(func); } @@ -1745,9 +1745,9 @@ void unreal_engine_init_py_module() ue_python_init_ivoice_capture(new_unreal_engine_module); - ue_py_register_magic_module((char *)"unreal_engine.classes", py_ue_new_uclassesimporter); - ue_py_register_magic_module((char *)"unreal_engine.enums", py_ue_new_enumsimporter); - ue_py_register_magic_module((char *)"unreal_engine.structs", py_ue_new_ustructsimporter); + ue_py_register_magic_module((char*)"unreal_engine.classes", py_ue_new_uclassesimporter); + ue_py_register_magic_module((char*)"unreal_engine.enums", py_ue_new_enumsimporter); + ue_py_register_magic_module((char*)"unreal_engine.structs", py_ue_new_ustructsimporter); PyDict_SetItemString(unreal_engine_dict, "ENGINE_MAJOR_VERSION", PyLong_FromLong(ENGINE_MAJOR_VERSION)); @@ -1851,18 +1851,18 @@ void unreal_engine_init_py_module() // utility functions -ue_PyUObject *ue_get_python_uobject(UObject *ue_obj) +ue_PyUObject* ue_get_python_uobject(UObject* ue_obj) { if (!ue_obj) return nullptr; - ue_PyUObject *ret = FUnrealEnginePythonHouseKeeper::Get()->GetPyUObject(ue_obj); + ue_PyUObject* ret = FUnrealEnginePythonHouseKeeper::Get()->GetPyUObject(ue_obj); if (!ret) { if (!ue_obj->IsValidLowLevel() || ue_obj->IsPendingKillOrUnreachable()) return nullptr; - ue_PyUObject *ue_py_object = (ue_PyUObject *)PyObject_New(ue_PyUObject, &ue_PyUObjectType); + ue_PyUObject* ue_py_object = (ue_PyUObject*)PyObject_New(ue_PyUObject, &ue_PyUObjectType); if (!ue_py_object) { return nullptr; @@ -1884,9 +1884,9 @@ ue_PyUObject *ue_get_python_uobject(UObject *ue_obj) } -ue_PyUObject *ue_get_python_uobject_inc(UObject *ue_obj) +ue_PyUObject* ue_get_python_uobject_inc(UObject* ue_obj) { - ue_PyUObject *ret = ue_get_python_uobject(ue_obj); + ue_PyUObject* ret = ue_get_python_uobject(ue_obj); if (ret) { Py_INCREF(ret); @@ -1896,9 +1896,9 @@ ue_PyUObject *ue_get_python_uobject_inc(UObject *ue_obj) void unreal_engine_py_log_error() { - PyObject *type = NULL; - PyObject *value = NULL; - PyObject *traceback = NULL; + PyObject* type = NULL; + PyObject* value = NULL; + PyObject* traceback = NULL; PyErr_Fetch(&type, &value, &traceback); PyErr_NormalizeException(&type, &value, &traceback); @@ -1909,9 +1909,9 @@ void unreal_engine_py_log_error() return; } - char *msg = NULL; + char* msg = NULL; #if PY_MAJOR_VERSION >= 3 - PyObject *zero = PyUnicode_AsUTF8String(PyObject_Str(value)); + PyObject * zero = PyUnicode_AsUTF8String(PyObject_Str(value)); if (zero) { msg = PyBytes_AsString(zero); @@ -1934,19 +1934,19 @@ void unreal_engine_py_log_error() return; } - PyObject *traceback_module = PyImport_ImportModule("traceback"); + PyObject* traceback_module = PyImport_ImportModule("traceback"); if (!traceback_module) { PyErr_Clear(); return; } - PyObject *traceback_dict = PyModule_GetDict(traceback_module); - PyObject *format_exception = PyDict_GetItemString(traceback_dict, "format_exception"); + PyObject* traceback_dict = PyModule_GetDict(traceback_module); + PyObject* format_exception = PyDict_GetItemString(traceback_dict, "format_exception"); if (format_exception) { - PyObject *ret = PyObject_CallFunctionObjArgs(format_exception, type, value, traceback, NULL); + PyObject* ret = PyObject_CallFunctionObjArgs(format_exception, type, value, traceback, NULL); if (!ret) { PyErr_Clear(); @@ -1956,7 +1956,7 @@ void unreal_engine_py_log_error() { for (int i = 0; i < PyList_Size(ret); i++) { - PyObject *item = PyList_GetItem(ret, i); + PyObject* item = PyList_GetItem(ret, i); if (item) { UE_LOG(LogPython, Error, TEXT("%s"), UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(PyObject_Str(item)))); @@ -1973,23 +1973,23 @@ void unreal_engine_py_log_error() } // retrieve a UWorld from a generic UObject (if possible) -UWorld *ue_get_uworld(ue_PyUObject *py_obj) +UWorld* ue_get_uworld(ue_PyUObject* py_obj) { if (py_obj->ue_object->IsA()) { - return (UWorld *)py_obj->ue_object; + return (UWorld*)py_obj->ue_object; } if (py_obj->ue_object->IsA()) { - AActor *actor = (AActor *)py_obj->ue_object; + AActor* actor = (AActor*)py_obj->ue_object; return actor->GetWorld(); } if (py_obj->ue_object->IsA()) { - UActorComponent *component = (UActorComponent *)py_obj->ue_object; + UActorComponent* component = (UActorComponent*)py_obj->ue_object; return component->GetWorld(); } @@ -1997,23 +1997,23 @@ UWorld *ue_get_uworld(ue_PyUObject *py_obj) } // retrieve actor from component (if possible) -AActor *ue_get_actor(ue_PyUObject *py_obj) +AActor* ue_get_actor(ue_PyUObject* py_obj) { if (py_obj->ue_object->IsA()) { - return (AActor *)py_obj->ue_object; + return (AActor*)py_obj->ue_object; } if (py_obj->ue_object->IsA()) { - UActorComponent *tmp_component = (UActorComponent *)py_obj->ue_object; + UActorComponent* tmp_component = (UActorComponent*)py_obj->ue_object; return tmp_component->GetOwner(); } return nullptr; } // convert a property to a python object -PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) +PyObject* ue_py_convert_property(UProperty* prop, uint8* buffer, int32 index) { if (auto casted_prop = Cast(prop)) { @@ -2064,7 +2064,7 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) #if ENGINE_MINOR_VERSION >= 15 if (auto casted_prop = Cast(prop)) { - void *prop_addr = casted_prop->ContainerPtrToValuePtr(buffer, index); + void* prop_addr = casted_prop->ContainerPtrToValuePtr(buffer, index); uint64 enum_index = casted_prop->GetUnderlyingProperty()->GetUnsignedIntPropertyValue(prop_addr); return PyLong_FromUnsignedLong(enum_index); } @@ -2156,7 +2156,7 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) if (auto casted_prop = Cast(prop)) { auto value = casted_prop->GetPropertyValue_InContainer(buffer, index); - UObject *strong_obj = value.Get(); + UObject* strong_obj = value.Get(); if (strong_obj) { Py_RETURN_UOBJECT(strong_obj); @@ -2179,20 +2179,20 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) { FScriptArrayHelper_InContainer array_helper(casted_prop, buffer, index); - UProperty *array_prop = casted_prop->Inner; + UProperty* array_prop = casted_prop->Inner; // check for TArray, so we can use bytearray optimization if (auto uint8_tarray = Cast(array_prop)) { - uint8 *buf = array_helper.GetRawPtr(); - return PyByteArray_FromStringAndSize((char *)buf, array_helper.Num()); + uint8* buf = array_helper.GetRawPtr(); + return PyByteArray_FromStringAndSize((char*)buf, array_helper.Num()); } - PyObject *py_list = PyList_New(0); + PyObject* py_list = PyList_New(0); for (int i = 0; i < array_helper.Num(); i++) { - PyObject *item = ue_py_convert_property(array_prop, array_helper.GetRawPtr(i), 0); + PyObject* item = ue_py_convert_property(array_prop, array_helper.GetRawPtr(i), 0); if (!item) { Py_DECREF(py_list); @@ -2210,23 +2210,23 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) { FScriptMapHelper_InContainer map_helper(casted_prop, buffer, index); - PyObject *py_dict = PyDict_New(); + PyObject* py_dict = PyDict_New(); for (int32 i = 0; i < map_helper.Num(); i++) { if (map_helper.IsValidIndex(i)) { - uint8 *ptr = map_helper.GetPairPtr(i); + uint8* ptr = map_helper.GetPairPtr(i); - PyObject *py_key = ue_py_convert_property(map_helper.KeyProp, ptr, 0); + PyObject* py_key = ue_py_convert_property(map_helper.KeyProp, ptr, 0); if (!py_key) { Py_DECREF(py_dict); return NULL; } - PyObject *py_value = ue_py_convert_property(map_helper.ValueProp, ptr, 0); + PyObject* py_value = ue_py_convert_property(map_helper.ValueProp, ptr, 0); if (!py_value) { Py_DECREF(py_dict); @@ -2247,7 +2247,7 @@ PyObject *ue_py_convert_property(UProperty *prop, uint8 *buffer, int32 index) } // convert a python object to a property -bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, int32 index) +bool ue_py_convert_pyobject(PyObject* py_obj, UProperty* prop, uint8* buffer, int32 index) { if (PyBool_Check(py_obj)) @@ -2270,42 +2270,42 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); + PyObject* py_long = PyNumber_Long(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyLong_AsLong(py_long), index); Py_DECREF(py_long); return true; } if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); + PyObject* py_long = PyNumber_Long(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyLong_AsUnsignedLong(py_long), index); Py_DECREF(py_long); return true; } if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); + PyObject* py_long = PyNumber_Long(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyLong_AsLongLong(py_long), index); Py_DECREF(py_long); return true; } if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); + PyObject* py_long = PyNumber_Long(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyLong_AsUnsignedLongLong(py_long), index); Py_DECREF(py_long); return true; } if (auto casted_prop = Cast(prop)) { - PyObject *py_float = PyNumber_Float(py_obj); + PyObject* py_float = PyNumber_Float(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyFloat_AsDouble(py_float), index); Py_DECREF(py_float); return true; } if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); + PyObject* py_long = PyNumber_Long(py_obj); casted_prop->SetPropertyValue_InContainer(buffer, PyLong_AsUnsignedLong(py_long), index); Py_DECREF(py_long); return true; @@ -2313,8 +2313,8 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in #if ENGINE_MINOR_VERSION >= 15 if (auto casted_prop = Cast(prop)) { - PyObject *py_long = PyNumber_Long(py_obj); - void *prop_addr = casted_prop->ContainerPtrToValuePtr(buffer, index); + PyObject* py_long = PyNumber_Long(py_obj); + void* prop_addr = casted_prop->ContainerPtrToValuePtr(buffer, index); casted_prop->GetUnderlyingProperty()->SetIntPropertyValue(prop_addr, (uint64)PyLong_AsUnsignedLong(py_long)); Py_DECREF(py_long); return true; @@ -2355,7 +2355,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { Py_ssize_t pybytes_len = PyBytes_Size(py_obj); - uint8 *buf = (uint8 *)PyBytes_AsString(py_obj); + uint8* buf = (uint8*)PyBytes_AsString(py_obj); // fix array helper size @@ -2387,7 +2387,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { Py_ssize_t pybytes_len = PyByteArray_Size(py_obj); - uint8 *buf = (uint8 *)PyByteArray_AsString(py_obj); + uint8* buf = (uint8*)PyByteArray_AsString(py_obj); // fix array helper size @@ -2416,7 +2416,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { FScriptArrayHelper_InContainer helper(casted_prop, buffer, index); - UProperty *array_prop = casted_prop->Inner; + UProperty* array_prop = casted_prop->Inner; Py_ssize_t pylist_len = PyList_Size(py_obj); // fix array helper size @@ -2431,7 +2431,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in for (int i = 0; i < (int)pylist_len; i++) { - PyObject *py_item = PyList_GetItem(py_obj, i); + PyObject* py_item = PyList_GetItem(py_obj, i); if (!ue_py_convert_pyobject(py_item, array_prop, helper.GetRawPtr(i), 0)) { return false; @@ -2449,7 +2449,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { FScriptArrayHelper_InContainer helper(casted_prop, buffer, index); - UProperty *array_prop = casted_prop->Inner; + UProperty* array_prop = casted_prop->Inner; Py_ssize_t pytuple_len = PyTuple_Size(py_obj); // fix array helper size @@ -2464,7 +2464,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in for (int i = 0; i < (int)pytuple_len; i++) { - PyObject *py_item = PyTuple_GetItem(py_obj, i); + PyObject* py_item = PyTuple_GetItem(py_obj, i); if (!ue_py_convert_pyobject(py_item, array_prop, helper.GetRawPtr(i), 0)) { return false; @@ -2483,8 +2483,8 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { FScriptMapHelper_InContainer map_helper(casted_prop, buffer, index); - PyObject *py_key = nullptr; - PyObject *py_value = nullptr; + PyObject* py_key = nullptr; + PyObject* py_value = nullptr; Py_ssize_t pos = 0; map_helper.EmptyValues(); @@ -2492,7 +2492,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in { int32 hindex = map_helper.AddDefaultValue_Invalid_NeedsRehash(); - uint8 *ptr = map_helper.GetPairPtr(hindex); + uint8* ptr = map_helper.GetPairPtr(hindex); if (!ue_py_convert_pyobject(py_key, casted_prop->KeyProp, ptr, 0)) { @@ -2515,7 +2515,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in // structs - if (ue_PyFVector *py_vec = py_ue_is_fvector(py_obj)) + if (ue_PyFVector * py_vec = py_ue_is_fvector(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2528,7 +2528,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFVector2D *py_vec = py_ue_is_fvector2d(py_obj)) + if (ue_PyFVector2D * py_vec = py_ue_is_fvector2d(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2541,7 +2541,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFRotator *py_rot = py_ue_is_frotator(py_obj)) + if (ue_PyFRotator * py_rot = py_ue_is_frotator(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2554,7 +2554,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFTransform *py_transform = py_ue_is_ftransform(py_obj)) + if (ue_PyFTransform * py_transform = py_ue_is_ftransform(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2567,7 +2567,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFColor *py_color = py_ue_is_fcolor(py_obj)) + if (ue_PyFColor * py_color = py_ue_is_fcolor(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2581,7 +2581,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFLinearColor *py_color = py_ue_is_flinearcolor(py_obj)) + if (ue_PyFLinearColor * py_color = py_ue_is_flinearcolor(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2594,7 +2594,7 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (ue_PyFHitResult *py_hit = py_ue_is_fhitresult(py_obj)) + if (ue_PyFHitResult * py_hit = py_ue_is_fhitresult(py_obj)) { if (auto casted_prop = Cast(prop)) { @@ -2610,12 +2610,12 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in // generic structs if (py_ue_is_uscriptstruct(py_obj)) { - ue_PyUScriptStruct *py_u_struct = (ue_PyUScriptStruct *)py_obj; + ue_PyUScriptStruct* py_u_struct = (ue_PyUScriptStruct*)py_obj; if (auto casted_prop = Cast(prop)) { if (casted_prop->Struct == py_u_struct->u_struct) { - uint8 *dest = casted_prop->ContainerPtrToValuePtr(buffer, index); + uint8* dest = casted_prop->ContainerPtrToValuePtr(buffer, index); py_u_struct->u_struct->InitializeStruct(dest); py_u_struct->u_struct->CopyScriptStruct(dest, py_u_struct->u_struct_ptr); return true; @@ -2624,9 +2624,9 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in return false; } - if (PyObject_IsInstance(py_obj, (PyObject *)&ue_PyUObjectType)) + if (PyObject_IsInstance(py_obj, (PyObject*)& ue_PyUObjectType)) { - ue_PyUObject *ue_obj = (ue_PyUObject *)py_obj; + ue_PyUObject* ue_obj = (ue_PyUObject*)py_obj; if (ue_obj->ue_object->IsA()) { if (auto casted_prop = Cast(prop)) @@ -2739,24 +2739,24 @@ bool ue_py_convert_pyobject(PyObject *py_obj, UProperty *prop, uint8 *buffer, in // check if a python object is a wrapper to a UObject -ue_PyUObject *ue_is_pyuobject(PyObject *obj) +ue_PyUObject* ue_is_pyuobject(PyObject* obj) { - if (!PyObject_IsInstance(obj, (PyObject *)&ue_PyUObjectType)) + if (!PyObject_IsInstance(obj, (PyObject*)& ue_PyUObjectType)) return nullptr; - return (ue_PyUObject *)obj; + return (ue_PyUObject*)obj; } -void ue_bind_events_for_py_class_by_attribute(UObject *u_obj, PyObject *py_class) +void ue_bind_events_for_py_class_by_attribute(UObject* u_obj, PyObject* py_class) { // attempt to register events - PyObject *attrs = PyObject_Dir(py_class); + PyObject* attrs = PyObject_Dir(py_class); if (!attrs) return; - AActor *actor = Cast(u_obj); + AActor* actor = Cast(u_obj); if (!actor) { - UActorComponent *component = Cast(u_obj); + UActorComponent* component = Cast(u_obj); if (!component) return; actor = component->GetOwner(); @@ -2765,14 +2765,14 @@ void ue_bind_events_for_py_class_by_attribute(UObject *u_obj, PyObject *py_class Py_ssize_t len = PyList_Size(attrs); for (Py_ssize_t i = 0; i < len; i++) { - PyObject *py_attr_name = PyList_GetItem(attrs, i); + PyObject* py_attr_name = PyList_GetItem(attrs, i); if (!py_attr_name || !PyUnicodeOrString_Check(py_attr_name)) continue; - PyObject *item = PyObject_GetAttrString(py_class, UEPyUnicode_AsUTF8(py_attr_name)); + PyObject* item = PyObject_GetAttrString(py_class, UEPyUnicode_AsUTF8(py_attr_name)); if (item && PyCallable_Check(item)) { // check for ue_event signature - PyObject *event_signature = PyObject_GetAttrString(item, (char*)"ue_event"); + PyObject* event_signature = PyObject_GetAttrString(item, (char*)"ue_event"); if (event_signature) { if (PyUnicodeOrString_Check(event_signature)) @@ -2797,7 +2797,7 @@ void ue_bind_events_for_py_class_by_attribute(UObject *u_obj, PyObject *py_class else { bool found = false; - for (UActorComponent *component : actor->GetComponents()) + for (UActorComponent* component : actor->GetComponents()) { if (component->GetFName() == FName(*parts[0])) { @@ -2834,23 +2834,23 @@ void ue_bind_events_for_py_class_by_attribute(UObject *u_obj, PyObject *py_class } // automatically bind events based on class methods names -void ue_autobind_events_for_pyclass(ue_PyUObject *u_obj, PyObject *py_class) +void ue_autobind_events_for_pyclass(ue_PyUObject* u_obj, PyObject* py_class) { - PyObject *attrs = PyObject_Dir(py_class); + PyObject* attrs = PyObject_Dir(py_class); if (!attrs) return; Py_ssize_t len = PyList_Size(attrs); for (Py_ssize_t i = 0; i < len; i++) { - PyObject *py_attr_name = PyList_GetItem(attrs, i); + PyObject* py_attr_name = PyList_GetItem(attrs, i); if (!py_attr_name || !PyUnicodeOrString_Check(py_attr_name)) continue; FString attr_name = UTF8_TO_TCHAR(UEPyUnicode_AsUTF8(py_attr_name)); if (!attr_name.StartsWith("on_", ESearchCase::CaseSensitive)) continue; // check if the attr is a callable - PyObject *item = PyObject_GetAttrString(py_class, TCHAR_TO_UTF8(*attr_name)); + PyObject* item = PyObject_GetAttrString(py_class, TCHAR_TO_UTF8(*attr_name)); if (item && PyCallable_Check(item)) { TArray parts; @@ -2874,24 +2874,24 @@ void ue_autobind_events_for_pyclass(ue_PyUObject *u_obj, PyObject *py_class) Py_DECREF(attrs); } -static void py_ue_destroy_params(UFunction *u_function, uint8 *buffer) +static void py_ue_destroy_params(UFunction* u_function, uint8* buffer) { // destroy params TFieldIterator DArgs(u_function); for (; DArgs && (DArgs->PropertyFlags & CPF_Parm); ++DArgs) { - UProperty *prop = *DArgs; + UProperty* prop = *DArgs; prop->DestroyValue_InContainer(buffer); } } -PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject *args, int argn, PyObject *kwargs) +PyObject* py_ue_ufunction_call(UFunction* u_function, UObject* u_obj, PyObject* args, int argn, PyObject* kwargs) { // check for __super call if (kwargs) { - PyObject *is_super_call = PyDict_GetItemString(kwargs, (char *)"__super"); + PyObject* is_super_call = PyDict_GetItemString(kwargs, (char*)"__super"); if (is_super_call) { if (!u_function->GetSuperFunction()) @@ -2903,12 +2903,12 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * } //NOTE: u_function->PropertiesSize maps to local variable uproperties + ufunction paramaters uproperties - uint8 *buffer = (uint8 *)FMemory_Alloca(u_function->ParmsSize); + uint8* buffer = (uint8*)FMemory_Alloca(u_function->ParmsSize); FMemory::Memzero(buffer, u_function->ParmsSize); // initialize args for (TFieldIterator IArgs(u_function); IArgs && IArgs->HasAnyPropertyFlags(CPF_Parm); ++IArgs) { - UProperty *prop = *IArgs; + UProperty* prop = *IArgs; if (!prop->HasAnyPropertyFlags(CPF_ZeroConstructor)) { prop->InitializeValue_InContainer(buffer); @@ -2944,10 +2944,10 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * TFieldIterator PArgs(u_function); for (; PArgs && ((PArgs->PropertyFlags & (CPF_Parm | CPF_ReturnParm)) == CPF_Parm); ++PArgs) { - UProperty *prop = *PArgs; + UProperty* prop = *PArgs; if (argn < tuple_len) { - PyObject *py_arg = PyTuple_GetItem(args, argn); + PyObject* py_arg = PyTuple_GetItem(args, argn); if (!py_arg) { py_ue_destroy_params(u_function, buffer); @@ -2961,8 +2961,8 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * } else if (kwargs) { - char *prop_name = TCHAR_TO_UTF8(*prop->GetName()); - PyObject *dict_value = PyDict_GetItemString(kwargs, prop_name); + char* prop_name = TCHAR_TO_UTF8(*prop->GetName()); + PyObject* dict_value = PyDict_GetItemString(kwargs, prop_name); if (dict_value) { if (!ue_py_convert_pyobject(dict_value, prop, buffer, 0)) @@ -2986,13 +2986,13 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * u_obj->ProcessEvent(u_function, buffer); Py_END_ALLOW_THREADS; - PyObject *ret = nullptr; + PyObject* ret = nullptr; int has_ret_param = 0; TFieldIterator Props(u_function); for (; Props; ++Props) { - UProperty *prop = *Props; + UProperty* prop = *Props; if (prop->GetPropertyFlags() & CPF_ReturnParm) { ret = ue_py_convert_property(prop, buffer, 0); @@ -3009,7 +3009,7 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * if (has_out_params > 0) { - PyObject *multi_ret = PyTuple_New(has_out_params + has_ret_param); + PyObject* multi_ret = PyTuple_New(has_out_params + has_ret_param); if (ret) { PyTuple_SetItem(multi_ret, 0, ret); @@ -3017,13 +3017,13 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * TFieldIterator OProps(u_function); for (; OProps; ++OProps) { - UProperty *prop = *OProps; + UProperty* prop = *OProps; if (prop->HasAnyPropertyFlags(CPF_OutParm) && (prop->IsA() || prop->HasAnyPropertyFlags(CPF_ConstParm) == false)) { // skip return param as it must be always the first if (prop->GetPropertyFlags() & CPF_ReturnParm) continue; - PyObject *py_out = ue_py_convert_property(prop, buffer, 0); + PyObject* py_out = ue_py_convert_property(prop, buffer, 0); if (!py_out) { Py_DECREF(multi_ret); @@ -3049,9 +3049,9 @@ PyObject *py_ue_ufunction_call(UFunction *u_function, UObject *u_obj, PyObject * Py_RETURN_NONE; } -PyObject *ue_unbind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) +PyObject* ue_unbind_pyevent(ue_PyUObject* u_obj, FString event_name, PyObject* py_callable, bool fail_on_wrong_property) { - UProperty *u_property = u_obj->ue_object->GetClass()->FindPropertyByName(FName(*event_name)); + UProperty* u_property = u_obj->ue_object->GetClass()->FindPropertyByName(FName(*event_name)); if (!u_property) { if (fail_on_wrong_property) @@ -3061,20 +3061,29 @@ PyObject *ue_unbind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *p if (auto casted_prop = Cast(u_property)) { - UPythonDelegate *py_delegate = FUnrealEnginePythonHouseKeeper::Get()->FindDelegate(u_obj->ue_object, py_callable); - if (py_delegate != nullptr) - { - FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(u_obj->ue_object); - multiscript_delegate.Remove(py_delegate, FName("PyFakeCallable")); + UPythonDelegate* py_delegate = FUnrealEnginePythonHouseKeeper::Get()->FindDelegate(u_obj->ue_object, py_callable); + if (py_delegate != nullptr) + { +#if ENGINE_MINOR_VERSION < 23 + FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(u_obj->ue_object); +#else + FMulticastScriptDelegate multiscript_delegate = *casted_prop->GetMulticastDelegate(u_obj->ue_object); +#endif - // re-assign multicast delegate - casted_prop->SetPropertyValue_InContainer(u_obj->ue_object, multiscript_delegate); - } + multiscript_delegate.Remove(py_delegate, FName("PyFakeCallable")); + + // re-assign multicast delegate +#if ENGINE_MINOR_VERSION < 23 + casted_prop->SetPropertyValue_InContainer(u_obj->ue_object, multiscript_delegate); +#else + casted_prop->SetMulticastDelegate(u_obj->ue_object, multiscript_delegate); +#endif + } } else if (auto casted_prop_delegate = Cast(u_property)) { FScriptDelegate script_delegate = casted_prop_delegate->GetPropertyValue_InContainer(u_obj->ue_object); - script_delegate.Unbind(); + script_delegate.Unbind(); // re-assign multicast delegate casted_prop_delegate->SetPropertyValue_InContainer(u_obj->ue_object, script_delegate); @@ -3088,10 +3097,10 @@ PyObject *ue_unbind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *p Py_RETURN_NONE; } -PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_callable, bool fail_on_wrong_property) +PyObject* ue_bind_pyevent(ue_PyUObject* u_obj, FString event_name, PyObject* py_callable, bool fail_on_wrong_property) { - UProperty *u_property = u_obj->ue_object->GetClass()->FindPropertyByName(FName(*event_name)); + UProperty* u_property = u_obj->ue_object->GetClass()->FindPropertyByName(FName(*event_name)); if (!u_property) { if (fail_on_wrong_property) @@ -3101,10 +3110,14 @@ PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_ if (auto casted_prop = Cast(u_property)) { +#if ENGINE_MINOR_VERSION < 23 FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(u_obj->ue_object); +#else + FMulticastScriptDelegate multiscript_delegate = *casted_prop->GetMulticastDelegate(u_obj->ue_object); +#endif FScriptDelegate script_delegate; - UPythonDelegate *py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewDelegate(u_obj->ue_object, py_callable, casted_prop->SignatureFunction); + UPythonDelegate* py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewDelegate(u_obj->ue_object, py_callable, casted_prop->SignatureFunction); // fake UFUNCTION for bypassing checks script_delegate.BindUFunction(py_delegate, FName("PyFakeCallable")); @@ -3112,13 +3125,17 @@ PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_ multiscript_delegate.Add(script_delegate); // re-assign multicast delegate +#if ENGINE_MINOR_VERSION < 23 casted_prop->SetPropertyValue_InContainer(u_obj->ue_object, multiscript_delegate); +#else + casted_prop->SetMulticastDelegate(u_obj->ue_object, multiscript_delegate); +#endif } else if (auto casted_prop_delegate = Cast(u_property)) { FScriptDelegate script_delegate = casted_prop_delegate->GetPropertyValue_InContainer(u_obj->ue_object); - UPythonDelegate *py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewDelegate(u_obj->ue_object, py_callable, casted_prop_delegate->SignatureFunction); + UPythonDelegate* py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewDelegate(u_obj->ue_object, py_callable, casted_prop_delegate->SignatureFunction); // fake UFUNCTION for bypassing checks script_delegate.BindUFunction(py_delegate, FName("PyFakeCallable")); @@ -3134,10 +3151,10 @@ PyObject *ue_bind_pyevent(ue_PyUObject *u_obj, FString event_name, PyObject *py_ Py_RETURN_NONE; } -UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_callable, uint32 function_flags) +UFunction* unreal_engine_add_function(UClass* u_class, char* name, PyObject* py_callable, uint32 function_flags) { - UFunction *parent_function = u_class->GetSuperClass()->FindFunctionByName(UTF8_TO_TCHAR(name)); + UFunction* parent_function = u_class->GetSuperClass()->FindFunctionByName(UTF8_TO_TCHAR(name)); // if the function is not available in the parent // check for name collision if (!parent_function) @@ -3149,7 +3166,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ } } - UPythonFunction *function = NewObject(u_class, UTF8_TO_TCHAR(name), RF_Public | RF_Transient | RF_MarkAsNative); + UPythonFunction* function = NewObject(u_class, UTF8_TO_TCHAR(name), RF_Public | RF_Transient | RF_MarkAsNative); function->SetPyCallable(py_callable); #if ENGINE_MINOR_VERSION < 18 @@ -3167,34 +3184,34 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ // iterate all arguments using inspect.signature() // this is required to maintaining args order - PyObject *inspect = PyImport_ImportModule("inspect"); + PyObject* inspect = PyImport_ImportModule("inspect"); if (!inspect) { return NULL; } - PyObject *signature = PyObject_CallMethod(inspect, (char *)"signature", (char *)"O", py_callable); + PyObject* signature = PyObject_CallMethod(inspect, (char*)"signature", (char*)"O", py_callable); if (!signature) { return NULL; } - PyObject *parameters = PyObject_GetAttrString(signature, "parameters"); + PyObject* parameters = PyObject_GetAttrString(signature, "parameters"); if (!parameters) { return NULL; } - PyObject *annotations = PyObject_GetAttrString(py_callable, "__annotations__"); + PyObject* annotations = PyObject_GetAttrString(py_callable, "__annotations__"); - UField **next_property = &function->Children; - UProperty **next_property_link = &function->PropertyLink; + UField** next_property = &function->Children; + UProperty** next_property_link = &function->PropertyLink; - PyObject *parameters_keys = PyObject_GetIter(parameters); + PyObject* parameters_keys = PyObject_GetIter(parameters); // do not process args if no annotations are available while (annotations) { - PyObject *key = PyIter_Next(parameters_keys); + PyObject* key = PyIter_Next(parameters_keys); if (!key) { if (PyErr_Occurred()) @@ -3204,79 +3221,79 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ if (!PyUnicodeOrString_Check(key)) continue; - const char *p_name = UEPyUnicode_AsUTF8(key); + const char* p_name = UEPyUnicode_AsUTF8(key); - PyObject *value = PyDict_GetItem(annotations, key); + PyObject* value = PyDict_GetItem(annotations, key); if (!value) continue; - UProperty *prop = nullptr; + UProperty* prop = nullptr; if (PyType_Check(value)) { - if ((PyTypeObject *)value == &PyFloat_Type) + if ((PyTypeObject*)value == &PyFloat_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)value == &PyUnicode_Type) + else if ((PyTypeObject*)value == &PyUnicode_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)value == &PyBool_Type) + else if ((PyTypeObject*)value == &PyBool_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)value == &PyLong_Type) + else if ((PyTypeObject*)value == &PyLong_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)value == &ue_PyFVectorType) + else if ((PyTypeObject*)value == &ue_PyFVectorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)value == &ue_PyFVector2DType) + else if ((PyTypeObject*)value == &ue_PyFVector2DType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)value == &ue_PyFRotatorType) + else if ((PyTypeObject*)value == &ue_PyFRotatorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)value == &ue_PyFLinearColorType) + else if ((PyTypeObject*)value == &ue_PyFLinearColorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)value == &ue_PyFColorType) + else if ((PyTypeObject*)value == &ue_PyFColorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)value == &ue_PyFTransformType) + else if ((PyTypeObject*)value == &ue_PyFTransformType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } #if ENGINE_MINOR_VERSION > 18 - else if ((PyTypeObject *)value == &ue_PyFQuatType) + else if ((PyTypeObject*)value == &ue_PyFQuatType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } #endif - else if (PyObject_IsInstance(value, (PyObject *)&PyType_Type)) + else if (PyObject_IsInstance(value, (PyObject*)& PyType_Type)) { // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) - PyObject *type_args = PyObject_GetAttrString(value, "__args__"); + PyObject* type_args = PyObject_GetAttrString(value, "__args__"); if (!type_args) { UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); @@ -3288,8 +3305,8 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); return nullptr; } - PyObject *py_class = PyTuple_GetItem(type_args, 0); - ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + PyObject* py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject* py_obj = ue_is_pyuobject(py_class); if (!py_obj) { Py_DECREF(type_args); @@ -3302,27 +3319,27 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); return nullptr; } - UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UClassProperty* prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_class->SetMetaClass((UClass*)py_obj->ue_object); prop_class->PropertyClass = UClass::StaticClass(); prop = prop_class; Py_DECREF(type_args); } } - else if (ue_PyUObject *py_obj = ue_is_pyuobject(value)) + else if (ue_PyUObject * py_obj = ue_is_pyuobject(value)) { if (py_obj->ue_object->IsA()) { - UClass *p_u_class = (UClass *)py_obj->ue_object; - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UClass* p_u_class = (UClass*)py_obj->ue_object; + UObjectProperty* prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_base->SetPropertyClass(p_u_class); prop = prop_base; } #if ENGINE_MINOR_VERSION > 17 else if (py_obj->ue_object->IsA()) { - UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + UEnumProperty* prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty* prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); prop_enum->SetEnum((UEnum*)py_obj->ue_object); prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; @@ -3330,7 +3347,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ #endif else if (py_obj->ue_object->IsA()) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; prop = prop_struct; } @@ -3354,78 +3371,78 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ // check for return value if (annotations) { - PyObject *py_return_value = PyDict_GetItemString(annotations, "return"); + PyObject* py_return_value = PyDict_GetItemString(annotations, "return"); if (py_return_value) { UE_LOG(LogPython, Warning, TEXT("Return Value found")); - UProperty *prop = nullptr; - char *p_name = (char *) "ReturnValue"; + UProperty* prop = nullptr; + char* p_name = (char*) "ReturnValue"; if (PyType_Check(py_return_value)) { - if ((PyTypeObject *)py_return_value == &PyFloat_Type) + if ((PyTypeObject*)py_return_value == &PyFloat_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)py_return_value == &PyUnicode_Type) + else if ((PyTypeObject*)py_return_value == &PyUnicode_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)py_return_value == &PyBool_Type) + else if ((PyTypeObject*)py_return_value == &PyBool_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)py_return_value == &PyLong_Type) + else if ((PyTypeObject*)py_return_value == &PyLong_Type) { prop = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); } - else if ((PyTypeObject *)py_return_value == &ue_PyFVectorType) + else if ((PyTypeObject*)py_return_value == &ue_PyFVectorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)py_return_value == &ue_PyFVector2DType) + else if ((PyTypeObject*)py_return_value == &ue_PyFVector2DType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)py_return_value == &ue_PyFRotatorType) + else if ((PyTypeObject*)py_return_value == &ue_PyFRotatorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)py_return_value == &ue_PyFLinearColorType) + else if ((PyTypeObject*)py_return_value == &ue_PyFLinearColorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)py_return_value == &ue_PyFColorType) + else if ((PyTypeObject*)py_return_value == &ue_PyFColorType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } - else if ((PyTypeObject *)py_return_value == &ue_PyFTransformType) + else if ((PyTypeObject*)py_return_value == &ue_PyFTransformType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } #if ENGINE_MINOR_VERSION > 18 - else if ((PyTypeObject *)py_return_value == &ue_PyFQuatType) + else if ((PyTypeObject*)py_return_value == &ue_PyFQuatType) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = TBaseStructure::Get(); prop = prop_struct; } #endif - else if (PyObject_IsInstance(py_return_value, (PyObject *)&PyType_Type)) + else if (PyObject_IsInstance(py_return_value, (PyObject*)& PyType_Type)) { // Method annotation like foo:typing.Type[Pawn] produces annotations like typing.Type[Pawn], with .__args__ = (Pawn,) - PyObject *type_args = PyObject_GetAttrString(py_return_value, "__args__"); + PyObject* type_args = PyObject_GetAttrString(py_return_value, "__args__"); if (!type_args) { UE_LOG(LogPython, Error, TEXT("missing type info on %s"), UTF8_TO_TCHAR(name)); @@ -3437,8 +3454,8 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ UE_LOG(LogPython, Error, TEXT("exactly one class is allowed in type info for %s"), UTF8_TO_TCHAR(name)); return nullptr; } - PyObject *py_class = PyTuple_GetItem(type_args, 0); - ue_PyUObject *py_obj = ue_is_pyuobject(py_class); + PyObject* py_class = PyTuple_GetItem(type_args, 0); + ue_PyUObject* py_obj = ue_is_pyuobject(py_class); if (!py_obj) { Py_DECREF(type_args); @@ -3451,27 +3468,27 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ UE_LOG(LogPython, Error, TEXT("type for %s must be a UClass"), UTF8_TO_TCHAR(name)); return nullptr; } - UClassProperty *prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UClassProperty* prop_class = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_class->SetMetaClass((UClass*)py_obj->ue_object); prop_class->PropertyClass = UClass::StaticClass(); prop = prop_class; Py_DECREF(type_args); } } - else if (ue_PyUObject *py_obj = ue_is_pyuobject(py_return_value)) + else if (ue_PyUObject * py_obj = ue_is_pyuobject(py_return_value)) { if (py_obj->ue_object->IsA()) { - UClass *p_u_class = (UClass *)py_obj->ue_object; - UObjectProperty *prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UClass* p_u_class = (UClass*)py_obj->ue_object; + UObjectProperty* prop_base = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_base->SetPropertyClass(p_u_class); prop = prop_base; } #if ENGINE_MINOR_VERSION > 17 else if (py_obj->ue_object->IsA()) { - UEnumProperty *prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); - UNumericProperty *prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); + UEnumProperty* prop_enum = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UNumericProperty* prop_underlying = NewObject(prop_enum, TEXT("UnderlyingType"), RF_Public); prop_enum->SetEnum((UEnum*)py_obj->ue_object); prop_enum->AddCppProperty(prop_underlying); prop = prop_enum; @@ -3479,7 +3496,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ #endif else if (py_obj->ue_object->IsA()) { - UStructProperty *prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); + UStructProperty* prop_struct = NewObject(function, UTF8_TO_TCHAR(p_name), RF_Public); prop_struct->Struct = (UScriptStruct*)py_obj->ue_object; prop = prop_struct; } @@ -3512,11 +3529,11 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ TFieldIterator It(parent_function); while (It) { - UProperty *p = *It; + UProperty* p = *It; if (p->PropertyFlags & CPF_Parm) { UE_LOG(LogPython, Warning, TEXT("Parent PROP: %s %d/%d %d %d %d %s %p"), *p->GetName(), (int)p->PropertyFlags, (int)UFunction::GetDefaultIgnoredSignatureCompatibilityFlags(), (int)(p->PropertyFlags & ~UFunction::GetDefaultIgnoredSignatureCompatibilityFlags()), p->GetSize(), p->GetOffset_ForGC(), *p->GetClass()->GetName(), p->GetClass()); - UClassProperty *ucp = Cast(p); + UClassProperty* ucp = Cast(p); if (ucp) { UE_LOG(LogPython, Warning, TEXT("Parent UClassProperty = %p %s %p %s"), ucp->PropertyClass, *ucp->PropertyClass->GetName(), ucp->MetaClass, *ucp->MetaClass->GetName()); @@ -3528,11 +3545,11 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ TFieldIterator It2(function); while (It2) { - UProperty *p = *It2; + UProperty* p = *It2; if (p->PropertyFlags & CPF_Parm) { UE_LOG(LogPython, Warning, TEXT("Function PROP: %s %d/%d %d %d %d %s %p"), *p->GetName(), (int)p->PropertyFlags, (int)UFunction::GetDefaultIgnoredSignatureCompatibilityFlags(), (int)(p->PropertyFlags & ~UFunction::GetDefaultIgnoredSignatureCompatibilityFlags()), p->GetSize(), p->GetOffset_ForGC(), *p->GetClass()->GetName(), p->GetClass()); - UClassProperty *ucp = Cast(p); + UClassProperty* ucp = Cast(p); if (ucp) { UE_LOG(LogPython, Warning, TEXT("Function UClassProperty = %p %s %p %s"), ucp->PropertyClass, *ucp->PropertyClass->GetName(), ucp->MetaClass, *ucp->MetaClass->GetName()); @@ -3552,7 +3569,7 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ TFieldIterator props(function, EFieldIteratorFlags::ExcludeSuper); for (; props; ++props) { - UProperty *p = *props; + UProperty* p = *props; if (p->HasAnyPropertyFlags(CPF_Parm)) { function->NumParms++; @@ -3581,9 +3598,9 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ #endif #if ENGINE_MINOR_VERSION > 18 - function->SetNativeFunc((FNativeFuncPtr)&UPythonFunction::CallPythonCallable); + function->SetNativeFunc((FNativeFuncPtr)& UPythonFunction::CallPythonCallable); #else - function->SetNativeFunc((Native)&UPythonFunction::CallPythonCallable); + function->SetNativeFunc((Native)& UPythonFunction::CallPythonCallable); #endif function->Next = u_class->Children; @@ -3626,24 +3643,24 @@ UFunction *unreal_engine_add_function(UClass *u_class, char *name, PyObject *py_ return function; } -FGuid *ue_py_check_fguid(PyObject *py_obj) +FGuid* ue_py_check_fguid(PyObject* py_obj) { - ue_PyUScriptStruct *ue_py_struct = py_ue_is_uscriptstruct(py_obj); + ue_PyUScriptStruct* ue_py_struct = py_ue_is_uscriptstruct(py_obj); if (!ue_py_struct) { return nullptr; } - if (ue_py_struct->u_struct == FindObject(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid"))) + if (ue_py_struct->u_struct == FindObject(ANY_PACKAGE, UTF8_TO_TCHAR((char*)"Guid"))) { return (FGuid*)ue_py_struct->u_struct_ptr; } return nullptr; } -uint8 * do_ue_py_check_struct(PyObject *py_obj, UScriptStruct* chk_u_struct) +uint8* do_ue_py_check_struct(PyObject* py_obj, UScriptStruct* chk_u_struct) { - ue_PyUScriptStruct *ue_py_struct = py_ue_is_uscriptstruct(py_obj); + ue_PyUScriptStruct* ue_py_struct = py_ue_is_uscriptstruct(py_obj); if (!ue_py_struct) { return nullptr; @@ -3657,9 +3674,9 @@ uint8 * do_ue_py_check_struct(PyObject *py_obj, UScriptStruct* chk_u_struct) return nullptr; } -bool do_ue_py_check_childstruct(PyObject *py_obj, UScriptStruct* parent_u_struct) +bool do_ue_py_check_childstruct(PyObject* py_obj, UScriptStruct* parent_u_struct) { - ue_PyUScriptStruct *ue_py_struct = py_ue_is_uscriptstruct(py_obj); + ue_PyUScriptStruct* ue_py_struct = py_ue_is_uscriptstruct(py_obj); if (!ue_py_struct) { return false; @@ -3671,10 +3688,10 @@ bool do_ue_py_check_childstruct(PyObject *py_obj, UScriptStruct* parent_u_struct #if PY_MAJOR_VERSION >= 3 -static PyObject *init_unreal_engine() +static PyObject * init_unreal_engine() { - PyObject *new_unreal_engine_module = PyModule_Create(&unreal_engine_module); + PyObject* new_unreal_engine_module = PyModule_Create(&unreal_engine_module); if (!new_unreal_engine_module) return nullptr; diff --git a/Source/UnrealEnginePython/Private/UEPySubclassing.cpp b/Source/UnrealEnginePython/Private/UEPySubclassing.cpp index 870a62474..548a83935 100644 --- a/Source/UnrealEnginePython/Private/UEPySubclassing.cpp +++ b/Source/UnrealEnginePython/Private/UEPySubclassing.cpp @@ -346,7 +346,12 @@ int unreal_engine_py_init(ue_PyUObject *self, PyObject *args, PyObject *kwds) { if (auto casted_prop = Cast(u_property)) { +#if ENGINE_MINOR_VERSION >= 23 + FMulticastScriptDelegate multiscript_delegate = *casted_prop->GetMulticastDelegate(ObjectInitializer.GetObj()); +#else + FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(ObjectInitializer.GetObj()); +#endif FScriptDelegate script_delegate; UPythonDelegate *py_delegate = FUnrealEnginePythonHouseKeeper::Get()->NewDelegate(ObjectInitializer.GetObj(), mc_value, casted_prop->SignatureFunction); @@ -357,7 +362,11 @@ int unreal_engine_py_init(ue_PyUObject *self, PyObject *args, PyObject *kwds) multiscript_delegate.Add(script_delegate); // re-assign multicast delegate +#if ENGINE_MINOR_VERSION >= 23 + casted_prop->SetMulticastDelegate(ObjectInitializer.GetObj(), multiscript_delegate); +#else casted_prop->SetPropertyValue_InContainer(ObjectInitializer.GetObj(), multiscript_delegate); +#endif } else { diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp index 7eafe7b51..2674c0d1b 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp @@ -105,6 +105,7 @@ PyObject *py_ue_anim_extract_root_motion(ue_PyUObject * self, PyObject * args) #if WITH_EDITOR #if ENGINE_MINOR_VERSION > 13 +#if ENGINE_MINOR_VERSION < 23 PyObject *py_ue_anim_sequence_update_compressed_track_map_from_raw(ue_PyUObject * self, PyObject * args) { ue_py_check(self); @@ -117,6 +118,7 @@ PyObject *py_ue_anim_sequence_update_compressed_track_map_from_raw(ue_PyUObject Py_RETURN_NONE; } +#endif PyObject *py_ue_anim_sequence_get_raw_animation_data(ue_PyUObject * self, PyObject * args) diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp index e474fda19..0a9498d2a 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyFoliage.cpp @@ -37,8 +37,11 @@ PyObject *py_ue_get_foliage_types(ue_PyUObject *self, PyObject * args) PyObject *py_list = PyList_New(0); TArray FoliageTypes; - +#if ENGINE_MINOR_VERSION >=23 + foliage_actor->FoliageInfos.GetKeys(FoliageTypes); +#else foliage_actor->FoliageMeshes.GetKeys(FoliageTypes); +#endif for (UFoliageType *FoliageType : FoliageTypes) { @@ -68,12 +71,20 @@ PyObject *py_ue_get_foliage_instances(ue_PyUObject *self, PyObject * args) if (!foliage_type) return PyErr_Format(PyExc_Exception, "argument is not a UFoliageType"); +#if ENGINE_MINOR_VERSION >= 23 + if (!foliage_actor->FoliageInfos.Contains(foliage_type)) +#else if (!foliage_actor->FoliageMeshes.Contains(foliage_type)) +#endif { return PyErr_Format(PyExc_Exception, "specified UFoliageType not found in AInstancedFoliageActor"); } +#if ENGINE_MINOR_VERSION >= 23 + FFoliageInfo& info = foliage_actor->FoliageInfos[foliage_type].Get(); +#else FFoliageMeshInfo& info = foliage_actor->FoliageMeshes[foliage_type].Get(); +#endif PyObject *py_list = PyList_New(0); @@ -111,7 +122,11 @@ PyObject *py_ue_add_foliage_asset(ue_PyUObject *self, PyObject * args) AInstancedFoliageActor *ifa = AInstancedFoliageActor::GetInstancedFoliageActorForCurrentLevel(world, true); if (u_object->IsA()) { +#if ENGINE_MINOR_VERSION >= 23 + foliage_type = ifa->GetLocalFoliageTypeForSource(u_object); +#else foliage_type = ifa->GetLocalFoliageTypeForMesh((UStaticMesh *)u_object); +#endif if (!foliage_type) { ifa->AddMesh((UStaticMesh *)u_object, &foliage_type); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp index fbd27d2df..adacab7ec 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyLandscape.cpp @@ -8,35 +8,35 @@ #include "Runtime/Landscape/Classes/LandscapeInfo.h" #include "GameFramework/GameModeBase.h" -PyObject *py_ue_create_landscape_info(ue_PyUObject *self, PyObject * args) +PyObject* py_ue_create_landscape_info(ue_PyUObject* self, PyObject* args) { ue_py_check(self); - ALandscapeProxy *landscape = ue_py_check_type(self); + ALandscapeProxy* landscape = ue_py_check_type(self); if (!landscape) return PyErr_Format(PyExc_Exception, "uobject is not a ULandscapeProxy"); Py_RETURN_UOBJECT(landscape->CreateLandscapeInfo()); } -PyObject *py_ue_get_landscape_info(ue_PyUObject *self, PyObject * args) +PyObject* py_ue_get_landscape_info(ue_PyUObject* self, PyObject* args) { ue_py_check(self); - ALandscapeProxy *landscape = ue_py_check_type(self); + ALandscapeProxy* landscape = ue_py_check_type(self); if (!landscape) return PyErr_Format(PyExc_Exception, "uobject is not a ULandscapeProxy"); - ULandscapeInfo *info = landscape->GetLandscapeInfo(); + ULandscapeInfo* info = landscape->GetLandscapeInfo(); if (!info) Py_RETURN_NONE; Py_RETURN_UOBJECT(info); } -PyObject *py_ue_landscape_import(ue_PyUObject *self, PyObject * args) +PyObject* py_ue_landscape_import(ue_PyUObject* self, PyObject* args) { ue_py_check(self); @@ -51,7 +51,7 @@ PyObject *py_ue_landscape_import(ue_PyUObject *self, PyObject * args) if (!PyArg_ParseTuple(args, "iiiiy*|i:landscape_import", §ion_size, §ions_per_component, &component_x, &component_y, &heightmap_buffer, &layer_type)) return nullptr; - ALandscapeProxy *landscape = ue_py_check_type(self); + ALandscapeProxy* landscape = ue_py_check_type(self); if (!landscape) return PyErr_Format(PyExc_Exception, "uobject is not a ULandscapeProxy"); @@ -62,16 +62,29 @@ PyObject *py_ue_landscape_import(ue_PyUObject *self, PyObject * args) if (heightmap_buffer.len < (Py_ssize_t)(size_x * size_y * sizeof(uint16))) return PyErr_Format(PyExc_Exception, "not enough heightmap data, expecting %lu bytes", size_x * size_y * sizeof(uint16)); - uint16 *data = (uint16 *)heightmap_buffer.buf; + uint16* data = (uint16*)heightmap_buffer.buf; TArray infos; +#if ENGINE_MINOR_VERSION < 23 landscape->Import(FGuid::NewGuid(), 0, 0, size_x - 1, size_y - 1, sections_per_component, section_size, data, nullptr, infos, (ELandscapeImportAlphamapType)layer_type); +#else + TMap> HeightDataPerLayers; + TArray HeightData; + for (uint32 i = 0; i < (heightmap_buffer.len / sizeof(uint16)); i++) + { + HeightData.Add(data[i]); + } + HeightDataPerLayers.Add(FGuid(), HeightData); + TMap> MaterialLayersInfo; + MaterialLayersInfo.Add(FGuid(), infos); + landscape->Import(FGuid::NewGuid(), 0, 0, size_x - 1, size_y - 1, sections_per_component, section_size, HeightDataPerLayers, nullptr, MaterialLayersInfo, (ELandscapeImportAlphamapType)layer_type); +#endif Py_RETURN_NONE; } -PyObject *py_ue_landscape_export_to_raw_mesh(ue_PyUObject *self, PyObject * args) +PyObject* py_ue_landscape_export_to_raw_mesh(ue_PyUObject* self, PyObject* args) { ue_py_check(self); @@ -81,7 +94,7 @@ PyObject *py_ue_landscape_export_to_raw_mesh(ue_PyUObject *self, PyObject * args if (!PyArg_ParseTuple(args, "|i:landscape_import", &lod)) return nullptr; - ALandscapeProxy *landscape = ue_py_check_type(self); + ALandscapeProxy* landscape = ue_py_check_type(self); if (!landscape) return PyErr_Format(PyExc_Exception, "uobject is not a ULandscapeProxy"); diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp index 90b47da3a..c958094f6 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp @@ -505,7 +505,11 @@ PyObject *py_ue_static_mesh_set_collision_for_lod(ue_PyUObject *self, PyObject * enabled = true; } +#if ENGINE_MINOR_VERSION >= 23 + FMeshSectionInfo info = mesh->GetSectionInfoMap().Get(lod_index, material_index); +#else FMeshSectionInfo info = mesh->SectionInfoMap.Get(lod_index, material_index); +#endif info.bEnableCollision = enabled; mesh->SectionInfoMap.Set(lod_index, material_index, info); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyESlateEnums.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyESlateEnums.cpp index 4352312ba..7ffa2d05e 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyESlateEnums.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyESlateEnums.cpp @@ -80,7 +80,11 @@ void ue_python_init_eslate_enums(PyObject *ue_module) }; #if ENGINE_MINOR_VERSION > 15 +#if ENGINE_MINOR_VERSION >= 23 +#define ADD_NATIVE_ENUM(EnumType, EnumVal) add_native_enum(#EnumType "." #EnumVal, (uint8)EnumType::EnumVal) +#else #define ADD_NATIVE_ENUM(EnumType, EnumVal) add_native_enum(#EnumType "." #EnumVal, (uint8)EnumType::Type::EnumVal) +#endif ADD_NATIVE_ENUM(EUserInterfaceActionType, None); ADD_NATIVE_ENUM(EUserInterfaceActionType, Button); ADD_NATIVE_ENUM(EUserInterfaceActionType, ToggleButton); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp index 1dbab35cd..eb48a0631 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp @@ -18,7 +18,7 @@ -static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance *self) +static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance* self) { if (!self->foliage_actor.IsValid()) { @@ -32,7 +32,13 @@ static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance *self) return nullptr; } +#if ENGINE_MINOR_VERSION >= 23 + auto FoliageInfo = self->foliage_actor->FoliageInfos[self->foliage_type.Get()]; + FFoliageInfo& info = info; +#else + FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); +#endif if (self->instance_id >= 0 && self->instance_id < info.Instances.Num()) { @@ -43,25 +49,25 @@ static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance *self) return nullptr; } -static PyObject *ue_PyFFoliageInstance_str(ue_PyFFoliageInstance *self) +static PyObject* ue_PyFFoliageInstance_str(ue_PyFFoliageInstance* self) { return PyUnicode_FromFormat("", self->instance_id); } -static PyObject *py_ue_ffoliage_instance_get_location(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_location(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return py_ue_new_fvector(instance->Location); } -static int py_ue_ffoliage_instance_set_location(ue_PyFFoliageInstance *self, PyObject *value, void *closure) +static int py_ue_ffoliage_instance_set_location(ue_PyFFoliageInstance* self, PyObject* value, void* closure) { set_instance(self); if (value) { - ue_PyFVector *vec = py_ue_is_fvector(value); + ue_PyFVector* vec = py_ue_is_fvector(value); if (vec) { TArray instances; @@ -77,12 +83,12 @@ static int py_ue_ffoliage_instance_set_location(ue_PyFFoliageInstance *self, PyO return -1; } -static int py_ue_ffoliage_instance_set_rotation(ue_PyFFoliageInstance *self, PyObject *value, void *closure) +static int py_ue_ffoliage_instance_set_rotation(ue_PyFFoliageInstance* self, PyObject* value, void* closure) { set_instance(self); if (value) { - ue_PyFRotator *rot = py_ue_is_frotator(value); + ue_PyFRotator* rot = py_ue_is_frotator(value); if (rot) { TArray instances; @@ -98,56 +104,56 @@ static int py_ue_ffoliage_instance_set_rotation(ue_PyFFoliageInstance *self, PyO return -1; } -static PyObject *py_ue_ffoliage_instance_get_draw_scale3d(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_draw_scale3d(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return py_ue_new_fvector(instance->DrawScale3D); } -static PyObject *py_ue_ffoliage_instance_get_flags(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_flags(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return PyLong_FromUnsignedLong(instance->Flags); } -static PyObject *py_ue_ffoliage_instance_get_pre_align_rotation(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_pre_align_rotation(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return py_ue_new_frotator(instance->PreAlignRotation); } -static PyObject *py_ue_ffoliage_instance_get_rotation(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_rotation(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return py_ue_new_frotator(instance->Rotation); } -static PyObject *py_ue_ffoliage_instance_get_zoffset(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_zoffset(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return PyFloat_FromDouble(instance->ZOffset); } -static PyObject *py_ue_ffoliage_instance_get_procedural_guid(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_procedural_guid(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); FGuid guid = instance->ProceduralGuid; - return py_ue_new_owned_uscriptstruct(FindObject(ANY_PACKAGE, UTF8_TO_TCHAR((char *)"Guid")), (uint8 *)&guid); + return py_ue_new_owned_uscriptstruct(FindObject(ANY_PACKAGE, UTF8_TO_TCHAR((char*)"Guid")), (uint8*)& guid); } -static PyObject *py_ue_ffoliage_instance_get_base_id(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_base_id(ue_PyFFoliageInstance* self, void* closure) { get_instance(self); return PyLong_FromLong(instance->BaseId); } -static PyObject *py_ue_ffoliage_instance_get_instance_id(ue_PyFFoliageInstance *self, void *closure) +static PyObject* py_ue_ffoliage_instance_get_instance_id(ue_PyFFoliageInstance* self, void* closure) { return PyLong_FromLong(self->instance_id); } #if ENGINE_MINOR_VERSION > 19 -static PyObject *py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstance *self, void *closure) +static PyObject * py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstance * self, void* closure) { get_instance(self); Py_RETURN_UOBJECT(instance->BaseComponent); @@ -157,39 +163,39 @@ static PyObject *py_ue_ffoliage_instance_get_base_component(ue_PyFFoliageInstanc static PyGetSetDef ue_PyFFoliageInstance_getseters[] = { - { (char *)"location", (getter)py_ue_ffoliage_instance_get_location, (setter)py_ue_ffoliage_instance_set_location, (char *)"", NULL }, - { (char *)"draw_scale3d", (getter)py_ue_ffoliage_instance_get_draw_scale3d, nullptr, (char *)"", NULL }, - { (char *)"flags", (getter)py_ue_ffoliage_instance_get_flags, nullptr, (char *)"", NULL }, - { (char *)"pre_align_rotation", (getter)py_ue_ffoliage_instance_get_pre_align_rotation, nullptr, (char *)"", NULL }, - { (char *)"rotation", (getter)py_ue_ffoliage_instance_get_rotation, (setter)py_ue_ffoliage_instance_set_rotation, (char *)"", NULL }, - { (char *)"zoffset", (getter)py_ue_ffoliage_instance_get_zoffset, nullptr, (char *)"", NULL }, - { (char *)"procedural_guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, - { (char *)"guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char *)"", NULL }, - { (char *)"base_id", (getter)py_ue_ffoliage_instance_get_base_id, nullptr, (char *)"", NULL }, - { (char *)"instance_id", (getter)py_ue_ffoliage_instance_get_instance_id, nullptr, (char *)"", NULL }, + { (char*)"location", (getter)py_ue_ffoliage_instance_get_location, (setter)py_ue_ffoliage_instance_set_location, (char*)"", NULL }, + { (char*)"draw_scale3d", (getter)py_ue_ffoliage_instance_get_draw_scale3d, nullptr, (char*)"", NULL }, + { (char*)"flags", (getter)py_ue_ffoliage_instance_get_flags, nullptr, (char*)"", NULL }, + { (char*)"pre_align_rotation", (getter)py_ue_ffoliage_instance_get_pre_align_rotation, nullptr, (char*)"", NULL }, + { (char*)"rotation", (getter)py_ue_ffoliage_instance_get_rotation, (setter)py_ue_ffoliage_instance_set_rotation, (char*)"", NULL }, + { (char*)"zoffset", (getter)py_ue_ffoliage_instance_get_zoffset, nullptr, (char*)"", NULL }, + { (char*)"procedural_guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char*)"", NULL }, + { (char*)"guid", (getter)py_ue_ffoliage_instance_get_procedural_guid, nullptr, (char*)"", NULL }, + { (char*)"base_id", (getter)py_ue_ffoliage_instance_get_base_id, nullptr, (char*)"", NULL }, + { (char*)"instance_id", (getter)py_ue_ffoliage_instance_get_instance_id, nullptr, (char*)"", NULL }, #if ENGINE_MINOR_VERSION > 19 - { (char *)"base_component", (getter)py_ue_ffoliage_instance_get_base_component, nullptr, (char *)"", NULL }, + { (char*)"base_component", (getter)py_ue_ffoliage_instance_get_base_component, nullptr, (char*)"", NULL }, #endif { NULL } /* Sentinel */ }; -static PyObject *py_ue_ffoliage_instance_get_instance_world_transform(ue_PyFFoliageInstance *self, PyObject * args) +static PyObject* py_ue_ffoliage_instance_get_instance_world_transform(ue_PyFFoliageInstance* self, PyObject* args) { get_instance(self); return py_ue_new_ftransform(instance->GetInstanceWorldTransform()); } -static PyObject *py_ue_ffoliage_instance_align_to_normal(ue_PyFFoliageInstance *self, PyObject * args) +static PyObject* py_ue_ffoliage_instance_align_to_normal(ue_PyFFoliageInstance* self, PyObject* args) { get_instance(self); - PyObject *py_vec; + PyObject* py_vec; float align_max_angle = 0; if (!PyArg_ParseTuple(args, "O|f:align_to_normal", &py_vec, &align_max_angle)) return nullptr; - ue_PyFVector *vec = py_ue_is_fvector(py_vec); + ue_PyFVector* vec = py_ue_is_fvector(py_vec); if (!vec) { return PyErr_Format(PyExc_Exception, "argument is not an FVector"); @@ -244,7 +250,7 @@ static PyTypeObject ue_PyFFoliageInstanceType = { ue_PyFFoliageInstance_getseters, }; -void ue_python_init_ffoliage_instance(PyObject *ue_module) +void ue_python_init_ffoliage_instance(PyObject* ue_module) { ue_PyFFoliageInstanceType.tp_new = PyType_GenericNew; @@ -252,16 +258,16 @@ void ue_python_init_ffoliage_instance(PyObject *ue_module) return; Py_INCREF(&ue_PyFFoliageInstanceType); - PyModule_AddObject(ue_module, "FoliageInstance", (PyObject *)&ue_PyFFoliageInstanceType); + PyModule_AddObject(ue_module, "FoliageInstance", (PyObject*)& ue_PyFFoliageInstanceType); } -PyObject *py_ue_new_ffoliage_instance(AInstancedFoliageActor *foliage_actor, UFoliageType *foliage_type, int32 instance_id) +PyObject* py_ue_new_ffoliage_instance(AInstancedFoliageActor* foliage_actor, UFoliageType* foliage_type, int32 instance_id) { - ue_PyFFoliageInstance *ret = (ue_PyFFoliageInstance *)PyObject_New(ue_PyFFoliageInstance, &ue_PyFFoliageInstanceType); + ue_PyFFoliageInstance* ret = (ue_PyFFoliageInstance*)PyObject_New(ue_PyFFoliageInstance, &ue_PyFFoliageInstanceType); ret->foliage_actor = TWeakObjectPtr(foliage_actor); ret->foliage_type = TWeakObjectPtr(foliage_type); ret->instance_id = instance_id; - return (PyObject *)ret; + return (PyObject*)ret; } #endif \ No newline at end of file diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 51394b033..92376225e 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -18,7 +18,7 @@ public class UnrealEnginePython : ModuleRules private string[] windowsKnownPaths = { - "C:/Program Files/Python37", + // "C:/Program Files/Python37", "C:/Program Files/Python36", "C:/Program Files/Python35", "C:/Python27", From 038192d7814d1aee182766028640d238204fefa4 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 11 Sep 2019 05:27:13 +0200 Subject: [PATCH 148/151] completed porting to 4.23. fixes #777 --- .../Private/Slate/UEPySTextBlock.cpp | 4 ++++ Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp | 5 ++++- Source/UnrealEnginePython/Private/UEPyModule.cpp | 2 ++ .../UnrealEnginePython/Private/UObject/UEPyObject.cpp | 4 ++++ .../Private/Wrappers/UEPyFFoliageInstance.cpp | 11 +++++++++-- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySTextBlock.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySTextBlock.cpp index a994186a5..92df02d50 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySTextBlock.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySTextBlock.cpp @@ -70,7 +70,11 @@ static int ue_py_stext_block_init(ue_PySTextBlock *self, PyObject *args, PyObjec ue_py_slate_farguments_float("line_height_percentage", LineHeightPercentage); ue_py_slate_farguments_struct("margin", Margin, FMargin); ue_py_slate_farguments_float("min_desired_width", MinDesiredWidth); +#if ENGINE_MINOR_VERSION >= 23 + ue_py_slate_farguments_event("on_double_clicked", OnDoubleClicked, FPointerEventHandler, OnMouseEvent); +#else ue_py_slate_farguments_event("on_double_clicked", OnDoubleClicked, FOnClicked, OnClicked); +#endif ue_py_slate_farguments_flinear_color("shadow_color_and_opacity", ShadowColorAndOpacity); ue_py_slate_farguments_fvector2d("shadow_offset", ShadowOffset); ue_py_slate_farguments_text("text", Text); diff --git a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp index 0cc988240..2e705a303 100644 --- a/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp +++ b/Source/UnrealEnginePython/Private/Slate/UEPySlate.cpp @@ -1020,8 +1020,11 @@ class FPythonSlateCommands : public TCommands virtual void RegisterCommands() override { commands = MakeShareable(new FUICommandList); - +#if ENGINE_MINOR_VERSION >= 23 + MakeUICommand_InternalUseOnly(this, command, nullptr, *name, *name, TCHAR_TO_UTF8(*name), *name, *name, EUserInterfaceActionType::Button, FInputGesture()); +#else UI_COMMAND_Function(this, command, nullptr, *name, *name, TCHAR_TO_UTF8(*name), *name, *name, EUserInterfaceActionType::Button, FInputGesture()); +#endif commands->MapAction(command, FExecuteAction::CreateRaw(this, &FPythonSlateCommands::Callback), FCanExecuteAction()); } diff --git a/Source/UnrealEnginePython/Private/UEPyModule.cpp b/Source/UnrealEnginePython/Private/UEPyModule.cpp index b725ae7f0..56954d32e 100644 --- a/Source/UnrealEnginePython/Private/UEPyModule.cpp +++ b/Source/UnrealEnginePython/Private/UEPyModule.cpp @@ -744,7 +744,9 @@ static PyMethodDef ue_PyUObject_methods[] = { { "get_raw_animation_data", (PyCFunction)py_ue_anim_sequence_get_raw_animation_data, METH_VARARGS, "" }, { "get_raw_animation_track", (PyCFunction)py_ue_anim_sequence_get_raw_animation_track, METH_VARARGS, "" }, { "add_new_raw_track", (PyCFunction)py_ue_anim_sequence_add_new_raw_track, METH_VARARGS, "" }, +#if ENGINE_MINOR_VERSION <23 { "update_compressed_track_map_from_raw", (PyCFunction)py_ue_anim_sequence_update_compressed_track_map_from_raw, METH_VARARGS, "" }, +#endif { "update_raw_track", (PyCFunction)py_ue_anim_sequence_update_raw_track, METH_VARARGS, "" }, { "apply_raw_anim_changes", (PyCFunction)py_ue_anim_sequence_apply_raw_anim_changes, METH_VARARGS, "" }, { "add_key_to_sequence", (PyCFunction)py_ue_anim_add_key_to_sequence, METH_VARARGS, "" }, diff --git a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp index d11031775..3b2983b99 100644 --- a/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp +++ b/Source/UnrealEnginePython/Private/UObject/UEPyObject.cpp @@ -1084,7 +1084,11 @@ PyObject *py_ue_broadcast(ue_PyUObject *self, PyObject *args) if (auto casted_prop = Cast(u_property)) { +#if ENGINE_MINOR_VERSION >= 23 + FMulticastScriptDelegate multiscript_delegate = *casted_prop->GetMulticastDelegate(self->ue_object); +#else FMulticastScriptDelegate multiscript_delegate = casted_prop->GetPropertyValue_InContainer(self->ue_object); +#endif uint8 *parms = (uint8 *)FMemory_Alloca(casted_prop->SignatureFunction->PropertiesSize); FMemory::Memzero(parms, casted_prop->SignatureFunction->PropertiesSize); diff --git a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp index eb48a0631..2ed7ffa2d 100644 --- a/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp +++ b/Source/UnrealEnginePython/Private/Wrappers/UEPyFFoliageInstance.cpp @@ -33,8 +33,7 @@ static FFoliageInstance* get_foliage_instance(ue_PyFFoliageInstance* self) } #if ENGINE_MINOR_VERSION >= 23 - auto FoliageInfo = self->foliage_actor->FoliageInfos[self->foliage_type.Get()]; - FFoliageInfo& info = info; + FFoliageInfo& info = self->foliage_actor->FoliageInfos[self->foliage_type.Get()].Get(); #else FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); @@ -72,7 +71,11 @@ static int py_ue_ffoliage_instance_set_location(ue_PyFFoliageInstance* self, PyO { TArray instances; instances.Add(self->instance_id); +#if ENGINE_MINOR_VERSION >= 23 + FFoliageInfo& info = self->foliage_actor->FoliageInfos[self->foliage_type.Get()].Get(); +#else FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); +#endif info.PreMoveInstances(self->foliage_actor.Get(), instances); instance->Location = vec->vec; info.PostMoveInstances(self->foliage_actor.Get(), instances); @@ -93,7 +96,11 @@ static int py_ue_ffoliage_instance_set_rotation(ue_PyFFoliageInstance* self, PyO { TArray instances; instances.Add(self->instance_id); +#if ENGINE_MINOR_VERSION >= 23 + FFoliageInfo& info = self->foliage_actor->FoliageInfos[self->foliage_type.Get()].Get(); +#else FFoliageMeshInfo& info = self->foliage_actor->FoliageMeshes[self->foliage_type.Get()].Get(); +#endif info.PreMoveInstances(self->foliage_actor.Get(), instances); instance->Rotation = rot->rot; info.PostMoveInstances(self->foliage_actor.Get(), instances); From b0366cbada1e6b7c951258f35ad3868e45f19ca4 Mon Sep 17 00:00:00 2001 From: Hamilton Greene Date: Tue, 26 Nov 2019 23:21:34 -0500 Subject: [PATCH 149/151] Add ; to the end of the Linux UnrealEnginePython.Build.cs pythonHome example Adding for consistency with the other examples. --- Source/UnrealEnginePython/UnrealEnginePython.Build.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs index 92376225e..a6fe71946 100644 --- a/Source/UnrealEnginePython/UnrealEnginePython.Build.cs +++ b/Source/UnrealEnginePython/UnrealEnginePython.Build.cs @@ -14,7 +14,7 @@ public class UnrealEnginePython : ModuleRules // this is an example for Homebrew on Mac //private string pythonHome = "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/"; // on Linux an include;libs syntax is expected: - //private string pythonHome = "/usr/local/include/python3.6;/usr/local/lib/libpython3.6.so" + //private string pythonHome = "/usr/local/include/python3.6;/usr/local/lib/libpython3.6.so"; private string[] windowsKnownPaths = { From bb2f38df55f0f860b161c5bf54554f36eebb5f38 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Wed, 4 Mar 2020 11:31:52 +0100 Subject: [PATCH 150/151] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ee231ff61..a7fa3522a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,16 @@ Funny snippets for working with StaticMesh and SkeletalMesh assets: https://gith More tutorials: https://github.com/20tab/UnrealEnginePython/tree/master/tutorials +# Project Status (IMPORTANT) + +Currently (as march 2020) the project is basically dead: between 2016 and 2018 20tab invested lot of resources in it but unfortunately epic (during 2018) decided to suddenly release its own implementation and the request made for a megagrant in 2019 by the original plugin author was rejected too. + +Albeit this plugin (still) has way more features than the Epic one, this is not enough to allow 20tab to continue investing in it. + +If you are interested in game logic scripting/modding in Unreal Engine 4 consider giving a look at the LuaMachine project (https://github.com/rdeioris/LuaMachine/). + +The plugin should work up to unreal engine version 4.23 and there are forks/pull requests for 4.24. Since 4.25 Epic refactored the UProperty subsystem, so if you want to port the plugin to a version >= 4.25 you should make a lot of search & replace (basically renaming UProperty to FProperty and Cast to CastField should be enough) + # How and Why ? This is a plugin embedding a whole Python VM (versions 3.x [the default and suggested one] and 2.7) In Unreal Engine 4 (both the editor and runtime). From 4b5da5bf4ca598e8d0f67eb938749bc381a67d6c Mon Sep 17 00:00:00 2001 From: Gabriele Giaccari Date: Fri, 17 Apr 2020 09:38:21 +0200 Subject: [PATCH 151/151] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a7fa3522a..68ed706f1 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ More tutorials: https://github.com/20tab/UnrealEnginePython/tree/master/tutorial # Project Status (IMPORTANT) -Currently (as march 2020) the project is basically dead: between 2016 and 2018 20tab invested lot of resources in it but unfortunately epic (during 2018) decided to suddenly release its own implementation and the request made for a megagrant in 2019 by the original plugin author was rejected too. +Currently (as april 2020) the project is on hold: between 2016 and 2018 20tab invested lot of resources in it but unfortunately epic (during 2018) decided to suddenly release its own implementation and the request made for a megagrant in 2019 by the original plugin author was rejected too. -Albeit this plugin (still) has way more features than the Epic one, this is not enough to allow 20tab to continue investing in it. +As this plugin (still) has way more features than the Epic one and many contributors, **we are currently looking for new maintainers** helping us to keep it alive, checking PR and issues. If you are interested in working on it a few hours a week, drop us a line at info@20tab.com to discuss about it. If you are interested in game logic scripting/modding in Unreal Engine 4 consider giving a look at the LuaMachine project (https://github.com/rdeioris/LuaMachine/).